@dbx-tools/search 0.6.87 → 0.6.89
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 +2 -2
- package/lib/src/client.js +3 -3
- package/lib/src/config.js +11 -11
- package/lib/src/plugin.d.ts +7 -7
- package/lib/src/plugin.js +21 -21
- package/lib/src/tool.js +5 -5
- package/package.json +7 -7
- package/src/client.ts +2 -2
- package/src/config.ts +15 -15
- package/src/plugin.ts +24 -24
- package/src/tool.ts +4 -4
package/lib/src/plugin.d.ts
CHANGED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
*/
|
|
24
24
|
import { Plugin, ResourceType, type IAppRouter, type ResourceRequirement } from "@databricks/appkit";
|
|
25
25
|
import { type AgentToolDefinition, type ToolProvider } from "@databricks/appkit/beta";
|
|
26
|
-
import { search as
|
|
26
|
+
import { search as sharedSearch } from "@dbx-tools/shared-search";
|
|
27
27
|
import { type SearchPluginConfig } from "./config.ts";
|
|
28
28
|
/**
|
|
29
29
|
* AppKit plugin exposing AI Search as a search box, an agent tool set, and a
|
|
@@ -145,7 +145,7 @@ export declare class SearchPlugin extends Plugin<SearchPluginConfig> implements
|
|
|
145
145
|
executeAgentTool(name: string, args: unknown, signal?: AbortSignal): Promise<unknown>;
|
|
146
146
|
exports(): {
|
|
147
147
|
/** Search one index (default when omitted). Runs as the current context user. */
|
|
148
|
-
search: (request:
|
|
148
|
+
search: (request: sharedSearch.SearchRequest, signal?: AbortSignal) => Promise<{
|
|
149
149
|
query: string;
|
|
150
150
|
hits: {
|
|
151
151
|
id: string;
|
|
@@ -157,7 +157,7 @@ export declare class SearchPlugin extends Plugin<SearchPluginConfig> implements
|
|
|
157
157
|
index?: string | undefined;
|
|
158
158
|
}>;
|
|
159
159
|
/** Search across every configured index and merge the hits. */
|
|
160
|
-
universalSearch: (request:
|
|
160
|
+
universalSearch: (request: sharedSearch.UniversalSearchRequest, signal?: AbortSignal) => Promise<{
|
|
161
161
|
query: string;
|
|
162
162
|
hits: {
|
|
163
163
|
id: string;
|
|
@@ -177,9 +177,9 @@ export declare class SearchPlugin extends Plugin<SearchPluginConfig> implements
|
|
|
177
177
|
count: number;
|
|
178
178
|
}>;
|
|
179
179
|
/** Create a Vector Search index (throws when writes are disabled). */
|
|
180
|
-
createIndex: (request:
|
|
180
|
+
createIndex: (request: sharedSearch.CreateIndexRequest, signal?: AbortSignal) => Promise<import("./client.ts").IndexInfo>;
|
|
181
181
|
/** Sync a Delta Sync index from its source table (throws when writes are disabled). */
|
|
182
|
-
syncIndex: (request:
|
|
182
|
+
syncIndex: (request: sharedSearch.SyncIndexRequest, signal?: AbortSignal) => Promise<{
|
|
183
183
|
index: string;
|
|
184
184
|
synced: boolean;
|
|
185
185
|
}>;
|
|
@@ -196,12 +196,12 @@ export declare class SearchPlugin extends Plugin<SearchPluginConfig> implements
|
|
|
196
196
|
* @example
|
|
197
197
|
* ```ts
|
|
198
198
|
* import { createApp, server } from "@databricks/appkit";
|
|
199
|
-
* import { plugin as searchPlugin, tool as
|
|
199
|
+
* import { plugin as searchPlugin, tool as searchToolApi } from "@dbx-tools/search";
|
|
200
200
|
* import { agents, plugin as mastraPlugin } from "@dbx-tools/appkit-mastra";
|
|
201
201
|
*
|
|
202
202
|
* const support = agents.createAgent({
|
|
203
203
|
* instructions: "Answer from the docs; use `search` to find them.",
|
|
204
|
-
* tools: () => ({ search:
|
|
204
|
+
* tools: () => ({ search: searchToolApi.searchTool() }),
|
|
205
205
|
* });
|
|
206
206
|
*
|
|
207
207
|
* await createApp({
|
package/lib/src/plugin.js
CHANGED
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
*/
|
|
24
24
|
import { lakebase, Plugin, ResourceType, toPlugin, } from "@databricks/appkit";
|
|
25
25
|
import { defineTool, executeFromRegistry, toolsFromRegistry, } from "@databricks/appkit/beta";
|
|
26
|
-
import { plugin as
|
|
27
|
-
import { error as
|
|
28
|
-
import { search as
|
|
26
|
+
import { plugin as appkitPlugin } from "@dbx-tools/appkit";
|
|
27
|
+
import { error as sharedError, log, string } from "@dbx-tools/shared-core";
|
|
28
|
+
import { search as sharedSearch } from "@dbx-tools/shared-search";
|
|
29
29
|
import { SEARCH_CONFIG_SCHEMA, DATABRICKS_INDEX_ENV, ENDPOINT_ENV, INDEX_ENV, resolveSearchConfig, } from "./config.js";
|
|
30
30
|
import { toCreateIndexOptions } from "./index-tools.js";
|
|
31
31
|
import { LakebaseSearchBackend } from "./lakebase.js";
|
|
@@ -133,14 +133,14 @@ export class SearchPlugin extends Plugin {
|
|
|
133
133
|
const registry = {
|
|
134
134
|
search: defineTool({
|
|
135
135
|
description: SEARCH_TOOL_DESCRIPTION,
|
|
136
|
-
schema:
|
|
136
|
+
schema: sharedSearch.searchRequestSchema,
|
|
137
137
|
annotations: { effect: "read", requiresUserContext: true },
|
|
138
138
|
autoInheritable: false,
|
|
139
139
|
execute: async (args, signal) => this.runSearch(args, signal),
|
|
140
140
|
}),
|
|
141
141
|
universal_search: defineTool({
|
|
142
142
|
description: UNIVERSAL_SEARCH_TOOL_DESCRIPTION,
|
|
143
|
-
schema:
|
|
143
|
+
schema: sharedSearch.universalSearchRequestSchema,
|
|
144
144
|
annotations: { effect: "read", requiresUserContext: true },
|
|
145
145
|
autoInheritable: false,
|
|
146
146
|
execute: async (args, signal) => this.runUniversalSearch(args, signal),
|
|
@@ -149,23 +149,23 @@ export class SearchPlugin extends Plugin {
|
|
|
149
149
|
if (config.allowWrite) {
|
|
150
150
|
registry.add_documents = defineTool({
|
|
151
151
|
description: ADD_DOCUMENTS_TOOL_DESCRIPTION,
|
|
152
|
-
schema:
|
|
152
|
+
schema: sharedSearch.searchRequestSchema
|
|
153
153
|
.pick({ index: true })
|
|
154
|
-
.extend({ documents:
|
|
154
|
+
.extend({ documents: sharedSearch.searchDocumentSchema.array() }),
|
|
155
155
|
annotations: { effect: "write", requiresUserContext: true },
|
|
156
156
|
autoInheritable: false,
|
|
157
157
|
execute: async (args, signal) => this.runAddDocuments(args, signal),
|
|
158
158
|
});
|
|
159
159
|
registry.create_index = defineTool({
|
|
160
160
|
description: CREATE_INDEX_TOOL_DESCRIPTION,
|
|
161
|
-
schema:
|
|
161
|
+
schema: sharedSearch.createIndexRequestSchema,
|
|
162
162
|
annotations: { effect: "write", requiresUserContext: true },
|
|
163
163
|
autoInheritable: false,
|
|
164
164
|
execute: async (args, signal) => this.runCreateIndex(args, signal),
|
|
165
165
|
});
|
|
166
166
|
registry.sync_index = defineTool({
|
|
167
167
|
description: SYNC_INDEX_TOOL_DESCRIPTION,
|
|
168
|
-
schema:
|
|
168
|
+
schema: sharedSearch.syncIndexRequestSchema,
|
|
169
169
|
annotations: { effect: "write", requiresUserContext: true },
|
|
170
170
|
autoInheritable: false,
|
|
171
171
|
execute: async (args, signal) => this.runSyncIndex(args, signal),
|
|
@@ -220,7 +220,7 @@ export class SearchPlugin extends Plugin {
|
|
|
220
220
|
string.trimToNull(process.env.DATABRICKS_VECTOR_SEARCH_ENDPOINT) !== null;
|
|
221
221
|
if (hasEndpoint)
|
|
222
222
|
return undefined;
|
|
223
|
-
const lake =
|
|
223
|
+
const lake = appkitPlugin.instance(this.context, lakebase);
|
|
224
224
|
if (!lake)
|
|
225
225
|
return undefined;
|
|
226
226
|
logger.info("backend-lakebase", {
|
|
@@ -273,7 +273,7 @@ export class SearchPlugin extends Plugin {
|
|
|
273
273
|
});
|
|
274
274
|
}
|
|
275
275
|
catch (cause) {
|
|
276
|
-
logger.warn("ensure-failed", { index, message:
|
|
276
|
+
logger.warn("ensure-failed", { index, message: sharedError.errorMessage(cause) });
|
|
277
277
|
}
|
|
278
278
|
}
|
|
279
279
|
/** Build a Vector Search `schema_json` map from a seed document's value types. */
|
|
@@ -314,7 +314,7 @@ export class SearchPlugin extends Plugin {
|
|
|
314
314
|
path: SEARCH_ROUTE,
|
|
315
315
|
handler: async (req, res) => {
|
|
316
316
|
await this.respond(res, "search", () => {
|
|
317
|
-
const request =
|
|
317
|
+
const request = sharedSearch.searchRequestSchema.parse(req.body ?? {});
|
|
318
318
|
return this.asUser(req).runSearch(request);
|
|
319
319
|
});
|
|
320
320
|
},
|
|
@@ -325,7 +325,7 @@ export class SearchPlugin extends Plugin {
|
|
|
325
325
|
path: UNIVERSAL_ROUTE,
|
|
326
326
|
handler: async (req, res) => {
|
|
327
327
|
await this.respond(res, "universalSearch", () => {
|
|
328
|
-
const request =
|
|
328
|
+
const request = sharedSearch.universalSearchRequestSchema.parse(req.body ?? {});
|
|
329
329
|
return this.asUser(req).runUniversalSearch(request);
|
|
330
330
|
});
|
|
331
331
|
},
|
|
@@ -392,7 +392,7 @@ export class SearchPlugin extends Plugin {
|
|
|
392
392
|
res.json(await run());
|
|
393
393
|
}
|
|
394
394
|
catch (cause) {
|
|
395
|
-
const message =
|
|
395
|
+
const message = sharedError.errorMessage(cause);
|
|
396
396
|
logger.warn("route-failed", { operation, message });
|
|
397
397
|
res.status(500).json({ error: message });
|
|
398
398
|
}
|
|
@@ -437,7 +437,7 @@ export class SearchPlugin extends Plugin {
|
|
|
437
437
|
};
|
|
438
438
|
}
|
|
439
439
|
async runSearch(args, signal) {
|
|
440
|
-
const request =
|
|
440
|
+
const request = sharedSearch.searchRequestSchema.parse(args);
|
|
441
441
|
const { client } = getSearchRuntime();
|
|
442
442
|
return client.search(request.query, {
|
|
443
443
|
...(request.index ? { index: request.index } : {}),
|
|
@@ -450,7 +450,7 @@ export class SearchPlugin extends Plugin {
|
|
|
450
450
|
});
|
|
451
451
|
}
|
|
452
452
|
async runUniversalSearch(args, signal) {
|
|
453
|
-
const request =
|
|
453
|
+
const request = sharedSearch.universalSearchRequestSchema.parse(args);
|
|
454
454
|
const { client } = getSearchRuntime();
|
|
455
455
|
return client.universalSearch(request.query, {
|
|
456
456
|
...(request.indexes ? { indexes: request.indexes } : {}),
|
|
@@ -467,12 +467,12 @@ export class SearchPlugin extends Plugin {
|
|
|
467
467
|
return client.addDocuments(index, documents, signal);
|
|
468
468
|
}
|
|
469
469
|
async runCreateIndex(args, signal) {
|
|
470
|
-
const request =
|
|
470
|
+
const request = sharedSearch.createIndexRequestSchema.parse(args);
|
|
471
471
|
const { client } = getSearchRuntime();
|
|
472
472
|
return client.createIndex(request.name, toCreateIndexOptions(request, signal));
|
|
473
473
|
}
|
|
474
474
|
async runSyncIndex(args, signal) {
|
|
475
|
-
const request =
|
|
475
|
+
const request = sharedSearch.syncIndexRequestSchema.parse(args);
|
|
476
476
|
const { client, config } = getSearchRuntime();
|
|
477
477
|
const index = request.index ?? config.defaultIndex ?? "";
|
|
478
478
|
await client.syncIndex(index, signal);
|
|
@@ -485,12 +485,12 @@ export class SearchPlugin extends Plugin {
|
|
|
485
485
|
* @example
|
|
486
486
|
* ```ts
|
|
487
487
|
* import { createApp, server } from "@databricks/appkit";
|
|
488
|
-
* import { plugin as searchPlugin, tool as
|
|
488
|
+
* import { plugin as searchPlugin, tool as searchToolApi } from "@dbx-tools/search";
|
|
489
489
|
* import { agents, plugin as mastraPlugin } from "@dbx-tools/appkit-mastra";
|
|
490
490
|
*
|
|
491
491
|
* const support = agents.createAgent({
|
|
492
492
|
* instructions: "Answer from the docs; use `search` to find them.",
|
|
493
|
-
* tools: () => ({ search:
|
|
493
|
+
* tools: () => ({ search: searchToolApi.searchTool() }),
|
|
494
494
|
* });
|
|
495
495
|
*
|
|
496
496
|
* await createApp({
|
|
@@ -503,4 +503,4 @@ export class SearchPlugin extends Plugin {
|
|
|
503
503
|
* ```
|
|
504
504
|
*/
|
|
505
505
|
export const search = toPlugin(SearchPlugin);
|
|
506
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFlBQVksRUFDWixRQUFRLEdBSVQsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsVUFBVSxFQUNWLG1CQUFtQixFQUNuQixpQkFBaUIsR0FJbEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsTUFBTSxJQUFJLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sRUFBRSxLQUFLLElBQUksU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxJQUFJLGNBQWMsRUFBMkIsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixZQUFZLEVBQ1osU0FBUyxFQUNULG1CQUFtQixHQUVwQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEUsT0FBTyxFQUNMLDhCQUE4QixFQUM5Qiw2QkFBNkIsRUFDN0IsdUJBQXVCLEVBQ3ZCLDJCQUEyQixFQUMzQixpQ0FBaUMsR0FDbEMsTUFBTSxhQUFhLENBQUM7QUFFckIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUVwQyw0RUFBNEU7QUFD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QztRQUNqQixJQUFJLENBQUM7WUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDdkMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRTtnQkFDekMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNyRCxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzNELEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN0RSxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZFLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENB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QztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBYSxFQUFFLE1BQW9CO1FBQzVELE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDekQsTUFBTSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNqQyxDQUFDOztBQUdIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXBwS2l0IHBsdWdpbiAocmVnaXN0ZXJlZCBuYW1lOiBgc2VhcmNoYCkgdGhhdCB0dXJucyBhIERhdGFicmlja3MgQUlcbiAqIFNlYXJjaCAoVmVjdG9yIFNlYXJjaCkgaW5kZXggaW50byBhIGJhdHRlcmllcy1pbmNsdWRlZCBzZWFyY2ggc3VyZmFjZS4gSXQgaXNcbiAqIHRoZSBcInNob3J0Y3V0XCIgaGFsZiBvZiB0aGlzIHBhY2thZ2U6IHJlZ2lzdGVyIGl0IHdpdGggbm90aGluZyBidXQgYW4gaW5kZXhcbiAqIG5hbWUgYW5kIHlvdSBnZXQsIGFsbCBhdCBvbmNlIC1cbiAqXG4gKiAgIC0gYSBgc2VhcmNoYCAvIGB1bml2ZXJzYWxfc2VhcmNoYCAvIChvcHQtaW4pIGBhZGRfZG9jdW1lbnRzYCB0b29sIHNldCBmb3JcbiAqICAgICBib3RoIE1hc3RyYSBhbmQgQXBwS2l0IGFnZW50cyAoYXV0b2NvbXBsZXRlIGlzIGEgc21hbGwtYGxpbWl0YCBzZWFyY2gpO1xuICogICAtIEhUVFAgcm91dGVzIHVuZGVyIGAvYXBpL3NlYXJjaGAgYSBicm93c2VyIHNlYXJjaCBib3ggY2FsbHMgZGlyZWN0bHlcbiAqICAgICAoYFBPU1QgL2Agc2VhcmNoLCBgUE9TVCAvdW5pdmVyc2FsYCBmZWRlcmF0ZWQsIGBHRVQgL2luZGV4ZXNgIGNhdGFsb2d1ZSxcbiAqICAgICBhbmQgYFBPU1QgL2RvY3VtZW50c2Agd2hlbiB3cml0ZXMgYXJlIGVuYWJsZWQpO1xuICogICAtIGEgYGNsaWVudENvbmZpZygpYCBwYXlsb2FkIHNvIGEgVUkga25vd3MgdGhlIGluZGV4ZXMsIGRlZmF1bHQsIGFuZCBwYWdlXG4gKiAgICAgc2l6ZSBhdCBib290IHdpdGggbm8gcm91bmQtdHJpcDtcbiAqICAgLSBgZXhwb3J0cygpYCBzbyBhcHAgY29kZSBjYW4gYGFwcGtpdC5zZWFyY2guc2VhcmNoKC4uLilgIGRpcmVjdGx5LlxuICpcbiAqIEV2ZXJ5dGhpbmcgcnVucyB1bmRlciB0aGUgY2FsbGVyJ3MgT0JPIGlkZW50aXR5IChyb3V0ZXMgd3JhcCBpbiBgYXNVc2VyYCksXG4gKiBzbyBVbml0eSBDYXRhbG9nIEFDTHMgb24gdGhlIGluZGV4IGFwcGx5LiBSZWdpc3RlcmluZyB0aGUgcGx1Z2luIHJlc29sdmVzXG4gKiBhbmQgbG9ncyB0aGUgZWZmZWN0aXZlIGNvbmZpZyAoZGVmYXVsdCBpbmRleCwga25vd24gaW5kZXhlcywgcGFnZSBzaXplLFxuICogbW9kZSkgc28gYSBtaXNjb25maWd1cmF0aW9uIHNob3dzIHVwIGluIHRoZSBib290IGxvZyByYXRoZXIgdGhhbiBvbiB0aGVcbiAqIGZpcnN0IHNlYXJjaC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHtcbiAgbGFrZWJhc2UsXG4gIFBsdWdpbixcbiAgUmVzb3VyY2VUeXBlLFxuICB0b1BsdWdpbixcbiAgdHlwZSBJQXBwUm91dGVyLFxuICB0eXBlIFBsdWdpbk1hbmlmZXN0LFxuICB0eXBlIFJlc291cmNlUmVxdWlyZW1lbnQsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7XG4gIGRlZmluZVRvb2wsXG4gIGV4ZWN1dGVGcm9tUmVnaXN0cnksXG4gIHRvb2xzRnJvbVJlZ2lzdHJ5LFxuICB0eXBlIEFnZW50VG9vbERlZmluaXRpb24sXG4gIHR5cGUgVG9vbFByb3ZpZGVyLFxuICB0eXBlIFRvb2xSZWdpc3RyeSxcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdC9iZXRhXCI7XG5pbXBvcnQgeyBwbHVnaW4gYXMgcGx1Z2luTG9va3VwIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBlcnJvciBhcyBlcnJvclV0aWwsIGxvZywgc3RyaW5nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHNlYXJjaCBhcyBzZWFyY2hDb250cmFjdCwgdHlwZSBTZWFyY2hDbGllbnRDb25maWcgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtc2VhcmNoXCI7XG5pbXBvcnQge1xuICBTRUFSQ0hfQ09ORklHX1NDSEVNQSxcbiAgREFUQUJSSUNLU19JTkRFWF9FTlYsXG4gIEVORFBPSU5UX0VOVixcbiAgSU5ERVhfRU5WLFxuICByZXNvbHZlU2VhcmNoQ29uZmlnLFxuICB0eXBlIFNlYXJjaFBsdWdpbkNvbmZpZyxcbn0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQgeyB0b0NyZWF0ZUluZGV4T3B0aW9ucyB9IGZyb20gXCIuL2luZGV4LXRvb2xzLnRzXCI7XG5pbXBvcnQgeyBMYWtlYmFzZVNlYXJjaEJhY2tlbmQgfSBmcm9tIFwiLi9sYWtlYmFzZS50c1wiO1xuaW1wb3J0IHsgdG9Eb2N1bWVudEFycmF5IH0gZnJvbSBcIi4vcXVlcnkudHNcIjtcbmltcG9ydCB7IGdldFNlYXJjaFJ1bnRpbWUsIHJlc2V0U2VhcmNoUnVudGltZSB9IGZyb20gXCIuL3J1bnRpbWUudHNcIjtcbmltcG9ydCB7XG4gIEFERF9ET0NVTUVOVFNfVE9PTF9ERVNDUklQVElPTixcbiAgQ1JFQVRFX0lOREVYX1RPT0xfREVTQ1JJUFRJT04sXG4gIFNFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICBTWU5DX0lOREVYX1RPT0xfREVTQ1JJUFRJT04sXG4gIFVOSVZFUlNBTF9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTixcbn0gZnJvbSBcIi4vc2NoZW1hLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJzZWFyY2hcIik7XG5cbi8qKiBNb3VudC1yZWxhdGl2ZSByb3V0ZSAodW5kZXIgYC9hcGkvc2VhcmNoYCkgZm9yIGEgc2luZ2xlLWluZGV4IHNlYXJjaC4gKi9cbmNvbnN0IFNFQVJDSF9ST1VURSA9IFwiL1wiO1xuXG4vKiogTW91bnQtcmVsYXRpdmUgcm91dGUgZm9yIGEgdW5pdmVyc2FsIChmZWRlcmF0ZWQpIHNlYXJjaCBhY3Jvc3MgaW5kZXhlcy4gKi9cbmNvbnN0IFVOSVZFUlNBTF9ST1VURSA9IFwiL3VuaXZlcnNhbFwiO1xuXG4vKiogTW91bnQtcmVsYXRpdmUgcm91dGUgc2VydmluZyB0aGUgaW5kZXggY2F0YWxvZ3VlIGEgc2VhcmNoIGJveCByZWFkcy4gKi9cbmNvbnN0IElOREVYRVNfUk9VVEUgPSBcIi9pbmRleGVzXCI7XG5cbi8qKiBNb3VudC1yZWxhdGl2ZSByb3V0ZSBmb3IgYWRkaW5nIGRvY3VtZW50cyB0byBhIGRpcmVjdC1hY2Nlc3MgaW5kZXguICovXG5jb25zdCBET0NVTUVOVFNfUk9VVEUgPSBcIi9kb2N1bWVudHNcIjtcblxuLyoqIE1vdW50LXJlbGF0aXZlIHJvdXRlIGZvciBjcmVhdGluZyBhIFZlY3RvciBTZWFyY2ggaW5kZXguICovXG5jb25zdCBJTkRFWF9ST1VURSA9IFwiL2luZGV4XCI7XG5cbi8qKiBNb3VudC1yZWxhdGl2ZSByb3V0ZSBmb3Igc3luY2luZyBhIERlbHRhIFN5bmMgaW5kZXggZnJvbSBpdHMgc291cmNlIHRhYmxlLiAqL1xuY29uc3QgSU5ERVhfU1lOQ19ST1VURSA9IFwiL2luZGV4L3N5bmNcIjtcblxuLyoqXG4gKiBUaGUgQUkgU2VhcmNoIGluZGV4IHJlc291cmNlLiBEZWNsYXJlZCBvcHRpb25hbCBiZWNhdXNlIHRoZSBwbHVnaW4gaXMgaGFwcHlcbiAqIHdpdGggbm8gZGVmYXVsdCBpbmRleCAoYSBjYWxsZXIgY2FuIG5hbWUgb25lIHBlciByZXF1ZXN0KTsgaXQgaXMgcHJvbW90ZWQgdG9cbiAqIHJlcXVpcmVkIG9uY2UgYSBkZXBsb3ltZW50IHBpbnMgb25lLiBgU0VMRUNUYCBpcyB0aGUgcGVybWlzc2lvbiBhIHF1ZXJ5IG5lZWRzLlxuICovXG5jb25zdCBJTkRFWF9SRVNPVVJDRSA9IHtcbiAgdHlwZTogUmVzb3VyY2VUeXBlLlZFQ1RPUl9TRUFSQ0hfSU5ERVgsXG4gIGFsaWFzOiBcIkFJIFNlYXJjaCBJbmRleFwiLFxuICByZXNvdXJjZUtleTogXCJzZWFyY2gtaW5kZXhcIixcbiAgZGVzY3JpcHRpb246XG4gICAgXCJEYXRhYnJpY2tzIEFJIFNlYXJjaCAoVmVjdG9yIFNlYXJjaCkgaW5kZXggdGhlIGFwcCBzZWFyY2hlcyBieSBkZWZhdWx0IFwiICtcbiAgICBcIihjYXRhbG9nLnNjaGVtYS5pbmRleCkuIE9wdGlvbmFsOiBhIHJlcXVlc3QgbWF5IG5hbWUgYW55IGluZGV4IHRoZSBjYWxsZXIgY2FuIHJlYWQuXCIsXG4gIHBlcm1pc3Npb246IFwiU0VMRUNUXCIsXG4gIGZpZWxkczoge1xuICAgIG5hbWU6IHtcbiAgICAgIGVudjogSU5ERVhfRU5WLFxuICAgICAgZGVzY3JpcHRpb246IGBEZWZhdWx0IEFJIFNlYXJjaCBpbmRleC4gJHtEQVRBQlJJQ0tTX0lOREVYX0VOVn0gaXMgYWxzbyBob25vcmVkLmAsXG4gICAgICBkaXNjb3Zlcnk6IHtcbiAgICAgICAgdHlwZTogXCJjbGlcIixcbiAgICAgICAgY2xpQ29tbWFuZDpcbiAgICAgICAgICBcImRhdGFicmlja3MgdmVjdG9yLXNlYXJjaC1pbmRleGVzIGxpc3QtaW5kZXhlcyAtLWVuZHBvaW50LW5hbWUgPEVORFBPSU5UPiAtLW91dHB1dCBqc29uXCIsXG4gICAgICAgIHNlbGVjdEZpZWxkOiBcIi5uYW1lXCIsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59IHNhdGlzZmllcyBPbWl0PFJlc291cmNlUmVxdWlyZW1lbnQsIFwicmVxdWlyZWRcIj47XG5cbi8qKlxuICogQXBwS2l0IHBsdWdpbiBleHBvc2luZyBBSSBTZWFyY2ggYXMgYSBzZWFyY2ggYm94LCBhbiBhZ2VudCB0b29sIHNldCwgYW5kIGFcbiAqIGRpcmVjdCBBUEkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjcmVhdGVBcHAsIHNlcnZlciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbiAqIGltcG9ydCB7IHBsdWdpbiBhcyBzZWFyY2hQbHVnaW4gfSBmcm9tIFwiQGRieC10b29scy9zZWFyY2hcIjtcbiAqXG4gKiBhd2FpdCBjcmVhdGVBcHAoe1xuICogICBwbHVnaW5zOiBbXG4gKiAgICAgc2VydmVyKCksXG4gKiAgICAgLy8gemVyby1jb25maWc6IHJlYWRzIERBVEFCUklDS1NfVkVDVE9SX1NFQVJDSF9JTkRFWFxuICogICAgIHNlYXJjaFBsdWdpbi5zZWFyY2goKSxcbiAqICAgICAvLyBvciBnbyBkZWVwZXI6XG4gKiAgICAgLy8gc2VhcmNoUGx1Z2luLnNlYXJjaCh7XG4gKiAgICAgLy8gICBpbmRleDogXCJtYWluLnN1cHBvcnQuZG9jc1wiLFxuICogICAgIC8vICAgaW5kZXhlczogW1wibWFpbi5zdXBwb3J0LmRvY3NcIiwgXCJtYWluLmNhdGFsb2cucHJvZHVjdHNcIl0sXG4gKiAgICAgLy8gICBjb2x1bW5zOiBbXCJ0aXRsZVwiLCBcInVybFwiLCBcImJvZHlcIl0sXG4gKiAgICAgLy8gICBtb2RlOiBcImh5YnJpZFwiLFxuICogICAgIC8vIH0pLFxuICogICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFNlYXJjaFBsdWdpbiBleHRlbmRzIFBsdWdpbjxTZWFyY2hQbHVnaW5Db25maWc+IGltcGxlbWVudHMgVG9vbFByb3ZpZGVyIHtcbiAgc3RhdGljIG1hbmlmZXN0ID0ge1xuICAgIG5hbWU6IFwic2VhcmNoXCIsXG4gICAgZGlzcGxheU5hbWU6IFwiQUkgU2VhcmNoXCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlNlYXJjaCBEYXRhYnJpY2tzIEFJIFNlYXJjaCAoVmVjdG9yIFNlYXJjaCkgaW5kZXhlczogYWdlbnQgdG9vbHMsIEhUVFAgcm91dGVzIGZvciBhIFwiICtcbiAgICAgIFwic2VhcmNoIGJveCwgdW5pdmVyc2FsIHNlYXJjaCBhY3Jvc3MgaW5kZXhlcywgYW5kIGFuIG9wdC1pbiBkb2N1bWVudCB3cml0ZSBzdXJmYWNlLlwiLFxuICAgIHN0YWJpbGl0eTogXCJiZXRhXCIsXG4gICAgcmVzb3VyY2VzOiB7XG4gICAgICByZXF1aXJlZDogW10sXG4gICAgICBvcHRpb25hbDogW0lOREVYX1JFU09VUkNFXSxcbiAgICB9LFxuICAgIGNvbmZpZzogeyBzY2hlbWE6IFNFQVJDSF9DT05GSUdfU0NIRU1BIH0sXG4gIH0gc2F0aXNmaWVzIFBsdWdpbk1hbmlmZXN0PFwic2VhcmNoXCI+O1xuXG4gIC8qKiBUaGUgYmFzZSBwYXRoIEFwcEtpdCBtb3VudHMgdGhpcyBwbHVnaW4ncyByb3V0ZXMgdW5kZXIuICovXG4gIHByaXZhdGUgZ2V0IGJhc2VQYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAvYXBpLyR7U2VhcmNoUGx1Z2luLm1hbmlmZXN0Lm5hbWV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9tb3RlIHRoZSBpbmRleCB0byBhIHJlcXVpcmVkIHJlc291cmNlIG9uY2UgYSBkZXBsb3ltZW50IHBpbnMgYSBkZWZhdWx0LFxuICAgKiB0aHJvdWdoIHBsdWdpbiBjb25maWcgb3IgZWl0aGVyIGVudmlyb25tZW50IG5hbWUuXG4gICAqL1xuICBzdGF0aWMgZ2V0UmVzb3VyY2VSZXF1aXJlbWVudHMoY29uZmlnOiBTZWFyY2hQbHVnaW5Db25maWcpOiBSZXNvdXJjZVJlcXVpcmVtZW50W10ge1xuICAgIGNvbnN0IHBpbm5lZCA9XG4gICAgICBzdHJpbmcudHJpbVRvTnVsbChjb25maWcuaW5kZXgpID8/XG4gICAgICBzdHJpbmcudHJpbVRvTnVsbChwcm9jZXNzLmVudltJTkRFWF9FTlZdKSA/P1xuICAgICAgc3RyaW5nLnRyaW1Ub051bGwocHJvY2Vzcy5lbnZbREFUQUJSSUNLU19JTkRFWF9FTlZdKTtcbiAgICByZXR1cm4gcGlubmVkID09PSBudWxsID8gW10gOiBbeyAuLi5JTkRFWF9SRVNPVVJDRSwgcmVxdWlyZWQ6IHRydWUgfV07XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRvb2xzIHRoaXMgcGx1Z2luIG9mZmVycyB0byBhbiBBcHBLaXQgYWdlbnQuIGBzZWFyY2hgIC9cbiAgICogYHVuaXZlcnNhbF9zZWFyY2hgIGFyZSByZWFkczsgYGFkZF9kb2N1bWVudHNgIC8gYGNyZWF0ZV9pbmRleGAgL1xuICAgKiBgc3luY19pbmRleGAgYXJlIG9ubHkgb2ZmZXJlZCB3aGVuIHRoZSB3cml0ZSBzdXJmYWNlIGlzIGVuYWJsZWQuIE5vbmUgaXNcbiAgICogYXV0b0luaGVyaXRhYmxlOiBldmVyeSB0b29sIHJ1bnMgdW5kZXIgdGhlIGNhbGxlcidzIGlkZW50aXR5LCBzbyBpdCBtdXN0IGJlXG4gICAqIGdyYW50ZWQgZXhwbGljaXRseS5cbiAgICovXG4gIHByaXZhdGUgZ2V0IHRvb2xzKCk6IFRvb2xSZWdpc3RyeSB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IGdldFNlYXJjaFJ1bnRpbWUoeyBjb25maWc6IHRoaXMuY29uZmlnIH0pO1xuICAgIGNvbnN0IHJlZ2lzdHJ5OiBUb29sUmVnaXN0cnkgPSB7XG4gICAgICBzZWFyY2g6IGRlZmluZVRvb2woe1xuICAgICAgICBkZXNjcmlwdGlvbjogU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sXG4gICAgICAgIHNjaGVtYTogc2VhcmNoQ29udHJhY3Quc2VhcmNoUmVxdWVzdFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHsgZWZmZWN0OiBcInJlYWRcIiwgcmVxdWlyZXNVc2VyQ29udGV4dDogdHJ1ZSB9LFxuICAgICAgICBhdXRvSW5oZXJpdGFibGU6IGZhbHNlLFxuICAgICAgICBleGVjdXRlOiBhc3luYyAoYXJncywgc2lnbmFsKSA9PiB0aGlzLnJ1blNlYXJjaChhcmdzLCBzaWduYWwpLFxuICAgICAgfSksXG4gICAgICB1bml2ZXJzYWxfc2VhcmNoOiBkZWZpbmVUb29sKHtcbiAgICAgICAgZGVzY3JpcHRpb246IFVOSVZFUlNBTF9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTixcbiAgICAgICAgc2NoZW1hOiBzZWFyY2hDb250cmFjdC51bml2ZXJzYWxTZWFyY2hSZXF1ZXN0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczogeyBlZmZlY3Q6IFwicmVhZFwiLCByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIH0sXG4gICAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzLCBzaWduYWwpID0+IHRoaXMucnVuVW5pdmVyc2FsU2VhcmNoKGFyZ3MsIHNpZ25hbCksXG4gICAgICB9KSxcbiAgICB9O1xuICAgIGlmIChjb25maWcuYWxsb3dXcml0ZSkge1xuICAgICAgcmVnaXN0cnkuYWRkX2RvY3VtZW50cyA9IGRlZmluZVRvb2woe1xuICAgICAgICBkZXNjcmlwdGlvbjogQUREX0RPQ1VNRU5UU19UT09MX0RFU0NSSVBUSU9OLFxuICAgICAgICBzY2hlbWE6IHNlYXJjaENvbnRyYWN0LnNlYXJjaFJlcXVlc3RTY2hlbWFcbiAgICAgICAgICAucGljayh7IGluZGV4OiB0cnVlIH0pXG4gICAgICAgICAgLmV4dGVuZCh7IGRvY3VtZW50czogc2VhcmNoQ29udHJhY3Quc2VhcmNoRG9jdW1lbnRTY2hlbWEuYXJyYXkoKSB9KSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHsgZWZmZWN0OiBcIndyaXRlXCIsIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWUgfSxcbiAgICAgICAgYXV0b0luaGVyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3MsIHNpZ25hbCkgPT4gdGhpcy5ydW5BZGREb2N1bWVudHMoYXJncywgc2lnbmFsKSxcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0cnkuY3JlYXRlX2luZGV4ID0gZGVmaW5lVG9vbCh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBDUkVBVEVfSU5ERVhfVE9PTF9ERVNDUklQVElPTixcbiAgICAgICAgc2NoZW1hOiBzZWFyY2hDb250cmFjdC5jcmVhdGVJbmRleFJlcXVlc3RTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7IGVmZmVjdDogXCJ3cml0ZVwiLCByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIH0sXG4gICAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzLCBzaWduYWwpID0+IHRoaXMucnVuQ3JlYXRlSW5kZXgoYXJncywgc2lnbmFsKSxcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0cnkuc3luY19pbmRleCA9IGRlZmluZVRvb2woe1xuICAgICAgICBkZXNjcmlwdGlvbjogU1lOQ19JTkRFWF9UT09MX0RFU0NSSVBUSU9OLFxuICAgICAgICBzY2hlbWE6IHNlYXJjaENvbnRyYWN0LnN5bmNJbmRleFJlcXVlc3RTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7IGVmZmVjdDogXCJ3cml0ZVwiLCByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIH0sXG4gICAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzLCBzaWduYWwpID0+IHRoaXMucnVuU3luY0luZGV4KGFyZ3MsIHNpZ25hbCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZ2lzdHJ5O1xuICB9XG5cbiAgLyoqIFByaW1lIHRoZSBzaGFyZWQgcnVudGltZSBmcm9tIGNvbmZpZyBhbmQgbG9nIHRoZSBlZmZlY3RpdmUgcG9saWN5IGF0IGJvb3QuICovXG4gIG92ZXJyaWRlIGFzeW5jIHNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIENob29zZSBhIGJhY2tlbmQuIFZlY3RvciBTZWFyY2ggaXMgcHJpbWFyeTsgd2hlbiBOTyBWZWN0b3IgU2VhcmNoXG4gICAgLy8gZW5kcG9pbnQgaXMgY29uZmlndXJlZCBidXQgdGhlIEFwcEtpdCBgbGFrZWJhc2VgIHBsdWdpbiBpcyByZWdpc3RlcmVkLFxuICAgIC8vIGZhbGwgYmFjayB0byBhIFBvc3RncmVzIGZ1bGwtdGV4dCBpbmRleC4gQm90aCBhbnN3ZXIgd2l0aCB0aGUgaWRlbnRpY2FsXG4gICAgLy8gc2hhcGUsIHNvIHRoaXMgY2hvaWNlIGlzIGludmlzaWJsZSB0byB0b29scywgcm91dGVzLCBhbmQgdGhlIFVJLlxuICAgIGNvbnN0IGxha2ViYXNlQmFja2VuZCA9IHRoaXMucmVzb2x2ZUxha2ViYXNlQmFja2VuZCgpO1xuICAgIC8vIFRoZSBydW50aW1lIG1heSBhbHJlYWR5IGhhdmUgYmVlbiBidWlsdCAoY29uZmlnLW9ubHkpIHdoZW4gYHRvb2xzKClgIHJhblxuICAgIC8vIGR1cmluZyByZWdpc3RyYXRpb247IHJlYnVpbGQgaXQgc28gaXQgY2FycmllcyB0aGUgY2hvc2VuIGJhY2tlbmQuXG4gICAgcmVzZXRTZWFyY2hSdW50aW1lKCk7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IGdldFNlYXJjaFJ1bnRpbWUoe1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIC4uLihsYWtlYmFzZUJhY2tlbmQgPyB7IGxha2ViYXNlOiBsYWtlYmFzZUJhY2tlbmQgfSA6IHt9KSxcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbyhcInJlYWR5XCIsIHtcbiAgICAgIGJhY2tlbmQ6IGxha2ViYXNlQmFja2VuZCA/IFwibGFrZWJhc2VcIiA6IFwidmVjdG9yLXNlYXJjaFwiLFxuICAgICAgZGVmYXVsdEluZGV4OiBjb25maWcuZGVmYXVsdEluZGV4ID8/IFwiKG5vbmUgLSBwYXNzIHBlciByZXF1ZXN0KVwiLFxuICAgICAgaW5kZXhlczogY29uZmlnLmluZGV4ZXMubWFwKChpKSA9PiBpLmFsaWFzKSxcbiAgICAgIHBhZ2VTaXplOiBjb25maWcucGFnZVNpemUsXG4gICAgICBtb2RlOiBjb25maWcubW9kZSxcbiAgICAgIGFsbG93V3JpdGU6IGNvbmZpZy5hbGxvd1dyaXRlLFxuICAgICAgYmFzZVBhdGg6IHRoaXMuYmFzZVBhdGgsXG4gICAgICBlbnN1cmVPblNldHVwOiBjb25maWcuZW5zdXJlT25TZXR1cFxuICAgICAgICA/IChjb25maWcuZW5zdXJlT25TZXR1cC5pbmRleCA/PyBjb25maWcuZGVmYXVsdEluZGV4KVxuICAgICAgICA6IFwib2ZmXCIsXG4gICAgfSk7XG4gICAgLy8gUHJvdmlzaW9uIGEgcmVhbCBpbmRleCBpbiB0aGUgQkFDS0dST1VORCBzbyBhIHNsb3cgZmlyc3QtdGltZSBlbmRwb2ludCBvclxuICAgIC8vIGluZGV4IGJ1aWxkIG5ldmVyIGJsb2NrcyB0aGUgc2VydmVyIGZyb20gY29taW5nIHVwLlxuICAgIGlmIChjb25maWcuZW5zdXJlT25TZXR1cCkgdm9pZCB0aGlzLnJ1bkVuc3VyZU9uU2V0dXAoY29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgTGFrZWJhc2UgRkFMTEJBQ0sgYmFja2VuZCwgb3IgcmV0dXJuIGB1bmRlZmluZWRgIHdoZW4gVmVjdG9yXG4gICAqIFNlYXJjaCBzaG91bGQgYmUgdXNlZC4gRmFsbHMgYmFjayBvbmx5IHdoZW4gdGhlcmUgaXMgTk8gVmVjdG9yIFNlYXJjaFxuICAgKiBlbmRwb2ludCBjb25maWd1cmVkIChwbHVnaW4gY29uZmlnIG9yIGBTRUFSQ0hfRU5EUE9JTlRgIC9cbiAgICogYERBVEFCUklDS1NfVkVDVE9SX1NFQVJDSF9FTkRQT0lOVGApIEFORCB0aGUgc2libGluZyBBcHBLaXQgYGxha2ViYXNlYFxuICAgKiBwbHVnaW4gaXMgcmVnaXN0ZXJlZC4gVGhlIHBnIHBvb2wgaXMgYnVpbHQgZnJvbSB0aGF0IHBsdWdpbidzXG4gICAqIHNlcnZpY2UtcHJpbmNpcGFsIGNvbmZpZyBleGFjdGx5IGxpa2UgYEBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYWAncyBtZW1vcnlcbiAgICogcG9vbCAtIG5vIGF1dGggaXMgcmUtaW1wbGVtZW50ZWQgaGVyZS5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZUxha2ViYXNlQmFja2VuZCgpOiBMYWtlYmFzZVNlYXJjaEJhY2tlbmQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlc29sdmVTZWFyY2hDb25maWcodGhpcy5jb25maWcpO1xuICAgIGNvbnN0IGhhc0VuZHBvaW50ID1cbiAgICAgIGNvbmZpZy5lbmRwb2ludCAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICBzdHJpbmcudHJpbVRvTnVsbChwcm9jZXNzLmVudltFTkRQT0lOVF9FTlZdKSAhPT0gbnVsbCB8fFxuICAgICAgc3RyaW5nLnRyaW1Ub051bGwocHJvY2Vzcy5lbnYuREFUQUJSSUNLU19WRUNUT1JfU0VBUkNIX0VORFBPSU5UKSAhPT0gbnVsbDtcbiAgICBpZiAoaGFzRW5kcG9pbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbGFrZSA9IHBsdWdpbkxvb2t1cC5pbnN0YW5jZSh0aGlzLmNvbnRleHQsIGxha2ViYXNlKTtcbiAgICBpZiAoIWxha2UpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgbG9nZ2VyLmluZm8oXCJiYWNrZW5kLWxha2ViYXNlXCIsIHtcbiAgICAgIHJlYXNvbjogXCJubyBWZWN0b3IgU2VhcmNoIGVuZHBvaW50IGNvbmZpZ3VyZWQ7IHVzaW5nIHRoZSBMYWtlYmFzZSBmdWxsLXRleHQgZmFsbGJhY2tcIixcbiAgICB9KTtcbiAgICAvLyBgZ2V0UGdDb25maWcoKWAgbXVzdCBiZSByZWFkIE9VVFNJREUgYW55IGFzVXNlciBzY29wZSAoYXMgaXQgaXMgaGVyZSBhdFxuICAgIC8vIHNldHVwKSBzbyBpdCBjYXJyaWVzIHRoZSBTUCBjb25uZWN0aW9uIHRhcmdldCArIHRva2VuLXJlZnJlc2ggY2FsbGJhY2suXG4gICAgcmV0dXJuIG5ldyBMYWtlYmFzZVNlYXJjaEJhY2tlbmQoKCkgPT4gbGFrZS5leHBvcnRzKCkuZ2V0UGdDb25maWcoKSk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIHRoZSBlbmRwb2ludCArIGluZGV4IGV4aXN0IGFuZCBzZWVkIHRoZW0sIGhvbm9yaW5nIGBlbnN1cmVPblNldHVwYC5cbiAgICogVXNlcyBib290LXRpbWUgU0RLIGF1dGggKGVudiAvIGNvbmZpZyBwcm9maWxlKSB2aWEgdGhlIGNsaWVudCdzXG4gICAqIG91dC1vZi1yZXF1ZXN0IGZhbGxiYWNrLiBGYWlsdXJlcyBhcmUgbG9nZ2VkLCBuZXZlciB0aHJvd24gLSBhIHNlYXJjaCBhcHBcbiAgICogc2hvdWxkIHN0aWxsIHN0YXJ0IGV2ZW4gaWYgcHJvdmlzaW9uaW5nIGlzIHNsb3cgb3IgYSBwZXJtaXNzaW9uIGlzIG1pc3NpbmcuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJ1bkVuc3VyZU9uU2V0dXAoXG4gICAgY29uZmlnOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRTZWFyY2hSdW50aW1lPltcImNvbmZpZ1wiXSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3BlYyA9IGNvbmZpZy5lbnN1cmVPblNldHVwO1xuICAgIGlmICghc3BlYykgcmV0dXJuO1xuICAgIGNvbnN0IGluZGV4ID0gc3RyaW5nLnRyaW1Ub051bGwoc3BlYy5pbmRleCkgPz8gY29uZmlnLmRlZmF1bHRJbmRleDtcbiAgICBpZiAoIWluZGV4KSB7XG4gICAgICBsb2dnZXIud2FybihcImVuc3VyZS1za2lwcGVkXCIsIHtcbiAgICAgICAgcmVhc29uOiBcIm5vIGluZGV4IG5hbWUgKHNldCBgaW5kZXhgIG9yIGBlbnN1cmVPblNldHVwLmluZGV4YClcIixcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkb2N1bWVudHMgPSBzcGVjLmRvY3VtZW50cyA/PyBbXTtcbiAgICAvLyBJbmZlciBhIG1hbmFnZWQtZGlyZWN0LWFjY2VzcyBzY2hlbWEgZnJvbSB0aGUgZmlyc3Qgc2VlZCByb3cgd2hlbiBub3QgZ2l2ZW4uXG4gICAgY29uc3Qgc2NoZW1hID1cbiAgICAgIHNwZWMuc2NoZW1hID8/XG4gICAgICAoZG9jdW1lbnRzLmxlbmd0aCA+IDAgJiYgIXNwZWMuc291cmNlVGFibGVcbiAgICAgICAgPyB0aGlzLmluZmVyU2NoZW1hKGRvY3VtZW50c1swXSwgc3BlYy5wcmltYXJ5S2V5ID8/IFwiaWRcIiwgc3BlYy50ZXh0Q29sdW1uID8/IFwidGV4dFwiKVxuICAgICAgICA6IHVuZGVmaW5lZCk7XG4gICAgdHJ5IHtcbiAgICAgIGxvZ2dlci5pbmZvKFwiZW5zdXJlLXN0YXJ0XCIsIHsgaW5kZXggfSk7XG4gICAgICBjb25zdCB7IGNsaWVudCB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IGNsaWVudC5wcm92aXNpb24oaW5kZXgsIHtcbiAgICAgICAgLi4uKHNwZWMuZW5kcG9pbnQgPyB7IGVuZHBvaW50OiBzcGVjLmVuZHBvaW50IH0gOiB7fSksXG4gICAgICAgIC4uLihzcGVjLnByaW1hcnlLZXkgPyB7IHByaW1hcnlLZXk6IHNwZWMucHJpbWFyeUtleSB9IDoge30pLFxuICAgICAgICAuLi4oc3BlYy50ZXh0Q29sdW1uID8geyBlbWJlZGRpbmdTb3VyY2VDb2x1bW46IHNwZWMudGV4dENvbHVtbiB9IDoge30pLFxuICAgICAgICAuLi4oc3BlYy5lbWJlZGRpbmdNb2RlbCA/IHsgZW1iZWRkaW5nTW9kZWw6IHNwZWMuZW1iZWRkaW5nTW9kZWwgfSA6IHt9KSxcbiAgICAgICAgLi4uKHNwZWMuc291cmNlVGFibGUgPyB7IHNvdXJjZVRhYmxlOiBzcGVjLnNvdXJjZVRhYmxlIH0gOiB7fSksXG4gICAgICAgIC4uLihzY2hlbWEgPyB7IHNjaGVtYSB9IDoge30pLFxuICAgICAgICAuLi4oc3BlYy50aW1lb3V0TXMgPyB7IHRpbWVvdXRNczogc3BlYy50aW1lb3V0TXMgfSA6IHt9KSxcbiAgICAgICAgLi4uKGRvY3VtZW50cy5sZW5ndGggPiAwID8geyBzZWVkOiBkb2N1bWVudHMgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmluZm8oXCJlbnN1cmUtcmVhZHlcIiwge1xuICAgICAgICBpbmRleDogaW5mby5uYW1lLFxuICAgICAgICByZWFkeTogaW5mby5yZWFkeSxcbiAgICAgICAgcm93Q291bnQ6IGluZm8ucm93Q291bnQgPz8gMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgICBsb2dnZXIud2FybihcImVuc3VyZS1mYWlsZWRcIiwgeyBpbmRleCwgbWVzc2FnZTogZXJyb3JVdGlsLmVycm9yTWVzc2FnZShjYXVzZSkgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEJ1aWxkIGEgVmVjdG9yIFNlYXJjaCBgc2NoZW1hX2pzb25gIG1hcCBmcm9tIGEgc2VlZCBkb2N1bWVudCdzIHZhbHVlIHR5cGVzLiAqL1xuICBwcml2YXRlIGluZmVyU2NoZW1hKFxuICAgIGRvYzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgcHJpbWFyeUtleTogc3RyaW5nLFxuICAgIHRleHRDb2x1bW46IHN0cmluZyxcbiAgKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3Qgc2NoZW1hOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBbcHJpbWFyeUtleV06IFwic3RyaW5nXCIsIFt0ZXh0Q29sdW1uXTogXCJzdHJpbmdcIiB9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRvYykpIHtcbiAgICAgIGlmIChrZXkgaW4gc2NoZW1hKSBjb250aW51ZTtcbiAgICAgIHNjaGVtYVtrZXldID1cbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgPyBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKVxuICAgICAgICAgICAgPyBcImludFwiXG4gICAgICAgICAgICA6IFwiZG91YmxlXCJcbiAgICAgICAgICA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgICAgID8gXCJib29sZWFuXCJcbiAgICAgICAgICAgIDogXCJzdHJpbmdcIjtcbiAgICB9XG4gICAgcmV0dXJuIHNjaGVtYTtcbiAgfVxuXG4gIC8qKiBEcm9wIHRoZSBzaGFyZWQgcnVudGltZSBzbyBhIHJlc3RhcnRlZCBhcHAgcmUtcmVzb2x2ZXMgY29uZmlnLiAqL1xuICBhc3luYyBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXNldFNlYXJjaFJ1bnRpbWUoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFib3J0QWN0aXZlT3BlcmF0aW9ucygpOiB2b2lkIHtcbiAgICBzdXBlci5hYm9ydEFjdGl2ZU9wZXJhdGlvbnMoKTtcbiAgICB2b2lkIHRoaXMuc2h1dGRvd24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3VudCB0aGUgc2VhcmNoIHJvdXRlcyB1bmRlciBgL2FwaS9zZWFyY2hgLiBFYWNoIGlzIHdyYXBwZWQgaW5cbiAgICogYGFzVXNlcihyZXEpYCBzbyB0aGUgcXVlcnkgcnVucyBhcyB0aGUgcmVxdWVzdGluZyB1c2VyIGFuZCB0aGUgaW5kZXgnc1xuICAgKiBVbml0eSBDYXRhbG9nIEFDTHMgYXBwbHkuIGBHRVQgL2luZGV4ZXNgIG5lZWRzIG5vIHVzZXIgc2NvcGUgLSBpdCBqdXN0XG4gICAqIGVjaG9lcyB0aGUgY29uZmlndXJlZCBjYXRhbG9ndWUuXG4gICAqL1xuICBvdmVycmlkZSBpbmplY3RSb3V0ZXMocm91dGVyOiBJQXBwUm91dGVyKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwic2VhcmNoXCIsXG4gICAgICBtZXRob2Q6IFwicG9zdFwiLFxuICAgICAgcGF0aDogU0VBUkNIX1JPVVRFLFxuICAgICAgaGFuZGxlcjogYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzcG9uZChyZXMsIFwic2VhcmNoXCIsICgpID0+IHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gc2VhcmNoQ29udHJhY3Quc2VhcmNoUmVxdWVzdFNjaGVtYS5wYXJzZShyZXEuYm9keSA/PyB7fSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXNVc2VyKHJlcSkucnVuU2VhcmNoKHJlcXVlc3QpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwidW5pdmVyc2FsU2VhcmNoXCIsXG4gICAgICBtZXRob2Q6IFwicG9zdFwiLFxuICAgICAgcGF0aDogVU5JVkVSU0FMX1JPVVRFLFxuICAgICAgaGFuZGxlcjogYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzcG9uZChyZXMsIFwidW5pdmVyc2FsU2VhcmNoXCIsICgpID0+IHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gc2VhcmNoQ29udHJhY3QudW5pdmVyc2FsU2VhcmNoUmVxdWVzdFNjaGVtYS5wYXJzZShyZXEuYm9keSA/PyB7fSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXNVc2VyKHJlcSkucnVuVW5pdmVyc2FsU2VhcmNoKHJlcXVlc3QpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwiaW5kZXhlc1wiLFxuICAgICAgbWV0aG9kOiBcImdldFwiLFxuICAgICAgcGF0aDogSU5ERVhFU19ST1VURSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChfcmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLmpzb24odGhpcy5jbGllbnRDb25maWcoKSk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMucm91dGUocm91dGVyLCB7XG4gICAgICBuYW1lOiBcImRvY3VtZW50c1wiLFxuICAgICAgbWV0aG9kOiBcInBvc3RcIixcbiAgICAgIHBhdGg6IERPQ1VNRU5UU19ST1VURSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbmZpZyB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1dyaXRlKSB7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDMpLmpzb24oeyBlcnJvcjogXCJ0aGUgZG9jdW1lbnQgd3JpdGUgc3VyZmFjZSBpcyBkaXNhYmxlZFwiIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnJlc3BvbmQocmVzLCBcImFkZERvY3VtZW50c1wiLCAoKSA9PlxuICAgICAgICAgIHRoaXMuYXNVc2VyKHJlcSkucnVuQWRkRG9jdW1lbnRzKHJlcS5ib2R5ID8/IHt9KSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwiY3JlYXRlSW5kZXhcIixcbiAgICAgIG1ldGhvZDogXCJwb3N0XCIsXG4gICAgICBwYXRoOiBJTkRFWF9ST1VURSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbmZpZyB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1dyaXRlKSB7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDMpLmpzb24oeyBlcnJvcjogXCJ0aGUgaW5kZXggd3JpdGUgc3VyZmFjZSBpcyBkaXNhYmxlZFwiIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnJlc3BvbmQocmVzLCBcImNyZWF0ZUluZGV4XCIsICgpID0+XG4gICAgICAgICAgdGhpcy5hc1VzZXIocmVxKS5ydW5DcmVhdGVJbmRleChyZXEuYm9keSA/PyB7fSksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMucm91dGUocm91dGVyLCB7XG4gICAgICBuYW1lOiBcInN5bmNJbmRleFwiLFxuICAgICAgbWV0aG9kOiBcInBvc3RcIixcbiAgICAgIHBhdGg6IElOREVYX1NZTkNfUk9VVEUsXG4gICAgICBoYW5kbGVyOiBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgY29uc3QgeyBjb25maWcgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICAgICAgaWYgKCFjb25maWcuYWxsb3dXcml0ZSkge1xuICAgICAgICAgIHJlcy5zdGF0dXMoNDAzKS5qc29uKHsgZXJyb3I6IFwidGhlIGluZGV4IHdyaXRlIHN1cmZhY2UgaXMgZGlzYWJsZWRcIiB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5yZXNwb25kKHJlcywgXCJzeW5jSW5kZXhcIiwgKCkgPT4gdGhpcy5hc1VzZXIocmVxKS5ydW5TeW5jSW5kZXgocmVxLmJvZHkgPz8ge30pKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUnVuIGEgcm91dGUgYm9keSwgdHVybmluZyBhIGZhaWx1cmUgaW50byBhIEpTT04gZXJyb3IgcmVzcG9uc2UuXG4gICAqXG4gICAqIEFwcEtpdCdzIGByb3V0ZSgpYCByZWdpc3RlcnMgdGhlIGhhbmRsZXIgYXMtaXMsIHNvIGEgcmVqZWN0aW9uIGVzY2FwZXMgYXNcbiAgICogYW4gdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIGFuZCB0YWtlcyB0aGUgd2hvbGUgcHJvY2VzcyBkb3duIHJhdGhlciB0aGFuXG4gICAqIGZhaWxpbmcgdGhlIG9uZSByZXF1ZXN0LiBFdmVyeSByb3V0ZSBoZXJlIGdvZXMgdGhyb3VnaCB0aGlzLCBzbyBhIGJhZCBpbmRleFxuICAgKiBuYW1lIG9yIGEgVmVjdG9yIFNlYXJjaCBBUEkgZXJyb3IgcmV0dXJucyA1MDAgd2l0aCBhIG1lc3NhZ2UgaW5zdGVhZCBvZlxuICAgKiBraWxsaW5nIHRoZSBzZXJ2ZXIuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlc3BvbmQoXG4gICAgcmVzOiBQYXJhbWV0ZXJzPFBhcmFtZXRlcnM8SUFwcFJvdXRlcltcInBvc3RcIl0+WzFdPlsxXSxcbiAgICBvcGVyYXRpb246IHN0cmluZyxcbiAgICBydW46ICgpID0+IFByb21pc2U8dW5rbm93bj4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICByZXMuanNvbihhd2FpdCBydW4oKSk7XG4gICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvclV0aWwuZXJyb3JNZXNzYWdlKGNhdXNlKTtcbiAgICAgIGxvZ2dlci53YXJuKFwicm91dGUtZmFpbGVkXCIsIHsgb3BlcmF0aW9uLCBtZXNzYWdlIH0pO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogbWVzc2FnZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogU3VyZmFjZSB0aGUgaW5kZXggY2F0YWxvZ3VlICsgZGVmYXVsdHMgc28gYSBzZWFyY2ggYm94IG5lZWRzIG5vIHJvdW5kLXRyaXAuICovXG4gIG92ZXJyaWRlIGNsaWVudENvbmZpZygpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IGdldFNlYXJjaFJ1bnRpbWUoeyBjb25maWc6IHRoaXMuY29uZmlnIH0pO1xuICAgIGNvbnN0IHBheWxvYWQ6IFNlYXJjaENsaWVudENvbmZpZyA9IHtcbiAgICAgIGluZGV4ZXM6IGNvbmZpZy5pbmRleGVzLm1hcCgoaW5kZXgpID0+ICh7XG4gICAgICAgIG5hbWU6IGluZGV4Lm5hbWUsXG4gICAgICAgIGFsaWFzOiBpbmRleC5hbGlhcyxcbiAgICAgICAgLi4uKGluZGV4LnByaW1hcnlLZXkgPyB7IHByaW1hcnlLZXk6IGluZGV4LnByaW1hcnlLZXkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGluZGV4LmNvbHVtbnMgPyB7IGNvbHVtbnM6IGluZGV4LmNvbHVtbnMgfSA6IHt9KSxcbiAgICAgICAgLi4uKGluZGV4Lm5hbWUgPT09IGNvbmZpZy5kZWZhdWx0SW5kZXggPyB7IGlzRGVmYXVsdDogdHJ1ZSB9IDoge30pLFxuICAgICAgfSkpLFxuICAgICAgLi4uKGNvbmZpZy5kZWZhdWx0SW5kZXggPyB7IGRlZmF1bHRJbmRleDogY29uZmlnLmRlZmF1bHRJbmRleCB9IDoge30pLFxuICAgICAgcGFnZVNpemU6IGNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIGJhc2VQYXRoOiB0aGlzLmJhc2VQYXRoLFxuICAgIH07XG4gICAgcmV0dXJuIHBheWxvYWQgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfVxuXG4gIC8qKiBBcHBLaXQgYFRvb2xQcm92aWRlcmA6IHRoZSB0b29sIGRlZmluaXRpb25zIG9mZmVyZWQgdG8gYW4gYWdlbnQuICovXG4gIGdldEFnZW50VG9vbHMoKTogQWdlbnRUb29sRGVmaW5pdGlvbltdIHtcbiAgICByZXR1cm4gdG9vbHNGcm9tUmVnaXN0cnkodGhpcy50b29scyk7XG4gIH1cblxuICAvKiogQXBwS2l0IGBUb29sUHJvdmlkZXJgOiBydW4gb25lIHRvb2wgY2FsbCwgdmFsaWRhdGluZyBpbnB1dCBhZ2FpbnN0IGl0cyBzY2hlbWEuICovXG4gIGFzeW5jIGV4ZWN1dGVBZ2VudFRvb2wobmFtZTogc3RyaW5nLCBhcmdzOiB1bmtub3duLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIHJldHVybiBleGVjdXRlRnJvbVJlZ2lzdHJ5KHRoaXMudG9vbHMsIG5hbWUsIGFyZ3MsIHNpZ25hbCk7XG4gIH1cblxuICBvdmVycmlkZSBleHBvcnRzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvKiogU2VhcmNoIG9uZSBpbmRleCAoZGVmYXVsdCB3aGVuIG9taXR0ZWQpLiBSdW5zIGFzIHRoZSBjdXJyZW50IGNvbnRleHQgdXNlci4gKi9cbiAgICAgIHNlYXJjaDogKHJlcXVlc3Q6IHNlYXJjaENvbnRyYWN0LlNlYXJjaFJlcXVlc3QsIHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PlxuICAgICAgICB0aGlzLnJ1blNlYXJjaChyZXF1ZXN0LCBzaWduYWwpLFxuICAgICAgLyoqIFNlYXJjaCBhY3Jvc3MgZXZlcnkgY29uZmlndXJlZCBpbmRleCBhbmQgbWVyZ2UgdGhlIGhpdHMuICovXG4gICAgICB1bml2ZXJzYWxTZWFyY2g6IChyZXF1ZXN0OiBzZWFyY2hDb250cmFjdC5Vbml2ZXJzYWxTZWFyY2hSZXF1ZXN0LCBzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT5cbiAgICAgICAgdGhpcy5ydW5Vbml2ZXJzYWxTZWFyY2gocmVxdWVzdCwgc2lnbmFsKSxcbiAgICAgIC8qKiBBZGQgb3IgdXBkYXRlIGRvY3VtZW50cyBpbiBhIGRpcmVjdC1hY2Nlc3MgaW5kZXggKHRocm93cyB3aGVuIHdyaXRlcyBhcmUgZGlzYWJsZWQpLiAqL1xuICAgICAgYWRkRG9jdW1lbnRzOiAocmVxdWVzdDogeyBpbmRleD86IHN0cmluZzsgZG9jdW1lbnRzOiB1bmtub3duIH0sIHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PlxuICAgICAgICB0aGlzLnJ1bkFkZERvY3VtZW50cyhyZXF1ZXN0LCBzaWduYWwpLFxuICAgICAgLyoqIENyZWF0ZSBhIFZlY3RvciBTZWFyY2ggaW5kZXggKHRocm93cyB3aGVuIHdyaXRlcyBhcmUgZGlzYWJsZWQpLiAqL1xuICAgICAgY3JlYXRlSW5kZXg6IChyZXF1ZXN0OiBzZWFyY2hDb250cmFjdC5DcmVhdGVJbmRleFJlcXVlc3QsIHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PlxuICAgICAgICB0aGlzLnJ1bkNyZWF0ZUluZGV4KHJlcXVlc3QsIHNpZ25hbCksXG4gICAgICAvKiogU3luYyBhIERlbHRhIFN5bmMgaW5kZXggZnJvbSBpdHMgc291cmNlIHRhYmxlICh0aHJvd3Mgd2hlbiB3cml0ZXMgYXJlIGRpc2FibGVkKS4gKi9cbiAgICAgIHN5bmNJbmRleDogKHJlcXVlc3Q6IHNlYXJjaENvbnRyYWN0LlN5bmNJbmRleFJlcXVlc3QsIHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PlxuICAgICAgICB0aGlzLnJ1blN5bmNJbmRleChyZXF1ZXN0LCBzaWduYWwpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJ1blNlYXJjaChhcmdzOiB1bmtub3duLCBzaWduYWw/OiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBzZWFyY2hDb250cmFjdC5zZWFyY2hSZXF1ZXN0U2NoZW1hLnBhcnNlKGFyZ3MpO1xuICAgIGNvbnN0IHsgY2xpZW50IH0gPSBnZXRTZWFyY2hSdW50aW1lKCk7XG4gICAgcmV0dXJuIGNsaWVudC5zZWFyY2gocmVxdWVzdC5xdWVyeSwge1xuICAgICAgLi4uKHJlcXVlc3QuaW5kZXggPyB7IGluZGV4OiByZXF1ZXN0LmluZGV4IH0gOiB7fSksXG4gICAgICAuLi4ocmVxdWVzdC5saW1pdCA/IHsgbGltaXQ6IHJlcXVlc3QubGltaXQgfSA6IHt9KSxcbiAgICAgIC4uLihyZXF1ZXN0Lm1vZGUgPyB7IG1vZGU6IHJlcXVlc3QubW9kZSB9IDoge30pLFxuICAgICAgLi4uKHJlcXVlc3QuY29sdW1ucyA/IHsgY29sdW1uczogcmVxdWVzdC5jb2x1bW5zIH0gOiB7fSksXG4gICAgICAuLi4ocmVxdWVzdC5maWx0ZXIgPyB7IGZpbHRlcjogcmVxdWVzdC5maWx0ZXIgfSA6IHt9KSxcbiAgICAgIC4uLihyZXF1ZXN0LnNjb3JlVGhyZXNob2xkICE9PSB1bmRlZmluZWQgPyB7IHNjb3JlVGhyZXNob2xkOiByZXF1ZXN0LnNjb3JlVGhyZXNob2xkIH0gOiB7fSksXG4gICAgICAuLi4oc2lnbmFsID8geyBzaWduYWwgfSA6IHt9KSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcnVuVW5pdmVyc2FsU2VhcmNoKGFyZ3M6IHVua25vd24sIHNpZ25hbD86IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHNlYXJjaENvbnRyYWN0LnVuaXZlcnNhbFNlYXJjaFJlcXVlc3RTY2hlbWEucGFyc2UoYXJncyk7XG4gICAgY29uc3QgeyBjbGllbnQgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICByZXR1cm4gY2xpZW50LnVuaXZlcnNhbFNlYXJjaChyZXF1ZXN0LnF1ZXJ5LCB7XG4gICAgICAuLi4ocmVxdWVzdC5pbmRleGVzID8geyBpbmRleGVzOiByZXF1ZXN0LmluZGV4ZXMgfSA6IHt9KSxcbiAgICAgIC4uLihyZXF1ZXN0LmxpbWl0ID8geyBsaW1pdDogcmVxdWVzdC5saW1pdCB9IDoge30pLFxuICAgICAgLi4uKHJlcXVlc3QubW9kZSA/IHsgbW9kZTogcmVxdWVzdC5tb2RlIH0gOiB7fSksXG4gICAgICAuLi4oc2lnbmFsID8geyBzaWduYWwgfSA6IHt9KSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcnVuQWRkRG9jdW1lbnRzKGFyZ3M6IHVua25vd24sIHNpZ25hbD86IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3QgcmVjb3JkID0gKGFyZ3MgPz8ge30pIGFzIHsgaW5kZXg/OiBzdHJpbmc7IGRvY3VtZW50czogdW5rbm93biB9O1xuICAgIGNvbnN0IHsgY2xpZW50LCBjb25maWcgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICBjb25zdCBkb2N1bWVudHMgPSB0b0RvY3VtZW50QXJyYXkocmVjb3JkLmRvY3VtZW50cyk7XG4gICAgY29uc3QgaW5kZXggPSByZWNvcmQuaW5kZXggPz8gY29uZmlnLmRlZmF1bHRJbmRleCA/PyBcIlwiO1xuICAgIHJldHVybiBjbGllbnQuYWRkRG9jdW1lbnRzKGluZGV4LCBkb2N1bWVudHMsIHNpZ25hbCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJ1bkNyZWF0ZUluZGV4KGFyZ3M6IHVua25vd24sIHNpZ25hbD86IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHNlYXJjaENvbnRyYWN0LmNyZWF0ZUluZGV4UmVxdWVzdFNjaGVtYS5wYXJzZShhcmdzKTtcbiAgICBjb25zdCB7IGNsaWVudCB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgIHJldHVybiBjbGllbnQuY3JlYXRlSW5kZXgocmVxdWVzdC5uYW1lLCB0b0NyZWF0ZUluZGV4T3B0aW9ucyhyZXF1ZXN0LCBzaWduYWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcnVuU3luY0luZGV4KGFyZ3M6IHVua25vd24sIHNpZ25hbD86IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHNlYXJjaENvbnRyYWN0LnN5bmNJbmRleFJlcXVlc3RTY2hlbWEucGFyc2UoYXJncyk7XG4gICAgY29uc3QgeyBjbGllbnQsIGNvbmZpZyB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgIGNvbnN0IGluZGV4ID0gcmVxdWVzdC5pbmRleCA/PyBjb25maWcuZGVmYXVsdEluZGV4ID8/IFwiXCI7XG4gICAgYXdhaXQgY2xpZW50LnN5bmNJbmRleChpbmRleCwgc2lnbmFsKTtcbiAgICByZXR1cm4geyBpbmRleCwgc3luY2VkOiB0cnVlIH07XG4gIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlciB0aGUgQUkgU2VhcmNoIHBsdWdpbiB3aXRoIEFwcEtpdC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNyZWF0ZUFwcCwgc2VydmVyIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgcGx1Z2luIGFzIHNlYXJjaFBsdWdpbiwgdG9vbCBhcyBzZWFyY2hUb29sTW9kdWxlIH0gZnJvbSBcIkBkYngtdG9vbHMvc2VhcmNoXCI7XG4gKiBpbXBvcnQgeyBhZ2VudHMsIHBsdWdpbiBhcyBtYXN0cmFQbHVnaW4gfSBmcm9tIFwiQGRieC10b29scy9hcHBraXQtbWFzdHJhXCI7XG4gKlxuICogY29uc3Qgc3VwcG9ydCA9IGFnZW50cy5jcmVhdGVBZ2VudCh7XG4gKiAgIGluc3RydWN0aW9uczogXCJBbnN3ZXIgZnJvbSB0aGUgZG9jczsgdXNlIGBzZWFyY2hgIHRvIGZpbmQgdGhlbS5cIixcbiAqICAgdG9vbHM6ICgpID0+ICh7IHNlYXJjaDogc2VhcmNoVG9vbE1vZHVsZS5zZWFyY2hUb29sKCkgfSksXG4gKiB9KTtcbiAqXG4gKiBhd2FpdCBjcmVhdGVBcHAoe1xuICogICBwbHVnaW5zOiBbXG4gKiAgICAgc2VydmVyKCksXG4gKiAgICAgc2VhcmNoUGx1Z2luLnNlYXJjaCh7IGluZGV4OiBcIm1haW4uc3VwcG9ydC5kb2NzXCIgfSksXG4gKiAgICAgbWFzdHJhUGx1Z2luLm1hc3RyYSh7IGFnZW50czogc3VwcG9ydCB9KSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBzZWFyY2ggPSB0b1BsdWdpbihTZWFyY2hQbHVnaW4pO1xuIl19
|
|
506
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFlBQVksRUFDWixRQUFRLEdBSVQsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsVUFBVSxFQUNWLG1CQUFtQixFQUNuQixpQkFBaUIsR0FJbEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsTUFBTSxJQUFJLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sRUFBRSxLQUFLLElBQUksV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsTUFBTSxJQUFJLFlBQVksRUFBMkIsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixZQUFZLEVBQ1osU0FBUyxFQUNULG1CQUFtQixHQUVwQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEUsT0FBTyxFQUNMLDhCQUE4QixFQUM5Qiw2QkFBNkIsRUFDN0IsdUJBQXVCLEVBQ3ZCLDJCQUEyQixFQUMzQixpQ0FBaUMsR0FDbEMsTUFBTSxhQUFhLENBQUM7QUFFckIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUVwQyw0RUFBNEU7QUFD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QztRQUNqQixJQUFJLENBQUM7WUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDdkMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRTtnQkFDekMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNyRCxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzNELEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN0RSxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZFLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENB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QztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBYSxFQUFFLE1BQW9CO1FBQzVELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDekQsTUFBTSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNqQyxDQUFDOztBQUdIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXBwS2l0IHBsdWdpbiAocmVnaXN0ZXJlZCBuYW1lOiBgc2VhcmNoYCkgdGhhdCB0dXJucyBhIERhdGFicmlja3MgQUlcbiAqIFNlYXJjaCAoVmVjdG9yIFNlYXJjaCkgaW5kZXggaW50byBhIGJhdHRlcmllcy1pbmNsdWRlZCBzZWFyY2ggc3VyZmFjZS4gSXQgaXNcbiAqIHRoZSBcInNob3J0Y3V0XCIgaGFsZiBvZiB0aGlzIHBhY2thZ2U6IHJlZ2lzdGVyIGl0IHdpdGggbm90aGluZyBidXQgYW4gaW5kZXhcbiAqIG5hbWUgYW5kIHlvdSBnZXQsIGFsbCBhdCBvbmNlIC1cbiAqXG4gKiAgIC0gYSBgc2VhcmNoYCAvIGB1bml2ZXJzYWxfc2VhcmNoYCAvIChvcHQtaW4pIGBhZGRfZG9jdW1lbnRzYCB0b29sIHNldCBmb3JcbiAqICAgICBib3RoIE1hc3RyYSBhbmQgQXBwS2l0IGFnZW50cyAoYXV0b2NvbXBsZXRlIGlzIGEgc21hbGwtYGxpbWl0YCBzZWFyY2gpO1xuICogICAtIEhUVFAgcm91dGVzIHVuZGVyIGAvYXBpL3NlYXJjaGAgYSBicm93c2VyIHNlYXJjaCBib3ggY2FsbHMgZGlyZWN0bHlcbiAqICAgICAoYFBPU1QgL2Agc2VhcmNoLCBgUE9TVCAvdW5pdmVyc2FsYCBmZWRlcmF0ZWQsIGBHRVQgL2luZGV4ZXNgIGNhdGFsb2d1ZSxcbiAqICAgICBhbmQgYFBPU1QgL2RvY3VtZW50c2Agd2hlbiB3cml0ZXMgYXJlIGVuYWJsZWQpO1xuICogICAtIGEgYGNsaWVudENvbmZpZygpYCBwYXlsb2FkIHNvIGEgVUkga25vd3MgdGhlIGluZGV4ZXMsIGRlZmF1bHQsIGFuZCBwYWdlXG4gKiAgICAgc2l6ZSBhdCBib290IHdpdGggbm8gcm91bmQtdHJpcDtcbiAqICAgLSBgZXhwb3J0cygpYCBzbyBhcHAgY29kZSBjYW4gYGFwcGtpdC5zZWFyY2guc2VhcmNoKC4uLilgIGRpcmVjdGx5LlxuICpcbiAqIEV2ZXJ5dGhpbmcgcnVucyB1bmRlciB0aGUgY2FsbGVyJ3MgT0JPIGlkZW50aXR5IChyb3V0ZXMgd3JhcCBpbiBgYXNVc2VyYCksXG4gKiBzbyBVbml0eSBDYXRhbG9nIEFDTHMgb24gdGhlIGluZGV4IGFwcGx5LiBSZWdpc3RlcmluZyB0aGUgcGx1Z2luIHJlc29sdmVzXG4gKiBhbmQgbG9ncyB0aGUgZWZmZWN0aXZlIGNvbmZpZyAoZGVmYXVsdCBpbmRleCwga25vd24gaW5kZXhlcywgcGFnZSBzaXplLFxuICogbW9kZSkgc28gYSBtaXNjb25maWd1cmF0aW9uIHNob3dzIHVwIGluIHRoZSBib290IGxvZyByYXRoZXIgdGhhbiBvbiB0aGVcbiAqIGZpcnN0IHNlYXJjaC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHtcbiAgbGFrZWJhc2UsXG4gIFBsdWdpbixcbiAgUmVzb3VyY2VUeXBlLFxuICB0b1BsdWdpbixcbiAgdHlwZSBJQXBwUm91dGVyLFxuICB0eXBlIFBsdWdpbk1hbmlmZXN0LFxuICB0eXBlIFJlc291cmNlUmVxdWlyZW1lbnQsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7XG4gIGRlZmluZVRvb2wsXG4gIGV4ZWN1dGVGcm9tUmVnaXN0cnksXG4gIHRvb2xzRnJvbVJlZ2lzdHJ5LFxuICB0eXBlIEFnZW50VG9vbERlZmluaXRpb24sXG4gIHR5cGUgVG9vbFByb3ZpZGVyLFxuICB0eXBlIFRvb2xSZWdpc3RyeSxcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdC9iZXRhXCI7XG5pbXBvcnQgeyBwbHVnaW4gYXMgYXBwa2l0UGx1Z2luIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBlcnJvciBhcyBzaGFyZWRFcnJvciwgbG9nLCBzdHJpbmcgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgc2VhcmNoIGFzIHNoYXJlZFNlYXJjaCwgdHlwZSBTZWFyY2hDbGllbnRDb25maWcgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtc2VhcmNoXCI7XG5pbXBvcnQge1xuICBTRUFSQ0hfQ09ORklHX1NDSEVNQSxcbiAgREFUQUJSSUNLU19JTkRFWF9FTlYsXG4gIEVORFBPSU5UX0VOVixcbiAgSU5ERVhfRU5WLFxuICByZXNvbHZlU2VhcmNoQ29uZmlnLFxuICB0eXBlIFNlYXJjaFBsdWdpbkNvbmZpZyxcbn0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQgeyB0b0NyZWF0ZUluZGV4T3B0aW9ucyB9IGZyb20gXCIuL2luZGV4LXRvb2xzLnRzXCI7XG5pbXBvcnQgeyBMYWtlYmFzZVNlYXJjaEJhY2tlbmQgfSBmcm9tIFwiLi9sYWtlYmFzZS50c1wiO1xuaW1wb3J0IHsgdG9Eb2N1bWVudEFycmF5IH0gZnJvbSBcIi4vcXVlcnkudHNcIjtcbmltcG9ydCB7IGdldFNlYXJjaFJ1bnRpbWUsIHJlc2V0U2VhcmNoUnVudGltZSB9IGZyb20gXCIuL3J1bnRpbWUudHNcIjtcbmltcG9ydCB7XG4gIEFERF9ET0NVTUVOVFNfVE9PTF9ERVNDUklQVElPTixcbiAgQ1JFQVRFX0lOREVYX1RPT0xfREVTQ1JJUFRJT04sXG4gIFNFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICBTWU5DX0lOREVYX1RPT0xfREVTQ1JJUFRJT04sXG4gIFVOSVZFUlNBTF9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTixcbn0gZnJvbSBcIi4vc2NoZW1hLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJzZWFyY2hcIik7XG5cbi8qKiBNb3VudC1yZWxhdGl2ZSByb3V0ZSAodW5kZXIgYC9hcGkvc2VhcmNoYCkgZm9yIGEgc2luZ2xlLWluZGV4IHNlYXJjaC4gKi9cbmNvbnN0IFNFQVJDSF9ST1VURSA9IFwiL1wiO1xuXG4vKiogTW91bnQtcmVsYXRpdmUgcm91dGUgZm9yIGEgdW5pdmVyc2FsIChmZWRlcmF0ZWQpIHNlYXJjaCBhY3Jvc3MgaW5kZXhlcy4gKi9cbmNvbnN0IFVOSVZFUlNBTF9ST1VURSA9IFwiL3VuaXZlcnNhbFwiO1xuXG4vKiogTW91bnQtcmVsYXRpdmUgcm91dGUgc2VydmluZyB0aGUgaW5kZXggY2F0YWxvZ3VlIGEgc2VhcmNoIGJveCByZWFkcy4gKi9cbmNvbnN0IElOREVYRVNfUk9VVEUgPSBcIi9pbmRleGVzXCI7XG5cbi8qKiBNb3VudC1yZWxhdGl2ZSByb3V0ZSBmb3IgYWRkaW5nIGRvY3VtZW50cyB0byBhIGRpcmVjdC1hY2Nlc3MgaW5kZXguICovXG5jb25zdCBET0NVTUVOVFNfUk9VVEUgPSBcIi9kb2N1bWVudHNcIjtcblxuLyoqIE1vdW50LXJlbGF0aXZlIHJvdXRlIGZvciBjcmVhdGluZyBhIFZlY3RvciBTZWFyY2ggaW5kZXguICovXG5jb25zdCBJTkRFWF9ST1VURSA9IFwiL2luZGV4XCI7XG5cbi8qKiBNb3VudC1yZWxhdGl2ZSByb3V0ZSBmb3Igc3luY2luZyBhIERlbHRhIFN5bmMgaW5kZXggZnJvbSBpdHMgc291cmNlIHRhYmxlLiAqL1xuY29uc3QgSU5ERVhfU1lOQ19ST1VURSA9IFwiL2luZGV4L3N5bmNcIjtcblxuLyoqXG4gKiBUaGUgQUkgU2VhcmNoIGluZGV4IHJlc291cmNlLiBEZWNsYXJlZCBvcHRpb25hbCBiZWNhdXNlIHRoZSBwbHVnaW4gaXMgaGFwcHlcbiAqIHdpdGggbm8gZGVmYXVsdCBpbmRleCAoYSBjYWxsZXIgY2FuIG5hbWUgb25lIHBlciByZXF1ZXN0KTsgaXQgaXMgcHJvbW90ZWQgdG9cbiAqIHJlcXVpcmVkIG9uY2UgYSBkZXBsb3ltZW50IHBpbnMgb25lLiBgU0VMRUNUYCBpcyB0aGUgcGVybWlzc2lvbiBhIHF1ZXJ5IG5lZWRzLlxuICovXG5jb25zdCBJTkRFWF9SRVNPVVJDRSA9IHtcbiAgdHlwZTogUmVzb3VyY2VUeXBlLlZFQ1RPUl9TRUFSQ0hfSU5ERVgsXG4gIGFsaWFzOiBcIkFJIFNlYXJjaCBJbmRleFwiLFxuICByZXNvdXJjZUtleTogXCJzZWFyY2gtaW5kZXhcIixcbiAgZGVzY3JpcHRpb246XG4gICAgXCJEYXRhYnJpY2tzIEFJIFNlYXJjaCAoVmVjdG9yIFNlYXJjaCkgaW5kZXggdGhlIGFwcCBzZWFyY2hlcyBieSBkZWZhdWx0IFwiICtcbiAgICBcIihjYXRhbG9nLnNjaGVtYS5pbmRleCkuIE9wdGlvbmFsOiBhIHJlcXVlc3QgbWF5IG5hbWUgYW55IGluZGV4IHRoZSBjYWxsZXIgY2FuIHJlYWQuXCIsXG4gIHBlcm1pc3Npb246IFwiU0VMRUNUXCIsXG4gIGZpZWxkczoge1xuICAgIG5hbWU6IHtcbiAgICAgIGVudjogSU5ERVhfRU5WLFxuICAgICAgZGVzY3JpcHRpb246IGBEZWZhdWx0IEFJIFNlYXJjaCBpbmRleC4gJHtEQVRBQlJJQ0tTX0lOREVYX0VOVn0gaXMgYWxzbyBob25vcmVkLmAsXG4gICAgICBkaXNjb3Zlcnk6IHtcbiAgICAgICAgdHlwZTogXCJjbGlcIixcbiAgICAgICAgY2xpQ29tbWFuZDpcbiAgICAgICAgICBcImRhdGFicmlja3MgdmVjdG9yLXNlYXJjaC1pbmRleGVzIGxpc3QtaW5kZXhlcyAtLWVuZHBvaW50LW5hbWUgPEVORFBPSU5UPiAtLW91dHB1dCBqc29uXCIsXG4gICAgICAgIHNlbGVjdEZpZWxkOiBcIi5uYW1lXCIsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59IHNhdGlzZmllcyBPbWl0PFJlc291cmNlUmVxdWlyZW1lbnQsIFwicmVxdWlyZWRcIj47XG5cbi8qKlxuICogQXBwS2l0IHBsdWdpbiBleHBvc2luZyBBSSBTZWFyY2ggYXMgYSBzZWFyY2ggYm94LCBhbiBhZ2VudCB0b29sIHNldCwgYW5kIGFcbiAqIGRpcmVjdCBBUEkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjcmVhdGVBcHAsIHNlcnZlciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbiAqIGltcG9ydCB7IHBsdWdpbiBhcyBzZWFyY2hQbHVnaW4gfSBmcm9tIFwiQGRieC10b29scy9zZWFyY2hcIjtcbiAqXG4gKiBhd2FpdCBjcmVhdGVBcHAoe1xuICogICBwbHVnaW5zOiBbXG4gKiAgICAgc2VydmVyKCksXG4gKiAgICAgLy8gemVyby1jb25maWc6IHJlYWRzIERBVEFCUklDS1NfVkVDVE9SX1NFQVJDSF9JTkRFWFxuICogICAgIHNlYXJjaFBsdWdpbi5zZWFyY2goKSxcbiAqICAgICAvLyBvciBnbyBkZWVwZXI6XG4gKiAgICAgLy8gc2VhcmNoUGx1Z2luLnNlYXJjaCh7XG4gKiAgICAgLy8gICBpbmRleDogXCJtYWluLnN1cHBvcnQuZG9jc1wiLFxuICogICAgIC8vICAgaW5kZXhlczogW1wibWFpbi5zdXBwb3J0LmRvY3NcIiwgXCJtYWluLmNhdGFsb2cucHJvZHVjdHNcIl0sXG4gKiAgICAgLy8gICBjb2x1bW5zOiBbXCJ0aXRsZVwiLCBcInVybFwiLCBcImJvZHlcIl0sXG4gKiAgICAgLy8gICBtb2RlOiBcImh5YnJpZFwiLFxuICogICAgIC8vIH0pLFxuICogICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFNlYXJjaFBsdWdpbiBleHRlbmRzIFBsdWdpbjxTZWFyY2hQbHVnaW5Db25maWc+IGltcGxlbWVudHMgVG9vbFByb3ZpZGVyIHtcbiAgc3RhdGljIG1hbmlmZXN0ID0ge1xuICAgIG5hbWU6IFwic2VhcmNoXCIsXG4gICAgZGlzcGxheU5hbWU6IFwiQUkgU2VhcmNoXCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlNlYXJjaCBEYXRhYnJpY2tzIEFJIFNlYXJjaCAoVmVjdG9yIFNlYXJjaCkgaW5kZXhlczogYWdlbnQgdG9vbHMsIEhUVFAgcm91dGVzIGZvciBhIFwiICtcbiAgICAgIFwic2VhcmNoIGJveCwgdW5pdmVyc2FsIHNlYXJjaCBhY3Jvc3MgaW5kZXhlcywgYW5kIGFuIG9wdC1pbiBkb2N1bWVudCB3cml0ZSBzdXJmYWNlLlwiLFxuICAgIHN0YWJpbGl0eTogXCJiZXRhXCIsXG4gICAgcmVzb3VyY2VzOiB7XG4gICAgICByZXF1aXJlZDogW10sXG4gICAgICBvcHRpb25hbDogW0lOREVYX1JFU09VUkNFXSxcbiAgICB9LFxuICAgIGNvbmZpZzogeyBzY2hlbWE6IFNFQVJDSF9DT05GSUdfU0NIRU1BIH0sXG4gIH0gc2F0aXNmaWVzIFBsdWdpbk1hbmlmZXN0PFwic2VhcmNoXCI+O1xuXG4gIC8qKiBUaGUgYmFzZSBwYXRoIEFwcEtpdCBtb3VudHMgdGhpcyBwbHVnaW4ncyByb3V0ZXMgdW5kZXIuICovXG4gIHByaXZhdGUgZ2V0IGJhc2VQYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAvYXBpLyR7U2VhcmNoUGx1Z2luLm1hbmlmZXN0Lm5hbWV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9tb3RlIHRoZSBpbmRleCB0byBhIHJlcXVpcmVkIHJlc291cmNlIG9uY2UgYSBkZXBsb3ltZW50IHBpbnMgYSBkZWZhdWx0LFxuICAgKiB0aHJvdWdoIHBsdWdpbiBjb25maWcgb3IgZWl0aGVyIGVudmlyb25tZW50IG5hbWUuXG4gICAqL1xuICBzdGF0aWMgZ2V0UmVzb3VyY2VSZXF1aXJlbWVudHMoY29uZmlnOiBTZWFyY2hQbHVnaW5Db25maWcpOiBSZXNvdXJjZVJlcXVpcmVtZW50W10ge1xuICAgIGNvbnN0IHBpbm5lZCA9XG4gICAgICBzdHJpbmcudHJpbVRvTnVsbChjb25maWcuaW5kZXgpID8/XG4gICAgICBzdHJpbmcudHJpbVRvTnVsbChwcm9jZXNzLmVudltJTkRFWF9FTlZdKSA/P1xuICAgICAgc3RyaW5nLnRyaW1Ub051bGwocHJvY2Vzcy5lbnZbREFUQUJSSUNLU19JTkRFWF9FTlZdKTtcbiAgICByZXR1cm4gcGlubmVkID09PSBudWxsID8gW10gOiBbeyAuLi5JTkRFWF9SRVNPVVJDRSwgcmVxdWlyZWQ6IHRydWUgfV07XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRvb2xzIHRoaXMgcGx1Z2luIG9mZmVycyB0byBhbiBBcHBLaXQgYWdlbnQuIGBzZWFyY2hgIC9cbiAgICogYHVuaXZlcnNhbF9zZWFyY2hgIGFyZSByZWFkczsgYGFkZF9kb2N1bWVudHNgIC8gYGNyZWF0ZV9pbmRleGAgL1xuICAgKiBgc3luY19pbmRleGAgYXJlIG9ubHkgb2ZmZXJlZCB3aGVuIHRoZSB3cml0ZSBzdXJmYWNlIGlzIGVuYWJsZWQuIE5vbmUgaXNcbiAgICogYXV0b0luaGVyaXRhYmxlOiBldmVyeSB0b29sIHJ1bnMgdW5kZXIgdGhlIGNhbGxlcidzIGlkZW50aXR5LCBzbyBpdCBtdXN0IGJlXG4gICAqIGdyYW50ZWQgZXhwbGljaXRseS5cbiAgICovXG4gIHByaXZhdGUgZ2V0IHRvb2xzKCk6IFRvb2xSZWdpc3RyeSB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IGdldFNlYXJjaFJ1bnRpbWUoeyBjb25maWc6IHRoaXMuY29uZmlnIH0pO1xuICAgIGNvbnN0IHJlZ2lzdHJ5OiBUb29sUmVnaXN0cnkgPSB7XG4gICAgICBzZWFyY2g6IGRlZmluZVRvb2woe1xuICAgICAgICBkZXNjcmlwdGlvbjogU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sXG4gICAgICAgIHNjaGVtYTogc2hhcmVkU2VhcmNoLnNlYXJjaFJlcXVlc3RTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7IGVmZmVjdDogXCJyZWFkXCIsIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWUgfSxcbiAgICAgICAgYXV0b0luaGVyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3MsIHNpZ25hbCkgPT4gdGhpcy5ydW5TZWFyY2goYXJncywgc2lnbmFsKSxcbiAgICAgIH0pLFxuICAgICAgdW5pdmVyc2FsX3NlYXJjaDogZGVmaW5lVG9vbCh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBVTklWRVJTQUxfU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sXG4gICAgICAgIHNjaGVtYTogc2hhcmVkU2VhcmNoLnVuaXZlcnNhbFNlYXJjaFJlcXVlc3RTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7IGVmZmVjdDogXCJyZWFkXCIsIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWUgfSxcbiAgICAgICAgYXV0b0luaGVyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3MsIHNpZ25hbCkgPT4gdGhpcy5ydW5Vbml2ZXJzYWxTZWFyY2goYXJncywgc2lnbmFsKSxcbiAgICAgIH0pLFxuICAgIH07XG4gICAgaWYgKGNvbmZpZy5hbGxvd1dyaXRlKSB7XG4gICAgICByZWdpc3RyeS5hZGRfZG9jdW1lbnRzID0gZGVmaW5lVG9vbCh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBBRERfRE9DVU1FTlRTX1RPT0xfREVTQ1JJUFRJT04sXG4gICAgICAgIHNjaGVtYTogc2hhcmVkU2VhcmNoLnNlYXJjaFJlcXVlc3RTY2hlbWFcbiAgICAgICAgICAucGljayh7IGluZGV4OiB0cnVlIH0pXG4gICAgICAgICAgLmV4dGVuZCh7IGRvY3VtZW50czogc2hhcmVkU2VhcmNoLnNlYXJjaERvY3VtZW50U2NoZW1hLmFycmF5KCkgfSksXG4gICAgICAgIGFubm90YXRpb25zOiB7IGVmZmVjdDogXCJ3cml0ZVwiLCByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIH0sXG4gICAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzLCBzaWduYWwpID0+IHRoaXMucnVuQWRkRG9jdW1lbnRzKGFyZ3MsIHNpZ25hbCksXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdHJ5LmNyZWF0ZV9pbmRleCA9IGRlZmluZVRvb2woe1xuICAgICAgICBkZXNjcmlwdGlvbjogQ1JFQVRFX0lOREVYX1RPT0xfREVTQ1JJUFRJT04sXG4gICAgICAgIHNjaGVtYTogc2hhcmVkU2VhcmNoLmNyZWF0ZUluZGV4UmVxdWVzdFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHsgZWZmZWN0OiBcIndyaXRlXCIsIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWUgfSxcbiAgICAgICAgYXV0b0luaGVyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3MsIHNpZ25hbCkgPT4gdGhpcy5ydW5DcmVhdGVJbmRleChhcmdzLCBzaWduYWwpLFxuICAgICAgfSk7XG4gICAgICByZWdpc3RyeS5zeW5jX2luZGV4ID0gZGVmaW5lVG9vbCh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBTWU5DX0lOREVYX1RPT0xfREVTQ1JJUFRJT04sXG4gICAgICAgIHNjaGVtYTogc2hhcmVkU2VhcmNoLnN5bmNJbmRleFJlcXVlc3RTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7IGVmZmVjdDogXCJ3cml0ZVwiLCByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIH0sXG4gICAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzLCBzaWduYWwpID0+IHRoaXMucnVuU3luY0luZGV4KGFyZ3MsIHNpZ25hbCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZ2lzdHJ5O1xuICB9XG5cbiAgLyoqIFByaW1lIHRoZSBzaGFyZWQgcnVudGltZSBmcm9tIGNvbmZpZyBhbmQgbG9nIHRoZSBlZmZlY3RpdmUgcG9saWN5IGF0IGJvb3QuICovXG4gIG92ZXJyaWRlIGFzeW5jIHNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIENob29zZSBhIGJhY2tlbmQuIFZlY3RvciBTZWFyY2ggaXMgcHJpbWFyeTsgd2hlbiBOTyBWZWN0b3IgU2VhcmNoXG4gICAgLy8gZW5kcG9pbnQgaXMgY29uZmlndXJlZCBidXQgdGhlIEFwcEtpdCBgbGFrZWJhc2VgIHBsdWdpbiBpcyByZWdpc3RlcmVkLFxuICAgIC8vIGZhbGwgYmFjayB0byBhIFBvc3RncmVzIGZ1bGwtdGV4dCBpbmRleC4gQm90aCBhbnN3ZXIgd2l0aCB0aGUgaWRlbnRpY2FsXG4gICAgLy8gc2hhcGUsIHNvIHRoaXMgY2hvaWNlIGlzIGludmlzaWJsZSB0byB0b29scywgcm91dGVzLCBhbmQgdGhlIFVJLlxuICAgIGNvbnN0IGxha2ViYXNlQmFja2VuZCA9IHRoaXMucmVzb2x2ZUxha2ViYXNlQmFja2VuZCgpO1xuICAgIC8vIFRoZSBydW50aW1lIG1heSBhbHJlYWR5IGhhdmUgYmVlbiBidWlsdCAoY29uZmlnLW9ubHkpIHdoZW4gYHRvb2xzKClgIHJhblxuICAgIC8vIGR1cmluZyByZWdpc3RyYXRpb247IHJlYnVpbGQgaXQgc28gaXQgY2FycmllcyB0aGUgY2hvc2VuIGJhY2tlbmQuXG4gICAgcmVzZXRTZWFyY2hSdW50aW1lKCk7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IGdldFNlYXJjaFJ1bnRpbWUoe1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIC4uLihsYWtlYmFzZUJhY2tlbmQgPyB7IGxha2ViYXNlOiBsYWtlYmFzZUJhY2tlbmQgfSA6IHt9KSxcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbyhcInJlYWR5XCIsIHtcbiAgICAgIGJhY2tlbmQ6IGxha2ViYXNlQmFja2VuZCA/IFwibGFrZWJhc2VcIiA6IFwidmVjdG9yLXNlYXJjaFwiLFxuICAgICAgZGVmYXVsdEluZGV4OiBjb25maWcuZGVmYXVsdEluZGV4ID8/IFwiKG5vbmUgLSBwYXNzIHBlciByZXF1ZXN0KVwiLFxuICAgICAgaW5kZXhlczogY29uZmlnLmluZGV4ZXMubWFwKChpKSA9PiBpLmFsaWFzKSxcbiAgICAgIHBhZ2VTaXplOiBjb25maWcucGFnZVNpemUsXG4gICAgICBtb2RlOiBjb25maWcubW9kZSxcbiAgICAgIGFsbG93V3JpdGU6IGNvbmZpZy5hbGxvd1dyaXRlLFxuICAgICAgYmFzZVBhdGg6IHRoaXMuYmFzZVBhdGgsXG4gICAgICBlbnN1cmVPblNldHVwOiBjb25maWcuZW5zdXJlT25TZXR1cFxuICAgICAgICA/IChjb25maWcuZW5zdXJlT25TZXR1cC5pbmRleCA/PyBjb25maWcuZGVmYXVsdEluZGV4KVxuICAgICAgICA6IFwib2ZmXCIsXG4gICAgfSk7XG4gICAgLy8gUHJvdmlzaW9uIGEgcmVhbCBpbmRleCBpbiB0aGUgQkFDS0dST1VORCBzbyBhIHNsb3cgZmlyc3QtdGltZSBlbmRwb2ludCBvclxuICAgIC8vIGluZGV4IGJ1aWxkIG5ldmVyIGJsb2NrcyB0aGUgc2VydmVyIGZyb20gY29taW5nIHVwLlxuICAgIGlmIChjb25maWcuZW5zdXJlT25TZXR1cCkgdm9pZCB0aGlzLnJ1bkVuc3VyZU9uU2V0dXAoY29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgTGFrZWJhc2UgRkFMTEJBQ0sgYmFja2VuZCwgb3IgcmV0dXJuIGB1bmRlZmluZWRgIHdoZW4gVmVjdG9yXG4gICAqIFNlYXJjaCBzaG91bGQgYmUgdXNlZC4gRmFsbHMgYmFjayBvbmx5IHdoZW4gdGhlcmUgaXMgTk8gVmVjdG9yIFNlYXJjaFxuICAgKiBlbmRwb2ludCBjb25maWd1cmVkIChwbHVnaW4gY29uZmlnIG9yIGBTRUFSQ0hfRU5EUE9JTlRgIC9cbiAgICogYERBVEFCUklDS1NfVkVDVE9SX1NFQVJDSF9FTkRQT0lOVGApIEFORCB0aGUgc2libGluZyBBcHBLaXQgYGxha2ViYXNlYFxuICAgKiBwbHVnaW4gaXMgcmVnaXN0ZXJlZC4gVGhlIHBnIHBvb2wgaXMgYnVpbHQgZnJvbSB0aGF0IHBsdWdpbidzXG4gICAqIHNlcnZpY2UtcHJpbmNpcGFsIGNvbmZpZyBleGFjdGx5IGxpa2UgYEBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYWAncyBtZW1vcnlcbiAgICogcG9vbCAtIG5vIGF1dGggaXMgcmUtaW1wbGVtZW50ZWQgaGVyZS5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZUxha2ViYXNlQmFja2VuZCgpOiBMYWtlYmFzZVNlYXJjaEJhY2tlbmQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlc29sdmVTZWFyY2hDb25maWcodGhpcy5jb25maWcpO1xuICAgIGNvbnN0IGhhc0VuZHBvaW50ID1cbiAgICAgIGNvbmZpZy5lbmRwb2ludCAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICBzdHJpbmcudHJpbVRvTnVsbChwcm9jZXNzLmVudltFTkRQT0lOVF9FTlZdKSAhPT0gbnVsbCB8fFxuICAgICAgc3RyaW5nLnRyaW1Ub051bGwocHJvY2Vzcy5lbnYuREFUQUJSSUNLU19WRUNUT1JfU0VBUkNIX0VORFBPSU5UKSAhPT0gbnVsbDtcbiAgICBpZiAoaGFzRW5kcG9pbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbGFrZSA9IGFwcGtpdFBsdWdpbi5pbnN0YW5jZSh0aGlzLmNvbnRleHQsIGxha2ViYXNlKTtcbiAgICBpZiAoIWxha2UpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgbG9nZ2VyLmluZm8oXCJiYWNrZW5kLWxha2ViYXNlXCIsIHtcbiAgICAgIHJlYXNvbjogXCJubyBWZWN0b3IgU2VhcmNoIGVuZHBvaW50IGNvbmZpZ3VyZWQ7IHVzaW5nIHRoZSBMYWtlYmFzZSBmdWxsLXRleHQgZmFsbGJhY2tcIixcbiAgICB9KTtcbiAgICAvLyBgZ2V0UGdDb25maWcoKWAgbXVzdCBiZSByZWFkIE9VVFNJREUgYW55IGFzVXNlciBzY29wZSAoYXMgaXQgaXMgaGVyZSBhdFxuICAgIC8vIHNldHVwKSBzbyBpdCBjYXJyaWVzIHRoZSBTUCBjb25uZWN0aW9uIHRhcmdldCArIHRva2VuLXJlZnJlc2ggY2FsbGJhY2suXG4gICAgcmV0dXJuIG5ldyBMYWtlYmFzZVNlYXJjaEJhY2tlbmQoKCkgPT4gbGFrZS5leHBvcnRzKCkuZ2V0UGdDb25maWcoKSk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIHRoZSBlbmRwb2ludCArIGluZGV4IGV4aXN0IGFuZCBzZWVkIHRoZW0sIGhvbm9yaW5nIGBlbnN1cmVPblNldHVwYC5cbiAgICogVXNlcyBib290LXRpbWUgU0RLIGF1dGggKGVudiAvIGNvbmZpZyBwcm9maWxlKSB2aWEgdGhlIGNsaWVudCdzXG4gICAqIG91dC1vZi1yZXF1ZXN0IGZhbGxiYWNrLiBGYWlsdXJlcyBhcmUgbG9nZ2VkLCBuZXZlciB0aHJvd24gLSBhIHNlYXJjaCBhcHBcbiAgICogc2hvdWxkIHN0aWxsIHN0YXJ0IGV2ZW4gaWYgcHJvdmlzaW9uaW5nIGlzIHNsb3cgb3IgYSBwZXJtaXNzaW9uIGlzIG1pc3NpbmcuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJ1bkVuc3VyZU9uU2V0dXAoXG4gICAgY29uZmlnOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRTZWFyY2hSdW50aW1lPltcImNvbmZpZ1wiXSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3BlYyA9IGNvbmZpZy5lbnN1cmVPblNldHVwO1xuICAgIGlmICghc3BlYykgcmV0dXJuO1xuICAgIGNvbnN0IGluZGV4ID0gc3RyaW5nLnRyaW1Ub051bGwoc3BlYy5pbmRleCkgPz8gY29uZmlnLmRlZmF1bHRJbmRleDtcbiAgICBpZiAoIWluZGV4KSB7XG4gICAgICBsb2dnZXIud2FybihcImVuc3VyZS1za2lwcGVkXCIsIHtcbiAgICAgICAgcmVhc29uOiBcIm5vIGluZGV4IG5hbWUgKHNldCBgaW5kZXhgIG9yIGBlbnN1cmVPblNldHVwLmluZGV4YClcIixcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkb2N1bWVudHMgPSBzcGVjLmRvY3VtZW50cyA/PyBbXTtcbiAgICAvLyBJbmZlciBhIG1hbmFnZWQtZGlyZWN0LWFjY2VzcyBzY2hlbWEgZnJvbSB0aGUgZmlyc3Qgc2VlZCByb3cgd2hlbiBub3QgZ2l2ZW4uXG4gICAgY29uc3Qgc2NoZW1hID1cbiAgICAgIHNwZWMuc2NoZW1hID8/XG4gICAgICAoZG9jdW1lbnRzLmxlbmd0aCA+IDAgJiYgIXNwZWMuc291cmNlVGFibGVcbiAgICAgICAgPyB0aGlzLmluZmVyU2NoZW1hKGRvY3VtZW50c1swXSwgc3BlYy5wcmltYXJ5S2V5ID8/IFwiaWRcIiwgc3BlYy50ZXh0Q29sdW1uID8/IFwidGV4dFwiKVxuICAgICAgICA6IHVuZGVmaW5lZCk7XG4gICAgdHJ5IHtcbiAgICAgIGxvZ2dlci5pbmZvKFwiZW5zdXJlLXN0YXJ0XCIsIHsgaW5kZXggfSk7XG4gICAgICBjb25zdCB7IGNsaWVudCB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IGNsaWVudC5wcm92aXNpb24oaW5kZXgsIHtcbiAgICAgICAgLi4uKHNwZWMuZW5kcG9pbnQgPyB7IGVuZHBvaW50OiBzcGVjLmVuZHBvaW50IH0gOiB7fSksXG4gICAgICAgIC4uLihzcGVjLnByaW1hcnlLZXkgPyB7IHByaW1hcnlLZXk6IHNwZWMucHJpbWFyeUtleSB9IDoge30pLFxuICAgICAgICAuLi4oc3BlYy50ZXh0Q29sdW1uID8geyBlbWJlZGRpbmdTb3VyY2VDb2x1bW46IHNwZWMudGV4dENvbHVtbiB9IDoge30pLFxuICAgICAgICAuLi4oc3BlYy5lbWJlZGRpbmdNb2RlbCA/IHsgZW1iZWRkaW5nTW9kZWw6IHNwZWMuZW1iZWRkaW5nTW9kZWwgfSA6IHt9KSxcbiAgICAgICAgLi4uKHNwZWMuc291cmNlVGFibGUgPyB7IHNvdXJjZVRhYmxlOiBzcGVjLnNvdXJjZVRhYmxlIH0gOiB7fSksXG4gICAgICAgIC4uLihzY2hlbWEgPyB7IHNjaGVtYSB9IDoge30pLFxuICAgICAgICAuLi4oc3BlYy50aW1lb3V0TXMgPyB7IHRpbWVvdXRNczogc3BlYy50aW1lb3V0TXMgfSA6IHt9KSxcbiAgICAgICAgLi4uKGRvY3VtZW50cy5sZW5ndGggPiAwID8geyBzZWVkOiBkb2N1bWVudHMgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmluZm8oXCJlbnN1cmUtcmVhZHlcIiwge1xuICAgICAgICBpbmRleDogaW5mby5uYW1lLFxuICAgICAgICByZWFkeTogaW5mby5yZWFkeSxcbiAgICAgICAgcm93Q291bnQ6IGluZm8ucm93Q291bnQgPz8gMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgICBsb2dnZXIud2FybihcImVuc3VyZS1mYWlsZWRcIiwgeyBpbmRleCwgbWVzc2FnZTogc2hhcmVkRXJyb3IuZXJyb3JNZXNzYWdlKGNhdXNlKSB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQnVpbGQgYSBWZWN0b3IgU2VhcmNoIGBzY2hlbWFfanNvbmAgbWFwIGZyb20gYSBzZWVkIGRvY3VtZW50J3MgdmFsdWUgdHlwZXMuICovXG4gIHByaXZhdGUgaW5mZXJTY2hlbWEoXG4gICAgZG9jOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBwcmltYXJ5S2V5OiBzdHJpbmcsXG4gICAgdGV4dENvbHVtbjogc3RyaW5nLFxuICApOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBzY2hlbWE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IFtwcmltYXJ5S2V5XTogXCJzdHJpbmdcIiwgW3RleHRDb2x1bW5dOiBcInN0cmluZ1wiIH07XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZG9jKSkge1xuICAgICAgaWYgKGtleSBpbiBzY2hlbWEpIGNvbnRpbnVlO1xuICAgICAgc2NoZW1hW2tleV0gPVxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICA/IE51bWJlci5pc0ludGVnZXIodmFsdWUpXG4gICAgICAgICAgICA/IFwiaW50XCJcbiAgICAgICAgICAgIDogXCJkb3VibGVcIlxuICAgICAgICAgIDogdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIlxuICAgICAgICAgICAgPyBcImJvb2xlYW5cIlxuICAgICAgICAgICAgOiBcInN0cmluZ1wiO1xuICAgIH1cbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG5cbiAgLyoqIERyb3AgdGhlIHNoYXJlZCBydW50aW1lIHNvIGEgcmVzdGFydGVkIGFwcCByZS1yZXNvbHZlcyBjb25maWcuICovXG4gIGFzeW5jIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJlc2V0U2VhcmNoUnVudGltZSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYWJvcnRBY3RpdmVPcGVyYXRpb25zKCk6IHZvaWQge1xuICAgIHN1cGVyLmFib3J0QWN0aXZlT3BlcmF0aW9ucygpO1xuICAgIHZvaWQgdGhpcy5zaHV0ZG93bigpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdW50IHRoZSBzZWFyY2ggcm91dGVzIHVuZGVyIGAvYXBpL3NlYXJjaGAuIEVhY2ggaXMgd3JhcHBlZCBpblxuICAgKiBgYXNVc2VyKHJlcSlgIHNvIHRoZSBxdWVyeSBydW5zIGFzIHRoZSByZXF1ZXN0aW5nIHVzZXIgYW5kIHRoZSBpbmRleCdzXG4gICAqIFVuaXR5IENhdGFsb2cgQUNMcyBhcHBseS4gYEdFVCAvaW5kZXhlc2AgbmVlZHMgbm8gdXNlciBzY29wZSAtIGl0IGp1c3RcbiAgICogZWNob2VzIHRoZSBjb25maWd1cmVkIGNhdGFsb2d1ZS5cbiAgICovXG4gIG92ZXJyaWRlIGluamVjdFJvdXRlcyhyb3V0ZXI6IElBcHBSb3V0ZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlKHJvdXRlciwge1xuICAgICAgbmFtZTogXCJzZWFyY2hcIixcbiAgICAgIG1ldGhvZDogXCJwb3N0XCIsXG4gICAgICBwYXRoOiBTRUFSQ0hfUk9VVEUsXG4gICAgICBoYW5kbGVyOiBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXNwb25kKHJlcywgXCJzZWFyY2hcIiwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBzaGFyZWRTZWFyY2guc2VhcmNoUmVxdWVzdFNjaGVtYS5wYXJzZShyZXEuYm9keSA/PyB7fSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXNVc2VyKHJlcSkucnVuU2VhcmNoKHJlcXVlc3QpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwidW5pdmVyc2FsU2VhcmNoXCIsXG4gICAgICBtZXRob2Q6IFwicG9zdFwiLFxuICAgICAgcGF0aDogVU5JVkVSU0FMX1JPVVRFLFxuICAgICAgaGFuZGxlcjogYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzcG9uZChyZXMsIFwidW5pdmVyc2FsU2VhcmNoXCIsICgpID0+IHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gc2hhcmVkU2VhcmNoLnVuaXZlcnNhbFNlYXJjaFJlcXVlc3RTY2hlbWEucGFyc2UocmVxLmJvZHkgPz8ge30pO1xuICAgICAgICAgIHJldHVybiB0aGlzLmFzVXNlcihyZXEpLnJ1blVuaXZlcnNhbFNlYXJjaChyZXF1ZXN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMucm91dGUocm91dGVyLCB7XG4gICAgICBuYW1lOiBcImluZGV4ZXNcIixcbiAgICAgIG1ldGhvZDogXCJnZXRcIixcbiAgICAgIHBhdGg6IElOREVYRVNfUk9VVEUsXG4gICAgICBoYW5kbGVyOiBhc3luYyAoX3JlcSwgcmVzKSA9PiB7XG4gICAgICAgIHJlcy5qc29uKHRoaXMuY2xpZW50Q29uZmlnKCkpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKHJvdXRlciwge1xuICAgICAgbmFtZTogXCJkb2N1bWVudHNcIixcbiAgICAgIG1ldGhvZDogXCJwb3N0XCIsXG4gICAgICBwYXRoOiBET0NVTUVOVFNfUk9VVEUsXG4gICAgICBoYW5kbGVyOiBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgY29uc3QgeyBjb25maWcgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICAgICAgaWYgKCFjb25maWcuYWxsb3dXcml0ZSkge1xuICAgICAgICAgIHJlcy5zdGF0dXMoNDAzKS5qc29uKHsgZXJyb3I6IFwidGhlIGRvY3VtZW50IHdyaXRlIHN1cmZhY2UgaXMgZGlzYWJsZWRcIiB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5yZXNwb25kKHJlcywgXCJhZGREb2N1bWVudHNcIiwgKCkgPT5cbiAgICAgICAgICB0aGlzLmFzVXNlcihyZXEpLnJ1bkFkZERvY3VtZW50cyhyZXEuYm9keSA/PyB7fSksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMucm91dGUocm91dGVyLCB7XG4gICAgICBuYW1lOiBcImNyZWF0ZUluZGV4XCIsXG4gICAgICBtZXRob2Q6IFwicG9zdFwiLFxuICAgICAgcGF0aDogSU5ERVhfUk9VVEUsXG4gICAgICBoYW5kbGVyOiBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgY29uc3QgeyBjb25maWcgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICAgICAgaWYgKCFjb25maWcuYWxsb3dXcml0ZSkge1xuICAgICAgICAgIHJlcy5zdGF0dXMoNDAzKS5qc29uKHsgZXJyb3I6IFwidGhlIGluZGV4IHdyaXRlIHN1cmZhY2UgaXMgZGlzYWJsZWRcIiB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5yZXNwb25kKHJlcywgXCJjcmVhdGVJbmRleFwiLCAoKSA9PlxuICAgICAgICAgIHRoaXMuYXNVc2VyKHJlcSkucnVuQ3JlYXRlSW5kZXgocmVxLmJvZHkgPz8ge30pLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKHJvdXRlciwge1xuICAgICAgbmFtZTogXCJzeW5jSW5kZXhcIixcbiAgICAgIG1ldGhvZDogXCJwb3N0XCIsXG4gICAgICBwYXRoOiBJTkRFWF9TWU5DX1JPVVRFLFxuICAgICAgaGFuZGxlcjogYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29uZmlnIH0gPSBnZXRTZWFyY2hSdW50aW1lKCk7XG4gICAgICAgIGlmICghY29uZmlnLmFsbG93V3JpdGUpIHtcbiAgICAgICAgICByZXMuc3RhdHVzKDQwMykuanNvbih7IGVycm9yOiBcInRoZSBpbmRleCB3cml0ZSBzdXJmYWNlIGlzIGRpc2FibGVkXCIgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMucmVzcG9uZChyZXMsIFwic3luY0luZGV4XCIsICgpID0+IHRoaXMuYXNVc2VyKHJlcSkucnVuU3luY0luZGV4KHJlcS5ib2R5ID8/IHt9KSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBhIHJvdXRlIGJvZHksIHR1cm5pbmcgYSBmYWlsdXJlIGludG8gYSBKU09OIGVycm9yIHJlc3BvbnNlLlxuICAgKlxuICAgKiBBcHBLaXQncyBgcm91dGUoKWAgcmVnaXN0ZXJzIHRoZSBoYW5kbGVyIGFzLWlzLCBzbyBhIHJlamVjdGlvbiBlc2NhcGVzIGFzXG4gICAqIGFuIHVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiBhbmQgdGFrZXMgdGhlIHdob2xlIHByb2Nlc3MgZG93biByYXRoZXIgdGhhblxuICAgKiBmYWlsaW5nIHRoZSBvbmUgcmVxdWVzdC4gRXZlcnkgcm91dGUgaGVyZSBnb2VzIHRocm91Z2ggdGhpcywgc28gYSBiYWQgaW5kZXhcbiAgICogbmFtZSBvciBhIFZlY3RvciBTZWFyY2ggQVBJIGVycm9yIHJldHVybnMgNTAwIHdpdGggYSBtZXNzYWdlIGluc3RlYWQgb2ZcbiAgICoga2lsbGluZyB0aGUgc2VydmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXNwb25kKFxuICAgIHJlczogUGFyYW1ldGVyczxQYXJhbWV0ZXJzPElBcHBSb3V0ZXJbXCJwb3N0XCJdPlsxXT5bMV0sXG4gICAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gICAgcnVuOiAoKSA9PiBQcm9taXNlPHVua25vd24+LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgcmVzLmpzb24oYXdhaXQgcnVuKCkpO1xuICAgIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gc2hhcmVkRXJyb3IuZXJyb3JNZXNzYWdlKGNhdXNlKTtcbiAgICAgIGxvZ2dlci53YXJuKFwicm91dGUtZmFpbGVkXCIsIHsgb3BlcmF0aW9uLCBtZXNzYWdlIH0pO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogbWVzc2FnZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogU3VyZmFjZSB0aGUgaW5kZXggY2F0YWxvZ3VlICsgZGVmYXVsdHMgc28gYSBzZWFyY2ggYm94IG5lZWRzIG5vIHJvdW5kLXRyaXAuICovXG4gIG92ZXJyaWRlIGNsaWVudENvbmZpZygpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IGdldFNlYXJjaFJ1bnRpbWUoeyBjb25maWc6IHRoaXMuY29uZmlnIH0pO1xuICAgIGNvbnN0IHBheWxvYWQ6IFNlYXJjaENsaWVudENvbmZpZyA9IHtcbiAgICAgIGluZGV4ZXM6IGNvbmZpZy5pbmRleGVzLm1hcCgoaW5kZXgpID0+ICh7XG4gICAgICAgIG5hbWU6IGluZGV4Lm5hbWUsXG4gICAgICAgIGFsaWFzOiBpbmRleC5hbGlhcyxcbiAgICAgICAgLi4uKGluZGV4LnByaW1hcnlLZXkgPyB7IHByaW1hcnlLZXk6IGluZGV4LnByaW1hcnlLZXkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGluZGV4LmNvbHVtbnMgPyB7IGNvbHVtbnM6IGluZGV4LmNvbHVtbnMgfSA6IHt9KSxcbiAgICAgICAgLi4uKGluZGV4Lm5hbWUgPT09IGNvbmZpZy5kZWZhdWx0SW5kZXggPyB7IGlzRGVmYXVsdDogdHJ1ZSB9IDoge30pLFxuICAgICAgfSkpLFxuICAgICAgLi4uKGNvbmZpZy5kZWZhdWx0SW5kZXggPyB7IGRlZmF1bHRJbmRleDogY29uZmlnLmRlZmF1bHRJbmRleCB9IDoge30pLFxuICAgICAgcGFnZVNpemU6IGNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIGJhc2VQYXRoOiB0aGlzLmJhc2VQYXRoLFxuICAgIH07XG4gICAgcmV0dXJuIHBheWxvYWQgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfVxuXG4gIC8qKiBBcHBLaXQgYFRvb2xQcm92aWRlcmA6IHRoZSB0b29sIGRlZmluaXRpb25zIG9mZmVyZWQgdG8gYW4gYWdlbnQuICovXG4gIGdldEFnZW50VG9vbHMoKTogQWdlbnRUb29sRGVmaW5pdGlvbltdIHtcbiAgICByZXR1cm4gdG9vbHNGcm9tUmVnaXN0cnkodGhpcy50b29scyk7XG4gIH1cblxuICAvKiogQXBwS2l0IGBUb29sUHJvdmlkZXJgOiBydW4gb25lIHRvb2wgY2FsbCwgdmFsaWRhdGluZyBpbnB1dCBhZ2FpbnN0IGl0cyBzY2hlbWEuICovXG4gIGFzeW5jIGV4ZWN1dGVBZ2VudFRvb2wobmFtZTogc3RyaW5nLCBhcmdzOiB1bmtub3duLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIHJldHVybiBleGVjdXRlRnJvbVJlZ2lzdHJ5KHRoaXMudG9vbHMsIG5hbWUsIGFyZ3MsIHNpZ25hbCk7XG4gIH1cblxuICBvdmVycmlkZSBleHBvcnRzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvKiogU2VhcmNoIG9uZSBpbmRleCAoZGVmYXVsdCB3aGVuIG9taXR0ZWQpLiBSdW5zIGFzIHRoZSBjdXJyZW50IGNvbnRleHQgdXNlci4gKi9cbiAgICAgIHNlYXJjaDogKHJlcXVlc3Q6IHNoYXJlZFNlYXJjaC5TZWFyY2hSZXF1ZXN0LCBzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT5cbiAgICAgICAgdGhpcy5ydW5TZWFyY2gocmVxdWVzdCwgc2lnbmFsKSxcbiAgICAgIC8qKiBTZWFyY2ggYWNyb3NzIGV2ZXJ5IGNvbmZpZ3VyZWQgaW5kZXggYW5kIG1lcmdlIHRoZSBoaXRzLiAqL1xuICAgICAgdW5pdmVyc2FsU2VhcmNoOiAocmVxdWVzdDogc2hhcmVkU2VhcmNoLlVuaXZlcnNhbFNlYXJjaFJlcXVlc3QsIHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PlxuICAgICAgICB0aGlzLnJ1blVuaXZlcnNhbFNlYXJjaChyZXF1ZXN0LCBzaWduYWwpLFxuICAgICAgLyoqIEFkZCBvciB1cGRhdGUgZG9jdW1lbnRzIGluIGEgZGlyZWN0LWFjY2VzcyBpbmRleCAodGhyb3dzIHdoZW4gd3JpdGVzIGFyZSBkaXNhYmxlZCkuICovXG4gICAgICBhZGREb2N1bWVudHM6IChyZXF1ZXN0OiB7IGluZGV4Pzogc3RyaW5nOyBkb2N1bWVudHM6IHVua25vd24gfSwgc2lnbmFsPzogQWJvcnRTaWduYWwpID0+XG4gICAgICAgIHRoaXMucnVuQWRkRG9jdW1lbnRzKHJlcXVlc3QsIHNpZ25hbCksXG4gICAgICAvKiogQ3JlYXRlIGEgVmVjdG9yIFNlYXJjaCBpbmRleCAodGhyb3dzIHdoZW4gd3JpdGVzIGFyZSBkaXNhYmxlZCkuICovXG4gICAgICBjcmVhdGVJbmRleDogKHJlcXVlc3Q6IHNoYXJlZFNlYXJjaC5DcmVhdGVJbmRleFJlcXVlc3QsIHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PlxuICAgICAgICB0aGlzLnJ1bkNyZWF0ZUluZGV4KHJlcXVlc3QsIHNpZ25hbCksXG4gICAgICAvKiogU3luYyBhIERlbHRhIFN5bmMgaW5kZXggZnJvbSBpdHMgc291cmNlIHRhYmxlICh0aHJvd3Mgd2hlbiB3cml0ZXMgYXJlIGRpc2FibGVkKS4gKi9cbiAgICAgIHN5bmNJbmRleDogKHJlcXVlc3Q6IHNoYXJlZFNlYXJjaC5TeW5jSW5kZXhSZXF1ZXN0LCBzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT5cbiAgICAgICAgdGhpcy5ydW5TeW5jSW5kZXgocmVxdWVzdCwgc2lnbmFsKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBydW5TZWFyY2goYXJnczogdW5rbm93biwgc2lnbmFsPzogQWJvcnRTaWduYWwpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gc2hhcmVkU2VhcmNoLnNlYXJjaFJlcXVlc3RTY2hlbWEucGFyc2UoYXJncyk7XG4gICAgY29uc3QgeyBjbGllbnQgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICByZXR1cm4gY2xpZW50LnNlYXJjaChyZXF1ZXN0LnF1ZXJ5LCB7XG4gICAgICAuLi4ocmVxdWVzdC5pbmRleCA/IHsgaW5kZXg6IHJlcXVlc3QuaW5kZXggfSA6IHt9KSxcbiAgICAgIC4uLihyZXF1ZXN0LmxpbWl0ID8geyBsaW1pdDogcmVxdWVzdC5saW1pdCB9IDoge30pLFxuICAgICAgLi4uKHJlcXVlc3QubW9kZSA/IHsgbW9kZTogcmVxdWVzdC5tb2RlIH0gOiB7fSksXG4gICAgICAuLi4ocmVxdWVzdC5jb2x1bW5zID8geyBjb2x1bW5zOiByZXF1ZXN0LmNvbHVtbnMgfSA6IHt9KSxcbiAgICAgIC4uLihyZXF1ZXN0LmZpbHRlciA/IHsgZmlsdGVyOiByZXF1ZXN0LmZpbHRlciB9IDoge30pLFxuICAgICAgLi4uKHJlcXVlc3Quc2NvcmVUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCA/IHsgc2NvcmVUaHJlc2hvbGQ6IHJlcXVlc3Quc2NvcmVUaHJlc2hvbGQgfSA6IHt9KSxcbiAgICAgIC4uLihzaWduYWwgPyB7IHNpZ25hbCB9IDoge30pLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBydW5Vbml2ZXJzYWxTZWFyY2goYXJnczogdW5rbm93biwgc2lnbmFsPzogQWJvcnRTaWduYWwpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gc2hhcmVkU2VhcmNoLnVuaXZlcnNhbFNlYXJjaFJlcXVlc3RTY2hlbWEucGFyc2UoYXJncyk7XG4gICAgY29uc3QgeyBjbGllbnQgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICByZXR1cm4gY2xpZW50LnVuaXZlcnNhbFNlYXJjaChyZXF1ZXN0LnF1ZXJ5LCB7XG4gICAgICAuLi4ocmVxdWVzdC5pbmRleGVzID8geyBpbmRleGVzOiByZXF1ZXN0LmluZGV4ZXMgfSA6IHt9KSxcbiAgICAgIC4uLihyZXF1ZXN0LmxpbWl0ID8geyBsaW1pdDogcmVxdWVzdC5saW1pdCB9IDoge30pLFxuICAgICAgLi4uKHJlcXVlc3QubW9kZSA/IHsgbW9kZTogcmVxdWVzdC5tb2RlIH0gOiB7fSksXG4gICAgICAuLi4oc2lnbmFsID8geyBzaWduYWwgfSA6IHt9KSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcnVuQWRkRG9jdW1lbnRzKGFyZ3M6IHVua25vd24sIHNpZ25hbD86IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3QgcmVjb3JkID0gKGFyZ3MgPz8ge30pIGFzIHsgaW5kZXg/OiBzdHJpbmc7IGRvY3VtZW50czogdW5rbm93biB9O1xuICAgIGNvbnN0IHsgY2xpZW50LCBjb25maWcgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICBjb25zdCBkb2N1bWVudHMgPSB0b0RvY3VtZW50QXJyYXkocmVjb3JkLmRvY3VtZW50cyk7XG4gICAgY29uc3QgaW5kZXggPSByZWNvcmQuaW5kZXggPz8gY29uZmlnLmRlZmF1bHRJbmRleCA/PyBcIlwiO1xuICAgIHJldHVybiBjbGllbnQuYWRkRG9jdW1lbnRzKGluZGV4LCBkb2N1bWVudHMsIHNpZ25hbCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJ1bkNyZWF0ZUluZGV4KGFyZ3M6IHVua25vd24sIHNpZ25hbD86IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHNoYXJlZFNlYXJjaC5jcmVhdGVJbmRleFJlcXVlc3RTY2hlbWEucGFyc2UoYXJncyk7XG4gICAgY29uc3QgeyBjbGllbnQgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICByZXR1cm4gY2xpZW50LmNyZWF0ZUluZGV4KHJlcXVlc3QubmFtZSwgdG9DcmVhdGVJbmRleE9wdGlvbnMocmVxdWVzdCwgc2lnbmFsKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJ1blN5bmNJbmRleChhcmdzOiB1bmtub3duLCBzaWduYWw/OiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBzaGFyZWRTZWFyY2guc3luY0luZGV4UmVxdWVzdFNjaGVtYS5wYXJzZShhcmdzKTtcbiAgICBjb25zdCB7IGNsaWVudCwgY29uZmlnIH0gPSBnZXRTZWFyY2hSdW50aW1lKCk7XG4gICAgY29uc3QgaW5kZXggPSByZXF1ZXN0LmluZGV4ID8/IGNvbmZpZy5kZWZhdWx0SW5kZXggPz8gXCJcIjtcbiAgICBhd2FpdCBjbGllbnQuc3luY0luZGV4KGluZGV4LCBzaWduYWwpO1xuICAgIHJldHVybiB7IGluZGV4LCBzeW5jZWQ6IHRydWUgfTtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVyIHRoZSBBSSBTZWFyY2ggcGx1Z2luIHdpdGggQXBwS2l0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY3JlYXRlQXBwLCBzZXJ2ZXIgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG4gKiBpbXBvcnQgeyBwbHVnaW4gYXMgc2VhcmNoUGx1Z2luLCB0b29sIGFzIHNlYXJjaFRvb2xBcGkgfSBmcm9tIFwiQGRieC10b29scy9zZWFyY2hcIjtcbiAqIGltcG9ydCB7IGFnZW50cywgcGx1Z2luIGFzIG1hc3RyYVBsdWdpbiB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFcIjtcbiAqXG4gKiBjb25zdCBzdXBwb3J0ID0gYWdlbnRzLmNyZWF0ZUFnZW50KHtcbiAqICAgaW5zdHJ1Y3Rpb25zOiBcIkFuc3dlciBmcm9tIHRoZSBkb2NzOyB1c2UgYHNlYXJjaGAgdG8gZmluZCB0aGVtLlwiLFxuICogICB0b29sczogKCkgPT4gKHsgc2VhcmNoOiBzZWFyY2hUb29sQXBpLnNlYXJjaFRvb2woKSB9KSxcbiAqIH0pO1xuICpcbiAqIGF3YWl0IGNyZWF0ZUFwcCh7XG4gKiAgIHBsdWdpbnM6IFtcbiAqICAgICBzZXJ2ZXIoKSxcbiAqICAgICBzZWFyY2hQbHVnaW4uc2VhcmNoKHsgaW5kZXg6IFwibWFpbi5zdXBwb3J0LmRvY3NcIiB9KSxcbiAqICAgICBtYXN0cmFQbHVnaW4ubWFzdHJhKHsgYWdlbnRzOiBzdXBwb3J0IH0pLFxuICogICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHNlYXJjaCA9IHRvUGx1Z2luKFNlYXJjaFBsdWdpbik7XG4iXX0=
|
package/lib/src/tool.js
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* @module
|
|
15
15
|
*/
|
|
16
|
-
import { search as
|
|
16
|
+
import { search as sharedSearch } from "@dbx-tools/shared-search";
|
|
17
17
|
import { createTool } from "@mastra/core/tools";
|
|
18
18
|
import { z } from "zod";
|
|
19
19
|
import { toCreateIndexOptions } from "./index-tools.js";
|
|
@@ -80,16 +80,16 @@ export function universalSearchTool(options = {}) {
|
|
|
80
80
|
* Only install it when the plugin's write surface is enabled.
|
|
81
81
|
*/
|
|
82
82
|
export function addDocumentsTool(options = {}) {
|
|
83
|
-
const inputSchema =
|
|
83
|
+
const inputSchema = sharedSearch.searchDocumentSchema
|
|
84
84
|
.array()
|
|
85
85
|
.describe("Documents to add or update. Each must include the index primary key.");
|
|
86
86
|
return createTool({
|
|
87
87
|
id: options.id ?? "add_documents",
|
|
88
88
|
description: ADD_DOCUMENTS_TOOL_DESCRIPTION,
|
|
89
|
-
inputSchema:
|
|
89
|
+
inputSchema: sharedSearch.searchRequestSchema
|
|
90
90
|
.pick({ index: true })
|
|
91
91
|
.extend({ documents: inputSchema }),
|
|
92
|
-
outputSchema:
|
|
92
|
+
outputSchema: sharedSearch.upsertResultSchema,
|
|
93
93
|
execute: async (input, context) => {
|
|
94
94
|
const { client, config } = getSearchRuntime();
|
|
95
95
|
const record = input;
|
|
@@ -142,4 +142,4 @@ export function syncIndexTool(options = {}) {
|
|
|
142
142
|
},
|
|
143
143
|
});
|
|
144
144
|
}
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFFLE1BQU0sSUFBSSxjQUFjLEVBQXFCLE1BQU0sMEJBQTBCLENBQUM7QUFDdkYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUNMLDhCQUE4QixFQUM5Qiw2QkFBNkIsRUFDN0IsdUJBQXVCLEVBQ3ZCLDJCQUEyQixFQUMzQixpQ0FBaUMsRUFDakMscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQix5QkFBeUIsR0FDMUIsTUFBTSxhQUFhLENBQUM7QUFRckI7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLFVBQTZCLEVBQUU7SUFDeEQsT0FBTyxVQUFVLENBQUM7UUFDaEIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksUUFBUTtRQUMxQixXQUFXLEVBQUUsdUJBQXVCO1FBQ3BDLFdBQVcsRUFBRSxnQkFBZ0I7UUFDN0IsWUFBWSxFQUFFLGtCQUFrQjtRQUNoQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNoQyxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixF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LE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNqQyxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGBzZWFyY2hgLCBgdW5pdmVyc2FsX3NlYXJjaGAsIGFuZCAob3B0LWluKSBgYWRkX2RvY3VtZW50c2AsXG4gKiBgY3JlYXRlX2luZGV4YCwgYW5kIGBzeW5jX2luZGV4YCBNYXN0cmEgdG9vbHMuXG4gKlxuICogQWxsIHRocmVlIHJlYWQgdGhlIHNoYXJlZCBydW50aW1lIHByaW1lZCBieSB0aGUgcGx1Z2luLCBzbyBhIHRvb2wgc3ByZWFkXG4gKiBpbnRvIGFuIGFnZW50IHVzZXMgdGhlIGRlcGxveW1lbnQncyBkZWZhdWx0IGluZGV4LCBjb2x1bW5zLCBwYWdlIHNpemUsIGFuZFxuICogbW9kZSB3aXRob3V0IGFueSBwZXItdG9vbCB3aXJpbmcuIFRoZXkgcnVuIHVuZGVyIHRoZSBjYWxsZXIncyBPQk8gc2NvcGUgKHRoZVxuICogY2xpZW50IHJlc29sdmVzIHRoZSBleGVjdXRpb24gY29udGV4dCdzIHdvcmtzcGFjZSBjbGllbnQpLCBzbyBzZWFyY2ggcnVucyBhc1xuICogdGhlIHJlcXVlc3RpbmcgdXNlciBhbmQgVW5pdHkgQ2F0YWxvZyBBQ0xzIGFwcGx5LlxuICpcbiAqIFRoZSBzYW1lIHRvb2xzIGFyZSBleHBvc2VkIHRvIEFwcEtpdCdzIG93biBhZ2VudHMgdGhyb3VnaCB0aGUgcGx1Z2luJ3NcbiAqIGBUb29sUHJvdmlkZXJgIChzZWUgYHBsdWdpbi50c2ApOyB0aGlzIG1vZHVsZSBpcyB0aGUgTWFzdHJhIGhhbGYuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHNlYXJjaCBhcyBzZWFyY2hDb250cmFjdCwgdHlwZSBVcHNlcnRSZXN1bHQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtc2VhcmNoXCI7XG5pbXBvcnQgeyBjcmVhdGVUb29sIH0gZnJvbSBcIkBtYXN0cmEvY29yZS90b29sc1wiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IHRvQ3JlYXRlSW5kZXhPcHRpb25zIH0gZnJvbSBcIi4vaW5kZXgtdG9vbHMudHNcIjtcbmltcG9ydCB7IHRvRG9jdW1lbnRBcnJheSB9IGZyb20gXCIuL3F1ZXJ5LnRzXCI7XG5pbXBvcnQgeyBnZXRTZWFyY2hSdW50aW1lIH0gZnJvbSBcIi4vcnVudGltZS50c1wiO1xuaW1wb3J0IHtcbiAgQUREX0RPQ1VNRU5UU19UT09MX0RFU0NSSVBUSU9OLFxuICBDUkVBVEVfSU5ERVhfVE9PTF9ERVNDUklQVElPTixcbiAgU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sXG4gIFNZTkNfSU5ERVhfVE9PTF9ERVNDUklQVElPTixcbiAgVU5JVkVSU0FMX1NFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICBjcmVhdGVJbmRleFRvb2xTY2hlbWEsXG4gIGluZGV4SW5mb1NjaGVtYSxcbiAgc2VhcmNoUmVzdWx0U2NoZW1hLFxuICBzZWFyY2hUb29sU2NoZW1hLFxuICBzeW5jSW5kZXhUb29sU2NoZW1hLFxuICB1bml2ZXJzYWxTZWFyY2hUb29sU2NoZW1hLFxufSBmcm9tIFwiLi9zY2hlbWEudHNcIjtcblxuLyoqIENvbW1vbiBvcHRpb24gYWNjZXB0ZWQgYnkgZXZlcnkgdG9vbCBmYWN0b3J5OiBvdmVycmlkZSB0aGUgdG9vbCBpZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoVG9vbE9wdGlvbnMge1xuICAvKiogT3ZlcnJpZGUgdGhlIHRvb2wgaWQgKGRlZmF1bHRzIHBlciB0b29sKS4gKi9cbiAgaWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGBzZWFyY2hgIHRvb2wuIFNwcmVhZCBpdCBpbnRvIGFueSBhZ2VudCB0aGF0IHNob3VsZCBiZSBhYmxlIHRvIGxvb2tcbiAqIHRoaW5ncyB1cCBpbiBhbiBpbmRleC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHNlYXJjaFRvb2wgfSBmcm9tIFwiQGRieC10b29scy9zZWFyY2hcIjtcbiAqIGltcG9ydCB7IGNyZWF0ZUFnZW50IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYVwiO1xuICpcbiAqIGNvbnN0IHN1cHBvcnQgPSBjcmVhdGVBZ2VudCh7XG4gKiAgIGluc3RydWN0aW9uczogXCJBbnN3ZXIgZnJvbSB0aGUgZG9jcy4gVXNlIGBzZWFyY2hgIHRvIGZpbmQgdGhlbS5cIixcbiAqICAgdG9vbHM6ICgpID0+ICh7IHNlYXJjaDogc2VhcmNoVG9vbCgpIH0pLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlYXJjaFRvb2wob3B0aW9uczogU2VhcmNoVG9vbE9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gY3JlYXRlVG9vbCh7XG4gICAgaWQ6IG9wdGlvbnMuaWQgPz8gXCJzZWFyY2hcIixcbiAgICBkZXNjcmlwdGlvbjogU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sXG4gICAgaW5wdXRTY2hlbWE6IHNlYXJjaFRvb2xTY2hlbWEsXG4gICAgb3V0cHV0U2NoZW1hOiBzZWFyY2hSZXN1bHRTY2hlbWEsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gc2VhcmNoVG9vbFNjaGVtYS5wYXJzZShpbnB1dCk7XG4gICAgICBjb25zdCB7IGNsaWVudCB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgICAgcmV0dXJuIGNsaWVudC5zZWFyY2gocmVxdWVzdC5xdWVyeSwge1xuICAgICAgICAuLi4ocmVxdWVzdC5pbmRleCA/IHsgaW5kZXg6IHJlcXVlc3QuaW5kZXggfSA6IHt9KSxcbiAgICAgICAgLi4uKHJlcXVlc3QubGltaXQgPyB7IGxpbWl0OiByZXF1ZXN0LmxpbWl0IH0gOiB7fSksXG4gICAgICAgIC4uLihyZXF1ZXN0Lm1vZGUgPyB7IG1vZGU6IHJlcXVlc3QubW9kZSB9IDoge30pLFxuICAgICAgICAuLi4ocmVxdWVzdC5jb2x1bW5zID8geyBjb2x1bW5zOiByZXF1ZXN0LmNvbHVtbnMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHJlcXVlc3QuZmlsdGVyID8geyBmaWx0ZXI6IHJlcXVlc3QuZmlsdGVyIH0gOiB7fSksXG4gICAgICAgIC4uLihyZXF1ZXN0LnNjb3JlVGhyZXNob2xkICE9PSB1bmRlZmluZWQgPyB7IHNjb3JlVGhyZXNob2xkOiByZXF1ZXN0LnNjb3JlVGhyZXNob2xkIH0gOiB7fSksXG4gICAgICAgIC4uLihjb250ZXh0Py5hYm9ydFNpZ25hbCA/IHsgc2lnbmFsOiBjb250ZXh0LmFib3J0U2lnbmFsIH0gOiB7fSksXG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqIEJ1aWxkIHRoZSBgdW5pdmVyc2FsX3NlYXJjaGAgdG9vbCAoZmVkZXJhdGVkIHNlYXJjaCBhY3Jvc3MgZXZlcnkgaW5kZXgpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaXZlcnNhbFNlYXJjaFRvb2wob3B0aW9uczogU2VhcmNoVG9vbE9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gY3JlYXRlVG9vbCh7XG4gICAgaWQ6IG9wdGlvbnMuaWQgPz8gXCJ1bml2ZXJzYWxfc2VhcmNoXCIsXG4gICAgZGVzY3JpcHRpb246IFVOSVZFUlNBTF9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTixcbiAgICBpbnB1dFNjaGVtYTogdW5pdmVyc2FsU2VhcmNoVG9vbFNjaGVtYSxcbiAgICBvdXRwdXRTY2hlbWE6IHNlYXJjaFJlc3VsdFNjaGVtYSxcbiAgICBleGVjdXRlOiBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB1bml2ZXJzYWxTZWFyY2hUb29sU2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgICAgIGNvbnN0IHsgY2xpZW50IH0gPSBnZXRTZWFyY2hSdW50aW1lKCk7XG4gICAgICByZXR1cm4gY2xpZW50LnVuaXZlcnNhbFNlYXJjaChyZXF1ZXN0LnF1ZXJ5LCB7XG4gICAgICAgIC4uLihyZXF1ZXN0LmluZGV4ZXMgPyB7IGluZGV4ZXM6IHJlcXVlc3QuaW5kZXhlcyB9IDoge30pLFxuICAgICAgICAuLi4ocmVxdWVzdC5saW1pdCA/IHsgbGltaXQ6IHJlcXVlc3QubGltaXQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHJlcXVlc3QubW9kZSA/IHsgbW9kZTogcmVxdWVzdC5tb2RlIH0gOiB7fSksXG4gICAgICAgIC4uLihjb250ZXh0Py5hYm9ydFNpZ25hbCA/IHsgc2lnbmFsOiBjb250ZXh0LmFib3J0U2lnbmFsIH0gOiB7fSksXG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgb3B0LWluIGBhZGRfZG9jdW1lbnRzYCB0b29sICh3cml0ZSBpbnRvIGEgZGlyZWN0LWFjY2VzcyBpbmRleCkuXG4gKiBPbmx5IGluc3RhbGwgaXQgd2hlbiB0aGUgcGx1Z2luJ3Mgd3JpdGUgc3VyZmFjZSBpcyBlbmFibGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRG9jdW1lbnRzVG9vbChvcHRpb25zOiBTZWFyY2hUb29sT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGlucHV0U2NoZW1hID0gc2VhcmNoQ29udHJhY3Quc2VhcmNoRG9jdW1lbnRTY2hlbWFcbiAgICAuYXJyYXkoKVxuICAgIC5kZXNjcmliZShcIkRvY3VtZW50cyB0byBhZGQgb3IgdXBkYXRlLiBFYWNoIG11c3QgaW5jbHVkZSB0aGUgaW5kZXggcHJpbWFyeSBrZXkuXCIpO1xuICByZXR1cm4gY3JlYXRlVG9vbCh7XG4gICAgaWQ6IG9wdGlvbnMuaWQgPz8gXCJhZGRfZG9jdW1lbnRzXCIsXG4gICAgZGVzY3JpcHRpb246IEFERF9ET0NVTUVOVFNfVE9PTF9ERVNDUklQVElPTixcbiAgICBpbnB1dFNjaGVtYTogc2VhcmNoQ29udHJhY3Quc2VhcmNoUmVxdWVzdFNjaGVtYVxuICAgICAgLnBpY2soeyBpbmRleDogdHJ1ZSB9KVxuICAgICAgLmV4dGVuZCh7IGRvY3VtZW50czogaW5wdXRTY2hlbWEgfSksXG4gICAgb3V0cHV0U2NoZW1hOiBzZWFyY2hDb250cmFjdC51cHNlcnRSZXN1bHRTY2hlbWEsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBjb250ZXh0KTogUHJvbWlzZTxVcHNlcnRSZXN1bHQ+ID0+IHtcbiAgICAgIGNvbnN0IHsgY2xpZW50LCBjb25maWcgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICAgIGNvbnN0IHJlY29yZCA9IGlucHV0IGFzIHsgaW5kZXg/OiBzdHJpbmc7IGRvY3VtZW50czogdW5rbm93biB9O1xuICAgICAgY29uc3QgZG9jdW1lbnRzID0gdG9Eb2N1bWVudEFycmF5KHJlY29yZC5kb2N1bWVudHMpO1xuICAgICAgY29uc3QgaW5kZXggPSByZWNvcmQuaW5kZXggPz8gY29uZmlnLmRlZmF1bHRJbmRleCA/PyBcIlwiO1xuICAgICAgcmV0dXJuIGNsaWVudC5hZGREb2N1bWVudHMoaW5kZXgsIGRvY3VtZW50cywgY29udGV4dD8uYWJvcnRTaWduYWwpO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBvcHQtaW4gYGNyZWF0ZV9pbmRleGAgdG9vbCAocHJvdmlzaW9uIGEgVmVjdG9yIFNlYXJjaCBpbmRleCkuXG4gKiBPbmx5IGluc3RhbGwgaXQgd2hlbiB0aGUgcGx1Z2luJ3Mgd3JpdGUgc3VyZmFjZSBpcyBlbmFibGVkLiBEZWxlZ2F0ZXMgdG9cbiAqIHtAbGluayBTZWFyY2hDbGllbnQuY3JlYXRlSW5kZXh9LCBpbmZlcnJpbmcgdGhlIGVuZHBvaW50LCBlbWJlZGRpbmcgbW9kZWwsXG4gKiBrZXksIGFuZCBjb2x1bW5zIGZyb20gdGhlIHJlcXVlc3QgKyBwbHVnaW4gY29uZmlnLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5kZXhUb29sKG9wdGlvbnM6IFNlYXJjaFRvb2xPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIGNyZWF0ZVRvb2woe1xuICAgIGlkOiBvcHRpb25zLmlkID8/IFwiY3JlYXRlX2luZGV4XCIsXG4gICAgZGVzY3JpcHRpb246IENSRUFURV9JTkRFWF9UT09MX0RFU0NSSVBUSU9OLFxuICAgIGlucHV0U2NoZW1hOiBjcmVhdGVJbmRleFRvb2xTY2hlbWEsXG4gICAgb3V0cHV0U2NoZW1hOiBpbmRleEluZm9TY2hlbWEsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gY3JlYXRlSW5kZXhUb29sU2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgICAgIGNvbnN0IHsgY2xpZW50IH0gPSBnZXRTZWFyY2hSdW50aW1lKCk7XG4gICAgICByZXR1cm4gY2xpZW50LmNyZWF0ZUluZGV4KHJlcXVlc3QubmFtZSwgdG9DcmVhdGVJbmRleE9wdGlvbnMocmVxdWVzdCwgY29udGV4dD8uYWJvcnRTaWduYWwpKTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqIE91dHB1dCBzY2hlbWEgZm9yIHRoZSBgc3luY19pbmRleGAgdG9vbC4gKi9cbmNvbnN0IHN5bmNJbmRleFJlc3VsdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaW5kZXg6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgaW5kZXggdGhhdCB3YXMgc3luY2VkLlwiKSxcbiAgc3luY2VkOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlRydWUgb25jZSB0aGUgc3luYyB3YXMgdHJpZ2dlcmVkLlwiKSxcbn0pO1xuXG4vKipcbiAqIEJ1aWxkIHRoZSBvcHQtaW4gYHN5bmNfaW5kZXhgIHRvb2wgKHJlZnJlc2ggYSBEZWx0YSBTeW5jIGluZGV4IGZyb20gaXRzXG4gKiBzb3VyY2UgdGFibGUpLiBPbmx5IGluc3RhbGwgaXQgd2hlbiB0aGUgcGx1Z2luJ3Mgd3JpdGUgc3VyZmFjZSBpcyBlbmFibGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3luY0luZGV4VG9vbChvcHRpb25zOiBTZWFyY2hUb29sT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBjcmVhdGVUb29sKHtcbiAgICBpZDogb3B0aW9ucy5pZCA/PyBcInN5bmNfaW5kZXhcIixcbiAgICBkZXNjcmlwdGlvbjogU1lOQ19JTkRFWF9UT09MX0RFU0NSSVBUSU9OLFxuICAgIGlucHV0U2NoZW1hOiBzeW5jSW5kZXhUb29sU2NoZW1hLFxuICAgIG91dHB1dFNjaGVtYTogc3luY0luZGV4UmVzdWx0U2NoZW1hLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHN5bmNJbmRleFRvb2xTY2hlbWEucGFyc2UoaW5wdXQpO1xuICAgICAgY29uc3QgeyBjbGllbnQsIGNvbmZpZyB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgICAgY29uc3QgaW5kZXggPSByZXF1ZXN0LmluZGV4ID8/IGNvbmZpZy5kZWZhdWx0SW5kZXggPz8gXCJcIjtcbiAgICAgIGF3YWl0IGNsaWVudC5zeW5jSW5kZXgoaW5kZXgsIGNvbnRleHQ/LmFib3J0U2lnbmFsKTtcbiAgICAgIHJldHVybiB7IGluZGV4LCBzeW5jZWQ6IHRydWUgfTtcbiAgICB9LFxuICB9KTtcbn1cbiJdfQ==
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFFLE1BQU0sSUFBSSxZQUFZLEVBQXFCLE1BQU0sMEJBQTBCLENBQUM7QUFDckYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUNMLDhCQUE4QixFQUM5Qiw2QkFBNkIsRUFDN0IsdUJBQXVCLEVBQ3ZCLDJCQUEyQixFQUMzQixpQ0FBaUMsRUFDakMscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQix5QkFBeUIsR0FDMUIsTUFBTSxhQUFhLENBQUM7QUFRckI7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLFVBQTZCLEVBQUU7SUFDeEQsT0FBTyxVQUFVLENBQUM7UUFDaEIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksUUFBUTtRQUMxQixXQUFXLEVBQUUsdUJBQXVCO1FBQ3BDLFdBQVcsRUFBRSxnQkFBZ0I7UUFDN0IsWUFBWSxFQUFFLGtCQUFrQjtRQUNoQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNoQyxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixF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LE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNqQyxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGBzZWFyY2hgLCBgdW5pdmVyc2FsX3NlYXJjaGAsIGFuZCAob3B0LWluKSBgYWRkX2RvY3VtZW50c2AsXG4gKiBgY3JlYXRlX2luZGV4YCwgYW5kIGBzeW5jX2luZGV4YCBNYXN0cmEgdG9vbHMuXG4gKlxuICogQWxsIHRocmVlIHJlYWQgdGhlIHNoYXJlZCBydW50aW1lIHByaW1lZCBieSB0aGUgcGx1Z2luLCBzbyBhIHRvb2wgc3ByZWFkXG4gKiBpbnRvIGFuIGFnZW50IHVzZXMgdGhlIGRlcGxveW1lbnQncyBkZWZhdWx0IGluZGV4LCBjb2x1bW5zLCBwYWdlIHNpemUsIGFuZFxuICogbW9kZSB3aXRob3V0IGFueSBwZXItdG9vbCB3aXJpbmcuIFRoZXkgcnVuIHVuZGVyIHRoZSBjYWxsZXIncyBPQk8gc2NvcGUgKHRoZVxuICogY2xpZW50IHJlc29sdmVzIHRoZSBleGVjdXRpb24gY29udGV4dCdzIHdvcmtzcGFjZSBjbGllbnQpLCBzbyBzZWFyY2ggcnVucyBhc1xuICogdGhlIHJlcXVlc3RpbmcgdXNlciBhbmQgVW5pdHkgQ2F0YWxvZyBBQ0xzIGFwcGx5LlxuICpcbiAqIFRoZSBzYW1lIHRvb2xzIGFyZSBleHBvc2VkIHRvIEFwcEtpdCdzIG93biBhZ2VudHMgdGhyb3VnaCB0aGUgcGx1Z2luJ3NcbiAqIGBUb29sUHJvdmlkZXJgIChzZWUgYHBsdWdpbi50c2ApOyB0aGlzIG1vZHVsZSBpcyB0aGUgTWFzdHJhIGhhbGYuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHNlYXJjaCBhcyBzaGFyZWRTZWFyY2gsIHR5cGUgVXBzZXJ0UmVzdWx0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLXNlYXJjaFwiO1xuaW1wb3J0IHsgY3JlYXRlVG9vbCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvdG9vbHNcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyB0b0NyZWF0ZUluZGV4T3B0aW9ucyB9IGZyb20gXCIuL2luZGV4LXRvb2xzLnRzXCI7XG5pbXBvcnQgeyB0b0RvY3VtZW50QXJyYXkgfSBmcm9tIFwiLi9xdWVyeS50c1wiO1xuaW1wb3J0IHsgZ2V0U2VhcmNoUnVudGltZSB9IGZyb20gXCIuL3J1bnRpbWUudHNcIjtcbmltcG9ydCB7XG4gIEFERF9ET0NVTUVOVFNfVE9PTF9ERVNDUklQVElPTixcbiAgQ1JFQVRFX0lOREVYX1RPT0xfREVTQ1JJUFRJT04sXG4gIFNFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICBTWU5DX0lOREVYX1RPT0xfREVTQ1JJUFRJT04sXG4gIFVOSVZFUlNBTF9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTixcbiAgY3JlYXRlSW5kZXhUb29sU2NoZW1hLFxuICBpbmRleEluZm9TY2hlbWEsXG4gIHNlYXJjaFJlc3VsdFNjaGVtYSxcbiAgc2VhcmNoVG9vbFNjaGVtYSxcbiAgc3luY0luZGV4VG9vbFNjaGVtYSxcbiAgdW5pdmVyc2FsU2VhcmNoVG9vbFNjaGVtYSxcbn0gZnJvbSBcIi4vc2NoZW1hLnRzXCI7XG5cbi8qKiBDb21tb24gb3B0aW9uIGFjY2VwdGVkIGJ5IGV2ZXJ5IHRvb2wgZmFjdG9yeTogb3ZlcnJpZGUgdGhlIHRvb2wgaWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFRvb2xPcHRpb25zIHtcbiAgLyoqIE92ZXJyaWRlIHRoZSB0b29sIGlkIChkZWZhdWx0cyBwZXIgdG9vbCkuICovXG4gIGlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBgc2VhcmNoYCB0b29sLiBTcHJlYWQgaXQgaW50byBhbnkgYWdlbnQgdGhhdCBzaG91bGQgYmUgYWJsZSB0byBsb29rXG4gKiB0aGluZ3MgdXAgaW4gYW4gaW5kZXguXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBzZWFyY2hUb29sIH0gZnJvbSBcIkBkYngtdG9vbHMvc2VhcmNoXCI7XG4gKiBpbXBvcnQgeyBjcmVhdGVBZ2VudCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFcIjtcbiAqXG4gKiBjb25zdCBzdXBwb3J0ID0gY3JlYXRlQWdlbnQoe1xuICogICBpbnN0cnVjdGlvbnM6IFwiQW5zd2VyIGZyb20gdGhlIGRvY3MuIFVzZSBgc2VhcmNoYCB0byBmaW5kIHRoZW0uXCIsXG4gKiAgIHRvb2xzOiAoKSA9PiAoeyBzZWFyY2g6IHNlYXJjaFRvb2woKSB9KSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWFyY2hUb29sKG9wdGlvbnM6IFNlYXJjaFRvb2xPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIGNyZWF0ZVRvb2woe1xuICAgIGlkOiBvcHRpb25zLmlkID8/IFwic2VhcmNoXCIsXG4gICAgZGVzY3JpcHRpb246IFNFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICAgIGlucHV0U2NoZW1hOiBzZWFyY2hUb29sU2NoZW1hLFxuICAgIG91dHB1dFNjaGVtYTogc2VhcmNoUmVzdWx0U2NoZW1hLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHNlYXJjaFRvb2xTY2hlbWEucGFyc2UoaW5wdXQpO1xuICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICAgIHJldHVybiBjbGllbnQuc2VhcmNoKHJlcXVlc3QucXVlcnksIHtcbiAgICAgICAgLi4uKHJlcXVlc3QuaW5kZXggPyB7IGluZGV4OiByZXF1ZXN0LmluZGV4IH0gOiB7fSksXG4gICAgICAgIC4uLihyZXF1ZXN0LmxpbWl0ID8geyBsaW1pdDogcmVxdWVzdC5saW1pdCB9IDoge30pLFxuICAgICAgICAuLi4ocmVxdWVzdC5tb2RlID8geyBtb2RlOiByZXF1ZXN0Lm1vZGUgfSA6IHt9KSxcbiAgICAgICAgLi4uKHJlcXVlc3QuY29sdW1ucyA/IHsgY29sdW1uczogcmVxdWVzdC5jb2x1bW5zIH0gOiB7fSksXG4gICAgICAgIC4uLihyZXF1ZXN0LmZpbHRlciA/IHsgZmlsdGVyOiByZXF1ZXN0LmZpbHRlciB9IDoge30pLFxuICAgICAgICAuLi4ocmVxdWVzdC5zY29yZVRocmVzaG9sZCAhPT0gdW5kZWZpbmVkID8geyBzY29yZVRocmVzaG9sZDogcmVxdWVzdC5zY29yZVRocmVzaG9sZCB9IDoge30pLFxuICAgICAgICAuLi4oY29udGV4dD8uYWJvcnRTaWduYWwgPyB7IHNpZ25hbDogY29udGV4dC5hYm9ydFNpZ25hbCB9IDoge30pLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKiBCdWlsZCB0aGUgYHVuaXZlcnNhbF9zZWFyY2hgIHRvb2wgKGZlZGVyYXRlZCBzZWFyY2ggYWNyb3NzIGV2ZXJ5IGluZGV4KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bml2ZXJzYWxTZWFyY2hUb29sKG9wdGlvbnM6IFNlYXJjaFRvb2xPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIGNyZWF0ZVRvb2woe1xuICAgIGlkOiBvcHRpb25zLmlkID8/IFwidW5pdmVyc2FsX3NlYXJjaFwiLFxuICAgIGRlc2NyaXB0aW9uOiBVTklWRVJTQUxfU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sXG4gICAgaW5wdXRTY2hlbWE6IHVuaXZlcnNhbFNlYXJjaFRvb2xTY2hlbWEsXG4gICAgb3V0cHV0U2NoZW1hOiBzZWFyY2hSZXN1bHRTY2hlbWEsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gdW5pdmVyc2FsU2VhcmNoVG9vbFNjaGVtYS5wYXJzZShpbnB1dCk7XG4gICAgICBjb25zdCB7IGNsaWVudCB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgICAgcmV0dXJuIGNsaWVudC51bml2ZXJzYWxTZWFyY2gocmVxdWVzdC5xdWVyeSwge1xuICAgICAgICAuLi4ocmVxdWVzdC5pbmRleGVzID8geyBpbmRleGVzOiByZXF1ZXN0LmluZGV4ZXMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHJlcXVlc3QubGltaXQgPyB7IGxpbWl0OiByZXF1ZXN0LmxpbWl0IH0gOiB7fSksXG4gICAgICAgIC4uLihyZXF1ZXN0Lm1vZGUgPyB7IG1vZGU6IHJlcXVlc3QubW9kZSB9IDoge30pLFxuICAgICAgICAuLi4oY29udGV4dD8uYWJvcnRTaWduYWwgPyB7IHNpZ25hbDogY29udGV4dC5hYm9ydFNpZ25hbCB9IDoge30pLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIG9wdC1pbiBgYWRkX2RvY3VtZW50c2AgdG9vbCAod3JpdGUgaW50byBhIGRpcmVjdC1hY2Nlc3MgaW5kZXgpLlxuICogT25seSBpbnN0YWxsIGl0IHdoZW4gdGhlIHBsdWdpbidzIHdyaXRlIHN1cmZhY2UgaXMgZW5hYmxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERvY3VtZW50c1Rvb2wob3B0aW9uczogU2VhcmNoVG9vbE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBpbnB1dFNjaGVtYSA9IHNoYXJlZFNlYXJjaC5zZWFyY2hEb2N1bWVudFNjaGVtYVxuICAgIC5hcnJheSgpXG4gICAgLmRlc2NyaWJlKFwiRG9jdW1lbnRzIHRvIGFkZCBvciB1cGRhdGUuIEVhY2ggbXVzdCBpbmNsdWRlIHRoZSBpbmRleCBwcmltYXJ5IGtleS5cIik7XG4gIHJldHVybiBjcmVhdGVUb29sKHtcbiAgICBpZDogb3B0aW9ucy5pZCA/PyBcImFkZF9kb2N1bWVudHNcIixcbiAgICBkZXNjcmlwdGlvbjogQUREX0RPQ1VNRU5UU19UT09MX0RFU0NSSVBUSU9OLFxuICAgIGlucHV0U2NoZW1hOiBzaGFyZWRTZWFyY2guc2VhcmNoUmVxdWVzdFNjaGVtYVxuICAgICAgLnBpY2soeyBpbmRleDogdHJ1ZSB9KVxuICAgICAgLmV4dGVuZCh7IGRvY3VtZW50czogaW5wdXRTY2hlbWEgfSksXG4gICAgb3V0cHV0U2NoZW1hOiBzaGFyZWRTZWFyY2gudXBzZXJ0UmVzdWx0U2NoZW1hLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCwgY29udGV4dCk6IFByb21pc2U8VXBzZXJ0UmVzdWx0PiA9PiB7XG4gICAgICBjb25zdCB7IGNsaWVudCwgY29uZmlnIH0gPSBnZXRTZWFyY2hSdW50aW1lKCk7XG4gICAgICBjb25zdCByZWNvcmQgPSBpbnB1dCBhcyB7IGluZGV4Pzogc3RyaW5nOyBkb2N1bWVudHM6IHVua25vd24gfTtcbiAgICAgIGNvbnN0IGRvY3VtZW50cyA9IHRvRG9jdW1lbnRBcnJheShyZWNvcmQuZG9jdW1lbnRzKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gcmVjb3JkLmluZGV4ID8/IGNvbmZpZy5kZWZhdWx0SW5kZXggPz8gXCJcIjtcbiAgICAgIHJldHVybiBjbGllbnQuYWRkRG9jdW1lbnRzKGluZGV4LCBkb2N1bWVudHMsIGNvbnRleHQ/LmFib3J0U2lnbmFsKTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgb3B0LWluIGBjcmVhdGVfaW5kZXhgIHRvb2wgKHByb3Zpc2lvbiBhIFZlY3RvciBTZWFyY2ggaW5kZXgpLlxuICogT25seSBpbnN0YWxsIGl0IHdoZW4gdGhlIHBsdWdpbidzIHdyaXRlIHN1cmZhY2UgaXMgZW5hYmxlZC4gRGVsZWdhdGVzIHRvXG4gKiB7QGxpbmsgU2VhcmNoQ2xpZW50LmNyZWF0ZUluZGV4fSwgaW5mZXJyaW5nIHRoZSBlbmRwb2ludCwgZW1iZWRkaW5nIG1vZGVsLFxuICoga2V5LCBhbmQgY29sdW1ucyBmcm9tIHRoZSByZXF1ZXN0ICsgcGx1Z2luIGNvbmZpZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluZGV4VG9vbChvcHRpb25zOiBTZWFyY2hUb29sT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBjcmVhdGVUb29sKHtcbiAgICBpZDogb3B0aW9ucy5pZCA/PyBcImNyZWF0ZV9pbmRleFwiLFxuICAgIGRlc2NyaXB0aW9uOiBDUkVBVEVfSU5ERVhfVE9PTF9ERVNDUklQVElPTixcbiAgICBpbnB1dFNjaGVtYTogY3JlYXRlSW5kZXhUb29sU2NoZW1hLFxuICAgIG91dHB1dFNjaGVtYTogaW5kZXhJbmZvU2NoZW1hLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IGNyZWF0ZUluZGV4VG9vbFNjaGVtYS5wYXJzZShpbnB1dCk7XG4gICAgICBjb25zdCB7IGNsaWVudCB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgICAgcmV0dXJuIGNsaWVudC5jcmVhdGVJbmRleChyZXF1ZXN0Lm5hbWUsIHRvQ3JlYXRlSW5kZXhPcHRpb25zKHJlcXVlc3QsIGNvbnRleHQ/LmFib3J0U2lnbmFsKSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKiBPdXRwdXQgc2NoZW1hIGZvciB0aGUgYHN5bmNfaW5kZXhgIHRvb2wuICovXG5jb25zdCBzeW5jSW5kZXhSZXN1bHRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGluZGV4OiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIGluZGV4IHRoYXQgd2FzIHN5bmNlZC5cIiksXG4gIHN5bmNlZDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJUcnVlIG9uY2UgdGhlIHN5bmMgd2FzIHRyaWdnZXJlZC5cIiksXG59KTtcblxuLyoqXG4gKiBCdWlsZCB0aGUgb3B0LWluIGBzeW5jX2luZGV4YCB0b29sIChyZWZyZXNoIGEgRGVsdGEgU3luYyBpbmRleCBmcm9tIGl0c1xuICogc291cmNlIHRhYmxlKS4gT25seSBpbnN0YWxsIGl0IHdoZW4gdGhlIHBsdWdpbidzIHdyaXRlIHN1cmZhY2UgaXMgZW5hYmxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNJbmRleFRvb2wob3B0aW9uczogU2VhcmNoVG9vbE9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gY3JlYXRlVG9vbCh7XG4gICAgaWQ6IG9wdGlvbnMuaWQgPz8gXCJzeW5jX2luZGV4XCIsXG4gICAgZGVzY3JpcHRpb246IFNZTkNfSU5ERVhfVE9PTF9ERVNDUklQVElPTixcbiAgICBpbnB1dFNjaGVtYTogc3luY0luZGV4VG9vbFNjaGVtYSxcbiAgICBvdXRwdXRTY2hlbWE6IHN5bmNJbmRleFJlc3VsdFNjaGVtYSxcbiAgICBleGVjdXRlOiBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBzeW5jSW5kZXhUb29sU2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgICAgIGNvbnN0IHsgY2xpZW50LCBjb25maWcgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gcmVxdWVzdC5pbmRleCA/PyBjb25maWcuZGVmYXVsdEluZGV4ID8/IFwiXCI7XG4gICAgICBhd2FpdCBjbGllbnQuc3luY0luZGV4KGluZGV4LCBjb250ZXh0Py5hYm9ydFNpZ25hbCk7XG4gICAgICByZXR1cm4geyBpbmRleCwgc3luY2VkOiB0cnVlIH07XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@databricks/appkit": "^0.43.0",
|
|
30
30
|
"@databricks/sdk-experimental": "^0.17.0",
|
|
31
|
-
"@dbx-tools/appkit": "0.6.
|
|
32
|
-
"@dbx-tools/core": "0.6.
|
|
33
|
-
"@dbx-tools/model": "0.6.
|
|
34
|
-
"@dbx-tools/shared-core": "0.6.
|
|
35
|
-
"@dbx-tools/shared-model": "0.6.
|
|
36
|
-
"@dbx-tools/shared-search": "0.6.
|
|
31
|
+
"@dbx-tools/appkit": "0.6.89",
|
|
32
|
+
"@dbx-tools/core": "0.6.89",
|
|
33
|
+
"@dbx-tools/model": "0.6.89",
|
|
34
|
+
"@dbx-tools/shared-core": "0.6.89",
|
|
35
|
+
"@dbx-tools/shared-model": "0.6.89",
|
|
36
|
+
"@dbx-tools/shared-search": "0.6.89",
|
|
37
37
|
"@mastra/core": "^1.47.0",
|
|
38
38
|
"pg": "^8.22.0",
|
|
39
39
|
"zod": "4.3.6"
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"./package.json": "./package.json"
|
|
53
53
|
}
|
|
54
54
|
},
|
|
55
|
-
"version": "0.6.
|
|
55
|
+
"version": "0.6.89",
|
|
56
56
|
"types": "./lib/index.d.ts",
|
|
57
57
|
"type": "module",
|
|
58
58
|
"exports": {
|
package/src/client.ts
CHANGED
|
@@ -32,7 +32,7 @@ import { ExecutionError, getExecutionContext } from "@databricks/appkit";
|
|
|
32
32
|
import { Context } from "@databricks/sdk-experimental";
|
|
33
33
|
import { appkit, databricks } from "@dbx-tools/appkit";
|
|
34
34
|
import { invoke, resolve as modelResolve, serving } from "@dbx-tools/model";
|
|
35
|
-
import { async as
|
|
35
|
+
import { async as sharedAsync, json, log, string } from "@dbx-tools/shared-core";
|
|
36
36
|
import { ModelClass } from "@dbx-tools/shared-model";
|
|
37
37
|
import type {
|
|
38
38
|
SearchDocument,
|
|
@@ -734,7 +734,7 @@ export class SearchClient {
|
|
|
734
734
|
context: { operation: "provision" },
|
|
735
735
|
});
|
|
736
736
|
}
|
|
737
|
-
await
|
|
737
|
+
await sharedAsync.sleep(5000, signal);
|
|
738
738
|
info = await this.getIndex(name, signal);
|
|
739
739
|
}
|
|
740
740
|
return info;
|