if (!this.JSON) {
JSON = function () {
function f(n) { 
return n < 10 ? '0' + n : n;}
Date.prototype.toJSON = function () {
return this.getUTCFullYear() + '-' +
f(this.getUTCMonth() + 1) + '-' +
f(this.getUTCDate()) + 'T' +
f(this.getUTCHours()) + ':' +
f(this.getUTCMinutes()) + ':' +
f(this.getUTCSeconds()) + 'Z';};var m = { 
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'"' : '\\"',
'\\': '\\\\'
};function stringify(value, whitelist) {
var a, 
i, 
k, 
l, 
r = /["\\\x00-\x1f\x7f-\x9f]/g,
v;switch (typeof value) {
case 'string':
return r.test(value) ?
'"' + value.replace(r, function (a) {
var c = m[a];if (c) {
return c;}
c = a.charCodeAt();return '\\u00' + Math.floor(c / 16).toString(16) +
(c % 16).toString(16);}) + '"' :
'"' + value + '"';case 'number':
return isFinite(value) ? String(value) : 'null';case 'boolean':
case 'null':
return String(value);case 'object':
if (!value) {
return 'null';}
if (typeof value.toJSON === 'function') {
return stringify(value.toJSON());}
a = [];if (typeof value.length === 'number' &&
!(value.propertyIsEnumerable('length'))) {
l = value.length;for (i = 0;i < l;i += 1) {
a.push(stringify(value[i], whitelist) || 'null');}
return '[' + a.join(',') + ']';}
if (whitelist) {
l = whitelist.length;for (i = 0;i < l;i += 1) {
k = whitelist[i];if (typeof k === 'string') {
v = stringify(value[k], whitelist);if (v) {
a.push(stringify(k) + ':' + v);}
}
}
} else {
for (k in value) {
if (typeof k === 'string') {
v = stringify(value[k], whitelist);if (v) {
a.push(stringify(k) + ':' + v);}
}
}
}
return '{' + a.join(',') + '}';}
}
return {
stringify: stringify,
parse: function (text, filter) {
var j;function walk(k, v) {
var i, n;if (v && typeof v === 'object') {
for (i in v) {
if (Object.prototype.hasOwnProperty.apply(v, [i])) {
n = walk(i, v[i]);if (n !== undefined) {
v[i] = n;} else {
delete v[i];}
}
}
}
return filter(k, v);}
if (/^[\],:{}\s]*$/.test(text.replace(/\\./g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
j = eval('(' + text + ')');return typeof filter === 'function' ? walk('', j) : j;}
throw new SyntaxError('parseJSON');}
};}();}
