/**
 * combine all cufon stuff here
 */

/*
 * Copyright (c) 2011 Simo Kinnunen.
 * Licensed under the MIT license.
 *
 * @version ${Version}
 */

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;
		},

		strict: (function() {
			var doctype;
			// no doctype (doesn't always catch it though.. IE I'm looking at you)
			if (document.compatMode == 'BackCompat') return false;
			// WebKit, Gecko, Opera, IE9+
			doctype = document.doctype;
			if (doctype) {
				return !/frameset|transitional/i.test(doctype.publicId);
			}
			// IE<9, firstChild is the doctype even if there's an XML declaration
			doctype = document.firstChild;
			if (doctype.nodeType != 8 || /^DOCTYPE.+(transitional|frameset)/i.test(doctype.data)) {
				return false;
			}
			return true;
		})()

	};

	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(/(?:^|\s)./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, simple) {
				if (simple) return text.replace(wsStart, '').replace(wsEnd, ''); // @fixme too simple
				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');

		var checkTypes = {
			'': 1,
			'text/css': 1
		};

		function isContainerReady(el) {
			if (!checkTypes[el.type.toLowerCase()]) return true;
			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 = (function(glyphs) {
			var key, fallbacks = {
				'\u2011': '\u002d',
				'\u00ad': '\u2011'
			};
			for (key in fallbacks) {
				if (!hasOwnProperty(fallbacks, key)) continue;
				if (!glyphs[key]) glyphs[key] = glyphs[fallbacks[key]];
			}
			return 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, w,
				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;
				}
				w = glyph.w;
				if (isNaN(w)) w = +this.w; // may have been a String in old fonts
				if (w > 0) {
					w += letterSpacing;
					if (wordSeparators[chr]) w += wordSpacing;
				}
				width += jumps[++j] = ~~w; // get rid of decimals
				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) {
			try {
				if (node.contains) return node.contains(anotherNode);
				return node.compareDocumentPosition(anotherNode) & 16;
			}
			catch(e) {} // probably a XUL element such as a scrollbar
			return false;
		}

		// mouseover/mouseout (standards) mode
		function onOverOut(e) {
			var related = e.relatedTarget;
			// there might be no relatedTarget if the element is right next
			// to the window frame
			if (related && contains(this, related)) return;
			trigger(this, e.type == 'mouseover');
		}

		// mouseenter/mouseleave (probably ie) mode
		function onEnterLeave(e) {
			if (!e) e = window.event;
			// ie model, we don't have access to "this", but
			// mouseenter/leave doesn't bubble so it's fine.
			trigger(e.target || e.srcElement, 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;
				if (hoverState) {
					options = merge(options, options.hover);
					options._mediatorMode = 1;
				}
				api.replace(el, 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);
			}
		};

		this.detach = function(el) {
			if (el.onmouseenter === undefined) {
				removeEvent(el, 'mouseover', onOverOut);
				removeEvent(el, 'mouseout', onOverOut);
			}
			else {
				removeEvent(el, 'mouseenter', onEnterLeave);
				removeEvent(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) {
			// we don't really need "this" right now, saves code
			el.attachEvent('on' + type, listener);
		}
	}

	function attach(el, options) {
		if (options._mediatorMode) return el;
		var storage = sharedStorage.get(el);
		var oldOptions = storage.options;
		if (oldOptions) {
			if (oldOptions === options) return el;
			if (oldOptions.hover) hoverHandler.detach(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 removeEvent(el, type, listener) {
		if (el.removeEventListener) {
			el.removeEventListener(type, listener, false);
		}
		else if (el.detachEvent) {
			el.detachEvent('on' + type, listener);
		}
	}

	function replaceElement(el, options) {
		var name = el.nodeName.toLowerCase();
		if (options.ignore[name]) return;
		if (options.ignoreClass && options.ignoreClass.test(el.className)) return;
		if (options.onBeforeReplace) options.onBeforeReplace(el, options);
		var replace = !options.textless[name], simple = (options.trim === 'simple');
		var style = CSS.getStyle(attach(el, options)).extend(options);
		// may cause issues if the element contains other elements
		// with larger fontSize, however such cases are rare and can
		// be fixed by using a more specific selector
		if (parseFloat(style.get('fontSize')) === 0) return;
		var font = getFont(el, style), node, type, next, anchor, text, lastElement;
		var isShy = options.softHyphens, anyShy = false, pos, shy, reShy = /\u00ad/g;
		var modifyText = options.modifyText;
		if (!font) return;
		for (node = el.firstChild; node; node = next) {
			type = node.nodeType;
			next = node.nextSibling;
			if (replace && type == 3) {
				if (isShy && el.nodeName.toLowerCase() != TAG_SHY) {
					pos = node.data.indexOf('\u00ad');
					if (pos >= 0) {
						node.splitText(pos);
						next = node.nextSibling;
						next.deleteData(0, 1);
						shy = document.createElement(TAG_SHY);
						shy.appendChild(document.createTextNode('\u00ad'));
						el.insertBefore(shy, next);
						next = shy;
						anyShy = true;
					}
				}
				// 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) {
				text = anchor.data;
				if (!isShy) text = text.replace(reShy, '');
				text = CSS.whiteSpace(text, style, anchor, lastElement, simple);
				// modify text only on the first replace
				if (modifyText) text = modifyText(text, anchor, el, options);
				el.replaceChild(process(font, text, 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;
			}
		}
		if (isShy && anyShy) {
			updateShy(el);
			if (!trackingShy) addEvent(window, 'resize', updateShyOnResize);
			trackingShy = true;
		}
		if (options.onAfterReplace) options.onAfterReplace(el, options);
	}

	function updateShy(context) {
		var shys, shy, parent, glue, newGlue, next, prev, i;
		shys = context.getElementsByTagName(TAG_SHY);
		// unfortunately there doesn't seem to be any easy
		// way to avoid having to loop through the shys twice.
		for (i = 0; shy = shys[i]; ++i) {
			shy.className = C_SHY_DISABLED;
			glue = parent = shy.parentNode;
			if (glue.nodeName.toLowerCase() != TAG_GLUE) {
				newGlue = document.createElement(TAG_GLUE);
				newGlue.appendChild(shy.previousSibling);
				parent.insertBefore(newGlue, shy);
				newGlue.appendChild(shy);
			}
			else {
				// get rid of double glue (edge case fix)
				glue = glue.parentNode;
				if (glue.nodeName.toLowerCase() == TAG_GLUE) {
					parent = glue.parentNode;
					while (glue.firstChild) {
						parent.insertBefore(glue.firstChild, glue);
					}
					parent.removeChild(glue);
				}
			}
		}
		for (i = 0; shy = shys[i]; ++i) {
			shy.className = '';
			glue = shy.parentNode;
			parent = glue.parentNode;
			next = glue.nextSibling || parent.nextSibling;
			// make sure we're comparing same types
			prev = (next.nodeName.toLowerCase() == TAG_GLUE) ? glue : shy.previousSibling;
			if (prev.offsetTop >= next.offsetTop) {
				shy.className = C_SHY_DISABLED;
				if (prev.offsetTop < next.offsetTop) {
					// we have an annoying edge case, double the glue
					newGlue = document.createElement(TAG_GLUE);
					parent.insertBefore(newGlue, glue);
					newGlue.appendChild(glue);
					newGlue.appendChild(next);
				}
			}
		}
	}

	function updateShyOnResize() {
		if (ignoreResize) return; // needed for IE
		CSS.addClass(DOM.root(), C_VIEWPORT_RESIZING);
		clearTimeout(shyTimer);
		shyTimer = setTimeout(function() {
			ignoreResize = true;
			CSS.removeClass(DOM.root(), C_VIEWPORT_RESIZING);
			updateShy(document);
			ignoreResize = false;
		}, 100);
	}

	var HAS_BROKEN_REGEXP = ' '.split(/\s+/).length == 0;
	var TAG_GLUE = 'cufonglue';
	var TAG_SHY = 'cufonshy';
	var C_SHY_DISABLED = 'cufon-shy-disabled';
	var C_VIEWPORT_RESIZING = 'cufon-viewport-resizing';

	var sharedStorage = new Storage();
	var hoverHandler = new HoverHandler();
	var replaceHistory = new ReplaceHistory();
	var initialized = false;
	var trackingShy = false;
	var shyTimer;
	var ignoreResize = false;

	var engines = {}, fonts = {}, defaultOptions = {
		autoDetect: false,
		engine: null,
		forceHitArea: false,
		hover: false,
		hoverables: {
			a: true
		},
		ignore: {
			applet: 1,
			canvas: 1,
			col: 1,
			colgroup: 1,
			head: 1,
			iframe: 1,
			map: 1,
			noscript: 1,
			optgroup: 1,
			option: 1,
			script: 1,
			select: 1,
			style: 1,
			textarea: 1,
			title: 1,
			pre: 1
		},
		ignoreClass: null,
		modifyText: null,
		onAfterReplace: null,
		onBeforeReplace: null,
		printable: true,
		selector: (
				window.Sizzle
			||	(window.jQuery && function(query) { return jQuery(query); }) // avoid noConflict issues
			||	(window.dojo && dojo.query)
			||	(window.glow && glow.dom && glow.dom.get)
			||	(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
		softHyphens: true,
		textless: {
			dl: 1,
			html: 1,
			ol: 1,
			table: 1,
			tbody: 1,
			thead: 1,
			tfoot: 1,
			tr: 1,
			ul: 1
		},
		textShadow: 'none',
		trim: 'advanced'
	};

	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.ignoreClass == 'string') {
			options.ignoreClass = new RegExp('(?:^|\\s)(?:' + options.ignoreClass.replace(/\s+/g, '|') + ')(?:\\s|$)');
		}
		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 (typeof elements == 'string') {
			if (!ignoreHistory) replaceHistory.add(elements, arguments);
			elements = [ elements ];
		}
		else if (elements.nodeType) 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('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;text-align:left;}' +
			'cufonshy.cufon-shy-disabled,.cufon-viewport-resizing cufonshy{display:none;}' +
			'cufonglue{white-space:nowrap;display:inline-block;}' +
			'.cufon-viewport-resizing cufonglue{white-space:normal;}' +
			'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 (!isNaN(value) || /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 = 'none';
			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;

	};

})());

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;text-align:left;text-indent:-10000in;}' +
			(HAS_INLINE_BLOCK
				? 'cufon canvas{position:relative;}'
				: 'cufon canvas{position:absolute;}') +
			'cufonshy.cufon-shy-disabled,.cufon-viewport-resizing cufonshy{display:none;}' +
			'cufonglue{white-space:nowrap;display:inline-block;}' +
			'.cufon-viewport-resizing cufonglue{white-space:normal;}' +
		'}' +
		'@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;
		var pixelRatio = window.devicePixelRatio || 1;
		if (pixelRatio != 1) {
			canvas.width = canvasWidth * pixelRatio;
			canvas.height = canvasHeight * pixelRatio;
			g.scale(pixelRatio, pixelRatio);
		}

		// 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();
					// the following moveTo is for Opera 9.2. if we don't
					// do this, it won't forget the previous path which
					// results in garbled text.
					g.moveTo(0, 0);
					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;

	};

})());

/**
 * Footlight_MT_Light_300.font.js
 */
Cufon.registerFont({"w":198,"face":{"font-family":"Footlight MT Light","font-weight":300,"font-stretch":"normal","units-per-em":"360","panose-1":"2 4 6 2 6 3 10 2 3 4","ascent":"288","descent":"-72","x-height":"5","bbox":"-26 -257 349 80.8345","underline-thickness":"17.9297","underline-position":"-27.0703","unicode-range":"U+0020-U+007E"},"glyphs":{" ":{"w":90},"!":{"d":"37,-187v-1,-23,-5,-29,-26,-29r0,-9r89,0r0,9v-23,1,-25,4,-27,29r-7,133r-25,0xm32,-16v-1,-12,10,-21,21,-21v12,0,21,9,21,21v0,12,-9,21,-21,21v-12,0,-21,-9,-21,-21","w":108},"\"":{"d":"34,-230v16,2,15,19,12,37r-10,56r-6,0r-11,-76v0,-8,5,-18,15,-17xm92,-230v16,2,15,19,12,37r-10,56r-6,0r-11,-76v0,-8,5,-18,15,-17","w":116},"#":{"d":"16,-166r58,0r15,-72r19,0r-16,72r77,0r16,-72r18,0r-15,72r36,0r0,18r-40,0r-14,69r54,0r0,18r-58,0r-15,72r-18,0r15,-72r-78,0r-15,72r-18,0r15,-72r-36,0r0,-18r40,0r14,-69r-54,0r0,-18xm88,-148r-14,68r78,0r14,-68r-78,0","w":239},"$":{"d":"25,-168v0,-29,33,-55,58,-60r0,-29r13,0r0,27v17,-1,26,2,47,9r0,55r-12,0v-3,-29,-15,-47,-35,-51r0,84v24,20,60,32,59,67v-1,34,-31,57,-59,68r0,30r-13,0r0,-27v-24,1,-39,-2,-63,-12r0,-62r12,0v5,39,22,60,51,62r0,-95v-39,-29,-58,-28,-58,-66xm83,-218v-26,1,-40,33,-23,55v6,7,13,15,23,21r0,-76xm96,-93r0,85v46,-10,35,-71,0,-85","w":165},"%":{"d":"200,-235r15,0r-156,246r-15,0xm15,-159v0,-35,26,-69,58,-69v29,0,48,23,48,54v0,34,-27,67,-59,67v-28,0,-47,-23,-47,-52xm74,-118v45,-4,27,-100,-11,-98v-19,0,-27,17,-27,38v-1,26,12,62,38,60xm138,-49v0,-35,24,-69,59,-69v28,0,47,25,47,54v0,33,-26,69,-58,68v-29,0,-48,-24,-48,-53xm196,-9v48,-5,29,-97,-10,-97v-46,5,-28,98,10,97","w":258},"&":{"d":"59,5v-25,2,-47,-25,-46,-50v0,-23,19,-50,58,-80v-12,-24,-19,-43,-19,-57v-2,-32,42,-48,72,-48v28,0,52,25,33,50v-6,9,-40,30,-56,40v25,41,25,41,38,59v11,-16,18,-36,21,-59r63,0r0,9v-29,0,-55,20,-78,58v40,47,47,71,79,20r8,3v-18,31,-22,47,-47,55v-14,0,-34,-16,-60,-49v-25,29,-32,46,-66,49xm111,-220v-39,4,-33,41,-13,73v22,-22,33,-26,36,-52v1,-13,-10,-22,-23,-21xm46,-60v0,48,49,50,74,10v-20,-26,-35,-49,-45,-68v-19,20,-29,39,-29,58","w":228},"'":{"d":"33,-230v16,2,15,19,12,37r-10,56r-7,0r-10,-76v0,-8,5,-18,15,-17","w":56},"(":{"d":"119,-238v-63,55,-63,215,0,268r0,11v-88,-52,-110,-173,-45,-249v12,-15,27,-28,45,-40r0,10","w":127,"k":{"y":-22,"j":-45,"g":-22,"J":-45}},")":{"d":"8,30v64,-55,64,-214,0,-267r0,-11v44,31,82,69,83,143v1,72,-39,117,-83,146r0,-11","w":127},"*":{"d":"55,-195v1,-7,-42,-8,-39,-22v0,-6,3,-9,9,-9v8,-4,29,34,36,21v-1,-15,-15,-39,2,-44v24,2,-4,36,6,47v10,0,36,-43,42,-15v3,14,-35,13,-39,22v1,10,41,8,39,22v0,5,-3,11,-9,10v-6,5,-31,-36,-36,-21v0,14,15,39,-3,43v-21,-4,5,-36,-5,-47v-8,-1,-37,44,-43,15v-3,-14,38,-13,40,-22","w":127},"+":{"d":"25,-123r85,0r0,-85r19,0r0,85r86,0r0,19r-86,0r0,86r-19,0r0,-86r-85,0r0,-19","w":239},",":{"d":"49,-39v41,1,36,52,16,78v-11,14,-25,29,-44,39r0,-10v22,-12,51,-45,35,-76v-8,13,-34,9,-34,-10v0,-13,13,-21,27,-21","w":86,"k":{" ":-4}},"-":{"d":"22,-71v16,-59,71,11,96,-27r8,4v-16,41,-47,20,-80,14v-9,-2,-15,19,-24,9","w":146},"\u00ad":{"d":"22,-71v16,-59,71,11,96,-27r8,4v-16,41,-47,20,-80,14v-9,-2,-15,19,-24,9","w":146},".":{"d":"22,-16v0,-27,43,-27,43,0v0,12,-11,21,-21,21v-12,0,-22,-10,-22,-21","w":86},"\/":{"d":"144,-251r20,0r-125,258r-19,0","w":183},"0":{"d":"14,-94v0,-64,43,-137,94,-137v131,0,78,236,-20,236v-49,0,-74,-43,-74,-99xm160,-104v0,-54,-23,-103,-68,-108v-85,10,-63,199,14,197v39,-1,54,-41,54,-89"},"1":{"d":"122,-34v-1,21,11,28,32,26r0,8r-93,0r0,-8v20,2,32,-4,32,-23r0,-156v-4,-23,-18,-15,-42,-7r0,-9r85,-30v0,13,-14,12,-14,28r0,171"},"2":{"d":"107,-221v-31,1,-55,37,-56,71r-13,0r0,-54v37,-28,130,-45,135,18v-5,43,-21,52,-55,85r-75,74v46,-6,125,19,130,-27r9,0r-13,62v-9,3,-6,-7,-14,-8r-138,0r0,-8r52,-62v17,-27,69,-76,70,-118v0,-18,-14,-34,-32,-33"},"3":{"d":"103,-221v-30,1,-51,37,-51,70r-12,0r0,-53v24,-14,45,-25,76,-26v25,0,50,14,48,37v-3,38,-37,50,-74,66v47,-1,89,3,89,45v0,61,-82,111,-150,76r0,-59r12,0v2,33,25,58,57,58v29,0,49,-25,49,-55v0,-47,-35,-61,-86,-56r0,-9v32,-1,70,-34,70,-66v0,-17,-12,-28,-28,-28"},"4":{"d":"132,-232r9,0r0,150r36,0r0,18r-36,0v0,0,-5,61,27,56r0,8r-88,0r0,-8v35,5,34,-24,32,-56r-101,0r0,-8r69,-87v23,-29,40,-53,52,-73xm112,-175v-30,28,-54,61,-79,93r79,0r0,-93"},"5":{"d":"96,-136v-23,0,-35,12,-46,28r-10,0r6,-117r104,0v12,2,7,-12,19,-9r0,62r-8,0v1,-47,-67,-19,-105,-26r-4,70v37,-34,128,-22,128,39v0,64,-80,120,-145,82r0,-58r12,0v4,31,22,56,52,57v32,0,48,-29,48,-61v0,-35,-20,-67,-51,-67"},"6":{"d":"115,-220v-49,0,-67,76,-60,131v26,-47,131,-48,129,21v0,38,-41,73,-83,73v-52,0,-79,-48,-79,-100v0,-79,62,-164,146,-126r0,60r-13,0v0,-31,-12,-59,-40,-59xm150,-58v0,-29,-16,-52,-42,-52v-27,-1,-43,24,-43,53v0,28,17,53,42,53v26,0,43,-25,43,-54"},"7":{"d":"69,-198v-22,0,-26,6,-27,27r-9,0r0,-62v11,-3,7,8,18,8r133,0r0,11v-53,69,-76,118,-82,214r-31,0v-1,-94,51,-146,91,-198r-93,0"},"8":{"d":"188,-63v0,75,-172,98,-172,17v0,-38,36,-49,68,-70v-24,-13,-52,-21,-52,-55v0,-33,46,-59,82,-59v27,0,60,13,57,38v-4,33,-22,37,-54,62v32,19,71,27,71,67xm101,-220v-33,0,-55,30,-35,57v6,8,20,17,43,29v18,-18,31,-26,33,-52v1,-23,-19,-34,-41,-34xm102,-5v51,4,77,-67,27,-86v-10,-4,-22,-12,-37,-21v-23,19,-42,27,-44,59v-1,29,25,46,54,48"},"9":{"d":"87,-5v48,0,66,-70,62,-130v-18,18,-37,32,-68,33v-36,2,-60,-24,-61,-56v-2,-38,44,-74,81,-72v50,1,81,44,80,101v-1,84,-59,158,-145,125r0,-60r12,0v0,30,13,59,39,59xm138,-168v0,-27,-17,-53,-41,-53v-28,-1,-44,25,-44,54v0,29,17,52,43,52v27,0,42,-25,42,-53"},":":{"d":"24,-144v0,-12,9,-22,21,-22v11,0,21,10,21,22v0,11,-9,21,-21,21v-12,0,-21,-10,-21,-21xm22,-16v0,-11,11,-21,21,-21v13,0,22,9,22,21v0,12,-9,21,-21,21v-12,0,-22,-10,-22,-21","w":86},";":{"d":"22,-144v0,-11,11,-21,21,-21v12,0,22,9,22,21v0,12,-11,21,-21,21v-12,0,-22,-10,-22,-21xm49,-39v39,0,38,52,17,77v-11,14,-25,28,-44,41r0,-11v23,-16,50,-44,33,-76v-7,13,-33,9,-33,-9v0,-13,12,-23,27,-22","w":86},"<":{"d":"215,-25r-190,-80r0,-17r190,-80r0,21r-165,67r165,68r0,21","w":239},"=":{"d":"25,-164r190,0r0,19r-190,0r0,-19xm25,-82r190,0r0,19r-190,0r0,-19","w":239},">":{"d":"25,-202r190,80r0,17r-190,80r0,-20r165,-68r-165,-68r0,-21","w":239},"?":{"d":"85,-220v-33,1,-56,35,-57,70r-11,0r0,-53v32,-18,61,-27,87,-27v31,0,52,13,52,39v0,52,-83,73,-77,137r-18,0v-5,-64,56,-83,56,-136v0,-18,-13,-30,-32,-30xm49,-16v-1,-11,10,-21,20,-21v11,0,22,9,22,21v0,11,-11,21,-21,21v-12,0,-21,-9,-21,-21","w":161},"@":{"d":"187,-168v17,0,26,10,30,24r5,-20r23,-3r-24,82v-9,29,-13,48,-13,56v0,9,8,14,16,14v39,-1,75,-64,75,-113v0,-69,-49,-113,-115,-113v-94,0,-152,78,-152,171v0,80,56,139,140,139v68,0,124,-46,141,-98r10,0v-18,59,-78,107,-152,107v-94,-1,-152,-64,-153,-158v-2,-90,73,-170,166,-170v72,0,126,48,124,121v-1,68,-33,126,-94,126v-30,0,-32,-22,-23,-52v-29,33,-33,46,-68,50v-20,2,-35,-17,-34,-40v4,-58,46,-123,98,-123xm186,-160v-36,1,-89,89,-66,129v4,5,9,7,16,7v41,0,72,-64,74,-109v0,-15,-7,-28,-24,-27","w":329},"A":{"d":"62,-79v-13,36,-25,71,18,71r0,8r-78,0r0,-8v13,-1,25,-15,35,-42r73,-184r10,0r62,180v9,21,15,42,35,46r0,8r-63,0v-4,-10,10,-5,6,-18r-21,-61r-77,0xm103,-184r-37,94r69,0","w":217,"k":{"y":14,"w":14,"v":18,"Y":32,"W":27,"V":27,"U":9,"T":14,"Q":5,"O":5,"G":5,"C":5}},"B":{"d":"37,-189v0,-22,-6,-26,-27,-27r0,-9v59,6,163,-23,162,40v-1,32,-24,50,-49,65v36,3,59,6,60,41v1,41,-47,79,-90,79r-83,0r0,-8v23,-2,27,-7,27,-28r0,-153xm141,-162v0,-41,-39,-71,-72,-46r0,82v37,2,72,1,72,-36xm149,-58v-1,-41,-31,-65,-80,-60r0,92v31,29,81,13,80,-32","w":194,"k":{"U":5,"A":9,".":14,",":14}},"C":{"d":"44,-122v0,55,35,103,88,102v26,0,53,-11,80,-34r0,11v-37,32,-71,48,-102,48v-54,0,-97,-48,-97,-107v0,-98,96,-152,194,-117r0,53r-13,0v-2,-34,-34,-53,-69,-53v-51,-2,-81,45,-81,97","w":221,"k":{".":5,",":5}},"D":{"d":"38,-189v0,-22,-6,-26,-27,-27r0,-9r138,0v62,0,93,28,93,89v1,78,-58,136,-139,136r-92,0r0,-8v21,-2,26,-5,27,-28r0,-153xm209,-113v-2,-60,-25,-106,-88,-104v-20,0,-37,5,-51,14r0,175v67,45,142,-5,139,-85","w":255,"k":{"Y":9,"W":5,"V":5,"A":18,".":36,",":36}},"E":{"d":"38,-188v0,-23,-5,-27,-27,-28r0,-9r126,0v11,2,8,-11,20,-9r0,68r-13,0v1,-43,-29,-52,-74,-50v-7,55,1,102,65,92r0,13r-65,1r0,102v50,3,80,-12,87,-57r12,0r-14,73r-9,0v0,-5,-2,-8,-7,-8r-128,0r0,-8v22,-2,26,-6,27,-28r0,-152","w":172},"F":{"d":"144,-225v5,-1,3,-11,12,-8r0,67r-12,0v1,-43,-30,-52,-74,-50v-7,57,0,106,65,97r0,12r-65,1v4,38,-15,98,27,98r0,8r-86,0r0,-8v20,-2,27,-6,26,-28r0,-153v0,-21,-5,-26,-26,-27r0,-9r133,0","w":153,"k":{"l":-9,"i":-4,"a":-4,"A":9,".":18,",":23}},"G":{"d":"204,8v-7,-69,-65,1,-100,-3v-54,-7,-90,-46,-90,-105v0,-98,92,-155,193,-119r0,53r-13,0v-2,-33,-32,-52,-67,-52v-50,0,-83,40,-83,93v0,55,34,107,84,107v29,1,54,-18,54,-44v1,-20,-15,-27,-39,-26r0,-9r87,0r0,9v-30,5,-13,63,-17,96r-9,0","w":239,"k":{"G":-4,"A":5,".":9,",":9}},"H":{"d":"37,-189v0,-21,-6,-26,-26,-27r0,-9r86,0r0,9v-43,-4,-22,54,-27,88r107,0v-5,-34,16,-92,-27,-88r0,-9r86,0r0,9v-20,0,-26,6,-26,27r0,153v0,22,7,26,26,28r0,8r-86,0r0,-8v47,1,20,-70,27,-109r-107,0v5,40,-18,108,27,109r0,8r-86,0r0,-8v20,-2,27,-6,26,-28r0,-153","w":247},"I":{"d":"40,-189v0,-22,-6,-26,-27,-27r0,-9r86,0r0,9v-22,1,-27,6,-27,27r0,153v0,18,9,27,27,28r0,8r-86,0r0,-8v20,-2,27,-6,27,-28r0,-153","w":108},"J":{"d":"71,-188v0,113,15,249,-79,267v-5,0,-11,-1,-18,-3r0,-55r12,0v2,18,9,37,26,37v23,0,26,-27,26,-58r0,-188v0,-23,-4,-27,-26,-28r0,-9r86,0r0,9v-23,1,-27,6,-27,28","w":104,"k":{"a":-4,"A":5,".":14,",":14}},"K":{"d":"37,-188v0,-23,-5,-27,-27,-28r0,-9r86,0r0,9v-45,-3,-20,63,-26,99v23,-29,60,-50,72,-88v0,-7,-6,-11,-18,-11r0,-9r81,0r0,9v-42,7,-75,58,-106,83v31,36,72,115,116,125r0,8r-57,0r-88,-119v5,40,-17,109,26,111r0,8r-86,0r0,-8v21,-2,26,-5,27,-28r0,-152","w":210,"k":{"y":14,"w":18,"v":18,"u":9,"a":-9,"O":9,"G":9,"C":9,")":-4}},"L":{"d":"38,-188v0,-23,-5,-27,-27,-28r0,-9r87,0r0,9v-22,1,-26,5,-27,28r0,180v50,4,77,-11,86,-56r13,0r-15,72r-9,0v0,-5,-2,-8,-7,-8r-128,0r0,-8v21,-2,26,-5,27,-28r0,-152","w":168,"k":{"w":5,"Y":23,"W":23,"V":23,"U":5,"T":9,"S":-4,"A":-4}},"M":{"d":"47,-141v0,-28,20,-79,-19,-75r0,-9r57,0r76,186r43,-102v16,-38,27,-66,32,-84r63,0r0,9v-20,0,-29,6,-27,26v6,56,6,127,21,174v4,5,12,7,23,8r0,8r-86,0r0,-8v20,-1,26,-8,24,-31r-14,-140v-42,73,-56,116,-87,187r-8,0r-82,-204r-10,130v0,37,9,57,28,58r0,8r-80,0v-1,-15,15,-11,20,-24v10,-26,26,-78,26,-117","w":318},"N":{"d":"38,-130v0,-33,15,-90,-26,-86r0,-9r57,0r128,172v-2,-61,8,-148,-32,-163r0,-9r77,0r0,9v-44,2,-30,158,-32,224r-9,0r-151,-205v3,71,-13,171,32,189r0,8r-76,0r0,-8v21,-4,32,-44,32,-122","w":243,"k":{"A":5,".":5,",":5}},"O":{"d":"13,-101v0,-66,62,-131,127,-129v65,2,109,41,109,107v0,74,-56,126,-129,128v-59,2,-107,-48,-107,-106xm220,-92v0,-65,-42,-122,-102,-122v-43,0,-75,36,-75,83v0,65,46,119,102,120v43,1,76,-37,75,-81","w":262,"k":{"Y":14,"X":18,"W":5,"V":5,"N":-4,"A":18,".":23,",":23}},"P":{"d":"37,-189v0,-22,-6,-26,-27,-27r0,-9v62,6,165,-21,168,40v2,45,-60,99,-108,74v4,39,-16,102,26,103r0,8r-86,0r0,-8v22,-2,26,-6,27,-28r0,-153xm143,-162v4,-43,-39,-71,-73,-43r0,70v23,25,79,24,73,-27","w":172,"k":{"A":23,".":27,",":27}},"Q":{"d":"210,73v-55,-3,-98,-118,-154,-50v-2,-18,12,-22,18,-30v-35,-14,-60,-50,-60,-95v0,-75,54,-128,128,-128v64,0,105,41,107,106v2,63,-51,116,-103,125v14,1,61,48,77,46v19,-2,22,-11,38,-24r0,11v-21,22,-26,34,-51,39xm221,-94v-1,-63,-43,-119,-102,-121v-45,-2,-76,39,-76,84v2,67,39,116,103,119v43,2,76,-37,75,-82","w":262,"k":{"y":-13,"p":-9,"j":-40,"g":-18,"f":-4,"Y":18,"W":14,"V":14,"T":5,"A":18,".":9,",":5,")":-9}},"R":{"d":"37,-189v0,-22,-6,-26,-27,-27r0,-9v59,7,161,-24,161,39v0,38,-26,57,-56,75v23,30,53,98,88,103r0,8v-27,-2,-51,6,-64,-15r-70,-108v6,42,-19,113,27,115r0,8r-86,0r0,-8v20,-2,27,-6,27,-28r0,-153xm135,-161v0,-42,-32,-72,-66,-47r0,74v30,24,66,18,66,-27","w":194,"k":{"y":5,"a":-13,"Y":18,"W":18,"V":18,"U":9,"T":5,")":-4}},"S":{"d":"124,-47v0,-59,-102,-56,-102,-120v0,-49,66,-80,120,-54r0,55r-13,0v-1,-28,-19,-52,-45,-52v-20,0,-36,13,-35,33v2,54,103,60,103,119v0,56,-76,90,-135,60r0,-63r12,0v0,32,22,61,53,62v25,1,42,-17,42,-40","w":161,"k":{".":9,",":9}},"T":{"d":"52,-8v20,-2,27,-6,27,-28r0,-180v-40,-3,-62,11,-63,50r-12,0r0,-67r8,0v1,6,3,8,6,8r154,0v4,0,6,-2,6,-8r9,0r0,67r-13,0v0,-38,-23,-52,-63,-50r0,180v0,18,9,27,27,28r0,8r-86,0r0,-8","w":187,"k":{"y":-9,"w":-4,"l":-4,"h":-9,"a":-4,"T":-9,"A":14,";":-4,":":-4,".":23,",":23}},"U":{"d":"130,-6v48,0,65,-25,65,-79v0,-46,-2,-79,-7,-100v-5,-20,-14,-30,-25,-31r0,-9r77,0r0,9v-22,3,-33,40,-33,109v0,81,-16,112,-85,112v-50,0,-87,-19,-87,-69r0,-124v0,-23,-5,-27,-27,-28r0,-9r86,0r0,9v-20,1,-27,5,-26,28r0,123v-1,40,23,59,62,59","w":243,"k":{"A":23,".":27,",":27}},"V":{"d":"170,-193v0,-18,-8,-22,-28,-23r0,-9r79,0r0,9v-12,0,-25,14,-36,43r-72,181r-10,0r-63,-184v-10,-27,-21,-40,-33,-40r0,-9r62,0r0,9v-9,0,-7,5,-5,13r56,161v15,-45,50,-102,50,-151","w":221,"k":{"y":14,"u":14,"r":18,"o":18,"i":9,"e":18,"a":14,"Q":14,"O":14,"G":14,"C":14,"A":27,";":9,":":9,".":41,"-":23,",":41}},"W":{"d":"298,-193v0,-20,-9,-22,-29,-23r0,-9r80,0r0,9v-22,4,-30,24,-39,48r-70,176r-11,0r-51,-148v-27,47,-42,96,-63,148r-11,0r-68,-196v-8,-17,-11,-25,-26,-28r0,-9r61,0r0,9v-6,0,-6,4,-6,9r56,165v14,-41,41,-86,42,-136v0,-24,-10,-37,-29,-38r0,-9r62,0r0,9v-7,0,-9,4,-7,9r57,165v15,-43,52,-108,52,-151","w":348,"k":{"y":23,"u":23,"r":23,"o":23,"i":5,"h":-4,"e":23,"d":27,"a":18,"O":9,"G":9,"C":9,"A":32,";":9,":":9,".":36,"-":32,",":36}},"X":{"d":"147,-199v-1,-14,-9,-17,-27,-17r0,-9r84,0r0,9v-31,3,-64,59,-84,85v31,41,44,101,95,123r0,8r-70,0r0,-8v7,-1,8,-4,6,-10r-51,-84v-26,35,-40,60,-40,76v0,11,8,17,24,18r0,8r-83,0r0,-8v35,-6,70,-72,94,-103v-22,-31,-48,-99,-83,-105r0,-9r68,0r0,9v-7,0,-8,3,-6,7r42,70v21,-29,31,-49,31,-60","w":217,"k":{"O":5,"G":5,"C":5}},"Y":{"d":"63,-8v38,3,23,-45,26,-78v-20,-39,-38,-87,-63,-119v-6,-8,-12,-11,-20,-11r0,-9r64,0r0,9v-6,0,-8,3,-6,8r55,109v29,-44,43,-77,43,-97v-1,-16,-9,-20,-29,-20r0,-9r84,0r0,9v-22,3,-30,18,-42,39r-53,91v2,34,-10,79,27,78r0,8r-86,0r0,-8","w":210,"k":{"v":14,"u":14,"q":23,"p":18,"o":23,"i":5,"e":23,"d":23,"a":14,"S":5,"O":9,"G":9,"C":9,"A":27,";":5,":":5,".":32,"-":14,",":32}},"Z":{"d":"158,-216v-58,1,-124,-9,-122,50r-12,0r0,-67r8,0v1,6,3,8,7,8r158,0r0,11r-146,206v72,1,138,5,146,-57r12,0r-14,73r-9,0v0,-5,-1,-8,-4,-8r-168,0r0,-10","w":213},"[":{"d":"38,-249r57,0r0,11r-32,0r0,268r32,0r0,10r-57,0r0,-289","w":112},"\\":{"d":"20,-251r19,0r125,258r-20,0","w":183},"]":{"d":"24,-248r50,0r0,288r-50,0r0,-10r25,0r0,-268r-25,0r0,-10","w":112},"^":{"d":"88,-225r74,126r-16,0r-61,-103r-62,103r-16,0r75,-126r6,0","w":168},"_":{"d":"-2,27r184,0r0,18r-184,0r0,-18","w":180},"`":{"d":"41,-214v-12,-10,-16,-24,-1,-28v18,5,21,36,32,51r-6,4","w":120},"a":{"d":"86,-156v-26,1,-45,30,-47,59r-12,0r0,-42v27,-18,53,-27,76,-27v24,0,31,10,32,32r0,110v6,18,17,4,32,-8r0,11v-18,17,-33,26,-44,26v-20,1,-14,-25,-15,-43v-24,22,-35,40,-66,43v-18,1,-33,-17,-32,-35v0,-26,33,-53,98,-82v1,-23,0,-44,-22,-44xm37,-42v0,33,45,29,59,3v8,-15,14,-34,14,-59v-34,5,-73,26,-73,56","w":168,"k":{"y":9,"w":9,"v":9,"g":18}},"b":{"d":"17,11v21,-54,6,-144,10,-215v0,-18,-14,-18,-27,-11r0,-9r58,-24v-10,34,-3,92,-5,137v35,-35,35,-51,75,-55v32,-3,51,30,49,64v-4,63,-39,102,-115,102v-21,0,-27,0,-34,11r-11,0xm112,-142v-42,0,-70,62,-59,115v15,8,30,13,46,13v64,0,71,-128,13,-128","w":183,"k":{"y":5,"u":-4,".":23,",":23}},"c":{"d":"87,-18v29,-1,41,-18,61,-37r0,12v-26,32,-50,48,-75,48v-34,-1,-65,-33,-65,-76v0,-65,68,-120,135,-84r0,46r-13,0v0,-27,-20,-46,-45,-46v-34,0,-52,35,-52,68v-1,35,21,70,54,69","w":161,"k":{"y":9,"l":9,"k":9,"h":9,".":14,",":14}},"d":{"d":"8,-63v0,-58,61,-129,123,-94v-2,-25,10,-77,-26,-58r0,-10r60,-23v2,10,-7,9,-7,19r0,197v-1,16,15,17,26,10r0,9v-18,6,-31,16,-53,18r0,-57v-31,37,-34,53,-72,57v-31,3,-51,-37,-51,-68xm133,-112v0,-33,-25,-40,-49,-41v-58,-2,-71,131,-9,135v32,2,58,-58,58,-94","w":187,"k":{"y":5,"w":5,"v":5,"g":14}},"e":{"d":"32,-102v-6,43,20,82,57,83v20,0,40,-12,61,-37r0,12v-26,33,-51,49,-76,49v-35,1,-66,-39,-66,-77v0,-60,73,-128,121,-75v10,12,16,27,16,45r-113,0xm116,-111v1,-37,-42,-58,-67,-31v-8,9,-14,19,-16,31r83,0","w":157,"k":{"z":5,"y":5,"x":9,"w":5,"v":5,"g":14,".":9,",":9}},"f":{"d":"9,-8v20,-2,27,-7,27,-28r0,-103r-27,0r0,-8v19,0,23,-5,29,-24v10,-41,37,-78,84,-66r0,45r-12,0v-1,-22,-8,-33,-22,-33v-18,1,-27,24,-27,45v-1,28,17,35,45,33r0,8r-43,0r0,103v0,23,9,25,27,28r0,8r-81,0r0,-8","w":112,"k":{"u":5,"o":5,"l":5,"k":5,"e":5,"?":-13,".":9,",":9,")":-27,"!":-27," ":-31}},"g":{"d":"80,-13v-23,-15,-10,-38,11,-50v-36,9,-74,-4,-75,-39v-1,-33,43,-66,77,-64v29,2,48,23,83,19r0,8r-36,0v22,44,-40,67,-49,93v12,32,87,21,86,63v-1,39,-64,63,-110,63v-34,0,-71,-12,-73,-40v5,-32,48,-46,86,-53xm80,-69v46,1,49,-86,2,-86v-23,-1,-38,20,-38,43v0,23,15,43,36,43xm19,37v7,52,135,39,133,-10v-1,-24,-38,-24,-61,-35v-35,10,-66,17,-72,45","w":180,"k":{"r":-4,"p":-4,"o":9,"l":5,"e":5,"a":5,".":9,",":9}},"h":{"d":"9,-8v19,-2,26,-6,26,-28r0,-173v0,-14,-17,-13,-26,-7r0,-9r60,-24v-13,30,-5,94,-7,141v22,-28,38,-54,74,-58v47,4,25,83,29,130v2,20,7,26,26,28r0,8r-61,0v-2,-11,8,-8,8,-18r0,-105v0,-13,-6,-23,-19,-23v-33,1,-61,62,-59,102v1,27,7,38,29,36r0,8r-80,0r0,-8","k":{"y":9}},"i":{"d":"51,-205v-21,1,-22,-34,-1,-34v9,0,18,7,18,17v1,8,-9,18,-17,17xm64,-36v0,23,9,25,27,28r0,8r-81,0r0,-8v19,-2,28,-6,27,-28r0,-96v1,-14,-19,-12,-27,-7r0,-9v18,-6,31,-17,54,-18r0,130","w":97,"k":{"v":9,"g":14}},"j":{"d":"50,-205v-21,1,-22,-34,-1,-34v9,0,18,6,17,17v1,8,-8,18,-16,17xm12,64v15,0,24,-21,24,-41r0,-149v0,-19,-14,-19,-27,-12r0,-9v18,-6,31,-17,54,-19r0,153v0,42,-37,113,-86,89r0,-47r13,0v-1,19,7,35,22,35","w":93},"k":{"d":"9,-8v19,-2,27,-7,27,-28r0,-164v-1,-20,-11,-22,-27,-16r0,-9r60,-24v2,10,-8,9,-7,18r0,145v17,-17,48,-31,54,-56v0,-7,-7,-11,-21,-11r0,-8r82,0r0,8v-26,-1,-67,39,-89,56v23,28,63,90,96,89r0,8r-54,0r-68,-86v3,34,-12,79,27,78r0,8r-80,0r0,-8","w":180,"k":{"q":5,"o":5,"g":18,"e":5,"d":5,"c":5}},"l":{"d":"10,-8v20,-2,27,-7,27,-28r0,-167v1,-18,-13,-18,-27,-13r0,-9r62,-24v2,11,-8,11,-8,20r0,193v0,21,9,26,27,28r0,8r-81,0r0,-8","w":97,"k":{"y":9,"w":9,"g":14}},"m":{"d":"130,-166v26,0,30,23,29,52v28,-33,32,-46,68,-52v48,3,25,84,29,130v2,22,7,25,26,28r0,8r-61,0v-3,-11,9,-8,8,-17r0,-100v0,-17,-4,-29,-19,-29v-32,0,-56,58,-54,99v1,26,6,37,29,39r0,8r-60,0v-3,-10,8,-9,7,-15r0,-108v0,-13,-7,-22,-18,-22v-33,2,-55,57,-54,98v1,27,5,38,29,39r0,8r-80,0r0,-8v48,-2,22,-77,27,-120v2,-18,-14,-17,-27,-11r0,-8v18,-6,31,-16,53,-18r0,53v28,-34,31,-54,68,-54","w":288,"k":{"y":5}},"n":{"d":"9,-8v48,-1,20,-77,27,-118v0,-19,-12,-20,-27,-13r0,-8v18,-6,31,-17,53,-19r0,58v27,-33,36,-58,73,-58v48,0,26,84,30,130v2,22,7,25,26,28r0,8r-61,0v-3,-11,9,-9,8,-17r0,-109v0,-11,-7,-20,-17,-20v-35,2,-63,60,-61,103v1,26,5,33,29,35r0,8r-80,0r0,-8","k":{"y":5,"w":9,"v":9,"g":14}},"o":{"d":"7,-71v0,-49,42,-95,88,-95v44,-1,73,32,73,77v0,51,-43,94,-89,94v-44,0,-72,-33,-72,-76xm144,-70v-1,-44,-26,-80,-64,-82v-33,-2,-49,28,-49,60v0,39,30,82,67,81v28,0,47,-27,46,-59","w":176,"k":{"z":5,"y":5,"x":14,"w":5,"v":5,"g":14,",":18}},"p":{"d":"183,-101v0,62,-59,130,-124,98v1,32,-9,73,28,69r0,9r-81,0r0,-9v21,0,27,-8,27,-28r0,-168v-1,-18,-11,-14,-27,-8r0,-9v18,-6,31,-17,53,-19r0,58v27,-34,35,-58,73,-58v31,0,51,31,51,65xm119,-146v-40,0,-71,68,-60,120v14,11,26,20,44,20v34,0,54,-40,54,-79v0,-31,-12,-61,-38,-61","w":191,"k":{"z":5,".":18,",":18}},"q":{"d":"8,-59v5,-65,44,-108,122,-101v24,2,22,-11,39,-11v-22,50,-11,141,-11,210v0,21,7,27,27,28r0,8r-81,0r0,-8v48,0,20,-75,27,-116v-32,32,-37,51,-78,54v-29,2,-47,-32,-45,-64xm73,-18v40,0,70,-63,58,-116v-49,-34,-95,-1,-95,60v0,33,12,56,37,56","w":187},"r":{"d":"9,-8v48,-1,20,-77,27,-119v0,-19,-12,-18,-27,-12r0,-8v18,-6,31,-17,54,-19r0,57v21,-31,33,-64,75,-54r0,54r-12,0v0,-21,-6,-32,-19,-32v-29,0,-47,59,-46,97v1,31,9,35,39,36r0,8r-91,0r0,-8","w":142,"k":{"y":-4,"v":-9,"u":-4,"t":-4,"s":-4,"r":-4,"p":-4,"o":-4,"n":-4,"m":-4,"j":-9,"e":-4,"d":-4,"c":-4,";":-4,":":-4,".":23,",":23}},"s":{"d":"122,-49v-2,45,-61,69,-108,44r0,-49r12,0v1,27,17,48,42,48v17,1,30,-13,30,-29v-3,-46,-78,-40,-78,-87v0,-38,53,-55,92,-37r0,46r-13,0v1,-23,-15,-42,-35,-43v-13,0,-21,8,-21,21v0,43,81,42,79,86","w":131,"k":{"w":5,".":14,",":14}},"t":{"d":"59,-27v4,22,22,6,37,-5r0,10v-20,18,-36,27,-47,27v-13,0,-17,-11,-17,-25r0,-120r-27,0r0,-7v31,2,30,-25,29,-55r36,-14v1,16,-14,12,-11,34v-3,32,14,36,43,35r0,7r-43,0r0,113","w":104},"u":{"d":"134,-53v-28,35,-36,52,-73,58v-47,-2,-29,-90,-29,-137v0,-14,-12,-17,-27,-14r0,-9r61,-10v1,10,-8,8,-8,19r0,108v0,14,5,23,18,23v33,0,60,-58,60,-102v0,-22,-8,-36,-29,-29r0,-9r61,-10v1,10,-7,7,-7,19r0,113v0,21,16,18,30,11r0,8v-19,6,-33,18,-57,20r0,-59"},"v":{"d":"114,-87v11,-31,24,-64,-15,-66r0,-8r75,0r0,8v-13,2,-26,17,-38,45r-49,116r-9,0r-45,-126v-8,-23,-18,-34,-31,-35r0,-8r57,0r0,8v-9,0,-8,8,-5,15r37,106","w":172,"k":{"q":14,"o":5,"e":5,"d":9,"c":5,"a":5,".":32,",":32}},"w":{"d":"211,-85v12,-30,25,-67,-14,-68r0,-8r75,0v1,15,-13,10,-20,21v-24,40,-45,102,-66,148r-11,0r-37,-108v-18,34,-34,70,-49,108r-10,0v-18,-47,-34,-111,-57,-151v-5,-10,-19,-4,-17,-18r56,0r0,8v-8,1,-8,6,-6,12r38,109v11,-28,32,-67,32,-99v0,-14,-8,-21,-25,-22r0,-8r58,0r0,8v-10,0,-9,6,-6,13r37,108","w":270,"k":{"q":9,"o":5,"h":5,"e":5,"d":5,"c":5,"a":5,".":32,",":32}},"x":{"d":"89,-70v-15,17,-26,24,-26,46v0,10,7,15,21,16r0,8r-79,0r0,-8v22,1,60,-47,79,-70v-23,-25,-34,-67,-72,-75r0,-8r65,0r0,8v-7,1,-8,4,-6,10r30,43v11,-13,42,-48,5,-53r0,-8r72,0r0,8v-36,9,-42,27,-72,61v25,28,37,73,79,84r0,8r-63,0r0,-8v8,-1,5,-6,2,-11","w":187,"k":{"o":9,"e":9,"d":9,"c":9}},"y":{"d":"123,-133v0,-16,-8,-19,-25,-20r0,-8r74,0r0,8v-23,4,-23,12,-33,37r-61,156v-9,24,-26,37,-52,39r-28,-33r9,-8v16,25,50,22,59,-1r15,-36v-21,-47,-38,-105,-63,-146v-5,-8,-20,-2,-18,-16r57,0r0,8v-7,1,-8,4,-6,9r44,108v10,-27,29,-68,28,-97","w":168,"k":{"o":5,"g":18,"e":5,"d":9,"c":5,"a":5,".":32,",":32}},"z":{"d":"150,8v-13,1,-8,-8,-23,-8r-116,0r0,-8r102,-145v-41,-2,-80,1,-79,40r-12,0r0,-56v11,-3,6,8,18,8r106,0r0,9r-103,144v49,3,98,-2,95,-45r12,0r0,61","w":161},"{":{"d":"92,-40v1,-23,-21,-39,-42,-41r0,-7v25,-4,42,-17,42,-38v0,-38,-17,-72,9,-99v11,-12,26,-20,45,-23r0,7v-21,2,-42,19,-39,40r8,57v-1,30,-25,49,-50,59v56,21,42,59,42,117v0,21,13,34,39,41r0,6v-33,-5,-68,-32,-62,-68","w":172},"|":{"d":"82,-249r19,0r0,324r-19,0r0,-324","w":183},"}":{"d":"80,-130v1,24,19,38,42,42r0,6v-24,5,-40,17,-42,39v5,37,16,73,-9,98v-12,12,-26,21,-45,24r0,-7v21,-3,39,-18,39,-40v1,-15,-8,-52,-7,-57v0,-31,25,-49,50,-59v-56,-21,-54,-60,-42,-117v0,-21,-13,-35,-40,-41r0,-6v34,5,61,32,62,67v0,9,-8,40,-8,51","w":172},"~":{"d":"68,-139v26,-4,133,75,138,0r8,0v1,29,-17,49,-44,51v-39,3,-121,-73,-136,0r-8,0v-1,-30,17,-47,42,-51","w":239},"\u00a0":{"w":90}}});
/**
 * init
 */
Cufon.replace('##navTop ul li a.top, .footlight, ##leftCol .pod611WhiteNoBG .widget h2, ##leftCol .right-content .widget h2');
