@dbx-tools/appkit-mastra 0.6.217 → 0.6.219

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/lib/src/memory.js CHANGED
@@ -329,7 +329,7 @@ function collectAgentDefinitions(config) {
329
329
  return [];
330
330
  if (Array.isArray(agents))
331
331
  return agents;
332
- if (typeof agents.instructions === "string") {
332
+ if ("instructions" in agents) {
333
333
  return [agents];
334
334
  }
335
335
  return Object.values(agents);
@@ -338,4 +338,4 @@ function collectAgentDefinitions(config) {
338
338
  function withId(value, fallback) {
339
339
  return value.id ? value : { ...value, id: fallback };
340
340
  }
341
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7QUFFSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQW1CLE1BQU0sSUFBSSxDQUFDO0FBSTNDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTNDLGtGQUFrRjtBQUNsRixNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFFaEQsMERBQTBEO0FBQzFELFNBQVMsY0FBYztJQUNyQixPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELHlGQUF5RjtBQUN6RixTQUFTLHlCQUF5QixDQUFDLEdBQVk7SUFDN0MsT0FBTyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMs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O1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDdkIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ3pDLElBQUksT0FBUSxNQUFnQyxDQUFDLFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN2RSxPQUFPLENBQUMsTUFBK0IsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBK0MsQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRCxnRUFBZ0U7QUFDaEUsU0FBUyxNQUFNLENBQTRCLEtBQVEsRUFBRSxRQUFnQjtJQUNuRSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUM7QUFDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGFrZWJhc2UtYmFja2VkIE1hc3RyYSBtZW1vcnkgd2lyaW5nLlxuICpcbiAqIFByb3ZpZGVzIGEge0BsaW5rIE1lbW9yeUJ1aWxkZXJ9IHRoYXQgbWludHMgb25lIGBNZW1vcnlgIHBlciBhZ2VudFxuICogd2l0aCB0d28gaW5kZXBlbmRlbnQga25vYnM6XG4gKlxuICogLSAqKlN0b3JhZ2UqKiAodGhyZWFkcyAvIG1lc3NhZ2VzIHZpYSBgUG9zdGdyZXNTdG9yZWApOiBkZWZhdWx0cyB0b1xuICogICAqKnBlci1hZ2VudCoqIG5hbWVzcGFjaW5nIHZpYSB7QGxpbmsgYWdlbnRTdG9yYWdlU2NoZW1hTmFtZX0gc29cbiAqICAgY29udmVyc2F0aW9uIGhpc3Rvcnkgc3RheXMgaXNvbGF0ZWQgYmV0d2VlbiBhZ2VudHMgaW4gdGhlIHNhbWVcbiAqICAgZGF0YWJhc2UuIGBQb3N0Z3Jlc1N0b3JlYCBhdXRvLWNyZWF0ZXMgdGhlIHNjaGVtYSB3aXRoXG4gKiAgIGBDUkVBVEUgU0NIRU1BIElGIE5PVCBFWElTVFNgIG9uIGluaXQuIEEgZmFpbGVkIG1pZ3JhdGlvbiAoY29tbW9uIG9uXG4gKiAgIExha2ViYXNlIHdoZW4gdGhlIGNvbm5lY3Rpbmcgcm9sZSBpcyBub3QgdGhlIHRhYmxlIG93bmVyKSBpcyBsb2dnZWRcbiAqICAgYW5kIHNraXBwZWQgdmlhIHtAbGluayB3aXRoU29mdFN0b3JhZ2VJbml0fSBzbyBleGlzdGluZyB0YWJsZXMga2VlcFxuICogICBzZXJ2aW5nIGluc3RlYWQgb2YgcmV0cnlpbmcgRERMIG9uIGV2ZXJ5IHJlcXVlc3QuXG4gKiAtICoqTWVtb3J5KiogKHNlbWFudGljIHJlY2FsbCB2aWEgYFBnVmVjdG9yYCk6IGRlZmF1bHRzIHRvIGEgc2luZ2xlXG4gKiAgICoqc2hhcmVkKiogaW5zdGFuY2UgYWNyb3NzIGV2ZXJ5IGFnZW50LiBDcm9zcy1hZ2VudCByZWNhbGwgb24gb25lXG4gKiAgIGluZGV4IGlzIGFsbW9zdCBhbHdheXMgd2hhdCB1c2VycyB3YW50OyBvcHQgaW50byBwZXItYWdlbnQgcmVjYWxsXG4gKiAgIGJ5IHBhc3NpbmcgYSB7QGxpbmsgTWFzdHJhTWVtb3J5Q29uZmlnT3ZlcnJpZGV9IG9uIHRoZSBhZ2VudC5cbiAqXG4gKiBBZGRpdGlvbmFsbHksIHtAbGluayBNZW1vcnlCdWlsZGVyLmluc3RhbmNlU3RvcmFnZX0gcmV0dXJucyBhXG4gKiAqKk1hc3RyYS1pbnN0YW5jZS1sZXZlbCoqIGBQb3N0Z3Jlc1N0b3JlYCAoc2NoZW1hIGBtYXN0cmFfaW5zdGFuY2VgKVxuICogdXNlZCBmb3Igd29ya2Zsb3cgc25hcHNob3RzIC0gdGhlIHBlcnNpc3RlbmNlIGxheWVyXG4gKiBgYWdlbnQucmVzdW1lU3RyZWFtKClgIHJlYWRzIGZyb20gd2hlbiB3YWtpbmcgYSBzdXNwZW5kZWRcbiAqIGByZXF1aXJlQXBwcm92YWxgIHRvb2wgY2FsbC4gUGVyLWFnZW50IHN0b3JlcyBhcmUgbm90IGVub3VnaCBmb3JcbiAqIHRoaXM6IHdvcmtmbG93IHJ1bnMgYXJlIHNjb3BlZCB0byB0aGUgTWFzdHJhIGluc3RhbmNlLCBub3QgYW5cbiAqIGluZGl2aWR1YWwgYWdlbnQncyBgTWVtb3J5YC5cbiAqXG4gKiBQbHVnaW4tbGV2ZWwgYGNvbmZpZy5zdG9yYWdlYCAvIGBjb25maWcubWVtb3J5YCBhY3QgYXMgdGhlIGJhc2VsaW5lXG4gKiAoYXV0by1kZWZhdWx0ZWQgdG8gYHRydWVgIGluIGBwbHVnaW4udHNgIHdoZW4gdGhlIGBsYWtlYmFzZWAgcGx1Z2luXG4gKiBpcyByZWdpc3RlcmVkKTsgcGVyLWFnZW50IHNldHRpbmdzIGNhc2NhZGUgb24gdG9wIG9mIHRoYXQuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGdldFVzZXJuYW1lV2l0aEFwaUxvb2t1cCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGVycm9yLCBoYXNoLCBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgZmFzdGVtYmVkIH0gZnJvbSBcIkBtYXN0cmEvZmFzdGVtYmVkXCI7XG5pbXBvcnQgeyBNZW1vcnkgfSBmcm9tIFwiQG1hc3RyYS9tZW1vcnlcIjtcbmltcG9ydCB7IFBnVmVjdG9yLCBQb3N0Z3Jlc1N0b3JlIH0gZnJvbSBcIkBtYXN0cmEvcGdcIjtcbmltcG9ydCB7IFBvb2wsIHR5cGUgUG9vbENvbmZpZyB9IGZyb20gXCJwZ1wiO1xuXG5pbXBvcnQgdHlwZSB7IE1hc3RyYUFnZW50RGVmaW5pdGlvbiwgTWFzdHJhTWVtb3J5Q29uZmlnT3ZlcnJpZGUgfSBmcm9tIFwiLi9hZ2VudHMudHNcIjtcbmltcG9ydCB0eXBlIHsgTWFzdHJhUGx1Z2luQ29uZmlnIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQgeyBhZ2VudFN0b3JhZ2VTY2hlbWFOYW1lIH0gZnJvbSBcIi4vc3RvcmFnZS1zY2hlbWEudHNcIjtcbmltcG9ydCB7IHN1bW1hcnlNb2RlbCwgVElUTEVfSU5TVFJVQ1RJT05TIH0gZnJvbSBcIi4vc3VtbWFyaXplLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJtYXN0cmEvbWVtb3J5XCIpO1xuXG4vKiogUHJvY2Vzcy13aWRlIGRlZHVwZSBzbyBpbnN0YW5jZSArIHBlci1hZ2VudCBzdG9yZXMgc2hhcmUgb25lIG93bmVyc2hpcCBsb2cuICovXG5jb25zdCBsb2dnZWRNaWdyYXRpb25FcnJvcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuLyoqIFdoZXRoZXIgYExPR19MRVZFTGAgaXMgY3VycmVudGx5IGF0IG9yIGJlbG93IGRlYnVnLiAqL1xuZnVuY3Rpb24gaXNEZWJ1Z0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiBsb2cuaXNMZXZlbEVuYWJsZWQoXCJkZWJ1Z1wiKTtcbn1cblxuLyoqIFdoZXRoZXIgYSBtaWdyYXRpb24gZmFpbGVkIG9ubHkgYmVjYXVzZSB0aGlzIHJvbGUgZG9lcyBub3Qgb3duIGFuIGV4aXN0aW5nIG9iamVjdC4gKi9cbmZ1bmN0aW9uIGlzT3duZXJzaGlwTWlncmF0aW9uRXJyb3IoZXJyOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBlcnJvci5lcnJvckNvbnRleHQoZXJyKS5oYXNNZXNzYWdlKFwibXVzdCBiZSBvd25lclwiKTtcbn1cblxuLyoqXG4gKiBTb2Z0ZW4ge0BsaW5rIFBvc3RncmVzU3RvcmUuaW5pdH0gc28gYSBmYWlsZWQgbWlncmF0aW9uIChlLmcuIExha2ViYXNlXG4gKiBgbXVzdCBiZSBvd25lciBvZiB0YWJsZSDigKZgIG9uIGBBTFRFUmApIGlzIGxvZ2dlZCBvbmNlIGluc3RlYWQgb2YgcmV0aHJvd25cbiAqIG9uIGV2ZXJ5IHN0b3JhZ2UgY2FsbC5cbiAqXG4gKiBNYXN0cmEncyBgYXVnbWVudFdpdGhJbml0YCByZXRyaWVzIGluaXQgZm9yZXZlciB3aGVuIGl0IHRocm93cywgc28gdGhlXG4gKiBvbmx5IHdheSB0byBrZWVwIHNlcnZpbmcgYWdhaW5zdCBhbiBhbHJlYWR5LXVzYWJsZSBzY2hlbWEgaXMgdG8gdHJlYXRcbiAqIG1pZ3JhdGlvbiBmYWlsdXJlIGFzIHN1Y2Nlc3MgYW5kIG1hcmsgdGhlIHN0b3JlIGluaXRpYWxpemVkLlxuICpcbiAqIENvbmN1cnJlbnQgZmlyc3QgY2FsbGVycyBzaGFyZSBvbmUgc29mdCBhdHRlbXB0LiBOb24tb3duZXJzaGlwIGZhaWx1cmVzIHN0YXlcbiAqIGZhdGFsIHNvIG1pc3Npbmcgc2NoZW1hcy90YWJsZXMgYXJlIHJldHJpZWQgb3Igc3VyZmFjZWQgaW5zdGVhZCBvZiBoaWRkZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoU29mdFN0b3JhZ2VJbml0KHN0b3JlOiBQb3N0Z3Jlc1N0b3JlKTogUG9zdGdyZXNTdG9yZSB7XG4gIGNvbnN0IHNvZnQgPSBzdG9yZSBhcyB1bmtub3duIGFzIHtcbiAgICBpbml0OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc2NoZW1hPzogc3RyaW5nO1xuICAgIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG4gIH07XG4gIGNvbnN0IG9yaWdpbmFsSW5pdCA9IHNvZnQuaW5pdC5iaW5kKHNvZnQpO1xuICBsZXQgc29mdEluaXRQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkO1xuXG4gIHNvZnQuaW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoc29mdC5pc0luaXRpYWxpemVkKSByZXR1cm47XG4gICAgc29mdEluaXRQcm9taXNlID8/PSAoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgb3JpZ2luYWxJbml0KCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCFpc093bmVyc2hpcE1pZ3JhdGlvbkVycm9yKGVycikpIHRocm93IGVycjtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLmVycm9yTWVzc2FnZShlcnIpO1xuICAgICAgICBpZiAoIWxvZ2dlZE1pZ3JhdGlvbkVycm9ycy5oYXMobWVzc2FnZSkpIHtcbiAgICAgICAgICBsb2dnZWRNaWdyYXRpb25FcnJvcnMuYWRkKG1lc3NhZ2UpO1xuICAgICAgICAgIGlmIChpc0RlYnVnRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJtYXN0cmEgc3RvcmFnZSBtaWdyYXRpb24gZmFpbGVkXCIsIGVycik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKFwibWFzdHJhIHN0b3JhZ2UgbWlncmF0aW9uIGZhaWxlZFwiLCB7XG4gICAgICAgICAgICAgIGVycm9yOiBtZXNzYWdlLFxuICAgICAgICAgICAgICBzdG9yZUlkOiBzb2Z0LmlkLFxuICAgICAgICAgICAgICBzY2hlbWE6IHNvZnQuc2NoZW1hLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc29mdEluaXRQcm9taXNlO1xuICAgICAgc29mdC5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNvZnRJbml0UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH07XG4gIHJldHVybiBzdG9yZTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGRlZGljYXRlZCAqKnNlcnZpY2UtcHJpbmNpcGFsKiogTGFrZWJhc2UgcG9vbCBmb3IgTWFzdHJhXG4gKiBtZW1vcnkgZnJvbSB0aGUgbGFrZWJhc2UgcGx1Z2luJ3MgcmVzb2x2ZWQgU1AgcGcgY29uZmlnLlxuICpcbiAqIFRoZSBwbHVnaW4ncyBgZXhwb3J0cygpLnBvb2xgIGlzIGEgYFJvdXRpbmdQb29sYCB0aGF0IHN3aXRjaGVzIHRvXG4gKiB0aGUgcGVyLXVzZXIgKE9CTykgcG9vbCB3aGVuZXZlciBhIHF1ZXJ5IHJ1bnMgaW5zaWRlIGFuIGBhc1VzZXJgXG4gKiBzY29wZSAtIGV4YWN0bHkgdGhlIGNvbnRleHQgdGhlIG1hc3RyYSBwbHVnaW4gZXN0YWJsaXNoZXMgYXJvdW5kXG4gKiBldmVyeSBjaGF0IHR1cm4uIE1lbW9yeSAodGhyZWFkcyAvIG1lc3NhZ2VzICsgc2VtYW50aWMgcmVjYWxsKSBtdXN0XG4gKiBpbnN0ZWFkIGFsd2F5cyBhY3QgYXMgdGhlIGFwcCBzZXJ2aWNlIHByaW5jaXBhbDogaXQgb3ducyB0aGVcbiAqIGF1dG8tY3JlYXRlZCBgbWFzdHJhXypgIHNjaGVtYXMgKGEgcGVyLXVzZXIgcm9sZSB1c3VhbGx5IGNhbid0XG4gKiBgQ1JFQVRFIFNDSEVNQWApIGFuZCBpcyBzaGFyZWQgYWNyb3NzIHVzZXJzLCBzbyBpdCBjYW5ub3QgaW5oZXJpdCBhXG4gKiByZXF1ZXN0J3MgT0JPIGlkZW50aXR5LlxuICpcbiAqIGBwZ0NvbmZpZ2AgbXVzdCBiZSB0aGUgcGx1Z2luJ3MgYGV4cG9ydHMoKS5nZXRQZ0NvbmZpZygpYCBldmFsdWF0ZWRcbiAqICoqb3V0c2lkZSoqIGFueSBgYXNVc2VyYCBzY29wZSAoaS5lLiBkdXJpbmcgc2V0dXApLCBzbyBpdCBjYXJyaWVzXG4gKiB0aGUgU1AgY29ubmVjdGlvbiB0YXJnZXQsIE9BdXRoIHRva2VuLXJlZnJlc2ggYHBhc3N3b3JkYCBjYWxsYmFjayxcbiAqIGFuZCBhbnkgYGxha2ViYXNlKHsgcG9vbCB9KWAgdHVuaW5nIG92ZXJyaWRlcyAtIGFsbCBvZiB3aGljaCB0aGlzXG4gKiBwb29sIGluaGVyaXRzLiBTZWUgdGhlIGNhbGwgc2l0ZSBpbiBgcGx1Z2luLnRzYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVNlcnZpY2VQcmluY2lwYWxQb29sKHBnQ29uZmlnOiBQb29sQ29uZmlnKTogUHJvbWlzZTxQb29sPiB7XG4gIC8vIGBnZXRQZ0NvbmZpZygpYCByZXNvbHZlcyB0aGUgU1AgdXNlcm5hbWUgc3luY2hyb25vdXNseSBmcm9tXG4gIC8vIGBQR1VTRVJgIC8gYERBVEFCUklDS1NfQ0xJRU5UX0lEYDsgZmFsbCBiYWNrIHRvIHRoZSBhc3luYyBBUElcbiAgLy8gbG9va3VwIChlLmcuIGxvY2FsIGRldiBhdXRoZW50aWNhdGluZyB2aWEgUEFUKSBzbyB0aGUgcG9vbCBhbHdheXNcbiAgLy8gaGFzIGFuIGlkZW50aXR5IHRvIGNvbm5lY3Qgd2l0aC5cbiAgY29uc3QgdXNlciA9IHBnQ29uZmlnLnVzZXIgPz8gKGF3YWl0IGdldFVzZXJuYW1lV2l0aEFwaUxvb2t1cCgpKTtcbiAgcmV0dXJuIG5ldyBQb29sKHsgLi4ucGdDb25maWcsIHVzZXIgfSk7XG59XG5cbi8qKiBFZmZlY3RpdmUgcGVyLWtub2Igc2V0dGluZyBhZnRlciB0aGUgcGx1Z2luL2FnZW50IGNhc2NhZGUuICovXG50eXBlIFN0b3JhZ2VTZXR0aW5nID0gTWFzdHJhQWdlbnREZWZpbml0aW9uW1wic3RvcmFnZVwiXTtcbnR5cGUgTWVtb3J5U2V0dGluZyA9IE1hc3RyYUFnZW50RGVmaW5pdGlvbltcIm1lbW9yeVwiXTtcblxuLyoqXG4gKiBUcnVlIHdoZW4gYW55IHBsdWdpbi1sZXZlbCBvciBwZXItYWdlbnQgc2V0dGluZyBjb3VsZCBuZWVkIHRoZVxuICogTGFrZWJhc2UgcG9vbC4gVXNlZCBieSBgcGx1Z2luLnRzYCB0byBnYXRlIGNyZWF0aW9uIG9mIHRoZVxuICogc2VydmljZS1wcmluY2lwYWwgcG9vbCBhbmQgdGhlIHtAbGluayBNZW1vcnlCdWlsZGVyfSB0aGF0IGNvbnN1bWVzXG4gKiBpdDsgd2hlbiBmYWxzZSBuZWl0aGVyIGlzIGJ1aWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmVlZHNMYWtlYmFzZShjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZyk6IGJvb2xlYW4ge1xuICBpZiAoc2V0dGluZ05lZWRzU2hhcmVkUG9vbChjb25maWcuc3RvcmFnZSkpIHJldHVybiB0cnVlO1xuICBpZiAoc2V0dGluZ05lZWRzU2hhcmVkUG9vbChjb25maWcubWVtb3J5KSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGRlZnMgPSBjb2xsZWN0QWdlbnREZWZpbml0aW9ucyhjb25maWcpO1xuICByZXR1cm4gZGVmcy5zb21lKChkKSA9PiBzZXR0aW5nTmVlZHNTaGFyZWRQb29sKGQuc3RvcmFnZSkgfHwgc2V0dGluZ05lZWRzU2hhcmVkUG9vbChkLm1lbW9yeSkpO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBhIHBlci1hZ2VudCB7QGxpbmsgTWVtb3J5fSBmYWN0b3J5IGJvdW5kIHRvIHRoZSBzdXBwbGllZFxuICogc2VydmljZS1wcmluY2lwYWwgcG9vbCAoc2VlIHtAbGluayBjcmVhdGVTZXJ2aWNlUHJpbmNpcGFsUG9vbH0pLlxuICogQ2FjaGVzIHRoZSBzaGFyZWQgYFBnVmVjdG9yYCBzaW5nbGV0b24gKGJ1aWx0IG9uIGZpcnN0IG5lZWQpIHNvIGVhY2hcbiAqIGFnZW50IGJ1aWxkIGlzIE8oMSkgYWZ0ZXIgdGhlIGZpcnN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWVtb3J5QnVpbGRlcihcbiAgY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcsXG4gIHNlcnZpY2VQcmluY2lwYWxQb29sOiBQb29sLFxuKTogTWVtb3J5QnVpbGRlciB7XG4gIHJldHVybiBuZXcgTWVtb3J5QnVpbGRlcihjb25maWcsIHNlcnZpY2VQcmluY2lwYWxQb29sKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgb25lIGBNZW1vcnlgIHBlciBhZ2VudCBhZ2FpbnN0IGEgc2hhcmVkIHNlcnZpY2UtcHJpbmNpcGFsXG4gKiBMYWtlYmFzZSBwb29sLiBQZXItaW5zdGFuY2Ugc3RhdGUga2VlcHMgdGhlIHNoYXJlZCBgUGdWZWN0b3JgIGFsaXZlXG4gKiBhY3Jvc3MgY2FsbHMgc28gcmVnaXN0ZXJpbmcgTiBhZ2VudHMgc3RheXMgY2hlYXAuXG4gKi9cbmV4cG9ydCBjbGFzcyBNZW1vcnlCdWlsZGVyIHtcbiAgcHJpdmF0ZSBzaGFyZWRWZWN0b3I6IFBnVmVjdG9yIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXJ2aWNlUHJpbmNpcGFsUG9vbDogUG9vbCxcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgTWFzdHJhLWluc3RhbmNlLWxldmVsIHN0b3JhZ2UgdXNlZCBmb3Igd29ya2Zsb3dcbiAgICogc25hcHNob3RzLiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gcGx1Z2luLWxldmVsIGBzdG9yYWdlYCBpc1xuICAgKiBkaXNhYmxlZCwgaW4gd2hpY2ggY2FzZSBgYWdlbnQucmVzdW1lU3RyZWFtKClgIChhbmQgdGhlcmVmb3JlXG4gICAqIHRoZSBgcmVxdWlyZUFwcHJvdmFsYCBmbG93KSB3aWxsIG5vdCBiZSBhdmFpbGFibGUuXG4gICAqXG4gICAqIFRoZSBzdG9yZSBsaXZlcyBpbiBhIGRlZGljYXRlZCBgbWFzdHJhX2luc3RhbmNlYCBzY2hlbWEgc28gaXRcbiAgICogbmV2ZXIgY29sbGlkZXMgd2l0aCBwZXItYWdlbnQge0BsaW5rIGFnZW50U3RvcmFnZVNjaGVtYU5hbWV9IG5hbWVzcGFjZXMuXG4gICAqIFdvcmtmbG93IHNuYXBzaG90cyBhcmUgbm90IHBlci1hZ2VudCBzdGF0ZTsgdGhleSBiZWxvbmcgdG8gdGhlXG4gICAqIGBNYXN0cmFgIGluc3RhbmNlIHRoYXQgb3ducyB0aGUgd29ya2Zsb3cgZXhlY3V0aW9uLlxuICAgKi9cbiAgaW5zdGFuY2VTdG9yYWdlKCk6IFBvc3RncmVzU3RvcmUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNldHRpbmcgPSB0aGlzLmNvbmZpZy5zdG9yYWdlO1xuICAgIGlmICghc2V0dGluZykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAodHlwZW9mIHNldHRpbmcgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiB3aXRoU29mdFN0b3JhZ2VJbml0KFxuICAgICAgICBuZXcgUG9zdGdyZXNTdG9yZShcbiAgICAgICAgICB3aXRoSWQoc2V0dGluZywgXCJtYXN0cmEtc3RvcmVfX2luc3RhbmNlXCIpIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczxcbiAgICAgICAgICAgIHR5cGVvZiBQb3N0Z3Jlc1N0b3JlXG4gICAgICAgICAgPlswXSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB3aXRoU29mdFN0b3JhZ2VJbml0KFxuICAgICAgbmV3IFBvc3RncmVzU3RvcmUoe1xuICAgICAgICBpZDogXCJtYXN0cmEtc3RvcmVfX2luc3RhbmNlXCIsXG4gICAgICAgIHNjaGVtYU5hbWU6IFwibWFzdHJhX2luc3RhbmNlXCIsXG4gICAgICAgIHBvb2w6IHRoaXMuc2VydmljZVByaW5jaXBhbFBvb2wsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgYE1lbW9yeWAgZm9yIGBhZ2VudElkYCBhZnRlciB0aGUgcGx1Z2luL2FnZW50IGNhc2NhZGUuXG4gICAqIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiB0aGUgYWdlbnQgaGFzIG5laXRoZXIgc3RvcmFnZSBub3IgYVxuICAgKiB2ZWN0b3Igc3RvcmUgZW5hYmxlZCAtIE1hc3RyYSBhY2NlcHRzIGEgbWlzc2luZyBgbWVtb3J5YCBmaWVsZFxuICAgKiBhbmQgdHJlYXRzIHRoZSBhZ2VudCBhcyBzdGF0ZWxlc3MuXG4gICAqL1xuICBmb3JBZ2VudChhZ2VudElkOiBzdHJpbmcsIGRlZjogTWFzdHJhQWdlbnREZWZpbml0aW9uKTogTWVtb3J5IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzdG9yYWdlU2V0dGluZyA9IGRlZi5zdG9yYWdlID8/IHRoaXMuY29uZmlnLnN0b3JhZ2U7XG4gICAgY29uc3QgbWVtb3J5U2V0dGluZyA9IGRlZi5tZW1vcnkgPz8gdGhpcy5jb25maWcubWVtb3J5O1xuXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYnVpbGRTdG9yYWdlKGFnZW50SWQsIHN0b3JhZ2VTZXR0aW5nKTtcbiAgICBjb25zdCB2ZWN0b3IgPSB0aGlzLmJ1aWxkVmVjdG9yKG1lbW9yeVNldHRpbmcpO1xuICAgIGlmICghc3RvcmFnZSAmJiAhdmVjdG9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJhZ2VudDpzdGF0ZWxlc3NcIiwgeyBhZ2VudElkIH0pO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoXCJhZ2VudDpjb25maWd1cmVkXCIsIHtcbiAgICAgIGFnZW50SWQsXG4gICAgICBzdG9yYWdlOiBzdG9yYWdlICE9PSB1bmRlZmluZWQsXG4gICAgICB2ZWN0b3I6IHZlY3RvciAhPT0gdW5kZWZpbmVkLFxuICAgICAgdmVjdG9yTW9kZTpcbiAgICAgICAgdmVjdG9yID09PSB1bmRlZmluZWQgPyBcIm9mZlwiIDogdHlwZW9mIG1lbW9yeVNldHRpbmcgPT09IFwib2JqZWN0XCIgPyBcImRlZGljYXRlZFwiIDogXCJzaGFyZWRcIixcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgTWVtb3J5KHtcbiAgICAgIC4uLihzdG9yYWdlID8geyBzdG9yYWdlIH0gOiB7fSksXG4gICAgICAuLi4odmVjdG9yID8geyB2ZWN0b3IsIGVtYmVkZGVyOiBmYXN0ZW1iZWQgfSA6IHt9KSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgbGFzdE1lc3NhZ2VzOiAxMCxcbiAgICAgICAgLi4uKHZlY3RvciA/IHsgc2VtYW50aWNSZWNhbGw6IHsgdG9wSzogMywgbWVzc2FnZVJhbmdlOiAyIH0gfSA6IHt9KSxcbiAgICAgICAgLy8gQXV0by1uYW1lIGVhY2ggdGhyZWFkIGZyb20gaXRzIG9wZW5pbmcgdHVybiBzbyB0aGVcbiAgICAgICAgLy8gY29udmVyc2F0aW9uIGxpc3QgdGhlIFVJIHJlbmRlcnMgc2hvd3MgbWVhbmluZ2Z1bCB0aXRsZXNcbiAgICAgICAgLy8gaW5zdGVhZCBvZiByYXcgaWRzLiBUaXRsaW5nIHJ1bnMgb24gdGhlIHNtYWxsIC8gZmFzdCBjaGF0XG4gICAgICAgIC8vIHRpZXIgKHNlZSBgc3VtbWFyaXplLnRzYCkgcmF0aGVyIHRoYW4gdGhlIGFnZW50J3MgcHJpbWFyeVxuICAgICAgICAvLyBtb2RlbCwgc28gbmFtaW5nIGEgdGhyZWFkIG5ldmVyIHNwZW5kcyB0aGUgaGVhdnl3ZWlnaHQgbW9kZWwuXG4gICAgICAgIC8vIE9ubHkgbWVhbmluZ2Z1bCB3aGVuIHN0b3JhZ2UgaXMgb247IGhhcm1sZXNzIG90aGVyd2lzZS5cbiAgICAgICAgLi4uKHN0b3JhZ2VcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgZ2VuZXJhdGVUaXRsZToge1xuICAgICAgICAgICAgICAgIG1vZGVsOiBzdW1tYXJ5TW9kZWwodGhpcy5jb25maWcpLFxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uczogVElUTEVfSU5TVFJVQ1RJT05TLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTdG9yYWdlKGFnZW50SWQ6IHN0cmluZywgc2V0dGluZzogU3RvcmFnZVNldHRpbmcpOiBQb3N0Z3Jlc1N0b3JlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXNldHRpbmcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHR5cGVvZiBzZXR0aW5nID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIHdpdGhTb2Z0U3RvcmFnZUluaXQoXG4gICAgICAgIG5ldyBQb3N0Z3Jlc1N0b3JlKHtcbiAgICAgICAgICBpZDogYG1hc3RyYS1zdG9yZV9fJHthZ2VudElkfWAsXG4gICAgICAgICAgc2NoZW1hTmFtZTogYWdlbnRTdG9yYWdlU2NoZW1hTmFtZShhZ2VudElkKSxcbiAgICAgICAgICBwb29sOiB0aGlzLnNlcnZpY2VQcmluY2lwYWxQb29sLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIENhc3Q6IGB3aXRoSWRgIGd1YXJhbnRlZXMgYGlkYCBpcyBzZXQsIGJ1dCB0aGUgZGlzdHJpYnV0aXZlXG4gICAgLy8gT21pdCArIGBpZD86IHN0cmluZ2Agc2hhcGUgZG9lc24ndCBzdHJ1Y3R1cmFsbHkgbmFycm93IHRvIHRoZVxuICAgIC8vIGRpc2NyaW1pbmF0ZWQgdW5pb24gbWVtYmVycy4gUnVudGltZSBzaGFwZSBpcyBpZGVudGljYWwuXG4gICAgcmV0dXJuIHdpdGhTb2Z0U3RvcmFnZUluaXQoXG4gICAgICBuZXcgUG9zdGdyZXNTdG9yZShcbiAgICAgICAgd2l0aElkKHNldHRpbmcsIGBtYXN0cmEtc3RvcmVfXyR7YWdlbnRJZH1gKSBhcyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8XG4gICAgICAgICAgdHlwZW9mIFBvc3RncmVzU3RvcmVcbiAgICAgICAgPlswXSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBhZ2VudCdzIHZlY3RvciBzdG9yZS4gQ2FzY2FkZTpcbiAgICpcbiAgICogLSBmYWxzeTogbm8gdmVjdG9yLlxuICAgKiAtIGBib29sZWFuYCAvIGB1bmRlZmluZWQtaW5oZXJpdGluZy10cnVlYDogcmV0dXJuIHRoZSBzaGFyZWRcbiAgICogICBzaW5nbGV0b24gKGJ1aWx0IGxhemlseSBvbiBmaXJzdCBjYWxsKS4gQWxsIGFnZW50cyB0aGF0XG4gICAqICAgZGVmYXVsdC1lbmFibGUgbWVtb3J5IHdyaXRlIGludG8gYW5kIHJlY2FsbCBmcm9tIG9uZSBpbmRleC5cbiAgICogLSBvYmplY3Q6IGJ1aWxkIGEgZGVkaWNhdGVkIGBQZ1ZlY3RvcmAgZm9yIHRoaXMgYWdlbnQuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkVmVjdG9yKHNldHRpbmc6IE1lbW9yeVNldHRpbmcpOiBQZ1ZlY3RvciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFzZXR0aW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2Ygc2V0dGluZyA9PT0gXCJib29sZWFuXCIpIHJldHVybiB0aGlzLmdldFNoYXJlZFZlY3RvcigpO1xuICAgIHJldHVybiBidWlsZFBnVmVjdG9yKHNldHRpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaGFyZWRWZWN0b3IoKTogUGdWZWN0b3Ige1xuICAgIGlmICghdGhpcy5zaGFyZWRWZWN0b3IpIHtcbiAgICAgIHRoaXMuc2hhcmVkVmVjdG9yID0gYnVpbGRTaGFyZWRQZ1ZlY3Rvcih0aGlzLnNlcnZpY2VQcmluY2lwYWxQb29sKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2hhcmVkVmVjdG9yO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIHNoYXJlZCBgUGdWZWN0b3JgIHRoYXQgYmFja3MgdGhlIGRlZmF1bHRcbiAqIGBkZWYubWVtb3J5ID09PSB0cnVlYCBjYXNlIGFjcm9zcyBldmVyeSBhZ2VudC5cbiAqXG4gKiBgUGdWZWN0b3JgJ3MgY29uc3RydWN0b3IgYWNjZXB0cyBvbmx5IGNvbm5lY3Rpb24tc3R5bGUgY29uZmlnc1xuICogKGBIb3N0Q29uZmlnYCAvIGBDb25uZWN0aW9uU3RyaW5nQ29uZmlnYCAvIGBDbGllbnRDb25maWdgKTsgdGhlcmUgaXNcbiAqIG5vIGB7IHBvb2wgfWAgc2hvcnRoYW5kIHRoZSB3YXkgYFBvc3RncmVzU3RvcmVgIGhhcyBvbmUuIFdvcnNlLCB0aGVcbiAqIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkga2lja3Mgb2ZmIGEgYGNhY2hlV2FybXVwUHJvbWlzZWAgSUlGRSB0aGF0XG4gKiBjYWxscyBgdGhpcy5wb29sLmNvbm5lY3QoKWAgYmVmb3JlIHJldHVybmluZywgc28gd2UgY2FuJ3QgY2xlYW5seVxuICogaGFuZCBpdCBhbiBpbmVydCBjb25maWcgYW5kIHBhdGNoIHRoZSBwb29sIGFmdGVyd2FyZHMuXG4gKlxuICogVGhlIHRyaWNrOiBwYXNzIGlsbGVnYWwtYnV0LXZhbGlkYXRpb24tcGFzc2luZyBwbGFjZWhvbGRlcnMgc28gdGhlXG4gKiB3YXJtdXAncyBgbmV0LmNvbm5lY3QoKWAgcmVqZWN0cyBzeW5jaHJvbm91c2x5IHdpdGggYFJhbmdlRXJyb3JgXG4gKiAoTm9kZSB2YWxpZGF0ZXMgYDAgPD0gcG9ydCA8IDY1NTM2YCkuIFRoZSBJSUZFJ3MgYGNhdGNoIHt9YCBzd2FsbG93c1xuICogaXQsIG5vIEROUyBsb29rdXAgb3IgVENQIGF0dGVtcHQgaGFwcGVucywgYW5kIHdlIHRoZW4gc3dhcFxuICogYHBnVmVjdG9yLnBvb2xgIHRvIHRoZSBsYWtlYmFzZSBwb29sLiBFdmVyeSBzdWJzZXF1ZW50IGBQZ1ZlY3RvcmBcbiAqIG1ldGhvZCByZWFkcyBgdGhpcy5wb29sYCBhdCBjYWxsIHRpbWUsIHNvIGFsbCByZWFsIEkvTyBnb2VzIHRocm91Z2hcbiAqIHRoZSBsYWtlYmFzZSBwb29sIGZyb20gdGhlbiBvbi4gVGhlIHBsYWNlaG9sZGVyIHBvb2wgaXMgYC5lbmQoKWAnZFxuICogc28gaXRzIHNvY2tldCBib29rLWtlZXBpbmcgaXMgcmVsZWFzZWQuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2hhcmVkUGdWZWN0b3IocG9vbDogUG9vbCk6IFBnVmVjdG9yIHtcbiAgY29uc3QgdmVjdG9yID0gbmV3IFBnVmVjdG9yKHtcbiAgICBpZDogYHBnJHtoYXNoLmlkKCl9YCxcbiAgICAvLyBLZWVwIHRoZSByZWNhbGwgaW5kZXggb3V0IG9mIGBwdWJsaWNgOiBvbiBhIExha2ViYXNlIGRhdGFiYXNlIHRoZSBhcHBcbiAgICAvLyBzZXJ2aWNlIHByaW5jaXBhbCBoYXMgbm8gQ1JFQVRFIG9uIGBwdWJsaWNgIChQRzE1KyBsb2NrcyBpdCBkb3duKSwgc28gYVxuICAgIC8vIGRlZmF1bHQtc2NoZW1hIFBnVmVjdG9yIGZhaWxzIG9uIENSRUFURSBJTkRFWCB3aXRoIFwicGVybWlzc2lvbiBkZW5pZWQgZm9yXG4gICAgLy8gc2NoZW1hIHB1YmxpY1wiLiBQZ1ZlY3RvciBydW5zIENSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNUUyBmb3IgYSBuYW1lZFxuICAgIC8vIHNjaGVtYSwgc28gdGhlIFNQIGNyZWF0ZXMgYW5kIG93bnMgYG1hc3RyYV9pbnN0YW5jZWAgKHRoZSBzYW1lXG4gICAgLy8gaW5zdGFuY2UtbGV2ZWwgc2NoZW1hIHRoZSB3b3JrZmxvdy1zbmFwc2hvdCBzdG9yZSB1c2VzKSBhbmQgdGhlIGluZGV4XG4gICAgLy8gbGFuZHMgdGhlcmUuIFRhYmxlIG5hbWVzIGRvbid0IGNvbGxpZGUgd2l0aCB0aGUgc3RvcmFnZSB0YWJsZXMuXG4gICAgc2NoZW1hTmFtZTogXCJtYXN0cmFfaW5zdGFuY2VcIixcbiAgICBob3N0OiBcIi0xXCIsXG4gICAgcG9ydDogLTEsXG4gICAgZGF0YWJhc2U6IFwiX1wiLFxuICAgIHVzZXI6IFwiX1wiLFxuICAgIHBhc3N3b3JkOiBcIl9cIixcbiAgfSk7XG4gIGNvbnN0IHBsYWNlaG9sZGVyID0gdmVjdG9yLnBvb2w7XG4gIHZlY3Rvci5wb29sID0gcG9vbDtcbiAgdm9pZCBwbGFjZWhvbGRlci5lbmQoKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICByZXR1cm4gdmVjdG9yO1xufVxuXG4vKiogUGVyLWFnZW50IGRlZGljYXRlZCBgUGdWZWN0b3JgIChyYXJlOyBvcHQtaW4gdmlhIG9iamVjdCBvdmVycmlkZSkuICovXG5mdW5jdGlvbiBidWlsZFBnVmVjdG9yKHNldHRpbmc6IE1hc3RyYU1lbW9yeUNvbmZpZ092ZXJyaWRlKTogUGdWZWN0b3Ige1xuICByZXR1cm4gbmV3IFBnVmVjdG9yKFxuICAgIHdpdGhJZChzZXR0aW5nLCBgcGctdmVjdG9yX18ke2hhc2guaWQoKX1gKSBhcyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIFBnVmVjdG9yPlswXSxcbiAgKTtcbn1cblxuLyoqIFRydWUgd2hlbiB0aGlzIHNldHRpbmcgcmVxdWlyZXMgdGhlIHNoYXJlZCBMYWtlYmFzZSBwb29sLiAqL1xuZnVuY3Rpb24gc2V0dGluZ05lZWRzU2hhcmVkUG9vbChzZXR0aW5nOiBTdG9yYWdlU2V0dGluZyB8IE1lbW9yeVNldHRpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNldHRpbmcgPT09IHRydWU7XG59XG5cbi8qKiBXYWxrIHRoZSB0aHJlZSBzaGFwZXMgb2YgYGNvbmZpZy5hZ2VudHNgIGludG8gYSBmbGF0IGxpc3QuICovXG5mdW5jdGlvbiBjb2xsZWN0QWdlbnREZWZpbml0aW9ucyhjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZyk6IE1hc3RyYUFnZW50RGVmaW5pdGlvbltdIHtcbiAgY29uc3QgYWdlbnRzID0gY29uZmlnLmFnZW50cztcbiAgaWYgKCFhZ2VudHMpIHJldHVybiBbXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYWdlbnRzKSkgcmV0dXJuIGFnZW50cztcbiAgaWYgKHR5cGVvZiAoYWdlbnRzIGFzIE1hc3RyYUFnZW50RGVmaW5pdGlvbikuaW5zdHJ1Y3Rpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIFthZ2VudHMgYXMgTWFzdHJhQWdlbnREZWZpbml0aW9uXTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhhZ2VudHMgYXMgUmVjb3JkPHN0cmluZywgTWFzdHJhQWdlbnREZWZpbml0aW9uPik7XG59XG5cbi8qKiBGaWxsIGluIGEgZGVmYXVsdCBgaWRgIHdoZW4gdGhlIGNhbGxlciBkaWRuJ3Qgc3VwcGx5IG9uZS4gKi9cbmZ1bmN0aW9uIHdpdGhJZDxUIGV4dGVuZHMgeyBpZD86IHN0cmluZyB9Pih2YWx1ZTogVCwgZmFsbGJhY2s6IHN0cmluZyk6IFQge1xuICByZXR1cm4gdmFsdWUuaWQgPyB2YWx1ZSA6IHsgLi4udmFsdWUsIGlkOiBmYWxsYmFjayB9O1xufVxuIl19
341
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7QUFFSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQW1CLE1BQU0sSUFBSSxDQUFDO0FBSTNDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTNDLGtGQUFrRjtBQUNsRixNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFFaEQsMERBQTBEO0FBQzFELFNBQVMsY0FBYztJQUNyQixPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELHlGQUF5RjtBQUN6RixTQUFTLHlCQUF5QixDQUFDLEdBQVk7SUFDN0MsT0FBTyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMs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O1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDdkIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ3pDLElBQUksY0FBYyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxNQUFrQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQsZ0VBQWdFO0FBQ2hFLFNBQVMsTUFBTSxDQUE0QixLQUFRLEVBQUUsUUFBZ0I7SUFDbkUsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQ3ZELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExha2ViYXNlLWJhY2tlZCBNYXN0cmEgbWVtb3J5IHdpcmluZy5cbiAqXG4gKiBQcm92aWRlcyBhIHtAbGluayBNZW1vcnlCdWlsZGVyfSB0aGF0IG1pbnRzIG9uZSBgTWVtb3J5YCBwZXIgYWdlbnRcbiAqIHdpdGggdHdvIGluZGVwZW5kZW50IGtub2JzOlxuICpcbiAqIC0gKipTdG9yYWdlKiogKHRocmVhZHMgLyBtZXNzYWdlcyB2aWEgYFBvc3RncmVzU3RvcmVgKTogZGVmYXVsdHMgdG9cbiAqICAgKipwZXItYWdlbnQqKiBuYW1lc3BhY2luZyB2aWEge0BsaW5rIGFnZW50U3RvcmFnZVNjaGVtYU5hbWV9IHNvXG4gKiAgIGNvbnZlcnNhdGlvbiBoaXN0b3J5IHN0YXlzIGlzb2xhdGVkIGJldHdlZW4gYWdlbnRzIGluIHRoZSBzYW1lXG4gKiAgIGRhdGFiYXNlLiBgUG9zdGdyZXNTdG9yZWAgYXV0by1jcmVhdGVzIHRoZSBzY2hlbWEgd2l0aFxuICogICBgQ1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTYCBvbiBpbml0LiBBIGZhaWxlZCBtaWdyYXRpb24gKGNvbW1vbiBvblxuICogICBMYWtlYmFzZSB3aGVuIHRoZSBjb25uZWN0aW5nIHJvbGUgaXMgbm90IHRoZSB0YWJsZSBvd25lcikgaXMgbG9nZ2VkXG4gKiAgIGFuZCBza2lwcGVkIHZpYSB7QGxpbmsgd2l0aFNvZnRTdG9yYWdlSW5pdH0gc28gZXhpc3RpbmcgdGFibGVzIGtlZXBcbiAqICAgc2VydmluZyBpbnN0ZWFkIG9mIHJldHJ5aW5nIERETCBvbiBldmVyeSByZXF1ZXN0LlxuICogLSAqKk1lbW9yeSoqIChzZW1hbnRpYyByZWNhbGwgdmlhIGBQZ1ZlY3RvcmApOiBkZWZhdWx0cyB0byBhIHNpbmdsZVxuICogICAqKnNoYXJlZCoqIGluc3RhbmNlIGFjcm9zcyBldmVyeSBhZ2VudC4gQ3Jvc3MtYWdlbnQgcmVjYWxsIG9uIG9uZVxuICogICBpbmRleCBpcyBhbG1vc3QgYWx3YXlzIHdoYXQgdXNlcnMgd2FudDsgb3B0IGludG8gcGVyLWFnZW50IHJlY2FsbFxuICogICBieSBwYXNzaW5nIGEge0BsaW5rIE1hc3RyYU1lbW9yeUNvbmZpZ092ZXJyaWRlfSBvbiB0aGUgYWdlbnQuXG4gKlxuICogQWRkaXRpb25hbGx5LCB7QGxpbmsgTWVtb3J5QnVpbGRlci5pbnN0YW5jZVN0b3JhZ2V9IHJldHVybnMgYVxuICogKipNYXN0cmEtaW5zdGFuY2UtbGV2ZWwqKiBgUG9zdGdyZXNTdG9yZWAgKHNjaGVtYSBgbWFzdHJhX2luc3RhbmNlYClcbiAqIHVzZWQgZm9yIHdvcmtmbG93IHNuYXBzaG90cyAtIHRoZSBwZXJzaXN0ZW5jZSBsYXllclxuICogYGFnZW50LnJlc3VtZVN0cmVhbSgpYCByZWFkcyBmcm9tIHdoZW4gd2FraW5nIGEgc3VzcGVuZGVkXG4gKiBgcmVxdWlyZUFwcHJvdmFsYCB0b29sIGNhbGwuIFBlci1hZ2VudCBzdG9yZXMgYXJlIG5vdCBlbm91Z2ggZm9yXG4gKiB0aGlzOiB3b3JrZmxvdyBydW5zIGFyZSBzY29wZWQgdG8gdGhlIE1hc3RyYSBpbnN0YW5jZSwgbm90IGFuXG4gKiBpbmRpdmlkdWFsIGFnZW50J3MgYE1lbW9yeWAuXG4gKlxuICogUGx1Z2luLWxldmVsIGBjb25maWcuc3RvcmFnZWAgLyBgY29uZmlnLm1lbW9yeWAgYWN0IGFzIHRoZSBiYXNlbGluZVxuICogKGF1dG8tZGVmYXVsdGVkIHRvIGB0cnVlYCBpbiBgcGx1Z2luLnRzYCB3aGVuIHRoZSBgbGFrZWJhc2VgIHBsdWdpblxuICogaXMgcmVnaXN0ZXJlZCk7IHBlci1hZ2VudCBzZXR0aW5ncyBjYXNjYWRlIG9uIHRvcCBvZiB0aGF0LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZXRVc2VybmFtZVdpdGhBcGlMb29rdXAgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBlcnJvciwgaGFzaCwgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGZhc3RlbWJlZCB9IGZyb20gXCJAbWFzdHJhL2Zhc3RlbWJlZFwiO1xuaW1wb3J0IHsgTWVtb3J5IH0gZnJvbSBcIkBtYXN0cmEvbWVtb3J5XCI7XG5pbXBvcnQgeyBQZ1ZlY3RvciwgUG9zdGdyZXNTdG9yZSB9IGZyb20gXCJAbWFzdHJhL3BnXCI7XG5pbXBvcnQgeyBQb29sLCB0eXBlIFBvb2xDb25maWcgfSBmcm9tIFwicGdcIjtcblxuaW1wb3J0IHR5cGUgeyBBbnlNYXN0cmFBZ2VudERlZmluaXRpb24sIE1hc3RyYU1lbW9yeUNvbmZpZ092ZXJyaWRlIH0gZnJvbSBcIi4vYWdlbnRzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IE1hc3RyYVBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgYWdlbnRTdG9yYWdlU2NoZW1hTmFtZSB9IGZyb20gXCIuL3N0b3JhZ2Utc2NoZW1hLnRzXCI7XG5pbXBvcnQgeyBzdW1tYXJ5TW9kZWwsIFRJVExFX0lOU1RSVUNUSU9OUyB9IGZyb20gXCIuL3N1bW1hcml6ZS50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL21lbW9yeVwiKTtcblxuLyoqIFByb2Nlc3Mtd2lkZSBkZWR1cGUgc28gaW5zdGFuY2UgKyBwZXItYWdlbnQgc3RvcmVzIHNoYXJlIG9uZSBvd25lcnNoaXAgbG9nLiAqL1xuY29uc3QgbG9nZ2VkTWlncmF0aW9uRXJyb3JzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbi8qKiBXaGV0aGVyIGBMT0dfTEVWRUxgIGlzIGN1cnJlbnRseSBhdCBvciBiZWxvdyBkZWJ1Zy4gKi9cbmZ1bmN0aW9uIGlzRGVidWdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gbG9nLmlzTGV2ZWxFbmFibGVkKFwiZGVidWdcIik7XG59XG5cbi8qKiBXaGV0aGVyIGEgbWlncmF0aW9uIGZhaWxlZCBvbmx5IGJlY2F1c2UgdGhpcyByb2xlIGRvZXMgbm90IG93biBhbiBleGlzdGluZyBvYmplY3QuICovXG5mdW5jdGlvbiBpc093bmVyc2hpcE1pZ3JhdGlvbkVycm9yKGVycjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gZXJyb3IuZXJyb3JDb250ZXh0KGVycikuaGFzTWVzc2FnZShcIm11c3QgYmUgb3duZXJcIik7XG59XG5cbi8qKlxuICogU29mdGVuIHtAbGluayBQb3N0Z3Jlc1N0b3JlLmluaXR9IHNvIGEgZmFpbGVkIG1pZ3JhdGlvbiAoZS5nLiBMYWtlYmFzZVxuICogYG11c3QgYmUgb3duZXIgb2YgdGFibGUg4oCmYCBvbiBgQUxURVJgKSBpcyBsb2dnZWQgb25jZSBpbnN0ZWFkIG9mIHJldGhyb3duXG4gKiBvbiBldmVyeSBzdG9yYWdlIGNhbGwuXG4gKlxuICogTWFzdHJhJ3MgYGF1Z21lbnRXaXRoSW5pdGAgcmV0cmllcyBpbml0IGZvcmV2ZXIgd2hlbiBpdCB0aHJvd3MsIHNvIHRoZVxuICogb25seSB3YXkgdG8ga2VlcCBzZXJ2aW5nIGFnYWluc3QgYW4gYWxyZWFkeS11c2FibGUgc2NoZW1hIGlzIHRvIHRyZWF0XG4gKiBtaWdyYXRpb24gZmFpbHVyZSBhcyBzdWNjZXNzIGFuZCBtYXJrIHRoZSBzdG9yZSBpbml0aWFsaXplZC5cbiAqXG4gKiBDb25jdXJyZW50IGZpcnN0IGNhbGxlcnMgc2hhcmUgb25lIHNvZnQgYXR0ZW1wdC4gTm9uLW93bmVyc2hpcCBmYWlsdXJlcyBzdGF5XG4gKiBmYXRhbCBzbyBtaXNzaW5nIHNjaGVtYXMvdGFibGVzIGFyZSByZXRyaWVkIG9yIHN1cmZhY2VkIGluc3RlYWQgb2YgaGlkZGVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFNvZnRTdG9yYWdlSW5pdChzdG9yZTogUG9zdGdyZXNTdG9yZSk6IFBvc3RncmVzU3RvcmUge1xuICBjb25zdCBzb2Z0ID0gc3RvcmUgYXMgdW5rbm93biBhcyB7XG4gICAgaW5pdDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICBpZDogc3RyaW5nO1xuICAgIHNjaGVtYT86IHN0cmluZztcbiAgICBpc0luaXRpYWxpemVkOiBib29sZWFuO1xuICB9O1xuICBjb25zdCBvcmlnaW5hbEluaXQgPSBzb2Z0LmluaXQuYmluZChzb2Z0KTtcbiAgbGV0IHNvZnRJbml0UHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZDtcblxuICBzb2Z0LmluaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHNvZnQuaXNJbml0aWFsaXplZCkgcmV0dXJuO1xuICAgIHNvZnRJbml0UHJvbWlzZSA/Pz0gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9yaWdpbmFsSW5pdCgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghaXNPd25lcnNoaXBNaWdyYXRpb25FcnJvcihlcnIpKSB0aHJvdyBlcnI7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvci5lcnJvck1lc3NhZ2UoZXJyKTtcbiAgICAgICAgaWYgKCFsb2dnZWRNaWdyYXRpb25FcnJvcnMuaGFzKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgbG9nZ2VkTWlncmF0aW9uRXJyb3JzLmFkZChtZXNzYWdlKTtcbiAgICAgICAgICBpZiAoaXNEZWJ1Z0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwibWFzdHJhIHN0b3JhZ2UgbWlncmF0aW9uIGZhaWxlZFwiLCBlcnIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dnZXIud2FybihcIm1hc3RyYSBzdG9yYWdlIG1pZ3JhdGlvbiBmYWlsZWRcIiwge1xuICAgICAgICAgICAgICBlcnJvcjogbWVzc2FnZSxcbiAgICAgICAgICAgICAgc3RvcmVJZDogc29mdC5pZCxcbiAgICAgICAgICAgICAgc2NoZW1hOiBzb2Z0LnNjaGVtYSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNvZnRJbml0UHJvbWlzZTtcbiAgICAgIHNvZnQuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzb2Z0SW5pdFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9O1xuICByZXR1cm4gc3RvcmU7XG59XG5cbi8qKlxuICogQnVpbGQgYSBkZWRpY2F0ZWQgKipzZXJ2aWNlLXByaW5jaXBhbCoqIExha2ViYXNlIHBvb2wgZm9yIE1hc3RyYVxuICogbWVtb3J5IGZyb20gdGhlIGxha2ViYXNlIHBsdWdpbidzIHJlc29sdmVkIFNQIHBnIGNvbmZpZy5cbiAqXG4gKiBUaGUgcGx1Z2luJ3MgYGV4cG9ydHMoKS5wb29sYCBpcyBhIGBSb3V0aW5nUG9vbGAgdGhhdCBzd2l0Y2hlcyB0b1xuICogdGhlIHBlci11c2VyIChPQk8pIHBvb2wgd2hlbmV2ZXIgYSBxdWVyeSBydW5zIGluc2lkZSBhbiBgYXNVc2VyYFxuICogc2NvcGUgLSBleGFjdGx5IHRoZSBjb250ZXh0IHRoZSBtYXN0cmEgcGx1Z2luIGVzdGFibGlzaGVzIGFyb3VuZFxuICogZXZlcnkgY2hhdCB0dXJuLiBNZW1vcnkgKHRocmVhZHMgLyBtZXNzYWdlcyArIHNlbWFudGljIHJlY2FsbCkgbXVzdFxuICogaW5zdGVhZCBhbHdheXMgYWN0IGFzIHRoZSBhcHAgc2VydmljZSBwcmluY2lwYWw6IGl0IG93bnMgdGhlXG4gKiBhdXRvLWNyZWF0ZWQgYG1hc3RyYV8qYCBzY2hlbWFzIChhIHBlci11c2VyIHJvbGUgdXN1YWxseSBjYW4ndFxuICogYENSRUFURSBTQ0hFTUFgKSBhbmQgaXMgc2hhcmVkIGFjcm9zcyB1c2Vycywgc28gaXQgY2Fubm90IGluaGVyaXQgYVxuICogcmVxdWVzdCdzIE9CTyBpZGVudGl0eS5cbiAqXG4gKiBgcGdDb25maWdgIG11c3QgYmUgdGhlIHBsdWdpbidzIGBleHBvcnRzKCkuZ2V0UGdDb25maWcoKWAgZXZhbHVhdGVkXG4gKiAqKm91dHNpZGUqKiBhbnkgYGFzVXNlcmAgc2NvcGUgKGkuZS4gZHVyaW5nIHNldHVwKSwgc28gaXQgY2Fycmllc1xuICogdGhlIFNQIGNvbm5lY3Rpb24gdGFyZ2V0LCBPQXV0aCB0b2tlbi1yZWZyZXNoIGBwYXNzd29yZGAgY2FsbGJhY2ssXG4gKiBhbmQgYW55IGBsYWtlYmFzZSh7IHBvb2wgfSlgIHR1bmluZyBvdmVycmlkZXMgLSBhbGwgb2Ygd2hpY2ggdGhpc1xuICogcG9vbCBpbmhlcml0cy4gU2VlIHRoZSBjYWxsIHNpdGUgaW4gYHBsdWdpbi50c2AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTZXJ2aWNlUHJpbmNpcGFsUG9vbChwZ0NvbmZpZzogUG9vbENvbmZpZyk6IFByb21pc2U8UG9vbD4ge1xuICAvLyBgZ2V0UGdDb25maWcoKWAgcmVzb2x2ZXMgdGhlIFNQIHVzZXJuYW1lIHN5bmNocm9ub3VzbHkgZnJvbVxuICAvLyBgUEdVU0VSYCAvIGBEQVRBQlJJQ0tTX0NMSUVOVF9JRGA7IGZhbGwgYmFjayB0byB0aGUgYXN5bmMgQVBJXG4gIC8vIGxvb2t1cCAoZS5nLiBsb2NhbCBkZXYgYXV0aGVudGljYXRpbmcgdmlhIFBBVCkgc28gdGhlIHBvb2wgYWx3YXlzXG4gIC8vIGhhcyBhbiBpZGVudGl0eSB0byBjb25uZWN0IHdpdGguXG4gIGNvbnN0IHVzZXIgPSBwZ0NvbmZpZy51c2VyID8/IChhd2FpdCBnZXRVc2VybmFtZVdpdGhBcGlMb29rdXAoKSk7XG4gIHJldHVybiBuZXcgUG9vbCh7IC4uLnBnQ29uZmlnLCB1c2VyIH0pO1xufVxuXG4vKiogRWZmZWN0aXZlIHBlci1rbm9iIHNldHRpbmcgYWZ0ZXIgdGhlIHBsdWdpbi9hZ2VudCBjYXNjYWRlLiAqL1xudHlwZSBTdG9yYWdlU2V0dGluZyA9IEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbltcInN0b3JhZ2VcIl07XG50eXBlIE1lbW9yeVNldHRpbmcgPSBBbnlNYXN0cmFBZ2VudERlZmluaXRpb25bXCJtZW1vcnlcIl07XG5cbi8qKlxuICogVHJ1ZSB3aGVuIGFueSBwbHVnaW4tbGV2ZWwgb3IgcGVyLWFnZW50IHNldHRpbmcgY291bGQgbmVlZCB0aGVcbiAqIExha2ViYXNlIHBvb2wuIFVzZWQgYnkgYHBsdWdpbi50c2AgdG8gZ2F0ZSBjcmVhdGlvbiBvZiB0aGVcbiAqIHNlcnZpY2UtcHJpbmNpcGFsIHBvb2wgYW5kIHRoZSB7QGxpbmsgTWVtb3J5QnVpbGRlcn0gdGhhdCBjb25zdW1lc1xuICogaXQ7IHdoZW4gZmFsc2UgbmVpdGhlciBpcyBidWlsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5lZWRzTGFrZWJhc2UoY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcpOiBib29sZWFuIHtcbiAgaWYgKHNldHRpbmdOZWVkc1NoYXJlZFBvb2woY29uZmlnLnN0b3JhZ2UpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHNldHRpbmdOZWVkc1NoYXJlZFBvb2woY29uZmlnLm1lbW9yeSkpIHJldHVybiB0cnVlO1xuICBjb25zdCBkZWZzID0gY29sbGVjdEFnZW50RGVmaW5pdGlvbnMoY29uZmlnKTtcbiAgcmV0dXJuIGRlZnMuc29tZSgoZCkgPT4gc2V0dGluZ05lZWRzU2hhcmVkUG9vbChkLnN0b3JhZ2UpIHx8IHNldHRpbmdOZWVkc1NoYXJlZFBvb2woZC5tZW1vcnkpKTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgYSBwZXItYWdlbnQge0BsaW5rIE1lbW9yeX0gZmFjdG9yeSBib3VuZCB0byB0aGUgc3VwcGxpZWRcbiAqIHNlcnZpY2UtcHJpbmNpcGFsIHBvb2wgKHNlZSB7QGxpbmsgY3JlYXRlU2VydmljZVByaW5jaXBhbFBvb2x9KS5cbiAqIENhY2hlcyB0aGUgc2hhcmVkIGBQZ1ZlY3RvcmAgc2luZ2xldG9uIChidWlsdCBvbiBmaXJzdCBuZWVkKSBzbyBlYWNoXG4gKiBhZ2VudCBidWlsZCBpcyBPKDEpIGFmdGVyIHRoZSBmaXJzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lbW9yeUJ1aWxkZXIoXG4gIGNvbmZpZzogTWFzdHJhUGx1Z2luQ29uZmlnLFxuICBzZXJ2aWNlUHJpbmNpcGFsUG9vbDogUG9vbCxcbik6IE1lbW9yeUJ1aWxkZXIge1xuICByZXR1cm4gbmV3IE1lbW9yeUJ1aWxkZXIoY29uZmlnLCBzZXJ2aWNlUHJpbmNpcGFsUG9vbCk7XG59XG5cbi8qKlxuICogQnVpbGRzIG9uZSBgTWVtb3J5YCBwZXIgYWdlbnQgYWdhaW5zdCBhIHNoYXJlZCBzZXJ2aWNlLXByaW5jaXBhbFxuICogTGFrZWJhc2UgcG9vbC4gUGVyLWluc3RhbmNlIHN0YXRlIGtlZXBzIHRoZSBzaGFyZWQgYFBnVmVjdG9yYCBhbGl2ZVxuICogYWNyb3NzIGNhbGxzIHNvIHJlZ2lzdGVyaW5nIE4gYWdlbnRzIHN0YXlzIGNoZWFwLlxuICovXG5leHBvcnQgY2xhc3MgTWVtb3J5QnVpbGRlciB7XG4gIHByaXZhdGUgc2hhcmVkVmVjdG9yOiBQZ1ZlY3RvciB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogTWFzdHJhUGx1Z2luQ29uZmlnLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VydmljZVByaW5jaXBhbFBvb2w6IFBvb2wsXG4gICkge31cblxuICAvKipcbiAgICogQnVpbGQgdGhlIE1hc3RyYS1pbnN0YW5jZS1sZXZlbCBzdG9yYWdlIHVzZWQgZm9yIHdvcmtmbG93XG4gICAqIHNuYXBzaG90cy4gUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHBsdWdpbi1sZXZlbCBgc3RvcmFnZWAgaXNcbiAgICogZGlzYWJsZWQsIGluIHdoaWNoIGNhc2UgYGFnZW50LnJlc3VtZVN0cmVhbSgpYCAoYW5kIHRoZXJlZm9yZVxuICAgKiB0aGUgYHJlcXVpcmVBcHByb3ZhbGAgZmxvdykgd2lsbCBub3QgYmUgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBUaGUgc3RvcmUgbGl2ZXMgaW4gYSBkZWRpY2F0ZWQgYG1hc3RyYV9pbnN0YW5jZWAgc2NoZW1hIHNvIGl0XG4gICAqIG5ldmVyIGNvbGxpZGVzIHdpdGggcGVyLWFnZW50IHtAbGluayBhZ2VudFN0b3JhZ2VTY2hlbWFOYW1lfSBuYW1lc3BhY2VzLlxuICAgKiBXb3JrZmxvdyBzbmFwc2hvdHMgYXJlIG5vdCBwZXItYWdlbnQgc3RhdGU7IHRoZXkgYmVsb25nIHRvIHRoZVxuICAgKiBgTWFzdHJhYCBpbnN0YW5jZSB0aGF0IG93bnMgdGhlIHdvcmtmbG93IGV4ZWN1dGlvbi5cbiAgICovXG4gIGluc3RhbmNlU3RvcmFnZSgpOiBQb3N0Z3Jlc1N0b3JlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzZXR0aW5nID0gdGhpcy5jb25maWcuc3RvcmFnZTtcbiAgICBpZiAoIXNldHRpbmcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHR5cGVvZiBzZXR0aW5nID09PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gd2l0aFNvZnRTdG9yYWdlSW5pdChcbiAgICAgICAgbmV3IFBvc3RncmVzU3RvcmUoXG4gICAgICAgICAgd2l0aElkKHNldHRpbmcsIFwibWFzdHJhLXN0b3JlX19pbnN0YW5jZVwiKSBhcyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8XG4gICAgICAgICAgICB0eXBlb2YgUG9zdGdyZXNTdG9yZVxuICAgICAgICAgID5bMF0sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gd2l0aFNvZnRTdG9yYWdlSW5pdChcbiAgICAgIG5ldyBQb3N0Z3Jlc1N0b3JlKHtcbiAgICAgICAgaWQ6IFwibWFzdHJhLXN0b3JlX19pbnN0YW5jZVwiLFxuICAgICAgICBzY2hlbWFOYW1lOiBcIm1hc3RyYV9pbnN0YW5jZVwiLFxuICAgICAgICBwb29sOiB0aGlzLnNlcnZpY2VQcmluY2lwYWxQb29sLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGBNZW1vcnlgIGZvciBgYWdlbnRJZGAgYWZ0ZXIgdGhlIHBsdWdpbi9hZ2VudCBjYXNjYWRlLlxuICAgKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdGhlIGFnZW50IGhhcyBuZWl0aGVyIHN0b3JhZ2Ugbm9yIGFcbiAgICogdmVjdG9yIHN0b3JlIGVuYWJsZWQgLSBNYXN0cmEgYWNjZXB0cyBhIG1pc3NpbmcgYG1lbW9yeWAgZmllbGRcbiAgICogYW5kIHRyZWF0cyB0aGUgYWdlbnQgYXMgc3RhdGVsZXNzLlxuICAgKi9cbiAgZm9yQWdlbnQoYWdlbnRJZDogc3RyaW5nLCBkZWY6IEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbik6IE1lbW9yeSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3RvcmFnZVNldHRpbmcgPSBkZWYuc3RvcmFnZSA/PyB0aGlzLmNvbmZpZy5zdG9yYWdlO1xuICAgIGNvbnN0IG1lbW9yeVNldHRpbmcgPSBkZWYubWVtb3J5ID8/IHRoaXMuY29uZmlnLm1lbW9yeTtcblxuICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLmJ1aWxkU3RvcmFnZShhZ2VudElkLCBzdG9yYWdlU2V0dGluZyk7XG4gICAgY29uc3QgdmVjdG9yID0gdGhpcy5idWlsZFZlY3RvcihtZW1vcnlTZXR0aW5nKTtcbiAgICBpZiAoIXN0b3JhZ2UgJiYgIXZlY3Rvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiYWdlbnQ6c3RhdGVsZXNzXCIsIHsgYWdlbnRJZCB9KTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKFwiYWdlbnQ6Y29uZmlndXJlZFwiLCB7XG4gICAgICBhZ2VudElkLFxuICAgICAgc3RvcmFnZTogc3RvcmFnZSAhPT0gdW5kZWZpbmVkLFxuICAgICAgdmVjdG9yOiB2ZWN0b3IgIT09IHVuZGVmaW5lZCxcbiAgICAgIHZlY3Rvck1vZGU6XG4gICAgICAgIHZlY3RvciA9PT0gdW5kZWZpbmVkID8gXCJvZmZcIiA6IHR5cGVvZiBtZW1vcnlTZXR0aW5nID09PSBcIm9iamVjdFwiID8gXCJkZWRpY2F0ZWRcIiA6IFwic2hhcmVkXCIsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IE1lbW9yeSh7XG4gICAgICAuLi4oc3RvcmFnZSA/IHsgc3RvcmFnZSB9IDoge30pLFxuICAgICAgLi4uKHZlY3RvciA/IHsgdmVjdG9yLCBlbWJlZGRlcjogZmFzdGVtYmVkIH0gOiB7fSksXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGxhc3RNZXNzYWdlczogMTAsXG4gICAgICAgIC4uLih2ZWN0b3IgPyB7IHNlbWFudGljUmVjYWxsOiB7IHRvcEs6IDMsIG1lc3NhZ2VSYW5nZTogMiB9IH0gOiB7fSksXG4gICAgICAgIC8vIEF1dG8tbmFtZSBlYWNoIHRocmVhZCBmcm9tIGl0cyBvcGVuaW5nIHR1cm4gc28gdGhlXG4gICAgICAgIC8vIGNvbnZlcnNhdGlvbiBsaXN0IHRoZSBVSSByZW5kZXJzIHNob3dzIG1lYW5pbmdmdWwgdGl0bGVzXG4gICAgICAgIC8vIGluc3RlYWQgb2YgcmF3IGlkcy4gVGl0bGluZyBydW5zIG9uIHRoZSBzbWFsbCAvIGZhc3QgY2hhdFxuICAgICAgICAvLyB0aWVyIChzZWUgYHN1bW1hcml6ZS50c2ApIHJhdGhlciB0aGFuIHRoZSBhZ2VudCdzIHByaW1hcnlcbiAgICAgICAgLy8gbW9kZWwsIHNvIG5hbWluZyBhIHRocmVhZCBuZXZlciBzcGVuZHMgdGhlIGhlYXZ5d2VpZ2h0IG1vZGVsLlxuICAgICAgICAvLyBPbmx5IG1lYW5pbmdmdWwgd2hlbiBzdG9yYWdlIGlzIG9uOyBoYXJtbGVzcyBvdGhlcndpc2UuXG4gICAgICAgIC4uLihzdG9yYWdlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGdlbmVyYXRlVGl0bGU6IHtcbiAgICAgICAgICAgICAgICBtb2RlbDogc3VtbWFyeU1vZGVsKHRoaXMuY29uZmlnKSxcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnM6IFRJVExFX0lOU1RSVUNUSU9OUyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3RvcmFnZShhZ2VudElkOiBzdHJpbmcsIHNldHRpbmc6IFN0b3JhZ2VTZXR0aW5nKTogUG9zdGdyZXNTdG9yZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFzZXR0aW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2Ygc2V0dGluZyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiB3aXRoU29mdFN0b3JhZ2VJbml0KFxuICAgICAgICBuZXcgUG9zdGdyZXNTdG9yZSh7XG4gICAgICAgICAgaWQ6IGBtYXN0cmEtc3RvcmVfXyR7YWdlbnRJZH1gLFxuICAgICAgICAgIHNjaGVtYU5hbWU6IGFnZW50U3RvcmFnZVNjaGVtYU5hbWUoYWdlbnRJZCksXG4gICAgICAgICAgcG9vbDogdGhpcy5zZXJ2aWNlUHJpbmNpcGFsUG9vbCxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBDYXN0OiBgd2l0aElkYCBndWFyYW50ZWVzIGBpZGAgaXMgc2V0LCBidXQgdGhlIGRpc3RyaWJ1dGl2ZVxuICAgIC8vIE9taXQgKyBgaWQ/OiBzdHJpbmdgIHNoYXBlIGRvZXNuJ3Qgc3RydWN0dXJhbGx5IG5hcnJvdyB0byB0aGVcbiAgICAvLyBkaXNjcmltaW5hdGVkIHVuaW9uIG1lbWJlcnMuIFJ1bnRpbWUgc2hhcGUgaXMgaWRlbnRpY2FsLlxuICAgIHJldHVybiB3aXRoU29mdFN0b3JhZ2VJbml0KFxuICAgICAgbmV3IFBvc3RncmVzU3RvcmUoXG4gICAgICAgIHdpdGhJZChzZXR0aW5nLCBgbWFzdHJhLXN0b3JlX18ke2FnZW50SWR9YCkgYXMgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFxuICAgICAgICAgIHR5cGVvZiBQb3N0Z3Jlc1N0b3JlXG4gICAgICAgID5bMF0sXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgYWdlbnQncyB2ZWN0b3Igc3RvcmUuIENhc2NhZGU6XG4gICAqXG4gICAqIC0gZmFsc3k6IG5vIHZlY3Rvci5cbiAgICogLSBgYm9vbGVhbmAgLyBgdW5kZWZpbmVkLWluaGVyaXRpbmctdHJ1ZWA6IHJldHVybiB0aGUgc2hhcmVkXG4gICAqICAgc2luZ2xldG9uIChidWlsdCBsYXppbHkgb24gZmlyc3QgY2FsbCkuIEFsbCBhZ2VudHMgdGhhdFxuICAgKiAgIGRlZmF1bHQtZW5hYmxlIG1lbW9yeSB3cml0ZSBpbnRvIGFuZCByZWNhbGwgZnJvbSBvbmUgaW5kZXguXG4gICAqIC0gb2JqZWN0OiBidWlsZCBhIGRlZGljYXRlZCBgUGdWZWN0b3JgIGZvciB0aGlzIGFnZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFZlY3RvcihzZXR0aW5nOiBNZW1vcnlTZXR0aW5nKTogUGdWZWN0b3IgfCB1bmRlZmluZWQge1xuICAgIGlmICghc2V0dGluZykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAodHlwZW9mIHNldHRpbmcgPT09IFwiYm9vbGVhblwiKSByZXR1cm4gdGhpcy5nZXRTaGFyZWRWZWN0b3IoKTtcbiAgICByZXR1cm4gYnVpbGRQZ1ZlY3RvcihzZXR0aW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2hhcmVkVmVjdG9yKCk6IFBnVmVjdG9yIHtcbiAgICBpZiAoIXRoaXMuc2hhcmVkVmVjdG9yKSB7XG4gICAgICB0aGlzLnNoYXJlZFZlY3RvciA9IGJ1aWxkU2hhcmVkUGdWZWN0b3IodGhpcy5zZXJ2aWNlUHJpbmNpcGFsUG9vbCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNoYXJlZFZlY3RvcjtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBzaGFyZWQgYFBnVmVjdG9yYCB0aGF0IGJhY2tzIHRoZSBkZWZhdWx0XG4gKiBgZGVmLm1lbW9yeSA9PT0gdHJ1ZWAgY2FzZSBhY3Jvc3MgZXZlcnkgYWdlbnQuXG4gKlxuICogYFBnVmVjdG9yYCdzIGNvbnN0cnVjdG9yIGFjY2VwdHMgb25seSBjb25uZWN0aW9uLXN0eWxlIGNvbmZpZ3NcbiAqIChgSG9zdENvbmZpZ2AgLyBgQ29ubmVjdGlvblN0cmluZ0NvbmZpZ2AgLyBgQ2xpZW50Q29uZmlnYCk7IHRoZXJlIGlzXG4gKiBubyBgeyBwb29sIH1gIHNob3J0aGFuZCB0aGUgd2F5IGBQb3N0Z3Jlc1N0b3JlYCBoYXMgb25lLiBXb3JzZSwgdGhlXG4gKiBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGtpY2tzIG9mZiBhIGBjYWNoZVdhcm11cFByb21pc2VgIElJRkUgdGhhdFxuICogY2FsbHMgYHRoaXMucG9vbC5jb25uZWN0KClgIGJlZm9yZSByZXR1cm5pbmcsIHNvIHdlIGNhbid0IGNsZWFubHlcbiAqIGhhbmQgaXQgYW4gaW5lcnQgY29uZmlnIGFuZCBwYXRjaCB0aGUgcG9vbCBhZnRlcndhcmRzLlxuICpcbiAqIFRoZSB0cmljazogcGFzcyBpbGxlZ2FsLWJ1dC12YWxpZGF0aW9uLXBhc3NpbmcgcGxhY2Vob2xkZXJzIHNvIHRoZVxuICogd2FybXVwJ3MgYG5ldC5jb25uZWN0KClgIHJlamVjdHMgc3luY2hyb25vdXNseSB3aXRoIGBSYW5nZUVycm9yYFxuICogKE5vZGUgdmFsaWRhdGVzIGAwIDw9IHBvcnQgPCA2NTUzNmApLiBUaGUgSUlGRSdzIGBjYXRjaCB7fWAgc3dhbGxvd3NcbiAqIGl0LCBubyBETlMgbG9va3VwIG9yIFRDUCBhdHRlbXB0IGhhcHBlbnMsIGFuZCB3ZSB0aGVuIHN3YXBcbiAqIGBwZ1ZlY3Rvci5wb29sYCB0byB0aGUgbGFrZWJhc2UgcG9vbC4gRXZlcnkgc3Vic2VxdWVudCBgUGdWZWN0b3JgXG4gKiBtZXRob2QgcmVhZHMgYHRoaXMucG9vbGAgYXQgY2FsbCB0aW1lLCBzbyBhbGwgcmVhbCBJL08gZ29lcyB0aHJvdWdoXG4gKiB0aGUgbGFrZWJhc2UgcG9vbCBmcm9tIHRoZW4gb24uIFRoZSBwbGFjZWhvbGRlciBwb29sIGlzIGAuZW5kKClgJ2RcbiAqIHNvIGl0cyBzb2NrZXQgYm9vay1rZWVwaW5nIGlzIHJlbGVhc2VkLlxuICovXG5mdW5jdGlvbiBidWlsZFNoYXJlZFBnVmVjdG9yKHBvb2w6IFBvb2wpOiBQZ1ZlY3RvciB7XG4gIGNvbnN0IHZlY3RvciA9IG5ldyBQZ1ZlY3Rvcih7XG4gICAgaWQ6IGBwZyR7aGFzaC5pZCgpfWAsXG4gICAgLy8gS2VlcCB0aGUgcmVjYWxsIGluZGV4IG91dCBvZiBgcHVibGljYDogb24gYSBMYWtlYmFzZSBkYXRhYmFzZSB0aGUgYXBwXG4gICAgLy8gc2VydmljZSBwcmluY2lwYWwgaGFzIG5vIENSRUFURSBvbiBgcHVibGljYCAoUEcxNSsgbG9ja3MgaXQgZG93biksIHNvIGFcbiAgICAvLyBkZWZhdWx0LXNjaGVtYSBQZ1ZlY3RvciBmYWlscyBvbiBDUkVBVEUgSU5ERVggd2l0aCBcInBlcm1pc3Npb24gZGVuaWVkIGZvclxuICAgIC8vIHNjaGVtYSBwdWJsaWNcIi4gUGdWZWN0b3IgcnVucyBDUkVBVEUgU0NIRU1BIElGIE5PVCBFWElTVFMgZm9yIGEgbmFtZWRcbiAgICAvLyBzY2hlbWEsIHNvIHRoZSBTUCBjcmVhdGVzIGFuZCBvd25zIGBtYXN0cmFfaW5zdGFuY2VgICh0aGUgc2FtZVxuICAgIC8vIGluc3RhbmNlLWxldmVsIHNjaGVtYSB0aGUgd29ya2Zsb3ctc25hcHNob3Qgc3RvcmUgdXNlcykgYW5kIHRoZSBpbmRleFxuICAgIC8vIGxhbmRzIHRoZXJlLiBUYWJsZSBuYW1lcyBkb24ndCBjb2xsaWRlIHdpdGggdGhlIHN0b3JhZ2UgdGFibGVzLlxuICAgIHNjaGVtYU5hbWU6IFwibWFzdHJhX2luc3RhbmNlXCIsXG4gICAgaG9zdDogXCItMVwiLFxuICAgIHBvcnQ6IC0xLFxuICAgIGRhdGFiYXNlOiBcIl9cIixcbiAgICB1c2VyOiBcIl9cIixcbiAgICBwYXNzd29yZDogXCJfXCIsXG4gIH0pO1xuICBjb25zdCBwbGFjZWhvbGRlciA9IHZlY3Rvci5wb29sO1xuICB2ZWN0b3IucG9vbCA9IHBvb2w7XG4gIHZvaWQgcGxhY2Vob2xkZXIuZW5kKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHZlY3Rvcjtcbn1cblxuLyoqIFBlci1hZ2VudCBkZWRpY2F0ZWQgYFBnVmVjdG9yYCAocmFyZTsgb3B0LWluIHZpYSBvYmplY3Qgb3ZlcnJpZGUpLiAqL1xuZnVuY3Rpb24gYnVpbGRQZ1ZlY3RvcihzZXR0aW5nOiBNYXN0cmFNZW1vcnlDb25maWdPdmVycmlkZSk6IFBnVmVjdG9yIHtcbiAgcmV0dXJuIG5ldyBQZ1ZlY3RvcihcbiAgICB3aXRoSWQoc2V0dGluZywgYHBnLXZlY3Rvcl9fJHtoYXNoLmlkKCl9YCkgYXMgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBQZ1ZlY3Rvcj5bMF0sXG4gICk7XG59XG5cbi8qKiBUcnVlIHdoZW4gdGhpcyBzZXR0aW5nIHJlcXVpcmVzIHRoZSBzaGFyZWQgTGFrZWJhc2UgcG9vbC4gKi9cbmZ1bmN0aW9uIHNldHRpbmdOZWVkc1NoYXJlZFBvb2woc2V0dGluZzogU3RvcmFnZVNldHRpbmcgfCBNZW1vcnlTZXR0aW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBzZXR0aW5nID09PSB0cnVlO1xufVxuXG4vKiogV2FsayB0aGUgdGhyZWUgc2hhcGVzIG9mIGBjb25maWcuYWdlbnRzYCBpbnRvIGEgZmxhdCBsaXN0LiAqL1xuZnVuY3Rpb24gY29sbGVjdEFnZW50RGVmaW5pdGlvbnMoY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcpOiBBbnlNYXN0cmFBZ2VudERlZmluaXRpb25bXSB7XG4gIGNvbnN0IGFnZW50cyA9IGNvbmZpZy5hZ2VudHM7XG4gIGlmICghYWdlbnRzKSByZXR1cm4gW107XG4gIGlmIChBcnJheS5pc0FycmF5KGFnZW50cykpIHJldHVybiBhZ2VudHM7XG4gIGlmIChcImluc3RydWN0aW9uc1wiIGluIGFnZW50cykge1xuICAgIHJldHVybiBbYWdlbnRzIGFzIEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbl07XG4gIH1cbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoYWdlbnRzKTtcbn1cblxuLyoqIEZpbGwgaW4gYSBkZWZhdWx0IGBpZGAgd2hlbiB0aGUgY2FsbGVyIGRpZG4ndCBzdXBwbHkgb25lLiAqL1xuZnVuY3Rpb24gd2l0aElkPFQgZXh0ZW5kcyB7IGlkPzogc3RyaW5nIH0+KHZhbHVlOiBULCBmYWxsYmFjazogc3RyaW5nKTogVCB7XG4gIHJldHVybiB2YWx1ZS5pZCA/IHZhbHVlIDogeyAuLi52YWx1ZSwgaWQ6IGZhbGxiYWNrIH07XG59XG4iXX0=
@@ -176,7 +176,7 @@ export declare class MastraPlugin extends Plugin<MastraPluginConfig> {
176
176
  */
177
177
  getDefault: () => Agent | null;
178
178
  /** Underlying Mastra instance for advanced use (custom routes etc.). */
179
- getMastra: () => Mastra<Record<string, Agent<any, import("@mastra/core/agent").ToolsInput, undefined, any, import("@mastra/core/agent").AgentEditorConfig | undefined>>, Record<string, import("@mastra/core/workflows").AnyWorkflow>, Record<string, import("@mastra/core/vector").MastraVector<any>>, Record<string, import("@mastra/core/tts").MastraTTS>, import("@mastra/core/logger").IMastraLogger, Record<string, import("@mastra/core/mcp").MCPServerBase<any>>, Record<string, import("@mastra/core/evals").MastraScorer<any, any, any, any>>, Record<string, import("@mastra/core/tools").ToolAction<any, any, any, any, any, any, unknown>>, Record<string, import("@mastra/core/processors").Processor<any, unknown>>, Record<string, import("@mastra/core/memory").MastraMemory>, Record<string, import("@mastra/core/channels").ChannelProvider>> | null;
179
+ getMastra: () => Mastra<Record<string, Agent<any, import("@mastra/core/agent").ToolsInput, undefined, any, import("@mastra/core/agent").AgentEditorConfig | undefined>>, Record<string, import("@mastra/core/workflows").AnyWorkflow>, Record<string, import("@mastra/core/vector").MastraVector<any>>, Record<string, import("@mastra/core/tts").MastraTTS>, import("@mastra/core/logger").IMastraLogger, Record<string, import("@mastra/core/mcp").MCPServerBase<any>>, Record<string, import("@mastra/core/evals").MastraScorer<any, any, any, any>>, Record<string, import("@mastra/core/tools").ToolAction<any, any, any, any, any, any, unknown>>, Record<string, import("@mastra/core/processors").Processor<any, unknown>>, Record<string, import("@mastra/core/memory").MastraMemory>, Record<string, import("@mastra/core/channels").ChannelProvider>, Record<string, import("@mastra/core/classifier").Classifier<any>>> | null;
180
180
  /**
181
181
  * Build the `RequestContext` an agent turn driven from OUTSIDE this
182
182
  * plugin's routes needs (a Teams activity on another plugin's endpoint, a