["^ ","~:resource-id",["~:shadow.build.classpath/resource","goog/debug/debug.js"],"~:js","goog.provide(\"goog.debug\");\ngoog.require(\"goog.array\");\ngoog.require(\"goog.debug.errorcontext\");\ngoog.debug.LOGGING_ENABLED = goog.define(\"goog.debug.LOGGING_ENABLED\", goog.DEBUG);\ngoog.debug.FORCE_SLOPPY_STACKS = goog.define(\"goog.debug.FORCE_SLOPPY_STACKS\", false);\ngoog.debug.CHECK_FOR_THROWN_EVENT = goog.define(\"goog.debug.CHECK_FOR_THROWN_EVENT\", false);\ngoog.debug.catchErrors = function(logFunc, opt_cancel, opt_target) {\n var target = opt_target || goog.global;\n var oldErrorHandler = target.onerror;\n var retVal = !!opt_cancel;\n target.onerror = function(message, url, line, opt_col, opt_error) {\n if (oldErrorHandler) {\n oldErrorHandler(message, url, line, opt_col, opt_error);\n }\n logFunc({message:message, fileName:url, line:line, lineNumber:line, col:opt_col, error:opt_error});\n return retVal;\n };\n};\ngoog.debug.expose = function(obj, opt_showFn) {\n if (typeof obj == \"undefined\") {\n return \"undefined\";\n }\n if (obj == null) {\n return \"NULL\";\n }\n var str = [];\n for (var x in obj) {\n if (!opt_showFn && typeof obj[x] === \"function\") {\n continue;\n }\n var s = x + \" \\x3d \";\n try {\n s += obj[x];\n } catch (e) {\n s += \"*** \" + e + \" ***\";\n }\n str.push(s);\n }\n return str.join(\"\\n\");\n};\ngoog.debug.deepExpose = function(obj, opt_showFn) {\n var str = [];\n var uidsToCleanup = [];\n var ancestorUids = {};\n var helper = function(obj, space) {\n var nestspace = space + \" \";\n var indentMultiline = function(str) {\n return str.replace(/\\n/g, \"\\n\" + space);\n };\n try {\n if (obj === undefined) {\n str.push(\"undefined\");\n } else if (obj === null) {\n str.push(\"NULL\");\n } else if (typeof obj === \"string\") {\n str.push('\"' + indentMultiline(obj) + '\"');\n } else if (typeof obj === \"function\") {\n str.push(indentMultiline(String(obj)));\n } else if (goog.isObject(obj)) {\n if (!goog.hasUid(obj)) {\n uidsToCleanup.push(obj);\n }\n var uid = goog.getUid(obj);\n if (ancestorUids[uid]) {\n str.push(\"*** reference loop detected (id\\x3d\" + uid + \") ***\");\n } else {\n ancestorUids[uid] = true;\n str.push(\"{\");\n for (var x in obj) {\n if (!opt_showFn && typeof obj[x] === \"function\") {\n continue;\n }\n str.push(\"\\n\");\n str.push(nestspace);\n str.push(x + \" \\x3d \");\n helper(obj[x], nestspace);\n }\n str.push(\"\\n\" + space + \"}\");\n delete ancestorUids[uid];\n }\n } else {\n str.push(obj);\n }\n } catch (e) {\n str.push(\"*** \" + e + \" ***\");\n }\n };\n helper(obj, \"\");\n for (var i = 0; i < uidsToCleanup.length; i++) {\n goog.removeUid(uidsToCleanup[i]);\n }\n return str.join(\"\");\n};\ngoog.debug.exposeArray = function(arr) {\n var str = [];\n for (var i = 0; i < arr.length; i++) {\n if (Array.isArray(arr[i])) {\n str.push(goog.debug.exposeArray(arr[i]));\n } else {\n str.push(arr[i]);\n }\n }\n return \"[ \" + str.join(\", \") + \" ]\";\n};\ngoog.debug.normalizeErrorObject = function(err) {\n var href = goog.getObjectByName(\"window.location.href\");\n if (err == null) {\n err = 'Unknown Error of type \"null/undefined\"';\n }\n if (typeof err === \"string\") {\n return {\"message\":err, \"name\":\"Unknown error\", \"lineNumber\":\"Not available\", \"fileName\":href, \"stack\":\"Not available\"};\n }\n var lineNumber, fileName;\n var threwError = false;\n try {\n lineNumber = err.lineNumber || err.line || \"Not available\";\n } catch (e) {\n lineNumber = \"Not available\";\n threwError = true;\n }\n try {\n fileName = err.fileName || err.filename || err.sourceURL || goog.global[\"$googDebugFname\"] || href;\n } catch (e) {\n fileName = \"Not available\";\n threwError = true;\n }\n var stack = goog.debug.serializeErrorStack_(err);\n if (threwError || !err.lineNumber || !err.fileName || !err.stack || !err.message || !err.name) {\n var message = err.message;\n if (message == null) {\n if (err.constructor && err.constructor instanceof Function) {\n var ctorName = err.constructor.name ? err.constructor.name : goog.debug.getFunctionName(err.constructor);\n message = 'Unknown Error of type \"' + ctorName + '\"';\n if (goog.debug.CHECK_FOR_THROWN_EVENT && ctorName == \"Event\") {\n try {\n message = message + ' with Event.type \"' + (err.type || \"\") + '\"';\n } catch (e) {\n }\n }\n } else {\n message = \"Unknown Error of unknown type\";\n }\n if (typeof err.toString === \"function\" && Object.prototype.toString !== err.toString) {\n message += \": \" + err.toString();\n }\n }\n return {\"message\":message, \"name\":err.name || \"UnknownError\", \"lineNumber\":lineNumber, \"fileName\":fileName, \"stack\":stack || \"Not available\"};\n }\n err.stack = stack;\n return {\"message\":err.message, \"name\":err.name, \"lineNumber\":err.lineNumber, \"fileName\":err.fileName, \"stack\":err.stack};\n};\ngoog.debug.serializeErrorStack_ = function(e, seen) {\n if (!seen) {\n seen = {};\n }\n seen[goog.debug.serializeErrorAsKey_(e)] = true;\n var stack = e[\"stack\"] || \"\";\n var cause = e.cause;\n if (cause && !seen[goog.debug.serializeErrorAsKey_(cause)]) {\n stack += \"\\nCaused by: \";\n if (!cause.stack || cause.stack.indexOf(cause.toString()) != 0) {\n stack += typeof cause === \"string\" ? cause : cause.message + \"\\n\";\n }\n stack += goog.debug.serializeErrorStack_(cause, seen);\n }\n return stack;\n};\ngoog.debug.serializeErrorAsKey_ = function(e) {\n var keyPrefix = \"\";\n if (typeof e.toString === \"function\") {\n keyPrefix = \"\" + e;\n }\n return keyPrefix + e[\"stack\"];\n};\ngoog.debug.enhanceError = function(err, opt_message) {\n var error;\n if (!(err instanceof Error)) {\n error = Error(err);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(error, goog.debug.enhanceError);\n }\n } else {\n error = err;\n }\n if (!error.stack) {\n error.stack = goog.debug.getStacktrace(goog.debug.enhanceError);\n }\n if (opt_message) {\n var x = 0;\n while (error[\"message\" + x]) {\n ++x;\n }\n error[\"message\" + x] = String(opt_message);\n }\n return error;\n};\ngoog.debug.enhanceErrorWithContext = function(err, opt_context) {\n var error = goog.debug.enhanceError(err);\n if (opt_context) {\n for (var key in opt_context) {\n goog.debug.errorcontext.addErrorContext(error, key, opt_context[key]);\n }\n }\n return error;\n};\ngoog.debug.getStacktraceSimple = function(opt_depth) {\n if (!goog.debug.FORCE_SLOPPY_STACKS) {\n var stack = goog.debug.getNativeStackTrace_(goog.debug.getStacktraceSimple);\n if (stack) {\n return stack;\n }\n }\n var sb = [];\n var fn = arguments.callee.caller;\n var depth = 0;\n while (fn && (!opt_depth || depth < opt_depth)) {\n sb.push(goog.debug.getFunctionName(fn));\n sb.push(\"()\\n\");\n try {\n fn = fn.caller;\n } catch (e) {\n sb.push(\"[exception trying to get caller]\\n\");\n break;\n }\n depth++;\n if (depth >= goog.debug.MAX_STACK_DEPTH) {\n sb.push(\"[...long stack...]\");\n break;\n }\n }\n if (opt_depth && depth >= opt_depth) {\n sb.push(\"[...reached max depth limit...]\");\n } else {\n sb.push(\"[end]\");\n }\n return sb.join(\"\");\n};\ngoog.debug.MAX_STACK_DEPTH = 50;\ngoog.debug.getNativeStackTrace_ = function(fn) {\n var tempErr = new Error();\n if (Error.captureStackTrace) {\n Error.captureStackTrace(tempErr, fn);\n return String(tempErr.stack);\n } else {\n try {\n throw tempErr;\n } catch (e) {\n tempErr = e;\n }\n var stack = tempErr.stack;\n if (stack) {\n return String(stack);\n }\n }\n return null;\n};\ngoog.debug.getStacktrace = function(fn) {\n var stack;\n if (!goog.debug.FORCE_SLOPPY_STACKS) {\n var contextFn = fn || goog.debug.getStacktrace;\n stack = goog.debug.getNativeStackTrace_(contextFn);\n }\n if (!stack) {\n stack = goog.debug.getStacktraceHelper_(fn || arguments.callee.caller, []);\n }\n return stack;\n};\ngoog.debug.getStacktraceHelper_ = function(fn, visited) {\n var sb = [];\n if (goog.array.contains(visited, fn)) {\n sb.push(\"[...circular reference...]\");\n } else if (fn && visited.length < goog.debug.MAX_STACK_DEPTH) {\n sb.push(goog.debug.getFunctionName(fn) + \"(\");\n var args = fn.arguments;\n for (var i = 0; args && i < args.length; i++) {\n if (i > 0) {\n sb.push(\", \");\n }\n var argDesc;\n var arg = args[i];\n switch(typeof arg) {\n case \"object\":\n argDesc = arg ? \"object\" : \"null\";\n break;\n case \"string\":\n argDesc = arg;\n break;\n case \"number\":\n argDesc = String(arg);\n break;\n case \"boolean\":\n argDesc = arg ? \"true\" : \"false\";\n break;\n case \"function\":\n argDesc = goog.debug.getFunctionName(arg);\n argDesc = argDesc ? argDesc : \"[fn]\";\n break;\n case \"undefined\":\n default:\n argDesc = typeof arg;\n break;\n }\n if (argDesc.length > 40) {\n argDesc = argDesc.slice(0, 40) + \"...\";\n }\n sb.push(argDesc);\n }\n visited.push(fn);\n sb.push(\")\\n\");\n try {\n sb.push(goog.debug.getStacktraceHelper_(fn.caller, visited));\n } catch (e) {\n sb.push(\"[exception trying to get caller]\\n\");\n }\n } else if (fn) {\n sb.push(\"[...long stack...]\");\n } else {\n sb.push(\"[end]\");\n }\n return sb.join(\"\");\n};\ngoog.debug.getFunctionName = function(fn) {\n if (goog.debug.fnNameCache_[fn]) {\n return goog.debug.fnNameCache_[fn];\n }\n var functionSource = String(fn);\n if (!goog.debug.fnNameCache_[functionSource]) {\n var matches = /function\\s+([^\\(]+)/m.exec(functionSource);\n if (matches) {\n var method = matches[1];\n goog.debug.fnNameCache_[functionSource] = method;\n } else {\n goog.debug.fnNameCache_[functionSource] = \"[Anonymous]\";\n }\n }\n return goog.debug.fnNameCache_[functionSource];\n};\ngoog.debug.makeWhitespaceVisible = function(string) {\n return string.replace(/ /g, \"[_]\").replace(/\\f/g, \"[f]\").replace(/\\n/g, \"[n]\\n\").replace(/\\r/g, \"[r]\").replace(/\\t/g, \"[t]\");\n};\ngoog.debug.runtimeType = function(value) {\n if (value instanceof Function) {\n return value.displayName || value.name || \"unknown type name\";\n } else if (value instanceof Object) {\n return value.constructor.displayName || value.constructor.name || Object.prototype.toString.call(value);\n } else {\n return value === null ? \"null\" : typeof value;\n }\n};\ngoog.debug.fnNameCache_ = {};\ngoog.debug.freezeInternal_ = goog.DEBUG && Object.freeze || function(arg) {\n return arg;\n};\ngoog.debug.freeze = function(arg) {\n return {valueOf:function() {\n return goog.debug.freezeInternal_(arg);\n }}.valueOf();\n};\n","~:source","/**\n * @license\n * Copyright The Closure Library Authors.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Logging and debugging utilities.\n *\n * @see ../demos/debug.html\n */\n\ngoog.provide('goog.debug');\n\ngoog.require('goog.array');\ngoog.require('goog.debug.errorcontext');\n\n\n/** @define {boolean} Whether logging should be enabled. */\ngoog.debug.LOGGING_ENABLED =\n goog.define('goog.debug.LOGGING_ENABLED', goog.DEBUG);\n\n\n/** @define {boolean} Whether to force \"sloppy\" stack building. */\ngoog.debug.FORCE_SLOPPY_STACKS =\n goog.define('goog.debug.FORCE_SLOPPY_STACKS', false);\n\n\n/**\n * @define {boolean} TODO(user): Remove this hack once bug is resolved.\n */\ngoog.debug.CHECK_FOR_THROWN_EVENT =\n goog.define('goog.debug.CHECK_FOR_THROWN_EVENT', false);\n\n\n\n/**\n * Catches onerror events fired by windows and similar objects.\n * @param {function(Object)} logFunc The function to call with the error\n * information.\n * @param {boolean=} opt_cancel Whether to stop the error from reaching the\n * browser.\n * @param {Object=} opt_target Object that fires onerror events.\n * @suppress {strictMissingProperties} onerror is not defined as a property\n * on Object.\n */\ngoog.debug.catchErrors = function(logFunc, opt_cancel, opt_target) {\n 'use strict';\n var target = opt_target || goog.global;\n var oldErrorHandler = target.onerror;\n var retVal = !!opt_cancel;\n\n /**\n * New onerror handler for this target. This onerror handler follows the spec\n * according to\n * http://www.whatwg.org/specs/web-apps/current-work/#runtime-script-errors\n * The spec was changed in August 2013 to support receiving column information\n * and an error object for all scripts on the same origin or cross origin\n * scripts with the proper headers. See\n * https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n *\n * @param {string} message The error message. For cross-origin errors, this\n * will be scrubbed to just \"Script error.\". For new browsers that have\n * updated to follow the latest spec, errors that come from origins that\n * have proper cross origin headers will not be scrubbed.\n * @param {string} url The URL of the script that caused the error. The URL\n * will be scrubbed to \"\" for cross origin scripts unless the script has\n * proper cross origin headers and the browser has updated to the latest\n * spec.\n * @param {number} line The line number in the script that the error\n * occurred on.\n * @param {number=} opt_col The optional column number that the error\n * occurred on. Only browsers that have updated to the latest spec will\n * include this.\n * @param {Error=} opt_error The optional actual error object for this\n * error that should include the stack. Only browsers that have updated\n * to the latest spec will inlude this parameter.\n * @return {boolean} Whether to prevent the error from reaching the browser.\n */\n target.onerror = function(message, url, line, opt_col, opt_error) {\n 'use strict';\n if (oldErrorHandler) {\n oldErrorHandler(message, url, line, opt_col, opt_error);\n }\n logFunc({\n message: message,\n fileName: url,\n line: line,\n lineNumber: line,\n col: opt_col,\n error: opt_error\n });\n return retVal;\n };\n};\n\n\n/**\n * Creates a string representing an object and all its properties.\n * @param {Object|null|undefined} obj Object to expose.\n * @param {boolean=} opt_showFn Show the functions as well as the properties,\n * default is false.\n * @return {string} The string representation of `obj`.\n */\ngoog.debug.expose = function(obj, opt_showFn) {\n 'use strict';\n if (typeof obj == 'undefined') {\n return 'undefined';\n }\n if (obj == null) {\n return 'NULL';\n }\n var str = [];\n\n for (var x in obj) {\n if (!opt_showFn && typeof obj[x] === 'function') {\n continue;\n }\n var s = x + ' = ';\n\n try {\n s += obj[x];\n } catch (e) {\n s += '*** ' + e + ' ***';\n }\n str.push(s);\n }\n return str.join('\\n');\n};\n\n\n/**\n * Creates a string representing a given primitive or object, and for an\n * object, all its properties and nested objects. NOTE: The output will include\n * Uids on all objects that were exposed. Any added Uids will be removed before\n * returning.\n * @param {*} obj Object to expose.\n * @param {boolean=} opt_showFn Also show properties that are functions (by\n * default, functions are omitted).\n * @return {string} A string representation of `obj`.\n */\ngoog.debug.deepExpose = function(obj, opt_showFn) {\n 'use strict';\n var str = [];\n\n // Track any objects where deepExpose added a Uid, so they can be cleaned up\n // before return. We do this globally, rather than only on ancestors so that\n // if the same object appears in the output, you can see it.\n var uidsToCleanup = [];\n var ancestorUids = {};\n\n var helper = function(obj, space) {\n 'use strict';\n var nestspace = space + ' ';\n\n var indentMultiline = function(str) {\n 'use strict';\n return str.replace(/\\n/g, '\\n' + space);\n };\n\n\n try {\n if (obj === undefined) {\n str.push('undefined');\n } else if (obj === null) {\n str.push('NULL');\n } else if (typeof obj === 'string') {\n str.push('\"' + indentMultiline(obj) + '\"');\n } else if (typeof obj === 'function') {\n str.push(indentMultiline(String(obj)));\n } else if (goog.isObject(obj)) {\n // Add a Uid if needed. The struct calls implicitly adds them.\n if (!goog.hasUid(obj)) {\n uidsToCleanup.push(obj);\n }\n var uid = goog.getUid(obj);\n if (ancestorUids[uid]) {\n str.push('*** reference loop detected (id=' + uid + ') ***');\n } else {\n ancestorUids[uid] = true;\n str.push('{');\n for (var x in obj) {\n if (!opt_showFn && typeof obj[x] === 'function') {\n continue;\n }\n str.push('\\n');\n str.push(nestspace);\n str.push(x + ' = ');\n helper(obj[x], nestspace);\n }\n str.push('\\n' + space + '}');\n delete ancestorUids[uid];\n }\n } else {\n str.push(obj);\n }\n } catch (e) {\n str.push('*** ' + e + ' ***');\n }\n };\n\n helper(obj, '');\n\n // Cleanup any Uids that were added by the deepExpose.\n for (var i = 0; i < uidsToCleanup.length; i++) {\n goog.removeUid(uidsToCleanup[i]);\n }\n\n return str.join('');\n};\n\n\n/**\n * Recursively outputs a nested array as a string.\n * @param {Array} arr The array.\n * @return {string} String representing nested array.\n */\ngoog.debug.exposeArray = function(arr) {\n 'use strict';\n var str = [];\n for (var i = 0; i < arr.length; i++) {\n if (Array.isArray(arr[i])) {\n str.push(goog.debug.exposeArray(arr[i]));\n } else {\n str.push(arr[i]);\n }\n }\n return '[ ' + str.join(', ') + ' ]';\n};\n\n\n/**\n * Normalizes the error/exception object between browsers.\n * @param {*} err Raw error object.\n * @return {{\n * message: (?|undefined),\n * name: (?|undefined),\n * lineNumber: (?|undefined),\n * fileName: (?|undefined),\n * stack: (?|undefined)\n * }} Representation of err as an Object. It will never return err.\n * @suppress {strictMissingProperties} properties not defined on err\n */\ngoog.debug.normalizeErrorObject = function(err) {\n 'use strict';\n var href = goog.getObjectByName('window.location.href');\n if (err == null) {\n err = 'Unknown Error of type \"null/undefined\"';\n }\n if (typeof err === 'string') {\n return {\n 'message': err,\n 'name': 'Unknown error',\n 'lineNumber': 'Not available',\n 'fileName': href,\n 'stack': 'Not available'\n };\n }\n\n var lineNumber, fileName;\n var threwError = false;\n\n try {\n lineNumber = err.lineNumber || err.line || 'Not available';\n } catch (e) {\n // Firefox 2 sometimes throws an error when accessing 'lineNumber':\n // Message: Permission denied to get property UnnamedClass.lineNumber\n lineNumber = 'Not available';\n threwError = true;\n }\n\n try {\n fileName = err.fileName || err.filename || err.sourceURL ||\n // $googDebugFname may be set before a call to eval to set the filename\n // that the eval is supposed to present.\n goog.global['$googDebugFname'] || href;\n } catch (e) {\n // Firefox 2 may also throw an error when accessing 'filename'.\n fileName = 'Not available';\n threwError = true;\n }\n\n var stack = goog.debug.serializeErrorStack_(err);\n\n // The IE Error object contains only the name and the message.\n // The Safari Error object uses the line and sourceURL fields.\n if (threwError || !err.lineNumber || !err.fileName || !err.stack ||\n !err.message || !err.name) {\n var message = err.message;\n if (message == null) {\n if (err.constructor && err.constructor instanceof Function) {\n var ctorName = err.constructor.name ?\n err.constructor.name :\n goog.debug.getFunctionName(err.constructor);\n message = 'Unknown Error of type \"' + ctorName + '\"';\n // TODO(user): Remove this hack once bug is resolved.\n if (goog.debug.CHECK_FOR_THROWN_EVENT && ctorName == 'Event') {\n try {\n message = message + ' with Event.type \"' + (err.type || '') + '\"';\n } catch (e) {\n // Just give up on getting more information out of the error object.\n }\n }\n } else {\n message = 'Unknown Error of unknown type';\n }\n\n // Avoid TypeError since toString could be missing from the instance\n // (e.g. if created Object.create(null)).\n if (typeof err.toString === 'function' &&\n Object.prototype.toString !== err.toString) {\n message += ': ' + err.toString();\n }\n }\n return {\n 'message': message,\n 'name': err.name || 'UnknownError',\n 'lineNumber': lineNumber,\n 'fileName': fileName,\n 'stack': stack || 'Not available'\n };\n }\n // Standards error object\n // Typed !Object. Should be a subtype of the return type, but it's not.\n err.stack = stack;\n\n // Return non-standard error to allow for consistent result (eg. enumerable).\n return {\n 'message': err.message,\n 'name': err.name,\n 'lineNumber': err.lineNumber,\n 'fileName': err.fileName,\n 'stack': err.stack\n };\n};\n\n\n/**\n * Serialize stack by including the cause chain of the exception if it exists.\n *\n *\n * @param {*} e an exception that may have a cause\n * @param {!Object=} seen set of cause that have already been serialized\n * @return {string}\n * @private\n * @suppress {missingProperties} properties not defined on cause and e\n */\ngoog.debug.serializeErrorStack_ = function(e, seen) {\n 'use strict';\n if (!seen) {\n seen = {};\n }\n seen[goog.debug.serializeErrorAsKey_(e)] = true;\n\n var stack = e['stack'] || '';\n\n // Add cause if exists.\n var cause = e.cause;\n if (cause && !seen[goog.debug.serializeErrorAsKey_(cause)]) {\n stack += '\\nCaused by: ';\n // Some browsers like Chrome add the error message as the first frame of the\n // stack, In this case we don't need to add it. Note: we don't use\n // String.startsWith method because it might have to be polyfilled.\n if (!cause.stack || cause.stack.indexOf(cause.toString()) != 0) {\n stack += (typeof cause === 'string') ? cause : cause.message + '\\n';\n }\n stack += goog.debug.serializeErrorStack_(cause, seen);\n }\n\n return stack;\n};\n\n/**\n * Serialize an error to a string key.\n * @param {*} e an exception\n * @return {string}\n * @private\n */\ngoog.debug.serializeErrorAsKey_ = function(e) {\n 'use strict';\n var keyPrefix = '';\n\n if (typeof e.toString === 'function') {\n keyPrefix = '' + e;\n }\n\n return keyPrefix + e['stack'];\n};\n\n\n/**\n * Converts an object to an Error using the object's toString if it's not\n * already an Error, adds a stacktrace if there isn't one, and optionally adds\n * an extra message.\n * @param {*} err The original thrown error, object, or string.\n * @param {string=} opt_message optional additional message to add to the\n * error.\n * @return {!Error} If err is an Error, it is enhanced and returned. Otherwise,\n * it is converted to an Error which is enhanced and returned.\n */\ngoog.debug.enhanceError = function(err, opt_message) {\n 'use strict';\n var error;\n if (!(err instanceof Error)) {\n error = Error(err);\n if (Error.captureStackTrace) {\n // Trim this function off the call stack, if we can.\n Error.captureStackTrace(error, goog.debug.enhanceError);\n }\n } else {\n error = err;\n }\n\n if (!error.stack) {\n error.stack = goog.debug.getStacktrace(goog.debug.enhanceError);\n }\n if (opt_message) {\n // find the first unoccupied 'messageX' property\n var x = 0;\n while (error['message' + x]) {\n ++x;\n }\n error['message' + x] = String(opt_message);\n }\n return error;\n};\n\n\n/**\n * Converts an object to an Error using the object's toString if it's not\n * already an Error, adds a stacktrace if there isn't one, and optionally adds\n * context to the Error, which is reported by the closure error reporter.\n * @param {*} err The original thrown error, object, or string.\n * @param {!Object=} opt_context Key-value context to add to the\n * Error.\n * @return {!Error} If err is an Error, it is enhanced and returned. Otherwise,\n * it is converted to an Error which is enhanced and returned.\n */\ngoog.debug.enhanceErrorWithContext = function(err, opt_context) {\n 'use strict';\n var error = goog.debug.enhanceError(err);\n if (opt_context) {\n for (var key in opt_context) {\n goog.debug.errorcontext.addErrorContext(error, key, opt_context[key]);\n }\n }\n return error;\n};\n\n\n/**\n * Gets the current stack trace. Simple and iterative - doesn't worry about\n * catching circular references or getting the args.\n * @param {number=} opt_depth Optional maximum depth to trace back to.\n * @return {string} A string with the function names of all functions in the\n * stack, separated by \\n.\n * @suppress {es5Strict}\n */\ngoog.debug.getStacktraceSimple = function(opt_depth) {\n 'use strict';\n if (!goog.debug.FORCE_SLOPPY_STACKS) {\n var stack = goog.debug.getNativeStackTrace_(goog.debug.getStacktraceSimple);\n if (stack) {\n return stack;\n }\n // NOTE: browsers that have strict mode support also have native \"stack\"\n // properties. Fall-through for legacy browser support.\n }\n\n var sb = [];\n var fn = arguments.callee.caller;\n var depth = 0;\n\n while (fn && (!opt_depth || depth < opt_depth)) {\n sb.push(goog.debug.getFunctionName(fn));\n sb.push('()\\n');\n\n try {\n fn = fn.caller;\n } catch (e) {\n sb.push('[exception trying to get caller]\\n');\n break;\n }\n depth++;\n if (depth >= goog.debug.MAX_STACK_DEPTH) {\n sb.push('[...long stack...]');\n break;\n }\n }\n if (opt_depth && depth >= opt_depth) {\n sb.push('[...reached max depth limit...]');\n } else {\n sb.push('[end]');\n }\n\n return sb.join('');\n};\n\n\n/**\n * Max length of stack to try and output\n * @type {number}\n */\ngoog.debug.MAX_STACK_DEPTH = 50;\n\n\n/**\n * @param {Function} fn The function to start getting the trace from.\n * @return {?string}\n * @private\n */\ngoog.debug.getNativeStackTrace_ = function(fn) {\n 'use strict';\n var tempErr = new Error();\n if (Error.captureStackTrace) {\n Error.captureStackTrace(tempErr, fn);\n return String(tempErr.stack);\n } else {\n // IE10, only adds stack traces when an exception is thrown.\n try {\n throw tempErr;\n } catch (e) {\n tempErr = e;\n }\n var stack = tempErr.stack;\n if (stack) {\n return String(stack);\n }\n }\n return null;\n};\n\n\n/**\n * Gets the current stack trace, either starting from the caller or starting\n * from a specified function that's currently on the call stack.\n * @param {?Function=} fn If provided, when collecting the stack trace all\n * frames above the topmost call to this function, including that call,\n * will be left out of the stack trace.\n * @return {string} Stack trace.\n * @suppress {es5Strict}\n */\ngoog.debug.getStacktrace = function(fn) {\n 'use strict';\n var stack;\n if (!goog.debug.FORCE_SLOPPY_STACKS) {\n // Try to get the stack trace from the environment if it is available.\n var contextFn = fn || goog.debug.getStacktrace;\n stack = goog.debug.getNativeStackTrace_(contextFn);\n }\n if (!stack) {\n // NOTE: browsers that have strict mode support also have native \"stack\"\n // properties. This function will throw in strict mode.\n stack = goog.debug.getStacktraceHelper_(fn || arguments.callee.caller, []);\n }\n return stack;\n};\n\n\n/**\n * Private helper for getStacktrace().\n * @param {?Function} fn If provided, when collecting the stack trace all\n * frames above the topmost call to this function, including that call,\n * will be left out of the stack trace.\n * @param {Array} visited List of functions visited so far.\n * @return {string} Stack trace starting from function fn.\n * @suppress {es5Strict}\n * @private\n */\ngoog.debug.getStacktraceHelper_ = function(fn, visited) {\n 'use strict';\n var sb = [];\n\n // Circular reference, certain functions like bind seem to cause a recursive\n // loop so we need to catch circular references\n if (goog.array.contains(visited, fn)) {\n sb.push('[...circular reference...]');\n\n // Traverse the call stack until function not found or max depth is reached\n } else if (fn && visited.length < goog.debug.MAX_STACK_DEPTH) {\n sb.push(goog.debug.getFunctionName(fn) + '(');\n var args = fn.arguments;\n // Args may be null for some special functions such as host objects or eval.\n for (var i = 0; args && i < args.length; i++) {\n if (i > 0) {\n sb.push(', ');\n }\n var argDesc;\n var arg = args[i];\n switch (typeof arg) {\n case 'object':\n argDesc = arg ? 'object' : 'null';\n break;\n\n case 'string':\n argDesc = arg;\n break;\n\n case 'number':\n argDesc = String(arg);\n break;\n\n case 'boolean':\n argDesc = arg ? 'true' : 'false';\n break;\n\n case 'function':\n argDesc = goog.debug.getFunctionName(arg);\n argDesc = argDesc ? argDesc : '[fn]';\n break;\n\n case 'undefined':\n default:\n argDesc = typeof arg;\n break;\n }\n\n if (argDesc.length > 40) {\n argDesc = argDesc.slice(0, 40) + '...';\n }\n sb.push(argDesc);\n }\n visited.push(fn);\n sb.push(')\\n');\n\n try {\n sb.push(goog.debug.getStacktraceHelper_(fn.caller, visited));\n } catch (e) {\n sb.push('[exception trying to get caller]\\n');\n }\n\n } else if (fn) {\n sb.push('[...long stack...]');\n } else {\n sb.push('[end]');\n }\n return sb.join('');\n};\n\n\n/**\n * Gets a function name\n * @param {Function} fn Function to get name of.\n * @return {string} Function's name.\n */\ngoog.debug.getFunctionName = function(fn) {\n 'use strict';\n if (goog.debug.fnNameCache_[fn]) {\n return goog.debug.fnNameCache_[fn];\n }\n\n // Heuristically determine function name based on code.\n var functionSource = String(fn);\n if (!goog.debug.fnNameCache_[functionSource]) {\n var matches = /function\\s+([^\\(]+)/m.exec(functionSource);\n if (matches) {\n var method = matches[1];\n goog.debug.fnNameCache_[functionSource] = method;\n } else {\n goog.debug.fnNameCache_[functionSource] = '[Anonymous]';\n }\n }\n\n return goog.debug.fnNameCache_[functionSource];\n};\n\n\n/**\n * Makes whitespace visible by replacing it with printable characters.\n * This is useful in finding diffrences between the expected and the actual\n * output strings of a testcase.\n * @param {string} string whose whitespace needs to be made visible.\n * @return {string} string whose whitespace is made visible.\n */\ngoog.debug.makeWhitespaceVisible = function(string) {\n 'use strict';\n return string.replace(/ /g, '[_]')\n .replace(/\\f/g, '[f]')\n .replace(/\\n/g, '[n]\\n')\n .replace(/\\r/g, '[r]')\n .replace(/\\t/g, '[t]');\n};\n\n\n/**\n * Returns the type of a value. If a constructor is passed, and a suitable\n * string cannot be found, 'unknown type name' will be returned.\n *\n *

Forked rather than moved from {@link goog.asserts.getType_}\n * to avoid adding a dependency to goog.asserts.\n * @param {*} value A constructor, object, or primitive.\n * @return {string} The best display name for the value, or 'unknown type name'.\n */\ngoog.debug.runtimeType = function(value) {\n 'use strict';\n if (value instanceof Function) {\n return value.displayName || value.name || 'unknown type name';\n } else if (value instanceof Object) {\n return /** @type {string} */ (value.constructor.displayName) ||\n value.constructor.name || Object.prototype.toString.call(value);\n } else {\n return value === null ? 'null' : typeof value;\n }\n};\n\n\n/**\n * Hash map for storing function names that have already been looked up.\n * @type {Object}\n * @private\n */\ngoog.debug.fnNameCache_ = {};\n\n\n/**\n * Private internal function to support goog.debug.freeze.\n * @param {T} arg\n * @return {T}\n * @template T\n * @private\n */\ngoog.debug.freezeInternal_ = goog.DEBUG && Object.freeze || function(arg) {\n 'use strict';\n return arg;\n};\n\n\n/**\n * Freezes the given object, but only in debug mode (and in browsers that\n * support it). Note that this is a shallow freeze, so for deeply nested\n * objects it must be called at every level to ensure deep immutability.\n * @param {T} arg\n * @return {T}\n * @template T\n */\ngoog.debug.freeze = function(arg) {\n 'use strict';\n // NOTE: this compiles to nothing, but hides the possible side effect of\n // freezeInternal_ from the compiler so that the entire call can be\n // removed if the result is not used.\n return {\n valueOf: function() {\n 'use strict';\n return goog.debug.freezeInternal_(arg);\n }\n }.valueOf();\n};\n","~:compiled-at",1684858198009,"~:source-map-json","{\n\"version\":3,\n\"file\":\"goog.debug.debug.js\",\n\"lineCount\":359,\n\"mappings\":\"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\",\n\"sources\":[\"goog/debug/debug.js\"],\n\"sourcesContent\":[\"/**\\n * @license\\n * Copyright The Closure Library Authors.\\n * SPDX-License-Identifier: Apache-2.0\\n */\\n\\n/**\\n * @fileoverview Logging and debugging utilities.\\n *\\n * @see ../demos/debug.html\\n */\\n\\ngoog.provide('goog.debug');\\n\\ngoog.require('goog.array');\\ngoog.require('goog.debug.errorcontext');\\n\\n\\n/** @define {boolean} Whether logging should be enabled. */\\ngoog.debug.LOGGING_ENABLED =\\n goog.define('goog.debug.LOGGING_ENABLED', goog.DEBUG);\\n\\n\\n/** @define {boolean} Whether to force \\\"sloppy\\\" stack building. */\\ngoog.debug.FORCE_SLOPPY_STACKS =\\n goog.define('goog.debug.FORCE_SLOPPY_STACKS', false);\\n\\n\\n/**\\n * @define {boolean} TODO(user): Remove this hack once bug is resolved.\\n */\\ngoog.debug.CHECK_FOR_THROWN_EVENT =\\n goog.define('goog.debug.CHECK_FOR_THROWN_EVENT', false);\\n\\n\\n\\n/**\\n * Catches onerror events fired by windows and similar objects.\\n * @param {function(Object)} logFunc The function to call with the error\\n * information.\\n * @param {boolean=} opt_cancel Whether to stop the error from reaching the\\n * browser.\\n * @param {Object=} opt_target Object that fires onerror events.\\n * @suppress {strictMissingProperties} onerror is not defined as a property\\n * on Object.\\n */\\ngoog.debug.catchErrors = function(logFunc, opt_cancel, opt_target) {\\n 'use strict';\\n var target = opt_target || goog.global;\\n var oldErrorHandler = target.onerror;\\n var retVal = !!opt_cancel;\\n\\n /**\\n * New onerror handler for this target. This onerror handler follows the spec\\n * according to\\n * http://www.whatwg.org/specs/web-apps/current-work/#runtime-script-errors\\n * The spec was changed in August 2013 to support receiving column information\\n * and an error object for all scripts on the same origin or cross origin\\n * scripts with the proper headers. See\\n * https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\\n *\\n * @param {string} message The error message. For cross-origin errors, this\\n * will be scrubbed to just \\\"Script error.\\\". For new browsers that have\\n * updated to follow the latest spec, errors that come from origins that\\n * have proper cross origin headers will not be scrubbed.\\n * @param {string} url The URL of the script that caused the error. The URL\\n * will be scrubbed to \\\"\\\" for cross origin scripts unless the script has\\n * proper cross origin headers and the browser has updated to the latest\\n * spec.\\n * @param {number} line The line number in the script that the error\\n * occurred on.\\n * @param {number=} opt_col The optional column number that the error\\n * occurred on. Only browsers that have updated to the latest spec will\\n * include this.\\n * @param {Error=} opt_error The optional actual error object for this\\n * error that should include the stack. Only browsers that have updated\\n * to the latest spec will inlude this parameter.\\n * @return {boolean} Whether to prevent the error from reaching the browser.\\n */\\n target.onerror = function(message, url, line, opt_col, opt_error) {\\n 'use strict';\\n if (oldErrorHandler) {\\n oldErrorHandler(message, url, line, opt_col, opt_error);\\n }\\n logFunc({\\n message: message,\\n fileName: url,\\n line: line,\\n lineNumber: line,\\n col: opt_col,\\n error: opt_error\\n });\\n return retVal;\\n };\\n};\\n\\n\\n/**\\n * Creates a string representing an object and all its properties.\\n * @param {Object|null|undefined} obj Object to expose.\\n * @param {boolean=} opt_showFn Show the functions as well as the properties,\\n * default is false.\\n * @return {string} The string representation of `obj`.\\n */\\ngoog.debug.expose = function(obj, opt_showFn) {\\n 'use strict';\\n if (typeof obj == 'undefined') {\\n return 'undefined';\\n }\\n if (obj == null) {\\n return 'NULL';\\n }\\n var str = [];\\n\\n for (var x in obj) {\\n if (!opt_showFn && typeof obj[x] === 'function') {\\n continue;\\n }\\n var s = x + ' = ';\\n\\n try {\\n s += obj[x];\\n } catch (e) {\\n s += '*** ' + e + ' ***';\\n }\\n str.push(s);\\n }\\n return str.join('\\\\n');\\n};\\n\\n\\n/**\\n * Creates a string representing a given primitive or object, and for an\\n * object, all its properties and nested objects. NOTE: The output will include\\n * Uids on all objects that were exposed. Any added Uids will be removed before\\n * returning.\\n * @param {*} obj Object to expose.\\n * @param {boolean=} opt_showFn Also show properties that are functions (by\\n * default, functions are omitted).\\n * @return {string} A string representation of `obj`.\\n */\\ngoog.debug.deepExpose = function(obj, opt_showFn) {\\n 'use strict';\\n var str = [];\\n\\n // Track any objects where deepExpose added a Uid, so they can be cleaned up\\n // before return. We do this globally, rather than only on ancestors so that\\n // if the same object appears in the output, you can see it.\\n var uidsToCleanup = [];\\n var ancestorUids = {};\\n\\n var helper = function(obj, space) {\\n 'use strict';\\n var nestspace = space + ' ';\\n\\n var indentMultiline = function(str) {\\n 'use strict';\\n return str.replace(/\\\\n/g, '\\\\n' + space);\\n };\\n\\n\\n try {\\n if (obj === undefined) {\\n str.push('undefined');\\n } else if (obj === null) {\\n str.push('NULL');\\n } else if (typeof obj === 'string') {\\n str.push('\\\"' + indentMultiline(obj) + '\\\"');\\n } else if (typeof obj === 'function') {\\n str.push(indentMultiline(String(obj)));\\n } else if (goog.isObject(obj)) {\\n // Add a Uid if needed. The struct calls implicitly adds them.\\n if (!goog.hasUid(obj)) {\\n uidsToCleanup.push(obj);\\n }\\n var uid = goog.getUid(obj);\\n if (ancestorUids[uid]) {\\n str.push('*** reference loop detected (id=' + uid + ') ***');\\n } else {\\n ancestorUids[uid] = true;\\n str.push('{');\\n for (var x in obj) {\\n if (!opt_showFn && typeof obj[x] === 'function') {\\n continue;\\n }\\n str.push('\\\\n');\\n str.push(nestspace);\\n str.push(x + ' = ');\\n helper(obj[x], nestspace);\\n }\\n str.push('\\\\n' + space + '}');\\n delete ancestorUids[uid];\\n }\\n } else {\\n str.push(obj);\\n }\\n } catch (e) {\\n str.push('*** ' + e + ' ***');\\n }\\n };\\n\\n helper(obj, '');\\n\\n // Cleanup any Uids that were added by the deepExpose.\\n for (var i = 0; i < uidsToCleanup.length; i++) {\\n goog.removeUid(uidsToCleanup[i]);\\n }\\n\\n return str.join('');\\n};\\n\\n\\n/**\\n * Recursively outputs a nested array as a string.\\n * @param {Array} arr The array.\\n * @return {string} String representing nested array.\\n */\\ngoog.debug.exposeArray = function(arr) {\\n 'use strict';\\n var str = [];\\n for (var i = 0; i < arr.length; i++) {\\n if (Array.isArray(arr[i])) {\\n str.push(goog.debug.exposeArray(arr[i]));\\n } else {\\n str.push(arr[i]);\\n }\\n }\\n return '[ ' + str.join(', ') + ' ]';\\n};\\n\\n\\n/**\\n * Normalizes the error/exception object between browsers.\\n * @param {*} err Raw error object.\\n * @return {{\\n * message: (?|undefined),\\n * name: (?|undefined),\\n * lineNumber: (?|undefined),\\n * fileName: (?|undefined),\\n * stack: (?|undefined)\\n * }} Representation of err as an Object. It will never return err.\\n * @suppress {strictMissingProperties} properties not defined on err\\n */\\ngoog.debug.normalizeErrorObject = function(err) {\\n 'use strict';\\n var href = goog.getObjectByName('window.location.href');\\n if (err == null) {\\n err = 'Unknown Error of type \\\"null/undefined\\\"';\\n }\\n if (typeof err === 'string') {\\n return {\\n 'message': err,\\n 'name': 'Unknown error',\\n 'lineNumber': 'Not available',\\n 'fileName': href,\\n 'stack': 'Not available'\\n };\\n }\\n\\n var lineNumber, fileName;\\n var threwError = false;\\n\\n try {\\n lineNumber = err.lineNumber || err.line || 'Not available';\\n } catch (e) {\\n // Firefox 2 sometimes throws an error when accessing 'lineNumber':\\n // Message: Permission denied to get property UnnamedClass.lineNumber\\n lineNumber = 'Not available';\\n threwError = true;\\n }\\n\\n try {\\n fileName = err.fileName || err.filename || err.sourceURL ||\\n // $googDebugFname may be set before a call to eval to set the filename\\n // that the eval is supposed to present.\\n goog.global['$googDebugFname'] || href;\\n } catch (e) {\\n // Firefox 2 may also throw an error when accessing 'filename'.\\n fileName = 'Not available';\\n threwError = true;\\n }\\n\\n var stack = goog.debug.serializeErrorStack_(err);\\n\\n // The IE Error object contains only the name and the message.\\n // The Safari Error object uses the line and sourceURL fields.\\n if (threwError || !err.lineNumber || !err.fileName || !err.stack ||\\n !err.message || !err.name) {\\n var message = err.message;\\n if (message == null) {\\n if (err.constructor && err.constructor instanceof Function) {\\n var ctorName = err.constructor.name ?\\n err.constructor.name :\\n goog.debug.getFunctionName(err.constructor);\\n message = 'Unknown Error of type \\\"' + ctorName + '\\\"';\\n // TODO(user): Remove this hack once bug is resolved.\\n if (goog.debug.CHECK_FOR_THROWN_EVENT && ctorName == 'Event') {\\n try {\\n message = message + ' with Event.type \\\"' + (err.type || '') + '\\\"';\\n } catch (e) {\\n // Just give up on getting more information out of the error object.\\n }\\n }\\n } else {\\n message = 'Unknown Error of unknown type';\\n }\\n\\n // Avoid TypeError since toString could be missing from the instance\\n // (e.g. if created Object.create(null)).\\n if (typeof err.toString === 'function' &&\\n Object.prototype.toString !== err.toString) {\\n message += ': ' + err.toString();\\n }\\n }\\n return {\\n 'message': message,\\n 'name': err.name || 'UnknownError',\\n 'lineNumber': lineNumber,\\n 'fileName': fileName,\\n 'stack': stack || 'Not available'\\n };\\n }\\n // Standards error object\\n // Typed !Object. Should be a subtype of the return type, but it's not.\\n err.stack = stack;\\n\\n // Return non-standard error to allow for consistent result (eg. enumerable).\\n return {\\n 'message': err.message,\\n 'name': err.name,\\n 'lineNumber': err.lineNumber,\\n 'fileName': err.fileName,\\n 'stack': err.stack\\n };\\n};\\n\\n\\n/**\\n * Serialize stack by including the cause chain of the exception if it exists.\\n *\\n *\\n * @param {*} e an exception that may have a cause\\n * @param {!Object=} seen set of cause that have already been serialized\\n * @return {string}\\n * @private\\n * @suppress {missingProperties} properties not defined on cause and e\\n */\\ngoog.debug.serializeErrorStack_ = function(e, seen) {\\n 'use strict';\\n if (!seen) {\\n seen = {};\\n }\\n seen[goog.debug.serializeErrorAsKey_(e)] = true;\\n\\n var stack = e['stack'] || '';\\n\\n // Add cause if exists.\\n var cause = e.cause;\\n if (cause && !seen[goog.debug.serializeErrorAsKey_(cause)]) {\\n stack += '\\\\nCaused by: ';\\n // Some browsers like Chrome add the error message as the first frame of the\\n // stack, In this case we don't need to add it. Note: we don't use\\n // String.startsWith method because it might have to be polyfilled.\\n if (!cause.stack || cause.stack.indexOf(cause.toString()) != 0) {\\n stack += (typeof cause === 'string') ? cause : cause.message + '\\\\n';\\n }\\n stack += goog.debug.serializeErrorStack_(cause, seen);\\n }\\n\\n return stack;\\n};\\n\\n/**\\n * Serialize an error to a string key.\\n * @param {*} e an exception\\n * @return {string}\\n * @private\\n */\\ngoog.debug.serializeErrorAsKey_ = function(e) {\\n 'use strict';\\n var keyPrefix = '';\\n\\n if (typeof e.toString === 'function') {\\n keyPrefix = '' + e;\\n }\\n\\n return keyPrefix + e['stack'];\\n};\\n\\n\\n/**\\n * Converts an object to an Error using the object's toString if it's not\\n * already an Error, adds a stacktrace if there isn't one, and optionally adds\\n * an extra message.\\n * @param {*} err The original thrown error, object, or string.\\n * @param {string=} opt_message optional additional message to add to the\\n * error.\\n * @return {!Error} If err is an Error, it is enhanced and returned. Otherwise,\\n * it is converted to an Error which is enhanced and returned.\\n */\\ngoog.debug.enhanceError = function(err, opt_message) {\\n 'use strict';\\n var error;\\n if (!(err instanceof Error)) {\\n error = Error(err);\\n if (Error.captureStackTrace) {\\n // Trim this function off the call stack, if we can.\\n Error.captureStackTrace(error, goog.debug.enhanceError);\\n }\\n } else {\\n error = err;\\n }\\n\\n if (!error.stack) {\\n error.stack = goog.debug.getStacktrace(goog.debug.enhanceError);\\n }\\n if (opt_message) {\\n // find the first unoccupied 'messageX' property\\n var x = 0;\\n while (error['message' + x]) {\\n ++x;\\n }\\n error['message' + x] = String(opt_message);\\n }\\n return error;\\n};\\n\\n\\n/**\\n * Converts an object to an Error using the object's toString if it's not\\n * already an Error, adds a stacktrace if there isn't one, and optionally adds\\n * context to the Error, which is reported by the closure error reporter.\\n * @param {*} err The original thrown error, object, or string.\\n * @param {!Object=} opt_context Key-value context to add to the\\n * Error.\\n * @return {!Error} If err is an Error, it is enhanced and returned. Otherwise,\\n * it is converted to an Error which is enhanced and returned.\\n */\\ngoog.debug.enhanceErrorWithContext = function(err, opt_context) {\\n 'use strict';\\n var error = goog.debug.enhanceError(err);\\n if (opt_context) {\\n for (var key in opt_context) {\\n goog.debug.errorcontext.addErrorContext(error, key, opt_context[key]);\\n }\\n }\\n return error;\\n};\\n\\n\\n/**\\n * Gets the current stack trace. Simple and iterative - doesn't worry about\\n * catching circular references or getting the args.\\n * @param {number=} opt_depth Optional maximum depth to trace back to.\\n * @return {string} A string with the function names of all functions in the\\n * stack, separated by \\\\n.\\n * @suppress {es5Strict}\\n */\\ngoog.debug.getStacktraceSimple = function(opt_depth) {\\n 'use strict';\\n if (!goog.debug.FORCE_SLOPPY_STACKS) {\\n var stack = goog.debug.getNativeStackTrace_(goog.debug.getStacktraceSimple);\\n if (stack) {\\n return stack;\\n }\\n // NOTE: browsers that have strict mode support also have native \\\"stack\\\"\\n // properties. Fall-through for legacy browser support.\\n }\\n\\n var sb = [];\\n var fn = arguments.callee.caller;\\n var depth = 0;\\n\\n while (fn && (!opt_depth || depth < opt_depth)) {\\n sb.push(goog.debug.getFunctionName(fn));\\n sb.push('()\\\\n');\\n\\n try {\\n fn = fn.caller;\\n } catch (e) {\\n sb.push('[exception trying to get caller]\\\\n');\\n break;\\n }\\n depth++;\\n if (depth >= goog.debug.MAX_STACK_DEPTH) {\\n sb.push('[...long stack...]');\\n break;\\n }\\n }\\n if (opt_depth && depth >= opt_depth) {\\n sb.push('[...reached max depth limit...]');\\n } else {\\n sb.push('[end]');\\n }\\n\\n return sb.join('');\\n};\\n\\n\\n/**\\n * Max length of stack to try and output\\n * @type {number}\\n */\\ngoog.debug.MAX_STACK_DEPTH = 50;\\n\\n\\n/**\\n * @param {Function} fn The function to start getting the trace from.\\n * @return {?string}\\n * @private\\n */\\ngoog.debug.getNativeStackTrace_ = function(fn) {\\n 'use strict';\\n var tempErr = new Error();\\n if (Error.captureStackTrace) {\\n Error.captureStackTrace(tempErr, fn);\\n return String(tempErr.stack);\\n } else {\\n // IE10, only adds stack traces when an exception is thrown.\\n try {\\n throw tempErr;\\n } catch (e) {\\n tempErr = e;\\n }\\n var stack = tempErr.stack;\\n if (stack) {\\n return String(stack);\\n }\\n }\\n return null;\\n};\\n\\n\\n/**\\n * Gets the current stack trace, either starting from the caller or starting\\n * from a specified function that's currently on the call stack.\\n * @param {?Function=} fn If provided, when collecting the stack trace all\\n * frames above the topmost call to this function, including that call,\\n * will be left out of the stack trace.\\n * @return {string} Stack trace.\\n * @suppress {es5Strict}\\n */\\ngoog.debug.getStacktrace = function(fn) {\\n 'use strict';\\n var stack;\\n if (!goog.debug.FORCE_SLOPPY_STACKS) {\\n // Try to get the stack trace from the environment if it is available.\\n var contextFn = fn || goog.debug.getStacktrace;\\n stack = goog.debug.getNativeStackTrace_(contextFn);\\n }\\n if (!stack) {\\n // NOTE: browsers that have strict mode support also have native \\\"stack\\\"\\n // properties. This function will throw in strict mode.\\n stack = goog.debug.getStacktraceHelper_(fn || arguments.callee.caller, []);\\n }\\n return stack;\\n};\\n\\n\\n/**\\n * Private helper for getStacktrace().\\n * @param {?Function} fn If provided, when collecting the stack trace all\\n * frames above the topmost call to this function, including that call,\\n * will be left out of the stack trace.\\n * @param {Array} visited List of functions visited so far.\\n * @return {string} Stack trace starting from function fn.\\n * @suppress {es5Strict}\\n * @private\\n */\\ngoog.debug.getStacktraceHelper_ = function(fn, visited) {\\n 'use strict';\\n var sb = [];\\n\\n // Circular reference, certain functions like bind seem to cause a recursive\\n // loop so we need to catch circular references\\n if (goog.array.contains(visited, fn)) {\\n sb.push('[...circular reference...]');\\n\\n // Traverse the call stack until function not found or max depth is reached\\n } else if (fn && visited.length < goog.debug.MAX_STACK_DEPTH) {\\n sb.push(goog.debug.getFunctionName(fn) + '(');\\n var args = fn.arguments;\\n // Args may be null for some special functions such as host objects or eval.\\n for (var i = 0; args && i < args.length; i++) {\\n if (i > 0) {\\n sb.push(', ');\\n }\\n var argDesc;\\n var arg = args[i];\\n switch (typeof arg) {\\n case 'object':\\n argDesc = arg ? 'object' : 'null';\\n break;\\n\\n case 'string':\\n argDesc = arg;\\n break;\\n\\n case 'number':\\n argDesc = String(arg);\\n break;\\n\\n case 'boolean':\\n argDesc = arg ? 'true' : 'false';\\n break;\\n\\n case 'function':\\n argDesc = goog.debug.getFunctionName(arg);\\n argDesc = argDesc ? argDesc : '[fn]';\\n break;\\n\\n case 'undefined':\\n default:\\n argDesc = typeof arg;\\n break;\\n }\\n\\n if (argDesc.length > 40) {\\n argDesc = argDesc.slice(0, 40) + '...';\\n }\\n sb.push(argDesc);\\n }\\n visited.push(fn);\\n sb.push(')\\\\n');\\n\\n try {\\n sb.push(goog.debug.getStacktraceHelper_(fn.caller, visited));\\n } catch (e) {\\n sb.push('[exception trying to get caller]\\\\n');\\n }\\n\\n } else if (fn) {\\n sb.push('[...long stack...]');\\n } else {\\n sb.push('[end]');\\n }\\n return sb.join('');\\n};\\n\\n\\n/**\\n * Gets a function name\\n * @param {Function} fn Function to get name of.\\n * @return {string} Function's name.\\n */\\ngoog.debug.getFunctionName = function(fn) {\\n 'use strict';\\n if (goog.debug.fnNameCache_[fn]) {\\n return goog.debug.fnNameCache_[fn];\\n }\\n\\n // Heuristically determine function name based on code.\\n var functionSource = String(fn);\\n if (!goog.debug.fnNameCache_[functionSource]) {\\n var matches = /function\\\\s+([^\\\\(]+)/m.exec(functionSource);\\n if (matches) {\\n var method = matches[1];\\n goog.debug.fnNameCache_[functionSource] = method;\\n } else {\\n goog.debug.fnNameCache_[functionSource] = '[Anonymous]';\\n }\\n }\\n\\n return goog.debug.fnNameCache_[functionSource];\\n};\\n\\n\\n/**\\n * Makes whitespace visible by replacing it with printable characters.\\n * This is useful in finding diffrences between the expected and the actual\\n * output strings of a testcase.\\n * @param {string} string whose whitespace needs to be made visible.\\n * @return {string} string whose whitespace is made visible.\\n */\\ngoog.debug.makeWhitespaceVisible = function(string) {\\n 'use strict';\\n return string.replace(/ /g, '[_]')\\n .replace(/\\\\f/g, '[f]')\\n .replace(/\\\\n/g, '[n]\\\\n')\\n .replace(/\\\\r/g, '[r]')\\n .replace(/\\\\t/g, '[t]');\\n};\\n\\n\\n/**\\n * Returns the type of a value. If a constructor is passed, and a suitable\\n * string cannot be found, 'unknown type name' will be returned.\\n *\\n *

Forked rather than moved from {@link goog.asserts.getType_}\\n * to avoid adding a dependency to goog.asserts.\\n * @param {*} value A constructor, object, or primitive.\\n * @return {string} The best display name for the value, or 'unknown type name'.\\n */\\ngoog.debug.runtimeType = function(value) {\\n 'use strict';\\n if (value instanceof Function) {\\n return value.displayName || value.name || 'unknown type name';\\n } else if (value instanceof Object) {\\n return /** @type {string} */ (value.constructor.displayName) ||\\n value.constructor.name || Object.prototype.toString.call(value);\\n } else {\\n return value === null ? 'null' : typeof value;\\n }\\n};\\n\\n\\n/**\\n * Hash map for storing function names that have already been looked up.\\n * @type {Object}\\n * @private\\n */\\ngoog.debug.fnNameCache_ = {};\\n\\n\\n/**\\n * Private internal function to support goog.debug.freeze.\\n * @param {T} arg\\n * @return {T}\\n * @template T\\n * @private\\n */\\ngoog.debug.freezeInternal_ = goog.DEBUG && Object.freeze || function(arg) {\\n 'use strict';\\n return arg;\\n};\\n\\n\\n/**\\n * Freezes the given object, but only in debug mode (and in browsers that\\n * support it). Note that this is a shallow freeze, so for deeply nested\\n * objects it must be called at every level to ensure deep immutability.\\n * @param {T} arg\\n * @return {T}\\n * @template T\\n */\\ngoog.debug.freeze = function(arg) {\\n 'use strict';\\n // NOTE: this compiles to nothing, but hides the possible side effect of\\n // freezeInternal_ from the compiler so that the entire call can be\\n // removed if the result is not used.\\n return {\\n valueOf: function() {\\n 'use strict';\\n return goog.debug.freezeInternal_(arg);\\n }\\n }.valueOf();\\n};\\n\"],\n\"names\":[\"goog\",\"provide\",\"require\",\"debug\",\"LOGGING_ENABLED\",\"define\",\"DEBUG\",\"FORCE_SLOPPY_STACKS\",\"CHECK_FOR_THROWN_EVENT\",\"catchErrors\",\"goog.debug.catchErrors\",\"logFunc\",\"opt_cancel\",\"opt_target\",\"target\",\"global\",\"oldErrorHandler\",\"onerror\",\"retVal\",\"target.onerror\",\"message\",\"url\",\"line\",\"opt_col\",\"opt_error\",\"fileName\",\"lineNumber\",\"col\",\"error\",\"expose\",\"goog.debug.expose\",\"obj\",\"opt_showFn\",\"str\",\"x\",\"s\",\"e\",\"push\",\"join\",\"deepExpose\",\"goog.debug.deepExpose\",\"uidsToCleanup\",\"ancestorUids\",\"helper\",\"space\",\"nestspace\",\"indentMultiline\",\"replace\",\"undefined\",\"String\",\"isObject\",\"hasUid\",\"uid\",\"getUid\",\"i\",\"length\",\"removeUid\",\"exposeArray\",\"goog.debug.exposeArray\",\"arr\",\"Array\",\"isArray\",\"normalizeErrorObject\",\"goog.debug.normalizeErrorObject\",\"err\",\"href\",\"getObjectByName\",\"threwError\",\"filename\",\"sourceURL\",\"stack\",\"serializeErrorStack_\",\"name\",\"constructor\",\"Function\",\"ctorName\",\"getFunctionName\",\"type\",\"toString\",\"Object\",\"prototype\",\"goog.debug.serializeErrorStack_\",\"seen\",\"serializeErrorAsKey_\",\"cause\",\"indexOf\",\"goog.debug.serializeErrorAsKey_\",\"keyPrefix\",\"enhanceError\",\"goog.debug.enhanceError\",\"opt_message\",\"Error\",\"captureStackTrace\",\"getStacktrace\",\"enhanceErrorWithContext\",\"goog.debug.enhanceErrorWithContext\",\"opt_context\",\"key\",\"errorcontext\",\"addErrorContext\",\"getStacktraceSimple\",\"goog.debug.getStacktraceSimple\",\"opt_depth\",\"getNativeStackTrace_\",\"sb\",\"fn\",\"arguments\",\"callee\",\"caller\",\"depth\",\"MAX_STACK_DEPTH\",\"goog.debug.getNativeStackTrace_\",\"tempErr\",\"goog.debug.getStacktrace\",\"contextFn\",\"getStacktraceHelper_\",\"goog.debug.getStacktraceHelper_\",\"visited\",\"array\",\"contains\",\"args\",\"argDesc\",\"arg\",\"slice\",\"goog.debug.getFunctionName\",\"fnNameCache_\",\"functionSource\",\"matches\",\"exec\",\"method\",\"makeWhitespaceVisible\",\"goog.debug.makeWhitespaceVisible\",\"string\",\"runtimeType\",\"goog.debug.runtimeType\",\"value\",\"displayName\",\"call\",\"freezeInternal_\",\"freeze\",\"goog.debug.freeze\",\"valueOf\"]\n}\n"]