Files
e-tib.com/.next/dev/server/vendor-chunks/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1.js
Marc Mintel d14122005d Initial commit: E-TIB production hardening & E2E foundation
Former-commit-id: ef04fca3d76375630c05aac117bf586953f3b657
2026-04-28 19:11:38 +02:00

135 lines
249 KiB
JavaScript

"use strict";
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
exports.id = "vendor-chunks/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1";
exports.ids = ["vendor-chunks/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1"];
exports.modules = {
/***/ "(rsc)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/index.js":
/*!**************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/index.js ***!
\**************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.MongodbCommandType = exports.MongoDBInstrumentation = void 0;\nvar instrumentation_1 = __webpack_require__(/*! ./instrumentation */ \"(rsc)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/instrumentation.js\");\nObject.defineProperty(exports, \"MongoDBInstrumentation\", ({ enumerable: true, get: function () { return instrumentation_1.MongoDBInstrumentation; } }));\nvar types_1 = __webpack_require__(/*! ./types */ \"(rsc)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/types.js\");\nObject.defineProperty(exports, \"MongodbCommandType\", ({ enumerable: true, get: function () { return types_1.MongodbCommandType; } }));\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvZGJAMC42Ny4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMS9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELDBCQUEwQixHQUFHLDhCQUE4QjtBQUMzRCx3QkFBd0IsbUJBQU8sQ0FBQyw2TUFBbUI7QUFDbkQsMERBQXlELEVBQUUscUNBQXFDLG9EQUFvRCxFQUFDO0FBQ3JKLGNBQWMsbUJBQU8sQ0FBQyx5TEFBUztBQUMvQixzREFBcUQsRUFBRSxxQ0FBcUMsc0NBQXNDLEVBQUM7QUFDbkkiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvZGJAMC42Ny4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMS9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTW9uZ29kYkNvbW1hbmRUeXBlID0gZXhwb3J0cy5Nb25nb0RCSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xudmFyIGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIi4vaW5zdHJ1bWVudGF0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTW9uZ29EQkluc3RydW1lbnRhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5zdHJ1bWVudGF0aW9uXzEuTW9uZ29EQkluc3RydW1lbnRhdGlvbjsgfSB9KTtcbnZhciB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNb25nb2RiQ29tbWFuZFR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzEuTW9uZ29kYkNvbW1hbmRUeXBlOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/index.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/instrumentation.js":
/*!************************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/instrumentation.js ***!
\************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval(";globalThis[\"_sentryRewritesTunnelPath\"] = undefined;globalThis[\"SENTRY_RELEASE\"] = undefined;globalThis[\"_sentryBasePath\"] = undefined;globalThis[\"_sentryNextJsVersion\"] = \"16.1.6\";globalThis[\"_sentryRewriteFramesDistDir\"] = \".next\";globalThis[\"_sentryVercelCronsConfig\"] = undefined;\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.MongoDBInstrumentation = void 0;\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst api_1 = __webpack_require__(/*! @opentelemetry/api */ \"(rsc)/./node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/index.js\");\nconst instrumentation_1 = __webpack_require__(/*! @opentelemetry/instrumentation */ \"(rsc)/./node_modules/.pnpm/@opentelemetry+instrumentation@0.214.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation/build/esm/index.js\");\nconst semantic_conventions_1 = __webpack_require__(/*! @opentelemetry/semantic-conventions */ \"(rsc)/./node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/build/esm/index.js\");\nconst semconv_1 = __webpack_require__(/*! ./semconv */ \"(rsc)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/semconv.js\");\nconst internal_types_1 = __webpack_require__(/*! ./internal-types */ \"(rsc)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/internal-types.js\");\n/** @knipignore */\nconst version_1 = __webpack_require__(/*! ./version */ \"(rsc)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/version.js\");\nconst DEFAULT_CONFIG = {\n requireParentSpan: true,\n};\n/** mongodb instrumentation plugin for OpenTelemetry */\nclass MongoDBInstrumentation extends instrumentation_1.InstrumentationBase {\n _netSemconvStability;\n _dbSemconvStability;\n constructor(config = {}) {\n super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, { ...DEFAULT_CONFIG, ...config });\n this._setSemconvStabilityFromEnv();\n }\n // Used for testing.\n _setSemconvStabilityFromEnv() {\n this._netSemconvStability = (0, instrumentation_1.semconvStabilityFromStr)('http', process.env.OTEL_SEMCONV_STABILITY_OPT_IN);\n this._dbSemconvStability = (0, instrumentation_1.semconvStabilityFromStr)('database', process.env.OTEL_SEMCONV_STABILITY_OPT_IN);\n }\n setConfig(config = {}) {\n super.setConfig({ ...DEFAULT_CONFIG, ...config });\n }\n _updateMetricInstruments() {\n this._connectionsUsage = this.meter.createUpDownCounter(semconv_1.METRIC_DB_CLIENT_CONNECTIONS_USAGE, {\n description: 'The number of connections that are currently in state described by the state attribute.',\n unit: '{connection}',\n });\n }\n /**\n * Convenience function for updating the `db.client.connections.usage` metric.\n * The name \"count\" comes from the eventual replacement for this metric per\n * https://opentelemetry.io/docs/specs/semconv/non-normative/db-migration/#database-client-connection-count\n */\n _connCountAdd(n, poolName, state) {\n this._connectionsUsage?.add(n, { 'pool.name': poolName, state });\n }\n init() {\n const { v3PatchConnection: v3PatchConnection, v3UnpatchConnection: v3UnpatchConnection, } = this._getV3ConnectionPatches();\n const { v4PatchConnect, v4UnpatchConnect } = this._getV4ConnectPatches();\n const { v4PatchConnectionCallback, v4PatchConnectionPromise, v4UnpatchConnection, } = this._getV4ConnectionPatches();\n const { v4PatchConnectionPool, v4UnpatchConnectionPool } = this._getV4ConnectionPoolPatches();\n const { v4PatchSessions, v4UnpatchSessions } = this._getV4SessionsPatches();\n return [\n new instrumentation_1.InstrumentationNodeModuleDefinition('mongodb', ['>=3.3.0 <4'], undefined, undefined, [\n new instrumentation_1.InstrumentationNodeModuleFile('mongodb/lib/core/wireprotocol/index.js', ['>=3.3.0 <4'], v3PatchConnection, v3UnpatchConnection),\n ]),\n new instrumentation_1.InstrumentationNodeModuleDefinition('mongodb', ['>=4.0.0 <8'], undefined, undefined, [\n new instrumentation_1.InstrumentationNodeModuleFile('mongodb/lib/cmap/connection.js', ['>=4.0.0 <6.4'], v4PatchConnectionCallback, v4UnpatchConnection),\n new instrumentation_1.InstrumentationNodeModuleFile('mongodb/lib/cmap/connection.js', ['>=6.4.0 <8'], v4PatchConnectionPromise, v4UnpatchConnection),\n new instrumentation_1.InstrumentationNodeModuleFile('mongodb/lib/cmap/connection_pool.js', ['>=4.0.0 <6.4'], v4PatchConnectionPool, v4UnpatchConnectionPool),\n new instrumentation_1.InstrumentationNodeModuleFile('mongodb/lib/cmap/connect.js', ['>=4.0.0 <8'], v4PatchConnect, v4UnpatchConnect),\n new instrumentation_1.InstrumentationNodeModuleFile('mongodb/lib/sessions.js', ['>=4.0.0 <8'], v4PatchSessions, v4UnpatchSessions),\n ]),\n ];\n }\n _getV3ConnectionPatches() {\n return {\n v3PatchConnection: (moduleExports) => {\n // patch insert operation\n if ((0, instrumentation_1.isWrapped)(moduleExports.insert)) {\n this._unwrap(moduleExports, 'insert');\n }\n this._wrap(moduleExports, 'insert', this._getV3PatchOperation('insert'));\n // patch remove operation\n if ((0, instrumentation_1.isWrapped)(moduleExports.remove)) {\n this._unwrap(moduleExports, 'remove');\n }\n this._wrap(moduleExports, 'remove', this._getV3PatchOperation('remove'));\n // patch update operation\n if ((0, instrumentation_1.isWrapped)(moduleExports.update)) {\n this._unwrap(moduleExports, 'update');\n }\n this._wrap(moduleExports, 'update', this._getV3PatchOperation('update'));\n // patch other command\n if ((0, instrumentation_1.isWrapped)(moduleExports.command)) {\n this._unwrap(moduleExports, 'command');\n }\n this._wrap(moduleExports, 'command', this._getV3PatchCommand());\n // patch query\n if ((0, instrumentation_1.isWrapped)(moduleExports.query)) {\n this._unwrap(moduleExports, 'query');\n }\n this._wrap(moduleExports, 'query', this._getV3PatchFind());\n // patch get more operation on cursor\n if ((0, instrumentation_1.isWrapped)(moduleExports.getMore)) {\n this._unwrap(moduleExports, 'getMore');\n }\n this._wrap(moduleExports, 'getMore', this._getV3PatchCursor());\n return moduleExports;\n },\n v3UnpatchConnection: (moduleExports) => {\n if (moduleExports === undefined)\n return;\n this._unwrap(moduleExports, 'insert');\n this._unwrap(moduleExports, 'remove');\n this._unwrap(moduleExports, 'update');\n this._unwrap(moduleExports, 'command');\n this._unwrap(moduleExports, 'query');\n this._unwrap(moduleExports, 'getMore');\n },\n };\n }\n _getV4SessionsPatches() {\n return {\n v4PatchSessions: (moduleExports) => {\n if ((0, instrumentation_1.isWrapped)(moduleExports.acquire)) {\n this._unwrap(moduleExports, 'acquire');\n }\n this._wrap(moduleExports.ServerSessionPool.prototype, 'acquire', this._getV4AcquireCommand());\n if ((0, instrumentation_1.isWrapped)(moduleExports.release)) {\n this._unwrap(moduleExports, 'release');\n }\n this._wrap(moduleExports.ServerSessionPool.prototype, 'release', this._getV4ReleaseCommand());\n return moduleExports;\n },\n v4UnpatchSessions: (moduleExports) => {\n if (moduleExports === undefined)\n return;\n if ((0, instrumentation_1.isWrapped)(moduleExports.acquire)) {\n this._unwrap(moduleExports, 'acquire');\n }\n if ((0, instrumentation_1.isWrapped)(moduleExports.release)) {\n this._unwrap(moduleExports, 'release');\n }\n },\n };\n }\n _getV4AcquireCommand() {\n const instrumentation = this;\n return (original) => {\n return function patchAcquire() {\n const nSessionsBeforeAcquire = this.sessions.length;\n const session = original.call(this);\n const nSessionsAfterAcquire = this.sessions.length;\n if (nSessionsBeforeAcquire === nSessionsAfterAcquire) {\n //no session in the pool. a new session was created and used\n instrumentation._connCountAdd(1, instrumentation._poolName, 'used');\n }\n else if (nSessionsBeforeAcquire - 1 === nSessionsAfterAcquire) {\n //a session was already in the pool. remove it from the pool and use it.\n instrumentation._connCountAdd(-1, instrumentation._poolName, 'idle');\n instrumentation._connCountAdd(1, instrumentation._poolName, 'used');\n }\n return session;\n };\n };\n }\n _getV4ReleaseCommand() {\n const instrumentation = this;\n return (original) => {\n return function patchRelease(session) {\n const cmdPromise = original.call(this, session);\n instrumentation._connCountAdd(-1, instrumentation._poolName, 'used');\n instrumentation._connCountAdd(1, instrumentation._poolName, 'idle');\n return cmdPromise;\n };\n };\n }\n _getV4ConnectionPoolPatches() {\n return {\n v4PatchConnectionPool: (moduleExports) => {\n const poolPrototype = moduleExports.ConnectionPool.prototype;\n if ((0, instrumentation_1.isWrapped)(poolPrototype.checkOut)) {\n this._unwrap(poolPrototype, 'checkOut');\n }\n this._wrap(poolPrototype, 'checkOut', this._getV4ConnectionPoolCheckOut());\n return moduleExports;\n },\n v4UnpatchConnectionPool: (moduleExports) => {\n if (moduleExports === undefined)\n return;\n this._unwrap(moduleExports.ConnectionPool.prototype, 'checkOut');\n },\n };\n }\n _getV4ConnectPatches() {\n return {\n v4PatchConnect: (moduleExports) => {\n if ((0, instrumentation_1.isWrapped)(moduleExports.connect)) {\n this._unwrap(moduleExports, 'connect');\n }\n this._wrap(moduleExports, 'connect', this._getV4ConnectCommand());\n return moduleExports;\n },\n v4UnpatchConnect: (moduleExports) => {\n if (moduleExports === undefined)\n return;\n this._unwrap(moduleExports, 'connect');\n },\n };\n }\n // This patch will become unnecessary once\n // https://jira.mongodb.org/browse/NODE-5639 is done.\n _getV4ConnectionPoolCheckOut() {\n return (original) => {\n return function patchedCheckout(callback) {\n const patchedCallback = api_1.context.bind(api_1.context.active(), callback);\n return original.call(this, patchedCallback);\n };\n };\n }\n _getV4ConnectCommand() {\n const instrumentation = this;\n return (original) => {\n return function patchedConnect(options, callback) {\n // from v6.4 `connect` method only accepts an options param and returns a promise\n // with the connection\n if (original.length === 1) {\n const result = original.call(this, options);\n if (result && typeof result.then === 'function') {\n result.then(() => instrumentation.setPoolName(options), \n // this handler is set to pass the lint rules\n () => undefined);\n }\n return result;\n }\n // Earlier versions expects a callback param and return void\n const patchedCallback = function (err, conn) {\n if (err || !conn) {\n callback(err, conn);\n return;\n }\n instrumentation.setPoolName(options);\n callback(err, conn);\n };\n return original.call(this, options, patchedCallback);\n };\n };\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _getV4ConnectionPatches() {\n return {\n v4PatchConnectionCallback: (moduleExports) => {\n // patch insert operation\n if ((0, instrumentation_1.isWrapped)(moduleExports.Connection.prototype.command)) {\n this._unwrap(moduleExports.Connection.prototype, 'command');\n }\n this._wrap(moduleExports.Connection.prototype, 'command', this._getV4PatchCommandCallback());\n return moduleExports;\n },\n v4PatchConnectionPromise: (moduleExports) => {\n // patch insert operation\n if ((0, instrumentation_1.isWrapped)(moduleExports.Connection.prototype.command)) {\n this._unwrap(moduleExports.Connection.prototype, 'command');\n }\n this._wrap(moduleExports.Connection.prototype, 'command', this._getV4PatchCommandPromise());\n return moduleExports;\n },\n v4UnpatchConnection: (moduleExports) => {\n if (moduleExports === undefined)\n return;\n this._unwrap(moduleExports.Connection.prototype, 'command');\n },\n };\n }\n /** Creates spans for common operations */\n _getV3PatchOperation(operationName) {\n const instrumentation = this;\n return (original) => {\n return function patchedServerCommand(server, ns, ops, options, callback) {\n const currentSpan = api_1.trace.getSpan(api_1.context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n const resultHandler = typeof options === 'function' ? options : callback;\n if (skipInstrumentation ||\n typeof resultHandler !== 'function' ||\n typeof ops !== 'object') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, ops, options);\n }\n else {\n return original.call(this, server, ns, ops, options, callback);\n }\n }\n const attributes = instrumentation._getV3SpanAttributes(ns, server, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ops[0], operationName);\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n const span = instrumentation.tracer.startSpan(spanName, {\n kind: api_1.SpanKind.CLIENT,\n attributes,\n });\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, ops, patchedCallback);\n }\n else {\n return original.call(this, server, ns, ops, options, patchedCallback);\n }\n };\n };\n }\n /** Creates spans for command operation */\n _getV3PatchCommand() {\n const instrumentation = this;\n return (original) => {\n return function patchedServerCommand(server, ns, cmd, options, callback) {\n const currentSpan = api_1.trace.getSpan(api_1.context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n const resultHandler = typeof options === 'function' ? options : callback;\n if (skipInstrumentation ||\n typeof resultHandler !== 'function' ||\n typeof cmd !== 'object') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, options);\n }\n else {\n return original.call(this, server, ns, cmd, options, callback);\n }\n }\n const commandType = MongoDBInstrumentation._getCommandType(cmd);\n const operationName = commandType === internal_types_1.MongodbCommandType.UNKNOWN ? undefined : commandType;\n const attributes = instrumentation._getV3SpanAttributes(ns, server, cmd, operationName);\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n const span = instrumentation.tracer.startSpan(spanName, {\n kind: api_1.SpanKind.CLIENT,\n attributes,\n });\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, patchedCallback);\n }\n else {\n return original.call(this, server, ns, cmd, options, patchedCallback);\n }\n };\n };\n }\n /** Creates spans for command operation */\n _getV4PatchCommandCallback() {\n const instrumentation = this;\n return (original) => {\n return function patchedV4ServerCommand(ns, cmd, options, callback) {\n const currentSpan = api_1.trace.getSpan(api_1.context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n const resultHandler = callback;\n const commandType = Object.keys(cmd)[0];\n if (typeof cmd !== 'object' || cmd.ismaster || cmd.hello) {\n return original.call(this, ns, cmd, options, callback);\n }\n let span = undefined;\n if (!skipInstrumentation) {\n const attributes = instrumentation._getV4SpanAttributes(this, ns, cmd, commandType);\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n span = instrumentation.tracer.startSpan(spanName, {\n kind: api_1.SpanKind.CLIENT,\n attributes,\n });\n }\n const patchedCallback = instrumentation._patchEnd(span, resultHandler, this.id, commandType);\n return original.call(this, ns, cmd, options, patchedCallback);\n };\n };\n }\n _getV4PatchCommandPromise() {\n const instrumentation = this;\n return (original) => {\n return function patchedV4ServerCommand(...args) {\n const [ns, cmd] = args;\n const currentSpan = api_1.trace.getSpan(api_1.context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n const commandType = Object.keys(cmd)[0];\n const resultHandler = () => undefined;\n if (typeof cmd !== 'object' || cmd.ismaster || cmd.hello) {\n return original.apply(this, args);\n }\n let span = undefined;\n if (!skipInstrumentation) {\n const attributes = instrumentation._getV4SpanAttributes(this, ns, cmd, commandType);\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n span = instrumentation.tracer.startSpan(spanName, {\n kind: api_1.SpanKind.CLIENT,\n attributes,\n });\n }\n const patchedCallback = instrumentation._patchEnd(span, resultHandler, this.id, commandType);\n const result = original.apply(this, args);\n result.then((res) => patchedCallback(null, res), (err) => patchedCallback(err));\n return result;\n };\n };\n }\n /** Creates spans for find operation */\n _getV3PatchFind() {\n const instrumentation = this;\n return (original) => {\n return function patchedServerCommand(server, ns, cmd, cursorState, options, callback) {\n const currentSpan = api_1.trace.getSpan(api_1.context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n const resultHandler = typeof options === 'function' ? options : callback;\n if (skipInstrumentation ||\n typeof resultHandler !== 'function' ||\n typeof cmd !== 'object') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, cursorState, options);\n }\n else {\n return original.call(this, server, ns, cmd, cursorState, options, callback);\n }\n }\n const attributes = instrumentation._getV3SpanAttributes(ns, server, cmd, 'find');\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n const span = instrumentation.tracer.startSpan(spanName, {\n kind: api_1.SpanKind.CLIENT,\n attributes,\n });\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, cursorState, patchedCallback);\n }\n else {\n return original.call(this, server, ns, cmd, cursorState, options, patchedCallback);\n }\n };\n };\n }\n /** Creates spans for find operation */\n _getV3PatchCursor() {\n const instrumentation = this;\n return (original) => {\n return function patchedServerCommand(server, ns, cursorState, batchSize, options, callback) {\n const currentSpan = api_1.trace.getSpan(api_1.context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n const resultHandler = typeof options === 'function' ? options : callback;\n if (skipInstrumentation || typeof resultHandler !== 'function') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cursorState, batchSize, options);\n }\n else {\n return original.call(this, server, ns, cursorState, batchSize, options, callback);\n }\n }\n const attributes = instrumentation._getV3SpanAttributes(ns, server, cursorState.cmd, 'getMore');\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n const span = instrumentation.tracer.startSpan(spanName, {\n kind: api_1.SpanKind.CLIENT,\n attributes,\n });\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cursorState, batchSize, patchedCallback);\n }\n else {\n return original.call(this, server, ns, cursorState, batchSize, options, patchedCallback);\n }\n };\n };\n }\n /**\n * Get the mongodb command type from the object.\n * @param command Internal mongodb command object\n */\n static _getCommandType(command) {\n if (command.createIndexes !== undefined) {\n return internal_types_1.MongodbCommandType.CREATE_INDEXES;\n }\n else if (command.findandmodify !== undefined) {\n return internal_types_1.MongodbCommandType.FIND_AND_MODIFY;\n }\n else if (command.ismaster !== undefined) {\n return internal_types_1.MongodbCommandType.IS_MASTER;\n }\n else if (command.count !== undefined) {\n return internal_types_1.MongodbCommandType.COUNT;\n }\n else if (command.aggregate !== undefined) {\n return internal_types_1.MongodbCommandType.AGGREGATE;\n }\n else {\n return internal_types_1.MongodbCommandType.UNKNOWN;\n }\n }\n /**\n * Determine a span's attributes by fetching related metadata from the context\n * @param connectionCtx mongodb internal connection context\n * @param ns mongodb namespace\n * @param command mongodb internal representation of a command\n */\n _getV4SpanAttributes(connectionCtx, ns, command, operation) {\n let host, port;\n if (connectionCtx) {\n const hostParts = typeof connectionCtx.address === 'string'\n ? connectionCtx.address.split(':')\n : '';\n if (hostParts.length === 2) {\n host = hostParts[0];\n port = hostParts[1];\n }\n }\n // capture parameters within the query as well if enhancedDatabaseReporting is enabled.\n let commandObj;\n if (command?.documents && command.documents[0]) {\n commandObj = command.documents[0];\n }\n else if (command?.cursors) {\n commandObj = command.cursors;\n }\n else {\n commandObj = command;\n }\n return this._getSpanAttributes(ns.db, ns.collection, host, port, commandObj, operation);\n }\n /**\n * Determine a span's attributes by fetching related metadata from the context\n * @param ns mongodb namespace\n * @param topology mongodb internal representation of the network topology\n * @param command mongodb internal representation of a command\n */\n _getV3SpanAttributes(ns, topology, command, operation) {\n // Extract host/port info.\n let host;\n let port;\n if (topology && topology.s) {\n host = topology.s.options?.host ?? topology.s.host;\n port = (topology.s.options?.port ?? topology.s.port)?.toString();\n if (host == null || port == null) {\n const address = topology.description?.address;\n if (address) {\n const addressSegments = address.split(':');\n host = addressSegments[0];\n port = addressSegments[1];\n }\n }\n }\n // The namespace is a combination of the database name and the name of the\n // collection or index, like so: [database-name].[collection-or-index-name].\n // It could be a string or an instance of MongoDBNamespace, as such we\n // always coerce to a string to extract db and collection.\n const [dbName, dbCollection] = ns.toString().split('.');\n // capture parameters within the query as well if enhancedDatabaseReporting is enabled.\n const commandObj = command?.query ?? command?.q ?? command;\n return this._getSpanAttributes(dbName, dbCollection, host, port, commandObj, operation);\n }\n _getSpanAttributes(dbName, dbCollection, host, port, commandObj, operation) {\n const attributes = {};\n if (this._dbSemconvStability & instrumentation_1.SemconvStability.OLD) {\n attributes[semconv_1.ATTR_DB_SYSTEM] = semconv_1.DB_SYSTEM_VALUE_MONGODB;\n attributes[semconv_1.ATTR_DB_NAME] = dbName;\n attributes[semconv_1.ATTR_DB_MONGODB_COLLECTION] = dbCollection;\n attributes[semconv_1.ATTR_DB_OPERATION] = operation;\n attributes[semconv_1.ATTR_DB_CONNECTION_STRING] =\n `mongodb://${host}:${port}/${dbName}`;\n }\n if (this._dbSemconvStability & instrumentation_1.SemconvStability.STABLE) {\n attributes[semantic_conventions_1.ATTR_DB_SYSTEM_NAME] = semconv_1.DB_SYSTEM_NAME_VALUE_MONGODB;\n attributes[semantic_conventions_1.ATTR_DB_NAMESPACE] = dbName;\n attributes[semantic_conventions_1.ATTR_DB_OPERATION_NAME] = operation;\n attributes[semantic_conventions_1.ATTR_DB_COLLECTION_NAME] = dbCollection;\n }\n if (host && port) {\n if (this._netSemconvStability & instrumentation_1.SemconvStability.OLD) {\n attributes[semconv_1.ATTR_NET_PEER_NAME] = host;\n }\n if (this._netSemconvStability & instrumentation_1.SemconvStability.STABLE) {\n attributes[semantic_conventions_1.ATTR_SERVER_ADDRESS] = host;\n }\n const portNumber = parseInt(port, 10);\n if (!isNaN(portNumber)) {\n if (this._netSemconvStability & instrumentation_1.SemconvStability.OLD) {\n attributes[semconv_1.ATTR_NET_PEER_PORT] = portNumber;\n }\n if (this._netSemconvStability & instrumentation_1.SemconvStability.STABLE) {\n attributes[semantic_conventions_1.ATTR_SERVER_PORT] = portNumber;\n }\n }\n }\n if (commandObj) {\n const { dbStatementSerializer: configDbStatementSerializer } = this.getConfig();\n const dbStatementSerializer = typeof configDbStatementSerializer === 'function'\n ? configDbStatementSerializer\n : this._defaultDbStatementSerializer.bind(this);\n (0, instrumentation_1.safeExecuteInTheMiddle)(() => {\n const query = dbStatementSerializer(commandObj);\n if (this._dbSemconvStability & instrumentation_1.SemconvStability.OLD) {\n attributes[semconv_1.ATTR_DB_STATEMENT] = query;\n }\n if (this._dbSemconvStability & instrumentation_1.SemconvStability.STABLE) {\n attributes[semantic_conventions_1.ATTR_DB_QUERY_TEXT] = query;\n }\n }, err => {\n if (err) {\n this._diag.error('Error running dbStatementSerializer hook', err);\n }\n }, true);\n }\n return attributes;\n }\n _spanNameFromAttrs(attributes) {\n let spanName;\n if (this._dbSemconvStability & instrumentation_1.SemconvStability.STABLE) {\n // https://opentelemetry.io/docs/specs/semconv/database/database-spans/#name\n spanName =\n [\n attributes[semantic_conventions_1.ATTR_DB_OPERATION_NAME],\n attributes[semantic_conventions_1.ATTR_DB_COLLECTION_NAME],\n ]\n .filter(attr => attr)\n .join(' ') || semconv_1.DB_SYSTEM_NAME_VALUE_MONGODB;\n }\n else {\n spanName = `mongodb.${attributes[semconv_1.ATTR_DB_OPERATION] || 'command'}`;\n }\n return spanName;\n }\n _getDefaultDbStatementReplacer() {\n const seen = new WeakSet();\n return (_key, value) => {\n // undefined, boolean, number, bigint, string, symbol, function || null\n if (typeof value !== 'object' || !value)\n return '?';\n // objects (including arrays)\n if (seen.has(value))\n return '[Circular]';\n seen.add(value);\n return value;\n };\n }\n _defaultDbStatementSerializer(commandObj) {\n const { enhancedDatabaseReporting } = this.getConfig();\n if (enhancedDatabaseReporting) {\n return JSON.stringify(commandObj);\n }\n return JSON.stringify(commandObj, this._getDefaultDbStatementReplacer());\n }\n /**\n * Triggers the response hook in case it is defined.\n * @param span The span to add the results to.\n * @param result The command result\n */\n _handleExecutionResult(span, result) {\n const { responseHook } = this.getConfig();\n if (typeof responseHook === 'function') {\n (0, instrumentation_1.safeExecuteInTheMiddle)(() => {\n responseHook(span, { data: result });\n }, err => {\n if (err) {\n this._diag.error('Error running response hook', err);\n }\n }, true);\n }\n }\n /**\n * Ends a created span.\n * @param span The created span to end.\n * @param resultHandler A callback function.\n * @param connectionId: The connection ID of the Command response.\n */\n _patchEnd(span, resultHandler, connectionId, commandType) {\n // mongodb is using \"tick\" when calling a callback, this way the context\n // in final callback (resultHandler) is lost\n const activeContext = api_1.context.active();\n const instrumentation = this;\n let spanEnded = false;\n return function patchedEnd(...args) {\n if (!spanEnded) {\n spanEnded = true;\n const error = args[0];\n if (span) {\n if (error instanceof Error) {\n span.setStatus({\n code: api_1.SpanStatusCode.ERROR,\n message: error.message,\n });\n }\n else {\n const result = args[1];\n instrumentation._handleExecutionResult(span, result);\n }\n span.end();\n }\n if (commandType === 'endSessions') {\n instrumentation._connCountAdd(-1, instrumentation._poolName, 'idle');\n }\n }\n return api_1.context.with(activeContext, () => {\n return resultHandler.apply(this, args);\n });\n };\n }\n setPoolName(options) {\n const host = options.hostAddress?.host;\n const port = options.hostAddress?.port;\n const database = options.dbName;\n const poolName = `mongodb://${host}:${port}/${database}`;\n this._poolName = poolName;\n }\n _checkSkipInstrumentation(currentSpan) {\n const requireParentSpan = this.getConfig().requireParentSpan;\n const hasNoParentSpan = currentSpan === undefined;\n return requireParentSpan === true && hasNoParentSpan;\n }\n}\nexports.MongoDBInstrumentation = MongoDBInstrumentation;\n//# sourceMappingURL=instrumentation.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvZGJAMC42Ny4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMS9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL2luc3RydW1lbnRhdGlvbi5qcyIsIm1hcHBpbmdzIjoiQUFBYSxDQUFDLG9EQUFvRCx5Q0FBeUMsMENBQTBDLDhDQUE4QyxvREFBb0Q7QUFDdlAsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLG1CQUFPLENBQUMsa0lBQW9CO0FBQzFDLDBCQUEwQixtQkFBTyxDQUFDLGlNQUFnQztBQUNsRSwrQkFBK0IsbUJBQU8sQ0FBQyxzTEFBcUM7QUFDNUUsa0JBQWtCLG1CQUFPLENBQUMsNkxBQVc7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsMk1BQWtCO0FBQ25EO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMsNkxBQVc7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0IsbUVBQW1FLDhCQUE4QjtBQUNqRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QiwwQkFBMEIsOEJBQThCO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFdBQVc7QUFDL0IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLDhCQUE4QjtBQUN2RTtBQUNBO0FBQ0EsZ0JBQWdCLGtGQUFrRjtBQUNsRyxnQkFBZ0IsbUNBQW1DO0FBQ25ELGdCQUFnQiw0RUFBNEU7QUFDNUYsZ0JBQWdCLGlEQUFpRDtBQUNqRSxnQkFBZ0IscUNBQXFDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixLQUFLLEdBQUcsS0FBSyxHQUFHLE9BQU87QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IscURBQXFEO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHFEQUFxRDtBQUN2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGVBQWU7QUFDL0I7QUFDQTtBQUNBLHFDQUFxQyxjQUFjO0FBQ25ELGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsS0FBSyxHQUFHLEtBQUssR0FBRyxTQUFTO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvZGJAMC42Ny4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMS9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL2luc3RydW1lbnRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjs7Z2xvYmFsVGhpc1tcIl9zZW50cnlSZXdyaXRlc1R1bm5lbFBhdGhcIl0gPSB1bmRlZmluZWQ7Z2xvYmFsVGhpc1tcIlNFTlRSWV9SRUxFQVNFXCJdID0gdW5kZWZpbmVkO2dsb2JhbFRoaXNbXCJfc2VudHJ5QmFzZVBhdGhcIl0gPSB1bmRlZmluZWQ7Z2xvYmFsVGhpc1tcIl9zZW50cnlOZXh0SnNWZXJzaW9uXCJdID0gXCIxNi4xLjZcIjtnbG9iYWxUaGlzW1wiX3NlbnRyeVJld3JpdGVGcmFtZXNEaXN0RGlyXCJdID0gXCIubmV4dFwiO2dsb2JhbFRoaXNbXCJfc2VudHJ5VmVyY2VsQ3JvbnNDb25maWdcIl0gPSB1bmRlZmluZWQ7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1vbmdvREJJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuY29uc3Qgc2VtYW50aWNfY29udmVudGlvbnNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc1wiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnZcIik7XG5jb25zdCBpbnRlcm5hbF90eXBlc18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwtdHlwZXNcIik7XG4vKiogQGtuaXBpZ25vcmUgKi9cbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5jb25zdCBERUZBVUxUX0NPTkZJRyA9IHtcbiAgICByZXF1aXJlUGFyZW50U3BhbjogdHJ1ZSxcbn07XG4vKiogbW9uZ29kYiBpbnN0cnVtZW50YXRpb24gcGx1Z2luIGZvciBPcGVuVGVsZW1ldHJ5ICovXG5jbGFzcyBNb25nb0RCSW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgX25ldFNlbWNvbnZTdGFiaWxpdHk7XG4gICAgX2RiU2VtY29udlN0YWJpbGl0eTtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcih2ZXJzaW9uXzEuUEFDS0FHRV9OQU1FLCB2ZXJzaW9uXzEuUEFDS0FHRV9WRVJTSU9OLCB7IC4uLkRFRkFVTFRfQ09ORklHLCAuLi5jb25maWcgfSk7XG4gICAgICAgIHRoaXMuX3NldFNlbWNvbnZTdGFiaWxpdHlGcm9tRW52KCk7XG4gICAgfVxuICAgIC8vIFVzZWQgZm9yIHRlc3RpbmcuXG4gICAgX3NldFNlbWNvbnZTdGFiaWxpdHlGcm9tRW52KCkge1xuICAgICAgICB0aGlzLl9uZXRTZW1jb252U3RhYmlsaXR5ID0gKDAsIGluc3RydW1lbnRhdGlvbl8xLnNlbWNvbnZTdGFiaWxpdHlGcm9tU3RyKSgnaHR0cCcsIHByb2Nlc3MuZW52Lk9URUxfU0VNQ09OVl9TVEFCSUxJVFlfT1BUX0lOKTtcbiAgICAgICAgdGhpcy5fZGJTZW1jb252U3RhYmlsaXR5ID0gKDAsIGluc3RydW1lbnRhdGlvbl8xLnNlbWNvbnZTdGFiaWxpdHlGcm9tU3RyKSgnZGF0YWJhc2UnLCBwcm9jZXNzLmVudi5PVEVMX1NFTUNPTlZfU1RBQklMSVRZX09QVF9JTik7XG4gICAgfVxuICAgIHNldENvbmZpZyhjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlci5zZXRDb25maWcoeyAuLi5ERUZBVUxUX0NPTkZJRywgLi4uY29uZmlnIH0pO1xuICAgIH1cbiAgICBfdXBkYXRlTWV0cmljSW5zdHJ1bWVudHMoKSB7XG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rpb25zVXNhZ2UgPSB0aGlzLm1ldGVyLmNyZWF0ZVVwRG93bkNvdW50ZXIoc2VtY29udl8xLk1FVFJJQ19EQl9DTElFTlRfQ09OTkVDVElPTlNfVVNBR0UsIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIG51bWJlciBvZiBjb25uZWN0aW9ucyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gc3RhdGUgZGVzY3JpYmVkIGJ5IHRoZSBzdGF0ZSBhdHRyaWJ1dGUuJyxcbiAgICAgICAgICAgIHVuaXQ6ICd7Y29ubmVjdGlvbn0nLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHVwZGF0aW5nIHRoZSBgZGIuY2xpZW50LmNvbm5lY3Rpb25zLnVzYWdlYCBtZXRyaWMuXG4gICAgICogVGhlIG5hbWUgXCJjb3VudFwiIGNvbWVzIGZyb20gdGhlIGV2ZW50dWFsIHJlcGxhY2VtZW50IGZvciB0aGlzIG1ldHJpYyBwZXJcbiAgICAgKiBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L25vbi1ub3JtYXRpdmUvZGItbWlncmF0aW9uLyNkYXRhYmFzZS1jbGllbnQtY29ubmVjdGlvbi1jb3VudFxuICAgICAqL1xuICAgIF9jb25uQ291bnRBZGQobiwgcG9vbE5hbWUsIHN0YXRlKSB7XG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rpb25zVXNhZ2U/LmFkZChuLCB7ICdwb29sLm5hbWUnOiBwb29sTmFtZSwgc3RhdGUgfSk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIGNvbnN0IHsgdjNQYXRjaENvbm5lY3Rpb246IHYzUGF0Y2hDb25uZWN0aW9uLCB2M1VucGF0Y2hDb25uZWN0aW9uOiB2M1VucGF0Y2hDb25uZWN0aW9uLCB9ID0gdGhpcy5fZ2V0VjNDb25uZWN0aW9uUGF0Y2hlcygpO1xuICAgICAgICBjb25zdCB7IHY0UGF0Y2hDb25uZWN0LCB2NFVucGF0Y2hDb25uZWN0IH0gPSB0aGlzLl9nZXRWNENvbm5lY3RQYXRjaGVzKCk7XG4gICAgICAgIGNvbnN0IHsgdjRQYXRjaENvbm5lY3Rpb25DYWxsYmFjaywgdjRQYXRjaENvbm5lY3Rpb25Qcm9taXNlLCB2NFVucGF0Y2hDb25uZWN0aW9uLCB9ID0gdGhpcy5fZ2V0VjRDb25uZWN0aW9uUGF0Y2hlcygpO1xuICAgICAgICBjb25zdCB7IHY0UGF0Y2hDb25uZWN0aW9uUG9vbCwgdjRVbnBhdGNoQ29ubmVjdGlvblBvb2wgfSA9IHRoaXMuX2dldFY0Q29ubmVjdGlvblBvb2xQYXRjaGVzKCk7XG4gICAgICAgIGNvbnN0IHsgdjRQYXRjaFNlc3Npb25zLCB2NFVucGF0Y2hTZXNzaW9ucyB9ID0gdGhpcy5fZ2V0VjRTZXNzaW9uc1BhdGNoZXMoKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbignbW9uZ29kYicsIFsnPj0zLjMuMCA8NCddLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgW1xuICAgICAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRmlsZSgnbW9uZ29kYi9saWIvY29yZS93aXJlcHJvdG9jb2wvaW5kZXguanMnLCBbJz49My4zLjAgPDQnXSwgdjNQYXRjaENvbm5lY3Rpb24sIHYzVW5wYXRjaENvbm5lY3Rpb24pLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ21vbmdvZGInLCBbJz49NC4wLjAgPDgnXSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFtcbiAgICAgICAgICAgICAgICBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUoJ21vbmdvZGIvbGliL2NtYXAvY29ubmVjdGlvbi5qcycsIFsnPj00LjAuMCA8Ni40J10sIHY0UGF0Y2hDb25uZWN0aW9uQ2FsbGJhY2ssIHY0VW5wYXRjaENvbm5lY3Rpb24pLFxuICAgICAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRmlsZSgnbW9uZ29kYi9saWIvY21hcC9jb25uZWN0aW9uLmpzJywgWyc+PTYuNC4wIDw4J10sIHY0UGF0Y2hDb25uZWN0aW9uUHJvbWlzZSwgdjRVbnBhdGNoQ29ubmVjdGlvbiksXG4gICAgICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKCdtb25nb2RiL2xpYi9jbWFwL2Nvbm5lY3Rpb25fcG9vbC5qcycsIFsnPj00LjAuMCA8Ni40J10sIHY0UGF0Y2hDb25uZWN0aW9uUG9vbCwgdjRVbnBhdGNoQ29ubmVjdGlvblBvb2wpLFxuICAgICAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRmlsZSgnbW9uZ29kYi9saWIvY21hcC9jb25uZWN0LmpzJywgWyc+PTQuMC4wIDw4J10sIHY0UGF0Y2hDb25uZWN0LCB2NFVucGF0Y2hDb25uZWN0KSxcbiAgICAgICAgICAgICAgICBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUoJ21vbmdvZGIvbGliL3Nlc3Npb25zLmpzJywgWyc+PTQuMC4wIDw4J10sIHY0UGF0Y2hTZXNzaW9ucywgdjRVbnBhdGNoU2Vzc2lvbnMpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIF9nZXRWM0Nvbm5lY3Rpb25QYXRjaGVzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdjNQYXRjaENvbm5lY3Rpb246IChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggaW5zZXJ0IG9wZXJhdGlvblxuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLmluc2VydCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdpbnNlcnQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLCAnaW5zZXJ0JywgdGhpcy5fZ2V0VjNQYXRjaE9wZXJhdGlvbignaW5zZXJ0JykpO1xuICAgICAgICAgICAgICAgIC8vIHBhdGNoIHJlbW92ZSBvcGVyYXRpb25cbiAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5yZW1vdmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAncmVtb3ZlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cywgJ3JlbW92ZScsIHRoaXMuX2dldFYzUGF0Y2hPcGVyYXRpb24oJ3JlbW92ZScpKTtcbiAgICAgICAgICAgICAgICAvLyBwYXRjaCB1cGRhdGUgb3BlcmF0aW9uXG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMudXBkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ3VwZGF0ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICd1cGRhdGUnLCB0aGlzLl9nZXRWM1BhdGNoT3BlcmF0aW9uKCd1cGRhdGUnKSk7XG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggb3RoZXIgY29tbWFuZFxuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLmNvbW1hbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAnY29tbWFuZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICdjb21tYW5kJywgdGhpcy5fZ2V0VjNQYXRjaENvbW1hbmQoKSk7XG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggcXVlcnlcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5xdWVyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdxdWVyeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICdxdWVyeScsIHRoaXMuX2dldFYzUGF0Y2hGaW5kKCkpO1xuICAgICAgICAgICAgICAgIC8vIHBhdGNoIGdldCBtb3JlIG9wZXJhdGlvbiBvbiBjdXJzb3JcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5nZXRNb3JlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2dldE1vcmUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLCAnZ2V0TW9yZScsIHRoaXMuX2dldFYzUGF0Y2hDdXJzb3IoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdjNVbnBhdGNoQ29ubmVjdGlvbjogKG1vZHVsZUV4cG9ydHMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlRXhwb3J0cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdpbnNlcnQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ3JlbW92ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAndXBkYXRlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdjb21tYW5kJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdxdWVyeScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAnZ2V0TW9yZScpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2dldFY0U2Vzc2lvbnNQYXRjaGVzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdjRQYXRjaFNlc3Npb25zOiAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLmFjcXVpcmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAnYWNxdWlyZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuU2VydmVyU2Vzc2lvblBvb2wucHJvdG90eXBlLCAnYWNxdWlyZScsIHRoaXMuX2dldFY0QWNxdWlyZUNvbW1hbmQoKSk7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMucmVsZWFzZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdyZWxlYXNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5TZXJ2ZXJTZXNzaW9uUG9vbC5wcm90b3R5cGUsICdyZWxlYXNlJywgdGhpcy5fZ2V0VjRSZWxlYXNlQ29tbWFuZCgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2NFVucGF0Y2hTZXNzaW9uczogKG1vZHVsZUV4cG9ydHMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlRXhwb3J0cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMuYWNxdWlyZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdhY3F1aXJlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLnJlbGVhc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAncmVsZWFzZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRWNEFjcXVpcmVDb21tYW5kKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hBY3F1aXJlKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5TZXNzaW9uc0JlZm9yZUFjcXVpcmUgPSB0aGlzLnNlc3Npb25zLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gb3JpZ2luYWwuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuU2Vzc2lvbnNBZnRlckFjcXVpcmUgPSB0aGlzLnNlc3Npb25zLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAoblNlc3Npb25zQmVmb3JlQWNxdWlyZSA9PT0gblNlc3Npb25zQWZ0ZXJBY3F1aXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vbm8gc2Vzc2lvbiBpbiB0aGUgcG9vbC4gYSBuZXcgc2Vzc2lvbiB3YXMgY3JlYXRlZCBhbmQgdXNlZFxuICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX2Nvbm5Db3VudEFkZCgxLCBpbnN0cnVtZW50YXRpb24uX3Bvb2xOYW1lLCAndXNlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuU2Vzc2lvbnNCZWZvcmVBY3F1aXJlIC0gMSA9PT0gblNlc3Npb25zQWZ0ZXJBY3F1aXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vYSBzZXNzaW9uIHdhcyBhbHJlYWR5IGluIHRoZSBwb29sLiByZW1vdmUgaXQgZnJvbSB0aGUgcG9vbCBhbmQgdXNlIGl0LlxuICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX2Nvbm5Db3VudEFkZCgtMSwgaW5zdHJ1bWVudGF0aW9uLl9wb29sTmFtZSwgJ2lkbGUnKTtcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9jb25uQ291bnRBZGQoMSwgaW5zdHJ1bWVudGF0aW9uLl9wb29sTmFtZSwgJ3VzZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlc3Npb247XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfZ2V0VjRSZWxlYXNlQ29tbWFuZCgpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoUmVsZWFzZShzZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY21kUHJvbWlzZSA9IG9yaWdpbmFsLmNhbGwodGhpcywgc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9jb25uQ291bnRBZGQoLTEsIGluc3RydW1lbnRhdGlvbi5fcG9vbE5hbWUsICd1c2VkJyk7XG4gICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9jb25uQ291bnRBZGQoMSwgaW5zdHJ1bWVudGF0aW9uLl9wb29sTmFtZSwgJ2lkbGUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY21kUHJvbWlzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRWNENvbm5lY3Rpb25Qb29sUGF0Y2hlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHY0UGF0Y2hDb25uZWN0aW9uUG9vbDogKG1vZHVsZUV4cG9ydHMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb29sUHJvdG90eXBlID0gbW9kdWxlRXhwb3J0cy5Db25uZWN0aW9uUG9vbC5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKHBvb2xQcm90b3R5cGUuY2hlY2tPdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChwb29sUHJvdG90eXBlLCAnY2hlY2tPdXQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChwb29sUHJvdG90eXBlLCAnY2hlY2tPdXQnLCB0aGlzLl9nZXRWNENvbm5lY3Rpb25Qb29sQ2hlY2tPdXQoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdjRVbnBhdGNoQ29ubmVjdGlvblBvb2w6IChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZUV4cG9ydHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb25Qb29sLnByb3RvdHlwZSwgJ2NoZWNrT3V0Jyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfZ2V0VjRDb25uZWN0UGF0Y2hlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHY0UGF0Y2hDb25uZWN0OiAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLmNvbm5lY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAnY29ubmVjdCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICdjb25uZWN0JywgdGhpcy5fZ2V0VjRDb25uZWN0Q29tbWFuZCgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2NFVucGF0Y2hDb25uZWN0OiAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtb2R1bGVFeHBvcnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2Nvbm5lY3QnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIFRoaXMgcGF0Y2ggd2lsbCBiZWNvbWUgdW5uZWNlc3Nhcnkgb25jZVxuICAgIC8vIGh0dHBzOi8vamlyYS5tb25nb2RiLm9yZy9icm93c2UvTk9ERS01NjM5IGlzIGRvbmUuXG4gICAgX2dldFY0Q29ubmVjdGlvblBvb2xDaGVja091dCgpIHtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRDaGVja291dChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoZWRDYWxsYmFjayA9IGFwaV8xLmNvbnRleHQuYmluZChhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgcGF0Y2hlZENhbGxiYWNrKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRWNENvbm5lY3RDb21tYW5kKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZENvbm5lY3Qob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAvLyBmcm9tIHY2LjQgYGNvbm5lY3RgIG1ldGhvZCBvbmx5IGFjY2VwdHMgYW4gb3B0aW9ucyBwYXJhbSBhbmQgcmV0dXJucyBhIHByb21pc2VcbiAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSBjb25uZWN0aW9uXG4gICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvcmlnaW5hbC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnRoZW4oKCkgPT4gaW5zdHJ1bWVudGF0aW9uLnNldFBvb2xOYW1lKG9wdGlvbnMpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaGFuZGxlciBpcyBzZXQgdG8gcGFzcyB0aGUgbGludCBydWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBFYXJsaWVyIHZlcnNpb25zIGV4cGVjdHMgYSBjYWxsYmFjayBwYXJhbSBhbmQgcmV0dXJuIHZvaWRcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRjaGVkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoZXJyLCBjb25uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgfHwgIWNvbm4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgY29ubik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLnNldFBvb2xOYW1lKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIGNvbm4pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgb3B0aW9ucywgcGF0Y2hlZENhbGxiYWNrKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBfZ2V0VjRDb25uZWN0aW9uUGF0Y2hlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHY0UGF0Y2hDb25uZWN0aW9uQ2FsbGJhY2s6IChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggaW5zZXJ0IG9wZXJhdGlvblxuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb24ucHJvdG90eXBlLmNvbW1hbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb24ucHJvdG90eXBlLCAnY29tbWFuZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuQ29ubmVjdGlvbi5wcm90b3R5cGUsICdjb21tYW5kJywgdGhpcy5fZ2V0VjRQYXRjaENvbW1hbmRDYWxsYmFjaygpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2NFBhdGNoQ29ubmVjdGlvblByb21pc2U6IChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggaW5zZXJ0IG9wZXJhdGlvblxuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb24ucHJvdG90eXBlLmNvbW1hbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb24ucHJvdG90eXBlLCAnY29tbWFuZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuQ29ubmVjdGlvbi5wcm90b3R5cGUsICdjb21tYW5kJywgdGhpcy5fZ2V0VjRQYXRjaENvbW1hbmRQcm9taXNlKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHY0VW5wYXRjaENvbm5lY3Rpb246IChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZUV4cG9ydHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb24ucHJvdG90eXBlLCAnY29tbWFuZCcpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqIENyZWF0ZXMgc3BhbnMgZm9yIGNvbW1vbiBvcGVyYXRpb25zICovXG4gICAgX2dldFYzUGF0Y2hPcGVyYXRpb24ob3BlcmF0aW9uTmFtZSkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZFNlcnZlckNvbW1hbmQoc2VydmVyLCBucywgb3BzLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFuID0gYXBpXzEudHJhY2UuZ2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lwSW5zdHJ1bWVudGF0aW9uID0gaW5zdHJ1bWVudGF0aW9uLl9jaGVja1NraXBJbnN0cnVtZW50YXRpb24oY3VycmVudFNwYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdEhhbmRsZXIgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMgOiBjYWxsYmFjaztcbiAgICAgICAgICAgICAgICBpZiAoc2tpcEluc3RydW1lbnRhdGlvbiB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVzdWx0SGFuZGxlciAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2Ygb3BzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIHNlcnZlciwgbnMsIG9wcywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBvcHMsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gaW5zdHJ1bWVudGF0aW9uLl9nZXRWM1NwYW5BdHRyaWJ1dGVzKG5zLCBzZXJ2ZXIsIFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgb3BzWzBdLCBvcGVyYXRpb25OYW1lKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuTmFtZSA9IGluc3RydW1lbnRhdGlvbi5fc3Bhbk5hbWVGcm9tQXR0cnMoYXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGluc3RydW1lbnRhdGlvbi50cmFjZXIuc3RhcnRTcGFuKHNwYW5OYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRjaGVkQ2FsbGJhY2sgPSBpbnN0cnVtZW50YXRpb24uX3BhdGNoRW5kKHNwYW4sIHJlc3VsdEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSB3aGVuIG9wdGlvbnMgaXMgdGhlIGNhbGxiYWNrIHRvIHNlbmQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGFyZ3NcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgc2VydmVyLCBucywgb3BzLCBwYXRjaGVkQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgc2VydmVyLCBucywgb3BzLCBvcHRpb25zLCBwYXRjaGVkQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKiBDcmVhdGVzIHNwYW5zIGZvciBjb21tYW5kIG9wZXJhdGlvbiAqL1xuICAgIF9nZXRWM1BhdGNoQ29tbWFuZCgpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRTZXJ2ZXJDb21tYW5kKHNlcnZlciwgbnMsIGNtZCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhbiA9IGFwaV8xLnRyYWNlLmdldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2tpcEluc3RydW1lbnRhdGlvbiA9IGluc3RydW1lbnRhdGlvbi5fY2hlY2tTa2lwSW5zdHJ1bWVudGF0aW9uKGN1cnJlbnRTcGFuKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRIYW5kbGVyID0gdHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zIDogY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBJbnN0cnVtZW50YXRpb24gfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJlc3VsdEhhbmRsZXIgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGNtZCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBjbWQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgc2VydmVyLCBucywgY21kLCBvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWFuZFR5cGUgPSBNb25nb0RCSW5zdHJ1bWVudGF0aW9uLl9nZXRDb21tYW5kVHlwZShjbWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbk5hbWUgPSBjb21tYW5kVHlwZSA9PT0gaW50ZXJuYWxfdHlwZXNfMS5Nb25nb2RiQ29tbWFuZFR5cGUuVU5LTk9XTiA/IHVuZGVmaW5lZCA6IGNvbW1hbmRUeXBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBpbnN0cnVtZW50YXRpb24uX2dldFYzU3BhbkF0dHJpYnV0ZXMobnMsIHNlcnZlciwgY21kLCBvcGVyYXRpb25OYW1lKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuTmFtZSA9IGluc3RydW1lbnRhdGlvbi5fc3Bhbk5hbWVGcm9tQXR0cnMoYXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGluc3RydW1lbnRhdGlvbi50cmFjZXIuc3RhcnRTcGFuKHNwYW5OYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRjaGVkQ2FsbGJhY2sgPSBpbnN0cnVtZW50YXRpb24uX3BhdGNoRW5kKHNwYW4sIHJlc3VsdEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSB3aGVuIG9wdGlvbnMgaXMgdGhlIGNhbGxiYWNrIHRvIHNlbmQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGFyZ3NcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgc2VydmVyLCBucywgY21kLCBwYXRjaGVkQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgc2VydmVyLCBucywgY21kLCBvcHRpb25zLCBwYXRjaGVkQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKiBDcmVhdGVzIHNwYW5zIGZvciBjb21tYW5kIG9wZXJhdGlvbiAqL1xuICAgIF9nZXRWNFBhdGNoQ29tbWFuZENhbGxiYWNrKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZFY0U2VydmVyQ29tbWFuZChucywgY21kLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFuID0gYXBpXzEudHJhY2UuZ2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lwSW5zdHJ1bWVudGF0aW9uID0gaW5zdHJ1bWVudGF0aW9uLl9jaGVja1NraXBJbnN0cnVtZW50YXRpb24oY3VycmVudFNwYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdEhhbmRsZXIgPSBjYWxsYmFjaztcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kVHlwZSA9IE9iamVjdC5rZXlzKGNtZClbMF07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjbWQgIT09ICdvYmplY3QnIHx8IGNtZC5pc21hc3RlciB8fCBjbWQuaGVsbG8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgbnMsIGNtZCwgb3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgc3BhbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoIXNraXBJbnN0cnVtZW50YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGluc3RydW1lbnRhdGlvbi5fZ2V0VjRTcGFuQXR0cmlidXRlcyh0aGlzLCBucywgY21kLCBjb21tYW5kVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwYW5OYW1lID0gaW5zdHJ1bWVudGF0aW9uLl9zcGFuTmFtZUZyb21BdHRycyhhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgc3BhbiA9IGluc3RydW1lbnRhdGlvbi50cmFjZXIuc3RhcnRTcGFuKHNwYW5OYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0Y2hlZENhbGxiYWNrID0gaW5zdHJ1bWVudGF0aW9uLl9wYXRjaEVuZChzcGFuLCByZXN1bHRIYW5kbGVyLCB0aGlzLmlkLCBjb21tYW5kVHlwZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgbnMsIGNtZCwgb3B0aW9ucywgcGF0Y2hlZENhbGxiYWNrKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRWNFBhdGNoQ29tbWFuZFByb21pc2UoKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBwYXRjaGVkVjRTZXJ2ZXJDb21tYW5kKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbbnMsIGNtZF0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFuID0gYXBpXzEudHJhY2UuZ2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lwSW5zdHJ1bWVudGF0aW9uID0gaW5zdHJ1bWVudGF0aW9uLl9jaGVja1NraXBJbnN0cnVtZW50YXRpb24oY3VycmVudFNwYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRUeXBlID0gT2JqZWN0LmtleXMoY21kKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRIYW5kbGVyID0gKCkgPT4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY21kICE9PSAnb2JqZWN0JyB8fCBjbWQuaXNtYXN0ZXIgfHwgY21kLmhlbGxvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHNwYW4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKCFza2lwSW5zdHJ1bWVudGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBpbnN0cnVtZW50YXRpb24uX2dldFY0U3BhbkF0dHJpYnV0ZXModGhpcywgbnMsIGNtZCwgY29tbWFuZFR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGFuTmFtZSA9IGluc3RydW1lbnRhdGlvbi5fc3Bhbk5hbWVGcm9tQXR0cnMoYXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4gPSBpbnN0cnVtZW50YXRpb24udHJhY2VyLnN0YXJ0U3BhbihzcGFuTmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAga2luZDogYXBpXzEuU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoZWRDYWxsYmFjayA9IGluc3RydW1lbnRhdGlvbi5fcGF0Y2hFbmQoc3BhbiwgcmVzdWx0SGFuZGxlciwgdGhpcy5pZCwgY29tbWFuZFR5cGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKChyZXMpID0+IHBhdGNoZWRDYWxsYmFjayhudWxsLCByZXMpLCAoZXJyKSA9PiBwYXRjaGVkQ2FsbGJhY2soZXJyKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKiBDcmVhdGVzIHNwYW5zIGZvciBmaW5kIG9wZXJhdGlvbiAqL1xuICAgIF9nZXRWM1BhdGNoRmluZCgpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRTZXJ2ZXJDb21tYW5kKHNlcnZlciwgbnMsIGNtZCwgY3Vyc29yU3RhdGUsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNwYW4gPSBhcGlfMS50cmFjZS5nZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNraXBJbnN0cnVtZW50YXRpb24gPSBpbnN0cnVtZW50YXRpb24uX2NoZWNrU2tpcEluc3RydW1lbnRhdGlvbihjdXJyZW50U3Bhbik7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0SGFuZGxlciA9IHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucyA6IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIGlmIChza2lwSW5zdHJ1bWVudGF0aW9uIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHRIYW5kbGVyICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBjbWQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgc2VydmVyLCBucywgY21kLCBjdXJzb3JTdGF0ZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBjbWQsIGN1cnNvclN0YXRlLCBvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGluc3RydW1lbnRhdGlvbi5fZ2V0VjNTcGFuQXR0cmlidXRlcyhucywgc2VydmVyLCBjbWQsICdmaW5kJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3Bhbk5hbWUgPSBpbnN0cnVtZW50YXRpb24uX3NwYW5OYW1lRnJvbUF0dHJzKGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBpbnN0cnVtZW50YXRpb24udHJhY2VyLnN0YXJ0U3BhbihzcGFuTmFtZSwge1xuICAgICAgICAgICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0Y2hlZENhbGxiYWNrID0gaW5zdHJ1bWVudGF0aW9uLl9wYXRjaEVuZChzcGFuLCByZXN1bHRIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgd2hlbiBvcHRpb25zIGlzIHRoZSBjYWxsYmFjayB0byBzZW5kIHRoZSBjb3JyZWN0IG51bWJlciBvZiBhcmdzXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIHNlcnZlciwgbnMsIGNtZCwgY3Vyc29yU3RhdGUsIHBhdGNoZWRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBjbWQsIGN1cnNvclN0YXRlLCBvcHRpb25zLCBwYXRjaGVkQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKiBDcmVhdGVzIHNwYW5zIGZvciBmaW5kIG9wZXJhdGlvbiAqL1xuICAgIF9nZXRWM1BhdGNoQ3Vyc29yKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZFNlcnZlckNvbW1hbmQoc2VydmVyLCBucywgY3Vyc29yU3RhdGUsIGJhdGNoU2l6ZSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhbiA9IGFwaV8xLnRyYWNlLmdldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2tpcEluc3RydW1lbnRhdGlvbiA9IGluc3RydW1lbnRhdGlvbi5fY2hlY2tTa2lwSW5zdHJ1bWVudGF0aW9uKGN1cnJlbnRTcGFuKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRIYW5kbGVyID0gdHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zIDogY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBJbnN0cnVtZW50YXRpb24gfHwgdHlwZW9mIHJlc3VsdEhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBjdXJzb3JTdGF0ZSwgYmF0Y2hTaXplLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIHNlcnZlciwgbnMsIGN1cnNvclN0YXRlLCBiYXRjaFNpemUsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gaW5zdHJ1bWVudGF0aW9uLl9nZXRWM1NwYW5BdHRyaWJ1dGVzKG5zLCBzZXJ2ZXIsIGN1cnNvclN0YXRlLmNtZCwgJ2dldE1vcmUnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuTmFtZSA9IGluc3RydW1lbnRhdGlvbi5fc3Bhbk5hbWVGcm9tQXR0cnMoYXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGluc3RydW1lbnRhdGlvbi50cmFjZXIuc3RhcnRTcGFuKHNwYW5OYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRjaGVkQ2FsbGJhY2sgPSBpbnN0cnVtZW50YXRpb24uX3BhdGNoRW5kKHNwYW4sIHJlc3VsdEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSB3aGVuIG9wdGlvbnMgaXMgdGhlIGNhbGxiYWNrIHRvIHNlbmQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGFyZ3NcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgc2VydmVyLCBucywgY3Vyc29yU3RhdGUsIGJhdGNoU2l6ZSwgcGF0Y2hlZENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIHNlcnZlciwgbnMsIGN1cnNvclN0YXRlLCBiYXRjaFNpemUsIG9wdGlvbnMsIHBhdGNoZWRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBtb25nb2RiIGNvbW1hbmQgdHlwZSBmcm9tIHRoZSBvYmplY3QuXG4gICAgICogQHBhcmFtIGNvbW1hbmQgSW50ZXJuYWwgbW9uZ29kYiBjb21tYW5kIG9iamVjdFxuICAgICAqL1xuICAgIHN0YXRpYyBfZ2V0Q29tbWFuZFR5cGUoY29tbWFuZCkge1xuICAgICAgICBpZiAoY29tbWFuZC5jcmVhdGVJbmRleGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF90eXBlc18xLk1vbmdvZGJDb21tYW5kVHlwZS5DUkVBVEVfSU5ERVhFUztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb21tYW5kLmZpbmRhbmRtb2RpZnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3R5cGVzXzEuTW9uZ29kYkNvbW1hbmRUeXBlLkZJTkRfQU5EX01PRElGWTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb21tYW5kLmlzbWFzdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF90eXBlc18xLk1vbmdvZGJDb21tYW5kVHlwZS5JU19NQVNURVI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29tbWFuZC5jb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfdHlwZXNfMS5Nb25nb2RiQ29tbWFuZFR5cGUuQ09VTlQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29tbWFuZC5hZ2dyZWdhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3R5cGVzXzEuTW9uZ29kYkNvbW1hbmRUeXBlLkFHR1JFR0FURTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF90eXBlc18xLk1vbmdvZGJDb21tYW5kVHlwZS5VTktOT1dOO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZSBhIHNwYW4ncyBhdHRyaWJ1dGVzIGJ5IGZldGNoaW5nIHJlbGF0ZWQgbWV0YWRhdGEgZnJvbSB0aGUgY29udGV4dFxuICAgICAqIEBwYXJhbSBjb25uZWN0aW9uQ3R4IG1vbmdvZGIgaW50ZXJuYWwgY29ubmVjdGlvbiBjb250ZXh0XG4gICAgICogQHBhcmFtIG5zIG1vbmdvZGIgbmFtZXNwYWNlXG4gICAgICogQHBhcmFtIGNvbW1hbmQgbW9uZ29kYiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhIGNvbW1hbmRcbiAgICAgKi9cbiAgICBfZ2V0VjRTcGFuQXR0cmlidXRlcyhjb25uZWN0aW9uQ3R4LCBucywgY29tbWFuZCwgb3BlcmF0aW9uKSB7XG4gICAgICAgIGxldCBob3N0LCBwb3J0O1xuICAgICAgICBpZiAoY29ubmVjdGlvbkN0eCkge1xuICAgICAgICAgICAgY29uc3QgaG9zdFBhcnRzID0gdHlwZW9mIGNvbm5lY3Rpb25DdHguYWRkcmVzcyA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICA/IGNvbm5lY3Rpb25DdHguYWRkcmVzcy5zcGxpdCgnOicpXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgIGlmIChob3N0UGFydHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgaG9zdCA9IGhvc3RQYXJ0c1swXTtcbiAgICAgICAgICAgICAgICBwb3J0ID0gaG9zdFBhcnRzWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNhcHR1cmUgcGFyYW1ldGVycyB3aXRoaW4gdGhlIHF1ZXJ5IGFzIHdlbGwgaWYgZW5oYW5jZWREYXRhYmFzZVJlcG9ydGluZyBpcyBlbmFibGVkLlxuICAgICAgICBsZXQgY29tbWFuZE9iajtcbiAgICAgICAgaWYgKGNvbW1hbmQ/LmRvY3VtZW50cyAmJiBjb21tYW5kLmRvY3VtZW50c1swXSkge1xuICAgICAgICAgICAgY29tbWFuZE9iaiA9IGNvbW1hbmQuZG9jdW1lbnRzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbW1hbmQ/LmN1cnNvcnMpIHtcbiAgICAgICAgICAgIGNvbW1hbmRPYmogPSBjb21tYW5kLmN1cnNvcnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb21tYW5kT2JqID0gY29tbWFuZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U3BhbkF0dHJpYnV0ZXMobnMuZGIsIG5zLmNvbGxlY3Rpb24sIGhvc3QsIHBvcnQsIGNvbW1hbmRPYmosIG9wZXJhdGlvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZSBhIHNwYW4ncyBhdHRyaWJ1dGVzIGJ5IGZldGNoaW5nIHJlbGF0ZWQgbWV0YWRhdGEgZnJvbSB0aGUgY29udGV4dFxuICAgICAqIEBwYXJhbSBucyBtb25nb2RiIG5hbWVzcGFjZVxuICAgICAqIEBwYXJhbSB0b3BvbG9neSBtb25nb2RiIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuZXR3b3JrIHRvcG9sb2d5XG4gICAgICogQHBhcmFtIGNvbW1hbmQgbW9uZ29kYiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhIGNvbW1hbmRcbiAgICAgKi9cbiAgICBfZ2V0VjNTcGFuQXR0cmlidXRlcyhucywgdG9wb2xvZ3ksIGNvbW1hbmQsIG9wZXJhdGlvbikge1xuICAgICAgICAvLyBFeHRyYWN0IGhvc3QvcG9ydCBpbmZvLlxuICAgICAgICBsZXQgaG9zdDtcbiAgICAgICAgbGV0IHBvcnQ7XG4gICAgICAgIGlmICh0b3BvbG9neSAmJiB0b3BvbG9neS5zKSB7XG4gICAgICAgICAgICBob3N0ID0gdG9wb2xvZ3kucy5vcHRpb25zPy5ob3N0ID8/IHRvcG9sb2d5LnMuaG9zdDtcbiAgICAgICAgICAgIHBvcnQgPSAodG9wb2xvZ3kucy5vcHRpb25zPy5wb3J0ID8/IHRvcG9sb2d5LnMucG9ydCk/LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAoaG9zdCA9PSBudWxsIHx8IHBvcnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSB0b3BvbG9neS5kZXNjcmlwdGlvbj8uYWRkcmVzcztcbiAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzU2VnbWVudHMgPSBhZGRyZXNzLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgICAgIGhvc3QgPSBhZGRyZXNzU2VnbWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHBvcnQgPSBhZGRyZXNzU2VnbWVudHNbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBuYW1lc3BhY2UgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgZGF0YWJhc2UgbmFtZSBhbmQgdGhlIG5hbWUgb2YgdGhlXG4gICAgICAgIC8vIGNvbGxlY3Rpb24gb3IgaW5kZXgsIGxpa2Ugc286IFtkYXRhYmFzZS1uYW1lXS5bY29sbGVjdGlvbi1vci1pbmRleC1uYW1lXS5cbiAgICAgICAgLy8gSXQgY291bGQgYmUgYSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgTW9uZ29EQk5hbWVzcGFjZSwgYXMgc3VjaCB3ZVxuICAgICAgICAvLyBhbHdheXMgY29lcmNlIHRvIGEgc3RyaW5nIHRvIGV4dHJhY3QgZGIgYW5kIGNvbGxlY3Rpb24uXG4gICAgICAgIGNvbnN0IFtkYk5hbWUsIGRiQ29sbGVjdGlvbl0gPSBucy50b1N0cmluZygpLnNwbGl0KCcuJyk7XG4gICAgICAgIC8vIGNhcHR1cmUgcGFyYW1ldGVycyB3aXRoaW4gdGhlIHF1ZXJ5IGFzIHdlbGwgaWYgZW5oYW5jZWREYXRhYmFzZVJlcG9ydGluZyBpcyBlbmFibGVkLlxuICAgICAgICBjb25zdCBjb21tYW5kT2JqID0gY29tbWFuZD8ucXVlcnkgPz8gY29tbWFuZD8ucSA/PyBjb21tYW5kO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U3BhbkF0dHJpYnV0ZXMoZGJOYW1lLCBkYkNvbGxlY3Rpb24sIGhvc3QsIHBvcnQsIGNvbW1hbmRPYmosIG9wZXJhdGlvbik7XG4gICAgfVxuICAgIF9nZXRTcGFuQXR0cmlidXRlcyhkYk5hbWUsIGRiQ29sbGVjdGlvbiwgaG9zdCwgcG9ydCwgY29tbWFuZE9iaiwgb3BlcmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgaWYgKHRoaXMuX2RiU2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuT0xEKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0RCX1NZU1RFTV0gPSBzZW1jb252XzEuREJfU1lTVEVNX1ZBTFVFX01PTkdPREI7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0RCX05BTUVdID0gZGJOYW1lO1xuICAgICAgICAgICAgYXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9EQl9NT05HT0RCX0NPTExFQ1RJT05dID0gZGJDb2xsZWN0aW9uO1xuICAgICAgICAgICAgYXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9EQl9PUEVSQVRJT05dID0gb3BlcmF0aW9uO1xuICAgICAgICAgICAgYXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9EQl9DT05ORUNUSU9OX1NUUklOR10gPVxuICAgICAgICAgICAgICAgIGBtb25nb2RiOi8vJHtob3N0fToke3BvcnR9LyR7ZGJOYW1lfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2RiU2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuU1RBQkxFKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9TWVNURU1fTkFNRV0gPSBzZW1jb252XzEuREJfU1lTVEVNX05BTUVfVkFMVUVfTU9OR09EQjtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0RCX05BTUVTUEFDRV0gPSBkYk5hbWU7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9PUEVSQVRJT05fTkFNRV0gPSBvcGVyYXRpb247XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9DT0xMRUNUSU9OX05BTUVdID0gZGJDb2xsZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3N0ICYmIHBvcnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9uZXRTZW1jb252U3RhYmlsaXR5ICYgaW5zdHJ1bWVudGF0aW9uXzEuU2VtY29udlN0YWJpbGl0eS5PTEQpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX05FVF9QRUVSX05BTUVdID0gaG9zdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9uZXRTZW1jb252U3RhYmlsaXR5ICYgaW5zdHJ1bWVudGF0aW9uXzEuU2VtY29udlN0YWJpbGl0eS5TVEFCTEUpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWRVJfQUREUkVTU10gPSBob3N0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcG9ydE51bWJlciA9IHBhcnNlSW50KHBvcnQsIDEwKTtcbiAgICAgICAgICAgIGlmICghaXNOYU4ocG9ydE51bWJlcikpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbmV0U2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuT0xEKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfTkVUX1BFRVJfUE9SVF0gPSBwb3J0TnVtYmVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbmV0U2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuU1RBQkxFKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9QT1JUXSA9IHBvcnROdW1iZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tYW5kT2JqKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRiU3RhdGVtZW50U2VyaWFsaXplcjogY29uZmlnRGJTdGF0ZW1lbnRTZXJpYWxpemVyIH0gPSB0aGlzLmdldENvbmZpZygpO1xuICAgICAgICAgICAgY29uc3QgZGJTdGF0ZW1lbnRTZXJpYWxpemVyID0gdHlwZW9mIGNvbmZpZ0RiU3RhdGVtZW50U2VyaWFsaXplciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgID8gY29uZmlnRGJTdGF0ZW1lbnRTZXJpYWxpemVyXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9kZWZhdWx0RGJTdGF0ZW1lbnRTZXJpYWxpemVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gZGJTdGF0ZW1lbnRTZXJpYWxpemVyKGNvbW1hbmRPYmopO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kYlNlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5Lk9MRCkge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0RCX1NUQVRFTUVOVF0gPSBxdWVyeTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RiU2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuU1RBQkxFKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0RCX1FVRVJZX1RFWFRdID0gcXVlcnk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpYWcuZXJyb3IoJ0Vycm9yIHJ1bm5pbmcgZGJTdGF0ZW1lbnRTZXJpYWxpemVyIGhvb2snLCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cbiAgICBfc3Bhbk5hbWVGcm9tQXR0cnMoYXR0cmlidXRlcykge1xuICAgICAgICBsZXQgc3Bhbk5hbWU7XG4gICAgICAgIGlmICh0aGlzLl9kYlNlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5LlNUQUJMRSkge1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9vcGVudGVsZW1ldHJ5LmlvL2RvY3Mvc3BlY3Mvc2VtY29udi9kYXRhYmFzZS9kYXRhYmFzZS1zcGFucy8jbmFtZVxuICAgICAgICAgICAgc3Bhbk5hbWUgPVxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfREJfT1BFUkFUSU9OX05BTUVdLFxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9DT0xMRUNUSU9OX05BTUVdLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihhdHRyID0+IGF0dHIpXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcgJykgfHwgc2VtY29udl8xLkRCX1NZU1RFTV9OQU1FX1ZBTFVFX01PTkdPREI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzcGFuTmFtZSA9IGBtb25nb2RiLiR7YXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9EQl9PUEVSQVRJT05dIHx8ICdjb21tYW5kJ31gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcGFuTmFtZTtcbiAgICB9XG4gICAgX2dldERlZmF1bHREYlN0YXRlbWVudFJlcGxhY2VyKCkge1xuICAgICAgICBjb25zdCBzZWVuID0gbmV3IFdlYWtTZXQoKTtcbiAgICAgICAgcmV0dXJuIChfa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgLy8gdW5kZWZpbmVkLCBib29sZWFuLCBudW1iZXIsIGJpZ2ludCwgc3RyaW5nLCBzeW1ib2wsIGZ1bmN0aW9uIHx8IG51bGxcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8ICF2YWx1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gJz8nO1xuICAgICAgICAgICAgLy8gb2JqZWN0cyAoaW5jbHVkaW5nIGFycmF5cylcbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICAgICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2RlZmF1bHREYlN0YXRlbWVudFNlcmlhbGl6ZXIoY29tbWFuZE9iaikge1xuICAgICAgICBjb25zdCB7IGVuaGFuY2VkRGF0YWJhc2VSZXBvcnRpbmcgfSA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmIChlbmhhbmNlZERhdGFiYXNlUmVwb3J0aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY29tbWFuZE9iaik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGNvbW1hbmRPYmosIHRoaXMuX2dldERlZmF1bHREYlN0YXRlbWVudFJlcGxhY2VyKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyB0aGUgcmVzcG9uc2UgaG9vayBpbiBjYXNlIGl0IGlzIGRlZmluZWQuXG4gICAgICogQHBhcmFtIHNwYW4gVGhlIHNwYW4gdG8gYWRkIHRoZSByZXN1bHRzIHRvLlxuICAgICAqIEBwYXJhbSByZXN1bHQgVGhlIGNvbW1hbmQgcmVzdWx0XG4gICAgICovXG4gICAgX2hhbmRsZUV4ZWN1dGlvblJlc3VsdChzcGFuLCByZXN1bHQpIHtcbiAgICAgICAgY29uc3QgeyByZXNwb25zZUhvb2sgfSA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2VIb29rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlSG9vayhzcGFuLCB7IGRhdGE6IHJlc3VsdCB9KTtcbiAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaWFnLmVycm9yKCdFcnJvciBydW5uaW5nIHJlc3BvbnNlIGhvb2snLCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuZHMgYSBjcmVhdGVkIHNwYW4uXG4gICAgICogQHBhcmFtIHNwYW4gVGhlIGNyZWF0ZWQgc3BhbiB0byBlbmQuXG4gICAgICogQHBhcmFtIHJlc3VsdEhhbmRsZXIgQSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0gY29ubmVjdGlvbklkOiBUaGUgY29ubmVjdGlvbiBJRCBvZiB0aGUgQ29tbWFuZCByZXNwb25zZS5cbiAgICAgKi9cbiAgICBfcGF0Y2hFbmQoc3BhbiwgcmVzdWx0SGFuZGxlciwgY29ubmVjdGlvbklkLCBjb21tYW5kVHlwZSkge1xuICAgICAgICAvLyBtb25nb2RiIGlzIHVzaW5nIFwidGlja1wiIHdoZW4gY2FsbGluZyBhIGNhbGxiYWNrLCB0aGlzIHdheSB0aGUgY29udGV4dFxuICAgICAgICAvLyBpbiBmaW5hbCBjYWxsYmFjayAocmVzdWx0SGFuZGxlcikgaXMgbG9zdFxuICAgICAgICBjb25zdCBhY3RpdmVDb250ZXh0ID0gYXBpXzEuY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgbGV0IHNwYW5FbmRlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZEVuZCguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoIXNwYW5FbmRlZCkge1xuICAgICAgICAgICAgICAgIHNwYW5FbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIGlmIChzcGFuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogYXBpXzEuU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXJnc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5faGFuZGxlRXhlY3V0aW9uUmVzdWx0KHNwYW4sIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRUeXBlID09PSAnZW5kU2Vzc2lvbnMnKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fY29ubkNvdW50QWRkKC0xLCBpbnN0cnVtZW50YXRpb24uX3Bvb2xOYW1lLCAnaWRsZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcGlfMS5jb250ZXh0LndpdGgoYWN0aXZlQ29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRIYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHNldFBvb2xOYW1lKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgaG9zdCA9IG9wdGlvbnMuaG9zdEFkZHJlc3M/Lmhvc3Q7XG4gICAgICAgIGNvbnN0IHBvcnQgPSBvcHRpb25zLmhvc3RBZGRyZXNzPy5wb3J0O1xuICAgICAgICBjb25zdCBkYXRhYmFzZSA9IG9wdGlvbnMuZGJOYW1lO1xuICAgICAgICBjb25zdCBwb29sTmFtZSA9IGBtb25nb2RiOi8vJHtob3N0fToke3BvcnR9LyR7ZGF0YWJhc2V9YDtcbiAgICAgICAgdGhpcy5fcG9vbE5hbWUgPSBwb29sTmFtZTtcbiAgICB9XG4gICAgX2NoZWNrU2tpcEluc3RydW1lbnRhdGlvbihjdXJyZW50U3Bhbikge1xuICAgICAgICBjb25zdCByZXF1aXJlUGFyZW50U3BhbiA9IHRoaXMuZ2V0Q29uZmlnKCkucmVxdWlyZVBhcmVudFNwYW47XG4gICAgICAgIGNvbnN0IGhhc05vUGFyZW50U3BhbiA9IGN1cnJlbnRTcGFuID09PSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiByZXF1aXJlUGFyZW50U3BhbiA9PT0gdHJ1ZSAmJiBoYXNOb1BhcmVudFNwYW47XG4gICAgfVxufVxuZXhwb3J0cy5Nb25nb0RCSW5zdHJ1bWVudGF0aW9uID0gTW9uZ29EQkluc3RydW1lbnRhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3RydW1lbnRhdGlvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/instrumentation.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/internal-types.js":
/*!***********************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/internal-types.js ***!
\***********************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.MongodbCommandType = void 0;\nvar MongodbCommandType;\n(function (MongodbCommandType) {\n MongodbCommandType[\"CREATE_INDEXES\"] = \"createIndexes\";\n MongodbCommandType[\"FIND_AND_MODIFY\"] = \"findAndModify\";\n MongodbCommandType[\"IS_MASTER\"] = \"isMaster\";\n MongodbCommandType[\"COUNT\"] = \"count\";\n MongodbCommandType[\"AGGREGATE\"] = \"aggregate\";\n MongodbCommandType[\"UNKNOWN\"] = \"unknown\";\n})(MongodbCommandType = exports.MongodbCommandType || (exports.MongodbCommandType = {}));\n//# sourceMappingURL=internal-types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvZGJAMC42Ny4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMS9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL2ludGVybmFsLXR5cGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxzREFBc0QsMEJBQTBCLEtBQUs7QUFDdEYiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvZGJAMC42Ny4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMS9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL2ludGVybmFsLXR5cGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTW9uZ29kYkNvbW1hbmRUeXBlID0gdm9pZCAwO1xudmFyIE1vbmdvZGJDb21tYW5kVHlwZTtcbihmdW5jdGlvbiAoTW9uZ29kYkNvbW1hbmRUeXBlKSB7XG4gICAgTW9uZ29kYkNvbW1hbmRUeXBlW1wiQ1JFQVRFX0lOREVYRVNcIl0gPSBcImNyZWF0ZUluZGV4ZXNcIjtcbiAgICBNb25nb2RiQ29tbWFuZFR5cGVbXCJGSU5EX0FORF9NT0RJRllcIl0gPSBcImZpbmRBbmRNb2RpZnlcIjtcbiAgICBNb25nb2RiQ29tbWFuZFR5cGVbXCJJU19NQVNURVJcIl0gPSBcImlzTWFzdGVyXCI7XG4gICAgTW9uZ29kYkNvbW1hbmRUeXBlW1wiQ09VTlRcIl0gPSBcImNvdW50XCI7XG4gICAgTW9uZ29kYkNvbW1hbmRUeXBlW1wiQUdHUkVHQVRFXCJdID0gXCJhZ2dyZWdhdGVcIjtcbiAgICBNb25nb2RiQ29tbWFuZFR5cGVbXCJVTktOT1dOXCJdID0gXCJ1bmtub3duXCI7XG59KShNb25nb2RiQ29tbWFuZFR5cGUgPSBleHBvcnRzLk1vbmdvZGJDb21tYW5kVHlwZSB8fCAoZXhwb3J0cy5Nb25nb2RiQ29tbWFuZFR5cGUgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJuYWwtdHlwZXMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/internal-types.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/semconv.js":
/*!****************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/semconv.js ***!
\****************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.METRIC_DB_CLIENT_CONNECTIONS_USAGE = exports.DB_SYSTEM_VALUE_MONGODB = exports.DB_SYSTEM_NAME_VALUE_MONGODB = exports.ATTR_NET_PEER_PORT = exports.ATTR_NET_PEER_NAME = exports.ATTR_DB_SYSTEM = exports.ATTR_DB_STATEMENT = exports.ATTR_DB_OPERATION = exports.ATTR_DB_NAME = exports.ATTR_DB_MONGODB_COLLECTION = exports.ATTR_DB_CONNECTION_STRING = void 0;\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by this package.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n/**\n * Deprecated, use `server.address`, `server.port` attributes instead.\n *\n * @example \"Server=(localdb)\\\\v11.0;Integrated Security=true;\"\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `server.address` and `server.port`.\n */\nexports.ATTR_DB_CONNECTION_STRING = 'db.connection_string';\n/**\n * Deprecated, use `db.collection.name` instead.\n *\n * @example \"mytable\"\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.collection.name`.\n */\nexports.ATTR_DB_MONGODB_COLLECTION = 'db.mongodb.collection';\n/**\n * Deprecated, use `db.namespace` instead.\n *\n * @example customers\n * @example main\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.namespace`.\n */\nexports.ATTR_DB_NAME = 'db.name';\n/**\n * Deprecated, use `db.operation.name` instead.\n *\n * @example findAndModify\n * @example HMSET\n * @example SELECT\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.operation.name`.\n */\nexports.ATTR_DB_OPERATION = 'db.operation';\n/**\n * The database statement being executed.\n *\n * @example SELECT * FROM wuser_table\n * @example SET mykey \"WuValue\"\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.query.text`.\n */\nexports.ATTR_DB_STATEMENT = 'db.statement';\n/**\n * Deprecated, use `db.system.name` instead.\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.system.name`.\n */\nexports.ATTR_DB_SYSTEM = 'db.system';\n/**\n * Deprecated, use `server.address` on client spans and `client.address` on server spans.\n *\n * @example example.com\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `server.address` on client spans and `client.address` on server spans.\n */\nexports.ATTR_NET_PEER_NAME = 'net.peer.name';\n/**\n * Deprecated, use `server.port` on client spans and `client.port` on server spans.\n *\n * @example 8080\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `server.port` on client spans and `client.port` on server spans.\n */\nexports.ATTR_NET_PEER_PORT = 'net.peer.port';\n/**\n * Enum value \"mongodb\" for attribute {@link ATTR_DB_SYSTEM_NAME}.\n *\n * [MongoDB](https://www.mongodb.com/)\n *\n * @experimental This enum value is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexports.DB_SYSTEM_NAME_VALUE_MONGODB = 'mongodb';\n/**\n * Enum value \"mongodb\" for attribute {@link ATTR_DB_SYSTEM}.\n *\n * MongoDB\n *\n * @experimental This enum value is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexports.DB_SYSTEM_VALUE_MONGODB = 'mongodb';\n/**\n * Deprecated, use `db.client.connection.count` instead.\n *\n * @experimental This metric is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.client.connection.count`.\n */\nexports.METRIC_DB_CLIENT_CONNECTIONS_USAGE = 'db.client.connections.usage';\n//# sourceMappingURL=semconv.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvZGJAMC42Ny4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMS9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL3NlbWNvbnYuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsMENBQTBDLEdBQUcsK0JBQStCLEdBQUcsb0NBQW9DLEdBQUcsMEJBQTBCLEdBQUcsMEJBQTBCLEdBQUcsc0JBQXNCLEdBQUcseUJBQXlCLEdBQUcseUJBQXlCLEdBQUcsb0JBQW9CLEdBQUcsa0NBQWtDLEdBQUcsaUNBQWlDO0FBQzlWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMseUJBQXlCO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBLHVDQUF1QywwQkFBMEI7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBLHVDQUF1QyxxQkFBcUI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tbW9uZ29kYkAwLjY3LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbW9uZ29kYi9idWlsZC9zcmMvc2VtY29udi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1FVFJJQ19EQl9DTElFTlRfQ09OTkVDVElPTlNfVVNBR0UgPSBleHBvcnRzLkRCX1NZU1RFTV9WQUxVRV9NT05HT0RCID0gZXhwb3J0cy5EQl9TWVNURU1fTkFNRV9WQUxVRV9NT05HT0RCID0gZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSBleHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9IGV4cG9ydHMuQVRUUl9EQl9TWVNURU0gPSBleHBvcnRzLkFUVFJfREJfU1RBVEVNRU5UID0gZXhwb3J0cy5BVFRSX0RCX09QRVJBVElPTiA9IGV4cG9ydHMuQVRUUl9EQl9OQU1FID0gZXhwb3J0cy5BVFRSX0RCX01PTkdPREJfQ09MTEVDVElPTiA9IGV4cG9ydHMuQVRUUl9EQl9DT05ORUNUSU9OX1NUUklORyA9IHZvaWQgMDtcbi8qXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBjb3B5IG9mIHVuc3RhYmxlIHNlbWFudGljIGNvbnZlbnRpb24gZGVmaW5pdGlvbnNcbiAqIHVzZWQgYnkgdGhpcyBwYWNrYWdlLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy90cmVlL21haW4vc2VtYW50aWMtY29udmVudGlvbnMjdW5zdGFibGUtc2VtY29udlxuICovXG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgc2VydmVyLmFkZHJlc3NgLCBgc2VydmVyLnBvcnRgIGF0dHJpYnV0ZXMgaW5zdGVhZC5cbiAqXG4gKiBAZXhhbXBsZSBcIlNlcnZlcj0obG9jYWxkYilcXFxcdjExLjA7SW50ZWdyYXRlZCBTZWN1cml0eT10cnVlO1wiXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIuYWRkcmVzc2AgYW5kIGBzZXJ2ZXIucG9ydGAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9DT05ORUNUSU9OX1NUUklORyA9ICdkYi5jb25uZWN0aW9uX3N0cmluZyc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgZGIuY29sbGVjdGlvbi5uYW1lYCBpbnN0ZWFkLlxuICpcbiAqIEBleGFtcGxlIFwibXl0YWJsZVwiXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBkYi5jb2xsZWN0aW9uLm5hbWVgLlxuICovXG5leHBvcnRzLkFUVFJfREJfTU9OR09EQl9DT0xMRUNUSU9OID0gJ2RiLm1vbmdvZGIuY29sbGVjdGlvbic7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgZGIubmFtZXNwYWNlYCBpbnN0ZWFkLlxuICpcbiAqIEBleGFtcGxlIGN1c3RvbWVyc1xuICogQGV4YW1wbGUgbWFpblxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIubmFtZXNwYWNlYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX05BTUUgPSAnZGIubmFtZSc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgZGIub3BlcmF0aW9uLm5hbWVgIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgZmluZEFuZE1vZGlmeVxuICogQGV4YW1wbGUgSE1TRVRcbiAqIEBleGFtcGxlIFNFTEVDVFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIub3BlcmF0aW9uLm5hbWVgLlxuICovXG5leHBvcnRzLkFUVFJfREJfT1BFUkFUSU9OID0gJ2RiLm9wZXJhdGlvbic7XG4vKipcbiAqIFRoZSBkYXRhYmFzZSBzdGF0ZW1lbnQgYmVpbmcgZXhlY3V0ZWQuXG4gKlxuICogQGV4YW1wbGUgU0VMRUNUICogRlJPTSB3dXNlcl90YWJsZVxuICogQGV4YW1wbGUgU0VUIG15a2V5IFwiV3VWYWx1ZVwiXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBkYi5xdWVyeS50ZXh0YC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX1NUQVRFTUVOVCA9ICdkYi5zdGF0ZW1lbnQnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGRiLnN5c3RlbS5uYW1lYCBpbnN0ZWFkLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIuc3lzdGVtLm5hbWVgLlxuICovXG5leHBvcnRzLkFUVFJfREJfU1lTVEVNID0gJ2RiLnN5c3RlbSc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgc2VydmVyLmFkZHJlc3NgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5hZGRyZXNzYCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKlxuICogQGV4YW1wbGUgZXhhbXBsZS5jb21cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYHNlcnZlci5hZGRyZXNzYCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQuYWRkcmVzc2Agb24gc2VydmVyIHNwYW5zLlxuICovXG5leHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9ICduZXQucGVlci5uYW1lJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBzZXJ2ZXIucG9ydGAgb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LnBvcnRgIG9uIHNlcnZlciBzcGFucy5cbiAqXG4gKiBAZXhhbXBsZSA4MDgwXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIucG9ydGAgb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LnBvcnRgIG9uIHNlcnZlciBzcGFucy5cbiAqL1xuZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSAnbmV0LnBlZXIucG9ydCc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJtb25nb2RiXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9EQl9TWVNURU1fTkFNRX0uXG4gKlxuICogW01vbmdvREJdKGh0dHBzOi8vd3d3Lm1vbmdvZGIuY29tLylcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgZW51bSB2YWx1ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkRCX1NZU1RFTV9OQU1FX1ZBTFVFX01PTkdPREIgPSAnbW9uZ29kYic7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJtb25nb2RiXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9EQl9TWVNURU19LlxuICpcbiAqIE1vbmdvREJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgZW51bSB2YWx1ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkRCX1NZU1RFTV9WQUxVRV9NT05HT0RCID0gJ21vbmdvZGInO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGRiLmNsaWVudC5jb25uZWN0aW9uLmNvdW50YCBpbnN0ZWFkLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtZXRyaWMgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIuY2xpZW50LmNvbm5lY3Rpb24uY291bnRgLlxuICovXG5leHBvcnRzLk1FVFJJQ19EQl9DTElFTlRfQ09OTkVDVElPTlNfVVNBR0UgPSAnZGIuY2xpZW50LmNvbm5lY3Rpb25zLnVzYWdlJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWNvbnYuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/semconv.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/types.js":
/*!**************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/types.js ***!
\**************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.MongodbCommandType = void 0;\nvar MongodbCommandType;\n(function (MongodbCommandType) {\n MongodbCommandType[\"CREATE_INDEXES\"] = \"createIndexes\";\n MongodbCommandType[\"FIND_AND_MODIFY\"] = \"findAndModify\";\n MongodbCommandType[\"IS_MASTER\"] = \"isMaster\";\n MongodbCommandType[\"COUNT\"] = \"count\";\n MongodbCommandType[\"UNKNOWN\"] = \"unknown\";\n})(MongodbCommandType = exports.MongodbCommandType || (exports.MongodbCommandType = {}));\n//# sourceMappingURL=types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvZGJAMC42Ny4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMS9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL3R5cGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsc0RBQXNELDBCQUEwQixLQUFLO0FBQ3RGIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1tb25nb2RiQDAuNjcuMF9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjEvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1tb25nb2RiL2J1aWxkL3NyYy90eXBlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1vbmdvZGJDb21tYW5kVHlwZSA9IHZvaWQgMDtcbnZhciBNb25nb2RiQ29tbWFuZFR5cGU7XG4oZnVuY3Rpb24gKE1vbmdvZGJDb21tYW5kVHlwZSkge1xuICAgIE1vbmdvZGJDb21tYW5kVHlwZVtcIkNSRUFURV9JTkRFWEVTXCJdID0gXCJjcmVhdGVJbmRleGVzXCI7XG4gICAgTW9uZ29kYkNvbW1hbmRUeXBlW1wiRklORF9BTkRfTU9ESUZZXCJdID0gXCJmaW5kQW5kTW9kaWZ5XCI7XG4gICAgTW9uZ29kYkNvbW1hbmRUeXBlW1wiSVNfTUFTVEVSXCJdID0gXCJpc01hc3RlclwiO1xuICAgIE1vbmdvZGJDb21tYW5kVHlwZVtcIkNPVU5UXCJdID0gXCJjb3VudFwiO1xuICAgIE1vbmdvZGJDb21tYW5kVHlwZVtcIlVOS05PV05cIl0gPSBcInVua25vd25cIjtcbn0pKE1vbmdvZGJDb21tYW5kVHlwZSA9IGV4cG9ydHMuTW9uZ29kYkNvbW1hbmRUeXBlIHx8IChleHBvcnRzLk1vbmdvZGJDb21tYW5kVHlwZSA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/types.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/version.js":
/*!****************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/version.js ***!
\****************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.PACKAGE_NAME = exports.PACKAGE_VERSION = void 0;\n// this is autogenerated file, see scripts/version-update.js\nexports.PACKAGE_VERSION = '0.67.0';\nexports.PACKAGE_NAME = '@opentelemetry/instrumentation-mongodb';\n//# sourceMappingURL=version.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvZGJAMC42Ny4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMS9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Qsb0JBQW9CLEdBQUcsdUJBQXVCO0FBQzlDO0FBQ0EsdUJBQXVCO0FBQ3ZCLG9CQUFvQjtBQUNwQiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tbW9uZ29kYkAwLjY3LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbW9uZ29kYi9idWlsZC9zcmMvdmVyc2lvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9IGV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gdm9pZCAwO1xuLy8gdGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUsIHNlZSBzY3JpcHRzL3ZlcnNpb24tdXBkYXRlLmpzXG5leHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9ICcwLjY3LjAnO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGInO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/version.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/index.js":
/*!**************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/index.js ***!
\**************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.MongodbCommandType = exports.MongoDBInstrumentation = void 0;\nvar instrumentation_1 = __webpack_require__(/*! ./instrumentation */ \"(ssr)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/instrumentation.js\");\nObject.defineProperty(exports, \"MongoDBInstrumentation\", ({ enumerable: true, get: function () { return instrumentation_1.MongoDBInstrumentation; } }));\nvar types_1 = __webpack_require__(/*! ./types */ \"(ssr)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/types.js\");\nObject.defineProperty(exports, \"MongodbCommandType\", ({ enumerable: true, get: function () { return types_1.MongodbCommandType; } }));\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvZGJAMC42Ny4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMS9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELDBCQUEwQixHQUFHLDhCQUE4QjtBQUMzRCx3QkFBd0IsbUJBQU8sQ0FBQyw2TUFBbUI7QUFDbkQsMERBQXlELEVBQUUscUNBQXFDLG9EQUFvRCxFQUFDO0FBQ3JKLGNBQWMsbUJBQU8sQ0FBQyx5TEFBUztBQUMvQixzREFBcUQsRUFBRSxxQ0FBcUMsc0NBQXNDLEVBQUM7QUFDbkkiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvZGJAMC42Ny4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMS9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTW9uZ29kYkNvbW1hbmRUeXBlID0gZXhwb3J0cy5Nb25nb0RCSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xudmFyIGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIi4vaW5zdHJ1bWVudGF0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTW9uZ29EQkluc3RydW1lbnRhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5zdHJ1bWVudGF0aW9uXzEuTW9uZ29EQkluc3RydW1lbnRhdGlvbjsgfSB9KTtcbnZhciB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNb25nb2RiQ29tbWFuZFR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzEuTW9uZ29kYkNvbW1hbmRUeXBlOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/index.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/instrumentation.js":
/*!************************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/instrumentation.js ***!
\************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval(";globalThis[\"_sentryRewritesTunnelPath\"] = undefined;globalThis[\"SENTRY_RELEASE\"] = undefined;globalThis[\"_sentryBasePath\"] = undefined;globalThis[\"_sentryNextJsVersion\"] = \"16.1.6\";globalThis[\"_sentryRewriteFramesDistDir\"] = \".next\";globalThis[\"_sentryVercelCronsConfig\"] = undefined;\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.MongoDBInstrumentation = void 0;\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst api_1 = __webpack_require__(/*! @opentelemetry/api */ \"(ssr)/./node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/index.js\");\nconst instrumentation_1 = __webpack_require__(/*! @opentelemetry/instrumentation */ \"(ssr)/./node_modules/.pnpm/@opentelemetry+instrumentation@0.214.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation/build/esm/index.js\");\nconst semantic_conventions_1 = __webpack_require__(/*! @opentelemetry/semantic-conventions */ \"(ssr)/./node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/build/esm/index.js\");\nconst semconv_1 = __webpack_require__(/*! ./semconv */ \"(ssr)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/semconv.js\");\nconst internal_types_1 = __webpack_require__(/*! ./internal-types */ \"(ssr)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/internal-types.js\");\n/** @knipignore */\nconst version_1 = __webpack_require__(/*! ./version */ \"(ssr)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/version.js\");\nconst DEFAULT_CONFIG = {\n requireParentSpan: true,\n};\n/** mongodb instrumentation plugin for OpenTelemetry */\nclass MongoDBInstrumentation extends instrumentation_1.InstrumentationBase {\n _netSemconvStability;\n _dbSemconvStability;\n constructor(config = {}) {\n super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, { ...DEFAULT_CONFIG, ...config });\n this._setSemconvStabilityFromEnv();\n }\n // Used for testing.\n _setSemconvStabilityFromEnv() {\n this._netSemconvStability = (0, instrumentation_1.semconvStabilityFromStr)('http', process.env.OTEL_SEMCONV_STABILITY_OPT_IN);\n this._dbSemconvStability = (0, instrumentation_1.semconvStabilityFromStr)('database', process.env.OTEL_SEMCONV_STABILITY_OPT_IN);\n }\n setConfig(config = {}) {\n super.setConfig({ ...DEFAULT_CONFIG, ...config });\n }\n _updateMetricInstruments() {\n this._connectionsUsage = this.meter.createUpDownCounter(semconv_1.METRIC_DB_CLIENT_CONNECTIONS_USAGE, {\n description: 'The number of connections that are currently in state described by the state attribute.',\n unit: '{connection}',\n });\n }\n /**\n * Convenience function for updating the `db.client.connections.usage` metric.\n * The name \"count\" comes from the eventual replacement for this metric per\n * https://opentelemetry.io/docs/specs/semconv/non-normative/db-migration/#database-client-connection-count\n */\n _connCountAdd(n, poolName, state) {\n this._connectionsUsage?.add(n, { 'pool.name': poolName, state });\n }\n init() {\n const { v3PatchConnection: v3PatchConnection, v3UnpatchConnection: v3UnpatchConnection, } = this._getV3ConnectionPatches();\n const { v4PatchConnect, v4UnpatchConnect } = this._getV4ConnectPatches();\n const { v4PatchConnectionCallback, v4PatchConnectionPromise, v4UnpatchConnection, } = this._getV4ConnectionPatches();\n const { v4PatchConnectionPool, v4UnpatchConnectionPool } = this._getV4ConnectionPoolPatches();\n const { v4PatchSessions, v4UnpatchSessions } = this._getV4SessionsPatches();\n return [\n new instrumentation_1.InstrumentationNodeModuleDefinition('mongodb', ['>=3.3.0 <4'], undefined, undefined, [\n new instrumentation_1.InstrumentationNodeModuleFile('mongodb/lib/core/wireprotocol/index.js', ['>=3.3.0 <4'], v3PatchConnection, v3UnpatchConnection),\n ]),\n new instrumentation_1.InstrumentationNodeModuleDefinition('mongodb', ['>=4.0.0 <8'], undefined, undefined, [\n new instrumentation_1.InstrumentationNodeModuleFile('mongodb/lib/cmap/connection.js', ['>=4.0.0 <6.4'], v4PatchConnectionCallback, v4UnpatchConnection),\n new instrumentation_1.InstrumentationNodeModuleFile('mongodb/lib/cmap/connection.js', ['>=6.4.0 <8'], v4PatchConnectionPromise, v4UnpatchConnection),\n new instrumentation_1.InstrumentationNodeModuleFile('mongodb/lib/cmap/connection_pool.js', ['>=4.0.0 <6.4'], v4PatchConnectionPool, v4UnpatchConnectionPool),\n new instrumentation_1.InstrumentationNodeModuleFile('mongodb/lib/cmap/connect.js', ['>=4.0.0 <8'], v4PatchConnect, v4UnpatchConnect),\n new instrumentation_1.InstrumentationNodeModuleFile('mongodb/lib/sessions.js', ['>=4.0.0 <8'], v4PatchSessions, v4UnpatchSessions),\n ]),\n ];\n }\n _getV3ConnectionPatches() {\n return {\n v3PatchConnection: (moduleExports) => {\n // patch insert operation\n if ((0, instrumentation_1.isWrapped)(moduleExports.insert)) {\n this._unwrap(moduleExports, 'insert');\n }\n this._wrap(moduleExports, 'insert', this._getV3PatchOperation('insert'));\n // patch remove operation\n if ((0, instrumentation_1.isWrapped)(moduleExports.remove)) {\n this._unwrap(moduleExports, 'remove');\n }\n this._wrap(moduleExports, 'remove', this._getV3PatchOperation('remove'));\n // patch update operation\n if ((0, instrumentation_1.isWrapped)(moduleExports.update)) {\n this._unwrap(moduleExports, 'update');\n }\n this._wrap(moduleExports, 'update', this._getV3PatchOperation('update'));\n // patch other command\n if ((0, instrumentation_1.isWrapped)(moduleExports.command)) {\n this._unwrap(moduleExports, 'command');\n }\n this._wrap(moduleExports, 'command', this._getV3PatchCommand());\n // patch query\n if ((0, instrumentation_1.isWrapped)(moduleExports.query)) {\n this._unwrap(moduleExports, 'query');\n }\n this._wrap(moduleExports, 'query', this._getV3PatchFind());\n // patch get more operation on cursor\n if ((0, instrumentation_1.isWrapped)(moduleExports.getMore)) {\n this._unwrap(moduleExports, 'getMore');\n }\n this._wrap(moduleExports, 'getMore', this._getV3PatchCursor());\n return moduleExports;\n },\n v3UnpatchConnection: (moduleExports) => {\n if (moduleExports === undefined)\n return;\n this._unwrap(moduleExports, 'insert');\n this._unwrap(moduleExports, 'remove');\n this._unwrap(moduleExports, 'update');\n this._unwrap(moduleExports, 'command');\n this._unwrap(moduleExports, 'query');\n this._unwrap(moduleExports, 'getMore');\n },\n };\n }\n _getV4SessionsPatches() {\n return {\n v4PatchSessions: (moduleExports) => {\n if ((0, instrumentation_1.isWrapped)(moduleExports.acquire)) {\n this._unwrap(moduleExports, 'acquire');\n }\n this._wrap(moduleExports.ServerSessionPool.prototype, 'acquire', this._getV4AcquireCommand());\n if ((0, instrumentation_1.isWrapped)(moduleExports.release)) {\n this._unwrap(moduleExports, 'release');\n }\n this._wrap(moduleExports.ServerSessionPool.prototype, 'release', this._getV4ReleaseCommand());\n return moduleExports;\n },\n v4UnpatchSessions: (moduleExports) => {\n if (moduleExports === undefined)\n return;\n if ((0, instrumentation_1.isWrapped)(moduleExports.acquire)) {\n this._unwrap(moduleExports, 'acquire');\n }\n if ((0, instrumentation_1.isWrapped)(moduleExports.release)) {\n this._unwrap(moduleExports, 'release');\n }\n },\n };\n }\n _getV4AcquireCommand() {\n const instrumentation = this;\n return (original) => {\n return function patchAcquire() {\n const nSessionsBeforeAcquire = this.sessions.length;\n const session = original.call(this);\n const nSessionsAfterAcquire = this.sessions.length;\n if (nSessionsBeforeAcquire === nSessionsAfterAcquire) {\n //no session in the pool. a new session was created and used\n instrumentation._connCountAdd(1, instrumentation._poolName, 'used');\n }\n else if (nSessionsBeforeAcquire - 1 === nSessionsAfterAcquire) {\n //a session was already in the pool. remove it from the pool and use it.\n instrumentation._connCountAdd(-1, instrumentation._poolName, 'idle');\n instrumentation._connCountAdd(1, instrumentation._poolName, 'used');\n }\n return session;\n };\n };\n }\n _getV4ReleaseCommand() {\n const instrumentation = this;\n return (original) => {\n return function patchRelease(session) {\n const cmdPromise = original.call(this, session);\n instrumentation._connCountAdd(-1, instrumentation._poolName, 'used');\n instrumentation._connCountAdd(1, instrumentation._poolName, 'idle');\n return cmdPromise;\n };\n };\n }\n _getV4ConnectionPoolPatches() {\n return {\n v4PatchConnectionPool: (moduleExports) => {\n const poolPrototype = moduleExports.ConnectionPool.prototype;\n if ((0, instrumentation_1.isWrapped)(poolPrototype.checkOut)) {\n this._unwrap(poolPrototype, 'checkOut');\n }\n this._wrap(poolPrototype, 'checkOut', this._getV4ConnectionPoolCheckOut());\n return moduleExports;\n },\n v4UnpatchConnectionPool: (moduleExports) => {\n if (moduleExports === undefined)\n return;\n this._unwrap(moduleExports.ConnectionPool.prototype, 'checkOut');\n },\n };\n }\n _getV4ConnectPatches() {\n return {\n v4PatchConnect: (moduleExports) => {\n if ((0, instrumentation_1.isWrapped)(moduleExports.connect)) {\n this._unwrap(moduleExports, 'connect');\n }\n this._wrap(moduleExports, 'connect', this._getV4ConnectCommand());\n return moduleExports;\n },\n v4UnpatchConnect: (moduleExports) => {\n if (moduleExports === undefined)\n return;\n this._unwrap(moduleExports, 'connect');\n },\n };\n }\n // This patch will become unnecessary once\n // https://jira.mongodb.org/browse/NODE-5639 is done.\n _getV4ConnectionPoolCheckOut() {\n return (original) => {\n return function patchedCheckout(callback) {\n const patchedCallback = api_1.context.bind(api_1.context.active(), callback);\n return original.call(this, patchedCallback);\n };\n };\n }\n _getV4ConnectCommand() {\n const instrumentation = this;\n return (original) => {\n return function patchedConnect(options, callback) {\n // from v6.4 `connect` method only accepts an options param and returns a promise\n // with the connection\n if (original.length === 1) {\n const result = original.call(this, options);\n if (result && typeof result.then === 'function') {\n result.then(() => instrumentation.setPoolName(options), \n // this handler is set to pass the lint rules\n () => undefined);\n }\n return result;\n }\n // Earlier versions expects a callback param and return void\n const patchedCallback = function (err, conn) {\n if (err || !conn) {\n callback(err, conn);\n return;\n }\n instrumentation.setPoolName(options);\n callback(err, conn);\n };\n return original.call(this, options, patchedCallback);\n };\n };\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _getV4ConnectionPatches() {\n return {\n v4PatchConnectionCallback: (moduleExports) => {\n // patch insert operation\n if ((0, instrumentation_1.isWrapped)(moduleExports.Connection.prototype.command)) {\n this._unwrap(moduleExports.Connection.prototype, 'command');\n }\n this._wrap(moduleExports.Connection.prototype, 'command', this._getV4PatchCommandCallback());\n return moduleExports;\n },\n v4PatchConnectionPromise: (moduleExports) => {\n // patch insert operation\n if ((0, instrumentation_1.isWrapped)(moduleExports.Connection.prototype.command)) {\n this._unwrap(moduleExports.Connection.prototype, 'command');\n }\n this._wrap(moduleExports.Connection.prototype, 'command', this._getV4PatchCommandPromise());\n return moduleExports;\n },\n v4UnpatchConnection: (moduleExports) => {\n if (moduleExports === undefined)\n return;\n this._unwrap(moduleExports.Connection.prototype, 'command');\n },\n };\n }\n /** Creates spans for common operations */\n _getV3PatchOperation(operationName) {\n const instrumentation = this;\n return (original) => {\n return function patchedServerCommand(server, ns, ops, options, callback) {\n const currentSpan = api_1.trace.getSpan(api_1.context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n const resultHandler = typeof options === 'function' ? options : callback;\n if (skipInstrumentation ||\n typeof resultHandler !== 'function' ||\n typeof ops !== 'object') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, ops, options);\n }\n else {\n return original.call(this, server, ns, ops, options, callback);\n }\n }\n const attributes = instrumentation._getV3SpanAttributes(ns, server, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ops[0], operationName);\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n const span = instrumentation.tracer.startSpan(spanName, {\n kind: api_1.SpanKind.CLIENT,\n attributes,\n });\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, ops, patchedCallback);\n }\n else {\n return original.call(this, server, ns, ops, options, patchedCallback);\n }\n };\n };\n }\n /** Creates spans for command operation */\n _getV3PatchCommand() {\n const instrumentation = this;\n return (original) => {\n return function patchedServerCommand(server, ns, cmd, options, callback) {\n const currentSpan = api_1.trace.getSpan(api_1.context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n const resultHandler = typeof options === 'function' ? options : callback;\n if (skipInstrumentation ||\n typeof resultHandler !== 'function' ||\n typeof cmd !== 'object') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, options);\n }\n else {\n return original.call(this, server, ns, cmd, options, callback);\n }\n }\n const commandType = MongoDBInstrumentation._getCommandType(cmd);\n const operationName = commandType === internal_types_1.MongodbCommandType.UNKNOWN ? undefined : commandType;\n const attributes = instrumentation._getV3SpanAttributes(ns, server, cmd, operationName);\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n const span = instrumentation.tracer.startSpan(spanName, {\n kind: api_1.SpanKind.CLIENT,\n attributes,\n });\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, patchedCallback);\n }\n else {\n return original.call(this, server, ns, cmd, options, patchedCallback);\n }\n };\n };\n }\n /** Creates spans for command operation */\n _getV4PatchCommandCallback() {\n const instrumentation = this;\n return (original) => {\n return function patchedV4ServerCommand(ns, cmd, options, callback) {\n const currentSpan = api_1.trace.getSpan(api_1.context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n const resultHandler = callback;\n const commandType = Object.keys(cmd)[0];\n if (typeof cmd !== 'object' || cmd.ismaster || cmd.hello) {\n return original.call(this, ns, cmd, options, callback);\n }\n let span = undefined;\n if (!skipInstrumentation) {\n const attributes = instrumentation._getV4SpanAttributes(this, ns, cmd, commandType);\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n span = instrumentation.tracer.startSpan(spanName, {\n kind: api_1.SpanKind.CLIENT,\n attributes,\n });\n }\n const patchedCallback = instrumentation._patchEnd(span, resultHandler, this.id, commandType);\n return original.call(this, ns, cmd, options, patchedCallback);\n };\n };\n }\n _getV4PatchCommandPromise() {\n const instrumentation = this;\n return (original) => {\n return function patchedV4ServerCommand(...args) {\n const [ns, cmd] = args;\n const currentSpan = api_1.trace.getSpan(api_1.context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n const commandType = Object.keys(cmd)[0];\n const resultHandler = () => undefined;\n if (typeof cmd !== 'object' || cmd.ismaster || cmd.hello) {\n return original.apply(this, args);\n }\n let span = undefined;\n if (!skipInstrumentation) {\n const attributes = instrumentation._getV4SpanAttributes(this, ns, cmd, commandType);\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n span = instrumentation.tracer.startSpan(spanName, {\n kind: api_1.SpanKind.CLIENT,\n attributes,\n });\n }\n const patchedCallback = instrumentation._patchEnd(span, resultHandler, this.id, commandType);\n const result = original.apply(this, args);\n result.then((res) => patchedCallback(null, res), (err) => patchedCallback(err));\n return result;\n };\n };\n }\n /** Creates spans for find operation */\n _getV3PatchFind() {\n const instrumentation = this;\n return (original) => {\n return function patchedServerCommand(server, ns, cmd, cursorState, options, callback) {\n const currentSpan = api_1.trace.getSpan(api_1.context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n const resultHandler = typeof options === 'function' ? options : callback;\n if (skipInstrumentation ||\n typeof resultHandler !== 'function' ||\n typeof cmd !== 'object') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, cursorState, options);\n }\n else {\n return original.call(this, server, ns, cmd, cursorState, options, callback);\n }\n }\n const attributes = instrumentation._getV3SpanAttributes(ns, server, cmd, 'find');\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n const span = instrumentation.tracer.startSpan(spanName, {\n kind: api_1.SpanKind.CLIENT,\n attributes,\n });\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, cursorState, patchedCallback);\n }\n else {\n return original.call(this, server, ns, cmd, cursorState, options, patchedCallback);\n }\n };\n };\n }\n /** Creates spans for find operation */\n _getV3PatchCursor() {\n const instrumentation = this;\n return (original) => {\n return function patchedServerCommand(server, ns, cursorState, batchSize, options, callback) {\n const currentSpan = api_1.trace.getSpan(api_1.context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n const resultHandler = typeof options === 'function' ? options : callback;\n if (skipInstrumentation || typeof resultHandler !== 'function') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cursorState, batchSize, options);\n }\n else {\n return original.call(this, server, ns, cursorState, batchSize, options, callback);\n }\n }\n const attributes = instrumentation._getV3SpanAttributes(ns, server, cursorState.cmd, 'getMore');\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n const span = instrumentation.tracer.startSpan(spanName, {\n kind: api_1.SpanKind.CLIENT,\n attributes,\n });\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cursorState, batchSize, patchedCallback);\n }\n else {\n return original.call(this, server, ns, cursorState, batchSize, options, patchedCallback);\n }\n };\n };\n }\n /**\n * Get the mongodb command type from the object.\n * @param command Internal mongodb command object\n */\n static _getCommandType(command) {\n if (command.createIndexes !== undefined) {\n return internal_types_1.MongodbCommandType.CREATE_INDEXES;\n }\n else if (command.findandmodify !== undefined) {\n return internal_types_1.MongodbCommandType.FIND_AND_MODIFY;\n }\n else if (command.ismaster !== undefined) {\n return internal_types_1.MongodbCommandType.IS_MASTER;\n }\n else if (command.count !== undefined) {\n return internal_types_1.MongodbCommandType.COUNT;\n }\n else if (command.aggregate !== undefined) {\n return internal_types_1.MongodbCommandType.AGGREGATE;\n }\n else {\n return internal_types_1.MongodbCommandType.UNKNOWN;\n }\n }\n /**\n * Determine a span's attributes by fetching related metadata from the context\n * @param connectionCtx mongodb internal connection context\n * @param ns mongodb namespace\n * @param command mongodb internal representation of a command\n */\n _getV4SpanAttributes(connectionCtx, ns, command, operation) {\n let host, port;\n if (connectionCtx) {\n const hostParts = typeof connectionCtx.address === 'string'\n ? connectionCtx.address.split(':')\n : '';\n if (hostParts.length === 2) {\n host = hostParts[0];\n port = hostParts[1];\n }\n }\n // capture parameters within the query as well if enhancedDatabaseReporting is enabled.\n let commandObj;\n if (command?.documents && command.documents[0]) {\n commandObj = command.documents[0];\n }\n else if (command?.cursors) {\n commandObj = command.cursors;\n }\n else {\n commandObj = command;\n }\n return this._getSpanAttributes(ns.db, ns.collection, host, port, commandObj, operation);\n }\n /**\n * Determine a span's attributes by fetching related metadata from the context\n * @param ns mongodb namespace\n * @param topology mongodb internal representation of the network topology\n * @param command mongodb internal representation of a command\n */\n _getV3SpanAttributes(ns, topology, command, operation) {\n // Extract host/port info.\n let host;\n let port;\n if (topology && topology.s) {\n host = topology.s.options?.host ?? topology.s.host;\n port = (topology.s.options?.port ?? topology.s.port)?.toString();\n if (host == null || port == null) {\n const address = topology.description?.address;\n if (address) {\n const addressSegments = address.split(':');\n host = addressSegments[0];\n port = addressSegments[1];\n }\n }\n }\n // The namespace is a combination of the database name and the name of the\n // collection or index, like so: [database-name].[collection-or-index-name].\n // It could be a string or an instance of MongoDBNamespace, as such we\n // always coerce to a string to extract db and collection.\n const [dbName, dbCollection] = ns.toString().split('.');\n // capture parameters within the query as well if enhancedDatabaseReporting is enabled.\n const commandObj = command?.query ?? command?.q ?? command;\n return this._getSpanAttributes(dbName, dbCollection, host, port, commandObj, operation);\n }\n _getSpanAttributes(dbName, dbCollection, host, port, commandObj, operation) {\n const attributes = {};\n if (this._dbSemconvStability & instrumentation_1.SemconvStability.OLD) {\n attributes[semconv_1.ATTR_DB_SYSTEM] = semconv_1.DB_SYSTEM_VALUE_MONGODB;\n attributes[semconv_1.ATTR_DB_NAME] = dbName;\n attributes[semconv_1.ATTR_DB_MONGODB_COLLECTION] = dbCollection;\n attributes[semconv_1.ATTR_DB_OPERATION] = operation;\n attributes[semconv_1.ATTR_DB_CONNECTION_STRING] =\n `mongodb://${host}:${port}/${dbName}`;\n }\n if (this._dbSemconvStability & instrumentation_1.SemconvStability.STABLE) {\n attributes[semantic_conventions_1.ATTR_DB_SYSTEM_NAME] = semconv_1.DB_SYSTEM_NAME_VALUE_MONGODB;\n attributes[semantic_conventions_1.ATTR_DB_NAMESPACE] = dbName;\n attributes[semantic_conventions_1.ATTR_DB_OPERATION_NAME] = operation;\n attributes[semantic_conventions_1.ATTR_DB_COLLECTION_NAME] = dbCollection;\n }\n if (host && port) {\n if (this._netSemconvStability & instrumentation_1.SemconvStability.OLD) {\n attributes[semconv_1.ATTR_NET_PEER_NAME] = host;\n }\n if (this._netSemconvStability & instrumentation_1.SemconvStability.STABLE) {\n attributes[semantic_conventions_1.ATTR_SERVER_ADDRESS] = host;\n }\n const portNumber = parseInt(port, 10);\n if (!isNaN(portNumber)) {\n if (this._netSemconvStability & instrumentation_1.SemconvStability.OLD) {\n attributes[semconv_1.ATTR_NET_PEER_PORT] = portNumber;\n }\n if (this._netSemconvStability & instrumentation_1.SemconvStability.STABLE) {\n attributes[semantic_conventions_1.ATTR_SERVER_PORT] = portNumber;\n }\n }\n }\n if (commandObj) {\n const { dbStatementSerializer: configDbStatementSerializer } = this.getConfig();\n const dbStatementSerializer = typeof configDbStatementSerializer === 'function'\n ? configDbStatementSerializer\n : this._defaultDbStatementSerializer.bind(this);\n (0, instrumentation_1.safeExecuteInTheMiddle)(() => {\n const query = dbStatementSerializer(commandObj);\n if (this._dbSemconvStability & instrumentation_1.SemconvStability.OLD) {\n attributes[semconv_1.ATTR_DB_STATEMENT] = query;\n }\n if (this._dbSemconvStability & instrumentation_1.SemconvStability.STABLE) {\n attributes[semantic_conventions_1.ATTR_DB_QUERY_TEXT] = query;\n }\n }, err => {\n if (err) {\n this._diag.error('Error running dbStatementSerializer hook', err);\n }\n }, true);\n }\n return attributes;\n }\n _spanNameFromAttrs(attributes) {\n let spanName;\n if (this._dbSemconvStability & instrumentation_1.SemconvStability.STABLE) {\n // https://opentelemetry.io/docs/specs/semconv/database/database-spans/#name\n spanName =\n [\n attributes[semantic_conventions_1.ATTR_DB_OPERATION_NAME],\n attributes[semantic_conventions_1.ATTR_DB_COLLECTION_NAME],\n ]\n .filter(attr => attr)\n .join(' ') || semconv_1.DB_SYSTEM_NAME_VALUE_MONGODB;\n }\n else {\n spanName = `mongodb.${attributes[semconv_1.ATTR_DB_OPERATION] || 'command'}`;\n }\n return spanName;\n }\n _getDefaultDbStatementReplacer() {\n const seen = new WeakSet();\n return (_key, value) => {\n // undefined, boolean, number, bigint, string, symbol, function || null\n if (typeof value !== 'object' || !value)\n return '?';\n // objects (including arrays)\n if (seen.has(value))\n return '[Circular]';\n seen.add(value);\n return value;\n };\n }\n _defaultDbStatementSerializer(commandObj) {\n const { enhancedDatabaseReporting } = this.getConfig();\n if (enhancedDatabaseReporting) {\n return JSON.stringify(commandObj);\n }\n return JSON.stringify(commandObj, this._getDefaultDbStatementReplacer());\n }\n /**\n * Triggers the response hook in case it is defined.\n * @param span The span to add the results to.\n * @param result The command result\n */\n _handleExecutionResult(span, result) {\n const { responseHook } = this.getConfig();\n if (typeof responseHook === 'function') {\n (0, instrumentation_1.safeExecuteInTheMiddle)(() => {\n responseHook(span, { data: result });\n }, err => {\n if (err) {\n this._diag.error('Error running response hook', err);\n }\n }, true);\n }\n }\n /**\n * Ends a created span.\n * @param span The created span to end.\n * @param resultHandler A callback function.\n * @param connectionId: The connection ID of the Command response.\n */\n _patchEnd(span, resultHandler, connectionId, commandType) {\n // mongodb is using \"tick\" when calling a callback, this way the context\n // in final callback (resultHandler) is lost\n const activeContext = api_1.context.active();\n const instrumentation = this;\n let spanEnded = false;\n return function patchedEnd(...args) {\n if (!spanEnded) {\n spanEnded = true;\n const error = args[0];\n if (span) {\n if (error instanceof Error) {\n span.setStatus({\n code: api_1.SpanStatusCode.ERROR,\n message: error.message,\n });\n }\n else {\n const result = args[1];\n instrumentation._handleExecutionResult(span, result);\n }\n span.end();\n }\n if (commandType === 'endSessions') {\n instrumentation._connCountAdd(-1, instrumentation._poolName, 'idle');\n }\n }\n return api_1.context.with(activeContext, () => {\n return resultHandler.apply(this, args);\n });\n };\n }\n setPoolName(options) {\n const host = options.hostAddress?.host;\n const port = options.hostAddress?.port;\n const database = options.dbName;\n const poolName = `mongodb://${host}:${port}/${database}`;\n this._poolName = poolName;\n }\n _checkSkipInstrumentation(currentSpan) {\n const requireParentSpan = this.getConfig().requireParentSpan;\n const hasNoParentSpan = currentSpan === undefined;\n return requireParentSpan === true && hasNoParentSpan;\n }\n}\nexports.MongoDBInstrumentation = MongoDBInstrumentation;\n//# sourceMappingURL=instrumentation.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvZGJAMC42Ny4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMS9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL2luc3RydW1lbnRhdGlvbi5qcyIsIm1hcHBpbmdzIjoiQUFBYSxDQUFDLG9EQUFvRCx5Q0FBeUMsMENBQTBDLDhDQUE4QyxvREFBb0Q7QUFDdlAsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLG1CQUFPLENBQUMsa0lBQW9CO0FBQzFDLDBCQUEwQixtQkFBTyxDQUFDLGlNQUFnQztBQUNsRSwrQkFBK0IsbUJBQU8sQ0FBQyxzTEFBcUM7QUFDNUUsa0JBQWtCLG1CQUFPLENBQUMsNkxBQVc7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsMk1BQWtCO0FBQ25EO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMsNkxBQVc7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0IsbUVBQW1FLDhCQUE4QjtBQUNqRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QiwwQkFBMEIsOEJBQThCO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFdBQVc7QUFDL0IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLDhCQUE4QjtBQUN2RTtBQUNBO0FBQ0EsZ0JBQWdCLGtGQUFrRjtBQUNsRyxnQkFBZ0IsbUNBQW1DO0FBQ25ELGdCQUFnQiw0RUFBNEU7QUFDNUYsZ0JBQWdCLGlEQUFpRDtBQUNqRSxnQkFBZ0IscUNBQXFDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixLQUFLLEdBQUcsS0FBSyxHQUFHLE9BQU87QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IscURBQXFEO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHFEQUFxRDtBQUN2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGVBQWU7QUFDL0I7QUFDQTtBQUNBLHFDQUFxQyxjQUFjO0FBQ25ELGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsS0FBSyxHQUFHLEtBQUssR0FBRyxTQUFTO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvZGJAMC42Ny4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMS9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL2luc3RydW1lbnRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjs7Z2xvYmFsVGhpc1tcIl9zZW50cnlSZXdyaXRlc1R1bm5lbFBhdGhcIl0gPSB1bmRlZmluZWQ7Z2xvYmFsVGhpc1tcIlNFTlRSWV9SRUxFQVNFXCJdID0gdW5kZWZpbmVkO2dsb2JhbFRoaXNbXCJfc2VudHJ5QmFzZVBhdGhcIl0gPSB1bmRlZmluZWQ7Z2xvYmFsVGhpc1tcIl9zZW50cnlOZXh0SnNWZXJzaW9uXCJdID0gXCIxNi4xLjZcIjtnbG9iYWxUaGlzW1wiX3NlbnRyeVJld3JpdGVGcmFtZXNEaXN0RGlyXCJdID0gXCIubmV4dFwiO2dsb2JhbFRoaXNbXCJfc2VudHJ5VmVyY2VsQ3JvbnNDb25maWdcIl0gPSB1bmRlZmluZWQ7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1vbmdvREJJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuY29uc3Qgc2VtYW50aWNfY29udmVudGlvbnNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc1wiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnZcIik7XG5jb25zdCBpbnRlcm5hbF90eXBlc18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwtdHlwZXNcIik7XG4vKiogQGtuaXBpZ25vcmUgKi9cbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5jb25zdCBERUZBVUxUX0NPTkZJRyA9IHtcbiAgICByZXF1aXJlUGFyZW50U3BhbjogdHJ1ZSxcbn07XG4vKiogbW9uZ29kYiBpbnN0cnVtZW50YXRpb24gcGx1Z2luIGZvciBPcGVuVGVsZW1ldHJ5ICovXG5jbGFzcyBNb25nb0RCSW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgX25ldFNlbWNvbnZTdGFiaWxpdHk7XG4gICAgX2RiU2VtY29udlN0YWJpbGl0eTtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcih2ZXJzaW9uXzEuUEFDS0FHRV9OQU1FLCB2ZXJzaW9uXzEuUEFDS0FHRV9WRVJTSU9OLCB7IC4uLkRFRkFVTFRfQ09ORklHLCAuLi5jb25maWcgfSk7XG4gICAgICAgIHRoaXMuX3NldFNlbWNvbnZTdGFiaWxpdHlGcm9tRW52KCk7XG4gICAgfVxuICAgIC8vIFVzZWQgZm9yIHRlc3RpbmcuXG4gICAgX3NldFNlbWNvbnZTdGFiaWxpdHlGcm9tRW52KCkge1xuICAgICAgICB0aGlzLl9uZXRTZW1jb252U3RhYmlsaXR5ID0gKDAsIGluc3RydW1lbnRhdGlvbl8xLnNlbWNvbnZTdGFiaWxpdHlGcm9tU3RyKSgnaHR0cCcsIHByb2Nlc3MuZW52Lk9URUxfU0VNQ09OVl9TVEFCSUxJVFlfT1BUX0lOKTtcbiAgICAgICAgdGhpcy5fZGJTZW1jb252U3RhYmlsaXR5ID0gKDAsIGluc3RydW1lbnRhdGlvbl8xLnNlbWNvbnZTdGFiaWxpdHlGcm9tU3RyKSgnZGF0YWJhc2UnLCBwcm9jZXNzLmVudi5PVEVMX1NFTUNPTlZfU1RBQklMSVRZX09QVF9JTik7XG4gICAgfVxuICAgIHNldENvbmZpZyhjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlci5zZXRDb25maWcoeyAuLi5ERUZBVUxUX0NPTkZJRywgLi4uY29uZmlnIH0pO1xuICAgIH1cbiAgICBfdXBkYXRlTWV0cmljSW5zdHJ1bWVudHMoKSB7XG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rpb25zVXNhZ2UgPSB0aGlzLm1ldGVyLmNyZWF0ZVVwRG93bkNvdW50ZXIoc2VtY29udl8xLk1FVFJJQ19EQl9DTElFTlRfQ09OTkVDVElPTlNfVVNBR0UsIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIG51bWJlciBvZiBjb25uZWN0aW9ucyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gc3RhdGUgZGVzY3JpYmVkIGJ5IHRoZSBzdGF0ZSBhdHRyaWJ1dGUuJyxcbiAgICAgICAgICAgIHVuaXQ6ICd7Y29ubmVjdGlvbn0nLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHVwZGF0aW5nIHRoZSBgZGIuY2xpZW50LmNvbm5lY3Rpb25zLnVzYWdlYCBtZXRyaWMuXG4gICAgICogVGhlIG5hbWUgXCJjb3VudFwiIGNvbWVzIGZyb20gdGhlIGV2ZW50dWFsIHJlcGxhY2VtZW50IGZvciB0aGlzIG1ldHJpYyBwZXJcbiAgICAgKiBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L25vbi1ub3JtYXRpdmUvZGItbWlncmF0aW9uLyNkYXRhYmFzZS1jbGllbnQtY29ubmVjdGlvbi1jb3VudFxuICAgICAqL1xuICAgIF9jb25uQ291bnRBZGQobiwgcG9vbE5hbWUsIHN0YXRlKSB7XG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rpb25zVXNhZ2U/LmFkZChuLCB7ICdwb29sLm5hbWUnOiBwb29sTmFtZSwgc3RhdGUgfSk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIGNvbnN0IHsgdjNQYXRjaENvbm5lY3Rpb246IHYzUGF0Y2hDb25uZWN0aW9uLCB2M1VucGF0Y2hDb25uZWN0aW9uOiB2M1VucGF0Y2hDb25uZWN0aW9uLCB9ID0gdGhpcy5fZ2V0VjNDb25uZWN0aW9uUGF0Y2hlcygpO1xuICAgICAgICBjb25zdCB7IHY0UGF0Y2hDb25uZWN0LCB2NFVucGF0Y2hDb25uZWN0IH0gPSB0aGlzLl9nZXRWNENvbm5lY3RQYXRjaGVzKCk7XG4gICAgICAgIGNvbnN0IHsgdjRQYXRjaENvbm5lY3Rpb25DYWxsYmFjaywgdjRQYXRjaENvbm5lY3Rpb25Qcm9taXNlLCB2NFVucGF0Y2hDb25uZWN0aW9uLCB9ID0gdGhpcy5fZ2V0VjRDb25uZWN0aW9uUGF0Y2hlcygpO1xuICAgICAgICBjb25zdCB7IHY0UGF0Y2hDb25uZWN0aW9uUG9vbCwgdjRVbnBhdGNoQ29ubmVjdGlvblBvb2wgfSA9IHRoaXMuX2dldFY0Q29ubmVjdGlvblBvb2xQYXRjaGVzKCk7XG4gICAgICAgIGNvbnN0IHsgdjRQYXRjaFNlc3Npb25zLCB2NFVucGF0Y2hTZXNzaW9ucyB9ID0gdGhpcy5fZ2V0VjRTZXNzaW9uc1BhdGNoZXMoKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbignbW9uZ29kYicsIFsnPj0zLjMuMCA8NCddLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgW1xuICAgICAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRmlsZSgnbW9uZ29kYi9saWIvY29yZS93aXJlcHJvdG9jb2wvaW5kZXguanMnLCBbJz49My4zLjAgPDQnXSwgdjNQYXRjaENvbm5lY3Rpb24sIHYzVW5wYXRjaENvbm5lY3Rpb24pLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ21vbmdvZGInLCBbJz49NC4wLjAgPDgnXSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFtcbiAgICAgICAgICAgICAgICBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUoJ21vbmdvZGIvbGliL2NtYXAvY29ubmVjdGlvbi5qcycsIFsnPj00LjAuMCA8Ni40J10sIHY0UGF0Y2hDb25uZWN0aW9uQ2FsbGJhY2ssIHY0VW5wYXRjaENvbm5lY3Rpb24pLFxuICAgICAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRmlsZSgnbW9uZ29kYi9saWIvY21hcC9jb25uZWN0aW9uLmpzJywgWyc+PTYuNC4wIDw4J10sIHY0UGF0Y2hDb25uZWN0aW9uUHJvbWlzZSwgdjRVbnBhdGNoQ29ubmVjdGlvbiksXG4gICAgICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKCdtb25nb2RiL2xpYi9jbWFwL2Nvbm5lY3Rpb25fcG9vbC5qcycsIFsnPj00LjAuMCA8Ni40J10sIHY0UGF0Y2hDb25uZWN0aW9uUG9vbCwgdjRVbnBhdGNoQ29ubmVjdGlvblBvb2wpLFxuICAgICAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRmlsZSgnbW9uZ29kYi9saWIvY21hcC9jb25uZWN0LmpzJywgWyc+PTQuMC4wIDw4J10sIHY0UGF0Y2hDb25uZWN0LCB2NFVucGF0Y2hDb25uZWN0KSxcbiAgICAgICAgICAgICAgICBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUoJ21vbmdvZGIvbGliL3Nlc3Npb25zLmpzJywgWyc+PTQuMC4wIDw4J10sIHY0UGF0Y2hTZXNzaW9ucywgdjRVbnBhdGNoU2Vzc2lvbnMpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIF9nZXRWM0Nvbm5lY3Rpb25QYXRjaGVzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdjNQYXRjaENvbm5lY3Rpb246IChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggaW5zZXJ0IG9wZXJhdGlvblxuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLmluc2VydCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdpbnNlcnQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLCAnaW5zZXJ0JywgdGhpcy5fZ2V0VjNQYXRjaE9wZXJhdGlvbignaW5zZXJ0JykpO1xuICAgICAgICAgICAgICAgIC8vIHBhdGNoIHJlbW92ZSBvcGVyYXRpb25cbiAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5yZW1vdmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAncmVtb3ZlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cywgJ3JlbW92ZScsIHRoaXMuX2dldFYzUGF0Y2hPcGVyYXRpb24oJ3JlbW92ZScpKTtcbiAgICAgICAgICAgICAgICAvLyBwYXRjaCB1cGRhdGUgb3BlcmF0aW9uXG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMudXBkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ3VwZGF0ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICd1cGRhdGUnLCB0aGlzLl9nZXRWM1BhdGNoT3BlcmF0aW9uKCd1cGRhdGUnKSk7XG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggb3RoZXIgY29tbWFuZFxuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLmNvbW1hbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAnY29tbWFuZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICdjb21tYW5kJywgdGhpcy5fZ2V0VjNQYXRjaENvbW1hbmQoKSk7XG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggcXVlcnlcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5xdWVyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdxdWVyeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICdxdWVyeScsIHRoaXMuX2dldFYzUGF0Y2hGaW5kKCkpO1xuICAgICAgICAgICAgICAgIC8vIHBhdGNoIGdldCBtb3JlIG9wZXJhdGlvbiBvbiBjdXJzb3JcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5nZXRNb3JlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2dldE1vcmUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLCAnZ2V0TW9yZScsIHRoaXMuX2dldFYzUGF0Y2hDdXJzb3IoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdjNVbnBhdGNoQ29ubmVjdGlvbjogKG1vZHVsZUV4cG9ydHMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlRXhwb3J0cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdpbnNlcnQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ3JlbW92ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAndXBkYXRlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdjb21tYW5kJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdxdWVyeScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAnZ2V0TW9yZScpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2dldFY0U2Vzc2lvbnNQYXRjaGVzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdjRQYXRjaFNlc3Npb25zOiAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLmFjcXVpcmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAnYWNxdWlyZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuU2VydmVyU2Vzc2lvblBvb2wucHJvdG90eXBlLCAnYWNxdWlyZScsIHRoaXMuX2dldFY0QWNxdWlyZUNvbW1hbmQoKSk7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMucmVsZWFzZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdyZWxlYXNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5TZXJ2ZXJTZXNzaW9uUG9vbC5wcm90b3R5cGUsICdyZWxlYXNlJywgdGhpcy5fZ2V0VjRSZWxlYXNlQ29tbWFuZCgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2NFVucGF0Y2hTZXNzaW9uczogKG1vZHVsZUV4cG9ydHMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlRXhwb3J0cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMuYWNxdWlyZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdhY3F1aXJlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLnJlbGVhc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAncmVsZWFzZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRWNEFjcXVpcmVDb21tYW5kKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hBY3F1aXJlKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5TZXNzaW9uc0JlZm9yZUFjcXVpcmUgPSB0aGlzLnNlc3Npb25zLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gb3JpZ2luYWwuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuU2Vzc2lvbnNBZnRlckFjcXVpcmUgPSB0aGlzLnNlc3Npb25zLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAoblNlc3Npb25zQmVmb3JlQWNxdWlyZSA9PT0gblNlc3Npb25zQWZ0ZXJBY3F1aXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vbm8gc2Vzc2lvbiBpbiB0aGUgcG9vbC4gYSBuZXcgc2Vzc2lvbiB3YXMgY3JlYXRlZCBhbmQgdXNlZFxuICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX2Nvbm5Db3VudEFkZCgxLCBpbnN0cnVtZW50YXRpb24uX3Bvb2xOYW1lLCAndXNlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuU2Vzc2lvbnNCZWZvcmVBY3F1aXJlIC0gMSA9PT0gblNlc3Npb25zQWZ0ZXJBY3F1aXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vYSBzZXNzaW9uIHdhcyBhbHJlYWR5IGluIHRoZSBwb29sLiByZW1vdmUgaXQgZnJvbSB0aGUgcG9vbCBhbmQgdXNlIGl0LlxuICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX2Nvbm5Db3VudEFkZCgtMSwgaW5zdHJ1bWVudGF0aW9uLl9wb29sTmFtZSwgJ2lkbGUnKTtcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9jb25uQ291bnRBZGQoMSwgaW5zdHJ1bWVudGF0aW9uLl9wb29sTmFtZSwgJ3VzZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlc3Npb247XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfZ2V0VjRSZWxlYXNlQ29tbWFuZCgpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoUmVsZWFzZShzZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY21kUHJvbWlzZSA9IG9yaWdpbmFsLmNhbGwodGhpcywgc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9jb25uQ291bnRBZGQoLTEsIGluc3RydW1lbnRhdGlvbi5fcG9vbE5hbWUsICd1c2VkJyk7XG4gICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9jb25uQ291bnRBZGQoMSwgaW5zdHJ1bWVudGF0aW9uLl9wb29sTmFtZSwgJ2lkbGUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY21kUHJvbWlzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRWNENvbm5lY3Rpb25Qb29sUGF0Y2hlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHY0UGF0Y2hDb25uZWN0aW9uUG9vbDogKG1vZHVsZUV4cG9ydHMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb29sUHJvdG90eXBlID0gbW9kdWxlRXhwb3J0cy5Db25uZWN0aW9uUG9vbC5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKHBvb2xQcm90b3R5cGUuY2hlY2tPdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChwb29sUHJvdG90eXBlLCAnY2hlY2tPdXQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChwb29sUHJvdG90eXBlLCAnY2hlY2tPdXQnLCB0aGlzLl9nZXRWNENvbm5lY3Rpb25Qb29sQ2hlY2tPdXQoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdjRVbnBhdGNoQ29ubmVjdGlvblBvb2w6IChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZUV4cG9ydHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb25Qb29sLnByb3RvdHlwZSwgJ2NoZWNrT3V0Jyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfZ2V0VjRDb25uZWN0UGF0Y2hlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHY0UGF0Y2hDb25uZWN0OiAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLmNvbm5lY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAnY29ubmVjdCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICdjb25uZWN0JywgdGhpcy5fZ2V0VjRDb25uZWN0Q29tbWFuZCgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2NFVucGF0Y2hDb25uZWN0OiAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtb2R1bGVFeHBvcnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2Nvbm5lY3QnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIFRoaXMgcGF0Y2ggd2lsbCBiZWNvbWUgdW5uZWNlc3Nhcnkgb25jZVxuICAgIC8vIGh0dHBzOi8vamlyYS5tb25nb2RiLm9yZy9icm93c2UvTk9ERS01NjM5IGlzIGRvbmUuXG4gICAgX2dldFY0Q29ubmVjdGlvblBvb2xDaGVja091dCgpIHtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRDaGVja291dChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoZWRDYWxsYmFjayA9IGFwaV8xLmNvbnRleHQuYmluZChhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgcGF0Y2hlZENhbGxiYWNrKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRWNENvbm5lY3RDb21tYW5kKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZENvbm5lY3Qob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAvLyBmcm9tIHY2LjQgYGNvbm5lY3RgIG1ldGhvZCBvbmx5IGFjY2VwdHMgYW4gb3B0aW9ucyBwYXJhbSBhbmQgcmV0dXJucyBhIHByb21pc2VcbiAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSBjb25uZWN0aW9uXG4gICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvcmlnaW5hbC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnRoZW4oKCkgPT4gaW5zdHJ1bWVudGF0aW9uLnNldFBvb2xOYW1lKG9wdGlvbnMpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaGFuZGxlciBpcyBzZXQgdG8gcGFzcyB0aGUgbGludCBydWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBFYXJsaWVyIHZlcnNpb25zIGV4cGVjdHMgYSBjYWxsYmFjayBwYXJhbSBhbmQgcmV0dXJuIHZvaWRcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRjaGVkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoZXJyLCBjb25uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgfHwgIWNvbm4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgY29ubik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLnNldFBvb2xOYW1lKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIGNvbm4pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgb3B0aW9ucywgcGF0Y2hlZENhbGxiYWNrKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBfZ2V0VjRDb25uZWN0aW9uUGF0Y2hlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHY0UGF0Y2hDb25uZWN0aW9uQ2FsbGJhY2s6IChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggaW5zZXJ0IG9wZXJhdGlvblxuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb24ucHJvdG90eXBlLmNvbW1hbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb24ucHJvdG90eXBlLCAnY29tbWFuZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuQ29ubmVjdGlvbi5wcm90b3R5cGUsICdjb21tYW5kJywgdGhpcy5fZ2V0VjRQYXRjaENvbW1hbmRDYWxsYmFjaygpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2NFBhdGNoQ29ubmVjdGlvblByb21pc2U6IChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggaW5zZXJ0IG9wZXJhdGlvblxuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb24ucHJvdG90eXBlLmNvbW1hbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb24ucHJvdG90eXBlLCAnY29tbWFuZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuQ29ubmVjdGlvbi5wcm90b3R5cGUsICdjb21tYW5kJywgdGhpcy5fZ2V0VjRQYXRjaENvbW1hbmRQcm9taXNlKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHY0VW5wYXRjaENvbm5lY3Rpb246IChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZUV4cG9ydHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb24ucHJvdG90eXBlLCAnY29tbWFuZCcpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqIENyZWF0ZXMgc3BhbnMgZm9yIGNvbW1vbiBvcGVyYXRpb25zICovXG4gICAgX2dldFYzUGF0Y2hPcGVyYXRpb24ob3BlcmF0aW9uTmFtZSkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZFNlcnZlckNvbW1hbmQoc2VydmVyLCBucywgb3BzLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFuID0gYXBpXzEudHJhY2UuZ2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lwSW5zdHJ1bWVudGF0aW9uID0gaW5zdHJ1bWVudGF0aW9uLl9jaGVja1NraXBJbnN0cnVtZW50YXRpb24oY3VycmVudFNwYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdEhhbmRsZXIgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMgOiBjYWxsYmFjaztcbiAgICAgICAgICAgICAgICBpZiAoc2tpcEluc3RydW1lbnRhdGlvbiB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVzdWx0SGFuZGxlciAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2Ygb3BzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIHNlcnZlciwgbnMsIG9wcywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBvcHMsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gaW5zdHJ1bWVudGF0aW9uLl9nZXRWM1NwYW5BdHRyaWJ1dGVzKG5zLCBzZXJ2ZXIsIFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgb3BzWzBdLCBvcGVyYXRpb25OYW1lKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuTmFtZSA9IGluc3RydW1lbnRhdGlvbi5fc3Bhbk5hbWVGcm9tQXR0cnMoYXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGluc3RydW1lbnRhdGlvbi50cmFjZXIuc3RhcnRTcGFuKHNwYW5OYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRjaGVkQ2FsbGJhY2sgPSBpbnN0cnVtZW50YXRpb24uX3BhdGNoRW5kKHNwYW4sIHJlc3VsdEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSB3aGVuIG9wdGlvbnMgaXMgdGhlIGNhbGxiYWNrIHRvIHNlbmQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGFyZ3NcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgc2VydmVyLCBucywgb3BzLCBwYXRjaGVkQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgc2VydmVyLCBucywgb3BzLCBvcHRpb25zLCBwYXRjaGVkQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKiBDcmVhdGVzIHNwYW5zIGZvciBjb21tYW5kIG9wZXJhdGlvbiAqL1xuICAgIF9nZXRWM1BhdGNoQ29tbWFuZCgpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRTZXJ2ZXJDb21tYW5kKHNlcnZlciwgbnMsIGNtZCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhbiA9IGFwaV8xLnRyYWNlLmdldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2tpcEluc3RydW1lbnRhdGlvbiA9IGluc3RydW1lbnRhdGlvbi5fY2hlY2tTa2lwSW5zdHJ1bWVudGF0aW9uKGN1cnJlbnRTcGFuKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRIYW5kbGVyID0gdHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zIDogY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBJbnN0cnVtZW50YXRpb24gfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJlc3VsdEhhbmRsZXIgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGNtZCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBjbWQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgc2VydmVyLCBucywgY21kLCBvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWFuZFR5cGUgPSBNb25nb0RCSW5zdHJ1bWVudGF0aW9uLl9nZXRDb21tYW5kVHlwZShjbWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbk5hbWUgPSBjb21tYW5kVHlwZSA9PT0gaW50ZXJuYWxfdHlwZXNfMS5Nb25nb2RiQ29tbWFuZFR5cGUuVU5LTk9XTiA/IHVuZGVmaW5lZCA6IGNvbW1hbmRUeXBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBpbnN0cnVtZW50YXRpb24uX2dldFYzU3BhbkF0dHJpYnV0ZXMobnMsIHNlcnZlciwgY21kLCBvcGVyYXRpb25OYW1lKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuTmFtZSA9IGluc3RydW1lbnRhdGlvbi5fc3Bhbk5hbWVGcm9tQXR0cnMoYXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGluc3RydW1lbnRhdGlvbi50cmFjZXIuc3RhcnRTcGFuKHNwYW5OYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRjaGVkQ2FsbGJhY2sgPSBpbnN0cnVtZW50YXRpb24uX3BhdGNoRW5kKHNwYW4sIHJlc3VsdEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSB3aGVuIG9wdGlvbnMgaXMgdGhlIGNhbGxiYWNrIHRvIHNlbmQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGFyZ3NcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgc2VydmVyLCBucywgY21kLCBwYXRjaGVkQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgc2VydmVyLCBucywgY21kLCBvcHRpb25zLCBwYXRjaGVkQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKiBDcmVhdGVzIHNwYW5zIGZvciBjb21tYW5kIG9wZXJhdGlvbiAqL1xuICAgIF9nZXRWNFBhdGNoQ29tbWFuZENhbGxiYWNrKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZFY0U2VydmVyQ29tbWFuZChucywgY21kLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFuID0gYXBpXzEudHJhY2UuZ2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lwSW5zdHJ1bWVudGF0aW9uID0gaW5zdHJ1bWVudGF0aW9uLl9jaGVja1NraXBJbnN0cnVtZW50YXRpb24oY3VycmVudFNwYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdEhhbmRsZXIgPSBjYWxsYmFjaztcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kVHlwZSA9IE9iamVjdC5rZXlzKGNtZClbMF07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjbWQgIT09ICdvYmplY3QnIHx8IGNtZC5pc21hc3RlciB8fCBjbWQuaGVsbG8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgbnMsIGNtZCwgb3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgc3BhbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoIXNraXBJbnN0cnVtZW50YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGluc3RydW1lbnRhdGlvbi5fZ2V0VjRTcGFuQXR0cmlidXRlcyh0aGlzLCBucywgY21kLCBjb21tYW5kVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwYW5OYW1lID0gaW5zdHJ1bWVudGF0aW9uLl9zcGFuTmFtZUZyb21BdHRycyhhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgc3BhbiA9IGluc3RydW1lbnRhdGlvbi50cmFjZXIuc3RhcnRTcGFuKHNwYW5OYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0Y2hlZENhbGxiYWNrID0gaW5zdHJ1bWVudGF0aW9uLl9wYXRjaEVuZChzcGFuLCByZXN1bHRIYW5kbGVyLCB0aGlzLmlkLCBjb21tYW5kVHlwZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgbnMsIGNtZCwgb3B0aW9ucywgcGF0Y2hlZENhbGxiYWNrKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRWNFBhdGNoQ29tbWFuZFByb21pc2UoKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBwYXRjaGVkVjRTZXJ2ZXJDb21tYW5kKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbbnMsIGNtZF0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFuID0gYXBpXzEudHJhY2UuZ2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lwSW5zdHJ1bWVudGF0aW9uID0gaW5zdHJ1bWVudGF0aW9uLl9jaGVja1NraXBJbnN0cnVtZW50YXRpb24oY3VycmVudFNwYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRUeXBlID0gT2JqZWN0LmtleXMoY21kKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRIYW5kbGVyID0gKCkgPT4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY21kICE9PSAnb2JqZWN0JyB8fCBjbWQuaXNtYXN0ZXIgfHwgY21kLmhlbGxvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHNwYW4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKCFza2lwSW5zdHJ1bWVudGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBpbnN0cnVtZW50YXRpb24uX2dldFY0U3BhbkF0dHJpYnV0ZXModGhpcywgbnMsIGNtZCwgY29tbWFuZFR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGFuTmFtZSA9IGluc3RydW1lbnRhdGlvbi5fc3Bhbk5hbWVGcm9tQXR0cnMoYXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4gPSBpbnN0cnVtZW50YXRpb24udHJhY2VyLnN0YXJ0U3BhbihzcGFuTmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAga2luZDogYXBpXzEuU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoZWRDYWxsYmFjayA9IGluc3RydW1lbnRhdGlvbi5fcGF0Y2hFbmQoc3BhbiwgcmVzdWx0SGFuZGxlciwgdGhpcy5pZCwgY29tbWFuZFR5cGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKChyZXMpID0+IHBhdGNoZWRDYWxsYmFjayhudWxsLCByZXMpLCAoZXJyKSA9PiBwYXRjaGVkQ2FsbGJhY2soZXJyKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKiBDcmVhdGVzIHNwYW5zIGZvciBmaW5kIG9wZXJhdGlvbiAqL1xuICAgIF9nZXRWM1BhdGNoRmluZCgpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRTZXJ2ZXJDb21tYW5kKHNlcnZlciwgbnMsIGNtZCwgY3Vyc29yU3RhdGUsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNwYW4gPSBhcGlfMS50cmFjZS5nZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNraXBJbnN0cnVtZW50YXRpb24gPSBpbnN0cnVtZW50YXRpb24uX2NoZWNrU2tpcEluc3RydW1lbnRhdGlvbihjdXJyZW50U3Bhbik7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0SGFuZGxlciA9IHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucyA6IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIGlmIChza2lwSW5zdHJ1bWVudGF0aW9uIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHRIYW5kbGVyICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBjbWQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgc2VydmVyLCBucywgY21kLCBjdXJzb3JTdGF0ZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBjbWQsIGN1cnNvclN0YXRlLCBvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGluc3RydW1lbnRhdGlvbi5fZ2V0VjNTcGFuQXR0cmlidXRlcyhucywgc2VydmVyLCBjbWQsICdmaW5kJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3Bhbk5hbWUgPSBpbnN0cnVtZW50YXRpb24uX3NwYW5OYW1lRnJvbUF0dHJzKGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBpbnN0cnVtZW50YXRpb24udHJhY2VyLnN0YXJ0U3BhbihzcGFuTmFtZSwge1xuICAgICAgICAgICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0Y2hlZENhbGxiYWNrID0gaW5zdHJ1bWVudGF0aW9uLl9wYXRjaEVuZChzcGFuLCByZXN1bHRIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgd2hlbiBvcHRpb25zIGlzIHRoZSBjYWxsYmFjayB0byBzZW5kIHRoZSBjb3JyZWN0IG51bWJlciBvZiBhcmdzXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIHNlcnZlciwgbnMsIGNtZCwgY3Vyc29yU3RhdGUsIHBhdGNoZWRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBjbWQsIGN1cnNvclN0YXRlLCBvcHRpb25zLCBwYXRjaGVkQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKiBDcmVhdGVzIHNwYW5zIGZvciBmaW5kIG9wZXJhdGlvbiAqL1xuICAgIF9nZXRWM1BhdGNoQ3Vyc29yKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZFNlcnZlckNvbW1hbmQoc2VydmVyLCBucywgY3Vyc29yU3RhdGUsIGJhdGNoU2l6ZSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhbiA9IGFwaV8xLnRyYWNlLmdldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2tpcEluc3RydW1lbnRhdGlvbiA9IGluc3RydW1lbnRhdGlvbi5fY2hlY2tTa2lwSW5zdHJ1bWVudGF0aW9uKGN1cnJlbnRTcGFuKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRIYW5kbGVyID0gdHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zIDogY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBJbnN0cnVtZW50YXRpb24gfHwgdHlwZW9mIHJlc3VsdEhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBjdXJzb3JTdGF0ZSwgYmF0Y2hTaXplLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIHNlcnZlciwgbnMsIGN1cnNvclN0YXRlLCBiYXRjaFNpemUsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gaW5zdHJ1bWVudGF0aW9uLl9nZXRWM1NwYW5BdHRyaWJ1dGVzKG5zLCBzZXJ2ZXIsIGN1cnNvclN0YXRlLmNtZCwgJ2dldE1vcmUnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuTmFtZSA9IGluc3RydW1lbnRhdGlvbi5fc3Bhbk5hbWVGcm9tQXR0cnMoYXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGluc3RydW1lbnRhdGlvbi50cmFjZXIuc3RhcnRTcGFuKHNwYW5OYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRjaGVkQ2FsbGJhY2sgPSBpbnN0cnVtZW50YXRpb24uX3BhdGNoRW5kKHNwYW4sIHJlc3VsdEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSB3aGVuIG9wdGlvbnMgaXMgdGhlIGNhbGxiYWNrIHRvIHNlbmQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGFyZ3NcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgc2VydmVyLCBucywgY3Vyc29yU3RhdGUsIGJhdGNoU2l6ZSwgcGF0Y2hlZENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIHNlcnZlciwgbnMsIGN1cnNvclN0YXRlLCBiYXRjaFNpemUsIG9wdGlvbnMsIHBhdGNoZWRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBtb25nb2RiIGNvbW1hbmQgdHlwZSBmcm9tIHRoZSBvYmplY3QuXG4gICAgICogQHBhcmFtIGNvbW1hbmQgSW50ZXJuYWwgbW9uZ29kYiBjb21tYW5kIG9iamVjdFxuICAgICAqL1xuICAgIHN0YXRpYyBfZ2V0Q29tbWFuZFR5cGUoY29tbWFuZCkge1xuICAgICAgICBpZiAoY29tbWFuZC5jcmVhdGVJbmRleGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF90eXBlc18xLk1vbmdvZGJDb21tYW5kVHlwZS5DUkVBVEVfSU5ERVhFUztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb21tYW5kLmZpbmRhbmRtb2RpZnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3R5cGVzXzEuTW9uZ29kYkNvbW1hbmRUeXBlLkZJTkRfQU5EX01PRElGWTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb21tYW5kLmlzbWFzdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF90eXBlc18xLk1vbmdvZGJDb21tYW5kVHlwZS5JU19NQVNURVI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29tbWFuZC5jb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfdHlwZXNfMS5Nb25nb2RiQ29tbWFuZFR5cGUuQ09VTlQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29tbWFuZC5hZ2dyZWdhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3R5cGVzXzEuTW9uZ29kYkNvbW1hbmRUeXBlLkFHR1JFR0FURTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF90eXBlc18xLk1vbmdvZGJDb21tYW5kVHlwZS5VTktOT1dOO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZSBhIHNwYW4ncyBhdHRyaWJ1dGVzIGJ5IGZldGNoaW5nIHJlbGF0ZWQgbWV0YWRhdGEgZnJvbSB0aGUgY29udGV4dFxuICAgICAqIEBwYXJhbSBjb25uZWN0aW9uQ3R4IG1vbmdvZGIgaW50ZXJuYWwgY29ubmVjdGlvbiBjb250ZXh0XG4gICAgICogQHBhcmFtIG5zIG1vbmdvZGIgbmFtZXNwYWNlXG4gICAgICogQHBhcmFtIGNvbW1hbmQgbW9uZ29kYiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhIGNvbW1hbmRcbiAgICAgKi9cbiAgICBfZ2V0VjRTcGFuQXR0cmlidXRlcyhjb25uZWN0aW9uQ3R4LCBucywgY29tbWFuZCwgb3BlcmF0aW9uKSB7XG4gICAgICAgIGxldCBob3N0LCBwb3J0O1xuICAgICAgICBpZiAoY29ubmVjdGlvbkN0eCkge1xuICAgICAgICAgICAgY29uc3QgaG9zdFBhcnRzID0gdHlwZW9mIGNvbm5lY3Rpb25DdHguYWRkcmVzcyA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICA/IGNvbm5lY3Rpb25DdHguYWRkcmVzcy5zcGxpdCgnOicpXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgIGlmIChob3N0UGFydHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgaG9zdCA9IGhvc3RQYXJ0c1swXTtcbiAgICAgICAgICAgICAgICBwb3J0ID0gaG9zdFBhcnRzWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNhcHR1cmUgcGFyYW1ldGVycyB3aXRoaW4gdGhlIHF1ZXJ5IGFzIHdlbGwgaWYgZW5oYW5jZWREYXRhYmFzZVJlcG9ydGluZyBpcyBlbmFibGVkLlxuICAgICAgICBsZXQgY29tbWFuZE9iajtcbiAgICAgICAgaWYgKGNvbW1hbmQ/LmRvY3VtZW50cyAmJiBjb21tYW5kLmRvY3VtZW50c1swXSkge1xuICAgICAgICAgICAgY29tbWFuZE9iaiA9IGNvbW1hbmQuZG9jdW1lbnRzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbW1hbmQ/LmN1cnNvcnMpIHtcbiAgICAgICAgICAgIGNvbW1hbmRPYmogPSBjb21tYW5kLmN1cnNvcnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb21tYW5kT2JqID0gY29tbWFuZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U3BhbkF0dHJpYnV0ZXMobnMuZGIsIG5zLmNvbGxlY3Rpb24sIGhvc3QsIHBvcnQsIGNvbW1hbmRPYmosIG9wZXJhdGlvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZSBhIHNwYW4ncyBhdHRyaWJ1dGVzIGJ5IGZldGNoaW5nIHJlbGF0ZWQgbWV0YWRhdGEgZnJvbSB0aGUgY29udGV4dFxuICAgICAqIEBwYXJhbSBucyBtb25nb2RiIG5hbWVzcGFjZVxuICAgICAqIEBwYXJhbSB0b3BvbG9neSBtb25nb2RiIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuZXR3b3JrIHRvcG9sb2d5XG4gICAgICogQHBhcmFtIGNvbW1hbmQgbW9uZ29kYiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhIGNvbW1hbmRcbiAgICAgKi9cbiAgICBfZ2V0VjNTcGFuQXR0cmlidXRlcyhucywgdG9wb2xvZ3ksIGNvbW1hbmQsIG9wZXJhdGlvbikge1xuICAgICAgICAvLyBFeHRyYWN0IGhvc3QvcG9ydCBpbmZvLlxuICAgICAgICBsZXQgaG9zdDtcbiAgICAgICAgbGV0IHBvcnQ7XG4gICAgICAgIGlmICh0b3BvbG9neSAmJiB0b3BvbG9neS5zKSB7XG4gICAgICAgICAgICBob3N0ID0gdG9wb2xvZ3kucy5vcHRpb25zPy5ob3N0ID8/IHRvcG9sb2d5LnMuaG9zdDtcbiAgICAgICAgICAgIHBvcnQgPSAodG9wb2xvZ3kucy5vcHRpb25zPy5wb3J0ID8/IHRvcG9sb2d5LnMucG9ydCk/LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAoaG9zdCA9PSBudWxsIHx8IHBvcnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSB0b3BvbG9neS5kZXNjcmlwdGlvbj8uYWRkcmVzcztcbiAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzU2VnbWVudHMgPSBhZGRyZXNzLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgICAgIGhvc3QgPSBhZGRyZXNzU2VnbWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHBvcnQgPSBhZGRyZXNzU2VnbWVudHNbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBuYW1lc3BhY2UgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgZGF0YWJhc2UgbmFtZSBhbmQgdGhlIG5hbWUgb2YgdGhlXG4gICAgICAgIC8vIGNvbGxlY3Rpb24gb3IgaW5kZXgsIGxpa2Ugc286IFtkYXRhYmFzZS1uYW1lXS5bY29sbGVjdGlvbi1vci1pbmRleC1uYW1lXS5cbiAgICAgICAgLy8gSXQgY291bGQgYmUgYSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgTW9uZ29EQk5hbWVzcGFjZSwgYXMgc3VjaCB3ZVxuICAgICAgICAvLyBhbHdheXMgY29lcmNlIHRvIGEgc3RyaW5nIHRvIGV4dHJhY3QgZGIgYW5kIGNvbGxlY3Rpb24uXG4gICAgICAgIGNvbnN0IFtkYk5hbWUsIGRiQ29sbGVjdGlvbl0gPSBucy50b1N0cmluZygpLnNwbGl0KCcuJyk7XG4gICAgICAgIC8vIGNhcHR1cmUgcGFyYW1ldGVycyB3aXRoaW4gdGhlIHF1ZXJ5IGFzIHdlbGwgaWYgZW5oYW5jZWREYXRhYmFzZVJlcG9ydGluZyBpcyBlbmFibGVkLlxuICAgICAgICBjb25zdCBjb21tYW5kT2JqID0gY29tbWFuZD8ucXVlcnkgPz8gY29tbWFuZD8ucSA/PyBjb21tYW5kO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U3BhbkF0dHJpYnV0ZXMoZGJOYW1lLCBkYkNvbGxlY3Rpb24sIGhvc3QsIHBvcnQsIGNvbW1hbmRPYmosIG9wZXJhdGlvbik7XG4gICAgfVxuICAgIF9nZXRTcGFuQXR0cmlidXRlcyhkYk5hbWUsIGRiQ29sbGVjdGlvbiwgaG9zdCwgcG9ydCwgY29tbWFuZE9iaiwgb3BlcmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgaWYgKHRoaXMuX2RiU2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuT0xEKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0RCX1NZU1RFTV0gPSBzZW1jb252XzEuREJfU1lTVEVNX1ZBTFVFX01PTkdPREI7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0RCX05BTUVdID0gZGJOYW1lO1xuICAgICAgICAgICAgYXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9EQl9NT05HT0RCX0NPTExFQ1RJT05dID0gZGJDb2xsZWN0aW9uO1xuICAgICAgICAgICAgYXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9EQl9PUEVSQVRJT05dID0gb3BlcmF0aW9uO1xuICAgICAgICAgICAgYXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9EQl9DT05ORUNUSU9OX1NUUklOR10gPVxuICAgICAgICAgICAgICAgIGBtb25nb2RiOi8vJHtob3N0fToke3BvcnR9LyR7ZGJOYW1lfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2RiU2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuU1RBQkxFKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9TWVNURU1fTkFNRV0gPSBzZW1jb252XzEuREJfU1lTVEVNX05BTUVfVkFMVUVfTU9OR09EQjtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0RCX05BTUVTUEFDRV0gPSBkYk5hbWU7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9PUEVSQVRJT05fTkFNRV0gPSBvcGVyYXRpb247XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9DT0xMRUNUSU9OX05BTUVdID0gZGJDb2xsZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3N0ICYmIHBvcnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9uZXRTZW1jb252U3RhYmlsaXR5ICYgaW5zdHJ1bWVudGF0aW9uXzEuU2VtY29udlN0YWJpbGl0eS5PTEQpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX05FVF9QRUVSX05BTUVdID0gaG9zdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9uZXRTZW1jb252U3RhYmlsaXR5ICYgaW5zdHJ1bWVudGF0aW9uXzEuU2VtY29udlN0YWJpbGl0eS5TVEFCTEUpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWRVJfQUREUkVTU10gPSBob3N0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcG9ydE51bWJlciA9IHBhcnNlSW50KHBvcnQsIDEwKTtcbiAgICAgICAgICAgIGlmICghaXNOYU4ocG9ydE51bWJlcikpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbmV0U2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuT0xEKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfTkVUX1BFRVJfUE9SVF0gPSBwb3J0TnVtYmVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbmV0U2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuU1RBQkxFKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9QT1JUXSA9IHBvcnROdW1iZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tYW5kT2JqKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRiU3RhdGVtZW50U2VyaWFsaXplcjogY29uZmlnRGJTdGF0ZW1lbnRTZXJpYWxpemVyIH0gPSB0aGlzLmdldENvbmZpZygpO1xuICAgICAgICAgICAgY29uc3QgZGJTdGF0ZW1lbnRTZXJpYWxpemVyID0gdHlwZW9mIGNvbmZpZ0RiU3RhdGVtZW50U2VyaWFsaXplciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgID8gY29uZmlnRGJTdGF0ZW1lbnRTZXJpYWxpemVyXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9kZWZhdWx0RGJTdGF0ZW1lbnRTZXJpYWxpemVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gZGJTdGF0ZW1lbnRTZXJpYWxpemVyKGNvbW1hbmRPYmopO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kYlNlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5Lk9MRCkge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0RCX1NUQVRFTUVOVF0gPSBxdWVyeTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RiU2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuU1RBQkxFKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0RCX1FVRVJZX1RFWFRdID0gcXVlcnk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpYWcuZXJyb3IoJ0Vycm9yIHJ1bm5pbmcgZGJTdGF0ZW1lbnRTZXJpYWxpemVyIGhvb2snLCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cbiAgICBfc3Bhbk5hbWVGcm9tQXR0cnMoYXR0cmlidXRlcykge1xuICAgICAgICBsZXQgc3Bhbk5hbWU7XG4gICAgICAgIGlmICh0aGlzLl9kYlNlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5LlNUQUJMRSkge1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9vcGVudGVsZW1ldHJ5LmlvL2RvY3Mvc3BlY3Mvc2VtY29udi9kYXRhYmFzZS9kYXRhYmFzZS1zcGFucy8jbmFtZVxuICAgICAgICAgICAgc3Bhbk5hbWUgPVxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfREJfT1BFUkFUSU9OX05BTUVdLFxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9DT0xMRUNUSU9OX05BTUVdLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihhdHRyID0+IGF0dHIpXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcgJykgfHwgc2VtY29udl8xLkRCX1NZU1RFTV9OQU1FX1ZBTFVFX01PTkdPREI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzcGFuTmFtZSA9IGBtb25nb2RiLiR7YXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9EQl9PUEVSQVRJT05dIHx8ICdjb21tYW5kJ31gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcGFuTmFtZTtcbiAgICB9XG4gICAgX2dldERlZmF1bHREYlN0YXRlbWVudFJlcGxhY2VyKCkge1xuICAgICAgICBjb25zdCBzZWVuID0gbmV3IFdlYWtTZXQoKTtcbiAgICAgICAgcmV0dXJuIChfa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgLy8gdW5kZWZpbmVkLCBib29sZWFuLCBudW1iZXIsIGJpZ2ludCwgc3RyaW5nLCBzeW1ib2wsIGZ1bmN0aW9uIHx8IG51bGxcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8ICF2YWx1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gJz8nO1xuICAgICAgICAgICAgLy8gb2JqZWN0cyAoaW5jbHVkaW5nIGFycmF5cylcbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICAgICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2RlZmF1bHREYlN0YXRlbWVudFNlcmlhbGl6ZXIoY29tbWFuZE9iaikge1xuICAgICAgICBjb25zdCB7IGVuaGFuY2VkRGF0YWJhc2VSZXBvcnRpbmcgfSA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmIChlbmhhbmNlZERhdGFiYXNlUmVwb3J0aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY29tbWFuZE9iaik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGNvbW1hbmRPYmosIHRoaXMuX2dldERlZmF1bHREYlN0YXRlbWVudFJlcGxhY2VyKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyB0aGUgcmVzcG9uc2UgaG9vayBpbiBjYXNlIGl0IGlzIGRlZmluZWQuXG4gICAgICogQHBhcmFtIHNwYW4gVGhlIHNwYW4gdG8gYWRkIHRoZSByZXN1bHRzIHRvLlxuICAgICAqIEBwYXJhbSByZXN1bHQgVGhlIGNvbW1hbmQgcmVzdWx0XG4gICAgICovXG4gICAgX2hhbmRsZUV4ZWN1dGlvblJlc3VsdChzcGFuLCByZXN1bHQpIHtcbiAgICAgICAgY29uc3QgeyByZXNwb25zZUhvb2sgfSA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2VIb29rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlSG9vayhzcGFuLCB7IGRhdGE6IHJlc3VsdCB9KTtcbiAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaWFnLmVycm9yKCdFcnJvciBydW5uaW5nIHJlc3BvbnNlIGhvb2snLCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuZHMgYSBjcmVhdGVkIHNwYW4uXG4gICAgICogQHBhcmFtIHNwYW4gVGhlIGNyZWF0ZWQgc3BhbiB0byBlbmQuXG4gICAgICogQHBhcmFtIHJlc3VsdEhhbmRsZXIgQSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0gY29ubmVjdGlvbklkOiBUaGUgY29ubmVjdGlvbiBJRCBvZiB0aGUgQ29tbWFuZCByZXNwb25zZS5cbiAgICAgKi9cbiAgICBfcGF0Y2hFbmQoc3BhbiwgcmVzdWx0SGFuZGxlciwgY29ubmVjdGlvbklkLCBjb21tYW5kVHlwZSkge1xuICAgICAgICAvLyBtb25nb2RiIGlzIHVzaW5nIFwidGlja1wiIHdoZW4gY2FsbGluZyBhIGNhbGxiYWNrLCB0aGlzIHdheSB0aGUgY29udGV4dFxuICAgICAgICAvLyBpbiBmaW5hbCBjYWxsYmFjayAocmVzdWx0SGFuZGxlcikgaXMgbG9zdFxuICAgICAgICBjb25zdCBhY3RpdmVDb250ZXh0ID0gYXBpXzEuY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgbGV0IHNwYW5FbmRlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZEVuZCguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoIXNwYW5FbmRlZCkge1xuICAgICAgICAgICAgICAgIHNwYW5FbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIGlmIChzcGFuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogYXBpXzEuU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXJnc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5faGFuZGxlRXhlY3V0aW9uUmVzdWx0KHNwYW4sIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRUeXBlID09PSAnZW5kU2Vzc2lvbnMnKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fY29ubkNvdW50QWRkKC0xLCBpbnN0cnVtZW50YXRpb24uX3Bvb2xOYW1lLCAnaWRsZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcGlfMS5jb250ZXh0LndpdGgoYWN0aXZlQ29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRIYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHNldFBvb2xOYW1lKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgaG9zdCA9IG9wdGlvbnMuaG9zdEFkZHJlc3M/Lmhvc3Q7XG4gICAgICAgIGNvbnN0IHBvcnQgPSBvcHRpb25zLmhvc3RBZGRyZXNzPy5wb3J0O1xuICAgICAgICBjb25zdCBkYXRhYmFzZSA9IG9wdGlvbnMuZGJOYW1lO1xuICAgICAgICBjb25zdCBwb29sTmFtZSA9IGBtb25nb2RiOi8vJHtob3N0fToke3BvcnR9LyR7ZGF0YWJhc2V9YDtcbiAgICAgICAgdGhpcy5fcG9vbE5hbWUgPSBwb29sTmFtZTtcbiAgICB9XG4gICAgX2NoZWNrU2tpcEluc3RydW1lbnRhdGlvbihjdXJyZW50U3Bhbikge1xuICAgICAgICBjb25zdCByZXF1aXJlUGFyZW50U3BhbiA9IHRoaXMuZ2V0Q29uZmlnKCkucmVxdWlyZVBhcmVudFNwYW47XG4gICAgICAgIGNvbnN0IGhhc05vUGFyZW50U3BhbiA9IGN1cnJlbnRTcGFuID09PSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiByZXF1aXJlUGFyZW50U3BhbiA9PT0gdHJ1ZSAmJiBoYXNOb1BhcmVudFNwYW47XG4gICAgfVxufVxuZXhwb3J0cy5Nb25nb0RCSW5zdHJ1bWVudGF0aW9uID0gTW9uZ29EQkluc3RydW1lbnRhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3RydW1lbnRhdGlvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/instrumentation.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/internal-types.js":
/*!***********************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/internal-types.js ***!
\***********************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.MongodbCommandType = void 0;\nvar MongodbCommandType;\n(function (MongodbCommandType) {\n MongodbCommandType[\"CREATE_INDEXES\"] = \"createIndexes\";\n MongodbCommandType[\"FIND_AND_MODIFY\"] = \"findAndModify\";\n MongodbCommandType[\"IS_MASTER\"] = \"isMaster\";\n MongodbCommandType[\"COUNT\"] = \"count\";\n MongodbCommandType[\"AGGREGATE\"] = \"aggregate\";\n MongodbCommandType[\"UNKNOWN\"] = \"unknown\";\n})(MongodbCommandType = exports.MongodbCommandType || (exports.MongodbCommandType = {}));\n//# sourceMappingURL=internal-types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvZGJAMC42Ny4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMS9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL2ludGVybmFsLXR5cGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxzREFBc0QsMEJBQTBCLEtBQUs7QUFDdEYiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvZGJAMC42Ny4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMS9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL2ludGVybmFsLXR5cGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTW9uZ29kYkNvbW1hbmRUeXBlID0gdm9pZCAwO1xudmFyIE1vbmdvZGJDb21tYW5kVHlwZTtcbihmdW5jdGlvbiAoTW9uZ29kYkNvbW1hbmRUeXBlKSB7XG4gICAgTW9uZ29kYkNvbW1hbmRUeXBlW1wiQ1JFQVRFX0lOREVYRVNcIl0gPSBcImNyZWF0ZUluZGV4ZXNcIjtcbiAgICBNb25nb2RiQ29tbWFuZFR5cGVbXCJGSU5EX0FORF9NT0RJRllcIl0gPSBcImZpbmRBbmRNb2RpZnlcIjtcbiAgICBNb25nb2RiQ29tbWFuZFR5cGVbXCJJU19NQVNURVJcIl0gPSBcImlzTWFzdGVyXCI7XG4gICAgTW9uZ29kYkNvbW1hbmRUeXBlW1wiQ09VTlRcIl0gPSBcImNvdW50XCI7XG4gICAgTW9uZ29kYkNvbW1hbmRUeXBlW1wiQUdHUkVHQVRFXCJdID0gXCJhZ2dyZWdhdGVcIjtcbiAgICBNb25nb2RiQ29tbWFuZFR5cGVbXCJVTktOT1dOXCJdID0gXCJ1bmtub3duXCI7XG59KShNb25nb2RiQ29tbWFuZFR5cGUgPSBleHBvcnRzLk1vbmdvZGJDb21tYW5kVHlwZSB8fCAoZXhwb3J0cy5Nb25nb2RiQ29tbWFuZFR5cGUgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJuYWwtdHlwZXMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/internal-types.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/semconv.js":
/*!****************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/semconv.js ***!
\****************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.METRIC_DB_CLIENT_CONNECTIONS_USAGE = exports.DB_SYSTEM_VALUE_MONGODB = exports.DB_SYSTEM_NAME_VALUE_MONGODB = exports.ATTR_NET_PEER_PORT = exports.ATTR_NET_PEER_NAME = exports.ATTR_DB_SYSTEM = exports.ATTR_DB_STATEMENT = exports.ATTR_DB_OPERATION = exports.ATTR_DB_NAME = exports.ATTR_DB_MONGODB_COLLECTION = exports.ATTR_DB_CONNECTION_STRING = void 0;\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by this package.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n/**\n * Deprecated, use `server.address`, `server.port` attributes instead.\n *\n * @example \"Server=(localdb)\\\\v11.0;Integrated Security=true;\"\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `server.address` and `server.port`.\n */\nexports.ATTR_DB_CONNECTION_STRING = 'db.connection_string';\n/**\n * Deprecated, use `db.collection.name` instead.\n *\n * @example \"mytable\"\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.collection.name`.\n */\nexports.ATTR_DB_MONGODB_COLLECTION = 'db.mongodb.collection';\n/**\n * Deprecated, use `db.namespace` instead.\n *\n * @example customers\n * @example main\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.namespace`.\n */\nexports.ATTR_DB_NAME = 'db.name';\n/**\n * Deprecated, use `db.operation.name` instead.\n *\n * @example findAndModify\n * @example HMSET\n * @example SELECT\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.operation.name`.\n */\nexports.ATTR_DB_OPERATION = 'db.operation';\n/**\n * The database statement being executed.\n *\n * @example SELECT * FROM wuser_table\n * @example SET mykey \"WuValue\"\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.query.text`.\n */\nexports.ATTR_DB_STATEMENT = 'db.statement';\n/**\n * Deprecated, use `db.system.name` instead.\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.system.name`.\n */\nexports.ATTR_DB_SYSTEM = 'db.system';\n/**\n * Deprecated, use `server.address` on client spans and `client.address` on server spans.\n *\n * @example example.com\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `server.address` on client spans and `client.address` on server spans.\n */\nexports.ATTR_NET_PEER_NAME = 'net.peer.name';\n/**\n * Deprecated, use `server.port` on client spans and `client.port` on server spans.\n *\n * @example 8080\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `server.port` on client spans and `client.port` on server spans.\n */\nexports.ATTR_NET_PEER_PORT = 'net.peer.port';\n/**\n * Enum value \"mongodb\" for attribute {@link ATTR_DB_SYSTEM_NAME}.\n *\n * [MongoDB](https://www.mongodb.com/)\n *\n * @experimental This enum value is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexports.DB_SYSTEM_NAME_VALUE_MONGODB = 'mongodb';\n/**\n * Enum value \"mongodb\" for attribute {@link ATTR_DB_SYSTEM}.\n *\n * MongoDB\n *\n * @experimental This enum value is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexports.DB_SYSTEM_VALUE_MONGODB = 'mongodb';\n/**\n * Deprecated, use `db.client.connection.count` instead.\n *\n * @experimental This metric is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.client.connection.count`.\n */\nexports.METRIC_DB_CLIENT_CONNECTIONS_USAGE = 'db.client.connections.usage';\n//# sourceMappingURL=semconv.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvZGJAMC42Ny4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMS9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL3NlbWNvbnYuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsMENBQTBDLEdBQUcsK0JBQStCLEdBQUcsb0NBQW9DLEdBQUcsMEJBQTBCLEdBQUcsMEJBQTBCLEdBQUcsc0JBQXNCLEdBQUcseUJBQXlCLEdBQUcseUJBQXlCLEdBQUcsb0JBQW9CLEdBQUcsa0NBQWtDLEdBQUcsaUNBQWlDO0FBQzlWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMseUJBQXlCO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBLHVDQUF1QywwQkFBMEI7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBLHVDQUF1QyxxQkFBcUI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tbW9uZ29kYkAwLjY3LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbW9uZ29kYi9idWlsZC9zcmMvc2VtY29udi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1FVFJJQ19EQl9DTElFTlRfQ09OTkVDVElPTlNfVVNBR0UgPSBleHBvcnRzLkRCX1NZU1RFTV9WQUxVRV9NT05HT0RCID0gZXhwb3J0cy5EQl9TWVNURU1fTkFNRV9WQUxVRV9NT05HT0RCID0gZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSBleHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9IGV4cG9ydHMuQVRUUl9EQl9TWVNURU0gPSBleHBvcnRzLkFUVFJfREJfU1RBVEVNRU5UID0gZXhwb3J0cy5BVFRSX0RCX09QRVJBVElPTiA9IGV4cG9ydHMuQVRUUl9EQl9OQU1FID0gZXhwb3J0cy5BVFRSX0RCX01PTkdPREJfQ09MTEVDVElPTiA9IGV4cG9ydHMuQVRUUl9EQl9DT05ORUNUSU9OX1NUUklORyA9IHZvaWQgMDtcbi8qXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBjb3B5IG9mIHVuc3RhYmxlIHNlbWFudGljIGNvbnZlbnRpb24gZGVmaW5pdGlvbnNcbiAqIHVzZWQgYnkgdGhpcyBwYWNrYWdlLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy90cmVlL21haW4vc2VtYW50aWMtY29udmVudGlvbnMjdW5zdGFibGUtc2VtY29udlxuICovXG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgc2VydmVyLmFkZHJlc3NgLCBgc2VydmVyLnBvcnRgIGF0dHJpYnV0ZXMgaW5zdGVhZC5cbiAqXG4gKiBAZXhhbXBsZSBcIlNlcnZlcj0obG9jYWxkYilcXFxcdjExLjA7SW50ZWdyYXRlZCBTZWN1cml0eT10cnVlO1wiXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIuYWRkcmVzc2AgYW5kIGBzZXJ2ZXIucG9ydGAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9DT05ORUNUSU9OX1NUUklORyA9ICdkYi5jb25uZWN0aW9uX3N0cmluZyc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgZGIuY29sbGVjdGlvbi5uYW1lYCBpbnN0ZWFkLlxuICpcbiAqIEBleGFtcGxlIFwibXl0YWJsZVwiXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBkYi5jb2xsZWN0aW9uLm5hbWVgLlxuICovXG5leHBvcnRzLkFUVFJfREJfTU9OR09EQl9DT0xMRUNUSU9OID0gJ2RiLm1vbmdvZGIuY29sbGVjdGlvbic7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgZGIubmFtZXNwYWNlYCBpbnN0ZWFkLlxuICpcbiAqIEBleGFtcGxlIGN1c3RvbWVyc1xuICogQGV4YW1wbGUgbWFpblxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIubmFtZXNwYWNlYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX05BTUUgPSAnZGIubmFtZSc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgZGIub3BlcmF0aW9uLm5hbWVgIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgZmluZEFuZE1vZGlmeVxuICogQGV4YW1wbGUgSE1TRVRcbiAqIEBleGFtcGxlIFNFTEVDVFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIub3BlcmF0aW9uLm5hbWVgLlxuICovXG5leHBvcnRzLkFUVFJfREJfT1BFUkFUSU9OID0gJ2RiLm9wZXJhdGlvbic7XG4vKipcbiAqIFRoZSBkYXRhYmFzZSBzdGF0ZW1lbnQgYmVpbmcgZXhlY3V0ZWQuXG4gKlxuICogQGV4YW1wbGUgU0VMRUNUICogRlJPTSB3dXNlcl90YWJsZVxuICogQGV4YW1wbGUgU0VUIG15a2V5IFwiV3VWYWx1ZVwiXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBkYi5xdWVyeS50ZXh0YC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX1NUQVRFTUVOVCA9ICdkYi5zdGF0ZW1lbnQnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGRiLnN5c3RlbS5uYW1lYCBpbnN0ZWFkLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIuc3lzdGVtLm5hbWVgLlxuICovXG5leHBvcnRzLkFUVFJfREJfU1lTVEVNID0gJ2RiLnN5c3RlbSc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgc2VydmVyLmFkZHJlc3NgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5hZGRyZXNzYCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKlxuICogQGV4YW1wbGUgZXhhbXBsZS5jb21cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYHNlcnZlci5hZGRyZXNzYCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQuYWRkcmVzc2Agb24gc2VydmVyIHNwYW5zLlxuICovXG5leHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9ICduZXQucGVlci5uYW1lJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBzZXJ2ZXIucG9ydGAgb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LnBvcnRgIG9uIHNlcnZlciBzcGFucy5cbiAqXG4gKiBAZXhhbXBsZSA4MDgwXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIucG9ydGAgb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LnBvcnRgIG9uIHNlcnZlciBzcGFucy5cbiAqL1xuZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSAnbmV0LnBlZXIucG9ydCc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJtb25nb2RiXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9EQl9TWVNURU1fTkFNRX0uXG4gKlxuICogW01vbmdvREJdKGh0dHBzOi8vd3d3Lm1vbmdvZGIuY29tLylcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgZW51bSB2YWx1ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkRCX1NZU1RFTV9OQU1FX1ZBTFVFX01PTkdPREIgPSAnbW9uZ29kYic7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJtb25nb2RiXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9EQl9TWVNURU19LlxuICpcbiAqIE1vbmdvREJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgZW51bSB2YWx1ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkRCX1NZU1RFTV9WQUxVRV9NT05HT0RCID0gJ21vbmdvZGInO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGRiLmNsaWVudC5jb25uZWN0aW9uLmNvdW50YCBpbnN0ZWFkLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtZXRyaWMgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIuY2xpZW50LmNvbm5lY3Rpb24uY291bnRgLlxuICovXG5leHBvcnRzLk1FVFJJQ19EQl9DTElFTlRfQ09OTkVDVElPTlNfVVNBR0UgPSAnZGIuY2xpZW50LmNvbm5lY3Rpb25zLnVzYWdlJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWNvbnYuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/semconv.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/types.js":
/*!**************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/types.js ***!
\**************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.MongodbCommandType = void 0;\nvar MongodbCommandType;\n(function (MongodbCommandType) {\n MongodbCommandType[\"CREATE_INDEXES\"] = \"createIndexes\";\n MongodbCommandType[\"FIND_AND_MODIFY\"] = \"findAndModify\";\n MongodbCommandType[\"IS_MASTER\"] = \"isMaster\";\n MongodbCommandType[\"COUNT\"] = \"count\";\n MongodbCommandType[\"UNKNOWN\"] = \"unknown\";\n})(MongodbCommandType = exports.MongodbCommandType || (exports.MongodbCommandType = {}));\n//# sourceMappingURL=types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvZGJAMC42Ny4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMS9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL3R5cGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsc0RBQXNELDBCQUEwQixLQUFLO0FBQ3RGIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1tb25nb2RiQDAuNjcuMF9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjEvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1tb25nb2RiL2J1aWxkL3NyYy90eXBlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1vbmdvZGJDb21tYW5kVHlwZSA9IHZvaWQgMDtcbnZhciBNb25nb2RiQ29tbWFuZFR5cGU7XG4oZnVuY3Rpb24gKE1vbmdvZGJDb21tYW5kVHlwZSkge1xuICAgIE1vbmdvZGJDb21tYW5kVHlwZVtcIkNSRUFURV9JTkRFWEVTXCJdID0gXCJjcmVhdGVJbmRleGVzXCI7XG4gICAgTW9uZ29kYkNvbW1hbmRUeXBlW1wiRklORF9BTkRfTU9ESUZZXCJdID0gXCJmaW5kQW5kTW9kaWZ5XCI7XG4gICAgTW9uZ29kYkNvbW1hbmRUeXBlW1wiSVNfTUFTVEVSXCJdID0gXCJpc01hc3RlclwiO1xuICAgIE1vbmdvZGJDb21tYW5kVHlwZVtcIkNPVU5UXCJdID0gXCJjb3VudFwiO1xuICAgIE1vbmdvZGJDb21tYW5kVHlwZVtcIlVOS05PV05cIl0gPSBcInVua25vd25cIjtcbn0pKE1vbmdvZGJDb21tYW5kVHlwZSA9IGV4cG9ydHMuTW9uZ29kYkNvbW1hbmRUeXBlIHx8IChleHBvcnRzLk1vbmdvZGJDb21tYW5kVHlwZSA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/types.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/version.js":
/*!****************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/version.js ***!
\****************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.PACKAGE_NAME = exports.PACKAGE_VERSION = void 0;\n// this is autogenerated file, see scripts/version-update.js\nexports.PACKAGE_VERSION = '0.67.0';\nexports.PACKAGE_NAME = '@opentelemetry/instrumentation-mongodb';\n//# sourceMappingURL=version.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvZGJAMC42Ny4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMS9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Qsb0JBQW9CLEdBQUcsdUJBQXVCO0FBQzlDO0FBQ0EsdUJBQXVCO0FBQ3ZCLG9CQUFvQjtBQUNwQiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tbW9uZ29kYkAwLjY3LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbW9uZ29kYi9idWlsZC9zcmMvdmVyc2lvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9IGV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gdm9pZCAwO1xuLy8gdGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUsIHNlZSBzY3JpcHRzL3ZlcnNpb24tdXBkYXRlLmpzXG5leHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9ICcwLjY3LjAnO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGInO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/.pnpm/@opentelemetry+instrumentation-mongodb@0.67.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/instrumentation-mongodb/build/src/version.js\n");
/***/ })
};
;