webdriverio-automation
Version:
WebdriverIO-Automation android ios project
173 lines (120 loc) • 19.1 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
require("source-map-support/register");
var _lodash = _interopRequireDefault(require("lodash"));
var _logger = _interopRequireDefault(require("../logger"));
var _protocol = require("../../protocol");
var _uuidJs = _interopRequireDefault(require("uuid-js"));
var _capabilities = require("../capabilities");
let commands = {};
commands.createSession = async function createSession(jsonwpDesiredCapabilities, jsonwpRequiredCaps, w3cCapabilities) {
if (this.sessionId !== null) {
throw new _protocol.errors.SessionNotCreatedError('Cannot create a new session ' + 'while one is in progress');
}
_logger.default.debug();
let caps;
if (w3cCapabilities) {
this.setProtocolW3C();
if (jsonwpDesiredCapabilities) {
_logger.default.debug(`W3C capabilities and MJSONWP desired capabilities were provided`);
}
if (jsonwpDesiredCapabilities && !_lodash.default.isPlainObject(w3cCapabilities)) {
if (!_lodash.default.isEmpty(w3cCapabilities)) {
_logger.default.warn(`Expected W3C "capabilities" to be a JSON Object but was provided with: ${JSON.stringify(w3cCapabilities)}`);
}
_logger.default.warn(`Falling back to MJSONWP desired capabilities`);
this.setProtocolMJSONWP();
caps = jsonwpDesiredCapabilities;
} else {
_logger.default.debug(`Creating session with W3C capabilities: ${JSON.stringify(w3cCapabilities, null, 2)}`);
caps = (0, _capabilities.processCapabilities)(w3cCapabilities, this.desiredCapConstraints, this.shouldValidateCaps);
}
} else {
this.setProtocolMJSONWP();
_logger.default.debug(`Creating session with MJSONWP desired capabilities: ${JSON.stringify(jsonwpDesiredCapabilities, null, 2)}`);
caps = jsonwpDesiredCapabilities || {};
}
caps = fixCaps(caps, this.desiredCapConstraints);
this.validateDesiredCaps(caps);
this.sessionId = _uuidJs.default.create().hex;
this.caps = caps;
this.opts = _lodash.default.cloneDeep(this.initialOpts);
Object.assign(this.opts, this.caps);
if (this.opts.noReset && this.opts.fullReset) {
throw new Error("The 'noReset' and 'fullReset' capabilities are mutually " + 'exclusive and should not both be set to true. You ' + "probably meant to just use 'fullReset' on its own");
}
if (this.opts.noReset === true) {
this.opts.fullReset = false;
}
if (this.opts.fullReset === true) {
this.opts.noReset = false;
}
this.opts.fastReset = !this.opts.fullReset && !this.opts.noReset;
this.opts.skipUninstall = this.opts.fastReset || this.opts.noReset;
if (typeof this.opts.app === 'string' && this.opts.app.trim() === '') {
this.opts.app = null;
}
if (!_lodash.default.isUndefined(this.caps.newCommandTimeout)) {
this.newCommandTimeoutMs = this.caps.newCommandTimeout * 1000;
}
this.resetOnUnexpectedShutdown();
_logger.default.info(`Session created with session id: ${this.sessionId}`);
return [this.sessionId, caps];
};
commands.getSessions = async function getSessions() {
let ret = [];
if (this.sessionId) {
ret.push({
id: this.sessionId,
capabilities: this.caps
});
}
return ret;
};
commands.getSession = async function getSession() {
if (this.caps.eventTimings) {
return Object.assign({}, this.caps, {
events: this.eventHistory
});
}
return this.caps;
};
commands.deleteSession = async function deleteSession() {
this.clearNewCommandTimeout();
this.sessionId = null;
};
function fixCaps(originalCaps, desiredCapConstraints = {}) {
let caps = _lodash.default.clone(originalCaps);
let booleanCaps = _lodash.default.keys(_lodash.default.pickBy(desiredCapConstraints, k => k.isBoolean === true));
for (let cap of booleanCaps) {
let value = originalCaps[cap];
if (_lodash.default.isString(value)) {
value = value.toLowerCase();
if (value === 'true' || value === 'false') {
_logger.default.warn(`Capability '${cap}' changed from string to boolean. This may cause unexpected behavior`);
caps[cap] = value === 'true';
}
}
}
let intCaps = _lodash.default.keys(_lodash.default.pickBy(desiredCapConstraints, k => k.isNumber === true));
for (let cap of intCaps) {
let value = originalCaps[cap];
if (_lodash.default.isString(value) && !isNaN(value)) {
value = value.trim();
let newValue = parseInt(value, 10);
if (value !== `${newValue}`) {
newValue = parseFloat(value);
}
_logger.default.warn(`Capability '${cap}' changed from string ('${value}') to integer (${newValue}). This may cause unexpected behavior`);
caps[cap] = newValue;
}
}
return caps;
}
var _default = commands;
exports.default = _default;require('source-map-support').install();
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL3Nlc3Npb24uanMiXSwibmFtZXMiOlsiY29tbWFuZHMiLCJjcmVhdGVTZXNzaW9uIiwianNvbndwRGVzaXJlZENhcGFiaWxpdGllcyIsImpzb253cFJlcXVpcmVkQ2FwcyIsInczY0NhcGFiaWxpdGllcyIsInNlc3Npb25JZCIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJsb2ciLCJkZWJ1ZyIsImNhcHMiLCJzZXRQcm90b2NvbFczQyIsIl8iLCJpc1BsYWluT2JqZWN0IiwiaXNFbXB0eSIsIndhcm4iLCJKU09OIiwic3RyaW5naWZ5Iiwic2V0UHJvdG9jb2xNSlNPTldQIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwiZml4Q2FwcyIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJVVUlEIiwiY3JlYXRlIiwiaGV4Iiwib3B0cyIsImNsb25lRGVlcCIsImluaXRpYWxPcHRzIiwiT2JqZWN0IiwiYXNzaWduIiwibm9SZXNldCIsImZ1bGxSZXNldCIsIkVycm9yIiwiZmFzdFJlc2V0Iiwic2tpcFVuaW5zdGFsbCIsImFwcCIsInRyaW0iLCJpc1VuZGVmaW5lZCIsIm5ld0NvbW1hbmRUaW1lb3V0IiwibmV3Q29tbWFuZFRpbWVvdXRNcyIsInJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24iLCJpbmZvIiwiZ2V0U2Vzc2lvbnMiLCJyZXQiLCJwdXNoIiwiaWQiLCJjYXBhYmlsaXRpZXMiLCJnZXRTZXNzaW9uIiwiZXZlbnRUaW1pbmdzIiwiZXZlbnRzIiwiZXZlbnRIaXN0b3J5IiwiZGVsZXRlU2Vzc2lvbiIsImNsZWFyTmV3Q29tbWFuZFRpbWVvdXQiLCJvcmlnaW5hbENhcHMiLCJjbG9uZSIsImJvb2xlYW5DYXBzIiwia2V5cyIsInBpY2tCeSIsImsiLCJpc0Jvb2xlYW4iLCJjYXAiLCJ2YWx1ZSIsImlzU3RyaW5nIiwidG9Mb3dlckNhc2UiLCJpbnRDYXBzIiwiaXNOdW1iZXIiLCJpc05hTiIsIm5ld1ZhbHVlIiwicGFyc2VJbnQiLCJwYXJzZUZsb2F0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLElBQUlBLFFBQVEsR0FBRyxFQUFmOztBQUVBQSxRQUFRLENBQUNDLGFBQVQsR0FBeUIsZUFBZUEsYUFBZixDQUE4QkMseUJBQTlCLEVBQXlEQyxrQkFBekQsRUFBNkVDLGVBQTdFLEVBQThGO0FBQ3JILE1BQUksS0FBS0MsU0FBTCxLQUFtQixJQUF2QixFQUE2QjtBQUMzQixVQUFNLElBQUlDLGlCQUFPQyxzQkFBWCxDQUFrQyxpQ0FDQSwwQkFEbEMsQ0FBTjtBQUVEOztBQUVEQyxrQkFBSUMsS0FBSjs7QUFHQSxNQUFJQyxJQUFKOztBQUNBLE1BQUlOLGVBQUosRUFBcUI7QUFDbkIsU0FBS08sY0FBTDs7QUFDQSxRQUFJVCx5QkFBSixFQUErQjtBQUM3Qk0sc0JBQUlDLEtBQUosQ0FBVyxpRUFBWDtBQUNEOztBQUVELFFBQUlQLHlCQUF5QixJQUFJLENBQUNVLGdCQUFFQyxhQUFGLENBQWdCVCxlQUFoQixDQUFsQyxFQUFvRTtBQUdsRSxVQUFJLENBQUNRLGdCQUFFRSxPQUFGLENBQVVWLGVBQVYsQ0FBTCxFQUFpQztBQUMvQkksd0JBQUlPLElBQUosQ0FBVSwwRUFBeUVDLElBQUksQ0FBQ0MsU0FBTCxDQUFlYixlQUFmLENBQWdDLEVBQW5IO0FBQ0Q7O0FBQ0RJLHNCQUFJTyxJQUFKLENBQVUsOENBQVY7O0FBQ0EsV0FBS0csa0JBQUw7QUFDQVIsTUFBQUEsSUFBSSxHQUFHUix5QkFBUDtBQUNELEtBVEQsTUFTTztBQUNMTSxzQkFBSUMsS0FBSixDQUFXLDJDQUEwQ08sSUFBSSxDQUFDQyxTQUFMLENBQWViLGVBQWYsRUFBZ0MsSUFBaEMsRUFBc0MsQ0FBdEMsQ0FBeUMsRUFBOUY7O0FBQ0FNLE1BQUFBLElBQUksR0FBRyx1Q0FBb0JOLGVBQXBCLEVBQXFDLEtBQUtlLHFCQUExQyxFQUFpRSxLQUFLQyxrQkFBdEUsQ0FBUDtBQUNEO0FBQ0YsR0FuQkQsTUFtQk87QUFDTCxTQUFLRixrQkFBTDs7QUFDQVYsb0JBQUlDLEtBQUosQ0FBVyx1REFBc0RPLElBQUksQ0FBQ0MsU0FBTCxDQUFlZix5QkFBZixFQUEwQyxJQUExQyxFQUFnRCxDQUFoRCxDQUFtRCxFQUFwSDs7QUFDQVEsSUFBQUEsSUFBSSxHQUFHUix5QkFBeUIsSUFBSSxFQUFwQztBQUNEOztBQUVEUSxFQUFBQSxJQUFJLEdBQUdXLE9BQU8sQ0FBQ1gsSUFBRCxFQUFPLEtBQUtTLHFCQUFaLENBQWQ7QUFDQSxPQUFLRyxtQkFBTCxDQUF5QlosSUFBekI7QUFFQSxPQUFLTCxTQUFMLEdBQWlCa0IsZ0JBQUtDLE1BQUwsR0FBY0MsR0FBL0I7QUFDQSxPQUFLZixJQUFMLEdBQVlBLElBQVo7QUFDQSxPQUFLZ0IsSUFBTCxHQUFZZCxnQkFBRWUsU0FBRixDQUFZLEtBQUtDLFdBQWpCLENBQVo7QUFHQUMsRUFBQUEsTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBS0osSUFBbkIsRUFBeUIsS0FBS2hCLElBQTlCOztBQUtBLE1BQUksS0FBS2dCLElBQUwsQ0FBVUssT0FBVixJQUFxQixLQUFLTCxJQUFMLENBQVVNLFNBQW5DLEVBQThDO0FBQzVDLFVBQU0sSUFBSUMsS0FBSixDQUFVLDZEQUNBLG9EQURBLEdBRUEsbURBRlYsQ0FBTjtBQUdEOztBQUNELE1BQUksS0FBS1AsSUFBTCxDQUFVSyxPQUFWLEtBQXNCLElBQTFCLEVBQWdDO0FBQzlCLFNBQUtMLElBQUwsQ0FBVU0sU0FBVixHQUFzQixLQUF0QjtBQUNEOztBQUNELE1BQUksS0FBS04sSUFBTCxDQUFVTSxTQUFWLEtBQXdCLElBQTVCLEVBQWtDO0FBQ2hDLFNBQUtOLElBQUwsQ0FBVUssT0FBVixHQUFvQixLQUFwQjtBQUNEOztBQUNELE9BQUtMLElBQUwsQ0FBVVEsU0FBVixHQUFzQixDQUFDLEtBQUtSLElBQUwsQ0FBVU0sU0FBWCxJQUF3QixDQUFDLEtBQUtOLElBQUwsQ0FBVUssT0FBekQ7QUFDQSxPQUFLTCxJQUFMLENBQVVTLGFBQVYsR0FBMEIsS0FBS1QsSUFBTCxDQUFVUSxTQUFWLElBQXVCLEtBQUtSLElBQUwsQ0FBVUssT0FBM0Q7O0FBR0EsTUFBSSxPQUFPLEtBQUtMLElBQUwsQ0FBVVUsR0FBakIsS0FBeUIsUUFBekIsSUFBcUMsS0FBS1YsSUFBTCxDQUFVVSxHQUFWLENBQWNDLElBQWQsT0FBeUIsRUFBbEUsRUFBc0U7QUFDcEUsU0FBS1gsSUFBTCxDQUFVVSxHQUFWLEdBQWdCLElBQWhCO0FBQ0Q7O0FBRUQsTUFBSSxDQUFDeEIsZ0JBQUUwQixXQUFGLENBQWMsS0FBSzVCLElBQUwsQ0FBVTZCLGlCQUF4QixDQUFMLEVBQWlEO0FBQy9DLFNBQUtDLG1CQUFMLEdBQTRCLEtBQUs5QixJQUFMLENBQVU2QixpQkFBVixHQUE4QixJQUExRDtBQUNEOztBQUlELE9BQUtFLHlCQUFMOztBQUVBakMsa0JBQUlrQyxJQUFKLENBQVUsb0NBQW1DLEtBQUtyQyxTQUFVLEVBQTVEOztBQUVBLFNBQU8sQ0FBQyxLQUFLQSxTQUFOLEVBQWlCSyxJQUFqQixDQUFQO0FBQ0QsQ0E5RUQ7O0FBZ0ZBVixRQUFRLENBQUMyQyxXQUFULEdBQXVCLGVBQWVBLFdBQWYsR0FBOEI7QUFDbkQsTUFBSUMsR0FBRyxHQUFHLEVBQVY7O0FBRUEsTUFBSSxLQUFLdkMsU0FBVCxFQUFvQjtBQUNsQnVDLElBQUFBLEdBQUcsQ0FBQ0MsSUFBSixDQUFTO0FBQ1BDLE1BQUFBLEVBQUUsRUFBRSxLQUFLekMsU0FERjtBQUVQMEMsTUFBQUEsWUFBWSxFQUFFLEtBQUtyQztBQUZaLEtBQVQ7QUFJRDs7QUFFRCxTQUFPa0MsR0FBUDtBQUNELENBWEQ7O0FBYUE1QyxRQUFRLENBQUNnRCxVQUFULEdBQXNCLGVBQWVBLFVBQWYsR0FBNkI7QUFDakQsTUFBSSxLQUFLdEMsSUFBTCxDQUFVdUMsWUFBZCxFQUE0QjtBQUMxQixXQUFPcEIsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQixLQUFLcEIsSUFBdkIsRUFBNkI7QUFBQ3dDLE1BQUFBLE1BQU0sRUFBRSxLQUFLQztBQUFkLEtBQTdCLENBQVA7QUFDRDs7QUFDRCxTQUFPLEtBQUt6QyxJQUFaO0FBQ0QsQ0FMRDs7QUFPQVYsUUFBUSxDQUFDb0QsYUFBVCxHQUF5QixlQUFlQSxhQUFmLEdBQStDO0FBQ3RFLE9BQUtDLHNCQUFMO0FBQ0EsT0FBS2hELFNBQUwsR0FBaUIsSUFBakI7QUFDRCxDQUhEOztBQUtBLFNBQVNnQixPQUFULENBQWtCaUMsWUFBbEIsRUFBZ0NuQyxxQkFBcUIsR0FBRyxFQUF4RCxFQUE0RDtBQUMxRCxNQUFJVCxJQUFJLEdBQUdFLGdCQUFFMkMsS0FBRixDQUFRRCxZQUFSLENBQVg7O0FBSUEsTUFBSUUsV0FBVyxHQUFHNUMsZ0JBQUU2QyxJQUFGLENBQU83QyxnQkFBRThDLE1BQUYsQ0FBU3ZDLHFCQUFULEVBQWlDd0MsQ0FBRCxJQUFPQSxDQUFDLENBQUNDLFNBQUYsS0FBZ0IsSUFBdkQsQ0FBUCxDQUFsQjs7QUFDQSxPQUFLLElBQUlDLEdBQVQsSUFBZ0JMLFdBQWhCLEVBQTZCO0FBQzNCLFFBQUlNLEtBQUssR0FBR1IsWUFBWSxDQUFDTyxHQUFELENBQXhCOztBQUNBLFFBQUlqRCxnQkFBRW1ELFFBQUYsQ0FBV0QsS0FBWCxDQUFKLEVBQXVCO0FBQ3JCQSxNQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ0UsV0FBTixFQUFSOztBQUNBLFVBQUlGLEtBQUssS0FBSyxNQUFWLElBQW9CQSxLQUFLLEtBQUssT0FBbEMsRUFBMkM7QUFDekN0RCx3QkFBSU8sSUFBSixDQUFVLGVBQWM4QyxHQUFJLHNFQUE1Qjs7QUFDQW5ELFFBQUFBLElBQUksQ0FBQ21ELEdBQUQsQ0FBSixHQUFhQyxLQUFLLEtBQUssTUFBdkI7QUFDRDtBQUNGO0FBQ0Y7O0FBR0QsTUFBSUcsT0FBTyxHQUFHckQsZ0JBQUU2QyxJQUFGLENBQU83QyxnQkFBRThDLE1BQUYsQ0FBU3ZDLHFCQUFULEVBQWlDd0MsQ0FBRCxJQUFPQSxDQUFDLENBQUNPLFFBQUYsS0FBZSxJQUF0RCxDQUFQLENBQWQ7O0FBQ0EsT0FBSyxJQUFJTCxHQUFULElBQWdCSSxPQUFoQixFQUF5QjtBQUN2QixRQUFJSCxLQUFLLEdBQUdSLFlBQVksQ0FBQ08sR0FBRCxDQUF4Qjs7QUFDQSxRQUFJakQsZ0JBQUVtRCxRQUFGLENBQVdELEtBQVgsS0FBcUIsQ0FBQ0ssS0FBSyxDQUFDTCxLQUFELENBQS9CLEVBQXdDO0FBQ3RDQSxNQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ3pCLElBQU4sRUFBUjtBQUNBLFVBQUkrQixRQUFRLEdBQUdDLFFBQVEsQ0FBQ1AsS0FBRCxFQUFRLEVBQVIsQ0FBdkI7O0FBQ0EsVUFBSUEsS0FBSyxLQUFNLEdBQUVNLFFBQVMsRUFBMUIsRUFBNkI7QUFDM0JBLFFBQUFBLFFBQVEsR0FBR0UsVUFBVSxDQUFDUixLQUFELENBQXJCO0FBQ0Q7O0FBQ0R0RCxzQkFBSU8sSUFBSixDQUFVLGVBQWM4QyxHQUFJLDJCQUEwQkMsS0FBTSxrQkFBaUJNLFFBQVMsdUNBQXRGOztBQUNBMUQsTUFBQUEsSUFBSSxDQUFDbUQsR0FBRCxDQUFKLEdBQVlPLFFBQVo7QUFDRDtBQUNGOztBQUVELFNBQU8xRCxJQUFQO0FBQ0Q7O2VBRWNWLFEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByZXF1aXJlLWF3YWl0ICovXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnLi4vLi4vcHJvdG9jb2wnO1xuaW1wb3J0IFVVSUQgZnJvbSAndXVpZC1qcyc7XG5pbXBvcnQgeyBwcm9jZXNzQ2FwYWJpbGl0aWVzIH0gZnJvbSAnLi4vY2FwYWJpbGl0aWVzJztcblxubGV0IGNvbW1hbmRzID0ge307XG5cbmNvbW1hbmRzLmNyZWF0ZVNlc3Npb24gPSBhc3luYyBmdW5jdGlvbiBjcmVhdGVTZXNzaW9uIChqc29ud3BEZXNpcmVkQ2FwYWJpbGl0aWVzLCBqc29ud3BSZXF1aXJlZENhcHMsIHczY0NhcGFiaWxpdGllcykge1xuICBpZiAodGhpcy5zZXNzaW9uSWQgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgYSBuZXcgc2Vzc2lvbiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3doaWxlIG9uZSBpcyBpbiBwcm9ncmVzcycpO1xuICB9XG5cbiAgbG9nLmRlYnVnKCk7XG5cbiAgLy8gRGV0ZXJtaW5lIHdlYXRoZXIgd2Ugc2hvdWxkIHVzZSBqc29ud3BEZXNpcmVkQ2FwYWJpbGl0aWVzIG9yIHczY0NhcGFiaWxpdGllcyB0byBnZXQgY2FwcyBmcm9tXG4gIGxldCBjYXBzO1xuICBpZiAodzNjQ2FwYWJpbGl0aWVzKSB7XG4gICAgdGhpcy5zZXRQcm90b2NvbFczQygpO1xuICAgIGlmIChqc29ud3BEZXNpcmVkQ2FwYWJpbGl0aWVzKSB7XG4gICAgICBsb2cuZGVidWcoYFczQyBjYXBhYmlsaXRpZXMgYW5kIE1KU09OV1AgZGVzaXJlZCBjYXBhYmlsaXRpZXMgd2VyZSBwcm92aWRlZGApO1xuICAgIH1cblxuICAgIGlmIChqc29ud3BEZXNpcmVkQ2FwYWJpbGl0aWVzICYmICFfLmlzUGxhaW5PYmplY3QodzNjQ2FwYWJpbGl0aWVzKSkge1xuICAgICAgLy8gSWYgVzNDIENhcGFiaWxpdGllcyBhbmQgTUpTT05XUCBDYXBhYmlsaXRpZXMgd2VyZSBwcm92aWRlZCBhbmQgVzNDIGNhcHMgYXJlbid0IGEgcGxhaW4gb2JqZWN0LFxuICAgICAgLy8gbG9nIGEgd2FybmluZyBhbmQgZmFsbCBiYWNrIHRvIE1KU09OV1BcbiAgICAgIGlmICghXy5pc0VtcHR5KHczY0NhcGFiaWxpdGllcykpIHtcbiAgICAgICAgbG9nLndhcm4oYEV4cGVjdGVkIFczQyBcImNhcGFiaWxpdGllc1wiIHRvIGJlIGEgSlNPTiBPYmplY3QgYnV0IHdhcyBwcm92aWRlZCB3aXRoOiAke0pTT04uc3RyaW5naWZ5KHczY0NhcGFiaWxpdGllcyl9YCk7XG4gICAgICB9XG4gICAgICBsb2cud2FybihgRmFsbGluZyBiYWNrIHRvIE1KU09OV1AgZGVzaXJlZCBjYXBhYmlsaXRpZXNgKTtcbiAgICAgIHRoaXMuc2V0UHJvdG9jb2xNSlNPTldQKCk7XG4gICAgICBjYXBzID0ganNvbndwRGVzaXJlZENhcGFiaWxpdGllcztcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmRlYnVnKGBDcmVhdGluZyBzZXNzaW9uIHdpdGggVzNDIGNhcGFiaWxpdGllczogJHtKU09OLnN0cmluZ2lmeSh3M2NDYXBhYmlsaXRpZXMsIG51bGwsIDIpfWApO1xuICAgICAgY2FwcyA9IHByb2Nlc3NDYXBhYmlsaXRpZXModzNjQ2FwYWJpbGl0aWVzLCB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cywgdGhpcy5zaG91bGRWYWxpZGF0ZUNhcHMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLnNldFByb3RvY29sTUpTT05XUCgpO1xuICAgIGxvZy5kZWJ1ZyhgQ3JlYXRpbmcgc2Vzc2lvbiB3aXRoIE1KU09OV1AgZGVzaXJlZCBjYXBhYmlsaXRpZXM6ICR7SlNPTi5zdHJpbmdpZnkoanNvbndwRGVzaXJlZENhcGFiaWxpdGllcywgbnVsbCwgMil9YCk7XG4gICAgY2FwcyA9IGpzb253cERlc2lyZWRDYXBhYmlsaXRpZXMgfHwge307XG4gIH1cblxuICBjYXBzID0gZml4Q2FwcyhjYXBzLCB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyk7XG4gIHRoaXMudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKTtcblxuICB0aGlzLnNlc3Npb25JZCA9IFVVSUQuY3JlYXRlKCkuaGV4O1xuICB0aGlzLmNhcHMgPSBjYXBzO1xuICB0aGlzLm9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLmluaXRpYWxPcHRzKTtcblxuICAvLyBtZXJnZSBjYXBzIG9udG8gb3B0cyBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHdoYXQncyB3aGVyZVxuICBPYmplY3QuYXNzaWduKHRoaXMub3B0cywgdGhpcy5jYXBzKTtcblxuICAvLyBkZWFsIHdpdGggcmVzZXRzXG4gIC8vIHNvbWUgcGVvcGxlIGxpa2UgdG8gZG8gd2VpcmQgdGhpbmdzIGJ5IHNldHRpbmcgbm9SZXNldCBhbmQgZnVsbFJlc2V0XG4gIC8vIGJvdGggdG8gdHJ1ZSwgYnV0IHRoaXMgaXMgbWlzZ3VpZGVkIGFuZCBzdHJhbmdlLCBzbyBlcnJvciBoZXJlIGluc3RlYWRcbiAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0ICYmIHRoaXMub3B0cy5mdWxsUmVzZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgJ25vUmVzZXQnIGFuZCAnZnVsbFJlc2V0JyBjYXBhYmlsaXRpZXMgYXJlIG11dHVhbGx5IFwiICtcbiAgICAgICAgICAgICAgICAgICAgJ2V4Y2x1c2l2ZSBhbmQgc2hvdWxkIG5vdCBib3RoIGJlIHNldCB0byB0cnVlLiBZb3UgJyArXG4gICAgICAgICAgICAgICAgICAgIFwicHJvYmFibHkgbWVhbnQgdG8ganVzdCB1c2UgJ2Z1bGxSZXNldCcgb24gaXRzIG93blwiKTtcbiAgfVxuICBpZiAodGhpcy5vcHRzLm5vUmVzZXQgPT09IHRydWUpIHtcbiAgICB0aGlzLm9wdHMuZnVsbFJlc2V0ID0gZmFsc2U7XG4gIH1cbiAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQgPT09IHRydWUpIHtcbiAgICB0aGlzLm9wdHMubm9SZXNldCA9IGZhbHNlO1xuICB9XG4gIHRoaXMub3B0cy5mYXN0UmVzZXQgPSAhdGhpcy5vcHRzLmZ1bGxSZXNldCAmJiAhdGhpcy5vcHRzLm5vUmVzZXQ7XG4gIHRoaXMub3B0cy5za2lwVW5pbnN0YWxsID0gdGhpcy5vcHRzLmZhc3RSZXNldCB8fCB0aGlzLm9wdHMubm9SZXNldDtcblxuICAvLyBQcmV2ZW50cyBlbXB0eSBzdHJpbmcgY2FwcyBzbyB3ZSBkb24ndCBuZWVkIHRvIHRlc3QgaXQgZXZlcnl3aGVyZVxuICBpZiAodHlwZW9mIHRoaXMub3B0cy5hcHAgPT09ICdzdHJpbmcnICYmIHRoaXMub3B0cy5hcHAudHJpbSgpID09PSAnJykge1xuICAgIHRoaXMub3B0cy5hcHAgPSBudWxsO1xuICB9XG5cbiAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuY2Fwcy5uZXdDb21tYW5kVGltZW91dCkpIHtcbiAgICB0aGlzLm5ld0NvbW1hbmRUaW1lb3V0TXMgPSAodGhpcy5jYXBzLm5ld0NvbW1hbmRUaW1lb3V0ICogMTAwMCk7XG4gIH1cblxuICAvLyBXZSBuZWVkIHRvIGluaW5pdGlhbGl6ZSBvbmUgb25VbmV4cGVjdGVkU2h1dGRvdyBwcm9taXNlIHBlciBzZXNzaW9uXG4gIC8vIHRvIGF2b2lkIHRoZSBwcm9taXNlIGZ1bGZpbG1lbnQgYmVpbmcgcHJvcGFnYXRlZCBiZXR3ZWVuIHNlc3Npb25zLlxuICB0aGlzLnJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24oKTtcblxuICBsb2cuaW5mbyhgU2Vzc2lvbiBjcmVhdGVkIHdpdGggc2Vzc2lvbiBpZDogJHt0aGlzLnNlc3Npb25JZH1gKTtcblxuICByZXR1cm4gW3RoaXMuc2Vzc2lvbklkLCBjYXBzXTtcbn07XG5cbmNvbW1hbmRzLmdldFNlc3Npb25zID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2Vzc2lvbnMgKCkge1xuICBsZXQgcmV0ID0gW107XG5cbiAgaWYgKHRoaXMuc2Vzc2lvbklkKSB7XG4gICAgcmV0LnB1c2goe1xuICAgICAgaWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgY2FwYWJpbGl0aWVzOiB0aGlzLmNhcHNcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG5jb21tYW5kcy5nZXRTZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2Vzc2lvbiAoKSB7XG4gIGlmICh0aGlzLmNhcHMuZXZlbnRUaW1pbmdzKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY2Fwcywge2V2ZW50czogdGhpcy5ldmVudEhpc3Rvcnl9KTtcbiAgfVxuICByZXR1cm4gdGhpcy5jYXBzO1xufTtcblxuY29tbWFuZHMuZGVsZXRlU2Vzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVNlc3Npb24gKC8qIHNlc3Npb25JZCAqLykge1xuICB0aGlzLmNsZWFyTmV3Q29tbWFuZFRpbWVvdXQoKTtcbiAgdGhpcy5zZXNzaW9uSWQgPSBudWxsO1xufTtcblxuZnVuY3Rpb24gZml4Q2FwcyAob3JpZ2luYWxDYXBzLCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgPSB7fSkge1xuICBsZXQgY2FwcyA9IF8uY2xvbmUob3JpZ2luYWxDYXBzKTtcblxuICAvLyBib29sZWFuIGNhcGFiaWxpdGllcyBjYW4gYmUgcGFzc2VkIGluIGFzIHN0cmluZ3MgJ2ZhbHNlJyBhbmQgJ3RydWUnXG4gIC8vIHdoaWNoIHdlIHdhbnQgdG8gdHJhbnNsYXRlIGludG8gYm9vbGVhbiB2YWx1ZXNcbiAgbGV0IGJvb2xlYW5DYXBzID0gXy5rZXlzKF8ucGlja0J5KGRlc2lyZWRDYXBDb25zdHJhaW50cywgKGspID0+IGsuaXNCb29sZWFuID09PSB0cnVlKSk7XG4gIGZvciAobGV0IGNhcCBvZiBib29sZWFuQ2Fwcykge1xuICAgIGxldCB2YWx1ZSA9IG9yaWdpbmFsQ2Fwc1tjYXBdO1xuICAgIGlmIChfLmlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgbG9nLndhcm4oYENhcGFiaWxpdHkgJyR7Y2FwfScgY2hhbmdlZCBmcm9tIHN0cmluZyB0byBib29sZWFuLiBUaGlzIG1heSBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9yYCk7XG4gICAgICAgIGNhcHNbY2FwXSA9ICh2YWx1ZSA9PT0gJ3RydWUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBpbnQgY2FwYWJpbGl0aWVzIGFyZSBvZnRlbiBzZW50IGluIGFzIHN0cmluZ3MgYnkgZnJhbWV3b3Jrc1xuICBsZXQgaW50Q2FwcyA9IF8ua2V5cyhfLnBpY2tCeShkZXNpcmVkQ2FwQ29uc3RyYWludHMsIChrKSA9PiBrLmlzTnVtYmVyID09PSB0cnVlKSk7XG4gIGZvciAobGV0IGNhcCBvZiBpbnRDYXBzKSB7XG4gICAgbGV0IHZhbHVlID0gb3JpZ2luYWxDYXBzW2NhcF07XG4gICAgaWYgKF8uaXNTdHJpbmcodmFsdWUpICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgICAgbGV0IG5ld1ZhbHVlID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gYCR7bmV3VmFsdWV9YCkge1xuICAgICAgICBuZXdWYWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgfVxuICAgICAgbG9nLndhcm4oYENhcGFiaWxpdHkgJyR7Y2FwfScgY2hhbmdlZCBmcm9tIHN0cmluZyAoJyR7dmFsdWV9JykgdG8gaW50ZWdlciAoJHtuZXdWYWx1ZX0pLiBUaGlzIG1heSBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9yYCk7XG4gICAgICBjYXBzW2NhcF0gPSBuZXdWYWx1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2Fwcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL3Nlc3Npb24uanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4ifQ==