/*!
 * Copyright (c) 2009 Simo Kinnunen.
 * Licensed under the MIT license.
 *
 * @version 1.09
 */

var Cufon = (function() {

	var api = function() {
		return api.replace.apply(null, arguments);
	};

	var DOM = api.DOM = {

		ready: (function() {

			var complete = false, readyStatus = { loaded: 1, complete: 1 };

			var queue = [], perform = function() {
				if (complete) return;
				complete = true;
				for (var fn; fn = queue.shift(); fn());
			};

			// Gecko, Opera, WebKit r26101+

			if (document.addEventListener) {
				document.addEventListener('DOMContentLoaded', perform, false);
				window.addEventListener('pageshow', perform, false); // For cached Gecko pages
			}

			// Old WebKit, Internet Explorer

			if (!window.opera && document.readyState) (function() {
				readyStatus[document.readyState] ? perform() : setTimeout(arguments.callee, 10);
			})();

			// Internet Explorer

			if (document.readyState && document.createStyleSheet) (function() {
				try {
					document.body.doScroll('left');
					perform();
				}
				catch (e) {
					setTimeout(arguments.callee, 1);
				}
			})();

			addEvent(window, 'load', perform); // Fallback

			return function(listener) {
				if (!arguments.length) perform();
				else complete ? listener() : queue.push(listener);
			};

		})(),

		root: function() {
			return document.documentElement || document.body;
		}

	};

	var CSS = api.CSS = {

		Size: function(value, base) {

			this.value = parseFloat(value);
			this.unit = String(value).match(/[a-z%]*$/)[0] || 'px';

			this.convert = function(value) {
				return value / base * this.value;
			};

			this.convertFrom = function(value) {
				return value / this.value * base;
			};

			this.toString = function() {
				return this.value + this.unit;
			};

		},

		addClass: function(el, className) {
			var current = el.className;
			el.className = current + (current && ' ') + className;
			return el;
		},

		color: cached(function(value) {
			var parsed = {};
			parsed.color = value.replace(/^rgba\((.*?),\s*([\d.]+)\)/, function($0, $1, $2) {
				parsed.opacity = parseFloat($2);
				return 'rgb(' + $1 + ')';
			});
			return parsed;
		}),

		// has no direct CSS equivalent.
		// @see http://msdn.microsoft.com/en-us/library/system.windows.fontstretches.aspx
		fontStretch: cached(function(value) {
			if (typeof value == 'number') return value;
			if (/%$/.test(value)) return parseFloat(value) / 100;
			return {
				'ultra-condensed': 0.5,
				'extra-condensed': 0.625,
				condensed: 0.75,
				'semi-condensed': 0.875,
				'semi-expanded': 1.125,
				expanded: 1.25,
				'extra-expanded': 1.5,
				'ultra-expanded': 2
			}[value] || 1;
		}),

		getStyle: function(el) {
			var view = document.defaultView;
			if (view && view.getComputedStyle) return new Style(view.getComputedStyle(el, null));
			if (el.currentStyle) return new Style(el.currentStyle);
			return new Style(el.style);
		},

		gradient: cached(function(value) {
			var gradient = {
				id: value,
				type: value.match(/^-([a-z]+)-gradient\(/)[1],
				stops: []
			}, colors = value.substr(value.indexOf('(')).match(/([\d.]+=)?(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)/ig);
			for (var i = 0, l = colors.length, stop; i < l; ++i) {
				stop = colors[i].split('=', 2).reverse();
				gradient.stops.push([ stop[1] || i / (l - 1), stop[0] ]);
			}
			return gradient;
		}),

		quotedList: cached(function(value) {
			// doesn't work properly with empty quoted strings (""), but
			// it's not worth the extra code.
			var list = [], re = /\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g, match;
			while (match = re.exec(value)) list.push(match[3] || match[1]);
			return list;
		}),

		recognizesMedia: cached(function(media) {
			var el = document.createElement('style'), sheet, container, supported;
			el.type = 'text/css';
			el.media = media;
			try { // this is cached anyway
				el.appendChild(document.createTextNode('/**/'));
			} catch (e) {}
			container = elementsByTagName('head')[0];
			container.insertBefore(el, container.firstChild);
			sheet = (el.sheet || el.styleSheet);
			supported = sheet && !sheet.disabled;
			container.removeChild(el);
			return supported;
		}),

		removeClass: function(el, className) {
			var re = RegExp('(?:^|\\s+)' + className +  '(?=\\s|$)', 'g');
			el.className = el.className.replace(re, '');
			return el;
		},

		supports: function(property, value) {
			var checker = document.createElement('span').style;
			if (checker[property] === undefined) return false;
			checker[property] = value;
			return checker[property] === value;
		},

		textAlign: function(word, style, position, wordCount) {
			if (style.get('textAlign') == 'right') {
				if (position > 0) word = ' ' + word;
			}
			else if (position < wordCount - 1) word += ' ';
			return word;
		},

		textShadow: cached(function(value) {
			if (value == 'none') return null;
			var shadows = [], currentShadow = {}, result, offCount = 0;
			var re = /(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)|(-?[\d.]+[a-z%]*)|,/ig;
			while (result = re.exec(value)) {
				if (result[0] == ',') {
					shadows.push(currentShadow);
					currentShadow = {};
					offCount = 0;
				}
				else if (result[1]) {
					currentShadow.color = result[1];
				}
				else {
					currentShadow[[ 'offX', 'offY', 'blur' ][offCount++]] = result[2];
				}
			}
			shadows.push(currentShadow);
			return shadows;
		}),

		textTransform: (function() {
			var map = {
				uppercase: function(s) {
					return s.toUpperCase();
				},
				lowercase: function(s) {
					return s.toLowerCase();
				},
				capitalize: function(s) {
					return s.replace(/\b./g, function($0) {
						return $0.toUpperCase();
					});
				}
			};
			return function(text, style) {
				var transform = map[style.get('textTransform')];
				return transform ? transform(text) : text;
			};
		})(),

		whiteSpace: (function() {
			var ignore = {
				inline: 1,
				'inline-block': 1,
				'run-in': 1
			};
			var wsStart = /^\s+/, wsEnd = /\s+$/;
			return function(text, style, node, previousElement) {
				if (previousElement) {
					if (previousElement.nodeName.toLowerCase() == 'br') {
						text = text.replace(wsStart, '');
					}
				}
				if (ignore[style.get('display')]) return text;
				if (!node.previousSibling) text = text.replace(wsStart, '');
				if (!node.nextSibling) text = text.replace(wsEnd, '');
				return text;
			};
		})()

	};

	CSS.ready = (function() {

		// don't do anything in Safari 2 (it doesn't recognize any media type)
		var complete = !CSS.recognizesMedia('all'), hasLayout = false;

		var queue = [], perform = function() {
			complete = true;
			for (var fn; fn = queue.shift(); fn());
		};

		var links = elementsByTagName('link'), styles = elementsByTagName('style');

		function isContainerReady(el) {
			return el.disabled || isSheetReady(el.sheet, el.media || 'screen');
		}

		function isSheetReady(sheet, media) {
			// in Opera sheet.disabled is true when it's still loading,
			// even though link.disabled is false. they stay in sync if
			// set manually.
			if (!CSS.recognizesMedia(media || 'all')) return true;
			if (!sheet || sheet.disabled) return false;
			try {
				var rules = sheet.cssRules, rule;
				if (rules) {
					// needed for Safari 3 and Chrome 1.0.
					// in standards-conforming browsers cssRules contains @-rules.
					// Chrome 1.0 weirdness: rules[<number larger than .length - 1>]
					// returns the last rule, so a for loop is the only option.
					search: for (var i = 0, l = rules.length; rule = rules[i], i < l; ++i) {
						switch (rule.type) {
							case 2: // @charset
								break;
							case 3: // @import
								if (!isSheetReady(rule.styleSheet, rule.media.mediaText)) return false;
								break;
							default:
								// only @charset can precede @import
								break search;
						}
					}
				}
			}
			catch (e) {} // probably a style sheet from another domain
			return true;
		}

		function allStylesLoaded() {
			// Internet Explorer's style sheet model, there's no need to do anything
			if (document.createStyleSheet) return true;
			// standards-compliant browsers
			var el, i;
			for (i = 0; el = links[i]; ++i) {
				if (el.rel.toLowerCase() == 'stylesheet' && !isContainerReady(el)) return false;
			}
			for (i = 0; el = styles[i]; ++i) {
				if (!isContainerReady(el)) return false;
			}
			return true;
		}

		DOM.ready(function() {
			// getComputedStyle returns null in Gecko if used in an iframe with display: none
			if (!hasLayout) hasLayout = CSS.getStyle(document.body).isUsable();
			if (complete || (hasLayout && allStylesLoaded())) perform();
			else setTimeout(arguments.callee, 10);
		});

		return function(listener) {
			if (complete) listener();
			else queue.push(listener);
		};

	})();

	function Font(data) {

		var face = this.face = data.face, wordSeparators = {
			'\u0020': 1,
			'\u00a0': 1,
			'\u3000': 1
		};

		this.glyphs = data.glyphs;
		this.w = data.w;
		this.baseSize = parseInt(face['units-per-em'], 10);

		this.family = face['font-family'].toLowerCase();
		this.weight = face['font-weight'];
		this.style = face['font-style'] || 'normal';

		this.viewBox = (function () {
			var parts = face.bbox.split(/\s+/);
			var box = {
				minX: parseInt(parts[0], 10),
				minY: parseInt(parts[1], 10),
				maxX: parseInt(parts[2], 10),
				maxY: parseInt(parts[3], 10)
			};
			box.width = box.maxX - box.minX;
			box.height = box.maxY - box.minY;
			box.toString = function() {
				return [ this.minX, this.minY, this.width, this.height ].join(' ');
			};
			return box;
		})();

		this.ascent = -parseInt(face.ascent, 10);
		this.descent = -parseInt(face.descent, 10);

		this.height = -this.ascent + this.descent;

		this.spacing = function(chars, letterSpacing, wordSpacing) {
			var glyphs = this.glyphs, glyph, kerning, k,
				jumps = [], width = 0,
				i = -1, j = -1, chr;
			while (chr = chars[++i]) {
				glyph = glyphs[chr] || this.missingGlyph;
				if (!glyph) continue;
				if (kerning) {
					width -= k = kerning[chr] || 0;
					jumps[j] -= k;
				}
				width += jumps[++j] = ~~(glyph.w || this.w) + letterSpacing + (wordSeparators[chr] ? wordSpacing : 0);
				kerning = glyph.k;
			}
			jumps.total = width;
			return jumps;
		};

	}

	function FontFamily() {

		var styles = {}, mapping = {
			oblique: 'italic',
			italic: 'oblique'
		};

		this.add = function(font) {
			(styles[font.style] || (styles[font.style] = {}))[font.weight] = font;
		};

		this.get = function(style, weight) {
			var weights = styles[style] || styles[mapping[style]]
				|| styles.normal || styles.italic || styles.oblique;
			if (!weights) return null;
			// we don't have to worry about "bolder" and "lighter"
			// because IE's currentStyle returns a numeric value for it,
			// and other browsers use the computed value anyway
			weight = {
				normal: 400,
				bold: 700
			}[weight] || parseInt(weight, 10);
			if (weights[weight]) return weights[weight];
			// http://www.w3.org/TR/CSS21/fonts.html#propdef-font-weight
			// Gecko uses x99/x01 for lighter/bolder
			var up = {
				1: 1,
				99: 0
			}[weight % 100], alts = [], min, max;
			if (up === undefined) up = weight > 400;
			if (weight == 500) weight = 400;
			for (var alt in weights) {
				if (!hasOwnProperty(weights, alt)) continue;
				alt = parseInt(alt, 10);
				if (!min || alt < min) min = alt;
				if (!max || alt > max) max = alt;
				alts.push(alt);
			}
			if (weight < min) weight = min;
			if (weight > max) weight = max;
			alts.sort(function(a, b) {
				return (up
					? (a >= weight && b >= weight) ? a < b : a > b
					: (a <= weight && b <= weight) ? a > b : a < b) ? -1 : 1;
			});
			return weights[alts[0]];
		};

	}

	function HoverHandler() {

		function contains(node, anotherNode) {
			if (node.contains) return node.contains(anotherNode);
			return node.compareDocumentPosition(anotherNode) & 16;
		}

		function onOverOut(e) {
			var related = e.relatedTarget;
			if (!related || contains(this, related)) return;
			trigger(this, e.type == 'mouseover');
		}

		function onEnterLeave(e) {
			trigger(this, e.type == 'mouseenter');
		}

		function trigger(el, hoverState) {
			// A timeout is needed so that the event can actually "happen"
			// before replace is triggered. This ensures that styles are up
			// to date.
			setTimeout(function() {
				var options = sharedStorage.get(el).options;
				api.replace(el, hoverState ? merge(options, options.hover) : options, true);
			}, 10);
		}

		this.attach = function(el) {
			if (el.onmouseenter === undefined) {
				addEvent(el, 'mouseover', onOverOut);
				addEvent(el, 'mouseout', onOverOut);
			}
			else {
				addEvent(el, 'mouseenter', onEnterLeave);
				addEvent(el, 'mouseleave', onEnterLeave);
			}
		};

	}

	function ReplaceHistory() {

		var list = [], map = {};

		function filter(keys) {
			var values = [], key;
			for (var i = 0; key = keys[i]; ++i) values[i] = list[map[key]];
			return values;
		}

		this.add = function(key, args) {
			map[key] = list.push(args) - 1;
		};

		this.repeat = function() {
			var snapshot = arguments.length ? filter(arguments) : list, args;
			for (var i = 0; args = snapshot[i++];) api.replace(args[0], args[1], true);
		};

	}

	function Storage() {

		var map = {}, at = 0;

		function identify(el) {
			return el.cufid || (el.cufid = ++at);
		}

		this.get = function(el) {
			var id = identify(el);
			return map[id] || (map[id] = {});
		};

	}

	function Style(style) {

		var custom = {}, sizes = {};

		this.extend = function(styles) {
			for (var property in styles) {
				if (hasOwnProperty(styles, property)) custom[property] = styles[property];
			}
			return this;
		};

		this.get = function(property) {
			return custom[property] != undefined ? custom[property] : style[property];
		};

		this.getSize = function(property, base) {
			return sizes[property] || (sizes[property] = new CSS.Size(this.get(property), base));
		};

		this.isUsable = function() {
			return !!style;
		};

	}

	function addEvent(el, type, listener) {
		if (el.addEventListener) {
			el.addEventListener(type, listener, false);
		}
		else if (el.attachEvent) {
			el.attachEvent('on' + type, function() {
				return listener.call(el, window.event);
			});
		}
	}

	function attach(el, options) {
		var storage = sharedStorage.get(el);
		if (storage.options) return el;
		if (options.hover && options.hoverables[el.nodeName.toLowerCase()]) {
			hoverHandler.attach(el);
		}
		storage.options = options;
		return el;
	}

	function cached(fun) {
		var cache = {};
		return function(key) {
			if (!hasOwnProperty(cache, key)) cache[key] = fun.apply(null, arguments);
			return cache[key];
		};
	}

	function getFont(el, style) {
		var families = CSS.quotedList(style.get('fontFamily').toLowerCase()), family;
		for (var i = 0; family = families[i]; ++i) {
			if (fonts[family]) return fonts[family].get(style.get('fontStyle'), style.get('fontWeight'));
		}
		return null;
	}

	function elementsByTagName(query) {
		return document.getElementsByTagName(query);
	}

	function hasOwnProperty(obj, property) {
		return obj.hasOwnProperty(property);
	}

	function merge() {
		var merged = {}, arg, key;
		for (var i = 0, l = arguments.length; arg = arguments[i], i < l; ++i) {
			for (key in arg) {
				if (hasOwnProperty(arg, key)) merged[key] = arg[key];
			}
		}
		return merged;
	}

	function process(font, text, style, options, node, el) {
		var fragment = document.createDocumentFragment(), processed;
		if (text === '') return fragment;
		var separate = options.separate;
		var parts = text.split(separators[separate]), needsAligning = (separate == 'words');
		if (needsAligning && HAS_BROKEN_REGEXP) {
			// @todo figure out a better way to do this
			if (/^\s/.test(text)) parts.unshift('');
			if (/\s$/.test(text)) parts.push('');
		}
		for (var i = 0, l = parts.length; i < l; ++i) {
			processed = engines[options.engine](font,
				needsAligning ? CSS.textAlign(parts[i], style, i, l) : parts[i],
				style, options, node, el, i < l - 1);
			if (processed) fragment.appendChild(processed);
		}
		return fragment;
	}

	function replaceElement(el, options) {
		var name = el.nodeName.toLowerCase();
		if (options.ignore[name]) return;
		var replace = !options.textless[name];
		var style = CSS.getStyle(attach(el, options)).extend(options);
		var font = getFont(el, style), node, type, next, anchor, text, lastElement;
		if (!font) return;
		for (node = el.firstChild; node; node = next) {
			type = node.nodeType;
			next = node.nextSibling;
			if (replace && type == 3) {
				// Node.normalize() is broken in IE 6, 7, 8
				if (anchor) {
					anchor.appendData(node.data);
					el.removeChild(node);
				}
				else anchor = node;
				if (next) continue;
			}
			if (anchor) {
				el.replaceChild(process(font,
					CSS.whiteSpace(anchor.data, style, anchor, lastElement),
					style, options, node, el), anchor);
				anchor = null;
			}
			if (type == 1) {
				if (node.firstChild) {
					if (node.nodeName.toLowerCase() == 'cufon') {
						engines[options.engine](font, null, style, options, node, el);
					}
					else arguments.callee(node, options);
				}
				lastElement = node;
			}
		}
	}

	var HAS_BROKEN_REGEXP = ' '.split(/\s+/).length == 0;

	var sharedStorage = new Storage();
	var hoverHandler = new HoverHandler();
	var replaceHistory = new ReplaceHistory();
	var initialized = false;

	var engines = {}, fonts = {}, defaultOptions = {
		autoDetect: false,
		engine: null,
		//fontScale: 1,
		//fontScaling: false,
		forceHitArea: false,
		hover: false,
		hoverables: {
			a: true
		},
		ignore: {
			applet: 1,
			canvas: 1,
			col: 1,
			colgroup: 1,
			head: 1,
			iframe: 1,
			map: 1,
			optgroup: 1,
			option: 1,
			script: 1,
			select: 1,
			style: 1,
			textarea: 1,
			title: 1,
			pre: 1
		},
		printable: true,
		//rotation: 0,
		//selectable: false,
		selector: (
				window.Sizzle
			||	(window.jQuery && function(query) { return jQuery(query); }) // avoid noConflict issues
			||	(window.dojo && dojo.query)
			||	(window.Ext && Ext.query)
			||	(window.YAHOO && YAHOO.util && YAHOO.util.Selector && YAHOO.util.Selector.query)
			||	(window.$$ && function(query) { return $$(query); })
			||	(window.$ && function(query) { return $(query); })
			||	(document.querySelectorAll && function(query) { return document.querySelectorAll(query); })
			||	elementsByTagName
		),
		separate: 'words', // 'none' and 'characters' are also accepted
		textless: {
			dl: 1,
			html: 1,
			ol: 1,
			table: 1,
			tbody: 1,
			thead: 1,
			tfoot: 1,
			tr: 1,
			ul: 1
		},
		textShadow: 'none'
	};

	var separators = {
		// The first pattern may cause unicode characters above
		// code point 255 to be removed in Safari 3.0. Luckily enough
		// Safari 3.0 does not include non-breaking spaces in \s, so
		// we can just use a simple alternative pattern.
		words: /\s/.test('\u00a0') ? /[^\S\u00a0]+/ : /\s+/,
		characters: '',
		none: /^/
	};

	api.now = function() {
		DOM.ready();
		return api;
	};

	api.refresh = function() {
		replaceHistory.repeat.apply(replaceHistory, arguments);
		return api;
	};

	api.registerEngine = function(id, engine) {
		if (!engine) return api;
		engines[id] = engine;
		return api.set('engine', id);
	};

	api.registerFont = function(data) {
		if (!data) return api;
		var font = new Font(data), family = font.family;
		if (!fonts[family]) fonts[family] = new FontFamily();
		fonts[family].add(font);
		return api.set('fontFamily', '"' + family + '"');
	};

	api.replace = function(elements, options, ignoreHistory) {
		options = merge(defaultOptions, options);
		if (!options.engine) return api; // there's no browser support so we'll just stop here
		if (!initialized) {
			CSS.addClass(DOM.root(), 'cufon-active cufon-loading');
			CSS.ready(function() {
				// fires before any replace() calls, but it doesn't really matter
				CSS.addClass(CSS.removeClass(DOM.root(), 'cufon-loading'), 'cufon-ready');
			});
			initialized = true;
		}
		if (options.hover) options.forceHitArea = true;
		if (options.autoDetect) delete options.fontFamily;
		if (typeof options.textShadow == 'string') {
			options.textShadow = CSS.textShadow(options.textShadow);
		}
		if (typeof options.color == 'string' && /^-/.test(options.color)) {
			options.textGradient = CSS.gradient(options.color);
		}
		else delete options.textGradient;
		if (!ignoreHistory) replaceHistory.add(elements, arguments);
		if (elements.nodeType || typeof elements == 'string') elements = [ elements ];
		CSS.ready(function() {
			for (var i = 0, l = elements.length; i < l; ++i) {
				var el = elements[i];
				if (typeof el == 'string') api.replace(options.selector(el), options, true);
				else replaceElement(el, options);
			}
		});
		return api;
	};

	api.set = function(option, value) {
		defaultOptions[option] = value;
		return api;
	};

	return api;

})();

Cufon.registerEngine('canvas', (function() {

	// Safari 2 doesn't support .apply() on native methods

	var check = document.createElement('canvas');
	if (!check || !check.getContext || !check.getContext.apply) return;
	check = null;

	var HAS_INLINE_BLOCK = Cufon.CSS.supports('display', 'inline-block');

	// Firefox 2 w/ non-strict doctype (almost standards mode)
	var HAS_BROKEN_LINEHEIGHT = !HAS_INLINE_BLOCK && (document.compatMode == 'BackCompat' || /frameset|transitional/i.test(document.doctype.publicId));

	var styleSheet = document.createElement('style');
	styleSheet.type = 'text/css';
	styleSheet.appendChild(document.createTextNode((
		'cufon{text-indent:0;}' +
		'@media screen,projection{' +
			'cufon{display:inline;display:inline-block;position:relative;vertical-align:middle;' +
			(HAS_BROKEN_LINEHEIGHT
				? ''
				: 'font-size:1px;line-height:1px;') +
			'}cufon cufontext{display:-moz-inline-box;display:inline-block;width:0;height:0;overflow:hidden;text-indent:-10000in;}' +
			(HAS_INLINE_BLOCK
				? 'cufon canvas{position:relative;}'
				: 'cufon canvas{position:absolute;}') +
		'}' +
		'@media print{' +
			'cufon{padding:0;}' + // Firefox 2
			'cufon canvas{display:none;}' +
		'}'
	).replace(/;/g, '!important;')));
	document.getElementsByTagName('head')[0].appendChild(styleSheet);

	function generateFromVML(path, context) {
		var atX = 0, atY = 0;
		var code = [], re = /([mrvxe])([^a-z]*)/g, match;
		generate: for (var i = 0; match = re.exec(path); ++i) {
			var c = match[2].split(',');
			switch (match[1]) {
				case 'v':
					code[i] = { m: 'bezierCurveTo', a: [ atX + ~~c[0], atY + ~~c[1], atX + ~~c[2], atY + ~~c[3], atX += ~~c[4], atY += ~~c[5] ] };
					break;
				case 'r':
					code[i] = { m: 'lineTo', a: [ atX += ~~c[0], atY += ~~c[1] ] };
					break;
				case 'm':
					code[i] = { m: 'moveTo', a: [ atX = ~~c[0], atY = ~~c[1] ] };
					break;
				case 'x':
					code[i] = { m: 'closePath' };
					break;
				case 'e':
					break generate;
			}
			context[code[i].m].apply(context, code[i].a);
		}
		return code;
	}

	function interpret(code, context) {
		for (var i = 0, l = code.length; i < l; ++i) {
			var line = code[i];
			context[line.m].apply(context, line.a);
		}
	}

	return function(font, text, style, options, node, el) {

		var redraw = (text === null);

		if (redraw) text = node.getAttribute('alt');

		var viewBox = font.viewBox;

		var size = style.getSize('fontSize', font.baseSize);

		var expandTop = 0, expandRight = 0, expandBottom = 0, expandLeft = 0;
		var shadows = options.textShadow, shadowOffsets = [];
		if (shadows) {
			for (var i = shadows.length; i--;) {
				var shadow = shadows[i];
				var x = size.convertFrom(parseFloat(shadow.offX));
				var y = size.convertFrom(parseFloat(shadow.offY));
				shadowOffsets[i] = [ x, y ];
				if (y < expandTop) expandTop = y;
				if (x > expandRight) expandRight = x;
				if (y > expandBottom) expandBottom = y;
				if (x < expandLeft) expandLeft = x;
			}
		}

		var chars = Cufon.CSS.textTransform(text, style).split('');

		var jumps = font.spacing(chars,
			~~size.convertFrom(parseFloat(style.get('letterSpacing')) || 0),
			~~size.convertFrom(parseFloat(style.get('wordSpacing')) || 0)
		);

		if (!jumps.length) return null; // there's nothing to render

		var width = jumps.total;

		expandRight += viewBox.width - jumps[jumps.length - 1];
		expandLeft += viewBox.minX;

		var wrapper, canvas;

		if (redraw) {
			wrapper = node;
			canvas = node.firstChild;
		}
		else {
			wrapper = document.createElement('cufon');
			wrapper.className = 'cufon cufon-canvas';
			wrapper.setAttribute('alt', text);

			canvas = document.createElement('canvas');
			wrapper.appendChild(canvas);

			if (options.printable) {
				var print = document.createElement('cufontext');
				print.appendChild(document.createTextNode(text));
				wrapper.appendChild(print);
			}
		}

		var wStyle = wrapper.style;
		var cStyle = canvas.style;

		var height = size.convert(viewBox.height);
		var roundedHeight = Math.ceil(height);
		var roundingFactor = roundedHeight / height;
		var stretchFactor = roundingFactor * Cufon.CSS.fontStretch(style.get('fontStretch'));
		var stretchedWidth = width * stretchFactor;

		var canvasWidth = Math.ceil(size.convert(stretchedWidth + expandRight - expandLeft));
		var canvasHeight = Math.ceil(size.convert(viewBox.height - expandTop + expandBottom));

		canvas.width = canvasWidth;
		canvas.height = canvasHeight;

		// needed for WebKit and full page zoom
		cStyle.width = canvasWidth + 'px';
		cStyle.height = canvasHeight + 'px';

		// minY has no part in canvas.height
		expandTop += viewBox.minY;

		cStyle.top = Math.round(size.convert(expandTop - font.ascent)) + 'px';
		cStyle.left = Math.round(size.convert(expandLeft)) + 'px';

		var wrapperWidth = Math.max(Math.ceil(size.convert(stretchedWidth)), 0) + 'px';

		if (HAS_INLINE_BLOCK) {
			wStyle.width = wrapperWidth;
			wStyle.height = size.convert(font.height) + 'px';
		}
		else {
			wStyle.paddingLeft = wrapperWidth;
			wStyle.paddingBottom = (size.convert(font.height) - 1) + 'px';
		}

		var g = canvas.getContext('2d'), scale = height / viewBox.height;

		// proper horizontal scaling is performed later
		g.scale(scale, scale * roundingFactor);
		g.translate(-expandLeft, -expandTop);
		g.save();

		function renderText() {
			var glyphs = font.glyphs, glyph, i = -1, j = -1, chr;
			g.scale(stretchFactor, 1);
			while (chr = chars[++i]) {
				var glyph = glyphs[chars[i]] || font.missingGlyph;
				if (!glyph) continue;
				if (glyph.d) {
					g.beginPath();
					if (glyph.code) interpret(glyph.code, g);
					else glyph.code = generateFromVML('m' + glyph.d, g);
					g.fill();
				}
				g.translate(jumps[++j], 0);
			}
			g.restore();
		}

		if (shadows) {
			for (var i = shadows.length; i--;) {
				var shadow = shadows[i];
				g.save();
				g.fillStyle = shadow.color;
				g.translate.apply(g, shadowOffsets[i]);
				renderText();
			}
		}

		var gradient = options.textGradient;
		if (gradient) {
			var stops = gradient.stops, fill = g.createLinearGradient(0, viewBox.minY, 0, viewBox.maxY);
			for (var i = 0, l = stops.length; i < l; ++i) {
				fill.addColorStop.apply(fill, stops[i]);
			}
			g.fillStyle = fill;
		}
		else g.fillStyle = style.get('color');

		renderText();

		return wrapper;

	};

})());

Cufon.registerEngine('vml', (function() {

	var ns = document.namespaces;
	if (!ns) return;
	ns.add('cvml', 'urn:schemas-microsoft-com:vml');
	ns = null;

	var check = document.createElement('cvml:shape');
	check.style.behavior = 'url(#default#VML)';
	if (!check.coordsize) return; // VML isn't supported
	check = null;

	var HAS_BROKEN_LINEHEIGHT = (document.documentMode || 0) < 8;

	document.write(('<style type="text/css">' +
		'cufoncanvas{text-indent:0;}' +
		'@media screen{' +
			'cvml\\:shape,cvml\\:rect,cvml\\:fill,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute;}' +
			'cufoncanvas{position:absolute;text-align:left;}' +
			'cufon{display:inline-block;position:relative;vertical-align:' +
			(HAS_BROKEN_LINEHEIGHT
				? 'middle'
				: 'text-bottom') +
			';}' +
			'cufon cufontext{position:absolute;left:-10000in;font-size:1px;}' +
			'a cufon{cursor:pointer}' + // ignore !important here
		'}' +
		'@media print{' +
			'cufon cufoncanvas{display:none;}' +
		'}' +
	'</style>').replace(/;/g, '!important;'));

	function getFontSizeInPixels(el, value) {
		return getSizeInPixels(el, /(?:em|ex|%)$|^[a-z-]+$/i.test(value) ? '1em' : value);
	}

	// Original by Dead Edwards.
	// Combined with getFontSizeInPixels it also works with relative units.
	function getSizeInPixels(el, value) {
		if (value === '0') return 0;
		if (/px$/i.test(value)) return parseFloat(value);
		var style = el.style.left, runtimeStyle = el.runtimeStyle.left;
		el.runtimeStyle.left = el.currentStyle.left;
		el.style.left = value.replace('%', 'em');
		var result = el.style.pixelLeft;
		el.style.left = style;
		el.runtimeStyle.left = runtimeStyle;
		return result;
	}

	function getSpacingValue(el, style, size, property) {
		var key = 'computed' + property, value = style[key];
		if (isNaN(value)) {
			value = style.get(property);
			style[key] = value = (value == 'normal') ? 0 : ~~size.convertFrom(getSizeInPixels(el, value));
		}
		return value;
	}

	var fills = {};

	function gradientFill(gradient) {
		var id = gradient.id;
		if (!fills[id]) {
			var stops = gradient.stops, fill = document.createElement('cvml:fill'), colors = [];
			fill.type = 'gradient';
			fill.angle = 180;
			fill.focus = '0';
			fill.method = 'sigma';
			fill.color = stops[0][1];
			for (var j = 1, k = stops.length - 1; j < k; ++j) {
				colors.push(stops[j][0] * 100 + '% ' + stops[j][1]);
			}
			fill.colors = colors.join(',');
			fill.color2 = stops[k][1];
			fills[id] = fill;
		}
		return fills[id];
	}

	return function(font, text, style, options, node, el, hasNext) {

		var redraw = (text === null);

		if (redraw) text = node.alt;

		var viewBox = font.viewBox;

		var size = style.computedFontSize || (style.computedFontSize = new Cufon.CSS.Size(getFontSizeInPixels(el, style.get('fontSize')) + 'px', font.baseSize));

		var wrapper, canvas;

		if (redraw) {
			wrapper = node;
			canvas = node.firstChild;
		}
		else {
			wrapper = document.createElement('cufon');
			wrapper.className = 'cufon cufon-vml';
			wrapper.alt = text;

			canvas = document.createElement('cufoncanvas');
			wrapper.appendChild(canvas);

			if (options.printable) {
				var print = document.createElement('cufontext');
				print.appendChild(document.createTextNode(text));
				wrapper.appendChild(print);
			}

			// ie6, for some reason, has trouble rendering the last VML element in the document.
			// we can work around this by injecting a dummy element where needed.
			// @todo find a better solution
			if (!hasNext) wrapper.appendChild(document.createElement('cvml:shape'));
		}

		var wStyle = wrapper.style;
		var cStyle = canvas.style;

		var height = size.convert(viewBox.height), roundedHeight = Math.ceil(height);
		var roundingFactor = roundedHeight / height;
		var stretchFactor = roundingFactor * Cufon.CSS.fontStretch(style.get('fontStretch'));
		var minX = viewBox.minX, minY = viewBox.minY;

		cStyle.height = roundedHeight;
		cStyle.top = Math.round(size.convert(minY - font.ascent));
		cStyle.left = Math.round(size.convert(minX));

		wStyle.height = size.convert(font.height) + 'px';

		var color = style.get('color');
		var chars = Cufon.CSS.textTransform(text, style).split('');

		var jumps = font.spacing(chars,
			getSpacingValue(el, style, size, 'letterSpacing'),
			getSpacingValue(el, style, size, 'wordSpacing')
		);

		if (!jumps.length) return null;

		var width = jumps.total;
		var fullWidth = -minX + width + (viewBox.width - jumps[jumps.length - 1]);

		var shapeWidth = size.convert(fullWidth * stretchFactor), roundedShapeWidth = Math.round(shapeWidth);

		var coordSize = fullWidth + ',' + viewBox.height, coordOrigin;
		var stretch = 'r' + coordSize + 'ns';

		var fill = options.textGradient && gradientFill(options.textGradient);

		var glyphs = font.glyphs, offsetX = 0;
		var shadows = options.textShadow;
		var i = -1, j = 0, chr;

		while (chr = chars[++i]) {

			var glyph = glyphs[chars[i]] || font.missingGlyph, shape;
			if (!glyph) continue;

			if (redraw) {
				// some glyphs may be missing so we can't use i
				shape = canvas.childNodes[j];
				while (shape.firstChild) shape.removeChild(shape.firstChild); // shadow, fill
			}
			else {
				shape = document.createElement('cvml:shape');
				canvas.appendChild(shape);
			}

			shape.stroked = 'f';
			shape.coordsize = coordSize;
			shape.coordorigin = coordOrigin = (minX - offsetX) + ',' + minY;
			shape.path = (glyph.d ? 'm' + glyph.d + 'xe' : '') + 'm' + coordOrigin + stretch;
			shape.fillcolor = color;

			if (fill) shape.appendChild(fill.cloneNode(false));

			// it's important to not set top/left or IE8 will grind to a halt
			var sStyle = shape.style;
			sStyle.width = roundedShapeWidth;
			sStyle.height = roundedHeight;

			if (shadows) {
				// due to the limitations of the VML shadow element there
				// can only be two visible shadows. opacity is shared
				// for all shadows.
				var shadow1 = shadows[0], shadow2 = shadows[1];
				var color1 = Cufon.CSS.color(shadow1.color), color2;
				var shadow = document.createElement('cvml:shadow');
				shadow.on = 't';
				shadow.color = color1.color;
				shadow.offset = shadow1.offX + ',' + shadow1.offY;
				if (shadow2) {
					color2 = Cufon.CSS.color(shadow2.color);
					shadow.type = 'double';
					shadow.color2 = color2.color;
					shadow.offset2 = shadow2.offX + ',' + shadow2.offY;
				}
				shadow.opacity = color1.opacity || (color2 && color2.opacity) || 1;
				shape.appendChild(shadow);
			}

			offsetX += jumps[j++];
		}

		// addresses flickering issues on :hover

		var cover = shape.nextSibling, coverFill, vStyle;

		if (options.forceHitArea) {

			if (!cover) {
				cover = document.createElement('cvml:rect');
				cover.stroked = 'f';
				cover.className = 'cufon-vml-cover';
				coverFill = document.createElement('cvml:fill');
				coverFill.opacity = 0;
				cover.appendChild(coverFill);
				canvas.appendChild(cover);
			}

			vStyle = cover.style;

			vStyle.width = roundedShapeWidth;
			vStyle.height = roundedHeight;

		}
		else if (cover) canvas.removeChild(cover);

		wStyle.width = Math.max(Math.ceil(size.convert(width * stretchFactor)), 0);

		if (HAS_BROKEN_LINEHEIGHT) {

			var yAdjust = style.computedYAdjust;

			if (yAdjust === undefined) {
				var lineHeight = style.get('lineHeight');
				if (lineHeight == 'normal') lineHeight = '1em';
				else if (!isNaN(lineHeight)) lineHeight += 'em'; // no unit
				style.computedYAdjust = yAdjust = 0.5 * (getSizeInPixels(el, lineHeight) - parseFloat(wStyle.height));
			}

			if (yAdjust) {
				wStyle.marginTop = Math.ceil(yAdjust) + 'px';
				wStyle.marginBottom = yAdjust + 'px';
			}

		}

		return wrapper;

	};

})());
/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * Copyright (c) 2008 Typotheque.com All rights reserved.
 * 
 * Trademark:
 * Greta is a trademark of Typotheque.com. All rights reserved.
 * 
 * Full name:
 * GretaDisplayStdLight
 * 
 * Description:
 * Greta Display is a collection of eight display typefaces. These four weight were
 * designed with increased contrast, tighter spacing, more refinedÊdetails, and are
 * ideally suited for headline typography and nameplates.
 * 
 * Manufacturer:
 * Typotheque type foundry
 * 
 * Designer:
 * Peter Bilak, Nikola Djurek (www.typotheque.com)
 * 
 * Vendor URL:
 * www.typotheque.com
 * 
 * License information:
 * http://www.typotheque.com/licensing/eula
 */
Cufon.registerFont({"w":156,"face":{"font-family":"Greta Display Std Light","font-weight":300,"font-stretch":"normal","units-per-em":"360","panose-1":"2 0 5 6 0 0 0 2 0 4","ascent":"256","descent":"-104","x-height":"3","bbox":"-5 -275 318 77.739","underline-thickness":"18","underline-position":"-18","unicode-range":"U+0020-U+00FF"},"glyphs":{" ":{"w":74,"k":{"\u00fd":7,"\u00ff":7,"y":7,"w":7,"v":7,"\u00dd":7,"\u00c3":14,"\u00c0":14,"\u00c5":14,"\u00c4":14,"\u00c2":14,"\u00c1":14,"Y":7,"W":7,"V":7,"T":14,"A":14}},"A":{"d":"122,0r0,-4r30,-5r-24,-74r-70,0r-27,70r35,9r0,4r-67,0v1,-10,14,-7,20,-12r76,-198r21,0r69,203v6,3,18,-1,18,7r-81,0xm96,-182v-14,27,-23,60,-35,89r64,0","w":201,"k":{"*":26,"&":5,"p":7,"Y":14," ":7}},"B":{"d":"7,0r0,-5r35,-4r0,-192r-35,-4r0,-5v67,1,167,-12,167,50v0,24,-28,41,-48,48v22,1,62,13,62,52v0,35,-27,60,-83,60r-98,0xm158,-59v1,-44,-40,-46,-86,-45r0,94v47,3,86,-7,86,-49xm142,-156v-2,-40,-31,-48,-70,-46r0,88v40,3,72,-7,70,-42","w":195,"k":{"\\":10,"\u00d8":-7,"\u00d4":-7,"\u00d3":-7,"\u00d5":-7,"\u00d6":-7,"\u00d2":-7,"\u00c7":-7,"\u00c6":10,"\u00c3":7,"\u00c0":7,"\u00c5":7,"\u00c4":7,"\u00c2":7,"\u00c1":7,"Q":-7,"O":-7,"G":-7,"C":-7,"A":7,"Y":6}},"C":{"d":"190,-146r-8,0r-14,-46v-59,-33,-124,4,-124,85v0,98,102,131,142,68r4,0r0,28v-5,2,-24,14,-61,14v-69,0,-118,-34,-118,-107v0,-62,49,-109,117,-109v30,0,51,8,62,12r0,55","w":198,"k":{"-":16}},"D":{"d":"7,0r0,-5r35,-4r0,-192r-35,-4r0,-5v107,1,217,-18,217,100v0,73,-52,110,-122,110r-95,0xm192,-105v1,-70,-40,-101,-120,-95r0,190v76,4,118,-10,120,-95","w":235,"k":{"\u00c6":20}},"E":{"d":"152,-101r-80,-1r0,92r80,0r16,-41r7,2r-6,49r-162,0r0,-5r35,-4r0,-192r-35,-4r0,-5r161,0r0,48r-9,0r-10,-39r-77,0r0,89r80,-1r0,12","w":180},"F":{"d":"7,-210r161,0r0,48r-9,0r-10,-39r-77,0r0,93r80,-2r0,12r-80,-1r0,90r36,4r0,5r-101,0r0,-5r35,-4r0,-192r-35,-4r0,-5","w":168,"k":{"\"":-12,"'":-12,"\\":-5,"\/":12,".":30,",":30,"\u00c6":30,"\u00c3":22,"\u00c0":22,"\u00c5":22,"\u00c4":22,"\u00c2":22,"\u00c1":22,"A":22,"*":-10,"_":33,"Y":-7,"M":7}},"G":{"d":"182,-146r-14,-47v-59,-32,-125,7,-124,86v0,75,54,114,116,93r0,-82r-35,-5r0,-5r65,0r0,95v-5,2,-24,14,-61,14v-69,0,-118,-34,-118,-107v0,-62,49,-109,117,-109v37,0,51,8,62,12r0,55r-8,0","w":209},"H":{"d":"140,0r0,-5r36,-4r0,-93r-104,0r0,93r36,4r0,5r-101,0r0,-5r35,-4r0,-192r-35,-4r0,-5r101,0r0,5r-36,4r0,89r104,0r0,-89r-36,-4r0,-5r102,0r0,5r-37,4r0,192r37,4r0,5r-102,0","w":248,"k":{"\u00d8":9,"\u00d4":9,"\u00d3":9,"\u00d5":9,"\u00d6":9,"\u00d2":9,"\u00c7":9,"Q":9,"O":9,"G":9,"C":9}},"I":{"d":"12,0r0,-5r35,-4r0,-192r-35,-4r0,-5r101,0r0,5r-37,4r0,192r37,4r0,5r-101,0","w":124},"J":{"d":"108,-54v0,54,-63,67,-108,50r0,-58r8,0r11,48v25,14,59,9,59,-39r0,-148r-35,-4r0,-5r101,0r0,5r-36,4r0,147","w":144,"k":{"_":23,"p":9,"g":7,"-":7,"c":7,"d":7,"e":7,"o":7,"q":7,"\u00e7":7,"\u00e9":7,"\u00e8":7,"\u00ea":7,"\u00eb":7,"\u00f3":7,"\u00f2":7,"\u00f4":7,"\u00f6":7,"\u00f5":7,"\u00f8":7,"\u00f0":7,"v":7,"w":7,"y":7,"\u00ff":7,"\u00fd":7,"A":21,"\u00c1":21,"\u00c2":21,"\u00c4":21,"\u00c5":21,"\u00c0":21,"\u00c3":21,"\u00c6":23,"\/":19,"a":5,"\u00e1":5,"\u00e0":5,"\u00e2":5,"\u00e4":5,"\u00e3":5,"\u00e5":5,",":14,".":14}},"K":{"d":"7,0r0,-5r35,-4r0,-192r-35,-4r0,-5r101,0r0,5r-36,4r0,192r36,4r0,5r-101,0xm158,0r-77,-101r0,-6r78,-91r-27,-8r0,-4r73,0r0,5r-32,7r-69,78r86,111r24,4r0,5r-56,0","w":210,"k":{"C":9,"G":9,"O":9,"Q":9,"\u00c7":9,"\u00d2":9,"\u00d6":9,"\u00d5":9,"\u00d3":9,"\u00d4":9,"\u00d8":9,"-":23,"V":8,"W":8,"Y":8,"\u00dd":8,"u":11,"\u00fa":11,"\u00f9":11,"\u00fb":11,"\u00fc":11,"c":7,"d":7,"e":7,"o":7,"q":7,"\u00e7":7,"\u00e9":7,"\u00e8":7,"\u00ea":7,"\u00eb":7,"\u00f3":7,"\u00f2":7,"\u00f4":7,"\u00f6":7,"\u00f5":7,"\u00f8":7,"\u00f0":7,"v":16,"w":16,"y":16,"\u00ff":16,"\u00fd":16}},"L":{"d":"7,0r0,-5r35,-4r0,-192r-35,-4r0,-5r101,0r0,5r-36,4r0,191r76,0r20,-50r7,2r-9,58r-159,0","w":173,"k":{"\u00b7":49,"Y":17,"J":-15,"T":16,"-":17,"V":17,"W":17,"\u00dd":17,"\\":21,"c":-6,"d":-6,"e":-6,"o":-6,"q":-6,"\u00e7":-6,"\u00e9":-6,"\u00e8":-6,"\u00ea":-6,"\u00eb":-6,"\u00f3":-6,"\u00f2":-6,"\u00f4":-6,"\u00f6":-6,"\u00f5":-6,"\u00f8":-6,"\u00f0":-6,"v":20,"w":20,"y":20,"\u00ff":20,"\u00fd":20,"U":11,"\u00da":11,"\u00db":11,"\u00d9":11,"\u00dc":11,"'":38,"\"":38}},"M":{"d":"189,0r0,-5r32,-4r-16,-160r-66,172r-12,0r-70,-182r-2,0r-14,165r35,9r0,5r-78,0r0,-5r30,-9r18,-182r-31,-9r0,-5r63,0r66,175r64,-175r58,0r0,5r-33,5r19,191r32,4r0,5r-95,0","w":284,"k":{"\u00fc":5,"\u00fb":5,"\u00f9":5,"\u00fa":5,"u":5,"\u00dc":2,"\u00d9":2,"\u00db":2,"\u00da":2,"\u00d8":7,"\u00d4":7,"\u00d3":7,"\u00d5":7,"\u00d6":7,"\u00d2":7,"\u00c7":7,"U":2,"Q":7,"O":7,"G":7,"C":7}},"N":{"d":"8,0r0,-5r28,-8r0,-182r-29,-10r0,-5r50,0r123,155r0,-142r-31,-8r0,-5r73,0r0,5r-28,8r0,200r-6,0r-139,-175r0,159r32,8r0,5r-73,0","w":226,"k":{"\/":9,"\u00c6":11,"\u00c3":18,"\u00c0":18,"\u00c5":18,"\u00c4":18,"\u00c2":18,"\u00c1":18,"A":18}},"O":{"d":"221,-113v0,62,-40,116,-107,116v-62,0,-103,-42,-103,-102v0,-67,45,-114,109,-114v63,0,101,42,101,100xm189,-106v0,-53,-22,-98,-72,-98v-51,0,-73,42,-73,97v0,55,25,101,71,101v55,0,74,-50,74,-100","w":232,"k":{"_":22,"Y":12,"X":9,"M":7,"C":-4,"G":-4,"O":-4,"Q":-4,"\u00c7":-4,"\u00d2":-4,"\u00d6":-4,"\u00d5":-4,"\u00d3":-4,"\u00d4":-4,"\u00d8":-4,"T":4,"-":-9,"V":12,"W":12,"\u00dd":12,"\\":11,"U":6,"\u00da":6,"\u00db":6,"\u00d9":6,"\u00dc":6,"'":5,"\"":5,"A":16,"\u00c1":16,"\u00c2":16,"\u00c4":16,"\u00c5":16,"\u00c0":16,"\u00c3":16,"\u00c6":24,"\/":7,",":18,".":18}},"P":{"d":"7,0r0,-5r35,-4r0,-192r-35,-4r0,-5v75,3,172,-20,172,62v0,43,-48,66,-107,61r0,78r36,4r0,5r-101,0xm149,-147v0,-42,-31,-58,-77,-53r0,104v46,3,77,-10,77,-51","w":187,"k":{"\/":12,".":30,",":30,"\u00c6":44,"\u00c3":27,"\u00c0":27,"\u00c5":27,"\u00c4":27,"\u00c2":27,"\u00c1":27,"A":27,"*":-10,"_":51,"M":9}},"Q":{"d":"120,-213v124,0,130,177,33,209r75,36r0,7r-44,0r-45,-39v-73,15,-128,-31,-128,-99v0,-67,45,-114,109,-114xm189,-106v0,-53,-22,-98,-72,-98v-51,0,-73,42,-73,97v0,55,25,101,71,101v55,0,74,-50,74,-100","w":232,"k":{"_":-8,"Y":12,"X":9,"M":7,"C":-4,"G":-4,"O":-4,"Q":-4,"\u00c7":-4,"\u00d2":-4,"\u00d6":-4,"\u00d5":-4,"\u00d3":-4,"\u00d4":-4,"\u00d8":-4,"T":4,"-":-9,"V":12,"W":12,"\u00dd":12,"\\":11,"U":6,"\u00da":6,"\u00db":6,"\u00d9":6,"\u00dc":6,"'":5,"\"":5,"A":16,"\u00c1":16,"\u00c2":16,"\u00c4":16,"\u00c5":16,"\u00c0":16,"\u00c3":16,"\u00c6":24,"\/":7,",":18,".":18}},"R":{"d":"162,0r-60,-99r-30,0r0,90r36,4r0,5r-101,0r0,-5r35,-4r0,-192r-35,-4r0,-5v70,3,169,-19,169,54v0,24,-15,43,-44,52r59,94v6,4,18,1,19,10r-48,0xm146,-154v1,-36,-31,-50,-74,-46r0,92v41,3,74,-14,74,-46","w":206,"k":{"*":14,"Y":14,"C":6,"G":6,"O":6,"Q":6,"\u00c7":6,"\u00d2":6,"\u00d6":6,"\u00d5":6,"\u00d3":6,"\u00d4":6,"\u00d8":6,"T":10,"-":14,"V":14,"W":14,"\u00dd":14,"\\":24,"u":8,"\u00fa":8,"\u00f9":8,"\u00fb":8,"\u00fc":8,"v":13,"w":13,"y":13,"\u00ff":13,"\u00fd":13,"'":8,"\"":8}},"S":{"d":"119,-50v0,-53,-106,-36,-106,-102v0,-61,81,-73,126,-49r0,51r-7,0r-11,-42v-27,-23,-85,-8,-82,26v5,58,112,40,109,109v-3,63,-87,71,-139,48r0,-52r6,0r13,42v34,20,91,23,91,-31","w":157,"k":{"_":20,"A":10,"\u00c1":10,"\u00c2":10,"\u00c4":10,"\u00c5":10,"\u00c0":10,"\u00c3":10,"\u00c6":10}},"T":{"d":"41,0r0,-5r36,-4r0,-191r-55,0r-13,50r-7,0r0,-60r180,0r0,60r-7,0r-16,-50r-53,0r0,191r37,4r0,5r-102,0","w":183,"k":{"+":18,"*":-7,"&":7,"_":28,"g":9,"Y":-10,"C":4,"G":4,"O":4,"Q":4,"\u00c7":4,"\u00d2":4,"\u00d6":4,"\u00d5":4,"\u00d3":4,"\u00d4":4,"\u00d8":4,"J":14,"T":-4,"-":14,"c":9,"d":9,"e":9,"o":9,"q":9,"\u00e7":9,"\u00e9":9,"\u00e8":9,"\u00ea":9,"\u00eb":9,"\u00f3":9,"\u00f2":9,"\u00f4":9,"\u00f6":9,"\u00f5":9,"\u00f8":9,"\u00f0":9,"A":22,"\u00c1":22,"\u00c2":22,"\u00c4":22,"\u00c5":22,"\u00c0":22,"\u00c3":22,"\u00c6":32,"\/":21,"a":9,"\u00e1":9,"\u00e0":9,"\u00e2":9,"\u00e4":9,"\u00e3":9,"\u00e5":9,",":22,".":22,"\u00e6":10,"s":6}},"U":{"d":"120,3v-40,0,-87,-16,-87,-77r0,-127r-29,-4r0,-5r95,0r0,5r-36,4r0,125v0,52,28,68,58,68v82,0,58,-112,61,-189r-35,-8r0,-5r77,0r0,5r-28,8r0,115v0,62,-39,85,-76,85","w":228,"k":{"_":22,"M":7,"v":7,"w":7,"y":7,"\u00ff":7,"\u00fd":7,"A":18,"\u00c1":18,"\u00c2":18,"\u00c4":18,"\u00c5":18,"\u00c0":18,"\u00c3":18,"\u00c6":36,"\/":19}},"V":{"d":"92,0r-75,-203v-6,-3,-18,1,-18,-7r80,0r0,4r-29,5r60,174r2,0r61,-170r-35,-9r0,-4r68,0v-1,10,-15,7,-21,12r-73,198r-20,0","w":204,"k":{"+":14,"&":12,"_":54,"x":18,"r":9,"p":12,"n":9,"m":9,"i":9,"g":24,"f":12,"Y":-9," ":7,"C":12,"G":12,"O":12,"Q":12,"\u00c7":12,"\u00d2":12,"\u00d6":12,"\u00d5":12,"\u00d3":12,"\u00d4":12,"\u00d8":12,"J":4,"-":26,"u":18,"\u00fa":18,"\u00f9":18,"\u00fb":18,"\u00fc":18,"c":18,"d":18,"e":18,"o":18,"q":18,"\u00e7":18,"\u00e9":18,"\u00e8":18,"\u00ea":18,"\u00eb":18,"\u00f3":18,"\u00f2":18,"\u00f4":18,"\u00f6":18,"\u00f5":18,"\u00f8":18,"\u00f0":18,"v":12,"w":12,"y":12,"\u00ff":12,"\u00fd":12,"t":18,"A":32,"\u00c1":32,"\u00c2":32,"\u00c4":32,"\u00c5":32,"\u00c0":32,"\u00c3":32,"\u00c6":56,"\/":29,"a":21,"\u00e1":21,"\u00e0":21,"\u00e2":21,"\u00e4":21,"\u00e3":21,"\u00e5":21,",":32,".":32,"s":24,"z":21}},"W":{"d":"81,0r-65,-203v-5,-3,-17,1,-17,-7r80,0r0,4r-30,5r51,171r53,-180r20,0r58,183r55,-170r-35,-9r0,-4r67,0v-1,10,-13,7,-19,12r-67,198r-21,0r-55,-175r-2,0r-52,175r-21,0","w":316,"k":{"+":14,"&":12,"_":54,"x":18,"r":9,"p":12,"n":9,"m":9,"i":9,"g":24,"f":12,"Y":-9," ":7,"C":12,"G":12,"O":12,"Q":12,"\u00c7":12,"\u00d2":12,"\u00d6":12,"\u00d5":12,"\u00d3":12,"\u00d4":12,"\u00d8":12,"J":4,"-":26,"u":18,"\u00fa":18,"\u00f9":18,"\u00fb":18,"\u00fc":18,"c":18,"d":18,"e":18,"o":18,"q":18,"\u00e7":18,"\u00e9":18,"\u00e8":18,"\u00ea":18,"\u00eb":18,"\u00f3":18,"\u00f2":18,"\u00f4":18,"\u00f6":18,"\u00f5":18,"\u00f8":18,"\u00f0":18,"v":12,"w":12,"y":12,"\u00ff":12,"\u00fd":12,"t":18,"A":32,"\u00c1":32,"\u00c2":32,"\u00c4":32,"\u00c5":32,"\u00c0":32,"\u00c3":32,"\u00c6":56,"\/":29,"a":21,"\u00e1":21,"\u00e0":21,"\u00e2":21,"\u00e4":21,"\u00e3":21,"\u00e5":21,",":32,".":32,"s":24,"z":21}},"X":{"d":"118,0r0,-5r27,-5r-49,-81r-53,78r30,8r0,5r-72,0v1,-12,18,-8,25,-13r65,-87r-62,-100r-25,-4r0,-6r86,0r0,5r-28,6r46,75r48,-72v-7,-5,-24,-1,-24,-14r62,0v0,11,-15,8,-22,13r-59,81r67,106r24,5r0,5r-86,0","w":205,"k":{"-":23,"\u00f0":11,"\u00fd":16,"\u00ff":16,"\u00fc":11,"\u00fb":11,"\u00f9":11,"\u00fa":11,"\u00f8":11,"\u00f5":11,"\u00f6":11,"\u00f4":11,"\u00f2":11,"\u00f3":11,"\u00eb":11,"\u00ea":11,"\u00e8":11,"\u00e9":11,"\u00e7":11,"\u00e5":5,"\u00e3":5,"\u00e4":5,"\u00e2":5,"\u00e0":5,"\u00e1":5,"y":16,"w":16,"v":16,"u":11,"t":10,"q":11,"o":11,"j":7,"e":11,"d":11,"c":11,"a":5,"\u00d8":9,"\u00d4":9,"\u00d3":9,"\u00d5":9,"\u00d6":9,"\u00d2":9,"\u00c7":9,"Q":9,"O":9,"G":9,"C":9,"p":9}},"Y":{"d":"49,0r0,-5r36,-4r0,-77r-68,-116v-5,-3,-16,1,-15,-8r76,0r0,5r-28,5r60,102r49,-98r-34,-9r0,-5r69,0v1,10,-12,7,-18,11r-62,113r0,77r36,4r0,5r-101,0","w":195,"k":{"\/":29,"-":26,".":32,"\u00f0":18,"\u00fd":12,"\u00ff":12,"\u00fc":18,"\u00fb":18,"\u00f9":18,"\u00fa":18,"\u00f8":18,"\u00f5":18,"\u00f6":18,"\u00f4":18,"\u00f2":18,"\u00f3":18,",":32,"\u00eb":18,"\u00ea":18,"\u00e8":18,"\u00e9":18,"\u00e7":18,"\u00e5":21,"\u00e3":21,"\u00e4":21,"\u00e2":21,"\u00e0":21,"\u00e1":21,"z":21,"y":12,"w":12,"v":12,"u":18,"t":18,"s":24,"q":18,"o":18,"e":18,"d":18,"c":18,"a":21,"\u00dd":-3,"\u00d8":12,"\u00d4":12,"\u00d3":12,"\u00d5":12,"\u00d6":12,"\u00d2":12,"\u00c7":12,"\u00c6":56,"\u00c3":32,"\u00c0":32,"\u00c5":32,"\u00c4":32,"\u00c2":32,"\u00c1":32,"W":-3,"V":-3,"T":-7,"S":4,"Q":12,"O":12,"J":4,"G":12,"C":12,"A":32,"+":14,"&":15,"_":39,"x":14,"r":12,"p":14,"n":12,"m":12,"i":9,"g":17,"f":15,"Y":-9,"M":6," ":7}},"Z":{"d":"6,0r-2,-7r117,-193r-93,0r-12,50r-8,0r0,-60r148,0r3,4r-122,196r102,0r16,-47r7,1r-5,56r-151,0","w":167,"k":{"Y":-7,"-":14}},"\u00c1":{"d":"122,0r0,-4r30,-5r-24,-74r-70,0r-27,70r35,9r0,4r-67,0v1,-10,14,-7,20,-12r76,-198r21,0r69,203v6,3,18,-1,18,7r-81,0xm96,-182v-14,27,-23,60,-35,89r64,0xm155,-269r10,23r-70,25r-2,-5","w":201,"k":{"*":26,"&":5,"p":7,"Y":14," ":7}},"\u00c2":{"d":"122,0r0,-4r30,-5r-24,-74r-70,0r-27,70r35,9r0,4r-67,0v1,-10,14,-7,20,-12r76,-198r21,0r69,203v6,3,18,-1,18,7r-81,0xm96,-182v-14,27,-23,60,-35,89r64,0xm148,-223r-45,-21r-44,20r-3,-4r48,-37r48,37","w":201,"k":{"*":26,"&":5,"p":7,"Y":14," ":7}},"\u00c4":{"d":"122,0r0,-4r30,-5r-24,-74r-70,0r-27,70r35,9r0,4r-67,0v1,-10,14,-7,20,-12r76,-198r21,0r69,203v6,3,18,-1,18,7r-81,0xm96,-182v-14,27,-23,60,-35,89r64,0xm58,-244v0,-9,7,-16,16,-16v9,0,15,7,15,16v0,9,-6,16,-15,16v-9,0,-16,-7,-16,-16xm122,-244v0,-9,7,-16,16,-16v9,0,15,7,15,16v0,9,-6,16,-15,16v-9,0,-16,-7,-16,-16","w":201,"k":{"*":26,"&":5,"p":7,"Y":14," ":7}},"\u00c5":{"d":"122,0r0,-4r30,-5r-24,-74r-70,0r-27,70r35,9r0,4r-67,0v1,-10,14,-7,20,-12r76,-198r21,0r69,203v6,3,18,-1,18,7r-81,0xm96,-182v-14,27,-23,60,-35,89r64,0xm131,-249v0,34,-52,36,-53,0v0,-15,10,-26,26,-26v16,0,27,12,27,26xm104,-229v12,0,21,-7,21,-20v0,-12,-9,-20,-21,-20v-13,0,-19,8,-19,20v0,14,10,20,19,20","w":201,"k":{"*":26,"&":5,"p":7,"Y":14," ":7}},"\u00c0":{"d":"122,0r0,-4r30,-5r-24,-74r-70,0r-27,70r35,9r0,4r-67,0v1,-10,14,-7,20,-12r76,-198r21,0r69,203v6,3,18,-1,18,7r-81,0xm96,-182v-14,27,-23,60,-35,89r64,0xm48,-246r12,-22r61,42r-3,5","w":201,"k":{"*":26,"&":5,"p":7,"Y":14," ":7}},"\u00c3":{"d":"122,0r0,-4r30,-5r-24,-74r-70,0r-27,70r35,9r0,4r-67,0v1,-10,14,-7,20,-12r76,-198r21,0r69,203v6,3,18,-1,18,7r-81,0xm96,-182v-14,27,-23,60,-35,89r64,0xm121,-230v-23,0,-40,-17,-59,0v-7,-8,10,-26,28,-26v24,0,38,16,59,2v5,9,-10,24,-28,24","w":201,"k":{"*":26,"&":5,"p":7,"Y":14," ":7}},"\u00c6":{"d":"107,0r0,-5r35,-4r0,-74r-67,0r-40,71r31,8r0,4r-67,0v2,-10,16,-8,23,-13r112,-197r133,0r0,48r-8,0r-11,-39r-77,0r0,89r81,-1r0,12r-81,-1r0,92r80,0r17,-41r6,2r-6,49r-161,0xm139,-198r-59,105r62,0r0,-105r-3,0","w":279},"\u00c7":{"d":"190,-146r-8,0r-14,-46v-59,-33,-124,4,-124,85v0,98,102,131,142,68r4,0r0,28v-5,2,-24,14,-61,14r-6,16v21,3,31,15,31,29v0,25,-42,38,-65,24r5,-9v12,11,42,6,42,-13v0,-12,-9,-23,-28,-27r13,-20v-65,-3,-110,-36,-110,-107v0,-62,49,-109,117,-109v30,0,51,8,62,12r0,55","w":198},"\u00b8":{"d":"84,48v0,25,-43,38,-66,24r5,-9v13,10,43,6,43,-13v0,-12,-9,-23,-28,-27v8,-8,7,-25,23,-26r-8,22v21,3,31,15,31,29","w":101},"\u00c9":{"d":"152,-101r-80,-1r0,92r80,0r16,-41r7,2r-6,49r-162,0r0,-5r35,-4r0,-192r-35,-4r0,-5r161,0r0,48r-9,0r-10,-39r-77,0r0,89r80,-1r0,12xm134,-269r10,23r-70,25r-2,-5","w":180},"\u00ca":{"d":"152,-101r-80,-1r0,92r80,0r16,-41r7,2r-6,49r-162,0r0,-5r35,-4r0,-192r-35,-4r0,-5r161,0r0,48r-9,0r-10,-39r-77,0r0,89r80,-1r0,12xm156,-223r-46,-21r-43,20r-4,-3r48,-37r48,36","w":180},"\u00cb":{"d":"152,-101r-80,-1r0,92r80,0r16,-41r7,2r-6,49r-162,0r0,-5r35,-4r0,-192r-35,-4r0,-5r161,0r0,48r-9,0r-10,-39r-77,0r0,89r80,-1r0,12xm64,-244v0,-9,7,-16,16,-16v9,0,15,7,15,16v0,9,-6,15,-15,15v-9,0,-16,-6,-16,-15xm128,-244v0,-9,7,-16,16,-16v9,0,15,7,15,16v0,9,-6,15,-15,15v-9,0,-16,-6,-16,-15","w":180},"\u00c8":{"d":"152,-101r-80,-1r0,92r80,0r16,-41r7,2r-6,49r-162,0r0,-5r35,-4r0,-192r-35,-4r0,-5r161,0r0,48r-9,0r-10,-39r-77,0r0,89r80,-1r0,12xm56,-246r12,-22r61,42r-3,5","w":180},"\u00cd":{"d":"12,0r0,-5r35,-4r0,-192r-35,-4r0,-5r101,0r0,5r-37,4r0,192r37,4r0,5r-101,0xm100,-269r11,23r-71,25r-2,-5","w":124},"\u00ce":{"d":"12,0r0,-5r35,-4r0,-192r-35,-4r0,-5r101,0r0,5r-37,4r0,192r37,4r0,5r-101,0xm111,-223r-45,-21r-44,20r-3,-3r48,-37r47,36","w":124},"\u00cf":{"d":"12,0r0,-5r35,-4r0,-192r-35,-4r0,-5r101,0r0,5r-37,4r0,192r37,4r0,5r-101,0xm17,-244v0,-9,6,-16,15,-16v9,0,16,7,16,16v0,9,-7,15,-16,15v-9,0,-15,-6,-15,-15xm81,-244v0,-9,6,-16,15,-16v9,0,16,7,16,16v0,9,-7,15,-16,15v-9,0,-15,-6,-15,-15","w":124},"\u00cc":{"d":"12,0r0,-5r35,-4r0,-192r-35,-4r0,-5r101,0r0,5r-37,4r0,192r37,4r0,5r-101,0xm16,-246r12,-22r60,42r-2,5","w":124},"\u00d1":{"d":"8,0r0,-5r28,-8r0,-182r-29,-10r0,-5r50,0r123,155r0,-142r-31,-8r0,-5r73,0r0,5r-28,8r0,200r-6,0r-139,-175r0,159r32,8r0,5r-73,0xm136,-230v-23,0,-40,-17,-59,0v-7,-8,10,-26,28,-26v24,0,39,16,59,2v5,9,-10,24,-28,24","w":226},"\u00d2":{"d":"221,-113v0,62,-40,116,-107,116v-62,0,-103,-42,-103,-102v0,-67,45,-114,109,-114v63,0,101,42,101,100xm189,-106v0,-53,-22,-98,-72,-98v-51,0,-73,42,-73,97v0,55,25,101,71,101v55,0,74,-50,74,-100xm66,-246r12,-22r61,42r-3,5","w":232,"k":{"_":22,"Y":12,"X":9,"M":7,"C":-4,"G":-4,"O":-4,"Q":-4,"\u00c7":-4,"\u00d2":-4,"\u00d6":-4,"\u00d5":-4,"\u00d3":-4,"\u00d4":-4,"\u00d8":-4,"T":4,"-":-9,"V":12,"W":12,"\u00dd":12,"\\":11,"U":6,"\u00da":6,"\u00db":6,"\u00d9":6,"\u00dc":6,"'":5,"\"":5,"A":16,"\u00c1":16,"\u00c2":16,"\u00c4":16,"\u00c5":16,"\u00c0":16,"\u00c3":16,"\u00c6":24,"\/":7,",":18,".":18}},"\u00d6":{"d":"221,-113v0,62,-40,116,-107,116v-62,0,-103,-42,-103,-102v0,-67,45,-114,109,-114v63,0,101,42,101,100xm189,-106v0,-53,-22,-98,-72,-98v-51,0,-73,42,-73,97v0,55,25,101,71,101v55,0,74,-50,74,-100xm69,-244v0,-9,7,-16,16,-16v9,0,15,7,15,16v0,9,-6,16,-15,16v-9,0,-16,-7,-16,-16xm133,-244v0,-9,7,-16,16,-16v9,0,15,7,15,16v0,9,-6,16,-15,16v-9,0,-16,-7,-16,-16","w":232,"k":{"_":22,"Y":12,"X":9,"M":7,"C":-4,"G":-4,"O":-4,"Q":-4,"\u00c7":-4,"\u00d2":-4,"\u00d6":-4,"\u00d5":-4,"\u00d3":-4,"\u00d4":-4,"\u00d8":-4,"T":4,"-":-9,"V":12,"W":12,"\u00dd":12,"\\":11,"U":6,"\u00da":6,"\u00db":6,"\u00d9":6,"\u00dc":6,"'":5,"\"":5,"A":16,"\u00c1":16,"\u00c2":16,"\u00c4":16,"\u00c5":16,"\u00c0":16,"\u00c3":16,"\u00c6":24,"\/":7,",":18,".":18}},"\u00d5":{"d":"221,-113v0,62,-40,116,-107,116v-62,0,-103,-42,-103,-102v0,-67,45,-114,109,-114v63,0,101,42,101,100xm189,-106v0,-53,-22,-98,-72,-98v-51,0,-73,42,-73,97v0,55,25,101,71,101v55,0,74,-50,74,-100xm136,-229v-23,0,-40,-19,-59,-1v-7,-8,10,-26,28,-26v24,1,38,18,59,3v5,8,-11,24,-28,24","w":232,"k":{"_":22,"Y":12,"X":9,"M":7,"C":-4,"G":-4,"O":-4,"Q":-4,"\u00c7":-4,"\u00d2":-4,"\u00d6":-4,"\u00d5":-4,"\u00d3":-4,"\u00d4":-4,"\u00d8":-4,"T":4,"-":-9,"V":12,"W":12,"\u00dd":12,"\\":11,"U":6,"\u00da":6,"\u00db":6,"\u00d9":6,"\u00dc":6,"'":5,"\"":5,"A":16,"\u00c1":16,"\u00c2":16,"\u00c4":16,"\u00c5":16,"\u00c0":16,"\u00c3":16,"\u00c6":24,"\/":7,",":18,".":18}},"\u00d3":{"d":"221,-113v0,62,-40,116,-107,116v-62,0,-103,-42,-103,-102v0,-67,45,-114,109,-114v63,0,101,42,101,100xm189,-106v0,-53,-22,-98,-72,-98v-51,0,-73,42,-73,97v0,55,25,101,71,101v55,0,74,-50,74,-100xm161,-269r10,23r-71,25r-2,-5","w":232,"k":{"_":22,"Y":12,"X":9,"M":7,"C":-4,"G":-4,"O":-4,"Q":-4,"\u00c7":-4,"\u00d2":-4,"\u00d6":-4,"\u00d5":-4,"\u00d3":-4,"\u00d4":-4,"\u00d8":-4,"T":4,"-":-9,"V":12,"W":12,"\u00dd":12,"\\":11,"U":6,"\u00da":6,"\u00db":6,"\u00d9":6,"\u00dc":6,"'":5,"\"":5,"A":16,"\u00c1":16,"\u00c2":16,"\u00c4":16,"\u00c5":16,"\u00c0":16,"\u00c3":16,"\u00c6":24,"\/":7,",":18,".":18}},"\u00d4":{"d":"221,-113v0,62,-40,116,-107,116v-62,0,-103,-42,-103,-102v0,-67,45,-114,109,-114v63,0,101,42,101,100xm189,-106v0,-53,-22,-98,-72,-98v-51,0,-73,42,-73,97v0,55,25,101,71,101v55,0,74,-50,74,-100xm168,-223r-46,-21r-43,20r-3,-4r47,-37r48,37","w":232,"k":{"_":22,"Y":12,"X":9,"M":7,"C":-4,"G":-4,"O":-4,"Q":-4,"\u00c7":-4,"\u00d2":-4,"\u00d6":-4,"\u00d5":-4,"\u00d3":-4,"\u00d4":-4,"\u00d8":-4,"T":4,"-":-9,"V":12,"W":12,"\u00dd":12,"\\":11,"U":6,"\u00da":6,"\u00db":6,"\u00d9":6,"\u00dc":6,"'":5,"\"":5,"A":16,"\u00c1":16,"\u00c2":16,"\u00c4":16,"\u00c5":16,"\u00c0":16,"\u00c3":16,"\u00c6":24,"\/":7,",":18,".":18}},"\u00d8":{"d":"194,-184v59,63,16,187,-80,187v-28,0,-52,-8,-70,-23v-11,8,-12,25,-33,23r27,-30v-60,-63,-12,-186,82,-186v28,0,51,8,68,22v11,-8,12,-25,33,-22xm115,-6v76,0,87,-99,62,-159r-117,127v12,19,31,32,55,32xm117,-204v-73,0,-87,99,-61,158r116,-128v-12,-18,-29,-30,-55,-30","w":232,"k":{"_":22,"Y":12,"X":9,"M":7,"C":-4,"G":-4,"O":-4,"Q":-4,"\u00c7":-4,"\u00d2":-4,"\u00d6":-4,"\u00d5":-4,"\u00d3":-4,"\u00d4":-4,"\u00d8":-4,"T":4,"-":-9,"V":12,"W":12,"\u00dd":12,"\\":11,"U":6,"\u00da":6,"\u00db":6,"\u00d9":6,"\u00dc":6,"'":5,"\"":5,"A":16,"\u00c1":16,"\u00c2":16,"\u00c4":16,"\u00c5":16,"\u00c0":16,"\u00c3":16,"\u00c6":24,"\/":7,",":18,".":18}},"\u00da":{"d":"120,3v-40,0,-87,-16,-87,-77r0,-127r-29,-4r0,-5r95,0r0,5r-36,4r0,125v0,52,28,68,58,68v82,0,58,-112,61,-189r-35,-8r0,-5r77,0r0,5r-28,8r0,115v0,62,-39,85,-76,85xm168,-269r11,23r-71,25r-2,-5","w":228,"k":{"_":22,"M":7,"v":7,"w":7,"y":7,"\u00ff":7,"\u00fd":7,"A":18,"\u00c1":18,"\u00c2":18,"\u00c4":18,"\u00c5":18,"\u00c0":18,"\u00c3":18,"\u00c6":36,"\/":19}},"\u00db":{"d":"120,3v-40,0,-87,-16,-87,-77r0,-127r-29,-4r0,-5r95,0r0,5r-36,4r0,125v0,52,28,68,58,68v82,0,58,-112,61,-189r-35,-8r0,-5r77,0r0,5r-28,8r0,115v0,62,-39,85,-76,85xm169,-223r-46,-21r-43,20r-4,-3r48,-37r48,36","w":228,"k":{"_":22,"M":7,"v":7,"w":7,"y":7,"\u00ff":7,"\u00fd":7,"A":18,"\u00c1":18,"\u00c2":18,"\u00c4":18,"\u00c5":18,"\u00c0":18,"\u00c3":18,"\u00c6":36,"\/":19}},"\u00d9":{"d":"120,3v-40,0,-87,-16,-87,-77r0,-127r-29,-4r0,-5r95,0r0,5r-36,4r0,125v0,52,28,68,58,68v82,0,58,-112,61,-189r-35,-8r0,-5r77,0r0,5r-28,8r0,115v0,62,-39,85,-76,85xm66,-246r11,-22r61,42r-2,5","w":228,"k":{"_":22,"M":7,"v":7,"w":7,"y":7,"\u00ff":7,"\u00fd":7,"A":18,"\u00c1":18,"\u00c2":18,"\u00c4":18,"\u00c5":18,"\u00c0":18,"\u00c3":18,"\u00c6":36,"\/":19}},"\u00dc":{"d":"120,3v-40,0,-87,-16,-87,-77r0,-127r-29,-4r0,-5r95,0r0,5r-36,4r0,125v0,52,28,68,58,68v82,0,58,-112,61,-189r-35,-8r0,-5r77,0r0,5r-28,8r0,115v0,62,-39,85,-76,85xm72,-244v0,-9,6,-16,15,-16v9,0,16,7,16,16v0,9,-7,16,-16,16v-9,0,-15,-7,-15,-16xm136,-244v0,-9,7,-16,16,-16v9,0,15,7,15,16v0,9,-6,16,-15,16v-9,0,-16,-7,-16,-16","w":228,"k":{"_":22,"M":7,"v":7,"w":7,"y":7,"\u00ff":7,"\u00fd":7,"A":18,"\u00c1":18,"\u00c2":18,"\u00c4":18,"\u00c5":18,"\u00c0":18,"\u00c3":18,"\u00c6":36,"\/":19}},"\u00dd":{"d":"49,0r0,-5r36,-4r0,-77r-68,-116v-5,-3,-16,1,-15,-8r76,0r0,5r-28,5r60,102r49,-98r-34,-9r0,-5r69,0v1,10,-12,7,-18,11r-62,113r0,77r36,4r0,5r-101,0xm148,-269r10,23r-70,25r-2,-5","w":195,"k":{"+":14,"&":12,"_":54,"x":18,"r":9,"p":12,"n":9,"m":9,"i":9,"g":24,"f":12,"Y":-9," ":7,"C":12,"G":12,"O":12,"Q":12,"\u00c7":12,"\u00d2":12,"\u00d6":12,"\u00d5":12,"\u00d3":12,"\u00d4":12,"\u00d8":12,"J":4,"-":26,"u":18,"\u00fa":18,"\u00f9":18,"\u00fb":18,"\u00fc":18,"c":18,"d":18,"e":18,"o":18,"q":18,"\u00e7":18,"\u00e9":18,"\u00e8":18,"\u00ea":18,"\u00eb":18,"\u00f3":18,"\u00f2":18,"\u00f4":18,"\u00f6":18,"\u00f5":18,"\u00f8":18,"\u00f0":18,"v":12,"w":12,"y":12,"\u00ff":12,"\u00fd":12,"t":18,"A":32,"\u00c1":32,"\u00c2":32,"\u00c4":32,"\u00c5":32,"\u00c0":32,"\u00c3":32,"\u00c6":56,"\/":29,"a":21,"\u00e1":21,"\u00e0":21,"\u00e2":21,"\u00e4":21,"\u00e3":21,"\u00e5":21,",":32,".":32,"s":24,"z":21}},"\u00de":{"d":"12,0r0,-5r35,-4r0,-192r-35,-4r0,-5r101,0r0,5r-37,4v1,8,-2,21,1,27v57,-3,102,5,102,61v0,42,-45,66,-103,62r0,42r37,4r0,5r-101,0xm149,-111v0,-40,-28,-58,-73,-53r0,104v44,3,73,-12,73,-51","w":180,"k":{"\u00dd":8,"\u00d8":-6,"\u00d4":-6,"\u00d3":-6,"\u00d5":-6,"\u00d6":-6,"\u00d2":-6,"\u00c7":-6,"\u00c6":26,"\u00c3":22,"\u00c0":22,"\u00c5":22,"\u00c4":22,"\u00c2":22,"\u00c1":22,"Y":8,"W":8,"V":8,"Q":-6,"O":-6,"G":-6,"C":-6,"A":22,"X":18}},"\u00d0":{"d":"12,-103r0,-11r30,0r0,-87r-35,-4r0,-5v107,1,217,-18,217,100v0,73,-52,110,-122,110r-95,0r0,-5r35,-4r0,-94r-30,0xm114,-103r-42,0r0,93v76,4,118,-10,120,-95v1,-70,-40,-101,-120,-95r0,86r42,0r0,11","w":235},"a":{"d":"26,-108r-6,0r0,-45v35,-18,107,-22,107,38r0,105r26,6r0,4r-46,0r-5,-21v-17,28,-94,38,-94,-18v0,-33,42,-56,94,-51v3,-33,-2,-67,-30,-67v-10,0,-22,4,-34,13xm101,-25r1,-56v-37,-3,-70,5,-69,36v2,41,43,37,68,20","k":{"-":5,"u":7,"\u00fa":7,"\u00f9":7,"\u00fb":7,"\u00fc":7,"v":7,"w":7,"y":7,"\u00ff":7,"\u00fd":7,"'":10,"\"":10}},"b":{"d":"25,-13r0,-226r-30,0r0,-4v18,-4,32,-12,56,-10r0,109v44,-41,110,-20,110,59v0,72,-81,113,-136,72xm131,-78v0,-58,-35,-86,-80,-61r0,121v9,6,20,11,35,11v36,0,45,-39,45,-71","w":168,"k":{"_":18,"x":5,"-":-7,"c":-4,"d":-4,"e":-4,"o":-4,"q":-4,"\u00e7":-4,"\u00e9":-4,"\u00e8":-4,"\u00ea":-4,"\u00eb":-4,"\u00f3":-4,"\u00f2":-4,"\u00f4":-4,"\u00f6":-4,"\u00f5":-4,"\u00f8":-4,"\u00f0":-4,"v":4,"w":4,"y":4,"\u00ff":4,"\u00fd":4,"'":5,"\"":5,",":7,".":7}},"c":{"d":"131,-103r-11,-38v-40,-33,-85,-16,-86,57v-1,72,60,88,103,54r4,7v-8,11,-32,26,-58,26v-50,0,-75,-31,-75,-81v0,-71,72,-110,130,-73r0,48r-7,0","w":146,"k":{"\"":-10,"'":-10}},"d":{"d":"123,0r-5,-19v-39,40,-111,28,-110,-56v1,-68,47,-102,109,-87r0,-77r-30,0r0,-4v18,-4,32,-12,56,-10r0,243r26,6r0,4r-46,0xm35,-84v0,63,40,83,82,61r0,-122v-39,-31,-82,0,-82,61","w":172},"e":{"d":"34,-87v-3,67,58,92,103,57r4,7v-8,11,-32,26,-58,26v-50,0,-75,-31,-75,-81v0,-49,27,-87,71,-87v44,0,62,30,63,78r-108,0xm77,-157v-19,0,-38,21,-42,61r77,0v1,-33,-10,-61,-35,-61","w":150},"f":{"d":"5,0r0,-4r29,-7r0,-142r-29,0r0,-3r29,-6v-9,-62,28,-100,84,-90v-3,9,-1,23,-7,28r-39,-17v-19,15,-12,49,-13,79r36,0r0,9r-36,0r0,141r34,8r0,4r-88,0","w":101,"k":{"*":-9,"\u00ef":-16,"\u00ec":-18,")":-15,"'":-14,"\"":-14,",":9,".":9,"]":-18}},"g":{"d":"123,-145v29,42,-10,91,-61,81r-18,23v44,3,116,15,108,52v0,31,-31,66,-86,66v-41,0,-63,-22,-63,-46v0,-18,20,-35,43,-46r-27,-3r0,-14r37,-34v-59,-12,-45,-100,19,-99v21,0,35,6,45,16r42,-13r0,17r-39,0xm52,-14v-34,22,-38,78,22,79v31,0,58,-22,58,-43v6,-24,-48,-34,-80,-36xm76,-72v19,0,28,-15,28,-39v0,-34,-13,-46,-31,-46v-17,0,-28,16,-28,43v0,27,11,42,31,42","w":162,"k":{"\u00f0":6,"\u00f8":6,"\u00f5":6,"\u00f6":6,"\u00f4":6,"\u00f2":6,"\u00f3":6,"\u00eb":6,"\u00ea":6,"\u00e8":6,"\u00e9":6,"\u00e7":6,"q":6,"o":6,"e":6,"d":6,"c":6,"_":-9}},"h":{"d":"4,0r0,-4r29,-7r0,-228r-31,0r0,-4v18,-4,33,-12,57,-10r0,118v14,-14,35,-30,62,-30v65,2,40,93,45,154r29,7r0,4r-84,0r0,-4r29,-7v-5,-50,18,-138,-35,-136v-19,0,-37,10,-46,17r0,119r29,7r0,4r-84,0","w":197,"k":{"-":12,"v":7,"w":7,"y":7,"\u00ff":7,"\u00fd":7,"t":6,"'":11,"\"":11}},"i":{"d":"7,0r0,-4r29,-5r0,-139r-31,0r0,-4v19,-4,33,-13,56,-13r0,156r30,5r0,4r-84,0xm30,-223v0,-10,9,-18,19,-18v10,0,18,8,18,18v0,10,-8,19,-18,19v-10,0,-19,-9,-19,-19","w":95},"j":{"d":"14,75r-3,-4v40,-31,15,-150,22,-219r-30,0r0,-4v19,-4,33,-13,56,-13r0,166v0,31,-20,57,-45,74xm47,-204v-10,0,-19,-9,-19,-19v0,-10,9,-18,19,-18v10,0,18,8,18,18v0,10,-8,19,-18,19","w":85},"k":{"d":"4,0r0,-4r29,-7r0,-228r-31,0r0,-4v18,-4,33,-12,57,-10r0,242r29,7r0,4r-84,0xm125,0r-56,-87r58,-62r-29,-9r0,-4r66,0v-2,11,-19,7,-25,14r-48,50r57,86r26,8r0,4r-49,0","w":171,"k":{"-":17}},"l":{"d":"4,0r0,-4r29,-7r0,-228r-31,0r0,-4v18,-4,33,-12,57,-10r0,242r29,7r0,4r-84,0","w":88,"k":{"\u00b7":8}},"m":{"d":"111,0r0,-4r29,-7v-5,-50,18,-138,-35,-136v-19,0,-35,10,-44,17r0,119r30,7r0,4r-84,0r0,-4r29,-7r0,-137r-31,0r0,-4v18,-4,30,-14,53,-13r3,30v19,-29,89,-47,101,0v14,-14,32,-30,59,-30v65,2,40,93,45,154r30,7r0,4r-85,0r0,-4r30,-7v-4,-51,18,-138,-36,-136v-18,0,-33,9,-42,16v7,35,1,80,3,120r29,7r0,4r-84,0","w":295,"k":{"-":12,"v":7,"w":7,"y":7,"\u00ff":7,"\u00fd":7,"t":6,"'":11,"\"":11}},"n":{"d":"7,0r0,-4r29,-7r0,-137r-31,0r0,-4v18,-4,30,-14,53,-13r3,30v14,-14,35,-30,62,-30v66,1,42,92,46,154r29,7r0,4r-84,0r0,-4r29,-7v-5,-50,18,-138,-35,-136v-19,0,-38,10,-47,17r0,119r30,7r0,4r-84,0","w":198,"k":{"-":12,"v":7,"w":7,"y":7,"\u00ff":7,"\u00fd":7,"t":6,"'":11,"\"":11}},"o":{"d":"154,-81v0,44,-33,84,-75,84v-44,0,-71,-24,-71,-82v0,-44,33,-86,74,-86v48,0,72,27,72,84xm125,-77v0,-30,-6,-80,-46,-80v-36,0,-43,39,-43,72v0,34,9,79,48,79v36,0,41,-36,41,-71","w":162,"k":{"_":18,"x":5,"-":-7,"c":-4,"d":-4,"e":-4,"o":-4,"q":-4,"\u00e7":-4,"\u00e9":-4,"\u00e8":-4,"\u00ea":-4,"\u00eb":-4,"\u00f3":-4,"\u00f2":-4,"\u00f4":-4,"\u00f6":-4,"\u00f5":-4,"\u00f8":-4,"\u00f0":-4,"v":4,"w":4,"y":4,"\u00ff":4,"\u00fd":4,"'":5,"\"":5,",":7,".":7}},"p":{"d":"6,75r0,-4r29,-8r0,-211r-31,0r0,-4v18,-4,30,-14,53,-13r3,21v44,-41,115,-20,110,59v-3,60,-50,100,-110,85r0,63r34,8r0,4r-88,0xm140,-78v0,-58,-35,-86,-80,-61r0,121v9,6,20,11,35,11v36,0,45,-39,45,-71","w":177,"k":{"_":18,"x":5,"-":-7,"c":-4,"d":-4,"e":-4,"o":-4,"q":-4,"\u00e7":-4,"\u00e9":-4,"\u00e8":-4,"\u00ea":-4,"\u00eb":-4,"\u00f3":-4,"\u00f2":-4,"\u00f4":-4,"\u00f6":-4,"\u00f5":-4,"\u00f8":-4,"\u00f0":-4,"v":4,"w":4,"y":4,"\u00ff":4,"\u00fd":4,"'":5,"\"":5,",":7,".":7}},"q":{"d":"83,71r34,-8r0,-81v-40,41,-109,22,-109,-57v0,-81,68,-106,134,-80r0,218r29,8r0,4r-88,0r0,-4xm35,-84v0,63,38,83,82,62r0,-122v-39,-28,-82,-1,-82,60","w":164},"r":{"d":"7,0r0,-4r29,-7r0,-137r-31,0r0,-4v18,-4,30,-14,53,-13r2,21v24,-17,41,-25,67,-19v-3,9,-4,20,-9,27v-18,-5,-36,-12,-58,-6v3,41,0,87,1,130r34,8r0,4r-88,0","w":127,"k":{"_":31,"-":14,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00e7":5,"\u00e9":5,"\u00e8":5,"\u00ea":5,"\u00eb":5,"\u00f3":5,"\u00f2":5,"\u00f4":5,"\u00f6":5,"\u00f5":5,"\u00f8":5,"\u00f0":5,"'":-8,"\"":-8,",":21,".":21}},"s":{"d":"123,-48v1,58,-75,58,-113,40r0,-44r4,0r12,35v24,14,74,14,75,-21v0,-46,-89,-14,-89,-79v0,-49,65,-58,106,-38r0,40r-5,0r-8,-30v-24,-14,-72,-18,-73,20v0,47,91,13,91,77","w":133},"t":{"d":"111,-12r1,5v-37,17,-86,16,-86,-37r0,-109r-24,0v3,-9,18,-6,25,-10r21,-41r5,0r0,42r54,0r0,9r-54,0r0,112v1,37,31,37,58,29","w":112},"u":{"d":"138,0r-6,-20v-37,40,-101,27,-101,-32r0,-96r-30,0r0,-4v19,-4,33,-13,56,-13v5,54,-19,150,34,152v15,0,25,-2,40,-10r0,-125r-30,0r0,-4v19,-4,33,-13,56,-13r0,155r26,6r0,4r-45,0","w":186},"v":{"d":"172,-162r0,4r-28,9r-53,149r-13,0r-63,-153v-6,-3,-18,0,-18,-9r76,0r0,4r-27,8r48,119r40,-118r-27,-9r0,-4r65,0","w":169,"k":{"_":39,"p":7," ":7,"-":17,"c":7,"d":7,"e":7,"o":7,"q":7,"\u00e7":7,"\u00e9":7,"\u00e8":7,"\u00ea":7,"\u00eb":7,"\u00f3":7,"\u00f2":7,"\u00f4":7,"\u00f6":7,"\u00f5":7,"\u00f8":7,"\u00f0":7,"a":4,"\u00e1":4,"\u00e0":4,"\u00e2":4,"\u00e4":4,"\u00e3":4,"\u00e5":4,",":29,".":29}},"w":{"d":"66,0r-52,-153v-5,-3,-17,0,-17,-9r76,0r0,4r-28,8v14,38,20,84,37,119r44,-131r19,0r48,131r38,-118r-27,-9r0,-4r66,0r0,4r-28,9r-50,149r-16,0r-48,-137r-47,137r-15,0","w":266,"k":{"_":39,"p":7," ":7,"-":17,"c":7,"d":7,"e":7,"o":7,"q":7,"\u00e7":7,"\u00e9":7,"\u00e8":7,"\u00ea":7,"\u00eb":7,"\u00f3":7,"\u00f2":7,"\u00f4":7,"\u00f6":7,"\u00f5":7,"\u00f8":7,"\u00f0":7,"a":4,"\u00e1":4,"\u00e0":4,"\u00e2":4,"\u00e4":4,"\u00e3":4,"\u00e5":4,",":29,".":29}},"x":{"d":"41,-14r29,10r0,4r-70,0v2,-11,18,-8,26,-13r51,-63r-52,-76v-6,-4,-20,-1,-21,-10r76,0v-1,10,-15,6,-22,10r35,56r40,-52r-26,-10r0,-4r70,0r0,4r-32,10r-47,60r55,78r25,6r0,4r-75,0v0,-9,12,-5,17,-9r-37,-59","w":178,"k":{"-":21,"\u00f0":5,"\u00f8":5,"\u00f5":5,"\u00f6":5,"\u00f4":5,"\u00f2":5,"\u00f3":5,"\u00eb":5,"\u00ea":5,"\u00e8":5,"\u00e9":5,"\u00e7":5,"q":5,"o":5,"e":5,"d":5,"c":5}},"y":{"d":"143,-148r-71,223r-22,0v7,-25,19,-43,28,-66r-63,-162v-6,-3,-18,0,-18,-9r76,0r0,4r-28,8r46,123r41,-121v-8,-5,-22,-4,-25,-14r62,0v-2,11,-18,8,-26,14","w":165,"k":{"_":39,"p":7," ":7,"-":17,"c":7,"d":7,"e":7,"o":7,"q":7,"\u00e7":7,"\u00e9":7,"\u00e8":7,"\u00ea":7,"\u00eb":7,"\u00f3":7,"\u00f2":7,"\u00f4":7,"\u00f6":7,"\u00f5":7,"\u00f8":7,"\u00f0":7,"a":4,"\u00e1":4,"\u00e0":4,"\u00e2":4,"\u00e4":4,"\u00e3":4,"\u00e5":4,",":29,".":29}},"z":{"d":"130,-52v4,13,-6,36,-6,52r-116,0r-4,-10r90,-143r-63,0r-20,33r-3,-1r4,-41r111,0r4,6r-95,147r73,0","w":135},"\u00e1":{"d":"26,-108r-6,0r0,-45v35,-18,107,-22,107,38r0,105r26,6r0,4r-46,0r-5,-21v-17,28,-94,38,-94,-18v0,-33,42,-56,94,-51v3,-33,-2,-67,-30,-67v-10,0,-22,4,-34,13xm101,-25r1,-56v-37,-3,-70,5,-69,36v2,41,43,37,68,20xm105,-250r16,20r-61,42r-3,-2","k":{"-":5,"u":7,"\u00fa":7,"\u00f9":7,"\u00fb":7,"\u00fc":7,"v":7,"w":7,"y":7,"\u00ff":7,"\u00fd":7,"'":10,"\"":10}},"\u00b4":{"d":"72,-250r16,20r-61,42r-4,-2","w":106},"\u00e0":{"d":"26,-108r-6,0r0,-45v35,-18,107,-22,107,38r0,105r26,6r0,4r-46,0r-5,-21v-17,28,-94,38,-94,-18v0,-33,42,-56,94,-51v3,-33,-2,-67,-30,-67v-10,0,-22,4,-34,13xm101,-25r1,-56v-37,-3,-70,5,-69,36v2,41,43,37,68,20xm27,-230r17,-19r48,59r-4,3","k":{"-":5,"u":7,"\u00fa":7,"\u00f9":7,"\u00fb":7,"\u00fc":7,"v":7,"w":7,"y":7,"\u00ff":7,"\u00fd":7,"'":10,"\"":10}},"`":{"d":"20,-230r16,-20r48,60r-3,2","w":106},"\u00e2":{"d":"26,-108r-6,0r0,-45v35,-18,107,-22,107,38r0,105r26,6r0,4r-46,0r-5,-21v-17,28,-94,38,-94,-18v0,-33,42,-56,94,-51v3,-33,-2,-67,-30,-67v-10,0,-22,4,-34,13xm101,-25r1,-56v-37,-3,-70,5,-69,36v2,41,43,37,68,20xm70,-240r12,0r41,45r-2,3r-48,-27r-47,27r-2,-3","k":{"-":5,"u":7,"\u00fa":7,"\u00f9":7,"\u00fb":7,"\u00fc":7,"v":7,"w":7,"y":7,"\u00ff":7,"\u00fd":7,"'":10,"\"":10}},"\u00e4":{"d":"26,-108r-6,0r0,-45v35,-18,107,-22,107,38r0,105r26,6r0,4r-46,0r-5,-21v-17,28,-94,38,-94,-18v0,-33,42,-56,94,-51v3,-33,-2,-67,-30,-67v-10,0,-22,4,-34,13xm101,-25r1,-56v-37,-3,-70,5,-69,36v2,41,43,37,68,20xm26,-220v0,-9,6,-15,15,-15v9,0,16,6,16,15v0,9,-7,16,-16,16v-9,0,-15,-7,-15,-16xm90,-220v0,-9,6,-15,15,-15v9,0,16,6,16,15v0,9,-7,16,-16,16v-9,0,-15,-7,-15,-16","k":{"-":5,"u":7,"\u00fa":7,"\u00f9":7,"\u00fb":7,"\u00fc":7,"v":7,"w":7,"y":7,"\u00ff":7,"\u00fd":7,"'":10,"\"":10}},"\u00a8":{"d":"20,-220v0,-9,7,-15,16,-15v9,0,15,6,15,15v0,9,-6,16,-15,16v-9,0,-16,-7,-16,-16xm84,-220v0,-9,7,-15,16,-15v9,0,16,6,16,15v0,9,-7,16,-16,16v-9,0,-16,-7,-16,-16","w":135},"\u00e3":{"d":"26,-108r-6,0r0,-45v35,-18,107,-22,107,38r0,105r26,6r0,4r-46,0r-5,-21v-17,28,-94,38,-94,-18v0,-33,42,-56,94,-51v3,-33,-2,-67,-30,-67v-10,0,-22,4,-34,13xm101,-25r1,-56v-37,-3,-70,5,-69,36v2,41,43,37,68,20xm90,-199v-24,0,-41,-17,-60,0v-7,-8,10,-26,28,-26v24,0,39,16,59,2v5,9,-9,24,-27,24","k":{"-":5,"u":7,"\u00fa":7,"\u00f9":7,"\u00fb":7,"\u00fc":7,"v":7,"w":7,"y":7,"\u00ff":7,"\u00fd":7,"'":10,"\"":10}},"\u00e5":{"d":"26,-108r-6,0r0,-45v35,-18,107,-22,107,38r0,105r26,6r0,4r-46,0r-5,-21v-17,28,-94,38,-94,-18v0,-33,42,-56,94,-51v3,-33,-2,-67,-30,-67v-10,0,-22,4,-34,13xm101,-25r1,-56v-37,-3,-70,5,-69,36v2,41,43,37,68,20xm100,-218v0,34,-52,36,-53,0v0,-15,10,-26,26,-26v16,0,27,12,27,26xm73,-198v12,0,21,-7,21,-20v0,-12,-9,-20,-21,-20v-13,0,-19,8,-19,20v0,14,10,20,19,20","k":{"-":5,"u":7,"\u00fa":7,"\u00f9":7,"\u00fb":7,"\u00fc":7,"v":7,"w":7,"y":7,"\u00ff":7,"\u00fd":7,"'":10,"\"":10}},"\u00af":{"d":"107,-215r-89,0r0,-10r89,0r0,10","w":125},"\u00e6":{"d":"20,-108r0,-45v27,-14,87,-22,101,13v12,-15,30,-25,52,-25v44,0,62,30,63,78r-109,0v0,72,59,90,103,57r4,7v-16,29,-99,37,-117,0v-21,25,-109,46,-109,-16v0,-33,42,-56,94,-51v3,-33,-2,-67,-30,-67v-10,0,-22,4,-34,13r-12,36r-6,0xm33,-45v3,49,54,32,78,12v-6,-12,-9,-27,-9,-48v-37,-3,-71,5,-69,36xm128,-96r78,0v1,-33,-11,-61,-36,-61v-19,0,-38,21,-42,61","w":243},"\u00e7":{"d":"131,-103r-11,-38v-40,-33,-85,-16,-86,57v-1,72,60,88,103,54r4,7v-8,11,-30,25,-55,26r-6,16v21,3,31,15,31,29v0,25,-42,38,-65,24r5,-9v12,11,42,6,42,-13v0,-12,-8,-23,-27,-27r12,-20v-46,-2,-70,-33,-70,-81v0,-71,72,-110,130,-73r0,48r-7,0","w":146},"\u00e9":{"d":"34,-87v-3,67,58,92,103,57r4,7v-8,11,-32,26,-58,26v-50,0,-75,-31,-75,-81v0,-49,27,-87,71,-87v44,0,62,30,63,78r-108,0xm77,-157v-19,0,-38,21,-42,61r77,0v1,-33,-10,-61,-35,-61xm111,-250r16,20r-61,42r-4,-2","w":150},"\u00e8":{"d":"34,-87v-3,67,58,92,103,57r4,7v-8,11,-32,26,-58,26v-50,0,-75,-31,-75,-81v0,-49,27,-87,71,-87v44,0,62,30,63,78r-108,0xm77,-157v-19,0,-38,21,-42,61r77,0v1,-33,-10,-61,-35,-61xm44,-230r16,-20r48,60r-3,2","w":150},"\u00ea":{"d":"34,-87v-3,67,58,92,103,57r4,7v-8,11,-32,26,-58,26v-50,0,-75,-31,-75,-81v0,-49,27,-87,71,-87v44,0,62,30,63,78r-108,0xm77,-157v-19,0,-38,21,-42,61r77,0v1,-33,-10,-61,-35,-61xm80,-240r11,0r42,45r-2,3r-48,-27r-47,27r-2,-3","w":150},"\u00eb":{"d":"34,-87v-3,67,58,92,103,57r4,7v-8,11,-32,26,-58,26v-50,0,-75,-31,-75,-81v0,-49,27,-87,71,-87v44,0,62,30,63,78r-108,0xm77,-157v-19,0,-38,21,-42,61r77,0v1,-33,-10,-61,-35,-61xm34,-220v0,-9,7,-15,16,-15v9,0,15,6,15,15v0,9,-6,16,-15,16v-9,0,-16,-7,-16,-16xm98,-220v0,-9,7,-15,16,-15v9,0,15,6,15,15v0,9,-6,16,-15,16v-9,0,-16,-7,-16,-16","w":150},"\u00ed":{"d":"61,-9r30,5r0,4r-84,0r0,-4r29,-5r0,-139r-31,0r0,-4v19,-4,33,-13,56,-13r0,156xm78,-250r16,20r-61,42r-3,-2","w":95},"\u00ec":{"d":"7,0r0,-4r29,-5r0,-139r-31,0r0,-4v19,-4,33,-13,56,-13r0,156r30,5r0,4r-84,0xm3,-230r16,-20r48,60r-4,2","w":95},"\u00ee":{"d":"61,-9r30,5r0,4r-84,0r0,-4r29,-5r0,-139r-31,0r0,-4v19,-4,33,-13,56,-13r0,156xm42,-240r12,0r41,45r-2,3r-48,-27r-46,27r-3,-3","w":95},"\u00ef":{"d":"7,0r0,-4r29,-5r0,-139r-31,0r0,-4v19,-4,33,-13,56,-13r0,156r30,5r0,4r-84,0xm0,-220v0,-9,7,-15,16,-15v9,0,16,6,16,15v0,9,-7,16,-16,16v-9,0,-16,-7,-16,-16xm64,-220v0,-9,7,-15,16,-15v9,0,16,6,16,15v0,9,-7,16,-16,16v-9,0,-16,-7,-16,-16","w":95},"\u00f1":{"d":"7,0r0,-4r29,-7r0,-137r-31,0r0,-4v18,-4,30,-14,53,-13r3,30v14,-14,35,-30,62,-30v66,1,42,92,46,154r29,7r0,4r-84,0r0,-4r29,-7v-5,-50,18,-138,-35,-136v-19,0,-38,10,-47,17r0,119r30,7r0,4r-84,0xm121,-199v-23,0,-40,-17,-59,0v-7,-8,10,-26,28,-26v24,0,38,16,59,2v5,9,-10,24,-28,24","w":198,"k":{"-":12,"v":7,"w":7,"y":7,"\u00ff":7,"\u00fd":7,"t":6,"'":11,"\"":11}},",":{"d":"67,-10v0,28,-20,54,-47,69r-4,-5v18,-15,44,-54,8,-64v0,-10,10,-22,21,-22v12,0,22,10,22,22","w":88,"k":{"6":3,"4":6,"2":-10,"0":3,"Y":32," ":18,"C":18,"G":18,"O":18,"Q":18,"\u00c7":18,"\u00d2":18,"\u00d6":18,"\u00d5":18,"\u00d3":18,"\u00d4":18,"\u00d8":18,"J":-12,"T":22,"V":32,"W":32,"\u00dd":32,"c":7,"d":7,"e":7,"o":7,"q":7,"\u00e7":7,"\u00e9":7,"\u00e8":7,"\u00ea":7,"\u00eb":7,"\u00f3":7,"\u00f2":7,"\u00f4":7,"\u00f6":7,"\u00f5":7,"\u00f8":7,"\u00f0":7,"v":29,"w":29,"y":29,"\u00ff":29,"\u00fd":29,"t":9,"'":38,"\"":38}},"\u00f3":{"d":"154,-81v0,44,-33,84,-75,84v-44,0,-71,-24,-71,-82v0,-44,33,-86,74,-86v48,0,72,27,72,84xm125,-77v0,-30,-6,-80,-46,-80v-36,0,-43,39,-43,72v0,34,9,79,48,79v36,0,41,-36,41,-71xm119,-250r16,20r-61,42r-3,-2","w":162,"k":{"_":18,"x":5,"-":-7,"c":-4,"d":-4,"e":-4,"o":-4,"q":-4,"\u00e7":-4,"\u00e9":-4,"\u00e8":-4,"\u00ea":-4,"\u00eb":-4,"\u00f3":-4,"\u00f2":-4,"\u00f4":-4,"\u00f6":-4,"\u00f5":-4,"\u00f8":-4,"\u00f0":-4,"v":4,"w":4,"y":4,"\u00ff":4,"\u00fd":4,"'":5,"\"":5,",":7,".":7}},"\u00f2":{"d":"154,-81v0,44,-33,84,-75,84v-44,0,-71,-24,-71,-82v0,-44,33,-86,74,-86v48,0,72,27,72,84xm125,-77v0,-30,-6,-80,-46,-80v-36,0,-43,39,-43,72v0,34,9,79,48,79v36,0,41,-36,41,-71xm35,-230r16,-20r49,60r-4,2","w":162,"k":{"_":18,"x":5,"-":-7,"c":-4,"d":-4,"e":-4,"o":-4,"q":-4,"\u00e7":-4,"\u00e9":-4,"\u00e8":-4,"\u00ea":-4,"\u00eb":-4,"\u00f3":-4,"\u00f2":-4,"\u00f4":-4,"\u00f6":-4,"\u00f5":-4,"\u00f8":-4,"\u00f0":-4,"v":4,"w":4,"y":4,"\u00ff":4,"\u00fd":4,"'":5,"\"":5,",":7,".":7}},"\u00f4":{"d":"154,-81v0,44,-33,84,-75,84v-44,0,-71,-24,-71,-82v0,-44,33,-86,74,-86v48,0,72,27,72,84xm125,-77v0,-30,-6,-80,-46,-80v-36,0,-43,39,-43,72v0,34,9,79,48,79v36,0,41,-36,41,-71xm82,-239r12,0r41,46r-2,3r-48,-27r-46,27r-3,-3","w":162,"k":{"_":18,"x":5,"-":-7,"c":-4,"d":-4,"e":-4,"o":-4,"q":-4,"\u00e7":-4,"\u00e9":-4,"\u00e8":-4,"\u00ea":-4,"\u00eb":-4,"\u00f3":-4,"\u00f2":-4,"\u00f4":-4,"\u00f6":-4,"\u00f5":-4,"\u00f8":-4,"\u00f0":-4,"v":4,"w":4,"y":4,"\u00ff":4,"\u00fd":4,"'":5,"\"":5,",":7,".":7}},"\u00f6":{"d":"154,-81v0,44,-33,84,-75,84v-44,0,-71,-24,-71,-82v0,-44,33,-86,74,-86v48,0,72,27,72,84xm125,-77v0,-30,-6,-80,-46,-80v-36,0,-43,39,-43,72v0,34,9,79,48,79v36,0,41,-36,41,-71xm35,-220v0,-9,7,-15,16,-15v9,0,15,6,15,15v0,9,-6,16,-15,16v-9,0,-16,-7,-16,-16xm99,-220v0,-9,7,-15,16,-15v9,0,15,6,15,15v0,9,-6,16,-15,16v-9,0,-16,-7,-16,-16","w":162,"k":{"_":18,"x":5,"-":-7,"c":-4,"d":-4,"e":-4,"o":-4,"q":-4,"\u00e7":-4,"\u00e9":-4,"\u00e8":-4,"\u00ea":-4,"\u00eb":-4,"\u00f3":-4,"\u00f2":-4,"\u00f4":-4,"\u00f6":-4,"\u00f5":-4,"\u00f8":-4,"\u00f0":-4,"v":4,"w":4,"y":4,"\u00ff":4,"\u00fd":4,"'":5,"\"":5,",":7,".":7}},"\u00f5":{"d":"154,-81v0,44,-33,84,-75,84v-44,0,-71,-24,-71,-82v0,-44,33,-86,74,-86v48,0,72,27,72,84xm125,-77v0,-30,-6,-80,-46,-80v-36,0,-43,39,-43,72v0,34,9,79,48,79v36,0,41,-36,41,-71xm103,-199v-23,0,-40,-17,-59,0v-7,-8,10,-26,28,-26v24,0,38,16,59,2v5,9,-10,24,-28,24","w":162,"k":{"_":18,"x":5,"-":-7,"c":-4,"d":-4,"e":-4,"o":-4,"q":-4,"\u00e7":-4,"\u00e9":-4,"\u00e8":-4,"\u00ea":-4,"\u00eb":-4,"\u00f3":-4,"\u00f2":-4,"\u00f4":-4,"\u00f6":-4,"\u00f5":-4,"\u00f8":-4,"\u00f0":-4,"v":4,"w":4,"y":4,"\u00ff":4,"\u00fd":4,"'":5,"\"":5,",":7,".":7}},"\u00f8":{"d":"136,-144v39,47,11,147,-57,147v-20,0,-36,-6,-48,-16v-7,6,-8,18,-23,16r17,-21v-38,-46,-8,-147,57,-147v21,0,36,5,48,15v7,-6,9,-17,24,-15xm84,-6v50,-2,45,-72,35,-116r-73,90v7,15,19,26,38,26xm79,-157v-50,0,-48,73,-37,117r74,-91v-7,-15,-19,-26,-37,-26","w":162,"k":{"_":18,"x":5,"-":-7,"c":-4,"d":-4,"e":-4,"o":-4,"q":-4,"\u00e7":-4,"\u00e9":-4,"\u00e8":-4,"\u00ea":-4,"\u00eb":-4,"\u00f3":-4,"\u00f2":-4,"\u00f4":-4,"\u00f6":-4,"\u00f5":-4,"\u00f8":-4,"\u00f0":-4,"v":4,"w":4,"y":4,"\u00ff":4,"\u00fd":4,"'":5,"\"":5,",":7,".":7}},"\u00df":{"d":"90,-243v-26,0,-31,25,-31,43r0,190v5,4,16,1,16,10r-70,0r0,-4r29,-7r0,-141r-29,0r0,-4r29,-6v-8,-55,20,-92,65,-92v34,0,58,22,58,50v0,32,-31,54,-44,70v24,10,70,38,70,80v-1,51,-54,69,-97,49r0,-45r4,0r13,36v23,19,55,-1,55,-30v0,-35,-36,-57,-63,-70r0,-9v13,-19,31,-43,31,-71v0,-27,-18,-49,-36,-49","w":190},"\u00fa":{"d":"138,0r-6,-20v-37,40,-101,27,-101,-32r0,-96r-30,0r0,-4v19,-4,33,-13,56,-13v5,54,-19,150,34,152v15,0,25,-2,40,-10r0,-125r-30,0r0,-4v19,-4,33,-13,56,-13r0,155r26,6r0,4r-45,0xm132,-250r17,20r-61,42r-4,-2","w":186},"\u00f9":{"d":"138,0r-6,-20v-37,40,-101,27,-101,-32r0,-96r-30,0r0,-4v19,-4,33,-13,56,-13v5,54,-19,150,34,152v15,0,25,-2,40,-10r0,-125r-30,0r0,-4v19,-4,33,-13,56,-13r0,155r26,6r0,4r-45,0xm50,-230r16,-20r48,60r-3,2","w":186},"\u00fb":{"d":"138,0r-6,-20v-37,40,-101,27,-101,-32r0,-96r-30,0r0,-4v19,-4,33,-13,56,-13v5,54,-19,150,34,152v15,0,25,-2,40,-10r0,-125r-30,0r0,-4v19,-4,33,-13,56,-13r0,155r26,6r0,4r-45,0xm95,-240r12,0r41,45r-2,3r-48,-27r-47,27r-2,-3","w":186},"\u00fc":{"d":"57,-165v5,54,-19,150,34,152v15,0,25,-2,40,-10r0,-125r-30,0r0,-4v19,-4,33,-13,56,-13r0,155r26,6r0,4r-45,0r-6,-20v-37,40,-101,27,-101,-32r0,-96r-30,0r0,-4v19,-4,33,-13,56,-13xm51,-220v0,-9,7,-15,16,-15v9,0,15,6,15,15v0,9,-6,16,-15,16v-9,0,-16,-7,-16,-16xm115,-220v0,-9,7,-15,16,-15v9,0,15,6,15,15v0,9,-6,16,-15,16v-9,0,-16,-7,-16,-16","w":186},"\u00ff":{"d":"143,-148r-71,223r-22,0v7,-25,19,-43,28,-66r-63,-162v-6,-3,-18,0,-18,-9r76,0r0,4r-28,8r46,123r41,-121v-8,-5,-22,-4,-25,-14r62,0v-2,11,-18,8,-26,14xm41,-220v0,-9,7,-15,16,-15v9,0,15,6,15,15v0,9,-6,16,-15,16v-9,0,-16,-7,-16,-16xm105,-220v0,-9,7,-15,16,-15v9,0,15,6,15,15v0,9,-6,16,-15,16v-9,0,-16,-7,-16,-16","w":165,"k":{"_":39,"p":7," ":7,"-":17,"c":7,"d":7,"e":7,"o":7,"q":7,"\u00e7":7,"\u00e9":7,"\u00e8":7,"\u00ea":7,"\u00eb":7,"\u00f3":7,"\u00f2":7,"\u00f4":7,"\u00f6":7,"\u00f5":7,"\u00f8":7,"\u00f0":7,"a":4,"\u00e1":4,"\u00e0":4,"\u00e2":4,"\u00e4":4,"\u00e3":4,"\u00e5":4,",":29,".":29}},"\u00fd":{"d":"143,-148r-71,223r-22,0v7,-25,19,-43,28,-66r-63,-162v-6,-3,-18,0,-18,-9r76,0r0,4r-28,8r46,123r41,-121v-8,-5,-22,-4,-25,-14r62,0v-2,11,-18,8,-26,14xm126,-250r17,20r-61,42r-4,-2","w":165,"k":{"_":39,"p":7," ":7,"-":17,"c":7,"d":7,"e":7,"o":7,"q":7,"\u00e7":7,"\u00e9":7,"\u00e8":7,"\u00ea":7,"\u00eb":7,"\u00f3":7,"\u00f2":7,"\u00f4":7,"\u00f6":7,"\u00f5":7,"\u00f8":7,"\u00f0":7,"a":4,"\u00e1":4,"\u00e0":4,"\u00e2":4,"\u00e4":4,"\u00e3":4,"\u00e5":4,",":29,".":29}},"\u00fe":{"d":"6,75r0,-4r29,-8r0,-299r-31,0r0,-4v18,-5,32,-14,56,-13r0,109v44,-41,115,-20,110,59v-3,60,-50,100,-110,85r0,63r34,8r0,4r-88,0xm140,-78v0,-58,-35,-86,-80,-61r0,121v9,6,20,11,35,11v36,0,45,-39,45,-71","w":177,"k":{"_":18,"x":5,"-":-7,"c":-4,"d":-4,"e":-4,"o":-4,"q":-4,"\u00e7":-4,"\u00e9":-4,"\u00e8":-4,"\u00ea":-4,"\u00eb":-4,"\u00f3":-4,"\u00f2":-4,"\u00f4":-4,"\u00f6":-4,"\u00f5":-4,"\u00f8":-4,"\u00f0":-4,"v":4,"w":4,"y":4,"\u00ff":4,"\u00fd":4,"'":5,"\"":5,",":7,".":7}},"\u00f0":{"d":"54,-189r-5,-10r43,-18v-11,-11,-24,-21,-41,-30r4,-6v19,8,36,18,50,30r33,-15r5,10r-30,13v64,53,65,218,-29,218v-44,0,-71,-24,-71,-82v-1,-58,56,-106,112,-78v-4,-19,-12,-36,-25,-52xm89,-8v50,1,41,-75,40,-126v-9,-13,-27,-22,-45,-22v-36,0,-43,40,-43,71v0,34,9,77,48,77","w":172},".":{"d":"21,-17v0,-11,9,-20,20,-20v11,0,20,9,20,20v0,11,-9,21,-20,21v-11,0,-20,-10,-20,-21","w":83,"k":{"6":3,"4":6,"2":-10,"0":3,"Y":32," ":18,"C":18,"G":18,"O":18,"Q":18,"\u00c7":18,"\u00d2":18,"\u00d6":18,"\u00d5":18,"\u00d3":18,"\u00d4":18,"\u00d8":18,"J":-12,"T":22,"V":32,"W":32,"\u00dd":32,"c":7,"d":7,"e":7,"o":7,"q":7,"\u00e7":7,"\u00e9":7,"\u00e8":7,"\u00ea":7,"\u00eb":7,"\u00f3":7,"\u00f2":7,"\u00f4":7,"\u00f6":7,"\u00f5":7,"\u00f8":7,"\u00f0":7,"v":29,"w":29,"y":29,"\u00ff":29,"\u00fd":29,"t":9,"'":38,"\"":38}},":":{"d":"35,-17v0,-11,10,-20,21,-20v11,0,20,9,20,20v0,11,-9,21,-20,21v-11,0,-21,-10,-21,-21xm35,-145v0,-11,10,-20,21,-20v11,0,20,9,20,20v0,11,-9,20,-20,20v-11,0,-21,-9,-21,-20","w":88},";":{"d":"75,-10v0,28,-20,54,-47,69r-4,-5v19,-15,45,-54,8,-64v0,-10,11,-22,22,-22v12,0,21,10,21,22xm35,-145v0,-11,10,-20,21,-20v11,0,20,9,20,20v0,11,-9,20,-20,20v-11,0,-21,-9,-21,-20","w":88},"?":{"d":"119,-164v0,37,-39,53,-61,57r-6,43r-8,0r-5,-47v15,-5,54,-22,54,-51v0,-39,-38,-54,-63,-34r-10,34r-5,0r0,-41v40,-22,104,-16,104,39xm27,-17v0,-11,10,-20,21,-20v11,0,20,9,20,20v0,11,-9,21,-20,21v-11,0,-21,-10,-21,-21","w":117},"\u00bf":{"d":"0,1v0,-37,39,-52,61,-56r6,-44r8,0r5,47v-15,5,-54,23,-54,52v0,39,38,53,63,33r10,-34r5,0r0,42v-41,21,-104,15,-104,-40xm49,-145v0,-11,9,-20,20,-20v11,0,20,9,20,20v0,11,-9,20,-20,20v-11,0,-20,-9,-20,-20","w":119,"k":{"\u00dd":15,"Y":15,"W":15,"V":15}},"!":{"d":"63,-215r-15,152r-5,0r-15,-152r35,0xm24,-17v0,-11,10,-20,21,-20v11,0,20,9,20,20v0,11,-9,21,-20,21v-11,0,-21,-10,-21,-21","w":91},"\u00a1":{"d":"28,50r15,-152r5,0r15,152r-35,0xm24,-145v0,-11,10,-20,21,-20v11,0,20,9,20,20v0,11,-9,20,-20,20v-11,0,-21,-9,-21,-20","w":91},"-":{"d":"98,-83r-83,0r0,-12r83,0r0,12","w":113,"k":{"7":13,"6":-8,"4":-8,"3":15,"2":8,"1":14,"0":-8,"x":19,"Y":21,"X":23,"C":-9,"G":-9,"O":-9,"Q":-9,"\u00c7":-9,"\u00d2":-9,"\u00d6":-9,"\u00d5":-9,"\u00d3":-9,"\u00d4":-9,"\u00d8":-9,"T":14,"V":21,"W":21,"\u00dd":21,"c":-7,"d":-7,"e":-7,"o":-7,"q":-7,"\u00e7":-7,"\u00e9":-7,"\u00e8":-7,"\u00ea":-7,"\u00eb":-7,"\u00f3":-7,"\u00f2":-7,"\u00f4":-7,"\u00f6":-7,"\u00f5":-7,"\u00f8":-7,"\u00f0":-7,"v":9,"w":9,"y":9,"\u00ff":9,"\u00fd":9,"A":17,"\u00c1":17,"\u00c2":17,"\u00c4":17,"\u00c5":17,"\u00c0":17,"\u00c3":17}},"_":{"d":"180,35r-180,0r0,-16r180,0r0,16","w":180,"k":{"\u00f0":18,"\u00fd":18,"\u00ff":18,"\u00fc":23,"\u00fb":23,"\u00f9":23,"\u00fa":23,"\u00f8":18,"\u00f5":18,"\u00f6":18,"\u00f4":18,"\u00f2":18,"\u00f3":18,"\u00eb":18,"\u00ea":18,"\u00e8":18,"\u00e9":18,"\u00e7":18,"y":18,"w":18,"v":18,"u":23,"t":26,"q":18,"o":18,"e":18,"d":18,"c":18,"\u00dd":54,"\u00dc":22,"\u00d9":22,"\u00db":22,"\u00da":22,"\u00d8":22,"\u00d4":22,"\u00d3":22,"\u00d5":22,"\u00d6":22,"\u00d2":22,"\u00c7":22,"W":54,"V":54,"U":22,"T":28,"Q":22,"O":22,"G":22,"C":22,"g":-21,"Y":34}},"@":{"d":"103,3v-18,-79,14,-202,101,-158v5,-5,8,-12,20,-10r-26,149r3,3v61,-23,88,-66,88,-99v0,-57,-35,-108,-111,-108v-75,0,-149,57,-149,148v0,126,153,168,233,96r6,8v-26,20,-62,39,-103,39v-85,0,-149,-53,-149,-142v0,-90,73,-160,165,-160v74,0,122,51,122,117v0,57,-58,101,-115,117r-17,-5r10,-55r-64,60r-14,0xm122,-45v1,7,-1,14,6,15r57,-49r10,-57v-18,-6,-35,-13,-47,-10v-13,19,-26,64,-26,101","w":317},"&":{"d":"241,-7r0,7r-46,0v-9,-5,-22,-13,-37,-23v-38,42,-149,39,-148,-27v0,-23,12,-45,43,-60v-41,-37,-29,-103,41,-103v39,0,56,22,56,45v0,21,-23,45,-60,55v24,22,50,41,77,60v11,-15,21,-34,29,-59r-28,-10r0,-6r69,0v1,15,-18,10,-26,16v-10,27,-21,50,-34,67v26,17,51,31,64,38xm147,-31v-30,-21,-65,-50,-90,-75v-32,34,-19,94,32,96v21,0,40,-6,58,-21xm91,-202v-48,0,-40,59,-6,84v27,-14,37,-29,37,-48v0,-21,-11,-36,-31,-36","w":240,"k":{"\u00dd":12,"W":12,"V":12,"T":7,"J":-12,"Y":15}},"\/":{"d":"97,-242r-84,275r-13,0r84,-275r13,0","w":97,"k":{"A":18,"\u00c1":18,"\u00c2":18,"\u00c4":18,"\u00c5":18,"\u00c0":18,"\u00c3":18,"\/":28}},"\\":{"d":"84,33r-84,-275r13,0r84,275r-13,0","w":97,"k":{"Y":14,"T":7,"V":14,"W":14,"\u00dd":14,"\\":28,"U":10,"\u00da":10,"\u00db":10,"\u00d9":10,"\u00dc":10}},"|":{"d":"47,33r-12,0r0,-275r12,0r0,275","w":80},"(":{"d":"81,67v-24,-20,-73,-82,-73,-161v0,-69,52,-134,74,-153r7,8v-19,18,-68,79,-68,145v0,76,49,134,68,154","w":103,"k":{"A":12,"\u00c1":12,"\u00c2":12,"\u00c4":12,"\u00c5":12,"\u00c0":12,"\u00c3":12}},")":{"d":"19,67r-7,-8v19,-20,68,-77,68,-153v0,-66,-51,-128,-70,-146r9,-7v22,19,74,84,74,153v0,79,-50,141,-74,161","w":103},"[":{"d":"77,65r-42,0r0,-310r42,0r0,12r-29,0r0,286r29,0r0,12","w":92},"]":{"d":"58,65r-43,0r0,-12r29,0r0,-286r-29,0r0,-12r43,0r0,310","w":92},"{":{"d":"93,49v1,8,0,13,-8,12v-32,2,-57,-11,-57,-50v0,-37,24,-88,-17,-99r0,-11v40,-11,17,-63,17,-101v0,-37,27,-49,65,-47r0,12v-29,-1,-50,6,-51,36v-1,41,26,87,-15,105v63,25,-40,148,66,143","w":99},"}":{"d":"71,11v0,42,-29,54,-65,49r0,-11v31,1,51,-5,51,-37v0,-40,-25,-86,15,-106v-63,-22,38,-147,-66,-141r0,-12v38,-2,65,10,65,47v0,38,-23,90,17,101r0,11v-41,11,-17,62,-17,99","w":99},"^":{"d":"140,-87r-14,0r-44,-110r-50,110r-13,0r56,-123r16,0","w":160},"~":{"d":"139,-119r6,8v-28,46,-92,-20,-123,15r-6,-8v7,-8,18,-17,35,-17v38,2,62,32,88,2","w":159},"\u00b0":{"d":"119,-167v0,24,-18,47,-49,47v-30,0,-47,-22,-47,-47v0,-24,18,-46,49,-46v30,0,47,22,47,46xm99,-167v0,-22,-11,-36,-28,-36v-18,0,-28,15,-28,37v0,22,10,36,28,36v19,0,28,-15,28,-37","w":141},"\u00a7":{"d":"134,-150r-3,-38v-31,-19,-70,-17,-91,8v42,33,110,74,110,140v0,68,-89,90,-136,58r0,-48r12,0r4,38v31,19,68,17,90,-8v-41,-33,-110,-74,-110,-139v0,-67,88,-92,136,-59r0,48r-12,0xm32,-168v-32,75,52,120,96,157v32,-76,-52,-120,-96,-157","w":165},"\u00b6":{"d":"110,-54v-52,-1,-92,-27,-92,-78v0,-47,37,-78,94,-78r92,0r0,8r-28,4r0,273r-13,0r0,-271r-38,0r0,271r-15,0r0,-129","w":223},"#":{"d":"30,-145r0,-11r53,0r12,-54r10,0r-11,54r57,0r12,-54r10,0r-12,54r47,0r0,11r-49,0r-15,68r50,0r0,11r-53,0r-14,66r-11,0r15,-66r-57,0r-15,66r-10,0r14,-66r-48,0r0,-11r51,0r15,-68r-51,0xm91,-145r-15,68r57,0r16,-68r-58,0","w":223},"%":{"d":"14,-151v0,-36,20,-59,46,-59v26,0,46,19,46,58v0,35,-20,56,-46,56v-26,0,-46,-19,-46,-55xm84,-150v0,-35,-10,-50,-25,-50v-15,0,-23,14,-23,48v0,31,11,47,26,47v14,0,22,-14,22,-45xm149,-53v0,-36,20,-58,46,-58v26,0,46,19,46,57v0,35,-20,57,-46,57v-26,0,-46,-19,-46,-56xm219,-52v0,-36,-9,-50,-25,-50v-15,0,-23,14,-23,48v0,31,11,48,26,48v14,0,22,-15,22,-46xm77,0r-13,0r112,-210r14,0","w":252},"\u00aa":{"d":"25,-214r-7,0r0,-32v26,-13,82,-16,82,26r0,74v5,3,15,1,18,7r-36,0r-3,-14v-6,7,-19,17,-36,17v-23,0,-34,-11,-34,-30v-1,-27,32,-38,69,-36v1,-22,0,-47,-20,-47v-8,0,-16,3,-24,9xm78,-156r0,-39v-26,-2,-48,3,-48,25v0,29,30,26,48,14xm11,-117r0,-6r105,0r0,6r-105,0","w":126},"\u00ba":{"d":"11,-117r0,-6r105,0r0,6r-105,0xm114,-196v0,31,-22,58,-51,58v-31,0,-50,-17,-50,-57v0,-31,23,-60,51,-60v33,0,50,19,50,59xm95,-193v0,-21,-5,-52,-33,-52v-45,0,-39,97,4,98v25,0,29,-22,29,-46","w":127},"'":{"d":"21,-142r0,-71r28,0r-22,71r-6,0","w":66,"k":{"g":7,"C":18,"G":18,"O":18,"Q":18,"\u00c7":18,"\u00d2":18,"\u00d6":18,"\u00d5":18,"\u00d3":18,"\u00d4":18,"\u00d8":18,"J":24,"c":13,"d":13,"e":13,"o":13,"q":13,"\u00e7":13,"\u00e9":13,"\u00e8":13,"\u00ea":13,"\u00eb":13,"\u00f3":13,"\u00f2":13,"\u00f4":13,"\u00f6":13,"\u00f5":13,"\u00f8":13,"\u00f0":13,"A":48,"\u00c1":48,"\u00c2":48,"\u00c4":48,"\u00c5":48,"\u00c0":48,"\u00c3":48,",":32,".":32,"s":14}},"\"":{"d":"21,-142r0,-71r28,0r-18,71r-10,0xm77,-142r0,-71r29,0r-19,71r-10,0","w":123,"k":{"g":7,"C":18,"G":18,"O":18,"Q":18,"\u00c7":18,"\u00d2":18,"\u00d6":18,"\u00d5":18,"\u00d3":18,"\u00d4":18,"\u00d8":18,"J":24,"c":13,"d":13,"e":13,"o":13,"q":13,"\u00e7":13,"\u00e9":13,"\u00e8":13,"\u00ea":13,"\u00eb":13,"\u00f3":13,"\u00f2":13,"\u00f4":13,"\u00f6":13,"\u00f5":13,"\u00f8":13,"\u00f0":13,"A":48,"\u00c1":48,"\u00c2":48,"\u00c4":48,"\u00c5":48,"\u00c0":48,"\u00c3":48,",":32,".":32,"s":14}},"\u00ab":{"d":"55,-17r-44,-64r43,-65r8,0r-19,65r19,64r-7,0xm111,-17r-44,-64r44,-65r7,0r-19,65r19,64r-7,0","w":132},"\u00bb":{"d":"22,-147r44,65r-44,64r-7,0r18,-64r-18,-65r7,0xm78,-147r44,65r-44,64r-7,0r19,-64r-19,-65r7,0","w":132},"*":{"d":"119,-157v0,9,-5,15,-10,19r-38,-31r7,48v-7,3,-13,3,-20,0r8,-48r-38,31v-5,-4,-9,-10,-10,-18r47,-17r-47,-18v0,-9,4,-14,10,-18r38,31r-8,-48v7,-3,13,-3,20,0r-7,47r38,-30v6,4,10,9,10,18r-49,17","w":133},"\u00b7":{"d":"4,-108v0,-9,6,-16,15,-16v9,0,17,7,17,16v0,9,-8,16,-17,16v-9,0,-15,-7,-15,-16","w":39,"k":{"l":6}},"\u00a6":{"d":"46,33r-13,0r0,-104r13,0r0,104xm46,-243r0,102r-13,0r0,-102r13,0","w":77},"+":{"d":"160,-103r-64,0r0,70r-14,0r0,-70r-64,0r0,-13r64,0r0,-66r14,0r0,66r64,0r0,13","w":178,"k":{"\u00dd":14,"Y":14,"W":14,"V":14,"T":18}},"\u00d7":{"d":"157,-160r-55,53r55,54r-10,10r-54,-54r-53,54r-10,-9r53,-53r-53,-54r10,-11r53,54r54,-53","w":186},"<":{"d":"33,-108r124,66r-5,10r-134,-69r0,-13r134,-68r5,11","w":178},"=":{"d":"168,-136r-143,0r0,-14r143,0r0,14xm168,-64r-143,0r0,-14r143,0r0,14","w":192},">":{"d":"19,-42r125,-65r-125,-64r6,-11r133,68r0,13r-133,69","w":178},"\u00b1":{"d":"159,-17r-138,0r0,-13r138,0r0,13xm96,-127r63,0r0,13r-63,0r0,61r-13,0r0,-61r-62,0r0,-13r62,0r0,-59r13,0r0,59","w":180},"\u00f7":{"d":"154,-102r-143,0r0,-14r143,0r0,14xm58,-161v0,-15,10,-26,25,-26v14,0,26,11,26,26v0,14,-12,25,-26,25v-15,0,-25,-11,-25,-25xm58,-53v0,-15,10,-26,25,-26v14,0,26,11,26,26v0,14,-12,25,-26,25v-15,0,-25,-11,-25,-25","w":164},"\u00ac":{"d":"154,-36r-16,0r0,-67r-118,0r0,-13r134,0r0,80","w":178},"\u00b5":{"d":"188,-8v-17,12,-58,17,-60,-12v-29,27,-58,26,-86,15v17,16,9,50,11,80r-26,0r0,-237r26,0r0,108v2,53,44,42,74,28r0,-136r26,0r0,122v1,34,9,28,33,28","w":190},"\u03bc":{"d":"188,-8v-17,12,-58,17,-60,-12v-29,27,-58,26,-86,15v17,16,9,50,11,80r-26,0r0,-237r26,0r0,108v2,53,44,42,74,28r0,-136r26,0r0,122v1,34,9,28,33,28","w":190},"0":{"d":"87,-213v108,0,88,216,-5,216v-52,0,-72,-46,-72,-104v0,-53,26,-112,77,-112xm129,-106v0,-49,-12,-97,-47,-97v-34,0,-44,50,-44,100v0,53,14,96,48,96v36,0,43,-50,43,-99","w":168,"k":{"-":-7}},"1":{"d":"13,0r0,-5r45,-7r0,-175r-50,0r0,-5v26,-6,47,-18,77,-21r0,201r44,7r0,5r-116,0","w":135,"k":{"-":8}},"2":{"d":"144,-47r-3,47r-135,0r-3,-15v56,-47,101,-98,101,-137v1,-58,-69,-63,-90,-16r-5,0r0,-27v42,-33,125,-22,124,45v0,46,-60,96,-112,129r102,0r17,-27","w":147},"3":{"d":"9,-41r5,0v14,43,94,50,93,-13v0,-26,-18,-45,-64,-45r0,-11v24,-2,54,-21,54,-52v0,-21,-13,-39,-36,-39v-25,0,-35,14,-45,36r-5,0r0,-29v35,-34,111,-20,113,30v1,33,-35,44,-42,52v23,2,52,19,52,49v1,61,-80,78,-125,57r0,-35","w":142},"4":{"d":"149,-53r-29,0r0,53r-28,0r0,-53r-84,0r-8,-15r99,-142r21,0r0,134r31,0xm18,-76r74,0r0,-105","k":{"-":-10}},"5":{"d":"8,-35r6,0v17,45,91,36,91,-24v0,-38,-43,-54,-89,-46r9,-105r104,0r-3,26r-92,0r-5,54v57,-6,105,16,104,65v-1,60,-78,81,-125,59r0,-29","w":142},"6":{"d":"79,3v-48,0,-69,-41,-69,-90v0,-85,48,-148,128,-119r0,26r-5,0v-44,-51,-88,-3,-93,63v40,-32,110,-14,110,45v0,38,-25,75,-71,75xm78,-118v-15,0,-27,4,-39,9v-5,44,6,100,42,101v26,0,41,-25,41,-55v0,-27,-13,-55,-44,-55","w":159,"k":{"-":-8}},"7":{"d":"22,0r0,-6r93,-178r-115,0r4,-26r127,0r3,10r-91,200r-21,0","w":127,"k":{"\/":10,"-":5,".":21,",":21}},"8":{"d":"81,3v-79,0,-85,-89,-24,-109v-51,-24,-42,-105,25,-107v71,-3,89,78,31,104v22,12,41,27,41,52v0,32,-33,60,-73,60xm124,-50v0,-22,-34,-35,-62,-53v-26,26,-28,98,23,97v24,0,39,-19,39,-44xm49,-165v0,24,29,38,56,52v20,-33,27,-90,-22,-90v-24,0,-34,19,-34,38","w":168},"9":{"d":"81,-213v48,0,69,42,69,91v0,84,-47,146,-128,119r0,-27r5,0v44,53,88,3,93,-62v-40,32,-110,13,-110,-46v0,-38,25,-75,71,-75xm82,-92v15,0,27,-3,39,-8v5,-44,-6,-101,-42,-102v-26,0,-40,26,-40,56v0,27,12,54,43,54","w":159,"k":{"-":-8}},"\u00ae":{"d":"78,-96v-38,0,-67,-29,-67,-67v0,-38,29,-68,67,-68v38,0,67,30,67,68v0,38,-29,67,-67,67xm78,-103v33,0,58,-27,58,-60v0,-33,-25,-61,-58,-61v-33,0,-57,28,-57,61v0,33,24,60,57,60xm81,-132v-9,2,-28,2,-37,0r9,-4r0,-59v-3,-2,-9,-1,-9,-5v26,1,64,-6,63,20v0,9,-5,15,-13,18v7,11,12,25,24,31r-27,0r-15,-29r-4,0v0,12,-3,28,9,28xm87,-180v0,-11,-4,-16,-15,-16r0,32v9,0,15,-3,15,-16"},"\u00a9":{"d":"179,-130r-6,0r-16,-31v-37,-16,-60,17,-59,56v0,33,13,60,38,60v21,0,34,-18,39,-30r4,0r0,26v-39,24,-115,12,-115,-53v0,-63,72,-83,115,-61r0,33xm22,-104v0,-60,49,-109,109,-109v60,0,109,49,109,109v0,60,-49,109,-109,109v-60,0,-109,-49,-109,-109xm31,-104v0,55,45,99,100,99v54,0,99,-44,99,-99v0,-54,-45,-99,-99,-99v-55,0,-100,45,-100,99","w":261},"$":{"d":"143,-147r-12,-46v-12,-7,-25,-9,-41,-9r0,77v31,11,66,23,66,66v0,37,-32,56,-66,60r0,27r-9,0r0,-27v-23,3,-45,-4,-66,-12r0,-55r4,0r12,43v15,9,31,13,50,12r0,-81v-30,-10,-63,-21,-63,-60v0,-36,30,-58,63,-61r0,-27r9,0r0,27v22,0,43,6,57,13r0,53r-4,0xm127,-55v0,-18,-17,-27,-37,-34r0,77v21,-3,37,-12,37,-43xm44,-162v0,18,17,27,37,34r0,-73v-21,3,-37,14,-37,39","w":170},"\u00a2":{"d":"131,-103r-11,-38v-9,-9,-21,-14,-31,-15r0,142v17,4,33,-5,48,-16r4,7v-8,10,-29,24,-52,26r0,25r-11,0r0,-25v-47,-2,-70,-32,-70,-81v0,-47,26,-84,70,-87r0,-28r11,0r0,28v20,0,31,4,49,14r0,48r-7,0xm34,-84v0,42,19,63,44,69r0,-141v-23,3,-44,24,-44,72"},"\u00a3":{"d":"125,-109r0,13r-58,0v6,30,-2,57,-12,82r80,0r26,-49r6,1r-9,62r-154,0r0,-5r31,-9v9,-30,13,-53,2,-82r-30,0r0,-13r26,0v-21,-51,16,-104,61,-104v23,0,40,5,54,13r0,53r-6,0r-13,-42v-28,-25,-77,-13,-75,32v0,14,5,31,10,48r61,0","w":172},"\u00a5":{"d":"49,0r0,-5r36,-4r0,-52r-74,0r0,-11r74,0v2,-16,-6,-23,-11,-32r-63,0r0,-10r57,0r-51,-88v-5,-3,-16,1,-15,-8r76,0r0,5r-28,5r60,102r49,-98r-34,-9r0,-5r69,0v1,10,-12,7,-18,11r-47,85r53,0r0,10r-59,0v-4,9,-11,17,-9,32r69,0r0,11r-69,0r0,52r36,4r0,5r-101,0","w":196},"\u00a4":{"d":"26,-33r-10,-10r27,-26v-19,-19,-18,-57,0,-76r-26,-27r9,-9r25,27v24,-18,53,-19,78,-1r25,-26r10,10r-26,26v19,18,17,59,-1,77r26,26r-8,9r-26,-26v-23,17,-54,17,-77,0xm90,-60v32,0,48,-20,48,-47v0,-26,-16,-48,-48,-48v-31,0,-47,22,-47,48v0,27,17,47,47,47","w":178},"\u00bd":{"d":"221,-28v7,4,0,19,1,28r-81,0r-2,-8v32,-24,58,-51,58,-73v1,-32,-42,-30,-52,-6v-6,0,-2,-11,-3,-16v24,-18,77,-13,76,23v0,23,-31,48,-64,67r59,0xm21,-99v3,-8,18,-5,25,-9r0,-89r-28,0r0,-3v16,-3,29,-10,48,-10r0,102r25,6r0,3r-70,0xm48,2r-7,-4r131,-199r7,4","w":242},"\u00bc":{"d":"220,-28r-17,0r0,28r-20,0r0,-28r-49,0r-4,-8r59,-75r14,0r0,70r19,0xm21,-99v3,-8,18,-5,25,-9r0,-89r-28,0r0,-3v16,-3,29,-10,48,-10r0,102r25,6r0,3r-70,0xm57,2r-7,-4r131,-199r7,4xm143,-41r40,0r0,-52","w":240},"\u00be":{"d":"218,-28r-16,0r0,28r-21,0r0,-28r-49,0r-4,-8r59,-75r15,0r0,70r18,0xm18,-122r4,0v7,24,53,24,53,-5v0,-14,-10,-23,-37,-23r0,-7v27,2,46,-45,11,-47v-13,0,-21,7,-26,19v-8,1,-3,-11,-4,-16v22,-18,69,-11,70,16v0,16,-21,22,-27,27v16,1,32,11,32,27v1,34,-51,39,-76,29r0,-20xm54,2r-6,-4r131,-199r6,4xm141,-41r40,0r0,-52","w":238},"\u00b9":{"d":"10,-144v3,-8,18,-5,25,-9r0,-89r-27,0r0,-3v16,-3,29,-9,47,-10r0,102r25,6r0,3r-70,0","w":87},"\u00b2":{"d":"90,-171r-2,27r-81,0r-2,-8v32,-24,58,-51,58,-73v1,-30,-41,-29,-51,-6v-8,1,-3,-10,-4,-15v23,-18,77,-15,76,22v0,23,-30,48,-63,67r58,0v4,-4,4,-13,11,-14","w":95},"\u00b3":{"d":"8,-167r4,0v7,24,53,24,53,-5v0,-14,-10,-24,-37,-24r0,-6v27,2,46,-45,11,-47v-13,0,-21,7,-26,19v-8,1,-2,-12,-4,-17v21,-19,68,-11,69,16v0,16,-20,24,-26,28v16,1,32,10,32,26v1,34,-50,41,-76,30r0,-20","w":92},"\u00a0":{"w":74}}});
/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * Copyright 2004 Process Type Foundry. All rights reserved.
 * 
 * Trademark:
 * Please refer to the Copyright section for the font trademark attribution
 * notices.
 * 
 * Designer:
 * Eric Olson
 * 
 * Vendor URL:
 * http://www.processtypefoundry.com
 */
Cufon.registerFont({"w":187,"face":{"font-family":"Klavika Lt","font-weight":300,"font-stretch":"normal","units-per-em":"360","panose-1":"2 0 0 0 0 0 0 0 0 0","ascent":"270","descent":"-90","x-height":"4","bbox":"-5 -301 311 76","underline-thickness":"7.2","underline-position":"-40.68","stemh":"19","stemv":"21","unicode-range":"U+0020-U+00FF"},"glyphs":{" ":{"w":79},"!":{"d":"51,-62r-12,0v-5,-58,-4,-122,-4,-185r21,0r0,125xm34,0r0,-31r23,0r0,31r-23,0","w":90},"\"":{"d":"45,-159r-18,0r0,-88r18,0r0,88xm100,-159r-18,0r0,-88r18,0r0,88","w":127},"#":{"d":"228,-64r-49,0r-3,64r-19,0r3,-64r-70,0r-4,64r-19,0r4,-64r-49,0r1,-18r49,0r3,-74r-49,0r1,-18r49,0r4,-59r19,0r-4,59r71,0r3,-59r19,0r-3,59r49,0r-1,18r-49,0r-4,74r49,0xm94,-156r-3,74r70,0r4,-74r-71,0","w":258,"k":{"7":-5,"4":-5,"1":-5,")":4}},"$":{"d":"100,39r-20,0r0,-36v-18,-1,-37,-3,-55,-10r4,-17v42,11,109,24,109,-33v0,-32,-1,-36,-51,-52v-60,-19,-61,-26,-61,-67v0,-40,11,-58,61,-60r0,-36r21,0r0,36v17,1,34,2,48,6r-2,18v-43,-4,-107,-24,-107,36v0,33,1,34,36,46v72,24,76,30,76,73v0,42,-13,58,-59,60r0,36","w":183,"k":{"]":-5,"7":-5,"4":-5,"1":-7,")":-5}},"%":{"d":"208,-237r-98,241r-16,-7r99,-240xm71,-243v51,-1,51,35,51,83v0,30,-15,48,-51,48v-51,1,-51,-36,-51,-84v0,-30,15,-47,51,-47xm71,-228v-41,-2,-32,34,-33,69v0,20,8,31,33,31v41,0,32,-33,33,-68v0,-20,-8,-32,-33,-32xm231,-127v51,-1,51,35,51,83v0,30,-15,48,-51,48v-51,1,-52,-35,-52,-84v0,-30,16,-47,52,-47xm231,-112v-40,-2,-34,33,-34,68v0,20,9,32,34,32v40,2,32,-33,33,-68v0,-20,-8,-32,-33,-32","w":303,"k":{"}":4,"]":4,"4":-7,"1":4,")":9}},"&":{"d":"208,-111r-36,0r0,105v-53,17,-151,18,-141,-47v-2,-35,4,-61,33,-68v-31,-11,-28,-35,-28,-71v0,-57,81,-57,132,-43r-3,18v-37,-8,-108,-20,-108,25v0,35,-2,63,37,62r114,0r0,19xm51,-54v-8,45,62,43,101,34r0,-91v-53,0,-113,-10,-101,57","w":222},"'":{"d":"45,-159r-18,0r0,-88r18,0r0,88","w":72},"(":{"d":"98,45r-16,10v-74,-101,-73,-227,0,-329r16,10v-39,62,-50,103,-50,155v0,52,11,92,50,154","w":108,"k":{"x":-2,"v":4,"q":4,"m":4,"j":-14,"g":2,"d":7,"X":-5,"V":-7,"Q":5,"@":14,"?":-2,"9":2,"8":4,"7":-9,"6":4,"5":-2,"4":9,"3":-4,"2":-5,"1":2,"0":7,"+":11,"*":4,"%":4,"$":4,"#":7}},")":{"d":"26,55r-15,-10v39,-62,49,-102,49,-154v0,-52,-10,-93,-49,-155r15,-10v73,102,74,228,0,329","w":108},"*":{"d":"44,-140r29,-45r-53,0r0,-13r54,0r-30,-46r11,-7r31,47r30,-47r11,7r-29,46r54,0r0,13r-54,0r29,45r-11,7r-30,-47r-31,47","w":171,"k":{"}":4,")":4,",":43,".":43,":":16,";":16}},"+":{"d":"23,-78r0,-19r63,0r0,-64r21,0r0,64r63,0r0,19r-63,0r0,64r-21,0r0,-64r-63,0","w":192,"k":{"}":14,"]":4,")":11}},",":{"d":"32,0r0,-31r22,0v3,32,-8,50,-17,70r-10,-4r13,-35r-8,0","w":86,"k":{"V":38,"X":-2,"v":23,"x":-1,"Q":5,")":9,"*":36,"g":2,"]":4,"@":11,"}":7,"1":18,"4":18,"%":22,"3":-2,"8":2,"C":4,"\u00c7":4,"O":5,"\u00d2":5,"\u00d3":5,"\u00d4":5,"\u00d5":5,"\u00d6":5,"\u00d8":5,"T":38,"U":9,"\u00d9":9,"\u00da":9,"\u00db":9,"\u00dc":9,"W":30,"Y":49,"\u00dd":49,"o":4,"\u00f3":4,"\u00f8":4,"y":22,"\u00fd":22,"f":14,"G":4,"t":11,"w":13,"A":-4,"\u00c0":-4,"\u00c1":-4,"\u00c2":-4,"\u00c3":-4,"\u00c4":-4,"\u00c5":-4}},"-":{"d":"23,-92r0,-18r84,0r0,18r-84,0","w":130,"k":{"V":18,"X":23,"x":8,")":13,"g":2,"]":11,"}":11,"M":3,"1":13,"4":-2,"3":6,"j":2,"2":9,"5":5,"7":16,"9":5,"T":38,"W":13,"Y":31,"\u00dd":31,"e":-1,"\u00e9":-1,"f":11,"z":2,"t":9,"a":3,"\u00e1":3,"\u00e6":3,"c":-4,"\u00e7":-4,"A":11,"\u00c0":11,"\u00c1":11,"\u00c2":11,"\u00c3":11,"\u00c4":11,"\u00c5":11,"Z":9,"S":12,"J":2}},".":{"d":"32,0r0,-31r23,0r0,31r-23,0","w":87,"k":{"V":38,"X":-2,"v":23,"x":-1,"Q":5,")":9,"*":36,"g":2,"]":4,"@":11,"}":7,"1":18,"4":18,"%":22,"3":-2,"8":2,"C":4,"\u00c7":4,"O":5,"\u00d2":5,"\u00d3":5,"\u00d4":5,"\u00d5":5,"\u00d6":5,"\u00d8":5,"T":38,"U":9,"\u00d9":9,"\u00da":9,"\u00db":9,"\u00dc":9,"W":30,"Y":49,"\u00dd":49,"o":4,"\u00f3":4,"\u00f8":4,"y":22,"\u00fd":22,"f":14,"G":4,"t":11,"w":13,"A":-4,"\u00c0":-4,"\u00c1":-4,"\u00c2":-4,"\u00c3":-4,"\u00c4":-4,"\u00c5":-4}},"\/":{"d":"133,-243r-89,285r-21,0r89,-285r21,0","w":158,"k":{"x":4,"q":11,"p":11,"m":11,"g":14,"d":13,"V":-5,"Q":4,"M":4,"9":2,"8":9,"7":-9,"6":2,"4":13,"1":-2,"0":5,"A":22,"\u00c0":22,"\u00c1":22,"\u00c2":22,"\u00c3":22,"\u00c4":22,"\u00c5":22,"C":5,"\u00c7":5,"G":5,"O":4,"\u00d2":4,"\u00d3":4,"\u00d4":4,"\u00d5":4,"\u00d6":4,"\u00d8":4,"S":4,"T":-7,"W":-5,"Y":-5,"\u00dd":-5,"n":11,"a":14,"\u00e1":14,"\u00e6":14,"c":11,"\u00e7":11,"e":13,"\u00e9":13,"f":2,"o":14,"\u00f3":14,"\u00f8":14,"s":14,"t":4,"u":9,"\u00fa":9,"w":5,"z":5,"r":11,"y":2,"\u00fd":2}},"0":{"d":"101,-236v102,0,72,94,72,178v0,36,-19,62,-72,62v-102,0,-72,-95,-72,-179v0,-36,19,-61,72,-61xm101,-217v-83,0,-51,93,-51,158v0,30,12,44,51,44v83,0,51,-93,51,-158v0,-30,-12,-44,-51,-44","w":201,"k":{"}":2,"7":1,"3":1,"2":1,"\/":4,")":7,",":1,".":1}},"1":{"d":"14,-180r-10,-18v27,-11,40,-36,79,-35r0,233r-21,0r0,-208","w":117,"k":{"\\":-9,"7":-4}},"2":{"d":"19,-19v36,-52,96,-102,106,-160v8,-48,-68,-41,-100,-30r-4,-18v13,-4,36,-9,57,-9v58,0,67,21,67,61v0,43,-71,117,-99,156r101,0r0,19r-128,0r0,-19","w":174,"k":{"}":-4,"\\":2,"7":-2,"4":18,"0":2,"-":8}},"3":{"d":"20,-4r3,-18v38,9,104,18,104,-29v0,-36,-5,-57,-41,-57r-48,0r0,-18v38,1,85,4,85,-33v0,-38,1,-61,-43,-58v-16,0,-38,2,-53,5r-3,-18v47,-12,120,-10,120,44v0,36,1,58,-29,69v29,4,33,32,33,68v0,57,-75,61,-128,45","w":176,"k":{"9":2,"7":1,"6":1,"5":1,"3":1,"1":1,"\/":4,",":3,".":3,":":2,";":2,"\u00ab":-4}},"4":{"d":"180,-63r-36,0r0,63r-21,0r0,-63r-112,0r0,-22r105,-148r28,0r0,152r36,0r0,18xm31,-81r92,0r0,-130","w":194,"k":{"]":-4,"9":3,"5":2,"1":4,")":-2,",":5,".":5,"-":4,"\u00ab":-7}},"5":{"d":"32,-111r0,-122r119,0r0,19r-98,0r0,84v15,0,23,1,42,1v52,2,60,29,58,75v11,59,-77,68,-130,50r4,-18v47,12,120,17,105,-49v8,-50,-55,-39,-100,-40","w":178,"k":{"]":-5,"\\":-4,"9":3,"7":-1,"1":3,"\/":2,")":-2}},"6":{"d":"120,-217v-76,-4,-70,34,-70,97v12,-5,34,-10,51,-10v56,0,62,28,62,76v0,36,-17,58,-66,58v-92,0,-61,-83,-68,-159v-7,-74,57,-91,129,-76r-3,18v-9,-2,-24,-4,-35,-4xm142,-75v9,-47,-64,-39,-92,-25v-2,46,-4,85,47,85v44,0,47,-21,45,-60","w":186,"k":{"}":-9,"]":-4,"\\":-4,"9":3,"8":2,"7":-1,"5":1,"3":1,"2":1,"1":2,"\/":4,")":-5}},"7":{"d":"11,-214r0,-19r134,0r0,18r-100,215r-22,0r101,-214r-113,0","w":153,"k":{"}":-7,"]":-7,"\\":-9,"@":4,"?":-9,"9":1,"8":8,"7":-2,"6":4,"4":18,"1":-7,"0":4,"\/":20,")":-7,",":40,".":40,":":20,";":20,"-":16,"\u00ab":16,"\u00bb":11}},"8":{"d":"166,-180v1,31,-6,44,-42,61v40,18,48,33,48,67v0,39,-21,56,-72,56v-92,0,-98,-99,-25,-123v-35,-17,-43,-33,-42,-61v0,-31,16,-56,67,-56v51,0,66,25,66,56xm152,-53v0,-33,-9,-36,-52,-56v-43,18,-52,23,-52,56v0,28,14,38,52,38v38,0,52,-10,52,-38xm54,-183v-1,33,7,37,46,55v39,-18,46,-23,45,-55v0,-22,-10,-34,-45,-34v-35,0,-46,12,-46,34","w":199,"k":{"}":2,"\\":7,"9":2,"7":2,"4":1,"3":2,"2":1,"1":4,"\/":4,")":4,",":2,".":2}},"9":{"d":"64,-15v78,4,71,-34,71,-97v-12,5,-34,9,-51,9v-57,0,-62,-27,-62,-76v0,-36,18,-57,66,-57v93,0,60,83,68,159v7,74,-58,92,-129,75r3,-17v9,2,23,4,34,4xm42,-158v-9,46,64,39,93,26v2,-46,4,-85,-47,-85v-44,0,-48,20,-46,59","w":184,"k":{"}":2,"9":2,"8":1,"7":4,"6":3,"5":2,"3":2,"2":3,"\/":5,")":2,",":7,".":7,":":2,";":2}},":":{"d":"32,0r0,-31r23,0r0,31r-23,0xm32,-115r0,-31r23,0r0,31r-23,0","w":87,"k":{"}":7,"v":6,"V":23,"Q":4,"M":3,"4":-4,"3":-2,"2":-2,"1":7,"*":11,")":9,"A":-2,"\u00c0":-2,"\u00c1":-2,"\u00c2":-2,"\u00c3":-2,"\u00c4":-2,"\u00c5":-2,"O":4,"\u00d2":4,"\u00d3":4,"\u00d4":4,"\u00d5":4,"\u00d6":4,"\u00d8":4,"T":36,"W":20,"Y":32,"\u00dd":32,"o":1,"\u00f3":1,"\u00f8":1,"w":5,"y":2,"\u00fd":2,"U":4,"\u00d9":4,"\u00da":4,"\u00db":4,"\u00dc":4}},";":{"d":"32,0r0,-31r22,0v3,32,-8,50,-17,70r-10,-4r13,-35r-8,0xm32,-115r0,-31r22,0r0,31r-22,0","w":86},"<":{"d":"18,-80r0,-15r143,-84r9,15r-131,76r132,76r-9,16","w":198},"=":{"d":"29,-111r0,-17r125,0r0,17r-125,0xm29,-49r0,-17r125,0r0,17r-125,0","w":183},">":{"d":"180,-95r0,15r-144,84r-9,-16r132,-76r-131,-76r9,-15","w":198},"?":{"d":"55,-99v21,-21,73,-37,64,-87v10,-57,-50,-49,-94,-40r-3,-18v17,-4,35,-7,52,-7v56,0,66,19,66,64v0,60,-42,75,-72,104xm55,0r0,-35r23,0r0,35r-23,0","w":164},"@":{"d":"154,-100r10,-58v-19,-6,-45,-9,-47,13v-1,14,-6,28,-8,42v-2,11,1,13,13,13v9,0,24,-4,32,-10xm118,-74v-41,0,-20,-44,-18,-71v3,-40,51,-35,83,-23r-13,76v36,12,59,-17,59,-52v0,-53,-33,-83,-90,-83v-54,0,-97,43,-97,107v0,63,34,107,109,107v24,0,47,-6,70,-16r5,15v-89,47,-203,-1,-203,-106v0,-73,51,-123,116,-123v71,0,108,42,108,99v0,53,-51,90,-91,60v-10,5,-22,10,-38,10","w":270,"k":{"}":4,"]":2,")":5,"A":5,"\u00c0":5,"\u00c1":5,"\u00c2":5,"\u00c3":5,"\u00c4":5,"\u00c5":5,",":14,".":14}},"A":{"d":"190,0r-23,-63r-111,0r-23,63r-20,0r83,-240r31,0r84,240r-21,0xm112,-228r-50,147r99,0","w":223},"B":{"d":"181,-80v0,101,-74,79,-149,80r0,-240v59,3,142,-18,142,47v0,34,2,59,-27,68v19,3,34,18,34,45xm127,-19v36,1,33,-28,33,-61v0,-44,-64,-32,-106,-33r0,94r73,0xm116,-132v39,0,37,-27,37,-63v0,-40,-63,-22,-99,-26r0,89r62,0","w":201,"k":{"}":-4,"v":-1,"]":-5,"\\":-4,"V":4,"\/":2,"A":2,"\u00c0":2,"\u00c1":2,"\u00c2":2,"\u00c3":2,"\u00c4":2,"\u00c5":2,"T":6,"W":1,"Y":7,"\u00dd":7,"-":-4,"y":-1,"\u00fd":-1,"\u00ab":-5}},"C":{"d":"108,-224v-89,0,-52,89,-60,158v-7,58,63,55,114,46r2,18v-65,16,-143,3,-137,-64v7,-87,-25,-177,80,-177v17,0,39,1,57,5r-2,18v-16,-3,-39,-4,-54,-4","w":183,"k":{"\u00ae":-5,"}":-14,"x":-2,"v":7,"q":5,"g":4,"d":5,"]":-11,"\\":-4,"Q":6,"?":-7,"\/":2,"*":-7,")":-7,"A":-1,"\u00c0":-1,"\u00c1":-1,"\u00c2":-1,"\u00c3":-1,"\u00c4":-1,"\u00c5":-1,"C":5,"\u00c7":5,"G":5,"O":6,"\u00d2":6,"\u00d3":6,"\u00d4":6,"\u00d5":6,"\u00d6":6,"\u00d8":6,"a":4,"\u00e1":4,"\u00e6":4,"c":6,"\u00e7":6,"e":6,"\u00e9":6,"f":2,"o":6,"\u00f3":6,"\u00f8":6,"t":2,"u":4,"\u00fa":4,"w":2,",":-2,".":-2,":":-3,";":-3,"-":23,"y":7,"\u00fd":7,"U":1,"\u00d9":1,"\u00da":1,"\u00db":1,"\u00dc":1}},"D":{"d":"32,-240r80,0v99,-2,74,86,74,169v0,41,-16,71,-74,71r-80,0r0,-240xm54,-221r0,202v54,1,118,6,111,-51v-8,-64,26,-156,-53,-151r-58,0","w":212,"k":{"v":-3,"\\":-2,"X":4,"V":6,"\/":7,")":4,"A":6,"\u00c0":6,"\u00c1":6,"\u00c2":6,"\u00c3":6,"\u00c4":6,"\u00c5":6,"T":10,"W":3,"Y":7,"\u00dd":7,"w":-2,",":7,".":7,":":4,";":4,"y":-2,"\u00fd":-2}},"E":{"d":"32,0r0,-240r135,0r0,19r-113,0r0,89r105,0r0,19r-105,0r0,94r114,0r0,19r-136,0","w":192,"k":{"}":-7,"x":-3,"g":3,"d":2,"]":-5,"\\":-4,"V":2,"Q":3,"\/":-2,")":-7,"A":-1,"\u00c0":-1,"\u00c1":-1,"\u00c2":-1,"\u00c3":-1,"\u00c4":-1,"\u00c5":-1,"C":3,"\u00c7":3,"G":3,"O":3,"\u00d2":3,"\u00d3":3,"\u00d4":3,"\u00d5":3,"\u00d6":3,"\u00d8":3,"S":3,"Y":3,"\u00dd":3,"a":4,"\u00e1":4,"\u00e6":4,"f":1,"o":3,"\u00f3":3,"\u00f8":3,",":-2,".":-2,"\u00ab":-2}},"F":{"d":"54,0r-22,0r0,-240r137,0r0,19r-115,0r0,93r107,0r0,19r-107,0r0,109","w":183,"k":{"\u00ae":-7,"}":-9,"g":1,"d":4,"]":-9,"\\":-9,"Q":3,"?":-7,"\/":14,"*":-13,")":-7,"A":18,"\u00c0":18,"\u00c1":18,"\u00c2":18,"\u00c3":18,"\u00c4":18,"\u00c5":18,"C":3,"\u00c7":3,"G":3,"O":3,"\u00d2":3,"\u00d3":3,"\u00d4":3,"\u00d5":3,"\u00d6":3,"\u00d8":3,"S":6,"W":-1,"Y":-2,"\u00dd":-2,"a":5,"\u00e1":5,"\u00e6":5,"c":2,"\u00e7":2,"e":1,"\u00e9":1,"o":2,"\u00f3":2,"\u00f8":2,"s":3,"u":1,"\u00fa":1,"w":-2,",":32,".":32,":":4,";":4,"\u00ab":-5}},"G":{"d":"107,-224v-89,0,-50,89,-59,157v-8,56,60,59,108,46r0,-85r21,0r0,100v-22,6,-50,10,-73,10v-104,0,-69,-93,-77,-178v-7,-70,80,-78,145,-63r-2,18v-20,-3,-42,-5,-63,-5","w":205,"k":{"}":-11,"]":-9,"\\":-2,"V":2,")":-5,"A":-1,"\u00c0":-1,"\u00c1":-1,"\u00c2":-1,"\u00c3":-1,"\u00c4":-1,"\u00c5":-1,"T":1,"Y":6,"\u00dd":6,"-":-2,"\u00ab":-5}},"H":{"d":"191,0r-21,0r0,-114r-116,0r0,114r-22,0r0,-240r22,0r0,107r116,0r0,-107r21,0r0,240","w":223},"I":{"d":"55,-240r0,240r-21,0r0,-240r21,0","w":89},"J":{"d":"32,-240r22,0r0,238v0,30,-3,31,-44,71r-14,-15v35,-35,36,-36,36,-54r0,-240","w":84,"k":{"A":2,"\u00c0":2,"\u00c1":2,"\u00c2":2,"\u00c3":2,"\u00c4":2,"\u00c5":2}},"K":{"d":"54,-240r0,240r-22,0r0,-240r22,0xm184,-240r-97,118r103,122r-26,0r-102,-122r95,-118r27,0","w":204,"k":{"}":-5,"x":-2,"v":14,"q":9,"p":2,"m":2,"g":13,"d":9,"]":-5,"\\":4,"X":-2,"Q":14,"@":16,"*":5,")":-2,"C":11,"\u00c7":11,"G":11,"O":14,"\u00d2":14,"\u00d3":14,"\u00d4":14,"\u00d5":14,"\u00d6":14,"\u00d8":14,"S":7,"T":5,"Y":5,"\u00dd":5,"n":2,"a":9,"\u00e1":9,"\u00e6":9,"c":8,"\u00e7":8,"e":9,"\u00e9":9,"o":9,"\u00f3":9,"\u00f8":9,"s":5,"t":7,"u":9,"\u00fa":9,"w":7,":":4,";":4,"-":38,"y":14,"\u00fd":14,"\u00ab":13,"\u00bb":4,"U":5,"\u00d9":5,"\u00da":5,"\u00db":5,"\u00dc":5}},"L":{"d":"54,-240r0,221r108,0r0,19r-130,0r0,-240r22,0","w":177,"k":{"\u00ae":54,"}":-4,"x":-5,"v":16,"g":11,"d":4,"\\":22,"V":34,"Q":13,"@":7,"?":13,"\/":-5,"*":54,"!":-4,"A":-1,"\u00c0":-1,"\u00c1":-1,"\u00c2":-1,"\u00c3":-1,"\u00c4":-1,"\u00c5":-1,"C":10,"\u00c7":10,"G":10,"O":13,"\u00d2":13,"\u00d3":13,"\u00d4":13,"\u00d5":13,"\u00d6":13,"\u00d8":13,"S":5,"T":41,"W":26,"Y":40,"\u00dd":40,"a":4,"\u00e1":4,"\u00e6":4,"c":2,"\u00e7":2,"e":4,"\u00e9":4,"f":11,"o":4,"\u00f3":4,"\u00f8":4,"s":2,"t":11,"u":2,"\u00fa":2,"w":9,",":-3,".":-3,":":4,";":4,"-":56,"y":16,"\u00fd":16,"\u00ab":5,"\u00bb":2,"U":11,"\u00d9":11,"\u00da":11,"\u00db":11,"\u00dc":11}},"M":{"d":"234,0r-5,-219r-70,188r-32,0r-70,-188r-5,219r-21,0r7,-240r31,0r74,196r74,-196r31,0r8,240r-22,0","w":286,"k":{"x":-2,"\\":-2,"\/":4,"A":-1,"\u00c0":-1,"\u00c1":-1,"\u00c2":-1,"\u00c3":-1,"\u00c4":-1,"\u00c5":-1,"e":1,"\u00e9":1,"o":1,"\u00f3":1,"\u00f8":1,":":3,";":3,"-":3,"\u00ab":2,"\u00bb":2}},"N":{"d":"166,0r-113,-219r0,219r-21,0r0,-240r31,0r114,219r0,-219r20,0r0,240r-31,0","w":229},"O":{"d":"195,-172v0,90,24,176,-84,176v-107,0,-84,-86,-84,-176v0,-41,22,-71,84,-71v62,0,84,30,84,71xm111,-15v90,0,63,-83,63,-156v0,-34,-17,-53,-63,-53v-90,0,-63,83,-63,156v0,34,17,53,63,53","w":221,"k":{"V":4,"X":2,"\/":5,"\\":-2,")":5,"]":4,"}":4,"T":8,"W":3,"Y":5,"\u00dd":5,",":5,".":5,":":4,";":4,"A":4,"\u00c0":4,"\u00c1":4,"\u00c2":4,"\u00c3":4,"\u00c4":4,"\u00c5":4,"Z":3}},"P":{"d":"32,0r0,-240r82,0v65,1,66,36,66,93v0,33,-18,56,-66,56r-60,0r0,91r-22,0xm158,-147v0,-42,3,-74,-44,-74r-60,0r0,110v44,-2,104,12,104,-36","w":195,"k":{"}":-4,"x":-5,"v":-9,"d":1,"]":-4,"\\":-9,"X":6,"\/":18,"*":-14,"!":-4,"A":21,"\u00c0":21,"\u00c1":21,"\u00c2":21,"\u00c3":21,"\u00c4":21,"\u00c5":21,"Z":4,"a":1,"\u00e1":1,"\u00e6":1,"f":-4,"t":-5,"w":-7,",":45,".":45,":":5,";":5,"-":3,"y":-7,"\u00fd":-7,"\u00ab":2}},"Q":{"d":"153,50r-19,8r-24,-54v-106,2,-83,-86,-83,-176v0,-41,22,-71,84,-71v108,0,84,85,84,175v0,36,-18,64,-63,70xm111,-15v90,0,63,-83,63,-156v0,-34,-17,-53,-63,-53v-90,0,-63,83,-63,156v0,34,17,53,63,53","w":221,"k":{"}":4,"]":4,"\\":2,"X":2,"V":4,"\/":5,")":5,"A":4,"\u00c0":4,"\u00c1":4,"\u00c2":4,"\u00c3":4,"\u00c4":4,"\u00c5":4,"T":8,"W":3,"Y":5,"\u00dd":5,"Z":3,",":5,".":5,":":4,";":4}},"R":{"d":"184,0r-62,-92r-68,0r0,92r-22,0r0,-240r85,0v64,1,66,35,66,92v0,26,-11,46,-39,53r64,95r-24,0xm162,-148v0,-42,2,-73,-44,-73r-64,0r0,110v45,-2,108,12,108,-37","w":222,"k":{"}":-5,"x":-5,"v":2,"g":4,"d":3,"\\":4,"V":13,"Q":5,"\/":-4,"!":-4,"A":-1,"\u00c0":-1,"\u00c1":-1,"\u00c2":-1,"\u00c3":-1,"\u00c4":-1,"\u00c5":-1,"C":4,"\u00c7":4,"G":4,"O":5,"\u00d2":5,"\u00d3":5,"\u00d4":5,"\u00d5":5,"\u00d6":5,"\u00d8":5,"T":13,"W":7,"Y":15,"\u00dd":15,"a":2,"\u00e1":2,"\u00e6":2,"c":1,"\u00e7":1,"e":2,"\u00e9":2,"o":2,"\u00f3":2,"\u00f8":2,"u":2,"\u00fa":2,",":-1,".":-1,":":2,";":2,"-":14,"y":4,"\u00fd":4,"\u00ab":4,"U":4,"\u00d9":4,"\u00da":4,"\u00db":4,"\u00dc":4}},"S":{"d":"169,-59v0,39,-13,63,-74,63v-21,0,-47,-4,-68,-12r4,-17v43,13,117,24,117,-33v0,-37,-1,-42,-54,-54v-58,-13,-64,-24,-64,-72v0,-39,14,-59,74,-59v21,0,46,3,62,8r-3,18v-40,-9,-126,-18,-112,34v0,39,1,40,51,53v63,16,67,26,67,71","w":195,"k":{"}":-5,"v":1,"g":3,"\\":-2,"V":4,"\/":5,"A":3,"\u00c0":3,"\u00c1":3,"\u00c2":3,"\u00c3":3,"\u00c4":3,"\u00c5":3,"T":3,"W":2,"Y":7,"\u00dd":7,"a":1,"\u00e1":1,"\u00e6":1,"e":1,"\u00e9":1,"o":1,"\u00f3":1,"\u00f8":1,"t":5,"u":2,"\u00fa":2,",":2,".":2,":":2,";":2,"y":2,"\u00fd":2,"\u00ab":-4}},"T":{"d":"83,0r0,-221r-74,0r0,-19r169,0r0,19r-74,0r0,221r-21,0","w":186,"k":{"v":29,"x":25,"Q":8,"\/":25,"\\":-9,")":-5,"?":-11,"!":-5,"*":-11,"\u00ae":-11,"g":33,"]":-5,"d":31,"}":-4,"m":30,"p":30,"q":27,"M":2,"C":7,"\u00c7":7,"O":8,"\u00d2":8,"\u00d3":8,"\u00d4":8,"\u00d5":8,"\u00d6":8,"\u00d8":8,"W":-1,"Y":-2,"\u00dd":-2,"e":30,"\u00e9":30,"o":30,"\u00f3":30,"\u00f8":30,"y":29,"\u00fd":29,"f":8,"z":30,"G":7,",":38,".":38,":":36,";":36,"\u00ab":23,"\u00bb":20,"-":38,"t":11,"a":30,"\u00e1":30,"\u00e6":30,"c":29,"\u00e7":29,"s":32,"w":25,"A":23,"\u00c0":23,"\u00c1":23,"\u00c2":23,"\u00c3":23,"\u00c4":23,"\u00c5":23,"u":30,"\u00fa":30,"n":30,"r":32,"S":6}},"U":{"d":"175,-240r21,0r0,172v0,41,-25,72,-83,72v-58,0,-82,-31,-82,-72r0,-172r21,0r0,172v0,33,21,53,61,53v40,0,62,-20,62,-53r0,-172","w":226,"k":{"\/":9,"\\":-7,",":9,".":9,":":4,";":4,"A":3,"\u00c0":3,"\u00c1":3,"\u00c2":3,"\u00c3":3,"\u00c4":3,"\u00c5":3}},"V":{"d":"106,-19r78,-221r21,0r-84,240r-29,0r-85,-240r21,0","w":212,"k":{"\u00ae":-11,"}":-5,"x":4,"q":13,"p":11,"m":11,"g":19,"d":17,"]":-4,"\\":-7,"Q":4,"?":-5,"\/":20,"*":-11,")":-7,"!":-4,"A":23,"\u00c0":23,"\u00c1":23,"\u00c2":23,"\u00c3":23,"\u00c4":23,"\u00c5":23,"C":4,"\u00c7":4,"G":4,"O":4,"\u00d2":4,"\u00d3":4,"\u00d4":4,"\u00d5":4,"\u00d6":4,"\u00d8":4,"S":5,"T":-5,"n":11,"a":19,"\u00e1":19,"\u00e6":19,"c":15,"\u00e7":15,"e":15,"\u00e9":15,"o":15,"\u00f3":15,"\u00f8":15,"s":15,"t":4,"u":12,"\u00fa":12,",":38,".":38,":":23,";":23,"-":18,"z":7,"r":13,"\u00ab":16,"\u00bb":13}},"W":{"d":"213,0r-53,-225r-53,225r-33,0r-65,-240r21,0r60,224r53,-224r34,0r54,224r60,-224r20,0r-64,240r-34,0","w":320,"k":{"x":2,"Q":3,"\/":18,"\\":-7,")":-4,"?":-4,"!":-5,"*":-9,"g":14,"]":-5,"d":10,"}":-5,"m":7,"p":7,"q":9,"C":2,"\u00c7":2,"O":3,"\u00d2":3,"\u00d3":3,"\u00d4":3,"\u00d5":3,"\u00d6":3,"\u00d8":3,"T":-2,"e":10,"\u00e9":10,"o":10,"\u00f3":10,"\u00f8":10,"z":5,"G":2,",":30,".":30,":":20,";":20,"\u00ab":13,"\u00bb":10,"-":13,"a":13,"\u00e1":13,"\u00e6":13,"c":11,"\u00e7":11,"s":13,"A":17,"\u00c0":17,"\u00c1":17,"\u00c2":17,"\u00c3":17,"\u00c4":17,"\u00c5":17,"Z":2,"u":6,"\u00fa":6,"n":7,"r":8,"S":1}},"X":{"d":"13,0r80,-122r-78,-118r23,0r66,101r67,-101r23,0r-78,118r80,122r-23,0r-69,-105r-68,105r-23,0","w":208,"k":{"}":-5,"x":-4,"v":11,"q":2,"g":4,"d":4,"]":-5,"\\":-4,"Q":2,"?":-4,"\/":2,")":-5,"!":-9,"A":-3,"\u00c0":-3,"\u00c1":-3,"\u00c2":-3,"\u00c3":-3,"\u00c4":-3,"\u00c5":-3,"C":1,"\u00c7":1,"G":1,"O":2,"\u00d2":2,"\u00d3":2,"\u00d4":2,"\u00d5":2,"\u00d6":2,"\u00d8":2,"S":3,"a":2,"\u00e1":2,"\u00e6":2,"c":3,"\u00e7":3,"e":4,"\u00e9":4,"o":4,"\u00f3":4,"\u00f8":4,"s":2,"t":2,"u":1,"\u00fa":1,",":-2,".":-2,"-":23,"y":11,"\u00fd":11,"\u00ab":11,"\u00bb":5}},"Y":{"d":"27,-240r71,145r70,-145r22,0r-82,166r0,74r-21,0r0,-74r-82,-166r22,0","w":195,"k":{"v":9,"x":13,"Q":5,"\/":27,"\\":-5,")":-2,"?":-5,"*":-5,"g":29,"]":-2,"d":24,"}":-5,"m":20,"p":20,"q":23,"M":3,"C":7,"\u00c7":7,"O":5,"\u00d2":5,"\u00d3":5,"\u00d4":5,"\u00d5":5,"\u00d6":5,"\u00d8":5,"T":-2,"U":1,"\u00d9":1,"\u00da":1,"\u00db":1,"\u00dc":1,"Y":-2,"\u00dd":-2,"e":26,"\u00e9":26,"o":26,"\u00f3":26,"\u00f8":26,"y":9,"\u00fd":9,"f":5,"z":22,"G":7,",":49,".":49,":":32,";":32,"\u00ab":25,"\u00bb":20,"-":31,"t":6,"a":25,"\u00e1":25,"\u00e6":25,"c":23,"\u00e7":23,"s":27,"w":9,"A":26,"\u00c0":26,"\u00c1":26,"\u00c2":26,"\u00c3":26,"\u00c4":26,"\u00c5":26,"Z":4,"u":21,"\u00fa":21,"n":20,"r":22,"S":5}},"Z":{"d":"180,-221r-131,202r133,0r0,19r-157,0r0,-19r131,-202r-127,0r0,-19r151,0r0,19","w":207,"k":{"v":4,"q":5,"g":9,"d":6,"\\":-4,"Q":9,")":-5,"C":7,"\u00c7":7,"G":7,"O":9,"\u00d2":9,"\u00d3":9,"\u00d4":9,"\u00d5":9,"\u00d6":9,"\u00d8":9,"a":5,"\u00e1":5,"\u00e6":5,"c":5,"\u00e7":5,"e":7,"\u00e9":7,"o":7,"\u00f3":7,"\u00f8":7,"s":7,"t":4,"u":4,"\u00fa":4,"w":2,":":2,";":2,"-":25,"y":5,"\u00fd":5,"\u00ab":4,"U":4,"\u00d9":4,"\u00da":4,"\u00db":4,"\u00dc":4}},"[":{"d":"101,45r-65,0r0,-329r65,0r0,19r-44,0r0,291r44,0r0,19","w":111,"k":{"x":-4,"p":-7,"j":-20,"g":-2,"d":4,"X":-5,"V":-4,"Q":4,"@":7,"7":-7,"6":4,"4":5,"3":-4,"2":-5,"1":2,"+":4,"*":2,"%":2,"#":4,"A":2,"\u00c0":2,"\u00c1":2,"\u00c2":2,"\u00c3":2,"\u00c4":2,"\u00c5":2,"C":4,"\u00c7":4,"G":4,"J":-14,"O":4,"\u00d2":4,"\u00d3":4,"\u00d4":4,"\u00d5":4,"\u00d6":4,"\u00d8":4,"S":3,"T":-5,"W":-5,"Y":-2,"\u00dd":-2,"o":2,"\u00f3":2,"\u00f8":2,",":4,".":4,"-":11,"z":-4}},"\\":{"d":"114,42r-89,-285r21,0r89,285r-21,0","w":158,"k":{"x":-5,"v":9,"p":-4,"j":-11,"g":-4,"d":4,"V":25,"Q":7,"M":4,"9":5,"8":7,"7":7,"6":11,"5":5,"4":13,"3":4,"1":11,"0":11,"C":7,"\u00c7":7,"G":7,"J":-14,"O":7,"\u00d2":7,"\u00d3":7,"\u00d4":7,"\u00d5":7,"\u00d6":7,"\u00d8":7,"S":7,"T":25,"W":20,"Y":25,"\u00dd":25,"e":2,"\u00e9":2,"f":4,"s":2,"t":4,"u":2,"\u00fa":2,"w":4,"z":-4,"y":4,"\u00fd":4,"U":9,"\u00d9":9,"\u00da":9,"\u00db":9,"\u00dc":9}},"]":{"d":"76,45r-65,0r0,-19r44,0r0,-291r-44,0r0,-19r65,0r0,329","w":111},"^":{"d":"35,-137r-17,-10r52,-100r23,0r52,100r-16,10r-47,-91","w":163},"_":{"d":"155,13r-154,0r0,-9r154,0r0,9","w":156},"`":{"d":"85,-211r-10,14v-15,-8,-33,-18,-48,-29r10,-16v16,11,34,22,48,31","w":111},"a":{"d":"84,-179v97,0,55,102,64,179r-18,0r-2,-14v-33,25,-105,30,-105,-31v0,-58,52,-49,104,-49v1,-39,3,-66,-42,-66v-17,0,-36,3,-52,6r-3,-18v14,-4,36,-7,54,-7xm127,-33r0,-42v-35,3,-83,-13,-83,30v0,47,59,30,83,12","w":174,"k":{"x":-4,"\\":4,")":2,"w":-3}},"b":{"d":"109,-179v63,-2,45,64,50,121v6,62,-70,71,-128,55r0,-244r20,-3r0,84v14,-8,34,-13,58,-13xm51,-144r0,125v41,10,94,3,88,-39v-6,-41,17,-101,-33,-101v-21,0,-38,6,-55,15","w":182,"k":{"\/":4,")":4,"-":-2}},"c":{"d":"86,-160v-60,0,-42,55,-45,104v-3,46,41,45,82,37r3,18v-53,15,-106,-2,-106,-56v0,-66,-10,-125,66,-122v12,0,28,2,40,5r-3,17v-15,-3,-27,-3,-37,-3","w":144,"k":{"}":-7,"x":-3,"v":-2,"g":1,"d":1,"]":-7,"\/":-2,"*":-4,")":-4,"e":1,"\u00e9":1,"o":1,"\u00f3":1,"\u00f8":1,"w":-1,",":-4,".":-4,":":-4,";":-4,"-":3,"y":-2,"\u00fd":-2,"\u00bb":-5}},"d":{"d":"75,4v-66,0,-46,-71,-50,-129v-4,-54,57,-62,108,-48r0,-74r21,-3r0,250r-19,0r-1,-17v-18,13,-40,21,-59,21xm133,-37r0,-117v-37,-6,-92,-19,-87,29v5,42,-21,111,30,110v22,0,40,-9,57,-22","w":184,"k":{"}":-11,"]":-11,"\\":-4,")":-5}},"e":{"d":"42,-81v-2,41,1,68,46,66v18,0,39,-3,56,-8r3,17v-16,6,-39,10,-60,10v-72,1,-66,-54,-65,-119v0,-36,16,-64,65,-64v63,1,66,41,64,98r-109,0xm87,-161v-39,0,-47,23,-45,61r88,0v2,-37,-3,-61,-43,-61","w":172,"k":{"}":-4,"x":-2,"v":1,"]":-11,"\\":4,"\/":-2,")":-4,"a":3,"\u00e1":3,"\u00e6":3,",":-3,".":-3,":":-3,";":-3,"-":-3,"y":1,"\u00fd":1,"\u00ab":-1}},"f":{"d":"127,-249r-3,16v-27,-4,-58,-10,-58,23r0,35r54,0r-2,18r-52,0r0,157r-21,0r0,-157r-32,0r0,-18r32,0v-3,-44,2,-82,46,-79v10,0,26,2,36,5","w":128,"k":{"v":-2,"x":-2,"\/":16,"\\":-18,")":-13,"?":-13,"!":-7,"*":-18,"\u00ae":-14,"g":8,"]":-18,"@":-7,"d":5,"}":-16,"q":2,"e":5,"\u00e9":5,"o":5,"\u00f3":5,"\u00f8":5,"y":-2,"\u00fd":-2,",":32,".":32,":":5,";":5,"\u00ab":6,"-":13,"a":6,"\u00e1":6,"\u00e6":6,"c":4,"\u00e7":4,"s":4,"w":-2}},"g":{"d":"143,27v3,-51,-110,-5,-110,-60v0,-9,3,-21,16,-30v-45,-28,-36,-125,42,-116v26,3,48,6,77,4r0,15r-21,2v31,51,-2,124,-80,102v-15,12,-22,34,2,36v41,4,100,3,94,46v10,57,-85,55,-136,40r3,-17v31,10,126,16,113,-22xm138,-114v1,-34,-10,-47,-47,-47v-37,0,-48,13,-47,47v0,33,15,42,47,42v32,0,47,-10,47,-42","w":184,"k":{"}":-11,"x":-4,"v":-4,"j":-9,"g":3,"d":2,"]":-13,"\/":-9,"*":-9,")":-4,"a":2,"\u00e1":2,"\u00e6":2,"e":2,"\u00e9":2,"o":2,"\u00f3":2,"\u00f8":2,"w":-2,",":2,".":2,"-":1,"y":-5,"\u00fd":-5,"\u00ab":-1,"\u00bb":-2}},"h":{"d":"159,0r-21,0r0,-142v0,-13,-7,-17,-19,-17v-14,0,-46,8,-68,20r0,139r-20,0r0,-247r20,-3r0,90v34,-17,108,-38,108,21r0,139","k":{"}":4,"\\":2}},"i":{"d":"51,0r-20,0r0,-175r20,0r0,175xm51,-208r-20,0r0,-39r20,0r0,39","w":82},"j":{"d":"31,-175r20,0r0,188v0,26,-4,30,-40,62r-14,-16v30,-27,34,-29,34,-50r0,-184xm51,-208r-20,0r0,-39r20,0r0,39","w":80,"k":{"\/":2}},"k":{"d":"51,0r-20,0r0,-247r20,-3r0,250xm130,-175r26,0r-70,86r73,89r-27,0r-71,-89","w":169,"k":{"x":-4,"g":4,"d":3,"\\":4,"a":3,"\u00e1":3,"\u00e6":3,"c":3,"\u00e7":3,"e":3,"\u00e9":3,"o":3,"\u00f3":3,"\u00f8":3,"s":1,"-":16,"\u00ab":7}},"l":{"d":"51,0r-20,0r0,-247r20,-3r0,250","w":82},"m":{"d":"266,0r-21,0r0,-142v0,-13,-7,-17,-19,-17v-17,0,-45,8,-67,20r0,139r-21,0r0,-142v0,-13,-7,-17,-19,-17v-14,0,-46,8,-68,20r0,139r-20,0r0,-175r18,0r1,16v30,-14,91,-37,106,0v35,-17,110,-41,110,20r0,139","w":294,"k":{"\\":2}},"n":{"d":"159,0r-21,0r0,-142v0,-13,-7,-17,-19,-17v-14,0,-46,8,-68,20r0,139r-20,0r0,-175r18,0r1,16v34,-18,109,-40,109,20r0,139","k":{"\\":2}},"o":{"d":"158,-115v0,66,5,119,-68,119v-73,-1,-68,-53,-68,-119v0,-36,19,-64,68,-64v49,0,68,28,68,64xm90,-15v57,0,47,-51,47,-101v0,-30,-14,-44,-47,-44v-57,0,-48,50,-48,101v0,30,15,44,48,44","w":179,"k":{"\/":2,"\\":2,")":4,"]":2,"}":4,",":4,".":4,":":1,";":1}},"p":{"d":"110,-179v65,0,44,72,49,129v4,54,-57,62,-108,48r0,73r-20,3r0,-249r19,0r1,16v18,-13,40,-20,59,-20xm51,-138r0,117v37,6,93,18,88,-29v-4,-42,21,-112,-31,-110v-22,0,-40,9,-57,22","w":183,"k":{"}":2,"\\":5,"\/":2,")":4,":":1,";":1}},"q":{"d":"74,4v-62,2,-46,-64,-51,-121v-5,-62,71,-71,129,-55r0,243r-21,3r0,-84v-14,8,-33,14,-57,14xm131,-32r0,-124v-40,-10,-93,-4,-87,38v6,41,-17,101,33,101v21,0,37,-6,54,-15","w":182,"k":{"}":-5,"]":-7,"\\":2,")":-4}},"r":{"d":"104,-179r3,21v-18,8,-39,21,-56,32r0,126r-20,0r0,-175r18,0r1,26v19,-12,37,-24,54,-30","w":112,"k":{"}":-9,"x":-3,"v":-7,"g":2,"d":1,"]":-11,"\\":-4,"\/":4,"*":-9,")":-4,"a":3,"\u00e1":3,"\u00e6":3,"c":-1,"\u00e7":-1,"e":-1,"\u00e9":-1,"f":-2,"o":2,"\u00f3":2,"\u00f8":2,"s":1,"t":-1,"w":-5,",":25,".":25,":":4,";":4,"-":4,"y":-8,"\u00fd":-8,"\u00bb":-7}},"s":{"d":"135,-44v12,52,-71,55,-110,39r4,-17v30,9,85,17,85,-22v0,-25,-1,-28,-41,-37v-44,-10,-47,-21,-47,-53v0,-48,65,-52,107,-39r-2,18v-28,-5,-92,-15,-84,22v0,24,2,27,34,35v51,13,54,21,54,54","w":156,"k":{"]":-5,")":2,":":1,";":1,"-":4,"\u00bb":-4}},"t":{"d":"117,-19r4,16v-29,11,-76,14,-76,-31r0,-123r-34,0r0,-18r34,0r0,-42r21,-3r0,45r53,0r-2,18r-51,0r0,121v-5,29,31,23,51,17","w":133,"k":{"}":-7,"x":-4,"v":-2,"g":1,"d":1,"]":-4,"\\":-5,"\/":-5,")":-4,"a":1,"\u00e1":1,"\u00e6":1,"e":1,"\u00e9":1,"o":1,"\u00f3":1,"\u00f8":1,"w":-3,",":-5,".":-5,"-":10,"y":-2,"\u00fd":-2,"\u00bb":-4}},"u":{"d":"29,-175r21,0r0,142v0,13,7,17,19,17v14,0,45,-8,67,-20r0,-139r21,0r0,175r-18,0r-2,-16v-33,18,-108,40,-108,-20r0,-139"},"v":{"d":"156,-175r-59,175r-32,0r-60,-175r22,0r54,160r54,-160r21,0","w":161,"k":{"x":-2,"v":-1,"\/":4,"*":-7,")":4,"a":2,"\u00e1":2,"\u00e6":2,"f":-2,"t":-3,"w":-1,",":25,".":25,":":6,";":6,"y":-1,"\u00fd":-1}},"w":{"d":"80,0r-31,0r-40,-175r20,0r36,161r47,-161r28,0r48,161r36,-161r20,0r-40,175r-32,0r-46,-160","w":252,"k":{"v":-4,"x":-2,"\/":2,"\\":-4,")":2,"*":-7,"g":1,"y":-4,"\u00fd":-4,"f":-2,",":18,".":18,":":5,";":5,"t":-2,"a":2,"\u00e1":2,"\u00e6":2,"w":-3}},"x":{"d":"32,0r-23,0r59,-88r-58,-87r22,0r47,70r47,-70r23,0r-59,87r60,88r-23,0r-48,-72","w":158,"k":{"}":-5,"x":-2,"v":-3,"d":1,"]":-4,"\\":-2,"\/":-5,"*":-7,")":-2,"w":-3,",":-1,".":-1,"-":8,"y":-3,"\u00fd":-3,"\u00ab":4}},"y":{"d":"156,-175r-85,246r-21,0r27,-71r-12,0r-60,-175r22,0r54,160r54,-160r21,0","w":159,"k":{"x":-4,"v":-2,"g":2,"d":1,"\\":-4,"\/":4,"*":-14,"a":3,"\u00e1":3,"\u00e6":3,"e":1,"\u00e9":1,"f":-2,"t":-4,"w":-2,",":25,".":25,"y":-2,"\u00fd":-2}},"z":{"d":"22,-158r1,-17r113,0r0,17r-94,141r97,0r0,17r-119,0r0,-17r94,-141r-92,0","w":157,"k":{"g":2,"]":-4,"\/":-7,"a":1,"\u00e1":1,"\u00e6":1,"-":5}},"{":{"d":"22,-126v14,1,22,-3,21,-15v8,-61,-32,-160,61,-143r0,18v-18,1,-40,-5,-40,15r0,109v0,13,-5,25,-23,25v18,1,23,13,23,26r0,109v-1,20,23,13,40,14r0,19v-34,3,-61,-3,-61,-36r0,-108v1,-12,-8,-15,-21,-14r0,-19","w":111,"k":{"x":-5,"q":2,"p":-7,"m":2,"j":-18,"d":4,"X":-5,"V":-5,"Q":4,"@":11,"9":2,"8":2,"7":-9,"4":4,"3":-4,"2":-5,"0":2,"+":14,"*":4,"C":2,"\u00c7":2,"G":4,"J":-14,"O":4,"\u00d2":4,"\u00d3":4,"\u00d4":4,"\u00d5":4,"\u00d6":4,"\u00d8":4,"T":-4,"W":-5,"Y":-5,"\u00dd":-5,"n":2,"a":4,"\u00e1":4,"\u00e6":4,"c":2,"\u00e7":2,"e":4,"\u00e9":4,"f":4,"o":4,"\u00f3":4,"\u00f8":4,",":7,".":7,":":7,";":7,"-":11,"r":2}},"|":{"d":"52,-284r0,360r-14,0r0,-360r14,0","w":89},"}":{"d":"68,-141v-1,12,8,16,22,15r0,19v-14,-1,-23,2,-22,14v-8,61,31,160,-61,144r0,-19v17,-1,40,6,40,-14r0,-109v0,-13,5,-25,23,-26v-18,0,-23,-12,-23,-25r0,-109v1,-20,-22,-14,-40,-15r0,-18v34,-2,61,2,61,35r0,108","w":111},"~":{"d":"149,-123r15,6v-7,20,-18,41,-44,41v-27,0,-38,-28,-58,-28v-14,0,-21,11,-29,30r-15,-7v9,-24,22,-40,44,-40v27,0,39,28,59,28v16,0,22,-15,28,-30","w":178},"\u00a0":{"w":79},"\u00a1":{"d":"39,-114r12,0v7,57,5,122,5,185r-21,0r0,-124xm34,-144r0,-31r23,0r0,31r-23,0","w":90},"\u00a2":{"d":"77,4r0,-33v-66,-2,-55,-60,-55,-122v0,-35,14,-57,55,-60r0,-33r20,0r0,33v10,1,22,2,31,5r-3,17v-41,-8,-86,-9,-83,37v3,50,-14,104,46,104v10,0,22,0,37,-3r3,17v-9,3,-21,4,-31,5r0,33r-20,0","w":151,"k":{"7":-9,"4":-4,"1":-7}},"\u00a3":{"d":"29,-111r0,-18r33,0v-27,-44,-30,-107,48,-107v17,0,39,3,53,7r-4,18v-32,-8,-102,-17,-93,28v0,19,7,36,19,54r72,0r-2,18r-62,0v9,38,-3,59,-31,92r107,0r0,19r-134,0r0,-19v28,-25,51,-55,36,-92r-42,0","w":196,"k":{"7":-11,"3":-5,"2":-5,"1":-4}},"\u00a4":{"d":"167,-197r-22,23v12,26,11,78,0,107r22,23r-13,13r-24,-23v-14,8,-52,8,-66,0r-23,23r-14,-13r22,-23v-11,-25,-11,-79,0,-107r-22,-23r14,-14r23,24v14,-8,52,-8,66,0r24,-24xm97,-175v-49,0,-35,38,-35,76v0,22,5,33,35,33v49,0,35,-38,35,-76v0,-22,-5,-33,-35,-33","w":194},"\u00a5":{"d":"24,-111r0,-17r36,0r-51,-105r22,0r67,138r67,-138r21,0r-51,105r36,0r0,17r-44,0v-6,15,-18,25,-19,45r63,0r0,16r-63,0r0,50r-21,0r0,-50r-63,0r0,-16r63,0v-1,-20,-13,-29,-18,-45r-45,0","w":195,"k":{"7":-16,"3":-5,"2":-5,"1":-14}},"\u00a6":{"d":"52,-284r0,150r-14,0r0,-150r14,0xm52,76r-14,0r0,-151r14,0r0,151","w":89},"\u00a7":{"d":"92,-6r-19,6v-26,-77,-48,-150,-48,-204v0,-50,60,-42,98,-31r-3,16v-31,-4,-74,-19,-74,17v0,53,23,124,46,196xm111,-171r19,-5v26,77,48,149,48,203v0,51,-61,43,-98,31r3,-16v30,5,74,21,74,-16v0,-53,-23,-125,-46,-197","w":201},"\u00a8":{"d":"29,-201r0,-24r22,0r0,24r-22,0xm90,-201r0,-24r22,0r0,24r-22,0","w":141},"\u00a9":{"d":"25,-120v0,-68,49,-124,124,-124v75,0,123,56,123,124v0,68,-48,124,-123,124v-75,0,-124,-56,-124,-124xm42,-120v0,60,41,108,107,108v66,0,106,-48,106,-108v0,-60,-40,-108,-106,-108v-66,0,-107,48,-107,108xm149,-57v-55,4,-39,-44,-43,-89v-4,-40,48,-42,80,-32r-2,14v-24,-4,-67,-12,-62,19v5,32,-17,73,28,73v8,0,24,-2,34,-4r2,14v-10,3,-24,5,-37,5","w":297},"\u00aa":{"d":"67,-251v61,-4,31,63,38,109v-7,0,-16,2,-14,-7v-20,13,-67,15,-62,-22v-3,-36,29,-30,61,-30v0,-21,4,-36,-22,-36v-12,0,-22,1,-32,4r-3,-13v9,-3,21,-5,34,-5xm90,-163r0,-24v-19,2,-46,-8,-46,16v0,28,33,17,46,8","w":136},"\u00ab":{"d":"20,-88r46,-69r16,10r-39,59r39,59r-16,11xm87,-88r46,-69r16,10r-39,59r39,59r-16,11","w":172,"k":{"V":13,"X":5,"M":2,"1":6,"7":2,"T":20,"W":10,"Y":20,"\u00dd":20,"t":-2,"A":4,"\u00c0":4,"\u00c1":4,"\u00c2":4,"\u00c3":4,"\u00c4":4,"\u00c5":4,"S":1}},"\u00ac":{"d":"23,-78r0,-19r147,0r0,83r-20,0r0,-64r-127,0","w":203},"\u00ae":{"d":"25,-185v0,-36,25,-66,65,-66v40,0,65,30,65,66v0,36,-25,65,-65,65v-40,0,-65,-29,-65,-65xm38,-185v0,29,18,53,52,53v34,0,53,-24,53,-53v0,-29,-19,-54,-53,-54v-34,0,-52,25,-52,54xm120,-157v-24,4,-13,-25,-40,-20r0,20r-9,0r0,-60v23,-1,47,-3,41,25v0,6,-3,10,-9,13xm103,-192v3,-16,-7,-19,-23,-17r0,24v9,-1,24,3,23,-7","w":180},"\u00af":{"d":"25,-204r0,-17r85,0r0,17r-85,0","w":135},"\u00b0":{"d":"102,-198v0,21,-14,37,-38,37v-24,0,-37,-16,-37,-37v0,-21,13,-38,37,-38v24,0,38,17,38,38xm89,-198v0,-14,-9,-27,-25,-27v-16,0,-24,13,-24,27v0,13,8,26,24,26v16,0,25,-13,25,-26","w":128},"\u00b1":{"d":"29,-107r0,-19r63,0r0,-64r20,0r0,64r63,0r0,19r-63,0r0,64r-20,0r0,-64r-63,0xm175,-19r0,19r-146,0r0,-19r146,0","w":203},"\u00b2":{"d":"106,-203v13,29,-50,87,-55,99r57,0r0,17r-81,0r0,-15v17,-25,68,-72,61,-99v6,-27,-40,-19,-58,-14r-3,-15v29,-10,86,-9,79,27","w":138},"\u00b3":{"d":"25,-90r3,-15v30,8,70,11,61,-29v2,-24,-30,-19,-53,-19r0,-16v29,1,58,3,49,-34v1,-24,-34,-17,-55,-14r-3,-15v40,-10,87,-4,76,46v0,12,-4,19,-15,25v32,16,27,76,-29,76v-9,0,-22,-2,-34,-5","w":134},"\u00b4":{"d":"37,-197r-10,-14r47,-31r11,16v-15,11,-33,21,-48,29","w":111},"\u00b5":{"d":"29,71r0,-246r21,0r0,142v0,13,7,17,19,17v14,0,45,-8,67,-20r0,-139r21,0r0,175r-18,0r-2,-16v-25,10,-59,26,-87,17r0,70r-21,0"},"\u00b6":{"d":"125,-240r20,0r0,261v0,13,0,15,-40,54r-12,-14v30,-30,32,-33,32,-39r0,-262xm27,-167v0,-41,32,-73,73,-73r0,145v-41,0,-73,-31,-73,-72","w":180},"\u00b7":{"d":"32,-100r0,-31r23,0r0,31r-23,0","w":87},"\u00b8":{"d":"87,47v2,27,-40,34,-62,22r3,-12v13,4,45,6,43,-9v1,-15,-26,-13,-38,-9r8,-39r16,0r-6,25v18,-4,35,4,36,22","w":112},"\u00b9":{"d":"29,-197r-7,-13v18,-7,26,-24,53,-23r0,146r-18,0r0,-125","w":118},"\u00ba":{"d":"71,-251v43,0,42,32,41,72v0,22,-11,39,-41,39v-44,0,-43,-32,-42,-72v0,-22,12,-39,42,-39xm71,-153v33,0,25,-30,26,-59v0,-16,-7,-25,-26,-25v-32,0,-27,29,-27,58v0,17,9,26,27,26","w":141},"\u00bb":{"d":"106,-159r46,69r-46,70r-16,-11r39,-59r-39,-58xm39,-159r46,69r-46,70r-16,-11r39,-59r-39,-58","w":172,"k":{"V":16,"X":11,"x":4,"*":7,"M":2,"1":4,"4":-7,"%":4,"5":4,"7":4,"9":4,"T":23,"W":13,"Y":25,"\u00dd":25,"y":2,"\u00fd":2,"f":2,"t":5,"s":4,"A":6,"\u00c0":6,"\u00c1":6,"\u00c2":6,"\u00c3":6,"\u00c4":6,"\u00c5":6,"Z":4,"S":9}},"\u00bc":{"d":"189,-236r-94,245r-15,-5r95,-246xm29,-197r-7,-13v18,-7,26,-24,53,-23r0,146r-18,0r0,-125xm264,-33r-21,0r0,33r-17,0r0,-33r-67,0r0,-17r62,-96r22,0r0,97r21,0r0,16xm178,-49r48,0r0,-78","w":294},"\u00bd":{"d":"189,-236r-94,245r-15,-5r95,-246xm29,-197r-7,-13v18,-7,26,-24,53,-23r0,146r-18,0r0,-125xm265,-115v13,28,-50,87,-55,98r57,0r0,17r-81,0r0,-14v16,-25,68,-72,61,-99v7,-26,-40,-19,-58,-15r-3,-15v29,-11,86,-9,79,28","w":298},"\u00be":{"d":"200,-236r-94,245r-15,-5r94,-246xm275,-33r-21,0r0,33r-17,0r0,-33r-67,0r0,-17r61,-96r23,0r0,97r21,0r0,16xm189,-49r48,0r0,-78xm25,-90r3,-15v30,8,70,11,61,-29v2,-24,-30,-19,-53,-19r0,-16v29,1,58,3,49,-34v1,-24,-34,-17,-55,-14r-3,-15v40,-10,87,-4,76,46v0,12,-4,19,-15,25v32,16,27,76,-29,76v-9,0,-22,-2,-34,-5","w":305},"\u00bf":{"d":"109,-77v-20,21,-72,37,-63,87v-10,58,50,48,94,40r3,18v-17,4,-35,7,-52,7v-56,0,-66,-19,-66,-64v0,-60,42,-75,72,-104xm109,-175r0,34r-22,0r0,-34r22,0","w":164},"\u00c0":{"d":"190,0r-23,-63r-111,0r-23,63r-20,0r83,-240r31,0r84,240r-21,0xm112,-228r-50,147r99,0xm122,-273r-10,15v-15,-8,-31,-17,-45,-27r11,-16v15,11,30,19,44,28","w":223},"\u00c1":{"d":"190,0r-23,-63r-111,0r-23,63r-20,0r83,-240r31,0r84,240r-21,0xm112,-228r-50,147r99,0xm111,-258r-9,-15v14,-9,28,-17,43,-28r11,16v-14,10,-30,19,-45,27","w":223},"\u00c2":{"d":"190,0r-23,-63r-111,0r-23,63r-20,0r83,-240r31,0r84,240r-21,0xm112,-228r-50,147r99,0xm75,-258r-8,-14v15,-9,28,-17,45,-29v15,11,27,18,45,29r-8,14v-17,-9,-25,-13,-37,-21v-12,7,-22,13,-37,21","w":223},"\u00c3":{"d":"190,0r-23,-63r-111,0r-23,63r-20,0r83,-240r31,0r84,240r-21,0xm112,-228r-50,147r99,0xm161,-279v-18,42,-65,-13,-88,16r-9,-11v19,-39,65,12,87,-14","w":223},"\u00c4":{"d":"190,0r-23,-63r-111,0r-23,63r-20,0r83,-240r31,0r84,240r-21,0xm112,-228r-50,147r99,0xm69,-264r0,-22r24,0r0,22r-24,0xm131,-264r0,-22r23,0r0,22r-23,0","w":223},"\u00c5":{"d":"190,0r-23,-63r-111,0r-23,63r-20,0r83,-240r31,0r84,240r-21,0xm112,-228r-50,147r99,0xm134,-272v0,13,-7,23,-22,23v-15,0,-23,-10,-23,-23v0,-13,8,-22,23,-22v15,0,22,9,22,22xm122,-272v0,-7,-3,-11,-10,-11v-7,0,-11,4,-11,11v0,7,4,12,11,12v7,0,10,-5,10,-12","w":223},"\u00c6":{"d":"190,0r-23,-63r-111,0r-23,63r-20,0r83,-240r180,0r0,19r-142,0r30,86r105,0r0,19r-99,0r34,97r73,0r0,19r-87,0xm112,-228r-50,147r99,0","w":302},"\u00c7":{"d":"141,47v2,27,-40,34,-62,22r3,-12v13,4,45,6,43,-9v1,-15,-26,-13,-38,-9r8,-36v-91,-1,-61,-95,-68,-177v-6,-66,71,-78,137,-64r-2,18v-51,-7,-121,-12,-114,46v8,69,-29,159,60,159v15,0,38,-2,54,-5r2,18v-17,3,-37,6,-54,6r-5,21v18,-4,35,4,36,22","w":183},"\u00c8":{"d":"32,0r0,-240r135,0r0,19r-113,0r0,89r105,0r0,19r-105,0r0,94r114,0r0,19r-136,0xm116,-273r-10,15v-15,-8,-30,-17,-44,-27r10,-16v15,11,30,19,44,28","w":192},"\u00c9":{"d":"32,0r0,-240r135,0r0,19r-113,0r0,89r105,0r0,19r-105,0r0,94r114,0r0,19r-136,0xm93,-258r-10,-15v14,-9,29,-17,44,-28r10,16v-14,10,-29,19,-44,27","w":192},"\u00ca":{"d":"32,0r0,-240r135,0r0,19r-113,0r0,89r105,0r0,19r-105,0r0,94r114,0r0,19r-136,0xm65,-258r-8,-14v15,-9,28,-17,45,-29v15,11,27,18,45,29r-8,14v-17,-9,-25,-13,-37,-21v-12,7,-22,13,-37,21","w":192},"\u00cb":{"d":"32,0r0,-240r135,0r0,19r-113,0r0,89r105,0r0,19r-105,0r0,94r114,0r0,19r-136,0xm59,-264r0,-22r24,0r0,22r-24,0xm121,-264r0,-22r24,0r0,22r-24,0","w":192},"\u00cc":{"d":"55,-240r0,240r-21,0r0,-240r21,0xm57,-273r-10,15v-15,-8,-31,-17,-45,-27r11,-16v15,11,30,19,44,28","w":89},"\u00cd":{"d":"55,-240r0,240r-21,0r0,-240r21,0xm44,-258r-9,-15v14,-9,28,-17,43,-28r11,16v-14,10,-30,19,-45,27","w":89},"\u00ce":{"d":"55,-240r0,240r-21,0r0,-240r21,0xm8,-258r-8,-14v15,-9,28,-17,45,-29v15,11,27,18,45,29r-8,14v-17,-9,-25,-13,-37,-21v-12,7,-22,13,-37,21","w":89},"\u00cf":{"d":"55,-240r0,240r-21,0r0,-240r21,0xm2,-264r0,-22r24,0r0,22r-24,0xm64,-264r0,-22r23,0r0,22r-23,0","w":89},"\u00d0":{"d":"18,-113r0,-18r28,0r0,-109r79,0v99,-2,75,86,75,169v0,41,-17,71,-75,71r-79,0r0,-113r-28,0xm67,-221r0,90r51,0r0,18r-51,0r0,94v55,1,118,6,112,-51v-7,-65,25,-156,-54,-151r-58,0","w":225},"\u00d1":{"d":"166,0r-113,-219r0,219r-21,0r0,-240r31,0r114,219r0,-219r20,0r0,240r-31,0xm168,-279v-18,41,-65,-12,-88,16r-9,-11v19,-40,64,12,87,-14","w":229},"\u00d2":{"d":"195,-172v0,90,24,176,-84,176v-107,0,-84,-86,-84,-176v0,-41,22,-71,84,-71v62,0,84,30,84,71xm111,-15v90,0,63,-83,63,-156v0,-34,-17,-53,-63,-53v-90,0,-63,83,-63,156v0,34,17,53,63,53xm126,-273r-9,15v-15,-8,-31,-17,-45,-27r10,-16v15,11,30,19,44,28","w":221,"k":{"V":4,"X":2,"\/":5,"\\":-2,")":5,"]":4,"}":4,"T":8,"W":3,"Y":5,"\u00dd":5,",":5,".":5,":":4,";":4,"A":4,"\u00c0":4,"\u00c1":4,"\u00c2":4,"\u00c3":4,"\u00c4":4,"\u00c5":4,"Z":3}},"\u00d3":{"d":"195,-172v0,90,24,176,-84,176v-107,0,-84,-86,-84,-176v0,-41,22,-71,84,-71v62,0,84,30,84,71xm111,-15v90,0,63,-83,63,-156v0,-34,-17,-53,-63,-53v-90,0,-63,83,-63,156v0,34,17,53,63,53xm107,-258r-10,-15v14,-9,29,-17,44,-28r11,16v-14,10,-30,19,-45,27","w":221,"k":{"V":4,"X":2,"\/":5,"\\":-2,")":5,"]":4,"}":4,"T":8,"W":3,"Y":5,"\u00dd":5,",":5,".":5,":":4,";":4,"A":4,"\u00c0":4,"\u00c1":4,"\u00c2":4,"\u00c3":4,"\u00c4":4,"\u00c5":4,"Z":3}},"\u00d4":{"d":"195,-172v0,90,24,176,-84,176v-107,0,-84,-86,-84,-176v0,-41,22,-71,84,-71v62,0,84,30,84,71xm111,-15v90,0,63,-83,63,-156v0,-34,-17,-53,-63,-53v-90,0,-63,83,-63,156v0,34,17,53,63,53xm74,-258r-8,-14v15,-9,28,-17,45,-29v15,11,27,18,45,29r-8,14v-17,-9,-25,-13,-37,-21v-12,7,-22,13,-37,21","w":221,"k":{"V":4,"X":2,"\/":5,"\\":-2,")":5,"]":4,"}":4,"T":8,"W":3,"Y":5,"\u00dd":5,",":5,".":5,":":4,";":4,"A":4,"\u00c0":4,"\u00c1":4,"\u00c2":4,"\u00c3":4,"\u00c4":4,"\u00c5":4,"Z":3}},"\u00d5":{"d":"195,-172v0,90,24,176,-84,176v-107,0,-84,-86,-84,-176v0,-41,22,-71,84,-71v62,0,84,30,84,71xm111,-15v90,0,63,-83,63,-156v0,-34,-17,-53,-63,-53v-90,0,-63,83,-63,156v0,34,17,53,63,53xm162,-279v-18,42,-65,-12,-88,16r-10,-11v19,-39,65,12,87,-14","w":221,"k":{"V":4,"X":2,"\/":5,"\\":-2,")":5,"]":4,"}":4,"T":8,"W":3,"Y":5,"\u00dd":5,",":5,".":5,":":4,";":4,"A":4,"\u00c0":4,"\u00c1":4,"\u00c2":4,"\u00c3":4,"\u00c4":4,"\u00c5":4,"Z":3}},"\u00d6":{"d":"195,-172v0,90,24,176,-84,176v-107,0,-84,-86,-84,-176v0,-41,22,-71,84,-71v62,0,84,30,84,71xm111,-15v90,0,63,-83,63,-156v0,-34,-17,-53,-63,-53v-90,0,-63,83,-63,156v0,34,17,53,63,53xm68,-264r0,-22r24,0r0,22r-24,0xm130,-264r0,-22r24,0r0,22r-24,0","w":221,"k":{"V":4,"X":2,"\/":5,"\\":-2,")":5,"]":4,"}":4,"T":8,"W":3,"Y":5,"\u00dd":5,",":5,".":5,":":4,";":4,"A":4,"\u00c0":4,"\u00c1":4,"\u00c2":4,"\u00c3":4,"\u00c4":4,"\u00c5":4,"Z":3}},"\u00d7":{"d":"156,-158r12,13r-56,57r56,57r-12,13r-57,-57r-57,57r-13,-13r56,-57r-56,-57r13,-13r57,57","w":197},"\u00d8":{"d":"195,-254r-18,32v31,31,18,98,18,154v0,41,-22,72,-84,72v-23,0,-41,-4,-54,-12r-16,30r-14,-8r18,-32v-31,-31,-18,-98,-18,-154v0,-41,22,-71,84,-71v23,0,41,4,54,12r16,-30xm111,-15v90,0,63,-83,63,-156v0,-13,-3,-24,-8,-32r-99,177v10,7,24,11,44,11xm48,-171v0,44,-7,101,7,134r100,-177v-10,-6,-25,-10,-44,-10v-46,0,-63,19,-63,53","w":221,"k":{"V":4,"X":2,"\/":5,"\\":-2,")":5,"]":4,"}":4,"T":8,"W":3,"Y":5,"\u00dd":5,",":5,".":5,":":4,";":4,"A":4,"\u00c0":4,"\u00c1":4,"\u00c2":4,"\u00c3":4,"\u00c4":4,"\u00c5":4,"Z":3}},"\u00d9":{"d":"175,-240r21,0r0,172v0,41,-25,72,-83,72v-58,0,-82,-31,-82,-72r0,-172r21,0r0,172v0,33,21,53,61,53v40,0,62,-20,62,-53r0,-172xm129,-273r-10,15v-15,-8,-31,-17,-45,-27r11,-16v15,11,30,19,44,28","w":226,"k":{"\/":9,"\\":-7,",":9,".":9,":":4,";":4,"A":3,"\u00c0":3,"\u00c1":3,"\u00c2":3,"\u00c3":3,"\u00c4":3,"\u00c5":3}},"\u00da":{"d":"175,-240r21,0r0,172v0,41,-25,72,-83,72v-58,0,-82,-31,-82,-72r0,-172r21,0r0,172v0,33,21,53,61,53v40,0,62,-20,62,-53r0,-172xm109,-258r-10,-15v14,-9,29,-17,44,-28r10,16v-14,10,-29,19,-44,27","w":226,"k":{"\/":9,"\\":-7,",":9,".":9,":":4,";":4,"A":3,"\u00c0":3,"\u00c1":3,"\u00c2":3,"\u00c3":3,"\u00c4":3,"\u00c5":3}},"\u00db":{"d":"175,-240r21,0r0,172v0,41,-25,72,-83,72v-58,0,-82,-31,-82,-72r0,-172r21,0r0,172v0,33,21,53,61,53v40,0,62,-20,62,-53r0,-172xm77,-258r-8,-14v15,-9,28,-17,45,-29v15,11,26,18,44,29r-7,14v-17,-9,-25,-13,-37,-21v-12,7,-22,13,-37,21","w":226,"k":{"\/":9,"\\":-7,",":9,".":9,":":4,";":4,"A":3,"\u00c0":3,"\u00c1":3,"\u00c2":3,"\u00c3":3,"\u00c4":3,"\u00c5":3}},"\u00dc":{"d":"175,-240r21,0r0,172v0,41,-25,72,-83,72v-58,0,-82,-31,-82,-72r0,-172r21,0r0,172v0,33,21,53,61,53v40,0,62,-20,62,-53r0,-172xm71,-264r0,-22r23,0r0,22r-23,0xm132,-264r0,-22r24,0r0,22r-24,0","w":226,"k":{"\/":9,"\\":-7,",":9,".":9,":":4,";":4,"A":3,"\u00c0":3,"\u00c1":3,"\u00c2":3,"\u00c3":3,"\u00c4":3,"\u00c5":3}},"\u00dd":{"d":"27,-240r71,145r70,-145r22,0r-82,166r0,74r-21,0r0,-74r-82,-166r22,0xm94,-258r-9,-15v14,-9,29,-17,44,-28r10,16v-14,10,-30,19,-45,27","w":195,"k":{"v":9,"x":13,"Q":5,"\/":27,"\\":-5,")":-2,"?":-5,"*":-5,"g":29,"]":-2,"d":24,"}":-5,"m":20,"p":20,"q":23,"M":3,"C":7,"\u00c7":7,"O":5,"\u00d2":5,"\u00d3":5,"\u00d4":5,"\u00d5":5,"\u00d6":5,"\u00d8":5,"T":-2,"U":1,"\u00d9":1,"\u00da":1,"\u00db":1,"\u00dc":1,"Y":-2,"\u00dd":-2,"e":26,"\u00e9":26,"o":26,"\u00f3":26,"\u00f8":26,"y":9,"\u00fd":9,"f":5,"z":22,"G":7,",":49,".":49,":":32,";":32,"\u00ab":25,"\u00bb":20,"-":31,"t":6,"a":25,"\u00e1":25,"\u00e6":25,"c":23,"\u00e7":23,"s":27,"w":9,"A":26,"\u00c0":26,"\u00c1":26,"\u00c2":26,"\u00c3":26,"\u00c4":26,"\u00c5":26,"Z":4,"u":21,"\u00fa":21,"n":20,"r":22,"S":5}},"\u00de":{"d":"32,0r0,-240r22,0r0,44r60,0v65,1,66,36,66,93v0,33,-18,55,-66,55r-60,0r0,48r-22,0xm158,-103v0,-42,3,-74,-44,-74r-60,0r0,110v44,-2,104,12,104,-36","w":195},"\u00df":{"d":"171,-38v14,-28,-73,-54,-59,-81v-1,-25,32,-65,26,-83v0,-21,-12,-34,-41,-34v-28,0,-44,14,-44,50r0,186r-21,0r0,-191v0,-40,25,-63,66,-63v43,0,61,25,61,53v6,19,-27,64,-26,83v0,6,0,12,26,29v29,19,33,24,33,50v10,41,-52,52,-90,36r3,-18v24,6,70,15,66,-17","w":213},"\u00e0":{"d":"84,-179v97,0,55,102,64,179r-18,0r-2,-14v-33,25,-105,30,-105,-31v0,-58,52,-49,104,-49v1,-39,3,-66,-42,-66v-17,0,-36,3,-52,6r-3,-18v14,-4,36,-7,54,-7xm127,-33r0,-42v-35,3,-83,-13,-83,30v0,47,59,30,83,12xm107,-211r-10,14v-15,-8,-33,-18,-48,-29r11,-16","w":174},"\u00e1":{"d":"84,-179v97,0,55,102,64,179r-18,0r-2,-14v-33,25,-105,30,-105,-31v0,-58,52,-49,104,-49v1,-39,3,-66,-42,-66v-17,0,-36,3,-52,6r-3,-18v14,-4,36,-7,54,-7xm127,-33r0,-42v-35,3,-83,-13,-83,30v0,47,59,30,83,12xm76,-197r-10,-14r47,-31r11,16v-15,11,-33,21,-48,29","w":174},"\u00e2":{"d":"84,-179v97,0,55,102,64,179r-18,0r-2,-14v-33,25,-105,30,-105,-31v0,-58,52,-49,104,-49v1,-39,3,-66,-42,-66v-17,0,-36,3,-52,6r-3,-18v14,-4,36,-7,54,-7xm127,-33r0,-42v-35,3,-83,-13,-83,30v0,47,59,30,83,12xm50,-197r-8,-14v15,-9,30,-18,47,-30v15,11,28,20,46,30r-8,14v-16,-8,-26,-15,-38,-22v-12,7,-24,14,-39,22","w":174},"\u00e3":{"d":"84,-179v97,0,55,102,64,179r-18,0r-2,-14v-33,25,-105,30,-105,-31v0,-58,52,-49,104,-49v1,-39,3,-66,-42,-66v-17,0,-36,3,-52,6r-3,-18v14,-4,36,-7,54,-7xm127,-33r0,-42v-35,3,-83,-13,-83,30v0,47,59,30,83,12xm139,-216v-19,40,-65,-13,-88,15r-9,-10v19,-41,64,11,87,-15","w":174},"\u00e4":{"d":"84,-179v97,0,55,102,64,179r-18,0r-2,-14v-33,25,-105,30,-105,-31v0,-58,52,-49,104,-49v1,-39,3,-66,-42,-66v-17,0,-36,3,-52,6r-3,-18v14,-4,36,-7,54,-7xm127,-33r0,-42v-35,3,-83,-13,-83,30v0,47,59,30,83,12xm50,-201r0,-24r23,0r0,24r-23,0xm112,-201r0,-24r22,0r0,24r-22,0","w":174},"\u00e5":{"d":"84,-179v97,0,55,102,64,179r-18,0r-2,-14v-33,25,-105,30,-105,-31v0,-58,52,-49,104,-49v1,-39,3,-66,-42,-66v-17,0,-36,3,-52,6r-3,-18v14,-4,36,-7,54,-7xm127,-33r0,-42v-35,3,-83,-13,-83,30v0,47,59,30,83,12xm112,-218v0,13,-9,23,-24,23v-15,0,-23,-10,-23,-23v0,-13,8,-22,23,-22v15,0,24,9,24,22xm99,-218v0,-7,-4,-12,-11,-12v-7,0,-11,5,-11,12v0,7,4,12,11,12v7,0,11,-5,11,-12","w":174},"\u00e6":{"d":"31,-172v33,-10,93,-13,106,18v13,-17,27,-25,55,-25v63,1,66,41,64,98r-108,0v-2,40,2,68,44,66v15,0,42,-3,57,-7r3,17v-36,11,-98,16,-114,-13v-28,30,-115,37,-115,-28v0,-60,52,-48,104,-49v2,-37,0,-67,-40,-65v-19,0,-36,3,-54,6xm192,-161v-39,0,-46,23,-44,61r87,0v2,-37,-3,-61,-43,-61xm44,-46v0,50,66,31,86,12v-4,-12,-3,-27,-3,-42v-36,4,-83,-16,-83,30","w":277},"\u00e7":{"d":"86,-160v-60,0,-42,55,-45,104v-3,46,41,45,82,37r3,18v-12,3,-27,5,-39,5r-5,21v19,-4,36,3,37,22v2,27,-40,34,-62,22r3,-12v13,4,44,6,42,-9v1,-15,-26,-13,-38,-9r8,-36v-62,-4,-48,-61,-52,-121v-4,-53,52,-71,106,-56r-3,17v-15,-3,-27,-3,-37,-3","w":144},"\u00e8":{"d":"42,-81v-2,41,1,68,46,66v18,0,39,-3,56,-8r3,17v-16,6,-39,10,-60,10v-72,1,-66,-54,-65,-119v0,-36,16,-64,65,-64v63,1,66,41,64,98r-109,0xm87,-161v-39,0,-47,23,-45,61r88,0v2,-37,-3,-61,-43,-61xm105,-211r-9,14v-15,-8,-33,-18,-48,-29r10,-16","w":172},"\u00e9":{"d":"42,-81v-2,41,1,68,46,66v18,0,39,-3,56,-8r3,17v-16,6,-39,10,-60,10v-72,1,-66,-54,-65,-119v0,-36,16,-64,65,-64v63,1,66,41,64,98r-109,0xm87,-161v-39,0,-47,23,-45,61r88,0v2,-37,-3,-61,-43,-61xm77,-197r-9,-14r47,-31r10,16v-15,11,-33,21,-48,29","w":172},"\u00ea":{"d":"42,-81v-2,41,1,68,46,66v18,0,39,-3,56,-8r3,17v-16,6,-39,10,-60,10v-72,1,-66,-54,-65,-119v0,-36,16,-64,65,-64v63,1,66,41,64,98r-109,0xm87,-161v-39,0,-47,23,-45,61r88,0v2,-37,-3,-61,-43,-61xm52,-197r-8,-14v15,-9,30,-18,47,-30v15,11,28,20,46,30r-8,14v-16,-8,-26,-15,-38,-22v-12,7,-24,14,-39,22","w":172},"\u00eb":{"d":"42,-81v-2,41,1,68,46,66v18,0,39,-3,56,-8r3,17v-16,6,-39,10,-60,10v-72,1,-66,-54,-65,-119v0,-36,16,-64,65,-64v63,1,66,41,64,98r-109,0xm87,-161v-39,0,-47,23,-45,61r88,0v2,-37,-3,-61,-43,-61xm45,-201r0,-24r22,0r0,24r-22,0xm106,-201r0,-24r23,0r0,24r-23,0","w":172},"\u00ec":{"d":"51,0r-20,0r0,-175r20,0r0,175xm54,-211r-9,14v-15,-8,-33,-18,-48,-29r10,-16","w":82},"\u00ed":{"d":"51,0r-20,0r0,-175r20,0r0,175xm40,-197r-10,-14r47,-31r11,16v-15,11,-33,21,-48,29","w":82},"\u00ee":{"d":"51,0r-20,0r0,-175r20,0r0,175xm3,-197r-8,-14v15,-9,29,-18,46,-30v15,11,28,20,46,30r-7,14v-16,-8,-27,-15,-39,-22v-12,7,-23,14,-38,22","w":82},"\u00ef":{"d":"51,0r-20,0r0,-175r20,0r0,175xm-1,-201r0,-24r23,0r0,24r-23,0xm60,-201r0,-24r23,0r0,24r-23,0","w":82},"\u00f0":{"d":"70,-197r26,-20v-12,-8,-26,-14,-42,-19r5,-16v20,6,38,14,52,23r23,-18r9,12r-20,15v42,29,36,92,36,160v0,36,-19,64,-68,64v-67,-1,-68,-45,-68,-107v0,-69,77,-77,116,-46v0,-24,-10,-44,-30,-59r-30,23xm91,-15v61,0,47,-58,48,-111v-18,-29,-95,-35,-95,23v0,47,-5,88,47,88","w":184},"\u00f1":{"d":"159,0r-21,0r0,-142v0,-13,-7,-17,-19,-17v-14,0,-46,8,-68,20r0,139r-20,0r0,-175r18,0r1,16v34,-18,109,-40,109,20r0,139xm144,-216v-18,41,-65,-13,-87,15r-10,-10v19,-40,64,11,87,-15"},"\u00f2":{"d":"158,-115v0,66,5,119,-68,119v-73,-1,-68,-53,-68,-119v0,-36,19,-64,68,-64v49,0,68,28,68,64xm90,-15v57,0,47,-51,47,-101v0,-30,-14,-44,-47,-44v-57,0,-48,50,-48,101v0,30,15,44,48,44xm112,-211r-10,14v-15,-8,-33,-18,-48,-29r10,-16v16,11,34,22,48,31","w":179},"\u00f3":{"d":"158,-115v0,66,5,119,-68,119v-73,-1,-68,-53,-68,-119v0,-36,19,-64,68,-64v49,0,68,28,68,64xm90,-15v57,0,47,-51,47,-101v0,-30,-14,-44,-47,-44v-57,0,-48,50,-48,101v0,30,15,44,48,44xm82,-197r-10,-14r47,-31r11,16v-15,11,-33,21,-48,29","w":179,"k":{"\/":2,"\\":2,")":4,"]":2,"}":4,",":4,".":4,":":1,";":1}},"\u00f4":{"d":"158,-115v0,66,5,119,-68,119v-73,-1,-68,-53,-68,-119v0,-36,19,-64,68,-64v49,0,68,28,68,64xm90,-15v57,0,47,-51,47,-101v0,-30,-14,-44,-47,-44v-57,0,-48,50,-48,101v0,30,15,44,48,44xm51,-197r-7,-14v15,-9,29,-18,46,-30v15,11,28,20,46,30r-7,14v-16,-8,-27,-15,-39,-22v-12,7,-24,14,-39,22","w":179},"\u00f5":{"d":"158,-115v0,66,5,119,-68,119v-73,-1,-68,-53,-68,-119v0,-36,19,-64,68,-64v49,0,68,28,68,64xm90,-15v57,0,47,-51,47,-101v0,-30,-14,-44,-47,-44v-57,0,-48,50,-48,101v0,30,15,44,48,44xm141,-216v-19,41,-66,-13,-88,15r-9,-10v18,-41,64,11,86,-15","w":179},"\u00f6":{"d":"158,-115v0,66,5,119,-68,119v-73,-1,-68,-53,-68,-119v0,-36,19,-64,68,-64v49,0,68,28,68,64xm90,-15v57,0,47,-51,47,-101v0,-30,-14,-44,-47,-44v-57,0,-48,50,-48,101v0,30,15,44,48,44xm48,-201r0,-24r22,0r0,24r-22,0xm109,-201r0,-24r22,0r0,24r-22,0","w":179},"\u00f7":{"d":"175,-97r0,19r-146,0r0,-19r146,0xm91,-16r0,-27r22,0r0,27r-22,0xm91,-132r0,-27r22,0r0,27r-22,0","w":203},"\u00f8":{"d":"158,-115v2,66,5,119,-68,119v-17,0,-31,-4,-41,-10r-15,24r-12,-8r15,-25v-22,-21,-10,-61,-15,-100v-6,-52,62,-80,109,-55r14,-23r13,8r-16,25v11,11,16,27,16,45xm42,-116v3,28,-5,63,6,83r73,-120v-31,-16,-84,-5,-79,37xm90,-15v57,4,47,-51,47,-101v0,-10,-2,-19,-6,-26r-72,120v8,5,18,7,31,7","w":179,"k":{"\/":2,"\\":2,")":4,"]":2,"}":4,",":4,".":4,":":1,";":1}},"\u00f9":{"d":"29,-175r21,0r0,142v0,13,7,17,19,17v14,0,45,-8,67,-20r0,-139r21,0r0,175r-18,0r-2,-16v-33,18,-108,40,-108,-20r0,-139xm111,-211r-9,14v-15,-8,-33,-18,-48,-29r10,-16"},"\u00fa":{"d":"29,-175r21,0r0,142v0,13,7,17,19,17v14,0,45,-8,67,-20r0,-139r21,0r0,175r-18,0r-2,-16v-33,18,-108,40,-108,-20r0,-139xm85,-197r-10,-14r47,-31r11,16v-15,11,-33,21,-48,29"},"\u00fb":{"d":"29,-175r21,0r0,142v0,13,7,17,19,17v14,0,45,-8,67,-20r0,-139r21,0r0,175r-18,0r-2,-16v-33,18,-108,40,-108,-20r0,-139xm58,-197r-8,-14v15,-9,29,-18,46,-30v15,11,29,20,47,30r-8,14v-16,-8,-27,-15,-39,-22v-12,7,-23,14,-38,22"},"\u00fc":{"d":"29,-175r21,0r0,142v0,13,7,17,19,17v14,0,45,-8,67,-20r0,-139r21,0r0,175r-18,0r-2,-16v-33,18,-108,40,-108,-20r0,-139xm53,-201r0,-24r23,0r0,24r-23,0xm114,-201r0,-24r23,0r0,24r-23,0"},"\u00fd":{"d":"156,-175r-85,246r-21,0r27,-71r-12,0r-60,-175r22,0r54,160r54,-160r21,0xm74,-197r-10,-14r47,-31r11,16v-15,11,-33,21,-48,29","w":159},"\u00fe":{"d":"32,75r0,-322r21,-3r0,91v35,-29,112,-31,108,29v-4,62,18,136,-54,134v-18,0,-34,-2,-54,-6r0,73xm53,-138r0,117v37,6,92,19,87,-29v-5,-42,21,-111,-30,-110v-22,0,-40,9,-57,22","w":186},"\u00ff":{"d":"156,-175r-85,246r-21,0r27,-71r-12,0r-60,-175r22,0r54,160r54,-160r21,0xm39,-201r0,-24r23,0r0,24r-23,0xm100,-201r0,-24r23,0r0,24r-23,0","w":159}}});
/*
---

name: Core

description: The heart of MooTools.

license: MIT-style license.

copyright: Copyright (c) 2006-2010 [Valerio Proietti](http://mad4milk.net/).

authors: The MooTools production team (http://mootools.net/developers/)

inspiration:
  - Class implementation inspired by [Base.js](http://dean.edwards.name/weblog/2006/03/base/) Copyright (c) 2006 Dean Edwards, [GNU Lesser General Public License](http://opensource.org/licenses/lgpl-license.php)
  - Some functionality inspired by [Prototype.js](http://prototypejs.org) Copyright (c) 2005-2007 Sam Stephenson, [MIT License](http://opensource.org/licenses/mit-license.php)

provides: [Core, MooTools, Type, typeOf, instanceOf, Native]

...
*/

(function(){

this.MooTools = {
	version: '1.3.2dev',
	build: '%build%'
};

// typeOf, instanceOf

var typeOf = this.typeOf = function(item){
	if (item == null) return 'null';
	if (item.$family) return item.$family();

	if (item.nodeName){
		if (item.nodeType == 1) return 'element';
		if (item.nodeType == 3) return (/\S/).test(item.nodeValue) ? 'textnode' : 'whitespace';
	} else if (typeof item.length == 'number'){
		if (item.callee) return 'arguments';
		if ('item' in item) return 'collection';
	}

	return typeof item;
};

var instanceOf = this.instanceOf = function(item, object){
	if (item == null) return false;
	var constructor = item.$constructor || item.constructor;
	while (constructor){
		if (constructor === object) return true;
		constructor = constructor.parent;
	}
	return item instanceof object;
};

// Function overloading

var Function = this.Function;

var enumerables = true;
for (var i in {toString: 1}) enumerables = null;
if (enumerables) enumerables = ['hasOwnProperty', 'valueOf', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'constructor'];

Function.prototype.overloadSetter = function(usePlural){
	var self = this;
	return function(a, b){
		if (a == null) return this;
		if (usePlural || typeof a != 'string'){
			for (var k in a) self.call(this, k, a[k]);
			if (enumerables) for (var i = enumerables.length; i--;){
				k = enumerables[i];
				if (a.hasOwnProperty(k)) self.call(this, k, a[k]);
			}
		} else {
			self.call(this, a, b);
		}
		return this;
	};
};

Function.prototype.overloadGetter = function(usePlural){
	var self = this;
	return function(a){
		var args, result;
		if (usePlural || typeof a != 'string') args = a;
		else if (arguments.length > 1) args = arguments;
		if (args){
			result = {};
			for (var i = 0; i < args.length; i++) result[args[i]] = self.call(this, args[i]);
		} else {
			result = self.call(this, a);
		}
		return result;
	};
};

Function.prototype.extend = function(key, value){
	this[key] = value;
}.overloadSetter();

Function.prototype.implement = function(key, value){
	this.prototype[key] = value;
}.overloadSetter();

// From

var slice = Array.prototype.slice;

Function.from = function(item){
	return (typeOf(item) == 'function') ? item : function(){
		return item;
	};
};

Array.from = function(item){
	if (item == null) return [];
	return (Type.isEnumerable(item) && typeof item != 'string') ? (typeOf(item) == 'array') ? item : slice.call(item) : [item];
};

Number.from = function(item){
	var number = parseFloat(item);
	return isFinite(number) ? number : null;
};

String.from = function(item){
	return item + '';
};

// hide, protect

Function.implement({

	hide: function(){
		this.$hidden = true;
		return this;
	},

	protect: function(){
		this.$protected = true;
		return this;
	}

});

// Type

var Type = this.Type = function(name, object){
	if (name){
		var lower = name.toLowerCase();
		var typeCheck = function(item){
			return (typeOf(item) == lower);
		};

		Type['is' + name] = typeCheck;
		if (object != null){
			object.prototype.$family = (function(){
				return lower;
			}).hide();
			//<1.2compat>
			object.type = typeCheck;
			//</1.2compat>
		}
	}

	if (object == null) return null;

	object.extend(this);
	object.$constructor = Type;
	object.prototype.$constructor = object;

	return object;
};

var toString = Object.prototype.toString;

Type.isEnumerable = function(item){
	return (item != null && typeof item.length == 'number' && toString.call(item) != '[object Function]' );
};

var hooks = {};

var hooksOf = function(object){
	var type = typeOf(object.prototype);
	return hooks[type] || (hooks[type] = []);
};

var implement = function(name, method){
	if (method && method.$hidden) return;

	var hooks = hooksOf(this);

	for (var i = 0; i < hooks.length; i++){
		var hook = hooks[i];
		if (typeOf(hook) == 'type') implement.call(hook, name, method);
		else hook.call(this, name, method);
	}
	
	var previous = this.prototype[name];
	if (previous == null || !previous.$protected) this.prototype[name] = method;

	if (this[name] == null && typeOf(method) == 'function') extend.call(this, name, function(item){
		return method.apply(item, slice.call(arguments, 1));
	});
};

var extend = function(name, method){
	if (method && method.$hidden) return;
	var previous = this[name];
	if (previous == null || !previous.$protected) this[name] = method;
};

Type.implement({

	implement: implement.overloadSetter(),

	extend: extend.overloadSetter(),

	alias: function(name, existing){
		implement.call(this, name, this.prototype[existing]);
	}.overloadSetter(),

	mirror: function(hook){
		hooksOf(this).push(hook);
		return this;
	}

});

new Type('Type', Type);

// Default Types

var force = function(name, object, methods){
	var isType = (object != Object),
		prototype = object.prototype;

	if (isType) object = new Type(name, object);

	for (var i = 0, l = methods.length; i < l; i++){
		var key = methods[i],
			generic = object[key],
			proto = prototype[key];

		if (generic) generic.protect();

		if (isType && proto){
			delete prototype[key];
			prototype[key] = proto.protect();
		}
	}

	if (isType) object.implement(prototype);

	return force;
};

force('String', String, [
	'charAt', 'charCodeAt', 'concat', 'indexOf', 'lastIndexOf', 'match', 'quote', 'replace', 'search',
	'slice', 'split', 'substr', 'substring', 'toLowerCase', 'toUpperCase'
])('Array', Array, [
	'pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift', 'concat', 'join', 'slice',
	'indexOf', 'lastIndexOf', 'filter', 'forEach', 'every', 'map', 'some', 'reduce', 'reduceRight'
])('Number', Number, [
	'toExponential', 'toFixed', 'toLocaleString', 'toPrecision'
])('Function', Function, [
	'apply', 'call', 'bind'
])('RegExp', RegExp, [
	'exec', 'test'
])('Object', Object, [
	'create', 'defineProperty', 'defineProperties', 'keys',
	'getPrototypeOf', 'getOwnPropertyDescriptor', 'getOwnPropertyNames',
	'preventExtensions', 'isExtensible', 'seal', 'isSealed', 'freeze', 'isFrozen'
])('Date', Date, ['now']);

Object.extend = extend.overloadSetter();

Date.extend('now', function(){
	return +(new Date);
});

new Type('Boolean', Boolean);

// fixes NaN returning as Number

Number.prototype.$family = function(){
	return isFinite(this) ? 'number' : 'null';
}.hide();

// Number.random

Number.extend('random', function(min, max){
	return Math.floor(Math.random() * (max - min + 1) + min);
});

// forEach, each

var hasOwnProperty = Object.prototype.hasOwnProperty;
Object.extend('forEach', function(object, fn, bind){
	for (var key in object){
		if (hasOwnProperty.call(object, key)) fn.call(bind, object[key], key, object);
	}
});

Object.each = Object.forEach;

Array.implement({

	forEach: function(fn, bind){
		for (var i = 0, l = this.length; i < l; i++){
			if (i in this) fn.call(bind, this[i], i, this);
		}
	},

	each: function(fn, bind){
		Array.forEach(this, fn, bind);
		return this;
	}

});

// Array & Object cloning, Object merging and appending

var cloneOf = function(item){
	switch (typeOf(item)){
		case 'array': return item.clone();
		case 'object': return Object.clone(item);
		default: return item;
	}
};

Array.implement('clone', function(){
	var i = this.length, clone = new Array(i);
	while (i--) clone[i] = cloneOf(this[i]);
	return clone;
});

var mergeOne = function(source, key, current){
	switch (typeOf(current)){
		case 'object':
			if (typeOf(source[key]) == 'object') Object.merge(source[key], current);
			else source[key] = Object.clone(current);
		break;
		case 'array': source[key] = current.clone(); break;
		default: source[key] = current;
	}
	return source;
};

Object.extend({

	merge: function(source, k, v){
		if (typeOf(k) == 'string') return mergeOne(source, k, v);
		for (var i = 1, l = arguments.length; i < l; i++){
			var object = arguments[i];
			for (var key in object) mergeOne(source, key, object[key]);
		}
		return source;
	},

	clone: function(object){
		var clone = {};
		for (var key in object) clone[key] = cloneOf(object[key]);
		return clone;
	},

	append: function(original){
		for (var i = 1, l = arguments.length; i < l; i++){
			var extended = arguments[i] || {};
			for (var key in extended) original[key] = extended[key];
		}
		return original;
	}

});

// Object-less types

['Object', 'WhiteSpace', 'TextNode', 'Collection', 'Arguments'].each(function(name){
	new Type(name);
});

// Unique ID

var UID = Date.now();

String.extend('uniqueID', function(){
	return (UID++).toString(36);
});

//<1.2compat>

var Hash = this.Hash = new Type('Hash', function(object){
	if (typeOf(object) == 'hash') object = Object.clone(object.getClean());
	for (var key in object) this[key] = object[key];
	return this;
});

Hash.implement({

	forEach: function(fn, bind){
		Object.forEach(this, fn, bind);
	},

	getClean: function(){
		var clean = {};
		for (var key in this){
			if (this.hasOwnProperty(key)) clean[key] = this[key];
		}
		return clean;
	},

	getLength: function(){
		var length = 0;
		for (var key in this){
			if (this.hasOwnProperty(key)) length++;
		}
		return length;
	}

});

Hash.alias('each', 'forEach');

Object.type = Type.isObject;

var Native = this.Native = function(properties){
	return new Type(properties.name, properties.initialize);
};

Native.type = Type.type;

Native.implement = function(objects, methods){
	for (var i = 0; i < objects.length; i++) objects[i].implement(methods);
	return Native;
};

var arrayType = Array.type;
Array.type = function(item){
	return instanceOf(item, Array) || arrayType(item);
};

this.$A = function(item){
	return Array.from(item).slice();
};

this.$arguments = function(i){
	return function(){
		return arguments[i];
	};
};

this.$chk = function(obj){
	return !!(obj || obj === 0);
};

this.$clear = function(timer){
	clearTimeout(timer);
	clearInterval(timer);
	return null;
};

this.$defined = function(obj){
	return (obj != null);
};

this.$each = function(iterable, fn, bind){
	var type = typeOf(iterable);
	((type == 'arguments' || type == 'collection' || type == 'array' || type == 'elements') ? Array : Object).each(iterable, fn, bind);
};

this.$empty = function(){};

this.$extend = function(original, extended){
	return Object.append(original, extended);
};

this.$H = function(object){
	return new Hash(object);
};

this.$merge = function(){
	var args = Array.slice(arguments);
	args.unshift({});
	return Object.merge.apply(null, args);
};

this.$lambda = Function.from;
this.$mixin = Object.merge;
this.$random = Number.random;
this.$splat = Array.from;
this.$time = Date.now;

this.$type = function(object){
	var type = typeOf(object);
	if (type == 'elements') return 'array';
	return (type == 'null') ? false : type;
};

this.$unlink = function(object){
	switch (typeOf(object)){
		case 'object': return Object.clone(object);
		case 'array': return Array.clone(object);
		case 'hash': return new Hash(object);
		default: return object;
	}
};

//</1.2compat>

})();


/*
---

name: Array

description: Contains Array Prototypes like each, contains, and erase.

license: MIT-style license.

requires: Type

provides: Array

...
*/

Array.implement({

	invoke: function(methodName){
		var args = Array.slice(arguments, 1);
		return this.map(function(item){
			return item[methodName].apply(item, args);
		});
	},

	every: function(fn, bind){
		for (var i = 0, l = this.length; i < l; i++){
			if ((i in this) && !fn.call(bind, this[i], i, this)) return false;
		}
		return true;
	},

	filter: function(fn, bind){
		var results = [];
		for (var i = 0, l = this.length; i < l; i++){
			if ((i in this) && fn.call(bind, this[i], i, this)) results.push(this[i]);
		}
		return results;
	},

	clean: function(){
		return this.filter(function(item){
			return item != null;
		});
	},

	indexOf: function(item, from){
		var len = this.length;
		for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++){
			if (this[i] === item) return i;
		}
		return -1;
	},

	map: function(fn, bind){
		var results = [];
		for (var i = 0, l = this.length; i < l; i++){
			if (i in this) results[i] = fn.call(bind, this[i], i, this);
		}
		return results;
	},

	some: function(fn, bind){
		for (var i = 0, l = this.length; i < l; i++){
			if ((i in this) && fn.call(bind, this[i], i, this)) return true;
		}
		return false;
	},

	associate: function(keys){
		var obj = {}, length = Math.min(this.length, keys.length);
		for (var i = 0; i < length; i++) obj[keys[i]] = this[i];
		return obj;
	},

	link: function(object){
		var result = {};
		for (var i = 0, l = this.length; i < l; i++){
			for (var key in object){
				if (object[key](this[i])){
					result[key] = this[i];
					delete object[key];
					break;
				}
			}
		}
		return result;
	},

	contains: function(item, from){
		return this.indexOf(item, from) != -1;
	},

	append: function(array){
		this.push.apply(this, array);
		return this;
	},

	getLast: function(){
		return (this.length) ? this[this.length - 1] : null;
	},

	getRandom: function(){
		return (this.length) ? this[Number.random(0, this.length - 1)] : null;
	},

	include: function(item){
		if (!this.contains(item)) this.push(item);
		return this;
	},

	combine: function(array){
		for (var i = 0, l = array.length; i < l; i++) this.include(array[i]);
		return this;
	},

	erase: function(item){
		for (var i = this.length; i--;){
			if (this[i] === item) this.splice(i, 1);
		}
		return this;
	},

	empty: function(){
		this.length = 0;
		return this;
	},

	flatten: function(){
		var array = [];
		for (var i = 0, l = this.length; i < l; i++){
			var type = typeOf(this[i]);
			if (type == 'null') continue;
			array = array.concat((type == 'array' || type == 'collection' || type == 'arguments' || instanceOf(this[i], Array)) ? Array.flatten(this[i]) : this[i]);
		}
		return array;
	},

	pick: function(){
		for (var i = 0, l = this.length; i < l; i++){
			if (this[i] != null) return this[i];
		}
		return null;
	},

	hexToRgb: function(array){
		if (this.length != 3) return null;
		var rgb = this.map(function(value){
			if (value.length == 1) value += value;
			return value.toInt(16);
		});
		return (array) ? rgb : 'rgb(' + rgb + ')';
	},

	rgbToHex: function(array){
		if (this.length < 3) return null;
		if (this.length == 4 && this[3] == 0 && !array) return 'transparent';
		var hex = [];
		for (var i = 0; i < 3; i++){
			var bit = (this[i] - 0).toString(16);
			hex.push((bit.length == 1) ? '0' + bit : bit);
		}
		return (array) ? hex : '#' + hex.join('');
	}

});

//<1.2compat>

Array.alias('extend', 'append');

var $pick = function(){
	return Array.from(arguments).pick();
};

//</1.2compat>


/*
---

name: Function

description: Contains Function Prototypes like create, bind, pass, and delay.

license: MIT-style license.

requires: Type

provides: Function

...
*/

Function.extend({

	attempt: function(){
		for (var i = 0, l = arguments.length; i < l; i++){
			try {
				return arguments[i]();
			} catch (e){}
		}
		return null;
	}

});

Function.implement({

	attempt: function(args, bind){
		try {
			return this.apply(bind, Array.from(args));
		} catch (e){}
		
		return null;
	},

	bind: function(bind){
		var self = this,
			args = (arguments.length > 1) ? Array.slice(arguments, 1) : null;
		
		return function(){
			if (!args && !arguments.length) return self.call(bind);
			if (args && arguments.length) return self.apply(bind, args.concat(Array.from(arguments)));
			return self.apply(bind, args || arguments);
		};
	},

	pass: function(args, bind){
		var self = this;
		if (args != null) args = Array.from(args);
		return function(){
			return self.apply(bind, args || arguments);
		};
	},

	delay: function(delay, bind, args){
		return setTimeout(this.pass((args == null ? [] : args), bind), delay);
	},

	periodical: function(periodical, bind, args){
		return setInterval(this.pass((args == null ? [] : args), bind), periodical);
	}

});

//<1.2compat>

delete Function.prototype.bind;

Function.implement({

	create: function(options){
		var self = this;
		options = options || {};
		return function(event){
			var args = options.arguments;
			args = (args != null) ? Array.from(args) : Array.slice(arguments, (options.event) ? 1 : 0);
			if (options.event) args = [event || window.event].extend(args);
			var returns = function(){
				return self.apply(options.bind || null, args);
			};
			if (options.delay) return setTimeout(returns, options.delay);
			if (options.periodical) return setInterval(returns, options.periodical);
			if (options.attempt) return Function.attempt(returns);
			return returns();
		};
	},

	bind: function(bind, args){
		var self = this;
		if (args != null) args = Array.from(args);
		return function(){
			return self.apply(bind, args || arguments);
		};
	},

	bindWithEvent: function(bind, args){
		var self = this;
		if (args != null) args = Array.from(args);
		return function(event){
			return self.apply(bind, (args == null) ? arguments : [event].concat(args));
		};
	},

	run: function(args, bind){
		return this.apply(bind, Array.from(args));
	}

});

var $try = Function.attempt;

//</1.2compat>


/*
---

name: Number

description: Contains Number Prototypes like limit, round, times, and ceil.

license: MIT-style license.

requires: Type

provides: Number

...
*/

Number.implement({

	limit: function(min, max){
		return Math.min(max, Math.max(min, this));
	},

	round: function(precision){
		precision = Math.pow(10, precision || 0).toFixed(precision < 0 ? -precision : 0);
		return Math.round(this * precision) / precision;
	},

	times: function(fn, bind){
		for (var i = 0; i < this; i++) fn.call(bind, i, this);
	},

	toFloat: function(){
		return parseFloat(this);
	},

	toInt: function(base){
		return parseInt(this, base || 10);
	}

});

Number.alias('each', 'times');

(function(math){
	var methods = {};
	math.each(function(name){
		if (!Number[name]) methods[name] = function(){
			return Math[name].apply(null, [this].concat(Array.from(arguments)));
		};
	});
	Number.implement(methods);
})(['abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', 'floor', 'log', 'max', 'min', 'pow', 'sin', 'sqrt', 'tan']);


/*
---

name: String

description: Contains String Prototypes like camelCase, capitalize, test, and toInt.

license: MIT-style license.

requires: Type

provides: String

...
*/

String.implement({

	test: function(regex, params){
		return ((typeOf(regex) == 'regexp') ? regex : new RegExp('' + regex, params)).test(this);
	},

	contains: function(string, separator){
		return (separator) ? (separator + this + separator).indexOf(separator + string + separator) > -1 : this.indexOf(string) > -1;
	},

	trim: function(){
		return this.replace(/^\s+|\s+$/g, '');
	},

	clean: function(){
		return this.replace(/\s+/g, ' ').trim();
	},

	camelCase: function(){
		return this.replace(/-\D/g, function(match){
			return match.charAt(1).toUpperCase();
		});
	},

	hyphenate: function(){
		return this.replace(/[A-Z]/g, function(match){
			return ('-' + match.charAt(0).toLowerCase());
		});
	},

	capitalize: function(){
		return this.replace(/\b[a-z]/g, function(match){
			return match.toUpperCase();
		});
	},

	escapeRegExp: function(){
		return this.replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1');
	},

	toInt: function(base){
		return parseInt(this, base || 10);
	},

	toFloat: function(){
		return parseFloat(this);
	},

	hexToRgb: function(array){
		var hex = this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
		return (hex) ? hex.slice(1).hexToRgb(array) : null;
	},

	rgbToHex: function(array){
		var rgb = this.match(/\d{1,3}/g);
		return (rgb) ? rgb.rgbToHex(array) : null;
	},

	substitute: function(object, regexp){
		return this.replace(regexp || (/\\?\{([^{}]+)\}/g), function(match, name){
			if (match.charAt(0) == '\\') return match.slice(1);
			return (object[name] != null) ? object[name] : '';
		});
	}

});


/*
---

name: Browser

description: The Browser Object. Contains Browser initialization, Window and Document, and the Browser Hash.

license: MIT-style license.

requires: [Array, Function, Number, String]

provides: [Browser, Window, Document]

...
*/

(function(){

var document = this.document;
var window = document.window = this;

var UID = 1;

this.$uid = (window.ActiveXObject) ? function(item){
	return (item.uid || (item.uid = [UID++]))[0];
} : function(item){
	return item.uid || (item.uid = UID++);
};

$uid(window);
$uid(document);

var ua = navigator.userAgent.toLowerCase(),
	platform = navigator.platform.toLowerCase(),
	UA = ua.match(/(opera|ie|firefox|chrome|version)[\s\/:]([\w\d\.]+)?.*?(safari|version[\s\/:]([\w\d\.]+)|$)/) || [null, 'unknown', 0],
	mode = UA[1] == 'ie' && document.documentMode;

var Browser = this.Browser = {

	extend: Function.prototype.extend,

	name: (UA[1] == 'version') ? UA[3] : UA[1],

	version: mode || parseFloat((UA[1] == 'opera' && UA[4]) ? UA[4] : UA[2]),

	Platform: {
		name: ua.match(/ip(?:ad|od|hone)/) ? 'ios' : (ua.match(/(?:webos|android)/) || platform.match(/mac|win|linux/) || ['other'])[0]
	},

	Features: {
		xpath: !!(document.evaluate),
		air: !!(window.runtime),
		query: !!(document.querySelector),
		json: !!(window.JSON)
	},

	Plugins: {}

};

Browser[Browser.name] = true;
Browser[Browser.name + parseInt(Browser.version, 10)] = true;
Browser.Platform[Browser.Platform.name] = true;

// Request

Browser.Request = (function(){

	var XMLHTTP = function(){
		return new XMLHttpRequest();
	};

	var MSXML2 = function(){
		return new ActiveXObject('MSXML2.XMLHTTP');
	};

	var MSXML = function(){
		return new ActiveXObject('Microsoft.XMLHTTP');
	};

	return Function.attempt(function(){
		XMLHTTP();
		return XMLHTTP;
	}, function(){
		MSXML2();
		return MSXML2;
	}, function(){
		MSXML();
		return MSXML;
	});

})();

Browser.Features.xhr = !!(Browser.Request);

// Flash detection

var version = (Function.attempt(function(){
	return navigator.plugins['Shockwave Flash'].description;
}, function(){
	return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');
}) || '0 r0').match(/\d+/g);

Browser.Plugins.Flash = {
	version: Number(version[0] || '0.' + version[1]) || 0,
	build: Number(version[2]) || 0
};

// String scripts

Browser.exec = function(text){
	if (!text) return text;
	if (window.execScript){
		window.execScript(text);
	} else {
		var script = document.createElement('script');
		script.setAttribute('type', 'text/javascript');
		script.text = text;
		document.head.appendChild(script);
		document.head.removeChild(script);
	}
	return text;
};

String.implement('stripScripts', function(exec){
	var scripts = '';
	var text = this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function(all, code){
		scripts += code + '\n';
		return '';
	});
	if (exec === true) Browser.exec(scripts);
	else if (typeOf(exec) == 'function') exec(scripts, text);
	return text;
});

// Window, Document

Browser.extend({
	Document: this.Document,
	Window: this.Window,
	Element: this.Element,
	Event: this.Event
});

this.Window = this.$constructor = new Type('Window', function(){});

this.$family = Function.from('window').hide();

Window.mirror(function(name, method){
	window[name] = method;
});

this.Document = document.$constructor = new Type('Document', function(){});

document.$family = Function.from('document').hide();

Document.mirror(function(name, method){
	document[name] = method;
});

document.html = document.documentElement;
document.head = document.getElementsByTagName('head')[0];

if (document.execCommand) try {
	document.execCommand("BackgroundImageCache", false, true);
} catch (e){}

if (this.attachEvent && !this.addEventListener){
	var unloadEvent = function(){
		this.detachEvent('onunload', unloadEvent);
		document.head = document.html = document.window = null;
	};
	this.attachEvent('onunload', unloadEvent);
}

// IE fails on collections and <select>.options (refers to <select>)
var arrayFrom = Array.from;
try {
	arrayFrom(document.html.childNodes);
} catch(e){
	Array.from = function(item){
		if (typeof item != 'string' && Type.isEnumerable(item) && typeOf(item) != 'array'){
			var i = item.length, array = new Array(i);
			while (i--) array[i] = item[i];
			return array;
		}
		return arrayFrom(item);
	};

	var prototype = Array.prototype,
		slice = prototype.slice;
	['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift', 'concat', 'join', 'slice'].each(function(name){
		var method = prototype[name];
		Array[name] = function(item){
			return method.apply(Array.from(item), slice.call(arguments, 1));
		};
	});
}

//<1.2compat>

if (Browser.Platform.ios) Browser.Platform.ipod = true;

Browser.Engine = {};

var setEngine = function(name, version){
	Browser.Engine.name = name;
	Browser.Engine[name + version] = true;
	Browser.Engine.version = version;
};

if (Browser.ie){
	Browser.Engine.trident = true;

	switch (Browser.version){
		case 6: setEngine('trident', 4); break;
		case 7: setEngine('trident', 5); break;
		case 8: setEngine('trident', 6);
	}
}

if (Browser.firefox){
	Browser.Engine.gecko = true;

	if (Browser.version >= 3) setEngine('gecko', 19);
	else setEngine('gecko', 18);
}

if (Browser.safari || Browser.chrome){
	Browser.Engine.webkit = true;

	switch (Browser.version){
		case 2: setEngine('webkit', 419); break;
		case 3: setEngine('webkit', 420); break;
		case 4: setEngine('webkit', 525);
	}
}

if (Browser.opera){
	Browser.Engine.presto = true;

	if (Browser.version >= 9.6) setEngine('presto', 960);
	else if (Browser.version >= 9.5) setEngine('presto', 950);
	else setEngine('presto', 925);
}

if (Browser.name == 'unknown'){
	switch ((ua.match(/(?:webkit|khtml|gecko)/) || [])[0]){
		case 'webkit':
		case 'khtml':
			Browser.Engine.webkit = true;
		break;
		case 'gecko':
			Browser.Engine.gecko = true;
	}
}

this.$exec = Browser.exec;

//</1.2compat>

})();


/*
---
name: Slick.Parser
description: Standalone CSS3 Selector parser
provides: Slick.Parser
...
*/

;(function(){

var parsed,
	separatorIndex,
	combinatorIndex,
	reversed,
	cache = {},
	reverseCache = {},
	reUnescape = /\\/g;

var parse = function(expression, isReversed){
	if (expression == null) return null;
	if (expression.Slick === true) return expression;
	expression = ('' + expression).replace(/^\s+|\s+$/g, '');
	reversed = !!isReversed;
	var currentCache = (reversed) ? reverseCache : cache;
	if (currentCache[expression]) return currentCache[expression];
	parsed = {
		Slick: true,
		expressions: [],
		raw: expression,
		reverse: function(){
			return parse(this.raw, true);
		}
	};
	separatorIndex = -1;
	while (expression != (expression = expression.replace(regexp, parser)));
	parsed.length = parsed.expressions.length;
	return currentCache[parsed.raw] = (reversed) ? reverse(parsed) : parsed;
};

var reverseCombinator = function(combinator){
	if (combinator === '!') return ' ';
	else if (combinator === ' ') return '!';
	else if ((/^!/).test(combinator)) return combinator.replace(/^!/, '');
	else return '!' + combinator;
};

var reverse = function(expression){
	var expressions = expression.expressions;
	for (var i = 0; i < expressions.length; i++){
		var exp = expressions[i];
		var last = {parts: [], tag: '*', combinator: reverseCombinator(exp[0].combinator)};

		for (var j = 0; j < exp.length; j++){
			var cexp = exp[j];
			if (!cexp.reverseCombinator) cexp.reverseCombinator = ' ';
			cexp.combinator = cexp.reverseCombinator;
			delete cexp.reverseCombinator;
		}

		exp.reverse().push(last);
	}
	return expression;
};

var escapeRegExp = function(string){// Credit: XRegExp 0.6.1 (c) 2007-2008 Steven Levithan <http://stevenlevithan.com/regex/xregexp/> MIT License
	return string.replace(/[-[\]{}()*+?.\\^$|,#\s]/g, function(match){
		return '\\' + match;
	});
};

var regexp = new RegExp(
/*
#!/usr/bin/env ruby
puts "\t\t" + DATA.read.gsub(/\(\?x\)|\s+#.*$|\s+|\\$|\\n/,'')
__END__
	"(?x)^(?:\
	  \\s* ( , ) \\s*               # Separator          \n\
	| \\s* ( <combinator>+ ) \\s*   # Combinator         \n\
	|      ( \\s+ )                 # CombinatorChildren \n\
	|      ( <unicode>+ | \\* )     # Tag                \n\
	| \\#  ( <unicode>+       )     # ID                 \n\
	| \\.  ( <unicode>+       )     # ClassName          \n\
	|                               # Attribute          \n\
	\\[  \
		\\s* (<unicode1>+)  (?:  \
			\\s* ([*^$!~|]?=)  (?:  \
				\\s* (?:\
					([\"']?)(.*?)\\9 \
				)\
			)  \
		)?  \\s*  \
	\\](?!\\]) \n\
	|   :+ ( <unicode>+ )(?:\
	\\( (?:\
		(?:([\"'])([^\\12]*)\\12)|((?:\\([^)]+\\)|[^()]*)+)\
	) \\)\
	)?\
	)"
*/
	"^(?:\\s*(,)\\s*|\\s*(<combinator>+)\\s*|(\\s+)|(<unicode>+|\\*)|\\#(<unicode>+)|\\.(<unicode>+)|\\[\\s*(<unicode1>+)(?:\\s*([*^$!~|]?=)(?:\\s*(?:([\"']?)(.*?)\\9)))?\\s*\\](?!\\])|(:+)(<unicode>+)(?:\\((?:(?:([\"'])([^\\13]*)\\13)|((?:\\([^)]+\\)|[^()]*)+))\\))?)"
	.replace(/<combinator>/, '[' + escapeRegExp(">+~`!@$%^&={}\\;</") + ']')
	.replace(/<unicode>/g, '(?:[\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])')
	.replace(/<unicode1>/g, '(?:[:\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])')
);

function parser(
	rawMatch,

	separator,
	combinator,
	combinatorChildren,

	tagName,
	id,
	className,

	attributeKey,
	attributeOperator,
	attributeQuote,
	attributeValue,

	pseudoMarker,
	pseudoClass,
	pseudoQuote,
	pseudoClassQuotedValue,
	pseudoClassValue
){
	if (separator || separatorIndex === -1){
		parsed.expressions[++separatorIndex] = [];
		combinatorIndex = -1;
		if (separator) return '';
	}

	if (combinator || combinatorChildren || combinatorIndex === -1){
		combinator = combinator || ' ';
		var currentSeparator = parsed.expressions[separatorIndex];
		if (reversed && currentSeparator[combinatorIndex])
			currentSeparator[combinatorIndex].reverseCombinator = reverseCombinator(combinator);
		currentSeparator[++combinatorIndex] = {combinator: combinator, tag: '*'};
	}

	var currentParsed = parsed.expressions[separatorIndex][combinatorIndex];

	if (tagName){
		currentParsed.tag = tagName.replace(reUnescape, '');

	} else if (id){
		currentParsed.id = id.replace(reUnescape, '');

	} else if (className){
		className = className.replace(reUnescape, '');

		if (!currentParsed.classList) currentParsed.classList = [];
		if (!currentParsed.classes) currentParsed.classes = [];
		currentParsed.classList.push(className);
		currentParsed.classes.push({
			value: className,
			regexp: new RegExp('(^|\\s)' + escapeRegExp(className) + '(\\s|$)')
		});

	} else if (pseudoClass){
		pseudoClassValue = pseudoClassValue || pseudoClassQuotedValue;
		pseudoClassValue = pseudoClassValue ? pseudoClassValue.replace(reUnescape, '') : null;

		if (!currentParsed.pseudos) currentParsed.pseudos = [];
		currentParsed.pseudos.push({
			key: pseudoClass.replace(reUnescape, ''),
			value: pseudoClassValue,
			type: pseudoMarker.length == 1 ? 'class' : 'element'
		});

	} else if (attributeKey){
		attributeKey = attributeKey.replace(reUnescape, '');
		attributeValue = (attributeValue || '').replace(reUnescape, '');

		var test, regexp;

		switch (attributeOperator){
			case '^=' : regexp = new RegExp(       '^'+ escapeRegExp(attributeValue)            ); break;
			case '$=' : regexp = new RegExp(            escapeRegExp(attributeValue) +'$'       ); break;
			case '~=' : regexp = new RegExp( '(^|\\s)'+ escapeRegExp(attributeValue) +'(\\s|$)' ); break;
			case '|=' : regexp = new RegExp(       '^'+ escapeRegExp(attributeValue) +'(-|$)'   ); break;
			case  '=' : test = function(value){
				return attributeValue == value;
			}; break;
			case '*=' : test = function(value){
				return value && value.indexOf(attributeValue) > -1;
			}; break;
			case '!=' : test = function(value){
				return attributeValue != value;
			}; break;
			default   : test = function(value){
				return !!value;
			};
		}

		if (attributeValue == '' && (/^[*$^]=$/).test(attributeOperator)) test = function(){
			return false;
		};

		if (!test) test = function(value){
			return value && regexp.test(value);
		};

		if (!currentParsed.attributes) currentParsed.attributes = [];
		currentParsed.attributes.push({
			key: attributeKey,
			operator: attributeOperator,
			value: attributeValue,
			test: test
		});

	}

	return '';
};

// Slick NS

var Slick = (this.Slick || {});

Slick.parse = function(expression){
	return parse(expression);
};

Slick.escapeRegExp = escapeRegExp;

if (!this.Slick) this.Slick = Slick;

}).apply(/*<CommonJS>*/(typeof exports != 'undefined') ? exports : /*</CommonJS>*/this);


/*
---
name: Slick.Finder
description: The new, superfast css selector engine.
provides: Slick.Finder
requires: Slick.Parser
...
*/

;(function(){

var local = {},
	featuresCache = {},
	toString = Object.prototype.toString;

// Feature / Bug detection

local.isNativeCode = function(fn){
	return (/\{\s*\[native code\]\s*\}/).test('' + fn);
};

local.isXML = function(document){
	return (!!document.xmlVersion) || (!!document.xml) || (toString.call(document) == '[object XMLDocument]') ||
	(document.nodeType == 9 && document.documentElement.nodeName != 'HTML');
};

local.setDocument = function(document){

	// convert elements / window arguments to document. if document cannot be extrapolated, the function returns.
	var nodeType = document.nodeType;
	if (nodeType == 9); // document
	else if (nodeType) document = document.ownerDocument; // node
	else if (document.navigator) document = document.document; // window
	else return;

	// check if it's the old document

	if (this.document === document) return;
	this.document = document;

	// check if we have done feature detection on this document before

	var root = document.documentElement,
		rootUid = this.getUIDXML(root),
		features = featuresCache[rootUid],
		feature;

	if (features){
		for (feature in features){
			this[feature] = features[feature];
		}
		return;
	}

	features = featuresCache[rootUid] = {};

	features.root = root;
	features.isXMLDocument = this.isXML(document);

	features.brokenStarGEBTN
	= features.starSelectsClosedQSA
	= features.idGetsName
	= features.brokenMixedCaseQSA
	= features.brokenGEBCN
	= features.brokenCheckedQSA
	= features.brokenEmptyAttributeQSA
	= features.isHTMLDocument
	= features.nativeMatchesSelector
	= false;

	var starSelectsClosed, starSelectsComments,
		brokenSecondClassNameGEBCN, cachedGetElementsByClassName,
		brokenFormAttributeGetter;

	var selected, id = 'slick_uniqueid';
	var testNode = document.createElement('div');
	
	var testRoot = document.body || document.getElementsByTagName('body')[0] || root;
	testRoot.appendChild(testNode);

	// on non-HTML documents innerHTML and getElementsById doesnt work properly
	try {
		testNode.innerHTML = '<a id="'+id+'"></a>';
		features.isHTMLDocument = !!document.getElementById(id);
	} catch(e){};

	if (features.isHTMLDocument){

		testNode.style.display = 'none';

		// IE returns comment nodes for getElementsByTagName('*') for some documents
		testNode.appendChild(document.createComment(''));
		starSelectsComments = (testNode.getElementsByTagName('*').length > 1);

		// IE returns closed nodes (EG:"</foo>") for getElementsByTagName('*') for some documents
		try {
			testNode.innerHTML = 'foo</foo>';
			selected = testNode.getElementsByTagName('*');
			starSelectsClosed = (selected && !!selected.length && selected[0].nodeName.charAt(0) == '/');
		} catch(e){};

		features.brokenStarGEBTN = starSelectsComments || starSelectsClosed;

		// IE returns elements with the name instead of just id for getElementsById for some documents
		try {
			testNode.innerHTML = '<a name="'+ id +'"></a><b id="'+ id +'"></b>';
			features.idGetsName = document.getElementById(id) === testNode.firstChild;
		} catch(e){};

		if (testNode.getElementsByClassName){

			// Safari 3.2 getElementsByClassName caches results
			try {
				testNode.innerHTML = '<a class="f"></a><a class="b"></a>';
				testNode.getElementsByClassName('b').length;
				testNode.firstChild.className = 'b';
				cachedGetElementsByClassName = (testNode.getElementsByClassName('b').length != 2);
			} catch(e){};

			// Opera 9.6 getElementsByClassName doesnt detects the class if its not the first one
			try {
				testNode.innerHTML = '<a class="a"></a><a class="f b a"></a>';
				brokenSecondClassNameGEBCN = (testNode.getElementsByClassName('a').length != 2);
			} catch(e){};

			features.brokenGEBCN = cachedGetElementsByClassName || brokenSecondClassNameGEBCN;
		}
		
		if (testNode.querySelectorAll){
			// IE 8 returns closed nodes (EG:"</foo>") for querySelectorAll('*') for some documents
			try {
				testNode.innerHTML = 'foo</foo>';
				selected = testNode.querySelectorAll('*');
				features.starSelectsClosedQSA = (selected && !!selected.length && selected[0].nodeName.charAt(0) == '/');
			} catch(e){};

			// Safari 3.2 querySelectorAll doesnt work with mixedcase on quirksmode
			try {
				testNode.innerHTML = '<a class="MiX"></a>';
				features.brokenMixedCaseQSA = !testNode.querySelectorAll('.MiX').length;
			} catch(e){};

			// Webkit and Opera dont return selected options on querySelectorAll
			try {
				testNode.innerHTML = '<select><option selected="selected">a</option></select>';
				features.brokenCheckedQSA = (testNode.querySelectorAll(':checked').length == 0);
			} catch(e){};

			// IE returns incorrect results for attr[*^$]="" selectors on querySelectorAll
			try {
				testNode.innerHTML = '<a class=""></a>';
				features.brokenEmptyAttributeQSA = (testNode.querySelectorAll('[class*=""]').length != 0);
			} catch(e){};

		}

		// IE6-7, if a form has an input of id x, form.getAttribute(x) returns a reference to the input
		try {
			testNode.innerHTML = '<form action="s"><input id="action"/></form>';
			brokenFormAttributeGetter = (testNode.firstChild.getAttribute('action') != 's');
		} catch(e){};

		// native matchesSelector function

		features.nativeMatchesSelector = root.matchesSelector || /*root.msMatchesSelector ||*/ root.mozMatchesSelector || root.webkitMatchesSelector;
		if (features.nativeMatchesSelector) try {
			// if matchesSelector trows errors on incorrect sintaxes we can use it
			features.nativeMatchesSelector.call(root, ':slick');
			features.nativeMatchesSelector = null;
		} catch(e){};

	}

	try {
		root.slick_expando = 1;
		delete root.slick_expando;
		features.getUID = this.getUIDHTML;
	} catch(e) {
		features.getUID = this.getUIDXML;
	}

	testRoot.removeChild(testNode);
	testNode = selected = testRoot = null;

	// getAttribute

	features.getAttribute = (features.isHTMLDocument && brokenFormAttributeGetter) ? function(node, name){
		var method = this.attributeGetters[name];
		if (method) return method.call(node);
		var attributeNode = node.getAttributeNode(name);
		return (attributeNode) ? attributeNode.nodeValue : null;
	} : function(node, name){
		var method = this.attributeGetters[name];
		return (method) ? method.call(node) : node.getAttribute(name);
	};

	// hasAttribute

	features.hasAttribute = (root && this.isNativeCode(root.hasAttribute)) ? function(node, attribute) {
		return node.hasAttribute(attribute);
	} : function(node, attribute) {
		node = node.getAttributeNode(attribute);
		return !!(node && (node.specified || node.nodeValue));
	};

	// contains
	// FIXME: Add specs: local.contains should be different for xml and html documents?
	features.contains = (root && this.isNativeCode(root.contains)) ? function(context, node){
		return context.contains(node);
	} : (root && root.compareDocumentPosition) ? function(context, node){
		return context === node || !!(context.compareDocumentPosition(node) & 16);
	} : function(context, node){
		if (node) do {
			if (node === context) return true;
		} while ((node = node.parentNode));
		return false;
	};

	// document order sorting
	// credits to Sizzle (http://sizzlejs.com/)

	features.documentSorter = (root.compareDocumentPosition) ? function(a, b){
		if (!a.compareDocumentPosition || !b.compareDocumentPosition) return 0;
		return a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
	} : ('sourceIndex' in root) ? function(a, b){
		if (!a.sourceIndex || !b.sourceIndex) return 0;
		return a.sourceIndex - b.sourceIndex;
	} : (document.createRange) ? function(a, b){
		if (!a.ownerDocument || !b.ownerDocument) return 0;
		var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
		aRange.setStart(a, 0);
		aRange.setEnd(a, 0);
		bRange.setStart(b, 0);
		bRange.setEnd(b, 0);
		return aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
	} : null ;

	root = null;

	for (feature in features){
		this[feature] = features[feature];
	}
};

// Main Method

var reSimpleSelector = /^([#.]?)((?:[\w-]+|\*))$/,
	reEmptyAttribute = /\[.+[*$^]=(?:""|'')?\]/,
	qsaFailExpCache = {};

local.search = function(context, expression, append, first){

	var found = this.found = (first) ? null : (append || []);
	
	if (!context) return found;
	else if (context.navigator) context = context.document; // Convert the node from a window to a document
	else if (!context.nodeType) return found;

	// setup

	var parsed, i,
		uniques = this.uniques = {},
		hasOthers = !!(append && append.length),
		contextIsDocument = (context.nodeType == 9);

	if (this.document !== (contextIsDocument ? context : context.ownerDocument)) this.setDocument(context);

	// avoid duplicating items already in the append array
	if (hasOthers) for (i = found.length; i--;) uniques[this.getUID(found[i])] = true;

	// expression checks

	if (typeof expression == 'string'){ // expression is a string

		/*<simple-selectors-override>*/
		var simpleSelector = expression.match(reSimpleSelector);
		simpleSelectors: if (simpleSelector) {

			var symbol = simpleSelector[1],
				name = simpleSelector[2],
				node, nodes;

			if (!symbol){

				if (name == '*' && this.brokenStarGEBTN) break simpleSelectors;
				nodes = context.getElementsByTagName(name);
				if (first) return nodes[0] || null;
				for (i = 0; node = nodes[i++];){
					if (!(hasOthers && uniques[this.getUID(node)])) found.push(node);
				}

			} else if (symbol == '#'){

				if (!this.isHTMLDocument || !contextIsDocument) break simpleSelectors;
				node = context.getElementById(name);
				if (!node) return found;
				if (this.idGetsName && node.getAttributeNode('id').nodeValue != name) break simpleSelectors;
				if (first) return node || null;
				if (!(hasOthers && uniques[this.getUID(node)])) found.push(node);

			} else if (symbol == '.'){

				if (!this.isHTMLDocument || ((!context.getElementsByClassName || this.brokenGEBCN) && context.querySelectorAll)) break simpleSelectors;
				if (context.getElementsByClassName && !this.brokenGEBCN){
					nodes = context.getElementsByClassName(name);
					if (first) return nodes[0] || null;
					for (i = 0; node = nodes[i++];){
						if (!(hasOthers && uniques[this.getUID(node)])) found.push(node);
					}
				} else {
					var matchClass = new RegExp('(^|\\s)'+ Slick.escapeRegExp(name) +'(\\s|$)');
					nodes = context.getElementsByTagName('*');
					for (i = 0; node = nodes[i++];){
						className = node.className;
						if (!(className && matchClass.test(className))) continue;
						if (first) return node;
						if (!(hasOthers && uniques[this.getUID(node)])) found.push(node);
					}
				}

			}

			if (hasOthers) this.sort(found);
			return (first) ? null : found;

		}
		/*</simple-selectors-override>*/

		/*<query-selector-override>*/
		querySelector: if (context.querySelectorAll) {

			if (!this.isHTMLDocument || this.brokenMixedCaseQSA || qsaFailExpCache[expression] ||
			(this.brokenCheckedQSA && expression.indexOf(':checked') > -1) ||
			(this.brokenEmptyAttributeQSA && reEmptyAttribute.test(expression)) || Slick.disableQSA) break querySelector;

			var _expression = expression;
			if (!contextIsDocument){
				// non-document rooted QSA
				// credits to Andrew Dupont
				var currentId = context.getAttribute('id'), slickid = 'slickid__';
				context.setAttribute('id', slickid);
				_expression = '#' + slickid + ' ' + _expression;
			}

			try {
				if (first) return context.querySelector(_expression) || null;
				else nodes = context.querySelectorAll(_expression);
			} catch(e) {
				qsaFailExpCache[expression] = 1;
				break querySelector;
			} finally {
				if (!contextIsDocument){
					if (currentId) context.setAttribute('id', currentId);
					else context.removeAttribute('id');
				}
			}

			if (this.starSelectsClosedQSA) for (i = 0; node = nodes[i++];){
				if (node.nodeName > '@' && !(hasOthers && uniques[this.getUID(node)])) found.push(node);
			} else for (i = 0; node = nodes[i++];){
				if (!(hasOthers && uniques[this.getUID(node)])) found.push(node);
			}

			if (hasOthers) this.sort(found);
			return found;

		}
		/*</query-selector-override>*/

		parsed = this.Slick.parse(expression);
		if (!parsed.length) return found;
	} else if (expression == null){ // there is no expression
		return found;
	} else if (expression.Slick){ // expression is a parsed Slick object
		parsed = expression;
	} else if (this.contains(context.documentElement || context, expression)){ // expression is a node
		(found) ? found.push(expression) : found = expression;
		return found;
	} else { // other junk
		return found;
	}

	/*<pseudo-selectors>*//*<nth-pseudo-selectors>*/

	// cache elements for the nth selectors

	this.posNTH = {};
	this.posNTHLast = {};
	this.posNTHType = {};
	this.posNTHTypeLast = {};

	/*</nth-pseudo-selectors>*//*</pseudo-selectors>*/

	// if append is null and there is only a single selector with one expression use pushArray, else use pushUID
	this.push = (!hasOthers && (first || (parsed.length == 1 && parsed.expressions[0].length == 1))) ? this.pushArray : this.pushUID;

	if (found == null) found = [];

	// default engine

	var j, m, n;
	var combinator, tag, id, classList, classes, attributes, pseudos;
	var currentItems, currentExpression, currentBit, lastBit, expressions = parsed.expressions;

	search: for (i = 0; (currentExpression = expressions[i]); i++) for (j = 0; (currentBit = currentExpression[j]); j++){

		combinator = 'combinator:' + currentBit.combinator;
		if (!this[combinator]) continue search;

		tag        = (this.isXMLDocument) ? currentBit.tag : currentBit.tag.toUpperCase();
		id         = currentBit.id;
		classList  = currentBit.classList;
		classes    = currentBit.classes;
		attributes = currentBit.attributes;
		pseudos    = currentBit.pseudos;
		lastBit    = (j === (currentExpression.length - 1));

		this.bitUniques = {};

		if (lastBit){
			this.uniques = uniques;
			this.found = found;
		} else {
			this.uniques = {};
			this.found = [];
		}

		if (j === 0){
			this[combinator](context, tag, id, classes, attributes, pseudos, classList);
			if (first && lastBit && found.length) break search;
		} else {
			if (first && lastBit) for (m = 0, n = currentItems.length; m < n; m++){
				this[combinator](currentItems[m], tag, id, classes, attributes, pseudos, classList);
				if (found.length) break search;
			} else for (m = 0, n = currentItems.length; m < n; m++) this[combinator](currentItems[m], tag, id, classes, attributes, pseudos, classList);
		}

		currentItems = this.found;
	}

	// should sort if there are nodes in append and if you pass multiple expressions.
	if (hasOthers || (parsed.expressions.length > 1)) this.sort(found);

	return (first) ? (found[0] || null) : found;
};

// Utils

local.uidx = 1;
local.uidk = 'slick-uniqueid';

local.getUIDXML = function(node){
	var uid = node.getAttribute(this.uidk);
	if (!uid){
		uid = this.uidx++;
		node.setAttribute(this.uidk, uid);
	}
	return uid;
};

local.getUIDHTML = function(node){
	return node.uniqueNumber || (node.uniqueNumber = this.uidx++);
};

// sort based on the setDocument documentSorter method.

local.sort = function(results){
	if (!this.documentSorter) return results;
	results.sort(this.documentSorter);
	return results;
};

/*<pseudo-selectors>*//*<nth-pseudo-selectors>*/

local.cacheNTH = {};

local.matchNTH = /^([+-]?\d*)?([a-z]+)?([+-]\d+)?$/;

local.parseNTHArgument = function(argument){
	var parsed = argument.match(this.matchNTH);
	if (!parsed) return false;
	var special = parsed[2] || false;
	var a = parsed[1] || 1;
	if (a == '-') a = -1;
	var b = +parsed[3] || 0;
	parsed =
		(special == 'n')	? {a: a, b: b} :
		(special == 'odd')	? {a: 2, b: 1} :
		(special == 'even')	? {a: 2, b: 0} : {a: 0, b: a};

	return (this.cacheNTH[argument] = parsed);
};

local.createNTHPseudo = function(child, sibling, positions, ofType){
	return function(node, argument){
		var uid = this.getUID(node);
		if (!this[positions][uid]){
			var parent = node.parentNode;
			if (!parent) return false;
			var el = parent[child], count = 1;
			if (ofType){
				var nodeName = node.nodeName;
				do {
					if (el.nodeName != nodeName) continue;
					this[positions][this.getUID(el)] = count++;
				} while ((el = el[sibling]));
			} else {
				do {
					if (el.nodeType != 1) continue;
					this[positions][this.getUID(el)] = count++;
				} while ((el = el[sibling]));
			}
		}
		argument = argument || 'n';
		var parsed = this.cacheNTH[argument] || this.parseNTHArgument(argument);
		if (!parsed) return false;
		var a = parsed.a, b = parsed.b, pos = this[positions][uid];
		if (a == 0) return b == pos;
		if (a > 0){
			if (pos < b) return false;
		} else {
			if (b < pos) return false;
		}
		return ((pos - b) % a) == 0;
	};
};

/*</nth-pseudo-selectors>*//*</pseudo-selectors>*/

local.pushArray = function(node, tag, id, classes, attributes, pseudos){
	if (this.matchSelector(node, tag, id, classes, attributes, pseudos)) this.found.push(node);
};

local.pushUID = function(node, tag, id, classes, attributes, pseudos){
	var uid = this.getUID(node);
	if (!this.uniques[uid] && this.matchSelector(node, tag, id, classes, attributes, pseudos)){
		this.uniques[uid] = true;
		this.found.push(node);
	}
};

local.matchNode = function(node, selector){
	if (this.isHTMLDocument && this.nativeMatchesSelector){
		try {
			return this.nativeMatchesSelector.call(node, selector.replace(/\[([^=]+)=\s*([^'"\]]+?)\s*\]/g, '[$1="$2"]'));
		} catch(matchError) {}
	}
	
	var parsed = this.Slick.parse(selector);
	if (!parsed) return true;

	// simple (single) selectors
	var expressions = parsed.expressions, reversedExpressions, simpleExpCounter = 0, i;
	for (i = 0; (currentExpression = expressions[i]); i++){
		if (currentExpression.length == 1){
			var exp = currentExpression[0];
			if (this.matchSelector(node, (this.isXMLDocument) ? exp.tag : exp.tag.toUpperCase(), exp.id, exp.classes, exp.attributes, exp.pseudos)) return true;
			simpleExpCounter++;
		}
	}

	if (simpleExpCounter == parsed.length) return false;

	var nodes = this.search(this.document, parsed), item;
	for (i = 0; item = nodes[i++];){
		if (item === node) return true;
	}
	return false;
};

local.matchPseudo = function(node, name, argument){
	var pseudoName = 'pseudo:' + name;
	if (this[pseudoName]) return this[pseudoName](node, argument);
	var attribute = this.getAttribute(node, name);
	return (argument) ? argument == attribute : !!attribute;
};

local.matchSelector = function(node, tag, id, classes, attributes, pseudos){
	if (tag){
		var nodeName = (this.isXMLDocument) ? node.nodeName : node.nodeName.toUpperCase();
		if (tag == '*'){
			if (nodeName < '@') return false; // Fix for comment nodes and closed nodes
		} else {
			if (nodeName != tag) return false;
		}
	}

	if (id && node.getAttribute('id') != id) return false;

	var i, part, cls;
	if (classes) for (i = classes.length; i--;){
		cls = node.getAttribute('class') || node.className;
		if (!(cls && classes[i].regexp.test(cls))) return false;
	}
	if (attributes) for (i = attributes.length; i--;){
		part = attributes[i];
		if (part.operator ? !part.test(this.getAttribute(node, part.key)) : !this.hasAttribute(node, part.key)) return false;
	}
	if (pseudos) for (i = pseudos.length; i--;){
		part = pseudos[i];
		if (!this.matchPseudo(node, part.key, part.value)) return false;
	}
	return true;
};

var combinators = {

	' ': function(node, tag, id, classes, attributes, pseudos, classList){ // all child nodes, any level

		var i, item, children;

		if (this.isHTMLDocument){
			getById: if (id){
				item = this.document.getElementById(id);
				if ((!item && node.all) || (this.idGetsName && item && item.getAttributeNode('id').nodeValue != id)){
					// all[id] returns all the elements with that name or id inside node
					// if theres just one it will return the element, else it will be a collection
					children = node.all[id];
					if (!children) return;
					if (!children[0]) children = [children];
					for (i = 0; item = children[i++];){
						var idNode = item.getAttributeNode('id');
						if (idNode && idNode.nodeValue == id){
							this.push(item, tag, null, classes, attributes, pseudos);
							break;
						}
					} 
					return;
				}
				if (!item){
					// if the context is in the dom we return, else we will try GEBTN, breaking the getById label
					if (this.contains(this.root, node)) return;
					else break getById;
				} else if (this.document !== node && !this.contains(node, item)) return;
				this.push(item, tag, null, classes, attributes, pseudos);
				return;
			}
			getByClass: if (classes && node.getElementsByClassName && !this.brokenGEBCN){
				children = node.getElementsByClassName(classList.join(' '));
				if (!(children && children.length)) break getByClass;
				for (i = 0; item = children[i++];) this.push(item, tag, id, null, attributes, pseudos);
				return;
			}
		}
		getByTag: {
			children = node.getElementsByTagName(tag);
			if (!(children && children.length)) break getByTag;
			if (!this.brokenStarGEBTN) tag = null;
			for (i = 0; item = children[i++];) this.push(item, tag, id, classes, attributes, pseudos);
		}
	},

	'>': function(node, tag, id, classes, attributes, pseudos){ // direct children
		if ((node = node.firstChild)) do {
			if (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos);
		} while ((node = node.nextSibling));
	},

	'+': function(node, tag, id, classes, attributes, pseudos){ // next sibling
		while ((node = node.nextSibling)) if (node.nodeType == 1){
			this.push(node, tag, id, classes, attributes, pseudos);
			break;
		}
	},

	'^': function(node, tag, id, classes, attributes, pseudos){ // first child
		node = node.firstChild;
		if (node){
			if (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos);
			else this['combinator:+'](node, tag, id, classes, attributes, pseudos);
		}
	},

	'~': function(node, tag, id, classes, attributes, pseudos){ // next siblings
		while ((node = node.nextSibling)){
			if (node.nodeType != 1) continue;
			var uid = this.getUID(node);
			if (this.bitUniques[uid]) break;
			this.bitUniques[uid] = true;
			this.push(node, tag, id, classes, attributes, pseudos);
		}
	},

	'++': function(node, tag, id, classes, attributes, pseudos){ // next sibling and previous sibling
		this['combinator:+'](node, tag, id, classes, attributes, pseudos);
		this['combinator:!+'](node, tag, id, classes, attributes, pseudos);
	},

	'~~': function(node, tag, id, classes, attributes, pseudos){ // next siblings and previous siblings
		this['combinator:~'](node, tag, id, classes, attributes, pseudos);
		this['combinator:!~'](node, tag, id, classes, attributes, pseudos);
	},

	'!': function(node, tag, id, classes, attributes, pseudos){ // all parent nodes up to document
		while ((node = node.parentNode)) if (node !== this.document) this.push(node, tag, id, classes, attributes, pseudos);
	},

	'!>': function(node, tag, id, classes, attributes, pseudos){ // direct parent (one level)
		node = node.parentNode;
		if (node !== this.document) this.push(node, tag, id, classes, attributes, pseudos);
	},

	'!+': function(node, tag, id, classes, attributes, pseudos){ // previous sibling
		while ((node = node.previousSibling)) if (node.nodeType == 1){
			this.push(node, tag, id, classes, attributes, pseudos);
			break;
		}
	},

	'!^': function(node, tag, id, classes, attributes, pseudos){ // last child
		node = node.lastChild;
		if (node){
			if (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos);
			else this['combinator:!+'](node, tag, id, classes, attributes, pseudos);
		}
	},

	'!~': function(node, tag, id, classes, attributes, pseudos){ // previous siblings
		while ((node = node.previousSibling)){
			if (node.nodeType != 1) continue;
			var uid = this.getUID(node);
			if (this.bitUniques[uid]) break;
			this.bitUniques[uid] = true;
			this.push(node, tag, id, classes, attributes, pseudos);
		}
	}

};

for (var c in combinators) local['combinator:' + c] = combinators[c];

var pseudos = {

	/*<pseudo-selectors>*/

	'empty': function(node){
		var child = node.firstChild;
		return !(child && child.nodeType == 1) && !(node.innerText || node.textContent || '').length;
	},

	'not': function(node, expression){
		return !this.matchNode(node, expression);
	},

	'contains': function(node, text){
		return (node.innerText || node.textContent || '').indexOf(text) > -1;
	},

	'first-child': function(node){
		while ((node = node.previousSibling)) if (node.nodeType == 1) return false;
		return true;
	},

	'last-child': function(node){
		while ((node = node.nextSibling)) if (node.nodeType == 1) return false;
		return true;
	},

	'only-child': function(node){
		var prev = node;
		while ((prev = prev.previousSibling)) if (prev.nodeType == 1) return false;
		var next = node;
		while ((next = next.nextSibling)) if (next.nodeType == 1) return false;
		return true;
	},

	/*<nth-pseudo-selectors>*/

	'nth-child': local.createNTHPseudo('firstChild', 'nextSibling', 'posNTH'),

	'nth-last-child': local.createNTHPseudo('lastChild', 'previousSibling', 'posNTHLast'),

	'nth-of-type': local.createNTHPseudo('firstChild', 'nextSibling', 'posNTHType', true),

	'nth-last-of-type': local.createNTHPseudo('lastChild', 'previousSibling', 'posNTHTypeLast', true),

	'index': function(node, index){
		return this['pseudo:nth-child'](node, '' + index + 1);
	},

	'even': function(node){
		return this['pseudo:nth-child'](node, '2n');
	},

	'odd': function(node){
		return this['pseudo:nth-child'](node, '2n+1');
	},

	/*</nth-pseudo-selectors>*/

	/*<of-type-pseudo-selectors>*/

	'first-of-type': function(node){
		var nodeName = node.nodeName;
		while ((node = node.previousSibling)) if (node.nodeName == nodeName) return false;
		return true;
	},

	'last-of-type': function(node){
		var nodeName = node.nodeName;
		while ((node = node.nextSibling)) if (node.nodeName == nodeName) return false;
		return true;
	},

	'only-of-type': function(node){
		var prev = node, nodeName = node.nodeName;
		while ((prev = prev.previousSibling)) if (prev.nodeName == nodeName) return false;
		var next = node;
		while ((next = next.nextSibling)) if (next.nodeName == nodeName) return false;
		return true;
	},

	/*</of-type-pseudo-selectors>*/

	// custom pseudos

	'enabled': function(node){
		return !node.disabled;
	},

	'disabled': function(node){
		return node.disabled;
	},

	'checked': function(node){
		return node.checked || node.selected;
	},

	'focus': function(node){
		return this.isHTMLDocument && this.document.activeElement === node && (node.href || node.type || this.hasAttribute(node, 'tabindex'));
	},

	'root': function(node){
		return (node === this.root);
	},
	
	'selected': function(node){
		return node.selected;
	}

	/*</pseudo-selectors>*/
};

for (var p in pseudos) local['pseudo:' + p] = pseudos[p];

// attributes methods

local.attributeGetters = {

	'class': function(){
		return this.getAttribute('class') || this.className;
	},

	'for': function(){
		return ('htmlFor' in this) ? this.htmlFor : this.getAttribute('for');
	},

	'href': function(){
		return ('href' in this) ? this.getAttribute('href', 2) : this.getAttribute('href');
	},

	'style': function(){
		return (this.style) ? this.style.cssText : this.getAttribute('style');
	},
	
	'tabindex': function(){
		var attributeNode = this.getAttributeNode('tabindex');
		return (attributeNode && attributeNode.specified) ? attributeNode.nodeValue : null;
	},

	'type': function(){
		return this.getAttribute('type');
	}

};

// Slick

var Slick = local.Slick = (this.Slick || {});

Slick.version = '1.1.5';

// Slick finder

Slick.search = function(context, expression, append){
	return local.search(context, expression, append);
};

Slick.find = function(context, expression){
	return local.search(context, expression, null, true);
};

// Slick containment checker

Slick.contains = function(container, node){
	local.setDocument(container);
	return local.contains(container, node);
};

// Slick attribute getter

Slick.getAttribute = function(node, name){
	return local.getAttribute(node, name);
};

// Slick matcher

Slick.match = function(node, selector){
	if (!(node && selector)) return false;
	if (!selector || selector === node) return true;
	local.setDocument(node);
	return local.matchNode(node, selector);
};

// Slick attribute accessor

Slick.defineAttributeGetter = function(name, fn){
	local.attributeGetters[name] = fn;
	return this;
};

Slick.lookupAttributeGetter = function(name){
	return local.attributeGetters[name];
};

// Slick pseudo accessor

Slick.definePseudo = function(name, fn){
	local['pseudo:' + name] = function(node, argument){
		return fn.call(node, argument);
	};
	return this;
};

Slick.lookupPseudo = function(name){
	var pseudo = local['pseudo:' + name];
	if (pseudo) return function(argument){
		return pseudo.call(this, argument);
	};
	return null;
};

// Slick overrides accessor

Slick.override = function(regexp, fn){
	local.override(regexp, fn);
	return this;
};

Slick.isXML = local.isXML;

Slick.uidOf = function(node){
	return local.getUIDHTML(node);
};

if (!this.Slick) this.Slick = Slick;

}).apply(/*<CommonJS>*/(typeof exports != 'undefined') ? exports : /*</CommonJS>*/this);


/*
---

name: Element

description: One of the most important items in MooTools. Contains the dollar function, the dollars function, and an handful of cross-browser, time-saver methods to let you easily work with HTML Elements.

license: MIT-style license.

requires: [Window, Document, Array, String, Function, Number, Slick.Parser, Slick.Finder]

provides: [Element, Elements, $, $$, Iframe, Selectors]

...
*/

var Element = function(tag, props){
	var konstructor = Element.Constructors[tag];
	if (konstructor) return konstructor(props);
	if (typeof tag != 'string') return document.id(tag).set(props);

	if (!props) props = {};

	if (!(/^[\w-]+$/).test(tag)){
		var parsed = Slick.parse(tag).expressions[0][0];
		tag = (parsed.tag == '*') ? 'div' : parsed.tag;
		if (parsed.id && props.id == null) props.id = parsed.id;

		var attributes = parsed.attributes;
		if (attributes) for (var i = 0, l = attributes.length; i < l; i++){
			var attr = attributes[i];
			if (attr.value != null && attr.operator == '=' && props[attr.key] == null)
				props[attr.key] = attr.value;
		}

		if (parsed.classList && props['class'] == null) props['class'] = parsed.classList.join(' ');
	}

	return document.newElement(tag, props);
};

if (Browser.Element) Element.prototype = Browser.Element.prototype;

new Type('Element', Element).mirror(function(name){
	if (Array.prototype[name]) return;

	var obj = {};
	obj[name] = function(){
		var results = [], args = arguments, elements = true;
		for (var i = 0, l = this.length; i < l; i++){
			var element = this[i], result = results[i] = element[name].apply(element, args);
			elements = (elements && typeOf(result) == 'element');
		}
		return (elements) ? new Elements(results) : results;
	};

	Elements.implement(obj);
});

if (!Browser.Element){
	Element.parent = Object;

	Element.Prototype = {'$family': Function.from('element').hide()};

	Element.mirror(function(name, method){
		Element.Prototype[name] = method;
	});
}

Element.Constructors = {};

//<1.2compat>

Element.Constructors = new Hash;

//</1.2compat>

var IFrame = new Type('IFrame', function(){
	var params = Array.link(arguments, {
		properties: Type.isObject,
		iframe: function(obj){
			return (obj != null);
		}
	});

	var props = params.properties || {}, iframe;
	if (params.iframe) iframe = document.id(params.iframe);
	var onload = props.onload || function(){};
	delete props.onload;
	props.id = props.name = [props.id, props.name, iframe ? (iframe.id || iframe.name) : 'IFrame_' + String.uniqueID()].pick();
	iframe = new Element(iframe || 'iframe', props);

	var onLoad = function(){
		onload.call(iframe.contentWindow);
	};

	if (window.frames[props.id]) onLoad();
	else iframe.addListener('load', onLoad);
	return iframe;
});

var Elements = this.Elements = function(nodes){
	if (nodes && nodes.length){
		var uniques = {}, node;
		for (var i = 0; node = nodes[i++];){
			var uid = Slick.uidOf(node);
			if (!uniques[uid]){
				uniques[uid] = true;
				this.push(node);
			}
		}
	}
};

Elements.prototype = {length: 0};
Elements.parent = Array;

new Type('Elements', Elements).implement({

	filter: function(filter, bind){
		if (!filter) return this;
		return new Elements(Array.filter(this, (typeOf(filter) == 'string') ? function(item){
			return item.match(filter);
		} : filter, bind));
	}.protect(),

	push: function(){
		var length = this.length;
		for (var i = 0, l = arguments.length; i < l; i++){
			var item = document.id(arguments[i]);
			if (item) this[length++] = item;
		}
		return (this.length = length);
	}.protect(),

	unshift: function(){
		var items = [];
		for (var i = 0, l = arguments.length; i < l; i++){
			var item = document.id(arguments[i]);
			if (item) items.push(item);
		}
		return Array.prototype.unshift.apply(this, items);
	}.protect(),

	concat: function(){
		var newElements = new Elements(this);
		for (var i = 0, l = arguments.length; i < l; i++){
			var item = arguments[i];
			if (Type.isEnumerable(item)) newElements.append(item);
			else newElements.push(item);
		}
		return newElements;
	}.protect(),

	append: function(collection){
		for (var i = 0, l = collection.length; i < l; i++) this.push(collection[i]);
		return this;
	}.protect(),

	empty: function(){
		while (this.length) delete this[--this.length];
		return this;
	}.protect()

});

//<1.2compat>

Elements.alias('extend', 'append');

//</1.2compat>

(function(){

// FF, IE
var splice = Array.prototype.splice, object = {'0': 0, '1': 1, length: 2};

splice.call(object, 1, 1);
if (object[1] == 1) Elements.implement('splice', function(){
	var length = this.length;
	splice.apply(this, arguments);
	while (length >= this.length) delete this[length--];
	return this;
}.protect());

Elements.implement(Array.prototype);

Array.mirror(Elements);

/*<ltIE8>*/
var createElementAcceptsHTML;
try {
	var x = document.createElement('<input name=x>');
	createElementAcceptsHTML = (x.name == 'x');
} catch(e){}

var escapeQuotes = function(html){
	return ('' + html).replace(/&/g, '&amp;').replace(/"/g, '&quot;');
};
/*</ltIE8>*/

Document.implement({

	newElement: function(tag, props){
		if (props && props.checked != null) props.defaultChecked = props.checked;
		/*<ltIE8>*/// Fix for readonly name and type properties in IE < 8
		if (createElementAcceptsHTML && props){
			tag = '<' + tag;
			if (props.name) tag += ' name="' + escapeQuotes(props.name) + '"';
			if (props.type) tag += ' type="' + escapeQuotes(props.type) + '"';
			tag += '>';
			delete props.name;
			delete props.type;
		}
		/*</ltIE8>*/
		return this.id(this.createElement(tag)).set(props);
	}

});

})();

Document.implement({

	newTextNode: function(text){
		return this.createTextNode(text);
	},

	getDocument: function(){
		return this;
	},

	getWindow: function(){
		return this.window;
	},

	id: (function(){

		var types = {

			string: function(id, nocash, doc){
				id = Slick.find(doc, '#' + id.replace(/(\W)/g, '\\$1'));
				return (id) ? types.element(id, nocash) : null;
			},

			element: function(el, nocash){
				$uid(el);
				if (!nocash && !el.$family && !(/^(?:object|embed)$/i).test(el.tagName)){
					Object.append(el, Element.Prototype);
				}
				return el;
			},

			object: function(obj, nocash, doc){
				if (obj.toElement) return types.element(obj.toElement(doc), nocash);
				return null;
			}

		};

		types.textnode = types.whitespace = types.window = types.document = function(zero){
			return zero;
		};

		return function(el, nocash, doc){
			if (el && el.$family && el.uid) return el;
			var type = typeOf(el);
			return (types[type]) ? types[type](el, nocash, doc || document) : null;
		};

	})()

});

if (window.$ == null) Window.implement('$', function(el, nc){
	return document.id(el, nc, this.document);
});

Window.implement({

	getDocument: function(){
		return this.document;
	},

	getWindow: function(){
		return this;
	}

});

[Document, Element].invoke('implement', {

	getElements: function(expression){
		return Slick.search(this, expression, new Elements);
	},

	getElement: function(expression){
		return document.id(Slick.find(this, expression));
	}

});

//<1.2compat>

(function(search, find, match){

	this.Selectors = {};
	var pseudos = this.Selectors.Pseudo = new Hash();

	var addSlickPseudos = function(){
		for (var name in pseudos) if (pseudos.hasOwnProperty(name)){
			Slick.definePseudo(name, pseudos[name]);
			delete pseudos[name];
		}
	};

	Slick.search = function(context, expression, append){
		addSlickPseudos();
		return search.call(this, context, expression, append);
	};

	Slick.find = function(context, expression){
		addSlickPseudos();
		return find.call(this, context, expression);
	};

	Slick.match = function(node, selector){
		addSlickPseudos();
		return match.call(this, node, selector);
	};

})(Slick.search, Slick.find, Slick.match);

if (window.$$ == null) Window.implement('$$', function(selector){
	var elements = new Elements;
	if (arguments.length == 1 && typeof selector == 'string') return Slick.search(this.document, selector, elements);
	var args = Array.flatten(arguments);
	for (var i = 0, l = args.length; i < l; i++){
		var item = args[i];
		switch (typeOf(item)){
			case 'element': elements.push(item); break;
			case 'string': Slick.search(this.document, item, elements);
		}
	}
	return elements;
});

//</1.2compat>

if (window.$$ == null) Window.implement('$$', function(selector){
	if (arguments.length == 1){
		if (typeof selector == 'string') return Slick.search(this.document, selector, new Elements);
		else if (Type.isEnumerable(selector)) return new Elements(selector);
	}
	return new Elements(arguments);
});

(function(){

var collected = {}, storage = {};
var formProps = {input: 'checked', option: 'selected', textarea: 'value'};

var get = function(uid){
	return (storage[uid] || (storage[uid] = {}));
};

var clean = function(item){
	var uid = item.uid;
	if (item.removeEvents) item.removeEvents();
	if (item.clearAttributes) item.clearAttributes();
	if (uid != null){
		delete collected[uid];
		delete storage[uid];
	}
	return item;
};

var camels = ['defaultValue', 'accessKey', 'cellPadding', 'cellSpacing', 'colSpan', 'frameBorder', 'maxLength', 'readOnly',
	'rowSpan', 'tabIndex', 'useMap'
];
var bools = ['compact', 'nowrap', 'ismap', 'declare', 'noshade', 'checked', 'disabled', 'readOnly', 'multiple', 'selected',
	'noresize', 'defer', 'defaultChecked'
];
 var attributes = {
	'html': 'innerHTML',
	'class': 'className',
	'for': 'htmlFor',
	'text': (function(){
		var temp = document.createElement('div');
		return (temp.textContent == null) ? 'innerText' : 'textContent';
	})()
};
var readOnly = ['type'];
var expandos = ['value', 'defaultValue'];
var uriAttrs = /^(?:href|src|usemap)$/i;

bools = bools.associate(bools);
camels = camels.associate(camels.map(String.toLowerCase));
readOnly = readOnly.associate(readOnly);

Object.append(attributes, expandos.associate(expandos));

var inserters = {

	before: function(context, element){
		var parent = element.parentNode;
		if (parent) parent.insertBefore(context, element);
	},

	after: function(context, element){
		var parent = element.parentNode;
		if (parent) parent.insertBefore(context, element.nextSibling);
	},

	bottom: function(context, element){
		element.appendChild(context);
	},

	top: function(context, element){
		element.insertBefore(context, element.firstChild);
	}

};

inserters.inside = inserters.bottom;

//<1.2compat>

Object.each(inserters, function(inserter, where){

	where = where.capitalize();

	var methods = {};

	methods['inject' + where] = function(el){
		inserter(this, document.id(el, true));
		return this;
	};

	methods['grab' + where] = function(el){
		inserter(document.id(el, true), this);
		return this;
	};

	Element.implement(methods);

});

//</1.2compat>

var injectCombinator = function(expression, combinator){
	if (!expression) return combinator;

	expression = Object.clone(Slick.parse(expression));

	var expressions = expression.expressions;
	for (var i = expressions.length; i--;)
		expressions[i][0].combinator = combinator;

	return expression;
};

Element.implement({

	set: function(prop, value){
		var property = Element.Properties[prop];
		(property && property.set) ? property.set.call(this, value) : this.setProperty(prop, value);
	}.overloadSetter(),

	get: function(prop){
		var property = Element.Properties[prop];
		return (property && property.get) ? property.get.apply(this) : this.getProperty(prop);
	}.overloadGetter(),

	erase: function(prop){
		var property = Element.Properties[prop];
		(property && property.erase) ? property.erase.apply(this) : this.removeProperty(prop);
		return this;
	},

	setProperty: function(attribute, value){
		attribute = camels[attribute] || attribute;
		if (value == null) return this.removeProperty(attribute);
		var key = attributes[attribute];
		(key) ? this[key] = value :
			(bools[attribute]) ? this[attribute] = !!value : this.setAttribute(attribute, '' + value);
		return this;
	},

	setProperties: function(attributes){
		for (var attribute in attributes) this.setProperty(attribute, attributes[attribute]);
		return this;
	},

	getProperty: function(attribute){
		attribute = camels[attribute] || attribute;
		var key = attributes[attribute] || readOnly[attribute];
		return (key) ? this[key] :
			(bools[attribute]) ? !!this[attribute] :
			(uriAttrs.test(attribute) ? this.getAttribute(attribute, 2) :
			(key = this.getAttributeNode(attribute)) ? key.nodeValue : null) || null;
	},

	getProperties: function(){
		var args = Array.from(arguments);
		return args.map(this.getProperty, this).associate(args);
	},

	removeProperty: function(attribute){
		attribute = camels[attribute] || attribute;
		var key = attributes[attribute];
		(key) ? this[key] = '' :
			(bools[attribute]) ? this[attribute] = false : this.removeAttribute(attribute);
		return this;
	},

	removeProperties: function(){
		Array.each(arguments, this.removeProperty, this);
		return this;
	},

	hasClass: function(className){
		return this.className.clean().contains(className, ' ');
	},

	addClass: function(className){
		if (!this.hasClass(className)) this.className = (this.className + ' ' + className).clean();
		return this;
	},

	removeClass: function(className){
		this.className = this.className.replace(new RegExp('(^|\\s)' + className + '(?:\\s|$)'), '$1');
		return this;
	},

	toggleClass: function(className, force){
		if (force == null) force = !this.hasClass(className);
		return (force) ? this.addClass(className) : this.removeClass(className);
	},

	adopt: function(){
		var parent = this, fragment, elements = Array.flatten(arguments), length = elements.length;
		if (length > 1) parent = fragment = document.createDocumentFragment();

		for (var i = 0; i < length; i++){
			var element = document.id(elements[i], true);
			if (element) parent.appendChild(element);
		}

		if (fragment) this.appendChild(fragment);

		return this;
	},

	appendText: function(text, where){
		return this.grab(this.getDocument().newTextNode(text), where);
	},

	grab: function(el, where){
		inserters[where || 'bottom'](document.id(el, true), this);
		return this;
	},

	inject: function(el, where){
		inserters[where || 'bottom'](this, document.id(el, true));
		return this;
	},

	replaces: function(el){
		el = document.id(el, true);
		el.parentNode.replaceChild(this, el);
		return this;
	},

	wraps: function(el, where){
		el = document.id(el, true);
		return this.replaces(el).grab(el, where);
	},

	getPrevious: function(expression){
		return document.id(Slick.find(this, injectCombinator(expression, '!~')));
	},

	getAllPrevious: function(expression){
		return Slick.search(this, injectCombinator(expression, '!~'), new Elements);
	},

	getNext: function(expression){
		return document.id(Slick.find(this, injectCombinator(expression, '~')));
	},

	getAllNext: function(expression){
		return Slick.search(this, injectCombinator(expression, '~'), new Elements);
	},

	getFirst: function(expression){
		return document.id(Slick.search(this, injectCombinator(expression, '>'))[0]);
	},

	getLast: function(expression){
		return document.id(Slick.search(this, injectCombinator(expression, '>')).getLast());
	},

	getParent: function(expression){
		return document.id(Slick.find(this, injectCombinator(expression, '!')));
	},

	getParents: function(expression){
		return Slick.search(this, injectCombinator(expression, '!'), new Elements);
	},

	getSiblings: function(expression){
		return Slick.search(this, injectCombinator(expression, '~~'), new Elements);
	},

	getChildren: function(expression){
		return Slick.search(this, injectCombinator(expression, '>'), new Elements);
	},

	getWindow: function(){
		return this.ownerDocument.window;
	},

	getDocument: function(){
		return this.ownerDocument;
	},

	getElementById: function(id){
		return document.id(Slick.find(this, '#' + ('' + id).replace(/(\W)/g, '\\$1')));
	},

	getSelected: function(){
		this.selectedIndex; // Safari 3.2.1
		return new Elements(Array.from(this.options).filter(function(option){
			return option.selected;
		}));
	},

	toQueryString: function(){
		var queryString = [];
		this.getElements('input, select, textarea').each(function(el){
			var type = el.type;
			if (!el.name || el.disabled || type == 'submit' || type == 'reset' || type == 'file' || type == 'image') return;

			var value = (el.get('tag') == 'select') ? el.getSelected().map(function(opt){
				// IE
				return document.id(opt).get('value');
			}) : ((type == 'radio' || type == 'checkbox') && !el.checked) ? null : el.get('value');

			Array.from(value).each(function(val){
				if (typeof val != 'undefined') queryString.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(val));
			});
		});
		return queryString.join('&');
	},

	destroy: function(){
		var children = clean(this).getElementsByTagName('*');
		Array.each(children, clean);
		Element.dispose(this);
		return null;
	},

	empty: function(){
		Array.from(this.childNodes).each(Element.dispose);
		return this;
	},

	dispose: function(){
		return (this.parentNode) ? this.parentNode.removeChild(this) : this;
	},

	match: function(expression){
		return !expression || Slick.match(this, expression);
	}

});

var cleanClone = function(node, element, keepid){
	if (!keepid) node.setAttributeNode(document.createAttribute('id'));
	if (node.clearAttributes){
		node.clearAttributes();
		node.mergeAttributes(element);
		node.removeAttribute('uid');
		if (node.options){
			var no = node.options, eo = element.options;
			for (var i = no.length; i--;) no[i].selected = eo[i].selected;
		}
	}

	var prop = formProps[element.tagName.toLowerCase()];
	if (prop && element[prop]) node[prop] = element[prop];
};

Element.implement('clone', function(contents, keepid){
	contents = contents !== false;
	var clone = this.cloneNode(contents), i;

	if (contents){
		var ce = clone.getElementsByTagName('*'), te = this.getElementsByTagName('*');
		for (i = ce.length; i--;) cleanClone(ce[i], te[i], keepid);
	}

	cleanClone(clone, this, keepid);

	if (Browser.ie){
		var co = clone.getElementsByTagName('object'), to = this.getElementsByTagName('object');
		for (i = co.length; i--;) co[i].outerHTML = to[i].outerHTML;
	}
	return document.id(clone);
});

var contains = {contains: function(element){
	return Slick.contains(this, element);
}};

if (!document.contains) Document.implement(contains);
if (!document.createElement('div').contains) Element.implement(contains);

//<1.2compat>

Element.implement('hasChild', function(element){
	return this !== element && this.contains(element);
});

//</1.2compat>

[Element, Window, Document].invoke('implement', {

	addListener: function(type, fn){
		if (type == 'unload'){
			var old = fn, self = this;
			fn = function(){
				self.removeListener('unload', fn);
				old();
			};
		} else {
			collected[$uid(this)] = this;
		}
		if (this.addEventListener) this.addEventListener(type, fn, !!arguments[2]);
		else this.attachEvent('on' + type, fn);
		return this;
	},

	removeListener: function(type, fn){
		if (this.removeEventListener) this.removeEventListener(type, fn, !!arguments[2]);
		else this.detachEvent('on' + type, fn);
		return this;
	},

	retrieve: function(property, dflt){
		var storage = get($uid(this)), prop = storage[property];
		if (dflt != null && prop == null) prop = storage[property] = dflt;
		return prop != null ? prop : null;
	},

	store: function(property, value){
		var storage = get($uid(this));
		storage[property] = value;
		return this;
	},

	eliminate: function(property){
		var storage = get($uid(this));
		delete storage[property];
		return this;
	}

});

// IE purge
if (window.attachEvent && !window.addEventListener) window.addListener('unload', function(){
	Object.each(collected, clean);
	if (window.CollectGarbage) CollectGarbage();
});

})();

Element.Properties = {};

//<1.2compat>

Element.Properties = new Hash;

//</1.2compat>

Element.Properties.style = {

	set: function(style){
		this.style.cssText = style;
	},

	get: function(){
		return this.style.cssText;
	},

	erase: function(){
		this.style.cssText = '';
	}

};

Element.Properties.tag = {

	get: function(){
		return this.tagName.toLowerCase();
	}

};

(function(maxLength){
	if (maxLength != null) Element.Properties.maxlength = Element.Properties.maxLength = {
		get: function(){
			var maxlength = this.getAttribute('maxLength');
			return maxlength == maxLength ? null : maxlength;
		}
	};
})(document.createElement('input').getAttribute('maxLength'));

Element.Properties.html = (function(){

	var tableTest = Function.attempt(function(){
		var table = document.createElement('table');
		table.innerHTML = '<tr><td></td></tr>';
	});

	var wrapper = document.createElement('div');

	var translations = {
		table: [1, '<table>', '</table>'],
		select: [1, '<select>', '</select>'],
		tbody: [2, '<table><tbody>', '</tbody></table>'],
		tr: [3, '<table><tbody><tr>', '</tr></tbody></table>']
	};
	translations.thead = translations.tfoot = translations.tbody;

	var html = {
		set: function(){
			var html = Array.flatten(arguments).join('');
			var wrap = (!tableTest && translations[this.get('tag')]);
			if (wrap){
				var first = wrapper;
				first.innerHTML = wrap[1] + html + wrap[2];
				for (var i = wrap[0]; i--;) first = first.firstChild;
				this.empty().adopt(first.childNodes);
			} else {
				this.innerHTML = html;
			}
		}
	};

	html.erase = html.set;

	return html;
})();


/*
---

name: Object

description: Object generic methods

license: MIT-style license.

requires: Type

provides: [Object, Hash]

...
*/

(function(){

var hasOwnProperty = Object.prototype.hasOwnProperty;

Object.extend({

	subset: function(object, keys){
		var results = {};
		for (var i = 0, l = keys.length; i < l; i++){
			var k = keys[i];
			results[k] = object[k];
		}
		return results;
	},

	map: function(object, fn, bind){
		var results = {};
		for (var key in object){
			if (hasOwnProperty.call(object, key)) results[key] = fn.call(bind, object[key], key, object);
		}
		return results;
	},

	filter: function(object, fn, bind){
		var results = {};
		Object.each(object, function(value, key){
			if (fn.call(bind, value, key, object)) results[key] = value;
		});
		return results;
	},

	every: function(object, fn, bind){
		for (var key in object){
			if (hasOwnProperty.call(object, key) && !fn.call(bind, object[key], key)) return false;
		}
		return true;
	},

	some: function(object, fn, bind){
		for (var key in object){
			if (hasOwnProperty.call(object, key) && fn.call(bind, object[key], key)) return true;
		}
		return false;
	},

	keys: function(object){
		var keys = [];
		for (var key in object){
			if (hasOwnProperty.call(object, key)) keys.push(key);
		}
		return keys;
	},

	values: function(object){
		var values = [];
		for (var key in object){
			if (hasOwnProperty.call(object, key)) values.push(object[key]);
		}
		return values;
	},

	getLength: function(object){
		return Object.keys(object).length;
	},

	keyOf: function(object, value){
		for (var key in object){
			if (hasOwnProperty.call(object, key) && object[key] === value) return key;
		}
		return null;
	},

	contains: function(object, value){
		return Object.keyOf(object, value) != null;
	},

	toQueryString: function(object, base){
		var queryString = [];

		Object.each(object, function(value, key){
			if (base) key = base + '[' + key + ']';
			var result;
			switch (typeOf(value)){
				case 'object': result = Object.toQueryString(value, key); break;
				case 'array':
					var qs = {};
					value.each(function(val, i){
						qs[i] = val;
					});
					result = Object.toQueryString(qs, key);
				break;
				default: result = key + '=' + encodeURIComponent(value);
			}
			if (value != null) queryString.push(result);
		});

		return queryString.join('&');
	}

});

})();

//<1.2compat>

Hash.implement({

	has: Object.prototype.hasOwnProperty,

	keyOf: function(value){
		return Object.keyOf(this, value);
	},

	hasValue: function(value){
		return Object.contains(this, value);
	},

	extend: function(properties){
		Hash.each(properties || {}, function(value, key){
			Hash.set(this, key, value);
		}, this);
		return this;
	},

	combine: function(properties){
		Hash.each(properties || {}, function(value, key){
			Hash.include(this, key, value);
		}, this);
		return this;
	},

	erase: function(key){
		if (this.hasOwnProperty(key)) delete this[key];
		return this;
	},

	get: function(key){
		return (this.hasOwnProperty(key)) ? this[key] : null;
	},

	set: function(key, value){
		if (!this[key] || this.hasOwnProperty(key)) this[key] = value;
		return this;
	},

	empty: function(){
		Hash.each(this, function(value, key){
			delete this[key];
		}, this);
		return this;
	},

	include: function(key, value){
		if (this[key] == null) this[key] = value;
		return this;
	},

	map: function(fn, bind){
		return new Hash(Object.map(this, fn, bind));
	},

	filter: function(fn, bind){
		return new Hash(Object.filter(this, fn, bind));
	},

	every: function(fn, bind){
		return Object.every(this, fn, bind);
	},

	some: function(fn, bind){
		return Object.some(this, fn, bind);
	},

	getKeys: function(){
		return Object.keys(this);
	},

	getValues: function(){
		return Object.values(this);
	},

	toQueryString: function(base){
		return Object.toQueryString(this, base);
	}

});

Hash.extend = Object.append;

Hash.alias({indexOf: 'keyOf', contains: 'hasValue'});

//</1.2compat>


/*
---

name: Event

description: Contains the Event Class, to make the event object cross-browser.

license: MIT-style license.

requires: [Window, Document, Array, Function, String, Object]

provides: Event

...
*/

var Event = new Type('Event', function(event, win){
	if (!win) win = window;
	var doc = win.document;
	event = event || win.event;
	if (event.$extended) return event;
	this.$extended = true;
	var type = event.type,
		target = event.target || event.srcElement,
		page = {},
		client = {},
		related = null,
		rightClick, wheel, code, key;
	while (target && target.nodeType == 3) target = target.parentNode;

	if (type.indexOf('key') != -1){
		code = event.which || event.keyCode;
		key = Object.keyOf(Event.Keys, code);
		if (type == 'keydown'){
			var fKey = code - 111;
			if (fKey > 0 && fKey < 13) key = 'f' + fKey;
		}
		if (!key) key = String.fromCharCode(code).toLowerCase();
	} else if ((/click|mouse|menu/i).test(type)){
		doc = (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
		page = {
			x: (event.pageX != null) ? event.pageX : event.clientX + doc.scrollLeft,
			y: (event.pageY != null) ? event.pageY : event.clientY + doc.scrollTop
		};
		client = {
			x: (event.pageX != null) ? event.pageX - win.pageXOffset : event.clientX,
			y: (event.pageY != null) ? event.pageY - win.pageYOffset : event.clientY
		};
		if ((/DOMMouseScroll|mousewheel/).test(type)){
			wheel = (event.wheelDelta) ? event.wheelDelta / 120 : -(event.detail || 0) / 3;
		}
		rightClick = (event.which == 3) || (event.button == 2);
		if ((/over|out/).test(type)){
			related = event.relatedTarget || event[(type == 'mouseover' ? 'from' : 'to') + 'Element'];
			var testRelated = function(){
				while (related && related.nodeType == 3) related = related.parentNode;
				return true;
			};
			var hasRelated = (Browser.firefox2) ? testRelated.attempt() : testRelated();
			related = (hasRelated) ? related : null;
		}
	} else if ((/gesture|touch/i).test(type)){
		this.rotation = event.rotation;
		this.scale = event.scale;
		this.targetTouches = event.targetTouches;
		this.changedTouches = event.changedTouches;
		var touches = this.touches = event.touches;
		if (touches && touches[0]){
			var touch = touches[0];
			page = {x: touch.pageX, y: touch.pageY};
			client = {x: touch.clientX, y: touch.clientY};
		}
	}

	return Object.append(this, {
		event: event,
		type: type,

		page: page,
		client: client,
		rightClick: rightClick,

		wheel: wheel,

		relatedTarget: document.id(related),
		target: document.id(target),

		code: code,
		key: key,

		shift: event.shiftKey,
		control: event.ctrlKey,
		alt: event.altKey,
		meta: event.metaKey
	});
});

Event.Keys = {
	'enter': 13,
	'up': 38,
	'down': 40,
	'left': 37,
	'right': 39,
	'esc': 27,
	'space': 32,
	'backspace': 8,
	'tab': 9,
	'delete': 46
};

//<1.2compat>

Event.Keys = new Hash(Event.Keys);

//</1.2compat>

Event.implement({

	stop: function(){
		return this.stopPropagation().preventDefault();
	},

	stopPropagation: function(){
		if (this.event.stopPropagation) this.event.stopPropagation();
		else this.event.cancelBubble = true;
		return this;
	},

	preventDefault: function(){
		if (this.event.preventDefault) this.event.preventDefault();
		else this.event.returnValue = false;
		return this;
	}

});


/*
---

name: Element.Event

description: Contains Element methods for dealing with events. This file also includes mouseenter and mouseleave custom Element Events.

license: MIT-style license.

requires: [Element, Event]

provides: Element.Event

...
*/

(function(){

Element.Properties.events = {set: function(events){
	this.addEvents(events);
}};

[Element, Window, Document].invoke('implement', {

	addEvent: function(type, fn){
		var events = this.retrieve('events', {});
		if (!events[type]) events[type] = {keys: [], values: []};
		if (events[type].keys.contains(fn)) return this;
		events[type].keys.push(fn);
		var realType = type,
			custom = Element.Events[type],
			condition = fn,
			self = this;
		if (custom){
			if (custom.onAdd) custom.onAdd.call(this, fn);
			if (custom.condition){
				condition = function(event){
					if (custom.condition.call(this, event)) return fn.call(this, event);
					return true;
				};
			}
			realType = custom.base || realType;
		}
		var defn = function(){
			return fn.call(self);
		};
		var nativeEvent = Element.NativeEvents[realType];
		if (nativeEvent){
			if (nativeEvent == 2){
				defn = function(event){
					event = new Event(event, self.getWindow());
					if (condition.call(self, event) === false) event.stop();
				};
			}
			this.addListener(realType, defn, arguments[2]);
		}
		events[type].values.push(defn);
		return this;
	},

	removeEvent: function(type, fn){
		var events = this.retrieve('events');
		if (!events || !events[type]) return this;
		var list = events[type];
		var index = list.keys.indexOf(fn);
		if (index == -1) return this;
		var value = list.values[index];
		delete list.keys[index];
		delete list.values[index];
		var custom = Element.Events[type];
		if (custom){
			if (custom.onRemove) custom.onRemove.call(this, fn);
			type = custom.base || type;
		}
		return (Element.NativeEvents[type]) ? this.removeListener(type, value, arguments[2]) : this;
	},

	addEvents: function(events){
		for (var event in events) this.addEvent(event, events[event]);
		return this;
	},

	removeEvents: function(events){
		var type;
		if (typeOf(events) == 'object'){
			for (type in events) this.removeEvent(type, events[type]);
			return this;
		}
		var attached = this.retrieve('events');
		if (!attached) return this;
		if (!events){
			for (type in attached) this.removeEvents(type);
			this.eliminate('events');
		} else if (attached[events]){
			attached[events].keys.each(function(fn){
				this.removeEvent(events, fn);
			}, this);
			delete attached[events];
		}
		return this;
	},

	fireEvent: function(type, args, delay){
		var events = this.retrieve('events');
		if (!events || !events[type]) return this;
		args = Array.from(args);

		events[type].keys.each(function(fn){
			if (delay) fn.delay(delay, this, args);
			else fn.apply(this, args);
		}, this);
		return this;
	},

	cloneEvents: function(from, type){
		from = document.id(from);
		var events = from.retrieve('events');
		if (!events) return this;
		if (!type){
			for (var eventType in events) this.cloneEvents(from, eventType);
		} else if (events[type]){
			events[type].keys.each(function(fn){
				this.addEvent(type, fn);
			}, this);
		}
		return this;
	}

});

Element.NativeEvents = {
	click: 2, dblclick: 2, mouseup: 2, mousedown: 2, contextmenu: 2, //mouse buttons
	mousewheel: 2, DOMMouseScroll: 2, //mouse wheel
	mouseover: 2, mouseout: 2, mousemove: 2, selectstart: 2, selectend: 2, //mouse movement
	keydown: 2, keypress: 2, keyup: 2, //keyboard
	orientationchange: 2, // mobile
	touchstart: 2, touchmove: 2, touchend: 2, touchcancel: 2, // touch
	gesturestart: 2, gesturechange: 2, gestureend: 2, // gesture
	focus: 2, blur: 2, change: 2, reset: 2, select: 2, submit: 2, //form elements
	load: 2, unload: 1, beforeunload: 2, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window
	error: 1, abort: 1, scroll: 1 //misc
};

var check = function(event){
	var related = event.relatedTarget;
	if (related == null) return true;
	if (!related) return false;
	return (related != this && related.prefix != 'xul' && typeOf(this) != 'document' && !this.contains(related));
};

Element.Events = {

	mouseenter: {
		base: 'mouseover',
		condition: check
	},

	mouseleave: {
		base: 'mouseout',
		condition: check
	},

	mousewheel: {
		base: (Browser.firefox) ? 'DOMMouseScroll' : 'mousewheel'
	}

};

//<1.2compat>

Element.Events = new Hash(Element.Events);

//</1.2compat>

})();


/*
---

name: DOMReady

description: Contains the custom event domready.

license: MIT-style license.

requires: [Browser, Element, Element.Event]

provides: [DOMReady, DomReady]

...
*/

(function(window, document){

var ready,
	loaded,
	checks = [],
	shouldPoll,
	timer,
	isFramed = true;

// Thanks to Rich Dougherty <http://www.richdougherty.com/>
try {
	isFramed = window.frameElement != null;
} catch(e){}

var domready = function(){
	clearTimeout(timer);
	if (ready) return;
	Browser.loaded = ready = true;
	document.removeListener('DOMContentLoaded', domready).removeListener('readystatechange', check);
	
	document.fireEvent('domready');
	window.fireEvent('domready');
};

var check = function(){
	for (var i = checks.length; i--;) if (checks[i]()){
		domready();
		return true;
	}

	return false;
};

var poll = function(){
	clearTimeout(timer);
	if (!check()) timer = setTimeout(poll, 10);
};

document.addListener('DOMContentLoaded', domready);

// doScroll technique by Diego Perini http://javascript.nwbox.com/IEContentLoaded/
var testElement = document.createElement('div');
if (testElement.doScroll && !isFramed){
	checks.push(function(){
		try {
			testElement.doScroll();
			return true;
		} catch (e){}

		return false;
	});
	shouldPoll = true;
}

if (document.readyState) checks.push(function(){
	var state = document.readyState;
	return (state == 'loaded' || state == 'complete');
});

if ('onreadystatechange' in document) document.addListener('readystatechange', check);
else shouldPoll = true;

if (shouldPoll) poll();

Element.Events.domready = {
	onAdd: function(fn){
		if (ready) fn.call(this);
	}
};

// Make sure that domready fires before load
Element.Events.load = {
	base: 'load',
	onAdd: function(fn){
		if (loaded && this == window) fn.call(this);
	},
	condition: function(){
		if (this == window){
			domready();
			delete Element.Events.load;
		}
		
		return true;
	}
};

// This is based on the custom load event
window.addEvent('load', function(){
	loaded = true;
});

})(window, document);


/*
---

name: Element.Style

description: Contains methods for interacting with the styles of Elements in a fashionable way.

license: MIT-style license.

requires: Element

provides: Element.Style

...
*/

(function(){

var html = document.html;

Element.Properties.styles = {set: function(styles){
	this.setStyles(styles);
}};

var hasOpacity = (html.style.opacity != null);
var reAlpha = /alpha\(opacity=([\d.]+)\)/i;

var setOpacity = function(element, opacity){
	if (!element.currentStyle || !element.currentStyle.hasLayout) element.style.zoom = 1;
	if (hasOpacity){
		element.style.opacity = opacity;
	} else {
		opacity = (opacity == 1) ? '' : 'alpha(opacity=' + opacity * 100 + ')';
		var filter = element.style.filter || element.getComputedStyle('filter') || '';
		element.style.filter = reAlpha.test(filter) ? filter.replace(reAlpha, opacity) : filter + opacity;
	}
};

Element.Properties.opacity = {

	set: function(opacity){
		var visibility = this.style.visibility;
		if (opacity == 0 && visibility != 'hidden') this.style.visibility = 'hidden';
		else if (opacity != 0 && visibility != 'visible') this.style.visibility = 'visible';

		setOpacity(this, opacity);
	},

	get: (hasOpacity) ? function(){
		var opacity = this.style.opacity || this.getComputedStyle('opacity');
		return (opacity == '') ? 1 : opacity;
	} : function(){
		var opacity, filter = (this.style.filter || this.getComputedStyle('filter'));
		if (filter) opacity = filter.match(reAlpha);
		return (opacity == null || filter == null) ? 1 : (opacity[1] / 100);
	}

};

var floatName = (html.style.cssFloat == null) ? 'styleFloat' : 'cssFloat';

Element.implement({

	getComputedStyle: function(property){
		if (this.currentStyle) return this.currentStyle[property.camelCase()];
		var defaultView = Element.getDocument(this).defaultView,
			computed = defaultView ? defaultView.getComputedStyle(this, null) : null;
		return (computed) ? computed.getPropertyValue((property == floatName) ? 'float' : property.hyphenate()) : null;
	},

	setOpacity: function(value){
		setOpacity(this, value);
		return this;
	},

	getOpacity: function(){
		return this.get('opacity');
	},

	setStyle: function(property, value){
		switch (property){
			case 'opacity': return this.set('opacity', parseFloat(value));
			case 'float': property = floatName;
		}
		property = property.camelCase();
		if (typeOf(value) != 'string'){
			var map = (Element.Styles[property] || '@').split(' ');
			value = Array.from(value).map(function(val, i){
				if (!map[i]) return '';
				return (typeOf(val) == 'number') ? map[i].replace('@', Math.round(val)) : val;
			}).join(' ');
		} else if (value == String(Number(value))){
			value = Math.round(value);
		}
		this.style[property] = value;
		return this;
	},

	getStyle: function(property){
		switch (property){
			case 'opacity': return this.get('opacity');
			case 'float': property = floatName;
		}
		property = property.camelCase();
		var result = this.style[property];
		if (!result || property == 'zIndex'){
			result = [];
			for (var style in Element.ShortStyles){
				if (property != style) continue;
				for (var s in Element.ShortStyles[style]) result.push(this.getStyle(s));
				return result.join(' ');
			}
			result = this.getComputedStyle(property);
		}
		if (result){
			result = String(result);
			var color = result.match(/rgba?\([\d\s,]+\)/);
			if (color) result = result.replace(color[0], color[0].rgbToHex());
		}
		if (Browser.opera || (Browser.ie && isNaN(parseFloat(result)))){
			if ((/^(height|width)$/).test(property)){
				var values = (property == 'width') ? ['left', 'right'] : ['top', 'bottom'], size = 0;
				values.each(function(value){
					size += this.getStyle('border-' + value + '-width').toInt() + this.getStyle('padding-' + value).toInt();
				}, this);
				return this['offset' + property.capitalize()] - size + 'px';
			}
			if (Browser.opera && String(result).indexOf('px') != -1) return result;
			if ((/^border(.+)Width|margin|padding/).test(property)) return '0px';
		}
		return result;
	},

	setStyles: function(styles){
		for (var style in styles) this.setStyle(style, styles[style]);
		return this;
	},

	getStyles: function(){
		var result = {};
		Array.flatten(arguments).each(function(key){
			result[key] = this.getStyle(key);
		}, this);
		return result;
	}

});

Element.Styles = {
	left: '@px', top: '@px', bottom: '@px', right: '@px',
	width: '@px', height: '@px', maxWidth: '@px', maxHeight: '@px', minWidth: '@px', minHeight: '@px',
	backgroundColor: 'rgb(@, @, @)', backgroundPosition: '@px @px', color: 'rgb(@, @, @)',
	fontSize: '@px', letterSpacing: '@px', lineHeight: '@px', clip: 'rect(@px @px @px @px)',
	margin: '@px @px @px @px', padding: '@px @px @px @px', border: '@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)',
	borderWidth: '@px @px @px @px', borderStyle: '@ @ @ @', borderColor: 'rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)',
	zIndex: '@', 'zoom': '@', fontWeight: '@', textIndent: '@px', opacity: '@'
};

//<1.2compat>

Element.Styles = new Hash(Element.Styles);

//</1.2compat>

Element.ShortStyles = {margin: {}, padding: {}, border: {}, borderWidth: {}, borderStyle: {}, borderColor: {}};

['Top', 'Right', 'Bottom', 'Left'].each(function(direction){
	var Short = Element.ShortStyles;
	var All = Element.Styles;
	['margin', 'padding'].each(function(style){
		var sd = style + direction;
		Short[style][sd] = All[sd] = '@px';
	});
	var bd = 'border' + direction;
	Short.border[bd] = All[bd] = '@px @ rgb(@, @, @)';
	var bdw = bd + 'Width', bds = bd + 'Style', bdc = bd + 'Color';
	Short[bd] = {};
	Short.borderWidth[bdw] = Short[bd][bdw] = All[bdw] = '@px';
	Short.borderStyle[bds] = Short[bd][bds] = All[bds] = '@';
	Short.borderColor[bdc] = Short[bd][bdc] = All[bdc] = 'rgb(@, @, @)';
});

})();


/*
---

name: Element.Dimensions

description: Contains methods to work with size, scroll, or positioning of Elements and the window object.

license: MIT-style license.

credits:
  - Element positioning based on the [qooxdoo](http://qooxdoo.org/) code and smart browser fixes, [LGPL License](http://www.gnu.org/licenses/lgpl.html).
  - Viewport dimensions based on [YUI](http://developer.yahoo.com/yui/) code, [BSD License](http://developer.yahoo.com/yui/license.html).

requires: [Element, Element.Style]

provides: [Element.Dimensions]

...
*/

(function(){

var element = document.createElement('div'),
	child = document.createElement('div');
element.style.height = '0';
element.appendChild(child);
var brokenOffsetParent = (child.offsetParent === element);
element = child = null;

var isOffset = function(el){
	return styleString(el, 'position') != 'static' || isBody(el);
};

var isOffsetStatic = function(el){
	return isOffset(el) || (/^(?:table|td|th)$/i).test(el.tagName);
};

Element.implement({

	scrollTo: function(x, y){
		if (isBody(this)){
			this.getWindow().scrollTo(x, y);
		} else {
			this.scrollLeft = x;
			this.scrollTop = y;
		}
		return this;
	},

	getSize: function(){
		if (isBody(this)) return this.getWindow().getSize();
		return {x: this.offsetWidth, y: this.offsetHeight};
	},

	getScrollSize: function(){
		if (isBody(this)) return this.getWindow().getScrollSize();
		return {x: this.scrollWidth, y: this.scrollHeight};
	},

	getScroll: function(){
		if (isBody(this)) return this.getWindow().getScroll();
		return {x: this.scrollLeft, y: this.scrollTop};
	},

	getScrolls: function(){
		var element = this.parentNode, position = {x: 0, y: 0};
		while (element && !isBody(element)){
			position.x += element.scrollLeft;
			position.y += element.scrollTop;
			element = element.parentNode;
		}
		return position;
	},

	getOffsetParent: brokenOffsetParent ? function(){
		var element = this;
		if (isBody(element) || styleString(element, 'position') == 'fixed') return null;

		var isOffsetCheck = (styleString(element, 'position') == 'static') ? isOffsetStatic : isOffset;
		while ((element = element.parentNode)){
			if (isOffsetCheck(element)) return element;
		}
		return null;
	} : function(){
		var element = this;
		if (isBody(element) || styleString(element, 'position') == 'fixed') return null;

		try {
			return element.offsetParent;
		} catch(e) {}
		return null;
	},

	getOffsets: function(){
		if (this.getBoundingClientRect && !Browser.Platform.ios){
			var bound = this.getBoundingClientRect(),
				html = document.id(this.getDocument().documentElement),
				htmlScroll = html.getScroll(),
				elemScrolls = this.getScrolls(),
				isFixed = (styleString(this, 'position') == 'fixed');

			return {
				x: bound.left.toInt() + elemScrolls.x + ((isFixed) ? 0 : htmlScroll.x) - html.clientLeft,
				y: bound.top.toInt()  + elemScrolls.y + ((isFixed) ? 0 : htmlScroll.y) - html.clientTop
			};
		}

		var element = this, position = {x: 0, y: 0};
		if (isBody(this)) return position;

		while (element && !isBody(element)){
			position.x += element.offsetLeft;
			position.y += element.offsetTop;

			if (Browser.firefox){
				if (!borderBox(element)){
					position.x += leftBorder(element);
					position.y += topBorder(element);
				}
				var parent = element.parentNode;
				if (parent && styleString(parent, 'overflow') != 'visible'){
					position.x += leftBorder(parent);
					position.y += topBorder(parent);
				}
			} else if (element != this && Browser.safari){
				position.x += leftBorder(element);
				position.y += topBorder(element);
			}

			element = element.offsetParent;
		}
		if (Browser.firefox && !borderBox(this)){
			position.x -= leftBorder(this);
			position.y -= topBorder(this);
		}
		return position;
	},

	getPosition: function(relative){
		if (isBody(this)) return {x: 0, y: 0};
		var offset = this.getOffsets(),
			scroll = this.getScrolls();
		var position = {
			x: offset.x - scroll.x,
			y: offset.y - scroll.y
		};
		
		if (relative && (relative = document.id(relative))){
			var relativePosition = relative.getPosition();
			return {x: position.x - relativePosition.x - leftBorder(relative), y: position.y - relativePosition.y - topBorder(relative)};
		}
		return position;
	},

	getCoordinates: function(element){
		if (isBody(this)) return this.getWindow().getCoordinates();
		var position = this.getPosition(element),
			size = this.getSize();
		var obj = {
			left: position.x,
			top: position.y,
			width: size.x,
			height: size.y
		};
		obj.right = obj.left + obj.width;
		obj.bottom = obj.top + obj.height;
		return obj;
	},

	computePosition: function(obj){
		return {
			left: obj.x - styleNumber(this, 'margin-left'),
			top: obj.y - styleNumber(this, 'margin-top')
		};
	},

	setPosition: function(obj){
		return this.setStyles(this.computePosition(obj));
	}

});


[Document, Window].invoke('implement', {

	getSize: function(){
		var doc = getCompatElement(this);
		return {x: doc.clientWidth, y: doc.clientHeight};
	},

	getScroll: function(){
		var win = this.getWindow(), doc = getCompatElement(this);
		return {x: win.pageXOffset || doc.scrollLeft, y: win.pageYOffset || doc.scrollTop};
	},

	getScrollSize: function(){
		var doc = getCompatElement(this),
			min = this.getSize(),
			body = this.getDocument().body;

		return {x: Math.max(doc.scrollWidth, body.scrollWidth, min.x), y: Math.max(doc.scrollHeight, body.scrollHeight, min.y)};
	},

	getPosition: function(){
		return {x: 0, y: 0};
	},

	getCoordinates: function(){
		var size = this.getSize();
		return {top: 0, left: 0, bottom: size.y, right: size.x, height: size.y, width: size.x};
	}

});

// private methods

var styleString = Element.getComputedStyle;

function styleNumber(element, style){
	return styleString(element, style).toInt() || 0;
}

function borderBox(element){
	return styleString(element, '-moz-box-sizing') == 'border-box';
}

function topBorder(element){
	return styleNumber(element, 'border-top-width');
}

function leftBorder(element){
	return styleNumber(element, 'border-left-width');
}

function isBody(element){
	return (/^(?:body|html)$/i).test(element.tagName);
}

function getCompatElement(element){
	var doc = element.getDocument();
	return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
}

})();

//aliases
Element.alias({position: 'setPosition'}); //compatability

[Window, Document, Element].invoke('implement', {

	getHeight: function(){
		return this.getSize().y;
	},

	getWidth: function(){
		return this.getSize().x;
	},

	getScrollTop: function(){
		return this.getScroll().y;
	},

	getScrollLeft: function(){
		return this.getScroll().x;
	},

	getScrollHeight: function(){
		return this.getScrollSize().y;
	},

	getScrollWidth: function(){
		return this.getScrollSize().x;
	},

	getTop: function(){
		return this.getPosition().y;
	},

	getLeft: function(){
		return this.getPosition().x;
	}

});


/*
---

name: Class

description: Contains the Class Function for easily creating, extending, and implementing reusable Classes.

license: MIT-style license.

requires: [Array, String, Function, Number]

provides: Class

...
*/

(function(){

var Class = this.Class = new Type('Class', function(params){
	if (instanceOf(params, Function)) params = {initialize: params};

	var newClass = function(){
		reset(this);
		if (newClass.$prototyping) return this;
		this.$caller = null;
		var value = (this.initialize) ? this.initialize.apply(this, arguments) : this;
		this.$caller = this.caller = null;
		return value;
	}.extend(this).implement(params);

	newClass.$constructor = Class;
	newClass.prototype.$constructor = newClass;
	newClass.prototype.parent = parent;

	return newClass;
});

var parent = function(){
	if (!this.$caller) throw new Error('The method "parent" cannot be called.');
	var name = this.$caller.$name,
		parent = this.$caller.$owner.parent,
		previous = (parent) ? parent.prototype[name] : null;
	if (!previous) throw new Error('The method "' + name + '" has no parent.');
	return previous.apply(this, arguments);
};

var reset = function(object){
	for (var key in object){
		var value = object[key];
		switch (typeOf(value)){
			case 'object':
				var F = function(){};
				F.prototype = value;
				object[key] = reset(new F);
			break;
			case 'array': object[key] = value.clone(); break;
		}
	}
	return object;
};

var wrap = function(self, key, method){
	if (method.$origin) method = method.$origin;
	var wrapper = function(){
		if (method.$protected && this.$caller == null) throw new Error('The method "' + key + '" cannot be called.');
		var caller = this.caller, current = this.$caller;
		this.caller = current; this.$caller = wrapper;
		var result = method.apply(this, arguments);
		this.$caller = current; this.caller = caller;
		return result;
	}.extend({$owner: self, $origin: method, $name: key});
	return wrapper;
};

var implement = function(key, value, retain){
	if (Class.Mutators.hasOwnProperty(key)){
		value = Class.Mutators[key].call(this, value);
		if (value == null) return this;
	}

	if (typeOf(value) == 'function'){
		if (value.$hidden) return this;
		this.prototype[key] = (retain) ? value : wrap(this, key, value);
	} else {
		Object.merge(this.prototype, key, value);
	}

	return this;
};

var getInstance = function(klass){
	klass.$prototyping = true;
	var proto = new klass;
	delete klass.$prototyping;
	return proto;
};

Class.implement('implement', implement.overloadSetter());

Class.Mutators = {

	Extends: function(parent){
		this.parent = parent;
		this.prototype = getInstance(parent);
	},

	Implements: function(items){
		Array.from(items).each(function(item){
			var instance = new item;
			for (var key in instance) implement.call(this, key, instance[key], true);
		}, this);
	}
};

})();


/*
---

name: Class.Extras

description: Contains Utility Classes that can be implemented into your own Classes to ease the execution of many common tasks.

license: MIT-style license.

requires: Class

provides: [Class.Extras, Chain, Events, Options]

...
*/

(function(){

this.Chain = new Class({

	$chain: [],

	chain: function(){
		this.$chain.append(Array.flatten(arguments));
		return this;
	},

	callChain: function(){
		return (this.$chain.length) ? this.$chain.shift().apply(this, arguments) : false;
	},

	clearChain: function(){
		this.$chain.empty();
		return this;
	}

});

var removeOn = function(string){
	return string.replace(/^on([A-Z])/, function(full, first){
		return first.toLowerCase();
	});
};

this.Events = new Class({

	$events: {},

	addEvent: function(type, fn, internal){
		type = removeOn(type);

		/*<1.2compat>*/
		if (fn == $empty) return this;
		/*</1.2compat>*/

		this.$events[type] = (this.$events[type] || []).include(fn);
		if (internal) fn.internal = true;
		return this;
	},

	addEvents: function(events){
		for (var type in events) this.addEvent(type, events[type]);
		return this;
	},

	fireEvent: function(type, args, delay){
		type = removeOn(type);
		var events = this.$events[type];
		if (!events) return this;
		args = Array.from(args);
		events.each(function(fn){
			if (delay) fn.delay(delay, this, args);
			else fn.apply(this, args);
		}, this);
		return this;
	},
	
	removeEvent: function(type, fn){
		type = removeOn(type);
		var events = this.$events[type];
		if (events && !fn.internal){
			var index =  events.indexOf(fn);
			if (index != -1) delete events[index];
		}
		return this;
	},

	removeEvents: function(events){
		var type;
		if (typeOf(events) == 'object'){
			for (type in events) this.removeEvent(type, events[type]);
			return this;
		}
		if (events) events = removeOn(events);
		for (type in this.$events){
			if (events && events != type) continue;
			var fns = this.$events[type];
			for (var i = fns.length; i--;) if (i in fns){
				this.removeEvent(type, fns[i]);
			}
		}
		return this;
	}

});

this.Options = new Class({

	setOptions: function(){
		var options = this.options = Object.merge.apply(null, [{}, this.options].append(arguments));
		if (this.addEvent) for (var option in options){
			if (typeOf(options[option]) != 'function' || !(/^on[A-Z]/).test(option)) continue;
			this.addEvent(option, options[option]);
			delete options[option];
		}
		return this;
	}

});

})();


/*
---

name: Fx

description: Contains the basic animation logic to be extended by all other Fx Classes.

license: MIT-style license.

requires: [Chain, Events, Options]

provides: Fx

...
*/

(function(){

var Fx = this.Fx = new Class({

	Implements: [Chain, Events, Options],

	options: {
		/*
		onStart: nil,
		onCancel: nil,
		onComplete: nil,
		*/
		fps: 60,
		unit: false,
		duration: 500,
		frames: null,
		frameSkip: true,
		link: 'ignore'
	},

	initialize: function(options){
		this.subject = this.subject || this;
		this.setOptions(options);
	},

	getTransition: function(){
		return function(p){
			return -(Math.cos(Math.PI * p) - 1) / 2;
		};
	},

	step: function(now){
		if (this.options.frameSkip){
			var diff = (this.time != null) ? (now - this.time) : 0, frames = diff / this.frameInterval;
			this.time = now;
			this.frame += frames;
		} else {
			this.frame++;
		}
		
		if (this.frame < this.frames){
			var delta = this.transition(this.frame / this.frames);
			this.set(this.compute(this.from, this.to, delta));
		} else {
			this.frame = this.frames;
			this.set(this.compute(this.from, this.to, 1));
			this.stop();
		}
	},

	set: function(now){
		return now;
	},

	compute: function(from, to, delta){
		return Fx.compute(from, to, delta);
	},

	check: function(){
		if (!this.isRunning()) return true;
		switch (this.options.link){
			case 'cancel': this.cancel(); return true;
			case 'chain': this.chain(this.caller.pass(arguments, this)); return false;
		}
		return false;
	},

	start: function(from, to){
		if (!this.check(from, to)) return this;
		this.from = from;
		this.to = to;
		this.frame = (this.options.frameSkip) ? 0 : -1;
		this.time = null;
		this.transition = this.getTransition();
		var frames = this.options.frames, fps = this.options.fps, duration = this.options.duration;
		this.duration = Fx.Durations[duration] || duration.toInt();
		this.frameInterval = 1000 / fps;
		this.frames = frames || Math.round(this.duration / this.frameInterval);
		this.fireEvent('start', this.subject);
		pushInstance.call(this, fps);
		return this;
	},
	
	stop: function(){
		if (this.isRunning()){
			this.time = null;
			pullInstance.call(this, this.options.fps);
			if (this.frames == this.frame){
				this.fireEvent('complete', this.subject);
				if (!this.callChain()) this.fireEvent('chainComplete', this.subject);
			} else {
				this.fireEvent('stop', this.subject);
			}
		}
		return this;
	},
	
	cancel: function(){
		if (this.isRunning()){
			this.time = null;
			pullInstance.call(this, this.options.fps);
			this.frame = this.frames;
			this.fireEvent('cancel', this.subject).clearChain();
		}
		return this;
	},
	
	pause: function(){
		if (this.isRunning()){
			this.time = null;
			pullInstance.call(this, this.options.fps);
		}
		return this;
	},
	
	resume: function(){
		if ((this.frame < this.frames) && !this.isRunning()) pushInstance.call(this, this.options.fps);
		return this;
	},
	
	isRunning: function(){
		var list = instances[this.options.fps];
		return list && list.contains(this);
	}

});

Fx.compute = function(from, to, delta){
	return (to - from) * delta + from;
};

Fx.Durations = {'short': 250, 'normal': 500, 'long': 1000};

// global timers

var instances = {}, timers = {};

var loop = function(){
	var now = Date.now();
	for (var i = this.length; i--;){
		var instance = this[i];
		if (instance) instance.step(now);
	}
};

var pushInstance = function(fps){
	var list = instances[fps] || (instances[fps] = []);
	list.push(this);
	if (!timers[fps]) timers[fps] = loop.periodical(Math.round(1000 / fps), list);
};

var pullInstance = function(fps){
	var list = instances[fps];
	if (list){
		list.erase(this);
		if (!list.length && timers[fps]){
			delete instances[fps];
			timers[fps] = clearInterval(timers[fps]);
		}
	}
};

})();


/*
---

name: Fx.CSS

description: Contains the CSS animation logic. Used by Fx.Tween, Fx.Morph, Fx.Elements.

license: MIT-style license.

requires: [Fx, Element.Style]

provides: Fx.CSS

...
*/

Fx.CSS = new Class({

	Extends: Fx,

	//prepares the base from/to object

	prepare: function(element, property, values){
		values = Array.from(values);
		if (values[1] == null){
			values[1] = values[0];
			values[0] = element.getStyle(property);
		}
		var parsed = values.map(this.parse);
		return {from: parsed[0], to: parsed[1]};
	},

	//parses a value into an array

	parse: function(value){
		value = Function.from(value)();
		value = (typeof value == 'string') ? value.split(' ') : Array.from(value);
		return value.map(function(val){
			val = String(val);
			var found = false;
			Object.each(Fx.CSS.Parsers, function(parser, key){
				if (found) return;
				var parsed = parser.parse(val);
				if (parsed || parsed === 0) found = {value: parsed, parser: parser};
			});
			found = found || {value: val, parser: Fx.CSS.Parsers.String};
			return found;
		});
	},

	//computes by a from and to prepared objects, using their parsers.

	compute: function(from, to, delta){
		var computed = [];
		(Math.min(from.length, to.length)).times(function(i){
			computed.push({value: from[i].parser.compute(from[i].value, to[i].value, delta), parser: from[i].parser});
		});
		computed.$family = Function.from('fx:css:value');
		return computed;
	},

	//serves the value as settable

	serve: function(value, unit){
		if (typeOf(value) != 'fx:css:value') value = this.parse(value);
		var returned = [];
		value.each(function(bit){
			returned = returned.concat(bit.parser.serve(bit.value, unit));
		});
		return returned;
	},

	//renders the change to an element

	render: function(element, property, value, unit){
		element.setStyle(property, this.serve(value, unit));
	},

	//searches inside the page css to find the values for a selector

	search: function(selector){
		if (Fx.CSS.Cache[selector]) return Fx.CSS.Cache[selector];
		var to = {}, selectorTest = new RegExp('^' + selector.escapeRegExp() + '$');
		Array.each(document.styleSheets, function(sheet, j){
			var href = sheet.href;
			if (href && href.contains('://') && !href.contains(document.domain)) return;
			var rules = sheet.rules || sheet.cssRules;
			Array.each(rules, function(rule, i){
				if (!rule.style) return;
				var selectorText = (rule.selectorText) ? rule.selectorText.replace(/^\w+/, function(m){
					return m.toLowerCase();
				}) : null;
				if (!selectorText || !selectorTest.test(selectorText)) return;
				Object.each(Element.Styles, function(value, style){
					if (!rule.style[style] || Element.ShortStyles[style]) return;
					value = String(rule.style[style]);
					to[style] = ((/^rgb/).test(value)) ? value.rgbToHex() : value;
				});
			});
		});
		return Fx.CSS.Cache[selector] = to;
	}

});

Fx.CSS.Cache = {};

Fx.CSS.Parsers = {

	Color: {
		parse: function(value){
			if (value.match(/^#[0-9a-f]{3,6}$/i)) return value.hexToRgb(true);
			return ((value = value.match(/(\d+),\s*(\d+),\s*(\d+)/))) ? [value[1], value[2], value[3]] : false;
		},
		compute: function(from, to, delta){
			return from.map(function(value, i){
				return Math.round(Fx.compute(from[i], to[i], delta));
			});
		},
		serve: function(value){
			return value.map(Number);
		}
	},

	Number: {
		parse: parseFloat,
		compute: Fx.compute,
		serve: function(value, unit){
			return (unit) ? value + unit : value;
		}
	},

	String: {
		parse: Function.from(false),
		compute: function(zero, one){
			return one;
		},
		serve: function(zero){
			return zero;
		}
	}

};

//<1.2compat>

Fx.CSS.Parsers = new Hash(Fx.CSS.Parsers);

//</1.2compat>


/*
---

name: Fx.Tween

description: Formerly Fx.Style, effect to transition any CSS property for an element.

license: MIT-style license.

requires: Fx.CSS

provides: [Fx.Tween, Element.fade, Element.highlight]

...
*/

Fx.Tween = new Class({

	Extends: Fx.CSS,

	initialize: function(element, options){
		this.element = this.subject = document.id(element);
		this.parent(options);
	},

	set: function(property, now){
		if (arguments.length == 1){
			now = property;
			property = this.property || this.options.property;
		}
		this.render(this.element, property, now, this.options.unit);
		return this;
	},

	start: function(property, from, to){
		if (!this.check(property, from, to)) return this;
		var args = Array.flatten(arguments);
		this.property = this.options.property || args.shift();
		var parsed = this.prepare(this.element, this.property, args);
		return this.parent(parsed.from, parsed.to);
	}

});

Element.Properties.tween = {

	set: function(options){
		this.get('tween').cancel().setOptions(options);
		return this;
	},

	get: function(){
		var tween = this.retrieve('tween');
		if (!tween){
			tween = new Fx.Tween(this, {link: 'cancel'});
			this.store('tween', tween);
		}
		return tween;
	}

};

Element.implement({

	tween: function(property, from, to){
		this.get('tween').start(arguments);
		return this;
	},

	fade: function(how){
		var fade = this.get('tween'), o = 'opacity', toggle;
		how = [how, 'toggle'].pick();
		switch (how){
			case 'in': fade.start(o, 1); break;
			case 'out': fade.start(o, 0); break;
			case 'show': fade.set(o, 1); break;
			case 'hide': fade.set(o, 0); break;
			case 'toggle':
				var flag = this.retrieve('fade:flag', this.get('opacity') == 1);
				fade.start(o, (flag) ? 0 : 1);
				this.store('fade:flag', !flag);
				toggle = true;
			break;
			default: fade.start(o, arguments);
		}
		if (!toggle) this.eliminate('fade:flag');
		return this;
	},

	highlight: function(start, end){
		if (!end){
			end = this.retrieve('highlight:original', this.getStyle('background-color'));
			end = (end == 'transparent') ? '#fff' : end;
		}
		var tween = this.get('tween');
		tween.start('background-color', start || '#ffff88', end).chain(function(){
			this.setStyle('background-color', this.retrieve('highlight:original'));
			tween.callChain();
		}.bind(this));
		return this;
	}

});


/*
---

name: Weber

description: One of the most important items in MooTools. Contains the dollar function, the dollars function, and an handful of cross-browser, time-saver methods to let you easily work with HTML Elements.

license: MIT-style license.

requires: [Core/DomReady, Core/Element.Event, Core/Element.Dimensions, Core/Fx.Tween]

provides: [Weber]

...
*/

var bgColors = ['#ff0000', '#00ff00', '#0000ff', '#f00f00'];


function _realMorph () {
	document.getElement('#logo a').tween('backgroundColor', bgColors.getRandom());
}

function logoMorph () {
	_realMorph.delay(Math.random() * 5000);
}

window.addEvent('domready', function () {
	try {
	$$('.entry-title').addClass('greta-40');
	//Cufon.replace($$('#navigation'), {fontFamily: 'Klavika Lt'});
	//Cufon.replace('.real-content p', {fontFamily: 'Klavika Lt'});
	Cufon.replace('.greta-40', {fontFamily: 'Greta Display Std Light'});
	
	var enter = (Browser.ie && Browser.Engine.version <= 4 ? 'mouseenter' : 'touchstart');
	var leave = (Browser.ie && Browser.Engine.version <= 4  ? 'mouseleave' : 'touchend');
	$$('#navigation li.menu-item').each(function (li) {
		li.addEvent(enter, li.addClass.bind(li, 'hover'));
		li.addEvent(leave, li.removeClass.bind(li, 'hover'));
	});
	
	document.getElement('#logo a').set('tween', {duration: 2000, onComplete: logoMorph});
	
	if (!document.id(document.body).hasClass('section-welcome'))
		logoMorph();
	else
		document.addEvent('click', function () {
			location.href = document.id('enter-link').get('href');
		})
		
	if (Browser.ie && Browser.version <= 8)
		document.getElements('ul.sub-menu li').setStyle('margin-bottom', '0')
			.getParent().setStyle('top', 21);
	} catch (e) {
		if (window.console)
			console.error(e);
	}
});

window.addEvent('load', function () {
	//if (Browser.ie) return;
	(function () {
		if (!isFontInstalled('TitilliumText14L250wt')) {
			Asset.javascript($('base-uri').get('text')+'assets/fonts/titillium/TitilliumText250wt-cufon.js', {onLoad: function () {
				Cufon.replace('.entry-content, #navigation', {fontFamily: 'TitilliumText14L'});
			}});
		}
	}).delay(100);
});


function isFontInstalled(font){
	var el = new Element('span', {text: 'fontTest .', styles: { 'font-family': 'serif'}});
	el.inject(document.body);
	var width = el.getSize().x;
	el.setStyle('font-family', '"'+font+'",serif');
	var newWidth = el.getSize().x;
	el.destroy();
	return (width != newWidth);
};


/*
---

name: Request

description: Powerful all purpose Request Class. Uses XMLHTTPRequest.

license: MIT-style license.

requires: [Object, Element, Chain, Events, Options, Browser]

provides: Request

...
*/

(function(){

var empty = function(){},
	progressSupport = ('onprogress' in new Browser.Request);

var Request = this.Request = new Class({

	Implements: [Chain, Events, Options],

	options: {/*
		onRequest: function(){},
		onLoadstart: function(event, xhr){},
		onProgress: function(event, xhr){},
		onComplete: function(){},
		onCancel: function(){},
		onSuccess: function(responseText, responseXML){},
		onFailure: function(xhr){},
		onException: function(headerName, value){},
		onTimeout: function(){},
		user: '',
		password: '',*/
		url: '',
		data: '',
		headers: {
			'X-Requested-With': 'XMLHttpRequest',
			'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
		},
		async: true,
		format: false,
		method: 'post',
		link: 'ignore',
		isSuccess: null,
		emulation: true,
		urlEncoded: true,
		encoding: 'utf-8',
		evalScripts: false,
		evalResponse: false,
		timeout: 0,
		noCache: false
	},

	initialize: function(options){
		this.xhr = new Browser.Request();
		this.setOptions(options);
		this.headers = this.options.headers;
	},

	onStateChange: function(){
		var xhr = this.xhr;
		if (xhr.readyState != 4 || !this.running) return;
		this.running = false;
		this.status = 0;
		Function.attempt(function(){
			var status = xhr.status;
			this.status = (status == 1223) ? 204 : status;
		}.bind(this));
		xhr.onreadystatechange = empty;
		if (progressSupport) xhr.onprogress = xhr.onloadstart = empty;
		clearTimeout(this.timer);
		
		this.response = {text: this.xhr.responseText || '', xml: this.xhr.responseXML};
		if (this.options.isSuccess.call(this, this.status))
			this.success(this.response.text, this.response.xml);
		else
			this.failure();
	},

	isSuccess: function(){
		var status = this.status;
		return (status >= 200 && status < 300);
	},

	isRunning: function(){
		return !!this.running;
	},

	processScripts: function(text){
		if (this.options.evalResponse || (/(ecma|java)script/).test(this.getHeader('Content-type'))) return Browser.exec(text);
		return text.stripScripts(this.options.evalScripts);
	},

	success: function(text, xml){
		this.onSuccess(this.processScripts(text), xml);
	},

	onSuccess: function(){
		this.fireEvent('complete', arguments).fireEvent('success', arguments).callChain();
	},

	failure: function(){
		this.onFailure();
	},

	onFailure: function(){
		this.fireEvent('complete').fireEvent('failure', this.xhr);
	},
	
	loadstart: function(event){
		this.fireEvent('loadstart', [event, this.xhr]);
	},
	
	progress: function(event){
		this.fireEvent('progress', [event, this.xhr]);
	},
	
	timeout: function(){
		this.fireEvent('timeout', this.xhr);
	},

	setHeader: function(name, value){
		this.headers[name] = value;
		return this;
	},

	getHeader: function(name){
		return Function.attempt(function(){
			return this.xhr.getResponseHeader(name);
		}.bind(this));
	},

	check: function(){
		if (!this.running) return true;
		switch (this.options.link){
			case 'cancel': this.cancel(); return true;
			case 'chain': this.chain(this.caller.pass(arguments, this)); return false;
		}
		return false;
	},
	
	send: function(options){
		if (!this.check(options)) return this;

		this.options.isSuccess = this.options.isSuccess || this.isSuccess;
		this.running = true;

		var type = typeOf(options);
		if (type == 'string' || type == 'element') options = {data: options};

		var old = this.options;
		options = Object.append({data: old.data, url: old.url, method: old.method}, options);
		var data = options.data, url = String(options.url), method = options.method.toLowerCase();

		switch (typeOf(data)){
			case 'element': data = document.id(data).toQueryString(); break;
			case 'object': case 'hash': data = Object.toQueryString(data);
		}

		if (this.options.format){
			var format = 'format=' + this.options.format;
			data = (data) ? format + '&' + data : format;
		}

		if (this.options.emulation && !['get', 'post'].contains(method)){
			var _method = '_method=' + method;
			data = (data) ? _method + '&' + data : _method;
			method = 'post';
		}

		if (this.options.urlEncoded && ['post', 'put'].contains(method)){
			var encoding = (this.options.encoding) ? '; charset=' + this.options.encoding : '';
			this.headers['Content-type'] = 'application/x-www-form-urlencoded' + encoding;
		}

		if (!url) url = document.location.pathname;
		
		var trimPosition = url.lastIndexOf('/');
		if (trimPosition > -1 && (trimPosition = url.indexOf('#')) > -1) url = url.substr(0, trimPosition);

		if (this.options.noCache)
			url += (url.contains('?') ? '&' : '?') + String.uniqueID();

		if (data && method == 'get'){
			url += (url.contains('?') ? '&' : '?') + data;
			data = null;
		}

		var xhr = this.xhr;
		if (progressSupport){
			xhr.onloadstart = this.loadstart.bind(this);
			xhr.onprogress = this.progress.bind(this);
		}

		xhr.open(method.toUpperCase(), url, this.options.async, this.options.user, this.options.password);
		if (this.options.user && 'withCredentials' in xhr) xhr.withCredentials = true;
		
		xhr.onreadystatechange = this.onStateChange.bind(this);

		Object.each(this.headers, function(value, key){
			try {
				xhr.setRequestHeader(key, value);
			} catch (e){
				this.fireEvent('exception', [key, value]);
			}
		}, this);

		this.fireEvent('request');
		xhr.send(data);
		if (!this.options.async) this.onStateChange();
		if (this.options.timeout) this.timer = this.timeout.delay(this.options.timeout, this);
		return this;
	},

	cancel: function(){
		if (!this.running) return this;
		this.running = false;
		var xhr = this.xhr;
		xhr.abort();
		clearTimeout(this.timer);
		xhr.onreadystatechange = empty;
		if (progressSupport) xhr.onprogress = xhr.onloadstart = empty;
		this.xhr = new Browser.Request();
		this.fireEvent('cancel');
		return this;
	}

});

var methods = {};
['get', 'post', 'put', 'delete', 'GET', 'POST', 'PUT', 'DELETE'].each(function(method){
	methods[method] = function(data){
		var object = {
			method: method
		};
		if (data != null) object.data = data;
		return this.send(object);
	};
});

Request.implement(methods);

Element.Properties.send = {

	set: function(options){
		var send = this.get('send').cancel();
		send.setOptions(options);
		return this;
	},

	get: function(){
		var send = this.retrieve('send');
		if (!send){
			send = new Request({
				data: this, link: 'cancel', method: this.get('method') || 'post', url: this.get('action')
			});
			this.store('send', send);
		}
		return send;
	}

};

Element.implement({

	send: function(url){
		var sender = this.get('send');
		sender.send({data: this, url: url || sender.options.url});
		return this;
	}

});

})();

/*
---

name: JSON

description: JSON encoder and decoder.

license: MIT-style license.

See Also: <http://www.json.org/>

requires: [Array, String, Number, Function]

provides: JSON

...
*/

if (typeof JSON == 'undefined') this.JSON = {};

//<1.2compat>

JSON = new Hash({
	stringify: JSON.stringify,
	parse: JSON.parse
});

//</1.2compat>

(function(){

var special = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'};

var escape = function(chr){
	return special[chr] || '\\u' + ('0000' + chr.charCodeAt(0).toString(16)).slice(-4);
};

JSON.validate = function(string){
	string = string.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
					replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
					replace(/(?:^|:|,)(?:\s*\[)+/g, '');

	return (/^[\],:{}\s]*$/).test(string);
};

JSON.encode = JSON.stringify ? function(obj){
	return JSON.stringify(obj);
} : function(obj){
	if (obj && obj.toJSON) obj = obj.toJSON();

	switch (typeOf(obj)){
		case 'string':
			return '"' + obj.replace(/[\x00-\x1f\\"]/g, escape) + '"';
		case 'array':
			return '[' + obj.map(JSON.encode).clean() + ']';
		case 'object': case 'hash':
			var string = [];
			Object.each(obj, function(value, key){
				var json = JSON.encode(value);
				if (json) string.push(JSON.encode(key) + ':' + json);
			});
			return '{' + string + '}';
		case 'number': case 'boolean': return '' + obj;
		case 'null': return 'null';
	}

	return null;
};

JSON.decode = function(string, secure){
	if (!string || typeOf(string) != 'string') return null;

	if (secure || JSON.secure){
		if (JSON.parse) return JSON.parse(string);
		if (!JSON.validate(string)) throw new Error('JSON could not decode the input; security is enabled and the value is not secure.');
	}

	return eval('(' + string + ')');
};

})();


/*
---

name: Request.JSON

description: Extends the basic Request Class with additional methods for sending and receiving JSON data.

license: MIT-style license.

requires: [Request, JSON]

provides: Request.JSON

...
*/

Request.JSON = new Class({

	Extends: Request,

	options: {
		/*onError: function(text, error){},*/
		secure: true
	},

	initialize: function(options){
		this.parent(options);
		Object.append(this.headers, {
			'Accept': 'application/json',
			'X-Request': 'JSON'
		});
	},

	success: function(text){
		var json;
		try {
			json = this.response.json = JSON.decode(text, this.options.secure);
		} catch (error){
			this.fireEvent('error', [text, error]);
			return;
		}
		if (json == null) this.onFailure();
		else this.onSuccess(json, text);
	}

});


/*
---

name: Class.Binds

description: A clean Class.Binds Implementation

authors: Scott Kyle (@appden), Christoph Pojer (@cpojer)

license: MIT-style license.

requires: [Core/Class, Core/Function]

provides: Class.Binds

...
*/

Class.Binds = new Class({

	$bound: {},

	bound: function(name){
		return this.$bound[name] ? this.$bound[name] : this.$bound[name] = this[name].bind(this);
	}

});

/*
---

name: History

description: History Management via popstate or hashchange.

authors: Christoph Pojer (@cpojer)

license: MIT-style license.

requires: [Core/Events, Core/Element.Event, Class-Extras/Class.Binds]

provides: History

...
*/

(function(){

var events = Element.NativeEvents,
	location = window.location,
	base = location.pathname,
	history = window.history,
	hasPushState = ('pushState' in history),
	event = hasPushState ? 'popstate' : 'hashchange';

this.History = new new Class({

	Implements: [Class.Binds, Events],

	initialize: hasPushState ? function(){
		events[event] = 2;
		window.addEvent(event, this.bound('pop'));
	} : function(){
		events[event] = 1;
		window.addEvent(event, this.bound('pop'));

		this.hash = location.hash;
		var hashchange = ('onhashchange' in window);
		if (!(hashchange && (document.documentMode === undefined || document.documentMode > 7)))
			this.timer = this.check.periodical(200, this);
	},

	push: hasPushState ? function(url, title, state){
		if (base && base != url) base = null;
		
		history.pushState(state || null, title || null, url);
		this.onChange(url, state);
	} : function(url){
		location.hash = url;
	},

	replace: hasPushState ? function(url, title, state){
		history.replaceState(state || null, title || null, url);
	} : function(url){
		this.hash = '#' + url;
		this.push(url);
	},

	pop: hasPushState ? function(event){
		var url = location.pathname;
		if (url == base){
			base = null;
			return;
		}
		this.onChange(url, event.event.state);
	} : function(){
		var hash = location.hash;
		if (this.hash == hash) return;

		this.hash = hash;
		this.onChange(hash.substr(1));
	},

	onChange: function(url, state){
		this.fireEvent('change', [url, state || {}]);
	},

	back: function(){
		history.back();
	},

	forward: function(){
		history.forward();
	},
	
	getPath: function(){
		return hasPushState ? location.pathname : location.hash.substr(1);
	},

	hasPushState: function(){
		return hasPushState;
	},

	check: function(){
		if (this.hash != location.hash) this.pop();
	}

});

}).call(this);


/*
---

script: More.js

name: More

description: MooTools More

license: MIT-style license

authors:
  - Guillermo Rauch
  - Thomas Aylott
  - Scott Kyle
  - Arian Stolwijk
  - Tim Wienk
  - Christoph Pojer
  - Aaron Newton

requires:
  - Core/MooTools

provides: [MooTools.More]

...
*/

MooTools.More = {
	'version': '1.3.0.2dev',
	'build': '%build%'
};


/*
---

script: Assets.js

name: Assets

description: Provides methods to dynamically load JavaScript, CSS, and Image files into the document.

license: MIT-style license

authors:
  - Valerio Proietti

requires:
  - Core/Element.Event
  - /MooTools.More

provides: [Assets]

...
*/

var Asset = {

	javascript: function(source, properties){
		properties = Object.append({
			document: document
		}, properties);

		if (properties.onLoad){
			properties.onload = properties.onLoad;
			delete properties.onLoad;
		}

		var script = new Element('script', {src: source, type: 'text/javascript'});
		var load = properties.onload || function(){},
			doc = properties.document;
		delete properties.onload;
		delete properties.document;

		return script.addEvents({
			load: load,
			readystatechange: function(){
				if (['loaded', 'complete'].contains(this.readyState)) load.call(this);
			}
		}).set(properties).inject(doc.head);
	},

	css: function(source, properties){
		properties = properties || {};
		var onload = properties.onload || properties.onLoad;
		if (onload){
			properties.events = properties.events || {};
			properties.events.load = onload;
			delete properties.onload;
			delete properties.onLoad;
		}
		return new Element('link', Object.merge({
			rel: 'stylesheet',
			media: 'screen',
			type: 'text/css',
			href: source
		}, properties)).inject(document.head);
	},

	image: function(source, properties){
		properties = Object.merge({
			onload: function(){},
			onabort: function(){},
			onerror: function(){}
		}, properties);
		var image = new Image();
		var element = document.id(image) || new Element('img');
		['load', 'abort', 'error'].each(function(name){
			var type = 'on' + name;
			var cap = name.capitalize();
			if (properties['on' + cap]){
				properties[type] = properties['on' + cap];
				delete properties['on' + cap];
			}
			var event = properties[type];
			delete properties[type];
			image[type] = function(){
				if (!image) return;
				if (!element.parentNode){
					element.width = image.width;
					element.height = image.height;
				}
				image = image.onload = image.onabort = image.onerror = null;
				event.delay(1, element, element);
				element.fireEvent(name, element, 1);
			};
		});
		image.src = element.src = source;
		if (image && image.complete) image.onload.delay(1);
		return element.set(properties);
	},

	images: function(sources, options){
		options = Object.merge({
			onComplete: function(){},
			onProgress: function(){},
			onError: function(){},
			properties: {}
		}, options);
		sources = Array.from(sources);
		var counter = 0;
		return new Elements(sources.map(function(source, index){
			return Asset.image(source, Object.append(options.properties, {
				onload: function(){
					counter++;
					options.onProgress.call(this, counter, index, source);
					if (counter == sources.length) options.onComplete();
				},
				onerror: function(){
					counter++;
					options.onError.call(this, counter, index, source);
					if (counter == sources.length) options.onComplete();
				}
			}));
		}));
	}

};


/*
---

name: Background

description: One of the most important items in MooTools. Contains the dollar function, the dollars function, and an handful of cross-browser, time-saver methods to let you easily work with HTML Elements.

license: MIT-style license.

requires: [Core/Element.Dimensions, Core/Browser, Core/Element.Event, Core/Element.Styles, Core/Element.Style, Core/Class.Extras, More/Assets]

provides: [Background]

...
*/

var Background = new Class({
	Implements: [Options],
	options: {
		stretch: false,
		dockTop: false,
		dockBottom: false,
		dockLeft: false,
		dockRight: false,
		imageOverlay: true,
		minHeight: 0,
		minWidth: 0,
		maxHeight: 0,
		maxWidth: 0
	},
	initialize: function (el, options) {
		this.setOptions(options);
		this.element = document.id(el);
		this.timer;
		this.element.setStyles({
			position: (Browser.ie && Browser.Engine.version <= 4 ? 'absolute' : 'fixed'),
			top: 0,
			left: 0,
			//zIndex: 0,
			width: '100%',
			height: '100%',
			overflow: 'hidden'
			
		});
		this.stopped = false;
		this.resizeBound = this.resize.bind(this);
		if (this.element.getElement('img'))
			this.src(this.element.getElement('img').get('src'));
	},
	resize: function () {
		clearTimeout(this.timer);
		this.realResize.delay(50, this);
	},
	realResize: function () {
		if (!this.image)
			return this;
		// Was in if (!options.stretch) {
		var s = $(window).getSize();
		this.element.setStyles({
			width: s.x,
			height: s.y
		});

		this.image.setStyles(this.calculate(this.image));
		
		if (Browser.ie && Browser.Engine.version <= 4)
			this.element.setPosition(window.getScroll());
		return this;
	},
	calculate: function (img, imgRatio, options) {
		if (!options) options = this.options;
		//else options = $merge(this.options, options);
		
		imgRatio = imgRatio||this.ratio;
		
		if (!options.stretch) {
			var s = $(window).getSize();
			var ratio = s.x/s.y

			if (ratio > imgRatio) {
				var width = s.x;
				if (s.y < options.minHeight)
					width = options.minHeight*imgRatio;
				
				if (width < s.x) width = s.x;
					
				var top;
				if (options.dockTop)
					top = 0;
				else if (options.dockBottom)
					top = (width/imgRatio - s.y).abs() * -1;
				else
					top = (width/imgRatio - s.y).abs()/-2;
				
				var left;
				if (options.dockLeft)
					left = 0;
				else if (options.dockRight)
					left = (width - s.x).abs() * -1;
				else
					left = (width - s.x).abs()/-2;
				
				return {
					height: 'auto',
					width: parseInt(width),
					left: 0,
					top: parseInt(top)
				};
			}
			else  {
				var height = s.y;
				
				if (s.x < options.minWidth)
					height = options.minWidth/imgRatio;
				
				if (height < s.y) height = s.y;
				
				var left;
				if (options.dockLeft)
					left = 0;
				else if (options.dockRight)
					left = (height*imgRatio - s.x).abs() * -1;
				else
					left = (height*imgRatio - s.x).abs()/-2;

				var top;
				if (options.dockTop)
					top = 0;
				else if (options.dockBottom)
					top = (height - s.y).abs() * -1;
				else
					top = (height - s.y).abs()/-2;
				
				return {
					height: parseInt(height),
					width: 'auto',
					top: 0,
					left: parseInt(left)
				};
			}
		}
		
	},
	src: function(src) {
		if (!src) {
			if (!this.image) return null;
			return this.image.get('src');
		}
		window.removeEvent('resize', this.resizeBound);
		window.removeEvent('scroll', this.resizeBound);
		this.stopped = false;
		Asset.image(src, {onLoad: this.imageLoaded.bind(this)});
		return this;
	},
	stretch: function (val) {
		this.options.stretch = !!val;
		window.removeEvent('resize', this.resizeBound);
		window.removeEvent('scroll', this.resizeBound);
		if (this.options.stretch) {
			this.image.setStyles({
				width: '100%',
				height: '100%',
				top: 0,
				left: 0
			});
			if (!Browser.ie)
				return this;
		}
		window.addEvent('resize', this.resizeBound);
		
		return this;
	},
	clear: function () {
		this.stopped = true;
		window.removeEvent('resize', this.resizeBound);
		window.removeEvent('scroll', this.resizeBound);
		this.element.getElements('img').destroy();
		this.image = null;
		return this;
	},
	imageLoaded: function (img, noResize) {
		if (this.stopped) return;
		this.image = img;
		this.size = {
			x: img.get('width'),
			y: img.get('height')
		};

		this.ratio = this.size.x/this.size.y;

		this.element.empty()
			.adopt(
				this.image,
				new Element('div', {
					styles: {
						position: 'absolute',
						top: 0,
						left: 0,
						width: '100%',
						height: '100%',
						backgroundColor: 'transparent'
					}
				})
			);
		this.image.setStyle('position', 'absolute');
		if (this.options.stretch) {
			this.image.setStyles({
				width: '100%',
				height: '100%',
				top: 0,
				left: 0
			});
			if (Browser.ie)
				window.addEvent('resize', this.resizeBound);
		}
		else
			window.addEvent('resize', this.resizeBound);
		if (Browser.ie)
			window.addEvent('scroll', this.resizeBound);

		this.realResize();
	}
	
});

/*
---

name: Fx.Morph

description: Formerly Fx.Styles, effect to transition any number of CSS properties for an element using an object of rules, or CSS based selector rules.

license: MIT-style license.

requires: Fx.CSS

provides: Fx.Morph

...
*/

Fx.Morph = new Class({

	Extends: Fx.CSS,

	initialize: function(element, options){
		this.element = this.subject = document.id(element);
		this.parent(options);
	},

	set: function(now){
		if (typeof now == 'string') now = this.search(now);
		for (var p in now) this.render(this.element, p, now[p], this.options.unit);
		return this;
	},

	compute: function(from, to, delta){
		var now = {};
		for (var p in from) now[p] = this.parent(from[p], to[p], delta);
		return now;
	},

	start: function(properties){
		if (!this.check(properties)) return this;
		if (typeof properties == 'string') properties = this.search(properties);
		var from = {}, to = {};
		for (var p in properties){
			var parsed = this.prepare(this.element, p, properties[p]);
			from[p] = parsed.from;
			to[p] = parsed.to;
		}
		return this.parent(from, to);
	}

});

Element.Properties.morph = {

	set: function(options){
		this.get('morph').cancel().setOptions(options);
		return this;
	},

	get: function(){
		var morph = this.retrieve('morph');
		if (!morph){
			morph = new Fx.Morph(this, {link: 'cancel'});
			this.store('morph', morph);
		}
		return morph;
	}

};

Element.implement({

	morph: function(props){
		this.get('morph').start(props);
		return this;
	}

});


/*
---

name: Background.Transition

description: One of the most important items in MooTools. Contains the dollar function, the dollars function, and an handful of cross-browser, time-saver methods to let you easily work with HTML Elements.

license: MIT-style license.

requires: [Stereomorph/Background, Core/Fx.Morph]

provides: [Background.Transition]

...
*/

Background.Transition = new Class({
	Extends: Background,
	Implements: [Events, Options],
	options: {
		maxWidth: null,
		maxHeight: null
	},
	src: function(src, options) {
		if (src && options)
			this._tmpOptions = options;
		this.parent(src);
	},
	imageLoaded: function (img, complete) {
		if (this.stopped) return;

		if (complete || !this._tmpOptions) {
			this.parent(img);
			if (this._tmpOptions) {
				this.setOptions(this._tmpOptions);
				this.fireEvent('complete');
				delete this._tmpOptions;
			}
			return;
		}
		
		var options = $merge(this.options, this._tmpOptions);
		
		var clone = img.clone();
		
		clone.setStyle('position', 'absolute');
		
		if (options.stretch) {
			clone.setStyles({
				width: '100%',
				height: '100%',
				top: 0,
				left: 0,
				opacity: 0
			});
		}

		var styles = this.calculate(img, img.get('width')/img.get('height'), this._tmpOptions);
		styles.opacity = 0;
		clone.setStyles(styles);
		
		styles.opacity = 1;
		
		/*
		var h = clone.inject(document.body).getSize().y * -1;
		clone.dispose();
		clone.setStyle('top', h);
		*/
		if (styles.height == 'auto')
			delete styles.height;
		if (styles.width == 'auto')
			delete styles.width;
		
		var morph = new Fx.Morph(clone, {
			transition: 'quad:out',
			onComplete: this.imageLoaded.pass([img, 'complete'], this)
		});
		this.element.adopt(clone);
		
		morph.start(styles);
	},
	realResize: function () {
		if (!this.image)
			return this;
		// Was in if (!options.stretch) {
		var s = $(window).getSize();
		this.element.setStyles({
			width: s.x,
			height: s.y
		});

		this.image.setStyles(this.calculate(this.image));
		
		if (Browser.ie && Browser.Engine.version <= 4)
			this.element.setPosition(window.getScroll());
		return this;
	},
	calculateNo: function (img, imgRatio, options) {
		var calc = this.parent(img, imgRatio, options);
		if (this.options.maxWidth && calc.width != 'auto' && calc.width > this.options.maxWidth) {
			calc.width
		}
	}
});

/*
---

script: Array.Extras.js

name: Array.Extras

description: Extends the Array native object to include useful methods to work with arrays.

license: MIT-style license

authors:
  - Christoph Pojer
  - Sebastian MarkbÃ¥ge

requires:
  - Core/Array
  - MooTools.More

provides: [Array.Extras]

...
*/
Array.implement({

	min: function(){
		return Math.min.apply(null, this);
	},

	max: function(){
		return Math.max.apply(null, this);
	},

	average: function(){
		return this.length ? this.sum() / this.length : 0;
	},

	sum: function(){
		var result = 0, l = this.length;
		if (l){
			while(l--) result += this[l];
		}
		return result;
	},

	unique: function(){
		return [].combine(this);
	},

	shuffle: function(){
		for (var i = this.length; i && --i;){
			var temp = this[i], r = Math.floor(Math.random() * ( i + 1 ));
			this[i] = this[r];
			this[r] = temp;
		}
		return this;
	},

	reduce: function(fn, value){
		var undefined;
		for (var i = 0, l = this.length; i < l; i++){
			if (i in this) value = value === undefined ? this[i] : fn.call(null, value, this[i], i, this);
		}
		return value;
	},

	reduceRight: function(fn, value){
		var i = this.length, undefined;
		while (i--){
			if (i in this) value = value === undefined ? this[i] : fn.call(null, value, this[i], i, this);
		}
		return value;
	}

});


/*
---

name: PrevNext

description: One of the most important items in MooTools. Contains the dollar function, the dollars function, and an handful of cross-browser, time-saver methods to let you easily work with HTML Elements.

license: MIT-style license.

requires: [Core/Class.Extras, Core/Element.Dimensions]

provides: [PrevNext]

...
*/

(function () {
	/*var winLoaded = false;
	
	var atLoad = function (func) {
		if (!winLoaded)
	}
	
	window.addEvent('load', function () {
		winLoaded = true;
	});*/
	
	var PrevNext = this.PrevNext = new Class({
		Implements: [Options],
		options: {
			color: '#000000',
			type:  'prev',
			lineWidth: 2,
			instantDraw: false,
			size: null
		},
		initialize: function (canvas, parent, options) {
			this.setOptions(options);
			this.canvas = canvas;
			this.parent = parent;
			
			/*if (Browser.Engine.trident && !PrevNext.windowLoaded)
				window.addEvent('load', this.draw.bind(this));
			else*/
			if(this.options.instantDraw)
				this.draw();
		},
		draw: function (alreadyDelayed) {
			if (Browser.ie) {
				if (!Browser.loaded) return this.draw.delay(200, this);
				var props = Object.merge({}, this.options.size);
				var tmp = new Element('canvas'); //document.getElement('canvas');
				this.parent.empty().adopt(tmp);
				this.canvas = tmp;
				G_vmlCanvasManager.initElement(this.canvas);
				if (!alreadyDelayed)
					this.draw.delay(400, this, [true]);
			}
			
			if (!this.canvas.getContext) return;
			//this.canvas.getChildren().destroy();
			var ctx = this.canvas.getContext("2d");
			var x = this.canvas.width, y = this.canvas.height, aX = 0, aY = 0;
			if (this.options.type != 'prev') {
				aX = x;
				aY = y;
			}
			ctx.strokeStyle = this.options.color;
			ctx.lineWidth = this.options.lineWidth;
			ctx.beginPath();
			ctx.moveTo(x - aX, 0);  
			ctx.lineTo(0 + aX, y/2);  
			ctx.lineTo(x - aX, y);  
			ctx.stroke();
		},
		toElement: function () {
			return this.parent;
		}
	});

})();

/*
---

name: Section

description: One of the most important items in MooTools. Contains the dollar function, the dollars function, and an handful of cross-browser, time-saver methods to let you easily work with HTML Elements.

license: MIT-style license.

requires: [Core/Request.JSON, Core/Element.Dimensions, More/Assets, More/Array.Extras, Background.Transition, PrevNext]

provides: [Section]

...
*/

(function () {
	
	var Section = this.Section = new Class({
		Implements: [Options, Events],
		options: {
			baseURI: '/',
			color: 'ffffff',
			backgroundImage: null,
			background_stretch: false,
			titles: [],
			css:  null,
			vimeoId: 0,
			dockings: []
		},
		initialize: function (hash, options) {
			try {
			this.setOptions(options);
			this.hash = hash;
			this.loaded = {image: false, data: false};
			this._triggeredLoad = false;
			this.boundShow = this.show.bind(this);
			this.container = document.getElement('.entry-content');
			if (document.body.hasClass(hash)) {
				this.parseHTML(true);
			}
			} catch (e) {alert(e)}
		},
		show: function (func) {
			if (!this.checkComplete()) {
				this.boundShow = this.show.pass(func, this);
				this.addEvent('load', this.boundShow);
				this.load();
			}
			else {
				if (!this.element)
					this.parseHTML();
				func.run(this);
				document.getElements('.entry-title-ruler').setStyle('width', 0);
				document.getElement('.entry-title')
					.empty()
					.setStyle('opacity', 0);
				this.element.setStyle('opacity', 0);
				this.element.inject(this.container, 'top');
			}
			return this;
		},
		realShow: function () {
			try {
			document.id(document.body).set('id', 'current-'+this.hash);
			document.getElement('.entry-title')
				.empty()
				.set('html', this.options.titles.join('<br>'))
				.setStyle('color', '#'+this.options.color);
			
			if (this.nextCanvas) this.nextCanvas.draw();
			if (this.prevCanvas) this.prevCanvas.draw();
			
			$$('.entry-title-ruler').set('tween', {unit: '%'}).tween('width', 100);
			document.getElement('.entry-title').fade('in');
			this.element.tween.delay(500, this.element, ['opacity', 1]);
			
			(function () { 
				Cufon.refresh();
			}).delay(100, Cufon); //replace('.greta-40', 'Greta Light', {'fontSize': '40'});
			} catch (e) {if (window.console) console.error(e);}
		},
		hide: function () {
			this.element.dispose();
			
			//this._triggeredLoad = true;
		},
		getBgOpts: function () {
			if (!this.bgOpts) {
				this.bgOpts = {
					dockTop: false,
					dockBottom: false,
					dockLeft: false,
					dockRight: false
				};
				this.bgOpts = {};
				if (this.options.dockings) {
					this.options.dockings.each (function (dock) { 
						this.bgOpts['dock'+dock.capitalize()] = true;
					}, this)
				}
				this.bgOpts.stretch = this.options.background_stretch;
			}
			return this.bgOpts;
		},
		load: function () {
			if (this.checkComplete()) return this;
			new Request.JSON({
				url: this.options.baseURI + this.hash + '.json',
				onSuccess: this._dataLoaded.bind(this),
				evalScripts: false
			}).send();

			return this;
		},
		_dataLoaded: function (result) {
			this.setOptions(result);
			this.backgroundImage = this.options.image;
			this.loaded.data = true;
			if (!this.hash != this.options.hash) {
				this.hash = this.options.hash;
				this.fireEvent('hashChange', this);
			}
			if (this.options.css)
				Asset.css(this.options.css);
			
			if (this.backgroundImage)
				Asset.image(this.backgroundImage, {
					onload: this._imageLoaded.bind(this)
				});
			else this.loaded.image = true;
			
			this.options.color = this.options.color||'ffffff';

			this.checkComplete();
		},
		_imageLoaded: function (result) {
			this.loaded.image = true;
			this.checkComplete();
		},
		checkComplete: function () {
			var ready = (this.loaded.image && this.loaded.data);
			if (ready && !this._triggeredLoad) {
				this._triggeredLoad = true;
				this.fireEvent('load');
				this.removeEvent('load', this.boundShow);
			}
			return ready;
		}.protect(),
		parseHTML: function (fromHTML) {
			if (fromHTML)
				this.element = this.container.getElement('.real-content-container');
			
			if (!this.element) {
				var temp = new Element('div', {html: this.options.content.stripScripts()});
				this.element = temp;
				this.element.inject(document.body);
			}
			
			var hHeight = this.container.getPrevious('div.header-wrapper').getSize().y;
			
			this.nextLink = this.element.getElement('.next');
			if (this.nextLink) {
				this.nextLink.setStyle('height', hHeight);
				this.prevCanvas = new PrevNext(this.nextLink.getElement('canvas'), this.nextLink, {
					color: '#'+this.options.color,
					type: 'next',
					instantDraw: fromHTML,
					size: {width: 52, height: 112}
				});
			}

			this.prevLink = this.element.getElement('.prev');
			if (this.prevLink) {
				this.prevLink.setStyle('height', hHeight);
				this.nextCanvas = new PrevNext(this.prevLink.getElement('canvas'), this.prevLink, {
					color: '#'+this.options.color,
					instantDraw: fromHTML,
					size: {width: 52, height: 112}
				});
			}
			
			if (!fromHTML) this.element.dispose();
		}.protect()
	});

})();

/*
---

name: Section.Manager

requires: [Core/DomReady, Core/Request.JSON, History/History, Background.Transition, Section]

provides: [Section.Manager]

...
*/

Section.Manager = new Class({
	Implements: [Options],
	options: {
		baseURI: '/'
	},
	initialize: function (current, options) {
		this.setOptions(options);
		this.sections = {};
		this.current = current.addEvents({
			showComplete: this._sectionComplete.bind(this),
			hashChange: this._sectionHashChanged.bind(this)
		}).load();
		this.sections[current.hash] = current;
		this._findSections();
		var opts = current.getBgOpts();
		opts.minWidth = 1067;
		opts.minHeight = 600;
		this.background = new Background.Transition(document.getElement('div.background-image'), opts);
		this._boundChSection = this._changeSection.bind(this);
		History.addEvent('change', this._hashChange.bind(this));
		
		this.background.addEvent('complete', this._bgComplete.bind(this));
		//(function () {
		if (location.hash)
			this._hashChange(location.hash);
		//}).delay(200, this);
	},
	_hashChange: function (hash) {
		hash = hash.replace('#', '');
		var next = this.sections[hash];
		if (!next || next.hash == this.current.hash) return;
		this.current.hide();
		next.show(this._boundChSection);
	},
	_changeSection: function (next) {
		this.current.hide();
		this.current = next;
		if (next.backgroundImage)
			this.background.src(next.backgroundImage, next.getBgOpts());
		else {
			this.background.clear();
			this._bgComplete.delay(100, this);
		}
	},
	_bgComplete: function () {
		this.current.realShow();
		this._findSections.delay(200, this);
	},
	_sectionComplete: function () {
	},
	_sectionHashChanged: function (section) {
		this.sections[section.hash] = section;
	},
	_findSections: function () {
		var chSect = this._sectionClicked.bind(this);
		var sectComplete = this._sectionComplete.bind(this);
		document.getElements('.prev, .next, #navigation li a').each (function (el) {
			if (el.hasClass('language-change')) return;
		
			var hashEl = el.getParent().getElement('li a') || el;
		
			var h = hashEl.get('href')
				.replace(/^.*\//, '')
				.replace(/^((de|en)+-\d+).*$/, '$1');
			
			el.store(':section-hash', h)
				.removeEvents('click')
				.addEvent('click', chSect);
			
			if (this.sections[h]) return;
			this.sections[h] = new Section(h, {
				baseURI: this.options.baseURI
			});
			
			this.sections[h].addEvents({
				showComplete: this._sectionComplete.bind(this),
				hashChange: this._sectionHashChanged.bind(this)
			});
			
		}, this);
	},
	_sectionClicked: function (evt) {
		evt.stop();
		var t = $(evt.target);
		if (t.get('tag') != 'a')
			t = t.getParent('a');
		History.push(t.retrieve(':section-hash'))
		//this._hashChange(t.retrieve(':section-hash'));
	}
});

