Comparing version
@@ -9,3 +9,3 @@ (function (window, undefined){ | ||
Canadarm.utils = {}; | ||
Canadarm.version = '1.0.1'; | ||
Canadarm.version = '1.0.2'; | ||
@@ -473,4 +473,9 @@ /** | ||
if (exception === undefined || exception === null || exception.stack === null) { | ||
var scripts = window.document.getElementsByTagName('script'); | ||
scriptURL = (window.document.currentScript || scripts[scripts.length - 1]).src; | ||
if (typeof window.document.getElementsByTagName === 'function') { | ||
var scripts = window.document.getElementsByTagName('script'); | ||
scriptURL = (window.document.currentScript || scripts[scripts.length - 1]).src; | ||
} else { | ||
// Probably not in a browser, return unknown log. | ||
scriptURL = Canadarm.constant.UNKNOWN_LOG; | ||
} | ||
@@ -599,4 +604,6 @@ } else { | ||
console.error(logValues); | ||
} else if (typeof logAttributes.msg !== 'undefined') { | ||
console.error(logAttributes.msg, logAttributes); | ||
} else { | ||
console.error(logAttributes.msg, logAttributes); | ||
console.error(logAttributes); | ||
} | ||
@@ -603,0 +610,0 @@ } |
@@ -1,2 +0,2 @@ | ||
!function(a,b){function c(a){return encodeURIComponent(a).replace(/[!'()*]/g,function(a){return"%"+a.charCodeAt(0).toString(16)})}function d(a){var b,c=a||{};if(c.onError!==!1&&q.setUpOnErrorHandler(),c.wrapEvents!==!1&&q.setUpEventListening(),c.appenders)for(b=0;b<c.appenders.length;b++)q.addAppender(c.appenders[b]);if(c.handlers)for(b=0;b<c.handlers.length;b++)q.addHandler(c.handlers[b]);c.logLevel&&(q.loggingLevel=c.logLevel)}function e(a){s.push(a)}function f(a){t.push(a)}function g(a,b,c,d,e){var f,g,h,i,j={},k=e||s;for(h=0;h<k.length;h++){f=k[h],g=f(a,b,c,d);for(i in g)g.hasOwnProperty(i)&&(j[i]=g[i])}return j}function h(a,b){var c,d,e=b||t;for(d=0;d<e.length;d++)(c=e[d])(a)}function i(a){return function(b,c,d,e){if(!(q.levelOrder.indexOf(a)<q.levelOrder.indexOf(q.loggingLevel))){var f=e||{},i=g(a,c,b,d,f.appenders);h(i,f.handlers)}}}function j(c,d,e,f){function g(a){if(a===b||null===a)return{url:q.constant.UNKNOWN_LOG,lineNumber:q.constant.UNKNOWN_LOG,columnNumber:q.constant.UNKNOWN_LOG};for(var c,d=a.replace(/(\r\n|\n|\r)/gm,"").match(w),e=[],f=null!==d&&d!==b;f;)d=d[1].match(w),c=null!==d?d[1]:null,e=null!==d?d:e,f=null!==d&&d!==b;return{url:e.length>=1?e[1]:q.constant.UNKNOWN_LOG,lineNumber:e.length>=1?e[2]:q.constant.UNKNOWN_LOG,columnNumber:e.length>=1?e[3]:q.constant.UNKNOWN_LOG}}function h(a){return 10>a?"0"+a:a}var i,j,k,l,m=d?d.stack:(new Error).stack||null,n=q.constant.UNKNOWN_LOG,o=e||d.message||q.constant.UNKNOWN_LOG,p=new Date,r=a.location.href,s=q.constant.UNKNOWN_LOG,t=q.constant.UNKNOWN_LOG,u=a.navigator.language||q.constant.UNKNOWN_LOG,v=a.document.characterSet||a.document.charset||a.document.defaultCharset||q.constant.UNKNOWN_LOG,w=/(http\:\/\/.*\/.*\.js)\:(\d+)\:(\d+)(.*)$/;if(l=p.toISOString?p.toISOString():function(){return p.getUTCFullYear()+"-"+h(p.getUTCMonth()+1)+"-"+h(p.getUTCDate())+"T"+h(p.getUTCHours())+":"+h(p.getUTCMinutes())+":"+h(p.getUTCSeconds())+"."+(p.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z"}(),d===b||null===d||null===d.stack){var x=a.document.getElementsByTagName("script");n=(a.document.currentScript||x[x.length-1]).src}else k=g(m),n=k.url,s=k.lineNumber,t=k.columnNumber;i={characterSet:v,columnNumber:t,language:u,lineNumber:s,logDate:l,msg:"["+c+"]: "+o,pageURL:r,stack:m||q.constant.UNKNOWN_LOG,type:"jserror",scriptURL:n};for(j in f)f.hasOwnProperty(j)&&null!==f[j]&&f[j]!==b&&(i[j]=f[j]);return i}function k(a){return function(b){var c,d=[],e=new Image;for(c in b)b.hasOwnProperty(c)&&d.push(c+"="+q.utils.fixedEncodeURIComponent(b[c]+"\n"));e.src=a+"?"+d.join("&")}}function l(b){var c,d="";if(console)if(a.attachEvent){for(c in b)b.hasOwnProperty(c)&&(d+=c+"="+b[c]+"\n");console.error(d)}else console.error(b.msg,b)}function m(a,c,d){if(a&&a._wrapper)return a._wrapper;var e=function(){try{return a.apply(c||this,arguments)}catch(e){q.error(e.message,e,b,d)}};return a._wrapper=e,e}function n(a,b,c,d,e){var f;return u&&"function"==typeof u&&(f=u.apply(this,arguments)),q.fatal(a,e,{url:b,lineNumber:c,columnNumber:d}),f}function o(){a.onerror=n}function p(){var c,d,e=[];a.EventTarget?(c=a.EventTarget.prototype.addEventListener,d=a.EventTarget.prototype.removeEventListener,a.EventTarget.prototype.addEventListener=function(a,b,d){return c.call(this,a,q.watch(b),d)},a.EventTarget.prototype.removeEventListener=function(a,b,c){return d.call(this,a,q.watch(b),c)}):a.Element&&a.Element.prototype&&a.Element.prototype.attachEvent&&a.Element.prototype.addEventListener===b&&(Event.prototype.preventDefault||(Event.prototype.preventDefault=function(){this.returnValue=!1}),Event.prototype.stopPropagation||(Event.prototype.stopPropagation=function(){this.cancelBubble=!0}),Element.prototype.addEventListener||(c=function(a,b){var c=this,d=function(a){a.target=a.srcElement,a.currentTarget=c,b.handleEvent?b.handleEvent(a):b.call(c,a)};"DOMContentLoaded"!==a&&(this.attachEvent("on"+a,q.watch(d)),e.push({object:this,type:a,listener:b,wrapper:d}))},d=function(a,b){for(var c,d=0;d<e.length;){if(c=e[d],c.object==this&&c.type===a&&c.listener==b){"DOMContentLoaded"!==a&&this.detachEvent("on"+a,q.watch(c.wrapper)),e.splice(d,1);break}++d}},Element.prototype.addEventListener=c,Element.prototype.removeEventListener=d))}var q={};q.Appender={},q.Handler={},q.constant={},q.utils={},q.version="1.0.1",q.constant.UNKNOWN_LOG="?";var r={FATAL:"FATAL",ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG"};q.level=r,q.levelOrder=[r.DEBUG,r.INFO,r.WARN,r.ERROR,r.FATAL],"undefined"==typeof q.levelOrder.indexOf&&(q.levelOrder.indexOf=function(a,b){var c;if(null==this)throw new TypeError('"this" is null or not defined');var d=Object(this),e=d.length>>>0;if(0===e)return-1;var f=+b||0;if(Math.abs(f)===1/0&&(f=0),f>=e)return-1;for(c=Math.max(f>=0?f:e-Math.abs(f),0);e>c;){if(c in d&&d[c]===a)return c;c++}return-1}),q.utils.fixedEncodeURIComponent=c;var s=[],t=[];q.debug=i(q.level.DEBUG),q.info=i(q.level.INFO),q.warn=i(q.level.WARN),q.error=i(q.level.ERROR),q.fatal=i(q.level.FATAL),q.addHandler=f,q.addAppender=e,q.init=d,q.loggingLevel=q.level.DEBUG,q.Appender.standardLogAppender=j,q.Handler.beaconLogHandler=k,q.Handler.consoleLogHandler=l,q.watch=function(a,b){return m(a,b)},q.attempt=function(a,b){var c=Array.prototype.slice.call(arguments,2);return m(a,b)(c)},q.localWatch=function(a,b,c){return m(a,c,b)},q.localAttempt=function(a,b,c){var d=Array.prototype.slice.call(arguments,3);return m(a,c,b)(d)};var u=a.onerror;q.setUpOnErrorHandler=o,q.setUpEventListening=p,a.navigator||(a.navigator={}),a.location||(a.location={}),a.document||(a.document={}),a.navigator||(a.navigator={}),q._window=a,"function"==typeof define&&define.amd?(a.Canadarm=q,define("canadarm",[],function(){return q})):"object"==typeof module?module.exports=q:"object"==typeof exports?exports=q:a.Canadarm=q}("undefined"!=typeof window?window:this); | ||
!function(a,b){function c(a){return encodeURIComponent(a).replace(/[!'()*]/g,function(a){return"%"+a.charCodeAt(0).toString(16)})}function d(a){var b,c=a||{};if(c.onError!==!1&&q.setUpOnErrorHandler(),c.wrapEvents!==!1&&q.setUpEventListening(),c.appenders)for(b=0;b<c.appenders.length;b++)q.addAppender(c.appenders[b]);if(c.handlers)for(b=0;b<c.handlers.length;b++)q.addHandler(c.handlers[b]);c.logLevel&&(q.loggingLevel=c.logLevel)}function e(a){s.push(a)}function f(a){t.push(a)}function g(a,b,c,d,e){var f,g,h,i,j={},k=e||s;for(h=0;h<k.length;h++){f=k[h],g=f(a,b,c,d);for(i in g)g.hasOwnProperty(i)&&(j[i]=g[i])}return j}function h(a,b){var c,d,e=b||t;for(d=0;d<e.length;d++)(c=e[d])(a)}function i(a){return function(b,c,d,e){if(!(q.levelOrder.indexOf(a)<q.levelOrder.indexOf(q.loggingLevel))){var f=e||{},i=g(a,c,b,d,f.appenders);h(i,f.handlers)}}}function j(c,d,e,f){function g(a){if(a===b||null===a)return{url:q.constant.UNKNOWN_LOG,lineNumber:q.constant.UNKNOWN_LOG,columnNumber:q.constant.UNKNOWN_LOG};for(var c,d=a.replace(/(\r\n|\n|\r)/gm,"").match(w),e=[],f=null!==d&&d!==b;f;)d=d[1].match(w),c=null!==d?d[1]:null,e=null!==d?d:e,f=null!==d&&d!==b;return{url:e.length>=1?e[1]:q.constant.UNKNOWN_LOG,lineNumber:e.length>=1?e[2]:q.constant.UNKNOWN_LOG,columnNumber:e.length>=1?e[3]:q.constant.UNKNOWN_LOG}}function h(a){return 10>a?"0"+a:a}var i,j,k,l,m=d?d.stack:(new Error).stack||null,n=q.constant.UNKNOWN_LOG,o=e||d.message||q.constant.UNKNOWN_LOG,p=new Date,r=a.location.href,s=q.constant.UNKNOWN_LOG,t=q.constant.UNKNOWN_LOG,u=a.navigator.language||q.constant.UNKNOWN_LOG,v=a.document.characterSet||a.document.charset||a.document.defaultCharset||q.constant.UNKNOWN_LOG,w=/(http\:\/\/.*\/.*\.js)\:(\d+)\:(\d+)(.*)$/;if(l=p.toISOString?p.toISOString():function(){return p.getUTCFullYear()+"-"+h(p.getUTCMonth()+1)+"-"+h(p.getUTCDate())+"T"+h(p.getUTCHours())+":"+h(p.getUTCMinutes())+":"+h(p.getUTCSeconds())+"."+(p.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z"}(),d===b||null===d||null===d.stack)if("function"==typeof a.document.getElementsByTagName){var x=a.document.getElementsByTagName("script");n=(a.document.currentScript||x[x.length-1]).src}else n=q.constant.UNKNOWN_LOG;else k=g(m),n=k.url,s=k.lineNumber,t=k.columnNumber;i={characterSet:v,columnNumber:t,language:u,lineNumber:s,logDate:l,msg:"["+c+"]: "+o,pageURL:r,stack:m||q.constant.UNKNOWN_LOG,type:"jserror",scriptURL:n};for(j in f)f.hasOwnProperty(j)&&null!==f[j]&&f[j]!==b&&(i[j]=f[j]);return i}function k(a){return function(b){var c,d=[],e=new Image;for(c in b)b.hasOwnProperty(c)&&d.push(c+"="+q.utils.fixedEncodeURIComponent(b[c]+"\n"));e.src=a+"?"+d.join("&")}}function l(b){var c,d="";if(console)if(a.attachEvent){for(c in b)b.hasOwnProperty(c)&&(d+=c+"="+b[c]+"\n");console.error(d)}else"undefined"!=typeof b.msg?console.error(b.msg,b):console.error(b)}function m(a,c,d){if(a&&a._wrapper)return a._wrapper;var e=function(){try{return a.apply(c||this,arguments)}catch(e){q.error(e.message,e,b,d)}};return a._wrapper=e,e}function n(a,b,c,d,e){var f;return u&&"function"==typeof u&&(f=u.apply(this,arguments)),q.fatal(a,e,{url:b,lineNumber:c,columnNumber:d}),f}function o(){a.onerror=n}function p(){var c,d,e=[];a.EventTarget?(c=a.EventTarget.prototype.addEventListener,d=a.EventTarget.prototype.removeEventListener,a.EventTarget.prototype.addEventListener=function(a,b,d){return c.call(this,a,q.watch(b),d)},a.EventTarget.prototype.removeEventListener=function(a,b,c){return d.call(this,a,q.watch(b),c)}):a.Element&&a.Element.prototype&&a.Element.prototype.attachEvent&&a.Element.prototype.addEventListener===b&&(Event.prototype.preventDefault||(Event.prototype.preventDefault=function(){this.returnValue=!1}),Event.prototype.stopPropagation||(Event.prototype.stopPropagation=function(){this.cancelBubble=!0}),Element.prototype.addEventListener||(c=function(a,b){var c=this,d=function(a){a.target=a.srcElement,a.currentTarget=c,b.handleEvent?b.handleEvent(a):b.call(c,a)};"DOMContentLoaded"!==a&&(this.attachEvent("on"+a,q.watch(d)),e.push({object:this,type:a,listener:b,wrapper:d}))},d=function(a,b){for(var c,d=0;d<e.length;){if(c=e[d],c.object==this&&c.type===a&&c.listener==b){"DOMContentLoaded"!==a&&this.detachEvent("on"+a,q.watch(c.wrapper)),e.splice(d,1);break}++d}},Element.prototype.addEventListener=c,Element.prototype.removeEventListener=d))}var q={};q.Appender={},q.Handler={},q.constant={},q.utils={},q.version="1.0.2",q.constant.UNKNOWN_LOG="?";var r={FATAL:"FATAL",ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG"};q.level=r,q.levelOrder=[r.DEBUG,r.INFO,r.WARN,r.ERROR,r.FATAL],"undefined"==typeof q.levelOrder.indexOf&&(q.levelOrder.indexOf=function(a,b){var c;if(null==this)throw new TypeError('"this" is null or not defined');var d=Object(this),e=d.length>>>0;if(0===e)return-1;var f=+b||0;if(Math.abs(f)===1/0&&(f=0),f>=e)return-1;for(c=Math.max(f>=0?f:e-Math.abs(f),0);e>c;){if(c in d&&d[c]===a)return c;c++}return-1}),q.utils.fixedEncodeURIComponent=c;var s=[],t=[];q.debug=i(q.level.DEBUG),q.info=i(q.level.INFO),q.warn=i(q.level.WARN),q.error=i(q.level.ERROR),q.fatal=i(q.level.FATAL),q.addHandler=f,q.addAppender=e,q.init=d,q.loggingLevel=q.level.DEBUG,q.Appender.standardLogAppender=j,q.Handler.beaconLogHandler=k,q.Handler.consoleLogHandler=l,q.watch=function(a,b){return m(a,b)},q.attempt=function(a,b){var c=Array.prototype.slice.call(arguments,2);return m(a,b)(c)},q.localWatch=function(a,b,c){return m(a,c,b)},q.localAttempt=function(a,b,c){var d=Array.prototype.slice.call(arguments,3);return m(a,c,b)(d)};var u=a.onerror;q.setUpOnErrorHandler=o,q.setUpEventListening=p,a.navigator||(a.navigator={}),a.location||(a.location={}),a.document||(a.document={}),a.navigator||(a.navigator={}),q._window=a,"function"==typeof define&&define.amd?(a.Canadarm=q,define("canadarm",[],function(){return q})):"object"==typeof module?module.exports=q:"object"==typeof exports?exports=q:a.Canadarm=q}("undefined"!=typeof window?window:this); | ||
//# sourceMappingURL=canadarm.min.js.map |
@@ -0,1 +1,6 @@ | ||
1.0.2 | ||
------------- | ||
* Fix issue #20: Custom log breaks in node context. | ||
* Fix issue #13: do not log message when logAttributes.msg is undefined. | ||
1.0.1 | ||
@@ -2,0 +7,0 @@ ------------ |
* Garry Polley [@garrypolley][garry-polley] | ||
* Mike Hemesath [@mhemesath][mike-hemesath] | ||
* Logan McCamon [@loganom][logan-mccamon] | ||
* John Bäckström [@johnphoto][johnphoto] | ||
[garry-polley]: https://github.com/garrypolley | ||
[mike-hemesath]: https://github.com/mhemesath | ||
[mike-hemesath]: https://github.com/mhemesath | ||
[logan-mccamon]: https://github.com/loganom | ||
[johnphoto]: https://github.com/JohnPhoto |
@@ -9,3 +9,3 @@ (function (window, undefined){ | ||
Canadarm.utils = {}; | ||
Canadarm.version = '1.0.1'; | ||
Canadarm.version = '1.0.2'; | ||
@@ -473,4 +473,9 @@ /** | ||
if (exception === undefined || exception === null || exception.stack === null) { | ||
var scripts = window.document.getElementsByTagName('script'); | ||
scriptURL = (window.document.currentScript || scripts[scripts.length - 1]).src; | ||
if (typeof window.document.getElementsByTagName === 'function') { | ||
var scripts = window.document.getElementsByTagName('script'); | ||
scriptURL = (window.document.currentScript || scripts[scripts.length - 1]).src; | ||
} else { | ||
// Probably not in a browser, return unknown log. | ||
scriptURL = Canadarm.constant.UNKNOWN_LOG; | ||
} | ||
@@ -599,4 +604,6 @@ } else { | ||
console.error(logValues); | ||
} else if (typeof logAttributes.msg !== 'undefined') { | ||
console.error(logAttributes.msg, logAttributes); | ||
} else { | ||
console.error(logAttributes.msg, logAttributes); | ||
console.error(logAttributes); | ||
} | ||
@@ -603,0 +610,0 @@ } |
@@ -114,4 +114,9 @@ /* globals document */ | ||
if (exception === undefined || exception === null || exception.stack === null) { | ||
var scripts = window.document.getElementsByTagName('script'); | ||
scriptURL = (window.document.currentScript || scripts[scripts.length - 1]).src; | ||
if (typeof window.document.getElementsByTagName === 'function') { | ||
var scripts = window.document.getElementsByTagName('script'); | ||
scriptURL = (window.document.currentScript || scripts[scripts.length - 1]).src; | ||
} else { | ||
// Probably not in a browser, return unknown log. | ||
scriptURL = Canadarm.constant.UNKNOWN_LOG; | ||
} | ||
@@ -118,0 +123,0 @@ } else { |
@@ -43,4 +43,6 @@ /** | ||
console.error(logValues); | ||
} else if (typeof logAttributes.msg !== 'undefined') { | ||
console.error(logAttributes.msg, logAttributes); | ||
} else { | ||
console.error(logAttributes.msg, logAttributes); | ||
console.error(logAttributes); | ||
} | ||
@@ -47,0 +49,0 @@ } |
@@ -9,2 +9,2 @@ (function (window, undefined){ | ||
Canadarm.utils = {}; | ||
Canadarm.version = '1.0.1'; | ||
Canadarm.version = '1.0.2'; |
{ | ||
"name": "canadarm", | ||
"description": "A JavaScript logger that works for you!", | ||
"version": "1.0.1", | ||
"version": "1.0.2", | ||
"license": "Apache-2.0", | ||
@@ -6,0 +6,0 @@ "author": { |
@@ -17,5 +17,13 @@ # canadarm | ||
Install Canadarm by using one of the files located in the [build][build-dir] folder. Alternatively, | ||
you may also use `npm install canadarm`. | ||
Canadarm can be installed in the following ways: | ||
* Use one of the files located in the [build][build-dir] folder. | ||
* Use [npm][npm]: | ||
`npm install canadarm` | ||
* Reference a hosted version provided by [jsdelivr][jsdelivr]: | ||
`https://cdn.jsdelivr.net/canadarm/1.0.1/canadarm.min.js` | ||
# Using canadarm | ||
@@ -349,1 +357,3 @@ | ||
[google-group-url]: https://groups.google.com/forum/#!forum/canadarm | ||
[npm]: https://www.npmjs.com/package/canadarm | ||
[jsdelivr]: https://github.com/jsdelivr/jsdelivr/tree/master/files/canadarm |
@@ -10,6 +10,8 @@ # How to release | ||
2. `git tag -a NEW-TAG -m MESSAGE ABOUT RELEASE` (be sure it follows [semver][semantic-versioning]) | ||
3. `npm package` (make sure it's uploaded to [npm][npm-project]) | ||
4. Update `master` to a new minor version | ||
3. `npm publish` (make sure it's uploaded to [npm][npm-project]) | ||
4. Update [installation][installation-doc] documentation in README (jsdelivr link). | ||
5. Update `master` to a new minor version | ||
[npm-project]: https://www.npmjs.com/package/canadarm | ||
[semantic-versioning]: http://semver.org/ | ||
[installation-doc]: https://github.com/cerner/canadarm#installing-canadarm |
@@ -99,3 +99,17 @@ var assert = require('assert'), | ||
}); | ||
describe('works without getElementsByTagName in a node context', function() { | ||
beforeEach(function () { | ||
delete Canadarm._window.document.getElementsByTagName; | ||
}); | ||
it('returns without error', function () { | ||
var actualAttributes = Canadarm.Appender.standardLogAppender( | ||
Canadarm.level.INFO, | ||
errorObject, | ||
'm' | ||
); | ||
assert.equal(actualAttributes.scriptURL, '?'); | ||
}); | ||
}); | ||
}); | ||
}); |
@@ -9,6 +9,10 @@ /* global Canadarm: true */ | ||
describe('consoleLogHandler', function (){ | ||
var consoleLogSpy = sinon.spy(console, 'error'); | ||
afterEach(function() { | ||
consoleLogSpy.reset(); | ||
}); | ||
it('logs the attributes expected to the console with an = separator', function (){ | ||
var consoleLogSpy = sinon.spy(console, 'error'), | ||
fakeLog = {one: 'one', two: 'two', msg: 'msg'}, | ||
logValues = '', key; | ||
var fakeLog = {one: 'one', two: 'two', msg: 'msg'}; | ||
@@ -20,3 +24,12 @@ Canadarm.Handler.consoleLogHandler(fakeLog); | ||
}); | ||
it('logs the attributes expected when the key "msg" is undefined', function() { | ||
var fakeLog = {one: 'one', two: 'two'}; | ||
Canadarm.Handler.consoleLogHandler(fakeLog); | ||
assert(consoleLogSpy.calledOnce); | ||
assert(consoleLogSpy.calledWith(fakeLog)); | ||
}); | ||
}); | ||
}); | ||
}); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
311238
0.95%3422
1.21%358
2.87%