@forestadmin/ai-proxy 1.1.0 → 1.3.0
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/dist/index.d.ts +1 -0
- package/dist/index.js +2 -1
- package/dist/mcp-client.d.ts +1 -0
- package/dist/mcp-client.js +1 -1
- package/dist/oauth-token-injector.d.ts +25 -0
- package/dist/oauth-token-injector.js +63 -0
- package/dist/provider-dispatcher.d.ts +1 -1
- package/dist/provider-dispatcher.js +8 -11
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export * from './provider-dispatcher';
|
|
|
3
3
|
export * from './remote-tools';
|
|
4
4
|
export * from './router';
|
|
5
5
|
export * from './mcp-client';
|
|
6
|
+
export * from './oauth-token-injector';
|
|
6
7
|
export * from './types/errors';
|
|
7
8
|
export declare function validMcpConfigurationOrThrow(mcpConfig: McpConfiguration): Promise<true>;
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -23,8 +23,9 @@ __exportStar(require("./provider-dispatcher"), exports);
|
|
|
23
23
|
__exportStar(require("./remote-tools"), exports);
|
|
24
24
|
__exportStar(require("./router"), exports);
|
|
25
25
|
__exportStar(require("./mcp-client"), exports);
|
|
26
|
+
__exportStar(require("./oauth-token-injector"), exports);
|
|
26
27
|
__exportStar(require("./types/errors"), exports);
|
|
27
28
|
function validMcpConfigurationOrThrow(mcpConfig) {
|
|
28
29
|
return mcp_config_checker_1.default.check(mcpConfig);
|
|
29
30
|
}
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVlBLG9FQUVDO0FBWkQsb0ZBQTBEO0FBRTFELHdEQUFzQztBQUN0QyxpREFBK0I7QUFDL0IsMkNBQXlCO0FBQ3pCLCtDQUE2QjtBQUM3Qix5REFBdUM7QUFFdkMsaURBQStCO0FBRS9CLFNBQWdCLDRCQUE0QixDQUFDLFNBQTJCO0lBQ3RFLE9BQU8sNEJBQWdCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNDLENBQUMifQ==
|
package/dist/mcp-client.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Logger } from '@forestadmin/datasource-toolkit';
|
|
2
2
|
import { MultiServerMCPClient } from '@langchain/mcp-adapters';
|
|
3
3
|
import McpServerRemoteTool from './types/mcp-server-remote-tool';
|
|
4
|
+
export type McpServerConfig = MultiServerMCPClient['config']['mcpServers'][string];
|
|
4
5
|
export type McpConfiguration = {
|
|
5
6
|
configs: MultiServerMCPClient['config']['mcpServers'];
|
|
6
7
|
} & Omit<MultiServerMCPClient['config'], 'mcpServers'>;
|
package/dist/mcp-client.js
CHANGED
|
@@ -76,4 +76,4 @@ class McpClient {
|
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
exports.default = McpClient;
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWNwLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tY3AtY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsMERBQStEO0FBRS9ELDJDQUFvRDtBQUNwRCw0RkFBaUU7QUFRakUsTUFBcUIsU0FBUztJQU01QixZQUFZLE1BQXdCLEVBQUUsTUFBZTtRQUxwQyxlQUFVLEdBQXlDLEVBQUUsQ0FBQztRQUc5RCxVQUFLLEdBQTBCLEVBQUUsQ0FBQztRQUd6QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQiw2REFBNkQ7UUFDN0Qsc0RBQXNEO1FBQ3RELE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUU7WUFDOUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLG1DQUFvQixDQUFDO2dCQUMvQyxVQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksRUFBRTtnQkFDcEMsR0FBRyxNQUFNO2FBQ1YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVM7UUFDYixNQUFNLE1BQU0sR0FBNEMsRUFBRSxDQUFDO1FBRTNELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDM0QsSUFBSSxDQUFDO2dCQUNILE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQzdCLElB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
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { McpConfiguration, McpServerConfig } from './mcp-client';
|
|
2
|
+
export declare const MCP_OAUTH_TOKENS_HEADER = "x-mcp-oauth-tokens";
|
|
3
|
+
/**
|
|
4
|
+
* Extracts and parses OAuth tokens from request headers.
|
|
5
|
+
* Returns undefined if the header is not present.
|
|
6
|
+
* Throws AIBadRequestError if the header contains invalid JSON.
|
|
7
|
+
*/
|
|
8
|
+
export declare function extractMcpOauthTokensFromHeaders(headers: Record<string, string | string[] | undefined>): Record<string, string> | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Injects the OAuth token as Authorization header into HTTP-based transport configurations.
|
|
11
|
+
* For stdio transports, returns the config unchanged.
|
|
12
|
+
*/
|
|
13
|
+
export declare function injectOauthToken({ serverConfig, token, }: {
|
|
14
|
+
serverConfig: McpServerConfig;
|
|
15
|
+
token?: string;
|
|
16
|
+
}): McpServerConfig;
|
|
17
|
+
/**
|
|
18
|
+
* Injects OAuth tokens into all server configurations.
|
|
19
|
+
* Returns a new McpConfiguration with tokens injected, or undefined if no configs provided.
|
|
20
|
+
*/
|
|
21
|
+
export declare function injectOauthTokens({ mcpConfigs, tokensByMcpServerName, }: {
|
|
22
|
+
mcpConfigs: McpConfiguration | undefined;
|
|
23
|
+
tokensByMcpServerName: Record<string, string> | undefined;
|
|
24
|
+
}): McpConfiguration | undefined;
|
|
25
|
+
//# sourceMappingURL=oauth-token-injector.d.ts.map
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MCP_OAUTH_TOKENS_HEADER = void 0;
|
|
4
|
+
exports.extractMcpOauthTokensFromHeaders = extractMcpOauthTokensFromHeaders;
|
|
5
|
+
exports.injectOauthToken = injectOauthToken;
|
|
6
|
+
exports.injectOauthTokens = injectOauthTokens;
|
|
7
|
+
const errors_1 = require("./types/errors");
|
|
8
|
+
exports.MCP_OAUTH_TOKENS_HEADER = 'x-mcp-oauth-tokens';
|
|
9
|
+
/**
|
|
10
|
+
* Extracts and parses OAuth tokens from request headers.
|
|
11
|
+
* Returns undefined if the header is not present.
|
|
12
|
+
* Throws AIBadRequestError if the header contains invalid JSON.
|
|
13
|
+
*/
|
|
14
|
+
function extractMcpOauthTokensFromHeaders(headers) {
|
|
15
|
+
const headerValue = headers[exports.MCP_OAUTH_TOKENS_HEADER];
|
|
16
|
+
if (!headerValue)
|
|
17
|
+
return undefined;
|
|
18
|
+
const value = Array.isArray(headerValue) ? headerValue[0] : headerValue;
|
|
19
|
+
try {
|
|
20
|
+
return JSON.parse(value);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
throw new errors_1.AIBadRequestError(`Invalid JSON in ${exports.MCP_OAUTH_TOKENS_HEADER} header`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Injects the OAuth token as Authorization header into HTTP-based transport configurations.
|
|
28
|
+
* For stdio transports, returns the config unchanged.
|
|
29
|
+
*/
|
|
30
|
+
function injectOauthToken({ serverConfig, token, }) {
|
|
31
|
+
if (!token)
|
|
32
|
+
return serverConfig;
|
|
33
|
+
if (!token.startsWith('Bearer ')) {
|
|
34
|
+
throw new errors_1.AIBadRequestError('OAuth token must start with "Bearer "');
|
|
35
|
+
}
|
|
36
|
+
// Only inject token for HTTP-based transports (sse, http)
|
|
37
|
+
if (serverConfig.type === 'http' || serverConfig.type === 'sse') {
|
|
38
|
+
return {
|
|
39
|
+
...serverConfig,
|
|
40
|
+
headers: {
|
|
41
|
+
...(serverConfig.headers || {}),
|
|
42
|
+
Authorization: token,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return serverConfig;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Injects OAuth tokens into all server configurations.
|
|
50
|
+
* Returns a new McpConfiguration with tokens injected, or undefined if no configs provided.
|
|
51
|
+
*/
|
|
52
|
+
function injectOauthTokens({ mcpConfigs, tokensByMcpServerName, }) {
|
|
53
|
+
if (!mcpConfigs)
|
|
54
|
+
return undefined;
|
|
55
|
+
if (!tokensByMcpServerName)
|
|
56
|
+
return mcpConfigs;
|
|
57
|
+
const configsWithTokens = Object.fromEntries(Object.entries(mcpConfigs.configs).map(([name, serverConfig]) => [
|
|
58
|
+
name,
|
|
59
|
+
injectOauthToken({ serverConfig, token: tokensByMcpServerName[name] }),
|
|
60
|
+
]));
|
|
61
|
+
return { ...mcpConfigs, configs: configsWithTokens };
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgtdG9rZW4taW5qZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvb2F1dGgtdG9rZW4taW5qZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBV0EsNEVBY0M7QUFNRCw0Q0F5QkM7QUFNRCw4Q0FrQkM7QUE5RUQsMkNBQW1EO0FBRXRDLFFBQUEsdUJBQXVCLEdBQUcsb0JBQW9CLENBQUM7QUFFNUQ7Ozs7R0FJRztBQUNILFNBQWdCLGdDQUFnQyxDQUM5QyxPQUFzRDtJQUV0RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsK0JBQXVCLENBQUMsQ0FBQztJQUVyRCxJQUFJLENBQUMsV0FBVztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRW5DLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO0lBRXhFLElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsTUFBTSxJQUFJLDBCQUFpQixDQUFDLG1CQUFtQiwrQkFBdUIsU0FBUyxDQUFDLENBQUM7SUFDbkYsQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxFQUMvQixZQUFZLEVBQ1osS0FBSyxHQUlOO0lBQ0MsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLFlBQVksQ0FBQztJQUVoQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSwwQkFBaUIsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCwwREFBMEQ7SUFDMUQsSUFBSSxZQUFZLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxZQUFZLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ2hFLE9BQU87WUFDTCxHQUFHLFlBQVk7WUFDZixPQUFPLEVBQUU7Z0JBQ1AsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO2dCQUMvQixhQUFhLEVBQUUsS0FBSzthQUNyQjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLEVBQ2hDLFVBQVUsRUFDVixxQkFBcUIsR0FJdEI7SUFDQyxJQUFJLENBQUMsVUFBVTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxxQkFBcUI7UUFBRSxPQUFPLFVBQVUsQ0FBQztJQUU5QyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQzFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMvRCxJQUFJO1FBQ0osZ0JBQWdCLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7S0FDdkUsQ0FBQyxDQUNILENBQUM7SUFFRixPQUFPLEVBQUUsR0FBRyxVQUFVLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLENBQUM7QUFDdkQsQ0FBQyJ9
|
|
@@ -29,13 +29,13 @@ export type DispatchBody = {
|
|
|
29
29
|
messages: ChatCompletionMessage[];
|
|
30
30
|
tools?: ChatCompletionTool[];
|
|
31
31
|
tool_choice?: ChatCompletionToolChoice;
|
|
32
|
+
parallel_tool_calls?: boolean;
|
|
32
33
|
};
|
|
33
34
|
export declare class ProviderDispatcher {
|
|
34
35
|
private readonly chatModel;
|
|
35
36
|
private readonly remoteTools;
|
|
36
37
|
constructor(configuration: AiConfiguration | null, remoteTools: RemoteTools);
|
|
37
38
|
dispatch(body: DispatchBody): Promise<ChatCompletionResponse>;
|
|
38
|
-
private bindToolsIfNeeded;
|
|
39
39
|
private enrichToolDefinitions;
|
|
40
40
|
}
|
|
41
41
|
//# sourceMappingURL=provider-dispatcher.d.ts.map
|
|
@@ -48,9 +48,14 @@ class ProviderDispatcher {
|
|
|
48
48
|
if (!this.chatModel) {
|
|
49
49
|
throw new errors_1.AINotConfiguredError();
|
|
50
50
|
}
|
|
51
|
-
const { tools, messages, tool_choice: toolChoice } = body;
|
|
51
|
+
const { tools, messages, tool_choice: toolChoice, parallel_tool_calls: parallelToolCalls, } = body;
|
|
52
52
|
const enrichedTools = this.enrichToolDefinitions(tools);
|
|
53
|
-
const model =
|
|
53
|
+
const model = enrichedTools?.length
|
|
54
|
+
? this.chatModel.bindTools(enrichedTools, {
|
|
55
|
+
tool_choice: toolChoice,
|
|
56
|
+
parallel_tool_calls: parallelToolCalls,
|
|
57
|
+
})
|
|
58
|
+
: this.chatModel;
|
|
54
59
|
try {
|
|
55
60
|
const response = await model.invoke(messages);
|
|
56
61
|
// eslint-disable-next-line no-underscore-dangle
|
|
@@ -73,14 +78,6 @@ class ProviderDispatcher {
|
|
|
73
78
|
throw new errors_1.OpenAIUnprocessableError(`Error while calling OpenAI: ${err.message}`);
|
|
74
79
|
}
|
|
75
80
|
}
|
|
76
|
-
bindToolsIfNeeded(chatModel, tools, toolChoice) {
|
|
77
|
-
if (!tools || tools.length === 0) {
|
|
78
|
-
return chatModel;
|
|
79
|
-
}
|
|
80
|
-
return chatModel.bindTools(tools, {
|
|
81
|
-
tool_choice: toolChoice,
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
81
|
enrichToolDefinitions(tools) {
|
|
85
82
|
if (!tools || !Array.isArray(tools))
|
|
86
83
|
return tools;
|
|
@@ -96,4 +93,4 @@ class ProviderDispatcher {
|
|
|
96
93
|
}
|
|
97
94
|
}
|
|
98
95
|
exports.ProviderDispatcher = ProviderDispatcher;
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm92aWRlci1kaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWdDQSx3REFXQztBQXRDRCw2RUFBaUY7QUFDakYsOENBQStDO0FBRS9DLDJDQUFnRjtBQUVoRjs7OztHQUlHO0FBQ0gsTUFBTSxtQ0FBbUMsR0FBRztJQUMxQyxPQUFPO0lBQ1AsZUFBZTtJQUNmLFNBQVM7SUFDVCxjQUFjO0lBQ2QsU0FBUztJQUNULE9BQU87SUFDUCxTQUFTO0lBQ1QsS0FBSztDQUNOLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLHdCQUF3QixHQUFHLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUV0RSxTQUFnQixzQkFBc0IsQ0FBQyxLQUFhO0lBQ2xELE1BQU0sV0FBVyxHQUFHLHdCQUF3QixDQUFDLElBQUksQ0FDL0MsU0FBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUN0RSxDQUFDO0lBQ0YsSUFBSSxXQUFXO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFN0IsTUFBTSxrQkFBa0IsR0FBRyxtQ0FBbUMsQ0FBQyxJQUFJLENBQ2pFLFdBQVcsQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLFdBQVcsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FDNUUsQ0FBQztJQUVGLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztBQUM3QixDQUFDO0FBdUNELE1BQWEsa0JBQWtCO0lBSzdCLFlBQVksYUFBcUMsRUFBRSxXQUF3QjtRQUoxRCxjQUFTLEdBQXNCLElBQUksQ0FBQztRQUtuRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUUvQixJQUFJLGFBQWEsRUFBRSxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDekMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxpQkFBaUIsRUFBRSxHQUFHLGFBQWEsQ0FBQztZQUMvRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksbUJBQVUsQ0FBQztnQkFDOUIsR0FBRyxpQkFBaUI7Z0JBQ3BCLG9CQUFvQixFQUFFLElBQUk7YUFDM0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLElBQWtCO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLDZCQUFvQixFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUVELE1BQU0sRUFDSixLQUFLLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFBRSxVQUFVLEVBQ3ZCLG1CQUFtQixFQUFFLGlCQUFpQixHQUN2QyxHQUFHLElBQUksQ0FBQztRQUVULE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RCxNQUFNLEtBQUssR0FBRyxhQUFhLEVBQUUsTUFBTTtZQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFO2dCQUN0QyxXQUFXLEVBQUUsVUFBVTtnQkFDdkIsbUJBQW1CLEVBQUUsaUJBQWlCO2FBQ3ZDLENBQUM7WUFDSixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUVuQixJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBNkIsQ0FBQyxDQUFDO1lBRW5FLGdEQUFnRDtZQUNoRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUMsY0FBd0MsQ0FBQztZQUV4RixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sSUFBSSxpQ0FBd0IsQ0FDaEMsNkVBQTZFLENBQzlFLENBQUM7WUFDSixDQUFDO1lBRUQsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLEtBQUssWUFBWSxpQ0FBd0I7Z0JBQUUsTUFBTSxLQUFLLENBQUM7WUFFM0QsTUFBTSxHQUFHLEdBQUcsS0FBb0MsQ0FBQztZQUVqRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sSUFBSSxpQ0FBd0IsQ0FBQyx3QkFBd0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDNUUsQ0FBQztZQUVELElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxJQUFJLGlDQUF3QixDQUFDLDBCQUEwQixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUM5RSxDQUFDO1lBRUQsTUFBTSxJQUFJLGlDQUF3QixDQUFDLCtCQUErQixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNuRixDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFDLEtBQTRCO1FBQ3hELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRWxELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQ2hFLElBQUEsMENBQXVCLEVBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUN6QyxDQUFDO1FBRUYsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBRTFDLE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxRixJQUFJLFlBQVk7Z0JBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUU3RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbkZELGdEQW1GQyJ9
|