<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://wwoss.direct.quickconnect.to/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>worldwide open-source software - software:development:web:docs:web:javascript:javascript:jquery</title>
        <description></description>
        <link>https://wwoss.direct.quickconnect.to/</link>
        <lastBuildDate>Sat, 11 Apr 2026 06:49:08 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:logo.png</url>
            <title>worldwide open-source software</title>
            <link>https://wwoss.direct.quickconnect.to/</link>
        </image>
        <item>
            <title>jquery-3.7.1.js</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=software:development:web:docs:web:javascript:javascript:jquery:jquery-3.7.1.js&amp;rev=1768043058</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;jquery-371js&quot;&gt;jquery-3.7.1.js&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=software:development:web:docs:web:javascript:javascript:jquery:jquery-3.7.1.js&amp;amp;codeblock=0&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_js&quot;&gt;jquery-3.7.1.js&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code js&quot;&gt;/*!
 * jQuery JavaScript Library v3.7.1
 * https://jquery.com/
 *
 * Copyright OpenJS Foundation and other contributors
 * Released under the MIT license
 * https://jquery.org/license
 *
 * Date: 2023-08-28T13:37Z
 */
( function( global, factory ) {
&amp;nbsp;
	&amp;quot;use strict&amp;quot;;
&amp;nbsp;
	if ( typeof module === &amp;quot;object&amp;quot; &amp;amp;&amp;amp; typeof module.exports === &amp;quot;object&amp;quot; ) {
&amp;nbsp;
		// For CommonJS and CommonJS-like environments where a proper `window`
		// is present, execute the factory and get jQuery.
		// For environments that do not have a `window` with a `document`
		// (such as Node.js), expose a factory as module.exports.
		// This accentuates the need for the creation of a real `window`.
		// e.g. var jQuery = require(&amp;quot;jquery&amp;quot;)(window);
		// See ticket trac-14549 for more info.
		module.exports = global.document ?
			factory( global, true ) :
			function( w ) {
				if ( !w.document ) {
					throw new Error( &amp;quot;jQuery requires a window with a document&amp;quot; );
				}
				return factory( w );
			};
	} else {
		factory( global );
	}
&amp;nbsp;
// Pass this if window is not defined yet
} )( typeof window !== &amp;quot;undefined&amp;quot; ? window : this, function( window, noGlobal ) {
&amp;nbsp;
// Edge &amp;lt;= 12 - 13+, Firefox &amp;lt;=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
// enough that all such attempts are guarded in a try block.
&amp;quot;use strict&amp;quot;;
&amp;nbsp;
var arr = [];
&amp;nbsp;
var getProto = Object.getPrototypeOf;
&amp;nbsp;
var slice = arr.slice;
&amp;nbsp;
var flat = arr.flat ? function( array ) {
	return arr.flat.call( array );
} : function( array ) {
	return arr.concat.apply( [], array );
};
&amp;nbsp;
&amp;nbsp;
var push = arr.push;
&amp;nbsp;
var indexOf = arr.indexOf;
&amp;nbsp;
var class2type = {};
&amp;nbsp;
var toString = class2type.toString;
&amp;nbsp;
var hasOwn = class2type.hasOwnProperty;
&amp;nbsp;
var fnToString = hasOwn.toString;
&amp;nbsp;
var ObjectFunctionString = fnToString.call( Object );
&amp;nbsp;
var support = {};
&amp;nbsp;
var isFunction = function isFunction( obj ) {
&amp;nbsp;
		// Support: Chrome &amp;lt;=57, Firefox &amp;lt;=52
		// In some browsers, typeof returns &amp;quot;function&amp;quot; for HTML &amp;lt;object&amp;gt; elements
		// (i.e., `typeof document.createElement( &amp;quot;object&amp;quot; ) === &amp;quot;function&amp;quot;`).
		// We don&#039;t want to classify *any* DOM node as a function.
		// Support: QtWeb &amp;lt;=3.8.5, WebKit &amp;lt;=534.34, wkhtmltopdf tool &amp;lt;=0.12.5
		// Plus for old WebKit, typeof returns &amp;quot;function&amp;quot; for HTML collections
		// (e.g., `typeof document.getElementsByTagName(&amp;quot;div&amp;quot;) === &amp;quot;function&amp;quot;`). (gh-4756)
		return typeof obj === &amp;quot;function&amp;quot; &amp;amp;&amp;amp; typeof obj.nodeType !== &amp;quot;number&amp;quot; &amp;amp;&amp;amp;
			typeof obj.item !== &amp;quot;function&amp;quot;;
	};
&amp;nbsp;
&amp;nbsp;
var isWindow = function isWindow( obj ) {
		return obj != null &amp;amp;&amp;amp; obj === obj.window;
	};
&amp;nbsp;
&amp;nbsp;
var document = window.document;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
	var preservedScriptAttributes = {
		type: true,
		src: true,
		nonce: true,
		noModule: true
	};
&amp;nbsp;
	function DOMEval( code, node, doc ) {
		doc = doc || document;
&amp;nbsp;
		var i, val,
			script = doc.createElement( &amp;quot;script&amp;quot; );
&amp;nbsp;
		script.text = code;
		if ( node ) {
			for ( i in preservedScriptAttributes ) {
&amp;nbsp;
				// Support: Firefox 64+, Edge 18+
				// Some browsers don&#039;t support the &amp;quot;nonce&amp;quot; property on scripts.
				// On the other hand, just using `getAttribute` is not enough as
				// the `nonce` attribute is reset to an empty string whenever it
				// becomes browsing-context connected.
				// See https://github.com/whatwg/html/issues/2369
				// See https://html.spec.whatwg.org/#nonce-attributes
				// The `node.getAttribute` check was added for the sake of
				// `jQuery.globalEval` so that it can fake a nonce-containing node
				// via an object.
				val = node[ i ] || node.getAttribute &amp;amp;&amp;amp; node.getAttribute( i );
				if ( val ) {
					script.setAttribute( i, val );
				}
			}
		}
		doc.head.appendChild( script ).parentNode.removeChild( script );
	}
&amp;nbsp;
&amp;nbsp;
function toType( obj ) {
	if ( obj == null ) {
		return obj + &amp;quot;&amp;quot;;
	}
&amp;nbsp;
	// Support: Android &amp;lt;=2.3 only (functionish RegExp)
	return typeof obj === &amp;quot;object&amp;quot; || typeof obj === &amp;quot;function&amp;quot; ?
		class2type[ toString.call( obj ) ] || &amp;quot;object&amp;quot; :
		typeof obj;
}
/* global Symbol */
// Defining this global in .eslintrc.json would create a danger of using the global
// unguarded in another place, it seems safer to define global only for this module
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
var version = &amp;quot;3.7.1&amp;quot;,
&amp;nbsp;
	rhtmlSuffix = /HTML$/i,
&amp;nbsp;
	// Define a local copy of jQuery
	jQuery = function( selector, context ) {
&amp;nbsp;
		// The jQuery object is actually just the init constructor &#039;enhanced&#039;
		// Need init if jQuery is called (just allow error to be thrown if not included)
		return new jQuery.fn.init( selector, context );
	};
&amp;nbsp;
jQuery.fn = jQuery.prototype = {
&amp;nbsp;
	// The current version of jQuery being used
	jquery: version,
&amp;nbsp;
	constructor: jQuery,
&amp;nbsp;
	// The default length of a jQuery object is 0
	length: 0,
&amp;nbsp;
	toArray: function() {
		return slice.call( this );
	},
&amp;nbsp;
	// Get the Nth element in the matched element set OR
	// Get the whole matched element set as a clean array
	get: function( num ) {
&amp;nbsp;
		// Return all the elements in a clean array
		if ( num == null ) {
			return slice.call( this );
		}
&amp;nbsp;
		// Return just the one element from the set
		return num &amp;lt; 0 ? this[ num + this.length ] : this[ num ];
	},
&amp;nbsp;
	// Take an array of elements and push it onto the stack
	// (returning the new matched element set)
	pushStack: function( elems ) {
&amp;nbsp;
		// Build a new jQuery matched element set
		var ret = jQuery.merge( this.constructor(), elems );
&amp;nbsp;
		// Add the old object onto the stack (as a reference)
		ret.prevObject = this;
&amp;nbsp;
		// Return the newly-formed element set
		return ret;
	},
&amp;nbsp;
	// Execute a callback for every element in the matched set.
	each: function( callback ) {
		return jQuery.each( this, callback );
	},
&amp;nbsp;
	map: function( callback ) {
		return this.pushStack( jQuery.map( this, function( elem, i ) {
			return callback.call( elem, i, elem );
		} ) );
	},
&amp;nbsp;
	slice: function() {
		return this.pushStack( slice.apply( this, arguments ) );
	},
&amp;nbsp;
	first: function() {
		return this.eq( 0 );
	},
&amp;nbsp;
	last: function() {
		return this.eq( -1 );
	},
&amp;nbsp;
	even: function() {
		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
			return ( i + 1 ) % 2;
		} ) );
	},
&amp;nbsp;
	odd: function() {
		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
			return i % 2;
		} ) );
	},
&amp;nbsp;
	eq: function( i ) {
		var len = this.length,
			j = +i + ( i &amp;lt; 0 ? len : 0 );
		return this.pushStack( j &amp;gt;= 0 &amp;amp;&amp;amp; j &amp;lt; len ? [ this[ j ] ] : [] );
	},
&amp;nbsp;
	end: function() {
		return this.prevObject || this.constructor();
	},
&amp;nbsp;
	// For internal use only.
	// Behaves like an Array&#039;s method, not like a jQuery method.
	push: push,
	sort: arr.sort,
	splice: arr.splice
};
&amp;nbsp;
jQuery.extend = jQuery.fn.extend = function() {
	var options, name, src, copy, copyIsArray, clone,
		target = arguments[ 0 ] || {},
		i = 1,
		length = arguments.length,
		deep = false;
&amp;nbsp;
	// Handle a deep copy situation
	if ( typeof target === &amp;quot;boolean&amp;quot; ) {
		deep = target;
&amp;nbsp;
		// Skip the boolean and the target
		target = arguments[ i ] || {};
		i++;
	}
&amp;nbsp;
	// Handle case when target is a string or something (possible in deep copy)
	if ( typeof target !== &amp;quot;object&amp;quot; &amp;amp;&amp;amp; !isFunction( target ) ) {
		target = {};
	}
&amp;nbsp;
	// Extend jQuery itself if only one argument is passed
	if ( i === length ) {
		target = this;
		i--;
	}
&amp;nbsp;
	for ( ; i &amp;lt; length; i++ ) {
&amp;nbsp;
		// Only deal with non-null/undefined values
		if ( ( options = arguments[ i ] ) != null ) {
&amp;nbsp;
			// Extend the base object
			for ( name in options ) {
				copy = options[ name ];
&amp;nbsp;
				// Prevent Object.prototype pollution
				// Prevent never-ending loop
				if ( name === &amp;quot;__proto__&amp;quot; || target === copy ) {
					continue;
				}
&amp;nbsp;
				// Recurse if we&#039;re merging plain objects or arrays
				if ( deep &amp;amp;&amp;amp; copy &amp;amp;&amp;amp; ( jQuery.isPlainObject( copy ) ||
					( copyIsArray = Array.isArray( copy ) ) ) ) {
					src = target[ name ];
&amp;nbsp;
					// Ensure proper type for the source value
					if ( copyIsArray &amp;amp;&amp;amp; !Array.isArray( src ) ) {
						clone = [];
					} else if ( !copyIsArray &amp;amp;&amp;amp; !jQuery.isPlainObject( src ) ) {
						clone = {};
					} else {
						clone = src;
					}
					copyIsArray = false;
&amp;nbsp;
					// Never move original objects, clone them
					target[ name ] = jQuery.extend( deep, clone, copy );
&amp;nbsp;
				// Don&#039;t bring in undefined values
				} else if ( copy !== undefined ) {
					target[ name ] = copy;
				}
			}
		}
	}
&amp;nbsp;
	// Return the modified object
	return target;
};
&amp;nbsp;
jQuery.extend( {
&amp;nbsp;
	// Unique for each copy of jQuery on the page
	expando: &amp;quot;jQuery&amp;quot; + ( version + Math.random() ).replace( /\D/g, &amp;quot;&amp;quot; ),
&amp;nbsp;
	// Assume jQuery is ready without the ready module
	isReady: true,
&amp;nbsp;
	error: function( msg ) {
		throw new Error( msg );
	},
&amp;nbsp;
	noop: function() {},
&amp;nbsp;
	isPlainObject: function( obj ) {
		var proto, Ctor;
&amp;nbsp;
		// Detect obvious negatives
		// Use toString instead of jQuery.type to catch host objects
		if ( !obj || toString.call( obj ) !== &amp;quot;[object Object]&amp;quot; ) {
			return false;
		}
&amp;nbsp;
		proto = getProto( obj );
&amp;nbsp;
		// Objects with no prototype (e.g., `Object.create( null )`) are plain
		if ( !proto ) {
			return true;
		}
&amp;nbsp;
		// Objects with prototype are plain iff they were constructed by a global Object function
		Ctor = hasOwn.call( proto, &amp;quot;constructor&amp;quot; ) &amp;amp;&amp;amp; proto.constructor;
		return typeof Ctor === &amp;quot;function&amp;quot; &amp;amp;&amp;amp; fnToString.call( Ctor ) === ObjectFunctionString;
	},
&amp;nbsp;
	isEmptyObject: function( obj ) {
		var name;
&amp;nbsp;
		for ( name in obj ) {
			return false;
		}
		return true;
	},
&amp;nbsp;
	// Evaluates a script in a provided context; falls back to the global one
	// if not specified.
	globalEval: function( code, options, doc ) {
		DOMEval( code, { nonce: options &amp;amp;&amp;amp; options.nonce }, doc );
	},
&amp;nbsp;
	each: function( obj, callback ) {
		var length, i = 0;
&amp;nbsp;
		if ( isArrayLike( obj ) ) {
			length = obj.length;
			for ( ; i &amp;lt; length; i++ ) {
				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
					break;
				}
			}
		} else {
			for ( i in obj ) {
				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
					break;
				}
			}
		}
&amp;nbsp;
		return obj;
	},
&amp;nbsp;
&amp;nbsp;
	// Retrieve the text value of an array of DOM nodes
	text: function( elem ) {
		var node,
			ret = &amp;quot;&amp;quot;,
			i = 0,
			nodeType = elem.nodeType;
&amp;nbsp;
		if ( !nodeType ) {
&amp;nbsp;
			// If no nodeType, this is expected to be an array
			while ( ( node = elem[ i++ ] ) ) {
&amp;nbsp;
				// Do not traverse comment nodes
				ret += jQuery.text( node );
			}
		}
		if ( nodeType === 1 || nodeType === 11 ) {
			return elem.textContent;
		}
		if ( nodeType === 9 ) {
			return elem.documentElement.textContent;
		}
		if ( nodeType === 3 || nodeType === 4 ) {
			return elem.nodeValue;
		}
&amp;nbsp;
		// Do not include comment or processing instruction nodes
&amp;nbsp;
		return ret;
	},
&amp;nbsp;
	// results is for internal usage only
	makeArray: function( arr, results ) {
		var ret = results || [];
&amp;nbsp;
		if ( arr != null ) {
			if ( isArrayLike( Object( arr ) ) ) {
				jQuery.merge( ret,
					typeof arr === &amp;quot;string&amp;quot; ?
						[ arr ] : arr
				);
			} else {
				push.call( ret, arr );
			}
		}
&amp;nbsp;
		return ret;
	},
&amp;nbsp;
	inArray: function( elem, arr, i ) {
		return arr == null ? -1 : indexOf.call( arr, elem, i );
	},
&amp;nbsp;
	isXMLDoc: function( elem ) {
		var namespace = elem &amp;amp;&amp;amp; elem.namespaceURI,
			docElem = elem &amp;amp;&amp;amp; ( elem.ownerDocument || elem ).documentElement;
&amp;nbsp;
		// Assume HTML when documentElement doesn&#039;t yet exist, such as inside
		// document fragments.
		return !rhtmlSuffix.test( namespace || docElem &amp;amp;&amp;amp; docElem.nodeName || &amp;quot;HTML&amp;quot; );
	},
&amp;nbsp;
	// Support: Android &amp;lt;=4.0 only, PhantomJS 1 only
	// push.apply(_, arraylike) throws on ancient WebKit
	merge: function( first, second ) {
		var len = +second.length,
			j = 0,
			i = first.length;
&amp;nbsp;
		for ( ; j &amp;lt; len; j++ ) {
			first[ i++ ] = second[ j ];
		}
&amp;nbsp;
		first.length = i;
&amp;nbsp;
		return first;
	},
&amp;nbsp;
	grep: function( elems, callback, invert ) {
		var callbackInverse,
			matches = [],
			i = 0,
			length = elems.length,
			callbackExpect = !invert;
&amp;nbsp;
		// Go through the array, only saving the items
		// that pass the validator function
		for ( ; i &amp;lt; length; i++ ) {
			callbackInverse = !callback( elems[ i ], i );
			if ( callbackInverse !== callbackExpect ) {
				matches.push( elems[ i ] );
			}
		}
&amp;nbsp;
		return matches;
	},
&amp;nbsp;
	// arg is for internal usage only
	map: function( elems, callback, arg ) {
		var length, value,
			i = 0,
			ret = [];
&amp;nbsp;
		// Go through the array, translating each of the items to their new values
		if ( isArrayLike( elems ) ) {
			length = elems.length;
			for ( ; i &amp;lt; length; i++ ) {
				value = callback( elems[ i ], i, arg );
&amp;nbsp;
				if ( value != null ) {
					ret.push( value );
				}
			}
&amp;nbsp;
		// Go through every key on the object,
		} else {
			for ( i in elems ) {
				value = callback( elems[ i ], i, arg );
&amp;nbsp;
				if ( value != null ) {
					ret.push( value );
				}
			}
		}
&amp;nbsp;
		// Flatten any nested arrays
		return flat( ret );
	},
&amp;nbsp;
	// A global GUID counter for objects
	guid: 1,
&amp;nbsp;
	// jQuery.support is not used in Core but other projects attach their
	// properties to it so it needs to exist.
	support: support
} );
&amp;nbsp;
if ( typeof Symbol === &amp;quot;function&amp;quot; ) {
	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
}
&amp;nbsp;
// Populate the class2type map
jQuery.each( &amp;quot;Boolean Number String Function Array Date RegExp Object Error Symbol&amp;quot;.split( &amp;quot; &amp;quot; ),
	function( _i, name ) {
		class2type[ &amp;quot;[object &amp;quot; + name + &amp;quot;]&amp;quot; ] = name.toLowerCase();
	} );
&amp;nbsp;
function isArrayLike( obj ) {
&amp;nbsp;
	// Support: real iOS 8.2 only (not reproducible in simulator)
	// `in` check used to prevent JIT error (gh-2145)
	// hasOwn isn&#039;t used here due to false negatives
	// regarding Nodelist length in IE
	var length = !!obj &amp;amp;&amp;amp; &amp;quot;length&amp;quot; in obj &amp;amp;&amp;amp; obj.length,
		type = toType( obj );
&amp;nbsp;
	if ( isFunction( obj ) || isWindow( obj ) ) {
		return false;
	}
&amp;nbsp;
	return type === &amp;quot;array&amp;quot; || length === 0 ||
		typeof length === &amp;quot;number&amp;quot; &amp;amp;&amp;amp; length &amp;gt; 0 &amp;amp;&amp;amp; ( length - 1 ) in obj;
}
&amp;nbsp;
&amp;nbsp;
function nodeName( elem, name ) {
&amp;nbsp;
	return elem.nodeName &amp;amp;&amp;amp; elem.nodeName.toLowerCase() === name.toLowerCase();
&amp;nbsp;
}
var pop = arr.pop;
&amp;nbsp;
&amp;nbsp;
var sort = arr.sort;
&amp;nbsp;
&amp;nbsp;
var splice = arr.splice;
&amp;nbsp;
&amp;nbsp;
var whitespace = &amp;quot;[\\x20\\t\\r\\n\\f]&amp;quot;;
&amp;nbsp;
&amp;nbsp;
var rtrimCSS = new RegExp(
	&amp;quot;^&amp;quot; + whitespace + &amp;quot;+|((?:^|[^\\\\])(?:\\\\.)*)&amp;quot; + whitespace + &amp;quot;+$&amp;quot;,
	&amp;quot;g&amp;quot;
);
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// Note: an element does not contain itself
jQuery.contains = function( a, b ) {
	var bup = b &amp;amp;&amp;amp; b.parentNode;
&amp;nbsp;
	return a === bup || !!( bup &amp;amp;&amp;amp; bup.nodeType === 1 &amp;amp;&amp;amp; (
&amp;nbsp;
		// Support: IE 9 - 11+
		// IE doesn&#039;t have `contains` on SVG.
		a.contains ?
			a.contains( bup ) :
			a.compareDocumentPosition &amp;amp;&amp;amp; a.compareDocumentPosition( bup ) &amp;amp; 16
	) );
};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// CSS string/identifier serialization
// https://drafts.csswg.org/cssom/#common-serializing-idioms
var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
&amp;nbsp;
function fcssescape( ch, asCodePoint ) {
	if ( asCodePoint ) {
&amp;nbsp;
		// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
		if ( ch === &amp;quot;\0&amp;quot; ) {
			return &amp;quot;\uFFFD&amp;quot;;
		}
&amp;nbsp;
		// Control characters and (dependent upon position) numbers get escaped as code points
		return ch.slice( 0, -1 ) + &amp;quot;\\&amp;quot; + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + &amp;quot; &amp;quot;;
	}
&amp;nbsp;
	// Other potentially-special ASCII characters get backslash-escaped
	return &amp;quot;\\&amp;quot; + ch;
}
&amp;nbsp;
jQuery.escapeSelector = function( sel ) {
	return ( sel + &amp;quot;&amp;quot; ).replace( rcssescape, fcssescape );
};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
var preferredDoc = document,
	pushNative = push;
&amp;nbsp;
( function() {
&amp;nbsp;
var i,
	Expr,
	outermostContext,
	sortInput,
	hasDuplicate,
	push = pushNative,
&amp;nbsp;
	// Local document vars
	document,
	documentElement,
	documentIsHTML,
	rbuggyQSA,
	matches,
&amp;nbsp;
	// Instance-specific data
	expando = jQuery.expando,
	dirruns = 0,
	done = 0,
	classCache = createCache(),
	tokenCache = createCache(),
	compilerCache = createCache(),
	nonnativeSelectorCache = createCache(),
	sortOrder = function( a, b ) {
		if ( a === b ) {
			hasDuplicate = true;
		}
		return 0;
	},
&amp;nbsp;
	booleans = &amp;quot;checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|&amp;quot; +
		&amp;quot;loop|multiple|open|readonly|required|scoped&amp;quot;,
&amp;nbsp;
	// Regular expressions
&amp;nbsp;
	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
	identifier = &amp;quot;(?:\\\\[\\da-fA-F]{1,6}&amp;quot; + whitespace +
		&amp;quot;?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+&amp;quot;,
&amp;nbsp;
	// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors
	attributes = &amp;quot;\\[&amp;quot; + whitespace + &amp;quot;*(&amp;quot; + identifier + &amp;quot;)(?:&amp;quot; + whitespace +
&amp;nbsp;
		// Operator (capture 2)
		&amp;quot;*([*^$|!~]?=)&amp;quot; + whitespace +
&amp;nbsp;
		// &amp;quot;Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]&amp;quot;
		&amp;quot;*(?:&#039;((?:\\\\.|[^\\\\&#039;])*)&#039;|\&amp;quot;((?:\\\\.|[^\\\\\&amp;quot;])*)\&amp;quot;|(&amp;quot; + identifier + &amp;quot;))|)&amp;quot; +
		whitespace + &amp;quot;*\\]&amp;quot;,
&amp;nbsp;
	pseudos = &amp;quot;:(&amp;quot; + identifier + &amp;quot;)(?:\\((&amp;quot; +
&amp;nbsp;
		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
		// 1. quoted (capture 3; capture 4 or capture 5)
		&amp;quot;(&#039;((?:\\\\.|[^\\\\&#039;])*)&#039;|\&amp;quot;((?:\\\\.|[^\\\\\&amp;quot;])*)\&amp;quot;)|&amp;quot; +
&amp;nbsp;
		// 2. simple (capture 6)
		&amp;quot;((?:\\\\.|[^\\\\()[\\]]|&amp;quot; + attributes + &amp;quot;)*)|&amp;quot; +
&amp;nbsp;
		// 3. anything else (capture 2)
		&amp;quot;.*&amp;quot; +
		&amp;quot;)\\)|)&amp;quot;,
&amp;nbsp;
	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
	rwhitespace = new RegExp( whitespace + &amp;quot;+&amp;quot;, &amp;quot;g&amp;quot; ),
&amp;nbsp;
	rcomma = new RegExp( &amp;quot;^&amp;quot; + whitespace + &amp;quot;*,&amp;quot; + whitespace + &amp;quot;*&amp;quot; ),
	rleadingCombinator = new RegExp( &amp;quot;^&amp;quot; + whitespace + &amp;quot;*([&amp;gt;+~]|&amp;quot; + whitespace + &amp;quot;)&amp;quot; +
		whitespace + &amp;quot;*&amp;quot; ),
	rdescend = new RegExp( whitespace + &amp;quot;|&amp;gt;&amp;quot; ),
&amp;nbsp;
	rpseudo = new RegExp( pseudos ),
	ridentifier = new RegExp( &amp;quot;^&amp;quot; + identifier + &amp;quot;$&amp;quot; ),
&amp;nbsp;
	matchExpr = {
		ID: new RegExp( &amp;quot;^#(&amp;quot; + identifier + &amp;quot;)&amp;quot; ),
		CLASS: new RegExp( &amp;quot;^\\.(&amp;quot; + identifier + &amp;quot;)&amp;quot; ),
		TAG: new RegExp( &amp;quot;^(&amp;quot; + identifier + &amp;quot;|[*])&amp;quot; ),
		ATTR: new RegExp( &amp;quot;^&amp;quot; + attributes ),
		PSEUDO: new RegExp( &amp;quot;^&amp;quot; + pseudos ),
		CHILD: new RegExp(
			&amp;quot;^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(&amp;quot; +
				whitespace + &amp;quot;*(even|odd|(([+-]|)(\\d*)n|)&amp;quot; + whitespace + &amp;quot;*(?:([+-]|)&amp;quot; +
				whitespace + &amp;quot;*(\\d+)|))&amp;quot; + whitespace + &amp;quot;*\\)|)&amp;quot;, &amp;quot;i&amp;quot; ),
		bool: new RegExp( &amp;quot;^(?:&amp;quot; + booleans + &amp;quot;)$&amp;quot;, &amp;quot;i&amp;quot; ),
&amp;nbsp;
		// For use in libraries implementing .is()
		// We use this for POS matching in `select`
		needsContext: new RegExp( &amp;quot;^&amp;quot; + whitespace +
			&amp;quot;*[&amp;gt;+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(&amp;quot; + whitespace +
			&amp;quot;*((?:-\\d)?\\d*)&amp;quot; + whitespace + &amp;quot;*\\)|)(?=[^-]|$)&amp;quot;, &amp;quot;i&amp;quot; )
	},
&amp;nbsp;
	rinputs = /^(?:input|select|textarea|button)$/i,
	rheader = /^h\d$/i,
&amp;nbsp;
	// Easily-parseable/retrievable ID or TAG or CLASS selectors
	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
&amp;nbsp;
	rsibling = /[+~]/,
&amp;nbsp;
	// CSS escapes
	// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters
	runescape = new RegExp( &amp;quot;\\\\[\\da-fA-F]{1,6}&amp;quot; + whitespace +
		&amp;quot;?|\\\\([^\\r\\n\\f])&amp;quot;, &amp;quot;g&amp;quot; ),
	funescape = function( escape, nonHex ) {
		var high = &amp;quot;0x&amp;quot; + escape.slice( 1 ) - 0x10000;
&amp;nbsp;
		if ( nonHex ) {
&amp;nbsp;
			// Strip the backslash prefix from a non-hex escape sequence
			return nonHex;
		}
&amp;nbsp;
		// Replace a hexadecimal escape sequence with the encoded Unicode code point
		// Support: IE &amp;lt;=11+
		// For values outside the Basic Multilingual Plane (BMP), manually construct a
		// surrogate pair
		return high &amp;lt; 0 ?
			String.fromCharCode( high + 0x10000 ) :
			String.fromCharCode( high &amp;gt;&amp;gt; 10 | 0xD800, high &amp;amp; 0x3FF | 0xDC00 );
	},
&amp;nbsp;
	// Used for iframes; see `setDocument`.
	// Support: IE 9 - 11+, Edge 12 - 18+
	// Removing the function wrapper causes a &amp;quot;Permission Denied&amp;quot;
	// error in IE/Edge.
	unloadHandler = function() {
		setDocument();
	},
&amp;nbsp;
	inDisabledFieldset = addCombinator(
		function( elem ) {
			return elem.disabled === true &amp;amp;&amp;amp; nodeName( elem, &amp;quot;fieldset&amp;quot; );
		},
		{ dir: &amp;quot;parentNode&amp;quot;, next: &amp;quot;legend&amp;quot; }
	);
&amp;nbsp;
// Support: IE &amp;lt;=9 only
// Accessing document.activeElement can throw unexpectedly
// https://bugs.jquery.com/ticket/13393
function safeActiveElement() {
	try {
		return document.activeElement;
	} catch ( err ) { }
}
&amp;nbsp;
// Optimize for push.apply( _, NodeList )
try {
	push.apply(
		( arr = slice.call( preferredDoc.childNodes ) ),
		preferredDoc.childNodes
	);
&amp;nbsp;
	// Support: Android &amp;lt;=4.0
	// Detect silently failing push.apply
	// eslint-disable-next-line no-unused-expressions
	arr[ preferredDoc.childNodes.length ].nodeType;
} catch ( e ) {
	push = {
		apply: function( target, els ) {
			pushNative.apply( target, slice.call( els ) );
		},
		call: function( target ) {
			pushNative.apply( target, slice.call( arguments, 1 ) );
		}
	};
}
&amp;nbsp;
function find( selector, context, results, seed ) {
	var m, i, elem, nid, match, groups, newSelector,
		newContext = context &amp;amp;&amp;amp; context.ownerDocument,
&amp;nbsp;
		// nodeType defaults to 9, since context defaults to document
		nodeType = context ? context.nodeType : 9;
&amp;nbsp;
	results = results || [];
&amp;nbsp;
	// Return early from calls with invalid selector or context
	if ( typeof selector !== &amp;quot;string&amp;quot; || !selector ||
		nodeType !== 1 &amp;amp;&amp;amp; nodeType !== 9 &amp;amp;&amp;amp; nodeType !== 11 ) {
&amp;nbsp;
		return results;
	}
&amp;nbsp;
	// Try to shortcut find operations (as opposed to filters) in HTML documents
	if ( !seed ) {
		setDocument( context );
		context = context || document;
&amp;nbsp;
		if ( documentIsHTML ) {
&amp;nbsp;
			// If the selector is sufficiently simple, try using a &amp;quot;get*By*&amp;quot; DOM method
			// (excepting DocumentFragment context, where the methods don&#039;t exist)
			if ( nodeType !== 11 &amp;amp;&amp;amp; ( match = rquickExpr.exec( selector ) ) ) {
&amp;nbsp;
				// ID selector
				if ( ( m = match[ 1 ] ) ) {
&amp;nbsp;
					// Document context
					if ( nodeType === 9 ) {
						if ( ( elem = context.getElementById( m ) ) ) {
&amp;nbsp;
							// Support: IE 9 only
							// getElementById can match elements by name instead of ID
							if ( elem.id === m ) {
								push.call( results, elem );
								return results;
							}
						} else {
							return results;
						}
&amp;nbsp;
					// Element context
					} else {
&amp;nbsp;
						// Support: IE 9 only
						// getElementById can match elements by name instead of ID
						if ( newContext &amp;amp;&amp;amp; ( elem = newContext.getElementById( m ) ) &amp;amp;&amp;amp;
							find.contains( context, elem ) &amp;amp;&amp;amp;
							elem.id === m ) {
&amp;nbsp;
							push.call( results, elem );
							return results;
						}
					}
&amp;nbsp;
				// Type selector
				} else if ( match[ 2 ] ) {
					push.apply( results, context.getElementsByTagName( selector ) );
					return results;
&amp;nbsp;
				// Class selector
				} else if ( ( m = match[ 3 ] ) &amp;amp;&amp;amp; context.getElementsByClassName ) {
					push.apply( results, context.getElementsByClassName( m ) );
					return results;
				}
			}
&amp;nbsp;
			// Take advantage of querySelectorAll
			if ( !nonnativeSelectorCache[ selector + &amp;quot; &amp;quot; ] &amp;amp;&amp;amp;
				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {
&amp;nbsp;
				newSelector = selector;
				newContext = context;
&amp;nbsp;
				// qSA considers elements outside a scoping root when evaluating child or
				// descendant combinators, which is not what we want.
				// In such cases, we work around the behavior by prefixing every selector in the
				// list with an ID selector referencing the scope context.
				// The technique has to be used as well when a leading combinator is used
				// as such selectors are not recognized by querySelectorAll.
				// Thanks to Andrew Dupont for this technique.
				if ( nodeType === 1 &amp;amp;&amp;amp;
					( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {
&amp;nbsp;
					// Expand context for sibling selectors
					newContext = rsibling.test( selector ) &amp;amp;&amp;amp; testContext( context.parentNode ) ||
						context;
&amp;nbsp;
					// We can use :scope instead of the ID hack if the browser
					// supports it &amp;amp; if we&#039;re not changing the context.
					// Support: IE 11+, Edge 17 - 18+
					// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when
					// strict-comparing two documents; shallow comparisons work.
					// eslint-disable-next-line eqeqeq
					if ( newContext != context || !support.scope ) {
&amp;nbsp;
						// Capture the context ID, setting it first if necessary
						if ( ( nid = context.getAttribute( &amp;quot;id&amp;quot; ) ) ) {
							nid = jQuery.escapeSelector( nid );
						} else {
							context.setAttribute( &amp;quot;id&amp;quot;, ( nid = expando ) );
						}
					}
&amp;nbsp;
					// Prefix every selector in the list
					groups = tokenize( selector );
					i = groups.length;
					while ( i-- ) {
						groups[ i ] = ( nid ? &amp;quot;#&amp;quot; + nid : &amp;quot;:scope&amp;quot; ) + &amp;quot; &amp;quot; +
							toSelector( groups[ i ] );
					}
					newSelector = groups.join( &amp;quot;,&amp;quot; );
				}
&amp;nbsp;
				try {
					push.apply( results,
						newContext.querySelectorAll( newSelector )
					);
					return results;
				} catch ( qsaError ) {
					nonnativeSelectorCache( selector, true );
				} finally {
					if ( nid === expando ) {
						context.removeAttribute( &amp;quot;id&amp;quot; );
					}
				}
			}
		}
	}
&amp;nbsp;
	// All others
	return select( selector.replace( rtrimCSS, &amp;quot;$1&amp;quot; ), context, results, seed );
}
&amp;nbsp;
/**
 * Create key-value caches of limited size
 * @returns {function(string, object)} Returns the Object data after storing it on itself with
 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
 *	deleting the oldest entry
 */
function createCache() {
	var keys = [];
&amp;nbsp;
	function cache( key, value ) {
&amp;nbsp;
		// Use (key + &amp;quot; &amp;quot;) to avoid collision with native prototype properties
		// (see https://github.com/jquery/sizzle/issues/157)
		if ( keys.push( key + &amp;quot; &amp;quot; ) &amp;gt; Expr.cacheLength ) {
&amp;nbsp;
			// Only keep the most recent entries
			delete cache[ keys.shift() ];
		}
		return ( cache[ key + &amp;quot; &amp;quot; ] = value );
	}
	return cache;
}
&amp;nbsp;
/**
 * Mark a function for special use by jQuery selector module
 * @param {Function} fn The function to mark
 */
function markFunction( fn ) {
	fn[ expando ] = true;
	return fn;
}
&amp;nbsp;
/**
 * Support testing using an element
 * @param {Function} fn Passed the created element and returns a boolean result
 */
function assert( fn ) {
	var el = document.createElement( &amp;quot;fieldset&amp;quot; );
&amp;nbsp;
	try {
		return !!fn( el );
	} catch ( e ) {
		return false;
	} finally {
&amp;nbsp;
		// Remove from its parent by default
		if ( el.parentNode ) {
			el.parentNode.removeChild( el );
		}
&amp;nbsp;
		// release memory in IE
		el = null;
	}
}
&amp;nbsp;
/**
 * Returns a function to use in pseudos for input types
 * @param {String} type
 */
function createInputPseudo( type ) {
	return function( elem ) {
		return nodeName( elem, &amp;quot;input&amp;quot; ) &amp;amp;&amp;amp; elem.type === type;
	};
}
&amp;nbsp;
/**
 * Returns a function to use in pseudos for buttons
 * @param {String} type
 */
function createButtonPseudo( type ) {
	return function( elem ) {
		return ( nodeName( elem, &amp;quot;input&amp;quot; ) || nodeName( elem, &amp;quot;button&amp;quot; ) ) &amp;amp;&amp;amp;
			elem.type === type;
	};
}
&amp;nbsp;
/**
 * Returns a function to use in pseudos for :enabled/:disabled
 * @param {Boolean} disabled true for :disabled; false for :enabled
 */
function createDisabledPseudo( disabled ) {
&amp;nbsp;
	// Known :disabled false positives: fieldset[disabled] &amp;gt; legend:nth-of-type(n+2) :can-disable
	return function( elem ) {
&amp;nbsp;
		// Only certain elements can match :enabled or :disabled
		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
		if ( &amp;quot;form&amp;quot; in elem ) {
&amp;nbsp;
			// Check for inherited disabledness on relevant non-disabled elements:
			// * listed form-associated elements in a disabled fieldset
			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
			// * option elements in a disabled optgroup
			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
			// All such elements have a &amp;quot;form&amp;quot; property.
			if ( elem.parentNode &amp;amp;&amp;amp; elem.disabled === false ) {
&amp;nbsp;
				// Option elements defer to a parent optgroup if present
				if ( &amp;quot;label&amp;quot; in elem ) {
					if ( &amp;quot;label&amp;quot; in elem.parentNode ) {
						return elem.parentNode.disabled === disabled;
					} else {
						return elem.disabled === disabled;
					}
				}
&amp;nbsp;
				// Support: IE 6 - 11+
				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
				return elem.isDisabled === disabled ||
&amp;nbsp;
					// Where there is no isDisabled, check manually
					elem.isDisabled !== !disabled &amp;amp;&amp;amp;
						inDisabledFieldset( elem ) === disabled;
			}
&amp;nbsp;
			return elem.disabled === disabled;
&amp;nbsp;
		// Try to winnow out elements that can&#039;t be disabled before trusting the disabled property.
		// Some victims get caught in our net (label, legend, menu, track), but it shouldn&#039;t
		// even exist on them, let alone have a boolean value.
		} else if ( &amp;quot;label&amp;quot; in elem ) {
			return elem.disabled === disabled;
		}
&amp;nbsp;
		// Remaining elements are neither :enabled nor :disabled
		return false;
	};
}
&amp;nbsp;
/**
 * Returns a function to use in pseudos for positionals
 * @param {Function} fn
 */
function createPositionalPseudo( fn ) {
	return markFunction( function( argument ) {
		argument = +argument;
		return markFunction( function( seed, matches ) {
			var j,
				matchIndexes = fn( [], seed.length, argument ),
				i = matchIndexes.length;
&amp;nbsp;
			// Match elements found at the specified indexes
			while ( i-- ) {
				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
					seed[ j ] = !( matches[ j ] = seed[ j ] );
				}
			}
		} );
	} );
}
&amp;nbsp;
/**
 * Checks a node for validity as a jQuery selector context
 * @param {Element|Object=} context
 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
 */
function testContext( context ) {
	return context &amp;amp;&amp;amp; typeof context.getElementsByTagName !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; context;
}
&amp;nbsp;
/**
 * Sets document-related variables once based on the current document
 * @param {Element|Object} [node] An element or document object to use to set the document
 * @returns {Object} Returns the current document
 */
function setDocument( node ) {
	var subWindow,
		doc = node ? node.ownerDocument || node : preferredDoc;
&amp;nbsp;
	// Return early if doc is invalid or already selected
	// Support: IE 11+, Edge 17 - 18+
	// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
	// two documents; shallow comparisons work.
	// eslint-disable-next-line eqeqeq
	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
		return document;
	}
&amp;nbsp;
	// Update global variables
	document = doc;
	documentElement = document.documentElement;
	documentIsHTML = !jQuery.isXMLDoc( document );
&amp;nbsp;
	// Support: iOS 7 only, IE 9 - 11+
	// Older browsers didn&#039;t support unprefixed `matches`.
	matches = documentElement.matches ||
		documentElement.webkitMatchesSelector ||
		documentElement.msMatchesSelector;
&amp;nbsp;
	// Support: IE 9 - 11+, Edge 12 - 18+
	// Accessing iframe documents after unload throws &amp;quot;permission denied&amp;quot; errors
	// (see trac-13936).
	// Limit the fix to IE &amp;amp; Edge Legacy; despite Edge 15+ implementing `matches`,
	// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.
	if ( documentElement.msMatchesSelector &amp;amp;&amp;amp;
&amp;nbsp;
		// Support: IE 11+, Edge 17 - 18+
		// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
		// two documents; shallow comparisons work.
		// eslint-disable-next-line eqeqeq
		preferredDoc != document &amp;amp;&amp;amp;
		( subWindow = document.defaultView ) &amp;amp;&amp;amp; subWindow.top !== subWindow ) {
&amp;nbsp;
		// Support: IE 9 - 11+, Edge 12 - 18+
		subWindow.addEventListener( &amp;quot;unload&amp;quot;, unloadHandler );
	}
&amp;nbsp;
	// Support: IE &amp;lt;10
	// Check if getElementById returns elements by name
	// The broken getElementById methods don&#039;t pick up programmatically-set names,
	// so use a roundabout getElementsByName test
	support.getById = assert( function( el ) {
		documentElement.appendChild( el ).id = jQuery.expando;
		return !document.getElementsByName ||
			!document.getElementsByName( jQuery.expando ).length;
	} );
&amp;nbsp;
	// Support: IE 9 only
	// Check to see if it&#039;s possible to do matchesSelector
	// on a disconnected node.
	support.disconnectedMatch = assert( function( el ) {
		return matches.call( el, &amp;quot;*&amp;quot; );
	} );
&amp;nbsp;
	// Support: IE 9 - 11+, Edge 12 - 18+
	// IE/Edge don&#039;t support the :scope pseudo-class.
	support.scope = assert( function() {
		return document.querySelectorAll( &amp;quot;:scope&amp;quot; );
	} );
&amp;nbsp;
	// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only
	// Make sure the `:has()` argument is parsed unforgivingly.
	// We include `*` in the test to detect buggy implementations that are
	// _selectively_ forgiving (specifically when the list includes at least
	// one valid selector).
	// Note that we treat complete lack of support for `:has()` as if it were
	// spec-compliant support, which is fine because use of `:has()` in such
	// environments will fail in the qSA path and fall back to jQuery traversal
	// anyway.
	support.cssHas = assert( function() {
		try {
			document.querySelector( &amp;quot;:has(*,:jqfake)&amp;quot; );
			return false;
		} catch ( e ) {
			return true;
		}
	} );
&amp;nbsp;
	// ID filter and find
	if ( support.getById ) {
		Expr.filter.ID = function( id ) {
			var attrId = id.replace( runescape, funescape );
			return function( elem ) {
				return elem.getAttribute( &amp;quot;id&amp;quot; ) === attrId;
			};
		};
		Expr.find.ID = function( id, context ) {
			if ( typeof context.getElementById !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; documentIsHTML ) {
				var elem = context.getElementById( id );
				return elem ? [ elem ] : [];
			}
		};
	} else {
		Expr.filter.ID =  function( id ) {
			var attrId = id.replace( runescape, funescape );
			return function( elem ) {
				var node = typeof elem.getAttributeNode !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp;
					elem.getAttributeNode( &amp;quot;id&amp;quot; );
				return node &amp;amp;&amp;amp; node.value === attrId;
			};
		};
&amp;nbsp;
		// Support: IE 6 - 7 only
		// getElementById is not reliable as a find shortcut
		Expr.find.ID = function( id, context ) {
			if ( typeof context.getElementById !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; documentIsHTML ) {
				var node, i, elems,
					elem = context.getElementById( id );
&amp;nbsp;
				if ( elem ) {
&amp;nbsp;
					// Verify the id attribute
					node = elem.getAttributeNode( &amp;quot;id&amp;quot; );
					if ( node &amp;amp;&amp;amp; node.value === id ) {
						return [ elem ];
					}
&amp;nbsp;
					// Fall back on getElementsByName
					elems = context.getElementsByName( id );
					i = 0;
					while ( ( elem = elems[ i++ ] ) ) {
						node = elem.getAttributeNode( &amp;quot;id&amp;quot; );
						if ( node &amp;amp;&amp;amp; node.value === id ) {
							return [ elem ];
						}
					}
				}
&amp;nbsp;
				return [];
			}
		};
	}
&amp;nbsp;
	// Tag
	Expr.find.TAG = function( tag, context ) {
		if ( typeof context.getElementsByTagName !== &amp;quot;undefined&amp;quot; ) {
			return context.getElementsByTagName( tag );
&amp;nbsp;
		// DocumentFragment nodes don&#039;t have gEBTN
		} else {
			return context.querySelectorAll( tag );
		}
	};
&amp;nbsp;
	// Class
	Expr.find.CLASS = function( className, context ) {
		if ( typeof context.getElementsByClassName !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; documentIsHTML ) {
			return context.getElementsByClassName( className );
		}
	};
&amp;nbsp;
	/* QSA/matchesSelector
	---------------------------------------------------------------------- */
&amp;nbsp;
	// QSA and matchesSelector support
&amp;nbsp;
	rbuggyQSA = [];
&amp;nbsp;
	// Build QSA regex
	// Regex strategy adopted from Diego Perini
	assert( function( el ) {
&amp;nbsp;
		var input;
&amp;nbsp;
		documentElement.appendChild( el ).innerHTML =
			&amp;quot;&amp;lt;a id=&#039;&amp;quot; + expando + &amp;quot;&#039; href=&#039;&#039; disabled=&#039;disabled&#039;&amp;gt;&amp;lt;/a&amp;gt;&amp;quot; +
			&amp;quot;&amp;lt;select id=&#039;&amp;quot; + expando + &amp;quot;-\r\\&#039; disabled=&#039;disabled&#039;&amp;gt;&amp;quot; +
			&amp;quot;&amp;lt;option selected=&#039;&#039;&amp;gt;&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;&amp;quot;;
&amp;nbsp;
		// Support: iOS &amp;lt;=7 - 8 only
		// Boolean attributes and &amp;quot;value&amp;quot; are not treated correctly in some XML documents
		if ( !el.querySelectorAll( &amp;quot;[selected]&amp;quot; ).length ) {
			rbuggyQSA.push( &amp;quot;\\[&amp;quot; + whitespace + &amp;quot;*(?:value|&amp;quot; + booleans + &amp;quot;)&amp;quot; );
		}
&amp;nbsp;
		// Support: iOS &amp;lt;=7 - 8 only
		if ( !el.querySelectorAll( &amp;quot;[id~=&amp;quot; + expando + &amp;quot;-]&amp;quot; ).length ) {
			rbuggyQSA.push( &amp;quot;~=&amp;quot; );
		}
&amp;nbsp;
		// Support: iOS 8 only
		// https://bugs.webkit.org/show_bug.cgi?id=136851
		// In-page `selector#id sibling-combinator selector` fails
		if ( !el.querySelectorAll( &amp;quot;a#&amp;quot; + expando + &amp;quot;+*&amp;quot; ).length ) {
			rbuggyQSA.push( &amp;quot;.#.+[+~]&amp;quot; );
		}
&amp;nbsp;
		// Support: Chrome &amp;lt;=105+, Firefox &amp;lt;=104+, Safari &amp;lt;=15.4+
		// In some of the document kinds, these selectors wouldn&#039;t work natively.
		// This is probably OK but for backwards compatibility we want to maintain
		// handling them through jQuery traversal in jQuery 3.x.
		if ( !el.querySelectorAll( &amp;quot;:checked&amp;quot; ).length ) {
			rbuggyQSA.push( &amp;quot;:checked&amp;quot; );
		}
&amp;nbsp;
		// Support: Windows 8 Native Apps
		// The type and name attributes are restricted during .innerHTML assignment
		input = document.createElement( &amp;quot;input&amp;quot; );
		input.setAttribute( &amp;quot;type&amp;quot;, &amp;quot;hidden&amp;quot; );
		el.appendChild( input ).setAttribute( &amp;quot;name&amp;quot;, &amp;quot;D&amp;quot; );
&amp;nbsp;
		// Support: IE 9 - 11+
		// IE&#039;s :disabled selector does not pick up the children of disabled fieldsets
		// Support: Chrome &amp;lt;=105+, Firefox &amp;lt;=104+, Safari &amp;lt;=15.4+
		// In some of the document kinds, these selectors wouldn&#039;t work natively.
		// This is probably OK but for backwards compatibility we want to maintain
		// handling them through jQuery traversal in jQuery 3.x.
		documentElement.appendChild( el ).disabled = true;
		if ( el.querySelectorAll( &amp;quot;:disabled&amp;quot; ).length !== 2 ) {
			rbuggyQSA.push( &amp;quot;:enabled&amp;quot;, &amp;quot;:disabled&amp;quot; );
		}
&amp;nbsp;
		// Support: IE 11+, Edge 15 - 18+
		// IE 11/Edge don&#039;t find elements on a `[name=&#039;&#039;]` query in some cases.
		// Adding a temporary attribute to the document before the selection works
		// around the issue.
		// Interestingly, IE 10 &amp;amp; older don&#039;t seem to have the issue.
		input = document.createElement( &amp;quot;input&amp;quot; );
		input.setAttribute( &amp;quot;name&amp;quot;, &amp;quot;&amp;quot; );
		el.appendChild( input );
		if ( !el.querySelectorAll( &amp;quot;[name=&#039;&#039;]&amp;quot; ).length ) {
			rbuggyQSA.push( &amp;quot;\\[&amp;quot; + whitespace + &amp;quot;*name&amp;quot; + whitespace + &amp;quot;*=&amp;quot; +
				whitespace + &amp;quot;*(?:&#039;&#039;|\&amp;quot;\&amp;quot;)&amp;quot; );
		}
	} );
&amp;nbsp;
	if ( !support.cssHas ) {
&amp;nbsp;
		// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+
		// Our regular `try-catch` mechanism fails to detect natively-unsupported
		// pseudo-classes inside `:has()` (such as `:has(:contains(&amp;quot;Foo&amp;quot;))`)
		// in browsers that parse the `:has()` argument as a forgiving selector list.
		// https://drafts.csswg.org/selectors/#relational now requires the argument
		// to be parsed unforgivingly, but browsers have not yet fully adjusted.
		rbuggyQSA.push( &amp;quot;:has&amp;quot; );
	}
&amp;nbsp;
	rbuggyQSA = rbuggyQSA.length &amp;amp;&amp;amp; new RegExp( rbuggyQSA.join( &amp;quot;|&amp;quot; ) );
&amp;nbsp;
	/* Sorting
	---------------------------------------------------------------------- */
&amp;nbsp;
	// Document order sorting
	sortOrder = function( a, b ) {
&amp;nbsp;
		// Flag for duplicate removal
		if ( a === b ) {
			hasDuplicate = true;
			return 0;
		}
&amp;nbsp;
		// Sort on method existence if only one input has compareDocumentPosition
		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
		if ( compare ) {
			return compare;
		}
&amp;nbsp;
		// Calculate position if both inputs belong to the same document
		// Support: IE 11+, Edge 17 - 18+
		// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
		// two documents; shallow comparisons work.
		// eslint-disable-next-line eqeqeq
		compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
			a.compareDocumentPosition( b ) :
&amp;nbsp;
			// Otherwise we know they are disconnected
			1;
&amp;nbsp;
		// Disconnected nodes
		if ( compare &amp;amp; 1 ||
			( !support.sortDetached &amp;amp;&amp;amp; b.compareDocumentPosition( a ) === compare ) ) {
&amp;nbsp;
			// Choose the first element that is related to our preferred document
			// Support: IE 11+, Edge 17 - 18+
			// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
			// two documents; shallow comparisons work.
			// eslint-disable-next-line eqeqeq
			if ( a === document || a.ownerDocument == preferredDoc &amp;amp;&amp;amp;
				find.contains( preferredDoc, a ) ) {
				return -1;
			}
&amp;nbsp;
			// Support: IE 11+, Edge 17 - 18+
			// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
			// two documents; shallow comparisons work.
			// eslint-disable-next-line eqeqeq
			if ( b === document || b.ownerDocument == preferredDoc &amp;amp;&amp;amp;
				find.contains( preferredDoc, b ) ) {
				return 1;
			}
&amp;nbsp;
			// Maintain original order
			return sortInput ?
				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
				0;
		}
&amp;nbsp;
		return compare &amp;amp; 4 ? -1 : 1;
	};
&amp;nbsp;
	return document;
}
&amp;nbsp;
find.matches = function( expr, elements ) {
	return find( expr, null, null, elements );
};
&amp;nbsp;
find.matchesSelector = function( elem, expr ) {
	setDocument( elem );
&amp;nbsp;
	if ( documentIsHTML &amp;amp;&amp;amp;
		!nonnativeSelectorCache[ expr + &amp;quot; &amp;quot; ] &amp;amp;&amp;amp;
		( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
&amp;nbsp;
		try {
			var ret = matches.call( elem, expr );
&amp;nbsp;
			// IE 9&#039;s matchesSelector returns false on disconnected nodes
			if ( ret || support.disconnectedMatch ||
&amp;nbsp;
					// As well, disconnected nodes are said to be in a document
					// fragment in IE 9
					elem.document &amp;amp;&amp;amp; elem.document.nodeType !== 11 ) {
				return ret;
			}
		} catch ( e ) {
			nonnativeSelectorCache( expr, true );
		}
	}
&amp;nbsp;
	return find( expr, document, null, [ elem ] ).length &amp;gt; 0;
};
&amp;nbsp;
find.contains = function( context, elem ) {
&amp;nbsp;
	// Set document vars if needed
	// Support: IE 11+, Edge 17 - 18+
	// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
	// two documents; shallow comparisons work.
	// eslint-disable-next-line eqeqeq
	if ( ( context.ownerDocument || context ) != document ) {
		setDocument( context );
	}
	return jQuery.contains( context, elem );
};
&amp;nbsp;
&amp;nbsp;
find.attr = function( elem, name ) {
&amp;nbsp;
	// Set document vars if needed
	// Support: IE 11+, Edge 17 - 18+
	// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
	// two documents; shallow comparisons work.
	// eslint-disable-next-line eqeqeq
	if ( ( elem.ownerDocument || elem ) != document ) {
		setDocument( elem );
	}
&amp;nbsp;
	var fn = Expr.attrHandle[ name.toLowerCase() ],
&amp;nbsp;
		// Don&#039;t get fooled by Object.prototype properties (see trac-13807)
		val = fn &amp;amp;&amp;amp; hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
			fn( elem, name, !documentIsHTML ) :
			undefined;
&amp;nbsp;
	if ( val !== undefined ) {
		return val;
	}
&amp;nbsp;
	return elem.getAttribute( name );
};
&amp;nbsp;
find.error = function( msg ) {
	throw new Error( &amp;quot;Syntax error, unrecognized expression: &amp;quot; + msg );
};
&amp;nbsp;
/**
 * Document sorting and removing duplicates
 * @param {ArrayLike} results
 */
jQuery.uniqueSort = function( results ) {
	var elem,
		duplicates = [],
		j = 0,
		i = 0;
&amp;nbsp;
	// Unless we *know* we can detect duplicates, assume their presence
	//
	// Support: Android &amp;lt;=4.0+
	// Testing for detecting duplicates is unpredictable so instead assume we can&#039;t
	// depend on duplicate detection in all browsers without a stable sort.
	hasDuplicate = !support.sortStable;
	sortInput = !support.sortStable &amp;amp;&amp;amp; slice.call( results, 0 );
	sort.call( results, sortOrder );
&amp;nbsp;
	if ( hasDuplicate ) {
		while ( ( elem = results[ i++ ] ) ) {
			if ( elem === results[ i ] ) {
				j = duplicates.push( i );
			}
		}
		while ( j-- ) {
			splice.call( results, duplicates[ j ], 1 );
		}
	}
&amp;nbsp;
	// Clear input after sorting to release objects
	// See https://github.com/jquery/sizzle/pull/225
	sortInput = null;
&amp;nbsp;
	return results;
};
&amp;nbsp;
jQuery.fn.uniqueSort = function() {
	return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );
};
&amp;nbsp;
Expr = jQuery.expr = {
&amp;nbsp;
	// Can be adjusted by the user
	cacheLength: 50,
&amp;nbsp;
	createPseudo: markFunction,
&amp;nbsp;
	match: matchExpr,
&amp;nbsp;
	attrHandle: {},
&amp;nbsp;
	find: {},
&amp;nbsp;
	relative: {
		&amp;quot;&amp;gt;&amp;quot;: { dir: &amp;quot;parentNode&amp;quot;, first: true },
		&amp;quot; &amp;quot;: { dir: &amp;quot;parentNode&amp;quot; },
		&amp;quot;+&amp;quot;: { dir: &amp;quot;previousSibling&amp;quot;, first: true },
		&amp;quot;~&amp;quot;: { dir: &amp;quot;previousSibling&amp;quot; }
	},
&amp;nbsp;
	preFilter: {
		ATTR: function( match ) {
			match[ 1 ] = match[ 1 ].replace( runescape, funescape );
&amp;nbsp;
			// Move the given value to match[3] whether quoted or unquoted
			match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || &amp;quot;&amp;quot; )
				.replace( runescape, funescape );
&amp;nbsp;
			if ( match[ 2 ] === &amp;quot;~=&amp;quot; ) {
				match[ 3 ] = &amp;quot; &amp;quot; + match[ 3 ] + &amp;quot; &amp;quot;;
			}
&amp;nbsp;
			return match.slice( 0, 4 );
		},
&amp;nbsp;
		CHILD: function( match ) {
&amp;nbsp;
			/* matches from matchExpr[&amp;quot;CHILD&amp;quot;]
				1 type (only|nth|...)
				2 what (child|of-type)
				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
				4 xn-component of xn+y argument ([+-]?\d*n|)
				5 sign of xn-component
				6 x of xn-component
				7 sign of y-component
				8 y of y-component
			*/
			match[ 1 ] = match[ 1 ].toLowerCase();
&amp;nbsp;
			if ( match[ 1 ].slice( 0, 3 ) === &amp;quot;nth&amp;quot; ) {
&amp;nbsp;
				// nth-* requires argument
				if ( !match[ 3 ] ) {
					find.error( match[ 0 ] );
				}
&amp;nbsp;
				// numeric x and y parameters for Expr.filter.CHILD
				// remember that false/true cast respectively to 0/1
				match[ 4 ] = +( match[ 4 ] ?
					match[ 5 ] + ( match[ 6 ] || 1 ) :
					2 * ( match[ 3 ] === &amp;quot;even&amp;quot; || match[ 3 ] === &amp;quot;odd&amp;quot; )
				);
				match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === &amp;quot;odd&amp;quot; );
&amp;nbsp;
			// other types prohibit arguments
			} else if ( match[ 3 ] ) {
				find.error( match[ 0 ] );
			}
&amp;nbsp;
			return match;
		},
&amp;nbsp;
		PSEUDO: function( match ) {
			var excess,
				unquoted = !match[ 6 ] &amp;amp;&amp;amp; match[ 2 ];
&amp;nbsp;
			if ( matchExpr.CHILD.test( match[ 0 ] ) ) {
				return null;
			}
&amp;nbsp;
			// Accept quoted arguments as-is
			if ( match[ 3 ] ) {
				match[ 2 ] = match[ 4 ] || match[ 5 ] || &amp;quot;&amp;quot;;
&amp;nbsp;
			// Strip excess characters from unquoted arguments
			} else if ( unquoted &amp;amp;&amp;amp; rpseudo.test( unquoted ) &amp;amp;&amp;amp;
&amp;nbsp;
				// Get excess from tokenize (recursively)
				( excess = tokenize( unquoted, true ) ) &amp;amp;&amp;amp;
&amp;nbsp;
				// advance to the next closing parenthesis
				( excess = unquoted.indexOf( &amp;quot;)&amp;quot;, unquoted.length - excess ) - unquoted.length ) ) {
&amp;nbsp;
				// excess is a negative index
				match[ 0 ] = match[ 0 ].slice( 0, excess );
				match[ 2 ] = unquoted.slice( 0, excess );
			}
&amp;nbsp;
			// Return only captures needed by the pseudo filter method (type and argument)
			return match.slice( 0, 3 );
		}
	},
&amp;nbsp;
	filter: {
&amp;nbsp;
		TAG: function( nodeNameSelector ) {
			var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
			return nodeNameSelector === &amp;quot;*&amp;quot; ?
				function() {
					return true;
				} :
				function( elem ) {
					return nodeName( elem, expectedNodeName );
				};
		},
&amp;nbsp;
		CLASS: function( className ) {
			var pattern = classCache[ className + &amp;quot; &amp;quot; ];
&amp;nbsp;
			return pattern ||
				( pattern = new RegExp( &amp;quot;(^|&amp;quot; + whitespace + &amp;quot;)&amp;quot; + className +
					&amp;quot;(&amp;quot; + whitespace + &amp;quot;|$)&amp;quot; ) ) &amp;amp;&amp;amp;
				classCache( className, function( elem ) {
					return pattern.test(
						typeof elem.className === &amp;quot;string&amp;quot; &amp;amp;&amp;amp; elem.className ||
							typeof elem.getAttribute !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp;
								elem.getAttribute( &amp;quot;class&amp;quot; ) ||
							&amp;quot;&amp;quot;
					);
				} );
		},
&amp;nbsp;
		ATTR: function( name, operator, check ) {
			return function( elem ) {
				var result = find.attr( elem, name );
&amp;nbsp;
				if ( result == null ) {
					return operator === &amp;quot;!=&amp;quot;;
				}
				if ( !operator ) {
					return true;
				}
&amp;nbsp;
				result += &amp;quot;&amp;quot;;
&amp;nbsp;
				if ( operator === &amp;quot;=&amp;quot; ) {
					return result === check;
				}
				if ( operator === &amp;quot;!=&amp;quot; ) {
					return result !== check;
				}
				if ( operator === &amp;quot;^=&amp;quot; ) {
					return check &amp;amp;&amp;amp; result.indexOf( check ) === 0;
				}
				if ( operator === &amp;quot;*=&amp;quot; ) {
					return check &amp;amp;&amp;amp; result.indexOf( check ) &amp;gt; -1;
				}
				if ( operator === &amp;quot;$=&amp;quot; ) {
					return check &amp;amp;&amp;amp; result.slice( -check.length ) === check;
				}
				if ( operator === &amp;quot;~=&amp;quot; ) {
					return ( &amp;quot; &amp;quot; + result.replace( rwhitespace, &amp;quot; &amp;quot; ) + &amp;quot; &amp;quot; )
						.indexOf( check ) &amp;gt; -1;
				}
				if ( operator === &amp;quot;|=&amp;quot; ) {
					return result === check || result.slice( 0, check.length + 1 ) === check + &amp;quot;-&amp;quot;;
				}
&amp;nbsp;
				return false;
			};
		},
&amp;nbsp;
		CHILD: function( type, what, _argument, first, last ) {
			var simple = type.slice( 0, 3 ) !== &amp;quot;nth&amp;quot;,
				forward = type.slice( -4 ) !== &amp;quot;last&amp;quot;,
				ofType = what === &amp;quot;of-type&amp;quot;;
&amp;nbsp;
			return first === 1 &amp;amp;&amp;amp; last === 0 ?
&amp;nbsp;
				// Shortcut for :nth-*(n)
				function( elem ) {
					return !!elem.parentNode;
				} :
&amp;nbsp;
				function( elem, _context, xml ) {
					var cache, outerCache, node, nodeIndex, start,
						dir = simple !== forward ? &amp;quot;nextSibling&amp;quot; : &amp;quot;previousSibling&amp;quot;,
						parent = elem.parentNode,
						name = ofType &amp;amp;&amp;amp; elem.nodeName.toLowerCase(),
						useCache = !xml &amp;amp;&amp;amp; !ofType,
						diff = false;
&amp;nbsp;
					if ( parent ) {
&amp;nbsp;
						// :(first|last|only)-(child|of-type)
						if ( simple ) {
							while ( dir ) {
								node = elem;
								while ( ( node = node[ dir ] ) ) {
									if ( ofType ?
										nodeName( node, name ) :
										node.nodeType === 1 ) {
&amp;nbsp;
										return false;
									}
								}
&amp;nbsp;
								// Reverse direction for :only-* (if we haven&#039;t yet done so)
								start = dir = type === &amp;quot;only&amp;quot; &amp;amp;&amp;amp; !start &amp;amp;&amp;amp; &amp;quot;nextSibling&amp;quot;;
							}
							return true;
						}
&amp;nbsp;
						start = [ forward ? parent.firstChild : parent.lastChild ];
&amp;nbsp;
						// non-xml :nth-child(...) stores cache data on `parent`
						if ( forward &amp;amp;&amp;amp; useCache ) {
&amp;nbsp;
							// Seek `elem` from a previously-cached index
							outerCache = parent[ expando ] || ( parent[ expando ] = {} );
							cache = outerCache[ type ] || [];
							nodeIndex = cache[ 0 ] === dirruns &amp;amp;&amp;amp; cache[ 1 ];
							diff = nodeIndex &amp;amp;&amp;amp; cache[ 2 ];
							node = nodeIndex &amp;amp;&amp;amp; parent.childNodes[ nodeIndex ];
&amp;nbsp;
							while ( ( node = ++nodeIndex &amp;amp;&amp;amp; node &amp;amp;&amp;amp; node[ dir ] ||
&amp;nbsp;
								// Fallback to seeking `elem` from the start
								( diff = nodeIndex = 0 ) || start.pop() ) ) {
&amp;nbsp;
								// When found, cache indexes on `parent` and break
								if ( node.nodeType === 1 &amp;amp;&amp;amp; ++diff &amp;amp;&amp;amp; node === elem ) {
									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
									break;
								}
							}
&amp;nbsp;
						} else {
&amp;nbsp;
							// Use previously-cached element index if available
							if ( useCache ) {
								outerCache = elem[ expando ] || ( elem[ expando ] = {} );
								cache = outerCache[ type ] || [];
								nodeIndex = cache[ 0 ] === dirruns &amp;amp;&amp;amp; cache[ 1 ];
								diff = nodeIndex;
							}
&amp;nbsp;
							// xml :nth-child(...)
							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
							if ( diff === false ) {
&amp;nbsp;
								// Use the same loop as above to seek `elem` from the start
								while ( ( node = ++nodeIndex &amp;amp;&amp;amp; node &amp;amp;&amp;amp; node[ dir ] ||
									( diff = nodeIndex = 0 ) || start.pop() ) ) {
&amp;nbsp;
									if ( ( ofType ?
										nodeName( node, name ) :
										node.nodeType === 1 ) &amp;amp;&amp;amp;
										++diff ) {
&amp;nbsp;
										// Cache the index of each encountered element
										if ( useCache ) {
											outerCache = node[ expando ] ||
												( node[ expando ] = {} );
											outerCache[ type ] = [ dirruns, diff ];
										}
&amp;nbsp;
										if ( node === elem ) {
											break;
										}
									}
								}
							}
						}
&amp;nbsp;
						// Incorporate the offset, then check against cycle size
						diff -= last;
						return diff === first || ( diff % first === 0 &amp;amp;&amp;amp; diff / first &amp;gt;= 0 );
					}
				};
		},
&amp;nbsp;
		PSEUDO: function( pseudo, argument ) {
&amp;nbsp;
			// pseudo-class names are case-insensitive
			// https://www.w3.org/TR/selectors/#pseudo-classes
			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
			// Remember that setFilters inherits from pseudos
			var args,
				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
					find.error( &amp;quot;unsupported pseudo: &amp;quot; + pseudo );
&amp;nbsp;
			// The user may use createPseudo to indicate that
			// arguments are needed to create the filter function
			// just as jQuery does
			if ( fn[ expando ] ) {
				return fn( argument );
			}
&amp;nbsp;
			// But maintain support for old signatures
			if ( fn.length &amp;gt; 1 ) {
				args = [ pseudo, pseudo, &amp;quot;&amp;quot;, argument ];
				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
					markFunction( function( seed, matches ) {
						var idx,
							matched = fn( seed, argument ),
							i = matched.length;
						while ( i-- ) {
							idx = indexOf.call( seed, matched[ i ] );
							seed[ idx ] = !( matches[ idx ] = matched[ i ] );
						}
					} ) :
					function( elem ) {
						return fn( elem, 0, args );
					};
			}
&amp;nbsp;
			return fn;
		}
	},
&amp;nbsp;
	pseudos: {
&amp;nbsp;
		// Potentially complex pseudos
		not: markFunction( function( selector ) {
&amp;nbsp;
			// Trim the selector passed to compile
			// to avoid treating leading and trailing
			// spaces as combinators
			var input = [],
				results = [],
				matcher = compile( selector.replace( rtrimCSS, &amp;quot;$1&amp;quot; ) );
&amp;nbsp;
			return matcher[ expando ] ?
				markFunction( function( seed, matches, _context, xml ) {
					var elem,
						unmatched = matcher( seed, null, xml, [] ),
						i = seed.length;
&amp;nbsp;
					// Match elements unmatched by `matcher`
					while ( i-- ) {
						if ( ( elem = unmatched[ i ] ) ) {
							seed[ i ] = !( matches[ i ] = elem );
						}
					}
				} ) :
				function( elem, _context, xml ) {
					input[ 0 ] = elem;
					matcher( input, null, xml, results );
&amp;nbsp;
					// Don&#039;t keep the element
					// (see https://github.com/jquery/sizzle/issues/299)
					input[ 0 ] = null;
					return !results.pop();
				};
		} ),
&amp;nbsp;
		has: markFunction( function( selector ) {
			return function( elem ) {
				return find( selector, elem ).length &amp;gt; 0;
			};
		} ),
&amp;nbsp;
		contains: markFunction( function( text ) {
			text = text.replace( runescape, funescape );
			return function( elem ) {
				return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) &amp;gt; -1;
			};
		} ),
&amp;nbsp;
		// &amp;quot;Whether an element is represented by a :lang() selector
		// is based solely on the element&#039;s language value
		// being equal to the identifier C,
		// or beginning with the identifier C immediately followed by &amp;quot;-&amp;quot;.
		// The matching of C against the element&#039;s language value is performed case-insensitively.
		// The identifier C does not have to be a valid language name.&amp;quot;
		// https://www.w3.org/TR/selectors/#lang-pseudo
		lang: markFunction( function( lang ) {
&amp;nbsp;
			// lang value must be a valid identifier
			if ( !ridentifier.test( lang || &amp;quot;&amp;quot; ) ) {
				find.error( &amp;quot;unsupported lang: &amp;quot; + lang );
			}
			lang = lang.replace( runescape, funescape ).toLowerCase();
			return function( elem ) {
				var elemLang;
				do {
					if ( ( elemLang = documentIsHTML ?
						elem.lang :
						elem.getAttribute( &amp;quot;xml:lang&amp;quot; ) || elem.getAttribute( &amp;quot;lang&amp;quot; ) ) ) {
&amp;nbsp;
						elemLang = elemLang.toLowerCase();
						return elemLang === lang || elemLang.indexOf( lang + &amp;quot;-&amp;quot; ) === 0;
					}
				} while ( ( elem = elem.parentNode ) &amp;amp;&amp;amp; elem.nodeType === 1 );
				return false;
			};
		} ),
&amp;nbsp;
		// Miscellaneous
		target: function( elem ) {
			var hash = window.location &amp;amp;&amp;amp; window.location.hash;
			return hash &amp;amp;&amp;amp; hash.slice( 1 ) === elem.id;
		},
&amp;nbsp;
		root: function( elem ) {
			return elem === documentElement;
		},
&amp;nbsp;
		focus: function( elem ) {
			return elem === safeActiveElement() &amp;amp;&amp;amp;
				document.hasFocus() &amp;amp;&amp;amp;
				!!( elem.type || elem.href || ~elem.tabIndex );
		},
&amp;nbsp;
		// Boolean properties
		enabled: createDisabledPseudo( false ),
		disabled: createDisabledPseudo( true ),
&amp;nbsp;
		checked: function( elem ) {
&amp;nbsp;
			// In CSS3, :checked should return both checked and selected elements
			// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
			return ( nodeName( elem, &amp;quot;input&amp;quot; ) &amp;amp;&amp;amp; !!elem.checked ) ||
				( nodeName( elem, &amp;quot;option&amp;quot; ) &amp;amp;&amp;amp; !!elem.selected );
		},
&amp;nbsp;
		selected: function( elem ) {
&amp;nbsp;
			// Support: IE &amp;lt;=11+
			// Accessing the selectedIndex property
			// forces the browser to treat the default option as
			// selected when in an optgroup.
			if ( elem.parentNode ) {
				// eslint-disable-next-line no-unused-expressions
				elem.parentNode.selectedIndex;
			}
&amp;nbsp;
			return elem.selected === true;
		},
&amp;nbsp;
		// Contents
		empty: function( elem ) {
&amp;nbsp;
			// https://www.w3.org/TR/selectors/#empty-pseudo
			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
			//   but not by others (comment: 8; processing instruction: 7; etc.)
			// nodeType &amp;lt; 6 works because attributes (2) do not appear as children
			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
				if ( elem.nodeType &amp;lt; 6 ) {
					return false;
				}
			}
			return true;
		},
&amp;nbsp;
		parent: function( elem ) {
			return !Expr.pseudos.empty( elem );
		},
&amp;nbsp;
		// Element/input types
		header: function( elem ) {
			return rheader.test( elem.nodeName );
		},
&amp;nbsp;
		input: function( elem ) {
			return rinputs.test( elem.nodeName );
		},
&amp;nbsp;
		button: function( elem ) {
			return nodeName( elem, &amp;quot;input&amp;quot; ) &amp;amp;&amp;amp; elem.type === &amp;quot;button&amp;quot; ||
				nodeName( elem, &amp;quot;button&amp;quot; );
		},
&amp;nbsp;
		text: function( elem ) {
			var attr;
			return nodeName( elem, &amp;quot;input&amp;quot; ) &amp;amp;&amp;amp; elem.type === &amp;quot;text&amp;quot; &amp;amp;&amp;amp;
&amp;nbsp;
				// Support: IE &amp;lt;10 only
				// New HTML5 attribute values (e.g., &amp;quot;search&amp;quot;) appear
				// with elem.type === &amp;quot;text&amp;quot;
				( ( attr = elem.getAttribute( &amp;quot;type&amp;quot; ) ) == null ||
					attr.toLowerCase() === &amp;quot;text&amp;quot; );
		},
&amp;nbsp;
		// Position-in-collection
		first: createPositionalPseudo( function() {
			return [ 0 ];
		} ),
&amp;nbsp;
		last: createPositionalPseudo( function( _matchIndexes, length ) {
			return [ length - 1 ];
		} ),
&amp;nbsp;
		eq: createPositionalPseudo( function( _matchIndexes, length, argument ) {
			return [ argument &amp;lt; 0 ? argument + length : argument ];
		} ),
&amp;nbsp;
		even: createPositionalPseudo( function( matchIndexes, length ) {
			var i = 0;
			for ( ; i &amp;lt; length; i += 2 ) {
				matchIndexes.push( i );
			}
			return matchIndexes;
		} ),
&amp;nbsp;
		odd: createPositionalPseudo( function( matchIndexes, length ) {
			var i = 1;
			for ( ; i &amp;lt; length; i += 2 ) {
				matchIndexes.push( i );
			}
			return matchIndexes;
		} ),
&amp;nbsp;
		lt: createPositionalPseudo( function( matchIndexes, length, argument ) {
			var i;
&amp;nbsp;
			if ( argument &amp;lt; 0 ) {
				i = argument + length;
			} else if ( argument &amp;gt; length ) {
				i = length;
			} else {
				i = argument;
			}
&amp;nbsp;
			for ( ; --i &amp;gt;= 0; ) {
				matchIndexes.push( i );
			}
			return matchIndexes;
		} ),
&amp;nbsp;
		gt: createPositionalPseudo( function( matchIndexes, length, argument ) {
			var i = argument &amp;lt; 0 ? argument + length : argument;
			for ( ; ++i &amp;lt; length; ) {
				matchIndexes.push( i );
			}
			return matchIndexes;
		} )
	}
};
&amp;nbsp;
Expr.pseudos.nth = Expr.pseudos.eq;
&amp;nbsp;
// Add button/input type pseudos
for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
	Expr.pseudos[ i ] = createInputPseudo( i );
}
for ( i in { submit: true, reset: true } ) {
	Expr.pseudos[ i ] = createButtonPseudo( i );
}
&amp;nbsp;
// Easy API for creating new setFilters
function setFilters() {}
setFilters.prototype = Expr.filters = Expr.pseudos;
Expr.setFilters = new setFilters();
&amp;nbsp;
function tokenize( selector, parseOnly ) {
	var matched, match, tokens, type,
		soFar, groups, preFilters,
		cached = tokenCache[ selector + &amp;quot; &amp;quot; ];
&amp;nbsp;
	if ( cached ) {
		return parseOnly ? 0 : cached.slice( 0 );
	}
&amp;nbsp;
	soFar = selector;
	groups = [];
	preFilters = Expr.preFilter;
&amp;nbsp;
	while ( soFar ) {
&amp;nbsp;
		// Comma and first run
		if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
			if ( match ) {
&amp;nbsp;
				// Don&#039;t consume trailing commas as valid
				soFar = soFar.slice( match[ 0 ].length ) || soFar;
			}
			groups.push( ( tokens = [] ) );
		}
&amp;nbsp;
		matched = false;
&amp;nbsp;
		// Combinators
		if ( ( match = rleadingCombinator.exec( soFar ) ) ) {
			matched = match.shift();
			tokens.push( {
				value: matched,
&amp;nbsp;
				// Cast descendant combinators to space
				type: match[ 0 ].replace( rtrimCSS, &amp;quot; &amp;quot; )
			} );
			soFar = soFar.slice( matched.length );
		}
&amp;nbsp;
		// Filters
		for ( type in Expr.filter ) {
			if ( ( match = matchExpr[ type ].exec( soFar ) ) &amp;amp;&amp;amp; ( !preFilters[ type ] ||
				( match = preFilters[ type ]( match ) ) ) ) {
				matched = match.shift();
				tokens.push( {
					value: matched,
					type: type,
					matches: match
				} );
				soFar = soFar.slice( matched.length );
			}
		}
&amp;nbsp;
		if ( !matched ) {
			break;
		}
	}
&amp;nbsp;
	// Return the length of the invalid excess
	// if we&#039;re just parsing
	// Otherwise, throw an error or return tokens
	if ( parseOnly ) {
		return soFar.length;
	}
&amp;nbsp;
	return soFar ?
		find.error( selector ) :
&amp;nbsp;
		// Cache the tokens
		tokenCache( selector, groups ).slice( 0 );
}
&amp;nbsp;
function toSelector( tokens ) {
	var i = 0,
		len = tokens.length,
		selector = &amp;quot;&amp;quot;;
	for ( ; i &amp;lt; len; i++ ) {
		selector += tokens[ i ].value;
	}
	return selector;
}
&amp;nbsp;
function addCombinator( matcher, combinator, base ) {
	var dir = combinator.dir,
		skip = combinator.next,
		key = skip || dir,
		checkNonElements = base &amp;amp;&amp;amp; key === &amp;quot;parentNode&amp;quot;,
		doneName = done++;
&amp;nbsp;
	return combinator.first ?
&amp;nbsp;
		// Check against closest ancestor/preceding element
		function( elem, context, xml ) {
			while ( ( elem = elem[ dir ] ) ) {
				if ( elem.nodeType === 1 || checkNonElements ) {
					return matcher( elem, context, xml );
				}
			}
			return false;
		} :
&amp;nbsp;
		// Check against all ancestor/preceding elements
		function( elem, context, xml ) {
			var oldCache, outerCache,
				newCache = [ dirruns, doneName ];
&amp;nbsp;
			// We can&#039;t set arbitrary data on XML nodes, so they don&#039;t benefit from combinator caching
			if ( xml ) {
				while ( ( elem = elem[ dir ] ) ) {
					if ( elem.nodeType === 1 || checkNonElements ) {
						if ( matcher( elem, context, xml ) ) {
							return true;
						}
					}
				}
			} else {
				while ( ( elem = elem[ dir ] ) ) {
					if ( elem.nodeType === 1 || checkNonElements ) {
						outerCache = elem[ expando ] || ( elem[ expando ] = {} );
&amp;nbsp;
						if ( skip &amp;amp;&amp;amp; nodeName( elem, skip ) ) {
							elem = elem[ dir ] || elem;
						} else if ( ( oldCache = outerCache[ key ] ) &amp;amp;&amp;amp;
							oldCache[ 0 ] === dirruns &amp;amp;&amp;amp; oldCache[ 1 ] === doneName ) {
&amp;nbsp;
							// Assign to newCache so results back-propagate to previous elements
							return ( newCache[ 2 ] = oldCache[ 2 ] );
						} else {
&amp;nbsp;
							// Reuse newcache so results back-propagate to previous elements
							outerCache[ key ] = newCache;
&amp;nbsp;
							// A match means we&#039;re done; a fail means we have to keep checking
							if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
								return true;
							}
						}
					}
				}
			}
			return false;
		};
}
&amp;nbsp;
function elementMatcher( matchers ) {
	return matchers.length &amp;gt; 1 ?
		function( elem, context, xml ) {
			var i = matchers.length;
			while ( i-- ) {
				if ( !matchers[ i ]( elem, context, xml ) ) {
					return false;
				}
			}
			return true;
		} :
		matchers[ 0 ];
}
&amp;nbsp;
function multipleContexts( selector, contexts, results ) {
	var i = 0,
		len = contexts.length;
	for ( ; i &amp;lt; len; i++ ) {
		find( selector, contexts[ i ], results );
	}
	return results;
}
&amp;nbsp;
function condense( unmatched, map, filter, context, xml ) {
	var elem,
		newUnmatched = [],
		i = 0,
		len = unmatched.length,
		mapped = map != null;
&amp;nbsp;
	for ( ; i &amp;lt; len; i++ ) {
		if ( ( elem = unmatched[ i ] ) ) {
			if ( !filter || filter( elem, context, xml ) ) {
				newUnmatched.push( elem );
				if ( mapped ) {
					map.push( i );
				}
			}
		}
	}
&amp;nbsp;
	return newUnmatched;
}
&amp;nbsp;
function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
	if ( postFilter &amp;amp;&amp;amp; !postFilter[ expando ] ) {
		postFilter = setMatcher( postFilter );
	}
	if ( postFinder &amp;amp;&amp;amp; !postFinder[ expando ] ) {
		postFinder = setMatcher( postFinder, postSelector );
	}
	return markFunction( function( seed, results, context, xml ) {
		var temp, i, elem, matcherOut,
			preMap = [],
			postMap = [],
			preexisting = results.length,
&amp;nbsp;
			// Get initial elements from seed or context
			elems = seed ||
				multipleContexts( selector || &amp;quot;*&amp;quot;,
					context.nodeType ? [ context ] : context, [] ),
&amp;nbsp;
			// Prefilter to get matcher input, preserving a map for seed-results synchronization
			matcherIn = preFilter &amp;amp;&amp;amp; ( seed || !selector ) ?
				condense( elems, preMap, preFilter, context, xml ) :
				elems;
&amp;nbsp;
		if ( matcher ) {
&amp;nbsp;
			// If we have a postFinder, or filtered seed, or non-seed postFilter
			// or preexisting results,
			matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
&amp;nbsp;
				// ...intermediate processing is necessary
				[] :
&amp;nbsp;
				// ...otherwise use results directly
				results;
&amp;nbsp;
			// Find primary matches
			matcher( matcherIn, matcherOut, context, xml );
		} else {
			matcherOut = matcherIn;
		}
&amp;nbsp;
		// Apply postFilter
		if ( postFilter ) {
			temp = condense( matcherOut, postMap );
			postFilter( temp, [], context, xml );
&amp;nbsp;
			// Un-match failing elements by moving them back to matcherIn
			i = temp.length;
			while ( i-- ) {
				if ( ( elem = temp[ i ] ) ) {
					matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
				}
			}
		}
&amp;nbsp;
		if ( seed ) {
			if ( postFinder || preFilter ) {
				if ( postFinder ) {
&amp;nbsp;
					// Get the final matcherOut by condensing this intermediate into postFinder contexts
					temp = [];
					i = matcherOut.length;
					while ( i-- ) {
						if ( ( elem = matcherOut[ i ] ) ) {
&amp;nbsp;
							// Restore matcherIn since elem is not yet a final match
							temp.push( ( matcherIn[ i ] = elem ) );
						}
					}
					postFinder( null, ( matcherOut = [] ), temp, xml );
				}
&amp;nbsp;
				// Move matched elements from seed to results to keep them synchronized
				i = matcherOut.length;
				while ( i-- ) {
					if ( ( elem = matcherOut[ i ] ) &amp;amp;&amp;amp;
						( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) &amp;gt; -1 ) {
&amp;nbsp;
						seed[ temp ] = !( results[ temp ] = elem );
					}
				}
			}
&amp;nbsp;
		// Add elements to results, through postFinder if defined
		} else {
			matcherOut = condense(
				matcherOut === results ?
					matcherOut.splice( preexisting, matcherOut.length ) :
					matcherOut
			);
			if ( postFinder ) {
				postFinder( null, results, matcherOut, xml );
			} else {
				push.apply( results, matcherOut );
			}
		}
	} );
}
&amp;nbsp;
function matcherFromTokens( tokens ) {
	var checkContext, matcher, j,
		len = tokens.length,
		leadingRelative = Expr.relative[ tokens[ 0 ].type ],
		implicitRelative = leadingRelative || Expr.relative[ &amp;quot; &amp;quot; ],
		i = leadingRelative ? 1 : 0,
&amp;nbsp;
		// The foundational matcher ensures that elements are reachable from top-level context(s)
		matchContext = addCombinator( function( elem ) {
			return elem === checkContext;
		}, implicitRelative, true ),
		matchAnyContext = addCombinator( function( elem ) {
			return indexOf.call( checkContext, elem ) &amp;gt; -1;
		}, implicitRelative, true ),
		matchers = [ function( elem, context, xml ) {
&amp;nbsp;
			// Support: IE 11+, Edge 17 - 18+
			// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
			// two documents; shallow comparisons work.
			// eslint-disable-next-line eqeqeq
			var ret = ( !leadingRelative &amp;amp;&amp;amp; ( xml || context != outermostContext ) ) || (
				( checkContext = context ).nodeType ?
					matchContext( elem, context, xml ) :
					matchAnyContext( elem, context, xml ) );
&amp;nbsp;
			// Avoid hanging onto element
			// (see https://github.com/jquery/sizzle/issues/299)
			checkContext = null;
			return ret;
		} ];
&amp;nbsp;
	for ( ; i &amp;lt; len; i++ ) {
		if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
			matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
		} else {
			matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
&amp;nbsp;
			// Return special upon seeing a positional matcher
			if ( matcher[ expando ] ) {
&amp;nbsp;
				// Find the next relative operator (if any) for proper handling
				j = ++i;
				for ( ; j &amp;lt; len; j++ ) {
					if ( Expr.relative[ tokens[ j ].type ] ) {
						break;
					}
				}
				return setMatcher(
					i &amp;gt; 1 &amp;amp;&amp;amp; elementMatcher( matchers ),
					i &amp;gt; 1 &amp;amp;&amp;amp; toSelector(
&amp;nbsp;
						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
						tokens.slice( 0, i - 1 )
							.concat( { value: tokens[ i - 2 ].type === &amp;quot; &amp;quot; ? &amp;quot;*&amp;quot; : &amp;quot;&amp;quot; } )
					).replace( rtrimCSS, &amp;quot;$1&amp;quot; ),
					matcher,
					i &amp;lt; j &amp;amp;&amp;amp; matcherFromTokens( tokens.slice( i, j ) ),
					j &amp;lt; len &amp;amp;&amp;amp; matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
					j &amp;lt; len &amp;amp;&amp;amp; toSelector( tokens )
				);
			}
			matchers.push( matcher );
		}
	}
&amp;nbsp;
	return elementMatcher( matchers );
}
&amp;nbsp;
function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
	var bySet = setMatchers.length &amp;gt; 0,
		byElement = elementMatchers.length &amp;gt; 0,
		superMatcher = function( seed, context, xml, results, outermost ) {
			var elem, j, matcher,
				matchedCount = 0,
				i = &amp;quot;0&amp;quot;,
				unmatched = seed &amp;amp;&amp;amp; [],
				setMatched = [],
				contextBackup = outermostContext,
&amp;nbsp;
				// We must always have either seed elements or outermost context
				elems = seed || byElement &amp;amp;&amp;amp; Expr.find.TAG( &amp;quot;*&amp;quot;, outermost ),
&amp;nbsp;
				// Use integer dirruns iff this is the outermost matcher
				dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
				len = elems.length;
&amp;nbsp;
			if ( outermost ) {
&amp;nbsp;
				// Support: IE 11+, Edge 17 - 18+
				// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
				// two documents; shallow comparisons work.
				// eslint-disable-next-line eqeqeq
				outermostContext = context == document || context || outermost;
			}
&amp;nbsp;
			// Add elements passing elementMatchers directly to results
			// Support: iOS &amp;lt;=7 - 9 only
			// Tolerate NodeList properties (IE: &amp;quot;length&amp;quot;; Safari: &amp;lt;number&amp;gt;) matching
			// elements by id. (see trac-14142)
			for ( ; i !== len &amp;amp;&amp;amp; ( elem = elems[ i ] ) != null; i++ ) {
				if ( byElement &amp;amp;&amp;amp; elem ) {
					j = 0;
&amp;nbsp;
					// Support: IE 11+, Edge 17 - 18+
					// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
					// two documents; shallow comparisons work.
					// eslint-disable-next-line eqeqeq
					if ( !context &amp;amp;&amp;amp; elem.ownerDocument != document ) {
						setDocument( elem );
						xml = !documentIsHTML;
					}
					while ( ( matcher = elementMatchers[ j++ ] ) ) {
						if ( matcher( elem, context || document, xml ) ) {
							push.call( results, elem );
							break;
						}
					}
					if ( outermost ) {
						dirruns = dirrunsUnique;
					}
				}
&amp;nbsp;
				// Track unmatched elements for set filters
				if ( bySet ) {
&amp;nbsp;
					// They will have gone through all possible matchers
					if ( ( elem = !matcher &amp;amp;&amp;amp; elem ) ) {
						matchedCount--;
					}
&amp;nbsp;
					// Lengthen the array for every element, matched or not
					if ( seed ) {
						unmatched.push( elem );
					}
				}
			}
&amp;nbsp;
			// `i` is now the count of elements visited above, and adding it to `matchedCount`
			// makes the latter nonnegative.
			matchedCount += i;
&amp;nbsp;
			// Apply set filters to unmatched elements
			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
			// equals `i`), unless we didn&#039;t visit _any_ elements in the above loop because we have
			// no element matchers and no seed.
			// Incrementing an initially-string &amp;quot;0&amp;quot; `i` allows `i` to remain a string only in that
			// case, which will result in a &amp;quot;00&amp;quot; `matchedCount` that differs from `i` but is also
			// numerically zero.
			if ( bySet &amp;amp;&amp;amp; i !== matchedCount ) {
				j = 0;
				while ( ( matcher = setMatchers[ j++ ] ) ) {
					matcher( unmatched, setMatched, context, xml );
				}
&amp;nbsp;
				if ( seed ) {
&amp;nbsp;
					// Reintegrate element matches to eliminate the need for sorting
					if ( matchedCount &amp;gt; 0 ) {
						while ( i-- ) {
							if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
								setMatched[ i ] = pop.call( results );
							}
						}
					}
&amp;nbsp;
					// Discard index placeholder values to get only actual matches
					setMatched = condense( setMatched );
				}
&amp;nbsp;
				// Add matches to results
				push.apply( results, setMatched );
&amp;nbsp;
				// Seedless set matches succeeding multiple successful matchers stipulate sorting
				if ( outermost &amp;amp;&amp;amp; !seed &amp;amp;&amp;amp; setMatched.length &amp;gt; 0 &amp;amp;&amp;amp;
					( matchedCount + setMatchers.length ) &amp;gt; 1 ) {
&amp;nbsp;
					jQuery.uniqueSort( results );
				}
			}
&amp;nbsp;
			// Override manipulation of globals by nested matchers
			if ( outermost ) {
				dirruns = dirrunsUnique;
				outermostContext = contextBackup;
			}
&amp;nbsp;
			return unmatched;
		};
&amp;nbsp;
	return bySet ?
		markFunction( superMatcher ) :
		superMatcher;
}
&amp;nbsp;
function compile( selector, match /* Internal Use Only */ ) {
	var i,
		setMatchers = [],
		elementMatchers = [],
		cached = compilerCache[ selector + &amp;quot; &amp;quot; ];
&amp;nbsp;
	if ( !cached ) {
&amp;nbsp;
		// Generate a function of recursive functions that can be used to check each element
		if ( !match ) {
			match = tokenize( selector );
		}
		i = match.length;
		while ( i-- ) {
			cached = matcherFromTokens( match[ i ] );
			if ( cached[ expando ] ) {
				setMatchers.push( cached );
			} else {
				elementMatchers.push( cached );
			}
		}
&amp;nbsp;
		// Cache the compiled function
		cached = compilerCache( selector,
			matcherFromGroupMatchers( elementMatchers, setMatchers ) );
&amp;nbsp;
		// Save selector and tokenization
		cached.selector = selector;
	}
	return cached;
}
&amp;nbsp;
/**
 * A low-level selection function that works with jQuery&#039;s compiled
 *  selector functions
 * @param {String|Function} selector A selector or a pre-compiled
 *  selector function built with jQuery selector compile
 * @param {Element} context
 * @param {Array} [results]
 * @param {Array} [seed] A set of elements to match against
 */
function select( selector, context, results, seed ) {
	var i, tokens, token, type, find,
		compiled = typeof selector === &amp;quot;function&amp;quot; &amp;amp;&amp;amp; selector,
		match = !seed &amp;amp;&amp;amp; tokenize( ( selector = compiled.selector || selector ) );
&amp;nbsp;
	results = results || [];
&amp;nbsp;
	// Try to minimize operations if there is only one selector in the list and no seed
	// (the latter of which guarantees us context)
	if ( match.length === 1 ) {
&amp;nbsp;
		// Reduce context if the leading compound selector is an ID
		tokens = match[ 0 ] = match[ 0 ].slice( 0 );
		if ( tokens.length &amp;gt; 2 &amp;amp;&amp;amp; ( token = tokens[ 0 ] ).type === &amp;quot;ID&amp;quot; &amp;amp;&amp;amp;
				context.nodeType === 9 &amp;amp;&amp;amp; documentIsHTML &amp;amp;&amp;amp; Expr.relative[ tokens[ 1 ].type ] ) {
&amp;nbsp;
			context = ( Expr.find.ID(
				token.matches[ 0 ].replace( runescape, funescape ),
				context
			) || [] )[ 0 ];
			if ( !context ) {
				return results;
&amp;nbsp;
			// Precompiled matchers will still verify ancestry, so step up a level
			} else if ( compiled ) {
				context = context.parentNode;
			}
&amp;nbsp;
			selector = selector.slice( tokens.shift().value.length );
		}
&amp;nbsp;
		// Fetch a seed set for right-to-left matching
		i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;
		while ( i-- ) {
			token = tokens[ i ];
&amp;nbsp;
			// Abort if we hit a combinator
			if ( Expr.relative[ ( type = token.type ) ] ) {
				break;
			}
			if ( ( find = Expr.find[ type ] ) ) {
&amp;nbsp;
				// Search, expanding context for leading sibling combinators
				if ( ( seed = find(
					token.matches[ 0 ].replace( runescape, funescape ),
					rsibling.test( tokens[ 0 ].type ) &amp;amp;&amp;amp;
						testContext( context.parentNode ) || context
				) ) ) {
&amp;nbsp;
					// If seed is empty or no tokens remain, we can return early
					tokens.splice( i, 1 );
					selector = seed.length &amp;amp;&amp;amp; toSelector( tokens );
					if ( !selector ) {
						push.apply( results, seed );
						return results;
					}
&amp;nbsp;
					break;
				}
			}
		}
	}
&amp;nbsp;
	// Compile and execute a filtering function if one is not provided
	// Provide `match` to avoid retokenization if we modified the selector above
	( compiled || compile( selector, match ) )(
		seed,
		context,
		!documentIsHTML,
		results,
		!context || rsibling.test( selector ) &amp;amp;&amp;amp; testContext( context.parentNode ) || context
	);
	return results;
}
&amp;nbsp;
// One-time assignments
&amp;nbsp;
// Support: Android &amp;lt;=4.0 - 4.1+
// Sort stability
support.sortStable = expando.split( &amp;quot;&amp;quot; ).sort( sortOrder ).join( &amp;quot;&amp;quot; ) === expando;
&amp;nbsp;
// Initialize against the default document
setDocument();
&amp;nbsp;
// Support: Android &amp;lt;=4.0 - 4.1+
// Detached nodes confoundingly follow *each other*
support.sortDetached = assert( function( el ) {
&amp;nbsp;
	// Should return 1, but returns 4 (following)
	return el.compareDocumentPosition( document.createElement( &amp;quot;fieldset&amp;quot; ) ) &amp;amp; 1;
} );
&amp;nbsp;
jQuery.find = find;
&amp;nbsp;
// Deprecated
jQuery.expr[ &amp;quot;:&amp;quot; ] = jQuery.expr.pseudos;
jQuery.unique = jQuery.uniqueSort;
&amp;nbsp;
// These have always been private, but they used to be documented as part of
// Sizzle so let&#039;s maintain them for now for backwards compatibility purposes.
find.compile = compile;
find.select = select;
find.setDocument = setDocument;
find.tokenize = tokenize;
&amp;nbsp;
find.escape = jQuery.escapeSelector;
find.getText = jQuery.text;
find.isXML = jQuery.isXMLDoc;
find.selectors = jQuery.expr;
find.support = jQuery.support;
find.uniqueSort = jQuery.uniqueSort;
&amp;nbsp;
	/* eslint-enable */
&amp;nbsp;
} )();
&amp;nbsp;
&amp;nbsp;
var dir = function( elem, dir, until ) {
	var matched = [],
		truncate = until !== undefined;
&amp;nbsp;
	while ( ( elem = elem[ dir ] ) &amp;amp;&amp;amp; elem.nodeType !== 9 ) {
		if ( elem.nodeType === 1 ) {
			if ( truncate &amp;amp;&amp;amp; jQuery( elem ).is( until ) ) {
				break;
			}
			matched.push( elem );
		}
	}
	return matched;
};
&amp;nbsp;
&amp;nbsp;
var siblings = function( n, elem ) {
	var matched = [];
&amp;nbsp;
	for ( ; n; n = n.nextSibling ) {
		if ( n.nodeType === 1 &amp;amp;&amp;amp; n !== elem ) {
			matched.push( n );
		}
	}
&amp;nbsp;
	return matched;
};
&amp;nbsp;
&amp;nbsp;
var rneedsContext = jQuery.expr.match.needsContext;
&amp;nbsp;
var rsingleTag = ( /^&amp;lt;([a-z][^\/\0&amp;gt;:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?&amp;gt;(?:&amp;lt;\/\1&amp;gt;|)$/i );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// Implement the identical functionality for filter and not
function winnow( elements, qualifier, not ) {
	if ( isFunction( qualifier ) ) {
		return jQuery.grep( elements, function( elem, i ) {
			return !!qualifier.call( elem, i, elem ) !== not;
		} );
	}
&amp;nbsp;
	// Single element
	if ( qualifier.nodeType ) {
		return jQuery.grep( elements, function( elem ) {
			return ( elem === qualifier ) !== not;
		} );
	}
&amp;nbsp;
	// Arraylike of elements (jQuery, arguments, Array)
	if ( typeof qualifier !== &amp;quot;string&amp;quot; ) {
		return jQuery.grep( elements, function( elem ) {
			return ( indexOf.call( qualifier, elem ) &amp;gt; -1 ) !== not;
		} );
	}
&amp;nbsp;
	// Filtered directly for both simple and complex selectors
	return jQuery.filter( qualifier, elements, not );
}
&amp;nbsp;
jQuery.filter = function( expr, elems, not ) {
	var elem = elems[ 0 ];
&amp;nbsp;
	if ( not ) {
		expr = &amp;quot;:not(&amp;quot; + expr + &amp;quot;)&amp;quot;;
	}
&amp;nbsp;
	if ( elems.length === 1 &amp;amp;&amp;amp; elem.nodeType === 1 ) {
		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
	}
&amp;nbsp;
	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
		return elem.nodeType === 1;
	} ) );
};
&amp;nbsp;
jQuery.fn.extend( {
	find: function( selector ) {
		var i, ret,
			len = this.length,
			self = this;
&amp;nbsp;
		if ( typeof selector !== &amp;quot;string&amp;quot; ) {
			return this.pushStack( jQuery( selector ).filter( function() {
				for ( i = 0; i &amp;lt; len; i++ ) {
					if ( jQuery.contains( self[ i ], this ) ) {
						return true;
					}
				}
			} ) );
		}
&amp;nbsp;
		ret = this.pushStack( [] );
&amp;nbsp;
		for ( i = 0; i &amp;lt; len; i++ ) {
			jQuery.find( selector, self[ i ], ret );
		}
&amp;nbsp;
		return len &amp;gt; 1 ? jQuery.uniqueSort( ret ) : ret;
	},
	filter: function( selector ) {
		return this.pushStack( winnow( this, selector || [], false ) );
	},
	not: function( selector ) {
		return this.pushStack( winnow( this, selector || [], true ) );
	},
	is: function( selector ) {
		return !!winnow(
			this,
&amp;nbsp;
			// If this is a positional/relative selector, check membership in the returned set
			// so $(&amp;quot;p:first&amp;quot;).is(&amp;quot;p:last&amp;quot;) won&#039;t return true for a doc with two &amp;quot;p&amp;quot;.
			typeof selector === &amp;quot;string&amp;quot; &amp;amp;&amp;amp; rneedsContext.test( selector ) ?
				jQuery( selector ) :
				selector || [],
			false
		).length;
	}
} );
&amp;nbsp;
&amp;nbsp;
// Initialize a jQuery object
&amp;nbsp;
&amp;nbsp;
// A central reference to the root jQuery(document)
var rootjQuery,
&amp;nbsp;
	// A simple way to check for HTML strings
	// Prioritize #id over &amp;lt;tag&amp;gt; to avoid XSS via location.hash (trac-9521)
	// Strict HTML recognition (trac-11290: must start with &amp;lt;)
	// Shortcut simple #id case for speed
	rquickExpr = /^(?:\s*(&amp;lt;[\w\W]+&amp;gt;)[^&amp;gt;]*|#([\w-]+))$/,
&amp;nbsp;
	init = jQuery.fn.init = function( selector, context, root ) {
		var match, elem;
&amp;nbsp;
		// HANDLE: $(&amp;quot;&amp;quot;), $(null), $(undefined), $(false)
		if ( !selector ) {
			return this;
		}
&amp;nbsp;
		// Method init() accepts an alternate rootjQuery
		// so migrate can support jQuery.sub (gh-2101)
		root = root || rootjQuery;
&amp;nbsp;
		// Handle HTML strings
		if ( typeof selector === &amp;quot;string&amp;quot; ) {
			if ( selector[ 0 ] === &amp;quot;&amp;lt;&amp;quot; &amp;amp;&amp;amp;
				selector[ selector.length - 1 ] === &amp;quot;&amp;gt;&amp;quot; &amp;amp;&amp;amp;
				selector.length &amp;gt;= 3 ) {
&amp;nbsp;
				// Assume that strings that start and end with &amp;lt;&amp;gt; are HTML and skip the regex check
				match = [ null, selector, null ];
&amp;nbsp;
			} else {
				match = rquickExpr.exec( selector );
			}
&amp;nbsp;
			// Match html or make sure no context is specified for #id
			if ( match &amp;amp;&amp;amp; ( match[ 1 ] || !context ) ) {
&amp;nbsp;
				// HANDLE: $(html) -&amp;gt; $(array)
				if ( match[ 1 ] ) {
					context = context instanceof jQuery ? context[ 0 ] : context;
&amp;nbsp;
					// Option to run scripts is true for back-compat
					// Intentionally let the error be thrown if parseHTML is not present
					jQuery.merge( this, jQuery.parseHTML(
						match[ 1 ],
						context &amp;amp;&amp;amp; context.nodeType ? context.ownerDocument || context : document,
						true
					) );
&amp;nbsp;
					// HANDLE: $(html, props)
					if ( rsingleTag.test( match[ 1 ] ) &amp;amp;&amp;amp; jQuery.isPlainObject( context ) ) {
						for ( match in context ) {
&amp;nbsp;
							// Properties of context are called as methods if possible
							if ( isFunction( this[ match ] ) ) {
								this[ match ]( context[ match ] );
&amp;nbsp;
							// ...and otherwise set as attributes
							} else {
								this.attr( match, context[ match ] );
							}
						}
					}
&amp;nbsp;
					return this;
&amp;nbsp;
				// HANDLE: $(#id)
				} else {
					elem = document.getElementById( match[ 2 ] );
&amp;nbsp;
					if ( elem ) {
&amp;nbsp;
						// Inject the element directly into the jQuery object
						this[ 0 ] = elem;
						this.length = 1;
					}
					return this;
				}
&amp;nbsp;
			// HANDLE: $(expr, $(...))
			} else if ( !context || context.jquery ) {
				return ( context || root ).find( selector );
&amp;nbsp;
			// HANDLE: $(expr, context)
			// (which is just equivalent to: $(context).find(expr)
			} else {
				return this.constructor( context ).find( selector );
			}
&amp;nbsp;
		// HANDLE: $(DOMElement)
		} else if ( selector.nodeType ) {
			this[ 0 ] = selector;
			this.length = 1;
			return this;
&amp;nbsp;
		// HANDLE: $(function)
		// Shortcut for document ready
		} else if ( isFunction( selector ) ) {
			return root.ready !== undefined ?
				root.ready( selector ) :
&amp;nbsp;
				// Execute immediately if ready is not present
				selector( jQuery );
		}
&amp;nbsp;
		return jQuery.makeArray( selector, this );
	};
&amp;nbsp;
// Give the init function the jQuery prototype for later instantiation
init.prototype = jQuery.fn;
&amp;nbsp;
// Initialize central reference
rootjQuery = jQuery( document );
&amp;nbsp;
&amp;nbsp;
var rparentsprev = /^(?:parents|prev(?:Until|All))/,
&amp;nbsp;
	// Methods guaranteed to produce a unique set when starting from a unique set
	guaranteedUnique = {
		children: true,
		contents: true,
		next: true,
		prev: true
	};
&amp;nbsp;
jQuery.fn.extend( {
	has: function( target ) {
		var targets = jQuery( target, this ),
			l = targets.length;
&amp;nbsp;
		return this.filter( function() {
			var i = 0;
			for ( ; i &amp;lt; l; i++ ) {
				if ( jQuery.contains( this, targets[ i ] ) ) {
					return true;
				}
			}
		} );
	},
&amp;nbsp;
	closest: function( selectors, context ) {
		var cur,
			i = 0,
			l = this.length,
			matched = [],
			targets = typeof selectors !== &amp;quot;string&amp;quot; &amp;amp;&amp;amp; jQuery( selectors );
&amp;nbsp;
		// Positional selectors never match, since there&#039;s no _selection_ context
		if ( !rneedsContext.test( selectors ) ) {
			for ( ; i &amp;lt; l; i++ ) {
				for ( cur = this[ i ]; cur &amp;amp;&amp;amp; cur !== context; cur = cur.parentNode ) {
&amp;nbsp;
					// Always skip document fragments
					if ( cur.nodeType &amp;lt; 11 &amp;amp;&amp;amp; ( targets ?
						targets.index( cur ) &amp;gt; -1 :
&amp;nbsp;
						// Don&#039;t pass non-elements to jQuery#find
						cur.nodeType === 1 &amp;amp;&amp;amp;
							jQuery.find.matchesSelector( cur, selectors ) ) ) {
&amp;nbsp;
						matched.push( cur );
						break;
					}
				}
			}
		}
&amp;nbsp;
		return this.pushStack( matched.length &amp;gt; 1 ? jQuery.uniqueSort( matched ) : matched );
	},
&amp;nbsp;
	// Determine the position of an element within the set
	index: function( elem ) {
&amp;nbsp;
		// No argument, return index in parent
		if ( !elem ) {
			return ( this[ 0 ] &amp;amp;&amp;amp; this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
		}
&amp;nbsp;
		// Index in selector
		if ( typeof elem === &amp;quot;string&amp;quot; ) {
			return indexOf.call( jQuery( elem ), this[ 0 ] );
		}
&amp;nbsp;
		// Locate the position of the desired element
		return indexOf.call( this,
&amp;nbsp;
			// If it receives a jQuery object, the first element is used
			elem.jquery ? elem[ 0 ] : elem
		);
	},
&amp;nbsp;
	add: function( selector, context ) {
		return this.pushStack(
			jQuery.uniqueSort(
				jQuery.merge( this.get(), jQuery( selector, context ) )
			)
		);
	},
&amp;nbsp;
	addBack: function( selector ) {
		return this.add( selector == null ?
			this.prevObject : this.prevObject.filter( selector )
		);
	}
} );
&amp;nbsp;
function sibling( cur, dir ) {
	while ( ( cur = cur[ dir ] ) &amp;amp;&amp;amp; cur.nodeType !== 1 ) {}
	return cur;
}
&amp;nbsp;
jQuery.each( {
	parent: function( elem ) {
		var parent = elem.parentNode;
		return parent &amp;amp;&amp;amp; parent.nodeType !== 11 ? parent : null;
	},
	parents: function( elem ) {
		return dir( elem, &amp;quot;parentNode&amp;quot; );
	},
	parentsUntil: function( elem, _i, until ) {
		return dir( elem, &amp;quot;parentNode&amp;quot;, until );
	},
	next: function( elem ) {
		return sibling( elem, &amp;quot;nextSibling&amp;quot; );
	},
	prev: function( elem ) {
		return sibling( elem, &amp;quot;previousSibling&amp;quot; );
	},
	nextAll: function( elem ) {
		return dir( elem, &amp;quot;nextSibling&amp;quot; );
	},
	prevAll: function( elem ) {
		return dir( elem, &amp;quot;previousSibling&amp;quot; );
	},
	nextUntil: function( elem, _i, until ) {
		return dir( elem, &amp;quot;nextSibling&amp;quot;, until );
	},
	prevUntil: function( elem, _i, until ) {
		return dir( elem, &amp;quot;previousSibling&amp;quot;, until );
	},
	siblings: function( elem ) {
		return siblings( ( elem.parentNode || {} ).firstChild, elem );
	},
	children: function( elem ) {
		return siblings( elem.firstChild );
	},
	contents: function( elem ) {
		if ( elem.contentDocument != null &amp;amp;&amp;amp;
&amp;nbsp;
			// Support: IE 11+
			// &amp;lt;object&amp;gt; elements with no `data` attribute has an object
			// `contentDocument` with a `null` prototype.
			getProto( elem.contentDocument ) ) {
&amp;nbsp;
			return elem.contentDocument;
		}
&amp;nbsp;
		// Support: IE 9 - 11 only, iOS 7 only, Android Browser &amp;lt;=4.3 only
		// Treat the template element as a regular one in browsers that
		// don&#039;t support it.
		if ( nodeName( elem, &amp;quot;template&amp;quot; ) ) {
			elem = elem.content || elem;
		}
&amp;nbsp;
		return jQuery.merge( [], elem.childNodes );
	}
}, function( name, fn ) {
	jQuery.fn[ name ] = function( until, selector ) {
		var matched = jQuery.map( this, fn, until );
&amp;nbsp;
		if ( name.slice( -5 ) !== &amp;quot;Until&amp;quot; ) {
			selector = until;
		}
&amp;nbsp;
		if ( selector &amp;amp;&amp;amp; typeof selector === &amp;quot;string&amp;quot; ) {
			matched = jQuery.filter( selector, matched );
		}
&amp;nbsp;
		if ( this.length &amp;gt; 1 ) {
&amp;nbsp;
			// Remove duplicates
			if ( !guaranteedUnique[ name ] ) {
				jQuery.uniqueSort( matched );
			}
&amp;nbsp;
			// Reverse order for parents* and prev-derivatives
			if ( rparentsprev.test( name ) ) {
				matched.reverse();
			}
		}
&amp;nbsp;
		return this.pushStack( matched );
	};
} );
var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// Convert String-formatted options into Object-formatted ones
function createOptions( options ) {
	var object = {};
	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
		object[ flag ] = true;
	} );
	return object;
}
&amp;nbsp;
/*
 * Create a callback list using the following parameters:
 *
 *	options: an optional list of space-separated options that will change how
 *			the callback list behaves or a more traditional option object
 *
 * By default a callback list will act like an event callback list and can be
 * &amp;quot;fired&amp;quot; multiple times.
 *
 * Possible options:
 *
 *	once:			will ensure the callback list can only be fired once (like a Deferred)
 *
 *	memory:			will keep track of previous values and will call any callback added
 *					after the list has been fired right away with the latest &amp;quot;memorized&amp;quot;
 *					values (like a Deferred)
 *
 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
 *
 *	stopOnFalse:	interrupt callings when a callback returns false
 *
 */
jQuery.Callbacks = function( options ) {
&amp;nbsp;
	// Convert options from String-formatted to Object-formatted if needed
	// (we check in cache first)
	options = typeof options === &amp;quot;string&amp;quot; ?
		createOptions( options ) :
		jQuery.extend( {}, options );
&amp;nbsp;
	var // Flag to know if list is currently firing
		firing,
&amp;nbsp;
		// Last fire value for non-forgettable lists
		memory,
&amp;nbsp;
		// Flag to know if list was already fired
		fired,
&amp;nbsp;
		// Flag to prevent firing
		locked,
&amp;nbsp;
		// Actual callback list
		list = [],
&amp;nbsp;
		// Queue of execution data for repeatable lists
		queue = [],
&amp;nbsp;
		// Index of currently firing callback (modified by add/remove as needed)
		firingIndex = -1,
&amp;nbsp;
		// Fire callbacks
		fire = function() {
&amp;nbsp;
			// Enforce single-firing
			locked = locked || options.once;
&amp;nbsp;
			// Execute callbacks for all pending executions,
			// respecting firingIndex overrides and runtime changes
			fired = firing = true;
			for ( ; queue.length; firingIndex = -1 ) {
				memory = queue.shift();
				while ( ++firingIndex &amp;lt; list.length ) {
&amp;nbsp;
					// Run callback and check for early termination
					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &amp;amp;&amp;amp;
						options.stopOnFalse ) {
&amp;nbsp;
						// Jump to end and forget the data so .add doesn&#039;t re-fire
						firingIndex = list.length;
						memory = false;
					}
				}
			}
&amp;nbsp;
			// Forget the data if we&#039;re done with it
			if ( !options.memory ) {
				memory = false;
			}
&amp;nbsp;
			firing = false;
&amp;nbsp;
			// Clean up if we&#039;re done firing for good
			if ( locked ) {
&amp;nbsp;
				// Keep an empty list if we have data for future add calls
				if ( memory ) {
					list = [];
&amp;nbsp;
				// Otherwise, this object is spent
				} else {
					list = &amp;quot;&amp;quot;;
				}
			}
		},
&amp;nbsp;
		// Actual Callbacks object
		self = {
&amp;nbsp;
			// Add a callback or a collection of callbacks to the list
			add: function() {
				if ( list ) {
&amp;nbsp;
					// If we have memory from a past run, we should fire after adding
					if ( memory &amp;amp;&amp;amp; !firing ) {
						firingIndex = list.length - 1;
						queue.push( memory );
					}
&amp;nbsp;
					( function add( args ) {
						jQuery.each( args, function( _, arg ) {
							if ( isFunction( arg ) ) {
								if ( !options.unique || !self.has( arg ) ) {
									list.push( arg );
								}
							} else if ( arg &amp;amp;&amp;amp; arg.length &amp;amp;&amp;amp; toType( arg ) !== &amp;quot;string&amp;quot; ) {
&amp;nbsp;
								// Inspect recursively
								add( arg );
							}
						} );
					} )( arguments );
&amp;nbsp;
					if ( memory &amp;amp;&amp;amp; !firing ) {
						fire();
					}
				}
				return this;
			},
&amp;nbsp;
			// Remove a callback from the list
			remove: function() {
				jQuery.each( arguments, function( _, arg ) {
					var index;
					while ( ( index = jQuery.inArray( arg, list, index ) ) &amp;gt; -1 ) {
						list.splice( index, 1 );
&amp;nbsp;
						// Handle firing indexes
						if ( index &amp;lt;= firingIndex ) {
							firingIndex--;
						}
					}
				} );
				return this;
			},
&amp;nbsp;
			// Check if a given callback is in the list.
			// If no argument is given, return whether or not list has callbacks attached.
			has: function( fn ) {
				return fn ?
					jQuery.inArray( fn, list ) &amp;gt; -1 :
					list.length &amp;gt; 0;
			},
&amp;nbsp;
			// Remove all callbacks from the list
			empty: function() {
				if ( list ) {
					list = [];
				}
				return this;
			},
&amp;nbsp;
			// Disable .fire and .add
			// Abort any current/pending executions
			// Clear all callbacks and values
			disable: function() {
				locked = queue = [];
				list = memory = &amp;quot;&amp;quot;;
				return this;
			},
			disabled: function() {
				return !list;
			},
&amp;nbsp;
			// Disable .fire
			// Also disable .add unless we have memory (since it would have no effect)
			// Abort any pending executions
			lock: function() {
				locked = queue = [];
				if ( !memory &amp;amp;&amp;amp; !firing ) {
					list = memory = &amp;quot;&amp;quot;;
				}
				return this;
			},
			locked: function() {
				return !!locked;
			},
&amp;nbsp;
			// Call all callbacks with the given context and arguments
			fireWith: function( context, args ) {
				if ( !locked ) {
					args = args || [];
					args = [ context, args.slice ? args.slice() : args ];
					queue.push( args );
					if ( !firing ) {
						fire();
					}
				}
				return this;
			},
&amp;nbsp;
			// Call all the callbacks with the given arguments
			fire: function() {
				self.fireWith( this, arguments );
				return this;
			},
&amp;nbsp;
			// To know if the callbacks have already been called at least once
			fired: function() {
				return !!fired;
			}
		};
&amp;nbsp;
	return self;
};
&amp;nbsp;
&amp;nbsp;
function Identity( v ) {
	return v;
}
function Thrower( ex ) {
	throw ex;
}
&amp;nbsp;
function adoptValue( value, resolve, reject, noValue ) {
	var method;
&amp;nbsp;
	try {
&amp;nbsp;
		// Check for promise aspect first to privilege synchronous behavior
		if ( value &amp;amp;&amp;amp; isFunction( ( method = value.promise ) ) ) {
			method.call( value ).done( resolve ).fail( reject );
&amp;nbsp;
		// Other thenables
		} else if ( value &amp;amp;&amp;amp; isFunction( ( method = value.then ) ) ) {
			method.call( value, resolve, reject );
&amp;nbsp;
		// Other non-thenables
		} else {
&amp;nbsp;
			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
			// * false: [ value ].slice( 0 ) =&amp;gt; resolve( value )
			// * true: [ value ].slice( 1 ) =&amp;gt; resolve()
			resolve.apply( undefined, [ value ].slice( noValue ) );
		}
&amp;nbsp;
	// For Promises/A+, convert exceptions into rejections
	// Since jQuery.when doesn&#039;t unwrap thenables, we can skip the extra checks appearing in
	// Deferred#then to conditionally suppress rejection.
	} catch ( value ) {
&amp;nbsp;
		// Support: Android 4.0 only
		// Strict mode functions invoked without .call/.apply get global-object context
		reject.apply( undefined, [ value ] );
	}
}
&amp;nbsp;
jQuery.extend( {
&amp;nbsp;
	Deferred: function( func ) {
		var tuples = [
&amp;nbsp;
				// action, add listener, callbacks,
				// ... .then handlers, argument index, [final state]
				[ &amp;quot;notify&amp;quot;, &amp;quot;progress&amp;quot;, jQuery.Callbacks( &amp;quot;memory&amp;quot; ),
					jQuery.Callbacks( &amp;quot;memory&amp;quot; ), 2 ],
				[ &amp;quot;resolve&amp;quot;, &amp;quot;done&amp;quot;, jQuery.Callbacks( &amp;quot;once memory&amp;quot; ),
					jQuery.Callbacks( &amp;quot;once memory&amp;quot; ), 0, &amp;quot;resolved&amp;quot; ],
				[ &amp;quot;reject&amp;quot;, &amp;quot;fail&amp;quot;, jQuery.Callbacks( &amp;quot;once memory&amp;quot; ),
					jQuery.Callbacks( &amp;quot;once memory&amp;quot; ), 1, &amp;quot;rejected&amp;quot; ]
			],
			state = &amp;quot;pending&amp;quot;,
			promise = {
				state: function() {
					return state;
				},
				always: function() {
					deferred.done( arguments ).fail( arguments );
					return this;
				},
				&amp;quot;catch&amp;quot;: function( fn ) {
					return promise.then( null, fn );
				},
&amp;nbsp;
				// Keep pipe for back-compat
				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
					var fns = arguments;
&amp;nbsp;
					return jQuery.Deferred( function( newDefer ) {
						jQuery.each( tuples, function( _i, tuple ) {
&amp;nbsp;
							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
							var fn = isFunction( fns[ tuple[ 4 ] ] ) &amp;amp;&amp;amp; fns[ tuple[ 4 ] ];
&amp;nbsp;
							// deferred.progress(function() { bind to newDefer or newDefer.notify })
							// deferred.done(function() { bind to newDefer or newDefer.resolve })
							// deferred.fail(function() { bind to newDefer or newDefer.reject })
							deferred[ tuple[ 1 ] ]( function() {
								var returned = fn &amp;amp;&amp;amp; fn.apply( this, arguments );
								if ( returned &amp;amp;&amp;amp; isFunction( returned.promise ) ) {
									returned.promise()
										.progress( newDefer.notify )
										.done( newDefer.resolve )
										.fail( newDefer.reject );
								} else {
									newDefer[ tuple[ 0 ] + &amp;quot;With&amp;quot; ](
										this,
										fn ? [ returned ] : arguments
									);
								}
							} );
						} );
						fns = null;
					} ).promise();
				},
				then: function( onFulfilled, onRejected, onProgress ) {
					var maxDepth = 0;
					function resolve( depth, deferred, handler, special ) {
						return function() {
							var that = this,
								args = arguments,
								mightThrow = function() {
									var returned, then;
&amp;nbsp;
									// Support: Promises/A+ section 2.3.3.3.3
									// https://promisesaplus.com/#point-59
									// Ignore double-resolution attempts
									if ( depth &amp;lt; maxDepth ) {
										return;
									}
&amp;nbsp;
									returned = handler.apply( that, args );
&amp;nbsp;
									// Support: Promises/A+ section 2.3.1
									// https://promisesaplus.com/#point-48
									if ( returned === deferred.promise() ) {
										throw new TypeError( &amp;quot;Thenable self-resolution&amp;quot; );
									}
&amp;nbsp;
									// Support: Promises/A+ sections 2.3.3.1, 3.5
									// https://promisesaplus.com/#point-54
									// https://promisesaplus.com/#point-75
									// Retrieve `then` only once
									then = returned &amp;amp;&amp;amp;
&amp;nbsp;
										// Support: Promises/A+ section 2.3.4
										// https://promisesaplus.com/#point-64
										// Only check objects and functions for thenability
										( typeof returned === &amp;quot;object&amp;quot; ||
											typeof returned === &amp;quot;function&amp;quot; ) &amp;amp;&amp;amp;
										returned.then;
&amp;nbsp;
									// Handle a returned thenable
									if ( isFunction( then ) ) {
&amp;nbsp;
										// Special processors (notify) just wait for resolution
										if ( special ) {
											then.call(
												returned,
												resolve( maxDepth, deferred, Identity, special ),
												resolve( maxDepth, deferred, Thrower, special )
											);
&amp;nbsp;
										// Normal processors (resolve) also hook into progress
										} else {
&amp;nbsp;
											// ...and disregard older resolution values
											maxDepth++;
&amp;nbsp;
											then.call(
												returned,
												resolve( maxDepth, deferred, Identity, special ),
												resolve( maxDepth, deferred, Thrower, special ),
												resolve( maxDepth, deferred, Identity,
													deferred.notifyWith )
											);
										}
&amp;nbsp;
									// Handle all other returned values
									} else {
&amp;nbsp;
										// Only substitute handlers pass on context
										// and multiple values (non-spec behavior)
										if ( handler !== Identity ) {
											that = undefined;
											args = [ returned ];
										}
&amp;nbsp;
										// Process the value(s)
										// Default process is resolve
										( special || deferred.resolveWith )( that, args );
									}
								},
&amp;nbsp;
								// Only normal processors (resolve) catch and reject exceptions
								process = special ?
									mightThrow :
									function() {
										try {
											mightThrow();
										} catch ( e ) {
&amp;nbsp;
											if ( jQuery.Deferred.exceptionHook ) {
												jQuery.Deferred.exceptionHook( e,
													process.error );
											}
&amp;nbsp;
											// Support: Promises/A+ section 2.3.3.3.4.1
											// https://promisesaplus.com/#point-61
											// Ignore post-resolution exceptions
											if ( depth + 1 &amp;gt;= maxDepth ) {
&amp;nbsp;
												// Only substitute handlers pass on context
												// and multiple values (non-spec behavior)
												if ( handler !== Thrower ) {
													that = undefined;
													args = [ e ];
												}
&amp;nbsp;
												deferred.rejectWith( that, args );
											}
										}
									};
&amp;nbsp;
							// Support: Promises/A+ section 2.3.3.3.1
							// https://promisesaplus.com/#point-57
							// Re-resolve promises immediately to dodge false rejection from
							// subsequent errors
							if ( depth ) {
								process();
							} else {
&amp;nbsp;
								// Call an optional hook to record the error, in case of exception
								// since it&#039;s otherwise lost when execution goes async
								if ( jQuery.Deferred.getErrorHook ) {
									process.error = jQuery.Deferred.getErrorHook();
&amp;nbsp;
								// The deprecated alias of the above. While the name suggests
								// returning the stack, not an error instance, jQuery just passes
								// it directly to `console.warn` so both will work; an instance
								// just better cooperates with source maps.
								} else if ( jQuery.Deferred.getStackHook ) {
									process.error = jQuery.Deferred.getStackHook();
								}
								window.setTimeout( process );
							}
						};
					}
&amp;nbsp;
					return jQuery.Deferred( function( newDefer ) {
&amp;nbsp;
						// progress_handlers.add( ... )
						tuples[ 0 ][ 3 ].add(
							resolve(
								0,
								newDefer,
								isFunction( onProgress ) ?
									onProgress :
									Identity,
								newDefer.notifyWith
							)
						);
&amp;nbsp;
						// fulfilled_handlers.add( ... )
						tuples[ 1 ][ 3 ].add(
							resolve(
								0,
								newDefer,
								isFunction( onFulfilled ) ?
									onFulfilled :
									Identity
							)
						);
&amp;nbsp;
						// rejected_handlers.add( ... )
						tuples[ 2 ][ 3 ].add(
							resolve(
								0,
								newDefer,
								isFunction( onRejected ) ?
									onRejected :
									Thrower
							)
						);
					} ).promise();
				},
&amp;nbsp;
				// Get a promise for this deferred
				// If obj is provided, the promise aspect is added to the object
				promise: function( obj ) {
					return obj != null ? jQuery.extend( obj, promise ) : promise;
				}
			},
			deferred = {};
&amp;nbsp;
		// Add list-specific methods
		jQuery.each( tuples, function( i, tuple ) {
			var list = tuple[ 2 ],
				stateString = tuple[ 5 ];
&amp;nbsp;
			// promise.progress = list.add
			// promise.done = list.add
			// promise.fail = list.add
			promise[ tuple[ 1 ] ] = list.add;
&amp;nbsp;
			// Handle state
			if ( stateString ) {
				list.add(
					function() {
&amp;nbsp;
						// state = &amp;quot;resolved&amp;quot; (i.e., fulfilled)
						// state = &amp;quot;rejected&amp;quot;
						state = stateString;
					},
&amp;nbsp;
					// rejected_callbacks.disable
					// fulfilled_callbacks.disable
					tuples[ 3 - i ][ 2 ].disable,
&amp;nbsp;
					// rejected_handlers.disable
					// fulfilled_handlers.disable
					tuples[ 3 - i ][ 3 ].disable,
&amp;nbsp;
					// progress_callbacks.lock
					tuples[ 0 ][ 2 ].lock,
&amp;nbsp;
					// progress_handlers.lock
					tuples[ 0 ][ 3 ].lock
				);
			}
&amp;nbsp;
			// progress_handlers.fire
			// fulfilled_handlers.fire
			// rejected_handlers.fire
			list.add( tuple[ 3 ].fire );
&amp;nbsp;
			// deferred.notify = function() { deferred.notifyWith(...) }
			// deferred.resolve = function() { deferred.resolveWith(...) }
			// deferred.reject = function() { deferred.rejectWith(...) }
			deferred[ tuple[ 0 ] ] = function() {
				deferred[ tuple[ 0 ] + &amp;quot;With&amp;quot; ]( this === deferred ? undefined : this, arguments );
				return this;
			};
&amp;nbsp;
			// deferred.notifyWith = list.fireWith
			// deferred.resolveWith = list.fireWith
			// deferred.rejectWith = list.fireWith
			deferred[ tuple[ 0 ] + &amp;quot;With&amp;quot; ] = list.fireWith;
		} );
&amp;nbsp;
		// Make the deferred a promise
		promise.promise( deferred );
&amp;nbsp;
		// Call given func if any
		if ( func ) {
			func.call( deferred, deferred );
		}
&amp;nbsp;
		// All done!
		return deferred;
	},
&amp;nbsp;
	// Deferred helper
	when: function( singleValue ) {
		var
&amp;nbsp;
			// count of uncompleted subordinates
			remaining = arguments.length,
&amp;nbsp;
			// count of unprocessed arguments
			i = remaining,
&amp;nbsp;
			// subordinate fulfillment data
			resolveContexts = Array( i ),
			resolveValues = slice.call( arguments ),
&amp;nbsp;
			// the primary Deferred
			primary = jQuery.Deferred(),
&amp;nbsp;
			// subordinate callback factory
			updateFunc = function( i ) {
				return function( value ) {
					resolveContexts[ i ] = this;
					resolveValues[ i ] = arguments.length &amp;gt; 1 ? slice.call( arguments ) : value;
					if ( !( --remaining ) ) {
						primary.resolveWith( resolveContexts, resolveValues );
					}
				};
			};
&amp;nbsp;
		// Single- and empty arguments are adopted like Promise.resolve
		if ( remaining &amp;lt;= 1 ) {
			adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
				!remaining );
&amp;nbsp;
			// Use .then() to unwrap secondary thenables (cf. gh-3000)
			if ( primary.state() === &amp;quot;pending&amp;quot; ||
				isFunction( resolveValues[ i ] &amp;amp;&amp;amp; resolveValues[ i ].then ) ) {
&amp;nbsp;
				return primary.then();
			}
		}
&amp;nbsp;
		// Multiple arguments are aggregated like Promise.all array elements
		while ( i-- ) {
			adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
		}
&amp;nbsp;
		return primary.promise();
	}
} );
&amp;nbsp;
&amp;nbsp;
// These usually indicate a programmer mistake during development,
// warn about them ASAP rather than swallowing them by default.
var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
&amp;nbsp;
// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error
// captured before the async barrier to get the original error cause
// which may otherwise be hidden.
jQuery.Deferred.exceptionHook = function( error, asyncError ) {
&amp;nbsp;
	// Support: IE 8 - 9 only
	// Console exists when dev tools are open, which can happen at any time
	if ( window.console &amp;amp;&amp;amp; window.console.warn &amp;amp;&amp;amp; error &amp;amp;&amp;amp; rerrorNames.test( error.name ) ) {
		window.console.warn( &amp;quot;jQuery.Deferred exception: &amp;quot; + error.message,
			error.stack, asyncError );
	}
};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
jQuery.readyException = function( error ) {
	window.setTimeout( function() {
		throw error;
	} );
};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// The deferred used on DOM ready
var readyList = jQuery.Deferred();
&amp;nbsp;
jQuery.fn.ready = function( fn ) {
&amp;nbsp;
	readyList
		.then( fn )
&amp;nbsp;
		// Wrap jQuery.readyException in a function so that the lookup
		// happens at the time of error handling instead of callback
		// registration.
		.catch( function( error ) {
			jQuery.readyException( error );
		} );
&amp;nbsp;
	return this;
};
&amp;nbsp;
jQuery.extend( {
&amp;nbsp;
	// Is the DOM ready to be used? Set to true once it occurs.
	isReady: false,
&amp;nbsp;
	// A counter to track how many items to wait for before
	// the ready event fires. See trac-6781
	readyWait: 1,
&amp;nbsp;
	// Handle when the DOM is ready
	ready: function( wait ) {
&amp;nbsp;
		// Abort if there are pending holds or we&#039;re already ready
		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
			return;
		}
&amp;nbsp;
		// Remember that the DOM is ready
		jQuery.isReady = true;
&amp;nbsp;
		// If a normal DOM Ready event fired, decrement, and wait if need be
		if ( wait !== true &amp;amp;&amp;amp; --jQuery.readyWait &amp;gt; 0 ) {
			return;
		}
&amp;nbsp;
		// If there are functions bound, to execute
		readyList.resolveWith( document, [ jQuery ] );
	}
} );
&amp;nbsp;
jQuery.ready.then = readyList.then;
&amp;nbsp;
// The ready event handler and self cleanup method
function completed() {
	document.removeEventListener( &amp;quot;DOMContentLoaded&amp;quot;, completed );
	window.removeEventListener( &amp;quot;load&amp;quot;, completed );
	jQuery.ready();
}
&amp;nbsp;
// Catch cases where $(document).ready() is called
// after the browser event has already occurred.
// Support: IE &amp;lt;=9 - 10 only
// Older IE sometimes signals &amp;quot;interactive&amp;quot; too soon
if ( document.readyState === &amp;quot;complete&amp;quot; ||
	( document.readyState !== &amp;quot;loading&amp;quot; &amp;amp;&amp;amp; !document.documentElement.doScroll ) ) {
&amp;nbsp;
	// Handle it asynchronously to allow scripts the opportunity to delay ready
	window.setTimeout( jQuery.ready );
&amp;nbsp;
} else {
&amp;nbsp;
	// Use the handy event callback
	document.addEventListener( &amp;quot;DOMContentLoaded&amp;quot;, completed );
&amp;nbsp;
	// A fallback to window.onload, that will always work
	window.addEventListener( &amp;quot;load&amp;quot;, completed );
}
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// Multifunctional method to get and set values of a collection
// The value/s can optionally be executed if it&#039;s a function
var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
	var i = 0,
		len = elems.length,
		bulk = key == null;
&amp;nbsp;
	// Sets many values
	if ( toType( key ) === &amp;quot;object&amp;quot; ) {
		chainable = true;
		for ( i in key ) {
			access( elems, fn, i, key[ i ], true, emptyGet, raw );
		}
&amp;nbsp;
	// Sets one value
	} else if ( value !== undefined ) {
		chainable = true;
&amp;nbsp;
		if ( !isFunction( value ) ) {
			raw = true;
		}
&amp;nbsp;
		if ( bulk ) {
&amp;nbsp;
			// Bulk operations run against the entire set
			if ( raw ) {
				fn.call( elems, value );
				fn = null;
&amp;nbsp;
			// ...except when executing function values
			} else {
				bulk = fn;
				fn = function( elem, _key, value ) {
					return bulk.call( jQuery( elem ), value );
				};
			}
		}
&amp;nbsp;
		if ( fn ) {
			for ( ; i &amp;lt; len; i++ ) {
				fn(
					elems[ i ], key, raw ?
						value :
						value.call( elems[ i ], i, fn( elems[ i ], key ) )
				);
			}
		}
	}
&amp;nbsp;
	if ( chainable ) {
		return elems;
	}
&amp;nbsp;
	// Gets
	if ( bulk ) {
		return fn.call( elems );
	}
&amp;nbsp;
	return len ? fn( elems[ 0 ], key ) : emptyGet;
};
&amp;nbsp;
&amp;nbsp;
// Matches dashed string for camelizing
var rmsPrefix = /^-ms-/,
	rdashAlpha = /-([a-z])/g;
&amp;nbsp;
// Used by camelCase as callback to replace()
function fcamelCase( _all, letter ) {
	return letter.toUpperCase();
}
&amp;nbsp;
// Convert dashed to camelCase; used by the css and data modules
// Support: IE &amp;lt;=9 - 11, Edge 12 - 15
// Microsoft forgot to hump their vendor prefix (trac-9572)
function camelCase( string ) {
	return string.replace( rmsPrefix, &amp;quot;ms-&amp;quot; ).replace( rdashAlpha, fcamelCase );
}
var acceptData = function( owner ) {
&amp;nbsp;
	// Accepts only:
	//  - Node
	//    - Node.ELEMENT_NODE
	//    - Node.DOCUMENT_NODE
	//  - Object
	//    - Any
	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
function Data() {
	this.expando = jQuery.expando + Data.uid++;
}
&amp;nbsp;
Data.uid = 1;
&amp;nbsp;
Data.prototype = {
&amp;nbsp;
	cache: function( owner ) {
&amp;nbsp;
		// Check if the owner object already has a cache
		var value = owner[ this.expando ];
&amp;nbsp;
		// If not, create one
		if ( !value ) {
			value = {};
&amp;nbsp;
			// We can accept data for non-element nodes in modern browsers,
			// but we should not, see trac-8335.
			// Always return an empty object.
			if ( acceptData( owner ) ) {
&amp;nbsp;
				// If it is a node unlikely to be stringify-ed or looped over
				// use plain assignment
				if ( owner.nodeType ) {
					owner[ this.expando ] = value;
&amp;nbsp;
				// Otherwise secure it in a non-enumerable property
				// configurable must be true to allow the property to be
				// deleted when data is removed
				} else {
					Object.defineProperty( owner, this.expando, {
						value: value,
						configurable: true
					} );
				}
			}
		}
&amp;nbsp;
		return value;
	},
	set: function( owner, data, value ) {
		var prop,
			cache = this.cache( owner );
&amp;nbsp;
		// Handle: [ owner, key, value ] args
		// Always use camelCase key (gh-2257)
		if ( typeof data === &amp;quot;string&amp;quot; ) {
			cache[ camelCase( data ) ] = value;
&amp;nbsp;
		// Handle: [ owner, { properties } ] args
		} else {
&amp;nbsp;
			// Copy the properties one-by-one to the cache object
			for ( prop in data ) {
				cache[ camelCase( prop ) ] = data[ prop ];
			}
		}
		return cache;
	},
	get: function( owner, key ) {
		return key === undefined ?
			this.cache( owner ) :
&amp;nbsp;
			// Always use camelCase key (gh-2257)
			owner[ this.expando ] &amp;amp;&amp;amp; owner[ this.expando ][ camelCase( key ) ];
	},
	access: function( owner, key, value ) {
&amp;nbsp;
		// In cases where either:
		//
		//   1. No key was specified
		//   2. A string key was specified, but no value provided
		//
		// Take the &amp;quot;read&amp;quot; path and allow the get method to determine
		// which value to return, respectively either:
		//
		//   1. The entire cache object
		//   2. The data stored at the key
		//
		if ( key === undefined ||
				( ( key &amp;amp;&amp;amp; typeof key === &amp;quot;string&amp;quot; ) &amp;amp;&amp;amp; value === undefined ) ) {
&amp;nbsp;
			return this.get( owner, key );
		}
&amp;nbsp;
		// When the key is not a string, or both a key and value
		// are specified, set or extend (existing objects) with either:
		//
		//   1. An object of properties
		//   2. A key and value
		//
		this.set( owner, key, value );
&amp;nbsp;
		// Since the &amp;quot;set&amp;quot; path can have two possible entry points
		// return the expected data based on which path was taken[*]
		return value !== undefined ? value : key;
	},
	remove: function( owner, key ) {
		var i,
			cache = owner[ this.expando ];
&amp;nbsp;
		if ( cache === undefined ) {
			return;
		}
&amp;nbsp;
		if ( key !== undefined ) {
&amp;nbsp;
			// Support array or space separated string of keys
			if ( Array.isArray( key ) ) {
&amp;nbsp;
				// If key is an array of keys...
				// We always set camelCase keys, so remove that.
				key = key.map( camelCase );
			} else {
				key = camelCase( key );
&amp;nbsp;
				// If a key with the spaces exists, use it.
				// Otherwise, create an array by matching non-whitespace
				key = key in cache ?
					[ key ] :
					( key.match( rnothtmlwhite ) || [] );
			}
&amp;nbsp;
			i = key.length;
&amp;nbsp;
			while ( i-- ) {
				delete cache[ key[ i ] ];
			}
		}
&amp;nbsp;
		// Remove the expando if there&#039;s no more data
		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
&amp;nbsp;
			// Support: Chrome &amp;lt;=35 - 45
			// Webkit &amp;amp; Blink performance suffers when deleting properties
			// from DOM nodes, so set to undefined instead
			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
			if ( owner.nodeType ) {
				owner[ this.expando ] = undefined;
			} else {
				delete owner[ this.expando ];
			}
		}
	},
	hasData: function( owner ) {
		var cache = owner[ this.expando ];
		return cache !== undefined &amp;amp;&amp;amp; !jQuery.isEmptyObject( cache );
	}
};
var dataPriv = new Data();
&amp;nbsp;
var dataUser = new Data();
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
//	Implementation Summary
//
//	1. Enforce API surface and semantic compatibility with 1.9.x branch
//	2. Improve the module&#039;s maintainability by reducing the storage
//		paths to a single mechanism.
//	3. Use the same single mechanism to support &amp;quot;private&amp;quot; and &amp;quot;user&amp;quot; data.
//	4. _Never_ expose &amp;quot;private&amp;quot; data to user code (TODO: Drop _data, _removeData)
//	5. Avoid exposing implementation details on user objects (eg. expando properties)
//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
&amp;nbsp;
var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
	rmultiDash = /[A-Z]/g;
&amp;nbsp;
function getData( data ) {
	if ( data === &amp;quot;true&amp;quot; ) {
		return true;
	}
&amp;nbsp;
	if ( data === &amp;quot;false&amp;quot; ) {
		return false;
	}
&amp;nbsp;
	if ( data === &amp;quot;null&amp;quot; ) {
		return null;
	}
&amp;nbsp;
	// Only convert to a number if it doesn&#039;t change the string
	if ( data === +data + &amp;quot;&amp;quot; ) {
		return +data;
	}
&amp;nbsp;
	if ( rbrace.test( data ) ) {
		return JSON.parse( data );
	}
&amp;nbsp;
	return data;
}
&amp;nbsp;
function dataAttr( elem, key, data ) {
	var name;
&amp;nbsp;
	// If nothing was found internally, try to fetch any
	// data from the HTML5 data-* attribute
	if ( data === undefined &amp;amp;&amp;amp; elem.nodeType === 1 ) {
		name = &amp;quot;data-&amp;quot; + key.replace( rmultiDash, &amp;quot;-$&amp;amp;&amp;quot; ).toLowerCase();
		data = elem.getAttribute( name );
&amp;nbsp;
		if ( typeof data === &amp;quot;string&amp;quot; ) {
			try {
				data = getData( data );
			} catch ( e ) {}
&amp;nbsp;
			// Make sure we set the data so it isn&#039;t changed later
			dataUser.set( elem, key, data );
		} else {
			data = undefined;
		}
	}
	return data;
}
&amp;nbsp;
jQuery.extend( {
	hasData: function( elem ) {
		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
	},
&amp;nbsp;
	data: function( elem, name, data ) {
		return dataUser.access( elem, name, data );
	},
&amp;nbsp;
	removeData: function( elem, name ) {
		dataUser.remove( elem, name );
	},
&amp;nbsp;
	// TODO: Now that all calls to _data and _removeData have been replaced
	// with direct calls to dataPriv methods, these can be deprecated.
	_data: function( elem, name, data ) {
		return dataPriv.access( elem, name, data );
	},
&amp;nbsp;
	_removeData: function( elem, name ) {
		dataPriv.remove( elem, name );
	}
} );
&amp;nbsp;
jQuery.fn.extend( {
	data: function( key, value ) {
		var i, name, data,
			elem = this[ 0 ],
			attrs = elem &amp;amp;&amp;amp; elem.attributes;
&amp;nbsp;
		// Gets all values
		if ( key === undefined ) {
			if ( this.length ) {
				data = dataUser.get( elem );
&amp;nbsp;
				if ( elem.nodeType === 1 &amp;amp;&amp;amp; !dataPriv.get( elem, &amp;quot;hasDataAttrs&amp;quot; ) ) {
					i = attrs.length;
					while ( i-- ) {
&amp;nbsp;
						// Support: IE 11 only
						// The attrs elements can be null (trac-14894)
						if ( attrs[ i ] ) {
							name = attrs[ i ].name;
							if ( name.indexOf( &amp;quot;data-&amp;quot; ) === 0 ) {
								name = camelCase( name.slice( 5 ) );
								dataAttr( elem, name, data[ name ] );
							}
						}
					}
					dataPriv.set( elem, &amp;quot;hasDataAttrs&amp;quot;, true );
				}
			}
&amp;nbsp;
			return data;
		}
&amp;nbsp;
		// Sets multiple values
		if ( typeof key === &amp;quot;object&amp;quot; ) {
			return this.each( function() {
				dataUser.set( this, key );
			} );
		}
&amp;nbsp;
		return access( this, function( value ) {
			var data;
&amp;nbsp;
			// The calling jQuery object (element matches) is not empty
			// (and therefore has an element appears at this[ 0 ]) and the
			// `value` parameter was not undefined. An empty jQuery object
			// will result in `undefined` for elem = this[ 0 ] which will
			// throw an exception if an attempt to read a data cache is made.
			if ( elem &amp;amp;&amp;amp; value === undefined ) {
&amp;nbsp;
				// Attempt to get data from the cache
				// The key will always be camelCased in Data
				data = dataUser.get( elem, key );
				if ( data !== undefined ) {
					return data;
				}
&amp;nbsp;
				// Attempt to &amp;quot;discover&amp;quot; the data in
				// HTML5 custom data-* attrs
				data = dataAttr( elem, key );
				if ( data !== undefined ) {
					return data;
				}
&amp;nbsp;
				// We tried really hard, but the data doesn&#039;t exist.
				return;
			}
&amp;nbsp;
			// Set the data...
			this.each( function() {
&amp;nbsp;
				// We always store the camelCased key
				dataUser.set( this, key, value );
			} );
		}, null, value, arguments.length &amp;gt; 1, null, true );
	},
&amp;nbsp;
	removeData: function( key ) {
		return this.each( function() {
			dataUser.remove( this, key );
		} );
	}
} );
&amp;nbsp;
&amp;nbsp;
jQuery.extend( {
	queue: function( elem, type, data ) {
		var queue;
&amp;nbsp;
		if ( elem ) {
			type = ( type || &amp;quot;fx&amp;quot; ) + &amp;quot;queue&amp;quot;;
			queue = dataPriv.get( elem, type );
&amp;nbsp;
			// Speed up dequeue by getting out quickly if this is just a lookup
			if ( data ) {
				if ( !queue || Array.isArray( data ) ) {
					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
				} else {
					queue.push( data );
				}
			}
			return queue || [];
		}
	},
&amp;nbsp;
	dequeue: function( elem, type ) {
		type = type || &amp;quot;fx&amp;quot;;
&amp;nbsp;
		var queue = jQuery.queue( elem, type ),
			startLength = queue.length,
			fn = queue.shift(),
			hooks = jQuery._queueHooks( elem, type ),
			next = function() {
				jQuery.dequeue( elem, type );
			};
&amp;nbsp;
		// If the fx queue is dequeued, always remove the progress sentinel
		if ( fn === &amp;quot;inprogress&amp;quot; ) {
			fn = queue.shift();
			startLength--;
		}
&amp;nbsp;
		if ( fn ) {
&amp;nbsp;
			// Add a progress sentinel to prevent the fx queue from being
			// automatically dequeued
			if ( type === &amp;quot;fx&amp;quot; ) {
				queue.unshift( &amp;quot;inprogress&amp;quot; );
			}
&amp;nbsp;
			// Clear up the last queue stop function
			delete hooks.stop;
			fn.call( elem, next, hooks );
		}
&amp;nbsp;
		if ( !startLength &amp;amp;&amp;amp; hooks ) {
			hooks.empty.fire();
		}
	},
&amp;nbsp;
	// Not public - generate a queueHooks object, or return the current one
	_queueHooks: function( elem, type ) {
		var key = type + &amp;quot;queueHooks&amp;quot;;
		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
			empty: jQuery.Callbacks( &amp;quot;once memory&amp;quot; ).add( function() {
				dataPriv.remove( elem, [ type + &amp;quot;queue&amp;quot;, key ] );
			} )
		} );
	}
} );
&amp;nbsp;
jQuery.fn.extend( {
	queue: function( type, data ) {
		var setter = 2;
&amp;nbsp;
		if ( typeof type !== &amp;quot;string&amp;quot; ) {
			data = type;
			type = &amp;quot;fx&amp;quot;;
			setter--;
		}
&amp;nbsp;
		if ( arguments.length &amp;lt; setter ) {
			return jQuery.queue( this[ 0 ], type );
		}
&amp;nbsp;
		return data === undefined ?
			this :
			this.each( function() {
				var queue = jQuery.queue( this, type, data );
&amp;nbsp;
				// Ensure a hooks for this queue
				jQuery._queueHooks( this, type );
&amp;nbsp;
				if ( type === &amp;quot;fx&amp;quot; &amp;amp;&amp;amp; queue[ 0 ] !== &amp;quot;inprogress&amp;quot; ) {
					jQuery.dequeue( this, type );
				}
			} );
	},
	dequeue: function( type ) {
		return this.each( function() {
			jQuery.dequeue( this, type );
		} );
	},
	clearQueue: function( type ) {
		return this.queue( type || &amp;quot;fx&amp;quot;, [] );
	},
&amp;nbsp;
	// Get a promise resolved when queues of a certain type
	// are emptied (fx is the type by default)
	promise: function( type, obj ) {
		var tmp,
			count = 1,
			defer = jQuery.Deferred(),
			elements = this,
			i = this.length,
			resolve = function() {
				if ( !( --count ) ) {
					defer.resolveWith( elements, [ elements ] );
				}
			};
&amp;nbsp;
		if ( typeof type !== &amp;quot;string&amp;quot; ) {
			obj = type;
			type = undefined;
		}
		type = type || &amp;quot;fx&amp;quot;;
&amp;nbsp;
		while ( i-- ) {
			tmp = dataPriv.get( elements[ i ], type + &amp;quot;queueHooks&amp;quot; );
			if ( tmp &amp;amp;&amp;amp; tmp.empty ) {
				count++;
				tmp.empty.add( resolve );
			}
		}
		resolve();
		return defer.promise( obj );
	}
} );
var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
&amp;nbsp;
var rcssNum = new RegExp( &amp;quot;^(?:([+-])=|)(&amp;quot; + pnum + &amp;quot;)([a-z%]*)$&amp;quot;, &amp;quot;i&amp;quot; );
&amp;nbsp;
&amp;nbsp;
var cssExpand = [ &amp;quot;Top&amp;quot;, &amp;quot;Right&amp;quot;, &amp;quot;Bottom&amp;quot;, &amp;quot;Left&amp;quot; ];
&amp;nbsp;
var documentElement = document.documentElement;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
	var isAttached = function( elem ) {
			return jQuery.contains( elem.ownerDocument, elem );
		},
		composed = { composed: true };
&amp;nbsp;
	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
	// Check attachment across shadow DOM boundaries when possible (gh-3504)
	// Support: iOS 10.0-10.2 only
	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
	// leading to errors. We need to check for `getRootNode`.
	if ( documentElement.getRootNode ) {
		isAttached = function( elem ) {
			return jQuery.contains( elem.ownerDocument, elem ) ||
				elem.getRootNode( composed ) === elem.ownerDocument;
		};
	}
var isHiddenWithinTree = function( elem, el ) {
&amp;nbsp;
		// isHiddenWithinTree might be called from jQuery#filter function;
		// in that case, element will be second argument
		elem = el || elem;
&amp;nbsp;
		// Inline style trumps all
		return elem.style.display === &amp;quot;none&amp;quot; ||
			elem.style.display === &amp;quot;&amp;quot; &amp;amp;&amp;amp;
&amp;nbsp;
			// Otherwise, check computed style
			// Support: Firefox &amp;lt;=43 - 45
			// Disconnected elements can have computed display: none, so first confirm that elem is
			// in the document.
			isAttached( elem ) &amp;amp;&amp;amp;
&amp;nbsp;
			jQuery.css( elem, &amp;quot;display&amp;quot; ) === &amp;quot;none&amp;quot;;
	};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
function adjustCSS( elem, prop, valueParts, tween ) {
	var adjusted, scale,
		maxIterations = 20,
		currentValue = tween ?
			function() {
				return tween.cur();
			} :
			function() {
				return jQuery.css( elem, prop, &amp;quot;&amp;quot; );
			},
		initial = currentValue(),
		unit = valueParts &amp;amp;&amp;amp; valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? &amp;quot;&amp;quot; : &amp;quot;px&amp;quot; ),
&amp;nbsp;
		// Starting value computation is required for potential unit mismatches
		initialInUnit = elem.nodeType &amp;amp;&amp;amp;
			( jQuery.cssNumber[ prop ] || unit !== &amp;quot;px&amp;quot; &amp;amp;&amp;amp; +initial ) &amp;amp;&amp;amp;
			rcssNum.exec( jQuery.css( elem, prop ) );
&amp;nbsp;
	if ( initialInUnit &amp;amp;&amp;amp; initialInUnit[ 3 ] !== unit ) {
&amp;nbsp;
		// Support: Firefox &amp;lt;=54
		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
		initial = initial / 2;
&amp;nbsp;
		// Trust units reported by jQuery.css
		unit = unit || initialInUnit[ 3 ];
&amp;nbsp;
		// Iteratively approximate from a nonzero starting point
		initialInUnit = +initial || 1;
&amp;nbsp;
		while ( maxIterations-- ) {
&amp;nbsp;
			// Evaluate and update our best guess (doubling guesses that zero out).
			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
			jQuery.style( elem, prop, initialInUnit + unit );
			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) &amp;lt;= 0 ) {
				maxIterations = 0;
			}
			initialInUnit = initialInUnit / scale;
&amp;nbsp;
		}
&amp;nbsp;
		initialInUnit = initialInUnit * 2;
		jQuery.style( elem, prop, initialInUnit + unit );
&amp;nbsp;
		// Make sure we update the tween properties later on
		valueParts = valueParts || [];
	}
&amp;nbsp;
	if ( valueParts ) {
		initialInUnit = +initialInUnit || +initial || 0;
&amp;nbsp;
		// Apply relative offset (+=/-=) if specified
		adjusted = valueParts[ 1 ] ?
			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
			+valueParts[ 2 ];
		if ( tween ) {
			tween.unit = unit;
			tween.start = initialInUnit;
			tween.end = adjusted;
		}
	}
	return adjusted;
}
&amp;nbsp;
&amp;nbsp;
var defaultDisplayMap = {};
&amp;nbsp;
function getDefaultDisplay( elem ) {
	var temp,
		doc = elem.ownerDocument,
		nodeName = elem.nodeName,
		display = defaultDisplayMap[ nodeName ];
&amp;nbsp;
	if ( display ) {
		return display;
	}
&amp;nbsp;
	temp = doc.body.appendChild( doc.createElement( nodeName ) );
	display = jQuery.css( temp, &amp;quot;display&amp;quot; );
&amp;nbsp;
	temp.parentNode.removeChild( temp );
&amp;nbsp;
	if ( display === &amp;quot;none&amp;quot; ) {
		display = &amp;quot;block&amp;quot;;
	}
	defaultDisplayMap[ nodeName ] = display;
&amp;nbsp;
	return display;
}
&amp;nbsp;
function showHide( elements, show ) {
	var display, elem,
		values = [],
		index = 0,
		length = elements.length;
&amp;nbsp;
	// Determine new display value for elements that need to change
	for ( ; index &amp;lt; length; index++ ) {
		elem = elements[ index ];
		if ( !elem.style ) {
			continue;
		}
&amp;nbsp;
		display = elem.style.display;
		if ( show ) {
&amp;nbsp;
			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
			// check is required in this first loop unless we have a nonempty display value (either
			// inline or about-to-be-restored)
			if ( display === &amp;quot;none&amp;quot; ) {
				values[ index ] = dataPriv.get( elem, &amp;quot;display&amp;quot; ) || null;
				if ( !values[ index ] ) {
					elem.style.display = &amp;quot;&amp;quot;;
				}
			}
			if ( elem.style.display === &amp;quot;&amp;quot; &amp;amp;&amp;amp; isHiddenWithinTree( elem ) ) {
				values[ index ] = getDefaultDisplay( elem );
			}
		} else {
			if ( display !== &amp;quot;none&amp;quot; ) {
				values[ index ] = &amp;quot;none&amp;quot;;
&amp;nbsp;
				// Remember what we&#039;re overwriting
				dataPriv.set( elem, &amp;quot;display&amp;quot;, display );
			}
		}
	}
&amp;nbsp;
	// Set the display of the elements in a second loop to avoid constant reflow
	for ( index = 0; index &amp;lt; length; index++ ) {
		if ( values[ index ] != null ) {
			elements[ index ].style.display = values[ index ];
		}
	}
&amp;nbsp;
	return elements;
}
&amp;nbsp;
jQuery.fn.extend( {
	show: function() {
		return showHide( this, true );
	},
	hide: function() {
		return showHide( this );
	},
	toggle: function( state ) {
		if ( typeof state === &amp;quot;boolean&amp;quot; ) {
			return state ? this.show() : this.hide();
		}
&amp;nbsp;
		return this.each( function() {
			if ( isHiddenWithinTree( this ) ) {
				jQuery( this ).show();
			} else {
				jQuery( this ).hide();
			}
		} );
	}
} );
var rcheckableType = ( /^(?:checkbox|radio)$/i );
&amp;nbsp;
var rtagName = ( /&amp;lt;([a-z][^\/\0&amp;gt;\x20\t\r\n\f]*)/i );
&amp;nbsp;
var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
( function() {
	var fragment = document.createDocumentFragment(),
		div = fragment.appendChild( document.createElement( &amp;quot;div&amp;quot; ) ),
		input = document.createElement( &amp;quot;input&amp;quot; );
&amp;nbsp;
	// Support: Android 4.0 - 4.3 only
	// Check state lost if the name is set (trac-11217)
	// Support: Windows Web Apps (WWA)
	// `name` and `type` must use .setAttribute for WWA (trac-14901)
	input.setAttribute( &amp;quot;type&amp;quot;, &amp;quot;radio&amp;quot; );
	input.setAttribute( &amp;quot;checked&amp;quot;, &amp;quot;checked&amp;quot; );
	input.setAttribute( &amp;quot;name&amp;quot;, &amp;quot;t&amp;quot; );
&amp;nbsp;
	div.appendChild( input );
&amp;nbsp;
	// Support: Android &amp;lt;=4.1 only
	// Older WebKit doesn&#039;t clone checked state correctly in fragments
	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
&amp;nbsp;
	// Support: IE &amp;lt;=11 only
	// Make sure textarea (and checkbox) defaultValue is properly cloned
	div.innerHTML = &amp;quot;&amp;lt;textarea&amp;gt;x&amp;lt;/textarea&amp;gt;&amp;quot;;
	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
&amp;nbsp;
	// Support: IE &amp;lt;=9 only
	// IE &amp;lt;=9 replaces &amp;lt;option&amp;gt; tags with their contents when inserted outside of
	// the select element.
	div.innerHTML = &amp;quot;&amp;lt;option&amp;gt;&amp;lt;/option&amp;gt;&amp;quot;;
	support.option = !!div.lastChild;
} )();
&amp;nbsp;
&amp;nbsp;
// We have to close these tags to support XHTML (trac-13200)
var wrapMap = {
&amp;nbsp;
	// XHTML parsers do not magically insert elements in the
	// same way that tag soup parsers do. So we cannot shorten
	// this by omitting &amp;lt;tbody&amp;gt; or other required elements.
	thead: [ 1, &amp;quot;&amp;lt;table&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/table&amp;gt;&amp;quot; ],
	col: [ 2, &amp;quot;&amp;lt;table&amp;gt;&amp;lt;colgroup&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/colgroup&amp;gt;&amp;lt;/table&amp;gt;&amp;quot; ],
	tr: [ 2, &amp;quot;&amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;quot; ],
	td: [ 3, &amp;quot;&amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;quot; ],
&amp;nbsp;
	_default: [ 0, &amp;quot;&amp;quot;, &amp;quot;&amp;quot; ]
};
&amp;nbsp;
wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
wrapMap.th = wrapMap.td;
&amp;nbsp;
// Support: IE &amp;lt;=9 only
if ( !support.option ) {
	wrapMap.optgroup = wrapMap.option = [ 1, &amp;quot;&amp;lt;select multiple=&#039;multiple&#039;&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/select&amp;gt;&amp;quot; ];
}
&amp;nbsp;
&amp;nbsp;
function getAll( context, tag ) {
&amp;nbsp;
	// Support: IE &amp;lt;=9 - 11 only
	// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)
	var ret;
&amp;nbsp;
	if ( typeof context.getElementsByTagName !== &amp;quot;undefined&amp;quot; ) {
		ret = context.getElementsByTagName( tag || &amp;quot;*&amp;quot; );
&amp;nbsp;
	} else if ( typeof context.querySelectorAll !== &amp;quot;undefined&amp;quot; ) {
		ret = context.querySelectorAll( tag || &amp;quot;*&amp;quot; );
&amp;nbsp;
	} else {
		ret = [];
	}
&amp;nbsp;
	if ( tag === undefined || tag &amp;amp;&amp;amp; nodeName( context, tag ) ) {
		return jQuery.merge( [ context ], ret );
	}
&amp;nbsp;
	return ret;
}
&amp;nbsp;
&amp;nbsp;
// Mark scripts as having already been evaluated
function setGlobalEval( elems, refElements ) {
	var i = 0,
		l = elems.length;
&amp;nbsp;
	for ( ; i &amp;lt; l; i++ ) {
		dataPriv.set(
			elems[ i ],
			&amp;quot;globalEval&amp;quot;,
			!refElements || dataPriv.get( refElements[ i ], &amp;quot;globalEval&amp;quot; )
		);
	}
}
&amp;nbsp;
&amp;nbsp;
var rhtml = /&amp;lt;|&amp;amp;#?\w+;/;
&amp;nbsp;
function buildFragment( elems, context, scripts, selection, ignored ) {
	var elem, tmp, tag, wrap, attached, j,
		fragment = context.createDocumentFragment(),
		nodes = [],
		i = 0,
		l = elems.length;
&amp;nbsp;
	for ( ; i &amp;lt; l; i++ ) {
		elem = elems[ i ];
&amp;nbsp;
		if ( elem || elem === 0 ) {
&amp;nbsp;
			// Add nodes directly
			if ( toType( elem ) === &amp;quot;object&amp;quot; ) {
&amp;nbsp;
				// Support: Android &amp;lt;=4.0 only, PhantomJS 1 only
				// push.apply(_, arraylike) throws on ancient WebKit
				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
&amp;nbsp;
			// Convert non-html into a text node
			} else if ( !rhtml.test( elem ) ) {
				nodes.push( context.createTextNode( elem ) );
&amp;nbsp;
			// Convert html into DOM nodes
			} else {
				tmp = tmp || fragment.appendChild( context.createElement( &amp;quot;div&amp;quot; ) );
&amp;nbsp;
				// Deserialize a standard representation
				tag = ( rtagName.exec( elem ) || [ &amp;quot;&amp;quot;, &amp;quot;&amp;quot; ] )[ 1 ].toLowerCase();
				wrap = wrapMap[ tag ] || wrapMap._default;
				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
&amp;nbsp;
				// Descend through wrappers to the right content
				j = wrap[ 0 ];
				while ( j-- ) {
					tmp = tmp.lastChild;
				}
&amp;nbsp;
				// Support: Android &amp;lt;=4.0 only, PhantomJS 1 only
				// push.apply(_, arraylike) throws on ancient WebKit
				jQuery.merge( nodes, tmp.childNodes );
&amp;nbsp;
				// Remember the top-level container
				tmp = fragment.firstChild;
&amp;nbsp;
				// Ensure the created nodes are orphaned (trac-12392)
				tmp.textContent = &amp;quot;&amp;quot;;
			}
		}
	}
&amp;nbsp;
	// Remove wrapper from fragment
	fragment.textContent = &amp;quot;&amp;quot;;
&amp;nbsp;
	i = 0;
	while ( ( elem = nodes[ i++ ] ) ) {
&amp;nbsp;
		// Skip elements already in the context collection (trac-4087)
		if ( selection &amp;amp;&amp;amp; jQuery.inArray( elem, selection ) &amp;gt; -1 ) {
			if ( ignored ) {
				ignored.push( elem );
			}
			continue;
		}
&amp;nbsp;
		attached = isAttached( elem );
&amp;nbsp;
		// Append to fragment
		tmp = getAll( fragment.appendChild( elem ), &amp;quot;script&amp;quot; );
&amp;nbsp;
		// Preserve script evaluation history
		if ( attached ) {
			setGlobalEval( tmp );
		}
&amp;nbsp;
		// Capture executables
		if ( scripts ) {
			j = 0;
			while ( ( elem = tmp[ j++ ] ) ) {
				if ( rscriptType.test( elem.type || &amp;quot;&amp;quot; ) ) {
					scripts.push( elem );
				}
			}
		}
	}
&amp;nbsp;
	return fragment;
}
&amp;nbsp;
&amp;nbsp;
var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
&amp;nbsp;
function returnTrue() {
	return true;
}
&amp;nbsp;
function returnFalse() {
	return false;
}
&amp;nbsp;
function on( elem, types, selector, data, fn, one ) {
	var origFn, type;
&amp;nbsp;
	// Types can be a map of types/handlers
	if ( typeof types === &amp;quot;object&amp;quot; ) {
&amp;nbsp;
		// ( types-Object, selector, data )
		if ( typeof selector !== &amp;quot;string&amp;quot; ) {
&amp;nbsp;
			// ( types-Object, data )
			data = data || selector;
			selector = undefined;
		}
		for ( type in types ) {
			on( elem, type, selector, data, types[ type ], one );
		}
		return elem;
	}
&amp;nbsp;
	if ( data == null &amp;amp;&amp;amp; fn == null ) {
&amp;nbsp;
		// ( types, fn )
		fn = selector;
		data = selector = undefined;
	} else if ( fn == null ) {
		if ( typeof selector === &amp;quot;string&amp;quot; ) {
&amp;nbsp;
			// ( types, selector, fn )
			fn = data;
			data = undefined;
		} else {
&amp;nbsp;
			// ( types, data, fn )
			fn = data;
			data = selector;
			selector = undefined;
		}
	}
	if ( fn === false ) {
		fn = returnFalse;
	} else if ( !fn ) {
		return elem;
	}
&amp;nbsp;
	if ( one === 1 ) {
		origFn = fn;
		fn = function( event ) {
&amp;nbsp;
			// Can use an empty set, since event contains the info
			jQuery().off( event );
			return origFn.apply( this, arguments );
		};
&amp;nbsp;
		// Use same guid so caller can remove using origFn
		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
	}
	return elem.each( function() {
		jQuery.event.add( this, types, fn, data, selector );
	} );
}
&amp;nbsp;
/*
 * Helper functions for managing events -- not part of the public interface.
 * Props to Dean Edwards&#039; addEvent library for many of the ideas.
 */
jQuery.event = {
&amp;nbsp;
	global: {},
&amp;nbsp;
	add: function( elem, types, handler, data, selector ) {
&amp;nbsp;
		var handleObjIn, eventHandle, tmp,
			events, t, handleObj,
			special, handlers, type, namespaces, origType,
			elemData = dataPriv.get( elem );
&amp;nbsp;
		// Only attach events to objects that accept data
		if ( !acceptData( elem ) ) {
			return;
		}
&amp;nbsp;
		// Caller can pass in an object of custom data in lieu of the handler
		if ( handler.handler ) {
			handleObjIn = handler;
			handler = handleObjIn.handler;
			selector = handleObjIn.selector;
		}
&amp;nbsp;
		// Ensure that invalid selectors throw exceptions at attach time
		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
		if ( selector ) {
			jQuery.find.matchesSelector( documentElement, selector );
		}
&amp;nbsp;
		// Make sure that the handler has a unique ID, used to find/remove it later
		if ( !handler.guid ) {
			handler.guid = jQuery.guid++;
		}
&amp;nbsp;
		// Init the element&#039;s event structure and main handler, if this is the first
		if ( !( events = elemData.events ) ) {
			events = elemData.events = Object.create( null );
		}
		if ( !( eventHandle = elemData.handle ) ) {
			eventHandle = elemData.handle = function( e ) {
&amp;nbsp;
				// Discard the second event of a jQuery.event.trigger() and
				// when an event is called after a page has unloaded
				return typeof jQuery !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; jQuery.event.triggered !== e.type ?
					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
			};
		}
&amp;nbsp;
		// Handle multiple events separated by a space
		types = ( types || &amp;quot;&amp;quot; ).match( rnothtmlwhite ) || [ &amp;quot;&amp;quot; ];
		t = types.length;
		while ( t-- ) {
			tmp = rtypenamespace.exec( types[ t ] ) || [];
			type = origType = tmp[ 1 ];
			namespaces = ( tmp[ 2 ] || &amp;quot;&amp;quot; ).split( &amp;quot;.&amp;quot; ).sort();
&amp;nbsp;
			// There *must* be a type, no attaching namespace-only handlers
			if ( !type ) {
				continue;
			}
&amp;nbsp;
			// If event changes its type, use the special event handlers for the changed type
			special = jQuery.event.special[ type ] || {};
&amp;nbsp;
			// If selector defined, determine special event api type, otherwise given type
			type = ( selector ? special.delegateType : special.bindType ) || type;
&amp;nbsp;
			// Update special based on newly reset type
			special = jQuery.event.special[ type ] || {};
&amp;nbsp;
			// handleObj is passed to all event handlers
			handleObj = jQuery.extend( {
				type: type,
				origType: origType,
				data: data,
				handler: handler,
				guid: handler.guid,
				selector: selector,
				needsContext: selector &amp;amp;&amp;amp; jQuery.expr.match.needsContext.test( selector ),
				namespace: namespaces.join( &amp;quot;.&amp;quot; )
			}, handleObjIn );
&amp;nbsp;
			// Init the event handler queue if we&#039;re the first
			if ( !( handlers = events[ type ] ) ) {
				handlers = events[ type ] = [];
				handlers.delegateCount = 0;
&amp;nbsp;
				// Only use addEventListener if the special events handler returns false
				if ( !special.setup ||
					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
&amp;nbsp;
					if ( elem.addEventListener ) {
						elem.addEventListener( type, eventHandle );
					}
				}
			}
&amp;nbsp;
			if ( special.add ) {
				special.add.call( elem, handleObj );
&amp;nbsp;
				if ( !handleObj.handler.guid ) {
					handleObj.handler.guid = handler.guid;
				}
			}
&amp;nbsp;
			// Add to the element&#039;s handler list, delegates in front
			if ( selector ) {
				handlers.splice( handlers.delegateCount++, 0, handleObj );
			} else {
				handlers.push( handleObj );
			}
&amp;nbsp;
			// Keep track of which events have ever been used, for event optimization
			jQuery.event.global[ type ] = true;
		}
&amp;nbsp;
	},
&amp;nbsp;
	// Detach an event or set of events from an element
	remove: function( elem, types, handler, selector, mappedTypes ) {
&amp;nbsp;
		var j, origCount, tmp,
			events, t, handleObj,
			special, handlers, type, namespaces, origType,
			elemData = dataPriv.hasData( elem ) &amp;amp;&amp;amp; dataPriv.get( elem );
&amp;nbsp;
		if ( !elemData || !( events = elemData.events ) ) {
			return;
		}
&amp;nbsp;
		// Once for each type.namespace in types; type may be omitted
		types = ( types || &amp;quot;&amp;quot; ).match( rnothtmlwhite ) || [ &amp;quot;&amp;quot; ];
		t = types.length;
		while ( t-- ) {
			tmp = rtypenamespace.exec( types[ t ] ) || [];
			type = origType = tmp[ 1 ];
			namespaces = ( tmp[ 2 ] || &amp;quot;&amp;quot; ).split( &amp;quot;.&amp;quot; ).sort();
&amp;nbsp;
			// Unbind all events (on this namespace, if provided) for the element
			if ( !type ) {
				for ( type in events ) {
					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
				}
				continue;
			}
&amp;nbsp;
			special = jQuery.event.special[ type ] || {};
			type = ( selector ? special.delegateType : special.bindType ) || type;
			handlers = events[ type ] || [];
			tmp = tmp[ 2 ] &amp;amp;&amp;amp;
				new RegExp( &amp;quot;(^|\\.)&amp;quot; + namespaces.join( &amp;quot;\\.(?:.*\\.|)&amp;quot; ) + &amp;quot;(\\.|$)&amp;quot; );
&amp;nbsp;
			// Remove matching events
			origCount = j = handlers.length;
			while ( j-- ) {
				handleObj = handlers[ j ];
&amp;nbsp;
				if ( ( mappedTypes || origType === handleObj.origType ) &amp;amp;&amp;amp;
					( !handler || handler.guid === handleObj.guid ) &amp;amp;&amp;amp;
					( !tmp || tmp.test( handleObj.namespace ) ) &amp;amp;&amp;amp;
					( !selector || selector === handleObj.selector ||
						selector === &amp;quot;**&amp;quot; &amp;amp;&amp;amp; handleObj.selector ) ) {
					handlers.splice( j, 1 );
&amp;nbsp;
					if ( handleObj.selector ) {
						handlers.delegateCount--;
					}
					if ( special.remove ) {
						special.remove.call( elem, handleObj );
					}
				}
			}
&amp;nbsp;
			// Remove generic event handler if we removed something and no more handlers exist
			// (avoids potential for endless recursion during removal of special event handlers)
			if ( origCount &amp;amp;&amp;amp; !handlers.length ) {
				if ( !special.teardown ||
					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
&amp;nbsp;
					jQuery.removeEvent( elem, type, elemData.handle );
				}
&amp;nbsp;
				delete events[ type ];
			}
		}
&amp;nbsp;
		// Remove data and the expando if it&#039;s no longer used
		if ( jQuery.isEmptyObject( events ) ) {
			dataPriv.remove( elem, &amp;quot;handle events&amp;quot; );
		}
	},
&amp;nbsp;
	dispatch: function( nativeEvent ) {
&amp;nbsp;
		var i, j, ret, matched, handleObj, handlerQueue,
			args = new Array( arguments.length ),
&amp;nbsp;
			// Make a writable jQuery.Event from the native event object
			event = jQuery.event.fix( nativeEvent ),
&amp;nbsp;
			handlers = (
				dataPriv.get( this, &amp;quot;events&amp;quot; ) || Object.create( null )
			)[ event.type ] || [],
			special = jQuery.event.special[ event.type ] || {};
&amp;nbsp;
		// Use the fix-ed jQuery.Event rather than the (read-only) native event
		args[ 0 ] = event;
&amp;nbsp;
		for ( i = 1; i &amp;lt; arguments.length; i++ ) {
			args[ i ] = arguments[ i ];
		}
&amp;nbsp;
		event.delegateTarget = this;
&amp;nbsp;
		// Call the preDispatch hook for the mapped type, and let it bail if desired
		if ( special.preDispatch &amp;amp;&amp;amp; special.preDispatch.call( this, event ) === false ) {
			return;
		}
&amp;nbsp;
		// Determine handlers
		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
&amp;nbsp;
		// Run delegates first; they may want to stop propagation beneath us
		i = 0;
		while ( ( matched = handlerQueue[ i++ ] ) &amp;amp;&amp;amp; !event.isPropagationStopped() ) {
			event.currentTarget = matched.elem;
&amp;nbsp;
			j = 0;
			while ( ( handleObj = matched.handlers[ j++ ] ) &amp;amp;&amp;amp;
				!event.isImmediatePropagationStopped() ) {
&amp;nbsp;
				// If the event is namespaced, then each handler is only invoked if it is
				// specially universal or its namespaces are a superset of the event&#039;s.
				if ( !event.rnamespace || handleObj.namespace === false ||
					event.rnamespace.test( handleObj.namespace ) ) {
&amp;nbsp;
					event.handleObj = handleObj;
					event.data = handleObj.data;
&amp;nbsp;
					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
						handleObj.handler ).apply( matched.elem, args );
&amp;nbsp;
					if ( ret !== undefined ) {
						if ( ( event.result = ret ) === false ) {
							event.preventDefault();
							event.stopPropagation();
						}
					}
				}
			}
		}
&amp;nbsp;
		// Call the postDispatch hook for the mapped type
		if ( special.postDispatch ) {
			special.postDispatch.call( this, event );
		}
&amp;nbsp;
		return event.result;
	},
&amp;nbsp;
	handlers: function( event, handlers ) {
		var i, handleObj, sel, matchedHandlers, matchedSelectors,
			handlerQueue = [],
			delegateCount = handlers.delegateCount,
			cur = event.target;
&amp;nbsp;
		// Find delegate handlers
		if ( delegateCount &amp;amp;&amp;amp;
&amp;nbsp;
			// Support: IE &amp;lt;=9
			// Black-hole SVG &amp;lt;use&amp;gt; instance trees (trac-13180)
			cur.nodeType &amp;amp;&amp;amp;
&amp;nbsp;
			// Support: Firefox &amp;lt;=42
			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
			// Support: IE 11 only
			// ...but not arrow key &amp;quot;clicks&amp;quot; of radio inputs, which can have `button` -1 (gh-2343)
			!( event.type === &amp;quot;click&amp;quot; &amp;amp;&amp;amp; event.button &amp;gt;= 1 ) ) {
&amp;nbsp;
			for ( ; cur !== this; cur = cur.parentNode || this ) {
&amp;nbsp;
				// Don&#039;t check non-elements (trac-13208)
				// Don&#039;t process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)
				if ( cur.nodeType === 1 &amp;amp;&amp;amp; !( event.type === &amp;quot;click&amp;quot; &amp;amp;&amp;amp; cur.disabled === true ) ) {
					matchedHandlers = [];
					matchedSelectors = {};
					for ( i = 0; i &amp;lt; delegateCount; i++ ) {
						handleObj = handlers[ i ];
&amp;nbsp;
						// Don&#039;t conflict with Object.prototype properties (trac-13203)
						sel = handleObj.selector + &amp;quot; &amp;quot;;
&amp;nbsp;
						if ( matchedSelectors[ sel ] === undefined ) {
							matchedSelectors[ sel ] = handleObj.needsContext ?
								jQuery( sel, this ).index( cur ) &amp;gt; -1 :
								jQuery.find( sel, this, null, [ cur ] ).length;
						}
						if ( matchedSelectors[ sel ] ) {
							matchedHandlers.push( handleObj );
						}
					}
					if ( matchedHandlers.length ) {
						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
					}
				}
			}
		}
&amp;nbsp;
		// Add the remaining (directly-bound) handlers
		cur = this;
		if ( delegateCount &amp;lt; handlers.length ) {
			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
		}
&amp;nbsp;
		return handlerQueue;
	},
&amp;nbsp;
	addProp: function( name, hook ) {
		Object.defineProperty( jQuery.Event.prototype, name, {
			enumerable: true,
			configurable: true,
&amp;nbsp;
			get: isFunction( hook ) ?
				function() {
					if ( this.originalEvent ) {
						return hook( this.originalEvent );
					}
				} :
				function() {
					if ( this.originalEvent ) {
						return this.originalEvent[ name ];
					}
				},
&amp;nbsp;
			set: function( value ) {
				Object.defineProperty( this, name, {
					enumerable: true,
					configurable: true,
					writable: true,
					value: value
				} );
			}
		} );
	},
&amp;nbsp;
	fix: function( originalEvent ) {
		return originalEvent[ jQuery.expando ] ?
			originalEvent :
			new jQuery.Event( originalEvent );
	},
&amp;nbsp;
	special: {
		load: {
&amp;nbsp;
			// Prevent triggered image.load events from bubbling to window.load
			noBubble: true
		},
		click: {
&amp;nbsp;
			// Utilize native event to ensure correct state for checkable inputs
			setup: function( data ) {
&amp;nbsp;
				// For mutual compressibility with _default, replace `this` access with a local var.
				// `|| data` is dead code meant only to preserve the variable through minification.
				var el = this || data;
&amp;nbsp;
				// Claim the first handler
				if ( rcheckableType.test( el.type ) &amp;amp;&amp;amp;
					el.click &amp;amp;&amp;amp; nodeName( el, &amp;quot;input&amp;quot; ) ) {
&amp;nbsp;
					// dataPriv.set( el, &amp;quot;click&amp;quot;, ... )
					leverageNative( el, &amp;quot;click&amp;quot;, true );
				}
&amp;nbsp;
				// Return false to allow normal processing in the caller
				return false;
			},
			trigger: function( data ) {
&amp;nbsp;
				// For mutual compressibility with _default, replace `this` access with a local var.
				// `|| data` is dead code meant only to preserve the variable through minification.
				var el = this || data;
&amp;nbsp;
				// Force setup before triggering a click
				if ( rcheckableType.test( el.type ) &amp;amp;&amp;amp;
					el.click &amp;amp;&amp;amp; nodeName( el, &amp;quot;input&amp;quot; ) ) {
&amp;nbsp;
					leverageNative( el, &amp;quot;click&amp;quot; );
				}
&amp;nbsp;
				// Return non-false to allow normal event-path propagation
				return true;
			},
&amp;nbsp;
			// For cross-browser consistency, suppress native .click() on links
			// Also prevent it if we&#039;re currently inside a leveraged native-event stack
			_default: function( event ) {
				var target = event.target;
				return rcheckableType.test( target.type ) &amp;amp;&amp;amp;
					target.click &amp;amp;&amp;amp; nodeName( target, &amp;quot;input&amp;quot; ) &amp;amp;&amp;amp;
					dataPriv.get( target, &amp;quot;click&amp;quot; ) ||
					nodeName( target, &amp;quot;a&amp;quot; );
			}
		},
&amp;nbsp;
		beforeunload: {
			postDispatch: function( event ) {
&amp;nbsp;
				// Support: Firefox 20+
				// Firefox doesn&#039;t alert if the returnValue field is not set.
				if ( event.result !== undefined &amp;amp;&amp;amp; event.originalEvent ) {
					event.originalEvent.returnValue = event.result;
				}
			}
		}
	}
};
&amp;nbsp;
// Ensure the presence of an event listener that handles manually-triggered
// synthetic events by interrupting progress until reinvoked in response to
// *native* events that it fires directly, ensuring that state changes have
// already occurred before other listeners are invoked.
function leverageNative( el, type, isSetup ) {
&amp;nbsp;
	// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add
	if ( !isSetup ) {
		if ( dataPriv.get( el, type ) === undefined ) {
			jQuery.event.add( el, type, returnTrue );
		}
		return;
	}
&amp;nbsp;
	// Register the controller as a special universal handler for all event namespaces
	dataPriv.set( el, type, false );
	jQuery.event.add( el, type, {
		namespace: false,
		handler: function( event ) {
			var result,
				saved = dataPriv.get( this, type );
&amp;nbsp;
			if ( ( event.isTrigger &amp;amp; 1 ) &amp;amp;&amp;amp; this[ type ] ) {
&amp;nbsp;
				// Interrupt processing of the outer synthetic .trigger()ed event
				if ( !saved ) {
&amp;nbsp;
					// Store arguments for use when handling the inner native event
					// There will always be at least one argument (an event object), so this array
					// will not be confused with a leftover capture object.
					saved = slice.call( arguments );
					dataPriv.set( this, type, saved );
&amp;nbsp;
					// Trigger the native event and capture its result
					this[ type ]();
					result = dataPriv.get( this, type );
					dataPriv.set( this, type, false );
&amp;nbsp;
					if ( saved !== result ) {
&amp;nbsp;
						// Cancel the outer synthetic event
						event.stopImmediatePropagation();
						event.preventDefault();
&amp;nbsp;
						return result;
					}
&amp;nbsp;
				// If this is an inner synthetic event for an event with a bubbling surrogate
				// (focus or blur), assume that the surrogate already propagated from triggering
				// the native event and prevent that from happening again here.
				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
				// less bad than duplication.
				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
					event.stopPropagation();
				}
&amp;nbsp;
			// If this is a native event triggered above, everything is now in order
			// Fire an inner synthetic event with the original arguments
			} else if ( saved ) {
&amp;nbsp;
				// ...and capture the result
				dataPriv.set( this, type, jQuery.event.trigger(
					saved[ 0 ],
					saved.slice( 1 ),
					this
				) );
&amp;nbsp;
				// Abort handling of the native event by all jQuery handlers while allowing
				// native handlers on the same element to run. On target, this is achieved
				// by stopping immediate propagation just on the jQuery event. However,
				// the native event is re-wrapped by a jQuery one on each level of the
				// propagation so the only way to stop it for jQuery is to stop it for
				// everyone via native `stopPropagation()`. This is not a problem for
				// focus/blur which don&#039;t bubble, but it does also stop click on checkboxes
				// and radios. We accept this limitation.
				event.stopPropagation();
				event.isImmediatePropagationStopped = returnTrue;
			}
		}
	} );
}
&amp;nbsp;
jQuery.removeEvent = function( elem, type, handle ) {
&amp;nbsp;
	// This &amp;quot;if&amp;quot; is needed for plain objects
	if ( elem.removeEventListener ) {
		elem.removeEventListener( type, handle );
	}
};
&amp;nbsp;
jQuery.Event = function( src, props ) {
&amp;nbsp;
	// Allow instantiation without the &#039;new&#039; keyword
	if ( !( this instanceof jQuery.Event ) ) {
		return new jQuery.Event( src, props );
	}
&amp;nbsp;
	// Event object
	if ( src &amp;amp;&amp;amp; src.type ) {
		this.originalEvent = src;
		this.type = src.type;
&amp;nbsp;
		// Events bubbling up the document may have been marked as prevented
		// by a handler lower down the tree; reflect the correct value.
		this.isDefaultPrevented = src.defaultPrevented ||
				src.defaultPrevented === undefined &amp;amp;&amp;amp;
&amp;nbsp;
				// Support: Android &amp;lt;=2.3 only
				src.returnValue === false ?
			returnTrue :
			returnFalse;
&amp;nbsp;
		// Create target properties
		// Support: Safari &amp;lt;=6 - 7 only
		// Target should not be a text node (trac-504, trac-13143)
		this.target = ( src.target &amp;amp;&amp;amp; src.target.nodeType === 3 ) ?
			src.target.parentNode :
			src.target;
&amp;nbsp;
		this.currentTarget = src.currentTarget;
		this.relatedTarget = src.relatedTarget;
&amp;nbsp;
	// Event type
	} else {
		this.type = src;
	}
&amp;nbsp;
	// Put explicitly provided properties onto the event object
	if ( props ) {
		jQuery.extend( this, props );
	}
&amp;nbsp;
	// Create a timestamp if incoming event doesn&#039;t have one
	this.timeStamp = src &amp;amp;&amp;amp; src.timeStamp || Date.now();
&amp;nbsp;
	// Mark it as fixed
	this[ jQuery.expando ] = true;
};
&amp;nbsp;
// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
jQuery.Event.prototype = {
	constructor: jQuery.Event,
	isDefaultPrevented: returnFalse,
	isPropagationStopped: returnFalse,
	isImmediatePropagationStopped: returnFalse,
	isSimulated: false,
&amp;nbsp;
	preventDefault: function() {
		var e = this.originalEvent;
&amp;nbsp;
		this.isDefaultPrevented = returnTrue;
&amp;nbsp;
		if ( e &amp;amp;&amp;amp; !this.isSimulated ) {
			e.preventDefault();
		}
	},
	stopPropagation: function() {
		var e = this.originalEvent;
&amp;nbsp;
		this.isPropagationStopped = returnTrue;
&amp;nbsp;
		if ( e &amp;amp;&amp;amp; !this.isSimulated ) {
			e.stopPropagation();
		}
	},
	stopImmediatePropagation: function() {
		var e = this.originalEvent;
&amp;nbsp;
		this.isImmediatePropagationStopped = returnTrue;
&amp;nbsp;
		if ( e &amp;amp;&amp;amp; !this.isSimulated ) {
			e.stopImmediatePropagation();
		}
&amp;nbsp;
		this.stopPropagation();
	}
};
&amp;nbsp;
// Includes all common event props including KeyEvent and MouseEvent specific props
jQuery.each( {
	altKey: true,
	bubbles: true,
	cancelable: true,
	changedTouches: true,
	ctrlKey: true,
	detail: true,
	eventPhase: true,
	metaKey: true,
	pageX: true,
	pageY: true,
	shiftKey: true,
	view: true,
	&amp;quot;char&amp;quot;: true,
	code: true,
	charCode: true,
	key: true,
	keyCode: true,
	button: true,
	buttons: true,
	clientX: true,
	clientY: true,
	offsetX: true,
	offsetY: true,
	pointerId: true,
	pointerType: true,
	screenX: true,
	screenY: true,
	targetTouches: true,
	toElement: true,
	touches: true,
	which: true
}, jQuery.event.addProp );
&amp;nbsp;
jQuery.each( { focus: &amp;quot;focusin&amp;quot;, blur: &amp;quot;focusout&amp;quot; }, function( type, delegateType ) {
&amp;nbsp;
	function focusMappedHandler( nativeEvent ) {
		if ( document.documentMode ) {
&amp;nbsp;
			// Support: IE 11+
			// Attach a single focusin/focusout handler on the document while someone wants
			// focus/blur. This is because the former are synchronous in IE while the latter
			// are async. In other browsers, all those handlers are invoked synchronously.
&amp;nbsp;
			// `handle` from private data would already wrap the event, but we need
			// to change the `type` here.
			var handle = dataPriv.get( this, &amp;quot;handle&amp;quot; ),
				event = jQuery.event.fix( nativeEvent );
			event.type = nativeEvent.type === &amp;quot;focusin&amp;quot; ? &amp;quot;focus&amp;quot; : &amp;quot;blur&amp;quot;;
			event.isSimulated = true;
&amp;nbsp;
			// First, handle focusin/focusout
			handle( nativeEvent );
&amp;nbsp;
			// ...then, handle focus/blur
			//
			// focus/blur don&#039;t bubble while focusin/focusout do; simulate the former by only
			// invoking the handler at the lower level.
			if ( event.target === event.currentTarget ) {
&amp;nbsp;
				// The setup part calls `leverageNative`, which, in turn, calls
				// `jQuery.event.add`, so event handle will already have been set
				// by this point.
				handle( event );
			}
		} else {
&amp;nbsp;
			// For non-IE browsers, attach a single capturing handler on the document
			// while someone wants focusin/focusout.
			jQuery.event.simulate( delegateType, nativeEvent.target,
				jQuery.event.fix( nativeEvent ) );
		}
	}
&amp;nbsp;
	jQuery.event.special[ type ] = {
&amp;nbsp;
		// Utilize native event if possible so blur/focus sequence is correct
		setup: function() {
&amp;nbsp;
			var attaches;
&amp;nbsp;
			// Claim the first handler
			// dataPriv.set( this, &amp;quot;focus&amp;quot;, ... )
			// dataPriv.set( this, &amp;quot;blur&amp;quot;, ... )
			leverageNative( this, type, true );
&amp;nbsp;
			if ( document.documentMode ) {
&amp;nbsp;
				// Support: IE 9 - 11+
				// We use the same native handler for focusin &amp;amp; focus (and focusout &amp;amp; blur)
				// so we need to coordinate setup &amp;amp; teardown parts between those events.
				// Use `delegateType` as the key as `type` is already used by `leverageNative`.
				attaches = dataPriv.get( this, delegateType );
				if ( !attaches ) {
					this.addEventListener( delegateType, focusMappedHandler );
				}
				dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );
			} else {
&amp;nbsp;
				// Return false to allow normal processing in the caller
				return false;
			}
		},
		trigger: function() {
&amp;nbsp;
			// Force setup before trigger
			leverageNative( this, type );
&amp;nbsp;
			// Return non-false to allow normal event-path propagation
			return true;
		},
&amp;nbsp;
		teardown: function() {
			var attaches;
&amp;nbsp;
			if ( document.documentMode ) {
				attaches = dataPriv.get( this, delegateType ) - 1;
				if ( !attaches ) {
					this.removeEventListener( delegateType, focusMappedHandler );
					dataPriv.remove( this, delegateType );
				} else {
					dataPriv.set( this, delegateType, attaches );
				}
			} else {
&amp;nbsp;
				// Return false to indicate standard teardown should be applied
				return false;
			}
		},
&amp;nbsp;
		// Suppress native focus or blur if we&#039;re currently inside
		// a leveraged native-event stack
		_default: function( event ) {
			return dataPriv.get( event.target, type );
		},
&amp;nbsp;
		delegateType: delegateType
	};
&amp;nbsp;
	// Support: Firefox &amp;lt;=44
	// Firefox doesn&#039;t have focus(in | out) events
	// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
	//
	// Support: Chrome &amp;lt;=48 - 49, Safari &amp;lt;=9.0 - 9.1
	// focus(in | out) events fire after focus &amp;amp; blur events,
	// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
	// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
	//
	// Support: IE 9 - 11+
	// To preserve relative focusin/focus &amp;amp; focusout/blur event order guaranteed on the 3.x branch,
	// attach a single handler for both events in IE.
	jQuery.event.special[ delegateType ] = {
		setup: function() {
&amp;nbsp;
			// Handle: regular nodes (via `this.ownerDocument`), window
			// (via `this.document`) &amp;amp; document (via `this`).
			var doc = this.ownerDocument || this.document || this,
				dataHolder = document.documentMode ? this : doc,
				attaches = dataPriv.get( dataHolder, delegateType );
&amp;nbsp;
			// Support: IE 9 - 11+
			// We use the same native handler for focusin &amp;amp; focus (and focusout &amp;amp; blur)
			// so we need to coordinate setup &amp;amp; teardown parts between those events.
			// Use `delegateType` as the key as `type` is already used by `leverageNative`.
			if ( !attaches ) {
				if ( document.documentMode ) {
					this.addEventListener( delegateType, focusMappedHandler );
				} else {
					doc.addEventListener( type, focusMappedHandler, true );
				}
			}
			dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );
		},
		teardown: function() {
			var doc = this.ownerDocument || this.document || this,
				dataHolder = document.documentMode ? this : doc,
				attaches = dataPriv.get( dataHolder, delegateType ) - 1;
&amp;nbsp;
			if ( !attaches ) {
				if ( document.documentMode ) {
					this.removeEventListener( delegateType, focusMappedHandler );
				} else {
					doc.removeEventListener( type, focusMappedHandler, true );
				}
				dataPriv.remove( dataHolder, delegateType );
			} else {
				dataPriv.set( dataHolder, delegateType, attaches );
			}
		}
	};
} );
&amp;nbsp;
// Create mouseenter/leave events using mouseover/out and event-time checks
// so that event delegation works in jQuery.
// Do the same for pointerenter/pointerleave and pointerover/pointerout
//
// Support: Safari 7 only
// Safari sends mouseenter too often; see:
// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
// for the description of the bug (it existed in older Chrome versions as well).
jQuery.each( {
	mouseenter: &amp;quot;mouseover&amp;quot;,
	mouseleave: &amp;quot;mouseout&amp;quot;,
	pointerenter: &amp;quot;pointerover&amp;quot;,
	pointerleave: &amp;quot;pointerout&amp;quot;
}, function( orig, fix ) {
	jQuery.event.special[ orig ] = {
		delegateType: fix,
		bindType: fix,
&amp;nbsp;
		handle: function( event ) {
			var ret,
				target = this,
				related = event.relatedTarget,
				handleObj = event.handleObj;
&amp;nbsp;
			// For mouseenter/leave call the handler if related is outside the target.
			// NB: No relatedTarget if the mouse left/entered the browser window
			if ( !related || ( related !== target &amp;amp;&amp;amp; !jQuery.contains( target, related ) ) ) {
				event.type = handleObj.origType;
				ret = handleObj.handler.apply( this, arguments );
				event.type = fix;
			}
			return ret;
		}
	};
} );
&amp;nbsp;
jQuery.fn.extend( {
&amp;nbsp;
	on: function( types, selector, data, fn ) {
		return on( this, types, selector, data, fn );
	},
	one: function( types, selector, data, fn ) {
		return on( this, types, selector, data, fn, 1 );
	},
	off: function( types, selector, fn ) {
		var handleObj, type;
		if ( types &amp;amp;&amp;amp; types.preventDefault &amp;amp;&amp;amp; types.handleObj ) {
&amp;nbsp;
			// ( event )  dispatched jQuery.Event
			handleObj = types.handleObj;
			jQuery( types.delegateTarget ).off(
				handleObj.namespace ?
					handleObj.origType + &amp;quot;.&amp;quot; + handleObj.namespace :
					handleObj.origType,
				handleObj.selector,
				handleObj.handler
			);
			return this;
		}
		if ( typeof types === &amp;quot;object&amp;quot; ) {
&amp;nbsp;
			// ( types-object [, selector] )
			for ( type in types ) {
				this.off( type, selector, types[ type ] );
			}
			return this;
		}
		if ( selector === false || typeof selector === &amp;quot;function&amp;quot; ) {
&amp;nbsp;
			// ( types [, fn] )
			fn = selector;
			selector = undefined;
		}
		if ( fn === false ) {
			fn = returnFalse;
		}
		return this.each( function() {
			jQuery.event.remove( this, types, fn, selector );
		} );
	}
} );
&amp;nbsp;
&amp;nbsp;
var
&amp;nbsp;
	// Support: IE &amp;lt;=10 - 11, Edge 12 - 13 only
	// In IE/Edge using regex groups here causes severe slowdowns.
	// See https://connect.microsoft.com/IE/feedback/details/1736512/
	rnoInnerhtml = /&amp;lt;script|&amp;lt;style|&amp;lt;link/i,
&amp;nbsp;
	// checked=&amp;quot;checked&amp;quot; or checked
	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
&amp;nbsp;
	rcleanScript = /^\s*&amp;lt;!\[CDATA\[|\]\]&amp;gt;\s*$/g;
&amp;nbsp;
// Prefer a tbody over its parent table for containing new rows
function manipulationTarget( elem, content ) {
	if ( nodeName( elem, &amp;quot;table&amp;quot; ) &amp;amp;&amp;amp;
		nodeName( content.nodeType !== 11 ? content : content.firstChild, &amp;quot;tr&amp;quot; ) ) {
&amp;nbsp;
		return jQuery( elem ).children( &amp;quot;tbody&amp;quot; )[ 0 ] || elem;
	}
&amp;nbsp;
	return elem;
}
&amp;nbsp;
// Replace/restore the type attribute of script elements for safe DOM manipulation
function disableScript( elem ) {
	elem.type = ( elem.getAttribute( &amp;quot;type&amp;quot; ) !== null ) + &amp;quot;/&amp;quot; + elem.type;
	return elem;
}
function restoreScript( elem ) {
	if ( ( elem.type || &amp;quot;&amp;quot; ).slice( 0, 5 ) === &amp;quot;true/&amp;quot; ) {
		elem.type = elem.type.slice( 5 );
	} else {
		elem.removeAttribute( &amp;quot;type&amp;quot; );
	}
&amp;nbsp;
	return elem;
}
&amp;nbsp;
function cloneCopyEvent( src, dest ) {
	var i, l, type, pdataOld, udataOld, udataCur, events;
&amp;nbsp;
	if ( dest.nodeType !== 1 ) {
		return;
	}
&amp;nbsp;
	// 1. Copy private data: events, handlers, etc.
	if ( dataPriv.hasData( src ) ) {
		pdataOld = dataPriv.get( src );
		events = pdataOld.events;
&amp;nbsp;
		if ( events ) {
			dataPriv.remove( dest, &amp;quot;handle events&amp;quot; );
&amp;nbsp;
			for ( type in events ) {
				for ( i = 0, l = events[ type ].length; i &amp;lt; l; i++ ) {
					jQuery.event.add( dest, type, events[ type ][ i ] );
				}
			}
		}
	}
&amp;nbsp;
	// 2. Copy user data
	if ( dataUser.hasData( src ) ) {
		udataOld = dataUser.access( src );
		udataCur = jQuery.extend( {}, udataOld );
&amp;nbsp;
		dataUser.set( dest, udataCur );
	}
}
&amp;nbsp;
// Fix IE bugs, see support tests
function fixInput( src, dest ) {
	var nodeName = dest.nodeName.toLowerCase();
&amp;nbsp;
	// Fails to persist the checked state of a cloned checkbox or radio button.
	if ( nodeName === &amp;quot;input&amp;quot; &amp;amp;&amp;amp; rcheckableType.test( src.type ) ) {
		dest.checked = src.checked;
&amp;nbsp;
	// Fails to return the selected option to the default selected state when cloning options
	} else if ( nodeName === &amp;quot;input&amp;quot; || nodeName === &amp;quot;textarea&amp;quot; ) {
		dest.defaultValue = src.defaultValue;
	}
}
&amp;nbsp;
function domManip( collection, args, callback, ignored ) {
&amp;nbsp;
	// Flatten any nested arrays
	args = flat( args );
&amp;nbsp;
	var fragment, first, scripts, hasScripts, node, doc,
		i = 0,
		l = collection.length,
		iNoClone = l - 1,
		value = args[ 0 ],
		valueIsFunction = isFunction( value );
&amp;nbsp;
	// We can&#039;t cloneNode fragments that contain checked, in WebKit
	if ( valueIsFunction ||
			( l &amp;gt; 1 &amp;amp;&amp;amp; typeof value === &amp;quot;string&amp;quot; &amp;amp;&amp;amp;
				!support.checkClone &amp;amp;&amp;amp; rchecked.test( value ) ) ) {
		return collection.each( function( index ) {
			var self = collection.eq( index );
			if ( valueIsFunction ) {
				args[ 0 ] = value.call( this, index, self.html() );
			}
			domManip( self, args, callback, ignored );
		} );
	}
&amp;nbsp;
	if ( l ) {
		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
		first = fragment.firstChild;
&amp;nbsp;
		if ( fragment.childNodes.length === 1 ) {
			fragment = first;
		}
&amp;nbsp;
		// Require either new content or an interest in ignored elements to invoke the callback
		if ( first || ignored ) {
			scripts = jQuery.map( getAll( fragment, &amp;quot;script&amp;quot; ), disableScript );
			hasScripts = scripts.length;
&amp;nbsp;
			// Use the original fragment for the last item
			// instead of the first because it can end up
			// being emptied incorrectly in certain situations (trac-8070).
			for ( ; i &amp;lt; l; i++ ) {
				node = fragment;
&amp;nbsp;
				if ( i !== iNoClone ) {
					node = jQuery.clone( node, true, true );
&amp;nbsp;
					// Keep references to cloned scripts for later restoration
					if ( hasScripts ) {
&amp;nbsp;
						// Support: Android &amp;lt;=4.0 only, PhantomJS 1 only
						// push.apply(_, arraylike) throws on ancient WebKit
						jQuery.merge( scripts, getAll( node, &amp;quot;script&amp;quot; ) );
					}
				}
&amp;nbsp;
				callback.call( collection[ i ], node, i );
			}
&amp;nbsp;
			if ( hasScripts ) {
				doc = scripts[ scripts.length - 1 ].ownerDocument;
&amp;nbsp;
				// Re-enable scripts
				jQuery.map( scripts, restoreScript );
&amp;nbsp;
				// Evaluate executable scripts on first document insertion
				for ( i = 0; i &amp;lt; hasScripts; i++ ) {
					node = scripts[ i ];
					if ( rscriptType.test( node.type || &amp;quot;&amp;quot; ) &amp;amp;&amp;amp;
						!dataPriv.access( node, &amp;quot;globalEval&amp;quot; ) &amp;amp;&amp;amp;
						jQuery.contains( doc, node ) ) {
&amp;nbsp;
						if ( node.src &amp;amp;&amp;amp; ( node.type || &amp;quot;&amp;quot; ).toLowerCase()  !== &amp;quot;module&amp;quot; ) {
&amp;nbsp;
							// Optional AJAX dependency, but won&#039;t run scripts if not present
							if ( jQuery._evalUrl &amp;amp;&amp;amp; !node.noModule ) {
								jQuery._evalUrl( node.src, {
									nonce: node.nonce || node.getAttribute( &amp;quot;nonce&amp;quot; )
								}, doc );
							}
						} else {
&amp;nbsp;
							// Unwrap a CDATA section containing script contents. This shouldn&#039;t be
							// needed as in XML documents they&#039;re already not visible when
							// inspecting element contents and in HTML documents they have no
							// meaning but we&#039;re preserving that logic for backwards compatibility.
							// This will be removed completely in 4.0. See gh-4904.
							DOMEval( node.textContent.replace( rcleanScript, &amp;quot;&amp;quot; ), node, doc );
						}
					}
				}
			}
		}
	}
&amp;nbsp;
	return collection;
}
&amp;nbsp;
function remove( elem, selector, keepData ) {
	var node,
		nodes = selector ? jQuery.filter( selector, elem ) : elem,
		i = 0;
&amp;nbsp;
	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
		if ( !keepData &amp;amp;&amp;amp; node.nodeType === 1 ) {
			jQuery.cleanData( getAll( node ) );
		}
&amp;nbsp;
		if ( node.parentNode ) {
			if ( keepData &amp;amp;&amp;amp; isAttached( node ) ) {
				setGlobalEval( getAll( node, &amp;quot;script&amp;quot; ) );
			}
			node.parentNode.removeChild( node );
		}
	}
&amp;nbsp;
	return elem;
}
&amp;nbsp;
jQuery.extend( {
	htmlPrefilter: function( html ) {
		return html;
	},
&amp;nbsp;
	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
		var i, l, srcElements, destElements,
			clone = elem.cloneNode( true ),
			inPage = isAttached( elem );
&amp;nbsp;
		// Fix IE cloning issues
		if ( !support.noCloneChecked &amp;amp;&amp;amp; ( elem.nodeType === 1 || elem.nodeType === 11 ) &amp;amp;&amp;amp;
				!jQuery.isXMLDoc( elem ) ) {
&amp;nbsp;
			// We eschew jQuery#find here for performance reasons:
			// https://jsperf.com/getall-vs-sizzle/2
			destElements = getAll( clone );
			srcElements = getAll( elem );
&amp;nbsp;
			for ( i = 0, l = srcElements.length; i &amp;lt; l; i++ ) {
				fixInput( srcElements[ i ], destElements[ i ] );
			}
		}
&amp;nbsp;
		// Copy the events from the original to the clone
		if ( dataAndEvents ) {
			if ( deepDataAndEvents ) {
				srcElements = srcElements || getAll( elem );
				destElements = destElements || getAll( clone );
&amp;nbsp;
				for ( i = 0, l = srcElements.length; i &amp;lt; l; i++ ) {
					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
				}
			} else {
				cloneCopyEvent( elem, clone );
			}
		}
&amp;nbsp;
		// Preserve script evaluation history
		destElements = getAll( clone, &amp;quot;script&amp;quot; );
		if ( destElements.length &amp;gt; 0 ) {
			setGlobalEval( destElements, !inPage &amp;amp;&amp;amp; getAll( elem, &amp;quot;script&amp;quot; ) );
		}
&amp;nbsp;
		// Return the cloned set
		return clone;
	},
&amp;nbsp;
	cleanData: function( elems ) {
		var data, elem, type,
			special = jQuery.event.special,
			i = 0;
&amp;nbsp;
		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
			if ( acceptData( elem ) ) {
				if ( ( data = elem[ dataPriv.expando ] ) ) {
					if ( data.events ) {
						for ( type in data.events ) {
							if ( special[ type ] ) {
								jQuery.event.remove( elem, type );
&amp;nbsp;
							// This is a shortcut to avoid jQuery.event.remove&#039;s overhead
							} else {
								jQuery.removeEvent( elem, type, data.handle );
							}
						}
					}
&amp;nbsp;
					// Support: Chrome &amp;lt;=35 - 45+
					// Assign undefined instead of using delete, see Data#remove
					elem[ dataPriv.expando ] = undefined;
				}
				if ( elem[ dataUser.expando ] ) {
&amp;nbsp;
					// Support: Chrome &amp;lt;=35 - 45+
					// Assign undefined instead of using delete, see Data#remove
					elem[ dataUser.expando ] = undefined;
				}
			}
		}
	}
} );
&amp;nbsp;
jQuery.fn.extend( {
	detach: function( selector ) {
		return remove( this, selector, true );
	},
&amp;nbsp;
	remove: function( selector ) {
		return remove( this, selector );
	},
&amp;nbsp;
	text: function( value ) {
		return access( this, function( value ) {
			return value === undefined ?
				jQuery.text( this ) :
				this.empty().each( function() {
					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
						this.textContent = value;
					}
				} );
		}, null, value, arguments.length );
	},
&amp;nbsp;
	append: function() {
		return domManip( this, arguments, function( elem ) {
			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
				var target = manipulationTarget( this, elem );
				target.appendChild( elem );
			}
		} );
	},
&amp;nbsp;
	prepend: function() {
		return domManip( this, arguments, function( elem ) {
			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
				var target = manipulationTarget( this, elem );
				target.insertBefore( elem, target.firstChild );
			}
		} );
	},
&amp;nbsp;
	before: function() {
		return domManip( this, arguments, function( elem ) {
			if ( this.parentNode ) {
				this.parentNode.insertBefore( elem, this );
			}
		} );
	},
&amp;nbsp;
	after: function() {
		return domManip( this, arguments, function( elem ) {
			if ( this.parentNode ) {
				this.parentNode.insertBefore( elem, this.nextSibling );
			}
		} );
	},
&amp;nbsp;
	empty: function() {
		var elem,
			i = 0;
&amp;nbsp;
		for ( ; ( elem = this[ i ] ) != null; i++ ) {
			if ( elem.nodeType === 1 ) {
&amp;nbsp;
				// Prevent memory leaks
				jQuery.cleanData( getAll( elem, false ) );
&amp;nbsp;
				// Remove any remaining nodes
				elem.textContent = &amp;quot;&amp;quot;;
			}
		}
&amp;nbsp;
		return this;
	},
&amp;nbsp;
	clone: function( dataAndEvents, deepDataAndEvents ) {
		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
&amp;nbsp;
		return this.map( function() {
			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
		} );
	},
&amp;nbsp;
	html: function( value ) {
		return access( this, function( value ) {
			var elem = this[ 0 ] || {},
				i = 0,
				l = this.length;
&amp;nbsp;
			if ( value === undefined &amp;amp;&amp;amp; elem.nodeType === 1 ) {
				return elem.innerHTML;
			}
&amp;nbsp;
			// See if we can take a shortcut and just use innerHTML
			if ( typeof value === &amp;quot;string&amp;quot; &amp;amp;&amp;amp; !rnoInnerhtml.test( value ) &amp;amp;&amp;amp;
				!wrapMap[ ( rtagName.exec( value ) || [ &amp;quot;&amp;quot;, &amp;quot;&amp;quot; ] )[ 1 ].toLowerCase() ] ) {
&amp;nbsp;
				value = jQuery.htmlPrefilter( value );
&amp;nbsp;
				try {
					for ( ; i &amp;lt; l; i++ ) {
						elem = this[ i ] || {};
&amp;nbsp;
						// Remove element nodes and prevent memory leaks
						if ( elem.nodeType === 1 ) {
							jQuery.cleanData( getAll( elem, false ) );
							elem.innerHTML = value;
						}
					}
&amp;nbsp;
					elem = 0;
&amp;nbsp;
				// If using innerHTML throws an exception, use the fallback method
				} catch ( e ) {}
			}
&amp;nbsp;
			if ( elem ) {
				this.empty().append( value );
			}
		}, null, value, arguments.length );
	},
&amp;nbsp;
	replaceWith: function() {
		var ignored = [];
&amp;nbsp;
		// Make the changes, replacing each non-ignored context element with the new content
		return domManip( this, arguments, function( elem ) {
			var parent = this.parentNode;
&amp;nbsp;
			if ( jQuery.inArray( this, ignored ) &amp;lt; 0 ) {
				jQuery.cleanData( getAll( this ) );
				if ( parent ) {
					parent.replaceChild( elem, this );
				}
			}
&amp;nbsp;
		// Force callback invocation
		}, ignored );
	}
} );
&amp;nbsp;
jQuery.each( {
	appendTo: &amp;quot;append&amp;quot;,
	prependTo: &amp;quot;prepend&amp;quot;,
	insertBefore: &amp;quot;before&amp;quot;,
	insertAfter: &amp;quot;after&amp;quot;,
	replaceAll: &amp;quot;replaceWith&amp;quot;
}, function( name, original ) {
	jQuery.fn[ name ] = function( selector ) {
		var elems,
			ret = [],
			insert = jQuery( selector ),
			last = insert.length - 1,
			i = 0;
&amp;nbsp;
		for ( ; i &amp;lt;= last; i++ ) {
			elems = i === last ? this : this.clone( true );
			jQuery( insert[ i ] )[ original ]( elems );
&amp;nbsp;
			// Support: Android &amp;lt;=4.0 only, PhantomJS 1 only
			// .get() because push.apply(_, arraylike) throws on ancient WebKit
			push.apply( ret, elems.get() );
		}
&amp;nbsp;
		return this.pushStack( ret );
	};
} );
var rnumnonpx = new RegExp( &amp;quot;^(&amp;quot; + pnum + &amp;quot;)(?!px)[a-z%]+$&amp;quot;, &amp;quot;i&amp;quot; );
&amp;nbsp;
var rcustomProp = /^--/;
&amp;nbsp;
&amp;nbsp;
var getStyles = function( elem ) {
&amp;nbsp;
		// Support: IE &amp;lt;=11 only, Firefox &amp;lt;=30 (trac-15098, trac-14150)
		// IE throws on elements created in popups
		// FF meanwhile throws on frame elements through &amp;quot;defaultView.getComputedStyle&amp;quot;
		var view = elem.ownerDocument.defaultView;
&amp;nbsp;
		if ( !view || !view.opener ) {
			view = window;
		}
&amp;nbsp;
		return view.getComputedStyle( elem );
	};
&amp;nbsp;
var swap = function( elem, options, callback ) {
	var ret, name,
		old = {};
&amp;nbsp;
	// Remember the old values, and insert the new ones
	for ( name in options ) {
		old[ name ] = elem.style[ name ];
		elem.style[ name ] = options[ name ];
	}
&amp;nbsp;
	ret = callback.call( elem );
&amp;nbsp;
	// Revert the old values
	for ( name in options ) {
		elem.style[ name ] = old[ name ];
	}
&amp;nbsp;
	return ret;
};
&amp;nbsp;
&amp;nbsp;
var rboxStyle = new RegExp( cssExpand.join( &amp;quot;|&amp;quot; ), &amp;quot;i&amp;quot; );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
( function() {
&amp;nbsp;
	// Executing both pixelPosition &amp;amp; boxSizingReliable tests require only one layout
	// so they&#039;re executed at the same time to save the second computation.
	function computeStyleTests() {
&amp;nbsp;
		// This is a singleton, we need to execute it only once
		if ( !div ) {
			return;
		}
&amp;nbsp;
		container.style.cssText = &amp;quot;position:absolute;left:-11111px;width:60px;&amp;quot; +
			&amp;quot;margin-top:1px;padding:0;border:0&amp;quot;;
		div.style.cssText =
			&amp;quot;position:relative;display:block;box-sizing:border-box;overflow:scroll;&amp;quot; +
			&amp;quot;margin:auto;border:1px;padding:1px;&amp;quot; +
			&amp;quot;width:60%;top:1%&amp;quot;;
		documentElement.appendChild( container ).appendChild( div );
&amp;nbsp;
		var divStyle = window.getComputedStyle( div );
		pixelPositionVal = divStyle.top !== &amp;quot;1%&amp;quot;;
&amp;nbsp;
		// Support: Android 4.0 - 4.3 only, Firefox &amp;lt;=3 - 44
		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
&amp;nbsp;
		// Support: Android 4.0 - 4.3 only, Safari &amp;lt;=9.1 - 10.1, iOS &amp;lt;=7.0 - 9.3
		// Some styles come back with percentage values, even though they shouldn&#039;t
		div.style.right = &amp;quot;60%&amp;quot;;
		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
&amp;nbsp;
		// Support: IE 9 - 11 only
		// Detect misreporting of content dimensions for box-sizing:border-box elements
		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
&amp;nbsp;
		// Support: IE 9 only
		// Detect overflow:scroll screwiness (gh-3699)
		// Support: Chrome &amp;lt;=64
		// Don&#039;t get tricked when zoom affects offsetWidth (gh-4029)
		div.style.position = &amp;quot;absolute&amp;quot;;
		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
&amp;nbsp;
		documentElement.removeChild( container );
&amp;nbsp;
		// Nullify the div so it wouldn&#039;t be stored in the memory and
		// it will also be a sign that checks already performed
		div = null;
	}
&amp;nbsp;
	function roundPixelMeasures( measure ) {
		return Math.round( parseFloat( measure ) );
	}
&amp;nbsp;
	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
		reliableTrDimensionsVal, reliableMarginLeftVal,
		container = document.createElement( &amp;quot;div&amp;quot; ),
		div = document.createElement( &amp;quot;div&amp;quot; );
&amp;nbsp;
	// Finish early in limited (non-browser) environments
	if ( !div.style ) {
		return;
	}
&amp;nbsp;
	// Support: IE &amp;lt;=9 - 11 only
	// Style of cloned element affects source element cloned (trac-8908)
	div.style.backgroundClip = &amp;quot;content-box&amp;quot;;
	div.cloneNode( true ).style.backgroundClip = &amp;quot;&amp;quot;;
	support.clearCloneStyle = div.style.backgroundClip === &amp;quot;content-box&amp;quot;;
&amp;nbsp;
	jQuery.extend( support, {
		boxSizingReliable: function() {
			computeStyleTests();
			return boxSizingReliableVal;
		},
		pixelBoxStyles: function() {
			computeStyleTests();
			return pixelBoxStylesVal;
		},
		pixelPosition: function() {
			computeStyleTests();
			return pixelPositionVal;
		},
		reliableMarginLeft: function() {
			computeStyleTests();
			return reliableMarginLeftVal;
		},
		scrollboxSize: function() {
			computeStyleTests();
			return scrollboxSizeVal;
		},
&amp;nbsp;
		// Support: IE 9 - 11+, Edge 15 - 18+
		// IE/Edge misreport `getComputedStyle` of table rows with width/height
		// set in CSS while `offset*` properties report correct values.
		// Behavior in IE 9 is more subtle than in newer versions &amp;amp; it passes
		// some versions of this test; make sure not to make it pass there!
		//
		// Support: Firefox 70+
		// Only Firefox includes border widths
		// in computed dimensions. (gh-4529)
		reliableTrDimensions: function() {
			var table, tr, trChild, trStyle;
			if ( reliableTrDimensionsVal == null ) {
				table = document.createElement( &amp;quot;table&amp;quot; );
				tr = document.createElement( &amp;quot;tr&amp;quot; );
				trChild = document.createElement( &amp;quot;div&amp;quot; );
&amp;nbsp;
				table.style.cssText = &amp;quot;position:absolute;left:-11111px;border-collapse:separate&amp;quot;;
				tr.style.cssText = &amp;quot;box-sizing:content-box;border:1px solid&amp;quot;;
&amp;nbsp;
				// Support: Chrome 86+
				// Height set through cssText does not get applied.
				// Computed height then comes back as 0.
				tr.style.height = &amp;quot;1px&amp;quot;;
				trChild.style.height = &amp;quot;9px&amp;quot;;
&amp;nbsp;
				// Support: Android 8 Chrome 86+
				// In our bodyBackground.html iframe,
				// display for all div elements is set to &amp;quot;inline&amp;quot;,
				// which causes a problem only in Android 8 Chrome 86.
				// Ensuring the div is `display: block`
				// gets around this issue.
				trChild.style.display = &amp;quot;block&amp;quot;;
&amp;nbsp;
				documentElement
					.appendChild( table )
					.appendChild( tr )
					.appendChild( trChild );
&amp;nbsp;
				trStyle = window.getComputedStyle( tr );
				reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
					parseInt( trStyle.borderTopWidth, 10 ) +
					parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
&amp;nbsp;
				documentElement.removeChild( table );
			}
			return reliableTrDimensionsVal;
		}
	} );
} )();
&amp;nbsp;
&amp;nbsp;
function curCSS( elem, name, computed ) {
	var width, minWidth, maxWidth, ret,
		isCustomProp = rcustomProp.test( name ),
&amp;nbsp;
		// Support: Firefox 51+
		// Retrieving style before computed somehow
		// fixes an issue with getting wrong values
		// on detached elements
		style = elem.style;
&amp;nbsp;
	computed = computed || getStyles( elem );
&amp;nbsp;
	// getPropertyValue is needed for:
	//   .css(&#039;filter&#039;) (IE 9 only, trac-12537)
	//   .css(&#039;--customProperty) (gh-3144)
	if ( computed ) {
&amp;nbsp;
		// Support: IE &amp;lt;=9 - 11+
		// IE only supports `&amp;quot;float&amp;quot;` in `getPropertyValue`; in computed styles
		// it&#039;s only available as `&amp;quot;cssFloat&amp;quot;`. We no longer modify properties
		// sent to `.css()` apart from camelCasing, so we need to check both.
		// Normally, this would create difference in behavior: if
		// `getPropertyValue` returns an empty string, the value returned
		// by `.css()` would be `undefined`. This is usually the case for
		// disconnected elements. However, in IE even disconnected elements
		// with no styles return `&amp;quot;none&amp;quot;` for `getPropertyValue( &amp;quot;float&amp;quot; )`
		ret = computed.getPropertyValue( name ) || computed[ name ];
&amp;nbsp;
		if ( isCustomProp &amp;amp;&amp;amp; ret ) {
&amp;nbsp;
			// Support: Firefox 105+, Chrome &amp;lt;=105+
			// Spec requires trimming whitespace for custom properties (gh-4926).
			// Firefox only trims leading whitespace. Chrome just collapses
			// both leading &amp;amp; trailing whitespace to a single space.
			//
			// Fall back to `undefined` if empty string returned.
			// This collapses a missing definition with property defined
			// and set to an empty string but there&#039;s no standard API
			// allowing us to differentiate them without a performance penalty
			// and returning `undefined` aligns with older jQuery.
			//
			// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED
			// as whitespace while CSS does not, but this is not a problem
			// because CSS preprocessing replaces them with U+000A LINE FEED
			// (which *is* CSS whitespace)
			// https://www.w3.org/TR/css-syntax-3/#input-preprocessing
			ret = ret.replace( rtrimCSS, &amp;quot;$1&amp;quot; ) || undefined;
		}
&amp;nbsp;
		if ( ret === &amp;quot;&amp;quot; &amp;amp;&amp;amp; !isAttached( elem ) ) {
			ret = jQuery.style( elem, name );
		}
&amp;nbsp;
		// A tribute to the &amp;quot;awesome hack by Dean Edwards&amp;quot;
		// Android Browser returns percentage for some values,
		// but width seems to be reliably pixels.
		// This is against the CSSOM draft spec:
		// https://drafts.csswg.org/cssom/#resolved-values
		if ( !support.pixelBoxStyles() &amp;amp;&amp;amp; rnumnonpx.test( ret ) &amp;amp;&amp;amp; rboxStyle.test( name ) ) {
&amp;nbsp;
			// Remember the original values
			width = style.width;
			minWidth = style.minWidth;
			maxWidth = style.maxWidth;
&amp;nbsp;
			// Put in the new values to get a computed value out
			style.minWidth = style.maxWidth = style.width = ret;
			ret = computed.width;
&amp;nbsp;
			// Revert the changed values
			style.width = width;
			style.minWidth = minWidth;
			style.maxWidth = maxWidth;
		}
	}
&amp;nbsp;
	return ret !== undefined ?
&amp;nbsp;
		// Support: IE &amp;lt;=9 - 11 only
		// IE returns zIndex value as an integer.
		ret + &amp;quot;&amp;quot; :
		ret;
}
&amp;nbsp;
&amp;nbsp;
function addGetHookIf( conditionFn, hookFn ) {
&amp;nbsp;
	// Define the hook, we&#039;ll check on the first run if it&#039;s really needed.
	return {
		get: function() {
			if ( conditionFn() ) {
&amp;nbsp;
				// Hook not needed (or it&#039;s not possible to use it due
				// to missing dependency), remove it.
				delete this.get;
				return;
			}
&amp;nbsp;
			// Hook needed; redefine it so that the support test is not executed again.
			return ( this.get = hookFn ).apply( this, arguments );
		}
	};
}
&amp;nbsp;
&amp;nbsp;
var cssPrefixes = [ &amp;quot;Webkit&amp;quot;, &amp;quot;Moz&amp;quot;, &amp;quot;ms&amp;quot; ],
	emptyStyle = document.createElement( &amp;quot;div&amp;quot; ).style,
	vendorProps = {};
&amp;nbsp;
// Return a vendor-prefixed property or undefined
function vendorPropName( name ) {
&amp;nbsp;
	// Check for vendor prefixed names
	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
		i = cssPrefixes.length;
&amp;nbsp;
	while ( i-- ) {
		name = cssPrefixes[ i ] + capName;
		if ( name in emptyStyle ) {
			return name;
		}
	}
}
&amp;nbsp;
// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
function finalPropName( name ) {
	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
&amp;nbsp;
	if ( final ) {
		return final;
	}
	if ( name in emptyStyle ) {
		return name;
	}
	return vendorProps[ name ] = vendorPropName( name ) || name;
}
&amp;nbsp;
&amp;nbsp;
var
&amp;nbsp;
	// Swappable if display is none or starts with table
	// except &amp;quot;table&amp;quot;, &amp;quot;table-cell&amp;quot;, or &amp;quot;table-caption&amp;quot;
	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
	cssShow = { position: &amp;quot;absolute&amp;quot;, visibility: &amp;quot;hidden&amp;quot;, display: &amp;quot;block&amp;quot; },
	cssNormalTransform = {
		letterSpacing: &amp;quot;0&amp;quot;,
		fontWeight: &amp;quot;400&amp;quot;
	};
&amp;nbsp;
function setPositiveNumber( _elem, value, subtract ) {
&amp;nbsp;
	// Any relative (+/-) values have already been
	// normalized at this point
	var matches = rcssNum.exec( value );
	return matches ?
&amp;nbsp;
		// Guard against undefined &amp;quot;subtract&amp;quot;, e.g., when used as in cssHooks
		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || &amp;quot;px&amp;quot; ) :
		value;
}
&amp;nbsp;
function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
	var i = dimension === &amp;quot;width&amp;quot; ? 1 : 0,
		extra = 0,
		delta = 0,
		marginDelta = 0;
&amp;nbsp;
	// Adjustment may not be necessary
	if ( box === ( isBorderBox ? &amp;quot;border&amp;quot; : &amp;quot;content&amp;quot; ) ) {
		return 0;
	}
&amp;nbsp;
	for ( ; i &amp;lt; 4; i += 2 ) {
&amp;nbsp;
		// Both box models exclude margin
		// Count margin delta separately to only add it after scroll gutter adjustment.
		// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).
		if ( box === &amp;quot;margin&amp;quot; ) {
			marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
		}
&amp;nbsp;
		// If we get here with a content-box, we&#039;re seeking &amp;quot;padding&amp;quot; or &amp;quot;border&amp;quot; or &amp;quot;margin&amp;quot;
		if ( !isBorderBox ) {
&amp;nbsp;
			// Add padding
			delta += jQuery.css( elem, &amp;quot;padding&amp;quot; + cssExpand[ i ], true, styles );
&amp;nbsp;
			// For &amp;quot;border&amp;quot; or &amp;quot;margin&amp;quot;, add border
			if ( box !== &amp;quot;padding&amp;quot; ) {
				delta += jQuery.css( elem, &amp;quot;border&amp;quot; + cssExpand[ i ] + &amp;quot;Width&amp;quot;, true, styles );
&amp;nbsp;
			// But still keep track of it otherwise
			} else {
				extra += jQuery.css( elem, &amp;quot;border&amp;quot; + cssExpand[ i ] + &amp;quot;Width&amp;quot;, true, styles );
			}
&amp;nbsp;
		// If we get here with a border-box (content + padding + border), we&#039;re seeking &amp;quot;content&amp;quot; or
		// &amp;quot;padding&amp;quot; or &amp;quot;margin&amp;quot;
		} else {
&amp;nbsp;
			// For &amp;quot;content&amp;quot;, subtract padding
			if ( box === &amp;quot;content&amp;quot; ) {
				delta -= jQuery.css( elem, &amp;quot;padding&amp;quot; + cssExpand[ i ], true, styles );
			}
&amp;nbsp;
			// For &amp;quot;content&amp;quot; or &amp;quot;padding&amp;quot;, subtract border
			if ( box !== &amp;quot;margin&amp;quot; ) {
				delta -= jQuery.css( elem, &amp;quot;border&amp;quot; + cssExpand[ i ] + &amp;quot;Width&amp;quot;, true, styles );
			}
		}
	}
&amp;nbsp;
	// Account for positive content-box scroll gutter when requested by providing computedVal
	if ( !isBorderBox &amp;amp;&amp;amp; computedVal &amp;gt;= 0 ) {
&amp;nbsp;
		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
		// Assuming integer scroll gutter, subtract the rest and round down
		delta += Math.max( 0, Math.ceil(
			elem[ &amp;quot;offset&amp;quot; + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
			computedVal -
			delta -
			extra -
			0.5
&amp;nbsp;
		// If offsetWidth/offsetHeight is unknown, then we can&#039;t determine content-box scroll gutter
		// Use an explicit zero to avoid NaN (gh-3964)
		) ) || 0;
	}
&amp;nbsp;
	return delta + marginDelta;
}
&amp;nbsp;
function getWidthOrHeight( elem, dimension, extra ) {
&amp;nbsp;
	// Start with computed style
	var styles = getStyles( elem ),
&amp;nbsp;
		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
		// Fake content-box until we know it&#039;s needed to know the true value.
		boxSizingNeeded = !support.boxSizingReliable() || extra,
		isBorderBox = boxSizingNeeded &amp;amp;&amp;amp;
			jQuery.css( elem, &amp;quot;boxSizing&amp;quot;, false, styles ) === &amp;quot;border-box&amp;quot;,
		valueIsBorderBox = isBorderBox,
&amp;nbsp;
		val = curCSS( elem, dimension, styles ),
		offsetProp = &amp;quot;offset&amp;quot; + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
&amp;nbsp;
	// Support: Firefox &amp;lt;=54
	// Return a confounding non-pixel value or feign ignorance, as appropriate.
	if ( rnumnonpx.test( val ) ) {
		if ( !extra ) {
			return val;
		}
		val = &amp;quot;auto&amp;quot;;
	}
&amp;nbsp;
&amp;nbsp;
	// Support: IE 9 - 11 only
	// Use offsetWidth/offsetHeight for when box sizing is unreliable.
	// In those cases, the computed value can be trusted to be border-box.
	if ( ( !support.boxSizingReliable() &amp;amp;&amp;amp; isBorderBox ||
&amp;nbsp;
		// Support: IE 10 - 11+, Edge 15 - 18+
		// IE/Edge misreport `getComputedStyle` of table rows with width/height
		// set in CSS while `offset*` properties report correct values.
		// Interestingly, in some cases IE 9 doesn&#039;t suffer from this issue.
		!support.reliableTrDimensions() &amp;amp;&amp;amp; nodeName( elem, &amp;quot;tr&amp;quot; ) ||
&amp;nbsp;
		// Fall back to offsetWidth/offsetHeight when value is &amp;quot;auto&amp;quot;
		// This happens for inline elements with no explicit setting (gh-3571)
		val === &amp;quot;auto&amp;quot; ||
&amp;nbsp;
		// Support: Android &amp;lt;=4.1 - 4.3 only
		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
		!parseFloat( val ) &amp;amp;&amp;amp; jQuery.css( elem, &amp;quot;display&amp;quot;, false, styles ) === &amp;quot;inline&amp;quot; ) &amp;amp;&amp;amp;
&amp;nbsp;
		// Make sure the element is visible &amp;amp; connected
		elem.getClientRects().length ) {
&amp;nbsp;
		isBorderBox = jQuery.css( elem, &amp;quot;boxSizing&amp;quot;, false, styles ) === &amp;quot;border-box&amp;quot;;
&amp;nbsp;
		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
		// retrieved value as a content box dimension.
		valueIsBorderBox = offsetProp in elem;
		if ( valueIsBorderBox ) {
			val = elem[ offsetProp ];
		}
	}
&amp;nbsp;
	// Normalize &amp;quot;&amp;quot; and auto
	val = parseFloat( val ) || 0;
&amp;nbsp;
	// Adjust for the element&#039;s box model
	return ( val +
		boxModelAdjustment(
			elem,
			dimension,
			extra || ( isBorderBox ? &amp;quot;border&amp;quot; : &amp;quot;content&amp;quot; ),
			valueIsBorderBox,
			styles,
&amp;nbsp;
			// Provide the current computed size to request scroll gutter calculation (gh-3589)
			val
		)
	) + &amp;quot;px&amp;quot;;
}
&amp;nbsp;
jQuery.extend( {
&amp;nbsp;
	// Add in style property hooks for overriding the default
	// behavior of getting and setting a style property
	cssHooks: {
		opacity: {
			get: function( elem, computed ) {
				if ( computed ) {
&amp;nbsp;
					// We should always get a number back from opacity
					var ret = curCSS( elem, &amp;quot;opacity&amp;quot; );
					return ret === &amp;quot;&amp;quot; ? &amp;quot;1&amp;quot; : ret;
				}
			}
		}
	},
&amp;nbsp;
	// Don&#039;t automatically add &amp;quot;px&amp;quot; to these possibly-unitless properties
	cssNumber: {
		animationIterationCount: true,
		aspectRatio: true,
		borderImageSlice: true,
		columnCount: true,
		flexGrow: true,
		flexShrink: true,
		fontWeight: true,
		gridArea: true,
		gridColumn: true,
		gridColumnEnd: true,
		gridColumnStart: true,
		gridRow: true,
		gridRowEnd: true,
		gridRowStart: true,
		lineHeight: true,
		opacity: true,
		order: true,
		orphans: true,
		scale: true,
		widows: true,
		zIndex: true,
		zoom: true,
&amp;nbsp;
		// SVG-related
		fillOpacity: true,
		floodOpacity: true,
		stopOpacity: true,
		strokeMiterlimit: true,
		strokeOpacity: true
	},
&amp;nbsp;
	// Add in properties whose names you wish to fix before
	// setting or getting the value
	cssProps: {},
&amp;nbsp;
	// Get and set the style property on a DOM Node
	style: function( elem, name, value, extra ) {
&amp;nbsp;
		// Don&#039;t set styles on text and comment nodes
		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
			return;
		}
&amp;nbsp;
		// Make sure that we&#039;re working with the right name
		var ret, type, hooks,
			origName = camelCase( name ),
			isCustomProp = rcustomProp.test( name ),
			style = elem.style;
&amp;nbsp;
		// Make sure that we&#039;re working with the right name. We don&#039;t
		// want to query the value if it is a CSS custom property
		// since they are user-defined.
		if ( !isCustomProp ) {
			name = finalPropName( origName );
		}
&amp;nbsp;
		// Gets hook for the prefixed version, then unprefixed version
		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
&amp;nbsp;
		// Check if we&#039;re setting a value
		if ( value !== undefined ) {
			type = typeof value;
&amp;nbsp;
			// Convert &amp;quot;+=&amp;quot; or &amp;quot;-=&amp;quot; to relative numbers (trac-7345)
			if ( type === &amp;quot;string&amp;quot; &amp;amp;&amp;amp; ( ret = rcssNum.exec( value ) ) &amp;amp;&amp;amp; ret[ 1 ] ) {
				value = adjustCSS( elem, name, ret );
&amp;nbsp;
				// Fixes bug trac-9237
				type = &amp;quot;number&amp;quot;;
			}
&amp;nbsp;
			// Make sure that null and NaN values aren&#039;t set (trac-7116)
			if ( value == null || value !== value ) {
				return;
			}
&amp;nbsp;
			// If a number was passed in, add the unit (except for certain CSS properties)
			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
			// &amp;quot;px&amp;quot; to a few hardcoded values.
			if ( type === &amp;quot;number&amp;quot; &amp;amp;&amp;amp; !isCustomProp ) {
				value += ret &amp;amp;&amp;amp; ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? &amp;quot;&amp;quot; : &amp;quot;px&amp;quot; );
			}
&amp;nbsp;
			// background-* props affect original clone&#039;s values
			if ( !support.clearCloneStyle &amp;amp;&amp;amp; value === &amp;quot;&amp;quot; &amp;amp;&amp;amp; name.indexOf( &amp;quot;background&amp;quot; ) === 0 ) {
				style[ name ] = &amp;quot;inherit&amp;quot;;
			}
&amp;nbsp;
			// If a hook was provided, use that value, otherwise just set the specified value
			if ( !hooks || !( &amp;quot;set&amp;quot; in hooks ) ||
				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
&amp;nbsp;
				if ( isCustomProp ) {
					style.setProperty( name, value );
				} else {
					style[ name ] = value;
				}
			}
&amp;nbsp;
		} else {
&amp;nbsp;
			// If a hook was provided get the non-computed value from there
			if ( hooks &amp;amp;&amp;amp; &amp;quot;get&amp;quot; in hooks &amp;amp;&amp;amp;
				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
&amp;nbsp;
				return ret;
			}
&amp;nbsp;
			// Otherwise just get the value from the style object
			return style[ name ];
		}
	},
&amp;nbsp;
	css: function( elem, name, extra, styles ) {
		var val, num, hooks,
			origName = camelCase( name ),
			isCustomProp = rcustomProp.test( name );
&amp;nbsp;
		// Make sure that we&#039;re working with the right name. We don&#039;t
		// want to modify the value if it is a CSS custom property
		// since they are user-defined.
		if ( !isCustomProp ) {
			name = finalPropName( origName );
		}
&amp;nbsp;
		// Try prefixed name followed by the unprefixed name
		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
&amp;nbsp;
		// If a hook was provided get the computed value from there
		if ( hooks &amp;amp;&amp;amp; &amp;quot;get&amp;quot; in hooks ) {
			val = hooks.get( elem, true, extra );
		}
&amp;nbsp;
		// Otherwise, if a way to get the computed value exists, use that
		if ( val === undefined ) {
			val = curCSS( elem, name, styles );
		}
&amp;nbsp;
		// Convert &amp;quot;normal&amp;quot; to computed value
		if ( val === &amp;quot;normal&amp;quot; &amp;amp;&amp;amp; name in cssNormalTransform ) {
			val = cssNormalTransform[ name ];
		}
&amp;nbsp;
		// Make numeric if forced or a qualifier was provided and val looks numeric
		if ( extra === &amp;quot;&amp;quot; || extra ) {
			num = parseFloat( val );
			return extra === true || isFinite( num ) ? num || 0 : val;
		}
&amp;nbsp;
		return val;
	}
} );
&amp;nbsp;
jQuery.each( [ &amp;quot;height&amp;quot;, &amp;quot;width&amp;quot; ], function( _i, dimension ) {
	jQuery.cssHooks[ dimension ] = {
		get: function( elem, computed, extra ) {
			if ( computed ) {
&amp;nbsp;
				// Certain elements can have dimension info if we invisibly show them
				// but it must have a current display style that would benefit
				return rdisplayswap.test( jQuery.css( elem, &amp;quot;display&amp;quot; ) ) &amp;amp;&amp;amp;
&amp;nbsp;
					// Support: Safari 8+
					// Table columns in Safari have non-zero offsetWidth &amp;amp; zero
					// getBoundingClientRect().width unless display is changed.
					// Support: IE &amp;lt;=11 only
					// Running getBoundingClientRect on a disconnected node
					// in IE throws an error.
					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
					swap( elem, cssShow, function() {
						return getWidthOrHeight( elem, dimension, extra );
					} ) :
					getWidthOrHeight( elem, dimension, extra );
			}
		},
&amp;nbsp;
		set: function( elem, value, extra ) {
			var matches,
				styles = getStyles( elem ),
&amp;nbsp;
				// Only read styles.position if the test has a chance to fail
				// to avoid forcing a reflow.
				scrollboxSizeBuggy = !support.scrollboxSize() &amp;amp;&amp;amp;
					styles.position === &amp;quot;absolute&amp;quot;,
&amp;nbsp;
				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
				boxSizingNeeded = scrollboxSizeBuggy || extra,
				isBorderBox = boxSizingNeeded &amp;amp;&amp;amp;
					jQuery.css( elem, &amp;quot;boxSizing&amp;quot;, false, styles ) === &amp;quot;border-box&amp;quot;,
				subtract = extra ?
					boxModelAdjustment(
						elem,
						dimension,
						extra,
						isBorderBox,
						styles
					) :
					0;
&amp;nbsp;
			// Account for unreliable border-box dimensions by comparing offset* to computed and
			// faking a content-box to get border and padding (gh-3699)
			if ( isBorderBox &amp;amp;&amp;amp; scrollboxSizeBuggy ) {
				subtract -= Math.ceil(
					elem[ &amp;quot;offset&amp;quot; + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
					parseFloat( styles[ dimension ] ) -
					boxModelAdjustment( elem, dimension, &amp;quot;border&amp;quot;, false, styles ) -
					0.5
				);
			}
&amp;nbsp;
			// Convert to pixels if value adjustment is needed
			if ( subtract &amp;amp;&amp;amp; ( matches = rcssNum.exec( value ) ) &amp;amp;&amp;amp;
				( matches[ 3 ] || &amp;quot;px&amp;quot; ) !== &amp;quot;px&amp;quot; ) {
&amp;nbsp;
				elem.style[ dimension ] = value;
				value = jQuery.css( elem, dimension );
			}
&amp;nbsp;
			return setPositiveNumber( elem, value, subtract );
		}
	};
} );
&amp;nbsp;
jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
	function( elem, computed ) {
		if ( computed ) {
			return ( parseFloat( curCSS( elem, &amp;quot;marginLeft&amp;quot; ) ) ||
				elem.getBoundingClientRect().left -
					swap( elem, { marginLeft: 0 }, function() {
						return elem.getBoundingClientRect().left;
					} )
			) + &amp;quot;px&amp;quot;;
		}
	}
);
&amp;nbsp;
// These hooks are used by animate to expand properties
jQuery.each( {
	margin: &amp;quot;&amp;quot;,
	padding: &amp;quot;&amp;quot;,
	border: &amp;quot;Width&amp;quot;
}, function( prefix, suffix ) {
	jQuery.cssHooks[ prefix + suffix ] = {
		expand: function( value ) {
			var i = 0,
				expanded = {},
&amp;nbsp;
				// Assumes a single number if not a string
				parts = typeof value === &amp;quot;string&amp;quot; ? value.split( &amp;quot; &amp;quot; ) : [ value ];
&amp;nbsp;
			for ( ; i &amp;lt; 4; i++ ) {
				expanded[ prefix + cssExpand[ i ] + suffix ] =
					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
			}
&amp;nbsp;
			return expanded;
		}
	};
&amp;nbsp;
	if ( prefix !== &amp;quot;margin&amp;quot; ) {
		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
	}
} );
&amp;nbsp;
jQuery.fn.extend( {
	css: function( name, value ) {
		return access( this, function( elem, name, value ) {
			var styles, len,
				map = {},
				i = 0;
&amp;nbsp;
			if ( Array.isArray( name ) ) {
				styles = getStyles( elem );
				len = name.length;
&amp;nbsp;
				for ( ; i &amp;lt; len; i++ ) {
					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
				}
&amp;nbsp;
				return map;
			}
&amp;nbsp;
			return value !== undefined ?
				jQuery.style( elem, name, value ) :
				jQuery.css( elem, name );
		}, name, value, arguments.length &amp;gt; 1 );
	}
} );
&amp;nbsp;
&amp;nbsp;
function Tween( elem, options, prop, end, easing ) {
	return new Tween.prototype.init( elem, options, prop, end, easing );
}
jQuery.Tween = Tween;
&amp;nbsp;
Tween.prototype = {
	constructor: Tween,
	init: function( elem, options, prop, end, easing, unit ) {
		this.elem = elem;
		this.prop = prop;
		this.easing = easing || jQuery.easing._default;
		this.options = options;
		this.start = this.now = this.cur();
		this.end = end;
		this.unit = unit || ( jQuery.cssNumber[ prop ] ? &amp;quot;&amp;quot; : &amp;quot;px&amp;quot; );
	},
	cur: function() {
		var hooks = Tween.propHooks[ this.prop ];
&amp;nbsp;
		return hooks &amp;amp;&amp;amp; hooks.get ?
			hooks.get( this ) :
			Tween.propHooks._default.get( this );
	},
	run: function( percent ) {
		var eased,
			hooks = Tween.propHooks[ this.prop ];
&amp;nbsp;
		if ( this.options.duration ) {
			this.pos = eased = jQuery.easing[ this.easing ](
				percent, this.options.duration * percent, 0, 1, this.options.duration
			);
		} else {
			this.pos = eased = percent;
		}
		this.now = ( this.end - this.start ) * eased + this.start;
&amp;nbsp;
		if ( this.options.step ) {
			this.options.step.call( this.elem, this.now, this );
		}
&amp;nbsp;
		if ( hooks &amp;amp;&amp;amp; hooks.set ) {
			hooks.set( this );
		} else {
			Tween.propHooks._default.set( this );
		}
		return this;
	}
};
&amp;nbsp;
Tween.prototype.init.prototype = Tween.prototype;
&amp;nbsp;
Tween.propHooks = {
	_default: {
		get: function( tween ) {
			var result;
&amp;nbsp;
			// Use a property on the element directly when it is not a DOM element,
			// or when there is no matching style property that exists.
			if ( tween.elem.nodeType !== 1 ||
				tween.elem[ tween.prop ] != null &amp;amp;&amp;amp; tween.elem.style[ tween.prop ] == null ) {
				return tween.elem[ tween.prop ];
			}
&amp;nbsp;
			// Passing an empty string as a 3rd parameter to .css will automatically
			// attempt a parseFloat and fallback to a string if the parse fails.
			// Simple values such as &amp;quot;10px&amp;quot; are parsed to Float;
			// complex values such as &amp;quot;rotate(1rad)&amp;quot; are returned as-is.
			result = jQuery.css( tween.elem, tween.prop, &amp;quot;&amp;quot; );
&amp;nbsp;
			// Empty strings, null, undefined and &amp;quot;auto&amp;quot; are converted to 0.
			return !result || result === &amp;quot;auto&amp;quot; ? 0 : result;
		},
		set: function( tween ) {
&amp;nbsp;
			// Use step hook for back compat.
			// Use cssHook if its there.
			// Use .style if available and use plain properties where available.
			if ( jQuery.fx.step[ tween.prop ] ) {
				jQuery.fx.step[ tween.prop ]( tween );
			} else if ( tween.elem.nodeType === 1 &amp;amp;&amp;amp; (
				jQuery.cssHooks[ tween.prop ] ||
					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
			} else {
				tween.elem[ tween.prop ] = tween.now;
			}
		}
	}
};
&amp;nbsp;
// Support: IE &amp;lt;=9 only
// Panic based approach to setting things on disconnected nodes
Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
	set: function( tween ) {
		if ( tween.elem.nodeType &amp;amp;&amp;amp; tween.elem.parentNode ) {
			tween.elem[ tween.prop ] = tween.now;
		}
	}
};
&amp;nbsp;
jQuery.easing = {
	linear: function( p ) {
		return p;
	},
	swing: function( p ) {
		return 0.5 - Math.cos( p * Math.PI ) / 2;
	},
	_default: &amp;quot;swing&amp;quot;
};
&amp;nbsp;
jQuery.fx = Tween.prototype.init;
&amp;nbsp;
// Back compat &amp;lt;1.8 extension point
jQuery.fx.step = {};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
var
	fxNow, inProgress,
	rfxtypes = /^(?:toggle|show|hide)$/,
	rrun = /queueHooks$/;
&amp;nbsp;
function schedule() {
	if ( inProgress ) {
		if ( document.hidden === false &amp;amp;&amp;amp; window.requestAnimationFrame ) {
			window.requestAnimationFrame( schedule );
		} else {
			window.setTimeout( schedule, jQuery.fx.interval );
		}
&amp;nbsp;
		jQuery.fx.tick();
	}
}
&amp;nbsp;
// Animations created synchronously will run synchronously
function createFxNow() {
	window.setTimeout( function() {
		fxNow = undefined;
	} );
	return ( fxNow = Date.now() );
}
&amp;nbsp;
// Generate parameters to create a standard animation
function genFx( type, includeWidth ) {
	var which,
		i = 0,
		attrs = { height: type };
&amp;nbsp;
	// If we include width, step value is 1 to do all cssExpand values,
	// otherwise step value is 2 to skip over Left and Right
	includeWidth = includeWidth ? 1 : 0;
	for ( ; i &amp;lt; 4; i += 2 - includeWidth ) {
		which = cssExpand[ i ];
		attrs[ &amp;quot;margin&amp;quot; + which ] = attrs[ &amp;quot;padding&amp;quot; + which ] = type;
	}
&amp;nbsp;
	if ( includeWidth ) {
		attrs.opacity = attrs.width = type;
	}
&amp;nbsp;
	return attrs;
}
&amp;nbsp;
function createTween( value, prop, animation ) {
	var tween,
		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ &amp;quot;*&amp;quot; ] ),
		index = 0,
		length = collection.length;
	for ( ; index &amp;lt; length; index++ ) {
		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
&amp;nbsp;
			// We&#039;re done with this property
			return tween;
		}
	}
}
&amp;nbsp;
function defaultPrefilter( elem, props, opts ) {
	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
		isBox = &amp;quot;width&amp;quot; in props || &amp;quot;height&amp;quot; in props,
		anim = this,
		orig = {},
		style = elem.style,
		hidden = elem.nodeType &amp;amp;&amp;amp; isHiddenWithinTree( elem ),
		dataShow = dataPriv.get( elem, &amp;quot;fxshow&amp;quot; );
&amp;nbsp;
	// Queue-skipping animations hijack the fx hooks
	if ( !opts.queue ) {
		hooks = jQuery._queueHooks( elem, &amp;quot;fx&amp;quot; );
		if ( hooks.unqueued == null ) {
			hooks.unqueued = 0;
			oldfire = hooks.empty.fire;
			hooks.empty.fire = function() {
				if ( !hooks.unqueued ) {
					oldfire();
				}
			};
		}
		hooks.unqueued++;
&amp;nbsp;
		anim.always( function() {
&amp;nbsp;
			// Ensure the complete handler is called before this completes
			anim.always( function() {
				hooks.unqueued--;
				if ( !jQuery.queue( elem, &amp;quot;fx&amp;quot; ).length ) {
					hooks.empty.fire();
				}
			} );
		} );
	}
&amp;nbsp;
	// Detect show/hide animations
	for ( prop in props ) {
		value = props[ prop ];
		if ( rfxtypes.test( value ) ) {
			delete props[ prop ];
			toggle = toggle || value === &amp;quot;toggle&amp;quot;;
			if ( value === ( hidden ? &amp;quot;hide&amp;quot; : &amp;quot;show&amp;quot; ) ) {
&amp;nbsp;
				// Pretend to be hidden if this is a &amp;quot;show&amp;quot; and
				// there is still data from a stopped show/hide
				if ( value === &amp;quot;show&amp;quot; &amp;amp;&amp;amp; dataShow &amp;amp;&amp;amp; dataShow[ prop ] !== undefined ) {
					hidden = true;
&amp;nbsp;
				// Ignore all other no-op show/hide data
				} else {
					continue;
				}
			}
			orig[ prop ] = dataShow &amp;amp;&amp;amp; dataShow[ prop ] || jQuery.style( elem, prop );
		}
	}
&amp;nbsp;
	// Bail out if this is a no-op like .hide().hide()
	propTween = !jQuery.isEmptyObject( props );
	if ( !propTween &amp;amp;&amp;amp; jQuery.isEmptyObject( orig ) ) {
		return;
	}
&amp;nbsp;
	// Restrict &amp;quot;overflow&amp;quot; and &amp;quot;display&amp;quot; styles during box animations
	if ( isBox &amp;amp;&amp;amp; elem.nodeType === 1 ) {
&amp;nbsp;
		// Support: IE &amp;lt;=9 - 11, Edge 12 - 15
		// Record all 3 overflow attributes because IE does not infer the shorthand
		// from identically-valued overflowX and overflowY and Edge just mirrors
		// the overflowX value there.
		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
&amp;nbsp;
		// Identify a display type, preferring old show/hide data over the CSS cascade
		restoreDisplay = dataShow &amp;amp;&amp;amp; dataShow.display;
		if ( restoreDisplay == null ) {
			restoreDisplay = dataPriv.get( elem, &amp;quot;display&amp;quot; );
		}
		display = jQuery.css( elem, &amp;quot;display&amp;quot; );
		if ( display === &amp;quot;none&amp;quot; ) {
			if ( restoreDisplay ) {
				display = restoreDisplay;
			} else {
&amp;nbsp;
				// Get nonempty value(s) by temporarily forcing visibility
				showHide( [ elem ], true );
				restoreDisplay = elem.style.display || restoreDisplay;
				display = jQuery.css( elem, &amp;quot;display&amp;quot; );
				showHide( [ elem ] );
			}
		}
&amp;nbsp;
		// Animate inline elements as inline-block
		if ( display === &amp;quot;inline&amp;quot; || display === &amp;quot;inline-block&amp;quot; &amp;amp;&amp;amp; restoreDisplay != null ) {
			if ( jQuery.css( elem, &amp;quot;float&amp;quot; ) === &amp;quot;none&amp;quot; ) {
&amp;nbsp;
				// Restore the original display value at the end of pure show/hide animations
				if ( !propTween ) {
					anim.done( function() {
						style.display = restoreDisplay;
					} );
					if ( restoreDisplay == null ) {
						display = style.display;
						restoreDisplay = display === &amp;quot;none&amp;quot; ? &amp;quot;&amp;quot; : display;
					}
				}
				style.display = &amp;quot;inline-block&amp;quot;;
			}
		}
	}
&amp;nbsp;
	if ( opts.overflow ) {
		style.overflow = &amp;quot;hidden&amp;quot;;
		anim.always( function() {
			style.overflow = opts.overflow[ 0 ];
			style.overflowX = opts.overflow[ 1 ];
			style.overflowY = opts.overflow[ 2 ];
		} );
	}
&amp;nbsp;
	// Implement show/hide animations
	propTween = false;
	for ( prop in orig ) {
&amp;nbsp;
		// General show/hide setup for this element animation
		if ( !propTween ) {
			if ( dataShow ) {
				if ( &amp;quot;hidden&amp;quot; in dataShow ) {
					hidden = dataShow.hidden;
				}
			} else {
				dataShow = dataPriv.access( elem, &amp;quot;fxshow&amp;quot;, { display: restoreDisplay } );
			}
&amp;nbsp;
			// Store hidden/visible for toggle so `.stop().toggle()` &amp;quot;reverses&amp;quot;
			if ( toggle ) {
				dataShow.hidden = !hidden;
			}
&amp;nbsp;
			// Show elements before animating them
			if ( hidden ) {
				showHide( [ elem ], true );
			}
&amp;nbsp;
			/* eslint-disable no-loop-func */
&amp;nbsp;
			anim.done( function() {
&amp;nbsp;
				/* eslint-enable no-loop-func */
&amp;nbsp;
				// The final step of a &amp;quot;hide&amp;quot; animation is actually hiding the element
				if ( !hidden ) {
					showHide( [ elem ] );
				}
				dataPriv.remove( elem, &amp;quot;fxshow&amp;quot; );
				for ( prop in orig ) {
					jQuery.style( elem, prop, orig[ prop ] );
				}
			} );
		}
&amp;nbsp;
		// Per-property setup
		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
		if ( !( prop in dataShow ) ) {
			dataShow[ prop ] = propTween.start;
			if ( hidden ) {
				propTween.end = propTween.start;
				propTween.start = 0;
			}
		}
	}
}
&amp;nbsp;
function propFilter( props, specialEasing ) {
	var index, name, easing, value, hooks;
&amp;nbsp;
	// camelCase, specialEasing and expand cssHook pass
	for ( index in props ) {
		name = camelCase( index );
		easing = specialEasing[ name ];
		value = props[ index ];
		if ( Array.isArray( value ) ) {
			easing = value[ 1 ];
			value = props[ index ] = value[ 0 ];
		}
&amp;nbsp;
		if ( index !== name ) {
			props[ name ] = value;
			delete props[ index ];
		}
&amp;nbsp;
		hooks = jQuery.cssHooks[ name ];
		if ( hooks &amp;amp;&amp;amp; &amp;quot;expand&amp;quot; in hooks ) {
			value = hooks.expand( value );
			delete props[ name ];
&amp;nbsp;
			// Not quite $.extend, this won&#039;t overwrite existing keys.
			// Reusing &#039;index&#039; because we have the correct &amp;quot;name&amp;quot;
			for ( index in value ) {
				if ( !( index in props ) ) {
					props[ index ] = value[ index ];
					specialEasing[ index ] = easing;
				}
			}
		} else {
			specialEasing[ name ] = easing;
		}
	}
}
&amp;nbsp;
function Animation( elem, properties, options ) {
	var result,
		stopped,
		index = 0,
		length = Animation.prefilters.length,
		deferred = jQuery.Deferred().always( function() {
&amp;nbsp;
			// Don&#039;t match elem in the :animated selector
			delete tick.elem;
		} ),
		tick = function() {
			if ( stopped ) {
				return false;
			}
			var currentTime = fxNow || createFxNow(),
				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
&amp;nbsp;
				// Support: Android 2.3 only
				// Archaic crash bug won&#039;t allow us to use `1 - ( 0.5 || 0 )` (trac-12497)
				temp = remaining / animation.duration || 0,
				percent = 1 - temp,
				index = 0,
				length = animation.tweens.length;
&amp;nbsp;
			for ( ; index &amp;lt; length; index++ ) {
				animation.tweens[ index ].run( percent );
			}
&amp;nbsp;
			deferred.notifyWith( elem, [ animation, percent, remaining ] );
&amp;nbsp;
			// If there&#039;s more to do, yield
			if ( percent &amp;lt; 1 &amp;amp;&amp;amp; length ) {
				return remaining;
			}
&amp;nbsp;
			// If this was an empty animation, synthesize a final progress notification
			if ( !length ) {
				deferred.notifyWith( elem, [ animation, 1, 0 ] );
			}
&amp;nbsp;
			// Resolve the animation and report its conclusion
			deferred.resolveWith( elem, [ animation ] );
			return false;
		},
		animation = deferred.promise( {
			elem: elem,
			props: jQuery.extend( {}, properties ),
			opts: jQuery.extend( true, {
				specialEasing: {},
				easing: jQuery.easing._default
			}, options ),
			originalProperties: properties,
			originalOptions: options,
			startTime: fxNow || createFxNow(),
			duration: options.duration,
			tweens: [],
			createTween: function( prop, end ) {
				var tween = jQuery.Tween( elem, animation.opts, prop, end,
					animation.opts.specialEasing[ prop ] || animation.opts.easing );
				animation.tweens.push( tween );
				return tween;
			},
			stop: function( gotoEnd ) {
				var index = 0,
&amp;nbsp;
					// If we are going to the end, we want to run all the tweens
					// otherwise we skip this part
					length = gotoEnd ? animation.tweens.length : 0;
				if ( stopped ) {
					return this;
				}
				stopped = true;
				for ( ; index &amp;lt; length; index++ ) {
					animation.tweens[ index ].run( 1 );
				}
&amp;nbsp;
				// Resolve when we played the last frame; otherwise, reject
				if ( gotoEnd ) {
					deferred.notifyWith( elem, [ animation, 1, 0 ] );
					deferred.resolveWith( elem, [ animation, gotoEnd ] );
				} else {
					deferred.rejectWith( elem, [ animation, gotoEnd ] );
				}
				return this;
			}
		} ),
		props = animation.props;
&amp;nbsp;
	propFilter( props, animation.opts.specialEasing );
&amp;nbsp;
	for ( ; index &amp;lt; length; index++ ) {
		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
		if ( result ) {
			if ( isFunction( result.stop ) ) {
				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
					result.stop.bind( result );
			}
			return result;
		}
	}
&amp;nbsp;
	jQuery.map( props, createTween, animation );
&amp;nbsp;
	if ( isFunction( animation.opts.start ) ) {
		animation.opts.start.call( elem, animation );
	}
&amp;nbsp;
	// Attach callbacks from options
	animation
		.progress( animation.opts.progress )
		.done( animation.opts.done, animation.opts.complete )
		.fail( animation.opts.fail )
		.always( animation.opts.always );
&amp;nbsp;
	jQuery.fx.timer(
		jQuery.extend( tick, {
			elem: elem,
			anim: animation,
			queue: animation.opts.queue
		} )
	);
&amp;nbsp;
	return animation;
}
&amp;nbsp;
jQuery.Animation = jQuery.extend( Animation, {
&amp;nbsp;
	tweeners: {
		&amp;quot;*&amp;quot;: [ function( prop, value ) {
			var tween = this.createTween( prop, value );
			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
			return tween;
		} ]
	},
&amp;nbsp;
	tweener: function( props, callback ) {
		if ( isFunction( props ) ) {
			callback = props;
			props = [ &amp;quot;*&amp;quot; ];
		} else {
			props = props.match( rnothtmlwhite );
		}
&amp;nbsp;
		var prop,
			index = 0,
			length = props.length;
&amp;nbsp;
		for ( ; index &amp;lt; length; index++ ) {
			prop = props[ index ];
			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
			Animation.tweeners[ prop ].unshift( callback );
		}
	},
&amp;nbsp;
	prefilters: [ defaultPrefilter ],
&amp;nbsp;
	prefilter: function( callback, prepend ) {
		if ( prepend ) {
			Animation.prefilters.unshift( callback );
		} else {
			Animation.prefilters.push( callback );
		}
	}
} );
&amp;nbsp;
jQuery.speed = function( speed, easing, fn ) {
	var opt = speed &amp;amp;&amp;amp; typeof speed === &amp;quot;object&amp;quot; ? jQuery.extend( {}, speed ) : {
		complete: fn || !fn &amp;amp;&amp;amp; easing ||
			isFunction( speed ) &amp;amp;&amp;amp; speed,
		duration: speed,
		easing: fn &amp;amp;&amp;amp; easing || easing &amp;amp;&amp;amp; !isFunction( easing ) &amp;amp;&amp;amp; easing
	};
&amp;nbsp;
	// Go to the end state if fx are off
	if ( jQuery.fx.off ) {
		opt.duration = 0;
&amp;nbsp;
	} else {
		if ( typeof opt.duration !== &amp;quot;number&amp;quot; ) {
			if ( opt.duration in jQuery.fx.speeds ) {
				opt.duration = jQuery.fx.speeds[ opt.duration ];
&amp;nbsp;
			} else {
				opt.duration = jQuery.fx.speeds._default;
			}
		}
	}
&amp;nbsp;
	// Normalize opt.queue - true/undefined/null -&amp;gt; &amp;quot;fx&amp;quot;
	if ( opt.queue == null || opt.queue === true ) {
		opt.queue = &amp;quot;fx&amp;quot;;
	}
&amp;nbsp;
	// Queueing
	opt.old = opt.complete;
&amp;nbsp;
	opt.complete = function() {
		if ( isFunction( opt.old ) ) {
			opt.old.call( this );
		}
&amp;nbsp;
		if ( opt.queue ) {
			jQuery.dequeue( this, opt.queue );
		}
	};
&amp;nbsp;
	return opt;
};
&amp;nbsp;
jQuery.fn.extend( {
	fadeTo: function( speed, to, easing, callback ) {
&amp;nbsp;
		// Show any hidden elements after setting opacity to 0
		return this.filter( isHiddenWithinTree ).css( &amp;quot;opacity&amp;quot;, 0 ).show()
&amp;nbsp;
			// Animate to the value specified
			.end().animate( { opacity: to }, speed, easing, callback );
	},
	animate: function( prop, speed, easing, callback ) {
		var empty = jQuery.isEmptyObject( prop ),
			optall = jQuery.speed( speed, easing, callback ),
			doAnimation = function() {
&amp;nbsp;
				// Operate on a copy of prop so per-property easing won&#039;t be lost
				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
&amp;nbsp;
				// Empty animations, or finishing resolves immediately
				if ( empty || dataPriv.get( this, &amp;quot;finish&amp;quot; ) ) {
					anim.stop( true );
				}
			};
&amp;nbsp;
		doAnimation.finish = doAnimation;
&amp;nbsp;
		return empty || optall.queue === false ?
			this.each( doAnimation ) :
			this.queue( optall.queue, doAnimation );
	},
	stop: function( type, clearQueue, gotoEnd ) {
		var stopQueue = function( hooks ) {
			var stop = hooks.stop;
			delete hooks.stop;
			stop( gotoEnd );
		};
&amp;nbsp;
		if ( typeof type !== &amp;quot;string&amp;quot; ) {
			gotoEnd = clearQueue;
			clearQueue = type;
			type = undefined;
		}
		if ( clearQueue ) {
			this.queue( type || &amp;quot;fx&amp;quot;, [] );
		}
&amp;nbsp;
		return this.each( function() {
			var dequeue = true,
				index = type != null &amp;amp;&amp;amp; type + &amp;quot;queueHooks&amp;quot;,
				timers = jQuery.timers,
				data = dataPriv.get( this );
&amp;nbsp;
			if ( index ) {
				if ( data[ index ] &amp;amp;&amp;amp; data[ index ].stop ) {
					stopQueue( data[ index ] );
				}
			} else {
				for ( index in data ) {
					if ( data[ index ] &amp;amp;&amp;amp; data[ index ].stop &amp;amp;&amp;amp; rrun.test( index ) ) {
						stopQueue( data[ index ] );
					}
				}
			}
&amp;nbsp;
			for ( index = timers.length; index--; ) {
				if ( timers[ index ].elem === this &amp;amp;&amp;amp;
					( type == null || timers[ index ].queue === type ) ) {
&amp;nbsp;
					timers[ index ].anim.stop( gotoEnd );
					dequeue = false;
					timers.splice( index, 1 );
				}
			}
&amp;nbsp;
			// Start the next in the queue if the last step wasn&#039;t forced.
			// Timers currently will call their complete callbacks, which
			// will dequeue but only if they were gotoEnd.
			if ( dequeue || !gotoEnd ) {
				jQuery.dequeue( this, type );
			}
		} );
	},
	finish: function( type ) {
		if ( type !== false ) {
			type = type || &amp;quot;fx&amp;quot;;
		}
		return this.each( function() {
			var index,
				data = dataPriv.get( this ),
				queue = data[ type + &amp;quot;queue&amp;quot; ],
				hooks = data[ type + &amp;quot;queueHooks&amp;quot; ],
				timers = jQuery.timers,
				length = queue ? queue.length : 0;
&amp;nbsp;
			// Enable finishing flag on private data
			data.finish = true;
&amp;nbsp;
			// Empty the queue first
			jQuery.queue( this, type, [] );
&amp;nbsp;
			if ( hooks &amp;amp;&amp;amp; hooks.stop ) {
				hooks.stop.call( this, true );
			}
&amp;nbsp;
			// Look for any active animations, and finish them
			for ( index = timers.length; index--; ) {
				if ( timers[ index ].elem === this &amp;amp;&amp;amp; timers[ index ].queue === type ) {
					timers[ index ].anim.stop( true );
					timers.splice( index, 1 );
				}
			}
&amp;nbsp;
			// Look for any animations in the old queue and finish them
			for ( index = 0; index &amp;lt; length; index++ ) {
				if ( queue[ index ] &amp;amp;&amp;amp; queue[ index ].finish ) {
					queue[ index ].finish.call( this );
				}
			}
&amp;nbsp;
			// Turn off finishing flag
			delete data.finish;
		} );
	}
} );
&amp;nbsp;
jQuery.each( [ &amp;quot;toggle&amp;quot;, &amp;quot;show&amp;quot;, &amp;quot;hide&amp;quot; ], function( _i, name ) {
	var cssFn = jQuery.fn[ name ];
	jQuery.fn[ name ] = function( speed, easing, callback ) {
		return speed == null || typeof speed === &amp;quot;boolean&amp;quot; ?
			cssFn.apply( this, arguments ) :
			this.animate( genFx( name, true ), speed, easing, callback );
	};
} );
&amp;nbsp;
// Generate shortcuts for custom animations
jQuery.each( {
	slideDown: genFx( &amp;quot;show&amp;quot; ),
	slideUp: genFx( &amp;quot;hide&amp;quot; ),
	slideToggle: genFx( &amp;quot;toggle&amp;quot; ),
	fadeIn: { opacity: &amp;quot;show&amp;quot; },
	fadeOut: { opacity: &amp;quot;hide&amp;quot; },
	fadeToggle: { opacity: &amp;quot;toggle&amp;quot; }
}, function( name, props ) {
	jQuery.fn[ name ] = function( speed, easing, callback ) {
		return this.animate( props, speed, easing, callback );
	};
} );
&amp;nbsp;
jQuery.timers = [];
jQuery.fx.tick = function() {
	var timer,
		i = 0,
		timers = jQuery.timers;
&amp;nbsp;
	fxNow = Date.now();
&amp;nbsp;
	for ( ; i &amp;lt; timers.length; i++ ) {
		timer = timers[ i ];
&amp;nbsp;
		// Run the timer and safely remove it when done (allowing for external removal)
		if ( !timer() &amp;amp;&amp;amp; timers[ i ] === timer ) {
			timers.splice( i--, 1 );
		}
	}
&amp;nbsp;
	if ( !timers.length ) {
		jQuery.fx.stop();
	}
	fxNow = undefined;
};
&amp;nbsp;
jQuery.fx.timer = function( timer ) {
	jQuery.timers.push( timer );
	jQuery.fx.start();
};
&amp;nbsp;
jQuery.fx.interval = 13;
jQuery.fx.start = function() {
	if ( inProgress ) {
		return;
	}
&amp;nbsp;
	inProgress = true;
	schedule();
};
&amp;nbsp;
jQuery.fx.stop = function() {
	inProgress = null;
};
&amp;nbsp;
jQuery.fx.speeds = {
	slow: 600,
	fast: 200,
&amp;nbsp;
	// Default speed
	_default: 400
};
&amp;nbsp;
&amp;nbsp;
// Based off of the plugin by Clint Helfers, with permission.
jQuery.fn.delay = function( time, type ) {
	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
	type = type || &amp;quot;fx&amp;quot;;
&amp;nbsp;
	return this.queue( type, function( next, hooks ) {
		var timeout = window.setTimeout( next, time );
		hooks.stop = function() {
			window.clearTimeout( timeout );
		};
	} );
};
&amp;nbsp;
&amp;nbsp;
( function() {
	var input = document.createElement( &amp;quot;input&amp;quot; ),
		select = document.createElement( &amp;quot;select&amp;quot; ),
		opt = select.appendChild( document.createElement( &amp;quot;option&amp;quot; ) );
&amp;nbsp;
	input.type = &amp;quot;checkbox&amp;quot;;
&amp;nbsp;
	// Support: Android &amp;lt;=4.3 only
	// Default value for a checkbox should be &amp;quot;on&amp;quot;
	support.checkOn = input.value !== &amp;quot;&amp;quot;;
&amp;nbsp;
	// Support: IE &amp;lt;=11 only
	// Must access selectedIndex to make default options select
	support.optSelected = opt.selected;
&amp;nbsp;
	// Support: IE &amp;lt;=11 only
	// An input loses its value after becoming a radio
	input = document.createElement( &amp;quot;input&amp;quot; );
	input.value = &amp;quot;t&amp;quot;;
	input.type = &amp;quot;radio&amp;quot;;
	support.radioValue = input.value === &amp;quot;t&amp;quot;;
} )();
&amp;nbsp;
&amp;nbsp;
var boolHook,
	attrHandle = jQuery.expr.attrHandle;
&amp;nbsp;
jQuery.fn.extend( {
	attr: function( name, value ) {
		return access( this, jQuery.attr, name, value, arguments.length &amp;gt; 1 );
	},
&amp;nbsp;
	removeAttr: function( name ) {
		return this.each( function() {
			jQuery.removeAttr( this, name );
		} );
	}
} );
&amp;nbsp;
jQuery.extend( {
	attr: function( elem, name, value ) {
		var ret, hooks,
			nType = elem.nodeType;
&amp;nbsp;
		// Don&#039;t get/set attributes on text, comment and attribute nodes
		if ( nType === 3 || nType === 8 || nType === 2 ) {
			return;
		}
&amp;nbsp;
		// Fallback to prop when attributes are not supported
		if ( typeof elem.getAttribute === &amp;quot;undefined&amp;quot; ) {
			return jQuery.prop( elem, name, value );
		}
&amp;nbsp;
		// Attribute hooks are determined by the lowercase version
		// Grab necessary hook if one is defined
		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
		}
&amp;nbsp;
		if ( value !== undefined ) {
			if ( value === null ) {
				jQuery.removeAttr( elem, name );
				return;
			}
&amp;nbsp;
			if ( hooks &amp;amp;&amp;amp; &amp;quot;set&amp;quot; in hooks &amp;amp;&amp;amp;
				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
				return ret;
			}
&amp;nbsp;
			elem.setAttribute( name, value + &amp;quot;&amp;quot; );
			return value;
		}
&amp;nbsp;
		if ( hooks &amp;amp;&amp;amp; &amp;quot;get&amp;quot; in hooks &amp;amp;&amp;amp; ( ret = hooks.get( elem, name ) ) !== null ) {
			return ret;
		}
&amp;nbsp;
		ret = jQuery.find.attr( elem, name );
&amp;nbsp;
		// Non-existent attributes return null, we normalize to undefined
		return ret == null ? undefined : ret;
	},
&amp;nbsp;
	attrHooks: {
		type: {
			set: function( elem, value ) {
				if ( !support.radioValue &amp;amp;&amp;amp; value === &amp;quot;radio&amp;quot; &amp;amp;&amp;amp;
					nodeName( elem, &amp;quot;input&amp;quot; ) ) {
					var val = elem.value;
					elem.setAttribute( &amp;quot;type&amp;quot;, value );
					if ( val ) {
						elem.value = val;
					}
					return value;
				}
			}
		}
	},
&amp;nbsp;
	removeAttr: function( elem, value ) {
		var name,
			i = 0,
&amp;nbsp;
			// Attribute names can contain non-HTML whitespace characters
			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
			attrNames = value &amp;amp;&amp;amp; value.match( rnothtmlwhite );
&amp;nbsp;
		if ( attrNames &amp;amp;&amp;amp; elem.nodeType === 1 ) {
			while ( ( name = attrNames[ i++ ] ) ) {
				elem.removeAttribute( name );
			}
		}
	}
} );
&amp;nbsp;
// Hooks for boolean attributes
boolHook = {
	set: function( elem, value, name ) {
		if ( value === false ) {
&amp;nbsp;
			// Remove boolean attributes when set to false
			jQuery.removeAttr( elem, name );
		} else {
			elem.setAttribute( name, name );
		}
		return name;
	}
};
&amp;nbsp;
jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
	var getter = attrHandle[ name ] || jQuery.find.attr;
&amp;nbsp;
	attrHandle[ name ] = function( elem, name, isXML ) {
		var ret, handle,
			lowercaseName = name.toLowerCase();
&amp;nbsp;
		if ( !isXML ) {
&amp;nbsp;
			// Avoid an infinite loop by temporarily removing this function from the getter
			handle = attrHandle[ lowercaseName ];
			attrHandle[ lowercaseName ] = ret;
			ret = getter( elem, name, isXML ) != null ?
				lowercaseName :
				null;
			attrHandle[ lowercaseName ] = handle;
		}
		return ret;
	};
} );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
var rfocusable = /^(?:input|select|textarea|button)$/i,
	rclickable = /^(?:a|area)$/i;
&amp;nbsp;
jQuery.fn.extend( {
	prop: function( name, value ) {
		return access( this, jQuery.prop, name, value, arguments.length &amp;gt; 1 );
	},
&amp;nbsp;
	removeProp: function( name ) {
		return this.each( function() {
			delete this[ jQuery.propFix[ name ] || name ];
		} );
	}
} );
&amp;nbsp;
jQuery.extend( {
	prop: function( elem, name, value ) {
		var ret, hooks,
			nType = elem.nodeType;
&amp;nbsp;
		// Don&#039;t get/set properties on text, comment and attribute nodes
		if ( nType === 3 || nType === 8 || nType === 2 ) {
			return;
		}
&amp;nbsp;
		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
&amp;nbsp;
			// Fix name and attach hooks
			name = jQuery.propFix[ name ] || name;
			hooks = jQuery.propHooks[ name ];
		}
&amp;nbsp;
		if ( value !== undefined ) {
			if ( hooks &amp;amp;&amp;amp; &amp;quot;set&amp;quot; in hooks &amp;amp;&amp;amp;
				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
				return ret;
			}
&amp;nbsp;
			return ( elem[ name ] = value );
		}
&amp;nbsp;
		if ( hooks &amp;amp;&amp;amp; &amp;quot;get&amp;quot; in hooks &amp;amp;&amp;amp; ( ret = hooks.get( elem, name ) ) !== null ) {
			return ret;
		}
&amp;nbsp;
		return elem[ name ];
	},
&amp;nbsp;
	propHooks: {
		tabIndex: {
			get: function( elem ) {
&amp;nbsp;
				// Support: IE &amp;lt;=9 - 11 only
				// elem.tabIndex doesn&#039;t always return the
				// correct value when it hasn&#039;t been explicitly set
				// Use proper attribute retrieval (trac-12072)
				var tabindex = jQuery.find.attr( elem, &amp;quot;tabindex&amp;quot; );
&amp;nbsp;
				if ( tabindex ) {
					return parseInt( tabindex, 10 );
				}
&amp;nbsp;
				if (
					rfocusable.test( elem.nodeName ) ||
					rclickable.test( elem.nodeName ) &amp;amp;&amp;amp;
					elem.href
				) {
					return 0;
				}
&amp;nbsp;
				return -1;
			}
		}
	},
&amp;nbsp;
	propFix: {
		&amp;quot;for&amp;quot;: &amp;quot;htmlFor&amp;quot;,
		&amp;quot;class&amp;quot;: &amp;quot;className&amp;quot;
	}
} );
&amp;nbsp;
// Support: IE &amp;lt;=11 only
// Accessing the selectedIndex property
// forces the browser to respect setting selected
// on the option
// The getter ensures a default option is selected
// when in an optgroup
// eslint rule &amp;quot;no-unused-expressions&amp;quot; is disabled for this code
// since it considers such accessions noop
if ( !support.optSelected ) {
	jQuery.propHooks.selected = {
		get: function( elem ) {
&amp;nbsp;
			/* eslint no-unused-expressions: &amp;quot;off&amp;quot; */
&amp;nbsp;
			var parent = elem.parentNode;
			if ( parent &amp;amp;&amp;amp; parent.parentNode ) {
				parent.parentNode.selectedIndex;
			}
			return null;
		},
		set: function( elem ) {
&amp;nbsp;
			/* eslint no-unused-expressions: &amp;quot;off&amp;quot; */
&amp;nbsp;
			var parent = elem.parentNode;
			if ( parent ) {
				parent.selectedIndex;
&amp;nbsp;
				if ( parent.parentNode ) {
					parent.parentNode.selectedIndex;
				}
			}
		}
	};
}
&amp;nbsp;
jQuery.each( [
	&amp;quot;tabIndex&amp;quot;,
	&amp;quot;readOnly&amp;quot;,
	&amp;quot;maxLength&amp;quot;,
	&amp;quot;cellSpacing&amp;quot;,
	&amp;quot;cellPadding&amp;quot;,
	&amp;quot;rowSpan&amp;quot;,
	&amp;quot;colSpan&amp;quot;,
	&amp;quot;useMap&amp;quot;,
	&amp;quot;frameBorder&amp;quot;,
	&amp;quot;contentEditable&amp;quot;
], function() {
	jQuery.propFix[ this.toLowerCase() ] = this;
} );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
	// Strip and collapse whitespace according to HTML spec
	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
	function stripAndCollapse( value ) {
		var tokens = value.match( rnothtmlwhite ) || [];
		return tokens.join( &amp;quot; &amp;quot; );
	}
&amp;nbsp;
&amp;nbsp;
function getClass( elem ) {
	return elem.getAttribute &amp;amp;&amp;amp; elem.getAttribute( &amp;quot;class&amp;quot; ) || &amp;quot;&amp;quot;;
}
&amp;nbsp;
function classesToArray( value ) {
	if ( Array.isArray( value ) ) {
		return value;
	}
	if ( typeof value === &amp;quot;string&amp;quot; ) {
		return value.match( rnothtmlwhite ) || [];
	}
	return [];
}
&amp;nbsp;
jQuery.fn.extend( {
	addClass: function( value ) {
		var classNames, cur, curValue, className, i, finalValue;
&amp;nbsp;
		if ( isFunction( value ) ) {
			return this.each( function( j ) {
				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
			} );
		}
&amp;nbsp;
		classNames = classesToArray( value );
&amp;nbsp;
		if ( classNames.length ) {
			return this.each( function() {
				curValue = getClass( this );
				cur = this.nodeType === 1 &amp;amp;&amp;amp; ( &amp;quot; &amp;quot; + stripAndCollapse( curValue ) + &amp;quot; &amp;quot; );
&amp;nbsp;
				if ( cur ) {
					for ( i = 0; i &amp;lt; classNames.length; i++ ) {
						className = classNames[ i ];
						if ( cur.indexOf( &amp;quot; &amp;quot; + className + &amp;quot; &amp;quot; ) &amp;lt; 0 ) {
							cur += className + &amp;quot; &amp;quot;;
						}
					}
&amp;nbsp;
					// Only assign if different to avoid unneeded rendering.
					finalValue = stripAndCollapse( cur );
					if ( curValue !== finalValue ) {
						this.setAttribute( &amp;quot;class&amp;quot;, finalValue );
					}
				}
			} );
		}
&amp;nbsp;
		return this;
	},
&amp;nbsp;
	removeClass: function( value ) {
		var classNames, cur, curValue, className, i, finalValue;
&amp;nbsp;
		if ( isFunction( value ) ) {
			return this.each( function( j ) {
				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
			} );
		}
&amp;nbsp;
		if ( !arguments.length ) {
			return this.attr( &amp;quot;class&amp;quot;, &amp;quot;&amp;quot; );
		}
&amp;nbsp;
		classNames = classesToArray( value );
&amp;nbsp;
		if ( classNames.length ) {
			return this.each( function() {
				curValue = getClass( this );
&amp;nbsp;
				// This expression is here for better compressibility (see addClass)
				cur = this.nodeType === 1 &amp;amp;&amp;amp; ( &amp;quot; &amp;quot; + stripAndCollapse( curValue ) + &amp;quot; &amp;quot; );
&amp;nbsp;
				if ( cur ) {
					for ( i = 0; i &amp;lt; classNames.length; i++ ) {
						className = classNames[ i ];
&amp;nbsp;
						// Remove *all* instances
						while ( cur.indexOf( &amp;quot; &amp;quot; + className + &amp;quot; &amp;quot; ) &amp;gt; -1 ) {
							cur = cur.replace( &amp;quot; &amp;quot; + className + &amp;quot; &amp;quot;, &amp;quot; &amp;quot; );
						}
					}
&amp;nbsp;
					// Only assign if different to avoid unneeded rendering.
					finalValue = stripAndCollapse( cur );
					if ( curValue !== finalValue ) {
						this.setAttribute( &amp;quot;class&amp;quot;, finalValue );
					}
				}
			} );
		}
&amp;nbsp;
		return this;
	},
&amp;nbsp;
	toggleClass: function( value, stateVal ) {
		var classNames, className, i, self,
			type = typeof value,
			isValidValue = type === &amp;quot;string&amp;quot; || Array.isArray( value );
&amp;nbsp;
		if ( isFunction( value ) ) {
			return this.each( function( i ) {
				jQuery( this ).toggleClass(
					value.call( this, i, getClass( this ), stateVal ),
					stateVal
				);
			} );
		}
&amp;nbsp;
		if ( typeof stateVal === &amp;quot;boolean&amp;quot; &amp;amp;&amp;amp; isValidValue ) {
			return stateVal ? this.addClass( value ) : this.removeClass( value );
		}
&amp;nbsp;
		classNames = classesToArray( value );
&amp;nbsp;
		return this.each( function() {
			if ( isValidValue ) {
&amp;nbsp;
				// Toggle individual class names
				self = jQuery( this );
&amp;nbsp;
				for ( i = 0; i &amp;lt; classNames.length; i++ ) {
					className = classNames[ i ];
&amp;nbsp;
					// Check each className given, space separated list
					if ( self.hasClass( className ) ) {
						self.removeClass( className );
					} else {
						self.addClass( className );
					}
				}
&amp;nbsp;
			// Toggle whole class name
			} else if ( value === undefined || type === &amp;quot;boolean&amp;quot; ) {
				className = getClass( this );
				if ( className ) {
&amp;nbsp;
					// Store className if set
					dataPriv.set( this, &amp;quot;__className__&amp;quot;, className );
				}
&amp;nbsp;
				// If the element has a class name or if we&#039;re passed `false`,
				// then remove the whole classname (if there was one, the above saved it).
				// Otherwise bring back whatever was previously saved (if anything),
				// falling back to the empty string if nothing was stored.
				if ( this.setAttribute ) {
					this.setAttribute( &amp;quot;class&amp;quot;,
						className || value === false ?
							&amp;quot;&amp;quot; :
							dataPriv.get( this, &amp;quot;__className__&amp;quot; ) || &amp;quot;&amp;quot;
					);
				}
			}
		} );
	},
&amp;nbsp;
	hasClass: function( selector ) {
		var className, elem,
			i = 0;
&amp;nbsp;
		className = &amp;quot; &amp;quot; + selector + &amp;quot; &amp;quot;;
		while ( ( elem = this[ i++ ] ) ) {
			if ( elem.nodeType === 1 &amp;amp;&amp;amp;
				( &amp;quot; &amp;quot; + stripAndCollapse( getClass( elem ) ) + &amp;quot; &amp;quot; ).indexOf( className ) &amp;gt; -1 ) {
				return true;
			}
		}
&amp;nbsp;
		return false;
	}
} );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
var rreturn = /\r/g;
&amp;nbsp;
jQuery.fn.extend( {
	val: function( value ) {
		var hooks, ret, valueIsFunction,
			elem = this[ 0 ];
&amp;nbsp;
		if ( !arguments.length ) {
			if ( elem ) {
				hooks = jQuery.valHooks[ elem.type ] ||
					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
&amp;nbsp;
				if ( hooks &amp;amp;&amp;amp;
					&amp;quot;get&amp;quot; in hooks &amp;amp;&amp;amp;
					( ret = hooks.get( elem, &amp;quot;value&amp;quot; ) ) !== undefined
				) {
					return ret;
				}
&amp;nbsp;
				ret = elem.value;
&amp;nbsp;
				// Handle most common string cases
				if ( typeof ret === &amp;quot;string&amp;quot; ) {
					return ret.replace( rreturn, &amp;quot;&amp;quot; );
				}
&amp;nbsp;
				// Handle cases where value is null/undef or number
				return ret == null ? &amp;quot;&amp;quot; : ret;
			}
&amp;nbsp;
			return;
		}
&amp;nbsp;
		valueIsFunction = isFunction( value );
&amp;nbsp;
		return this.each( function( i ) {
			var val;
&amp;nbsp;
			if ( this.nodeType !== 1 ) {
				return;
			}
&amp;nbsp;
			if ( valueIsFunction ) {
				val = value.call( this, i, jQuery( this ).val() );
			} else {
				val = value;
			}
&amp;nbsp;
			// Treat null/undefined as &amp;quot;&amp;quot;; convert numbers to string
			if ( val == null ) {
				val = &amp;quot;&amp;quot;;
&amp;nbsp;
			} else if ( typeof val === &amp;quot;number&amp;quot; ) {
				val += &amp;quot;&amp;quot;;
&amp;nbsp;
			} else if ( Array.isArray( val ) ) {
				val = jQuery.map( val, function( value ) {
					return value == null ? &amp;quot;&amp;quot; : value + &amp;quot;&amp;quot;;
				} );
			}
&amp;nbsp;
			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
&amp;nbsp;
			// If set returns undefined, fall back to normal setting
			if ( !hooks || !( &amp;quot;set&amp;quot; in hooks ) || hooks.set( this, val, &amp;quot;value&amp;quot; ) === undefined ) {
				this.value = val;
			}
		} );
	}
} );
&amp;nbsp;
jQuery.extend( {
	valHooks: {
		option: {
			get: function( elem ) {
&amp;nbsp;
				var val = jQuery.find.attr( elem, &amp;quot;value&amp;quot; );
				return val != null ?
					val :
&amp;nbsp;
					// Support: IE &amp;lt;=10 - 11 only
					// option.text throws exceptions (trac-14686, trac-14858)
					// Strip and collapse whitespace
					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
					stripAndCollapse( jQuery.text( elem ) );
			}
		},
		select: {
			get: function( elem ) {
				var value, option, i,
					options = elem.options,
					index = elem.selectedIndex,
					one = elem.type === &amp;quot;select-one&amp;quot;,
					values = one ? null : [],
					max = one ? index + 1 : options.length;
&amp;nbsp;
				if ( index &amp;lt; 0 ) {
					i = max;
&amp;nbsp;
				} else {
					i = one ? index : 0;
				}
&amp;nbsp;
				// Loop through all the selected options
				for ( ; i &amp;lt; max; i++ ) {
					option = options[ i ];
&amp;nbsp;
					// Support: IE &amp;lt;=9 only
					// IE8-9 doesn&#039;t update selected after form reset (trac-2551)
					if ( ( option.selected || i === index ) &amp;amp;&amp;amp;
&amp;nbsp;
							// Don&#039;t return options that are disabled or in a disabled optgroup
							!option.disabled &amp;amp;&amp;amp;
							( !option.parentNode.disabled ||
								!nodeName( option.parentNode, &amp;quot;optgroup&amp;quot; ) ) ) {
&amp;nbsp;
						// Get the specific value for the option
						value = jQuery( option ).val();
&amp;nbsp;
						// We don&#039;t need an array for one selects
						if ( one ) {
							return value;
						}
&amp;nbsp;
						// Multi-Selects return an array
						values.push( value );
					}
				}
&amp;nbsp;
				return values;
			},
&amp;nbsp;
			set: function( elem, value ) {
				var optionSet, option,
					options = elem.options,
					values = jQuery.makeArray( value ),
					i = options.length;
&amp;nbsp;
				while ( i-- ) {
					option = options[ i ];
&amp;nbsp;
					/* eslint-disable no-cond-assign */
&amp;nbsp;
					if ( option.selected =
						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) &amp;gt; -1
					) {
						optionSet = true;
					}
&amp;nbsp;
					/* eslint-enable no-cond-assign */
				}
&amp;nbsp;
				// Force browsers to behave consistently when non-matching value is set
				if ( !optionSet ) {
					elem.selectedIndex = -1;
				}
				return values;
			}
		}
	}
} );
&amp;nbsp;
// Radios and checkboxes getter/setter
jQuery.each( [ &amp;quot;radio&amp;quot;, &amp;quot;checkbox&amp;quot; ], function() {
	jQuery.valHooks[ this ] = {
		set: function( elem, value ) {
			if ( Array.isArray( value ) ) {
				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) &amp;gt; -1 );
			}
		}
	};
	if ( !support.checkOn ) {
		jQuery.valHooks[ this ].get = function( elem ) {
			return elem.getAttribute( &amp;quot;value&amp;quot; ) === null ? &amp;quot;on&amp;quot; : elem.value;
		};
	}
} );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// Return jQuery for attributes-only inclusion
var location = window.location;
&amp;nbsp;
var nonce = { guid: Date.now() };
&amp;nbsp;
var rquery = ( /\?/ );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// Cross-browser xml parsing
jQuery.parseXML = function( data ) {
	var xml, parserErrorElem;
	if ( !data || typeof data !== &amp;quot;string&amp;quot; ) {
		return null;
	}
&amp;nbsp;
	// Support: IE 9 - 11 only
	// IE throws on parseFromString with invalid input.
	try {
		xml = ( new window.DOMParser() ).parseFromString( data, &amp;quot;text/xml&amp;quot; );
	} catch ( e ) {}
&amp;nbsp;
	parserErrorElem = xml &amp;amp;&amp;amp; xml.getElementsByTagName( &amp;quot;parsererror&amp;quot; )[ 0 ];
	if ( !xml || parserErrorElem ) {
		jQuery.error( &amp;quot;Invalid XML: &amp;quot; + (
			parserErrorElem ?
				jQuery.map( parserErrorElem.childNodes, function( el ) {
					return el.textContent;
				} ).join( &amp;quot;\n&amp;quot; ) :
				data
		) );
	}
	return xml;
};
&amp;nbsp;
&amp;nbsp;
var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
	stopPropagationCallback = function( e ) {
		e.stopPropagation();
	};
&amp;nbsp;
jQuery.extend( jQuery.event, {
&amp;nbsp;
	trigger: function( event, data, elem, onlyHandlers ) {
&amp;nbsp;
		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
			eventPath = [ elem || document ],
			type = hasOwn.call( event, &amp;quot;type&amp;quot; ) ? event.type : event,
			namespaces = hasOwn.call( event, &amp;quot;namespace&amp;quot; ) ? event.namespace.split( &amp;quot;.&amp;quot; ) : [];
&amp;nbsp;
		cur = lastElement = tmp = elem = elem || document;
&amp;nbsp;
		// Don&#039;t do events on text and comment nodes
		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
			return;
		}
&amp;nbsp;
		// focus/blur morphs to focusin/out; ensure we&#039;re not firing them right now
		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
			return;
		}
&amp;nbsp;
		if ( type.indexOf( &amp;quot;.&amp;quot; ) &amp;gt; -1 ) {
&amp;nbsp;
			// Namespaced trigger; create a regexp to match event type in handle()
			namespaces = type.split( &amp;quot;.&amp;quot; );
			type = namespaces.shift();
			namespaces.sort();
		}
		ontype = type.indexOf( &amp;quot;:&amp;quot; ) &amp;lt; 0 &amp;amp;&amp;amp; &amp;quot;on&amp;quot; + type;
&amp;nbsp;
		// Caller can pass in a jQuery.Event object, Object, or just an event type string
		event = event[ jQuery.expando ] ?
			event :
			new jQuery.Event( type, typeof event === &amp;quot;object&amp;quot; &amp;amp;&amp;amp; event );
&amp;nbsp;
		// Trigger bitmask: &amp;amp; 1 for native handlers; &amp;amp; 2 for jQuery (always true)
		event.isTrigger = onlyHandlers ? 2 : 3;
		event.namespace = namespaces.join( &amp;quot;.&amp;quot; );
		event.rnamespace = event.namespace ?
			new RegExp( &amp;quot;(^|\\.)&amp;quot; + namespaces.join( &amp;quot;\\.(?:.*\\.|)&amp;quot; ) + &amp;quot;(\\.|$)&amp;quot; ) :
			null;
&amp;nbsp;
		// Clean up the event in case it is being reused
		event.result = undefined;
		if ( !event.target ) {
			event.target = elem;
		}
&amp;nbsp;
		// Clone any incoming data and prepend the event, creating the handler arg list
		data = data == null ?
			[ event ] :
			jQuery.makeArray( data, [ event ] );
&amp;nbsp;
		// Allow special events to draw outside the lines
		special = jQuery.event.special[ type ] || {};
		if ( !onlyHandlers &amp;amp;&amp;amp; special.trigger &amp;amp;&amp;amp; special.trigger.apply( elem, data ) === false ) {
			return;
		}
&amp;nbsp;
		// Determine event propagation path in advance, per W3C events spec (trac-9951)
		// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)
		if ( !onlyHandlers &amp;amp;&amp;amp; !special.noBubble &amp;amp;&amp;amp; !isWindow( elem ) ) {
&amp;nbsp;
			bubbleType = special.delegateType || type;
			if ( !rfocusMorph.test( bubbleType + type ) ) {
				cur = cur.parentNode;
			}
			for ( ; cur; cur = cur.parentNode ) {
				eventPath.push( cur );
				tmp = cur;
			}
&amp;nbsp;
			// Only add window if we got to document (e.g., not plain obj or detached DOM)
			if ( tmp === ( elem.ownerDocument || document ) ) {
				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
			}
		}
&amp;nbsp;
		// Fire handlers on the event path
		i = 0;
		while ( ( cur = eventPath[ i++ ] ) &amp;amp;&amp;amp; !event.isPropagationStopped() ) {
			lastElement = cur;
			event.type = i &amp;gt; 1 ?
				bubbleType :
				special.bindType || type;
&amp;nbsp;
			// jQuery handler
			handle = ( dataPriv.get( cur, &amp;quot;events&amp;quot; ) || Object.create( null ) )[ event.type ] &amp;amp;&amp;amp;
				dataPriv.get( cur, &amp;quot;handle&amp;quot; );
			if ( handle ) {
				handle.apply( cur, data );
			}
&amp;nbsp;
			// Native handler
			handle = ontype &amp;amp;&amp;amp; cur[ ontype ];
			if ( handle &amp;amp;&amp;amp; handle.apply &amp;amp;&amp;amp; acceptData( cur ) ) {
				event.result = handle.apply( cur, data );
				if ( event.result === false ) {
					event.preventDefault();
				}
			}
		}
		event.type = type;
&amp;nbsp;
		// If nobody prevented the default action, do it now
		if ( !onlyHandlers &amp;amp;&amp;amp; !event.isDefaultPrevented() ) {
&amp;nbsp;
			if ( ( !special._default ||
				special._default.apply( eventPath.pop(), data ) === false ) &amp;amp;&amp;amp;
				acceptData( elem ) ) {
&amp;nbsp;
				// Call a native DOM method on the target with the same name as the event.
				// Don&#039;t do default actions on window, that&#039;s where global variables be (trac-6170)
				if ( ontype &amp;amp;&amp;amp; isFunction( elem[ type ] ) &amp;amp;&amp;amp; !isWindow( elem ) ) {
&amp;nbsp;
					// Don&#039;t re-trigger an onFOO event when we call its FOO() method
					tmp = elem[ ontype ];
&amp;nbsp;
					if ( tmp ) {
						elem[ ontype ] = null;
					}
&amp;nbsp;
					// Prevent re-triggering of the same event, since we already bubbled it above
					jQuery.event.triggered = type;
&amp;nbsp;
					if ( event.isPropagationStopped() ) {
						lastElement.addEventListener( type, stopPropagationCallback );
					}
&amp;nbsp;
					elem[ type ]();
&amp;nbsp;
					if ( event.isPropagationStopped() ) {
						lastElement.removeEventListener( type, stopPropagationCallback );
					}
&amp;nbsp;
					jQuery.event.triggered = undefined;
&amp;nbsp;
					if ( tmp ) {
						elem[ ontype ] = tmp;
					}
				}
			}
		}
&amp;nbsp;
		return event.result;
	},
&amp;nbsp;
	// Piggyback on a donor event to simulate a different one
	// Used only for `focus(in | out)` events
	simulate: function( type, elem, event ) {
		var e = jQuery.extend(
			new jQuery.Event(),
			event,
			{
				type: type,
				isSimulated: true
			}
		);
&amp;nbsp;
		jQuery.event.trigger( e, null, elem );
	}
&amp;nbsp;
} );
&amp;nbsp;
jQuery.fn.extend( {
&amp;nbsp;
	trigger: function( type, data ) {
		return this.each( function() {
			jQuery.event.trigger( type, data, this );
		} );
	},
	triggerHandler: function( type, data ) {
		var elem = this[ 0 ];
		if ( elem ) {
			return jQuery.event.trigger( type, data, elem, true );
		}
	}
} );
&amp;nbsp;
&amp;nbsp;
var
	rbracket = /\[\]$/,
	rCRLF = /\r?\n/g,
	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
	rsubmittable = /^(?:input|select|textarea|keygen)/i;
&amp;nbsp;
function buildParams( prefix, obj, traditional, add ) {
	var name;
&amp;nbsp;
	if ( Array.isArray( obj ) ) {
&amp;nbsp;
		// Serialize array item.
		jQuery.each( obj, function( i, v ) {
			if ( traditional || rbracket.test( prefix ) ) {
&amp;nbsp;
				// Treat each array item as a scalar.
				add( prefix, v );
&amp;nbsp;
			} else {
&amp;nbsp;
				// Item is non-scalar (array or object), encode its numeric index.
				buildParams(
					prefix + &amp;quot;[&amp;quot; + ( typeof v === &amp;quot;object&amp;quot; &amp;amp;&amp;amp; v != null ? i : &amp;quot;&amp;quot; ) + &amp;quot;]&amp;quot;,
					v,
					traditional,
					add
				);
			}
		} );
&amp;nbsp;
	} else if ( !traditional &amp;amp;&amp;amp; toType( obj ) === &amp;quot;object&amp;quot; ) {
&amp;nbsp;
		// Serialize object item.
		for ( name in obj ) {
			buildParams( prefix + &amp;quot;[&amp;quot; + name + &amp;quot;]&amp;quot;, obj[ name ], traditional, add );
		}
&amp;nbsp;
	} else {
&amp;nbsp;
		// Serialize scalar item.
		add( prefix, obj );
	}
}
&amp;nbsp;
// Serialize an array of form elements or a set of
// key/values into a query string
jQuery.param = function( a, traditional ) {
	var prefix,
		s = [],
		add = function( key, valueOrFunction ) {
&amp;nbsp;
			// If value is a function, invoke it and use its return value
			var value = isFunction( valueOrFunction ) ?
				valueOrFunction() :
				valueOrFunction;
&amp;nbsp;
			s[ s.length ] = encodeURIComponent( key ) + &amp;quot;=&amp;quot; +
				encodeURIComponent( value == null ? &amp;quot;&amp;quot; : value );
		};
&amp;nbsp;
	if ( a == null ) {
		return &amp;quot;&amp;quot;;
	}
&amp;nbsp;
	// If an array was passed in, assume that it is an array of form elements.
	if ( Array.isArray( a ) || ( a.jquery &amp;amp;&amp;amp; !jQuery.isPlainObject( a ) ) ) {
&amp;nbsp;
		// Serialize the form elements
		jQuery.each( a, function() {
			add( this.name, this.value );
		} );
&amp;nbsp;
	} else {
&amp;nbsp;
		// If traditional, encode the &amp;quot;old&amp;quot; way (the way 1.3.2 or older
		// did it), otherwise encode params recursively.
		for ( prefix in a ) {
			buildParams( prefix, a[ prefix ], traditional, add );
		}
	}
&amp;nbsp;
	// Return the resulting serialization
	return s.join( &amp;quot;&amp;amp;&amp;quot; );
};
&amp;nbsp;
jQuery.fn.extend( {
	serialize: function() {
		return jQuery.param( this.serializeArray() );
	},
	serializeArray: function() {
		return this.map( function() {
&amp;nbsp;
			// Can add propHook for &amp;quot;elements&amp;quot; to filter or add form elements
			var elements = jQuery.prop( this, &amp;quot;elements&amp;quot; );
			return elements ? jQuery.makeArray( elements ) : this;
		} ).filter( function() {
			var type = this.type;
&amp;nbsp;
			// Use .is( &amp;quot;:disabled&amp;quot; ) so that fieldset[disabled] works
			return this.name &amp;amp;&amp;amp; !jQuery( this ).is( &amp;quot;:disabled&amp;quot; ) &amp;amp;&amp;amp;
				rsubmittable.test( this.nodeName ) &amp;amp;&amp;amp; !rsubmitterTypes.test( type ) &amp;amp;&amp;amp;
				( this.checked || !rcheckableType.test( type ) );
		} ).map( function( _i, elem ) {
			var val = jQuery( this ).val();
&amp;nbsp;
			if ( val == null ) {
				return null;
			}
&amp;nbsp;
			if ( Array.isArray( val ) ) {
				return jQuery.map( val, function( val ) {
					return { name: elem.name, value: val.replace( rCRLF, &amp;quot;\r\n&amp;quot; ) };
				} );
			}
&amp;nbsp;
			return { name: elem.name, value: val.replace( rCRLF, &amp;quot;\r\n&amp;quot; ) };
		} ).get();
	}
} );
&amp;nbsp;
&amp;nbsp;
var
	r20 = /%20/g,
	rhash = /#.*$/,
	rantiCache = /([?&amp;amp;])_=[^&amp;amp;]*/,
	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
&amp;nbsp;
	// trac-7653, trac-8125, trac-8152: local protocol detection
	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
	rnoContent = /^(?:GET|HEAD)$/,
	rprotocol = /^\/\//,
&amp;nbsp;
	/* Prefilters
	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
	 * 2) These are called:
	 *    - BEFORE asking for a transport
	 *    - AFTER param serialization (s.data is a string if s.processData is true)
	 * 3) key is the dataType
	 * 4) the catchall symbol &amp;quot;*&amp;quot; can be used
	 * 5) execution will start with transport dataType and THEN continue down to &amp;quot;*&amp;quot; if needed
	 */
	prefilters = {},
&amp;nbsp;
	/* Transports bindings
	 * 1) key is the dataType
	 * 2) the catchall symbol &amp;quot;*&amp;quot; can be used
	 * 3) selection will start with transport dataType and THEN go to &amp;quot;*&amp;quot; if needed
	 */
	transports = {},
&amp;nbsp;
	// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression
	allTypes = &amp;quot;*/&amp;quot;.concat( &amp;quot;*&amp;quot; ),
&amp;nbsp;
	// Anchor tag for parsing the document origin
	originAnchor = document.createElement( &amp;quot;a&amp;quot; );
&amp;nbsp;
originAnchor.href = location.href;
&amp;nbsp;
// Base &amp;quot;constructor&amp;quot; for jQuery.ajaxPrefilter and jQuery.ajaxTransport
function addToPrefiltersOrTransports( structure ) {
&amp;nbsp;
	// dataTypeExpression is optional and defaults to &amp;quot;*&amp;quot;
	return function( dataTypeExpression, func ) {
&amp;nbsp;
		if ( typeof dataTypeExpression !== &amp;quot;string&amp;quot; ) {
			func = dataTypeExpression;
			dataTypeExpression = &amp;quot;*&amp;quot;;
		}
&amp;nbsp;
		var dataType,
			i = 0,
			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
&amp;nbsp;
		if ( isFunction( func ) ) {
&amp;nbsp;
			// For each dataType in the dataTypeExpression
			while ( ( dataType = dataTypes[ i++ ] ) ) {
&amp;nbsp;
				// Prepend if requested
				if ( dataType[ 0 ] === &amp;quot;+&amp;quot; ) {
					dataType = dataType.slice( 1 ) || &amp;quot;*&amp;quot;;
					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
&amp;nbsp;
				// Otherwise append
				} else {
					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
				}
			}
		}
	};
}
&amp;nbsp;
// Base inspection function for prefilters and transports
function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
&amp;nbsp;
	var inspected = {},
		seekingTransport = ( structure === transports );
&amp;nbsp;
	function inspect( dataType ) {
		var selected;
		inspected[ dataType ] = true;
		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
			if ( typeof dataTypeOrTransport === &amp;quot;string&amp;quot; &amp;amp;&amp;amp;
				!seekingTransport &amp;amp;&amp;amp; !inspected[ dataTypeOrTransport ] ) {
&amp;nbsp;
				options.dataTypes.unshift( dataTypeOrTransport );
				inspect( dataTypeOrTransport );
				return false;
			} else if ( seekingTransport ) {
				return !( selected = dataTypeOrTransport );
			}
		} );
		return selected;
	}
&amp;nbsp;
	return inspect( options.dataTypes[ 0 ] ) || !inspected[ &amp;quot;*&amp;quot; ] &amp;amp;&amp;amp; inspect( &amp;quot;*&amp;quot; );
}
&amp;nbsp;
// A special extend for ajax options
// that takes &amp;quot;flat&amp;quot; options (not to be deep extended)
// Fixes trac-9887
function ajaxExtend( target, src ) {
	var key, deep,
		flatOptions = jQuery.ajaxSettings.flatOptions || {};
&amp;nbsp;
	for ( key in src ) {
		if ( src[ key ] !== undefined ) {
			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
		}
	}
	if ( deep ) {
		jQuery.extend( true, target, deep );
	}
&amp;nbsp;
	return target;
}
&amp;nbsp;
/* Handles responses to an ajax request:
 * - finds the right dataType (mediates between content-type and expected dataType)
 * - returns the corresponding response
 */
function ajaxHandleResponses( s, jqXHR, responses ) {
&amp;nbsp;
	var ct, type, finalDataType, firstDataType,
		contents = s.contents,
		dataTypes = s.dataTypes;
&amp;nbsp;
	// Remove auto dataType and get content-type in the process
	while ( dataTypes[ 0 ] === &amp;quot;*&amp;quot; ) {
		dataTypes.shift();
		if ( ct === undefined ) {
			ct = s.mimeType || jqXHR.getResponseHeader( &amp;quot;Content-Type&amp;quot; );
		}
	}
&amp;nbsp;
	// Check if we&#039;re dealing with a known content-type
	if ( ct ) {
		for ( type in contents ) {
			if ( contents[ type ] &amp;amp;&amp;amp; contents[ type ].test( ct ) ) {
				dataTypes.unshift( type );
				break;
			}
		}
	}
&amp;nbsp;
	// Check to see if we have a response for the expected dataType
	if ( dataTypes[ 0 ] in responses ) {
		finalDataType = dataTypes[ 0 ];
	} else {
&amp;nbsp;
		// Try convertible dataTypes
		for ( type in responses ) {
			if ( !dataTypes[ 0 ] || s.converters[ type + &amp;quot; &amp;quot; + dataTypes[ 0 ] ] ) {
				finalDataType = type;
				break;
			}
			if ( !firstDataType ) {
				firstDataType = type;
			}
		}
&amp;nbsp;
		// Or just use first one
		finalDataType = finalDataType || firstDataType;
	}
&amp;nbsp;
	// If we found a dataType
	// We add the dataType to the list if needed
	// and return the corresponding response
	if ( finalDataType ) {
		if ( finalDataType !== dataTypes[ 0 ] ) {
			dataTypes.unshift( finalDataType );
		}
		return responses[ finalDataType ];
	}
}
&amp;nbsp;
/* Chain conversions given the request and the original response
 * Also sets the responseXXX fields on the jqXHR instance
 */
function ajaxConvert( s, response, jqXHR, isSuccess ) {
	var conv2, current, conv, tmp, prev,
		converters = {},
&amp;nbsp;
		// Work with a copy of dataTypes in case we need to modify it for conversion
		dataTypes = s.dataTypes.slice();
&amp;nbsp;
	// Create converters map with lowercased keys
	if ( dataTypes[ 1 ] ) {
		for ( conv in s.converters ) {
			converters[ conv.toLowerCase() ] = s.converters[ conv ];
		}
	}
&amp;nbsp;
	current = dataTypes.shift();
&amp;nbsp;
	// Convert to each sequential dataType
	while ( current ) {
&amp;nbsp;
		if ( s.responseFields[ current ] ) {
			jqXHR[ s.responseFields[ current ] ] = response;
		}
&amp;nbsp;
		// Apply the dataFilter if provided
		if ( !prev &amp;amp;&amp;amp; isSuccess &amp;amp;&amp;amp; s.dataFilter ) {
			response = s.dataFilter( response, s.dataType );
		}
&amp;nbsp;
		prev = current;
		current = dataTypes.shift();
&amp;nbsp;
		if ( current ) {
&amp;nbsp;
			// There&#039;s only work to do if current dataType is non-auto
			if ( current === &amp;quot;*&amp;quot; ) {
&amp;nbsp;
				current = prev;
&amp;nbsp;
			// Convert response if prev dataType is non-auto and differs from current
			} else if ( prev !== &amp;quot;*&amp;quot; &amp;amp;&amp;amp; prev !== current ) {
&amp;nbsp;
				// Seek a direct converter
				conv = converters[ prev + &amp;quot; &amp;quot; + current ] || converters[ &amp;quot;* &amp;quot; + current ];
&amp;nbsp;
				// If none found, seek a pair
				if ( !conv ) {
					for ( conv2 in converters ) {
&amp;nbsp;
						// If conv2 outputs current
						tmp = conv2.split( &amp;quot; &amp;quot; );
						if ( tmp[ 1 ] === current ) {
&amp;nbsp;
							// If prev can be converted to accepted input
							conv = converters[ prev + &amp;quot; &amp;quot; + tmp[ 0 ] ] ||
								converters[ &amp;quot;* &amp;quot; + tmp[ 0 ] ];
							if ( conv ) {
&amp;nbsp;
								// Condense equivalence converters
								if ( conv === true ) {
									conv = converters[ conv2 ];
&amp;nbsp;
								// Otherwise, insert the intermediate dataType
								} else if ( converters[ conv2 ] !== true ) {
									current = tmp[ 0 ];
									dataTypes.unshift( tmp[ 1 ] );
								}
								break;
							}
						}
					}
				}
&amp;nbsp;
				// Apply converter (if not an equivalence)
				if ( conv !== true ) {
&amp;nbsp;
					// Unless errors are allowed to bubble, catch and return them
					if ( conv &amp;amp;&amp;amp; s.throws ) {
						response = conv( response );
					} else {
						try {
							response = conv( response );
						} catch ( e ) {
							return {
								state: &amp;quot;parsererror&amp;quot;,
								error: conv ? e : &amp;quot;No conversion from &amp;quot; + prev + &amp;quot; to &amp;quot; + current
							};
						}
					}
				}
			}
		}
	}
&amp;nbsp;
	return { state: &amp;quot;success&amp;quot;, data: response };
}
&amp;nbsp;
jQuery.extend( {
&amp;nbsp;
	// Counter for holding the number of active queries
	active: 0,
&amp;nbsp;
	// Last-Modified header cache for next request
	lastModified: {},
	etag: {},
&amp;nbsp;
	ajaxSettings: {
		url: location.href,
		type: &amp;quot;GET&amp;quot;,
		isLocal: rlocalProtocol.test( location.protocol ),
		global: true,
		processData: true,
		async: true,
		contentType: &amp;quot;application/x-www-form-urlencoded; charset=UTF-8&amp;quot;,
&amp;nbsp;
		/*
		timeout: 0,
		data: null,
		dataType: null,
		username: null,
		password: null,
		cache: null,
		throws: false,
		traditional: false,
		headers: {},
		*/
&amp;nbsp;
		accepts: {
			&amp;quot;*&amp;quot;: allTypes,
			text: &amp;quot;text/plain&amp;quot;,
			html: &amp;quot;text/html&amp;quot;,
			xml: &amp;quot;application/xml, text/xml&amp;quot;,
			json: &amp;quot;application/json, text/javascript&amp;quot;
		},
&amp;nbsp;
		contents: {
			xml: /\bxml\b/,
			html: /\bhtml/,
			json: /\bjson\b/
		},
&amp;nbsp;
		responseFields: {
			xml: &amp;quot;responseXML&amp;quot;,
			text: &amp;quot;responseText&amp;quot;,
			json: &amp;quot;responseJSON&amp;quot;
		},
&amp;nbsp;
		// Data converters
		// Keys separate source (or catchall &amp;quot;*&amp;quot;) and destination types with a single space
		converters: {
&amp;nbsp;
			// Convert anything to text
			&amp;quot;* text&amp;quot;: String,
&amp;nbsp;
			// Text to html (true = no transformation)
			&amp;quot;text html&amp;quot;: true,
&amp;nbsp;
			// Evaluate text as a json expression
			&amp;quot;text json&amp;quot;: JSON.parse,
&amp;nbsp;
			// Parse text as xml
			&amp;quot;text xml&amp;quot;: jQuery.parseXML
		},
&amp;nbsp;
		// For options that shouldn&#039;t be deep extended:
		// you can add your own custom options here if
		// and when you create one that shouldn&#039;t be
		// deep extended (see ajaxExtend)
		flatOptions: {
			url: true,
			context: true
		}
	},
&amp;nbsp;
	// Creates a full fledged settings object into target
	// with both ajaxSettings and settings fields.
	// If target is omitted, writes into ajaxSettings.
	ajaxSetup: function( target, settings ) {
		return settings ?
&amp;nbsp;
			// Building a settings object
			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
&amp;nbsp;
			// Extending ajaxSettings
			ajaxExtend( jQuery.ajaxSettings, target );
	},
&amp;nbsp;
	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
	ajaxTransport: addToPrefiltersOrTransports( transports ),
&amp;nbsp;
	// Main method
	ajax: function( url, options ) {
&amp;nbsp;
		// If url is an object, simulate pre-1.5 signature
		if ( typeof url === &amp;quot;object&amp;quot; ) {
			options = url;
			url = undefined;
		}
&amp;nbsp;
		// Force options to be an object
		options = options || {};
&amp;nbsp;
		var transport,
&amp;nbsp;
			// URL without anti-cache param
			cacheURL,
&amp;nbsp;
			// Response headers
			responseHeadersString,
			responseHeaders,
&amp;nbsp;
			// timeout handle
			timeoutTimer,
&amp;nbsp;
			// Url cleanup var
			urlAnchor,
&amp;nbsp;
			// Request state (becomes false upon send and true upon completion)
			completed,
&amp;nbsp;
			// To know if global events are to be dispatched
			fireGlobals,
&amp;nbsp;
			// Loop variable
			i,
&amp;nbsp;
			// uncached part of the url
			uncached,
&amp;nbsp;
			// Create the final options object
			s = jQuery.ajaxSetup( {}, options ),
&amp;nbsp;
			// Callbacks context
			callbackContext = s.context || s,
&amp;nbsp;
			// Context for global events is callbackContext if it is a DOM node or jQuery collection
			globalEventContext = s.context &amp;amp;&amp;amp;
				( callbackContext.nodeType || callbackContext.jquery ) ?
				jQuery( callbackContext ) :
				jQuery.event,
&amp;nbsp;
			// Deferreds
			deferred = jQuery.Deferred(),
			completeDeferred = jQuery.Callbacks( &amp;quot;once memory&amp;quot; ),
&amp;nbsp;
			// Status-dependent callbacks
			statusCode = s.statusCode || {},
&amp;nbsp;
			// Headers (they are sent all at once)
			requestHeaders = {},
			requestHeadersNames = {},
&amp;nbsp;
			// Default abort message
			strAbort = &amp;quot;canceled&amp;quot;,
&amp;nbsp;
			// Fake xhr
			jqXHR = {
				readyState: 0,
&amp;nbsp;
				// Builds headers hashtable if needed
				getResponseHeader: function( key ) {
					var match;
					if ( completed ) {
						if ( !responseHeaders ) {
							responseHeaders = {};
							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
								responseHeaders[ match[ 1 ].toLowerCase() + &amp;quot; &amp;quot; ] =
									( responseHeaders[ match[ 1 ].toLowerCase() + &amp;quot; &amp;quot; ] || [] )
										.concat( match[ 2 ] );
							}
						}
						match = responseHeaders[ key.toLowerCase() + &amp;quot; &amp;quot; ];
					}
					return match == null ? null : match.join( &amp;quot;, &amp;quot; );
				},
&amp;nbsp;
				// Raw string
				getAllResponseHeaders: function() {
					return completed ? responseHeadersString : null;
				},
&amp;nbsp;
				// Caches the header
				setRequestHeader: function( name, value ) {
					if ( completed == null ) {
						name = requestHeadersNames[ name.toLowerCase() ] =
							requestHeadersNames[ name.toLowerCase() ] || name;
						requestHeaders[ name ] = value;
					}
					return this;
				},
&amp;nbsp;
				// Overrides response content-type header
				overrideMimeType: function( type ) {
					if ( completed == null ) {
						s.mimeType = type;
					}
					return this;
				},
&amp;nbsp;
				// Status-dependent callbacks
				statusCode: function( map ) {
					var code;
					if ( map ) {
						if ( completed ) {
&amp;nbsp;
							// Execute the appropriate callbacks
							jqXHR.always( map[ jqXHR.status ] );
						} else {
&amp;nbsp;
							// Lazy-add the new callbacks in a way that preserves old ones
							for ( code in map ) {
								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
							}
						}
					}
					return this;
				},
&amp;nbsp;
				// Cancel the request
				abort: function( statusText ) {
					var finalText = statusText || strAbort;
					if ( transport ) {
						transport.abort( finalText );
					}
					done( 0, finalText );
					return this;
				}
			};
&amp;nbsp;
		// Attach deferreds
		deferred.promise( jqXHR );
&amp;nbsp;
		// Add protocol if not provided (prefilters might expect it)
		// Handle falsy url in the settings object (trac-10093: consistency with old signature)
		// We also use the url parameter if available
		s.url = ( ( url || s.url || location.href ) + &amp;quot;&amp;quot; )
			.replace( rprotocol, location.protocol + &amp;quot;//&amp;quot; );
&amp;nbsp;
		// Alias method option to type as per ticket trac-12004
		s.type = options.method || options.type || s.method || s.type;
&amp;nbsp;
		// Extract dataTypes list
		s.dataTypes = ( s.dataType || &amp;quot;*&amp;quot; ).toLowerCase().match( rnothtmlwhite ) || [ &amp;quot;&amp;quot; ];
&amp;nbsp;
		// A cross-domain request is in order when the origin doesn&#039;t match the current origin.
		if ( s.crossDomain == null ) {
			urlAnchor = document.createElement( &amp;quot;a&amp;quot; );
&amp;nbsp;
			// Support: IE &amp;lt;=8 - 11, Edge 12 - 15
			// IE throws exception on accessing the href property if url is malformed,
			// e.g. http://example.com:80x/
			try {
				urlAnchor.href = s.url;
&amp;nbsp;
				// Support: IE &amp;lt;=8 - 11 only
				// Anchor&#039;s host property isn&#039;t correctly set when s.url is relative
				urlAnchor.href = urlAnchor.href;
				s.crossDomain = originAnchor.protocol + &amp;quot;//&amp;quot; + originAnchor.host !==
					urlAnchor.protocol + &amp;quot;//&amp;quot; + urlAnchor.host;
			} catch ( e ) {
&amp;nbsp;
				// If there is an error parsing the URL, assume it is crossDomain,
				// it can be rejected by the transport if it is invalid
				s.crossDomain = true;
			}
		}
&amp;nbsp;
		// Convert data if not already a string
		if ( s.data &amp;amp;&amp;amp; s.processData &amp;amp;&amp;amp; typeof s.data !== &amp;quot;string&amp;quot; ) {
			s.data = jQuery.param( s.data, s.traditional );
		}
&amp;nbsp;
		// Apply prefilters
		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
&amp;nbsp;
		// If request was aborted inside a prefilter, stop there
		if ( completed ) {
			return jqXHR;
		}
&amp;nbsp;
		// We can fire global events as of now if asked to
		// Don&#039;t fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)
		fireGlobals = jQuery.event &amp;amp;&amp;amp; s.global;
&amp;nbsp;
		// Watch for a new set of requests
		if ( fireGlobals &amp;amp;&amp;amp; jQuery.active++ === 0 ) {
			jQuery.event.trigger( &amp;quot;ajaxStart&amp;quot; );
		}
&amp;nbsp;
		// Uppercase the type
		s.type = s.type.toUpperCase();
&amp;nbsp;
		// Determine if request has content
		s.hasContent = !rnoContent.test( s.type );
&amp;nbsp;
		// Save the URL in case we&#039;re toying with the If-Modified-Since
		// and/or If-None-Match header later on
		// Remove hash to simplify url manipulation
		cacheURL = s.url.replace( rhash, &amp;quot;&amp;quot; );
&amp;nbsp;
		// More options handling for requests with no content
		if ( !s.hasContent ) {
&amp;nbsp;
			// Remember the hash so we can put it back
			uncached = s.url.slice( cacheURL.length );
&amp;nbsp;
			// If data is available and should be processed, append data to url
			if ( s.data &amp;amp;&amp;amp; ( s.processData || typeof s.data === &amp;quot;string&amp;quot; ) ) {
				cacheURL += ( rquery.test( cacheURL ) ? &amp;quot;&amp;amp;&amp;quot; : &amp;quot;?&amp;quot; ) + s.data;
&amp;nbsp;
				// trac-9682: remove data so that it&#039;s not used in an eventual retry
				delete s.data;
			}
&amp;nbsp;
			// Add or update anti-cache param if needed
			if ( s.cache === false ) {
				cacheURL = cacheURL.replace( rantiCache, &amp;quot;$1&amp;quot; );
				uncached = ( rquery.test( cacheURL ) ? &amp;quot;&amp;amp;&amp;quot; : &amp;quot;?&amp;quot; ) + &amp;quot;_=&amp;quot; + ( nonce.guid++ ) +
					uncached;
			}
&amp;nbsp;
			// Put hash and anti-cache on the URL that will be requested (gh-1732)
			s.url = cacheURL + uncached;
&amp;nbsp;
		// Change &#039;%20&#039; to &#039;+&#039; if this is encoded form body content (gh-2658)
		} else if ( s.data &amp;amp;&amp;amp; s.processData &amp;amp;&amp;amp;
			( s.contentType || &amp;quot;&amp;quot; ).indexOf( &amp;quot;application/x-www-form-urlencoded&amp;quot; ) === 0 ) {
			s.data = s.data.replace( r20, &amp;quot;+&amp;quot; );
		}
&amp;nbsp;
		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
		if ( s.ifModified ) {
			if ( jQuery.lastModified[ cacheURL ] ) {
				jqXHR.setRequestHeader( &amp;quot;If-Modified-Since&amp;quot;, jQuery.lastModified[ cacheURL ] );
			}
			if ( jQuery.etag[ cacheURL ] ) {
				jqXHR.setRequestHeader( &amp;quot;If-None-Match&amp;quot;, jQuery.etag[ cacheURL ] );
			}
		}
&amp;nbsp;
		// Set the correct header, if data is being sent
		if ( s.data &amp;amp;&amp;amp; s.hasContent &amp;amp;&amp;amp; s.contentType !== false || options.contentType ) {
			jqXHR.setRequestHeader( &amp;quot;Content-Type&amp;quot;, s.contentType );
		}
&amp;nbsp;
		// Set the Accepts header for the server, depending on the dataType
		jqXHR.setRequestHeader(
			&amp;quot;Accept&amp;quot;,
			s.dataTypes[ 0 ] &amp;amp;&amp;amp; s.accepts[ s.dataTypes[ 0 ] ] ?
				s.accepts[ s.dataTypes[ 0 ] ] +
					( s.dataTypes[ 0 ] !== &amp;quot;*&amp;quot; ? &amp;quot;, &amp;quot; + allTypes + &amp;quot;; q=0.01&amp;quot; : &amp;quot;&amp;quot; ) :
				s.accepts[ &amp;quot;*&amp;quot; ]
		);
&amp;nbsp;
		// Check for headers option
		for ( i in s.headers ) {
			jqXHR.setRequestHeader( i, s.headers[ i ] );
		}
&amp;nbsp;
		// Allow custom headers/mimetypes and early abort
		if ( s.beforeSend &amp;amp;&amp;amp;
			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
&amp;nbsp;
			// Abort if not done already and return
			return jqXHR.abort();
		}
&amp;nbsp;
		// Aborting is no longer a cancellation
		strAbort = &amp;quot;abort&amp;quot;;
&amp;nbsp;
		// Install callbacks on deferreds
		completeDeferred.add( s.complete );
		jqXHR.done( s.success );
		jqXHR.fail( s.error );
&amp;nbsp;
		// Get transport
		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
&amp;nbsp;
		// If no transport, we auto-abort
		if ( !transport ) {
			done( -1, &amp;quot;No Transport&amp;quot; );
		} else {
			jqXHR.readyState = 1;
&amp;nbsp;
			// Send global event
			if ( fireGlobals ) {
				globalEventContext.trigger( &amp;quot;ajaxSend&amp;quot;, [ jqXHR, s ] );
			}
&amp;nbsp;
			// If request was aborted inside ajaxSend, stop there
			if ( completed ) {
				return jqXHR;
			}
&amp;nbsp;
			// Timeout
			if ( s.async &amp;amp;&amp;amp; s.timeout &amp;gt; 0 ) {
				timeoutTimer = window.setTimeout( function() {
					jqXHR.abort( &amp;quot;timeout&amp;quot; );
				}, s.timeout );
			}
&amp;nbsp;
			try {
				completed = false;
				transport.send( requestHeaders, done );
			} catch ( e ) {
&amp;nbsp;
				// Rethrow post-completion exceptions
				if ( completed ) {
					throw e;
				}
&amp;nbsp;
				// Propagate others as results
				done( -1, e );
			}
		}
&amp;nbsp;
		// Callback for when everything is done
		function done( status, nativeStatusText, responses, headers ) {
			var isSuccess, success, error, response, modified,
				statusText = nativeStatusText;
&amp;nbsp;
			// Ignore repeat invocations
			if ( completed ) {
				return;
			}
&amp;nbsp;
			completed = true;
&amp;nbsp;
			// Clear timeout if it exists
			if ( timeoutTimer ) {
				window.clearTimeout( timeoutTimer );
			}
&amp;nbsp;
			// Dereference transport for early garbage collection
			// (no matter how long the jqXHR object will be used)
			transport = undefined;
&amp;nbsp;
			// Cache response headers
			responseHeadersString = headers || &amp;quot;&amp;quot;;
&amp;nbsp;
			// Set readyState
			jqXHR.readyState = status &amp;gt; 0 ? 4 : 0;
&amp;nbsp;
			// Determine if successful
			isSuccess = status &amp;gt;= 200 &amp;amp;&amp;amp; status &amp;lt; 300 || status === 304;
&amp;nbsp;
			// Get response data
			if ( responses ) {
				response = ajaxHandleResponses( s, jqXHR, responses );
			}
&amp;nbsp;
			// Use a noop converter for missing script but not if jsonp
			if ( !isSuccess &amp;amp;&amp;amp;
				jQuery.inArray( &amp;quot;script&amp;quot;, s.dataTypes ) &amp;gt; -1 &amp;amp;&amp;amp;
				jQuery.inArray( &amp;quot;json&amp;quot;, s.dataTypes ) &amp;lt; 0 ) {
				s.converters[ &amp;quot;text script&amp;quot; ] = function() {};
			}
&amp;nbsp;
			// Convert no matter what (that way responseXXX fields are always set)
			response = ajaxConvert( s, response, jqXHR, isSuccess );
&amp;nbsp;
			// If successful, handle type chaining
			if ( isSuccess ) {
&amp;nbsp;
				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
				if ( s.ifModified ) {
					modified = jqXHR.getResponseHeader( &amp;quot;Last-Modified&amp;quot; );
					if ( modified ) {
						jQuery.lastModified[ cacheURL ] = modified;
					}
					modified = jqXHR.getResponseHeader( &amp;quot;etag&amp;quot; );
					if ( modified ) {
						jQuery.etag[ cacheURL ] = modified;
					}
				}
&amp;nbsp;
				// if no content
				if ( status === 204 || s.type === &amp;quot;HEAD&amp;quot; ) {
					statusText = &amp;quot;nocontent&amp;quot;;
&amp;nbsp;
				// if not modified
				} else if ( status === 304 ) {
					statusText = &amp;quot;notmodified&amp;quot;;
&amp;nbsp;
				// If we have data, let&#039;s convert it
				} else {
					statusText = response.state;
					success = response.data;
					error = response.error;
					isSuccess = !error;
				}
			} else {
&amp;nbsp;
				// Extract error from statusText and normalize for non-aborts
				error = statusText;
				if ( status || !statusText ) {
					statusText = &amp;quot;error&amp;quot;;
					if ( status &amp;lt; 0 ) {
						status = 0;
					}
				}
			}
&amp;nbsp;
			// Set data for the fake xhr object
			jqXHR.status = status;
			jqXHR.statusText = ( nativeStatusText || statusText ) + &amp;quot;&amp;quot;;
&amp;nbsp;
			// Success/Error
			if ( isSuccess ) {
				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
			} else {
				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
			}
&amp;nbsp;
			// Status-dependent callbacks
			jqXHR.statusCode( statusCode );
			statusCode = undefined;
&amp;nbsp;
			if ( fireGlobals ) {
				globalEventContext.trigger( isSuccess ? &amp;quot;ajaxSuccess&amp;quot; : &amp;quot;ajaxError&amp;quot;,
					[ jqXHR, s, isSuccess ? success : error ] );
			}
&amp;nbsp;
			// Complete
			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
&amp;nbsp;
			if ( fireGlobals ) {
				globalEventContext.trigger( &amp;quot;ajaxComplete&amp;quot;, [ jqXHR, s ] );
&amp;nbsp;
				// Handle the global AJAX counter
				if ( !( --jQuery.active ) ) {
					jQuery.event.trigger( &amp;quot;ajaxStop&amp;quot; );
				}
			}
		}
&amp;nbsp;
		return jqXHR;
	},
&amp;nbsp;
	getJSON: function( url, data, callback ) {
		return jQuery.get( url, data, callback, &amp;quot;json&amp;quot; );
	},
&amp;nbsp;
	getScript: function( url, callback ) {
		return jQuery.get( url, undefined, callback, &amp;quot;script&amp;quot; );
	}
} );
&amp;nbsp;
jQuery.each( [ &amp;quot;get&amp;quot;, &amp;quot;post&amp;quot; ], function( _i, method ) {
	jQuery[ method ] = function( url, data, callback, type ) {
&amp;nbsp;
		// Shift arguments if data argument was omitted
		if ( isFunction( data ) ) {
			type = type || callback;
			callback = data;
			data = undefined;
		}
&amp;nbsp;
		// The url can be an options object (which then must have .url)
		return jQuery.ajax( jQuery.extend( {
			url: url,
			type: method,
			dataType: type,
			data: data,
			success: callback
		}, jQuery.isPlainObject( url ) &amp;amp;&amp;amp; url ) );
	};
} );
&amp;nbsp;
jQuery.ajaxPrefilter( function( s ) {
	var i;
	for ( i in s.headers ) {
		if ( i.toLowerCase() === &amp;quot;content-type&amp;quot; ) {
			s.contentType = s.headers[ i ] || &amp;quot;&amp;quot;;
		}
	}
} );
&amp;nbsp;
&amp;nbsp;
jQuery._evalUrl = function( url, options, doc ) {
	return jQuery.ajax( {
		url: url,
&amp;nbsp;
		// Make this explicit, since user can override this through ajaxSetup (trac-11264)
		type: &amp;quot;GET&amp;quot;,
		dataType: &amp;quot;script&amp;quot;,
		cache: true,
		async: false,
		global: false,
&amp;nbsp;
		// Only evaluate the response if it is successful (gh-4126)
		// dataFilter is not invoked for failure responses, so using it instead
		// of the default converter is kludgy but it works.
		converters: {
			&amp;quot;text script&amp;quot;: function() {}
		},
		dataFilter: function( response ) {
			jQuery.globalEval( response, options, doc );
		}
	} );
};
&amp;nbsp;
&amp;nbsp;
jQuery.fn.extend( {
	wrapAll: function( html ) {
		var wrap;
&amp;nbsp;
		if ( this[ 0 ] ) {
			if ( isFunction( html ) ) {
				html = html.call( this[ 0 ] );
			}
&amp;nbsp;
			// The elements to wrap the target around
			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
&amp;nbsp;
			if ( this[ 0 ].parentNode ) {
				wrap.insertBefore( this[ 0 ] );
			}
&amp;nbsp;
			wrap.map( function() {
				var elem = this;
&amp;nbsp;
				while ( elem.firstElementChild ) {
					elem = elem.firstElementChild;
				}
&amp;nbsp;
				return elem;
			} ).append( this );
		}
&amp;nbsp;
		return this;
	},
&amp;nbsp;
	wrapInner: function( html ) {
		if ( isFunction( html ) ) {
			return this.each( function( i ) {
				jQuery( this ).wrapInner( html.call( this, i ) );
			} );
		}
&amp;nbsp;
		return this.each( function() {
			var self = jQuery( this ),
				contents = self.contents();
&amp;nbsp;
			if ( contents.length ) {
				contents.wrapAll( html );
&amp;nbsp;
			} else {
				self.append( html );
			}
		} );
	},
&amp;nbsp;
	wrap: function( html ) {
		var htmlIsFunction = isFunction( html );
&amp;nbsp;
		return this.each( function( i ) {
			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
		} );
	},
&amp;nbsp;
	unwrap: function( selector ) {
		this.parent( selector ).not( &amp;quot;body&amp;quot; ).each( function() {
			jQuery( this ).replaceWith( this.childNodes );
		} );
		return this;
	}
} );
&amp;nbsp;
&amp;nbsp;
jQuery.expr.pseudos.hidden = function( elem ) {
	return !jQuery.expr.pseudos.visible( elem );
};
jQuery.expr.pseudos.visible = function( elem ) {
	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
jQuery.ajaxSettings.xhr = function() {
	try {
		return new window.XMLHttpRequest();
	} catch ( e ) {}
};
&amp;nbsp;
var xhrSuccessStatus = {
&amp;nbsp;
		// File protocol always yields status code 0, assume 200
		0: 200,
&amp;nbsp;
		// Support: IE &amp;lt;=9 only
		// trac-1450: sometimes IE returns 1223 when it should be 204
		1223: 204
	},
	xhrSupported = jQuery.ajaxSettings.xhr();
&amp;nbsp;
support.cors = !!xhrSupported &amp;amp;&amp;amp; ( &amp;quot;withCredentials&amp;quot; in xhrSupported );
support.ajax = xhrSupported = !!xhrSupported;
&amp;nbsp;
jQuery.ajaxTransport( function( options ) {
	var callback, errorCallback;
&amp;nbsp;
	// Cross domain only allowed if supported through XMLHttpRequest
	if ( support.cors || xhrSupported &amp;amp;&amp;amp; !options.crossDomain ) {
		return {
			send: function( headers, complete ) {
				var i,
					xhr = options.xhr();
&amp;nbsp;
				xhr.open(
					options.type,
					options.url,
					options.async,
					options.username,
					options.password
				);
&amp;nbsp;
				// Apply custom fields if provided
				if ( options.xhrFields ) {
					for ( i in options.xhrFields ) {
						xhr[ i ] = options.xhrFields[ i ];
					}
				}
&amp;nbsp;
				// Override mime type if needed
				if ( options.mimeType &amp;amp;&amp;amp; xhr.overrideMimeType ) {
					xhr.overrideMimeType( options.mimeType );
				}
&amp;nbsp;
				// X-Requested-With header
				// For cross-domain requests, seeing as conditions for a preflight are
				// akin to a jigsaw puzzle, we simply never set it to be sure.
				// (it can always be set on a per-request basis or even using ajaxSetup)
				// For same-domain requests, won&#039;t change header if already provided.
				if ( !options.crossDomain &amp;amp;&amp;amp; !headers[ &amp;quot;X-Requested-With&amp;quot; ] ) {
					headers[ &amp;quot;X-Requested-With&amp;quot; ] = &amp;quot;XMLHttpRequest&amp;quot;;
				}
&amp;nbsp;
				// Set headers
				for ( i in headers ) {
					xhr.setRequestHeader( i, headers[ i ] );
				}
&amp;nbsp;
				// Callback
				callback = function( type ) {
					return function() {
						if ( callback ) {
							callback = errorCallback = xhr.onload =
								xhr.onerror = xhr.onabort = xhr.ontimeout =
									xhr.onreadystatechange = null;
&amp;nbsp;
							if ( type === &amp;quot;abort&amp;quot; ) {
								xhr.abort();
							} else if ( type === &amp;quot;error&amp;quot; ) {
&amp;nbsp;
								// Support: IE &amp;lt;=9 only
								// On a manual native abort, IE9 throws
								// errors on any property access that is not readyState
								if ( typeof xhr.status !== &amp;quot;number&amp;quot; ) {
									complete( 0, &amp;quot;error&amp;quot; );
								} else {
									complete(
&amp;nbsp;
										// File: protocol always yields status 0; see trac-8605, trac-14207
										xhr.status,
										xhr.statusText
									);
								}
							} else {
								complete(
									xhrSuccessStatus[ xhr.status ] || xhr.status,
									xhr.statusText,
&amp;nbsp;
									// Support: IE &amp;lt;=9 only
									// IE9 has no XHR2 but throws on binary (trac-11426)
									// For XHR2 non-text, let the caller handle it (gh-2498)
									( xhr.responseType || &amp;quot;text&amp;quot; ) !== &amp;quot;text&amp;quot;  ||
									typeof xhr.responseText !== &amp;quot;string&amp;quot; ?
										{ binary: xhr.response } :
										{ text: xhr.responseText },
									xhr.getAllResponseHeaders()
								);
							}
						}
					};
				};
&amp;nbsp;
				// Listen to events
				xhr.onload = callback();
				errorCallback = xhr.onerror = xhr.ontimeout = callback( &amp;quot;error&amp;quot; );
&amp;nbsp;
				// Support: IE 9 only
				// Use onreadystatechange to replace onabort
				// to handle uncaught aborts
				if ( xhr.onabort !== undefined ) {
					xhr.onabort = errorCallback;
				} else {
					xhr.onreadystatechange = function() {
&amp;nbsp;
						// Check readyState before timeout as it changes
						if ( xhr.readyState === 4 ) {
&amp;nbsp;
							// Allow onerror to be called first,
							// but that will not handle a native abort
							// Also, save errorCallback to a variable
							// as xhr.onerror cannot be accessed
							window.setTimeout( function() {
								if ( callback ) {
									errorCallback();
								}
							} );
						}
					};
				}
&amp;nbsp;
				// Create the abort callback
				callback = callback( &amp;quot;abort&amp;quot; );
&amp;nbsp;
				try {
&amp;nbsp;
					// Do send the request (this may raise an exception)
					xhr.send( options.hasContent &amp;amp;&amp;amp; options.data || null );
				} catch ( e ) {
&amp;nbsp;
					// trac-14683: Only rethrow if this hasn&#039;t been notified as an error yet
					if ( callback ) {
						throw e;
					}
				}
			},
&amp;nbsp;
			abort: function() {
				if ( callback ) {
					callback();
				}
			}
		};
	}
} );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
jQuery.ajaxPrefilter( function( s ) {
	if ( s.crossDomain ) {
		s.contents.script = false;
	}
} );
&amp;nbsp;
// Install script dataType
jQuery.ajaxSetup( {
	accepts: {
		script: &amp;quot;text/javascript, application/javascript, &amp;quot; +
			&amp;quot;application/ecmascript, application/x-ecmascript&amp;quot;
	},
	contents: {
		script: /\b(?:java|ecma)script\b/
	},
	converters: {
		&amp;quot;text script&amp;quot;: function( text ) {
			jQuery.globalEval( text );
			return text;
		}
	}
} );
&amp;nbsp;
// Handle cache&#039;s special case and crossDomain
jQuery.ajaxPrefilter( &amp;quot;script&amp;quot;, function( s ) {
	if ( s.cache === undefined ) {
		s.cache = false;
	}
	if ( s.crossDomain ) {
		s.type = &amp;quot;GET&amp;quot;;
	}
} );
&amp;nbsp;
// Bind script tag hack transport
jQuery.ajaxTransport( &amp;quot;script&amp;quot;, function( s ) {
&amp;nbsp;
	// This transport only deals with cross domain or forced-by-attrs requests
	if ( s.crossDomain || s.scriptAttrs ) {
		var script, callback;
		return {
			send: function( _, complete ) {
				script = jQuery( &amp;quot;&amp;lt;script&amp;gt;&amp;quot; )
					.attr( s.scriptAttrs || {} )
					.prop( { charset: s.scriptCharset, src: s.url } )
					.on( &amp;quot;load error&amp;quot;, callback = function( evt ) {
						script.remove();
						callback = null;
						if ( evt ) {
							complete( evt.type === &amp;quot;error&amp;quot; ? 404 : 200, evt.type );
						}
					} );
&amp;nbsp;
				// Use native DOM manipulation to avoid our domManip AJAX trickery
				document.head.appendChild( script[ 0 ] );
			},
			abort: function() {
				if ( callback ) {
					callback();
				}
			}
		};
	}
} );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
var oldCallbacks = [],
	rjsonp = /(=)\?(?=&amp;amp;|$)|\?\?/;
&amp;nbsp;
// Default jsonp settings
jQuery.ajaxSetup( {
	jsonp: &amp;quot;callback&amp;quot;,
	jsonpCallback: function() {
		var callback = oldCallbacks.pop() || ( jQuery.expando + &amp;quot;_&amp;quot; + ( nonce.guid++ ) );
		this[ callback ] = true;
		return callback;
	}
} );
&amp;nbsp;
// Detect, normalize options and install callbacks for jsonp requests
jQuery.ajaxPrefilter( &amp;quot;json jsonp&amp;quot;, function( s, originalSettings, jqXHR ) {
&amp;nbsp;
	var callbackName, overwritten, responseContainer,
		jsonProp = s.jsonp !== false &amp;amp;&amp;amp; ( rjsonp.test( s.url ) ?
			&amp;quot;url&amp;quot; :
			typeof s.data === &amp;quot;string&amp;quot; &amp;amp;&amp;amp;
				( s.contentType || &amp;quot;&amp;quot; )
					.indexOf( &amp;quot;application/x-www-form-urlencoded&amp;quot; ) === 0 &amp;amp;&amp;amp;
				rjsonp.test( s.data ) &amp;amp;&amp;amp; &amp;quot;data&amp;quot;
		);
&amp;nbsp;
	// Handle iff the expected data type is &amp;quot;jsonp&amp;quot; or we have a parameter to set
	if ( jsonProp || s.dataTypes[ 0 ] === &amp;quot;jsonp&amp;quot; ) {
&amp;nbsp;
		// Get callback name, remembering preexisting value associated with it
		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
			s.jsonpCallback() :
			s.jsonpCallback;
&amp;nbsp;
		// Insert callback into url or form data
		if ( jsonProp ) {
			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, &amp;quot;$1&amp;quot; + callbackName );
		} else if ( s.jsonp !== false ) {
			s.url += ( rquery.test( s.url ) ? &amp;quot;&amp;amp;&amp;quot; : &amp;quot;?&amp;quot; ) + s.jsonp + &amp;quot;=&amp;quot; + callbackName;
		}
&amp;nbsp;
		// Use data converter to retrieve json after script execution
		s.converters[ &amp;quot;script json&amp;quot; ] = function() {
			if ( !responseContainer ) {
				jQuery.error( callbackName + &amp;quot; was not called&amp;quot; );
			}
			return responseContainer[ 0 ];
		};
&amp;nbsp;
		// Force json dataType
		s.dataTypes[ 0 ] = &amp;quot;json&amp;quot;;
&amp;nbsp;
		// Install callback
		overwritten = window[ callbackName ];
		window[ callbackName ] = function() {
			responseContainer = arguments;
		};
&amp;nbsp;
		// Clean-up function (fires after converters)
		jqXHR.always( function() {
&amp;nbsp;
			// If previous value didn&#039;t exist - remove it
			if ( overwritten === undefined ) {
				jQuery( window ).removeProp( callbackName );
&amp;nbsp;
			// Otherwise restore preexisting value
			} else {
				window[ callbackName ] = overwritten;
			}
&amp;nbsp;
			// Save back as free
			if ( s[ callbackName ] ) {
&amp;nbsp;
				// Make sure that re-using the options doesn&#039;t screw things around
				s.jsonpCallback = originalSettings.jsonpCallback;
&amp;nbsp;
				// Save the callback name for future use
				oldCallbacks.push( callbackName );
			}
&amp;nbsp;
			// Call if it was a function and we have a response
			if ( responseContainer &amp;amp;&amp;amp; isFunction( overwritten ) ) {
				overwritten( responseContainer[ 0 ] );
			}
&amp;nbsp;
			responseContainer = overwritten = undefined;
		} );
&amp;nbsp;
		// Delegate to script
		return &amp;quot;script&amp;quot;;
	}
} );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// Support: Safari 8 only
// In Safari 8 documents created via document.implementation.createHTMLDocument
// collapse sibling forms: the second one becomes a child of the first one.
// Because of that, this security measure has to be disabled in Safari 8.
// https://bugs.webkit.org/show_bug.cgi?id=137337
support.createHTMLDocument = ( function() {
	var body = document.implementation.createHTMLDocument( &amp;quot;&amp;quot; ).body;
	body.innerHTML = &amp;quot;&amp;lt;form&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;form&amp;gt;&amp;lt;/form&amp;gt;&amp;quot;;
	return body.childNodes.length === 2;
} )();
&amp;nbsp;
&amp;nbsp;
// Argument &amp;quot;data&amp;quot; should be string of html
// context (optional): If specified, the fragment will be created in this context,
// defaults to document
// keepScripts (optional): If true, will include scripts passed in the html string
jQuery.parseHTML = function( data, context, keepScripts ) {
	if ( typeof data !== &amp;quot;string&amp;quot; ) {
		return [];
	}
	if ( typeof context === &amp;quot;boolean&amp;quot; ) {
		keepScripts = context;
		context = false;
	}
&amp;nbsp;
	var base, parsed, scripts;
&amp;nbsp;
	if ( !context ) {
&amp;nbsp;
		// Stop scripts or inline event handlers from being executed immediately
		// by using document.implementation
		if ( support.createHTMLDocument ) {
			context = document.implementation.createHTMLDocument( &amp;quot;&amp;quot; );
&amp;nbsp;
			// Set the base href for the created document
			// so any parsed elements with URLs
			// are based on the document&#039;s URL (gh-2965)
			base = context.createElement( &amp;quot;base&amp;quot; );
			base.href = document.location.href;
			context.head.appendChild( base );
		} else {
			context = document;
		}
	}
&amp;nbsp;
	parsed = rsingleTag.exec( data );
	scripts = !keepScripts &amp;amp;&amp;amp; [];
&amp;nbsp;
	// Single tag
	if ( parsed ) {
		return [ context.createElement( parsed[ 1 ] ) ];
	}
&amp;nbsp;
	parsed = buildFragment( [ data ], context, scripts );
&amp;nbsp;
	if ( scripts &amp;amp;&amp;amp; scripts.length ) {
		jQuery( scripts ).remove();
	}
&amp;nbsp;
	return jQuery.merge( [], parsed.childNodes );
};
&amp;nbsp;
&amp;nbsp;
/**
 * Load a url into a page
 */
jQuery.fn.load = function( url, params, callback ) {
	var selector, type, response,
		self = this,
		off = url.indexOf( &amp;quot; &amp;quot; );
&amp;nbsp;
	if ( off &amp;gt; -1 ) {
		selector = stripAndCollapse( url.slice( off ) );
		url = url.slice( 0, off );
	}
&amp;nbsp;
	// If it&#039;s a function
	if ( isFunction( params ) ) {
&amp;nbsp;
		// We assume that it&#039;s the callback
		callback = params;
		params = undefined;
&amp;nbsp;
	// Otherwise, build a param string
	} else if ( params &amp;amp;&amp;amp; typeof params === &amp;quot;object&amp;quot; ) {
		type = &amp;quot;POST&amp;quot;;
	}
&amp;nbsp;
	// If we have elements to modify, make the request
	if ( self.length &amp;gt; 0 ) {
		jQuery.ajax( {
			url: url,
&amp;nbsp;
			// If &amp;quot;type&amp;quot; variable is undefined, then &amp;quot;GET&amp;quot; method will be used.
			// Make value of this field explicit since
			// user can override it through ajaxSetup method
			type: type || &amp;quot;GET&amp;quot;,
			dataType: &amp;quot;html&amp;quot;,
			data: params
		} ).done( function( responseText ) {
&amp;nbsp;
			// Save response for use in complete callback
			response = arguments;
&amp;nbsp;
			self.html( selector ?
&amp;nbsp;
				// If a selector was specified, locate the right elements in a dummy div
				// Exclude scripts to avoid IE &#039;Permission Denied&#039; errors
				jQuery( &amp;quot;&amp;lt;div&amp;gt;&amp;quot; ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
&amp;nbsp;
				// Otherwise use the full result
				responseText );
&amp;nbsp;
		// If the request succeeds, this function gets &amp;quot;data&amp;quot;, &amp;quot;status&amp;quot;, &amp;quot;jqXHR&amp;quot;
		// but they are ignored because response was set above.
		// If it fails, this function gets &amp;quot;jqXHR&amp;quot;, &amp;quot;status&amp;quot;, &amp;quot;error&amp;quot;
		} ).always( callback &amp;amp;&amp;amp; function( jqXHR, status ) {
			self.each( function() {
				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
			} );
		} );
	}
&amp;nbsp;
	return this;
};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
jQuery.expr.pseudos.animated = function( elem ) {
	return jQuery.grep( jQuery.timers, function( fn ) {
		return elem === fn.elem;
	} ).length;
};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
jQuery.offset = {
	setOffset: function( elem, options, i ) {
		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
			position = jQuery.css( elem, &amp;quot;position&amp;quot; ),
			curElem = jQuery( elem ),
			props = {};
&amp;nbsp;
		// Set position first, in-case top/left are set even on static elem
		if ( position === &amp;quot;static&amp;quot; ) {
			elem.style.position = &amp;quot;relative&amp;quot;;
		}
&amp;nbsp;
		curOffset = curElem.offset();
		curCSSTop = jQuery.css( elem, &amp;quot;top&amp;quot; );
		curCSSLeft = jQuery.css( elem, &amp;quot;left&amp;quot; );
		calculatePosition = ( position === &amp;quot;absolute&amp;quot; || position === &amp;quot;fixed&amp;quot; ) &amp;amp;&amp;amp;
			( curCSSTop + curCSSLeft ).indexOf( &amp;quot;auto&amp;quot; ) &amp;gt; -1;
&amp;nbsp;
		// Need to be able to calculate position if either
		// top or left is auto and position is either absolute or fixed
		if ( calculatePosition ) {
			curPosition = curElem.position();
			curTop = curPosition.top;
			curLeft = curPosition.left;
&amp;nbsp;
		} else {
			curTop = parseFloat( curCSSTop ) || 0;
			curLeft = parseFloat( curCSSLeft ) || 0;
		}
&amp;nbsp;
		if ( isFunction( options ) ) {
&amp;nbsp;
			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
		}
&amp;nbsp;
		if ( options.top != null ) {
			props.top = ( options.top - curOffset.top ) + curTop;
		}
		if ( options.left != null ) {
			props.left = ( options.left - curOffset.left ) + curLeft;
		}
&amp;nbsp;
		if ( &amp;quot;using&amp;quot; in options ) {
			options.using.call( elem, props );
&amp;nbsp;
		} else {
			curElem.css( props );
		}
	}
};
&amp;nbsp;
jQuery.fn.extend( {
&amp;nbsp;
	// offset() relates an element&#039;s border box to the document origin
	offset: function( options ) {
&amp;nbsp;
		// Preserve chaining for setter
		if ( arguments.length ) {
			return options === undefined ?
				this :
				this.each( function( i ) {
					jQuery.offset.setOffset( this, options, i );
				} );
		}
&amp;nbsp;
		var rect, win,
			elem = this[ 0 ];
&amp;nbsp;
		if ( !elem ) {
			return;
		}
&amp;nbsp;
		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
		// Support: IE &amp;lt;=11 only
		// Running getBoundingClientRect on a
		// disconnected node in IE throws an error
		if ( !elem.getClientRects().length ) {
			return { top: 0, left: 0 };
		}
&amp;nbsp;
		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
		rect = elem.getBoundingClientRect();
		win = elem.ownerDocument.defaultView;
		return {
			top: rect.top + win.pageYOffset,
			left: rect.left + win.pageXOffset
		};
	},
&amp;nbsp;
	// position() relates an element&#039;s margin box to its offset parent&#039;s padding box
	// This corresponds to the behavior of CSS absolute positioning
	position: function() {
		if ( !this[ 0 ] ) {
			return;
		}
&amp;nbsp;
		var offsetParent, offset, doc,
			elem = this[ 0 ],
			parentOffset = { top: 0, left: 0 };
&amp;nbsp;
		// position:fixed elements are offset from the viewport, which itself always has zero offset
		if ( jQuery.css( elem, &amp;quot;position&amp;quot; ) === &amp;quot;fixed&amp;quot; ) {
&amp;nbsp;
			// Assume position:fixed implies availability of getBoundingClientRect
			offset = elem.getBoundingClientRect();
&amp;nbsp;
		} else {
			offset = this.offset();
&amp;nbsp;
			// Account for the *real* offset parent, which can be the document or its root element
			// when a statically positioned element is identified
			doc = elem.ownerDocument;
			offsetParent = elem.offsetParent || doc.documentElement;
			while ( offsetParent &amp;amp;&amp;amp;
				( offsetParent === doc.body || offsetParent === doc.documentElement ) &amp;amp;&amp;amp;
				jQuery.css( offsetParent, &amp;quot;position&amp;quot; ) === &amp;quot;static&amp;quot; ) {
&amp;nbsp;
				offsetParent = offsetParent.parentNode;
			}
			if ( offsetParent &amp;amp;&amp;amp; offsetParent !== elem &amp;amp;&amp;amp; offsetParent.nodeType === 1 ) {
&amp;nbsp;
				// Incorporate borders into its offset, since they are outside its content origin
				parentOffset = jQuery( offsetParent ).offset();
				parentOffset.top += jQuery.css( offsetParent, &amp;quot;borderTopWidth&amp;quot;, true );
				parentOffset.left += jQuery.css( offsetParent, &amp;quot;borderLeftWidth&amp;quot;, true );
			}
		}
&amp;nbsp;
		// Subtract parent offsets and element margins
		return {
			top: offset.top - parentOffset.top - jQuery.css( elem, &amp;quot;marginTop&amp;quot;, true ),
			left: offset.left - parentOffset.left - jQuery.css( elem, &amp;quot;marginLeft&amp;quot;, true )
		};
	},
&amp;nbsp;
	// This method will return documentElement in the following cases:
	// 1) For the element inside the iframe without offsetParent, this method will return
	//    documentElement of the parent window
	// 2) For the hidden or detached element
	// 3) For body or html element, i.e. in case of the html node - it will return itself
	//
	// but those exceptions were never presented as a real life use-cases
	// and might be considered as more preferable results.
	//
	// This logic, however, is not guaranteed and can change at any point in the future
	offsetParent: function() {
		return this.map( function() {
			var offsetParent = this.offsetParent;
&amp;nbsp;
			while ( offsetParent &amp;amp;&amp;amp; jQuery.css( offsetParent, &amp;quot;position&amp;quot; ) === &amp;quot;static&amp;quot; ) {
				offsetParent = offsetParent.offsetParent;
			}
&amp;nbsp;
			return offsetParent || documentElement;
		} );
	}
} );
&amp;nbsp;
// Create scrollLeft and scrollTop methods
jQuery.each( { scrollLeft: &amp;quot;pageXOffset&amp;quot;, scrollTop: &amp;quot;pageYOffset&amp;quot; }, function( method, prop ) {
	var top = &amp;quot;pageYOffset&amp;quot; === prop;
&amp;nbsp;
	jQuery.fn[ method ] = function( val ) {
		return access( this, function( elem, method, val ) {
&amp;nbsp;
			// Coalesce documents and windows
			var win;
			if ( isWindow( elem ) ) {
				win = elem;
			} else if ( elem.nodeType === 9 ) {
				win = elem.defaultView;
			}
&amp;nbsp;
			if ( val === undefined ) {
				return win ? win[ prop ] : elem[ method ];
			}
&amp;nbsp;
			if ( win ) {
				win.scrollTo(
					!top ? val : win.pageXOffset,
					top ? val : win.pageYOffset
				);
&amp;nbsp;
			} else {
				elem[ method ] = val;
			}
		}, method, val, arguments.length );
	};
} );
&amp;nbsp;
// Support: Safari &amp;lt;=7 - 9.1, Chrome &amp;lt;=37 - 49
// Add the top/left cssHooks using jQuery.fn.position
// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
// getComputedStyle returns percent when specified for top/left/bottom/right;
// rather than make the css module depend on the offset module, just check for it here
jQuery.each( [ &amp;quot;top&amp;quot;, &amp;quot;left&amp;quot; ], function( _i, prop ) {
	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
		function( elem, computed ) {
			if ( computed ) {
				computed = curCSS( elem, prop );
&amp;nbsp;
				// If curCSS returns percentage, fallback to offset
				return rnumnonpx.test( computed ) ?
					jQuery( elem ).position()[ prop ] + &amp;quot;px&amp;quot; :
					computed;
			}
		}
	);
} );
&amp;nbsp;
&amp;nbsp;
// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
jQuery.each( { Height: &amp;quot;height&amp;quot;, Width: &amp;quot;width&amp;quot; }, function( name, type ) {
	jQuery.each( {
		padding: &amp;quot;inner&amp;quot; + name,
		content: type,
		&amp;quot;&amp;quot;: &amp;quot;outer&amp;quot; + name
	}, function( defaultExtra, funcName ) {
&amp;nbsp;
		// Margin is only for outerHeight, outerWidth
		jQuery.fn[ funcName ] = function( margin, value ) {
			var chainable = arguments.length &amp;amp;&amp;amp; ( defaultExtra || typeof margin !== &amp;quot;boolean&amp;quot; ),
				extra = defaultExtra || ( margin === true || value === true ? &amp;quot;margin&amp;quot; : &amp;quot;border&amp;quot; );
&amp;nbsp;
			return access( this, function( elem, type, value ) {
				var doc;
&amp;nbsp;
				if ( isWindow( elem ) ) {
&amp;nbsp;
					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
					return funcName.indexOf( &amp;quot;outer&amp;quot; ) === 0 ?
						elem[ &amp;quot;inner&amp;quot; + name ] :
						elem.document.documentElement[ &amp;quot;client&amp;quot; + name ];
				}
&amp;nbsp;
				// Get document width or height
				if ( elem.nodeType === 9 ) {
					doc = elem.documentElement;
&amp;nbsp;
					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
					// whichever is greatest
					return Math.max(
						elem.body[ &amp;quot;scroll&amp;quot; + name ], doc[ &amp;quot;scroll&amp;quot; + name ],
						elem.body[ &amp;quot;offset&amp;quot; + name ], doc[ &amp;quot;offset&amp;quot; + name ],
						doc[ &amp;quot;client&amp;quot; + name ]
					);
				}
&amp;nbsp;
				return value === undefined ?
&amp;nbsp;
					// Get width or height on the element, requesting but not forcing parseFloat
					jQuery.css( elem, type, extra ) :
&amp;nbsp;
					// Set width or height on the element
					jQuery.style( elem, type, value, extra );
			}, type, chainable ? margin : undefined, chainable );
		};
	} );
} );
&amp;nbsp;
&amp;nbsp;
jQuery.each( [
	&amp;quot;ajaxStart&amp;quot;,
	&amp;quot;ajaxStop&amp;quot;,
	&amp;quot;ajaxComplete&amp;quot;,
	&amp;quot;ajaxError&amp;quot;,
	&amp;quot;ajaxSuccess&amp;quot;,
	&amp;quot;ajaxSend&amp;quot;
], function( _i, type ) {
	jQuery.fn[ type ] = function( fn ) {
		return this.on( type, fn );
	};
} );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
jQuery.fn.extend( {
&amp;nbsp;
	bind: function( types, data, fn ) {
		return this.on( types, null, data, fn );
	},
	unbind: function( types, fn ) {
		return this.off( types, null, fn );
	},
&amp;nbsp;
	delegate: function( selector, types, data, fn ) {
		return this.on( types, selector, data, fn );
	},
	undelegate: function( selector, types, fn ) {
&amp;nbsp;
		// ( namespace ) or ( selector, types [, fn] )
		return arguments.length === 1 ?
			this.off( selector, &amp;quot;**&amp;quot; ) :
			this.off( types, selector || &amp;quot;**&amp;quot;, fn );
	},
&amp;nbsp;
	hover: function( fnOver, fnOut ) {
		return this
			.on( &amp;quot;mouseenter&amp;quot;, fnOver )
			.on( &amp;quot;mouseleave&amp;quot;, fnOut || fnOver );
	}
} );
&amp;nbsp;
jQuery.each(
	( &amp;quot;blur focus focusin focusout resize scroll click dblclick &amp;quot; +
	&amp;quot;mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave &amp;quot; +
	&amp;quot;change select submit keydown keypress keyup contextmenu&amp;quot; ).split( &amp;quot; &amp;quot; ),
	function( _i, name ) {
&amp;nbsp;
		// Handle event binding
		jQuery.fn[ name ] = function( data, fn ) {
			return arguments.length &amp;gt; 0 ?
				this.on( name, null, data, fn ) :
				this.trigger( name );
		};
	}
);
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// Support: Android &amp;lt;=4.0 only
// Make sure we trim BOM and NBSP
// Require that the &amp;quot;whitespace run&amp;quot; starts from a non-whitespace
// to avoid O(N^2) behavior when the engine would try matching &amp;quot;\s+$&amp;quot; at each space position.
var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
&amp;nbsp;
// Bind a function to a context, optionally partially applying any
// arguments.
// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
// However, it is not slated for removal any time soon
jQuery.proxy = function( fn, context ) {
	var tmp, args, proxy;
&amp;nbsp;
	if ( typeof context === &amp;quot;string&amp;quot; ) {
		tmp = fn[ context ];
		context = fn;
		fn = tmp;
	}
&amp;nbsp;
	// Quick check to determine if target is callable, in the spec
	// this throws a TypeError, but we will just return undefined.
	if ( !isFunction( fn ) ) {
		return undefined;
	}
&amp;nbsp;
	// Simulated bind
	args = slice.call( arguments, 2 );
	proxy = function() {
		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
	};
&amp;nbsp;
	// Set the guid of unique handler to the same of original handler, so it can be removed
	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
&amp;nbsp;
	return proxy;
};
&amp;nbsp;
jQuery.holdReady = function( hold ) {
	if ( hold ) {
		jQuery.readyWait++;
	} else {
		jQuery.ready( true );
	}
};
jQuery.isArray = Array.isArray;
jQuery.parseJSON = JSON.parse;
jQuery.nodeName = nodeName;
jQuery.isFunction = isFunction;
jQuery.isWindow = isWindow;
jQuery.camelCase = camelCase;
jQuery.type = toType;
&amp;nbsp;
jQuery.now = Date.now;
&amp;nbsp;
jQuery.isNumeric = function( obj ) {
&amp;nbsp;
	// As of jQuery 3.0, isNumeric is limited to
	// strings and numbers (primitives or objects)
	// that can be coerced to finite numbers (gh-2662)
	var type = jQuery.type( obj );
	return ( type === &amp;quot;number&amp;quot; || type === &amp;quot;string&amp;quot; ) &amp;amp;&amp;amp;
&amp;nbsp;
		// parseFloat NaNs numeric-cast false positives (&amp;quot;&amp;quot;)
		// ...but misinterprets leading-number strings, particularly hex literals (&amp;quot;0x...&amp;quot;)
		// subtraction forces infinities to NaN
		!isNaN( obj - parseFloat( obj ) );
};
&amp;nbsp;
jQuery.trim = function( text ) {
	return text == null ?
		&amp;quot;&amp;quot; :
		( text + &amp;quot;&amp;quot; ).replace( rtrim, &amp;quot;$1&amp;quot; );
};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// Register as a named AMD module, since jQuery can be concatenated with other
// files that may use define, but not via a proper concatenation script that
// understands anonymous AMD modules. A named AMD is safest and most robust
// way to register. Lowercase jquery is used because AMD module names are
// derived from file names, and jQuery is normally delivered in a lowercase
// file name. Do this after creating the global so that if an AMD module wants
// to call noConflict to hide this version of jQuery, it will work.
&amp;nbsp;
// Note that for maximum portability, libraries that are not jQuery should
// declare themselves as anonymous modules, and avoid setting a global if an
// AMD loader is present. jQuery is a special case. For more information, see
// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
&amp;nbsp;
if ( typeof define === &amp;quot;function&amp;quot; &amp;amp;&amp;amp; define.amd ) {
	define( &amp;quot;jquery&amp;quot;, [], function() {
		return jQuery;
	} );
}
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
var
&amp;nbsp;
	// Map over jQuery in case of overwrite
	_jQuery = window.jQuery,
&amp;nbsp;
	// Map over the $ in case of overwrite
	_$ = window.$;
&amp;nbsp;
jQuery.noConflict = function( deep ) {
	if ( window.$ === jQuery ) {
		window.$ = _$;
	}
&amp;nbsp;
	if ( deep &amp;amp;&amp;amp; window.jQuery === jQuery ) {
		window.jQuery = _jQuery;
	}
&amp;nbsp;
	return jQuery;
};
&amp;nbsp;
// Expose jQuery and $ identifiers, even in AMD
// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)
// and CommonJS for browser emulators (trac-13566)
if ( typeof noGlobal === &amp;quot;undefined&amp;quot; ) {
	window.jQuery = window.$ = jQuery;
}
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
return jQuery;
} );&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sat, 10 Jan 2026 11:04:18 +0000</pubDate>
        </item>
        <item>
            <title>jquery-3.7.1.slim.js</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=software:development:web:docs:web:javascript:javascript:jquery:jquery-3.7.1.slim.js&amp;rev=1768043299</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;jquery-371slimjs&quot;&gt;jquery-3.7.1.slim.js&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=software:development:web:docs:web:javascript:javascript:jquery:jquery-3.7.1.slim.js&amp;amp;codeblock=0&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_js&quot;&gt;jquery-3.7.1.slim.js&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code js&quot;&gt;/*!
 * jQuery JavaScript Library v3.7.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/animatedSelector,-effects/Tween
 * https://jquery.com/
 *
 * Copyright OpenJS Foundation and other contributors
 * Released under the MIT license
 * https://jquery.org/license
 *
 * Date: 2023-08-28T13:37Z
 */
( function( global, factory ) {
&amp;nbsp;
	&amp;quot;use strict&amp;quot;;
&amp;nbsp;
	if ( typeof module === &amp;quot;object&amp;quot; &amp;amp;&amp;amp; typeof module.exports === &amp;quot;object&amp;quot; ) {
&amp;nbsp;
		// For CommonJS and CommonJS-like environments where a proper `window`
		// is present, execute the factory and get jQuery.
		// For environments that do not have a `window` with a `document`
		// (such as Node.js), expose a factory as module.exports.
		// This accentuates the need for the creation of a real `window`.
		// e.g. var jQuery = require(&amp;quot;jquery&amp;quot;)(window);
		// See ticket trac-14549 for more info.
		module.exports = global.document ?
			factory( global, true ) :
			function( w ) {
				if ( !w.document ) {
					throw new Error( &amp;quot;jQuery requires a window with a document&amp;quot; );
				}
				return factory( w );
			};
	} else {
		factory( global );
	}
&amp;nbsp;
// Pass this if window is not defined yet
} )( typeof window !== &amp;quot;undefined&amp;quot; ? window : this, function( window, noGlobal ) {
&amp;nbsp;
// Edge &amp;lt;= 12 - 13+, Firefox &amp;lt;=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
// enough that all such attempts are guarded in a try block.
&amp;quot;use strict&amp;quot;;
&amp;nbsp;
var arr = [];
&amp;nbsp;
var getProto = Object.getPrototypeOf;
&amp;nbsp;
var slice = arr.slice;
&amp;nbsp;
var flat = arr.flat ? function( array ) {
	return arr.flat.call( array );
} : function( array ) {
	return arr.concat.apply( [], array );
};
&amp;nbsp;
&amp;nbsp;
var push = arr.push;
&amp;nbsp;
var indexOf = arr.indexOf;
&amp;nbsp;
var class2type = {};
&amp;nbsp;
var toString = class2type.toString;
&amp;nbsp;
var hasOwn = class2type.hasOwnProperty;
&amp;nbsp;
var fnToString = hasOwn.toString;
&amp;nbsp;
var ObjectFunctionString = fnToString.call( Object );
&amp;nbsp;
var support = {};
&amp;nbsp;
var isFunction = function isFunction( obj ) {
&amp;nbsp;
		// Support: Chrome &amp;lt;=57, Firefox &amp;lt;=52
		// In some browsers, typeof returns &amp;quot;function&amp;quot; for HTML &amp;lt;object&amp;gt; elements
		// (i.e., `typeof document.createElement( &amp;quot;object&amp;quot; ) === &amp;quot;function&amp;quot;`).
		// We don&#039;t want to classify *any* DOM node as a function.
		// Support: QtWeb &amp;lt;=3.8.5, WebKit &amp;lt;=534.34, wkhtmltopdf tool &amp;lt;=0.12.5
		// Plus for old WebKit, typeof returns &amp;quot;function&amp;quot; for HTML collections
		// (e.g., `typeof document.getElementsByTagName(&amp;quot;div&amp;quot;) === &amp;quot;function&amp;quot;`). (gh-4756)
		return typeof obj === &amp;quot;function&amp;quot; &amp;amp;&amp;amp; typeof obj.nodeType !== &amp;quot;number&amp;quot; &amp;amp;&amp;amp;
			typeof obj.item !== &amp;quot;function&amp;quot;;
	};
&amp;nbsp;
&amp;nbsp;
var isWindow = function isWindow( obj ) {
		return obj != null &amp;amp;&amp;amp; obj === obj.window;
	};
&amp;nbsp;
&amp;nbsp;
var document = window.document;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
	var preservedScriptAttributes = {
		type: true,
		src: true,
		nonce: true,
		noModule: true
	};
&amp;nbsp;
	function DOMEval( code, node, doc ) {
		doc = doc || document;
&amp;nbsp;
		var i, val,
			script = doc.createElement( &amp;quot;script&amp;quot; );
&amp;nbsp;
		script.text = code;
		if ( node ) {
			for ( i in preservedScriptAttributes ) {
&amp;nbsp;
				// Support: Firefox 64+, Edge 18+
				// Some browsers don&#039;t support the &amp;quot;nonce&amp;quot; property on scripts.
				// On the other hand, just using `getAttribute` is not enough as
				// the `nonce` attribute is reset to an empty string whenever it
				// becomes browsing-context connected.
				// See https://github.com/whatwg/html/issues/2369
				// See https://html.spec.whatwg.org/#nonce-attributes
				// The `node.getAttribute` check was added for the sake of
				// `jQuery.globalEval` so that it can fake a nonce-containing node
				// via an object.
				val = node[ i ] || node.getAttribute &amp;amp;&amp;amp; node.getAttribute( i );
				if ( val ) {
					script.setAttribute( i, val );
				}
			}
		}
		doc.head.appendChild( script ).parentNode.removeChild( script );
	}
&amp;nbsp;
&amp;nbsp;
function toType( obj ) {
	if ( obj == null ) {
		return obj + &amp;quot;&amp;quot;;
	}
&amp;nbsp;
	// Support: Android &amp;lt;=2.3 only (functionish RegExp)
	return typeof obj === &amp;quot;object&amp;quot; || typeof obj === &amp;quot;function&amp;quot; ?
		class2type[ toString.call( obj ) ] || &amp;quot;object&amp;quot; :
		typeof obj;
}
/* global Symbol */
// Defining this global in .eslintrc.json would create a danger of using the global
// unguarded in another place, it seems safer to define global only for this module
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
var version = &amp;quot;3.7.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/animatedSelector,-effects/Tween&amp;quot;,
&amp;nbsp;
	rhtmlSuffix = /HTML$/i,
&amp;nbsp;
	// Define a local copy of jQuery
	jQuery = function( selector, context ) {
&amp;nbsp;
		// The jQuery object is actually just the init constructor &#039;enhanced&#039;
		// Need init if jQuery is called (just allow error to be thrown if not included)
		return new jQuery.fn.init( selector, context );
	};
&amp;nbsp;
jQuery.fn = jQuery.prototype = {
&amp;nbsp;
	// The current version of jQuery being used
	jquery: version,
&amp;nbsp;
	constructor: jQuery,
&amp;nbsp;
	// The default length of a jQuery object is 0
	length: 0,
&amp;nbsp;
	toArray: function() {
		return slice.call( this );
	},
&amp;nbsp;
	// Get the Nth element in the matched element set OR
	// Get the whole matched element set as a clean array
	get: function( num ) {
&amp;nbsp;
		// Return all the elements in a clean array
		if ( num == null ) {
			return slice.call( this );
		}
&amp;nbsp;
		// Return just the one element from the set
		return num &amp;lt; 0 ? this[ num + this.length ] : this[ num ];
	},
&amp;nbsp;
	// Take an array of elements and push it onto the stack
	// (returning the new matched element set)
	pushStack: function( elems ) {
&amp;nbsp;
		// Build a new jQuery matched element set
		var ret = jQuery.merge( this.constructor(), elems );
&amp;nbsp;
		// Add the old object onto the stack (as a reference)
		ret.prevObject = this;
&amp;nbsp;
		// Return the newly-formed element set
		return ret;
	},
&amp;nbsp;
	// Execute a callback for every element in the matched set.
	each: function( callback ) {
		return jQuery.each( this, callback );
	},
&amp;nbsp;
	map: function( callback ) {
		return this.pushStack( jQuery.map( this, function( elem, i ) {
			return callback.call( elem, i, elem );
		} ) );
	},
&amp;nbsp;
	slice: function() {
		return this.pushStack( slice.apply( this, arguments ) );
	},
&amp;nbsp;
	first: function() {
		return this.eq( 0 );
	},
&amp;nbsp;
	last: function() {
		return this.eq( -1 );
	},
&amp;nbsp;
	even: function() {
		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
			return ( i + 1 ) % 2;
		} ) );
	},
&amp;nbsp;
	odd: function() {
		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
			return i % 2;
		} ) );
	},
&amp;nbsp;
	eq: function( i ) {
		var len = this.length,
			j = +i + ( i &amp;lt; 0 ? len : 0 );
		return this.pushStack( j &amp;gt;= 0 &amp;amp;&amp;amp; j &amp;lt; len ? [ this[ j ] ] : [] );
	},
&amp;nbsp;
	end: function() {
		return this.prevObject || this.constructor();
	},
&amp;nbsp;
	// For internal use only.
	// Behaves like an Array&#039;s method, not like a jQuery method.
	push: push,
	sort: arr.sort,
	splice: arr.splice
};
&amp;nbsp;
jQuery.extend = jQuery.fn.extend = function() {
	var options, name, src, copy, copyIsArray, clone,
		target = arguments[ 0 ] || {},
		i = 1,
		length = arguments.length,
		deep = false;
&amp;nbsp;
	// Handle a deep copy situation
	if ( typeof target === &amp;quot;boolean&amp;quot; ) {
		deep = target;
&amp;nbsp;
		// Skip the boolean and the target
		target = arguments[ i ] || {};
		i++;
	}
&amp;nbsp;
	// Handle case when target is a string or something (possible in deep copy)
	if ( typeof target !== &amp;quot;object&amp;quot; &amp;amp;&amp;amp; !isFunction( target ) ) {
		target = {};
	}
&amp;nbsp;
	// Extend jQuery itself if only one argument is passed
	if ( i === length ) {
		target = this;
		i--;
	}
&amp;nbsp;
	for ( ; i &amp;lt; length; i++ ) {
&amp;nbsp;
		// Only deal with non-null/undefined values
		if ( ( options = arguments[ i ] ) != null ) {
&amp;nbsp;
			// Extend the base object
			for ( name in options ) {
				copy = options[ name ];
&amp;nbsp;
				// Prevent Object.prototype pollution
				// Prevent never-ending loop
				if ( name === &amp;quot;__proto__&amp;quot; || target === copy ) {
					continue;
				}
&amp;nbsp;
				// Recurse if we&#039;re merging plain objects or arrays
				if ( deep &amp;amp;&amp;amp; copy &amp;amp;&amp;amp; ( jQuery.isPlainObject( copy ) ||
					( copyIsArray = Array.isArray( copy ) ) ) ) {
					src = target[ name ];
&amp;nbsp;
					// Ensure proper type for the source value
					if ( copyIsArray &amp;amp;&amp;amp; !Array.isArray( src ) ) {
						clone = [];
					} else if ( !copyIsArray &amp;amp;&amp;amp; !jQuery.isPlainObject( src ) ) {
						clone = {};
					} else {
						clone = src;
					}
					copyIsArray = false;
&amp;nbsp;
					// Never move original objects, clone them
					target[ name ] = jQuery.extend( deep, clone, copy );
&amp;nbsp;
				// Don&#039;t bring in undefined values
				} else if ( copy !== undefined ) {
					target[ name ] = copy;
				}
			}
		}
	}
&amp;nbsp;
	// Return the modified object
	return target;
};
&amp;nbsp;
jQuery.extend( {
&amp;nbsp;
	// Unique for each copy of jQuery on the page
	expando: &amp;quot;jQuery&amp;quot; + ( version + Math.random() ).replace( /\D/g, &amp;quot;&amp;quot; ),
&amp;nbsp;
	// Assume jQuery is ready without the ready module
	isReady: true,
&amp;nbsp;
	error: function( msg ) {
		throw new Error( msg );
	},
&amp;nbsp;
	noop: function() {},
&amp;nbsp;
	isPlainObject: function( obj ) {
		var proto, Ctor;
&amp;nbsp;
		// Detect obvious negatives
		// Use toString instead of jQuery.type to catch host objects
		if ( !obj || toString.call( obj ) !== &amp;quot;[object Object]&amp;quot; ) {
			return false;
		}
&amp;nbsp;
		proto = getProto( obj );
&amp;nbsp;
		// Objects with no prototype (e.g., `Object.create( null )`) are plain
		if ( !proto ) {
			return true;
		}
&amp;nbsp;
		// Objects with prototype are plain iff they were constructed by a global Object function
		Ctor = hasOwn.call( proto, &amp;quot;constructor&amp;quot; ) &amp;amp;&amp;amp; proto.constructor;
		return typeof Ctor === &amp;quot;function&amp;quot; &amp;amp;&amp;amp; fnToString.call( Ctor ) === ObjectFunctionString;
	},
&amp;nbsp;
	isEmptyObject: function( obj ) {
		var name;
&amp;nbsp;
		for ( name in obj ) {
			return false;
		}
		return true;
	},
&amp;nbsp;
	// Evaluates a script in a provided context; falls back to the global one
	// if not specified.
	globalEval: function( code, options, doc ) {
		DOMEval( code, { nonce: options &amp;amp;&amp;amp; options.nonce }, doc );
	},
&amp;nbsp;
	each: function( obj, callback ) {
		var length, i = 0;
&amp;nbsp;
		if ( isArrayLike( obj ) ) {
			length = obj.length;
			for ( ; i &amp;lt; length; i++ ) {
				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
					break;
				}
			}
		} else {
			for ( i in obj ) {
				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
					break;
				}
			}
		}
&amp;nbsp;
		return obj;
	},
&amp;nbsp;
&amp;nbsp;
	// Retrieve the text value of an array of DOM nodes
	text: function( elem ) {
		var node,
			ret = &amp;quot;&amp;quot;,
			i = 0,
			nodeType = elem.nodeType;
&amp;nbsp;
		if ( !nodeType ) {
&amp;nbsp;
			// If no nodeType, this is expected to be an array
			while ( ( node = elem[ i++ ] ) ) {
&amp;nbsp;
				// Do not traverse comment nodes
				ret += jQuery.text( node );
			}
		}
		if ( nodeType === 1 || nodeType === 11 ) {
			return elem.textContent;
		}
		if ( nodeType === 9 ) {
			return elem.documentElement.textContent;
		}
		if ( nodeType === 3 || nodeType === 4 ) {
			return elem.nodeValue;
		}
&amp;nbsp;
		// Do not include comment or processing instruction nodes
&amp;nbsp;
		return ret;
	},
&amp;nbsp;
	// results is for internal usage only
	makeArray: function( arr, results ) {
		var ret = results || [];
&amp;nbsp;
		if ( arr != null ) {
			if ( isArrayLike( Object( arr ) ) ) {
				jQuery.merge( ret,
					typeof arr === &amp;quot;string&amp;quot; ?
						[ arr ] : arr
				);
			} else {
				push.call( ret, arr );
			}
		}
&amp;nbsp;
		return ret;
	},
&amp;nbsp;
	inArray: function( elem, arr, i ) {
		return arr == null ? -1 : indexOf.call( arr, elem, i );
	},
&amp;nbsp;
	isXMLDoc: function( elem ) {
		var namespace = elem &amp;amp;&amp;amp; elem.namespaceURI,
			docElem = elem &amp;amp;&amp;amp; ( elem.ownerDocument || elem ).documentElement;
&amp;nbsp;
		// Assume HTML when documentElement doesn&#039;t yet exist, such as inside
		// document fragments.
		return !rhtmlSuffix.test( namespace || docElem &amp;amp;&amp;amp; docElem.nodeName || &amp;quot;HTML&amp;quot; );
	},
&amp;nbsp;
	// Support: Android &amp;lt;=4.0 only, PhantomJS 1 only
	// push.apply(_, arraylike) throws on ancient WebKit
	merge: function( first, second ) {
		var len = +second.length,
			j = 0,
			i = first.length;
&amp;nbsp;
		for ( ; j &amp;lt; len; j++ ) {
			first[ i++ ] = second[ j ];
		}
&amp;nbsp;
		first.length = i;
&amp;nbsp;
		return first;
	},
&amp;nbsp;
	grep: function( elems, callback, invert ) {
		var callbackInverse,
			matches = [],
			i = 0,
			length = elems.length,
			callbackExpect = !invert;
&amp;nbsp;
		// Go through the array, only saving the items
		// that pass the validator function
		for ( ; i &amp;lt; length; i++ ) {
			callbackInverse = !callback( elems[ i ], i );
			if ( callbackInverse !== callbackExpect ) {
				matches.push( elems[ i ] );
			}
		}
&amp;nbsp;
		return matches;
	},
&amp;nbsp;
	// arg is for internal usage only
	map: function( elems, callback, arg ) {
		var length, value,
			i = 0,
			ret = [];
&amp;nbsp;
		// Go through the array, translating each of the items to their new values
		if ( isArrayLike( elems ) ) {
			length = elems.length;
			for ( ; i &amp;lt; length; i++ ) {
				value = callback( elems[ i ], i, arg );
&amp;nbsp;
				if ( value != null ) {
					ret.push( value );
				}
			}
&amp;nbsp;
		// Go through every key on the object,
		} else {
			for ( i in elems ) {
				value = callback( elems[ i ], i, arg );
&amp;nbsp;
				if ( value != null ) {
					ret.push( value );
				}
			}
		}
&amp;nbsp;
		// Flatten any nested arrays
		return flat( ret );
	},
&amp;nbsp;
	// A global GUID counter for objects
	guid: 1,
&amp;nbsp;
	// jQuery.support is not used in Core but other projects attach their
	// properties to it so it needs to exist.
	support: support
} );
&amp;nbsp;
if ( typeof Symbol === &amp;quot;function&amp;quot; ) {
	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
}
&amp;nbsp;
// Populate the class2type map
jQuery.each( &amp;quot;Boolean Number String Function Array Date RegExp Object Error Symbol&amp;quot;.split( &amp;quot; &amp;quot; ),
	function( _i, name ) {
		class2type[ &amp;quot;[object &amp;quot; + name + &amp;quot;]&amp;quot; ] = name.toLowerCase();
	} );
&amp;nbsp;
function isArrayLike( obj ) {
&amp;nbsp;
	// Support: real iOS 8.2 only (not reproducible in simulator)
	// `in` check used to prevent JIT error (gh-2145)
	// hasOwn isn&#039;t used here due to false negatives
	// regarding Nodelist length in IE
	var length = !!obj &amp;amp;&amp;amp; &amp;quot;length&amp;quot; in obj &amp;amp;&amp;amp; obj.length,
		type = toType( obj );
&amp;nbsp;
	if ( isFunction( obj ) || isWindow( obj ) ) {
		return false;
	}
&amp;nbsp;
	return type === &amp;quot;array&amp;quot; || length === 0 ||
		typeof length === &amp;quot;number&amp;quot; &amp;amp;&amp;amp; length &amp;gt; 0 &amp;amp;&amp;amp; ( length - 1 ) in obj;
}
&amp;nbsp;
&amp;nbsp;
function nodeName( elem, name ) {
&amp;nbsp;
	return elem.nodeName &amp;amp;&amp;amp; elem.nodeName.toLowerCase() === name.toLowerCase();
&amp;nbsp;
}
var pop = arr.pop;
&amp;nbsp;
&amp;nbsp;
var sort = arr.sort;
&amp;nbsp;
&amp;nbsp;
var splice = arr.splice;
&amp;nbsp;
&amp;nbsp;
var whitespace = &amp;quot;[\\x20\\t\\r\\n\\f]&amp;quot;;
&amp;nbsp;
&amp;nbsp;
var rtrimCSS = new RegExp(
	&amp;quot;^&amp;quot; + whitespace + &amp;quot;+|((?:^|[^\\\\])(?:\\\\.)*)&amp;quot; + whitespace + &amp;quot;+$&amp;quot;,
	&amp;quot;g&amp;quot;
);
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// Note: an element does not contain itself
jQuery.contains = function( a, b ) {
	var bup = b &amp;amp;&amp;amp; b.parentNode;
&amp;nbsp;
	return a === bup || !!( bup &amp;amp;&amp;amp; bup.nodeType === 1 &amp;amp;&amp;amp; (
&amp;nbsp;
		// Support: IE 9 - 11+
		// IE doesn&#039;t have `contains` on SVG.
		a.contains ?
			a.contains( bup ) :
			a.compareDocumentPosition &amp;amp;&amp;amp; a.compareDocumentPosition( bup ) &amp;amp; 16
	) );
};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// CSS string/identifier serialization
// https://drafts.csswg.org/cssom/#common-serializing-idioms
var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
&amp;nbsp;
function fcssescape( ch, asCodePoint ) {
	if ( asCodePoint ) {
&amp;nbsp;
		// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
		if ( ch === &amp;quot;\0&amp;quot; ) {
			return &amp;quot;\uFFFD&amp;quot;;
		}
&amp;nbsp;
		// Control characters and (dependent upon position) numbers get escaped as code points
		return ch.slice( 0, -1 ) + &amp;quot;\\&amp;quot; + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + &amp;quot; &amp;quot;;
	}
&amp;nbsp;
	// Other potentially-special ASCII characters get backslash-escaped
	return &amp;quot;\\&amp;quot; + ch;
}
&amp;nbsp;
jQuery.escapeSelector = function( sel ) {
	return ( sel + &amp;quot;&amp;quot; ).replace( rcssescape, fcssescape );
};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
var preferredDoc = document,
	pushNative = push;
&amp;nbsp;
( function() {
&amp;nbsp;
var i,
	Expr,
	outermostContext,
	sortInput,
	hasDuplicate,
	push = pushNative,
&amp;nbsp;
	// Local document vars
	document,
	documentElement,
	documentIsHTML,
	rbuggyQSA,
	matches,
&amp;nbsp;
	// Instance-specific data
	expando = jQuery.expando,
	dirruns = 0,
	done = 0,
	classCache = createCache(),
	tokenCache = createCache(),
	compilerCache = createCache(),
	nonnativeSelectorCache = createCache(),
	sortOrder = function( a, b ) {
		if ( a === b ) {
			hasDuplicate = true;
		}
		return 0;
	},
&amp;nbsp;
	booleans = &amp;quot;checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|&amp;quot; +
		&amp;quot;loop|multiple|open|readonly|required|scoped&amp;quot;,
&amp;nbsp;
	// Regular expressions
&amp;nbsp;
	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
	identifier = &amp;quot;(?:\\\\[\\da-fA-F]{1,6}&amp;quot; + whitespace +
		&amp;quot;?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+&amp;quot;,
&amp;nbsp;
	// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors
	attributes = &amp;quot;\\[&amp;quot; + whitespace + &amp;quot;*(&amp;quot; + identifier + &amp;quot;)(?:&amp;quot; + whitespace +
&amp;nbsp;
		// Operator (capture 2)
		&amp;quot;*([*^$|!~]?=)&amp;quot; + whitespace +
&amp;nbsp;
		// &amp;quot;Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]&amp;quot;
		&amp;quot;*(?:&#039;((?:\\\\.|[^\\\\&#039;])*)&#039;|\&amp;quot;((?:\\\\.|[^\\\\\&amp;quot;])*)\&amp;quot;|(&amp;quot; + identifier + &amp;quot;))|)&amp;quot; +
		whitespace + &amp;quot;*\\]&amp;quot;,
&amp;nbsp;
	pseudos = &amp;quot;:(&amp;quot; + identifier + &amp;quot;)(?:\\((&amp;quot; +
&amp;nbsp;
		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
		// 1. quoted (capture 3; capture 4 or capture 5)
		&amp;quot;(&#039;((?:\\\\.|[^\\\\&#039;])*)&#039;|\&amp;quot;((?:\\\\.|[^\\\\\&amp;quot;])*)\&amp;quot;)|&amp;quot; +
&amp;nbsp;
		// 2. simple (capture 6)
		&amp;quot;((?:\\\\.|[^\\\\()[\\]]|&amp;quot; + attributes + &amp;quot;)*)|&amp;quot; +
&amp;nbsp;
		// 3. anything else (capture 2)
		&amp;quot;.*&amp;quot; +
		&amp;quot;)\\)|)&amp;quot;,
&amp;nbsp;
	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
	rwhitespace = new RegExp( whitespace + &amp;quot;+&amp;quot;, &amp;quot;g&amp;quot; ),
&amp;nbsp;
	rcomma = new RegExp( &amp;quot;^&amp;quot; + whitespace + &amp;quot;*,&amp;quot; + whitespace + &amp;quot;*&amp;quot; ),
	rleadingCombinator = new RegExp( &amp;quot;^&amp;quot; + whitespace + &amp;quot;*([&amp;gt;+~]|&amp;quot; + whitespace + &amp;quot;)&amp;quot; +
		whitespace + &amp;quot;*&amp;quot; ),
	rdescend = new RegExp( whitespace + &amp;quot;|&amp;gt;&amp;quot; ),
&amp;nbsp;
	rpseudo = new RegExp( pseudos ),
	ridentifier = new RegExp( &amp;quot;^&amp;quot; + identifier + &amp;quot;$&amp;quot; ),
&amp;nbsp;
	matchExpr = {
		ID: new RegExp( &amp;quot;^#(&amp;quot; + identifier + &amp;quot;)&amp;quot; ),
		CLASS: new RegExp( &amp;quot;^\\.(&amp;quot; + identifier + &amp;quot;)&amp;quot; ),
		TAG: new RegExp( &amp;quot;^(&amp;quot; + identifier + &amp;quot;|[*])&amp;quot; ),
		ATTR: new RegExp( &amp;quot;^&amp;quot; + attributes ),
		PSEUDO: new RegExp( &amp;quot;^&amp;quot; + pseudos ),
		CHILD: new RegExp(
			&amp;quot;^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(&amp;quot; +
				whitespace + &amp;quot;*(even|odd|(([+-]|)(\\d*)n|)&amp;quot; + whitespace + &amp;quot;*(?:([+-]|)&amp;quot; +
				whitespace + &amp;quot;*(\\d+)|))&amp;quot; + whitespace + &amp;quot;*\\)|)&amp;quot;, &amp;quot;i&amp;quot; ),
		bool: new RegExp( &amp;quot;^(?:&amp;quot; + booleans + &amp;quot;)$&amp;quot;, &amp;quot;i&amp;quot; ),
&amp;nbsp;
		// For use in libraries implementing .is()
		// We use this for POS matching in `select`
		needsContext: new RegExp( &amp;quot;^&amp;quot; + whitespace +
			&amp;quot;*[&amp;gt;+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(&amp;quot; + whitespace +
			&amp;quot;*((?:-\\d)?\\d*)&amp;quot; + whitespace + &amp;quot;*\\)|)(?=[^-]|$)&amp;quot;, &amp;quot;i&amp;quot; )
	},
&amp;nbsp;
	rinputs = /^(?:input|select|textarea|button)$/i,
	rheader = /^h\d$/i,
&amp;nbsp;
	// Easily-parseable/retrievable ID or TAG or CLASS selectors
	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
&amp;nbsp;
	rsibling = /[+~]/,
&amp;nbsp;
	// CSS escapes
	// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters
	runescape = new RegExp( &amp;quot;\\\\[\\da-fA-F]{1,6}&amp;quot; + whitespace +
		&amp;quot;?|\\\\([^\\r\\n\\f])&amp;quot;, &amp;quot;g&amp;quot; ),
	funescape = function( escape, nonHex ) {
		var high = &amp;quot;0x&amp;quot; + escape.slice( 1 ) - 0x10000;
&amp;nbsp;
		if ( nonHex ) {
&amp;nbsp;
			// Strip the backslash prefix from a non-hex escape sequence
			return nonHex;
		}
&amp;nbsp;
		// Replace a hexadecimal escape sequence with the encoded Unicode code point
		// Support: IE &amp;lt;=11+
		// For values outside the Basic Multilingual Plane (BMP), manually construct a
		// surrogate pair
		return high &amp;lt; 0 ?
			String.fromCharCode( high + 0x10000 ) :
			String.fromCharCode( high &amp;gt;&amp;gt; 10 | 0xD800, high &amp;amp; 0x3FF | 0xDC00 );
	},
&amp;nbsp;
	// Used for iframes; see `setDocument`.
	// Support: IE 9 - 11+, Edge 12 - 18+
	// Removing the function wrapper causes a &amp;quot;Permission Denied&amp;quot;
	// error in IE/Edge.
	unloadHandler = function() {
		setDocument();
	},
&amp;nbsp;
	inDisabledFieldset = addCombinator(
		function( elem ) {
			return elem.disabled === true &amp;amp;&amp;amp; nodeName( elem, &amp;quot;fieldset&amp;quot; );
		},
		{ dir: &amp;quot;parentNode&amp;quot;, next: &amp;quot;legend&amp;quot; }
	);
&amp;nbsp;
// Support: IE &amp;lt;=9 only
// Accessing document.activeElement can throw unexpectedly
// https://bugs.jquery.com/ticket/13393
function safeActiveElement() {
	try {
		return document.activeElement;
	} catch ( err ) { }
}
&amp;nbsp;
// Optimize for push.apply( _, NodeList )
try {
	push.apply(
		( arr = slice.call( preferredDoc.childNodes ) ),
		preferredDoc.childNodes
	);
&amp;nbsp;
	// Support: Android &amp;lt;=4.0
	// Detect silently failing push.apply
	// eslint-disable-next-line no-unused-expressions
	arr[ preferredDoc.childNodes.length ].nodeType;
} catch ( e ) {
	push = {
		apply: function( target, els ) {
			pushNative.apply( target, slice.call( els ) );
		},
		call: function( target ) {
			pushNative.apply( target, slice.call( arguments, 1 ) );
		}
	};
}
&amp;nbsp;
function find( selector, context, results, seed ) {
	var m, i, elem, nid, match, groups, newSelector,
		newContext = context &amp;amp;&amp;amp; context.ownerDocument,
&amp;nbsp;
		// nodeType defaults to 9, since context defaults to document
		nodeType = context ? context.nodeType : 9;
&amp;nbsp;
	results = results || [];
&amp;nbsp;
	// Return early from calls with invalid selector or context
	if ( typeof selector !== &amp;quot;string&amp;quot; || !selector ||
		nodeType !== 1 &amp;amp;&amp;amp; nodeType !== 9 &amp;amp;&amp;amp; nodeType !== 11 ) {
&amp;nbsp;
		return results;
	}
&amp;nbsp;
	// Try to shortcut find operations (as opposed to filters) in HTML documents
	if ( !seed ) {
		setDocument( context );
		context = context || document;
&amp;nbsp;
		if ( documentIsHTML ) {
&amp;nbsp;
			// If the selector is sufficiently simple, try using a &amp;quot;get*By*&amp;quot; DOM method
			// (excepting DocumentFragment context, where the methods don&#039;t exist)
			if ( nodeType !== 11 &amp;amp;&amp;amp; ( match = rquickExpr.exec( selector ) ) ) {
&amp;nbsp;
				// ID selector
				if ( ( m = match[ 1 ] ) ) {
&amp;nbsp;
					// Document context
					if ( nodeType === 9 ) {
						if ( ( elem = context.getElementById( m ) ) ) {
&amp;nbsp;
							// Support: IE 9 only
							// getElementById can match elements by name instead of ID
							if ( elem.id === m ) {
								push.call( results, elem );
								return results;
							}
						} else {
							return results;
						}
&amp;nbsp;
					// Element context
					} else {
&amp;nbsp;
						// Support: IE 9 only
						// getElementById can match elements by name instead of ID
						if ( newContext &amp;amp;&amp;amp; ( elem = newContext.getElementById( m ) ) &amp;amp;&amp;amp;
							find.contains( context, elem ) &amp;amp;&amp;amp;
							elem.id === m ) {
&amp;nbsp;
							push.call( results, elem );
							return results;
						}
					}
&amp;nbsp;
				// Type selector
				} else if ( match[ 2 ] ) {
					push.apply( results, context.getElementsByTagName( selector ) );
					return results;
&amp;nbsp;
				// Class selector
				} else if ( ( m = match[ 3 ] ) &amp;amp;&amp;amp; context.getElementsByClassName ) {
					push.apply( results, context.getElementsByClassName( m ) );
					return results;
				}
			}
&amp;nbsp;
			// Take advantage of querySelectorAll
			if ( !nonnativeSelectorCache[ selector + &amp;quot; &amp;quot; ] &amp;amp;&amp;amp;
				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {
&amp;nbsp;
				newSelector = selector;
				newContext = context;
&amp;nbsp;
				// qSA considers elements outside a scoping root when evaluating child or
				// descendant combinators, which is not what we want.
				// In such cases, we work around the behavior by prefixing every selector in the
				// list with an ID selector referencing the scope context.
				// The technique has to be used as well when a leading combinator is used
				// as such selectors are not recognized by querySelectorAll.
				// Thanks to Andrew Dupont for this technique.
				if ( nodeType === 1 &amp;amp;&amp;amp;
					( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {
&amp;nbsp;
					// Expand context for sibling selectors
					newContext = rsibling.test( selector ) &amp;amp;&amp;amp; testContext( context.parentNode ) ||
						context;
&amp;nbsp;
					// We can use :scope instead of the ID hack if the browser
					// supports it &amp;amp; if we&#039;re not changing the context.
					// Support: IE 11+, Edge 17 - 18+
					// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when
					// strict-comparing two documents; shallow comparisons work.
					// eslint-disable-next-line eqeqeq
					if ( newContext != context || !support.scope ) {
&amp;nbsp;
						// Capture the context ID, setting it first if necessary
						if ( ( nid = context.getAttribute( &amp;quot;id&amp;quot; ) ) ) {
							nid = jQuery.escapeSelector( nid );
						} else {
							context.setAttribute( &amp;quot;id&amp;quot;, ( nid = expando ) );
						}
					}
&amp;nbsp;
					// Prefix every selector in the list
					groups = tokenize( selector );
					i = groups.length;
					while ( i-- ) {
						groups[ i ] = ( nid ? &amp;quot;#&amp;quot; + nid : &amp;quot;:scope&amp;quot; ) + &amp;quot; &amp;quot; +
							toSelector( groups[ i ] );
					}
					newSelector = groups.join( &amp;quot;,&amp;quot; );
				}
&amp;nbsp;
				try {
					push.apply( results,
						newContext.querySelectorAll( newSelector )
					);
					return results;
				} catch ( qsaError ) {
					nonnativeSelectorCache( selector, true );
				} finally {
					if ( nid === expando ) {
						context.removeAttribute( &amp;quot;id&amp;quot; );
					}
				}
			}
		}
	}
&amp;nbsp;
	// All others
	return select( selector.replace( rtrimCSS, &amp;quot;$1&amp;quot; ), context, results, seed );
}
&amp;nbsp;
/**
 * Create key-value caches of limited size
 * @returns {function(string, object)} Returns the Object data after storing it on itself with
 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
 *	deleting the oldest entry
 */
function createCache() {
	var keys = [];
&amp;nbsp;
	function cache( key, value ) {
&amp;nbsp;
		// Use (key + &amp;quot; &amp;quot;) to avoid collision with native prototype properties
		// (see https://github.com/jquery/sizzle/issues/157)
		if ( keys.push( key + &amp;quot; &amp;quot; ) &amp;gt; Expr.cacheLength ) {
&amp;nbsp;
			// Only keep the most recent entries
			delete cache[ keys.shift() ];
		}
		return ( cache[ key + &amp;quot; &amp;quot; ] = value );
	}
	return cache;
}
&amp;nbsp;
/**
 * Mark a function for special use by jQuery selector module
 * @param {Function} fn The function to mark
 */
function markFunction( fn ) {
	fn[ expando ] = true;
	return fn;
}
&amp;nbsp;
/**
 * Support testing using an element
 * @param {Function} fn Passed the created element and returns a boolean result
 */
function assert( fn ) {
	var el = document.createElement( &amp;quot;fieldset&amp;quot; );
&amp;nbsp;
	try {
		return !!fn( el );
	} catch ( e ) {
		return false;
	} finally {
&amp;nbsp;
		// Remove from its parent by default
		if ( el.parentNode ) {
			el.parentNode.removeChild( el );
		}
&amp;nbsp;
		// release memory in IE
		el = null;
	}
}
&amp;nbsp;
/**
 * Returns a function to use in pseudos for input types
 * @param {String} type
 */
function createInputPseudo( type ) {
	return function( elem ) {
		return nodeName( elem, &amp;quot;input&amp;quot; ) &amp;amp;&amp;amp; elem.type === type;
	};
}
&amp;nbsp;
/**
 * Returns a function to use in pseudos for buttons
 * @param {String} type
 */
function createButtonPseudo( type ) {
	return function( elem ) {
		return ( nodeName( elem, &amp;quot;input&amp;quot; ) || nodeName( elem, &amp;quot;button&amp;quot; ) ) &amp;amp;&amp;amp;
			elem.type === type;
	};
}
&amp;nbsp;
/**
 * Returns a function to use in pseudos for :enabled/:disabled
 * @param {Boolean} disabled true for :disabled; false for :enabled
 */
function createDisabledPseudo( disabled ) {
&amp;nbsp;
	// Known :disabled false positives: fieldset[disabled] &amp;gt; legend:nth-of-type(n+2) :can-disable
	return function( elem ) {
&amp;nbsp;
		// Only certain elements can match :enabled or :disabled
		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
		if ( &amp;quot;form&amp;quot; in elem ) {
&amp;nbsp;
			// Check for inherited disabledness on relevant non-disabled elements:
			// * listed form-associated elements in a disabled fieldset
			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
			// * option elements in a disabled optgroup
			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
			// All such elements have a &amp;quot;form&amp;quot; property.
			if ( elem.parentNode &amp;amp;&amp;amp; elem.disabled === false ) {
&amp;nbsp;
				// Option elements defer to a parent optgroup if present
				if ( &amp;quot;label&amp;quot; in elem ) {
					if ( &amp;quot;label&amp;quot; in elem.parentNode ) {
						return elem.parentNode.disabled === disabled;
					} else {
						return elem.disabled === disabled;
					}
				}
&amp;nbsp;
				// Support: IE 6 - 11+
				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
				return elem.isDisabled === disabled ||
&amp;nbsp;
					// Where there is no isDisabled, check manually
					elem.isDisabled !== !disabled &amp;amp;&amp;amp;
						inDisabledFieldset( elem ) === disabled;
			}
&amp;nbsp;
			return elem.disabled === disabled;
&amp;nbsp;
		// Try to winnow out elements that can&#039;t be disabled before trusting the disabled property.
		// Some victims get caught in our net (label, legend, menu, track), but it shouldn&#039;t
		// even exist on them, let alone have a boolean value.
		} else if ( &amp;quot;label&amp;quot; in elem ) {
			return elem.disabled === disabled;
		}
&amp;nbsp;
		// Remaining elements are neither :enabled nor :disabled
		return false;
	};
}
&amp;nbsp;
/**
 * Returns a function to use in pseudos for positionals
 * @param {Function} fn
 */
function createPositionalPseudo( fn ) {
	return markFunction( function( argument ) {
		argument = +argument;
		return markFunction( function( seed, matches ) {
			var j,
				matchIndexes = fn( [], seed.length, argument ),
				i = matchIndexes.length;
&amp;nbsp;
			// Match elements found at the specified indexes
			while ( i-- ) {
				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
					seed[ j ] = !( matches[ j ] = seed[ j ] );
				}
			}
		} );
	} );
}
&amp;nbsp;
/**
 * Checks a node for validity as a jQuery selector context
 * @param {Element|Object=} context
 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
 */
function testContext( context ) {
	return context &amp;amp;&amp;amp; typeof context.getElementsByTagName !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; context;
}
&amp;nbsp;
/**
 * Sets document-related variables once based on the current document
 * @param {Element|Object} [node] An element or document object to use to set the document
 * @returns {Object} Returns the current document
 */
function setDocument( node ) {
	var subWindow,
		doc = node ? node.ownerDocument || node : preferredDoc;
&amp;nbsp;
	// Return early if doc is invalid or already selected
	// Support: IE 11+, Edge 17 - 18+
	// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
	// two documents; shallow comparisons work.
	// eslint-disable-next-line eqeqeq
	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
		return document;
	}
&amp;nbsp;
	// Update global variables
	document = doc;
	documentElement = document.documentElement;
	documentIsHTML = !jQuery.isXMLDoc( document );
&amp;nbsp;
	// Support: iOS 7 only, IE 9 - 11+
	// Older browsers didn&#039;t support unprefixed `matches`.
	matches = documentElement.matches ||
		documentElement.webkitMatchesSelector ||
		documentElement.msMatchesSelector;
&amp;nbsp;
	// Support: IE 9 - 11+, Edge 12 - 18+
	// Accessing iframe documents after unload throws &amp;quot;permission denied&amp;quot; errors
	// (see trac-13936).
	// Limit the fix to IE &amp;amp; Edge Legacy; despite Edge 15+ implementing `matches`,
	// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.
	if ( documentElement.msMatchesSelector &amp;amp;&amp;amp;
&amp;nbsp;
		// Support: IE 11+, Edge 17 - 18+
		// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
		// two documents; shallow comparisons work.
		// eslint-disable-next-line eqeqeq
		preferredDoc != document &amp;amp;&amp;amp;
		( subWindow = document.defaultView ) &amp;amp;&amp;amp; subWindow.top !== subWindow ) {
&amp;nbsp;
		// Support: IE 9 - 11+, Edge 12 - 18+
		subWindow.addEventListener( &amp;quot;unload&amp;quot;, unloadHandler );
	}
&amp;nbsp;
	// Support: IE &amp;lt;10
	// Check if getElementById returns elements by name
	// The broken getElementById methods don&#039;t pick up programmatically-set names,
	// so use a roundabout getElementsByName test
	support.getById = assert( function( el ) {
		documentElement.appendChild( el ).id = jQuery.expando;
		return !document.getElementsByName ||
			!document.getElementsByName( jQuery.expando ).length;
	} );
&amp;nbsp;
	// Support: IE 9 only
	// Check to see if it&#039;s possible to do matchesSelector
	// on a disconnected node.
	support.disconnectedMatch = assert( function( el ) {
		return matches.call( el, &amp;quot;*&amp;quot; );
	} );
&amp;nbsp;
	// Support: IE 9 - 11+, Edge 12 - 18+
	// IE/Edge don&#039;t support the :scope pseudo-class.
	support.scope = assert( function() {
		return document.querySelectorAll( &amp;quot;:scope&amp;quot; );
	} );
&amp;nbsp;
	// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only
	// Make sure the `:has()` argument is parsed unforgivingly.
	// We include `*` in the test to detect buggy implementations that are
	// _selectively_ forgiving (specifically when the list includes at least
	// one valid selector).
	// Note that we treat complete lack of support for `:has()` as if it were
	// spec-compliant support, which is fine because use of `:has()` in such
	// environments will fail in the qSA path and fall back to jQuery traversal
	// anyway.
	support.cssHas = assert( function() {
		try {
			document.querySelector( &amp;quot;:has(*,:jqfake)&amp;quot; );
			return false;
		} catch ( e ) {
			return true;
		}
	} );
&amp;nbsp;
	// ID filter and find
	if ( support.getById ) {
		Expr.filter.ID = function( id ) {
			var attrId = id.replace( runescape, funescape );
			return function( elem ) {
				return elem.getAttribute( &amp;quot;id&amp;quot; ) === attrId;
			};
		};
		Expr.find.ID = function( id, context ) {
			if ( typeof context.getElementById !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; documentIsHTML ) {
				var elem = context.getElementById( id );
				return elem ? [ elem ] : [];
			}
		};
	} else {
		Expr.filter.ID =  function( id ) {
			var attrId = id.replace( runescape, funescape );
			return function( elem ) {
				var node = typeof elem.getAttributeNode !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp;
					elem.getAttributeNode( &amp;quot;id&amp;quot; );
				return node &amp;amp;&amp;amp; node.value === attrId;
			};
		};
&amp;nbsp;
		// Support: IE 6 - 7 only
		// getElementById is not reliable as a find shortcut
		Expr.find.ID = function( id, context ) {
			if ( typeof context.getElementById !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; documentIsHTML ) {
				var node, i, elems,
					elem = context.getElementById( id );
&amp;nbsp;
				if ( elem ) {
&amp;nbsp;
					// Verify the id attribute
					node = elem.getAttributeNode( &amp;quot;id&amp;quot; );
					if ( node &amp;amp;&amp;amp; node.value === id ) {
						return [ elem ];
					}
&amp;nbsp;
					// Fall back on getElementsByName
					elems = context.getElementsByName( id );
					i = 0;
					while ( ( elem = elems[ i++ ] ) ) {
						node = elem.getAttributeNode( &amp;quot;id&amp;quot; );
						if ( node &amp;amp;&amp;amp; node.value === id ) {
							return [ elem ];
						}
					}
				}
&amp;nbsp;
				return [];
			}
		};
	}
&amp;nbsp;
	// Tag
	Expr.find.TAG = function( tag, context ) {
		if ( typeof context.getElementsByTagName !== &amp;quot;undefined&amp;quot; ) {
			return context.getElementsByTagName( tag );
&amp;nbsp;
		// DocumentFragment nodes don&#039;t have gEBTN
		} else {
			return context.querySelectorAll( tag );
		}
	};
&amp;nbsp;
	// Class
	Expr.find.CLASS = function( className, context ) {
		if ( typeof context.getElementsByClassName !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; documentIsHTML ) {
			return context.getElementsByClassName( className );
		}
	};
&amp;nbsp;
	/* QSA/matchesSelector
	---------------------------------------------------------------------- */
&amp;nbsp;
	// QSA and matchesSelector support
&amp;nbsp;
	rbuggyQSA = [];
&amp;nbsp;
	// Build QSA regex
	// Regex strategy adopted from Diego Perini
	assert( function( el ) {
&amp;nbsp;
		var input;
&amp;nbsp;
		documentElement.appendChild( el ).innerHTML =
			&amp;quot;&amp;lt;a id=&#039;&amp;quot; + expando + &amp;quot;&#039; href=&#039;&#039; disabled=&#039;disabled&#039;&amp;gt;&amp;lt;/a&amp;gt;&amp;quot; +
			&amp;quot;&amp;lt;select id=&#039;&amp;quot; + expando + &amp;quot;-\r\\&#039; disabled=&#039;disabled&#039;&amp;gt;&amp;quot; +
			&amp;quot;&amp;lt;option selected=&#039;&#039;&amp;gt;&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;&amp;quot;;
&amp;nbsp;
		// Support: iOS &amp;lt;=7 - 8 only
		// Boolean attributes and &amp;quot;value&amp;quot; are not treated correctly in some XML documents
		if ( !el.querySelectorAll( &amp;quot;[selected]&amp;quot; ).length ) {
			rbuggyQSA.push( &amp;quot;\\[&amp;quot; + whitespace + &amp;quot;*(?:value|&amp;quot; + booleans + &amp;quot;)&amp;quot; );
		}
&amp;nbsp;
		// Support: iOS &amp;lt;=7 - 8 only
		if ( !el.querySelectorAll( &amp;quot;[id~=&amp;quot; + expando + &amp;quot;-]&amp;quot; ).length ) {
			rbuggyQSA.push( &amp;quot;~=&amp;quot; );
		}
&amp;nbsp;
		// Support: iOS 8 only
		// https://bugs.webkit.org/show_bug.cgi?id=136851
		// In-page `selector#id sibling-combinator selector` fails
		if ( !el.querySelectorAll( &amp;quot;a#&amp;quot; + expando + &amp;quot;+*&amp;quot; ).length ) {
			rbuggyQSA.push( &amp;quot;.#.+[+~]&amp;quot; );
		}
&amp;nbsp;
		// Support: Chrome &amp;lt;=105+, Firefox &amp;lt;=104+, Safari &amp;lt;=15.4+
		// In some of the document kinds, these selectors wouldn&#039;t work natively.
		// This is probably OK but for backwards compatibility we want to maintain
		// handling them through jQuery traversal in jQuery 3.x.
		if ( !el.querySelectorAll( &amp;quot;:checked&amp;quot; ).length ) {
			rbuggyQSA.push( &amp;quot;:checked&amp;quot; );
		}
&amp;nbsp;
		// Support: Windows 8 Native Apps
		// The type and name attributes are restricted during .innerHTML assignment
		input = document.createElement( &amp;quot;input&amp;quot; );
		input.setAttribute( &amp;quot;type&amp;quot;, &amp;quot;hidden&amp;quot; );
		el.appendChild( input ).setAttribute( &amp;quot;name&amp;quot;, &amp;quot;D&amp;quot; );
&amp;nbsp;
		// Support: IE 9 - 11+
		// IE&#039;s :disabled selector does not pick up the children of disabled fieldsets
		// Support: Chrome &amp;lt;=105+, Firefox &amp;lt;=104+, Safari &amp;lt;=15.4+
		// In some of the document kinds, these selectors wouldn&#039;t work natively.
		// This is probably OK but for backwards compatibility we want to maintain
		// handling them through jQuery traversal in jQuery 3.x.
		documentElement.appendChild( el ).disabled = true;
		if ( el.querySelectorAll( &amp;quot;:disabled&amp;quot; ).length !== 2 ) {
			rbuggyQSA.push( &amp;quot;:enabled&amp;quot;, &amp;quot;:disabled&amp;quot; );
		}
&amp;nbsp;
		// Support: IE 11+, Edge 15 - 18+
		// IE 11/Edge don&#039;t find elements on a `[name=&#039;&#039;]` query in some cases.
		// Adding a temporary attribute to the document before the selection works
		// around the issue.
		// Interestingly, IE 10 &amp;amp; older don&#039;t seem to have the issue.
		input = document.createElement( &amp;quot;input&amp;quot; );
		input.setAttribute( &amp;quot;name&amp;quot;, &amp;quot;&amp;quot; );
		el.appendChild( input );
		if ( !el.querySelectorAll( &amp;quot;[name=&#039;&#039;]&amp;quot; ).length ) {
			rbuggyQSA.push( &amp;quot;\\[&amp;quot; + whitespace + &amp;quot;*name&amp;quot; + whitespace + &amp;quot;*=&amp;quot; +
				whitespace + &amp;quot;*(?:&#039;&#039;|\&amp;quot;\&amp;quot;)&amp;quot; );
		}
	} );
&amp;nbsp;
	if ( !support.cssHas ) {
&amp;nbsp;
		// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+
		// Our regular `try-catch` mechanism fails to detect natively-unsupported
		// pseudo-classes inside `:has()` (such as `:has(:contains(&amp;quot;Foo&amp;quot;))`)
		// in browsers that parse the `:has()` argument as a forgiving selector list.
		// https://drafts.csswg.org/selectors/#relational now requires the argument
		// to be parsed unforgivingly, but browsers have not yet fully adjusted.
		rbuggyQSA.push( &amp;quot;:has&amp;quot; );
	}
&amp;nbsp;
	rbuggyQSA = rbuggyQSA.length &amp;amp;&amp;amp; new RegExp( rbuggyQSA.join( &amp;quot;|&amp;quot; ) );
&amp;nbsp;
	/* Sorting
	---------------------------------------------------------------------- */
&amp;nbsp;
	// Document order sorting
	sortOrder = function( a, b ) {
&amp;nbsp;
		// Flag for duplicate removal
		if ( a === b ) {
			hasDuplicate = true;
			return 0;
		}
&amp;nbsp;
		// Sort on method existence if only one input has compareDocumentPosition
		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
		if ( compare ) {
			return compare;
		}
&amp;nbsp;
		// Calculate position if both inputs belong to the same document
		// Support: IE 11+, Edge 17 - 18+
		// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
		// two documents; shallow comparisons work.
		// eslint-disable-next-line eqeqeq
		compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
			a.compareDocumentPosition( b ) :
&amp;nbsp;
			// Otherwise we know they are disconnected
			1;
&amp;nbsp;
		// Disconnected nodes
		if ( compare &amp;amp; 1 ||
			( !support.sortDetached &amp;amp;&amp;amp; b.compareDocumentPosition( a ) === compare ) ) {
&amp;nbsp;
			// Choose the first element that is related to our preferred document
			// Support: IE 11+, Edge 17 - 18+
			// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
			// two documents; shallow comparisons work.
			// eslint-disable-next-line eqeqeq
			if ( a === document || a.ownerDocument == preferredDoc &amp;amp;&amp;amp;
				find.contains( preferredDoc, a ) ) {
				return -1;
			}
&amp;nbsp;
			// Support: IE 11+, Edge 17 - 18+
			// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
			// two documents; shallow comparisons work.
			// eslint-disable-next-line eqeqeq
			if ( b === document || b.ownerDocument == preferredDoc &amp;amp;&amp;amp;
				find.contains( preferredDoc, b ) ) {
				return 1;
			}
&amp;nbsp;
			// Maintain original order
			return sortInput ?
				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
				0;
		}
&amp;nbsp;
		return compare &amp;amp; 4 ? -1 : 1;
	};
&amp;nbsp;
	return document;
}
&amp;nbsp;
find.matches = function( expr, elements ) {
	return find( expr, null, null, elements );
};
&amp;nbsp;
find.matchesSelector = function( elem, expr ) {
	setDocument( elem );
&amp;nbsp;
	if ( documentIsHTML &amp;amp;&amp;amp;
		!nonnativeSelectorCache[ expr + &amp;quot; &amp;quot; ] &amp;amp;&amp;amp;
		( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
&amp;nbsp;
		try {
			var ret = matches.call( elem, expr );
&amp;nbsp;
			// IE 9&#039;s matchesSelector returns false on disconnected nodes
			if ( ret || support.disconnectedMatch ||
&amp;nbsp;
					// As well, disconnected nodes are said to be in a document
					// fragment in IE 9
					elem.document &amp;amp;&amp;amp; elem.document.nodeType !== 11 ) {
				return ret;
			}
		} catch ( e ) {
			nonnativeSelectorCache( expr, true );
		}
	}
&amp;nbsp;
	return find( expr, document, null, [ elem ] ).length &amp;gt; 0;
};
&amp;nbsp;
find.contains = function( context, elem ) {
&amp;nbsp;
	// Set document vars if needed
	// Support: IE 11+, Edge 17 - 18+
	// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
	// two documents; shallow comparisons work.
	// eslint-disable-next-line eqeqeq
	if ( ( context.ownerDocument || context ) != document ) {
		setDocument( context );
	}
	return jQuery.contains( context, elem );
};
&amp;nbsp;
&amp;nbsp;
find.attr = function( elem, name ) {
&amp;nbsp;
	// Set document vars if needed
	// Support: IE 11+, Edge 17 - 18+
	// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
	// two documents; shallow comparisons work.
	// eslint-disable-next-line eqeqeq
	if ( ( elem.ownerDocument || elem ) != document ) {
		setDocument( elem );
	}
&amp;nbsp;
	var fn = Expr.attrHandle[ name.toLowerCase() ],
&amp;nbsp;
		// Don&#039;t get fooled by Object.prototype properties (see trac-13807)
		val = fn &amp;amp;&amp;amp; hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
			fn( elem, name, !documentIsHTML ) :
			undefined;
&amp;nbsp;
	if ( val !== undefined ) {
		return val;
	}
&amp;nbsp;
	return elem.getAttribute( name );
};
&amp;nbsp;
find.error = function( msg ) {
	throw new Error( &amp;quot;Syntax error, unrecognized expression: &amp;quot; + msg );
};
&amp;nbsp;
/**
 * Document sorting and removing duplicates
 * @param {ArrayLike} results
 */
jQuery.uniqueSort = function( results ) {
	var elem,
		duplicates = [],
		j = 0,
		i = 0;
&amp;nbsp;
	// Unless we *know* we can detect duplicates, assume their presence
	//
	// Support: Android &amp;lt;=4.0+
	// Testing for detecting duplicates is unpredictable so instead assume we can&#039;t
	// depend on duplicate detection in all browsers without a stable sort.
	hasDuplicate = !support.sortStable;
	sortInput = !support.sortStable &amp;amp;&amp;amp; slice.call( results, 0 );
	sort.call( results, sortOrder );
&amp;nbsp;
	if ( hasDuplicate ) {
		while ( ( elem = results[ i++ ] ) ) {
			if ( elem === results[ i ] ) {
				j = duplicates.push( i );
			}
		}
		while ( j-- ) {
			splice.call( results, duplicates[ j ], 1 );
		}
	}
&amp;nbsp;
	// Clear input after sorting to release objects
	// See https://github.com/jquery/sizzle/pull/225
	sortInput = null;
&amp;nbsp;
	return results;
};
&amp;nbsp;
jQuery.fn.uniqueSort = function() {
	return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );
};
&amp;nbsp;
Expr = jQuery.expr = {
&amp;nbsp;
	// Can be adjusted by the user
	cacheLength: 50,
&amp;nbsp;
	createPseudo: markFunction,
&amp;nbsp;
	match: matchExpr,
&amp;nbsp;
	attrHandle: {},
&amp;nbsp;
	find: {},
&amp;nbsp;
	relative: {
		&amp;quot;&amp;gt;&amp;quot;: { dir: &amp;quot;parentNode&amp;quot;, first: true },
		&amp;quot; &amp;quot;: { dir: &amp;quot;parentNode&amp;quot; },
		&amp;quot;+&amp;quot;: { dir: &amp;quot;previousSibling&amp;quot;, first: true },
		&amp;quot;~&amp;quot;: { dir: &amp;quot;previousSibling&amp;quot; }
	},
&amp;nbsp;
	preFilter: {
		ATTR: function( match ) {
			match[ 1 ] = match[ 1 ].replace( runescape, funescape );
&amp;nbsp;
			// Move the given value to match[3] whether quoted or unquoted
			match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || &amp;quot;&amp;quot; )
				.replace( runescape, funescape );
&amp;nbsp;
			if ( match[ 2 ] === &amp;quot;~=&amp;quot; ) {
				match[ 3 ] = &amp;quot; &amp;quot; + match[ 3 ] + &amp;quot; &amp;quot;;
			}
&amp;nbsp;
			return match.slice( 0, 4 );
		},
&amp;nbsp;
		CHILD: function( match ) {
&amp;nbsp;
			/* matches from matchExpr[&amp;quot;CHILD&amp;quot;]
				1 type (only|nth|...)
				2 what (child|of-type)
				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
				4 xn-component of xn+y argument ([+-]?\d*n|)
				5 sign of xn-component
				6 x of xn-component
				7 sign of y-component
				8 y of y-component
			*/
			match[ 1 ] = match[ 1 ].toLowerCase();
&amp;nbsp;
			if ( match[ 1 ].slice( 0, 3 ) === &amp;quot;nth&amp;quot; ) {
&amp;nbsp;
				// nth-* requires argument
				if ( !match[ 3 ] ) {
					find.error( match[ 0 ] );
				}
&amp;nbsp;
				// numeric x and y parameters for Expr.filter.CHILD
				// remember that false/true cast respectively to 0/1
				match[ 4 ] = +( match[ 4 ] ?
					match[ 5 ] + ( match[ 6 ] || 1 ) :
					2 * ( match[ 3 ] === &amp;quot;even&amp;quot; || match[ 3 ] === &amp;quot;odd&amp;quot; )
				);
				match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === &amp;quot;odd&amp;quot; );
&amp;nbsp;
			// other types prohibit arguments
			} else if ( match[ 3 ] ) {
				find.error( match[ 0 ] );
			}
&amp;nbsp;
			return match;
		},
&amp;nbsp;
		PSEUDO: function( match ) {
			var excess,
				unquoted = !match[ 6 ] &amp;amp;&amp;amp; match[ 2 ];
&amp;nbsp;
			if ( matchExpr.CHILD.test( match[ 0 ] ) ) {
				return null;
			}
&amp;nbsp;
			// Accept quoted arguments as-is
			if ( match[ 3 ] ) {
				match[ 2 ] = match[ 4 ] || match[ 5 ] || &amp;quot;&amp;quot;;
&amp;nbsp;
			// Strip excess characters from unquoted arguments
			} else if ( unquoted &amp;amp;&amp;amp; rpseudo.test( unquoted ) &amp;amp;&amp;amp;
&amp;nbsp;
				// Get excess from tokenize (recursively)
				( excess = tokenize( unquoted, true ) ) &amp;amp;&amp;amp;
&amp;nbsp;
				// advance to the next closing parenthesis
				( excess = unquoted.indexOf( &amp;quot;)&amp;quot;, unquoted.length - excess ) - unquoted.length ) ) {
&amp;nbsp;
				// excess is a negative index
				match[ 0 ] = match[ 0 ].slice( 0, excess );
				match[ 2 ] = unquoted.slice( 0, excess );
			}
&amp;nbsp;
			// Return only captures needed by the pseudo filter method (type and argument)
			return match.slice( 0, 3 );
		}
	},
&amp;nbsp;
	filter: {
&amp;nbsp;
		TAG: function( nodeNameSelector ) {
			var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
			return nodeNameSelector === &amp;quot;*&amp;quot; ?
				function() {
					return true;
				} :
				function( elem ) {
					return nodeName( elem, expectedNodeName );
				};
		},
&amp;nbsp;
		CLASS: function( className ) {
			var pattern = classCache[ className + &amp;quot; &amp;quot; ];
&amp;nbsp;
			return pattern ||
				( pattern = new RegExp( &amp;quot;(^|&amp;quot; + whitespace + &amp;quot;)&amp;quot; + className +
					&amp;quot;(&amp;quot; + whitespace + &amp;quot;|$)&amp;quot; ) ) &amp;amp;&amp;amp;
				classCache( className, function( elem ) {
					return pattern.test(
						typeof elem.className === &amp;quot;string&amp;quot; &amp;amp;&amp;amp; elem.className ||
							typeof elem.getAttribute !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp;
								elem.getAttribute( &amp;quot;class&amp;quot; ) ||
							&amp;quot;&amp;quot;
					);
				} );
		},
&amp;nbsp;
		ATTR: function( name, operator, check ) {
			return function( elem ) {
				var result = find.attr( elem, name );
&amp;nbsp;
				if ( result == null ) {
					return operator === &amp;quot;!=&amp;quot;;
				}
				if ( !operator ) {
					return true;
				}
&amp;nbsp;
				result += &amp;quot;&amp;quot;;
&amp;nbsp;
				if ( operator === &amp;quot;=&amp;quot; ) {
					return result === check;
				}
				if ( operator === &amp;quot;!=&amp;quot; ) {
					return result !== check;
				}
				if ( operator === &amp;quot;^=&amp;quot; ) {
					return check &amp;amp;&amp;amp; result.indexOf( check ) === 0;
				}
				if ( operator === &amp;quot;*=&amp;quot; ) {
					return check &amp;amp;&amp;amp; result.indexOf( check ) &amp;gt; -1;
				}
				if ( operator === &amp;quot;$=&amp;quot; ) {
					return check &amp;amp;&amp;amp; result.slice( -check.length ) === check;
				}
				if ( operator === &amp;quot;~=&amp;quot; ) {
					return ( &amp;quot; &amp;quot; + result.replace( rwhitespace, &amp;quot; &amp;quot; ) + &amp;quot; &amp;quot; )
						.indexOf( check ) &amp;gt; -1;
				}
				if ( operator === &amp;quot;|=&amp;quot; ) {
					return result === check || result.slice( 0, check.length + 1 ) === check + &amp;quot;-&amp;quot;;
				}
&amp;nbsp;
				return false;
			};
		},
&amp;nbsp;
		CHILD: function( type, what, _argument, first, last ) {
			var simple = type.slice( 0, 3 ) !== &amp;quot;nth&amp;quot;,
				forward = type.slice( -4 ) !== &amp;quot;last&amp;quot;,
				ofType = what === &amp;quot;of-type&amp;quot;;
&amp;nbsp;
			return first === 1 &amp;amp;&amp;amp; last === 0 ?
&amp;nbsp;
				// Shortcut for :nth-*(n)
				function( elem ) {
					return !!elem.parentNode;
				} :
&amp;nbsp;
				function( elem, _context, xml ) {
					var cache, outerCache, node, nodeIndex, start,
						dir = simple !== forward ? &amp;quot;nextSibling&amp;quot; : &amp;quot;previousSibling&amp;quot;,
						parent = elem.parentNode,
						name = ofType &amp;amp;&amp;amp; elem.nodeName.toLowerCase(),
						useCache = !xml &amp;amp;&amp;amp; !ofType,
						diff = false;
&amp;nbsp;
					if ( parent ) {
&amp;nbsp;
						// :(first|last|only)-(child|of-type)
						if ( simple ) {
							while ( dir ) {
								node = elem;
								while ( ( node = node[ dir ] ) ) {
									if ( ofType ?
										nodeName( node, name ) :
										node.nodeType === 1 ) {
&amp;nbsp;
										return false;
									}
								}
&amp;nbsp;
								// Reverse direction for :only-* (if we haven&#039;t yet done so)
								start = dir = type === &amp;quot;only&amp;quot; &amp;amp;&amp;amp; !start &amp;amp;&amp;amp; &amp;quot;nextSibling&amp;quot;;
							}
							return true;
						}
&amp;nbsp;
						start = [ forward ? parent.firstChild : parent.lastChild ];
&amp;nbsp;
						// non-xml :nth-child(...) stores cache data on `parent`
						if ( forward &amp;amp;&amp;amp; useCache ) {
&amp;nbsp;
							// Seek `elem` from a previously-cached index
							outerCache = parent[ expando ] || ( parent[ expando ] = {} );
							cache = outerCache[ type ] || [];
							nodeIndex = cache[ 0 ] === dirruns &amp;amp;&amp;amp; cache[ 1 ];
							diff = nodeIndex &amp;amp;&amp;amp; cache[ 2 ];
							node = nodeIndex &amp;amp;&amp;amp; parent.childNodes[ nodeIndex ];
&amp;nbsp;
							while ( ( node = ++nodeIndex &amp;amp;&amp;amp; node &amp;amp;&amp;amp; node[ dir ] ||
&amp;nbsp;
								// Fallback to seeking `elem` from the start
								( diff = nodeIndex = 0 ) || start.pop() ) ) {
&amp;nbsp;
								// When found, cache indexes on `parent` and break
								if ( node.nodeType === 1 &amp;amp;&amp;amp; ++diff &amp;amp;&amp;amp; node === elem ) {
									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
									break;
								}
							}
&amp;nbsp;
						} else {
&amp;nbsp;
							// Use previously-cached element index if available
							if ( useCache ) {
								outerCache = elem[ expando ] || ( elem[ expando ] = {} );
								cache = outerCache[ type ] || [];
								nodeIndex = cache[ 0 ] === dirruns &amp;amp;&amp;amp; cache[ 1 ];
								diff = nodeIndex;
							}
&amp;nbsp;
							// xml :nth-child(...)
							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
							if ( diff === false ) {
&amp;nbsp;
								// Use the same loop as above to seek `elem` from the start
								while ( ( node = ++nodeIndex &amp;amp;&amp;amp; node &amp;amp;&amp;amp; node[ dir ] ||
									( diff = nodeIndex = 0 ) || start.pop() ) ) {
&amp;nbsp;
									if ( ( ofType ?
										nodeName( node, name ) :
										node.nodeType === 1 ) &amp;amp;&amp;amp;
										++diff ) {
&amp;nbsp;
										// Cache the index of each encountered element
										if ( useCache ) {
											outerCache = node[ expando ] ||
												( node[ expando ] = {} );
											outerCache[ type ] = [ dirruns, diff ];
										}
&amp;nbsp;
										if ( node === elem ) {
											break;
										}
									}
								}
							}
						}
&amp;nbsp;
						// Incorporate the offset, then check against cycle size
						diff -= last;
						return diff === first || ( diff % first === 0 &amp;amp;&amp;amp; diff / first &amp;gt;= 0 );
					}
				};
		},
&amp;nbsp;
		PSEUDO: function( pseudo, argument ) {
&amp;nbsp;
			// pseudo-class names are case-insensitive
			// https://www.w3.org/TR/selectors/#pseudo-classes
			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
			// Remember that setFilters inherits from pseudos
			var args,
				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
					find.error( &amp;quot;unsupported pseudo: &amp;quot; + pseudo );
&amp;nbsp;
			// The user may use createPseudo to indicate that
			// arguments are needed to create the filter function
			// just as jQuery does
			if ( fn[ expando ] ) {
				return fn( argument );
			}
&amp;nbsp;
			// But maintain support for old signatures
			if ( fn.length &amp;gt; 1 ) {
				args = [ pseudo, pseudo, &amp;quot;&amp;quot;, argument ];
				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
					markFunction( function( seed, matches ) {
						var idx,
							matched = fn( seed, argument ),
							i = matched.length;
						while ( i-- ) {
							idx = indexOf.call( seed, matched[ i ] );
							seed[ idx ] = !( matches[ idx ] = matched[ i ] );
						}
					} ) :
					function( elem ) {
						return fn( elem, 0, args );
					};
			}
&amp;nbsp;
			return fn;
		}
	},
&amp;nbsp;
	pseudos: {
&amp;nbsp;
		// Potentially complex pseudos
		not: markFunction( function( selector ) {
&amp;nbsp;
			// Trim the selector passed to compile
			// to avoid treating leading and trailing
			// spaces as combinators
			var input = [],
				results = [],
				matcher = compile( selector.replace( rtrimCSS, &amp;quot;$1&amp;quot; ) );
&amp;nbsp;
			return matcher[ expando ] ?
				markFunction( function( seed, matches, _context, xml ) {
					var elem,
						unmatched = matcher( seed, null, xml, [] ),
						i = seed.length;
&amp;nbsp;
					// Match elements unmatched by `matcher`
					while ( i-- ) {
						if ( ( elem = unmatched[ i ] ) ) {
							seed[ i ] = !( matches[ i ] = elem );
						}
					}
				} ) :
				function( elem, _context, xml ) {
					input[ 0 ] = elem;
					matcher( input, null, xml, results );
&amp;nbsp;
					// Don&#039;t keep the element
					// (see https://github.com/jquery/sizzle/issues/299)
					input[ 0 ] = null;
					return !results.pop();
				};
		} ),
&amp;nbsp;
		has: markFunction( function( selector ) {
			return function( elem ) {
				return find( selector, elem ).length &amp;gt; 0;
			};
		} ),
&amp;nbsp;
		contains: markFunction( function( text ) {
			text = text.replace( runescape, funescape );
			return function( elem ) {
				return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) &amp;gt; -1;
			};
		} ),
&amp;nbsp;
		// &amp;quot;Whether an element is represented by a :lang() selector
		// is based solely on the element&#039;s language value
		// being equal to the identifier C,
		// or beginning with the identifier C immediately followed by &amp;quot;-&amp;quot;.
		// The matching of C against the element&#039;s language value is performed case-insensitively.
		// The identifier C does not have to be a valid language name.&amp;quot;
		// https://www.w3.org/TR/selectors/#lang-pseudo
		lang: markFunction( function( lang ) {
&amp;nbsp;
			// lang value must be a valid identifier
			if ( !ridentifier.test( lang || &amp;quot;&amp;quot; ) ) {
				find.error( &amp;quot;unsupported lang: &amp;quot; + lang );
			}
			lang = lang.replace( runescape, funescape ).toLowerCase();
			return function( elem ) {
				var elemLang;
				do {
					if ( ( elemLang = documentIsHTML ?
						elem.lang :
						elem.getAttribute( &amp;quot;xml:lang&amp;quot; ) || elem.getAttribute( &amp;quot;lang&amp;quot; ) ) ) {
&amp;nbsp;
						elemLang = elemLang.toLowerCase();
						return elemLang === lang || elemLang.indexOf( lang + &amp;quot;-&amp;quot; ) === 0;
					}
				} while ( ( elem = elem.parentNode ) &amp;amp;&amp;amp; elem.nodeType === 1 );
				return false;
			};
		} ),
&amp;nbsp;
		// Miscellaneous
		target: function( elem ) {
			var hash = window.location &amp;amp;&amp;amp; window.location.hash;
			return hash &amp;amp;&amp;amp; hash.slice( 1 ) === elem.id;
		},
&amp;nbsp;
		root: function( elem ) {
			return elem === documentElement;
		},
&amp;nbsp;
		focus: function( elem ) {
			return elem === safeActiveElement() &amp;amp;&amp;amp;
				document.hasFocus() &amp;amp;&amp;amp;
				!!( elem.type || elem.href || ~elem.tabIndex );
		},
&amp;nbsp;
		// Boolean properties
		enabled: createDisabledPseudo( false ),
		disabled: createDisabledPseudo( true ),
&amp;nbsp;
		checked: function( elem ) {
&amp;nbsp;
			// In CSS3, :checked should return both checked and selected elements
			// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
			return ( nodeName( elem, &amp;quot;input&amp;quot; ) &amp;amp;&amp;amp; !!elem.checked ) ||
				( nodeName( elem, &amp;quot;option&amp;quot; ) &amp;amp;&amp;amp; !!elem.selected );
		},
&amp;nbsp;
		selected: function( elem ) {
&amp;nbsp;
			// Support: IE &amp;lt;=11+
			// Accessing the selectedIndex property
			// forces the browser to treat the default option as
			// selected when in an optgroup.
			if ( elem.parentNode ) {
				// eslint-disable-next-line no-unused-expressions
				elem.parentNode.selectedIndex;
			}
&amp;nbsp;
			return elem.selected === true;
		},
&amp;nbsp;
		// Contents
		empty: function( elem ) {
&amp;nbsp;
			// https://www.w3.org/TR/selectors/#empty-pseudo
			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
			//   but not by others (comment: 8; processing instruction: 7; etc.)
			// nodeType &amp;lt; 6 works because attributes (2) do not appear as children
			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
				if ( elem.nodeType &amp;lt; 6 ) {
					return false;
				}
			}
			return true;
		},
&amp;nbsp;
		parent: function( elem ) {
			return !Expr.pseudos.empty( elem );
		},
&amp;nbsp;
		// Element/input types
		header: function( elem ) {
			return rheader.test( elem.nodeName );
		},
&amp;nbsp;
		input: function( elem ) {
			return rinputs.test( elem.nodeName );
		},
&amp;nbsp;
		button: function( elem ) {
			return nodeName( elem, &amp;quot;input&amp;quot; ) &amp;amp;&amp;amp; elem.type === &amp;quot;button&amp;quot; ||
				nodeName( elem, &amp;quot;button&amp;quot; );
		},
&amp;nbsp;
		text: function( elem ) {
			var attr;
			return nodeName( elem, &amp;quot;input&amp;quot; ) &amp;amp;&amp;amp; elem.type === &amp;quot;text&amp;quot; &amp;amp;&amp;amp;
&amp;nbsp;
				// Support: IE &amp;lt;10 only
				// New HTML5 attribute values (e.g., &amp;quot;search&amp;quot;) appear
				// with elem.type === &amp;quot;text&amp;quot;
				( ( attr = elem.getAttribute( &amp;quot;type&amp;quot; ) ) == null ||
					attr.toLowerCase() === &amp;quot;text&amp;quot; );
		},
&amp;nbsp;
		// Position-in-collection
		first: createPositionalPseudo( function() {
			return [ 0 ];
		} ),
&amp;nbsp;
		last: createPositionalPseudo( function( _matchIndexes, length ) {
			return [ length - 1 ];
		} ),
&amp;nbsp;
		eq: createPositionalPseudo( function( _matchIndexes, length, argument ) {
			return [ argument &amp;lt; 0 ? argument + length : argument ];
		} ),
&amp;nbsp;
		even: createPositionalPseudo( function( matchIndexes, length ) {
			var i = 0;
			for ( ; i &amp;lt; length; i += 2 ) {
				matchIndexes.push( i );
			}
			return matchIndexes;
		} ),
&amp;nbsp;
		odd: createPositionalPseudo( function( matchIndexes, length ) {
			var i = 1;
			for ( ; i &amp;lt; length; i += 2 ) {
				matchIndexes.push( i );
			}
			return matchIndexes;
		} ),
&amp;nbsp;
		lt: createPositionalPseudo( function( matchIndexes, length, argument ) {
			var i;
&amp;nbsp;
			if ( argument &amp;lt; 0 ) {
				i = argument + length;
			} else if ( argument &amp;gt; length ) {
				i = length;
			} else {
				i = argument;
			}
&amp;nbsp;
			for ( ; --i &amp;gt;= 0; ) {
				matchIndexes.push( i );
			}
			return matchIndexes;
		} ),
&amp;nbsp;
		gt: createPositionalPseudo( function( matchIndexes, length, argument ) {
			var i = argument &amp;lt; 0 ? argument + length : argument;
			for ( ; ++i &amp;lt; length; ) {
				matchIndexes.push( i );
			}
			return matchIndexes;
		} )
	}
};
&amp;nbsp;
Expr.pseudos.nth = Expr.pseudos.eq;
&amp;nbsp;
// Add button/input type pseudos
for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
	Expr.pseudos[ i ] = createInputPseudo( i );
}
for ( i in { submit: true, reset: true } ) {
	Expr.pseudos[ i ] = createButtonPseudo( i );
}
&amp;nbsp;
// Easy API for creating new setFilters
function setFilters() {}
setFilters.prototype = Expr.filters = Expr.pseudos;
Expr.setFilters = new setFilters();
&amp;nbsp;
function tokenize( selector, parseOnly ) {
	var matched, match, tokens, type,
		soFar, groups, preFilters,
		cached = tokenCache[ selector + &amp;quot; &amp;quot; ];
&amp;nbsp;
	if ( cached ) {
		return parseOnly ? 0 : cached.slice( 0 );
	}
&amp;nbsp;
	soFar = selector;
	groups = [];
	preFilters = Expr.preFilter;
&amp;nbsp;
	while ( soFar ) {
&amp;nbsp;
		// Comma and first run
		if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
			if ( match ) {
&amp;nbsp;
				// Don&#039;t consume trailing commas as valid
				soFar = soFar.slice( match[ 0 ].length ) || soFar;
			}
			groups.push( ( tokens = [] ) );
		}
&amp;nbsp;
		matched = false;
&amp;nbsp;
		// Combinators
		if ( ( match = rleadingCombinator.exec( soFar ) ) ) {
			matched = match.shift();
			tokens.push( {
				value: matched,
&amp;nbsp;
				// Cast descendant combinators to space
				type: match[ 0 ].replace( rtrimCSS, &amp;quot; &amp;quot; )
			} );
			soFar = soFar.slice( matched.length );
		}
&amp;nbsp;
		// Filters
		for ( type in Expr.filter ) {
			if ( ( match = matchExpr[ type ].exec( soFar ) ) &amp;amp;&amp;amp; ( !preFilters[ type ] ||
				( match = preFilters[ type ]( match ) ) ) ) {
				matched = match.shift();
				tokens.push( {
					value: matched,
					type: type,
					matches: match
				} );
				soFar = soFar.slice( matched.length );
			}
		}
&amp;nbsp;
		if ( !matched ) {
			break;
		}
	}
&amp;nbsp;
	// Return the length of the invalid excess
	// if we&#039;re just parsing
	// Otherwise, throw an error or return tokens
	if ( parseOnly ) {
		return soFar.length;
	}
&amp;nbsp;
	return soFar ?
		find.error( selector ) :
&amp;nbsp;
		// Cache the tokens
		tokenCache( selector, groups ).slice( 0 );
}
&amp;nbsp;
function toSelector( tokens ) {
	var i = 0,
		len = tokens.length,
		selector = &amp;quot;&amp;quot;;
	for ( ; i &amp;lt; len; i++ ) {
		selector += tokens[ i ].value;
	}
	return selector;
}
&amp;nbsp;
function addCombinator( matcher, combinator, base ) {
	var dir = combinator.dir,
		skip = combinator.next,
		key = skip || dir,
		checkNonElements = base &amp;amp;&amp;amp; key === &amp;quot;parentNode&amp;quot;,
		doneName = done++;
&amp;nbsp;
	return combinator.first ?
&amp;nbsp;
		// Check against closest ancestor/preceding element
		function( elem, context, xml ) {
			while ( ( elem = elem[ dir ] ) ) {
				if ( elem.nodeType === 1 || checkNonElements ) {
					return matcher( elem, context, xml );
				}
			}
			return false;
		} :
&amp;nbsp;
		// Check against all ancestor/preceding elements
		function( elem, context, xml ) {
			var oldCache, outerCache,
				newCache = [ dirruns, doneName ];
&amp;nbsp;
			// We can&#039;t set arbitrary data on XML nodes, so they don&#039;t benefit from combinator caching
			if ( xml ) {
				while ( ( elem = elem[ dir ] ) ) {
					if ( elem.nodeType === 1 || checkNonElements ) {
						if ( matcher( elem, context, xml ) ) {
							return true;
						}
					}
				}
			} else {
				while ( ( elem = elem[ dir ] ) ) {
					if ( elem.nodeType === 1 || checkNonElements ) {
						outerCache = elem[ expando ] || ( elem[ expando ] = {} );
&amp;nbsp;
						if ( skip &amp;amp;&amp;amp; nodeName( elem, skip ) ) {
							elem = elem[ dir ] || elem;
						} else if ( ( oldCache = outerCache[ key ] ) &amp;amp;&amp;amp;
							oldCache[ 0 ] === dirruns &amp;amp;&amp;amp; oldCache[ 1 ] === doneName ) {
&amp;nbsp;
							// Assign to newCache so results back-propagate to previous elements
							return ( newCache[ 2 ] = oldCache[ 2 ] );
						} else {
&amp;nbsp;
							// Reuse newcache so results back-propagate to previous elements
							outerCache[ key ] = newCache;
&amp;nbsp;
							// A match means we&#039;re done; a fail means we have to keep checking
							if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
								return true;
							}
						}
					}
				}
			}
			return false;
		};
}
&amp;nbsp;
function elementMatcher( matchers ) {
	return matchers.length &amp;gt; 1 ?
		function( elem, context, xml ) {
			var i = matchers.length;
			while ( i-- ) {
				if ( !matchers[ i ]( elem, context, xml ) ) {
					return false;
				}
			}
			return true;
		} :
		matchers[ 0 ];
}
&amp;nbsp;
function multipleContexts( selector, contexts, results ) {
	var i = 0,
		len = contexts.length;
	for ( ; i &amp;lt; len; i++ ) {
		find( selector, contexts[ i ], results );
	}
	return results;
}
&amp;nbsp;
function condense( unmatched, map, filter, context, xml ) {
	var elem,
		newUnmatched = [],
		i = 0,
		len = unmatched.length,
		mapped = map != null;
&amp;nbsp;
	for ( ; i &amp;lt; len; i++ ) {
		if ( ( elem = unmatched[ i ] ) ) {
			if ( !filter || filter( elem, context, xml ) ) {
				newUnmatched.push( elem );
				if ( mapped ) {
					map.push( i );
				}
			}
		}
	}
&amp;nbsp;
	return newUnmatched;
}
&amp;nbsp;
function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
	if ( postFilter &amp;amp;&amp;amp; !postFilter[ expando ] ) {
		postFilter = setMatcher( postFilter );
	}
	if ( postFinder &amp;amp;&amp;amp; !postFinder[ expando ] ) {
		postFinder = setMatcher( postFinder, postSelector );
	}
	return markFunction( function( seed, results, context, xml ) {
		var temp, i, elem, matcherOut,
			preMap = [],
			postMap = [],
			preexisting = results.length,
&amp;nbsp;
			// Get initial elements from seed or context
			elems = seed ||
				multipleContexts( selector || &amp;quot;*&amp;quot;,
					context.nodeType ? [ context ] : context, [] ),
&amp;nbsp;
			// Prefilter to get matcher input, preserving a map for seed-results synchronization
			matcherIn = preFilter &amp;amp;&amp;amp; ( seed || !selector ) ?
				condense( elems, preMap, preFilter, context, xml ) :
				elems;
&amp;nbsp;
		if ( matcher ) {
&amp;nbsp;
			// If we have a postFinder, or filtered seed, or non-seed postFilter
			// or preexisting results,
			matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
&amp;nbsp;
				// ...intermediate processing is necessary
				[] :
&amp;nbsp;
				// ...otherwise use results directly
				results;
&amp;nbsp;
			// Find primary matches
			matcher( matcherIn, matcherOut, context, xml );
		} else {
			matcherOut = matcherIn;
		}
&amp;nbsp;
		// Apply postFilter
		if ( postFilter ) {
			temp = condense( matcherOut, postMap );
			postFilter( temp, [], context, xml );
&amp;nbsp;
			// Un-match failing elements by moving them back to matcherIn
			i = temp.length;
			while ( i-- ) {
				if ( ( elem = temp[ i ] ) ) {
					matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
				}
			}
		}
&amp;nbsp;
		if ( seed ) {
			if ( postFinder || preFilter ) {
				if ( postFinder ) {
&amp;nbsp;
					// Get the final matcherOut by condensing this intermediate into postFinder contexts
					temp = [];
					i = matcherOut.length;
					while ( i-- ) {
						if ( ( elem = matcherOut[ i ] ) ) {
&amp;nbsp;
							// Restore matcherIn since elem is not yet a final match
							temp.push( ( matcherIn[ i ] = elem ) );
						}
					}
					postFinder( null, ( matcherOut = [] ), temp, xml );
				}
&amp;nbsp;
				// Move matched elements from seed to results to keep them synchronized
				i = matcherOut.length;
				while ( i-- ) {
					if ( ( elem = matcherOut[ i ] ) &amp;amp;&amp;amp;
						( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) &amp;gt; -1 ) {
&amp;nbsp;
						seed[ temp ] = !( results[ temp ] = elem );
					}
				}
			}
&amp;nbsp;
		// Add elements to results, through postFinder if defined
		} else {
			matcherOut = condense(
				matcherOut === results ?
					matcherOut.splice( preexisting, matcherOut.length ) :
					matcherOut
			);
			if ( postFinder ) {
				postFinder( null, results, matcherOut, xml );
			} else {
				push.apply( results, matcherOut );
			}
		}
	} );
}
&amp;nbsp;
function matcherFromTokens( tokens ) {
	var checkContext, matcher, j,
		len = tokens.length,
		leadingRelative = Expr.relative[ tokens[ 0 ].type ],
		implicitRelative = leadingRelative || Expr.relative[ &amp;quot; &amp;quot; ],
		i = leadingRelative ? 1 : 0,
&amp;nbsp;
		// The foundational matcher ensures that elements are reachable from top-level context(s)
		matchContext = addCombinator( function( elem ) {
			return elem === checkContext;
		}, implicitRelative, true ),
		matchAnyContext = addCombinator( function( elem ) {
			return indexOf.call( checkContext, elem ) &amp;gt; -1;
		}, implicitRelative, true ),
		matchers = [ function( elem, context, xml ) {
&amp;nbsp;
			// Support: IE 11+, Edge 17 - 18+
			// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
			// two documents; shallow comparisons work.
			// eslint-disable-next-line eqeqeq
			var ret = ( !leadingRelative &amp;amp;&amp;amp; ( xml || context != outermostContext ) ) || (
				( checkContext = context ).nodeType ?
					matchContext( elem, context, xml ) :
					matchAnyContext( elem, context, xml ) );
&amp;nbsp;
			// Avoid hanging onto element
			// (see https://github.com/jquery/sizzle/issues/299)
			checkContext = null;
			return ret;
		} ];
&amp;nbsp;
	for ( ; i &amp;lt; len; i++ ) {
		if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
			matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
		} else {
			matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
&amp;nbsp;
			// Return special upon seeing a positional matcher
			if ( matcher[ expando ] ) {
&amp;nbsp;
				// Find the next relative operator (if any) for proper handling
				j = ++i;
				for ( ; j &amp;lt; len; j++ ) {
					if ( Expr.relative[ tokens[ j ].type ] ) {
						break;
					}
				}
				return setMatcher(
					i &amp;gt; 1 &amp;amp;&amp;amp; elementMatcher( matchers ),
					i &amp;gt; 1 &amp;amp;&amp;amp; toSelector(
&amp;nbsp;
						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
						tokens.slice( 0, i - 1 )
							.concat( { value: tokens[ i - 2 ].type === &amp;quot; &amp;quot; ? &amp;quot;*&amp;quot; : &amp;quot;&amp;quot; } )
					).replace( rtrimCSS, &amp;quot;$1&amp;quot; ),
					matcher,
					i &amp;lt; j &amp;amp;&amp;amp; matcherFromTokens( tokens.slice( i, j ) ),
					j &amp;lt; len &amp;amp;&amp;amp; matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
					j &amp;lt; len &amp;amp;&amp;amp; toSelector( tokens )
				);
			}
			matchers.push( matcher );
		}
	}
&amp;nbsp;
	return elementMatcher( matchers );
}
&amp;nbsp;
function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
	var bySet = setMatchers.length &amp;gt; 0,
		byElement = elementMatchers.length &amp;gt; 0,
		superMatcher = function( seed, context, xml, results, outermost ) {
			var elem, j, matcher,
				matchedCount = 0,
				i = &amp;quot;0&amp;quot;,
				unmatched = seed &amp;amp;&amp;amp; [],
				setMatched = [],
				contextBackup = outermostContext,
&amp;nbsp;
				// We must always have either seed elements or outermost context
				elems = seed || byElement &amp;amp;&amp;amp; Expr.find.TAG( &amp;quot;*&amp;quot;, outermost ),
&amp;nbsp;
				// Use integer dirruns iff this is the outermost matcher
				dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
				len = elems.length;
&amp;nbsp;
			if ( outermost ) {
&amp;nbsp;
				// Support: IE 11+, Edge 17 - 18+
				// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
				// two documents; shallow comparisons work.
				// eslint-disable-next-line eqeqeq
				outermostContext = context == document || context || outermost;
			}
&amp;nbsp;
			// Add elements passing elementMatchers directly to results
			// Support: iOS &amp;lt;=7 - 9 only
			// Tolerate NodeList properties (IE: &amp;quot;length&amp;quot;; Safari: &amp;lt;number&amp;gt;) matching
			// elements by id. (see trac-14142)
			for ( ; i !== len &amp;amp;&amp;amp; ( elem = elems[ i ] ) != null; i++ ) {
				if ( byElement &amp;amp;&amp;amp; elem ) {
					j = 0;
&amp;nbsp;
					// Support: IE 11+, Edge 17 - 18+
					// IE/Edge sometimes throw a &amp;quot;Permission denied&amp;quot; error when strict-comparing
					// two documents; shallow comparisons work.
					// eslint-disable-next-line eqeqeq
					if ( !context &amp;amp;&amp;amp; elem.ownerDocument != document ) {
						setDocument( elem );
						xml = !documentIsHTML;
					}
					while ( ( matcher = elementMatchers[ j++ ] ) ) {
						if ( matcher( elem, context || document, xml ) ) {
							push.call( results, elem );
							break;
						}
					}
					if ( outermost ) {
						dirruns = dirrunsUnique;
					}
				}
&amp;nbsp;
				// Track unmatched elements for set filters
				if ( bySet ) {
&amp;nbsp;
					// They will have gone through all possible matchers
					if ( ( elem = !matcher &amp;amp;&amp;amp; elem ) ) {
						matchedCount--;
					}
&amp;nbsp;
					// Lengthen the array for every element, matched or not
					if ( seed ) {
						unmatched.push( elem );
					}
				}
			}
&amp;nbsp;
			// `i` is now the count of elements visited above, and adding it to `matchedCount`
			// makes the latter nonnegative.
			matchedCount += i;
&amp;nbsp;
			// Apply set filters to unmatched elements
			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
			// equals `i`), unless we didn&#039;t visit _any_ elements in the above loop because we have
			// no element matchers and no seed.
			// Incrementing an initially-string &amp;quot;0&amp;quot; `i` allows `i` to remain a string only in that
			// case, which will result in a &amp;quot;00&amp;quot; `matchedCount` that differs from `i` but is also
			// numerically zero.
			if ( bySet &amp;amp;&amp;amp; i !== matchedCount ) {
				j = 0;
				while ( ( matcher = setMatchers[ j++ ] ) ) {
					matcher( unmatched, setMatched, context, xml );
				}
&amp;nbsp;
				if ( seed ) {
&amp;nbsp;
					// Reintegrate element matches to eliminate the need for sorting
					if ( matchedCount &amp;gt; 0 ) {
						while ( i-- ) {
							if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
								setMatched[ i ] = pop.call( results );
							}
						}
					}
&amp;nbsp;
					// Discard index placeholder values to get only actual matches
					setMatched = condense( setMatched );
				}
&amp;nbsp;
				// Add matches to results
				push.apply( results, setMatched );
&amp;nbsp;
				// Seedless set matches succeeding multiple successful matchers stipulate sorting
				if ( outermost &amp;amp;&amp;amp; !seed &amp;amp;&amp;amp; setMatched.length &amp;gt; 0 &amp;amp;&amp;amp;
					( matchedCount + setMatchers.length ) &amp;gt; 1 ) {
&amp;nbsp;
					jQuery.uniqueSort( results );
				}
			}
&amp;nbsp;
			// Override manipulation of globals by nested matchers
			if ( outermost ) {
				dirruns = dirrunsUnique;
				outermostContext = contextBackup;
			}
&amp;nbsp;
			return unmatched;
		};
&amp;nbsp;
	return bySet ?
		markFunction( superMatcher ) :
		superMatcher;
}
&amp;nbsp;
function compile( selector, match /* Internal Use Only */ ) {
	var i,
		setMatchers = [],
		elementMatchers = [],
		cached = compilerCache[ selector + &amp;quot; &amp;quot; ];
&amp;nbsp;
	if ( !cached ) {
&amp;nbsp;
		// Generate a function of recursive functions that can be used to check each element
		if ( !match ) {
			match = tokenize( selector );
		}
		i = match.length;
		while ( i-- ) {
			cached = matcherFromTokens( match[ i ] );
			if ( cached[ expando ] ) {
				setMatchers.push( cached );
			} else {
				elementMatchers.push( cached );
			}
		}
&amp;nbsp;
		// Cache the compiled function
		cached = compilerCache( selector,
			matcherFromGroupMatchers( elementMatchers, setMatchers ) );
&amp;nbsp;
		// Save selector and tokenization
		cached.selector = selector;
	}
	return cached;
}
&amp;nbsp;
/**
 * A low-level selection function that works with jQuery&#039;s compiled
 *  selector functions
 * @param {String|Function} selector A selector or a pre-compiled
 *  selector function built with jQuery selector compile
 * @param {Element} context
 * @param {Array} [results]
 * @param {Array} [seed] A set of elements to match against
 */
function select( selector, context, results, seed ) {
	var i, tokens, token, type, find,
		compiled = typeof selector === &amp;quot;function&amp;quot; &amp;amp;&amp;amp; selector,
		match = !seed &amp;amp;&amp;amp; tokenize( ( selector = compiled.selector || selector ) );
&amp;nbsp;
	results = results || [];
&amp;nbsp;
	// Try to minimize operations if there is only one selector in the list and no seed
	// (the latter of which guarantees us context)
	if ( match.length === 1 ) {
&amp;nbsp;
		// Reduce context if the leading compound selector is an ID
		tokens = match[ 0 ] = match[ 0 ].slice( 0 );
		if ( tokens.length &amp;gt; 2 &amp;amp;&amp;amp; ( token = tokens[ 0 ] ).type === &amp;quot;ID&amp;quot; &amp;amp;&amp;amp;
				context.nodeType === 9 &amp;amp;&amp;amp; documentIsHTML &amp;amp;&amp;amp; Expr.relative[ tokens[ 1 ].type ] ) {
&amp;nbsp;
			context = ( Expr.find.ID(
				token.matches[ 0 ].replace( runescape, funescape ),
				context
			) || [] )[ 0 ];
			if ( !context ) {
				return results;
&amp;nbsp;
			// Precompiled matchers will still verify ancestry, so step up a level
			} else if ( compiled ) {
				context = context.parentNode;
			}
&amp;nbsp;
			selector = selector.slice( tokens.shift().value.length );
		}
&amp;nbsp;
		// Fetch a seed set for right-to-left matching
		i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;
		while ( i-- ) {
			token = tokens[ i ];
&amp;nbsp;
			// Abort if we hit a combinator
			if ( Expr.relative[ ( type = token.type ) ] ) {
				break;
			}
			if ( ( find = Expr.find[ type ] ) ) {
&amp;nbsp;
				// Search, expanding context for leading sibling combinators
				if ( ( seed = find(
					token.matches[ 0 ].replace( runescape, funescape ),
					rsibling.test( tokens[ 0 ].type ) &amp;amp;&amp;amp;
						testContext( context.parentNode ) || context
				) ) ) {
&amp;nbsp;
					// If seed is empty or no tokens remain, we can return early
					tokens.splice( i, 1 );
					selector = seed.length &amp;amp;&amp;amp; toSelector( tokens );
					if ( !selector ) {
						push.apply( results, seed );
						return results;
					}
&amp;nbsp;
					break;
				}
			}
		}
	}
&amp;nbsp;
	// Compile and execute a filtering function if one is not provided
	// Provide `match` to avoid retokenization if we modified the selector above
	( compiled || compile( selector, match ) )(
		seed,
		context,
		!documentIsHTML,
		results,
		!context || rsibling.test( selector ) &amp;amp;&amp;amp; testContext( context.parentNode ) || context
	);
	return results;
}
&amp;nbsp;
// One-time assignments
&amp;nbsp;
// Support: Android &amp;lt;=4.0 - 4.1+
// Sort stability
support.sortStable = expando.split( &amp;quot;&amp;quot; ).sort( sortOrder ).join( &amp;quot;&amp;quot; ) === expando;
&amp;nbsp;
// Initialize against the default document
setDocument();
&amp;nbsp;
// Support: Android &amp;lt;=4.0 - 4.1+
// Detached nodes confoundingly follow *each other*
support.sortDetached = assert( function( el ) {
&amp;nbsp;
	// Should return 1, but returns 4 (following)
	return el.compareDocumentPosition( document.createElement( &amp;quot;fieldset&amp;quot; ) ) &amp;amp; 1;
} );
&amp;nbsp;
jQuery.find = find;
&amp;nbsp;
// Deprecated
jQuery.expr[ &amp;quot;:&amp;quot; ] = jQuery.expr.pseudos;
jQuery.unique = jQuery.uniqueSort;
&amp;nbsp;
// These have always been private, but they used to be documented as part of
// Sizzle so let&#039;s maintain them for now for backwards compatibility purposes.
find.compile = compile;
find.select = select;
find.setDocument = setDocument;
find.tokenize = tokenize;
&amp;nbsp;
find.escape = jQuery.escapeSelector;
find.getText = jQuery.text;
find.isXML = jQuery.isXMLDoc;
find.selectors = jQuery.expr;
find.support = jQuery.support;
find.uniqueSort = jQuery.uniqueSort;
&amp;nbsp;
	/* eslint-enable */
&amp;nbsp;
} )();
&amp;nbsp;
&amp;nbsp;
var dir = function( elem, dir, until ) {
	var matched = [],
		truncate = until !== undefined;
&amp;nbsp;
	while ( ( elem = elem[ dir ] ) &amp;amp;&amp;amp; elem.nodeType !== 9 ) {
		if ( elem.nodeType === 1 ) {
			if ( truncate &amp;amp;&amp;amp; jQuery( elem ).is( until ) ) {
				break;
			}
			matched.push( elem );
		}
	}
	return matched;
};
&amp;nbsp;
&amp;nbsp;
var siblings = function( n, elem ) {
	var matched = [];
&amp;nbsp;
	for ( ; n; n = n.nextSibling ) {
		if ( n.nodeType === 1 &amp;amp;&amp;amp; n !== elem ) {
			matched.push( n );
		}
	}
&amp;nbsp;
	return matched;
};
&amp;nbsp;
&amp;nbsp;
var rneedsContext = jQuery.expr.match.needsContext;
&amp;nbsp;
var rsingleTag = ( /^&amp;lt;([a-z][^\/\0&amp;gt;:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?&amp;gt;(?:&amp;lt;\/\1&amp;gt;|)$/i );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// Implement the identical functionality for filter and not
function winnow( elements, qualifier, not ) {
	if ( isFunction( qualifier ) ) {
		return jQuery.grep( elements, function( elem, i ) {
			return !!qualifier.call( elem, i, elem ) !== not;
		} );
	}
&amp;nbsp;
	// Single element
	if ( qualifier.nodeType ) {
		return jQuery.grep( elements, function( elem ) {
			return ( elem === qualifier ) !== not;
		} );
	}
&amp;nbsp;
	// Arraylike of elements (jQuery, arguments, Array)
	if ( typeof qualifier !== &amp;quot;string&amp;quot; ) {
		return jQuery.grep( elements, function( elem ) {
			return ( indexOf.call( qualifier, elem ) &amp;gt; -1 ) !== not;
		} );
	}
&amp;nbsp;
	// Filtered directly for both simple and complex selectors
	return jQuery.filter( qualifier, elements, not );
}
&amp;nbsp;
jQuery.filter = function( expr, elems, not ) {
	var elem = elems[ 0 ];
&amp;nbsp;
	if ( not ) {
		expr = &amp;quot;:not(&amp;quot; + expr + &amp;quot;)&amp;quot;;
	}
&amp;nbsp;
	if ( elems.length === 1 &amp;amp;&amp;amp; elem.nodeType === 1 ) {
		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
	}
&amp;nbsp;
	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
		return elem.nodeType === 1;
	} ) );
};
&amp;nbsp;
jQuery.fn.extend( {
	find: function( selector ) {
		var i, ret,
			len = this.length,
			self = this;
&amp;nbsp;
		if ( typeof selector !== &amp;quot;string&amp;quot; ) {
			return this.pushStack( jQuery( selector ).filter( function() {
				for ( i = 0; i &amp;lt; len; i++ ) {
					if ( jQuery.contains( self[ i ], this ) ) {
						return true;
					}
				}
			} ) );
		}
&amp;nbsp;
		ret = this.pushStack( [] );
&amp;nbsp;
		for ( i = 0; i &amp;lt; len; i++ ) {
			jQuery.find( selector, self[ i ], ret );
		}
&amp;nbsp;
		return len &amp;gt; 1 ? jQuery.uniqueSort( ret ) : ret;
	},
	filter: function( selector ) {
		return this.pushStack( winnow( this, selector || [], false ) );
	},
	not: function( selector ) {
		return this.pushStack( winnow( this, selector || [], true ) );
	},
	is: function( selector ) {
		return !!winnow(
			this,
&amp;nbsp;
			// If this is a positional/relative selector, check membership in the returned set
			// so $(&amp;quot;p:first&amp;quot;).is(&amp;quot;p:last&amp;quot;) won&#039;t return true for a doc with two &amp;quot;p&amp;quot;.
			typeof selector === &amp;quot;string&amp;quot; &amp;amp;&amp;amp; rneedsContext.test( selector ) ?
				jQuery( selector ) :
				selector || [],
			false
		).length;
	}
} );
&amp;nbsp;
&amp;nbsp;
// Initialize a jQuery object
&amp;nbsp;
&amp;nbsp;
// A central reference to the root jQuery(document)
var rootjQuery,
&amp;nbsp;
	// A simple way to check for HTML strings
	// Prioritize #id over &amp;lt;tag&amp;gt; to avoid XSS via location.hash (trac-9521)
	// Strict HTML recognition (trac-11290: must start with &amp;lt;)
	// Shortcut simple #id case for speed
	rquickExpr = /^(?:\s*(&amp;lt;[\w\W]+&amp;gt;)[^&amp;gt;]*|#([\w-]+))$/,
&amp;nbsp;
	init = jQuery.fn.init = function( selector, context, root ) {
		var match, elem;
&amp;nbsp;
		// HANDLE: $(&amp;quot;&amp;quot;), $(null), $(undefined), $(false)
		if ( !selector ) {
			return this;
		}
&amp;nbsp;
		// Method init() accepts an alternate rootjQuery
		// so migrate can support jQuery.sub (gh-2101)
		root = root || rootjQuery;
&amp;nbsp;
		// Handle HTML strings
		if ( typeof selector === &amp;quot;string&amp;quot; ) {
			if ( selector[ 0 ] === &amp;quot;&amp;lt;&amp;quot; &amp;amp;&amp;amp;
				selector[ selector.length - 1 ] === &amp;quot;&amp;gt;&amp;quot; &amp;amp;&amp;amp;
				selector.length &amp;gt;= 3 ) {
&amp;nbsp;
				// Assume that strings that start and end with &amp;lt;&amp;gt; are HTML and skip the regex check
				match = [ null, selector, null ];
&amp;nbsp;
			} else {
				match = rquickExpr.exec( selector );
			}
&amp;nbsp;
			// Match html or make sure no context is specified for #id
			if ( match &amp;amp;&amp;amp; ( match[ 1 ] || !context ) ) {
&amp;nbsp;
				// HANDLE: $(html) -&amp;gt; $(array)
				if ( match[ 1 ] ) {
					context = context instanceof jQuery ? context[ 0 ] : context;
&amp;nbsp;
					// Option to run scripts is true for back-compat
					// Intentionally let the error be thrown if parseHTML is not present
					jQuery.merge( this, jQuery.parseHTML(
						match[ 1 ],
						context &amp;amp;&amp;amp; context.nodeType ? context.ownerDocument || context : document,
						true
					) );
&amp;nbsp;
					// HANDLE: $(html, props)
					if ( rsingleTag.test( match[ 1 ] ) &amp;amp;&amp;amp; jQuery.isPlainObject( context ) ) {
						for ( match in context ) {
&amp;nbsp;
							// Properties of context are called as methods if possible
							if ( isFunction( this[ match ] ) ) {
								this[ match ]( context[ match ] );
&amp;nbsp;
							// ...and otherwise set as attributes
							} else {
								this.attr( match, context[ match ] );
							}
						}
					}
&amp;nbsp;
					return this;
&amp;nbsp;
				// HANDLE: $(#id)
				} else {
					elem = document.getElementById( match[ 2 ] );
&amp;nbsp;
					if ( elem ) {
&amp;nbsp;
						// Inject the element directly into the jQuery object
						this[ 0 ] = elem;
						this.length = 1;
					}
					return this;
				}
&amp;nbsp;
			// HANDLE: $(expr, $(...))
			} else if ( !context || context.jquery ) {
				return ( context || root ).find( selector );
&amp;nbsp;
			// HANDLE: $(expr, context)
			// (which is just equivalent to: $(context).find(expr)
			} else {
				return this.constructor( context ).find( selector );
			}
&amp;nbsp;
		// HANDLE: $(DOMElement)
		} else if ( selector.nodeType ) {
			this[ 0 ] = selector;
			this.length = 1;
			return this;
&amp;nbsp;
		// HANDLE: $(function)
		// Shortcut for document ready
		} else if ( isFunction( selector ) ) {
			return root.ready !== undefined ?
				root.ready( selector ) :
&amp;nbsp;
				// Execute immediately if ready is not present
				selector( jQuery );
		}
&amp;nbsp;
		return jQuery.makeArray( selector, this );
	};
&amp;nbsp;
// Give the init function the jQuery prototype for later instantiation
init.prototype = jQuery.fn;
&amp;nbsp;
// Initialize central reference
rootjQuery = jQuery( document );
&amp;nbsp;
&amp;nbsp;
var rparentsprev = /^(?:parents|prev(?:Until|All))/,
&amp;nbsp;
	// Methods guaranteed to produce a unique set when starting from a unique set
	guaranteedUnique = {
		children: true,
		contents: true,
		next: true,
		prev: true
	};
&amp;nbsp;
jQuery.fn.extend( {
	has: function( target ) {
		var targets = jQuery( target, this ),
			l = targets.length;
&amp;nbsp;
		return this.filter( function() {
			var i = 0;
			for ( ; i &amp;lt; l; i++ ) {
				if ( jQuery.contains( this, targets[ i ] ) ) {
					return true;
				}
			}
		} );
	},
&amp;nbsp;
	closest: function( selectors, context ) {
		var cur,
			i = 0,
			l = this.length,
			matched = [],
			targets = typeof selectors !== &amp;quot;string&amp;quot; &amp;amp;&amp;amp; jQuery( selectors );
&amp;nbsp;
		// Positional selectors never match, since there&#039;s no _selection_ context
		if ( !rneedsContext.test( selectors ) ) {
			for ( ; i &amp;lt; l; i++ ) {
				for ( cur = this[ i ]; cur &amp;amp;&amp;amp; cur !== context; cur = cur.parentNode ) {
&amp;nbsp;
					// Always skip document fragments
					if ( cur.nodeType &amp;lt; 11 &amp;amp;&amp;amp; ( targets ?
						targets.index( cur ) &amp;gt; -1 :
&amp;nbsp;
						// Don&#039;t pass non-elements to jQuery#find
						cur.nodeType === 1 &amp;amp;&amp;amp;
							jQuery.find.matchesSelector( cur, selectors ) ) ) {
&amp;nbsp;
						matched.push( cur );
						break;
					}
				}
			}
		}
&amp;nbsp;
		return this.pushStack( matched.length &amp;gt; 1 ? jQuery.uniqueSort( matched ) : matched );
	},
&amp;nbsp;
	// Determine the position of an element within the set
	index: function( elem ) {
&amp;nbsp;
		// No argument, return index in parent
		if ( !elem ) {
			return ( this[ 0 ] &amp;amp;&amp;amp; this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
		}
&amp;nbsp;
		// Index in selector
		if ( typeof elem === &amp;quot;string&amp;quot; ) {
			return indexOf.call( jQuery( elem ), this[ 0 ] );
		}
&amp;nbsp;
		// Locate the position of the desired element
		return indexOf.call( this,
&amp;nbsp;
			// If it receives a jQuery object, the first element is used
			elem.jquery ? elem[ 0 ] : elem
		);
	},
&amp;nbsp;
	add: function( selector, context ) {
		return this.pushStack(
			jQuery.uniqueSort(
				jQuery.merge( this.get(), jQuery( selector, context ) )
			)
		);
	},
&amp;nbsp;
	addBack: function( selector ) {
		return this.add( selector == null ?
			this.prevObject : this.prevObject.filter( selector )
		);
	}
} );
&amp;nbsp;
function sibling( cur, dir ) {
	while ( ( cur = cur[ dir ] ) &amp;amp;&amp;amp; cur.nodeType !== 1 ) {}
	return cur;
}
&amp;nbsp;
jQuery.each( {
	parent: function( elem ) {
		var parent = elem.parentNode;
		return parent &amp;amp;&amp;amp; parent.nodeType !== 11 ? parent : null;
	},
	parents: function( elem ) {
		return dir( elem, &amp;quot;parentNode&amp;quot; );
	},
	parentsUntil: function( elem, _i, until ) {
		return dir( elem, &amp;quot;parentNode&amp;quot;, until );
	},
	next: function( elem ) {
		return sibling( elem, &amp;quot;nextSibling&amp;quot; );
	},
	prev: function( elem ) {
		return sibling( elem, &amp;quot;previousSibling&amp;quot; );
	},
	nextAll: function( elem ) {
		return dir( elem, &amp;quot;nextSibling&amp;quot; );
	},
	prevAll: function( elem ) {
		return dir( elem, &amp;quot;previousSibling&amp;quot; );
	},
	nextUntil: function( elem, _i, until ) {
		return dir( elem, &amp;quot;nextSibling&amp;quot;, until );
	},
	prevUntil: function( elem, _i, until ) {
		return dir( elem, &amp;quot;previousSibling&amp;quot;, until );
	},
	siblings: function( elem ) {
		return siblings( ( elem.parentNode || {} ).firstChild, elem );
	},
	children: function( elem ) {
		return siblings( elem.firstChild );
	},
	contents: function( elem ) {
		if ( elem.contentDocument != null &amp;amp;&amp;amp;
&amp;nbsp;
			// Support: IE 11+
			// &amp;lt;object&amp;gt; elements with no `data` attribute has an object
			// `contentDocument` with a `null` prototype.
			getProto( elem.contentDocument ) ) {
&amp;nbsp;
			return elem.contentDocument;
		}
&amp;nbsp;
		// Support: IE 9 - 11 only, iOS 7 only, Android Browser &amp;lt;=4.3 only
		// Treat the template element as a regular one in browsers that
		// don&#039;t support it.
		if ( nodeName( elem, &amp;quot;template&amp;quot; ) ) {
			elem = elem.content || elem;
		}
&amp;nbsp;
		return jQuery.merge( [], elem.childNodes );
	}
}, function( name, fn ) {
	jQuery.fn[ name ] = function( until, selector ) {
		var matched = jQuery.map( this, fn, until );
&amp;nbsp;
		if ( name.slice( -5 ) !== &amp;quot;Until&amp;quot; ) {
			selector = until;
		}
&amp;nbsp;
		if ( selector &amp;amp;&amp;amp; typeof selector === &amp;quot;string&amp;quot; ) {
			matched = jQuery.filter( selector, matched );
		}
&amp;nbsp;
		if ( this.length &amp;gt; 1 ) {
&amp;nbsp;
			// Remove duplicates
			if ( !guaranteedUnique[ name ] ) {
				jQuery.uniqueSort( matched );
			}
&amp;nbsp;
			// Reverse order for parents* and prev-derivatives
			if ( rparentsprev.test( name ) ) {
				matched.reverse();
			}
		}
&amp;nbsp;
		return this.pushStack( matched );
	};
} );
var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// Convert String-formatted options into Object-formatted ones
function createOptions( options ) {
	var object = {};
	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
		object[ flag ] = true;
	} );
	return object;
}
&amp;nbsp;
/*
 * Create a callback list using the following parameters:
 *
 *	options: an optional list of space-separated options that will change how
 *			the callback list behaves or a more traditional option object
 *
 * By default a callback list will act like an event callback list and can be
 * &amp;quot;fired&amp;quot; multiple times.
 *
 * Possible options:
 *
 *	once:			will ensure the callback list can only be fired once (like a Deferred)
 *
 *	memory:			will keep track of previous values and will call any callback added
 *					after the list has been fired right away with the latest &amp;quot;memorized&amp;quot;
 *					values (like a Deferred)
 *
 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
 *
 *	stopOnFalse:	interrupt callings when a callback returns false
 *
 */
jQuery.Callbacks = function( options ) {
&amp;nbsp;
	// Convert options from String-formatted to Object-formatted if needed
	// (we check in cache first)
	options = typeof options === &amp;quot;string&amp;quot; ?
		createOptions( options ) :
		jQuery.extend( {}, options );
&amp;nbsp;
	var // Flag to know if list is currently firing
		firing,
&amp;nbsp;
		// Last fire value for non-forgettable lists
		memory,
&amp;nbsp;
		// Flag to know if list was already fired
		fired,
&amp;nbsp;
		// Flag to prevent firing
		locked,
&amp;nbsp;
		// Actual callback list
		list = [],
&amp;nbsp;
		// Queue of execution data for repeatable lists
		queue = [],
&amp;nbsp;
		// Index of currently firing callback (modified by add/remove as needed)
		firingIndex = -1,
&amp;nbsp;
		// Fire callbacks
		fire = function() {
&amp;nbsp;
			// Enforce single-firing
			locked = locked || options.once;
&amp;nbsp;
			// Execute callbacks for all pending executions,
			// respecting firingIndex overrides and runtime changes
			fired = firing = true;
			for ( ; queue.length; firingIndex = -1 ) {
				memory = queue.shift();
				while ( ++firingIndex &amp;lt; list.length ) {
&amp;nbsp;
					// Run callback and check for early termination
					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &amp;amp;&amp;amp;
						options.stopOnFalse ) {
&amp;nbsp;
						// Jump to end and forget the data so .add doesn&#039;t re-fire
						firingIndex = list.length;
						memory = false;
					}
				}
			}
&amp;nbsp;
			// Forget the data if we&#039;re done with it
			if ( !options.memory ) {
				memory = false;
			}
&amp;nbsp;
			firing = false;
&amp;nbsp;
			// Clean up if we&#039;re done firing for good
			if ( locked ) {
&amp;nbsp;
				// Keep an empty list if we have data for future add calls
				if ( memory ) {
					list = [];
&amp;nbsp;
				// Otherwise, this object is spent
				} else {
					list = &amp;quot;&amp;quot;;
				}
			}
		},
&amp;nbsp;
		// Actual Callbacks object
		self = {
&amp;nbsp;
			// Add a callback or a collection of callbacks to the list
			add: function() {
				if ( list ) {
&amp;nbsp;
					// If we have memory from a past run, we should fire after adding
					if ( memory &amp;amp;&amp;amp; !firing ) {
						firingIndex = list.length - 1;
						queue.push( memory );
					}
&amp;nbsp;
					( function add( args ) {
						jQuery.each( args, function( _, arg ) {
							if ( isFunction( arg ) ) {
								if ( !options.unique || !self.has( arg ) ) {
									list.push( arg );
								}
							} else if ( arg &amp;amp;&amp;amp; arg.length &amp;amp;&amp;amp; toType( arg ) !== &amp;quot;string&amp;quot; ) {
&amp;nbsp;
								// Inspect recursively
								add( arg );
							}
						} );
					} )( arguments );
&amp;nbsp;
					if ( memory &amp;amp;&amp;amp; !firing ) {
						fire();
					}
				}
				return this;
			},
&amp;nbsp;
			// Remove a callback from the list
			remove: function() {
				jQuery.each( arguments, function( _, arg ) {
					var index;
					while ( ( index = jQuery.inArray( arg, list, index ) ) &amp;gt; -1 ) {
						list.splice( index, 1 );
&amp;nbsp;
						// Handle firing indexes
						if ( index &amp;lt;= firingIndex ) {
							firingIndex--;
						}
					}
				} );
				return this;
			},
&amp;nbsp;
			// Check if a given callback is in the list.
			// If no argument is given, return whether or not list has callbacks attached.
			has: function( fn ) {
				return fn ?
					jQuery.inArray( fn, list ) &amp;gt; -1 :
					list.length &amp;gt; 0;
			},
&amp;nbsp;
			// Remove all callbacks from the list
			empty: function() {
				if ( list ) {
					list = [];
				}
				return this;
			},
&amp;nbsp;
			// Disable .fire and .add
			// Abort any current/pending executions
			// Clear all callbacks and values
			disable: function() {
				locked = queue = [];
				list = memory = &amp;quot;&amp;quot;;
				return this;
			},
			disabled: function() {
				return !list;
			},
&amp;nbsp;
			// Disable .fire
			// Also disable .add unless we have memory (since it would have no effect)
			// Abort any pending executions
			lock: function() {
				locked = queue = [];
				if ( !memory &amp;amp;&amp;amp; !firing ) {
					list = memory = &amp;quot;&amp;quot;;
				}
				return this;
			},
			locked: function() {
				return !!locked;
			},
&amp;nbsp;
			// Call all callbacks with the given context and arguments
			fireWith: function( context, args ) {
				if ( !locked ) {
					args = args || [];
					args = [ context, args.slice ? args.slice() : args ];
					queue.push( args );
					if ( !firing ) {
						fire();
					}
				}
				return this;
			},
&amp;nbsp;
			// Call all the callbacks with the given arguments
			fire: function() {
				self.fireWith( this, arguments );
				return this;
			},
&amp;nbsp;
			// To know if the callbacks have already been called at least once
			fired: function() {
				return !!fired;
			}
		};
&amp;nbsp;
	return self;
};
&amp;nbsp;
&amp;nbsp;
function Identity( v ) {
	return v;
}
function Thrower( ex ) {
	throw ex;
}
&amp;nbsp;
function adoptValue( value, resolve, reject, noValue ) {
	var method;
&amp;nbsp;
	try {
&amp;nbsp;
		// Check for promise aspect first to privilege synchronous behavior
		if ( value &amp;amp;&amp;amp; isFunction( ( method = value.promise ) ) ) {
			method.call( value ).done( resolve ).fail( reject );
&amp;nbsp;
		// Other thenables
		} else if ( value &amp;amp;&amp;amp; isFunction( ( method = value.then ) ) ) {
			method.call( value, resolve, reject );
&amp;nbsp;
		// Other non-thenables
		} else {
&amp;nbsp;
			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
			// * false: [ value ].slice( 0 ) =&amp;gt; resolve( value )
			// * true: [ value ].slice( 1 ) =&amp;gt; resolve()
			resolve.apply( undefined, [ value ].slice( noValue ) );
		}
&amp;nbsp;
	// For Promises/A+, convert exceptions into rejections
	// Since jQuery.when doesn&#039;t unwrap thenables, we can skip the extra checks appearing in
	// Deferred#then to conditionally suppress rejection.
	} catch ( value ) {
&amp;nbsp;
		// Support: Android 4.0 only
		// Strict mode functions invoked without .call/.apply get global-object context
		reject.apply( undefined, [ value ] );
	}
}
&amp;nbsp;
jQuery.extend( {
&amp;nbsp;
	Deferred: function( func ) {
		var tuples = [
&amp;nbsp;
				// action, add listener, callbacks,
				// ... .then handlers, argument index, [final state]
				[ &amp;quot;notify&amp;quot;, &amp;quot;progress&amp;quot;, jQuery.Callbacks( &amp;quot;memory&amp;quot; ),
					jQuery.Callbacks( &amp;quot;memory&amp;quot; ), 2 ],
				[ &amp;quot;resolve&amp;quot;, &amp;quot;done&amp;quot;, jQuery.Callbacks( &amp;quot;once memory&amp;quot; ),
					jQuery.Callbacks( &amp;quot;once memory&amp;quot; ), 0, &amp;quot;resolved&amp;quot; ],
				[ &amp;quot;reject&amp;quot;, &amp;quot;fail&amp;quot;, jQuery.Callbacks( &amp;quot;once memory&amp;quot; ),
					jQuery.Callbacks( &amp;quot;once memory&amp;quot; ), 1, &amp;quot;rejected&amp;quot; ]
			],
			state = &amp;quot;pending&amp;quot;,
			promise = {
				state: function() {
					return state;
				},
				always: function() {
					deferred.done( arguments ).fail( arguments );
					return this;
				},
				&amp;quot;catch&amp;quot;: function( fn ) {
					return promise.then( null, fn );
				},
&amp;nbsp;
				// Keep pipe for back-compat
				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
					var fns = arguments;
&amp;nbsp;
					return jQuery.Deferred( function( newDefer ) {
						jQuery.each( tuples, function( _i, tuple ) {
&amp;nbsp;
							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
							var fn = isFunction( fns[ tuple[ 4 ] ] ) &amp;amp;&amp;amp; fns[ tuple[ 4 ] ];
&amp;nbsp;
							// deferred.progress(function() { bind to newDefer or newDefer.notify })
							// deferred.done(function() { bind to newDefer or newDefer.resolve })
							// deferred.fail(function() { bind to newDefer or newDefer.reject })
							deferred[ tuple[ 1 ] ]( function() {
								var returned = fn &amp;amp;&amp;amp; fn.apply( this, arguments );
								if ( returned &amp;amp;&amp;amp; isFunction( returned.promise ) ) {
									returned.promise()
										.progress( newDefer.notify )
										.done( newDefer.resolve )
										.fail( newDefer.reject );
								} else {
									newDefer[ tuple[ 0 ] + &amp;quot;With&amp;quot; ](
										this,
										fn ? [ returned ] : arguments
									);
								}
							} );
						} );
						fns = null;
					} ).promise();
				},
				then: function( onFulfilled, onRejected, onProgress ) {
					var maxDepth = 0;
					function resolve( depth, deferred, handler, special ) {
						return function() {
							var that = this,
								args = arguments,
								mightThrow = function() {
									var returned, then;
&amp;nbsp;
									// Support: Promises/A+ section 2.3.3.3.3
									// https://promisesaplus.com/#point-59
									// Ignore double-resolution attempts
									if ( depth &amp;lt; maxDepth ) {
										return;
									}
&amp;nbsp;
									returned = handler.apply( that, args );
&amp;nbsp;
									// Support: Promises/A+ section 2.3.1
									// https://promisesaplus.com/#point-48
									if ( returned === deferred.promise() ) {
										throw new TypeError( &amp;quot;Thenable self-resolution&amp;quot; );
									}
&amp;nbsp;
									// Support: Promises/A+ sections 2.3.3.1, 3.5
									// https://promisesaplus.com/#point-54
									// https://promisesaplus.com/#point-75
									// Retrieve `then` only once
									then = returned &amp;amp;&amp;amp;
&amp;nbsp;
										// Support: Promises/A+ section 2.3.4
										// https://promisesaplus.com/#point-64
										// Only check objects and functions for thenability
										( typeof returned === &amp;quot;object&amp;quot; ||
											typeof returned === &amp;quot;function&amp;quot; ) &amp;amp;&amp;amp;
										returned.then;
&amp;nbsp;
									// Handle a returned thenable
									if ( isFunction( then ) ) {
&amp;nbsp;
										// Special processors (notify) just wait for resolution
										if ( special ) {
											then.call(
												returned,
												resolve( maxDepth, deferred, Identity, special ),
												resolve( maxDepth, deferred, Thrower, special )
											);
&amp;nbsp;
										// Normal processors (resolve) also hook into progress
										} else {
&amp;nbsp;
											// ...and disregard older resolution values
											maxDepth++;
&amp;nbsp;
											then.call(
												returned,
												resolve( maxDepth, deferred, Identity, special ),
												resolve( maxDepth, deferred, Thrower, special ),
												resolve( maxDepth, deferred, Identity,
													deferred.notifyWith )
											);
										}
&amp;nbsp;
									// Handle all other returned values
									} else {
&amp;nbsp;
										// Only substitute handlers pass on context
										// and multiple values (non-spec behavior)
										if ( handler !== Identity ) {
											that = undefined;
											args = [ returned ];
										}
&amp;nbsp;
										// Process the value(s)
										// Default process is resolve
										( special || deferred.resolveWith )( that, args );
									}
								},
&amp;nbsp;
								// Only normal processors (resolve) catch and reject exceptions
								process = special ?
									mightThrow :
									function() {
										try {
											mightThrow();
										} catch ( e ) {
&amp;nbsp;
											if ( jQuery.Deferred.exceptionHook ) {
												jQuery.Deferred.exceptionHook( e,
													process.error );
											}
&amp;nbsp;
											// Support: Promises/A+ section 2.3.3.3.4.1
											// https://promisesaplus.com/#point-61
											// Ignore post-resolution exceptions
											if ( depth + 1 &amp;gt;= maxDepth ) {
&amp;nbsp;
												// Only substitute handlers pass on context
												// and multiple values (non-spec behavior)
												if ( handler !== Thrower ) {
													that = undefined;
													args = [ e ];
												}
&amp;nbsp;
												deferred.rejectWith( that, args );
											}
										}
									};
&amp;nbsp;
							// Support: Promises/A+ section 2.3.3.3.1
							// https://promisesaplus.com/#point-57
							// Re-resolve promises immediately to dodge false rejection from
							// subsequent errors
							if ( depth ) {
								process();
							} else {
&amp;nbsp;
								// Call an optional hook to record the error, in case of exception
								// since it&#039;s otherwise lost when execution goes async
								if ( jQuery.Deferred.getErrorHook ) {
									process.error = jQuery.Deferred.getErrorHook();
&amp;nbsp;
								// The deprecated alias of the above. While the name suggests
								// returning the stack, not an error instance, jQuery just passes
								// it directly to `console.warn` so both will work; an instance
								// just better cooperates with source maps.
								} else if ( jQuery.Deferred.getStackHook ) {
									process.error = jQuery.Deferred.getStackHook();
								}
								window.setTimeout( process );
							}
						};
					}
&amp;nbsp;
					return jQuery.Deferred( function( newDefer ) {
&amp;nbsp;
						// progress_handlers.add( ... )
						tuples[ 0 ][ 3 ].add(
							resolve(
								0,
								newDefer,
								isFunction( onProgress ) ?
									onProgress :
									Identity,
								newDefer.notifyWith
							)
						);
&amp;nbsp;
						// fulfilled_handlers.add( ... )
						tuples[ 1 ][ 3 ].add(
							resolve(
								0,
								newDefer,
								isFunction( onFulfilled ) ?
									onFulfilled :
									Identity
							)
						);
&amp;nbsp;
						// rejected_handlers.add( ... )
						tuples[ 2 ][ 3 ].add(
							resolve(
								0,
								newDefer,
								isFunction( onRejected ) ?
									onRejected :
									Thrower
							)
						);
					} ).promise();
				},
&amp;nbsp;
				// Get a promise for this deferred
				// If obj is provided, the promise aspect is added to the object
				promise: function( obj ) {
					return obj != null ? jQuery.extend( obj, promise ) : promise;
				}
			},
			deferred = {};
&amp;nbsp;
		// Add list-specific methods
		jQuery.each( tuples, function( i, tuple ) {
			var list = tuple[ 2 ],
				stateString = tuple[ 5 ];
&amp;nbsp;
			// promise.progress = list.add
			// promise.done = list.add
			// promise.fail = list.add
			promise[ tuple[ 1 ] ] = list.add;
&amp;nbsp;
			// Handle state
			if ( stateString ) {
				list.add(
					function() {
&amp;nbsp;
						// state = &amp;quot;resolved&amp;quot; (i.e., fulfilled)
						// state = &amp;quot;rejected&amp;quot;
						state = stateString;
					},
&amp;nbsp;
					// rejected_callbacks.disable
					// fulfilled_callbacks.disable
					tuples[ 3 - i ][ 2 ].disable,
&amp;nbsp;
					// rejected_handlers.disable
					// fulfilled_handlers.disable
					tuples[ 3 - i ][ 3 ].disable,
&amp;nbsp;
					// progress_callbacks.lock
					tuples[ 0 ][ 2 ].lock,
&amp;nbsp;
					// progress_handlers.lock
					tuples[ 0 ][ 3 ].lock
				);
			}
&amp;nbsp;
			// progress_handlers.fire
			// fulfilled_handlers.fire
			// rejected_handlers.fire
			list.add( tuple[ 3 ].fire );
&amp;nbsp;
			// deferred.notify = function() { deferred.notifyWith(...) }
			// deferred.resolve = function() { deferred.resolveWith(...) }
			// deferred.reject = function() { deferred.rejectWith(...) }
			deferred[ tuple[ 0 ] ] = function() {
				deferred[ tuple[ 0 ] + &amp;quot;With&amp;quot; ]( this === deferred ? undefined : this, arguments );
				return this;
			};
&amp;nbsp;
			// deferred.notifyWith = list.fireWith
			// deferred.resolveWith = list.fireWith
			// deferred.rejectWith = list.fireWith
			deferred[ tuple[ 0 ] + &amp;quot;With&amp;quot; ] = list.fireWith;
		} );
&amp;nbsp;
		// Make the deferred a promise
		promise.promise( deferred );
&amp;nbsp;
		// Call given func if any
		if ( func ) {
			func.call( deferred, deferred );
		}
&amp;nbsp;
		// All done!
		return deferred;
	},
&amp;nbsp;
	// Deferred helper
	when: function( singleValue ) {
		var
&amp;nbsp;
			// count of uncompleted subordinates
			remaining = arguments.length,
&amp;nbsp;
			// count of unprocessed arguments
			i = remaining,
&amp;nbsp;
			// subordinate fulfillment data
			resolveContexts = Array( i ),
			resolveValues = slice.call( arguments ),
&amp;nbsp;
			// the primary Deferred
			primary = jQuery.Deferred(),
&amp;nbsp;
			// subordinate callback factory
			updateFunc = function( i ) {
				return function( value ) {
					resolveContexts[ i ] = this;
					resolveValues[ i ] = arguments.length &amp;gt; 1 ? slice.call( arguments ) : value;
					if ( !( --remaining ) ) {
						primary.resolveWith( resolveContexts, resolveValues );
					}
				};
			};
&amp;nbsp;
		// Single- and empty arguments are adopted like Promise.resolve
		if ( remaining &amp;lt;= 1 ) {
			adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
				!remaining );
&amp;nbsp;
			// Use .then() to unwrap secondary thenables (cf. gh-3000)
			if ( primary.state() === &amp;quot;pending&amp;quot; ||
				isFunction( resolveValues[ i ] &amp;amp;&amp;amp; resolveValues[ i ].then ) ) {
&amp;nbsp;
				return primary.then();
			}
		}
&amp;nbsp;
		// Multiple arguments are aggregated like Promise.all array elements
		while ( i-- ) {
			adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
		}
&amp;nbsp;
		return primary.promise();
	}
} );
&amp;nbsp;
&amp;nbsp;
// These usually indicate a programmer mistake during development,
// warn about them ASAP rather than swallowing them by default.
var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
&amp;nbsp;
// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error
// captured before the async barrier to get the original error cause
// which may otherwise be hidden.
jQuery.Deferred.exceptionHook = function( error, asyncError ) {
&amp;nbsp;
	// Support: IE 8 - 9 only
	// Console exists when dev tools are open, which can happen at any time
	if ( window.console &amp;amp;&amp;amp; window.console.warn &amp;amp;&amp;amp; error &amp;amp;&amp;amp; rerrorNames.test( error.name ) ) {
		window.console.warn( &amp;quot;jQuery.Deferred exception: &amp;quot; + error.message,
			error.stack, asyncError );
	}
};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
jQuery.readyException = function( error ) {
	window.setTimeout( function() {
		throw error;
	} );
};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// The deferred used on DOM ready
var readyList = jQuery.Deferred();
&amp;nbsp;
jQuery.fn.ready = function( fn ) {
&amp;nbsp;
	readyList
		.then( fn )
&amp;nbsp;
		// Wrap jQuery.readyException in a function so that the lookup
		// happens at the time of error handling instead of callback
		// registration.
		.catch( function( error ) {
			jQuery.readyException( error );
		} );
&amp;nbsp;
	return this;
};
&amp;nbsp;
jQuery.extend( {
&amp;nbsp;
	// Is the DOM ready to be used? Set to true once it occurs.
	isReady: false,
&amp;nbsp;
	// A counter to track how many items to wait for before
	// the ready event fires. See trac-6781
	readyWait: 1,
&amp;nbsp;
	// Handle when the DOM is ready
	ready: function( wait ) {
&amp;nbsp;
		// Abort if there are pending holds or we&#039;re already ready
		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
			return;
		}
&amp;nbsp;
		// Remember that the DOM is ready
		jQuery.isReady = true;
&amp;nbsp;
		// If a normal DOM Ready event fired, decrement, and wait if need be
		if ( wait !== true &amp;amp;&amp;amp; --jQuery.readyWait &amp;gt; 0 ) {
			return;
		}
&amp;nbsp;
		// If there are functions bound, to execute
		readyList.resolveWith( document, [ jQuery ] );
	}
} );
&amp;nbsp;
jQuery.ready.then = readyList.then;
&amp;nbsp;
// The ready event handler and self cleanup method
function completed() {
	document.removeEventListener( &amp;quot;DOMContentLoaded&amp;quot;, completed );
	window.removeEventListener( &amp;quot;load&amp;quot;, completed );
	jQuery.ready();
}
&amp;nbsp;
// Catch cases where $(document).ready() is called
// after the browser event has already occurred.
// Support: IE &amp;lt;=9 - 10 only
// Older IE sometimes signals &amp;quot;interactive&amp;quot; too soon
if ( document.readyState === &amp;quot;complete&amp;quot; ||
	( document.readyState !== &amp;quot;loading&amp;quot; &amp;amp;&amp;amp; !document.documentElement.doScroll ) ) {
&amp;nbsp;
	// Handle it asynchronously to allow scripts the opportunity to delay ready
	window.setTimeout( jQuery.ready );
&amp;nbsp;
} else {
&amp;nbsp;
	// Use the handy event callback
	document.addEventListener( &amp;quot;DOMContentLoaded&amp;quot;, completed );
&amp;nbsp;
	// A fallback to window.onload, that will always work
	window.addEventListener( &amp;quot;load&amp;quot;, completed );
}
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// Multifunctional method to get and set values of a collection
// The value/s can optionally be executed if it&#039;s a function
var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
	var i = 0,
		len = elems.length,
		bulk = key == null;
&amp;nbsp;
	// Sets many values
	if ( toType( key ) === &amp;quot;object&amp;quot; ) {
		chainable = true;
		for ( i in key ) {
			access( elems, fn, i, key[ i ], true, emptyGet, raw );
		}
&amp;nbsp;
	// Sets one value
	} else if ( value !== undefined ) {
		chainable = true;
&amp;nbsp;
		if ( !isFunction( value ) ) {
			raw = true;
		}
&amp;nbsp;
		if ( bulk ) {
&amp;nbsp;
			// Bulk operations run against the entire set
			if ( raw ) {
				fn.call( elems, value );
				fn = null;
&amp;nbsp;
			// ...except when executing function values
			} else {
				bulk = fn;
				fn = function( elem, _key, value ) {
					return bulk.call( jQuery( elem ), value );
				};
			}
		}
&amp;nbsp;
		if ( fn ) {
			for ( ; i &amp;lt; len; i++ ) {
				fn(
					elems[ i ], key, raw ?
						value :
						value.call( elems[ i ], i, fn( elems[ i ], key ) )
				);
			}
		}
	}
&amp;nbsp;
	if ( chainable ) {
		return elems;
	}
&amp;nbsp;
	// Gets
	if ( bulk ) {
		return fn.call( elems );
	}
&amp;nbsp;
	return len ? fn( elems[ 0 ], key ) : emptyGet;
};
&amp;nbsp;
&amp;nbsp;
// Matches dashed string for camelizing
var rmsPrefix = /^-ms-/,
	rdashAlpha = /-([a-z])/g;
&amp;nbsp;
// Used by camelCase as callback to replace()
function fcamelCase( _all, letter ) {
	return letter.toUpperCase();
}
&amp;nbsp;
// Convert dashed to camelCase; used by the css and data modules
// Support: IE &amp;lt;=9 - 11, Edge 12 - 15
// Microsoft forgot to hump their vendor prefix (trac-9572)
function camelCase( string ) {
	return string.replace( rmsPrefix, &amp;quot;ms-&amp;quot; ).replace( rdashAlpha, fcamelCase );
}
var acceptData = function( owner ) {
&amp;nbsp;
	// Accepts only:
	//  - Node
	//    - Node.ELEMENT_NODE
	//    - Node.DOCUMENT_NODE
	//  - Object
	//    - Any
	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
function Data() {
	this.expando = jQuery.expando + Data.uid++;
}
&amp;nbsp;
Data.uid = 1;
&amp;nbsp;
Data.prototype = {
&amp;nbsp;
	cache: function( owner ) {
&amp;nbsp;
		// Check if the owner object already has a cache
		var value = owner[ this.expando ];
&amp;nbsp;
		// If not, create one
		if ( !value ) {
			value = {};
&amp;nbsp;
			// We can accept data for non-element nodes in modern browsers,
			// but we should not, see trac-8335.
			// Always return an empty object.
			if ( acceptData( owner ) ) {
&amp;nbsp;
				// If it is a node unlikely to be stringify-ed or looped over
				// use plain assignment
				if ( owner.nodeType ) {
					owner[ this.expando ] = value;
&amp;nbsp;
				// Otherwise secure it in a non-enumerable property
				// configurable must be true to allow the property to be
				// deleted when data is removed
				} else {
					Object.defineProperty( owner, this.expando, {
						value: value,
						configurable: true
					} );
				}
			}
		}
&amp;nbsp;
		return value;
	},
	set: function( owner, data, value ) {
		var prop,
			cache = this.cache( owner );
&amp;nbsp;
		// Handle: [ owner, key, value ] args
		// Always use camelCase key (gh-2257)
		if ( typeof data === &amp;quot;string&amp;quot; ) {
			cache[ camelCase( data ) ] = value;
&amp;nbsp;
		// Handle: [ owner, { properties } ] args
		} else {
&amp;nbsp;
			// Copy the properties one-by-one to the cache object
			for ( prop in data ) {
				cache[ camelCase( prop ) ] = data[ prop ];
			}
		}
		return cache;
	},
	get: function( owner, key ) {
		return key === undefined ?
			this.cache( owner ) :
&amp;nbsp;
			// Always use camelCase key (gh-2257)
			owner[ this.expando ] &amp;amp;&amp;amp; owner[ this.expando ][ camelCase( key ) ];
	},
	access: function( owner, key, value ) {
&amp;nbsp;
		// In cases where either:
		//
		//   1. No key was specified
		//   2. A string key was specified, but no value provided
		//
		// Take the &amp;quot;read&amp;quot; path and allow the get method to determine
		// which value to return, respectively either:
		//
		//   1. The entire cache object
		//   2. The data stored at the key
		//
		if ( key === undefined ||
				( ( key &amp;amp;&amp;amp; typeof key === &amp;quot;string&amp;quot; ) &amp;amp;&amp;amp; value === undefined ) ) {
&amp;nbsp;
			return this.get( owner, key );
		}
&amp;nbsp;
		// When the key is not a string, or both a key and value
		// are specified, set or extend (existing objects) with either:
		//
		//   1. An object of properties
		//   2. A key and value
		//
		this.set( owner, key, value );
&amp;nbsp;
		// Since the &amp;quot;set&amp;quot; path can have two possible entry points
		// return the expected data based on which path was taken[*]
		return value !== undefined ? value : key;
	},
	remove: function( owner, key ) {
		var i,
			cache = owner[ this.expando ];
&amp;nbsp;
		if ( cache === undefined ) {
			return;
		}
&amp;nbsp;
		if ( key !== undefined ) {
&amp;nbsp;
			// Support array or space separated string of keys
			if ( Array.isArray( key ) ) {
&amp;nbsp;
				// If key is an array of keys...
				// We always set camelCase keys, so remove that.
				key = key.map( camelCase );
			} else {
				key = camelCase( key );
&amp;nbsp;
				// If a key with the spaces exists, use it.
				// Otherwise, create an array by matching non-whitespace
				key = key in cache ?
					[ key ] :
					( key.match( rnothtmlwhite ) || [] );
			}
&amp;nbsp;
			i = key.length;
&amp;nbsp;
			while ( i-- ) {
				delete cache[ key[ i ] ];
			}
		}
&amp;nbsp;
		// Remove the expando if there&#039;s no more data
		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
&amp;nbsp;
			// Support: Chrome &amp;lt;=35 - 45
			// Webkit &amp;amp; Blink performance suffers when deleting properties
			// from DOM nodes, so set to undefined instead
			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
			if ( owner.nodeType ) {
				owner[ this.expando ] = undefined;
			} else {
				delete owner[ this.expando ];
			}
		}
	},
	hasData: function( owner ) {
		var cache = owner[ this.expando ];
		return cache !== undefined &amp;amp;&amp;amp; !jQuery.isEmptyObject( cache );
	}
};
var dataPriv = new Data();
&amp;nbsp;
var dataUser = new Data();
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
//	Implementation Summary
//
//	1. Enforce API surface and semantic compatibility with 1.9.x branch
//	2. Improve the module&#039;s maintainability by reducing the storage
//		paths to a single mechanism.
//	3. Use the same single mechanism to support &amp;quot;private&amp;quot; and &amp;quot;user&amp;quot; data.
//	4. _Never_ expose &amp;quot;private&amp;quot; data to user code (TODO: Drop _data, _removeData)
//	5. Avoid exposing implementation details on user objects (eg. expando properties)
//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
&amp;nbsp;
var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
	rmultiDash = /[A-Z]/g;
&amp;nbsp;
function getData( data ) {
	if ( data === &amp;quot;true&amp;quot; ) {
		return true;
	}
&amp;nbsp;
	if ( data === &amp;quot;false&amp;quot; ) {
		return false;
	}
&amp;nbsp;
	if ( data === &amp;quot;null&amp;quot; ) {
		return null;
	}
&amp;nbsp;
	// Only convert to a number if it doesn&#039;t change the string
	if ( data === +data + &amp;quot;&amp;quot; ) {
		return +data;
	}
&amp;nbsp;
	if ( rbrace.test( data ) ) {
		return JSON.parse( data );
	}
&amp;nbsp;
	return data;
}
&amp;nbsp;
function dataAttr( elem, key, data ) {
	var name;
&amp;nbsp;
	// If nothing was found internally, try to fetch any
	// data from the HTML5 data-* attribute
	if ( data === undefined &amp;amp;&amp;amp; elem.nodeType === 1 ) {
		name = &amp;quot;data-&amp;quot; + key.replace( rmultiDash, &amp;quot;-$&amp;amp;&amp;quot; ).toLowerCase();
		data = elem.getAttribute( name );
&amp;nbsp;
		if ( typeof data === &amp;quot;string&amp;quot; ) {
			try {
				data = getData( data );
			} catch ( e ) {}
&amp;nbsp;
			// Make sure we set the data so it isn&#039;t changed later
			dataUser.set( elem, key, data );
		} else {
			data = undefined;
		}
	}
	return data;
}
&amp;nbsp;
jQuery.extend( {
	hasData: function( elem ) {
		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
	},
&amp;nbsp;
	data: function( elem, name, data ) {
		return dataUser.access( elem, name, data );
	},
&amp;nbsp;
	removeData: function( elem, name ) {
		dataUser.remove( elem, name );
	},
&amp;nbsp;
	// TODO: Now that all calls to _data and _removeData have been replaced
	// with direct calls to dataPriv methods, these can be deprecated.
	_data: function( elem, name, data ) {
		return dataPriv.access( elem, name, data );
	},
&amp;nbsp;
	_removeData: function( elem, name ) {
		dataPriv.remove( elem, name );
	}
} );
&amp;nbsp;
jQuery.fn.extend( {
	data: function( key, value ) {
		var i, name, data,
			elem = this[ 0 ],
			attrs = elem &amp;amp;&amp;amp; elem.attributes;
&amp;nbsp;
		// Gets all values
		if ( key === undefined ) {
			if ( this.length ) {
				data = dataUser.get( elem );
&amp;nbsp;
				if ( elem.nodeType === 1 &amp;amp;&amp;amp; !dataPriv.get( elem, &amp;quot;hasDataAttrs&amp;quot; ) ) {
					i = attrs.length;
					while ( i-- ) {
&amp;nbsp;
						// Support: IE 11 only
						// The attrs elements can be null (trac-14894)
						if ( attrs[ i ] ) {
							name = attrs[ i ].name;
							if ( name.indexOf( &amp;quot;data-&amp;quot; ) === 0 ) {
								name = camelCase( name.slice( 5 ) );
								dataAttr( elem, name, data[ name ] );
							}
						}
					}
					dataPriv.set( elem, &amp;quot;hasDataAttrs&amp;quot;, true );
				}
			}
&amp;nbsp;
			return data;
		}
&amp;nbsp;
		// Sets multiple values
		if ( typeof key === &amp;quot;object&amp;quot; ) {
			return this.each( function() {
				dataUser.set( this, key );
			} );
		}
&amp;nbsp;
		return access( this, function( value ) {
			var data;
&amp;nbsp;
			// The calling jQuery object (element matches) is not empty
			// (and therefore has an element appears at this[ 0 ]) and the
			// `value` parameter was not undefined. An empty jQuery object
			// will result in `undefined` for elem = this[ 0 ] which will
			// throw an exception if an attempt to read a data cache is made.
			if ( elem &amp;amp;&amp;amp; value === undefined ) {
&amp;nbsp;
				// Attempt to get data from the cache
				// The key will always be camelCased in Data
				data = dataUser.get( elem, key );
				if ( data !== undefined ) {
					return data;
				}
&amp;nbsp;
				// Attempt to &amp;quot;discover&amp;quot; the data in
				// HTML5 custom data-* attrs
				data = dataAttr( elem, key );
				if ( data !== undefined ) {
					return data;
				}
&amp;nbsp;
				// We tried really hard, but the data doesn&#039;t exist.
				return;
			}
&amp;nbsp;
			// Set the data...
			this.each( function() {
&amp;nbsp;
				// We always store the camelCased key
				dataUser.set( this, key, value );
			} );
		}, null, value, arguments.length &amp;gt; 1, null, true );
	},
&amp;nbsp;
	removeData: function( key ) {
		return this.each( function() {
			dataUser.remove( this, key );
		} );
	}
} );
&amp;nbsp;
&amp;nbsp;
jQuery.extend( {
	queue: function( elem, type, data ) {
		var queue;
&amp;nbsp;
		if ( elem ) {
			type = ( type || &amp;quot;fx&amp;quot; ) + &amp;quot;queue&amp;quot;;
			queue = dataPriv.get( elem, type );
&amp;nbsp;
			// Speed up dequeue by getting out quickly if this is just a lookup
			if ( data ) {
				if ( !queue || Array.isArray( data ) ) {
					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
				} else {
					queue.push( data );
				}
			}
			return queue || [];
		}
	},
&amp;nbsp;
	dequeue: function( elem, type ) {
		type = type || &amp;quot;fx&amp;quot;;
&amp;nbsp;
		var queue = jQuery.queue( elem, type ),
			startLength = queue.length,
			fn = queue.shift(),
			hooks = jQuery._queueHooks( elem, type ),
			next = function() {
				jQuery.dequeue( elem, type );
			};
&amp;nbsp;
		// If the fx queue is dequeued, always remove the progress sentinel
		if ( fn === &amp;quot;inprogress&amp;quot; ) {
			fn = queue.shift();
			startLength--;
		}
&amp;nbsp;
		if ( fn ) {
&amp;nbsp;
			// Add a progress sentinel to prevent the fx queue from being
			// automatically dequeued
			if ( type === &amp;quot;fx&amp;quot; ) {
				queue.unshift( &amp;quot;inprogress&amp;quot; );
			}
&amp;nbsp;
			// Clear up the last queue stop function
			delete hooks.stop;
			fn.call( elem, next, hooks );
		}
&amp;nbsp;
		if ( !startLength &amp;amp;&amp;amp; hooks ) {
			hooks.empty.fire();
		}
	},
&amp;nbsp;
	// Not public - generate a queueHooks object, or return the current one
	_queueHooks: function( elem, type ) {
		var key = type + &amp;quot;queueHooks&amp;quot;;
		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
			empty: jQuery.Callbacks( &amp;quot;once memory&amp;quot; ).add( function() {
				dataPriv.remove( elem, [ type + &amp;quot;queue&amp;quot;, key ] );
			} )
		} );
	}
} );
&amp;nbsp;
jQuery.fn.extend( {
	queue: function( type, data ) {
		var setter = 2;
&amp;nbsp;
		if ( typeof type !== &amp;quot;string&amp;quot; ) {
			data = type;
			type = &amp;quot;fx&amp;quot;;
			setter--;
		}
&amp;nbsp;
		if ( arguments.length &amp;lt; setter ) {
			return jQuery.queue( this[ 0 ], type );
		}
&amp;nbsp;
		return data === undefined ?
			this :
			this.each( function() {
				var queue = jQuery.queue( this, type, data );
&amp;nbsp;
				// Ensure a hooks for this queue
				jQuery._queueHooks( this, type );
&amp;nbsp;
				if ( type === &amp;quot;fx&amp;quot; &amp;amp;&amp;amp; queue[ 0 ] !== &amp;quot;inprogress&amp;quot; ) {
					jQuery.dequeue( this, type );
				}
			} );
	},
	dequeue: function( type ) {
		return this.each( function() {
			jQuery.dequeue( this, type );
		} );
	},
	clearQueue: function( type ) {
		return this.queue( type || &amp;quot;fx&amp;quot;, [] );
	},
&amp;nbsp;
	// Get a promise resolved when queues of a certain type
	// are emptied (fx is the type by default)
	promise: function( type, obj ) {
		var tmp,
			count = 1,
			defer = jQuery.Deferred(),
			elements = this,
			i = this.length,
			resolve = function() {
				if ( !( --count ) ) {
					defer.resolveWith( elements, [ elements ] );
				}
			};
&amp;nbsp;
		if ( typeof type !== &amp;quot;string&amp;quot; ) {
			obj = type;
			type = undefined;
		}
		type = type || &amp;quot;fx&amp;quot;;
&amp;nbsp;
		while ( i-- ) {
			tmp = dataPriv.get( elements[ i ], type + &amp;quot;queueHooks&amp;quot; );
			if ( tmp &amp;amp;&amp;amp; tmp.empty ) {
				count++;
				tmp.empty.add( resolve );
			}
		}
		resolve();
		return defer.promise( obj );
	}
} );
var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
&amp;nbsp;
var rcssNum = new RegExp( &amp;quot;^(?:([+-])=|)(&amp;quot; + pnum + &amp;quot;)([a-z%]*)$&amp;quot;, &amp;quot;i&amp;quot; );
&amp;nbsp;
&amp;nbsp;
var cssExpand = [ &amp;quot;Top&amp;quot;, &amp;quot;Right&amp;quot;, &amp;quot;Bottom&amp;quot;, &amp;quot;Left&amp;quot; ];
&amp;nbsp;
var documentElement = document.documentElement;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
	var isAttached = function( elem ) {
			return jQuery.contains( elem.ownerDocument, elem );
		},
		composed = { composed: true };
&amp;nbsp;
	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
	// Check attachment across shadow DOM boundaries when possible (gh-3504)
	// Support: iOS 10.0-10.2 only
	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
	// leading to errors. We need to check for `getRootNode`.
	if ( documentElement.getRootNode ) {
		isAttached = function( elem ) {
			return jQuery.contains( elem.ownerDocument, elem ) ||
				elem.getRootNode( composed ) === elem.ownerDocument;
		};
	}
var isHiddenWithinTree = function( elem, el ) {
&amp;nbsp;
		// isHiddenWithinTree might be called from jQuery#filter function;
		// in that case, element will be second argument
		elem = el || elem;
&amp;nbsp;
		// Inline style trumps all
		return elem.style.display === &amp;quot;none&amp;quot; ||
			elem.style.display === &amp;quot;&amp;quot; &amp;amp;&amp;amp;
&amp;nbsp;
			// Otherwise, check computed style
			// Support: Firefox &amp;lt;=43 - 45
			// Disconnected elements can have computed display: none, so first confirm that elem is
			// in the document.
			isAttached( elem ) &amp;amp;&amp;amp;
&amp;nbsp;
			jQuery.css( elem, &amp;quot;display&amp;quot; ) === &amp;quot;none&amp;quot;;
	};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
function adjustCSS( elem, prop, valueParts, tween ) {
	var adjusted, scale,
		maxIterations = 20,
		currentValue = tween ?
			function() {
				return tween.cur();
			} :
			function() {
				return jQuery.css( elem, prop, &amp;quot;&amp;quot; );
			},
		initial = currentValue(),
		unit = valueParts &amp;amp;&amp;amp; valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? &amp;quot;&amp;quot; : &amp;quot;px&amp;quot; ),
&amp;nbsp;
		// Starting value computation is required for potential unit mismatches
		initialInUnit = elem.nodeType &amp;amp;&amp;amp;
			( jQuery.cssNumber[ prop ] || unit !== &amp;quot;px&amp;quot; &amp;amp;&amp;amp; +initial ) &amp;amp;&amp;amp;
			rcssNum.exec( jQuery.css( elem, prop ) );
&amp;nbsp;
	if ( initialInUnit &amp;amp;&amp;amp; initialInUnit[ 3 ] !== unit ) {
&amp;nbsp;
		// Support: Firefox &amp;lt;=54
		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
		initial = initial / 2;
&amp;nbsp;
		// Trust units reported by jQuery.css
		unit = unit || initialInUnit[ 3 ];
&amp;nbsp;
		// Iteratively approximate from a nonzero starting point
		initialInUnit = +initial || 1;
&amp;nbsp;
		while ( maxIterations-- ) {
&amp;nbsp;
			// Evaluate and update our best guess (doubling guesses that zero out).
			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
			jQuery.style( elem, prop, initialInUnit + unit );
			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) &amp;lt;= 0 ) {
				maxIterations = 0;
			}
			initialInUnit = initialInUnit / scale;
&amp;nbsp;
		}
&amp;nbsp;
		initialInUnit = initialInUnit * 2;
		jQuery.style( elem, prop, initialInUnit + unit );
&amp;nbsp;
		// Make sure we update the tween properties later on
		valueParts = valueParts || [];
	}
&amp;nbsp;
	if ( valueParts ) {
		initialInUnit = +initialInUnit || +initial || 0;
&amp;nbsp;
		// Apply relative offset (+=/-=) if specified
		adjusted = valueParts[ 1 ] ?
			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
			+valueParts[ 2 ];
		if ( tween ) {
			tween.unit = unit;
			tween.start = initialInUnit;
			tween.end = adjusted;
		}
	}
	return adjusted;
}
&amp;nbsp;
&amp;nbsp;
var defaultDisplayMap = {};
&amp;nbsp;
function getDefaultDisplay( elem ) {
	var temp,
		doc = elem.ownerDocument,
		nodeName = elem.nodeName,
		display = defaultDisplayMap[ nodeName ];
&amp;nbsp;
	if ( display ) {
		return display;
	}
&amp;nbsp;
	temp = doc.body.appendChild( doc.createElement( nodeName ) );
	display = jQuery.css( temp, &amp;quot;display&amp;quot; );
&amp;nbsp;
	temp.parentNode.removeChild( temp );
&amp;nbsp;
	if ( display === &amp;quot;none&amp;quot; ) {
		display = &amp;quot;block&amp;quot;;
	}
	defaultDisplayMap[ nodeName ] = display;
&amp;nbsp;
	return display;
}
&amp;nbsp;
function showHide( elements, show ) {
	var display, elem,
		values = [],
		index = 0,
		length = elements.length;
&amp;nbsp;
	// Determine new display value for elements that need to change
	for ( ; index &amp;lt; length; index++ ) {
		elem = elements[ index ];
		if ( !elem.style ) {
			continue;
		}
&amp;nbsp;
		display = elem.style.display;
		if ( show ) {
&amp;nbsp;
			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
			// check is required in this first loop unless we have a nonempty display value (either
			// inline or about-to-be-restored)
			if ( display === &amp;quot;none&amp;quot; ) {
				values[ index ] = dataPriv.get( elem, &amp;quot;display&amp;quot; ) || null;
				if ( !values[ index ] ) {
					elem.style.display = &amp;quot;&amp;quot;;
				}
			}
			if ( elem.style.display === &amp;quot;&amp;quot; &amp;amp;&amp;amp; isHiddenWithinTree( elem ) ) {
				values[ index ] = getDefaultDisplay( elem );
			}
		} else {
			if ( display !== &amp;quot;none&amp;quot; ) {
				values[ index ] = &amp;quot;none&amp;quot;;
&amp;nbsp;
				// Remember what we&#039;re overwriting
				dataPriv.set( elem, &amp;quot;display&amp;quot;, display );
			}
		}
	}
&amp;nbsp;
	// Set the display of the elements in a second loop to avoid constant reflow
	for ( index = 0; index &amp;lt; length; index++ ) {
		if ( values[ index ] != null ) {
			elements[ index ].style.display = values[ index ];
		}
	}
&amp;nbsp;
	return elements;
}
&amp;nbsp;
jQuery.fn.extend( {
	show: function() {
		return showHide( this, true );
	},
	hide: function() {
		return showHide( this );
	},
	toggle: function( state ) {
		if ( typeof state === &amp;quot;boolean&amp;quot; ) {
			return state ? this.show() : this.hide();
		}
&amp;nbsp;
		return this.each( function() {
			if ( isHiddenWithinTree( this ) ) {
				jQuery( this ).show();
			} else {
				jQuery( this ).hide();
			}
		} );
	}
} );
var rcheckableType = ( /^(?:checkbox|radio)$/i );
&amp;nbsp;
var rtagName = ( /&amp;lt;([a-z][^\/\0&amp;gt;\x20\t\r\n\f]*)/i );
&amp;nbsp;
var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
( function() {
	var fragment = document.createDocumentFragment(),
		div = fragment.appendChild( document.createElement( &amp;quot;div&amp;quot; ) ),
		input = document.createElement( &amp;quot;input&amp;quot; );
&amp;nbsp;
	// Support: Android 4.0 - 4.3 only
	// Check state lost if the name is set (trac-11217)
	// Support: Windows Web Apps (WWA)
	// `name` and `type` must use .setAttribute for WWA (trac-14901)
	input.setAttribute( &amp;quot;type&amp;quot;, &amp;quot;radio&amp;quot; );
	input.setAttribute( &amp;quot;checked&amp;quot;, &amp;quot;checked&amp;quot; );
	input.setAttribute( &amp;quot;name&amp;quot;, &amp;quot;t&amp;quot; );
&amp;nbsp;
	div.appendChild( input );
&amp;nbsp;
	// Support: Android &amp;lt;=4.1 only
	// Older WebKit doesn&#039;t clone checked state correctly in fragments
	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
&amp;nbsp;
	// Support: IE &amp;lt;=11 only
	// Make sure textarea (and checkbox) defaultValue is properly cloned
	div.innerHTML = &amp;quot;&amp;lt;textarea&amp;gt;x&amp;lt;/textarea&amp;gt;&amp;quot;;
	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
&amp;nbsp;
	// Support: IE &amp;lt;=9 only
	// IE &amp;lt;=9 replaces &amp;lt;option&amp;gt; tags with their contents when inserted outside of
	// the select element.
	div.innerHTML = &amp;quot;&amp;lt;option&amp;gt;&amp;lt;/option&amp;gt;&amp;quot;;
	support.option = !!div.lastChild;
} )();
&amp;nbsp;
&amp;nbsp;
// We have to close these tags to support XHTML (trac-13200)
var wrapMap = {
&amp;nbsp;
	// XHTML parsers do not magically insert elements in the
	// same way that tag soup parsers do. So we cannot shorten
	// this by omitting &amp;lt;tbody&amp;gt; or other required elements.
	thead: [ 1, &amp;quot;&amp;lt;table&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/table&amp;gt;&amp;quot; ],
	col: [ 2, &amp;quot;&amp;lt;table&amp;gt;&amp;lt;colgroup&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/colgroup&amp;gt;&amp;lt;/table&amp;gt;&amp;quot; ],
	tr: [ 2, &amp;quot;&amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;quot; ],
	td: [ 3, &amp;quot;&amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;quot; ],
&amp;nbsp;
	_default: [ 0, &amp;quot;&amp;quot;, &amp;quot;&amp;quot; ]
};
&amp;nbsp;
wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
wrapMap.th = wrapMap.td;
&amp;nbsp;
// Support: IE &amp;lt;=9 only
if ( !support.option ) {
	wrapMap.optgroup = wrapMap.option = [ 1, &amp;quot;&amp;lt;select multiple=&#039;multiple&#039;&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/select&amp;gt;&amp;quot; ];
}
&amp;nbsp;
&amp;nbsp;
function getAll( context, tag ) {
&amp;nbsp;
	// Support: IE &amp;lt;=9 - 11 only
	// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)
	var ret;
&amp;nbsp;
	if ( typeof context.getElementsByTagName !== &amp;quot;undefined&amp;quot; ) {
		ret = context.getElementsByTagName( tag || &amp;quot;*&amp;quot; );
&amp;nbsp;
	} else if ( typeof context.querySelectorAll !== &amp;quot;undefined&amp;quot; ) {
		ret = context.querySelectorAll( tag || &amp;quot;*&amp;quot; );
&amp;nbsp;
	} else {
		ret = [];
	}
&amp;nbsp;
	if ( tag === undefined || tag &amp;amp;&amp;amp; nodeName( context, tag ) ) {
		return jQuery.merge( [ context ], ret );
	}
&amp;nbsp;
	return ret;
}
&amp;nbsp;
&amp;nbsp;
// Mark scripts as having already been evaluated
function setGlobalEval( elems, refElements ) {
	var i = 0,
		l = elems.length;
&amp;nbsp;
	for ( ; i &amp;lt; l; i++ ) {
		dataPriv.set(
			elems[ i ],
			&amp;quot;globalEval&amp;quot;,
			!refElements || dataPriv.get( refElements[ i ], &amp;quot;globalEval&amp;quot; )
		);
	}
}
&amp;nbsp;
&amp;nbsp;
var rhtml = /&amp;lt;|&amp;amp;#?\w+;/;
&amp;nbsp;
function buildFragment( elems, context, scripts, selection, ignored ) {
	var elem, tmp, tag, wrap, attached, j,
		fragment = context.createDocumentFragment(),
		nodes = [],
		i = 0,
		l = elems.length;
&amp;nbsp;
	for ( ; i &amp;lt; l; i++ ) {
		elem = elems[ i ];
&amp;nbsp;
		if ( elem || elem === 0 ) {
&amp;nbsp;
			// Add nodes directly
			if ( toType( elem ) === &amp;quot;object&amp;quot; ) {
&amp;nbsp;
				// Support: Android &amp;lt;=4.0 only, PhantomJS 1 only
				// push.apply(_, arraylike) throws on ancient WebKit
				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
&amp;nbsp;
			// Convert non-html into a text node
			} else if ( !rhtml.test( elem ) ) {
				nodes.push( context.createTextNode( elem ) );
&amp;nbsp;
			// Convert html into DOM nodes
			} else {
				tmp = tmp || fragment.appendChild( context.createElement( &amp;quot;div&amp;quot; ) );
&amp;nbsp;
				// Deserialize a standard representation
				tag = ( rtagName.exec( elem ) || [ &amp;quot;&amp;quot;, &amp;quot;&amp;quot; ] )[ 1 ].toLowerCase();
				wrap = wrapMap[ tag ] || wrapMap._default;
				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
&amp;nbsp;
				// Descend through wrappers to the right content
				j = wrap[ 0 ];
				while ( j-- ) {
					tmp = tmp.lastChild;
				}
&amp;nbsp;
				// Support: Android &amp;lt;=4.0 only, PhantomJS 1 only
				// push.apply(_, arraylike) throws on ancient WebKit
				jQuery.merge( nodes, tmp.childNodes );
&amp;nbsp;
				// Remember the top-level container
				tmp = fragment.firstChild;
&amp;nbsp;
				// Ensure the created nodes are orphaned (trac-12392)
				tmp.textContent = &amp;quot;&amp;quot;;
			}
		}
	}
&amp;nbsp;
	// Remove wrapper from fragment
	fragment.textContent = &amp;quot;&amp;quot;;
&amp;nbsp;
	i = 0;
	while ( ( elem = nodes[ i++ ] ) ) {
&amp;nbsp;
		// Skip elements already in the context collection (trac-4087)
		if ( selection &amp;amp;&amp;amp; jQuery.inArray( elem, selection ) &amp;gt; -1 ) {
			if ( ignored ) {
				ignored.push( elem );
			}
			continue;
		}
&amp;nbsp;
		attached = isAttached( elem );
&amp;nbsp;
		// Append to fragment
		tmp = getAll( fragment.appendChild( elem ), &amp;quot;script&amp;quot; );
&amp;nbsp;
		// Preserve script evaluation history
		if ( attached ) {
			setGlobalEval( tmp );
		}
&amp;nbsp;
		// Capture executables
		if ( scripts ) {
			j = 0;
			while ( ( elem = tmp[ j++ ] ) ) {
				if ( rscriptType.test( elem.type || &amp;quot;&amp;quot; ) ) {
					scripts.push( elem );
				}
			}
		}
	}
&amp;nbsp;
	return fragment;
}
&amp;nbsp;
&amp;nbsp;
var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
&amp;nbsp;
function returnTrue() {
	return true;
}
&amp;nbsp;
function returnFalse() {
	return false;
}
&amp;nbsp;
function on( elem, types, selector, data, fn, one ) {
	var origFn, type;
&amp;nbsp;
	// Types can be a map of types/handlers
	if ( typeof types === &amp;quot;object&amp;quot; ) {
&amp;nbsp;
		// ( types-Object, selector, data )
		if ( typeof selector !== &amp;quot;string&amp;quot; ) {
&amp;nbsp;
			// ( types-Object, data )
			data = data || selector;
			selector = undefined;
		}
		for ( type in types ) {
			on( elem, type, selector, data, types[ type ], one );
		}
		return elem;
	}
&amp;nbsp;
	if ( data == null &amp;amp;&amp;amp; fn == null ) {
&amp;nbsp;
		// ( types, fn )
		fn = selector;
		data = selector = undefined;
	} else if ( fn == null ) {
		if ( typeof selector === &amp;quot;string&amp;quot; ) {
&amp;nbsp;
			// ( types, selector, fn )
			fn = data;
			data = undefined;
		} else {
&amp;nbsp;
			// ( types, data, fn )
			fn = data;
			data = selector;
			selector = undefined;
		}
	}
	if ( fn === false ) {
		fn = returnFalse;
	} else if ( !fn ) {
		return elem;
	}
&amp;nbsp;
	if ( one === 1 ) {
		origFn = fn;
		fn = function( event ) {
&amp;nbsp;
			// Can use an empty set, since event contains the info
			jQuery().off( event );
			return origFn.apply( this, arguments );
		};
&amp;nbsp;
		// Use same guid so caller can remove using origFn
		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
	}
	return elem.each( function() {
		jQuery.event.add( this, types, fn, data, selector );
	} );
}
&amp;nbsp;
/*
 * Helper functions for managing events -- not part of the public interface.
 * Props to Dean Edwards&#039; addEvent library for many of the ideas.
 */
jQuery.event = {
&amp;nbsp;
	global: {},
&amp;nbsp;
	add: function( elem, types, handler, data, selector ) {
&amp;nbsp;
		var handleObjIn, eventHandle, tmp,
			events, t, handleObj,
			special, handlers, type, namespaces, origType,
			elemData = dataPriv.get( elem );
&amp;nbsp;
		// Only attach events to objects that accept data
		if ( !acceptData( elem ) ) {
			return;
		}
&amp;nbsp;
		// Caller can pass in an object of custom data in lieu of the handler
		if ( handler.handler ) {
			handleObjIn = handler;
			handler = handleObjIn.handler;
			selector = handleObjIn.selector;
		}
&amp;nbsp;
		// Ensure that invalid selectors throw exceptions at attach time
		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
		if ( selector ) {
			jQuery.find.matchesSelector( documentElement, selector );
		}
&amp;nbsp;
		// Make sure that the handler has a unique ID, used to find/remove it later
		if ( !handler.guid ) {
			handler.guid = jQuery.guid++;
		}
&amp;nbsp;
		// Init the element&#039;s event structure and main handler, if this is the first
		if ( !( events = elemData.events ) ) {
			events = elemData.events = Object.create( null );
		}
		if ( !( eventHandle = elemData.handle ) ) {
			eventHandle = elemData.handle = function( e ) {
&amp;nbsp;
				// Discard the second event of a jQuery.event.trigger() and
				// when an event is called after a page has unloaded
				return typeof jQuery !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; jQuery.event.triggered !== e.type ?
					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
			};
		}
&amp;nbsp;
		// Handle multiple events separated by a space
		types = ( types || &amp;quot;&amp;quot; ).match( rnothtmlwhite ) || [ &amp;quot;&amp;quot; ];
		t = types.length;
		while ( t-- ) {
			tmp = rtypenamespace.exec( types[ t ] ) || [];
			type = origType = tmp[ 1 ];
			namespaces = ( tmp[ 2 ] || &amp;quot;&amp;quot; ).split( &amp;quot;.&amp;quot; ).sort();
&amp;nbsp;
			// There *must* be a type, no attaching namespace-only handlers
			if ( !type ) {
				continue;
			}
&amp;nbsp;
			// If event changes its type, use the special event handlers for the changed type
			special = jQuery.event.special[ type ] || {};
&amp;nbsp;
			// If selector defined, determine special event api type, otherwise given type
			type = ( selector ? special.delegateType : special.bindType ) || type;
&amp;nbsp;
			// Update special based on newly reset type
			special = jQuery.event.special[ type ] || {};
&amp;nbsp;
			// handleObj is passed to all event handlers
			handleObj = jQuery.extend( {
				type: type,
				origType: origType,
				data: data,
				handler: handler,
				guid: handler.guid,
				selector: selector,
				needsContext: selector &amp;amp;&amp;amp; jQuery.expr.match.needsContext.test( selector ),
				namespace: namespaces.join( &amp;quot;.&amp;quot; )
			}, handleObjIn );
&amp;nbsp;
			// Init the event handler queue if we&#039;re the first
			if ( !( handlers = events[ type ] ) ) {
				handlers = events[ type ] = [];
				handlers.delegateCount = 0;
&amp;nbsp;
				// Only use addEventListener if the special events handler returns false
				if ( !special.setup ||
					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
&amp;nbsp;
					if ( elem.addEventListener ) {
						elem.addEventListener( type, eventHandle );
					}
				}
			}
&amp;nbsp;
			if ( special.add ) {
				special.add.call( elem, handleObj );
&amp;nbsp;
				if ( !handleObj.handler.guid ) {
					handleObj.handler.guid = handler.guid;
				}
			}
&amp;nbsp;
			// Add to the element&#039;s handler list, delegates in front
			if ( selector ) {
				handlers.splice( handlers.delegateCount++, 0, handleObj );
			} else {
				handlers.push( handleObj );
			}
&amp;nbsp;
			// Keep track of which events have ever been used, for event optimization
			jQuery.event.global[ type ] = true;
		}
&amp;nbsp;
	},
&amp;nbsp;
	// Detach an event or set of events from an element
	remove: function( elem, types, handler, selector, mappedTypes ) {
&amp;nbsp;
		var j, origCount, tmp,
			events, t, handleObj,
			special, handlers, type, namespaces, origType,
			elemData = dataPriv.hasData( elem ) &amp;amp;&amp;amp; dataPriv.get( elem );
&amp;nbsp;
		if ( !elemData || !( events = elemData.events ) ) {
			return;
		}
&amp;nbsp;
		// Once for each type.namespace in types; type may be omitted
		types = ( types || &amp;quot;&amp;quot; ).match( rnothtmlwhite ) || [ &amp;quot;&amp;quot; ];
		t = types.length;
		while ( t-- ) {
			tmp = rtypenamespace.exec( types[ t ] ) || [];
			type = origType = tmp[ 1 ];
			namespaces = ( tmp[ 2 ] || &amp;quot;&amp;quot; ).split( &amp;quot;.&amp;quot; ).sort();
&amp;nbsp;
			// Unbind all events (on this namespace, if provided) for the element
			if ( !type ) {
				for ( type in events ) {
					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
				}
				continue;
			}
&amp;nbsp;
			special = jQuery.event.special[ type ] || {};
			type = ( selector ? special.delegateType : special.bindType ) || type;
			handlers = events[ type ] || [];
			tmp = tmp[ 2 ] &amp;amp;&amp;amp;
				new RegExp( &amp;quot;(^|\\.)&amp;quot; + namespaces.join( &amp;quot;\\.(?:.*\\.|)&amp;quot; ) + &amp;quot;(\\.|$)&amp;quot; );
&amp;nbsp;
			// Remove matching events
			origCount = j = handlers.length;
			while ( j-- ) {
				handleObj = handlers[ j ];
&amp;nbsp;
				if ( ( mappedTypes || origType === handleObj.origType ) &amp;amp;&amp;amp;
					( !handler || handler.guid === handleObj.guid ) &amp;amp;&amp;amp;
					( !tmp || tmp.test( handleObj.namespace ) ) &amp;amp;&amp;amp;
					( !selector || selector === handleObj.selector ||
						selector === &amp;quot;**&amp;quot; &amp;amp;&amp;amp; handleObj.selector ) ) {
					handlers.splice( j, 1 );
&amp;nbsp;
					if ( handleObj.selector ) {
						handlers.delegateCount--;
					}
					if ( special.remove ) {
						special.remove.call( elem, handleObj );
					}
				}
			}
&amp;nbsp;
			// Remove generic event handler if we removed something and no more handlers exist
			// (avoids potential for endless recursion during removal of special event handlers)
			if ( origCount &amp;amp;&amp;amp; !handlers.length ) {
				if ( !special.teardown ||
					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
&amp;nbsp;
					jQuery.removeEvent( elem, type, elemData.handle );
				}
&amp;nbsp;
				delete events[ type ];
			}
		}
&amp;nbsp;
		// Remove data and the expando if it&#039;s no longer used
		if ( jQuery.isEmptyObject( events ) ) {
			dataPriv.remove( elem, &amp;quot;handle events&amp;quot; );
		}
	},
&amp;nbsp;
	dispatch: function( nativeEvent ) {
&amp;nbsp;
		var i, j, ret, matched, handleObj, handlerQueue,
			args = new Array( arguments.length ),
&amp;nbsp;
			// Make a writable jQuery.Event from the native event object
			event = jQuery.event.fix( nativeEvent ),
&amp;nbsp;
			handlers = (
				dataPriv.get( this, &amp;quot;events&amp;quot; ) || Object.create( null )
			)[ event.type ] || [],
			special = jQuery.event.special[ event.type ] || {};
&amp;nbsp;
		// Use the fix-ed jQuery.Event rather than the (read-only) native event
		args[ 0 ] = event;
&amp;nbsp;
		for ( i = 1; i &amp;lt; arguments.length; i++ ) {
			args[ i ] = arguments[ i ];
		}
&amp;nbsp;
		event.delegateTarget = this;
&amp;nbsp;
		// Call the preDispatch hook for the mapped type, and let it bail if desired
		if ( special.preDispatch &amp;amp;&amp;amp; special.preDispatch.call( this, event ) === false ) {
			return;
		}
&amp;nbsp;
		// Determine handlers
		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
&amp;nbsp;
		// Run delegates first; they may want to stop propagation beneath us
		i = 0;
		while ( ( matched = handlerQueue[ i++ ] ) &amp;amp;&amp;amp; !event.isPropagationStopped() ) {
			event.currentTarget = matched.elem;
&amp;nbsp;
			j = 0;
			while ( ( handleObj = matched.handlers[ j++ ] ) &amp;amp;&amp;amp;
				!event.isImmediatePropagationStopped() ) {
&amp;nbsp;
				// If the event is namespaced, then each handler is only invoked if it is
				// specially universal or its namespaces are a superset of the event&#039;s.
				if ( !event.rnamespace || handleObj.namespace === false ||
					event.rnamespace.test( handleObj.namespace ) ) {
&amp;nbsp;
					event.handleObj = handleObj;
					event.data = handleObj.data;
&amp;nbsp;
					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
						handleObj.handler ).apply( matched.elem, args );
&amp;nbsp;
					if ( ret !== undefined ) {
						if ( ( event.result = ret ) === false ) {
							event.preventDefault();
							event.stopPropagation();
						}
					}
				}
			}
		}
&amp;nbsp;
		// Call the postDispatch hook for the mapped type
		if ( special.postDispatch ) {
			special.postDispatch.call( this, event );
		}
&amp;nbsp;
		return event.result;
	},
&amp;nbsp;
	handlers: function( event, handlers ) {
		var i, handleObj, sel, matchedHandlers, matchedSelectors,
			handlerQueue = [],
			delegateCount = handlers.delegateCount,
			cur = event.target;
&amp;nbsp;
		// Find delegate handlers
		if ( delegateCount &amp;amp;&amp;amp;
&amp;nbsp;
			// Support: IE &amp;lt;=9
			// Black-hole SVG &amp;lt;use&amp;gt; instance trees (trac-13180)
			cur.nodeType &amp;amp;&amp;amp;
&amp;nbsp;
			// Support: Firefox &amp;lt;=42
			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
			// Support: IE 11 only
			// ...but not arrow key &amp;quot;clicks&amp;quot; of radio inputs, which can have `button` -1 (gh-2343)
			!( event.type === &amp;quot;click&amp;quot; &amp;amp;&amp;amp; event.button &amp;gt;= 1 ) ) {
&amp;nbsp;
			for ( ; cur !== this; cur = cur.parentNode || this ) {
&amp;nbsp;
				// Don&#039;t check non-elements (trac-13208)
				// Don&#039;t process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)
				if ( cur.nodeType === 1 &amp;amp;&amp;amp; !( event.type === &amp;quot;click&amp;quot; &amp;amp;&amp;amp; cur.disabled === true ) ) {
					matchedHandlers = [];
					matchedSelectors = {};
					for ( i = 0; i &amp;lt; delegateCount; i++ ) {
						handleObj = handlers[ i ];
&amp;nbsp;
						// Don&#039;t conflict with Object.prototype properties (trac-13203)
						sel = handleObj.selector + &amp;quot; &amp;quot;;
&amp;nbsp;
						if ( matchedSelectors[ sel ] === undefined ) {
							matchedSelectors[ sel ] = handleObj.needsContext ?
								jQuery( sel, this ).index( cur ) &amp;gt; -1 :
								jQuery.find( sel, this, null, [ cur ] ).length;
						}
						if ( matchedSelectors[ sel ] ) {
							matchedHandlers.push( handleObj );
						}
					}
					if ( matchedHandlers.length ) {
						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
					}
				}
			}
		}
&amp;nbsp;
		// Add the remaining (directly-bound) handlers
		cur = this;
		if ( delegateCount &amp;lt; handlers.length ) {
			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
		}
&amp;nbsp;
		return handlerQueue;
	},
&amp;nbsp;
	addProp: function( name, hook ) {
		Object.defineProperty( jQuery.Event.prototype, name, {
			enumerable: true,
			configurable: true,
&amp;nbsp;
			get: isFunction( hook ) ?
				function() {
					if ( this.originalEvent ) {
						return hook( this.originalEvent );
					}
				} :
				function() {
					if ( this.originalEvent ) {
						return this.originalEvent[ name ];
					}
				},
&amp;nbsp;
			set: function( value ) {
				Object.defineProperty( this, name, {
					enumerable: true,
					configurable: true,
					writable: true,
					value: value
				} );
			}
		} );
	},
&amp;nbsp;
	fix: function( originalEvent ) {
		return originalEvent[ jQuery.expando ] ?
			originalEvent :
			new jQuery.Event( originalEvent );
	},
&amp;nbsp;
	special: {
		load: {
&amp;nbsp;
			// Prevent triggered image.load events from bubbling to window.load
			noBubble: true
		},
		click: {
&amp;nbsp;
			// Utilize native event to ensure correct state for checkable inputs
			setup: function( data ) {
&amp;nbsp;
				// For mutual compressibility with _default, replace `this` access with a local var.
				// `|| data` is dead code meant only to preserve the variable through minification.
				var el = this || data;
&amp;nbsp;
				// Claim the first handler
				if ( rcheckableType.test( el.type ) &amp;amp;&amp;amp;
					el.click &amp;amp;&amp;amp; nodeName( el, &amp;quot;input&amp;quot; ) ) {
&amp;nbsp;
					// dataPriv.set( el, &amp;quot;click&amp;quot;, ... )
					leverageNative( el, &amp;quot;click&amp;quot;, true );
				}
&amp;nbsp;
				// Return false to allow normal processing in the caller
				return false;
			},
			trigger: function( data ) {
&amp;nbsp;
				// For mutual compressibility with _default, replace `this` access with a local var.
				// `|| data` is dead code meant only to preserve the variable through minification.
				var el = this || data;
&amp;nbsp;
				// Force setup before triggering a click
				if ( rcheckableType.test( el.type ) &amp;amp;&amp;amp;
					el.click &amp;amp;&amp;amp; nodeName( el, &amp;quot;input&amp;quot; ) ) {
&amp;nbsp;
					leverageNative( el, &amp;quot;click&amp;quot; );
				}
&amp;nbsp;
				// Return non-false to allow normal event-path propagation
				return true;
			},
&amp;nbsp;
			// For cross-browser consistency, suppress native .click() on links
			// Also prevent it if we&#039;re currently inside a leveraged native-event stack
			_default: function( event ) {
				var target = event.target;
				return rcheckableType.test( target.type ) &amp;amp;&amp;amp;
					target.click &amp;amp;&amp;amp; nodeName( target, &amp;quot;input&amp;quot; ) &amp;amp;&amp;amp;
					dataPriv.get( target, &amp;quot;click&amp;quot; ) ||
					nodeName( target, &amp;quot;a&amp;quot; );
			}
		},
&amp;nbsp;
		beforeunload: {
			postDispatch: function( event ) {
&amp;nbsp;
				// Support: Firefox 20+
				// Firefox doesn&#039;t alert if the returnValue field is not set.
				if ( event.result !== undefined &amp;amp;&amp;amp; event.originalEvent ) {
					event.originalEvent.returnValue = event.result;
				}
			}
		}
	}
};
&amp;nbsp;
// Ensure the presence of an event listener that handles manually-triggered
// synthetic events by interrupting progress until reinvoked in response to
// *native* events that it fires directly, ensuring that state changes have
// already occurred before other listeners are invoked.
function leverageNative( el, type, isSetup ) {
&amp;nbsp;
	// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add
	if ( !isSetup ) {
		if ( dataPriv.get( el, type ) === undefined ) {
			jQuery.event.add( el, type, returnTrue );
		}
		return;
	}
&amp;nbsp;
	// Register the controller as a special universal handler for all event namespaces
	dataPriv.set( el, type, false );
	jQuery.event.add( el, type, {
		namespace: false,
		handler: function( event ) {
			var result,
				saved = dataPriv.get( this, type );
&amp;nbsp;
			if ( ( event.isTrigger &amp;amp; 1 ) &amp;amp;&amp;amp; this[ type ] ) {
&amp;nbsp;
				// Interrupt processing of the outer synthetic .trigger()ed event
				if ( !saved ) {
&amp;nbsp;
					// Store arguments for use when handling the inner native event
					// There will always be at least one argument (an event object), so this array
					// will not be confused with a leftover capture object.
					saved = slice.call( arguments );
					dataPriv.set( this, type, saved );
&amp;nbsp;
					// Trigger the native event and capture its result
					this[ type ]();
					result = dataPriv.get( this, type );
					dataPriv.set( this, type, false );
&amp;nbsp;
					if ( saved !== result ) {
&amp;nbsp;
						// Cancel the outer synthetic event
						event.stopImmediatePropagation();
						event.preventDefault();
&amp;nbsp;
						return result;
					}
&amp;nbsp;
				// If this is an inner synthetic event for an event with a bubbling surrogate
				// (focus or blur), assume that the surrogate already propagated from triggering
				// the native event and prevent that from happening again here.
				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
				// less bad than duplication.
				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
					event.stopPropagation();
				}
&amp;nbsp;
			// If this is a native event triggered above, everything is now in order
			// Fire an inner synthetic event with the original arguments
			} else if ( saved ) {
&amp;nbsp;
				// ...and capture the result
				dataPriv.set( this, type, jQuery.event.trigger(
					saved[ 0 ],
					saved.slice( 1 ),
					this
				) );
&amp;nbsp;
				// Abort handling of the native event by all jQuery handlers while allowing
				// native handlers on the same element to run. On target, this is achieved
				// by stopping immediate propagation just on the jQuery event. However,
				// the native event is re-wrapped by a jQuery one on each level of the
				// propagation so the only way to stop it for jQuery is to stop it for
				// everyone via native `stopPropagation()`. This is not a problem for
				// focus/blur which don&#039;t bubble, but it does also stop click on checkboxes
				// and radios. We accept this limitation.
				event.stopPropagation();
				event.isImmediatePropagationStopped = returnTrue;
			}
		}
	} );
}
&amp;nbsp;
jQuery.removeEvent = function( elem, type, handle ) {
&amp;nbsp;
	// This &amp;quot;if&amp;quot; is needed for plain objects
	if ( elem.removeEventListener ) {
		elem.removeEventListener( type, handle );
	}
};
&amp;nbsp;
jQuery.Event = function( src, props ) {
&amp;nbsp;
	// Allow instantiation without the &#039;new&#039; keyword
	if ( !( this instanceof jQuery.Event ) ) {
		return new jQuery.Event( src, props );
	}
&amp;nbsp;
	// Event object
	if ( src &amp;amp;&amp;amp; src.type ) {
		this.originalEvent = src;
		this.type = src.type;
&amp;nbsp;
		// Events bubbling up the document may have been marked as prevented
		// by a handler lower down the tree; reflect the correct value.
		this.isDefaultPrevented = src.defaultPrevented ||
				src.defaultPrevented === undefined &amp;amp;&amp;amp;
&amp;nbsp;
				// Support: Android &amp;lt;=2.3 only
				src.returnValue === false ?
			returnTrue :
			returnFalse;
&amp;nbsp;
		// Create target properties
		// Support: Safari &amp;lt;=6 - 7 only
		// Target should not be a text node (trac-504, trac-13143)
		this.target = ( src.target &amp;amp;&amp;amp; src.target.nodeType === 3 ) ?
			src.target.parentNode :
			src.target;
&amp;nbsp;
		this.currentTarget = src.currentTarget;
		this.relatedTarget = src.relatedTarget;
&amp;nbsp;
	// Event type
	} else {
		this.type = src;
	}
&amp;nbsp;
	// Put explicitly provided properties onto the event object
	if ( props ) {
		jQuery.extend( this, props );
	}
&amp;nbsp;
	// Create a timestamp if incoming event doesn&#039;t have one
	this.timeStamp = src &amp;amp;&amp;amp; src.timeStamp || Date.now();
&amp;nbsp;
	// Mark it as fixed
	this[ jQuery.expando ] = true;
};
&amp;nbsp;
// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
jQuery.Event.prototype = {
	constructor: jQuery.Event,
	isDefaultPrevented: returnFalse,
	isPropagationStopped: returnFalse,
	isImmediatePropagationStopped: returnFalse,
	isSimulated: false,
&amp;nbsp;
	preventDefault: function() {
		var e = this.originalEvent;
&amp;nbsp;
		this.isDefaultPrevented = returnTrue;
&amp;nbsp;
		if ( e &amp;amp;&amp;amp; !this.isSimulated ) {
			e.preventDefault();
		}
	},
	stopPropagation: function() {
		var e = this.originalEvent;
&amp;nbsp;
		this.isPropagationStopped = returnTrue;
&amp;nbsp;
		if ( e &amp;amp;&amp;amp; !this.isSimulated ) {
			e.stopPropagation();
		}
	},
	stopImmediatePropagation: function() {
		var e = this.originalEvent;
&amp;nbsp;
		this.isImmediatePropagationStopped = returnTrue;
&amp;nbsp;
		if ( e &amp;amp;&amp;amp; !this.isSimulated ) {
			e.stopImmediatePropagation();
		}
&amp;nbsp;
		this.stopPropagation();
	}
};
&amp;nbsp;
// Includes all common event props including KeyEvent and MouseEvent specific props
jQuery.each( {
	altKey: true,
	bubbles: true,
	cancelable: true,
	changedTouches: true,
	ctrlKey: true,
	detail: true,
	eventPhase: true,
	metaKey: true,
	pageX: true,
	pageY: true,
	shiftKey: true,
	view: true,
	&amp;quot;char&amp;quot;: true,
	code: true,
	charCode: true,
	key: true,
	keyCode: true,
	button: true,
	buttons: true,
	clientX: true,
	clientY: true,
	offsetX: true,
	offsetY: true,
	pointerId: true,
	pointerType: true,
	screenX: true,
	screenY: true,
	targetTouches: true,
	toElement: true,
	touches: true,
	which: true
}, jQuery.event.addProp );
&amp;nbsp;
jQuery.each( { focus: &amp;quot;focusin&amp;quot;, blur: &amp;quot;focusout&amp;quot; }, function( type, delegateType ) {
&amp;nbsp;
	function focusMappedHandler( nativeEvent ) {
		if ( document.documentMode ) {
&amp;nbsp;
			// Support: IE 11+
			// Attach a single focusin/focusout handler on the document while someone wants
			// focus/blur. This is because the former are synchronous in IE while the latter
			// are async. In other browsers, all those handlers are invoked synchronously.
&amp;nbsp;
			// `handle` from private data would already wrap the event, but we need
			// to change the `type` here.
			var handle = dataPriv.get( this, &amp;quot;handle&amp;quot; ),
				event = jQuery.event.fix( nativeEvent );
			event.type = nativeEvent.type === &amp;quot;focusin&amp;quot; ? &amp;quot;focus&amp;quot; : &amp;quot;blur&amp;quot;;
			event.isSimulated = true;
&amp;nbsp;
			// First, handle focusin/focusout
			handle( nativeEvent );
&amp;nbsp;
			// ...then, handle focus/blur
			//
			// focus/blur don&#039;t bubble while focusin/focusout do; simulate the former by only
			// invoking the handler at the lower level.
			if ( event.target === event.currentTarget ) {
&amp;nbsp;
				// The setup part calls `leverageNative`, which, in turn, calls
				// `jQuery.event.add`, so event handle will already have been set
				// by this point.
				handle( event );
			}
		} else {
&amp;nbsp;
			// For non-IE browsers, attach a single capturing handler on the document
			// while someone wants focusin/focusout.
			jQuery.event.simulate( delegateType, nativeEvent.target,
				jQuery.event.fix( nativeEvent ) );
		}
	}
&amp;nbsp;
	jQuery.event.special[ type ] = {
&amp;nbsp;
		// Utilize native event if possible so blur/focus sequence is correct
		setup: function() {
&amp;nbsp;
			var attaches;
&amp;nbsp;
			// Claim the first handler
			// dataPriv.set( this, &amp;quot;focus&amp;quot;, ... )
			// dataPriv.set( this, &amp;quot;blur&amp;quot;, ... )
			leverageNative( this, type, true );
&amp;nbsp;
			if ( document.documentMode ) {
&amp;nbsp;
				// Support: IE 9 - 11+
				// We use the same native handler for focusin &amp;amp; focus (and focusout &amp;amp; blur)
				// so we need to coordinate setup &amp;amp; teardown parts between those events.
				// Use `delegateType` as the key as `type` is already used by `leverageNative`.
				attaches = dataPriv.get( this, delegateType );
				if ( !attaches ) {
					this.addEventListener( delegateType, focusMappedHandler );
				}
				dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );
			} else {
&amp;nbsp;
				// Return false to allow normal processing in the caller
				return false;
			}
		},
		trigger: function() {
&amp;nbsp;
			// Force setup before trigger
			leverageNative( this, type );
&amp;nbsp;
			// Return non-false to allow normal event-path propagation
			return true;
		},
&amp;nbsp;
		teardown: function() {
			var attaches;
&amp;nbsp;
			if ( document.documentMode ) {
				attaches = dataPriv.get( this, delegateType ) - 1;
				if ( !attaches ) {
					this.removeEventListener( delegateType, focusMappedHandler );
					dataPriv.remove( this, delegateType );
				} else {
					dataPriv.set( this, delegateType, attaches );
				}
			} else {
&amp;nbsp;
				// Return false to indicate standard teardown should be applied
				return false;
			}
		},
&amp;nbsp;
		// Suppress native focus or blur if we&#039;re currently inside
		// a leveraged native-event stack
		_default: function( event ) {
			return dataPriv.get( event.target, type );
		},
&amp;nbsp;
		delegateType: delegateType
	};
&amp;nbsp;
	// Support: Firefox &amp;lt;=44
	// Firefox doesn&#039;t have focus(in | out) events
	// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
	//
	// Support: Chrome &amp;lt;=48 - 49, Safari &amp;lt;=9.0 - 9.1
	// focus(in | out) events fire after focus &amp;amp; blur events,
	// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
	// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
	//
	// Support: IE 9 - 11+
	// To preserve relative focusin/focus &amp;amp; focusout/blur event order guaranteed on the 3.x branch,
	// attach a single handler for both events in IE.
	jQuery.event.special[ delegateType ] = {
		setup: function() {
&amp;nbsp;
			// Handle: regular nodes (via `this.ownerDocument`), window
			// (via `this.document`) &amp;amp; document (via `this`).
			var doc = this.ownerDocument || this.document || this,
				dataHolder = document.documentMode ? this : doc,
				attaches = dataPriv.get( dataHolder, delegateType );
&amp;nbsp;
			// Support: IE 9 - 11+
			// We use the same native handler for focusin &amp;amp; focus (and focusout &amp;amp; blur)
			// so we need to coordinate setup &amp;amp; teardown parts between those events.
			// Use `delegateType` as the key as `type` is already used by `leverageNative`.
			if ( !attaches ) {
				if ( document.documentMode ) {
					this.addEventListener( delegateType, focusMappedHandler );
				} else {
					doc.addEventListener( type, focusMappedHandler, true );
				}
			}
			dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );
		},
		teardown: function() {
			var doc = this.ownerDocument || this.document || this,
				dataHolder = document.documentMode ? this : doc,
				attaches = dataPriv.get( dataHolder, delegateType ) - 1;
&amp;nbsp;
			if ( !attaches ) {
				if ( document.documentMode ) {
					this.removeEventListener( delegateType, focusMappedHandler );
				} else {
					doc.removeEventListener( type, focusMappedHandler, true );
				}
				dataPriv.remove( dataHolder, delegateType );
			} else {
				dataPriv.set( dataHolder, delegateType, attaches );
			}
		}
	};
} );
&amp;nbsp;
// Create mouseenter/leave events using mouseover/out and event-time checks
// so that event delegation works in jQuery.
// Do the same for pointerenter/pointerleave and pointerover/pointerout
//
// Support: Safari 7 only
// Safari sends mouseenter too often; see:
// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
// for the description of the bug (it existed in older Chrome versions as well).
jQuery.each( {
	mouseenter: &amp;quot;mouseover&amp;quot;,
	mouseleave: &amp;quot;mouseout&amp;quot;,
	pointerenter: &amp;quot;pointerover&amp;quot;,
	pointerleave: &amp;quot;pointerout&amp;quot;
}, function( orig, fix ) {
	jQuery.event.special[ orig ] = {
		delegateType: fix,
		bindType: fix,
&amp;nbsp;
		handle: function( event ) {
			var ret,
				target = this,
				related = event.relatedTarget,
				handleObj = event.handleObj;
&amp;nbsp;
			// For mouseenter/leave call the handler if related is outside the target.
			// NB: No relatedTarget if the mouse left/entered the browser window
			if ( !related || ( related !== target &amp;amp;&amp;amp; !jQuery.contains( target, related ) ) ) {
				event.type = handleObj.origType;
				ret = handleObj.handler.apply( this, arguments );
				event.type = fix;
			}
			return ret;
		}
	};
} );
&amp;nbsp;
jQuery.fn.extend( {
&amp;nbsp;
	on: function( types, selector, data, fn ) {
		return on( this, types, selector, data, fn );
	},
	one: function( types, selector, data, fn ) {
		return on( this, types, selector, data, fn, 1 );
	},
	off: function( types, selector, fn ) {
		var handleObj, type;
		if ( types &amp;amp;&amp;amp; types.preventDefault &amp;amp;&amp;amp; types.handleObj ) {
&amp;nbsp;
			// ( event )  dispatched jQuery.Event
			handleObj = types.handleObj;
			jQuery( types.delegateTarget ).off(
				handleObj.namespace ?
					handleObj.origType + &amp;quot;.&amp;quot; + handleObj.namespace :
					handleObj.origType,
				handleObj.selector,
				handleObj.handler
			);
			return this;
		}
		if ( typeof types === &amp;quot;object&amp;quot; ) {
&amp;nbsp;
			// ( types-object [, selector] )
			for ( type in types ) {
				this.off( type, selector, types[ type ] );
			}
			return this;
		}
		if ( selector === false || typeof selector === &amp;quot;function&amp;quot; ) {
&amp;nbsp;
			// ( types [, fn] )
			fn = selector;
			selector = undefined;
		}
		if ( fn === false ) {
			fn = returnFalse;
		}
		return this.each( function() {
			jQuery.event.remove( this, types, fn, selector );
		} );
	}
} );
&amp;nbsp;
&amp;nbsp;
var
&amp;nbsp;
	// Support: IE &amp;lt;=10 - 11, Edge 12 - 13 only
	// In IE/Edge using regex groups here causes severe slowdowns.
	// See https://connect.microsoft.com/IE/feedback/details/1736512/
	rnoInnerhtml = /&amp;lt;script|&amp;lt;style|&amp;lt;link/i,
&amp;nbsp;
	// checked=&amp;quot;checked&amp;quot; or checked
	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
&amp;nbsp;
	rcleanScript = /^\s*&amp;lt;!\[CDATA\[|\]\]&amp;gt;\s*$/g;
&amp;nbsp;
// Prefer a tbody over its parent table for containing new rows
function manipulationTarget( elem, content ) {
	if ( nodeName( elem, &amp;quot;table&amp;quot; ) &amp;amp;&amp;amp;
		nodeName( content.nodeType !== 11 ? content : content.firstChild, &amp;quot;tr&amp;quot; ) ) {
&amp;nbsp;
		return jQuery( elem ).children( &amp;quot;tbody&amp;quot; )[ 0 ] || elem;
	}
&amp;nbsp;
	return elem;
}
&amp;nbsp;
// Replace/restore the type attribute of script elements for safe DOM manipulation
function disableScript( elem ) {
	elem.type = ( elem.getAttribute( &amp;quot;type&amp;quot; ) !== null ) + &amp;quot;/&amp;quot; + elem.type;
	return elem;
}
function restoreScript( elem ) {
	if ( ( elem.type || &amp;quot;&amp;quot; ).slice( 0, 5 ) === &amp;quot;true/&amp;quot; ) {
		elem.type = elem.type.slice( 5 );
	} else {
		elem.removeAttribute( &amp;quot;type&amp;quot; );
	}
&amp;nbsp;
	return elem;
}
&amp;nbsp;
function cloneCopyEvent( src, dest ) {
	var i, l, type, pdataOld, udataOld, udataCur, events;
&amp;nbsp;
	if ( dest.nodeType !== 1 ) {
		return;
	}
&amp;nbsp;
	// 1. Copy private data: events, handlers, etc.
	if ( dataPriv.hasData( src ) ) {
		pdataOld = dataPriv.get( src );
		events = pdataOld.events;
&amp;nbsp;
		if ( events ) {
			dataPriv.remove( dest, &amp;quot;handle events&amp;quot; );
&amp;nbsp;
			for ( type in events ) {
				for ( i = 0, l = events[ type ].length; i &amp;lt; l; i++ ) {
					jQuery.event.add( dest, type, events[ type ][ i ] );
				}
			}
		}
	}
&amp;nbsp;
	// 2. Copy user data
	if ( dataUser.hasData( src ) ) {
		udataOld = dataUser.access( src );
		udataCur = jQuery.extend( {}, udataOld );
&amp;nbsp;
		dataUser.set( dest, udataCur );
	}
}
&amp;nbsp;
// Fix IE bugs, see support tests
function fixInput( src, dest ) {
	var nodeName = dest.nodeName.toLowerCase();
&amp;nbsp;
	// Fails to persist the checked state of a cloned checkbox or radio button.
	if ( nodeName === &amp;quot;input&amp;quot; &amp;amp;&amp;amp; rcheckableType.test( src.type ) ) {
		dest.checked = src.checked;
&amp;nbsp;
	// Fails to return the selected option to the default selected state when cloning options
	} else if ( nodeName === &amp;quot;input&amp;quot; || nodeName === &amp;quot;textarea&amp;quot; ) {
		dest.defaultValue = src.defaultValue;
	}
}
&amp;nbsp;
function domManip( collection, args, callback, ignored ) {
&amp;nbsp;
	// Flatten any nested arrays
	args = flat( args );
&amp;nbsp;
	var fragment, first, scripts, hasScripts, node, doc,
		i = 0,
		l = collection.length,
		iNoClone = l - 1,
		value = args[ 0 ],
		valueIsFunction = isFunction( value );
&amp;nbsp;
	// We can&#039;t cloneNode fragments that contain checked, in WebKit
	if ( valueIsFunction ||
			( l &amp;gt; 1 &amp;amp;&amp;amp; typeof value === &amp;quot;string&amp;quot; &amp;amp;&amp;amp;
				!support.checkClone &amp;amp;&amp;amp; rchecked.test( value ) ) ) {
		return collection.each( function( index ) {
			var self = collection.eq( index );
			if ( valueIsFunction ) {
				args[ 0 ] = value.call( this, index, self.html() );
			}
			domManip( self, args, callback, ignored );
		} );
	}
&amp;nbsp;
	if ( l ) {
		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
		first = fragment.firstChild;
&amp;nbsp;
		if ( fragment.childNodes.length === 1 ) {
			fragment = first;
		}
&amp;nbsp;
		// Require either new content or an interest in ignored elements to invoke the callback
		if ( first || ignored ) {
			scripts = jQuery.map( getAll( fragment, &amp;quot;script&amp;quot; ), disableScript );
			hasScripts = scripts.length;
&amp;nbsp;
			// Use the original fragment for the last item
			// instead of the first because it can end up
			// being emptied incorrectly in certain situations (trac-8070).
			for ( ; i &amp;lt; l; i++ ) {
				node = fragment;
&amp;nbsp;
				if ( i !== iNoClone ) {
					node = jQuery.clone( node, true, true );
&amp;nbsp;
					// Keep references to cloned scripts for later restoration
					if ( hasScripts ) {
&amp;nbsp;
						// Support: Android &amp;lt;=4.0 only, PhantomJS 1 only
						// push.apply(_, arraylike) throws on ancient WebKit
						jQuery.merge( scripts, getAll( node, &amp;quot;script&amp;quot; ) );
					}
				}
&amp;nbsp;
				callback.call( collection[ i ], node, i );
			}
&amp;nbsp;
			if ( hasScripts ) {
				doc = scripts[ scripts.length - 1 ].ownerDocument;
&amp;nbsp;
				// Re-enable scripts
				jQuery.map( scripts, restoreScript );
&amp;nbsp;
				// Evaluate executable scripts on first document insertion
				for ( i = 0; i &amp;lt; hasScripts; i++ ) {
					node = scripts[ i ];
					if ( rscriptType.test( node.type || &amp;quot;&amp;quot; ) &amp;amp;&amp;amp;
						!dataPriv.access( node, &amp;quot;globalEval&amp;quot; ) &amp;amp;&amp;amp;
						jQuery.contains( doc, node ) ) {
&amp;nbsp;
						if ( node.src &amp;amp;&amp;amp; ( node.type || &amp;quot;&amp;quot; ).toLowerCase()  !== &amp;quot;module&amp;quot; ) {
&amp;nbsp;
							// Optional AJAX dependency, but won&#039;t run scripts if not present
							if ( jQuery._evalUrl &amp;amp;&amp;amp; !node.noModule ) {
								jQuery._evalUrl( node.src, {
									nonce: node.nonce || node.getAttribute( &amp;quot;nonce&amp;quot; )
								}, doc );
							}
						} else {
&amp;nbsp;
							// Unwrap a CDATA section containing script contents. This shouldn&#039;t be
							// needed as in XML documents they&#039;re already not visible when
							// inspecting element contents and in HTML documents they have no
							// meaning but we&#039;re preserving that logic for backwards compatibility.
							// This will be removed completely in 4.0. See gh-4904.
							DOMEval( node.textContent.replace( rcleanScript, &amp;quot;&amp;quot; ), node, doc );
						}
					}
				}
			}
		}
	}
&amp;nbsp;
	return collection;
}
&amp;nbsp;
function remove( elem, selector, keepData ) {
	var node,
		nodes = selector ? jQuery.filter( selector, elem ) : elem,
		i = 0;
&amp;nbsp;
	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
		if ( !keepData &amp;amp;&amp;amp; node.nodeType === 1 ) {
			jQuery.cleanData( getAll( node ) );
		}
&amp;nbsp;
		if ( node.parentNode ) {
			if ( keepData &amp;amp;&amp;amp; isAttached( node ) ) {
				setGlobalEval( getAll( node, &amp;quot;script&amp;quot; ) );
			}
			node.parentNode.removeChild( node );
		}
	}
&amp;nbsp;
	return elem;
}
&amp;nbsp;
jQuery.extend( {
	htmlPrefilter: function( html ) {
		return html;
	},
&amp;nbsp;
	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
		var i, l, srcElements, destElements,
			clone = elem.cloneNode( true ),
			inPage = isAttached( elem );
&amp;nbsp;
		// Fix IE cloning issues
		if ( !support.noCloneChecked &amp;amp;&amp;amp; ( elem.nodeType === 1 || elem.nodeType === 11 ) &amp;amp;&amp;amp;
				!jQuery.isXMLDoc( elem ) ) {
&amp;nbsp;
			// We eschew jQuery#find here for performance reasons:
			// https://jsperf.com/getall-vs-sizzle/2
			destElements = getAll( clone );
			srcElements = getAll( elem );
&amp;nbsp;
			for ( i = 0, l = srcElements.length; i &amp;lt; l; i++ ) {
				fixInput( srcElements[ i ], destElements[ i ] );
			}
		}
&amp;nbsp;
		// Copy the events from the original to the clone
		if ( dataAndEvents ) {
			if ( deepDataAndEvents ) {
				srcElements = srcElements || getAll( elem );
				destElements = destElements || getAll( clone );
&amp;nbsp;
				for ( i = 0, l = srcElements.length; i &amp;lt; l; i++ ) {
					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
				}
			} else {
				cloneCopyEvent( elem, clone );
			}
		}
&amp;nbsp;
		// Preserve script evaluation history
		destElements = getAll( clone, &amp;quot;script&amp;quot; );
		if ( destElements.length &amp;gt; 0 ) {
			setGlobalEval( destElements, !inPage &amp;amp;&amp;amp; getAll( elem, &amp;quot;script&amp;quot; ) );
		}
&amp;nbsp;
		// Return the cloned set
		return clone;
	},
&amp;nbsp;
	cleanData: function( elems ) {
		var data, elem, type,
			special = jQuery.event.special,
			i = 0;
&amp;nbsp;
		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
			if ( acceptData( elem ) ) {
				if ( ( data = elem[ dataPriv.expando ] ) ) {
					if ( data.events ) {
						for ( type in data.events ) {
							if ( special[ type ] ) {
								jQuery.event.remove( elem, type );
&amp;nbsp;
							// This is a shortcut to avoid jQuery.event.remove&#039;s overhead
							} else {
								jQuery.removeEvent( elem, type, data.handle );
							}
						}
					}
&amp;nbsp;
					// Support: Chrome &amp;lt;=35 - 45+
					// Assign undefined instead of using delete, see Data#remove
					elem[ dataPriv.expando ] = undefined;
				}
				if ( elem[ dataUser.expando ] ) {
&amp;nbsp;
					// Support: Chrome &amp;lt;=35 - 45+
					// Assign undefined instead of using delete, see Data#remove
					elem[ dataUser.expando ] = undefined;
				}
			}
		}
	}
} );
&amp;nbsp;
jQuery.fn.extend( {
	detach: function( selector ) {
		return remove( this, selector, true );
	},
&amp;nbsp;
	remove: function( selector ) {
		return remove( this, selector );
	},
&amp;nbsp;
	text: function( value ) {
		return access( this, function( value ) {
			return value === undefined ?
				jQuery.text( this ) :
				this.empty().each( function() {
					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
						this.textContent = value;
					}
				} );
		}, null, value, arguments.length );
	},
&amp;nbsp;
	append: function() {
		return domManip( this, arguments, function( elem ) {
			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
				var target = manipulationTarget( this, elem );
				target.appendChild( elem );
			}
		} );
	},
&amp;nbsp;
	prepend: function() {
		return domManip( this, arguments, function( elem ) {
			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
				var target = manipulationTarget( this, elem );
				target.insertBefore( elem, target.firstChild );
			}
		} );
	},
&amp;nbsp;
	before: function() {
		return domManip( this, arguments, function( elem ) {
			if ( this.parentNode ) {
				this.parentNode.insertBefore( elem, this );
			}
		} );
	},
&amp;nbsp;
	after: function() {
		return domManip( this, arguments, function( elem ) {
			if ( this.parentNode ) {
				this.parentNode.insertBefore( elem, this.nextSibling );
			}
		} );
	},
&amp;nbsp;
	empty: function() {
		var elem,
			i = 0;
&amp;nbsp;
		for ( ; ( elem = this[ i ] ) != null; i++ ) {
			if ( elem.nodeType === 1 ) {
&amp;nbsp;
				// Prevent memory leaks
				jQuery.cleanData( getAll( elem, false ) );
&amp;nbsp;
				// Remove any remaining nodes
				elem.textContent = &amp;quot;&amp;quot;;
			}
		}
&amp;nbsp;
		return this;
	},
&amp;nbsp;
	clone: function( dataAndEvents, deepDataAndEvents ) {
		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
&amp;nbsp;
		return this.map( function() {
			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
		} );
	},
&amp;nbsp;
	html: function( value ) {
		return access( this, function( value ) {
			var elem = this[ 0 ] || {},
				i = 0,
				l = this.length;
&amp;nbsp;
			if ( value === undefined &amp;amp;&amp;amp; elem.nodeType === 1 ) {
				return elem.innerHTML;
			}
&amp;nbsp;
			// See if we can take a shortcut and just use innerHTML
			if ( typeof value === &amp;quot;string&amp;quot; &amp;amp;&amp;amp; !rnoInnerhtml.test( value ) &amp;amp;&amp;amp;
				!wrapMap[ ( rtagName.exec( value ) || [ &amp;quot;&amp;quot;, &amp;quot;&amp;quot; ] )[ 1 ].toLowerCase() ] ) {
&amp;nbsp;
				value = jQuery.htmlPrefilter( value );
&amp;nbsp;
				try {
					for ( ; i &amp;lt; l; i++ ) {
						elem = this[ i ] || {};
&amp;nbsp;
						// Remove element nodes and prevent memory leaks
						if ( elem.nodeType === 1 ) {
							jQuery.cleanData( getAll( elem, false ) );
							elem.innerHTML = value;
						}
					}
&amp;nbsp;
					elem = 0;
&amp;nbsp;
				// If using innerHTML throws an exception, use the fallback method
				} catch ( e ) {}
			}
&amp;nbsp;
			if ( elem ) {
				this.empty().append( value );
			}
		}, null, value, arguments.length );
	},
&amp;nbsp;
	replaceWith: function() {
		var ignored = [];
&amp;nbsp;
		// Make the changes, replacing each non-ignored context element with the new content
		return domManip( this, arguments, function( elem ) {
			var parent = this.parentNode;
&amp;nbsp;
			if ( jQuery.inArray( this, ignored ) &amp;lt; 0 ) {
				jQuery.cleanData( getAll( this ) );
				if ( parent ) {
					parent.replaceChild( elem, this );
				}
			}
&amp;nbsp;
		// Force callback invocation
		}, ignored );
	}
} );
&amp;nbsp;
jQuery.each( {
	appendTo: &amp;quot;append&amp;quot;,
	prependTo: &amp;quot;prepend&amp;quot;,
	insertBefore: &amp;quot;before&amp;quot;,
	insertAfter: &amp;quot;after&amp;quot;,
	replaceAll: &amp;quot;replaceWith&amp;quot;
}, function( name, original ) {
	jQuery.fn[ name ] = function( selector ) {
		var elems,
			ret = [],
			insert = jQuery( selector ),
			last = insert.length - 1,
			i = 0;
&amp;nbsp;
		for ( ; i &amp;lt;= last; i++ ) {
			elems = i === last ? this : this.clone( true );
			jQuery( insert[ i ] )[ original ]( elems );
&amp;nbsp;
			// Support: Android &amp;lt;=4.0 only, PhantomJS 1 only
			// .get() because push.apply(_, arraylike) throws on ancient WebKit
			push.apply( ret, elems.get() );
		}
&amp;nbsp;
		return this.pushStack( ret );
	};
} );
var rnumnonpx = new RegExp( &amp;quot;^(&amp;quot; + pnum + &amp;quot;)(?!px)[a-z%]+$&amp;quot;, &amp;quot;i&amp;quot; );
&amp;nbsp;
var rcustomProp = /^--/;
&amp;nbsp;
&amp;nbsp;
var getStyles = function( elem ) {
&amp;nbsp;
		// Support: IE &amp;lt;=11 only, Firefox &amp;lt;=30 (trac-15098, trac-14150)
		// IE throws on elements created in popups
		// FF meanwhile throws on frame elements through &amp;quot;defaultView.getComputedStyle&amp;quot;
		var view = elem.ownerDocument.defaultView;
&amp;nbsp;
		if ( !view || !view.opener ) {
			view = window;
		}
&amp;nbsp;
		return view.getComputedStyle( elem );
	};
&amp;nbsp;
var swap = function( elem, options, callback ) {
	var ret, name,
		old = {};
&amp;nbsp;
	// Remember the old values, and insert the new ones
	for ( name in options ) {
		old[ name ] = elem.style[ name ];
		elem.style[ name ] = options[ name ];
	}
&amp;nbsp;
	ret = callback.call( elem );
&amp;nbsp;
	// Revert the old values
	for ( name in options ) {
		elem.style[ name ] = old[ name ];
	}
&amp;nbsp;
	return ret;
};
&amp;nbsp;
&amp;nbsp;
var rboxStyle = new RegExp( cssExpand.join( &amp;quot;|&amp;quot; ), &amp;quot;i&amp;quot; );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
( function() {
&amp;nbsp;
	// Executing both pixelPosition &amp;amp; boxSizingReliable tests require only one layout
	// so they&#039;re executed at the same time to save the second computation.
	function computeStyleTests() {
&amp;nbsp;
		// This is a singleton, we need to execute it only once
		if ( !div ) {
			return;
		}
&amp;nbsp;
		container.style.cssText = &amp;quot;position:absolute;left:-11111px;width:60px;&amp;quot; +
			&amp;quot;margin-top:1px;padding:0;border:0&amp;quot;;
		div.style.cssText =
			&amp;quot;position:relative;display:block;box-sizing:border-box;overflow:scroll;&amp;quot; +
			&amp;quot;margin:auto;border:1px;padding:1px;&amp;quot; +
			&amp;quot;width:60%;top:1%&amp;quot;;
		documentElement.appendChild( container ).appendChild( div );
&amp;nbsp;
		var divStyle = window.getComputedStyle( div );
		pixelPositionVal = divStyle.top !== &amp;quot;1%&amp;quot;;
&amp;nbsp;
		// Support: Android 4.0 - 4.3 only, Firefox &amp;lt;=3 - 44
		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
&amp;nbsp;
		// Support: Android 4.0 - 4.3 only, Safari &amp;lt;=9.1 - 10.1, iOS &amp;lt;=7.0 - 9.3
		// Some styles come back with percentage values, even though they shouldn&#039;t
		div.style.right = &amp;quot;60%&amp;quot;;
		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
&amp;nbsp;
		// Support: IE 9 - 11 only
		// Detect misreporting of content dimensions for box-sizing:border-box elements
		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
&amp;nbsp;
		// Support: IE 9 only
		// Detect overflow:scroll screwiness (gh-3699)
		// Support: Chrome &amp;lt;=64
		// Don&#039;t get tricked when zoom affects offsetWidth (gh-4029)
		div.style.position = &amp;quot;absolute&amp;quot;;
		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
&amp;nbsp;
		documentElement.removeChild( container );
&amp;nbsp;
		// Nullify the div so it wouldn&#039;t be stored in the memory and
		// it will also be a sign that checks already performed
		div = null;
	}
&amp;nbsp;
	function roundPixelMeasures( measure ) {
		return Math.round( parseFloat( measure ) );
	}
&amp;nbsp;
	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
		reliableTrDimensionsVal, reliableMarginLeftVal,
		container = document.createElement( &amp;quot;div&amp;quot; ),
		div = document.createElement( &amp;quot;div&amp;quot; );
&amp;nbsp;
	// Finish early in limited (non-browser) environments
	if ( !div.style ) {
		return;
	}
&amp;nbsp;
	// Support: IE &amp;lt;=9 - 11 only
	// Style of cloned element affects source element cloned (trac-8908)
	div.style.backgroundClip = &amp;quot;content-box&amp;quot;;
	div.cloneNode( true ).style.backgroundClip = &amp;quot;&amp;quot;;
	support.clearCloneStyle = div.style.backgroundClip === &amp;quot;content-box&amp;quot;;
&amp;nbsp;
	jQuery.extend( support, {
		boxSizingReliable: function() {
			computeStyleTests();
			return boxSizingReliableVal;
		},
		pixelBoxStyles: function() {
			computeStyleTests();
			return pixelBoxStylesVal;
		},
		pixelPosition: function() {
			computeStyleTests();
			return pixelPositionVal;
		},
		reliableMarginLeft: function() {
			computeStyleTests();
			return reliableMarginLeftVal;
		},
		scrollboxSize: function() {
			computeStyleTests();
			return scrollboxSizeVal;
		},
&amp;nbsp;
		// Support: IE 9 - 11+, Edge 15 - 18+
		// IE/Edge misreport `getComputedStyle` of table rows with width/height
		// set in CSS while `offset*` properties report correct values.
		// Behavior in IE 9 is more subtle than in newer versions &amp;amp; it passes
		// some versions of this test; make sure not to make it pass there!
		//
		// Support: Firefox 70+
		// Only Firefox includes border widths
		// in computed dimensions. (gh-4529)
		reliableTrDimensions: function() {
			var table, tr, trChild, trStyle;
			if ( reliableTrDimensionsVal == null ) {
				table = document.createElement( &amp;quot;table&amp;quot; );
				tr = document.createElement( &amp;quot;tr&amp;quot; );
				trChild = document.createElement( &amp;quot;div&amp;quot; );
&amp;nbsp;
				table.style.cssText = &amp;quot;position:absolute;left:-11111px;border-collapse:separate&amp;quot;;
				tr.style.cssText = &amp;quot;box-sizing:content-box;border:1px solid&amp;quot;;
&amp;nbsp;
				// Support: Chrome 86+
				// Height set through cssText does not get applied.
				// Computed height then comes back as 0.
				tr.style.height = &amp;quot;1px&amp;quot;;
				trChild.style.height = &amp;quot;9px&amp;quot;;
&amp;nbsp;
				// Support: Android 8 Chrome 86+
				// In our bodyBackground.html iframe,
				// display for all div elements is set to &amp;quot;inline&amp;quot;,
				// which causes a problem only in Android 8 Chrome 86.
				// Ensuring the div is `display: block`
				// gets around this issue.
				trChild.style.display = &amp;quot;block&amp;quot;;
&amp;nbsp;
				documentElement
					.appendChild( table )
					.appendChild( tr )
					.appendChild( trChild );
&amp;nbsp;
				trStyle = window.getComputedStyle( tr );
				reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
					parseInt( trStyle.borderTopWidth, 10 ) +
					parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
&amp;nbsp;
				documentElement.removeChild( table );
			}
			return reliableTrDimensionsVal;
		}
	} );
} )();
&amp;nbsp;
&amp;nbsp;
function curCSS( elem, name, computed ) {
	var width, minWidth, maxWidth, ret,
		isCustomProp = rcustomProp.test( name ),
&amp;nbsp;
		// Support: Firefox 51+
		// Retrieving style before computed somehow
		// fixes an issue with getting wrong values
		// on detached elements
		style = elem.style;
&amp;nbsp;
	computed = computed || getStyles( elem );
&amp;nbsp;
	// getPropertyValue is needed for:
	//   .css(&#039;filter&#039;) (IE 9 only, trac-12537)
	//   .css(&#039;--customProperty) (gh-3144)
	if ( computed ) {
&amp;nbsp;
		// Support: IE &amp;lt;=9 - 11+
		// IE only supports `&amp;quot;float&amp;quot;` in `getPropertyValue`; in computed styles
		// it&#039;s only available as `&amp;quot;cssFloat&amp;quot;`. We no longer modify properties
		// sent to `.css()` apart from camelCasing, so we need to check both.
		// Normally, this would create difference in behavior: if
		// `getPropertyValue` returns an empty string, the value returned
		// by `.css()` would be `undefined`. This is usually the case for
		// disconnected elements. However, in IE even disconnected elements
		// with no styles return `&amp;quot;none&amp;quot;` for `getPropertyValue( &amp;quot;float&amp;quot; )`
		ret = computed.getPropertyValue( name ) || computed[ name ];
&amp;nbsp;
		if ( isCustomProp &amp;amp;&amp;amp; ret ) {
&amp;nbsp;
			// Support: Firefox 105+, Chrome &amp;lt;=105+
			// Spec requires trimming whitespace for custom properties (gh-4926).
			// Firefox only trims leading whitespace. Chrome just collapses
			// both leading &amp;amp; trailing whitespace to a single space.
			//
			// Fall back to `undefined` if empty string returned.
			// This collapses a missing definition with property defined
			// and set to an empty string but there&#039;s no standard API
			// allowing us to differentiate them without a performance penalty
			// and returning `undefined` aligns with older jQuery.
			//
			// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED
			// as whitespace while CSS does not, but this is not a problem
			// because CSS preprocessing replaces them with U+000A LINE FEED
			// (which *is* CSS whitespace)
			// https://www.w3.org/TR/css-syntax-3/#input-preprocessing
			ret = ret.replace( rtrimCSS, &amp;quot;$1&amp;quot; ) || undefined;
		}
&amp;nbsp;
		if ( ret === &amp;quot;&amp;quot; &amp;amp;&amp;amp; !isAttached( elem ) ) {
			ret = jQuery.style( elem, name );
		}
&amp;nbsp;
		// A tribute to the &amp;quot;awesome hack by Dean Edwards&amp;quot;
		// Android Browser returns percentage for some values,
		// but width seems to be reliably pixels.
		// This is against the CSSOM draft spec:
		// https://drafts.csswg.org/cssom/#resolved-values
		if ( !support.pixelBoxStyles() &amp;amp;&amp;amp; rnumnonpx.test( ret ) &amp;amp;&amp;amp; rboxStyle.test( name ) ) {
&amp;nbsp;
			// Remember the original values
			width = style.width;
			minWidth = style.minWidth;
			maxWidth = style.maxWidth;
&amp;nbsp;
			// Put in the new values to get a computed value out
			style.minWidth = style.maxWidth = style.width = ret;
			ret = computed.width;
&amp;nbsp;
			// Revert the changed values
			style.width = width;
			style.minWidth = minWidth;
			style.maxWidth = maxWidth;
		}
	}
&amp;nbsp;
	return ret !== undefined ?
&amp;nbsp;
		// Support: IE &amp;lt;=9 - 11 only
		// IE returns zIndex value as an integer.
		ret + &amp;quot;&amp;quot; :
		ret;
}
&amp;nbsp;
&amp;nbsp;
function addGetHookIf( conditionFn, hookFn ) {
&amp;nbsp;
	// Define the hook, we&#039;ll check on the first run if it&#039;s really needed.
	return {
		get: function() {
			if ( conditionFn() ) {
&amp;nbsp;
				// Hook not needed (or it&#039;s not possible to use it due
				// to missing dependency), remove it.
				delete this.get;
				return;
			}
&amp;nbsp;
			// Hook needed; redefine it so that the support test is not executed again.
			return ( this.get = hookFn ).apply( this, arguments );
		}
	};
}
&amp;nbsp;
&amp;nbsp;
var cssPrefixes = [ &amp;quot;Webkit&amp;quot;, &amp;quot;Moz&amp;quot;, &amp;quot;ms&amp;quot; ],
	emptyStyle = document.createElement( &amp;quot;div&amp;quot; ).style,
	vendorProps = {};
&amp;nbsp;
// Return a vendor-prefixed property or undefined
function vendorPropName( name ) {
&amp;nbsp;
	// Check for vendor prefixed names
	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
		i = cssPrefixes.length;
&amp;nbsp;
	while ( i-- ) {
		name = cssPrefixes[ i ] + capName;
		if ( name in emptyStyle ) {
			return name;
		}
	}
}
&amp;nbsp;
// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
function finalPropName( name ) {
	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
&amp;nbsp;
	if ( final ) {
		return final;
	}
	if ( name in emptyStyle ) {
		return name;
	}
	return vendorProps[ name ] = vendorPropName( name ) || name;
}
&amp;nbsp;
&amp;nbsp;
var
&amp;nbsp;
	// Swappable if display is none or starts with table
	// except &amp;quot;table&amp;quot;, &amp;quot;table-cell&amp;quot;, or &amp;quot;table-caption&amp;quot;
	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
	cssShow = { position: &amp;quot;absolute&amp;quot;, visibility: &amp;quot;hidden&amp;quot;, display: &amp;quot;block&amp;quot; },
	cssNormalTransform = {
		letterSpacing: &amp;quot;0&amp;quot;,
		fontWeight: &amp;quot;400&amp;quot;
	};
&amp;nbsp;
function setPositiveNumber( _elem, value, subtract ) {
&amp;nbsp;
	// Any relative (+/-) values have already been
	// normalized at this point
	var matches = rcssNum.exec( value );
	return matches ?
&amp;nbsp;
		// Guard against undefined &amp;quot;subtract&amp;quot;, e.g., when used as in cssHooks
		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || &amp;quot;px&amp;quot; ) :
		value;
}
&amp;nbsp;
function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
	var i = dimension === &amp;quot;width&amp;quot; ? 1 : 0,
		extra = 0,
		delta = 0,
		marginDelta = 0;
&amp;nbsp;
	// Adjustment may not be necessary
	if ( box === ( isBorderBox ? &amp;quot;border&amp;quot; : &amp;quot;content&amp;quot; ) ) {
		return 0;
	}
&amp;nbsp;
	for ( ; i &amp;lt; 4; i += 2 ) {
&amp;nbsp;
		// Both box models exclude margin
		// Count margin delta separately to only add it after scroll gutter adjustment.
		// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).
		if ( box === &amp;quot;margin&amp;quot; ) {
			marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
		}
&amp;nbsp;
		// If we get here with a content-box, we&#039;re seeking &amp;quot;padding&amp;quot; or &amp;quot;border&amp;quot; or &amp;quot;margin&amp;quot;
		if ( !isBorderBox ) {
&amp;nbsp;
			// Add padding
			delta += jQuery.css( elem, &amp;quot;padding&amp;quot; + cssExpand[ i ], true, styles );
&amp;nbsp;
			// For &amp;quot;border&amp;quot; or &amp;quot;margin&amp;quot;, add border
			if ( box !== &amp;quot;padding&amp;quot; ) {
				delta += jQuery.css( elem, &amp;quot;border&amp;quot; + cssExpand[ i ] + &amp;quot;Width&amp;quot;, true, styles );
&amp;nbsp;
			// But still keep track of it otherwise
			} else {
				extra += jQuery.css( elem, &amp;quot;border&amp;quot; + cssExpand[ i ] + &amp;quot;Width&amp;quot;, true, styles );
			}
&amp;nbsp;
		// If we get here with a border-box (content + padding + border), we&#039;re seeking &amp;quot;content&amp;quot; or
		// &amp;quot;padding&amp;quot; or &amp;quot;margin&amp;quot;
		} else {
&amp;nbsp;
			// For &amp;quot;content&amp;quot;, subtract padding
			if ( box === &amp;quot;content&amp;quot; ) {
				delta -= jQuery.css( elem, &amp;quot;padding&amp;quot; + cssExpand[ i ], true, styles );
			}
&amp;nbsp;
			// For &amp;quot;content&amp;quot; or &amp;quot;padding&amp;quot;, subtract border
			if ( box !== &amp;quot;margin&amp;quot; ) {
				delta -= jQuery.css( elem, &amp;quot;border&amp;quot; + cssExpand[ i ] + &amp;quot;Width&amp;quot;, true, styles );
			}
		}
	}
&amp;nbsp;
	// Account for positive content-box scroll gutter when requested by providing computedVal
	if ( !isBorderBox &amp;amp;&amp;amp; computedVal &amp;gt;= 0 ) {
&amp;nbsp;
		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
		// Assuming integer scroll gutter, subtract the rest and round down
		delta += Math.max( 0, Math.ceil(
			elem[ &amp;quot;offset&amp;quot; + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
			computedVal -
			delta -
			extra -
			0.5
&amp;nbsp;
		// If offsetWidth/offsetHeight is unknown, then we can&#039;t determine content-box scroll gutter
		// Use an explicit zero to avoid NaN (gh-3964)
		) ) || 0;
	}
&amp;nbsp;
	return delta + marginDelta;
}
&amp;nbsp;
function getWidthOrHeight( elem, dimension, extra ) {
&amp;nbsp;
	// Start with computed style
	var styles = getStyles( elem ),
&amp;nbsp;
		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
		// Fake content-box until we know it&#039;s needed to know the true value.
		boxSizingNeeded = !support.boxSizingReliable() || extra,
		isBorderBox = boxSizingNeeded &amp;amp;&amp;amp;
			jQuery.css( elem, &amp;quot;boxSizing&amp;quot;, false, styles ) === &amp;quot;border-box&amp;quot;,
		valueIsBorderBox = isBorderBox,
&amp;nbsp;
		val = curCSS( elem, dimension, styles ),
		offsetProp = &amp;quot;offset&amp;quot; + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
&amp;nbsp;
	// Support: Firefox &amp;lt;=54
	// Return a confounding non-pixel value or feign ignorance, as appropriate.
	if ( rnumnonpx.test( val ) ) {
		if ( !extra ) {
			return val;
		}
		val = &amp;quot;auto&amp;quot;;
	}
&amp;nbsp;
&amp;nbsp;
	// Support: IE 9 - 11 only
	// Use offsetWidth/offsetHeight for when box sizing is unreliable.
	// In those cases, the computed value can be trusted to be border-box.
	if ( ( !support.boxSizingReliable() &amp;amp;&amp;amp; isBorderBox ||
&amp;nbsp;
		// Support: IE 10 - 11+, Edge 15 - 18+
		// IE/Edge misreport `getComputedStyle` of table rows with width/height
		// set in CSS while `offset*` properties report correct values.
		// Interestingly, in some cases IE 9 doesn&#039;t suffer from this issue.
		!support.reliableTrDimensions() &amp;amp;&amp;amp; nodeName( elem, &amp;quot;tr&amp;quot; ) ||
&amp;nbsp;
		// Fall back to offsetWidth/offsetHeight when value is &amp;quot;auto&amp;quot;
		// This happens for inline elements with no explicit setting (gh-3571)
		val === &amp;quot;auto&amp;quot; ||
&amp;nbsp;
		// Support: Android &amp;lt;=4.1 - 4.3 only
		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
		!parseFloat( val ) &amp;amp;&amp;amp; jQuery.css( elem, &amp;quot;display&amp;quot;, false, styles ) === &amp;quot;inline&amp;quot; ) &amp;amp;&amp;amp;
&amp;nbsp;
		// Make sure the element is visible &amp;amp; connected
		elem.getClientRects().length ) {
&amp;nbsp;
		isBorderBox = jQuery.css( elem, &amp;quot;boxSizing&amp;quot;, false, styles ) === &amp;quot;border-box&amp;quot;;
&amp;nbsp;
		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
		// retrieved value as a content box dimension.
		valueIsBorderBox = offsetProp in elem;
		if ( valueIsBorderBox ) {
			val = elem[ offsetProp ];
		}
	}
&amp;nbsp;
	// Normalize &amp;quot;&amp;quot; and auto
	val = parseFloat( val ) || 0;
&amp;nbsp;
	// Adjust for the element&#039;s box model
	return ( val +
		boxModelAdjustment(
			elem,
			dimension,
			extra || ( isBorderBox ? &amp;quot;border&amp;quot; : &amp;quot;content&amp;quot; ),
			valueIsBorderBox,
			styles,
&amp;nbsp;
			// Provide the current computed size to request scroll gutter calculation (gh-3589)
			val
		)
	) + &amp;quot;px&amp;quot;;
}
&amp;nbsp;
jQuery.extend( {
&amp;nbsp;
	// Add in style property hooks for overriding the default
	// behavior of getting and setting a style property
	cssHooks: {
		opacity: {
			get: function( elem, computed ) {
				if ( computed ) {
&amp;nbsp;
					// We should always get a number back from opacity
					var ret = curCSS( elem, &amp;quot;opacity&amp;quot; );
					return ret === &amp;quot;&amp;quot; ? &amp;quot;1&amp;quot; : ret;
				}
			}
		}
	},
&amp;nbsp;
	// Don&#039;t automatically add &amp;quot;px&amp;quot; to these possibly-unitless properties
	cssNumber: {
		animationIterationCount: true,
		aspectRatio: true,
		borderImageSlice: true,
		columnCount: true,
		flexGrow: true,
		flexShrink: true,
		fontWeight: true,
		gridArea: true,
		gridColumn: true,
		gridColumnEnd: true,
		gridColumnStart: true,
		gridRow: true,
		gridRowEnd: true,
		gridRowStart: true,
		lineHeight: true,
		opacity: true,
		order: true,
		orphans: true,
		scale: true,
		widows: true,
		zIndex: true,
		zoom: true,
&amp;nbsp;
		// SVG-related
		fillOpacity: true,
		floodOpacity: true,
		stopOpacity: true,
		strokeMiterlimit: true,
		strokeOpacity: true
	},
&amp;nbsp;
	// Add in properties whose names you wish to fix before
	// setting or getting the value
	cssProps: {},
&amp;nbsp;
	// Get and set the style property on a DOM Node
	style: function( elem, name, value, extra ) {
&amp;nbsp;
		// Don&#039;t set styles on text and comment nodes
		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
			return;
		}
&amp;nbsp;
		// Make sure that we&#039;re working with the right name
		var ret, type, hooks,
			origName = camelCase( name ),
			isCustomProp = rcustomProp.test( name ),
			style = elem.style;
&amp;nbsp;
		// Make sure that we&#039;re working with the right name. We don&#039;t
		// want to query the value if it is a CSS custom property
		// since they are user-defined.
		if ( !isCustomProp ) {
			name = finalPropName( origName );
		}
&amp;nbsp;
		// Gets hook for the prefixed version, then unprefixed version
		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
&amp;nbsp;
		// Check if we&#039;re setting a value
		if ( value !== undefined ) {
			type = typeof value;
&amp;nbsp;
			// Convert &amp;quot;+=&amp;quot; or &amp;quot;-=&amp;quot; to relative numbers (trac-7345)
			if ( type === &amp;quot;string&amp;quot; &amp;amp;&amp;amp; ( ret = rcssNum.exec( value ) ) &amp;amp;&amp;amp; ret[ 1 ] ) {
				value = adjustCSS( elem, name, ret );
&amp;nbsp;
				// Fixes bug trac-9237
				type = &amp;quot;number&amp;quot;;
			}
&amp;nbsp;
			// Make sure that null and NaN values aren&#039;t set (trac-7116)
			if ( value == null || value !== value ) {
				return;
			}
&amp;nbsp;
			// If a number was passed in, add the unit (except for certain CSS properties)
			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
			// &amp;quot;px&amp;quot; to a few hardcoded values.
			if ( type === &amp;quot;number&amp;quot; &amp;amp;&amp;amp; !isCustomProp ) {
				value += ret &amp;amp;&amp;amp; ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? &amp;quot;&amp;quot; : &amp;quot;px&amp;quot; );
			}
&amp;nbsp;
			// background-* props affect original clone&#039;s values
			if ( !support.clearCloneStyle &amp;amp;&amp;amp; value === &amp;quot;&amp;quot; &amp;amp;&amp;amp; name.indexOf( &amp;quot;background&amp;quot; ) === 0 ) {
				style[ name ] = &amp;quot;inherit&amp;quot;;
			}
&amp;nbsp;
			// If a hook was provided, use that value, otherwise just set the specified value
			if ( !hooks || !( &amp;quot;set&amp;quot; in hooks ) ||
				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
&amp;nbsp;
				if ( isCustomProp ) {
					style.setProperty( name, value );
				} else {
					style[ name ] = value;
				}
			}
&amp;nbsp;
		} else {
&amp;nbsp;
			// If a hook was provided get the non-computed value from there
			if ( hooks &amp;amp;&amp;amp; &amp;quot;get&amp;quot; in hooks &amp;amp;&amp;amp;
				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
&amp;nbsp;
				return ret;
			}
&amp;nbsp;
			// Otherwise just get the value from the style object
			return style[ name ];
		}
	},
&amp;nbsp;
	css: function( elem, name, extra, styles ) {
		var val, num, hooks,
			origName = camelCase( name ),
			isCustomProp = rcustomProp.test( name );
&amp;nbsp;
		// Make sure that we&#039;re working with the right name. We don&#039;t
		// want to modify the value if it is a CSS custom property
		// since they are user-defined.
		if ( !isCustomProp ) {
			name = finalPropName( origName );
		}
&amp;nbsp;
		// Try prefixed name followed by the unprefixed name
		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
&amp;nbsp;
		// If a hook was provided get the computed value from there
		if ( hooks &amp;amp;&amp;amp; &amp;quot;get&amp;quot; in hooks ) {
			val = hooks.get( elem, true, extra );
		}
&amp;nbsp;
		// Otherwise, if a way to get the computed value exists, use that
		if ( val === undefined ) {
			val = curCSS( elem, name, styles );
		}
&amp;nbsp;
		// Convert &amp;quot;normal&amp;quot; to computed value
		if ( val === &amp;quot;normal&amp;quot; &amp;amp;&amp;amp; name in cssNormalTransform ) {
			val = cssNormalTransform[ name ];
		}
&amp;nbsp;
		// Make numeric if forced or a qualifier was provided and val looks numeric
		if ( extra === &amp;quot;&amp;quot; || extra ) {
			num = parseFloat( val );
			return extra === true || isFinite( num ) ? num || 0 : val;
		}
&amp;nbsp;
		return val;
	}
} );
&amp;nbsp;
jQuery.each( [ &amp;quot;height&amp;quot;, &amp;quot;width&amp;quot; ], function( _i, dimension ) {
	jQuery.cssHooks[ dimension ] = {
		get: function( elem, computed, extra ) {
			if ( computed ) {
&amp;nbsp;
				// Certain elements can have dimension info if we invisibly show them
				// but it must have a current display style that would benefit
				return rdisplayswap.test( jQuery.css( elem, &amp;quot;display&amp;quot; ) ) &amp;amp;&amp;amp;
&amp;nbsp;
					// Support: Safari 8+
					// Table columns in Safari have non-zero offsetWidth &amp;amp; zero
					// getBoundingClientRect().width unless display is changed.
					// Support: IE &amp;lt;=11 only
					// Running getBoundingClientRect on a disconnected node
					// in IE throws an error.
					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
					swap( elem, cssShow, function() {
						return getWidthOrHeight( elem, dimension, extra );
					} ) :
					getWidthOrHeight( elem, dimension, extra );
			}
		},
&amp;nbsp;
		set: function( elem, value, extra ) {
			var matches,
				styles = getStyles( elem ),
&amp;nbsp;
				// Only read styles.position if the test has a chance to fail
				// to avoid forcing a reflow.
				scrollboxSizeBuggy = !support.scrollboxSize() &amp;amp;&amp;amp;
					styles.position === &amp;quot;absolute&amp;quot;,
&amp;nbsp;
				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
				boxSizingNeeded = scrollboxSizeBuggy || extra,
				isBorderBox = boxSizingNeeded &amp;amp;&amp;amp;
					jQuery.css( elem, &amp;quot;boxSizing&amp;quot;, false, styles ) === &amp;quot;border-box&amp;quot;,
				subtract = extra ?
					boxModelAdjustment(
						elem,
						dimension,
						extra,
						isBorderBox,
						styles
					) :
					0;
&amp;nbsp;
			// Account for unreliable border-box dimensions by comparing offset* to computed and
			// faking a content-box to get border and padding (gh-3699)
			if ( isBorderBox &amp;amp;&amp;amp; scrollboxSizeBuggy ) {
				subtract -= Math.ceil(
					elem[ &amp;quot;offset&amp;quot; + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
					parseFloat( styles[ dimension ] ) -
					boxModelAdjustment( elem, dimension, &amp;quot;border&amp;quot;, false, styles ) -
					0.5
				);
			}
&amp;nbsp;
			// Convert to pixels if value adjustment is needed
			if ( subtract &amp;amp;&amp;amp; ( matches = rcssNum.exec( value ) ) &amp;amp;&amp;amp;
				( matches[ 3 ] || &amp;quot;px&amp;quot; ) !== &amp;quot;px&amp;quot; ) {
&amp;nbsp;
				elem.style[ dimension ] = value;
				value = jQuery.css( elem, dimension );
			}
&amp;nbsp;
			return setPositiveNumber( elem, value, subtract );
		}
	};
} );
&amp;nbsp;
jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
	function( elem, computed ) {
		if ( computed ) {
			return ( parseFloat( curCSS( elem, &amp;quot;marginLeft&amp;quot; ) ) ||
				elem.getBoundingClientRect().left -
					swap( elem, { marginLeft: 0 }, function() {
						return elem.getBoundingClientRect().left;
					} )
			) + &amp;quot;px&amp;quot;;
		}
	}
);
&amp;nbsp;
// These hooks are used by animate to expand properties
jQuery.each( {
	margin: &amp;quot;&amp;quot;,
	padding: &amp;quot;&amp;quot;,
	border: &amp;quot;Width&amp;quot;
}, function( prefix, suffix ) {
	jQuery.cssHooks[ prefix + suffix ] = {
		expand: function( value ) {
			var i = 0,
				expanded = {},
&amp;nbsp;
				// Assumes a single number if not a string
				parts = typeof value === &amp;quot;string&amp;quot; ? value.split( &amp;quot; &amp;quot; ) : [ value ];
&amp;nbsp;
			for ( ; i &amp;lt; 4; i++ ) {
				expanded[ prefix + cssExpand[ i ] + suffix ] =
					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
			}
&amp;nbsp;
			return expanded;
		}
	};
&amp;nbsp;
	if ( prefix !== &amp;quot;margin&amp;quot; ) {
		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
	}
} );
&amp;nbsp;
jQuery.fn.extend( {
	css: function( name, value ) {
		return access( this, function( elem, name, value ) {
			var styles, len,
				map = {},
				i = 0;
&amp;nbsp;
			if ( Array.isArray( name ) ) {
				styles = getStyles( elem );
				len = name.length;
&amp;nbsp;
				for ( ; i &amp;lt; len; i++ ) {
					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
				}
&amp;nbsp;
				return map;
			}
&amp;nbsp;
			return value !== undefined ?
				jQuery.style( elem, name, value ) :
				jQuery.css( elem, name );
		}, name, value, arguments.length &amp;gt; 1 );
	}
} );
&amp;nbsp;
&amp;nbsp;
// Based off of the plugin by Clint Helfers, with permission.
jQuery.fn.delay = function( time, type ) {
	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
	type = type || &amp;quot;fx&amp;quot;;
&amp;nbsp;
	return this.queue( type, function( next, hooks ) {
		var timeout = window.setTimeout( next, time );
		hooks.stop = function() {
			window.clearTimeout( timeout );
		};
	} );
};
&amp;nbsp;
&amp;nbsp;
( function() {
	var input = document.createElement( &amp;quot;input&amp;quot; ),
		select = document.createElement( &amp;quot;select&amp;quot; ),
		opt = select.appendChild( document.createElement( &amp;quot;option&amp;quot; ) );
&amp;nbsp;
	input.type = &amp;quot;checkbox&amp;quot;;
&amp;nbsp;
	// Support: Android &amp;lt;=4.3 only
	// Default value for a checkbox should be &amp;quot;on&amp;quot;
	support.checkOn = input.value !== &amp;quot;&amp;quot;;
&amp;nbsp;
	// Support: IE &amp;lt;=11 only
	// Must access selectedIndex to make default options select
	support.optSelected = opt.selected;
&amp;nbsp;
	// Support: IE &amp;lt;=11 only
	// An input loses its value after becoming a radio
	input = document.createElement( &amp;quot;input&amp;quot; );
	input.value = &amp;quot;t&amp;quot;;
	input.type = &amp;quot;radio&amp;quot;;
	support.radioValue = input.value === &amp;quot;t&amp;quot;;
} )();
&amp;nbsp;
&amp;nbsp;
var boolHook,
	attrHandle = jQuery.expr.attrHandle;
&amp;nbsp;
jQuery.fn.extend( {
	attr: function( name, value ) {
		return access( this, jQuery.attr, name, value, arguments.length &amp;gt; 1 );
	},
&amp;nbsp;
	removeAttr: function( name ) {
		return this.each( function() {
			jQuery.removeAttr( this, name );
		} );
	}
} );
&amp;nbsp;
jQuery.extend( {
	attr: function( elem, name, value ) {
		var ret, hooks,
			nType = elem.nodeType;
&amp;nbsp;
		// Don&#039;t get/set attributes on text, comment and attribute nodes
		if ( nType === 3 || nType === 8 || nType === 2 ) {
			return;
		}
&amp;nbsp;
		// Fallback to prop when attributes are not supported
		if ( typeof elem.getAttribute === &amp;quot;undefined&amp;quot; ) {
			return jQuery.prop( elem, name, value );
		}
&amp;nbsp;
		// Attribute hooks are determined by the lowercase version
		// Grab necessary hook if one is defined
		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
		}
&amp;nbsp;
		if ( value !== undefined ) {
			if ( value === null ) {
				jQuery.removeAttr( elem, name );
				return;
			}
&amp;nbsp;
			if ( hooks &amp;amp;&amp;amp; &amp;quot;set&amp;quot; in hooks &amp;amp;&amp;amp;
				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
				return ret;
			}
&amp;nbsp;
			elem.setAttribute( name, value + &amp;quot;&amp;quot; );
			return value;
		}
&amp;nbsp;
		if ( hooks &amp;amp;&amp;amp; &amp;quot;get&amp;quot; in hooks &amp;amp;&amp;amp; ( ret = hooks.get( elem, name ) ) !== null ) {
			return ret;
		}
&amp;nbsp;
		ret = jQuery.find.attr( elem, name );
&amp;nbsp;
		// Non-existent attributes return null, we normalize to undefined
		return ret == null ? undefined : ret;
	},
&amp;nbsp;
	attrHooks: {
		type: {
			set: function( elem, value ) {
				if ( !support.radioValue &amp;amp;&amp;amp; value === &amp;quot;radio&amp;quot; &amp;amp;&amp;amp;
					nodeName( elem, &amp;quot;input&amp;quot; ) ) {
					var val = elem.value;
					elem.setAttribute( &amp;quot;type&amp;quot;, value );
					if ( val ) {
						elem.value = val;
					}
					return value;
				}
			}
		}
	},
&amp;nbsp;
	removeAttr: function( elem, value ) {
		var name,
			i = 0,
&amp;nbsp;
			// Attribute names can contain non-HTML whitespace characters
			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
			attrNames = value &amp;amp;&amp;amp; value.match( rnothtmlwhite );
&amp;nbsp;
		if ( attrNames &amp;amp;&amp;amp; elem.nodeType === 1 ) {
			while ( ( name = attrNames[ i++ ] ) ) {
				elem.removeAttribute( name );
			}
		}
	}
} );
&amp;nbsp;
// Hooks for boolean attributes
boolHook = {
	set: function( elem, value, name ) {
		if ( value === false ) {
&amp;nbsp;
			// Remove boolean attributes when set to false
			jQuery.removeAttr( elem, name );
		} else {
			elem.setAttribute( name, name );
		}
		return name;
	}
};
&amp;nbsp;
jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
	var getter = attrHandle[ name ] || jQuery.find.attr;
&amp;nbsp;
	attrHandle[ name ] = function( elem, name, isXML ) {
		var ret, handle,
			lowercaseName = name.toLowerCase();
&amp;nbsp;
		if ( !isXML ) {
&amp;nbsp;
			// Avoid an infinite loop by temporarily removing this function from the getter
			handle = attrHandle[ lowercaseName ];
			attrHandle[ lowercaseName ] = ret;
			ret = getter( elem, name, isXML ) != null ?
				lowercaseName :
				null;
			attrHandle[ lowercaseName ] = handle;
		}
		return ret;
	};
} );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
var rfocusable = /^(?:input|select|textarea|button)$/i,
	rclickable = /^(?:a|area)$/i;
&amp;nbsp;
jQuery.fn.extend( {
	prop: function( name, value ) {
		return access( this, jQuery.prop, name, value, arguments.length &amp;gt; 1 );
	},
&amp;nbsp;
	removeProp: function( name ) {
		return this.each( function() {
			delete this[ jQuery.propFix[ name ] || name ];
		} );
	}
} );
&amp;nbsp;
jQuery.extend( {
	prop: function( elem, name, value ) {
		var ret, hooks,
			nType = elem.nodeType;
&amp;nbsp;
		// Don&#039;t get/set properties on text, comment and attribute nodes
		if ( nType === 3 || nType === 8 || nType === 2 ) {
			return;
		}
&amp;nbsp;
		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
&amp;nbsp;
			// Fix name and attach hooks
			name = jQuery.propFix[ name ] || name;
			hooks = jQuery.propHooks[ name ];
		}
&amp;nbsp;
		if ( value !== undefined ) {
			if ( hooks &amp;amp;&amp;amp; &amp;quot;set&amp;quot; in hooks &amp;amp;&amp;amp;
				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
				return ret;
			}
&amp;nbsp;
			return ( elem[ name ] = value );
		}
&amp;nbsp;
		if ( hooks &amp;amp;&amp;amp; &amp;quot;get&amp;quot; in hooks &amp;amp;&amp;amp; ( ret = hooks.get( elem, name ) ) !== null ) {
			return ret;
		}
&amp;nbsp;
		return elem[ name ];
	},
&amp;nbsp;
	propHooks: {
		tabIndex: {
			get: function( elem ) {
&amp;nbsp;
				// Support: IE &amp;lt;=9 - 11 only
				// elem.tabIndex doesn&#039;t always return the
				// correct value when it hasn&#039;t been explicitly set
				// Use proper attribute retrieval (trac-12072)
				var tabindex = jQuery.find.attr( elem, &amp;quot;tabindex&amp;quot; );
&amp;nbsp;
				if ( tabindex ) {
					return parseInt( tabindex, 10 );
				}
&amp;nbsp;
				if (
					rfocusable.test( elem.nodeName ) ||
					rclickable.test( elem.nodeName ) &amp;amp;&amp;amp;
					elem.href
				) {
					return 0;
				}
&amp;nbsp;
				return -1;
			}
		}
	},
&amp;nbsp;
	propFix: {
		&amp;quot;for&amp;quot;: &amp;quot;htmlFor&amp;quot;,
		&amp;quot;class&amp;quot;: &amp;quot;className&amp;quot;
	}
} );
&amp;nbsp;
// Support: IE &amp;lt;=11 only
// Accessing the selectedIndex property
// forces the browser to respect setting selected
// on the option
// The getter ensures a default option is selected
// when in an optgroup
// eslint rule &amp;quot;no-unused-expressions&amp;quot; is disabled for this code
// since it considers such accessions noop
if ( !support.optSelected ) {
	jQuery.propHooks.selected = {
		get: function( elem ) {
&amp;nbsp;
			/* eslint no-unused-expressions: &amp;quot;off&amp;quot; */
&amp;nbsp;
			var parent = elem.parentNode;
			if ( parent &amp;amp;&amp;amp; parent.parentNode ) {
				parent.parentNode.selectedIndex;
			}
			return null;
		},
		set: function( elem ) {
&amp;nbsp;
			/* eslint no-unused-expressions: &amp;quot;off&amp;quot; */
&amp;nbsp;
			var parent = elem.parentNode;
			if ( parent ) {
				parent.selectedIndex;
&amp;nbsp;
				if ( parent.parentNode ) {
					parent.parentNode.selectedIndex;
				}
			}
		}
	};
}
&amp;nbsp;
jQuery.each( [
	&amp;quot;tabIndex&amp;quot;,
	&amp;quot;readOnly&amp;quot;,
	&amp;quot;maxLength&amp;quot;,
	&amp;quot;cellSpacing&amp;quot;,
	&amp;quot;cellPadding&amp;quot;,
	&amp;quot;rowSpan&amp;quot;,
	&amp;quot;colSpan&amp;quot;,
	&amp;quot;useMap&amp;quot;,
	&amp;quot;frameBorder&amp;quot;,
	&amp;quot;contentEditable&amp;quot;
], function() {
	jQuery.propFix[ this.toLowerCase() ] = this;
} );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
	// Strip and collapse whitespace according to HTML spec
	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
	function stripAndCollapse( value ) {
		var tokens = value.match( rnothtmlwhite ) || [];
		return tokens.join( &amp;quot; &amp;quot; );
	}
&amp;nbsp;
&amp;nbsp;
function getClass( elem ) {
	return elem.getAttribute &amp;amp;&amp;amp; elem.getAttribute( &amp;quot;class&amp;quot; ) || &amp;quot;&amp;quot;;
}
&amp;nbsp;
function classesToArray( value ) {
	if ( Array.isArray( value ) ) {
		return value;
	}
	if ( typeof value === &amp;quot;string&amp;quot; ) {
		return value.match( rnothtmlwhite ) || [];
	}
	return [];
}
&amp;nbsp;
jQuery.fn.extend( {
	addClass: function( value ) {
		var classNames, cur, curValue, className, i, finalValue;
&amp;nbsp;
		if ( isFunction( value ) ) {
			return this.each( function( j ) {
				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
			} );
		}
&amp;nbsp;
		classNames = classesToArray( value );
&amp;nbsp;
		if ( classNames.length ) {
			return this.each( function() {
				curValue = getClass( this );
				cur = this.nodeType === 1 &amp;amp;&amp;amp; ( &amp;quot; &amp;quot; + stripAndCollapse( curValue ) + &amp;quot; &amp;quot; );
&amp;nbsp;
				if ( cur ) {
					for ( i = 0; i &amp;lt; classNames.length; i++ ) {
						className = classNames[ i ];
						if ( cur.indexOf( &amp;quot; &amp;quot; + className + &amp;quot; &amp;quot; ) &amp;lt; 0 ) {
							cur += className + &amp;quot; &amp;quot;;
						}
					}
&amp;nbsp;
					// Only assign if different to avoid unneeded rendering.
					finalValue = stripAndCollapse( cur );
					if ( curValue !== finalValue ) {
						this.setAttribute( &amp;quot;class&amp;quot;, finalValue );
					}
				}
			} );
		}
&amp;nbsp;
		return this;
	},
&amp;nbsp;
	removeClass: function( value ) {
		var classNames, cur, curValue, className, i, finalValue;
&amp;nbsp;
		if ( isFunction( value ) ) {
			return this.each( function( j ) {
				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
			} );
		}
&amp;nbsp;
		if ( !arguments.length ) {
			return this.attr( &amp;quot;class&amp;quot;, &amp;quot;&amp;quot; );
		}
&amp;nbsp;
		classNames = classesToArray( value );
&amp;nbsp;
		if ( classNames.length ) {
			return this.each( function() {
				curValue = getClass( this );
&amp;nbsp;
				// This expression is here for better compressibility (see addClass)
				cur = this.nodeType === 1 &amp;amp;&amp;amp; ( &amp;quot; &amp;quot; + stripAndCollapse( curValue ) + &amp;quot; &amp;quot; );
&amp;nbsp;
				if ( cur ) {
					for ( i = 0; i &amp;lt; classNames.length; i++ ) {
						className = classNames[ i ];
&amp;nbsp;
						// Remove *all* instances
						while ( cur.indexOf( &amp;quot; &amp;quot; + className + &amp;quot; &amp;quot; ) &amp;gt; -1 ) {
							cur = cur.replace( &amp;quot; &amp;quot; + className + &amp;quot; &amp;quot;, &amp;quot; &amp;quot; );
						}
					}
&amp;nbsp;
					// Only assign if different to avoid unneeded rendering.
					finalValue = stripAndCollapse( cur );
					if ( curValue !== finalValue ) {
						this.setAttribute( &amp;quot;class&amp;quot;, finalValue );
					}
				}
			} );
		}
&amp;nbsp;
		return this;
	},
&amp;nbsp;
	toggleClass: function( value, stateVal ) {
		var classNames, className, i, self,
			type = typeof value,
			isValidValue = type === &amp;quot;string&amp;quot; || Array.isArray( value );
&amp;nbsp;
		if ( isFunction( value ) ) {
			return this.each( function( i ) {
				jQuery( this ).toggleClass(
					value.call( this, i, getClass( this ), stateVal ),
					stateVal
				);
			} );
		}
&amp;nbsp;
		if ( typeof stateVal === &amp;quot;boolean&amp;quot; &amp;amp;&amp;amp; isValidValue ) {
			return stateVal ? this.addClass( value ) : this.removeClass( value );
		}
&amp;nbsp;
		classNames = classesToArray( value );
&amp;nbsp;
		return this.each( function() {
			if ( isValidValue ) {
&amp;nbsp;
				// Toggle individual class names
				self = jQuery( this );
&amp;nbsp;
				for ( i = 0; i &amp;lt; classNames.length; i++ ) {
					className = classNames[ i ];
&amp;nbsp;
					// Check each className given, space separated list
					if ( self.hasClass( className ) ) {
						self.removeClass( className );
					} else {
						self.addClass( className );
					}
				}
&amp;nbsp;
			// Toggle whole class name
			} else if ( value === undefined || type === &amp;quot;boolean&amp;quot; ) {
				className = getClass( this );
				if ( className ) {
&amp;nbsp;
					// Store className if set
					dataPriv.set( this, &amp;quot;__className__&amp;quot;, className );
				}
&amp;nbsp;
				// If the element has a class name or if we&#039;re passed `false`,
				// then remove the whole classname (if there was one, the above saved it).
				// Otherwise bring back whatever was previously saved (if anything),
				// falling back to the empty string if nothing was stored.
				if ( this.setAttribute ) {
					this.setAttribute( &amp;quot;class&amp;quot;,
						className || value === false ?
							&amp;quot;&amp;quot; :
							dataPriv.get( this, &amp;quot;__className__&amp;quot; ) || &amp;quot;&amp;quot;
					);
				}
			}
		} );
	},
&amp;nbsp;
	hasClass: function( selector ) {
		var className, elem,
			i = 0;
&amp;nbsp;
		className = &amp;quot; &amp;quot; + selector + &amp;quot; &amp;quot;;
		while ( ( elem = this[ i++ ] ) ) {
			if ( elem.nodeType === 1 &amp;amp;&amp;amp;
				( &amp;quot; &amp;quot; + stripAndCollapse( getClass( elem ) ) + &amp;quot; &amp;quot; ).indexOf( className ) &amp;gt; -1 ) {
				return true;
			}
		}
&amp;nbsp;
		return false;
	}
} );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
var rreturn = /\r/g;
&amp;nbsp;
jQuery.fn.extend( {
	val: function( value ) {
		var hooks, ret, valueIsFunction,
			elem = this[ 0 ];
&amp;nbsp;
		if ( !arguments.length ) {
			if ( elem ) {
				hooks = jQuery.valHooks[ elem.type ] ||
					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
&amp;nbsp;
				if ( hooks &amp;amp;&amp;amp;
					&amp;quot;get&amp;quot; in hooks &amp;amp;&amp;amp;
					( ret = hooks.get( elem, &amp;quot;value&amp;quot; ) ) !== undefined
				) {
					return ret;
				}
&amp;nbsp;
				ret = elem.value;
&amp;nbsp;
				// Handle most common string cases
				if ( typeof ret === &amp;quot;string&amp;quot; ) {
					return ret.replace( rreturn, &amp;quot;&amp;quot; );
				}
&amp;nbsp;
				// Handle cases where value is null/undef or number
				return ret == null ? &amp;quot;&amp;quot; : ret;
			}
&amp;nbsp;
			return;
		}
&amp;nbsp;
		valueIsFunction = isFunction( value );
&amp;nbsp;
		return this.each( function( i ) {
			var val;
&amp;nbsp;
			if ( this.nodeType !== 1 ) {
				return;
			}
&amp;nbsp;
			if ( valueIsFunction ) {
				val = value.call( this, i, jQuery( this ).val() );
			} else {
				val = value;
			}
&amp;nbsp;
			// Treat null/undefined as &amp;quot;&amp;quot;; convert numbers to string
			if ( val == null ) {
				val = &amp;quot;&amp;quot;;
&amp;nbsp;
			} else if ( typeof val === &amp;quot;number&amp;quot; ) {
				val += &amp;quot;&amp;quot;;
&amp;nbsp;
			} else if ( Array.isArray( val ) ) {
				val = jQuery.map( val, function( value ) {
					return value == null ? &amp;quot;&amp;quot; : value + &amp;quot;&amp;quot;;
				} );
			}
&amp;nbsp;
			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
&amp;nbsp;
			// If set returns undefined, fall back to normal setting
			if ( !hooks || !( &amp;quot;set&amp;quot; in hooks ) || hooks.set( this, val, &amp;quot;value&amp;quot; ) === undefined ) {
				this.value = val;
			}
		} );
	}
} );
&amp;nbsp;
jQuery.extend( {
	valHooks: {
		option: {
			get: function( elem ) {
&amp;nbsp;
				var val = jQuery.find.attr( elem, &amp;quot;value&amp;quot; );
				return val != null ?
					val :
&amp;nbsp;
					// Support: IE &amp;lt;=10 - 11 only
					// option.text throws exceptions (trac-14686, trac-14858)
					// Strip and collapse whitespace
					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
					stripAndCollapse( jQuery.text( elem ) );
			}
		},
		select: {
			get: function( elem ) {
				var value, option, i,
					options = elem.options,
					index = elem.selectedIndex,
					one = elem.type === &amp;quot;select-one&amp;quot;,
					values = one ? null : [],
					max = one ? index + 1 : options.length;
&amp;nbsp;
				if ( index &amp;lt; 0 ) {
					i = max;
&amp;nbsp;
				} else {
					i = one ? index : 0;
				}
&amp;nbsp;
				// Loop through all the selected options
				for ( ; i &amp;lt; max; i++ ) {
					option = options[ i ];
&amp;nbsp;
					// Support: IE &amp;lt;=9 only
					// IE8-9 doesn&#039;t update selected after form reset (trac-2551)
					if ( ( option.selected || i === index ) &amp;amp;&amp;amp;
&amp;nbsp;
							// Don&#039;t return options that are disabled or in a disabled optgroup
							!option.disabled &amp;amp;&amp;amp;
							( !option.parentNode.disabled ||
								!nodeName( option.parentNode, &amp;quot;optgroup&amp;quot; ) ) ) {
&amp;nbsp;
						// Get the specific value for the option
						value = jQuery( option ).val();
&amp;nbsp;
						// We don&#039;t need an array for one selects
						if ( one ) {
							return value;
						}
&amp;nbsp;
						// Multi-Selects return an array
						values.push( value );
					}
				}
&amp;nbsp;
				return values;
			},
&amp;nbsp;
			set: function( elem, value ) {
				var optionSet, option,
					options = elem.options,
					values = jQuery.makeArray( value ),
					i = options.length;
&amp;nbsp;
				while ( i-- ) {
					option = options[ i ];
&amp;nbsp;
					/* eslint-disable no-cond-assign */
&amp;nbsp;
					if ( option.selected =
						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) &amp;gt; -1
					) {
						optionSet = true;
					}
&amp;nbsp;
					/* eslint-enable no-cond-assign */
				}
&amp;nbsp;
				// Force browsers to behave consistently when non-matching value is set
				if ( !optionSet ) {
					elem.selectedIndex = -1;
				}
				return values;
			}
		}
	}
} );
&amp;nbsp;
// Radios and checkboxes getter/setter
jQuery.each( [ &amp;quot;radio&amp;quot;, &amp;quot;checkbox&amp;quot; ], function() {
	jQuery.valHooks[ this ] = {
		set: function( elem, value ) {
			if ( Array.isArray( value ) ) {
				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) &amp;gt; -1 );
			}
		}
	};
	if ( !support.checkOn ) {
		jQuery.valHooks[ this ].get = function( elem ) {
			return elem.getAttribute( &amp;quot;value&amp;quot; ) === null ? &amp;quot;on&amp;quot; : elem.value;
		};
	}
} );
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// Return jQuery for attributes-only inclusion
&amp;nbsp;
&amp;nbsp;
// Cross-browser xml parsing
jQuery.parseXML = function( data ) {
	var xml, parserErrorElem;
	if ( !data || typeof data !== &amp;quot;string&amp;quot; ) {
		return null;
	}
&amp;nbsp;
	// Support: IE 9 - 11 only
	// IE throws on parseFromString with invalid input.
	try {
		xml = ( new window.DOMParser() ).parseFromString( data, &amp;quot;text/xml&amp;quot; );
	} catch ( e ) {}
&amp;nbsp;
	parserErrorElem = xml &amp;amp;&amp;amp; xml.getElementsByTagName( &amp;quot;parsererror&amp;quot; )[ 0 ];
	if ( !xml || parserErrorElem ) {
		jQuery.error( &amp;quot;Invalid XML: &amp;quot; + (
			parserErrorElem ?
				jQuery.map( parserErrorElem.childNodes, function( el ) {
					return el.textContent;
				} ).join( &amp;quot;\n&amp;quot; ) :
				data
		) );
	}
	return xml;
};
&amp;nbsp;
&amp;nbsp;
var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
	stopPropagationCallback = function( e ) {
		e.stopPropagation();
	};
&amp;nbsp;
jQuery.extend( jQuery.event, {
&amp;nbsp;
	trigger: function( event, data, elem, onlyHandlers ) {
&amp;nbsp;
		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
			eventPath = [ elem || document ],
			type = hasOwn.call( event, &amp;quot;type&amp;quot; ) ? event.type : event,
			namespaces = hasOwn.call( event, &amp;quot;namespace&amp;quot; ) ? event.namespace.split( &amp;quot;.&amp;quot; ) : [];
&amp;nbsp;
		cur = lastElement = tmp = elem = elem || document;
&amp;nbsp;
		// Don&#039;t do events on text and comment nodes
		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
			return;
		}
&amp;nbsp;
		// focus/blur morphs to focusin/out; ensure we&#039;re not firing them right now
		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
			return;
		}
&amp;nbsp;
		if ( type.indexOf( &amp;quot;.&amp;quot; ) &amp;gt; -1 ) {
&amp;nbsp;
			// Namespaced trigger; create a regexp to match event type in handle()
			namespaces = type.split( &amp;quot;.&amp;quot; );
			type = namespaces.shift();
			namespaces.sort();
		}
		ontype = type.indexOf( &amp;quot;:&amp;quot; ) &amp;lt; 0 &amp;amp;&amp;amp; &amp;quot;on&amp;quot; + type;
&amp;nbsp;
		// Caller can pass in a jQuery.Event object, Object, or just an event type string
		event = event[ jQuery.expando ] ?
			event :
			new jQuery.Event( type, typeof event === &amp;quot;object&amp;quot; &amp;amp;&amp;amp; event );
&amp;nbsp;
		// Trigger bitmask: &amp;amp; 1 for native handlers; &amp;amp; 2 for jQuery (always true)
		event.isTrigger = onlyHandlers ? 2 : 3;
		event.namespace = namespaces.join( &amp;quot;.&amp;quot; );
		event.rnamespace = event.namespace ?
			new RegExp( &amp;quot;(^|\\.)&amp;quot; + namespaces.join( &amp;quot;\\.(?:.*\\.|)&amp;quot; ) + &amp;quot;(\\.|$)&amp;quot; ) :
			null;
&amp;nbsp;
		// Clean up the event in case it is being reused
		event.result = undefined;
		if ( !event.target ) {
			event.target = elem;
		}
&amp;nbsp;
		// Clone any incoming data and prepend the event, creating the handler arg list
		data = data == null ?
			[ event ] :
			jQuery.makeArray( data, [ event ] );
&amp;nbsp;
		// Allow special events to draw outside the lines
		special = jQuery.event.special[ type ] || {};
		if ( !onlyHandlers &amp;amp;&amp;amp; special.trigger &amp;amp;&amp;amp; special.trigger.apply( elem, data ) === false ) {
			return;
		}
&amp;nbsp;
		// Determine event propagation path in advance, per W3C events spec (trac-9951)
		// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)
		if ( !onlyHandlers &amp;amp;&amp;amp; !special.noBubble &amp;amp;&amp;amp; !isWindow( elem ) ) {
&amp;nbsp;
			bubbleType = special.delegateType || type;
			if ( !rfocusMorph.test( bubbleType + type ) ) {
				cur = cur.parentNode;
			}
			for ( ; cur; cur = cur.parentNode ) {
				eventPath.push( cur );
				tmp = cur;
			}
&amp;nbsp;
			// Only add window if we got to document (e.g., not plain obj or detached DOM)
			if ( tmp === ( elem.ownerDocument || document ) ) {
				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
			}
		}
&amp;nbsp;
		// Fire handlers on the event path
		i = 0;
		while ( ( cur = eventPath[ i++ ] ) &amp;amp;&amp;amp; !event.isPropagationStopped() ) {
			lastElement = cur;
			event.type = i &amp;gt; 1 ?
				bubbleType :
				special.bindType || type;
&amp;nbsp;
			// jQuery handler
			handle = ( dataPriv.get( cur, &amp;quot;events&amp;quot; ) || Object.create( null ) )[ event.type ] &amp;amp;&amp;amp;
				dataPriv.get( cur, &amp;quot;handle&amp;quot; );
			if ( handle ) {
				handle.apply( cur, data );
			}
&amp;nbsp;
			// Native handler
			handle = ontype &amp;amp;&amp;amp; cur[ ontype ];
			if ( handle &amp;amp;&amp;amp; handle.apply &amp;amp;&amp;amp; acceptData( cur ) ) {
				event.result = handle.apply( cur, data );
				if ( event.result === false ) {
					event.preventDefault();
				}
			}
		}
		event.type = type;
&amp;nbsp;
		// If nobody prevented the default action, do it now
		if ( !onlyHandlers &amp;amp;&amp;amp; !event.isDefaultPrevented() ) {
&amp;nbsp;
			if ( ( !special._default ||
				special._default.apply( eventPath.pop(), data ) === false ) &amp;amp;&amp;amp;
				acceptData( elem ) ) {
&amp;nbsp;
				// Call a native DOM method on the target with the same name as the event.
				// Don&#039;t do default actions on window, that&#039;s where global variables be (trac-6170)
				if ( ontype &amp;amp;&amp;amp; isFunction( elem[ type ] ) &amp;amp;&amp;amp; !isWindow( elem ) ) {
&amp;nbsp;
					// Don&#039;t re-trigger an onFOO event when we call its FOO() method
					tmp = elem[ ontype ];
&amp;nbsp;
					if ( tmp ) {
						elem[ ontype ] = null;
					}
&amp;nbsp;
					// Prevent re-triggering of the same event, since we already bubbled it above
					jQuery.event.triggered = type;
&amp;nbsp;
					if ( event.isPropagationStopped() ) {
						lastElement.addEventListener( type, stopPropagationCallback );
					}
&amp;nbsp;
					elem[ type ]();
&amp;nbsp;
					if ( event.isPropagationStopped() ) {
						lastElement.removeEventListener( type, stopPropagationCallback );
					}
&amp;nbsp;
					jQuery.event.triggered = undefined;
&amp;nbsp;
					if ( tmp ) {
						elem[ ontype ] = tmp;
					}
				}
			}
		}
&amp;nbsp;
		return event.result;
	},
&amp;nbsp;
	// Piggyback on a donor event to simulate a different one
	// Used only for `focus(in | out)` events
	simulate: function( type, elem, event ) {
		var e = jQuery.extend(
			new jQuery.Event(),
			event,
			{
				type: type,
				isSimulated: true
			}
		);
&amp;nbsp;
		jQuery.event.trigger( e, null, elem );
	}
&amp;nbsp;
} );
&amp;nbsp;
jQuery.fn.extend( {
&amp;nbsp;
	trigger: function( type, data ) {
		return this.each( function() {
			jQuery.event.trigger( type, data, this );
		} );
	},
	triggerHandler: function( type, data ) {
		var elem = this[ 0 ];
		if ( elem ) {
			return jQuery.event.trigger( type, data, elem, true );
		}
	}
} );
&amp;nbsp;
&amp;nbsp;
var
	rbracket = /\[\]$/,
	rCRLF = /\r?\n/g,
	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
	rsubmittable = /^(?:input|select|textarea|keygen)/i;
&amp;nbsp;
function buildParams( prefix, obj, traditional, add ) {
	var name;
&amp;nbsp;
	if ( Array.isArray( obj ) ) {
&amp;nbsp;
		// Serialize array item.
		jQuery.each( obj, function( i, v ) {
			if ( traditional || rbracket.test( prefix ) ) {
&amp;nbsp;
				// Treat each array item as a scalar.
				add( prefix, v );
&amp;nbsp;
			} else {
&amp;nbsp;
				// Item is non-scalar (array or object), encode its numeric index.
				buildParams(
					prefix + &amp;quot;[&amp;quot; + ( typeof v === &amp;quot;object&amp;quot; &amp;amp;&amp;amp; v != null ? i : &amp;quot;&amp;quot; ) + &amp;quot;]&amp;quot;,
					v,
					traditional,
					add
				);
			}
		} );
&amp;nbsp;
	} else if ( !traditional &amp;amp;&amp;amp; toType( obj ) === &amp;quot;object&amp;quot; ) {
&amp;nbsp;
		// Serialize object item.
		for ( name in obj ) {
			buildParams( prefix + &amp;quot;[&amp;quot; + name + &amp;quot;]&amp;quot;, obj[ name ], traditional, add );
		}
&amp;nbsp;
	} else {
&amp;nbsp;
		// Serialize scalar item.
		add( prefix, obj );
	}
}
&amp;nbsp;
// Serialize an array of form elements or a set of
// key/values into a query string
jQuery.param = function( a, traditional ) {
	var prefix,
		s = [],
		add = function( key, valueOrFunction ) {
&amp;nbsp;
			// If value is a function, invoke it and use its return value
			var value = isFunction( valueOrFunction ) ?
				valueOrFunction() :
				valueOrFunction;
&amp;nbsp;
			s[ s.length ] = encodeURIComponent( key ) + &amp;quot;=&amp;quot; +
				encodeURIComponent( value == null ? &amp;quot;&amp;quot; : value );
		};
&amp;nbsp;
	if ( a == null ) {
		return &amp;quot;&amp;quot;;
	}
&amp;nbsp;
	// If an array was passed in, assume that it is an array of form elements.
	if ( Array.isArray( a ) || ( a.jquery &amp;amp;&amp;amp; !jQuery.isPlainObject( a ) ) ) {
&amp;nbsp;
		// Serialize the form elements
		jQuery.each( a, function() {
			add( this.name, this.value );
		} );
&amp;nbsp;
	} else {
&amp;nbsp;
		// If traditional, encode the &amp;quot;old&amp;quot; way (the way 1.3.2 or older
		// did it), otherwise encode params recursively.
		for ( prefix in a ) {
			buildParams( prefix, a[ prefix ], traditional, add );
		}
	}
&amp;nbsp;
	// Return the resulting serialization
	return s.join( &amp;quot;&amp;amp;&amp;quot; );
};
&amp;nbsp;
jQuery.fn.extend( {
	serialize: function() {
		return jQuery.param( this.serializeArray() );
	},
	serializeArray: function() {
		return this.map( function() {
&amp;nbsp;
			// Can add propHook for &amp;quot;elements&amp;quot; to filter or add form elements
			var elements = jQuery.prop( this, &amp;quot;elements&amp;quot; );
			return elements ? jQuery.makeArray( elements ) : this;
		} ).filter( function() {
			var type = this.type;
&amp;nbsp;
			// Use .is( &amp;quot;:disabled&amp;quot; ) so that fieldset[disabled] works
			return this.name &amp;amp;&amp;amp; !jQuery( this ).is( &amp;quot;:disabled&amp;quot; ) &amp;amp;&amp;amp;
				rsubmittable.test( this.nodeName ) &amp;amp;&amp;amp; !rsubmitterTypes.test( type ) &amp;amp;&amp;amp;
				( this.checked || !rcheckableType.test( type ) );
		} ).map( function( _i, elem ) {
			var val = jQuery( this ).val();
&amp;nbsp;
			if ( val == null ) {
				return null;
			}
&amp;nbsp;
			if ( Array.isArray( val ) ) {
				return jQuery.map( val, function( val ) {
					return { name: elem.name, value: val.replace( rCRLF, &amp;quot;\r\n&amp;quot; ) };
				} );
			}
&amp;nbsp;
			return { name: elem.name, value: val.replace( rCRLF, &amp;quot;\r\n&amp;quot; ) };
		} ).get();
	}
} );
&amp;nbsp;
&amp;nbsp;
jQuery.fn.extend( {
	wrapAll: function( html ) {
		var wrap;
&amp;nbsp;
		if ( this[ 0 ] ) {
			if ( isFunction( html ) ) {
				html = html.call( this[ 0 ] );
			}
&amp;nbsp;
			// The elements to wrap the target around
			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
&amp;nbsp;
			if ( this[ 0 ].parentNode ) {
				wrap.insertBefore( this[ 0 ] );
			}
&amp;nbsp;
			wrap.map( function() {
				var elem = this;
&amp;nbsp;
				while ( elem.firstElementChild ) {
					elem = elem.firstElementChild;
				}
&amp;nbsp;
				return elem;
			} ).append( this );
		}
&amp;nbsp;
		return this;
	},
&amp;nbsp;
	wrapInner: function( html ) {
		if ( isFunction( html ) ) {
			return this.each( function( i ) {
				jQuery( this ).wrapInner( html.call( this, i ) );
			} );
		}
&amp;nbsp;
		return this.each( function() {
			var self = jQuery( this ),
				contents = self.contents();
&amp;nbsp;
			if ( contents.length ) {
				contents.wrapAll( html );
&amp;nbsp;
			} else {
				self.append( html );
			}
		} );
	},
&amp;nbsp;
	wrap: function( html ) {
		var htmlIsFunction = isFunction( html );
&amp;nbsp;
		return this.each( function( i ) {
			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
		} );
	},
&amp;nbsp;
	unwrap: function( selector ) {
		this.parent( selector ).not( &amp;quot;body&amp;quot; ).each( function() {
			jQuery( this ).replaceWith( this.childNodes );
		} );
		return this;
	}
} );
&amp;nbsp;
&amp;nbsp;
jQuery.expr.pseudos.hidden = function( elem ) {
	return !jQuery.expr.pseudos.visible( elem );
};
jQuery.expr.pseudos.visible = function( elem ) {
	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// Support: Safari 8 only
// In Safari 8 documents created via document.implementation.createHTMLDocument
// collapse sibling forms: the second one becomes a child of the first one.
// Because of that, this security measure has to be disabled in Safari 8.
// https://bugs.webkit.org/show_bug.cgi?id=137337
support.createHTMLDocument = ( function() {
	var body = document.implementation.createHTMLDocument( &amp;quot;&amp;quot; ).body;
	body.innerHTML = &amp;quot;&amp;lt;form&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;form&amp;gt;&amp;lt;/form&amp;gt;&amp;quot;;
	return body.childNodes.length === 2;
} )();
&amp;nbsp;
&amp;nbsp;
// Argument &amp;quot;data&amp;quot; should be string of html
// context (optional): If specified, the fragment will be created in this context,
// defaults to document
// keepScripts (optional): If true, will include scripts passed in the html string
jQuery.parseHTML = function( data, context, keepScripts ) {
	if ( typeof data !== &amp;quot;string&amp;quot; ) {
		return [];
	}
	if ( typeof context === &amp;quot;boolean&amp;quot; ) {
		keepScripts = context;
		context = false;
	}
&amp;nbsp;
	var base, parsed, scripts;
&amp;nbsp;
	if ( !context ) {
&amp;nbsp;
		// Stop scripts or inline event handlers from being executed immediately
		// by using document.implementation
		if ( support.createHTMLDocument ) {
			context = document.implementation.createHTMLDocument( &amp;quot;&amp;quot; );
&amp;nbsp;
			// Set the base href for the created document
			// so any parsed elements with URLs
			// are based on the document&#039;s URL (gh-2965)
			base = context.createElement( &amp;quot;base&amp;quot; );
			base.href = document.location.href;
			context.head.appendChild( base );
		} else {
			context = document;
		}
	}
&amp;nbsp;
	parsed = rsingleTag.exec( data );
	scripts = !keepScripts &amp;amp;&amp;amp; [];
&amp;nbsp;
	// Single tag
	if ( parsed ) {
		return [ context.createElement( parsed[ 1 ] ) ];
	}
&amp;nbsp;
	parsed = buildFragment( [ data ], context, scripts );
&amp;nbsp;
	if ( scripts &amp;amp;&amp;amp; scripts.length ) {
		jQuery( scripts ).remove();
	}
&amp;nbsp;
	return jQuery.merge( [], parsed.childNodes );
};
&amp;nbsp;
&amp;nbsp;
jQuery.offset = {
	setOffset: function( elem, options, i ) {
		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
			position = jQuery.css( elem, &amp;quot;position&amp;quot; ),
			curElem = jQuery( elem ),
			props = {};
&amp;nbsp;
		// Set position first, in-case top/left are set even on static elem
		if ( position === &amp;quot;static&amp;quot; ) {
			elem.style.position = &amp;quot;relative&amp;quot;;
		}
&amp;nbsp;
		curOffset = curElem.offset();
		curCSSTop = jQuery.css( elem, &amp;quot;top&amp;quot; );
		curCSSLeft = jQuery.css( elem, &amp;quot;left&amp;quot; );
		calculatePosition = ( position === &amp;quot;absolute&amp;quot; || position === &amp;quot;fixed&amp;quot; ) &amp;amp;&amp;amp;
			( curCSSTop + curCSSLeft ).indexOf( &amp;quot;auto&amp;quot; ) &amp;gt; -1;
&amp;nbsp;
		// Need to be able to calculate position if either
		// top or left is auto and position is either absolute or fixed
		if ( calculatePosition ) {
			curPosition = curElem.position();
			curTop = curPosition.top;
			curLeft = curPosition.left;
&amp;nbsp;
		} else {
			curTop = parseFloat( curCSSTop ) || 0;
			curLeft = parseFloat( curCSSLeft ) || 0;
		}
&amp;nbsp;
		if ( isFunction( options ) ) {
&amp;nbsp;
			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
		}
&amp;nbsp;
		if ( options.top != null ) {
			props.top = ( options.top - curOffset.top ) + curTop;
		}
		if ( options.left != null ) {
			props.left = ( options.left - curOffset.left ) + curLeft;
		}
&amp;nbsp;
		if ( &amp;quot;using&amp;quot; in options ) {
			options.using.call( elem, props );
&amp;nbsp;
		} else {
			curElem.css( props );
		}
	}
};
&amp;nbsp;
jQuery.fn.extend( {
&amp;nbsp;
	// offset() relates an element&#039;s border box to the document origin
	offset: function( options ) {
&amp;nbsp;
		// Preserve chaining for setter
		if ( arguments.length ) {
			return options === undefined ?
				this :
				this.each( function( i ) {
					jQuery.offset.setOffset( this, options, i );
				} );
		}
&amp;nbsp;
		var rect, win,
			elem = this[ 0 ];
&amp;nbsp;
		if ( !elem ) {
			return;
		}
&amp;nbsp;
		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
		// Support: IE &amp;lt;=11 only
		// Running getBoundingClientRect on a
		// disconnected node in IE throws an error
		if ( !elem.getClientRects().length ) {
			return { top: 0, left: 0 };
		}
&amp;nbsp;
		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
		rect = elem.getBoundingClientRect();
		win = elem.ownerDocument.defaultView;
		return {
			top: rect.top + win.pageYOffset,
			left: rect.left + win.pageXOffset
		};
	},
&amp;nbsp;
	// position() relates an element&#039;s margin box to its offset parent&#039;s padding box
	// This corresponds to the behavior of CSS absolute positioning
	position: function() {
		if ( !this[ 0 ] ) {
			return;
		}
&amp;nbsp;
		var offsetParent, offset, doc,
			elem = this[ 0 ],
			parentOffset = { top: 0, left: 0 };
&amp;nbsp;
		// position:fixed elements are offset from the viewport, which itself always has zero offset
		if ( jQuery.css( elem, &amp;quot;position&amp;quot; ) === &amp;quot;fixed&amp;quot; ) {
&amp;nbsp;
			// Assume position:fixed implies availability of getBoundingClientRect
			offset = elem.getBoundingClientRect();
&amp;nbsp;
		} else {
			offset = this.offset();
&amp;nbsp;
			// Account for the *real* offset parent, which can be the document or its root element
			// when a statically positioned element is identified
			doc = elem.ownerDocument;
			offsetParent = elem.offsetParent || doc.documentElement;
			while ( offsetParent &amp;amp;&amp;amp;
				( offsetParent === doc.body || offsetParent === doc.documentElement ) &amp;amp;&amp;amp;
				jQuery.css( offsetParent, &amp;quot;position&amp;quot; ) === &amp;quot;static&amp;quot; ) {
&amp;nbsp;
				offsetParent = offsetParent.parentNode;
			}
			if ( offsetParent &amp;amp;&amp;amp; offsetParent !== elem &amp;amp;&amp;amp; offsetParent.nodeType === 1 ) {
&amp;nbsp;
				// Incorporate borders into its offset, since they are outside its content origin
				parentOffset = jQuery( offsetParent ).offset();
				parentOffset.top += jQuery.css( offsetParent, &amp;quot;borderTopWidth&amp;quot;, true );
				parentOffset.left += jQuery.css( offsetParent, &amp;quot;borderLeftWidth&amp;quot;, true );
			}
		}
&amp;nbsp;
		// Subtract parent offsets and element margins
		return {
			top: offset.top - parentOffset.top - jQuery.css( elem, &amp;quot;marginTop&amp;quot;, true ),
			left: offset.left - parentOffset.left - jQuery.css( elem, &amp;quot;marginLeft&amp;quot;, true )
		};
	},
&amp;nbsp;
	// This method will return documentElement in the following cases:
	// 1) For the element inside the iframe without offsetParent, this method will return
	//    documentElement of the parent window
	// 2) For the hidden or detached element
	// 3) For body or html element, i.e. in case of the html node - it will return itself
	//
	// but those exceptions were never presented as a real life use-cases
	// and might be considered as more preferable results.
	//
	// This logic, however, is not guaranteed and can change at any point in the future
	offsetParent: function() {
		return this.map( function() {
			var offsetParent = this.offsetParent;
&amp;nbsp;
			while ( offsetParent &amp;amp;&amp;amp; jQuery.css( offsetParent, &amp;quot;position&amp;quot; ) === &amp;quot;static&amp;quot; ) {
				offsetParent = offsetParent.offsetParent;
			}
&amp;nbsp;
			return offsetParent || documentElement;
		} );
	}
} );
&amp;nbsp;
// Create scrollLeft and scrollTop methods
jQuery.each( { scrollLeft: &amp;quot;pageXOffset&amp;quot;, scrollTop: &amp;quot;pageYOffset&amp;quot; }, function( method, prop ) {
	var top = &amp;quot;pageYOffset&amp;quot; === prop;
&amp;nbsp;
	jQuery.fn[ method ] = function( val ) {
		return access( this, function( elem, method, val ) {
&amp;nbsp;
			// Coalesce documents and windows
			var win;
			if ( isWindow( elem ) ) {
				win = elem;
			} else if ( elem.nodeType === 9 ) {
				win = elem.defaultView;
			}
&amp;nbsp;
			if ( val === undefined ) {
				return win ? win[ prop ] : elem[ method ];
			}
&amp;nbsp;
			if ( win ) {
				win.scrollTo(
					!top ? val : win.pageXOffset,
					top ? val : win.pageYOffset
				);
&amp;nbsp;
			} else {
				elem[ method ] = val;
			}
		}, method, val, arguments.length );
	};
} );
&amp;nbsp;
// Support: Safari &amp;lt;=7 - 9.1, Chrome &amp;lt;=37 - 49
// Add the top/left cssHooks using jQuery.fn.position
// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
// getComputedStyle returns percent when specified for top/left/bottom/right;
// rather than make the css module depend on the offset module, just check for it here
jQuery.each( [ &amp;quot;top&amp;quot;, &amp;quot;left&amp;quot; ], function( _i, prop ) {
	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
		function( elem, computed ) {
			if ( computed ) {
				computed = curCSS( elem, prop );
&amp;nbsp;
				// If curCSS returns percentage, fallback to offset
				return rnumnonpx.test( computed ) ?
					jQuery( elem ).position()[ prop ] + &amp;quot;px&amp;quot; :
					computed;
			}
		}
	);
} );
&amp;nbsp;
&amp;nbsp;
// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
jQuery.each( { Height: &amp;quot;height&amp;quot;, Width: &amp;quot;width&amp;quot; }, function( name, type ) {
	jQuery.each( {
		padding: &amp;quot;inner&amp;quot; + name,
		content: type,
		&amp;quot;&amp;quot;: &amp;quot;outer&amp;quot; + name
	}, function( defaultExtra, funcName ) {
&amp;nbsp;
		// Margin is only for outerHeight, outerWidth
		jQuery.fn[ funcName ] = function( margin, value ) {
			var chainable = arguments.length &amp;amp;&amp;amp; ( defaultExtra || typeof margin !== &amp;quot;boolean&amp;quot; ),
				extra = defaultExtra || ( margin === true || value === true ? &amp;quot;margin&amp;quot; : &amp;quot;border&amp;quot; );
&amp;nbsp;
			return access( this, function( elem, type, value ) {
				var doc;
&amp;nbsp;
				if ( isWindow( elem ) ) {
&amp;nbsp;
					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
					return funcName.indexOf( &amp;quot;outer&amp;quot; ) === 0 ?
						elem[ &amp;quot;inner&amp;quot; + name ] :
						elem.document.documentElement[ &amp;quot;client&amp;quot; + name ];
				}
&amp;nbsp;
				// Get document width or height
				if ( elem.nodeType === 9 ) {
					doc = elem.documentElement;
&amp;nbsp;
					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
					// whichever is greatest
					return Math.max(
						elem.body[ &amp;quot;scroll&amp;quot; + name ], doc[ &amp;quot;scroll&amp;quot; + name ],
						elem.body[ &amp;quot;offset&amp;quot; + name ], doc[ &amp;quot;offset&amp;quot; + name ],
						doc[ &amp;quot;client&amp;quot; + name ]
					);
				}
&amp;nbsp;
				return value === undefined ?
&amp;nbsp;
					// Get width or height on the element, requesting but not forcing parseFloat
					jQuery.css( elem, type, extra ) :
&amp;nbsp;
					// Set width or height on the element
					jQuery.style( elem, type, value, extra );
			}, type, chainable ? margin : undefined, chainable );
		};
	} );
} );
&amp;nbsp;
&amp;nbsp;
jQuery.fn.extend( {
&amp;nbsp;
	bind: function( types, data, fn ) {
		return this.on( types, null, data, fn );
	},
	unbind: function( types, fn ) {
		return this.off( types, null, fn );
	},
&amp;nbsp;
	delegate: function( selector, types, data, fn ) {
		return this.on( types, selector, data, fn );
	},
	undelegate: function( selector, types, fn ) {
&amp;nbsp;
		// ( namespace ) or ( selector, types [, fn] )
		return arguments.length === 1 ?
			this.off( selector, &amp;quot;**&amp;quot; ) :
			this.off( types, selector || &amp;quot;**&amp;quot;, fn );
	},
&amp;nbsp;
	hover: function( fnOver, fnOut ) {
		return this
			.on( &amp;quot;mouseenter&amp;quot;, fnOver )
			.on( &amp;quot;mouseleave&amp;quot;, fnOut || fnOver );
	}
} );
&amp;nbsp;
jQuery.each(
	( &amp;quot;blur focus focusin focusout resize scroll click dblclick &amp;quot; +
	&amp;quot;mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave &amp;quot; +
	&amp;quot;change select submit keydown keypress keyup contextmenu&amp;quot; ).split( &amp;quot; &amp;quot; ),
	function( _i, name ) {
&amp;nbsp;
		// Handle event binding
		jQuery.fn[ name ] = function( data, fn ) {
			return arguments.length &amp;gt; 0 ?
				this.on( name, null, data, fn ) :
				this.trigger( name );
		};
	}
);
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// Support: Android &amp;lt;=4.0 only
// Make sure we trim BOM and NBSP
// Require that the &amp;quot;whitespace run&amp;quot; starts from a non-whitespace
// to avoid O(N^2) behavior when the engine would try matching &amp;quot;\s+$&amp;quot; at each space position.
var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
&amp;nbsp;
// Bind a function to a context, optionally partially applying any
// arguments.
// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
// However, it is not slated for removal any time soon
jQuery.proxy = function( fn, context ) {
	var tmp, args, proxy;
&amp;nbsp;
	if ( typeof context === &amp;quot;string&amp;quot; ) {
		tmp = fn[ context ];
		context = fn;
		fn = tmp;
	}
&amp;nbsp;
	// Quick check to determine if target is callable, in the spec
	// this throws a TypeError, but we will just return undefined.
	if ( !isFunction( fn ) ) {
		return undefined;
	}
&amp;nbsp;
	// Simulated bind
	args = slice.call( arguments, 2 );
	proxy = function() {
		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
	};
&amp;nbsp;
	// Set the guid of unique handler to the same of original handler, so it can be removed
	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
&amp;nbsp;
	return proxy;
};
&amp;nbsp;
jQuery.holdReady = function( hold ) {
	if ( hold ) {
		jQuery.readyWait++;
	} else {
		jQuery.ready( true );
	}
};
jQuery.isArray = Array.isArray;
jQuery.parseJSON = JSON.parse;
jQuery.nodeName = nodeName;
jQuery.isFunction = isFunction;
jQuery.isWindow = isWindow;
jQuery.camelCase = camelCase;
jQuery.type = toType;
&amp;nbsp;
jQuery.now = Date.now;
&amp;nbsp;
jQuery.isNumeric = function( obj ) {
&amp;nbsp;
	// As of jQuery 3.0, isNumeric is limited to
	// strings and numbers (primitives or objects)
	// that can be coerced to finite numbers (gh-2662)
	var type = jQuery.type( obj );
	return ( type === &amp;quot;number&amp;quot; || type === &amp;quot;string&amp;quot; ) &amp;amp;&amp;amp;
&amp;nbsp;
		// parseFloat NaNs numeric-cast false positives (&amp;quot;&amp;quot;)
		// ...but misinterprets leading-number strings, particularly hex literals (&amp;quot;0x...&amp;quot;)
		// subtraction forces infinities to NaN
		!isNaN( obj - parseFloat( obj ) );
};
&amp;nbsp;
jQuery.trim = function( text ) {
	return text == null ?
		&amp;quot;&amp;quot; :
		( text + &amp;quot;&amp;quot; ).replace( rtrim, &amp;quot;$1&amp;quot; );
};
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
// Register as a named AMD module, since jQuery can be concatenated with other
// files that may use define, but not via a proper concatenation script that
// understands anonymous AMD modules. A named AMD is safest and most robust
// way to register. Lowercase jquery is used because AMD module names are
// derived from file names, and jQuery is normally delivered in a lowercase
// file name. Do this after creating the global so that if an AMD module wants
// to call noConflict to hide this version of jQuery, it will work.
&amp;nbsp;
// Note that for maximum portability, libraries that are not jQuery should
// declare themselves as anonymous modules, and avoid setting a global if an
// AMD loader is present. jQuery is a special case. For more information, see
// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
&amp;nbsp;
if ( typeof define === &amp;quot;function&amp;quot; &amp;amp;&amp;amp; define.amd ) {
	define( &amp;quot;jquery&amp;quot;, [], function() {
		return jQuery;
	} );
}
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
var
&amp;nbsp;
	// Map over jQuery in case of overwrite
	_jQuery = window.jQuery,
&amp;nbsp;
	// Map over the $ in case of overwrite
	_$ = window.$;
&amp;nbsp;
jQuery.noConflict = function( deep ) {
	if ( window.$ === jQuery ) {
		window.$ = _$;
	}
&amp;nbsp;
	if ( deep &amp;amp;&amp;amp; window.jQuery === jQuery ) {
		window.jQuery = _jQuery;
	}
&amp;nbsp;
	return jQuery;
};
&amp;nbsp;
// Expose jQuery and $ identifiers, even in AMD
// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)
// and CommonJS for browser emulators (trac-13566)
if ( typeof noGlobal === &amp;quot;undefined&amp;quot; ) {
	window.jQuery = window.$ = jQuery;
}
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
return jQuery;
} );&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sat, 10 Jan 2026 11:08:19 +0000</pubDate>
        </item>
        <item>
            <title>jquery-3.7.1.slim.min.js</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=software:development:web:docs:web:javascript:javascript:jquery:jquery-3.7.1.slim.min.js&amp;rev=1768043166</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;jquery-371slimminjs&quot;&gt;jquery-3.7.1.slim.min.js&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=software:development:web:docs:web:javascript:javascript:jquery:jquery-3.7.1.slim.min.js&amp;amp;codeblock=0&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_js&quot;&gt;jquery-3.7.1.slim.min.js&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code js&quot;&gt;/*! jQuery v3.7.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/animatedSelector,-effects/Tween | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){&amp;quot;use strict&amp;quot;;&amp;quot;object&amp;quot;==typeof module&amp;amp;&amp;amp;&amp;quot;object&amp;quot;==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error(&amp;quot;jQuery requires a window with a document&amp;quot;);return t(e)}:t(e)}(&amp;quot;undefined&amp;quot;!=typeof window?window:this,function(ie,e){&amp;quot;use strict&amp;quot;;var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return&amp;quot;function&amp;quot;==typeof e&amp;amp;&amp;amp;&amp;quot;number&amp;quot;!=typeof e.nodeType&amp;amp;&amp;amp;&amp;quot;function&amp;quot;!=typeof e.item},y=function(e){return null!=e&amp;amp;&amp;amp;e===e.window},m=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||m).createElement(&amp;quot;script&amp;quot;);if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&amp;amp;&amp;amp;t.getAttribute(r))&amp;amp;&amp;amp;o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+&amp;quot;&amp;quot;:&amp;quot;object&amp;quot;==typeof e||&amp;quot;function&amp;quot;==typeof e?n[i.call(e)]||&amp;quot;object&amp;quot;:typeof e}var t=&amp;quot;3.7.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/animatedSelector,-effects/Tween&amp;quot;,l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&amp;amp;&amp;amp;&amp;quot;length&amp;quot;in e&amp;amp;&amp;amp;e.length,n=x(e);return!v(e)&amp;amp;&amp;amp;!y(e)&amp;amp;&amp;amp;(&amp;quot;array&amp;quot;===n||0===t||&amp;quot;number&amp;quot;==typeof t&amp;amp;&amp;amp;0&amp;lt;t&amp;amp;&amp;amp;t-1 in e)}function fe(e,t){return e.nodeName&amp;amp;&amp;amp;e.nodeName.toLowerCase()===t.toLowerCase()}ce.fn=ce.prototype={jquery:t,constructor:ce,length:0,toArray:function(){return ae.call(this)},get:function(e){return null==e?ae.call(this):e&amp;lt;0?this[e+this.length]:this[e]},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return ce.each(this,e)},map:function(n){return this.pushStack(ce.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(ae.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(ce.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(ce.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e&amp;lt;0?t:0);return this.pushStack(0&amp;lt;=n&amp;amp;&amp;amp;n&amp;lt;t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:oe.sort,splice:oe.splice},ce.extend=ce.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for(&amp;quot;boolean&amp;quot;==typeof a&amp;amp;&amp;amp;(l=a,a=arguments[s]||{},s++),&amp;quot;object&amp;quot;==typeof a||v(a)||(a={}),s===u&amp;amp;&amp;amp;(a=this,s--);s&amp;lt;u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],&amp;quot;__proto__&amp;quot;!==t&amp;amp;&amp;amp;a!==r&amp;amp;&amp;amp;(l&amp;amp;&amp;amp;r&amp;amp;&amp;amp;(ce.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&amp;amp;&amp;amp;!Array.isArray(n)?[]:i||ce.isPlainObject(n)?n:{},i=!1,a[t]=ce.extend(l,o,r)):void 0!==r&amp;amp;&amp;amp;(a[t]=r));return a},ce.extend({expando:&amp;quot;jQuery&amp;quot;+(t+Math.random()).replace(/\D/g,&amp;quot;&amp;quot;),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||&amp;quot;[object Object]&amp;quot;!==i.call(e))&amp;amp;&amp;amp;(!(t=r(e))||&amp;quot;function&amp;quot;==typeof(n=ue.call(t,&amp;quot;constructor&amp;quot;)&amp;amp;&amp;amp;t.constructor)&amp;amp;&amp;amp;o.call(n)===a)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&amp;amp;&amp;amp;t.nonce},n)},each:function(e,t){var n,r=0;if(c(e)){for(n=e.length;r&amp;lt;n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},text:function(e){var t,n=&amp;quot;&amp;quot;,r=0,i=e.nodeType;if(!i)while(t=e[r++])n+=ce.text(t);return 1===i||11===i?e.textContent:9===i?e.documentElement.textContent:3===i||4===i?e.nodeValue:n},makeArray:function(e,t){var n=t||[];return null!=e&amp;amp;&amp;amp;(c(Object(e))?ce.merge(n,&amp;quot;string&amp;quot;==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:se.call(t,e,n)},isXMLDoc:function(e){var t=e&amp;amp;&amp;amp;e.namespaceURI,n=e&amp;amp;&amp;amp;(e.ownerDocument||e).documentElement;return!l.test(t||n&amp;amp;&amp;amp;n.nodeName||&amp;quot;HTML&amp;quot;)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r&amp;lt;n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i&amp;lt;o;i++)!t(e[i],i)!==a&amp;amp;&amp;amp;r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(c(e))for(r=e.length;o&amp;lt;r;o++)null!=(i=t(e[o],o,n))&amp;amp;&amp;amp;a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&amp;amp;&amp;amp;a.push(i);return g(a)},guid:1,support:le}),&amp;quot;function&amp;quot;==typeof Symbol&amp;amp;&amp;amp;(ce.fn[Symbol.iterator]=oe[Symbol.iterator]),ce.each(&amp;quot;Boolean Number String Function Array Date RegExp Object Error Symbol&amp;quot;.split(&amp;quot; &amp;quot;),function(e,t){n[&amp;quot;[object &amp;quot;+t+&amp;quot;]&amp;quot;]=t.toLowerCase()});var de=oe.pop,pe=oe.sort,he=oe.splice,ge=&amp;quot;[\\x20\\t\\r\\n\\f]&amp;quot;,ve=new RegExp(&amp;quot;^&amp;quot;+ge+&amp;quot;+|((?:^|[^\\\\])(?:\\\\.)*)&amp;quot;+ge+&amp;quot;+$&amp;quot;,&amp;quot;g&amp;quot;);ce.contains=function(e,t){var n=t&amp;amp;&amp;amp;t.parentNode;return e===n||!(!n||1!==n.nodeType||!(e.contains?e.contains(n):e.compareDocumentPosition&amp;amp;&amp;amp;16&amp;amp;e.compareDocumentPosition(n)))};var f=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function d(e,t){return t?&amp;quot;\0&amp;quot;===e?&amp;quot;\ufffd&amp;quot;:e.slice(0,-1)+&amp;quot;\\&amp;quot;+e.charCodeAt(e.length-1).toString(16)+&amp;quot; &amp;quot;:&amp;quot;\\&amp;quot;+e}ce.escapeSelector=function(e){return(e+&amp;quot;&amp;quot;).replace(f,d)};var ye=m,me=s;!function(){var e,x,w,o,a,C,r,T,p,i,E=me,k=ce.expando,S=0,n=0,s=W(),c=W(),u=W(),h=W(),l=function(e,t){return e===t&amp;amp;&amp;amp;(a=!0),0},f=&amp;quot;checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped&amp;quot;,t=&amp;quot;(?:\\\\[\\da-fA-F]{1,6}&amp;quot;+ge+&amp;quot;?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+&amp;quot;,d=&amp;quot;\\[&amp;quot;+ge+&amp;quot;*(&amp;quot;+t+&amp;quot;)(?:&amp;quot;+ge+&amp;quot;*([*^$|!~]?=)&amp;quot;+ge+&amp;quot;*(?:&#039;((?:\\\\.|[^\\\\&#039;])*)&#039;|\&amp;quot;((?:\\\\.|[^\\\\\&amp;quot;])*)\&amp;quot;|(&amp;quot;+t+&amp;quot;))|)&amp;quot;+ge+&amp;quot;*\\]&amp;quot;,g=&amp;quot;:(&amp;quot;+t+&amp;quot;)(?:\\(((&#039;((?:\\\\.|[^\\\\&#039;])*)&#039;|\&amp;quot;((?:\\\\.|[^\\\\\&amp;quot;])*)\&amp;quot;)|((?:\\\\.|[^\\\\()[\\]]|&amp;quot;+d+&amp;quot;)*)|.*)\\)|)&amp;quot;,v=new RegExp(ge+&amp;quot;+&amp;quot;,&amp;quot;g&amp;quot;),y=new RegExp(&amp;quot;^&amp;quot;+ge+&amp;quot;*,&amp;quot;+ge+&amp;quot;*&amp;quot;),m=new RegExp(&amp;quot;^&amp;quot;+ge+&amp;quot;*([&amp;gt;+~]|&amp;quot;+ge+&amp;quot;)&amp;quot;+ge+&amp;quot;*&amp;quot;),b=new RegExp(ge+&amp;quot;|&amp;gt;&amp;quot;),A=new RegExp(g),D=new RegExp(&amp;quot;^&amp;quot;+t+&amp;quot;$&amp;quot;),N={ID:new RegExp(&amp;quot;^#(&amp;quot;+t+&amp;quot;)&amp;quot;),CLASS:new RegExp(&amp;quot;^\\.(&amp;quot;+t+&amp;quot;)&amp;quot;),TAG:new RegExp(&amp;quot;^(&amp;quot;+t+&amp;quot;|[*])&amp;quot;),ATTR:new RegExp(&amp;quot;^&amp;quot;+d),PSEUDO:new RegExp(&amp;quot;^&amp;quot;+g),CHILD:new RegExp(&amp;quot;^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(&amp;quot;+ge+&amp;quot;*(even|odd|(([+-]|)(\\d*)n|)&amp;quot;+ge+&amp;quot;*(?:([+-]|)&amp;quot;+ge+&amp;quot;*(\\d+)|))&amp;quot;+ge+&amp;quot;*\\)|)&amp;quot;,&amp;quot;i&amp;quot;),bool:new RegExp(&amp;quot;^(?:&amp;quot;+f+&amp;quot;)$&amp;quot;,&amp;quot;i&amp;quot;),needsContext:new RegExp(&amp;quot;^&amp;quot;+ge+&amp;quot;*[&amp;gt;+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(&amp;quot;+ge+&amp;quot;*((?:-\\d)?\\d*)&amp;quot;+ge+&amp;quot;*\\)|)(?=[^-]|$)&amp;quot;,&amp;quot;i&amp;quot;)},L=/^(?:input|select|textarea|button)$/i,j=/^h\d$/i,O=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,P=/[+~]/,H=new RegExp(&amp;quot;\\\\[\\da-fA-F]{1,6}&amp;quot;+ge+&amp;quot;?|\\\\([^\\r\\n\\f])&amp;quot;,&amp;quot;g&amp;quot;),q=function(e,t){var n=&amp;quot;0x&amp;quot;+e.slice(1)-65536;return t||(n&amp;lt;0?String.fromCharCode(n+65536):String.fromCharCode(n&amp;gt;&amp;gt;10|55296,1023&amp;amp;n|56320))},R=function(){V()},M=K(function(e){return!0===e.disabled&amp;amp;&amp;amp;fe(e,&amp;quot;fieldset&amp;quot;)},{dir:&amp;quot;parentNode&amp;quot;,next:&amp;quot;legend&amp;quot;});try{E.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){E={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&amp;amp;&amp;amp;e.ownerDocument,d=e?e.nodeType:9;if(n=n||[],&amp;quot;string&amp;quot;!=typeof t||!t||1!==d&amp;amp;&amp;amp;9!==d&amp;amp;&amp;amp;11!==d)return n;if(!r&amp;amp;&amp;amp;(V(e),e=e||C,T)){if(11!==d&amp;amp;&amp;amp;(u=O.exec(t)))if(i=u[1]){if(9===d){if(!(a=e.getElementById(i)))return n;if(a.id===i)return E.call(n,a),n}else if(f&amp;amp;&amp;amp;(a=f.getElementById(i))&amp;amp;&amp;amp;I.contains(e,a)&amp;amp;&amp;amp;a.id===i)return E.call(n,a),n}else{if(u[2])return E.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&amp;amp;&amp;amp;e.getElementsByClassName)return E.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+&amp;quot; &amp;quot;]||p&amp;amp;&amp;amp;p.test(t))){if(c=t,f=e,1===d&amp;amp;&amp;amp;(b.test(t)||m.test(t))){(f=P.test(t)&amp;amp;&amp;amp;X(e.parentNode)||e)==e&amp;amp;&amp;amp;le.scope||((s=e.getAttribute(&amp;quot;id&amp;quot;))?s=ce.escapeSelector(s):e.setAttribute(&amp;quot;id&amp;quot;,s=k)),o=(l=Y(t)).length;while(o--)l[o]=(s?&amp;quot;#&amp;quot;+s:&amp;quot;:scope&amp;quot;)+&amp;quot; &amp;quot;+G(l[o]);c=l.join(&amp;quot;,&amp;quot;)}try{return E.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===k&amp;amp;&amp;amp;e.removeAttribute(&amp;quot;id&amp;quot;)}}}return re(t.replace(ve,&amp;quot;$1&amp;quot;),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+&amp;quot; &amp;quot;)&amp;gt;x.cacheLength&amp;amp;&amp;amp;delete e[r.shift()],e[t+&amp;quot; &amp;quot;]=n}}function B(e){return e[k]=!0,e}function F(e){var t=C.createElement(&amp;quot;fieldset&amp;quot;);try{return!!e(t)}catch(e){return!1}finally{t.parentNode&amp;amp;&amp;amp;t.parentNode.removeChild(t),t=null}}function $(t){return function(e){return fe(e,&amp;quot;input&amp;quot;)&amp;amp;&amp;amp;e.type===t}}function _(t){return function(e){return(fe(e,&amp;quot;input&amp;quot;)||fe(e,&amp;quot;button&amp;quot;))&amp;amp;&amp;amp;e.type===t}}function z(t){return function(e){return&amp;quot;form&amp;quot;in e?e.parentNode&amp;amp;&amp;amp;!1===e.disabled?&amp;quot;label&amp;quot;in e?&amp;quot;label&amp;quot;in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&amp;amp;&amp;amp;M(e)===t:e.disabled===t:&amp;quot;label&amp;quot;in e&amp;amp;&amp;amp;e.disabled===t}}function U(a){return B(function(o){return o=+o,B(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&amp;amp;&amp;amp;(e[n]=!(t[n]=e[n]))})})}function X(e){return e&amp;amp;&amp;amp;&amp;quot;undefined&amp;quot;!=typeof e.getElementsByTagName&amp;amp;&amp;amp;e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=C&amp;amp;&amp;amp;9===n.nodeType&amp;amp;&amp;amp;n.documentElement&amp;amp;&amp;amp;(r=(C=n).documentElement,T=!ce.isXMLDoc(C),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&amp;amp;&amp;amp;ye!=C&amp;amp;&amp;amp;(t=C.defaultView)&amp;amp;&amp;amp;t.top!==t&amp;amp;&amp;amp;t.addEventListener(&amp;quot;unload&amp;quot;,R),le.getById=F(function(e){return r.appendChild(e).id=ce.expando,!C.getElementsByName||!C.getElementsByName(ce.expando).length}),le.disconnectedMatch=F(function(e){return i.call(e,&amp;quot;*&amp;quot;)}),le.scope=F(function(){return C.querySelectorAll(&amp;quot;:scope&amp;quot;)}),le.cssHas=F(function(){try{return C.querySelector(&amp;quot;:has(*,:jqfake)&amp;quot;),!1}catch(e){return!0}}),le.getById?(x.filter.ID=function(e){var t=e.replace(H,q);return function(e){return e.getAttribute(&amp;quot;id&amp;quot;)===t}},x.find.ID=function(e,t){if(&amp;quot;undefined&amp;quot;!=typeof t.getElementById&amp;amp;&amp;amp;T){var n=t.getElementById(e);return n?[n]:[]}}):(x.filter.ID=function(e){var n=e.replace(H,q);return function(e){var t=&amp;quot;undefined&amp;quot;!=typeof e.getAttributeNode&amp;amp;&amp;amp;e.getAttributeNode(&amp;quot;id&amp;quot;);return t&amp;amp;&amp;amp;t.value===n}},x.find.ID=function(e,t){if(&amp;quot;undefined&amp;quot;!=typeof t.getElementById&amp;amp;&amp;amp;T){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode(&amp;quot;id&amp;quot;))&amp;amp;&amp;amp;n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode(&amp;quot;id&amp;quot;))&amp;amp;&amp;amp;n.value===e)return[o]}return[]}}),x.find.TAG=function(e,t){return&amp;quot;undefined&amp;quot;!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},x.find.CLASS=function(e,t){if(&amp;quot;undefined&amp;quot;!=typeof t.getElementsByClassName&amp;amp;&amp;amp;T)return t.getElementsByClassName(e)},p=[],F(function(e){var t;r.appendChild(e).innerHTML=&amp;quot;&amp;lt;a id=&#039;&amp;quot;+k+&amp;quot;&#039; href=&#039;&#039; disabled=&#039;disabled&#039;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;select id=&#039;&amp;quot;+k+&amp;quot;-\r\\&#039; disabled=&#039;disabled&#039;&amp;gt;&amp;lt;option selected=&#039;&#039;&amp;gt;&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;&amp;quot;,e.querySelectorAll(&amp;quot;[selected]&amp;quot;).length||p.push(&amp;quot;\\[&amp;quot;+ge+&amp;quot;*(?:value|&amp;quot;+f+&amp;quot;)&amp;quot;),e.querySelectorAll(&amp;quot;[id~=&amp;quot;+k+&amp;quot;-]&amp;quot;).length||p.push(&amp;quot;~=&amp;quot;),e.querySelectorAll(&amp;quot;a#&amp;quot;+k+&amp;quot;+*&amp;quot;).length||p.push(&amp;quot;.#.+[+~]&amp;quot;),e.querySelectorAll(&amp;quot;:checked&amp;quot;).length||p.push(&amp;quot;:checked&amp;quot;),(t=C.createElement(&amp;quot;input&amp;quot;)).setAttribute(&amp;quot;type&amp;quot;,&amp;quot;hidden&amp;quot;),e.appendChild(t).setAttribute(&amp;quot;name&amp;quot;,&amp;quot;D&amp;quot;),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(&amp;quot;:disabled&amp;quot;).length&amp;amp;&amp;amp;p.push(&amp;quot;:enabled&amp;quot;,&amp;quot;:disabled&amp;quot;),(t=C.createElement(&amp;quot;input&amp;quot;)).setAttribute(&amp;quot;name&amp;quot;,&amp;quot;&amp;quot;),e.appendChild(t),e.querySelectorAll(&amp;quot;[name=&#039;&#039;]&amp;quot;).length||p.push(&amp;quot;\\[&amp;quot;+ge+&amp;quot;*name&amp;quot;+ge+&amp;quot;*=&amp;quot;+ge+&amp;quot;*(?:&#039;&#039;|\&amp;quot;\&amp;quot;)&amp;quot;)}),le.cssHas||p.push(&amp;quot;:has&amp;quot;),p=p.length&amp;amp;&amp;amp;new RegExp(p.join(&amp;quot;|&amp;quot;)),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&amp;amp;(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&amp;amp;&amp;amp;t.compareDocumentPosition(e)===n?e===C||e.ownerDocument==ye&amp;amp;&amp;amp;I.contains(ye,e)?-1:t===C||t.ownerDocument==ye&amp;amp;&amp;amp;I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&amp;amp;n?-1:1)}),C}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),T&amp;amp;&amp;amp;!h[t+&amp;quot; &amp;quot;]&amp;amp;&amp;amp;(!p||!p.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&amp;amp;&amp;amp;11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0&amp;lt;I(t,C,null,[e]).length},I.contains=function(e,t){return(e.ownerDocument||e)!=C&amp;amp;&amp;amp;V(e),ce.contains(e,t)},I.attr=function(e,t){(e.ownerDocument||e)!=C&amp;amp;&amp;amp;V(e);var n=x.attrHandle[t.toLowerCase()],r=n&amp;amp;&amp;amp;ue.call(x.attrHandle,t.toLowerCase())?n(e,t,!T):void 0;return void 0!==r?r:e.getAttribute(t)},I.error=function(e){throw new Error(&amp;quot;Syntax error, unrecognized expression: &amp;quot;+e)},ce.uniqueSort=function(e){var t,n=[],r=0,i=0;if(a=!le.sortStable,o=!le.sortStable&amp;amp;&amp;amp;ae.call(e,0),pe.call(e,l),a){while(t=e[i++])t===e[i]&amp;amp;&amp;amp;(r=n.push(i));while(r--)he.call(e,n[r],1)}return o=null,e},ce.fn.uniqueSort=function(){return this.pushStack(ce.uniqueSort(ae.apply(this)))},(x=ce.expr={cacheLength:50,createPseudo:B,match:N,attrHandle:{},find:{},relative:{&amp;quot;&amp;gt;&amp;quot;:{dir:&amp;quot;parentNode&amp;quot;,first:!0},&amp;quot; &amp;quot;:{dir:&amp;quot;parentNode&amp;quot;},&amp;quot;+&amp;quot;:{dir:&amp;quot;previousSibling&amp;quot;,first:!0},&amp;quot;~&amp;quot;:{dir:&amp;quot;previousSibling&amp;quot;}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(H,q),e[3]=(e[3]||e[4]||e[5]||&amp;quot;&amp;quot;).replace(H,q),&amp;quot;~=&amp;quot;===e[2]&amp;amp;&amp;amp;(e[3]=&amp;quot; &amp;quot;+e[3]+&amp;quot; &amp;quot;),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),&amp;quot;nth&amp;quot;===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(&amp;quot;even&amp;quot;===e[3]||&amp;quot;odd&amp;quot;===e[3])),e[5]=+(e[7]+e[8]||&amp;quot;odd&amp;quot;===e[3])):e[3]&amp;amp;&amp;amp;I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&amp;amp;&amp;amp;e[2];return N.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||&amp;quot;&amp;quot;:n&amp;amp;&amp;amp;A.test(n)&amp;amp;&amp;amp;(t=Y(n,!0))&amp;amp;&amp;amp;(t=n.indexOf(&amp;quot;)&amp;quot;,n.length-t)-n.length)&amp;amp;&amp;amp;(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(H,q).toLowerCase();return&amp;quot;*&amp;quot;===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+&amp;quot; &amp;quot;];return t||(t=new RegExp(&amp;quot;(^|&amp;quot;+ge+&amp;quot;)&amp;quot;+e+&amp;quot;(&amp;quot;+ge+&amp;quot;|$)&amp;quot;))&amp;amp;&amp;amp;s(e,function(e){return t.test(&amp;quot;string&amp;quot;==typeof e.className&amp;amp;&amp;amp;e.className||&amp;quot;undefined&amp;quot;!=typeof e.getAttribute&amp;amp;&amp;amp;e.getAttribute(&amp;quot;class&amp;quot;)||&amp;quot;&amp;quot;)})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?&amp;quot;!=&amp;quot;===r:!r||(t+=&amp;quot;&amp;quot;,&amp;quot;=&amp;quot;===r?t===i:&amp;quot;!=&amp;quot;===r?t!==i:&amp;quot;^=&amp;quot;===r?i&amp;amp;&amp;amp;0===t.indexOf(i):&amp;quot;*=&amp;quot;===r?i&amp;amp;&amp;amp;-1&amp;lt;t.indexOf(i):&amp;quot;$=&amp;quot;===r?i&amp;amp;&amp;amp;t.slice(-i.length)===i:&amp;quot;~=&amp;quot;===r?-1&amp;lt;(&amp;quot; &amp;quot;+t.replace(v,&amp;quot; &amp;quot;)+&amp;quot; &amp;quot;).indexOf(i):&amp;quot;|=&amp;quot;===r&amp;amp;&amp;amp;(t===i||t.slice(0,i.length+1)===i+&amp;quot;-&amp;quot;))}},CHILD:function(p,e,t,h,g){var v=&amp;quot;nth&amp;quot;!==p.slice(0,3),y=&amp;quot;last&amp;quot;!==p.slice(-4),m=&amp;quot;of-type&amp;quot;===e;return 1===h&amp;amp;&amp;amp;0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u=v!==y?&amp;quot;nextSibling&amp;quot;:&amp;quot;previousSibling&amp;quot;,l=e.parentNode,c=m&amp;amp;&amp;amp;e.nodeName.toLowerCase(),f=!n&amp;amp;&amp;amp;!m,d=!1;if(l){if(v){while(u){o=e;while(o=o[u])if(m?fe(o,c):1===o.nodeType)return!1;s=u=&amp;quot;only&amp;quot;===p&amp;amp;&amp;amp;!s&amp;amp;&amp;amp;&amp;quot;nextSibling&amp;quot;}return!0}if(s=[y?l.firstChild:l.lastChild],y&amp;amp;&amp;amp;f){d=(a=(r=(i=l[k]||(l[k]={}))[p]||[])[0]===S&amp;amp;&amp;amp;r[1])&amp;amp;&amp;amp;r[2],o=a&amp;amp;&amp;amp;l.childNodes[a];while(o=++a&amp;amp;&amp;amp;o&amp;amp;&amp;amp;o[u]||(d=a=0)||s.pop())if(1===o.nodeType&amp;amp;&amp;amp;++d&amp;amp;&amp;amp;o===e){i[p]=[S,a,d];break}}else if(f&amp;amp;&amp;amp;(d=a=(r=(i=e[k]||(e[k]={}))[p]||[])[0]===S&amp;amp;&amp;amp;r[1]),!1===d)while(o=++a&amp;amp;&amp;amp;o&amp;amp;&amp;amp;o[u]||(d=a=0)||s.pop())if((m?fe(o,c):1===o.nodeType)&amp;amp;&amp;amp;++d&amp;amp;&amp;amp;(f&amp;amp;&amp;amp;((i=o[k]||(o[k]={}))[p]=[S,d]),o===e))break;return(d-=g)===h||d%h==0&amp;amp;&amp;amp;0&amp;lt;=d/h}}},PSEUDO:function(e,o){var t,a=x.pseudos[e]||x.setFilters[e.toLowerCase()]||I.error(&amp;quot;unsupported pseudo: &amp;quot;+e);return a[k]?a(o):1&amp;lt;a.length?(t=[e,e,&amp;quot;&amp;quot;,o],x.setFilters.hasOwnProperty(e.toLowerCase())?B(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=se.call(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:B(function(e){var r=[],i=[],s=ne(e.replace(ve,&amp;quot;$1&amp;quot;));return s[k]?B(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&amp;amp;&amp;amp;(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:B(function(t){return function(e){return 0&amp;lt;I(t,e).length}}),contains:B(function(t){return t=t.replace(H,q),function(e){return-1&amp;lt;(e.textContent||ce.text(e)).indexOf(t)}}),lang:B(function(n){return D.test(n||&amp;quot;&amp;quot;)||I.error(&amp;quot;unsupported lang: &amp;quot;+n),n=n.replace(H,q).toLowerCase(),function(e){var t;do{if(t=T?e.lang:e.getAttribute(&amp;quot;xml:lang&amp;quot;)||e.getAttribute(&amp;quot;lang&amp;quot;))return(t=t.toLowerCase())===n||0===t.indexOf(n+&amp;quot;-&amp;quot;)}while((e=e.parentNode)&amp;amp;&amp;amp;1===e.nodeType);return!1}}),target:function(e){var t=ie.location&amp;amp;&amp;amp;ie.location.hash;return t&amp;amp;&amp;amp;t.slice(1)===e.id},root:function(e){return e===r},focus:function(e){return e===function(){try{return C.activeElement}catch(e){}}()&amp;amp;&amp;amp;C.hasFocus()&amp;amp;&amp;amp;!!(e.type||e.href||~e.tabIndex)},enabled:z(!1),disabled:z(!0),checked:function(e){return fe(e,&amp;quot;input&amp;quot;)&amp;amp;&amp;amp;!!e.checked||fe(e,&amp;quot;option&amp;quot;)&amp;amp;&amp;amp;!!e.selected},selected:function(e){return e.parentNode&amp;amp;&amp;amp;e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType&amp;lt;6)return!1;return!0},parent:function(e){return!x.pseudos.empty(e)},header:function(e){return j.test(e.nodeName)},input:function(e){return L.test(e.nodeName)},button:function(e){return fe(e,&amp;quot;input&amp;quot;)&amp;amp;&amp;amp;&amp;quot;button&amp;quot;===e.type||fe(e,&amp;quot;button&amp;quot;)},text:function(e){var t;return fe(e,&amp;quot;input&amp;quot;)&amp;amp;&amp;amp;&amp;quot;text&amp;quot;===e.type&amp;amp;&amp;amp;(null==(t=e.getAttribute(&amp;quot;type&amp;quot;))||&amp;quot;text&amp;quot;===t.toLowerCase())},first:U(function(){return[0]}),last:U(function(e,t){return[t-1]}),eq:U(function(e,t,n){return[n&amp;lt;0?n+t:n]}),even:U(function(e,t){for(var n=0;n&amp;lt;t;n+=2)e.push(n);return e}),odd:U(function(e,t){for(var n=1;n&amp;lt;t;n+=2)e.push(n);return e}),lt:U(function(e,t,n){var r;for(r=n&amp;lt;0?n+t:t&amp;lt;n?t:n;0&amp;lt;=--r;)e.push(r);return e}),gt:U(function(e,t,n){for(var r=n&amp;lt;0?n+t:n;++r&amp;lt;t;)e.push(r);return e})}}).pseudos.nth=x.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})x.pseudos[e]=$(e);for(e in{submit:!0,reset:!0})x.pseudos[e]=_(e);function Q(){}function Y(e,t){var n,r,i,o,a,s,u,l=c[e+&amp;quot; &amp;quot;];if(l)return t?0:l.slice(0);a=e,s=[],u=x.preFilter;while(a){for(o in n&amp;amp;&amp;amp;!(r=y.exec(a))||(r&amp;amp;&amp;amp;(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=m.exec(a))&amp;amp;&amp;amp;(n=r.shift(),i.push({value:n,type:r[0].replace(ve,&amp;quot; &amp;quot;)}),a=a.slice(n.length)),x.filter)!(r=N[o].exec(a))||u[o]&amp;amp;&amp;amp;!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?I.error(e):c(e,s).slice(0)}function G(e){for(var t=0,n=e.length,r=&amp;quot;&amp;quot;;t&amp;lt;n;t++)r+=e[t].value;return r}function K(a,e,t){var s=e.dir,u=e.next,l=u||s,c=t&amp;amp;&amp;amp;&amp;quot;parentNode&amp;quot;===l,f=n++;return e.first?function(e,t,n){while(e=e[s])if(1===e.nodeType||c)return a(e,t,n);return!1}:function(e,t,n){var r,i,o=[S,f];if(n){while(e=e[s])if((1===e.nodeType||c)&amp;amp;&amp;amp;a(e,t,n))return!0}else while(e=e[s])if(1===e.nodeType||c)if(i=e[k]||(e[k]={}),u&amp;amp;&amp;amp;fe(e,u))e=e[s]||e;else{if((r=i[l])&amp;amp;&amp;amp;r[0]===S&amp;amp;&amp;amp;r[1]===f)return o[2]=r[2];if((i[l]=o)[2]=a(e,t,n))return!0}return!1}}function J(i){return 1&amp;lt;i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Z(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s&amp;lt;u;s++)(o=e[s])&amp;amp;&amp;amp;(n&amp;amp;&amp;amp;!n(o,r,i)||(a.push(o),l&amp;amp;&amp;amp;t.push(s)));return a}function ee(p,h,g,v,y,e){return v&amp;amp;&amp;amp;!v[k]&amp;amp;&amp;amp;(v=ee(v)),y&amp;amp;&amp;amp;!y[k]&amp;amp;&amp;amp;(y=ee(y,e)),B(function(e,t,n,r){var i,o,a,s,u=[],l=[],c=t.length,f=e||function(e,t,n){for(var r=0,i=t.length;r&amp;lt;i;r++)I(e,t[r],n);return n}(h||&amp;quot;*&amp;quot;,n.nodeType?[n]:n,[]),d=!p||!e&amp;amp;&amp;amp;h?f:Z(f,u,p,n,r);if(g?g(d,s=y||(e?p:c||v)?[]:t,n,r):s=d,v){i=Z(s,l),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&amp;amp;&amp;amp;(s[l[o]]=!(d[l[o]]=a))}if(e){if(y||p){if(y){i=[],o=s.length;while(o--)(a=s[o])&amp;amp;&amp;amp;i.push(d[o]=a);y(null,s=[],i,r)}o=s.length;while(o--)(a=s[o])&amp;amp;&amp;amp;-1&amp;lt;(i=y?se.call(e,a):u[o])&amp;amp;&amp;amp;(e[i]=!(t[i]=a))}}else s=Z(s===t?s.splice(c,s.length):s),y?y(null,t,s,r):E.apply(t,s)})}function te(e){for(var i,t,n,r=e.length,o=x.relative[e[0].type],a=o||x.relative[&amp;quot; &amp;quot;],s=o?1:0,u=K(function(e){return e===i},a,!0),l=K(function(e){return-1&amp;lt;se.call(i,e)},a,!0),c=[function(e,t,n){var r=!o&amp;amp;&amp;amp;(n||t!=w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s&amp;lt;r;s++)if(t=x.relative[e[s].type])c=[K(J(c),t)];else{if((t=x.filter[e[s].type].apply(null,e[s].matches))[k]){for(n=++s;n&amp;lt;r;n++)if(x.relative[e[n].type])break;return ee(1&amp;lt;s&amp;amp;&amp;amp;J(c),1&amp;lt;s&amp;amp;&amp;amp;G(e.slice(0,s-1).concat({value:&amp;quot; &amp;quot;===e[s-2].type?&amp;quot;*&amp;quot;:&amp;quot;&amp;quot;})).replace(ve,&amp;quot;$1&amp;quot;),t,s&amp;lt;n&amp;amp;&amp;amp;te(e.slice(s,n)),n&amp;lt;r&amp;amp;&amp;amp;te(e=e.slice(n)),n&amp;lt;r&amp;amp;&amp;amp;G(e))}c.push(t)}return J(c)}function ne(e,t){var n,v,y,m,b,r,i=[],o=[],a=u[e+&amp;quot; &amp;quot;];if(!a){t||(t=Y(e)),n=t.length;while(n--)(a=te(t[n]))[k]?i.push(a):o.push(a);(a=u(e,(v=o,m=0&amp;lt;(y=i).length,b=0&amp;lt;v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l=&amp;quot;0&amp;quot;,c=e&amp;amp;&amp;amp;[],f=[],d=w,p=e||b&amp;amp;&amp;amp;x.find.TAG(&amp;quot;*&amp;quot;,i),h=S+=null==d?1:Math.random()||.1,g=p.length;for(i&amp;amp;&amp;amp;(w=t==C||t||i);l!==g&amp;amp;&amp;amp;null!=(o=p[l]);l++){if(b&amp;amp;&amp;amp;o){a=0,t||o.ownerDocument==C||(V(o),n=!T);while(s=v[a++])if(s(o,t||C,n)){E.call(r,o);break}i&amp;amp;&amp;amp;(S=h)}m&amp;amp;&amp;amp;((o=!s&amp;amp;&amp;amp;o)&amp;amp;&amp;amp;u--,e&amp;amp;&amp;amp;c.push(o))}if(u+=l,m&amp;amp;&amp;amp;l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0&amp;lt;u)while(l--)c[l]||f[l]||(f[l]=de.call(r));f=Z(f)}E.apply(r,f),i&amp;amp;&amp;amp;!e&amp;amp;&amp;amp;0&amp;lt;f.length&amp;amp;&amp;amp;1&amp;lt;u+y.length&amp;amp;&amp;amp;ce.uniqueSort(r)}return i&amp;amp;&amp;amp;(S=h,w=d),c},m?B(r):r))).selector=e}return a}function re(e,t,n,r){var i,o,a,s,u,l=&amp;quot;function&amp;quot;==typeof e&amp;amp;&amp;amp;e,c=!r&amp;amp;&amp;amp;Y(e=l.selector||e);if(n=n||[],1===c.length){if(2&amp;lt;(o=c[0]=c[0].slice(0)).length&amp;amp;&amp;amp;&amp;quot;ID&amp;quot;===(a=o[0]).type&amp;amp;&amp;amp;9===t.nodeType&amp;amp;&amp;amp;T&amp;amp;&amp;amp;x.relative[o[1].type]){if(!(t=(x.find.ID(a.matches[0].replace(H,q),t)||[])[0]))return n;l&amp;amp;&amp;amp;(t=t.parentNode),e=e.slice(o.shift().value.length)}i=N.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],x.relative[s=a.type])break;if((u=x.find[s])&amp;amp;&amp;amp;(r=u(a.matches[0].replace(H,q),P.test(o[0].type)&amp;amp;&amp;amp;X(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&amp;amp;&amp;amp;G(o)))return E.apply(n,r),n;break}}}return(l||ne(e,c))(r,t,!T,n,!t||P.test(e)&amp;amp;&amp;amp;X(t.parentNode)||t),n}Q.prototype=x.filters=x.pseudos,x.setFilters=new Q,le.sortStable=k.split(&amp;quot;&amp;quot;).sort(l).join(&amp;quot;&amp;quot;)===k,V(),le.sortDetached=F(function(e){return 1&amp;amp;e.compareDocumentPosition(C.createElement(&amp;quot;fieldset&amp;quot;))}),ce.find=I,ce.expr[&amp;quot;:&amp;quot;]=ce.expr.pseudos,ce.unique=ce.uniqueSort,I.compile=ne,I.select=re,I.setDocument=V,I.tokenize=Y,I.escape=ce.escapeSelector,I.getText=ce.text,I.isXML=ce.isXMLDoc,I.selectors=ce.expr,I.support=ce.support,I.uniqueSort=ce.uniqueSort}();var p=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&amp;amp;&amp;amp;9!==e.nodeType)if(1===e.nodeType){if(i&amp;amp;&amp;amp;ce(e).is(n))break;r.push(e)}return r},h=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&amp;amp;&amp;amp;e!==t&amp;amp;&amp;amp;n.push(e);return n},w=ce.expr.match.needsContext,C=/^&amp;lt;([a-z][^\/\0&amp;gt;:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?&amp;gt;(?:&amp;lt;\/\1&amp;gt;|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):&amp;quot;string&amp;quot;!=typeof n?ce.grep(e,function(e){return-1&amp;lt;se.call(n,e)!==r}):ce.filter(n,e,r)}ce.filter=function(e,t,n){var r=t[0];return n&amp;amp;&amp;amp;(e=&amp;quot;:not(&amp;quot;+e+&amp;quot;)&amp;quot;),1===t.length&amp;amp;&amp;amp;1===r.nodeType?ce.find.matchesSelector(r,e)?[r]:[]:ce.find.matches(e,ce.grep(t,function(e){return 1===e.nodeType}))},ce.fn.extend({find:function(e){var t,n,r=this.length,i=this;if(&amp;quot;string&amp;quot;!=typeof e)return this.pushStack(ce(e).filter(function(){for(t=0;t&amp;lt;r;t++)if(ce.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t&amp;lt;r;t++)ce.find(e,i[t],n);return 1&amp;lt;r?ce.uniqueSort(n):n},filter:function(e){return this.pushStack(T(this,e||[],!1))},not:function(e){return this.pushStack(T(this,e||[],!0))},is:function(e){return!!T(this,&amp;quot;string&amp;quot;==typeof e&amp;amp;&amp;amp;w.test(e)?ce(e):e||[],!1).length}});var E,k=/^(?:\s*(&amp;lt;[\w\W]+&amp;gt;)[^&amp;gt;]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||E,&amp;quot;string&amp;quot;==typeof e){if(!(r=&amp;quot;&amp;lt;&amp;quot;===e[0]&amp;amp;&amp;amp;&amp;quot;&amp;gt;&amp;quot;===e[e.length-1]&amp;amp;&amp;amp;3&amp;lt;=e.length?[null,e,null]:k.exec(e))||!r[1]&amp;amp;&amp;amp;t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&amp;amp;&amp;amp;t.nodeType?t.ownerDocument||t:m,!0)),C.test(r[1])&amp;amp;&amp;amp;ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=m.getElementById(r[2]))&amp;amp;&amp;amp;(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,E=ce(m);var S=/^(?:parents|prev(?:Until|All))/,A={children:!0,contents:!0,next:!0,prev:!0};function D(e,t){while((e=e[t])&amp;amp;&amp;amp;1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e&amp;lt;n;e++)if(ce.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a=&amp;quot;string&amp;quot;!=typeof e&amp;amp;&amp;amp;ce(e);if(!w.test(e))for(;r&amp;lt;i;r++)for(n=this[r];n&amp;amp;&amp;amp;n!==t;n=n.parentNode)if(n.nodeType&amp;lt;11&amp;amp;&amp;amp;(a?-1&amp;lt;a.index(n):1===n.nodeType&amp;amp;&amp;amp;ce.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1&amp;lt;o.length?ce.uniqueSort(o):o)},index:function(e){return e?&amp;quot;string&amp;quot;==typeof e?se.call(ce(e),this[0]):se.call(this,e.jquery?e[0]:e):this[0]&amp;amp;&amp;amp;this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ce.uniqueSort(ce.merge(this.get(),ce(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ce.each({parent:function(e){var t=e.parentNode;return t&amp;amp;&amp;amp;11!==t.nodeType?t:null},parents:function(e){return p(e,&amp;quot;parentNode&amp;quot;)},parentsUntil:function(e,t,n){return p(e,&amp;quot;parentNode&amp;quot;,n)},next:function(e){return D(e,&amp;quot;nextSibling&amp;quot;)},prev:function(e){return D(e,&amp;quot;previousSibling&amp;quot;)},nextAll:function(e){return p(e,&amp;quot;nextSibling&amp;quot;)},prevAll:function(e){return p(e,&amp;quot;previousSibling&amp;quot;)},nextUntil:function(e,t,n){return p(e,&amp;quot;nextSibling&amp;quot;,n)},prevUntil:function(e,t,n){return p(e,&amp;quot;previousSibling&amp;quot;,n)},siblings:function(e){return h((e.parentNode||{}).firstChild,e)},children:function(e){return h(e.firstChild)},contents:function(e){return null!=e.contentDocument&amp;amp;&amp;amp;r(e.contentDocument)?e.contentDocument:(fe(e,&amp;quot;template&amp;quot;)&amp;amp;&amp;amp;(e=e.content||e),ce.merge([],e.childNodes))}},function(r,i){ce.fn[r]=function(e,t){var n=ce.map(this,i,e);return&amp;quot;Until&amp;quot;!==r.slice(-5)&amp;amp;&amp;amp;(t=e),t&amp;amp;&amp;amp;&amp;quot;string&amp;quot;==typeof t&amp;amp;&amp;amp;(n=ce.filter(t,n)),1&amp;lt;this.length&amp;amp;&amp;amp;(A[r]||ce.uniqueSort(n),S.test(r)&amp;amp;&amp;amp;n.reverse()),this.pushStack(n)}});var N=/[^\x20\t\r\n\f]+/g;function L(e){return e}function j(e){throw e}function O(e,t,n,r){var i;try{e&amp;amp;&amp;amp;v(i=e.promise)?i.call(e).done(t).fail(n):e&amp;amp;&amp;amp;v(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}ce.Callbacks=function(r){var e,n;r=&amp;quot;string&amp;quot;==typeof r?(e=r,n={},ce.each(e.match(N)||[],function(e,t){n[t]=!0}),n):ce.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l&amp;lt;s.length)!1===s[l].apply(t[0],t[1])&amp;amp;&amp;amp;r.stopOnFalse&amp;amp;&amp;amp;(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&amp;amp;&amp;amp;(s=t?[]:&amp;quot;&amp;quot;)},f={add:function(){return s&amp;amp;&amp;amp;(t&amp;amp;&amp;amp;!i&amp;amp;&amp;amp;(l=s.length-1,u.push(t)),function n(e){ce.each(e,function(e,t){v(t)?r.unique&amp;amp;&amp;amp;f.has(t)||s.push(t):t&amp;amp;&amp;amp;t.length&amp;amp;&amp;amp;&amp;quot;string&amp;quot;!==x(t)&amp;amp;&amp;amp;n(t)})}(arguments),t&amp;amp;&amp;amp;!i&amp;amp;&amp;amp;c()),this},remove:function(){return ce.each(arguments,function(e,t){var n;while(-1&amp;lt;(n=ce.inArray(t,s,n)))s.splice(n,1),n&amp;lt;=l&amp;amp;&amp;amp;l--}),this},has:function(e){return e?-1&amp;lt;ce.inArray(e,s):0&amp;lt;s.length},empty:function(){return s&amp;amp;&amp;amp;(s=[]),this},disable:function(){return a=u=[],s=t=&amp;quot;&amp;quot;,this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=&amp;quot;&amp;quot;),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},ce.extend({Deferred:function(e){var o=[[&amp;quot;notify&amp;quot;,&amp;quot;progress&amp;quot;,ce.Callbacks(&amp;quot;memory&amp;quot;),ce.Callbacks(&amp;quot;memory&amp;quot;),2],[&amp;quot;resolve&amp;quot;,&amp;quot;done&amp;quot;,ce.Callbacks(&amp;quot;once memory&amp;quot;),ce.Callbacks(&amp;quot;once memory&amp;quot;),0,&amp;quot;resolved&amp;quot;],[&amp;quot;reject&amp;quot;,&amp;quot;fail&amp;quot;,ce.Callbacks(&amp;quot;once memory&amp;quot;),ce.Callbacks(&amp;quot;once memory&amp;quot;),1,&amp;quot;rejected&amp;quot;]],i=&amp;quot;pending&amp;quot;,a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},&amp;quot;catch&amp;quot;:function(e){return a.then(null,e)},pipe:function(){var i=arguments;return ce.Deferred(function(r){ce.each(o,function(e,t){var n=v(i[t[4]])&amp;amp;&amp;amp;i[t[4]];s[t[1]](function(){var e=n&amp;amp;&amp;amp;n.apply(this,arguments);e&amp;amp;&amp;amp;v(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+&amp;quot;With&amp;quot;](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i&amp;lt;u)){if((e=a.apply(n,r))===o.promise())throw new TypeError(&amp;quot;Thenable self-resolution&amp;quot;);t=e&amp;amp;&amp;amp;(&amp;quot;object&amp;quot;==typeof e||&amp;quot;function&amp;quot;==typeof e)&amp;amp;&amp;amp;e.then,v(t)?s?t.call(e,l(u,o,L,s),l(u,o,j,s)):(u++,t.call(e,l(u,o,L,s),l(u,o,j,s),l(u,o,L,o.notifyWith))):(a!==L&amp;amp;&amp;amp;(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){ce.Deferred.exceptionHook&amp;amp;&amp;amp;ce.Deferred.exceptionHook(e,t.error),u&amp;lt;=i+1&amp;amp;&amp;amp;(a!==j&amp;amp;&amp;amp;(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(ce.Deferred.getErrorHook?t.error=ce.Deferred.getErrorHook():ce.Deferred.getStackHook&amp;amp;&amp;amp;(t.error=ce.Deferred.getStackHook()),ie.setTimeout(t))}}return ce.Deferred(function(e){o[0][3].add(l(0,e,v(r)?r:L,e.notifyWith)),o[1][3].add(l(0,e,v(t)?t:L)),o[2][3].add(l(0,e,v(n)?n:j))}).promise()},promise:function(e){return null!=e?ce.extend(e,a):a}},s={};return ce.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&amp;amp;&amp;amp;n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+&amp;quot;With&amp;quot;](this===s?void 0:this,arguments),this},s[t[0]+&amp;quot;With&amp;quot;]=n.fireWith}),a.promise(s),e&amp;amp;&amp;amp;e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=ae.call(arguments),o=ce.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1&amp;lt;arguments.length?ae.call(arguments):e,--n||o.resolveWith(r,i)}};if(n&amp;lt;=1&amp;amp;&amp;amp;(O(e,o.done(a(t)).resolve,o.reject,!n),&amp;quot;pending&amp;quot;===o.state()||v(i[t]&amp;amp;&amp;amp;i[t].then)))return o.then();while(t--)O(i[t],a(t),o.reject);return o.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ce.Deferred.exceptionHook=function(e,t){ie.console&amp;amp;&amp;amp;ie.console.warn&amp;amp;&amp;amp;e&amp;amp;&amp;amp;P.test(e.name)&amp;amp;&amp;amp;ie.console.warn(&amp;quot;jQuery.Deferred exception: &amp;quot;+e.message,e.stack,t)},ce.readyException=function(e){ie.setTimeout(function(){throw e})};var H=ce.Deferred();function q(){m.removeEventListener(&amp;quot;DOMContentLoaded&amp;quot;,q),ie.removeEventListener(&amp;quot;load&amp;quot;,q),ce.ready()}ce.fn.ready=function(e){return H.then(e)[&amp;quot;catch&amp;quot;](function(e){ce.readyException(e)}),this},ce.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--ce.readyWait:ce.isReady)||(ce.isReady=!0)!==e&amp;amp;&amp;amp;0&amp;lt;--ce.readyWait||H.resolveWith(m,[ce])}}),ce.ready.then=H.then,&amp;quot;complete&amp;quot;===m.readyState||&amp;quot;loading&amp;quot;!==m.readyState&amp;amp;&amp;amp;!m.documentElement.doScroll?ie.setTimeout(ce.ready):(m.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;,q),ie.addEventListener(&amp;quot;load&amp;quot;,q));var R=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(&amp;quot;object&amp;quot;===x(n))for(s in i=!0,n)R(e,t,s,n[s],!0,o,a);else if(void 0!==r&amp;amp;&amp;amp;(i=!0,v(r)||(a=!0),l&amp;amp;&amp;amp;(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(ce(e),n)})),t))for(;s&amp;lt;u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},M=/^-ms-/,I=/-([a-z])/g;function W(e,t){return t.toUpperCase()}function B(e){return e.replace(M,&amp;quot;ms-&amp;quot;).replace(I,W)}var F=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function $(){this.expando=ce.expando+$.uid++}$.uid=1,$.prototype={cache:function(e){var t=e[this.expando];return t||(t={},F(e)&amp;amp;&amp;amp;(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if(&amp;quot;string&amp;quot;==typeof t)i[B(t)]=n;else for(r in t)i[B(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&amp;amp;&amp;amp;e[this.expando][B(t)]},access:function(e,t,n){return void 0===t||t&amp;amp;&amp;amp;&amp;quot;string&amp;quot;==typeof t&amp;amp;&amp;amp;void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(B):(t=B(t))in r?[t]:t.match(N)||[]).length;while(n--)delete r[t[n]]}(void 0===t||ce.isEmptyObject(r))&amp;amp;&amp;amp;(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&amp;amp;&amp;amp;!ce.isEmptyObject(t)}};var _=new $,z=new $,U=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,X=/[A-Z]/g;function V(e,t,n){var r,i;if(void 0===n&amp;amp;&amp;amp;1===e.nodeType)if(r=&amp;quot;data-&amp;quot;+t.replace(X,&amp;quot;-$&amp;amp;&amp;quot;).toLowerCase(),&amp;quot;string&amp;quot;==typeof(n=e.getAttribute(r))){try{n=&amp;quot;true&amp;quot;===(i=n)||&amp;quot;false&amp;quot;!==i&amp;amp;&amp;amp;(&amp;quot;null&amp;quot;===i?null:i===+i+&amp;quot;&amp;quot;?+i:U.test(i)?JSON.parse(i):i)}catch(e){}z.set(e,t,n)}else n=void 0;return n}ce.extend({hasData:function(e){return z.hasData(e)||_.hasData(e)},data:function(e,t,n){return z.access(e,t,n)},removeData:function(e,t){z.remove(e,t)},_data:function(e,t,n){return _.access(e,t,n)},_removeData:function(e,t){_.remove(e,t)}}),ce.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&amp;amp;&amp;amp;o.attributes;if(void 0===n){if(this.length&amp;amp;&amp;amp;(i=z.get(o),1===o.nodeType&amp;amp;&amp;amp;!_.get(o,&amp;quot;hasDataAttrs&amp;quot;))){t=a.length;while(t--)a[t]&amp;amp;&amp;amp;0===(r=a[t].name).indexOf(&amp;quot;data-&amp;quot;)&amp;amp;&amp;amp;(r=B(r.slice(5)),V(o,r,i[r]));_.set(o,&amp;quot;hasDataAttrs&amp;quot;,!0)}return i}return&amp;quot;object&amp;quot;==typeof n?this.each(function(){z.set(this,n)}):R(this,function(e){var t;if(o&amp;amp;&amp;amp;void 0===e)return void 0!==(t=z.get(o,n))?t:void 0!==(t=V(o,n))?t:void 0;this.each(function(){z.set(this,n,e)})},null,e,1&amp;lt;arguments.length,null,!0)},removeData:function(e){return this.each(function(){z.remove(this,e)})}}),ce.extend({queue:function(e,t,n){var r;if(e)return t=(t||&amp;quot;fx&amp;quot;)+&amp;quot;queue&amp;quot;,r=_.get(e,t),n&amp;amp;&amp;amp;(!r||Array.isArray(n)?r=_.access(e,t,ce.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||&amp;quot;fx&amp;quot;;var n=ce.queue(e,t),r=n.length,i=n.shift(),o=ce._queueHooks(e,t);&amp;quot;inprogress&amp;quot;===i&amp;amp;&amp;amp;(i=n.shift(),r--),i&amp;amp;&amp;amp;(&amp;quot;fx&amp;quot;===t&amp;amp;&amp;amp;n.unshift(&amp;quot;inprogress&amp;quot;),delete o.stop,i.call(e,function(){ce.dequeue(e,t)},o)),!r&amp;amp;&amp;amp;o&amp;amp;&amp;amp;o.empty.fire()},_queueHooks:function(e,t){var n=t+&amp;quot;queueHooks&amp;quot;;return _.get(e,n)||_.access(e,n,{empty:ce.Callbacks(&amp;quot;once memory&amp;quot;).add(function(){_.remove(e,[t+&amp;quot;queue&amp;quot;,n])})})}}),ce.fn.extend({queue:function(t,n){var e=2;return&amp;quot;string&amp;quot;!=typeof t&amp;amp;&amp;amp;(n=t,t=&amp;quot;fx&amp;quot;,e--),arguments.length&amp;lt;e?ce.queue(this[0],t):void 0===n?this:this.each(function(){var e=ce.queue(this,t,n);ce._queueHooks(this,t),&amp;quot;fx&amp;quot;===t&amp;amp;&amp;amp;&amp;quot;inprogress&amp;quot;!==e[0]&amp;amp;&amp;amp;ce.dequeue(this,t)})},dequeue:function(e){return this.each(function(){ce.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||&amp;quot;fx&amp;quot;,[])},promise:function(e,t){var n,r=1,i=ce.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};&amp;quot;string&amp;quot;!=typeof e&amp;amp;&amp;amp;(t=e,e=void 0),e=e||&amp;quot;fx&amp;quot;;while(a--)(n=_.get(o[a],e+&amp;quot;queueHooks&amp;quot;))&amp;amp;&amp;amp;n.empty&amp;amp;&amp;amp;(r++,n.empty.add(s));return s(),i.promise(t)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Y=new RegExp(&amp;quot;^(?:([+-])=|)(&amp;quot;+Q+&amp;quot;)([a-z%]*)$&amp;quot;,&amp;quot;i&amp;quot;),G=[&amp;quot;Top&amp;quot;,&amp;quot;Right&amp;quot;,&amp;quot;Bottom&amp;quot;,&amp;quot;Left&amp;quot;],K=m.documentElement,J=function(e){return ce.contains(e.ownerDocument,e)},Z={composed:!0};K.getRootNode&amp;amp;&amp;amp;(J=function(e){return ce.contains(e.ownerDocument,e)||e.getRootNode(Z)===e.ownerDocument});var ee=function(e,t){return&amp;quot;none&amp;quot;===(e=t||e).style.display||&amp;quot;&amp;quot;===e.style.display&amp;amp;&amp;amp;J(e)&amp;amp;&amp;amp;&amp;quot;none&amp;quot;===ce.css(e,&amp;quot;display&amp;quot;)};var te={};function ne(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c&amp;lt;f;c++)(r=e[c]).style&amp;amp;&amp;amp;(n=r.style.display,t?(&amp;quot;none&amp;quot;===n&amp;amp;&amp;amp;(l[c]=_.get(r,&amp;quot;display&amp;quot;)||null,l[c]||(r.style.display=&amp;quot;&amp;quot;)),&amp;quot;&amp;quot;===r.style.display&amp;amp;&amp;amp;ee(r)&amp;amp;&amp;amp;(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=te[s])||(o=a.body.appendChild(a.createElement(s)),u=ce.css(o,&amp;quot;display&amp;quot;),o.parentNode.removeChild(o),&amp;quot;none&amp;quot;===u&amp;amp;&amp;amp;(u=&amp;quot;block&amp;quot;),te[s]=u)))):&amp;quot;none&amp;quot;!==n&amp;amp;&amp;amp;(l[c]=&amp;quot;none&amp;quot;,_.set(r,&amp;quot;display&amp;quot;,n)));for(c=0;c&amp;lt;f;c++)null!=l[c]&amp;amp;&amp;amp;(e[c].style.display=l[c]);return e}ce.fn.extend({show:function(){return ne(this,!0)},hide:function(){return ne(this)},toggle:function(e){return&amp;quot;boolean&amp;quot;==typeof e?e?this.show():this.hide():this.each(function(){ee(this)?ce(this).show():ce(this).hide()})}});var re,be,xe=/^(?:checkbox|radio)$/i,we=/&amp;lt;([a-z][^\/\0&amp;gt;\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;re=m.createDocumentFragment().appendChild(m.createElement(&amp;quot;div&amp;quot;)),(be=m.createElement(&amp;quot;input&amp;quot;)).setAttribute(&amp;quot;type&amp;quot;,&amp;quot;radio&amp;quot;),be.setAttribute(&amp;quot;checked&amp;quot;,&amp;quot;checked&amp;quot;),be.setAttribute(&amp;quot;name&amp;quot;,&amp;quot;t&amp;quot;),re.appendChild(be),le.checkClone=re.cloneNode(!0).cloneNode(!0).lastChild.checked,re.innerHTML=&amp;quot;&amp;lt;textarea&amp;gt;x&amp;lt;/textarea&amp;gt;&amp;quot;,le.noCloneChecked=!!re.cloneNode(!0).lastChild.defaultValue,re.innerHTML=&amp;quot;&amp;lt;option&amp;gt;&amp;lt;/option&amp;gt;&amp;quot;,le.option=!!re.lastChild;var Te={thead:[1,&amp;quot;&amp;lt;table&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/table&amp;gt;&amp;quot;],col:[2,&amp;quot;&amp;lt;table&amp;gt;&amp;lt;colgroup&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/colgroup&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;],tr:[2,&amp;quot;&amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;],td:[3,&amp;quot;&amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;],_default:[0,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]};function Ee(e,t){var n;return n=&amp;quot;undefined&amp;quot;!=typeof e.getElementsByTagName?e.getElementsByTagName(t||&amp;quot;*&amp;quot;):&amp;quot;undefined&amp;quot;!=typeof e.querySelectorAll?e.querySelectorAll(t||&amp;quot;*&amp;quot;):[],void 0===t||t&amp;amp;&amp;amp;fe(e,t)?ce.merge([e],n):n}function ke(e,t){for(var n=0,r=e.length;n&amp;lt;r;n++)_.set(e[n],&amp;quot;globalEval&amp;quot;,!t||_.get(t[n],&amp;quot;globalEval&amp;quot;))}Te.tbody=Te.tfoot=Te.colgroup=Te.caption=Te.thead,Te.th=Te.td,le.option||(Te.optgroup=Te.option=[1,&amp;quot;&amp;lt;select multiple=&#039;multiple&#039;&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/select&amp;gt;&amp;quot;]);var Se=/&amp;lt;|&amp;amp;#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),d=[],p=0,h=e.length;p&amp;lt;h;p++)if((o=e[p])||0===o)if(&amp;quot;object&amp;quot;===x(o))ce.merge(d,o.nodeType?[o]:o);else if(Se.test(o)){a=a||f.appendChild(t.createElement(&amp;quot;div&amp;quot;)),s=(we.exec(o)||[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;])[1].toLowerCase(),u=Te[s]||Te._default,a.innerHTML=u[1]+ce.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;ce.merge(d,a.childNodes),(a=f.firstChild).textContent=&amp;quot;&amp;quot;}else d.push(t.createTextNode(o));f.textContent=&amp;quot;&amp;quot;,p=0;while(o=d[p++])if(r&amp;amp;&amp;amp;-1&amp;lt;ce.inArray(o,r))i&amp;amp;&amp;amp;i.push(o);else if(l=J(o),a=Ee(f.appendChild(o),&amp;quot;script&amp;quot;),l&amp;amp;&amp;amp;ke(a),n){c=0;while(o=a[c++])Ce.test(o.type||&amp;quot;&amp;quot;)&amp;amp;&amp;amp;n.push(o)}return f}var De=/^([^.]*)(?:\.(.+)|)/;function Ne(){return!0}function Le(){return!1}function je(e,t,n,r,i,o){var a,s;if(&amp;quot;object&amp;quot;==typeof t){for(s in&amp;quot;string&amp;quot;!=typeof n&amp;amp;&amp;amp;(r=r||n,n=void 0),t)je(e,s,n,r,t[s],o);return e}if(null==r&amp;amp;&amp;amp;null==i?(i=n,r=n=void 0):null==i&amp;amp;&amp;amp;(&amp;quot;string&amp;quot;==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Le;else if(!i)return e;return 1===o&amp;amp;&amp;amp;(a=i,(i=function(e){return ce().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=ce.guid++)),e.each(function(){ce.event.add(this,t,i,r,n)})}function Oe(e,r,t){t?(_.set(e,r,!1),ce.event.add(e,r,{namespace:!1,handler:function(e){var t,n=_.get(this,r);if(1&amp;amp;e.isTrigger&amp;amp;&amp;amp;this[r]){if(n)(ce.event.special[r]||{}).delegateType&amp;amp;&amp;amp;e.stopPropagation();else if(n=ae.call(arguments),_.set(this,r,n),this[r](),t=_.get(this,r),_.set(this,r,!1),n!==t)return e.stopImmediatePropagation(),e.preventDefault(),t}else n&amp;amp;&amp;amp;(_.set(this,r,ce.event.trigger(n[0],n.slice(1),this)),e.stopPropagation(),e.isImmediatePropagationStopped=Ne)}})):void 0===_.get(e,r)&amp;amp;&amp;amp;ce.event.add(e,r,Ne)}ce.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,d,p,h,g,v=_.get(t);if(F(t)){n.handler&amp;amp;&amp;amp;(n=(o=n).handler,i=o.selector),i&amp;amp;&amp;amp;ce.find.matchesSelector(K,i),n.guid||(n.guid=ce.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return&amp;quot;undefined&amp;quot;!=typeof ce&amp;amp;&amp;amp;ce.event.triggered!==e.type?ce.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||&amp;quot;&amp;quot;).match(N)||[&amp;quot;&amp;quot;]).length;while(l--)p=g=(s=De.exec(e[l])||[])[1],h=(s[2]||&amp;quot;&amp;quot;).split(&amp;quot;.&amp;quot;).sort(),p&amp;amp;&amp;amp;(f=ce.event.special[p]||{},p=(i?f.delegateType:f.bindType)||p,f=ce.event.special[p]||{},c=ce.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&amp;amp;&amp;amp;ce.expr.match.needsContext.test(i),namespace:h.join(&amp;quot;.&amp;quot;)},o),(d=u[p])||((d=u[p]=[]).delegateCount=0,f.setup&amp;amp;&amp;amp;!1!==f.setup.call(t,r,h,a)||t.addEventListener&amp;amp;&amp;amp;t.addEventListener(p,a)),f.add&amp;amp;&amp;amp;(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,c):d.push(c),ce.event.global[p]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,d,p,h,g,v=_.hasData(e)&amp;amp;&amp;amp;_.get(e);if(v&amp;amp;&amp;amp;(u=v.events)){l=(t=(t||&amp;quot;&amp;quot;).match(N)||[&amp;quot;&amp;quot;]).length;while(l--)if(p=g=(s=De.exec(t[l])||[])[1],h=(s[2]||&amp;quot;&amp;quot;).split(&amp;quot;.&amp;quot;).sort(),p){f=ce.event.special[p]||{},d=u[p=(r?f.delegateType:f.bindType)||p]||[],s=s[2]&amp;amp;&amp;amp;new RegExp(&amp;quot;(^|\\.)&amp;quot;+h.join(&amp;quot;\\.(?:.*\\.|)&amp;quot;)+&amp;quot;(\\.|$)&amp;quot;),a=o=d.length;while(o--)c=d[o],!i&amp;amp;&amp;amp;g!==c.origType||n&amp;amp;&amp;amp;n.guid!==c.guid||s&amp;amp;&amp;amp;!s.test(c.namespace)||r&amp;amp;&amp;amp;r!==c.selector&amp;amp;&amp;amp;(&amp;quot;**&amp;quot;!==r||!c.selector)||(d.splice(o,1),c.selector&amp;amp;&amp;amp;d.delegateCount--,f.remove&amp;amp;&amp;amp;f.remove.call(e,c));a&amp;amp;&amp;amp;!d.length&amp;amp;&amp;amp;(f.teardown&amp;amp;&amp;amp;!1!==f.teardown.call(e,h,v.handle)||ce.removeEvent(e,p,v.handle),delete u[p])}else for(p in u)ce.event.remove(e,p+t[l],n,r,!0);ce.isEmptyObject(u)&amp;amp;&amp;amp;_.remove(e,&amp;quot;handle events&amp;quot;)}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=ce.event.fix(e),l=(_.get(this,&amp;quot;events&amp;quot;)||Object.create(null))[u.type]||[],c=ce.event.special[u.type]||{};for(s[0]=u,t=1;t&amp;lt;arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=ce.event.handlers.call(this,u,l),t=0;while((i=a[t++])&amp;amp;&amp;amp;!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&amp;amp;&amp;amp;!u.isImmediatePropagationStopped())u.rnamespace&amp;amp;&amp;amp;!1!==o.namespace&amp;amp;&amp;amp;!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((ce.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&amp;amp;&amp;amp;!1===(u.result=r)&amp;amp;&amp;amp;(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&amp;amp;&amp;amp;c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&amp;amp;&amp;amp;l.nodeType&amp;amp;&amp;amp;!(&amp;quot;click&amp;quot;===e.type&amp;amp;&amp;amp;1&amp;lt;=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&amp;amp;&amp;amp;(&amp;quot;click&amp;quot;!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n&amp;lt;u;n++)void 0===a[i=(r=t[n]).selector+&amp;quot; &amp;quot;]&amp;amp;&amp;amp;(a[i]=r.needsContext?-1&amp;lt;ce(i,this).index(l):ce.find(i,this,null,[l]).length),a[i]&amp;amp;&amp;amp;o.push(r);o.length&amp;amp;&amp;amp;s.push({elem:l,handlers:o})}return l=this,u&amp;lt;t.length&amp;amp;&amp;amp;s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(ce.Event.prototype,t,{enumerable:!0,configurable:!0,get:v(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[ce.expando]?e:new ce.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return xe.test(t.type)&amp;amp;&amp;amp;t.click&amp;amp;&amp;amp;fe(t,&amp;quot;input&amp;quot;)&amp;amp;&amp;amp;Oe(t,&amp;quot;click&amp;quot;,!0),!1},trigger:function(e){var t=this||e;return xe.test(t.type)&amp;amp;&amp;amp;t.click&amp;amp;&amp;amp;fe(t,&amp;quot;input&amp;quot;)&amp;amp;&amp;amp;Oe(t,&amp;quot;click&amp;quot;),!0},_default:function(e){var t=e.target;return xe.test(t.type)&amp;amp;&amp;amp;t.click&amp;amp;&amp;amp;fe(t,&amp;quot;input&amp;quot;)&amp;amp;&amp;amp;_.get(t,&amp;quot;click&amp;quot;)||fe(t,&amp;quot;a&amp;quot;)}},beforeunload:{postDispatch:function(e){void 0!==e.result&amp;amp;&amp;amp;e.originalEvent&amp;amp;&amp;amp;(e.originalEvent.returnValue=e.result)}}}},ce.removeEvent=function(e,t,n){e.removeEventListener&amp;amp;&amp;amp;e.removeEventListener(t,n)},ce.Event=function(e,t){if(!(this instanceof ce.Event))return new ce.Event(e,t);e&amp;amp;&amp;amp;e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&amp;amp;&amp;amp;!1===e.returnValue?Ne:Le,this.target=e.target&amp;amp;&amp;amp;3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&amp;amp;&amp;amp;ce.extend(this,t),this.timeStamp=e&amp;amp;&amp;amp;e.timeStamp||Date.now(),this[ce.expando]=!0},ce.Event.prototype={constructor:ce.Event,isDefaultPrevented:Le,isPropagationStopped:Le,isImmediatePropagationStopped:Le,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ne,e&amp;amp;&amp;amp;!this.isSimulated&amp;amp;&amp;amp;e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ne,e&amp;amp;&amp;amp;!this.isSimulated&amp;amp;&amp;amp;e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ne,e&amp;amp;&amp;amp;!this.isSimulated&amp;amp;&amp;amp;e.stopImmediatePropagation(),this.stopPropagation()}},ce.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,&amp;quot;char&amp;quot;:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},ce.event.addProp),ce.each({focus:&amp;quot;focusin&amp;quot;,blur:&amp;quot;focusout&amp;quot;},function(r,i){function o(e){if(m.documentMode){var t=_.get(this,&amp;quot;handle&amp;quot;),n=ce.event.fix(e);n.type=&amp;quot;focusin&amp;quot;===e.type?&amp;quot;focus&amp;quot;:&amp;quot;blur&amp;quot;,n.isSimulated=!0,t(e),n.target===n.currentTarget&amp;amp;&amp;amp;t(n)}else ce.event.simulate(i,e.target,ce.event.fix(e))}ce.event.special[r]={setup:function(){var e;if(Oe(this,r,!0),!m.documentMode)return!1;(e=_.get(this,i))||this.addEventListener(i,o),_.set(this,i,(e||0)+1)},trigger:function(){return Oe(this,r),!0},teardown:function(){var e;if(!m.documentMode)return!1;(e=_.get(this,i)-1)?_.set(this,i,e):(this.removeEventListener(i,o),_.remove(this,i))},_default:function(e){return _.get(e.target,r)},delegateType:i},ce.event.special[i]={setup:function(){var e=this.ownerDocument||this.document||this,t=m.documentMode?this:e,n=_.get(t,i);n||(m.documentMode?this.addEventListener(i,o):e.addEventListener(r,o,!0)),_.set(t,i,(n||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=m.documentMode?this:e,n=_.get(t,i)-1;n?_.set(t,i,n):(m.documentMode?this.removeEventListener(i,o):e.removeEventListener(r,o,!0),_.remove(t,i))}}}),ce.each({mouseenter:&amp;quot;mouseover&amp;quot;,mouseleave:&amp;quot;mouseout&amp;quot;,pointerenter:&amp;quot;pointerover&amp;quot;,pointerleave:&amp;quot;pointerout&amp;quot;},function(e,i){ce.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&amp;amp;&amp;amp;(n===this||ce.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),ce.fn.extend({on:function(e,t,n,r){return je(this,e,t,n,r)},one:function(e,t,n,r){return je(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&amp;amp;&amp;amp;e.preventDefault&amp;amp;&amp;amp;e.handleObj)return r=e.handleObj,ce(e.delegateTarget).off(r.namespace?r.origType+&amp;quot;.&amp;quot;+r.namespace:r.origType,r.selector,r.handler),this;if(&amp;quot;object&amp;quot;==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&amp;amp;&amp;amp;&amp;quot;function&amp;quot;!=typeof t||(n=t,t=void 0),!1===n&amp;amp;&amp;amp;(n=Le),this.each(function(){ce.event.remove(this,e,n,t)})}});var Pe=/&amp;lt;script|&amp;lt;style|&amp;lt;link/i,He=/checked\s*(?:[^=]|=\s*.checked.)/i,qe=/^\s*&amp;lt;!\[CDATA\[|\]\]&amp;gt;\s*$/g;function Re(e,t){return fe(e,&amp;quot;table&amp;quot;)&amp;amp;&amp;amp;fe(11!==t.nodeType?t:t.firstChild,&amp;quot;tr&amp;quot;)&amp;amp;&amp;amp;ce(e).children(&amp;quot;tbody&amp;quot;)[0]||e}function Me(e){return e.type=(null!==e.getAttribute(&amp;quot;type&amp;quot;))+&amp;quot;/&amp;quot;+e.type,e}function Ie(e){return&amp;quot;true/&amp;quot;===(e.type||&amp;quot;&amp;quot;).slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(&amp;quot;type&amp;quot;),e}function We(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&amp;amp;&amp;amp;(s=_.get(e).events))for(i in _.remove(t,&amp;quot;handle events&amp;quot;),s)for(n=0,r=s[i].length;n&amp;lt;r;n++)ce.event.add(t,i,s[i][n]);z.hasData(e)&amp;amp;&amp;amp;(o=z.access(e),a=ce.extend({},o),z.set(t,a))}}function Be(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,d=f-1,p=r[0],h=v(p);if(h||1&amp;lt;f&amp;amp;&amp;amp;&amp;quot;string&amp;quot;==typeof p&amp;amp;&amp;amp;!le.checkClone&amp;amp;&amp;amp;He.test(p))return n.each(function(e){var t=n.eq(e);h&amp;amp;&amp;amp;(r[0]=p.call(this,e,t.html())),Be(t,r,i,o)});if(f&amp;amp;&amp;amp;(t=(e=Ae(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&amp;amp;&amp;amp;(e=t),t||o)){for(s=(a=ce.map(Ee(e,&amp;quot;script&amp;quot;),Me)).length;c&amp;lt;f;c++)u=e,c!==d&amp;amp;&amp;amp;(u=ce.clone(u,!0,!0),s&amp;amp;&amp;amp;ce.merge(a,Ee(u,&amp;quot;script&amp;quot;))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,ce.map(a,Ie),c=0;c&amp;lt;s;c++)u=a[c],Ce.test(u.type||&amp;quot;&amp;quot;)&amp;amp;&amp;amp;!_.access(u,&amp;quot;globalEval&amp;quot;)&amp;amp;&amp;amp;ce.contains(l,u)&amp;amp;&amp;amp;(u.src&amp;amp;&amp;amp;&amp;quot;module&amp;quot;!==(u.type||&amp;quot;&amp;quot;).toLowerCase()?ce._evalUrl&amp;amp;&amp;amp;!u.noModule&amp;amp;&amp;amp;ce._evalUrl(u.src,{nonce:u.nonce||u.getAttribute(&amp;quot;nonce&amp;quot;)},l):b(u.textContent.replace(qe,&amp;quot;&amp;quot;),u,l))}return n}function Fe(e,t,n){for(var r,i=t?ce.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||ce.cleanData(Ee(r)),r.parentNode&amp;amp;&amp;amp;(n&amp;amp;&amp;amp;J(r)&amp;amp;&amp;amp;ke(Ee(r,&amp;quot;script&amp;quot;)),r.parentNode.removeChild(r));return e}ce.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=J(e);if(!(le.noCloneChecked||1!==e.nodeType&amp;amp;&amp;amp;11!==e.nodeType||ce.isXMLDoc(e)))for(a=Ee(c),r=0,i=(o=Ee(e)).length;r&amp;lt;i;r++)s=o[r],u=a[r],void 0,&amp;quot;input&amp;quot;===(l=u.nodeName.toLowerCase())&amp;amp;&amp;amp;xe.test(s.type)?u.checked=s.checked:&amp;quot;input&amp;quot;!==l&amp;amp;&amp;amp;&amp;quot;textarea&amp;quot;!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||Ee(e),a=a||Ee(c),r=0,i=o.length;r&amp;lt;i;r++)We(o[r],a[r]);else We(e,c);return 0&amp;lt;(a=Ee(c,&amp;quot;script&amp;quot;)).length&amp;amp;&amp;amp;ke(a,!f&amp;amp;&amp;amp;Ee(e,&amp;quot;script&amp;quot;)),c},cleanData:function(e){for(var t,n,r,i=ce.event.special,o=0;void 0!==(n=e[o]);o++)if(F(n)){if(t=n[_.expando]){if(t.events)for(r in t.events)i[r]?ce.event.remove(n,r):ce.removeEvent(n,r,t.handle);n[_.expando]=void 0}n[z.expando]&amp;amp;&amp;amp;(n[z.expando]=void 0)}}}),ce.fn.extend({detach:function(e){return Fe(this,e,!0)},remove:function(e){return Fe(this,e)},text:function(e){return R(this,function(e){return void 0===e?ce.text(this):this.empty().each(function(){1!==this.nodeType&amp;amp;&amp;amp;11!==this.nodeType&amp;amp;&amp;amp;9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Be(this,arguments,function(e){1!==this.nodeType&amp;amp;&amp;amp;11!==this.nodeType&amp;amp;&amp;amp;9!==this.nodeType||Re(this,e).appendChild(e)})},prepend:function(){return Be(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Re(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Be(this,arguments,function(e){this.parentNode&amp;amp;&amp;amp;this.parentNode.insertBefore(e,this)})},after:function(){return Be(this,arguments,function(e){this.parentNode&amp;amp;&amp;amp;this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&amp;amp;&amp;amp;(ce.cleanData(Ee(e,!1)),e.textContent=&amp;quot;&amp;quot;);return this},clone:function(e,t){return e=null!=e&amp;amp;&amp;amp;e,t=null==t?e:t,this.map(function(){return ce.clone(this,e,t)})},html:function(e){return R(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&amp;amp;&amp;amp;1===t.nodeType)return t.innerHTML;if(&amp;quot;string&amp;quot;==typeof e&amp;amp;&amp;amp;!Pe.test(e)&amp;amp;&amp;amp;!Te[(we.exec(e)||[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;])[1].toLowerCase()]){e=ce.htmlPrefilter(e);try{for(;n&amp;lt;r;n++)1===(t=this[n]||{}).nodeType&amp;amp;&amp;amp;(ce.cleanData(Ee(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&amp;amp;&amp;amp;this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Be(this,arguments,function(e){var t=this.parentNode;ce.inArray(this,n)&amp;lt;0&amp;amp;&amp;amp;(ce.cleanData(Ee(this)),t&amp;amp;&amp;amp;t.replaceChild(e,this))},n)}}),ce.each({appendTo:&amp;quot;append&amp;quot;,prependTo:&amp;quot;prepend&amp;quot;,insertBefore:&amp;quot;before&amp;quot;,insertAfter:&amp;quot;after&amp;quot;,replaceAll:&amp;quot;replaceWith&amp;quot;},function(e,a){ce.fn[e]=function(e){for(var t,n=[],r=ce(e),i=r.length-1,o=0;o&amp;lt;=i;o++)t=o===i?this:this.clone(!0),ce(r[o])[a](t),s.apply(n,t.get());return this.pushStack(n)}});var $e=new RegExp(&amp;quot;^(&amp;quot;+Q+&amp;quot;)(?!px)[a-z%]+$&amp;quot;,&amp;quot;i&amp;quot;),_e=/^--/,ze=function(e){var t=e.ownerDocument.defaultView;return t&amp;amp;&amp;amp;t.opener||(t=ie),t.getComputedStyle(e)},Ue=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Xe=new RegExp(G.join(&amp;quot;|&amp;quot;),&amp;quot;i&amp;quot;);function Ve(e,t,n){var r,i,o,a,s=_e.test(t),u=e.style;return(n=n||ze(e))&amp;amp;&amp;amp;(a=n.getPropertyValue(t)||n[t],s&amp;amp;&amp;amp;a&amp;amp;&amp;amp;(a=a.replace(ve,&amp;quot;$1&amp;quot;)||void 0),&amp;quot;&amp;quot;!==a||J(e)||(a=ce.style(e,t)),!le.pixelBoxStyles()&amp;amp;&amp;amp;$e.test(a)&amp;amp;&amp;amp;Xe.test(t)&amp;amp;&amp;amp;(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+&amp;quot;&amp;quot;:a}function Qe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText=&amp;quot;position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0&amp;quot;,l.style.cssText=&amp;quot;position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%&amp;quot;,K.appendChild(u).appendChild(l);var e=ie.getComputedStyle(l);n=&amp;quot;1%&amp;quot;!==e.top,s=12===t(e.marginLeft),l.style.right=&amp;quot;60%&amp;quot;,o=36===t(e.right),r=36===t(e.width),l.style.position=&amp;quot;absolute&amp;quot;,i=12===t(l.offsetWidth/3),K.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=m.createElement(&amp;quot;div&amp;quot;),l=m.createElement(&amp;quot;div&amp;quot;);l.style&amp;amp;&amp;amp;(l.style.backgroundClip=&amp;quot;content-box&amp;quot;,l.cloneNode(!0).style.backgroundClip=&amp;quot;&amp;quot;,le.clearCloneStyle=&amp;quot;content-box&amp;quot;===l.style.backgroundClip,ce.extend(le,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&amp;amp;&amp;amp;(e=m.createElement(&amp;quot;table&amp;quot;),t=m.createElement(&amp;quot;tr&amp;quot;),n=m.createElement(&amp;quot;div&amp;quot;),e.style.cssText=&amp;quot;position:absolute;left:-11111px;border-collapse:separate&amp;quot;,t.style.cssText=&amp;quot;box-sizing:content-box;border:1px solid&amp;quot;,t.style.height=&amp;quot;1px&amp;quot;,n.style.height=&amp;quot;9px&amp;quot;,n.style.display=&amp;quot;block&amp;quot;,K.appendChild(e).appendChild(t).appendChild(n),r=ie.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,K.removeChild(e)),a}}))}();var Ye=[&amp;quot;Webkit&amp;quot;,&amp;quot;Moz&amp;quot;,&amp;quot;ms&amp;quot;],Ge=m.createElement(&amp;quot;div&amp;quot;).style,Ke={};function Je(e){var t=ce.cssProps[e]||Ke[e];return t||(e in Ge?e:Ke[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Ye.length;while(n--)if((e=Ye[n]+t)in Ge)return e}(e)||e)}var Ze,et,tt=/^(none|table(?!-c[ea]).+)/,nt={position:&amp;quot;absolute&amp;quot;,visibility:&amp;quot;hidden&amp;quot;,display:&amp;quot;block&amp;quot;},rt={letterSpacing:&amp;quot;0&amp;quot;,fontWeight:&amp;quot;400&amp;quot;};function it(e,t,n){var r=Y.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||&amp;quot;px&amp;quot;):t}function ot(e,t,n,r,i,o){var a=&amp;quot;width&amp;quot;===t?1:0,s=0,u=0,l=0;if(n===(r?&amp;quot;border&amp;quot;:&amp;quot;content&amp;quot;))return 0;for(;a&amp;lt;4;a+=2)&amp;quot;margin&amp;quot;===n&amp;amp;&amp;amp;(l+=ce.css(e,n+G[a],!0,i)),r?(&amp;quot;content&amp;quot;===n&amp;amp;&amp;amp;(u-=ce.css(e,&amp;quot;padding&amp;quot;+G[a],!0,i)),&amp;quot;margin&amp;quot;!==n&amp;amp;&amp;amp;(u-=ce.css(e,&amp;quot;border&amp;quot;+G[a]+&amp;quot;Width&amp;quot;,!0,i))):(u+=ce.css(e,&amp;quot;padding&amp;quot;+G[a],!0,i),&amp;quot;padding&amp;quot;!==n?u+=ce.css(e,&amp;quot;border&amp;quot;+G[a]+&amp;quot;Width&amp;quot;,!0,i):s+=ce.css(e,&amp;quot;border&amp;quot;+G[a]+&amp;quot;Width&amp;quot;,!0,i));return!r&amp;amp;&amp;amp;0&amp;lt;=o&amp;amp;&amp;amp;(u+=Math.max(0,Math.ceil(e[&amp;quot;offset&amp;quot;+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u+l}function at(e,t,n){var r=ze(e),i=(!le.boxSizingReliable()||n)&amp;amp;&amp;amp;&amp;quot;border-box&amp;quot;===ce.css(e,&amp;quot;boxSizing&amp;quot;,!1,r),o=i,a=Ve(e,t,r),s=&amp;quot;offset&amp;quot;+t[0].toUpperCase()+t.slice(1);if($e.test(a)){if(!n)return a;a=&amp;quot;auto&amp;quot;}return(!le.boxSizingReliable()&amp;amp;&amp;amp;i||!le.reliableTrDimensions()&amp;amp;&amp;amp;fe(e,&amp;quot;tr&amp;quot;)||&amp;quot;auto&amp;quot;===a||!parseFloat(a)&amp;amp;&amp;amp;&amp;quot;inline&amp;quot;===ce.css(e,&amp;quot;display&amp;quot;,!1,r))&amp;amp;&amp;amp;e.getClientRects().length&amp;amp;&amp;amp;(i=&amp;quot;border-box&amp;quot;===ce.css(e,&amp;quot;boxSizing&amp;quot;,!1,r),(o=s in e)&amp;amp;&amp;amp;(a=e[s])),(a=parseFloat(a)||0)+ot(e,t,n||(i?&amp;quot;border&amp;quot;:&amp;quot;content&amp;quot;),o,r,a)+&amp;quot;px&amp;quot;}ce.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ve(e,&amp;quot;opacity&amp;quot;);return&amp;quot;&amp;quot;===n?&amp;quot;1&amp;quot;:n}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(e,t,n,r){if(e&amp;amp;&amp;amp;3!==e.nodeType&amp;amp;&amp;amp;8!==e.nodeType&amp;amp;&amp;amp;e.style){var i,o,a,s=B(t),u=_e.test(t),l=e.style;if(u||(t=Je(s)),a=ce.cssHooks[t]||ce.cssHooks[s],void 0===n)return a&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in a&amp;amp;&amp;amp;void 0!==(i=a.get(e,!1,r))?i:l[t];&amp;quot;string&amp;quot;===(o=typeof n)&amp;amp;&amp;amp;(i=Y.exec(n))&amp;amp;&amp;amp;i[1]&amp;amp;&amp;amp;(n=function(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return ce.css(e,t,&amp;quot;&amp;quot;)},u=s(),l=n&amp;amp;&amp;amp;n[3]||(ce.cssNumber[t]?&amp;quot;&amp;quot;:&amp;quot;px&amp;quot;),c=e.nodeType&amp;amp;&amp;amp;(ce.cssNumber[t]||&amp;quot;px&amp;quot;!==l&amp;amp;&amp;amp;+u)&amp;amp;&amp;amp;Y.exec(ce.css(e,t));if(c&amp;amp;&amp;amp;c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)ce.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))&amp;lt;=0&amp;amp;&amp;amp;(a=0),c/=o;c*=2,ce.style(e,t,c+l),n=n||[]}return n&amp;amp;&amp;amp;(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&amp;amp;&amp;amp;(r.unit=l,r.start=c,r.end=i)),i}(e,t,i),o=&amp;quot;number&amp;quot;),null!=n&amp;amp;&amp;amp;n==n&amp;amp;&amp;amp;(&amp;quot;number&amp;quot;!==o||u||(n+=i&amp;amp;&amp;amp;i[3]||(ce.cssNumber[s]?&amp;quot;&amp;quot;:&amp;quot;px&amp;quot;)),le.clearCloneStyle||&amp;quot;&amp;quot;!==n||0!==t.indexOf(&amp;quot;background&amp;quot;)||(l[t]=&amp;quot;inherit&amp;quot;),a&amp;amp;&amp;amp;&amp;quot;set&amp;quot;in a&amp;amp;&amp;amp;void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=B(t);return _e.test(t)||(t=Je(s)),(a=ce.cssHooks[t]||ce.cssHooks[s])&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in a&amp;amp;&amp;amp;(i=a.get(e,!0,n)),void 0===i&amp;amp;&amp;amp;(i=Ve(e,t,r)),&amp;quot;normal&amp;quot;===i&amp;amp;&amp;amp;t in rt&amp;amp;&amp;amp;(i=rt[t]),&amp;quot;&amp;quot;===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),ce.each([&amp;quot;height&amp;quot;,&amp;quot;width&amp;quot;],function(e,u){ce.cssHooks[u]={get:function(e,t,n){if(t)return!tt.test(ce.css(e,&amp;quot;display&amp;quot;))||e.getClientRects().length&amp;amp;&amp;amp;e.getBoundingClientRect().width?at(e,u,n):Ue(e,nt,function(){return at(e,u,n)})},set:function(e,t,n){var r,i=ze(e),o=!le.scrollboxSize()&amp;amp;&amp;amp;&amp;quot;absolute&amp;quot;===i.position,a=(o||n)&amp;amp;&amp;amp;&amp;quot;border-box&amp;quot;===ce.css(e,&amp;quot;boxSizing&amp;quot;,!1,i),s=n?ot(e,u,n,a,i):0;return a&amp;amp;&amp;amp;o&amp;amp;&amp;amp;(s-=Math.ceil(e[&amp;quot;offset&amp;quot;+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-ot(e,u,&amp;quot;border&amp;quot;,!1,i)-.5)),s&amp;amp;&amp;amp;(r=Y.exec(t))&amp;amp;&amp;amp;&amp;quot;px&amp;quot;!==(r[3]||&amp;quot;px&amp;quot;)&amp;amp;&amp;amp;(e.style[u]=t,t=ce.css(e,u)),it(0,t,s)}}}),ce.cssHooks.marginLeft=Qe(le.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ve(e,&amp;quot;marginLeft&amp;quot;))||e.getBoundingClientRect().left-Ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+&amp;quot;px&amp;quot;}),ce.each({margin:&amp;quot;&amp;quot;,padding:&amp;quot;&amp;quot;,border:&amp;quot;Width&amp;quot;},function(i,o){ce.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r=&amp;quot;string&amp;quot;==typeof e?e.split(&amp;quot; &amp;quot;):[e];t&amp;lt;4;t++)n[i+G[t]+o]=r[t]||r[t-2]||r[0];return n}},&amp;quot;margin&amp;quot;!==i&amp;amp;&amp;amp;(ce.cssHooks[i+o].set=it)}),ce.fn.extend({css:function(e,t){return R(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=ze(e),i=t.length;a&amp;lt;i;a++)o[t[a]]=ce.css(e,t[a],!1,r);return o}return void 0!==n?ce.style(e,t,n):ce.css(e,t)},e,t,1&amp;lt;arguments.length)}}),ce.fn.delay=function(r,e){return r=ce.fx&amp;amp;&amp;amp;ce.fx.speeds[r]||r,e=e||&amp;quot;fx&amp;quot;,this.queue(e,function(e,t){var n=ie.setTimeout(e,r);t.stop=function(){ie.clearTimeout(n)}})},Ze=m.createElement(&amp;quot;input&amp;quot;),et=m.createElement(&amp;quot;select&amp;quot;).appendChild(m.createElement(&amp;quot;option&amp;quot;)),Ze.type=&amp;quot;checkbox&amp;quot;,le.checkOn=&amp;quot;&amp;quot;!==Ze.value,le.optSelected=et.selected,(Ze=m.createElement(&amp;quot;input&amp;quot;)).value=&amp;quot;t&amp;quot;,Ze.type=&amp;quot;radio&amp;quot;,le.radioValue=&amp;quot;t&amp;quot;===Ze.value;var st,ut=ce.expr.attrHandle;ce.fn.extend({attr:function(e,t){return R(this,ce.attr,e,t,1&amp;lt;arguments.length)},removeAttr:function(e){return this.each(function(){ce.removeAttr(this,e)})}}),ce.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&amp;amp;&amp;amp;8!==o&amp;amp;&amp;amp;2!==o)return&amp;quot;undefined&amp;quot;==typeof e.getAttribute?ce.prop(e,t,n):(1===o&amp;amp;&amp;amp;ce.isXMLDoc(e)||(i=ce.attrHooks[t.toLowerCase()]||(ce.expr.match.bool.test(t)?st:void 0)),void 0!==n?null===n?void ce.removeAttr(e,t):i&amp;amp;&amp;amp;&amp;quot;set&amp;quot;in i&amp;amp;&amp;amp;void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+&amp;quot;&amp;quot;),n):i&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in i&amp;amp;&amp;amp;null!==(r=i.get(e,t))?r:null==(r=ce.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!le.radioValue&amp;amp;&amp;amp;&amp;quot;radio&amp;quot;===t&amp;amp;&amp;amp;fe(e,&amp;quot;input&amp;quot;)){var n=e.value;return e.setAttribute(&amp;quot;type&amp;quot;,t),n&amp;amp;&amp;amp;(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&amp;amp;&amp;amp;t.match(N);if(i&amp;amp;&amp;amp;1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),st={set:function(e,t,n){return!1===t?ce.removeAttr(e,n):e.setAttribute(n,n),n}},ce.each(ce.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ut[t]||ce.find.attr;ut[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ut[o],ut[o]=r,r=null!=a(e,t,n)?o:null,ut[o]=i),r}});var lt=/^(?:input|select|textarea|button)$/i,ct=/^(?:a|area)$/i;function ft(e){return(e.match(N)||[]).join(&amp;quot; &amp;quot;)}function dt(e){return e.getAttribute&amp;amp;&amp;amp;e.getAttribute(&amp;quot;class&amp;quot;)||&amp;quot;&amp;quot;}function pt(e){return Array.isArray(e)?e:&amp;quot;string&amp;quot;==typeof e&amp;amp;&amp;amp;e.match(N)||[]}ce.fn.extend({prop:function(e,t){return R(this,ce.prop,e,t,1&amp;lt;arguments.length)},removeProp:function(e){return this.each(function(){delete this[ce.propFix[e]||e]})}}),ce.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&amp;amp;&amp;amp;8!==o&amp;amp;&amp;amp;2!==o)return 1===o&amp;amp;&amp;amp;ce.isXMLDoc(e)||(t=ce.propFix[t]||t,i=ce.propHooks[t]),void 0!==n?i&amp;amp;&amp;amp;&amp;quot;set&amp;quot;in i&amp;amp;&amp;amp;void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in i&amp;amp;&amp;amp;null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ce.find.attr(e,&amp;quot;tabindex&amp;quot;);return t?parseInt(t,10):lt.test(e.nodeName)||ct.test(e.nodeName)&amp;amp;&amp;amp;e.href?0:-1}}},propFix:{&amp;quot;for&amp;quot;:&amp;quot;htmlFor&amp;quot;,&amp;quot;class&amp;quot;:&amp;quot;className&amp;quot;}}),le.optSelected||(ce.propHooks.selected={get:function(e){var t=e.parentNode;return t&amp;amp;&amp;amp;t.parentNode&amp;amp;&amp;amp;t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&amp;amp;&amp;amp;(t.selectedIndex,t.parentNode&amp;amp;&amp;amp;t.parentNode.selectedIndex)}}),ce.each([&amp;quot;tabIndex&amp;quot;,&amp;quot;readOnly&amp;quot;,&amp;quot;maxLength&amp;quot;,&amp;quot;cellSpacing&amp;quot;,&amp;quot;cellPadding&amp;quot;,&amp;quot;rowSpan&amp;quot;,&amp;quot;colSpan&amp;quot;,&amp;quot;useMap&amp;quot;,&amp;quot;frameBorder&amp;quot;,&amp;quot;contentEditable&amp;quot;],function(){ce.propFix[this.toLowerCase()]=this}),ce.fn.extend({addClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).addClass(t.call(this,e,dt(this)))}):(e=pt(t)).length?this.each(function(){if(r=dt(this),n=1===this.nodeType&amp;amp;&amp;amp;&amp;quot; &amp;quot;+ft(r)+&amp;quot; &amp;quot;){for(o=0;o&amp;lt;e.length;o++)i=e[o],n.indexOf(&amp;quot; &amp;quot;+i+&amp;quot; &amp;quot;)&amp;lt;0&amp;amp;&amp;amp;(n+=i+&amp;quot; &amp;quot;);a=ft(n),r!==a&amp;amp;&amp;amp;this.setAttribute(&amp;quot;class&amp;quot;,a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).removeClass(t.call(this,e,dt(this)))}):arguments.length?(e=pt(t)).length?this.each(function(){if(r=dt(this),n=1===this.nodeType&amp;amp;&amp;amp;&amp;quot; &amp;quot;+ft(r)+&amp;quot; &amp;quot;){for(o=0;o&amp;lt;e.length;o++){i=e[o];while(-1&amp;lt;n.indexOf(&amp;quot; &amp;quot;+i+&amp;quot; &amp;quot;))n=n.replace(&amp;quot; &amp;quot;+i+&amp;quot; &amp;quot;,&amp;quot; &amp;quot;)}a=ft(n),r!==a&amp;amp;&amp;amp;this.setAttribute(&amp;quot;class&amp;quot;,a)}}):this:this.attr(&amp;quot;class&amp;quot;,&amp;quot;&amp;quot;)},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s=&amp;quot;string&amp;quot;===a||Array.isArray(t);return v(t)?this.each(function(e){ce(this).toggleClass(t.call(this,e,dt(this),n),n)}):&amp;quot;boolean&amp;quot;==typeof n&amp;amp;&amp;amp;s?n?this.addClass(t):this.removeClass(t):(e=pt(t),this.each(function(){if(s)for(o=ce(this),i=0;i&amp;lt;e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&amp;amp;&amp;amp;&amp;quot;boolean&amp;quot;!==a||((r=dt(this))&amp;amp;&amp;amp;_.set(this,&amp;quot;__className__&amp;quot;,r),this.setAttribute&amp;amp;&amp;amp;this.setAttribute(&amp;quot;class&amp;quot;,r||!1===t?&amp;quot;&amp;quot;:_.get(this,&amp;quot;__className__&amp;quot;)||&amp;quot;&amp;quot;))}))},hasClass:function(e){var t,n,r=0;t=&amp;quot; &amp;quot;+e+&amp;quot; &amp;quot;;while(n=this[r++])if(1===n.nodeType&amp;amp;&amp;amp;-1&amp;lt;(&amp;quot; &amp;quot;+ft(dt(n))+&amp;quot; &amp;quot;).indexOf(t))return!0;return!1}});var ht=/\r/g;ce.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=v(n),this.each(function(e){var t;1===this.nodeType&amp;amp;&amp;amp;(null==(t=i?n.call(this,e,ce(this).val()):n)?t=&amp;quot;&amp;quot;:&amp;quot;number&amp;quot;==typeof t?t+=&amp;quot;&amp;quot;:Array.isArray(t)&amp;amp;&amp;amp;(t=ce.map(t,function(e){return null==e?&amp;quot;&amp;quot;:e+&amp;quot;&amp;quot;})),(r=ce.valHooks[this.type]||ce.valHooks[this.nodeName.toLowerCase()])&amp;amp;&amp;amp;&amp;quot;set&amp;quot;in r&amp;amp;&amp;amp;void 0!==r.set(this,t,&amp;quot;value&amp;quot;)||(this.value=t))})):t?(r=ce.valHooks[t.type]||ce.valHooks[t.nodeName.toLowerCase()])&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in r&amp;amp;&amp;amp;void 0!==(e=r.get(t,&amp;quot;value&amp;quot;))?e:&amp;quot;string&amp;quot;==typeof(e=t.value)?e.replace(ht,&amp;quot;&amp;quot;):null==e?&amp;quot;&amp;quot;:e:void 0}}),ce.extend({valHooks:{option:{get:function(e){var t=ce.find.attr(e,&amp;quot;value&amp;quot;);return null!=t?t:ft(ce.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a=&amp;quot;select-one&amp;quot;===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o&amp;lt;0?u:a?o:0;r&amp;lt;u;r++)if(((n=i[r]).selected||r===o)&amp;amp;&amp;amp;!n.disabled&amp;amp;&amp;amp;(!n.parentNode.disabled||!fe(n.parentNode,&amp;quot;optgroup&amp;quot;))){if(t=ce(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=ce.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1&amp;lt;ce.inArray(ce.valHooks.option.get(r),o))&amp;amp;&amp;amp;(n=!0);return n||(e.selectedIndex=-1),o}}}}),ce.each([&amp;quot;radio&amp;quot;,&amp;quot;checkbox&amp;quot;],function(){ce.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1&amp;lt;ce.inArray(ce(e).val(),t)}},le.checkOn||(ce.valHooks[this].get=function(e){return null===e.getAttribute(&amp;quot;value&amp;quot;)?&amp;quot;on&amp;quot;:e.value})}),ce.parseXML=function(e){var t,n;if(!e||&amp;quot;string&amp;quot;!=typeof e)return null;try{t=(new ie.DOMParser).parseFromString(e,&amp;quot;text/xml&amp;quot;)}catch(e){}return n=t&amp;amp;&amp;amp;t.getElementsByTagName(&amp;quot;parsererror&amp;quot;)[0],t&amp;amp;&amp;amp;!n||ce.error(&amp;quot;Invalid XML: &amp;quot;+(n?ce.map(n.childNodes,function(e){return e.textContent}).join(&amp;quot;\n&amp;quot;):e)),t};var gt=/^(?:focusinfocus|focusoutblur)$/,vt=function(e){e.stopPropagation()};ce.extend(ce.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,d=[n||m],p=ue.call(e,&amp;quot;type&amp;quot;)?e.type:e,h=ue.call(e,&amp;quot;namespace&amp;quot;)?e.namespace.split(&amp;quot;.&amp;quot;):[];if(o=f=a=n=n||m,3!==n.nodeType&amp;amp;&amp;amp;8!==n.nodeType&amp;amp;&amp;amp;!gt.test(p+ce.event.triggered)&amp;amp;&amp;amp;(-1&amp;lt;p.indexOf(&amp;quot;.&amp;quot;)&amp;amp;&amp;amp;(p=(h=p.split(&amp;quot;.&amp;quot;)).shift(),h.sort()),u=p.indexOf(&amp;quot;:&amp;quot;)&amp;lt;0&amp;amp;&amp;amp;&amp;quot;on&amp;quot;+p,(e=e[ce.expando]?e:new ce.Event(p,&amp;quot;object&amp;quot;==typeof e&amp;amp;&amp;amp;e)).isTrigger=r?2:3,e.namespace=h.join(&amp;quot;.&amp;quot;),e.rnamespace=e.namespace?new RegExp(&amp;quot;(^|\\.)&amp;quot;+h.join(&amp;quot;\\.(?:.*\\.|)&amp;quot;)+&amp;quot;(\\.|$)&amp;quot;):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:ce.makeArray(t,[e]),c=ce.event.special[p]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&amp;amp;&amp;amp;!c.noBubble&amp;amp;&amp;amp;!y(n)){for(s=c.delegateType||p,gt.test(s+p)||(o=o.parentNode);o;o=o.parentNode)d.push(o),a=o;a===(n.ownerDocument||m)&amp;amp;&amp;amp;d.push(a.defaultView||a.parentWindow||ie)}i=0;while((o=d[i++])&amp;amp;&amp;amp;!e.isPropagationStopped())f=o,e.type=1&amp;lt;i?s:c.bindType||p,(l=(_.get(o,&amp;quot;events&amp;quot;)||Object.create(null))[e.type]&amp;amp;&amp;amp;_.get(o,&amp;quot;handle&amp;quot;))&amp;amp;&amp;amp;l.apply(o,t),(l=u&amp;amp;&amp;amp;o[u])&amp;amp;&amp;amp;l.apply&amp;amp;&amp;amp;F(o)&amp;amp;&amp;amp;(e.result=l.apply(o,t),!1===e.result&amp;amp;&amp;amp;e.preventDefault());return e.type=p,r||e.isDefaultPrevented()||c._default&amp;amp;&amp;amp;!1!==c._default.apply(d.pop(),t)||!F(n)||u&amp;amp;&amp;amp;v(n[p])&amp;amp;&amp;amp;!y(n)&amp;amp;&amp;amp;((a=n[u])&amp;amp;&amp;amp;(n[u]=null),ce.event.triggered=p,e.isPropagationStopped()&amp;amp;&amp;amp;f.addEventListener(p,vt),n[p](),e.isPropagationStopped()&amp;amp;&amp;amp;f.removeEventListener(p,vt),ce.event.triggered=void 0,a&amp;amp;&amp;amp;(n[u]=a)),e.result}},simulate:function(e,t,n){var r=ce.extend(new ce.Event,n,{type:e,isSimulated:!0});ce.event.trigger(r,null,t)}}),ce.fn.extend({trigger:function(e,t){return this.each(function(){ce.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ce.event.trigger(e,t,n,!0)}});var yt,mt=/\[\]$/,bt=/\r?\n/g,xt=/^(?:submit|button|image|reset|file)$/i,wt=/^(?:input|select|textarea|keygen)/i;function Ct(n,e,r,i){var t;if(Array.isArray(e))ce.each(e,function(e,t){r||mt.test(n)?i(n,t):Ct(n+&amp;quot;[&amp;quot;+(&amp;quot;object&amp;quot;==typeof t&amp;amp;&amp;amp;null!=t?e:&amp;quot;&amp;quot;)+&amp;quot;]&amp;quot;,t,r,i)});else if(r||&amp;quot;object&amp;quot;!==x(e))i(n,e);else for(t in e)Ct(n+&amp;quot;[&amp;quot;+t+&amp;quot;]&amp;quot;,e[t],r,i)}ce.param=function(e,t){var n,r=[],i=function(e,t){var n=v(t)?t():t;r[r.length]=encodeURIComponent(e)+&amp;quot;=&amp;quot;+encodeURIComponent(null==n?&amp;quot;&amp;quot;:n)};if(null==e)return&amp;quot;&amp;quot;;if(Array.isArray(e)||e.jquery&amp;amp;&amp;amp;!ce.isPlainObject(e))ce.each(e,function(){i(this.name,this.value)});else for(n in e)Ct(n,e[n],t,i);return r.join(&amp;quot;&amp;amp;&amp;quot;)},ce.fn.extend({serialize:function(){return ce.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ce.prop(this,&amp;quot;elements&amp;quot;);return e?ce.makeArray(e):this}).filter(function(){var e=this.type;return this.name&amp;amp;&amp;amp;!ce(this).is(&amp;quot;:disabled&amp;quot;)&amp;amp;&amp;amp;wt.test(this.nodeName)&amp;amp;&amp;amp;!xt.test(e)&amp;amp;&amp;amp;(this.checked||!xe.test(e))}).map(function(e,t){var n=ce(this).val();return null==n?null:Array.isArray(n)?ce.map(n,function(e){return{name:t.name,value:e.replace(bt,&amp;quot;\r\n&amp;quot;)}}):{name:t.name,value:n.replace(bt,&amp;quot;\r\n&amp;quot;)}}).get()}}),ce.fn.extend({wrapAll:function(e){var t;return this[0]&amp;amp;&amp;amp;(v(e)&amp;amp;&amp;amp;(e=e.call(this[0])),t=ce(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&amp;amp;&amp;amp;t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return v(n)?this.each(function(e){ce(this).wrapInner(n.call(this,e))}):this.each(function(){var e=ce(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=v(t);return this.each(function(e){ce(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not(&amp;quot;body&amp;quot;).each(function(){ce(this).replaceWith(this.childNodes)}),this}}),ce.expr.pseudos.hidden=function(e){return!ce.expr.pseudos.visible(e)},ce.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},le.createHTMLDocument=((yt=m.implementation.createHTMLDocument(&amp;quot;&amp;quot;).body).innerHTML=&amp;quot;&amp;lt;form&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;form&amp;gt;&amp;lt;/form&amp;gt;&amp;quot;,2===yt.childNodes.length),ce.parseHTML=function(e,t,n){return&amp;quot;string&amp;quot;!=typeof e?[]:(&amp;quot;boolean&amp;quot;==typeof t&amp;amp;&amp;amp;(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=m.implementation.createHTMLDocument(&amp;quot;&amp;quot;)).createElement(&amp;quot;base&amp;quot;)).href=m.location.href,t.head.appendChild(r)):t=m),o=!n&amp;amp;&amp;amp;[],(i=C.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&amp;amp;&amp;amp;o.length&amp;amp;&amp;amp;ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,&amp;quot;position&amp;quot;),c=ce(e),f={};&amp;quot;static&amp;quot;===l&amp;amp;&amp;amp;(e.style.position=&amp;quot;relative&amp;quot;),s=c.offset(),o=ce.css(e,&amp;quot;top&amp;quot;),u=ce.css(e,&amp;quot;left&amp;quot;),(&amp;quot;absolute&amp;quot;===l||&amp;quot;fixed&amp;quot;===l)&amp;amp;&amp;amp;-1&amp;lt;(o+u).indexOf(&amp;quot;auto&amp;quot;)?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&amp;amp;&amp;amp;(t=t.call(e,n,ce.extend({},s))),null!=t.top&amp;amp;&amp;amp;(f.top=t.top-s.top+a),null!=t.left&amp;amp;&amp;amp;(f.left=t.left-s.left+i),&amp;quot;using&amp;quot;in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if(&amp;quot;fixed&amp;quot;===ce.css(r,&amp;quot;position&amp;quot;))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&amp;amp;&amp;amp;(e===n.body||e===n.documentElement)&amp;amp;&amp;amp;&amp;quot;static&amp;quot;===ce.css(e,&amp;quot;position&amp;quot;))e=e.parentNode;e&amp;amp;&amp;amp;e!==r&amp;amp;&amp;amp;1===e.nodeType&amp;amp;&amp;amp;((i=ce(e).offset()).top+=ce.css(e,&amp;quot;borderTopWidth&amp;quot;,!0),i.left+=ce.css(e,&amp;quot;borderLeftWidth&amp;quot;,!0))}return{top:t.top-i.top-ce.css(r,&amp;quot;marginTop&amp;quot;,!0),left:t.left-i.left-ce.css(r,&amp;quot;marginLeft&amp;quot;,!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&amp;amp;&amp;amp;&amp;quot;static&amp;quot;===ce.css(e,&amp;quot;position&amp;quot;))e=e.offsetParent;return e||K})}}),ce.each({scrollLeft:&amp;quot;pageXOffset&amp;quot;,scrollTop:&amp;quot;pageYOffset&amp;quot;},function(t,i){var o=&amp;quot;pageYOffset&amp;quot;===i;ce.fn[t]=function(e){return R(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&amp;amp;&amp;amp;(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each([&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;],function(e,n){ce.cssHooks[n]=Qe(le.pixelPosition,function(e,t){if(t)return t=Ve(e,n),$e.test(t)?ce(e).position()[n]+&amp;quot;px&amp;quot;:t})}),ce.each({Height:&amp;quot;height&amp;quot;,Width:&amp;quot;width&amp;quot;},function(a,s){ce.each({padding:&amp;quot;inner&amp;quot;+a,content:s,&amp;quot;&amp;quot;:&amp;quot;outer&amp;quot;+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&amp;amp;&amp;amp;(r||&amp;quot;boolean&amp;quot;!=typeof e),i=r||(!0===e||!0===t?&amp;quot;margin&amp;quot;:&amp;quot;border&amp;quot;);return R(this,function(e,t,n){var r;return y(e)?0===o.indexOf(&amp;quot;outer&amp;quot;)?e[&amp;quot;inner&amp;quot;+a]:e.document.documentElement[&amp;quot;client&amp;quot;+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body[&amp;quot;scroll&amp;quot;+a],r[&amp;quot;scroll&amp;quot;+a],e.body[&amp;quot;offset&amp;quot;+a],r[&amp;quot;offset&amp;quot;+a],r[&amp;quot;client&amp;quot;+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,&amp;quot;**&amp;quot;):this.off(t,e||&amp;quot;**&amp;quot;,n)},hover:function(e,t){return this.on(&amp;quot;mouseenter&amp;quot;,e).on(&amp;quot;mouseleave&amp;quot;,t||e)}}),ce.each(&amp;quot;blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu&amp;quot;.split(&amp;quot; &amp;quot;),function(e,n){ce.fn[n]=function(e,t){return 0&amp;lt;arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Tt=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;ce.proxy=function(e,t){var n,r,i;if(&amp;quot;string&amp;quot;==typeof t&amp;amp;&amp;amp;(n=e[t],t=e,e=n),v(e))return r=ae.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(ae.call(arguments)))}).guid=e.guid=e.guid||ce.guid++,i},ce.holdReady=function(e){e?ce.readyWait++:ce.ready(!0)},ce.isArray=Array.isArray,ce.parseJSON=JSON.parse,ce.nodeName=fe,ce.isFunction=v,ce.isWindow=y,ce.camelCase=B,ce.type=x,ce.now=Date.now,ce.isNumeric=function(e){var t=ce.type(e);return(&amp;quot;number&amp;quot;===t||&amp;quot;string&amp;quot;===t)&amp;amp;&amp;amp;!isNaN(e-parseFloat(e))},ce.trim=function(e){return null==e?&amp;quot;&amp;quot;:(e+&amp;quot;&amp;quot;).replace(Tt,&amp;quot;$1&amp;quot;)},&amp;quot;function&amp;quot;==typeof define&amp;amp;&amp;amp;define.amd&amp;amp;&amp;amp;define(&amp;quot;jquery&amp;quot;,[],function(){return ce});var Et=ie.jQuery,kt=ie.$;return ce.noConflict=function(e){return ie.$===ce&amp;amp;&amp;amp;(ie.$=kt),e&amp;amp;&amp;amp;ie.jQuery===ce&amp;amp;&amp;amp;(ie.jQuery=Et),ce},&amp;quot;undefined&amp;quot;==typeof e&amp;amp;&amp;amp;(ie.jQuery=ie.$=ce),ce});&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sat, 10 Jan 2026 11:06:06 +0000</pubDate>
        </item>
        <item>
            <title>jquery</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=software:development:web:docs:web:javascript:javascript:jquery:jquery&amp;rev=1768043688</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;jquery&quot;&gt;jQuery&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;jQuery&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;jquery&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-21&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;что_такое_jquery&quot;&gt;Что такое jQuery?&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
jQuery — это быстрая, компактная и многофункциональная библиотека JavaScript. Она значительно упрощает такие задачи, как обход и манипулирование &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;-документами, обработка событий, анимация и Ajax, благодаря удобному &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt;, работающему во множестве браузеров. Благодаря сочетанию универсальности и расширяемости, jQuery изменила подход миллионов людей к написанию JavaScript-кода.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 jQuery?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0447\u0442\u043e_\u0442\u0430\u043a\u043e\u0435_jquery&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;22-722&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;краткий_обзор&quot;&gt;Краткий обзор&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u0440\u0430\u0442\u043a\u0438\u0439_\u043e\u0431\u0437\u043e\u0440&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;723-760&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;обход_и_манипулирование_dom-деревом&quot;&gt;Обход и манипулирование DOM-деревом&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Найдите &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; элемент с классом &lt;code&gt;continue&lt;/code&gt; и измените его &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;-код на &lt;code&gt;Next Step…&lt;/code&gt;.
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=software:development:web:docs:web:javascript:javascript:jquery:jquery&amp;amp;codeblock=0&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_js&quot;&gt;script.js&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code js&quot;&gt;$( &amp;quot;button.continue&amp;quot; ).html( &amp;quot;Next Step...&amp;quot; )&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u0431\u0445\u043e\u0434 \u0438 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 DOM-\u0434\u0435\u0440\u0435\u0432\u043e\u043c&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u0431\u0445\u043e\u0434_\u0438_\u043c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435_dom-\u0434\u0435\u0440\u0435\u0432\u043e\u043c&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;761-1044&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;обработка_событий&quot;&gt;Обработка событий&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Отображать &lt;code&gt;#banner-message&lt;/code&gt; элемент, скрытый в его &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt;-коде, при нажатии &lt;code&gt;display:none&lt;/code&gt; любой кнопки &lt;code&gt;.#button-container&lt;/code&gt;
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=software:development:web:docs:web:javascript:javascript:jquery:jquery&amp;amp;codeblock=1&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_js&quot;&gt;script.js&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code js&quot;&gt;var hiddenBox = $( &amp;quot;#banner-message&amp;quot; );
$( &amp;quot;#button-container button&amp;quot; ).on( &amp;quot;click&amp;quot;, function( event ) {
  hiddenBox.show();
});&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430_\u0441\u043e\u0431\u044b\u0442\u0438\u0439&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;1045-1427&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;ajax&quot;&gt;Ajax&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Вызовите локальный скрипт на сервере,&lt;code&gt; /api/getWeather&lt;/code&gt; передав ему параметр запроса &lt;code&gt;zipcode=97201&lt;/code&gt; , и замените &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;-код элемента &lt;code&gt;#weather-temp&lt;/code&gt; на полученный текст.
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=software:development:web:docs:web:javascript:javascript:jquery:jquery&amp;amp;codeblock=2&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_js&quot;&gt;script.js&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code js&quot;&gt;$.ajax({
  url: &amp;quot;/api/getWeather&amp;quot;,
  data: {
    zipcode: 97201
  },
  success: function( result ) {
    $( &amp;quot;#weather-temp&amp;quot; ).html( &amp;quot;&amp;lt;strong&amp;gt;&amp;quot; + result + &amp;quot;&amp;lt;/strong&amp;gt; degrees&amp;quot; );
  }
});&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Ajax&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;ajax&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;1428-1924&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;связанные_проекты&quot;&gt;Связанные проекты&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;/div&gt;

&lt;h4 id=&quot;jquery_ui&quot;&gt;jQuery UI&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Данный проект находится в режиме технического обслуживания. &lt;a href=&quot;https://jqueryui.com/&quot; class=&quot;urlextern&quot; title=&quot;https://jqueryui.com/&quot; rel=&quot;ugc nofollow&quot;&gt;Узнайте больше.&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;jquery_mobile&quot;&gt;jQuery Mobile&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Данный проект устарел. &lt;a href=&quot;https://jquerymobile.com/&quot; class=&quot;urlextern&quot; title=&quot;https://jquerymobile.com/&quot; rel=&quot;ugc nofollow&quot;&gt;Узнайте больше.&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435_\u043f\u0440\u043e\u0435\u043a\u0442\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;1925-2278&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;дополнения_и_файлы&quot;&gt;Дополнения и Файлы&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://jquery.com/&quot; class=&quot;urlextern&quot; title=&quot;https://jquery.com/&quot; rel=&quot;ugc nofollow&quot;&gt;Ссылка на оригинальную статью&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://api.jquery.com/&quot; class=&quot;urlextern&quot; title=&quot;https://api.jquery.com/&quot; rel=&quot;ugc nofollow&quot;&gt;Документация по API jQuery&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=software:development:web:docs:web:javascript:javascript:jquery:jquery-3.7.1.min.js&quot; class=&quot;media mediafile mf_js&quot; title=&quot;software:development:web:docs:web:javascript:javascript:jquery:jquery-3.7.1.min.js (131.6 KB)&quot;&gt;jquery-3.7.1.min.js&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=software:development:web:docs:web:javascript:javascript:jquery:jquery_3.7.1.rar&quot; class=&quot;media mediafile mf_rar&quot; title=&quot;software:development:web:docs:web:javascript:javascript:jquery:jquery_3.7.1.rar (144 KB)&quot;&gt;jquery_3.7.1.rar&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://github.com/jquery/jquery&quot; class=&quot;interwiki iw_github&quot; title=&quot;https://github.com/jquery/jquery&quot;&gt;jquery&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://git.wwoss.ru/&quot; class=&quot;interwiki iw_gitea&quot; title=&quot;https://git.wwoss.ru/&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://git.wwoss.ru/VladPolskiy/jquery&quot; class=&quot;urlextern&quot; title=&quot;https://git.wwoss.ru/VladPolskiy/jquery&quot; rel=&quot;ugc nofollow&quot;&gt;jquery&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://api.jqueryui.com/&quot; class=&quot;urlextern&quot; title=&quot;https://api.jqueryui.com/&quot; rel=&quot;ugc nofollow&quot;&gt;Документация по API jQuery UI 1.14&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=software:development:web:docs:web:javascript:javascript:jquery:jquery-ui-1.14.1.custom.zip&quot; class=&quot;media mediafile mf_zip&quot; title=&quot;software:development:web:docs:web:javascript:javascript:jquery:jquery-ui-1.14.1.custom.zip (10 KB)&quot;&gt;jquery-ui-1.14.1.custom.zip&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://github.com/jquery/jquery-ui&quot; class=&quot;interwiki iw_github&quot; title=&quot;https://github.com/jquery/jquery-ui&quot;&gt;jquery-ui&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://git.wwoss.ru/&quot; class=&quot;interwiki iw_gitea&quot; title=&quot;https://git.wwoss.ru/&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://git.wwoss.ru/VladPolskiy/jquery-ui&quot; class=&quot;urlextern&quot; title=&quot;https://git.wwoss.ru/VladPolskiy/jquery-ui&quot; rel=&quot;ugc nofollow&quot;&gt;jquery-ui&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0424\u0430\u0439\u043b\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f_\u0438_\u0444\u0430\u0439\u043b\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;2279-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sat, 10 Jan 2026 11:14:48 +0000</pubDate>
        </item>
    </channel>
</rss>
