@dbx-tools/appkit-mastra 0.9.65 → 0.9.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -3
- package/exports.ts +7 -0
- package/index.ts +8 -4
- package/lib/exports.d.ts +1 -0
- package/lib/exports.js +2 -0
- package/lib/index.d.ts +8 -4
- package/lib/index.js +7 -3
- package/lib/src/genie.js +3 -2
- package/lib/src/mlflow.d.ts +68 -5
- package/lib/src/mlflow.js +310 -8
- package/lib/src/model.js +4 -1
- package/lib/src/observability.d.ts +2 -1
- package/lib/src/observability.js +18 -6
- package/lib/src/plugin.js +10 -2
- package/lib/src/server.js +12 -1
- package/lib/src/telemetry.d.ts +17 -16
- package/lib/src/telemetry.js +177 -23
- package/lib/src/trace-attributes.d.ts +26 -0
- package/lib/src/trace-attributes.js +27 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +30 -16
- package/src/genie.ts +2 -1
- package/src/mlflow.ts +356 -7
- package/src/model.ts +3 -0
- package/src/observability.ts +22 -5
- package/src/plugin.ts +8 -0
- package/src/server.ts +13 -0
- package/src/telemetry.ts +238 -23
- package/src/trace-attributes.ts +38 -0
package/lib/src/model.js
CHANGED
|
@@ -28,6 +28,7 @@ import { functionUtils, json, log, net } from "@dbx-tools/shared-core";
|
|
|
28
28
|
import { MASTRA_USER_KEY } from "./config.js";
|
|
29
29
|
import { rewriteServingRequest, rewriteServingResponseBody, rewriteServingResponseStream, } from "./serving-sanitize.js";
|
|
30
30
|
import { MASTRA_MODEL_OVERRIDE_KEY, resolveServingConfig } from "./serving.js";
|
|
31
|
+
import { recordActiveTraceAuth, recordActiveTraceModel } from "./telemetry.js";
|
|
31
32
|
const { parseModelClass } = classes;
|
|
32
33
|
const { selectModel } = resolve;
|
|
33
34
|
/** Keep Responses turns stateless so tool continuations replay encrypted reasoning inline. */
|
|
@@ -87,6 +88,7 @@ export async function buildModel(config, requestContext, overrides = {}) {
|
|
|
87
88
|
// (the active OBO scope, or the service principal) when it's absent.
|
|
88
89
|
const user = requestContext.get(MASTRA_USER_KEY);
|
|
89
90
|
const executionContext = user?.executionContext ?? getExecutionContext();
|
|
91
|
+
recordActiveTraceAuth("isUserContext" in executionContext ? "obo" : "service-principal");
|
|
90
92
|
const clientConfig = executionContext.client.config;
|
|
91
93
|
const host = (await clientConfig.getHost()).toString();
|
|
92
94
|
const headers = new Headers();
|
|
@@ -110,6 +112,7 @@ export async function buildModel(config, requestContext, overrides = {}) {
|
|
|
110
112
|
const requested = override ?? overrides.modelId ?? process.env.DATABRICKS_SERVING_ENDPOINT_NAME;
|
|
111
113
|
const { modelId, source } = await selectModel(executionContext.client, host, selectionInput(config, requested, overrides.modelClass, serving));
|
|
112
114
|
logger.debug("model selected", { modelId, source, requested });
|
|
115
|
+
recordActiveTraceModel(modelId);
|
|
113
116
|
return {
|
|
114
117
|
providerId: config.providerId ?? "databricks",
|
|
115
118
|
modelId,
|
|
@@ -195,4 +198,4 @@ function rebuildServingResponse(response, body) {
|
|
|
195
198
|
headers,
|
|
196
199
|
});
|
|
197
200
|
}
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBRUgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUt2RSxPQUFPLEVBQUUsZUFBZSxFQUFzQyxNQUFNLGFBQWEsQ0FBQztBQUNsRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQiw0QkFBNEIsR0FDN0IsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUseUJBQXlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHL0UsTUFBTSxFQUFFLGVBQWUsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNwQyxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO0FBRWhDLDhGQUE4RjtBQUM5RixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRztJQUN4QyxNQUFNLEVBQUU7UUFDTixLQUFLLEVBQUUsS0FBSztLQUNiO0NBQ08sQ0FBQztBQUVYLGlGQUFpRjtBQUNqRixNQUFNLFVBQVUsVUFBVSxDQUFDLE9BQWU7SUFDeEMsT0FBTyxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFxQkQsU0FBUyxjQUFjLENBQ3JCLE1BQTBCLEVBQzFCLFNBQTZCLEVBQzdCLFlBQW9DLEVBQ3BDLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7SUFFdEMsTUFBTSxjQUFjLEdBQUcsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbkYsTUFBTSxRQUFRLEdBQUcsY0FBYyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDakUsTUFBTSxVQUFVLEdBQUcsY0FBYyxJQUFJLFlBQVksQ0FBQztJQUNsRCxPQUFPO1FBQ0wsR0FBRyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7UUFDcEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1FBQzVCLEdBQUcsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFO1FBQ3BDLFFBQVEsRUFBRSxTQUFTLEtBQUssU0FBUztRQUNqQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7S0FDckIsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLE1BQTBCLEVBQzFCLFNBQTRDLEVBQzVDLFlBQWlDLEVBQUU7SUFFbkMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDO0lBQ3BGLE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzVGLE9BQU8sQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVUsQ0FDOUIsTUFBMEIsRUFDMUIsY0FBOEIsRUFDOUIsWUFBaUMsRUFBRTtJQUVuQyxLQUFLLHFCQUFxQixFQUFFLENBQUM7SUFDN0Isa0VBQWtFO0lBQ2xFLHFFQUFxRTtJQUNyRSxxRUFBcUU7SUFDckUscUVBQXFFO0lBQ3JFLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFxQixDQUFDO0lBQ3JFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxFQUFFLGdCQUFnQixJQUFJLG1CQUFtQixFQUFFLENBQUM7SUFDekUsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNwRCxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUM5QixNQUFNLFlBQVksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekMseUVBQXlFO0lBQ3pFLHFFQUFxRTtJQUNyRSx1REFBdUQ7SUFDdkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUU5RSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxhQUFhO1FBQ3BDLENBQUMsQ0FBRSxjQUFjLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUF3QjtRQUN2RSxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRWQsb0VBQW9FO0lBQ3BFLHlEQUF5RDtJQUN6RCxzRUFBc0U7SUFDdEUsc0VBQXNFO0lBQ3RFLG1FQUFtRTtJQUNuRSxrRUFBa0U7SUFDbEUsb0NBQW9DO0lBQ3BDLE1BQU0sU0FBUyxHQUFHLFFBQVEsSUFBSSxTQUFTLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUM7SUFFaEcsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLFdBQVcsQ0FDM0MsZ0JBQWdCLENBQUMsTUFBTSxFQUN2QixJQUFJLEVBQ0osY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FDakUsQ0FBQztJQUNGLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFFL0QsT0FBTztRQUNMLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxJQUFJLFlBQVk7UUFDN0MsT0FBTztRQUNQLEdBQUc7UUFDSCxPQUFPLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUM7S0FDekIsQ0FBQztBQUNKLENBQUM7QUFFRCxzRkFBc0Y7QUFDdEYsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBRWpFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLHFCQUFxQixHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBUyxFQUFFO0lBQzdELFVBQVUsQ0FBQyxLQUFLLEdBQUcsNkJBQTZCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUN0RixDQUFDLENBQUMsQ0FBQztBQUVILHNGQUFzRjtBQUN0RixNQUFNLFVBQVUsNkJBQTZCLENBQUMsUUFBc0I7SUFDbEUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUM1QixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksRUFBRSxNQUFNLElBQUksQ0FBQyxLQUFLLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUsscUJBQXFCLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3RGLE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBVSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsTUFBTSxDQUFDLEtBQUssQ0FDVixNQUFNLEVBQ04sTUFBTSxLQUFLLFNBQVM7WUFDbEIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFO1lBQy9DLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUMxQyxDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsTUFBTSxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakUsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQTRCLENBQUM7QUFDaEMsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsS0FBSyxVQUFVLHFCQUFxQixDQUFDLFFBQWtCO0lBQ3JELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvRCxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0QsT0FBTyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsNEJBQTRCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUNELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFFL0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0MsTUFBTSxTQUFTLEdBQUcsMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsSUFBSSxTQUFTLEtBQUssSUFBSTtRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQ3hDLE9BQU8sc0JBQXNCLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxpRkFBaUY7QUFDakYsU0FBUyxzQkFBc0IsQ0FDN0IsUUFBa0IsRUFDbEIsSUFBeUM7SUFFekMsNkVBQTZFO0lBQzdFLDZFQUE2RTtJQUM3RSxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2pDLE9BQU8sQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNuQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTtRQUN4QixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07UUFDdkIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1FBQy9CLE9BQU87S0FDUixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgcmVzb2x2ZXIgZm9yIE1hc3RyYSBhZ2VudHMuXG4gKlxuICogRWFjaCBhZ2VudCBzdGVwIGNhbGxzIHtAbGluayBidWlsZE1vZGVsfSB3aXRoIHRoZSBhY3RpdmVcbiAqIGBSZXF1ZXN0Q29udGV4dGAuIFRoZSB1c2VyIHN0YW1wZWQgYnkgYE1hc3RyYVNlcnZlcmAgY2FycmllcyBhblxuICogQXBwS2l0IGBXb3Jrc3BhY2VDbGllbnRgOyB3ZSBhc2sgaXQgZm9yIHRoZSB3b3Jrc3BhY2UgaG9zdCBhbmQgYVxuICogZnJlc2ggYmVhcmVyIGhlYWRlciwgdGhlbiBwb2ludCBNYXN0cmEncyBPcGVuQUktY29tcGF0aWJsZSBwcm92aWRlclxuICogYXQgYC9zZXJ2aW5nLWVuZHBvaW50c2Agb24gdGhhdCBob3N0LlxuICpcbiAqIFRoaXMgbW9kdWxlIG9ubHkgYWRkcyB0aGUgTWFzdHJhLXNwZWNpZmljIGdsdWUuIFRoZSBhY3R1YWwgbW9kZWxcbiAqIHNlbGVjdGlvbiAtIGxpc3RpbmcgdGhlIHdvcmtzcGFjZSBjYXRhbG9ndWUgYW5kIHJlc29sdmluZyBhblxuICogZXhwbGljaXQgbmFtZSAvIGNsYXNzIC8gZmFsbGJhY2sgY2hhaW4gdG8gYSByZWFsIGVuZHBvaW50IGlkIC0gbGl2ZXNcbiAqIGluIGBAZGJ4LXRvb2xzL21vZGVsYCAoe0BsaW5rIHNlbGVjdE1vZGVsfSkgc28gbm9uLU1hc3RyYSBjb25zdW1lcnNcbiAqIChlLmcuIGEgam9iIHRoYXQganVzdCBuZWVkcyBhIG1vZGVsIG5hbWUpIGNhbiByZXVzZSBpdC4gSGVyZSB3ZVxuICogYXNzZW1ibGUgdGhlIGV4cGxpY2l0IGFzayBmcm9tIE1hc3RyYSdzIHJlcXVlc3QgY29udGV4dCAodGhlXG4gKiBwZXItcmVxdWVzdCBvdmVycmlkZSB1bmRlciB7QGxpbmsgTUFTVFJBX01PREVMX09WRVJSSURFX0tFWX0sIHRoZVxuICogYWdlbnQgLyBwbHVnaW4gYG1vZGVsSWRgLCBvciBgREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUVgKSxcbiAqIHBhc3MgdGhlIHBsdWdpbidzIGZ1enp5IC8gY2xhc3MgLyBmYWxsYmFjayBrbm9icyB0aHJvdWdoLCBhbmQgd3JhcFxuICogdGhlIHJlc29sdmVkIGlkIGluIHRoZSBPcGVuQUktY29tcGF0aWJsZSBwcm92aWRlciBjb25maWcgTWFzdHJhXG4gKiBleHBlY3RzLiBDYXRhbG9ndWUgZmV0Y2hlcyBmYWlsIGxvdWQ6IG5ldHdvcmsgLyBhdXRoIGVycm9yc1xuICogcHJvcGFnYXRlIHNvIGNhbGxlcnMgc2VlIHRoZSByZWFsIFNESyBtZXNzYWdlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZXRFeGVjdXRpb25Db250ZXh0IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgY2xhc3NlcywgaW52b2tlLCBwb2xpY3ksIHJlc29sdmUgfSBmcm9tIFwiQGRieC10b29scy9tb2RlbFwiO1xuaW1wb3J0IHsgZnVuY3Rpb25VdGlscywganNvbiwgbG9nLCBuZXQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgbW9kZWwsIHR5cGUgU2VydmluZ0VuZHBvaW50U3VtbWFyeSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBNYXN0cmFNb2RlbENvbmZpZyB9IGZyb20gXCJAbWFzdHJhL2NvcmUvbGxtXCI7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBtYXN0cmEvY29yZS9yZXF1ZXN0LWNvbnRleHRcIjtcblxuaW1wb3J0IHsgTUFTVFJBX1VTRVJfS0VZLCB0eXBlIE1hc3RyYVBsdWdpbkNvbmZpZywgdHlwZSBVc2VyIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQge1xuICByZXdyaXRlU2VydmluZ1JlcXVlc3QsXG4gIHJld3JpdGVTZXJ2aW5nUmVzcG9uc2VCb2R5LFxuICByZXdyaXRlU2VydmluZ1Jlc3BvbnNlU3RyZWFtLFxufSBmcm9tIFwiLi9zZXJ2aW5nLXNhbml0aXplLnRzXCI7XG5pbXBvcnQgeyBNQVNUUkFfTU9ERUxfT1ZFUlJJREVfS0VZLCByZXNvbHZlU2VydmluZ0NvbmZpZyB9IGZyb20gXCIuL3NlcnZpbmcudHNcIjtcblxudHlwZSBNb2RlbENsYXNzID0gbW9kZWwuTW9kZWxDbGFzcztcbmNvbnN0IHsgcGFyc2VNb2RlbENsYXNzIH0gPSBjbGFzc2VzO1xuY29uc3QgeyBzZWxlY3RNb2RlbCB9ID0gcmVzb2x2ZTtcblxuLyoqIEtlZXAgUmVzcG9uc2VzIHR1cm5zIHN0YXRlbGVzcyBzbyB0b29sIGNvbnRpbnVhdGlvbnMgcmVwbGF5IGVuY3J5cHRlZCByZWFzb25pbmcgaW5saW5lLiAqL1xuZXhwb3J0IGNvbnN0IFJFU1BPTlNFU19QUk9WSURFUl9PUFRJT05TID0ge1xuICBvcGVuYWk6IHtcbiAgICBzdG9yZTogZmFsc2UsXG4gIH0sXG59IGFzIGNvbnN0O1xuXG4vKiogUGljayB0aGUgbmF0aXZlIERhdGFicmlja3MgaW5mZXJlbmNlIHN1cmZhY2UgcmVxdWlyZWQgYnkgYSByZXNvbHZlZCBtb2RlbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aW5nQXBpKG1vZGVsSWQ6IHN0cmluZyk6IFwiY2hhdFwiIHwgXCJyZXNwb25zZXNcIiB7XG4gIHJldHVybiBwb2xpY3kubW9kZWxTZXJ2aW5nQXBpKG1vZGVsSWQpO1xufVxuXG4vKiogT3B0aW9uYWwgb3ZlcnJpZGVzIGFjY2VwdGVkIGJ5IHtAbGluayBidWlsZE1vZGVsfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRNb2RlbE92ZXJyaWRlcyB7XG4gIC8qKlxuICAgKiBTdGF0aWMgbW9kZWwgaWQgZnJvbSB0aGUgYWdlbnQgLyBwbHVnaW4gY29uZmlnIChzdHJpbmcgc3VnYXIgb25cbiAgICogYGRlZi5tb2RlbGAgb3IgYGNvbmZpZy5kZWZhdWx0TW9kZWxgKS4gTG9zZXMgdG8gdGhlIHBlci1yZXF1ZXN0XG4gICAqIG92ZXJyaWRlIGJ1dCB3aW5zIG92ZXIgZW52IC8gY2xhc3MgLyBmYWxsYmFjay5cbiAgICovXG4gIG1vZGVsSWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDaGF0IGNhcGFiaWxpdHkgY2xhc3MgdG8gcmVzb2x2ZSB3aGVuIG5vIGV4cGxpY2l0IG1vZGVsIGlkIGlzXG4gICAqIHN1cHBsaWVkLiBVc2VkIGJ5IGludGVybmFsIGFnZW50cyAoZS5nLiB0aGUgY2hhcnQgcGxhbm5lciBhc2tzIGZvclxuICAgKiB7QGxpbmsgbW9kZWwuTW9kZWxDbGFzcy5DaGF0RmFzdH0pIHRvIGV4cHJlc3MgaW50ZW50IHdpdGhvdXQgcGlubmluZyBhblxuICAgKiBlbmRwb2ludCBuYW1lOyB0aGUgbGl2ZSBjYXRhbG9ndWUgaXMgY2xhc3NpZmllZCBhbmQgdGhlIHRvcFxuICAgKiBhdmFpbGFibGUgbW9kZWwgaW4gdGhlIGNsYXNzIGlzIGNob3NlbiwgZmFsbGluZyBiYWNrIHRvIHRoZVxuICAgKiBjbGFzcydzIHN0YXRpYyBsaXN0IHdoZW4gdGhlIHdvcmtzcGFjZSBoYXMgbm9uZS5cbiAgICovXG4gIG1vZGVsQ2xhc3M/OiBNb2RlbENsYXNzO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb25JbnB1dChcbiAgY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcsXG4gIHJlcXVlc3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBkZWZhdWx0Q2xhc3M6IE1vZGVsQ2xhc3MgfCB1bmRlZmluZWQsXG4gIHNlcnZpbmcgPSByZXNvbHZlU2VydmluZ0NvbmZpZyhjb25maWcpLFxuKSB7XG4gIGNvbnN0IHJlcXVlc3RlZENsYXNzID0gcmVxdWVzdGVkICE9PSB1bmRlZmluZWQgPyBwYXJzZU1vZGVsQ2xhc3MocmVxdWVzdGVkKSA6IG51bGw7XG4gIGNvbnN0IGV4cGxpY2l0ID0gcmVxdWVzdGVkQ2xhc3MgPT09IG51bGwgPyByZXF1ZXN0ZWQgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IG1vZGVsQ2xhc3MgPSByZXF1ZXN0ZWRDbGFzcyA/PyBkZWZhdWx0Q2xhc3M7XG4gIHJldHVybiB7XG4gICAgLi4uKGV4cGxpY2l0ICE9PSB1bmRlZmluZWQgPyB7IGV4cGxpY2l0IH0gOiB7fSksXG4gICAgZnV6enk6IHNlcnZpbmcuZnV6enksXG4gICAgdGhyZXNob2xkOiBzZXJ2aW5nLnRocmVzaG9sZCxcbiAgICAuLi4obW9kZWxDbGFzcyAhPT0gdW5kZWZpbmVkID8geyBtb2RlbENsYXNzIH0gOiB7fSksXG4gICAgZmFsbGJhY2tzOiBzZXJ2aW5nLmZhbGxiYWNrcy5zbGljZSgpLFxuICAgIGxpdmVPbmx5OiByZXF1ZXN0ZWQgPT09IHVuZGVmaW5lZCxcbiAgICB0dGxNczogc2VydmluZy50dGxNcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGFuIGFnZW50J3MgdW5waW5uZWQgZGVmYXVsdCBhZ2FpbnN0IGFuIGFscmVhZHktbG9hZGVkIGxpdmUgY2F0YWxvZ3VlLlxuICpcbiAqIFdpdGggbm8gY29uZmlndXJlZCBpZC9jbGFzcy9mYWxsYmFjaywgdGhlIGdlbmVyaWMgbW9kZWwgcmFua2VyIHNlbGVjdHMgdGhlXG4gKiBoaWdoZXN0LXJhbmtlZCBjdXJyZW50bHkgYXZhaWxhYmxlIEdQVCwgdGhlbiBmYWxscyBiYWNrIHRvIHRoZSBoaWdoZXN0LXJhbmtlZFxuICogbGl2ZSBjaGF0IGVuZHBvaW50IHdoZW4gdGhlIHdvcmtzcGFjZSBoYXMgbm8gR1BULlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZURlZmF1bHRNb2RlbElkKFxuICBjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZyxcbiAgZW5kcG9pbnRzOiByZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10sXG4gIG92ZXJyaWRlczogQnVpbGRNb2RlbE92ZXJyaWRlcyA9IHt9LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgcmVxdWVzdGVkID0gb3ZlcnJpZGVzLm1vZGVsSWQgPz8gcHJvY2Vzcy5lbnYuREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUU7XG4gIHJldHVybiByZXNvbHZlLnJlc29sdmVNb2RlbChlbmRwb2ludHMsIHNlbGVjdGlvbklucHV0KGNvbmZpZywgcmVxdWVzdGVkLCBvdmVycmlkZXMubW9kZWxDbGFzcykpXG4gICAgLm1vZGVsSWQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGBNYXN0cmFNb2RlbENvbmZpZ2AgZm9yIHRoZSBjdXJyZW50IGFnZW50IHN0ZXAuIFJ1bnNcbiAqIHdoaWxlIGBhZ2VudC5zdHJlYW1gIGlzIGluc2lkZSB0aGUgYGFzVXNlcihyZXEpYCBzY29wZSBzbyB0b2tlbnNcbiAqIGFyZSB1c2VyLXNjb3BlZDsgb3V0c2lkZSBhbiBhY3RpdmUgdXNlciBjb250ZXh0IHRoZSB3b3Jrc3BhY2VcbiAqIGNsaWVudCBmYWxscyBiYWNrIHRvIHRoZSBzZXJ2aWNlIHByaW5jaXBhbC5cbiAqXG4gKiBFbmRwb2ludCBwcmVjZWRlbmNlOiB0aGUgcGVyLXJlcXVlc3Qgb3ZlcnJpZGVcbiAqICh7QGxpbmsgTUFTVFJBX01PREVMX09WRVJSSURFX0tFWX0sIG9ubHkgd2hlbiBgY29uZmlnLm1vZGVsT3ZlcnJpZGVgIGFsbG93c1xuICogaXQpLCB0aGVuIHtAbGluayBCdWlsZE1vZGVsT3ZlcnJpZGVzLm1vZGVsSWR9IGZyb20gdGhlIGFnZW50IC8gcGx1Z2luXG4gKiBjb25maWcsIHRoZW4gYERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FYC4gV2l0aCBub25lIG9mIHRob3NlIHNldCB0aGVcbiAqIGNhcGFiaWxpdHkgY2xhc3MgYW5kIGZhbGxiYWNrIGxhZGRlciBpbiBgQGRieC10b29scy9tb2RlbGAgY2hvb3NlIHRoZVxuICogZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZE1vZGVsKFxuICBjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZyxcbiAgcmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0LFxuICBvdmVycmlkZXM6IEJ1aWxkTW9kZWxPdmVycmlkZXMgPSB7fSxcbik6IFByb21pc2U8TWFzdHJhTW9kZWxDb25maWc+IHtcbiAgdm9pZCBzZXR1cEZldGNoSW50ZXJjZXB0b3IoKTtcbiAgLy8gVGhlIGNoYXQgcGF0aCBzdGFtcHMgdGhlIEFwcEtpdCB1c2VyIG9uIHRoZSByZXF1ZXN0IGNvbnRleHQgdmlhXG4gIC8vIGBNYXN0cmFTZXJ2ZXJgLiBUaGUgTUNQIHRyYW5zcG9ydCByb3V0ZXMgZG9uJ3QgdGhyZWFkIHRoYXQgY29udGV4dFxuICAvLyBpbnRvIHRvb2wgZXhlY3V0aW9uLCBzbyBmYWxsIGJhY2sgdG8gdGhlIGFtYmllbnQgZXhlY3V0aW9uIGNvbnRleHRcbiAgLy8gKHRoZSBhY3RpdmUgT0JPIHNjb3BlLCBvciB0aGUgc2VydmljZSBwcmluY2lwYWwpIHdoZW4gaXQncyBhYnNlbnQuXG4gIGNvbnN0IHVzZXIgPSByZXF1ZXN0Q29udGV4dC5nZXQoTUFTVFJBX1VTRVJfS0VZKSBhcyBVc2VyIHwgdW5kZWZpbmVkO1xuICBjb25zdCBleGVjdXRpb25Db250ZXh0ID0gdXNlcj8uZXhlY3V0aW9uQ29udGV4dCA/PyBnZXRFeGVjdXRpb25Db250ZXh0KCk7XG4gIGNvbnN0IGNsaWVudENvbmZpZyA9IGV4ZWN1dGlvbkNvbnRleHQuY2xpZW50LmNvbmZpZztcbiAgY29uc3QgaG9zdCA9IChhd2FpdCBjbGllbnRDb25maWcuZ2V0SG9zdCgpKS50b1N0cmluZygpO1xuICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcbiAgYXdhaXQgY2xpZW50Q29uZmlnLmF1dGhlbnRpY2F0ZShoZWFkZXJzKTtcbiAgLy8gVGhlIE9wZW5BSSBOb2RlIFNESyBhcHBlbmRzIHBhdGhzIGxpa2UgYC9jaGF0L2NvbXBsZXRpb25zYCB0byB3aGF0ZXZlclxuICAvLyBVUkwgd2UgaGFuZCBpdC4gRHJvcCB0aGUgdHJhaWxpbmcgc2xhc2ggc28gdGhlIHJlc3VsdGluZyBVUkwgc3RheXNcbiAgLy8gd2VsbC1mb3JtZWQgKGAvc2VydmluZy1lbmRwb2ludHMvY2hhdC9jb21wbGV0aW9uc2ApLlxuICBjb25zdCB1cmwgPSBuZXcgVVJMKFwiL3NlcnZpbmctZW5kcG9pbnRzXCIsIGhvc3QpLnRvU3RyaW5nKCkucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuXG4gIGNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoY29uZmlnKTtcbiAgY29uc3Qgc2VydmluZyA9IHJlc29sdmVTZXJ2aW5nQ29uZmlnKGNvbmZpZyk7XG4gIGNvbnN0IG92ZXJyaWRlID0gc2VydmluZy5hbGxvd092ZXJyaWRlXG4gICAgPyAocmVxdWVzdENvbnRleHQuZ2V0KE1BU1RSQV9NT0RFTF9PVkVSUklERV9LRVkpIGFzIHN0cmluZyB8IHVuZGVmaW5lZClcbiAgICA6IHVuZGVmaW5lZDtcblxuICAvLyBUaGUgb3ZlcnJpZGUgLyBhZ2VudCBkZWZhdWx0IC8gZW52IHZhbHVlIGNhbiBiZSBlaXRoZXIgYSBjb25jcmV0ZVxuICAvLyBlbmRwb2ludCBuYW1lIG9yIGEgbW9kZWwgY2xhc3Mgc2x1ZyAoXCJjaGF0LXRoaW5raW5nXCIgL1xuICAvLyBcImNoYXQtYmFsYW5jZWRcIiAvIFwiY2hhdC1mYXN0XCIpLiBBIGNsYXNzIHNsdWcgYmVjb21lcyBhIGNsYXNzIGludGVudFxuICAvLyAobGV0IHRoZSBsaXZlIGNhdGFsb2d1ZSBwaWNrIHRoZSBiZXN0IG1vZGVsIGluIHRoYXQgYmFuZCk7IGFueXRoaW5nXG4gIC8vIGVsc2UgaXMgYW4gZXhwbGljaXQgbmFtZSBmdXp6eS1tYXRjaGVkIGFnYWluc3QgdGhlIGNhdGFsb2d1ZS4gQW5cbiAgLy8gaW50ZXJuYWwgYG92ZXJyaWRlcy5tb2RlbENsYXNzYCAoZS5nLiB0aGUgY2hhcnQgcGxhbm5lcikgaXMgdGhlXG4gIC8vIGZsb29yIHdoZW4gbm90aGluZyB3YXMgcmVxdWVzdGVkLlxuICBjb25zdCByZXF1ZXN0ZWQgPSBvdmVycmlkZSA/PyBvdmVycmlkZXMubW9kZWxJZCA/PyBwcm9jZXNzLmVudi5EQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRTtcblxuICBjb25zdCB7IG1vZGVsSWQsIHNvdXJjZSB9ID0gYXdhaXQgc2VsZWN0TW9kZWwoXG4gICAgZXhlY3V0aW9uQ29udGV4dC5jbGllbnQsXG4gICAgaG9zdCxcbiAgICBzZWxlY3Rpb25JbnB1dChjb25maWcsIHJlcXVlc3RlZCwgb3ZlcnJpZGVzLm1vZGVsQ2xhc3MsIHNlcnZpbmcpLFxuICApO1xuICBsb2dnZXIuZGVidWcoXCJtb2RlbCBzZWxlY3RlZFwiLCB7IG1vZGVsSWQsIHNvdXJjZSwgcmVxdWVzdGVkIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcHJvdmlkZXJJZDogY29uZmlnLnByb3ZpZGVySWQgPz8gXCJkYXRhYnJpY2tzXCIsXG4gICAgbW9kZWxJZCxcbiAgICB1cmwsXG4gICAgaGVhZGVyczogT2JqZWN0LmZyb21FbnRyaWVzKGhlYWRlcnMuZW50cmllcygpKSxcbiAgICBhcGk6IHNlcnZpbmdBcGkobW9kZWxJZCksXG4gIH07XG59XG5cbi8qKiBDaGF0IENvbXBsZXRpb25zIHJvdXRlIHdob3NlIHByb3ZpZGVyLXNwZWNpZmljIHdpcmUgc2hhcGVzIGFyZSBub3JtYWxpemVkIGhlcmUuICovXG5jb25zdCBDSEFUX0NPTVBMRVRJT05TX1BBVEggPSBgLyR7aW52b2tlLkNIQVRfQ09NUExFVElPTlNfUEFUSH1gO1xuXG4vKipcbiAqIEluc3RhbGwgYSBzaW5nbGUgc2hhcmVkIGBnbG9iYWxUaGlzLmZldGNoYCB3cmFwcGVyIGZvciBDaGF0IENvbXBsZXRpb25zXG4gKiByZXF1ZXN0cy4gVGhlIHdyYXBwZXIgZG9lcyB0aHJlZSB0aGluZ3M6XG4gKlxuICogICAxLiBSZXdyaXRlcyBvdXRnb2luZyBKU09OIGZyb20gZWl0aGVyIGBpbml0LmJvZHlgIG9yIGEgYFJlcXVlc3RgIHRvIHJlcGFpclxuICogICAgICBwcm92aWRlci1zcGVjaWZpYyByZXF1ZXN0IGNvbnN0cmFpbnRzIChzZWUge0BsaW5rIHJld3JpdGVTZXJ2aW5nUmVxdWVzdH1cbiAqICAgICAgaW4gYC4vc2VydmluZy1zYW5pdGl6ZS5qc2ApLlxuICogICAyLiBBdCBgTE9HX0xFVkVMPWRlYnVnYCwgZHVtcHMgdGhlIChwb3N0LXNhbml0aXplKSBKU09OIGJvZHkgc29cbiAqICAgICAgNHh4IGRlYnVnZ2luZyBkb2Vzbid0IGhhdmUgdG8gZmlnaHQgQUkgU0RLJ3MgYFtBcnJheV1gXG4gKiAgICAgIGZvcm1hdHRlci5cbiAqICAgMy4gUmVwYWlycyBidWZmZXJlZCBhbmQgc3RyZWFtaW5nIHJlc3BvbnNlcyB3aGVyZSBhIHByb3ZpZGVyIHJldHVybnNcbiAqICAgICAgYGNob2ljZXNbXS5tZXNzYWdlLmNvbnRlbnRgIG9yIGBjaG9pY2VzW10uZGVsdGEuY29udGVudGAgYXMgYSBwYXJ0c1xuICogICAgICBhcnJheSB0aGF0IHRoZSBBSSBTREsncyBPcGVuQUkgc2NoZW1hIHJlamVjdHMuXG4gKlxuICogU2FmZSB0byBjYWxsIGZyb20gYW55IGhvdCBwYXRoOiB7QGxpbmsgZnVuY3Rpb25VdGlscy5tZW1vaXplfSBlbnN1cmVzXG4gKiB0aGUgd3JhcHBlciBpcyBpbnN0YWxsZWQgYXQgbW9zdCBvbmNlIHBlciBwcm9jZXNzLCBzbyBzdWJzZXF1ZW50XG4gKiBjYWxscyBhcmUgYSBuby1vcCBldmVuIHdoZW4ge0BsaW5rIGJ1aWxkTW9kZWx9IGZpcmVzIG9uIGV2ZXJ5IGFnZW50XG4gKiBzdGVwLlxuICovXG5jb25zdCBzZXR1cEZldGNoSW50ZXJjZXB0b3IgPSBmdW5jdGlvblV0aWxzLm1lbW9pemUoKCk6IHZvaWQgPT4ge1xuICBnbG9iYWxUaGlzLmZldGNoID0gY3JlYXRlU2VydmluZ0ZldGNoSW50ZXJjZXB0b3IoZ2xvYmFsVGhpcy5mZXRjaC5iaW5kKGdsb2JhbFRoaXMpKTtcbn0pO1xuXG4vKiogQnVpbGQgdGhlIHNlcnZpbmcgZmV0Y2ggd3JhcHBlcjsgZXhwb3J0ZWQgZm9yIHRyYW5zcG9ydC1sZXZlbCByZWdyZXNzaW9uIHRlc3RzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlcnZpbmdGZXRjaEludGVyY2VwdG9yKG9yaWdpbmFsOiB0eXBlb2YgZmV0Y2gpOiB0eXBlb2YgZmV0Y2gge1xuICBjb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL2xsbVwiKTtcbiAgcmV0dXJuIChhc3luYyAoaW5wdXQsIGluaXQpID0+IHtcbiAgICBjb25zdCB1cmwgPSBuZXQudXJsQnVpbGRlcihpbnB1dCk7XG4gICAgY29uc3QgbWV0aG9kID0gaW5pdD8ubWV0aG9kID8/IChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QgPyBpbnB1dC5tZXRob2QgOiBcIkdFVFwiKTtcbiAgICBpZiAoIXVybCB8fCB1cmwucGF0aG5hbWUgIT09IENIQVRfQ09NUExFVElPTlNfUEFUSCB8fCBtZXRob2QudG9VcHBlckNhc2UoKSAhPT0gXCJQT1NUXCIpIHtcbiAgICAgIHJldHVybiBvcmlnaW5hbChpbnB1dCwgaW5pdCk7XG4gICAgfVxuICAgIGNvbnN0IHJld3JpdHRlbiA9IGF3YWl0IHJld3JpdGVTZXJ2aW5nUmVxdWVzdChpbnB1dCwgaW5pdCk7XG4gICAgY29uc3QgcGFyc2VkID0ganNvbi5wYXJzZTx1bmtub3duPihyZXdyaXR0ZW4uYm9keSk7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgXCJQT1NUXCIsXG4gICAgICBwYXJzZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHsgdXJsOiB1cmwudG9TdHJpbmcoKSwgYm9keVR5cGU6IFwibm9uLUpTT05cIiB9XG4gICAgICAgIDogeyB1cmw6IHVybC50b1N0cmluZygpLCBib2R5OiBwYXJzZWQgfSxcbiAgICApO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgb3JpZ2luYWwocmV3cml0dGVuLmlucHV0LCByZXdyaXR0ZW4uaW5pdCk7XG4gICAgcmV0dXJuIHJlcGFpclNlcnZpbmdSZXNwb25zZShyZXNwb25zZSk7XG4gIH0pIGFzIHR5cGVvZiBnbG9iYWxUaGlzLmZldGNoO1xufVxuXG4vKipcbiAqIFJld3JpdGUgYSBzZXJ2aW5nIHJlc3BvbnNlIHdob3NlIGJvZHkgbmVlZHMgcmVwYWlyLCBsZWF2aW5nIHVuc3VwcG9ydGVkXG4gKiBjb250ZW50IHR5cGVzIGJ5dGUtaWRlbnRpY2FsLlxuICpcbiAqIFNTRSByZW1haW5zIGEgbGl2ZSBzdHJlYW06IGEgVHJhbnNmb3JtU3RyZWFtIHJlcGFpcnMgY29tcGxldGUgYGRhdGE6YCBsaW5lc1xuICogYXMgYnl0ZXMgYXJyaXZlIGFuZCBwcmVzZXJ2ZXMgcGFydGlhbCBsaW5lcyBhY3Jvc3MgbmV0d29yayBjaHVua3MuIEpTT04gaXNcbiAqIGJ1ZmZlcmVkIHRocm91Z2ggdGhlIGV4aXN0aW5nIHJlc3BvbnNlLWJvZHkgcmVwYWlyLiBBIG5vbi1KU09OL25vbi1TU0UgYm9keVxuICogaXMgcmV0dXJuZWQgdW50b3VjaGVkIHNvIHRoZSBjYWxsZXIgc3RpbGwgc2VlcyB0aGUgb3JpZ2luYWwgcmVzcG9uc2UuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlcGFpclNlcnZpbmdSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIikgPz8gXCJcIjtcbiAgaWYgKGNvbnRlbnRUeXBlLmluY2x1ZGVzKFwidGV4dC9ldmVudC1zdHJlYW1cIikgJiYgcmVzcG9uc2UuYm9keSkge1xuICAgIHJldHVybiByZWJ1aWxkU2VydmluZ1Jlc3BvbnNlKHJlc3BvbnNlLCByZXdyaXRlU2VydmluZ1Jlc3BvbnNlU3RyZWFtKHJlc3BvbnNlLmJvZHkpKTtcbiAgfVxuICBpZiAoIWNvbnRlbnRUeXBlLmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKSkgcmV0dXJuIHJlc3BvbnNlO1xuXG4gIGNvbnN0IGJvZHkgPSBhd2FpdCByZXNwb25zZS5jbG9uZSgpLnRleHQoKTtcbiAgY29uc3QgcmV3cml0dGVuID0gcmV3cml0ZVNlcnZpbmdSZXNwb25zZUJvZHkoYm9keSk7XG4gIGlmIChyZXdyaXR0ZW4gPT09IGJvZHkpIHJldHVybiByZXNwb25zZTtcbiAgcmV0dXJuIHJlYnVpbGRTZXJ2aW5nUmVzcG9uc2UocmVzcG9uc2UsIHJld3JpdHRlbik7XG59XG5cbi8qKiBSZWJ1aWxkIGEgdHJhbnNmb3JtZWQgcmVzcG9uc2Ugd2l0aG91dCBzdGFsZSBieXRlLWxlbmd0aC9lbmNvZGluZyBoZWFkZXJzLiAqL1xuZnVuY3Rpb24gcmVidWlsZFNlcnZpbmdSZXNwb25zZShcbiAgcmVzcG9uc2U6IFJlc3BvbnNlLFxuICBib2R5OiBzdHJpbmcgfCBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pixcbik6IFJlc3BvbnNlIHtcbiAgLy8gYGNvbnRlbnQtbGVuZ3RoYCAvIGBjb250ZW50LWVuY29kaW5nYCBkZXNjcmliZSB0aGUgT1JJR0lOQUwgYnl0ZXMsIHNvIHRoZXlcbiAgLy8gYXJlIGRyb3BwZWQ6IHRoZSByZXdyaXR0ZW4gYm9keSBpcyBhIGRpZmZlcmVudCBsZW5ndGggYW5kIGFscmVhZHkgZGVjb2RlZC5cbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHJlc3BvbnNlLmhlYWRlcnMpO1xuICBoZWFkZXJzLmRlbGV0ZShcImNvbnRlbnQtbGVuZ3RoXCIpO1xuICBoZWFkZXJzLmRlbGV0ZShcImNvbnRlbnQtZW5jb2RpbmdcIik7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UoYm9keSwge1xuICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgaGVhZGVycyxcbiAgfSk7XG59XG4iXX0=
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBRUgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUt2RSxPQUFPLEVBQUUsZUFBZSxFQUFzQyxNQUFNLGFBQWEsQ0FBQztBQUNsRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQiw0QkFBNEIsR0FDN0IsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUseUJBQXlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHL0UsTUFBTSxFQUFFLGVBQWUsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNwQyxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO0FBRWhDLDhGQUE4RjtBQUM5RixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRztJQUN4QyxNQUFNLEVBQUU7UUFDTixLQUFLLEVBQUUsS0FBSztLQUNiO0NBQ08sQ0FBQztBQUVYLGlGQUFpRjtBQUNqRixNQUFNLFVBQVUsVUFBVSxDQUFDLE9BQWU7SUFDeEMsT0FBTyxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFxQkQsU0FBUyxjQUFjLENBQ3JCLE1BQTBCLEVBQzFCLFNBQTZCLEVBQzdCLFlBQW9DLEVBQ3BDLE9BQU8sR0FBRyxv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a0JBQWtCLENBQUMsQ0FBQztJQUNuQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTtRQUN4QixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07UUFDdkIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1FBQy9CLE9BQU87S0FDUixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgcmVzb2x2ZXIgZm9yIE1hc3RyYSBhZ2VudHMuXG4gKlxuICogRWFjaCBhZ2VudCBzdGVwIGNhbGxzIHtAbGluayBidWlsZE1vZGVsfSB3aXRoIHRoZSBhY3RpdmVcbiAqIGBSZXF1ZXN0Q29udGV4dGAuIFRoZSB1c2VyIHN0YW1wZWQgYnkgYE1hc3RyYVNlcnZlcmAgY2FycmllcyBhblxuICogQXBwS2l0IGBXb3Jrc3BhY2VDbGllbnRgOyB3ZSBhc2sgaXQgZm9yIHRoZSB3b3Jrc3BhY2UgaG9zdCBhbmQgYVxuICogZnJlc2ggYmVhcmVyIGhlYWRlciwgdGhlbiBwb2ludCBNYXN0cmEncyBPcGVuQUktY29tcGF0aWJsZSBwcm92aWRlclxuICogYXQgYC9zZXJ2aW5nLWVuZHBvaW50c2Agb24gdGhhdCBob3N0LlxuICpcbiAqIFRoaXMgbW9kdWxlIG9ubHkgYWRkcyB0aGUgTWFzdHJhLXNwZWNpZmljIGdsdWUuIFRoZSBhY3R1YWwgbW9kZWxcbiAqIHNlbGVjdGlvbiAtIGxpc3RpbmcgdGhlIHdvcmtzcGFjZSBjYXRhbG9ndWUgYW5kIHJlc29sdmluZyBhblxuICogZXhwbGljaXQgbmFtZSAvIGNsYXNzIC8gZmFsbGJhY2sgY2hhaW4gdG8gYSByZWFsIGVuZHBvaW50IGlkIC0gbGl2ZXNcbiAqIGluIGBAZGJ4LXRvb2xzL21vZGVsYCAoe0BsaW5rIHNlbGVjdE1vZGVsfSkgc28gbm9uLU1hc3RyYSBjb25zdW1lcnNcbiAqIChlLmcuIGEgam9iIHRoYXQganVzdCBuZWVkcyBhIG1vZGVsIG5hbWUpIGNhbiByZXVzZSBpdC4gSGVyZSB3ZVxuICogYXNzZW1ibGUgdGhlIGV4cGxpY2l0IGFzayBmcm9tIE1hc3RyYSdzIHJlcXVlc3QgY29udGV4dCAodGhlXG4gKiBwZXItcmVxdWVzdCBvdmVycmlkZSB1bmRlciB7QGxpbmsgTUFTVFJBX01PREVMX09WRVJSSURFX0tFWX0sIHRoZVxuICogYWdlbnQgLyBwbHVnaW4gYG1vZGVsSWRgLCBvciBgREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUVgKSxcbiAqIHBhc3MgdGhlIHBsdWdpbidzIGZ1enp5IC8gY2xhc3MgLyBmYWxsYmFjayBrbm9icyB0aHJvdWdoLCBhbmQgd3JhcFxuICogdGhlIHJlc29sdmVkIGlkIGluIHRoZSBPcGVuQUktY29tcGF0aWJsZSBwcm92aWRlciBjb25maWcgTWFzdHJhXG4gKiBleHBlY3RzLiBDYXRhbG9ndWUgZmV0Y2hlcyBmYWlsIGxvdWQ6IG5ldHdvcmsgLyBhdXRoIGVycm9yc1xuICogcHJvcGFnYXRlIHNvIGNhbGxlcnMgc2VlIHRoZSByZWFsIFNESyBtZXNzYWdlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZXRFeGVjdXRpb25Db250ZXh0IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgY2xhc3NlcywgaW52b2tlLCBwb2xpY3ksIHJlc29sdmUgfSBmcm9tIFwiQGRieC10b29scy9tb2RlbFwiO1xuaW1wb3J0IHsgZnVuY3Rpb25VdGlscywganNvbiwgbG9nLCBuZXQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgbW9kZWwsIHR5cGUgU2VydmluZ0VuZHBvaW50U3VtbWFyeSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBNYXN0cmFNb2RlbENvbmZpZyB9IGZyb20gXCJAbWFzdHJhL2NvcmUvbGxtXCI7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBtYXN0cmEvY29yZS9yZXF1ZXN0LWNvbnRleHRcIjtcblxuaW1wb3J0IHsgTUFTVFJBX1VTRVJfS0VZLCB0eXBlIE1hc3RyYVBsdWdpbkNvbmZpZywgdHlwZSBVc2VyIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQge1xuICByZXdyaXRlU2VydmluZ1JlcXVlc3QsXG4gIHJld3JpdGVTZXJ2aW5nUmVzcG9uc2VCb2R5LFxuICByZXdyaXRlU2VydmluZ1Jlc3BvbnNlU3RyZWFtLFxufSBmcm9tIFwiLi9zZXJ2aW5nLXNhbml0aXplLnRzXCI7XG5pbXBvcnQgeyBNQVNUUkFfTU9ERUxfT1ZFUlJJREVfS0VZLCByZXNvbHZlU2VydmluZ0NvbmZpZyB9IGZyb20gXCIuL3NlcnZpbmcudHNcIjtcbmltcG9ydCB7IHJlY29yZEFjdGl2ZVRyYWNlQXV0aCwgcmVjb3JkQWN0aXZlVHJhY2VNb2RlbCB9IGZyb20gXCIuL3RlbGVtZXRyeS50c1wiO1xuXG50eXBlIE1vZGVsQ2xhc3MgPSBtb2RlbC5Nb2RlbENsYXNzO1xuY29uc3QgeyBwYXJzZU1vZGVsQ2xhc3MgfSA9IGNsYXNzZXM7XG5jb25zdCB7IHNlbGVjdE1vZGVsIH0gPSByZXNvbHZlO1xuXG4vKiogS2VlcCBSZXNwb25zZXMgdHVybnMgc3RhdGVsZXNzIHNvIHRvb2wgY29udGludWF0aW9ucyByZXBsYXkgZW5jcnlwdGVkIHJlYXNvbmluZyBpbmxpbmUuICovXG5leHBvcnQgY29uc3QgUkVTUE9OU0VTX1BST1ZJREVSX09QVElPTlMgPSB7XG4gIG9wZW5haToge1xuICAgIHN0b3JlOiBmYWxzZSxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbi8qKiBQaWNrIHRoZSBuYXRpdmUgRGF0YWJyaWNrcyBpbmZlcmVuY2Ugc3VyZmFjZSByZXF1aXJlZCBieSBhIHJlc29sdmVkIG1vZGVsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZpbmdBcGkobW9kZWxJZDogc3RyaW5nKTogXCJjaGF0XCIgfCBcInJlc3BvbnNlc1wiIHtcbiAgcmV0dXJuIHBvbGljeS5tb2RlbFNlcnZpbmdBcGkobW9kZWxJZCk7XG59XG5cbi8qKiBPcHRpb25hbCBvdmVycmlkZXMgYWNjZXB0ZWQgYnkge0BsaW5rIGJ1aWxkTW9kZWx9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZE1vZGVsT3ZlcnJpZGVzIHtcbiAgLyoqXG4gICAqIFN0YXRpYyBtb2RlbCBpZCBmcm9tIHRoZSBhZ2VudCAvIHBsdWdpbiBjb25maWcgKHN0cmluZyBzdWdhciBvblxuICAgKiBgZGVmLm1vZGVsYCBvciBgY29uZmlnLmRlZmF1bHRNb2RlbGApLiBMb3NlcyB0byB0aGUgcGVyLXJlcXVlc3RcbiAgICogb3ZlcnJpZGUgYnV0IHdpbnMgb3ZlciBlbnYgLyBjbGFzcyAvIGZhbGxiYWNrLlxuICAgKi9cbiAgbW9kZWxJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIENoYXQgY2FwYWJpbGl0eSBjbGFzcyB0byByZXNvbHZlIHdoZW4gbm8gZXhwbGljaXQgbW9kZWwgaWQgaXNcbiAgICogc3VwcGxpZWQuIFVzZWQgYnkgaW50ZXJuYWwgYWdlbnRzIChlLmcuIHRoZSBjaGFydCBwbGFubmVyIGFza3MgZm9yXG4gICAqIHtAbGluayBtb2RlbC5Nb2RlbENsYXNzLkNoYXRGYXN0fSkgdG8gZXhwcmVzcyBpbnRlbnQgd2l0aG91dCBwaW5uaW5nIGFuXG4gICAqIGVuZHBvaW50IG5hbWU7IHRoZSBsaXZlIGNhdGFsb2d1ZSBpcyBjbGFzc2lmaWVkIGFuZCB0aGUgdG9wXG4gICAqIGF2YWlsYWJsZSBtb2RlbCBpbiB0aGUgY2xhc3MgaXMgY2hvc2VuLCBmYWxsaW5nIGJhY2sgdG8gdGhlXG4gICAqIGNsYXNzJ3Mgc3RhdGljIGxpc3Qgd2hlbiB0aGUgd29ya3NwYWNlIGhhcyBub25lLlxuICAgKi9cbiAgbW9kZWxDbGFzcz86IE1vZGVsQ2xhc3M7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbklucHV0KFxuICBjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZyxcbiAgcmVxdWVzdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGRlZmF1bHRDbGFzczogTW9kZWxDbGFzcyB8IHVuZGVmaW5lZCxcbiAgc2VydmluZyA9IHJlc29sdmVTZXJ2aW5nQ29uZmlnKGNvbmZpZyksXG4pIHtcbiAgY29uc3QgcmVxdWVzdGVkQ2xhc3MgPSByZXF1ZXN0ZWQgIT09IHVuZGVmaW5lZCA/IHBhcnNlTW9kZWxDbGFzcyhyZXF1ZXN0ZWQpIDogbnVsbDtcbiAgY29uc3QgZXhwbGljaXQgPSByZXF1ZXN0ZWRDbGFzcyA9PT0gbnVsbCA/IHJlcXVlc3RlZCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgbW9kZWxDbGFzcyA9IHJlcXVlc3RlZENsYXNzID8/IGRlZmF1bHRDbGFzcztcbiAgcmV0dXJuIHtcbiAgICAuLi4oZXhwbGljaXQgIT09IHVuZGVmaW5lZCA/IHsgZXhwbGljaXQgfSA6IHt9KSxcbiAgICBmdXp6eTogc2VydmluZy5mdXp6eSxcbiAgICB0aHJlc2hvbGQ6IHNlcnZpbmcudGhyZXNob2xkLFxuICAgIC4uLihtb2RlbENsYXNzICE9PSB1bmRlZmluZWQgPyB7IG1vZGVsQ2xhc3MgfSA6IHt9KSxcbiAgICBmYWxsYmFja3M6IHNlcnZpbmcuZmFsbGJhY2tzLnNsaWNlKCksXG4gICAgbGl2ZU9ubHk6IHJlcXVlc3RlZCA9PT0gdW5kZWZpbmVkLFxuICAgIHR0bE1zOiBzZXJ2aW5nLnR0bE1zLFxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYW4gYWdlbnQncyB1bnBpbm5lZCBkZWZhdWx0IGFnYWluc3QgYW4gYWxyZWFkeS1sb2FkZWQgbGl2ZSBjYXRhbG9ndWUuXG4gKlxuICogV2l0aCBubyBjb25maWd1cmVkIGlkL2NsYXNzL2ZhbGxiYWNrLCB0aGUgZ2VuZXJpYyBtb2RlbCByYW5rZXIgc2VsZWN0cyB0aGVcbiAqIGhpZ2hlc3QtcmFua2VkIGN1cnJlbnRseSBhdmFpbGFibGUgR1BULCB0aGVuIGZhbGxzIGJhY2sgdG8gdGhlIGhpZ2hlc3QtcmFua2VkXG4gKiBsaXZlIGNoYXQgZW5kcG9pbnQgd2hlbiB0aGUgd29ya3NwYWNlIGhhcyBubyBHUFQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRGVmYXVsdE1vZGVsSWQoXG4gIGNvbmZpZzogTWFzdHJhUGx1Z2luQ29uZmlnLFxuICBlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSxcbiAgb3ZlcnJpZGVzOiBCdWlsZE1vZGVsT3ZlcnJpZGVzID0ge30sXG4pOiBzdHJpbmcge1xuICBjb25zdCByZXF1ZXN0ZWQgPSBvdmVycmlkZXMubW9kZWxJZCA/PyBwcm9jZXNzLmVudi5EQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRTtcbiAgcmV0dXJuIHJlc29sdmUucmVzb2x2ZU1vZGVsKGVuZHBvaW50cywgc2VsZWN0aW9uSW5wdXQoY29uZmlnLCByZXF1ZXN0ZWQsIG92ZXJyaWRlcy5tb2RlbENsYXNzKSlcbiAgICAubW9kZWxJZDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgYE1hc3RyYU1vZGVsQ29uZmlnYCBmb3IgdGhlIGN1cnJlbnQgYWdlbnQgc3RlcC4gUnVuc1xuICogd2hpbGUgYGFnZW50LnN0cmVhbWAgaXMgaW5zaWRlIHRoZSBgYXNVc2VyKHJlcSlgIHNjb3BlIHNvIHRva2Vuc1xuICogYXJlIHVzZXItc2NvcGVkOyBvdXRzaWRlIGFuIGFjdGl2ZSB1c2VyIGNvbnRleHQgdGhlIHdvcmtzcGFjZVxuICogY2xpZW50IGZhbGxzIGJhY2sgdG8gdGhlIHNlcnZpY2UgcHJpbmNpcGFsLlxuICpcbiAqIEVuZHBvaW50IHByZWNlZGVuY2U6IHRoZSBwZXItcmVxdWVzdCBvdmVycmlkZVxuICogKHtAbGluayBNQVNUUkFfTU9ERUxfT1ZFUlJJREVfS0VZfSwgb25seSB3aGVuIGBjb25maWcubW9kZWxPdmVycmlkZWAgYWxsb3dzXG4gKiBpdCksIHRoZW4ge0BsaW5rIEJ1aWxkTW9kZWxPdmVycmlkZXMubW9kZWxJZH0gZnJvbSB0aGUgYWdlbnQgLyBwbHVnaW5cbiAqIGNvbmZpZywgdGhlbiBgREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUVgLiBXaXRoIG5vbmUgb2YgdGhvc2Ugc2V0IHRoZVxuICogY2FwYWJpbGl0eSBjbGFzcyBhbmQgZmFsbGJhY2sgbGFkZGVyIGluIGBAZGJ4LXRvb2xzL21vZGVsYCBjaG9vc2UgdGhlXG4gKiBlbmRwb2ludC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkTW9kZWwoXG4gIGNvbmZpZzogTWFzdHJhUGx1Z2luQ29uZmlnLFxuICByZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQsXG4gIG92ZXJyaWRlczogQnVpbGRNb2RlbE92ZXJyaWRlcyA9IHt9LFxuKTogUHJvbWlzZTxNYXN0cmFNb2RlbENvbmZpZz4ge1xuICB2b2lkIHNldHVwRmV0Y2hJbnRlcmNlcHRvcigpO1xuICAvLyBUaGUgY2hhdCBwYXRoIHN0YW1wcyB0aGUgQXBwS2l0IHVzZXIgb24gdGhlIHJlcXVlc3QgY29udGV4dCB2aWFcbiAgLy8gYE1hc3RyYVNlcnZlcmAuIFRoZSBNQ1AgdHJhbnNwb3J0IHJvdXRlcyBkb24ndCB0aHJlYWQgdGhhdCBjb250ZXh0XG4gIC8vIGludG8gdG9vbCBleGVjdXRpb24sIHNvIGZhbGwgYmFjayB0byB0aGUgYW1iaWVudCBleGVjdXRpb24gY29udGV4dFxuICAvLyAodGhlIGFjdGl2ZSBPQk8gc2NvcGUsIG9yIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCkgd2hlbiBpdCdzIGFic2VudC5cbiAgY29uc3QgdXNlciA9IHJlcXVlc3RDb250ZXh0LmdldChNQVNUUkFfVVNFUl9LRVkpIGFzIFVzZXIgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGV4ZWN1dGlvbkNvbnRleHQgPSB1c2VyPy5leGVjdXRpb25Db250ZXh0ID8/IGdldEV4ZWN1dGlvbkNvbnRleHQoKTtcbiAgcmVjb3JkQWN0aXZlVHJhY2VBdXRoKFwiaXNVc2VyQ29udGV4dFwiIGluIGV4ZWN1dGlvbkNvbnRleHQgPyBcIm9ib1wiIDogXCJzZXJ2aWNlLXByaW5jaXBhbFwiKTtcbiAgY29uc3QgY2xpZW50Q29uZmlnID0gZXhlY3V0aW9uQ29udGV4dC5jbGllbnQuY29uZmlnO1xuICBjb25zdCBob3N0ID0gKGF3YWl0IGNsaWVudENvbmZpZy5nZXRIb3N0KCkpLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuICBhd2FpdCBjbGllbnRDb25maWcuYXV0aGVudGljYXRlKGhlYWRlcnMpO1xuICAvLyBUaGUgT3BlbkFJIE5vZGUgU0RLIGFwcGVuZHMgcGF0aHMgbGlrZSBgL2NoYXQvY29tcGxldGlvbnNgIHRvIHdoYXRldmVyXG4gIC8vIFVSTCB3ZSBoYW5kIGl0LiBEcm9wIHRoZSB0cmFpbGluZyBzbGFzaCBzbyB0aGUgcmVzdWx0aW5nIFVSTCBzdGF5c1xuICAvLyB3ZWxsLWZvcm1lZCAoYC9zZXJ2aW5nLWVuZHBvaW50cy9jaGF0L2NvbXBsZXRpb25zYCkuXG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoXCIvc2VydmluZy1lbmRwb2ludHNcIiwgaG9zdCkudG9TdHJpbmcoKS5yZXBsYWNlKC9cXC8kLywgXCJcIik7XG5cbiAgY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihjb25maWcpO1xuICBjb25zdCBzZXJ2aW5nID0gcmVzb2x2ZVNlcnZpbmdDb25maWcoY29uZmlnKTtcbiAgY29uc3Qgb3ZlcnJpZGUgPSBzZXJ2aW5nLmFsbG93T3ZlcnJpZGVcbiAgICA/IChyZXF1ZXN0Q29udGV4dC5nZXQoTUFTVFJBX01PREVMX09WRVJSSURFX0tFWSkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIC8vIFRoZSBvdmVycmlkZSAvIGFnZW50IGRlZmF1bHQgLyBlbnYgdmFsdWUgY2FuIGJlIGVpdGhlciBhIGNvbmNyZXRlXG4gIC8vIGVuZHBvaW50IG5hbWUgb3IgYSBtb2RlbCBjbGFzcyBzbHVnIChcImNoYXQtdGhpbmtpbmdcIiAvXG4gIC8vIFwiY2hhdC1iYWxhbmNlZFwiIC8gXCJjaGF0LWZhc3RcIikuIEEgY2xhc3Mgc2x1ZyBiZWNvbWVzIGEgY2xhc3MgaW50ZW50XG4gIC8vIChsZXQgdGhlIGxpdmUgY2F0YWxvZ3VlIHBpY2sgdGhlIGJlc3QgbW9kZWwgaW4gdGhhdCBiYW5kKTsgYW55dGhpbmdcbiAgLy8gZWxzZSBpcyBhbiBleHBsaWNpdCBuYW1lIGZ1enp5LW1hdGNoZWQgYWdhaW5zdCB0aGUgY2F0YWxvZ3VlLiBBblxuICAvLyBpbnRlcm5hbCBgb3ZlcnJpZGVzLm1vZGVsQ2xhc3NgIChlLmcuIHRoZSBjaGFydCBwbGFubmVyKSBpcyB0aGVcbiAgLy8gZmxvb3Igd2hlbiBub3RoaW5nIHdhcyByZXF1ZXN0ZWQuXG4gIGNvbnN0IHJlcXVlc3RlZCA9IG92ZXJyaWRlID8/IG92ZXJyaWRlcy5tb2RlbElkID8/IHByb2Nlc3MuZW52LkRBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FO1xuXG4gIGNvbnN0IHsgbW9kZWxJZCwgc291cmNlIH0gPSBhd2FpdCBzZWxlY3RNb2RlbChcbiAgICBleGVjdXRpb25Db250ZXh0LmNsaWVudCxcbiAgICBob3N0LFxuICAgIHNlbGVjdGlvbklucHV0KGNvbmZpZywgcmVxdWVzdGVkLCBvdmVycmlkZXMubW9kZWxDbGFzcywgc2VydmluZyksXG4gICk7XG4gIGxvZ2dlci5kZWJ1ZyhcIm1vZGVsIHNlbGVjdGVkXCIsIHsgbW9kZWxJZCwgc291cmNlLCByZXF1ZXN0ZWQgfSk7XG4gIHJlY29yZEFjdGl2ZVRyYWNlTW9kZWwobW9kZWxJZCk7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlcklkOiBjb25maWcucHJvdmlkZXJJZCA/PyBcImRhdGFicmlja3NcIixcbiAgICBtb2RlbElkLFxuICAgIHVybCxcbiAgICBoZWFkZXJzOiBPYmplY3QuZnJvbUVudHJpZXMoaGVhZGVycy5lbnRyaWVzKCkpLFxuICAgIGFwaTogc2VydmluZ0FwaShtb2RlbElkKSxcbiAgfTtcbn1cblxuLyoqIENoYXQgQ29tcGxldGlvbnMgcm91dGUgd2hvc2UgcHJvdmlkZXItc3BlY2lmaWMgd2lyZSBzaGFwZXMgYXJlIG5vcm1hbGl6ZWQgaGVyZS4gKi9cbmNvbnN0IENIQVRfQ09NUExFVElPTlNfUEFUSCA9IGAvJHtpbnZva2UuQ0hBVF9DT01QTEVUSU9OU19QQVRIfWA7XG5cbi8qKlxuICogSW5zdGFsbCBhIHNpbmdsZSBzaGFyZWQgYGdsb2JhbFRoaXMuZmV0Y2hgIHdyYXBwZXIgZm9yIENoYXQgQ29tcGxldGlvbnNcbiAqIHJlcXVlc3RzLiBUaGUgd3JhcHBlciBkb2VzIHRocmVlIHRoaW5nczpcbiAqXG4gKiAgIDEuIFJld3JpdGVzIG91dGdvaW5nIEpTT04gZnJvbSBlaXRoZXIgYGluaXQuYm9keWAgb3IgYSBgUmVxdWVzdGAgdG8gcmVwYWlyXG4gKiAgICAgIHByb3ZpZGVyLXNwZWNpZmljIHJlcXVlc3QgY29uc3RyYWludHMgKHNlZSB7QGxpbmsgcmV3cml0ZVNlcnZpbmdSZXF1ZXN0fVxuICogICAgICBpbiBgLi9zZXJ2aW5nLXNhbml0aXplLmpzYCkuXG4gKiAgIDIuIEF0IGBMT0dfTEVWRUw9ZGVidWdgLCBkdW1wcyB0aGUgKHBvc3Qtc2FuaXRpemUpIEpTT04gYm9keSBzb1xuICogICAgICA0eHggZGVidWdnaW5nIGRvZXNuJ3QgaGF2ZSB0byBmaWdodCBBSSBTREsncyBgW0FycmF5XWBcbiAqICAgICAgZm9ybWF0dGVyLlxuICogICAzLiBSZXBhaXJzIGJ1ZmZlcmVkIGFuZCBzdHJlYW1pbmcgcmVzcG9uc2VzIHdoZXJlIGEgcHJvdmlkZXIgcmV0dXJuc1xuICogICAgICBgY2hvaWNlc1tdLm1lc3NhZ2UuY29udGVudGAgb3IgYGNob2ljZXNbXS5kZWx0YS5jb250ZW50YCBhcyBhIHBhcnRzXG4gKiAgICAgIGFycmF5IHRoYXQgdGhlIEFJIFNESydzIE9wZW5BSSBzY2hlbWEgcmVqZWN0cy5cbiAqXG4gKiBTYWZlIHRvIGNhbGwgZnJvbSBhbnkgaG90IHBhdGg6IHtAbGluayBmdW5jdGlvblV0aWxzLm1lbW9pemV9IGVuc3VyZXNcbiAqIHRoZSB3cmFwcGVyIGlzIGluc3RhbGxlZCBhdCBtb3N0IG9uY2UgcGVyIHByb2Nlc3MsIHNvIHN1YnNlcXVlbnRcbiAqIGNhbGxzIGFyZSBhIG5vLW9wIGV2ZW4gd2hlbiB7QGxpbmsgYnVpbGRNb2RlbH0gZmlyZXMgb24gZXZlcnkgYWdlbnRcbiAqIHN0ZXAuXG4gKi9cbmNvbnN0IHNldHVwRmV0Y2hJbnRlcmNlcHRvciA9IGZ1bmN0aW9uVXRpbHMubWVtb2l6ZSgoKTogdm9pZCA9PiB7XG4gIGdsb2JhbFRoaXMuZmV0Y2ggPSBjcmVhdGVTZXJ2aW5nRmV0Y2hJbnRlcmNlcHRvcihnbG9iYWxUaGlzLmZldGNoLmJpbmQoZ2xvYmFsVGhpcykpO1xufSk7XG5cbi8qKiBCdWlsZCB0aGUgc2VydmluZyBmZXRjaCB3cmFwcGVyOyBleHBvcnRlZCBmb3IgdHJhbnNwb3J0LWxldmVsIHJlZ3Jlc3Npb24gdGVzdHMuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VydmluZ0ZldGNoSW50ZXJjZXB0b3Iob3JpZ2luYWw6IHR5cGVvZiBmZXRjaCk6IHR5cGVvZiBmZXRjaCB7XG4gIGNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJtYXN0cmEvbGxtXCIpO1xuICByZXR1cm4gKGFzeW5jIChpbnB1dCwgaW5pdCkgPT4ge1xuICAgIGNvbnN0IHVybCA9IG5ldC51cmxCdWlsZGVyKGlucHV0KTtcbiAgICBjb25zdCBtZXRob2QgPSBpbml0Py5tZXRob2QgPz8gKGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCA/IGlucHV0Lm1ldGhvZCA6IFwiR0VUXCIpO1xuICAgIGlmICghdXJsIHx8IHVybC5wYXRobmFtZSAhPT0gQ0hBVF9DT01QTEVUSU9OU19QQVRIIHx8IG1ldGhvZC50b1VwcGVyQ2FzZSgpICE9PSBcIlBPU1RcIikge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsKGlucHV0LCBpbml0KTtcbiAgICB9XG4gICAgY29uc3QgcmV3cml0dGVuID0gYXdhaXQgcmV3cml0ZVNlcnZpbmdSZXF1ZXN0KGlucHV0LCBpbml0KTtcbiAgICBjb25zdCBwYXJzZWQgPSBqc29uLnBhcnNlPHVua25vd24+KHJld3JpdHRlbi5ib2R5KTtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBcIlBPU1RcIixcbiAgICAgIHBhcnNlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8geyB1cmw6IHVybC50b1N0cmluZygpLCBib2R5VHlwZTogXCJub24tSlNPTlwiIH1cbiAgICAgICAgOiB7IHVybDogdXJsLnRvU3RyaW5nKCksIGJvZHk6IHBhcnNlZCB9LFxuICAgICk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvcmlnaW5hbChyZXdyaXR0ZW4uaW5wdXQsIHJld3JpdHRlbi5pbml0KTtcbiAgICByZXR1cm4gcmVwYWlyU2VydmluZ1Jlc3BvbnNlKHJlc3BvbnNlKTtcbiAgfSkgYXMgdHlwZW9mIGdsb2JhbFRoaXMuZmV0Y2g7XG59XG5cbi8qKlxuICogUmV3cml0ZSBhIHNlcnZpbmcgcmVzcG9uc2Ugd2hvc2UgYm9keSBuZWVkcyByZXBhaXIsIGxlYXZpbmcgdW5zdXBwb3J0ZWRcbiAqIGNvbnRlbnQgdHlwZXMgYnl0ZS1pZGVudGljYWwuXG4gKlxuICogU1NFIHJlbWFpbnMgYSBsaXZlIHN0cmVhbTogYSBUcmFuc2Zvcm1TdHJlYW0gcmVwYWlycyBjb21wbGV0ZSBgZGF0YTpgIGxpbmVzXG4gKiBhcyBieXRlcyBhcnJpdmUgYW5kIHByZXNlcnZlcyBwYXJ0aWFsIGxpbmVzIGFjcm9zcyBuZXR3b3JrIGNodW5rcy4gSlNPTiBpc1xuICogYnVmZmVyZWQgdGhyb3VnaCB0aGUgZXhpc3RpbmcgcmVzcG9uc2UtYm9keSByZXBhaXIuIEEgbm9uLUpTT04vbm9uLVNTRSBib2R5XG4gKiBpcyByZXR1cm5lZCB1bnRvdWNoZWQgc28gdGhlIGNhbGxlciBzdGlsbCBzZWVzIHRoZSBvcmlnaW5hbCByZXNwb25zZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVwYWlyU2VydmluZ1Jlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKSA/PyBcIlwiO1xuICBpZiAoY29udGVudFR5cGUuaW5jbHVkZXMoXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiKSAmJiByZXNwb25zZS5ib2R5KSB7XG4gICAgcmV0dXJuIHJlYnVpbGRTZXJ2aW5nUmVzcG9uc2UocmVzcG9uc2UsIHJld3JpdGVTZXJ2aW5nUmVzcG9uc2VTdHJlYW0ocmVzcG9uc2UuYm9keSkpO1xuICB9XG4gIGlmICghY29udGVudFR5cGUuaW5jbHVkZXMoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSByZXR1cm4gcmVzcG9uc2U7XG5cbiAgY29uc3QgYm9keSA9IGF3YWl0IHJlc3BvbnNlLmNsb25lKCkudGV4dCgpO1xuICBjb25zdCByZXdyaXR0ZW4gPSByZXdyaXRlU2VydmluZ1Jlc3BvbnNlQm9keShib2R5KTtcbiAgaWYgKHJld3JpdHRlbiA9PT0gYm9keSkgcmV0dXJuIHJlc3BvbnNlO1xuICByZXR1cm4gcmVidWlsZFNlcnZpbmdSZXNwb25zZShyZXNwb25zZSwgcmV3cml0dGVuKTtcbn1cblxuLyoqIFJlYnVpbGQgYSB0cmFuc2Zvcm1lZCByZXNwb25zZSB3aXRob3V0IHN0YWxlIGJ5dGUtbGVuZ3RoL2VuY29kaW5nIGhlYWRlcnMuICovXG5mdW5jdGlvbiByZWJ1aWxkU2VydmluZ1Jlc3BvbnNlKFxuICByZXNwb25zZTogUmVzcG9uc2UsXG4gIGJvZHk6IHN0cmluZyB8IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+LFxuKTogUmVzcG9uc2Uge1xuICAvLyBgY29udGVudC1sZW5ndGhgIC8gYGNvbnRlbnQtZW5jb2RpbmdgIGRlc2NyaWJlIHRoZSBPUklHSU5BTCBieXRlcywgc28gdGhleVxuICAvLyBhcmUgZHJvcHBlZDogdGhlIHJld3JpdHRlbiBib2R5IGlzIGEgZGlmZmVyZW50IGxlbmd0aCBhbmQgYWxyZWFkeSBkZWNvZGVkLlxuICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMocmVzcG9uc2UuaGVhZGVycyk7XG4gIGhlYWRlcnMuZGVsZXRlKFwiY29udGVudC1sZW5ndGhcIik7XG4gIGhlYWRlcnMuZGVsZXRlKFwiY29udGVudC1lbmNvZGluZ1wiKTtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShib2R5LCB7XG4gICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICBoZWFkZXJzLFxuICB9KTtcbn1cbiJdfQ==
|
|
@@ -90,7 +90,8 @@ export declare function configureOtelPropagation(): boolean;
|
|
|
90
90
|
* OTel pipeline via `@mastra/otel-bridge`.
|
|
91
91
|
*
|
|
92
92
|
* Returns `undefined` when tracing is off: either the caller passed
|
|
93
|
-
* `enabled: false`, or auto mode finds
|
|
93
|
+
* `enabled: false`, or auto mode finds neither AppKit OTLP nor a local MLflow
|
|
94
|
+
* experiment.
|
|
94
95
|
* Skipping the bridge in that case avoids `[OtelBridge] No OTEL span
|
|
95
96
|
* found` log spam from Mastra spans that have no parent on the noop
|
|
96
97
|
* tracer.
|
package/lib/src/observability.js
CHANGED
|
@@ -47,7 +47,7 @@ import { Observability } from "@mastra/observability";
|
|
|
47
47
|
import { OtelBridge } from "@mastra/otel-bridge";
|
|
48
48
|
import { propagation } from "@opentelemetry/api";
|
|
49
49
|
import { TRACE_REQUEST_CONTEXT_KEYS } from "./config.js";
|
|
50
|
-
import { mlflowEnabled } from "./mlflow.js";
|
|
50
|
+
import { initializeAppMlflowTraceInfo, initializeDirectMlflowTracing, mlflowEnabled, } from "./mlflow.js";
|
|
51
51
|
const logger = log.logger("mastra/observability");
|
|
52
52
|
const DEFAULT_SERVICE_NAME = "mastra";
|
|
53
53
|
/** True when AppKit's global OTel pipeline is configured to export traces. */
|
|
@@ -74,7 +74,8 @@ export function configureOtelPropagation() {
|
|
|
74
74
|
* OTel pipeline via `@mastra/otel-bridge`.
|
|
75
75
|
*
|
|
76
76
|
* Returns `undefined` when tracing is off: either the caller passed
|
|
77
|
-
* `enabled: false`, or auto mode finds
|
|
77
|
+
* `enabled: false`, or auto mode finds neither AppKit OTLP nor a local MLflow
|
|
78
|
+
* experiment.
|
|
78
79
|
* Skipping the bridge in that case avoids `[OtelBridge] No OTEL span
|
|
79
80
|
* found` log spam from Mastra spans that have no parent on the noop
|
|
80
81
|
* tracer.
|
|
@@ -83,11 +84,16 @@ export async function buildObservability(options) {
|
|
|
83
84
|
const otelBase = process.env.OTEL_EXPORTER_OTLP_ENDPOINT;
|
|
84
85
|
const otelTracesOverride = process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT;
|
|
85
86
|
const otlpConfigured = isOtlpTracingConfigured();
|
|
86
|
-
|
|
87
|
+
const appMlflowTraceInfo = options?.enabled === false ? false : await initializeAppMlflowTraceInfo();
|
|
88
|
+
const directMlflowConfigured = options?.enabled === false || otlpConfigured ? false : await initializeDirectMlflowTracing();
|
|
89
|
+
if (directMlflowConfigured)
|
|
90
|
+
configureOtelPropagation();
|
|
91
|
+
const tracingConfigured = otlpConfigured || directMlflowConfigured;
|
|
92
|
+
if (options?.enabled === false || (options?.enabled !== true && !tracingConfigured)) {
|
|
87
93
|
logger.info("Mastra observability off", {
|
|
88
94
|
reason: options?.enabled === false
|
|
89
95
|
? "disabled in plugin config"
|
|
90
|
-
: "
|
|
96
|
+
: "no OTLP endpoint or direct MLflow experiment configured",
|
|
91
97
|
});
|
|
92
98
|
return undefined;
|
|
93
99
|
}
|
|
@@ -115,7 +121,13 @@ export async function buildObservability(options) {
|
|
|
115
121
|
otelBase: otelBase ?? "<unset>",
|
|
116
122
|
resolvedTracesUrl: resolvedTracesUrl ?? "<unset>",
|
|
117
123
|
feedback,
|
|
118
|
-
observability:
|
|
124
|
+
observability: directMlflowConfigured
|
|
125
|
+
? "mlflow-direct"
|
|
126
|
+
: appMlflowTraceInfo
|
|
127
|
+
? "mlflow-apps"
|
|
128
|
+
: feedback
|
|
129
|
+
? "mlflow"
|
|
130
|
+
: "otel",
|
|
119
131
|
});
|
|
120
132
|
return new Observability({
|
|
121
133
|
configs: {
|
|
@@ -127,4 +139,4 @@ export async function buildObservability(options) {
|
|
|
127
139
|
},
|
|
128
140
|
});
|
|
129
141
|
}
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vYnNlcnZhYmlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWpELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUVsRCxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQztBQXFDdEMsOEVBQThFO0FBQzlFLE1BQU0sVUFBVSx1QkFBdUI7SUFDckMsT0FBTyxPQUFPLENBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxDQUMxRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QjtJQUN0QyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2hGLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxFQUFFO1FBQ2hELE9BQU8sRUFBRSx1QkFBdUI7S0FDakMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FDdEMsT0FBbUM7SUFFbkMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQztJQUN6RCxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLENBQUM7SUFDMUUsTUFBTSxjQUFjLEdBQUcsdUJBQXVCLEVBQUUsQ0FBQztJQUVqRCxJQUFJLE9BQU8sRUFBRSxPQUFPLEtBQUssS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ2pGLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7WUFDdEMsTUFBTSxFQUNKLE9BQU8sRUFBRSxPQUFPLEtBQUssS0FBSztnQkFDeEIsQ0FBQyxDQUFDLDJCQUEyQjtnQkFDN0IsQ0FBQyxDQUFDLG1DQUFtQztTQUMxQyxDQUFDLENBQUM7UUFDSCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsT0FBTyxFQUFFLFdBQVcsSUFBSSxDQUFDLE1BQU0sWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksb0JBQW9CLENBQUM7SUFDaEcsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLElBQUksMEJBQTBCLENBQUMsQ0FBQyxDQUFDO0lBRTVGLG1FQUFtRTtJQUNuRSxzREFBc0Q7SUFDdEQscUVBQXFFO0lBQ3JFLGdFQUFnRTtJQUNoRSxtRUFBbUU7SUFDbkUsa0VBQWtFO0lBQ2xFLDZCQUE2QjtJQUM3QixNQUFNLGlCQUFpQixHQUFHLGtCQUFrQjtRQUMxQyxDQUFDLENBQUMsa0JBQWtCO1FBQ3BCLENBQUMsQ0FBQyxRQUFRO1lBQ1IsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLFlBQVk7WUFDN0MsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoQix1RUFBdUU7SUFDdkUsb0VBQW9FO0lBQ3BFLHVEQUF1RDtJQUN2RCxNQUFNLFFBQVEsR0FBRyxhQUFhLEVBQUUsQ0FBQztJQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxFQUFFO1FBQzVELFdBQVc7UUFDWCxrQkFBa0I7UUFDbEIsUUFBUSxFQUFFLFFBQVEsSUFBSSxTQUFTO1FBQy9CLGlCQUFpQixFQUFFLGlCQUFpQixJQUFJLFNBQVM7UUFDakQsUUFBUTtRQUNSLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTTtLQUM1QyxDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksYUFBYSxDQUFDO1FBQ3ZCLE9BQU8sRUFBRTtZQUNQLFdBQVcsRUFBRTtnQkFDWCxXQUFXO2dCQUNYLE1BQU0sRUFBRSxJQUFJLFVBQVUsRUFBRTtnQkFDeEIsa0JBQWtCO2FBQ25CO1NBQ0Y7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYXN0cmEgb2JzZXJ2YWJpbGl0eSB3aXJlZCB0aHJvdWdoIHRoZSBzYW1lIE9UZWwgcGlwZWxpbmUgQXBwS2l0J3NcbiAqIGJ1aWx0LWluIHBsdWdpbnMgKGUuZy4gYGFnZW50c2ApIHVzZSwgdmlhIGBAbWFzdHJhL290ZWwtYnJpZGdlYC5cbiAqXG4gKiBIb3cgdHJhY2VzIGZsb3c6XG4gKlxuICogMS4gYEBkYXRhYnJpY2tzL2FwcGtpdGAgYm9vdHMgYSBnbG9iYWwgYE5vZGVTREtgIGluXG4gKiAgICBgVGVsZW1ldHJ5TWFuYWdlci5pbml0aWFsaXplKClgIChkdXJpbmcgYGNyZWF0ZUFwcGApIHdoZW5cbiAqICAgIGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIGlzIHNldCBpbiB0aGUgcHJvY2VzcyBlbnYuXG4gKiAyLiBFdmVyeSBBcHBLaXQgcGx1Z2luIHNwYW4gKGUuZy4gdGhlIGBhZ2VudHNgIHBsdWdpbidzXG4gKiAgICBgZXhlY3V0ZVN0cmVhbWApIGlzIGNyZWF0ZWQgdmlhIHRoZSBnbG9iYWwgT1RlbCB0cmFjZXJcbiAqICAgIChgdHJhY2UuZ2V0VHJhY2VyKDxwbHVnaW4+KWApLCBzbyBpdCBsYW5kcyBvbiB0aGF0IE5vZGVTREsgYW5kXG4gKiAgICBpcyBzaGlwcGVkIHRocm91Z2ggaXRzIE9UTFAgZXhwb3J0ZXIuXG4gKiAzLiBUaGUgTWFzdHJhIGBPdGVsQnJpZGdlYCBBTFNPIGNyZWF0ZXMgcmVhbCBPVGVsIHNwYW5zIG9uIHRoZSBzYW1lXG4gKiAgICBnbG9iYWwgdHJhY2VyIGZvciBldmVyeSBNYXN0cmEgb3BlcmF0aW9uIChhZ2VudCBydW5zLCBtb2RlbFxuICogICAgY2FsbHMsIHRvb2wgaW52b2NhdGlvbnMsIHdvcmtmbG93IHN0ZXBzKS4gVGhleSBpbmhlcml0IHRoZVxuICogICAgYW1iaWVudCBPVGVsIGNvbnRleHQsIHNvIHdoZW4gTWFzdHJhIGlzIGludm9rZWQgZnJvbSBpbnNpZGUgYW5cbiAqICAgIEFwcEtpdCBIVFRQIHNwYW4gdGhlIHRyYWNlIHN0YXlzIGNvbm5lY3RlZC5cbiAqXG4gKiBOZXQgZWZmZWN0OiBNYXN0cmEgc3BhbnMgZ2V0IGV4YWN0bHkgdGhlIHRyZWF0bWVudCBBcHBLaXQnc1xuICogYGFnZW50c2AgcGx1Z2luIGdldHMuIE5vIGN1c3RvbSBPVExQIHBpcGVsaW5lIGxpdmVzIGluIHRoaXNcbiAqIHBhY2thZ2U7IHRoZSBPVExQIGVuZHBvaW50LCBoZWFkZXJzLCBhbmQgcmVzb3VyY2UgYXR0cmlidXRlcyBhcmVcbiAqIGRyaXZlbiBieSB0aGUgc3RhbmRhcmQgT1RlbCBlbnYgdmFyc1xuICogKGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgLCBgT1RFTF9FWFBPUlRFUl9PVExQX0hFQURFUlNgLFxuICogYE9URUxfU0VSVklDRV9OQU1FYCwgYE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFU2AsIC4uLikgYW5kIGNvbnN1bWVkXG4gKiBieSBBcHBLaXQncyBgVGVsZW1ldHJ5TWFuYWdlcmAuIFNldCB0aG9zZSBvbmNlIGFuZCBib3RoIEFwcEtpdCBhbmRcbiAqIE1hc3RyYSBzcGFucyBlbmQgdXAgYXQgdGhlIHNhbWUgYmFja2VuZC5cbiAqXG4gKiBXaGVuIGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIGlzIHVuc2V0IHRoZSBicmlkZ2UgaXMgbm90XG4gKiByZWdpc3RlcmVkIGF0IGFsbCAodW5sZXNzIGBvYnNlcnZhYmlsaXR5OiB0cnVlYCBmb3JjZXMgaXQgb24pLCBzb1xuICogTWFzdHJhIGRvZXMgbm90IGVtaXQgYFtPdGVsQnJpZGdlXSBObyBPVEVMIHNwYW4gZm91bmRgIHdhcm5pbmdzLlxuICpcbiAqIE9uIERhdGFicmlja3MgQXBwcyB0aGUgc3VwcG9ydGVkIHNpbmsgaXMgVW5pdHkgQ2F0YWxvZyB2aWFcbiAqIGB0ZWxlbWV0cnlfZXhwb3J0X2Rlc3RpbmF0aW9uc2AgKHRoZSBwbGF0Zm9ybSBpbmplY3RzIHRoZSBsb2NhbCBPVExQXG4gKiBzaWRlY2FyKS4gTWFuYWdlZCBNTGZsb3cgaGFzIG5vIE9UTFAgaW5nZXN0IGVuZHBvaW50IC0gZG8gbm90IHBvaW50XG4gKiBgT1RFTF9FWFBPUlRFUl9PVExQXypgIGF0IHRoZSB3b3Jrc3BhY2UgaG9zdC4gU2V0XG4gKiBgT1RFTF9QUk9QQUdBVE9SUz1ub25lYCBzbyBBcHBzIGluZ3Jlc3MgYHRyYWNlcGFyZW50YCBkb2VzIG5vdCBoaWRlXG4gKiBldmVyeSByZXF1ZXN0LXNjb3BlZCByb290IHNwYW4gZnJvbSB0aGUgVUMgYCpfdHJhY2VfdW5pZmllZGAgdmlldy5cbiAqIENoYXQgcmVxdWVzdC9yZXNwb25zZSBvbiB0aGF0IHJvb3Qgc3BhbiBpcyBzdGFtcGVkIGJ5XG4gKiBgdGVsZW1ldHJ5LmF0dGFjaENoYXRUdXJuVGVsZW1ldHJ5YCAoc2VlIGB0ZWxlbWV0cnkudHNgKS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgcHJvamVjdFV0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IE9ic2VydmFiaWxpdHkgfSBmcm9tIFwiQG1hc3RyYS9vYnNlcnZhYmlsaXR5XCI7XG5pbXBvcnQgeyBPdGVsQnJpZGdlIH0gZnJvbSBcIkBtYXN0cmEvb3RlbC1icmlkZ2VcIjtcbmltcG9ydCB7IHByb3BhZ2F0aW9uIH0gZnJvbSBcIkBvcGVudGVsZW1ldHJ5L2FwaVwiO1xuXG5pbXBvcnQgeyBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZUyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgbWxmbG93RW5hYmxlZCB9IGZyb20gXCIuL21sZmxvdy50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL29ic2VydmFiaWxpdHlcIik7XG5cbmNvbnN0IERFRkFVTFRfU0VSVklDRV9OQU1FID0gXCJtYXN0cmFcIjtcblxuLyoqIE9wdGlvbnMgZm9yIGNvbm5lY3RpbmcgTWFzdHJhIHNwYW5zIHRvIEFwcEtpdCdzIE9wZW5UZWxlbWV0cnkgcGlwZWxpbmUuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkT2JzZXJ2YWJpbGl0eU9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byB3aXJlIHRoZSBNYXN0cmEgYE90ZWxCcmlkZ2VgLiBNaXJyb3JzXG4gICAqIHtAbGluayBNYXN0cmFQbHVnaW5Db25maWcub2JzZXJ2YWJpbGl0eX06XG4gICAqXG4gICAqIC0gYHVuZGVmaW5lZGAgKGF1dG8pOiBvbiBvbmx5IHdoZW4gYE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVGAgb3JcbiAgICogICBgT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVGAgaXMgc2V0IChzYW1lIHNpZ25hbCBBcHBLaXQnc1xuICAgKiAgIGBUZWxlbWV0cnlNYW5hZ2VyYCB1c2VzIHRvIHJlZ2lzdGVyIGEgcmVhbCB0cmFjZXIpLiBXaGVuIHVuc2V0LFxuICAgKiAgIHNraXAgdGhlIGJyaWRnZSBlbnRpcmVseSBzbyBNYXN0cmEgZG9lcyBub3QgZW1pdFxuICAgKiAgIGBbT3RlbEJyaWRnZV0gTm8gT1RFTCBzcGFuIGZvdW5kYCB3YXJuaW5ncyBvbiB0aGUgbm9vcCB0cmFjZXIuXG4gICAqIC0gYHRydWVgOiBmb3JjZSBvbiBldmVuIHdpdGhvdXQgYW4gT1RMUCBlbmRwb2ludC5cbiAgICogLSBgZmFsc2VgOiBmb3JjZSBvZmYuXG4gICAqL1xuICBlbmFibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNlcnZpY2UgbmFtZSBhdHRhY2hlZCB0byB0aGUgTWFzdHJhIGBPYnNlcnZhYmlsaXR5YCBjb25maWcuIFVzZWRcbiAgICogYXMgdGhlIHRyYWNlciBzY29wZSBuYW1lIG9uIGJyaWRnZWQgT1RlbCBzcGFucyAodGhlIGBzZXJ2aWNlLm5hbWVgXG4gICAqIHJlc291cmNlIGF0dHJpYnV0ZSBpcyBvd25lZCBieSBBcHBLaXQncyBgVGVsZW1ldHJ5TWFuYWdlcmAgaW5zdGVhZFxuICAgKiAtIGl0IHJlYWRzIGBPVEVMX1NFUlZJQ0VfTkFNRWAgLyBgREFUQUJSSUNLU19BUFBfTkFNRWAgYXRcbiAgICogYGNyZWF0ZUFwcGAgdGltZSkuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHByb2plY3QgbmFtZSB0aGVuIGBcIm1hc3RyYVwiYC5cbiAgICovXG4gIHNlcnZpY2VOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogYFJlcXVlc3RDb250ZXh0YCBrZXlzIHRvIGV4dHJhY3QgYXMgc3BhbiBtZXRhZGF0YSBvbiBldmVyeSBNYXN0cmFcbiAgICogdHJhY2UuIERlZmF1bHRzIHRvIHtAbGluayBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZU30gKHVzZXIgaWQsXG4gICAqIHRocmVhZCBpZCwgcmVxdWVzdCBpZCwgZW52aXJvbm1lbnQsIG1vZGVsIG92ZXJyaWRlLCAuLi4pLlxuICAgKlxuICAgKiBTdXBwb3J0cyBkb3Qgbm90YXRpb24gZm9yIG5lc3RlZCB2YWx1ZXMgcGVyIHRoZSBNYXN0cmEgZG9jcy5cbiAgICovXG4gIHJlcXVlc3RDb250ZXh0S2V5cz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKiogVHJ1ZSB3aGVuIEFwcEtpdCdzIGdsb2JhbCBPVGVsIHBpcGVsaW5lIGlzIGNvbmZpZ3VyZWQgdG8gZXhwb3J0IHRyYWNlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc090bHBUcmFjaW5nQ29uZmlndXJlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UIHx8IHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9UUkFDRVNfRU5EUE9JTlQsXG4gICk7XG59XG5cbi8qKlxuICogSG9ub3IgdGhlIHN0YW5kYXJkIG5vLW9wIHByb3BhZ2F0b3Igc2V0dGluZyBhZnRlciBBcHBLaXQgcmVnaXN0ZXJzIGl0c1xuICogdHJhY2VyIHByb3ZpZGVyLiBBcHBLaXQgMC44MSBpbnN0YWxscyBXM0MgcHJvcGFnYXRpb24gdW5jb25kaXRpb25hbGx5LCBzb1xuICogZGlzYWJsaW5nIG9ubHkgdGhlIGdsb2JhbCBwcm9wYWdhdG9yIGtlZXBzIGFzeW5jIHNwYW4gY29udGV4dCBhY3RpdmUgd2hpbGVcbiAqIHByZXZlbnRpbmcgaW5ncmVzcyBleHRyYWN0aW9uIGFuZCBkb3duc3RyZWFtIGluamVjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZU90ZWxQcm9wYWdhdGlvbigpOiBib29sZWFuIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk9URUxfUFJPUEFHQVRPUlM/LnRyaW0oKS50b0xvd2VyQ2FzZSgpICE9PSBcIm5vbmVcIikgcmV0dXJuIGZhbHNlO1xuICBwcm9wYWdhdGlvbi5kaXNhYmxlKCk7XG4gIGxvZ2dlci5pbmZvKFwiT3BlblRlbGVtZXRyeSBwcm9wYWdhdGlvbiBkaXNhYmxlZFwiLCB7XG4gICAgc2V0dGluZzogXCJPVEVMX1BST1BBR0FUT1JTPW5vbmVcIixcbiAgfSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgTWFzdHJhIGBPYnNlcnZhYmlsaXR5YCB3aG9zZSBzcGFucyByaWRlIEFwcEtpdCdzIGdsb2JhbFxuICogT1RlbCBwaXBlbGluZSB2aWEgYEBtYXN0cmEvb3RlbC1icmlkZ2VgLlxuICpcbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiB0cmFjaW5nIGlzIG9mZjogZWl0aGVyIHRoZSBjYWxsZXIgcGFzc2VkXG4gKiBgZW5hYmxlZDogZmFsc2VgLCBvciBhdXRvIG1vZGUgZmluZHMgbm8gT1RMUCBlbmRwb2ludCAodGhlIGRlZmF1bHQpLlxuICogU2tpcHBpbmcgdGhlIGJyaWRnZSBpbiB0aGF0IGNhc2UgYXZvaWRzIGBbT3RlbEJyaWRnZV0gTm8gT1RFTCBzcGFuXG4gKiBmb3VuZGAgbG9nIHNwYW0gZnJvbSBNYXN0cmEgc3BhbnMgdGhhdCBoYXZlIG5vIHBhcmVudCBvbiB0aGUgbm9vcFxuICogdHJhY2VyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRPYnNlcnZhYmlsaXR5KFxuICBvcHRpb25zPzogQnVpbGRPYnNlcnZhYmlsaXR5T3B0aW9ucyxcbik6IFByb21pc2U8T2JzZXJ2YWJpbGl0eSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBvdGVsQmFzZSA9IHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVDtcbiAgY29uc3Qgb3RlbFRyYWNlc092ZXJyaWRlID0gcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVDtcbiAgY29uc3Qgb3RscENvbmZpZ3VyZWQgPSBpc090bHBUcmFjaW5nQ29uZmlndXJlZCgpO1xuXG4gIGlmIChvcHRpb25zPy5lbmFibGVkID09PSBmYWxzZSB8fCAob3B0aW9ucz8uZW5hYmxlZCAhPT0gdHJ1ZSAmJiAhb3RscENvbmZpZ3VyZWQpKSB7XG4gICAgbG9nZ2VyLmluZm8oXCJNYXN0cmEgb2JzZXJ2YWJpbGl0eSBvZmZcIiwge1xuICAgICAgcmVhc29uOlxuICAgICAgICBvcHRpb25zPy5lbmFibGVkID09PSBmYWxzZVxuICAgICAgICAgID8gXCJkaXNhYmxlZCBpbiBwbHVnaW4gY29uZmlnXCJcbiAgICAgICAgICA6IFwiT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UIHVuc2V0XCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHNlcnZpY2VOYW1lID0gb3B0aW9ucz8uc2VydmljZU5hbWUgPz8gKGF3YWl0IHByb2plY3RVdGlscy5uYW1lKCkpID8/IERFRkFVTFRfU0VSVklDRV9OQU1FO1xuICBjb25zdCByZXF1ZXN0Q29udGV4dEtleXMgPSBbLi4uKG9wdGlvbnM/LnJlcXVlc3RDb250ZXh0S2V5cyA/PyBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZUyldO1xuXG4gIC8vIFRoZSBPVGVsIEhUVFAgZXhwb3J0ZXIgdHJlYXRzIGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIGFzIGFcbiAgLy8gKmJhc2UqIFVSTCBhbmQgYXBwZW5kcyB0aGUgc2lnbmFsIHBhdGggaXRzZWxmIChlLmcuXG4gIC8vIGBodHRwOi8vbG9jYWxob3N0OjYwMDZgIC0+IGBodHRwOi8vbG9jYWxob3N0OjYwMDYvdjEvdHJhY2VzYCkuIExvZ1xuICAvLyB0aGUgcmVzb2x2ZWQgUE9TVCBVUkwgc28gbWlzY29uZmlndXJhdGlvbnMgKGUuZy4gYWNjaWRlbnRhbGx5XG4gIC8vIHNldHRpbmcgdGhlIGJhc2UgdmFyIHRvIGEgYC92MS90cmFjZXNgLXN1ZmZpeGVkIFVSTCwgd2hpY2ggbWFrZXNcbiAgLy8gdGhlIFNESyBQT1NUIHRvIGAuLi4vdjEvdHJhY2VzL3YxL3RyYWNlc2AgYW5kIFBob2VuaXggNDA0cykgYXJlXG4gIC8vIG9idmlvdXMgaW4gc3RhcnR1cCBvdXRwdXQuXG4gIGNvbnN0IHJlc29sdmVkVHJhY2VzVXJsID0gb3RlbFRyYWNlc092ZXJyaWRlXG4gICAgPyBvdGVsVHJhY2VzT3ZlcnJpZGVcbiAgICA6IG90ZWxCYXNlXG4gICAgICA/IGAke290ZWxCYXNlLnJlcGxhY2UoL1xcLyskLywgXCJcIil9L3YxL3RyYWNlc2BcbiAgICAgIDogdW5kZWZpbmVkO1xuICAvLyBgbWxmbG93RW5hYmxlZGAgaXMgdGhlIHNhbWUgZ2F0ZSB0aGF0IGZsaXBzIGNoYXQgZmVlZGJhY2sgb24sIHNvIHRoZVxuICAvLyBib290IGxpbmUgaXMgdGhlIG9uZS1nbGFuY2UgY2hlY2sgdGhhdCBib3RoIGhhbHZlcyBvZiB0aGUgQXBwcyBVQ1xuICAvLyBwaXBlbGluZSAoT1RMUCBzaWRlY2FyICsgZXhwZXJpbWVudCBpZCkgYXJlIHByZXNlbnQuXG4gIGNvbnN0IGZlZWRiYWNrID0gbWxmbG93RW5hYmxlZCgpO1xuICBsb2dnZXIuaW5mbyhcIk1hc3RyYSBvYnNlcnZhYmlsaXR5IHdpcmVkIHRocm91Z2ggT1RlbCBicmlkZ2VcIiwge1xuICAgIHNlcnZpY2VOYW1lLFxuICAgIHJlcXVlc3RDb250ZXh0S2V5cyxcbiAgICBvdGVsQmFzZTogb3RlbEJhc2UgPz8gXCI8dW5zZXQ+XCIsXG4gICAgcmVzb2x2ZWRUcmFjZXNVcmw6IHJlc29sdmVkVHJhY2VzVXJsID8/IFwiPHVuc2V0PlwiLFxuICAgIGZlZWRiYWNrLFxuICAgIG9ic2VydmFiaWxpdHk6IGZlZWRiYWNrID8gXCJtbGZsb3dcIiA6IFwib3RlbFwiLFxuICB9KTtcblxuICByZXR1cm4gbmV3IE9ic2VydmFiaWxpdHkoe1xuICAgIGNvbmZpZ3M6IHtcbiAgICAgIHNlcnZpY2VOYW1lOiB7XG4gICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICBicmlkZ2U6IG5ldyBPdGVsQnJpZGdlKCksXG4gICAgICAgIHJlcXVlc3RDb250ZXh0S2V5cyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vYnNlcnZhYmlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWpELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLDZCQUE2QixFQUM3QixhQUFhLEdBQ2QsTUFBTSxhQUFhLENBQUM7QUFFckIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBRWxELE1BQU0sb0JBQW9CLEdBQUcsUUFBUSxDQUFDO0FBcUN0Qyw4RUFBOEU7QUFDOUUsTUFBTSxVQUFVLHVCQUF1QjtJQUNyQyxPQUFPLE9BQU8sQ0FDWixPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLENBQzFGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCO0lBQ3RDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDaEYsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3RCLE1BQU0s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eEIsa0JBQWtCO2FBQ25CO1NBQ0Y7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYXN0cmEgb2JzZXJ2YWJpbGl0eSB3aXJlZCB0aHJvdWdoIHRoZSBzYW1lIE9UZWwgcGlwZWxpbmUgQXBwS2l0J3NcbiAqIGJ1aWx0LWluIHBsdWdpbnMgKGUuZy4gYGFnZW50c2ApIHVzZSwgdmlhIGBAbWFzdHJhL290ZWwtYnJpZGdlYC5cbiAqXG4gKiBIb3cgdHJhY2VzIGZsb3c6XG4gKlxuICogMS4gYEBkYXRhYnJpY2tzL2FwcGtpdGAgYm9vdHMgYSBnbG9iYWwgYE5vZGVTREtgIGluXG4gKiAgICBgVGVsZW1ldHJ5TWFuYWdlci5pbml0aWFsaXplKClgIChkdXJpbmcgYGNyZWF0ZUFwcGApIHdoZW5cbiAqICAgIGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIGlzIHNldCBpbiB0aGUgcHJvY2VzcyBlbnYuXG4gKiAyLiBFdmVyeSBBcHBLaXQgcGx1Z2luIHNwYW4gKGUuZy4gdGhlIGBhZ2VudHNgIHBsdWdpbidzXG4gKiAgICBgZXhlY3V0ZVN0cmVhbWApIGlzIGNyZWF0ZWQgdmlhIHRoZSBnbG9iYWwgT1RlbCB0cmFjZXJcbiAqICAgIChgdHJhY2UuZ2V0VHJhY2VyKDxwbHVnaW4+KWApLCBzbyBpdCBsYW5kcyBvbiB0aGF0IE5vZGVTREsgYW5kXG4gKiAgICBpcyBzaGlwcGVkIHRocm91Z2ggaXRzIE9UTFAgZXhwb3J0ZXIuXG4gKiAzLiBUaGUgTWFzdHJhIGBPdGVsQnJpZGdlYCBBTFNPIGNyZWF0ZXMgcmVhbCBPVGVsIHNwYW5zIG9uIHRoZSBzYW1lXG4gKiAgICBnbG9iYWwgdHJhY2VyIGZvciBldmVyeSBNYXN0cmEgb3BlcmF0aW9uIChhZ2VudCBydW5zLCBtb2RlbFxuICogICAgY2FsbHMsIHRvb2wgaW52b2NhdGlvbnMsIHdvcmtmbG93IHN0ZXBzKS4gVGhleSBpbmhlcml0IHRoZVxuICogICAgYW1iaWVudCBPVGVsIGNvbnRleHQsIHNvIHdoZW4gTWFzdHJhIGlzIGludm9rZWQgZnJvbSBpbnNpZGUgYW5cbiAqICAgIEFwcEtpdCBIVFRQIHNwYW4gdGhlIHRyYWNlIHN0YXlzIGNvbm5lY3RlZC5cbiAqXG4gKiBOZXQgZWZmZWN0OiBNYXN0cmEgc3BhbnMgZ2V0IGV4YWN0bHkgdGhlIHRyZWF0bWVudCBBcHBLaXQnc1xuICogYGFnZW50c2AgcGx1Z2luIGdldHMuIE5vIGN1c3RvbSBPVExQIHBpcGVsaW5lIGxpdmVzIGluIHRoaXNcbiAqIHBhY2thZ2U7IHRoZSBPVExQIGVuZHBvaW50LCBoZWFkZXJzLCBhbmQgcmVzb3VyY2UgYXR0cmlidXRlcyBhcmVcbiAqIGRyaXZlbiBieSB0aGUgc3RhbmRhcmQgT1RlbCBlbnYgdmFyc1xuICogKGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgLCBgT1RFTF9FWFBPUlRFUl9PVExQX0hFQURFUlNgLFxuICogYE9URUxfU0VSVklDRV9OQU1FYCwgYE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFU2AsIC4uLikgYW5kIGNvbnN1bWVkXG4gKiBieSBBcHBLaXQncyBgVGVsZW1ldHJ5TWFuYWdlcmAuIFNldCB0aG9zZSBvbmNlIGFuZCBib3RoIEFwcEtpdCBhbmRcbiAqIE1hc3RyYSBzcGFucyBlbmQgdXAgYXQgdGhlIHNhbWUgYmFja2VuZC5cbiAqXG4gKiBXaGVuIGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIGlzIHVuc2V0IHRoZSBicmlkZ2UgaXMgbm90XG4gKiByZWdpc3RlcmVkIGF0IGFsbCAodW5sZXNzIGBvYnNlcnZhYmlsaXR5OiB0cnVlYCBmb3JjZXMgaXQgb24pLCBzb1xuICogTWFzdHJhIGRvZXMgbm90IGVtaXQgYFtPdGVsQnJpZGdlXSBObyBPVEVMIHNwYW4gZm91bmRgIHdhcm5pbmdzLlxuICpcbiAqIE9uIERhdGFicmlja3MgQXBwcyB0aGUgc3VwcG9ydGVkIHNpbmsgaXMgVW5pdHkgQ2F0YWxvZyB2aWFcbiAqIGB0ZWxlbWV0cnlfZXhwb3J0X2Rlc3RpbmF0aW9uc2AgKHRoZSBwbGF0Zm9ybSBpbmplY3RzIHRoZSBsb2NhbCBPVExQXG4gKiBzaWRlY2FyKS4gTWFuYWdlZCBNTGZsb3cgaGFzIG5vIE9UTFAgaW5nZXN0IGVuZHBvaW50IC0gZG8gbm90IHBvaW50XG4gKiBgT1RFTF9FWFBPUlRFUl9PVExQXypgIGF0IHRoZSB3b3Jrc3BhY2UgaG9zdC4gU2V0XG4gKiBgT1RFTF9QUk9QQUdBVE9SUz1ub25lYCBzbyBBcHBzIGluZ3Jlc3MgYHRyYWNlcGFyZW50YCBkb2VzIG5vdCBoaWRlXG4gKiBldmVyeSByZXF1ZXN0LXNjb3BlZCByb290IHNwYW4gZnJvbSB0aGUgVUMgYCpfdHJhY2VfdW5pZmllZGAgdmlldy5cbiAqIENoYXQgcmVxdWVzdC9yZXNwb25zZSBvbiB0aGF0IHJvb3Qgc3BhbiBpcyBzdGFtcGVkIGJ5XG4gKiBgdGVsZW1ldHJ5LmF0dGFjaENoYXRUdXJuVGVsZW1ldHJ5YCAoc2VlIGB0ZWxlbWV0cnkudHNgKS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgcHJvamVjdFV0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IE9ic2VydmFiaWxpdHkgfSBmcm9tIFwiQG1hc3RyYS9vYnNlcnZhYmlsaXR5XCI7XG5pbXBvcnQgeyBPdGVsQnJpZGdlIH0gZnJvbSBcIkBtYXN0cmEvb3RlbC1icmlkZ2VcIjtcbmltcG9ydCB7IHByb3BhZ2F0aW9uIH0gZnJvbSBcIkBvcGVudGVsZW1ldHJ5L2FwaVwiO1xuXG5pbXBvcnQgeyBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZUyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHtcbiAgaW5pdGlhbGl6ZUFwcE1sZmxvd1RyYWNlSW5mbyxcbiAgaW5pdGlhbGl6ZURpcmVjdE1sZmxvd1RyYWNpbmcsXG4gIG1sZmxvd0VuYWJsZWQsXG59IGZyb20gXCIuL21sZmxvdy50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL29ic2VydmFiaWxpdHlcIik7XG5cbmNvbnN0IERFRkFVTFRfU0VSVklDRV9OQU1FID0gXCJtYXN0cmFcIjtcblxuLyoqIE9wdGlvbnMgZm9yIGNvbm5lY3RpbmcgTWFzdHJhIHNwYW5zIHRvIEFwcEtpdCdzIE9wZW5UZWxlbWV0cnkgcGlwZWxpbmUuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkT2JzZXJ2YWJpbGl0eU9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byB3aXJlIHRoZSBNYXN0cmEgYE90ZWxCcmlkZ2VgLiBNaXJyb3JzXG4gICAqIHtAbGluayBNYXN0cmFQbHVnaW5Db25maWcub2JzZXJ2YWJpbGl0eX06XG4gICAqXG4gICAqIC0gYHVuZGVmaW5lZGAgKGF1dG8pOiBvbiBvbmx5IHdoZW4gYE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVGAgb3JcbiAgICogICBgT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVGAgaXMgc2V0IChzYW1lIHNpZ25hbCBBcHBLaXQnc1xuICAgKiAgIGBUZWxlbWV0cnlNYW5hZ2VyYCB1c2VzIHRvIHJlZ2lzdGVyIGEgcmVhbCB0cmFjZXIpLiBXaGVuIHVuc2V0LFxuICAgKiAgIHNraXAgdGhlIGJyaWRnZSBlbnRpcmVseSBzbyBNYXN0cmEgZG9lcyBub3QgZW1pdFxuICAgKiAgIGBbT3RlbEJyaWRnZV0gTm8gT1RFTCBzcGFuIGZvdW5kYCB3YXJuaW5ncyBvbiB0aGUgbm9vcCB0cmFjZXIuXG4gICAqIC0gYHRydWVgOiBmb3JjZSBvbiBldmVuIHdpdGhvdXQgYW4gT1RMUCBlbmRwb2ludC5cbiAgICogLSBgZmFsc2VgOiBmb3JjZSBvZmYuXG4gICAqL1xuICBlbmFibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNlcnZpY2UgbmFtZSBhdHRhY2hlZCB0byB0aGUgTWFzdHJhIGBPYnNlcnZhYmlsaXR5YCBjb25maWcuIFVzZWRcbiAgICogYXMgdGhlIHRyYWNlciBzY29wZSBuYW1lIG9uIGJyaWRnZWQgT1RlbCBzcGFucyAodGhlIGBzZXJ2aWNlLm5hbWVgXG4gICAqIHJlc291cmNlIGF0dHJpYnV0ZSBpcyBvd25lZCBieSBBcHBLaXQncyBgVGVsZW1ldHJ5TWFuYWdlcmAgaW5zdGVhZFxuICAgKiAtIGl0IHJlYWRzIGBPVEVMX1NFUlZJQ0VfTkFNRWAgLyBgREFUQUJSSUNLU19BUFBfTkFNRWAgYXRcbiAgICogYGNyZWF0ZUFwcGAgdGltZSkuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHByb2plY3QgbmFtZSB0aGVuIGBcIm1hc3RyYVwiYC5cbiAgICovXG4gIHNlcnZpY2VOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogYFJlcXVlc3RDb250ZXh0YCBrZXlzIHRvIGV4dHJhY3QgYXMgc3BhbiBtZXRhZGF0YSBvbiBldmVyeSBNYXN0cmFcbiAgICogdHJhY2UuIERlZmF1bHRzIHRvIHtAbGluayBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZU30gKHVzZXIgaWQsXG4gICAqIHRocmVhZCBpZCwgcmVxdWVzdCBpZCwgZW52aXJvbm1lbnQsIG1vZGVsIG92ZXJyaWRlLCAuLi4pLlxuICAgKlxuICAgKiBTdXBwb3J0cyBkb3Qgbm90YXRpb24gZm9yIG5lc3RlZCB2YWx1ZXMgcGVyIHRoZSBNYXN0cmEgZG9jcy5cbiAgICovXG4gIHJlcXVlc3RDb250ZXh0S2V5cz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKiogVHJ1ZSB3aGVuIEFwcEtpdCdzIGdsb2JhbCBPVGVsIHBpcGVsaW5lIGlzIGNvbmZpZ3VyZWQgdG8gZXhwb3J0IHRyYWNlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc090bHBUcmFjaW5nQ29uZmlndXJlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UIHx8IHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9UUkFDRVNfRU5EUE9JTlQsXG4gICk7XG59XG5cbi8qKlxuICogSG9ub3IgdGhlIHN0YW5kYXJkIG5vLW9wIHByb3BhZ2F0b3Igc2V0dGluZyBhZnRlciBBcHBLaXQgcmVnaXN0ZXJzIGl0c1xuICogdHJhY2VyIHByb3ZpZGVyLiBBcHBLaXQgMC44MSBpbnN0YWxscyBXM0MgcHJvcGFnYXRpb24gdW5jb25kaXRpb25hbGx5LCBzb1xuICogZGlzYWJsaW5nIG9ubHkgdGhlIGdsb2JhbCBwcm9wYWdhdG9yIGtlZXBzIGFzeW5jIHNwYW4gY29udGV4dCBhY3RpdmUgd2hpbGVcbiAqIHByZXZlbnRpbmcgaW5ncmVzcyBleHRyYWN0aW9uIGFuZCBkb3duc3RyZWFtIGluamVjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZU90ZWxQcm9wYWdhdGlvbigpOiBib29sZWFuIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk9URUxfUFJPUEFHQVRPUlM/LnRyaW0oKS50b0xvd2VyQ2FzZSgpICE9PSBcIm5vbmVcIikgcmV0dXJuIGZhbHNlO1xuICBwcm9wYWdhdGlvbi5kaXNhYmxlKCk7XG4gIGxvZ2dlci5pbmZvKFwiT3BlblRlbGVtZXRyeSBwcm9wYWdhdGlvbiBkaXNhYmxlZFwiLCB7XG4gICAgc2V0dGluZzogXCJPVEVMX1BST1BBR0FUT1JTPW5vbmVcIixcbiAgfSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgTWFzdHJhIGBPYnNlcnZhYmlsaXR5YCB3aG9zZSBzcGFucyByaWRlIEFwcEtpdCdzIGdsb2JhbFxuICogT1RlbCBwaXBlbGluZSB2aWEgYEBtYXN0cmEvb3RlbC1icmlkZ2VgLlxuICpcbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiB0cmFjaW5nIGlzIG9mZjogZWl0aGVyIHRoZSBjYWxsZXIgcGFzc2VkXG4gKiBgZW5hYmxlZDogZmFsc2VgLCBvciBhdXRvIG1vZGUgZmluZHMgbmVpdGhlciBBcHBLaXQgT1RMUCBub3IgYSBsb2NhbCBNTGZsb3dcbiAqIGV4cGVyaW1lbnQuXG4gKiBTa2lwcGluZyB0aGUgYnJpZGdlIGluIHRoYXQgY2FzZSBhdm9pZHMgYFtPdGVsQnJpZGdlXSBObyBPVEVMIHNwYW5cbiAqIGZvdW5kYCBsb2cgc3BhbSBmcm9tIE1hc3RyYSBzcGFucyB0aGF0IGhhdmUgbm8gcGFyZW50IG9uIHRoZSBub29wXG4gKiB0cmFjZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZE9ic2VydmFiaWxpdHkoXG4gIG9wdGlvbnM/OiBCdWlsZE9ic2VydmFiaWxpdHlPcHRpb25zLFxuKTogUHJvbWlzZTxPYnNlcnZhYmlsaXR5IHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IG90ZWxCYXNlID0gcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UO1xuICBjb25zdCBvdGVsVHJhY2VzT3ZlcnJpZGUgPSBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfVFJBQ0VTX0VORFBPSU5UO1xuICBjb25zdCBvdGxwQ29uZmlndXJlZCA9IGlzT3RscFRyYWNpbmdDb25maWd1cmVkKCk7XG4gIGNvbnN0IGFwcE1sZmxvd1RyYWNlSW5mbyA9XG4gICAgb3B0aW9ucz8uZW5hYmxlZCA9PT0gZmFsc2UgPyBmYWxzZSA6IGF3YWl0IGluaXRpYWxpemVBcHBNbGZsb3dUcmFjZUluZm8oKTtcbiAgY29uc3QgZGlyZWN0TWxmbG93Q29uZmlndXJlZCA9XG4gICAgb3B0aW9ucz8uZW5hYmxlZCA9PT0gZmFsc2UgfHwgb3RscENvbmZpZ3VyZWQgPyBmYWxzZSA6IGF3YWl0IGluaXRpYWxpemVEaXJlY3RNbGZsb3dUcmFjaW5nKCk7XG4gIGlmIChkaXJlY3RNbGZsb3dDb25maWd1cmVkKSBjb25maWd1cmVPdGVsUHJvcGFnYXRpb24oKTtcbiAgY29uc3QgdHJhY2luZ0NvbmZpZ3VyZWQgPSBvdGxwQ29uZmlndXJlZCB8fCBkaXJlY3RNbGZsb3dDb25maWd1cmVkO1xuXG4gIGlmIChvcHRpb25zPy5lbmFibGVkID09PSBmYWxzZSB8fCAob3B0aW9ucz8uZW5hYmxlZCAhPT0gdHJ1ZSAmJiAhdHJhY2luZ0NvbmZpZ3VyZWQpKSB7XG4gICAgbG9nZ2VyLmluZm8oXCJNYXN0cmEgb2JzZXJ2YWJpbGl0eSBvZmZcIiwge1xuICAgICAgcmVhc29uOlxuICAgICAgICBvcHRpb25zPy5lbmFibGVkID09PSBmYWxzZVxuICAgICAgICAgID8gXCJkaXNhYmxlZCBpbiBwbHVnaW4gY29uZmlnXCJcbiAgICAgICAgICA6IFwibm8gT1RMUCBlbmRwb2ludCBvciBkaXJlY3QgTUxmbG93IGV4cGVyaW1lbnQgY29uZmlndXJlZFwiLFxuICAgIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzZXJ2aWNlTmFtZSA9IG9wdGlvbnM/LnNlcnZpY2VOYW1lID8/IChhd2FpdCBwcm9qZWN0VXRpbHMubmFtZSgpKSA/PyBERUZBVUxUX1NFUlZJQ0VfTkFNRTtcbiAgY29uc3QgcmVxdWVzdENvbnRleHRLZXlzID0gWy4uLihvcHRpb25zPy5yZXF1ZXN0Q29udGV4dEtleXMgPz8gVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVMpXTtcblxuICAvLyBUaGUgT1RlbCBIVFRQIGV4cG9ydGVyIHRyZWF0cyBgT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UYCBhcyBhXG4gIC8vICpiYXNlKiBVUkwgYW5kIGFwcGVuZHMgdGhlIHNpZ25hbCBwYXRoIGl0c2VsZiAoZS5nLlxuICAvLyBgaHR0cDovL2xvY2FsaG9zdDo2MDA2YCAtPiBgaHR0cDovL2xvY2FsaG9zdDo2MDA2L3YxL3RyYWNlc2ApLiBMb2dcbiAgLy8gdGhlIHJlc29sdmVkIFBPU1QgVVJMIHNvIG1pc2NvbmZpZ3VyYXRpb25zIChlLmcuIGFjY2lkZW50YWxseVxuICAvLyBzZXR0aW5nIHRoZSBiYXNlIHZhciB0byBhIGAvdjEvdHJhY2VzYC1zdWZmaXhlZCBVUkwsIHdoaWNoIG1ha2VzXG4gIC8vIHRoZSBTREsgUE9TVCB0byBgLi4uL3YxL3RyYWNlcy92MS90cmFjZXNgIGFuZCBQaG9lbml4IDQwNHMpIGFyZVxuICAvLyBvYnZpb3VzIGluIHN0YXJ0dXAgb3V0cHV0LlxuICBjb25zdCByZXNvbHZlZFRyYWNlc1VybCA9IG90ZWxUcmFjZXNPdmVycmlkZVxuICAgID8gb3RlbFRyYWNlc092ZXJyaWRlXG4gICAgOiBvdGVsQmFzZVxuICAgICAgPyBgJHtvdGVsQmFzZS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpfS92MS90cmFjZXNgXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgLy8gYG1sZmxvd0VuYWJsZWRgIGlzIHRoZSBzYW1lIGdhdGUgdGhhdCBmbGlwcyBjaGF0IGZlZWRiYWNrIG9uLCBzbyB0aGVcbiAgLy8gYm9vdCBsaW5lIGlzIHRoZSBvbmUtZ2xhbmNlIGNoZWNrIHRoYXQgYm90aCBoYWx2ZXMgb2YgdGhlIEFwcHMgVUNcbiAgLy8gcGlwZWxpbmUgKE9UTFAgc2lkZWNhciArIGV4cGVyaW1lbnQgaWQpIGFyZSBwcmVzZW50LlxuICBjb25zdCBmZWVkYmFjayA9IG1sZmxvd0VuYWJsZWQoKTtcbiAgbG9nZ2VyLmluZm8oXCJNYXN0cmEgb2JzZXJ2YWJpbGl0eSB3aXJlZCB0aHJvdWdoIE9UZWwgYnJpZGdlXCIsIHtcbiAgICBzZXJ2aWNlTmFtZSxcbiAgICByZXF1ZXN0Q29udGV4dEtleXMsXG4gICAgb3RlbEJhc2U6IG90ZWxCYXNlID8/IFwiPHVuc2V0PlwiLFxuICAgIHJlc29sdmVkVHJhY2VzVXJsOiByZXNvbHZlZFRyYWNlc1VybCA/PyBcIjx1bnNldD5cIixcbiAgICBmZWVkYmFjayxcbiAgICBvYnNlcnZhYmlsaXR5OiBkaXJlY3RNbGZsb3dDb25maWd1cmVkXG4gICAgICA/IFwibWxmbG93LWRpcmVjdFwiXG4gICAgICA6IGFwcE1sZmxvd1RyYWNlSW5mb1xuICAgICAgICA/IFwibWxmbG93LWFwcHNcIlxuICAgICAgICA6IGZlZWRiYWNrXG4gICAgICAgICAgPyBcIm1sZmxvd1wiXG4gICAgICAgICAgOiBcIm90ZWxcIixcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmlsaXR5KHtcbiAgICBjb25maWdzOiB7XG4gICAgICBzZXJ2aWNlTmFtZToge1xuICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgYnJpZGdlOiBuZXcgT3RlbEJyaWRnZSgpLFxuICAgICAgICByZXF1ZXN0Q29udGV4dEtleXMsXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xufVxuIl19
|