appium-ios-simulator 4.1.5 → 4.1.7
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/CHANGELOG.md +9 -0
- package/build/index.js +1 -2
- package/build/lib/calendar.js +2 -5
- package/build/lib/calendar.js.map +1 -1
- package/build/lib/certificate.js +1 -21
- package/build/lib/certificate.js.map +1 -1
- package/build/lib/defaults-utils.js +1 -4
- package/build/lib/defaults-utils.js.map +1 -1
- package/build/lib/geolocation.js +1 -4
- package/build/lib/geolocation.js.map +1 -1
- package/build/lib/permissions.js +1 -3
- package/build/lib/permissions.js.map +1 -1
- package/build/lib/settings.js +1 -10
- package/build/lib/settings.js.map +1 -1
- package/build/lib/simulator-xcode-10.js +1 -3
- package/build/lib/simulator-xcode-10.js.map +1 -1
- package/build/lib/simulator-xcode-11.4.js +1 -12
- package/build/lib/simulator-xcode-11.4.js.map +1 -1
- package/build/lib/simulator-xcode-11.js +1 -2
- package/build/lib/simulator-xcode-11.js.map +1 -1
- package/build/lib/simulator-xcode-6.js +3 -88
- package/build/lib/simulator-xcode-6.js.map +1 -1
- package/build/lib/simulator-xcode-8.js +3 -21
- package/build/lib/simulator-xcode-8.js.map +1 -1
- package/build/lib/simulator-xcode-9.3.js +1 -3
- package/build/lib/simulator-xcode-9.3.js.map +1 -1
- package/build/lib/simulator-xcode-9.js +1 -17
- package/build/lib/simulator-xcode-9.js.map +1 -1
- package/build/lib/simulator.js +1 -4
- package/build/lib/simulator.js.map +1 -1
- package/build/lib/tail-until.js +1 -4
- package/build/lib/tail-until.js.map +1 -1
- package/build/lib/utils.js +1 -13
- package/build/lib/utils.js.map +1 -1
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1 +1,10 @@
|
|
|
1
|
+
## [4.1.7](https://github.com/appium/appium-ios-simulator/compare/v4.1.6...v4.1.7) (2022-12-01)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Miscellaneous Chores
|
|
5
|
+
|
|
6
|
+
* update releaserc ([#341](https://github.com/appium/appium-ios-simulator/issues/341)) ([109b12d](https://github.com/appium/appium-ios-simulator/commit/109b12dae7c6069bc20d35794abb7b500aa0dd6d))
|
|
7
|
+
|
|
8
|
+
## [4.1.6](https://github.com/appium/appium-ios-simulator/compare/v4.1.5...v4.1.6) (2022-11-29)
|
|
9
|
+
|
|
1
10
|
## [4.1.5](https://github.com/appium/appium-ios-simulator/compare/v4.1.4...v4.1.5) (2022-11-06)
|
package/build/index.js
CHANGED
|
@@ -10,7 +10,6 @@ var utils = _interopRequireWildcard(require("./lib/utils"));
|
|
|
10
10
|
var sim6 = _interopRequireWildcard(require("./lib/simulator-xcode-6"));
|
|
11
11
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
12
12
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
13
|
-
|
|
14
13
|
const {
|
|
15
14
|
getSimulator,
|
|
16
15
|
getDeviceString
|
|
@@ -35,4 +34,4 @@ const {
|
|
|
35
34
|
BOOT_COMPLETED_EVENT
|
|
36
35
|
} = sim6;
|
|
37
36
|
exports.BOOT_COMPLETED_EVENT = BOOT_COMPLETED_EVENT;
|
|
38
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRTaW11bGF0b3IiLCJnZXREZXZpY2VTdHJpbmciLCJzaW0iLCJraWxsQWxsU2ltdWxhdG9ycyIsImVuZEFsbFNpbXVsYXRvckRhZW1vbnMiLCJzaW1FeGlzdHMiLCJpbnN0YWxsU1NMQ2VydCIsInVuaW5zdGFsbFNTTENlcnQiLCJoYXNTU0xDZXJ0IiwidXRpbHMiLCJCT09UX0NPTVBMRVRFRF9FVkVOVCIsInNpbTYiXSwic291cmNlcyI6WyIuLi9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bWFpblxuXG5pbXBvcnQgKiBhcyBzaW0gZnJvbSAnLi9saWIvc2ltdWxhdG9yJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCAqIGFzIHNpbTYgZnJvbSAnLi9saWIvc2ltdWxhdG9yLXhjb2RlLTYnO1xuXG5cbmNvbnN0IHsgZ2V0U2ltdWxhdG9yLCBnZXREZXZpY2VTdHJpbmcgfSA9IHNpbTtcbmNvbnN0IHsga2lsbEFsbFNpbXVsYXRvcnMsIGVuZEFsbFNpbXVsYXRvckRhZW1vbnMsIHNpbUV4aXN0cywgaW5zdGFsbFNTTENlcnQsIHVuaW5zdGFsbFNTTENlcnQsIGhhc1NTTENlcnQgfSA9IHV0aWxzO1xuY29uc3QgeyBCT09UX0NPTVBMRVRFRF9FVkVOVCB9ID0gc2ltNjtcblxuZXhwb3J0IHtcbiAgZ2V0U2ltdWxhdG9yLFxuICBnZXREZXZpY2VTdHJpbmcsXG4gIGtpbGxBbGxTaW11bGF0b3JzLFxuICBlbmRBbGxTaW11bGF0b3JEYWVtb25zLFxuICBzaW1FeGlzdHMsXG4gIGluc3RhbGxTU0xDZXJ0LFxuICB1bmluc3RhbGxTU0xDZXJ0LFxuICBoYXNTU0xDZXJ0LFxuICBCT09UX0NPTVBMRVRFRF9FVkVOVFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUFnRDtBQUFBO0FBR2hELE1BQU07RUFBRUEsWUFBWTtFQUFFQztBQUFnQixDQUFDLEdBQUdDLEdBQUc7QUFBQztBQUFBO0FBQzlDLE1BQU07RUFBRUMsaUJBQWlCO0VBQUVDLHNCQUFzQjtFQUFFQyxTQUFTO0VBQUVDLGNBQWM7RUFBRUMsZ0JBQWdCO0VBQUVDO0FBQVcsQ0FBQyxHQUFHQyxLQUFLO0FBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ3JILE1BQU07RUFBRUM7QUFBcUIsQ0FBQyxHQUFHQyxJQUFJO0FBQUMifQ==
|
package/build/lib/calendar.js
CHANGED
|
@@ -37,15 +37,12 @@ class Calendar {
|
|
|
37
37
|
if (!_lodash.default.isNumber(this.columnCount)) {
|
|
38
38
|
try {
|
|
39
39
|
const stdout = await this.tccDb.execQuery(`pragma table_info('access')`);
|
|
40
|
-
count = this.columnCount = stdout.trim()
|
|
41
|
-
.split('cid')
|
|
42
|
-
.filter(record => !_lodash.default.isEmpty(record)).length;
|
|
40
|
+
count = this.columnCount = stdout.trim().split('cid').filter(record => !_lodash.default.isEmpty(record)).length;
|
|
43
41
|
} catch (err) {
|
|
44
42
|
count = this.xcodeVersion.major < 10 ? 7 : 11;
|
|
45
43
|
_logger.default.warn(`Unable to find Calendar access column count: ${err.message}`);
|
|
46
44
|
}
|
|
47
45
|
}
|
|
48
|
-
|
|
49
46
|
query = `INSERT INTO 'access' VALUES ('kTCCServiceCalendar', '?', 0, 1, 1, ${_lodash.default.range(0, count - 5, 0).join(', ')});`;
|
|
50
47
|
}
|
|
51
48
|
await this.tccDb.execQuery(query, bundleID);
|
|
@@ -58,4 +55,4 @@ class Calendar {
|
|
|
58
55
|
}
|
|
59
56
|
var _default = Calendar;
|
|
60
57
|
exports.default = _default;
|
|
61
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDYWxlbmRhciIsImNvbnN0cnVjdG9yIiwieGNvZGVWZXJzaW9uIiwic2hhcmVkUmVzb3VyY2VzRGlyIiwidGNjRGIiLCJUQ0NEQiIsImdldENhbGVuZGFyUm93Q291bnQiLCJidW5kbGVJRCIsImNvdW50IiwiZXhlY1F1ZXJ5IiwicGFyc2VJbnQiLCJzcGxpdCIsImhhc0NhbGVuZGFyQWNjZXNzIiwiZW5hYmxlQ2FsZW5kYXJBY2Nlc3MiLCJxdWVyeSIsImNvbHVtbkNvdW50IiwiXyIsImlzTnVtYmVyIiwic3Rkb3V0IiwidHJpbSIsImZpbHRlciIsInJlY29yZCIsImlzRW1wdHkiLCJsZW5ndGgiLCJlcnIiLCJtYWpvciIsImxvZyIsIndhcm4iLCJtZXNzYWdlIiwicmFuZ2UiLCJqb2luIiwiZGlzYWJsZUNhbGVuZGFyQWNjZXNzIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2NhbGVuZGFyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBUQ0NEQiBmcm9tICcuL3RjYy1kYic7XG5cblxuY2xhc3MgQ2FsZW5kYXIge1xuXG4gIGNvbnN0cnVjdG9yICh4Y29kZVZlcnNpb24sIHNoYXJlZFJlc291cmNlc0Rpcikge1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0geGNvZGVWZXJzaW9uO1xuICAgIHRoaXMudGNjRGIgPSBuZXcgVENDREIoeGNvZGVWZXJzaW9uLCBzaGFyZWRSZXNvdXJjZXNEaXIpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q2FsZW5kYXJSb3dDb3VudCAoYnVuZGxlSUQpIHtcbiAgICBjb25zdCBjb3VudCA9IGF3YWl0IHRoaXMudGNjRGIuZXhlY1F1ZXJ5KGBTRUxFQ1QgY291bnQoKikgRlJPTSBhY2Nlc3MgV0hFUkUgY2xpZW50PSc/JyBBTkQgc2VydmljZT0na1RDQ1NlcnZpY2VDYWxlbmRhcic7YCwgYnVuZGxlSUQpO1xuICAgIHJldHVybiBwYXJzZUludChjb3VudC5zcGxpdCgnPScpWzFdLCAxMCk7XG4gIH1cblxuICBhc3luYyBoYXNDYWxlbmRhckFjY2VzcyAoYnVuZGxlSUQpIHtcbiAgICBjb25zdCBjb3VudCA9IGF3YWl0IHRoaXMudGNjRGIuZXhlY1F1ZXJ5KGBTRUxFQ1QgY291bnQoKikgRlJPTSBhY2Nlc3MgV0hFUkUgY2xpZW50PSc/JyBBTkQgYWxsb3dlZD0xIEFORCBzZXJ2aWNlPSdrVENDU2VydmljZUNhbGVuZGFyJztgLCBidW5kbGVJRCk7XG4gICAgcmV0dXJuIHBhcnNlSW50KGNvdW50LnNwbGl0KCc9JylbMV0sIDEwKSA+IDA7XG4gIH1cblxuICBhc3luYyBlbmFibGVDYWxlbmRhckFjY2VzcyAoYnVuZGxlSUQpIHtcbiAgICBsZXQgcXVlcnk7XG4gICAgaWYgKChhd2FpdCB0aGlzLmdldENhbGVuZGFyUm93Q291bnQoYnVuZGxlSUQpKSA+IDApIHtcbiAgICAgIHF1ZXJ5ID0gYFVQREFURSAnYWNjZXNzJyBTRVRcbiAgICAgICAgc2VydmljZT0na1RDQ1NlcnZpY2VDYWxlbmRhcicsXG4gICAgICAgIGNsaWVudF90eXBlPTAsXG4gICAgICAgIGFsbG93ZWQ9MSxcbiAgICAgICAgcHJvbXB0X2NvdW50PTEsXG4gICAgICAgIGNzcmVxPTBcbiAgICAgIFdIRVJFIGNsaWVudD0nPycgQU5EIHNlcnZpY2U9J2tUQ0NTZXJ2aWNlQ2FsZW5kYXInYDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNvdW50ID0gdGhpcy5jb2x1bW5Db3VudDtcbiAgICAgIGlmICghXy5pc051bWJlcih0aGlzLmNvbHVtbkNvdW50KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IHRoaXMudGNjRGIuZXhlY1F1ZXJ5KGBwcmFnbWEgdGFibGVfaW5mbygnYWNjZXNzJylgKTtcbiAgICAgICAgICAvLyBzdGRvdXQgaGFzIGEgbnVtYmVyIG9mIHJlY29yZHMsIGVhY2ggc3RhcnRpbmcgd2l0aCBgY2lkYFxuICAgICAgICAgIC8vICAgICAgIGNpZCA9IDBcbiAgICAgICAgICAvLyAgICAgICBuYW1lID0gc2VydmljZVxuICAgICAgICAgIC8vICAgICAgIHR5cGUgPSBURVhUXG4gICAgICAgICAgLy8gICAgICAgbm90bnVsbCA9IDFcbiAgICAgICAgICAvLyAgICAgICBkZmx0X3ZhbHVlID1cbiAgICAgICAgICAvLyAgICAgICBwayA9IDFcbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vICAgICAgIGNpZCA9IDFcbiAgICAgICAgICAvLyAgICAgICBuYW1lID0gY2xpZW50XG4gICAgICAgICAgLy8gICAgICAgdHlwZSA9IFRFWFRcbiAgICAgICAgICAvLyAgICAgICBub3RudWxsID0gMVxuICAgICAgICAgIC8vICAgICAgIGRmbHRfdmFsdWUgPVxuICAgICAgICAgIC8vICAgICAgIHBrID0gMlxuICAgICAgICAgIGNvdW50ID0gdGhpcy5jb2x1bW5Db3VudCA9XG4gICAgICAgICAgICBzdGRvdXRcbiAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAvLyBnZXQgZWFjaCByZWNvcmQncyBiZWdpbm5pbmdcbiAgICAgICAgICAgICAgLnNwbGl0KCdjaWQnKVxuICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIGVtcHR5IHJvdyAodXN1YWxseSwgdGhlIGZpcnN0KVxuICAgICAgICAgICAgICAuZmlsdGVyKChyZWNvcmQpID0+ICFfLmlzRW1wdHkocmVjb3JkKSlcbiAgICAgICAgICAgICAgLmxlbmd0aDtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gdXNlIGRlZmF1bHRzLCBidXQgZG8gbm90IHNhdmVcbiAgICAgICAgICBjb3VudCA9IHRoaXMueGNvZGVWZXJzaW9uLm1ham9yIDwgMTAgPyA3IDogMTE7XG4gICAgICAgICAgbG9nLndhcm4oYFVuYWJsZSB0byBmaW5kIENhbGVuZGFyIGFjY2VzcyBjb2x1bW4gY291bnQ6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZmlsbCBpbiB0aGUgcXVlcnkgd2l0aCAwJ3MgZm9yIGNvbHVtbnMgYWZ0ZXIgdGhlIDUgd2UgY2FyZSBhYm91dFxuICAgICAgcXVlcnkgPSBgSU5TRVJUIElOVE8gJ2FjY2VzcycgVkFMVUVTICgna1RDQ1NlcnZpY2VDYWxlbmRhcicsICc/JywgMCwgMSwgMSwgJHtfLnJhbmdlKDAsIGNvdW50IC0gNSwgMCkuam9pbignLCAnKX0pO2A7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMudGNjRGIuZXhlY1F1ZXJ5KHF1ZXJ5LCBidW5kbGVJRCk7XG4gIH1cblxuICBhc3luYyBkaXNhYmxlQ2FsZW5kYXJBY2Nlc3MgKGJ1bmRsZUlEKSB7XG4gICAgaWYgKChhd2FpdCB0aGlzLmdldENhbGVuZGFyUm93Q291bnQoYnVuZGxlSUQpKSA+
|
|
58
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDYWxlbmRhciIsImNvbnN0cnVjdG9yIiwieGNvZGVWZXJzaW9uIiwic2hhcmVkUmVzb3VyY2VzRGlyIiwidGNjRGIiLCJUQ0NEQiIsImdldENhbGVuZGFyUm93Q291bnQiLCJidW5kbGVJRCIsImNvdW50IiwiZXhlY1F1ZXJ5IiwicGFyc2VJbnQiLCJzcGxpdCIsImhhc0NhbGVuZGFyQWNjZXNzIiwiZW5hYmxlQ2FsZW5kYXJBY2Nlc3MiLCJxdWVyeSIsImNvbHVtbkNvdW50IiwiXyIsImlzTnVtYmVyIiwic3Rkb3V0IiwidHJpbSIsImZpbHRlciIsInJlY29yZCIsImlzRW1wdHkiLCJsZW5ndGgiLCJlcnIiLCJtYWpvciIsImxvZyIsIndhcm4iLCJtZXNzYWdlIiwicmFuZ2UiLCJqb2luIiwiZGlzYWJsZUNhbGVuZGFyQWNjZXNzIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2NhbGVuZGFyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBUQ0NEQiBmcm9tICcuL3RjYy1kYic7XG5cblxuY2xhc3MgQ2FsZW5kYXIge1xuXG4gIGNvbnN0cnVjdG9yICh4Y29kZVZlcnNpb24sIHNoYXJlZFJlc291cmNlc0Rpcikge1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0geGNvZGVWZXJzaW9uO1xuICAgIHRoaXMudGNjRGIgPSBuZXcgVENDREIoeGNvZGVWZXJzaW9uLCBzaGFyZWRSZXNvdXJjZXNEaXIpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q2FsZW5kYXJSb3dDb3VudCAoYnVuZGxlSUQpIHtcbiAgICBjb25zdCBjb3VudCA9IGF3YWl0IHRoaXMudGNjRGIuZXhlY1F1ZXJ5KGBTRUxFQ1QgY291bnQoKikgRlJPTSBhY2Nlc3MgV0hFUkUgY2xpZW50PSc/JyBBTkQgc2VydmljZT0na1RDQ1NlcnZpY2VDYWxlbmRhcic7YCwgYnVuZGxlSUQpO1xuICAgIHJldHVybiBwYXJzZUludChjb3VudC5zcGxpdCgnPScpWzFdLCAxMCk7XG4gIH1cblxuICBhc3luYyBoYXNDYWxlbmRhckFjY2VzcyAoYnVuZGxlSUQpIHtcbiAgICBjb25zdCBjb3VudCA9IGF3YWl0IHRoaXMudGNjRGIuZXhlY1F1ZXJ5KGBTRUxFQ1QgY291bnQoKikgRlJPTSBhY2Nlc3MgV0hFUkUgY2xpZW50PSc/JyBBTkQgYWxsb3dlZD0xIEFORCBzZXJ2aWNlPSdrVENDU2VydmljZUNhbGVuZGFyJztgLCBidW5kbGVJRCk7XG4gICAgcmV0dXJuIHBhcnNlSW50KGNvdW50LnNwbGl0KCc9JylbMV0sIDEwKSA+IDA7XG4gIH1cblxuICBhc3luYyBlbmFibGVDYWxlbmRhckFjY2VzcyAoYnVuZGxlSUQpIHtcbiAgICBsZXQgcXVlcnk7XG4gICAgaWYgKChhd2FpdCB0aGlzLmdldENhbGVuZGFyUm93Q291bnQoYnVuZGxlSUQpKSA+IDApIHtcbiAgICAgIHF1ZXJ5ID0gYFVQREFURSAnYWNjZXNzJyBTRVRcbiAgICAgICAgc2VydmljZT0na1RDQ1NlcnZpY2VDYWxlbmRhcicsXG4gICAgICAgIGNsaWVudF90eXBlPTAsXG4gICAgICAgIGFsbG93ZWQ9MSxcbiAgICAgICAgcHJvbXB0X2NvdW50PTEsXG4gICAgICAgIGNzcmVxPTBcbiAgICAgIFdIRVJFIGNsaWVudD0nPycgQU5EIHNlcnZpY2U9J2tUQ0NTZXJ2aWNlQ2FsZW5kYXInYDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNvdW50ID0gdGhpcy5jb2x1bW5Db3VudDtcbiAgICAgIGlmICghXy5pc051bWJlcih0aGlzLmNvbHVtbkNvdW50KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IHRoaXMudGNjRGIuZXhlY1F1ZXJ5KGBwcmFnbWEgdGFibGVfaW5mbygnYWNjZXNzJylgKTtcbiAgICAgICAgICAvLyBzdGRvdXQgaGFzIGEgbnVtYmVyIG9mIHJlY29yZHMsIGVhY2ggc3RhcnRpbmcgd2l0aCBgY2lkYFxuICAgICAgICAgIC8vICAgICAgIGNpZCA9IDBcbiAgICAgICAgICAvLyAgICAgICBuYW1lID0gc2VydmljZVxuICAgICAgICAgIC8vICAgICAgIHR5cGUgPSBURVhUXG4gICAgICAgICAgLy8gICAgICAgbm90bnVsbCA9IDFcbiAgICAgICAgICAvLyAgICAgICBkZmx0X3ZhbHVlID1cbiAgICAgICAgICAvLyAgICAgICBwayA9IDFcbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vICAgICAgIGNpZCA9IDFcbiAgICAgICAgICAvLyAgICAgICBuYW1lID0gY2xpZW50XG4gICAgICAgICAgLy8gICAgICAgdHlwZSA9IFRFWFRcbiAgICAgICAgICAvLyAgICAgICBub3RudWxsID0gMVxuICAgICAgICAgIC8vICAgICAgIGRmbHRfdmFsdWUgPVxuICAgICAgICAgIC8vICAgICAgIHBrID0gMlxuICAgICAgICAgIGNvdW50ID0gdGhpcy5jb2x1bW5Db3VudCA9XG4gICAgICAgICAgICBzdGRvdXRcbiAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAvLyBnZXQgZWFjaCByZWNvcmQncyBiZWdpbm5pbmdcbiAgICAgICAgICAgICAgLnNwbGl0KCdjaWQnKVxuICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIGVtcHR5IHJvdyAodXN1YWxseSwgdGhlIGZpcnN0KVxuICAgICAgICAgICAgICAuZmlsdGVyKChyZWNvcmQpID0+ICFfLmlzRW1wdHkocmVjb3JkKSlcbiAgICAgICAgICAgICAgLmxlbmd0aDtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gdXNlIGRlZmF1bHRzLCBidXQgZG8gbm90IHNhdmVcbiAgICAgICAgICBjb3VudCA9IHRoaXMueGNvZGVWZXJzaW9uLm1ham9yIDwgMTAgPyA3IDogMTE7XG4gICAgICAgICAgbG9nLndhcm4oYFVuYWJsZSB0byBmaW5kIENhbGVuZGFyIGFjY2VzcyBjb2x1bW4gY291bnQ6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZmlsbCBpbiB0aGUgcXVlcnkgd2l0aCAwJ3MgZm9yIGNvbHVtbnMgYWZ0ZXIgdGhlIDUgd2UgY2FyZSBhYm91dFxuICAgICAgcXVlcnkgPSBgSU5TRVJUIElOVE8gJ2FjY2VzcycgVkFMVUVTICgna1RDQ1NlcnZpY2VDYWxlbmRhcicsICc/JywgMCwgMSwgMSwgJHtfLnJhbmdlKDAsIGNvdW50IC0gNSwgMCkuam9pbignLCAnKX0pO2A7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMudGNjRGIuZXhlY1F1ZXJ5KHF1ZXJ5LCBidW5kbGVJRCk7XG4gIH1cblxuICBhc3luYyBkaXNhYmxlQ2FsZW5kYXJBY2Nlc3MgKGJ1bmRsZUlEKSB7XG4gICAgaWYgKChhd2FpdCB0aGlzLmdldENhbGVuZGFyUm93Q291bnQoYnVuZGxlSUQpKSA+IDApIHtcbiAgICAgIGF3YWl0IHRoaXMudGNjRGIuZXhlY1F1ZXJ5KGBERUxFVEUgRlJPTSAnYWNjZXNzJyBXSEVSRSBjbGllbnQ9Jz8nIEFORCBzZXJ2aWNlPSdrVENDU2VydmljZUNhbGVuZGFyJ2AsIGJ1bmRsZUlEKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FsZW5kYXI7Il0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUdBLE1BQU1BLFFBQVEsQ0FBQztFQUViQyxXQUFXLENBQUVDLFlBQVksRUFBRUMsa0JBQWtCLEVBQUU7SUFDN0MsSUFBSSxDQUFDRCxZQUFZLEdBQUdBLFlBQVk7SUFDaEMsSUFBSSxDQUFDRSxLQUFLLEdBQUcsSUFBSUMsY0FBSyxDQUFDSCxZQUFZLEVBQUVDLGtCQUFrQixDQUFDO0VBQzFEO0VBRUEsTUFBTUcsbUJBQW1CLENBQUVDLFFBQVEsRUFBRTtJQUNuQyxNQUFNQyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUNKLEtBQUssQ0FBQ0ssU0FBUyxDQUFFLGlGQUFnRixFQUFFRixRQUFRLENBQUM7SUFDckksT0FBT0csUUFBUSxDQUFDRixLQUFLLENBQUNHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDMUM7RUFFQSxNQUFNQyxpQkFBaUIsQ0FBRUwsUUFBUSxFQUFFO0lBQ2pDLE1BQU1DLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQ0osS0FBSyxDQUFDSyxTQUFTLENBQUUsK0ZBQThGLEVBQUVGLFFBQVEsQ0FBQztJQUNuSixPQUFPRyxRQUFRLENBQUNGLEtBQUssQ0FBQ0csS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUM7RUFDOUM7RUFFQSxNQUFNRSxvQkFBb0IsQ0FBRU4sUUFBUSxFQUFFO0lBQ3BDLElBQUlPLEtBQUs7SUFDVCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUNSLG1CQUFtQixDQUFDQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7TUFDbERPLEtBQUssR0FBSTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7SUFDckQsQ0FBQyxNQUFNO01BQ0wsSUFBSU4sS0FBSyxHQUFHLElBQUksQ0FBQ08sV0FBVztNQUM1QixJQUFJLENBQUNDLGVBQUMsQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQ0YsV0FBVyxDQUFDLEVBQUU7UUFDakMsSUFBSTtVQUNGLE1BQU1HLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQ2QsS0FBSyxDQUFDSyxTQUFTLENBQUUsNkJBQTRCLENBQUM7VUFleEVELEtBQUssR0FBRyxJQUFJLENBQUNPLFdBQVcsR0FDdEJHLE1BQU0sQ0FDSEMsSUFBSSxFQUFFLENBRU5SLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FFWlMsTUFBTSxDQUFFQyxNQUFNLElBQUssQ0FBQ0wsZUFBQyxDQUFDTSxPQUFPLENBQUNELE1BQU0sQ0FBQyxDQUFDLENBQ3RDRSxNQUFNO1FBQ2IsQ0FBQyxDQUFDLE9BQU9DLEdBQUcsRUFBRTtVQUVaaEIsS0FBSyxHQUFHLElBQUksQ0FBQ04sWUFBWSxDQUFDdUIsS0FBSyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtVQUM3Q0MsZUFBRyxDQUFDQyxJQUFJLENBQUUsZ0RBQStDSCxHQUFHLENBQUNJLE9BQVEsRUFBQyxDQUFDO1FBQ3pFO01BQ0Y7TUFHQWQsS0FBSyxHQUFJLHFFQUFvRUUsZUFBQyxDQUFDYSxLQUFLLENBQUMsQ0FBQyxFQUFFckIsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQ3NCLElBQUksQ0FBQyxJQUFJLENBQUUsSUFBRztJQUN0SDtJQUNBLE1BQU0sSUFBSSxDQUFDMUIsS0FBSyxDQUFDSyxTQUFTLENBQUNLLEtBQUssRUFBRVAsUUFBUSxDQUFDO0VBQzdDO0VBRUEsTUFBTXdCLHFCQUFxQixDQUFFeEIsUUFBUSxFQUFFO0lBQ3JDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQ0QsbUJBQW1CLENBQUNDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtNQUNsRCxNQUFNLElBQUksQ0FBQ0gsS0FBSyxDQUFDSyxTQUFTLENBQUUseUVBQXdFLEVBQUVGLFFBQVEsQ0FBQztJQUNqSDtFQUNGO0FBQ0Y7QUFBQyxlQUVjUCxRQUFRO0FBQUEifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.js","names":["Calendar","constructor","xcodeVersion","sharedResourcesDir","tccDb","TCCDB","getCalendarRowCount","bundleID","count","execQuery","parseInt","split","hasCalendarAccess","enableCalendarAccess","query","columnCount","_","isNumber","stdout","trim","filter","record","isEmpty","length","err","major","log","warn","message","range","join","disableCalendarAccess"],"sources":["../../lib/calendar.js"],"sourcesContent":["import _ from 'lodash';\nimport log from './logger';\nimport TCCDB from './tcc-db';\n\n\nclass Calendar {\n\n constructor (xcodeVersion, sharedResourcesDir) {\n this.xcodeVersion = xcodeVersion;\n this.tccDb = new TCCDB(xcodeVersion, sharedResourcesDir);\n }\n\n async getCalendarRowCount (bundleID) {\n const count = await this.tccDb.execQuery(`SELECT count(*) FROM access WHERE client='?' AND service='kTCCServiceCalendar';`, bundleID);\n return parseInt(count.split('=')[1], 10);\n }\n\n async hasCalendarAccess (bundleID) {\n const count = await this.tccDb.execQuery(`SELECT count(*) FROM access WHERE client='?' AND allowed=1 AND service='kTCCServiceCalendar';`, bundleID);\n return parseInt(count.split('=')[1], 10) > 0;\n }\n\n async enableCalendarAccess (bundleID) {\n let query;\n if ((await this.getCalendarRowCount(bundleID)) > 0) {\n query = `UPDATE 'access' SET\n service='kTCCServiceCalendar',\n client_type=0,\n allowed=1,\n prompt_count=1,\n csreq=0\n WHERE client='?' AND service='kTCCServiceCalendar'`;\n } else {\n let count = this.columnCount;\n if (!_.isNumber(this.columnCount)) {\n try {\n const stdout = await this.tccDb.execQuery(`pragma table_info('access')`);\n // stdout has a number of records, each starting with `cid`\n // cid = 0\n // name = service\n // type = TEXT\n // notnull = 1\n // dflt_value =\n // pk = 1\n //\n // cid = 1\n // name = client\n // type = TEXT\n // notnull = 1\n // dflt_value =\n // pk = 2\n count = this.columnCount =\n stdout\n .trim()\n // get each record's beginning\n .split('cid')\n // remove the empty row (usually, the first)\n .filter((record) => !_.isEmpty(record))\n .length;\n } catch (err) {\n // use defaults, but do not save\n count = this.xcodeVersion.major < 10 ? 7 : 11;\n log.warn(`Unable to find Calendar access column count: ${err.message}`);\n }\n }\n\n // fill in the query with 0's for columns after the 5 we care about\n query = `INSERT INTO 'access' VALUES ('kTCCServiceCalendar', '?', 0, 1, 1, ${_.range(0, count - 5, 0).join(', ')});`;\n }\n await this.tccDb.execQuery(query, bundleID);\n }\n\n async disableCalendarAccess (bundleID) {\n if ((await this.getCalendarRowCount(bundleID)) > 0) {\n await this.tccDb.execQuery(`DELETE FROM 'access' WHERE client='?' AND service='kTCCServiceCalendar'`, bundleID);\n }\n }\n}\n\nexport default Calendar;"],"mappings":";;;;;;;;AAAA;AACA;AACA;AAGA,MAAMA,QAAQ,CAAC;EAEbC,WAAW,CAAEC,YAAY,EAAEC,kBAAkB,EAAE;IAC7C,IAAI,CAACD,YAAY,GAAGA,YAAY;IAChC,IAAI,CAACE,KAAK,GAAG,IAAIC,cAAK,CAACH,YAAY,EAAEC,kBAAkB,CAAC;EAC1D;EAEA,MAAMG,mBAAmB,CAAEC,QAAQ,EAAE;IACnC,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACJ,KAAK,CAACK,SAAS,CAAE,iFAAgF,EAAEF,QAAQ,CAAC;IACrI,OAAOG,QAAQ,CAACF,KAAK,CAACG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC1C;EAEA,MAAMC,iBAAiB,CAAEL,QAAQ,EAAE;IACjC,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACJ,KAAK,CAACK,SAAS,CAAE,+FAA8F,EAAEF,QAAQ,CAAC;IACnJ,OAAOG,QAAQ,CAACF,KAAK,CAACG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;EAC9C;EAEA,MAAME,oBAAoB,CAAEN,QAAQ,EAAE;IACpC,IAAIO,KAAK;IACT,IAAI,CAAC,MAAM,IAAI,CAACR,mBAAmB,CAACC,QAAQ,CAAC,IAAI,CAAC,EAAE;MAClDO,KAAK,GAAI;AACf;AACA;AACA;AACA;AACA;AACA,yDAAyD;IACrD,CAAC,MAAM;MACL,IAAIN,KAAK,GAAG,IAAI,CAACO,WAAW;MAC5B,IAAI,CAACC,eAAC,CAACC,QAAQ,CAAC,IAAI,CAACF,WAAW,CAAC,EAAE;QACjC,IAAI;UACF,MAAMG,MAAM,GAAG,MAAM,IAAI,CAACd,KAAK,CAACK,SAAS,CAAE,6BAA4B,CAAC;UAexED,KAAK,GAAG,IAAI,CAACO,WAAW,GACtBG,MAAM,CACHC,IAAI
|
|
1
|
+
{"version":3,"file":"calendar.js","names":["Calendar","constructor","xcodeVersion","sharedResourcesDir","tccDb","TCCDB","getCalendarRowCount","bundleID","count","execQuery","parseInt","split","hasCalendarAccess","enableCalendarAccess","query","columnCount","_","isNumber","stdout","trim","filter","record","isEmpty","length","err","major","log","warn","message","range","join","disableCalendarAccess"],"sources":["../../lib/calendar.js"],"sourcesContent":["import _ from 'lodash';\nimport log from './logger';\nimport TCCDB from './tcc-db';\n\n\nclass Calendar {\n\n constructor (xcodeVersion, sharedResourcesDir) {\n this.xcodeVersion = xcodeVersion;\n this.tccDb = new TCCDB(xcodeVersion, sharedResourcesDir);\n }\n\n async getCalendarRowCount (bundleID) {\n const count = await this.tccDb.execQuery(`SELECT count(*) FROM access WHERE client='?' AND service='kTCCServiceCalendar';`, bundleID);\n return parseInt(count.split('=')[1], 10);\n }\n\n async hasCalendarAccess (bundleID) {\n const count = await this.tccDb.execQuery(`SELECT count(*) FROM access WHERE client='?' AND allowed=1 AND service='kTCCServiceCalendar';`, bundleID);\n return parseInt(count.split('=')[1], 10) > 0;\n }\n\n async enableCalendarAccess (bundleID) {\n let query;\n if ((await this.getCalendarRowCount(bundleID)) > 0) {\n query = `UPDATE 'access' SET\n service='kTCCServiceCalendar',\n client_type=0,\n allowed=1,\n prompt_count=1,\n csreq=0\n WHERE client='?' AND service='kTCCServiceCalendar'`;\n } else {\n let count = this.columnCount;\n if (!_.isNumber(this.columnCount)) {\n try {\n const stdout = await this.tccDb.execQuery(`pragma table_info('access')`);\n // stdout has a number of records, each starting with `cid`\n // cid = 0\n // name = service\n // type = TEXT\n // notnull = 1\n // dflt_value =\n // pk = 1\n //\n // cid = 1\n // name = client\n // type = TEXT\n // notnull = 1\n // dflt_value =\n // pk = 2\n count = this.columnCount =\n stdout\n .trim()\n // get each record's beginning\n .split('cid')\n // remove the empty row (usually, the first)\n .filter((record) => !_.isEmpty(record))\n .length;\n } catch (err) {\n // use defaults, but do not save\n count = this.xcodeVersion.major < 10 ? 7 : 11;\n log.warn(`Unable to find Calendar access column count: ${err.message}`);\n }\n }\n\n // fill in the query with 0's for columns after the 5 we care about\n query = `INSERT INTO 'access' VALUES ('kTCCServiceCalendar', '?', 0, 1, 1, ${_.range(0, count - 5, 0).join(', ')});`;\n }\n await this.tccDb.execQuery(query, bundleID);\n }\n\n async disableCalendarAccess (bundleID) {\n if ((await this.getCalendarRowCount(bundleID)) > 0) {\n await this.tccDb.execQuery(`DELETE FROM 'access' WHERE client='?' AND service='kTCCServiceCalendar'`, bundleID);\n }\n }\n}\n\nexport default Calendar;"],"mappings":";;;;;;;;AAAA;AACA;AACA;AAGA,MAAMA,QAAQ,CAAC;EAEbC,WAAW,CAAEC,YAAY,EAAEC,kBAAkB,EAAE;IAC7C,IAAI,CAACD,YAAY,GAAGA,YAAY;IAChC,IAAI,CAACE,KAAK,GAAG,IAAIC,cAAK,CAACH,YAAY,EAAEC,kBAAkB,CAAC;EAC1D;EAEA,MAAMG,mBAAmB,CAAEC,QAAQ,EAAE;IACnC,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACJ,KAAK,CAACK,SAAS,CAAE,iFAAgF,EAAEF,QAAQ,CAAC;IACrI,OAAOG,QAAQ,CAACF,KAAK,CAACG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC1C;EAEA,MAAMC,iBAAiB,CAAEL,QAAQ,EAAE;IACjC,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACJ,KAAK,CAACK,SAAS,CAAE,+FAA8F,EAAEF,QAAQ,CAAC;IACnJ,OAAOG,QAAQ,CAACF,KAAK,CAACG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;EAC9C;EAEA,MAAME,oBAAoB,CAAEN,QAAQ,EAAE;IACpC,IAAIO,KAAK;IACT,IAAI,CAAC,MAAM,IAAI,CAACR,mBAAmB,CAACC,QAAQ,CAAC,IAAI,CAAC,EAAE;MAClDO,KAAK,GAAI;AACf;AACA;AACA;AACA;AACA;AACA,yDAAyD;IACrD,CAAC,MAAM;MACL,IAAIN,KAAK,GAAG,IAAI,CAACO,WAAW;MAC5B,IAAI,CAACC,eAAC,CAACC,QAAQ,CAAC,IAAI,CAACF,WAAW,CAAC,EAAE;QACjC,IAAI;UACF,MAAMG,MAAM,GAAG,MAAM,IAAI,CAACd,KAAK,CAACK,SAAS,CAAE,6BAA4B,CAAC;UAexED,KAAK,GAAG,IAAI,CAACO,WAAW,GACtBG,MAAM,CACHC,IAAI,EAAE,CAENR,KAAK,CAAC,KAAK,CAAC,CAEZS,MAAM,CAAEC,MAAM,IAAK,CAACL,eAAC,CAACM,OAAO,CAACD,MAAM,CAAC,CAAC,CACtCE,MAAM;QACb,CAAC,CAAC,OAAOC,GAAG,EAAE;UAEZhB,KAAK,GAAG,IAAI,CAACN,YAAY,CAACuB,KAAK,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE;UAC7CC,eAAG,CAACC,IAAI,CAAE,gDAA+CH,GAAG,CAACI,OAAQ,EAAC,CAAC;QACzE;MACF;MAGAd,KAAK,GAAI,qEAAoEE,eAAC,CAACa,KAAK,CAAC,CAAC,EAAErB,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAACsB,IAAI,CAAC,IAAI,CAAE,IAAG;IACtH;IACA,MAAM,IAAI,CAAC1B,KAAK,CAACK,SAAS,CAACK,KAAK,EAAEP,QAAQ,CAAC;EAC7C;EAEA,MAAMwB,qBAAqB,CAAExB,QAAQ,EAAE;IACrC,IAAI,CAAC,MAAM,IAAI,CAACD,mBAAmB,CAACC,QAAQ,CAAC,IAAI,CAAC,EAAE;MAClD,MAAM,IAAI,CAACH,KAAK,CAACK,SAAS,CAAE,yEAAwE,EAAEF,QAAQ,CAAC;IACjH;EACF;AACF;AAAC,eAEcP,QAAQ;AAAA"}
|
package/build/lib/certificate.js
CHANGED
|
@@ -18,7 +18,6 @@ const tset = `<?xml version="1.0" encoding="UTF-8"?>\n
|
|
|
18
18
|
<plist version="1.0">
|
|
19
19
|
<array/>
|
|
20
20
|
</plist>`;
|
|
21
|
-
|
|
22
21
|
class Certificate {
|
|
23
22
|
constructor(pemFilename) {
|
|
24
23
|
this.pemFilename = pemFilename;
|
|
@@ -50,7 +49,6 @@ class Certificate {
|
|
|
50
49
|
}
|
|
51
50
|
return result;
|
|
52
51
|
}
|
|
53
|
-
|
|
54
52
|
async add(dir) {
|
|
55
53
|
let data = (await this.getDerData(this.pemFilename)).toString('hex');
|
|
56
54
|
let subject = await this.getSubject(this.pemFilename);
|
|
@@ -58,36 +56,29 @@ class Certificate {
|
|
|
58
56
|
let trustStore = new TrustStore(dir);
|
|
59
57
|
return await trustStore.addRecord(sha1, tset, subject, data);
|
|
60
58
|
}
|
|
61
|
-
|
|
62
59
|
async has(dir) {
|
|
63
60
|
let subject = await this.getSubject(this.pemFilename);
|
|
64
61
|
let trustStore = new TrustStore(dir);
|
|
65
|
-
|
|
66
62
|
if (!(await trustStore.hasRecords(subject))) {
|
|
67
63
|
return false;
|
|
68
64
|
}
|
|
69
|
-
|
|
70
65
|
let previousFingerprint = await trustStore.getFingerPrintFromRecord(subject);
|
|
71
66
|
let currentFingerprint = await this.getFingerPrint();
|
|
72
67
|
return previousFingerprint.toString() === currentFingerprint.toString();
|
|
73
68
|
}
|
|
74
|
-
|
|
75
69
|
async remove(dir) {
|
|
76
70
|
let subject = await this.getSubject(this.pemFilename);
|
|
77
71
|
let trustStore = new TrustStore(dir);
|
|
78
72
|
return await trustStore.removeRecord(subject);
|
|
79
73
|
}
|
|
80
|
-
|
|
81
74
|
async getDerData() {
|
|
82
75
|
if (this.data) {
|
|
83
76
|
return this.data;
|
|
84
77
|
}
|
|
85
|
-
|
|
86
78
|
const output = await this.openssl('x509', '-outform', 'der', '-in', this.pemFilename);
|
|
87
79
|
this.data = Buffer.from(_lodash.default.trim(output));
|
|
88
80
|
return this.data;
|
|
89
81
|
}
|
|
90
|
-
|
|
91
82
|
async getFingerPrint() {
|
|
92
83
|
if (this.fingerprint) {
|
|
93
84
|
return this.fingerprint;
|
|
@@ -98,7 +89,6 @@ class Certificate {
|
|
|
98
89
|
this.fingerprint = shasum.digest();
|
|
99
90
|
return this.fingerprint;
|
|
100
91
|
}
|
|
101
|
-
|
|
102
92
|
async getSubject() {
|
|
103
93
|
if (this.subject) {
|
|
104
94
|
return this.subject;
|
|
@@ -113,32 +103,26 @@ class Certificate {
|
|
|
113
103
|
return this.subject;
|
|
114
104
|
}
|
|
115
105
|
}
|
|
116
|
-
|
|
117
106
|
exports.Certificate = Certificate;
|
|
118
107
|
class TrustStore {
|
|
119
108
|
constructor(sharedResourceDir) {
|
|
120
109
|
this.sharedResourceDir = sharedResourceDir;
|
|
121
110
|
}
|
|
122
|
-
|
|
123
111
|
async getDB() {
|
|
124
112
|
if (this.db) {
|
|
125
113
|
return this.db;
|
|
126
114
|
}
|
|
127
|
-
|
|
128
115
|
let keychainsPath = _path.default.resolve(this.sharedResourceDir, 'Library', 'Keychains');
|
|
129
116
|
if (!(await _support.fs.exists(keychainsPath))) {
|
|
130
117
|
await (0, _support.mkdirp)(keychainsPath);
|
|
131
118
|
}
|
|
132
|
-
|
|
133
119
|
this.db = _path.default.resolve(keychainsPath, 'TrustStore.sqlite3');
|
|
134
|
-
|
|
135
120
|
await (0, _utils.execSQLiteQuery)(this.db, `CREATE TABLE IF NOT EXISTS tsettings (sha1 BLOB NOT NULL DEFAULT '', subj BLOB NOT NULL DEFAULT '', tset BLOB, data BLOB, PRIMARY KEY(sha1));`);
|
|
136
121
|
try {
|
|
137
122
|
await (0, _utils.execSQLiteQuery)(this.db, 'CREATE INDEX isubj ON tsettings(subj);');
|
|
138
123
|
} catch (e) {}
|
|
139
124
|
return this.db;
|
|
140
125
|
}
|
|
141
|
-
|
|
142
126
|
async addRecord(sha1, tset, subj, data) {
|
|
143
127
|
let db = await this.getDB();
|
|
144
128
|
if (await this.hasRecords(subj)) {
|
|
@@ -147,20 +131,16 @@ class TrustStore {
|
|
|
147
131
|
return await (0, _utils.execSQLiteQuery)(db, `INSERT INTO tsettings (sha1, subj, tset, data) VALUES (x'?', '?', '?', x'?')`, sha1, subj, tset, data);
|
|
148
132
|
}
|
|
149
133
|
}
|
|
150
|
-
|
|
151
134
|
async removeRecord(subj) {
|
|
152
135
|
return await (0, _utils.execSQLiteQuery)(await this.getDB(), `DELETE FROM tsettings WHERE subj = '?'`, subj);
|
|
153
136
|
}
|
|
154
|
-
|
|
155
137
|
async hasRecords(subj) {
|
|
156
138
|
return (await this.getRecordCount(subj)) > 0;
|
|
157
139
|
}
|
|
158
|
-
|
|
159
140
|
async getRecordCount(subj) {
|
|
160
141
|
let result = await (0, _utils.execSQLiteQuery)(await this.getDB(), `SELECT count(*) FROM tsettings WHERE subj = '?'`, subj);
|
|
161
142
|
return parseInt(result.split('=')[1], 10);
|
|
162
143
|
}
|
|
163
|
-
|
|
164
144
|
async getFingerPrintFromRecord(subj) {
|
|
165
145
|
let result = await (0, _utils.execSQLiteQuery)(await this.getDB(), `SELECT sha1 FROM tsettings WHERE subj='?'`, subj);
|
|
166
146
|
if (result) {
|
|
@@ -171,4 +151,4 @@ class TrustStore {
|
|
|
171
151
|
exports.TrustStore = TrustStore;
|
|
172
152
|
var _default = Certificate;
|
|
173
153
|
exports.default = _default;
|
|
174
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0c2V0IiwiQ2VydGlmaWNhdGUiLCJjb25zdHJ1Y3RvciIsInBlbUZpbGVuYW1lIiwib3BlbnNzbEJpbmFyeSIsImZpbmdlcnByaW50IiwiZGF0YSIsInN1YmplY3QiLCJvcGVuc3NsIiwiYXJncyIsImZzIiwid2hpY2giLCJlIiwiRXJyb3IiLCJsb2ciLCJkZWJ1ZyIsInJlc3VsdCIsInN0ZG91dCIsImV4ZWMiLCJzdGRlcnIiLCJhZGQiLCJkaXIiLCJnZXREZXJEYXRhIiwidG9TdHJpbmciLCJnZXRTdWJqZWN0Iiwic2hhMSIsImdldEZpbmdlclByaW50IiwidHJ1c3RTdG9yZSIsIlRydXN0U3RvcmUiLCJhZGRSZWNvcmQiLCJoYXMiLCJoYXNSZWNvcmRzIiwicHJldmlvdXNGaW5nZXJwcmludCIsImdldEZpbmdlclByaW50RnJvbVJlY29yZCIsImN1cnJlbnRGaW5nZXJwcmludCIsInJlbW92ZSIsInJlbW92ZVJlY29yZCIsIm91dHB1dCIsIkJ1ZmZlciIsImZyb20iLCJfIiwidHJpbSIsInNoYXN1bSIsImNyeXB0byIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJkaWdlc3QiLCJtYXRjaCIsInNoYXJlZFJlc291cmNlRGlyIiwiZ2V0REIiLCJkYiIsImtleWNoYWluc1BhdGgiLCJwYXRoIiwicmVzb2x2ZSIsImV4aXN0cyIsIm1rZGlycCIsImV4ZWNTUUxpdGVRdWVyeSIsInN1YmoiLCJnZXRSZWNvcmRDb3VudCIsInBhcnNlSW50Iiwic3BsaXQiXSwic291cmNlcyI6WyIuLi8uLi9saWIvY2VydGlmaWNhdGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZzLCBta2RpcnAgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgZXhlY1NRTGl0ZVF1ZXJ5IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IHRzZXQgPSBgPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XFxuXG4gICAgPCFET0NUWVBFIHBsaXN0IFBVQkxJQyBcIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTlwiIFwiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZFwiPlxuICAgIDxwbGlzdCB2ZXJzaW9uPVwiMS4wXCI+XG4gICAgPGFycmF5Lz5cbjwvcGxpc3Q+YDtcblxuLyoqXG4gKiBMaWJyYXJ5IGZvciBwcm9ncmFtYXRpY2FsbHkgYWRkaW5nIGNlcnRpZmljYXRlc1xuICovXG5jbGFzcyBDZXJ0aWZpY2F0ZSB7XG5cbiAgY29uc3RydWN0b3IgKHBlbUZpbGVuYW1lKSB7XG4gICAgdGhpcy5wZW1GaWxlbmFtZSA9IHBlbUZpbGVuYW1lO1xuICAgIHRoaXMub3BlbnNzbEJpbmFyeSA9IG51bGw7XG4gICAgdGhpcy5maW5nZXJwcmludCA9IG51bGw7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICB0aGlzLnN1YmplY3QgPSBudWxsO1xuICB9XG5cbiAgYXN5bmMgb3BlbnNzbCAoLi4uYXJncykge1xuICAgIGlmICghdGhpcy5vcGVuc3NsQmluYXJ5KSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLm9wZW5zc2xCaW5hcnkgPSBhd2FpdCBmcy53aGljaCgnb3BlbnNzbCcpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wZW5zc2wgZXhlY3V0YWJsZSBjYW5ub3QgYmUgZm91bmQgaW4gUEFUSC4gTWFrZSBzdXJlIGl0IGlzIGluc3RhbGxlZCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxvZy5kZWJ1ZyhgRXhlY3V0aW5nICR7dGhpcy5vcGVuc3NsQmluYXJ5fSB3aXRoIGFyZ3VtZW50czogJHthcmdzfWApO1xuICAgIGxldCByZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYyh0aGlzLm9wZW5zc2xCaW5hcnksIGFyZ3MpO1xuICAgICAgcmVzdWx0ID0gc3Rkb3V0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLnN0ZGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZS5zdGRlcnIpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBjZXJ0aWZpY2F0ZSB0byB0aGUgVHJ1c3RTdG9yZVxuICAgKi9cbiAgYXN5bmMgYWRkIChkaXIpIHtcbiAgICBsZXQgZGF0YSA9IChhd2FpdCB0aGlzLmdldERlckRhdGEodGhpcy5wZW1GaWxlbmFtZSkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBsZXQgc3ViamVjdCA9IChhd2FpdCB0aGlzLmdldFN1YmplY3QodGhpcy5wZW1GaWxlbmFtZSkpO1xuICAgIGxldCBzaGExID0gKGF3YWl0IHRoaXMuZ2V0RmluZ2VyUHJpbnQodGhpcy5kYXRhKSkudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgbGV0IHRydXN0U3RvcmUgPSBuZXcgVHJ1c3RTdG9yZShkaXIpO1xuICAgIHJldHVybiBhd2FpdCB0cnVzdFN0b3JlLmFkZFJlY29yZChzaGExLCB0c2V0LCBzdWJqZWN0LCBkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYga2V5Y2hhaW4gYXQgZ2l2ZW4gZGlyZWN0b3J5IGhhcyB0aGlzIGNlcnRpZmljYXRlXG4gICAqL1xuICBhc3luYyBoYXMgKGRpcikge1xuICAgIGxldCBzdWJqZWN0ID0gYXdhaXQgdGhpcy5nZXRTdWJqZWN0KHRoaXMucGVtRmlsZW5hbWUpO1xuICAgIGxldCB0cnVzdFN0b3JlID0gbmV3IFRydXN0U3RvcmUoZGlyKTtcblxuICAgIC8vIFJldHVybiBmYWxzZSBpZiByZWNvcmQgd2l0aCB0aGlzIHN1YmplY3QgaXMgbm90IGZvdW5kXG4gICAgaWYgKCFhd2FpdCB0cnVzdFN0b3JlLmhhc1JlY29yZHMoc3ViamVjdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBJZiByZWNvcmQgaXMgZm91bmQsIGNoZWNrIGZpbmdlcnByaW50cyB0byB2ZXJpZnkgdGhhdCB0aGV5IGRpZG4ndCBjaGFuZ2VcbiAgICBsZXQgcHJldmlvdXNGaW5nZXJwcmludCA9IGF3YWl0IHRydXN0U3RvcmUuZ2V0RmluZ2VyUHJpbnRGcm9tUmVjb3JkKHN1YmplY3QpO1xuICAgIGxldCBjdXJyZW50RmluZ2VycHJpbnQgPSBhd2FpdCB0aGlzLmdldEZpbmdlclByaW50KCk7XG4gICAgcmV0dXJuIHByZXZpb3VzRmluZ2VycHJpbnQudG9TdHJpbmcoKSA9PT0gY3VycmVudEZpbmdlcnByaW50LnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGNlcnRpZmljYXRlIGZyb20gdGhlIFRydXN0U3RvcmVcbiAgICovXG4gIGFzeW5jIHJlbW92ZSAoZGlyKSB7XG4gICAgbGV0IHN1YmplY3QgPSBhd2FpdCB0aGlzLmdldFN1YmplY3QodGhpcy5wZW1GaWxlbmFtZSk7XG4gICAgbGV0IHRydXN0U3RvcmUgPSBuZXcgVHJ1c3RTdG9yZShkaXIpO1xuICAgIHJldHVybiBhd2FpdCB0cnVzdFN0b3JlLnJlbW92ZVJlY29yZChzdWJqZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2xhdGUgUEVNIGZpbGUgdG8gREVSIGJ1ZmZlclxuICAgKi9cbiAgYXN5bmMgZ2V0RGVyRGF0YSAoKSB7XG4gICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0ICdwZW0nIGZpbGUgdG8gJ2RlcidcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB0aGlzLm9wZW5zc2woJ3g1MDknLFxuICAgICAgJy1vdXRmb3JtJywgJ2RlcicsXG4gICAgICAnLWluJywgdGhpcy5wZW1GaWxlbmFtZVxuICAgICk7XG4gICAgdGhpcy5kYXRhID0gQnVmZmVyLmZyb20oXy50cmltKG91dHB1dCkpO1xuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IFNIQTEgZmluZ2VycHJpbnQgZnJvbSBkZXIgZGF0YSBiZWZvcmVcbiAgICovXG4gIGFzeW5jIGdldEZpbmdlclByaW50ICgpIHtcbiAgICBpZiAodGhpcy5maW5nZXJwcmludCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmluZ2VycHJpbnQ7XG4gICAgfVxuXG4gICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmdldERlckRhdGEoKTtcbiAgICBsZXQgc2hhc3VtID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKTtcbiAgICBzaGFzdW0udXBkYXRlKGRhdGEpO1xuICAgIHRoaXMuZmluZ2VycHJpbnQgPSBzaGFzdW0uZGlnZXN0KCk7XG4gICAgcmV0dXJuIHRoaXMuZmluZ2VycHJpbnQ7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgdGhlIHN1YmplY3QgZnJvbSB0aGUgZGVyIGRhdGFcbiAgICovXG4gIGFzeW5jIGdldFN1YmplY3QgKCkge1xuICAgIGlmICh0aGlzLnN1YmplY3QpIHtcbiAgICAgIHJldHVybiB0aGlzLnN1YmplY3Q7XG4gICAgfVxuXG4gICAgY29uc3Qgc3ViamVjdCA9IGF3YWl0IHRoaXMub3BlbnNzbCgneDUwOScsXG4gICAgICAnLW5vb3V0JywgJy1zdWJqZWN0JyxcbiAgICAgICctaW4nLCB0aGlzLnBlbUZpbGVuYW1lLFxuICAgICk7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE0NjY2XG4gICAgY29uc3QgbWF0Y2ggPSAvXlxccypzdWJqZWN0PS4qXFxiQ05cXGJcXHMqPVxccyooW15cXG5dKykkL20uZXhlYyhzdWJqZWN0KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBsb2cuZGVidWcoc3ViamVjdCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSBjZXJ0aWZpY2F0ZSBzdWJqZWN0IGZyb20gdGhlIG9wZW5zc2wgb3V0cHV0YCk7XG4gICAgfVxuICAgIHRoaXMuc3ViamVjdCA9IG1hdGNoWzFdO1xuICAgIHJldHVybiB0aGlzLnN1YmplY3Q7XG4gIH1cblxufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyByZWNvcmRzIHRvIFRydXN0U3RvcmUuc3FsaXRlMyBkYXRhYmFzZXMgdGhhdCBLZXljaGFpbnMgdXNlXG4gKi9cbmNsYXNzIFRydXN0U3RvcmUge1xuICBjb25zdHJ1Y3RvciAoc2hhcmVkUmVzb3VyY2VEaXIpIHtcbiAgICB0aGlzLnNoYXJlZFJlc291cmNlRGlyID0gc2hhcmVkUmVzb3VyY2VEaXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IFRydXN0U3RvcmUgZGF0YWJhc2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2ltdWxhdG9yXG4gICAqL1xuICBhc3luYyBnZXREQiAoKSB7XG4gICAgaWYgKHRoaXMuZGIpIHtcbiAgICAgIHJldHVybiB0aGlzLmRiO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBzaW0gZG9lc24ndCBoYXZlIGEga2V5Y2hhaW5zIGRpcmVjdG9yeSwgY3JlYXRlIG9uZVxuICAgIGxldCBrZXljaGFpbnNQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuc2hhcmVkUmVzb3VyY2VEaXIsICdMaWJyYXJ5JywgJ0tleWNoYWlucycpO1xuICAgIGlmICghKGF3YWl0IGZzLmV4aXN0cyhrZXljaGFpbnNQYXRoKSkpIHtcbiAgICAgIGF3YWl0IG1rZGlycChrZXljaGFpbnNQYXRoKTtcbiAgICB9XG5cbiAgICAvLyBPcGVuIHNxbGl0ZSBkYXRhYmFzZVxuICAgIHRoaXMuZGIgPSBwYXRoLnJlc29sdmUoa2V5Y2hhaW5zUGF0aCwgJ1RydXN0U3RvcmUuc3FsaXRlMycpO1xuXG4gICAgLy8gSWYgaXQgZG9lc24ndCBoYXZlIGEgdHNldHRpbmdzIHRhYmxlLCBjcmVhdGUgb25lXG4gICAgYXdhaXQgZXhlY1NRTGl0ZVF1ZXJ5KHRoaXMuZGIsIGBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0c2V0dGluZ3MgKHNoYTEgQkxPQiBOT1QgTlVMTCBERUZBVUxUICcnLCBzdWJqIEJMT0IgTk9UIE5VTEwgREVGQVVMVCAnJywgdHNldCBCTE9CLCBkYXRhIEJMT0IsIFBSSU1BUlkgS0VZKHNoYTEpKTtgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlY1NRTGl0ZVF1ZXJ5KHRoaXMuZGIsICdDUkVBVEUgSU5ERVggaXN1YmogT04gdHNldHRpbmdzKHN1YmopOycpO1xuICAgIH0gY2F0Y2ggKGUpIHsgfVxuXG5cbiAgICByZXR1cm4gdGhpcy5kYjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgcmVjb3JkIHRvIHRzZXR0aW5nc1xuICAgKi9cbiAgYXN5bmMgYWRkUmVjb3JkIChzaGExLCB0c2V0LCBzdWJqLCBkYXRhKSB7XG4gICAgbGV0IGRiID0gYXdhaXQgdGhpcy5nZXREQigpO1xuICAgIGlmIChhd2FpdCB0aGlzLmhhc1JlY29yZHMoc3ViaikpIHtcbiAgICAgIHJldHVybiBhd2FpdCBleGVjU1FMaXRlUXVlcnkoZGIsIGBVUERBVEUgdHNldHRpbmdzIFNFVCBzaGExPXgnPycsIHRzZXQ9Jz8nLCBkYXRhPXgnPycgV0hFUkUgc3Viaj0nPydgLCBzaGExLCB0c2V0LCBkYXRhLCBzdWJqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGF3YWl0IGV4ZWNTUUxpdGVRdWVyeShkYiwgYElOU0VSVCBJTlRPIHRzZXR0aW5ncyAoc2hhMSwgc3ViaiwgdHNldCwgZGF0YSkgVkFMVUVTICh4Jz8nLCAnPycsICc/JywgeCc/JylgLCBzaGExLCBzdWJqLCB0c2V0LCBkYXRhKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHJlY29yZCBmcm9tIHRzZXR0aW5ncyB0aGF0IG1hdGNoZXMgdGhlIHN1YmplY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YmpcbiAgICovXG4gIGFzeW5jIHJlbW92ZVJlY29yZCAoc3Viaikge1xuICAgIHJldHVybiBhd2FpdCBleGVjU1FMaXRlUXVlcnkoYXdhaXQgdGhpcy5nZXREQigpLCBgREVMRVRFIEZST00gdHNldHRpbmdzIFdIRVJFIHN1YmogPSAnPydgLCBzdWJqKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSByZWNvcmQgZnJvbSB0c2V0dGluZ3MgdGhhdCBtYXRjaGVzIHRoZSBzdWJqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqXG4gICAqL1xuICBhc3luYyBoYXNSZWNvcmRzIChzdWJqKSB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldFJlY29yZENvdW50KHN1YmopKSA+IDA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvdW50IG9mIGhvdyBtYW55IHJlY29yZHMgaGF2ZSB0aGlzIHN1YmplY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YmpcbiAgICovXG4gIGFzeW5jIGdldFJlY29yZENvdW50IChzdWJqKSB7XG4gICAgbGV0IHJlc3VsdCA9IGF3YWl0IGV4ZWNTUUxpdGVRdWVyeShhd2FpdCB0aGlzLmdldERCKCksIGBTRUxFQ1QgY291bnQoKikgRlJPTSB0c2V0dGluZ3MgV0hFUkUgc3ViaiA9ICc/J2AsIHN1YmopO1xuICAgIHJldHVybiBwYXJzZUludChyZXN1bHQuc3BsaXQoJz0nKVsxXSwgMTApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgU0hBMSBmaW5nZXJwcmludCBmb3IgdGhlIHJlY29yZCB0aGF0IGhhcyB0aGlzIHN1YmplY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YmpcbiAgICovXG4gIGFzeW5jIGdldEZpbmdlclByaW50RnJvbVJlY29yZCAoc3Viaikge1xuICAgIGxldCByZXN1bHQgPSBhd2FpdCBleGVjU1FMaXRlUXVlcnkoYXdhaXQgdGhpcy5nZXREQigpLCBgU0VMRUNUIHNoYTEgRlJPTSB0c2V0dGluZ3MgV0hFUkUgc3Viaj0nPydgLCBzdWJqKTtcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20ocmVzdWx0LnNwbGl0KCc9JylbMV0udHJpbSgpKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2VydGlmaWNhdGU7XG5leHBvcnQgeyBDZXJ0aWZpY2F0ZSwgVHJ1c3RTdG9yZSB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsSUFBSSxHQUFJO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFLVCxNQUFNQyxXQUFXLENBQUM7RUFFaEJDLFdBQVcsQ0FBRUMsV0FBVyxFQUFFO0lBQ3hCLElBQUksQ0FBQ0EsV0FBVyxHQUFHQSxXQUFXO0lBQzlCLElBQUksQ0FBQ0MsYUFBYSxHQUFHLElBQUk7SUFDekIsSUFBSSxDQUFDQyxXQUFXLEdBQUcsSUFBSTtJQUN2QixJQUFJLENBQUNDLElBQUksR0FBRyxJQUFJO0lBQ2hCLElBQUksQ0FBQ0MsT0FBTyxHQUFHLElBQUk7RUFDckI7RUFFQSxNQUFNQyxPQUFPLENBQUUsR0FBR0MsSUFBSSxFQUFFO0lBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUNMLGFBQWEsRUFBRTtNQUN2QixJQUFJO1FBQ0YsSUFBSSxDQUFDQSxhQUFhLEdBQUcsTUFBTU0sV0FBRSxDQUFDQyxLQUFLLENBQUMsU0FBUyxDQUFDO01BQ2hELENBQUMsQ0FBQyxPQUFPQyxDQUFDLEVBQUU7UUFDVixNQUFNLElBQUlDLEtBQUssQ0FBQyx1RUFBdUUsQ0FBQztNQUMxRjtJQUNGO0lBRUFDLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLGFBQVksSUFBSSxDQUFDWCxhQUFjLG9CQUFtQkssSUFBSyxFQUFDLENBQUM7SUFDcEUsSUFBSU8sTUFBTTtJQUNWLElBQUk7TUFDRixNQUFNO1FBQUNDO01BQU0sQ0FBQyxHQUFHLE1BQU0sSUFBQUMsa0JBQUksRUFBQyxJQUFJLENBQUNkLGFBQWEsRUFBRUssSUFBSSxDQUFDO01BQ3JETyxNQUFNLEdBQUdDLE1BQU07SUFDakIsQ0FBQyxDQUFDLE9BQU9MLENBQUMsRUFBRTtNQUNWLElBQUlBLENBQUMsQ0FBQ08sTUFBTSxFQUFFO1FBQ1osTUFBTSxJQUFJTixLQUFLLENBQUNELENBQUMsQ0FBQ08sTUFBTSxDQUFDO01BQzNCO01BQ0EsTUFBTVAsQ0FBQztJQUNUO0lBQ0EsT0FBT0ksTUFBTTtFQUNmOztFQUtBLE1BQU1JLEdBQUcsQ0FBRUMsR0FBRyxFQUFFO0lBQ2QsSUFBSWYsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUNnQixVQUFVLENBQUMsSUFBSSxDQUFDbkIsV0FBVyxDQUFDLEVBQUVvQixRQUFRLENBQUMsS0FBSyxDQUFDO0lBQ3BFLElBQUloQixPQUFPLEdBQUksTUFBTSxJQUFJLENBQUNpQixVQUFVLENBQUMsSUFBSSxDQUFDckIsV0FBVyxDQUFFO0lBQ3ZELElBQUlzQixJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQ0MsY0FBYyxDQUFDLElBQUksQ0FBQ3BCLElBQUksQ0FBQyxFQUFFaUIsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUVqRSxJQUFJSSxVQUFVLEdBQUcsSUFBSUMsVUFBVSxDQUFDUCxHQUFHLENBQUM7SUFDcEMsT0FBTyxNQUFNTSxVQUFVLENBQUNFLFNBQVMsQ0FBQ0osSUFBSSxFQUFFekIsSUFBSSxFQUFFTyxPQUFPLEVBQUVELElBQUksQ0FBQztFQUM5RDs7RUFLQSxNQUFNd0IsR0FBRyxDQUFFVCxHQUFHLEVBQUU7SUFDZCxJQUFJZCxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUNpQixVQUFVLENBQUMsSUFBSSxDQUFDckIsV0FBVyxDQUFDO0lBQ3JELElBQUl3QixVQUFVLEdBQUcsSUFBSUMsVUFBVSxDQUFDUCxHQUFHLENBQUM7O0lBR3BDLElBQUksRUFBQyxNQUFNTSxVQUFVLENBQUNJLFVBQVUsQ0FBQ3hCLE9BQU8sQ0FBQyxHQUFFO01BQ3pDLE9BQU8sS0FBSztJQUNkOztJQUdBLElBQUl5QixtQkFBbUIsR0FBRyxNQUFNTCxVQUFVLENBQUNNLHdCQUF3QixDQUFDMUIsT0FBTyxDQUFDO0lBQzVFLElBQUkyQixrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQ1IsY0FBYyxFQUFFO0lBQ3BELE9BQU9NLG1CQUFtQixDQUFDVCxRQUFRLEVBQUUsS0FBS1csa0JBQWtCLENBQUNYLFFBQVEsRUFBRTtFQUN6RTs7RUFLQSxNQUFNWSxNQUFNLENBQUVkLEdBQUcsRUFBRTtJQUNqQixJQUFJZCxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUNpQixVQUFVLENBQUMsSUFBSSxDQUFDckIsV0FBVyxDQUFDO0lBQ3JELElBQUl3QixVQUFVLEdBQUcsSUFBSUMsVUFBVSxDQUFDUCxHQUFHLENBQUM7SUFDcEMsT0FBTyxNQUFNTSxVQUFVLENBQUNTLFlBQVksQ0FBQzdCLE9BQU8sQ0FBQztFQUMvQzs7RUFLQSxNQUFNZSxVQUFVLEdBQUk7SUFDbEIsSUFBSSxJQUFJLENBQUNoQixJQUFJLEVBQUU7TUFDYixPQUFPLElBQUksQ0FBQ0EsSUFBSTtJQUNsQjs7SUFHQSxNQUFNK0IsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDN0IsT0FBTyxDQUFDLE1BQU0sRUFDdEMsVUFBVSxFQUFFLEtBQUssRUFDakIsS0FBSyxFQUFFLElBQUksQ0FBQ0wsV0FBVyxDQUN4QjtJQUNELElBQUksQ0FBQ0csSUFBSSxHQUFHZ0MsTUFBTSxDQUFDQyxJQUFJLENBQUNDLGVBQUMsQ0FBQ0MsSUFBSSxDQUFDSixNQUFNLENBQUMsQ0FBQztJQUN2QyxPQUFPLElBQUksQ0FBQy9CLElBQUk7RUFDbEI7O0VBS0EsTUFBTW9CLGNBQWMsR0FBSTtJQUN0QixJQUFJLElBQUksQ0FBQ3JCLFdBQVcsRUFBRTtNQUNwQixPQUFPLElBQUksQ0FBQ0EsV0FBVztJQUN6QjtJQUVBLElBQUlDLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQ2dCLFVBQVUsRUFBRTtJQUNsQyxJQUFJb0IsTUFBTSxHQUFHQyxlQUFNLENBQUNDLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDdENGLE1BQU0sQ0FBQ0csTUFBTSxDQUFDdkMsSUFBSSxDQUFDO0lBQ25CLElBQUksQ0FBQ0QsV0FBVyxHQUFHcUMsTUFBTSxDQUFDSSxNQUFNLEVBQUU7SUFDbEMsT0FBTyxJQUFJLENBQUN6QyxXQUFXO0VBQ3pCOztFQUtBLE1BQU1tQixVQUFVLEdBQUk7SUFDbEIsSUFBSSxJQUFJLENBQUNqQixPQUFPLEVBQUU7TUFDaEIsT0FBTyxJQUFJLENBQUNBLE9BQU87SUFDckI7SUFFQSxNQUFNQSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUNDLE9BQU8sQ0FBQyxNQUFNLEVBQ3ZDLFFBQVEsRUFBRSxVQUFVLEVBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUNMLFdBQVcsQ0FDeEI7SUFFRCxNQUFNNEMsS0FBSyxHQUFHLHVDQUF1QyxDQUFDN0IsSUFBSSxDQUFDWCxPQUFPLENBQUM7SUFDbkUsSUFBSSxDQUFDd0MsS0FBSyxFQUFFO01BQ1ZqQyxlQUFHLENBQUNDLEtBQUssQ0FBQ1IsT0FBTyxDQUFDO01BQ2xCLE1BQU0sSUFBSU0sS0FBSyxDQUFFLDBEQUF5RCxDQUFDO0lBQzdFO0lBQ0EsSUFBSSxDQUFDTixPQUFPLEdBQUd3QyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLE9BQU8sSUFBSSxDQUFDeEMsT0FBTztFQUNyQjtBQUVGOztBQUFDO0FBS0QsTUFBTXFCLFVBQVUsQ0FBQztFQUNmMUIsV0FBVyxDQUFFOEMsaUJBQWlCLEVBQUU7SUFDOUIsSUFBSSxDQUFDQSxpQkFBaUIsR0FBR0EsaUJBQWlCO0VBQzVDOztFQUtBLE1BQU1DLEtBQUssR0FBSTtJQUNiLElBQUksSUFBSSxDQUFDQyxFQUFFLEVBQUU7TUFDWCxPQUFPLElBQUksQ0FBQ0EsRUFBRTtJQUNoQjs7SUFHQSxJQUFJQyxhQUFhLEdBQUdDLGFBQUksQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ0wsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQztJQUNoRixJQUFJLEVBQUUsTUFBTXRDLFdBQUUsQ0FBQzRDLE1BQU0sQ0FBQ0gsYUFBYSxDQUFDLENBQUMsRUFBRTtNQUNyQyxNQUFNLElBQUFJLGVBQU0sRUFBQ0osYUFBYSxDQUFDO0lBQzdCOztJQUdBLElBQUksQ0FBQ0QsRUFBRSxHQUFHRSxhQUFJLENBQUNDLE9BQU8sQ0FBQ0YsYUFBYSxFQUFFLG9CQUFvQixDQUFDOztJQUczRCxNQUFNLElBQUFLLHNCQUFlLEVBQUMsSUFBSSxDQUFDTixFQUFFLEVBQUcsK0lBQThJLENBQUM7SUFDL0ssSUFBSTtNQUNGLE1BQU0sSUFBQU0sc0JBQWUsRUFBQyxJQUFJLENBQUNOLEVBQUUsRUFBRSx3Q0FBd0MsQ0FBQztJQUMxRSxDQUFDLENBQUMsT0FBT3RDLENBQUMsRUFBRSxDQUFFO0lBR2QsT0FBTyxJQUFJLENBQUNzQyxFQUFFO0VBQ2hCOztFQUtBLE1BQU1yQixTQUFTLENBQUVKLElBQUksRUFBRXpCLElBQUksRUFBRXlELElBQUksRUFBRW5ELElBQUksRUFBRTtJQUN2QyxJQUFJNEMsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDRCxLQUFLLEVBQUU7SUFDM0IsSUFBSSxNQUFNLElBQUksQ0FBQ2xCLFVBQVUsQ0FBQzBCLElBQUksQ0FBQyxFQUFFO01BQy9CLE9BQU8sTUFBTSxJQUFBRCxzQkFBZSxFQUFDTixFQUFFLEVBQUcsb0VBQW1FLEVBQUV6QixJQUFJLEVBQUV6QixJQUFJLEVBQUVNLElBQUksRUFBRW1ELElBQUksQ0FBQztJQUNoSSxDQUFDLE1BQU07TUFDTCxPQUFPLE1BQU0sSUFBQUQsc0JBQWUsRUFBQ04sRUFBRSxFQUFHLDhFQUE2RSxFQUFFekIsSUFBSSxFQUFFZ0MsSUFBSSxFQUFFekQsSUFBSSxFQUFFTSxJQUFJLENBQUM7SUFDMUk7RUFDRjs7RUFNQSxNQUFNOEIsWUFBWSxDQUFFcUIsSUFBSSxFQUFFO0lBQ3hCLE9BQU8sTUFBTSxJQUFBRCxzQkFBZSxFQUFDLE1BQU0sSUFBSSxDQUFDUCxLQUFLLEVBQUUsRUFBRyx3Q0FBdUMsRUFBRVEsSUFBSSxDQUFDO0VBQ2xHOztFQU1BLE1BQU0xQixVQUFVLENBQUUwQixJQUFJLEVBQUU7SUFDdEIsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDQyxjQUFjLENBQUNELElBQUksQ0FBQyxJQUFJLENBQUM7RUFDOUM7O0VBTUEsTUFBTUMsY0FBYyxDQUFFRCxJQUFJLEVBQUU7SUFDMUIsSUFBSXpDLE1BQU0sR0FBRyxNQUFNLElBQUF3QyxzQkFBZSxFQUFDLE1BQU0sSUFBSSxDQUFDUCxLQUFLLEVBQUUsRUFBRyxpREFBZ0QsRUFBRVEsSUFBSSxDQUFDO0lBQy9HLE9BQU9FLFFBQVEsQ0FBQzNDLE1BQU0sQ0FBQzRDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDM0M7O0VBTUEsTUFBTTNCLHdCQUF3QixDQUFFd0IsSUFBSSxFQUFFO0lBQ3BDLElBQUl6QyxNQUFNLEdBQUcsTUFBTSxJQUFBd0Msc0JBQWUsRUFBQyxNQUFNLElBQUksQ0FBQ1AsS0FBSyxFQUFFLEVBQUcsMkNBQTBDLEVBQUVRLElBQUksQ0FBQztJQUN6RyxJQUFJekMsTUFBTSxFQUFFO01BQ1YsT0FBT3NCLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDdkIsTUFBTSxDQUFDNEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbkIsSUFBSSxFQUFFLENBQUM7SUFDakQ7RUFDRjtBQUNGO0FBQUM7QUFBQSxlQUVjeEMsV0FBVztBQUFBIn0=
|
|
154
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0c2V0IiwiQ2VydGlmaWNhdGUiLCJjb25zdHJ1Y3RvciIsInBlbUZpbGVuYW1lIiwib3BlbnNzbEJpbmFyeSIsImZpbmdlcnByaW50IiwiZGF0YSIsInN1YmplY3QiLCJvcGVuc3NsIiwiYXJncyIsImZzIiwid2hpY2giLCJlIiwiRXJyb3IiLCJsb2ciLCJkZWJ1ZyIsInJlc3VsdCIsInN0ZG91dCIsImV4ZWMiLCJzdGRlcnIiLCJhZGQiLCJkaXIiLCJnZXREZXJEYXRhIiwidG9TdHJpbmciLCJnZXRTdWJqZWN0Iiwic2hhMSIsImdldEZpbmdlclByaW50IiwidHJ1c3RTdG9yZSIsIlRydXN0U3RvcmUiLCJhZGRSZWNvcmQiLCJoYXMiLCJoYXNSZWNvcmRzIiwicHJldmlvdXNGaW5nZXJwcmludCIsImdldEZpbmdlclByaW50RnJvbVJlY29yZCIsImN1cnJlbnRGaW5nZXJwcmludCIsInJlbW92ZSIsInJlbW92ZVJlY29yZCIsIm91dHB1dCIsIkJ1ZmZlciIsImZyb20iLCJfIiwidHJpbSIsInNoYXN1bSIsImNyeXB0byIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJkaWdlc3QiLCJtYXRjaCIsInNoYXJlZFJlc291cmNlRGlyIiwiZ2V0REIiLCJkYiIsImtleWNoYWluc1BhdGgiLCJwYXRoIiwicmVzb2x2ZSIsImV4aXN0cyIsIm1rZGlycCIsImV4ZWNTUUxpdGVRdWVyeSIsInN1YmoiLCJnZXRSZWNvcmRDb3VudCIsInBhcnNlSW50Iiwic3BsaXQiXSwic291cmNlcyI6WyIuLi8uLi9saWIvY2VydGlmaWNhdGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZzLCBta2RpcnAgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgZXhlY1NRTGl0ZVF1ZXJ5IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IHRzZXQgPSBgPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XFxuXG4gICAgPCFET0NUWVBFIHBsaXN0IFBVQkxJQyBcIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTlwiIFwiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZFwiPlxuICAgIDxwbGlzdCB2ZXJzaW9uPVwiMS4wXCI+XG4gICAgPGFycmF5Lz5cbjwvcGxpc3Q+YDtcblxuLyoqXG4gKiBMaWJyYXJ5IGZvciBwcm9ncmFtYXRpY2FsbHkgYWRkaW5nIGNlcnRpZmljYXRlc1xuICovXG5jbGFzcyBDZXJ0aWZpY2F0ZSB7XG5cbiAgY29uc3RydWN0b3IgKHBlbUZpbGVuYW1lKSB7XG4gICAgdGhpcy5wZW1GaWxlbmFtZSA9IHBlbUZpbGVuYW1lO1xuICAgIHRoaXMub3BlbnNzbEJpbmFyeSA9IG51bGw7XG4gICAgdGhpcy5maW5nZXJwcmludCA9IG51bGw7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICB0aGlzLnN1YmplY3QgPSBudWxsO1xuICB9XG5cbiAgYXN5bmMgb3BlbnNzbCAoLi4uYXJncykge1xuICAgIGlmICghdGhpcy5vcGVuc3NsQmluYXJ5KSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLm9wZW5zc2xCaW5hcnkgPSBhd2FpdCBmcy53aGljaCgnb3BlbnNzbCcpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wZW5zc2wgZXhlY3V0YWJsZSBjYW5ub3QgYmUgZm91bmQgaW4gUEFUSC4gTWFrZSBzdXJlIGl0IGlzIGluc3RhbGxlZCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxvZy5kZWJ1ZyhgRXhlY3V0aW5nICR7dGhpcy5vcGVuc3NsQmluYXJ5fSB3aXRoIGFyZ3VtZW50czogJHthcmdzfWApO1xuICAgIGxldCByZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYyh0aGlzLm9wZW5zc2xCaW5hcnksIGFyZ3MpO1xuICAgICAgcmVzdWx0ID0gc3Rkb3V0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLnN0ZGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZS5zdGRlcnIpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBjZXJ0aWZpY2F0ZSB0byB0aGUgVHJ1c3RTdG9yZVxuICAgKi9cbiAgYXN5bmMgYWRkIChkaXIpIHtcbiAgICBsZXQgZGF0YSA9IChhd2FpdCB0aGlzLmdldERlckRhdGEodGhpcy5wZW1GaWxlbmFtZSkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBsZXQgc3ViamVjdCA9IChhd2FpdCB0aGlzLmdldFN1YmplY3QodGhpcy5wZW1GaWxlbmFtZSkpO1xuICAgIGxldCBzaGExID0gKGF3YWl0IHRoaXMuZ2V0RmluZ2VyUHJpbnQodGhpcy5kYXRhKSkudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgbGV0IHRydXN0U3RvcmUgPSBuZXcgVHJ1c3RTdG9yZShkaXIpO1xuICAgIHJldHVybiBhd2FpdCB0cnVzdFN0b3JlLmFkZFJlY29yZChzaGExLCB0c2V0LCBzdWJqZWN0LCBkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYga2V5Y2hhaW4gYXQgZ2l2ZW4gZGlyZWN0b3J5IGhhcyB0aGlzIGNlcnRpZmljYXRlXG4gICAqL1xuICBhc3luYyBoYXMgKGRpcikge1xuICAgIGxldCBzdWJqZWN0ID0gYXdhaXQgdGhpcy5nZXRTdWJqZWN0KHRoaXMucGVtRmlsZW5hbWUpO1xuICAgIGxldCB0cnVzdFN0b3JlID0gbmV3IFRydXN0U3RvcmUoZGlyKTtcblxuICAgIC8vIFJldHVybiBmYWxzZSBpZiByZWNvcmQgd2l0aCB0aGlzIHN1YmplY3QgaXMgbm90IGZvdW5kXG4gICAgaWYgKCFhd2FpdCB0cnVzdFN0b3JlLmhhc1JlY29yZHMoc3ViamVjdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBJZiByZWNvcmQgaXMgZm91bmQsIGNoZWNrIGZpbmdlcnByaW50cyB0byB2ZXJpZnkgdGhhdCB0aGV5IGRpZG4ndCBjaGFuZ2VcbiAgICBsZXQgcHJldmlvdXNGaW5nZXJwcmludCA9IGF3YWl0IHRydXN0U3RvcmUuZ2V0RmluZ2VyUHJpbnRGcm9tUmVjb3JkKHN1YmplY3QpO1xuICAgIGxldCBjdXJyZW50RmluZ2VycHJpbnQgPSBhd2FpdCB0aGlzLmdldEZpbmdlclByaW50KCk7XG4gICAgcmV0dXJuIHByZXZpb3VzRmluZ2VycHJpbnQudG9TdHJpbmcoKSA9PT0gY3VycmVudEZpbmdlcnByaW50LnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGNlcnRpZmljYXRlIGZyb20gdGhlIFRydXN0U3RvcmVcbiAgICovXG4gIGFzeW5jIHJlbW92ZSAoZGlyKSB7XG4gICAgbGV0IHN1YmplY3QgPSBhd2FpdCB0aGlzLmdldFN1YmplY3QodGhpcy5wZW1GaWxlbmFtZSk7XG4gICAgbGV0IHRydXN0U3RvcmUgPSBuZXcgVHJ1c3RTdG9yZShkaXIpO1xuICAgIHJldHVybiBhd2FpdCB0cnVzdFN0b3JlLnJlbW92ZVJlY29yZChzdWJqZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2xhdGUgUEVNIGZpbGUgdG8gREVSIGJ1ZmZlclxuICAgKi9cbiAgYXN5bmMgZ2V0RGVyRGF0YSAoKSB7XG4gICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0ICdwZW0nIGZpbGUgdG8gJ2RlcidcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB0aGlzLm9wZW5zc2woJ3g1MDknLFxuICAgICAgJy1vdXRmb3JtJywgJ2RlcicsXG4gICAgICAnLWluJywgdGhpcy5wZW1GaWxlbmFtZVxuICAgICk7XG4gICAgdGhpcy5kYXRhID0gQnVmZmVyLmZyb20oXy50cmltKG91dHB1dCkpO1xuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IFNIQTEgZmluZ2VycHJpbnQgZnJvbSBkZXIgZGF0YSBiZWZvcmVcbiAgICovXG4gIGFzeW5jIGdldEZpbmdlclByaW50ICgpIHtcbiAgICBpZiAodGhpcy5maW5nZXJwcmludCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmluZ2VycHJpbnQ7XG4gICAgfVxuXG4gICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmdldERlckRhdGEoKTtcbiAgICBsZXQgc2hhc3VtID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKTtcbiAgICBzaGFzdW0udXBkYXRlKGRhdGEpO1xuICAgIHRoaXMuZmluZ2VycHJpbnQgPSBzaGFzdW0uZGlnZXN0KCk7XG4gICAgcmV0dXJuIHRoaXMuZmluZ2VycHJpbnQ7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgdGhlIHN1YmplY3QgZnJvbSB0aGUgZGVyIGRhdGFcbiAgICovXG4gIGFzeW5jIGdldFN1YmplY3QgKCkge1xuICAgIGlmICh0aGlzLnN1YmplY3QpIHtcbiAgICAgIHJldHVybiB0aGlzLnN1YmplY3Q7XG4gICAgfVxuXG4gICAgY29uc3Qgc3ViamVjdCA9IGF3YWl0IHRoaXMub3BlbnNzbCgneDUwOScsXG4gICAgICAnLW5vb3V0JywgJy1zdWJqZWN0JyxcbiAgICAgICctaW4nLCB0aGlzLnBlbUZpbGVuYW1lLFxuICAgICk7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE0NjY2XG4gICAgY29uc3QgbWF0Y2ggPSAvXlxccypzdWJqZWN0PS4qXFxiQ05cXGJcXHMqPVxccyooW15cXG5dKykkL20uZXhlYyhzdWJqZWN0KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBsb2cuZGVidWcoc3ViamVjdCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSBjZXJ0aWZpY2F0ZSBzdWJqZWN0IGZyb20gdGhlIG9wZW5zc2wgb3V0cHV0YCk7XG4gICAgfVxuICAgIHRoaXMuc3ViamVjdCA9IG1hdGNoWzFdO1xuICAgIHJldHVybiB0aGlzLnN1YmplY3Q7XG4gIH1cblxufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyByZWNvcmRzIHRvIFRydXN0U3RvcmUuc3FsaXRlMyBkYXRhYmFzZXMgdGhhdCBLZXljaGFpbnMgdXNlXG4gKi9cbmNsYXNzIFRydXN0U3RvcmUge1xuICBjb25zdHJ1Y3RvciAoc2hhcmVkUmVzb3VyY2VEaXIpIHtcbiAgICB0aGlzLnNoYXJlZFJlc291cmNlRGlyID0gc2hhcmVkUmVzb3VyY2VEaXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IFRydXN0U3RvcmUgZGF0YWJhc2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2ltdWxhdG9yXG4gICAqL1xuICBhc3luYyBnZXREQiAoKSB7XG4gICAgaWYgKHRoaXMuZGIpIHtcbiAgICAgIHJldHVybiB0aGlzLmRiO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBzaW0gZG9lc24ndCBoYXZlIGEga2V5Y2hhaW5zIGRpcmVjdG9yeSwgY3JlYXRlIG9uZVxuICAgIGxldCBrZXljaGFpbnNQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuc2hhcmVkUmVzb3VyY2VEaXIsICdMaWJyYXJ5JywgJ0tleWNoYWlucycpO1xuICAgIGlmICghKGF3YWl0IGZzLmV4aXN0cyhrZXljaGFpbnNQYXRoKSkpIHtcbiAgICAgIGF3YWl0IG1rZGlycChrZXljaGFpbnNQYXRoKTtcbiAgICB9XG5cbiAgICAvLyBPcGVuIHNxbGl0ZSBkYXRhYmFzZVxuICAgIHRoaXMuZGIgPSBwYXRoLnJlc29sdmUoa2V5Y2hhaW5zUGF0aCwgJ1RydXN0U3RvcmUuc3FsaXRlMycpO1xuXG4gICAgLy8gSWYgaXQgZG9lc24ndCBoYXZlIGEgdHNldHRpbmdzIHRhYmxlLCBjcmVhdGUgb25lXG4gICAgYXdhaXQgZXhlY1NRTGl0ZVF1ZXJ5KHRoaXMuZGIsIGBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0c2V0dGluZ3MgKHNoYTEgQkxPQiBOT1QgTlVMTCBERUZBVUxUICcnLCBzdWJqIEJMT0IgTk9UIE5VTEwgREVGQVVMVCAnJywgdHNldCBCTE9CLCBkYXRhIEJMT0IsIFBSSU1BUlkgS0VZKHNoYTEpKTtgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlY1NRTGl0ZVF1ZXJ5KHRoaXMuZGIsICdDUkVBVEUgSU5ERVggaXN1YmogT04gdHNldHRpbmdzKHN1YmopOycpO1xuICAgIH0gY2F0Y2ggKGUpIHsgfVxuXG5cbiAgICByZXR1cm4gdGhpcy5kYjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgcmVjb3JkIHRvIHRzZXR0aW5nc1xuICAgKi9cbiAgYXN5bmMgYWRkUmVjb3JkIChzaGExLCB0c2V0LCBzdWJqLCBkYXRhKSB7XG4gICAgbGV0IGRiID0gYXdhaXQgdGhpcy5nZXREQigpO1xuICAgIGlmIChhd2FpdCB0aGlzLmhhc1JlY29yZHMoc3ViaikpIHtcbiAgICAgIHJldHVybiBhd2FpdCBleGVjU1FMaXRlUXVlcnkoZGIsIGBVUERBVEUgdHNldHRpbmdzIFNFVCBzaGExPXgnPycsIHRzZXQ9Jz8nLCBkYXRhPXgnPycgV0hFUkUgc3Viaj0nPydgLCBzaGExLCB0c2V0LCBkYXRhLCBzdWJqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGF3YWl0IGV4ZWNTUUxpdGVRdWVyeShkYiwgYElOU0VSVCBJTlRPIHRzZXR0aW5ncyAoc2hhMSwgc3ViaiwgdHNldCwgZGF0YSkgVkFMVUVTICh4Jz8nLCAnPycsICc/JywgeCc/JylgLCBzaGExLCBzdWJqLCB0c2V0LCBkYXRhKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHJlY29yZCBmcm9tIHRzZXR0aW5ncyB0aGF0IG1hdGNoZXMgdGhlIHN1YmplY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YmpcbiAgICovXG4gIGFzeW5jIHJlbW92ZVJlY29yZCAoc3Viaikge1xuICAgIHJldHVybiBhd2FpdCBleGVjU1FMaXRlUXVlcnkoYXdhaXQgdGhpcy5nZXREQigpLCBgREVMRVRFIEZST00gdHNldHRpbmdzIFdIRVJFIHN1YmogPSAnPydgLCBzdWJqKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSByZWNvcmQgZnJvbSB0c2V0dGluZ3MgdGhhdCBtYXRjaGVzIHRoZSBzdWJqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqXG4gICAqL1xuICBhc3luYyBoYXNSZWNvcmRzIChzdWJqKSB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldFJlY29yZENvdW50KHN1YmopKSA+IDA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvdW50IG9mIGhvdyBtYW55IHJlY29yZHMgaGF2ZSB0aGlzIHN1YmplY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YmpcbiAgICovXG4gIGFzeW5jIGdldFJlY29yZENvdW50IChzdWJqKSB7XG4gICAgbGV0IHJlc3VsdCA9IGF3YWl0IGV4ZWNTUUxpdGVRdWVyeShhd2FpdCB0aGlzLmdldERCKCksIGBTRUxFQ1QgY291bnQoKikgRlJPTSB0c2V0dGluZ3MgV0hFUkUgc3ViaiA9ICc/J2AsIHN1YmopO1xuICAgIHJldHVybiBwYXJzZUludChyZXN1bHQuc3BsaXQoJz0nKVsxXSwgMTApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgU0hBMSBmaW5nZXJwcmludCBmb3IgdGhlIHJlY29yZCB0aGF0IGhhcyB0aGlzIHN1YmplY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YmpcbiAgICovXG4gIGFzeW5jIGdldEZpbmdlclByaW50RnJvbVJlY29yZCAoc3Viaikge1xuICAgIGxldCByZXN1bHQgPSBhd2FpdCBleGVjU1FMaXRlUXVlcnkoYXdhaXQgdGhpcy5nZXREQigpLCBgU0VMRUNUIHNoYTEgRlJPTSB0c2V0dGluZ3MgV0hFUkUgc3Viaj0nPydgLCBzdWJqKTtcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20ocmVzdWx0LnNwbGl0KCc9JylbMV0udHJpbSgpKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2VydGlmaWNhdGU7XG5leHBvcnQgeyBDZXJ0aWZpY2F0ZSwgVHJ1c3RTdG9yZSB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsSUFBSSxHQUFJO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUtULE1BQU1DLFdBQVcsQ0FBQztFQUVoQkMsV0FBVyxDQUFFQyxXQUFXLEVBQUU7SUFDeEIsSUFBSSxDQUFDQSxXQUFXLEdBQUdBLFdBQVc7SUFDOUIsSUFBSSxDQUFDQyxhQUFhLEdBQUcsSUFBSTtJQUN6QixJQUFJLENBQUNDLFdBQVcsR0FBRyxJQUFJO0lBQ3ZCLElBQUksQ0FBQ0MsSUFBSSxHQUFHLElBQUk7SUFDaEIsSUFBSSxDQUFDQyxPQUFPLEdBQUcsSUFBSTtFQUNyQjtFQUVBLE1BQU1DLE9BQU8sQ0FBRSxHQUFHQyxJQUFJLEVBQUU7SUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQ0wsYUFBYSxFQUFFO01BQ3ZCLElBQUk7UUFDRixJQUFJLENBQUNBLGFBQWEsR0FBRyxNQUFNTSxXQUFFLENBQUNDLEtBQUssQ0FBQyxTQUFTLENBQUM7TUFDaEQsQ0FBQyxDQUFDLE9BQU9DLENBQUMsRUFBRTtRQUNWLE1BQU0sSUFBSUMsS0FBSyxDQUFDLHVFQUF1RSxDQUFDO01BQzFGO0lBQ0Y7SUFFQUMsZUFBRyxDQUFDQyxLQUFLLENBQUUsYUFBWSxJQUFJLENBQUNYLGFBQWMsb0JBQW1CSyxJQUFLLEVBQUMsQ0FBQztJQUNwRSxJQUFJTyxNQUFNO0lBQ1YsSUFBSTtNQUNGLE1BQU07UUFBQ0M7TUFBTSxDQUFDLEdBQUcsTUFBTSxJQUFBQyxrQkFBSSxFQUFDLElBQUksQ0FBQ2QsYUFBYSxFQUFFSyxJQUFJLENBQUM7TUFDckRPLE1BQU0sR0FBR0MsTUFBTTtJQUNqQixDQUFDLENBQUMsT0FBT0wsQ0FBQyxFQUFFO01BQ1YsSUFBSUEsQ0FBQyxDQUFDTyxNQUFNLEVBQUU7UUFDWixNQUFNLElBQUlOLEtBQUssQ0FBQ0QsQ0FBQyxDQUFDTyxNQUFNLENBQUM7TUFDM0I7TUFDQSxNQUFNUCxDQUFDO0lBQ1Q7SUFDQSxPQUFPSSxNQUFNO0VBQ2Y7RUFLQSxNQUFNSSxHQUFHLENBQUVDLEdBQUcsRUFBRTtJQUNkLElBQUlmLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDZ0IsVUFBVSxDQUFDLElBQUksQ0FBQ25CLFdBQVcsQ0FBQyxFQUFFb0IsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUNwRSxJQUFJaEIsT0FBTyxHQUFJLE1BQU0sSUFBSSxDQUFDaUIsVUFBVSxDQUFDLElBQUksQ0FBQ3JCLFdBQVcsQ0FBRTtJQUN2RCxJQUFJc0IsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUNDLGNBQWMsQ0FBQyxJQUFJLENBQUNwQixJQUFJLENBQUMsRUFBRWlCLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFFakUsSUFBSUksVUFBVSxHQUFHLElBQUlDLFVBQVUsQ0FBQ1AsR0FBRyxDQUFDO0lBQ3BDLE9BQU8sTUFBTU0sVUFBVSxDQUFDRSxTQUFTLENBQUNKLElBQUksRUFBRXpCLElBQUksRUFBRU8sT0FBTyxFQUFFRCxJQUFJLENBQUM7RUFDOUQ7RUFLQSxNQUFNd0IsR0FBRyxDQUFFVCxHQUFHLEVBQUU7SUFDZCxJQUFJZCxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUNpQixVQUFVLENBQUMsSUFBSSxDQUFDckIsV0FBVyxDQUFDO0lBQ3JELElBQUl3QixVQUFVLEdBQUcsSUFBSUMsVUFBVSxDQUFDUCxHQUFHLENBQUM7SUFHcEMsSUFBSSxFQUFDLE1BQU1NLFVBQVUsQ0FBQ0ksVUFBVSxDQUFDeEIsT0FBTyxDQUFDLEdBQUU7TUFDekMsT0FBTyxLQUFLO0lBQ2Q7SUFHQSxJQUFJeUIsbUJBQW1CLEdBQUcsTUFBTUwsVUFBVSxDQUFDTSx3QkFBd0IsQ0FBQzFCLE9BQU8sQ0FBQztJQUM1RSxJQUFJMkIsa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUNSLGNBQWMsRUFBRTtJQUNwRCxPQUFPTSxtQkFBbUIsQ0FBQ1QsUUFBUSxFQUFFLEtBQUtXLGtCQUFrQixDQUFDWCxRQUFRLEVBQUU7RUFDekU7RUFLQSxNQUFNWSxNQUFNLENBQUVkLEdBQUcsRUFBRTtJQUNqQixJQUFJZCxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUNpQixVQUFVLENBQUMsSUFBSSxDQUFDckIsV0FBVyxDQUFDO0lBQ3JELElBQUl3QixVQUFVLEdBQUcsSUFBSUMsVUFBVSxDQUFDUCxHQUFHLENBQUM7SUFDcEMsT0FBTyxNQUFNTSxVQUFVLENBQUNTLFlBQVksQ0FBQzdCLE9BQU8sQ0FBQztFQUMvQztFQUtBLE1BQU1lLFVBQVUsR0FBSTtJQUNsQixJQUFJLElBQUksQ0FBQ2hCLElBQUksRUFBRTtNQUNiLE9BQU8sSUFBSSxDQUFDQSxJQUFJO0lBQ2xCO0lBR0EsTUFBTStCLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQzdCLE9BQU8sQ0FBQyxNQUFNLEVBQ3RDLFVBQVUsRUFBRSxLQUFLLEVBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUNMLFdBQVcsQ0FDeEI7SUFDRCxJQUFJLENBQUNHLElBQUksR0FBR2dDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDQyxlQUFDLENBQUNDLElBQUksQ0FBQ0osTUFBTSxDQUFDLENBQUM7SUFDdkMsT0FBTyxJQUFJLENBQUMvQixJQUFJO0VBQ2xCO0VBS0EsTUFBTW9CLGNBQWMsR0FBSTtJQUN0QixJQUFJLElBQUksQ0FBQ3JCLFdBQVcsRUFBRTtNQUNwQixPQUFPLElBQUksQ0FBQ0EsV0FBVztJQUN6QjtJQUVBLElBQUlDLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQ2dCLFVBQVUsRUFBRTtJQUNsQyxJQUFJb0IsTUFBTSxHQUFHQyxlQUFNLENBQUNDLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDdENGLE1BQU0sQ0FBQ0csTUFBTSxDQUFDdkMsSUFBSSxDQUFDO0lBQ25CLElBQUksQ0FBQ0QsV0FBVyxHQUFHcUMsTUFBTSxDQUFDSSxNQUFNLEVBQUU7SUFDbEMsT0FBTyxJQUFJLENBQUN6QyxXQUFXO0VBQ3pCO0VBS0EsTUFBTW1CLFVBQVUsR0FBSTtJQUNsQixJQUFJLElBQUksQ0FBQ2pCLE9BQU8sRUFBRTtNQUNoQixPQUFPLElBQUksQ0FBQ0EsT0FBTztJQUNyQjtJQUVBLE1BQU1BLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQ0MsT0FBTyxDQUFDLE1BQU0sRUFDdkMsUUFBUSxFQUFFLFVBQVUsRUFDcEIsS0FBSyxFQUFFLElBQUksQ0FBQ0wsV0FBVyxDQUN4QjtJQUVELE1BQU00QyxLQUFLLEdBQUcsdUNBQXVDLENBQUM3QixJQUFJLENBQUNYLE9BQU8sQ0FBQztJQUNuRSxJQUFJLENBQUN3QyxLQUFLLEVBQUU7TUFDVmpDLGVBQUcsQ0FBQ0MsS0FBSyxDQUFDUixPQUFPLENBQUM7TUFDbEIsTUFBTSxJQUFJTSxLQUFLLENBQUUsMERBQXlELENBQUM7SUFDN0U7SUFDQSxJQUFJLENBQUNOLE9BQU8sR0FBR3dDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdkIsT0FBTyxJQUFJLENBQUN4QyxPQUFPO0VBQ3JCO0FBRUY7QUFBQztBQUtELE1BQU1xQixVQUFVLENBQUM7RUFDZjFCLFdBQVcsQ0FBRThDLGlCQUFpQixFQUFFO0lBQzlCLElBQUksQ0FBQ0EsaUJBQWlCLEdBQUdBLGlCQUFpQjtFQUM1QztFQUtBLE1BQU1DLEtBQUssR0FBSTtJQUNiLElBQUksSUFBSSxDQUFDQyxFQUFFLEVBQUU7TUFDWCxPQUFPLElBQUksQ0FBQ0EsRUFBRTtJQUNoQjtJQUdBLElBQUlDLGFBQWEsR0FBR0MsYUFBSSxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDTCxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDO0lBQ2hGLElBQUksRUFBRSxNQUFNdEMsV0FBRSxDQUFDNEMsTUFBTSxDQUFDSCxhQUFhLENBQUMsQ0FBQyxFQUFFO01BQ3JDLE1BQU0sSUFBQUksZUFBTSxFQUFDSixhQUFhLENBQUM7SUFDN0I7SUFHQSxJQUFJLENBQUNELEVBQUUsR0FBR0UsYUFBSSxDQUFDQyxPQUFPLENBQUNGLGFBQWEsRUFBRSxvQkFBb0IsQ0FBQztJQUczRCxNQUFNLElBQUFLLHNCQUFlLEVBQUMsSUFBSSxDQUFDTixFQUFFLEVBQUcsK0lBQThJLENBQUM7SUFDL0ssSUFBSTtNQUNGLE1BQU0sSUFBQU0sc0JBQWUsRUFBQyxJQUFJLENBQUNOLEVBQUUsRUFBRSx3Q0FBd0MsQ0FBQztJQUMxRSxDQUFDLENBQUMsT0FBT3RDLENBQUMsRUFBRSxDQUFFO0lBR2QsT0FBTyxJQUFJLENBQUNzQyxFQUFFO0VBQ2hCO0VBS0EsTUFBTXJCLFNBQVMsQ0FBRUosSUFBSSxFQUFFekIsSUFBSSxFQUFFeUQsSUFBSSxFQUFFbkQsSUFBSSxFQUFFO0lBQ3ZDLElBQUk0QyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUNELEtBQUssRUFBRTtJQUMzQixJQUFJLE1BQU0sSUFBSSxDQUFDbEIsVUFBVSxDQUFDMEIsSUFBSSxDQUFDLEVBQUU7TUFDL0IsT0FBTyxNQUFNLElBQUFELHNCQUFlLEVBQUNOLEVBQUUsRUFBRyxvRUFBbUUsRUFBRXpCLElBQUksRUFBRXpCLElBQUksRUFBRU0sSUFBSSxFQUFFbUQsSUFBSSxDQUFDO0lBQ2hJLENBQUMsTUFBTTtNQUNMLE9BQU8sTUFBTSxJQUFBRCxzQkFBZSxFQUFDTixFQUFFLEVBQUcsOEVBQTZFLEVBQUV6QixJQUFJLEVBQUVnQyxJQUFJLEVBQUV6RCxJQUFJLEVBQUVNLElBQUksQ0FBQztJQUMxSTtFQUNGO0VBTUEsTUFBTThCLFlBQVksQ0FBRXFCLElBQUksRUFBRTtJQUN4QixPQUFPLE1BQU0sSUFBQUQsc0JBQWUsRUFBQyxNQUFNLElBQUksQ0FBQ1AsS0FBSyxFQUFFLEVBQUcsd0NBQXVDLEVBQUVRLElBQUksQ0FBQztFQUNsRztFQU1BLE1BQU0xQixVQUFVLENBQUUwQixJQUFJLEVBQUU7SUFDdEIsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDQyxjQUFjLENBQUNELElBQUksQ0FBQyxJQUFJLENBQUM7RUFDOUM7RUFNQSxNQUFNQyxjQUFjLENBQUVELElBQUksRUFBRTtJQUMxQixJQUFJekMsTUFBTSxHQUFHLE1BQU0sSUFBQXdDLHNCQUFlLEVBQUMsTUFBTSxJQUFJLENBQUNQLEtBQUssRUFBRSxFQUFHLGlEQUFnRCxFQUFFUSxJQUFJLENBQUM7SUFDL0csT0FBT0UsUUFBUSxDQUFDM0MsTUFBTSxDQUFDNEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUMzQztFQU1BLE1BQU0zQix3QkFBd0IsQ0FBRXdCLElBQUksRUFBRTtJQUNwQyxJQUFJekMsTUFBTSxHQUFHLE1BQU0sSUFBQXdDLHNCQUFlLEVBQUMsTUFBTSxJQUFJLENBQUNQLEtBQUssRUFBRSxFQUFHLDJDQUEwQyxFQUFFUSxJQUFJLENBQUM7SUFDekcsSUFBSXpDLE1BQU0sRUFBRTtNQUNWLE9BQU9zQixNQUFNLENBQUNDLElBQUksQ0FBQ3ZCLE1BQU0sQ0FBQzRDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ25CLElBQUksRUFBRSxDQUFDO0lBQ2pEO0VBQ0Y7QUFDRjtBQUFDO0FBQUEsZUFFY3hDLFdBQVc7QUFBQSJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"certificate.js","names":["tset","Certificate","constructor","pemFilename","opensslBinary","fingerprint","data","subject","openssl","args","fs","which","e","Error","log","debug","result","stdout","exec","stderr","add","dir","getDerData","toString","getSubject","sha1","getFingerPrint","trustStore","TrustStore","addRecord","has","hasRecords","previousFingerprint","getFingerPrintFromRecord","currentFingerprint","remove","removeRecord","output","Buffer","from","_","trim","shasum","crypto","createHash","update","digest","match","sharedResourceDir","getDB","db","keychainsPath","path","resolve","exists","mkdirp","execSQLiteQuery","subj","getRecordCount","parseInt","split"],"sources":["../../lib/certificate.js"],"sourcesContent":["import crypto from 'crypto';\nimport { exec } from 'teen_process';\nimport path from 'path';\nimport { fs, mkdirp } from '@appium/support';\nimport { execSQLiteQuery } from './utils';\nimport log from './logger';\nimport _ from 'lodash';\n\nconst tset = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n\n <!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n <plist version=\"1.0\">\n <array/>\n</plist>`;\n\n/**\n * Library for programatically adding certificates\n */\nclass Certificate {\n\n constructor (pemFilename) {\n this.pemFilename = pemFilename;\n this.opensslBinary = null;\n this.fingerprint = null;\n this.data = null;\n this.subject = null;\n }\n\n async openssl (...args) {\n if (!this.opensslBinary) {\n try {\n this.opensslBinary = await fs.which('openssl');\n } catch (e) {\n throw new Error('openssl executable cannot be found in PATH. Make sure it is installed');\n }\n }\n\n log.debug(`Executing ${this.opensslBinary} with arguments: ${args}`);\n let result;\n try {\n const {stdout} = await exec(this.opensslBinary, args);\n result = stdout;\n } catch (e) {\n if (e.stderr) {\n throw new Error(e.stderr);\n }\n throw e;\n }\n return result;\n }\n\n /**\n * Add a certificate to the TrustStore\n */\n async add (dir) {\n let data = (await this.getDerData(this.pemFilename)).toString('hex');\n let subject = (await this.getSubject(this.pemFilename));\n let sha1 = (await this.getFingerPrint(this.data)).toString('hex');\n\n let trustStore = new TrustStore(dir);\n return await trustStore.addRecord(sha1, tset, subject, data);\n }\n\n /**\n * Checks if keychain at given directory has this certificate\n */\n async has (dir) {\n let subject = await this.getSubject(this.pemFilename);\n let trustStore = new TrustStore(dir);\n\n // Return false if record with this subject is not found\n if (!await trustStore.hasRecords(subject)) {\n return false;\n }\n\n // If record is found, check fingerprints to verify that they didn't change\n let previousFingerprint = await trustStore.getFingerPrintFromRecord(subject);\n let currentFingerprint = await this.getFingerPrint();\n return previousFingerprint.toString() === currentFingerprint.toString();\n }\n\n /**\n * Remove certificate from the TrustStore\n */\n async remove (dir) {\n let subject = await this.getSubject(this.pemFilename);\n let trustStore = new TrustStore(dir);\n return await trustStore.removeRecord(subject);\n }\n\n /**\n * Translate PEM file to DER buffer\n */\n async getDerData () {\n if (this.data) {\n return this.data;\n }\n\n // Convert 'pem' file to 'der'\n const output = await this.openssl('x509',\n '-outform', 'der',\n '-in', this.pemFilename\n );\n this.data = Buffer.from(_.trim(output));\n return this.data;\n }\n\n /**\n * Get SHA1 fingerprint from der data before\n */\n async getFingerPrint () {\n if (this.fingerprint) {\n return this.fingerprint;\n }\n\n let data = await this.getDerData();\n let shasum = crypto.createHash('sha1');\n shasum.update(data);\n this.fingerprint = shasum.digest();\n return this.fingerprint;\n }\n\n /**\n * Parse the subject from the der data\n */\n async getSubject () {\n if (this.subject) {\n return this.subject;\n }\n\n const subject = await this.openssl('x509',\n '-noout', '-subject',\n '-in', this.pemFilename,\n );\n // https://github.com/appium/appium/issues/14666\n const match = /^\\s*subject=.*\\bCN\\b\\s*=\\s*([^\\n]+)$/m.exec(subject);\n if (!match) {\n log.debug(subject);\n throw new Error(`Cannot parse certificate subject from the openssl output`);\n }\n this.subject = match[1];\n return this.subject;\n }\n\n}\n\n/**\n * Interface for adding and removing records to TrustStore.sqlite3 databases that Keychains use\n */\nclass TrustStore {\n constructor (sharedResourceDir) {\n this.sharedResourceDir = sharedResourceDir;\n }\n\n /**\n * Get TrustStore database associated with this simulator\n */\n async getDB () {\n if (this.db) {\n return this.db;\n }\n\n // If the sim doesn't have a keychains directory, create one\n let keychainsPath = path.resolve(this.sharedResourceDir, 'Library', 'Keychains');\n if (!(await fs.exists(keychainsPath))) {\n await mkdirp(keychainsPath);\n }\n\n // Open sqlite database\n this.db = path.resolve(keychainsPath, 'TrustStore.sqlite3');\n\n // If it doesn't have a tsettings table, create one\n await execSQLiteQuery(this.db, `CREATE TABLE IF NOT EXISTS tsettings (sha1 BLOB NOT NULL DEFAULT '', subj BLOB NOT NULL DEFAULT '', tset BLOB, data BLOB, PRIMARY KEY(sha1));`);\n try {\n await execSQLiteQuery(this.db, 'CREATE INDEX isubj ON tsettings(subj);');\n } catch (e) { }\n\n\n return this.db;\n }\n\n /**\n * Add record to tsettings\n */\n async addRecord (sha1, tset, subj, data) {\n let db = await this.getDB();\n if (await this.hasRecords(subj)) {\n return await execSQLiteQuery(db, `UPDATE tsettings SET sha1=x'?', tset='?', data=x'?' WHERE subj='?'`, sha1, tset, data, subj);\n } else {\n return await execSQLiteQuery(db, `INSERT INTO tsettings (sha1, subj, tset, data) VALUES (x'?', '?', '?', x'?')`, sha1, subj, tset, data);\n }\n }\n\n /**\n * Remove record from tsettings that matches the subject\n * @param {string} subj\n */\n async removeRecord (subj) {\n return await execSQLiteQuery(await this.getDB(), `DELETE FROM tsettings WHERE subj = '?'`, subj);\n }\n\n /**\n * Get a record from tsettings that matches the subj\n * @param {string} subj\n */\n async hasRecords (subj) {\n return (await this.getRecordCount(subj)) > 0;\n }\n\n /**\n * Get count of how many records have this subject\n * @param {string} subj\n */\n async getRecordCount (subj) {\n let result = await execSQLiteQuery(await this.getDB(), `SELECT count(*) FROM tsettings WHERE subj = '?'`, subj);\n return parseInt(result.split('=')[1], 10);\n }\n\n /**\n * Get the SHA1 fingerprint for the record that has this subject\n * @param {string} subj\n */\n async getFingerPrintFromRecord (subj) {\n let result = await execSQLiteQuery(await this.getDB(), `SELECT sha1 FROM tsettings WHERE subj='?'`, subj);\n if (result) {\n return Buffer.from(result.split('=')[1].trim());\n }\n }\n}\n\nexport default Certificate;\nexport { Certificate, TrustStore };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"certificate.js","names":["tset","Certificate","constructor","pemFilename","opensslBinary","fingerprint","data","subject","openssl","args","fs","which","e","Error","log","debug","result","stdout","exec","stderr","add","dir","getDerData","toString","getSubject","sha1","getFingerPrint","trustStore","TrustStore","addRecord","has","hasRecords","previousFingerprint","getFingerPrintFromRecord","currentFingerprint","remove","removeRecord","output","Buffer","from","_","trim","shasum","crypto","createHash","update","digest","match","sharedResourceDir","getDB","db","keychainsPath","path","resolve","exists","mkdirp","execSQLiteQuery","subj","getRecordCount","parseInt","split"],"sources":["../../lib/certificate.js"],"sourcesContent":["import crypto from 'crypto';\nimport { exec } from 'teen_process';\nimport path from 'path';\nimport { fs, mkdirp } from '@appium/support';\nimport { execSQLiteQuery } from './utils';\nimport log from './logger';\nimport _ from 'lodash';\n\nconst tset = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n\n <!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n <plist version=\"1.0\">\n <array/>\n</plist>`;\n\n/**\n * Library for programatically adding certificates\n */\nclass Certificate {\n\n constructor (pemFilename) {\n this.pemFilename = pemFilename;\n this.opensslBinary = null;\n this.fingerprint = null;\n this.data = null;\n this.subject = null;\n }\n\n async openssl (...args) {\n if (!this.opensslBinary) {\n try {\n this.opensslBinary = await fs.which('openssl');\n } catch (e) {\n throw new Error('openssl executable cannot be found in PATH. Make sure it is installed');\n }\n }\n\n log.debug(`Executing ${this.opensslBinary} with arguments: ${args}`);\n let result;\n try {\n const {stdout} = await exec(this.opensslBinary, args);\n result = stdout;\n } catch (e) {\n if (e.stderr) {\n throw new Error(e.stderr);\n }\n throw e;\n }\n return result;\n }\n\n /**\n * Add a certificate to the TrustStore\n */\n async add (dir) {\n let data = (await this.getDerData(this.pemFilename)).toString('hex');\n let subject = (await this.getSubject(this.pemFilename));\n let sha1 = (await this.getFingerPrint(this.data)).toString('hex');\n\n let trustStore = new TrustStore(dir);\n return await trustStore.addRecord(sha1, tset, subject, data);\n }\n\n /**\n * Checks if keychain at given directory has this certificate\n */\n async has (dir) {\n let subject = await this.getSubject(this.pemFilename);\n let trustStore = new TrustStore(dir);\n\n // Return false if record with this subject is not found\n if (!await trustStore.hasRecords(subject)) {\n return false;\n }\n\n // If record is found, check fingerprints to verify that they didn't change\n let previousFingerprint = await trustStore.getFingerPrintFromRecord(subject);\n let currentFingerprint = await this.getFingerPrint();\n return previousFingerprint.toString() === currentFingerprint.toString();\n }\n\n /**\n * Remove certificate from the TrustStore\n */\n async remove (dir) {\n let subject = await this.getSubject(this.pemFilename);\n let trustStore = new TrustStore(dir);\n return await trustStore.removeRecord(subject);\n }\n\n /**\n * Translate PEM file to DER buffer\n */\n async getDerData () {\n if (this.data) {\n return this.data;\n }\n\n // Convert 'pem' file to 'der'\n const output = await this.openssl('x509',\n '-outform', 'der',\n '-in', this.pemFilename\n );\n this.data = Buffer.from(_.trim(output));\n return this.data;\n }\n\n /**\n * Get SHA1 fingerprint from der data before\n */\n async getFingerPrint () {\n if (this.fingerprint) {\n return this.fingerprint;\n }\n\n let data = await this.getDerData();\n let shasum = crypto.createHash('sha1');\n shasum.update(data);\n this.fingerprint = shasum.digest();\n return this.fingerprint;\n }\n\n /**\n * Parse the subject from the der data\n */\n async getSubject () {\n if (this.subject) {\n return this.subject;\n }\n\n const subject = await this.openssl('x509',\n '-noout', '-subject',\n '-in', this.pemFilename,\n );\n // https://github.com/appium/appium/issues/14666\n const match = /^\\s*subject=.*\\bCN\\b\\s*=\\s*([^\\n]+)$/m.exec(subject);\n if (!match) {\n log.debug(subject);\n throw new Error(`Cannot parse certificate subject from the openssl output`);\n }\n this.subject = match[1];\n return this.subject;\n }\n\n}\n\n/**\n * Interface for adding and removing records to TrustStore.sqlite3 databases that Keychains use\n */\nclass TrustStore {\n constructor (sharedResourceDir) {\n this.sharedResourceDir = sharedResourceDir;\n }\n\n /**\n * Get TrustStore database associated with this simulator\n */\n async getDB () {\n if (this.db) {\n return this.db;\n }\n\n // If the sim doesn't have a keychains directory, create one\n let keychainsPath = path.resolve(this.sharedResourceDir, 'Library', 'Keychains');\n if (!(await fs.exists(keychainsPath))) {\n await mkdirp(keychainsPath);\n }\n\n // Open sqlite database\n this.db = path.resolve(keychainsPath, 'TrustStore.sqlite3');\n\n // If it doesn't have a tsettings table, create one\n await execSQLiteQuery(this.db, `CREATE TABLE IF NOT EXISTS tsettings (sha1 BLOB NOT NULL DEFAULT '', subj BLOB NOT NULL DEFAULT '', tset BLOB, data BLOB, PRIMARY KEY(sha1));`);\n try {\n await execSQLiteQuery(this.db, 'CREATE INDEX isubj ON tsettings(subj);');\n } catch (e) { }\n\n\n return this.db;\n }\n\n /**\n * Add record to tsettings\n */\n async addRecord (sha1, tset, subj, data) {\n let db = await this.getDB();\n if (await this.hasRecords(subj)) {\n return await execSQLiteQuery(db, `UPDATE tsettings SET sha1=x'?', tset='?', data=x'?' WHERE subj='?'`, sha1, tset, data, subj);\n } else {\n return await execSQLiteQuery(db, `INSERT INTO tsettings (sha1, subj, tset, data) VALUES (x'?', '?', '?', x'?')`, sha1, subj, tset, data);\n }\n }\n\n /**\n * Remove record from tsettings that matches the subject\n * @param {string} subj\n */\n async removeRecord (subj) {\n return await execSQLiteQuery(await this.getDB(), `DELETE FROM tsettings WHERE subj = '?'`, subj);\n }\n\n /**\n * Get a record from tsettings that matches the subj\n * @param {string} subj\n */\n async hasRecords (subj) {\n return (await this.getRecordCount(subj)) > 0;\n }\n\n /**\n * Get count of how many records have this subject\n * @param {string} subj\n */\n async getRecordCount (subj) {\n let result = await execSQLiteQuery(await this.getDB(), `SELECT count(*) FROM tsettings WHERE subj = '?'`, subj);\n return parseInt(result.split('=')[1], 10);\n }\n\n /**\n * Get the SHA1 fingerprint for the record that has this subject\n * @param {string} subj\n */\n async getFingerPrintFromRecord (subj) {\n let result = await execSQLiteQuery(await this.getDB(), `SELECT sha1 FROM tsettings WHERE subj='?'`, subj);\n if (result) {\n return Buffer.from(result.split('=')[1].trim());\n }\n }\n}\n\nexport default Certificate;\nexport { Certificate, TrustStore };\n"],"mappings":"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"}
|
|
@@ -47,7 +47,6 @@ function toXmlArg(value, serialize = true) {
|
|
|
47
47
|
}
|
|
48
48
|
return serialize ? new _xmldom.XMLSerializer().serializeToString(xmlDoc.documentElement) : xmlDoc.documentElement;
|
|
49
49
|
}
|
|
50
|
-
|
|
51
50
|
function generateDefaultsCommandArgs(valuesMap, replace = false) {
|
|
52
51
|
const resultArgs = [];
|
|
53
52
|
for (const [key, value] of _lodash.default.toPairs(valuesMap)) {
|
|
@@ -81,7 +80,6 @@ class NSUserDefaults {
|
|
|
81
80
|
constructor(plist) {
|
|
82
81
|
this.plist = plist;
|
|
83
82
|
}
|
|
84
|
-
|
|
85
83
|
async asJson() {
|
|
86
84
|
try {
|
|
87
85
|
const {
|
|
@@ -92,7 +90,6 @@ class NSUserDefaults {
|
|
|
92
90
|
throw new Error(`'${this.plist}' cannot be converted to JSON. Original error: ${e.stderr || e.message}`);
|
|
93
91
|
}
|
|
94
92
|
}
|
|
95
|
-
|
|
96
93
|
async update(valuesMap) {
|
|
97
94
|
if (!_lodash.default.isPlainObject(valuesMap)) {
|
|
98
95
|
throw new TypeError(`plist values must be a map. '${valuesMap}' is given instead`);
|
|
@@ -109,4 +106,4 @@ class NSUserDefaults {
|
|
|
109
106
|
}
|
|
110
107
|
}
|
|
111
108
|
exports.NSUserDefaults = NSUserDefaults;
|
|
112
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0b1htbEFyZyIsInZhbHVlIiwic2VyaWFsaXplIiwieG1sRG9jIiwiXyIsImlzUGxhaW5PYmplY3QiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJzdWJLZXkiLCJzdWJWYWx1ZSIsInRvUGFpcnMiLCJrZXlFbCIsImNyZWF0ZUVsZW1lbnQiLCJrZXlUZXh0RWwiLCJjcmVhdGVUZXh0Tm9kZSIsImFwcGVuZENoaWxkIiwiZG9jdW1lbnRFbGVtZW50Iiwic3ViVmFsdWVFbCIsImltcG9ydE5vZGUiLCJpc0FycmF5IiwiaXNCb29sZWFuIiwiaXNJbnRlZ2VyIiwiaXNOdW1iZXIiLCJpc1N0cmluZyIsInZhbHVlVGV4dEVsIiwiVHlwZUVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsIlhNTFNlcmlhbGl6ZXIiLCJzZXJpYWxpemVUb1N0cmluZyIsImdlbmVyYXRlRGVmYXVsdHNDb21tYW5kQXJncyIsInZhbHVlc01hcCIsInJlcGxhY2UiLCJyZXN1bHRBcmdzIiwia2V5IiwiZGljdEFyZ3MiLCJwdXNoIiwiYXJyYXlBcmdzIiwiZSIsImxvZyIsIndhcm4iLCJtZXNzYWdlIiwiTlNVc2VyRGVmYXVsdHMiLCJjb25zdHJ1Y3RvciIsInBsaXN0IiwiYXNKc29uIiwic3Rkb3V0IiwiZXhlYyIsInBhcnNlIiwiRXJyb3IiLCJzdGRlcnIiLCJ1cGRhdGUiLCJpc0VtcHR5IiwiY29tbWFuZEFyZ3MiLCJCIiwiYWxsIiwibWFwIiwiYXJncyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9kZWZhdWx0cy11dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRE9NUGFyc2VyLCBYTUxTZXJpYWxpemVyIH0gZnJvbSAnQHhtbGRvbS94bWxkb20nO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiB2YWx1ZSB0byBwbGlzdC1jb21wYXRpYmxlXG4gKiBYTUwgcmVwcmVzZW50YXRpb24sIHdoaWNoIGlzIHJlYWR5IGZvciBmdXJ0aGVyIHVzYWdlXG4gKiB3aXRoIGBkZWZhdWx0c2AgY29tbWFuZCBsaW5lIHRvb2wgYXJndW1lbnRzXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgc2VyaWFsaXplZFxuICogQHBhcmFtIHtib29sZWFufSBzZXJpYWxpemUgW3RydWVdIFdoZXRoZXIgdG8gc2VyaWFsaXplIHRoZSByZXN1bHRpbmdcbiAqIFhNTCB0byBzdHJpbmcgb3IgdG8gcmV0dXJuIHJhdyBIVE1MRWxlbWVudCBpbnN0YW5jZVxuICogQHJldHVybnMge0hUTUxFbGVtZW50fHN0cmluZ30gRWl0aGVyIHN0cmluZyBvciByYXcgbm9kZSByZXByZXNlbnRhdGlvbiBvZlxuICogdGhlIGdpdmVuIHZhbHVlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGl0IGlzIG5vdCBrbm93biBob3cgdG8gc2VyaWFsaXplIHRoZSBnaXZlbiB2YWx1ZVxuICovXG5mdW5jdGlvbiB0b1htbEFyZyAodmFsdWUsIHNlcmlhbGl6ZSA9IHRydWUpIHtcbiAgbGV0IHhtbERvYyA9IG51bGw7XG5cbiAgaWYgKF8uaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICB4bWxEb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKCc8ZGljdD48L2RpY3Q+JywgJ3RleHQveG1sJyk7XG4gICAgZm9yIChjb25zdCBbc3ViS2V5LCBzdWJWYWx1ZV0gb2YgXy50b1BhaXJzKHZhbHVlKSkge1xuICAgICAgY29uc3Qga2V5RWwgPSB4bWxEb2MuY3JlYXRlRWxlbWVudCgna2V5Jyk7XG4gICAgICBjb25zdCBrZXlUZXh0RWwgPSB4bWxEb2MuY3JlYXRlVGV4dE5vZGUoc3ViS2V5KTtcbiAgICAgIGtleUVsLmFwcGVuZENoaWxkKGtleVRleHRFbCk7XG4gICAgICB4bWxEb2MuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGtleUVsKTtcbiAgICAgIGNvbnN0IHN1YlZhbHVlRWwgPSB4bWxEb2MuaW1wb3J0Tm9kZSh0b1htbEFyZyhzdWJWYWx1ZSwgZmFsc2UpLCB0cnVlKTtcbiAgICAgIHhtbERvYy5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoc3ViVmFsdWVFbCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKF8uaXNBcnJheSh2YWx1ZSkpIHtcbiAgICB4bWxEb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKCc8YXJyYXk+PC9hcnJheT4nLCAndGV4dC94bWwnKTtcbiAgICBmb3IgKGNvbnN0IHN1YlZhbHVlIG9mIHZhbHVlKSB7XG4gICAgICBjb25zdCBzdWJWYWx1ZUVsID0geG1sRG9jLmltcG9ydE5vZGUodG9YbWxBcmcoc3ViVmFsdWUsIGZhbHNlKSwgdHJ1ZSk7XG4gICAgICB4bWxEb2MuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHN1YlZhbHVlRWwpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChfLmlzQm9vbGVhbih2YWx1ZSkpIHtcbiAgICB4bWxEb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHZhbHVlID8gJzx0cnVlLz4nIDogJzxmYWxzZS8+JywgJ3RleHQveG1sJyk7XG4gIH0gZWxzZSBpZiAoXy5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgeG1sRG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhgPGludGVnZXI+JHt2YWx1ZX08L2ludGVnZXI+YCwgJ3RleHQveG1sJyk7XG4gIH0gZWxzZSBpZiAoXy5pc051bWJlcih2YWx1ZSkpIHtcbiAgICB4bWxEb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGA8cmVhbD4ke3ZhbHVlfTwvcmVhbD5gLCAndGV4dC94bWwnKTtcbiAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHhtbERvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoYDxzdHJpbmc+PC9zdHJpbmc+YCwgJ3RleHQveG1sJyk7XG4gICAgY29uc3QgdmFsdWVUZXh0RWwgPSB4bWxEb2MuY3JlYXRlVGV4dE5vZGUodmFsdWUpO1xuICAgIHhtbERvYy5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodmFsdWVUZXh0RWwpO1xuICB9XG5cbiAgaWYgKCF4bWxEb2MpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBUaGUgZGVmYXVsdHMgdmFsdWUgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9IGNhbm5vdCBiZSB3cml0dGVuLCBgICtcbiAgICAgIGBiZWNhdXNlIGl0IGlzIG5vdCBrbm93biBob3cgdG8gaGFuZGxlIGl0cyB0eXBlYCk7XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplXG4gICAgPyBuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKHhtbERvYy5kb2N1bWVudEVsZW1lbnQpXG4gICAgOiB4bWxEb2MuZG9jdW1lbnRFbGVtZW50O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBjb21tYW5kIGxpbmUgYXJncyBmb3IgdGhlIGBkZWZhdWx0c2BcbiAqIGNvbW1hbmQgbGluZSB1dGlsaXR5IGJhc2VkIG9uIHRoZSBnaXZlbiBwcmVmZXJlbmNlIHZhbHVlcyBtYXBwaW5nLlxuICogU2VlIGh0dHBzOi8vc2hhZG93ZmlsZS5pbm9kZS5saW5rL2Jsb2cvMjAxOC8wNi9hZHZhbmNlZC1kZWZhdWx0czEtdXNhZ2UvXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXNNYXAgUHJlZmVyZW5jZXMgbWFwcGluZ1xuICogQHBhcmFtIHtCb29sZWFufSByZXBsYWNlIFtmYWxzZV0gV2hldGhlciB0byBnZW5lcmF0ZSBhcmd1bWVudHMgdGhhdCByZXBsYWNlXG4gKiBjb21wbGV4IHR5cGVkIHZhbHVlcyBsaWtlIGFycmF5cyBvciBkaWN0aW9uYXJpZXMgaW4gdGhlIGN1cnJlbnQgcGxpc3Qgb3JcbiAqIHVwZGF0ZSB0aGVtICh0aGUgZGVmYXVsdCBzZXR0aW5ncylcbiAqIEByZXR1cm5zIHtBcnJheTxBcnJheTxzdHJpbmc+Pn0gRWFjaCBpdGVtIGluIHRoZSBhcnJheVxuICogaXMgdGhlIGBkZWZhdWx0cyB3cml0ZSA8cGxpc3Q+YCBjb21tYW5kIHN1ZmZpeFxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZURlZmF1bHRzQ29tbWFuZEFyZ3MgKHZhbHVlc01hcCwgcmVwbGFjZSA9IGZhbHNlKSB7XG4gIGNvbnN0IHJlc3VsdEFyZ3MgPSBbXTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKHZhbHVlc01hcCkpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFyZXBsYWNlICYmIF8uaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgZGljdEFyZ3MgPSBba2V5LCAnLWRpY3QtYWRkJ107XG4gICAgICAgIGZvciAoY29uc3QgW3N1YktleSwgc3ViVmFsdWVdIG9mIF8udG9QYWlycyh2YWx1ZSkpIHtcbiAgICAgICAgICBkaWN0QXJncy5wdXNoKHN1YktleSwgdG9YbWxBcmcoc3ViVmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHRBcmdzLnB1c2goZGljdEFyZ3MpO1xuICAgICAgfSBlbHNlIGlmICghcmVwbGFjZSAmJiBfLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGFycmF5QXJncyA9IFtrZXksICctYXJyYXktYWRkJ107XG4gICAgICAgIGZvciAoY29uc3Qgc3ViVmFsdWUgb2YgdmFsdWUpIHtcbiAgICAgICAgICBhcnJheUFyZ3MucHVzaCh0b1htbEFyZyhzdWJWYWx1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdEFyZ3MucHVzaChhcnJheUFyZ3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0QXJncy5wdXNoKFtrZXksIHRvWG1sQXJnKHZhbHVlKV0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgVHlwZUVycm9yKSB7XG4gICAgICAgIGxvZy53YXJuKGUubWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0QXJncztcbn1cblxuXG5jbGFzcyBOU1VzZXJEZWZhdWx0cyB7XG4gIGNvbnN0cnVjdG9yIChwbGlzdCkge1xuICAgIHRoaXMucGxpc3QgPSBwbGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgY29udGVudCBvZiB0aGUgZ2l2ZW4gcGxpc3QgZmlsZSB1c2luZyBwbHV0aWwgY29tbWFuZCBsaW5lIHRvb2xcbiAgICogYW5kIHNlcmlhbGl6ZXMgaXQgdG8gYSBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzZXJpYWxpemVkIHBsaXN0IGNvbnRlbnRcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgc2VyaWFsaXphdGlvblxuICAgKi9cbiAgYXN5bmMgYXNKc29uICgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdwbHV0aWwnLCBbJy1jb252ZXJ0JywgJ2pzb24nLCAnLW8nLCAnLScsIHRoaXMucGxpc3RdKTtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0ZG91dCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHt0aGlzLnBsaXN0fScgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBKU09OLiBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIGdpdmVuIHBsaXN0IGZpbGUuXG4gICAqIElmIHRoZSBwbGlzdCBkb2VzIG5vdCBleGlzdCB5ZXQgdGhlbiBpdCBpcyBnb2luZyB0byBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzTWFwIE1hcHBpbmcgb2YgcHJlZmVyZW5jZSB2YWx1ZXMgdG8gdXBkYXRlLlxuICAgKiBJZiBhbnkgb2YgaXRlbSB2YWx1ZXMgYXJlIG9mIGRpY3Rpb25hcnkgdHlwZSB0aGVuIG9ubHkgdGhlIGZpcnN0IGxldmVsIGRpY3Rpb25hcnkgZ2V0c1xuICAgKiB1cGRhdGVkLiBFdmVyeXRoaW5nIGJlbG93IHRoaXMgbGV2ZWwgd2lsbCBiZSByZXBsYWNlZC4gVGhpcyBpcyB0aGUga25vd24gbGltaXRhdGlvblxuICAgKiBvZiB0aGUgYGRlZmF1bHRzYCBjb21tYW5kIGxpbmUgdG9vbC4gQSB3b3JrYXJvdW5kIGZvciBpdCB3b3VsZCBiZSB0byByZWFkIHRoZSBjdXJyZW50XG4gICAqIHByZWZlcmVuY2VzIG1hcHBpbmcgZmlyc3QgYW5kIG1lcmdlIGl0IHdpdGggdGhpcyB2YWx1ZS5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSB1cGRhdGluZyB0aGUgcGxpc3RcbiAgICovXG4gIGFzeW5jIHVwZGF0ZSAodmFsdWVzTWFwKSB7XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QodmFsdWVzTWFwKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgcGxpc3QgdmFsdWVzIG11c3QgYmUgYSBtYXAuICcke3ZhbHVlc01hcH0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eSh2YWx1ZXNNYXApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWFuZEFyZ3MgPSBnZW5lcmF0ZURlZmF1bHRzQ29tbWFuZEFyZ3ModmFsdWVzTWFwKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgQi5hbGwoY29tbWFuZEFyZ3MubWFwKChhcmdzKSA9PiBleGVjKCdkZWZhdWx0cycsIFsnd3JpdGUnLCB0aGlzLnBsaXN0LCAuLi5hcmdzXSkpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCB3cml0ZSBkZWZhdWx0cyBpbnRvICcke3RoaXMucGxpc3R9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxufVxuXG5cbmV4cG9ydCB7XG4gIE5TVXNlckRlZmF1bHRzLFxuICB0b1htbEFyZywgZ2VuZXJhdGVEZWZhdWx0c0NvbW1hbmRBcmdzLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFjQSxTQUFTQSxRQUFRLENBQUVDLEtBQUssRUFBRUMsU0FBUyxHQUFHLElBQUksRUFBRTtFQUMxQyxJQUFJQyxNQUFNLEdBQUcsSUFBSTtFQUVqQixJQUFJQyxlQUFDLENBQUNDLGFBQWEsQ0FBQ0osS0FBSyxDQUFDLEVBQUU7SUFDMUJFLE1BQU0sR0FBRyxJQUFJRyxpQkFBUyxFQUFFLENBQUNDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDO0lBQ3JFLEtBQUssTUFBTSxDQUFDQyxNQUFNLEVBQUVDLFFBQVEsQ0FBQyxJQUFJTCxlQUFDLENBQUNNLE9BQU8sQ0FBQ1QsS0FBSyxDQUFDLEVBQUU7TUFDakQsTUFBTVUsS0FBSyxHQUFHUixNQUFNLENBQUNTLGFBQWEsQ0FBQyxLQUFLLENBQUM7TUFDekMsTUFBTUMsU0FBUyxHQUFHVixNQUFNLENBQUNXLGNBQWMsQ0FBQ04sTUFBTSxDQUFDO01BQy9DRyxLQUFLLENBQUNJLFdBQVcsQ0FBQ0YsU0FBUyxDQUFDO01BQzVCVixNQUFNLENBQUNhLGVBQWUsQ0FBQ0QsV0FBVyxDQUFDSixLQUFLLENBQUM7TUFDekMsTUFBTU0sVUFBVSxHQUFHZCxNQUFNLENBQUNlLFVBQVUsQ0FBQ2xCLFFBQVEsQ0FBQ1MsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQztNQUNyRU4sTUFBTSxDQUFDYSxlQUFlLENBQUNELFdBQVcsQ0FBQ0UsVUFBVSxDQUFDO0lBQ2hEO0VBQ0YsQ0FBQyxNQUFNLElBQUliLGVBQUMsQ0FBQ2UsT0FBTyxDQUFDbEIsS0FBSyxDQUFDLEVBQUU7SUFDM0JFLE1BQU0sR0FBRyxJQUFJRyxpQkFBUyxFQUFFLENBQUNDLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLENBQUM7SUFDdkUsS0FBSyxNQUFNRSxRQUFRLElBQUlSLEtBQUssRUFBRTtNQUM1QixNQUFNZ0IsVUFBVSxHQUFHZCxNQUFNLENBQUNlLFVBQVUsQ0FBQ2xCLFFBQVEsQ0FBQ1MsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQztNQUNyRU4sTUFBTSxDQUFDYSxlQUFlLENBQUNELFdBQVcsQ0FBQ0UsVUFBVSxDQUFDO0lBQ2hEO0VBQ0YsQ0FBQyxNQUFNLElBQUliLGVBQUMsQ0FBQ2dCLFNBQVMsQ0FBQ25CLEtBQUssQ0FBQyxFQUFFO0lBQzdCRSxNQUFNLEdBQUcsSUFBSUcsaUJBQVMsRUFBRSxDQUFDQyxlQUFlLENBQUNOLEtBQUssR0FBRyxTQUFTLEdBQUcsVUFBVSxFQUFFLFVBQVUsQ0FBQztFQUN0RixDQUFDLE1BQU0sSUFBSUcsZUFBQyxDQUFDaUIsU0FBUyxDQUFDcEIsS0FBSyxDQUFDLEVBQUU7SUFDN0JFLE1BQU0sR0FBRyxJQUFJRyxpQkFBUyxFQUFFLENBQUNDLGVBQWUsQ0FBRSxZQUFXTixLQUFNLFlBQVcsRUFBRSxVQUFVLENBQUM7RUFDckYsQ0FBQyxNQUFNLElBQUlHLGVBQUMsQ0FBQ2tCLFFBQVEsQ0FBQ3JCLEtBQUssQ0FBQyxFQUFFO0lBQzVCRSxNQUFNLEdBQUcsSUFBSUcsaUJBQVMsRUFBRSxDQUFDQyxlQUFlLENBQUUsU0FBUU4sS0FBTSxTQUFRLEVBQUUsVUFBVSxDQUFDO0VBQy9FLENBQUMsTUFBTSxJQUFJRyxlQUFDLENBQUNtQixRQUFRLENBQUN0QixLQUFLLENBQUMsRUFBRTtJQUM1QkUsTUFBTSxHQUFHLElBQUlHLGlCQUFTLEVBQUUsQ0FBQ0MsZUFBZSxDQUFFLG1CQUFrQixFQUFFLFVBQVUsQ0FBQztJQUN6RSxNQUFNaUIsV0FBVyxHQUFHckIsTUFBTSxDQUFDVyxjQUFjLENBQUNiLEtBQUssQ0FBQztJQUNoREUsTUFBTSxDQUFDYSxlQUFlLENBQUNELFdBQVcsQ0FBQ1MsV0FBVyxDQUFDO0VBQ2pEO0VBRUEsSUFBSSxDQUFDckIsTUFBTSxFQUFFO0lBQ1gsTUFBTSxJQUFJc0IsU0FBUyxDQUFFLHNCQUFxQkMsSUFBSSxDQUFDQyxTQUFTLENBQUMxQixLQUFLLENBQUUsc0JBQXFCLEdBQ2xGLGdEQUErQyxDQUFDO0VBQ3JEO0VBRUEsT0FBT0MsU0FBUyxHQUNaLElBQUkwQixxQkFBYSxFQUFFLENBQUNDLGlCQUFpQixDQUFDMUIsTUFBTSxDQUFDYSxlQUFlLENBQUMsR0FDN0RiLE1BQU0sQ0FBQ2EsZUFBZTtBQUM1Qjs7QUFlQSxTQUFTYywyQkFBMkIsQ0FBRUMsU0FBUyxFQUFFQyxPQUFPLEdBQUcsS0FBSyxFQUFFO0VBQ2hFLE1BQU1DLFVBQVUsR0FBRyxFQUFFO0VBQ3JCLEtBQUssTUFBTSxDQUFDQyxHQUFHLEVBQUVqQyxLQUFLLENBQUMsSUFBSUcsZUFBQyxDQUFDTSxPQUFPLENBQUNxQixTQUFTLENBQUMsRUFBRTtJQUMvQyxJQUFJO01BQ0YsSUFBSSxDQUFDQyxPQUFPLElBQUk1QixlQUFDLENBQUNDLGFBQWEsQ0FBQ0osS0FBSyxDQUFDLEVBQUU7UUFDdEMsTUFBTWtDLFFBQVEsR0FBRyxDQUFDRCxHQUFHLEVBQUUsV0FBVyxDQUFDO1FBQ25DLEtBQUssTUFBTSxDQUFDMUIsTUFBTSxFQUFFQyxRQUFRLENBQUMsSUFBSUwsZUFBQyxDQUFDTSxPQUFPLENBQUNULEtBQUssQ0FBQyxFQUFFO1VBQ2pEa0MsUUFBUSxDQUFDQyxJQUFJLENBQUM1QixNQUFNLEVBQUVSLFFBQVEsQ0FBQ1MsUUFBUSxDQUFDLENBQUM7UUFDM0M7UUFDQXdCLFVBQVUsQ0FBQ0csSUFBSSxDQUFDRCxRQUFRLENBQUM7TUFDM0IsQ0FBQyxNQUFNLElBQUksQ0FBQ0gsT0FBTyxJQUFJNUIsZUFBQyxDQUFDZSxPQUFPLENBQUNsQixLQUFLLENBQUMsRUFBRTtRQUN2QyxNQUFNb0MsU0FBUyxHQUFHLENBQUNILEdBQUcsRUFBRSxZQUFZLENBQUM7UUFDckMsS0FBSyxNQUFNekIsUUFBUSxJQUFJUixLQUFLLEVBQUU7VUFDNUJvQyxTQUFTLENBQUNELElBQUksQ0FBQ3BDLFFBQVEsQ0FBQ1MsUUFBUSxDQUFDLENBQUM7UUFDcEM7UUFDQXdCLFVBQVUsQ0FBQ0csSUFBSSxDQUFDQyxTQUFTLENBQUM7TUFDNUIsQ0FBQyxNQUFNO1FBQ0xKLFVBQVUsQ0FBQ0csSUFBSSxDQUFDLENBQUNGLEdBQUcsRUFBRWxDLFFBQVEsQ0FBQ0MsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUN6QztJQUNGLENBQUMsQ0FBQyxPQUFPcUMsQ0FBQyxFQUFFO01BQ1YsSUFBSUEsQ0FBQyxZQUFZYixTQUFTLEVBQUU7UUFDMUJjLGVBQUcsQ0FBQ0MsSUFBSSxDQUFDRixDQUFDLENBQUNHLE9BQU8sQ0FBQztNQUNyQixDQUFDLE1BQU07UUFDTCxNQUFNSCxDQUFDO01BQ1Q7SUFDRjtFQUNGO0VBQ0EsT0FBT0wsVUFBVTtBQUNuQjtBQUdBLE1BQU1TLGNBQWMsQ0FBQztFQUNuQkMsV0FBVyxDQUFFQyxLQUFLLEVBQUU7SUFDbEIsSUFBSSxDQUFDQSxLQUFLLEdBQUdBLEtBQUs7RUFDcEI7O0VBU0EsTUFBTUMsTUFBTSxHQUFJO0lBQ2QsSUFBSTtNQUNGLE1BQU07UUFBQ0M7TUFBTSxDQUFDLEdBQUcsTUFBTSxJQUFBQyxrQkFBSSxFQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUNILEtBQUssQ0FBQyxDQUFDO01BQ2xGLE9BQU9sQixJQUFJLENBQUNzQixLQUFLLENBQUNGLE1BQU0sQ0FBQztJQUMzQixDQUFDLENBQUMsT0FBT1IsQ0FBQyxFQUFFO01BQ1YsTUFBTSxJQUFJVyxLQUFLLENBQUUsSUFBRyxJQUFJLENBQUNMLEtBQU0sa0RBQWlETixDQUFDLENBQUNZLE1BQU0sSUFBSVosQ0FBQyxDQUFDRyxPQUFRLEVBQUMsQ0FBQztJQUMxRztFQUNGOztFQWFBLE1BQU1VLE1BQU0sQ0FBRXBCLFNBQVMsRUFBRTtJQUN2QixJQUFJLENBQUMzQixlQUFDLENBQUNDLGFBQWEsQ0FBQzBCLFNBQVMsQ0FBQyxFQUFFO01BQy9CLE1BQU0sSUFBSU4sU0FBUyxDQUFFLGdDQUErQk0sU0FBVSxvQkFBbUIsQ0FBQztJQUNwRjtJQUNBLElBQUkzQixlQUFDLENBQUNnRCxPQUFPLENBQUNyQixTQUFTLENBQUMsRUFBRTtNQUN4QjtJQUNGO0lBRUEsTUFBTXNCLFdBQVcsR0FBR3ZCLDJCQUEyQixDQUFDQyxTQUFTLENBQUM7SUFDMUQsSUFBSTtNQUNGLE1BQU11QixpQkFBQyxDQUFDQyxHQUFHLENBQUNGLFdBQVcsQ0FBQ0csR0FBRyxDQUFFQyxJQUFJLElBQUssSUFBQVYsa0JBQUksRUFBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDSCxLQUFLLEVBQUUsR0FBR2EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFGLENBQUMsQ0FBQyxPQUFPbkIsQ0FBQyxFQUFFO01BQ1YsTUFBTSxJQUFJVyxLQUFLLENBQUUsa0NBQWlDLElBQUksQ0FBQ0wsS0FBTSxzQkFBcUJOLENBQUMsQ0FBQ1ksTUFBTSxJQUFJWixDQUFDLENBQUNHLE9BQVEsRUFBQyxDQUFDO0lBQzVHO0VBQ0Y7QUFDRjtBQUFDIn0=
|
|
109
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0b1htbEFyZyIsInZhbHVlIiwic2VyaWFsaXplIiwieG1sRG9jIiwiXyIsImlzUGxhaW5PYmplY3QiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJzdWJLZXkiLCJzdWJWYWx1ZSIsInRvUGFpcnMiLCJrZXlFbCIsImNyZWF0ZUVsZW1lbnQiLCJrZXlUZXh0RWwiLCJjcmVhdGVUZXh0Tm9kZSIsImFwcGVuZENoaWxkIiwiZG9jdW1lbnRFbGVtZW50Iiwic3ViVmFsdWVFbCIsImltcG9ydE5vZGUiLCJpc0FycmF5IiwiaXNCb29sZWFuIiwiaXNJbnRlZ2VyIiwiaXNOdW1iZXIiLCJpc1N0cmluZyIsInZhbHVlVGV4dEVsIiwiVHlwZUVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsIlhNTFNlcmlhbGl6ZXIiLCJzZXJpYWxpemVUb1N0cmluZyIsImdlbmVyYXRlRGVmYXVsdHNDb21tYW5kQXJncyIsInZhbHVlc01hcCIsInJlcGxhY2UiLCJyZXN1bHRBcmdzIiwia2V5IiwiZGljdEFyZ3MiLCJwdXNoIiwiYXJyYXlBcmdzIiwiZSIsImxvZyIsIndhcm4iLCJtZXNzYWdlIiwiTlNVc2VyRGVmYXVsdHMiLCJjb25zdHJ1Y3RvciIsInBsaXN0IiwiYXNKc29uIiwic3Rkb3V0IiwiZXhlYyIsInBhcnNlIiwiRXJyb3IiLCJzdGRlcnIiLCJ1cGRhdGUiLCJpc0VtcHR5IiwiY29tbWFuZEFyZ3MiLCJCIiwiYWxsIiwibWFwIiwiYXJncyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9kZWZhdWx0cy11dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRE9NUGFyc2VyLCBYTUxTZXJpYWxpemVyIH0gZnJvbSAnQHhtbGRvbS94bWxkb20nO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiB2YWx1ZSB0byBwbGlzdC1jb21wYXRpYmxlXG4gKiBYTUwgcmVwcmVzZW50YXRpb24sIHdoaWNoIGlzIHJlYWR5IGZvciBmdXJ0aGVyIHVzYWdlXG4gKiB3aXRoIGBkZWZhdWx0c2AgY29tbWFuZCBsaW5lIHRvb2wgYXJndW1lbnRzXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgc2VyaWFsaXplZFxuICogQHBhcmFtIHtib29sZWFufSBzZXJpYWxpemUgW3RydWVdIFdoZXRoZXIgdG8gc2VyaWFsaXplIHRoZSByZXN1bHRpbmdcbiAqIFhNTCB0byBzdHJpbmcgb3IgdG8gcmV0dXJuIHJhdyBIVE1MRWxlbWVudCBpbnN0YW5jZVxuICogQHJldHVybnMge0hUTUxFbGVtZW50fHN0cmluZ30gRWl0aGVyIHN0cmluZyBvciByYXcgbm9kZSByZXByZXNlbnRhdGlvbiBvZlxuICogdGhlIGdpdmVuIHZhbHVlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGl0IGlzIG5vdCBrbm93biBob3cgdG8gc2VyaWFsaXplIHRoZSBnaXZlbiB2YWx1ZVxuICovXG5mdW5jdGlvbiB0b1htbEFyZyAodmFsdWUsIHNlcmlhbGl6ZSA9IHRydWUpIHtcbiAgbGV0IHhtbERvYyA9IG51bGw7XG5cbiAgaWYgKF8uaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICB4bWxEb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKCc8ZGljdD48L2RpY3Q+JywgJ3RleHQveG1sJyk7XG4gICAgZm9yIChjb25zdCBbc3ViS2V5LCBzdWJWYWx1ZV0gb2YgXy50b1BhaXJzKHZhbHVlKSkge1xuICAgICAgY29uc3Qga2V5RWwgPSB4bWxEb2MuY3JlYXRlRWxlbWVudCgna2V5Jyk7XG4gICAgICBjb25zdCBrZXlUZXh0RWwgPSB4bWxEb2MuY3JlYXRlVGV4dE5vZGUoc3ViS2V5KTtcbiAgICAgIGtleUVsLmFwcGVuZENoaWxkKGtleVRleHRFbCk7XG4gICAgICB4bWxEb2MuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGtleUVsKTtcbiAgICAgIGNvbnN0IHN1YlZhbHVlRWwgPSB4bWxEb2MuaW1wb3J0Tm9kZSh0b1htbEFyZyhzdWJWYWx1ZSwgZmFsc2UpLCB0cnVlKTtcbiAgICAgIHhtbERvYy5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoc3ViVmFsdWVFbCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKF8uaXNBcnJheSh2YWx1ZSkpIHtcbiAgICB4bWxEb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKCc8YXJyYXk+PC9hcnJheT4nLCAndGV4dC94bWwnKTtcbiAgICBmb3IgKGNvbnN0IHN1YlZhbHVlIG9mIHZhbHVlKSB7XG4gICAgICBjb25zdCBzdWJWYWx1ZUVsID0geG1sRG9jLmltcG9ydE5vZGUodG9YbWxBcmcoc3ViVmFsdWUsIGZhbHNlKSwgdHJ1ZSk7XG4gICAgICB4bWxEb2MuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHN1YlZhbHVlRWwpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChfLmlzQm9vbGVhbih2YWx1ZSkpIHtcbiAgICB4bWxEb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHZhbHVlID8gJzx0cnVlLz4nIDogJzxmYWxzZS8+JywgJ3RleHQveG1sJyk7XG4gIH0gZWxzZSBpZiAoXy5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgeG1sRG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhgPGludGVnZXI+JHt2YWx1ZX08L2ludGVnZXI+YCwgJ3RleHQveG1sJyk7XG4gIH0gZWxzZSBpZiAoXy5pc051bWJlcih2YWx1ZSkpIHtcbiAgICB4bWxEb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGA8cmVhbD4ke3ZhbHVlfTwvcmVhbD5gLCAndGV4dC94bWwnKTtcbiAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHhtbERvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoYDxzdHJpbmc+PC9zdHJpbmc+YCwgJ3RleHQveG1sJyk7XG4gICAgY29uc3QgdmFsdWVUZXh0RWwgPSB4bWxEb2MuY3JlYXRlVGV4dE5vZGUodmFsdWUpO1xuICAgIHhtbERvYy5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodmFsdWVUZXh0RWwpO1xuICB9XG5cbiAgaWYgKCF4bWxEb2MpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBUaGUgZGVmYXVsdHMgdmFsdWUgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9IGNhbm5vdCBiZSB3cml0dGVuLCBgICtcbiAgICAgIGBiZWNhdXNlIGl0IGlzIG5vdCBrbm93biBob3cgdG8gaGFuZGxlIGl0cyB0eXBlYCk7XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplXG4gICAgPyBuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKHhtbERvYy5kb2N1bWVudEVsZW1lbnQpXG4gICAgOiB4bWxEb2MuZG9jdW1lbnRFbGVtZW50O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBjb21tYW5kIGxpbmUgYXJncyBmb3IgdGhlIGBkZWZhdWx0c2BcbiAqIGNvbW1hbmQgbGluZSB1dGlsaXR5IGJhc2VkIG9uIHRoZSBnaXZlbiBwcmVmZXJlbmNlIHZhbHVlcyBtYXBwaW5nLlxuICogU2VlIGh0dHBzOi8vc2hhZG93ZmlsZS5pbm9kZS5saW5rL2Jsb2cvMjAxOC8wNi9hZHZhbmNlZC1kZWZhdWx0czEtdXNhZ2UvXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXNNYXAgUHJlZmVyZW5jZXMgbWFwcGluZ1xuICogQHBhcmFtIHtCb29sZWFufSByZXBsYWNlIFtmYWxzZV0gV2hldGhlciB0byBnZW5lcmF0ZSBhcmd1bWVudHMgdGhhdCByZXBsYWNlXG4gKiBjb21wbGV4IHR5cGVkIHZhbHVlcyBsaWtlIGFycmF5cyBvciBkaWN0aW9uYXJpZXMgaW4gdGhlIGN1cnJlbnQgcGxpc3Qgb3JcbiAqIHVwZGF0ZSB0aGVtICh0aGUgZGVmYXVsdCBzZXR0aW5ncylcbiAqIEByZXR1cm5zIHtBcnJheTxBcnJheTxzdHJpbmc+Pn0gRWFjaCBpdGVtIGluIHRoZSBhcnJheVxuICogaXMgdGhlIGBkZWZhdWx0cyB3cml0ZSA8cGxpc3Q+YCBjb21tYW5kIHN1ZmZpeFxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZURlZmF1bHRzQ29tbWFuZEFyZ3MgKHZhbHVlc01hcCwgcmVwbGFjZSA9IGZhbHNlKSB7XG4gIGNvbnN0IHJlc3VsdEFyZ3MgPSBbXTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKHZhbHVlc01hcCkpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFyZXBsYWNlICYmIF8uaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgZGljdEFyZ3MgPSBba2V5LCAnLWRpY3QtYWRkJ107XG4gICAgICAgIGZvciAoY29uc3QgW3N1YktleSwgc3ViVmFsdWVdIG9mIF8udG9QYWlycyh2YWx1ZSkpIHtcbiAgICAgICAgICBkaWN0QXJncy5wdXNoKHN1YktleSwgdG9YbWxBcmcoc3ViVmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHRBcmdzLnB1c2goZGljdEFyZ3MpO1xuICAgICAgfSBlbHNlIGlmICghcmVwbGFjZSAmJiBfLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGFycmF5QXJncyA9IFtrZXksICctYXJyYXktYWRkJ107XG4gICAgICAgIGZvciAoY29uc3Qgc3ViVmFsdWUgb2YgdmFsdWUpIHtcbiAgICAgICAgICBhcnJheUFyZ3MucHVzaCh0b1htbEFyZyhzdWJWYWx1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdEFyZ3MucHVzaChhcnJheUFyZ3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0QXJncy5wdXNoKFtrZXksIHRvWG1sQXJnKHZhbHVlKV0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgVHlwZUVycm9yKSB7XG4gICAgICAgIGxvZy53YXJuKGUubWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0QXJncztcbn1cblxuXG5jbGFzcyBOU1VzZXJEZWZhdWx0cyB7XG4gIGNvbnN0cnVjdG9yIChwbGlzdCkge1xuICAgIHRoaXMucGxpc3QgPSBwbGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgY29udGVudCBvZiB0aGUgZ2l2ZW4gcGxpc3QgZmlsZSB1c2luZyBwbHV0aWwgY29tbWFuZCBsaW5lIHRvb2xcbiAgICogYW5kIHNlcmlhbGl6ZXMgaXQgdG8gYSBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzZXJpYWxpemVkIHBsaXN0IGNvbnRlbnRcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgc2VyaWFsaXphdGlvblxuICAgKi9cbiAgYXN5bmMgYXNKc29uICgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdwbHV0aWwnLCBbJy1jb252ZXJ0JywgJ2pzb24nLCAnLW8nLCAnLScsIHRoaXMucGxpc3RdKTtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0ZG91dCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHt0aGlzLnBsaXN0fScgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBKU09OLiBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIGdpdmVuIHBsaXN0IGZpbGUuXG4gICAqIElmIHRoZSBwbGlzdCBkb2VzIG5vdCBleGlzdCB5ZXQgdGhlbiBpdCBpcyBnb2luZyB0byBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzTWFwIE1hcHBpbmcgb2YgcHJlZmVyZW5jZSB2YWx1ZXMgdG8gdXBkYXRlLlxuICAgKiBJZiBhbnkgb2YgaXRlbSB2YWx1ZXMgYXJlIG9mIGRpY3Rpb25hcnkgdHlwZSB0aGVuIG9ubHkgdGhlIGZpcnN0IGxldmVsIGRpY3Rpb25hcnkgZ2V0c1xuICAgKiB1cGRhdGVkLiBFdmVyeXRoaW5nIGJlbG93IHRoaXMgbGV2ZWwgd2lsbCBiZSByZXBsYWNlZC4gVGhpcyBpcyB0aGUga25vd24gbGltaXRhdGlvblxuICAgKiBvZiB0aGUgYGRlZmF1bHRzYCBjb21tYW5kIGxpbmUgdG9vbC4gQSB3b3JrYXJvdW5kIGZvciBpdCB3b3VsZCBiZSB0byByZWFkIHRoZSBjdXJyZW50XG4gICAqIHByZWZlcmVuY2VzIG1hcHBpbmcgZmlyc3QgYW5kIG1lcmdlIGl0IHdpdGggdGhpcyB2YWx1ZS5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSB1cGRhdGluZyB0aGUgcGxpc3RcbiAgICovXG4gIGFzeW5jIHVwZGF0ZSAodmFsdWVzTWFwKSB7XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QodmFsdWVzTWFwKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgcGxpc3QgdmFsdWVzIG11c3QgYmUgYSBtYXAuICcke3ZhbHVlc01hcH0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eSh2YWx1ZXNNYXApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWFuZEFyZ3MgPSBnZW5lcmF0ZURlZmF1bHRzQ29tbWFuZEFyZ3ModmFsdWVzTWFwKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgQi5hbGwoY29tbWFuZEFyZ3MubWFwKChhcmdzKSA9PiBleGVjKCdkZWZhdWx0cycsIFsnd3JpdGUnLCB0aGlzLnBsaXN0LCAuLi5hcmdzXSkpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCB3cml0ZSBkZWZhdWx0cyBpbnRvICcke3RoaXMucGxpc3R9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxufVxuXG5cbmV4cG9ydCB7XG4gIE5TVXNlckRlZmF1bHRzLFxuICB0b1htbEFyZywgZ2VuZXJhdGVEZWZhdWx0c0NvbW1hbmRBcmdzLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFjQSxTQUFTQSxRQUFRLENBQUVDLEtBQUssRUFBRUMsU0FBUyxHQUFHLElBQUksRUFBRTtFQUMxQyxJQUFJQyxNQUFNLEdBQUcsSUFBSTtFQUVqQixJQUFJQyxlQUFDLENBQUNDLGFBQWEsQ0FBQ0osS0FBSyxDQUFDLEVBQUU7SUFDMUJFLE1BQU0sR0FBRyxJQUFJRyxpQkFBUyxFQUFFLENBQUNDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDO0lBQ3JFLEtBQUssTUFBTSxDQUFDQyxNQUFNLEVBQUVDLFFBQVEsQ0FBQyxJQUFJTCxlQUFDLENBQUNNLE9BQU8sQ0FBQ1QsS0FBSyxDQUFDLEVBQUU7TUFDakQsTUFBTVUsS0FBSyxHQUFHUixNQUFNLENBQUNTLGFBQWEsQ0FBQyxLQUFLLENBQUM7TUFDekMsTUFBTUMsU0FBUyxHQUFHVixNQUFNLENBQUNXLGNBQWMsQ0FBQ04sTUFBTSxDQUFDO01BQy9DRyxLQUFLLENBQUNJLFdBQVcsQ0FBQ0YsU0FBUyxDQUFDO01BQzVCVixNQUFNLENBQUNhLGVBQWUsQ0FBQ0QsV0FBVyxDQUFDSixLQUFLLENBQUM7TUFDekMsTUFBTU0sVUFBVSxHQUFHZCxNQUFNLENBQUNlLFVBQVUsQ0FBQ2xCLFFBQVEsQ0FBQ1MsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQztN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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults-utils.js","names":["toXmlArg","value","serialize","xmlDoc","_","isPlainObject","DOMParser","parseFromString","subKey","subValue","toPairs","keyEl","createElement","keyTextEl","createTextNode","appendChild","documentElement","subValueEl","importNode","isArray","isBoolean","isInteger","isNumber","isString","valueTextEl","TypeError","JSON","stringify","XMLSerializer","serializeToString","generateDefaultsCommandArgs","valuesMap","replace","resultArgs","key","dictArgs","push","arrayArgs","e","log","warn","message","NSUserDefaults","constructor","plist","asJson","stdout","exec","parse","Error","stderr","update","isEmpty","commandArgs","B","all","map","args"],"sources":["../../lib/defaults-utils.js"],"sourcesContent":["import _ from 'lodash';\nimport { DOMParser, XMLSerializer } from '@xmldom/xmldom';\nimport { exec } from 'teen_process';\nimport B from 'bluebird';\nimport log from './logger';\n\n/**\n * Serializes the given value to plist-compatible\n * XML representation, which is ready for further usage\n * with `defaults` command line tool arguments\n *\n * @param {*} value The value to be serialized\n * @param {boolean} serialize [true] Whether to serialize the resulting\n * XML to string or to return raw HTMLElement instance\n * @returns {HTMLElement|string} Either string or raw node representation of\n * the given value\n * @throws {TypeError} If it is not known how to serialize the given value\n */\nfunction toXmlArg (value, serialize = true) {\n let xmlDoc = null;\n\n if (_.isPlainObject(value)) {\n xmlDoc = new DOMParser().parseFromString('<dict></dict>', 'text/xml');\n for (const [subKey, subValue] of _.toPairs(value)) {\n const keyEl = xmlDoc.createElement('key');\n const keyTextEl = xmlDoc.createTextNode(subKey);\n keyEl.appendChild(keyTextEl);\n xmlDoc.documentElement.appendChild(keyEl);\n const subValueEl = xmlDoc.importNode(toXmlArg(subValue, false), true);\n xmlDoc.documentElement.appendChild(subValueEl);\n }\n } else if (_.isArray(value)) {\n xmlDoc = new DOMParser().parseFromString('<array></array>', 'text/xml');\n for (const subValue of value) {\n const subValueEl = xmlDoc.importNode(toXmlArg(subValue, false), true);\n xmlDoc.documentElement.appendChild(subValueEl);\n }\n } else if (_.isBoolean(value)) {\n xmlDoc = new DOMParser().parseFromString(value ? '<true/>' : '<false/>', 'text/xml');\n } else if (_.isInteger(value)) {\n xmlDoc = new DOMParser().parseFromString(`<integer>${value}</integer>`, 'text/xml');\n } else if (_.isNumber(value)) {\n xmlDoc = new DOMParser().parseFromString(`<real>${value}</real>`, 'text/xml');\n } else if (_.isString(value)) {\n xmlDoc = new DOMParser().parseFromString(`<string></string>`, 'text/xml');\n const valueTextEl = xmlDoc.createTextNode(value);\n xmlDoc.documentElement.appendChild(valueTextEl);\n }\n\n if (!xmlDoc) {\n throw new TypeError(`The defaults value ${JSON.stringify(value)} cannot be written, ` +\n `because it is not known how to handle its type`);\n }\n\n return serialize\n ? new XMLSerializer().serializeToString(xmlDoc.documentElement)\n : xmlDoc.documentElement;\n}\n\n/**\n * Generates command line args for the `defaults`\n * command line utility based on the given preference values mapping.\n * See https://shadowfile.inode.link/blog/2018/06/advanced-defaults1-usage/\n * for more details.\n *\n * @param {Object} valuesMap Preferences mapping\n * @param {Boolean} replace [false] Whether to generate arguments that replace\n * complex typed values like arrays or dictionaries in the current plist or\n * update them (the default settings)\n * @returns {Array<Array<string>>} Each item in the array\n * is the `defaults write <plist>` command suffix\n */\nfunction generateDefaultsCommandArgs (valuesMap, replace = false) {\n const resultArgs = [];\n for (const [key, value] of _.toPairs(valuesMap)) {\n try {\n if (!replace && _.isPlainObject(value)) {\n const dictArgs = [key, '-dict-add'];\n for (const [subKey, subValue] of _.toPairs(value)) {\n dictArgs.push(subKey, toXmlArg(subValue));\n }\n resultArgs.push(dictArgs);\n } else if (!replace && _.isArray(value)) {\n const arrayArgs = [key, '-array-add'];\n for (const subValue of value) {\n arrayArgs.push(toXmlArg(subValue));\n }\n resultArgs.push(arrayArgs);\n } else {\n resultArgs.push([key, toXmlArg(value)]);\n }\n } catch (e) {\n if (e instanceof TypeError) {\n log.warn(e.message);\n } else {\n throw e;\n }\n }\n }\n return resultArgs;\n}\n\n\nclass NSUserDefaults {\n constructor (plist) {\n this.plist = plist;\n }\n\n /**\n * Reads the content of the given plist file using plutil command line tool\n * and serializes it to a JSON representation\n *\n * @returns {Object} The serialized plist content\n * @throws {Error} If there was an error during serialization\n */\n async asJson () {\n try {\n const {stdout} = await exec('plutil', ['-convert', 'json', '-o', '-', this.plist]);\n return JSON.parse(stdout);\n } catch (e) {\n throw new Error(`'${this.plist}' cannot be converted to JSON. Original error: ${e.stderr || e.message}`);\n }\n }\n\n /**\n * Updates the content of the given plist file.\n * If the plist does not exist yet then it is going to be created.\n *\n * @param {Object} valuesMap Mapping of preference values to update.\n * If any of item values are of dictionary type then only the first level dictionary gets\n * updated. Everything below this level will be replaced. This is the known limitation\n * of the `defaults` command line tool. A workaround for it would be to read the current\n * preferences mapping first and merge it with this value.\n * @throws {Error} If there was an error while updating the plist\n */\n async update (valuesMap) {\n if (!_.isPlainObject(valuesMap)) {\n throw new TypeError(`plist values must be a map. '${valuesMap}' is given instead`);\n }\n if (_.isEmpty(valuesMap)) {\n return;\n }\n\n const commandArgs = generateDefaultsCommandArgs(valuesMap);\n try {\n await B.all(commandArgs.map((args) => exec('defaults', ['write', this.plist, ...args])));\n } catch (e) {\n throw new Error(`Could not write defaults into '${this.plist}'. Original error: ${e.stderr || e.message}`);\n }\n }\n}\n\n\nexport {\n NSUserDefaults,\n toXmlArg, generateDefaultsCommandArgs,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"defaults-utils.js","names":["toXmlArg","value","serialize","xmlDoc","_","isPlainObject","DOMParser","parseFromString","subKey","subValue","toPairs","keyEl","createElement","keyTextEl","createTextNode","appendChild","documentElement","subValueEl","importNode","isArray","isBoolean","isInteger","isNumber","isString","valueTextEl","TypeError","JSON","stringify","XMLSerializer","serializeToString","generateDefaultsCommandArgs","valuesMap","replace","resultArgs","key","dictArgs","push","arrayArgs","e","log","warn","message","NSUserDefaults","constructor","plist","asJson","stdout","exec","parse","Error","stderr","update","isEmpty","commandArgs","B","all","map","args"],"sources":["../../lib/defaults-utils.js"],"sourcesContent":["import _ from 'lodash';\nimport { DOMParser, XMLSerializer } from '@xmldom/xmldom';\nimport { exec } from 'teen_process';\nimport B from 'bluebird';\nimport log from './logger';\n\n/**\n * Serializes the given value to plist-compatible\n * XML representation, which is ready for further usage\n * with `defaults` command line tool arguments\n *\n * @param {*} value The value to be serialized\n * @param {boolean} serialize [true] Whether to serialize the resulting\n * XML to string or to return raw HTMLElement instance\n * @returns {HTMLElement|string} Either string or raw node representation of\n * the given value\n * @throws {TypeError} If it is not known how to serialize the given value\n */\nfunction toXmlArg (value, serialize = true) {\n let xmlDoc = null;\n\n if (_.isPlainObject(value)) {\n xmlDoc = new DOMParser().parseFromString('<dict></dict>', 'text/xml');\n for (const [subKey, subValue] of _.toPairs(value)) {\n const keyEl = xmlDoc.createElement('key');\n const keyTextEl = xmlDoc.createTextNode(subKey);\n keyEl.appendChild(keyTextEl);\n xmlDoc.documentElement.appendChild(keyEl);\n const subValueEl = xmlDoc.importNode(toXmlArg(subValue, false), true);\n xmlDoc.documentElement.appendChild(subValueEl);\n }\n } else if (_.isArray(value)) {\n xmlDoc = new DOMParser().parseFromString('<array></array>', 'text/xml');\n for (const subValue of value) {\n const subValueEl = xmlDoc.importNode(toXmlArg(subValue, false), true);\n xmlDoc.documentElement.appendChild(subValueEl);\n }\n } else if (_.isBoolean(value)) {\n xmlDoc = new DOMParser().parseFromString(value ? '<true/>' : '<false/>', 'text/xml');\n } else if (_.isInteger(value)) {\n xmlDoc = new DOMParser().parseFromString(`<integer>${value}</integer>`, 'text/xml');\n } else if (_.isNumber(value)) {\n xmlDoc = new DOMParser().parseFromString(`<real>${value}</real>`, 'text/xml');\n } else if (_.isString(value)) {\n xmlDoc = new DOMParser().parseFromString(`<string></string>`, 'text/xml');\n const valueTextEl = xmlDoc.createTextNode(value);\n xmlDoc.documentElement.appendChild(valueTextEl);\n }\n\n if (!xmlDoc) {\n throw new TypeError(`The defaults value ${JSON.stringify(value)} cannot be written, ` +\n `because it is not known how to handle its type`);\n }\n\n return serialize\n ? new XMLSerializer().serializeToString(xmlDoc.documentElement)\n : xmlDoc.documentElement;\n}\n\n/**\n * Generates command line args for the `defaults`\n * command line utility based on the given preference values mapping.\n * See https://shadowfile.inode.link/blog/2018/06/advanced-defaults1-usage/\n * for more details.\n *\n * @param {Object} valuesMap Preferences mapping\n * @param {Boolean} replace [false] Whether to generate arguments that replace\n * complex typed values like arrays or dictionaries in the current plist or\n * update them (the default settings)\n * @returns {Array<Array<string>>} Each item in the array\n * is the `defaults write <plist>` command suffix\n */\nfunction generateDefaultsCommandArgs (valuesMap, replace = false) {\n const resultArgs = [];\n for (const [key, value] of _.toPairs(valuesMap)) {\n try {\n if (!replace && _.isPlainObject(value)) {\n const dictArgs = [key, '-dict-add'];\n for (const [subKey, subValue] of _.toPairs(value)) {\n dictArgs.push(subKey, toXmlArg(subValue));\n }\n resultArgs.push(dictArgs);\n } else if (!replace && _.isArray(value)) {\n const arrayArgs = [key, '-array-add'];\n for (const subValue of value) {\n arrayArgs.push(toXmlArg(subValue));\n }\n resultArgs.push(arrayArgs);\n } else {\n resultArgs.push([key, toXmlArg(value)]);\n }\n } catch (e) {\n if (e instanceof TypeError) {\n log.warn(e.message);\n } else {\n throw e;\n }\n }\n }\n return resultArgs;\n}\n\n\nclass NSUserDefaults {\n constructor (plist) {\n this.plist = plist;\n }\n\n /**\n * Reads the content of the given plist file using plutil command line tool\n * and serializes it to a JSON representation\n *\n * @returns {Object} The serialized plist content\n * @throws {Error} If there was an error during serialization\n */\n async asJson () {\n try {\n const {stdout} = await exec('plutil', ['-convert', 'json', '-o', '-', this.plist]);\n return JSON.parse(stdout);\n } catch (e) {\n throw new Error(`'${this.plist}' cannot be converted to JSON. Original error: ${e.stderr || e.message}`);\n }\n }\n\n /**\n * Updates the content of the given plist file.\n * If the plist does not exist yet then it is going to be created.\n *\n * @param {Object} valuesMap Mapping of preference values to update.\n * If any of item values are of dictionary type then only the first level dictionary gets\n * updated. Everything below this level will be replaced. This is the known limitation\n * of the `defaults` command line tool. A workaround for it would be to read the current\n * preferences mapping first and merge it with this value.\n * @throws {Error} If there was an error while updating the plist\n */\n async update (valuesMap) {\n if (!_.isPlainObject(valuesMap)) {\n throw new TypeError(`plist values must be a map. '${valuesMap}' is given instead`);\n }\n if (_.isEmpty(valuesMap)) {\n return;\n }\n\n const commandArgs = generateDefaultsCommandArgs(valuesMap);\n try {\n await B.all(commandArgs.map((args) => exec('defaults', ['write', this.plist, ...args])));\n } catch (e) {\n throw new Error(`Could not write defaults into '${this.plist}'. Original error: ${e.stderr || e.message}`);\n }\n }\n}\n\n\nexport {\n NSUserDefaults,\n toXmlArg, generateDefaultsCommandArgs,\n};\n"],"mappings":"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"}
|
package/build/lib/geolocation.js
CHANGED
|
@@ -22,7 +22,6 @@ set theFormatter to current application's NSNumberFormatter's new()
|
|
|
22
22
|
set result to theFormatter's decimalSeparator()
|
|
23
23
|
log result as string
|
|
24
24
|
`;
|
|
25
|
-
|
|
26
25
|
async function setLocationWithLyft(udid, latitude, longitude) {
|
|
27
26
|
try {
|
|
28
27
|
await _support.fs.which(LYFT_SET_LOCATION);
|
|
@@ -35,7 +34,6 @@ async function setLocationWithLyft(udid, latitude, longitude) {
|
|
|
35
34
|
throw new Error(`Failed to set geolocation with '${LYFT_SET_LOCATION}'. ` + `Original error: ${e.stderr || e.message}`);
|
|
36
35
|
}
|
|
37
36
|
}
|
|
38
|
-
|
|
39
37
|
async function setLocationWithIdb(idb, latitude, longitude) {
|
|
40
38
|
if (!idb) {
|
|
41
39
|
throw new Error('Failed to set geolocation with idb because it is not installed or the "launchWithIDB" capability was not set');
|
|
@@ -46,7 +44,6 @@ async function setLocationWithIdb(idb, latitude, longitude) {
|
|
|
46
44
|
throw new Error(`Failed to set geolocation with idb. Original error: ${e.stderr || e.message}`);
|
|
47
45
|
}
|
|
48
46
|
}
|
|
49
|
-
|
|
50
47
|
async function setLocationWithAppleScript(sim, latitude, longitude, menu = 'Debug') {
|
|
51
48
|
const {
|
|
52
49
|
stdout,
|
|
@@ -76,4 +73,4 @@ async function setLocationWithAppleScript(sim, latitude, longitude, menu = 'Debu
|
|
|
76
73
|
throw new Error(`Failed to set geolocation with AppleScript. Original error: ${output}`);
|
|
77
74
|
}
|
|
78
75
|
}
|
|
79
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMWUZUX1NFVF9MT0NBVElPTiIsIkRFQ0lNQUxfU0VQQVJBVE9SX1NDUklQVCIsInNldExvY2F0aW9uV2l0aEx5ZnQiLCJ1ZGlkIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJmcyIsIndoaWNoIiwiZSIsIkVycm9yIiwiZXhlYyIsInN0ZGVyciIsIm1lc3NhZ2UiLCJzZXRMb2NhdGlvbldpdGhJZGIiLCJpZGIiLCJzZXRMb2NhdGlvbiIsInNldExvY2F0aW9uV2l0aEFwcGxlU2NyaXB0Iiwic2ltIiwibWVudSIsInN0ZG91dCIsImRlY2ltYWxTZXBhcmF0b3IiLCJfIiwidHJpbSIsImxhdGl0dWRlU3RyIiwibG9uZ2l0dWRlU3RyIiwibWFwIiwiY29vcmQiLCJyZXBsYWNlIiwib3V0cHV0IiwiZXhlY3V0ZVVJQ2xpZW50U2NyaXB0IiwibG9nIiwiZGVidWciXSwic291cmNlcyI6WyIuLi8uLi9saWIvZ2VvbG9jYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IExZRlRfU0VUX0xPQ0FUSU9OID0gJ3NldC1zaW11bGF0b3ItbG9jYXRpb24nO1xuY29uc3QgREVDSU1BTF9TRVBBUkFUT1JfU0NSSVBUID0gYFxudXNlIGZyYW1ld29yayBcIkZvdW5kYXRpb25cIlxudXNlIGZyYW1ld29yayBcIkFwcEtpdFwiXG51c2Ugc2NyaXB0aW5nIGFkZGl0aW9uc1xuXG5zZXQgdGhlRm9ybWF0dGVyIHRvIGN1cnJlbnQgYXBwbGljYXRpb24ncyBOU051bWJlckZvcm1hdHRlcidzIG5ldygpXG5zZXQgcmVzdWx0IHRvIHRoZUZvcm1hdHRlcidzIGRlY2ltYWxTZXBhcmF0b3IoKVxubG9nIHJlc3VsdCBhcyBzdHJpbmdcbmA7XG5cbi8qKlxuICogU2V0IGN1c3RvbSBnZW9sb2NhdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGUgZ2l2ZW4gU2ltdWxhdG9yIHVzaW5nIExZRlRfU0VUX0xPQ0FUSU9OLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1ZGlkIC0gVGhlIHVkaWQgdG8gc2V0IHRoZSBnaXZlbiBnZW9sb2NhdGlvblxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBsYXRpdHVkZSAtIFRoZSBsYXRpdHVkZSB2YWx1ZSwgd2hpY2ggaXMgZ29pbmcgdG8gYmUgZW50ZXJlZFxuICogICBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGVkaXQgZmllbGQsIGZvciBleGFtcGxlICczOSwwMDA2Jy5cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbG9uZ2l0dWRlIC0gVGhlIGxvbmdpdHVkZSB2YWx1ZSwgd2hpY2ggaXMgZ29pbmcgdG8gYmUgZW50ZXJlZFxuICogICBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGVkaXQgZmllbGQsIGZvciBleGFtcGxlICcxOSwwMDY4Jy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBmYWlsZWQgdG8gc2V0IHRoZSBsb2NhdGlvblxuICovXG5hc3luYyBmdW5jdGlvbiBzZXRMb2NhdGlvbldpdGhMeWZ0ICh1ZGlkLCBsYXRpdHVkZSwgbG9uZ2l0dWRlKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMud2hpY2goTFlGVF9TRVRfTE9DQVRJT04pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAnJHtMWUZUX1NFVF9MT0NBVElPTn0nIGJpbmFyeSBoYXMgbm90IGJlZW4gZm91bmQgaW4geW91ciBQQVRILiBgICtcbiAgICAgICdQbGVhc2UgaW5zdGFsbCBpdCBhcyBcImJyZXcgaW5zdGFsbCBseWZ0L2Zvcm11bGFlL3NldC1zaW11bGF0b3ItbG9jYXRpb25cIiBieSBicmV3IG9yICcgK1xuICAgICAgJ3JlYWQgaHR0cHM6Ly9naXRodWIuY29tL2x5ZnQvc2V0LXNpbXVsYXRvci1sb2NhdGlvbiB0byBzZXQgdGhlIGJpbmFyeSBieSBtYW51YWwgdG8gJyArXG4gICAgICAnYmUgYWJsZSB0byBzZXQgZ2VvbG9jYXRpb24gYnkgdGhlIGxpYnJhcnkuJyk7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGV4ZWMoTFlGVF9TRVRfTE9DQVRJT04sIFtcbiAgICAgICctYycsIGxhdGl0dWRlLCBsb25naXR1ZGUsXG4gICAgICAnLXUnLCB1ZGlkXG4gICAgXSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZXQgZ2VvbG9jYXRpb24gd2l0aCAnJHtMWUZUX1NFVF9MT0NBVElPTn0nLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLm1lc3NhZ2V9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZXQgY3VzdG9tIGdlb2xvY2F0aW9uIHBhcmFtZXRlcnMgZm9yIHRoZSBnaXZlbiBTaW11bGF0b3IgdXNpbmcgaWRiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpZGIgLSBUaGUgSURCIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGxhdGl0dWRlIC0gVGhlIGxhdGl0dWRlIHZhbHVlLCB3aGljaCBpcyBnb2luZyB0byBiZSBlbnRlcmVkXG4gKiAgIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgZWRpdCBmaWVsZCwgZm9yIGV4YW1wbGUgJzM5LDAwMDYnLlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBsb25naXR1ZGUgLSBUaGUgbG9uZ2l0dWRlIHZhbHVlLCB3aGljaCBpcyBnb2luZyB0byBiZSBlbnRlcmVkXG4gKiAgIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgZWRpdCBmaWVsZCwgZm9yIGV4YW1wbGUgJzE5LDAwNjgnLlxuICogQHRocm93cyB7RXJyb3J9IElmIGl0IGZhaWxlZCB0byBzZXQgdGhlIGxvY2F0aW9uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNldExvY2F0aW9uV2l0aElkYiAoaWRiLCBsYXRpdHVkZSwgbG9uZ2l0dWRlKSB7XG4gIGlmICghaWRiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gc2V0IGdlb2xvY2F0aW9uIHdpdGggaWRiIGJlY2F1c2UgaXQgaXMgbm90IGluc3RhbGxlZCBvciB0aGUgXCJsYXVuY2hXaXRoSURCXCIgY2FwYWJpbGl0eSB3YXMgbm90IHNldCcpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBpZGIuc2V0TG9jYXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZXQgZ2VvbG9jYXRpb24gd2l0aCBpZGIuIE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUubWVzc2FnZX1gKTtcbiAgfVxufVxuXG5cbi8qKlxuICogU2V0IGN1c3RvbSBnZW9sb2NhdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGUgZ2l2ZW4gU2ltdWxhdG9yIHVzaW5nIEFwcGxlU2NyaXB0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHNpbSAtIFRoZSBTaW11bGF0b3JYY29kZSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbGF0aXR1ZGUgLSBUaGUgbGF0aXR1ZGUgdmFsdWUsIHdoaWNoIGlzIGdvaW5nIHRvIGJlIGVudGVyZWRcbiAqICAgaW50byB0aGUgY29ycmVzcG9uZGluZyBlZGl0IGZpZWxkLCBmb3IgZXhhbXBsZSAnMzksMDAwNicuXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGxvbmdpdHVkZSAtIFRoZSBsb25naXR1ZGUgdmFsdWUsIHdoaWNoIGlzIGdvaW5nIHRvIGJlIGVudGVyZWRcbiAqICAgaW50byB0aGUgY29ycmVzcG9uZGluZyBlZGl0IGZpZWxkLCBmb3IgZXhhbXBsZSAnMTksMDA2OCcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lbnU9RGVidWddIC0gVGhlIG1lbnUgZmllbGQgaW4gd2hpY2ggdGhlICdMb2NhdGlvbicgZmVhdHVyZSBpcyBmb3VuZFxuICogQHRocm93cyB7RXJyb3J9IElmIGl0IGZhaWxlZCB0byBzZXQgdGhlIGxvY2F0aW9uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNldExvY2F0aW9uV2l0aEFwcGxlU2NyaXB0IChzaW0sIGxhdGl0dWRlLCBsb25naXR1ZGUsIG1lbnUgPSAnRGVidWcnKSB7XG4gIC8vIE1ha2Ugc3VyZSBzeXN0ZW0td2lkZSBkZWNpbWFsIHNlcGFyYXRvciBpcyB1c2VkXG4gIGNvbnN0IHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCBleGVjKCdvc2FzY3JpcHQnLCBbJy1lJywgREVDSU1BTF9TRVBBUkFUT1JfU0NSSVBUXSk7XG4gIGNvbnN0IGRlY2ltYWxTZXBhcmF0b3IgPSBfLnRyaW0oc3Rkb3V0IHx8IHN0ZGVycik7XG4gIGNvbnN0IFtsYXRpdHVkZVN0ciwgbG9uZ2l0dWRlU3RyXSA9IFtsYXRpdHVkZSwgbG9uZ2l0dWRlXVxuICAgIC5tYXAoKGNvb3JkKSA9PiBgJHtjb29yZH1gLnJlcGxhY2UoL1suLF0vLCBkZWNpbWFsU2VwYXJhdG9yKSk7XG5cbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgc2ltLmV4ZWN1dGVVSUNsaWVudFNjcmlwdChgXG4gICAgdGVsbCBhcHBsaWNhdGlvbiBcIlN5c3RlbSBFdmVudHNcIlxuICAgICAgdGVsbCBwcm9jZXNzIFwiU2ltdWxhdG9yXCJcbiAgICAgICAgc2V0IGZlYXR1cmVOYW1lIHRvIFwiQ3VzdG9tIExvY2F0aW9uXCJcbiAgICAgICAgc2V0IGRzdE1lbnVJdGVtIHRvIG1lbnUgaXRlbSAoZmVhdHVyZU5hbWUgJiBcIuKAplwiKSBvZiBtZW51IDEgb2YgbWVudSBpdGVtIFwiTG9jYXRpb25cIiBvZiBtZW51IDEgb2YgbWVudSBiYXIgaXRlbSBcIiR7bWVudX1cIiBvZiBtZW51IGJhciAxXG4gICAgICAgIGNsaWNrIGRzdE1lbnVJdGVtXG4gICAgICAgIGRlbGF5IDFcbiAgICAgICAgc2V0IHZhbHVlIG9mIHRleHQgZmllbGQgMSBvZiB3aW5kb3cgZmVhdHVyZU5hbWUgdG8gXCIke2xhdGl0dWRlU3RyfVwiXG4gICAgICAgIGRlbGF5IDAuNVxuICAgICAgICBzZXQgdmFsdWUgb2YgdGV4dCBmaWVsZCAyIG9mIHdpbmRvdyBmZWF0dXJlTmFtZSB0byBcIiR7bG9uZ2l0dWRlU3RyfVwiXG4gICAgICAgIGRlbGF5IDAuNVxuICAgICAgICBjbGljayBidXR0b24gXCJPS1wiIG9mIHdpbmRvdyBmZWF0dXJlTmFtZVxuICAgICAgICBkZWxheSAwLjVcbiAgICAgICAgc2V0IGlzSW52aXNpYmxlIHRvIChub3QgKGV4aXN0cyAod2luZG93IGZlYXR1cmVOYW1lKSkpXG4gICAgICBlbmQgdGVsbFxuICAgIGVuZCB0ZWxsXG4gIGApO1xuICBsb2cuZGVidWcoYEdlb2xvY2F0aW9uIHBhcmFtZXRlcnMgZGlhbG9nIGFjY2VwdGVkOiAke291dHB1dH1gKTtcbiAgaWYgKF8udHJpbShvdXRwdXQpICE9PSAndHJ1ZScpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZXQgZ2VvbG9jYXRpb24gd2l0aCBBcHBsZVNjcmlwdC4gT3JpZ2luYWwgZXJyb3I6ICR7b3V0cHV0fWApO1xuICB9XG59XG5cbmV4cG9ydCB7XG4gIHNldExvY2F0aW9uV2l0aEx5ZnQsIHNldExvY2F0aW9uV2l0aElkYiwgc2V0TG9jYXRpb25XaXRoQXBwbGVTY3JpcHRcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLGlCQUFpQixHQUFHLHdCQUF3QjtBQUNsRCxNQUFNQyx3QkFBd0IsR0FBSTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFZRCxlQUFlQyxtQkFBbUIsQ0FBRUMsSUFBSSxFQUFFQyxRQUFRLEVBQUVDLFNBQVMsRUFBRTtFQUM3RCxJQUFJO0lBQ0YsTUFBTUMsV0FBRSxDQUFDQyxLQUFLLENBQUNQLGlCQUFpQixDQUFDO0VBQ25DLENBQUMsQ0FBQyxPQUFPUSxDQUFDLEVBQUU7SUFDVixNQUFNLElBQUlDLEtBQUssQ0FBRSxJQUFHVCxpQkFBa0IsNENBQTJDLEdBQy9FLHNGQUFzRixHQUN0RixxRkFBcUYsR0FDckYsNENBQTRDLENBQUM7RUFDakQ7RUFFQSxJQUFJO0lBQ0YsTUFBTSxJQUFBVSxrQkFBSSxFQUFDVixpQkFBaUIsRUFBRSxDQUM1QixJQUFJLEVBQUVJLFFBQVEsRUFBRUMsU0FBUyxFQUN6QixJQUFJLEVBQUVGLElBQUksQ0FDWCxDQUFDO0VBQ0osQ0FBQyxDQUFDLE9BQU9LLENBQUMsRUFBRTtJQUNWLE1BQU0sSUFBSUMsS0FBSyxDQUFFLG1DQUFrQ1QsaUJBQWtCLEtBQUksR0FDdEUsbUJBQWtCUSxDQUFDLENBQUNHLE1BQU0sSUFBSUgsQ0FBQyxDQUFDSSxPQUFRLEVBQUMsQ0FBQztFQUMvQztBQUNGO0FBWUEsZUFBZUMsa0JBQWtCLENBQUVDLEdBQUcsRUFBRVYsUUFBUSxFQUFFQyxTQUFTLEVBQUU7RUFDM0QsSUFBSSxDQUFDUyxHQUFHLEVBQUU7SUFDUixNQUFNLElBQUlMLEtBQUssQ0FBQyw4R0FBOEcsQ0FBQztFQUNqSTtFQUVBLElBQUk7SUFDRixNQUFNSyxHQUFHLENBQUNDLFdBQVcsQ0FBQ1gsUUFBUSxFQUFFQyxTQUFTLENBQUM7RUFDNUMsQ0FBQyxDQUFDLE9BQU9HLENBQUMsRUFBRTtJQUNWLE1BQU0sSUFBSUMsS0FBSyxDQUFFLHVEQUFzREQsQ0FBQyxDQUFDRyxNQUFNLElBQUlILENBQUMsQ0FBQ0ksT0FBUSxFQUFDLENBQUM7RUFDakc7QUFDRjtBQWNBLGVBQWVJLDBCQUEwQixDQUFFQyxHQUFHLEVBQUViLFFBQVEsRUFBRUMsU0FBUyxFQUFFYSxJQUFJLEdBQUcsT0FBTyxFQUFFO0VBRW5GLE1BQU07SUFBQ0MsTUFBTTtJQUFFUjtFQUFNLENBQUMsR0FBRyxNQUFNLElBQUFELGtCQUFJLEVBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFVCx3QkFBd0IsQ0FBQyxDQUFDO0VBQ2xGLE1BQU1tQixnQkFBZ0IsR0FBR0MsZUFBQyxDQUFDQyxJQUFJLENBQUNILE1BQU0sSUFBSVIsTUFBTSxDQUFDO0VBQ2pELE1BQU0sQ0FBQ1ksV0FBVyxFQUFFQyxZQUFZLENBQUMsR0FBRyxDQUFDcEIsUUFBUSxFQUFFQyxTQUFTLENBQUMsQ0FDdERvQixHQUFHLENBQUVDLEtBQUssSUFBTSxHQUFFQSxLQUFNLEVBQUMsQ0FBQ0MsT0FBTyxDQUFDLE1BQU0sRUFBRVAsZ0JBQWdCLENBQUMsQ0FBQztFQUUvRCxNQUFNUSxNQUFNLEdBQUcsTUFBTVgsR0FBRyxDQUFDWSxxQkFBcUIsQ0FBRTtBQUNsRDtBQUNBO0FBQ0E7QUFDQSx5SEFBeUhYLElBQUs7QUFDOUg7QUFDQTtBQUNBLDhEQUE4REssV0FBWTtBQUMxRTtBQUNBLDhEQUE4REMsWUFBYTtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLENBQUM7RUFDRk0sZUFBRyxDQUFDQyxLQUFLLENBQUUsMkNBQTBDSCxNQUFPLEVBQUMsQ0FBQztFQUM5RCxJQUFJUCxlQUFDLENBQUNDLElBQUksQ0FBQ00sTUFBTSxDQUFDLEtBQUssTUFBTSxFQUFFO0lBQzdCLE1BQU0sSUFBSW5CLEtBQUssQ0FBRSwrREFBOERtQixNQUFPLEVBQUMsQ0FBQztFQUMxRjtBQUNGIn0=
|