function printStackTrace(n){n=n||{guess:!0};var u=n.e||null,r=!!n.guess,t=new printStackTrace.implementation,i=t.run(u);return r?t.guessAnonymousFunctions(i):i}printStackTrace.implementation=function(){},printStackTrace.implementation.prototype={run:function(n,t){return n=n||this.createException(),t=t||this.mode(n),t==="other"?this.other(arguments.callee):this[t](n)},createException:function(){try{this.undef()}catch(n){return n}},mode:function(n){return n.arguments&&n.stack?"chrome":typeof n.message=="string"&&typeof window!="undefined"&&window.opera?n.stacktrace?n.message.indexOf("\n")>-1&&n.message.split("\n").length>n.stacktrace.split("\n").length?"opera9":n.stack?n.stacktrace.indexOf("called from line")<0?"opera10b":"opera11":"opera10a":"opera9":n.stack?"firefox":"other"},instrumentFunction:function(n,t,i){n=n||window;var r=n[t];n[t]=function(){return i.call(this,printStackTrace().slice(4)),n[t]._instrumented.apply(this,arguments)},n[t]._instrumented=r},deinstrumentFunction:function(n,t){n[t].constructor===Function&&n[t]._instrumented&&n[t]._instrumented.constructor===Function&&(n[t]=n[t]._instrumented)},chrome:function(n){var t=(n.stack+"\n").replace(/^\S[^\(]+?[\n$]/gm,"").replace(/^\s+at\s+/gm,"").replace(/^([^\(]+?)([\n$])/gm,"{anonymous}()@$1$2").replace(/^Object.<anonymous>\s*\(([^\)]+)\)/gm,"{anonymous}()@$1").split("\n");return t.pop(),t},firefox:function(n){return n.stack.replace(/(?:\n@:0)?\s+$/m,"").replace(/^\(/gm,"{anonymous}(").split("\n")},opera11:function(n){for(var h="{anonymous}",s=/^.*line (\d+), column (\d+)(?: in (.+))? in (\S+):$/,u=n.stacktrace.split("\n"),e=[],t,f,r,i=0,o=u.length;i<o;i+=2)t=s.exec(u[i]),t&&(f=t[4]+":"+t[1]+":"+t[2],r=t[3]||"global code",r=r.replace(/<anonymous function: (\S+)>/,"$1").replace(/<anonymous function>/,h),e.push(r+"@"+f+" -- "+u[i+1].replace(/^\s+/,"")));return e},opera10b:function(n){for(var s="{anonymous}",o=/^(.*)@(.+):(\d+)$/,f=n.stacktrace.split("\n"),e=[],t,r,i=0,u=f.length;i<u;i++)t=o.exec(f[i]),t&&(r=t[1]?t[1]+"()":"global code",e.push(r+"@"+t[2]+":"+t[3]));return e},opera10a:function(n){for(var o="{anonymous}",s=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),e=[],i,u,t=0,f=r.length;t<f;t+=2)i=s.exec(r[t]),i&&(u=i[3]||o,e.push(u+"()@"+i[2]+":"+i[1]+" -- "+r[t+1].replace(/^\s+/,"")));return e},opera9:function(n){for(var o="{anonymous}",e=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),f=[],i,t=2,u=r.length;t<u;t+=2)i=e.exec(r[t]),i&&f.push(o+"()@"+i[2]+":"+i[1]+" -- "+r[t+1].replace(/^\s+/,""));return f},other:function(n){var r="{anonymous}",e=/function\s*([\w\-$]+)?\s*\(/i,t=[],u,i,f=10;while(n&&t.length<f)u=e.test(n.toString())?RegExp.$1||r:r,i=Array.prototype.slice.call(n.arguments||[]),t[t.length]=u+"("+this.stringifyArguments(i)+")",n=n.caller;return t},stringifyArguments:function(n){for(var r=[],u=Array.prototype.slice,t,i=0;i<n.length;++i)t=n[i],t===undefined?r[i]="undefined":t===null?r[i]="null":t.constructor&&(t.constructor===Array?r[i]=t.length<3?"["+this.stringifyArguments(t)+"]":"["+this.stringifyArguments(u.call(t,0,1))+"..."+this.stringifyArguments(u.call(t,-1))+"]":t.constructor===Object?r[i]="#object":t.constructor===Function?r[i]="#function":t.constructor===String?r[i]='"'+t+'"':t.constructor===Number&&(r[i]=t));return r.join(",")},sourceCache:{},ajax:function(n){var t=this.createXMLHTTPObject();if(t)try{return t.open("GET",n,!1),t.send(null),t.responseText}catch(i){}return""},createXMLHTTPObject:function(){for(var i,t=[function(){return new XMLHttpRequest},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml3.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")}],n=0;n<t.length;n++)try{return i=t[n](),this.createXMLHTTPObject=t[n],i}catch(r){}},isSameDomain:function(n){return n.indexOf(location.hostname)!==-1},getSource:function(n){return n in this.sourceCache||(this.sourceCache[n]=this.ajax(n).split("\n")),this.sourceCache[n]},guessAnonymousFunctions:function(n){for(var u,t=0;t<n.length;++t){var s=/\{anonymous\}\(.*\)@(.*)/,c=/^(.*?)(?::(\d+))(?::(\d+))?(?: -- .+)?$/,e=n[t],o=s.exec(e);if(o){var r=c.exec(o[1]),i=r[1],f=r[2],h=r[3]||0;i&&this.isSameDomain(i)&&f&&(u=this.guessAnonymousFunction(i,f,h),n[t]=e.replace("{anonymous}",u))}}return n},guessAnonymousFunction:function(n,t){var r;try{r=this.findFunctionName(this.getSource(n),t)}catch(u){r="getSource failed with url: "+n+", exception: "+u.toString()}return r},findFunctionName:function(n,t){for(var s=/function\s+([^(]*?)\s*\(([^)]*)\)/,h=/['"]?([0-9A-Za-z_]+)['"]?\s*[:=]\s*function\b/,o=/['"]?([0-9A-Za-z_]+)['"]?\s*[:=]\s*(?:eval|new Function)\b/,u="",r,c=Math.min(t,20),i,e,f=0;f<c;++f){r=n[t-f-1],e=r.indexOf("//"),e<0||(r=r.substr(0,e));if(r){u=r+u,i=h.exec(u);if(i&&i[1])return i[1];i=s.exec(u);if(i&&i[1])return i[1];i=o.exec(u);if(i&&i[1])return i[1]}}return"(?)"}}
