n8n-nodes-qiniu-ai 0.2.0 → 0.4.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/README.md CHANGED
@@ -19,10 +19,10 @@
19
19
  |----------|-----------|-------------|
20
20
  | **Chat** | Complete | Multi-model chat completion (Qwen, Claude, Gemini, GPT, DeepSeek, etc.) |
21
21
  | **Image** | Generate, Edit | AI image generation and editing with multiple models |
22
- | **Video** | Generate, Get Status | Video generation with Kling, Veo, Sora models |
22
+ | **Video** | Generate, Remix, Get Status | Video generation with Kling, Veo, Sora models |
23
23
  | **Audio** | Text-to-Speech, Speech-to-Text | TTS and ASR capabilities |
24
- | **Agent** | Execute | AI agent with tool calling and memory support |
25
- | **Tools** | Web Search, OCR | Utility tools for search and text extraction |
24
+ | **Agent** | Execute | AI agent with built-in tools (Web Search, OCR, Image/Video Generation) and ReAct loop |
25
+ | **Tools** | Web Search, OCR | Utility tools with advanced filters (site, time, type) |
26
26
 
27
27
  ### 📦 Installation
28
28
 
@@ -142,10 +142,10 @@ MIT License - see [LICENSE](LICENSE) for details.
142
142
  |------|-----|------|
143
143
  | **Chat(聊天)** | 文本生成 | 多模型聊天补全(通义千问、Claude、Gemini、GPT、DeepSeek 等) |
144
144
  | **Image(图像)** | 生成、编辑 | AI 图像生成和编辑 |
145
- | **Video(视频)** | 生成、查询状态 | 视频生成(可灵、Veo、Sora) |
145
+ | **Video(视频)** | 生成、混剪、查询状态 | 视频生成(可灵、Veo、Sora) |
146
146
  | **Audio(音频)** | 文本转语音、语音转文本 | TTS 和 ASR 能力 |
147
- | **Agent(智能体)** | 执行 | 支持工具调用和记忆的 AI 智能体 |
148
- | **Tools(工具)** | 网络搜索、OCR | 搜索和文字提取工具 |
147
+ | **Agent(智能体)** | 执行 | 支持内置工具(搜索、OCR、图像/视频生成)和 ReAct 循环的 AI 智能体 |
148
+ | **Tools(工具)** | 网络搜索、OCR | 支持高级过滤器(站点、时间、类型)的工具 |
149
149
 
150
150
  ### 📦 安装
151
151
 
@@ -444,22 +444,105 @@ async function handleAgent(context, client, itemIndex) {
444
444
  const model = context.getNodeParameter('model', itemIndex);
445
445
  const prompt = context.getNodeParameter('prompt', itemIndex);
446
446
  const systemMessage = context.getNodeParameter('systemMessage', itemIndex, '');
447
+ const builtinTools = context.getNodeParameter('builtinTools', itemIndex, []);
448
+ const autoExecuteTools = context.getNodeParameter('autoExecuteTools', itemIndex, true);
447
449
  const options = context.getNodeParameter('options', itemIndex, {});
448
- // Parse tools - convert array to Record<string, Tool>
449
- let toolsRecord;
450
+ // Build tools record
451
+ const toolsRecord = {};
452
+ // Register built-in tools
453
+ if (builtinTools.includes('webSearch')) {
454
+ toolsRecord['web_search'] = {
455
+ description: 'Search the web for information. Use this to find current information.',
456
+ parameters: {
457
+ type: 'object',
458
+ properties: {
459
+ query: { type: 'string', description: 'The search query' },
460
+ },
461
+ required: ['query'],
462
+ },
463
+ execute: async (args) => {
464
+ const results = await client.sys.search({ query: args.query });
465
+ return { results: results?.slice(0, 5) || [] };
466
+ },
467
+ };
468
+ }
469
+ if (builtinTools.includes('ocr')) {
470
+ toolsRecord['ocr'] = {
471
+ description: 'Extract text from an image URL using OCR.',
472
+ parameters: {
473
+ type: 'object',
474
+ properties: {
475
+ url: { type: 'string', description: 'The image URL to extract text from' },
476
+ },
477
+ required: ['url'],
478
+ },
479
+ execute: async (args) => {
480
+ const result = await client.ocr.detect({ url: args.url });
481
+ return result;
482
+ },
483
+ };
484
+ }
485
+ if (builtinTools.includes('imageGenerate')) {
486
+ toolsRecord['generate_image'] = {
487
+ description: 'Generate an image from a text prompt.',
488
+ parameters: {
489
+ type: 'object',
490
+ properties: {
491
+ prompt: { type: 'string', description: 'Description of the image to generate' },
492
+ },
493
+ required: ['prompt'],
494
+ },
495
+ execute: async (args) => {
496
+ const createResult = await client.image.generate({
497
+ model: options.imageModel || 'kling-v2-1',
498
+ prompt: args.prompt,
499
+ });
500
+ const result = await client.image.waitForResult(createResult);
501
+ return {
502
+ images: result.data?.map((d) => d.url || d.b64_json?.substring(0, 100) + '...') || [],
503
+ };
504
+ },
505
+ };
506
+ }
507
+ if (builtinTools.includes('videoGenerate')) {
508
+ toolsRecord['generate_video'] = {
509
+ description: 'Generate a video from a text prompt.',
510
+ parameters: {
511
+ type: 'object',
512
+ properties: {
513
+ prompt: { type: 'string', description: 'Description of the video to generate' },
514
+ },
515
+ required: ['prompt'],
516
+ },
517
+ execute: async (args) => {
518
+ const task = await client.video.create({
519
+ model: options.videoModel || 'kling-video-o1',
520
+ prompt: args.prompt,
521
+ duration: '5',
522
+ aspect_ratio: '16:9',
523
+ });
524
+ const result = await client.video.waitForCompletion(task.id);
525
+ return {
526
+ id: result.id,
527
+ status: result.status,
528
+ videos: result.task_result?.videos || [],
529
+ };
530
+ },
531
+ };
532
+ }
533
+ // Parse user-defined tools
450
534
  if (options.tools) {
451
535
  try {
452
536
  const toolsArray = JSON.parse(options.tools);
453
537
  if (Array.isArray(toolsArray) && toolsArray.length > 0) {
454
- toolsRecord = {};
455
538
  for (const tool of toolsArray) {
456
539
  if (tool.function?.name) {
457
540
  toolsRecord[tool.function.name] = {
458
541
  description: tool.function.description || '',
459
542
  parameters: tool.function.parameters || {},
460
543
  execute: async (_args) => {
461
- // Tools executed by the agent - we return a placeholder
462
- return { result: 'Tool execution not implemented in n8n node' };
544
+ // User-defined tools return placeholder for manual execution
545
+ return { result: 'Tool executed. Process the result in subsequent workflow steps.' };
463
546
  },
464
547
  };
465
548
  }
@@ -470,6 +553,23 @@ async function handleAgent(context, client, itemIndex) {
470
553
  throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Invalid tools JSON format', { itemIndex });
471
554
  }
472
555
  }
556
+ // Execute with AgentGraph if auto-execute is enabled and there are tools
557
+ const hasTools = Object.keys(toolsRecord).length > 0;
558
+ // Initialize Checkpointer if configured
559
+ // Note: Checkpointer integration requires AgentGraph directly, not generateTextWithGraph
560
+ // This is a placeholder for future full implementation
561
+ let checkpointerInfo = null;
562
+ if (options.checkpointerType && options.checkpointerType !== 'none') {
563
+ if (options.checkpointerType === 'memory') {
564
+ checkpointerInfo = 'memory';
565
+ }
566
+ else if (options.checkpointerType === 'redis') {
567
+ checkpointerInfo = `redis:${options.checkpointerConnection || 'not-configured'}`;
568
+ }
569
+ else if (options.checkpointerType === 'postgres') {
570
+ checkpointerInfo = `postgres:${options.checkpointerConnection || 'not-configured'}`;
571
+ }
572
+ }
473
573
  const result = await (0, qiniu_ai_sdk_1.generateTextWithGraph)({
474
574
  client,
475
575
  model,
@@ -478,10 +578,11 @@ async function handleAgent(context, client, itemIndex) {
478
578
  maxContextTokens: options.maxContextTokens || 32000,
479
579
  maxSteps: options.maxSteps || 10,
480
580
  temperature: options.temperature,
481
- tools: toolsRecord,
581
+ tools: hasTools && autoExecuteTools ? toolsRecord : undefined,
482
582
  });
483
583
  return {
484
584
  content: result.text || '',
585
+ reasoning: result.reasoning || '',
485
586
  steps: result.steps?.map((step) => ({
486
587
  type: step.type,
487
588
  toolName: step.toolName,
@@ -489,6 +590,9 @@ async function handleAgent(context, client, itemIndex) {
489
590
  toolResult: step.toolResult,
490
591
  text: step.text,
491
592
  })) || [],
593
+ toolsExecuted: result.steps?.filter((s) => s.type === 'tool_call').length || 0,
594
+ threadId: options.threadId || null,
595
+ checkpointer: checkpointerInfo,
492
596
  usage: result.usage
493
597
  ? {
494
598
  promptTokens: result.usage.prompt_tokens,
@@ -592,4 +696,4 @@ async function handleTools(context, client, itemIndex) {
592
696
  }
593
697
  throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Unknown tools operation: ${operation}`, { itemIndex });
594
698
  }
595
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUWluaXVBaS5ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZXMvUWluaXVBaS9RaW5pdUFpLm5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0NBUXNCO0FBRXRCLHdEQUFpRjtBQUVqRixvRUFBNEU7QUFDNUUsc0VBQStFO0FBQy9FLHNFQUErRTtBQUMvRSxzRUFBK0U7QUFDL0Usc0VBQStFO0FBQy9FLHNFQUErRTtBQUUvRSxNQUFhLE9BQU87SUFBcEI7UUFDSSxnQkFBVyxHQUF5QjtZQUNoQyxXQUFXLEVBQUUsVUFBVTtZQUN2QixJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRSxnQkFBZ0I7WUFDdEIsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxDQUFDO1lBQ1YsUUFBUSxFQUFFLDhEQUE4RDtZQUN4RSxXQUFXLEVBQUUsc0VBQXNFO1lBQ25GLFFBQVEsRUFBRTtnQkFDTixJQUFJLEVBQUUsVUFBVTthQUNuQjtZQUNELE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNoQixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFO2dCQUNUO29CQUNJLElBQUksRUFBRSxZQUFZO29CQUNsQixRQUFRLEVBQUUsSUFBSTtpQkFDakI7YUFDSjtZQUNELFVBQVUsRUFBRTtnQkFDUixXQUFXO2dCQUNYO29CQUNJLFdBQVcsRUFBRSxVQUFVO29CQUN2QixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsZ0JBQWdCLEVBQUUsSUFBSTtvQkFDdEIsT0FBTyxFQUFFO3dCQUNMOzRCQUNJLElBQUksRUFBRSxNQUFNOzRCQUNaLEtBQUssRUFBRSxNQUFNOzRCQUNiLFdBQVcsRUFBRSwyQkFBMkI7eUJBQzNDO3dCQUNEOzRCQUNJLElBQUksRUFBRSxPQUFPOzRCQUNiLEtBQUssRUFBRSxPQUFPOzRCQUNkLFdBQVcsRUFBRSx5QkFB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LENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDbkYsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3hGLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLElBQUksV0FBVyxDQUFDO1lBQ3BELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0MsOENBQThDO1lBQzlDLFNBQVMsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLFFBQVEsV0FBVyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQ25FLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWxELE9BQU87WUFDSCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQ3ZCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxJQUFJLEVBQUU7WUFDM0IsSUFBSSxFQUFFLE1BQWdDO1NBQ3pDLENBQUM7SUFDTixDQUFDO0lBRUQsTUFBTSxJQUFJLGlDQUFrQixDQUN4QixPQUFPLENBQUMsT0FBTyxFQUFFLEVBQ2pCLDRCQUE0QixTQUFTLEVBQUUsRUFDdkMsRUFBRSxTQUFTLEVBQUUsQ0FDaEIsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIElFeGVjdXRlRnVuY3Rpb25zLFxuICAgIElOb2RlRXhlY3V0aW9uRGF0YSxcbiAgICBJTm9kZVR5cGUsXG4gICAgSU5vZGVUeXBlRGVzY3JpcHRpb24sXG4gICAgTm9kZU9wZXJhdGlvbkVycm9yLFxuICAgIElEYXRhT2JqZWN0LFxuICAgIElCaW5hcnlLZXlEYXRhLFxufSBmcm9tICduOG4td29ya2Zsb3cnO1xuXG5pbXBvcnQgeyBRaW5pdUFJLCBnZW5lcmF0ZVRleHRXaXRoR3JhcGgsIEFQSUVycm9yIH0gZnJvbSAnQGJvd2VucXQvcWluaXUtYWktc2RrJztcblxuaW1wb3J0IHsgY2hhdE9wZXJhdGlvbnMsIGNoYXRGaWVsZHMgfSBmcm9tICcuL2Rlc2NyaXB0aW9ucy9DaGF0RGVzY3JpcHRpb24nO1xuaW1wb3J0IHsgaW1hZ2VPcGVyYXRpb25zLCBpbWFnZUZpZWxkcyB9IGZyb20gJy4vZGVzY3JpcHRpb25zL0ltYWdlRGVzY3JpcHRpb24nO1xuaW1wb3J0IHsgdmlkZW9PcGVyYXRpb25zLCB2aWRlb0ZpZWxkcyB9IGZyb20gJy4vZGVzY3JpcHRpb25zL1ZpZGVvRGVzY3JpcHRpb24nO1xuaW1wb3J0IHsgYWdlbnRPcGVyYXRpb25zLCBhZ2VudEZpZWxkcyB9IGZyb20gJy4vZGVzY3JpcHRpb25zL0FnZW50RGVzY3JpcHRpb24nO1xuaW1wb3J0IHsgYXVkaW9PcGVyYXRpb25zLCBhdWRpb0ZpZWxkcyB9IGZyb20gJy4vZGVzY3JpcHRpb25zL0F1ZGlvRGVzY3JpcHRpb24nO1xuaW1wb3J0IHsgdG9vbHNPcGVyYXRpb25zLCB0b29sc0ZpZWxkcyB9IGZyb20gJy4vZGVzY3JpcHRpb25zL1Rvb2xzRGVzY3JpcHRpb24nO1xuXG5leHBvcnQgY2xhc3MgUWluaXVBaSBpbXBsZW1lbnRzIElOb2RlVHlwZSB7XG4gICAgZGVzY3JpcHRpb246IElOb2RlVHlwZURlc2NyaXB0aW9uID0ge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ1Fpbml1IEFJJyxcbiAgICAgICAgbmFtZTogJ3Fpbml1QWknLFxuICAgICAgICBpY29uOiAnZmlsZTpxaW5pdS5zdmcnLFxuICAgICAgICBncm91cDogWyd0cmFuc2Zvcm0nXSxcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgc3VidGl0bGU6ICc9e3skcGFyYW1ldGVyW1wib3BlcmF0aW9uXCJdICsgXCI6IFwiICsgJHBhcmFtZXRlcltcInJlc291cmNlXCJdfX0nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0ludGVyYWN0IHdpdGggUWluaXUgQUkgc2VydmljZXMgLSBDaGF0LCBJbWFnZSwgVmlkZW8sIEFnZW50IGFuZCBtb3JlJyxcbiAgICAgICAgZGVmYXVsdHM6IHtcbiAgICAgICAgICAgIG5hbWU6ICdRaW5pdSBBSScsXG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0czogWydtYWluJ10sXG4gICAgICAgIG91dHB1dHM6IFsnbWFpbiddLFxuICAgICAgICBjcmVkZW50aWFsczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdxaW5pdUFpQXBpJyxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIC8vIFJlc291cmNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdSZXNvdXJjZScsXG4gICAgICAgICAgICAgICAgbmFtZTogJ3Jlc291cmNlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnb3B0aW9ucycsXG4gICAgICAgICAgICAgICAgbm9EYXRhRXhwcmVzc2lvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdDaGF0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnY2hhdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIGNoYXQgY29tcGxldGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnSW1hZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdpbWFnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIG9yIGVkaXQgaW1hZ2VzJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1ZpZGVvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAndmlkZW8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSB2aWRlb3MnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQWdlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdhZ2VudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1J1biBBSSBhZ2VudCB3aXRoIHRvb2xzIGFuZCBtZW1vcnknLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQXVkaW8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdhdWRpbycsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RleHQtdG8tU3BlZWNoIGFuZCBTcGVlY2gtdG8tVGV4dCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdUb29scycsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ3Rvb2xzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnV2ViIFNlYXJjaCwgT0NSIGFuZCBtb3JlJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICdjaGF0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBPcGVyYXRpb25zIGFuZCBmaWVsZHNcbiAgICAgICAgICAgIC4uLmNoYXRPcGVyYXRpb25zLFxuICAgICAgICAgICAgLi4uY2hhdEZpZWxkcyxcbiAgICAgICAgICAgIC4uLmltYWdlT3BlcmF0aW9ucyxcbiAgICAgICAgICAgIC4uLmltYWdlRmllbGRzLFxuICAgICAgICAgICAgLi4udmlkZW9PcGVyYXRpb25zLFxuICAgICAgICAgICAgLi4udmlkZW9GaWVsZHMsXG4gICAgICAgICAgICAuLi5hZ2VudE9wZXJhdGlvbnMsXG4gICAgICAgICAgICAuLi5hZ2VudEZpZWxkcyxcbiAgICAgICAgICAgIC4uLmF1ZGlvT3BlcmF0aW9ucyxcbiAgICAgICAgICAgIC4uLmF1ZGlvRmllbGRzLFxuICAgICAgICAgICAgLi4udG9vbHNPcGVyYXRpb25zLFxuICAgICAgICAgICAgLi4udG9vbHNGaWVsZHMsXG4gICAgICAgIF0sXG4gICAgfTtcblxuICAgIGFzeW5jIGV4ZWN1dGUodGhpczogSUV4ZWN1dGVGdW5jdGlvbnMpOiBQcm9taXNlPElOb2RlRXhlY3V0aW9uRGF0YVtdW10+IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldElucHV0RGF0YSgpO1xuICAgICAgICBjb25zdCByZXR1cm5EYXRhOiBJTm9kZUV4ZWN1dGlvbkRhdGFbXSA9IFtdO1xuXG4gICAgICAgIC8vIEdldCBjcmVkZW50aWFsc1xuICAgICAgICBjb25zdCBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuZ2V0Q3JlZGVudGlhbHMoJ3Fpbml1QWlBcGknKTtcbiAgICAgICAgY29uc3QgYXBpS2V5ID0gY3JlZGVudGlhbHMuYXBpS2V5IGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgYmFzZVVybCA9IChjcmVkZW50aWFscy5iYXNlVXJsIGFzIHN0cmluZykgfHwgJ2h0dHBzOi8vYXBpLnFuYWlnYy5jb20vdjEnO1xuXG4gICAgICAgIC8vIEluaXRpYWxpemUgY2xpZW50XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IG5ldyBRaW5pdUFJKHsgYXBpS2V5LCBiYXNlVXJsIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5nZXROb2RlUGFyYW1ldGVyKCdyZXNvdXJjZScsIDApIGFzIHN0cmluZztcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQ6IElEYXRhT2JqZWN0O1xuXG4gICAgICAgICAgICAgICAgLy8gUm91dGUgdG8gYXBwcm9wcmlhdGUgaGFuZGxlclxuICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZSA9PT0gJ2NoYXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGhhbmRsZUNoYXQodGhpcywgY2xpZW50LCBpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNlID09PSAnaW1hZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEltYWdlIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGJpbmFyeSBvdXRwdXRcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VSZXN1bHQgPSBhd2FpdCBoYW5kbGVJbWFnZSh0aGlzLCBjbGllbnQsIGkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5EYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbjogaW1hZ2VSZXN1bHQuanNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyeTogaW1hZ2VSZXN1bHQuYmluYXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFpcmVkSXRlbTogeyBpdGVtOiBpIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGhhbmRsZVZpZGVvKHRoaXMsIGNsaWVudCwgaSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZSA9PT0gJ2FnZW50Jykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBoYW5kbGVBZ2VudCh0aGlzLCBjbGllbnQsIGkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2UgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgaGFuZGxlQXVkaW8odGhpcywgY2xpZW50LCBpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNlID09PSAndG9vbHMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGhhbmRsZVRvb2xzKHRoaXMsIGNsaWVudCwgaSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE5vZGVPcGVyYXRpb25FcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYFVua25vd24gcmVzb3VyY2U6ICR7cmVzb3VyY2V9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgaXRlbUluZGV4OiBpIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm5EYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBqc29uOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgIHBhaXJlZEl0ZW06IHsgaXRlbTogaSB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBUElFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTm9kZU9wZXJhdGlvbkVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBgUWluaXUgQUkgQVBJIEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtSW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBTdGF0dXM6ICR7ZXJyb3Iuc3RhdHVzfSwgQ29kZTogJHsoZXJyb3IgYXMgYW55KS5jb2RlIHx8ICd1bmtub3duJ31gLFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbcmV0dXJuRGF0YV07XG4gICAgfVxufVxuXG4vLyBDaGF0IGhhbmRsZXJcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUNoYXQoXG4gICAgY29udGV4dDogSUV4ZWN1dGVGdW5jdGlvbnMsXG4gICAgY2xpZW50OiBRaW5pdUFJLFxuICAgIGl0ZW1JbmRleDogbnVtYmVyXG4pOiBQcm9taXNlPElEYXRhT2JqZWN0PiB7XG4gICAgY29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ21vZGVsJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3QgaW5wdXRUeXBlID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdpbnB1dFR5cGUnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMge1xuICAgICAgICB0ZW1wZXJhdHVyZT86IG51bWJlcjtcbiAgICAgICAgbWF4VG9rZW5zPzogbnVtYmVyO1xuICAgICAgICBqc29uTW9kZT86IGJvb2xlYW47XG4gICAgICAgIHRvcFA/OiBudW1iZXI7XG4gICAgfTtcblxuICAgIC8vIEJ1aWxkIG1lc3NhZ2VzXG4gICAgbGV0IG1lc3NhZ2VzOiBBcnJheTx7IHJvbGU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+ID0gW107XG5cbiAgICBpZiAoaW5wdXRUeXBlID09PSAnc2ltcGxlJykge1xuICAgICAgICBjb25zdCBwcm9tcHQgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3Byb21wdCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBzeXN0ZW1NZXNzYWdlID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdzeXN0ZW1NZXNzYWdlJywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuXG4gICAgICAgIGlmIChzeXN0ZW1NZXNzYWdlKSB7XG4gICAgICAgICAgICBtZXNzYWdlcy5wdXNoKHsgcm9sZTogJ3N5c3RlbScsIGNvbnRlbnQ6IHN5c3RlbU1lc3NhZ2UgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZXMucHVzaCh7IHJvbGU6ICd1c2VyJywgY29udGVudDogcHJvbXB0IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VzRGF0YSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignbWVzc2FnZXMnLCBpdGVtSW5kZXgpIGFzIHtcbiAgICAgICAgICAgIG1lc3NhZ2VWYWx1ZXM/OiBBcnJheTx7IHJvbGU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+O1xuICAgICAgICB9O1xuICAgICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzRGF0YS5tZXNzYWdlVmFsdWVzIHx8IFtdO1xuICAgIH1cblxuICAgIC8vIENhbGwgQVBJXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuY2hhdC5jcmVhdGUoe1xuICAgICAgICBtb2RlbCxcbiAgICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VzIGFzIGFueSxcbiAgICAgICAgdGVtcGVyYXR1cmU6IG9wdGlvbnMudGVtcGVyYXR1cmUsXG4gICAgICAgIG1heF90b2tlbnM6IG9wdGlvbnMubWF4VG9rZW5zLFxuICAgICAgICB0b3BfcDogb3B0aW9ucy50b3BQLFxuICAgICAgICByZXNwb25zZV9mb3JtYXQ6IG9wdGlvbnMuanNvbk1vZGUgPyB7IHR5cGU6ICdqc29uX29iamVjdCcgfSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIC8vIE5vcm1hbGl6ZSBvdXRwdXRcbiAgICBjb25zdCBjaG9pY2UgPSByZXNwb25zZS5jaG9pY2VzPy5bMF07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogY2hvaWNlPy5tZXNzYWdlPy5jb250ZW50IHx8ICcnLFxuICAgICAgICByb2xlOiBjaG9pY2U/Lm1lc3NhZ2U/LnJvbGUgfHwgJ2Fzc2lzdGFudCcsXG4gICAgICAgIGZpbmlzaFJlYXNvbjogY2hvaWNlPy5maW5pc2hfcmVhc29uIHx8IG51bGwsXG4gICAgICAgIHVzYWdlOiByZXNwb25zZS51c2FnZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgcHJvbXB0VG9rZW5zOiByZXNwb25zZS51c2FnZS5wcm9tcHRfdG9rZW5zLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRpb25Ub2tlbnM6IHJlc3BvbnNlLnVzYWdlLmNvbXBsZXRpb25fdG9rZW5zLFxuICAgICAgICAgICAgICAgIHRvdGFsVG9rZW5zOiByZXNwb25zZS51c2FnZS50b3RhbF90b2tlbnMsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIF9yYXc6IHJlc3BvbnNlIGFzIHVua25vd24gYXMgSURhdGFPYmplY3QsXG4gICAgfTtcbn1cblxuLy8gSW1hZ2UgaGFuZGxlciAtIHJldHVybnMgeyBqc29uLCBiaW5hcnkgfSBmb3IgcHJvcGVyIG44biBiaW5hcnkgZGF0YSBoYW5kbGluZ1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlSW1hZ2UoXG4gICAgY29udGV4dDogSUV4ZWN1dGVGdW5jdGlvbnMsXG4gICAgY2xpZW50OiBRaW5pdUFJLFxuICAgIGl0ZW1JbmRleDogbnVtYmVyXG4pOiBQcm9taXNlPHsganNvbjogSURhdGFPYmplY3Q7IGJpbmFyeT86IElCaW5hcnlLZXlEYXRhIH0+IHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wZXJhdGlvbicsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdtb2RlbCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHByb21wdCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigncHJvbXB0JywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgd2FpdEZvckNvbXBsZXRpb24gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3dhaXRGb3JDb21wbGV0aW9uJywgaXRlbUluZGV4LCB0cnVlKSBhcyBib29sZWFuO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wdGlvbnMnLCBpdGVtSW5kZXgsIHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgICBtb2RlbCxcbiAgICAgICAgcHJvbXB0LFxuICAgICAgICBuZWdhdGl2ZV9wcm9tcHQ6IG9wdGlvbnMubmVnYXRpdmVQcm9tcHQsXG4gICAgICAgIGFzcGVjdF9yYXRpbzogb3B0aW9ucy5hc3BlY3RSYXRpbyxcbiAgICAgICAgbjogb3B0aW9ucy5uLFxuICAgIH07XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSAnZWRpdCcpIHtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlVXJsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdyZWZlcmVuY2VJbWFnZVVybCcsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICAgICAgaWYgKHJlZmVyZW5jZVVybCkge1xuICAgICAgICAgICAgcGFyYW1zLmltYWdlX3VybCA9IHJlZmVyZW5jZVVybDtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5tYXNrKSB7XG4gICAgICAgICAgICBwYXJhbXMubWFzayA9IG9wdGlvbnMubWFzaztcbiAgICAgICAgfVxuICAgICAgICBwYXJhbXMuc3RyZW5ndGggPSBvcHRpb25zLnN0cmVuZ3RoO1xuICAgICAgICBwYXJhbXMuaW1hZ2VfcmVmZXJlbmNlID0gb3B0aW9ucy5pbWFnZVJlZmVyZW5jZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgaW1hZ2VfY29uZmlnXG4gICAgaWYgKG9wdGlvbnMuaW1hZ2VTaXplKSB7XG4gICAgICAgIHBhcmFtcy5pbWFnZV9jb25maWcgPSB7IGltYWdlX3NpemU6IG9wdGlvbnMuaW1hZ2VTaXplIH07XG4gICAgfVxuXG4gICAgLy8gQWR2YW5jZWQgaW1hZ2UgcmVmZXJlbmNlcyAoZ2VuZXJhdGUgb25seSlcbiAgICBpZiAob3BlcmF0aW9uID09PSAnZ2VuZXJhdGUnKSB7XG4gICAgICAgIGNvbnN0IHN1YmplY3RJbWFnZVVybHMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3N1YmplY3RJbWFnZVVybHMnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHNjZW5lSW1hZ2VVcmwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3NjZW5lSW1hZ2VVcmwnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHN0eWxlSW1hZ2VVcmwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3N0eWxlSW1hZ2VVcmwnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG5cbiAgICAgICAgLy8gU3ViamVjdCByZWZlcmVuY2UgaW1hZ2VzXG4gICAgICAgIGlmIChzdWJqZWN0SW1hZ2VVcmxzKSB7XG4gICAgICAgICAgICBjb25zdCB1cmxzID0gc3ViamVjdEltYWdlVXJscy5zcGxpdCgnLCcpLm1hcCh1ID0+IHUudHJpbSgpKS5maWx0ZXIodSA9PiB1KTtcbiAgICAgICAgICAgIGlmICh1cmxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMuc3ViamVjdF9pbWFnZV9saXN0ID0gdXJscy5tYXAoaW1hZ2UgPT4gKHsgaW1hZ2UsIGltYWdlX3R5cGU6ICdzdWJqZWN0JyB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTY2VuZSByZWZlcmVuY2UgaW1hZ2VcbiAgICAgICAgaWYgKHNjZW5lSW1hZ2VVcmwpIHtcbiAgICAgICAgICAgIHBhcmFtcy5zY2VuZV9pbWFnZSA9IHsgaW1hZ2U6IHNjZW5lSW1hZ2VVcmwgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0eWxlIHJlZmVyZW5jZSBpbWFnZVxuICAgICAgICBpZiAoc3R5bGVJbWFnZVVybCkge1xuICAgICAgICAgICAgcGFyYW1zLnN0eWxlX2ltYWdlID0geyBpbWFnZTogc3R5bGVJbWFnZVVybCB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdDogYW55O1xuICAgIGlmIChvcGVyYXRpb24gPT09ICdnZW5lcmF0ZScpIHtcbiAgICAgICAgY29uc3QgY3JlYXRlUmVzdWx0ID0gYXdhaXQgY2xpZW50LmltYWdlLmdlbmVyYXRlKHBhcmFtcyk7XG4gICAgICAgIGlmICh3YWl0Rm9yQ29tcGxldGlvbikge1xuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgY2xpZW50LmltYWdlLndhaXRGb3JSZXN1bHQoY3JlYXRlUmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGNyZWF0ZVJlc3VsdDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IGNsaWVudC5pbWFnZS5lZGl0KHBhcmFtcyk7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgYmluYXJ5IGRhdGEgZnJvbSBiYXNlNjQgaW1hZ2VzXG4gICAgY29uc3QgYmluYXJ5OiBJQmluYXJ5S2V5RGF0YSA9IHt9O1xuICAgIGNvbnN0IGltYWdlczogYW55W10gPSBbXTtcblxuICAgIGlmIChyZXN1bHQuZGF0YSAmJiBBcnJheS5pc0FycmF5KHJlc3VsdC5kYXRhKSkge1xuICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCByZXN1bHQuZGF0YS5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbWcgPSByZXN1bHQuZGF0YVtpZHhdO1xuICAgICAgICAgICAgaW1hZ2VzLnB1c2goe1xuICAgICAgICAgICAgICAgIHVybDogaW1nLnVybCB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgaW5kZXg6IGltZy5pbmRleCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBDb252ZXJ0IGJhc2U2NCB0byBiaW5hcnkgZGF0YSBmb3IgZG93bnN0cmVhbSB1c2FnZVxuICAgICAgICAgICAgaWYgKGltZy5iNjRfanNvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGltZy5iNjRfanNvbiwgJ2Jhc2U2NCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpbmFyeUtleSA9IGlkeCA9PT0gMCA/ICdkYXRhJyA6IGBkYXRhXyR7aWR4fWA7XG4gICAgICAgICAgICAgICAgYmluYXJ5W2JpbmFyeUtleV0gPSBhd2FpdCBjb250ZXh0LmhlbHBlcnMucHJlcGFyZUJpbmFyeURhdGEoXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgYGltYWdlXyR7aWR4fS4ke3Jlc3VsdC5vdXRwdXRfZm9ybWF0IHx8ICdwbmcnfWAsXG4gICAgICAgICAgICAgICAgICAgIGBpbWFnZS8ke3Jlc3VsdC5vdXRwdXRfZm9ybWF0IHx8ICdwbmcnfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAganNvbjoge1xuICAgICAgICAgICAgaW1hZ2VzLFxuICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzIHx8ICd1bmtub3duJyxcbiAgICAgICAgICAgIHRhc2tJZDogcmVzdWx0LnRhc2tfaWQsXG4gICAgICAgICAgICBpc1N5bmM6IHJlc3VsdC5pc1N5bmMsXG4gICAgICAgICAgICBpbWFnZUNvdW50OiBpbWFnZXMubGVuZ3RoLFxuICAgICAgICAgICAgX3JhdzogcmVzdWx0LFxuICAgICAgICB9LFxuICAgICAgICBiaW5hcnk6IE9iamVjdC5rZXlzKGJpbmFyeSkubGVuZ3RoID4gMCA/IGJpbmFyeSA6IHVuZGVmaW5lZCxcbiAgICB9O1xufVxuXG4vLyBWaWRlbyBoYW5kbGVyXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVWaWRlbyhcbiAgICBjb250ZXh0OiBJRXhlY3V0ZUZ1bmN0aW9ucyxcbiAgICBjbGllbnQ6IFFpbml1QUksXG4gICAgaXRlbUluZGV4OiBudW1iZXJcbik6IFByb21pc2U8SURhdGFPYmplY3Q+IHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wZXJhdGlvbicsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2dldFN0YXR1cycpIHtcbiAgICAgICAgY29uc3QgdGFza0lkID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCd0YXNrSWQnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnZpZGVvLmdldCh0YXNrSWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgIHZpZGVvczogcmVzdWx0LnRhc2tfcmVzdWx0Py52aWRlb3MgfHwgW10sXG4gICAgICAgICAgICBtZXNzYWdlOiByZXN1bHQubWVzc2FnZSxcbiAgICAgICAgICAgIF9yYXc6IHJlc3VsdCBhcyB1bmtub3duIGFzIElEYXRhT2JqZWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcGVyYXRpb24gPT09ICdyZW1peCcpIHtcbiAgICAgICAgY29uc3Qgc291cmNlVmlkZW9JZCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignc291cmNlVmlkZW9JZCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCByZW1peFByb21wdCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigncmVtaXhQcm9tcHQnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHdhaXRGb3JDb21wbGV0aW9uID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCd3YWl0Rm9yQ29tcGxldGlvbicsIGl0ZW1JbmRleCwgdHJ1ZSkgYXMgYm9vbGVhbjtcbiAgICAgICAgY29uc3QgcmVtaXhPcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdyZW1peE9wdGlvbnMnLCBpdGVtSW5kZXgsIHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgICAgICBjb25zdCByZW1peFBhcmFtczogYW55ID0ge307XG4gICAgICAgIGlmIChyZW1peFByb21wdCkgcmVtaXhQYXJhbXMucHJvbXB0ID0gcmVtaXhQcm9tcHQ7XG4gICAgICAgIGlmIChyZW1peE9wdGlvbnMuZHVyYXRpb24pIHJlbWl4UGFyYW1zLmR1cmF0aW9uID0gcmVtaXhPcHRpb25zLmR1cmF0aW9uO1xuICAgICAgICBpZiAocmVtaXhPcHRpb25zLm1vZGUpIHJlbWl4UGFyYW1zLm1vZGUgPSByZW1peE9wdGlvbnMubW9kZTtcbiAgICAgICAgaWYgKHJlbWl4T3B0aW9ucy5uZWdhdGl2ZVByb21wdCkgcmVtaXhQYXJhbXMubmVnYXRpdmVfcHJvbXB0ID0gcmVtaXhPcHRpb25zLm5lZ2F0aXZlUHJvbXB0O1xuXG4gICAgICAgIGNvbnN0IHRhc2sgPSBhd2FpdCBjbGllbnQudmlkZW8ucmVtaXgoc291cmNlVmlkZW9JZCwgcmVtaXhQYXJhbXMpO1xuXG4gICAgICAgIGlmICh3YWl0Rm9yQ29tcGxldGlvbikge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnZpZGVvLndhaXRGb3JDb21wbGV0aW9uKHRhc2suaWQpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogcmVzdWx0LmlkLFxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgICAgICB2aWRlb3M6IHJlc3VsdC50YXNrX3Jlc3VsdD8udmlkZW9zIHx8IFtdLFxuICAgICAgICAgICAgICAgIF9yYXc6IHJlc3VsdCBhcyB1bmtub3duIGFzIElEYXRhT2JqZWN0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogdGFzay5pZCxcbiAgICAgICAgICAgIHN0YXR1czogJ3Byb2Nlc3NpbmcnLFxuICAgICAgICAgICAgX3JhdzogdGFzayxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZVxuICAgIGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdtb2RlbCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHByb21wdCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigncHJvbXB0JywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgd2FpdEZvckNvbXBsZXRpb24gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3dhaXRGb3JDb21wbGV0aW9uJywgaXRlbUluZGV4LCB0cnVlKSBhcyBib29sZWFuO1xuICAgIGNvbnN0IGZpcnN0RnJhbWVVcmwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2ZpcnN0RnJhbWVVcmwnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgZmlyc3RGcmFtZUJpbmFyeVByb3BlcnR5ID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdmaXJzdEZyYW1lQmluYXJ5UHJvcGVydHknLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgbGFzdEZyYW1lVXJsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdsYXN0RnJhbWVVcmwnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgbGFzdEZyYW1lQmluYXJ5UHJvcGVydHkgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2xhc3RGcmFtZUJpbmFyeVByb3BlcnR5JywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdhc3BlY3RSYXRpbycsIGl0ZW1JbmRleCwgJzE2OjknKSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3B0aW9ucycsIGl0ZW1JbmRleCwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICAgIG1vZGVsLFxuICAgICAgICBwcm9tcHQsXG4gICAgICAgIG5lZ2F0aXZlX3Byb21wdDogb3B0aW9ucy5uZWdhdGl2ZVByb21wdCxcbiAgICAgICAgYXNwZWN0X3JhdGlvOiBhc3BlY3RSYXRpbyxcbiAgICB9O1xuXG4gICAgLy8gRnJhbWUgY29udHJvbCAtIHN1cHBvcnQgYm90aCBVUkwgYW5kIEJpbmFyeSBEYXRhXG4gICAgY29uc3QgZnJhbWVzOiBhbnkgPSB7fTtcblxuICAgIC8vIEZpcnN0IGZyYW1lXG4gICAgaWYgKGZpcnN0RnJhbWVVcmwpIHtcbiAgICAgICAgZnJhbWVzLmZpcnN0ID0geyB1cmw6IGZpcnN0RnJhbWVVcmwgfTtcbiAgICB9IGVsc2UgaWYgKGZpcnN0RnJhbWVCaW5hcnlQcm9wZXJ0eSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY29udGV4dC5oZWxwZXJzLmdldEJpbmFyeURhdGFCdWZmZXIoaXRlbUluZGV4LCBmaXJzdEZyYW1lQmluYXJ5UHJvcGVydHkpO1xuICAgICAgICAgICAgZnJhbWVzLmZpcnN0ID0geyBiYXNlNjQ6IGJ1ZmZlci50b1N0cmluZygnYmFzZTY0JykgfTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBCaW5hcnkgZGF0YSBub3QgZm91bmQsIHNraXBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIExhc3QgZnJhbWVcbiAgICBpZiAobGFzdEZyYW1lVXJsKSB7XG4gICAgICAgIGZyYW1lcy5sYXN0ID0geyB1cmw6IGxhc3RGcmFtZVVybCB9O1xuICAgIH0gZWxzZSBpZiAobGFzdEZyYW1lQmluYXJ5UHJvcGVydHkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGNvbnRleHQuaGVscGVycy5nZXRCaW5hcnlEYXRhQnVmZmVyKGl0ZW1JbmRleCwgbGFzdEZyYW1lQmluYXJ5UHJvcGVydHkpO1xuICAgICAgICAgICAgZnJhbWVzLmxhc3QgPSB7IGJhc2U2NDogYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKSB9O1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEJpbmFyeSBkYXRhIG5vdCBmb3VuZCwgc2tpcFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGZyYW1lcykubGVuZ3RoID4gMCkge1xuICAgICAgICBwYXJhbXMuZnJhbWVzID0gZnJhbWVzO1xuICAgIH1cblxuICAgIC8vIFZpZGVvIHJlZmVyZW5jZSAodmlkZW9fbGlzdCkgZm9yIHZpZGVvLXRvLXZpZGVvIGdlbmVyYXRpb25cbiAgICBjb25zdCB2aWRlb1JlZmVyZW5jZVVybCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigndmlkZW9SZWZlcmVuY2VVcmwnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgY29uc3Qga2VlcE9yaWdpbmFsU291bmQgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2tlZXBPcmlnaW5hbFNvdW5kJywgaXRlbUluZGV4LCBmYWxzZSkgYXMgYm9vbGVhbjtcbiAgICBpZiAodmlkZW9SZWZlcmVuY2VVcmwpIHtcbiAgICAgICAgcGFyYW1zLnZpZGVvX2xpc3QgPSBbe1xuICAgICAgICAgICAgdmlkZW9fdXJsOiB2aWRlb1JlZmVyZW5jZVVybCxcbiAgICAgICAgICAgIGtlZXBfb3JpZ2luYWxfc291bmQ6IGtlZXBPcmlnaW5hbFNvdW5kID8gJ3llcycgOiAnbm8nLFxuICAgICAgICB9XTtcbiAgICB9XG5cbiAgICAvLyBNb2RlbC1zcGVjaWZpYyBvcHRpb25zXG4gICAgaWYgKG1vZGVsLmluY2x1ZGVzKCdrbGluZycpKSB7XG4gICAgICAgIGNvbnN0IGtsaW5nT3B0aW9ucyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigna2xpbmdPcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIC8vIER1cmF0aW9uIGlzIHJlcXVpcmVkIGZvciBLbGluZyAtIGRlZmF1bHQgdG8gNSBzZWNvbmRzXG4gICAgICAgIHBhcmFtcy5kdXJhdGlvbiA9IGtsaW5nT3B0aW9ucy5kdXJhdGlvbiB8fCAnNSc7XG4gICAgICAgIGlmIChrbGluZ09wdGlvbnMubW9kZSkgcGFyYW1zLm1vZGUgPSBrbGluZ09wdGlvbnMubW9kZTtcbiAgICAgICAgaWYgKGtsaW5nT3B0aW9ucy5jZmdTY2FsZSkgcGFyYW1zLmNmZ19zY2FsZSA9IGtsaW5nT3B0aW9ucy5jZmdTY2FsZTtcblxuICAgICAgICAvLyBVc2Ugc2l6ZSBmcm9tIG9wdGlvbnMsIG9yIGRlcml2ZSBmcm9tIGFzcGVjdF9yYXRpbyAod29ya2Fyb3VuZCBmb3IgU0RLIGJ1ZylcbiAgICAgICAgaWYgKGtsaW5nT3B0aW9ucy5zaXplKSB7XG4gICAgICAgICAgICBwYXJhbXMuc2l6ZSA9IGtsaW5nT3B0aW9ucy5zaXplO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTWFwIGFzcGVjdF9yYXRpbyB0byBkZWZhdWx0IHNpemUgZm9yIEtsaW5nIEFQSVxuICAgICAgICAgICAgY29uc3Qgc2l6ZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgICAgICAgICAnMTY6OSc6ICcxOTIwOjEwODAnLFxuICAgICAgICAgICAgICAgICc5OjE2JzogJzEwODA6MTkyMCcsXG4gICAgICAgICAgICAgICAgJzE6MSc6ICcxMDgwOjEwODAnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHBhcmFtcy5zaXplID0gc2l6ZU1hcFthc3BlY3RSYXRpb10gfHwgJzE5MjA6MTA4MCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobW9kZWwuaW5jbHVkZXMoJ3ZlbycpKSB7XG4gICAgICAgIGNvbnN0IHZlb09wdGlvbnMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3Zlb09wdGlvbnMnLCBpdGVtSW5kZXgsIHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgLy8gRHVyYXRpb25TZWNvbmRzIGlzIHJlcXVpcmVkIGZvciBWZW8gLSBmaXhlZCBhdCA4IHNlY29uZHNcbiAgICAgICAgcGFyYW1zLmR1cmF0aW9uID0gdmVvT3B0aW9ucy5kdXJhdGlvbiB8fCA4O1xuICAgICAgICBpZiAodmVvT3B0aW9ucy5nZW5lcmF0ZUF1ZGlvICE9PSB1bmRlZmluZWQpIHBhcmFtcy5nZW5lcmF0ZV9hdWRpbyA9IHZlb09wdGlvbnMuZ2VuZXJhdGVBdWRpbztcbiAgICAgICAgaWYgKHZlb09wdGlvbnMucmVzb2x1dGlvbikgcGFyYW1zLnJlc29sdXRpb24gPSB2ZW9PcHRpb25zLnJlc29sdXRpb247XG4gICAgICAgIGlmICh2ZW9PcHRpb25zLnNhbXBsZUNvdW50KSBwYXJhbXMuc2FtcGxlX2NvdW50ID0gdmVvT3B0aW9ucy5zYW1wbGVDb3VudDtcbiAgICAgICAgaWYgKHZlb09wdGlvbnMucGVyc29uR2VuZXJhdGlvbikgcGFyYW1zLnBlcnNvbl9nZW5lcmF0aW9uID0gdmVvT3B0aW9ucy5wZXJzb25HZW5lcmF0aW9uO1xuICAgICAgICBpZiAodmVvT3B0aW9ucy5zZWVkKSBwYXJhbXMuc2VlZCA9IHZlb09wdGlvbnMuc2VlZDtcbiAgICB9XG5cbiAgICBjb25zdCB0YXNrID0gYXdhaXQgY2xpZW50LnZpZGVvLmNyZWF0ZShwYXJhbXMpO1xuXG4gICAgaWYgKHdhaXRGb3JDb21wbGV0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC52aWRlby53YWl0Rm9yQ29tcGxldGlvbih0YXNrLmlkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiByZXN1bHQuaWQsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgICAgICAgICB2aWRlb3M6IHJlc3VsdC50YXNrX3Jlc3VsdD8udmlkZW9zIHx8IFtdLFxuICAgICAgICAgICAgX3JhdzogcmVzdWx0IGFzIHVua25vd24gYXMgSURhdGFPYmplY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHRhc2suaWQsXG4gICAgICAgIHN0YXR1czogJ3Byb2Nlc3NpbmcnLFxuICAgICAgICBfcmF3OiB0YXNrLFxuICAgIH07XG59XG5cbi8vIEFnZW50IGhhbmRsZXJcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUFnZW50KFxuICAgIGNvbnRleHQ6IElFeGVjdXRlRnVuY3Rpb25zLFxuICAgIGNsaWVudDogUWluaXVBSSxcbiAgICBpdGVtSW5kZXg6IG51bWJlclxuKTogUHJvbWlzZTxJRGF0YU9iamVjdD4ge1xuICAgIGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdtb2RlbCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHByb21wdCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigncHJvbXB0JywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgc3lzdGVtTWVzc2FnZSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignc3lzdGVtTWVzc2FnZScsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMge1xuICAgICAgICBtYXhDb250ZXh0VG9rZW5zPzogbnVtYmVyO1xuICAgICAgICBtYXhTdGVwcz86IG51bWJlcjtcbiAgICAgICAgdGhyZWFkSWQ/OiBzdHJpbmc7XG4gICAgICAgIHRvb2xzPzogc3RyaW5nO1xuICAgICAgICB0ZW1wZXJhdHVyZT86IG51bWJlcjtcbiAgICB9O1xuXG4gICAgLy8gUGFyc2UgdG9vbHMgLSBjb252ZXJ0IGFycmF5IHRvIFJlY29yZDxzdHJpbmcsIFRvb2w+XG4gICAgbGV0IHRvb2xzUmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkO1xuICAgIGlmIChvcHRpb25zLnRvb2xzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0b29sc0FycmF5ID0gSlNPTi5wYXJzZShvcHRpb25zLnRvb2xzKTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRvb2xzQXJyYXkpICYmIHRvb2xzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRvb2xzUmVjb3JkID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB0b29sIG9mIHRvb2xzQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRvb2wuZnVuY3Rpb24/Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xzUmVjb3JkW3Rvb2wuZnVuY3Rpb24ubmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRvb2wuZnVuY3Rpb24uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdG9vbC5mdW5jdGlvbi5wYXJhbWV0ZXJzIHx8IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGU6IGFzeW5jIChfYXJnczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvb2xzIGV4ZWN1dGVkIGJ5IHRoZSBhZ2VudCAtIHdlIHJldHVybiBhIHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdDogJ1Rvb2wgZXhlY3V0aW9uIG5vdCBpbXBsZW1lbnRlZCBpbiBuOG4gbm9kZScgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTm9kZU9wZXJhdGlvbkVycm9yKFxuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgICAgICdJbnZhbGlkIHRvb2xzIEpTT04gZm9ybWF0JyxcbiAgICAgICAgICAgICAgICB7IGl0ZW1JbmRleCB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2VuZXJhdGVUZXh0V2l0aEdyYXBoKHtcbiAgICAgICAgY2xpZW50LFxuICAgICAgICBtb2RlbCxcbiAgICAgICAgcHJvbXB0LFxuICAgICAgICBzeXN0ZW06IHN5c3RlbU1lc3NhZ2UgfHwgdW5kZWZpbmVkLFxuICAgICAgICBtYXhDb250ZXh0VG9rZW5zOiBvcHRpb25zLm1heENvbnRleHRUb2tlbnMgfHwgMzIwMDAsXG4gICAgICAgIG1heFN0ZXBzOiBvcHRpb25zLm1heFN0ZXBzIHx8IDEwLFxuICAgICAgICB0ZW1wZXJhdHVyZTogb3B0aW9ucy50ZW1wZXJhdHVyZSxcbiAgICAgICAgdG9vbHM6IHRvb2xzUmVjb3JkLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogcmVzdWx0LnRleHQgfHwgJycsXG4gICAgICAgIHN0ZXBzOiByZXN1bHQuc3RlcHM/Lm1hcCgoc3RlcDogYW55KSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogc3RlcC50eXBlLFxuICAgICAgICAgICAgdG9vbE5hbWU6IHN0ZXAudG9vbE5hbWUsXG4gICAgICAgICAgICB0b29sQXJnczogc3RlcC50b29sQXJncyxcbiAgICAgICAgICAgIHRvb2xSZXN1bHQ6IHN0ZXAudG9vbFJlc3VsdCxcbiAgICAgICAgICAgIHRleHQ6IHN0ZXAudGV4dCxcbiAgICAgICAgfSkpIHx8IFtdLFxuICAgICAgICB1c2FnZTogcmVzdWx0LnVzYWdlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBwcm9tcHRUb2tlbnM6IHJlc3VsdC51c2FnZS5wcm9tcHRfdG9rZW5zLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRpb25Ub2tlbnM6IHJlc3VsdC51c2FnZS5jb21wbGV0aW9uX3Rva2VucyxcbiAgICAgICAgICAgICAgICB0b3RhbFRva2VuczogcmVzdWx0LnVzYWdlLnRvdGFsX3Rva2VucyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgX3JhdzogcmVzdWx0IGFzIHVua25vd24gYXMgSURhdGFPYmplY3QsXG4gICAgfTtcbn1cblxuLy8gQXVkaW8gaGFuZGxlclxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQXVkaW8oXG4gICAgY29udGV4dDogSUV4ZWN1dGVGdW5jdGlvbnMsXG4gICAgY2xpZW50OiBRaW5pdUFJLFxuICAgIGl0ZW1JbmRleDogbnVtYmVyXG4pOiBQcm9taXNlPElEYXRhT2JqZWN0PiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcGVyYXRpb24nLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcblxuICAgIGlmIChvcGVyYXRpb24gPT09ICd0ZXh0VG9TcGVlY2gnKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3RleHQnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3Qgdm9pY2UgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3ZvaWNlJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wdGlvbnMnLCBpdGVtSW5kZXgsIHt9KSBhcyB7XG4gICAgICAgICAgICBlbmNvZGluZz86IHN0cmluZztcbiAgICAgICAgICAgIHNwZWVkUmF0aW8/OiBudW1iZXI7XG4gICAgICAgICAgICB2b2x1bWU/OiBudW1iZXI7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnR0cy5zeW50aGVzaXplKHtcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICB2b2ljZV90eXBlOiB2b2ljZSxcbiAgICAgICAgICAgIGVuY29kaW5nOiBvcHRpb25zLmVuY29kaW5nIGFzIGFueSxcbiAgICAgICAgICAgIHNwZWVkX3JhdGlvOiBvcHRpb25zLnNwZWVkUmF0aW8sXG4gICAgICAgICAgICB2b2x1bWU6IG9wdGlvbnMudm9sdW1lLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZXR1cm4gYXVkaW8gYXMgYmluYXJ5IGRhdGFcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF1ZGlvOiByZXN1bHQuYXVkaW8sXG4gICAgICAgICAgICBkdXJhdGlvbjogcmVzdWx0LmR1cmF0aW9uLFxuICAgICAgICAgICAgX3JhdzogcmVzdWx0IGFzIHVua25vd24gYXMgSURhdGFPYmplY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gJ3NwZWVjaFRvVGV4dCcpIHtcbiAgICAgICAgY29uc3QgYmluYXJ5UHJvcGVydHlOYW1lID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdiaW5hcnlQcm9wZXJ0eU5hbWUnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgYXVkaW9Gb3JtYXQgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2F1ZGlvRm9ybWF0JywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG5cbiAgICAgICAgLy8gR2V0IGJpbmFyeSBkYXRhXG4gICAgICAgIGNvbnRleHQuaGVscGVycy5hc3NlcnRCaW5hcnlEYXRhKGl0ZW1JbmRleCwgYmluYXJ5UHJvcGVydHlOYW1lKTtcbiAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY29udGV4dC5oZWxwZXJzLmdldEJpbmFyeURhdGFCdWZmZXIoaXRlbUluZGV4LCBiaW5hcnlQcm9wZXJ0eU5hbWUpO1xuICAgICAgICBjb25zdCBiYXNlNjRBdWRpbyA9IGJ1ZmZlci50b1N0cmluZygnYmFzZTY0Jyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LmFzci50cmFuc2NyaWJlKHtcbiAgICAgICAgICAgIGF1ZGlvOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBhdWRpb0Zvcm1hdCBhcyBhbnksXG4gICAgICAgICAgICAgICAgZGF0YTogYmFzZTY0QXVkaW8sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dDogcmVzdWx0LnRleHQgfHwgJycsXG4gICAgICAgICAgICB3b3JkczogcmVzdWx0LndvcmRzIHx8IFtdLFxuICAgICAgICAgICAgX3JhdzogcmVzdWx0IGFzIHVua25vd24gYXMgSURhdGFPYmplY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IE5vZGVPcGVyYXRpb25FcnJvcihcbiAgICAgICAgY29udGV4dC5nZXROb2RlKCksXG4gICAgICAgIGBVbmtub3duIGF1ZGlvIG9wZXJhdGlvbjogJHtvcGVyYXRpb259YCxcbiAgICAgICAgeyBpdGVtSW5kZXggfVxuICAgICk7XG59XG5cbi8vIFRvb2xzIGhhbmRsZXJcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVRvb2xzKFxuICAgIGNvbnRleHQ6IElFeGVjdXRlRnVuY3Rpb25zLFxuICAgIGNsaWVudDogUWluaXVBSSxcbiAgICBpdGVtSW5kZXg6IG51bWJlclxuKTogUHJvbWlzZTxJRGF0YU9iamVjdD4ge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3BlcmF0aW9uJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSAnd2ViU2VhcmNoJykge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigncXVlcnknLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3B0aW9ucycsIGl0ZW1JbmRleCwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgICAgIGNvbnN0IHNlYXJjaFBhcmFtczoge1xuICAgICAgICAgICAgcXVlcnk6IHN0cmluZztcbiAgICAgICAgICAgIG1heF9yZXN1bHRzPzogbnVtYmVyO1xuICAgICAgICAgICAgc2VhcmNoX3R5cGU/OiAnd2ViJyB8ICduZXdzJztcbiAgICAgICAgICAgIHRpbWVfZmlsdGVyPzogJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInO1xuICAgICAgICAgICAgc2l0ZV9maWx0ZXI/OiBzdHJpbmdbXTtcbiAgICAgICAgfSA9IHsgcXVlcnkgfTtcblxuICAgICAgICBpZiAob3B0aW9ucy5tYXhSZXN1bHRzKSBzZWFyY2hQYXJhbXMubWF4X3Jlc3VsdHMgPSBvcHRpb25zLm1heFJlc3VsdHMgYXMgbnVtYmVyO1xuICAgICAgICBpZiAob3B0aW9ucy5zZWFyY2hUeXBlKSBzZWFyY2hQYXJhbXMuc2VhcmNoX3R5cGUgPSBvcHRpb25zLnNlYXJjaFR5cGUgYXMgJ3dlYicgfCAnbmV3cyc7XG4gICAgICAgIGlmIChvcHRpb25zLnRpbWVGaWx0ZXIpIHNlYXJjaFBhcmFtcy50aW1lX2ZpbHRlciA9IG9wdGlvbnMudGltZUZpbHRlciBhcyAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcic7XG4gICAgICAgIGlmIChvcHRpb25zLnNpdGVGaWx0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpdGVzID0gKG9wdGlvbnMuc2l0ZUZpbHRlciBhcyBzdHJpbmcpLnNwbGl0KCcsJykubWFwKHMgPT4gcy50cmltKCkpLmZpbHRlcihzID0+IHMpO1xuICAgICAgICAgICAgaWYgKHNpdGVzLmxlbmd0aCA+IDApIHNlYXJjaFBhcmFtcy5zaXRlX2ZpbHRlciA9IHNpdGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGNsaWVudC5zeXMuc2VhcmNoKHNlYXJjaFBhcmFtcyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc3VsdHM6IHJlc3VsdHMgfHwgW10sXG4gICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgIF9yYXc6IHJlc3VsdHMgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSAnb2NyJykge1xuICAgICAgICBjb25zdCBpbWFnZVVybCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignaW1hZ2VVcmwnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IGJpbmFyeVByb3BlcnR5TmFtZSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignYmluYXJ5UHJvcGVydHlOYW1lJywgaXRlbUluZGV4LCAnZGF0YScpIGFzIHN0cmluZztcblxuICAgICAgICBsZXQgb2NyUGFyYW1zOiB7IHVybD86IHN0cmluZzsgaW1hZ2U/OiBzdHJpbmcgfTtcblxuICAgICAgICBpZiAoaW1hZ2VVcmwpIHtcbiAgICAgICAgICAgIC8vIFVzZSBVUkwgZGlyZWN0bHlcbiAgICAgICAgICAgIG9jclBhcmFtcyA9IHsgdXJsOiBpbWFnZVVybCB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gR2V0IGZyb20gYmluYXJ5IGFuZCBjcmVhdGUgZGF0YSBVUkxcbiAgICAgICAgICAgIGNvbnN0IGJpbmFyeURhdGEgPSBjb250ZXh0LmhlbHBlcnMuYXNzZXJ0QmluYXJ5RGF0YShpdGVtSW5kZXgsIGJpbmFyeVByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBjb250ZXh0LmhlbHBlcnMuZ2V0QmluYXJ5RGF0YUJ1ZmZlcihpdGVtSW5kZXgsIGJpbmFyeVByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICBjb25zdCBtaW1lVHlwZSA9IGJpbmFyeURhdGEubWltZVR5cGUgfHwgJ2ltYWdlL3BuZyc7XG4gICAgICAgICAgICBjb25zdCBiYXNlNjREYXRhID0gYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgICAgICAgIC8vIEZvcm1hdDogZGF0YTppbWFnZS9wbmc7YmFzZTY0LDxiYXNlNjRfZGF0YT5cbiAgICAgICAgICAgIG9jclBhcmFtcyA9IHsgaW1hZ2U6IGBkYXRhOiR7bWltZVR5cGV9O2Jhc2U2NCwke2Jhc2U2NERhdGF9YCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50Lm9jci5kZXRlY3Qob2NyUGFyYW1zKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dDogcmVzdWx0LnRleHQgfHwgJycsXG4gICAgICAgICAgICBibG9ja3M6IHJlc3VsdC5ibG9ja3MgfHwgW10sXG4gICAgICAgICAgICBfcmF3OiByZXN1bHQgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgTm9kZU9wZXJhdGlvbkVycm9yKFxuICAgICAgICBjb250ZXh0LmdldE5vZGUoKSxcbiAgICAgICAgYFVua25vd24gdG9vbHMgb3BlcmF0aW9uOiAke29wZXJhdGlvbn1gLFxuICAgICAgICB7IGl0ZW1JbmRleCB9XG4gICAgKTtcbn1cbiJdfQ==
699
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUWluaXVBaS5ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZXMvUWluaXVBaS9RaW5pdUFpLm5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0NBUXNCO0FBRXRCLHdEQUFpRjtBQUVqRixvRUFBNEU7QUFDNUUsc0VBQStFO0FBQy9FLHNFQUErRTtBQUMvRSxzRUFBK0U7QUFDL0Usc0VBQStFO0FBQy9FLHNFQUErRTtBQUUvRSxNQUFhLE9BQU87SUFBcEI7UUFDSSxnQkFBVyxHQUF5QjtZQUNoQyxXQUFXLEVBQUUsVUFBVTtZQUN2QixJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRSxnQkFBZ0I7WUFDdEIsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxDQUFDO1lBQ1YsUUFBUSxFQUFFLDhEQUE4RDtZQUN4RSxXQUFXLEVBQUUsc0VBQXNFO1lBQ25GLFFBQVEsRUFBRTtnQkFDTixJQUFJLEVBQUUsVUFBVTthQUNuQjtZQUNELE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNoQixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFO2dCQUNUO29CQUNJLElBQUksRUFBRSxZQUFZO29CQUNsQixRQUFRLEVBQUUsSUFBSTtpQkFDakI7YUFDSjtZQUNELFVBQVUsRUFBRTtnQkFDUixXQUFXO2dCQUNYO29CQUNJLFdBQVcsRUFBRSxVQUFVO29CQUN2QixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsZ0JBQWdCLEVBQUUsSUFBSTtvQkFDdEIsT0FBTyxFQUFFO3dCQUNMOzRCQUNJLElBQUksRUFBRSxNQUFNOzRCQUNaLEtBQUssRUFBRSxNQUFNOzRCQUNiLFdBQVcsRUFBRSwyQkFBMkI7eUJBQzNDO3dCQUNEOzRCQUNJLElBQUksRUFBRSxPQUFPOzRCQUNiLEtBQUssRUFBRSxPQUFPOzRCQUNkLFdBQVcsRUFBRSx5QkFB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QUFrQixDQUFDLENBQUM7WUFDeEYsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUM7WUFDcEQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3Qyw4Q0FBOEM7WUFDOUMsU0FBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsUUFBUSxXQUFXLFVBQVUsRUFBRSxFQUFFLENBQUM7UUFDbkUsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFbEQsT0FBTztZQUNILElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDdkIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRTtZQUMzQixJQUFJLEVBQUUsTUFBZ0M7U0FDekMsQ0FBQztJQUNOLENBQUM7SUFFRCxNQUFNLElBQUksaUNBQWtCLENBQ3hCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFDakIsNEJBQTRCLFNBQVMsRUFBRSxFQUN2QyxFQUFFLFNBQVMsRUFBRSxDQUNoQixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgSUV4ZWN1dGVGdW5jdGlvbnMsXG4gICAgSU5vZGVFeGVjdXRpb25EYXRhLFxuICAgIElOb2RlVHlwZSxcbiAgICBJTm9kZVR5cGVEZXNjcmlwdGlvbixcbiAgICBOb2RlT3BlcmF0aW9uRXJyb3IsXG4gICAgSURhdGFPYmplY3QsXG4gICAgSUJpbmFyeUtleURhdGEsXG59IGZyb20gJ244bi13b3JrZmxvdyc7XG5cbmltcG9ydCB7IFFpbml1QUksIGdlbmVyYXRlVGV4dFdpdGhHcmFwaCwgQVBJRXJyb3IgfSBmcm9tICdAYm93ZW5xdC9xaW5pdS1haS1zZGsnO1xuXG5pbXBvcnQgeyBjaGF0T3BlcmF0aW9ucywgY2hhdEZpZWxkcyB9IGZyb20gJy4vZGVzY3JpcHRpb25zL0NoYXREZXNjcmlwdGlvbic7XG5pbXBvcnQgeyBpbWFnZU9wZXJhdGlvbnMsIGltYWdlRmllbGRzIH0gZnJvbSAnLi9kZXNjcmlwdGlvbnMvSW1hZ2VEZXNjcmlwdGlvbic7XG5pbXBvcnQgeyB2aWRlb09wZXJhdGlvbnMsIHZpZGVvRmllbGRzIH0gZnJvbSAnLi9kZXNjcmlwdGlvbnMvVmlkZW9EZXNjcmlwdGlvbic7XG5pbXBvcnQgeyBhZ2VudE9wZXJhdGlvbnMsIGFnZW50RmllbGRzIH0gZnJvbSAnLi9kZXNjcmlwdGlvbnMvQWdlbnREZXNjcmlwdGlvbic7XG5pbXBvcnQgeyBhdWRpb09wZXJhdGlvbnMsIGF1ZGlvRmllbGRzIH0gZnJvbSAnLi9kZXNjcmlwdGlvbnMvQXVkaW9EZXNjcmlwdGlvbic7XG5pbXBvcnQgeyB0b29sc09wZXJhdGlvbnMsIHRvb2xzRmllbGRzIH0gZnJvbSAnLi9kZXNjcmlwdGlvbnMvVG9vbHNEZXNjcmlwdGlvbic7XG5cbmV4cG9ydCBjbGFzcyBRaW5pdUFpIGltcGxlbWVudHMgSU5vZGVUeXBlIHtcbiAgICBkZXNjcmlwdGlvbjogSU5vZGVUeXBlRGVzY3JpcHRpb24gPSB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnUWluaXUgQUknLFxuICAgICAgICBuYW1lOiAncWluaXVBaScsXG4gICAgICAgIGljb246ICdmaWxlOnFpbml1LnN2ZycsXG4gICAgICAgIGdyb3VwOiBbJ3RyYW5zZm9ybSddLFxuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICBzdWJ0aXRsZTogJz17eyRwYXJhbWV0ZXJbXCJvcGVyYXRpb25cIl0gKyBcIjogXCIgKyAkcGFyYW1ldGVyW1wicmVzb3VyY2VcIl19fScsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJhY3Qgd2l0aCBRaW5pdSBBSSBzZXJ2aWNlcyAtIENoYXQsIEltYWdlLCBWaWRlbywgQWdlbnQgYW5kIG1vcmUnLFxuICAgICAgICBkZWZhdWx0czoge1xuICAgICAgICAgICAgbmFtZTogJ1Fpbml1IEFJJyxcbiAgICAgICAgfSxcbiAgICAgICAgaW5wdXRzOiBbJ21haW4nXSxcbiAgICAgICAgb3V0cHV0czogWydtYWluJ10sXG4gICAgICAgIGNyZWRlbnRpYWxzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3Fpbml1QWlBcGknLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgLy8gUmVzb3VyY2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1Jlc291cmNlJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAncmVzb3VyY2UnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdvcHRpb25zJyxcbiAgICAgICAgICAgICAgICBub0RhdGFFeHByZXNzaW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0NoYXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdjaGF0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgY2hhdCBjb21wbGV0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdJbWFnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ2ltYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgb3IgZWRpdCBpbWFnZXMnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVmlkZW8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICd2aWRlbycsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIHZpZGVvcycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBZ2VudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ2FnZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUnVuIEFJIGFnZW50IHdpdGggdG9vbHMgYW5kIG1lbW9yeScsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBdWRpbycsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ2F1ZGlvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGV4dC10by1TcGVlY2ggYW5kIFNwZWVjaC10by1UZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1Rvb2xzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAndG9vbHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdXZWIgU2VhcmNoLCBPQ1IgYW5kIG1vcmUnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogJ2NoYXQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIE9wZXJhdGlvbnMgYW5kIGZpZWxkc1xuICAgICAgICAgICAgLi4uY2hhdE9wZXJhdGlvbnMsXG4gICAgICAgICAgICAuLi5jaGF0RmllbGRzLFxuICAgICAgICAgICAgLi4uaW1hZ2VPcGVyYXRpb25zLFxuICAgICAgICAgICAgLi4uaW1hZ2VGaWVsZHMsXG4gICAgICAgICAgICAuLi52aWRlb09wZXJhdGlvbnMsXG4gICAgICAgICAgICAuLi52aWRlb0ZpZWxkcyxcbiAgICAgICAgICAgIC4uLmFnZW50T3BlcmF0aW9ucyxcbiAgICAgICAgICAgIC4uLmFnZW50RmllbGRzLFxuICAgICAgICAgICAgLi4uYXVkaW9PcGVyYXRpb25zLFxuICAgICAgICAgICAgLi4uYXVkaW9GaWVsZHMsXG4gICAgICAgICAgICAuLi50b29sc09wZXJhdGlvbnMsXG4gICAgICAgICAgICAuLi50b29sc0ZpZWxkcyxcbiAgICAgICAgXSxcbiAgICB9O1xuXG4gICAgYXN5bmMgZXhlY3V0ZSh0aGlzOiBJRXhlY3V0ZUZ1bmN0aW9ucyk6IFByb21pc2U8SU5vZGVFeGVjdXRpb25EYXRhW11bXT4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SW5wdXREYXRhKCk7XG4gICAgICAgIGNvbnN0IHJldHVybkRhdGE6IElOb2RlRXhlY3V0aW9uRGF0YVtdID0gW107XG5cbiAgICAgICAgLy8gR2V0IGNyZWRlbnRpYWxzXG4gICAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5nZXRDcmVkZW50aWFscygncWluaXVBaUFwaScpO1xuICAgICAgICBjb25zdCBhcGlLZXkgPSBjcmVkZW50aWFscy5hcGlLZXkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBiYXNlVXJsID0gKGNyZWRlbnRpYWxzLmJhc2VVcmwgYXMgc3RyaW5nKSB8fCAnaHR0cHM6Ly9hcGkucW5haWdjLmNvbS92MSc7XG5cbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBjbGllbnRcbiAgICAgICAgY29uc3QgY2xpZW50ID0gbmV3IFFpbml1QUkoeyBhcGlLZXksIGJhc2VVcmwgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmdldE5vZGVQYXJhbWV0ZXIoJ3Jlc291cmNlJywgMCkgYXMgc3RyaW5nO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdDogSURhdGFPYmplY3Q7XG5cbiAgICAgICAgICAgICAgICAvLyBSb3V0ZSB0byBhcHByb3ByaWF0ZSBoYW5kbGVyXG4gICAgICAgICAgICAgICAgaWYgKHJlc291cmNlID09PSAnY2hhdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgaGFuZGxlQ2hhdCh0aGlzLCBjbGllbnQsIGkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2UgPT09ICdpbWFnZScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW1hZ2UgbmVlZHMgc3BlY2lhbCBoYW5kbGluZyBmb3IgYmluYXJ5IG91dHB1dFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZVJlc3VsdCA9IGF3YWl0IGhhbmRsZUltYWdlKHRoaXMsIGNsaWVudCwgaSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybkRhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uOiBpbWFnZVJlc3VsdC5qc29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5OiBpbWFnZVJlc3VsdC5iaW5hcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWlyZWRJdGVtOiB7IGl0ZW06IGkgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2UgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgaGFuZGxlVmlkZW8odGhpcywgY2xpZW50LCBpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNlID09PSAnYWdlbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGhhbmRsZUFnZW50KHRoaXMsIGNsaWVudCwgaSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBoYW5kbGVBdWRpbyh0aGlzLCBjbGllbnQsIGkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2UgPT09ICd0b29scycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgaGFuZGxlVG9vbHModGhpcywgY2xpZW50LCBpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTm9kZU9wZXJhdGlvbkVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBgVW5rbm93biByZXNvdXJjZTogJHtyZXNvdXJjZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBpdGVtSW5kZXg6IGkgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybkRhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGpzb246IHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgcGFpcmVkSXRlbTogeyBpdGVtOiBpIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEFQSUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBOb2RlT3BlcmF0aW9uRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGBRaW5pdSBBSSBBUEkgRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYFN0YXR1czogJHtlcnJvci5zdGF0dXN9LCBDb2RlOiAkeyhlcnJvciBhcyBhbnkpLmNvZGUgfHwgJ3Vua25vd24nfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtyZXR1cm5EYXRhXTtcbiAgICB9XG59XG5cbi8vIENoYXQgaGFuZGxlclxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQ2hhdChcbiAgICBjb250ZXh0OiBJRXhlY3V0ZUZ1bmN0aW9ucyxcbiAgICBjbGllbnQ6IFFpbml1QUksXG4gICAgaXRlbUluZGV4OiBudW1iZXJcbik6IFByb21pc2U8SURhdGFPYmplY3Q+IHtcbiAgICBjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignbW9kZWwnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCBpbnB1dFR5cGUgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2lucHV0VHlwZScsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wdGlvbnMnLCBpdGVtSW5kZXgsIHt9KSBhcyB7XG4gICAgICAgIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xuICAgICAgICBtYXhUb2tlbnM/OiBudW1iZXI7XG4gICAgICAgIGpzb25Nb2RlPzogYm9vbGVhbjtcbiAgICAgICAgdG9wUD86IG51bWJlcjtcbiAgICB9O1xuXG4gICAgLy8gQnVpbGQgbWVzc2FnZXNcbiAgICBsZXQgbWVzc2FnZXM6IEFycmF5PHsgcm9sZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfT4gPSBbXTtcblxuICAgIGlmIChpbnB1dFR5cGUgPT09ICdzaW1wbGUnKSB7XG4gICAgICAgIGNvbnN0IHByb21wdCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigncHJvbXB0JywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHN5c3RlbU1lc3NhZ2UgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3N5c3RlbU1lc3NhZ2UnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG5cbiAgICAgICAgaWYgKHN5c3RlbU1lc3NhZ2UpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2goeyByb2xlOiAnc3lzdGVtJywgY29udGVudDogc3lzdGVtTWVzc2FnZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBtZXNzYWdlcy5wdXNoKHsgcm9sZTogJ3VzZXInLCBjb250ZW50OiBwcm9tcHQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZXNEYXRhID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdtZXNzYWdlcycsIGl0ZW1JbmRleCkgYXMge1xuICAgICAgICAgICAgbWVzc2FnZVZhbHVlcz86IEFycmF5PHsgcm9sZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfT47XG4gICAgICAgIH07XG4gICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXNEYXRhLm1lc3NhZ2VWYWx1ZXMgfHwgW107XG4gICAgfVxuXG4gICAgLy8gQ2FsbCBBUElcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5jaGF0LmNyZWF0ZSh7XG4gICAgICAgIG1vZGVsLFxuICAgICAgICBtZXNzYWdlczogbWVzc2FnZXMgYXMgYW55LFxuICAgICAgICB0ZW1wZXJhdHVyZTogb3B0aW9ucy50ZW1wZXJhdHVyZSxcbiAgICAgICAgbWF4X3Rva2Vuczogb3B0aW9ucy5tYXhUb2tlbnMsXG4gICAgICAgIHRvcF9wOiBvcHRpb25zLnRvcFAsXG4gICAgICAgIHJlc3BvbnNlX2Zvcm1hdDogb3B0aW9ucy5qc29uTW9kZSA/IHsgdHlwZTogJ2pzb25fb2JqZWN0JyB9IDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgLy8gTm9ybWFsaXplIG91dHB1dFxuICAgIGNvbnN0IGNob2ljZSA9IHJlc3BvbnNlLmNob2ljZXM/LlswXTtcbiAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBjaG9pY2U/Lm1lc3NhZ2U/LmNvbnRlbnQgfHwgJycsXG4gICAgICAgIHJvbGU6IGNob2ljZT8ubWVzc2FnZT8ucm9sZSB8fCAnYXNzaXN0YW50JyxcbiAgICAgICAgZmluaXNoUmVhc29uOiBjaG9pY2U/LmZpbmlzaF9yZWFzb24gfHwgbnVsbCxcbiAgICAgICAgdXNhZ2U6IHJlc3BvbnNlLnVzYWdlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBwcm9tcHRUb2tlbnM6IHJlc3BvbnNlLnVzYWdlLnByb21wdF90b2tlbnMsXG4gICAgICAgICAgICAgICAgY29tcGxldGlvblRva2VuczogcmVzcG9uc2UudXNhZ2UuY29tcGxldGlvbl90b2tlbnMsXG4gICAgICAgICAgICAgICAgdG90YWxUb2tlbnM6IHJlc3BvbnNlLnVzYWdlLnRvdGFsX3Rva2VucyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgX3JhdzogcmVzcG9uc2UgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICB9O1xufVxuXG4vLyBJbWFnZSBoYW5kbGVyIC0gcmV0dXJucyB7IGpzb24sIGJpbmFyeSB9IGZvciBwcm9wZXIgbjhuIGJpbmFyeSBkYXRhIGhhbmRsaW5nXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVJbWFnZShcbiAgICBjb250ZXh0OiBJRXhlY3V0ZUZ1bmN0aW9ucyxcbiAgICBjbGllbnQ6IFFpbml1QUksXG4gICAgaXRlbUluZGV4OiBudW1iZXJcbik6IFByb21pc2U8eyBqc29uOiBJRGF0YU9iamVjdDsgYmluYXJ5PzogSUJpbmFyeUtleURhdGEgfT4ge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3BlcmF0aW9uJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ21vZGVsJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3QgcHJvbXB0ID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdwcm9tcHQnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCB3YWl0Rm9yQ29tcGxldGlvbiA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignd2FpdEZvckNvbXBsZXRpb24nLCBpdGVtSW5kZXgsIHRydWUpIGFzIGJvb2xlYW47XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3B0aW9ucycsIGl0ZW1JbmRleCwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICAgIG1vZGVsLFxuICAgICAgICBwcm9tcHQsXG4gICAgICAgIG5lZ2F0aXZlX3Byb21wdDogb3B0aW9ucy5uZWdhdGl2ZVByb21wdCxcbiAgICAgICAgYXNwZWN0X3JhdGlvOiBvcHRpb25zLmFzcGVjdFJhdGlvLFxuICAgICAgICBuOiBvcHRpb25zLm4sXG4gICAgfTtcblxuICAgIGlmIChvcGVyYXRpb24gPT09ICdlZGl0Jykge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VVcmwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3JlZmVyZW5jZUltYWdlVXJsJywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuICAgICAgICBpZiAocmVmZXJlbmNlVXJsKSB7XG4gICAgICAgICAgICBwYXJhbXMuaW1hZ2VfdXJsID0gcmVmZXJlbmNlVXJsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLm1hc2spIHtcbiAgICAgICAgICAgIHBhcmFtcy5tYXNrID0gb3B0aW9ucy5tYXNrO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtcy5zdHJlbmd0aCA9IG9wdGlvbnMuc3RyZW5ndGg7XG4gICAgICAgIHBhcmFtcy5pbWFnZV9yZWZlcmVuY2UgPSBvcHRpb25zLmltYWdlUmVmZXJlbmNlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBpbWFnZV9jb25maWdcbiAgICBpZiAob3B0aW9ucy5pbWFnZVNpemUpIHtcbiAgICAgICAgcGFyYW1zLmltYWdlX2NvbmZpZyA9IHsgaW1hZ2Vfc2l6ZTogb3B0aW9ucy5pbWFnZVNpemUgfTtcbiAgICB9XG5cbiAgICAvLyBBZHZhbmNlZCBpbWFnZSByZWZlcmVuY2VzIChnZW5lcmF0ZSBvbmx5KVxuICAgIGlmIChvcGVyYXRpb24gPT09ICdnZW5lcmF0ZScpIHtcbiAgICAgICAgY29uc3Qgc3ViamVjdEltYWdlVXJscyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignc3ViamVjdEltYWdlVXJscycsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3Qgc2NlbmVJbWFnZVVybCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignc2NlbmVJbWFnZVVybCcsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3Qgc3R5bGVJbWFnZVVybCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignc3R5bGVJbWFnZVVybCcsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcblxuICAgICAgICAvLyBTdWJqZWN0IHJlZmVyZW5jZSBpbWFnZXNcbiAgICAgICAgaWYgKHN1YmplY3RJbWFnZVVybHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHVybHMgPSBzdWJqZWN0SW1hZ2VVcmxzLnNwbGl0KCcsJykubWFwKHUgPT4gdS50cmltKCkpLmZpbHRlcih1ID0+IHUpO1xuICAgICAgICAgICAgaWYgKHVybHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5zdWJqZWN0X2ltYWdlX2xpc3QgPSB1cmxzLm1hcChpbWFnZSA9PiAoeyBpbWFnZSwgaW1hZ2VfdHlwZTogJ3N1YmplY3QnIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNjZW5lIHJlZmVyZW5jZSBpbWFnZVxuICAgICAgICBpZiAoc2NlbmVJbWFnZVVybCkge1xuICAgICAgICAgICAgcGFyYW1zLnNjZW5lX2ltYWdlID0geyBpbWFnZTogc2NlbmVJbWFnZVVybCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3R5bGUgcmVmZXJlbmNlIGltYWdlXG4gICAgICAgIGlmIChzdHlsZUltYWdlVXJsKSB7XG4gICAgICAgICAgICBwYXJhbXMuc3R5bGVfaW1hZ2UgPSB7IGltYWdlOiBzdHlsZUltYWdlVXJsIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0OiBhbnk7XG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2dlbmVyYXRlJykge1xuICAgICAgICBjb25zdCBjcmVhdGVSZXN1bHQgPSBhd2FpdCBjbGllbnQuaW1hZ2UuZ2VuZXJhdGUocGFyYW1zKTtcbiAgICAgICAgaWYgKHdhaXRGb3JDb21wbGV0aW9uKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBjbGllbnQuaW1hZ2Uud2FpdEZvclJlc3VsdChjcmVhdGVSZXN1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gY3JlYXRlUmVzdWx0O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgY2xpZW50LmltYWdlLmVkaXQocGFyYW1zKTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCBiaW5hcnkgZGF0YSBmcm9tIGJhc2U2NCBpbWFnZXNcbiAgICBjb25zdCBiaW5hcnk6IElCaW5hcnlLZXlEYXRhID0ge307XG4gICAgY29uc3QgaW1hZ2VzOiBhbnlbXSA9IFtdO1xuXG4gICAgaWYgKHJlc3VsdC5kYXRhICYmIEFycmF5LmlzQXJyYXkocmVzdWx0LmRhdGEpKSB7XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHJlc3VsdC5kYXRhLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGltZyA9IHJlc3VsdC5kYXRhW2lkeF07XG4gICAgICAgICAgICBpbWFnZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgdXJsOiBpbWcudXJsIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBpbmRleDogaW1nLmluZGV4LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIENvbnZlcnQgYmFzZTY0IHRvIGJpbmFyeSBkYXRhIGZvciBkb3duc3RyZWFtIHVzYWdlXG4gICAgICAgICAgICBpZiAoaW1nLmI2NF9qc29uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oaW1nLmI2NF9qc29uLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYmluYXJ5S2V5ID0gaWR4ID09PSAwID8gJ2RhdGEnIDogYGRhdGFfJHtpZHh9YDtcbiAgICAgICAgICAgICAgICBiaW5hcnlbYmluYXJ5S2V5XSA9IGF3YWl0IGNvbnRleHQuaGVscGVycy5wcmVwYXJlQmluYXJ5RGF0YShcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICBgaW1hZ2VfJHtpZHh9LiR7cmVzdWx0Lm91dHB1dF9mb3JtYXQgfHwgJ3BuZyd9YCxcbiAgICAgICAgICAgICAgICAgICAgYGltYWdlLyR7cmVzdWx0Lm91dHB1dF9mb3JtYXQgfHwgJ3BuZyd9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBqc29uOiB7XG4gICAgICAgICAgICBpbWFnZXMsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMgfHwgJ3Vua25vd24nLFxuICAgICAgICAgICAgdGFza0lkOiByZXN1bHQudGFza19pZCxcbiAgICAgICAgICAgIGlzU3luYzogcmVzdWx0LmlzU3luYyxcbiAgICAgICAgICAgIGltYWdlQ291bnQ6IGltYWdlcy5sZW5ndGgsXG4gICAgICAgICAgICBfcmF3OiByZXN1bHQsXG4gICAgICAgIH0sXG4gICAgICAgIGJpbmFyeTogT2JqZWN0LmtleXMoYmluYXJ5KS5sZW5ndGggPiAwID8gYmluYXJ5IDogdW5kZWZpbmVkLFxuICAgIH07XG59XG5cbi8vIFZpZGVvIGhhbmRsZXJcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVZpZGVvKFxuICAgIGNvbnRleHQ6IElFeGVjdXRlRnVuY3Rpb25zLFxuICAgIGNsaWVudDogUWluaXVBSSxcbiAgICBpdGVtSW5kZXg6IG51bWJlclxuKTogUHJvbWlzZTxJRGF0YU9iamVjdD4ge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3BlcmF0aW9uJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSAnZ2V0U3RhdHVzJykge1xuICAgICAgICBjb25zdCB0YXNrSWQgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3Rhc2tJZCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQudmlkZW8uZ2V0KHRhc2tJZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogcmVzdWx0LmlkLFxuICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgdmlkZW9zOiByZXN1bHQudGFza19yZXN1bHQ/LnZpZGVvcyB8fCBbXSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3VsdC5tZXNzYWdlLFxuICAgICAgICAgICAgX3JhdzogcmVzdWx0IGFzIHVua25vd24gYXMgSURhdGFPYmplY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gJ3JlbWl4Jykge1xuICAgICAgICBjb25zdCBzb3VyY2VWaWRlb0lkID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdzb3VyY2VWaWRlb0lkJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHJlbWl4UHJvbXB0ID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdyZW1peFByb21wdCcsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3Qgd2FpdEZvckNvbXBsZXRpb24gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3dhaXRGb3JDb21wbGV0aW9uJywgaXRlbUluZGV4LCB0cnVlKSBhcyBib29sZWFuO1xuICAgICAgICBjb25zdCByZW1peE9wdGlvbnMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3JlbWl4T3B0aW9ucycsIGl0ZW1JbmRleCwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgICAgIGNvbnN0IHJlbWl4UGFyYW1zOiBhbnkgPSB7fTtcbiAgICAgICAgaWYgKHJlbWl4UHJvbXB0KSByZW1peFBhcmFtcy5wcm9tcHQgPSByZW1peFByb21wdDtcbiAgICAgICAgaWYgKHJlbWl4T3B0aW9ucy5kdXJhdGlvbikgcmVtaXhQYXJhbXMuZHVyYXRpb24gPSByZW1peE9wdGlvbnMuZHVyYXRpb247XG4gICAgICAgIGlmIChyZW1peE9wdGlvbnMubW9kZSkgcmVtaXhQYXJhbXMubW9kZSA9IHJlbWl4T3B0aW9ucy5tb2RlO1xuICAgICAgICBpZiAocmVtaXhPcHRpb25zLm5lZ2F0aXZlUHJvbXB0KSByZW1peFBhcmFtcy5uZWdhdGl2ZV9wcm9tcHQgPSByZW1peE9wdGlvbnMubmVnYXRpdmVQcm9tcHQ7XG5cbiAgICAgICAgY29uc3QgdGFzayA9IGF3YWl0IGNsaWVudC52aWRlby5yZW1peChzb3VyY2VWaWRlb0lkLCByZW1peFBhcmFtcyk7XG5cbiAgICAgICAgaWYgKHdhaXRGb3JDb21wbGV0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQudmlkZW8ud2FpdEZvckNvbXBsZXRpb24odGFzay5pZCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkOiByZXN1bHQuaWQsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgICAgIHZpZGVvczogcmVzdWx0LnRhc2tfcmVzdWx0Py52aWRlb3MgfHwgW10sXG4gICAgICAgICAgICAgICAgX3JhdzogcmVzdWx0IGFzIHVua25vd24gYXMgSURhdGFPYmplY3QsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiB0YXNrLmlkLFxuICAgICAgICAgICAgc3RhdHVzOiAncHJvY2Vzc2luZycsXG4gICAgICAgICAgICBfcmF3OiB0YXNrLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlXG4gICAgY29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ21vZGVsJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3QgcHJvbXB0ID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdwcm9tcHQnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCB3YWl0Rm9yQ29tcGxldGlvbiA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignd2FpdEZvckNvbXBsZXRpb24nLCBpdGVtSW5kZXgsIHRydWUpIGFzIGJvb2xlYW47XG4gICAgY29uc3QgZmlyc3RGcmFtZVVybCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignZmlyc3RGcmFtZVVybCcsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICBjb25zdCBmaXJzdEZyYW1lQmluYXJ5UHJvcGVydHkgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2ZpcnN0RnJhbWVCaW5hcnlQcm9wZXJ0eScsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICBjb25zdCBsYXN0RnJhbWVVcmwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2xhc3RGcmFtZVVybCcsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICBjb25zdCBsYXN0RnJhbWVCaW5hcnlQcm9wZXJ0eSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignbGFzdEZyYW1lQmluYXJ5UHJvcGVydHknLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgYXNwZWN0UmF0aW8gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2FzcGVjdFJhdGlvJywgaXRlbUluZGV4LCAnMTY6OScpIGFzIHN0cmluZztcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgICAgbW9kZWwsXG4gICAgICAgIHByb21wdCxcbiAgICAgICAgbmVnYXRpdmVfcHJvbXB0OiBvcHRpb25zLm5lZ2F0aXZlUHJvbXB0LFxuICAgICAgICBhc3BlY3RfcmF0aW86IGFzcGVjdFJhdGlvLFxuICAgIH07XG5cbiAgICAvLyBGcmFtZSBjb250cm9sIC0gc3VwcG9ydCBib3RoIFVSTCBhbmQgQmluYXJ5IERhdGFcbiAgICBjb25zdCBmcmFtZXM6IGFueSA9IHt9O1xuXG4gICAgLy8gRmlyc3QgZnJhbWVcbiAgICBpZiAoZmlyc3RGcmFtZVVybCkge1xuICAgICAgICBmcmFtZXMuZmlyc3QgPSB7IHVybDogZmlyc3RGcmFtZVVybCB9O1xuICAgIH0gZWxzZSBpZiAoZmlyc3RGcmFtZUJpbmFyeVByb3BlcnR5KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBjb250ZXh0LmhlbHBlcnMuZ2V0QmluYXJ5RGF0YUJ1ZmZlcihpdGVtSW5kZXgsIGZpcnN0RnJhbWVCaW5hcnlQcm9wZXJ0eSk7XG4gICAgICAgICAgICBmcmFtZXMuZmlyc3QgPSB7IGJhc2U2NDogYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKSB9O1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEJpbmFyeSBkYXRhIG5vdCBmb3VuZCwgc2tpcFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGFzdCBmcmFtZVxuICAgIGlmIChsYXN0RnJhbWVVcmwpIHtcbiAgICAgICAgZnJhbWVzLmxhc3QgPSB7IHVybDogbGFzdEZyYW1lVXJsIH07XG4gICAgfSBlbHNlIGlmIChsYXN0RnJhbWVCaW5hcnlQcm9wZXJ0eSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY29udGV4dC5oZWxwZXJzLmdldEJpbmFyeURhdGFCdWZmZXIoaXRlbUluZGV4LCBsYXN0RnJhbWVCaW5hcnlQcm9wZXJ0eSk7XG4gICAgICAgICAgICBmcmFtZXMubGFzdCA9IHsgYmFzZTY0OiBidWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpIH07XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gQmluYXJ5IGRhdGEgbm90IGZvdW5kLCBza2lwXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoZnJhbWVzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHBhcmFtcy5mcmFtZXMgPSBmcmFtZXM7XG4gICAgfVxuXG4gICAgLy8gVmlkZW8gcmVmZXJlbmNlICh2aWRlb19saXN0KSBmb3IgdmlkZW8tdG8tdmlkZW8gZ2VuZXJhdGlvblxuICAgIGNvbnN0IHZpZGVvUmVmZXJlbmNlVXJsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCd2aWRlb1JlZmVyZW5jZVVybCcsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICBjb25zdCBrZWVwT3JpZ2luYWxTb3VuZCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigna2VlcE9yaWdpbmFsU291bmQnLCBpdGVtSW5kZXgsIGZhbHNlKSBhcyBib29sZWFuO1xuICAgIGlmICh2aWRlb1JlZmVyZW5jZVVybCkge1xuICAgICAgICBwYXJhbXMudmlkZW9fbGlzdCA9IFt7XG4gICAgICAgICAgICB2aWRlb191cmw6IHZpZGVvUmVmZXJlbmNlVXJsLFxuICAgICAgICAgICAga2VlcF9vcmlnaW5hbF9zb3VuZDoga2VlcE9yaWdpbmFsU291bmQgPyAneWVzJyA6ICdubycsXG4gICAgICAgIH1dO1xuICAgIH1cblxuICAgIC8vIE1vZGVsLXNwZWNpZmljIG9wdGlvbnNcbiAgICBpZiAobW9kZWwuaW5jbHVkZXMoJ2tsaW5nJykpIHtcbiAgICAgICAgY29uc3Qga2xpbmdPcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdrbGluZ09wdGlvbnMnLCBpdGVtSW5kZXgsIHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgLy8gRHVyYXRpb24gaXMgcmVxdWlyZWQgZm9yIEtsaW5nIC0gZGVmYXVsdCB0byA1IHNlY29uZHNcbiAgICAgICAgcGFyYW1zLmR1cmF0aW9uID0ga2xpbmdPcHRpb25zLmR1cmF0aW9uIHx8ICc1JztcbiAgICAgICAgaWYgKGtsaW5nT3B0aW9ucy5tb2RlKSBwYXJhbXMubW9kZSA9IGtsaW5nT3B0aW9ucy5tb2RlO1xuICAgICAgICBpZiAoa2xpbmdPcHRpb25zLmNmZ1NjYWxlKSBwYXJhbXMuY2ZnX3NjYWxlID0ga2xpbmdPcHRpb25zLmNmZ1NjYWxlO1xuXG4gICAgICAgIC8vIFVzZSBzaXplIGZyb20gb3B0aW9ucywgb3IgZGVyaXZlIGZyb20gYXNwZWN0X3JhdGlvICh3b3JrYXJvdW5kIGZvciBTREsgYnVnKVxuICAgICAgICBpZiAoa2xpbmdPcHRpb25zLnNpemUpIHtcbiAgICAgICAgICAgIHBhcmFtcy5zaXplID0ga2xpbmdPcHRpb25zLnNpemU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBNYXAgYXNwZWN0X3JhdGlvIHRvIGRlZmF1bHQgc2l6ZSBmb3IgS2xpbmcgQVBJXG4gICAgICAgICAgICBjb25zdCBzaXplTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAgICAgICAgICcxNjo5JzogJzE5MjA6MTA4MCcsXG4gICAgICAgICAgICAgICAgJzk6MTYnOiAnMTA4MDoxOTIwJyxcbiAgICAgICAgICAgICAgICAnMToxJzogJzEwODA6MTA4MCcsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcGFyYW1zLnNpemUgPSBzaXplTWFwW2FzcGVjdFJhdGlvXSB8fCAnMTkyMDoxMDgwJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtb2RlbC5pbmNsdWRlcygndmVvJykpIHtcbiAgICAgICAgY29uc3QgdmVvT3B0aW9ucyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigndmVvT3B0aW9ucycsIGl0ZW1JbmRleCwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAvLyBEdXJhdGlvblNlY29uZHMgaXMgcmVxdWlyZWQgZm9yIFZlbyAtIGZpeGVkIGF0IDggc2Vjb25kc1xuICAgICAgICBwYXJhbXMuZHVyYXRpb24gPSB2ZW9PcHRpb25zLmR1cmF0aW9uIHx8IDg7XG4gICAgICAgIGlmICh2ZW9PcHRpb25zLmdlbmVyYXRlQXVkaW8gIT09IHVuZGVmaW5lZCkgcGFyYW1zLmdlbmVyYXRlX2F1ZGlvID0gdmVvT3B0aW9ucy5nZW5lcmF0ZUF1ZGlvO1xuICAgICAgICBpZiAodmVvT3B0aW9ucy5yZXNvbHV0aW9uKSBwYXJhbXMucmVzb2x1dGlvbiA9IHZlb09wdGlvbnMucmVzb2x1dGlvbjtcbiAgICAgICAgaWYgKHZlb09wdGlvbnMuc2FtcGxlQ291bnQpIHBhcmFtcy5zYW1wbGVfY291bnQgPSB2ZW9PcHRpb25zLnNhbXBsZUNvdW50O1xuICAgICAgICBpZiAodmVvT3B0aW9ucy5wZXJzb25HZW5lcmF0aW9uKSBwYXJhbXMucGVyc29uX2dlbmVyYXRpb24gPSB2ZW9PcHRpb25zLnBlcnNvbkdlbmVyYXRpb247XG4gICAgICAgIGlmICh2ZW9PcHRpb25zLnNlZWQpIHBhcmFtcy5zZWVkID0gdmVvT3B0aW9ucy5zZWVkO1xuICAgIH1cblxuICAgIGNvbnN0IHRhc2sgPSBhd2FpdCBjbGllbnQudmlkZW8uY3JlYXRlKHBhcmFtcyk7XG5cbiAgICBpZiAod2FpdEZvckNvbXBsZXRpb24pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnZpZGVvLndhaXRGb3JDb21wbGV0aW9uKHRhc2suaWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgIHZpZGVvczogcmVzdWx0LnRhc2tfcmVzdWx0Py52aWRlb3MgfHwgW10sXG4gICAgICAgICAgICBfcmF3OiByZXN1bHQgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogdGFzay5pZCxcbiAgICAgICAgc3RhdHVzOiAncHJvY2Vzc2luZycsXG4gICAgICAgIF9yYXc6IHRhc2ssXG4gICAgfTtcbn1cblxuLy8gQWdlbnQgaGFuZGxlclxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQWdlbnQoXG4gICAgY29udGV4dDogSUV4ZWN1dGVGdW5jdGlvbnMsXG4gICAgY2xpZW50OiBRaW5pdUFJLFxuICAgIGl0ZW1JbmRleDogbnVtYmVyXG4pOiBQcm9taXNlPElEYXRhT2JqZWN0PiB7XG4gICAgY29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ21vZGVsJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3QgcHJvbXB0ID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdwcm9tcHQnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCBzeXN0ZW1NZXNzYWdlID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdzeXN0ZW1NZXNzYWdlJywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGJ1aWx0aW5Ub29scyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignYnVpbHRpblRvb2xzJywgaXRlbUluZGV4LCBbXSkgYXMgc3RyaW5nW107XG4gICAgY29uc3QgYXV0b0V4ZWN1dGVUb29scyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignYXV0b0V4ZWN1dGVUb29scycsIGl0ZW1JbmRleCwgdHJ1ZSkgYXMgYm9vbGVhbjtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMge1xuICAgICAgICBtYXhDb250ZXh0VG9rZW5zPzogbnVtYmVyO1xuICAgICAgICBtYXhTdGVwcz86IG51bWJlcjtcbiAgICAgICAgdGhyZWFkSWQ/OiBzdHJpbmc7XG4gICAgICAgIHRvb2xzPzogc3RyaW5nO1xuICAgICAgICB0ZW1wZXJhdHVyZT86IG51bWJlcjtcbiAgICAgICAgaW1hZ2VNb2RlbD86IHN0cmluZztcbiAgICAgICAgdmlkZW9Nb2RlbD86IHN0cmluZztcbiAgICAgICAgY2hlY2twb2ludGVyVHlwZT86ICdub25lJyB8ICdtZW1vcnknIHwgJ3JlZGlzJyB8ICdwb3N0Z3Jlcyc7XG4gICAgICAgIGNoZWNrcG9pbnRlckNvbm5lY3Rpb24/OiBzdHJpbmc7XG4gICAgfTtcblxuICAgIC8vIEJ1aWxkIHRvb2xzIHJlY29yZFxuICAgIGNvbnN0IHRvb2xzUmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICAvLyBSZWdpc3RlciBidWlsdC1pbiB0b29sc1xuICAgIGlmIChidWlsdGluVG9vbHMuaW5jbHVkZXMoJ3dlYlNlYXJjaCcpKSB7XG4gICAgICAgIHRvb2xzUmVjb3JkWyd3ZWJfc2VhcmNoJ10gPSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1NlYXJjaCB0aGUgd2ViIGZvciBpbmZvcm1hdGlvbi4gVXNlIHRoaXMgdG8gZmluZCBjdXJyZW50IGluZm9ybWF0aW9uLicsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeTogeyB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdUaGUgc2VhcmNoIHF1ZXJ5JyB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsncXVlcnknXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleGVjdXRlOiBhc3luYyAoYXJnczogeyBxdWVyeTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgY2xpZW50LnN5cy5zZWFyY2goeyBxdWVyeTogYXJncy5xdWVyeSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZXN1bHRzOiByZXN1bHRzPy5zbGljZSgwLCA1KSB8fCBbXSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoYnVpbHRpblRvb2xzLmluY2x1ZGVzKCdvY3InKSkge1xuICAgICAgICB0b29sc1JlY29yZFsnb2NyJ10gPSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0V4dHJhY3QgdGV4dCBmcm9tIGFuIGltYWdlIFVSTCB1c2luZyBPQ1IuJyxcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHVybDogeyB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdUaGUgaW1hZ2UgVVJMIHRvIGV4dHJhY3QgdGV4dCBmcm9tJyB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsndXJsJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3M6IHsgdXJsOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5vY3IuZGV0ZWN0KHsgdXJsOiBhcmdzLnVybCB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoYnVpbHRpblRvb2xzLmluY2x1ZGVzKCdpbWFnZUdlbmVyYXRlJykpIHtcbiAgICAgICAgdG9vbHNSZWNvcmRbJ2dlbmVyYXRlX2ltYWdlJ10gPSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIGFuIGltYWdlIGZyb20gYSB0ZXh0IHByb21wdC4nLFxuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0OiB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uIG9mIHRoZSBpbWFnZSB0byBnZW5lcmF0ZScgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBbJ3Byb21wdCddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzOiB7IHByb21wdDogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjcmVhdGVSZXN1bHQgPSBhd2FpdCBjbGllbnQuaW1hZ2UuZ2VuZXJhdGUoe1xuICAgICAgICAgICAgICAgICAgICBtb2RlbDogb3B0aW9ucy5pbWFnZU1vZGVsIHx8ICdrbGluZy12Mi0xJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0OiBhcmdzLnByb21wdCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQuaW1hZ2Uud2FpdEZvclJlc3VsdChjcmVhdGVSZXN1bHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlczogcmVzdWx0LmRhdGE/Lm1hcCgoZDogYW55KSA9PiBkLnVybCB8fCBkLmI2NF9qc29uPy5zdWJzdHJpbmcoMCwgMTAwKSArICcuLi4nKSB8fCBbXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoYnVpbHRpblRvb2xzLmluY2x1ZGVzKCd2aWRlb0dlbmVyYXRlJykpIHtcbiAgICAgICAgdG9vbHNSZWNvcmRbJ2dlbmVyYXRlX3ZpZGVvJ10gPSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIGEgdmlkZW8gZnJvbSBhIHRleHQgcHJvbXB0LicsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICBwcm9tcHQ6IHsgdHlwZTogJ3N0cmluZycsIGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24gb2YgdGhlIHZpZGVvIHRvIGdlbmVyYXRlJyB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsncHJvbXB0J10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3M6IHsgcHJvbXB0OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBhd2FpdCBjbGllbnQudmlkZW8uY3JlYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWw6IG9wdGlvbnMudmlkZW9Nb2RlbCB8fCAna2xpbmctdmlkZW8tbzEnLFxuICAgICAgICAgICAgICAgICAgICBwcm9tcHQ6IGFyZ3MucHJvbXB0LFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogJzUnLFxuICAgICAgICAgICAgICAgICAgICBhc3BlY3RfcmF0aW86ICcxNjo5JyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQudmlkZW8ud2FpdEZvckNvbXBsZXRpb24odGFzay5pZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICB2aWRlb3M6IHJlc3VsdC50YXNrX3Jlc3VsdD8udmlkZW9zIHx8IFtdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIFBhcnNlIHVzZXItZGVmaW5lZCB0b29sc1xuICAgIGlmIChvcHRpb25zLnRvb2xzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0b29sc0FycmF5ID0gSlNPTi5wYXJzZShvcHRpb25zLnRvb2xzKTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRvb2xzQXJyYXkpICYmIHRvb2xzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdG9vbCBvZiB0b29sc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b29sLmZ1bmN0aW9uPy5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b29sc1JlY29yZFt0b29sLmZ1bmN0aW9uLm5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0b29sLmZ1bmN0aW9uLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRvb2wuZnVuY3Rpb24ucGFyYW1ldGVycyB8fCB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlOiBhc3luYyAoX2FyZ3M6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2VyLWRlZmluZWQgdG9vbHMgcmV0dXJuIHBsYWNlaG9sZGVyIGZvciBtYW51YWwgZXhlY3V0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdDogJ1Rvb2wgZXhlY3V0ZWQuIFByb2Nlc3MgdGhlIHJlc3VsdCBpbiBzdWJzZXF1ZW50IHdvcmtmbG93IHN0ZXBzLicgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTm9kZU9wZXJhdGlvbkVycm9yKFxuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgICAgICdJbnZhbGlkIHRvb2xzIEpTT04gZm9ybWF0JyxcbiAgICAgICAgICAgICAgICB7IGl0ZW1JbmRleCB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSB3aXRoIEFnZW50R3JhcGggaWYgYXV0by1leGVjdXRlIGlzIGVuYWJsZWQgYW5kIHRoZXJlIGFyZSB0b29sc1xuICAgIGNvbnN0IGhhc1Rvb2xzID0gT2JqZWN0LmtleXModG9vbHNSZWNvcmQpLmxlbmd0aCA+IDA7XG5cbiAgICAvLyBJbml0aWFsaXplIENoZWNrcG9pbnRlciBpZiBjb25maWd1cmVkXG4gICAgLy8gTm90ZTogQ2hlY2twb2ludGVyIGludGVncmF0aW9uIHJlcXVpcmVzIEFnZW50R3JhcGggZGlyZWN0bHksIG5vdCBnZW5lcmF0ZVRleHRXaXRoR3JhcGhcbiAgICAvLyBUaGlzIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGZ1dHVyZSBmdWxsIGltcGxlbWVudGF0aW9uXG4gICAgbGV0IGNoZWNrcG9pbnRlckluZm86IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGlmIChvcHRpb25zLmNoZWNrcG9pbnRlclR5cGUgJiYgb3B0aW9ucy5jaGVja3BvaW50ZXJUeXBlICE9PSAnbm9uZScpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY2hlY2twb2ludGVyVHlwZSA9PT0gJ21lbW9yeScpIHtcbiAgICAgICAgICAgIGNoZWNrcG9pbnRlckluZm8gPSAnbWVtb3J5JztcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmNoZWNrcG9pbnRlclR5cGUgPT09ICdyZWRpcycpIHtcbiAgICAgICAgICAgIGNoZWNrcG9pbnRlckluZm8gPSBgcmVkaXM6JHtvcHRpb25zLmNoZWNrcG9pbnRlckNvbm5lY3Rpb24gfHwgJ25vdC1jb25maWd1cmVkJ31gO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY2hlY2twb2ludGVyVHlwZSA9PT0gJ3Bvc3RncmVzJykge1xuICAgICAgICAgICAgY2hlY2twb2ludGVySW5mbyA9IGBwb3N0Z3Jlczoke29wdGlvbnMuY2hlY2twb2ludGVyQ29ubmVjdGlvbiB8fCAnbm90LWNvbmZpZ3VyZWQnfWA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZW5lcmF0ZVRleHRXaXRoR3JhcGgoe1xuICAgICAgICBjbGllbnQsXG4gICAgICAgIG1vZGVsLFxuICAgICAgICBwcm9tcHQsXG4gICAgICAgIHN5c3RlbTogc3lzdGVtTWVzc2FnZSB8fCB1bmRlZmluZWQsXG4gICAgICAgIG1heENvbnRleHRUb2tlbnM6IG9wdGlvbnMubWF4Q29udGV4dFRva2VucyB8fCAzMjAwMCxcbiAgICAgICAgbWF4U3RlcHM6IG9wdGlvbnMubWF4U3RlcHMgfHwgMTAsXG4gICAgICAgIHRlbXBlcmF0dXJlOiBvcHRpb25zLnRlbXBlcmF0dXJlLFxuICAgICAgICB0b29sczogaGFzVG9vbHMgJiYgYXV0b0V4ZWN1dGVUb29scyA/IHRvb2xzUmVjb3JkIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogcmVzdWx0LnRleHQgfHwgJycsXG4gICAgICAgIHJlYXNvbmluZzogcmVzdWx0LnJlYXNvbmluZyB8fCAnJyxcbiAgICAgICAgc3RlcHM6IHJlc3VsdC5zdGVwcz8ubWFwKChzdGVwOiBhbnkpID0+ICh7XG4gICAgICAgICAgICB0eXBlOiBzdGVwLnR5cGUsXG4gICAgICAgICAgICB0b29sTmFtZTogc3RlcC50b29sTmFtZSxcbiAgICAgICAgICAgIHRvb2xBcmdzOiBzdGVwLnRvb2xBcmdzLFxuICAgICAgICAgICAgdG9vbFJlc3VsdDogc3RlcC50b29sUmVzdWx0LFxuICAgICAgICAgICAgdGV4dDogc3RlcC50ZXh0LFxuICAgICAgICB9KSkgfHwgW10sXG4gICAgICAgIHRvb2xzRXhlY3V0ZWQ6IHJlc3VsdC5zdGVwcz8uZmlsdGVyKChzOiBhbnkpID0+IHMudHlwZSA9PT0gJ3Rvb2xfY2FsbCcpLmxlbmd0aCB8fCAwLFxuICAgICAgICB0aHJlYWRJZDogb3B0aW9ucy50aHJlYWRJZCB8fCBudWxsLFxuICAgICAgICBjaGVja3BvaW50ZXI6IGNoZWNrcG9pbnRlckluZm8sXG4gICAgICAgIHVzYWdlOiByZXN1bHQudXNhZ2VcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHByb21wdFRva2VuczogcmVzdWx0LnVzYWdlLnByb21wdF90b2tlbnMsXG4gICAgICAgICAgICAgICAgY29tcGxldGlvblRva2VuczogcmVzdWx0LnVzYWdlLmNvbXBsZXRpb25fdG9rZW5zLFxuICAgICAgICAgICAgICAgIHRvdGFsVG9rZW5zOiByZXN1bHQudXNhZ2UudG90YWxfdG9rZW5zLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBfcmF3OiByZXN1bHQgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICB9O1xufVxuXG4vLyBBdWRpbyBoYW5kbGVyXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVBdWRpbyhcbiAgICBjb250ZXh0OiBJRXhlY3V0ZUZ1bmN0aW9ucyxcbiAgICBjbGllbnQ6IFFpbml1QUksXG4gICAgaXRlbUluZGV4OiBudW1iZXJcbik6IFByb21pc2U8SURhdGFPYmplY3Q+IHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wZXJhdGlvbicsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gJ3RleHRUb1NwZWVjaCcpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigndGV4dCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCB2b2ljZSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigndm9pY2UnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3B0aW9ucycsIGl0ZW1JbmRleCwge30pIGFzIHtcbiAgICAgICAgICAgIGVuY29kaW5nPzogc3RyaW5nO1xuICAgICAgICAgICAgc3BlZWRSYXRpbz86IG51bWJlcjtcbiAgICAgICAgICAgIHZvbHVtZT86IG51bWJlcjtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQudHRzLnN5bnRoZXNpemUoe1xuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIHZvaWNlX3R5cGU6IHZvaWNlLFxuICAgICAgICAgICAgZW5jb2Rpbmc6IG9wdGlvbnMuZW5jb2RpbmcgYXMgYW55LFxuICAgICAgICAgICAgc3BlZWRfcmF0aW86IG9wdGlvbnMuc3BlZWRSYXRpbyxcbiAgICAgICAgICAgIHZvbHVtZTogb3B0aW9ucy52b2x1bWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJldHVybiBhdWRpbyBhcyBiaW5hcnkgZGF0YVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXVkaW86IHJlc3VsdC5hdWRpbyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiByZXN1bHQuZHVyYXRpb24sXG4gICAgICAgICAgICBfcmF3OiByZXN1bHQgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSAnc3BlZWNoVG9UZXh0Jykge1xuICAgICAgICBjb25zdCBiaW5hcnlQcm9wZXJ0eU5hbWUgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2JpbmFyeVByb3BlcnR5TmFtZScsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBhdWRpb0Zvcm1hdCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignYXVkaW9Gb3JtYXQnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcblxuICAgICAgICAvLyBHZXQgYmluYXJ5IGRhdGFcbiAgICAgICAgY29udGV4dC5oZWxwZXJzLmFzc2VydEJpbmFyeURhdGEoaXRlbUluZGV4LCBiaW5hcnlQcm9wZXJ0eU5hbWUpO1xuICAgICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBjb250ZXh0LmhlbHBlcnMuZ2V0QmluYXJ5RGF0YUJ1ZmZlcihpdGVtSW5kZXgsIGJpbmFyeVByb3BlcnR5TmFtZSk7XG4gICAgICAgIGNvbnN0IGJhc2U2NEF1ZGlvID0gYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQuYXNyLnRyYW5zY3JpYmUoe1xuICAgICAgICAgICAgYXVkaW86IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IGF1ZGlvRm9ybWF0IGFzIGFueSxcbiAgICAgICAgICAgICAgICBkYXRhOiBiYXNlNjRBdWRpbyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0OiByZXN1bHQudGV4dCB8fCAnJyxcbiAgICAgICAgICAgIHdvcmRzOiByZXN1bHQud29yZHMgfHwgW10sXG4gICAgICAgICAgICBfcmF3OiByZXN1bHQgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgTm9kZU9wZXJhdGlvbkVycm9yKFxuICAgICAgICBjb250ZXh0LmdldE5vZGUoKSxcbiAgICAgICAgYFVua25vd24gYXVkaW8gb3BlcmF0aW9uOiAke29wZXJhdGlvbn1gLFxuICAgICAgICB7IGl0ZW1JbmRleCB9XG4gICAgKTtcbn1cblxuLy8gVG9vbHMgaGFuZGxlclxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVG9vbHMoXG4gICAgY29udGV4dDogSUV4ZWN1dGVGdW5jdGlvbnMsXG4gICAgY2xpZW50OiBRaW5pdUFJLFxuICAgIGl0ZW1JbmRleDogbnVtYmVyXG4pOiBQcm9taXNlPElEYXRhT2JqZWN0PiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcGVyYXRpb24nLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcblxuICAgIGlmIChvcGVyYXRpb24gPT09ICd3ZWJTZWFyY2gnKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdxdWVyeScsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zOiB7XG4gICAgICAgICAgICBxdWVyeTogc3RyaW5nO1xuICAgICAgICAgICAgbWF4X3Jlc3VsdHM/OiBudW1iZXI7XG4gICAgICAgICAgICBzZWFyY2hfdHlwZT86ICd3ZWInIHwgJ25ld3MnO1xuICAgICAgICAgICAgdGltZV9maWx0ZXI/OiAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcic7XG4gICAgICAgICAgICBzaXRlX2ZpbHRlcj86IHN0cmluZ1tdO1xuICAgICAgICB9ID0geyBxdWVyeSB9O1xuXG4gICAgICAgIGlmIChvcHRpb25zLm1heFJlc3VsdHMpIHNlYXJjaFBhcmFtcy5tYXhfcmVzdWx0cyA9IG9wdGlvbnMubWF4UmVzdWx0cyBhcyBudW1iZXI7XG4gICAgICAgIGlmIChvcHRpb25zLnNlYXJjaFR5cGUpIHNlYXJjaFBhcmFtcy5zZWFyY2hfdHlwZSA9IG9wdGlvbnMuc2VhcmNoVHlwZSBhcyAnd2ViJyB8ICduZXdzJztcbiAgICAgICAgaWYgKG9wdGlvbnMudGltZUZpbHRlcikgc2VhcmNoUGFyYW1zLnRpbWVfZmlsdGVyID0gb3B0aW9ucy50aW1lRmlsdGVyIGFzICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJztcbiAgICAgICAgaWYgKG9wdGlvbnMuc2l0ZUZpbHRlcikge1xuICAgICAgICAgICAgY29uc3Qgc2l0ZXMgPSAob3B0aW9ucy5zaXRlRmlsdGVyIGFzIHN0cmluZykuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSkuZmlsdGVyKHMgPT4gcyk7XG4gICAgICAgICAgICBpZiAoc2l0ZXMubGVuZ3RoID4gMCkgc2VhcmNoUGFyYW1zLnNpdGVfZmlsdGVyID0gc2l0ZXM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgY2xpZW50LnN5cy5zZWFyY2goc2VhcmNoUGFyYW1zKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzdWx0czogcmVzdWx0cyB8fCBbXSxcbiAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgX3JhdzogcmVzdWx0cyBhcyB1bmtub3duIGFzIElEYXRhT2JqZWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcGVyYXRpb24gPT09ICdvY3InKSB7XG4gICAgICAgIGNvbnN0IGltYWdlVXJsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdpbWFnZVVybCcsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgYmluYXJ5UHJvcGVydHlOYW1lID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdiaW5hcnlQcm9wZXJ0eU5hbWUnLCBpdGVtSW5kZXgsICdkYXRhJykgYXMgc3RyaW5nO1xuXG4gICAgICAgIGxldCBvY3JQYXJhbXM6IHsgdXJsPzogc3RyaW5nOyBpbWFnZT86IHN0cmluZyB9O1xuXG4gICAgICAgIGlmIChpbWFnZVVybCkge1xuICAgICAgICAgICAgLy8gVXNlIFVSTCBkaXJlY3RseVxuICAgICAgICAgICAgb2NyUGFyYW1zID0geyB1cmw6IGltYWdlVXJsIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBHZXQgZnJvbSBiaW5hcnkgYW5kIGNyZWF0ZSBkYXRhIFVSTFxuICAgICAgICAgICAgY29uc3QgYmluYXJ5RGF0YSA9IGNvbnRleHQuaGVscGVycy5hc3NlcnRCaW5hcnlEYXRhKGl0ZW1JbmRleCwgYmluYXJ5UHJvcGVydHlOYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGNvbnRleHQuaGVscGVycy5nZXRCaW5hcnlEYXRhQnVmZmVyKGl0ZW1JbmRleCwgYmluYXJ5UHJvcGVydHlOYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IG1pbWVUeXBlID0gYmluYXJ5RGF0YS5taW1lVHlwZSB8fCAnaW1hZ2UvcG5nJztcbiAgICAgICAgICAgIGNvbnN0IGJhc2U2NERhdGEgPSBidWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgICAgICAgLy8gRm9ybWF0OiBkYXRhOmltYWdlL3BuZztiYXNlNjQsPGJhc2U2NF9kYXRhPlxuICAgICAgICAgICAgb2NyUGFyYW1zID0geyBpbWFnZTogYGRhdGE6JHttaW1lVHlwZX07YmFzZTY0LCR7YmFzZTY0RGF0YX1gIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQub2NyLmRldGVjdChvY3JQYXJhbXMpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0OiByZXN1bHQudGV4dCB8fCAnJyxcbiAgICAgICAgICAgIGJsb2NrczogcmVzdWx0LmJsb2NrcyB8fCBbXSxcbiAgICAgICAgICAgIF9yYXc6IHJlc3VsdCBhcyB1bmtub3duIGFzIElEYXRhT2JqZWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBOb2RlT3BlcmF0aW9uRXJyb3IoXG4gICAgICAgIGNvbnRleHQuZ2V0Tm9kZSgpLFxuICAgICAgICBgVW5rbm93biB0b29scyBvcGVyYXRpb246ICR7b3BlcmF0aW9ufWAsXG4gICAgICAgIHsgaXRlbUluZGV4IH1cbiAgICApO1xufVxuIl19
@@ -73,6 +73,54 @@ exports.agentFields = [
73
73
  default: '',
74
74
  description: 'Agent persona and instructions',
75
75
  },
76
+ // Built-in Tools
77
+ {
78
+ displayName: 'Built-in Tools',
79
+ name: 'builtinTools',
80
+ type: 'multiOptions',
81
+ displayOptions: {
82
+ show: {
83
+ resource: ['agent'],
84
+ },
85
+ },
86
+ options: [
87
+ {
88
+ name: 'Web Search',
89
+ value: 'webSearch',
90
+ description: 'Search the web for information',
91
+ },
92
+ {
93
+ name: 'OCR',
94
+ value: 'ocr',
95
+ description: 'Extract text from images',
96
+ },
97
+ {
98
+ name: 'Image Generate',
99
+ value: 'imageGenerate',
100
+ description: 'Generate images from text prompts',
101
+ },
102
+ {
103
+ name: 'Video Generate',
104
+ value: 'videoGenerate',
105
+ description: 'Generate videos from text prompts',
106
+ },
107
+ ],
108
+ default: [],
109
+ description: 'Built-in tools that the agent can use automatically',
110
+ },
111
+ // Auto Execute Tools
112
+ {
113
+ displayName: 'Auto Execute Tools',
114
+ name: 'autoExecuteTools',
115
+ type: 'boolean',
116
+ displayOptions: {
117
+ show: {
118
+ resource: ['agent'],
119
+ },
120
+ },
121
+ default: true,
122
+ description: 'Automatically execute tool calls and return results (ReAct loop)',
123
+ },
76
124
  // Options
77
125
  {
78
126
  displayName: 'Options',
@@ -133,7 +181,62 @@ exports.agentFields = [
133
181
  default: 0.7,
134
182
  description: 'Controls randomness',
135
183
  },
184
+ {
185
+ displayName: 'Image Model (for Built-in Tool)',
186
+ name: 'imageModel',
187
+ type: 'options',
188
+ options: [
189
+ { name: 'Kling V2.1', value: 'kling-v2-1' },
190
+ { name: 'Kling V2', value: 'kling-v2' },
191
+ { name: 'Kling V1.5', value: 'kling-v1-5' },
192
+ { name: 'Gemini 3.0 Pro Image', value: 'gemini-3.0-pro-image-preview' },
193
+ ],
194
+ default: 'kling-v2-1',
195
+ description: 'Model to use for the generate_image built-in tool',
196
+ },
197
+ {
198
+ displayName: 'Video Model (for Built-in Tool)',
199
+ name: 'videoModel',
200
+ type: 'options',
201
+ options: [
202
+ { name: 'Kling Video O1', value: 'kling-video-o1' },
203
+ { name: 'Kling V2.1', value: 'kling-v2-1' },
204
+ { name: 'Kling V2.5 Turbo', value: 'kling-v2-5-turbo' },
205
+ { name: 'Veo 2.0 Generate', value: 'veo-2.0-generate-001' },
206
+ ],
207
+ default: 'kling-video-o1',
208
+ description: 'Model to use for the generate_video built-in tool',
209
+ },
210
+ {
211
+ displayName: 'Checkpointer Type',
212
+ name: 'checkpointerType',
213
+ type: 'options',
214
+ options: [
215
+ { name: 'None', value: 'none' },
216
+ { name: 'Memory', value: 'memory' },
217
+ { name: 'Redis', value: 'redis' },
218
+ { name: 'PostgreSQL', value: 'postgres' },
219
+ ],
220
+ default: 'none',
221
+ description: 'Type of state persistence for multi-turn conversations',
222
+ },
223
+ {
224
+ displayName: 'Checkpointer Connection String',
225
+ name: 'checkpointerConnection',
226
+ type: 'string',
227
+ typeOptions: {
228
+ password: true,
229
+ },
230
+ displayOptions: {
231
+ show: {
232
+ checkpointerType: ['redis', 'postgres'],
233
+ },
234
+ },
235
+ default: '',
236
+ placeholder: 'redis://localhost:6379 or postgresql://user:pass@localhost:5432/db',
237
+ description: 'Connection string for the checkpointer backend',
238
+ },
136
239
  ],
137
240
  },
138
241
  ];
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbnREZXNjcmlwdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVzL1Fpbml1QWkvZGVzY3JpcHRpb25zL0FnZW50RGVzY3JpcHRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNENBQWtEO0FBRXJDLFFBQUEsZUFBZSxHQUFzQjtJQUM5QztRQUNJLFdBQVcsRUFBRSxXQUFXO1FBQ3hCLElBQUksRUFBRSxXQUFXO1FBQ2pCLElBQUksRUFBRSxTQUFTO1FBQ2YsZ0JBQWdCLEVBQUUsSUFBSTtRQUN0QixjQUFjLEVBQUU7WUFDWixJQUFJLEVBQUU7Z0JBQ0YsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDO2FBQ3RCO1NBQ0o7UUFDRCxPQUFPLEVBQUU7WUFDTDtnQkFDSSxJQUFJLEVBQUUsV0FBVztnQkFDakIsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLFdBQVcsRUFBRSwyQ0FBMkM7Z0JBQ3hELE1BQU0sRUFBRSxjQUFjO2FBQ3pCO1NBQ0o7UUFDRCxPQUFPLEVBQUUsVUFBVTtLQUN0QjtDQUNKLENBQUM7QUFFVyxRQUFBLFdBQVcsR0FBc0I7SUFDMUMsUUFBUTtJQUNSO1FBQ0ksV0FBVyxFQUFFLE9BQU87UUFDcEIsSUFBSSxFQUFFLE9BQU87UUFDYixJQUFJLEVBQUUsU0FBUztRQUNmLFFBQVEsRUFBRSxJQUFJO1FBQ2QsY0FBYyxFQUFFO1lBQ1osSUFBSSxFQUFFO2dCQUNGLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQzthQUN0QjtTQUNKO1FBQ0QsT0FBTyxFQUFFLDhCQUFrQjtRQUMzQixPQUFPLEVBQUUsV0FBVztRQUNwQixXQUFXLEVBQUUsZ0NBQWdDO0tBQ2hEO0lBQ0QsU0FBUztJQUNUO1FBQ0ksV0FBVyxFQUFFLFFBQVE7UUFDckIsSUFBSSxFQUFFLFFBQVE7UUFDZCxJQUFJLEVBQUUsUUFBUTtRQUNkLFdBQVcsRUFBRTtZQUNULElBQUksRUFBRSxDQUFDO1NBQ1Y7UUFDRCxRQUFRLEVBQUUsSUFBSTtRQUNkLGNBQWMsRUFBRTtZQUNaLElBQUksRUFBRTtnQkFDRixRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUM7YUFDdEI7U0FDSjtRQUNELE9BQU8sRUFBRSxFQUFFO1FBQ1gsV0FBVyxFQUFFLHNDQUFzQztLQUN0RDtJQUNELGlCQUFpQjtJQUNqQjtRQUNJLFdBQVcsRUFBRSxnQkFBZ0I7UUFDN0IsSUFBSSxFQUFFLGVBQWU7UUFDckIsSUFBSSxFQUFFLFFBQVE7UUFDZCxXQUFXLEVBQUU7WUFDVCxJQUFJLEVBQUUsQ0FBQztTQUNWO1FBQ0QsY0FBYyxFQUFFO1lBQ1osSUFBSSxFQUFFO2dCQUNGLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQzthQUN0QjtTQUNKO1FBQ0QsT0FBTyxFQUFFLEVBQUU7UUFDWCxXQUFXLEVBQUUsZ0NBQWdDO0tBQ2hEO0lBQ0QsVUFBVTtJQUNWO1FBQ0ksV0FBVyxFQUFFLFNBQVM7UUFDdEIsSUFBSSxFQUFFLFNBQVM7UUFDZixJQUFJLEVBQUUsWUFBWTtRQUNsQixXQUFXLEVBQUUsWUFBWTtRQUN6QixjQUFjLEVBQUU7WUFDWixJQUFJLEVBQUU7Z0JBQ0YsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDO2FBQ3RCO1NBQ0o7UUFDRCxPQUFPLEVBQUUsRUFBRTtRQUNYLE9BQU8sRUFBRTtZQUNMO2dCQUNJLFdBQVcsRUFBRSxvQkFBb0I7Z0JBQ2pDLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRTtvQkFDVCxRQUFRLEVBQUUsSUFBSTtpQkFDakI7Z0JBQ0QsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsV0FBVyxFQUFFLDBEQUEwRDthQUMxRTtZQUNEO2dCQUNJLFdBQVcsRUFBRSxXQUFXO2dCQUN4QixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFO29CQUNULFFBQVEsRUFBRSxDQUFDO29CQUNYLFFBQVEsRUFBRSxFQUFFO2lCQUNmO2dCQUNELE9BQU8sRUFBRSxFQUFFO2dCQUNYLFdBQVcsRUFBRSx5REFBeUQ7YUFDekU7WUFDRDtnQkFDSSxXQUFXLEVBQUUsV0FBVztnQkFDeEIsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRSxRQUFRO2dCQUNkLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFdBQVcsRUFBRSxnRUFBZ0U7YUFDaEY7WUFDRDtnQkFDSSxXQUFXLEVBQUUsY0FBYztnQkFDM0IsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsSUFBSSxFQUFFLE1BQU07Z0JBQ1osT0FBTyxFQUFFLElBQUk7Z0JBQ2IsV0FBVyxFQUFFLHFEQUFxRDthQUNyRTtZQUNEO2dCQUNJLFdBQVcsRUFBRSxhQUFhO2dCQUMxQixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFO29CQUNULFFBQVEsRUFBRSxDQUFDO29CQUNYLFFBQVEsRUFBRSxDQUFDO29CQUNYLGVBQWUsRUFBRSxDQUFDO2lCQUNyQjtnQkFDRCxPQUFPLEVBQUUsR0FBRztnQkFDWixXQUFXLEVBQUUscUJBQXFCO2FBQ3JDO1NBQ0o7S0FDSjtDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJTm9kZVByb3BlcnRpZXMgfSBmcm9tICduOG4td29ya2Zsb3cnO1xuaW1wb3J0IHsgQ0hBVF9NT0RFTF9PUFRJT05TIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IGFnZW50T3BlcmF0aW9uczogSU5vZGVQcm9wZXJ0aWVzW10gPSBbXG4gICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ09wZXJhdGlvbicsXG4gICAgICAgIG5hbWU6ICdvcGVyYXRpb24nLFxuICAgICAgICB0eXBlOiAnb3B0aW9ucycsXG4gICAgICAgIG5vRGF0YUV4cHJlc3Npb246IHRydWUsXG4gICAgICAgIGRpc3BsYXlPcHRpb25zOiB7XG4gICAgICAgICAgICBzaG93OiB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2U6IFsnYWdlbnQnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnUnVuIEdyYXBoJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ3J1bkdyYXBoJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0V4ZWN1dGUgYW4gQUkgYWdlbnQgd2l0aCB0b29scyBhbmQgbWVtb3J5JyxcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdSdW4gQUkgYWdlbnQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZGVmYXVsdDogJ3J1bkdyYXBoJyxcbiAgICB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IGFnZW50RmllbGRzOiBJTm9kZVByb3BlcnRpZXNbXSA9IFtcbiAgICAvLyBNb2RlbFxuICAgIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdNb2RlbCcsXG4gICAgICAgIG5hbWU6ICdtb2RlbCcsXG4gICAgICAgIHR5cGU6ICdvcHRpb25zJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIGRpc3BsYXlPcHRpb25zOiB7XG4gICAgICAgICAgICBzaG93OiB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2U6IFsnYWdlbnQnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnM6IENIQVRfTU9ERUxfT1BUSU9OUyxcbiAgICAgICAgZGVmYXVsdDogJ3F3ZW4zLW1heCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIG1vZGVsIHRvIHVzZSBmb3IgdGhlIGFnZW50JyxcbiAgICB9LFxuICAgIC8vIFByb21wdFxuICAgIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdQcm9tcHQnLFxuICAgICAgICBuYW1lOiAncHJvbXB0JyxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIHR5cGVPcHRpb25zOiB7XG4gICAgICAgICAgICByb3dzOiA0LFxuICAgICAgICB9LFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgZGlzcGxheU9wdGlvbnM6IHtcbiAgICAgICAgICAgIHNob3c6IHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZTogWydhZ2VudCddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIHVzZXIgZ29hbCBvciBxdWVyeSBmb3IgdGhlIGFnZW50JyxcbiAgICB9LFxuICAgIC8vIFN5c3RlbSBNZXNzYWdlXG4gICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ1N5c3RlbSBNZXNzYWdlJyxcbiAgICAgICAgbmFtZTogJ3N5c3RlbU1lc3NhZ2UnLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgdHlwZU9wdGlvbnM6IHtcbiAgICAgICAgICAgIHJvd3M6IDQsXG4gICAgICAgIH0sXG4gICAgICAgIGRpc3BsYXlPcHRpb25zOiB7XG4gICAgICAgICAgICBzaG93OiB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2U6IFsnYWdlbnQnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0FnZW50IHBlcnNvbmEgYW5kIGluc3RydWN0aW9ucycsXG4gICAgfSxcbiAgICAvLyBPcHRpb25zXG4gICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ09wdGlvbnMnLFxuICAgICAgICBuYW1lOiAnb3B0aW9ucycsXG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdBZGQgT3B0aW9uJyxcbiAgICAgICAgZGlzcGxheU9wdGlvbnM6IHtcbiAgICAgICAgICAgIHNob3c6IHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZTogWydhZ2VudCddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge30sXG4gICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ01heCBDb250ZXh0IFRva2VucycsXG4gICAgICAgICAgICAgICAgbmFtZTogJ21heENvbnRleHRUb2tlbnMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHR5cGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG1pblZhbHVlOiAxMDAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMzIwMDAsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdNYXhpbXVtIGNvbnRleHQgdG9rZW5zIChTREsgYXV0by1jb21wYWN0cyB3aGVuIGV4Y2VlZGVkKScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTWF4IFN0ZXBzJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWF4U3RlcHMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHR5cGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG1pblZhbHVlOiAxLFxuICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZTogNTAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAxMCxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ01heGltdW0gbnVtYmVyIG9mIGFnZW50IHN0ZXBzIChwcmV2ZW50cyBpbmZpbml0ZSBsb29wcyknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1RocmVhZCBJRCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ3RocmVhZElkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1Nlc3Npb24gSUQgZm9yIG1lbW9yeSBjb250aW51aXR5IChsZWF2ZSBlbXB0eSBmb3IgbmV3IHNlc3Npb24pJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdUb29scyAoSlNPTiknLFxuICAgICAgICAgICAgICAgIG5hbWU6ICd0b29scycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICdbXScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdBcnJheSBvZiB0b29sIGRlZmluaXRpb25zIGluIE9wZW5BSSBmdW5jdGlvbiBmb3JtYXQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1RlbXBlcmF0dXJlJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAndGVtcGVyYXR1cmUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHR5cGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG1pblZhbHVlOiAwLFxuICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZTogMixcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyUHJlY2lzaW9uOiAxLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMC43LFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ29udHJvbHMgcmFuZG9tbmVzcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgIH0sXG5dO1xuIl19
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbnREZXNjcmlwdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVzL1Fpbml1QWkvZGVzY3JpcHRpb25zL0FnZW50RGVzY3JpcHRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNENBQWtEO0FBRXJDLFFBQUEsZUFBZSxHQUFzQjtJQUM5QztRQUNJLFdBQVcsRUFBRSxXQUFXO1FBQ3hCLElBQUksRUFBRSxXQUFXO1FBQ2pCLElBQUksRUFBRSxTQUFTO1FBQ2YsZ0JBQWdCLEVBQUUsSUFBSTtRQUN0QixjQUFjLEVBQUU7WUFDWixJQUFJLEVBQUU7Z0JBQ0YsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDO2FBQ3RCO1NBQ0o7UUFDRCxPQUFPLEVBQUU7WUFDTDtnQkFDSSxJQUFJLEVBQUUsV0FBVztnQkFDakIsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLFdBQVcsRUFBRSwyQ0FBMkM7Z0JBQ3hELE1BQU0sRUFBRSxjQUFjO2FBQ3pCO1NBQ0o7UUFDRCxPQUFPLEVBQUUsVUFBVTtLQUN0QjtDQUNKLENBQUM7QUFFVyxRQUFBLFdBQVcsR0FBc0I7SUFDMUMsUUFBUTtJQUNSO1FBQ0ksV0FBVyxFQUFFLE9BQU87UUFDcEIsSUFBSSxFQUFFLE9BQU87UUFDYixJQUFJLEVBQUUsU0FBUztRQUNmLFFBQVEsRUFBRSxJQUFJO1FBQ2QsY0FBYyxFQUFFO1lBQ1osSUFBSSxFQUFFO2dCQUNGLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQzthQUN0QjtTQUNKO1FBQ0QsT0FBTyxFQUFFLDhCQUFrQjtRQUMzQixPQUFPLEVBQUUsV0FBVztRQUNwQixXQUFXLEVBQUUsZ0NBQWdDO0tBQ2hEO0lBQ0QsU0FBUztJQUNUO1FBQ0ksV0FBVyxFQUFFLFFBQVE7UUFDckIsSUFBSSxFQUFFLFFBQVE7UUFDZCxJQUFJLEVBQUUsUUFBUTtRQUNkLFdBQVcsRUFBRTtZQUNULElBQUksRUFBRSxDQUFDO1NBQ1Y7UUFDRCxRQUFRLEVB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QUFLLEVBQUUsa0JBQWtCLEVBQUU7b0JBQ3ZELEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRTtpQkFDOUQ7Z0JBQ0QsT0FBTyxFQUFFLGdCQUFnQjtnQkFDekIsV0FBVyxFQUFFLG1EQUFtRDthQUNuRTtZQUNEO2dCQUNJLFdBQVcsRUFBRSxtQkFBbUI7Z0JBQ2hDLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLElBQUksRUFBRSxTQUFTO2dCQUNmLE9BQU8sRUFBRTtvQkFDTCxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtvQkFDL0IsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7b0JBQ25DLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO29CQUNqQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtpQkFDNUM7Z0JBQ0QsT0FBTyxFQUFFLE1BQU07Z0JBQ2YsV0FBVyxFQUFFLHdEQUF3RDthQUN4RTtZQUNEO2dCQUNJLFdBQVcsRUFBRSxnQ0FBZ0M7Z0JBQzdDLElBQUksRUFBRSx3QkFBd0I7Z0JBQzlCLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRTtvQkFDVCxRQUFRLEVBQUUsSUFBSTtpQkFDakI7Z0JBQ0QsY0FBYyxFQUFFO29CQUNaLElBQUksRUFBRTt3QkFDRixnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUM7cUJBQzFDO2lCQUNKO2dCQUNELE9BQU8sRUFBRSxFQUFFO2dCQUNYLFdBQVcsRUFBRSxvRUFBb0U7Z0JBQ2pGLFdBQVcsRUFBRSxnREFBZ0Q7YUFDaEU7U0FDSjtLQUNKO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElOb2RlUHJvcGVydGllcyB9IGZyb20gJ244bi13b3JrZmxvdyc7XG5pbXBvcnQgeyBDSEFUX01PREVMX09QVElPTlMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgYWdlbnRPcGVyYXRpb25zOiBJTm9kZVByb3BlcnRpZXNbXSA9IFtcbiAgICB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnT3BlcmF0aW9uJyxcbiAgICAgICAgbmFtZTogJ29wZXJhdGlvbicsXG4gICAgICAgIHR5cGU6ICdvcHRpb25zJyxcbiAgICAgICAgbm9EYXRhRXhwcmVzc2lvbjogdHJ1ZSxcbiAgICAgICAgZGlzcGxheU9wdGlvbnM6IHtcbiAgICAgICAgICAgIHNob3c6IHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZTogWydhZ2VudCddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdSdW4gR3JhcGgnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAncnVuR3JhcGgnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRXhlY3V0ZSBhbiBBSSBhZ2VudCB3aXRoIHRvb2xzIGFuZCBtZW1vcnknLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogJ1J1biBBSSBhZ2VudCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBkZWZhdWx0OiAncnVuR3JhcGgnLFxuICAgIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgYWdlbnRGaWVsZHM6IElOb2RlUHJvcGVydGllc1tdID0gW1xuICAgIC8vIE1vZGVsXG4gICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ01vZGVsJyxcbiAgICAgICAgbmFtZTogJ21vZGVsJyxcbiAgICAgICAgdHlwZTogJ29wdGlvbnMnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgZGlzcGxheU9wdGlvbnM6IHtcbiAgICAgICAgICAgIHNob3c6IHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZTogWydhZ2VudCddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgb3B0aW9uczogQ0hBVF9NT0RFTF9PUFRJT05TLFxuICAgICAgICBkZWZhdWx0OiAncXdlbjMtbWF4JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgbW9kZWwgdG8gdXNlIGZvciB0aGUgYWdlbnQnLFxuICAgIH0sXG4gICAgLy8gUHJvbXB0XG4gICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ1Byb21wdCcsXG4gICAgICAgIG5hbWU6ICdwcm9tcHQnLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgdHlwZU9wdGlvbnM6IHtcbiAgICAgICAgICAgIHJvd3M6IDQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBkaXNwbGF5T3B0aW9uczoge1xuICAgICAgICAgICAgc2hvdzoge1xuICAgICAgICAgICAgICAgIHJlc291cmNlOiBbJ2FnZW50J10sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgdXNlciBnb2FsIG9yIHF1ZXJ5IGZvciB0aGUgYWdlbnQnLFxuICAgIH0sXG4gICAgLy8gU3lzdGVtIE1lc3NhZ2VcbiAgICB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnU3lzdGVtIE1lc3NhZ2UnLFxuICAgICAgICBuYW1lOiAnc3lzdGVtTWVzc2FnZScsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB0eXBlT3B0aW9uczoge1xuICAgICAgICAgICAgcm93czogNCxcbiAgICAgICAgfSxcbiAgICAgICAgZGlzcGxheU9wdGlvbnM6IHtcbiAgICAgICAgICAgIHNob3c6IHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZTogWydhZ2VudCddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQWdlbnQgcGVyc29uYSBhbmQgaW5zdHJ1Y3Rpb25zJyxcbiAgICB9LFxuICAgIC8vIEJ1aWx0LWluIFRvb2xzXG4gICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ0J1aWx0LWluIFRvb2xzJyxcbiAgICAgICAgbmFtZTogJ2J1aWx0aW5Ub29scycsXG4gICAgICAgIHR5cGU6ICdtdWx0aU9wdGlvbnMnLFxuICAgICAgICBkaXNwbGF5T3B0aW9uczoge1xuICAgICAgICAgICAgc2hvdzoge1xuICAgICAgICAgICAgICAgIHJlc291cmNlOiBbJ2FnZW50J10sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1dlYiBTZWFyY2gnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAnd2ViU2VhcmNoJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1NlYXJjaCB0aGUgd2ViIGZvciBpbmZvcm1hdGlvbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdPQ1InLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAnb2NyJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0V4dHJhY3QgdGV4dCBmcm9tIGltYWdlcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdJbWFnZSBHZW5lcmF0ZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdpbWFnZUdlbmVyYXRlJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIGltYWdlcyBmcm9tIHRleHQgcHJvbXB0cycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdWaWRlbyBHZW5lcmF0ZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICd2aWRlb0dlbmVyYXRlJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIHZpZGVvcyBmcm9tIHRleHQgcHJvbXB0cycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBkZWZhdWx0OiBbXSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdCdWlsdC1pbiB0b29scyB0aGF0IHRoZSBhZ2VudCBjYW4gdXNlIGF1dG9tYXRpY2FsbHknLFxuICAgIH0sXG4gICAgLy8gQXV0byBFeGVjdXRlIFRvb2xzXG4gICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ0F1dG8gRXhlY3V0ZSBUb29scycsXG4gICAgICAgIG5hbWU6ICdhdXRvRXhlY3V0ZVRvb2xzJyxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICBkaXNwbGF5T3B0aW9uczoge1xuICAgICAgICAgICAgc2hvdzoge1xuICAgICAgICAgICAgICAgIHJlc291cmNlOiBbJ2FnZW50J10sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0F1dG9tYXRpY2FsbHkgZXhlY3V0ZSB0b29sIGNhbGxzIGFuZCByZXR1cm4gcmVzdWx0cyAoUmVBY3QgbG9vcCknLFxuICAgIH0sXG4gICAgLy8gT3B0aW9uc1xuICAgIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdPcHRpb25zJyxcbiAgICAgICAgbmFtZTogJ29wdGlvbnMnLFxuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnQWRkIE9wdGlvbicsXG4gICAgICAgIGRpc3BsYXlPcHRpb25zOiB7XG4gICAgICAgICAgICBzaG93OiB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2U6IFsnYWdlbnQnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHt9LFxuICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdNYXggQ29udGV4dCBUb2tlbnMnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdtYXhDb250ZXh0VG9rZW5zJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICB0eXBlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBtaW5WYWx1ZTogMTAwMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDMyMDAwLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTWF4aW11bSBjb250ZXh0IHRva2VucyAoU0RLIGF1dG8tY29tcGFjdHMgd2hlbiBleGNlZWRlZCknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ01heCBTdGVwcycsXG4gICAgICAgICAgICAgICAgbmFtZTogJ21heFN0ZXBzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICB0eXBlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBtaW5WYWx1ZTogMSxcbiAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWU6IDUwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMTAsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdNYXhpbXVtIG51bWJlciBvZiBhZ2VudCBzdGVwcyAocHJldmVudHMgaW5maW5pdGUgbG9vcHMpJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdUaHJlYWQgSUQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICd0aHJlYWRJZCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdTZXNzaW9uIElEIGZvciBtZW1vcnkgY29udGludWl0eSAobGVhdmUgZW1wdHkgZm9yIG5ldyBzZXNzaW9uKScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnVG9vbHMgKEpTT04pJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAndG9vbHMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAnW10nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQXJyYXkgb2YgdG9vbCBkZWZpbml0aW9ucyBpbiBPcGVuQUkgZnVuY3Rpb24gZm9ybWF0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdUZW1wZXJhdHVyZScsXG4gICAgICAgICAgICAgICAgbmFtZTogJ3RlbXBlcmF0dXJlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICB0eXBlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBtaW5WYWx1ZTogMCxcbiAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWU6IDIsXG4gICAgICAgICAgICAgICAgICAgIG51bWJlclByZWNpc2lvbjogMSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAuNyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0NvbnRyb2xzIHJhbmRvbW5lc3MnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0ltYWdlIE1vZGVsIChmb3IgQnVpbHQtaW4gVG9vbCknLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdpbWFnZU1vZGVsJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnb3B0aW9ucycsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdLbGluZyBWMi4xJywgdmFsdWU6ICdrbGluZy12Mi0xJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdLbGluZyBWMicsIHZhbHVlOiAna2xpbmctdjInIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ0tsaW5nIFYxLjUnLCB2YWx1ZTogJ2tsaW5nLXYxLTUnIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ0dlbWluaSAzLjAgUHJvIEltYWdlJywgdmFsdWU6ICdnZW1pbmktMy4wLXByby1pbWFnZS1wcmV2aWV3JyB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogJ2tsaW5nLXYyLTEnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTW9kZWwgdG8gdXNlIGZvciB0aGUgZ2VuZXJhdGVfaW1hZ2UgYnVpbHQtaW4gdG9vbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnVmlkZW8gTW9kZWwgKGZvciBCdWlsdC1pbiBUb29sKScsXG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZpZGVvTW9kZWwnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdvcHRpb25zJyxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ0tsaW5nIFZpZGVvIE8xJywgdmFsdWU6ICdrbGluZy12aWRlby1vMScgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnS2xpbmcgVjIuMScsIHZhbHVlOiAna2xpbmctdjItMScgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnS2xpbmcgVjIuNSBUdXJibycsIHZhbHVlOiAna2xpbmctdjItNS10dXJibycgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnVmVvIDIuMCBHZW5lcmF0ZScsIHZhbHVlOiAndmVvLTIuMC1nZW5lcmF0ZS0wMDEnIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAna2xpbmctdmlkZW8tbzEnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTW9kZWwgdG8gdXNlIGZvciB0aGUgZ2VuZXJhdGVfdmlkZW8gYnVpbHQtaW4gdG9vbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnQ2hlY2twb2ludGVyIFR5cGUnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdjaGVja3BvaW50ZXJUeXBlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnb3B0aW9ucycsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdOb25lJywgdmFsdWU6ICdub25lJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdNZW1vcnknLCB2YWx1ZTogJ21lbW9yeScgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnUmVkaXMnLCB2YWx1ZTogJ3JlZGlzJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdQb3N0Z3JlU1FMJywgdmFsdWU6ICdwb3N0Z3JlcycgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICdub25lJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1R5cGUgb2Ygc3RhdGUgcGVyc2lzdGVuY2UgZm9yIG11bHRpLXR1cm4gY29udmVyc2F0aW9ucycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnQ2hlY2twb2ludGVyIENvbm5lY3Rpb24gU3RyaW5nJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2hlY2twb2ludGVyQ29ubmVjdGlvbicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgdHlwZU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkaXNwbGF5T3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBzaG93OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja3BvaW50ZXJUeXBlOiBbJ3JlZGlzJywgJ3Bvc3RncmVzJ10sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ3JlZGlzOi8vbG9jYWxob3N0OjYzNzkgb3IgcG9zdGdyZXNxbDovL3VzZXI6cGFzc0Bsb2NhbGhvc3Q6NTQzMi9kYicsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDb25uZWN0aW9uIHN0cmluZyBmb3IgdGhlIGNoZWNrcG9pbnRlciBiYWNrZW5kJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgfSxcbl07XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-nodes-qiniu-ai",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "n8n nodes for Qiniu AI SDK - Chat, Image, Video, Audio, OCR, Agent and more",
5
5
  "keywords": [
6
6
  "n8n-community-node-package",