axe 12.1.1 → 12.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/axe.js +25 -11
- package/dist/axe.min.js +1 -1
- package/lib/index.js +19 -5
- package/package.json +7 -7
package/dist/axe.js
CHANGED
|
@@ -1287,7 +1287,7 @@ module.exports = function unset(obj, prop) {
|
|
|
1287
1287
|
module.exports={
|
|
1288
1288
|
"name": "axe",
|
|
1289
1289
|
"description": "Axe is a logger-agnostic wrapper that normalizes logs regardless of argument style. Great for large development teams, old and new projects, and works with Pino, Bunyan, Winston, console, and more. It is lightweight, performant, highly-configurable, and automatically adds OS, CPU, and Git information to your logs. It supports hooks (useful for masking sensitive data) and dot-notation remapping, omitting, and picking of log metadata properties. Made for Forward Email, Lad, and Cabin.",
|
|
1290
|
-
"version": "12.
|
|
1290
|
+
"version": "12.2.1",
|
|
1291
1291
|
"author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com)",
|
|
1292
1292
|
"browser": {
|
|
1293
1293
|
"parse-app-info": false
|
|
@@ -1321,14 +1321,14 @@ module.exports={
|
|
|
1321
1321
|
"@babel/cli": "^7.21.5",
|
|
1322
1322
|
"@babel/core": "^7.21.8",
|
|
1323
1323
|
"@babel/preset-env": "^7.21.5",
|
|
1324
|
-
"@commitlint/cli": "^17.6.
|
|
1325
|
-
"@commitlint/config-conventional": "^17.6.
|
|
1324
|
+
"@commitlint/cli": "^17.6.3",
|
|
1325
|
+
"@commitlint/config-conventional": "^17.6.3",
|
|
1326
1326
|
"ava": "^5.2.0",
|
|
1327
1327
|
"babelify": "^10.0.0",
|
|
1328
1328
|
"browserify": "^17.0.0",
|
|
1329
1329
|
"consola": "^3.1.0",
|
|
1330
1330
|
"cross-env": "^7.0.3",
|
|
1331
|
-
"eslint": "^8.
|
|
1331
|
+
"eslint": "^8.41.0",
|
|
1332
1332
|
"eslint-config-xo-lass": "^2.0.1",
|
|
1333
1333
|
"eslint-plugin-compat": "^4.1.4",
|
|
1334
1334
|
"eslint-plugin-node": "^11.1.0",
|
|
@@ -1340,12 +1340,12 @@ module.exports={
|
|
|
1340
1340
|
"lint-staged": "^13.2.2",
|
|
1341
1341
|
"lodash": "^4.17.21",
|
|
1342
1342
|
"nyc": "^15.1.0",
|
|
1343
|
-
"pino": "^8.
|
|
1343
|
+
"pino": "^8.14.1",
|
|
1344
1344
|
"remark-cli": "^11.0.0",
|
|
1345
1345
|
"remark-preset-github": "^4.0.4",
|
|
1346
|
-
"rimraf": "^5.0.
|
|
1346
|
+
"rimraf": "^5.0.1",
|
|
1347
1347
|
"signale": "^1.4.0",
|
|
1348
|
-
"sinon": "^15.0
|
|
1348
|
+
"sinon": "^15.1.0",
|
|
1349
1349
|
"tinyify": "3.0.0",
|
|
1350
1350
|
"xo": "^0.54.2"
|
|
1351
1351
|
},
|
|
@@ -1472,6 +1472,7 @@ function dotifyToArray(obj) {
|
|
|
1472
1472
|
const newKey = current ? current + '.' + convertedKey : convertedKey; // joined key with dot
|
|
1473
1473
|
// if (value && typeof value === 'object' && !(value instanceof Date) && !ObjectID.isValid(value)) {
|
|
1474
1474
|
if (isPlainObject(value)) {
|
|
1475
|
+
res.push(convertedKey);
|
|
1475
1476
|
recurse(value, newKey); // it's a nested object, so do it again
|
|
1476
1477
|
} else {
|
|
1477
1478
|
res.push(newKey);
|
|
@@ -1844,7 +1845,7 @@ class Axe {
|
|
|
1844
1845
|
if (index !== -1) {
|
|
1845
1846
|
let i = dotified.length;
|
|
1846
1847
|
while (i--) {
|
|
1847
|
-
if (
|
|
1848
|
+
if (dotified[i] === key.slice(0, -1)) dotified.splice(i, 1);else if (dotified[i].indexOf(key) === 0) dotified.splice(i, 1);
|
|
1848
1849
|
}
|
|
1849
1850
|
}
|
|
1850
1851
|
}
|
|
@@ -1861,15 +1862,28 @@ class Axe {
|
|
|
1861
1862
|
// (and it doesn't also do bigints yet)
|
|
1862
1863
|
//
|
|
1863
1864
|
for (const prop of dotified) {
|
|
1864
|
-
if (isSymbol(prop)
|
|
1865
|
+
if (isSymbol(prop)) {
|
|
1866
|
+
if (meta[prop] !== undefined) pickedSymbols.push([prop, meta[prop]]);
|
|
1867
|
+
} else if (meta[Symbol.for(prop)] !== undefined) {
|
|
1868
|
+
pickedSymbols.push([Symbol.for(prop), meta[Symbol.for(prop)]]);
|
|
1869
|
+
}
|
|
1865
1870
|
}
|
|
1866
1871
|
|
|
1867
1872
|
//
|
|
1868
1873
|
// now we call pick-deep using the final array
|
|
1869
1874
|
//
|
|
1870
|
-
// NOTE: this does not pick symbols nor
|
|
1875
|
+
// NOTE: this does not pick symbols, bigints, nor streams
|
|
1876
|
+
// <https://github.com/strikeentco/pick-deep/issues/2>
|
|
1877
|
+
// <https://github.com/strikeentco/pick-deep/issues/2>
|
|
1878
|
+
//
|
|
1879
|
+
// NOTE: this is wrapped in try/catch in case similar errors occur
|
|
1880
|
+
// <https://github.com/stripe/stripe-node/issues/1796>
|
|
1871
1881
|
//
|
|
1872
|
-
|
|
1882
|
+
try {
|
|
1883
|
+
meta = pickDeep(meta, dotified);
|
|
1884
|
+
} catch (err) {
|
|
1885
|
+
this.config.logger.error(err);
|
|
1886
|
+
}
|
|
1873
1887
|
|
|
1874
1888
|
//
|
|
1875
1889
|
// if there were any top-level symbols to be
|
package/dist/axe.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Axe=e()}}((function(){!function(e){"use strict";e.console||(e.console={});for(var t,r,n=e.console,o=function(){},i=["memory"],s="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");t=i.pop();)n[t]||(n[t]={});for(;r=s.pop();)n[r]||(n[r]=o)}("undefined"==typeof window?this:window);var e={hostname:function(){return"undefined"!=typeof location?location.hostname:""}},t=function(e){var t=Array.prototype.slice.call(arguments,1);return t.length&&(e=e.toString().replace(/(%?)(%([jds]))/g,(function(e,r,n,o){var i=t.shift();switch(o){case"s":i=""+i;break;case"d":i=Number(i);break;case"j":i=JSON.stringify(i)}return r?(t.unshift(i),e):i}))),t.length&&(e=e.toString()+" "+t.join(" ")),""+e.toString().replace(/%{2,2}/g,"%")},r=["%s","%d","%i","%f","%j","%o","%O","%%"],n=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(n=e,"[object Object]"!==Object.prototype.toString.call(n)||!t)return e;var n;const o=Array.isArray(t)?t:String(t).split(r),{length:i}=o;return i<2?e[o[0]]:((e,t,r)=>{for(let n=0;n<r;n++){if(null===e)return;const r=e[t[n]];if(void 0===r)return;e=r}return e})(e,o,i)},o=function(e){switch(Object.prototype.toString.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}},i="undefined"!=typeof Symbol&&Symbol,s={},c=Object.prototype.toString;if("function"==typeof i&&"function"==typeof Symbol&&"symbol"==typeof i("foo")&&"symbol"==typeof Symbol("bar")&&function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}()){var a=Symbol.prototype.toString,f=/^Symbol\(.*\)$/;s=function(e){if("symbol"==typeof e)return!0;if("[object Symbol]"!==c.call(e))return!1;try{return function(e){return"symbol"==typeof e.valueOf()&&f.test(a.call(e))}(e)}catch(t){return!1}}}else s=function(e){return!1};var l=e=>{if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype};const{hasOwnProperty:u}=Object.prototype,{propertyIsEnumerable:p}=Object,g=(e,t,r)=>Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0}),y=this,h={concatArrays:!1,ignoreUndefined:!1},m=e=>{const t=[];for(const r in e)u.call(e,r)&&t.push(r);if(Object.getOwnPropertySymbols){const r=Object.getOwnPropertySymbols(e);for(const n of r)p.call(e,n)&&t.push(n)}return t};function d(e){return Array.isArray(e)?function(e){const t=e.slice(0,0);return m(e).forEach(r=>{g(t,r,d(e[r]))}),t}(e):l(e)?function(e){const t=null===Object.getPrototypeOf(e)?Object.create(null):{};return m(e).forEach(r=>{g(t,r,d(e[r]))}),t}(e):e}const b=(e,t,r,n)=>(r.forEach(r=>{void 0===t[r]&&n.ignoreUndefined||(r in e&&e[r]!==Object.getPrototypeOf(e)?g(e,r,v(e[r],t[r],n)):g(e,r,d(t[r])))}),e);function v(e,t,r){return r.concatArrays&&Array.isArray(e)&&Array.isArray(t)?((e,t,r)=>{let n=e.slice(0,0),o=0;return[e,t].forEach(t=>{const i=[];for(let r=0;r<t.length;r++)u.call(t,r)&&(i.push(String(r)),g(n,o++,t===e?t[r]:d(t[r])));n=b(n,t,m(t).filter(e=>!i.includes(e)),r)}),n})(e,t,r):l(t)&&l(e)?b(e,t,m(t),r):d(t)}var O={};const A=async(e,t)=>{const r=[];let n=0;for(const o of e)r.push(await t(await o,n++));return r};(O=A).default=A;var j={};function w(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return S(e,void 0);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?S(e,void 0):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,i=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw i}}}}function S(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var E=function e(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(!o(t))throw new Error("`err` must be an Error");if(!Array.isArray(r))throw new TypeError("`fields` must be an Array");const n={};var i,s=w(new Set([...Object.getOwnPropertyNames(Object.getPrototypeOf(t)),...Object.getOwnPropertyNames(t)]));try{for(s.s();!(i=s.n()).done;){const e=i.value;"function"!=typeof t[e]&&(n[e]=t[e])}}catch(t){s.e(t)}finally{s.f()}return!n.name&&t.constructor.name&&(n.name=t.constructor.name),Array.isArray(t.errors)&&(n.errors=t.errors.map(t=>o(t)?e(t,r):t)),Array.isArray(r)&&r.length>0?n.filter(e=>r.includes(e)):n};const _=e=>"object"==typeof e||"function"==typeof e,T=(e,t)=>"__proto__"==e||"constructor"==e&&"function"==typeof t.constructor;var P=function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".";if(!_(e)||!t||!t.length)return e;const o=Array.isArray(t)?t:String(t).split(n);if(T(o[0],e))return e;const{length:i}=o;return 1===i?(e[o[0]]=r,e):((e,t,r,n)=>{let o=e,i=0;for(;i<r-1;i++){const e=t[i];T(e,o)||(o=_(o[e])?o[e]:o[e]={})}return o[t[i]]=n,e})(e,o,i,r)},k=function(e){return null!=e&&"object"==typeof e&&!1===Array.isArray(e)};function x(e,t,r){return"function"==typeof r.join?r.join(e):e[0]+t+e[1]}function I(e,t,r){return"function"!=typeof r.isValid||r.isValid(e,t)}function L(e){return k(e)||Array.isArray(e)||"function"==typeof e}var M=Object.prototype.toString;function F(e){return"function"==typeof e.constructor?e.constructor.name:null}var N=function e(t){switch(function(e){if(void 0===e)return"undefined";if(null===e)return"null";var t=typeof e;if("boolean"===t)return"boolean";if("string"===t)return"string";if("number"===t)return"number";if("symbol"===t)return"symbol";if("function"===t)return"GeneratorFunction"===F(e)?"generatorfunction":"function";if(function(e){return Array.isArray?Array.isArray(e):e instanceof Array}(e))return"array";if(function(e){return!(!e.constructor||"function"!=typeof e.constructor.isBuffer)&&e.constructor.isBuffer(e)}(e))return"buffer";if(function(e){try{if("number"==typeof e.length&&"function"==typeof e.callee)return!0}catch(t){if(-1!==t.message.indexOf("callee"))return!0}return!1}(e))return"arguments";if(function(e){return e instanceof Date||"function"==typeof e.toDateString&&"function"==typeof e.getDate&&"function"==typeof e.setDate}(e))return"date";if(function(e){return e instanceof Error||"string"==typeof e.message&&e.constructor&&"number"==typeof e.constructor.stackTraceLimit}(e))return"error";if(function(e){return e instanceof RegExp||"string"==typeof e.flags&&"boolean"==typeof e.ignoreCase&&"boolean"==typeof e.multiline&&"boolean"==typeof e.global}(e))return"regexp";switch(F(e)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(e){return"function"==typeof e.throw&&"function"==typeof e.return&&"function"==typeof e.next}(e))return"generator";switch(t=M.call(e)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return t.slice(8,-1).toLowerCase().replace(/\s/g,"")}(t)){case"boolean":case"date":case"function":case"null":case"number":return!0;case"undefined":return!1;case"regexp":return"(?:)"!==t.source&&""!==t.source;case"buffer":return""!==t.toString();case"error":return""!==t.message;case"string":case"arguments":return 0!==t.length;case"file":case"map":case"set":return 0!==t.size;case"array":case"object":for(const r of Object.keys(t))if(e(t[r]))return!0;return!1;default:return!0}},D=function(e,t,r){return!(null==(n=e)||"object"!=typeof n&&"function"!=typeof n&&!Array.isArray(n)||"string"!=typeof t&&!Array.isArray(t))&&N(function(e,t,r){if(k(r)||(r={default:r}),!L(e))return void 0!==r.default?r.default:e;"number"==typeof t&&(t=String(t));const n=Array.isArray(t),o="string"==typeof t,i=r.separator||".",s=r.joinChar||("string"==typeof i?i:".");if(!o&&!n)return e;if(o&&t in e)return I(t,e,r)?e[t]:r.default;let c=n?t:function(e,t,r){return"function"==typeof r.split?r.split(e):e.split(t)}(t,i,r),a=c.length,f=0;do{let t=c[f];for("number"==typeof t&&(t=String(t));t&&"\\"===t.slice(-1);)t=x([t.slice(0,-1),c[++f]||""],s,r);if(t in e){if(!I(t,e,r))return r.default;e=e[t]}else{let n=!1,o=f+1;for(;o<a;)if(n=(t=x([t,c[o++]],s,r))in e){if(!I(t,e,r))return r.default;e=e[t],f=o-1;break}if(!n)return r.default}}while(++f<a&&L(e));return f===a?e:r.default}(e,t,r));var n};const C=e=>{if((e=>"__proto__"===e||"constructor"===e||"prototype"===e)(e))throw new Error(`Cannot set unsafe key: "${e}"`)};var B=function(e,t){if(null==(r=e)||"object"!=typeof r||!1!==Array.isArray(r))throw new TypeError("expected an object.");var r,n=Array.isArray(t);if(!n&&e.hasOwnProperty(t))return delete e[t],!0;if(D(e,t)){for(var o=n?t.slice():t.split("."),i=o.pop();o.length&&"\\"===o[o.length-1].slice(-1);)i=o.pop().slice(0,-1)+"."+i;for(;o.length;)t=o.shift(),C(t),e=e[t];return delete e[i]}return!0},X={};Object.defineProperty(X,"__esModule",{value:!0}),X.boolean=void 0,X.boolean=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1"].includes(e.trim().toLowerCase());case"[object Number]":return 1===e.valueOf();case"[object Boolean]":return e.valueOf();default:return!1}};var H={};Object.defineProperty(H,"__esModule",{value:!0}),H.isBooleanable=void 0,H.isBooleanable=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1","false","f","no","n","off","0"].includes(e.trim().toLowerCase());case"[object Number]":return[0,1].includes(e.valueOf());case"[object Boolean]":return!0;default:return!1}};var R={};Object.defineProperty(R,"__esModule",{value:!0}),R.boolean=void 0,Object.defineProperty(R,"boolean",{enumerable:!0,get:function(){return X.boolean}}),Object.defineProperty(R,"isBooleanable",{enumerable:!0,get:function(){return H.isBooleanable}});var U,K,W,z="12.1.1",$=U={};function V(){throw new Error("setTimeout has not been defined")}function G(){throw new Error("clearTimeout has not been defined")}function J(e){if(K===setTimeout)return setTimeout(e,0);if((K===V||!K)&&setTimeout)return K=setTimeout,setTimeout(e,0);try{return K(e,0)}catch(t){try{return K.call(null,e,0)}catch(t){return K.call(this,e,0)}}}!function(){try{K="function"==typeof setTimeout?setTimeout:V}catch(e){K=V}try{W="function"==typeof clearTimeout?clearTimeout:G}catch(e){W=G}}();var q,Q=[],Y=!1,Z=-1;function ee(){Y&&q&&(Y=!1,q.length?Q=q.concat(Q):Z=-1,Q.length&&te())}function te(){if(!Y){var e=J(ee);Y=!0;for(var t=Q.length;t;){for(q=Q,Q=[];++Z<t;)q&&q[Z].run();Z=-1,t=Q.length}q=null,Y=!1,function(e){if(W===clearTimeout)return clearTimeout(e);if((W===G||!W)&&clearTimeout)return W=clearTimeout,clearTimeout(e);try{W(e)}catch(t){try{return W.call(null,e)}catch(t){return W.call(this,e)}}}(e)}}function re(e,t){this.fun=e,this.array=t}function ne(){}$.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];Q.push(new re(e,t)),1!==Q.length||Y||J(te)},re.prototype.run=function(){this.fun.apply(null,this.array)},$.title="browser",$.browser=!0,$.env={},$.argv=[],$.version="",$.versions={},$.on=ne,$.addListener=ne,$.once=ne,$.off=ne,$.removeListener=ne,$.removeAllListeners=ne,$.emit=ne,$.prependListener=ne,$.prependOnceListener=ne,$.listeners=function(e){return[]},$.binding=function(e){throw new Error("process.binding is not supported")},$.cwd=function(){return"/"},$.chdir=function(e){throw new Error("process.chdir is not supported")},$.umask=function(){return 0};var oe={};return function(i){(function(){const{boolean:c}=R,a=Symbol.for("axe.silent"),f=new Set(["config","log"]),u=["trace","debug","info","warn","error","fatal"],p={warning:"warn",err:"error"},g="`level` invalid, must be: "+u.join(", "),m=i.env.HOSTNAME||e.hostname();function b(e){if("object"!=typeof e||null===e)return!1;const t=Object.getPrototypeOf(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e||s(e))}function A(e){return null==e||"object"==typeof e&&0===Reflect.ownKeys(e).length||"string"==typeof e&&0===e.trim().length}function w(e){return void 0===e}function S(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function _(e){return"string"==typeof e}oe=class{constructor(){var e=this;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const r={};if(i.env.AXE_REMAPPED_META_FIELDS){const e=i.env.AXE_REMAPPED_META_FIELDS.split(",").map(e=>e.split(":"));for(const[t,n]of e)r[t]=n}let n=i.env.AXE_OMIT_META_FIELDS;"string"==typeof n&&(n=n.split(",").map(e=>e.trim())),Array.isArray(n)||(n=[]);let o=i.env.AXE_PICK_META_FIELDS;"string"==typeof o&&(o=o.split(",").map(e=>e.trim())),Array.isArray(o)||(o=[]),this.config=function(){const e=v(d(h),this!==y&&this||{},h);let t={_:{}};for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];for(const i of n)if(void 0!==i){if(!l(i))throw new TypeError("`"+i+"` is not an Option Object");t=v(t,{_:i},e)}return t._}({showStack:!i.env.AXE_SHOW_STACK||c(i.env.AXE_SHOW_STACK),meta:Object.assign({show:!i.env.AXE_SHOW_META||c(i.env.AXE_SHOW_META),remappedFields:r,omittedFields:n,pickedFields:o,cleanupRemapping:!0,hideHTTP:"is_http",hideMeta:"hide_meta"},"object"==typeof t.meta?t.meta:{}),version:z,silent:!1,logger:console,name:m,level:"info",levels:["info","warn","error","fatal"],appInfo:!i.env.AXE_APP_INFO||c(i.env.AXE_APP_INFO),hooks:Object.assign({pre:[],post:[]},"object"==typeof t.hooks?t.hooks:{})},t),this.appInfo=!!this.config.appInfo&&"function"==typeof j&&j(),this.log=this.log.bind(this);const s=Object.keys(this.config.logger).filter(e=>!f.has(e));for(const i of s)this[i]=this.config.logger[i];for(const i of u)"function"!=typeof this.config.logger[i]&&("fatal"===i?this.config.logger.fatal=this.config.logger.error||this.config.logger.info||this.config.logger.log:this.config.logger[i]=this.config.logger.info||this.config.logger.log),this[i]=function(){for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return e.log(i,...Array.prototype.slice.call(r))};this.setLevel=this.setLevel.bind(this),this.getNormalizedLevel=this.getNormalizedLevel.bind(this),this.setName=this.setName.bind(this),this.config.name&&this.setName(this.config.name),this.setLevel(this.config.level),this.err=this.error,this.warning=this.warn,this.pre=function(e,t){this.config.hooks.pre.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))},this.post=function(e,t){this.config.hooks.post.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))}}setLevel(e){if(!_(e)||-1===u.indexOf(e))throw new Error(g);_(this.config.logger.logLevel)?this.config.logger.logLevel=e:this.config.logger.level=e,this.config.levels=u.slice(u.indexOf(e))}getNormalizedLevel(e){return _(e)?_(p[e])?p[e]:-1===u.indexOf(e)?"info":e:"info"}setName(e){if(!_(e))throw new Error("`name` must be a String");_(this.config.logger.scope)?this.config.logger.scope=e:this.config.logger.name=e}log(e,i,f){const l=[],g=[];w(e)||l.push(e),w(i)||l.push(i),w(f)||l.push(f);for(var y=arguments.length,h=new Array(y>3?y-3:0),m=3;m<y;m++)h[m-3]=arguments[m];for(const t of Array.prototype.slice.call(h))l.push(t);let d=0;if(_(e)&&_(p[e])?e=p[e]:o(e)?(f=i,i=e,e="error"):_(e)&&-1!==u.indexOf(e)||(f=i,i=e,e=this.getNormalizedLevel(e),d=-1),-1===this.config.levels.indexOf(e))return;let v,j=!1;if((S(i)||Array.isArray(i))&&_(f)){j=!0;const e=f;f=i,i=_(e)&&l.length>=3+d?t(...l.slice(2+d)):e}if(w(i)&&(i=e),1!==l.slice(1+d).length||_(i)||o(i))if(!j&&l.length>=4+d){i=void 0,f={};const r=[];for(const e of l)o(e)?g.push(e):_(e)&&r.push(e);0===g.length&&r.length>0?i=t(...r):g.length>0&&"log"===e&&(e="error")}else if(!j&&l.length===3+d&&_(i)&&r.some(e=>-1!==i.indexOf(e)))i=t(i,f),f={};else if(o(i)){if(o(f)){g.push(f);for(const e of l.slice(2+d))f!==e&&o(e)&&g.push(e);f={}}}else o(f)?(g.push(f),f={}):S(f)||w(f)||null===f?_(i)||(i=t(i)):(i=t(i,f),f={});else f={message:i},i=e;w(f)||S(f)?S(f)||(f={}):f={original_meta:f},o(i)&&(g.unshift(i),i=void 0),S(f.err)&&(o(f.err)&&g.push(f.err),f.original_err=o(f.err)?E(f.err):f.err),g.length>0&&(1===g.length?v=g[0]:((v=new Error([...new Set(g.map(e=>e.message).filter(Boolean))].join("; "))).stack=[...new Set(g.map(e=>e.stack).filter(Boolean))].join("\n\n"),v.errors=g),f.err=E(v),_(i)||(i=v.message)),f.level=e,this.appInfo&&(f.app=this.appInfo);const T=-1===d?"log":e;for(const t of this.config.hooks.pre)[v,i,f]=t(T,v,i,f);const k=c(f[a]);if(!A(this.config.meta.remappedFields))for(const t of Reflect.ownKeys(this.config.meta.remappedFields))if(P(f,this.config.meta.remappedFields[t],n(f,t)),B(f,t),this.config.meta.cleanupRemapping){const e=t.lastIndexOf(".");if(-1===e)continue;const r=t.slice(0,e);A(n(f,r))&&B(f,r)}if(!A(this.config.meta.omittedFields)||!A(this.config.meta.pickedFields)){const e=function(e){const t=[];return function e(r,n){for(const o of Reflect.ownKeys(r)){const i=r[o],c=s(o)?Symbol.keyFor(o)||o.description:o,a=n?n+"."+c:c;b(i)?e(i,a):t.push(a)}}(e),t}(f);if(!A(this.config.meta.omittedFields))for(const r of this.config.meta.omittedFields){let t=e.length;for(;t--;)(e[t]===r||!s(e[t])&&0===e[t].indexOf(r+"."))&&e.splice(t,1)}const t=[];if(!A(this.config.meta.pickedFields))for(const r of this.config.meta.pickedFields){if(s(r))f[r]&&t.push([r,f[r]]);else{const t=r.indexOf("."),n=r.slice(0,t+1);if(-1!==t){let t=e.length;for(;t--;)s(e[t])||0!==e[t].indexOf(n)||e.splice(t,1)}}-1===e.indexOf(r)&&e.push(r)}for(const r of e)s(r)&&f[r]&&t.push([r,f[r]]);if(f=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(o=e,"[object Object]"!==Object.prototype.toString.call(o)||!t||!Array.isArray(t)&&"string"!=typeof t)return{};var o;const{length:i}=t;if("string"==typeof t||i<2){const o="string"==typeof t?t:t[0],i=n(e,o,r);return void 0!==i?P({},o,i,r):{}}return((e,t,r,o)=>{const i={};for(let s=0;s<r;s++){const r=t[s],c=n(e,r,o);void 0!==c&&P(i,r,c,o)}return i})(e,t,i,r)}(f,e),t.length>0)for(const[r,n]of t)f[r]=n}return this.config.silent||k||(o(v)&&this.config.showStack?!this.config.meta.show||A(f)||this.config.meta.hideMeta&&f[this.config.meta.hideMeta]?this.config.logger[T](v):this.config.logger[T](v,f):!this.config.meta.show||A(f)||this.config.meta.hideMeta&&f[this.config.meta.hideMeta]||this.config.meta.hideHTTP&&f[this.config.meta.hideHTTP]?this.config.logger[T](i):this.config.logger[T](i,f)),0===this.config.hooks.post.length?{method:T,err:v,message:i,meta:f}:O(this.config.hooks.post,e=>e(T,v,i,f)).then().catch(e=>{this.config.logger.error(e)})}}}).call(this)}.call(this,U),oe}));
|
|
1
|
+
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Axe=e()}}((function(){!function(e){"use strict";e.console||(e.console={});for(var t,r,n=e.console,o=function(){},i=["memory"],s="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");t=i.pop();)n[t]||(n[t]={});for(;r=s.pop();)n[r]||(n[r]=o)}("undefined"==typeof window?this:window);var e={hostname:function(){return"undefined"!=typeof location?location.hostname:""}},t=function(e){var t=Array.prototype.slice.call(arguments,1);return t.length&&(e=e.toString().replace(/(%?)(%([jds]))/g,(function(e,r,n,o){var i=t.shift();switch(o){case"s":i=""+i;break;case"d":i=Number(i);break;case"j":i=JSON.stringify(i)}return r?(t.unshift(i),e):i}))),t.length&&(e=e.toString()+" "+t.join(" ")),""+e.toString().replace(/%{2,2}/g,"%")},r=["%s","%d","%i","%f","%j","%o","%O","%%"],n=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(n=e,"[object Object]"!==Object.prototype.toString.call(n)||!t)return e;var n;const o=Array.isArray(t)?t:String(t).split(r),{length:i}=o;return i<2?e[o[0]]:((e,t,r)=>{for(let n=0;n<r;n++){if(null===e)return;const r=e[t[n]];if(void 0===r)return;e=r}return e})(e,o,i)},o=function(e){switch(Object.prototype.toString.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}},i="undefined"!=typeof Symbol&&Symbol,s={},c=Object.prototype.toString;if("function"==typeof i&&"function"==typeof Symbol&&"symbol"==typeof i("foo")&&"symbol"==typeof Symbol("bar")&&function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}()){var f=Symbol.prototype.toString,a=/^Symbol\(.*\)$/;s=function(e){if("symbol"==typeof e)return!0;if("[object Symbol]"!==c.call(e))return!1;try{return function(e){return"symbol"==typeof e.valueOf()&&a.test(f.call(e))}(e)}catch(t){return!1}}}else s=function(e){return!1};var l=e=>{if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype};const{hasOwnProperty:u}=Object.prototype,{propertyIsEnumerable:p}=Object,g=(e,t,r)=>Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0}),y=this,h={concatArrays:!1,ignoreUndefined:!1},m=e=>{const t=[];for(const r in e)u.call(e,r)&&t.push(r);if(Object.getOwnPropertySymbols){const r=Object.getOwnPropertySymbols(e);for(const n of r)p.call(e,n)&&t.push(n)}return t};function d(e){return Array.isArray(e)?function(e){const t=e.slice(0,0);return m(e).forEach(r=>{g(t,r,d(e[r]))}),t}(e):l(e)?function(e){const t=null===Object.getPrototypeOf(e)?Object.create(null):{};return m(e).forEach(r=>{g(t,r,d(e[r]))}),t}(e):e}const b=(e,t,r,n)=>(r.forEach(r=>{void 0===t[r]&&n.ignoreUndefined||(r in e&&e[r]!==Object.getPrototypeOf(e)?g(e,r,v(e[r],t[r],n)):g(e,r,d(t[r])))}),e);function v(e,t,r){return r.concatArrays&&Array.isArray(e)&&Array.isArray(t)?((e,t,r)=>{let n=e.slice(0,0),o=0;return[e,t].forEach(t=>{const i=[];for(let r=0;r<t.length;r++)u.call(t,r)&&(i.push(String(r)),g(n,o++,t===e?t[r]:d(t[r])));n=b(n,t,m(t).filter(e=>!i.includes(e)),r)}),n})(e,t,r):l(t)&&l(e)?b(e,t,m(t),r):d(t)}var O={};const A=async(e,t)=>{const r=[];let n=0;for(const o of e)r.push(await t(await o,n++));return r};(O=A).default=A;var j={};function w(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return S(e,void 0);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?S(e,void 0):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,i=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw i}}}}function S(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var E=function e(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(!o(t))throw new Error("`err` must be an Error");if(!Array.isArray(r))throw new TypeError("`fields` must be an Array");const n={};var i,s=w(new Set([...Object.getOwnPropertyNames(Object.getPrototypeOf(t)),...Object.getOwnPropertyNames(t)]));try{for(s.s();!(i=s.n()).done;){const e=i.value;"function"!=typeof t[e]&&(n[e]=t[e])}}catch(t){s.e(t)}finally{s.f()}return!n.name&&t.constructor.name&&(n.name=t.constructor.name),Array.isArray(t.errors)&&(n.errors=t.errors.map(t=>o(t)?e(t,r):t)),Array.isArray(r)&&r.length>0?n.filter(e=>r.includes(e)):n};const _=e=>"object"==typeof e||"function"==typeof e,T=(e,t)=>"__proto__"==e||"constructor"==e&&"function"==typeof t.constructor;var P=function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".";if(!_(e)||!t||!t.length)return e;const o=Array.isArray(t)?t:String(t).split(n);if(T(o[0],e))return e;const{length:i}=o;return 1===i?(e[o[0]]=r,e):((e,t,r,n)=>{let o=e,i=0;for(;i<r-1;i++){const e=t[i];T(e,o)||(o=_(o[e])?o[e]:o[e]={})}return o[t[i]]=n,e})(e,o,i,r)},k=function(e){return null!=e&&"object"==typeof e&&!1===Array.isArray(e)};function x(e,t,r){return"function"==typeof r.join?r.join(e):e[0]+t+e[1]}function I(e,t,r){return"function"!=typeof r.isValid||r.isValid(e,t)}function L(e){return k(e)||Array.isArray(e)||"function"==typeof e}var M=Object.prototype.toString;function F(e){return"function"==typeof e.constructor?e.constructor.name:null}var N=function e(t){switch(function(e){if(void 0===e)return"undefined";if(null===e)return"null";var t=typeof e;if("boolean"===t)return"boolean";if("string"===t)return"string";if("number"===t)return"number";if("symbol"===t)return"symbol";if("function"===t)return"GeneratorFunction"===F(e)?"generatorfunction":"function";if(function(e){return Array.isArray?Array.isArray(e):e instanceof Array}(e))return"array";if(function(e){return!(!e.constructor||"function"!=typeof e.constructor.isBuffer)&&e.constructor.isBuffer(e)}(e))return"buffer";if(function(e){try{if("number"==typeof e.length&&"function"==typeof e.callee)return!0}catch(t){if(-1!==t.message.indexOf("callee"))return!0}return!1}(e))return"arguments";if(function(e){return e instanceof Date||"function"==typeof e.toDateString&&"function"==typeof e.getDate&&"function"==typeof e.setDate}(e))return"date";if(function(e){return e instanceof Error||"string"==typeof e.message&&e.constructor&&"number"==typeof e.constructor.stackTraceLimit}(e))return"error";if(function(e){return e instanceof RegExp||"string"==typeof e.flags&&"boolean"==typeof e.ignoreCase&&"boolean"==typeof e.multiline&&"boolean"==typeof e.global}(e))return"regexp";switch(F(e)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(e){return"function"==typeof e.throw&&"function"==typeof e.return&&"function"==typeof e.next}(e))return"generator";switch(t=M.call(e)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return t.slice(8,-1).toLowerCase().replace(/\s/g,"")}(t)){case"boolean":case"date":case"function":case"null":case"number":return!0;case"undefined":return!1;case"regexp":return"(?:)"!==t.source&&""!==t.source;case"buffer":return""!==t.toString();case"error":return""!==t.message;case"string":case"arguments":return 0!==t.length;case"file":case"map":case"set":return 0!==t.size;case"array":case"object":for(const r of Object.keys(t))if(e(t[r]))return!0;return!1;default:return!0}},D=function(e,t,r){return!(null==(n=e)||"object"!=typeof n&&"function"!=typeof n&&!Array.isArray(n)||"string"!=typeof t&&!Array.isArray(t))&&N(function(e,t,r){if(k(r)||(r={default:r}),!L(e))return void 0!==r.default?r.default:e;"number"==typeof t&&(t=String(t));const n=Array.isArray(t),o="string"==typeof t,i=r.separator||".",s=r.joinChar||("string"==typeof i?i:".");if(!o&&!n)return e;if(o&&t in e)return I(t,e,r)?e[t]:r.default;let c=n?t:function(e,t,r){return"function"==typeof r.split?r.split(e):e.split(t)}(t,i,r),f=c.length,a=0;do{let t=c[a];for("number"==typeof t&&(t=String(t));t&&"\\"===t.slice(-1);)t=x([t.slice(0,-1),c[++a]||""],s,r);if(t in e){if(!I(t,e,r))return r.default;e=e[t]}else{let n=!1,o=a+1;for(;o<f;)if(n=(t=x([t,c[o++]],s,r))in e){if(!I(t,e,r))return r.default;e=e[t],a=o-1;break}if(!n)return r.default}}while(++a<f&&L(e));return a===f?e:r.default}(e,t,r));var n};const C=e=>{if((e=>"__proto__"===e||"constructor"===e||"prototype"===e)(e))throw new Error(`Cannot set unsafe key: "${e}"`)};var B=function(e,t){if(null==(r=e)||"object"!=typeof r||!1!==Array.isArray(r))throw new TypeError("expected an object.");var r,n=Array.isArray(t);if(!n&&e.hasOwnProperty(t))return delete e[t],!0;if(D(e,t)){for(var o=n?t.slice():t.split("."),i=o.pop();o.length&&"\\"===o[o.length-1].slice(-1);)i=o.pop().slice(0,-1)+"."+i;for(;o.length;)t=o.shift(),C(t),e=e[t];return delete e[i]}return!0},X={};Object.defineProperty(X,"__esModule",{value:!0}),X.boolean=void 0,X.boolean=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1"].includes(e.trim().toLowerCase());case"[object Number]":return 1===e.valueOf();case"[object Boolean]":return e.valueOf();default:return!1}};var H={};Object.defineProperty(H,"__esModule",{value:!0}),H.isBooleanable=void 0,H.isBooleanable=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1","false","f","no","n","off","0"].includes(e.trim().toLowerCase());case"[object Number]":return[0,1].includes(e.valueOf());case"[object Boolean]":return!0;default:return!1}};var R={};Object.defineProperty(R,"__esModule",{value:!0}),R.boolean=void 0,Object.defineProperty(R,"boolean",{enumerable:!0,get:function(){return X.boolean}}),Object.defineProperty(R,"isBooleanable",{enumerable:!0,get:function(){return H.isBooleanable}});var U,K,W,z="12.2.1",$=U={};function V(){throw new Error("setTimeout has not been defined")}function G(){throw new Error("clearTimeout has not been defined")}function J(e){if(K===setTimeout)return setTimeout(e,0);if((K===V||!K)&&setTimeout)return K=setTimeout,setTimeout(e,0);try{return K(e,0)}catch(t){try{return K.call(null,e,0)}catch(t){return K.call(this,e,0)}}}!function(){try{K="function"==typeof setTimeout?setTimeout:V}catch(e){K=V}try{W="function"==typeof clearTimeout?clearTimeout:G}catch(e){W=G}}();var q,Q=[],Y=!1,Z=-1;function ee(){Y&&q&&(Y=!1,q.length?Q=q.concat(Q):Z=-1,Q.length&&te())}function te(){if(!Y){var e=J(ee);Y=!0;for(var t=Q.length;t;){for(q=Q,Q=[];++Z<t;)q&&q[Z].run();Z=-1,t=Q.length}q=null,Y=!1,function(e){if(W===clearTimeout)return clearTimeout(e);if((W===G||!W)&&clearTimeout)return W=clearTimeout,clearTimeout(e);try{W(e)}catch(t){try{return W.call(null,e)}catch(t){return W.call(this,e)}}}(e)}}function re(e,t){this.fun=e,this.array=t}function ne(){}$.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];Q.push(new re(e,t)),1!==Q.length||Y||J(te)},re.prototype.run=function(){this.fun.apply(null,this.array)},$.title="browser",$.browser=!0,$.env={},$.argv=[],$.version="",$.versions={},$.on=ne,$.addListener=ne,$.once=ne,$.off=ne,$.removeListener=ne,$.removeAllListeners=ne,$.emit=ne,$.prependListener=ne,$.prependOnceListener=ne,$.listeners=function(e){return[]},$.binding=function(e){throw new Error("process.binding is not supported")},$.cwd=function(){return"/"},$.chdir=function(e){throw new Error("process.chdir is not supported")},$.umask=function(){return 0};var oe={};return function(i){(function(){const{boolean:c}=R,f=Symbol.for("axe.silent"),a=new Set(["config","log"]),u=["trace","debug","info","warn","error","fatal"],p={warning:"warn",err:"error"},g="`level` invalid, must be: "+u.join(", "),m=i.env.HOSTNAME||e.hostname();function b(e){if("object"!=typeof e||null===e)return!1;const t=Object.getPrototypeOf(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e||s(e))}function A(e){return null==e||"object"==typeof e&&0===Reflect.ownKeys(e).length||"string"==typeof e&&0===e.trim().length}function w(e){return void 0===e}function S(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function _(e){return"string"==typeof e}oe=class{constructor(){var e=this;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const r={};if(i.env.AXE_REMAPPED_META_FIELDS){const e=i.env.AXE_REMAPPED_META_FIELDS.split(",").map(e=>e.split(":"));for(const[t,n]of e)r[t]=n}let n=i.env.AXE_OMIT_META_FIELDS;"string"==typeof n&&(n=n.split(",").map(e=>e.trim())),Array.isArray(n)||(n=[]);let o=i.env.AXE_PICK_META_FIELDS;"string"==typeof o&&(o=o.split(",").map(e=>e.trim())),Array.isArray(o)||(o=[]),this.config=function(){const e=v(d(h),this!==y&&this||{},h);let t={_:{}};for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];for(const i of n)if(void 0!==i){if(!l(i))throw new TypeError("`"+i+"` is not an Option Object");t=v(t,{_:i},e)}return t._}({showStack:!i.env.AXE_SHOW_STACK||c(i.env.AXE_SHOW_STACK),meta:Object.assign({show:!i.env.AXE_SHOW_META||c(i.env.AXE_SHOW_META),remappedFields:r,omittedFields:n,pickedFields:o,cleanupRemapping:!0,hideHTTP:"is_http",hideMeta:"hide_meta"},"object"==typeof t.meta?t.meta:{}),version:z,silent:!1,logger:console,name:m,level:"info",levels:["info","warn","error","fatal"],appInfo:!i.env.AXE_APP_INFO||c(i.env.AXE_APP_INFO),hooks:Object.assign({pre:[],post:[]},"object"==typeof t.hooks?t.hooks:{})},t),this.appInfo=!!this.config.appInfo&&"function"==typeof j&&j(),this.log=this.log.bind(this);const s=Object.keys(this.config.logger).filter(e=>!a.has(e));for(const i of s)this[i]=this.config.logger[i];for(const i of u)"function"!=typeof this.config.logger[i]&&("fatal"===i?this.config.logger.fatal=this.config.logger.error||this.config.logger.info||this.config.logger.log:this.config.logger[i]=this.config.logger.info||this.config.logger.log),this[i]=function(){for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return e.log(i,...Array.prototype.slice.call(r))};this.setLevel=this.setLevel.bind(this),this.getNormalizedLevel=this.getNormalizedLevel.bind(this),this.setName=this.setName.bind(this),this.config.name&&this.setName(this.config.name),this.setLevel(this.config.level),this.err=this.error,this.warning=this.warn,this.pre=function(e,t){this.config.hooks.pre.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))},this.post=function(e,t){this.config.hooks.post.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))}}setLevel(e){if(!_(e)||-1===u.indexOf(e))throw new Error(g);_(this.config.logger.logLevel)?this.config.logger.logLevel=e:this.config.logger.level=e,this.config.levels=u.slice(u.indexOf(e))}getNormalizedLevel(e){return _(e)?_(p[e])?p[e]:-1===u.indexOf(e)?"info":e:"info"}setName(e){if(!_(e))throw new Error("`name` must be a String");_(this.config.logger.scope)?this.config.logger.scope=e:this.config.logger.name=e}log(e,i,a){const l=[],g=[];w(e)||l.push(e),w(i)||l.push(i),w(a)||l.push(a);for(var y=arguments.length,h=new Array(y>3?y-3:0),m=3;m<y;m++)h[m-3]=arguments[m];for(const t of Array.prototype.slice.call(h))l.push(t);let d=0;if(_(e)&&_(p[e])?e=p[e]:o(e)?(a=i,i=e,e="error"):_(e)&&-1!==u.indexOf(e)||(a=i,i=e,e=this.getNormalizedLevel(e),d=-1),-1===this.config.levels.indexOf(e))return;let v,j=!1;if((S(i)||Array.isArray(i))&&_(a)){j=!0;const e=a;a=i,i=_(e)&&l.length>=3+d?t(...l.slice(2+d)):e}if(w(i)&&(i=e),1!==l.slice(1+d).length||_(i)||o(i))if(!j&&l.length>=4+d){i=void 0,a={};const r=[];for(const e of l)o(e)?g.push(e):_(e)&&r.push(e);0===g.length&&r.length>0?i=t(...r):g.length>0&&"log"===e&&(e="error")}else if(!j&&l.length===3+d&&_(i)&&r.some(e=>-1!==i.indexOf(e)))i=t(i,a),a={};else if(o(i)){if(o(a)){g.push(a);for(const e of l.slice(2+d))a!==e&&o(e)&&g.push(e);a={}}}else o(a)?(g.push(a),a={}):S(a)||w(a)||null===a?_(i)||(i=t(i)):(i=t(i,a),a={});else a={message:i},i=e;w(a)||S(a)?S(a)||(a={}):a={original_meta:a},o(i)&&(g.unshift(i),i=void 0),S(a.err)&&(o(a.err)&&g.push(a.err),a.original_err=o(a.err)?E(a.err):a.err),g.length>0&&(1===g.length?v=g[0]:((v=new Error([...new Set(g.map(e=>e.message).filter(Boolean))].join("; "))).stack=[...new Set(g.map(e=>e.stack).filter(Boolean))].join("\n\n"),v.errors=g),a.err=E(v),_(i)||(i=v.message)),a.level=e,this.appInfo&&(a.app=this.appInfo);const T=-1===d?"log":e;for(const t of this.config.hooks.pre)[v,i,a]=t(T,v,i,a);const k=c(a[f]);if(!A(this.config.meta.remappedFields))for(const t of Reflect.ownKeys(this.config.meta.remappedFields))if(P(a,this.config.meta.remappedFields[t],n(a,t)),B(a,t),this.config.meta.cleanupRemapping){const e=t.lastIndexOf(".");if(-1===e)continue;const r=t.slice(0,e);A(n(a,r))&&B(a,r)}if(!A(this.config.meta.omittedFields)||!A(this.config.meta.pickedFields)){const e=function(e){const t=[];return function e(r,n){for(const o of Reflect.ownKeys(r)){const i=r[o],c=s(o)?Symbol.keyFor(o)||o.description:o,f=n?n+"."+c:c;b(i)?(t.push(c),e(i,f)):t.push(f)}}(e),t}(a);if(!A(this.config.meta.omittedFields))for(const r of this.config.meta.omittedFields){let t=e.length;for(;t--;)(e[t]===r||!s(e[t])&&0===e[t].indexOf(r+"."))&&e.splice(t,1)}const t=[];if(!A(this.config.meta.pickedFields))for(const r of this.config.meta.pickedFields){if(s(r))a[r]&&t.push([r,a[r]]);else{const t=r.indexOf("."),n=r.slice(0,t+1);if(-1!==t){let t=e.length;for(;t--;)(e[t]===n.slice(0,-1)||0===e[t].indexOf(n))&&e.splice(t,1)}}-1===e.indexOf(r)&&e.push(r)}for(const r of e)s(r)?void 0!==a[r]&&t.push([r,a[r]]):void 0!==a[Symbol.for(r)]&&t.push([Symbol.for(r),a[Symbol.for(r)]]);try{a=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(o=e,"[object Object]"!==Object.prototype.toString.call(o)||!t||!Array.isArray(t)&&"string"!=typeof t)return{};var o;const{length:i}=t;if("string"==typeof t||i<2){const o="string"==typeof t?t:t[0],i=n(e,o,r);return void 0!==i?P({},o,i,r):{}}return((e,t,r,o)=>{const i={};for(let s=0;s<r;s++){const r=t[s],c=n(e,r,o);void 0!==c&&P(i,r,c,o)}return i})(e,t,i,r)}(a,e)}catch(v){this.config.logger.error(v)}if(t.length>0)for(const[r,n]of t)a[r]=n}return this.config.silent||k||(o(v)&&this.config.showStack?!this.config.meta.show||A(a)||this.config.meta.hideMeta&&a[this.config.meta.hideMeta]?this.config.logger[T](v):this.config.logger[T](v,a):!this.config.meta.show||A(a)||this.config.meta.hideMeta&&a[this.config.meta.hideMeta]||this.config.meta.hideHTTP&&a[this.config.meta.hideHTTP]?this.config.logger[T](i):this.config.logger[T](i,a)),0===this.config.hooks.post.length?{method:T,err:v,message:i,meta:a}:O(this.config.hooks.post,e=>e(T,v,i,a)).then().catch(e=>{this.config.logger.error(e)})}}}).call(this)}.call(this,U),oe}));
|
package/lib/index.js
CHANGED
|
@@ -50,6 +50,7 @@ function dotifyToArray(obj) {
|
|
|
50
50
|
const newKey = current ? current + '.' + convertedKey : convertedKey; // joined key with dot
|
|
51
51
|
// if (value && typeof value === 'object' && !(value instanceof Date) && !ObjectID.isValid(value)) {
|
|
52
52
|
if (isPlainObject(value)) {
|
|
53
|
+
res.push(convertedKey);
|
|
53
54
|
recurse(value, newKey); // it's a nested object, so do it again
|
|
54
55
|
} else {
|
|
55
56
|
res.push(newKey);
|
|
@@ -422,7 +423,7 @@ class Axe {
|
|
|
422
423
|
if (index !== -1) {
|
|
423
424
|
let i = dotified.length;
|
|
424
425
|
while (i--) {
|
|
425
|
-
if (
|
|
426
|
+
if (dotified[i] === key.slice(0, -1)) dotified.splice(i, 1);else if (dotified[i].indexOf(key) === 0) dotified.splice(i, 1);
|
|
426
427
|
}
|
|
427
428
|
}
|
|
428
429
|
}
|
|
@@ -439,15 +440,28 @@ class Axe {
|
|
|
439
440
|
// (and it doesn't also do bigints yet)
|
|
440
441
|
//
|
|
441
442
|
for (const prop of dotified) {
|
|
442
|
-
if (isSymbol(prop)
|
|
443
|
+
if (isSymbol(prop)) {
|
|
444
|
+
if (meta[prop] !== undefined) pickedSymbols.push([prop, meta[prop]]);
|
|
445
|
+
} else if (meta[Symbol.for(prop)] !== undefined) {
|
|
446
|
+
pickedSymbols.push([Symbol.for(prop), meta[Symbol.for(prop)]]);
|
|
447
|
+
}
|
|
443
448
|
}
|
|
444
449
|
|
|
445
450
|
//
|
|
446
451
|
// now we call pick-deep using the final array
|
|
447
452
|
//
|
|
448
|
-
// NOTE: this does not pick symbols nor
|
|
453
|
+
// NOTE: this does not pick symbols, bigints, nor streams
|
|
454
|
+
// <https://github.com/strikeentco/pick-deep/issues/2>
|
|
455
|
+
// <https://github.com/strikeentco/pick-deep/issues/2>
|
|
456
|
+
//
|
|
457
|
+
// NOTE: this is wrapped in try/catch in case similar errors occur
|
|
458
|
+
// <https://github.com/stripe/stripe-node/issues/1796>
|
|
449
459
|
//
|
|
450
|
-
|
|
460
|
+
try {
|
|
461
|
+
meta = pickDeep(meta, dotified);
|
|
462
|
+
} catch (err) {
|
|
463
|
+
this.config.logger.error(err);
|
|
464
|
+
}
|
|
451
465
|
|
|
452
466
|
//
|
|
453
467
|
// if there were any top-level symbols to be
|
|
@@ -495,4 +509,4 @@ class Axe {
|
|
|
495
509
|
}
|
|
496
510
|
}
|
|
497
511
|
module.exports = Axe;
|
|
498
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwib3MiLCJmb3JtYXQiLCJmb3JtYXRTcGVjaWZpZXJzIiwiZ2V0IiwiaXNFcnJvciIsImlzU3ltYm9sIiwibWVyZ2VPcHRpb25zIiwicE1hcFNlcmllcyIsInBhcnNlQXBwSW5mbyIsInBhcnNlRXJyIiwicGlja0RlZXAiLCJzZXQiLCJ1bnNldCIsImJvb2xlYW4iLCJwa2ciLCJzaWxlbnRTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJvbWl0dGVkTG9nZ2VyS2V5cyIsIlNldCIsImxldmVscyIsImFsaWFzZXMiLCJ3YXJuaW5nIiwiZXJyIiwibGV2ZWxFcnJvciIsImpvaW4iLCJuYW1lIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiSE9TVE5BTUUiLCJob3N0bmFtZSIsImlzUGxhaW5PYmplY3QiLCJ2YWx1ZSIsInByb3RvdHlwZSIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwidG9TdHJpbmdUYWciLCJpdGVyYXRvciIsImRvdGlmeVRvQXJyYXkiLCJvYmoiLCJyZXMiLCJyZWN1cnNlIiwiY3VycmVudCIsImtleSIsIlJlZmxlY3QiLCJvd25LZXlzIiwiY29udmVydGVkS2V5Iiwia2V5Rm9yIiwiZGVzY3JpcHRpb24iLCJuZXdLZXkiLCJwdXNoIiwiaXNFbXB0eSIsInVuZGVmaW5lZCIsImxlbmd0aCIsInRyaW0iLCJpc051bGwiLCJpc1VuZGVmaW5lZCIsImlzT2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwiaXNTdHJpbmciLCJpc0Z1bmN0aW9uIiwiQXhlIiwiY29uc3RydWN0b3IiLCJfdGhpcyIsImNvbmZpZyIsImFyZ3VtZW50cyIsInJlbWFwcGVkRmllbGRzIiwiQVhFX1JFTUFQUEVEX01FVEFfRklFTERTIiwiZmllbGRzIiwiYXJyIiwic3BsaXQiLCJtYXAiLCJ2IiwicHJvcCIsIm9taXR0ZWRGaWVsZHMiLCJBWEVfT01JVF9NRVRBX0ZJRUxEUyIsInMiLCJwaWNrZWRGaWVsZHMiLCJBWEVfUElDS19NRVRBX0ZJRUxEUyIsInNob3dTdGFjayIsIkFYRV9TSE9XX1NUQUNLIiwibWV0YSIsImFzc2lnbiIsInNob3ciLCJBWEVfU0hPV19NRVRBIiwiY2xlYW51cFJlbWFwcGluZyIsImhpZGVIVFRQIiwiaGlkZU1ldGEiLCJ2ZXJzaW9uIiwic2lsZW50IiwibG9nZ2VyIiwiY29uc29sZSIsImxldmVsIiwiYXBwSW5mbyIsIkFYRV9BUFBfSU5GTyIsImhvb2tzIiwicHJlIiwicG9zdCIsImxvZyIsImJpbmQiLCJtZXRob2RzIiwia2V5cyIsImZpbHRlciIsImhhcyIsImVsZW1lbnQiLCJmYXRhbCIsImVycm9yIiwiaW5mbyIsIl9sZW4iLCJhcmdzIiwiX2tleSIsInNsaWNlIiwiY2FsbCIsInNldExldmVsIiwiZ2V0Tm9ybWFsaXplZExldmVsIiwic2V0TmFtZSIsIndhcm4iLCJmbiIsIl9sZXZlbCIsIl9sZW4yIiwiX2tleTIiLCJfbGVuMyIsIl9rZXkzIiwiaW5kZXhPZiIsIkVycm9yIiwibG9nTGV2ZWwiLCJzY29wZSIsIm1lc3NhZ2UiLCJvcmlnaW5hbEFyZ3MiLCJlcnJvcnMiLCJfbGVuNCIsIl9rZXk0IiwiYXJnIiwibW9kaWZpZXIiLCJpc0J1bnlhbiIsIl9tZXRhIiwibWVzc2FnZXMiLCJzb21lIiwidCIsIm9yaWdpbmFsX21ldGEiLCJ1bnNoaWZ0Iiwib3JpZ2luYWxfZXJyIiwiZSIsIkJvb2xlYW4iLCJzdGFjayIsImFwcCIsIm1ldGhvZCIsImhvb2siLCJoYWRUcnVlU2lsZW50U3ltYm9sIiwiaW5kZXgiLCJsYXN0SW5kZXhPZiIsInBhcmVudEtleSIsImRvdGlmaWVkIiwiaSIsInNwbGljZSIsInBpY2tlZFN5bWJvbHMiLCJ0aGVuIiwiY2F0Y2giLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5hc3NpZ25lZC1pbXBvcnRcbnJlcXVpcmUoJ2NvbnNvbGUtcG9seWZpbGwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLW5vZGUtcHJvdG9jb2xcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IGZvcm1hdCA9IHJlcXVpcmUoJ0BsYWRqcy9mb3JtYXQtdXRpbCcpO1xuY29uc3QgZm9ybWF0U3BlY2lmaWVycyA9IHJlcXVpcmUoJ2Zvcm1hdC1zcGVjaWZpZXJzJyk7XG5jb25zdCBnZXQgPSByZXF1aXJlKCdAc3RyaWtlZW50Y28vZ2V0Jyk7XG5jb25zdCBpc0Vycm9yID0gcmVxdWlyZSgnaXNlcnJvcicpO1xuY29uc3QgaXNTeW1ib2wgPSByZXF1aXJlKCdpcy1zeW1ib2wnKTtcbmNvbnN0IG1lcmdlT3B0aW9ucyA9IHJlcXVpcmUoJ21lcmdlLW9wdGlvbnMnKTtcbmNvbnN0IHBNYXBTZXJpZXMgPSByZXF1aXJlKCdwLW1hcC1zZXJpZXMnKTtcbmNvbnN0IHBhcnNlQXBwSW5mbyA9IHJlcXVpcmUoJ3BhcnNlLWFwcC1pbmZvJyk7XG5jb25zdCBwYXJzZUVyciA9IHJlcXVpcmUoJ3BhcnNlLWVycicpO1xuY29uc3QgcGlja0RlZXAgPSByZXF1aXJlKCdwaWNrLWRlZXAnKTtcbmNvbnN0IHNldCA9IHJlcXVpcmUoJ0BzdHJpa2VlbnRjby9zZXQnKTtcbmNvbnN0IHVuc2V0ID0gcmVxdWlyZSgndW5zZXQtdmFsdWUnKTtcbmNvbnN0IHsgYm9vbGVhbiB9ID0gcmVxdWlyZSgnYm9vbGVhbicpO1xuY29uc3QgcGtnID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJyk7XG5cbmNvbnN0IHNpbGVudFN5bWJvbCA9IFN5bWJvbC5mb3IoJ2F4ZS5zaWxlbnQnKTtcbmNvbnN0IG9taXR0ZWRMb2dnZXJLZXlzID0gbmV3IFNldChbJ2NvbmZpZycsICdsb2cnXSk7XG5jb25zdCBsZXZlbHMgPSBbJ3RyYWNlJywgJ2RlYnVnJywgJ2luZm8nLCAnd2FybicsICdlcnJvcicsICdmYXRhbCddO1xuY29uc3QgYWxpYXNlcyA9IHsgd2FybmluZzogJ3dhcm4nLCBlcnI6ICdlcnJvcicgfTtcbmNvbnN0IGxldmVsRXJyb3IgPSBgXFxgbGV2ZWxcXGAgaW52YWxpZCwgbXVzdCBiZTogJHtsZXZlbHMuam9pbignLCAnKX1gO1xuY29uc3QgbmFtZSA9XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnXG4gICAgPyBmYWxzZVxuICAgIDogcHJvY2Vzcy5lbnYuSE9TVE5BTUUgfHwgb3MuaG9zdG5hbWUoKTtcblxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvaXMtcGxhaW4tb2JqL2Jsb2IvbWFpbi9pbmRleC5qcz5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICByZXR1cm4gKFxuICAgIChwcm90b3R5cGUgPT09IG51bGwgfHxcbiAgICAgIHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fFxuICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmXG4gICAgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsdWUpICYmXG4gICAgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsdWUpICYmXG4gICAgIWlzU3ltYm9sKHZhbHVlKVxuICApO1xufVxuXG4vLyA8aHR0cHM6Ly9naXRodWIuY29tL0dlZW5lblRpamQvZG90aWZ5L2Jsb2IvbWFzdGVyL2RvdGlmeS5qcz5cbmZ1bmN0aW9uIGRvdGlmeVRvQXJyYXkob2JqKSB7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBmdW5jdGlvbiByZWN1cnNlKG9iaiwgY3VycmVudCkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhvYmopKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgY29uc3QgY29udmVydGVkS2V5ID0gaXNTeW1ib2woa2V5KVxuICAgICAgICA/IFN5bWJvbC5rZXlGb3Ioa2V5KSB8fCBrZXkuZGVzY3JpcHRpb25cbiAgICAgICAgOiBrZXk7XG4gICAgICBjb25zdCBuZXdLZXkgPSBjdXJyZW50ID8gY3VycmVudCArICcuJyArIGNvbnZlcnRlZEtleSA6IGNvbnZlcnRlZEtleTsgLy8gam9pbmVkIGtleSB3aXRoIGRvdFxuICAgICAgLy8gaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpICYmICFPYmplY3RJRC5pc1ZhbGlkKHZhbHVlKSkge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJlY3Vyc2UodmFsdWUsIG5ld0tleSk7IC8vIGl0J3MgYSBuZXN0ZWQgb2JqZWN0LCBzbyBkbyBpdCBhZ2FpblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzLnB1c2gobmV3S2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWN1cnNlKG9iaik7XG4gIHJldHVybiByZXM7XG59XG5cbi8vIDxodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDMyMzMxNjM+XG5mdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgIHZhbHVlID09PSBudWxsIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5vd25LZXlzKHZhbHVlKS5sZW5ndGggPT09IDApIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA9PT0gMClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNOdWxsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuY2xhc3MgQXhlIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICBjb25zdCByZW1hcHBlZEZpZWxkcyA9IHt9O1xuICAgIGlmIChwcm9jZXNzLmVudi5BWEVfUkVNQVBQRURfTUVUQV9GSUVMRFMpIHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IHByb2Nlc3MuZW52LkFYRV9SRU1BUFBFRF9NRVRBX0ZJRUxEUztcbiAgICAgIGNvbnN0IGFyciA9IGZpZWxkcy5zcGxpdCgnLCcpLm1hcCgodikgPT4gdi5zcGxpdCgnOicpKTtcbiAgICAgIGZvciAoY29uc3QgW3Byb3AsIHZhbHVlXSBvZiBhcnIpIHtcbiAgICAgICAgcmVtYXBwZWRGaWVsZHNbcHJvcF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlbnZpZnkgZG9lcyBub3Qgc3VwcG9ydCBjb25kaXRpb25hbHMgd2VsbCBlbm91Z2ggc28gd2UgZGVjbGFyZSB2YXJzIG91dHNpZGVcbiAgICBsZXQgb21pdHRlZEZpZWxkcyA9IHByb2Nlc3MuZW52LkFYRV9PTUlUX01FVEFfRklFTERTO1xuICAgIGlmICh0eXBlb2Ygb21pdHRlZEZpZWxkcyA9PT0gJ3N0cmluZycpXG4gICAgICBvbWl0dGVkRmllbGRzID0gb21pdHRlZEZpZWxkcy5zcGxpdCgnLCcpLm1hcCgocykgPT4gcy50cmltKCkpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShvbWl0dGVkRmllbGRzKSkgb21pdHRlZEZpZWxkcyA9IFtdO1xuXG4gICAgbGV0IHBpY2tlZEZpZWxkcyA9IHByb2Nlc3MuZW52LkFYRV9QSUNLX01FVEFfRklFTERTO1xuICAgIGlmICh0eXBlb2YgcGlja2VkRmllbGRzID09PSAnc3RyaW5nJylcbiAgICAgIHBpY2tlZEZpZWxkcyA9IHBpY2tlZEZpZWxkcy5zcGxpdCgnLCcpLm1hcCgocykgPT4gcy50cmltKCkpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwaWNrZWRGaWVsZHMpKSBwaWNrZWRGaWVsZHMgPSBbXTtcblxuICAgIHRoaXMuY29uZmlnID0gbWVyZ2VPcHRpb25zKFxuICAgICAge1xuICAgICAgICBzaG93U3RhY2s6IHByb2Nlc3MuZW52LkFYRV9TSE9XX1NUQUNLXG4gICAgICAgICAgPyBib29sZWFuKHByb2Nlc3MuZW52LkFYRV9TSE9XX1NUQUNLKVxuICAgICAgICAgIDogdHJ1ZSxcbiAgICAgICAgbWV0YTogT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzaG93OiBwcm9jZXNzLmVudi5BWEVfU0hPV19NRVRBXG4gICAgICAgICAgICAgID8gYm9vbGVhbihwcm9jZXNzLmVudi5BWEVfU0hPV19NRVRBKVxuICAgICAgICAgICAgICA6IHRydWUsXG4gICAgICAgICAgICByZW1hcHBlZEZpZWxkcyxcbiAgICAgICAgICAgIG9taXR0ZWRGaWVsZHMsXG4gICAgICAgICAgICBwaWNrZWRGaWVsZHMsXG4gICAgICAgICAgICBjbGVhbnVwUmVtYXBwaW5nOiB0cnVlLFxuICAgICAgICAgICAgaGlkZUhUVFA6ICdpc19odHRwJyxcbiAgICAgICAgICAgIC8vIGltcGxlbWVudGVkIG1haW5seSBmb3IgQGxhZGpzL2dyYWNlZnVsIHRvXG4gICAgICAgICAgICAvLyBzdXBwcmVzcyB1bm5lY2Vzc2FyeSBtZXRhIG91dHB1dCB0byBjb25zb2xlXG4gICAgICAgICAgICBoaWRlTWV0YTogJ2hpZGVfbWV0YSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR5cGVvZiBjb25maWcubWV0YSA9PT0gJ29iamVjdCcgPyBjb25maWcubWV0YSA6IHt9XG4gICAgICAgICksXG4gICAgICAgIHZlcnNpb246IHBrZy52ZXJzaW9uLFxuICAgICAgICBzaWxlbnQ6IGZhbHNlLFxuICAgICAgICBsb2dnZXI6IGNvbnNvbGUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICAgIGxldmVsczogWydpbmZvJywgJ3dhcm4nLCAnZXJyb3InLCAnZmF0YWwnXSxcbiAgICAgICAgYXBwSW5mbzogcHJvY2Vzcy5lbnYuQVhFX0FQUF9JTkZPXG4gICAgICAgICAgPyBib29sZWFuKHByb2Nlc3MuZW52LkFYRV9BUFBfSU5GTylcbiAgICAgICAgICA6IHRydWUsXG4gICAgICAgIGhvb2tzOiBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByZTogW10sXG4gICAgICAgICAgICBwb3N0OiBbXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHlwZW9mIGNvbmZpZy5ob29rcyA9PT0gJ29iamVjdCcgPyBjb25maWcuaG9va3MgOiB7fVxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgY29uZmlnXG4gICAgKTtcblxuICAgIHRoaXMuYXBwSW5mbyA9IHRoaXMuY29uZmlnLmFwcEluZm9cbiAgICAgID8gaXNGdW5jdGlvbihwYXJzZUFwcEluZm8pXG4gICAgICAgID8gcGFyc2VBcHBJbmZvKClcbiAgICAgICAgOiBmYWxzZVxuICAgICAgOiBmYWxzZTtcblxuICAgIHRoaXMubG9nID0gdGhpcy5sb2cuYmluZCh0aGlzKTtcblxuICAgIC8vIEluaGVyaXQgbWV0aG9kcyBmcm9tIHBhcmVudCBsb2dnZXJcbiAgICBjb25zdCBtZXRob2RzID0gT2JqZWN0LmtleXModGhpcy5jb25maWcubG9nZ2VyKS5maWx0ZXIoXG4gICAgICAoa2V5KSA9PiAhb21pdHRlZExvZ2dlcktleXMuaGFzKGtleSlcbiAgICApO1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBtZXRob2RzKSB7XG4gICAgICB0aGlzW2VsZW1lbnRdID0gdGhpcy5jb25maWcubG9nZ2VyW2VsZW1lbnRdO1xuICAgIH1cblxuICAgIC8vIEJpbmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZWFjaCBsb2cgbGV2ZWxcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgbGV2ZWxzKSB7XG4gICAgICAvLyBFbnN1cmUgZnVuY3Rpb24gZXhpc3RzIGluIGxvZ2dlciBwYXNzZWRcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcubG9nZ2VyW2VsZW1lbnRdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChlbGVtZW50ID09PSAnZmF0YWwnKSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmZhdGFsID1cbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5lcnJvciB8fFxuICAgICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmluZm8gfHxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5sb2c7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW2VsZW1lbnRdID1cbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5pbmZvIHx8IHRoaXMuY29uZmlnLmxvZ2dlci5sb2c7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQmluZCBsb2cgaGFuZGxlciB3aGljaCBub3JtYWxpemVzIGFyZ3MgYW5kIHBvcHVsYXRlcyBtZXRhXG4gICAgICB0aGlzW2VsZW1lbnRdID0gKC4uLmFyZ3MpID0+XG4gICAgICAgIHRoaXMubG9nKGVsZW1lbnQsIC4uLkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldExldmVsID0gdGhpcy5zZXRMZXZlbC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZ2V0Tm9ybWFsaXplZExldmVsID0gdGhpcy5nZXROb3JtYWxpemVkTGV2ZWwuYmluZCh0aGlzKTtcbiAgICB0aGlzLnNldE5hbWUgPSB0aGlzLnNldE5hbWUuYmluZCh0aGlzKTtcblxuICAgIC8vIFNldCB0aGUgbG9nZ2VyIG5hbWVcbiAgICBpZiAodGhpcy5jb25maWcubmFtZSkgdGhpcy5zZXROYW1lKHRoaXMuY29uZmlnLm5hbWUpO1xuXG4gICAgLy8gU2V0IHRoZSBsb2dnZXIgbGV2ZWxcbiAgICB0aGlzLnNldExldmVsKHRoaXMuY29uZmlnLmxldmVsKTtcblxuICAgIC8vIEFsaWFzZXNcbiAgICB0aGlzLmVyciA9IHRoaXMuZXJyb3I7XG4gICAgdGhpcy53YXJuaW5nID0gdGhpcy53YXJuO1xuXG4gICAgLy8gUHJlIGFuZCBQb3N0IEhvb2tzXG4gICAgdGhpcy5wcmUgPSBmdW5jdGlvbiAobGV2ZWwsIGZuKSB7XG4gICAgICB0aGlzLmNvbmZpZy5ob29rcy5wcmUucHVzaChmdW5jdGlvbiAoX2xldmVsLCAuLi5hcmdzKSB7XG4gICAgICAgIGlmIChsZXZlbCAhPT0gX2xldmVsKSByZXR1cm4gWy4uLmFyZ3NdO1xuICAgICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5wb3N0ID0gZnVuY3Rpb24gKGxldmVsLCBmbikge1xuICAgICAgdGhpcy5jb25maWcuaG9va3MucG9zdC5wdXNoKGZ1bmN0aW9uIChfbGV2ZWwsIC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKGxldmVsICE9PSBfbGV2ZWwpIHJldHVybiBbLi4uYXJnc107XG4gICAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBzZXRMZXZlbChsZXZlbCkge1xuICAgIGlmICghaXNTdHJpbmcobGV2ZWwpIHx8IGxldmVscy5pbmRleE9mKGxldmVsKSA9PT0gLTEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobGV2ZWxFcnJvcik7XG4gICAgLy8gU3VwcG9ydCBzaWduYWxlIGxvZ2dlciBhbmQgb3RoZXIgbG9nZ2VycyB0aGF0IHVzZSBgbG9nTGV2ZWxgXG4gICAgaWYgKGlzU3RyaW5nKHRoaXMuY29uZmlnLmxvZ2dlci5sb2dMZXZlbCkpXG4gICAgICB0aGlzLmNvbmZpZy5sb2dnZXIubG9nTGV2ZWwgPSBsZXZlbDtcbiAgICBlbHNlIHRoaXMuY29uZmlnLmxvZ2dlci5sZXZlbCA9IGxldmVsO1xuICAgIC8vIEFkanVzdHMgYHRoaXMuY29uZmlnLmxldmVsc2AgYXJyYXlcbiAgICAvLyBzbyB0aGF0IGl0IGhhcyBhbGwgcHJvY2VlZGluZyAoaW5jbHVzaXZlKVxuICAgIHRoaXMuY29uZmlnLmxldmVscyA9IGxldmVscy5zbGljZShsZXZlbHMuaW5kZXhPZihsZXZlbCkpO1xuICB9XG5cbiAgZ2V0Tm9ybWFsaXplZExldmVsKGxldmVsKSB7XG4gICAgaWYgKCFpc1N0cmluZyhsZXZlbCkpIHJldHVybiAnaW5mbyc7XG4gICAgaWYgKGlzU3RyaW5nKGFsaWFzZXNbbGV2ZWxdKSkgcmV0dXJuIGFsaWFzZXNbbGV2ZWxdO1xuICAgIGlmIChsZXZlbHMuaW5kZXhPZihsZXZlbCkgPT09IC0xKSByZXR1cm4gJ2luZm8nO1xuICAgIHJldHVybiBsZXZlbDtcbiAgfVxuXG4gIHNldE5hbWUobmFtZSkge1xuICAgIGlmICghaXNTdHJpbmcobmFtZSkpIHRocm93IG5ldyBFcnJvcignYG5hbWVgIG11c3QgYmUgYSBTdHJpbmcnKTtcbiAgICAvLyBTdXBwb3J0IHNpZ25hbGUgbG9nZ2VyIGFuZCBvdGhlciBsb2dnZXJzIHRoYXQgdXNlIGBzY29wZWBcbiAgICBpZiAoaXNTdHJpbmcodGhpcy5jb25maWcubG9nZ2VyLnNjb3BlKSkgdGhpcy5jb25maWcubG9nZ2VyLnNjb3BlID0gbmFtZTtcbiAgICBlbHNlIHRoaXMuY29uZmlnLmxvZ2dlci5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIGxvZyhsZXZlbCwgbWVzc2FnZSwgbWV0YSwgLi4uYXJncykge1xuICAgIGNvbnN0IG9yaWdpbmFsQXJncyA9IFtdO1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgIGlmICghaXNVbmRlZmluZWQobGV2ZWwpKSBvcmlnaW5hbEFyZ3MucHVzaChsZXZlbCk7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtZXNzYWdlKSkgb3JpZ2luYWxBcmdzLnB1c2gobWVzc2FnZSk7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtZXRhKSkgb3JpZ2luYWxBcmdzLnB1c2gobWV0YSk7XG4gICAgZm9yIChjb25zdCBhcmcgb2YgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykpIHtcbiAgICAgIG9yaWdpbmFsQXJncy5wdXNoKGFyZyk7XG4gICAgfVxuXG4gICAgbGV0IG1vZGlmaWVyID0gMDtcblxuICAgIGlmIChpc1N0cmluZyhsZXZlbCkgJiYgaXNTdHJpbmcoYWxpYXNlc1tsZXZlbF0pKSB7XG4gICAgICBsZXZlbCA9IGFsaWFzZXNbbGV2ZWxdO1xuICAgIH0gZWxzZSBpZiAoaXNFcnJvcihsZXZlbCkpIHtcbiAgICAgIG1ldGEgPSBtZXNzYWdlO1xuICAgICAgbWVzc2FnZSA9IGxldmVsO1xuICAgICAgbGV2ZWwgPSAnZXJyb3InO1xuICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKGxldmVsKSB8fCBsZXZlbHMuaW5kZXhPZihsZXZlbCkgPT09IC0xKSB7XG4gICAgICBtZXRhID0gbWVzc2FnZTtcbiAgICAgIG1lc3NhZ2UgPSBsZXZlbDtcbiAgICAgIGxldmVsID0gdGhpcy5nZXROb3JtYWxpemVkTGV2ZWwobGV2ZWwpO1xuICAgICAgbW9kaWZpZXIgPSAtMTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gZWFybHkgaWYgaXQgaXMgbm90IGEgdmFsaWQgbG9nZ2luZyBsZXZlbFxuICAgIGlmICh0aGlzLmNvbmZpZy5sZXZlbHMuaW5kZXhPZihsZXZlbCkgPT09IC0xKSByZXR1cm47XG5cbiAgICAvLyBCdW55YW4gc3VwcG9ydCAobWV0YSwgbWVzc2FnZSwgLi4uYXJncylcbiAgICBsZXQgaXNCdW55YW4gPSBmYWxzZTtcbiAgICBpZiAoKGlzT2JqZWN0KG1lc3NhZ2UpIHx8IEFycmF5LmlzQXJyYXkobWVzc2FnZSkpICYmIGlzU3RyaW5nKG1ldGEpKSB7XG4gICAgICBpc0J1bnlhbiA9IHRydWU7XG4gICAgICBjb25zdCBfbWV0YSA9IG1ldGE7XG4gICAgICBtZXRhID0gbWVzc2FnZTtcbiAgICAgIG1lc3NhZ2UgPVxuICAgICAgICBpc1N0cmluZyhfbWV0YSkgJiYgb3JpZ2luYWxBcmdzLmxlbmd0aCA+PSAzICsgbW9kaWZpZXJcbiAgICAgICAgICA/IGZvcm1hdCguLi5vcmlnaW5hbEFyZ3Muc2xpY2UoMiArIG1vZGlmaWVyKSlcbiAgICAgICAgICA6IF9tZXRhO1xuICAgIH1cblxuICAgIC8vIElmIG1lc3NhZ2Ugd2FzIHVuZGVmaW5lZCB0aGVuIHNldCBpdCB0byBsZXZlbFxuICAgIGlmIChpc1VuZGVmaW5lZChtZXNzYWdlKSkgbWVzc2FnZSA9IGxldmVsO1xuXG4gICAgLy8gSWYgb25seSBgbWVzc2FnZWAgd2FzIHBhc3NlZCB0aGVuIGlmIGl0IHdhcyBhbiBPYmplY3RcbiAgICAvLyBwcmVzZXJ2ZSBpdCBhcyBhbiBPYmplY3QgYnkgc2V0dGluZyBpdCBhcyBtZXRhXG4gICAgaWYgKFxuICAgICAgb3JpZ2luYWxBcmdzLnNsaWNlKDEgKyBtb2RpZmllcikubGVuZ3RoID09PSAxICYmXG4gICAgICAhaXNTdHJpbmcobWVzc2FnZSkgJiZcbiAgICAgICFpc0Vycm9yKG1lc3NhZ2UpXG4gICAgKSB7XG4gICAgICBtZXRhID0geyBtZXNzYWdlIH07XG4gICAgICBtZXNzYWdlID0gbGV2ZWw7XG4gICAgfSBlbHNlIGlmICghaXNCdW55YW4gJiYgb3JpZ2luYWxBcmdzLmxlbmd0aCA+PSA0ICsgbW9kaWZpZXIpIHtcbiAgICAgIG1lc3NhZ2UgPSB1bmRlZmluZWQ7XG5cbiAgICAgIG1ldGEgPSB7fTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IGFyZyBvZiBvcmlnaW5hbEFyZ3MpIHtcbiAgICAgICAgaWYgKGlzRXJyb3IoYXJnKSkgZXJyb3JzLnB1c2goYXJnKTtcbiAgICAgICAgZWxzZSBpZiAoaXNTdHJpbmcoYXJnKSkgbWVzc2FnZXMucHVzaChhcmcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCAmJiBtZXNzYWdlcy5sZW5ndGggPiAwKVxuICAgICAgICBtZXNzYWdlID0gZm9ybWF0KC4uLm1lc3NhZ2VzKTtcbiAgICAgIGVsc2UgaWYgKGVycm9ycy5sZW5ndGggPiAwICYmIGxldmVsID09PSAnbG9nJykgbGV2ZWwgPSAnZXJyb3InO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhaXNCdW55YW4gJiZcbiAgICAgIG9yaWdpbmFsQXJncy5sZW5ndGggPT09IDMgKyBtb2RpZmllciAmJlxuICAgICAgaXNTdHJpbmcobWVzc2FnZSkgJiZcbiAgICAgIGZvcm1hdFNwZWNpZmllcnMuc29tZSgodCkgPT4gbWVzc2FnZS5pbmRleE9mKHQpICE9PSAtMSlcbiAgICApIHtcbiAgICAgIC8vIE90aGVyd2lzZSBpZiB0aGVyZSBhcmUgdGhyZWUgYXJncyBhbmQgaWYgdGhlIGBtZXNzYWdlYCBjb250YWluc1xuICAgICAgLy8gYSBwbGFjZWhvbGRlciB0b2tlbiAoZS5nLiAnJXMnIG9yICclZCcgLSBzZWUgYWJvdmUgYGZvcm1hdFNwZWNpZmllcnNgIHZhcmlhYmxlKVxuICAgICAgLy8gdGhlbiB3ZSBjYW4gaW5mZXIgdGhhdCB0aGUgYG1ldGFgIGFyZyBwYXNzZWQgaXMgdXNlZCBmb3IgZm9ybWF0dGluZ1xuICAgICAgbWVzc2FnZSA9IGZvcm1hdChtZXNzYWdlLCBtZXRhKTtcbiAgICAgIG1ldGEgPSB7fTtcbiAgICB9IGVsc2UgaWYgKCFpc0Vycm9yKG1lc3NhZ2UpKSB7XG4gICAgICBpZiAoaXNFcnJvcihtZXRhKSkge1xuICAgICAgICBlcnJvcnMucHVzaChtZXRhKTtcbiAgICAgICAgbWV0YSA9IHt9O1xuICAgICAgfSBlbHNlIGlmICghaXNPYmplY3QobWV0YSkgJiYgIWlzVW5kZWZpbmVkKG1ldGEpICYmICFpc051bGwobWV0YSkpIHtcbiAgICAgICAgLy8gSWYgdGhlIGBtZXRhYCB2YXJpYWJsZSBwYXNzZWQgd2FzIG5vdCBhbiBPYmplY3QgdGhlbiBjb252ZXJ0IGl0XG4gICAgICAgIG1lc3NhZ2UgPSBmb3JtYXQobWVzc2FnZSwgbWV0YSk7XG4gICAgICAgIG1ldGEgPSB7fTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKG1lc3NhZ2UpKSB7XG4gICAgICAgIC8vIElmIHRoZSBtZXNzYWdlIGlzIG5vdCBhIHN0cmluZyB0aGVuIHdlIHNob3VsZCBydW4gYHV0aWwuZm9ybWF0YCBvbiBpdFxuICAgICAgICAvLyBhc3N1bWluZyB3ZSdyZSBmb3JtYXR0aW5nIGl0IGxpa2UgaXQgd2FzIGFub3RoZXIgYXJndW1lbnRcbiAgICAgICAgLy8gKGFzIG9wcG9zZWQgdG8gdXNpbmcgc29tZXRoaW5nIGxpa2UgZmFzdC1qc29uLXN0cmluZ2lmeSlcbiAgICAgICAgbWVzc2FnZSA9IGZvcm1hdChtZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzRXJyb3IobWV0YSkpIHtcbiAgICAgIGVycm9ycy5wdXNoKG1ldGEpO1xuICAgICAgLy8gaGFuZGxlIGFkZGl0aW9uYWwgYXJnc1xuICAgICAgZm9yIChjb25zdCBhcmcgb2Ygb3JpZ2luYWxBcmdzLnNsaWNlKDIgKyBtb2RpZmllcikpIHtcbiAgICAgICAgLy8gc2hvdWxkIHNraXAgdGhpcyBiZXR0ZXIgd2l0aCBzbGljZSBhbmQgbW9kaWZpZXIgYWRqdXN0bWVudFxuICAgICAgICBpZiAobWV0YSA9PT0gYXJnKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGlzRXJyb3IoYXJnKSkgZXJyb3JzLnB1c2goYXJnKTtcbiAgICAgIH1cblxuICAgICAgbWV0YSA9IHt9O1xuICAgIH1cblxuICAgIGlmICghaXNVbmRlZmluZWQobWV0YSkgJiYgIWlzT2JqZWN0KG1ldGEpKSBtZXRhID0geyBvcmlnaW5hbF9tZXRhOiBtZXRhIH07XG4gICAgZWxzZSBpZiAoIWlzT2JqZWN0KG1ldGEpKSBtZXRhID0ge307XG5cbiAgICBpZiAoaXNFcnJvcihtZXNzYWdlKSkge1xuICAgICAgZXJyb3JzLnVuc2hpZnQobWVzc2FnZSk7XG4gICAgICBtZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gcmV3cml0ZSBgbWV0YS5lcnJgIHRvIGBtZXRhLm9yaWdpbmFsX2VycmAgZm9yIGNvbnNpc3RlbmN5XG4gICAgLy8gKGluIGNhc2Ugc29tZW9uZSBoYXMgYW4gb2JqZWN0IHdpdGggYC5lcnJgIHByb3BlcnR5IG9uIGl0IHdpdGggYW4gZXJyb3IpXG4gICAgLy9cbiAgICBpZiAoaXNPYmplY3QobWV0YS5lcnIpKSB7XG4gICAgICBpZiAoaXNFcnJvcihtZXRhLmVycikpIGVycm9ycy5wdXNoKG1ldGEuZXJyKTtcbiAgICAgIG1ldGEub3JpZ2luYWxfZXJyID0gaXNFcnJvcihtZXRhLmVycikgPyBwYXJzZUVycihtZXRhLmVycikgOiBtZXRhLmVycjtcbiAgICB9XG5cbiAgICBsZXQgZXJyO1xuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZXJyID0gZXJyb3JzWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICAgIFsuLi5uZXcgU2V0KGVycm9ycy5tYXAoKGUpID0+IGUubWVzc2FnZSkuZmlsdGVyKEJvb2xlYW4pKV0uam9pbignOyAnKVxuICAgICAgICApO1xuICAgICAgICBlcnIuc3RhY2sgPSBbXG4gICAgICAgICAgLi4ubmV3IFNldChlcnJvcnMubWFwKChlKSA9PiBlLnN0YWNrKS5maWx0ZXIoQm9vbGVhbikpXG4gICAgICAgIF0uam9pbignXFxuXFxuJyk7XG4gICAgICAgIGVyci5lcnJvcnMgPSBlcnJvcnM7XG4gICAgICB9XG5cbiAgICAgIG1ldGEuZXJyID0gcGFyc2VFcnIoZXJyKTtcbiAgICAgIGlmICghaXNTdHJpbmcobWVzc2FnZSkpIG1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIE5PVEU6IHRoaXMgd2FzIHJlbW92ZWQgaW4gdjEwLjIuMiBkdWUgdG8gY2lyY3VsYXIgcmVmZXJlbmNlIGlzc3Vlc1xuICAgIC8vICAgICAgICh0aGUgd29ya2Fyb3VuZCB3b3VsZCBpbnZvbHZlIHNhZmVTdHJpbmdpZnkgYW5kIHRoZW4gSlNPTi5wYXJzZSB3aGljaCB3b3VsZCBiZSBwZXJmIGJsb2F0KVxuICAgIC8vICAgICAgICh0aGVyZSBzdGlsbCBtaWdodCBiZSBhbm90aGVyIHdvcmthcm91bmQgb3IgcGVyaGFwcyB3ZSBkb24ndCBhZGQgYWxsIHRoZSBhcmdzIGhlcmUgZXhjZXB0IGFkZGl0aW9uYWwpXG4gICAgLy9cbiAgICAvLyBTZXQgYGFyZ3NgIHByb3Agd2l0aCBvcmlnaW5hbCBhcmd1bWVudHMgcGFzc2VkXG4gICAgLy8gbWV0YS5hcmdzID0gb3JpZ2luYWxBcmdzO1xuXG4gICAgLy8gU2V0IGRlZmF1bHQgbGV2ZWwgb24gbWV0YVxuICAgIG1ldGEubGV2ZWwgPSBsZXZlbDtcblxuICAgIC8vIEFkZCBgYXBwYCBvYmplY3QgdG8gbWV0YWRhdGFcbiAgICBpZiAodGhpcy5hcHBJbmZvKSBtZXRhLmFwcCA9IHRoaXMuYXBwSW5mbztcblxuICAgIC8vXG4gICAgLy8gZGV0ZXJtaW5lIGxvZyBtZXRob2QgdG8gdXNlXG4gICAgLy9cbiAgICAvLyBpZiB3ZSBkaWRuJ3QgcGFzcyBhIGxldmVsIGFzIGEgbWV0aG9kXG4gICAgLy8gKGUuZy4gY29uc29sZS5pbmZvKSwgdGhlbiB3ZSBzaG91bGQgc3RpbGxcbiAgICAvLyB1c2UgdGhlIGxvZ2dlcidzIGBsb2dgIG1ldGhvZCB0byBvdXRwdXRcbiAgICAvL1xuICAgIC8vIGFuZCBmYXRhbCBzaG91bGQgdXNlIGVycm9yIChlLmcuIGluIGJyb3dzZXIpXG4gICAgLy9cbiAgICBjb25zdCBtZXRob2QgPSBtb2RpZmllciA9PT0gLTEgPyAnbG9nJyA6IGxldmVsO1xuXG4gICAgLy8gcHJlLWhvb2tzXG4gICAgZm9yIChjb25zdCBob29rIG9mIHRoaXMuY29uZmlnLmhvb2tzLnByZSkge1xuICAgICAgW2VyciwgbWVzc2FnZSwgbWV0YV0gPSBob29rKG1ldGhvZCwgZXJyLCBtZXNzYWdlLCBtZXRhKTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIE5PVEU6IHVzaW5nIGxvZGFzaCBfLm9taXQgYW5kIF8ucGljayB3b3VsZCBoYXZlIGJlZW4gX3Zlcnkgc2xvd19cbiAgICAvL1xuICAgIC8vIGNvbnN0IG9taXR0ZWRBbmRQaWNrZWRGaWVsZHMgPSB7XG4gICAgLy8gICAuLi5fLm9taXQobWV0YSwgdGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSxcbiAgICAvLyAgIC4uLl8ucGljayhtZXRhLCB0aGlzLmNvbmZpZy5tZXRhLnBpY2tlZEZpZWxkcylcbiAgICAvLyB9O1xuICAgIC8vXG4gICAgLy8gYWxzbyB3ZSBkb24ndCB3YW50IHRvIG11dGF0ZSBhbnl0aGluZyBpbiBgbWV0YWBcbiAgICAvLyBhbmQgaWRlYWxseSB3ZSBvbmx5IHdhbnQgdG8gcGljayBleGFjdGx5IHdoYXQgd2UgbmVlZFxuICAgIC8vIChhbmQgbm90IGhhdmUgdHdvIG9wZXJhdGlvbnMsIG9uZSBmb3Igb21pdCwgYW5kIG9uZSBmb3IgcGljaylcbiAgICAvL1xuXG4gICAgLy8gc2V0IGEgYm9vbGVhbiBmbGFnIGlmIHdlIGhhZCB0aGUgc2lsZW50IHN5bWJvbCBvciBub3RcbiAgICBjb25zdCBoYWRUcnVlU2lsZW50U3ltYm9sID0gYm9vbGVhbihtZXRhW3NpbGVudFN5bWJvbF0pO1xuXG4gICAgaWYgKCFpc0VtcHR5KHRoaXMuY29uZmlnLm1ldGEucmVtYXBwZWRGaWVsZHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXModGhpcy5jb25maWcubWV0YS5yZW1hcHBlZEZpZWxkcykpIHtcbiAgICAgICAgc2V0KG1ldGEsIHRoaXMuY29uZmlnLm1ldGEucmVtYXBwZWRGaWVsZHNba2V5XSwgZ2V0KG1ldGEsIGtleSkpO1xuICAgICAgICB1bnNldChtZXRhLCBrZXkpO1xuICAgICAgICAvLyBjbGVhbnVwIGVtcHR5IG9iamVjdHMgYWZ0ZXIgcmVtYXBwaW5nXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5tZXRhLmNsZWFudXBSZW1hcHBpbmcpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGtleS5sYXN0SW5kZXhPZignLicpO1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IHBhcmVudEtleSA9IGtleS5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgICAgaWYgKGlzRW1wdHkoZ2V0KG1ldGEsIHBhcmVudEtleSkpKSB1bnNldChtZXRhLCBwYXJlbnRLZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSB8fFxuICAgICAgIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5waWNrZWRGaWVsZHMpXG4gICAgKSB7XG4gICAgICBjb25zdCBkb3RpZmllZCA9IGRvdGlmeVRvQXJyYXkobWV0YSk7XG4gICAgICAvLyBkb3RpZmllZCA9IFtcbiAgICAgIC8vICAgJ2Vyci5uYW1lJyxcbiAgICAgIC8vICAgJ2Vyci5tZXNzYWdlJyxcbiAgICAgIC8vICAgJ2Vyci5zdGFjaycsXG4gICAgICAvLyAgICdsZXZlbCcsXG4gICAgICAvLyAgICdhcHAubmFtZScsXG4gICAgICAvLyAgICdhcHAudmVyc2lvbicsXG4gICAgICAvLyAgICdhcHAubm9kZScsXG4gICAgICAvLyAgICdhcHAuaGFzaCcsXG4gICAgICAvLyAgIC8vIC4uLlxuICAgICAgLy8gXVxuXG4gICAgICBpZiAoIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgdGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSB7XG4gICAgICAgICAgLy8gPGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85ODgyMzQ5PlxuICAgICAgICAgIGxldCBpID0gZG90aWZpZWQubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZG90aWZpZWRbaV0gPT09IHByb3AgfHxcbiAgICAgICAgICAgICAgKCFpc1N5bWJvbChkb3RpZmllZFtpXSkgJiYgZG90aWZpZWRbaV0uaW5kZXhPZihgJHtwcm9wfS5gKSA9PT0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZG90aWZpZWQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwaWNrZWRTeW1ib2xzID0gW107XG5cbiAgICAgIGlmICghaXNFbXB0eSh0aGlzLmNvbmZpZy5tZXRhLnBpY2tlZEZpZWxkcykpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHRoaXMuY29uZmlnLm1ldGEucGlja2VkRmllbGRzKSB7XG4gICAgICAgICAgLy8gcmVzcG9uc2UuaGVhZGVycy5ib29wXG4gICAgICAgICAgLy8gcmVzcG9uc2UuaGVhZGVycy5iZWVwXG4gICAgICAgICAgLy8gcmVzcG9uc2UuYm9keVxuICAgICAgICAgIC8vIHJlc3BvbnNlLnRleHRcbiAgICAgICAgICAvLyByZXNwb25zZVxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gc28gd2UgbmVlZCB0byBzcGxpdCBieSB0aGUgZmlyc3QgcGVyaW9kIGFuZCBvbWl0IGFueSBrZXlzIGZyb20gZG90aWZpZWQgc3RhcnRpbmcgd2l0aCBpdFxuICAgICAgICAgIGlmIChpc1N5bWJvbChwcm9wKSkge1xuICAgICAgICAgICAgaWYgKG1ldGFbcHJvcF0pIHBpY2tlZFN5bWJvbHMucHVzaChbcHJvcCwgbWV0YVtwcm9wXV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHByb3AuaW5kZXhPZignLicpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gcHJvcC5zbGljZSgwLCBpbmRleCArIDEpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBsZXQgaSA9IGRvdGlmaWVkLmxlbmd0aDtcbiAgICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNTeW1ib2woZG90aWZpZWRbaV0pICYmIGRvdGlmaWVkW2ldLmluZGV4T2Yoa2V5KSA9PT0gMClcbiAgICAgICAgICAgICAgICAgIGRvdGlmaWVkLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGZpbmFsbHkgYWRkIGl0IGlmIGl0IGRpZCBub3QgYWxyZWFkeSBleGlzdFxuICAgICAgICAgIGlmIChkb3RpZmllZC5pbmRleE9mKHByb3ApID09PSAtMSkgZG90aWZpZWQucHVzaChwcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL1xuICAgICAgLy8gaXRlcmF0ZSBvdmVyIGFsbCBkb3RpZmllZCB2YWx1ZXMgdG8gY2hlY2sgZm9yIHN5bWJvbHNcbiAgICAgIC8vXG4gICAgICAvLyBOT1RFOiB0aGlzIGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IHRoYXQgdGhleSBjb3VsZCBhbHJlYWR5IGJlIGluIGBwaWNrZWRTeW1ib2xzYFxuICAgICAgLy8gICAgICAgKGFuZCBpdCBkb2Vzbid0IGFsc28gZG8gYmlnaW50cyB5ZXQpXG4gICAgICAvL1xuICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGRvdGlmaWVkKSB7XG4gICAgICAgIGlmIChpc1N5bWJvbChwcm9wKSAmJiBtZXRhW3Byb3BdKVxuICAgICAgICAgIHBpY2tlZFN5bWJvbHMucHVzaChbcHJvcCwgbWV0YVtwcm9wXV0pO1xuICAgICAgfVxuXG4gICAgICAvL1xuICAgICAgLy8gbm93IHdlIGNhbGwgcGljay1kZWVwIHVzaW5nIHRoZSBmaW5hbCBhcnJheVxuICAgICAgLy9cbiAgICAgIC8vIE5PVEU6IHRoaXMgZG9lcyBub3QgcGljayBzeW1ib2xzIG5vciBiaWdpbnRzXG4gICAgICAvL1xuICAgICAgbWV0YSA9IHBpY2tEZWVwKG1ldGEsIGRvdGlmaWVkKTtcblxuICAgICAgLy9cbiAgICAgIC8vIGlmIHRoZXJlIHdlcmUgYW55IHRvcC1sZXZlbCBzeW1ib2xzIHRvIGJlXG4gICAgICAvLyBwaWNrZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGVtIGJhY2sgaGVyZSB0byB0aGUgbGlzdFxuICAgICAgLy9cbiAgICAgIC8vIE5PVEU6IHdlJ2QgcHJvYmFibHkgd2FudCB0byBkbyB0aGUgc2FtZSBmb3IgYmlnaW50cyBhcyBzeW1ib2xzXG4gICAgICAvL1xuICAgICAgaWYgKHBpY2tlZFN5bWJvbHMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBwaWNrZWRTeW1ib2xzKSB7XG4gICAgICAgICAgbWV0YVtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvbmx5IGludm9rZSBsb2dnZXIgbWV0aG9kcyBpZiBpdCB3YXMgbm90IHNpbGVudFxuICAgIGlmICghdGhpcy5jb25maWcuc2lsZW50ICYmICFoYWRUcnVlU2lsZW50U3ltYm9sKSB7XG4gICAgICAvLyBTaG93IHN0YWNrIHRyYWNlIGlmIG5lY2Vzc2FyeSAoYWxvbmcgd2l0aCBhbnkgbWV0YWRhdGEpXG4gICAgICBpZiAoaXNFcnJvcihlcnIpICYmIHRoaXMuY29uZmlnLnNob3dTdGFjaykge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLm1ldGEuc2hvdyB8fCBpc0VtcHR5KG1ldGEpKSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0oZXJyKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0aGlzLmNvbmZpZy5tZXRhLmhpZGVNZXRhICYmXG4gICAgICAgICAgbWV0YVt0aGlzLmNvbmZpZy5tZXRhLmhpZGVNZXRhXVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbbWV0aG9kXShlcnIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKGVyciwgbWV0YSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuY29uZmlnLm1ldGEuc2hvdyB8fCBpc0VtcHR5KG1ldGEpKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHRoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGEgJiYgbWV0YVt0aGlzLmNvbmZpZy5tZXRhLmhpZGVNZXRhXSkgfHxcbiAgICAgICAgKHRoaXMuY29uZmlnLm1ldGEuaGlkZUhUVFAgJiYgbWV0YVt0aGlzLmNvbmZpZy5tZXRhLmhpZGVIVFRQXSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbbWV0aG9kXShtZXNzYWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKG1lc3NhZ2UsIG1ldGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHBvc3QtaG9va3NcbiAgICBpZiAodGhpcy5jb25maWcuaG9va3MucG9zdC5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4geyBtZXRob2QsIGVyciwgbWVzc2FnZSwgbWV0YSB9O1xuICAgIHJldHVybiBwTWFwU2VyaWVzKHRoaXMuY29uZmlnLmhvb2tzLnBvc3QsIChob29rKSA9PlxuICAgICAgaG9vayhtZXRob2QsIGVyciwgbWVzc2FnZSwgbWV0YSlcbiAgICApXG4gICAgICAudGhlbigpXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuZXJyb3IoZXJyKTtcbiAgICAgIH0pO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQXhlO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0FBLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzs7QUFFM0I7QUFDQSxNQUFNQyxFQUFFLEdBQUdELE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDeEIsTUFBTUUsTUFBTSxHQUFHRixPQUFPLENBQUMsb0JBQW9CLENBQUM7QUFDNUMsTUFBTUcsZ0JBQWdCLEdBQUdILE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztBQUNyRCxNQUFNSSxHQUFHLEdBQUdKLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztBQUN2QyxNQUFNSyxPQUFPLEdBQUdMLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDbEMsTUFBTU0sUUFBUSxHQUFHTixPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ3JDLE1BQU1PLFlBQVksR0FBR1AsT0FBTyxDQUFDLGVBQWUsQ0FBQztBQUM3QyxNQUFNUSxVQUFVLEdBQUdSLE9BQU8sQ0FBQyxjQUFjLENBQUM7QUFDMUMsTUFBTVMsWUFBWSxHQUFHVCxPQUFPLENBQUMsZ0JBQWdCLENBQUM7QUFDOUMsTUFBTVUsUUFBUSxHQUFHVixPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ3JDLE1BQU1XLFFBQVEsR0FBR1gsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUNyQyxNQUFNWSxHQUFHLEdBQUdaLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztBQUN2QyxNQUFNYSxLQUFLLEdBQUdiLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDcEMsTUFBTTtFQUFFYztBQUFR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
|
|
512
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwib3MiLCJmb3JtYXQiLCJmb3JtYXRTcGVjaWZpZXJzIiwiZ2V0IiwiaXNFcnJvciIsImlzU3ltYm9sIiwibWVyZ2VPcHRpb25zIiwicE1hcFNlcmllcyIsInBhcnNlQXBwSW5mbyIsInBhcnNlRXJyIiwicGlja0RlZXAiLCJzZXQiLCJ1bnNldCIsImJvb2xlYW4iLCJwa2ciLCJzaWxlbnRTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJvbWl0dGVkTG9nZ2VyS2V5cyIsIlNldCIsImxldmVscyIsImFsaWFzZXMiLCJ3YXJuaW5nIiwiZXJyIiwibGV2ZWxFcnJvciIsImpvaW4iLCJuYW1lIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiSE9TVE5BTUUiLCJob3N0bmFtZSIsImlzUGxhaW5PYmplY3QiLCJ2YWx1ZSIsInByb3RvdHlwZSIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwidG9TdHJpbmdUYWciLCJpdGVyYXRvciIsImRvdGlmeVRvQXJyYXkiLCJvYmoiLCJyZXMiLCJyZWN1cnNlIiwiY3VycmVudCIsImtleSIsIlJlZmxlY3QiLCJvd25LZXlzIiwiY29udmVydGVkS2V5Iiwia2V5Rm9yIiwiZGVzY3JpcHRpb24iLCJuZXdLZXkiLCJwdXNoIiwiaXNFbXB0eSIsInVuZGVmaW5lZCIsImxlbmd0aCIsInRyaW0iLCJpc051bGwiLCJpc1VuZGVmaW5lZCIsImlzT2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwiaXNTdHJpbmciLCJpc0Z1bmN0aW9uIiwiQXhlIiwiY29uc3RydWN0b3IiLCJfdGhpcyIsImNvbmZpZyIsImFyZ3VtZW50cyIsInJlbWFwcGVkRmllbGRzIiwiQVhFX1JFTUFQUEVEX01FVEFfRklFTERTIiwiZmllbGRzIiwiYXJyIiwic3BsaXQiLCJtYXAiLCJ2IiwicHJvcCIsIm9taXR0ZWRGaWVsZHMiLCJBWEVfT01JVF9NRVRBX0ZJRUxEUyIsInMiLCJwaWNrZWRGaWVsZHMiLCJBWEVfUElDS19NRVRBX0ZJRUxEUyIsInNob3dTdGFjayIsIkFYRV9TSE9XX1NUQUNLIiwibWV0YSIsImFzc2lnbiIsInNob3ciLCJBWEVfU0hPV19NRVRBIiwiY2xlYW51cFJlbWFwcGluZyIsImhpZGVIVFRQIiwiaGlkZU1ldGEiLCJ2ZXJzaW9uIiwic2lsZW50IiwibG9nZ2VyIiwiY29uc29sZSIsImxldmVsIiwiYXBwSW5mbyIsIkFYRV9BUFBfSU5GTyIsImhvb2tzIiwicHJlIiwicG9zdCIsImxvZyIsImJpbmQiLCJtZXRob2RzIiwia2V5cyIsImZpbHRlciIsImhhcyIsImVsZW1lbnQiLCJmYXRhbCIsImVycm9yIiwiaW5mbyIsIl9sZW4iLCJhcmdzIiwiX2tleSIsInNsaWNlIiwiY2FsbCIsInNldExldmVsIiwiZ2V0Tm9ybWFsaXplZExldmVsIiwic2V0TmFtZSIsIndhcm4iLCJmbiIsIl9sZXZlbCIsIl9sZW4yIiwiX2tleTIiLCJfbGVuMyIsIl9rZXkzIiwiaW5kZXhPZiIsIkVycm9yIiwibG9nTGV2ZWwiLCJzY29wZSIsIm1lc3NhZ2UiLCJvcmlnaW5hbEFyZ3MiLCJlcnJvcnMiLCJfbGVuNCIsIl9rZXk0IiwiYXJnIiwibW9kaWZpZXIiLCJpc0J1bnlhbiIsIl9tZXRhIiwibWVzc2FnZXMiLCJzb21lIiwidCIsIm9yaWdpbmFsX21ldGEiLCJ1bnNoaWZ0Iiwib3JpZ2luYWxfZXJyIiwiZSIsIkJvb2xlYW4iLCJzdGFjayIsImFwcCIsIm1ldGhvZCIsImhvb2siLCJoYWRUcnVlU2lsZW50U3ltYm9sIiwiaW5kZXgiLCJsYXN0SW5kZXhPZiIsInBhcmVudEtleSIsImRvdGlmaWVkIiwiaSIsInNwbGljZSIsInBpY2tlZFN5bWJvbHMiLCJ0aGVuIiwiY2F0Y2giLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5hc3NpZ25lZC1pbXBvcnRcbnJlcXVpcmUoJ2NvbnNvbGUtcG9seWZpbGwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLW5vZGUtcHJvdG9jb2xcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IGZvcm1hdCA9IHJlcXVpcmUoJ0BsYWRqcy9mb3JtYXQtdXRpbCcpO1xuY29uc3QgZm9ybWF0U3BlY2lmaWVycyA9IHJlcXVpcmUoJ2Zvcm1hdC1zcGVjaWZpZXJzJyk7XG5jb25zdCBnZXQgPSByZXF1aXJlKCdAc3RyaWtlZW50Y28vZ2V0Jyk7XG5jb25zdCBpc0Vycm9yID0gcmVxdWlyZSgnaXNlcnJvcicpO1xuY29uc3QgaXNTeW1ib2wgPSByZXF1aXJlKCdpcy1zeW1ib2wnKTtcbmNvbnN0IG1lcmdlT3B0aW9ucyA9IHJlcXVpcmUoJ21lcmdlLW9wdGlvbnMnKTtcbmNvbnN0IHBNYXBTZXJpZXMgPSByZXF1aXJlKCdwLW1hcC1zZXJpZXMnKTtcbmNvbnN0IHBhcnNlQXBwSW5mbyA9IHJlcXVpcmUoJ3BhcnNlLWFwcC1pbmZvJyk7XG5jb25zdCBwYXJzZUVyciA9IHJlcXVpcmUoJ3BhcnNlLWVycicpO1xuY29uc3QgcGlja0RlZXAgPSByZXF1aXJlKCdwaWNrLWRlZXAnKTtcbmNvbnN0IHNldCA9IHJlcXVpcmUoJ0BzdHJpa2VlbnRjby9zZXQnKTtcbmNvbnN0IHVuc2V0ID0gcmVxdWlyZSgndW5zZXQtdmFsdWUnKTtcbmNvbnN0IHsgYm9vbGVhbiB9ID0gcmVxdWlyZSgnYm9vbGVhbicpO1xuY29uc3QgcGtnID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJyk7XG5cbmNvbnN0IHNpbGVudFN5bWJvbCA9IFN5bWJvbC5mb3IoJ2F4ZS5zaWxlbnQnKTtcbmNvbnN0IG9taXR0ZWRMb2dnZXJLZXlzID0gbmV3IFNldChbJ2NvbmZpZycsICdsb2cnXSk7XG5jb25zdCBsZXZlbHMgPSBbJ3RyYWNlJywgJ2RlYnVnJywgJ2luZm8nLCAnd2FybicsICdlcnJvcicsICdmYXRhbCddO1xuY29uc3QgYWxpYXNlcyA9IHsgd2FybmluZzogJ3dhcm4nLCBlcnI6ICdlcnJvcicgfTtcbmNvbnN0IGxldmVsRXJyb3IgPSBgXFxgbGV2ZWxcXGAgaW52YWxpZCwgbXVzdCBiZTogJHtsZXZlbHMuam9pbignLCAnKX1gO1xuY29uc3QgbmFtZSA9XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnXG4gICAgPyBmYWxzZVxuICAgIDogcHJvY2Vzcy5lbnYuSE9TVE5BTUUgfHwgb3MuaG9zdG5hbWUoKTtcblxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvaXMtcGxhaW4tb2JqL2Jsb2IvbWFpbi9pbmRleC5qcz5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICByZXR1cm4gKFxuICAgIChwcm90b3R5cGUgPT09IG51bGwgfHxcbiAgICAgIHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fFxuICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmXG4gICAgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsdWUpICYmXG4gICAgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsdWUpICYmXG4gICAgIWlzU3ltYm9sKHZhbHVlKVxuICApO1xufVxuXG4vLyA8aHR0cHM6Ly9naXRodWIuY29tL0dlZW5lblRpamQvZG90aWZ5L2Jsb2IvbWFzdGVyL2RvdGlmeS5qcz5cbmZ1bmN0aW9uIGRvdGlmeVRvQXJyYXkob2JqKSB7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBmdW5jdGlvbiByZWN1cnNlKG9iaiwgY3VycmVudCkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhvYmopKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgY29uc3QgY29udmVydGVkS2V5ID0gaXNTeW1ib2woa2V5KVxuICAgICAgICA/IFN5bWJvbC5rZXlGb3Ioa2V5KSB8fCBrZXkuZGVzY3JpcHRpb25cbiAgICAgICAgOiBrZXk7XG4gICAgICBjb25zdCBuZXdLZXkgPSBjdXJyZW50ID8gY3VycmVudCArICcuJyArIGNvbnZlcnRlZEtleSA6IGNvbnZlcnRlZEtleTsgLy8gam9pbmVkIGtleSB3aXRoIGRvdFxuICAgICAgLy8gaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpICYmICFPYmplY3RJRC5pc1ZhbGlkKHZhbHVlKSkge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJlcy5wdXNoKGNvbnZlcnRlZEtleSk7XG4gICAgICAgIHJlY3Vyc2UodmFsdWUsIG5ld0tleSk7IC8vIGl0J3MgYSBuZXN0ZWQgb2JqZWN0LCBzbyBkbyBpdCBhZ2FpblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzLnB1c2gobmV3S2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWN1cnNlKG9iaik7XG4gIHJldHVybiByZXM7XG59XG5cbi8vIDxodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDMyMzMxNjM+XG5mdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgIHZhbHVlID09PSBudWxsIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5vd25LZXlzKHZhbHVlKS5sZW5ndGggPT09IDApIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA9PT0gMClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNOdWxsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuY2xhc3MgQXhlIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICBjb25zdCByZW1hcHBlZEZpZWxkcyA9IHt9O1xuICAgIGlmIChwcm9jZXNzLmVudi5BWEVfUkVNQVBQRURfTUVUQV9GSUVMRFMpIHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IHByb2Nlc3MuZW52LkFYRV9SRU1BUFBFRF9NRVRBX0ZJRUxEUztcbiAgICAgIGNvbnN0IGFyciA9IGZpZWxkcy5zcGxpdCgnLCcpLm1hcCgodikgPT4gdi5zcGxpdCgnOicpKTtcbiAgICAgIGZvciAoY29uc3QgW3Byb3AsIHZhbHVlXSBvZiBhcnIpIHtcbiAgICAgICAgcmVtYXBwZWRGaWVsZHNbcHJvcF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlbnZpZnkgZG9lcyBub3Qgc3VwcG9ydCBjb25kaXRpb25hbHMgd2VsbCBlbm91Z2ggc28gd2UgZGVjbGFyZSB2YXJzIG91dHNpZGVcbiAgICBsZXQgb21pdHRlZEZpZWxkcyA9IHByb2Nlc3MuZW52LkFYRV9PTUlUX01FVEFfRklFTERTO1xuICAgIGlmICh0eXBlb2Ygb21pdHRlZEZpZWxkcyA9PT0gJ3N0cmluZycpXG4gICAgICBvbWl0dGVkRmllbGRzID0gb21pdHRlZEZpZWxkcy5zcGxpdCgnLCcpLm1hcCgocykgPT4gcy50cmltKCkpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShvbWl0dGVkRmllbGRzKSkgb21pdHRlZEZpZWxkcyA9IFtdO1xuXG4gICAgbGV0IHBpY2tlZEZpZWxkcyA9IHByb2Nlc3MuZW52LkFYRV9QSUNLX01FVEFfRklFTERTO1xuICAgIGlmICh0eXBlb2YgcGlja2VkRmllbGRzID09PSAnc3RyaW5nJylcbiAgICAgIHBpY2tlZEZpZWxkcyA9IHBpY2tlZEZpZWxkcy5zcGxpdCgnLCcpLm1hcCgocykgPT4gcy50cmltKCkpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwaWNrZWRGaWVsZHMpKSBwaWNrZWRGaWVsZHMgPSBbXTtcblxuICAgIHRoaXMuY29uZmlnID0gbWVyZ2VPcHRpb25zKFxuICAgICAge1xuICAgICAgICBzaG93U3RhY2s6IHByb2Nlc3MuZW52LkFYRV9TSE9XX1NUQUNLXG4gICAgICAgICAgPyBib29sZWFuKHByb2Nlc3MuZW52LkFYRV9TSE9XX1NUQUNLKVxuICAgICAgICAgIDogdHJ1ZSxcbiAgICAgICAgbWV0YTogT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzaG93OiBwcm9jZXNzLmVudi5BWEVfU0hPV19NRVRBXG4gICAgICAgICAgICAgID8gYm9vbGVhbihwcm9jZXNzLmVudi5BWEVfU0hPV19NRVRBKVxuICAgICAgICAgICAgICA6IHRydWUsXG4gICAgICAgICAgICByZW1hcHBlZEZpZWxkcyxcbiAgICAgICAgICAgIG9taXR0ZWRGaWVsZHMsXG4gICAgICAgICAgICBwaWNrZWRGaWVsZHMsXG4gICAgICAgICAgICBjbGVhbnVwUmVtYXBwaW5nOiB0cnVlLFxuICAgICAgICAgICAgaGlkZUhUVFA6ICdpc19odHRwJyxcbiAgICAgICAgICAgIC8vIGltcGxlbWVudGVkIG1haW5seSBmb3IgQGxhZGpzL2dyYWNlZnVsIHRvXG4gICAgICAgICAgICAvLyBzdXBwcmVzcyB1bm5lY2Vzc2FyeSBtZXRhIG91dHB1dCB0byBjb25zb2xlXG4gICAgICAgICAgICBoaWRlTWV0YTogJ2hpZGVfbWV0YSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR5cGVvZiBjb25maWcubWV0YSA9PT0gJ29iamVjdCcgPyBjb25maWcubWV0YSA6IHt9XG4gICAgICAgICksXG4gICAgICAgIHZlcnNpb246IHBrZy52ZXJzaW9uLFxuICAgICAgICBzaWxlbnQ6IGZhbHNlLFxuICAgICAgICBsb2dnZXI6IGNvbnNvbGUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICAgIGxldmVsczogWydpbmZvJywgJ3dhcm4nLCAnZXJyb3InLCAnZmF0YWwnXSxcbiAgICAgICAgYXBwSW5mbzogcHJvY2Vzcy5lbnYuQVhFX0FQUF9JTkZPXG4gICAgICAgICAgPyBib29sZWFuKHByb2Nlc3MuZW52LkFYRV9BUFBfSU5GTylcbiAgICAgICAgICA6IHRydWUsXG4gICAgICAgIGhvb2tzOiBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByZTogW10sXG4gICAgICAgICAgICBwb3N0OiBbXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHlwZW9mIGNvbmZpZy5ob29rcyA9PT0gJ29iamVjdCcgPyBjb25maWcuaG9va3MgOiB7fVxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgY29uZmlnXG4gICAgKTtcblxuICAgIHRoaXMuYXBwSW5mbyA9IHRoaXMuY29uZmlnLmFwcEluZm9cbiAgICAgID8gaXNGdW5jdGlvbihwYXJzZUFwcEluZm8pXG4gICAgICAgID8gcGFyc2VBcHBJbmZvKClcbiAgICAgICAgOiBmYWxzZVxuICAgICAgOiBmYWxzZTtcblxuICAgIHRoaXMubG9nID0gdGhpcy5sb2cuYmluZCh0aGlzKTtcblxuICAgIC8vIEluaGVyaXQgbWV0aG9kcyBmcm9tIHBhcmVudCBsb2dnZXJcbiAgICBjb25zdCBtZXRob2RzID0gT2JqZWN0LmtleXModGhpcy5jb25maWcubG9nZ2VyKS5maWx0ZXIoXG4gICAgICAoa2V5KSA9PiAhb21pdHRlZExvZ2dlcktleXMuaGFzKGtleSlcbiAgICApO1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBtZXRob2RzKSB7XG4gICAgICB0aGlzW2VsZW1lbnRdID0gdGhpcy5jb25maWcubG9nZ2VyW2VsZW1lbnRdO1xuICAgIH1cblxuICAgIC8vIEJpbmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZWFjaCBsb2cgbGV2ZWxcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgbGV2ZWxzKSB7XG4gICAgICAvLyBFbnN1cmUgZnVuY3Rpb24gZXhpc3RzIGluIGxvZ2dlciBwYXNzZWRcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcubG9nZ2VyW2VsZW1lbnRdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChlbGVtZW50ID09PSAnZmF0YWwnKSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmZhdGFsID1cbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5lcnJvciB8fFxuICAgICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmluZm8gfHxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5sb2c7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW2VsZW1lbnRdID1cbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5pbmZvIHx8IHRoaXMuY29uZmlnLmxvZ2dlci5sb2c7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQmluZCBsb2cgaGFuZGxlciB3aGljaCBub3JtYWxpemVzIGFyZ3MgYW5kIHBvcHVsYXRlcyBtZXRhXG4gICAgICB0aGlzW2VsZW1lbnRdID0gKC4uLmFyZ3MpID0+XG4gICAgICAgIHRoaXMubG9nKGVsZW1lbnQsIC4uLkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldExldmVsID0gdGhpcy5zZXRMZXZlbC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZ2V0Tm9ybWFsaXplZExldmVsID0gdGhpcy5nZXROb3JtYWxpemVkTGV2ZWwuYmluZCh0aGlzKTtcbiAgICB0aGlzLnNldE5hbWUgPSB0aGlzLnNldE5hbWUuYmluZCh0aGlzKTtcblxuICAgIC8vIFNldCB0aGUgbG9nZ2VyIG5hbWVcbiAgICBpZiAodGhpcy5jb25maWcubmFtZSkgdGhpcy5zZXROYW1lKHRoaXMuY29uZmlnLm5hbWUpO1xuXG4gICAgLy8gU2V0IHRoZSBsb2dnZXIgbGV2ZWxcbiAgICB0aGlzLnNldExldmVsKHRoaXMuY29uZmlnLmxldmVsKTtcblxuICAgIC8vIEFsaWFzZXNcbiAgICB0aGlzLmVyciA9IHRoaXMuZXJyb3I7XG4gICAgdGhpcy53YXJuaW5nID0gdGhpcy53YXJuO1xuXG4gICAgLy8gUHJlIGFuZCBQb3N0IEhvb2tzXG4gICAgdGhpcy5wcmUgPSBmdW5jdGlvbiAobGV2ZWwsIGZuKSB7XG4gICAgICB0aGlzLmNvbmZpZy5ob29rcy5wcmUucHVzaChmdW5jdGlvbiAoX2xldmVsLCAuLi5hcmdzKSB7XG4gICAgICAgIGlmIChsZXZlbCAhPT0gX2xldmVsKSByZXR1cm4gWy4uLmFyZ3NdO1xuICAgICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5wb3N0ID0gZnVuY3Rpb24gKGxldmVsLCBmbikge1xuICAgICAgdGhpcy5jb25maWcuaG9va3MucG9zdC5wdXNoKGZ1bmN0aW9uIChfbGV2ZWwsIC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKGxldmVsICE9PSBfbGV2ZWwpIHJldHVybiBbLi4uYXJnc107XG4gICAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBzZXRMZXZlbChsZXZlbCkge1xuICAgIGlmICghaXNTdHJpbmcobGV2ZWwpIHx8IGxldmVscy5pbmRleE9mKGxldmVsKSA9PT0gLTEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobGV2ZWxFcnJvcik7XG4gICAgLy8gU3VwcG9ydCBzaWduYWxlIGxvZ2dlciBhbmQgb3RoZXIgbG9nZ2VycyB0aGF0IHVzZSBgbG9nTGV2ZWxgXG4gICAgaWYgKGlzU3RyaW5nKHRoaXMuY29uZmlnLmxvZ2dlci5sb2dMZXZlbCkpXG4gICAgICB0aGlzLmNvbmZpZy5sb2dnZXIubG9nTGV2ZWwgPSBsZXZlbDtcbiAgICBlbHNlIHRoaXMuY29uZmlnLmxvZ2dlci5sZXZlbCA9IGxldmVsO1xuICAgIC8vIEFkanVzdHMgYHRoaXMuY29uZmlnLmxldmVsc2AgYXJyYXlcbiAgICAvLyBzbyB0aGF0IGl0IGhhcyBhbGwgcHJvY2VlZGluZyAoaW5jbHVzaXZlKVxuICAgIHRoaXMuY29uZmlnLmxldmVscyA9IGxldmVscy5zbGljZShsZXZlbHMuaW5kZXhPZihsZXZlbCkpO1xuICB9XG5cbiAgZ2V0Tm9ybWFsaXplZExldmVsKGxldmVsKSB7XG4gICAgaWYgKCFpc1N0cmluZyhsZXZlbCkpIHJldHVybiAnaW5mbyc7XG4gICAgaWYgKGlzU3RyaW5nKGFsaWFzZXNbbGV2ZWxdKSkgcmV0dXJuIGFsaWFzZXNbbGV2ZWxdO1xuICAgIGlmIChsZXZlbHMuaW5kZXhPZihsZXZlbCkgPT09IC0xKSByZXR1cm4gJ2luZm8nO1xuICAgIHJldHVybiBsZXZlbDtcbiAgfVxuXG4gIHNldE5hbWUobmFtZSkge1xuICAgIGlmICghaXNTdHJpbmcobmFtZSkpIHRocm93IG5ldyBFcnJvcignYG5hbWVgIG11c3QgYmUgYSBTdHJpbmcnKTtcbiAgICAvLyBTdXBwb3J0IHNpZ25hbGUgbG9nZ2VyIGFuZCBvdGhlciBsb2dnZXJzIHRoYXQgdXNlIGBzY29wZWBcbiAgICBpZiAoaXNTdHJpbmcodGhpcy5jb25maWcubG9nZ2VyLnNjb3BlKSkgdGhpcy5jb25maWcubG9nZ2VyLnNjb3BlID0gbmFtZTtcbiAgICBlbHNlIHRoaXMuY29uZmlnLmxvZ2dlci5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIGxvZyhsZXZlbCwgbWVzc2FnZSwgbWV0YSwgLi4uYXJncykge1xuICAgIGNvbnN0IG9yaWdpbmFsQXJncyA9IFtdO1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgIGlmICghaXNVbmRlZmluZWQobGV2ZWwpKSBvcmlnaW5hbEFyZ3MucHVzaChsZXZlbCk7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtZXNzYWdlKSkgb3JpZ2luYWxBcmdzLnB1c2gobWVzc2FnZSk7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtZXRhKSkgb3JpZ2luYWxBcmdzLnB1c2gobWV0YSk7XG4gICAgZm9yIChjb25zdCBhcmcgb2YgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykpIHtcbiAgICAgIG9yaWdpbmFsQXJncy5wdXNoKGFyZyk7XG4gICAgfVxuXG4gICAgbGV0IG1vZGlmaWVyID0gMDtcblxuICAgIGlmIChpc1N0cmluZyhsZXZlbCkgJiYgaXNTdHJpbmcoYWxpYXNlc1tsZXZlbF0pKSB7XG4gICAgICBsZXZlbCA9IGFsaWFzZXNbbGV2ZWxdO1xuICAgIH0gZWxzZSBpZiAoaXNFcnJvcihsZXZlbCkpIHtcbiAgICAgIG1ldGEgPSBtZXNzYWdlO1xuICAgICAgbWVzc2FnZSA9IGxldmVsO1xuICAgICAgbGV2ZWwgPSAnZXJyb3InO1xuICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKGxldmVsKSB8fCBsZXZlbHMuaW5kZXhPZihsZXZlbCkgPT09IC0xKSB7XG4gICAgICBtZXRhID0gbWVzc2FnZTtcbiAgICAgIG1lc3NhZ2UgPSBsZXZlbDtcbiAgICAgIGxldmVsID0gdGhpcy5nZXROb3JtYWxpemVkTGV2ZWwobGV2ZWwpO1xuICAgICAgbW9kaWZpZXIgPSAtMTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gZWFybHkgaWYgaXQgaXMgbm90IGEgdmFsaWQgbG9nZ2luZyBsZXZlbFxuICAgIGlmICh0aGlzLmNvbmZpZy5sZXZlbHMuaW5kZXhPZihsZXZlbCkgPT09IC0xKSByZXR1cm47XG5cbiAgICAvLyBCdW55YW4gc3VwcG9ydCAobWV0YSwgbWVzc2FnZSwgLi4uYXJncylcbiAgICBsZXQgaXNCdW55YW4gPSBmYWxzZTtcbiAgICBpZiAoKGlzT2JqZWN0KG1lc3NhZ2UpIHx8IEFycmF5LmlzQXJyYXkobWVzc2FnZSkpICYmIGlzU3RyaW5nKG1ldGEpKSB7XG4gICAgICBpc0J1bnlhbiA9IHRydWU7XG4gICAgICBjb25zdCBfbWV0YSA9IG1ldGE7XG4gICAgICBtZXRhID0gbWVzc2FnZTtcbiAgICAgIG1lc3NhZ2UgPVxuICAgICAgICBpc1N0cmluZyhfbWV0YSkgJiYgb3JpZ2luYWxBcmdzLmxlbmd0aCA+PSAzICsgbW9kaWZpZXJcbiAgICAgICAgICA/IGZvcm1hdCguLi5vcmlnaW5hbEFyZ3Muc2xpY2UoMiArIG1vZGlmaWVyKSlcbiAgICAgICAgICA6IF9tZXRhO1xuICAgIH1cblxuICAgIC8vIElmIG1lc3NhZ2Ugd2FzIHVuZGVmaW5lZCB0aGVuIHNldCBpdCB0byBsZXZlbFxuICAgIGlmIChpc1VuZGVmaW5lZChtZXNzYWdlKSkgbWVzc2FnZSA9IGxldmVsO1xuXG4gICAgLy8gSWYgb25seSBgbWVzc2FnZWAgd2FzIHBhc3NlZCB0aGVuIGlmIGl0IHdhcyBhbiBPYmplY3RcbiAgICAvLyBwcmVzZXJ2ZSBpdCBhcyBhbiBPYmplY3QgYnkgc2V0dGluZyBpdCBhcyBtZXRhXG4gICAgaWYgKFxuICAgICAgb3JpZ2luYWxBcmdzLnNsaWNlKDEgKyBtb2RpZmllcikubGVuZ3RoID09PSAxICYmXG4gICAgICAhaXNTdHJpbmcobWVzc2FnZSkgJiZcbiAgICAgICFpc0Vycm9yKG1lc3NhZ2UpXG4gICAgKSB7XG4gICAgICBtZXRhID0geyBtZXNzYWdlIH07XG4gICAgICBtZXNzYWdlID0gbGV2ZWw7XG4gICAgfSBlbHNlIGlmICghaXNCdW55YW4gJiYgb3JpZ2luYWxBcmdzLmxlbmd0aCA+PSA0ICsgbW9kaWZpZXIpIHtcbiAgICAgIG1lc3NhZ2UgPSB1bmRlZmluZWQ7XG5cbiAgICAgIG1ldGEgPSB7fTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IGFyZyBvZiBvcmlnaW5hbEFyZ3MpIHtcbiAgICAgICAgaWYgKGlzRXJyb3IoYXJnKSkgZXJyb3JzLnB1c2goYXJnKTtcbiAgICAgICAgZWxzZSBpZiAoaXNTdHJpbmcoYXJnKSkgbWVzc2FnZXMucHVzaChhcmcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCAmJiBtZXNzYWdlcy5sZW5ndGggPiAwKVxuICAgICAgICBtZXNzYWdlID0gZm9ybWF0KC4uLm1lc3NhZ2VzKTtcbiAgICAgIGVsc2UgaWYgKGVycm9ycy5sZW5ndGggPiAwICYmIGxldmVsID09PSAnbG9nJykgbGV2ZWwgPSAnZXJyb3InO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhaXNCdW55YW4gJiZcbiAgICAgIG9yaWdpbmFsQXJncy5sZW5ndGggPT09IDMgKyBtb2RpZmllciAmJlxuICAgICAgaXNTdHJpbmcobWVzc2FnZSkgJiZcbiAgICAgIGZvcm1hdFNwZWNpZmllcnMuc29tZSgodCkgPT4gbWVzc2FnZS5pbmRleE9mKHQpICE9PSAtMSlcbiAgICApIHtcbiAgICAgIC8vIE90aGVyd2lzZSBpZiB0aGVyZSBhcmUgdGhyZWUgYXJncyBhbmQgaWYgdGhlIGBtZXNzYWdlYCBjb250YWluc1xuICAgICAgLy8gYSBwbGFjZWhvbGRlciB0b2tlbiAoZS5nLiAnJXMnIG9yICclZCcgLSBzZWUgYWJvdmUgYGZvcm1hdFNwZWNpZmllcnNgIHZhcmlhYmxlKVxuICAgICAgLy8gdGhlbiB3ZSBjYW4gaW5mZXIgdGhhdCB0aGUgYG1ldGFgIGFyZyBwYXNzZWQgaXMgdXNlZCBmb3IgZm9ybWF0dGluZ1xuICAgICAgbWVzc2FnZSA9IGZvcm1hdChtZXNzYWdlLCBtZXRhKTtcbiAgICAgIG1ldGEgPSB7fTtcbiAgICB9IGVsc2UgaWYgKCFpc0Vycm9yKG1lc3NhZ2UpKSB7XG4gICAgICBpZiAoaXNFcnJvcihtZXRhKSkge1xuICAgICAgICBlcnJvcnMucHVzaChtZXRhKTtcbiAgICAgICAgbWV0YSA9IHt9O1xuICAgICAgfSBlbHNlIGlmICghaXNPYmplY3QobWV0YSkgJiYgIWlzVW5kZWZpbmVkKG1ldGEpICYmICFpc051bGwobWV0YSkpIHtcbiAgICAgICAgLy8gSWYgdGhlIGBtZXRhYCB2YXJpYWJsZSBwYXNzZWQgd2FzIG5vdCBhbiBPYmplY3QgdGhlbiBjb252ZXJ0IGl0XG4gICAgICAgIG1lc3NhZ2UgPSBmb3JtYXQobWVzc2FnZSwgbWV0YSk7XG4gICAgICAgIG1ldGEgPSB7fTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKG1lc3NhZ2UpKSB7XG4gICAgICAgIC8vIElmIHRoZSBtZXNzYWdlIGlzIG5vdCBhIHN0cmluZyB0aGVuIHdlIHNob3VsZCBydW4gYHV0aWwuZm9ybWF0YCBvbiBpdFxuICAgICAgICAvLyBhc3N1bWluZyB3ZSdyZSBmb3JtYXR0aW5nIGl0IGxpa2UgaXQgd2FzIGFub3RoZXIgYXJndW1lbnRcbiAgICAgICAgLy8gKGFzIG9wcG9zZWQgdG8gdXNpbmcgc29tZXRoaW5nIGxpa2UgZmFzdC1qc29uLXN0cmluZ2lmeSlcbiAgICAgICAgbWVzc2FnZSA9IGZvcm1hdChtZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzRXJyb3IobWV0YSkpIHtcbiAgICAgIGVycm9ycy5wdXNoKG1ldGEpO1xuICAgICAgLy8gaGFuZGxlIGFkZGl0aW9uYWwgYXJnc1xuICAgICAgZm9yIChjb25zdCBhcmcgb2Ygb3JpZ2luYWxBcmdzLnNsaWNlKDIgKyBtb2RpZmllcikpIHtcbiAgICAgICAgLy8gc2hvdWxkIHNraXAgdGhpcyBiZXR0ZXIgd2l0aCBzbGljZSBhbmQgbW9kaWZpZXIgYWRqdXN0bWVudFxuICAgICAgICBpZiAobWV0YSA9PT0gYXJnKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGlzRXJyb3IoYXJnKSkgZXJyb3JzLnB1c2goYXJnKTtcbiAgICAgIH1cblxuICAgICAgbWV0YSA9IHt9O1xuICAgIH1cblxuICAgIGlmICghaXNVbmRlZmluZWQobWV0YSkgJiYgIWlzT2JqZWN0KG1ldGEpKSBtZXRhID0geyBvcmlnaW5hbF9tZXRhOiBtZXRhIH07XG4gICAgZWxzZSBpZiAoIWlzT2JqZWN0KG1ldGEpKSBtZXRhID0ge307XG5cbiAgICBpZiAoaXNFcnJvcihtZXNzYWdlKSkge1xuICAgICAgZXJyb3JzLnVuc2hpZnQobWVzc2FnZSk7XG4gICAgICBtZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gcmV3cml0ZSBgbWV0YS5lcnJgIHRvIGBtZXRhLm9yaWdpbmFsX2VycmAgZm9yIGNvbnNpc3RlbmN5XG4gICAgLy8gKGluIGNhc2Ugc29tZW9uZSBoYXMgYW4gb2JqZWN0IHdpdGggYC5lcnJgIHByb3BlcnR5IG9uIGl0IHdpdGggYW4gZXJyb3IpXG4gICAgLy9cbiAgICBpZiAoaXNPYmplY3QobWV0YS5lcnIpKSB7XG4gICAgICBpZiAoaXNFcnJvcihtZXRhLmVycikpIGVycm9ycy5wdXNoKG1ldGEuZXJyKTtcbiAgICAgIG1ldGEub3JpZ2luYWxfZXJyID0gaXNFcnJvcihtZXRhLmVycikgPyBwYXJzZUVycihtZXRhLmVycikgOiBtZXRhLmVycjtcbiAgICB9XG5cbiAgICBsZXQgZXJyO1xuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZXJyID0gZXJyb3JzWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICAgIFsuLi5uZXcgU2V0KGVycm9ycy5tYXAoKGUpID0+IGUubWVzc2FnZSkuZmlsdGVyKEJvb2xlYW4pKV0uam9pbignOyAnKVxuICAgICAgICApO1xuICAgICAgICBlcnIuc3RhY2sgPSBbXG4gICAgICAgICAgLi4ubmV3IFNldChlcnJvcnMubWFwKChlKSA9PiBlLnN0YWNrKS5maWx0ZXIoQm9vbGVhbikpXG4gICAgICAgIF0uam9pbignXFxuXFxuJyk7XG4gICAgICAgIGVyci5lcnJvcnMgPSBlcnJvcnM7XG4gICAgICB9XG5cbiAgICAgIG1ldGEuZXJyID0gcGFyc2VFcnIoZXJyKTtcbiAgICAgIGlmICghaXNTdHJpbmcobWVzc2FnZSkpIG1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIE5PVEU6IHRoaXMgd2FzIHJlbW92ZWQgaW4gdjEwLjIuMiBkdWUgdG8gY2lyY3VsYXIgcmVmZXJlbmNlIGlzc3Vlc1xuICAgIC8vICAgICAgICh0aGUgd29ya2Fyb3VuZCB3b3VsZCBpbnZvbHZlIHNhZmVTdHJpbmdpZnkgYW5kIHRoZW4gSlNPTi5wYXJzZSB3aGljaCB3b3VsZCBiZSBwZXJmIGJsb2F0KVxuICAgIC8vICAgICAgICh0aGVyZSBzdGlsbCBtaWdodCBiZSBhbm90aGVyIHdvcmthcm91bmQgb3IgcGVyaGFwcyB3ZSBkb24ndCBhZGQgYWxsIHRoZSBhcmdzIGhlcmUgZXhjZXB0IGFkZGl0aW9uYWwpXG4gICAgLy9cbiAgICAvLyBTZXQgYGFyZ3NgIHByb3Agd2l0aCBvcmlnaW5hbCBhcmd1bWVudHMgcGFzc2VkXG4gICAgLy8gbWV0YS5hcmdzID0gb3JpZ2luYWxBcmdzO1xuXG4gICAgLy8gU2V0IGRlZmF1bHQgbGV2ZWwgb24gbWV0YVxuICAgIG1ldGEubGV2ZWwgPSBsZXZlbDtcblxuICAgIC8vIEFkZCBgYXBwYCBvYmplY3QgdG8gbWV0YWRhdGFcbiAgICBpZiAodGhpcy5hcHBJbmZvKSBtZXRhLmFwcCA9IHRoaXMuYXBwSW5mbztcblxuICAgIC8vXG4gICAgLy8gZGV0ZXJtaW5lIGxvZyBtZXRob2QgdG8gdXNlXG4gICAgLy9cbiAgICAvLyBpZiB3ZSBkaWRuJ3QgcGFzcyBhIGxldmVsIGFzIGEgbWV0aG9kXG4gICAgLy8gKGUuZy4gY29uc29sZS5pbmZvKSwgdGhlbiB3ZSBzaG91bGQgc3RpbGxcbiAgICAvLyB1c2UgdGhlIGxvZ2dlcidzIGBsb2dgIG1ldGhvZCB0byBvdXRwdXRcbiAgICAvL1xuICAgIC8vIGFuZCBmYXRhbCBzaG91bGQgdXNlIGVycm9yIChlLmcuIGluIGJyb3dzZXIpXG4gICAgLy9cbiAgICBjb25zdCBtZXRob2QgPSBtb2RpZmllciA9PT0gLTEgPyAnbG9nJyA6IGxldmVsO1xuXG4gICAgLy8gcHJlLWhvb2tzXG4gICAgZm9yIChjb25zdCBob29rIG9mIHRoaXMuY29uZmlnLmhvb2tzLnByZSkge1xuICAgICAgW2VyciwgbWVzc2FnZSwgbWV0YV0gPSBob29rKG1ldGhvZCwgZXJyLCBtZXNzYWdlLCBtZXRhKTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIE5PVEU6IHVzaW5nIGxvZGFzaCBfLm9taXQgYW5kIF8ucGljayB3b3VsZCBoYXZlIGJlZW4gX3Zlcnkgc2xvd19cbiAgICAvL1xuICAgIC8vIGNvbnN0IG9taXR0ZWRBbmRQaWNrZWRGaWVsZHMgPSB7XG4gICAgLy8gICAuLi5fLm9taXQobWV0YSwgdGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSxcbiAgICAvLyAgIC4uLl8ucGljayhtZXRhLCB0aGlzLmNvbmZpZy5tZXRhLnBpY2tlZEZpZWxkcylcbiAgICAvLyB9O1xuICAgIC8vXG4gICAgLy8gYWxzbyB3ZSBkb24ndCB3YW50IHRvIG11dGF0ZSBhbnl0aGluZyBpbiBgbWV0YWBcbiAgICAvLyBhbmQgaWRlYWxseSB3ZSBvbmx5IHdhbnQgdG8gcGljayBleGFjdGx5IHdoYXQgd2UgbmVlZFxuICAgIC8vIChhbmQgbm90IGhhdmUgdHdvIG9wZXJhdGlvbnMsIG9uZSBmb3Igb21pdCwgYW5kIG9uZSBmb3IgcGljaylcbiAgICAvL1xuXG4gICAgLy8gc2V0IGEgYm9vbGVhbiBmbGFnIGlmIHdlIGhhZCB0aGUgc2lsZW50IHN5bWJvbCBvciBub3RcbiAgICBjb25zdCBoYWRUcnVlU2lsZW50U3ltYm9sID0gYm9vbGVhbihtZXRhW3NpbGVudFN5bWJvbF0pO1xuXG4gICAgaWYgKCFpc0VtcHR5KHRoaXMuY29uZmlnLm1ldGEucmVtYXBwZWRGaWVsZHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXModGhpcy5jb25maWcubWV0YS5yZW1hcHBlZEZpZWxkcykpIHtcbiAgICAgICAgc2V0KG1ldGEsIHRoaXMuY29uZmlnLm1ldGEucmVtYXBwZWRGaWVsZHNba2V5XSwgZ2V0KG1ldGEsIGtleSkpO1xuICAgICAgICB1bnNldChtZXRhLCBrZXkpO1xuICAgICAgICAvLyBjbGVhbnVwIGVtcHR5IG9iamVjdHMgYWZ0ZXIgcmVtYXBwaW5nXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5tZXRhLmNsZWFudXBSZW1hcHBpbmcpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGtleS5sYXN0SW5kZXhPZignLicpO1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IHBhcmVudEtleSA9IGtleS5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgICAgaWYgKGlzRW1wdHkoZ2V0KG1ldGEsIHBhcmVudEtleSkpKSB1bnNldChtZXRhLCBwYXJlbnRLZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSB8fFxuICAgICAgIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5waWNrZWRGaWVsZHMpXG4gICAgKSB7XG4gICAgICBjb25zdCBkb3RpZmllZCA9IGRvdGlmeVRvQXJyYXkobWV0YSk7XG4gICAgICAvLyBkb3RpZmllZCA9IFtcbiAgICAgIC8vICAgJ2Vyci5uYW1lJyxcbiAgICAgIC8vICAgJ2Vyci5tZXNzYWdlJyxcbiAgICAgIC8vICAgJ2Vyci5zdGFjaycsXG4gICAgICAvLyAgICdsZXZlbCcsXG4gICAgICAvLyAgICdhcHAubmFtZScsXG4gICAgICAvLyAgICdhcHAudmVyc2lvbicsXG4gICAgICAvLyAgICdhcHAubm9kZScsXG4gICAgICAvLyAgICdhcHAuaGFzaCcsXG4gICAgICAvLyAgIC8vIC4uLlxuICAgICAgLy8gXVxuXG4gICAgICBpZiAoIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgdGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSB7XG4gICAgICAgICAgLy8gPGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85ODgyMzQ5PlxuICAgICAgICAgIGxldCBpID0gZG90aWZpZWQubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZG90aWZpZWRbaV0gPT09IHByb3AgfHxcbiAgICAgICAgICAgICAgKCFpc1N5bWJvbChkb3RpZmllZFtpXSkgJiYgZG90aWZpZWRbaV0uaW5kZXhPZihgJHtwcm9wfS5gKSA9PT0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZG90aWZpZWQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwaWNrZWRTeW1ib2xzID0gW107XG5cbiAgICAgIGlmICghaXNFbXB0eSh0aGlzLmNvbmZpZy5tZXRhLnBpY2tlZEZpZWxkcykpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHRoaXMuY29uZmlnLm1ldGEucGlja2VkRmllbGRzKSB7XG4gICAgICAgICAgLy8gcmVzcG9uc2UuaGVhZGVycy5ib29wXG4gICAgICAgICAgLy8gcmVzcG9uc2UuaGVhZGVycy5iZWVwXG4gICAgICAgICAgLy8gcmVzcG9uc2UuYm9keVxuICAgICAgICAgIC8vIHJlc3BvbnNlLnRleHRcbiAgICAgICAgICAvLyByZXNwb25zZVxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gc28gd2UgbmVlZCB0byBzcGxpdCBieSB0aGUgZmlyc3QgcGVyaW9kIGFuZCBvbWl0IGFueSBrZXlzIGZyb20gZG90aWZpZWQgc3RhcnRpbmcgd2l0aCBpdFxuICAgICAgICAgIGlmIChpc1N5bWJvbChwcm9wKSkge1xuICAgICAgICAgICAgaWYgKG1ldGFbcHJvcF0pIHBpY2tlZFN5bWJvbHMucHVzaChbcHJvcCwgbWV0YVtwcm9wXV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHByb3AuaW5kZXhPZignLicpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gcHJvcC5zbGljZSgwLCBpbmRleCArIDEpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBsZXQgaSA9IGRvdGlmaWVkLmxlbmd0aDtcbiAgICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICAgIGlmIChkb3RpZmllZFtpXSA9PT0ga2V5LnNsaWNlKDAsIC0xKSkgZG90aWZpZWQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRvdGlmaWVkW2ldLmluZGV4T2Yoa2V5KSA9PT0gMCkgZG90aWZpZWQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZmluYWxseSBhZGQgaXQgaWYgaXQgZGlkIG5vdCBhbHJlYWR5IGV4aXN0XG4gICAgICAgICAgaWYgKGRvdGlmaWVkLmluZGV4T2YocHJvcCkgPT09IC0xKSBkb3RpZmllZC5wdXNoKHByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vXG4gICAgICAvLyBpdGVyYXRlIG92ZXIgYWxsIGRvdGlmaWVkIHZhbHVlcyB0byBjaGVjayBmb3Igc3ltYm9sc1xuICAgICAgLy9cbiAgICAgIC8vIE5PVEU6IHRoaXMgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgdGhhdCB0aGV5IGNvdWxkIGFscmVhZHkgYmUgaW4gYHBpY2tlZFN5bWJvbHNgXG4gICAgICAvLyAgICAgICAoYW5kIGl0IGRvZXNuJ3QgYWxzbyBkbyBiaWdpbnRzIHlldClcbiAgICAgIC8vXG4gICAgICBmb3IgKGNvbnN0IHByb3Agb2YgZG90aWZpZWQpIHtcbiAgICAgICAgaWYgKGlzU3ltYm9sKHByb3ApKSB7XG4gICAgICAgICAgaWYgKG1ldGFbcHJvcF0gIT09IHVuZGVmaW5lZCkgcGlja2VkU3ltYm9scy5wdXNoKFtwcm9wLCBtZXRhW3Byb3BdXSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWV0YVtTeW1ib2wuZm9yKHByb3ApXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcGlja2VkU3ltYm9scy5wdXNoKFtTeW1ib2wuZm9yKHByb3ApLCBtZXRhW1N5bWJvbC5mb3IocHJvcCldXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy9cbiAgICAgIC8vIG5vdyB3ZSBjYWxsIHBpY2stZGVlcCB1c2luZyB0aGUgZmluYWwgYXJyYXlcbiAgICAgIC8vXG4gICAgICAvLyBOT1RFOiB0aGlzIGRvZXMgbm90IHBpY2sgc3ltYm9scywgYmlnaW50cywgbm9yIHN0cmVhbXNcbiAgICAgIC8vICAgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc3RyaWtlZW50Y28vcGljay1kZWVwL2lzc3Vlcy8yPlxuICAgICAgLy8gICAgICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9zdHJpa2VlbnRjby9waWNrLWRlZXAvaXNzdWVzLzI+XG4gICAgICAvL1xuICAgICAgLy8gTk9URTogdGhpcyBpcyB3cmFwcGVkIGluIHRyeS9jYXRjaCBpbiBjYXNlIHNpbWlsYXIgZXJyb3JzIG9jY3VyXG4gICAgICAvLyAgICAgICA8aHR0cHM6Ly9naXRodWIuY29tL3N0cmlwZS9zdHJpcGUtbm9kZS9pc3N1ZXMvMTc5Nj5cbiAgICAgIC8vXG4gICAgICB0cnkge1xuICAgICAgICBtZXRhID0gcGlja0RlZXAobWV0YSwgZG90aWZpZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5lcnJvcihlcnIpO1xuICAgICAgfVxuXG4gICAgICAvL1xuICAgICAgLy8gaWYgdGhlcmUgd2VyZSBhbnkgdG9wLWxldmVsIHN5bWJvbHMgdG8gYmVcbiAgICAgIC8vIHBpY2tlZCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZW0gYmFjayBoZXJlIHRvIHRoZSBsaXN0XG4gICAgICAvL1xuICAgICAgLy8gTk9URTogd2UnZCBwcm9iYWJseSB3YW50IHRvIGRvIHRoZSBzYW1lIGZvciBiaWdpbnRzIGFzIHN5bWJvbHNcbiAgICAgIC8vXG4gICAgICBpZiAocGlja2VkU3ltYm9scy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHBpY2tlZFN5bWJvbHMpIHtcbiAgICAgICAgICBtZXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9ubHkgaW52b2tlIGxvZ2dlciBtZXRob2RzIGlmIGl0IHdhcyBub3Qgc2lsZW50XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5zaWxlbnQgJiYgIWhhZFRydWVTaWxlbnRTeW1ib2wpIHtcbiAgICAgIC8vIFNob3cgc3RhY2sgdHJhY2UgaWYgbmVjZXNzYXJ5IChhbG9uZyB3aXRoIGFueSBtZXRhZGF0YSlcbiAgICAgIGlmIChpc0Vycm9yKGVycikgJiYgdGhpcy5jb25maWcuc2hvd1N0YWNrKSB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcubWV0YS5zaG93IHx8IGlzRW1wdHkobWV0YSkpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbbWV0aG9kXShlcnIpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGEgJiZcbiAgICAgICAgICBtZXRhW3RoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGFdXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKGVycik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0oZXJyLCBtZXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghdGhpcy5jb25maWcubWV0YS5zaG93IHx8IGlzRW1wdHkobWV0YSkpIHtcbiAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0obWVzc2FnZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodGhpcy5jb25maWcubWV0YS5oaWRlTWV0YSAmJiBtZXRhW3RoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGFdKSB8fFxuICAgICAgICAodGhpcy5jb25maWcubWV0YS5oaWRlSFRUUCAmJiBtZXRhW3RoaXMuY29uZmlnLm1ldGEuaGlkZUhUVFBdKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0obWVzc2FnZSwgbWV0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcG9zdC1ob29rc1xuICAgIGlmICh0aGlzLmNvbmZpZy5ob29rcy5wb3N0Lmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB7IG1ldGhvZCwgZXJyLCBtZXNzYWdlLCBtZXRhIH07XG4gICAgcmV0dXJuIHBNYXBTZXJpZXModGhpcy5jb25maWcuaG9va3MucG9zdCwgKGhvb2spID0+XG4gICAgICBob29rKG1ldGhvZCwgZXJyLCBtZXNzYWdlLCBtZXRhKVxuICAgIClcbiAgICAgIC50aGVuKClcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5lcnJvcihlcnIpO1xuICAgICAgfSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBeGU7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQUEs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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "axe",
|
|
3
3
|
"description": "Axe is a logger-agnostic wrapper that normalizes logs regardless of argument style. Great for large development teams, old and new projects, and works with Pino, Bunyan, Winston, console, and more. It is lightweight, performant, highly-configurable, and automatically adds OS, CPU, and Git information to your logs. It supports hooks (useful for masking sensitive data) and dot-notation remapping, omitting, and picking of log metadata properties. Made for Forward Email, Lad, and Cabin.",
|
|
4
|
-
"version": "12.
|
|
4
|
+
"version": "12.2.1",
|
|
5
5
|
"author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com)",
|
|
6
6
|
"browser": {
|
|
7
7
|
"parse-app-info": false
|
|
@@ -35,14 +35,14 @@
|
|
|
35
35
|
"@babel/cli": "^7.21.5",
|
|
36
36
|
"@babel/core": "^7.21.8",
|
|
37
37
|
"@babel/preset-env": "^7.21.5",
|
|
38
|
-
"@commitlint/cli": "^17.6.
|
|
39
|
-
"@commitlint/config-conventional": "^17.6.
|
|
38
|
+
"@commitlint/cli": "^17.6.3",
|
|
39
|
+
"@commitlint/config-conventional": "^17.6.3",
|
|
40
40
|
"ava": "^5.2.0",
|
|
41
41
|
"babelify": "^10.0.0",
|
|
42
42
|
"browserify": "^17.0.0",
|
|
43
43
|
"consola": "^3.1.0",
|
|
44
44
|
"cross-env": "^7.0.3",
|
|
45
|
-
"eslint": "^8.
|
|
45
|
+
"eslint": "^8.41.0",
|
|
46
46
|
"eslint-config-xo-lass": "^2.0.1",
|
|
47
47
|
"eslint-plugin-compat": "^4.1.4",
|
|
48
48
|
"eslint-plugin-node": "^11.1.0",
|
|
@@ -54,12 +54,12 @@
|
|
|
54
54
|
"lint-staged": "^13.2.2",
|
|
55
55
|
"lodash": "^4.17.21",
|
|
56
56
|
"nyc": "^15.1.0",
|
|
57
|
-
"pino": "^8.
|
|
57
|
+
"pino": "^8.14.1",
|
|
58
58
|
"remark-cli": "^11.0.0",
|
|
59
59
|
"remark-preset-github": "^4.0.4",
|
|
60
|
-
"rimraf": "^5.0.
|
|
60
|
+
"rimraf": "^5.0.1",
|
|
61
61
|
"signale": "^1.4.0",
|
|
62
|
-
"sinon": "^15.0
|
|
62
|
+
"sinon": "^15.1.0",
|
|
63
63
|
"tinyify": "3.0.0",
|
|
64
64
|
"xo": "^0.54.2"
|
|
65
65
|
},
|