@appium/base-driver 8.7.0 → 8.7.2
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/build/lib/basedriver/capabilities.d.ts +207 -42
- package/build/lib/basedriver/capabilities.d.ts.map +1 -1
- package/build/lib/basedriver/capabilities.js +39 -44
- package/build/lib/basedriver/capabilities.js.map +1 -0
- package/build/lib/basedriver/commands/event.js +3 -3
- package/build/lib/basedriver/commands/event.js.map +1 -0
- package/build/lib/basedriver/commands/execute.js +3 -3
- package/build/lib/basedriver/commands/execute.js.map +1 -0
- package/build/lib/basedriver/commands/find.js.map +1 -0
- package/build/lib/basedriver/commands/index.js.map +1 -0
- package/build/lib/basedriver/commands/log.js +3 -3
- package/build/lib/basedriver/commands/log.js.map +1 -0
- package/build/lib/basedriver/commands/session.js +3 -3
- package/build/lib/basedriver/commands/session.js.map +1 -0
- package/build/lib/basedriver/commands/settings.js.map +1 -0
- package/build/lib/basedriver/commands/timeout.js +3 -3
- package/build/lib/basedriver/commands/timeout.js.map +1 -0
- package/build/lib/basedriver/core.d.ts +173 -22
- package/build/lib/basedriver/core.d.ts.map +1 -1
- package/build/lib/basedriver/core.js +4 -6
- package/build/lib/basedriver/core.js.map +1 -0
- package/build/lib/basedriver/desired-caps.d.ts +0 -2
- package/build/lib/basedriver/desired-caps.d.ts.map +1 -1
- package/build/lib/basedriver/desired-caps.js +4 -53
- package/build/lib/basedriver/desired-caps.js.map +1 -0
- package/build/lib/basedriver/device-settings.js +3 -3
- package/build/lib/basedriver/device-settings.js.map +1 -0
- package/build/lib/basedriver/driver.d.ts +318 -28
- package/build/lib/basedriver/driver.d.ts.map +1 -1
- package/build/lib/basedriver/driver.js +23 -30
- package/build/lib/basedriver/driver.js.map +1 -0
- package/build/lib/basedriver/helpers.d.ts +1 -1
- package/build/lib/basedriver/helpers.d.ts.map +1 -1
- package/build/lib/basedriver/helpers.js +3 -3
- package/build/lib/basedriver/helpers.js.map +1 -0
- package/build/lib/basedriver/logger.js.map +1 -0
- package/build/lib/constants.js.map +1 -0
- package/build/lib/express/crash.js.map +1 -0
- package/build/lib/express/express-logging.js +3 -3
- package/build/lib/express/express-logging.js.map +1 -0
- package/build/lib/express/idempotency.js +3 -3
- package/build/lib/express/idempotency.js.map +1 -0
- package/build/lib/express/logger.js.map +1 -0
- package/build/lib/express/middleware.js +3 -3
- package/build/lib/express/middleware.js.map +1 -0
- package/build/lib/express/server.js +3 -3
- package/build/lib/express/server.js.map +1 -0
- package/build/lib/express/static.js +3 -3
- package/build/lib/express/static.js.map +1 -0
- package/build/lib/express/websocket.js +3 -3
- package/build/lib/express/websocket.js.map +1 -0
- package/build/lib/helpers/capabilities.d.ts +66 -5
- package/build/lib/helpers/capabilities.d.ts.map +1 -1
- package/build/lib/helpers/capabilities.js +7 -7
- package/build/lib/helpers/capabilities.js.map +1 -0
- package/build/lib/index.d.ts +1 -1
- package/build/lib/index.d.ts.map +1 -1
- package/build/lib/index.js +10 -3
- package/build/lib/index.js.map +1 -0
- package/build/lib/jsonwp-proxy/protocol-converter.js +3 -3
- package/build/lib/jsonwp-proxy/protocol-converter.js.map +1 -0
- package/build/lib/jsonwp-proxy/proxy.js +3 -3
- package/build/lib/jsonwp-proxy/proxy.js.map +1 -0
- package/build/lib/jsonwp-status/status.js +3 -3
- package/build/lib/jsonwp-status/status.js.map +1 -0
- package/build/lib/protocol/errors.js +3 -3
- package/build/lib/protocol/errors.js.map +1 -0
- package/build/lib/protocol/helpers.js +3 -3
- package/build/lib/protocol/helpers.js.map +1 -0
- package/build/lib/protocol/index.js.map +1 -0
- package/build/lib/protocol/protocol.js +3 -3
- package/build/lib/protocol/protocol.js.map +1 -0
- package/build/lib/protocol/routes.js +3 -3
- package/build/lib/protocol/routes.js.map +1 -0
- package/build/lib/protocol/validators.js +3 -3
- package/build/lib/protocol/validators.js.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/lib/basedriver/capabilities.js +151 -93
- package/lib/basedriver/core.js +35 -19
- package/lib/basedriver/desired-caps.js +1 -53
- package/lib/basedriver/driver.js +98 -51
- package/lib/helpers/capabilities.js +19 -9
- package/lib/index.js +1 -0
- package/package.json +10 -11
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
@@ -24,6 +22,8 @@ var _support = require("@appium/support");
|
|
|
24
22
|
|
|
25
23
|
var _httpStatusCodes = require("http-status-codes");
|
|
26
24
|
|
|
25
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
26
|
+
|
|
27
27
|
const mjsonwpLog = _support.logger.getLogger('MJSONWP');
|
|
28
28
|
|
|
29
29
|
const w3cLog = _support.logger.getLogger('W3C');
|
|
@@ -1015,4 +1015,4 @@ function getResponseForJsonwpError(err) {
|
|
|
1015
1015
|
|
|
1016
1016
|
return [httpStatus, httpResBody];
|
|
1017
1017
|
}
|
|
1018
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtanNvbndwTG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidzNjTG9nIiwiVzNDX1VOS05PV05fRVJST1IiLCJQcm90b2NvbEVycm9yIiwiRVM2RXJyb3IiLCJjb25zdHJ1Y3RvciIsIm1zZyIsImpzb253cENvZGUiLCJ3M2NTdGF0dXMiLCJlcnJvciIsIkhUVFBTdGF0dXNDb2RlcyIsIkJBRF9SRVFVRVNUIiwiX3N0YWNrdHJhY2UiLCJzdGFja3RyYWNlIiwic3RhY2siLCJ2YWx1ZSIsIk5vU3VjaERyaXZlckVycm9yIiwiY29kZSIsIk5PVF9GT1VORCIsImVyciIsIk5vU3VjaEVsZW1lbnRFcnJvciIsIk5vU3VjaEZyYW1lRXJyb3IiLCJVbmtub3duQ29tbWFuZEVycm9yIiwiU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IiLCJFbGVtZW50Tm90VmlzaWJsZUVycm9yIiwiSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yIiwiVW5rbm93bkVycm9yIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwiZXJyb3JPck1lc3NhZ2UiLCJvcmlnTWVzc2FnZSIsIl8iLCJpc1N0cmluZyIsIm1lc3NhZ2UiLCJVbmtub3duTWV0aG9kRXJyb3IiLCJNRVRIT0RfTk9UX0FMTE9XRUQiLCJVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yIiwiRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yIiwiRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvciIsIkVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvciIsIkluc2VjdXJlQ2VydGlmaWNhdGVFcnJvciIsIkphdmFTY3JpcHRFcnJvciIsIlhQYXRoTG9va3VwRXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJSRVFVRVNUX1RJTUVPVVQiLCJOb1N1Y2hXaW5kb3dFcnJvciIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiSW52YWxpZENvb2tpZURvbWFpbkVycm9yIiwiTm9TdWNoQ29va2llRXJyb3IiLCJVbmFibGVUb1NldENvb2tpZUVycm9yIiwiVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIiwiTm9BbGVydE9wZW5FcnJvciIsIk5vU3VjaEFsZXJ0RXJyb3IiLCJTY3JpcHRUaW1lb3V0RXJyb3IiLCJJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IiLCJJbnZhbGlkQ29vcmRpbmF0ZXNFcnJvciIsIklNRU5vdEF2YWlsYWJsZUVycm9yIiwiSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yIiwiSW52YWxpZFNlbGVjdG9yRXJyb3IiLCJTZXNzaW9uTm90Q3JlYXRlZEVycm9yIiwiZGV0YWlscyIsIk1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yIiwiTm9TdWNoQ29udGV4dEVycm9yIiwiSW52YWxpZENvbnRleHRFcnJvciIsIk5vdFlldEltcGxlbWVudGVkRXJyb3IiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiVW5hYmxlVG9DYXB0dXJlU2NyZWVuIiwiQmFkUGFyYW1ldGVyc0Vycm9yIiwicmVxdWlyZWRQYXJhbXMiLCJhY3R1YWxQYXJhbXMiLCJlcnJNZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsIlByb3h5UmVxdWVzdEVycm9yIiwicmVzcG9uc2VFcnJvciIsImh0dHBTdGF0dXMiLCJyZXNwb25zZUVycm9yT2JqIiwidXRpbCIsInNhZmVKc29uUGFyc2UiLCJpc1BsYWluT2JqZWN0IiwiaXNFbXB0eSIsImhhcyIsInczYyIsImpzb253cCIsImdldEFjdHVhbEVycm9yIiwiaGFzVmFsdWUiLCJzdGF0dXMiLCJlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSIsImlzTnVtYmVyIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJlcnJvcnMiLCJqc29ud3BFcnJvckNvZGVNYXAiLCJFcnJvckNsYXNzIiwidmFsdWVzIiwidzNjRXJyb3JDb2RlTWFwIiwiaXNVbmtub3duRXJyb3IiLCJuYW1lIiwiZmluZCIsImVxdWFsTmFtZXMiLCJpc0Vycm9yVHlwZSIsInR5cGUiLCJkZWJ1ZyIsInRvTG93ZXJDYXNlIiwicmVzdWx0RXJyb3IiLCJpc1Byb3RvY29sRXJyb3IiLCJnZXRSZXNwb25zZUZvclczQ0Vycm9yIiwidzNjRXJyb3JTdHJpbmciLCJodHRwUmVzQm9keSIsImdldFJlc3BvbnNlRm9ySnNvbndwRXJyb3IiLCJOT1RfSU1QTEVNRU5URUQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvcHJvdG9jb2wvZXJyb3JzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFUzZFcnJvciBmcm9tICdlczYtZXJyb3InO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7dXRpbCwgbG9nZ2VyfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHtTdGF0dXNDb2RlcyBhcyBIVFRQU3RhdHVzQ29kZXN9IGZyb20gJ2h0dHAtc3RhdHVzLWNvZGVzJztcblxuY29uc3QgbWpzb253cExvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ01KU09OV1AnKTtcbmNvbnN0IHczY0xvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1czQycpO1xuXG5jb25zdCBXM0NfVU5LTk9XTl9FUlJPUiA9ICd1bmtub3duIGVycm9yJztcblxuLy8gYmFzZSBlcnJvciBjbGFzcyBmb3IgYWxsIG9mIG91ciBlcnJvcnNcbmV4cG9ydCBjbGFzcyBQcm90b2NvbEVycm9yIGV4dGVuZHMgRVM2RXJyb3Ige1xuICBjb25zdHJ1Y3Rvcihtc2csIGpzb253cENvZGUsIHczY1N0YXR1cywgZXJyb3IpIHtcbiAgICBzdXBlcihtc2cpO1xuICAgIHRoaXMuanNvbndwQ29kZSA9IGpzb253cENvZGU7XG4gICAgdGhpcy5lcnJvciA9IGVycm9yIHx8IFczQ19VTktOT1dOX0VSUk9SO1xuICAgIGlmICh0aGlzLmpzb253cENvZGUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuanNvbndwQ29kZSA9IDEzO1xuICAgIH1cbiAgICB0aGlzLnczY1N0YXR1cyA9IHczY1N0YXR1cyB8fCBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gICAgdGhpcy5fc3RhY2t0cmFjZSA9IG51bGw7XG4gIH1cblxuICBnZXQgc3RhY2t0cmFjZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhY2t0cmFjZSB8fCB0aGlzLnN0YWNrO1xuICB9XG5cbiAgc2V0IHN0YWNrdHJhY2UodmFsdWUpIHtcbiAgICB0aGlzLl9zdGFja3RyYWNlID0gdmFsdWU7XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL1NlbGVuaXVtSFEvc2VsZW5pdW0vYmxvYi8xNzZiNGE5ZTMwODJhYzE5MjZmMmE0MzZlYjM0Njc2MGMzN2E1OTk4L2phdmEvY2xpZW50L3NyYy9vcmcvb3BlbnFhL3NlbGVuaXVtL3JlbW90ZS9FcnJvckNvZGVzLmphdmEjTDIxNVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL1NlbGVuaXVtSFEvc2VsZW5pdW0vaXNzdWVzLzU1NjIjaXNzdWVjb21tZW50LTM3MDM3OTQ3MFxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI2Rmbi1lcnJvci1jb2RlXG5cbmV4cG9ydCBjbGFzcyBOb1N1Y2hEcml2ZXJFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gNjtcbiAgfVxuICAvLyBXM0MgRXJyb3IgaXMgY2FsbGVkIEludmFsaWRTZXNzaW9uSURcbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIHNlc3Npb24gaWQnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBIHNlc3Npb24gaXMgZWl0aGVyIHRlcm1pbmF0ZWQgb3Igbm90IHN0YXJ0ZWQnLFxuICAgICAgTm9TdWNoRHJpdmVyRXJyb3IuY29kZSgpLFxuICAgICAgTm9TdWNoRHJpdmVyRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBOb1N1Y2hEcml2ZXJFcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoRWxlbWVudEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA3O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCBlbGVtZW50JztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fCAnQW4gZWxlbWVudCBjb3VsZCBub3QgYmUgbG9jYXRlZCBvbiB0aGUgcGFnZSB1c2luZyB0aGUgZ2l2ZW4gJyArICdzZWFyY2ggcGFyYW1ldGVycy4nLFxuICAgICAgTm9TdWNoRWxlbWVudEVycm9yLmNvZGUoKSxcbiAgICAgIE5vU3VjaEVsZW1lbnRFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIE5vU3VjaEVsZW1lbnRFcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoRnJhbWVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gODtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdubyBzdWNoIGZyYW1lJztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8XG4gICAgICAgICdBIHJlcXVlc3QgdG8gc3dpdGNoIHRvIGEgZnJhbWUgY291bGQgbm90IGJlIHNhdGlzZmllZCBiZWNhdXNlICcgK1xuICAgICAgICAgICd0aGUgZnJhbWUgY291bGQgbm90IGJlIGZvdW5kLicsXG4gICAgICBOb1N1Y2hGcmFtZUVycm9yLmNvZGUoKSxcbiAgICAgIE5vU3VjaEZyYW1lRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBOb1N1Y2hGcmFtZUVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmtub3duQ29tbWFuZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA5O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAndW5rbm93biBjb21tYW5kJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fFxuICAgICAgICAnVGhlIHJlcXVlc3RlZCByZXNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQsIG9yIGEgcmVxdWVzdCB3YXMgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkIHVzaW5nIGFuIEhUVFAgbWV0aG9kIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbWFwcGVkICcgK1xuICAgICAgICAgICdyZXNvdXJjZS4nLFxuICAgICAgVW5rbm93bkNvbW1hbmRFcnJvci5jb2RlKCksXG4gICAgICBVbmtub3duQ29tbWFuZEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgVW5rbm93bkNvbW1hbmRFcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDEwO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnc3RhbGUgZWxlbWVudCByZWZlcmVuY2UnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8XG4gICAgICAgICdBbiBlbGVtZW50IGNvbW1hbmQgZmFpbGVkIGJlY2F1c2UgdGhlIHJlZmVyZW5jZWQgZWxlbWVudCBpcyBubyAnICtcbiAgICAgICAgICAnbG9uZ2VyIGF0dGFjaGVkIHRvIHRoZSBET00uJyxcbiAgICAgIFN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yLmNvZGUoKSxcbiAgICAgIFN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDExO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdlbGVtZW50IG5vdCB2aXNpYmxlJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fFxuICAgICAgICAnQW4gZWxlbWVudCBjb21tYW5kIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyAnICtcbiAgICAgICAgICAnbm90IHZpc2libGUgb24gdGhlIHBhZ2UuJyxcbiAgICAgIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IuY29kZSgpLFxuICAgICAgRWxlbWVudE5vdFZpc2libGVFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRFbGVtZW50U3RhdGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMTI7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgZWxlbWVudCBzdGF0ZSc7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHxcbiAgICAgICAgJ0FuIGVsZW1lbnQgY29tbWFuZCBjb3VsZCBub3QgYmUgY29tcGxldGVkIGJlY2F1c2UgdGhlIGVsZW1lbnQgaXMgJyArXG4gICAgICAgICAgJ2luIGFuIGludmFsaWQgc3RhdGUgKGUuZy4gYXR0ZW1wdGluZyB0byBjbGljayBhIGRpc2FibGVkIGVsZW1lbnQpLicsXG4gICAgICBJbnZhbGlkRWxlbWVudFN0YXRlRXJyb3IuY29kZSgpLFxuICAgICAgSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmtub3duRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDEzO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiBXM0NfVU5LTk9XTl9FUlJPUjtcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnJvck9yTWVzc2FnZSkge1xuICAgIGNvbnN0IG9yaWdNZXNzYWdlID0gXy5pc1N0cmluZygoZXJyb3JPck1lc3NhZ2UgfHwge30pLm1lc3NhZ2UpXG4gICAgICA/IGVycm9yT3JNZXNzYWdlLm1lc3NhZ2VcbiAgICAgIDogZXJyb3JPck1lc3NhZ2U7XG4gICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAnQW4gdW5rbm93biBzZXJ2ZXItc2lkZSBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIHRoZSBjb21tYW5kLicgK1xuICAgICAgKG9yaWdNZXNzYWdlID8gYCBPcmlnaW5hbCBlcnJvcjogJHtvcmlnTWVzc2FnZX1gIDogJycpO1xuICAgIHN1cGVyKG1lc3NhZ2UsIFVua25vd25FcnJvci5jb2RlKCksIFVua25vd25FcnJvci53M2NTdGF0dXMoKSwgVW5rbm93bkVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmtub3duTWV0aG9kRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDQwNTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTUVUSE9EX05PVF9BTExPV0VEO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ3Vua25vd24gbWV0aG9kJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fCAnVGhlIHJlcXVlc3RlZCBjb21tYW5kIG1hdGNoZWQgYSBrbm93biBVUkwgYnV0IGRpZCBub3QgbWF0Y2ggYW4gbWV0aG9kIGZvciB0aGF0IFVSTCcsXG4gICAgICBVbmtub3duTWV0aG9kRXJyb3IuY29kZSgpLFxuICAgICAgVW5rbm93bk1ldGhvZEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgVW5rbm93bk1ldGhvZEVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA0MDU7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICd1bnN1cHBvcnRlZCBvcGVyYXRpb24nO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBIHNlcnZlci1zaWRlIGVycm9yIG9jY3VycmVkLiBDb21tYW5kIGNhbm5vdCBiZSBzdXBwb3J0ZWQuJyxcbiAgICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IuY29kZSgpLFxuICAgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMTU7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnZWxlbWVudCBub3Qgc2VsZWN0YWJsZSc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIHNlbGVjdCBhbiBlbGVtZW50IHRoYXQgY2Fubm90IGJlIHNlbGVjdGVkLicsXG4gICAgICBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IuY29kZSgpLFxuICAgICAgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA2NDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdlbGVtZW50IGNsaWNrIGludGVyY2VwdGVkJztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHxcbiAgICAgICAgJ1RoZSBFbGVtZW50IENsaWNrIGNvbW1hbmQgY291bGQgbm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZSBlbGVtZW50IHJlY2VpdmluZyAnICtcbiAgICAgICAgICAndGhlIGV2ZW50cyBpcyBvYnNjdXJpbmcgdGhlIGVsZW1lbnQgdGhhdCB3YXMgcmVxdWVzdGVkIGNsaWNrZWQnLFxuICAgICAgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvci5jb2RlKCksXG4gICAgICBFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA2MDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdlbGVtZW50IG5vdCBpbnRlcmFjdGFibGUnO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fFxuICAgICAgICAnQSBjb21tYW5kIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyBub3QgcG9pbnRlci0gb3Iga2V5Ym9hcmQgaW50ZXJhY3RhYmxlJyxcbiAgICAgIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvci5jb2RlKCksXG4gICAgICBFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEluc2VjdXJlQ2VydGlmaWNhdGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnNlY3VyZSBjZXJ0aWZpY2F0ZSc7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHxcbiAgICAgICAgJ05hdmlnYXRpb24gY2F1c2VkIHRoZSB1c2VyIGFnZW50IHRvIGhpdCBhIGNlcnRpZmljYXRlIHdhcm5pbmcsIHdoaWNoIGlzIHVzdWFsbHkgdGhlIHJlc3VsdCBvZiBhbiBleHBpcmVkIG9yIGludmFsaWQgVExTIGNlcnRpZmljYXRlJyxcbiAgICAgIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvci5jb2RlKCksXG4gICAgICBudWxsLFxuICAgICAgSW5zZWN1cmVDZXJ0aWZpY2F0ZUVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBKYXZhU2NyaXB0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDE3O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnamF2YXNjcmlwdCBlcnJvcic7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHwgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGV4ZWN1dGluZyB1c2VyIHN1cHBsaWVkIEphdmFTY3JpcHQuJyxcbiAgICAgIEphdmFTY3JpcHRFcnJvci5jb2RlKCksXG4gICAgICBKYXZhU2NyaXB0RXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBKYXZhU2NyaXB0RXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFhQYXRoTG9va3VwRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDE5O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIHNlbGVjdG9yJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fCAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2VhcmNoaW5nIGZvciBhbiBlbGVtZW50IGJ5IFhQYXRoLicsXG4gICAgICBYUGF0aExvb2t1cEVycm9yLmNvZGUoKSxcbiAgICAgIFhQYXRoTG9va3VwRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBYUGF0aExvb2t1cEVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDIxO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5SRVFVRVNUX1RJTUVPVVQ7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAndGltZW91dCc7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHwgJ0FuIG9wZXJhdGlvbiBkaWQgbm90IGNvbXBsZXRlIGJlZm9yZSBpdHMgdGltZW91dCBleHBpcmVkLicsXG4gICAgICBUaW1lb3V0RXJyb3IuY29kZSgpLFxuICAgICAgVGltZW91dEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgVGltZW91dEVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb1N1Y2hXaW5kb3dFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMjM7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCB3aW5kb3cnO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHxcbiAgICAgICAgJ0EgcmVxdWVzdCB0byBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgd2luZG93IGNvdWxkIG5vdCBiZSBzYXRpc2ZpZWQgJyArXG4gICAgICAgICAgJ2JlY2F1c2UgdGhlIHdpbmRvdyBjb3VsZCBub3QgYmUgZm91bmQuJyxcbiAgICAgIE5vU3VjaFdpbmRvd0Vycm9yLmNvZGUoKSxcbiAgICAgIE5vU3VjaFdpbmRvd0Vycm9yLnczY1N0YXR1cygpLFxuICAgICAgTm9TdWNoV2luZG93RXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA2MTtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGFyZ3VtZW50JztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHwgJ1RoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBjb21tYW5kIGFyZSBlaXRoZXIgaW52YWxpZCBvciBtYWxmb3JtZWQnLFxuICAgICAgSW52YWxpZEFyZ3VtZW50RXJyb3IuY29kZSgpLFxuICAgICAgSW52YWxpZEFyZ3VtZW50RXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBJbnZhbGlkQXJndW1lbnRFcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZENvb2tpZURvbWFpbkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiAyNDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGNvb2tpZSBkb21haW4nO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fFxuICAgICAgICAnQW4gaWxsZWdhbCBhdHRlbXB0IHdhcyBtYWRlIHRvIHNldCBhIGNvb2tpZSB1bmRlciBhIGRpZmZlcmVudCAnICtcbiAgICAgICAgICAnZG9tYWluIHRoYW4gdGhlIGN1cnJlbnQgcGFnZS4nLFxuICAgICAgSW52YWxpZENvb2tpZURvbWFpbkVycm9yLmNvZGUoKSxcbiAgICAgIEludmFsaWRDb29raWVEb21haW5FcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIEludmFsaWRDb29raWVEb21haW5FcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoQ29va2llRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDYyO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCBjb29raWUnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8XG4gICAgICAgICdObyBjb29raWUgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGggbmFtZSB3YXMgZm91bmQgYW1vbmdzdCB0aGUgYXNzb2NpYXRlZCBjb29raWVzIG9mIHRoZSBjdXJyZW50IGJyb3dzaW5nIGNvbnRleHTigJlzIGFjdGl2ZSBkb2N1bWVudCcsXG4gICAgICBOb1N1Y2hDb29raWVFcnJvci5jb2RlKCksXG4gICAgICBOb1N1Y2hDb29raWVFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIE5vU3VjaENvb2tpZUVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmFibGVUb1NldENvb2tpZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiAyNTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ3VuYWJsZSB0byBzZXQgY29va2llJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fCBcIkEgcmVxdWVzdCB0byBzZXQgYSBjb29raWUncyB2YWx1ZSBjb3VsZCBub3QgYmUgc2F0aXNmaWVkLlwiLFxuICAgICAgVW5hYmxlVG9TZXRDb29raWVFcnJvci5jb2RlKCksXG4gICAgICBVbmFibGVUb1NldENvb2tpZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgVW5hYmxlVG9TZXRDb29raWVFcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiAyNjtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ3VuZXhwZWN0ZWQgYWxlcnQgb3Blbic7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHwgJ0EgbW9kYWwgZGlhbG9nIHdhcyBvcGVuLCBibG9ja2luZyB0aGlzIG9wZXJhdGlvbicsXG4gICAgICBVbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IuY29kZSgpLFxuICAgICAgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLnczY1N0YXR1cygpLFxuICAgICAgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb0FsZXJ0T3BlbkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiAyNztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ25vIHN1Y2ggYWxlcnQnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIG9wZXJhdGUgb24gYSBtb2RhbCBkaWFsb2cgd2hlbiBvbmUgJyArICd3YXMgbm90IG9wZW4uJyxcbiAgICAgIE5vQWxlcnRPcGVuRXJyb3IuY29kZSgpLFxuICAgICAgTm9BbGVydE9wZW5FcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIE5vQWxlcnRPcGVuRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vU3VjaEFsZXJ0RXJyb3IgZXh0ZW5kcyBOb0FsZXJ0T3BlbkVycm9yIHt9XG5cbmV4cG9ydCBjbGFzcyBTY3JpcHRUaW1lb3V0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDI4O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5SRVFVRVNUX1RJTUVPVVQ7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnc2NyaXB0IHRpbWVvdXQnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBIHNjcmlwdCBkaWQgbm90IGNvbXBsZXRlIGJlZm9yZSBpdHMgdGltZW91dCBleHBpcmVkLicsXG4gICAgICBTY3JpcHRUaW1lb3V0RXJyb3IuY29kZSgpLFxuICAgICAgU2NyaXB0VGltZW91dEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgU2NyaXB0VGltZW91dEVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDI5O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGNvb3JkaW5hdGVzJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fCAnVGhlIGNvb3JkaW5hdGVzIHByb3ZpZGVkIHRvIGFuIGludGVyYWN0aW9ucyBvcGVyYXRpb24gYXJlIGludmFsaWQuJyxcbiAgICAgIEludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFcnJvci5jb2RlKCksXG4gICAgICBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRDb29yZGluYXRlc0Vycm9yIGV4dGVuZHMgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yIHt9XG5cbmV4cG9ydCBjbGFzcyBJTUVOb3RBdmFpbGFibGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMzA7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICd1bnN1cHBvcnRlZCBvcGVyYXRpb24nO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdJTUUgd2FzIG5vdCBhdmFpbGFibGUuJyxcbiAgICAgIElNRU5vdEF2YWlsYWJsZUVycm9yLmNvZGUoKSxcbiAgICAgIElNRU5vdEF2YWlsYWJsZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgSU1FTm90QXZhaWxhYmxlRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMzE7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICd1bnN1cHBvcnRlZCBvcGVyYXRpb24nO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBbiBJTUUgZW5naW5lIGNvdWxkIG5vdCBiZSBzdGFydGVkLicsXG4gICAgICBJTUVFbmdpbmVBY3RpdmF0aW9uRmFpbGVkRXJyb3IuY29kZSgpLFxuICAgICAgSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkU2VsZWN0b3JFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMzI7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgc2VsZWN0b3InO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBcmd1bWVudCB3YXMgYW4gaW52YWxpZCBzZWxlY3RvciAoZS5nLiBYUGF0aC9DU1MpLicsXG4gICAgICBJbnZhbGlkU2VsZWN0b3JFcnJvci5jb2RlKCksXG4gICAgICBJbnZhbGlkU2VsZWN0b3JFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIEludmFsaWRTZWxlY3RvckVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uTm90Q3JlYXRlZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiAzMztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ3Nlc3Npb24gbm90IGNyZWF0ZWQnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGRldGFpbHMpIHtcbiAgICBsZXQgbWVzc2FnZSA9ICdBIG5ldyBzZXNzaW9uIGNvdWxkIG5vdCBiZSBjcmVhdGVkLic7XG4gICAgaWYgKGRldGFpbHMpIHtcbiAgICAgIG1lc3NhZ2UgKz0gYCBEZXRhaWxzOiAke2RldGFpbHN9YDtcbiAgICB9XG5cbiAgICBzdXBlcihcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBTZXNzaW9uTm90Q3JlYXRlZEVycm9yLmNvZGUoKSxcbiAgICAgIFNlc3Npb25Ob3RDcmVhdGVkRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBTZXNzaW9uTm90Q3JlYXRlZEVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMzQ7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdtb3ZlIHRhcmdldCBvdXQgb2YgYm91bmRzJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fCAnVGFyZ2V0IHByb3ZpZGVkIGZvciBhIG1vdmUgYWN0aW9uIGlzIG91dCBvZiBib3VuZHMuJyxcbiAgICAgIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yLmNvZGUoKSxcbiAgICAgIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yLnczY1N0YXR1cygpLFxuICAgICAgTW92ZVRhcmdldE91dE9mQm91bmRzRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vU3VjaENvbnRleHRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMzU7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdObyBzdWNoIGNvbnRleHQgZm91bmQuJywgTm9TdWNoQ29udGV4dEVycm9yLmNvZGUoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRDb250ZXh0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDM2O1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdUaGF0IGNvbW1hbmQgY291bGQgbm90IGJlIGV4ZWN1dGVkIGluIHRoZSBjdXJyZW50IGNvbnRleHQuJyxcbiAgICAgIEludmFsaWRDb250ZXh0RXJyb3IuY29kZSgpXG4gICAgKTtcbiAgfVxufVxuXG4vLyBUaGVzZSBhcmUgYWxpYXNlcyBmb3IgVW5rbm93bk1ldGhvZEVycm9yXG5leHBvcnQgY2xhc3MgTm90WWV0SW1wbGVtZW50ZWRFcnJvciBleHRlbmRzIFVua25vd25NZXRob2RFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTWV0aG9kIGhhcyBub3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBVbmtub3duTWV0aG9kRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ01ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5hYmxlVG9DYXB0dXJlU2NyZWVuIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ3VuYWJsZSB0byBjYXB0dXJlIHNjcmVlbic7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHwgJ0Egc2NyZWVuIGNhcHR1cmUgd2FzIG1hZGUgaW1wb3NzaWJsZScsXG4gICAgICBVbmFibGVUb0NhcHR1cmVTY3JlZW4uY29kZSgpLFxuICAgICAgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLnczY1N0YXR1cygpLFxuICAgICAgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbi8vIEVxdWl2YWxlbnQgdG8gVzNDIEludmFsaWRBcmd1bWVudEVycm9yXG5leHBvcnQgY2xhc3MgQmFkUGFyYW1ldGVyc0Vycm9yIGV4dGVuZHMgRVM2RXJyb3Ige1xuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGFyZ3VtZW50JztcbiAgfVxuICBjb25zdHJ1Y3RvcihyZXF1aXJlZFBhcmFtcywgYWN0dWFsUGFyYW1zLCBlcnJNZXNzYWdlKSB7XG4gICAgbGV0IG1lc3NhZ2U7XG4gICAgaWYgKCFlcnJNZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlID1cbiAgICAgICAgYFBhcmFtZXRlcnMgd2VyZSBpbmNvcnJlY3QuIFdlIHdhbnRlZCBgICtcbiAgICAgICAgYCR7SlNPTi5zdHJpbmdpZnkocmVxdWlyZWRQYXJhbXMpfSBhbmQgeW91IGAgK1xuICAgICAgICBgc2VudCAke0pTT04uc3RyaW5naWZ5KGFjdHVhbFBhcmFtcyl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZSA9IGBQYXJhbWV0ZXJzIHdlcmUgaW5jb3JyZWN0LiBZb3Ugc2VudCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBhY3R1YWxQYXJhbXNcbiAgICAgICl9LCAke2Vyck1lc3NhZ2V9YDtcbiAgICB9XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy53M2NTdGF0dXMgPSBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm94eVJlcXVlc3RFcnJvciBpcyBhIGN1c3RvbSBlcnJvciBhbmQgd2lsbCBiZSB0aHJvd24gdXAgb24gdW5zdWNjZXNzZnVsIHByb3h5IHJlcXVlc3QgYW5kXG4gKiB3aWxsIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb3h5IGZhaWx1cmUuXG4gKiBJbiBjYXNlIG9mIFByb3h5UmVxdWVzdEVycm9yIHNob3VsZCBmZXRjaCB0aGUgYWN0dWFsIGVycm9yIGJ5IGNhbGxpbmcgYGdldEFjdHVhbEVycm9yKClgXG4gKiBmb3IgcHJveHkgZmFpbHVyZSB0byBnZW5lcmF0ZSB0aGUgY2xpZW50IHJlc3BvbnNlLlxuICovXG5leHBvcnQgY2xhc3MgUHJveHlSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFUzZFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGVyciwgcmVzcG9uc2VFcnJvciwgaHR0cFN0YXR1cykge1xuICAgIGxldCByZXNwb25zZUVycm9yT2JqID0gdXRpbC5zYWZlSnNvblBhcnNlKHJlc3BvbnNlRXJyb3IpO1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlRXJyb3JPYmopKSB7XG4gICAgICByZXNwb25zZUVycm9yT2JqID0ge307XG4gICAgfVxuICAgIGxldCBvcmlnTWVzc2FnZSA9IF8uaXNTdHJpbmcocmVzcG9uc2VFcnJvcikgPyByZXNwb25zZUVycm9yIDogJyc7XG4gICAgaWYgKCFfLmlzRW1wdHkocmVzcG9uc2VFcnJvck9iaikpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKHJlc3BvbnNlRXJyb3JPYmoudmFsdWUpKSB7XG4gICAgICAgIG9yaWdNZXNzYWdlID0gcmVzcG9uc2VFcnJvck9iai52YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIF8uaXNQbGFpbk9iamVjdChyZXNwb25zZUVycm9yT2JqLnZhbHVlKSAmJlxuICAgICAgICBfLmlzU3RyaW5nKHJlc3BvbnNlRXJyb3JPYmoudmFsdWUubWVzc2FnZSlcbiAgICAgICkge1xuICAgICAgICBvcmlnTWVzc2FnZSA9IHJlc3BvbnNlRXJyb3JPYmoudmFsdWUubWVzc2FnZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIoXy5pc0VtcHR5KGVycikgPyBgUHJveHkgcmVxdWVzdCB1bnN1Y2Nlc3NmdWwuICR7b3JpZ01lc3NhZ2V9YCA6IGVycik7XG5cbiAgICB0aGlzLnczY1N0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcblxuICAgIC8vIElmIHRoZSByZXNwb25zZSBlcnJvciBpcyBhbiBvYmplY3QgYW5kIHZhbHVlIGlzIGFuIG9iamVjdCwgaXQncyBhIFczQyBlcnJvciAoZm9yIEpTT05XUCB2YWx1ZSBpcyBhIHN0cmluZylcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlRXJyb3JPYmoudmFsdWUpICYmIF8uaGFzKHJlc3BvbnNlRXJyb3JPYmoudmFsdWUsICdlcnJvcicpKSB7XG4gICAgICB0aGlzLnczYyA9IHJlc3BvbnNlRXJyb3JPYmoudmFsdWU7XG4gICAgICB0aGlzLnczY1N0YXR1cyA9IGh0dHBTdGF0dXMgfHwgSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmpzb253cCA9IHJlc3BvbnNlRXJyb3JPYmo7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWN0dWFsRXJyb3IoKSB7XG4gICAgLy8gSWYgaXQncyBNSlNPTldQIGVycm9yLCByZXR1cm5zIGFjdHVhbCBlcnJvciBjYXVzZSBmb3IgcmVxdWVzdCBmYWlsdXJlIGJhc2VkIG9uIGBqc29ud3Auc3RhdHVzYFxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMuanNvbndwPy5zdGF0dXMpICYmIHV0aWwuaGFzVmFsdWUodGhpcy5qc29ud3A/LnZhbHVlKSkge1xuICAgICAgcmV0dXJuIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKHRoaXMuanNvbndwLnN0YXR1cywgdGhpcy5qc29ud3AudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLnczYykgJiYgXy5pc051bWJlcih0aGlzLnczY1N0YXR1cykgJiYgdGhpcy53M2NTdGF0dXMgPj0gMzAwKSB7XG4gICAgICByZXR1cm4gZXJyb3JGcm9tVzNDSnNvbkNvZGUoXG4gICAgICAgIHRoaXMudzNjLmVycm9yLFxuICAgICAgICB0aGlzLnczYy5tZXNzYWdlIHx8IHRoaXMubWVzc2FnZSxcbiAgICAgICAgdGhpcy53M2Muc3RhY2t0cmFjZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBVbmtub3duRXJyb3IodGhpcy5tZXNzYWdlKTtcbiAgfVxufVxuLy8gbWFwIG9mIGVycm9yIGNsYXNzIG5hbWUgdG8gZXJyb3IgY2xhc3NcbmNvbnN0IGVycm9ycyA9IHtcbiAgTm90WWV0SW1wbGVtZW50ZWRFcnJvcixcbiAgTm90SW1wbGVtZW50ZWRFcnJvcixcbiAgQmFkUGFyYW1ldGVyc0Vycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgTm9TdWNoRHJpdmVyRXJyb3IsXG4gIE5vU3VjaEVsZW1lbnRFcnJvcixcbiAgVW5rbm93bkNvbW1hbmRFcnJvcixcbiAgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IsXG4gIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IsXG4gIEludmFsaWRFbGVtZW50U3RhdGVFcnJvcixcbiAgVW5rbm93bkVycm9yLFxuICBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IsXG4gIEVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IsXG4gIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvcixcbiAgSW5zZWN1cmVDZXJ0aWZpY2F0ZUVycm9yLFxuICBKYXZhU2NyaXB0RXJyb3IsXG4gIFhQYXRoTG9va3VwRXJyb3IsXG4gIFRpbWVvdXRFcnJvcixcbiAgTm9TdWNoV2luZG93RXJyb3IsXG4gIE5vU3VjaENvb2tpZUVycm9yLFxuICBJbnZhbGlkQ29va2llRG9tYWluRXJyb3IsXG4gIEludmFsaWRDb29yZGluYXRlc0Vycm9yLFxuICBVbmFibGVUb1NldENvb2tpZUVycm9yLFxuICBVbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IsXG4gIE5vQWxlcnRPcGVuRXJyb3IsXG4gIFNjcmlwdFRpbWVvdXRFcnJvcixcbiAgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yLFxuICBJTUVOb3RBdmFpbGFibGVFcnJvcixcbiAgSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yLFxuICBJbnZhbGlkU2VsZWN0b3JFcnJvcixcbiAgU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcixcbiAgTW92ZVRhcmdldE91dE9mQm91bmRzRXJyb3IsXG4gIE5vU3VjaEFsZXJ0RXJyb3IsXG4gIE5vU3VjaENvbnRleHRFcnJvcixcbiAgSW52YWxpZENvbnRleHRFcnJvcixcbiAgTm9TdWNoRnJhbWVFcnJvcixcbiAgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLFxuICBVbmtub3duTWV0aG9kRXJyb3IsXG4gIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IsXG4gIFByb3h5UmVxdWVzdEVycm9yLFxufTtcblxuLy8gbWFwIG9mIGVycm9yIGNvZGUgdG8gZXJyb3IgY2xhc3NcbmNvbnN0IGpzb253cEVycm9yQ29kZU1hcCA9IHt9O1xuZm9yIChsZXQgRXJyb3JDbGFzcyBvZiBfLnZhbHVlcyhlcnJvcnMpKSB7XG4gIGlmICgnY29kZScgaW4gRXJyb3JDbGFzcykge1xuICAgIGpzb253cEVycm9yQ29kZU1hcFtFcnJvckNsYXNzLmNvZGUoKV0gPSBFcnJvckNsYXNzO1xuICB9XG59XG5cbmNvbnN0IHczY0Vycm9yQ29kZU1hcCA9IHt9O1xuZm9yIChsZXQgRXJyb3JDbGFzcyBvZiBfLnZhbHVlcyhlcnJvcnMpKSB7XG4gIGlmICgnZXJyb3InIGluIEVycm9yQ2xhc3MpIHtcbiAgICB3M2NFcnJvckNvZGVNYXBbRXJyb3JDbGFzcy5lcnJvcigpXSA9IEVycm9yQ2xhc3M7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVbmtub3duRXJyb3IoZXJyKSB7XG4gIHJldHVybiAoXG4gICAgIWVyci5jb25zdHJ1Y3Rvci5uYW1lIHx8XG4gICAgIV8udmFsdWVzKGVycm9ycykuZmluZChmdW5jdGlvbiBlcXVhbE5hbWVzKGVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyb3IubmFtZSA9PT0gZXJyLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNFcnJvclR5cGUoZXJyLCB0eXBlKSB7XG4gIC8vIGBuYW1lYCBwcm9wZXJ0eSBpcyB0aGUgY29uc3RydWN0b3IgbmFtZVxuICBpZiAodHlwZS5uYW1lID09PSBQcm90b2NvbEVycm9yLm5hbWUpIHtcbiAgICAvLyBganNvbndwQ29kZWAgaXMgYDBgIG9uIHN1Y2Nlc3NcbiAgICByZXR1cm4gISFlcnIuanNvbndwQ29kZTtcbiAgfSBlbHNlIGlmICh0eXBlLm5hbWUgPT09IFByb3h5UmVxdWVzdEVycm9yLm5hbWUpIHtcbiAgICAvLyBgc3RhdHVzYCBpcyBgMGAgb24gc3VjY2Vzc1xuICAgIGlmIChlcnIuanNvbndwKSB7XG4gICAgICByZXR1cm4gISFlcnIuanNvbndwLnN0YXR1cztcbiAgICB9XG5cbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGVyci53M2MpKSB7XG4gICAgICByZXR1cm4gXy5pc051bWJlcihlcnIudzNjU3RhdHVzKSAmJiBlcnIudzNjU3RhdHVzID49IDMwMDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGVyci5jb25zdHJ1Y3Rvci5uYW1lID09PSB0eXBlLm5hbWU7XG59XG5cbi8qKlxuICogUmV0cmlldmUgYW4gZXJyb3IgZGVyaXZlZCBmcm9tIE1KU09OV1Agc3RhdHVzXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZSBKU09OV1Agc3RhdHVzIGNvZGVcbiAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gdmFsdWUgVGhlIGVycm9yIG1lc3NhZ2UsIG9yIGFuIG9iamVjdCB3aXRoIGEgYG1lc3NhZ2VgIHByb3BlcnR5XG4gKiBAcmV0dXJuIHtQcm90b2NvbEVycm9yfSBUaGUgZXJyb3IgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggcHJvdmlkZWQgSlNPTldQIHN0YXR1cyBjb2RlXG4gKi9cbmZ1bmN0aW9uIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKGNvZGUsIHZhbHVlID0gJycpIHtcbiAgLy8gaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIHB1bGwgbWVzc2FnZSBmcm9tIGl0LCBvdGhlcndpc2UgdXNlIHRoZSBwbGFpblxuICAvLyB2YWx1ZSwgb3IgZGVmYXVsdCB0byBhbiBlbXB0eSBzdHJpbmcsIGlmIG51bGxcbiAgY29uc3QgbWVzc2FnZSA9ICh2YWx1ZSB8fCB7fSkubWVzc2FnZSB8fCB2YWx1ZSB8fCAnJztcbiAgaWYgKGNvZGUgIT09IFVua25vd25FcnJvci5jb2RlKCkgJiYganNvbndwRXJyb3JDb2RlTWFwW2NvZGVdKSB7XG4gICAgbWpzb253cExvZy5kZWJ1ZyhgTWF0Y2hlZCBKU09OV1AgZXJyb3IgY29kZSAke2NvZGV9IHRvICR7anNvbndwRXJyb3JDb2RlTWFwW2NvZGVdLm5hbWV9YCk7XG4gICAgcmV0dXJuIG5ldyBqc29ud3BFcnJvckNvZGVNYXBbY29kZV0obWVzc2FnZSk7XG4gIH1cbiAgbWpzb253cExvZy5kZWJ1ZyhgTWF0Y2hlZCBKU09OV1AgZXJyb3IgY29kZSAke2NvZGV9IHRvIFVua25vd25FcnJvcmApO1xuICByZXR1cm4gbmV3IFVua25vd25FcnJvcihtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbiBlcnJvciBkZXJpdmVkIGZyb20gVzNDIEpTT04gQ29kZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgVzNDIGVycm9yIHN0cmluZyAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2hhbmRsaW5nLWVycm9ycyBgSlNPTiBFcnJvciBDb2RlYCBjb2x1bW4pXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSB0aGUgZXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHs/c3RyaW5nfSBzdGFja3RyYWNlIGFuIG9wdGlvbmFsIGVycm9yIHN0YWNrdHJhY2VcbiAqIEByZXR1cm4ge1Byb3RvY29sRXJyb3J9ICBUaGUgZXJyb3IgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIFczQyBlcnJvciBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZXJyb3JGcm9tVzNDSnNvbkNvZGUoY29kZSwgbWVzc2FnZSwgc3RhY2t0cmFjZSA9IG51bGwpIHtcbiAgaWYgKGNvZGUgJiYgdzNjRXJyb3JDb2RlTWFwW2NvZGUudG9Mb3dlckNhc2UoKV0pIHtcbiAgICB3M2NMb2cuZGVidWcoYE1hdGNoZWQgVzNDIGVycm9yIGNvZGUgJyR7Y29kZX0nIHRvICR7dzNjRXJyb3JDb2RlTWFwW2NvZGUudG9Mb3dlckNhc2UoKV0ubmFtZX1gKTtcbiAgICBjb25zdCByZXN1bHRFcnJvciA9IG5ldyB3M2NFcnJvckNvZGVNYXBbY29kZS50b0xvd2VyQ2FzZSgpXShtZXNzYWdlKTtcbiAgICByZXN1bHRFcnJvci5zdGFja3RyYWNlID0gc3RhY2t0cmFjZTtcbiAgICByZXR1cm4gcmVzdWx0RXJyb3I7XG4gIH1cbiAgdzNjTG9nLmRlYnVnKGBNYXRjaGVkIFczQyBlcnJvciBjb2RlICcke2NvZGV9JyB0byBVbmtub3duRXJyb3JgKTtcbiAgY29uc3QgcmVzdWx0RXJyb3IgPSBuZXcgVW5rbm93bkVycm9yKG1lc3NhZ2UpO1xuICByZXN1bHRFcnJvci5zdGFja3RyYWNlID0gc3RhY2t0cmFjZTtcbiAgcmV0dXJuIHJlc3VsdEVycm9yO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge2FueX0gZXJyXG4gKiBAcmV0dXJucyB7ZXJyIGlzIFByb3RvY29sRXJyb3J9XG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG9jb2xFcnJvcihlcnIpIHtcbiAgcmV0dXJuICd3M2NTdGF0dXMnIGluIGVycjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIEFwcGl1bSBlcnJvciB0byBwcm9wZXIgVzNDIEhUVFAgcmVzcG9uc2VcbiAqIEBwYXJhbSB7UHJvdG9jb2xFcnJvcnxNSlNPTldQRXJyb3J9IGVyciBUaGUgZXJyb3IgdGhhdCBuZWVkcyB0byBiZSB0cmFuc2xhdGVkXG4gKi9cbmZ1bmN0aW9uIGdldFJlc3BvbnNlRm9yVzNDRXJyb3IoZXJyKSB7XG4gIGxldCBodHRwU3RhdHVzO1xuXG4gIC8vIFczQyBkZWZpbmVkIGVycm9yIG1lc3NhZ2UgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2Rmbi1lcnJvci1jb2RlKVxuICBsZXQgdzNjRXJyb3JTdHJpbmc7XG5cbiAgaWYgKCFpc1Byb3RvY29sRXJyb3IoZXJyKSkge1xuICAgIGVyciA9IHV0aWwuaGFzVmFsdWUoZXJyLnN0YXR1cylcbiAgICAgID8gLy8gSWYgaXQncyBhIEpTT05XUCBlcnJvciwgZmluZCBjb3JyZXNwb25kaW5nIGVycm9yXG4gICAgICAgIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKGVyci5zdGF0dXMsIGVyci52YWx1ZSlcbiAgICAgIDogbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICB9XG5cbiAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLkJhZFBhcmFtZXRlcnNFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA0MDAgaWYgd2UgaGF2ZSBiYWQgcGFyYW1ldGVyc1xuICAgIHczY0xvZy5kZWJ1ZyhgQmFkIHBhcmFtZXRlcnM6ICR7ZXJyfWApO1xuICAgIHczY0Vycm9yU3RyaW5nID0gQmFkUGFyYW1ldGVyc0Vycm9yLmVycm9yKCk7XG4gIH0gZWxzZSB7XG4gICAgdzNjRXJyb3JTdHJpbmcgPSBlcnIuZXJyb3I7XG4gIH1cblxuICBodHRwU3RhdHVzID0gZXJyLnczY1N0YXR1cztcblxuICBpZiAoIXczY0Vycm9yU3RyaW5nKSB7XG4gICAgdzNjRXJyb3JTdHJpbmcgPSBVbmtub3duRXJyb3IuZXJyb3IoKTtcbiAgfVxuXG4gIGxldCBodHRwUmVzQm9keSA9IHtcbiAgICB2YWx1ZToge1xuICAgICAgZXJyb3I6IHczY0Vycm9yU3RyaW5nLFxuICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICBzdGFja3RyYWNlOiBlcnIuc3RhY2t0cmFjZSB8fCBlcnIuc3RhY2ssXG4gICAgfSxcbiAgfTtcbiAgcmV0dXJuIFtodHRwU3RhdHVzLCBodHRwUmVzQm9keV07XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBBcHBpdW0gZXJyb3IgdG8gYSBwcm9wZXIgSlNPTldQIHJlc3BvbnNlXG4gKiBAcGFyYW0ge1Byb3RvY29sRXJyb3J9IGVyciBUaGUgZXJyb3IgdG8gYmUgY29udmVydGVkXG4gKi9cbmZ1bmN0aW9uIGdldFJlc3BvbnNlRm9ySnNvbndwRXJyb3IoZXJyKSB7XG4gIGlmIChpc1Vua25vd25FcnJvcihlcnIpKSB7XG4gICAgZXJyID0gbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoZXJyKTtcbiAgfVxuICAvLyBNSlNPTldQIGVycm9ycyBhcmUgdXN1YWxseSA1MDAgc3RhdHVzIGNvZGUgc28gc2V0IGl0IHRvIHRoYXQgYnkgZGVmYXVsdFxuICBsZXQgaHR0cFN0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG5cbiAgLyoqIEB0eXBlIHtIdHRwUmVzdWx0Qm9keX0gKi9cbiAgbGV0IGh0dHBSZXNCb2R5ID0ge1xuICAgIHN0YXR1czogZXJyLmpzb253cENvZGUsXG4gICAgdmFsdWU6IHtcbiAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgIH0sXG4gIH07XG5cbiAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLkJhZFBhcmFtZXRlcnNFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA0MDAgaWYgd2UgaGF2ZSBiYWQgcGFyYW1ldGVyc1xuICAgIG1qc29ud3BMb2cuZGVidWcoYEJhZCBwYXJhbWV0ZXJzOiAke2Vycn1gKTtcbiAgICBodHRwU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICAgIGh0dHBSZXNCb2R5ID0gZXJyLm1lc3NhZ2U7XG4gIH0gZWxzZSBpZiAoXG4gICAgaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuTm90WWV0SW1wbGVtZW50ZWRFcnJvcikgfHxcbiAgICBpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKVxuICApIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA1MDEgaWYgdGhlIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWRcbiAgICBodHRwU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLk5PVF9JTVBMRU1FTlRFRDtcbiAgfSBlbHNlIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Ob1N1Y2hEcml2ZXJFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA0MDQgaWYgdGhlcmUgaXMgbm8gZHJpdmVyIGZvciB0aGUgc2Vzc2lvblxuICAgIGh0dHBTdGF0dXMgPSBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG5cbiAgcmV0dXJuIFtodHRwU3RhdHVzLCBodHRwUmVzQm9keV07XG59XG5cbmV4cG9ydCB7XG4gIGVycm9ycyxcbiAgaXNFcnJvclR5cGUsXG4gIGlzVW5rbm93bkVycm9yLFxuICBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSxcbiAgZXJyb3JGcm9tVzNDSnNvbkNvZGUsXG4gIGdldFJlc3BvbnNlRm9yVzNDRXJyb3IsXG4gIGdldFJlc3BvbnNlRm9ySnNvbndwRXJyb3IsXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHsgc3RyaW5nIHwge3ZhbHVlOiBIdHRwUmVzdWx0Qm9keVZhbHVlLCBzdGF0dXM/OiBudW1iZXIgfSB9IEh0dHBSZXN1bHRCb2R5XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBIdHRwUmVzdWx0Qm9keVZhbHVlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21lc3NhZ2VdXG4gKiBAcHJvcGVydHkge3N0cmluZ3xFcnJvcn0gW2Vycm9yXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzdGFja3RyYWNlXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgTUpTT05XUEVycm9yXG4gKiBAcHJvcGVydHkge251bWJlcn0gc3RhdHVzXG4gKiBAcHJvcGVydHkge3N0cmluZ3xvYmplY3R9IHZhbHVlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVzc2FnZVxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFVBQVUsR0FBR0MsZUFBQSxDQUFPQyxTQUFQLENBQWlCLFNBQWpCLENBQW5COztBQUNBLE1BQU1DLE1BQU0sR0FBR0YsZUFBQSxDQUFPQyxTQUFQLENBQWlCLEtBQWpCLENBQWY7O0FBRUEsTUFBTUUsaUJBQWlCLEdBQUcsZUFBMUI7O0FBR08sTUFBTUMsYUFBTixTQUE0QkMsaUJBQTVCLENBQXFDO0VBQzFDQyxXQUFXLENBQUNDLEdBQUQsRUFBTUMsVUFBTixFQUFrQkMsU0FBbEIsRUFBNkJDLEtBQTdCLEVBQW9DO0lBQzdDLE1BQU1ILEdBQU47SUFDQSxLQUFLQyxVQUFMLEdBQWtCQSxVQUFsQjtJQUNBLEtBQUtFLEtBQUwsR0FBYUEsS0FBSyxJQUFJUCxpQkFBdEI7O0lBQ0EsSUFBSSxLQUFLSyxVQUFMLEtBQW9CLElBQXhCLEVBQThCO01BQzVCLEtBQUtBLFVBQUwsR0FBa0IsRUFBbEI7SUFDRDs7SUFDRCxLQUFLQyxTQUFMLEdBQWlCQSxTQUFTLElBQUlFLDRCQUFBLENBQWdCQyxX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
|
|
1018
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtanNvbndwTG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidzNjTG9nIiwiVzNDX1VOS05PV05fRVJST1IiLCJQcm90b2NvbEVycm9yIiwiRVM2RXJyb3IiLCJjb25zdHJ1Y3RvciIsIm1zZyIsImpzb253cENvZGUiLCJ3M2NTdGF0dXMiLCJlcnJvciIsIkhUVFBTdGF0dXNDb2RlcyIsIkJBRF9SRVFVRVNUIiwiX3N0YWNrdHJhY2UiLCJzdGFja3RyYWNlIiwic3RhY2siLCJ2YWx1ZSIsIk5vU3VjaERyaXZlckVycm9yIiwiY29kZSIsIk5PVF9GT1VORCIsImVyciIsIk5vU3VjaEVsZW1lbnRFcnJvciIsIk5vU3VjaEZyYW1lRXJyb3IiLCJVbmtub3duQ29tbWFuZEVycm9yIiwiU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IiLCJFbGVtZW50Tm90VmlzaWJsZUVycm9yIiwiSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yIiwiVW5rbm93bkVycm9yIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwiZXJyb3JPck1lc3NhZ2UiLCJvcmlnTWVzc2FnZSIsIl8iLCJpc1N0cmluZyIsIm1lc3NhZ2UiLCJVbmtub3duTWV0aG9kRXJyb3IiLCJNRVRIT0RfTk9UX0FMTE9XRUQiLCJVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yIiwiRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yIiwiRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvciIsIkVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvciIsIkluc2VjdXJlQ2VydGlmaWNhdGVFcnJvciIsIkphdmFTY3JpcHRFcnJvciIsIlhQYXRoTG9va3VwRXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJSRVFVRVNUX1RJTUVPVVQiLCJOb1N1Y2hXaW5kb3dFcnJvciIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiSW52YWxpZENvb2tpZURvbWFpbkVycm9yIiwiTm9TdWNoQ29va2llRXJyb3IiLCJVbmFibGVUb1NldENvb2tpZUVycm9yIiwiVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIiwiTm9BbGVydE9wZW5FcnJvciIsIk5vU3VjaEFsZXJ0RXJyb3IiLCJTY3JpcHRUaW1lb3V0RXJyb3IiLCJJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IiLCJJbnZhbGlkQ29vcmRpbmF0ZXNFcnJvciIsIklNRU5vdEF2YWlsYWJsZUVycm9yIiwiSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yIiwiSW52YWxpZFNlbGVjdG9yRXJyb3IiLCJTZXNzaW9uTm90Q3JlYXRlZEVycm9yIiwiZGV0YWlscyIsIk1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yIiwiTm9TdWNoQ29udGV4dEVycm9yIiwiSW52YWxpZENvbnRleHRFcnJvciIsIk5vdFlldEltcGxlbWVudGVkRXJyb3IiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiVW5hYmxlVG9DYXB0dXJlU2NyZWVuIiwiQmFkUGFyYW1ldGVyc0Vycm9yIiwicmVxdWlyZWRQYXJhbXMiLCJhY3R1YWxQYXJhbXMiLCJlcnJNZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsIlByb3h5UmVxdWVzdEVycm9yIiwicmVzcG9uc2VFcnJvciIsImh0dHBTdGF0dXMiLCJyZXNwb25zZUVycm9yT2JqIiwidXRpbCIsInNhZmVKc29uUGFyc2UiLCJpc1BsYWluT2JqZWN0IiwiaXNFbXB0eSIsImhhcyIsInczYyIsImpzb253cCIsImdldEFjdHVhbEVycm9yIiwiaGFzVmFsdWUiLCJzdGF0dXMiLCJlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSIsImlzTnVtYmVyIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJlcnJvcnMiLCJqc29ud3BFcnJvckNvZGVNYXAiLCJFcnJvckNsYXNzIiwidmFsdWVzIiwidzNjRXJyb3JDb2RlTWFwIiwiaXNVbmtub3duRXJyb3IiLCJuYW1lIiwiZmluZCIsImVxdWFsTmFtZXMiLCJpc0Vycm9yVHlwZSIsInR5cGUiLCJkZWJ1ZyIsInRvTG93ZXJDYXNlIiwicmVzdWx0RXJyb3IiLCJpc1Byb3RvY29sRXJyb3IiLCJnZXRSZXNwb25zZUZvclczQ0Vycm9yIiwidzNjRXJyb3JTdHJpbmciLCJodHRwUmVzQm9keSIsImdldFJlc3BvbnNlRm9ySnNvbndwRXJyb3IiLCJOT1RfSU1QTEVNRU5URUQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvcHJvdG9jb2wvZXJyb3JzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFUzZFcnJvciBmcm9tICdlczYtZXJyb3InO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7dXRpbCwgbG9nZ2VyfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHtTdGF0dXNDb2RlcyBhcyBIVFRQU3RhdHVzQ29kZXN9IGZyb20gJ2h0dHAtc3RhdHVzLWNvZGVzJztcblxuY29uc3QgbWpzb253cExvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ01KU09OV1AnKTtcbmNvbnN0IHczY0xvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1czQycpO1xuXG5jb25zdCBXM0NfVU5LTk9XTl9FUlJPUiA9ICd1bmtub3duIGVycm9yJztcblxuLy8gYmFzZSBlcnJvciBjbGFzcyBmb3IgYWxsIG9mIG91ciBlcnJvcnNcbmV4cG9ydCBjbGFzcyBQcm90b2NvbEVycm9yIGV4dGVuZHMgRVM2RXJyb3Ige1xuICBjb25zdHJ1Y3Rvcihtc2csIGpzb253cENvZGUsIHczY1N0YXR1cywgZXJyb3IpIHtcbiAgICBzdXBlcihtc2cpO1xuICAgIHRoaXMuanNvbndwQ29kZSA9IGpzb253cENvZGU7XG4gICAgdGhpcy5lcnJvciA9IGVycm9yIHx8IFczQ19VTktOT1dOX0VSUk9SO1xuICAgIGlmICh0aGlzLmpzb253cENvZGUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuanNvbndwQ29kZSA9IDEzO1xuICAgIH1cbiAgICB0aGlzLnczY1N0YXR1cyA9IHczY1N0YXR1cyB8fCBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gICAgdGhpcy5fc3RhY2t0cmFjZSA9IG51bGw7XG4gIH1cblxuICBnZXQgc3RhY2t0cmFjZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhY2t0cmFjZSB8fCB0aGlzLnN0YWNrO1xuICB9XG5cbiAgc2V0IHN0YWNrdHJhY2UodmFsdWUpIHtcbiAgICB0aGlzLl9zdGFja3RyYWNlID0gdmFsdWU7XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL1NlbGVuaXVtSFEvc2VsZW5pdW0vYmxvYi8xNzZiNGE5ZTMwODJhYzE5MjZmMmE0MzZlYjM0Njc2MGMzN2E1OTk4L2phdmEvY2xpZW50L3NyYy9vcmcvb3BlbnFhL3NlbGVuaXVtL3JlbW90ZS9FcnJvckNvZGVzLmphdmEjTDIxNVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL1NlbGVuaXVtSFEvc2VsZW5pdW0vaXNzdWVzLzU1NjIjaXNzdWVjb21tZW50LTM3MDM3OTQ3MFxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI2Rmbi1lcnJvci1jb2RlXG5cbmV4cG9ydCBjbGFzcyBOb1N1Y2hEcml2ZXJFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gNjtcbiAgfVxuICAvLyBXM0MgRXJyb3IgaXMgY2FsbGVkIEludmFsaWRTZXNzaW9uSURcbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIHNlc3Npb24gaWQnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBIHNlc3Npb24gaXMgZWl0aGVyIHRlcm1pbmF0ZWQgb3Igbm90IHN0YXJ0ZWQnLFxuICAgICAgTm9TdWNoRHJpdmVyRXJyb3IuY29kZSgpLFxuICAgICAgTm9TdWNoRHJpdmVyRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBOb1N1Y2hEcml2ZXJFcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoRWxlbWVudEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA3O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCBlbGVtZW50JztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fCAnQW4gZWxlbWVudCBjb3VsZCBub3QgYmUgbG9jYXRlZCBvbiB0aGUgcGFnZSB1c2luZyB0aGUgZ2l2ZW4gJyArICdzZWFyY2ggcGFyYW1ldGVycy4nLFxuICAgICAgTm9TdWNoRWxlbWVudEVycm9yLmNvZGUoKSxcbiAgICAgIE5vU3VjaEVsZW1lbnRFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIE5vU3VjaEVsZW1lbnRFcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoRnJhbWVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gODtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdubyBzdWNoIGZyYW1lJztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8XG4gICAgICAgICdBIHJlcXVlc3QgdG8gc3dpdGNoIHRvIGEgZnJhbWUgY291bGQgbm90IGJlIHNhdGlzZmllZCBiZWNhdXNlICcgK1xuICAgICAgICAgICd0aGUgZnJhbWUgY291bGQgbm90IGJlIGZvdW5kLicsXG4gICAgICBOb1N1Y2hGcmFtZUVycm9yLmNvZGUoKSxcbiAgICAgIE5vU3VjaEZyYW1lRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBOb1N1Y2hGcmFtZUVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmtub3duQ29tbWFuZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA5O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAndW5rbm93biBjb21tYW5kJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fFxuICAgICAgICAnVGhlIHJlcXVlc3RlZCByZXNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQsIG9yIGEgcmVxdWVzdCB3YXMgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkIHVzaW5nIGFuIEhUVFAgbWV0aG9kIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbWFwcGVkICcgK1xuICAgICAgICAgICdyZXNvdXJjZS4nLFxuICAgICAgVW5rbm93bkNvbW1hbmRFcnJvci5jb2RlKCksXG4gICAgICBVbmtub3duQ29tbWFuZEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgVW5rbm93bkNvbW1hbmRFcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDEwO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnc3RhbGUgZWxlbWVudCByZWZlcmVuY2UnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8XG4gICAgICAgICdBbiBlbGVtZW50IGNvbW1hbmQgZmFpbGVkIGJlY2F1c2UgdGhlIHJlZmVyZW5jZWQgZWxlbWVudCBpcyBubyAnICtcbiAgICAgICAgICAnbG9uZ2VyIGF0dGFjaGVkIHRvIHRoZSBET00uJyxcbiAgICAgIFN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yLmNvZGUoKSxcbiAgICAgIFN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDExO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdlbGVtZW50IG5vdCB2aXNpYmxlJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fFxuICAgICAgICAnQW4gZWxlbWVudCBjb21tYW5kIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyAnICtcbiAgICAgICAgICAnbm90IHZpc2libGUgb24gdGhlIHBhZ2UuJyxcbiAgICAgIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IuY29kZSgpLFxuICAgICAgRWxlbWVudE5vdFZpc2libGVFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRFbGVtZW50U3RhdGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMTI7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgZWxlbWVudCBzdGF0ZSc7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHxcbiAgICAgICAgJ0FuIGVsZW1lbnQgY29tbWFuZCBjb3VsZCBub3QgYmUgY29tcGxldGVkIGJlY2F1c2UgdGhlIGVsZW1lbnQgaXMgJyArXG4gICAgICAgICAgJ2luIGFuIGludmFsaWQgc3RhdGUgKGUuZy4gYXR0ZW1wdGluZyB0byBjbGljayBhIGRpc2FibGVkIGVsZW1lbnQpLicsXG4gICAgICBJbnZhbGlkRWxlbWVudFN0YXRlRXJyb3IuY29kZSgpLFxuICAgICAgSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmtub3duRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDEzO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiBXM0NfVU5LTk9XTl9FUlJPUjtcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnJvck9yTWVzc2FnZSkge1xuICAgIGNvbnN0IG9yaWdNZXNzYWdlID0gXy5pc1N0cmluZygoZXJyb3JPck1lc3NhZ2UgfHwge30pLm1lc3NhZ2UpXG4gICAgICA/IGVycm9yT3JNZXNzYWdlLm1lc3NhZ2VcbiAgICAgIDogZXJyb3JPck1lc3NhZ2U7XG4gICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAnQW4gdW5rbm93biBzZXJ2ZXItc2lkZSBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIHRoZSBjb21tYW5kLicgK1xuICAgICAgKG9yaWdNZXNzYWdlID8gYCBPcmlnaW5hbCBlcnJvcjogJHtvcmlnTWVzc2FnZX1gIDogJycpO1xuICAgIHN1cGVyKG1lc3NhZ2UsIFVua25vd25FcnJvci5jb2RlKCksIFVua25vd25FcnJvci53M2NTdGF0dXMoKSwgVW5rbm93bkVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmtub3duTWV0aG9kRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDQwNTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTUVUSE9EX05PVF9BTExPV0VEO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ3Vua25vd24gbWV0aG9kJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fCAnVGhlIHJlcXVlc3RlZCBjb21tYW5kIG1hdGNoZWQgYSBrbm93biBVUkwgYnV0IGRpZCBub3QgbWF0Y2ggYW4gbWV0aG9kIGZvciB0aGF0IFVSTCcsXG4gICAgICBVbmtub3duTWV0aG9kRXJyb3IuY29kZSgpLFxuICAgICAgVW5rbm93bk1ldGhvZEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgVW5rbm93bk1ldGhvZEVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA0MDU7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICd1bnN1cHBvcnRlZCBvcGVyYXRpb24nO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBIHNlcnZlci1zaWRlIGVycm9yIG9jY3VycmVkLiBDb21tYW5kIGNhbm5vdCBiZSBzdXBwb3J0ZWQuJyxcbiAgICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IuY29kZSgpLFxuICAgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMTU7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnZWxlbWVudCBub3Qgc2VsZWN0YWJsZSc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIHNlbGVjdCBhbiBlbGVtZW50IHRoYXQgY2Fubm90IGJlIHNlbGVjdGVkLicsXG4gICAgICBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IuY29kZSgpLFxuICAgICAgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA2NDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdlbGVtZW50IGNsaWNrIGludGVyY2VwdGVkJztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHxcbiAgICAgICAgJ1RoZSBFbGVtZW50IENsaWNrIGNvbW1hbmQgY291bGQgbm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZSBlbGVtZW50IHJlY2VpdmluZyAnICtcbiAgICAgICAgICAndGhlIGV2ZW50cyBpcyBvYnNjdXJpbmcgdGhlIGVsZW1lbnQgdGhhdCB3YXMgcmVxdWVzdGVkIGNsaWNrZWQnLFxuICAgICAgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvci5jb2RlKCksXG4gICAgICBFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA2MDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdlbGVtZW50IG5vdCBpbnRlcmFjdGFibGUnO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fFxuICAgICAgICAnQSBjb21tYW5kIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyBub3QgcG9pbnRlci0gb3Iga2V5Ym9hcmQgaW50ZXJhY3RhYmxlJyxcbiAgICAgIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvci5jb2RlKCksXG4gICAgICBFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEluc2VjdXJlQ2VydGlmaWNhdGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnNlY3VyZSBjZXJ0aWZpY2F0ZSc7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHxcbiAgICAgICAgJ05hdmlnYXRpb24gY2F1c2VkIHRoZSB1c2VyIGFnZW50IHRvIGhpdCBhIGNlcnRpZmljYXRlIHdhcm5pbmcsIHdoaWNoIGlzIHVzdWFsbHkgdGhlIHJlc3VsdCBvZiBhbiBleHBpcmVkIG9yIGludmFsaWQgVExTIGNlcnRpZmljYXRlJyxcbiAgICAgIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvci5jb2RlKCksXG4gICAgICBudWxsLFxuICAgICAgSW5zZWN1cmVDZXJ0aWZpY2F0ZUVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBKYXZhU2NyaXB0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDE3O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnamF2YXNjcmlwdCBlcnJvcic7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHwgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGV4ZWN1dGluZyB1c2VyIHN1cHBsaWVkIEphdmFTY3JpcHQuJyxcbiAgICAgIEphdmFTY3JpcHRFcnJvci5jb2RlKCksXG4gICAgICBKYXZhU2NyaXB0RXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBKYXZhU2NyaXB0RXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFhQYXRoTG9va3VwRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDE5O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIHNlbGVjdG9yJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fCAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2VhcmNoaW5nIGZvciBhbiBlbGVtZW50IGJ5IFhQYXRoLicsXG4gICAgICBYUGF0aExvb2t1cEVycm9yLmNvZGUoKSxcbiAgICAgIFhQYXRoTG9va3VwRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBYUGF0aExvb2t1cEVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDIxO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5SRVFVRVNUX1RJTUVPVVQ7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAndGltZW91dCc7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHwgJ0FuIG9wZXJhdGlvbiBkaWQgbm90IGNvbXBsZXRlIGJlZm9yZSBpdHMgdGltZW91dCBleHBpcmVkLicsXG4gICAgICBUaW1lb3V0RXJyb3IuY29kZSgpLFxuICAgICAgVGltZW91dEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgVGltZW91dEVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb1N1Y2hXaW5kb3dFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMjM7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCB3aW5kb3cnO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHxcbiAgICAgICAgJ0EgcmVxdWVzdCB0byBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgd2luZG93IGNvdWxkIG5vdCBiZSBzYXRpc2ZpZWQgJyArXG4gICAgICAgICAgJ2JlY2F1c2UgdGhlIHdpbmRvdyBjb3VsZCBub3QgYmUgZm91bmQuJyxcbiAgICAgIE5vU3VjaFdpbmRvd0Vycm9yLmNvZGUoKSxcbiAgICAgIE5vU3VjaFdpbmRvd0Vycm9yLnczY1N0YXR1cygpLFxuICAgICAgTm9TdWNoV2luZG93RXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA2MTtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGFyZ3VtZW50JztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHwgJ1RoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBjb21tYW5kIGFyZSBlaXRoZXIgaW52YWxpZCBvciBtYWxmb3JtZWQnLFxuICAgICAgSW52YWxpZEFyZ3VtZW50RXJyb3IuY29kZSgpLFxuICAgICAgSW52YWxpZEFyZ3VtZW50RXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBJbnZhbGlkQXJndW1lbnRFcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZENvb2tpZURvbWFpbkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiAyNDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGNvb2tpZSBkb21haW4nO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fFxuICAgICAgICAnQW4gaWxsZWdhbCBhdHRlbXB0IHdhcyBtYWRlIHRvIHNldCBhIGNvb2tpZSB1bmRlciBhIGRpZmZlcmVudCAnICtcbiAgICAgICAgICAnZG9tYWluIHRoYW4gdGhlIGN1cnJlbnQgcGFnZS4nLFxuICAgICAgSW52YWxpZENvb2tpZURvbWFpbkVycm9yLmNvZGUoKSxcbiAgICAgIEludmFsaWRDb29raWVEb21haW5FcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIEludmFsaWRDb29raWVEb21haW5FcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoQ29va2llRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDYyO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCBjb29raWUnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8XG4gICAgICAgICdObyBjb29raWUgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGggbmFtZSB3YXMgZm91bmQgYW1vbmdzdCB0aGUgYXNzb2NpYXRlZCBjb29raWVzIG9mIHRoZSBjdXJyZW50IGJyb3dzaW5nIGNvbnRleHTigJlzIGFjdGl2ZSBkb2N1bWVudCcsXG4gICAgICBOb1N1Y2hDb29raWVFcnJvci5jb2RlKCksXG4gICAgICBOb1N1Y2hDb29raWVFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIE5vU3VjaENvb2tpZUVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmFibGVUb1NldENvb2tpZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiAyNTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ3VuYWJsZSB0byBzZXQgY29va2llJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fCBcIkEgcmVxdWVzdCB0byBzZXQgYSBjb29raWUncyB2YWx1ZSBjb3VsZCBub3QgYmUgc2F0aXNmaWVkLlwiLFxuICAgICAgVW5hYmxlVG9TZXRDb29raWVFcnJvci5jb2RlKCksXG4gICAgICBVbmFibGVUb1NldENvb2tpZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgVW5hYmxlVG9TZXRDb29raWVFcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiAyNjtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ3VuZXhwZWN0ZWQgYWxlcnQgb3Blbic7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHwgJ0EgbW9kYWwgZGlhbG9nIHdhcyBvcGVuLCBibG9ja2luZyB0aGlzIG9wZXJhdGlvbicsXG4gICAgICBVbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IuY29kZSgpLFxuICAgICAgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLnczY1N0YXR1cygpLFxuICAgICAgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb0FsZXJ0T3BlbkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiAyNztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ25vIHN1Y2ggYWxlcnQnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIG9wZXJhdGUgb24gYSBtb2RhbCBkaWFsb2cgd2hlbiBvbmUgJyArICd3YXMgbm90IG9wZW4uJyxcbiAgICAgIE5vQWxlcnRPcGVuRXJyb3IuY29kZSgpLFxuICAgICAgTm9BbGVydE9wZW5FcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIE5vQWxlcnRPcGVuRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vU3VjaEFsZXJ0RXJyb3IgZXh0ZW5kcyBOb0FsZXJ0T3BlbkVycm9yIHt9XG5cbmV4cG9ydCBjbGFzcyBTY3JpcHRUaW1lb3V0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDI4O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5SRVFVRVNUX1RJTUVPVVQ7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnc2NyaXB0IHRpbWVvdXQnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBIHNjcmlwdCBkaWQgbm90IGNvbXBsZXRlIGJlZm9yZSBpdHMgdGltZW91dCBleHBpcmVkLicsXG4gICAgICBTY3JpcHRUaW1lb3V0RXJyb3IuY29kZSgpLFxuICAgICAgU2NyaXB0VGltZW91dEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgU2NyaXB0VGltZW91dEVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDI5O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGNvb3JkaW5hdGVzJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fCAnVGhlIGNvb3JkaW5hdGVzIHByb3ZpZGVkIHRvIGFuIGludGVyYWN0aW9ucyBvcGVyYXRpb24gYXJlIGludmFsaWQuJyxcbiAgICAgIEludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFcnJvci5jb2RlKCksXG4gICAgICBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRDb29yZGluYXRlc0Vycm9yIGV4dGVuZHMgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yIHt9XG5cbmV4cG9ydCBjbGFzcyBJTUVOb3RBdmFpbGFibGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMzA7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICd1bnN1cHBvcnRlZCBvcGVyYXRpb24nO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdJTUUgd2FzIG5vdCBhdmFpbGFibGUuJyxcbiAgICAgIElNRU5vdEF2YWlsYWJsZUVycm9yLmNvZGUoKSxcbiAgICAgIElNRU5vdEF2YWlsYWJsZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgSU1FTm90QXZhaWxhYmxlRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMzE7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICd1bnN1cHBvcnRlZCBvcGVyYXRpb24nO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBbiBJTUUgZW5naW5lIGNvdWxkIG5vdCBiZSBzdGFydGVkLicsXG4gICAgICBJTUVFbmdpbmVBY3RpdmF0aW9uRmFpbGVkRXJyb3IuY29kZSgpLFxuICAgICAgSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkU2VsZWN0b3JFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMzI7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgc2VsZWN0b3InO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBcmd1bWVudCB3YXMgYW4gaW52YWxpZCBzZWxlY3RvciAoZS5nLiBYUGF0aC9DU1MpLicsXG4gICAgICBJbnZhbGlkU2VsZWN0b3JFcnJvci5jb2RlKCksXG4gICAgICBJbnZhbGlkU2VsZWN0b3JFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIEludmFsaWRTZWxlY3RvckVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uTm90Q3JlYXRlZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiAzMztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ3Nlc3Npb24gbm90IGNyZWF0ZWQnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGRldGFpbHMpIHtcbiAgICBsZXQgbWVzc2FnZSA9ICdBIG5ldyBzZXNzaW9uIGNvdWxkIG5vdCBiZSBjcmVhdGVkLic7XG4gICAgaWYgKGRldGFpbHMpIHtcbiAgICAgIG1lc3NhZ2UgKz0gYCBEZXRhaWxzOiAke2RldGFpbHN9YDtcbiAgICB9XG5cbiAgICBzdXBlcihcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBTZXNzaW9uTm90Q3JlYXRlZEVycm9yLmNvZGUoKSxcbiAgICAgIFNlc3Npb25Ob3RDcmVhdGVkRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBTZXNzaW9uTm90Q3JlYXRlZEVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMzQ7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdtb3ZlIHRhcmdldCBvdXQgb2YgYm91bmRzJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fCAnVGFyZ2V0IHByb3ZpZGVkIGZvciBhIG1vdmUgYWN0aW9uIGlzIG91dCBvZiBib3VuZHMuJyxcbiAgICAgIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yLmNvZGUoKSxcbiAgICAgIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yLnczY1N0YXR1cygpLFxuICAgICAgTW92ZVRhcmdldE91dE9mQm91bmRzRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vU3VjaENvbnRleHRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMzU7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdObyBzdWNoIGNvbnRleHQgZm91bmQuJywgTm9TdWNoQ29udGV4dEVycm9yLmNvZGUoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRDb250ZXh0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDM2O1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdUaGF0IGNvbW1hbmQgY291bGQgbm90IGJlIGV4ZWN1dGVkIGluIHRoZSBjdXJyZW50IGNvbnRleHQuJyxcbiAgICAgIEludmFsaWRDb250ZXh0RXJyb3IuY29kZSgpXG4gICAgKTtcbiAgfVxufVxuXG4vLyBUaGVzZSBhcmUgYWxpYXNlcyBmb3IgVW5rbm93bk1ldGhvZEVycm9yXG5leHBvcnQgY2xhc3MgTm90WWV0SW1wbGVtZW50ZWRFcnJvciBleHRlbmRzIFVua25vd25NZXRob2RFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTWV0aG9kIGhhcyBub3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBVbmtub3duTWV0aG9kRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ01ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5hYmxlVG9DYXB0dXJlU2NyZWVuIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ3VuYWJsZSB0byBjYXB0dXJlIHNjcmVlbic7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHwgJ0Egc2NyZWVuIGNhcHR1cmUgd2FzIG1hZGUgaW1wb3NzaWJsZScsXG4gICAgICBVbmFibGVUb0NhcHR1cmVTY3JlZW4uY29kZSgpLFxuICAgICAgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLnczY1N0YXR1cygpLFxuICAgICAgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbi8vIEVxdWl2YWxlbnQgdG8gVzNDIEludmFsaWRBcmd1bWVudEVycm9yXG5leHBvcnQgY2xhc3MgQmFkUGFyYW1ldGVyc0Vycm9yIGV4dGVuZHMgRVM2RXJyb3Ige1xuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGFyZ3VtZW50JztcbiAgfVxuICBjb25zdHJ1Y3RvcihyZXF1aXJlZFBhcmFtcywgYWN0dWFsUGFyYW1zLCBlcnJNZXNzYWdlKSB7XG4gICAgbGV0IG1lc3NhZ2U7XG4gICAgaWYgKCFlcnJNZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlID1cbiAgICAgICAgYFBhcmFtZXRlcnMgd2VyZSBpbmNvcnJlY3QuIFdlIHdhbnRlZCBgICtcbiAgICAgICAgYCR7SlNPTi5zdHJpbmdpZnkocmVxdWlyZWRQYXJhbXMpfSBhbmQgeW91IGAgK1xuICAgICAgICBgc2VudCAke0pTT04uc3RyaW5naWZ5KGFjdHVhbFBhcmFtcyl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZSA9IGBQYXJhbWV0ZXJzIHdlcmUgaW5jb3JyZWN0LiBZb3Ugc2VudCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBhY3R1YWxQYXJhbXNcbiAgICAgICl9LCAke2Vyck1lc3NhZ2V9YDtcbiAgICB9XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy53M2NTdGF0dXMgPSBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm94eVJlcXVlc3RFcnJvciBpcyBhIGN1c3RvbSBlcnJvciBhbmQgd2lsbCBiZSB0aHJvd24gdXAgb24gdW5zdWNjZXNzZnVsIHByb3h5IHJlcXVlc3QgYW5kXG4gKiB3aWxsIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb3h5IGZhaWx1cmUuXG4gKiBJbiBjYXNlIG9mIFByb3h5UmVxdWVzdEVycm9yIHNob3VsZCBmZXRjaCB0aGUgYWN0dWFsIGVycm9yIGJ5IGNhbGxpbmcgYGdldEFjdHVhbEVycm9yKClgXG4gKiBmb3IgcHJveHkgZmFpbHVyZSB0byBnZW5lcmF0ZSB0aGUgY2xpZW50IHJlc3BvbnNlLlxuICovXG5leHBvcnQgY2xhc3MgUHJveHlSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFUzZFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGVyciwgcmVzcG9uc2VFcnJvciwgaHR0cFN0YXR1cykge1xuICAgIGxldCByZXNwb25zZUVycm9yT2JqID0gdXRpbC5zYWZlSnNvblBhcnNlKHJlc3BvbnNlRXJyb3IpO1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlRXJyb3JPYmopKSB7XG4gICAgICByZXNwb25zZUVycm9yT2JqID0ge307XG4gICAgfVxuICAgIGxldCBvcmlnTWVzc2FnZSA9IF8uaXNTdHJpbmcocmVzcG9uc2VFcnJvcikgPyByZXNwb25zZUVycm9yIDogJyc7XG4gICAgaWYgKCFfLmlzRW1wdHkocmVzcG9uc2VFcnJvck9iaikpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKHJlc3BvbnNlRXJyb3JPYmoudmFsdWUpKSB7XG4gICAgICAgIG9yaWdNZXNzYWdlID0gcmVzcG9uc2VFcnJvck9iai52YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIF8uaXNQbGFpbk9iamVjdChyZXNwb25zZUVycm9yT2JqLnZhbHVlKSAmJlxuICAgICAgICBfLmlzU3RyaW5nKHJlc3BvbnNlRXJyb3JPYmoudmFsdWUubWVzc2FnZSlcbiAgICAgICkge1xuICAgICAgICBvcmlnTWVzc2FnZSA9IHJlc3BvbnNlRXJyb3JPYmoudmFsdWUubWVzc2FnZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIoXy5pc0VtcHR5KGVycikgPyBgUHJveHkgcmVxdWVzdCB1bnN1Y2Nlc3NmdWwuICR7b3JpZ01lc3NhZ2V9YCA6IGVycik7XG5cbiAgICB0aGlzLnczY1N0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcblxuICAgIC8vIElmIHRoZSByZXNwb25zZSBlcnJvciBpcyBhbiBvYmplY3QgYW5kIHZhbHVlIGlzIGFuIG9iamVjdCwgaXQncyBhIFczQyBlcnJvciAoZm9yIEpTT05XUCB2YWx1ZSBpcyBhIHN0cmluZylcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlRXJyb3JPYmoudmFsdWUpICYmIF8uaGFzKHJlc3BvbnNlRXJyb3JPYmoudmFsdWUsICdlcnJvcicpKSB7XG4gICAgICB0aGlzLnczYyA9IHJlc3BvbnNlRXJyb3JPYmoudmFsdWU7XG4gICAgICB0aGlzLnczY1N0YXR1cyA9IGh0dHBTdGF0dXMgfHwgSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmpzb253cCA9IHJlc3BvbnNlRXJyb3JPYmo7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWN0dWFsRXJyb3IoKSB7XG4gICAgLy8gSWYgaXQncyBNSlNPTldQIGVycm9yLCByZXR1cm5zIGFjdHVhbCBlcnJvciBjYXVzZSBmb3IgcmVxdWVzdCBmYWlsdXJlIGJhc2VkIG9uIGBqc29ud3Auc3RhdHVzYFxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMuanNvbndwPy5zdGF0dXMpICYmIHV0aWwuaGFzVmFsdWUodGhpcy5qc29ud3A/LnZhbHVlKSkge1xuICAgICAgcmV0dXJuIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKHRoaXMuanNvbndwLnN0YXR1cywgdGhpcy5qc29ud3AudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLnczYykgJiYgXy5pc051bWJlcih0aGlzLnczY1N0YXR1cykgJiYgdGhpcy53M2NTdGF0dXMgPj0gMzAwKSB7XG4gICAgICByZXR1cm4gZXJyb3JGcm9tVzNDSnNvbkNvZGUoXG4gICAgICAgIHRoaXMudzNjLmVycm9yLFxuICAgICAgICB0aGlzLnczYy5tZXNzYWdlIHx8IHRoaXMubWVzc2FnZSxcbiAgICAgICAgdGhpcy53M2Muc3RhY2t0cmFjZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBVbmtub3duRXJyb3IodGhpcy5tZXNzYWdlKTtcbiAgfVxufVxuLy8gbWFwIG9mIGVycm9yIGNsYXNzIG5hbWUgdG8gZXJyb3IgY2xhc3NcbmNvbnN0IGVycm9ycyA9IHtcbiAgTm90WWV0SW1wbGVtZW50ZWRFcnJvcixcbiAgTm90SW1wbGVtZW50ZWRFcnJvcixcbiAgQmFkUGFyYW1ldGVyc0Vycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgTm9TdWNoRHJpdmVyRXJyb3IsXG4gIE5vU3VjaEVsZW1lbnRFcnJvcixcbiAgVW5rbm93bkNvbW1hbmRFcnJvcixcbiAgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IsXG4gIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IsXG4gIEludmFsaWRFbGVtZW50U3RhdGVFcnJvcixcbiAgVW5rbm93bkVycm9yLFxuICBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IsXG4gIEVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IsXG4gIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvcixcbiAgSW5zZWN1cmVDZXJ0aWZpY2F0ZUVycm9yLFxuICBKYXZhU2NyaXB0RXJyb3IsXG4gIFhQYXRoTG9va3VwRXJyb3IsXG4gIFRpbWVvdXRFcnJvcixcbiAgTm9TdWNoV2luZG93RXJyb3IsXG4gIE5vU3VjaENvb2tpZUVycm9yLFxuICBJbnZhbGlkQ29va2llRG9tYWluRXJyb3IsXG4gIEludmFsaWRDb29yZGluYXRlc0Vycm9yLFxuICBVbmFibGVUb1NldENvb2tpZUVycm9yLFxuICBVbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IsXG4gIE5vQWxlcnRPcGVuRXJyb3IsXG4gIFNjcmlwdFRpbWVvdXRFcnJvcixcbiAgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yLFxuICBJTUVOb3RBdmFpbGFibGVFcnJvcixcbiAgSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yLFxuICBJbnZhbGlkU2VsZWN0b3JFcnJvcixcbiAgU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcixcbiAgTW92ZVRhcmdldE91dE9mQm91bmRzRXJyb3IsXG4gIE5vU3VjaEFsZXJ0RXJyb3IsXG4gIE5vU3VjaENvbnRleHRFcnJvcixcbiAgSW52YWxpZENvbnRleHRFcnJvcixcbiAgTm9TdWNoRnJhbWVFcnJvcixcbiAgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLFxuICBVbmtub3duTWV0aG9kRXJyb3IsXG4gIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IsXG4gIFByb3h5UmVxdWVzdEVycm9yLFxufTtcblxuLy8gbWFwIG9mIGVycm9yIGNvZGUgdG8gZXJyb3IgY2xhc3NcbmNvbnN0IGpzb253cEVycm9yQ29kZU1hcCA9IHt9O1xuZm9yIChsZXQgRXJyb3JDbGFzcyBvZiBfLnZhbHVlcyhlcnJvcnMpKSB7XG4gIGlmICgnY29kZScgaW4gRXJyb3JDbGFzcykge1xuICAgIGpzb253cEVycm9yQ29kZU1hcFtFcnJvckNsYXNzLmNvZGUoKV0gPSBFcnJvckNsYXNzO1xuICB9XG59XG5cbmNvbnN0IHczY0Vycm9yQ29kZU1hcCA9IHt9O1xuZm9yIChsZXQgRXJyb3JDbGFzcyBvZiBfLnZhbHVlcyhlcnJvcnMpKSB7XG4gIGlmICgnZXJyb3InIGluIEVycm9yQ2xhc3MpIHtcbiAgICB3M2NFcnJvckNvZGVNYXBbRXJyb3JDbGFzcy5lcnJvcigpXSA9IEVycm9yQ2xhc3M7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVbmtub3duRXJyb3IoZXJyKSB7XG4gIHJldHVybiAoXG4gICAgIWVyci5jb25zdHJ1Y3Rvci5uYW1lIHx8XG4gICAgIV8udmFsdWVzKGVycm9ycykuZmluZChmdW5jdGlvbiBlcXVhbE5hbWVzKGVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyb3IubmFtZSA9PT0gZXJyLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNFcnJvclR5cGUoZXJyLCB0eXBlKSB7XG4gIC8vIGBuYW1lYCBwcm9wZXJ0eSBpcyB0aGUgY29uc3RydWN0b3IgbmFtZVxuICBpZiAodHlwZS5uYW1lID09PSBQcm90b2NvbEVycm9yLm5hbWUpIHtcbiAgICAvLyBganNvbndwQ29kZWAgaXMgYDBgIG9uIHN1Y2Nlc3NcbiAgICByZXR1cm4gISFlcnIuanNvbndwQ29kZTtcbiAgfSBlbHNlIGlmICh0eXBlLm5hbWUgPT09IFByb3h5UmVxdWVzdEVycm9yLm5hbWUpIHtcbiAgICAvLyBgc3RhdHVzYCBpcyBgMGAgb24gc3VjY2Vzc1xuICAgIGlmIChlcnIuanNvbndwKSB7XG4gICAgICByZXR1cm4gISFlcnIuanNvbndwLnN0YXR1cztcbiAgICB9XG5cbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGVyci53M2MpKSB7XG4gICAgICByZXR1cm4gXy5pc051bWJlcihlcnIudzNjU3RhdHVzKSAmJiBlcnIudzNjU3RhdHVzID49IDMwMDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGVyci5jb25zdHJ1Y3Rvci5uYW1lID09PSB0eXBlLm5hbWU7XG59XG5cbi8qKlxuICogUmV0cmlldmUgYW4gZXJyb3IgZGVyaXZlZCBmcm9tIE1KU09OV1Agc3RhdHVzXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZSBKU09OV1Agc3RhdHVzIGNvZGVcbiAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gdmFsdWUgVGhlIGVycm9yIG1lc3NhZ2UsIG9yIGFuIG9iamVjdCB3aXRoIGEgYG1lc3NhZ2VgIHByb3BlcnR5XG4gKiBAcmV0dXJuIHtQcm90b2NvbEVycm9yfSBUaGUgZXJyb3IgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggcHJvdmlkZWQgSlNPTldQIHN0YXR1cyBjb2RlXG4gKi9cbmZ1bmN0aW9uIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKGNvZGUsIHZhbHVlID0gJycpIHtcbiAgLy8gaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIHB1bGwgbWVzc2FnZSBmcm9tIGl0LCBvdGhlcndpc2UgdXNlIHRoZSBwbGFpblxuICAvLyB2YWx1ZSwgb3IgZGVmYXVsdCB0byBhbiBlbXB0eSBzdHJpbmcsIGlmIG51bGxcbiAgY29uc3QgbWVzc2FnZSA9ICh2YWx1ZSB8fCB7fSkubWVzc2FnZSB8fCB2YWx1ZSB8fCAnJztcbiAgaWYgKGNvZGUgIT09IFVua25vd25FcnJvci5jb2RlKCkgJiYganNvbndwRXJyb3JDb2RlTWFwW2NvZGVdKSB7XG4gICAgbWpzb253cExvZy5kZWJ1ZyhgTWF0Y2hlZCBKU09OV1AgZXJyb3IgY29kZSAke2NvZGV9IHRvICR7anNvbndwRXJyb3JDb2RlTWFwW2NvZGVdLm5hbWV9YCk7XG4gICAgcmV0dXJuIG5ldyBqc29ud3BFcnJvckNvZGVNYXBbY29kZV0obWVzc2FnZSk7XG4gIH1cbiAgbWpzb253cExvZy5kZWJ1ZyhgTWF0Y2hlZCBKU09OV1AgZXJyb3IgY29kZSAke2NvZGV9IHRvIFVua25vd25FcnJvcmApO1xuICByZXR1cm4gbmV3IFVua25vd25FcnJvcihtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbiBlcnJvciBkZXJpdmVkIGZyb20gVzNDIEpTT04gQ29kZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgVzNDIGVycm9yIHN0cmluZyAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2hhbmRsaW5nLWVycm9ycyBgSlNPTiBFcnJvciBDb2RlYCBjb2x1bW4pXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSB0aGUgZXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHs/c3RyaW5nfSBzdGFja3RyYWNlIGFuIG9wdGlvbmFsIGVycm9yIHN0YWNrdHJhY2VcbiAqIEByZXR1cm4ge1Byb3RvY29sRXJyb3J9ICBUaGUgZXJyb3IgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIFczQyBlcnJvciBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZXJyb3JGcm9tVzNDSnNvbkNvZGUoY29kZSwgbWVzc2FnZSwgc3RhY2t0cmFjZSA9IG51bGwpIHtcbiAgaWYgKGNvZGUgJiYgdzNjRXJyb3JDb2RlTWFwW2NvZGUudG9Mb3dlckNhc2UoKV0pIHtcbiAgICB3M2NMb2cuZGVidWcoYE1hdGNoZWQgVzNDIGVycm9yIGNvZGUgJyR7Y29kZX0nIHRvICR7dzNjRXJyb3JDb2RlTWFwW2NvZGUudG9Mb3dlckNhc2UoKV0ubmFtZX1gKTtcbiAgICBjb25zdCByZXN1bHRFcnJvciA9IG5ldyB3M2NFcnJvckNvZGVNYXBbY29kZS50b0xvd2VyQ2FzZSgpXShtZXNzYWdlKTtcbiAgICByZXN1bHRFcnJvci5zdGFja3RyYWNlID0gc3RhY2t0cmFjZTtcbiAgICByZXR1cm4gcmVzdWx0RXJyb3I7XG4gIH1cbiAgdzNjTG9nLmRlYnVnKGBNYXRjaGVkIFczQyBlcnJvciBjb2RlICcke2NvZGV9JyB0byBVbmtub3duRXJyb3JgKTtcbiAgY29uc3QgcmVzdWx0RXJyb3IgPSBuZXcgVW5rbm93bkVycm9yKG1lc3NhZ2UpO1xuICByZXN1bHRFcnJvci5zdGFja3RyYWNlID0gc3RhY2t0cmFjZTtcbiAgcmV0dXJuIHJlc3VsdEVycm9yO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge2FueX0gZXJyXG4gKiBAcmV0dXJucyB7ZXJyIGlzIFByb3RvY29sRXJyb3J9XG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG9jb2xFcnJvcihlcnIpIHtcbiAgcmV0dXJuICd3M2NTdGF0dXMnIGluIGVycjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIEFwcGl1bSBlcnJvciB0byBwcm9wZXIgVzNDIEhUVFAgcmVzcG9uc2VcbiAqIEBwYXJhbSB7UHJvdG9jb2xFcnJvcnxNSlNPTldQRXJyb3J9IGVyciBUaGUgZXJyb3IgdGhhdCBuZWVkcyB0byBiZSB0cmFuc2xhdGVkXG4gKi9cbmZ1bmN0aW9uIGdldFJlc3BvbnNlRm9yVzNDRXJyb3IoZXJyKSB7XG4gIGxldCBodHRwU3RhdHVzO1xuXG4gIC8vIFczQyBkZWZpbmVkIGVycm9yIG1lc3NhZ2UgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2Rmbi1lcnJvci1jb2RlKVxuICBsZXQgdzNjRXJyb3JTdHJpbmc7XG5cbiAgaWYgKCFpc1Byb3RvY29sRXJyb3IoZXJyKSkge1xuICAgIGVyciA9IHV0aWwuaGFzVmFsdWUoZXJyLnN0YXR1cylcbiAgICAgID8gLy8gSWYgaXQncyBhIEpTT05XUCBlcnJvciwgZmluZCBjb3JyZXNwb25kaW5nIGVycm9yXG4gICAgICAgIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKGVyci5zdGF0dXMsIGVyci52YWx1ZSlcbiAgICAgIDogbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICB9XG5cbiAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLkJhZFBhcmFtZXRlcnNFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA0MDAgaWYgd2UgaGF2ZSBiYWQgcGFyYW1ldGVyc1xuICAgIHczY0xvZy5kZWJ1ZyhgQmFkIHBhcmFtZXRlcnM6ICR7ZXJyfWApO1xuICAgIHczY0Vycm9yU3RyaW5nID0gQmFkUGFyYW1ldGVyc0Vycm9yLmVycm9yKCk7XG4gIH0gZWxzZSB7XG4gICAgdzNjRXJyb3JTdHJpbmcgPSBlcnIuZXJyb3I7XG4gIH1cblxuICBodHRwU3RhdHVzID0gZXJyLnczY1N0YXR1cztcblxuICBpZiAoIXczY0Vycm9yU3RyaW5nKSB7XG4gICAgdzNjRXJyb3JTdHJpbmcgPSBVbmtub3duRXJyb3IuZXJyb3IoKTtcbiAgfVxuXG4gIGxldCBodHRwUmVzQm9keSA9IHtcbiAgICB2YWx1ZToge1xuICAgICAgZXJyb3I6IHczY0Vycm9yU3RyaW5nLFxuICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICBzdGFja3RyYWNlOiBlcnIuc3RhY2t0cmFjZSB8fCBlcnIuc3RhY2ssXG4gICAgfSxcbiAgfTtcbiAgcmV0dXJuIFtodHRwU3RhdHVzLCBodHRwUmVzQm9keV07XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBBcHBpdW0gZXJyb3IgdG8gYSBwcm9wZXIgSlNPTldQIHJlc3BvbnNlXG4gKiBAcGFyYW0ge1Byb3RvY29sRXJyb3J9IGVyciBUaGUgZXJyb3IgdG8gYmUgY29udmVydGVkXG4gKi9cbmZ1bmN0aW9uIGdldFJlc3BvbnNlRm9ySnNvbndwRXJyb3IoZXJyKSB7XG4gIGlmIChpc1Vua25vd25FcnJvcihlcnIpKSB7XG4gICAgZXJyID0gbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoZXJyKTtcbiAgfVxuICAvLyBNSlNPTldQIGVycm9ycyBhcmUgdXN1YWxseSA1MDAgc3RhdHVzIGNvZGUgc28gc2V0IGl0IHRvIHRoYXQgYnkgZGVmYXVsdFxuICBsZXQgaHR0cFN0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG5cbiAgLyoqIEB0eXBlIHtIdHRwUmVzdWx0Qm9keX0gKi9cbiAgbGV0IGh0dHBSZXNCb2R5ID0ge1xuICAgIHN0YXR1czogZXJyLmpzb253cENvZGUsXG4gICAgdmFsdWU6IHtcbiAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgIH0sXG4gIH07XG5cbiAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLkJhZFBhcmFtZXRlcnNFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA0MDAgaWYgd2UgaGF2ZSBiYWQgcGFyYW1ldGVyc1xuICAgIG1qc29ud3BMb2cuZGVidWcoYEJhZCBwYXJhbWV0ZXJzOiAke2Vycn1gKTtcbiAgICBodHRwU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICAgIGh0dHBSZXNCb2R5ID0gZXJyLm1lc3NhZ2U7XG4gIH0gZWxzZSBpZiAoXG4gICAgaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuTm90WWV0SW1wbGVtZW50ZWRFcnJvcikgfHxcbiAgICBpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKVxuICApIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA1MDEgaWYgdGhlIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWRcbiAgICBodHRwU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLk5PVF9JTVBMRU1FTlRFRDtcbiAgfSBlbHNlIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Ob1N1Y2hEcml2ZXJFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA0MDQgaWYgdGhlcmUgaXMgbm8gZHJpdmVyIGZvciB0aGUgc2Vzc2lvblxuICAgIGh0dHBTdGF0dXMgPSBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG5cbiAgcmV0dXJuIFtodHRwU3RhdHVzLCBodHRwUmVzQm9keV07XG59XG5cbmV4cG9ydCB7XG4gIGVycm9ycyxcbiAgaXNFcnJvclR5cGUsXG4gIGlzVW5rbm93bkVycm9yLFxuICBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSxcbiAgZXJyb3JGcm9tVzNDSnNvbkNvZGUsXG4gIGdldFJlc3BvbnNlRm9yVzNDRXJyb3IsXG4gIGdldFJlc3BvbnNlRm9ySnNvbndwRXJyb3IsXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHsgc3RyaW5nIHwge3ZhbHVlOiBIdHRwUmVzdWx0Qm9keVZhbHVlLCBzdGF0dXM/OiBudW1iZXIgfSB9IEh0dHBSZXN1bHRCb2R5XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBIdHRwUmVzdWx0Qm9keVZhbHVlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21lc3NhZ2VdXG4gKiBAcHJvcGVydHkge3N0cmluZ3xFcnJvcn0gW2Vycm9yXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzdGFja3RyYWNlXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgTUpTT05XUEVycm9yXG4gKiBAcHJvcGVydHkge251bWJlcn0gc3RhdHVzXG4gKiBAcHJvcGVydHkge3N0cmluZ3xvYmplY3R9IHZhbHVlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVzc2FnZVxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLFVBQVUsR0FBR0MsZUFBQSxDQUFPQyxTQUFQLENBQWlCLFNBQWpCLENBQW5COztBQUNBLE1BQU1DLE1BQU0sR0FBR0YsZUFBQSxDQUFPQyxTQUFQLENBQWlCLEtBQWpCLENBQWY7O0FBRUEsTUFBTUUsaUJBQWlCLEdBQUcsZUFBMUI7O0FBR08sTUFBTUMsYUFBTixTQUE0QkMsaUJBQTVCLENBQXFDO0VBQzFDQyxXQUFXLENBQUNDLEdBQUQsRUFBTUMsVUFBTixFQUFrQkMsU0FBbEIsRUFBNkJDLEtBQTdCLEVBQW9DO0lBQzdDLE1BQU1ILEdBQU47SUFDQSxLQUFLQyxVQUFMLEdBQWtCQSxVQUFsQjtJQUNBLEtBQUtFLEtBQUwsR0FBYUEsS0FBSyxJQUFJUCxpQkFBdEI7O0lBQ0EsSUFBSSxLQUFLSyxVQUFMLEtBQW9CLElBQXhCLEVBQThCO01BQzVCLEtBQUtBLFVBQUwsR0FBa0IsRUFBbEI7SUFDRDs7SUFDRCxLQUFLQyxTQUFMLEdBQWlCQSxTQUFTLElBQUlFLDRCQUFBLENBQWdCQyxX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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","names":["mjsonwpLog","logger","getLogger","w3cLog","W3C_UNKNOWN_ERROR","ProtocolError","ES6Error","constructor","msg","jsonwpCode","w3cStatus","error","HTTPStatusCodes","BAD_REQUEST","_stacktrace","stacktrace","stack","value","NoSuchDriverError","code","NOT_FOUND","err","NoSuchElementError","NoSuchFrameError","UnknownCommandError","StaleElementReferenceError","ElementNotVisibleError","InvalidElementStateError","UnknownError","INTERNAL_SERVER_ERROR","errorOrMessage","origMessage","_","isString","message","UnknownMethodError","METHOD_NOT_ALLOWED","UnsupportedOperationError","ElementIsNotSelectableError","ElementClickInterceptedError","ElementNotInteractableError","InsecureCertificateError","JavaScriptError","XPathLookupError","TimeoutError","REQUEST_TIMEOUT","NoSuchWindowError","InvalidArgumentError","InvalidCookieDomainError","NoSuchCookieError","UnableToSetCookieError","UnexpectedAlertOpenError","NoAlertOpenError","NoSuchAlertError","ScriptTimeoutError","InvalidElementCoordinatesError","InvalidCoordinatesError","IMENotAvailableError","IMEEngineActivationFailedError","InvalidSelectorError","SessionNotCreatedError","details","MoveTargetOutOfBoundsError","NoSuchContextError","InvalidContextError","NotYetImplementedError","NotImplementedError","UnableToCaptureScreen","BadParametersError","requiredParams","actualParams","errMessage","JSON","stringify","ProxyRequestError","responseError","httpStatus","responseErrorObj","util","safeJsonParse","isPlainObject","isEmpty","has","w3c","jsonwp","getActualError","hasValue","status","errorFromMJSONWPStatusCode","isNumber","errorFromW3CJsonCode","errors","jsonwpErrorCodeMap","ErrorClass","values","w3cErrorCodeMap","isUnknownError","name","find","equalNames","isErrorType","type","debug","toLowerCase","resultError","isProtocolError","getResponseForW3CError","w3cErrorString","httpResBody","getResponseForJsonwpError","NOT_IMPLEMENTED"],"sources":["../../../lib/protocol/errors.js"],"sourcesContent":["import ES6Error from 'es6-error';\nimport _ from 'lodash';\nimport {util, logger} from '@appium/support';\nimport {StatusCodes as HTTPStatusCodes} from 'http-status-codes';\n\nconst mjsonwpLog = logger.getLogger('MJSONWP');\nconst w3cLog = logger.getLogger('W3C');\n\nconst W3C_UNKNOWN_ERROR = 'unknown error';\n\n// base error class for all of our errors\nexport class ProtocolError extends ES6Error {\n constructor(msg, jsonwpCode, w3cStatus, error) {\n super(msg);\n this.jsonwpCode = jsonwpCode;\n this.error = error || W3C_UNKNOWN_ERROR;\n if (this.jsonwpCode === null) {\n this.jsonwpCode = 13;\n }\n this.w3cStatus = w3cStatus || HTTPStatusCodes.BAD_REQUEST;\n this._stacktrace = null;\n }\n\n get stacktrace() {\n return this._stacktrace || this.stack;\n }\n\n set stacktrace(value) {\n this._stacktrace = value;\n }\n}\n\n// https://github.com/SeleniumHQ/selenium/blob/176b4a9e3082ac1926f2a436eb346760c37a5998/java/client/src/org/openqa/selenium/remote/ErrorCodes.java#L215\n// https://github.com/SeleniumHQ/selenium/issues/5562#issuecomment-370379470\n// https://w3c.github.io/webdriver/webdriver-spec.html#dfn-error-code\n\nexport class NoSuchDriverError extends ProtocolError {\n static code() {\n return 6;\n }\n // W3C Error is called InvalidSessionID\n static w3cStatus() {\n return HTTPStatusCodes.NOT_FOUND;\n }\n static error() {\n return 'invalid session id';\n }\n constructor(err) {\n super(\n err || 'A session is either terminated or not started',\n NoSuchDriverError.code(),\n NoSuchDriverError.w3cStatus(),\n NoSuchDriverError.error()\n );\n }\n}\n\nexport class NoSuchElementError extends ProtocolError {\n static code() {\n return 7;\n }\n static w3cStatus() {\n return HTTPStatusCodes.NOT_FOUND;\n }\n static error() {\n return 'no such element';\n }\n constructor(err) {\n super(\n err || 'An element could not be located on the page using the given ' + 'search parameters.',\n NoSuchElementError.code(),\n NoSuchElementError.w3cStatus(),\n NoSuchElementError.error()\n );\n }\n}\n\nexport class NoSuchFrameError extends ProtocolError {\n static code() {\n return 8;\n }\n static error() {\n return 'no such frame';\n }\n static w3cStatus() {\n return HTTPStatusCodes.NOT_FOUND;\n }\n constructor(err) {\n super(\n err ||\n 'A request to switch to a frame could not be satisfied because ' +\n 'the frame could not be found.',\n NoSuchFrameError.code(),\n NoSuchFrameError.w3cStatus(),\n NoSuchFrameError.error()\n );\n }\n}\n\nexport class UnknownCommandError extends ProtocolError {\n static code() {\n return 9;\n }\n static w3cStatus() {\n return HTTPStatusCodes.NOT_FOUND;\n }\n static error() {\n return 'unknown command';\n }\n constructor(err) {\n super(\n err ||\n 'The requested resource could not be found, or a request was ' +\n 'received using an HTTP method that is not supported by the mapped ' +\n 'resource.',\n UnknownCommandError.code(),\n UnknownCommandError.w3cStatus(),\n UnknownCommandError.error()\n );\n }\n}\n\nexport class StaleElementReferenceError extends ProtocolError {\n static code() {\n return 10;\n }\n static w3cStatus() {\n return HTTPStatusCodes.NOT_FOUND;\n }\n static error() {\n return 'stale element reference';\n }\n constructor(err) {\n super(\n err ||\n 'An element command failed because the referenced element is no ' +\n 'longer attached to the DOM.',\n StaleElementReferenceError.code(),\n StaleElementReferenceError.w3cStatus(),\n StaleElementReferenceError.error()\n );\n }\n}\n\nexport class ElementNotVisibleError extends ProtocolError {\n static code() {\n return 11;\n }\n static w3cStatus() {\n return HTTPStatusCodes.BAD_REQUEST;\n }\n static error() {\n return 'element not visible';\n }\n constructor(err) {\n super(\n err ||\n 'An element command could not be completed because the element is ' +\n 'not visible on the page.',\n ElementNotVisibleError.code(),\n ElementNotVisibleError.w3cStatus(),\n ElementNotVisibleError.error()\n );\n }\n}\n\nexport class InvalidElementStateError extends ProtocolError {\n static code() {\n return 12;\n }\n static w3cStatus() {\n return HTTPStatusCodes.BAD_REQUEST;\n }\n static error() {\n return 'invalid element state';\n }\n constructor(err) {\n super(\n err ||\n 'An element command could not be completed because the element is ' +\n 'in an invalid state (e.g. attempting to click a disabled element).',\n InvalidElementStateError.code(),\n InvalidElementStateError.w3cStatus(),\n InvalidElementStateError.error()\n );\n }\n}\n\nexport class UnknownError extends ProtocolError {\n static code() {\n return 13;\n }\n static w3cStatus() {\n return HTTPStatusCodes.INTERNAL_SERVER_ERROR;\n }\n static error() {\n return W3C_UNKNOWN_ERROR;\n }\n constructor(errorOrMessage) {\n const origMessage = _.isString((errorOrMessage || {}).message)\n ? errorOrMessage.message\n : errorOrMessage;\n const message =\n 'An unknown server-side error occurred while processing the command.' +\n (origMessage ? ` Original error: ${origMessage}` : '');\n super(message, UnknownError.code(), UnknownError.w3cStatus(), UnknownError.error());\n }\n}\n\nexport class UnknownMethodError extends ProtocolError {\n static code() {\n return 405;\n }\n static w3cStatus() {\n return HTTPStatusCodes.METHOD_NOT_ALLOWED;\n }\n static error() {\n return 'unknown method';\n }\n constructor(err) {\n super(\n err || 'The requested command matched a known URL but did not match an method for that URL',\n UnknownMethodError.code(),\n UnknownMethodError.w3cStatus(),\n UnknownMethodError.error()\n );\n }\n}\n\nexport class UnsupportedOperationError extends ProtocolError {\n static code() {\n return 405;\n }\n static w3cStatus() {\n return HTTPStatusCodes.INTERNAL_SERVER_ERROR;\n }\n static error() {\n return 'unsupported operation';\n }\n constructor(err) {\n super(\n err || 'A server-side error occurred. Command cannot be supported.',\n UnsupportedOperationError.code(),\n UnsupportedOperationError.w3cStatus(),\n UnsupportedOperationError.error()\n );\n }\n}\n\nexport class ElementIsNotSelectableError extends ProtocolError {\n static code() {\n return 15;\n }\n static error() {\n return 'element not selectable';\n }\n static w3cStatus() {\n return HTTPStatusCodes.BAD_REQUEST;\n }\n constructor(err) {\n super(\n err || 'An attempt was made to select an element that cannot be selected.',\n ElementIsNotSelectableError.code(),\n ElementIsNotSelectableError.w3cStatus(),\n ElementIsNotSelectableError.error()\n );\n }\n}\n\nexport class ElementClickInterceptedError extends ProtocolError {\n static code() {\n return 64;\n }\n static error() {\n return 'element click intercepted';\n }\n static w3cStatus() {\n return HTTPStatusCodes.BAD_REQUEST;\n }\n constructor(err) {\n super(\n err ||\n 'The Element Click command could not be completed because the element receiving ' +\n 'the events is obscuring the element that was requested clicked',\n ElementClickInterceptedError.code(),\n ElementClickInterceptedError.w3cStatus(),\n ElementClickInterceptedError.error()\n );\n }\n}\n\nexport class ElementNotInteractableError extends ProtocolError {\n static code() {\n return 60;\n }\n static error() {\n return 'element not interactable';\n }\n static w3cStatus() {\n return HTTPStatusCodes.BAD_REQUEST;\n }\n constructor(err) {\n super(\n err ||\n 'A command could not be completed because the element is not pointer- or keyboard interactable',\n ElementNotInteractableError.code(),\n ElementNotInteractableError.w3cStatus(),\n ElementNotInteractableError.error()\n );\n }\n}\n\nexport class InsecureCertificateError extends ProtocolError {\n static error() {\n return 'insecure certificate';\n }\n constructor(err) {\n super(\n err ||\n 'Navigation caused the user agent to hit a certificate warning, which is usually the result of an expired or invalid TLS certificate',\n ElementIsNotSelectableError.code(),\n null,\n InsecureCertificateError.error()\n );\n }\n}\n\nexport class JavaScriptError extends ProtocolError {\n static code() {\n return 17;\n }\n static w3cStatus() {\n return HTTPStatusCodes.INTERNAL_SERVER_ERROR;\n }\n static error() {\n return 'javascript error';\n }\n constructor(err) {\n super(\n err || 'An error occurred while executing user supplied JavaScript.',\n JavaScriptError.code(),\n JavaScriptError.w3cStatus(),\n JavaScriptError.error()\n );\n }\n}\n\nexport class XPathLookupError extends ProtocolError {\n static code() {\n return 19;\n }\n static w3cStatus() {\n return HTTPStatusCodes.BAD_REQUEST;\n }\n static error() {\n return 'invalid selector';\n }\n constructor(err) {\n super(\n err || 'An error occurred while searching for an element by XPath.',\n XPathLookupError.code(),\n XPathLookupError.w3cStatus(),\n XPathLookupError.error()\n );\n }\n}\n\nexport class TimeoutError extends ProtocolError {\n static code() {\n return 21;\n }\n static w3cStatus() {\n return HTTPStatusCodes.REQUEST_TIMEOUT;\n }\n static error() {\n return 'timeout';\n }\n constructor(err) {\n super(\n err || 'An operation did not complete before its timeout expired.',\n TimeoutError.code(),\n TimeoutError.w3cStatus(),\n TimeoutError.error()\n );\n }\n}\n\nexport class NoSuchWindowError extends ProtocolError {\n static code() {\n return 23;\n }\n static error() {\n return 'no such window';\n }\n static w3cStatus() {\n return HTTPStatusCodes.NOT_FOUND;\n }\n constructor(err) {\n super(\n err ||\n 'A request to switch to a different window could not be satisfied ' +\n 'because the window could not be found.',\n NoSuchWindowError.code(),\n NoSuchWindowError.w3cStatus(),\n NoSuchWindowError.error()\n );\n }\n}\n\nexport class InvalidArgumentError extends ProtocolError {\n static code() {\n return 61;\n }\n static error() {\n return 'invalid argument';\n }\n static w3cStatus() {\n return HTTPStatusCodes.BAD_REQUEST;\n }\n constructor(err) {\n super(\n err || 'The arguments passed to the command are either invalid or malformed',\n InvalidArgumentError.code(),\n InvalidArgumentError.w3cStatus(),\n InvalidArgumentError.error()\n );\n }\n}\n\nexport class InvalidCookieDomainError extends ProtocolError {\n static code() {\n return 24;\n }\n static error() {\n return 'invalid cookie domain';\n }\n static w3cStatus() {\n return HTTPStatusCodes.BAD_REQUEST;\n }\n constructor(err) {\n super(\n err ||\n 'An illegal attempt was made to set a cookie under a different ' +\n 'domain than the current page.',\n InvalidCookieDomainError.code(),\n InvalidCookieDomainError.w3cStatus(),\n InvalidCookieDomainError.error()\n );\n }\n}\n\nexport class NoSuchCookieError extends ProtocolError {\n static code() {\n return 62;\n }\n static w3cStatus() {\n return HTTPStatusCodes.NOT_FOUND;\n }\n static error() {\n return 'no such cookie';\n }\n constructor(err) {\n super(\n err ||\n 'No cookie matching the given path name was found amongst the associated cookies of the current browsing context’s active document',\n NoSuchCookieError.code(),\n NoSuchCookieError.w3cStatus(),\n NoSuchCookieError.error()\n );\n }\n}\n\nexport class UnableToSetCookieError extends ProtocolError {\n static code() {\n return 25;\n }\n static w3cStatus() {\n return HTTPStatusCodes.INTERNAL_SERVER_ERROR;\n }\n static error() {\n return 'unable to set cookie';\n }\n constructor(err) {\n super(\n err || \"A request to set a cookie's value could not be satisfied.\",\n UnableToSetCookieError.code(),\n UnableToSetCookieError.w3cStatus(),\n UnableToSetCookieError.error()\n );\n }\n}\n\nexport class UnexpectedAlertOpenError extends ProtocolError {\n static code() {\n return 26;\n }\n static w3cStatus() {\n return HTTPStatusCodes.INTERNAL_SERVER_ERROR;\n }\n static error() {\n return 'unexpected alert open';\n }\n constructor(err) {\n super(\n err || 'A modal dialog was open, blocking this operation',\n UnexpectedAlertOpenError.code(),\n UnexpectedAlertOpenError.w3cStatus(),\n UnexpectedAlertOpenError.error()\n );\n }\n}\n\nexport class NoAlertOpenError extends ProtocolError {\n static code() {\n return 27;\n }\n static w3cStatus() {\n return HTTPStatusCodes.NOT_FOUND;\n }\n static error() {\n return 'no such alert';\n }\n constructor(err) {\n super(\n err || 'An attempt was made to operate on a modal dialog when one ' + 'was not open.',\n NoAlertOpenError.code(),\n NoAlertOpenError.w3cStatus(),\n NoAlertOpenError.error()\n );\n }\n}\n\nexport class NoSuchAlertError extends NoAlertOpenError {}\n\nexport class ScriptTimeoutError extends ProtocolError {\n static code() {\n return 28;\n }\n static w3cStatus() {\n return HTTPStatusCodes.REQUEST_TIMEOUT;\n }\n static error() {\n return 'script timeout';\n }\n constructor(err) {\n super(\n err || 'A script did not complete before its timeout expired.',\n ScriptTimeoutError.code(),\n ScriptTimeoutError.w3cStatus(),\n ScriptTimeoutError.error()\n );\n }\n}\n\nexport class InvalidElementCoordinatesError extends ProtocolError {\n static code() {\n return 29;\n }\n static w3cStatus() {\n return HTTPStatusCodes.BAD_REQUEST;\n }\n static error() {\n return 'invalid coordinates';\n }\n constructor(err) {\n super(\n err || 'The coordinates provided to an interactions operation are invalid.',\n InvalidElementCoordinatesError.code(),\n InvalidElementCoordinatesError.w3cStatus(),\n InvalidElementCoordinatesError.error()\n );\n }\n}\n\nexport class InvalidCoordinatesError extends InvalidElementCoordinatesError {}\n\nexport class IMENotAvailableError extends ProtocolError {\n static code() {\n return 30;\n }\n static w3cStatus() {\n return HTTPStatusCodes.INTERNAL_SERVER_ERROR;\n }\n static error() {\n return 'unsupported operation';\n }\n constructor(err) {\n super(\n err || 'IME was not available.',\n IMENotAvailableError.code(),\n IMENotAvailableError.w3cStatus(),\n IMENotAvailableError.error()\n );\n }\n}\n\nexport class IMEEngineActivationFailedError extends ProtocolError {\n static code() {\n return 31;\n }\n static w3cStatus() {\n return HTTPStatusCodes.INTERNAL_SERVER_ERROR;\n }\n static error() {\n return 'unsupported operation';\n }\n constructor(err) {\n super(\n err || 'An IME engine could not be started.',\n IMEEngineActivationFailedError.code(),\n IMEEngineActivationFailedError.w3cStatus(),\n IMEEngineActivationFailedError.error()\n );\n }\n}\n\nexport class InvalidSelectorError extends ProtocolError {\n static code() {\n return 32;\n }\n static w3cStatus() {\n return HTTPStatusCodes.BAD_REQUEST;\n }\n static error() {\n return 'invalid selector';\n }\n constructor(err) {\n super(\n err || 'Argument was an invalid selector (e.g. XPath/CSS).',\n InvalidSelectorError.code(),\n InvalidSelectorError.w3cStatus(),\n InvalidSelectorError.error()\n );\n }\n}\n\nexport class SessionNotCreatedError extends ProtocolError {\n static code() {\n return 33;\n }\n static w3cStatus() {\n return HTTPStatusCodes.INTERNAL_SERVER_ERROR;\n }\n static error() {\n return 'session not created';\n }\n constructor(details) {\n let message = 'A new session could not be created.';\n if (details) {\n message += ` Details: ${details}`;\n }\n\n super(\n message,\n SessionNotCreatedError.code(),\n SessionNotCreatedError.w3cStatus(),\n SessionNotCreatedError.error()\n );\n }\n}\n\nexport class MoveTargetOutOfBoundsError extends ProtocolError {\n static code() {\n return 34;\n }\n static w3cStatus() {\n return HTTPStatusCodes.INTERNAL_SERVER_ERROR;\n }\n static error() {\n return 'move target out of bounds';\n }\n constructor(err) {\n super(\n err || 'Target provided for a move action is out of bounds.',\n MoveTargetOutOfBoundsError.code(),\n MoveTargetOutOfBoundsError.w3cStatus(),\n MoveTargetOutOfBoundsError.error()\n );\n }\n}\n\nexport class NoSuchContextError extends ProtocolError {\n static code() {\n return 35;\n }\n constructor(err) {\n super(err || 'No such context found.', NoSuchContextError.code());\n }\n}\n\nexport class InvalidContextError extends ProtocolError {\n static code() {\n return 36;\n }\n constructor(err) {\n super(\n err || 'That command could not be executed in the current context.',\n InvalidContextError.code()\n );\n }\n}\n\n// These are aliases for UnknownMethodError\nexport class NotYetImplementedError extends UnknownMethodError {\n constructor(err) {\n super(err || 'Method has not yet been implemented');\n }\n}\nexport class NotImplementedError extends UnknownMethodError {\n constructor(err) {\n super(err || 'Method is not implemented');\n }\n}\n\nexport class UnableToCaptureScreen extends ProtocolError {\n static code() {\n return 63;\n }\n static w3cStatus() {\n return HTTPStatusCodes.INTERNAL_SERVER_ERROR;\n }\n static error() {\n return 'unable to capture screen';\n }\n constructor(err) {\n super(\n err || 'A screen capture was made impossible',\n UnableToCaptureScreen.code(),\n UnableToCaptureScreen.w3cStatus(),\n UnableToCaptureScreen.error()\n );\n }\n}\n\n// Equivalent to W3C InvalidArgumentError\nexport class BadParametersError extends ES6Error {\n static error() {\n return 'invalid argument';\n }\n constructor(requiredParams, actualParams, errMessage) {\n let message;\n if (!errMessage) {\n message =\n `Parameters were incorrect. We wanted ` +\n `${JSON.stringify(requiredParams)} and you ` +\n `sent ${JSON.stringify(actualParams)}`;\n } else {\n message = `Parameters were incorrect. You sent ${JSON.stringify(\n actualParams\n )}, ${errMessage}`;\n }\n super(message);\n this.w3cStatus = HTTPStatusCodes.BAD_REQUEST;\n }\n}\n\n/**\n * ProxyRequestError is a custom error and will be thrown up on unsuccessful proxy request and\n * will contain information about the proxy failure.\n * In case of ProxyRequestError should fetch the actual error by calling `getActualError()`\n * for proxy failure to generate the client response.\n */\nexport class ProxyRequestError extends ES6Error {\n constructor(err, responseError, httpStatus) {\n let responseErrorObj = util.safeJsonParse(responseError);\n if (!_.isPlainObject(responseErrorObj)) {\n responseErrorObj = {};\n }\n let origMessage = _.isString(responseError) ? responseError : '';\n if (!_.isEmpty(responseErrorObj)) {\n if (_.isString(responseErrorObj.value)) {\n origMessage = responseErrorObj.value;\n } else if (\n _.isPlainObject(responseErrorObj.value) &&\n _.isString(responseErrorObj.value.message)\n ) {\n origMessage = responseErrorObj.value.message;\n }\n }\n super(_.isEmpty(err) ? `Proxy request unsuccessful. ${origMessage}` : err);\n\n this.w3cStatus = HTTPStatusCodes.BAD_REQUEST;\n\n // If the response error is an object and value is an object, it's a W3C error (for JSONWP value is a string)\n if (_.isPlainObject(responseErrorObj.value) && _.has(responseErrorObj.value, 'error')) {\n this.w3c = responseErrorObj.value;\n this.w3cStatus = httpStatus || HTTPStatusCodes.BAD_REQUEST;\n } else {\n this.jsonwp = responseErrorObj;\n }\n }\n\n getActualError() {\n // If it's MJSONWP error, returns actual error cause for request failure based on `jsonwp.status`\n if (util.hasValue(this.jsonwp?.status) && util.hasValue(this.jsonwp?.value)) {\n return errorFromMJSONWPStatusCode(this.jsonwp.status, this.jsonwp.value);\n } else if (util.hasValue(this.w3c) && _.isNumber(this.w3cStatus) && this.w3cStatus >= 300) {\n return errorFromW3CJsonCode(\n this.w3c.error,\n this.w3c.message || this.message,\n this.w3c.stacktrace\n );\n }\n return new UnknownError(this.message);\n }\n}\n// map of error class name to error class\nconst errors = {\n NotYetImplementedError,\n NotImplementedError,\n BadParametersError,\n InvalidArgumentError,\n NoSuchDriverError,\n NoSuchElementError,\n UnknownCommandError,\n StaleElementReferenceError,\n ElementNotVisibleError,\n InvalidElementStateError,\n UnknownError,\n ElementIsNotSelectableError,\n ElementClickInterceptedError,\n ElementNotInteractableError,\n InsecureCertificateError,\n JavaScriptError,\n XPathLookupError,\n TimeoutError,\n NoSuchWindowError,\n NoSuchCookieError,\n InvalidCookieDomainError,\n InvalidCoordinatesError,\n UnableToSetCookieError,\n UnexpectedAlertOpenError,\n NoAlertOpenError,\n ScriptTimeoutError,\n InvalidElementCoordinatesError,\n IMENotAvailableError,\n IMEEngineActivationFailedError,\n InvalidSelectorError,\n SessionNotCreatedError,\n MoveTargetOutOfBoundsError,\n NoSuchAlertError,\n NoSuchContextError,\n InvalidContextError,\n NoSuchFrameError,\n UnableToCaptureScreen,\n UnknownMethodError,\n UnsupportedOperationError,\n ProxyRequestError,\n};\n\n// map of error code to error class\nconst jsonwpErrorCodeMap = {};\nfor (let ErrorClass of _.values(errors)) {\n if ('code' in ErrorClass) {\n jsonwpErrorCodeMap[ErrorClass.code()] = ErrorClass;\n }\n}\n\nconst w3cErrorCodeMap = {};\nfor (let ErrorClass of _.values(errors)) {\n if ('error' in ErrorClass) {\n w3cErrorCodeMap[ErrorClass.error()] = ErrorClass;\n }\n}\n\nfunction isUnknownError(err) {\n return (\n !err.constructor.name ||\n !_.values(errors).find(function equalNames(error) {\n return error.name === err.constructor.name;\n })\n );\n}\n\nfunction isErrorType(err, type) {\n // `name` property is the constructor name\n if (type.name === ProtocolError.name) {\n // `jsonwpCode` is `0` on success\n return !!err.jsonwpCode;\n } else if (type.name === ProxyRequestError.name) {\n // `status` is `0` on success\n if (err.jsonwp) {\n return !!err.jsonwp.status;\n }\n\n if (_.isPlainObject(err.w3c)) {\n return _.isNumber(err.w3cStatus) && err.w3cStatus >= 300;\n }\n\n return false;\n }\n return err.constructor.name === type.name;\n}\n\n/**\n * Retrieve an error derived from MJSONWP status\n * @param {number} code JSONWP status code\n * @param {string|Object} value The error message, or an object with a `message` property\n * @return {ProtocolError} The error that is associated with provided JSONWP status code\n */\nfunction errorFromMJSONWPStatusCode(code, value = '') {\n // if `value` is an object, pull message from it, otherwise use the plain\n // value, or default to an empty string, if null\n const message = (value || {}).message || value || '';\n if (code !== UnknownError.code() && jsonwpErrorCodeMap[code]) {\n mjsonwpLog.debug(`Matched JSONWP error code ${code} to ${jsonwpErrorCodeMap[code].name}`);\n return new jsonwpErrorCodeMap[code](message);\n }\n mjsonwpLog.debug(`Matched JSONWP error code ${code} to UnknownError`);\n return new UnknownError(message);\n}\n\n/**\n * Retrieve an error derived from W3C JSON Code\n * @param {string} code W3C error string (see https://www.w3.org/TR/webdriver/#handling-errors `JSON Error Code` column)\n * @param {string} message the error message\n * @param {?string} stacktrace an optional error stacktrace\n * @return {ProtocolError} The error that is associated with the W3C error string\n */\nfunction errorFromW3CJsonCode(code, message, stacktrace = null) {\n if (code && w3cErrorCodeMap[code.toLowerCase()]) {\n w3cLog.debug(`Matched W3C error code '${code}' to ${w3cErrorCodeMap[code.toLowerCase()].name}`);\n const resultError = new w3cErrorCodeMap[code.toLowerCase()](message);\n resultError.stacktrace = stacktrace;\n return resultError;\n }\n w3cLog.debug(`Matched W3C error code '${code}' to UnknownError`);\n const resultError = new UnknownError(message);\n resultError.stacktrace = stacktrace;\n return resultError;\n}\n\n/**\n *\n * @param {any} err\n * @returns {err is ProtocolError}\n */\nfunction isProtocolError(err) {\n return 'w3cStatus' in err;\n}\n\n/**\n * Convert an Appium error to proper W3C HTTP response\n * @param {ProtocolError|MJSONWPError} err The error that needs to be translated\n */\nfunction getResponseForW3CError(err) {\n let httpStatus;\n\n // W3C defined error message (https://www.w3.org/TR/webdriver/#dfn-error-code)\n let w3cErrorString;\n\n if (!isProtocolError(err)) {\n err = util.hasValue(err.status)\n ? // If it's a JSONWP error, find corresponding error\n errorFromMJSONWPStatusCode(err.status, err.value)\n : new errors.UnknownError(err.message);\n }\n\n if (isErrorType(err, errors.BadParametersError)) {\n // respond with a 400 if we have bad parameters\n w3cLog.debug(`Bad parameters: ${err}`);\n w3cErrorString = BadParametersError.error();\n } else {\n w3cErrorString = err.error;\n }\n\n httpStatus = err.w3cStatus;\n\n if (!w3cErrorString) {\n w3cErrorString = UnknownError.error();\n }\n\n let httpResBody = {\n value: {\n error: w3cErrorString,\n message: err.message,\n stacktrace: err.stacktrace || err.stack,\n },\n };\n return [httpStatus, httpResBody];\n}\n\n/**\n * Convert an Appium error to a proper JSONWP response\n * @param {ProtocolError} err The error to be converted\n */\nfunction getResponseForJsonwpError(err) {\n if (isUnknownError(err)) {\n err = new errors.UnknownError(err);\n }\n // MJSONWP errors are usually 500 status code so set it to that by default\n let httpStatus = HTTPStatusCodes.INTERNAL_SERVER_ERROR;\n\n /** @type {HttpResultBody} */\n let httpResBody = {\n status: err.jsonwpCode,\n value: {\n message: err.message,\n },\n };\n\n if (isErrorType(err, errors.BadParametersError)) {\n // respond with a 400 if we have bad parameters\n mjsonwpLog.debug(`Bad parameters: ${err}`);\n httpStatus = HTTPStatusCodes.BAD_REQUEST;\n httpResBody = err.message;\n } else if (\n isErrorType(err, errors.NotYetImplementedError) ||\n isErrorType(err, errors.NotImplementedError)\n ) {\n // respond with a 501 if the method is not implemented\n httpStatus = HTTPStatusCodes.NOT_IMPLEMENTED;\n } else if (isErrorType(err, errors.NoSuchDriverError)) {\n // respond with a 404 if there is no driver for the session\n httpStatus = HTTPStatusCodes.NOT_FOUND;\n }\n\n return [httpStatus, httpResBody];\n}\n\nexport {\n errors,\n isErrorType,\n isUnknownError,\n errorFromMJSONWPStatusCode,\n errorFromW3CJsonCode,\n getResponseForW3CError,\n getResponseForJsonwpError,\n};\n\n/**\n * @typedef { string | {value: HttpResultBodyValue, status?: number } } HttpResultBody\n */\n\n/**\n * @typedef HttpResultBodyValue\n * @property {string} [message]\n * @property {string|Error} [error]\n * @property {string} [stacktrace]\n */\n\n/**\n * @typedef MJSONWPError\n * @property {number} status\n * @property {string|object} value\n * @property {string} message\n */\n"],"mappings":"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"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
@@ -28,6 +26,8 @@ var _helpers = require("../basedriver/helpers");
|
|
|
28
26
|
|
|
29
27
|
var _constants = require("../constants");
|
|
30
28
|
|
|
29
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
30
|
+
|
|
31
31
|
function formatResponseValue(resValue) {
|
|
32
32
|
if (_lodash.default.isUndefined(resValue)) {
|
|
33
33
|
return null;
|
|
@@ -39,4 +39,4 @@ function formatResponseValue(resValue) {
|
|
|
39
39
|
function formatStatus(responseBody) {
|
|
40
40
|
return _lodash.default.isPlainObject(responseBody) ? _lodash.default.omit(responseBody, ['status']) : responseBody;
|
|
41
41
|
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRSZXNwb25zZVZhbHVlIiwicmVzVmFsdWUiLCJfIiwiaXNVbmRlZmluZWQiLCJkdXBsaWNhdGVLZXlzIiwiTUpTT05XUF9FTEVNRU5UX0tFWSIsIlczQ19FTEVNRU5UX0tFWSIsImZvcm1hdFN0YXR1cyIsInJlc3BvbnNlQm9keSIsImlzUGxhaW5PYmplY3QiLCJvbWl0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3Byb3RvY29sL2hlbHBlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7ZHVwbGljYXRlS2V5c30gZnJvbSAnLi4vYmFzZWRyaXZlci9oZWxwZXJzJztcbmltcG9ydCB7TUpTT05XUF9FTEVNRU5UX0tFWSwgVzNDX0VMRU1FTlRfS0VZfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIFByZXByb2Nlc3NlcyB0aGUgcmVzdWx0aW5nIHZhbHVlIGZvciBBUEkgcmVzcG9uc2VzLFxuICogc28gdGhleSBoYXZlIGtleXMgZm9yIGJvdGggVzNDIGFuZCBKU09OV1AgcHJvdG9jb2xzLlxuICogVGhlIGFyZ3VtZW50IHZhbHVlIGlzIE5PVCBtdXRhdGVkXG4gKlxuICogQHBhcmFtIHs/
|
|
42
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRSZXNwb25zZVZhbHVlIiwicmVzVmFsdWUiLCJfIiwiaXNVbmRlZmluZWQiLCJkdXBsaWNhdGVLZXlzIiwiTUpTT05XUF9FTEVNRU5UX0tFWSIsIlczQ19FTEVNRU5UX0tFWSIsImZvcm1hdFN0YXR1cyIsInJlc3BvbnNlQm9keSIsImlzUGxhaW5PYmplY3QiLCJvbWl0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3Byb3RvY29sL2hlbHBlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7ZHVwbGljYXRlS2V5c30gZnJvbSAnLi4vYmFzZWRyaXZlci9oZWxwZXJzJztcbmltcG9ydCB7TUpTT05XUF9FTEVNRU5UX0tFWSwgVzNDX0VMRU1FTlRfS0VZfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIFByZXByb2Nlc3NlcyB0aGUgcmVzdWx0aW5nIHZhbHVlIGZvciBBUEkgcmVzcG9uc2VzLFxuICogc28gdGhleSBoYXZlIGtleXMgZm9yIGJvdGggVzNDIGFuZCBKU09OV1AgcHJvdG9jb2xzLlxuICogVGhlIGFyZ3VtZW50IHZhbHVlIGlzIE5PVCBtdXRhdGVkXG4gKlxuICogQHBhcmFtIHs/T2JqZWN0fSByZXNWYWx1ZSBUaGUgYWN0dWFsIHJlc3BvbnNlIHZhbHVlXG4gKiBAcmV0dXJucyB7P09iamVjdH0gRWl0aGVyIG1vZGlmaWVkIHZhbHVlIG9yIHRoZSBzYW1lIG9uZSBpZlxuICogbm90aGluZyBoYXMgYmVlbiBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBmb3JtYXRSZXNwb25zZVZhbHVlKHJlc1ZhbHVlKSB7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHJlc1ZhbHVlKSkge1xuICAgIC8vIGNvbnZlcnQgdW5kZWZpbmVkIHRvIG51bGxcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBJZiB0aGUgTUpTT05XUCBlbGVtZW50IGtleSBmb3JtYXQgKEVMRU1FTlQpIHdhcyBwcm92aWRlZCwgYWRkIGEgZHVwbGljYXRlIGtleSAoZWxlbWVudC02MDY2LTExZTQtYTUyZS00ZjczNTQ2NmNlY2YpXG4gIC8vIElmIHRoZSBXM0MgZWxlbWVudCBrZXkgZm9ybWF0IChlbGVtZW50LTYwNjYtMTFlNC1hNTJlLTRmNzM1NDY2Y2VjZikgd2FzIHByb3ZpZGVkLCBhZGQgYSBkdXBsaWNhdGUga2V5IChFTEVNRU5UKVxuICByZXR1cm4gZHVwbGljYXRlS2V5cyhyZXNWYWx1ZSwgTUpTT05XUF9FTEVNRU5UX0tFWSwgVzNDX0VMRU1FTlRfS0VZKTtcbn1cblxuLyoqXG4gKiBQcm9wZXJseSBmb3JtYXRzIHRoZSBzdGF0dXMgZm9yIEFQSSByZXNwb25zZXMsXG4gKiBzbyB0aGV5IGFyZSBjb3JyZWN0IGZvciB0aGUgVzNDIHByb3RvY29sLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSByZXNwb25zZUJvZHlcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBmaXhlZCByZXNwb25zZSBib2R5XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFN0YXR1cyhyZXNwb25zZUJvZHkpIHtcbiAgcmV0dXJuIF8uaXNQbGFpbk9iamVjdChyZXNwb25zZUJvZHkpID8gXy5vbWl0KHJlc3BvbnNlQm9keSwgWydzdGF0dXMnXSkgOiByZXNwb25zZUJvZHk7XG59XG5cbmV4cG9ydCB7TUpTT05XUF9FTEVNRU5UX0tFWSwgVzNDX0VMRU1FTlRfS0VZLCBmb3JtYXRSZXNwb25zZVZhbHVlLCBmb3JtYXRTdGF0dXN9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFXQSxTQUFTQSxtQkFBVCxDQUE2QkMsUUFBN0IsRUFBdUM7RUFDckMsSUFBSUMsZUFBQSxDQUFFQyxXQUFGLENBQWNGLFFBQWQsQ0FBSixFQUE2QjtJQUUzQixPQUFPLElBQVA7RUFDRDs7RUFHRCxPQUFPLElBQUFHLHNCQUFBLEVBQWNILFFBQWQsRUFBd0JJLDhCQUF4QixFQUE2Q0MsMEJBQTdDLENBQVA7QUFDRDs7QUFTRCxTQUFTQyxZQUFULENBQXNCQyxZQUF0QixFQUFvQztFQUNsQyxPQUFPTixlQUFBLENBQUVPLGFBQUYsQ0FBZ0JELFlBQWhCLElBQWdDTixlQUFBLENBQUVRLElBQUYsQ0FBT0YsWUFBUCxFQUFxQixDQUFDLFFBQUQsQ0FBckIsQ0FBaEMsR0FBbUVBLFlBQTFFO0FBQ0QifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","names":["formatResponseValue","resValue","_","isUndefined","duplicateKeys","MJSONWP_ELEMENT_KEY","W3C_ELEMENT_KEY","formatStatus","responseBody","isPlainObject","omit"],"sources":["../../../lib/protocol/helpers.js"],"sourcesContent":["import _ from 'lodash';\nimport {duplicateKeys} from '../basedriver/helpers';\nimport {MJSONWP_ELEMENT_KEY, W3C_ELEMENT_KEY} from '../constants';\n\n/**\n * Preprocesses the resulting value for API responses,\n * so they have keys for both W3C and JSONWP protocols.\n * The argument value is NOT mutated\n *\n * @param {?Object} resValue The actual response value\n * @returns {?Object} Either modified value or the same one if\n * nothing has been modified\n */\nfunction formatResponseValue(resValue) {\n if (_.isUndefined(resValue)) {\n // convert undefined to null\n return null;\n }\n // If the MJSONWP element key format (ELEMENT) was provided, add a duplicate key (element-6066-11e4-a52e-4f735466cecf)\n // If the W3C element key format (element-6066-11e4-a52e-4f735466cecf) was provided, add a duplicate key (ELEMENT)\n return duplicateKeys(resValue, MJSONWP_ELEMENT_KEY, W3C_ELEMENT_KEY);\n}\n\n/**\n * Properly formats the status for API responses,\n * so they are correct for the W3C protocol.\n *\n * @param {Object} responseBody\n * @returns {Object} The fixed response body\n */\nfunction formatStatus(responseBody) {\n return _.isPlainObject(responseBody) ? _.omit(responseBody, ['status']) : responseBody;\n}\n\nexport {MJSONWP_ELEMENT_KEY, W3C_ELEMENT_KEY, formatResponseValue, formatStatus};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;AAWA,SAASA,mBAAT,CAA6BC,QAA7B,EAAuC;EACrC,IAAIC,eAAA,CAAEC,WAAF,CAAcF,QAAd,CAAJ,EAA6B;IAE3B,OAAO,IAAP;EACD;;EAGD,OAAO,IAAAG,sBAAA,EAAcH,QAAd,EAAwBI,8BAAxB,EAA6CC,0BAA7C,CAAP;AACD;;AASD,SAASC,YAAT,CAAsBC,YAAtB,EAAoC;EAClC,OAAON,eAAA,CAAEO,aAAF,CAAgBD,YAAhB,IAAgCN,eAAA,CAAEQ,IAAF,CAAOF,YAAP,EAAqB,CAAC,QAAD,CAArB,CAAhC,GAAmEA,YAA1E;AACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../lib/protocol/index.js"],"sourcesContent":["import {\n isSessionCommand,\n routeConfiguringFunction,\n determineProtocol,\n CREATE_SESSION_COMMAND,\n DELETE_SESSION_COMMAND,\n GET_STATUS_COMMAND,\n makeArgs,\n checkParams,\n} from './protocol';\nimport {NO_SESSION_ID_COMMANDS, ALL_COMMANDS, METHOD_MAP, routeToCommandName} from './routes';\nimport {errors, isErrorType, errorFromMJSONWPStatusCode, errorFromW3CJsonCode} from './errors';\n\nexport {\n routeConfiguringFunction,\n errors,\n isErrorType,\n makeArgs,\n checkParams,\n errorFromMJSONWPStatusCode,\n errorFromW3CJsonCode,\n ALL_COMMANDS,\n METHOD_MAP,\n routeToCommandName,\n NO_SESSION_ID_COMMANDS,\n isSessionCommand,\n determineProtocol,\n CREATE_SESSION_COMMAND,\n DELETE_SESSION_COMMAND,\n GET_STATUS_COMMAND,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAUA;;AACA"}
|