(function(){
/*
 * jQuery 1.2.3b - New Wave Javascript
 *
 * Copyright (c) 2008 John Resig (jquery.com)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * $Date: 2008-02-03 19:43:04 +0100 (So, 03 Feb 2008) $
 * $Rev: 4611 $
 */

// Map over jQuery in case of overwrite
if ( window.jQuery )
	var _jQuery = window.jQuery;

var jQuery = window.jQuery = function( selector, context ) {
	// The jQuery object is actually just the init constructor 'enhanced'
	return new jQuery.prototype.init( selector, context );
};

// Map over the $ in case of overwrite
if ( window.$ )
	var _$ = window.$;
	
// Map the jQuery namespace to the '$' one
window.$ = jQuery;

// A simple way to check for HTML strings or ID strings
// (both of which we optimize for)
var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/;

// Is it a simple selector
var isSimple = /^.[^:#\[\.]*$/;

jQuery.fn = jQuery.prototype = {
	init: function( selector, context ) {
		// Make sure that a selection was provided
		selector = selector || document;

		// Handle $(DOMElement)
		if ( selector.nodeType ) {
			this[0] = selector;
			this.length = 1;
			return this;

		// Handle HTML strings
		} else if ( typeof selector == "string" ) {
			// Are we dealing with HTML string or an ID?
			var match = quickExpr.exec( selector );

			// Verify a match, and that no context was specified for #id
			if ( match && (match[1] || !context) ) {

				// HANDLE: $(html) -> $(array)
				if ( match[1] )
					selector = jQuery.clean( [ match[1] ], context );

				// HANDLE: $("#id")
				else {
					var elem = document.getElementById( match[3] );

					// Make sure an element was located
					if ( elem )
						// Handle the case where IE and Opera return items
						// by name instead of ID
						if ( elem.id != match[3] )
							return jQuery().find( selector );

						// Otherwise, we inject the element directly into the jQuery object
						else {
							this[0] = elem;
							this.length = 1;
							return this;
						}

					else
						selector = [];
				}

			// HANDLE: $(expr, [context])
			// (which is just equivalent to: $(content).find(expr)
			} else
				return new jQuery( context ).find( selector );

		// HANDLE: $(function)
		// Shortcut for document ready
		} else if ( jQuery.isFunction( selector ) )
			return new jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( selector );

		return this.setArray(
			// HANDLE: $(array)
			selector.constructor == Array && selector ||

			// HANDLE: $(arraylike)
			// Watch for when an array-like object, contains DOM nodes, is passed in as the selector
			(selector.jquery || selector.length && selector != window && !selector.nodeType && selector[0] != undefined && selector[0].nodeType) && jQuery.makeArray( selector ) ||

			// HANDLE: $(*)
			[ selector ] );
	},
	
	// The current version of jQuery being used
	jquery: "1.2.3b",

	// The number of elements contained in the matched element set
	size: function() {
		return this.length;
	},
	
	// The number of elements contained in the matched element set
	length: 0,

	// Get the Nth element in the matched element set OR
	// Get the whole matched element set as a clean array
	get: function( num ) {
		return num == undefined ?

			// Return a 'clean' array
			jQuery.makeArray( this ) :

			// Return just the object
			this[ num ];
	},
	
	// Take an array of elements and push it onto the stack
	// (returning the new matched element set)
	pushStack: function( elems ) {
		// Build a new jQuery matched element set
		var ret = jQuery( elems );

		// Add the old object onto the stack (as a reference)
		ret.prevObject = this;

		// Return the newly-formed element set
		return ret;
	},
	
	// Force the current matched set of elements to become
	// the specified array of elements (destroying the stack in the process)
	// You should use pushStack() in order to do this, but maintain the stack
	setArray: function( elems ) {
		// Resetting the length to 0, then using the native Array push
		// is a super-fast way to populate an object with array-like properties
		this.length = 0;
		Array.prototype.push.apply( this, elems );
		
		return this;
	},

	// Execute a callback for every element in the matched set.
	// (You can seed the arguments with an array of args, but this is
	// only used internally.)
	each: function( callback, args ) {
		return jQuery.each( this, callback, args );
	},

	// Determine the position of an element within 
	// the matched set of elements
	index: function( elem ) {
		var ret = -1;

		// Locate the position of the desired element
		this.each(function(i){
			if ( this == elem )
				ret = i;
		});

		return ret;
	},

	attr: function( name, value, type ) {
		var options = name;
		
		// Look for the case where we're accessing a style value
		if ( name.constructor == String )
			if ( value == undefined )
				return this.length && jQuery[ type || "attr" ]( this[0], name ) || undefined;

			else {
				options = {};
				options[ name ] = value;
			}
		
		// Check to see if we're setting style values
		return this.each(function(i){
			// Set all the styles
			for ( name in options )
				jQuery.attr(
					type ?
						this.style :
						this,
					name, jQuery.prop( this, options[ name ], type, i, name )
				);
		});
	},

	css: function( key, value ) {
		// ignore negative width and height values
		if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
			value = undefined;
		return this.attr( key, value, "curCSS" );
	},

	text: function( text ) {
		if ( typeof text != "object" && text != null )
			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );

		var ret = "";

		jQuery.each( text || this, function(){
			jQuery.each( this.childNodes, function(){
				if ( this.nodeType != 8 )
					ret += this.nodeType != 1 ?
						this.nodeValue :
						jQuery.fn.text( [ this ] );
			});
		});

		return ret;
	},

	wrapAll: function( html ) {
		if ( this[0] )
			// The elements to wrap the target around
			jQuery( html, this[0].ownerDocument )
				.clone()
				.insertBefore( this[0] )
				.map(function(){
					var elem = this;

					while ( elem.firstChild )
						elem = elem.firstChild;

					return elem;
				})
				.append(this);

		return this;
	},

	wrapInner: function( html ) {
		return this.each(function(){
			jQuery( this ).contents().wrapAll( html );
		});
	},

	wrap: function( html ) {
		return this.each(function(){
			jQuery( this ).wrapAll( html );
		});
	},

	append: function() {
		return this.domManip(arguments, true, false, function(elem){
			if (this.nodeType == 1)
				this.appendChild( elem );
		});
	},

	prepend: function() {
		return this.domManip(arguments, true, true, function(elem){
			if (this.nodeType == 1)
				this.insertBefore( elem, this.firstChild );
		});
	},
	
	before: function() {
		return this.domManip(arguments, false, false, function(elem){
			this.parentNode.insertBefore( elem, this );
		});
	},

	after: function() {
		return this.domManip(arguments, false, true, function(elem){
			this.parentNode.insertBefore( elem, this.nextSibling );
		});
	},

	end: function() {
		return this.prevObject || jQuery( [] );
	},

	find: function( selector ) {
		var elems = jQuery.map(this, function(elem){
			return jQuery.find( selector, elem );
		});

		return this.pushStack( /[^+>] [^+>]/.test( selector ) || selector.indexOf("..") > -1 ?
			jQuery.unique( elems ) :
			elems );
	},

	clone: function( events ) {
		// Do the clone
		var ret = this.map(function(){
			if ( jQuery.browser.msie && !jQuery.isXMLDoc(this) ) {
				// IE copies events bound via attachEvent when
				// using cloneNode. Calling detachEvent on the
				// clone will also remove the events from the orignal
				// In order to get around this, we use innerHTML.
				// Unfortunately, this means some modifications to 
				// attributes in IE that are actually only stored 
				// as properties will not be copied (such as the
				// the name attribute on an input).
				var clone = this.cloneNode(true),
					container = document.createElement("div");
				container.appendChild(clone);
				return jQuery.clean([container.innerHTML])[0];
			} else
				return this.cloneNode(true);
		});

		// Need to set the expando to null on the cloned set if it exists
		// removeData doesn't work here, IE removes it from the original as well
		// this is primarily for IE but the data expando shouldn't be copied over in any browser
		var clone = ret.find("*").andSelf().each(function(){
			if ( this[ expando ] != undefined )
				this[ expando ] = null;
		});
		
		// Copy the events from the original to the clone
		if ( events === true )
			this.find("*").andSelf().each(function(i){
				if (this.nodeType == 3)
					return;
				var events = jQuery.data( this, "events" );

				for ( var type in events )
					for ( var handler in events[ type ] )
						jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data );
			});

		// Return the cloned set
		return ret;
	},

	filter: function( selector ) {
		return this.pushStack(
			jQuery.isFunction( selector ) &&
			jQuery.grep(this, function(elem, i){
				return selector.call( elem, i );
			}) ||

			jQuery.multiFilter( selector, this ) );
	},

	not: function( selector ) {
		if ( selector.constructor == String )
			// test special case where just one selector is passed in
			if ( isSimple.test( selector ) )
				return this.pushStack( jQuery.multiFilter( selector, this, true ) );
			else
				selector = jQuery.multiFilter( selector, this );

		var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
		return this.filter(function() {
			return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
		});
	},

	add: function( selector ) {
		return !selector ? this : this.pushStack( jQuery.merge( 
			this.get(),
			selector.constructor == String ? 
				jQuery( selector ).get() :
				selector.length != undefined && (!selector.nodeName || jQuery.nodeName(selector, "form")) ?
					selector : [selector] ) );
	},

	is: function( selector ) {
		return selector ?
			jQuery.multiFilter( selector, this ).length > 0 :
			false;
	},

	hasClass: function( selector ) {
		return this.is( "." + selector );
	},
	
	val: function( value ) {
		if ( value == undefined ) {

			if ( this.length ) {
				var elem = this[0];

				// We need to handle select boxes special
				if ( jQuery.nodeName( elem, "select" ) ) {
					var index = elem.selectedIndex,
						values = [],
						options = elem.options,
						one = elem.type == "select-one";
					
					// Nothing was selected
					if ( index < 0 )
						return null;

					// Loop through all the selected options
					for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
						var option = options[ i ];

						if ( option.selected ) {
							// Get the specifc value for the option
							value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value;
							
							// We don't need an array for one selects
							if ( one )
								return value;
							
							// Multi-Selects return an array
							values.push( value );
						}
					}
					
					return values;
					
				// Everything else, we just grab the value
				} else
					return (this[0].value || "").replace(/\r/g, "");

			}

			return undefined;
		}

		return this.each(function(){
			if ( this.nodeType != 1 )
				return;

			if ( value.constructor == Array && /radio|checkbox/.test( this.type ) )
				this.checked = (jQuery.inArray(this.value, value) >= 0 ||
					jQuery.inArray(this.name, value) >= 0);

			else if ( jQuery.nodeName( this, "select" ) ) {
				var values = value.constructor == Array ?
					value :
					[ value ];

				jQuery( "option", this ).each(function(){
					this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
						jQuery.inArray( this.text, values ) >= 0);
				});

				if ( !values.length )
					this.selectedIndex = -1;

			} else
				this.value = value;
		});
	},
	
	html: function( value ) {
		return value == undefined ?
			(this.length ?
				this[0].innerHTML :
				null) :
			this.empty().append( value );
	},

	replaceWith: function( value ) {
		return this.after( value ).remove();
	},

	eq: function( i ) {
		return this.slice( i, i + 1 );
	},

	slice: function() {
		return this.pushStack( Array.prototype.slice.apply( this, arguments ) );
	},

	map: function( callback ) {
		return this.pushStack( jQuery.map(this, function(elem, i){
			return callback.call( elem, i, elem );
		}));
	},

	andSelf: function() {
		return this.add( this.prevObject );
	},

	data: function( key, value ){
		var parts = key.split(".");
		parts[1] = parts[1] ? "." + parts[1] : "";

		if ( value == null ) {
			var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
			
			if ( data == undefined && this.length )
				data = jQuery.data( this[0], key );

			return data == null && parts[1] ?
				this.data( parts[0] ) :
				data;
		} else
			return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
				jQuery.data( this, key, value );
			});
	},

	removeData: function( key ){
		return this.each(function(){
			jQuery.removeData( this, key );
		});
	},
	
	domManip: function( args, table, reverse, callback ) {
		var clone = this.length > 1, elems; 

		return this.each(function(){
			if ( !elems ) {
				elems = jQuery.clean( args, this.ownerDocument );

				if ( reverse )
					elems.reverse();
			}

			var obj = this;

			if ( table && jQuery.nodeName( this, "table" ) && jQuery.nodeName( elems[0], "tr" ) )
				obj = this.getElementsByTagName("tbody")[0] || this.appendChild( this.ownerDocument.createElement("tbody") );

			var scripts = jQuery( [] );

			jQuery.each(elems, function(){
				var elem = clone ?
					jQuery( this ).clone( true )[0] :
					this;

				// execute all scripts after the elements have been injected
				if ( jQuery.nodeName( elem, "script" ) ) {
					scripts = scripts.add( elem );
				} else {
					// Remove any inner scripts for later evaluation
					if ( elem.nodeType == 1 )
						scripts = scripts.add( jQuery( "script", elem ).remove() );

					// Inject the elements into the document
					callback.call( obj, elem );
				}
			});

			scripts.each( evalScript );
		});
	}
};

// Give the init function the jQuery prototype for later instantiation
jQuery.prototype.init.prototype = jQuery.prototype;

function evalScript( i, elem ) {
	if ( elem.src )
		jQuery.ajax({
			url: elem.src,
			async: false,
			dataType: "script"
		});

	else
		jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );

	if ( elem.parentNode )
		elem.parentNode.removeChild( elem );
}

jQuery.extend = jQuery.fn.extend = function() {
	// copy reference to target object
	var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;

	// Handle a deep copy situation
	if ( target.constructor == Boolean ) {
		deep = target;
		target = arguments[1] || {};
		// skip the boolean and the target
		i = 2;
	}

	// Handle case when target is a string or something (possible in deep copy)
	if ( typeof target != "object" && typeof target != "function" )
		target = {};

	// extend jQuery itself if only one argument is passed
	if ( length == 1 ) {
		target = this;
		i = 0;
	}

	for ( ; i < length; i++ )
		// Only deal with non-null/undefined values
		if ( (options = arguments[ i ]) != null )
			// Extend the base object
			for ( var name in options ) {
				// Prevent never-ending loop
				if ( target === options[ name ] )
					continue;

				// Recurse if we're merging object values
				if ( deep && options[ name ] && typeof options[ name ] == "object" && target[ name ] && !options[ name ].nodeType )
					target[ name ] = jQuery.extend( target[ name ], options[ name ] );

				// Don't bring in undefined values
				else if ( options[ name ] != undefined )
					target[ name ] = options[ name ];

			}

	// Return the modified object
	return target;
};

var expando = "jQuery" + (new Date()).getTime(), uuid = 0, windowData = {};

// exclude the following css properties to add px
var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i;

jQuery.extend({
	noConflict: function( deep ) {
		window.$ = _$;

		if ( deep )
			window.jQuery = _jQuery;

		return jQuery;
	},

	// See test/unit/core.js for details concerning this function.
	isFunction: function( fn ) {
		return !!fn && typeof fn != "string" && !fn.nodeName && 
			fn.constructor != Array && /function/i.test( fn + "" );
	},
	
	// check if an element is in a (or is an) XML document
	isXMLDoc: function( elem ) {
		return elem.documentElement && !elem.body ||
			elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
	},

	// Evalulates a script in a global context
	globalEval: function( data ) {
		data = jQuery.trim( data );

		if ( data ) {
			// Inspired by code by Andrea Giammarchi
			// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
			var head = document.getElementsByTagName("head")[0] || document.documentElement,
				script = document.createElement("script");

			script.type = "text/javascript";
			if ( jQuery.browser.msie )
				script.text = data;
			else
				script.appendChild( document.createTextNode( data ) );

			head.appendChild( script );
			head.removeChild( script );
		}
	},

	nodeName: function( elem, name ) {
		return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
	},
	
	cache: {},
	
	data: function( elem, name, data ) {
		elem = elem == window ?
			windowData :
			elem;

		var id = elem[ expando ];

		// Compute a unique ID for the element
		if ( !id ) 
			id = elem[ expando ] = ++uuid;

		// Only generate the data cache if we're
		// trying to access or manipulate it
		if ( name && !jQuery.cache[ id ] )
			jQuery.cache[ id ] = {};
		
		// Prevent overriding the named cache with undefined values
		if ( data != undefined )
			jQuery.cache[ id ][ name ] = data;
		
		// Return the named cache data, or the ID for the element	
		return name ?
			jQuery.cache[ id ][ name ] :
			id;
	},
	
	removeData: function( elem, name ) {
		elem = elem == window ?
			windowData :
			elem;

		var id = elem[ expando ];

		// If we want to remove a specific section of the element's data
		if ( name ) {
			if ( jQuery.cache[ id ] ) {
				// Remove the section of cache data
				delete jQuery.cache[ id ][ name ];

				// If we've removed all the data, remove the element's cache
				name = "";

				for ( name in jQuery.cache[ id ] )
					break;

				if ( !name )
					jQuery.removeData( elem );
			}

		// Otherwise, we want to remove all of the element's data
		} else {
			// Clean up the element expando
			try {
				delete elem[ expando ];
			} catch(e){
				// IE has trouble directly removing the expando
				// but it's ok with using removeAttribute
				if ( elem.removeAttribute )
					elem.removeAttribute( expando );
			}

			// Completely remove the data cache
			delete jQuery.cache[ id ];
		}
	},

	// args is for internal usage only
	each: function( object, callback, args ) {
		if ( args ) {
			if ( object.length == undefined ) {
				for ( var name in object )
					if ( callback.apply( object[ name ], args ) === false )
						break;
			} else
				for ( var i = 0, length = object.length; i < length; i++ )
					if ( callback.apply( object[ i ], args ) === false )
						break;

		// A special, fast, case for the most common use of each
		} else {
			if ( object.length == undefined ) {
				for ( var name in object )
					if ( callback.call( object[ name ], name, object[ name ] ) === false )
						break;
			} else
				for ( var i = 0, length = object.length, value = object[0]; 
					i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
		}

		return object;
	},
	
	prop: function( elem, value, type, i, name ) {
			// Handle executable functions
			if ( jQuery.isFunction( value ) )
				value = value.call( elem, i );
				
			// Handle passing in a number to a CSS property
			return value && value.constructor == Number && type == "curCSS" && !exclude.test( name ) ?
				value + "px" :
				value;
	},

	className: {
		// internal only, use addClass("class")
		add: function( elem, classNames ) {
			jQuery.each((classNames || "").split(/\s+/), function(i, className){
				if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
					elem.className += (elem.className ? " " : "") + className;
			});
		},

		// internal only, use removeClass("class")
		remove: function( elem, classNames ) {
			if (elem.nodeType == 1)
				elem.className = classNames != undefined ?
					jQuery.grep(elem.className.split(/\s+/), function(className){
						return !jQuery.className.has( classNames, className );	
					}).join(" ") :
					"";
		},

		// internal only, use is(".class")
		has: function( elem, className ) {
			return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1;
		}
	},

	// A method for quickly swapping in/out CSS properties to get correct calculations
	swap: function( elem, options, callback ) {
		var old = {};
		// Remember the old values, and insert the new ones
		for ( var name in options ) {
			old[ name ] = elem.style[ name ];
			elem.style[ name ] = options[ name ];
		}

		callback.call( elem );

		// Revert the old values
		for ( var name in options )
			elem.style[ name ] = old[ name ];
	},

	css: function( elem, name, force ) {
		if ( name == "width" || name == "height" ) {
			var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
		
			function getWH() {
				val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
				var padding = 0, border = 0;
				jQuery.each( which, function() {
					padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
					border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
				});
				val -= Math.round(padding + border);
			}
		
			if ( jQuery(elem).is(":visible") )
				getWH();
			else
				jQuery.swap( elem, props, getWH );
			
			return Math.max(0, val);
		}
		
		return jQuery.curCSS( elem, name, force );
	},

	curCSS: function( elem, name, force ) {
		var ret;

		// A helper method for determining if an element's values are broken
		function color( elem ) {
			if ( !jQuery.browser.safari )
				return false;

			var ret = document.defaultView.getComputedStyle( elem, null );
			return !ret || ret.getPropertyValue("color") == "";
		}

		// We need to handle opacity special in IE
		if ( name == "opacity" && jQuery.browser.msie ) {
			ret = jQuery.attr( elem.style, "opacity" );

			return ret == "" ?
				"1" :
				ret;
		}
		// Opera sometimes will give the wrong display answer, this fixes it, see #2037
		if ( jQuery.browser.opera && name == "display" ) {
			var save = elem.style.display;
			elem.style.display = "block";
			elem.style.display = save;
		}
		
		// Make sure we're using the right name for getting the float value
		if ( name.match( /float/i ) )
			name = styleFloat;

		if ( !force && elem.style && elem.style[ name ] )
			ret = elem.style[ name ];

		else if ( document.defaultView && document.defaultView.getComputedStyle ) {

			// Only "float" is needed here
			if ( name.match( /float/i ) )
				name = "float";

			name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();

			var getComputedStyle = document.defaultView.getComputedStyle( elem, null );

			if ( getComputedStyle && !color( elem ) )
				ret = getComputedStyle.getPropertyValue( name );

			// If the element isn't reporting its values properly in Safari
			// then some display: none elements are involved
			else {
				var swap = [], stack = [];

				// Locate all of the parent display: none elements
				for ( var a = elem; a && color(a); a = a.parentNode )
					stack.unshift(a);

				// Go through and make them visible, but in reverse
				// (It would be better if we knew the exact display type that they had)
				for ( var i = 0; i < stack.length; i++ )
					if ( color( stack[ i ] ) ) {
						swap[ i ] = stack[ i ].style.display;
						stack[ i ].style.display = "block";
					}

				// Since we flip the display style, we have to handle that
				// one special, otherwise get the value
				ret = name == "display" && swap[ stack.length - 1 ] != null ?
					"none" :
					( getComputedStyle && getComputedStyle.getPropertyValue( name ) ) || "";

				// Finally, revert the display styles back
				for ( var i = 0; i < swap.length; i++ )
					if ( swap[ i ] != null )
						stack[ i ].style.display = swap[ i ];
			}

			// We should always get a number back from opacity
			if ( name == "opacity" && ret == "" )
				ret = "1";

		} else if ( elem.currentStyle ) {
			var camelCase = name.replace(/\-(\w)/g, function(all, letter){
				return letter.toUpperCase();
			});

			ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];

			// From the awesome hack by Dean Edwards
			// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291

			// If we're not dealing with a regular pixel number
			// but a number that has a weird ending, we need to convert it to pixels
			if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
				// Remember the original values
				var style = elem.style.left, runtimeStyle = elem.runtimeStyle.left;

				// Put in the new values to get a computed value out
				elem.runtimeStyle.left = elem.currentStyle.left;
				elem.style.left = ret || 0;
				ret = elem.style.pixelLeft + "px";

				// Revert the changed values
				elem.style.left = style;
				elem.runtimeStyle.left = runtimeStyle;
			}
		}

		return ret;
	},
	
	clean: function( elems, context ) {
		var ret = [];
		context = context || document;
		// !context.createElement fails in IE with an error but returns typeof 'object'
		if (typeof context.createElement == 'undefined') 
			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;

		jQuery.each(elems, function(i, elem){
			if ( !elem )
				return;

			if ( elem.constructor == Number )
				elem = elem.toString();
			
			// Convert html string into DOM nodes
			if ( typeof elem == "string" ) {
				// Fix "XHTML"-style tags in all browsers
				elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
					return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
						all :
						front + "></" + tag + ">";
				});

				// Trim whitespace, otherwise indexOf won't work as expected
				var tags = jQuery.trim( elem ).toLowerCase(), div = context.createElement("div");

				var wrap =
					// option or optgroup
					!tags.indexOf("<opt") &&
					[ 1, "<select multiple='multiple'>", "</select>" ] ||
					
					!tags.indexOf("<leg") &&
					[ 1, "<fieldset>", "</fieldset>" ] ||
					
					tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
					[ 1, "<table>", "</table>" ] ||
					
					!tags.indexOf("<tr") &&
					[ 2, "<table><tbody>", "</tbody></table>" ] ||
					
				 	// <thead> matched above
					(!tags.indexOf("<td") || !tags.indexOf("<th")) &&
					[ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] ||
					
					!tags.indexOf("<col") &&
					[ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] ||

					// IE can't serialize <link> and <script> tags normally
					jQuery.browser.msie &&
					[ 1, "div<div>", "</div>" ] ||
					
					[ 0, "", "" ];

				// Go to html and back, then peel off extra wrappers
				div.innerHTML = wrap[1] + elem + wrap[2];
				
				// Move to the right depth
				while ( wrap[0]-- )
					div = div.lastChild;
				
				// Remove IE's autoinserted <tbody> from table fragments
				if ( jQuery.browser.msie ) {
					
					// String was a <table>, *may* have spurious <tbody>
					var tbody = !tags.indexOf("<table") && tags.indexOf("<tbody") < 0 ?
						div.firstChild && div.firstChild.childNodes :
						
						// String was a bare <thead> or <tfoot>
						wrap[1] == "<table>" && tags.indexOf("<tbody") < 0 ?
							div.childNodes :
							[];
				
					for ( var j = tbody.length - 1; j >= 0 ; --j )
						if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length )
							tbody[ j ].parentNode.removeChild( tbody[ j ] );
					
					// IE completely kills leading whitespace when innerHTML is used	
					if ( /^\s/.test( elem ) )	
						div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
				
				}
				
				elem = jQuery.makeArray( div.childNodes );
			}

			if ( elem.length === 0 && (!jQuery.nodeName( elem, "form" ) && !jQuery.nodeName( elem, "select" )) )
				return;

			if ( elem[0] == undefined || jQuery.nodeName( elem, "form" ) || elem.options )
				ret.push( elem );

			else
				ret = jQuery.merge( ret, elem );

		});

		return ret;
	},
	
	attr: function( elem, name, value ) {
		// don't set attributes on text and comment nodes
		if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
			return undefined;

		var fix = jQuery.isXMLDoc( elem ) ?
			{} :
			jQuery.props;

		// Safari mis-reports the default selected property of a hidden option
		// Accessing the parent's selectedIndex property fixes it
		if ( name == "selected" && jQuery.browser.safari )
			elem.parentNode.selectedIndex;
		
		// Certain attributes only work when accessed via the old DOM 0 way
		if ( fix[ name ] ) {
			if ( value != undefined )
				elem[ fix[ name ] ] = value;

			return elem[ fix[ name ] ];

		} else if ( jQuery.browser.msie && name == "style" )
			return jQuery.attr( elem.style, "cssText", value );

		else if ( value == undefined && jQuery.browser.msie && jQuery.nodeName( elem, "form" ) && (name == "action" || name == "method") )
			return elem.getAttributeNode( name ).nodeValue;

		// IE elem.getAttribute passes even for style
		else if ( elem.tagName ) {

			if ( value != undefined ) {
				// We can't allow the type property to be changed (since it causes problems in IE)
				if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
					throw "type property can't be changed";

				// convert the value to a string (all browsers do this but IE) see #1070
				elem.setAttribute( name, "" + value );
			}

			if ( jQuery.browser.msie && /href|src/.test( name ) && !jQuery.isXMLDoc( elem ) ) 
				return elem.getAttribute( name, 2 );

			return elem.getAttribute( name );

		// elem is actually elem.style ... set the style
		} else {
			// IE actually uses filters for opacity
			if ( name == "opacity" && jQuery.browser.msie ) {
				if ( value != undefined ) {
					// IE has trouble with opacity if it does not have layout
					// Force it by setting the zoom level
					elem.zoom = 1; 
	
					// Set the alpha filter to set the opacity
					elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +
						(parseFloat( value ).toString() == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
				}
	
				return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?
					(parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100).toString() :
					"";
			}

			name = name.replace(/-([a-z])/ig, function(all, letter){
				return letter.toUpperCase();
			});

			if ( value != undefined )
				elem[ name ] = value;

			return elem[ name ];
		}
	},
	
	trim: function( text ) {
		return (text || "").replace( /^\s+|\s+$/g, "" );
	},

	makeArray: function( array ) {
		var ret = [];

		// Need to use typeof to fight Safari childNodes crashes
		if ( typeof array != "array" )
			for ( var i = 0, length = array.length; i < length; i++ )
				ret.push( array[ i ] );
		else
			ret = array.slice( 0 );

		return ret;
	},

	inArray: function( elem, array ) {
		for ( var i = 0, length = array.length; i < length; i++ )
			if ( array[ i ] == elem )
				return i;

		return -1;
	},

	merge: function( first, second ) {
		// We have to loop this way because IE & Opera overwrite the length
		// expando of getElementsByTagName

		// Also, we need to make sure that the correct elements are being returned
		// (IE returns comment nodes in a '*' query)
		if ( jQuery.browser.msie ) {
			for ( var i = 0; second[ i ]; i++ )
				if ( second[ i ].nodeType != 8 )
					first.push( second[ i ] );

		} else
			for ( var i = 0; second[ i ]; i++ )
				first.push( second[ i ] );

		return first;
	},

	unique: function( array ) {
		var ret = [], done = {};

		try {

			for ( var i = 0, length = array.length; i < length; i++ ) {
				var id = jQuery.data( array[ i ] );

				if ( !done[ id ] ) {
					done[ id ] = true;
					ret.push( array[ i ] );
				}
			}

		} catch( e ) {
			ret = array;
		}

		return ret;
	},

	grep: function( elems, callback, inv ) {
		var ret = [];

		// Go through the array, only saving the items
		// that pass the validator function
		for ( var i = 0, length = elems.length; i < length; i++ )
			if ( !inv && callback( elems[ i ], i ) || inv && !callback( elems[ i ], i ) )
				ret.push( elems[ i ] );

		return ret;
	},

	map: function( elems, callback ) {
		var ret = [];

		// Go through the array, translating each of the items to their
		// new value (or values).
		for ( var i = 0, length = elems.length; i < length; i++ ) {
			var value = callback( elems[ i ], i );

			if ( value !== null && value != undefined ) {
				if ( value.constructor != Array )
					value = [ value ];

				ret = ret.concat( value );
			}
		}

		return ret;
	}
});

var userAgent = navigator.userAgent.toLowerCase();

// Figure out what browser is being used
jQuery.browser = {
	version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
	safari: /webkit/.test( userAgent ),
	opera: /opera/.test( userAgent ),
	msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
	mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
};

var styleFloat = jQuery.browser.msie ?
	"styleFloat" :
	"cssFloat";
	
jQuery.extend({
	// Check to see if the W3C box model is being used
	boxModel: !jQuery.browser.msie || document.compatMode == "CSS1Compat",
	
	props: {
		"for": "htmlFor",
		"class": "className",
		"float": styleFloat,
		cssFloat: styleFloat,
		styleFloat: styleFloat,
		innerHTML: "innerHTML",
		className: "className",
		value: "value",
		disabled: "disabled",
		checked: "checked",
		readonly: "readOnly",
		selected: "selected",
		maxlength: "maxLength",
		selectedIndex: "selectedIndex",
		defaultValue: "defaultValue",
		tagName: "tagName",
		nodeName: "nodeName"
	}
});

jQuery.each({
	parent: function(elem){return elem.parentNode;},
	parents: function(elem){return jQuery.dir(elem,"parentNode");},
	next: function(elem){return jQuery.nth(elem,2,"nextSibling");},
	prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},
	nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},
	prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},
	siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},
	children: function(elem){return jQuery.sibling(elem.firstChild);},
	contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}
}, function(name, fn){
	jQuery.fn[ name ] = function( selector ) {
		var ret = jQuery.map( this, fn );

		if ( selector && typeof selector == "string" )
			ret = jQuery.multiFilter( selector, ret );

		return this.pushStack( jQuery.unique( ret ) );
	};
});

jQuery.each({
	appendTo: "append",
	prependTo: "prepend",
	insertBefore: "before",
	insertAfter: "after",
	replaceAll: "replaceWith"
}, function(name, original){
	jQuery.fn[ name ] = function() {
		var args = arguments;

		return this.each(function(){
			for ( var i = 0, length = args.length; i < length; i++ )
				jQuery( args[ i ] )[ original ]( this );
		});
	};
});

jQuery.each({
	removeAttr: function( name ) {
		jQuery.attr( this, name, "" );
		if (this.nodeType == 1) 
			this.removeAttribute( name );
	},

	addClass: function( classNames ) {
		jQuery.className.add( this, classNames );
	},

	removeClass: function( classNames ) {
		jQuery.className.remove( this, classNames );
	},

	toggleClass: function( classNames ) {
		jQuery.className[ jQuery.className.has( this, classNames ) ? "remove" : "add" ]( this, classNames );
	},

	remove: function( selector ) {
		if ( !selector || jQuery.filter( selector, [ this ] ).r.length ) {
			// Prevent memory leaks
			jQuery( "*", this ).add(this).each(function(){
				jQuery.event.remove(this);
				jQuery.removeData(this);
			});
			if (this.parentNode)
				this.parentNode.removeChild( this );
		}
	},

	empty: function() {
		// Remove element nodes and prevent memory leaks
		jQuery( ">*", this ).remove();
		
		// Remove any remaining nodes
		while ( this.firstChild )
			this.removeChild( this.firstChild );
	}
}, function(name, fn){
	jQuery.fn[ name ] = function(){
		return this.each( fn, arguments );
	};
});

jQuery.each([ "Height", "Width" ], function(i, name){
	var type = name.toLowerCase();
	
	jQuery.fn[ type ] = function( size ) {
		// Get window width or height
		return this[0] == window ?
			// Opera reports document.body.client[Width/Height] properly in both quirks and standards
			jQuery.browser.opera && document.body[ "client" + name ] || 
			
			// Safari reports inner[Width/Height] just fine (Mozilla and Opera include scroll bar widths)
			jQuery.browser.safari && window[ "inner" + name ] ||
			
			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
			document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] || document.body[ "client" + name ] :
		
			// Get document width or height
			this[0] == document ?
				// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
				Math.max( 
					Math.max(document.body["scroll" + name], document.documentElement["scroll" + name]), 
					Math.max(document.body["offset" + name], document.documentElement["offset" + name]) 
				) :

				// Get or set width or height on the element
				size == undefined ?
					// Get width or height on the element
					(this.length ? jQuery.css( this[0], type ) : null) :

					// Set the width or height on the element (default to pixels if value is unitless)
					this.css( type, size.constructor == String ? size : size + "px" );
	};
});

var chars = jQuery.browser.safari && parseInt(jQuery.browser.version) < 417 ?
		"(?:[\\w*_-]|\\\\.)" :
		"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",
	quickChild = new RegExp("^>\\s*(" + chars + "+)"),
	quickID = new RegExp("^(" + chars + "+)(#)(" + chars + "+)"),
	quickClass = new RegExp("^([#.]?)(" + chars + "*)");

jQuery.extend({
	expr: {
		"": function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},
		"#": function(a,i,m){return a.getAttribute("id")==m[2];},
		":": {
			// Position Checks
			lt: function(a,i,m){return i<m[3]-0;},
			gt: function(a,i,m){return i>m[3]-0;},
			nth: function(a,i,m){return m[3]-0==i;},
			eq: function(a,i,m){return m[3]-0==i;},
			first: function(a,i){return i==0;},
			last: function(a,i,m,r){return i==r.length-1;},
			even: function(a,i){return i%2==0;},
			odd: function(a,i){return i%2;},

			// Child Checks
			"first-child": function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},
			"last-child": function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},
			"only-child": function(a){return !jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},

			// Parent Checks
			parent: function(a){return a.firstChild;},
			empty: function(a){return !a.firstChild;},

			// Text Check
			contains: function(a,i,m){return (a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},

			// Visibility
			visible: function(a){return "hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},
			hidden: function(a){return "hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},

			// Form attributes
			enabled: function(a){return !a.disabled;},
			disabled: function(a){return a.disabled;},
			checked: function(a){return a.checked;},
			selected: function(a){return a.selected||jQuery.attr(a,"selected");},

			// Form elements
			text: function(a){return "text"==a.type;},
			radio: function(a){return "radio"==a.type;},
			checkbox: function(a){return "checkbox"==a.type;},
			file: function(a){return "file"==a.type;},
			password: function(a){return "password"==a.type;},
			submit: function(a){return "submit"==a.type;},
			image: function(a){return "image"==a.type;},
			reset: function(a){return "reset"==a.type;},
			button: function(a){return "button"==a.type||jQuery.nodeName(a,"button");},
			input: function(a){return /input|select|textarea|button/i.test(a.nodeName);},

			// :has()
			has: function(a,i,m){return jQuery.find(m[3],a).length;},

			// :header
			header: function(a){return /h\d/i.test(a.nodeName);},

			// :animated
			animated: function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}
		}
	},
	
	// The regular expressions that power the parsing engine
	parse: [
		// Match: [@value='test'], [@foo]
		/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,

		// Match: :contains('foo')
		/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,

		// Match: :even, :last-chlid, #id, .class
		new RegExp("^([:.#]*)(" + chars + "+)")
	],

	multiFilter: function( expr, elems, not ) {
		var old, cur = [];

		while ( expr && expr != old ) {
			old = expr;
			var f = jQuery.filter( expr, elems, not );
			expr = f.t.replace(/^\s*,\s*/, "" );
			cur = not ? elems = f.r : jQuery.merge( cur, f.r );
		}

		return cur;
	},

	find: function( t, context ) {
		// Quickly handle non-string expressions
		if ( typeof t != "string" )
			return [ t ];

		// check to make sure context is a DOM element or a document
		if ( context && context.nodeType != 1 && context.nodeType != 9)
			return [ ];

		// Set the correct context (if none is provided)
		context = context || document;

		// Initialize the search
		var ret = [context], done = [], last, nodeName;

		// Continue while a selector expression exists, and while
		// we're no longer looping upon ourselves
		while ( t && last != t ) {
			var r = [];
			last = t;

			t = jQuery.trim(t);

			var foundToken = false;

			// An attempt at speeding up child selectors that
			// point to a specific element tag
			var re = quickChild;
			var m = re.exec(t);

			if ( m ) {
				nodeName = m[1].toUpperCase();

				// Perform our own iteration and filter
				for ( var i = 0; ret[i]; i++ )
					for ( var c = ret[i].firstChild; c; c = c.nextSibling )
						if ( c.nodeType == 1 && (nodeName == "*" || c.nodeName.toUpperCase() == nodeName) )
							r.push( c );

				ret = r;
				t = t.replace( re, "" );
				if ( t.indexOf(" ") == 0 ) continue;
				foundToken = true;
			} else {
				re = /^([>+~])\s*(\w*)/i;

				if ( (m = re.exec(t)) != null ) {
					r = [];

					var merge = {};
					nodeName = m[2].toUpperCase();
					m = m[1];

					for ( var j = 0, rl = ret.length; j < rl; j++ ) {
						var n = m == "~" || m == "+" ? ret[j].nextSibling : ret[j].firstChild;
						for ( ; n; n = n.nextSibling )
							if ( n.nodeType == 1 ) {
								var id = jQuery.data(n);

								if ( m == "~" && merge[id] ) break;
								
								if (!nodeName || n.nodeName.toUpperCase() == nodeName ) {
									if ( m == "~" ) merge[id] = true;
									r.push( n );
								}
								
								if ( m == "+" ) break;
							}
					}

					ret = r;

					// And remove the token
					t = jQuery.trim( t.replace( re, "" ) );
					foundToken = true;
				}
			}

			// See if there's still an expression, and that we haven't already
			// matched a token
			if ( t && !foundToken ) {
				// Handle multiple expressions
				if ( !t.indexOf(",") ) {
					// Clean the result set
					if ( context == ret[0] ) ret.shift();

					// Merge the result sets
					done = jQuery.merge( done, ret );

					// Reset the context
					r = ret = [context];

					// Touch up the selector string
					t = " " + t.substr(1,t.length);

				} else {
					// Optimize for the case nodeName#idName
					var re2 = quickID;
					var m = re2.exec(t);
					
					// Re-organize the results, so that they're consistent
					if ( m ) {
						m = [ 0, m[2], m[3], m[1] ];

					} else {
						// Otherwise, do a traditional filter check for
						// ID, class, and element selectors
						re2 = quickClass;
						m = re2.exec(t);
					}

					m[2] = m[2].replace(/\\/g, "");

					var elem = ret[ret.length-1];

					// Try to do a global search by ID, where we can
					if ( m[1] == "#" && elem && elem.getElementById && !jQuery.isXMLDoc(elem) ) {
						// Optimization for HTML document case
						var oid = elem.getElementById(m[2]);
						
						// Do a quick check for the existence of the actual ID attribute
						// to avoid selecting by the name attribute in IE
						// also check to insure id is a string to avoid selecting an element with the name of 'id' inside a form
						if ( (jQuery.browser.msie||jQuery.browser.opera) && oid && typeof oid.id == "string" && oid.id != m[2] )
							oid = jQuery('[@id="'+m[2]+'"]', elem)[0];

						// Do a quick check for node name (where applicable) so
						// that div#foo searches will be really fast
						ret = r = oid && (!m[3] || jQuery.nodeName(oid, m[3])) ? [oid] : [];
					} else {
						// We need to find all descendant elements
						for ( var i = 0; ret[i]; i++ ) {
							// Grab the tag name being searched for
							var tag = m[1] == "#" && m[3] ? m[3] : m[1] != "" || m[0] == "" ? "*" : m[2];

							// Handle IE7 being really dumb about <object>s
							if ( tag == "*" && ret[i].nodeName.toLowerCase() == "object" )
								tag = "param";

							r = jQuery.merge( r, ret[i].getElementsByTagName( tag ));
						}

						// It's faster to filter by class and be done with it
						if ( m[1] == "." )
							r = jQuery.classFilter( r, m[2] );

						// Same with ID filtering
						if ( m[1] == "#" ) {
							var tmp = [];

							// Try to find the element with the ID
							for ( var i = 0; r[i]; i++ )
								if ( r[i].getAttribute("id") == m[2] ) {
									tmp = [ r[i] ];
									break;
								}

							r = tmp;
						}

						ret = r;
					}

					t = t.replace( re2, "" );
				}

			}

			// If a selector string still exists
			if ( t ) {
				// Attempt to filter it
				var val = jQuery.filter(t,r);
				ret = r = val.r;
				t = jQuery.trim(val.t);
			}
		}

		// An error occurred with the selector;
		// just return an empty set instead
		if ( t )
			ret = [];

		// Remove the root context
		if ( ret && context == ret[0] )
			ret.shift();

		// And combine the results
		done = jQuery.merge( done, ret );

		return done;
	},

	classFilter: function(r,m,not){
		m = " " + m + " ";
		var tmp = [];
		for ( var i = 0; r[i]; i++ ) {
			var pass = (" " + r[i].className + " ").indexOf( m ) >= 0;
			if ( !not && pass || not && !pass )
				tmp.push( r[i] );
		}
		return tmp;
	},

	filter: function(t,r,not) {
		var last;

		// Look for common filter expressions
		while ( t && t != last ) {
			last = t;

			var p = jQuery.parse, m;

			for ( var i = 0; p[i]; i++ ) {
				m = p[i].exec( t );

				if ( m ) {
					// Remove what we just matched
					t = t.substring( m[0].length );

					m[2] = m[2].replace(/\\/g, "");
					break;
				}
			}

			if ( !m )
				break;

			// :not() is a special case that can be optimized by
			// keeping it out of the expression list
			if ( m[1] == ":" && m[2] == "not" )
				// optimize if only one selector found (most common case)
				r = isSimple.test( m[3] ) ?
					jQuery.filter(m[3], r, true).r :
					jQuery( r ).not( m[3] );

			// We can get a big speed boost by filtering by class here
			else if ( m[1] == "." )
				r = jQuery.classFilter(r, m[2], not);

			else if ( m[1] == "[" ) {
				var tmp = [], type = m[3];
				
				for ( var i = 0, rl = r.length; i < rl; i++ ) {
					var a = r[i], z = a[ jQuery.props[m[2]] || m[2] ];
					
					if ( z == null || /href|src|selected/.test(m[2]) )
						z = jQuery.attr(a,m[2]) || '';

					if ( (type == "" && !!z ||
						 type == "=" && z == m[5] ||
						 type == "!=" && z != m[5] ||
						 type == "^=" && z && !z.indexOf(m[5]) ||
						 type == "$=" && z.substr(z.length - m[5].length) == m[5] ||
						 (type == "*=" || type == "~=") && z.indexOf(m[5]) >= 0) ^ not )
							tmp.push( a );
				}
				
				r = tmp;

			// We can get a speed boost by handling nth-child here
			} else if ( m[1] == ":" && m[2] == "nth-child" ) {
				var merge = {}, tmp = [],
					// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
					test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
						m[3] == "even" && "2n" || m[3] == "odd" && "2n+1" ||
						!/\D/.test(m[3]) && "0n+" + m[3] || m[3]),
					// calculate the numbers (first)n+(last) including if they are negative
					first = (test[1] + (test[2] || 1)) - 0, last = test[3] - 0;
 
				// loop through all the elements left in the jQuery object
				for ( var i = 0, rl = r.length; i < rl; i++ ) {
					var node = r[i], parentNode = node.parentNode, id = jQuery.data(parentNode);

					if ( !merge[id] ) {
						var c = 1;

						for ( var n = parentNode.firstChild; n; n = n.nextSibling )
							if ( n.nodeType == 1 )
								n.nodeIndex = c++;

						merge[id] = true;
					}

					var add = false;

					if ( first == 0 ) {
						if ( node.nodeIndex == last )
							add = true;
					} else if ( (node.nodeIndex - last) % first == 0 && (node.nodeIndex - last) / first >= 0 )
						add = true;

					if ( add ^ not )
						tmp.push( node );
				}

				r = tmp;

			// Otherwise, find the expression to execute
			} else {
				var fn = jQuery.expr[ m[1] ];
				if ( typeof fn == "object" )
					fn = fn[ m[2] ];

				if ( typeof fn == "string" )
					fn = eval("false||function(a,i){return " + fn + ";}");

				// Execute it against the current filter
				r = jQuery.grep( r, function(elem, i){
					return fn(elem, i, m, r);
				}, not );
			}
		}

		// Return an array of filtered elements (r)
		// and the modified expression string (t)
		return { r: r, t: t };
	},

	dir: function( elem, dir ){
		var matched = [];
		var cur = elem[dir];
		while ( cur && cur != document ) {
			if ( cur.nodeType == 1 )
				matched.push( cur );
			cur = cur[dir];
		}
		return matched;
	},
	
	nth: function(cur,result,dir,elem){
		result = result || 1;
		var num = 0;

		for ( ; cur; cur = cur[dir] )
			if ( cur.nodeType == 1 && ++num == result )
				break;

		return cur;
	},
	
	sibling: function( n, elem ) {
		var r = [];

		for ( ; n; n = n.nextSibling ) {
			if ( n.nodeType == 1 && (!elem || n != elem) )
				r.push( n );
		}

		return r;
	}
});

/*
 * A number of helper functions used for managing events.
 * Many of the ideas behind this code orignated from 
 * Dean Edwards' addEvent library.
 */
jQuery.event = {

	// Bind an event to an element
	// Original by Dean Edwards
	add: function(elem, types, handler, data) {
		if ( elem.nodeType == 3 || elem.nodeType == 8 )
			return;

		// For whatever reason, IE has trouble passing the window object
		// around, causing it to be cloned in the process
		if ( jQuery.browser.msie && elem.setInterval != undefined )
			elem = window;

		// Make sure that the function being executed has a unique ID
		if ( !handler.guid )
			handler.guid = this.guid++;
			
		// if data is passed, bind to handler 
		if( data != undefined ) { 
			// Create temporary function pointer to original handler 
			var fn = handler; 

			// Create unique handler function, wrapped around original handler 
			handler = function() { 
				// Pass arguments and context to original handler 
				return fn.apply(this, arguments); 
			};

			// Store data in unique handler 
			handler.data = data;

			// Set the guid of unique handler to the same of original handler, so it can be removed 
			handler.guid = fn.guid;
		}

		// Init the element's event structure
		var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
			handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){
				// returned undefined or false
				var val;

				// Handle the second event of a trigger and when
				// an event is called after a page has unloaded
				if ( typeof jQuery == "undefined" || jQuery.event.triggered )
					return val;
		
				val = jQuery.event.handle.apply(arguments.callee.elem, arguments);
		
				return val;
			});
		// Add elem as a property of the handle function
		// This is to prevent a memory leak with non-native
		// event in IE.
		handle.elem = elem;
			
			// Handle multiple events seperated by a space
			// jQuery(...).bind("mouseover mouseout", fn);
			jQuery.each(types.split(/\s+/), function(index, type) {
				// Namespaced event handlers
				var parts = type.split(".");
				type = parts[0];
				handler.type = parts[1];

				// Get the current list of functions bound to this event
				var handlers = events[type];

				// Init the event handler queue
				if (!handlers) {
					handlers = events[type] = {};
		
					// Check for a special event handler
					// Only use addEventListener/attachEvent if the special
					// events handler returns false
					if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem) === false ) {
						// Bind the global event handler to the element
						if (elem.addEventListener)
							elem.addEventListener(type, handle, false);
						else if (elem.attachEvent)
							elem.attachEvent("on" + type, handle);
					}
				}

				// Add the function to the element's handler list
				handlers[handler.guid] = handler;

				// Keep track of which events have been used, for global triggering
				jQuery.event.global[type] = true;
			});
		
		// Nullify elem to prevent memory leaks in IE
		elem = null;
	},

	guid: 1,
	global: {},

	// Detach an event or set of events from an element
	remove: function(elem, types, handler) {
		// don't do events on text and comment nodes
		if ( elem.nodeType == 3 || elem.nodeType == 8 )
			return;

		var events = jQuery.data(elem, "events"), ret, index;

		if ( events ) {
			// Unbind all events for the element
			if ( types == undefined || (typeof types == "string" && types.charAt(0) == ".") )
				for ( var type in events )
					this.remove( elem, type + (types || "") );
			else {
				// types is actually an event object here
				if ( types.type ) {
					handler = types.handler;
					types = types.type;
				}
				
				// Handle multiple events seperated by a space
				// jQuery(...).unbind("mouseover mouseout", fn);
				jQuery.each(types.split(/\s+/), function(index, type){
					// Namespaced event handlers
					var parts = type.split(".");
					type = parts[0];
					
					if ( events[type] ) {
						// remove the given handler for the given type
						if ( handler )
							delete events[type][handler.guid];
			
						// remove all handlers for the given type
						else
							for ( handler in events[type] )
								// Handle the removal of namespaced events
								if ( !parts[1] || events[type][handler].type == parts[1] )
									delete events[type][handler];

						// remove generic event handler if no more handlers exist
						for ( ret in events[type] ) break;
						if ( !ret ) {
							if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem) === false ) {
								if (elem.removeEventListener)
									elem.removeEventListener(type, jQuery.data(elem, "handle"), false);
								else if (elem.detachEvent)
									elem.detachEvent("on" + type, jQuery.data(elem, "handle"));
							}
							ret = null;
							delete events[type];
						}
					}
				});
			}

			// Remove the expando if it's no longer used
			for ( ret in events ) break;
			if ( !ret ) {
				var handle = jQuery.data( elem, "handle" );
				if ( handle ) handle.elem = null;
				jQuery.removeData( elem, "events" );
				jQuery.removeData( elem, "handle" );
			}
		}
	},

	trigger: function(type, data, elem, donative, extra) {
		// Clone the incoming data, if any
		data = jQuery.makeArray(data || []);

		if ( type.indexOf("!") >= 0 ) {
			type = type.slice(0, -1);
			var exclusive = true;
		}

		// Handle a global trigger
		if ( !elem ) {
			// Only trigger if we've ever bound an event for it
			if ( this.global[type] )
				jQuery("*").add([window, document]).trigger(type, data);

		// Handle triggering a single element
		} else {
			// don't do events on text and comment nodes
			if ( elem.nodeType == 3 || elem.nodeType == 8 )
				return undefined;

			var val, ret, fn = jQuery.isFunction( elem[ type ] || null ),
				// Check to see if we need to provide a fake event, or not
				event = !data[0] || !data[0].preventDefault;
			
			// Pass along a fake event
			if ( event )
				data.unshift( this.fix({ type: type, target: elem }) );

			// Enforce the right trigger type
			data[0].type = type;
			if ( exclusive )
				data[0].exclusive = true;

			// Trigger the event
			if ( jQuery.isFunction( jQuery.data(elem, "handle") ) )
				val = jQuery.data(elem, "handle").apply( elem, data );

			// Handle triggering native .onfoo handlers
			if ( !fn && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )
				val = false;

			// Extra functions don't get the custom event object
			if ( event )
				data.shift();

			// Handle triggering of extra function
			if ( extra && jQuery.isFunction( extra ) ) {
				// call the extra function and tack the current return value on the end for possible inspection
				ret = extra.apply( elem, val == null ? data : data.concat( val ) );
				// if anything is returned, give it precedence and have it overwrite the previous value
				if (ret !== undefined)
					val = ret;
			}

			// Trigger the native events (except for clicks on links)
			if ( fn && donative !== false && val !== false && !(jQuery.nodeName(elem, 'a') && type == "click") ) {
				this.triggered = true;
				try {
					elem[ type ]();
				// prevent IE from throwing an error for some hidden elements
				} catch (e) {}
			}

			this.triggered = false;
		}

		return val;
	},

	handle: function(event) {
		// returned undefined or false
		var val;

		// Empty object is for triggered events with no data
		event = jQuery.event.fix( event || window.event || {} ); 

		// Namespaced event handlers
		var parts = event.type.split(".");
		event.type = parts[0];

		var handlers = jQuery.data(this, "events") && jQuery.data(this, "events")[event.type], args = Array.prototype.slice.call( arguments, 1 );
		args.unshift( event );

		for ( var j in handlers ) {
			var handler = handlers[j];
			// Pass in a reference to the handler function itself
			// So that we can later remove it
			args[0].handler = handler;
			args[0].data = handler.data;

			// Filter the functions by class
			if ( !parts[1] && !event.exclusive || handler.type == parts[1] ) {
				var ret = handler.apply( this, args );

				if ( val !== false )
					val = ret;

				if ( ret === false ) {
					event.preventDefault();
					event.stopPropagation();
				}
			}
		}

		// Clean up added properties in IE to prevent memory leak
		if (jQuery.browser.msie)
			event.target = event.preventDefault = event.stopPropagation =
				event.handler = event.data = null;

		return val;
	},

	fix: function(event) {
		// store a copy of the original event object 
		// and clone to set read-only properties
		var originalEvent = event;
		event = jQuery.extend({}, originalEvent);
		
		// add preventDefault and stopPropagation since 
		// they will not work on the clone
		event.preventDefault = function() {
			// if preventDefault exists run it on the original event
			if (originalEvent.preventDefault)
				originalEvent.preventDefault();
			// otherwise set the returnValue property of the original event to false (IE)
			originalEvent.returnValue = false;
		};
		event.stopPropagation = function() {
			// if stopPropagation exists run it on the original event
			if (originalEvent.stopPropagation)
				originalEvent.stopPropagation();
			// otherwise set the cancelBubble property of the original event to true (IE)
			originalEvent.cancelBubble = true;
		};
		
		// Fix target property, if necessary
		if ( !event.target )
			event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
				
		// check if target is a textnode (safari)
		if ( event.target.nodeType == 3 )
			event.target = originalEvent.target.parentNode;

		// Add relatedTarget, if necessary
		if ( !event.relatedTarget && event.fromElement )
			event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;

		// Calculate pageX/Y if missing and clientX/Y available
		if ( event.pageX == null && event.clientX != null ) {
			var doc = document.documentElement, body = document.body;
			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
			event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
		}
			
		// Add which for key events
		if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
			event.which = event.charCode || event.keyCode;
		
		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
		if ( !event.metaKey && event.ctrlKey )
			event.metaKey = event.ctrlKey;

		// Add which for click: 1 == left; 2     ?-B4?Dۃ<Z K?Bw'<<^&ԿB 8e|}<>Kb<Q~?}w'EfUk @4hت?掺z^-Kwix     ?%	4?Tx<KYx?&0uԿ_q<m J$+<ޢO?~gx~W0xm8b&䊓N?3w.(G>t     ?BC1%M?gBdcȁ~`(c?-z܁:=Կ{}SVQ'!h㻤X?)ScD&₵	c>-yBĩ?3\`7q      ?0۔~e?Ic_I[}x O?=%b,Կòw<d~<Čc?9ukCExtO8?7@fmjsj      ?8N2}?PDp{<k9:?&!({lvhԿV<,@vN9z -?E<@X
z2Nmuq3?UwzP+Lc     @?a?
!qMr%?	ج}p%CԿz<4tmlB*Wk^v?H`>(Nryυb?3d9!?]BYA4kX     `?l9?ZDup<]_b?brKeԿ.F<M!YSY6il݃?I'V66q? LcPWO?AF9k_E     ?C[[?O@tY<\`?ZfWԿLws<<aA8?q {;Q?Ze8[<L#w0?̦u?q1g!Y~$?     ?}o?)ű6x?Ǥ;!~<KcԿ?2n{OWb?fVU$᫾?Vn)Q;d?AVW?hn.{|?Bۆ{GN?     ?g?А~;YEO?;b۫ƃ0ۛkԿKӮ/|<f)%p?<z<f??@v^ͷ(T!<'6ϭe?!Z?eK8[?     ?z0w?{L3<9q3?w HdbԿn ~bcx?т0s^<AԽ?NĚZ'<ql"NSZ(o?<mxd?$<w8c?      ?]%?5ᮽR?^ NJ><ԿZ«Uw<p1?3hPh?iE>I/Sl2t?8ؤ?\|jjo{Bi?      ?n<?8o<l?lǍ
Կmh]}<(苃?@RzB<6?Yo<^cz? +ox?kwM?<!kZԞl0o?     @?jd7T?T|^Ȉ9?Pg?j֯	Կ:s^!}<lU$?>gB#}I??Tjvl}?JSQã?S
:^G&bAr?     `?7Qok?5Ao`y<exj?ݙJ<@ʘԿMadh8=?@A!<N&?1Y
*T<:I4k("O?Sdl9?2c1'! t?     ?|Z? b<I}sU?D󺊼s	Կn><G O.?	`S?{ &^]tu?^B?ŕQ!?w?     ?)奚?5X,l`i@?PL><y=TԿuQ>ϐ?/ʧhs5=E'kP? 6k2<lgO~V?胩'?/|/y?     ?Bܱ?)bZL$xF,?d6</ʣԿ>wأ6?=<^?lc_Ks>E|ط?W6w?k:ߠB{?     ?OAs?*y^r<2?а<dJԿh)x#rs<"1^F,?+Bj3Y{?8%c<ES	-%?rm{?{(:g}?      ?ޫ?fz((Yp\?p\w<vZ!x+Կ:.XЩЕ?*:BbG?EFna2u?:"͔?Q¥؉?      ?W5?GYv<> I3?Aa>rbBnԿVz3[<hyhn?Do%h!?T책T<aL\>?h9I?1#̩v~ ?     @?#?DSב֚?bjbԿ+%R<(B?wy"Ɨ^@?w"RT0r̆﴿(v-??1_?wN}O4jp܁?     `?*L$?`=m<D?NN\X*"Կ}fK?{i6<v̻׸?qNx%<cxgjش#0ف?!b?r9/R&OP>۹?     ?jq;?N"8Bl<bG?g<ZjԿ3ļ7GEv1Y~ ?M=]JEo?,BQG	?kڡ?Cp?Λmf6?     ?R?gj<]E᭛?mVW2Կo^ť6<V-?q?<B?F!?`U<˨'Wi?IO?D՜O?     ?mi@h?sLH]<5?Ҏ~}PMԿF)Md~!?ת"9<p0O"?DPP<߈׋buq'+?:???     ?s&?Qa;<i0^r?#S{Ag<<vSԿ\'`zgj/ZL?bI@|?:?XK<IK
p$?Ul[#?\ߞZ?      ?10Y?ưsp<q8%^?cB`uEm/Կ?hEAc5?/E
#juJ?Զ?7?۹Z<Ϥ|*S0?Q0F-?t-v|X?      ?s?.(<w!CMI?$^<,j~ԿRb<?Yuno?b
A<:dHB5RvF?&U_;?#KU2?     @?fD^!?K:D5?*gRfzVwԿ߹{<5k?Tl0Q
?d-?ZS<3[^g?1bL?%B>{?     `?a)L?6
B%Б ? }<"pԿD2xeT?pn><Aǐ?e98lP0L4D?`?*$RNCnF?     ?b?^]<85$?O< uiԿ(i~<ţ?thjA<5<S[|C?Fr.P<ճ%?o[Wx?sM֜ո=s?     ?	;ud?asw?(OI<	aԿ>]<⩋n?wS:WB</8?9.@ENAxĎJmถ?n<9`?{Jg5i7?     ?tR?$<`?*D<Ćw#ZԿ%xkܹu& ?dpO<B먆
~?u76MZBm]E?3豓?a s 4
cD?     ?V9+0?+{.݅<K}
?fB>WkRԿ'vj?Ɍu(<=7i?g%3:gCn̗?髗wӒ?Tq񃛿a83A?      ?7E?7<GƼ?V3<ІB	IԿ{+Qxu<LU?j a'3)?B3vQɯ6/Jo@qM?<?Þ[a?      ?[?h;<"&%w?rn{<s]AԿEV<[>'?"[?'AC<^%fSȘ?l#?	^6?     @?=q?m`1TO:?VY蟂<ɜ.˥8Կl}9|x?^>;YݣH?g_<<tqWd=?l?P?Xv$Jbu?     `?=-ņ?x~?ܒ^<8-/ԿE\cC A!?Of>ۿx?W |`7<Z%5ٲ?5*?߼􃬙O?     ?9?F1C0i?P%<<齶&Կa%vnIWpc?"A<h??%%2!Vֲpw?5bj?S24N5zڊ?     ?KV嘱?R"r^U?.oeVkd-ԿoPu'WNE?"<!<;?C
+<3EwhjFz?\@ۋ?Ksẘ*t{?     ?ōǑ?Pi}A?c;r<ѡԿ-@)~ikө?H<?W?T<^$hc}ٚ?ǒt(S?1]Aέ?     ?*?qpc΂<헡ő-? K0	ԿA;mښtT^?1հ <T,
*?D|R<:']H2?k҈?Ax"Ɨkυ7?      ???D&I~<o?^uq<Y=ӿ=w[<6]L??֔9*NnNڊа?ÔK<)9	aY0K?홸PZ?I@+LM$H?      ?IVGO?m1?uK7M>ڢӿYܰ)\Wk?["zm!v?> FxW<1ϨgK豿oݶp֛?wd?&<6OіfOQ?     @?AoJ?Rv'S
c<,k?X|i\<dBӿj1|ar<D#?PA<?4u	A<<aQB ?{c'?oCUVT?     `?&K20?pY1)轻?vѶ_sqAӿ'rT4}<-)m?;3eG<^lIX?/߫I<,b등?-|	f?Jrߙ?Z*\ە'ƼQ?     ?V[y[E?y?v >i?`{!ӿļsV<bK?<&H<G۵fڮ?pf8:DY%!i}?Y5ā?6ɾe`g4NH?     ?ܺRY?\i<8?$Gtk`	9ӿ2{Crrʜc?0H<R."-?ӚNI˵N=W&[s?t2шr?U唿9?     ?G~rn?LcG*tJ?؂zӿXmGPu[ۭ?J#C<aG?G5-`\Va| G<?_O~?Ek`%%?     ?{_
?sJvfV&Z+-/?;
<MӿHOjhP?!>\0,׬?j+iH<7K氿b&kL?u̒-{?Ra?      ?&?XAr<{Gz?Qna2U0*ӿsF؈MQ®?sXa<<߈/?ҭSE?y={?g}5Sy?)x:"x?      ?bǱ ? # <RR=g?EgW<$lӿm<0xG1?L@OD?E_M<G@A?q<v?.H)UȊ?     @?"^?.
`e<S?_w<[Zőӿv?=U}<ޚf?T^"׉Ko?ٸ%+9<eWaI'qO˝?F& t?їHFI?     `?4?:n<nxk@?KՅӿ-roRzX?_e}f~A?3PK<O.`4O?7PJr?z-t?     ?[?ly=<؝,?ڒQ<%yӿQ6 @wMr:8?8gN\<endN?wkJ˧!<ywbDU7\?0Tp?%LS7	*sQ~C?     ?~};?$|>?Q}<N'&?rM0؊<mӿM	o~~<u{Vj?O6R<$ ?k[[N+_p.ld%?A8ƣk?A=gN#!O?     ?ŭ?>2h=r<O?,ft+aӿx;Heݔn#??c"<?7c?m
܂C<O(ZC<?PaӍg?:-y։?     ?%?p"9UEd?rDAfwBٗTӿכZ
u<s8dḭ?y_C3;/r)+Tǧ?{:[6$< N?iB܈pc?R+:Ӛ?      ?{8?Rګt??tp[GӿHx<]?i	h=<pw7-? "]NIok^?$uQЯ^?.O8[?      ?,6L?C$<n?gCވci;ӿ؏=_nn<;=p)?rNnV&kᔦ?@ί(0<I_i?pW?Ș%#ǡ?     @?4)`?𜓉<(O?<+FNw/.ӿAs<߼YU?5.i-]T?]C<DDNr?yIO?K|t̍%_Ԉ?     `?3+5<t?~4H^x?c 졋?!ӿ#ngTKm-,?;:[4<v\bi?d۾u/@}w?/4Ce@?;ޯBό?     ?/s؇?Pu^?C<"ӿz?
<ÃY? E^<y֤?XΤtL 976y?c߶V)?
B?     ?`?kAL%P?dQ3V<Iӿ 1tpuԱ?,OQMaE?XßN<6jܬ.vx?K|[7q9/9;CB?     ?֮?6Jq/1<Pl?\HRp<&"/ҿa=]> T<|p?[XK<i.q?yxjCN!9ospnt?j-IKPc8o$?     ?aB$9?5k~^Y?jɝ-<ҿ'/j{k~N#?f]AY<&V(?3?q%Ω=̲%cm?zpS_XڏVC[V?      ??K`<FyF?k8k<=ҿ>viI?0{NsK~?ׂ$Dxʫķc?5_RY+6Cͅqɺ?      ?C?pEup③3?Oz5z<aXb6ҿcg<קm?a{Ľ2Tξ)m?Kh吨^o3cW?RtRh_Xŝk?     @?J?Xq L[:$I ?{?C匼/쫥VҿMI[xh%]?~hEp><ҷQT$?y)-;fenZH?ewԥb}&ԁY?     `?_FK?Q[?E?7xnl<:[\ҿ{|<g볲? I')@  ?Z'W6)fJ 6?lbX0~e(T_~]?     ?{]"?5bH`sp?MQ<T0`Iҿ|$dA|<ʠmղ?}uN813<<~?v:(AqR!(_O"?R{=h"
̚6詅?     ?;-14?҉<c?}C<"׶ҿM醇S%!?&d䠅J?[ B)	ܸsd?E8j'eل;YP?     ?G?Q:^3g@?8
<9l؉ҿ88q_q^?߄_c?=@u)3<Ot઩>?e'cEtm(F?     ?{Z?)':gq?+
҂hX|{ҿ9^x<3?LidS<yw?S/r27<6<,Q${r؝?oyj`J)t?      ?#9fm?ovtI?j֩<We
mҿoGrl<3LQ?"r?\<0?28O K廝?7&qFNq^>?      ?X(~N?>jX,ի?(|ͳa!4^ҿ0tTm?s1[Y<9d?q (<eKǞ=T?m˨KriT󁿉
f?     @?jV?̢Z<Eu?E);<htyOҿQ7N;1S?;P^?gct < x!Fn%{?^,YdsqBd?     `?vKl'?Fek]Cz?I]nf<!s5AҿXV* y,(飳?]W@<M룞?/>u7Cai^Y?Vesstdmr&?     ?=?ňa8>
h?B"T%p2ҿx\ru<$K?tj1<3S0?~h*<7SW4?ڡ`wu~ʢj #ɂ?     ?1\?()	|<C
U?]tf<HV#ҿ>ߴ !A<Jֳ?FCe=<!E?|(<E>`s?0Qpv~%k?     ?SUD?s5[5sJC?erfhʠҿl)q6?T<$_?SXChS7禿B?_w(LY<}~?     ?J ?rb<^ٰ1?~z<>cҿ}Quq<)d
?	]q`I<;{?C1,GM.H.P!?*CDxPH{,/?      ?4Fxŧ ?ު%Mxx!?x!b<HIѿINm4`?A5Q<t@ɛ?Tn9<@T;2rqW萜?Npkxyݦ=dz1Q?      ?Q)?}3ͅ<[e?H*uѿ$a47r<>fC0?J#?E\n&2奿͑8d?+MyN5NUy{ON?     @?{O[$?I-HY<]\n?'V<p`ѿ2L{wHD?,,?X_yP8#6?mO?z⇷]xLΕ?     `?-Z6?ђuw<w#o?D˨vrP%ѿPn+X?&2λUTA?&'D:<nv<m?(A	v{B|*B6w_@8?     ?H?XG<(V?ze@R9ܹѿUFF`<fOj?C§b_<,N8=?4|;<L2<褿а%
֛?c+|M܉v{aη?     ?؂gZ?rL<@?)g2TsѿA%u<N|?\T.<Mvm?"BNi%?|Z9.RtaF1F~?     ?$l?=ȭQ%<!?g_/qECz!ѿH
RdCH?KBV_<ˬL`?gm{++<4΀BEeq?:gL{{}os-`G~?     ?"}?=`2<|m?[bnB<JѿZ>kDh,Ν?#X`X<DI?C*?4<z;𣿊pp<?^~~|X+Br[/}?      ?^1]k?@7<$T??}5|ѿFՙj{qOD?ܳ85<#U+%?`|<AB0?ou0~ޠRqo|?      ??W_g<a<ocQu? [3zr<7蕭lѿ!{Kb<|
?Wtp5<u}ȟ?<L )<P,Nwњ?:q3Xbpm8)|?     @?P.l?茼zWko?G}_[5X]ѿ8 ǼWT[ɴ?(Y)F<C)  ? B+D/I{h?Ol_ӛаoHw{?     `?+	?20-˳<]?Vwq~Mѿ/܋r<״?\/B?{ D+9Qb?#ȭPdɢm6z?     ?((?:/`<QquL?,qȀP=ѿ1f<??Q<vE_5?VD˨;X`q)?]+aRU%k3ӹcz?     ?l?vD|o?;?bSc5$).ѿs;M?FPFȆ?p<VK40Z'x?i&m)jYky?     ?x?!Տ<%H` *?p\krѿ=egp<;W?P_"<:b?Z^Okġ;A?!
(ݺYhr:x?     ?Ki@9?w2s?0Xq<oѿX8U?O.TU<q&?%b}SSw}b`{?x|u逿<Cf]x?      ?M?)b{?O@пUv<%Z?3/bw5<Z;§??I<uJK+??;m5;d/Fpw?      ?  6*?$M/Yt<G?QHlC<[P7пѹ#i<!NY?6ο̨B>_;IS?ǈ%ߠl࠿V~?0p<=G0Vcv?     @?"ž;?qc<h?	YpzdHп[)|B|}<wR>?&j;CԬ?)xv<XF4ǘ?b0a
!?)v?     `?SvL?>
68q*F?HhYapu<Qϴmп[L<'bH$_'?VOYJ[<#6w}?k<l@K֖?ńVA8`hMu?     ?lWi]?ønf<t~?w5~пW#MHy<s\rl.?흱4'}z?	~;C׷VǖL?<lFEpt]pot?     ?zx%n?4\7"<1ǳ?%%Ê<|:п'&Or<x4?#޿U-vx?Pq_sf2?#wZm.>lNt?     ?*Z~?WZp<]?7<&%{u`пmzv<Xz:?D~K\|v?133'GP䞿A!\З?M؁JEWG |s?     ?1k?`%-S&ѕ?7Ӫ<gsdЏп'!lq<~??#3Z6s?quG%r5A)Vmx2?09ˋUbs?      ?W?z^[? o<(	п{8<6{D?'j1P<G9UIq?_Pn<{ɝ݊R?@㝅]R!Jlr?      ?=o?mV&18qهq? , <XoпKz|H?KO)II̾nBbm?D/DKV\H>z߫?\vIOpXq?     @?\?3Cv@<Ea?۪eI~<S_п{"u<fK?3 S[<Gnpi?Z/Ӷ8\򢫻KԖ?}k"CJpeq?     `?2?{
P?Wc<Oпd}<w<!A|N?ń\11<cPd?ar6<,U,iY?jBl.Ql]E-p?     ?^z?a/~@?A @<	?пA <SmZ:Q?mQT<8@`?	4*k;*̗t+ U?`8ebf~'AfkeLp?     ?gD?39m<N.G0?rRVi<EI/пgbY
p/-	S?8H]<eX?Ӛ;Y @74?'b?
:?SJ9KBo?     ?>?<`e< ?  <~пB QT?:V9 quPP?T;$4}KՕ?I<KVEߑ0"Z;{n?     ?;Q?"c<?; п}	@ZU?@Rī'(@?j֣[;p֗Y
(T?,!HpwH gݍGtm?     ?n9?Umjx ? п`ZSQU?[J*T
 ?@pG}ؗ
PUe?dEI)s *cl?      
                          8    `5    /2    #    u <7~>      $    ? ?8   ?+eG?      8C0gǓW.= 8B.?      BZUUUU?    ?      O           Y?y`M-=   ȩ?#h%->   t?Y1v"   Z?
ܢ#>   л?U&Y&   "?)-&,/>   ?/t.   ?巌m->   x?A=    ?4   y?"qU0   ?;(-%   #?T{{3   &/?r+Eʛ(>   :?9P   `aF?8Ά	   xR?]y)>   h]?|I=   ,ei?E4"/>   u?uNT,   Lڀ?CY   ?2i'>   f?l-*   6?u%>    ?/&>   ?gS'>   ?f>   ?7(>   ?[ô\   ?M4
#>   D?Bd.>   ?o>   ̉?tB{׽   ?   `'?Uє^q(>   83?^>	*>    ??|?"#   K?-   %X?+K   8Td?.>   pp?Dl!>   |?j	>   8?zL
!   M?$Eo   ?%"٢O+>   h?cdY=   xI?^|-   ?gL6%    ?+|>   |?3   ?G}yQ7%   h?({ı>   ?h
>   m?x!)>   x?POu   *?Xt+=   $7?5l!P   C?X[">   gP?ŷ`!   $]?Az/>   i?   |v?jr   X;?$C8+>   ( ?">   \˜?8q7A8!   ?lc>   t?"rz^>   lS?Z#   L8?;'>   #?φK5 =   t?ˈv-   ?`О9%   ?>   ?wmIE>   ?	eq   /+?I:r!   H8?ij*>   0hE?,YA>   0R?kg&.   _?V]-!=   l?g}Fp/>   'z?02(   h?ElC#   ?2''>   ?˺    Q?x{-   ?q">   ?LfyD   $v?o7a=   <?JZ|&   [?K)   ?/R{#   Z?Ekx   ?~a#   u(?h.">   h6?<\+>   ثC?1   QQ?pO%   (^?zb$/>   l?H>   iz?q   *?s|(˽   ?Z+"   t?թ"-E6   ȕ?B
>   r?.   <U?J'   `??%Β>   |0?{*=   (?_d-   '?ҋM8.>   -?F    :!?ڿ=>   N/? 9    $j=?0D>   dK?kD,+   Y?PA?&(   g?KI0&M">   v?}L[,>   8\?9#M   ?وUE   ?Wh;   B?tMp    ?H    ?Zx.?'    j?A!>   ?, M.>   R?y^ >   H?3;y.   X?A3<^>   "?	aT|=   {1?@u>   @?Ao40 >   лN?m+>   f]?5`.   8l?DȢ,>   z?NpA>   ?%s/>   \?ޘ1->   l,?XIV    ?Me   p?dF$a>   ?$V@.   <?b:'   T?Pn+&    ?.4   ?~   ?O>   -?Ih>   `<?MuT>   L?|   h1[? ٭">   bj?.>   ̛y??!$>   l܈?    $?1R    t?a->    ̶?~EV>   `+?]Pw*   L?X8G'>    ?f:q.>   Pw?4O   l?O놢t'   H{?ҲC)   #?   P2?{\tX3>   ;B?Tn$   Q?J0k&>   ha?N5	;m>   Bq?#<wj=   ?#.ض   Ð?TF=   p?
>   c?g>   ??O"&>   #?шN^ /   ?RC@%    ?>R      ?            ?ID X>   ?u-J5   ?V@760>     ?d2[D 6>   (2(?&L<>   HH0?	FP;>   tb8?$&e4   @?7
8D%   H?⶯V=   PP?%=߅0   X?^
?   D"a?LSc]}#   Ti?X0>   q?e.>   ly?"r;4>   `?'=   tH?lp$   ?D0	N3>   ۚ?lV   *?(>8->   0~?d[1   ֳ?)x
   2?/:>   8?C7   ?,3!>   ,_?f<>   ?d{$>   <?ی.T8   8?k2cd>   +?rqV6>   d? >8   X+?TPbY    ?rk7   <?C\Y<>   !?|t&   ]*?M<4>   (2?X\=>   ̐;?Sn]+   0D?&$   L?CȚ#>   }U?U;t0>   |*^?PL51   f?0B>   Xo?#q$   PKx?#:   	?t`y#   X̉?@:,&>   p?c$Z38>   ^?@D.+>   .?(a=   ?MZe>   ۵?   ?pN/>   ?5:>   ? r>   k?.l0    Z?5ZB.=   hM?-2V;>   PE?zs?<   A?zۖ-
   B?w%>   G?`sm,   Q?Hs5>   D`!?i\o;>   <s*?.\w~9   3?&rI2;>   Ħ<?'2s0'>>   `E?rZ!3>   N??be?   PX?'O27   Da?MHNՌ1>   wj?E7   s?)x/7>   D|?B   ,?|7>   pq?ٳ$>   |?3;   ,
?ǀ,->   ]?9pP5   ?0p)   <?s7.>   s?l,?<   ?a=v`T5>   xD?;&>   ?o6   ,(?$c7>    ?A    ?oT#   @	?^:)   p(?B,<֥6>   h?yɴ>z>   (E&?lp}6   /?FƤW9   u9?oud>   $C?D>   L?w>VZ.   `V?u$M1>   x`?:#&>   i?`1[>   <xs?
8   d4}?pWb6>   p?spg%   \?bx   ,?E|   U?VQ5   *?X7   ?3Ow?>   ?sj"   ?/δd5>   P?9Vu5=   ?C8>   ?B\E#5   0?ɖ)   p?h1$>   ?9(ǆ7>   ?G؅>   <?ɩT'   %?3>   /?u=YU$>   D9?e#N   C?˾LE;>   8N?2S<{ >   AX?vF3   |pb?N{*   @l?x7P>    v?Jk>    ?R>   <^?޳3@>   |?`3>   ?h-   pF?>Y?>   ,?蚋91   ?</>   (]?uG2   p?tON/   0?	0 >   ?)>   ?
d   ?/R(   (?S0><   ԝ?'   )?)a.>   '?8o>>   Q2?0[)>   P<?J>   pG?F_/   4R?f؇   \?\Lv(>   g?+`2>   8Hr?#S"   }? M;   <Ň?t	>   Ћ? 3>   W?uޤ1>   ()?=1>   ?#+   (ܽ?8~>>   н?ueGs	>   ?w$>   x?J ?   |?jd7/   z?Xm9   w?{<aHR1   tz
?7U&   t?|Mk;    ?뵞[w5   +?5*   6?-{|6   A?z>!   tL?{T4>   &X?fc>   Uc?~C7.>   n?5e0K$>   (y?n=   ?9";>   ,I?0_Y'>   $?p9A@      ?             ?jUU =     ?   =     ?   =     ?VU =     ?j
 =     ?` 	 =     ?XJ=      ? 
  >    $ ?0@>    ( ?Zb 	>    , ?
@>    0 ?  >    4 ?B >    8 ?Xn>    < ? (# >    @ ?jU  >    D ?Ŗ">    H ?,"`@$>    L ?#&>    P ?4ު) )>    T ?O?<0+>    X ?u7@.>    \ ?Ⴏ0>    ` ?A 6 $ 2>    d ??(3>    h ?a- 5>    l ?VB36>    p ?+98>    t ?tȃ?H:>    x ?փPF <>    | ?@M>>    ??    ?b>i=    ?9{;    ?jW9    ?~7    ?I$|75    ?{GWq2    ?sew0    ?Ni+    ?u&    ?~!    ?yz    ?DB    ?HؑU    ?>    ?R9$>    ?3@ >    ?`d&>    ??B,>    ?X&MvYI1>    ?lP/n4>    ?Y7>    ?h!;>    ?|J>>    ?~i6=    ?Iv:    ?_#6    ?Y 53    ?.    ?Xak'    ?3EMv    ?X_    ?U=   ?i,+>   ? xE >   ?BG(>   ?920>   ?iW4>   ?I}#9>   ?}=>    ?}3=   $?cF
t9   (?uÙ4   ,?/I30   0?=&   4?L:Cl   8?op   <?>tk h>   @?Xj
 >   D?rx"*>   H?2i%2>   L?(%M7>   P?䧟<>   T?<$1>   X?rw8   \?,Mq3   `?h^"+   d?4
    h?8rD2   l?%T}>   p?c!>   t?a ],>   x?O,s(4>   |?^;:>   ??   ?J49   ?
l3   ?<A\+   ?3 WN   ?'J   ?TLS/>   ?u;&'>   ?ʂq2>   ?7IƓ8>   ?t,?>   ?ZRu+:   ?~)/s3   ?I([U)   ?KI   ?AQd^=   ?7o >   ?9[-.>   ?c/6>   ?&yW=>   ?Ep;   ?٪'4   ?)   ?ߢDl   ? >   ?4#>   ?<1Ry21>   ?h.8>    ??l?    ?lrn!!7    ?pyL/    ?     ?[D V=    ?&
); >    ?GEZ60>    ?"^8>   $?h?   $?@P` 7   $?P
-   $?D5{   $ ?! >   $$?j6RD%>   $(?(-ּ:3>   $,?[R;>   (0?'e6d;   (4?Xz2   (8?Jқ#   (<?G   (@?`"< >   (D?9'1>   (H?	S??:>   ,L?^<   ,P?*yB_3   ,T?󆦰,$   ,X?y#5   ,\?lzV!>   ,`?#2>   ,d?pbp;>   0h?2׺:   0l?K$1   0p?䚬e   0t?
z>   0x? 4cB(>   0|?*e06>   4?S?   4?vni5   4?c4}i'   4?8҈'   4?7BY!>   4?OM2>   4?N=>   8?BH8   8?
+   8?WSE!7
   8?^`aG>   8?/1>   8?Jg/Wų<>   <?#R8   <?z6HT+   <?٫   <?nn >   <?&k@3>   <?` YaY>>   @?2ݫ}6   @?QS&   @?3R=   @?p>&>   @?qn#cZ6>   D?\yz|=   D?={72   D?[z   D?+ *>   D?0>   D?^<>   H?i67   H?rd6b'   H ?h =   H?I(>   H?vIj8>   L?֎l;   L?Uf.   L?zwQ   L?a">   L?I.5>   P ?.BB=   P$?`%1   P(?ws
0   P,?Y^:: >   P0?@G`4>   T4?MdX`>   T8?Wa1   T<?w   T@?^ˡ >   TD?ᓞd5>   XH?B1SŁ=   XL?lkX0   XP?>1q   XT?uuT$>   XX?ňK7>   \\?0;   \`?W6/2+   \d?1TM   \h?+>   \l?ox2;>   `p?lI7   `t?&Z"   `x?6bI=>   `|?X59x2>   d?i?   d?<G1   d?ތSiT   d?e~%>   d?+e68>   h?tϽ8   h?ٴXNh$   h?f2>   h?D2>   l?(U~K>   l?gq]0   l? =?   l?{*>   l?|:r;>   p?V5   p?Mf`   p?ȅ{P!>   p?
Al7>   t?UO9   t?ē L$   t?{;O>   t?$|&]4>   x?&5׆H<   x?.W)   x?T֕>   x?X~R%2>   |?+U1A>   |?;\3.-   |?p9GH-=   |?0>   ?4\C9?   ?ǃt.    ?qV=   ?v0>   ?pNB1?   ?/Ъ+p.   ?b-=   ?[|1>   ?!)>   ?Q }+    ?'>   $?5ZE3>   (?K~ <   ,?n|&   0?ըo>   4?je6>   8?94~9   <?JZ    @?1܅!>   D?<B9>   H?%5   L?,#   P?Ԓ,۫*>   T?[hC>>   X?Prb0   \?rrO=   `?\a]2>   d?j';;   h?ʹ#   l?wn>   p?>i9>   t?ns4   x?f)5   |?3->   ?	?   ?*   ?Tf\`>   ?>!"B7>   ?V1Ʃ6   ?Dww4   ?	;>(E,>   ?&>r?   ?;17)   ?'MJ>   ?K1G-8>   ?xm (5   ?'j   ?o\~]0>   ?0<   ?}#   ?؛ÿ;">   ?t(<>   ?1Xr0   ?las>   ?30O5>   ?q7   ?٢↾   ?^X*t/>   ?u<   ?[o"   ?'ֶ$>   ?@+>>   ? },   ?/d0>   ?9"8g9>   ?r2    ?=   ?F6X5>   ?5dE6   ?v   ?{1>   ?_ 9   ?/   ?ArxB->    ?%<   $?SB    (?W^)>   ,?7ض>   0?I?$   4?W۝3%>   8?\,d%?>   <?Y6.&   @?R#>   D?t>>   H?"(   L?{ݨ!>   P?]>>   T?ᙬI)   X?(Kn!>   \? ">>   `?jag(   d?nS">   h?q>>   l?k	ȩ'   p?ݵY$>   t?1<S3?>   x?&jW$   |?#='>   ?{x2/D>   ?kp    ??0f+>   ?,;   ?S   ?] 0>   ?9   ?ic	   ?3>    ?4~B5    ?4+=    ?>37>   ?/891   ?WT>   ?]c<>   ?t*   ?LE#>   ?a>   ?1)Y2r   ?Es[H.>   ?_7$t9   ?k\wC?   ?) Z45>   ?b]_3   ?CGs>   ?HAJD;>   ?nt)   ?3%>   ?Qy]Q=   ?EF   ?@W2>    ?LG5    ?lh >    ?cUL:>   $	?룀y-+   $?+%>   (?-=   (?ף(   (?#{3>   ,? 4   ,!?N>   ,%?;(<>   0)?+$   0-?Uv,>   41?h9   45?MDȠͽ   49?#!{8>   8=?g~*,   8A?qZ%>   <E?U8g<   <I?R@'wW
   <M?c5>   @Q?pڇ0   @U? >   DY?/6>   D]?Nဖ'   Da?F2(4>   He?Jʾ1   Hi?u>   Lm?zu>   Lq??=   Lu?)~5>   Py?1   P}?]É!>   T?\C`#=   T?ߚ[   T?Y1W2>7>   X?2і-   X?g^&>   \?P2@:   \?
ɼ=   \?h=:>   `?!%   `?Cso*/>   d?m>A5   d?)2>   d?L2?>   h?)1R   h?ajiI5>   l?Լq/   l?Yh&>   p?5Jӽ9   p?ʑ=   p?vf<>   t?Jti    t?xdMI3>   x?»ވ1   x?#>   |?:   |?g=   |?QƎ<>   ?M9   ?j3>   ?W{470   ?M'>   ?k8   ?=u>   ?DI$3?>   	?l濅   ?N7>   ?$Yj'   ?z0>   ?ֱ9'3   ?C">   !?ؔ;:   %?@ n>   )?
%'>>   -?	_p   1?g^8>   5?[Hߥ%   9?m2>   =?431   A?mP'>   E?6   I?t>   M?ēD}<   Q?x}e=   U?㴨|=>   Y?s}   ]?YwM`8>   a?#   e?f63>   i?gMXH-   m?jg.>   q?Mӟd63   u?71%>   y?}28R7   }?$>   ā?|;   ą?jPꅤ>   ȉ?IZl?   ȍ?x   ȑ?lֱ=>   ̕?   ̙?*B9>   Н?d8o   С?ڼ;6>   ԥ?R2%   ԩ?ʏX3>   ح?@-Ɯ+   ر?fW<1>   ܵ?:o/   ܹ?~5->   ?~L%2   ?Ɔ³)>   ?ޗ4   ?p&>   ?Xr5   ?B=9X">   ?Ch-87   ?֚XO >   ?YRRh8   ?v<[>   ?L-EY9   ?!B>   ?:]Ԣ	:   ?%rT>   ?;uy:   ?}5>    ?]\D:               mBP?      ?      п9Pѱ>(???s3ՄT;>WҦ?Ȃ?]t>      ?m0_?˙?k M6?lL??ԫN;W U>\s>ȳ?i=Ž-d>x?ɑp?;P=                        2yO) c{pMnj=d6                Qg3"]@8iYP}@_n@@I,OwA@                        ̕Gkp}Z/PcBgt׋(u                Ř`N@d(~\m@`Z@8v@d̢@                        o%KtENLJ5E
B"
Mؒr?                }A@|JF9v@amn@~ø@7e@                        m'wB^IbC$96c$b&珯	                YYe86@a@Bp@:<c@	9DP-@                                ,?4[R'@%0cm@m>M@f@                9[6xd@ckNX@?TRfAC+ڃ(A=(k)A0,m                ٌ)==Lr?=W@鈇
`@ȝ@S@                C^T@!ڠ;@mY{g@r#@Tz@	۾W                j2>B?a
@ݮ-OE@^Ye@!|d@                C"aH@NT-@cMK@(jl<@O٪@ b                kT;1>4>>ž?w'?o,@J)?@Kq@0@                z]>@@Kp@""Ef@\|@e Sj@1)j>      ?ha,GW?      Fj>?3>d͹V_(?S~c?~*=,}Ɉ5>m0_俎>DHU_?,)vө?<f?V xNZ>dw%l*?M?e?*w9P=[:>                ?5z*@.ey@2}E@݂'z@                leE\@O'M܅@ŗ@,@-zi@                        }g=C ?cn6@&E[@IR-@~@                =cM@g6@WD@@Q^o0@                        ݞ!)>{![?^v@)ѦHA@7,MV@>GH@                4IeA@_3u@#7P|[@1.}֋@S.|mY@                        DU|>vB?@dq7|(@1@tIK@                Պo5@,R_@ۢm@zk]@QN @                                ?ygE0vSмt@$jeЦ                [ަ,d@b@^W ArS%A\wW$Ai                CY?K lmfOs1ith                ZQT@9{1@)d@ѺmW@K6|K@.o                Oȏө5TQ?3p]qL_GӇl\_fk                g#G@>1@|DNh@T@Kz@1
)p`                &D&H>Nih3Jޣ)ERn96_5                dx=@ho@I@)H%@><^~c@k       @    eA9B.@}Ô%IT                  @Za??Vcb?lm4?-V?Dpx?5ߨɠ?8+?>5?sA?.ӂb?j쑺?AՔB?8$4aL?.n?
f?	ƍ'?PBü?E ?9hs&^?a~H?徜?YO?x6?Ȱ}gĳ?@>[A}I?u.t?'?ӓ?tbE?      @      @      @CZLgK?AˀC?8ϘJ?\.lf?;UUUUU?i}ɐ?RBtp>M,?]?oS?O@~?bU >?7X?}P? ƶ@?kحg?{T"?L?	+g?$	N?PDvI?o\G?] @?aWZj?|SU?PP?+%@aץ@eAeWemeehhhhhhhQ?      PC    9    ]V:    8<    hȼ;      >      p?     f?     ?;f?(?qq?$I$IUUUUUUF]tE?Y<      $I$Ib<$I$I?UUUUUUeUUUUUUſUUUUUUu<UUUUUU?wP?X%q?rb=[$I?eUUUſ/?Ͽ.XUUU?               :"7    Q5    Q^*    '88-f1i,<Og7gf{zң;d׿Gf6U%	<;h`'fJ";yfx4cxz}exB#geʲ";<fQedND==<ei7<ްn&geMmk3aGe	G
"#&eO'h;Y<e**<$dS<z)dw;7ld=My<FϓdݲZ1RfdKbCFb<<DjFd񇓠f<V&dnC <<Bd>nMho.ce=C黻$ccz<kcƾ\@;5-ecL);F^~Ecoqd;l)W%ccMV<c,+mc<<xXAbfߨ<xBfb4բS<Rmb5܇[bzK~/Heb'!aa;6Eb#f;3$%bwN7߻odb]R;a<a,Xܤa&Tʄa<EdaZ`%On:lDaˇ+$a洉;ay5<Dt`Z2 <{S8c` 6~e;S`a	 vB`^0;s1d`X(n	!D`]_Vbm$` N+<U`;û_+8pͽÇ_]vhG_kv;$m_muc+F-绐ܚ~e^sf;@F^S;wza(G^O},;EF3
^Iu_pME]W\;Ά]rw;*F]7»k]RH;w\hKbZ\$Xһ$ M=F\8;!\q޷a*ܻ8[J\{1[.ػE['Tꑚ[k0&;aDZ}$(;v+~Z?$6;HcEZ4_nIZæ#Ws&, /Y8ځ;[Y?*7goDYYQ8;<EYg7Gn5\X#;eXf+,;lIDX>BۻTQ X@a)e7iWAj\|੎QW@
+&:DWKp){e"W;<CT
;V-| W;mVIBQCV[49;V	!l޻U}7x};e@OU}+;CU=gj𻊇rUͶ ݻ8N]T-0	㻆~3IT-[;'4CTC$qѦ T=φ1ãS2O~US6JU;BS(B4;-SVp);srR?C
:JRWM0BRqZ)ƦyRTZ;,vQxi*@dQ#;bSBQ:{|ofBQhȹ,;1P = P\
j1tvyBPϦ;XeU P6̑ObY;ΉEO
G_ӢN~^2;üNM0{GfMΆ'ջ7DIMhhJ;㥥,L.r;hrL"0 ⻿bKa7ở:fK#̻Jkځ[JnvMٻaiiI/) ;BmQqI].S2+XHZŻ!
H@H#-\%(G:	RL;'6g?GqZл\S[{F6?;q||7FP.ͻs΁EFAa ݻ*A0E<"S];9lD%/QG)DߤH;&f|CQW;O#iCDv)3`VBXdF;|4cDB$U5ٴ`[2A'K;r7!Aj:99LgW@;x(;UW @">c;ͦ??;N+#>Uǻ]ğ=~;ʭ<A>#;(l;d6ޫiR:s6Z;Y89&=IٻD 8&nӻ؏74L	;): 65*D( 5	h;Fk
 4du^ۻ 3ܣIg »f 2;?e 1
лYU 0/2;b .w:_a% ,>/̰;u *˻( ({ ;qwy &T{~;3d $:Q "E+ܱ;V]U@  S?;^b M; H =OFM 2 5(K;UVU   $" H $ Bi	MHuU   
w7"bYU  _""V                
 >Sk* >Bf;^G ?iLH; ?,: ?hT_䲻?j=OSL;K
