UNPKG

acorn

Version:

ECMAScript parser

1,576 lines 339 kB
/* Silly noise to be able to load in source code without doing an XMLHttpReq */var jquery111 = "/*!\n\ * jQuery JavaScript Library v1.11.1\n\ * http://jquery.com/\n\ *\n\ * Includes Sizzle.js\n\ * http://sizzlejs.com/\n\ *\n\ * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors\n\ * Released under the MIT license\n\ * http://jquery.org/license\n\ *\n\ * Date: 2014-05-01T17:42Z\n\ */\n\ \n\ (function( global, factory ) {\n\ \n\ \tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\ \t\t// For CommonJS and CommonJS-like environments where a proper window is present,\n\ \t\t// execute the factory and get jQuery\n\ \t\t// For environments that do not inherently posses a window with a document\n\ \t\t// (such as Node.js), expose a jQuery-making factory as module.exports\n\ \t\t// This accentuates the need for the creation of a real window\n\ \t\t// e.g. var jQuery = require(\"jquery\")(window);\n\ \t\t// See ticket #14549 for more info\n\ \t\tmodule.exports = global.document ?\n\ \t\t\tfactory( global, true ) :\n\ \t\t\tfunction( w ) {\n\ \t\t\t\tif ( !w.document ) {\n\ \t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\ \t\t\t\t}\n\ \t\t\t\treturn factory( w );\n\ \t\t\t};\n\ \t} else {\n\ \t\tfactory( global );\n\ \t}\n\ \n\ // Pass this if window is not defined yet\n\ }(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\ \n\ // Can't do this because several apps including ASP.NET trace\n\ // the stack via arguments.caller.callee and Firefox dies if\n\ // you try to trace through \"use strict\" call chains. (#13335)\n\ // Support: Firefox 18+\n\ //\n\ \n\ var deletedIds = [];\n\ \n\ var slice = deletedIds.slice;\n\ \n\ var concat = deletedIds.concat;\n\ \n\ var push = deletedIds.push;\n\ \n\ var indexOf = deletedIds.indexOf;\n\ \n\ var class2type = {};\n\ \n\ var toString = class2type.toString;\n\ \n\ var hasOwn = class2type.hasOwnProperty;\n\ \n\ var support = {};\n\ \n\ \n\ \n\ var\n\ \tversion = \"1.11.1\",\n\ \n\ \t// Define a local copy of jQuery\n\ \tjQuery = function( selector, context ) {\n\ \t\t// The jQuery object is actually just the init constructor 'enhanced'\n\ \t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\ \t\treturn new jQuery.fn.init( selector, context );\n\ \t},\n\ \n\ \t// Support: Android<4.1, IE<9\n\ \t// Make sure we trim BOM and NBSP\n\ \trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\ \n\ \t// Matches dashed string for camelizing\n\ \trmsPrefix = /^-ms-/,\n\ \trdashAlpha = /-([\\da-z])/gi,\n\ \n\ \t// Used by jQuery.camelCase as callback to replace()\n\ \tfcamelCase = function( all, letter ) {\n\ \t\treturn letter.toUpperCase();\n\ \t};\n\ \n\ jQuery.fn = jQuery.prototype = {\n\ \t// The current version of jQuery being used\n\ \tjquery: version,\n\ \n\ \tconstructor: jQuery,\n\ \n\ \t// Start with an empty selector\n\ \tselector: \"\",\n\ \n\ \t// The default length of a jQuery object is 0\n\ \tlength: 0,\n\ \n\ \ttoArray: function() {\n\ \t\treturn slice.call( this );\n\ \t},\n\ \n\ \t// Get the Nth element in the matched element set OR\n\ \t// Get the whole matched element set as a clean array\n\ \tget: function( num ) {\n\ \t\treturn num != null ?\n\ \n\ \t\t\t// Return just the one element from the set\n\ \t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\ \n\ \t\t\t// Return all the elements in a clean array\n\ \t\t\tslice.call( this );\n\ \t},\n\ \n\ \t// Take an array of elements and push it onto the stack\n\ \t// (returning the new matched element set)\n\ \tpushStack: function( elems ) {\n\ \n\ \t\t// Build a new jQuery matched element set\n\ \t\tvar ret = jQuery.merge( this.constructor(), elems );\n\ \n\ \t\t// Add the old object onto the stack (as a reference)\n\ \t\tret.prevObject = this;\n\ \t\tret.context = this.context;\n\ \n\ \t\t// Return the newly-formed element set\n\ \t\treturn ret;\n\ \t},\n\ \n\ \t// Execute a callback for every element in the matched set.\n\ \t// (You can seed the arguments with an array of args, but this is\n\ \t// only used internally.)\n\ \teach: function( callback, args ) {\n\ \t\treturn jQuery.each( this, callback, args );\n\ \t},\n\ \n\ \tmap: function( callback ) {\n\ \t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\ \t\t\treturn callback.call( elem, i, elem );\n\ \t\t}));\n\ \t},\n\ \n\ \tslice: function() {\n\ \t\treturn this.pushStack( slice.apply( this, arguments ) );\n\ \t},\n\ \n\ \tfirst: function() {\n\ \t\treturn this.eq( 0 );\n\ \t},\n\ \n\ \tlast: function() {\n\ \t\treturn this.eq( -1 );\n\ \t},\n\ \n\ \teq: function( i ) {\n\ \t\tvar len = this.length,\n\ \t\t\tj = +i + ( i < 0 ? len : 0 );\n\ \t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\n\ \t},\n\ \n\ \tend: function() {\n\ \t\treturn this.prevObject || this.constructor(null);\n\ \t},\n\ \n\ \t// For internal use only.\n\ \t// Behaves like an Array's method, not like a jQuery method.\n\ \tpush: push,\n\ \tsort: deletedIds.sort,\n\ \tsplice: deletedIds.splice\n\ };\n\ \n\ jQuery.extend = jQuery.fn.extend = function() {\n\ \tvar src, copyIsArray, copy, name, options, clone,\n\ \t\ttarget = arguments[0] || {},\n\ \t\ti = 1,\n\ \t\tlength = arguments.length,\n\ \t\tdeep = false;\n\ \n\ \t// Handle a deep copy situation\n\ \tif ( typeof target === \"boolean\" ) {\n\ \t\tdeep = target;\n\ \n\ \t\t// skip the boolean and the target\n\ \t\ttarget = arguments[ i ] || {};\n\ \t\ti++;\n\ \t}\n\ \n\ \t// Handle case when target is a string or something (possible in deep copy)\n\ \tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\ \t\ttarget = {};\n\ \t}\n\ \n\ \t// extend jQuery itself if only one argument is passed\n\ \tif ( i === length ) {\n\ \t\ttarget = this;\n\ \t\ti--;\n\ \t}\n\ \n\ \tfor ( ; i < length; i++ ) {\n\ \t\t// Only deal with non-null/undefined values\n\ \t\tif ( (options = arguments[ i ]) != null ) {\n\ \t\t\t// Extend the base object\n\ \t\t\tfor ( name in options ) {\n\ \t\t\t\tsrc = target[ name ];\n\ \t\t\t\tcopy = options[ name ];\n\ \n\ \t\t\t\t// Prevent never-ending loop\n\ \t\t\t\tif ( target === copy ) {\n\ \t\t\t\t\tcontinue;\n\ \t\t\t\t}\n\ \n\ \t\t\t\t// Recurse if we're merging plain objects or arrays\n\ \t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\ \t\t\t\t\tif ( copyIsArray ) {\n\ \t\t\t\t\t\tcopyIsArray = false;\n\ \t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\ \n\ \t\t\t\t\t} else {\n\ \t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\ \t\t\t\t\t}\n\ \n\ \t\t\t\t\t// Never move original objects, clone them\n\ \t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\ \n\ \t\t\t\t// Don't bring in undefined values\n\ \t\t\t\t} else if ( copy !== undefined ) {\n\ \t\t\t\t\ttarget[ name ] = copy;\n\ \t\t\t\t}\n\ \t\t\t}\n\ \t\t}\n\ \t}\n\ \n\ \t// Return the modified object\n\ \treturn target;\n\ };\n\ \n\ jQuery.extend({\n\ \t// Unique for each copy of jQuery on the page\n\ \texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\ \n\ \t// Assume jQuery is ready without the ready module\n\ \tisReady: true,\n\ \n\ \terror: function( msg ) {\n\ \t\tthrow new Error( msg );\n\ \t},\n\ \n\ \tnoop: function() {},\n\ \n\ \t// See test/unit/core.js for details concerning isFunction.\n\ \t// Since version 1.3, DOM methods and functions like alert\n\ \t// aren't supported. They return false on IE (#2968).\n\ \tisFunction: function( obj ) {\n\ \t\treturn jQuery.type(obj) === \"function\";\n\ \t},\n\ \n\ \tisArray: Array.isArray || function( obj ) {\n\ \t\treturn jQuery.type(obj) === \"array\";\n\ \t},\n\ \n\ \tisWindow: function( obj ) {\n\ \t\t/* jshint eqeqeq: false */\n\ \t\treturn obj != null && obj == obj.window;\n\ \t},\n\ \n\ \tisNumeric: function( obj ) {\n\ \t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\ \t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\ \t\t// subtraction forces infinities to NaN\n\ \t\treturn !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;\n\ \t},\n\ \n\ \tisEmptyObject: function( obj ) {\n\ \t\tvar name;\n\ \t\tfor ( name in obj ) {\n\ \t\t\treturn false;\n\ \t\t}\n\ \t\treturn true;\n\ \t},\n\ \n\ \tisPlainObject: function( obj ) {\n\ \t\tvar key;\n\ \n\ \t\t// Must be an Object.\n\ \t\t// Because of IE, we also have to check the presence of the constructor property.\n\ \t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\ \t\tif ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\ \t\t\treturn false;\n\ \t\t}\n\ \n\ \t\ttry {\n\ \t\t\t// Not own constructor property must be Object\n\ \t\t\tif ( obj.constructor &&\n\ \t\t\t\t!hasOwn.call(obj, \"constructor\") &&\n\ \t\t\t\t!hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n\ \t\t\t\treturn false;\n\ \t\t\t}\n\ \t\t} catch ( e ) {\n\ \t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\ \t\t\treturn false;\n\ \t\t}\n\ \n\ \t\t// Support: IE<9\n\ \t\t// Handle iteration over inherited properties before own properties.\n\ \t\tif ( support.ownLast ) {\n\ \t\t\tfor ( key in obj ) {\n\ \t\t\t\treturn hasOwn.call( obj, key );\n\ \t\t\t}\n\ \t\t}\n\ \n\ \t\t// Own properties are enumerated firstly, so to speed up,\n\ \t\t// if last one is own, then all properties are own.\n\ \t\tfor ( key in obj ) {}\n\ \n\ \t\treturn key === undefined || hasOwn.call( obj, key );\n\ \t},\n\ \n\ \ttype: function( obj ) {\n\ \t\tif ( obj == null ) {\n\ \t\t\treturn obj + \"\";\n\ \t\t}\n\ \t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\ \t\t\tclass2type[ toString.call(obj) ] || \"object\" :\n\ \t\t\ttypeof obj;\n\ \t},\n\ \n\ \t// Evaluates a script in a global context\n\ \t// Workarounds based on findings by Jim Driscoll\n\ \t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\ \tglobalEval: function( data ) {\n\ \t\tif ( data && jQuery.trim( data ) ) {\n\ \t\t\t// We use execScript on Internet Explorer\n\ \t\t\t// We use an anonymous function so that context is window\n\ \t\t\t// rather than jQuery in Firefox\n\ \t\t\t( window.execScript || function( data ) {\n\ \t\t\t\twindow[ \"eval\" ].call( window, data );\n\ \t\t\t} )( data );\n\ \t\t}\n\ \t},\n\ \n\ \t// Convert dashed to camelCase; used by the css and data modules\n\ \t// Microsoft forgot to hump their vendor prefix (#9572)\n\ \tcamelCase: function( string ) {\n\ \t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\ \t},\n\ \n\ \tnodeName: function( elem, name ) {\n\ \t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\ \t},\n\ \n\ \t// args is for internal usage only\n\ \teach: function( obj, callback, args ) {\n\ \t\tvar value,\n\ \t\t\ti = 0,\n\ \t\t\tlength = obj.length,\n\ \t\t\tisArray = isArraylike( obj );\n\ \n\ \t\tif ( args ) {\n\ \t\t\tif ( isArray ) {\n\ \t\t\t\tfor ( ; i < length; i++ ) {\n\ \t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\ \n\ \t\t\t\t\tif ( value === false ) {\n\ \t\t\t\t\t\tbreak;\n\ \t\t\t\t\t}\n\ \t\t\t\t}\n\ \t\t\t} else {\n\ \t\t\t\tfor ( i in obj ) {\n\ \t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\ \n\ \t\t\t\t\tif ( value === false ) {\n\ \t\t\t\t\t\tbreak;\n\ \t\t\t\t\t}\n\ \t\t\t\t}\n\ \t\t\t}\n\ \n\ \t\t// A special, fast, case for the most common use of each\n\ \t\t} else {\n\ \t\t\tif ( isArray ) {\n\ \t\t\t\tfor ( ; i < length; i++ ) {\n\ \t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\ \n\ \t\t\t\t\tif ( value === false ) {\n\ \t\t\t\t\t\tbreak;\n\ \t\t\t\t\t}\n\ \t\t\t\t}\n\ \t\t\t} else {\n\ \t\t\t\tfor ( i in obj ) {\n\ \t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\ \n\ \t\t\t\t\tif ( value === false ) {\n\ \t\t\t\t\t\tbreak;\n\ \t\t\t\t\t}\n\ \t\t\t\t}\n\ \t\t\t}\n\ \t\t}\n\ \n\ \t\treturn obj;\n\ \t},\n\ \n\ \t// Support: Android<4.1, IE<9\n\ \ttrim: function( text ) {\n\ \t\treturn text == null ?\n\ \t\t\t\"\" :\n\ \t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\ \t},\n\ \n\ \t// results is for internal usage only\n\ \tmakeArray: function( arr, results ) {\n\ \t\tvar ret = results || [];\n\ \n\ \t\tif ( arr != null ) {\n\ \t\t\tif ( isArraylike( Object(arr) ) ) {\n\ \t\t\t\tjQuery.merge( ret,\n\ \t\t\t\t\ttypeof arr === \"string\" ?\n\ \t\t\t\t\t[ arr ] : arr\n\ \t\t\t\t);\n\ \t\t\t} else {\n\ \t\t\t\tpush.call( ret, arr );\n\ \t\t\t}\n\ \t\t}\n\ \n\ \t\treturn ret;\n\ \t},\n\ \n\ \tinArray: function( elem, arr, i ) {\n\ \t\tvar len;\n\ \n\ \t\tif ( arr ) {\n\ \t\t\tif ( indexOf ) {\n\ \t\t\t\treturn indexOf.call( arr, elem, i );\n\ \t\t\t}\n\ \n\ \t\t\tlen = arr.length;\n\ \t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\ \n\ \t\t\tfor ( ; i < len; i++ ) {\n\ \t\t\t\t// Skip accessing in sparse arrays\n\ \t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\ \t\t\t\t\treturn i;\n\ \t\t\t\t}\n\ \t\t\t}\n\ \t\t}\n\ \n\ \t\treturn -1;\n\ \t},\n\ \n\ \tmerge: function( first, second ) {\n\ \t\tvar len = +second.length,\n\ \t\t\tj = 0,\n\ \t\t\ti = first.length;\n\ \n\ \t\twhile ( j < len ) {\n\ \t\t\tfirst[ i++ ] = second[ j++ ];\n\ \t\t}\n\ \n\ \t\t// Support: IE<9\n\ \t\t// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)\n\ \t\tif ( len !== len ) {\n\ \t\t\twhile ( second[j] !== undefined ) {\n\ \t\t\t\tfirst[ i++ ] = second[ j++ ];\n\ \t\t\t}\n\ \t\t}\n\ \n\ \t\tfirst.length = i;\n\ \n\ \t\treturn first;\n\ \t},\n\ \n\ \tgrep: function( elems, callback, invert ) {\n\ \t\tvar callbackInverse,\n\ \t\t\tmatches = [],\n\ \t\t\ti = 0,\n\ \t\t\tlength = elems.length,\n\ \t\t\tcallbackExpect = !invert;\n\ \n\ \t\t// Go through the array, only saving the items\n\ \t\t// that pass the validator function\n\ \t\tfor ( ; i < length; i++ ) {\n\ \t\t\tcallbackInverse = !callback( elems[ i ], i );\n\ \t\t\tif ( callbackInverse !== callbackExpect ) {\n\ \t\t\t\tmatches.push( elems[ i ] );\n\ \t\t\t}\n\ \t\t}\n\ \n\ \t\treturn matches;\n\ \t},\n\ \n\ \t// arg is for internal usage only\n\ \tmap: function( elems, callback, arg ) {\n\ \t\tvar value,\n\ \t\t\ti = 0,\n\ \t\t\tlength = elems.length,\n\ \t\t\tisArray = isArraylike( elems ),\n\ \t\t\tret = [];\n\ \n\ \t\t// Go through the array, translating each of the items to their new values\n\ \t\tif ( isArray ) {\n\ \t\t\tfor ( ; i < length; i++ ) {\n\ \t\t\t\tvalue = callback( elems[ i ], i, arg );\n\ \n\ \t\t\t\tif ( value != null ) {\n\ \t\t\t\t\tret.push( value );\n\ \t\t\t\t}\n\ \t\t\t}\n\ \n\ \t\t// Go through every key on the object,\n\ \t\t} else {\n\ \t\t\tfor ( i in elems ) {\n\ \t\t\t\tvalue = callback( elems[ i ], i, arg );\n\ \n\ \t\t\t\tif ( value != null ) {\n\ \t\t\t\t\tret.push( value );\n\ \t\t\t\t}\n\ \t\t\t}\n\ \t\t}\n\ \n\ \t\t// Flatten any nested arrays\n\ \t\treturn concat.apply( [], ret );\n\ \t},\n\ \n\ \t// A global GUID counter for objects\n\ \tguid: 1,\n\ \n\ \t// Bind a function to a context, optionally partially applying any\n\ \t// arguments.\n\ \tproxy: function( fn, context ) {\n\ \t\tvar args, proxy, tmp;\n\ \n\ \t\tif ( typeof context === \"string\" ) {\n\ \t\t\ttmp = fn[ context ];\n\ \t\t\tcontext = fn;\n\ \t\t\tfn = tmp;\n\ \t\t}\n\ \n\ \t\t// Quick check to determine if target is callable, in the spec\n\ \t\t// this throws a TypeError, but we will just return undefined.\n\ \t\tif ( !jQuery.isFunction( fn ) ) {\n\ \t\t\treturn undefined;\n\ \t\t}\n\ \n\ \t\t// Simulated bind\n\ \t\targs = slice.call( arguments, 2 );\n\ \t\tproxy = function() {\n\ \t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\ \t\t};\n\ \n\ \t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\ \t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\ \n\ \t\treturn proxy;\n\ \t},\n\ \n\ \tnow: function() {\n\ \t\treturn +( new Date() );\n\ \t},\n\ \n\ \t// jQuery.support is not used in Core but other projects attach their\n\ \t// properties to it so it needs to exist.\n\ \tsupport: support\n\ });\n\ \n\ // Populate the class2type map\n\ jQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n\ \tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\ });\n\ \n\ function isArraylike( obj ) {\n\ \tvar length = obj.length,\n\ \t\ttype = jQuery.type( obj );\n\ \n\ \tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\ \t\treturn false;\n\ \t}\n\ \n\ \tif ( obj.nodeType === 1 && length ) {\n\ \t\treturn true;\n\ \t}\n\ \n\ \treturn type === \"array\" || length === 0 ||\n\ \t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n\ }\n\ var Sizzle =\n\ /*!\n\ * Sizzle CSS Selector Engine v1.10.19\n\ * http://sizzlejs.com/\n\ *\n\ * Copyright 2013 jQuery Foundation, Inc. and other contributors\n\ * Released under the MIT license\n\ * http://jquery.org/license\n\ *\n\ * Date: 2014-04-18\n\ */\n\ (function( window ) {\n\ \n\ var i,\n\ \tsupport,\n\ \tExpr,\n\ \tgetText,\n\ \tisXML,\n\ \ttokenize,\n\ \tcompile,\n\ \tselect,\n\ \toutermostContext,\n\ \tsortInput,\n\ \thasDuplicate,\n\ \n\ \t// Local document vars\n\ \tsetDocument,\n\ \tdocument,\n\ \tdocElem,\n\ \tdocumentIsHTML,\n\ \trbuggyQSA,\n\ \trbuggyMatches,\n\ \tmatches,\n\ \tcontains,\n\ \n\ \t// Instance-specific data\n\ \texpando = \"sizzle\" + -(new Date()),\n\ \tpreferredDoc = window.document,\n\ \tdirruns = 0,\n\ \tdone = 0,\n\ \tclassCache = createCache(),\n\ \ttokenCache = createCache(),\n\ \tcompilerCache = createCache(),\n\ \tsortOrder = function( a, b ) {\n\ \t\tif ( a === b ) {\n\ \t\t\thasDuplicate = true;\n\ \t\t}\n\ \t\treturn 0;\n\ \t},\n\ \n\ \t// General-purpose constants\n\ \tstrundefined = typeof undefined,\n\ \tMAX_NEGATIVE = 1 << 31,\n\ \n\ \t// Instance methods\n\ \thasOwn = ({}).hasOwnProperty,\n\ \tarr = [],\n\ \tpop = arr.pop,\n\ \tpush_native = arr.push,\n\ \tpush = arr.push,\n\ \tslice = arr.slice,\n\ \t// Use a stripped-down indexOf if we can't use a native one\n\ \tindexOf = arr.indexOf || function( elem ) {\n\ \t\tvar i = 0,\n\ \t\t\tlen = this.length;\n\ \t\tfor ( ; i < len; i++ ) {\n\ \t\t\tif ( this[i] === elem ) {\n\ \t\t\t\treturn i;\n\ \t\t\t}\n\ \t\t}\n\ \t\treturn -1;\n\ \t},\n\ \n\ \tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\ \n\ \t// Regular expressions\n\ \n\ \t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\ \twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\ \\\\f]\",\n\ \t// http://www.w3.org/TR/css3-syntax/#characters\n\ \tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\ \n\ \t// Loosely modeled on CSS identifier characters\n\ \t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\ \t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\ \tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\ \n\ \t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\ \tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")(?:\" + whitespace +\n\ \t\t// Operator (capture 2)\n\ \t\t\"*([*^$|!~]?=)\" + whitespace +\n\ \t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\ \t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\ \t\t\"*\\\\]\",\n\ \n\ \tpseudos = \":(\" + characterEncoding + \")(?:\\\\((\" +\n\ \t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\ \t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\ \t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\ \t\t// 2. simple (capture 6)\n\ \t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\ \t\t// 3. anything else (capture 2)\n\ \t\t\".*\" +\n\ \t\t\")\\\\)|)\",\n\ \n\ \t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\ \trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\ \n\ \trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\ \trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\ \n\ \trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\ \n\ \trpseudo = new RegExp( pseudos ),\n\ \tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\ \n\ \tmatchExpr = {\n\ \t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\ \t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\ \t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\ \t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\ \t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\ \t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\ \t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\ \t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\ \t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\ \t\t// For use in libraries implementing .is()\n\ \t\t// We use this for POS matching in `select`\n\ \t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\ \t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\ \t},\n\ \n\ \trinputs = /^(?:input|select|textarea|button)$/i,\n\ \trheader = /^h\\d$/i,\n\ \n\ \trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\ \n\ \t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\ \trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\ \n\ \trsibling = /[+~]/,\n\ \trescape = /'|\\\\/g,\n\ \n\ \t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\ \trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\ \tfunescape = function( _, escaped, escapedWhitespace ) {\n\ \t\tvar high = \"0x\" + escaped - 0x10000;\n\ \t\t// NaN means non-codepoint\n\ \t\t// Support: Firefox<24\n\ \t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\ \t\treturn high !== high || escapedWhitespace ?\n\ \t\t\tescaped :\n\ \t\t\thigh < 0 ?\n\ \t\t\t\t// BMP codepoint\n\ \t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\ \t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\ \t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\ \t};\n\ \n\ // Optimize for push.apply( _, NodeList )\n\ try {\n\ \tpush.apply(\n\ \t\t(arr = slice.call( preferredDoc.childNodes )),\n\ \t\tpreferredDoc.childNodes\n\ \t);\n\ \t// Support: Android<4.0\n\ \t// Detect silently failing push.apply\n\ \tarr[ preferredDoc.childNodes.length ].nodeType;\n\ } catch ( e ) {\n\ \tpush = { apply: arr.length ?\n\ \n\ \t\t// Leverage slice if possible\n\ \t\tfunction( target, els ) {\n\ \t\t\tpush_native.apply( target, slice.call(els) );\n\ \t\t} :\n\ \n\ \t\t// Support: IE<9\n\ \t\t// Otherwise append directly\n\ \t\tfunction( target, els ) {\n\ \t\t\tvar j = target.length,\n\ \t\t\t\ti = 0;\n\ \t\t\t// Can't trust NodeList.length\n\ \t\t\twhile ( (target[j++] = els[i++]) ) {}\n\ \t\t\ttarget.length = j - 1;\n\ \t\t}\n\ \t};\n\ }\n\ \n\ function Sizzle( selector, context, results, seed ) {\n\ \tvar match, elem, m, nodeType,\n\ \t\t// QSA vars\n\ \t\ti, groups, old, nid, newContext, newSelector;\n\ \n\ \tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\ \t\tsetDocument( context );\n\ \t}\n\ \n\ \tcontext = context || document;\n\ \tresults = results || [];\n\ \n\ \tif ( !selector || typeof selector !== \"string\" ) {\n\ \t\treturn results;\n\ \t}\n\ \n\ \tif ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {\n\ \t\treturn [];\n\ \t}\n\ \n\ \tif ( documentIsHTML && !seed ) {\n\ \n\ \t\t// Shortcuts\n\ \t\tif ( (match = rquickExpr.exec( selector )) ) {\n\ \t\t\t// Speed-up: Sizzle(\"#ID\")\n\ \t\t\tif ( (m = match[1]) ) {\n\ \t\t\t\tif ( nodeType === 9 ) {\n\ \t\t\t\t\telem = context.getElementById( m );\n\ \t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\ \t\t\t\t\t// nodes that are no longer in the document (jQuery #6963)\n\ \t\t\t\t\tif ( elem && elem.parentNode ) {\n\ \t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\ \t\t\t\t\t\t// by name instead of ID\n\ \t\t\t\t\t\tif ( elem.id === m ) {\n\ \t\t\t\t\t\t\tresults.push( elem );\n\ \t\t\t\t\t\t\treturn results;\n\ \t\t\t\t\t\t}\n\ \t\t\t\t\t} else {\n\ \t\t\t\t\t\treturn results;\n\ \t\t\t\t\t}\n\ \t\t\t\t} else {\n\ \t\t\t\t\t// Context is not a document\n\ \t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\ \t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\ \t\t\t\t\t\tresults.push( elem );\n\ \t\t\t\t\t\treturn results;\n\ \t\t\t\t\t}\n\ \t\t\t\t}\n\ \n\ \t\t\t// Speed-up: Sizzle(\"TAG\")\n\ \t\t\t} else if ( match[2] ) {\n\ \t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\ \t\t\t\treturn results;\n\ \n\ \t\t\t// Speed-up: Sizzle(\".CLASS\")\n\ \t\t\t} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {\n\ \t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\ \t\t\t\treturn results;\n\ \t\t\t}\n\ \t\t}\n\ \n\ \t\t// QSA path\n\ \t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\ \t\t\tnid = old = expando;\n\ \t\t\tnewContext = context;\n\ \t\t\tnewSelector = nodeType === 9 && selector;\n\ \n\ \t\t\t// qSA works strangely on Element-rooted queries\n\ \t\t\t// We can work around this by specifying an extra ID on the root\n\ \t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\ \t\t\t// IE 8 doesn't work on object elements\n\ \t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\ \t\t\t\tgroups = tokenize( selector );\n\ \n\ \t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\ \t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\ \t\t\t\t} else {\n\ \t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\ \t\t\t\t}\n\ \t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\ \n\ \t\t\t\ti = groups.length;\n\ \t\t\t\twhile ( i-- ) {\n\ \t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n\ \t\t\t\t}\n\ \t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;\n\ \t\t\t\tnewSelector = groups.join(\",\");\n\ \t\t\t}\n\ \n\ \t\t\tif ( newSelector ) {\n\ \t\t\t\ttry {\n\ \t\t\t\t\tpush.apply( results,\n\ \t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\ \t\t\t\t\t);\n\ \t\t\t\t\treturn results;\n\ \t\t\t\t} catch(qsaError) {\n\ \t\t\t\t} finally {\n\ \t\t\t\t\tif ( !old ) {\n\ \t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\ \t\t\t\t\t}\n\ \t\t\t\t}\n\ \t\t\t}\n\ \t\t}\n\ \t}\n\ \n\ \t// All others\n\ \treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n\ }\n\ \n\ /**\n\ * Create key-value caches of limited size\n\ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\n\ *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\ *\tdeleting the oldest entry\n\ */\n\ function createCache() {\n\ \tvar keys = [];\n\ \n\ \tfunction cache( key, value ) {\n\ \t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\ \t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\ \t\t\t// Only keep the most recent entries\n\ \t\t\tdelete cache[ keys.shift() ];\n\ \t\t}\n\ \t\treturn (cache[ key + \" \" ] = value);\n\ \t}\n\ \treturn cache;\n\ }\n\ \n\ /**\n\ * Mark a function for special use by Sizzle\n\ * @param {Function} fn The function to mark\n\ */\n\ function markFunction( fn ) {\n\ \tfn[ expando ] = true;\n\ \treturn fn;\n\ }\n\ \n\ /**\n\ * Support testing using an element\n\ * @param {Function} fn Passed the created div and expects a boolean result\n\ */\n\ function assert( fn ) {\n\ \tvar div = document.createElement(\"div\");\n\ \n\ \ttry {\n\ \t\treturn !!fn( div );\n\ \t} catch (e) {\n\ \t\treturn false;\n\ \t} finally {\n\ \t\t// Remove from its parent by default\n\ \t\tif ( div.parentNode ) {\n\ \t\t\tdiv.parentNode.removeChild( div );\n\ \t\t}\n\ \t\t// release memory in IE\n\ \t\tdiv = null;\n\ \t}\n\ }\n\ \n\ /**\n\ * Adds the same handler for all of the specified attrs\n\ * @param {String} attrs Pipe-separated list of attributes\n\ * @param {Function} handler The method that will be applied\n\ */\n\ function addHandle( attrs, handler ) {\n\ \tvar arr = attrs.split(\"|\"),\n\ \t\ti = attrs.length;\n\ \n\ \twhile ( i-- ) {\n\ \t\tExpr.attrHandle[ arr[i] ] = handler;\n\ \t}\n\ }\n\ \n\ /**\n\ * Checks document order of two siblings\n\ * @param {Element} a\n\ * @param {Element} b\n\ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n\ */\n\ function siblingCheck( a, b ) {\n\ \tvar cur = b && a,\n\ \t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\ \t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\ \t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\ \n\ \t// Use IE sourceIndex if available on both nodes\n\ \tif ( diff ) {\n\ \t\treturn diff;\n\ \t}\n\ \n\ \t// Check if b follows a\n\ \tif ( cur ) {\n\ \t\twhile ( (cur = cur.nextSibling) ) {\n\ \t\t\tif ( cur === b ) {\n\ \t\t\t\treturn -1;\n\ \t\t\t}\n\ \t\t}\n\ \t}\n\ \n\ \treturn a ? 1 : -1;\n\ }\n\ \n\ /**\n\ * Returns a function to use in pseudos for input types\n\ * @param {String} type\n\ */\n\ function createInputPseudo( type ) {\n\ \treturn function( elem ) {\n\ \t\tvar name = elem.nodeName.toLowerCase();\n\ \t\treturn name === \"input\" && elem.type === type;\n\ \t};\n\ }\n\ \n\ /**\n\ * Returns a function to use in pseudos for buttons\n\ * @param {String} type\n\ */\n\ function createButtonPseudo( type ) {\n\ \treturn function( elem ) {\n\ \t\tvar name = elem.nodeName.toLowerCase();\n\ \t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\ \t};\n\ }\n\ \n\ /**\n\ * Returns a function to use in pseudos for positionals\n\ * @param {Function} fn\n\ */\n\ function createPositionalPseudo( fn ) {\n\ \treturn markFunction(function( argument ) {\n\ \t\targument = +argument;\n\ \t\treturn markFunction(function( seed, matches ) {\n\ \t\t\tvar j,\n\ \t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\ \t\t\t\ti = matchIndexes.length;\n\ \n\ \t\t\t// Match elements found at the specified indexes\n\ \t\t\twhile ( i-- ) {\n\ \t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\ \t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\ \t\t\t\t}\n\ \t\t\t}\n\ \t\t});\n\ \t});\n\ }\n\ \n\ /**\n\ * Checks a node for validity as a Sizzle context\n\ * @param {Element|Object=} context\n\ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\ */\n\ function testContext( context ) {\n\ \treturn context && typeof context.getElementsByTagName !== strundefined && context;\n\ }\n\ \n\ // Expose support vars for convenience\n\ support = Sizzle.support = {};\n\ \n\ /**\n\ * Detects XML nodes\n\ * @param {Element|Object} elem An element or a document\n\ * @returns {Boolean} True iff elem is a non-HTML XML node\n\ */\n\ isXML = Sizzle.isXML = function( elem ) {\n\ \t// documentElement is verified for cases where it doesn't yet exist\n\ \t// (such as loading iframes in IE - #4833)\n\ \tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\ \treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n\ };\n\ \n\ /**\n\ * Sets document-related variables once based on the current document\n\ * @param {Element|Object} [doc] An element or document object to use to set the document\n\ * @returns {Object} Returns the current document\n\ */\n\ setDocument = Sizzle.setDocument = function( node ) {\n\ \tvar hasCompare,\n\ \t\tdoc = node ? node.ownerDocument || node : preferredDoc,\n\ \t\tparent = doc.defaultView;\n\ \n\ \t// If no document and documentElement is available, return\n\ \tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\ \t\treturn document;\n\ \t}\n\ \n\ \t// Set our document\n\ \tdocument = doc;\n\ \tdocElem = doc.documentElement;\n\ \n\ \t// Support tests\n\ \tdocumentIsHTML = !isXML( doc );\n\ \n\ \t// Support: IE>8\n\ \t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\n\ \t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\n\ \t// IE6-8 do not support the defaultView property so parent will be undefined\n\ \tif ( parent && parent !== parent.top ) {\n\ \t\t// IE11 does not have attachEvent, so all must suffer\n\ \t\tif ( parent.addEventListener ) {\n\ \t\t\tparent.addEventListener( \"unload\", function() {\n\ \t\t\t\tsetDocument();\n\ \t\t\t}, false );\n\ \t\t} else if ( parent.attachEvent ) {\n\ \t\t\tparent.attachEvent( \"onunload\", function() {\n\ \t\t\t\tsetDocument();\n\ \t\t\t});\n\ \t\t}\n\ \t}\n\ \n\ \t/* Attributes\n\ \t---------------------------------------------------------------------- */\n\ \n\ \t// Support: IE<8\n\ \t// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)\n\ \tsupport.attributes = assert(function( div ) {\n\ \t\tdiv.className = \"i\";\n\ \t\treturn !div.getAttribute(\"className\");\n\ \t});\n\ \n\ \t/* getElement(s)By*\n\ \t---------------------------------------------------------------------- */\n\ \n\ \t// Check if getElementsByTagName(\"*\") returns only elements\n\ \tsupport.getElementsByTagName = assert(function( div ) {\n\ \t\tdiv.appendChild( doc.createComment(\"\") );\n\ \t\treturn !div.getElementsByTagName(\"*\").length;\n\ \t});\n\ \n\ \t// Check if getElementsByClassName can be trusted\n\ \tsupport.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {\n\ \t\tdiv.innerHTML = \"<div class='a'></div><div class='a i'></div>\";\n\ \n\ \t\t// Support: Safari<4\n\ \t\t// Catch class over-caching\n\ \t\tdiv.firstChild.className = \"i\";\n\ \t\t// Support: Opera<10\n\ \t\t// Catch gEBCN failure to find non-leading classes\n\ \t\treturn div.getElementsByClassName(\"i\").length === 2;\n\ \t});\n\ \n\ \t// Support: IE<10\n\ \t// Check if getElementById returns elements by name\n\ \t// The broken getElementById methods don't pick up programatically-set names,\n\ \t// so use a roundabout getElementsByName test\n\ \tsupport.getById = assert(function( div ) {\n\ \t\tdocElem.appendChild( div ).id = expando;\n\ \t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\n\ \t});\n\ \n\ \t// ID find and filter\n\ \tif ( support.getById ) {\n\ \t\tExpr.find[\"ID\"] = function( id, context ) {\n\ \t\t\tif ( typeof context.getElementById !== strundefined && documentIsHTML ) {\n\ \t\t\t\tvar m = context.getElementById( id );\n\ \t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\ \t\t\t\t// nodes that are no longer in the document #6963\n\ \t\t\t\treturn m && m.parentNode ? [ m ] : [];\n\ \t\t\t}\n\ \t\t};\n\ \t\tExpr.filter[\"ID\"] = function( id ) {\n\ \t\t\tvar attrId = id.replace( runescape, funescape );\n\ \t\t\treturn function( elem ) {\n\ \t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\ \t\t\t};\n\ \t\t};\n\ \t} else {\n\ \t\t// Support: IE6/7\n\ \t\t// getElementById is not reliable as a find shortcut\n\ \t\tdelete Expr.find[\"ID\"];\n\ \n\ \t\tExpr.filter[\"ID\"] = function( id ) {\n\ \t\t\tvar attrId = id.replace( runescape, funescape );\n\ \t\t\treturn function( elem ) {\n\ \t\t\t\tvar node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode(\"id\");\n\ \t\t\t\treturn node && node.value === attrId;\n\ \t\t\t};\n\ \t\t};\n\ \t}\n\ \n\ \t// Tag\n\ \tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\ \t\tfunction( tag, context ) {\n\ \t\t\tif ( typeof context.getElementsByTagName !== strundefined ) {\n\ \t\t\t\treturn context.getElementsByTagName( tag );\n\ \t\t\t}\n\ \t\t} :\n\ \t\tfunction( tag, context ) {\n\ \t\t\tvar elem,\n\ \t\t\t\ttmp = [],\n\ \t\t\t\ti = 0,\n\ \t\t\t\tresults = context.getElementsByTagName( tag );\n\ \n\ \t\t\t// Filter out possible comments\n\ \t\t\tif ( tag === \"*\" ) {\n\ \t\t\t\twhile ( (elem = results[i++]) ) {\n\ \t\t\t\t\tif ( elem.nodeType === 1 ) {\n\ \t\t\t\t\t\ttmp.push( elem );\n\ \t\t\t\t\t}\n\ \t\t\t\t}\n\ \n\ \t\t\t\treturn tmp;\n\ \t\t\t}\n\ \t\t\treturn results;\n\ \t\t};\n\ \n\ \t// Class\n\ \tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\ \t\tif ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {\n\ \t\t\treturn context.getElementsByClassName( className );\n\ \t\t}\n\ \t};\n\ \n\ \t/* QSA/matchesSelector\n\ \t---------------------------------------------------------------------- */\n\ \n\ \t// QSA and matchesSelector support\n\ \n\ \t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\ \trbuggyMatches = [];\n\ \n\ \t// qSa(:focus) reports false when true (Chrome 21)\n\ \t// We allow this because of a bug in IE8/9 that throws an error\n\ \t// whenever `document.activeElement` is accessed on an iframe\n\ \t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\ \t// See http://bugs.jquery.com/ticket/13378\n\ \trbuggyQSA = [];\n\ \n\ \tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\n\ \t\t// Build QSA regex\n\ \t\t// Regex strategy adopted from Diego Perini\n\ \t\tassert(function( div ) {\n\ \t\t\t// Select is set to empty string on purpose\n\ \t\t\t// This is to test IE's treatment of not explicitly\n\ \t\t\t// setting a boolean content attribute,\n\ \t\t\t// since its presence should be enough\n\ \t\t\t// http://bugs.jquery.com/ticket/12359\n\ \t\t\tdiv.innerHTML = \"<select msallowclip=''><option selected=''></option></select>\";\n\ \n\ \t\t\t// Support: IE8, Opera 11-12.16\n\ \t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\ \t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\ \t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\ \t\t\tif ( div.querySelectorAll(\"[msallowclip^='']\").length ) {\n\ \t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\ \t\t\t}\n\ \n\ \t\t\t// Support: IE8\n\ \t\t\t// Boolean attributes and \"value\" are not treated correctly\n\ \t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\ \t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\ \t\t\t}\n\ \n\ \t\t\t// Webkit/Opera - :checked should return selected option elements\n\ \t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\ \t\t\t// IE8 throws error here and will not see later tests\n\ \t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\ \t\t\t\trbuggyQSA.push(\":checked\");\n\ \t\t\t}\n\ \t\t});\n\ \n\ \t\tassert(function( div ) {\n\ \t\t\t// Support: Windows 8 Native Apps\n\ \t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\ \t\t\tvar input = doc.createElement(\"input\");\n\ \t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\ \t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\ \n\ \t\t\t// Support: IE8\n\ \t\t\t// Enforce case-sensitivity of name attribute\n\ \t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\ \t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\ \t\t\t}\n\ \n\ \t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\ \t\t\t// IE8 throws error here and will not see later tests\n\ \t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\ \t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\ \t\t\t}\n\ \n\ \t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\ \t\t\tdiv.querySelectorAll(\"*,:x\");\n\ \t\t\trbuggyQSA.push(\",.*:\");\n\ \t\t});\n\ \t}\n\ \n\ \tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\ \t\tdocElem.webkitMatchesSelector ||\n\ \t\tdocElem.mozMatchesSelector ||\n\ \t\tdocElem.oMatchesSelector ||\n\ \t\tdocElem.msMatchesSelector) )) ) {\n\ \n\ \t\tassert(function( div ) {\n\ \t\t\t// Check to see if it's possible to do matchesSelector\n\ \t\t\t// on a disconnected node (IE 9)\n\ \t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\ \n\ \t\t\t// This should fail with an exception\n\ \t\t\t// Gecko does not error, returns false instead\n\ \t\t\tmatches.call( div, \"[s!='']:x\" );\n\ \t\t\trbuggyMatches.push( \"!=\", pseudos );\n\ \t\t});\n\ \t}\n\ \n\ \trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\ \trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\ \n\ \t/* Contains\n\ \t---------------------------------------------------------------------- */\n\ \thasCompare = rnative.test( docElem.compareDocumentPosition );\n\ \n\ \t// Element contains another\n\ \t// Purposefully does not implement inclusive descendent\n\ \t// As in, an element does not contain itself\n\ \tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\ \t\tfunction( a, b ) {\n\ \t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\ \t\t\t\tbup = b && b.parentNode;\n\ \t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\ \t\t\t\tadown.contains ?\n\ \t\t\t\t\tadown.contains( bup ) :\n\ \t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\ \t\t\t));\n\ \t\t} :\n\ \t\tfunction( a, b ) {\n\ \t\t\tif ( b ) {\n\ \t\t\t\twhile ( (b = b.parentNode) ) {\n\ \t\t\t\t\tif ( b === a ) {\n\ \t\t\t\t\t\treturn true;\n\ \t\t\t\t\t}\n\ \t\t\t\t}\n\ \t\t\t}\n\ \t\t\treturn false;\n\ \t\t};\n\ \n\ \t/* Sorting\n\ \t---------------------------------------------------------------------- */\n\ \n\ \t// Document order sorting\n\ \tsortOrder = hasCompare ?\n\ \tfunction( a, b ) {\n\ \n\ \t\t// Flag for duplicate removal\n\ \t\tif ( a === b ) {\n\ \t\t\thasDuplicate = true;\n\ \t\t\treturn 0;\n\ \t\t}\n\ \n\ \t\t// Sort on method existence if only one input has compareDocumentPosition\n\ \t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\ \t\tif ( compare ) {\n\ \t\t\treturn compare;\n\ \t\t}\n\ \n\ \t\t// Calculate position if both inputs belong to the same document\n\ \t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\ \t\t\ta.compareDocumentPosition( b ) :\n\ \n\ \t\t\t// Otherwise we know they are disconnected\n\ \t\t\t1;\n\ \n\ \t\t// Disconnected nodes\n\ \t\tif ( compare & 1 ||\n\ \t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\ \n\ \t\t\t// Choose the first element that is related to our preferred document\n\ \t\t\tif ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\ \t\t\t\treturn -1;\n\ \t\t\t}\n\ \t\t\tif ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\ \t\t\t\treturn 1;\n\ \t\t\t}\n\ \n\ \t\t\t// Maintain original order\n\ \t\t\treturn sortInput ?\n\ \t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\ \t\t\t\t0;\n\ \t\t}\n\ \n\ \t\treturn compare & 4 ? -1 : 1;\n\ \t} :\n\ \tfunction( a, b ) {\n\ \t\t// Exit early if the nodes are identical\n\ \t\tif ( a === b ) {\n\ \t\t\thasDuplicate = true;\n\ \t\t\treturn 0;\n\ \t\t}\n\ \n\ \t\tvar cur,\n\ \t\t\ti = 0,\n\ \t\t\taup = a.parentNode,\n\ \t\t\tbup = b.parentNode,\n\ \t\t\tap = [ a ],\n\ \t\t\tbp = [ b ];\n\ \n\ \t\t// Parentless nodes are either documents or disconnected\n\ \t\tif ( !aup || !bup ) {\n\ \t\t\treturn a === doc ? -1 :\n\ \t\t\t\tb === doc ? 1 :\n\ \t\t\t\taup ? -1 :\n\ \t\t\t\tbup ? 1 :\n\ \t\t\t\tsortInput ?\n\ \t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\ \t\t\t\t0;\n\ \n\ \t\t// If the nodes are siblings, we can do a quick check\n\ \t\t} else if ( aup === bup ) {\n\ \t\t\treturn siblingCheck( a, b );\n\ \t\t}\n\ \n\ \t\t// Otherwise we need full lists of their ancestors for comparison\n\ \t\tcur = a;\n\ \t\twhile ( (cur = cur.parentNode) ) {\n\ \t\t\tap.unshift( cur );\n\ \t\t}\n\ \t\tcur = b;\n\ \t\twhile ( (cur = cur.parentNode) ) {\n\ \t\t\tbp.unshift( cur );\n\ \t\t}\n\ \n\ \t\t// Walk down the tree looking for a discrepancy\n\ \t\twhile ( ap[i] === bp[i] ) {\n\ \t\t\ti++;\n\ \t\t}\n\ \n\ \t\treturn i ?\n\ \t\t\t// Do a sibling check if the nodes have a common ancestor\n\ \t\t\tsiblingCheck( ap[i], bp[i] ) :\n\ \n\ \t\t\t// Otherwise nodes in our document sort first\n\ \t\t\tap[i] === preferredDoc ? -1 :\n\ \t\t\tbp[i] === preferredDoc ? 1 :\n\ \t\t\t0;\n\ \t};\n\ \n\ \treturn doc;\n\ };\n\ \n\ Sizzle.matches = function( expr, elements ) {\n\ \treturn Sizzle( expr, null, null, elements );\n\ };\n\ \n\ Sizzle.matchesSelector = function( elem, expr ) {\n\ \t// Set document vars if needed\n\ \tif ( ( elem.ownerDocument || elem ) !== document ) {\n\ \t\tsetDocument( elem );\n\ \t}\n\ \n\ \t// Make sure that attribute selectors are quoted\n\ \texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\ \n\ \tif ( support.matchesSelector && documentIsHTML &&\n\ \t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\ \t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\ \n\ \t\ttry {\n\ \t\t\tvar ret = matches.call( elem, expr );\n\ \n\ \t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\ \t\t\tif ( ret || support.disconnectedMatch ||\n\ \t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\ \t\t\t\t\t// fragment in IE 9\n\ \t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\ \t\t\t\treturn ret;\n\ \t\t\t}\n\ \t\t} catch(e) {}\n\ \t}\n\ \n\ \treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n\ };\n\ \n\ Sizzle.contains = function( context, elem ) {\n\ \t// Set document vars if needed\n\ \tif ( ( context.ownerDocument || context ) !== document ) {\n\ \t\tsetDocument( context );\n\ \t}\n\ \treturn contains( context, elem );\n\ };\n\ \n\ Sizzle.attr = function( elem, name ) {\n\ \t// Set document vars if needed\n\ \tif ( ( elem.ownerDocument || elem ) !== document ) {\n\ \t\tsetDocument( elem );\n\ \t}\n\ \n\ \tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\ \t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\ \t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\ \t\t\tfn( elem, name, !documentIsHTML ) :\n\ \t\t\tundefined;\n\ \n\ \treturn val !== undefined ?\n\ \t\tval :\n\ \t\tsupport.attributes || !documentIsHTML ?\n\ \t\t\telem.getAttribute( name ) :\n\ \t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\ \t\t\t\tval.value :\n\ \t\t\t\tnull;\n\ };\n\ \n\ Sizzle.error = function( msg ) {\n\ \tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n\ };\n\ \n\ /**\n\ * Document sorting and removing duplicates\n\ * @param {ArrayLike} results\n\ */\n\ Sizzle.uniqueSort = function( results ) {\n\ \tvar elem,\n\ \t\tduplicates = [],\n\ \t\tj = 0,\n\ \t\ti = 0;\n\ \n\ \t// Unless we *know* we can detect duplicates, assume their presence\n\ \thasDuplicate = !support.detectDuplicates;\n\ \tsortInput = !support.sortStable && results.slice( 0 );\n\ \tresults.sort( sortOrder );\n\ \n\ \tif ( hasDuplicate ) {\n\ \t\twhile ( (elem = results[i++]) ) {\n\ \t\t\tif ( elem === results[ i ] ) {\n\ \t\t\t\tj = duplicates.push( i );\n\ \t\t\t}\n\ \t\t}\n\ \t\twhile ( j-- ) {\n\ \t\t\tresults.splice( duplicates[ j ], 1 );\n\ \t\t}\n\ \t}\n\ \n\ \t// Clear input after sorting to release objects\n\ \t// See https://github.com/jquery/sizzle/pull/225\n\ \tsortInput = null;\n\ \n\ \treturn results;\n\ };\n\ \n\ /**\n\ * Utility function for retrieving the text value of an array of DOM nodes\n\ * @param {Array|Element} elem\n\ */\n\ getText = Sizzle.getText = function( elem ) {\n\ \tvar node,\n\ \t\tret = \"\",\n\ \t\ti = 0,\n\ \t\tnodeType = elem.nodeType;\n\ \n\ \tif ( !nodeType ) {\n\ \t\t// If no nodeType, this is expected to be an array\n\ \t\twhile ( (node = elem[i++]) ) {\n\ \t\t\t// Do not traverse comment nodes\n\ \t\t\tret += getText( node );\n\ \t\t}\n\ \t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\ \t\t// Use textContent for elements\n\ \t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\ \t\tif ( typeof elem.textContent === \"string\" ) {\n\ \t\t\treturn elem.textContent;\n\ \t\t} else {\n\ \t\t\t// Traverse its children\n\ \t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\ \t\t\t\tret += getText( elem );\n\ \t\t\t}\n\ \t\t}\n\ \t} else if ( nodeType === 3 || nodeType === 4 ) {\n\ \t\treturn elem.nodeValue;\n\ \t}\n\ \t// Do not include comment or processing instruction nodes\n\ \n\ \treturn ret;\n\ };\n\ \n\ Expr = Sizzle.selectors = {\n\ \n\ \t// Can be adjusted by the user\n\ \tcacheLength: 50,\n\ \n\ \tcreatePseudo: markFunction,\n\ \n\ \tmatch: matchExpr,\n\ \n\ \tattrHandle: {},\n\ \n\ \tfind: {},\n\ \n\ \trelative: {\n\ \t\t\">\": { dir: \"parentNode\", first: true },\n\ \t\t\" \": { dir: \"parentNode\" },\n\ \t\t\"+\": { dir: \"previousSibling\", first: true },\n\ \t\t\"~\": { dir: \"previousSibling\" }\n\ \t},\n\ \n\ \tpreFilter: {\n\ \t\t\"ATTR\": function( match ) {\n\ \t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\ \n\ \t\t\t// Move the given value to match[3] whether quoted or unquoted\n\ \t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\ \n\ \t\t\tif ( match[2] === \"~=\" ) {\n\ \t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\ \t\t\t}\n\ \n\ \t\t\treturn match.slice( 0