/*!
 * Copyright (c) 2010 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;
		}

	};

	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');

		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 = (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;
		}

		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');
		}

		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;
		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,
		//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,
			noscript: 1,
			optgroup: 1,
			option: 1,
			script: 1,
			select: 1,
			style: 1,
			textarea: 1,
			title: 1,
			pre: 1
		},
		modifyText: null,
		onAfterReplace: null,
		onBeforeReplace: null,
		printable: true,
		//rotation: 0,
		//selectable: false,
		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.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('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;

		// 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;

	};

})());




/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * Copyright (c) 1989 Adobe Systems Incorporated. All Rights Reserved.Trade Gothic
 * is a trademark of Linotype AG and/or its subsidiaries.
 * 
 * Trademark:
 * Trade Gothic is a trademark of Linotype AG and/or its subsidiaries.
 * 
 * Description:
 * The digitally encoded machine readable software for producing the Typefaces
 * licensed to you is copyrighted (c) 1989 Adobe Systems. All rights reserved. This
 * software is the property of Adobe Systems Incorporated and its licensors, and
 * may not be reproduced, used, displayed, modified, disclosed, or transferred
 * without the express written approval of Adobe. The digitally encoded machine
 * readable outline data for producing the Typefaces licensed to you is copyrighted
 * (c) 1981 Linotype AG and/or its subsidiaries. All Rights Reserved. This data is
 * the property of Linotype AG and/or its subsidiaries and may not be reproduced,
 * used, displayed, modified, disclosed or transferred without the express written
 * approval of Linotype AG and/or its subsidiaries.
 * 
 * Vendor URL:
 * http://www.linotypelibrary.com
 */
Cufon.registerFont({"w":159,"face":{"font-family":"TradeGothic Eighteen","font-weight":500,"font-stretch":"normal","units-per-em":"360","panose-1":"2 0 6 6 2 0 0 2 0 4","ascent":"288","descent":"-72","x-height":"4","bbox":"-4 -294 271 61.7796","underline-thickness":"18","underline-position":"-27","unicode-range":"U+0020-U+007E"},"glyphs":{" ":{"w":79},"\u00a0":{"w":79},"$":{"d":"69,-238v-25,2,-36,40,-19,60v5,7,11,13,19,19r0,-79xm87,-22v32,0,42,-47,24,-71v-6,-8,-15,-15,-24,-22r0,93xm146,-64v1,38,-24,61,-59,64r0,42r-18,0r0,-42v-35,-5,-55,-32,-55,-71r26,0v1,24,8,44,29,49r0,-105v-23,-17,-53,-34,-53,-72v0,-36,22,-55,53,-61r0,-34r18,0r0,34v35,4,54,33,55,69r-26,0v-2,-23,-10,-41,-29,-47r0,91v27,20,59,36,59,83"},"%":{"d":"73,-238v-21,0,-35,13,-35,34v0,21,14,35,35,35v20,0,34,-14,34,-35v0,-21,-14,-34,-34,-34xm229,-56v0,-47,-71,-42,-69,0v1,20,12,34,34,34v22,0,35,-14,35,-34xm220,-264r-149,268r-21,0r149,-268r21,0xm73,-148v-34,0,-56,-22,-56,-56v0,-35,23,-56,56,-56v33,0,56,21,56,56v0,34,-22,56,-56,56xm194,0v-35,0,-56,-23,-56,-56v0,-33,21,-56,56,-56v35,0,57,23,57,56v0,33,-22,56,-57,56","w":280},"&":{"d":"91,-244v-37,2,-20,62,-10,83v15,-18,28,-31,29,-59v0,-11,-9,-25,-19,-24xm71,-121v-30,22,-44,103,16,101v16,-1,29,-11,37,-22v-19,-23,-39,-52,-53,-79xm137,-68v7,-16,10,-37,11,-58r26,1v-2,31,-9,53,-18,77v9,10,19,21,31,29r-15,19v-11,-4,-24,-16,-32,-24v-31,46,-122,31,-122,-39v0,-40,25,-58,43,-79v-22,-36,-33,-122,27,-122v28,0,48,17,48,46v0,40,-25,58,-46,79v13,26,30,49,47,71","w":200},"(":{"d":"86,-253v-49,75,-49,207,0,282r-18,11v-57,-70,-57,-234,0,-304","w":100},")":{"d":"14,29v50,-76,50,-206,0,-282r18,-11v58,69,58,235,0,304","w":100},"*":{"d":"85,-203r51,-25r8,24r-56,11r41,40r-21,16r-28,-49r-29,49r-20,-16r41,-40r-56,-11r7,-24r52,25r-7,-57r24,0"},"+":{"d":"96,-187r24,0r0,82r82,0r0,23r-82,0r0,82r-24,0r0,-82r-82,0r0,-23r82,0r0,-82","w":216},",":{"d":"55,-34v4,41,-12,62,-22,88r-10,0r16,-54r-14,0r0,-34r30,0","w":79},"-":{"d":"15,-82r0,-23r89,0r0,23r-89,0","w":119},"\u00ad":{"d":"15,-82r0,-23r89,0r0,23r-89,0","w":119},".":{"d":"55,-34r0,34r-30,0r0,-34r30,0","w":79},"\/":{"d":"-4,4r84,-268r24,0r-84,268r-24,0","w":100},"0":{"d":"80,-18v40,-8,37,-62,37,-112v0,-50,3,-103,-37,-112v-40,9,-37,63,-37,112v0,50,-3,103,37,112xm80,-264v60,0,63,68,63,134v0,66,-3,134,-63,134v-60,0,-63,-68,-63,-134v0,-66,3,-134,63,-134"},"1":{"d":"37,-243v23,-3,30,-23,59,-21r0,242r30,0r0,22r-88,0r0,-22r32,0r0,-208r-33,2r0,-15"},"2":{"d":"80,-264v59,-4,72,79,42,121v-28,40,-60,73,-81,121r99,0r0,22r-123,0v2,-94,88,-112,95,-201v2,-24,-10,-41,-31,-41v-26,0,-37,24,-38,55r-24,0v3,-44,17,-74,61,-77"},"3":{"d":"75,-264v66,-6,76,112,24,125v24,10,38,31,38,66v0,76,-93,105,-118,37v-3,-8,-4,-17,-4,-26r24,0v2,25,11,45,37,44v26,-1,34,-26,35,-54v1,-40,-18,-57,-59,-55r0,-22v38,1,55,-12,55,-50v0,-27,-10,-43,-31,-43v-22,0,-30,16,-31,37r-23,-3v2,-33,20,-53,53,-56"},"4":{"d":"33,-81r59,0r-1,-155xm118,-260r0,179r27,0r0,22r-27,0r0,59r-26,0r0,-59r-83,0r0,-12r71,-189r38,0"},"5":{"d":"142,-87v13,79,-84,126,-117,53v-3,-8,-5,-16,-5,-24r24,-2v3,21,9,41,33,42v50,1,57,-132,3,-132v-14,0,-29,13,-32,25r-21,-3r9,-132r91,0r-2,22r-68,0r-5,79v46,-34,97,13,90,72"},"6":{"d":"83,-136v-24,0,-38,15,-38,47v0,37,3,71,36,71v29,0,35,-28,34,-60v-1,-30,-4,-58,-32,-58xm19,-116v0,-78,10,-164,87,-144v19,5,26,25,29,47r-23,1v-3,-34,-44,-42,-56,-5v-6,17,-11,43,-11,79v9,-10,23,-20,40,-20v42,0,55,35,56,80v1,45,-17,82,-56,82v-61,0,-65,-55,-66,-120"},"7":{"d":"22,-260r116,0r0,14r-75,246r-28,0r76,-238r-89,0r0,-22"},"8":{"d":"80,-150v32,-11,51,-88,0,-92v-51,2,-32,82,0,92xm80,-18v49,0,45,-77,15,-95r-15,-12v-19,14,-38,29,-38,61v0,26,12,45,38,46xm102,-138v21,16,42,37,42,72v-1,42,-23,70,-64,70v-41,0,-63,-28,-64,-70v-1,-36,21,-56,42,-72v-21,-17,-36,-32,-36,-67v0,-37,23,-59,58,-59v34,0,58,22,58,59v0,35,-15,50,-36,67"},"9":{"d":"77,-124v24,0,40,-15,38,-47v-3,-37,-4,-71,-37,-71v-29,0,-33,28,-33,60v0,32,4,58,32,58xm141,-144v0,78,-9,164,-87,144v-20,-5,-26,-25,-30,-47r24,-1v3,34,44,42,56,5v6,-17,10,-43,10,-79v-9,10,-22,20,-39,20v-42,0,-56,-34,-56,-80v-1,-45,17,-82,56,-82v61,0,65,55,66,120"},":":{"d":"55,-132r0,34r-30,0r0,-34r30,0xm55,-34r0,34r-30,0r0,-34r30,0","w":79},";":{"d":"55,-132r0,34r-30,0r0,-34r30,0xm55,-34v4,41,-12,62,-22,88r-10,0r16,-54r-14,0r0,-34r30,0","w":79},"<":{"d":"202,-1r-188,-84r0,-18r188,-83r0,25r-152,67r152,68r0,25","w":216},"=":{"d":"14,-67r188,0r0,24r-188,0r0,-24xm14,-144r188,0r0,24r-188,0r0,-24","w":216},">":{"d":"14,-26r152,-68r-152,-67r0,-25r188,83r0,18r-188,84r0,-25","w":216},"?":{"d":"70,-34r0,34r-30,0r0,-34r30,0xm71,-264v60,-1,50,85,21,114v-17,16,-27,38,-25,73r-20,0v-8,-68,41,-81,44,-138v0,-16,-8,-27,-21,-27v-16,0,-24,15,-25,31r-22,-4v4,-28,18,-48,48,-49","w":140},"@":{"d":"152,-184v-42,3,-71,63,-48,101v39,31,77,-25,77,-67v0,-19,-12,-32,-29,-34xm152,-207v20,0,34,10,41,28r8,-22r22,0r-34,121v0,6,3,9,8,9v35,-6,53,-43,53,-81v0,-59,-41,-91,-100,-91v-68,0,-110,46,-110,112v0,68,43,112,112,114v38,0,71,-19,88,-42r23,0v-22,36,-57,63,-112,63v-81,0,-134,-52,-134,-135v0,-81,54,-133,133,-133v69,0,121,40,121,111v0,56,-33,97,-83,103v-15,2,-21,-11,-25,-23v-24,38,-100,24,-95,-33v5,-55,29,-101,84,-101","w":288},"A":{"d":"51,-101r58,0r-29,-139xm99,-260r58,260r-28,0r-16,-77r-66,0r-16,77r-28,0r57,-260r39,0","k":{"y":6,"w":6,"v":6,"Y":20,"W":13,"V":13,"T":13}},"B":{"d":"126,-196v0,-42,-33,-41,-74,-40r0,88v44,1,74,-4,74,-48xm132,-72v0,-46,-31,-57,-80,-53r0,101v46,3,80,-3,80,-48xm160,-72v4,71,-63,75,-136,72r0,-260r69,0v69,-8,83,109,21,122v30,7,45,32,46,66","w":180},"C":{"d":"17,-130v0,-71,10,-134,75,-134v45,0,63,34,66,83r-28,0v-4,-34,-9,-56,-38,-59v-47,5,-47,56,-47,110v0,54,0,110,47,110v33,0,42,-29,42,-66r28,0v0,53,-22,90,-70,90v-66,0,-75,-64,-75,-134","w":180},"D":{"d":"132,-130v0,-65,-10,-113,-80,-106r0,212v69,7,80,-40,80,-106xm160,-130v0,75,-16,129,-88,130r-48,0r0,-260r48,0v72,0,88,55,88,130","w":180},"E":{"d":"143,-260r0,24r-91,0r0,88r67,0r0,24r-67,0r0,100r95,0r0,24r-123,0r0,-260r119,0"},"F":{"d":"24,-260r111,0r0,24r-83,0r0,88r62,0r0,24r-62,0r0,124r-28,0r0,-260","w":140,"k":{"A":13,".":40,",":40}},"G":{"d":"17,-130v-3,-82,29,-159,105,-126v25,11,34,43,38,76r-28,0v-1,-32,-10,-60,-41,-60v-47,0,-46,58,-46,110v0,52,-1,107,46,110v40,3,44,-36,41,-78r-36,0r0,-24r64,0r0,122r-18,0r-4,-19v-11,13,-25,23,-47,23v-66,0,-71,-64,-74,-134","w":180},"H":{"d":"52,-260r0,112r76,0r0,-112r28,0r0,260r-28,0r0,-124r-76,0r0,124r-28,0r0,-260r28,0","w":180},"I":{"d":"54,-260r0,260r-28,0r0,-260r28,0","w":79},"J":{"d":"0,-23v28,9,48,-1,48,-35r0,-202r28,0r0,195v5,53,-29,77,-78,66","w":100},"K":{"d":"48,-260r1,133r73,-133r30,0r-50,91r59,169r-30,0r-49,-140r-34,60r0,80r-28,0r0,-260r28,0"},"L":{"d":"52,-260r0,236r84,0r0,24r-112,0r0,-260r28,0","w":140,"k":{"y":13,"Y":27,"W":13,"V":20,"T":20}},"M":{"d":"65,-260r46,197r44,-197r45,0r0,260r-26,0r-1,-238r-54,238r-18,0r-55,-238r0,238r-26,0r0,-260r45,0","w":219},"N":{"d":"64,-260r68,192r0,-192r28,0r0,260r-30,0r-82,-226r0,226r-28,0r0,-260r44,0","w":180},"O":{"d":"90,-20v45,-6,45,-56,45,-110v0,-54,0,-103,-45,-110v-45,6,-45,56,-45,110v0,54,0,103,45,110xm90,-264v63,0,73,64,73,134v0,70,-10,134,-73,134v-63,0,-73,-64,-73,-134v0,-70,10,-134,73,-134","w":180},"P":{"d":"122,-189v0,-43,-30,-51,-74,-47r0,95v44,3,74,-4,74,-48xm150,-189v0,58,-40,77,-102,72r0,117r-28,0r0,-260v70,-4,130,1,130,71","k":{"A":6,".":40,",":40}},"Q":{"d":"45,-130v0,58,3,119,59,107v4,-2,7,-5,11,-9v-6,-8,-12,-13,-19,-18r0,-23v13,4,22,12,30,21v12,-55,26,-181,-36,-188v-45,6,-45,56,-45,110xm143,-27v7,8,14,23,28,23r0,24v-22,0,-34,-15,-43,-29v-11,9,-21,13,-38,13v-63,0,-73,-64,-73,-134v0,-70,10,-134,73,-134v93,0,83,171,53,237","w":180},"R":{"d":"130,-191v0,-42,-33,-48,-78,-45r0,90v44,2,78,-3,78,-45xm86,-260v79,-9,96,112,30,131r44,129r-30,0r-41,-123r-37,1r0,122r-28,0r0,-260r62,0","w":180,"k":{"Y":6,"V":6,"T":6}},"S":{"d":"16,-203v-3,-59,74,-79,108,-42v11,12,18,29,19,52r-26,0v6,-51,-76,-65,-76,-13v0,71,104,60,104,143v0,77,-110,89,-127,23v-3,-9,-5,-19,-5,-30r26,0v0,29,13,51,43,50v25,0,41,-16,38,-43v-7,-70,-100,-63,-104,-140"},"T":{"d":"137,-260r0,24r-53,0r0,236r-28,0r0,-236r-53,0r0,-24r134,0","w":140,"k":{"y":20,"w":20,"u":20,"s":20,"r":20,"o":20,"i":20,"e":20,"c":20,"a":20,"A":13,";":20,":":20,".":27,"-":20,",":27}},"U":{"d":"90,4v-45,0,-65,-27,-66,-72r0,-192r28,0r0,191v-1,29,9,49,38,49v29,0,38,-19,38,-49r0,-191r28,0r0,192v-1,45,-21,72,-66,72","w":180},"V":{"d":"34,-260r46,206r46,-206r28,0r-61,260r-26,0r-61,-260r28,0","k":{"u":6,"r":6,"o":13,"i":6,"e":13,"a":13,"A":6,";":13,":":13,".":27,"-":13,",":27}},"W":{"d":"28,-260r32,203r39,-203r23,0r41,203r29,-203r25,0r-41,260r-24,0r-42,-204r-41,204r-24,0r-43,-260r26,0","w":219,"k":{"o":6,"e":6,"a":6,"A":6,";":6,":":6,".":13,",":13}},"X":{"d":"37,-260r40,92r37,-92r30,0r-51,122r62,138r-30,0r-48,-109r-42,109r-30,0r56,-138r-54,-122r30,0"},"Y":{"d":"36,-260r45,114r43,-114r30,0r-60,150r0,110r-28,0r0,-110r-60,-150r30,0","k":{"v":6,"u":13,"q":20,"p":13,"o":20,"i":6,"e":20,"a":20,"A":13,";":20,":":20,".":27,"-":20,",":27}},"Z":{"d":"144,-260r0,20r-96,216r96,0r0,24r-128,0r0,-20r93,-216r-85,0r0,-24r120,0"},"[":{"d":"22,-260r66,0r0,14r-43,0r0,268r43,0r0,14r-66,0r0,-296","w":100},"\\":{"d":"80,4r-84,-268r24,0r84,268r-24,0","w":100},"]":{"d":"78,36r-66,0r0,-14r43,0r0,-268r-43,0r0,-14r66,0r0,296","w":100},"^":{"d":"98,-260r20,0r76,154r-26,0r-60,-123r-60,123r-26,0","w":216},"_":{"d":"0,45r0,-18r180,0r0,18r-180,0","w":180},"a":{"d":"43,-47v-3,39,49,32,62,10r0,-64v-26,11,-60,21,-62,54xm78,-169v-22,0,-27,20,-32,37r-24,-4v5,-30,22,-53,56,-55v86,-3,38,120,58,191r-27,0r-3,-16v-24,32,-93,22,-89,-29v4,-49,47,-66,88,-77v2,-26,-5,-47,-27,-47"},"b":{"d":"82,-169v-13,-1,-21,10,-28,16r0,117v6,9,16,16,27,18v34,-3,36,-39,36,-76v0,-36,-1,-73,-35,-75xm89,4v-19,0,-30,-9,-39,-22r-6,18r-20,0v9,-77,2,-175,4,-260r26,0r0,86v8,-7,21,-18,35,-17v45,3,54,47,54,97v0,50,-9,98,-54,98"},"c":{"d":"13,-94v0,-58,8,-97,57,-97v37,0,49,25,55,59r-26,0v-2,-24,-8,-37,-29,-37v-34,0,-31,38,-31,75v0,39,-3,76,31,76v23,0,27,-19,30,-41r25,0v-3,35,-19,63,-55,63v-48,0,-57,-39,-57,-98","w":140},"d":{"d":"78,-18v11,-1,22,-9,28,-18r0,-117v-7,-6,-15,-17,-28,-16v-34,2,-35,39,-35,75v0,37,2,73,35,76xm132,-50v0,21,1,35,4,50r-24,0v-1,-6,1,-14,-2,-18v-9,12,-20,22,-39,22v-46,0,-54,-48,-54,-98v0,-50,9,-93,54,-97v14,0,27,10,35,17r0,-86r26,0r0,210"},"e":{"d":"101,-111v6,-45,-25,-75,-54,-46v-6,10,-9,28,-8,46r62,0xm70,-191v49,0,58,48,57,102r-88,0v-1,37,-1,71,34,71v21,0,28,-18,32,-35r24,3v-5,31,-24,54,-59,54v-48,0,-57,-39,-57,-98v0,-58,8,-97,57,-97","w":140},"f":{"d":"94,-241v-15,-8,-33,-1,-33,17r0,37r30,0r0,21r-30,0r0,166r-26,0r0,-166r-29,0r0,-21r29,0v-5,-49,6,-91,59,-74r0,20","w":100},"g":{"d":"82,42v35,3,55,-36,20,-44r-36,-8v-12,5,-25,12,-25,25v0,19,18,25,41,27xm78,-171v-22,0,-28,18,-28,47v0,29,6,47,28,47v38,0,38,-94,0,-94xm27,-120v0,-59,55,-93,88,-54v6,-10,16,-17,32,-17r0,24v-10,-2,-20,0,-24,6v16,49,1,115,-62,102v-15,1,-17,22,1,25v37,7,82,8,83,51v2,58,-127,60,-128,4v1,-19,14,-30,28,-38v-11,-4,-21,-11,-21,-25v0,-14,14,-22,25,-25v-14,-11,-22,-29,-22,-53"},"h":{"d":"108,-138v4,-45,-45,-32,-56,-8r0,146r-26,0r0,-260r26,0r0,93v9,-9,26,-24,41,-24v28,0,41,18,41,49r0,142r-26,0r0,-138"},"i":{"d":"27,-260r26,0r0,30r-26,0r0,-30xm27,-187r26,0r0,187r-26,0r0,-187","w":79},"j":{"d":"28,-260r26,0r0,30r-26,0r0,-30xm54,19v2,36,-19,45,-53,41r0,-22v16,5,28,-3,27,-21r0,-204r26,0r0,206","w":79},"k":{"d":"24,-260r26,0r0,164r50,-91r27,0r-35,60r43,127r-26,0r-35,-102r-24,47r0,55r-26,0r0,-260","w":140},"l":{"d":"27,-260r26,0r0,260r-26,0r0,-260","w":79},"m":{"d":"107,-144v4,-39,-45,-25,-52,-6r0,150r-26,0r0,-187r24,0r0,20v14,-25,67,-35,77,0v18,-32,81,-33,81,19r0,148r-26,0r0,-144v5,-41,-45,-23,-52,-6r0,150r-26,0r0,-144","w":240},"n":{"d":"108,-138v4,-45,-45,-32,-56,-8r0,146r-26,0r0,-187r24,0r0,20v10,-9,28,-24,43,-24v28,0,41,18,41,49r0,142r-26,0r0,-138"},"o":{"d":"70,-169v-34,0,-31,38,-31,75v0,39,-3,76,31,76v35,0,31,-39,31,-76v0,-36,4,-75,-31,-75xm70,4v-48,0,-57,-39,-57,-98v0,-58,8,-97,57,-97v48,0,57,40,57,97v0,58,-9,98,-57,98","w":140},"p":{"d":"81,-169v-11,2,-21,9,-27,18r0,116v7,6,15,18,28,17v34,-2,35,-40,35,-76v0,-37,-3,-72,-36,-75xm89,4v-15,0,-28,-11,-35,-18r0,75r-26,0r0,-248r22,0r0,18v8,-13,20,-22,39,-22v45,0,54,47,54,97v0,50,-9,94,-54,98"},"q":{"d":"78,-18v13,1,21,-11,28,-17r0,-116v-6,-9,-17,-16,-28,-18v-33,3,-35,39,-35,75v0,36,1,74,35,76xm71,-191v19,-1,29,11,39,22r0,-18r22,0r0,248r-26,0r0,-75v-8,7,-20,18,-35,18v-46,-4,-54,-48,-54,-98v0,-50,8,-94,54,-97"},"r":{"d":"98,-166v-28,0,-38,13,-48,33r0,133r-26,0r0,-187r26,0r0,22v12,-16,22,-26,48,-26r0,25","w":100,"k":{".":20,"-":13,",":20}},"s":{"d":"19,-145v-1,-42,55,-59,84,-34v9,8,14,19,17,33r-21,6v0,-28,-51,-44,-54,-7v10,48,80,40,80,99v0,47,-60,67,-91,39v-9,-9,-15,-21,-20,-37r23,-5v2,33,62,47,62,5v0,-51,-79,-42,-80,-99","w":140},"t":{"d":"89,0v-29,10,-61,1,-61,-37r0,-129r-25,0r0,-21r25,0r0,-63r26,0r0,63r35,0r0,21r-35,0r0,131v-2,21,19,21,35,16r0,19","w":100},"u":{"d":"52,-49v-4,45,45,32,56,8r0,-146r26,0r0,187r-25,0r0,-21v-9,9,-27,25,-42,25v-28,0,-41,-18,-41,-49r0,-142r26,0r0,138"},"v":{"d":"32,-187r39,161r36,-161r26,0r-46,187r-34,0r-47,-187r26,0","w":140,"k":{".":13,",":13}},"w":{"d":"31,-187r27,137r31,-137r24,0r32,137r24,-137r25,0r-39,187r-22,0r-33,-145r-32,145r-22,0r-40,-187r25,0","w":200,"k":{".":13,",":13}},"x":{"d":"0,-187r27,0r31,65r27,-65r27,0r-40,90r47,97r-26,0r-34,-73r-32,73r-27,0r44,-97","w":119},"y":{"d":"27,-187r36,143r29,-143r27,0v-22,75,-27,172,-64,231v-10,15,-27,18,-51,17r0,-21v30,2,40,-15,46,-41r-49,-186r26,0","w":119,"k":{".":13,",":13}},"z":{"d":"14,-187r97,0r0,17r-74,148r74,0r0,22r-103,0r0,-19r72,-147r-66,0r0,-21","w":119},"{":{"d":"84,40v-112,17,-17,-135,-78,-145r0,-14v61,-9,-35,-162,78,-145r0,15v-19,-1,-34,-2,-34,19v0,44,16,114,-27,118v43,4,27,74,27,118v0,21,15,20,34,19r0,15","w":100},"|":{"d":"28,-264r24,0r0,268r-24,0r0,-268","w":79},"}":{"d":"17,-264v110,-16,16,136,77,145r0,14v-61,9,34,162,-77,145r0,-15v19,1,33,1,33,-19v0,-44,-16,-114,27,-118v-43,-4,-27,-74,-27,-118v0,-20,-14,-20,-33,-19r0,-15","w":100},"~":{"d":"148,-93v17,0,26,-15,33,-26r13,18v-9,17,-22,32,-47,32v-30,0,-50,-25,-79,-25v-17,0,-26,15,-33,26r-13,-18v8,-17,22,-32,47,-32v30,0,50,25,79,25","w":216},"'":{"d":"29,-260r22,0r0,92r-22,0r0,-92","w":79},"`":{"d":"-3,-258r28,0r35,50r-18,0","w":79},"#":{"d":"66,-158r-6,56r36,0r6,-56r-36,0xm145,-82r-31,0r-9,82r-21,0r9,-82r-35,0r-9,82r-22,0r10,-82r-31,0r0,-20r33,0r6,-56r-30,0r0,-20r32,0r10,-82r20,0r-9,82r36,0r9,-82r21,0r-9,82r28,0r0,20r-30,0r-6,56r28,0r0,20"},"!":{"d":"75,-34r0,34r-30,0r0,-34r30,0xm45,-260r30,0r-6,183r-19,0","w":119},"\"":{"d":"72,-260r22,0r0,92r-22,0r0,-92xm26,-260r22,0r0,92r-22,0r0,-92","w":119}}});




/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * Copyright (c) 1989 Adobe Systems Incorporated. All Rights Reserved.Trade Gothic
 * is a trademark of Linotype AG and/or its subsidiaries.
 * 
 * Trademark:
 * Trade Gothic is a trademark of Linotype AG and/or its subsidiaries.
 * 
 * Description:
 * The digitally encoded machine readable software for producing the Typefaces
 * licensed to you is copyrighted (c) 1989 Adobe Systems. All rights reserved. This
 * software is the property of Adobe Systems Incorporated and its licensors, and
 * may not be reproduced, used, displayed, modified, disclosed, or transferred
 * without the express written approval of Adobe. The digitally encoded machine
 * readable outline data for producing the Typefaces licensed to you is copyrighted
 * (c) 1981 Linotype AG and/or its subsidiaries. All Rights Reserved. This data is
 * the property of Linotype AG and/or its subsidiaries and may not be reproduced,
 * used, displayed, modified, disclosed or transferred without the express written
 * approval of Linotype AG and/or its subsidiaries.
 * 
 * Vendor URL:
 * http://www.linotypelibrary.com
 */
Cufon.registerFont({"w":159,"face":{"font-family":"TradeGothic Twenty","font-weight":700,"font-stretch":"normal","units-per-em":"360","panose-1":"2 0 8 6 2 0 0 2 0 4","ascent":"288","descent":"-72","x-height":"4","bbox":"-12 -292 274 61.598","underline-thickness":"18","underline-position":"-27","unicode-range":"U+0020-U+007E"},"glyphs":{" ":{"w":79},"\u00a0":{"w":79},"$":{"d":"69,-225v-27,8,-20,52,0,63r0,-63xm91,-35v29,-9,22,-58,0,-70r0,70xm14,-193v0,-37,21,-61,55,-67r0,-32r22,0r0,32v21,4,39,18,50,33r-28,23v-6,-9,-10,-19,-22,-21r0,75v28,19,58,36,58,80v0,40,-21,66,-58,70r0,42r-22,0r0,-42v-26,-2,-47,-23,-58,-41r30,-22v4,12,15,25,28,28r0,-84v-25,-17,-55,-34,-55,-74"},"%":{"d":"77,-231v-15,0,-30,15,-30,30v0,16,14,30,30,30v16,0,30,-14,30,-30v0,-15,-15,-30,-30,-30xm203,-89v-15,0,-30,15,-30,30v0,15,15,30,30,30v15,0,30,-15,30,-30v0,-15,-15,-30,-30,-30xm228,-264r-148,268r-27,0r148,-268r27,0xm203,0v-35,0,-59,-24,-59,-59v0,-35,24,-59,59,-59v35,0,59,24,59,59v0,35,-24,59,-59,59xm77,-142v-35,0,-59,-24,-59,-59v0,-35,24,-59,59,-59v35,0,59,24,59,59v0,35,-24,59,-59,59","w":280},"&":{"d":"71,-95v-27,23,0,83,36,52v-14,-15,-26,-32,-36,-52xm87,-238v-31,5,-14,57,-6,76v15,-13,38,-66,6,-76xm130,-78r15,-48r37,10v-6,25,-15,46,-24,68v6,6,14,10,25,12r0,40v-20,0,-37,-7,-51,-20v-33,37,-113,21,-113,-41v0,-31,19,-57,34,-74v-26,-42,-35,-133,36,-133v33,0,53,22,53,54v0,38,-26,58,-45,79v10,19,20,38,33,53","w":200},"(":{"d":"54,31v-54,-72,-54,-223,0,-295r35,0v-55,71,-56,224,0,295r-35,0","w":100},")":{"d":"12,31v54,-72,54,-223,0,-295r34,0v23,39,43,89,43,148v0,58,-20,108,-43,147r-34,0","w":100},"*":{"d":"145,-200v-19,0,-37,4,-55,6v12,14,27,26,40,38r-28,20r-22,-50v-8,16,-16,32,-22,50r-28,-20v13,-12,28,-24,39,-38v-17,-2,-35,-6,-54,-6r11,-32v14,9,30,17,46,24r-9,-52r34,0r-9,52v16,-7,32,-15,46,-24"},"+":{"d":"90,-182r36,0r0,73r73,0r0,36r-73,0r0,73r-36,0r0,-73r-73,0r0,-36r73,0r0,-73","w":216},",":{"d":"61,0r-25,45r-19,0r18,-45r-16,0r0,-42r42,0r0,42","w":79},"-":{"d":"16,-80r0,-33r88,0r0,33r-88,0","w":119},"\u00ad":{"d":"16,-80r0,-33r88,0r0,33r-88,0","w":119},".":{"d":"19,0r0,-42r42,0r0,42r-42,0","w":79},"\/":{"d":"72,-264r36,0r-80,268r-36,0","w":100},"0":{"d":"101,-203v0,-17,-7,-25,-21,-25v-14,0,-21,8,-21,25r0,146v0,17,7,25,21,25v14,0,21,-8,21,-25r0,-146xm80,4v-91,5,-59,-116,-63,-196v-3,-49,16,-70,63,-72v91,-5,59,116,63,196v3,49,-16,70,-63,72"},"1":{"d":"28,-230v19,-9,38,-21,53,-34r23,0r0,264r-40,0r0,-206r-36,0r0,-24"},"2":{"d":"144,-206v0,79,-46,111,-83,169r79,0r0,37r-124,0r0,-35v29,-53,78,-93,86,-164v2,-17,-7,-29,-21,-29v-21,-1,-22,21,-21,44r-43,0v-2,-50,21,-80,67,-80v35,0,60,22,60,58"},"3":{"d":"76,4v-44,0,-64,-28,-59,-79r40,0v-1,21,-1,43,20,43v22,0,22,-25,21,-50v0,-28,-10,-36,-38,-37r0,-35v27,1,36,-12,36,-40v0,-21,-1,-33,-18,-34v-18,-1,-21,17,-20,37r-40,0v-2,-46,19,-71,61,-73v63,-4,78,103,30,127v53,21,43,141,-33,141"},"4":{"d":"84,-96r0,-101r-44,101r44,0xm84,-63r-78,0r0,-33r75,-164r44,0r0,164r23,0r0,33r-23,0r0,63r-41,0r0,-63"},"5":{"d":"82,4v-47,1,-69,-27,-64,-79r40,0v-1,22,0,43,20,43v34,-1,18,-57,22,-90v3,-34,-39,-27,-43,-4r-34,0r3,-134r108,0r-1,37r-70,0v0,18,-4,40,-2,57v10,-12,15,-15,34,-15v51,0,49,52,48,104v-1,51,-13,80,-61,81"},"6":{"d":"101,-100v2,-30,-30,-28,-42,-13v3,30,-11,81,21,81v29,0,19,-41,21,-68xm80,-264v42,0,61,28,58,74r-39,0v1,-20,-1,-38,-19,-38v-33,0,-17,55,-21,85v24,-31,84,-18,84,36v0,62,-2,111,-63,111v-91,0,-59,-116,-63,-196v-3,-49,16,-72,63,-72"},"7":{"d":"20,-223r0,-37r118,0r0,25r-53,235r-43,0r53,-223r-75,0"},"8":{"d":"60,-193v0,21,2,36,20,36v18,0,19,-15,19,-36v0,-21,-2,-35,-19,-35v-17,0,-20,14,-20,35xm57,-75v0,23,2,43,23,43v21,0,23,-20,23,-43v0,-23,-2,-43,-23,-43v-21,0,-23,20,-23,43xm80,-264v62,-7,79,95,36,125v47,29,35,152,-36,143v-72,9,-83,-113,-36,-143v-43,-29,-27,-133,36,-125"},"9":{"d":"59,-160v-3,31,29,27,42,13v-3,-30,11,-81,-21,-81v-29,0,-19,41,-21,68xm80,4v-42,0,-61,-28,-58,-74r39,0v-1,20,1,38,19,38v33,0,17,-55,21,-85v-24,31,-84,18,-84,-36v0,-62,2,-111,63,-111v91,0,59,116,63,196v3,49,-16,72,-63,72"},":":{"d":"19,-100r0,-43r42,0r0,43r-42,0xm19,0r0,-42r42,0r0,42r-42,0","w":79},";":{"d":"19,-100r0,-43r42,0r0,43r-42,0xm61,0r-25,45r-19,0r18,-45r-16,0r0,-42r42,0r0,42","w":79},"<":{"d":"199,0r-182,-76r0,-30r182,-76r0,37r-131,54r131,54r0,37","w":216},"=":{"d":"199,-36r-182,0r0,-35r182,0r0,35xm199,-111r-182,0r0,-35r182,0r0,35","w":216},">":{"d":"17,-37r131,-54r-131,-54r0,-37r182,76r0,30r-182,76r0,-37","w":216},"?":{"d":"45,0r0,-42r42,0r0,42r-42,0xm12,-216v7,-59,117,-66,117,1v0,58,-55,67,-45,139r-35,0v-8,-64,25,-91,38,-138v0,-8,-5,-17,-15,-16v-17,0,-22,14,-26,27","w":140},"@":{"d":"105,-116v-1,18,11,33,28,32v28,-2,43,-25,44,-54v0,-17,-11,-33,-28,-32v-28,2,-42,25,-44,54xm69,-111v-8,-68,78,-122,119,-68r6,-18r29,0r-25,106v0,5,1,10,6,10v28,-5,42,-33,42,-66v0,-57,-38,-88,-97,-88v-64,0,-102,41,-102,106v0,65,42,105,107,105v33,0,58,-12,76,-30r30,0v-21,34,-57,58,-108,58v-83,0,-138,-50,-138,-134v0,-82,54,-134,136,-134v70,0,124,40,124,110v0,59,-37,97,-89,103v-13,2,-19,-9,-22,-20v-28,38,-99,13,-94,-40","w":288},"A":{"d":"62,-96r36,0r-18,-112xm48,0r-44,0r48,-260r56,0r48,260r-44,0r-8,-58r-49,0","k":{"y":6,"w":6,"v":6,"Y":20,"W":13,"V":13,"T":13}},"B":{"d":"66,-153v28,3,47,-7,46,-33v0,-31,-16,-40,-46,-37r0,70xm117,-77v0,-32,-17,-43,-51,-40r0,80v34,3,51,-6,51,-40xm126,-137v59,20,44,149,-34,137r-70,0r0,-260r66,0v74,-12,91,100,38,123","w":180},"C":{"d":"90,-264v50,0,70,36,66,91r-44,0v1,-25,-1,-51,-22,-52v-19,0,-23,10,-24,29r0,132v1,19,4,29,24,29v28,0,21,-32,22,-58r44,0v5,58,-13,97,-66,97v-43,0,-68,-24,-68,-67r0,-134v0,-43,26,-67,68,-67","w":180},"D":{"d":"114,-187v2,-34,-16,-37,-48,-36r0,186v31,1,48,-2,48,-36r0,-114xm158,-181v-2,82,18,188,-70,181r-66,0r0,-260r66,0v49,0,71,27,70,79","w":180},"E":{"d":"22,0r0,-260r119,0r0,39r-75,0r0,67r58,0r0,39r-58,0r0,76r80,0r0,39r-124,0"},"F":{"d":"22,0r0,-260r124,0r0,39r-80,0r0,67r60,0r0,39r-60,0r0,115r-44,0","k":{"A":13,".":33,",":33}},"G":{"d":"87,-35v28,1,25,-32,25,-61r-29,0r0,-36r73,0r0,132r-21,0r-9,-19v-30,45,-110,19,-104,-44v8,-84,-26,-204,65,-201v48,1,70,34,67,88r-42,0v-1,-26,-2,-49,-26,-49v-15,0,-20,11,-20,29r0,133v1,16,5,28,21,28","w":180},"H":{"d":"22,0r0,-260r44,0r0,106r48,0r0,-106r44,0r0,260r-44,0r0,-115r-48,0r0,115r-44,0","w":180},"I":{"d":"28,0r0,-260r44,0r0,260r-44,0","w":100},"J":{"d":"78,-52v2,46,-29,59,-77,56r0,-39v21,1,34,-3,33,-22r0,-203r44,0r0,208","w":100},"K":{"d":"19,0r0,-260r45,0r1,96r47,-96r44,0r-48,97r54,163r-45,0r-37,-121r-16,29r0,92r-45,0"},"L":{"d":"19,0r0,-260r45,0r0,221r70,0r0,39r-115,0","w":140,"k":{"Y":20,"W":13,"V":13,"T":6}},"M":{"d":"201,-260r0,260r-39,0r-1,-203r-40,203r-22,0r-41,-203r0,203r-39,0r0,-260r59,0r32,152r32,-152r59,0","w":219},"N":{"d":"22,0r0,-260r41,0r55,149r0,-149r40,0r0,260r-38,0r-58,-162r0,162r-40,0","w":180},"O":{"d":"90,-225v-19,0,-23,10,-24,29r0,132v1,19,4,29,24,29v19,0,23,-10,24,-29r0,-132v-1,-19,-4,-29,-24,-29xm90,4v-43,0,-68,-24,-68,-67r0,-134v0,-43,26,-67,68,-67v43,0,68,24,68,67r0,134v0,43,-26,67,-68,67","w":180},"P":{"d":"122,-183v0,-36,-20,-43,-56,-40r0,80v36,2,56,-4,56,-40xm166,-183v0,61,-35,81,-100,76r0,107r-44,0r0,-260v77,-2,144,-6,144,77","w":180,"k":{".":46,",":46}},"Q":{"d":"105,-39v-4,-8,-8,-11,-12,-14r0,-40v8,4,14,8,21,16r0,-119v-1,-19,-4,-29,-24,-29v-19,0,-23,10,-24,29r0,132v-4,26,20,35,39,25xm151,-30v8,7,11,10,21,11r0,38v-25,2,-35,-11,-46,-24v-46,23,-104,-2,-104,-58r0,-134v0,-43,26,-67,68,-67v43,0,68,24,68,67v0,55,8,123,-7,167","w":180},"R":{"d":"115,-183v0,-36,-15,-42,-49,-40r0,80v34,3,49,-7,49,-40xm160,-183v-2,33,-9,55,-31,65r37,118r-45,0r-32,-108r-23,1r0,107r-44,0r0,-260v76,-3,142,-3,138,77","w":180,"k":{"Y":6}},"S":{"d":"14,-199v-5,-72,105,-88,125,-27v3,8,5,16,6,25r-42,5v0,-17,-9,-29,-24,-29v-14,0,-22,10,-22,26v14,59,87,64,91,136v4,77,-115,88,-133,22v-3,-9,-5,-17,-5,-27r43,-7v1,22,8,40,26,40v15,0,28,-8,26,-24v-9,-65,-86,-65,-91,-140"},"T":{"d":"48,-221r-44,0r0,-39r131,0r0,39r-43,0r0,221r-44,0r0,-221","w":140,"k":{"y":13,"w":13,"u":13,"s":13,"r":13,"o":13,"i":13,"e":13,"c":13,"a":13,"A":6,";":20,":":20,".":20,"-":20,",":20}},"U":{"d":"90,4v-43,0,-69,-25,-68,-70r0,-194r44,0r0,196v0,19,8,29,24,29v16,0,24,-10,24,-29r0,-196r44,0r0,194v1,45,-25,70,-68,70","w":180},"V":{"d":"113,-260r44,0r-55,260r-44,0r-55,-260r44,0r33,180","k":{"A":13,".":13,",":13}},"W":{"d":"99,-260r37,0r31,166r25,-166r41,0r-45,260r-38,0r-33,-172r-30,172r-38,0r-49,-260r42,0r28,166","w":240,"k":{"A":13,".":6,",":6}},"X":{"d":"56,-136r-47,-124r44,0r28,83r24,-83r44,0r-45,124r51,136r-44,0r-31,-95r-31,95r-44,0"},"Y":{"d":"102,0r-44,0r0,-108r-54,-152r45,0r32,99r30,-99r45,0r-54,152r0,108","k":{"q":6,"o":6,"e":6,"a":6,"A":20,";":6,":":6,".":20,"-":13,",":20}},"Z":{"d":"26,-221r0,-39r118,0r0,43r-82,178r82,0r0,39r-128,0r0,-42r83,-179r-73,0"},"[":{"d":"90,-243r-42,0r0,253r42,0r0,17r-77,0r0,-287r77,0r0,17","w":100},"\\":{"d":"108,4r-36,0r-80,-268r36,0","w":100},"]":{"d":"10,-260r77,0r0,287r-77,0r0,-17r43,0r0,-253r-43,0r0,-17","w":100},"^":{"d":"20,-109r69,-151r38,0r69,151r-39,0r-49,-108r-49,108r-39,0","w":216},"_":{"d":"0,45r0,-18r180,0r0,18r-180,0","w":180},"a":{"d":"53,-47v0,30,40,15,45,-1r0,-50v-21,14,-45,21,-45,51xm78,-164v-18,0,-22,11,-23,27r-40,0v1,-39,26,-59,65,-60v92,-3,48,117,61,197r-38,0v0,-5,-2,-11,-3,-15v-24,28,-91,26,-88,-25v3,-56,44,-70,86,-88v1,-20,-3,-36,-20,-36"},"b":{"d":"102,-133v6,-32,-26,-38,-42,-21r0,114v14,17,49,12,42,-21r0,-72xm143,-50v7,58,-63,69,-85,30r0,20r-39,0r0,-260r41,0r0,83v24,-33,83,-24,83,34r0,93"},"c":{"d":"17,-68v-1,-66,-4,-129,63,-129v44,0,62,27,63,70r-41,0v1,-21,-3,-37,-22,-37v-38,1,-18,67,-22,103v-2,20,5,31,22,31v21,0,23,-20,22,-43r41,0v0,47,-17,77,-63,77v-45,0,-62,-28,-63,-72"},"d":{"d":"58,-61v-6,35,28,37,42,21r0,-114v-16,-15,-42,-15,-42,21r0,72xm17,-50v0,-68,-9,-182,72,-136r11,9r0,-83r40,0r0,260r-38,0r0,-20v-22,38,-85,29,-85,-30"},"e":{"d":"80,-164v-21,0,-23,19,-22,42r44,0v1,-22,-2,-42,-22,-42xm80,-197v59,0,66,48,63,108r-85,0v0,27,-5,60,22,59v18,-1,23,-15,22,-36r41,0v-1,43,-19,70,-63,70v-66,2,-65,-63,-63,-129v1,-44,17,-72,63,-72"},"f":{"d":"93,-230v-14,0,-25,-2,-25,13r0,23r23,0r0,33r-23,0r0,161r-41,0r0,-161r-23,0r0,-33r23,0v-5,-51,13,-77,66,-70r0,34","w":100},"g":{"d":"49,18v1,15,14,14,34,14v20,0,32,1,34,-14v-1,-15,-14,-14,-34,-14v-20,0,-32,-1,-34,14xm51,-123v0,22,1,40,20,40v20,0,20,-18,20,-40v0,-22,1,-41,-20,-41v-19,0,-20,19,-20,41xm76,-197v21,1,33,8,44,21v9,-11,13,-22,33,-21r0,33v-11,0,-20,1,-26,6v14,54,2,120,-69,108v-4,0,-9,5,-8,9v3,17,33,10,52,12v28,3,52,12,51,44v0,40,-38,46,-82,46v-33,-1,-63,-5,-65,-31v-1,-18,16,-25,27,-31v-26,-5,-21,-42,-2,-50v3,-2,5,-5,8,-6v-22,-12,-26,-33,-26,-69v0,-47,15,-73,63,-71"},"h":{"d":"100,-150v-1,-23,-31,-12,-40,-2r0,152r-41,0r0,-260r41,0r0,84v17,-26,80,-34,80,19r0,157r-40,0r0,-150"},"i":{"d":"20,-223r0,-37r40,0r0,37r-40,0xm20,0r0,-194r40,0r0,194r-40,0","w":79},"j":{"d":"22,-223r0,-37r40,0r0,37r-40,0xm62,11v0,38,-21,54,-62,50r0,-37v14,1,23,-3,22,-15r0,-202r40,0r0,204","w":79},"k":{"d":"106,-132r47,132r-41,0r-33,-96r-19,28r0,68r-41,0r0,-260r41,0r0,135r45,-69r43,0"},"l":{"d":"20,0r0,-260r40,0r0,260r-40,0","w":79},"m":{"d":"180,-150v-1,-23,-31,-12,-40,-2r0,152r-40,0r0,-150v-1,-23,-31,-12,-40,-2r0,152r-41,0r0,-194r39,0r0,20v15,-24,69,-35,80,0v17,-30,82,-34,82,17r0,157r-40,0r0,-150","w":240},"n":{"d":"100,-150v-1,-23,-31,-12,-40,-2r0,152r-41,0r0,-194r39,0r0,20v17,-28,82,-37,82,17r0,157r-40,0r0,-150"},"o":{"d":"80,-30v37,0,19,-66,22,-102v2,-19,-5,-32,-22,-32v-38,1,-18,67,-22,103v-2,20,5,31,22,31xm80,4v-66,2,-65,-63,-63,-129v1,-44,17,-72,63,-72v67,0,65,63,63,129v-1,44,-18,71,-63,72"},"p":{"d":"102,-133v6,-32,-26,-38,-42,-21r0,114v14,17,49,12,42,-21r0,-72xm143,-50v7,57,-58,67,-83,33r0,78r-41,0r0,-255r39,0r0,20v21,-38,85,-28,85,31r0,93"},"q":{"d":"58,-61v-6,35,28,37,42,21r0,-114v-16,-15,-42,-15,-42,21r0,72xm17,-143v-8,-58,63,-69,85,-31r0,-20r38,0r0,255r-40,0r0,-78v-25,32,-83,26,-83,-33r0,-93"},"r":{"d":"113,-155v-20,-8,-53,-6,-53,22r0,133r-41,0r0,-194r39,0v1,7,-2,18,1,23v10,-16,27,-28,54,-26r0,42","w":119,"k":{".":27,"-":20,",":27}},"s":{"d":"14,-145v-3,-48,61,-67,93,-38v10,10,17,22,20,37r-34,6v-1,-27,-37,-33,-41,-9v14,43,73,44,76,100v3,53,-67,66,-98,38v-10,-9,-17,-22,-20,-39r35,-10v2,16,9,31,27,30v11,0,18,-5,18,-16v-11,-45,-73,-45,-76,-99","w":140},"t":{"d":"93,1v-34,9,-67,-3,-67,-41r0,-121r-22,0r0,-33r22,0r0,-52r40,0r0,52r27,0r0,33r-27,0r0,112v-1,17,12,17,27,16r0,34","w":100},"u":{"d":"60,-44v1,23,31,12,40,2r0,-152r40,0r0,194r-38,0r0,-19v-19,27,-83,36,-83,-18r0,-157r41,0r0,150"},"v":{"d":"95,-194r41,0r-46,194r-40,0r-46,-194r41,0r25,130","w":140,"k":{".":20,",":20}},"w":{"d":"85,-193r30,0r22,120r22,-121r39,0r-45,194r-32,0r-23,-122r-26,122r-32,0r-38,-194r39,0r18,121","w":200,"k":{".":13,",":13}},"x":{"d":"48,-103r-40,-91r41,0r21,54r21,-54r42,0r-42,91r44,103r-41,0v-9,-21,-15,-46,-25,-66r-23,66r-42,0","w":140},"y":{"d":"14,28v36,6,40,-27,32,-57r-42,-165r41,0r26,124r25,-124r40,0r-50,208v-6,35,-29,50,-72,47r0,-33","w":140,"k":{".":20,",":20}},"z":{"d":"16,-161r0,-33r113,0r0,33r-75,128r75,0r0,33r-118,0r0,-33r74,-128r-69,0","w":140},"{":{"d":"58,31v-79,4,-5,-130,-58,-138r0,-20v52,-8,-21,-142,58,-137r39,0r0,18v-20,1,-42,-6,-42,18v0,45,9,103,-28,112v38,7,28,67,28,112v0,24,22,17,42,18r0,17r-39,0","w":100},"|":{"d":"22,-264r36,0r0,268r-36,0r0,-268","w":79},"}":{"d":"42,-264v79,-4,5,130,58,138r0,21v-52,8,20,141,-58,136r-39,0r0,-17v20,-1,42,6,42,-18v0,-46,-9,-103,28,-112v-38,-7,-28,-68,-28,-112v0,-24,-22,-17,-42,-18r0,-18r39,0","w":100},"~":{"d":"31,-102v42,-54,118,42,147,-19r16,31v-13,12,-23,30,-48,28v-38,-2,-87,-46,-108,0r-16,-31","w":216},"'":{"d":"23,-260r34,0r0,99r-34,0r0,-99","w":79},"`":{"d":"-12,-269r49,0r29,52r-30,0","w":79},"#":{"d":"69,-155r-6,50r29,0r6,-50r-29,0xm147,-77r-26,0r-9,77r-32,0r9,-77r-29,0r-9,77r-33,0r9,-77r-23,0r0,-28r27,0r5,-50r-23,0r0,-28r27,0r9,-77r32,0r-9,77r29,0r9,-77r32,0r-9,77r23,0r0,28r-26,0r-5,50r22,0r0,28"},"!":{"d":"29,0r0,-42r42,0r0,42r-42,0xm27,-260r46,0r-8,184r-30,0","w":100},"\"":{"d":"72,-260r33,0r0,99r-33,0r0,-99xm14,-260r34,0r0,99r-34,0r0,-99","w":119}}});

