@dollhousemcp/mcp-server 1.9.1 → 1.9.3

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.
Files changed (30) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/README.github.md +4 -3
  3. package/dist/config/ConfigWizardDisplay.d.ts +64 -0
  4. package/dist/config/ConfigWizardDisplay.d.ts.map +1 -0
  5. package/dist/config/ConfigWizardDisplay.js +150 -0
  6. package/dist/config/WizardFirstResponse.d.ts +25 -0
  7. package/dist/config/WizardFirstResponse.d.ts.map +1 -0
  8. package/dist/config/WizardFirstResponse.js +118 -0
  9. package/dist/generated/version.d.ts +2 -2
  10. package/dist/generated/version.js +3 -3
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +158 -1
  14. package/dist/scripts/scripts/run-config-wizard.js +57 -0
  15. package/dist/scripts/src/config/ConfigManager.js +799 -0
  16. package/dist/scripts/src/config/ConfigWizard.js +368 -0
  17. package/dist/scripts/src/errors/SecurityError.js +47 -0
  18. package/dist/scripts/src/security/constants.js +28 -0
  19. package/dist/scripts/src/security/contentValidator.js +415 -0
  20. package/dist/scripts/src/security/errors.js +32 -0
  21. package/dist/scripts/src/security/regexValidator.js +217 -0
  22. package/dist/scripts/src/security/secureYamlParser.js +272 -0
  23. package/dist/scripts/src/security/securityMonitor.js +111 -0
  24. package/dist/scripts/src/security/validators/unicodeValidator.js +315 -0
  25. package/dist/scripts/src/utils/logger.js +288 -0
  26. package/dist/security/audit/SecurityAuditor.js +2 -2
  27. package/dist/tools/getWelcomeMessage.d.ts +41 -0
  28. package/dist/tools/getWelcomeMessage.d.ts.map +1 -0
  29. package/dist/tools/getWelcomeMessage.js +109 -0
  30. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -37,6 +37,8 @@ import { SkillManager } from './elements/skills/index.js';
37
37
  import { TemplateManager } from './elements/templates/TemplateManager.js';
38
38
  import { TemplateRenderer } from './utils/TemplateRenderer.js';
39
39
  import { AgentManager } from './elements/agents/AgentManager.js';
40
+ import { MemoryManager } from './elements/memories/MemoryManager.js';
41
+ import { Memory } from './elements/memories/Memory.js';
40
42
  import { ConfigManager } from './config/ConfigManager.js';
41
43
  // ConfigWizard imports removed - not included in hotfix
42
44
  import { spawn } from 'child_process';
@@ -83,6 +85,7 @@ export class DollhouseMCPServer {
83
85
  templateManager;
84
86
  templateRenderer;
85
87
  agentManager;
88
+ memoryManager;
86
89
  // ConfigWizardCheck removed - not included in hotfix
87
90
  constructor() {
88
91
  this.server = new Server({
@@ -107,6 +110,7 @@ export class DollhouseMCPServer {
107
110
  this.templateManager = new TemplateManager();
108
111
  this.templateRenderer = new TemplateRenderer(this.templateManager);
109
112
  this.agentManager = new AgentManager(this.portfolioManager.getBaseDir());
113
+ this.memoryManager = new MemoryManager();
110
114
  // Log resolved path for debugging
111
115
  logger.info(`Personas directory resolved to: ${this.personasDir}`);
112
116
  // PathValidator will be initialized after migration completes
@@ -669,6 +673,29 @@ export class DollhouseMCPServer {
669
673
  }]
670
674
  };
671
675
  }
676
+ case ElementType.MEMORY: {
677
+ const memories = await this.memoryManager.list();
678
+ if (memories.length === 0) {
679
+ return {
680
+ content: [{
681
+ type: "text",
682
+ text: "No memories stored yet. Memories help me remember context about people, projects, and conversations. Would you like me to start creating memories to track important information?"
683
+ }]
684
+ };
685
+ }
686
+ const memoryList = memories.map(memory => {
687
+ const retentionDays = memory.metadata.retentionDays || 'permanent';
688
+ const tags = memory.metadata.tags?.join(', ') || 'none';
689
+ const version = memory.version || memory.metadata.version || '1.0.0';
690
+ return `🧠 ${memory.metadata.name} (v${version}) - ${memory.metadata.description}\n Retention: ${retentionDays} days | Tags: ${tags}`;
691
+ }).join('\n\n');
692
+ return {
693
+ content: [{
694
+ type: "text",
695
+ text: `🧠 Available Memories:\n\n${memoryList}`
696
+ }]
697
+ };
698
+ }
672
699
  default:
673
700
  return {
674
701
  content: [{
@@ -757,6 +784,29 @@ export class DollhouseMCPServer {
757
784
  }]
758
785
  };
759
786
  }
787
+ case ElementType.MEMORY: {
788
+ // Use flexible finding to support both display name and filename
789
+ const allMemories = await this.memoryManager.list();
790
+ const memory = await this.findElementFlexibly(name, allMemories);
791
+ if (!memory) {
792
+ return {
793
+ content: [{
794
+ type: "text",
795
+ text: `❌ Memory '${name}' not found`
796
+ }]
797
+ };
798
+ }
799
+ // Activate the memory
800
+ await memory.activate();
801
+ const retentionDays = memory.metadata.retentionDays || 'permanent';
802
+ const tags = memory.metadata.tags?.join(', ') || 'none';
803
+ return {
804
+ content: [{
805
+ type: "text",
806
+ text: `✅ Memory '${name}' activated\nRetention: ${retentionDays} days\nTags: ${tags}\n\nThis memory is now available for context and will be used to enhance responses.`
807
+ }]
808
+ };
809
+ }
760
810
  default:
761
811
  return {
762
812
  content: [{
@@ -832,6 +882,29 @@ export class DollhouseMCPServer {
832
882
  }]
833
883
  };
834
884
  }
885
+ case ElementType.MEMORY: {
886
+ const memories = await this.memoryManager.list();
887
+ const activeMemories = memories.filter(m => m.getStatus() === 'active');
888
+ if (activeMemories.length === 0) {
889
+ return {
890
+ content: [{
891
+ type: "text",
892
+ text: "🧠 No active memories"
893
+ }]
894
+ };
895
+ }
896
+ const memoryList = activeMemories.map(m => {
897
+ const tags = m.metadata.tags?.join(', ') || 'none';
898
+ const retentionDays = m.metadata.retentionDays || 'permanent';
899
+ return `🧠 ${m.metadata.name} (Tags: ${tags}) - ${retentionDays} days retention`;
900
+ }).join('\n');
901
+ return {
902
+ content: [{
903
+ type: "text",
904
+ text: `Active memories:\n${memoryList}`
905
+ }]
906
+ };
907
+ }
835
908
  default:
836
909
  return {
837
910
  content: [{
@@ -906,6 +979,26 @@ export class DollhouseMCPServer {
906
979
  }]
907
980
  };
908
981
  }
982
+ case ElementType.MEMORY: {
983
+ // Use flexible finding to support both display name and filename
984
+ const allMemories = await this.memoryManager.list();
985
+ const memory = await this.findElementFlexibly(name, allMemories);
986
+ if (!memory) {
987
+ return {
988
+ content: [{
989
+ type: "text",
990
+ text: `❌ Memory '${name}' not found`
991
+ }]
992
+ };
993
+ }
994
+ await memory.deactivate();
995
+ return {
996
+ content: [{
997
+ type: "text",
998
+ text: `✅ Memory '${memory.metadata.name}' deactivated`
999
+ }]
1000
+ };
1001
+ }
909
1002
  default:
910
1003
  return {
911
1004
  content: [{
@@ -1042,6 +1135,38 @@ export class DollhouseMCPServer {
1042
1135
  }]
1043
1136
  };
1044
1137
  }
1138
+ case ElementType.MEMORY: {
1139
+ // Use flexible finding to support both display name and filename
1140
+ const allMemories = await this.memoryManager.list();
1141
+ const memory = await this.findElementFlexibly(name, allMemories);
1142
+ if (!memory) {
1143
+ return {
1144
+ content: [{
1145
+ type: "text",
1146
+ text: `❌ Memory '${name}' not found`
1147
+ }]
1148
+ };
1149
+ }
1150
+ const details = [
1151
+ `🧠 **${memory.metadata.name}**`,
1152
+ `${memory.metadata.description}`,
1153
+ ``,
1154
+ `**Status**: ${memory.getStatus()}`,
1155
+ `**Retention**: ${memory.metadata.retentionDays || 'permanent'} days`,
1156
+ `**Tags**: ${memory.metadata.tags?.join(', ') || 'none'}`,
1157
+ `**Storage Backend**: ${memory.metadata.storageBackend || 'file'}`,
1158
+ `**Privacy Level**: ${memory.metadata.privacyLevel || 'private'}`,
1159
+ ``,
1160
+ `**Content**:`,
1161
+ memory.content || 'No content stored'
1162
+ ];
1163
+ return {
1164
+ content: [{
1165
+ type: "text",
1166
+ text: details.join('\n')
1167
+ }]
1168
+ };
1169
+ }
1045
1170
  default:
1046
1171
  return {
1047
1172
  content: [{
@@ -1098,6 +1223,16 @@ export class DollhouseMCPServer {
1098
1223
  }]
1099
1224
  };
1100
1225
  }
1226
+ case ElementType.MEMORY: {
1227
+ // Memory manager doesn't have clearCache, just list
1228
+ const memories = await this.memoryManager.list();
1229
+ return {
1230
+ content: [{
1231
+ type: "text",
1232
+ text: `🔄 Reloaded ${memories.length} memories from portfolio`
1233
+ }]
1234
+ };
1235
+ }
1101
1236
  default:
1102
1237
  return {
1103
1238
  content: [{
@@ -1253,6 +1388,24 @@ export class DollhouseMCPServer {
1253
1388
  text: `✅ Created agent '${validatedName}' successfully`
1254
1389
  }]
1255
1390
  };
1391
+ case ElementType.MEMORY:
1392
+ const memory = new Memory({
1393
+ name: validatedName,
1394
+ description: validatedDescription,
1395
+ ...sanitizedMetadata
1396
+ });
1397
+ // Add content if provided
1398
+ if (content) {
1399
+ await memory.addEntry(content);
1400
+ }
1401
+ // Save the memory
1402
+ await this.memoryManager.save(memory);
1403
+ return {
1404
+ content: [{
1405
+ type: "text",
1406
+ text: `✅ Created memory '${validatedName}' successfully`
1407
+ }]
1408
+ };
1256
1409
  default:
1257
1410
  return {
1258
1411
  content: [{
@@ -1304,6 +1457,10 @@ export class DollhouseMCPServer {
1304
1457
  manager = this.agentManager;
1305
1458
  element = await this.agentManager.find((e) => e.metadata.name === name);
1306
1459
  break;
1460
+ case ElementType.MEMORY:
1461
+ manager = this.memoryManager;
1462
+ element = await this.memoryManager.find((e) => e.metadata.name === name);
1463
+ break;
1307
1464
  default:
1308
1465
  return {
1309
1466
  content: [{
@@ -5033,4 +5190,4 @@ if ((isDirectExecution || isNpxExecution || isCliExecution) && !isTest) {
5033
5190
  process.exit(1);
5034
5191
  });
5035
5192
  }
5036
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLGlEQUFpRDtBQUNqRCxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDeEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQyxDQUFDLENBQUM7QUFFSCxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25ELE9BQU8sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENBQUMsQ0FBQyxDQUFDO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBd0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNoSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBaUIsTUFBTSx5QkFBeUIs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ZGxpbmcgZm9yIG5weC9DTEkgZXhlY3V0aW9uXG5wcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbicsIChlcnJvcikgPT4ge1xuICBjb25zb2xlLmVycm9yKCdbRG9sbGhvdXNlTUNQXSBTZXJ2ZXIgc3RhcnR1cCBmYWlsZWQnKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufSk7XG5cbnByb2Nlc3Mub24oJ3VuaGFuZGxlZFJlamVjdGlvbicsIChyZWFzb24sIHByb21pc2UpID0+IHtcbiAgY29uc29sZS5lcnJvcignW0RvbGxob3VzZU1DUF0gU2VydmVyIHN0YXJ0dXAgZmFpbGVkJyk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn0pO1xuXG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IFN0ZGlvU2VydmVyVHJhbnNwb3J0IH0gZnJvbSBcIkBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL3N0ZGlvLmpzXCI7XG5pbXBvcnQgeyBNY3BFcnJvciwgRXJyb3JDb2RlIH0gZnJvbSBcIkBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvdHlwZXMuanNcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgbG9hZEluZGljYXRvckNvbmZpZywgZm9ybWF0SW5kaWNhdG9yLCB2YWxpZGF0ZUN1c3RvbUZvcm1hdCwgdHlwZSBJbmRpY2F0b3JDb25maWcgfSBmcm9tICcuL2NvbmZpZy9pbmRpY2F0b3ItY29uZmlnLmpzJztcbmltcG9ydCB7IFNlY3VyZVlhbWxQYXJzZXIgfSBmcm9tICcuL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlFcnJvciB9IGZyb20gJy4vZXJyb3JzL1NlY3VyaXR5RXJyb3IuanMnO1xuaW1wb3J0IHsgU2VjdXJlRXJyb3JIYW5kbGVyIH0gZnJvbSAnLi9zZWN1cml0eS9lcnJvckhhbmRsZXIuanMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyLCBFcnJvckNhdGVnb3J5IH0gZnJvbSAnLi91dGlscy9FcnJvckhhbmRsZXIuanMnO1xuXG4vLyBJbXBvcnQgbW9kdWxhcml6ZWQgY29tcG9uZW50c1xuaW1wb3J0IHsgUGVyc29uYSwgUGVyc29uYU1ldGFkYXRhIH0gZnJvbSAnLi90eXBlcy9wZXJzb25hLmpzJztcbmltcG9ydCB7IEFQSUNhY2hlLCBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuL2NhY2hlL2luZGV4LmpzJztcbmltcG9ydCB7IHZhbGlkYXRlRmlsZW5hbWUsIHNhbml0aXplSW5wdXQsIHZhbGlkYXRlQ29udGVudFNpemUsIHZhbGlkYXRlVXNlcm5hbWUsIE1DUElucHV0VmFsaWRhdG9yIH0gZnJvbSAnLi9zZWN1cml0eS9JbnB1dFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMsIFZBTElEQVRJT05fUEFUVEVSTlMgfSBmcm9tICcuL3NlY3VyaXR5L2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBDb250ZW50VmFsaWRhdG9yIH0gZnJvbSAnLi9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFBhdGhWYWxpZGF0b3IgfSBmcm9tICcuL3NlY3VyaXR5L3BhdGhWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgRmlsZUxvY2tNYW5hZ2VyIH0gZnJvbSAnLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVBbm9ueW1vdXNJZCwgZ2VuZXJhdGVVbmlxdWVJZCwgc2x1Z2lmeSB9IGZyb20gJy4vdXRpbHMvZmlsZXN5c3RlbS5qcyc7XG5pbXBvcnQgeyBHaXRIdWJDbGllbnQsIENvbGxlY3Rpb25Ccm93c2VyLCBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyLCBDb2xsZWN0aW9uU2VhcmNoLCBQZXJzb25hRGV0YWlscywgUGVyc29uYVN1Ym1pdHRlciwgRWxlbWVudEluc3RhbGxlciB9IGZyb20gJy4vY29sbGVjdGlvbi9pbmRleC5qcyc7XG5pbXBvcnQgeyBTZXJ2ZXJTZXR1cCwgSVRvb2xIYW5kbGVyIH0gZnJvbSAnLi9zZXJ2ZXIvaW5kZXguanMnO1xuaW1wb3J0IHsgR2l0SHViQXV0aE1hbmFnZXIsIHR5cGUgRGV2aWNlQ29kZVJlc3BvbnNlIH0gZnJvbSAnLi9hdXRoL0dpdEh1YkF1dGhNYW5hZ2VyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFBlcnNvbmFFeHBvcnRlciwgUGVyc29uYUltcG9ydGVyIH0gZnJvbSAnLi9wZXJzb25hL2V4cG9ydC1pbXBvcnQvaW5kZXguanMnO1xuaW1wb3J0IHsgaXNEZWZhdWx0UGVyc29uYSB9IGZyb20gJy4vY29uc3RhbnRzL2RlZmF1bHRQZXJzb25hcy5qcyc7XG5pbXBvcnQgeyBQb3J0Zm9saW9NYW5hZ2VyLCBFbGVtZW50VHlwZSB9IGZyb20gJy4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanMnO1xuaW1wb3J0IHsgTWlncmF0aW9uTWFuYWdlciB9IGZyb20gJy4vcG9ydGZvbGlvL01pZ3JhdGlvbk1hbmFnZXIuanMnO1xuaW1wb3J0IHsgU2tpbGxNYW5hZ2VyIH0gZnJvbSAnLi9lbGVtZW50cy9za2lsbHMvaW5kZXguanMnO1xuaW1wb3J0IHsgU2tpbGwgfSBmcm9tICcuL2VsZW1lbnRzL3NraWxscy9Ta2lsbC5qcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZU1hbmFnZXIgfSBmcm9tICcuL2VsZW1lbnRzL3RlbXBsYXRlcy9UZW1wbGF0ZU1hbmFnZXIuanMnO1xuaW1wb3J0IHsgVGVtcGxhdGVSZW5kZXJlciB9IGZyb20gJy4vdXRpbHMvVGVtcGxhdGVSZW5kZXJlci5qcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gJy4vZWxlbWVudHMvdGVtcGxhdGVzL1RlbXBsYXRlLmpzJztcbmltcG9ydCB7IEFnZW50TWFuYWdlciB9IGZyb20gJy4vZWxlbWVudHMvYWdlbnRzL0FnZW50TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4vZWxlbWVudHMvYWdlbnRzL0FnZW50LmpzJztcbmltcG9ydCB7IENvbmZpZ01hbmFnZXIgfSBmcm9tICcuL2NvbmZpZy9Db25maWdNYW5hZ2VyLmpzJztcbi8vIENvbmZpZ1dpemFyZCBpbXBvcnRzIHJlbW92ZWQgLSBub3QgaW5jbHVkZWQgaW4gaG90Zml4XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnO1xuXG5cblxuLy8gRGV0ZWN0IGV4ZWN1dGlvbiBlbnZpcm9ubWVudFxuY29uc3QgRVhFQ1VUSU9OX0VOViA9IHtcbiAgaXNOcHg6IHByb2Nlc3MuZW52Lm5wbV9leGVjcGF0aD8uaW5jbHVkZXMoJ25weCcpIHx8IGZhbHNlLFxuICBpc0NsaTogcHJvY2Vzcy5hcmd2WzFdPy5lbmRzV2l0aCgnL2RvbGxob3VzZW1jcCcpIHx8IGZhbHNlLFxuICBpc0RpcmVjdDogIXByb2Nlc3MuZW52Lm5wbV9leGVjcGF0aCxcbiAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICBzY3JpcHRQYXRoOiBwcm9jZXNzLmFyZ3ZbMV0sXG59O1xuXG4vLyBPbmx5IGxvZyBleGVjdXRpb24gZW52aXJvbm1lbnQgaW4gZGVidWcgbW9kZVxuaWYgKHByb2Nlc3MuZW52LkRPTExIT1VTRV9ERUJVRykge1xuICBjb25zb2xlLmVycm9yKCdbRG9sbGhvdXNlTUNQXSBEZWJ1ZyBtb2RlIGVuYWJsZWQnKTtcbn1cblxuZXhwb3J0IGNsYXNzIERvbGxob3VzZU1DUFNlcnZlciBpbXBsZW1lbnRzIElUb29sSGFuZGxlciB7XG4gIHByaXZhdGUgc2VydmVyOiBTZXJ2ZXI7XG4gIHB1YmxpYyBwZXJzb25hc0Rpcjogc3RyaW5nIHwgbnVsbDtcbiAgcHJpdmF0ZSBwZXJzb25hczogTWFwPHN0cmluZywgUGVyc29uYT4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgYWN0aXZlUGVyc29uYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY3VycmVudFVzZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpbml0aWFsaXphdGlvblByb21pc2U6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBhcGlDYWNoZTogQVBJQ2FjaGUgPSBuZXcgQVBJQ2FjaGUoKTtcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSA9IG5ldyBDb2xsZWN0aW9uQ2FjaGUoKTtcbiAgcHJpdmF0ZSByYXRlTGltaXRUcmFja2VyID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcltdPigpO1xuICBwcml2YXRlIGluZGljYXRvckNvbmZpZzogSW5kaWNhdG9yQ29uZmlnO1xuICBwcml2YXRlIGdpdGh1YkNsaWVudDogR2l0SHViQ2xpZW50O1xuICBwcml2YXRlIGdpdGh1YkF1dGhNYW5hZ2VyOiBHaXRIdWJBdXRoTWFuYWdlcjtcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uSW5kZXhNYW5hZ2VyOiBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyO1xuICBwcml2YXRlIGNvbGxlY3Rpb25Ccm93c2VyOiBDb2xsZWN0aW9uQnJvd3NlcjtcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uU2VhcmNoOiBDb2xsZWN0aW9uU2VhcmNoO1xuICBwcml2YXRlIHBlcnNvbmFEZXRhaWxzOiBQZXJzb25hRGV0YWlscztcbiAgcHJpdmF0ZSBlbGVtZW50SW5zdGFsbGVyOiBFbGVtZW50SW5zdGFsbGVyO1xuICBwcml2YXRlIHBlcnNvbmFTdWJtaXR0ZXI6IFBlcnNvbmFTdWJtaXR0ZXI7XG4gIHByaXZhdGUgc2VydmVyU2V0dXA6IFNlcnZlclNldHVwO1xuICBwcml2YXRlIHBlcnNvbmFFeHBvcnRlcjogUGVyc29uYUV4cG9ydGVyO1xuICBwcml2YXRlIHBlcnNvbmFJbXBvcnRlcj86IFBlcnNvbmFJbXBvcnRlcjtcbiAgcHJpdmF0ZSBwb3J0Zm9saW9NYW5hZ2VyOiBQb3J0Zm9saW9NYW5hZ2VyO1xuICBwcml2YXRlIG1pZ3JhdGlvbk1hbmFnZXI6IE1pZ3JhdGlvbk1hbmFnZXI7XG4gIHByaXZhdGUgc2tpbGxNYW5hZ2VyOiBTa2lsbE1hbmFnZXI7XG4gIHByaXZhdGUgdGVtcGxhdGVNYW5hZ2VyOiBUZW1wbGF0ZU1hbmFnZXI7XG4gIHByaXZhdGUgdGVtcGxhdGVSZW5kZXJlcjogVGVtcGxhdGVSZW5kZXJlcjtcbiAgcHJpdmF0ZSBhZ2VudE1hbmFnZXI6IEFnZW50TWFuYWdlcjtcbiAgLy8gQ29uZmlnV2l6YXJkQ2hlY2sgcmVtb3ZlZCAtIG5vdCBpbmNsdWRlZCBpbiBob3RmaXhcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNlcnZlciA9IG5ldyBTZXJ2ZXIoXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiZG9sbGhvdXNlbWNwXCIsXG4gICAgICAgIHZlcnNpb246IFwiMS4wLjAtYnVpbGQtMjAyNTA4MTctMTYzMC1wcjYwNlwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgICAgdG9vbHM6IHt9LFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBDb25maWdXaXphcmRDaGVjayBpbml0aWFsaXphdGlvbiByZW1vdmVkIC0gbm90IGluY2x1ZGVkIGluIGhvdGZpeFxuICAgIFxuICAgIC8vIEluaXRpYWxpemUgcG9ydGZvbGlvIHN5c3RlbVxuICAgIHRoaXMucG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICB0aGlzLm1pZ3JhdGlvbk1hbmFnZXIgPSBuZXcgTWlncmF0aW9uTWFuYWdlcih0aGlzLnBvcnRmb2xpb01hbmFnZXIpO1xuICAgIFxuICAgIC8vIENSSVRJQ0FMIEZJWDogRG9uJ3QgYWNjZXNzIGRpcmVjdG9yaWVzIHVudGlsIGFmdGVyIG1pZ3JhdGlvbiBydW5zXG4gICAgLy8gUHJldmlvdXNseTogdGhpcy5wZXJzb25hc0RpciB3YXMgc2V0IGhlcmUsIGNyZWF0aW5nIGRpcmVjdG9yaWVzIGJlZm9yZSBtaWdyYXRpb24gY291bGQgZml4IHRoZW1cbiAgICAvLyBOb3c6IFdlIGRlbGF5IGRpcmVjdG9yeSBhY2Nlc3MgdW50aWwgaW5pdGlhbGl6ZVBvcnRmb2xpbygpIGNvbXBsZXRlc1xuICAgIC8vIFVzaW5nIG51bGwgdG8gbWFrZSB0aGUgdW5pbml0aWFsaXplZCBzdGF0ZSBleHBsaWNpdCAocGVyIFBSIHJldmlldyBmZWVkYmFjaylcbiAgICB0aGlzLnBlcnNvbmFzRGlyID0gbnVsbDsgLy8gV2lsbCBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBpbiBjb21wbGV0ZUluaXRpYWxpemF0aW9uKClcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGVsZW1lbnQgbWFuYWdlcnNcbiAgICB0aGlzLnNraWxsTWFuYWdlciA9IG5ldyBTa2lsbE1hbmFnZXIoKTtcbiAgICB0aGlzLnRlbXBsYXRlTWFuYWdlciA9IG5ldyBUZW1wbGF0ZU1hbmFnZXIoKTtcbiAgICB0aGlzLnRlbXBsYXRlUmVuZGVyZXIgPSBuZXcgVGVtcGxhdGVSZW5kZXJlcih0aGlzLnRlbXBsYXRlTWFuYWdlcik7XG4gICAgdGhpcy5hZ2VudE1hbmFnZXIgPSBuZXcgQWdlbnRNYW5hZ2VyKHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRCYXNlRGlyKCkpO1xuICAgIFxuICAgIC8vIExvZyByZXNvbHZlZCBwYXRoIGZvciBkZWJ1Z2dpbmdcbiAgICBsb2dnZXIuaW5mbyhgUGVyc29uYXMgZGlyZWN0b3J5IHJlc29sdmVkIHRvOiAke3RoaXMucGVyc29uYXNEaXJ9YCk7XG4gICAgXG4gICAgLy8gUGF0aFZhbGlkYXRvciB3aWxsIGJlIGluaXRpYWxpemVkIGFmdGVyIG1pZ3JhdGlvbiBjb21wbGV0ZXNcbiAgICBcbiAgICAvLyBMb2FkIHVzZXIgaWRlbnRpdHkgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX1VTRVIgfHwgbnVsbDtcbiAgICBcbiAgICAvLyBMb2FkIGluZGljYXRvciBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5pbmRpY2F0b3JDb25maWcgPSBsb2FkSW5kaWNhdG9yQ29uZmlnKCk7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBwZXJzb25hIG1hbmFnZXJcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGNvbGxlY3Rpb24gbW9kdWxlc1xuICAgIHRoaXMuZ2l0aHViQ2xpZW50ID0gbmV3IEdpdEh1YkNsaWVudCh0aGlzLmFwaUNhY2hlLCB0aGlzLnJhdGVMaW1pdFRyYWNrZXIpO1xuICAgIHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIgPSBuZXcgR2l0SHViQXV0aE1hbmFnZXIodGhpcy5hcGlDYWNoZSk7XG4gICAgdGhpcy5jb2xsZWN0aW9uSW5kZXhNYW5hZ2VyID0gbmV3IENvbGxlY3Rpb25JbmRleE1hbmFnZXIoKTtcbiAgICB0aGlzLmNvbGxlY3Rpb25Ccm93c2VyID0gbmV3IENvbGxlY3Rpb25Ccm93c2VyKHRoaXMuZ2l0aHViQ2xpZW50LCB0aGlzLmNvbGxlY3Rpb25DYWNoZSwgdGhpcy5jb2xsZWN0aW9uSW5kZXhNYW5hZ2VyKTtcbiAgICB0aGlzLmNvbGxlY3Rpb25TZWFyY2ggPSBuZXcgQ29sbGVjdGlvblNlYXJjaCh0aGlzLmdpdGh1YkNsaWVudCwgdGhpcy5jb2xsZWN0aW9uQ2FjaGUpO1xuICAgIHRoaXMucGVyc29uYURldGFpbHMgPSBuZXcgUGVyc29uYURldGFpbHModGhpcy5naXRodWJDbGllbnQpO1xuICAgIHRoaXMuZWxlbWVudEluc3RhbGxlciA9IG5ldyBFbGVtZW50SW5zdGFsbGVyKHRoaXMuZ2l0aHViQ2xpZW50KTtcbiAgICB0aGlzLnBlcnNvbmFTdWJtaXR0ZXIgPSBuZXcgUGVyc29uYVN1Ym1pdHRlcigpO1xuICAgIFxuICAgIC8vIFVwZGF0ZSBtYW5hZ2VyIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbWlncmF0aW9uIGNvbXBsZXRlcyB0byBhdm9pZCBqc2RvbSBjcmFzaFxuICAgIFxuICAgIC8vIEluaXRpYWxpemUgZXhwb3J0L2ltcG9ydC9zaGFyZSBtb2R1bGVzXG4gICAgdGhpcy5wZXJzb25hRXhwb3J0ZXIgPSBuZXcgUGVyc29uYUV4cG9ydGVyKHRoaXMuY3VycmVudFVzZXIpO1xuICAgIC8vIFBlcnNvbmFJbXBvcnRlciB3aWxsIGJlIGluaXRpYWxpemVkIGFmdGVyIG1pZ3JhdGlvbiBjb21wbGV0ZXNcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHNlcnZlciBzZXR1cFxuICAgIHRoaXMuc2VydmVyU2V0dXAgPSBuZXcgU2VydmVyU2V0dXAoKTtcbiAgICB0aGlzLnNlcnZlclNldHVwLnNldHVwU2VydmVyKHRoaXMuc2VydmVyLCB0aGlzKTtcbiAgICBcbiAgICAvLyBGSVggIzYxMDogUG9ydGZvbGlvIGluaXRpYWxpemF0aW9uIG1vdmVkIHRvIHJ1bigpIG1ldGhvZCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uXG4gICAgLy8gUHJldmlvdXNseTogdGhpcy5pbml0aWFsaXplUG9ydGZvbGlvKCkudGhlbigpIHJhbiBhc3luYyBpbiBjb25zdHJ1Y3RvclxuICAgIC8vIE5vdzogSW5pdGlhbGl6YXRpb24gaGFwcGVucyBzeW5jaHJvbm91c2x5IGluIHJ1bigpIGJlZm9yZSBNQ1AgY29ubmVjdGlvblxuICB9XG4gIFxuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVQb3J0Zm9saW8oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ2hlY2sgaWYgbWlncmF0aW9uIGlzIG5lZWRlZFxuICAgIGNvbnN0IG5lZWRzTWlncmF0aW9uID0gYXdhaXQgdGhpcy5taWdyYXRpb25NYW5hZ2VyLm5lZWRzTWlncmF0aW9uKCk7XG4gICAgXG4gICAgaWYgKG5lZWRzTWlncmF0aW9uKSB7XG4gICAgICBsb2dnZXIuaW5mbygnTGVnYWN5IHBlcnNvbmFzIGRldGVjdGVkLiBTdGFydGluZyBtaWdyYXRpb24uLi4nKTtcbiAgICAgIFxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5taWdyYXRpb25NYW5hZ2VyLm1pZ3JhdGUoeyBiYWNrdXA6IHRydWUgfSk7XG4gICAgICBcbiAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICBsb2dnZXIuaW5mbyhgU3VjY2Vzc2Z1bGx5IG1pZ3JhdGVkICR7cmVzdWx0Lm1pZ3JhdGVkQ291bnR9IHBlcnNvbmFzYCk7XG4gICAgICAgIGlmIChyZXN1bHQuYmFja2VkVXAgJiYgcmVzdWx0LmJhY2t1cFBhdGgpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhgQmFja3VwIGNyZWF0ZWQgYXQ6ICR7cmVzdWx0LmJhY2t1cFBhdGh9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignTWlncmF0aW9uIGNvbXBsZXRlZCB3aXRoIGVycm9yczonKTtcbiAgICAgICAgcmVzdWx0LmVycm9ycy5mb3JFYWNoKGVyciA9PiBsb2dnZXIuZXJyb3IoYCAgLSAke2Vycn1gKSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIEVuc3VyZSBwb3J0Zm9saW8gc3RydWN0dXJlIGV4aXN0c1xuICAgIGNvbnN0IHBvcnRmb2xpb0V4aXN0cyA9IGF3YWl0IHRoaXMucG9ydGZvbGlvTWFuYWdlci5leGlzdHMoKTtcbiAgICBpZiAoIXBvcnRmb2xpb0V4aXN0cykge1xuICAgICAgbG9nZ2VyLmluZm8oJ0NyZWF0aW5nIHBvcnRmb2xpbyBkaXJlY3Rvcnkgc3RydWN0dXJlLi4uJyk7XG4gICAgICBhd2FpdCB0aGlzLnBvcnRmb2xpb01hbmFnZXIuaW5pdGlhbGl6ZSgpO1xuICAgIH1cbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGNvbGxlY3Rpb24gY2FjaGUgZm9yIGFub255bW91cyBhY2Nlc3NcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVDb2xsZWN0aW9uQ2FjaGUoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENvbXBsZXRlIGluaXRpYWxpemF0aW9uIGFmdGVyIHBvcnRmb2xpbyBpcyByZWFkeVxuICAgKiBGSVggIzYxMDogVGhpcyB3YXMgcHJldmlvdXNseSBpbiBhIC50aGVuKCkgY2FsbGJhY2sgaW4gdGhlIGNvbnN0cnVjdG9yXG4gICAqIE5vdyBjYWxsZWQgc3luY2hyb25vdXNseSBmcm9tIHJ1bigpIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY29tcGxldGVJbml0aWFsaXphdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBOT1cgc2FmZSB0byBhY2Nlc3MgZGlyZWN0b3JpZXMgYWZ0ZXIgbWlncmF0aW9uXG4gICAgdGhpcy5wZXJzb25hc0RpciA9IHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlBFUlNPTkEpO1xuICAgIFxuICAgIC8vIExvZyByZXNvbHZlZCBwYXRoIGZvciBkZWJ1Z2dpbmdcbiAgICBsb2dnZXIuaW5mbyhgUGVyc29uYXMgZGlyZWN0b3J5IHJlc29sdmVkIHRvOiAke3RoaXMucGVyc29uYXNEaXJ9YCk7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBQYXRoVmFsaWRhdG9yIHdpdGggdGhlIHBlcnNvbmFzIGRpcmVjdG9yeVxuICAgIFBhdGhWYWxpZGF0b3IuaW5pdGlhbGl6ZSh0aGlzLnBlcnNvbmFzRGlyKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHVwZGF0ZSBtYW5hZ2VyIHdpdGggc2FmZSBkaXJlY3RvcnlcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGltcG9ydCBtb2R1bGUgdGhhdCBkZXBlbmRzIG9uIHBlcnNvbmFzRGlyXG4gICAgdGhpcy5wZXJzb25hSW1wb3J0ZXIgPSBuZXcgUGVyc29uYUltcG9ydGVyKHRoaXMucGVyc29uYXNEaXIsIHRoaXMuY3VycmVudFVzZXIpO1xuICAgIFxuICAgIHRoaXMubG9hZFBlcnNvbmFzKCk7XG4gICAgXG4gICAgLy8gTWFyayBpbml0aWFsaXphdGlvbiBhcyBjb21wbGV0ZVxuICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBFbnN1cmUgc2VydmVyIGlzIGluaXRpYWxpemVkIGJlZm9yZSBhbnkgb3BlcmF0aW9uXG4gICAqIEZJWCAjNjEwOiBBZGRlZCBmb3IgdGVzdCBjb21wYXRpYmlsaXR5IC0gdGVzdHMgZG9uJ3QgY2FsbCBydW4oKVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVJbml0aWFsaXplZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIElmIGluaXRpYWxpemF0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdhaXQgZm9yIGl0XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlKSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gU3RhcnQgaW5pdGlhbGl6YXRpb25cbiAgICB0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQb3J0Zm9saW8oKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb21wbGV0ZUluaXRpYWxpemF0aW9uKCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiUG9ydGZvbGlvIGFuZCBwZXJzb25hcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgKGxhenkpXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuZW5zdXJlSW5pdGlhbGl6ZWQnLCBlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0pKCk7XG4gICAgXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXphdGlvblByb21pc2U7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGNvbGxlY3Rpb24gY2FjaGUgd2l0aCBzZWVkIGRhdGEgZm9yIGFub255bW91cyBicm93c2luZ1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplQ29sbGVjdGlvbkNhY2hlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpc0NhY2hlVmFsaWQgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb25DYWNoZS5pc0NhY2hlVmFsaWQoKTtcbiAgICAgIGlmICghaXNDYWNoZVZhbGlkKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdJbml0aWFsaXppbmcgY29sbGVjdGlvbiBjYWNoZSB3aXRoIHNlZWQgZGF0YS4uLicpO1xuICAgICAgICBjb25zdCB7IENvbGxlY3Rpb25TZWVkZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9jb2xsZWN0aW9uL0NvbGxlY3Rpb25TZWVkZXIuanMnKTtcbiAgICAgICAgY29uc3Qgc2VlZERhdGEgPSBDb2xsZWN0aW9uU2VlZGVyLmdldFNlZWREYXRhKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbkNhY2hlLnNhdmVDYWNoZShzZWVkRGF0YSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBDb2xsZWN0aW9uIGNhY2hlIGluaXRpYWxpemVkIHdpdGggJHtzZWVkRGF0YS5sZW5ndGh9IGl0ZW1zYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbkNhY2hlLmdldENhY2hlU3RhdHMoKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBDb2xsZWN0aW9uIGNhY2hlIGFscmVhZHkgdmFsaWQgd2l0aCAke3N0YXRzLml0ZW1Db3VudH0gaXRlbXNgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuaW5pdGlhbGl6ZUNvbGxlY3Rpb25DYWNoZScsIGVycm9yKTtcbiAgICAgIC8vIERvbid0IHRocm93IC0gY2FjaGUgZmFpbHVyZXMgc2hvdWxkbid0IHByZXZlbnQgc2VydmVyIHN0YXJ0dXBcbiAgICB9XG4gIH1cblxuICAvLyBUb29sIGhhbmRsZXIgbWV0aG9kcyAtIG5vdyBwdWJsaWMgZm9yIGFjY2VzcyBmcm9tIHRvb2wgbW9kdWxlc1xuICBcbiAgcHJpdmF0ZSBnZXRQZXJzb25hSW5kaWNhdG9yKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZVBlcnNvbmEpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIGNvbnN0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldCh0aGlzLmFjdGl2ZVBlcnNvbmEpO1xuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdEluZGljYXRvcih0aGlzLmluZGljYXRvckNvbmZpZywge1xuICAgICAgbmFtZTogcGVyc29uYS5tZXRhZGF0YS5uYW1lLFxuICAgICAgdmVyc2lvbjogcGVyc29uYS5tZXRhZGF0YS52ZXJzaW9uLFxuICAgICAgYXV0aG9yOiBwZXJzb25hLm1ldGFkYXRhLmF1dGhvcixcbiAgICAgIGNhdGVnb3J5OiBwZXJzb25hLm1ldGFkYXRhLmNhdGVnb3J5XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplIGVsZW1lbnQgdHlwZSB0byBoYW5kbGUgYm90aCBzaW5ndWxhciAobmV3KSBhbmQgcGx1cmFsIChsZWdhY3kpIGZvcm1zXG4gICAqIFRoaXMgcHJvdmlkZXMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBkdXJpbmcgdGhlIHRyYW5zaXRpb24gdG8gdjEuNC4wXG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gTWFwIHBsdXJhbCBmb3JtcyB0byBzaW5ndWxhciBFbGVtZW50VHlwZSB2YWx1ZXNcbiAgICBjb25zdCBwbHVyYWxUb1Npbmd1bGFyTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ3BlcnNvbmFzJzogRWxlbWVudFR5cGUuUEVSU09OQSxcbiAgICAgICdza2lsbHMnOiBFbGVtZW50VHlwZS5TS0lMTCxcbiAgICAgICd0ZW1wbGF0ZXMnOiBFbGVtZW50VHlwZS5URU1QTEFURSxcbiAgICAgICdhZ2VudHMnOiBFbGVtZW50VHlwZS5BR0VOVCxcbiAgICAgICdtZW1vcmllcyc6IEVsZW1lbnRUeXBlLk1FTU9SWSxcbiAgICAgICdlbnNlbWJsZXMnOiBFbGVtZW50VHlwZS5FTlNFTUJMRVxuICAgIH07XG4gICAgXG4gICAgLy8gSWYgaXQncyBhbHJlYWR5IGEgdmFsaWQgRWxlbWVudFR5cGUgdmFsdWUsIHJldHVybiBhcy1pc1xuICAgIGlmIChPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5pbmNsdWRlcyh0eXBlIGFzIEVsZW1lbnRUeXBlKSkge1xuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICAgIFxuICAgIC8vIElmIGl0J3MgYSBwbHVyYWwgZm9ybSwgY29udmVydCB0byBzaW5ndWxhclxuICAgIGlmIChwbHVyYWxUb1Npbmd1bGFyTWFwW3R5cGVdKSB7XG4gICAgICAvLyBMb2cgZGVwcmVjYXRpb24gd2FybmluZ1xuICAgICAgbG9nZ2VyLndhcm4oYFVzaW5nIHBsdXJhbCBlbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2Ugc2luZ3VsYXIgZm9ybSAnJHtwbHVyYWxUb1Npbmd1bGFyTWFwW3R5cGVdfScgaW5zdGVhZC5gKTtcbiAgICAgIHJldHVybiBwbHVyYWxUb1Npbmd1bGFyTWFwW3R5cGVdO1xuICAgIH1cbiAgICBcbiAgICAvLyBVbmtub3duIHR5cGUgLSByZXR1cm4gYXMtaXMgYW5kIGxldCB2YWxpZGF0aW9uIGhhbmRsZSBpdFxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYW4gZWxlbWVudCBieSBuYW1lLCBzdXBwb3J0aW5nIGJvdGggZXhhY3QgZGlzcGxheSBuYW1lIGFuZCBmaWxlbmFtZSAoc2x1ZykgbWF0Y2hpbmdcbiAgICogVGhpcyBwcm92aWRlcyBiZXR0ZXIgVVggYnkgYWxsb3dpbmcgdXNlcnMgdG8gcmVmZXJlbmNlIGVsZW1lbnRzIGJ5IGVpdGhlciBmb3JtYXRcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSB0byBzZWFyY2ggZm9yIChjYW4gYmUgZGlzcGxheSBuYW1lIG9yIGZpbGVuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uKVxuICAgKiBAcGFyYW0gZWxlbWVudExpc3QgLSBUaGUgbGlzdCBvZiBlbGVtZW50cyB0byBzZWFyY2ggdGhyb3VnaFxuICAgKiBAcmV0dXJucyBUaGUgZm91bmQgZWxlbWVudCBvciB1bmRlZmluZWRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmluZEVsZW1lbnRGbGV4aWJseShuYW1lOiBzdHJpbmcsIGVsZW1lbnRMaXN0OiBhbnlbXSk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCFuYW1lIHx8ICFlbGVtZW50TGlzdCB8fCBlbGVtZW50TGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIFxuICAgIC8vIE5vcm1hbGl6ZSB0aGUgc2VhcmNoIG5hbWUgZm9yIGNvbXBhcmlzb25cbiAgICBjb25zdCBzZWFyY2hOYW1lTG93ZXIgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3Qgc2VhcmNoTmFtZVNsdWcgPSBzbHVnaWZ5KG5hbWUpO1xuICAgIFxuICAgIC8vIEZpcnN0IHRyeSBleGFjdCBuYW1lIG1hdGNoIChjYXNlLWluc2Vuc2l0aXZlKVxuICAgIGxldCBlbGVtZW50ID0gZWxlbWVudExpc3QuZmluZChlID0+IFxuICAgICAgZS5tZXRhZGF0YT8ubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gc2VhcmNoTmFtZUxvd2VyXG4gICAgKTtcbiAgICBcbiAgICAvLyBJZiBub3QgZm91bmQsIHRyeSBzbHVnIG1hdGNoIChmaWxlbmFtZSB3aXRob3V0IGV4dGVuc2lvbilcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50TGlzdC5maW5kKGUgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50U2x1ZyA9IHNsdWdpZnkoZS5tZXRhZGF0YT8ubmFtZSB8fCAnJyk7XG4gICAgICAgIHJldHVybiBlbGVtZW50U2x1ZyA9PT0gc2VhcmNoTmFtZVNsdWcgfHwgZWxlbWVudFNsdWcgPT09IHNlYXJjaE5hbWVMb3dlcjtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICAvLyBJZiBzdGlsbCBub3QgZm91bmQsIHRyeSBwYXJ0aWFsIG1hdGNoIG9uIGZpbGVuYW1lXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gZWxlbWVudExpc3QuZmluZChlID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudE5hbWUgPSBlLm1ldGFkYXRhPy5uYW1lIHx8ICcnO1xuICAgICAgICBjb25zdCBlbGVtZW50U2x1ZyA9IHNsdWdpZnkoZWxlbWVudE5hbWUpO1xuICAgICAgICByZXR1cm4gZWxlbWVudFNsdWcuaW5jbHVkZXMoc2VhcmNoTmFtZVNsdWcpIHx8IFxuICAgICAgICAgICAgICAgZWxlbWVudE5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hOYW1lTG93ZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG4gIFxuICAvKipcbiAgICogQ29udmVydCBhIHN0cmluZyB0byBhIHNsdWcgZm9ybWF0IChsb3dlcmNhc2Ugd2l0aCBoeXBoZW5zKVxuICAgKiBNYXRjaGVzIHRoZSBmb3JtYXQgdXNlZCBmb3IgZWxlbWVudCBmaWxlbmFtZXNcbiAgICovXG4gIFxuICAvKipcbiAgICogU2FuaXRpemUgbWV0YWRhdGEgb2JqZWN0IHRvIHByZXZlbnQgcHJvdG90eXBlIHBvbGx1dGlvblxuICAgKiBSZW1vdmVzIGFueSBkYW5nZXJvdXMgcHJvcGVydGllcyB0aGF0IGNvdWxkIGFmZmVjdCBPYmplY3QucHJvdG90eXBlXG4gICAqL1xuICBwcml2YXRlIHNhbml0aXplTWV0YWRhdGEobWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBpZiAoIW1ldGFkYXRhIHx8IHR5cGVvZiBtZXRhZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZGFuZ2Vyb3VzUHJvcGVydGllcyA9IFsnX19wcm90b19fJywgJ2NvbnN0cnVjdG9yJywgJ3Byb3RvdHlwZSddO1xuICAgIGNvbnN0IHNhbml0aXplZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIFxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKSkge1xuICAgICAgaWYgKCFkYW5nZXJvdXNQcm9wZXJ0aWVzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgc2FuaXRpemUgbmVzdGVkIG9iamVjdHNcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgc2FuaXRpemVkW2tleV0gPSB0aGlzLnNhbml0aXplTWV0YWRhdGEodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNhbml0aXplZFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHNhbml0aXplZDtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkUGVyc29uYXMoKSB7XG4gICAgLy8gVmFsaWRhdGUgdGhlIHBlcnNvbmFzIGRpcmVjdG9yeSBwYXRoXG4gICAgLy8gcGVyc29uYXNEaXIgaXMgZ3VhcmFudGVlZCB0byBiZSBzZXQgYnkgY29tcGxldGVJbml0aWFsaXphdGlvbiBiZWZvcmUgdGhpcyBpcyBjYWxsZWRcbiAgICBpZiAoIXBhdGguaXNBYnNvbHV0ZSh0aGlzLnBlcnNvbmFzRGlyISkpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBQZXJzb25hcyBkaXJlY3RvcnkgcGF0aCBpcyBub3QgYWJzb2x1dGU6ICR7dGhpcy5wZXJzb25hc0Rpcn1gKTtcbiAgICB9XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLmFjY2Vzcyh0aGlzLnBlcnNvbmFzRGlyISk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIENyZWF0ZSBwZXJzb25hcyBkaXJlY3RvcnkgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMubWtkaXIodGhpcy5wZXJzb25hc0RpciEsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBsb2dnZXIuaW5mbyhgQ3JlYXRlZCBwZXJzb25hcyBkaXJlY3RvcnkgYXQ6ICR7dGhpcy5wZXJzb25hc0Rpcn1gKTtcbiAgICAgICAgLy8gQ29udGludWUgdG8gdHJ5IGxvYWRpbmcgKGRpcmVjdG9yeSB3aWxsIGJlIGVtcHR5KVxuICAgICAgfSBjYXRjaCAobWtkaXJFcnJvcikge1xuICAgICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5sb2FkUGVyc29uYXMubWtkaXInLCBta2RpckVycm9yLCB7IHBlcnNvbmFzRGlyOiB0aGlzLnBlcnNvbmFzRGlyIH0pO1xuICAgICAgICAvLyBEb24ndCB0aHJvdyAtIGVtcHR5IHBvcnRmb2xpbyBpcyB2YWxpZFxuICAgICAgICB0aGlzLnBlcnNvbmFzLmNsZWFyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gcGVyc29uYXNEaXIgaXMgZ3VhcmFudGVlZCB0byBiZSBzZXQgYnkgY29tcGxldGVJbml0aWFsaXphdGlvbiBiZWZvcmUgdGhpcyBpcyBjYWxsZWRcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcih0aGlzLnBlcnNvbmFzRGlyISk7XG4gICAgICBjb25zdCBtYXJrZG93bkZpbGVzID0gZmlsZXNcbiAgICAgICAgLmZpbHRlcihmaWxlID0+IGZpbGUuZW5kc1dpdGgoJy5tZCcpKVxuICAgICAgICAuZmlsdGVyKGZpbGUgPT4gIXRoaXMucG9ydGZvbGlvTWFuYWdlci5pc1Rlc3RFbGVtZW50KGZpbGUpKTtcblxuICAgICAgdGhpcy5wZXJzb25hcy5jbGVhcigpO1xuICAgICAgXG4gICAgICBpZiAobWFya2Rvd25GaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1tEb2xsaG91c2VNQ1BdIE5vIHBlcnNvbmFzIGZvdW5kIGluIHBvcnRmb2xpby4gVXNlIGJyb3dzZV9jb2xsZWN0aW9uIHRvIGluc3RhbGwgc29tZSEnKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIG1hcmtkb3duRmlsZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyISwgZmlsZSk7XG4gICAgICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSBhd2FpdCBQYXRoVmFsaWRhdG9yLnNhZmVSZWFkRmlsZShmaWxlUGF0aCk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gVXNlIHNlY3VyZSBZQU1MIHBhcnNlclxuICAgICAgICAgIGxldCBwYXJzZWQ7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBhcnNlZCA9IFNlY3VyZVlhbWxQYXJzZXIuc2FmZU1hdHRlcihmaWxlQ29udGVudCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlY3VyaXR5RXJyb3IpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oYFNlY3VyaXR5IHRocmVhdCBkZXRlY3RlZCBpbiBwZXJzb25hICR7ZmlsZX06ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBwYXJzZWQuZGF0YSBhcyBQZXJzb25hTWV0YWRhdGE7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IHBhcnNlZC5jb250ZW50O1xuXG4gICAgICAgICAgaWYgKCFtZXRhZGF0YS5uYW1lKSB7XG4gICAgICAgICAgICBtZXRhZGF0YS5uYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlLCAnLm1kJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gR2VuZXJhdGUgdW5pcXVlIElEIGlmIG5vdCBwcmVzZW50XG4gICAgICAgICAgbGV0IHVuaXF1ZUlkID0gbWV0YWRhdGEudW5pcXVlX2lkO1xuICAgICAgICAgIGlmICghdW5pcXVlSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGF1dGhvckZvcklkID0gbWV0YWRhdGEuYXV0aG9yIHx8IHRoaXMuZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpO1xuICAgICAgICAgICAgdW5pcXVlSWQgPSBnZW5lcmF0ZVVuaXF1ZUlkKG1ldGFkYXRhLm5hbWUsIGF1dGhvckZvcklkKTtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgR2VuZXJhdGVkIHVuaXF1ZSBJRCBmb3IgJHttZXRhZGF0YS5uYW1lfTogJHt1bmlxdWVJZH1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIG5ldyBtZXRhZGF0YSBmaWVsZHNcbiAgICAgICAgICBpZiAoIW1ldGFkYXRhLmNhdGVnb3J5KSBtZXRhZGF0YS5jYXRlZ29yeSA9ICdnZW5lcmFsJztcbiAgICAgICAgICBpZiAoIW1ldGFkYXRhLmFnZV9yYXRpbmcpIG1ldGFkYXRhLmFnZV9yYXRpbmcgPSAnYWxsJztcbiAgICAgICAgICBpZiAoIW1ldGFkYXRhLmNvbnRlbnRfZmxhZ3MpIG1ldGFkYXRhLmNvbnRlbnRfZmxhZ3MgPSBbXTtcbiAgICAgICAgICBpZiAobWV0YWRhdGEuYWlfZ2VuZXJhdGVkID09PSB1bmRlZmluZWQpIG1ldGFkYXRhLmFpX2dlbmVyYXRlZCA9IGZhbHNlO1xuICAgICAgICAgIGlmICghbWV0YWRhdGEuZ2VuZXJhdGlvbl9tZXRob2QpIG1ldGFkYXRhLmdlbmVyYXRpb25fbWV0aG9kID0gJ2h1bWFuJztcbiAgICAgICAgICBpZiAoIW1ldGFkYXRhLnByaWNlKSBtZXRhZGF0YS5wcmljZSA9ICdmcmVlJztcbiAgICAgICAgICBpZiAoIW1ldGFkYXRhLmxpY2Vuc2UpIG1ldGFkYXRhLmxpY2Vuc2UgPSAnQ0MtQlktU0EtNC4wJztcblxuICAgICAgICAgIGNvbnN0IHBlcnNvbmE6IFBlcnNvbmEgPSB7XG4gICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICBmaWxlbmFtZTogZmlsZSxcbiAgICAgICAgICAgIHVuaXF1ZV9pZDogdW5pcXVlSWQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMucGVyc29uYXMuc2V0KGZpbGUsIHBlcnNvbmEpO1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgTG9hZGVkIHBlcnNvbmE6ICR7bWV0YWRhdGEubmFtZX0gKCR7dW5pcXVlSWR9YCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIubG9hZFBlcnNvbmFzLmxvYWRGaWxlJywgZXJyb3IsIHsgZmlsZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgRU5PRU5UIGdyYWNlZnVsbHkgLSBkaXJlY3RvcnkgbWlnaHQgbm90IGV4aXN0IHlldFxuICAgICAgaWYgKChlcnJvciBhcyBhbnkpLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbRG9sbGhvdXNlTUNQXSBQZXJzb25hcyBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgeWV0IC0gcG9ydGZvbGlvIGlzIGVtcHR5Jyk7XG4gICAgICAgIHRoaXMucGVyc29uYXMuY2xlYXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIubG9hZFBlcnNvbmFzJywgZXJyb3IpO1xuICAgICAgdGhpcy5wZXJzb25hcy5jbGVhcigpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxpc3RQZXJzb25hcygpIHtcbiAgICBjb25zdCBwZXJzb25hTGlzdCA9IEFycmF5LmZyb20odGhpcy5wZXJzb25hcy52YWx1ZXMoKSkubWFwKHBlcnNvbmEgPT4gKHtcbiAgICAgIGZpbGVuYW1lOiBwZXJzb25hLmZpbGVuYW1lLFxuICAgICAgdW5pcXVlX2lkOiBwZXJzb25hLnVuaXF1ZV9pZCxcbiAgICAgIG5hbWU6IHBlcnNvbmEubWV0YWRhdGEubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwZXJzb25hLm1ldGFkYXRhLmRlc2NyaXB0aW9uLFxuICAgICAgdHJpZ2dlcnM6IHBlcnNvbmEubWV0YWRhdGEudHJpZ2dlcnMgfHwgW10sXG4gICAgICB2ZXJzaW9uOiBwZXJzb25hLm1ldGFkYXRhLnZlcnNpb24gfHwgXCIxLjBcIixcbiAgICAgIGF1dGhvcjogcGVyc29uYS5tZXRhZGF0YS5hdXRob3IgfHwgXCJVbmtub3duXCIsXG4gICAgICBjYXRlZ29yeTogcGVyc29uYS5tZXRhZGF0YS5jYXRlZ29yeSB8fCAnZ2VuZXJhbCcsXG4gICAgICBhZ2VfcmF0aW5nOiBwZXJzb25hLm1ldGFkYXRhLmFnZV9yYXRpbmcgfHwgJ2FsbCcsXG4gICAgICBwcmljZTogcGVyc29uYS5tZXRhZGF0YS5wcmljZSB8fCAnZnJlZScsXG4gICAgICBhaV9nZW5lcmF0ZWQ6IHBlcnNvbmEubWV0YWRhdGEuYWlfZ2VuZXJhdGVkIHx8IGZhbHNlLFxuICAgICAgYWN0aXZlOiB0aGlzLmFjdGl2ZVBlcnNvbmEgPT09IHBlcnNvbmEuZmlsZW5hbWUsXG4gICAgfSkpO1xuXG4gICAgaWYgKHBlcnNvbmFMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9WW91IGRvbid0IGhhdmUgYW55IHBlcnNvbmFzIGluc3RhbGxlZCB5ZXQuIFdvdWxkIHlvdSBsaWtlIHRvIGJyb3dzZSB0aGUgRG9sbGhvdXNlTUNQIGNvbGxlY3Rpb24gb24gR2l0SHViIHRvIHNlZSB3aGF0J3MgYXZhaWxhYmxlPyBJIGNhbiBzaG93IHlvdSBwZXJzb25hcyBmb3IgY3JlYXRpdmUgd3JpdGluZywgdGVjaG5pY2FsIGFuYWx5c2lzLCBhbmQgbW9yZS4gSnVzdCBzYXkgXCJ5ZXNcIiBvciB1c2UgJ2Jyb3dzZV9jb2xsZWN0aW9uJy5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX1BdmFpbGFibGUgUGVyc29uYXMgKCR7cGVyc29uYUxpc3QubGVuZ3RofSk6XFxuXFxuYCArXG4gICAgICAgICAgICBwZXJzb25hTGlzdC5tYXAocCA9PiBcbiAgICAgICAgICAgICAgYCR7cC5hY3RpdmUgPyAn8J+UuSAnIDogJ+KWq++4jyAnfSoqJHtwLm5hbWV9KiogKCR7cC51bmlxdWVfaWR9KVxcbmAgK1xuICAgICAgICAgICAgICBgICAgJHtwLmRlc2NyaXB0aW9ufVxcbmAgK1xuICAgICAgICAgICAgICBgICAg8J+TgSAke3AuY2F0ZWdvcnl9IHwg8J+OrSAke3AuYXV0aG9yfSB8IPCflJYgJHtwLnByaWNlfSB8ICR7cC5haV9nZW5lcmF0ZWQgPyAn8J+kliBBSScgOiAn8J+RpCBIdW1hbid9XFxuYCArXG4gICAgICAgICAgICAgIGAgICBBZ2U6ICR7cC5hZ2VfcmF0aW5nfSB8IFZlcnNpb246ICR7cC52ZXJzaW9ufVxcbmAgK1xuICAgICAgICAgICAgICBgICAgVHJpZ2dlcnM6ICR7cC50cmlnZ2Vycy5qb2luKCcsICcpIHx8ICdOb25lJ31cXG5gXG4gICAgICAgICAgICApLmpvaW4oJ1xcbicpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgYWN0aXZhdGVQZXJzb25hKHBlcnNvbmFJZGVudGlmaWVyOiBzdHJpbmcpIHtcbiAgICAvLyBFbmhhbmNlZCBpbnB1dCB2YWxpZGF0aW9uIGZvciBwZXJzb25hIGlkZW50aWZpZXJcbiAgICBjb25zdCB2YWxpZGF0ZWRJZGVudGlmaWVyID0gTUNQSW5wdXRWYWxpZGF0b3IudmFsaWRhdGVQZXJzb25hSWRlbnRpZmllcihwZXJzb25hSWRlbnRpZmllcik7XG4gICAgXG4gICAgLy8gVHJ5IHRvIGZpbmQgcGVyc29uYSBieSBmaWxlbmFtZSBmaXJzdCwgdGhlbiBieSBuYW1lXG4gICAgbGV0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldCh2YWxpZGF0ZWRJZGVudGlmaWVyKTtcbiAgICBcbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIC8vIFNlYXJjaCBieSBuYW1lXG4gICAgICBwZXJzb25hID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKS5maW5kKHAgPT4gXG4gICAgICAgIHAubWV0YWRhdGEubmFtZS50b0xvd2VyQ2FzZSgpID09PSB2YWxpZGF0ZWRJZGVudGlmaWVyLnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICB0aHJvdyBuZXcgTWNwRXJyb3IoXG4gICAgICAgIEVycm9yQ29kZS5JbnZhbGlkUGFyYW1zLFxuICAgICAgICBgUGVyc29uYSBub3QgZm91bmQ6ICR7cGVyc29uYUlkZW50aWZpZXJ9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGl2ZVBlcnNvbmEgPSBwZXJzb25hLmZpbGVuYW1lO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfVBlcnNvbmEgQWN0aXZhdGVkOiAqKiR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfSoqXFxuXFxuYCArXG4gICAgICAgICAgICBgJHtwZXJzb25hLm1ldGFkYXRhLmRlc2NyaXB0aW9ufVxcblxcbmAgK1xuICAgICAgICAgICAgYCoqSW5zdHJ1Y3Rpb25zOioqXFxuJHtwZXJzb25hLmNvbnRlbnR9YCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldEFjdGl2ZVBlcnNvbmEoKSB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZVBlcnNvbmEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfU5vIHBlcnNvbmEgaXMgY3VycmVudGx5IGFjdGl2ZS5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldCh0aGlzLmFjdGl2ZVBlcnNvbmEpO1xuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgdGhpcy5hY3RpdmVQZXJzb25hID0gbnVsbDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfUFjdGl2ZSBwZXJzb25hIG5vdCBmb3VuZC4gRGVhY3RpdmF0ZWQuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9QWN0aXZlIFBlcnNvbmE6ICoqJHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9KipcXG5cXG5gICtcbiAgICAgICAgICAgIGAke3BlcnNvbmEubWV0YWRhdGEuZGVzY3JpcHRpb259XFxuXFxuYCArXG4gICAgICAgICAgICBgRmlsZTogJHtwZXJzb25hLmZpbGVuYW1lfVxcbmAgK1xuICAgICAgICAgICAgYFZlcnNpb246ICR7cGVyc29uYS5tZXRhZGF0YS52ZXJzaW9uIHx8ICcxLjAnfVxcbmAgK1xuICAgICAgICAgICAgYEF1dGhvcjogJHtwZXJzb25hLm1ldGFkYXRhLmF1dGhvciB8fCAnVW5rbm93bid9YCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlYWN0aXZhdGVQZXJzb25hKCkge1xuICAgIGNvbnN0IHdhc0FjdGl2ZSA9IHRoaXMuYWN0aXZlUGVyc29uYSAhPT0gbnVsbDtcbiAgICBjb25zdCBpbmRpY2F0b3IgPSB0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKTtcbiAgICB0aGlzLmFjdGl2ZVBlcnNvbmEgPSBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IHdhc0FjdGl2ZSBcbiAgICAgICAgICAgID8gYCR7aW5kaWNhdG9yfeKchSBQZXJzb25hIGRlYWN0aXZhdGVkLiBCYWNrIHRvIGRlZmF1bHQgbW9kZS5gXG4gICAgICAgICAgICA6IFwiTm8gcGVyc29uYSB3YXMgYWN0aXZlLlwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0UGVyc29uYURldGFpbHMocGVyc29uYUlkZW50aWZpZXI6IHN0cmluZykge1xuICAgIC8vIFRyeSB0byBmaW5kIHBlcnNvbmEgYnkgZmlsZW5hbWUgZmlyc3QsIHRoZW4gYnkgbmFtZVxuICAgIGxldCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQocGVyc29uYUlkZW50aWZpZXIpO1xuICAgIFxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgLy8gU2VhcmNoIGJ5IG5hbWUgd2l0aCBzbHVnaWZ5IG5vcm1hbGl6YXRpb24gKGZpeGVzIERlYnVnIERldGVjdGl2ZSdzIGlkZW50aWZpZWQgaXNzdWUpXG4gICAgICBjb25zdCBzZWFyY2hOYW1lU2x1ZyA9IHNsdWdpZnkocGVyc29uYUlkZW50aWZpZXIpO1xuICAgICAgY29uc3Qgc2VhcmNoTmFtZUxvd2VyID0gcGVyc29uYUlkZW50aWZpZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgIFxuICAgICAgcGVyc29uYSA9IEFycmF5LmZyb20odGhpcy5wZXJzb25hcy52YWx1ZXMoKSkuZmluZChwID0+IHtcbiAgICAgICAgY29uc3QgcGVyc29uYU5hbWVMb3dlciA9IHAubWV0YWRhdGEubmFtZT8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgcGVyc29uYU5hbWVTbHVnID0gc2x1Z2lmeShwLm1ldGFkYXRhLm5hbWUgfHwgJycpO1xuICAgICAgICBcbiAgICAgICAgLy8gVHJ5IGJvdGggZXhhY3QgbWF0Y2ggYW5kIHNsdWcgbWF0Y2ggZm9yIGZsZXhpYmlsaXR5XG4gICAgICAgIHJldHVybiBwZXJzb25hTmFtZUxvd2VyID09PSBzZWFyY2hOYW1lTG93ZXIgfHwgXG4gICAgICAgICAgICAgICBwZXJzb25hTmFtZVNsdWcgPT09IHNlYXJjaE5hbWVTbHVnO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICB0aHJvdyBuZXcgTWNwRXJyb3IoXG4gICAgICAgIEVycm9yQ29kZS5JbnZhbGlkUGFyYW1zLFxuICAgICAgICBgUGVyc29uYSBub3QgZm91bmQ6ICR7cGVyc29uYUlkZW50aWZpZXJ9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+TiyAqKiR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfSoqIERldGFpbHNcXG5cXG5gICtcbiAgICAgICAgICAgIGAqKkRlc2NyaXB0aW9uOioqICR7cGVyc29uYS5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG5gICtcbiAgICAgICAgICAgIGAqKkZpbGU6KiogJHtwZXJzb25hLmZpbGVuYW1lfVxcbmAgK1xuICAgICAgICAgICAgYCoqVmVyc2lvbjoqKiAke3BlcnNvbmEubWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wJ31cXG5gICtcbiAgICAgICAgICAgIGAqKkF1dGhvcjoqKiAke3BlcnNvbmEubWV0YWRhdGEuYXV0aG9yIHx8ICdVbmtub3duJ31cXG5gICtcbiAgICAgICAgICAgIGAqKlRyaWdnZXJzOioqICR7cGVyc29uYS5tZXRhZGF0YS50cmlnZ2Vycz8uam9pbignLCAnKSB8fCAnTm9uZSd9XFxuXFxuYCArXG4gICAgICAgICAgICBgKipGdWxsIENvbnRlbnQ6KipcXG5cXGBcXGBcXGBcXG4ke3BlcnNvbmEuY29udGVudH1cXG5cXGBcXGBcXGBgLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmVsb2FkUGVyc29uYXMoKSB7XG4gICAgYXdhaXQgdGhpcy5sb2FkUGVyc29uYXMoKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+UhCBSZWxvYWRlZCAke3RoaXMucGVyc29uYXMuc2l6ZX0gcGVyc29uYXMgZnJvbSAke3RoaXMucGVyc29uYXNEaXJ9YCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8vID09PT09IEVsZW1lbnQgTWV0aG9kcyAoR2VuZXJpYyBmb3IgYWxsIGVsZW1lbnQgdHlwZXMpID09PT09XG4gIFxuICBhc3luYyBsaXN0RWxlbWVudHModHlwZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgdHlwZSB0byBoYW5kbGUgYm90aCBwbHVyYWwgYW5kIHNpbmd1bGFyIGZvcm1zXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICBcbiAgICAgIHN3aXRjaCAobm9ybWFsaXplZFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RQZXJzb25hcygpO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiB7XG4gICAgICAgICAgY29uc3Qgc2tpbGxzID0gYXdhaXQgdGhpcy5za2lsbE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGlmIChza2lsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IFwiTm8gc2tpbGxzIGFyZSBjdXJyZW50bHkgaW5zdGFsbGVkLiBUaGUgRG9sbGhvdXNlTUNQIGNvbGxlY3Rpb24gaGFzIHNraWxscyBmb3IgY29kZSByZXZpZXcsIGRhdGEgYW5hbHlzaXMsIGNyZWF0aXZlIHdyaXRpbmcgYW5kIG1vcmUuIFdvdWxkIHlvdSBsaWtlIG1lIHRvIHNob3cgeW91IHdoYXQncyBhdmFpbGFibGU/IEp1c3Qgc2F5IFxcXCJ5ZXNcXFwiIG9yIEkgY2FuIGhlbHAgeW91IGNyZWF0ZSBhIGN1c3RvbSBza2lsbC5cIlxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3Qgc2tpbGxMaXN0ID0gc2tpbGxzLm1hcChza2lsbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wbGV4aXR5ID0gc2tpbGwubWV0YWRhdGEuY29tcGxleGl0eSB8fCAnYmVnaW5uZXInO1xuICAgICAgICAgICAgY29uc3QgZG9tYWlucyA9IHNraWxsLm1ldGFkYXRhLmRvbWFpbnM/LmpvaW4oJywgJykgfHwgJ2dlbmVyYWwnO1xuICAgICAgICAgICAgY29uc3QgdmVyc2lvbiA9IHNraWxsLnZlcnNpb24gfHwgc2tpbGwubWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wLjAnO1xuICAgICAgICAgICAgcmV0dXJuIGDwn5ug77iPICR7c2tpbGwubWV0YWRhdGEubmFtZX0gKHYke3ZlcnNpb259KSAtICR7c2tpbGwubWV0YWRhdGEuZGVzY3JpcHRpb259XFxuICAgQ29tcGxleGl0eTogJHtjb21wbGV4aXR5fSB8IERvbWFpbnM6ICR7ZG9tYWluc31gO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcblxcbicpO1xuICAgICAgICAgIFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYPCfk5ogQXZhaWxhYmxlIFNraWxsczpcXG5cXG4ke3NraWxsTGlzdH1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHtcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLnRlbXBsYXRlTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgaWYgKHRlbXBsYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCJZb3UgaGF2ZW4ndCBpbnN0YWxsZWQgYW55IHRlbXBsYXRlcyB5ZXQuIFdvdWxkIHlvdSBsaWtlIHRvIHNlZSBhdmFpbGFibGUgdGVtcGxhdGVzIGZvciBlbWFpbHMsIHJlcG9ydHMsIGFuZCBkb2N1bWVudGF0aW9uPyBJIGNhbiBzaG93IHlvdSBleGFtcGxlcyBmcm9tIHRoZSBjb2xsZWN0aW9uIG9yIGhlbHAgeW91IGNyZWF0ZSB5b3VyIG93bi4gV2hhdCB3b3VsZCB5b3UgcHJlZmVyP1wiXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZUxpc3QgPSB0ZW1wbGF0ZXMubWFwKHRlbXBsYXRlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRlbXBsYXRlLm1ldGFkYXRhLnZhcmlhYmxlcz8ubWFwKHYgPT4gdi5uYW1lKS5qb2luKCcsICcpIHx8ICdub25lJztcbiAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSB0ZW1wbGF0ZS52ZXJzaW9uIHx8IHRlbXBsYXRlLm1ldGFkYXRhLnZlcnNpb24gfHwgJzEuMC4wJztcbiAgICAgICAgICAgIHJldHVybiBg8J+ThCAke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9ICh2JHt2ZXJzaW9ufSkgLSAke3RlbXBsYXRlLm1ldGFkYXRhLmRlc2NyaXB0aW9ufVxcbiAgIFZhcmlhYmxlczogJHt2YXJpYWJsZXN9YDtcbiAgICAgICAgICB9KS5qb2luKCdcXG5cXG4nKTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDwn5OdIEF2YWlsYWJsZSBUZW1wbGF0ZXM6XFxuXFxuJHt0ZW1wbGF0ZUxpc3R9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOiB7XG4gICAgICAgICAgY29uc3QgYWdlbnRzID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGlmIChhZ2VudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IFwiTm8gYWdlbnRzIGluc3RhbGxlZCB5ZXQuIEFnZW50cyBhcmUgYXV0b25vbW91cyBoZWxwZXJzIHRoYXQgY2FuIHdvcmsgb24gdGFza3MgaW5kZXBlbmRlbnRseS4gVGhlIERvbGxob3VzZU1DUCBjb2xsZWN0aW9uIGluY2x1ZGVzIHRhc2sgbWFuYWdlcnMsIHJlc2VhcmNoIGFzc2lzdGFudHMsIGFuZCBtb3JlLiBXb3VsZCB5b3UgbGlrZSB0byBicm93c2UgYXZhaWxhYmxlIGFnZW50cyBvciBsZWFybiBob3cgdG8gY3JlYXRlIHlvdXIgb3duP1wiXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBhZ2VudExpc3QgPSBhZ2VudHMubWFwKGFnZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNwZWNpYWxpemF0aW9ucyA9IChhZ2VudC5tZXRhZGF0YSBhcyBhbnkpLnNwZWNpYWxpemF0aW9ucz8uam9pbignLCAnKSB8fCAnZ2VuZXJhbCc7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXMgPSBhZ2VudC5nZXRTdGF0dXMoKTtcbiAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBhZ2VudC52ZXJzaW9uIHx8IGFnZW50Lm1ldGFkYXRhLnZlcnNpb24gfHwgJzEuMC4wJztcbiAgICAgICAgICAgIHJldHVybiBg8J+kliAke2FnZW50Lm1ldGFkYXRhLm5hbWV9ICh2JHt2ZXJzaW9ufSkgLSAke2FnZW50Lm1ldGFkYXRhLmRlc2NyaXB0aW9ufVxcbiAgIFN0YXR1czogJHtzdGF0dXN9IHwgU3BlY2lhbGl6YXRpb25zOiAke3NwZWNpYWxpemF0aW9uc31gO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcblxcbicpO1xuICAgICAgICAgIFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYPCfpJYgQXZhaWxhYmxlIEFnZW50czpcXG5cXG4ke2FnZW50TGlzdH1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9Jy4gQXZhaWxhYmxlIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmpvaW4oJywgJyl9IChvciBsZWdhY3kgcGx1cmFsIGZvcm1zOiBwZXJzb25hcywgc2tpbGxzLCB0ZW1wbGF0ZXMsIGFnZW50cylgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmhhbmRsZUxpc3RFbGVtZW50cycsIGVycm9yLCB7IHR5cGUgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGxpc3QgJHt0eXBlfTogJHtFcnJvckhhbmRsZXIuZ2V0VXNlck1lc3NhZ2UoZXJyb3IpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBhY3RpdmF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gTm9ybWFsaXplIHRoZSB0eXBlIHRvIGhhbmRsZSBib3RoIHBsdXJhbCBhbmQgc2luZ3VsYXIgZm9ybXNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIFxuICAgICAgc3dpdGNoIChub3JtYWxpemVkVHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGVQZXJzb25hKG5hbWUpO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiB7XG4gICAgICAgICAgLy8gVXNlIGZsZXhpYmxlIGZpbmRpbmcgdG8gc3VwcG9ydCBib3RoIGRpc3BsYXkgbmFtZSBhbmQgZmlsZW5hbWVcbiAgICAgICAgICBjb25zdCBhbGxTa2lsbHMgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgY29uc3Qgc2tpbGwgPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50RmxleGlibHkobmFtZSwgYWxsU2tpbGxzKTtcbiAgICAgICAgICBpZiAoIXNraWxsKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgU2tpbGwgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIEFjdGl2YXRlIHRoZSBza2lsbFxuICAgICAgICAgIGF3YWl0IHNraWxsLmFjdGl2YXRlPy4oKTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4pyFIFNraWxsICcke25hbWV9JyBhY3RpdmF0ZWRcXG5cXG4ke3NraWxsLmluc3RydWN0aW9uc31gXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURToge1xuICAgICAgICAgIC8vIFVzZSBmbGV4aWJsZSBmaW5kaW5nIHRvIHN1cHBvcnQgYm90aCBkaXNwbGF5IG5hbWUgYW5kIGZpbGVuYW1lXG4gICAgICAgICAgY29uc3QgYWxsVGVtcGxhdGVzID0gYXdhaXQgdGhpcy50ZW1wbGF0ZU1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gYXdhaXQgdGhpcy5maW5kRWxlbWVudEZsZXhpYmx5KG5hbWUsIGFsbFRlbXBsYXRlcyk7XG4gICAgICAgICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFRlbXBsYXRlICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB0ZW1wbGF0ZS5tZXRhZGF0YS52YXJpYWJsZXM/Lm1hcCgodjogYW55KSA9PiB2Lm5hbWUpLmpvaW4oJywgJykgfHwgJ25vbmUnO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBUZW1wbGF0ZSAnJHtuYW1lfScgcmVhZHkgdG8gdXNlXFxuVmFyaWFibGVzOiAke3ZhcmlhYmxlc31cXG5cXG5Vc2UgJ3JlbmRlcl90ZW1wbGF0ZScgdG8gZ2VuZXJhdGUgY29udGVudCB3aXRoIHRoaXMgdGVtcGxhdGUuYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOiB7XG4gICAgICAgICAgLy8gVXNlIGZsZXhpYmxlIGZpbmRpbmcgdG8gc3VwcG9ydCBib3RoIGRpc3BsYXkgbmFtZSBhbmQgZmlsZW5hbWVcbiAgICAgICAgICBjb25zdCBhbGxBZ2VudHMgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgY29uc3QgYWdlbnQgPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50RmxleGlibHkobmFtZSwgYWxsQWdlbnRzKTtcbiAgICAgICAgICBpZiAoIWFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgQWdlbnQgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIEFjdGl2YXRlIHRoZSBhZ2VudFxuICAgICAgICAgIGF3YWl0IGFnZW50LmFjdGl2YXRlKCk7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4pyFIEFnZW50ICcke25hbWV9JyBhY3RpdmF0ZWQgYW5kIHJlYWR5XFxuU3BlY2lhbGl6YXRpb25zOiAkeyhhZ2VudC5tZXRhZGF0YSBhcyBhbnkpLnNwZWNpYWxpemF0aW9ucz8uam9pbignLCAnKSB8fCAnZ2VuZXJhbCd9XFxuXFxuVXNlICdleGVjdXRlX2FnZW50JyB0byBnaXZlIHRoaXMgYWdlbnQgYSBnb2FsLmBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgVW5rbm93biBlbGVtZW50IHR5cGUgJyR7dHlwZX0nYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5oYW5kbGVBY3RpdmF0ZUVsZW1lbnQnLCBlcnJvciwgeyB0eXBlLCBuYW1lIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBhY3RpdmF0ZSAke3R5cGV9ICcke25hbWV9JzogJHtFcnJvckhhbmRsZXIuZ2V0VXNlck1lc3NhZ2UoZXJyb3IpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBnZXRBY3RpdmVFbGVtZW50cyh0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gTm9ybWFsaXplIHRoZSB0eXBlIHRvIGhhbmRsZSBib3RoIHBsdXJhbCBhbmQgc2luZ3VsYXIgZm9ybXNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIFxuICAgICAgc3dpdGNoIChub3JtYWxpemVkVHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWN0aXZlUGVyc29uYSgpO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiB7XG4gICAgICAgICAgY29uc3Qgc2tpbGxzID0gYXdhaXQgdGhpcy5za2lsbE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZVNraWxscyA9IHNraWxscy5maWx0ZXIocyA9PiBzLmdldFN0YXR1cygpID09PSAnYWN0aXZlJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGFjdGl2ZVNraWxscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCLwn5OLIE5vIGFjdGl2ZSBza2lsbHNcIlxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3Qgc2tpbGxMaXN0ID0gYWN0aXZlU2tpbGxzLm1hcChzID0+IGDwn5ug77iPICR7cy5tZXRhZGF0YS5uYW1lfWApLmpvaW4oJywgJyk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgQWN0aXZlIHNraWxsczogJHtza2lsbExpc3R9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBcIvCfk50gVGVtcGxhdGVzIGFyZSBzdGF0ZWxlc3MgYW5kIGFjdGl2YXRlZCBvbi1kZW1hbmQgd2hlbiByZW5kZXJpbmdcIlxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOiB7XG4gICAgICAgICAgY29uc3QgYWdlbnRzID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZUFnZW50cyA9IGFnZW50cy5maWx0ZXIoYSA9PiBhLmdldFN0YXR1cygpID09PSAnYWN0aXZlJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGFjdGl2ZUFnZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCLwn6SWIE5vIGFjdGl2ZSBhZ2VudHNcIlxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgYWdlbnRMaXN0ID0gYWN0aXZlQWdlbnRzLm1hcChhID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdvYWxzID0gKGEgYXMgYW55KS5zdGF0ZT8uZ29hbHM/Lmxlbmd0aCB8fCAwO1xuICAgICAgICAgICAgcmV0dXJuIGDwn6SWICR7YS5tZXRhZGF0YS5uYW1lfSAoJHtnb2Fsc30gYWN0aXZlIGdvYWxzKWA7XG4gICAgICAgICAgfSkuam9pbignXFxuJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgQWN0aXZlIGFnZW50czpcXG4ke2FnZW50TGlzdH1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9J2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZ2V0IGFjdGl2ZSAke3R5cGV9OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZ2V0IGFjdGl2ZSAke3R5cGV9OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBkZWFjdGl2YXRlRWxlbWVudChuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBOb3JtYWxpemUgdGhlIHR5cGUgdG8gaGFuZGxlIGJvdGggcGx1cmFsIGFuZCBzaW5ndWxhciBmb3Jtc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWFjdGl2YXRlUGVyc29uYSgpO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiB7XG4gICAgICAgICAgLy8gVXNlIGZsZXhpYmxlIGZpbmRpbmcgdG8gc3VwcG9ydCBib3RoIGRpc3BsYXkgbmFtZSBhbmQgZmlsZW5hbWVcbiAgICAgICAgICBjb25zdCBhbGxTa2lsbHMgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgY29uc3Qgc2tpbGwgPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50RmxleGlibHkobmFtZSwgYWxsU2tpbGxzKTtcbiAgICAgICAgICBpZiAoIXNraWxsKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgU2tpbGwgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGF3YWl0IHNraWxsLmRlYWN0aXZhdGU/LigpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBTa2lsbCAnJHtza2lsbC5tZXRhZGF0YS5uYW1lfScgZGVhY3RpdmF0ZWRgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwi8J+TnSBUZW1wbGF0ZXMgYXJlIHN0YXRlbGVzcyAtIG5vdGhpbmcgdG8gZGVhY3RpdmF0ZVwiXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6IHtcbiAgICAgICAgICAvLyBVc2UgZmxleGlibGUgZmluZGluZyB0byBzdXBwb3J0IGJvdGggZGlzcGxheSBuYW1lIGFuZCBmaWxlbmFtZVxuICAgICAgICAgIGNvbnN0IGFsbEFnZW50cyA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBjb25zdCBhZ2VudCA9IGF3YWl0IHRoaXMuZmluZEVsZW1lbnRGbGV4aWJseShuYW1lLCBhbGxBZ2VudHMpO1xuICAgICAgICAgIGlmICghYWdlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKdjCBBZ2VudCAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgYXdhaXQgYWdlbnQuZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBBZ2VudCAnJHthZ2VudC5tZXRhZGF0YS5uYW1lfScgZGVhY3RpdmF0ZWRgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9J2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGVhY3RpdmF0ZSAke3R5cGV9ICcke25hbWV9JzpgLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGRlYWN0aXZhdGUgJHt0eXBlfSAnJHtuYW1lfSc6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGdldEVsZW1lbnREZXRhaWxzKG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgdHlwZSB0byBoYW5kbGUgYm90aCBwbHVyYWwgYW5kIHNpbmd1bGFyIGZvcm1zXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICBcbiAgICAgIHN3aXRjaCAobm9ybWFsaXplZFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFBlcnNvbmFEZXRhaWxzKG5hbWUpO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiB7XG4gICAgICAgICAgLy8gVXNlIGZsZXhpYmxlIGZpbmRpbmcgdG8gc3VwcG9ydCBib3RoIGRpc3BsYXkgbmFtZSBhbmQgZmlsZW5hbWVcbiAgICAgICAgICBjb25zdCBhbGxTa2lsbHMgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgY29uc3Qgc2tpbGwgPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50RmxleGlibHkobmFtZSwgYWxsU2tpbGxzKTtcbiAgICAgICAgICBpZiAoIXNraWxsKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgU2tpbGwgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IGRldGFpbHMgPSBbXG4gICAgICAgICAgICBg8J+boO+4jyAqKiR7c2tpbGwubWV0YWRhdGEubmFtZX0qKmAsXG4gICAgICAgICAgICBgJHtza2lsbC5tZXRhZGF0YS5kZXNjcmlwdGlvbn1gLFxuICAgICAgICAgICAgYGAsXG4gICAgICAgICAgICBgKipDb21wbGV4aXR5Kio6ICR7c2tpbGwubWV0YWRhdGEuY29tcGxleGl0eSB8fCAnYmVnaW5uZXInfWAsXG4gICAgICAgICAgICBgKipEb21haW5zKio6ICR7c2tpbGwubWV0YWRhdGEuZG9tYWlucz8uam9pbignLCAnKSB8fCAnZ2VuZXJhbCd9YCxcbiAgICAgICAgICAgIGAqKkxhbmd1YWdlcyoqOiAke3NraWxsLm1ldGFkYXRhLmxhbmd1YWdlcz8uam9pbignLCAnKSB8fCAnYW55J31gLFxuICAgICAgICAgICAgYCoqUHJlcmVxdWlzaXRlcyoqOiAke3NraWxsLm1ldGFkYXRhLnByZXJlcXVpc2l0ZXM/LmpvaW4oJywgJykgfHwgJ25vbmUnfWAsXG4gICAgICAgICAgICBgYCxcbiAgICAgICAgICAgIGAqKkluc3RydWN0aW9ucyoqOmAsXG4gICAgICAgICAgICBza2lsbC5pbnN0cnVjdGlvbnNcbiAgICAgICAgICBdO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChza2lsbC5tZXRhZGF0YS5wYXJhbWV0ZXJzICYmIHNraWxsLm1ldGFkYXRhLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGV0YWlscy5wdXNoKCcnLCAnKipQYXJhbWV0ZXJzKio6Jyk7XG4gICAgICAgICAgICBza2lsbC5tZXRhZGF0YS5wYXJhbWV0ZXJzLmZvckVhY2goKHA6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBkZXRhaWxzLnB1c2goYC0gJHtwLm5hbWV9ICgke3AudHlwZX0pOiAke3AuZGVzY3JpcHRpb259YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBkZXRhaWxzLmpvaW4oJ1xcbicpXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHtcbiAgICAgICAgICAvLyBVc2UgZmxleGlibGUgZmluZGluZyB0byBzdXBwb3J0IGJvdGggZGlzcGxheSBuYW1lIGFuZCBmaWxlbmFtZVxuICAgICAgICAgIGNvbnN0IGFsbFRlbXBsYXRlcyA9IGF3YWl0IHRoaXMudGVtcGxhdGVNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IHRoaXMuZmluZEVsZW1lbnRGbGV4aWJseShuYW1lLCBhbGxUZW1wbGF0ZXMpO1xuICAgICAgICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKdjCBUZW1wbGF0ZSAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgZGV0YWlscyA9IFtcbiAgICAgICAgICAgIGDwn5OEICoqJHt0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lfSoqYCxcbiAgICAgICAgICAgIGAke3RlbXBsYXRlLm1ldGFkYXRhLmRlc2NyaXB0aW9ufWAsXG4gICAgICAgICAgICBgYCxcbiAgICAgICAgICAgIGAqKk91dHB1dCBGb3JtYXQqKjogJHsodGVtcGxhdGUubWV0YWRhdGEgYXMgYW55KS5vdXRwdXRfZm9ybWF0IHx8ICd0ZXh0J31gLFxuICAgICAgICAgICAgYCoqVGVtcGxhdGUgQ29udGVudCoqOmAsXG4gICAgICAgICAgICAnYGBgJyxcbiAgICAgICAgICAgIHRlbXBsYXRlLmNvbnRlbnQsXG4gICAgICAgICAgICAnYGBgJ1xuICAgICAgICAgIF07XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHRlbXBsYXRlLm1ldGFkYXRhLnZhcmlhYmxlcyAmJiB0ZW1wbGF0ZS5tZXRhZGF0YS52YXJpYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGV0YWlscy5wdXNoKCcnLCAnKipWYXJpYWJsZXMqKjonKTtcbiAgICAgICAgICAgIHRlbXBsYXRlLm1ldGFkYXRhLnZhcmlhYmxlcy5mb3JFYWNoKCh2OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgZGV0YWlscy5wdXNoKGAtICR7di5uYW1lfSAoJHt2LnR5cGV9KTogJHt2LmRlc2NyaXB0aW9ufWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogZGV0YWlscy5qb2luKCdcXG4nKVxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOiB7XG4gICAgICAgICAgLy8gVXNlIGZsZXhpYmxlIGZpbmRpbmcgdG8gc3VwcG9ydCBib3RoIGRpc3BsYXkgbmFtZSBhbmQgZmlsZW5hbWVcbiAgICAgICAgICBjb25zdCBhbGxBZ2VudHMgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgY29uc3QgYWdlbnQgPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50RmxleGlibHkobmFtZSwgYWxsQWdlbnRzKTtcbiAgICAgICAgICBpZiAoIWFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgQWdlbnQgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IGRldGFpbHMgPSBbXG4gICAgICAgICAgICBg8J+kliAqKiR7YWdlbnQubWV0YWRhdGEubmFtZX0qKmAsXG4gICAgICAgICAgICBgJHthZ2VudC5tZXRhZGF0YS5kZXNjcmlwdGlvbn1gLFxuICAgICAgICAgICAgYGAsXG4gICAgICAgICAgICBgKipTdGF0dXMqKjogJHthZ2VudC5nZXRTdGF0dXMoKX1gLFxuICAgICAgICAgICAgYCoqU3BlY2lhbGl6YXRpb25zKio6ICR7KGFnZW50Lm1ldGFkYXRhIGFzIGFueSkuc3BlY2lhbGl6YXRpb25zPy5qb2luKCcsICcpIHx8ICdnZW5lcmFsJ31gLFxuICAgICAgICAgICAgYCoqRGVjaXNpb24gRnJhbWV3b3JrKio6ICR7KGFnZW50Lm1ldGFkYXRhIGFzIGFueSkuZGVjaXNpb25GcmFtZXdvcmsgfHwgJ3J1bGUtYmFzZWQnfWAsXG4gICAgICAgICAgICBgKipSaXNrIFRvbGVyYW5jZSoqOiAkeyhhZ2VudC5tZXRhZGF0YSBhcyBhbnkpLnJpc2tUb2xlcmFuY2UgfHwgJ2xvdyd9YCxcbiAgICAgICAgICAgIGBgLFxuICAgICAgICAgICAgYCoqSW5zdHJ1Y3Rpb25zKio6YCxcbiAgICAgICAgICAgIChhZ2VudCBhcyBhbnkpLmluc3RydWN0aW9ucyB8fCAnTm8gaW5zdHJ1Y3Rpb25zIGF2YWlsYWJsZSdcbiAgICAgICAgICBdO1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IGFnZW50U3RhdGUgPSAoYWdlbnQgYXMgYW55KS5zdGF0ZTtcbiAgICAgICAgICBpZiAoYWdlbnRTdGF0ZT8uZ29hbHMgJiYgYWdlbnRTdGF0ZS5nb2Fscy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBkZXRhaWxzLnB1c2goJycsICcqKkN1cnJlbnQgR29hbHMqKjonKTtcbiAgICAgICAgICAgIGFnZW50U3RhdGUuZ29hbHMuZm9yRWFjaCgoZzogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGRldGFpbHMucHVzaChgLSAke2cuZGVzY3JpcHRpb259ICgke2cuc3RhdHVzfSlgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGRldGFpbHMuam9pbignXFxuJylcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgVW5rbm93biBlbGVtZW50IHR5cGUgJyR7dHlwZX0nYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBnZXQgJHt0eXBlfSBkZXRhaWxzIGZvciAnJHtuYW1lfSc6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBnZXQgJHt0eXBlfSBkZXRhaWxzOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyByZWxvYWRFbGVtZW50cyh0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gTm9ybWFsaXplIHRoZSB0eXBlIHRvIGhhbmRsZSBib3RoIHBsdXJhbCBhbmQgc2luZ3VsYXIgZm9ybXNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIFxuICAgICAgc3dpdGNoIChub3JtYWxpemVkVHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVsb2FkUGVyc29uYXMoKTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDoge1xuICAgICAgICAgIHRoaXMuc2tpbGxNYW5hZ2VyLmNsZWFyQ2FjaGUoKTtcbiAgICAgICAgICBjb25zdCBza2lsbHMgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg8J+UhCBSZWxvYWRlZCAke3NraWxscy5sZW5ndGh9IHNraWxscyBmcm9tIHBvcnRmb2xpb2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURToge1xuICAgICAgICAgIC8vIFRlbXBsYXRlIG1hbmFnZXIgZG9lc24ndCBoYXZlIGNsZWFyQ2FjaGUsIGp1c3QgbGlzdFxuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IHRoaXMudGVtcGxhdGVNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDwn5SEIFJlbG9hZGVkICR7dGVtcGxhdGVzLmxlbmd0aH0gdGVtcGxhdGVzIGZyb20gcG9ydGZvbGlvYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOiB7XG4gICAgICAgICAgLy8gQWdlbnQgbWFuYWdlciBkb2Vzbid0IGhhdmUgY2xlYXJDYWNoZSwganVzdCBsaXN0XG4gICAgICAgICAgY29uc3QgYWdlbnRzID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYPCflIQgUmVsb2FkZWQgJHthZ2VudHMubGVuZ3RofSBhZ2VudHMgZnJvbSBwb3J0Zm9saW9gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9J2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gcmVsb2FkICR7dHlwZX06YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byByZWxvYWQgJHt0eXBlfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgLy8gRWxlbWVudC1zcGVjaWZpYyBtZXRob2RzXG4gIGFzeW5jIHJlbmRlclRlbXBsYXRlKG5hbWU6IHN0cmluZywgdmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgLy8gVXNlIHRoZSBuZXcgVGVtcGxhdGVSZW5kZXJlciB1dGlsaXR5IGZvciBjbGVhbmVyIGNvZGUgYW5kIGJldHRlciB2YWxpZGF0aW9uXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy50ZW1wbGF0ZVJlbmRlcmVyLnJlbmRlcihuYW1lLCB2YXJpYWJsZXMpO1xuICAgIFxuICAgIGlmIChyZXN1bHQuc3VjY2VzcyAmJiByZXN1bHQuY29udGVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg8J+ThCBSZW5kZXJlZCB0ZW1wbGF0ZSAnJHtuYW1lfSc6XFxuXFxuJHtyZXN1bHQuY29udGVudH1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgJHtyZXN1bHQuZXJyb3IgfHwgJ0ZhaWxlZCB0byByZW5kZXIgdGVtcGxhdGUnfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBleGVjdXRlQWdlbnQobmFtZTogc3RyaW5nLCBnb2FsOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYWdlbnQgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5maW5kKGEgPT4gYS5tZXRhZGF0YS5uYW1lID09PSBuYW1lKTtcbiAgICAgIGlmICghYWdlbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIEFnZW50ICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gU2ltcGxlIGFnZW50IGV4ZWN1dGlvbiBzaW11bGF0aW9uXG4gICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgIHN1bW1hcnk6IGBBZ2VudCAnJHtuYW1lfScgaXMgbm93IHdvcmtpbmcgb246ICR7Z29hbH1gLFxuICAgICAgICBzdGF0dXM6ICdpbi1wcm9ncmVzcycsXG4gICAgICAgIGFjdGlvbnNUYWtlbjogMVxuICAgICAgfTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg8J+kliBBZ2VudCAnJHtuYW1lfScgZXhlY3V0aW9uIHJlc3VsdDpcXG5cXG4ke3Jlc3VsdC5zdW1tYXJ5fVxcblxcblN0YXR1czogJHtyZXN1bHQuc3RhdHVzfVxcbkFjdGlvbnMgdGFrZW46ICR7cmVzdWx0LmFjdGlvbnNUYWtlbiB8fCAwfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgYWdlbnQgJyR7bmFtZX0nOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZXhlY3V0ZSBhZ2VudDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgY3JlYXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmc7IGNvbnRlbnQ/OiBzdHJpbmc7IG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pn0pIHtcbiAgICAvLyBFbnN1cmUgaW5pdGlhbGl6YXRpb24gZm9yIHRlc3QgY29tcGF0aWJpbGl0eVxuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBuYW1lLCB0eXBlLCBkZXNjcmlwdGlvbiwgY29udGVudCwgbWV0YWRhdGEgfSA9IGFyZ3M7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGVsZW1lbnQgdHlwZVxuICAgICAgaWYgKCFPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5pbmNsdWRlcyh0eXBlIGFzIEVsZW1lbnRUeXBlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgSW52YWxpZCBlbGVtZW50IHR5cGUgJyR7dHlwZX0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpfSAob3IgbGVnYWN5IHBsdXJhbCBmb3JtczogcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMpYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGlucHV0c1xuICAgICAgY29uc3QgdmFsaWRhdGVkTmFtZSA9IHZhbGlkYXRlRmlsZW5hbWUobmFtZSk7XG4gICAgICBjb25zdCB2YWxpZGF0ZWREZXNjcmlwdGlvbiA9IHNhbml0aXplSW5wdXQoZGVzY3JpcHRpb24sIFNFQ1VSSVRZX0xJTUlUUy5NQVhfTUVUQURBVEFfRklFTERfTEVOR1RIKTtcbiAgICAgIFxuICAgICAgLy8gQ1JJVElDQUwgRklYOiBWYWxpZGF0ZSBjb250ZW50IHNpemUgQkVGT1JFIHByb2Nlc3NpbmcgdG8gcHJldmVudCBtZW1vcnkgZXhoYXVzdGlvblxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyBDbGF1ZGUgZnJvbSB0cnlpbmcgdG8gb3V0cHV0IG1hc3NpdmUgY29udGVudCBpbiByZXNwb25zZXNcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFsaWRhdGVDb250ZW50U2l6ZShjb250ZW50LCBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBDb250ZW50IHRvbyBsYXJnZTogJHtlcnJvci5tZXNzYWdlfS4gTWF4aW11bSBhbGxvd2VkIHNpemUgaXMgJHtTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIfSBjaGFyYWN0ZXJzICgke01hdGguZmxvb3IoU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCAvIDEwMjQpfUtCKS5gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gU0VDVVJJVFkgRklYOiBTYW5pdGl6ZSBtZXRhZGF0YSB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICAgIGNvbnN0IHNhbml0aXplZE1ldGFkYXRhID0gdGhpcy5zYW5pdGl6ZU1ldGFkYXRhKG1ldGFkYXRhIHx8IHt9KTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGVsZW1lbnQgYmFzZWQgb24gdHlwZVxuICAgICAgc3dpdGNoICh0eXBlIGFzIEVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgICAgICAvLyBVc2UgZXhpc3RpbmcgcGVyc29uYSBjcmVhdGlvbiBsb2dpY1xuICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVBlcnNvbmEoXG4gICAgICAgICAgICB2YWxpZGF0ZWROYW1lLCBcbiAgICAgICAgICAgIHZhbGlkYXRlZERlc2NyaXB0aW9uLCBcbiAgICAgICAgICAgIGNvbnRlbnQgfHwgJycsXG4gICAgICAgICAgICBzYW5pdGl6ZWRNZXRhZGF0YT8udHJpZ2dlcnNcbiAgICAgICAgICApO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOlxuICAgICAgICAgIGNvbnN0IHNraWxsID0gYXdhaXQgdGhpcy5za2lsbE1hbmFnZXIuY3JlYXRlKHtcbiAgICAgICAgICAgIG5hbWU6IHZhbGlkYXRlZE5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsaWRhdGVkRGVzY3JpcHRpb24sXG4gICAgICAgICAgICAuLi5zYW5pdGl6ZWRNZXRhZGF0YSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQgfHwgJydcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinIUgQ3JlYXRlZCBza2lsbCAnJHtza2lsbC5tZXRhZGF0YS5uYW1lfScgc3VjY2Vzc2Z1bGx5YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOlxuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gYXdhaXQgdGhpcy50ZW1wbGF0ZU1hbmFnZXIuY3JlYXRlKHtcbiAgICAgICAgICAgIG5hbWU6IHZhbGlkYXRlZE5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsaWRhdGVkRGVzY3JpcHRpb24sXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50IHx8ICcnLFxuICAgICAgICAgICAgLi4uc2FuaXRpemVkTWV0YWRhdGFcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinIUgQ3JlYXRlZCB0ZW1wbGF0ZSAnJHt0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lfScgc3VjY2Vzc2Z1bGx5YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOlxuICAgICAgICAgIGNvbnN0IGFnZW50UmVzdWx0ID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIuY3JlYXRlKFxuICAgICAgICAgICAgdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgY29udGVudCB8fCAnJyxcbiAgICAgICAgICAgIHNhbml0aXplZE1ldGFkYXRhXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWFnZW50UmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKdjCAke2FnZW50UmVzdWx0Lm1lc3NhZ2V9YFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4pyFIENyZWF0ZWQgYWdlbnQgJyR7dmFsaWRhdGVkTmFtZX0nIHN1Y2Nlc3NmdWxseWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgRWxlbWVudCB0eXBlICcke3R5cGV9JyBpcyBub3QgeWV0IHN1cHBvcnRlZCBmb3IgY3JlYXRpb25gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBlbGVtZW50OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gY3JlYXRlIGVsZW1lbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGVkaXRFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgZmllbGQ6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgYW55W119KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgdHlwZSwgZmllbGQsIHZhbHVlIH0gPSBhcmdzO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBlbGVtZW50IHR5cGVcbiAgICAgIGlmICghT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuaW5jbHVkZXModHlwZSBhcyBFbGVtZW50VHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIEludmFsaWQgZWxlbWVudCB0eXBlICcke3R5cGV9Jy4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuam9pbignLCAnKX0gKG9yIGxlZ2FjeSBwbHVyYWwgZm9ybXM6IHBlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYWdlbnRzKWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBGb3IgcGVyc29uYXMsIHVzZSBleGlzdGluZyBlZGl0IGxvZ2ljXG4gICAgICBpZiAodHlwZSA9PT0gRWxlbWVudFR5cGUuUEVSU09OQSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0UGVyc29uYShuYW1lLCBmaWVsZCwgU3RyaW5nKHZhbHVlKSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFRZUEUgU0FGRVRZOiBEZWZpbmUgYSBjb21tb24gaW50ZXJmYWNlIGZvciBlbGVtZW50IG1hbmFnZXJzXG4gICAgICBpbnRlcmZhY2UgRWxlbWVudE1hbmFnZXJCYXNlPFQ+IHtcbiAgICAgICAgZmluZChwcmVkaWNhdGU6IChlbGVtZW50OiBUKSA9PiBib29sZWFuKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPjtcbiAgICAgICAgc2F2ZShlbGVtZW50OiBULCBmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gR2V0IHRoZSBhcHByb3ByaWF0ZSBtYW5hZ2VyIGJhc2VkIG9uIHR5cGUgd2l0aCBwcm9wZXIgdHlwaW5nXG4gICAgICBsZXQgbWFuYWdlcjogRWxlbWVudE1hbmFnZXJCYXNlPFNraWxsIHwgVGVtcGxhdGUgfCBBZ2VudD4gfCBudWxsID0gbnVsbDtcbiAgICAgIGxldCBlbGVtZW50OiBTa2lsbCB8IFRlbXBsYXRlIHwgQWdlbnQgfCB1bmRlZmluZWQ7XG4gICAgICBcbiAgICAgIHN3aXRjaCAodHlwZSBhcyBFbGVtZW50VHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOlxuICAgICAgICAgIG1hbmFnZXIgPSB0aGlzLnNraWxsTWFuYWdlciBhcyBFbGVtZW50TWFuYWdlckJhc2U8U2tpbGw+O1xuICAgICAgICAgIGVsZW1lbnQgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5maW5kKChlOiBTa2lsbCkgPT4gZS5tZXRhZGF0YS5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURTpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy50ZW1wbGF0ZU1hbmFnZXIgYXMgRWxlbWVudE1hbmFnZXJCYXNlPFRlbXBsYXRlPjtcbiAgICAgICAgICBlbGVtZW50ID0gYXdhaXQgdGhpcy50ZW1wbGF0ZU1hbmFnZXIuZmluZCgoZTogVGVtcGxhdGUpID0+IGUubWV0YWRhdGEubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6XG4gICAgICAgICAgbWFuYWdlciA9IHRoaXMuYWdlbnRNYW5hZ2VyIGFzIEVsZW1lbnRNYW5hZ2VyQmFzZTxBZ2VudD47XG4gICAgICAgICAgZWxlbWVudCA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmZpbmQoKGU6IEFnZW50KSA9PiBlLm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBFbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBlZGl0aW5nYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBlbGVtZW50IHdhcyBmb3VuZFxuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCAke3R5cGV9ICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSGFuZGxlIG5lc3RlZCBmaWVsZCB1cGRhdGVzIChlLmcuLCBcIm1ldGFkYXRhLmF1dGhvclwiKVxuICAgICAgY29uc3QgZmllbGRQYXJ0cyA9IGZpZWxkLnNwbGl0KCcuJyk7XG4gICAgICBcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWDogVmFsaWRhdGUgZmllbGQgbmFtZXMgdG8gcHJldmVudCBwcm90b3R5cGUgcG9sbHV0aW9uXG4gICAgICBjb25zdCBkYW5nZXJvdXNQcm9wZXJ0aWVzID0gWydfX3Byb3RvX18nLCAnY29uc3RydWN0b3InLCAncHJvdG90eXBlJ107XG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZmllbGRQYXJ0cykge1xuICAgICAgICBpZiAoZGFuZ2Vyb3VzUHJvcGVydGllcy5pbmNsdWRlcyhwYXJ0KSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBJbnZhbGlkIGZpZWxkIG5hbWU6ICcke3BhcnR9JyBpcyBub3QgYWxsb3dlZCBmb3Igc2VjdXJpdHkgcmVhc29uc2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBsZXQgdGFyZ2V0OiBhbnkgPSBlbGVtZW50O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZFBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAvLyBTRUNVUklUWTogQWRkaXRpb25hbCBjaGVjayB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnIHx8IHRhcmdldCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBDYW5ub3Qgc2V0IHByb3BlcnR5ICcke2ZpZWxkUGFydHNbaV19JyBvbiBub24tb2JqZWN0YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoIXRhcmdldFtmaWVsZFBhcnRzW2ldXSkge1xuICAgICAgICAgIC8vIFNFQ1VSSVRZOiBVc2UgT2JqZWN0LmRlZmluZVByb3BlcnR5IHRvIGF2b2lkIHByb3RvdHlwZSBjaGFpbiBwb2xsdXRpb25cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBmaWVsZFBhcnRzW2ldLCB7XG4gICAgICAgICAgICB2YWx1ZToge30sXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXQgPSB0YXJnZXRbZmllbGRQYXJ0c1tpXV07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSB0aGUgZmllbGRcbiAgICAgIGNvbnN0IGxhc3RGaWVsZCA9IGZpZWxkUGFydHNbZmllbGRQYXJ0cy5sZW5ndGggLSAxXTtcbiAgICAgIC8vIFNFQ1VSSVRZOiBVc2UgT2JqZWN0LmRlZmluZVByb3BlcnR5IGZvciB0aGUgZmluYWwgYXNzaWdubWVudCB0b29cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGxhc3RGaWVsZCwge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBWRVJTSU9OIEZJWDogSGFuZGxlIHZlcnNpb24gZmllbGQgdXBkYXRlcyBkaWZmZXJlbnRseVxuICAgICAgLy8gSWYgdXNlciBpcyBkaXJlY3RseSBlZGl0aW5nIHZlcnNpb24gZmllbGQsIGRvbid0IGF1dG8taW5jcmVtZW50XG4gICAgICBpZiAoZmllbGQgPT09ICd2ZXJzaW9uJyB8fCBmaWVsZCA9PT0gJ21ldGFkYXRhLnZlcnNpb24nKSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb25TdHJpbmcgPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICBcbiAgICAgICAgLy8gVkVSU0lPTiBWQUxJREFUSU9OOiBWYWxpZGF0ZSB2ZXJzaW9uIGZvcm1hdFxuICAgICAgICAvLyBBY2NlcHQgc2VtdmVyICgxLjAuMCksIHR3by1wYXJ0ICgxLjApLCBvciBzaW5nbGUgZGlnaXQgKDEpXG4gICAgICAgIC8vIEFsc28gYWNjZXB0cyBwcmUtcmVsZWFzZSB2ZXJzaW9ucyAoMS4wLjAtYmV0YSwgMS4wLjAtYWxwaGEuMSlcbiAgICAgICAgY29uc3QgaXNWYWxpZFZlcnNpb24gPSAvXihcXGQrKShcXC5cXGQrKT8oXFwuXFxkKyk/KC1bYS16QS1aMC05Li1dKyk/JC8udGVzdCh2ZXJzaW9uU3RyaW5nKTtcbiAgICAgICAgaWYgKCFpc1ZhbGlkVmVyc2lvbikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBJbnZhbGlkIHZlcnNpb24gZm9ybWF0OiAnJHt2ZXJzaW9uU3RyaW5nfScuIFBsZWFzZSB1c2UgZm9ybWF0IGxpa2UgMS4wLjAsIDEuMCwgb3IgMWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gRVJST1IgSEFORExJTkc6IFdyYXAgdmVyc2lvbiB1cGRhdGUgaW4gdHJ5LWNhdGNoXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVXBkYXRlIGJvdGggbG9jYXRpb25zIHRvIGVuc3VyZSBjb25zaXN0ZW5jeVxuICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9IHZlcnNpb25TdHJpbmc7XG4gICAgICAgICAgaWYgKGVsZW1lbnQubWV0YWRhdGEpIHtcbiAgICAgICAgICAgIGVsZW1lbnQubWV0YWRhdGEudmVyc2lvbiA9IHZlcnNpb25TdHJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHVwZGF0ZSB2ZXJzaW9uIGZvciAke25hbWV9OmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIHVwZGF0ZSB2ZXJzaW9uOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG90aGVyIGZpZWxkIGVkaXRzLCBhdXRvLWluY3JlbWVudCB2ZXJzaW9uXG4gICAgICAgIC8vIFZFUlNJT04gRklYOiBVcGRhdGUgYm90aCBlbGVtZW50LnZlcnNpb24gQU5EIGVsZW1lbnQubWV0YWRhdGEudmVyc2lvblxuICAgICAgICAvLyBQcmV2aW91c2x5OiBPbmx5IGVsZW1lbnQudmVyc2lvbiB3YXMgdXBkYXRlZCwgYnV0IHNvbWUgbWFuYWdlcnMgcmVhZCBmcm9tIG1ldGFkYXRhLnZlcnNpb25cbiAgICAgICAgLy8gTm93OiBLZWVwIGJvdGggaW4gc3luYyB0byBlbnN1cmUgdmVyc2lvbiBwZXJzaXN0cyBjb3JyZWN0bHlcbiAgICAgICAgXG4gICAgICAgIC8vIEVSUk9SIEhBTkRMSU5HOiBXcmFwIGF1dG8taW5jcmVtZW50IGluIHRyeS1jYXRjaFxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChlbGVtZW50LnZlcnNpb24pIHtcbiAgICAgICAgICAgIC8vIFBSRS1SRUxFQVNFIEhBTkRMSU5HOiBDaGVjayBmb3IgcHJlLXJlbGVhc2UgdmVyc2lvbnNcbiAgICAgICAgICAgIGNvbnN0IHByZVJlbGVhc2VNYXRjaCA9IGVsZW1lbnQudmVyc2lvbi5tYXRjaCgvXihcXGQrXFwuXFxkK1xcLlxcZCspKC0oW2EtekEtWjAtOS4tXSspKT8kLyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChwcmVSZWxlYXNlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIHByZS1yZWxlYXNlIHZlcnNpb25zIChlLmcuLCAxLjAuMC1iZXRhLjEpXG4gICAgICAgICAgICAgIGNvbnN0IGJhc2VWZXJzaW9uID0gcHJlUmVsZWFzZU1hdGNoWzFdO1xuICAgICAgICAgICAgICBjb25zdCBwcmVSZWxlYXNlVGFnID0gcHJlUmVsZWFzZU1hdGNoWzNdO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgaWYgKHByZVJlbGVhc2VUYWcpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBpdCBoYXMgYSBwcmUtcmVsZWFzZSB0YWcsIGluY3JlbWVudCB0aGUgcHJlLXJlbGVhc2UgbnVtYmVyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJlUmVsZWFzZU51bWJlck1hdGNoID0gcHJlUmVsZWFzZVRhZy5tYXRjaCgvXihbYS16QS1aXSspXFwuPyhcXGQrKT8kLyk7XG4gICAgICAgICAgICAgICAgaWYgKHByZVJlbGVhc2VOdW1iZXJNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcHJlUmVsZWFzZVR5cGUgPSBwcmVSZWxlYXNlTnVtYmVyTWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgICBjb25zdCBwcmVSZWxlYXNlTnVtYmVyID0gcGFyc2VJbnQocHJlUmVsZWFzZU51bWJlck1hdGNoWzJdIHx8ICcwJykgKyAxO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gYCR7YmFzZVZlcnNpb259LSR7cHJlUmVsZWFzZVR5cGV9LiR7cHJlUmVsZWFzZU51bWJlcn1gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBDb21wbGV4IHByZS1yZWxlYXNlLCBqdXN0IGluY3JlbWVudCBwYXRjaFxuICAgICAgICAgICAgICAgICAgY29uc3QgW21ham9yLCBtaW5vciwgcGF0Y2hdID0gYmFzZVZlcnNpb24uc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9IGAke21ham9yfS4ke21pbm9yfS4ke3BhdGNoICsgMX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBSZWd1bGFyIHNlbXZlciwgaW5jcmVtZW50IHBhdGNoXG4gICAgICAgICAgICAgICAgY29uc3QgW21ham9yLCBtaW5vciwgcGF0Y2hdID0gYmFzZVZlcnNpb24uc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSBgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaCArIDF9YDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIG5vbi1zZW12ZXIgdmVyc2lvbnNcbiAgICAgICAgICAgICAgY29uc3QgdmVyc2lvblBhcnRzID0gZWxlbWVudC52ZXJzaW9uLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgIGlmICh2ZXJzaW9uUGFydHMubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICAvLyBTdGFuZGFyZCBzZW12ZXIgZm9ybWF0IChlLmcuLCAxLjAuMClcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRjaCA9IHBhcnNlSW50KHZlcnNpb25QYXJ0c1syXSkgfHwgMDtcbiAgICAgICAgICAgICAgICB2ZXJzaW9uUGFydHNbMl0gPSBTdHJpbmcocGF0Y2ggKyAxKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSB2ZXJzaW9uUGFydHMuam9pbignLicpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZlcnNpb25QYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAvLyBUd28tcGFydCB2ZXJzaW9uIChlLmcuLCAxLjApIC0gYWRkIHBhdGNoIHZlcnNpb25cbiAgICAgICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSBgJHtlbGVtZW50LnZlcnNpb259LjFgO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZlcnNpb25QYXJ0cy5sZW5ndGggPT09IDEgJiYgL15cXGQrJC8udGVzdCh2ZXJzaW9uUGFydHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgLy8gU2luZ2xlIG51bWJlciB2ZXJzaW9uIChlLmcuLCAxKSAtIGNvbnZlcnQgdG8gc2VtdmVyXG4gICAgICAgICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gYCR7ZWxlbWVudC52ZXJzaW9ufS4wLjFgO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE5vbi1zdGFuZGFyZCB2ZXJzaW9uIC0gYXBwZW5kIG9yIHJlcGxhY2Ugd2l0aCBzdGFuZGFyZCBmb3JtYXRcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSAnMS4wLjEnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vIHZlcnNpb24gLSBzZXQgaW5pdGlhbCB2ZXJzaW9uXG4gICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSAnMS4wLjAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBFbnN1cmUgbWV0YWRhdGEudmVyc2lvbiBpcyBhbHNvIHVwZGF0ZWQgZm9yIG1hbmFnZXJzIHRoYXQgdXNlIGl0XG4gICAgICAgICAgaWYgKGVsZW1lbnQubWV0YWRhdGEpIHtcbiAgICAgICAgICAgIGVsZW1lbnQubWV0YWRhdGEudmVyc2lvbiA9IGVsZW1lbnQudmVyc2lvbjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gYXV0by1pbmNyZW1lbnQgdmVyc2lvbiBmb3IgJHtuYW1lfTpgLCBlcnJvcik7XG4gICAgICAgICAgLy8gRG9uJ3QgZmFpbCB0aGUgZW50aXJlIG9wZXJhdGlvbiwganVzdCBsb2cgdGhlIGVycm9yXG4gICAgICAgICAgLy8gVmVyc2lvbiB3aWxsIHJlbWFpbiB1bmNoYW5nZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTYXZlIHRoZSBlbGVtZW50IC0gbmVlZCB0byBkZXRlcm1pbmUgZmlsZW5hbWVcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7ZWxlbWVudC5tZXRhZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTktXS9nLCAnLScpfS5tZGA7XG4gICAgICAvLyBUWVBFIFNBRkVUWTogTm8gbmVlZCBmb3IgJ2FzIGFueScgY2FzdCBhbnltb3JlIHdpdGggcHJvcGVyIHR5cGluZ1xuICAgICAgYXdhaXQgbWFuYWdlciEuc2F2ZShlbGVtZW50LCBmaWxlbmFtZSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKchSBVcGRhdGVkICR7dHlwZX0gJyR7bmFtZX0nIC0gJHtmaWVsZH0gc2V0IHRvOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBlZGl0IGVsZW1lbnQ6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBlZGl0IGVsZW1lbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIHZhbGlkYXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHN0cmljdD86IGJvb2xlYW59KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgdHlwZSwgc3RyaWN0ID0gZmFsc2UgfSA9IGFyZ3M7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGVsZW1lbnQgdHlwZVxuICAgICAgaWYgKCFPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5pbmNsdWRlcyh0eXBlIGFzIEVsZW1lbnRUeXBlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgSW52YWxpZCBlbGVtZW50IHR5cGUgJyR7dHlwZX0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpfSAob3IgbGVnYWN5IHBsdXJhbCBmb3JtczogcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMpYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZvciBwZXJzb25hcywgdXNlIGV4aXN0aW5nIHZhbGlkYXRpb24gbG9naWNcbiAgICAgIGlmICh0eXBlID09PSBFbGVtZW50VHlwZS5QRVJTT05BKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUGVyc29uYShuYW1lKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gR2V0IHRoZSBhcHByb3ByaWF0ZSBtYW5hZ2VyIGJhc2VkIG9uIHR5cGVcbiAgICAgIGxldCBtYW5hZ2VyOiBTa2lsbE1hbmFnZXIgfCBUZW1wbGF0ZU1hbmFnZXIgfCBBZ2VudE1hbmFnZXIgfCBudWxsID0gbnVsbDtcbiAgICAgIHN3aXRjaCAodHlwZSBhcyBFbGVtZW50VHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOlxuICAgICAgICAgIG1hbmFnZXIgPSB0aGlzLnNraWxsTWFuYWdlcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURTpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy50ZW1wbGF0ZU1hbmFnZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6XG4gICAgICAgICAgbWFuYWdlciA9IHRoaXMuYWdlbnRNYW5hZ2VyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBFbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciB2YWxpZGF0aW9uYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBGaW5kIHRoZSBlbGVtZW50XG4gICAgICBjb25zdCBlbGVtZW50ID0gYXdhaXQgbWFuYWdlciEuZmluZCgoZTogYW55KSA9PiBlLm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCAke3R5cGV9ICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUGVyZm9ybSB2YWxpZGF0aW9uXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gZWxlbWVudC52YWxpZGF0ZSgpO1xuICAgICAgXG4gICAgICAvLyBGb3JtYXQgdmFsaWRhdGlvbiByZXBvcnRcbiAgICAgIGxldCByZXBvcnQgPSBg8J+UjSBWYWxpZGF0aW9uIFJlcG9ydCBmb3IgJHt0eXBlfSAnJHtuYW1lfSc6XFxuYDtcbiAgICAgIHJlcG9ydCArPSBgJHt2YWxpZGF0aW9uUmVzdWx0LnZhbGlkID8gJ+KchScgOiAn4p2MJ30gU3RhdHVzOiAke3ZhbGlkYXRpb25SZXN1bHQudmFsaWQgPyAnVmFsaWQnIDogJ0ludmFsaWQnfVxcblxcbmA7XG4gICAgICBcbiAgICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmVycm9ycyAmJiB2YWxpZGF0aW9uUmVzdWx0LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcG9ydCArPSBg4p2MIEVycm9ycyAoJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9ycy5sZW5ndGh9KTpcXG5gO1xuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0LmVycm9ycy5mb3JFYWNoKChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgcmVwb3J0ICs9IGAgICDigKIgJHtlcnJvci5maWVsZCB8fCAnR2VuZXJhbCd9OiAke2Vycm9yLm1lc3NhZ2V9XFxuYDtcbiAgICAgICAgICBpZiAoZXJyb3IuZml4KSB7XG4gICAgICAgICAgICByZXBvcnQgKz0gYCAgICAg8J+SoSBGaXg6ICR7ZXJyb3IuZml4fVxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmVwb3J0ICs9ICdcXG4nO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC53YXJuaW5ncyAmJiB2YWxpZGF0aW9uUmVzdWx0Lndhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVwb3J0ICs9IGDimqDvuI8gIFdhcm5pbmdzICgke3ZhbGlkYXRpb25SZXN1bHQud2FybmluZ3MubGVuZ3RofSk6XFxuYDtcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdC53YXJuaW5ncy5mb3JFYWNoKCh3YXJuaW5nOiBhbnkpID0+IHtcbiAgICAgICAgICByZXBvcnQgKz0gYCAgIOKAoiAke3dhcm5pbmcuZmllbGQgfHwgJ0dlbmVyYWwnfTogJHt3YXJuaW5nLm1lc3NhZ2V9XFxuYDtcbiAgICAgICAgICBpZiAod2FybmluZy5zdWdnZXN0aW9uKSB7XG4gICAgICAgICAgICByZXBvcnQgKz0gYCAgICAg8J+SoSBTdWdnZXN0aW9uOiAke3dhcm5pbmcuc3VnZ2VzdGlvbn1cXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJlcG9ydCArPSAnXFxuJztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuc3VnZ2VzdGlvbnMgJiYgdmFsaWRhdGlvblJlc3VsdC5zdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcG9ydCArPSBg8J+SoSBTdWdnZXN0aW9uczpcXG5gO1xuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0LnN1Z2dlc3Rpb25zLmZvckVhY2goKHN1Z2dlc3Rpb246IHN0cmluZykgPT4ge1xuICAgICAgICAgIHJlcG9ydCArPSBgICAg4oCiICR7c3VnZ2VzdGlvbn1cXG5gO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQWRkIHN0cmljdCBtb2RlIGFkZGl0aW9uYWwgY2hlY2tzIGlmIHJlcXVlc3RlZFxuICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICByZXBvcnQgKz0gJ1xcbvCfk4sgU3RyaWN0IE1vZGU6IEFkZGl0aW9uYWwgcXVhbGl0eSBjaGVja3MgYXBwbGllZCc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogcmVwb3J0XG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byB2YWxpZGF0ZSBlbGVtZW50OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gdmFsaWRhdGUgZWxlbWVudDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgZGVsZXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGRlbGV0ZURhdGE/OiBib29sZWFufSkge1xuICAgIC8vIEVuc3VyZSBpbml0aWFsaXphdGlvbiBmb3IgdGVzdCBjb21wYXRpYmlsaXR5XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG5hbWUsIHR5cGUsIGRlbGV0ZURhdGEgfSA9IGFyZ3M7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGVsZW1lbnQgdHlwZVxuICAgICAgaWYgKCFPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5pbmNsdWRlcyh0eXBlIGFzIEVsZW1lbnRUeXBlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgSW52YWxpZCBlbGVtZW50IHR5cGU6ICR7dHlwZX1cXG5WYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpfSAob3IgbGVnYWN5IHBsdXJhbCBmb3JtczogcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMpYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEdldCB0aGUgYXBwcm9wcmlhdGUgbWFuYWdlciBiYXNlZCBvbiB0eXBlXG4gICAgICBsZXQgbWFuYWdlcjogU2tpbGxNYW5hZ2VyIHwgVGVtcGxhdGVNYW5hZ2VyIHwgQWdlbnRNYW5hZ2VyIHwgbnVsbCA9IG51bGw7XG4gICAgICBzd2l0Y2ggKHR5cGUgYXMgRWxlbWVudFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy5za2lsbE1hbmFnZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6XG4gICAgICAgICAgbWFuYWdlciA9IHRoaXMudGVtcGxhdGVNYW5hZ2VyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOlxuICAgICAgICAgIG1hbmFnZXIgPSB0aGlzLmFnZW50TWFuYWdlcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgICAgIC8vIEZvciBwZXJzb25hcywgdXNlIGEgZGlmZmVyZW50IGFwcHJvYWNoXG4gICAgICAgICAgLy8gcGVyc29uYXNEaXIgaXMgZ3VhcmFudGVlZCB0byBiZSBzZXQgYWZ0ZXIgZW5zdXJlSW5pdGlhbGl6ZWQoKVxuICAgICAgICAgIGNvbnN0IHBlcnNvbmFQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIhLCBgJHtuYW1lfS5tZGApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBmcy5hY2Nlc3MocGVyc29uYVBhdGgpO1xuICAgICAgICAgICAgYXdhaXQgZnMudW5saW5rKHBlcnNvbmFQYXRoKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gUmVsb2FkIHBlcnNvbmFzIHRvIHVwZGF0ZSB0aGUgY2FjaGVcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFBlcnNvbmFzKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKchSBTdWNjZXNzZnVsbHkgZGVsZXRlZCBwZXJzb25hICcke25hbWV9J2BcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgJHt0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zbGljZSgxKX0gJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBFbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBkZWxldGlvbmBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW5zdXJlIG1hbmFnZXIgd2FzIGFzc2lnbmVkIChUeXBlU2NyaXB0IHR5cGUgc2FmZXR5KVxuICAgICAgaWYgKCFtYW5hZ2VyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBFbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRlbGV0aW9uYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZpbmQgdGhlIGVsZW1lbnQgZmlyc3QgdG8gY2hlY2sgaWYgaXQgZXhpc3RzXG4gICAgICBjb25zdCBlbGVtZW50ID0gYXdhaXQgbWFuYWdlciEuZmluZCgoZTogYW55KSA9PiBlLm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCAke3R5cGV9ICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgZm9yIGFzc29jaWF0ZWQgZGF0YSBmaWxlc1xuICAgICAgbGV0IGRhdGFGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICAgIFxuICAgICAgLy8gQWdlbnQtc3BlY2lmaWM6IENoZWNrIGZvciBzdGF0ZSBmaWxlc1xuICAgICAgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlLkFHRU5UKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gcGF0aC5qb2luKHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLkFHRU5UKSwgJy5zdGF0ZScpO1xuICAgICAgICBjb25zdCBzdGF0ZUZpbGUgPSBwYXRoLmpvaW4oc3RhdGVEaXIsIGAke25hbWV9LXN0YXRlLmpzb25gKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMuc3RhdChzdGF0ZUZpbGUpO1xuICAgICAgICAgIGRhdGFGaWxlcy5wdXNoKGAtIC5zdGF0ZS8ke25hbWV9LXN0YXRlLmpzb24gKCR7KHN0YXQuc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMil9IEtCKWApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIE5vIHN0YXRlIGZpbGUgZXhpc3RzLCB3aGljaCBpcyBmaW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gTWVtb3J5LXNwZWNpZmljOiBDaGVjayBmb3Igc3RvcmFnZSBmaWxlc1xuICAgICAgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlLk1FTU9SWSkge1xuICAgICAgICBjb25zdCBzdG9yYWdlRGlyID0gcGF0aC5qb2luKHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLk1FTU9SWSksICcuc3RvcmFnZScpO1xuICAgICAgICBjb25zdCBzdG9yYWdlRmlsZSA9IHBhdGguam9pbihzdG9yYWdlRGlyLCBgJHtuYW1lfS1tZW1vcnkuanNvbmApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBmcy5zdGF0KHN0b3JhZ2VGaWxlKTtcbiAgICAgICAgICBkYXRhRmlsZXMucHVzaChgLSAuc3RvcmFnZS8ke25hbWV9LW1lbW9yeS5qc29uICgkeyhzdGF0LnNpemUgLyAxMDI0KS50b0ZpeGVkKDIpfSBLQilgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBObyBzdG9yYWdlIGZpbGUgZXhpc3RzLCB3aGljaCBpcyBmaW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW5zZW1ibGUtc3BlY2lmaWM6IENoZWNrIGZvciBjb25maWcgZmlsZXNcbiAgICAgIGlmICh0eXBlID09PSBFbGVtZW50VHlwZS5FTlNFTUJMRSkge1xuICAgICAgICBjb25zdCBjb25maWdEaXIgPSBwYXRoLmpvaW4odGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuRU5TRU1CTEUpLCAnLmNvbmZpZ3MnKTtcbiAgICAgICAgY29uc3QgY29uZmlnRmlsZSA9IHBhdGguam9pbihjb25maWdEaXIsIGAke25hbWV9LWNvbmZpZy5qc29uYCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3RhdCA9IGF3YWl0IGZzLnN0YXQoY29uZmlnRmlsZSk7XG4gICAgICAgICAgZGF0YUZpbGVzLnB1c2goYC0gLmNvbmZpZ3MvJHtuYW1lfS1jb25maWcuanNvbiAoJHsoc3RhdC5zaXplIC8gMTAyNCkudG9GaXhlZCgyKX0gS0IpYCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gTm8gY29uZmlnIGZpbGUgZXhpc3RzLCB3aGljaCBpcyBmaW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSWYgZGF0YSBmaWxlcyBleGlzdCBhbmQgZGVsZXRlRGF0YSBpcyBub3Qgc3BlY2lmaWVkLCB3ZSBuZWVkIHRvIGluZm9ybSB0aGUgdXNlclxuICAgICAgaWYgKGRhdGFGaWxlcy5sZW5ndGggPiAwICYmIGRlbGV0ZURhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDimqDvuI8gIFRoaXMgJHt0eXBlfSBoYXMgYXNzb2NpYXRlZCBkYXRhIGZpbGVzOlxcbiR7ZGF0YUZpbGVzLmpvaW4oJ1xcbicpfVxcblxcbldvdWxkIHlvdSBsaWtlIHRvIGRlbGV0ZSB0aGVzZSBkYXRhIGZpbGVzIGFzIHdlbGw/XFxuXFxu4oCiIFRvIGRlbGV0ZSBldmVyeXRoaW5nIChlbGVtZW50ICsgZGF0YSksIHNheTogXCJZZXMsIGRlbGV0ZSBhbGwgZGF0YVwiXFxu4oCiIFRvIGtlZXAgdGhlIGRhdGEgZmlsZXMsIHNheTogXCJObywga2VlcCB0aGUgZGF0YVwiXFxu4oCiIFRvIGNhbmNlbCwgc2F5OiBcIkNhbmNlbFwiYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIERlbGV0ZSB0aGUgbWFpbiBlbGVtZW50IGZpbGVcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7c2x1Z2lmeShuYW1lKX0ubWRgO1xuICAgICAgY29uc3QgZmlsZXBhdGggPSBwYXRoLmpvaW4odGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIodHlwZSBhcyBFbGVtZW50VHlwZSksIGZpbGVuYW1lKTtcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMudW5saW5rKGZpbGVwYXRoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCAke3R5cGV9IGZpbGUgJyR7ZmlsZW5hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIERlbGV0ZSBhc3NvY2lhdGVkIGRhdGEgZmlsZXMgaWYgcmVxdWVzdGVkXG4gICAgICBpZiAoZGVsZXRlRGF0YSAmJiBkYXRhRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB1cGRhdGVkRGF0YUZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlLkFHRU5UKSB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVGaWxlID0gcGF0aC5qb2luKHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLkFHRU5UKSwgJy5zdGF0ZScsIGAke25hbWV9LXN0YXRlLmpzb25gKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZnMudW5saW5rKHN0YXRlRmlsZSk7XG4gICAgICAgICAgICB1cGRhdGVkRGF0YUZpbGVzLnB1c2goYCR7ZGF0YUZpbGVzWzBdfSDinJMgZGVsZXRlZGApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBMb2cgYnV0IGRvbid0IGZhaWwgaWYgc3RhdGUgZmlsZSBkZWxldGlvbiBmYWlsc1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBkZWxldGUgYWdlbnQgc3RhdGUgZmlsZTogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgIHVwZGF0ZWREYXRhRmlsZXMucHVzaChgJHtkYXRhRmlsZXNbMF19IOKaoO+4jyBkZWxldGlvbiBmYWlsZWRgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRWxlbWVudFR5cGUuTUVNT1JZKSB7XG4gICAgICAgICAgY29uc3Qgc3RvcmFnZUZpbGUgPSBwYXRoLmpvaW4odGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuTUVNT1JZKSwgJy5zdG9yYWdlJywgYCR7bmFtZX0tbWVtb3J5Lmpzb25gKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZnMudW5saW5rKHN0b3JhZ2VGaWxlKTtcbiAgICAgICAgICAgIHVwZGF0ZWREYXRhRmlsZXMucHVzaChgJHtkYXRhRmlsZXNbMF19IOKckyBkZWxldGVkYCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIExvZyBidXQgZG9uJ3QgZmFpbCBpZiBzdG9yYWdlIGZpbGUgZGVsZXRpb24gZmFpbHNcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gZGVsZXRlIG1lbW9yeSBzdG9yYWdlIGZpbGU6ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICB1cGRhdGVkRGF0YUZpbGVzLnB1c2goYCR7ZGF0YUZpbGVzWzBdfSDimqDvuI8gZGVsZXRpb24gZmFpbGVkYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlLkVOU0VNQkxFKSB7XG4gICAgICAgICAgY29uc3QgY29uZmlnRmlsZSA9IHBhdGguam9pbih0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5FTlNFTUJMRSksICcuY29uZmlncycsIGAke25hbWV9LWNvbmZpZy5qc29uYCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGZzLnVubGluayhjb25maWdGaWxlKTtcbiAgICAgICAgICAgIHVwZGF0ZWREYXRhRmlsZXMucHVzaChgJHtkYXRhRmlsZXNbMF19IOKckyBkZWxldGVkYCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIExvZyBidXQgZG9uJ3QgZmFpbCBpZiBjb25maWcgZmlsZSBkZWxldGlvbiBmYWlsc1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBkZWxldGUgZW5zZW1ibGUgY29uZmlnIGZpbGU6ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICB1cGRhdGVkRGF0YUZpbGVzLnB1c2goYCR7ZGF0YUZpbGVzWzBdfSDimqDvuI8gZGVsZXRpb24gZmFpbGVkYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBkYXRhRmlsZXMgPSB1cGRhdGVkRGF0YUZpbGVzO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBCdWlsZCBzdWNjZXNzIG1lc3NhZ2VcbiAgICAgIGxldCBtZXNzYWdlID0gYOKchSBTdWNjZXNzZnVsbHkgZGVsZXRlZCAke3R5cGV9ICcke25hbWV9J2A7XG4gICAgICBpZiAoZGF0YUZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKGRlbGV0ZURhdGEpIHtcbiAgICAgICAgICBtZXNzYWdlICs9IGBcXG5cXG5Bc3NvY2lhdGVkIGRhdGEgZmlsZXM6XFxuJHtkYXRhRmlsZXMuam9pbignXFxuJyl9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXNzYWdlICs9IGBcXG5cXG7imqDvuI8gQXNzb2NpYXRlZCBkYXRhIGZpbGVzIHdlcmUgcHJlc2VydmVkOlxcbiR7ZGF0YUZpbGVzLmpvaW4oJ1xcbicpfWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBtZXNzYWdlXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSBlbGVtZW50OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZGVsZXRlIGVsZW1lbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBjaGVja1JhdGVMaW1pdCBhbmQgZmV0Y2hGcm9tR2l0SHViIGFyZSBub3cgaGFuZGxlZCBieSBHaXRIdWJDbGllbnRcblxuICBhc3luYyBicm93c2VDb2xsZWN0aW9uKHNlY3Rpb24/OiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gRklYICM0NzE6IFJlcGxhY2UgbGVnYWN5IGNhdGVnb3J5IHZhbGlkYXRpb24gd2l0aCBwcm9wZXIgc2VjdGlvbi90eXBlIHZhbGlkYXRpb25cbiAgICAgIC8vIFZhbGlkIHNlY3Rpb25zOiBsaWJyYXJ5LCBzaG93Y2FzZSwgY2F0YWxvZ1xuICAgICAgLy8gVmFsaWQgdHlwZXMgZm9yIE1DUDogcGVyc29uYXMsIHNraWxscywgYWdlbnRzLCB0ZW1wbGF0ZXMgKG90aGVycyBmaWx0ZXJlZCBwZXIgSXNzdWUgIzE0NClcbiAgICAgIC8vIE5vdGU6IHRvb2xzLCBwcm9tcHRzLCBlbnNlbWJsZXMsIG1lbW9yaWVzIGV4aXN0IGluIGNvbGxlY3Rpb24gYnV0IGFyZSBmaWx0ZXJlZCBmcm9tIE1DUFxuICAgICAgY29uc3QgdmFsaWRTZWN0aW9ucyA9IFsnbGlicmFyeScsICdzaG93Y2FzZScsICdjYXRhbG9nJ107XG4gICAgICBcbiAgICAgIC8vIOKaoO+4jyBDUklUSUNBTDogV2hlbiBhZGRpbmcgbmV3IGVsZW1lbnQgdHlwZXMsIHlvdSBNVVNUIHVwZGF0ZSB0aGlzIGFycmF5IVxuICAgICAgLy8gU2VlIGRvY3MvZGV2ZWxvcG1lbnQvQURESU5HX05FV19FTEVNRU5UX1RZUEVTX0NIRUNLTElTVC5tZCBmb3IgY29tcGxldGUgY2hlY2tsaXN0XG4gICAgICAvLyBUaGlzIGFycmF5IGlzIG9mdGVuIGZvcmdvdHRlbiBhbmQgY2F1c2VzIHZhbGlkYXRpb24gZmFpbHVyZXMgZm9yIG5ldyB0eXBlc1xuICAgICAgY29uc3QgdmFsaWRUeXBlcyA9IFsncGVyc29uYXMnLCAnc2tpbGxzJywgJ2FnZW50cycsICd0ZW1wbGF0ZXMnLCAnbWVtb3JpZXMnXTsgIC8vIE9ubHkgTUNQLXN1cHBvcnRlZCB0eXBlc1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBzZWN0aW9uIGlmIHByb3ZpZGVkXG4gICAgICBjb25zdCB2YWxpZGF0ZWRTZWN0aW9uID0gc2VjdGlvbiA/IHNhbml0aXplSW5wdXQoc2VjdGlvbi50b0xvd2VyQ2FzZSgpLCAxMDApIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKHZhbGlkYXRlZFNlY3Rpb24gJiYgIXZhbGlkU2VjdGlvbnMuaW5jbHVkZXModmFsaWRhdGVkU2VjdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNlY3Rpb24gJyR7dmFsaWRhdGVkU2VjdGlvbn0nLiBNdXN0IGJlIG9uZSBvZjogJHt2YWxpZFNlY3Rpb25zLmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIHR5cGUgaWYgcHJvdmlkZWQgKG9ubHkgdmFsaWQgd2hlbiBzZWN0aW9uIGlzICdsaWJyYXJ5JylcbiAgICAgIGNvbnN0IHZhbGlkYXRlZFR5cGUgPSB0eXBlID8gc2FuaXRpemVJbnB1dCh0eXBlLnRvTG93ZXJDYXNlKCksIDEwMCkgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAodmFsaWRhdGVkVHlwZSAmJiB2YWxpZGF0ZWRTZWN0aW9uID09PSAnbGlicmFyeScgJiYgIXZhbGlkVHlwZXMuaW5jbHVkZXModmFsaWRhdGVkVHlwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR5cGUgJyR7dmFsaWRhdGVkVHlwZX0nLiBNdXN0IGJlIG9uZSBvZjogJHt2YWxpZFR5cGVzLmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG4gICAgICBpZiAodmFsaWRhdGVkVHlwZSAmJiB2YWxpZGF0ZWRTZWN0aW9uICE9PSAnbGlicmFyeScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeXBlIHBhcmFtZXRlciBpcyBvbmx5IHZhbGlkIHdoZW4gc2VjdGlvbiBpcyBcImxpYnJhcnlcIicpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb25Ccm93c2VyLmJyb3dzZUNvbGxlY3Rpb24odmFsaWRhdGVkU2VjdGlvbiwgdmFsaWRhdGVkVHlwZSk7XG4gICAgICBcbiAgICAgIC8vIEhhbmRsZSBzZWN0aW9ucyB2aWV3XG4gICAgICBjb25zdCBpdGVtcyA9IHJlc3VsdC5pdGVtcztcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSByZXN1bHQuc2VjdGlvbnMgfHwgcmVzdWx0LmNhdGVnb3JpZXM7XG4gICAgICBcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmNvbGxlY3Rpb25Ccm93c2VyLmZvcm1hdEJyb3dzZVJlc3VsdHMoXG4gICAgICAgIGl0ZW1zLCBcbiAgICAgICAgY2F0ZWdvcmllcywgXG4gICAgICAgIHZhbGlkYXRlZFNlY3Rpb24sIFxuICAgICAgICB2YWxpZGF0ZWRUeXBlLCBcbiAgICAgICAgdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKClcbiAgICAgICk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZCA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBDb2xsZWN0aW9uIGJyb3dzaW5nIGZhaWxlZDogJHtzYW5pdGl6ZWQubWVzc2FnZX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlYXJjaENvbGxlY3Rpb24ocXVlcnk6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBFbmhhbmNlZCBpbnB1dCB2YWxpZGF0aW9uIGZvciBzZWFyY2ggcXVlcnlcbiAgICAgIGNvbnN0IHZhbGlkYXRlZFF1ZXJ5ID0gTUNQSW5wdXRWYWxpZGF0b3IudmFsaWRhdGVTZWFyY2hRdWVyeShxdWVyeSk7XG4gICAgICBcbiAgICAgIGNvbnN0IGl0ZW1zID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uU2VhcmNoLnNlYXJjaENvbGxlY3Rpb24odmFsaWRhdGVkUXVlcnkpO1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMuY29sbGVjdGlvblNlYXJjaC5mb3JtYXRTZWFyY2hSZXN1bHRzKGl0ZW1zLCB2YWxpZGF0ZWRRdWVyeSwgdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRXJyb3Igc2VhcmNoaW5nIGNvbGxlY3Rpb246ICR7c2FuaXRpemVkLm1lc3NhZ2V9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZWFyY2hDb2xsZWN0aW9uRW5oYW5jZWQocXVlcnk6IHN0cmluZywgb3B0aW9uczogYW55ID0ge30pIHtcbiAgICB0cnkge1xuICAgICAgLy8gRW5oYW5jZWQgaW5wdXQgdmFsaWRhdGlvbiBmb3Igc2VhcmNoIHF1ZXJ5XG4gICAgICBjb25zdCB2YWxpZGF0ZWRRdWVyeSA9IE1DUElucHV0VmFsaWRhdG9yLnZhbGlkYXRlU2VhcmNoUXVlcnkocXVlcnkpO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBhbmQgc2FuaXRpemUgb3B0aW9uc1xuICAgICAgY29uc3QgdmFsaWRhdGVkT3B0aW9ucyA9IHtcbiAgICAgICAgZWxlbWVudFR5cGU6IG9wdGlvbnMuZWxlbWVudFR5cGUgPyBTdHJpbmcob3B0aW9ucy5lbGVtZW50VHlwZSkgOiB1bmRlZmluZWQsXG4gICAgICAgIGNhdGVnb3J5OiBvcHRpb25zLmNhdGVnb3J5ID8gU3RyaW5nKG9wdGlvbnMuY2F0ZWdvcnkpIDogdW5kZWZpbmVkLFxuICAgICAgICBwYWdlOiBvcHRpb25zLnBhZ2UgPyBNYXRoLm1heCgxLCBwYXJzZUludChvcHRpb25zLnBhZ2UpIHx8IDEpIDogMSxcbiAgICAgICAgcGFnZVNpemU6IG9wdGlvbnMucGFnZVNpemUgPyBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDEsIHBhcnNlSW50KG9wdGlvbnMucGFnZVNpemUpIHx8IDI1KSkgOiAyNSxcbiAgICAgICAgc29ydEJ5OiBvcHRpb25zLnNvcnRCeSAmJiBbJ3JlbGV2YW5jZScsICduYW1lJywgJ2RhdGUnXS5pbmNsdWRlcyhvcHRpb25zLnNvcnRCeSkgPyBvcHRpb25zLnNvcnRCeSA6ICdyZWxldmFuY2UnXG4gICAgICB9O1xuICAgICAgXG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uU2VhcmNoLnNlYXJjaENvbGxlY3Rpb25XaXRoT3B0aW9ucyh2YWxpZGF0ZWRRdWVyeSwgdmFsaWRhdGVkT3B0aW9ucyk7XG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5jb2xsZWN0aW9uU2VhcmNoLmZvcm1hdFNlYXJjaFJlc3VsdHNXaXRoUGFnaW5hdGlvbihyZXN1bHRzLCB0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZCA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBFcnJvciBzZWFyY2hpbmcgY29sbGVjdGlvbjogJHtzYW5pdGl6ZWQubWVzc2FnZX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvbGxlY3Rpb25Db250ZW50KHBhdGg6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG1ldGFkYXRhLCBjb250ZW50IH0gPSBhd2FpdCB0aGlzLnBlcnNvbmFEZXRhaWxzLmdldENvbGxlY3Rpb25Db250ZW50KHBhdGgpO1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMucGVyc29uYURldGFpbHMuZm9ybWF0UGVyc29uYURldGFpbHMobWV0YWRhdGEsIGNvbnRlbnQsIHBhdGgsIHRoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgc2FuaXRpemVkID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEVycm9yIGZldGNoaW5nIGNvbnRlbnQ6ICR7c2FuaXRpemVkLm1lc3NhZ2V9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbnN0YWxsQ29udGVudChpbnB1dFBhdGg6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmVsZW1lbnRJbnN0YWxsZXIuaW5zdGFsbENvbnRlbnQoaW5wdXRQYXRoKTtcbiAgICAgIFxuICAgICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDimqDvuI8gJHtyZXN1bHQubWVzc2FnZX1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBJZiBpdCdzIGEgcGVyc29uYSwgcmVsb2FkIHBlcnNvbmFzXG4gICAgICBpZiAocmVzdWx0LmVsZW1lbnRUeXBlID09PSBFbGVtZW50VHlwZS5QRVJTT05BKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZFBlcnNvbmFzKCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmVsZW1lbnRJbnN0YWxsZXIuZm9ybWF0SW5zdGFsbFN1Y2Nlc3MoXG4gICAgICAgIHJlc3VsdC5tZXRhZGF0YSEsIFxuICAgICAgICByZXN1bHQuZmlsZW5hbWUhLFxuICAgICAgICByZXN1bHQuZWxlbWVudFR5cGUhXG4gICAgICApO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRXJyb3IgaW5zdGFsbGluZyBBSSBjdXN0b21pemF0aW9uIGVsZW1lbnQ6ICR7c2FuaXRpemVkLm1lc3NhZ2V9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdWJtaXRDb250ZW50KGNvbnRlbnRJZGVudGlmaWVyOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVXNlIHRoZSBuZXcgcG9ydGZvbGlvLWJhc2VkIHN1Ym1pc3Npb24gdG9vbFxuICAgICAgY29uc3QgeyBTdWJtaXRUb1BvcnRmb2xpb1Rvb2wgfSA9IGF3YWl0IGltcG9ydCgnLi90b29scy9wb3J0Zm9saW8vc3VibWl0VG9Qb3J0Zm9saW9Ub29sLmpzJyk7XG4gICAgICBjb25zdCB7IEZpbGVEaXNjb3ZlcnlVdGlsIH0gPSBhd2FpdCBpbXBvcnQoJy4vdXRpbHMvRmlsZURpc2NvdmVyeVV0aWwuanMnKTtcbiAgICAgIGNvbnN0IHN1Ym1pdFRvb2wgPSBuZXcgU3VibWl0VG9Qb3J0Zm9saW9Ub29sKHRoaXMuYXBpQ2FjaGUpO1xuICAgIFxuICAgIC8vIFRyeSB0byBmaW5kIHRoZSBjb250ZW50IGFjcm9zcyBhbGwgZWxlbWVudCB0eXBlc1xuICAgIGNvbnN0IHBvcnRmb2xpb01hbmFnZXIgPSBQb3J0Zm9saW9NYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgbGV0IGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZm91bmRQYXRoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBcbiAgICAvLyBQRVJGT1JNQU5DRSBPUFRJTUlaQVRJT046IFNlYXJjaCBhbGwgZWxlbWVudCBkaXJlY3RvcmllcyBpbiBwYXJhbGxlbFxuICAgIC8vIE5PVEU6IFRoaXMgZHluYW1pY2FsbHkgaGFuZGxlcyBBTEwgZWxlbWVudCB0eXBlcyBmcm9tIHRoZSBFbGVtZW50VHlwZSBlbnVtXG4gICAgLy8gTm8gaGFyZGNvZGVkIGNvdW50IC0gaWYgeW91IGFkZCAxMCBtb3JlIGVsZW1lbnQgdHlwZXMgdG9tb3Jyb3csIHRoaXMgY29kZVxuICAgIC8vIHdpbGwgYXV0b21hdGljYWxseSBzZWFyY2ggYWxsIDE2IHR5cGVzIHdpdGhvdXQgYW55IGNoYW5nZXMgbmVlZGVkIGhlcmVcbiAgICBjb25zdCBzZWFyY2hQcm9taXNlcyA9IE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLm1hcChhc3luYyAodHlwZSkgPT4ge1xuICAgICAgY29uc3QgZGlyID0gcG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKHR5cGUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IEZpbGVEaXNjb3ZlcnlVdGlsLmZpbmRGaWxlKGRpciwgY29udGVudElkZW50aWZpZXIsIHtcbiAgICAgICAgICBleHRlbnNpb25zOiBbJy5tZCcsICcuanNvbicsICcueWFtbCcsICcueW1sJ10sXG4gICAgICAgICAgcGFydGlhbE1hdGNoOiB0cnVlLFxuICAgICAgICAgIGNhY2hlUmVzdWx0czogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBmaWxlID8geyB0eXBlOiB0eXBlIGFzIEVsZW1lbnRUeXBlLCBmaWxlIH0gOiBudWxsO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAvLyBJTVBST1ZFRCBFUlJPUiBIQU5ETElORzogTG9nIHdhcm5pbmdzIGZvciB1bmV4cGVjdGVkIGVycm9yc1xuICAgICAgICBpZiAoZXJyb3I/LmNvZGUgIT09ICdFTk9FTlQnICYmIGVycm9yPy5jb2RlICE9PSAnRU5PVERJUicpIHtcbiAgICAgICAgICAvLyBOb3QganVzdCBhIG1pc3NpbmcgZGlyZWN0b3J5IC0gdGhpcyBjb3VsZCBiZSBhIHBlcm1pc3Npb24gaXNzdWUgb3Igb3RoZXIgcHJvYmxlbVxuICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmV4cGVjdGVkIGVycm9yIHNlYXJjaGluZyAke3R5cGV9IGRpcmVjdG9yeWAsIHsgXG4gICAgICAgICAgICBjb250ZW50SWRlbnRpZmllcixcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3I/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICAgIGNvZGU6IGVycm9yPy5jb2RlIFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERpcmVjdG9yeSBkb2Vzbid0IGV4aXN0IC0gdGhpcyBpcyBleHBlY3RlZCBmb3IgdW51c2VkIGVsZW1lbnQgdHlwZXNcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYCR7dHlwZX0gZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LCBza2lwcGluZ2AsIHsgdHlwZSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvLyBXYWl0IGZvciBhbGwgc2VhcmNoZXMgdG8gY29tcGxldGUgYW5kIGZpbmQgdGhlIGZpcnN0IG1hdGNoXG4gICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChzZWFyY2hQcm9taXNlcyk7XG4gICAgXG4gICAgLy8gTk9URTogRmlsZSB2YWxpZGF0aW9uIC0gd2UgcmVseSBvbiB0aGUgcG9ydGZvbGlvIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdG8gZW5zdXJlXG4gICAgLy8gZmlsZXMgYXJlIGluIHRoZSBjb3JyZWN0IGVsZW1lbnQgdHlwZSBkaXJlY3RvcnkuIEFkZGl0aW9uYWwgc2NoZW1hIHZhbGlkYXRpb25cbiAgICAvLyBjb3VsZCBiZSBhZGRlZCBoZXJlIGlmIG5lZWRlZCwgYnV0IHRoZSBjdXJyZW50IGFwcHJvYWNoIGlzIHN1ZmZpY2llbnQgYXM6XG4gICAgLy8gMS4gRmlsZURpc2NvdmVyeVV0aWwgYWxyZWFkeSB2YWxpZGF0ZXMgZmlsZSBleHRlbnNpb25zXG4gICAgLy8gMi4gUG9ydGZvbGlvIHN0cnVjdHVyZSBlbmZvcmNlcyBwcm9wZXIgb3JnYW5pemF0aW9uXG4gICAgLy8gMy4gc3VibWl0VG9Qb3J0Zm9saW9Ub29sIHBlcmZvcm1zIGFkZGl0aW9uYWwgdmFsaWRhdGlvbiBkb3duc3RyZWFtXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2Ygc2VhcmNoUmVzdWx0cykge1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHJlc3VsdC52YWx1ZSkge1xuICAgICAgICBmb3VuZFBhdGggPSByZXN1bHQudmFsdWUuZmlsZTtcbiAgICAgICAgZWxlbWVudFR5cGUgPSByZXN1bHQudmFsdWUudHlwZTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGb3VuZCBjb250ZW50IGluICR7ZWxlbWVudFR5cGV9IGRpcmVjdG9yeWAsIHsgXG4gICAgICAgICAgY29udGVudElkZW50aWZpZXIsIFxuICAgICAgICAgIHR5cGU6IGVsZW1lbnRUeXBlLCBcbiAgICAgICAgICBmaWxlOiBmb3VuZFBhdGggXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gQ1JJVElDQUwgRklYOiBOZXZlciBkZWZhdWx0IHRvIGFueSBlbGVtZW50IHR5cGUgd2hlbiBjb250ZW50IGlzIG5vdCBmb3VuZFxuICAgIC8vIFRoaXMgcHJldmVudHMgaW5jb3JyZWN0IHN1Ym1pc3Npb25zIGFuZCBmb3JjZXMgcHJvcGVyIHR5cGUgZGV0ZWN0aW9uIG9yIHVzZXIgc3BlY2lmaWNhdGlvblxuICAgIGlmICghZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIENvbnRlbnQgbm90IGZvdW5kIGluIGFueSBlbGVtZW50IGRpcmVjdG9yeSAtIHByb3ZpZGUgaGVscGZ1bCBlcnJvciB3aXRoIHN1Z2dlc3Rpb25zXG4gICAgICBjb25zdCBhdmFpbGFibGVUeXBlcyA9IE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmpvaW4oJywgJyk7XG4gICAgICBsb2dnZXIud2FybihgQ29udGVudCBcIiR7Y29udGVudElkZW50aWZpZXJ9XCIgbm90IGZvdW5kIGluIGFueSBwb3J0Zm9saW8gZGlyZWN0b3J5YCwgeyBcbiAgICAgICAgY29udGVudElkZW50aWZpZXIsXG4gICAgICAgIHNlYXJjaGVkVHlwZXM6IE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpIFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBFbmhhbmNlZCBlcnJvciBtZXNzYWdlIHdpdGggc21hcnQgc3VnZ2VzdGlvbnNcbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBg4p2MIENvbnRlbnQgXCIke2NvbnRlbnRJZGVudGlmaWVyfVwiIG5vdCBmb3VuZCBpbiBwb3J0Zm9saW8uXFxuXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+UjSAqKlNlYXJjaGVkIGFjcm9zcyBhbGwgZWxlbWVudCB0eXBlcyoqOiAke2F2YWlsYWJsZVR5cGVzfVxcblxcbmA7XG4gICAgICBcbiAgICAgIC8vIFRyeSB0byBwcm92aWRlIHNtYXJ0IHN1Z2dlc3Rpb25zIGJhc2VkIG9uIHBhcnRpYWwgbWF0Y2hlc1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBGaWxlRGlzY292ZXJ5VXRpbCB9ID0gYXdhaXQgaW1wb3J0KCcuL3V0aWxzL0ZpbGVEaXNjb3ZlcnlVdGlsLmpzJyk7XG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBcbiAgICAgICAgLy8gU2VhcmNoIGZvciBzaW1pbGFyIG5hbWVzIGFjcm9zcyBhbGwgZWxlbWVudCB0eXBlc1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnRUeXBlIG9mIE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpKSB7XG4gICAgICAgICAgY29uc3QgZGlyID0gcG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKGVsZW1lbnRUeXBlKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGFydGlhbE1hdGNoZXMgPSBhd2FpdCBGaWxlRGlzY292ZXJ5VXRpbC5maW5kRmlsZShkaXIsIGNvbnRlbnRJZGVudGlmaWVyLCB7XG4gICAgICAgICAgICAgIGV4dGVuc2lvbnM6IFsnLm1kJywgJy5qc29uJywgJy55YW1sJywgJy55bWwnXSxcbiAgICAgICAgICAgICAgcGFydGlhbE1hdGNoOiB0cnVlLFxuICAgICAgICAgICAgICBjYWNoZVJlc3VsdHM6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFydGlhbE1hdGNoZXMpICYmIHBhcnRpYWxNYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiBwYXJ0aWFsTWF0Y2hlcy5zbGljZSgwLCAyKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VuYW1lID0gcGF0aC5iYXNlbmFtZShtYXRjaCwgcGF0aC5leHRuYW1lKG1hdGNoKSk7XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMucHVzaChgXCIke2Jhc2VuYW1lfVwiICgke2VsZW1lbnRUeXBlfSlgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0aWFsTWF0Y2hlcykge1xuICAgICAgICAgICAgICBjb25zdCBiYXNlbmFtZSA9IHBhdGguYmFzZW5hbWUocGFydGlhbE1hdGNoZXMsIHBhdGguZXh0bmFtZShwYXJ0aWFsTWF0Y2hlcykpO1xuICAgICAgICAgICAgICBzdWdnZXN0aW9ucy5wdXNoKGBcIiR7YmFzZW5hbWV9XCIgKCR7ZWxlbWVudFR5cGV9KWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBTa2lwIHRoaXMgdHlwZSBpZiB0aGVyZSdzIGFuIGVycm9yXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmIChzdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlICs9IGDwn5KhICoqRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8qKlxcbmA7XG4gICAgICAgICAgZm9yIChjb25zdCBzdWdnZXN0aW9uIG9mIHN1Z2dlc3Rpb25zLnNsaWNlKDAsIDUpKSB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYCAg4oCiICR7c3VnZ2VzdGlvbn1cXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYFxcbmA7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKHN1Z2dlc3Rpb25FcnJvcikge1xuICAgICAgICAvLyBJZiBzdWdnZXN0aW9ucyBmYWlsLCBjb250aW51ZSB3aXRob3V0IHRoZW1cbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gZ2VuZXJhdGUgc3VnZ2VzdGlvbnMnLCB7IHN1Z2dlc3Rpb25FcnJvciB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgZXJyb3JNZXNzYWdlICs9IGDwn5ug77iPICoqU3RlcC1ieS1zdGVwIHRyb3VibGVzaG9vdGluZyoqOlxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDEuIPCfk50gKipMaXN0IGFsbCBjb250ZW50Kio6IFVzZSBcXGBsaXN0X3BvcnRmb2xpb1xcYCB0byBzZWUgd2hhdCdzIGF2YWlsYWJsZVxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDIuIPCflI0gKipDaGVjayBzcGVsbGluZyoqOiBWZXJpZnkgdGhlIGV4YWN0IG5hbWUgYW5kIHRyeSB2YXJpYXRpb25zXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBgMy4g8J+OryAqKlNwZWNpZnkgdHlwZSoqOiBUcnkgXFxgc3VibWl0X2NvbGxlY3Rpb25fY29udGVudCBcIiR7Y29udGVudElkZW50aWZpZXJ9XCIgLS10eXBlPXBlcnNvbmFzXFxgXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBgNC4g8J+TgSAqKkJyb3dzZSBmaWxlcyoqOiBDaGVjayB5b3VyIHBvcnRmb2xpbyBkaXJlY3RvcnkgbWFudWFsbHlcXG5cXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGDwn5OdICoqVGlwKio6IFRoZSBzeXN0ZW0gc2VhcmNoZXMgYm90aCBmaWxlbmFtZXMgYW5kIGRpc3BsYXkgbmFtZXMgd2l0aCBmdXp6eSBtYXRjaGluZy5gO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGVzIGFjcm9zcyBhbGwgc291cmNlcyBiZWZvcmUgc3VibWlzc2lvblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IFVuaWZpZWRJbmRleE1hbmFnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vVW5pZmllZEluZGV4TWFuYWdlci5qcycpO1xuICAgICAgY29uc3QgdW5pZmllZE1hbmFnZXIgPSBVbmlmaWVkSW5kZXhNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICBcbiAgICAgIC8vIEV4dHJhY3QgdGhlIGFjdHVhbCBlbGVtZW50IG5hbWUgZnJvbSB0aGUgY29udGVudCBwYXRoXG4gICAgICBjb25zdCBiYXNlbmFtZSA9IHBhdGguYmFzZW5hbWUoZm91bmRQYXRoISwgcGF0aC5leHRuYW1lKGZvdW5kUGF0aCEpKTtcbiAgICAgIGNvbnN0IGR1cGxpY2F0ZXMgPSBhd2FpdCB1bmlmaWVkTWFuYWdlci5jaGVja0R1cGxpY2F0ZXMoYmFzZW5hbWUpO1xuICAgICAgXG4gICAgICBpZiAoZHVwbGljYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGR1cGxpY2F0ZSA9IGR1cGxpY2F0ZXNbMF07XG4gICAgICAgIGxldCB3YXJuaW5nVGV4dCA9IGDimqDvuI8gKipEdXBsaWNhdGUgRGV0ZWN0aW9uIEFsZXJ0KipcXG5cXG5gO1xuICAgICAgICB3YXJuaW5nVGV4dCArPSBgRm91bmQgXCIke2R1cGxpY2F0ZS5uYW1lfVwiIGluIG11bHRpcGxlIHNvdXJjZXM6XFxuXFxuYDtcbiAgICAgICAgXG4gICAgICAgIGZvciAoY29uc3Qgc291cmNlIG9mIGR1cGxpY2F0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgY29uc3Qgc291cmNlSWNvbiA9IHRoaXMuZ2V0U291cmNlSWNvbihzb3VyY2Uuc291cmNlKTtcbiAgICAgICAgICB3YXJuaW5nVGV4dCArPSBgJHtzb3VyY2VJY29ufSAqKiR7c291cmNlLnNvdXJjZX0qKjogJHtzb3VyY2UudmVyc2lvbiB8fCAndW5rbm93biB2ZXJzaW9uJ30gKCR7c291cmNlLmxhc3RNb2RpZmllZC50b0xvY2FsZURhdGVTdHJpbmcoKX0pXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgd2FybmluZ1RleHQgKz0gYFxcbmA7XG4gICAgICAgIFxuICAgICAgICBpZiAoZHVwbGljYXRlLmhhc1ZlcnNpb25Db25mbGljdCAmJiBkdXBsaWNhdGUudmVyc2lvbkNvbmZsaWN0KSB7XG4gICAgICAgICAgd2FybmluZ1RleHQgKz0gYPCflIQgKipWZXJzaW9uIENvbmZsaWN0IERldGVjdGVkKipcXG5gO1xuICAgICAgICAgIHdhcm5pbmdUZXh0ICs9IGBSZWNvbW1lbmRlZCBzb3VyY2U6ICoqJHtkdXBsaWNhdGUudmVyc2lvbkNvbmZsaWN0LnJlY29tbWVuZGVkfSoqXFxuYDtcbiAgICAgICAgICB3YXJuaW5nVGV4dCArPSBgUmVhc29uOiAke2R1cGxpY2F0ZS52ZXJzaW9uQ29uZmxpY3QucmVhc29ufVxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHdhcm5pbmdUZXh0ICs9IGAqKlJlY29tbWVuZGF0aW9uczoqKlxcbmA7XG4gICAgICAgIHdhcm5pbmdUZXh0ICs9IGDigKIgUmV2aWV3IGV4aXN0aW5nIHZlcnNpb25zIGJlZm9yZSBzdWJtaXR0aW5nXFxuYDtcbiAgICAgICAgd2FybmluZ1RleHQgKz0gYOKAoiBDb25zaWRlciB1cGRhdGluZyBsb2NhbCB2ZXJzaW9uIGluc3RlYWQgb2YgY3JlYXRpbmcgZHVwbGljYXRlXFxuYDtcbiAgICAgICAgd2FybmluZ1RleHQgKz0gYOKAoiBFbnN1cmUgeW91ciB2ZXJzaW9uIGFkZHMgbWVhbmluZ2Z1bCBpbXByb3ZlbWVudHNcXG5gO1xuICAgICAgICB3YXJuaW5nVGV4dCArPSBg4oCiIFVwZGF0ZSB2ZXJzaW9uIG51bWJlciBpbiBtZXRhZGF0YSBpZiBzdWJtaXR0aW5nIGVuaGFuY2VtZW50XFxuXFxuYDtcbiAgICAgICAgd2FybmluZ1RleHQgKz0gYCoqUHJvY2VlZGluZyB3aXRoIHN1Ym1pc3Npb24gYW55d2F5Li4uKipcXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgLy8gTG9nIHRoZSBkdXBsaWNhdGUgZGV0ZWN0aW9uIGZvciBtb25pdG9yaW5nXG4gICAgICAgIGxvZ2dlci53YXJuKCdEdXBsaWNhdGUgY29udGVudCBkZXRlY3RlZCBkdXJpbmcgc3VibWlzc2lvbicsIHtcbiAgICAgICAgICBjb250ZW50SWRlbnRpZmllcixcbiAgICAgICAgICBlbGVtZW50VHlwZSxcbiAgICAgICAgICBkdXBsaWNhdGVJbmZvOiBkdXBsaWNhdGVcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBDb250aW51ZSB3aXRoIHN1Ym1pc3Npb24gYnV0IHNob3cgd2FybmluZ1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdWJtaXRUb29sLmV4ZWN1dGUoe1xuICAgICAgICAgIG5hbWU6IGNvbnRlbnRJZGVudGlmaWVyLFxuICAgICAgICAgIHR5cGU6IGVsZW1lbnRUeXBlXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gQ29tYmluZSB3YXJuaW5nIHdpdGggc3VibWlzc2lvbiByZXN1bHRcbiAgICAgICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHtyZXN1bHQuc3VjY2VzcyA/ICfimqDvuI8nIDogJ+KdjCd9ICR7d2FybmluZ1RleHR9JHtyZXN1bHQubWVzc2FnZX1gO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiByZXNwb25zZVRleHQsXG4gICAgICAgICAgfV0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZHVwbGljYXRlRXJyb3IpIHtcbiAgICAgIC8vIElmIGR1cGxpY2F0ZSBjaGVja2luZyBmYWlscywgbG9nIGJ1dCBjb250aW51ZSB3aXRoIHN1Ym1pc3Npb25cbiAgICAgIGxvZ2dlci53YXJuKCdEdXBsaWNhdGUgY2hlY2tpbmcgZmFpbGVkIGR1cmluZyBzdWJtaXNzaW9uJywge1xuICAgICAgICBjb250ZW50SWRlbnRpZmllcixcbiAgICAgICAgZXJyb3I6IGR1cGxpY2F0ZUVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBkdXBsaWNhdGVFcnJvci5tZXNzYWdlIDogU3RyaW5nKGR1cGxpY2F0ZUVycm9yKVxuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIC8vIEV4ZWN1dGUgdGhlIHN1Ym1pc3Npb24gd2l0aCB0aGUgZGV0ZWN0ZWQgZWxlbWVudCB0eXBlXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3VibWl0VG9vbC5leGVjdXRlKHtcbiAgICAgIG5hbWU6IGNvbnRlbnRJZGVudGlmaWVyLFxuICAgICAgdHlwZTogZWxlbWVudFR5cGVcbiAgICB9KTtcbiAgICBcbiAgICAvLyBGb3JtYXQgdGhlIHJlc3BvbnNlIC0gdGhlIG1lc3NhZ2UgYWxyZWFkeSBjb250YWlucyBhbGwgZGV0YWlsc1xuICAgIGxldCByZXNwb25zZVRleHQgPSByZXN1bHQubWVzc2FnZTtcbiAgICBcbiAgICAvLyBBZGQgcGVyc29uYSBpbmRpY2F0b3IgZm9yIGNvbnNpc3RlbmN5XG4gICAgcmVzcG9uc2VUZXh0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHtyZXN1bHQuc3VjY2VzcyA/ICfinIUnIDogJ+KdjCd9ICR7cmVzcG9uc2VUZXh0fWA7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IHJlc3BvbnNlVGV4dCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgICBcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAvLyBVWCBJTVBST1ZFTUVOVDogQ29tcHJlaGVuc2l2ZSBlcnJvciBoYW5kbGluZyB3aXRoIGZhbGxiYWNrIHN1Z2dlc3Rpb25zXG4gICAgICBsb2dnZXIuZXJyb3IoJ1VuZXhwZWN0ZWQgZXJyb3IgaW4gc3VibWl0Q29udGVudCcsIHtcbiAgICAgICAgY29udGVudElkZW50aWZpZXIsXG4gICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICBzdGFjazogZXJyb3Iuc3RhY2tcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqU3VibWlzc2lvbiBGYWlsZWQqKlxcblxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYPCfmqggKipFcnJvcioqOiAke2Vycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3Igb2NjdXJyZWQnfVxcblxcbmA7XG4gICAgICBcbiAgICAgIC8vIFByb3ZpZGUgY29udGV4dHVhbCB0cm91Ymxlc2hvb3RpbmcgYmFzZWQgb24gZXJyb3IgdHlwZVxuICAgICAgaWYgKGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdhdXRoJykgfHwgZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ3Rva2VuJykpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlICs9IGDwn5SQICoqQXV0aGVudGljYXRpb24gSXNzdWUqKjpcXG5gO1xuICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYOKAoiBSdW46IFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIHRvIHJlLWF1dGhlbnRpY2F0ZVxcbmA7XG4gICAgICAgIGVycm9yTWVzc2FnZSArPSBg4oCiIENoZWNrOiBcXGBnaCBhdXRoIHN0YXR1c1xcYCBpZiB5b3UgaGF2ZSBHaXRIdWIgQ0xJXFxuXFxuYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCduZXR3b3JrJykgfHwgZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ2Nvbm5lY3Rpb24nKSkge1xuICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYPCfjJAgKipOZXR3b3JrIElzc3VlKio6XFxuYDtcbiAgICAgICAgZXJyb3JNZXNzYWdlICs9IGDigKIgQ2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uXFxuYDtcbiAgICAgICAgZXJyb3JNZXNzYWdlICs9IGDigKIgVHJ5IGFnYWluIGluIGEgZmV3IG1pbnV0ZXNcXG5gO1xuICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYOKAoiBDaGVjayBHaXRIdWIgc3RhdHVzOiBodHRwczovL3N0YXR1cy5naXRodWIuY29tXFxuXFxuYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgZXJyb3JNZXNzYWdlICs9IGDwn5qRICoqRW1lcmdlbmN5IEFsdGVybmF0aXZlcyoqOlxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDEuIPCflIQgKipSZXRyeSoqOiBUcnkgdGhlIHNhbWUgY29tbWFuZCBhZ2FpblxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDIuIPCfk50gKipDaGVjayBjb250ZW50Kio6IFVzZSBcXGBsaXN0X3BvcnRmb2xpb1xcYCB0byB2ZXJpZnkgdGhlIGVsZW1lbnQgZXhpc3RzXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBgMy4g8J+OryAqKlNwZWNpZnkgdHlwZSoqOiBBZGQgXFxgLS10eXBlPXBlcnNvbmFzXFxgIGlmIHlvdSBrbm93IHRoZSBlbGVtZW50IHR5cGVcXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGA0LiDwn5qRICoqTWFudWFsIHVwbG9hZCoqOiBDb3B5IGNvbnRlbnQgZGlyZWN0bHkgdG8gR2l0SHViIHZpYSB3ZWIgaW50ZXJmYWNlXFxuXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+TniAqKk5lZWQgaGVscD8qKiBUaGlzIGxvb2tzIGxpa2UgYSBzeXN0ZW0gaXNzdWUuIFBsZWFzZSByZXBvcnQgaXQgd2l0aCB0aGUgZXJyb3IgZGV0YWlscyBhYm92ZS5gO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0Q29sbGVjdGlvbkNhY2hlSGVhbHRoKCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgY2FjaGUgc3RhdGlzdGljcyBmcm9tIGJvdGggY2FjaGVzXG4gICAgICBjb25zdCBjb2xsZWN0aW9uU3RhdHMgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb25DYWNoZS5nZXRDYWNoZVN0YXRzKCk7XG4gICAgICBjb25zdCBzZWFyY2hTdGF0cyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvblNlYXJjaC5nZXRDYWNoZVN0YXRzKCk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGNhY2hlIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGNvbnN0IGNhY2hlRGlyID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICcuZG9sbGhvdXNlbWNwJywgJ2NhY2hlJyk7XG4gICAgICBsZXQgY2FjaGVGaWxlRXhpc3RzID0gZmFsc2U7XG4gICAgICBsZXQgY2FjaGVGaWxlU2l6ZSA9IDA7XG4gICAgICBcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNhY2hlRmlsZSA9IHBhdGguam9pbihjYWNoZURpciwgJ2NvbGxlY3Rpb24tY2FjaGUuanNvbicpO1xuICAgICAgICBjb25zdCBmaWxlU3RhdHMgPSBhd2FpdCBmcy5zdGF0KGNhY2hlRmlsZSk7XG4gICAgICAgIGNhY2hlRmlsZUV4aXN0cyA9IHRydWU7XG4gICAgICAgIGNhY2hlRmlsZVNpemUgPSBmaWxlU3RhdHMuc2l6ZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIENhY2hlIGZpbGUgZG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRm9ybWF0IGNhY2hlIGFnZVxuICAgICAgY29uc3QgZm9ybWF0QWdlID0gKGFnZU1zOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgICAgICBpZiAoYWdlTXMgPT09IDApIHJldHVybiAnTm90IGNhY2hlZCc7XG4gICAgICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihhZ2VNcyAvICgxMDAwICogNjAgKiA2MCkpO1xuICAgICAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigoYWdlTXMgJSAoMTAwMCAqIDYwICogNjApKSAvICgxMDAwICogNjApKTtcbiAgICAgICAgaWYgKGhvdXJzID4gMCkge1xuICAgICAgICAgIHJldHVybiBgJHtob3Vyc31oICR7bWludXRlc31tIG9sZGA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke21pbnV0ZXN9bSBvbGRgO1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgLy8gQnVpbGQgaGVhbHRoIHJlcG9ydCB3aXRoIGJvdGggY2FjaGUgc3lzdGVtc1xuICAgICAgY29uc3QgaGVhbHRoUmVwb3J0ID0ge1xuICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgc3RhdHVzOiBjb2xsZWN0aW9uU3RhdHMuaXNWYWxpZCA/ICdoZWFsdGh5JyA6IChjYWNoZUZpbGVFeGlzdHMgPyAnZXhwaXJlZCcgOiAnZW1wdHknKSxcbiAgICAgICAgICBjYWNoZUV4aXN0czogY2FjaGVGaWxlRXhpc3RzLFxuICAgICAgICAgIGl0ZW1Db3VudDogY29sbGVjdGlvblN0YXRzLml0ZW1Db3VudCxcbiAgICAgICAgICBjYWNoZUFnZTogZm9ybWF0QWdlKGNvbGxlY3Rpb25TdGF0cy5jYWNoZUFnZSksXG4gICAgICAgICAgY2FjaGVBZ2VNczogY29sbGVjdGlvblN0YXRzLmNhY2hlQWdlLFxuICAgICAgICAgIGlzVmFsaWQ6IGNvbGxlY3Rpb25TdGF0cy5pc1ZhbGlkLFxuICAgICAgICAgIGNhY2hlRmlsZVNpemU6IGNhY2hlRmlsZVNpemUsXG4gICAgICAgICAgY2FjaGVGaWxlU2l6ZUZvcm1hdHRlZDogY2FjaGVGaWxlU2l6ZSA+IDAgPyBgJHsoY2FjaGVGaWxlU2l6ZSAvIDEwMjQpLnRvRml4ZWQoMil9IEtCYCA6ICcwIEtCJyxcbiAgICAgICAgICB0dGxSZW1haW5pbmc6IGNvbGxlY3Rpb25TdGF0cy5pc1ZhbGlkID8gZm9ybWF0QWdlKDI0ICogNjAgKiA2MCAqIDEwMDAgLSBjb2xsZWN0aW9uU3RhdHMuY2FjaGVBZ2UpIDogJ0V4cGlyZWQnXG4gICAgICAgIH0sXG4gICAgICAgIGluZGV4OiB7XG4gICAgICAgICAgc3RhdHVzOiBzZWFyY2hTdGF0cy5pbmRleC5pc1ZhbGlkID8gJ2hlYWx0aHknIDogKHNlYXJjaFN0YXRzLmluZGV4Lmhhc0NhY2hlID8gJ2V4cGlyZWQnIDogJ2VtcHR5JyksXG4gICAgICAgICAgaGFzQ2FjaGU6IHNlYXJjaFN0YXRzLmluZGV4Lmhhc0NhY2hlLFxuICAgICAgICAgIGVsZW1lbnRzOiBzZWFyY2hTdGF0cy5pbmRleC5lbGVtZW50cyxcbiAgICAgICAgICBjYWNoZUFnZTogZm9ybWF0QWdlKHNlYXJjaFN0YXRzLmluZGV4LmFnZSksXG4gICAgICAgICAgaXNWYWxpZDogc2VhcmNoU3RhdHMuaW5kZXguaXNWYWxpZCxcbiAgICAgICAgICB0dGxSZW1haW5pbmc6IHNlYXJjaFN0YXRzLmluZGV4LmlzVmFsaWQgPyBmb3JtYXRBZ2UoMTUgKiA2MCAqIDEwMDAgLSBzZWFyY2hTdGF0cy5pbmRleC5hZ2UpIDogJ0V4cGlyZWQnXG4gICAgICAgIH0sXG4gICAgICAgIG92ZXJhbGw6IHtcbiAgICAgICAgICByZWNvbW1lbmRhdGlvbjogKGNvbGxlY3Rpb25TdGF0cy5pc1ZhbGlkIHx8IHNlYXJjaFN0YXRzLmluZGV4LmlzVmFsaWQpXG4gICAgICAgICAgICA/ICdDYWNoZSBzeXN0ZW0gaXMgb3BlcmF0aW9uYWwgYW5kIHNlcnZpbmcgY29udGVudCBlZmZpY2llbnRseSdcbiAgICAgICAgICAgIDogJ0NhY2hlIHN5c3RlbSB3aWxsIHJlZnJlc2ggb24gbmV4dCBhY2Nlc3MgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2UnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfk4ogKipDb2xsZWN0aW9uIENhY2hlIEhlYWx0aCBDaGVjayoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGAjIyDwn5eE77iPIENvbGxlY3Rpb24gQ2FjaGUgKExlZ2FjeSlcXG5gICtcbiAgICAgICAgICAgICAgYCoqU3RhdHVzKio6ICR7aGVhbHRoUmVwb3J0LmNvbGxlY3Rpb24uc3RhdHVzID09PSAnaGVhbHRoeScgPyAn4pyFJyA6IGhlYWx0aFJlcG9ydC5jb2xsZWN0aW9uLnN0YXR1cyA9PT0gJ2V4cGlyZWQnID8gJ+KaoO+4jycgOiAn8J+Tpid9ICR7aGVhbHRoUmVwb3J0LmNvbGxlY3Rpb24uc3RhdHVzLnRvVXBwZXJDYXNlKCl9XFxuYCArXG4gICAgICAgICAgICAgIGAqKkl0ZW1zIENhY2hlZCoqOiAke2hlYWx0aFJlcG9ydC5jb2xsZWN0aW9uLml0ZW1Db3VudH1cXG5gICtcbiAgICAgICAgICAgICAgYCoqQ2FjaGUgQWdlKio6ICR7aGVhbHRoUmVwb3J0LmNvbGxlY3Rpb24uY2FjaGVBZ2V9XFxuYCArXG4gICAgICAgICAgICAgIGAqKkNhY2hlIFNpemUqKjogJHtoZWFsdGhSZXBvcnQuY29sbGVjdGlvbi5jYWNoZUZpbGVTaXplRm9ybWF0dGVkfVxcbmAgK1xuICAgICAgICAgICAgICBgKipUVEwgUmVtYWluaW5nKio6ICR7aGVhbHRoUmVwb3J0LmNvbGxlY3Rpb24udHRsUmVtYWluaW5nfVxcblxcbmAgK1xuICAgICAgICAgICAgICBgIyMg8J+agCBJbmRleCBDYWNoZSAoRW5oYW5jZWQgU2VhcmNoKVxcbmAgK1xuICAgICAgICAgICAgICBgKipTdGF0dXMqKjogJHtoZWFsdGhSZXBvcnQuaW5kZXguc3RhdHVzID09PSAnaGVhbHRoeScgPyAn4pyFJyA6IGhlYWx0aFJlcG9ydC5pbmRleC5zdGF0dXMgPT09ICdleHBpcmVkJyA/ICfimqDvuI8nIDogJ/Cfk6YnfSAke2hlYWx0aFJlcG9ydC5pbmRleC5zdGF0dXMudG9VcHBlckNhc2UoKX1cXG5gICtcbiAgICAgICAgICAgICAgYCoqRWxlbWVudHMgSW5kZXhlZCoqOiAke2hlYWx0aFJlcG9ydC5pbmRleC5lbGVtZW50c31cXG5gICtcbiAgICAgICAgICAgICAgYCoqQ2FjaGUgQWdlKio6ICR7aGVhbHRoUmVwb3J0LmluZGV4LmNhY2hlQWdlfVxcbmAgK1xuICAgICAgICAgICAgICBgKipUVEwgUmVtYWluaW5nKio6ICR7aGVhbHRoUmVwb3J0LmluZGV4LnR0bFJlbWFpbmluZ31cXG5cXG5gICtcbiAgICAgICAgICAgICAgYCoqT3ZlcmFsbCBTdGF0dXMqKjogJHtoZWFsdGhSZXBvcnQub3ZlcmFsbC5yZWNvbW1lbmRhdGlvbn1cXG5cXG5gICtcbiAgICAgICAgICAgICAgYFRoZSBlbmhhbmNlZCBpbmRleCBjYWNoZSBwcm92aWRlcyBmYXN0IHNlYXJjaCB3aXRoIHBhZ2luYXRpb24sIGZpbHRlcmluZywgYW5kIHNvcnRpbmcuIGAgK1xuICAgICAgICAgICAgICBgVGhlIGNvbGxlY3Rpb24gY2FjaGUgc2VydmVzIGFzIGEgZmFsbGJhY2sgZm9yIG9mZmxpbmUgYnJvd3NpbmcuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZ2V0IGNhY2hlIGhlYWx0aDogJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBGYWlsZWQgdG8gZ2V0IGNhY2hlIGhlYWx0aDogJHtlcnJvck1lc3NhZ2V9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBVc2VyIGlkZW50aXR5IG1hbmFnZW1lbnRcbiAgYXN5bmMgc2V0VXNlcklkZW50aXR5KHVzZXJuYW1lOiBzdHJpbmcsIGVtYWlsPzogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghdXNlcm5hbWUgfHwgdXNlcm5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBVc2VybmFtZSBjYW5ub3QgYmUgZW1wdHlgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBhbmQgc2FuaXRpemUgdXNlcm5hbWVcbiAgICAgIGNvbnN0IHZhbGlkYXRlZFVzZXJuYW1lID0gdmFsaWRhdGVVc2VybmFtZSh1c2VybmFtZSk7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGVtYWlsIGlmIHByb3ZpZGVkXG4gICAgICBsZXQgdmFsaWRhdGVkRW1haWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChlbWFpbCkge1xuICAgICAgICBjb25zdCBzYW5pdGl6ZWRFbWFpbCA9IHNhbml0aXplSW5wdXQoZW1haWwsIDEwMCk7XG4gICAgICAgIGlmICghVkFMSURBVElPTl9QQVRURVJOUy5TQUZFX0VNQUlMLnRlc3Qoc2FuaXRpemVkRW1haWwpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVtYWlsIGZvcm1hdCcpO1xuICAgICAgICB9XG4gICAgICAgIHZhbGlkYXRlZEVtYWlsID0gc2FuaXRpemVkRW1haWw7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0aGUgdmFsaWRhdGVkIHVzZXIgaWRlbnRpdHlcbiAgICAgIHRoaXMuY3VycmVudFVzZXIgPSB2YWxpZGF0ZWRVc2VybmFtZTtcbiAgICAgIGlmICh2YWxpZGF0ZWRFbWFpbCkge1xuICAgICAgICBwcm9jZXNzLmVudi5ET0xMSE9VU0VfRU1BSUwgPSB2YWxpZGF0ZWRFbWFpbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqVXNlciBJZGVudGl0eSBTZXQqKlxcblxcbmAgK1xuICAgICAgICAgICAgYPCfkaQgKipVc2VybmFtZToqKiAke3ZhbGlkYXRlZFVzZXJuYW1lfVxcbmAgK1xuICAgICAgICAgICAgYCR7dmFsaWRhdGVkRW1haWwgPyBg8J+TpyAqKkVtYWlsOioqICR7dmFsaWRhdGVkRW1haWx9XFxuYCA6ICcnfWAgK1xuICAgICAgICAgICAgYFxcbvCfjq8gKipOZXh0IFN0ZXBzOioqXFxuYCArXG4gICAgICAgICAgICBg4oCiIE5ldyBwZXJzb25hcyB5b3UgY3JlYXRlIHdpbGwgYmUgYXR0cmlidXRlZCB0byBcIiR7dmFsaWRhdGVkVXNlcm5hbWV9XCJcXG5gICtcbiAgICAgICAgICAgIGDigKIgU2V0IGVudmlyb25tZW50IHZhcmlhYmxlIFxcYERPTExIT1VTRV9VU0VSPSR7dmFsaWRhdGVkVXNlcm5hbWV9XFxgIHRvIHBlcnNpc3QgdGhpcyBzZXR0aW5nXFxuYCArXG4gICAgICAgICAgICBgJHt2YWxpZGF0ZWRFbWFpbCA/IGDigKIgU2V0IGVudmlyb25tZW50IHZhcmlhYmxlIFxcYERPTExIT1VTRV9FTUFJTD0ke3ZhbGlkYXRlZEVtYWlsfVxcYCBmb3IgY29udGFjdCBpbmZvXFxuYCA6ICcnfWAgK1xuICAgICAgICAgICAgYOKAoiBVc2UgXFxgY2xlYXJfdXNlcl9pZGVudGl0eVxcYCB0byByZXR1cm4gdG8gYW5vbnltb3VzIG1vZGVgLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipWYWxpZGF0aW9uIEVycm9yKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYCR7c2FuaXRpemVkLm1lc3NhZ2V9XFxuXFxuYCArXG4gICAgICAgICAgICAgIGBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIHVzZXJuYW1lIChhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgaHlwaGVucywgdW5kZXJzY29yZXMsIGRvdHMgb25seSkuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRVc2VySWRlbnRpdHkoKSB7XG4gICAgY29uc3QgZW1haWwgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfRU1BSUw7XG4gICAgXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRVc2VyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5GkICoqVXNlciBJZGVudGl0eTogQW5vbnltb3VzKipcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn5SSICoqU3RhdHVzOioqIEFub255bW91cyBtb2RlXFxuYCArXG4gICAgICAgICAgICBg8J+TnSAqKkF0dHJpYnV0aW9uOioqIFBlcnNvbmFzIHdpbGwgdXNlIGFub255bW91cyBJRHNcXG5cXG5gICtcbiAgICAgICAgICAgIGAqKlRvIHNldCB5b3VyIGlkZW50aXR5OioqXFxuYCArXG4gICAgICAgICAgICBg4oCiIFVzZTogXFxgc2V0X3VzZXJfaWRlbnRpdHkgXCJ5b3VyLXVzZXJuYW1lXCJcXGBcXG5gICtcbiAgICAgICAgICAgIGDigKIgT3Igc2V0IGVudmlyb25tZW50IHZhcmlhYmxlOiBcXGBET0xMSE9VU0VfVVNFUj15b3VyLXVzZXJuYW1lXFxgYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+RpCAqKlVzZXIgSWRlbnRpdHk6ICR7dGhpcy5jdXJyZW50VXNlcn0qKlxcblxcbmAgK1xuICAgICAgICAgIGDinIUgKipTdGF0dXM6KiogQXV0aGVudGljYXRlZFxcbmAgK1xuICAgICAgICAgIGDwn5GkICoqVXNlcm5hbWU6KiogJHt0aGlzLmN1cnJlbnRVc2VyfVxcbmAgK1xuICAgICAgICAgIGAke2VtYWlsID8gYPCfk6cgKipFbWFpbDoqKiAke2VtYWlsfVxcbmAgOiAnJ31gICtcbiAgICAgICAgICBg8J+TnSAqKkF0dHJpYnV0aW9uOioqIE5ldyBwZXJzb25hcyB3aWxsIGJlIGNyZWRpdGVkIHRvIFwiJHt0aGlzLmN1cnJlbnRVc2VyfVwiXFxuXFxuYCArXG4gICAgICAgICAgYCoqRW52aXJvbm1lbnQgVmFyaWFibGVzOioqXFxuYCArXG4gICAgICAgICAgYOKAoiBcXGBET0xMSE9VU0VfVVNFUj0ke3RoaXMuY3VycmVudFVzZXJ9XFxgXFxuYCArXG4gICAgICAgICAgYCR7ZW1haWwgPyBg4oCiIFxcYERPTExIT1VTRV9FTUFJTD0ke2VtYWlsfVxcYFxcbmAgOiAnJ31gICtcbiAgICAgICAgICBgXFxuKipNYW5hZ2VtZW50OioqXFxuYCArXG4gICAgICAgICAgYOKAoiBVc2UgXFxgY2xlYXJfdXNlcl9pZGVudGl0eVxcYCB0byByZXR1cm4gdG8gYW5vbnltb3VzIG1vZGVcXG5gICtcbiAgICAgICAgICBg4oCiIFVzZSBcXGBzZXRfdXNlcl9pZGVudGl0eSBcIm5ldy11c2VybmFtZVwiXFxgIHRvIGNoYW5nZSB1c2VybmFtZWAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBjbGVhclVzZXJJZGVudGl0eSgpIHtcbiAgICBjb25zdCB3YXNTZXQgPSB0aGlzLmN1cnJlbnRVc2VyICE9PSBudWxsO1xuICAgIGNvbnN0IHByZXZpb3VzVXNlciA9IHRoaXMuY3VycmVudFVzZXI7XG4gICAgdGhpcy5jdXJyZW50VXNlciA9IG51bGw7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogd2FzU2V0IFxuICAgICAgICAgICAgPyBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipVc2VyIElkZW50aXR5IENsZWFyZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBg8J+RpCAqKlByZXZpb3VzOioqICR7cHJldmlvdXNVc2VyfVxcbmAgK1xuICAgICAgICAgICAgICBg8J+UkiAqKkN1cnJlbnQ6KiogQW5vbnltb3VzIG1vZGVcXG5cXG5gICtcbiAgICAgICAgICAgICAgYPCfk50gKipFZmZlY3Q6KiogTmV3IHBlcnNvbmFzIHdpbGwgdXNlIGFub255bW91cyBJRHNcXG5cXG5gICtcbiAgICAgICAgICAgICAgYOKaoO+4jyAqKk5vdGU6KiogVGhpcyBvbmx5IGFmZmVjdHMgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cXG5gICtcbiAgICAgICAgICAgICAgYFRvIHBlcnNpc3QgdGhpcyBjaGFuZ2UsIHVuc2V0IHRoZSBcXGBET0xMSE9VU0VfVVNFUlxcYCBlbnZpcm9ubWVudCB2YXJpYWJsZS5gXG4gICAgICAgICAgICA6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKEue+4jyAqKkFscmVhZHkgaW4gQW5vbnltb3VzIE1vZGUqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBg8J+RpCBObyB1c2VyIGlkZW50aXR5IHdhcyBzZXQuXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBVc2UgXFxgc2V0X3VzZXJfaWRlbnRpdHkgXCJ1c2VybmFtZVwiXFxgIHRvIHNldCB5b3VyIGlkZW50aXR5LmAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VXNlciB8fCBnZW5lcmF0ZUFub255bW91c0lkKCk7XG4gIH1cblxuICAvLyBHaXRIdWIgYXV0aGVudGljYXRpb24gbWFuYWdlbWVudFxuICBhc3luYyBzZXR1cEdpdEh1YkF1dGgoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIGN1cnJlbnQgYXV0aCBzdGF0dXMgZmlyc3RcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGF0dXMgPSBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmdldEF1dGhTdGF0dXMoKTtcbiAgICAgIFxuICAgICAgaWYgKGN1cnJlbnRTdGF0dXMuaXNBdXRoZW50aWNhdGVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqQWxyZWFkeSBDb25uZWN0ZWQgdG8gR2l0SHViKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDwn5GkICoqVXNlcm5hbWU6KiogJHtjdXJyZW50U3RhdHVzLnVzZXJuYW1lfVxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCflJEgKipQZXJtaXNzaW9uczoqKiAke2N1cnJlbnRTdGF0dXMuc2NvcGVzPy5qb2luKCcsICcpIHx8ICdiYXNpYyBhY2Nlc3MnfVxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFlvdSdyZSBhbGwgc2V0ISBZb3UgY2FuOlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBCcm93c2UgdGhlIGNvbGxlY3Rpb25cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgSW5zdGFsbCBjb250ZW50XFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIFN1Ym1pdCB5b3VyIGNyZWF0aW9uc1xcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFRvIGRpc2Nvbm5lY3QsIHNheSBcImRpc2Nvbm5lY3QgZnJvbSBHaXRIdWJcImBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBJbml0aWF0ZSBkZXZpY2UgZmxvd1xuICAgICAgbGV0IGRldmljZVJlc3BvbnNlOiBEZXZpY2VDb2RlUmVzcG9uc2U7XG4gICAgICB0cnkge1xuICAgICAgICBkZXZpY2VSZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIuaW5pdGlhdGVEZXZpY2VGbG93KCk7XG4gICAgICB9IGNhdGNoIChkZXZpY2VGbG93RXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdPQVVUSF9JTkRFWF8yNjgxOiBGYWlsZWQgdG8gaW5pdGlhdGUgZGV2aWNlIGZsb3cnLCB7IGVycm9yOiBkZXZpY2VGbG93RXJyb3IgfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgT0FVVEhfSU5ERVhfMjY4MTogRGV2aWNlIGZsb3cgaW5pdGlhdGlvbiBmYWlsZWQgLSAke2RldmljZUZsb3dFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZGV2aWNlRmxvd0Vycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogVXNlIGhlbHBlciBwcm9jZXNzIGFwcHJvYWNoIGZyb20gUFIgIzUxOFxuICAgICAgLy8gTUNQIHNlcnZlcnMgYXJlIHN0YXRlbGVzcyBhbmQgdGVybWluYXRlIGFmdGVyIHJldHVybmluZyByZXNwb25zZVxuICAgICAgLy8gVGhlIGhlbHBlciBwcm9jZXNzIHN1cnZpdmVzIE1DUCB0ZXJtaW5hdGlvbiBhbmQgY2FuIGNvbXBsZXRlIE9BdXRoIHBvbGxpbmdcbiAgICAgIFxuICAgICAgLy8gR2V0IHRoZSBPQXV0aCBjbGllbnQgSUQgLSB1c2UgdGhlIHNhbWUgbWV0aG9kIHRoYXQgaGFzIHRoZSBkZWZhdWx0IGZhbGxiYWNrXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgd2UgZ2V0IHRoZSBkZWZhdWx0IGNsaWVudCBJRCBpZiBubyBlbnYvY29uZmlnIGlzIHNldFxuICAgICAgbG9nZ2VyLmRlYnVnKCdPQVVUSF9TVEVQXzQ6IEdldHRpbmcgY2xpZW50IElEIGZvciBoZWxwZXIgcHJvY2VzcycpO1xuICAgICAgY29uc3QgY2xpZW50SWQgPSBhd2FpdCBHaXRIdWJBdXRoTWFuYWdlci5nZXRDbGllbnRJZCgpO1xuICAgICAgbG9nZ2VyLmRlYnVnKCdPQVVUSF9TVEVQXzU6IENsaWVudCBJRCBvYnRhaW5lZCcsIHsgY2xpZW50SWQ6IGNsaWVudElkPy5zdWJzdHJpbmcoMCwgOCkgKyAnLi4uJyB9KTtcbiAgICAgIFxuICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIG5vdyBzaW5jZSBnZXRDbGllbnRJZCgpIGFsd2F5cyByZXR1cm5zIGEgdmFsdWVcbiAgICAgIC8vIChlbnYsIGNvbmZpZywgb3IgZGVmYXVsdCksIGJ1dCBrZWVwaW5nIGZvciBzYWZldHlcbiAgICAgIGlmICghY2xpZW50SWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipHaXRIdWIgT0F1dGggQ29uZmlndXJhdGlvbiBFcnJvcioqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgVW5hYmxlIHRvIG9idGFpbiBHaXRIdWIgT0F1dGggY2xpZW50IElELlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFRoaXMgaXMgdW5leHBlY3RlZCAtIHBsZWFzZSByZXBvcnQgdGhpcyBpc3N1ZS5cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAqKldvcmthcm91bmQ6KipcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgU2V0IGVudmlyb25tZW50IHZhcmlhYmxlOiBET0xMSE9VU0VfR0lUSFVCX0NMSUVOVF9JRFxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBPciB1c2UgR2l0SHViIENMSTogZ2ggYXV0aCBsb2dpbiAtLXdlYmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTcGF3biB0aGUgT0F1dGggaGVscGVyIHByb2Nlc3NcbiAgICAgIC8vIFRoZSBoZWxwZXIgcnVucyBpbmRlcGVuZGVudGx5IGFuZCBzdXJ2aXZlcyBNQ1Agc2VydmVyIHRlcm1pbmF0aW9uXG4gICAgICBsZXQgaGVscGVyUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBHZXQgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgY29tcGlsZWQgSlMgZmlsZSBpc1xuICAgICAgICBjb25zdCBfX2ZpbGVuYW1lID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpO1xuICAgICAgICBjb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoX19maWxlbmFtZSk7XG4gICAgICAgIFxuICAgICAgICAvLyBGaW5kIHRoZSBvYXV0aC1oZWxwZXIubWpzIGZpbGVcbiAgICAgICAgLy8gSXQgc2hvdWxkIGJlIGluIHRoZSByb290IGRpcmVjdG9yeSAob25lIGxldmVsIHVwIGZyb20gZGlzdC8pXG4gICAgICAgIGNvbnN0IHBvc3NpYmxlUGF0aHMgPSBbXG4gICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ29hdXRoLWhlbHBlci5tanMnKSwgIC8vIEZyb20gZGlzdC9pbmRleC5qc1xuICAgICAgICAgIHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnb2F1dGgtaGVscGVyLm1qcycpLCAgICAvLyBGcm9tIENXRFxuICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICdvYXV0aC1oZWxwZXIubWpzJyksICAgICAgICAvLyBTYW1lIGRpcmVjdG9yeVxuICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICdvYXV0aC1oZWxwZXIubWpzJykgLy8gTlBNIHBhY2thZ2Ugcm9vdFxuICAgICAgICBdO1xuICAgICAgICBcbiAgICAgICAgaGVscGVyUGF0aCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgdGVzdFBhdGggb2YgcG9zc2libGVQYXRocykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBmcy5hY2Nlc3ModGVzdFBhdGgpO1xuICAgICAgICAgICAgaGVscGVyUGF0aCA9IHRlc3RQYXRoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBUcnkgbmV4dCBwYXRoXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoIWhlbHBlclBhdGgpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ09BVVRIX0lOREVYXzI3MzQ6IG9hdXRoLWhlbHBlci5tanMgbm90IGZvdW5kJywgeyBcbiAgICAgICAgICAgIHNlYXJjaGVkUGF0aHM6IHBvc3NpYmxlUGF0aHMsXG4gICAgICAgICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICAgICAgICBkaXJuYW1lOiBfX2Rpcm5hbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9BVVRIX0hFTFBFUl9OT1RfRk9VTkQ6IG9hdXRoLWhlbHBlci5tanMgbm90IGZvdW5kIGF0IGxpbmUgMjczNC4gU2VhcmNoZWQ6ICR7cG9zc2libGVQYXRocy5qb2luKCcsICcpfWApO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBsb2dnZXIuZGVidWcoJ09BVVRIX1NURVBfNjogU3Bhd25pbmcgaGVscGVyIHByb2Nlc3MnLCB7IFxuICAgICAgICAgIGhlbHBlclBhdGgsXG4gICAgICAgICAgY2xpZW50SWQ6IGNsaWVudElkPy5zdWJzdHJpbmcoMCwgOCkgKyAnLi4uJyxcbiAgICAgICAgICBkZXZpY2VDb2RlOiBkZXZpY2VSZXNwb25zZS5kZXZpY2VfY29kZS5zdWJzdHJpbmcoMCwgOCkgKyAnLi4uJ1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIFNwYXduIHRoZSBoZWxwZXIgYXMgYSBkZXRhY2hlZCBwcm9jZXNzXG4gICAgICAgIGNvbnN0IGhlbHBlciA9IHNwYXduKCdub2RlJywgW1xuICAgICAgICAgIGhlbHBlclBhdGgsXG4gICAgICAgICAgZGV2aWNlUmVzcG9uc2UuZGV2aWNlX2NvZGUsXG4gICAgICAgICAgKGRldmljZVJlc3BvbnNlLmludGVydmFsIHx8IDUpLnRvU3RyaW5nKCksXG4gICAgICAgICAgZGV2aWNlUmVzcG9uc2UuZXhwaXJlc19pbi50b1N0cmluZygpLFxuICAgICAgICAgIGNsaWVudElkXG4gICAgICAgIF0sIHtcbiAgICAgICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgICAgICBzdGRpbzogJ2lnbm9yZScsIC8vIENvbXBsZXRlbHkgZGV0YWNoIEkvT1xuICAgICAgICAgIHdpbmRvd3NIaWRlOiB0cnVlIC8vIEhpZGUgY29uc29sZSBvbiBXaW5kb3dzXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gQWxsb3cgdGhlIHBhcmVudCBwcm9jZXNzIHRvIGV4aXQgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgaGVscGVyXG4gICAgICAgIGhlbHBlci51bnJlZigpO1xuICAgICAgICBcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdPQVVUSF9TVEVQXzc6IEhlbHBlciBwcm9jZXNzIHNwYXduZWQgc3VjY2Vzc2Z1bGx5JywgeyBwaWQ6IGhlbHBlci5waWQgfSk7XG4gICAgICAgIFxuICAgICAgICBsb2dnZXIuaW5mbygnT0F1dGggaGVscGVyIHByb2Nlc3Mgc3Bhd25lZCcsIHtcbiAgICAgICAgICBwaWQ6IGhlbHBlci5waWQsXG4gICAgICAgICAgZXhwaXJlc0luOiBkZXZpY2VSZXNwb25zZS5leHBpcmVzX2luLFxuICAgICAgICAgIHVzZXJDb2RlOiBkZXZpY2VSZXNwb25zZS51c2VyX2NvZGVcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBXcml0ZSBzdGF0ZSBmaWxlIGZvciBtb25pdG9yaW5nXG4gICAgICAgIGNvbnN0IHN0YXRlRmlsZSA9IHBhdGguam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJy5hdXRoJywgJ29hdXRoLWhlbHBlci1zdGF0ZS5qc29uJyk7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gcGF0aC5kaXJuYW1lKHN0YXRlRmlsZSk7XG4gICAgICAgIGF3YWl0IGZzLm1rZGlyKHN0YXRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgICAgIHBpZDogaGVscGVyLnBpZCxcbiAgICAgICAgICBkZXZpY2VDb2RlOiBkZXZpY2VSZXNwb25zZS5kZXZpY2VfY29kZSxcbiAgICAgICAgICB1c2VyQ29kZTogZGV2aWNlUmVzcG9uc2UudXNlcl9jb2RlLFxuICAgICAgICAgIHN0YXJ0VGltZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIGV4cGlyZXNBdDogbmV3IERhdGUoRGF0ZS5ub3coKSArIGRldmljZVJlc3BvbnNlLmV4cGlyZXNfaW4gKiAxMDAwKS50b0lTT1N0cmluZygpXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBhd2FpdCBmcy53cml0ZUZpbGUoc3RhdGVGaWxlLCBKU09OLnN0cmluZ2lmeShzdGF0ZSwgbnVsbCwgMikpO1xuICAgICAgICBcbiAgICAgIH0gY2F0Y2ggKHNwYXduRXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdPQVVUSF9JTkRFWF8yNzc0OiBGYWlsZWQgdG8gc3Bhd24gT0F1dGggaGVscGVyIHByb2Nlc3MnLCB7IFxuICAgICAgICAgIGVycm9yOiBzcGF3bkVycm9yLFxuICAgICAgICAgIGhlbHBlclBhdGgsXG4gICAgICAgICAgY2xpZW50SWQ6IGNsaWVudElkPy5zdWJzdHJpbmcoMCwgOCkgKyAnLi4uJyxcbiAgICAgICAgICBlcnJvckNvZGU6IChzcGF3bkVycm9yIGFzIGFueSk/LmNvZGUsXG4gICAgICAgICAgc3lzY2FsbDogKHNwYXduRXJyb3IgYXMgYW55KT8uc3lzY2FsbFxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIFByb3ZpZGUgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZSBiYXNlZCBvbiBlcnJvciB0eXBlXG4gICAgICAgIGxldCBlcnJvckRldGFpbCA9ICcnO1xuICAgICAgICBpZiAoc3Bhd25FcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgaWYgKHNwYXduRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnRU5PRU5UJykpIHtcbiAgICAgICAgICAgIGVycm9yRGV0YWlsID0gYE9BVVRIX0hFTFBFUl9TUEFXTl9FTk9FTlQ6IE5vZGUuanMgZXhlY3V0YWJsZSBub3QgZm91bmQgb3IgaGVscGVyIHNjcmlwdCBtaXNzaW5nIGF0ICR7aGVscGVyUGF0aH1gO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3Bhd25FcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdFQUNDRVMnKSkge1xuICAgICAgICAgICAgZXJyb3JEZXRhaWwgPSBgT0FVVEhfSEVMUEVSX1NQQVdOX0VBQ0NFUzogUGVybWlzc2lvbiBkZW5pZWQgd2hlbiB0cnlpbmcgdG8gZXhlY3V0ZSAke2hlbHBlclBhdGh9YDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNwYXduRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnRTJCSUcnKSkge1xuICAgICAgICAgICAgZXJyb3JEZXRhaWwgPSBgT0FVVEhfSEVMUEVSX1NQQVdOX0UyQklHOiBBcmd1bWVudCBsaXN0IHRvbyBsb25nIGZvciBoZWxwZXIgcHJvY2Vzc2A7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9yRGV0YWlsID0gYE9BVVRIX0hFTFBFUl9TUEFXTl9GQUlMRUQ6IENvdWxkIG5vdCBzdGFydCBiYWNrZ3JvdW5kIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MgYXQgbGluZSAyNzc0IC0gJHtzcGF3bkVycm9yLm1lc3NhZ2V9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3JEZXRhaWwgPSBgT0FVVEhfSEVMUEVSX1NQQVdOX1VOS05PV046IFVua25vd24gc3Bhd24gZXJyb3IgYXQgbGluZSAyNzc0YDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIGluZm9ybWluZyB1c2VyIGFib3V0IHRoZSBpc3N1ZVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKaoO+4jyAqKk9BdXRoIEhlbHBlciBMYXVuY2ggRmFpbGVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAke2Vycm9yRGV0YWlsfVxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCoqQWx0ZXJuYXRpdmUgT3B0aW9uczoqKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDEuIFRyeSBhZ2FpbjogUnVuIHNldHVwX2dpdGh1Yl9hdXRoIGFnYWluXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMi4gVXNlIEdpdEh1YiBDTEk6IGdoIGF1dGggbG9naW4gLS13ZWJcXG5gICtcbiAgICAgICAgICAgICAgICAgIGAzLiBTZXQgdG9rZW4gbWFudWFsbHk6IGV4cG9ydCBHSVRIVUJfVE9LRU49eW91cl90b2tlbmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBSZXR1cm4gaW5zdHJ1Y3Rpb25zIHRvIHVzZXJcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogdGhpcy5naXRodWJBdXRoTWFuYWdlci5mb3JtYXRBdXRoSW5zdHJ1Y3Rpb25zKGRldmljZVJlc3BvbnNlKSArXG4gICAgICAgICAgICAgICAgJ1xcblxcbvCfk50gKipOb3RlKio6IEF1dGhlbnRpY2F0aW9uIHdpbGwgY29tcGxldGUgYXV0b21hdGljYWxseSBvbmNlIHlvdSBhdXRob3JpemUuICcgK1xuICAgICAgICAgICAgICAgICdZb3VyIHRva2VuIHdpbGwgYmUgc3RvcmVkIHNlY3VyZWx5IGZvciBmdXR1cmUgdXNlISdcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignT0FVVEhfSU5ERVhfMjgwNjogTWFpbiBjYXRjaCBibG9jayAtIGF1dGhlbnRpY2F0aW9uIHNldHVwIGZhaWxlZCcsIHsgXG4gICAgICAgIGVycm9yLFxuICAgICAgICBlcnJvclR5cGU6IGVycm9yPy5jb25zdHJ1Y3Rvcj8ubmFtZSxcbiAgICAgICAgZXJyb3JNZXNzYWdlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duJ1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIElmIGVycm9yIGFscmVhZHkgaGFzIG91ciBlcnJvciBjb2RlLCBwYXNzIGl0IHRocm91Z2hcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuICAgICAgY29uc3QgaGFzRXJyb3JDb2RlID0gZXJyb3JNZXNzYWdlLmluY2x1ZGVzKCdPQVVUSF8nKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipBdXRoZW50aWNhdGlvbiBTZXR1cCBGYWlsZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGAke2hhc0Vycm9yQ29kZSA/IGVycm9yTWVzc2FnZSA6IGBPQVVUSF9JTkRFWF8yODA2OiBVbmFibGUgdG8gc3RhcnQgR2l0SHViIGF1dGhlbnRpY2F0aW9uIC0gJHtlcnJvck1lc3NhZ2V9YH1cXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgJHshZXJyb3JNZXNzYWdlLmluY2x1ZGVzKCdPQVVUSF9ORVRXT1JLJykgPyAnUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiBhbmQgdHJ5IGFnYWluLicgOiAnJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgY2hlY2tHaXRIdWJBdXRoKCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBGaXJzdCBjaGVjayBmb3IgT0F1dGggaGVscGVyIHByb2Nlc3MgaGVhbHRoXG4gICAgICBjb25zdCBoZWxwZXJIZWFsdGggPSBhd2FpdCB0aGlzLmNoZWNrT0F1dGhIZWxwZXJIZWFsdGgoKTtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIuZ2V0QXV0aFN0YXR1cygpO1xuICAgICAgXG4gICAgICBpZiAoc3RhdHVzLmlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICAvLyBDbGVhbiB1cCBoZWxwZXIgc3RhdGUgZmlsZSBpZiBhdXRoIGlzIHN1Y2Nlc3NmdWxcbiAgICAgICAgaWYgKGhlbHBlckhlYWx0aC5leGlzdHMpIHtcbiAgICAgICAgICBjb25zdCBzdGF0ZUZpbGUgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICcuYXV0aCcsICdvYXV0aC1oZWxwZXItc3RhdGUuanNvbicpO1xuICAgICAgICAgIGF3YWl0IGZzLnVubGluayhzdGF0ZUZpbGUpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipHaXRIdWIgQ29ubmVjdGVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDwn5GkICoqVXNlcm5hbWU6KiogJHtzdGF0dXMudXNlcm5hbWV9XFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+UkSAqKlBlcm1pc3Npb25zOioqICR7c3RhdHVzLnNjb3Blcz8uam9pbignLCAnKSB8fCAnYmFzaWMgYWNjZXNzJ31cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAqKkF2YWlsYWJsZSBBY3Rpb25zOioqXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4pyFIEJyb3dzZSBjb2xsZWN0aW9uXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4pyFIEluc3RhbGwgY29udGVudFxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKchSBTdWJtaXQgY29udGVudFxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYEV2ZXJ5dGhpbmcgaXMgd29ya2luZyBwcm9wZXJseSFgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoaGVscGVySGVhbHRoLmlzQWN0aXZlKSB7XG4gICAgICAgIC8vIE9BdXRoIGhlbHBlciBpcyBhY3RpdmVseSBwb2xsaW5nXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94o+zICoqR2l0SHViIEF1dGhlbnRpY2F0aW9uIEluIFByb2dyZXNzKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDwn5SRICoqVXNlciBDb2RlOioqICR7aGVscGVySGVhbHRoLnVzZXJDb2RlfVxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKPse+4jyAqKlRpbWUgUmVtYWluaW5nOioqICR7TWF0aC5mbG9vcihoZWxwZXJIZWFsdGgudGltZVJlbWFpbmluZyAvIDYwKX1tICR7aGVscGVySGVhbHRoLnRpbWVSZW1haW5pbmcgJSA2MH1zXFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+UhCAqKlByb2Nlc3MgU3RhdHVzOioqICR7aGVscGVySGVhbHRoLnByb2Nlc3NBbGl2ZSA/ICfinIUgUnVubmluZycgOiAn4pqg77iPIE1heSBoYXZlIHN0b3BwZWQnfVxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCfk4EgKipMb2cgQXZhaWxhYmxlOioqICR7aGVscGVySGVhbHRoLmhhc0xvZyA/ICdZZXMnIDogJ05vJ31cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAqKldhaXRpbmcgZm9yIHlvdSB0bzoqKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDEuIEdvIHRvOiBodHRwczovL2dpdGh1Yi5jb20vbG9naW4vZGV2aWNlXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMi4gRW50ZXIgY29kZTogKioke2hlbHBlckhlYWx0aC51c2VyQ29kZX0qKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDMuIEF1dGhvcml6ZSB0aGUgYXBwbGljYXRpb25cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBUaGUgYXV0aGVudGljYXRpb24gd2lsbCBjb21wbGV0ZSBhdXRvbWF0aWNhbGx5IG9uY2UgeW91IGF1dGhvcml6ZS5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBSdW4gdGhpcyBjb21tYW5kIGFnYWluIHRvIGNoZWNrIHN0YXR1cy5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoaGVscGVySGVhbHRoLmV4aXN0cyAmJiBoZWxwZXJIZWFsdGguZXhwaXJlZCkge1xuICAgICAgICAvLyBIZWxwZXIgc3RhdGUgZXhpc3RzIGJ1dCBleHBpcmVkXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94o+x77iPICoqQXV0aGVudGljYXRpb24gRXhwaXJlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgVGhlIEdpdEh1YiBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGhhcyBleHBpcmVkLlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFVzZXIgY29kZTogJHtoZWxwZXJIZWFsdGgudXNlckNvZGV9IChleHBpcmVkKVxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCoqVG8gdHJ5IGFnYWluOioqXFxuYCArXG4gICAgICAgICAgICAgICAgICBgUnVuOiBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCB0byBnZXQgYSBuZXcgY29kZVxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCR7aGVscGVySGVhbHRoLmVycm9yTG9nID8gYCoqRXJyb3IgTG9nOioqXFxuXFxgXFxgXFxgXFxuJHtoZWxwZXJIZWFsdGguZXJyb3JMb2d9XFxuXFxgXFxgXFxgXFxuYCA6ICcnfWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChzdGF0dXMuaGFzVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3imqDvuI8gKipHaXRIdWIgVG9rZW4gSW52YWxpZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgQSBHaXRIdWIgdG9rZW4gd2FzIGZvdW5kIGJ1dCBpdCBhcHBlYXJzIHRvIGJlIGludmFsaWQgb3IgZXhwaXJlZC5cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAqKlRvIGZpeCB0aGlzOioqXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMS4gU2F5IFwic2V0IHVwIEdpdEh1YlwiIHRvIGF1dGhlbnRpY2F0ZSBhZ2FpblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDIuIE9yIGNoZWNrIHlvdXIgR0lUSFVCX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgTm90ZTogQnJvd3NlIGFuZCBpbnN0YWxsIHN0aWxsIHdvcmsgd2l0aG91dCBhdXRoZW50aWNhdGlvbiFgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+UkiAqKk5vdCBDb25uZWN0ZWQgdG8gR2l0SHViKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBZb3UncmUgbm90IGN1cnJlbnRseSBhdXRoZW50aWNhdGVkIHdpdGggR2l0SHViLlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCoqV2hhdCB3b3JrcyB3aXRob3V0IGF1dGg6KipcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDinIUgQnJvd3NlIHRoZSBwdWJsaWMgY29sbGVjdGlvblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKchSBJbnN0YWxsIGNvbW11bml0eSBjb250ZW50XFxuYCArXG4gICAgICAgICAgICAgICAgICBg4p2MIFN1Ym1pdCB5b3VyIG93biBjb250ZW50IChyZXF1aXJlcyBhdXRoKVxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFRvIGNvbm5lY3QsIGp1c3Qgc2F5IFwic2V0IHVwIEdpdEh1YlwiIG9yIFwiY29ubmVjdCB0byBHaXRIdWJcImBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjaGVjayBHaXRIdWIgYXV0aCcsIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKlVuYWJsZSB0byBDaGVjayBBdXRoZW50aWNhdGlvbioqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICAvLyBQdWJsaWMgbWV0aG9kIGZvciBvYXV0aF9oZWxwZXJfc3RhdHVzIHRvb2xcbiAgYXN5bmMgZ2V0T0F1dGhIZWxwZXJTdGF0dXModmVyYm9zZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGhlYWx0aCA9IGF3YWl0IHRoaXMuY2hlY2tPQXV0aEhlbHBlckhlYWx0aCgpO1xuICAgICAgY29uc3Qgc3RhdGVGaWxlID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnLmF1dGgnLCAnb2F1dGgtaGVscGVyLXN0YXRlLmpzb24nKTtcbiAgICAgIGNvbnN0IGxvZ0ZpbGUgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdvYXV0aC1oZWxwZXIubG9nJyk7XG4gICAgICBjb25zdCBwaWRGaWxlID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnLmF1dGgnLCAnb2F1dGgtaGVscGVyLnBpZCcpO1xuICAgICAgXG4gICAgICBsZXQgc3RhdHVzVGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfk4ogKipPQXV0aCBIZWxwZXIgUHJvY2VzcyBEaWFnbm9zdGljcyoqXFxuXFxuYDtcbiAgICAgIFxuICAgICAgLy8gQmFzaWMgc3RhdHVzXG4gICAgICBpZiAoIWhlYWx0aC5leGlzdHMpIHtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipTdGF0dXM6KiogTm8gT0F1dGggcHJvY2VzcyBkZXRlY3RlZFxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqU3RhdGUgRmlsZToqKiBOb3QgZm91bmRcXG5cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGBObyBhY3RpdmUgYXV0aGVudGljYXRpb24gcHJvY2Vzcy4gUnVuIFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIHRvIHN0YXJ0IG9uZS5cXG5gO1xuICAgICAgfSBlbHNlIGlmIChoZWFsdGguaXNBY3RpdmUpIHtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipTdGF0dXM6Kiog8J+foiBBQ1RJVkUgLSBBdXRoZW50aWNhdGlvbiBpbiBwcm9ncmVzc1xcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqVXNlciBDb2RlOioqICR7aGVhbHRoLnVzZXJDb2RlfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqUHJvY2VzcyBJRDoqKiAke2hlYWx0aC5waWR9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipQcm9jZXNzIEFsaXZlOioqICR7aGVhbHRoLnByb2Nlc3NBbGl2ZSA/ICfinIUgWWVzJyA6ICfinYwgTm8gKG1heSBoYXZlIGNyYXNoZWQpJ31cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlN0YXJ0ZWQ6KiogJHtoZWFsdGguc3RhcnRUaW1lPy50b0xvY2FsZVN0cmluZygpfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqRXhwaXJlczoqKiAke2hlYWx0aC5leHBpcmVzQXQ/LnRvTG9jYWxlU3RyaW5nKCl9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipUaW1lIFJlbWFpbmluZzoqKiAke01hdGguZmxvb3IoaGVhbHRoLnRpbWVSZW1haW5pbmcgLyA2MCl9bSAke2hlYWx0aC50aW1lUmVtYWluaW5nICUgNjB9c1xcblxcbmA7XG4gICAgICAgIFxuICAgICAgICBpZiAoIWhlYWx0aC5wcm9jZXNzQWxpdmUpIHtcbiAgICAgICAgICBzdGF0dXNUZXh0ICs9IGDimqDvuI8gKipXQVJOSU5HOioqIFByb2Nlc3MgYXBwZWFycyB0byBoYXZlIHN0b3BwZWQhXFxuYDtcbiAgICAgICAgICBzdGF0dXNUZXh0ICs9IGBUaGUgaGVscGVyIHByb2Nlc3MgKFBJRCAke2hlYWx0aC5waWR9KSBpcyBub3QgcmVzcG9uZGluZy5cXG5gO1xuICAgICAgICAgIHN0YXR1c1RleHQgKz0gYFlvdSBtYXkgbmVlZCB0byBydW4gXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgYWdhaW4uXFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChoZWFsdGguZXhwaXJlZCkge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlN0YXR1czoqKiDwn5S0IEVYUElSRURcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlVzZXIgQ29kZToqKiAke2hlYWx0aC51c2VyQ29kZX0gKGV4cGlyZWQpXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipQcm9jZXNzIElEOioqICR7aGVhbHRoLnBpZH1cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlN0YXJ0ZWQ6KiogJHtoZWFsdGguc3RhcnRUaW1lPy50b0xvY2FsZVN0cmluZygpfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqRXhwaXJlZDoqKiAke2hlYWx0aC5leHBpcmVzQXQ/LnRvTG9jYWxlU3RyaW5nKCl9XFxuXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgVGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgaGFzIGV4cGlyZWQuIFJ1biBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCB0byB0cnkgYWdhaW4uXFxuXFxuYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRmlsZSBsb2NhdGlvbnNcbiAgICAgIHN0YXR1c1RleHQgKz0gYCoq8J+TgSBGaWxlIExvY2F0aW9uczoqKlxcbmA7XG4gICAgICBzdGF0dXNUZXh0ICs9IGDigKIgU3RhdGU6ICR7c3RhdGVGaWxlfVxcbmA7XG4gICAgICBzdGF0dXNUZXh0ICs9IGDigKIgTG9nOiAke2xvZ0ZpbGV9ICR7aGVhbHRoLmhhc0xvZyA/ICcoZXhpc3RzKScgOiAnKG5vdCBmb3VuZCknfVxcbmA7XG4gICAgICBzdGF0dXNUZXh0ICs9IGDigKIgUElEOiAke3BpZEZpbGV9XFxuXFxuYDtcbiAgICAgIFxuICAgICAgLy8gRXJyb3IgbG9nIGlmIGF2YWlsYWJsZVxuICAgICAgaWYgKGhlYWx0aC5lcnJvckxvZykge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKuKaoO+4jyBSZWNlbnQgRXJyb3JzOioqXFxuXFxgXFxgXFxgXFxuJHtoZWFsdGguZXJyb3JMb2d9XFxuXFxgXFxgXFxgXFxuXFxuYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVmVyYm9zZSBsb2cgb3V0cHV0XG4gICAgICBpZiAodmVyYm9zZSAmJiBoZWFsdGguaGFzTG9nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZnVsbExvZyA9IGF3YWl0IGZzLnJlYWRGaWxlKGxvZ0ZpbGUsICd1dGYtOCcpO1xuICAgICAgICAgIGNvbnN0IGxpbmVzID0gZnVsbExvZy5zcGxpdCgnXFxuJykuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkpO1xuICAgICAgICAgIGNvbnN0IHJlY2VudExpbmVzID0gbGluZXMuc2xpY2UoLTIwKTsgLy8gTGFzdCAyMCBsaW5lc1xuICAgICAgICAgIFxuICAgICAgICAgIHN0YXR1c1RleHQgKz0gYCoq8J+TnCBSZWNlbnQgTG9nIE91dHB1dCAobGFzdCAyMCBsaW5lcyk6KipcXG5cXGBcXGBcXGBcXG5gO1xuICAgICAgICAgIHN0YXR1c1RleHQgKz0gcmVjZW50TGluZXMuam9pbignXFxuJyk7XG4gICAgICAgICAgc3RhdHVzVGV4dCArPSBgXFxuXFxgXFxgXFxgXFxuXFxuYDtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKvCfk5wgTG9nOioqIFVuYWJsZSB0byByZWFkIGxvZyBmaWxlXFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBUcm91Ymxlc2hvb3RpbmcgdGlwc1xuICAgICAgaWYgKGhlYWx0aC5leGlzdHMgJiYgIWhlYWx0aC5wcm9jZXNzQWxpdmUgJiYgIWhlYWx0aC5leHBpcmVkKSB7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoq8J+UpyBUcm91Ymxlc2hvb3RpbmcgVGlwczoqKlxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYDEuIFRoZSBoZWxwZXIgcHJvY2VzcyBtYXkgaGF2ZSBjcmFzaGVkXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgMi4gQ2hlY2sgdGhlIGxvZyBmaWxlIGZvciBlcnJvcnM6ICR7bG9nRmlsZX1cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAzLiBUcnkgcnVubmluZyBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCBhZ2FpblxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYDQuIEVuc3VyZSBET0xMSE9VU0VfR0lUSFVCX0NMSUVOVF9JRCBpcyBzZXRcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGA1LiBDaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb25cXG5gO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBNYW51YWwgY2xlYW51cCBpbnN0cnVjdGlvbnNcbiAgICAgIGlmIChoZWFsdGguZXhpc3RzICYmIChoZWFsdGguZXhwaXJlZCB8fCAhaGVhbHRoLnByb2Nlc3NBbGl2ZSkpIHtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgXFxuKirwn6e5IE1hbnVhbCBDbGVhbnVwIChpZiBuZWVkZWQpOioqXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgXFxgXFxgXFxgYmFzaFxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYHJtIFwiJHtzdGF0ZUZpbGV9XCJcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGBybSBcIiR7bG9nRmlsZX1cIlxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYHJtIFwiJHtwaWRGaWxlfVwiXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgXFxgXFxgXFxgXFxuYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBzdGF0dXNUZXh0XG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGdldCBPQXV0aCBoZWxwZXIgc3RhdHVzJywgeyBlcnJvciB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqRmFpbGVkIHRvIEdldCBPQXV0aCBIZWxwZXIgU3RhdHVzKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gY2hlY2sgT0F1dGggaGVscGVyIHByb2Nlc3MgaGVhbHRoXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tPQXV0aEhlbHBlckhlYWx0aCgpIHtcbiAgICBjb25zdCBzdGF0ZUZpbGUgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICcuYXV0aCcsICdvYXV0aC1oZWxwZXItc3RhdGUuanNvbicpO1xuICAgIGNvbnN0IGxvZ0ZpbGUgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdvYXV0aC1oZWxwZXIubG9nJyk7XG4gICAgXG4gICAgY29uc3QgaGVhbHRoID0ge1xuICAgICAgZXhpc3RzOiBmYWxzZSxcbiAgICAgIGlzQWN0aXZlOiBmYWxzZSxcbiAgICAgIGV4cGlyZWQ6IGZhbHNlLFxuICAgICAgcHJvY2Vzc0FsaXZlOiBmYWxzZSxcbiAgICAgIGhhc0xvZzogZmFsc2UsXG4gICAgICB1c2VyQ29kZTogJycsXG4gICAgICB0aW1lUmVtYWluaW5nOiAwLFxuICAgICAgcGlkOiAwLFxuICAgICAgc3RhcnRUaW1lOiBudWxsIGFzIERhdGUgfCBudWxsLFxuICAgICAgZXhwaXJlc0F0OiBudWxsIGFzIERhdGUgfCBudWxsLFxuICAgICAgZXJyb3JMb2c6ICcnXG4gICAgfTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgaWYgc3RhdGUgZmlsZSBleGlzdHNcbiAgICAgIGNvbnN0IHN0YXRlRGF0YSA9IGF3YWl0IGZzLnJlYWRGaWxlKHN0YXRlRmlsZSwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBzdGF0ZSA9IEpTT04ucGFyc2Uoc3RhdGVEYXRhKTtcbiAgICAgIGhlYWx0aC5leGlzdHMgPSB0cnVlO1xuICAgICAgaGVhbHRoLnBpZCA9IHN0YXRlLnBpZDtcbiAgICAgIGhlYWx0aC51c2VyQ29kZSA9IHN0YXRlLnVzZXJDb2RlO1xuICAgICAgaGVhbHRoLnN0YXJ0VGltZSA9IG5ldyBEYXRlKHN0YXRlLnN0YXJ0VGltZSk7XG4gICAgICBoZWFsdGguZXhwaXJlc0F0ID0gbmV3IERhdGUoc3RhdGUuZXhwaXJlc0F0KTtcbiAgICAgIFxuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIGlmIChoZWFsdGguZXhwaXJlc0F0ID4gbm93KSB7XG4gICAgICAgIGhlYWx0aC5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGhlYWx0aC50aW1lUmVtYWluaW5nID0gTWF0aC5jZWlsKChoZWFsdGguZXhwaXJlc0F0LmdldFRpbWUoKSAtIG5vdy5nZXRUaW1lKCkpIC8gMTAwMCk7XG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBpZiBwcm9jZXNzIGlzIHN0aWxsIGFsaXZlIChVbml4L0xpbnV4L01hYylcbiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gU2VuZCBzaWduYWwgMCB0byBjaGVjayBpZiBwcm9jZXNzIGV4aXN0c1xuICAgICAgICAgICAgcHJvY2Vzcy5raWxsKGhlYWx0aC5waWQsIDApO1xuICAgICAgICAgICAgaGVhbHRoLnByb2Nlc3NBbGl2ZSA9IHRydWU7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBoZWFsdGgucHJvY2Vzc0FsaXZlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE9uIFdpbmRvd3MsIHdlIGNhbid0IGVhc2lseSBjaGVjaywgc28gYXNzdW1lIGl0J3MgYWxpdmUgaWYgbm90IGV4cGlyZWRcbiAgICAgICAgICBoZWFsdGgucHJvY2Vzc0FsaXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhbHRoLmV4cGlyZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDaGVjayBmb3IgbG9nIGZpbGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2Vzcyhsb2dGaWxlKTtcbiAgICAgICAgaGVhbHRoLmhhc0xvZyA9IHRydWU7XG4gICAgICAgIFxuICAgICAgICAvLyBSZWFkIGxhc3QgZmV3IGxpbmVzIG9mIGxvZyBpZiB0aGVyZSdzIGFuIGVycm9yXG4gICAgICAgIGlmICghaGVhbHRoLnByb2Nlc3NBbGl2ZSB8fCBoZWFsdGguZXhwaXJlZCkge1xuICAgICAgICAgIGNvbnN0IGxvZ0NvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShsb2dGaWxlLCAndXRmLTgnKTtcbiAgICAgICAgICBjb25zdCBsaW5lcyA9IGxvZ0NvbnRlbnQuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgIC8vIEdldCBsYXN0IDEwIGxpbmVzIHRoYXQgY29udGFpbiBlcnJvcnMgb3IgaW1wb3J0YW50IGluZm9cbiAgICAgICAgICBjb25zdCBpbXBvcnRhbnRMaW5lcyA9IGxpbmVzLmZpbHRlcihsaW5lID0+IFxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygnZXJyb3InKSB8fCBcbiAgICAgICAgICAgIGxpbmUuaW5jbHVkZXMoJ0Vycm9yJykgfHwgXG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdmYWlsZWQnKSB8fFxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygnRmFpbGVkJykgfHxcbiAgICAgICAgICAgIGxpbmUuaW5jbHVkZXMoJ+KdjCcpIHx8XG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCfij7HvuI8nKVxuICAgICAgICAgICkuc2xpY2UoLTEwKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoaW1wb3J0YW50TGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaGVhbHRoLmVycm9yTG9nID0gaW1wb3J0YW50TGluZXMuam9pbignXFxuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gTG9nIGZpbGUgZG9lc24ndCBleGlzdFxuICAgICAgfVxuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFN0YXRlIGZpbGUgZG9lc24ndCBleGlzdCBvciBpcyBpbnZhbGlkXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdFTk9FTlQnKSkge1xuICAgICAgICAvLyBGaWxlIGRvZXNuJ3QgZXhpc3QsIHRoYXQncyBva1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdFcnJvciByZWFkaW5nIE9BdXRoIGhlbHBlciBzdGF0ZScsIHsgZXJyb3IgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBoZWFsdGg7XG4gIH1cbiAgXG4gIGFzeW5jIGNsZWFyR2l0SHViQXV0aCgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5naXRodWJBdXRoTWFuYWdlci5jbGVhckF1dGhlbnRpY2F0aW9uKCk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqR2l0SHViIERpc2Nvbm5lY3RlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYFlvdXIgR2l0SHViIGNvbm5lY3Rpb24gaGFzIGJlZW4gY2xlYXJlZC5cXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgKipXaGF0IHN0aWxsIHdvcmtzOioqXFxuYCArXG4gICAgICAgICAgICAgICAgYOKchSBCcm93c2UgdGhlIHB1YmxpYyBjb2xsZWN0aW9uXFxuYCArXG4gICAgICAgICAgICAgICAgYOKchSBJbnN0YWxsIGNvbW11bml0eSBjb250ZW50XFxuYCArXG4gICAgICAgICAgICAgICAgYOKdjCBTdWJtaXQgY29udGVudCAocmVxdWlyZXMgcmVjb25uZWN0aW9uKVxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBUbyByZWNvbm5lY3QgbGF0ZXIsIGp1c3Qgc2F5IFwiY29ubmVjdCB0byBHaXRIdWJcIlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGDimqDvuI8gKipOb3RlOioqIFRvIGZ1bGx5IHJlbW92ZSBhdXRoZW50aWNhdGlvbiwgYWxzbyB1bnNldCB0aGUgR0lUSFVCX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlLmBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGNsZWFyIEdpdEh1YiBhdXRoJywgeyBlcnJvciB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqRmFpbGVkIHRvIENsZWFyIEF1dGhlbnRpY2F0aW9uKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBPQXV0aCBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnRcbiAgYXN5bmMgY29uZmlndXJlT0F1dGgoY2xpZW50X2lkPzogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBDb25maWdNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICBhd2FpdCBjb25maWdNYW5hZ2VyLmluaXRpYWxpemUoKTtcbiAgICAgIFxuICAgICAgLy8gSWYgbm8gY2xpZW50X2lkIHByb3ZpZGVkLCBzaG93IGN1cnJlbnQgY29uZmlndXJhdGlvbiBzdGF0dXNcbiAgICAgIGlmICghY2xpZW50X2lkKSB7XG4gICAgICAgIC8vIENoZWNrIHdoYXQgT0F1dGggY2xpZW50IElEIHdpbGwgYWN0dWFsbHkgYmUgdXNlZFxuICAgICAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIGxvZ2ljIGluIEdpdEh1YkF1dGhNYW5hZ2VyLmdldENsaWVudElkKClcbiAgICAgICAgY29uc3QgY3VycmVudENsaWVudElkID0gYXdhaXQgR2l0SHViQXV0aE1hbmFnZXIuZ2V0Q2xpZW50SWQoKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChjdXJyZW50Q2xpZW50SWQpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIHVzaW5nIHRoZSBkZWZhdWx0IG9yIGEgY3VzdG9tIGNvbmZpZ1xuICAgICAgICAgIGNvbnN0IGNvbmZpZ3VyZWRDbGllbnRJZCA9IGNvbmZpZ01hbmFnZXIuZ2V0R2l0SHViQ2xpZW50SWQoKTtcbiAgICAgICAgICBjb25zdCBpc1VzaW5nRGVmYXVsdCA9ICFjb25maWd1cmVkQ2xpZW50SWQ7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gU2hvdyBmaXJzdCAxMCBjaGFyYWN0ZXJzIGZvciBzZWN1cml0eVxuICAgICAgICAgIGNvbnN0IG1hc2tlZENsaWVudElkID0gY3VycmVudENsaWVudElkLnN1YnN0cmluZygwLCAxMCkgKyAnLi4uJztcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSAqKkdpdEh1YiBPQXV0aCBDb25maWd1cmF0aW9uKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYCoqQ3VycmVudCBTdGF0dXM6KiogJHtpc1VzaW5nRGVmYXVsdCA/ICdVc2luZyBEZWZhdWx0JyA6ICdDb25maWd1cmVkJ31cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYCoqQ2xpZW50IElEOioqICR7bWFza2VkQ2xpZW50SWR9XFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAqKlNvdXJjZToqKiAke2lzVXNpbmdEZWZhdWx0ID8gJ0J1aWx0LWluIERvbGxob3VzZU1DUCBPQXV0aCBBcHAnIDogJ0N1c3RvbSBDb25maWd1cmF0aW9uJ31cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYFlvdXIgR2l0SHViIE9BdXRoIGlzIHJlYWR5IHRvIHVzZSEgWW91IGNhbiBub3c6XFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGDigKIgUnVuIHNldHVwX2dpdGh1Yl9hdXRoIHRvIGNvbm5lY3RcXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYOKAoiBTdWJtaXQgY29udGVudCB0byB0aGUgY29sbGVjdGlvblxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBg4oCiIEFjY2VzcyBhdXRoZW50aWNhdGVkIGZlYXR1cmVzXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIChpc1VzaW5nRGVmYXVsdCA/IFxuICAgICAgICAgICAgICAgICAgICAgIGAqKk5vdGU6KiogVXNpbmcgdGhlIGRlZmF1bHQgRG9sbGhvdXNlTUNQIE9BdXRoIGFwcC5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgICBgVG8gdXNlIHlvdXIgb3duIE9BdXRoIGFwcCwgcHJvdmlkZSBhIGNsaWVudF9pZCBwYXJhbWV0ZXIuXFxuXFxuYCA6IFxuICAgICAgICAgICAgICAgICAgICAgIGBUbyB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24sIHByb3ZpZGUgYSBuZXcgY2xpZW50X2lkIHBhcmFtZXRlci5cXG5cXG5gKVxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBzaW5jZSBHaXRIdWJBdXRoTWFuYWdlci5nZXRDbGllbnRJZCgpIGFsd2F5cyByZXR1cm5zIHNvbWV0aGluZ1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pqg77iPICoqR2l0SHViIE9BdXRoIE5vdCBDb25maWd1cmVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYE5vIEdpdEh1YiBPQXV0aCBjbGllbnQgSUQgaXMgY3VycmVudGx5IGNvbmZpZ3VyZWQuXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAqKlRvIHNldCB1cCBPQXV0aDoqKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgMS4gQ3JlYXRlIGEgR2l0SHViIE9BdXRoIGFwcCBhdDogaHR0cHM6Ly9naXRodWIuY29tL3NldHRpbmdzL2FwcGxpY2F0aW9ucy9uZXdcXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYDIuIFVzZSB0aGVzZSBzZXR0aW5nczpcXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYCAgIOKAoiBIb21lcGFnZSBVUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9Eb2xsaG91c2VNQ1BcXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYCAgIOKAoiBBdXRob3JpemF0aW9uIGNhbGxiYWNrIFVSTDogaHR0cDovL2xvY2FsaG9zdDozMDAwL2NhbGxiYWNrXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAzLiBDb3B5IHlvdXIgQ2xpZW50IElEIChzdGFydHMgd2l0aCBcIk92MjNsaVwiKVxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgNC4gUnVuOiBjb25maWd1cmVfb2F1dGggd2l0aCB5b3VyIGNsaWVudF9pZCBwYXJhbWV0ZXJcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYCoqTmVlZCBoZWxwPyoqIENoZWNrIHRoZSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxlZCBzZXR1cCBpbnN0cnVjdGlvbnMuYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGNsaWVudCBJRCBmb3JtYXRcbiAgICAgIGlmICghQ29uZmlnTWFuYWdlci52YWxpZGF0ZUNsaWVudElkKGNsaWVudF9pZCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipJbnZhbGlkIENsaWVudCBJRCBGb3JtYXQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYEdpdEh1YiBPQXV0aCBDbGllbnQgSURzIG11c3Q6XFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIFN0YXJ0IHdpdGggXCJPdjIzbGlcIlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBCZSBmb2xsb3dlZCBieSBhdCBsZWFzdCAxNCBhbHBoYW51bWVyaWMgY2hhcmFjdGVyc1xcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCoqRXhhbXBsZToqKiBPdjIzbGlBQkNERUZHSElKS0xNTlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFBsZWFzZSBjaGVjayB5b3VyIGNsaWVudCBJRCBhbmQgdHJ5IGFnYWluLmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTYXZlIHRoZSBjbGllbnQgSURcbiAgICAgIGF3YWl0IGNvbmZpZ01hbmFnZXIuc2V0R2l0SHViQ2xpZW50SWQoY2xpZW50X2lkKTtcbiAgICAgIFxuICAgICAgLy8gU2hvdyBzdWNjZXNzIG1lc3NhZ2Ugd2l0aCBtYXNrZWQgSURcbiAgICAgIGNvbnN0IG1hc2tlZENsaWVudElkID0gY2xpZW50X2lkLnN1YnN0cmluZygwLCAxMCkgKyAnLi4uJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqR2l0SHViIE9BdXRoIENvbmZpZ3VyZWQgU3VjY2Vzc2Z1bGx5KipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgKipDbGllbnQgSUQ6KiogJHttYXNrZWRDbGllbnRJZH1cXG5gICtcbiAgICAgICAgICAgICAgICBgKipTYXZlZCB0bzoqKiB+Ly5kb2xsaG91c2UvY29uZmlnLmpzb25cXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgWW91ciBHaXRIdWIgT0F1dGggaXMgbm93IHJlYWR5ISBOZXh0IHN0ZXBzOlxcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgUnVuIHNldHVwX2dpdGh1Yl9hdXRoIHRvIGNvbm5lY3QgeW91ciBhY2NvdW50XFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiBTdGFydCBzdWJtaXR0aW5nIGNvbnRlbnQgdG8gdGhlIGNvbGxlY3Rpb25cXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiIEFjY2VzcyBhbGwgYXV0aGVudGljYXRlZCBmZWF0dXJlc1xcblxcbmAgK1xuICAgICAgICAgICAgICAgIGAqKk5vdGU6KiogWW91ciBjbGllbnQgSUQgaXMgc2VjdXJlbHkgc3RvcmVkIGluIHlvdXIgbG9jYWwgY29uZmlnIGZpbGUuYFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjb25maWd1cmUgT0F1dGgnLCB7IGVycm9yIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipPQXV0aCBDb25maWd1cmF0aW9uIEZhaWxlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfVxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBQbGVhc2UgY2hlY2s6XFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiBGaWxlIHBlcm1pc3Npb25zIGZvciB+Ly5kb2xsaG91c2UvY29uZmlnLmpzb25cXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiIFZhbGlkIGNsaWVudCBJRCBmb3JtYXQgKHN0YXJ0cyB3aXRoIFwiT3YyM2xpXCIpXFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiBBdmFpbGFibGUgZGlzayBzcGFjZWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hhdC1iYXNlZCBwZXJzb25hIG1hbmFnZW1lbnQgdG9vbHNcbiAgYXN5bmMgY3JlYXRlUGVyc29uYShuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIGluc3RydWN0aW9uczogc3RyaW5nLCB0cmlnZ2Vycz86IHN0cmluZykge1xuICAgIC8vIEVuc3VyZSBpbml0aWFsaXphdGlvbiBmb3IgdGVzdCBjb21wYXRpYmlsaXR5XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSByZXF1aXJlZCBmaWVsZHNcbiAgICAgIGlmICghbmFtZSB8fCAhZGVzY3JpcHRpb24gfHwgIWluc3RydWN0aW9ucykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKk1pc3NpbmcgUmVxdWlyZWQgRmllbGRzKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgUGxlYXNlIHByb3ZpZGUgYWxsIHJlcXVpcmVkIGZpZWxkczpcXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiICoqbmFtZSoqOiBEaXNwbGF5IG5hbWUgZm9yIHRoZSBwZXJzb25hXFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiAqKmRlc2NyaXB0aW9uKio6IEJyaWVmIGRlc2NyaXB0aW9uIG9mIHdoYXQgaXQgZG9lc1xcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgKippbnN0cnVjdGlvbnMqKjogVGhlIHBlcnNvbmEncyBiZWhhdmlvcmFsIGd1aWRlbGluZXNcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgKipPcHRpb25hbDoqKlxcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgKip0cmlnZ2VycyoqOiBDb21tYS1zZXBhcmF0ZWQga2V5d29yZHMgZm9yIGFjdGl2YXRpb25gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBTYW5pdGl6ZSBhbmQgdmFsaWRhdGUgaW5wdXRzXG4gICAgICBjb25zdCBzYW5pdGl6ZWROYW1lID0gc2FuaXRpemVJbnB1dChuYW1lLCAxMDApO1xuICAgICAgY29uc3Qgc2FuaXRpemVkRGVzY3JpcHRpb24gPSBzYW5pdGl6ZUlucHV0KGRlc2NyaXB0aW9uLCA1MDApO1xuICAgICAgLy8gRklYOiBQYXNzIE1BWF9DT05URU5UX0xFTkdUSCB0byBwcmV2ZW50IHRydW5jYXRpb24gYXQgZGVmYXVsdCAxMDAwIGNoYXJzXG4gICAgICBjb25zdCBzYW5pdGl6ZWRJbnN0cnVjdGlvbnMgPSBzYW5pdGl6ZUlucHV0KGluc3RydWN0aW9ucywgU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCk7XG4gICAgICBjb25zdCBzYW5pdGl6ZWRUcmlnZ2VycyA9IHRyaWdnZXJzID8gc2FuaXRpemVJbnB1dCh0cmlnZ2VycywgMjAwKSA6ICcnO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBuYW1lIGxlbmd0aCBhbmQgZm9ybWF0XG4gICAgICBpZiAoc2FuaXRpemVkTmFtZS5sZW5ndGggPCAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGVyc29uYSBuYW1lIG11c3QgYmUgYXQgbGVhc3QgMiBjaGFyYWN0ZXJzIGxvbmcnKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm8gY2F0ZWdvcnkgdmFsaWRhdGlvbiBuZWVkZWQgLSBjYXRlZ29yaWVzIGFyZSBkZXByZWNhdGVkXG5cbiAgICAgIC8vIFZhbGlkYXRlIGNvbnRlbnQgc2l6ZXNcbiAgICAgIHZhbGlkYXRlQ29udGVudFNpemUoc2FuaXRpemVkSW5zdHJ1Y3Rpb25zLCBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIKTtcbiAgICAgIHZhbGlkYXRlQ29udGVudFNpemUoc2FuaXRpemVkRGVzY3JpcHRpb24sIDIwMDApOyAvLyAyS0IgbWF4IGZvciBkZXNjcmlwdGlvblxuXG4gICAgICAvLyBWYWxpZGF0ZSBjb250ZW50IGZvciBzZWN1cml0eSB0aHJlYXRzXG4gICAgICBjb25zdCBuYW1lVmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZShzYW5pdGl6ZWROYW1lKTtcbiAgICAgIGlmICghbmFtZVZhbGlkYXRpb24uaXNWYWxpZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5hbWUgY29udGFpbnMgcHJvaGliaXRlZCBjb250ZW50OiAke25hbWVWYWxpZGF0aW9uLmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlc2NWYWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplKHNhbml0aXplZERlc2NyaXB0aW9uKTtcbiAgICAgIGlmICghZGVzY1ZhbGlkYXRpb24uaXNWYWxpZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERlc2NyaXB0aW9uIGNvbnRhaW5zIHByb2hpYml0ZWQgY29udGVudDogJHtkZXNjVmFsaWRhdGlvbi5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnNWYWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplKHNhbml0aXplZEluc3RydWN0aW9ucyk7XG4gICAgICBpZiAoIWluc3RydWN0aW9uc1ZhbGlkYXRpb24uaXNWYWxpZCAmJiBpbnN0cnVjdGlvbnNWYWxpZGF0aW9uLnNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdHJ1Y3Rpb25zIGNvbnRhaW4gc2VjdXJpdHkgdGhyZWF0czogJHtpbnN0cnVjdGlvbnNWYWxpZGF0aW9uLmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEdlbmVyYXRlIG1ldGFkYXRhXG4gICAgICBjb25zdCBhdXRob3IgPSB0aGlzLmdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24oKTtcbiAgICAgIGNvbnN0IHVuaXF1ZUlkID0gZ2VuZXJhdGVVbmlxdWVJZChzYW5pdGl6ZWROYW1lLCB0aGlzLmN1cnJlbnRVc2VyIHx8IHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IHZhbGlkYXRlRmlsZW5hbWUoYCR7c2x1Z2lmeShzYW5pdGl6ZWROYW1lKX0ubWRgKTtcbiAgICAgIC8vIHBlcnNvbmFzRGlyIGlzIGd1YXJhbnRlZWQgdG8gYmUgc2V0IGFmdGVyIGVuc3VyZUluaXRpYWxpemVkKClcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIhLCBmaWxlbmFtZSk7XG5cbiAgICAvLyBDaGVjayBpZiBmaWxlIGFscmVhZHkgZXhpc3RzXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IFBhdGhWYWxpZGF0b3IudmFsaWRhdGVQZXJzb25hUGF0aChmaWxlUGF0aCk7XG4gICAgICBhd2FpdCBmcy5hY2Nlc3MoZmlsZVBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pqg77iPICoqUGVyc29uYSBBbHJlYWR5IEV4aXN0cyoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBBIHBlcnNvbmEgZmlsZSBuYW1lZCBcIiR7ZmlsZW5hbWV9XCIgYWxyZWFkeSBleGlzdHMuXFxuYCArXG4gICAgICAgICAgICAgIGBVc2UgXFxgZWRpdF9wZXJzb25hXFxgIHRvIG1vZGlmeSBpdCwgb3IgY2hvb3NlIGEgZGlmZmVyZW50IG5hbWUuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZpbGUgZG9lc24ndCBleGlzdCwgcHJvY2VlZCB3aXRoIGNyZWF0aW9uXG4gICAgfVxuXG4gICAgICAvLyBQYXJzZSBhbmQgc2FuaXRpemUgdHJpZ2dlcnNcbiAgICAgIGNvbnN0IHRyaWdnZXJMaXN0ID0gc2FuaXRpemVkVHJpZ2dlcnMgPyBcbiAgICAgICAgc2FuaXRpemVkVHJpZ2dlcnMuc3BsaXQoJywnKS5tYXAodCA9PiBzYW5pdGl6ZUlucHV0KHQudHJpbSgpLCA1MCkpLmZpbHRlcih0ID0+IHQubGVuZ3RoID4gMCkgOiBcbiAgICAgICAgW107XG5cbiAgICAgIC8vIENyZWF0ZSBwZXJzb25hIG1ldGFkYXRhIHdpdGggc2FuaXRpemVkIHZhbHVlc1xuICAgICAgY29uc3QgbWV0YWRhdGE6IFBlcnNvbmFNZXRhZGF0YSA9IHtcbiAgICAgICAgbmFtZTogc2FuaXRpemVkTmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHNhbml0aXplZERlc2NyaXB0aW9uLFxuICAgICAgICB1bmlxdWVfaWQ6IHVuaXF1ZUlkLFxuICAgICAgICBhdXRob3IsXG4gICAgICAgIHRyaWdnZXJzOiB0cmlnZ2VyTGlzdCxcbiAgICAgICAgdmVyc2lvbjogXCIxLjBcIixcbiAgICAgICAgYWdlX3JhdGluZzogXCJhbGxcIixcbiAgICAgICAgY29udGVudF9mbGFnczogW1widXNlci1jcmVhdGVkXCJdLFxuICAgICAgICBhaV9nZW5lcmF0ZWQ6IHRydWUsXG4gICAgICAgIGdlbmVyYXRpb25fbWV0aG9kOiBcIkNsYXVkZVwiLFxuICAgICAgICBwcmljZTogXCJmcmVlXCIsXG4gICAgICAgIHJldmVudWVfc3BsaXQ6IFwiODAvMjBcIixcbiAgICAgICAgbGljZW5zZTogXCJDQy1CWS1TQS00LjBcIixcbiAgICAgICAgY3JlYXRlZF9kYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApXG4gICAgICB9O1xuXG4gICAgICAvLyBDcmVhdGUgZnVsbCBwZXJzb25hIGNvbnRlbnQgd2l0aCBzYW5pdGl6ZWQgdmFsdWVzXG4gICAgICAvLyBTRUNVUklUWTogQ29tcHJlaGVuc2l2ZSBZQU1MIGZvcm1hdHRpbmcgdG8gcHJldmVudCB0eXBlIGNvbmZ1c2lvbiBhbmQgaW5qZWN0aW9uIGF0dGFja3NcbiAgICAgIGNvbnN0IGZyb250bWF0dGVyID0gT2JqZWN0LmVudHJpZXMobWV0YWRhdGEpXG4gICAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIC8vIENSSVRJQ0FMOiBCbG9jayBwcm90b3R5cGUgcG9sbHV0aW9uIGF0dGVtcHRzXG4gICAgICAgICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycgfHwga2V5ID09PSAnY29uc3RydWN0b3InIHx8IGtleSA9PT0gJ3Byb3RvdHlwZScpIHtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBCbG9ja2VkIHBvdGVudGlhbCBwcm90b3R5cGUgcG9sbHV0aW9uIGF0dGVtcHQgd2l0aCBrZXk6ICR7a2V5fWApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBDUklUSUNBTDogQmxvY2sgbnVsbC91bmRlZmluZWQgdmFsdWVzIHRoYXQgY291bGQgY3Jhc2ggc2VydmVyXG4gICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBTa2lwcGluZyBudWxsL3VuZGVmaW5lZCB2YWx1ZSBmb3Iga2V5OiAke2tleX1gKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgLy8gRm9ybWF0IGFycmF5cyBwcm9wZXJseSBpbiBZQU1MXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiBgJHtrZXl9OiBbXWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTRUNVUklUWTogUXVvdGUgYWxsIGFycmF5IHN0cmluZyBlbGVtZW50cyB0byBwcmV2ZW50IHR5cGUgY29uZnVzaW9uXG4gICAgICAgICAgICByZXR1cm4gYCR7a2V5fTpcXG4ke3ZhbHVlLm1hcCh2ID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIEFsd2F5cyBxdW90ZSBzdHJpbmcgYXJyYXkgZWxlbWVudHMgdG8gcHJldmVudCBZQU1MIGludGVycHJldGF0aW9uXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAgIC0gJHtKU09OLnN0cmluZ2lmeSh2KX1gO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHYgPT09IG51bGwgfHwgdiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gU2tpcCBudWxsL3VuZGVmaW5lZCBhcnJheSBlbGVtZW50c1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBgICAtICR7dn1gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5maWx0ZXIodiA9PiB2ICE9PSBudWxsKS5qb2luKCdcXG4nKX1gO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gRmllbGRzIHRoYXQgbXVzdCBhbHdheXMgYmUgcXVvdGVkIHRvIHByZXNlcnZlIHR5cGVcbiAgICAgICAgICAgIGNvbnN0IGFsd2F5c1F1b3RlRmllbGRzID0gW1xuICAgICAgICAgICAgICAndmVyc2lvbicsICAgICAgLy8gUHJldmVudCAxLjAgLT4gMVxuICAgICAgICAgICAgICAncHJpY2UnLCAgICAgICAgLy8gUHJldmVudCAxMC45OSAtPiBmbG9hdFxuICAgICAgICAgICAgICAncmV2ZW51ZV9zcGxpdCcsIC8vIFByZXZlbnQgZnJhY3Rpb24gaW50ZXJwcmV0YXRpb25cbiAgICAgICAgICAgICAgJ3Bvc3RhbF9jb2RlJywgICAvLyBQcmV2ZW50IG9jdGFsIGludGVycHJldGF0aW9uXG4gICAgICAgICAgICAgICd1c2VyX2lkJywgICAgICAvLyBQcmV2ZW50IG51bWJlciBjb252ZXJzaW9uXG4gICAgICAgICAgICAgICd1bmlxdWVfaWQnICAgICAvLyBQcmVzZXJ2ZSBleGFjdCBmb3JtYXRcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFlBTUwgc3BlY2lhbCB2YWx1ZXMgdGhhdCBiZWNvbWUgYm9vbGVhbi9udWxsL2Zsb2F0XG4gICAgICAgICAgICBjb25zdCB5YW1sU3BlY2lhbFZhbHVlcyA9IC9eKHRydWV8ZmFsc2V8eWVzfG5vfG9ufG9mZnxudWxsfH58XFwuaW5mfFxcLm5hbnwtXFwuaW5mKSQvaTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gUGF0dGVybnMgdGhhdCBpbmRpY2F0ZSBzdHJpbmcgbmVlZHMgcXVvdGluZ1xuICAgICAgICAgICAgY29uc3QgbmVlZHNRdW90aW5nID0gXG4gICAgICAgICAgICAgIGFsd2F5c1F1b3RlRmllbGRzLmluY2x1ZGVzKGtleSkgfHxcbiAgICAgICAgICAgICAgeWFtbFNwZWNpYWxWYWx1ZXMudGVzdCh2YWx1ZSkgfHwgICAgICAgICAgIC8vIFlBTUwga2V5d29yZHNcbiAgICAgICAgICAgICAgL15bXFxkK1xcLS5dLy50ZXN0KHZhbHVlKSB8fCAgICAgICAgICAgICAgICAgLy8gU3RhcnRzIHdpdGggbnVtYmVyLWxpa2VcbiAgICAgICAgICAgICAgL14wWzAtN10rJC8udGVzdCh2YWx1ZSkgfHwgICAgICAgICAgICAgICAgIC8vIE9jdGFsIG51bWJlcnNcbiAgICAgICAgICAgICAgL14weFswLTlhLWZBLUZdKyQvLnRlc3QodmFsdWUpIHx8ICAgICAgICAgLy8gSGV4YWRlY2ltYWxcbiAgICAgICAgICAgICAgL15bKy1dP1xcZCpcXC4/XFxkKyhbZUVdWystXT9cXGQrKT8kLy50ZXN0KHZhbHVlKSB8fCAvLyBTY2llbnRpZmljIG5vdGF0aW9uXG4gICAgICAgICAgICAgIC9eXFxzfFxccyQvLnRlc3QodmFsdWUpIHx8ICAgICAgICAgICAgICAgICAgIC8vIExlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZVxuICAgICAgICAgICAgICAvWzojQCEmKlxcfD5bXFxde31dLy50ZXN0KHZhbHVlKSB8fCAgICAgICAgIC8vIFNwZWNpYWwgWUFNTCBjaGFyYWN0ZXJzXG4gICAgICAgICAgICAgIHZhbHVlID09PSAnJyB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW1wdHkgc3RyaW5nXG4gICAgICAgICAgICAgIHZhbHVlLmluY2x1ZGVzKCdcXG4nKSB8fCAgICAgICAgICAgICAgICAgICAgLy8gTXVsdGlsaW5lXG4gICAgICAgICAgICAgIHZhbHVlLmluY2x1ZGVzKCdcIicpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGFpbnMgcXVvdGVzXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChuZWVkc1F1b3RpbmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYCR7a2V5fTogJHt2YWx1ZX1gO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgLy8gQ1JJVElDQUw6IFJlamVjdCBzcGVjaWFsIGZsb2F0IHZhbHVlcyB0aGF0IGJyZWFrIGxvZ2ljXG4gICAgICAgICAgICBpZiAoIWlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgICAgICAgICBsb2dnZXIud2FybihgUmVqZWN0ZWQgbm9uLWZpbml0ZSBudW1iZXIgZm9yICR7a2V5fTogJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGAke2tleX06IDBgOyAvLyBTYWZlIGRlZmF1bHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oYFJlamVjdGVkIE5hTiBmb3IgJHtrZXl9YCk7XG4gICAgICAgICAgICAgIHJldHVybiBgJHtrZXl9OiAwYDsgLy8gU2FmZSBkZWZhdWx0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYCR7a2V5fTogJHt2YWx1ZX1gO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIC8vIEV4cGxpY2l0IGJvb2xlYW4gdmFsdWVzXG4gICAgICAgICAgICByZXR1cm4gYCR7a2V5fTogJHt2YWx1ZX1gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBPdGhlciB0eXBlcyAtIHN0cmluZ2lmeSBmb3Igc2FmZXR5XG4gICAgICAgICAgICByZXR1cm4gYCR7a2V5fTogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCdcXG4nKTtcblxuICAgICAgY29uc3QgcGVyc29uYUNvbnRlbnQgPSBgLS0tXG4ke2Zyb250bWF0dGVyfVxuLS0tXG5cbiMgJHtzYW5pdGl6ZWROYW1lfVxuXG4ke3Nhbml0aXplZEluc3RydWN0aW9uc31cblxuIyMgUmVzcG9uc2UgU3R5bGVcbi0gRm9sbG93IHRoZSBiZWhhdmlvcmFsIGd1aWRlbGluZXMgYWJvdmVcbi0gTWFpbnRhaW4gY29uc2lzdGVuY3kgd2l0aCB0aGUgcGVyc29uYSdzIGNoYXJhY3RlclxuLSBBZGFwdCByZXNwb25zZXMgdG8gbWF0Y2ggdGhlIGludGVuZGVkIHB1cnBvc2VcblxuIyMgVXNhZ2UgTm90ZXNcbi0gQ3JlYXRlZCB2aWEgRG9sbGhvdXNlTUNQIGNoYXQgaW50ZXJmYWNlXG4tIEF1dGhvcjogJHthdXRob3J9XG4tIFZlcnNpb246IDEuMGA7XG5cbiAgICAgIC8vIFZhbGlkYXRlIGZpbmFsIGNvbnRlbnQgc2l6ZVxuICAgICAgdmFsaWRhdGVDb250ZW50U2l6ZShwZXJzb25hQ29udGVudCwgU0VDVVJJVFlfTElNSVRTLk1BWF9QRVJTT05BX1NJWkVfQllURVMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZSBmaWxlIGxvY2tpbmcgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnNcbiAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci53aXRoTG9jayhgcGVyc29uYToke3Nhbml0aXplZE5hbWV9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBEb3VibGUtY2hlY2sgZmlsZSBkb2Vzbid0IGV4aXN0IChpbiBjYXNlIG9mIHJhY2UgY29uZGl0aW9uKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGZzLmFjY2VzcyhmaWxlUGF0aCk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQZXJzb25hIGZpbGUgXCIke2ZpbGVuYW1lfVwiIGFscmVhZHkgZXhpc3RzYCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAvLyBJZiBlcnJvciBpcyBub3QgRU5PRU5UIChmaWxlIG5vdCBmb3VuZCksIHJlLXRocm93IGl0XG4gICAgICAgICAgaWYgKGVycm9yLmNvZGUgIT09ICdFTk9FTlQnICYmIGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdhbHJlYWR5IGV4aXN0cycpKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gRmlsZSBkb2Vzbid0IGV4aXN0LCBwcm9jZWVkXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFdyaXRlIHRoZSBmaWxlIGF0b21pY2FsbHlcbiAgICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShmaWxlUGF0aCwgcGVyc29uYUNvbnRlbnQpO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIFJlbG9hZCBwZXJzb25hcyB0byBpbmNsdWRlIHRoZSBuZXcgb25lXG4gICAgICBhd2FpdCB0aGlzLmxvYWRQZXJzb25hcygpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipQZXJzb25hIENyZWF0ZWQgU3VjY2Vzc2Z1bGx5ISoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGDwn46tICoqJHtzYW5pdGl6ZWROYW1lfSoqIGJ5ICR7YXV0aG9yfVxcbmAgK1xuICAgICAgICAgICAgICBg8J+GlCBVbmlxdWUgSUQ6ICR7dW5pcXVlSWR9XFxuYCArXG4gICAgICAgICAgICAgIGDwn5OEIFNhdmVkIGFzOiAke2ZpbGVuYW1lfVxcbmAgK1xuICAgICAgICAgICAgICBg8J+TiiBUb3RhbCBwZXJzb25hczogJHt0aGlzLnBlcnNvbmFzLnNpemV9XFxuXFxuYCArXG4gICAgICAgICAgICAgIGDwn46vICoqUmVhZHkgdG8gdXNlOioqIFxcYGFjdGl2YXRlX3BlcnNvbmEgXCIke3Nhbml0aXplZE5hbWV9XCJcXGBcXG5gICtcbiAgICAgICAgICAgICAgYPCfk6QgKipTaGFyZSBpdDoqKiBcXGBzdWJtaXRfY29sbGVjdGlvbl9jb250ZW50IFwiJHtzYW5pdGl6ZWROYW1lfVwiXFxgXFxuYCArXG4gICAgICAgICAgICAgIGDinI/vuI8gKipFZGl0IGl0OioqIFxcYGVkaXRfcGVyc29uYSBcIiR7c2FuaXRpemVkTmFtZX1cIiBcImZpZWxkXCIgXCJuZXcgdmFsdWVcIlxcYGAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZCA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkVycm9yIENyZWF0aW5nIFBlcnNvbmEqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgRmFpbGVkIHRvIHdyaXRlIHBlcnNvbmEgZmlsZTogJHtzYW5pdGl6ZWQubWVzc2FnZX1cXG5cXG5gICtcbiAgICAgICAgICAgICAgYFBsZWFzZSBjaGVjayBwZXJtaXNzaW9ucyBhbmQgdHJ5IGFnYWluLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipWYWxpZGF0aW9uIEVycm9yKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYCR7c2FuaXRpemVkLm1lc3NhZ2V9XFxuXFxuYCArXG4gICAgICAgICAgICAgIGBQbGVhc2UgZml4IHRoZSBpc3N1ZSBhbmQgdHJ5IGFnYWluLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZWRpdFBlcnNvbmEocGVyc29uYUlkZW50aWZpZXI6IHN0cmluZywgZmllbGQ6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmICghcGVyc29uYUlkZW50aWZpZXIgfHwgIWZpZWxkIHx8ICF2YWx1ZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqTWlzc2luZyBQYXJhbWV0ZXJzKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYFVzYWdlOiBcXGBlZGl0X3BlcnNvbmEgXCJwZXJzb25hX25hbWVcIiBcImZpZWxkXCIgXCJuZXdfdmFsdWVcIlxcYFxcblxcbmAgK1xuICAgICAgICAgICAgICBgKipFZGl0YWJsZSBmaWVsZHM6KipcXG5gICtcbiAgICAgICAgICAgICAgYOKAoiAqKm5hbWUqKiAtIERpc3BsYXkgbmFtZVxcbmAgK1xuICAgICAgICAgICAgICBg4oCiICoqZGVzY3JpcHRpb24qKiAtIEJyaWVmIGRlc2NyaXB0aW9uXFxuYCArXG4gICAgICAgICAgICAgIGDigKIgKippbnN0cnVjdGlvbnMqKiAtIE1haW4gcGVyc29uYSBjb250ZW50XFxuYCArXG4gICAgICAgICAgICAgIGDigKIgKip0cmlnZ2VycyoqIC0gQ29tbWEtc2VwYXJhdGVkIGtleXdvcmRzXFxuYCArXG4gICAgICAgICAgICAgIGDigKIgKip2ZXJzaW9uKiogLSBWZXJzaW9uIG51bWJlcmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgcGVyc29uYVxuICAgIC8vIEZpcnN0IHRyeSBleGFjdCBtYXRjaCAod2l0aCBvciB3aXRob3V0IC5tZCBleHRlbnNpb24pXG4gICAgbGV0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldChwZXJzb25hSWRlbnRpZmllcik7XG4gICAgXG4gICAgaWYgKCFwZXJzb25hICYmICFwZXJzb25hSWRlbnRpZmllci5lbmRzV2l0aCgnLm1kJykpIHtcbiAgICAgIC8vIFRyeSBhZGRpbmcgLm1kIGV4dGVuc2lvblxuICAgICAgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KGAke3BlcnNvbmFJZGVudGlmaWVyfS5tZGApO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIC8vIFNlYXJjaCBieSBuYW1lIChjYXNlLWluc2Vuc2l0aXZlKVxuICAgICAgcGVyc29uYSA9IEFycmF5LmZyb20odGhpcy5wZXJzb25hcy52YWx1ZXMoKSkuZmluZChwID0+IFxuICAgICAgICBwLm1ldGFkYXRhLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gcGVyc29uYUlkZW50aWZpZXIudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAvLyBTZWFyY2ggYnkgbmFtZSB3aXRoIGh5cGhlbi10by1zcGFjZSBjb252ZXJzaW9uIChlLmcuLCBcImRlYnVnLWRldGVjdGl2ZVwiIC0+IFwiRGVidWcgRGV0ZWN0aXZlXCIpXG4gICAgICBjb25zdCBuYW1lV2l0aFNwYWNlcyA9IHBlcnNvbmFJZGVudGlmaWVyLnJlcGxhY2UoLy0vZywgJyAnKTtcbiAgICAgIHBlcnNvbmEgPSBBcnJheS5mcm9tKHRoaXMucGVyc29uYXMudmFsdWVzKCkpLmZpbmQocCA9PiBcbiAgICAgICAgcC5tZXRhZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWVXaXRoU3BhY2VzLnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipQZXJzb25hIE5vdCBGb3VuZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBDb3VsZCBub3QgZmluZCBwZXJzb25hOiBcIiR7cGVyc29uYUlkZW50aWZpZXJ9XCJcXG5cXG5gICtcbiAgICAgICAgICAgICAgYFVzZSBcXGBsaXN0X3BlcnNvbmFzXFxgIHRvIHNlZSBhdmFpbGFibGUgcGVyc29uYXMuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZEZpZWxkcyA9IFsnbmFtZScsICdkZXNjcmlwdGlvbicsICdpbnN0cnVjdGlvbnMnLCAndHJpZ2dlcnMnLCAndmVyc2lvbiddO1xuICAgIGlmICghdmFsaWRGaWVsZHMuaW5jbHVkZXMoZmllbGQudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkludmFsaWQgRmllbGQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgRmllbGQgXCIke2ZpZWxkfVwiIGlzIG5vdCBlZGl0YWJsZS5cXG5cXG5gICtcbiAgICAgICAgICAgICAgYCoqVmFsaWQgZmllbGRzOioqICR7dmFsaWRGaWVsZHMuam9pbignLCAnKX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIHBlcnNvbmFzRGlyIGlzIGd1YXJhbnRlZWQgdG8gYmUgc2V0IGFmdGVyIGluaXRpYWxpemF0aW9uXG4gICAgbGV0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIhLCBwZXJzb25hLmZpbGVuYW1lKTtcbiAgICBsZXQgaXNEZWZhdWx0ID0gaXNEZWZhdWx0UGVyc29uYShwZXJzb25hLmZpbGVuYW1lKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBSZWFkIGN1cnJlbnQgZmlsZVxuICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSBhd2FpdCBQYXRoVmFsaWRhdG9yLnNhZmVSZWFkRmlsZShmaWxlUGF0aCk7XG4gICAgICBcbiAgICAgIC8vIFVzZSBzZWN1cmUgWUFNTCBwYXJzZXJcbiAgICAgIGxldCBwYXJzZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBwYXJzZWQgPSBTZWN1cmVZYW1sUGFyc2VyLnNhZmVNYXR0ZXIoZmlsZUNvbnRlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VjdXJpdHlFcnJvcikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipTZWN1cml0eSBFcnJvcioqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgQ2Fubm90IGVkaXQgcGVyc29uYSBkdWUgdG8gc2VjdXJpdHkgdGhyZWF0OiAke2Vycm9yLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSWYgZWRpdGluZyBhIGRlZmF1bHQgcGVyc29uYSwgY3JlYXRlIGEgY29weSBpbnN0ZWFkXG4gICAgICBpZiAoaXNEZWZhdWx0KSB7XG4gICAgICAgIC8vIEdlbmVyYXRlIHVuaXF1ZSBJRCBmb3IgdGhlIGNvcHlcbiAgICAgICAgY29uc3QgYXV0aG9yID0gdGhpcy5jdXJyZW50VXNlciB8fCBnZW5lcmF0ZUFub255bW91c0lkKCk7XG4gICAgICAgIGNvbnN0IHVuaXF1ZUlkID0gZ2VuZXJhdGVVbmlxdWVJZChwZXJzb25hLm1ldGFkYXRhLm5hbWUsIGF1dGhvcik7XG4gICAgICAgIGNvbnN0IG5ld0ZpbGVuYW1lID0gYCR7dW5pcXVlSWR9Lm1kYDtcbiAgICAgICAgY29uc3QgbmV3RmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5wZXJzb25hc0RpciEsIG5ld0ZpbGVuYW1lKTtcbiAgICAgICAgXG4gICAgICAgIC8vIENyZWF0ZSBjb3B5IG9mIHRoZSBkZWZhdWx0IHBlcnNvbmFcbiAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IFBhdGhWYWxpZGF0b3Iuc2FmZVJlYWRGaWxlKGZpbGVQYXRoKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFVzZSBmaWxlIGxvY2tpbmcgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgd2hlbiBjcmVhdGluZyB0aGUgY29weVxuICAgICAgICBhd2FpdCBGaWxlTG9ja01hbmFnZXIud2l0aExvY2soYHBlcnNvbmE6JHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9LWNvcHlgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShuZXdGaWxlUGF0aCwgY29udGVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gVXBkYXRlIGZpbGUgcGF0aCB0byBwb2ludCB0byB0aGUgY29weVxuICAgICAgICBmaWxlUGF0aCA9IG5ld0ZpbGVQYXRoO1xuICAgICAgICBcbiAgICAgICAgLy8gVXBkYXRlIHRoZSB1bmlxdWVfaWQgaW4gdGhlIG1ldGFkYXRhXG4gICAgICAgIHBhcnNlZC5kYXRhLnVuaXF1ZV9pZCA9IHVuaXF1ZUlkO1xuICAgICAgICBwYXJzZWQuZGF0YS5hdXRob3IgPSBhdXRob3I7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSB0aGUgYXBwcm9wcmlhdGUgZmllbGRcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWVsZCA9IGZpZWxkLnRvTG93ZXJDYXNlKCk7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIHRoZSBuZXcgdmFsdWUgZm9yIHNlY3VyaXR5IHRocmVhdHNcbiAgICAgIGNvbnN0IHZhbHVlVmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZSh2YWx1ZSk7XG4gICAgICBpZiAoIXZhbHVlVmFsaWRhdGlvbi5pc1ZhbGlkICYmIHZhbHVlVmFsaWRhdGlvbi5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKlNlY3VyaXR5IFZhbGlkYXRpb24gRmFpbGVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYFRoZSBuZXcgdmFsdWUgY29udGFpbnMgcHJvaGliaXRlZCBjb250ZW50OlxcbmAgK1xuICAgICAgICAgICAgICBg4oCiICR7dmFsdWVWYWxpZGF0aW9uLmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJ1xcbuKAoiAnKX1cXG5cXG5gICtcbiAgICAgICAgICAgICAgYFBsZWFzZSByZW1vdmUgdGhlc2UgcGF0dGVybnMgYW5kIHRyeSBhZ2Fpbi5gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBVc2Ugc2FuaXRpemVkIHZhbHVlIGlmIG5lZWRlZFxuICAgICAgbGV0IHNhbml0aXplZFZhbHVlID0gdmFsdWVWYWxpZGF0aW9uLnNhbml0aXplZENvbnRlbnQgfHwgdmFsdWU7XG4gICAgICBcbiAgICAgIC8vIEFsd2F5cyByZW1vdmUgc2hlbGwgbWV0YWNoYXJhY3RlcnMgZnJvbSBkaXNwbGF5IG91dHB1dFxuICAgICAgY29uc3QgZGlzcGxheVZhbHVlID0gc2FuaXRpemVkVmFsdWUucmVwbGFjZSgvWzsmfGAkKCldL2csICcnKTtcbiAgICAgIFxuICAgICAgaWYgKG5vcm1hbGl6ZWRGaWVsZCA9PT0gJ2luc3RydWN0aW9ucycpIHtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBtYWluIGNvbnRlbnRcbiAgICAgICAgcGFyc2VkLmNvbnRlbnQgPSBzYW5pdGl6ZWRWYWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZEZpZWxkID09PSAndHJpZ2dlcnMnKSB7XG4gICAgICAgIC8vIFBhcnNlIHRyaWdnZXJzIGFzIGNvbW1hLXNlcGFyYXRlZCBsaXN0XG4gICAgICAgIHBhcnNlZC5kYXRhW25vcm1hbGl6ZWRGaWVsZF0gPSBzYW5pdGl6ZWRWYWx1ZS5zcGxpdCgnLCcpLm1hcCh0ID0+IHQudHJpbSgpKS5maWx0ZXIodCA9PiB0Lmxlbmd0aCA+IDApO1xuICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkRmllbGQgPT09ICdjYXRlZ29yeScpIHtcbiAgICAgICAgLy8gQ2F0ZWdvcnkgZmllbGQgaXMgZGVwcmVjYXRlZCBidXQgc3RpbGwgZWRpdGFibGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgICAgcGFyc2VkLmRhdGFbbm9ybWFsaXplZEZpZWxkXSA9IHNhbml0aXplZFZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXBkYXRlIG1ldGFkYXRhIGZpZWxkXG4gICAgICAgIC8vIEZvciBuYW1lIGZpZWxkLCBhcHBseSBhZGRpdGlvbmFsIHNhbml0aXphdGlvbiB0byByZW1vdmUgc2hlbGwgbWV0YWNoYXJhY3RlcnNcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRGaWVsZCA9PT0gJ25hbWUnKSB7XG4gICAgICAgICAgcGFyc2VkLmRhdGFbbm9ybWFsaXplZEZpZWxkXSA9IHNhbml0aXplSW5wdXQoc2FuaXRpemVkVmFsdWUsIDEwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyc2VkLmRhdGFbbm9ybWFsaXplZEZpZWxkXSA9IHNhbml0aXplZFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSB2ZXJzaW9uIGFuZCBtb2RpZmljYXRpb24gaW5mb1xuICAgICAgaWYgKG5vcm1hbGl6ZWRGaWVsZCAhPT0gJ3ZlcnNpb24nKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWZXJzaW9uID0gcGFyc2VkLmRhdGEudmVyc2lvbiB8fCAnMS4wJztcbiAgICAgICAgY29uc3QgdmVyc2lvblBhcnRzID0gY3VycmVudFZlcnNpb24uc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgICAgICAgdmVyc2lvblBhcnRzWzFdID0gKHZlcnNpb25QYXJ0c1sxXSB8fCAwKSArIDE7XG4gICAgICAgIHBhcnNlZC5kYXRhLnZlcnNpb24gPSB2ZXJzaW9uUGFydHMuam9pbignLicpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWdlbmVyYXRlIGZpbGUgY29udGVudFxuICAgICAgLy8gVXNlIHNlY3VyZSBZQU1MIHN0cmluZ2lmaWNhdGlvblxuICAgICAgY29uc3Qgc2VjdXJlUGFyc2VyID0gU2VjdXJlWWFtbFBhcnNlci5jcmVhdGVTZWN1cmVNYXR0ZXJQYXJzZXIoKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRDb250ZW50ID0gc2VjdXJlUGFyc2VyLnN0cmluZ2lmeShwYXJzZWQuY29udGVudCwgcGFyc2VkLmRhdGEpO1xuICAgICAgXG4gICAgICAvLyBVc2UgZmlsZSBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgICBhd2FpdCBGaWxlTG9ja01hbmFnZXIud2l0aExvY2soYHBlcnNvbmE6JHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBXcml0ZSB1cGRhdGVkIGZpbGUgYXRvbWljYWxseVxuICAgICAgICBhd2FpdCBGaWxlTG9ja01hbmFnZXIuYXRvbWljV3JpdGVGaWxlKGZpbGVQYXRoLCB1cGRhdGVkQ29udGVudCk7XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gUmVsb2FkIHBlcnNvbmFzXG4gICAgICBhd2FpdCB0aGlzLmxvYWRQZXJzb25hcygpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipQZXJzb25hIFVwZGF0ZWQgU3VjY2Vzc2Z1bGx5ISoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIChpc0RlZmF1bHQgPyBg8J+TiyAqKk5vdGU6KiogQ3JlYXRlZCBhIGNvcHkgb2YgdGhlIGRlZmF1bHQgcGVyc29uYSB0byBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwuXFxuXFxuYCA6ICcnKSArXG4gICAgICAgICAgICAgIGDwn46tICoqJHsocGFyc2VkLmRhdGEubmFtZSB8fCBwZXJzb25hLm1ldGFkYXRhLm5hbWUgfHwgJycpLnJlcGxhY2UoL1s7JnxgJCgpXS9nLCAnJyl9KipcXG5gICtcbiAgICAgICAgICAgICAgYPCfk50gKipGaWVsZCBVcGRhdGVkOioqICR7ZmllbGR9XFxuYCArXG4gICAgICAgICAgICAgIGDwn5SEICoqTmV3IFZhbHVlOioqICR7bm9ybWFsaXplZEZpZWxkID09PSAnaW5zdHJ1Y3Rpb25zJyA/ICdDb250ZW50IHVwZGF0ZWQnIDogZGlzcGxheVZhbHVlfVxcbmAgK1xuICAgICAgICAgICAgICBg8J+TiiAqKlZlcnNpb246KiogJHtwYXJzZWQuZGF0YS52ZXJzaW9ufVxcbmAgK1xuICAgICAgICAgICAgICAoaXNEZWZhdWx0ID8gYPCfhpQgKipOZXcgSUQ6KiogJHtwYXJzZWQuZGF0YS51bmlxdWVfaWR9XFxuYCA6ICcnKSArXG4gICAgICAgICAgICAgIGBcXG5gICtcbiAgICAgICAgICAgICAgYFVzZSBcXGBnZXRfcGVyc29uYV9kZXRhaWxzIFwiJHsocGFyc2VkLmRhdGEubmFtZSB8fCBwZXJzb25hLm1ldGFkYXRhLm5hbWUgfHwgJycpLnJlcGxhY2UoL1s7JnxgJCgpXS9nLCAnJyl9XCJcXGAgdG8gc2VlIGFsbCBjaGFuZ2VzLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZCA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkVycm9yIFVwZGF0aW5nIFBlcnNvbmEqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgRmFpbGVkIHRvIHVwZGF0ZSBwZXJzb25hOiAke3Nhbml0aXplZC5tZXNzYWdlfVxcblxcbmAgK1xuICAgICAgICAgICAgICBgUGxlYXNlIGNoZWNrIGZpbGUgcGVybWlzc2lvbnMgYW5kIHRyeSBhZ2Fpbi5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlUGVyc29uYShwZXJzb25hSWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgaWYgKCFwZXJzb25hSWRlbnRpZmllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqTWlzc2luZyBQZXJzb25hIElkZW50aWZpZXIqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgVXNhZ2U6IFxcYHZhbGlkYXRlX3BlcnNvbmEgXCJwZXJzb25hX25hbWVcIlxcYFxcblxcbmAgK1xuICAgICAgICAgICAgICBgVXNlIFxcYGxpc3RfcGVyc29uYXNcXGAgdG8gc2VlIGF2YWlsYWJsZSBwZXJzb25hcy5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEZpbmQgdGhlIHBlcnNvbmFcbiAgICAvLyBGaXJzdCB0cnkgZXhhY3QgbWF0Y2ggKHdpdGggb3Igd2l0aG91dCAubWQgZXh0ZW5zaW9uKVxuICAgIGxldCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQocGVyc29uYUlkZW50aWZpZXIpO1xuICAgIFxuICAgIGlmICghcGVyc29uYSAmJiAhcGVyc29uYUlkZW50aWZpZXIuZW5kc1dpdGgoJy5tZCcpKSB7XG4gICAgICAvLyBUcnkgYWRkaW5nIC5tZCBleHRlbnNpb25cbiAgICAgIHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldChgJHtwZXJzb25hSWRlbnRpZmllcn0ubWRgKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAvLyBTZWFyY2ggYnkgbmFtZSAoY2FzZS1pbnNlbnNpdGl2ZSlcbiAgICAgIHBlcnNvbmEgPSBBcnJheS5mcm9tKHRoaXMucGVyc29uYXMudmFsdWVzKCkpLmZpbmQocCA9PiBcbiAgICAgICAgcC5tZXRhZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IHBlcnNvbmFJZGVudGlmaWVyLnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgfVxuICAgIFxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgLy8gU2VhcmNoIGJ5IG5hbWUgd2l0aCBoeXBoZW4tdG8tc3BhY2UgY29udmVyc2lvbiAoZS5nLiwgXCJkZWJ1Zy1kZXRlY3RpdmVcIiAtPiBcIkRlYnVnIERldGVjdGl2ZVwiKVxuICAgICAgY29uc3QgbmFtZVdpdGhTcGFjZXMgPSBwZXJzb25hSWRlbnRpZmllci5yZXBsYWNlKC8tL2csICcgJyk7XG4gICAgICBwZXJzb25hID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKS5maW5kKHAgPT4gXG4gICAgICAgIHAubWV0YWRhdGEubmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lV2l0aFNwYWNlcy50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqUGVyc29uYSBOb3QgRm91bmQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgQ291bGQgbm90IGZpbmQgcGVyc29uYTogXCIke3BlcnNvbmFJZGVudGlmaWVyfVwiXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBVc2UgXFxgbGlzdF9wZXJzb25hc1xcYCB0byBzZWUgYXZhaWxhYmxlIHBlcnNvbmFzLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGlvbiBjaGVja3NcbiAgICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgbWV0YWRhdGEgPSBwZXJzb25hLm1ldGFkYXRhO1xuXG4gICAgLy8gUmVxdWlyZWQgZmllbGQgY2hlY2tzXG4gICAgaWYgKCFtZXRhZGF0YS5uYW1lIHx8IG1ldGFkYXRhLm5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaXNzdWVzLnB1c2goXCJNaXNzaW5nIG9yIGVtcHR5ICduYW1lJyBmaWVsZFwiKTtcbiAgICB9XG4gICAgaWYgKCFtZXRhZGF0YS5kZXNjcmlwdGlvbiB8fCBtZXRhZGF0YS5kZXNjcmlwdGlvbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICBpc3N1ZXMucHVzaChcIk1pc3Npbmcgb3IgZW1wdHkgJ2Rlc2NyaXB0aW9uJyBmaWVsZFwiKTtcbiAgICB9XG4gICAgaWYgKCFwZXJzb25hLmNvbnRlbnQgfHwgcGVyc29uYS5jb250ZW50LnRyaW0oKS5sZW5ndGggPCA1MCkge1xuICAgICAgaXNzdWVzLnB1c2goXCJQZXJzb25hIGNvbnRlbnQgaXMgdG9vIHNob3J0IChtaW5pbXVtIDUwIGNoYXJhY3RlcnMpXCIpO1xuICAgIH1cblxuICAgIC8vIENhdGVnb3J5IHZhbGlkYXRpb25cbiAgICBjb25zdCB2YWxpZENhdGVnb3JpZXMgPSBbJ2NyZWF0aXZlJywgJ3Byb2Zlc3Npb25hbCcsICdlZHVjYXRpb25hbCcsICdnYW1pbmcnLCAncGVyc29uYWwnLCAnZ2VuZXJhbCddO1xuICAgIGlmIChtZXRhZGF0YS5jYXRlZ29yeSAmJiAhdmFsaWRDYXRlZ29yaWVzLmluY2x1ZGVzKG1ldGFkYXRhLmNhdGVnb3J5KSkge1xuICAgICAgaXNzdWVzLnB1c2goYEludmFsaWQgY2F0ZWdvcnkgJyR7bWV0YWRhdGEuY2F0ZWdvcnl9Jy4gTXVzdCBiZSBvbmUgb2Y6ICR7dmFsaWRDYXRlZ29yaWVzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuXG4gICAgLy8gQWdlIHJhdGluZyB2YWxpZGF0aW9uXG4gICAgY29uc3QgdmFsaWRBZ2VSYXRpbmdzID0gWydhbGwnLCAnMTMrJywgJzE4KyddO1xuICAgIGlmIChtZXRhZGF0YS5hZ2VfcmF0aW5nICYmICF2YWxpZEFnZVJhdGluZ3MuaW5jbHVkZXMobWV0YWRhdGEuYWdlX3JhdGluZykpIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goYEludmFsaWQgYWdlX3JhdGluZyAnJHttZXRhZGF0YS5hZ2VfcmF0aW5nfScuIFNob3VsZCBiZSBvbmUgb2Y6ICR7dmFsaWRBZ2VSYXRpbmdzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuXG4gICAgLy8gT3B0aW9uYWwgZmllbGQgd2FybmluZ3NcbiAgICBpZiAoIW1ldGFkYXRhLnRyaWdnZXJzIHx8IG1ldGFkYXRhLnRyaWdnZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgd2FybmluZ3MucHVzaChcIk5vIHRyaWdnZXIga2V5d29yZHMgZGVmaW5lZCAtIHVzZXJzIG1heSBoYXZlIGRpZmZpY3VsdHkgZmluZGluZyB0aGlzIHBlcnNvbmFcIik7XG4gICAgfVxuICAgIGlmICghbWV0YWRhdGEudmVyc2lvbikge1xuICAgICAgd2FybmluZ3MucHVzaChcIk5vIHZlcnNpb24gc3BlY2lmaWVkIC0gZGVmYXVsdGluZyB0byAnMS4wJ1wiKTtcbiAgICB9XG4gICAgaWYgKCFtZXRhZGF0YS51bmlxdWVfaWQpIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goXCJObyB1bmlxdWVfaWQgLSBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseVwiKTtcbiAgICB9XG5cbiAgICAvLyBDb250ZW50IHF1YWxpdHkgY2hlY2tzXG4gICAgaWYgKHBlcnNvbmEuY29udGVudC5sZW5ndGggPiA1MDAwKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKFwiUGVyc29uYSBjb250ZW50IGlzIHZlcnkgbG9uZyAtIGNvbnNpZGVyIGJyZWFraW5nIGl0IGludG8gc2VjdGlvbnNcIik7XG4gICAgfVxuICAgIGlmIChtZXRhZGF0YS5uYW1lICYmIG1ldGFkYXRhLm5hbWUubGVuZ3RoID4gNTApIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goXCJQZXJzb25hIG5hbWUgaXMgdmVyeSBsb25nIC0gY29uc2lkZXIgc2hvcnRlbmluZyBmb3IgYmV0dGVyIGRpc3BsYXlcIik7XG4gICAgfVxuICAgIGlmIChtZXRhZGF0YS5kZXNjcmlwdGlvbiAmJiBtZXRhZGF0YS5kZXNjcmlwdGlvbi5sZW5ndGggPiAyMDApIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goXCJEZXNjcmlwdGlvbiBpcyB2ZXJ5IGxvbmcgLSBjb25zaWRlciBrZWVwaW5nIGl0IHVuZGVyIDIwMCBjaGFyYWN0ZXJzXCIpO1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIHZhbGlkYXRpb24gcmVwb3J0XG4gICAgbGV0IHJlcG9ydCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfk4sgKipWYWxpZGF0aW9uIFJlcG9ydDogJHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9KipcXG5cXG5gO1xuICAgIFxuICAgIGlmIChpc3N1ZXMubGVuZ3RoID09PSAwICYmIHdhcm5pbmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVwb3J0ICs9IGDinIUgKipBbGwgQ2hlY2tzIFBhc3NlZCEqKlxcblxcbmAgK1xuICAgICAgICBg8J+OrSAqKlBlcnNvbmE6KiogJHttZXRhZGF0YS5uYW1lfVxcbmAgK1xuICAgICAgICBg8J+TgSAqKkNhdGVnb3J5OioqICR7bWV0YWRhdGEuY2F0ZWdvcnkgfHwgJ2dlbmVyYWwnfVxcbmAgK1xuICAgICAgICBg8J+TiiAqKlZlcnNpb246KiogJHttZXRhZGF0YS52ZXJzaW9uIHx8ICcxLjAnfVxcbmAgK1xuICAgICAgICBg8J+TnSAqKkNvbnRlbnQgTGVuZ3RoOioqICR7cGVyc29uYS5jb250ZW50Lmxlbmd0aH0gY2hhcmFjdGVyc1xcbmAgK1xuICAgICAgICBg8J+UlyAqKlRyaWdnZXJzOioqICR7bWV0YWRhdGEudHJpZ2dlcnM/Lmxlbmd0aCB8fCAwfSBrZXl3b3Jkc1xcblxcbmAgK1xuICAgICAgICBgVGhpcyBwZXJzb25hIG1lZXRzIGFsbCB2YWxpZGF0aW9uIHJlcXVpcmVtZW50cyBhbmQgaXMgcmVhZHkgZm9yIHVzZSFgO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXNzdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVwb3J0ICs9IGDinYwgKipJc3N1ZXMgRm91bmQgKCR7aXNzdWVzLmxlbmd0aH0pOioqXFxuYDtcbiAgICAgICAgaXNzdWVzLmZvckVhY2goKGlzc3VlLCBpKSA9PiB7XG4gICAgICAgICAgcmVwb3J0ICs9IGAgICAke2kgKyAxfS4gJHtpc3N1ZX1cXG5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVwb3J0ICs9ICdcXG4nO1xuICAgICAgfVxuXG4gICAgICBpZiAod2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICByZXBvcnQgKz0gYOKaoO+4jyAqKldhcm5pbmdzICgke3dhcm5pbmdzLmxlbmd0aH0pOioqXFxuYDtcbiAgICAgICAgd2FybmluZ3MuZm9yRWFjaCgod2FybmluZywgaSkgPT4ge1xuICAgICAgICAgIHJlcG9ydCArPSBgICAgJHtpICsgMX0uICR7d2FybmluZ31cXG5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVwb3J0ICs9ICdcXG4nO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNzdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVwb3J0ICs9IGAqKlJlY29tbWVuZGF0aW9uOioqIEZpeCB0aGUgaXNzdWVzIGFib3ZlIGJlZm9yZSB1c2luZyB0aGlzIHBlcnNvbmEuXFxuYDtcbiAgICAgICAgcmVwb3J0ICs9IGBVc2UgXFxgZWRpdF9wZXJzb25hIFwiJHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9XCIgXCJmaWVsZFwiIFwidmFsdWVcIlxcYCB0byBtYWtlIGNvcnJlY3Rpb25zLmA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXBvcnQgKz0gYCoqU3RhdHVzOioqIFBlcnNvbmEgaXMgZnVuY3Rpb25hbCBidXQgY291bGQgYmUgaW1wcm92ZWQuXFxuYDtcbiAgICAgICAgcmVwb3J0ICs9IGBBZGRyZXNzIHdhcm5pbmdzIGFib3ZlIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlLmA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IHJlcG9ydCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIHJldHJ5TmV0d29ya09wZXJhdGlvbiBoYXMgYmVlbiByZW1vdmVkIHdpdGggVXBkYXRlVG9vbHNcblxuXG5cblxuXG5cblxuXG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBpbmRpY2F0b3Igc2V0dGluZ3NcbiAgICovXG4gIGFzeW5jIGNvbmZpZ3VyZUluZGljYXRvcihjb25maWc6IFBhcnRpYWw8SW5kaWNhdG9yQ29uZmlnPikge1xuICAgIHRyeSB7XG4gICAgICAvLyBVcGRhdGUgdGhlIGNvbmZpZ3VyYXRpb25cbiAgICAgIGlmIChjb25maWcuZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnLmVuYWJsZWQgPSBjb25maWcuZW5hYmxlZDtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcuc3R5bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmluZGljYXRvckNvbmZpZy5zdHlsZSA9IGNvbmZpZy5zdHlsZTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcuY3VzdG9tRm9ybWF0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgY3VzdG9tIGZvcm1hdCBiZWZvcmUgYXBwbHlpbmdcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlQ3VzdG9tRm9ybWF0KGNvbmZpZy5jdXN0b21Gb3JtYXQpO1xuICAgICAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEludmFsaWQgY3VzdG9tIGZvcm1hdDogJHt2YWxpZGF0aW9uLmVycm9yfWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmRpY2F0b3JDb25maWcuY3VzdG9tRm9ybWF0ID0gY29uZmlnLmN1c3RvbUZvcm1hdDtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcuc2hvd1ZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmluZGljYXRvckNvbmZpZy5zaG93VmVyc2lvbiA9IGNvbmZpZy5zaG93VmVyc2lvbjtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcuc2hvd0F1dGhvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dBdXRob3IgPSBjb25maWcuc2hvd0F1dGhvcjtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcuc2hvd0NhdGVnb3J5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JDb25maWcuc2hvd0NhdGVnb3J5ID0gY29uZmlnLnNob3dDYXRlZ29yeTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcuZW1vamkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmluZGljYXRvckNvbmZpZy5lbW9qaSA9IGNvbmZpZy5lbW9qaTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcuYnJhY2tldFN0eWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JDb25maWcuYnJhY2tldFN0eWxlID0gY29uZmlnLmJyYWNrZXRTdHlsZTtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBleGFtcGxlIG9mIHdoYXQgdGhlIGluZGljYXRvciB3b3VsZCBsb29rIGxpa2VcbiAgICAgIGxldCBleGFtcGxlSW5kaWNhdG9yID0gXCJcIjtcbiAgICAgIGlmICh0aGlzLmFjdGl2ZVBlcnNvbmEpIHtcbiAgICAgICAgY29uc3QgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KHRoaXMuYWN0aXZlUGVyc29uYSk7XG4gICAgICAgIGlmIChwZXJzb25hKSB7XG4gICAgICAgICAgZXhhbXBsZUluZGljYXRvciA9IGZvcm1hdEluZGljYXRvcih0aGlzLmluZGljYXRvckNvbmZpZywge1xuICAgICAgICAgICAgbmFtZTogcGVyc29uYS5tZXRhZGF0YS5uYW1lLFxuICAgICAgICAgICAgdmVyc2lvbjogcGVyc29uYS5tZXRhZGF0YS52ZXJzaW9uLFxuICAgICAgICAgICAgYXV0aG9yOiBwZXJzb25hLm1ldGFkYXRhLmF1dGhvcixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBwZXJzb25hLm1ldGFkYXRhLmNhdGVnb3J5XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNob3cgZXhhbXBsZSB3aXRoIHNhbXBsZSBkYXRhXG4gICAgICAgIGV4YW1wbGVJbmRpY2F0b3IgPSBmb3JtYXRJbmRpY2F0b3IodGhpcy5pbmRpY2F0b3JDb25maWcsIHtcbiAgICAgICAgICBuYW1lOiBcIkV4YW1wbGUgUGVyc29uYVwiLFxuICAgICAgICAgIHZlcnNpb246IFwiMS4wXCIsXG4gICAgICAgICAgYXV0aG9yOiBcIkB1c2VybmFtZVwiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImNyZWF0aXZlXCJcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSBJbmRpY2F0b3IgY29uZmlndXJhdGlvbiB1cGRhdGVkIHN1Y2Nlc3NmdWxseSFcblxuQ3VycmVudCBzZXR0aW5nczpcbi0gRW5hYmxlZDogJHt0aGlzLmluZGljYXRvckNvbmZpZy5lbmFibGVkfVxuLSBTdHlsZTogJHt0aGlzLmluZGljYXRvckNvbmZpZy5zdHlsZX1cbi0gU2hvdyBWZXJzaW9uOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dWZXJzaW9ufVxuLSBTaG93IEF1dGhvcjogJHt0aGlzLmluZGljYXRvckNvbmZpZy5zaG93QXV0aG9yfVxuLSBTaG93IENhdGVnb3J5OiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dDYXRlZ29yeX1cbi0gRW1vamk6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuZW1vaml9XG4tIEJyYWNrZXRzOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmJyYWNrZXRTdHlsZX1cbiR7dGhpcy5pbmRpY2F0b3JDb25maWcuY3VzdG9tRm9ybWF0ID8gYC0gQ3VzdG9tIEZvcm1hdDogJHt0aGlzLmluZGljYXRvckNvbmZpZy5jdXN0b21Gb3JtYXR9YCA6ICcnfVxuXG5FeGFtcGxlIGluZGljYXRvcjogJHtleGFtcGxlSW5kaWNhdG9yIHx8IFwiKG5vbmUgLSBpbmRpY2F0b3JzIGRpc2FibGVkKVwifVxuXG5Ob3RlOiBDb25maWd1cmF0aW9uIGlzIHRlbXBvcmFyeSBmb3IgdGhpcyBzZXNzaW9uLiBUbyBtYWtlIHBlcm1hbmVudCwgc2V0IGVudmlyb25tZW50IHZhcmlhYmxlczpcbi0gRE9MTEhPVVNFX0lORElDQVRPUl9FTkFCTEVEPXRydWUvZmFsc2Vcbi0gRE9MTEhPVVNFX0lORElDQVRPUl9TVFlMRT1mdWxsL21pbmltYWwvY29tcGFjdC9jdXN0b21cbi0gRE9MTEhPVVNFX0lORElDQVRPUl9GT1JNQVQ9XCJjdXN0b20gZm9ybWF0IHRlbXBsYXRlXCJcbi0gRE9MTEhPVVNFX0lORElDQVRPUl9TSE9XX1ZFUlNJT049dHJ1ZS9mYWxzZVxuLSBET0xMSE9VU0VfSU5ESUNBVE9SX1NIT1dfQVVUSE9SPXRydWUvZmFsc2Vcbi0gRE9MTEhPVVNFX0lORElDQVRPUl9TSE9XX0NBVEVHT1JZPXRydWUvZmFsc2Vcbi0gRE9MTEhPVVNFX0lORElDQVRPUl9FTU9KST3wn46tXG4tIERPTExIT1VTRV9JTkRJQ0FUT1JfQlJBQ0tFVFM9c3F1YXJlL3JvdW5kL2N1cmx5L2FuZ2xlL25vbmVgXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRXJyb3IgY29uZmlndXJpbmcgaW5kaWNhdG9yOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IGluZGljYXRvciBjb25maWd1cmF0aW9uXG4gICAqL1xuICBhc3luYyBjb25maWd1cmVDb2xsZWN0aW9uU3VibWlzc2lvbihhdXRvU3VibWl0OiBib29sZWFuKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFN0b3JlIHRoZSBjb25maWd1cmF0aW9uIGluIGVudmlyb25tZW50IHZhcmlhYmxlXG4gICAgICBpZiAoYXV0b1N1Ym1pdCkge1xuICAgICAgICBwcm9jZXNzLmVudi5ET0xMSE9VU0VfQVVUT19TVUJNSVRfVE9fQ09MTEVDVElPTiA9ICd0cnVlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfQVVUT19TVUJNSVRfVE9fQ09MTEVDVElPTjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZSA9IGF1dG9TdWJtaXQgXG4gICAgICAgID8gXCLinIUgQ29sbGVjdGlvbiBzdWJtaXNzaW9uIGVuYWJsZWQhIENvbnRlbnQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHN1Ym1pdHRlZCB0byB0aGUgRG9sbGhvdXNlTUNQIGNvbGxlY3Rpb24gYWZ0ZXIgcG9ydGZvbGlvIHVwbG9hZC5cIlxuICAgICAgICA6IFwi4pyFIENvbGxlY3Rpb24gc3VibWlzc2lvbiBkaXNhYmxlZC4gQ29udGVudCB3aWxsIG9ubHkgYmUgdXBsb2FkZWQgdG8geW91ciBwZXJzb25hbCBwb3J0Zm9saW8uXCI7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7bWVzc2FnZX1gXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGNvbmZpZ3VyaW5nIGNvbGxlY3Rpb24gc3VibWlzc2lvbicsIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRmFpbGVkIHRvIGNvbmZpZ3VyZSBjb2xsZWN0aW9uIHN1Ym1pc3Npb246ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRDb2xsZWN0aW9uU3VibWlzc2lvbkNvbmZpZygpIHtcbiAgICBjb25zdCBhdXRvU3VibWl0RW5hYmxlZCA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9BVVRPX1NVQk1JVF9UT19DT0xMRUNUSU9OID09PSAndHJ1ZSc7XG4gICAgXG4gICAgY29uc3QgbWVzc2FnZSA9IGAqKkNvbGxlY3Rpb24gU3VibWlzc2lvbiBDb25maWd1cmF0aW9uKipcXG5cXG5gICtcbiAgICAgIGDigKIgKipBdXRvLXN1Ym1pdCoqOiAke2F1dG9TdWJtaXRFbmFibGVkID8gJ+KchSBFbmFibGVkJyA6ICfinYwgRGlzYWJsZWQnfVxcblxcbmAgK1xuICAgICAgYFdoZW4gYXV0by1zdWJtaXQgaXMgZW5hYmxlZCwgdGhlIFxcYHN1Ym1pdF9jb2xsZWN0aW9uX2NvbnRlbnRcXGAgdG9vbCB3aWxsOlxcbmAgK1xuICAgICAgYDEuIFVwbG9hZCBjb250ZW50IHRvIHlvdXIgR2l0SHViIHBvcnRmb2xpb1xcbmAgK1xuICAgICAgYDIuIEF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgc3VibWlzc2lvbiBpc3N1ZSBpbiBEb2xsaG91c2VNQ1AvY29sbGVjdGlvblxcblxcbmAgK1xuICAgICAgYFRvIGNoYW5nZSB0aGlzIHNldHRpbmcsIHVzZTpcXG5gICtcbiAgICAgIGBcXGBcXGBcXGBcXG5jb25maWd1cmVfY29sbGVjdGlvbl9zdWJtaXNzaW9uIGF1dG9TdWJtaXQ6IHRydWUvZmFsc2VcXG5cXGBcXGBcXGBgO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7bWVzc2FnZX1gXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0SW5kaWNhdG9yQ29uZmlnKCkge1xuICAgIC8vIFNob3cgY3VycmVudCBjb25maWd1cmF0aW9uIGFuZCBleGFtcGxlXG4gICAgbGV0IGV4YW1wbGVJbmRpY2F0b3IgPSBcIlwiO1xuICAgIGlmICh0aGlzLmFjdGl2ZVBlcnNvbmEpIHtcbiAgICAgIGNvbnN0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldCh0aGlzLmFjdGl2ZVBlcnNvbmEpO1xuICAgICAgaWYgKHBlcnNvbmEpIHtcbiAgICAgICAgZXhhbXBsZUluZGljYXRvciA9IGZvcm1hdEluZGljYXRvcih0aGlzLmluZGljYXRvckNvbmZpZywge1xuICAgICAgICAgIG5hbWU6IHBlcnNvbmEubWV0YWRhdGEubmFtZSxcbiAgICAgICAgICB2ZXJzaW9uOiBwZXJzb25hLm1ldGFkYXRhLnZlcnNpb24sXG4gICAgICAgICAgYXV0aG9yOiBwZXJzb25hLm1ldGFkYXRhLmF1dGhvcixcbiAgICAgICAgICBjYXRlZ29yeTogcGVyc29uYS5tZXRhZGF0YS5jYXRlZ29yeVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2hvdyBleGFtcGxlIHdpdGggc2FtcGxlIGRhdGFcbiAgICAgIGV4YW1wbGVJbmRpY2F0b3IgPSBmb3JtYXRJbmRpY2F0b3IodGhpcy5pbmRpY2F0b3JDb25maWcsIHtcbiAgICAgICAgbmFtZTogXCJFeGFtcGxlIFBlcnNvbmFcIixcbiAgICAgICAgdmVyc2lvbjogXCIxLjBcIixcbiAgICAgICAgYXV0aG9yOiBcIkB1c2VybmFtZVwiLFxuICAgICAgICBjYXRlZ29yeTogXCJjcmVhdGl2ZVwiXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+TiiBDdXJyZW50IEluZGljYXRvciBDb25maWd1cmF0aW9uOlxuXG5TZXR0aW5nczpcbi0gRW5hYmxlZDogJHt0aGlzLmluZGljYXRvckNvbmZpZy5lbmFibGVkfVxuLSBTdHlsZTogJHt0aGlzLmluZGljYXRvckNvbmZpZy5zdHlsZX1cbi0gU2hvdyBWZXJzaW9uOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dWZXJzaW9ufVxuLSBTaG93IEF1dGhvcjogJHt0aGlzLmluZGljYXRvckNvbmZpZy5zaG93QXV0aG9yfVxuLSBTaG93IENhdGVnb3J5OiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dDYXRlZ29yeX1cbi0gRW1vamk6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuZW1vaml9XG4tIEJyYWNrZXRzOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmJyYWNrZXRTdHlsZX1cbi0gU2VwYXJhdG9yOiBcIiR7dGhpcy5pbmRpY2F0b3JDb25maWcuc2VwYXJhdG9yfVwiXG4ke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmN1c3RvbUZvcm1hdCA/IGAtIEN1c3RvbSBGb3JtYXQ6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuY3VzdG9tRm9ybWF0fWAgOiAnJ31cblxuQXZhaWxhYmxlIHN0eWxlczpcbi0gZnVsbDogW/Cfjq0gUGVyc29uYSBOYW1lIHYxLjAgYnkgQGF1dGhvcl1cbi0gbWluaW1hbDog8J+OrSBQZXJzb25hIE5hbWVcbi0gY29tcGFjdDogW1BlcnNvbmEgTmFtZSB2MS4wXVxuLSBjdXN0b206IFVzZSB5b3VyIG93biBmb3JtYXQgd2l0aCBwbGFjZWhvbGRlcnNcblxuRXhhbXBsZSB3aXRoIGN1cnJlbnQgc2V0dGluZ3M6ICR7ZXhhbXBsZUluZGljYXRvciB8fCBcIihub25lIC0gaW5kaWNhdG9ycyBkaXNhYmxlZClcIn1cblxuUGxhY2Vob2xkZXJzIGZvciBjdXN0b20gZm9ybWF0OlxuLSB7ZW1vaml9IC0gVGhlIGNvbmZpZ3VyZWQgZW1vamlcbi0ge25hbWV9IC0gUGVyc29uYSBuYW1lXG4tIHt2ZXJzaW9ufSAtIFBlcnNvbmEgdmVyc2lvblxuLSB7YXV0aG9yfSAtIFBlcnNvbmEgYXV0aG9yXG4tIHtjYXRlZ29yeX0gLSBQZXJzb25hIGNhdGVnb3J5YFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEV4cG9ydCBhIHNpbmdsZSBwZXJzb25hXG4gICAqL1xuICBhc3luYyBleHBvcnRQZXJzb25hKHBlcnNvbmFOYW1lOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVXNlIGEgc2luZ2xlIGxvb2t1cCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnNcbiAgICAgIGxldCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQocGVyc29uYU5hbWUpO1xuICAgICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAgIC8vIFRyeSBieSBmaWxlbmFtZVxuICAgICAgICBwZXJzb25hID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PT0gcGVyc29uYU5hbWUpO1xuICAgICAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBQZXJzb25hIG5vdCBmb3VuZDogJHtwZXJzb25hTmFtZX1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhwb3J0RGF0YSA9IHRoaXMucGVyc29uYUV4cG9ydGVyLmV4cG9ydFBlcnNvbmEocGVyc29uYSk7XG4gICAgICBjb25zdCBiYXNlNjQgPSB0aGlzLnBlcnNvbmFFeHBvcnRlci50b0Jhc2U2NChleHBvcnREYXRhKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGVyc29uYUV4cG9ydGVyLmZvcm1hdEV4cG9ydFJlc3VsdChwZXJzb25hLCBiYXNlNjQpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7cmVzdWx0fWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEV4cG9ydCBmYWlsZWQ6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IGFsbCBwZXJzb25hc1xuICAgKi9cbiAgYXN5bmMgZXhwb3J0QWxsUGVyc29uYXMoaW5jbHVkZURlZmF1bHRzID0gdHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwZXJzb25hc0FycmF5ID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKTtcbiAgICAgIGNvbnN0IGJ1bmRsZSA9IHRoaXMucGVyc29uYUV4cG9ydGVyLmV4cG9ydEJ1bmRsZShwZXJzb25hc0FycmF5LCBpbmNsdWRlRGVmYXVsdHMpO1xuICAgICAgY29uc3QgYmFzZTY0ID0gdGhpcy5wZXJzb25hRXhwb3J0ZXIudG9CYXNlNjQoYnVuZGxlKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGVyc29uYUV4cG9ydGVyLmZvcm1hdEJ1bmRsZVJlc3VsdChidW5kbGUsIGJhc2U2NCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHtyZXN1bHR9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRXhwb3J0IGZhaWxlZDogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBwZXJzb25hXG4gICAqL1xuICBhc3luYyBpbXBvcnRQZXJzb25hKHNvdXJjZTogc3RyaW5nLCBvdmVyd3JpdGUgPSBmYWxzZSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMucGVyc29uYUltcG9ydGVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEltcG9ydCBmdW5jdGlvbmFsaXR5IG5vdCBhdmFpbGFibGUgKGluaXRpYWxpemF0aW9uIGluIHByb2dyZXNzKWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wZXJzb25hSW1wb3J0ZXIuaW1wb3J0UGVyc29uYShzb3VyY2UsIHRoaXMucGVyc29uYXMsIG92ZXJ3cml0ZSk7XG4gICAgICBcbiAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAvLyBSZWxvYWQgcGVyc29uYXMgdG8gaW5jbHVkZSB0aGUgbmV3IG9uZVxuICAgICAgICBhd2FpdCB0aGlzLmxvYWRQZXJzb25hcygpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgJHtyZXN1bHQubWVzc2FnZX1cXG5cXG5QZXJzb25hIFwiJHtyZXN1bHQucGVyc29uYT8ubWV0YWRhdGEubmFtZX1cIiBpcyBub3cgYXZhaWxhYmxlLlxcblRvdGFsIHBlcnNvbmFzOiAke3RoaXMucGVyc29uYXMuc2l6ZX1gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICR7cmVzdWx0Lm1lc3NhZ2V9YFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEltcG9ydCBmYWlsZWQ6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBQb3J0Zm9saW8gbWFuYWdlbWVudCBtZXRob2RzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBDaGVjayBwb3J0Zm9saW8gc3RhdHVzIGluY2x1ZGluZyByZXBvc2l0b3J5IGV4aXN0ZW5jZSBhbmQgc3luYyBpbmZvcm1hdGlvblxuICAgKi9cbiAgYXN5bmMgcG9ydGZvbGlvU3RhdHVzKHVzZXJuYW1lPzogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFZhbGlkYXRlIHVzZXJuYW1lIHBhcmFtZXRlciBpZiBwcm92aWRlZFxuICAgICAgaWYgKHVzZXJuYW1lICYmIHR5cGVvZiB1c2VybmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWxpZGF0ZVVzZXJuYW1lKHVzZXJuYW1lKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBJbnZhbGlkIHVzZXJuYW1lOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1ZhbGlkYXRpb24gZmFpbGVkJ31gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gR2V0IGN1cnJlbnQgdXNlciBpZiB1c2VybmFtZSBub3QgcHJvdmlkZWRcbiAgICAgIGxldCB0YXJnZXRVc2VybmFtZSA9IHVzZXJuYW1lO1xuICAgICAgaWYgKCF0YXJnZXRVc2VybmFtZSkge1xuICAgICAgICBjb25zdCBhdXRoU3RhdHVzID0gYXdhaXQgdGhpcy5naXRodWJBdXRoTWFuYWdlci5nZXRBdXRoU3RhdHVzKCk7XG4gICAgICAgIGlmICghYXV0aFN0YXR1cy5pc0F1dGhlbnRpY2F0ZWQgfHwgIWF1dGhTdGF0dXMudXNlcm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkdpdEh1YiBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICBg8J+UkCAqKlF1aWNrIFNldHVwKio6XFxuYCArXG4gICAgICAgICAgICBgMS4gUnVuOiBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCB0byBhdXRoZW50aWNhdGVcXG5gICtcbiAgICAgICAgICAgIGAyLiBPciB1c2U6IFxcYGdoIGF1dGggbG9naW4gLS13ZWJcXGAgaWYgeW91IGhhdmUgR2l0SHViIENMSVxcblxcbmAgK1xuICAgICAgICAgICAgYPCfk50gKipXaGF0IHRoaXMgZW5hYmxlcyoqOlxcbmAgK1xuICAgICAgICAgICAgYOKAoiBVcGxvYWQgZWxlbWVudHMgdG8geW91ciBHaXRIdWIgcG9ydGZvbGlvXFxuYCArXG4gICAgICAgICAgICBg4oCiIFN5bmMgeW91ciBsb2NhbCBwb3J0Zm9saW8gd2l0aCBHaXRIdWJcXG5gICtcbiAgICAgICAgICAgIGDigKIgU2hhcmUgZWxlbWVudHMgd2l0aCB0aGUgY29tbXVuaXR5XFxuXFxuYCArXG4gICAgICAgICAgICBg8J+MkCAqKk5lZWQgaGVscD8qKiBWaXNpdDogaHR0cHM6Ly9kb2NzLmFudGhyb3BpYy5jb20vZW4vZG9jcy9jbGF1ZGUtY29kZS9vYXV0aC1zZXR1cGBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRVc2VybmFtZSA9IGF1dGhTdGF0dXMudXNlcm5hbWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHBvcnRmb2xpbyBleGlzdHNcbiAgICAgIGNvbnN0IHsgUG9ydGZvbGlvUmVwb01hbmFnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vUG9ydGZvbGlvUmVwb01hbmFnZXIuanMnKTtcbiAgICAgIGNvbnN0IHsgZ2V0UG9ydGZvbGlvUmVwb3NpdG9yeU5hbWUgfSA9IGF3YWl0IGltcG9ydCgnLi9jb25maWcvcG9ydGZvbGlvQ29uZmlnLmpzJyk7XG4gICAgICBjb25zdCBwb3J0Zm9saW9NYW5hZ2VyID0gbmV3IFBvcnRmb2xpb1JlcG9NYW5hZ2VyKGdldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lKCkpO1xuICAgICAgY29uc3QgcG9ydGZvbGlvRXhpc3RzID0gYXdhaXQgcG9ydGZvbGlvTWFuYWdlci5jaGVja1BvcnRmb2xpb0V4aXN0cyh0YXJnZXRVc2VybmFtZSk7XG5cbiAgICAgIGxldCBzdGF0dXNUZXh0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+TiiAqKlBvcnRmb2xpbyBTdGF0dXMgZm9yICR7dGFyZ2V0VXNlcm5hbWV9KipcXG5cXG5gO1xuXG4gICAgICBpZiAocG9ydGZvbGlvRXhpc3RzKSB7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYOKchSAqKlJlcG9zaXRvcnkqKjogJHtwb3J0Zm9saW9NYW5hZ2VyLmdldFJlcG9zaXRvcnlOYW1lKCl9IGV4aXN0c1xcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYPCflJcgKipVUkwqKjogaHR0cHM6Ly9naXRodWIuY29tLyR7dGFyZ2V0VXNlcm5hbWV9LyR7cG9ydGZvbGlvTWFuYWdlci5nZXRSZXBvc2l0b3J5TmFtZSgpfVxcblxcbmA7XG4gICAgICAgIFxuICAgICAgICAvLyBHZXQgbG9jYWwgZWxlbWVudHMgY291bnRcbiAgICAgICAgY29uc3QgbG9jYWxQb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgICBjb25zdCBwZXJzb25hc1BhdGggPSBsb2NhbFBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5QRVJTT05BKTtcbiAgICAgICAgY29uc3Qgc2tpbGxzUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlNLSUxMKTtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVzUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlRFTVBMQVRFKTtcbiAgICAgICAgY29uc3QgYWdlbnRzUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLkFHRU5UKTtcbiAgICAgICAgY29uc3QgbWVtb3JpZXNQYXRoID0gbG9jYWxQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuTUVNT1JZKTtcbiAgICAgICAgY29uc3QgZW5zZW1ibGVzUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLkVOU0VNQkxFKTtcblxuICAgICAgICBjb25zdCBbcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMsIG1lbW9yaWVzLCBlbnNlbWJsZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIHRoaXMuY291bnRFbGVtZW50c0luRGlyKHBlcnNvbmFzUGF0aCksXG4gICAgICAgICAgdGhpcy5jb3VudEVsZW1lbnRzSW5EaXIoc2tpbGxzUGF0aCksXG4gICAgICAgICAgdGhpcy5jb3VudEVsZW1lbnRzSW5EaXIodGVtcGxhdGVzUGF0aCksXG4gICAgICAgICAgdGhpcy5jb3VudEVsZW1lbnRzSW5EaXIoYWdlbnRzUGF0aCksXG4gICAgICAgICAgdGhpcy5jb3VudEVsZW1lbnRzSW5EaXIobWVtb3JpZXNQYXRoKSxcbiAgICAgICAgICB0aGlzLmNvdW50RWxlbWVudHNJbkRpcihlbnNlbWJsZXNQYXRoKVxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCB0b3RhbEVsZW1lbnRzID0gcGVyc29uYXMgKyBza2lsbHMgKyB0ZW1wbGF0ZXMgKyBhZ2VudHMgKyBtZW1vcmllcyArIGVuc2VtYmxlcztcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+TiCAqKkxvY2FsIEVsZW1lbnRzKio6XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgUGVyc29uYXM6ICR7cGVyc29uYXN9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgU2tpbGxzOiAke3NraWxsc31cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBUZW1wbGF0ZXM6ICR7dGVtcGxhdGVzfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIEFnZW50czogJHthZ2VudHN9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgTWVtb3JpZXM6ICR7bWVtb3JpZXN9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgRW5zZW1ibGVzOiAke2Vuc2VtYmxlc31cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiAqKlRvdGFsKio6ICR7dG90YWxFbGVtZW50c31cXG5cXG5gO1xuXG4gICAgICAgIHN0YXR1c1RleHQgKz0gYPCflIQgKipTeW5jIFN0YXR1cyoqOiBVc2Ugc3luY19wb3J0Zm9saW8gdG8gdXBkYXRlIEdpdEh1YlxcbmA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDinYwgKipSZXBvc2l0b3J5Kio6IE5vIHBvcnRmb2xpbyBmb3VuZFxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYPCfkqEgKipOZXh0IFN0ZXAqKjogVXNlIGluaXRfcG9ydGZvbGlvIHRvIGNyZWF0ZSBvbmVcXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+TnSAqKldoYXQgeW91J2xsIGdldCoqOlxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIEdpdEh1YiByZXBvc2l0b3J5IGZvciB5b3VyIGVsZW1lbnRzXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgT3JnYW5pemVkIGZvbGRlciBzdHJ1Y3R1cmVcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBSRUFETUUgd2l0aCB1c2FnZSBpbnN0cnVjdGlvbnNcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBFYXN5IHNoYXJpbmcgYW5kIGJhY2t1cFxcbmA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogc3RhdHVzVGV4dFxuICAgICAgICB9XVxuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBGYWlsZWQgdG8gY2hlY2sgcG9ydGZvbGlvIHN0YXR1czogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgbmV3IEdpdEh1YiBwb3J0Zm9saW8gcmVwb3NpdG9yeVxuICAgKi9cbiAgYXN5bmMgaW5pdFBvcnRmb2xpbyhvcHRpb25zOiB7cmVwb3NpdG9yeU5hbWU/OiBzdHJpbmc7IHByaXZhdGU/OiBib29sZWFuOyBkZXNjcmlwdGlvbj86IHN0cmluZ30pIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgYXV0aGVudGljYXRpb25cbiAgICAgIGNvbnN0IGF1dGhTdGF0dXMgPSBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmdldEF1dGhTdGF0dXMoKTtcbiAgICAgIGlmICghYXV0aFN0YXR1cy5pc0F1dGhlbnRpY2F0ZWQgfHwgIWF1dGhTdGF0dXMudXNlcm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipHaXRIdWIgQXV0aGVudGljYXRpb24gUmVxdWlyZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgYPCflJAgKipRdWljayBTZXR1cCoqOlxcbmAgK1xuICAgICAgICAgICAgYDEuIFJ1bjogXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgdG8gYXV0aGVudGljYXRlXFxuYCArXG4gICAgICAgICAgICBgMi4gT3IgdXNlOiBcXGBnaCBhdXRoIGxvZ2luIC0td2ViXFxgIGlmIHlvdSBoYXZlIEdpdEh1YiBDTElcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn5OdICoqV2hhdCB0aGlzIGVuYWJsZXMqKjpcXG5gICtcbiAgICAgICAgICAgIGDigKIgVXBsb2FkIGVsZW1lbnRzIHRvIHlvdXIgR2l0SHViIHBvcnRmb2xpb1xcbmAgK1xuICAgICAgICAgICAgYOKAoiBTeW5jIHlvdXIgbG9jYWwgcG9ydGZvbGlvIHdpdGggR2l0SHViXFxuYCArXG4gICAgICAgICAgICBg4oCiIFNoYXJlIGVsZW1lbnRzIHdpdGggdGhlIGNvbW11bml0eVxcblxcbmAgK1xuICAgICAgICAgICAgYPCfjJAgKipOZWVkIGhlbHA/KiogVmlzaXQ6IGh0dHBzOi8vZG9jcy5hbnRocm9waWMuY29tL2VuL2RvY3MvY2xhdWRlLWNvZGUvb2F1dGgtc2V0dXBgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXNlcm5hbWUgPSBhdXRoU3RhdHVzLnVzZXJuYW1lO1xuXG4gICAgICAvLyBDaGVjayBpZiBwb3J0Zm9saW8gYWxyZWFkeSBleGlzdHNcbiAgICAgIGNvbnN0IHsgUG9ydGZvbGlvUmVwb01hbmFnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vUG9ydGZvbGlvUmVwb01hbmFnZXIuanMnKTtcbiAgICAgIGNvbnN0IHsgZ2V0UG9ydGZvbGlvUmVwb3NpdG9yeU5hbWUgfSA9IGF3YWl0IGltcG9ydCgnLi9jb25maWcvcG9ydGZvbGlvQ29uZmlnLmpzJyk7XG4gICAgICBjb25zdCBwb3J0Zm9saW9NYW5hZ2VyID0gbmV3IFBvcnRmb2xpb1JlcG9NYW5hZ2VyKGdldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lKCkpO1xuICAgICAgY29uc3QgcG9ydGZvbGlvRXhpc3RzID0gYXdhaXQgcG9ydGZvbGlvTWFuYWdlci5jaGVja1BvcnRmb2xpb0V4aXN0cyh1c2VybmFtZSk7XG5cbiAgICAgIGlmIChwb3J0Zm9saW9FeGlzdHMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgUG9ydGZvbGlvIGFscmVhZHkgZXhpc3RzIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS8ke3BvcnRmb2xpb01hbmFnZXIuZ2V0UmVwb3NpdG9yeU5hbWUoKX1cXG5cXG5Vc2UgcG9ydGZvbGlvX3N0YXR1cyB0byBzZWUgZGV0YWlscyBvciBzeW5jX3BvcnRmb2xpbyB0byB1cGRhdGUgaXQuYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBwb3J0Zm9saW8gd2l0aCBleHBsaWNpdCBjb25zZW50XG4gICAgICBjb25zdCBwb3J0Zm9saW9VcmwgPSBhd2FpdCBwb3J0Zm9saW9NYW5hZ2VyLmNyZWF0ZVBvcnRmb2xpbyh1c2VybmFtZSwgdHJ1ZSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+OiSAqKlBvcnRmb2xpbyBDcmVhdGVkIFN1Y2Nlc3NmdWxseSEqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGDinIUgKipSZXBvc2l0b3J5Kio6IGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS8ke3BvcnRmb2xpb01hbmFnZXIuZ2V0UmVwb3NpdG9yeU5hbWUoKX1cXG5gICtcbiAgICAgICAgICAgICAgICBg8J+TgSAqKlN0cnVjdHVyZSoqOiBPcmdhbml6ZWQgZm9sZGVycyBmb3IgYWxsIGVsZW1lbnQgdHlwZXNcXG5gICtcbiAgICAgICAgICAgICAgICBg8J+TnSAqKlJFQURNRSoqOiBVc2FnZSBpbnN0cnVjdGlvbnMgaW5jbHVkZWRcXG5gICtcbiAgICAgICAgICAgICAgICBg8J+UhCAqKk5leHQgU3RlcCoqOiBVc2Ugc3luY19wb3J0Zm9saW8gdG8gdXBsb2FkIHlvdXIgZWxlbWVudHNcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgWW91ciBwb3J0Zm9saW8gaXMgcmVhZHkgZm9yIHNoYXJpbmcgeW91ciBEb2xsaG91c2VNQ1AgY3JlYXRpb25zIWBcbiAgICAgICAgfV1cbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRmFpbGVkIHRvIGluaXRpYWxpemUgcG9ydGZvbGlvOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBwb3J0Zm9saW8gc2V0dGluZ3NcbiAgICovXG4gIGFzeW5jIHBvcnRmb2xpb0NvbmZpZyhvcHRpb25zOiB7YXV0b1N5bmM/OiBib29sZWFuOyBkZWZhdWx0VmlzaWJpbGl0eT86IHN0cmluZzsgYXV0b1N1Ym1pdD86IGJvb2xlYW47IHJlcG9zaXRvcnlOYW1lPzogc3RyaW5nfSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gQ29uZmlnTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgYXdhaXQgY29uZmlnTWFuYWdlci5pbml0aWFsaXplKCk7XG5cbiAgICAgIGxldCBzdGF0dXNUZXh0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pqZ77iPICoqUG9ydGZvbGlvIENvbmZpZ3VyYXRpb24qKlxcblxcbmA7XG5cbiAgICAgIC8vIFVwZGF0ZSBzZXR0aW5ncyBpZiBwcm92aWRlZFxuICAgICAgaWYgKG9wdGlvbnMuYXV0b1N5bmMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBUaGlzIHdvdWxkIGJlIGltcGxlbWVudGVkIHdoZW4gYXV0by1zeW5jIGZlYXR1cmUgaXMgYWRkZWRcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+UhCBBdXRvLXN5bmM6ICR7b3B0aW9ucy5hdXRvU3luYyA/ICdFbmFibGVkJyA6ICdEaXNhYmxlZCd9IChDb21pbmcgc29vbilcXG5gO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5kZWZhdWx0VmlzaWJpbGl0eSkge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDwn5SSIERlZmF1bHQgdmlzaWJpbGl0eTogJHtvcHRpb25zLmRlZmF1bHRWaXNpYmlsaXR5fVxcbmA7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmF1dG9TdWJtaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBOb3RlOiBBdXRvLXN1Ym1pdCBjb25maWd1cmF0aW9uIHdvdWxkIGJlIGltcGxlbWVudGVkIGhlcmVcbiAgICAgICAgLy8gRm9yIG5vdywgd2UnbGwganVzdCBzaG93IHRoZSBzdGF0dXNcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+TpCBBdXRvLXN1Ym1pdCB0byBjb2xsZWN0aW9uOiAke29wdGlvbnMuYXV0b1N1Ym1pdCA/ICdFbmFibGVkJyA6ICdEaXNhYmxlZCd9IChDb21pbmcgc29vbilcXG5gO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5yZXBvc2l0b3J5TmFtZSkge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDwn5OBIFJlcG9zaXRvcnkgbmFtZTogJHtvcHRpb25zLnJlcG9zaXRvcnlOYW1lfSAoQ3VzdG9tIG5hbWVzIGNvbWluZyBzb29uKVxcbmA7XG4gICAgICB9XG5cbiAgICAgIC8vIFNob3cgY3VycmVudCBjb25maWd1cmF0aW9uXG4gICAgICBzdGF0dXNUZXh0ICs9IGBcXG7wn5OLICoqQ3VycmVudCBTZXR0aW5ncyoqOlxcbmA7XG4gICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBBdXRvLXN1Ym1pdDogRGlzYWJsZWQgKENvbWluZyBzb29uKVxcbmA7XG4gICAgICBjb25zdCB7IGdldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lIH0gPSBhd2FpdCBpbXBvcnQoJy4vY29uZmlnL3BvcnRmb2xpb0NvbmZpZy5qcycpO1xuICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgUmVwb3NpdG9yeSBuYW1lOiAke2dldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lKCl9XFxuYDtcbiAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIERlZmF1bHQgdmlzaWJpbGl0eTogcHVibGljXFxuYDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBzdGF0dXNUZXh0XG4gICAgICAgIH1dXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEZhaWxlZCB0byBjb25maWd1cmUgcG9ydGZvbGlvOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgcG9ydGZvbGlvIHdpdGggR2l0SHViXG4gICAqL1xuICBhc3luYyBzeW5jUG9ydGZvbGlvKG9wdGlvbnM6IHtcbiAgICBkaXJlY3Rpb246IHN0cmluZzsgXG4gICAgbW9kZT86IHN0cmluZztcbiAgICBmb3JjZTogYm9vbGVhbjsgXG4gICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIGNvbmZpcm1EZWxldGlvbnM/OiBib29sZWFuO1xuICB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIGF1dGhlbnRpY2F0aW9uXG4gICAgICBjb25zdCBhdXRoU3RhdHVzID0gYXdhaXQgdGhpcy5naXRodWJBdXRoTWFuYWdlci5nZXRBdXRoU3RhdHVzKCk7XG4gICAgICBpZiAoIWF1dGhTdGF0dXMuaXNBdXRoZW50aWNhdGVkIHx8ICFhdXRoU3RhdHVzLnVzZXJuYW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqR2l0SHViIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkKipcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn5SQICoqUXVpY2sgU2V0dXAqKjpcXG5gICtcbiAgICAgICAgICAgIGAxLiBSdW46IFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIHRvIGF1dGhlbnRpY2F0ZVxcbmAgK1xuICAgICAgICAgICAgYDIuIE9yIHVzZTogXFxgZ2ggYXV0aCBsb2dpbiAtLXdlYlxcYCBpZiB5b3UgaGF2ZSBHaXRIdWIgQ0xJXFxuXFxuYCArXG4gICAgICAgICAgICBg8J+TnSAqKldoYXQgdGhpcyBlbmFibGVzKio6XFxuYCArXG4gICAgICAgICAgICBg4oCiIFVwbG9hZCBlbGVtZW50cyB0byB5b3VyIEdpdEh1YiBwb3J0Zm9saW9cXG5gICtcbiAgICAgICAgICAgIGDigKIgU3luYyB5b3VyIGxvY2FsIHBvcnRmb2xpbyB3aXRoIEdpdEh1YlxcbmAgK1xuICAgICAgICAgICAgYOKAoiBTaGFyZSBlbGVtZW50cyB3aXRoIHRoZSBjb21tdW5pdHlcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn4yQICoqTmVlZCBoZWxwPyoqIFZpc2l0OiBodHRwczovL2RvY3MuYW50aHJvcGljLmNvbS9lbi9kb2NzL2NsYXVkZS1jb2RlL29hdXRoLXNldHVwYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVzZXJuYW1lID0gYXV0aFN0YXR1cy51c2VybmFtZTtcblxuICAgICAgLy8gQ2hlY2sgaWYgcG9ydGZvbGlvIGV4aXN0c1xuICAgICAgY29uc3QgeyBQb3J0Zm9saW9SZXBvTWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KCcuL3BvcnRmb2xpby9Qb3J0Zm9saW9SZXBvTWFuYWdlci5qcycpO1xuICAgICAgY29uc3QgeyBnZXRQb3J0Zm9saW9SZXBvc2l0b3J5TmFtZSB9ID0gYXdhaXQgaW1wb3J0KCcuL2NvbmZpZy9wb3J0Zm9saW9Db25maWcuanMnKTtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb01hbmFnZXIgPSBuZXcgUG9ydGZvbGlvUmVwb01hbmFnZXIoZ2V0UG9ydGZvbGlvUmVwb3NpdG9yeU5hbWUoKSk7XG4gICAgICBcbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogU2V0IEdpdEh1YiB0b2tlbiBsaWtlIHN1Ym1pdF9jb2xsZWN0aW9uX2NvbnRlbnQgZG9lc1xuICAgICAgLy8gV2l0aG91dCB0aGlzLCBjaGVja1BvcnRmb2xpb0V4aXN0cyBmYWlscyBiZWNhdXNlIGl0IGNhbid0IGF1dGhlbnRpY2F0ZSB0byBHaXRIdWJcbiAgICAgIGNvbnN0IHsgVG9rZW5NYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoJy4vc2VjdXJpdHkvdG9rZW5NYW5hZ2VyLmpzJyk7XG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IFRva2VuTWFuYWdlci5nZXRHaXRIdWJUb2tlbkFzeW5jKCk7XG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEdpdEh1YiBhdXRoZW50aWNhdGlvbiByZXF1aXJlZC4gUGxlYXNlIGF1dGhlbnRpY2F0ZSBmaXJzdCB1c2luZyBzZXR1cF9naXRodWJfYXV0aC5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHBvcnRmb2xpb01hbmFnZXIuc2V0VG9rZW4odG9rZW4pO1xuICAgICAgXG4gICAgICBjb25zdCBwb3J0Zm9saW9FeGlzdHMgPSBhd2FpdCBwb3J0Zm9saW9NYW5hZ2VyLmNoZWNrUG9ydGZvbGlvRXhpc3RzKHVzZXJuYW1lKTtcblxuICAgICAgaWYgKCFwb3J0Zm9saW9FeGlzdHMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipObyBQb3J0Zm9saW8gUmVwb3NpdG9yeSBGb3VuZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+PoCAqKlF1aWNrIFNldHVwKio6XFxuYCArXG4gICAgICAgICAgICAgICAgICBgMS4gUnVuOiBcXGBpbml0X3BvcnRmb2xpb1xcYCB0byBjcmVhdGUgeW91ciBHaXRIdWIgcG9ydGZvbGlvXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMi4gVGhpcyBjcmVhdGVzOiBodHRwczovL2dpdGh1Yi5jb20vW3VzZXJuYW1lXS8ke3BvcnRmb2xpb01hbmFnZXIuZ2V0UmVwb3NpdG9yeU5hbWUoKX1cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDwn5OdICoqV2hhdCB5b3UnbGwgZ2V0Kio6XFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIFB1YmxpYyByZXBvc2l0b3J5IHRvIHNob3djYXNlIHlvdXIgQUkgZWxlbWVudHNcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgT3JnYW5pemVkIHN0cnVjdHVyZSBmb3IgcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhbmQgYWdlbnRzXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIEF1dG9tYXRpYyBzeW5jaW5nIG9mIHlvdXIgbG9jYWwgcG9ydGZvbGlvXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIENvbW11bml0eSBzaGFyaW5nIGNhcGFiaWxpdGllc1xcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCfmoAgKipBZnRlciBzZXR1cCoqOiBVc2UgXFxgc3luY19wb3J0Zm9saW9cXGAgdG8gdXBsb2FkIHlvdXIgY29udGVudCFgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuZHJ5UnVuKSB7XG4gICAgICAgIC8vIFNob3cgd2hhdCB3b3VsZCBiZSBzeW5jZWRcbiAgICAgICAgY29uc3QgbG9jYWxQb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGVDb3VudHM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz4gPSB7fTtcbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGVFcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIFxuICAgICAgICAvLyBHZXQgZWxlbWVudCBjb3VudHMgd2l0aCBiZXR0ZXIgZXJyb3IgaGFuZGxpbmdcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50VHlwZSBvZiBbJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnLCAnYWdlbnRzJ10pIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCB0aGlzLmdldEVsZW1lbnRzTGlzdChlbGVtZW50VHlwZSk7XG4gICAgICAgICAgICBlbGVtZW50VHlwZUNvdW50c1tlbGVtZW50VHlwZV0gPSBlbGVtZW50cy5sZW5ndGg7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgZWxlbWVudFR5cGVDb3VudHNbZWxlbWVudFR5cGVdID0gJ0VSUk9SJztcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlRXJyb3JzLnB1c2goYCR7ZWxlbWVudFR5cGV9OiAke2Vycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkcnlSdW5UZXh0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+UjSAqKkRyeSBSdW4gLSBQb3J0Zm9saW8gU3luYyBQcmV2aWV3KipcXG5cXG5gO1xuICAgICAgICBkcnlSdW5UZXh0ICs9IGDwn5OkICoqRWxlbWVudHMgdG8gc3luYyoqICgke29wdGlvbnMuZGlyZWN0aW9ufSk6XFxuYDtcbiAgICAgICAgZHJ5UnVuVGV4dCArPSBgICDigKIgUGVyc29uYXM6ICR7ZWxlbWVudFR5cGVDb3VudHMucGVyc29uYXN9XFxuYDtcbiAgICAgICAgZHJ5UnVuVGV4dCArPSBgICDigKIgU2tpbGxzOiAke2VsZW1lbnRUeXBlQ291bnRzLnNraWxsc31cXG5gO1xuICAgICAgICBkcnlSdW5UZXh0ICs9IGAgIOKAoiBUZW1wbGF0ZXM6ICR7ZWxlbWVudFR5cGVDb3VudHMudGVtcGxhdGVzfVxcbmA7XG4gICAgICAgIGRyeVJ1blRleHQgKz0gYCAg4oCiIEFnZW50czogJHtlbGVtZW50VHlwZUNvdW50cy5hZ2VudHN9XFxuXFxuYDtcbiAgICAgICAgXG4gICAgICAgIC8vIEluY2x1ZGUgYW55IGVycm9ycyBlbmNvdW50ZXJlZCBkdXJpbmcgZHJ5IHJ1blxuICAgICAgICBpZiAoZWxlbWVudFR5cGVFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGRyeVJ1blRleHQgKz0gYOKaoO+4jyAqKkVycm9ycyBmb3VuZCBkdXJpbmcgcHJldmlldzoqKlxcbmA7XG4gICAgICAgICAgZm9yIChjb25zdCBlcnJvciBvZiBlbGVtZW50VHlwZUVycm9ycykge1xuICAgICAgICAgICAgZHJ5UnVuVGV4dCArPSBgICDigKIgJHtlcnJvcn1cXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkcnlSdW5UZXh0ICs9IGBcXG5gO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBkcnlSdW5UZXh0ICs9IGDwn46vICoqVGFyZ2V0Kio6IGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS8ke3BvcnRmb2xpb01hbmFnZXIuZ2V0UmVwb3NpdG9yeU5hbWUoKX1cXG5gO1xuICAgICAgICBkcnlSdW5UZXh0ICs9IGDimqDvuI8gICoqTm90ZSoqOiBUaGlzIGlzIGEgcHJldmlldy4gUmVtb3ZlIGRyeV9ydW49dHJ1ZSB0byBwZXJmb3JtIGFjdHVhbCBzeW5jLmA7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBkcnlSdW5UZXh0XG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIG5vdywgaW1wbGVtZW50IGJhc2ljIHB1c2ggZnVuY3Rpb25hbGl0eVxuICAgICAgaWYgKG9wdGlvbnMuZGlyZWN0aW9uID09PSAncHVzaCcgfHwgb3B0aW9ucy5kaXJlY3Rpb24gPT09ICdib3RoJykge1xuICAgICAgICBsZXQgc3luY0NvdW50ID0gMDtcbiAgICAgICAgbGV0IHRvdGFsRWxlbWVudHMgPSAwO1xuICAgICAgICBsZXQgc3luY1RleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5SEICoqU3luY2luZyBQb3J0Zm9saW8uLi4qKlxcblxcbmA7XG5cbiAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IENhbGN1bGF0ZSB0b3RhbCBlbGVtZW50cyBmb3IgcHJvZ3Jlc3MgdHJhY2tpbmdcbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGVzID0gWydwZXJzb25hcycsICdza2lsbHMnLCAndGVtcGxhdGVzJywgJ2FnZW50cyddIGFzIGNvbnN0O1xuICAgICAgICBjb25zdCBlbGVtZW50Q291bnRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gICAgICAgIGNvbnN0IGZhaWxlZEVsZW1lbnRzOiBBcnJheTx7dHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGVycm9yOiBzdHJpbmd9PiA9IFtdO1xuICAgICAgICBcbiAgICAgICAgLy8gUHJlLWNhbGN1bGF0ZSB0b3RhbHMgZm9yIGJldHRlciBwcm9ncmVzcyBpbmRpY2F0b3JzXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3luY1RleHQgKz0gYPCfk4ogKipDYWxjdWxhdGluZyBzeW5jIHNjb3BlLi4uKipcXG5gO1xuICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudFR5cGUgb2YgZWxlbWVudFR5cGVzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGF3YWl0IHRoaXMuZ2V0RWxlbWVudHNMaXN0KGVsZW1lbnRUeXBlKTtcbiAgICAgICAgICAgICAgZWxlbWVudENvdW50c1tlbGVtZW50VHlwZV0gPSBlbGVtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgIHRvdGFsRWxlbWVudHMgKz0gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgICBlbGVtZW50Q291bnRzW2VsZW1lbnRUeXBlXSA9IDA7XG4gICAgICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gY291bnQgJHtlbGVtZW50VHlwZX1gLCB7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBzeW5jVGV4dCArPSBgXFxu8J+OryAqKlJlYWR5IHRvIHN5bmMgJHt0b3RhbEVsZW1lbnRzfSBlbGVtZW50czoqKlxcbmA7XG4gICAgICAgICAgZm9yIChjb25zdCBbdHlwZSwgY291bnRdIG9mIE9iamVjdC5lbnRyaWVzKGVsZW1lbnRDb3VudHMpKSB7XG4gICAgICAgICAgICBjb25zdCBpY29uID0gY291bnQgPiAwID8gJ+KchScgOiAn4pqqJztcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgICR7aWNvbn0gJHt0eXBlfTogJHtjb3VudH0gZWxlbWVudHNcXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzeW5jVGV4dCArPSBgXFxu8J+agCAqKlN0YXJ0aW5nIHN5bmMgcHJvY2Vzcy4uLioqXFxuXFxuYDtcbiAgICAgICAgICBcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGBcXG7imqDvuI8gKipXYXJuaW5nKio6IENvdWxkIG5vdCBjYWxjdWxhdGUgc3luYyBzY29wZTogJHtlcnJvci5tZXNzYWdlfVxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBQcm9jZXNzIGVhY2ggZWxlbWVudCB0eXBlIHdpdGggcHJvZ3Jlc3MgdHJhY2tpbmdcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50VHlwZSBvZiBlbGVtZW50VHlwZXMpIHtcbiAgICAgICAgICBjb25zdCB0eXBlQ291bnQgPSBlbGVtZW50Q291bnRzW2VsZW1lbnRUeXBlXSB8fCAwO1xuICAgICAgICAgIGlmICh0eXBlQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGDij6kgKipTa2lwcGluZyAke2VsZW1lbnRUeXBlfSoqIChubyBlbGVtZW50cyBmb3VuZClcXG5gO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn5OBICoqUHJvY2Vzc2luZyAke2VsZW1lbnRUeXBlfSoqICgke3R5cGVDb3VudH0gZWxlbWVudHMpOlxcbmA7XG4gICAgICAgICAgbGV0IHR5cGVTdWNjZXNzQ291bnQgPSAwO1xuICAgICAgICAgIFxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGF3YWl0IHRoaXMuZ2V0RWxlbWVudHNMaXN0KGVsZW1lbnRUeXBlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50TmFtZSA9IGVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgICBjb25zdCBwcm9ncmVzcyA9IGBbJHtpICsgMX0vJHtlbGVtZW50cy5sZW5ndGh9XWA7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBTaG93IGluZGl2aWR1YWwgZWxlbWVudCBwcm9ncmVzc1xuICAgICAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgICR7cHJvZ3Jlc3N9IPCflIQgU3luY2luZyBcIiR7ZWxlbWVudE5hbWV9XCIuLi5gO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIExvYWQgZWxlbWVudCBhbmQgc2F2ZSB0byBwb3J0Zm9saW9cbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gYXdhaXQgdGhpcy5sb2FkRWxlbWVudEJ5VHlwZShlbGVtZW50TmFtZSwgZWxlbWVudFR5cGUpO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBwb3J0Zm9saW9NYW5hZ2VyLnNhdmVFbGVtZW50KGVsZW1lbnQsIHRydWUpOyAvLyBFeHBsaWNpdCBjb25zZW50XG4gICAgICAgICAgICAgICAgICBzeW5jQ291bnQrKztcbiAgICAgICAgICAgICAgICAgIHR5cGVTdWNjZXNzQ291bnQrKztcbiAgICAgICAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAg4pyFXFxuYDtcbiAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgU3VjY2Vzc2Z1bGx5IHN5bmNlZCAke2VsZW1lbnRUeXBlfS8ke2VsZW1lbnROYW1lfWApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzeW5jVGV4dCArPSBgIOKdjCAobnVsbCBlbGVtZW50KVxcbmA7XG4gICAgICAgICAgICAgICAgICBmYWlsZWRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZWxlbWVudFR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnROYW1lLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogJ0VsZW1lbnQgbG9hZGVkIGFzIG51bGwvdW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChlbGVtZW50RXJyb3I6IGFueSkge1xuICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZXJyb3IgY29kZSBpZiBwcmVzZW50XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZWxlbWVudEVycm9yLmNvZGUgfHwgKGVsZW1lbnRFcnJvci5tZXNzYWdlPy5tYXRjaCgvXFxbKFtBLVpfXStfXFxkKylcXF0vKT8uWzFdKSB8fCAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlbGVtZW50RXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvciBkdXJpbmcgZWxlbWVudCBzeW5jJztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBDbGVhbiB1cCBlcnJvciBtZXNzYWdlIGZvciBkaXNwbGF5IChyZW1vdmUgY29kZSBpZiBhbHJlYWR5IGV4dHJhY3RlZClcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5TWVzc2FnZSA9IGVycm9yQ29kZSBcbiAgICAgICAgICAgICAgICAgID8gZXJyb3JNZXNzYWdlLnJlcGxhY2UoL1xcW1tBLVpfXStfXFxkK1xcXVxccyovLCAnJylcbiAgICAgICAgICAgICAgICAgIDogZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIFNob3cgZXJyb3IgY29kZSBpbiBvdXRwdXQgZm9yIGJldHRlciBkaWFnbm9zdGljc1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yT3V0cHV0ID0gZXJyb3JDb2RlIFxuICAgICAgICAgICAgICAgICAgPyBgJHtlcnJvckNvZGV9OiAke2Rpc3BsYXlNZXNzYWdlfWBcbiAgICAgICAgICAgICAgICAgIDogZGlzcGxheU1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgc3luY1RleHQgKz0gYCDinYwgKCR7ZXJyb3JPdXRwdXR9KVxcbmA7XG4gICAgICAgICAgICAgICAgZmFpbGVkRWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBlbGVtZW50VHlwZSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnROYW1lLFxuICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yT3V0cHV0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBzeW5jICR7ZWxlbWVudFR5cGV9LyR7ZWxlbWVudE5hbWV9YCwgeyBcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICAgICAgICBlbGVtZW50TmFtZSxcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRUeXBlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IFNob3cgY29tcGxldGlvbiBzdW1tYXJ5IGZvciBlYWNoIHR5cGVcbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NSYXRlID0gZWxlbWVudHMubGVuZ3RoID4gMCA/IE1hdGgucm91bmQoKHR5cGVTdWNjZXNzQ291bnQgLyBlbGVtZW50cy5sZW5ndGgpICogMTAwKSA6IDA7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXNJY29uID0gc3VjY2Vzc1JhdGUgPT09IDEwMCA/ICfwn46JJyA6IHN1Y2Nlc3NSYXRlID4gNTAgPyAn4pqg77iPJyA6ICfinYwnO1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYCAgJHtzdGF0dXNJY29ufSAqKiR7ZWxlbWVudFR5cGV9IGNvbXBsZXRlKio6ICR7dHlwZVN1Y2Nlc3NDb3VudH0vJHtlbGVtZW50cy5sZW5ndGh9IHN5bmNlZCAoJHtzdWNjZXNzUmF0ZX0lKVxcblxcbmA7XG4gICAgICAgICAgfSBjYXRjaCAobGlzdEVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBCZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIGZvciBsaXN0IGZhaWx1cmVzXG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBsaXN0RXJyb3IubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGdldCBlbGVtZW50cyBsaXN0JztcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKdjCAqKkZhaWxlZCB0byBsaXN0ICR7ZWxlbWVudFR5cGV9Kio6ICR7ZXJyb3JNZXNzYWdlfVxcblxcbmA7XG4gICAgICAgICAgICBmYWlsZWRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogZWxlbWVudFR5cGUsXG4gICAgICAgICAgICAgIG5hbWU6ICdBTEwnLFxuICAgICAgICAgICAgICBlcnJvcjogYEZhaWxlZCB0byBsaXN0ICR7ZWxlbWVudFR5cGV9OiAke2Vycm9yTWVzc2FnZX1gXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gZ2V0ICR7ZWxlbWVudFR5cGV9IGxpc3RgLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IEVuaGFuY2VkIGZpbmFsIHN1bW1hcnkgd2l0aCBhY3Rpb25hYmxlIGluc2lnaHRzXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NSYXRlID0gdG90YWxFbGVtZW50cyA+IDAgPyBNYXRoLnJvdW5kKChzeW5jQ291bnQgLyB0b3RhbEVsZW1lbnRzKSAqIDEwMCkgOiAwO1xuICAgICAgICBjb25zdCBzdW1tYXJ5SWNvbiA9IHN1Y2Nlc3NSYXRlID09PSAxMDAgPyAn8J+OiScgOiBzdWNjZXNzUmF0ZSA+PSA4MCA/ICfinIUnIDogc3VjY2Vzc1JhdGUgPj0gNTAgPyAn4pqg77iPJyA6ICfinYwnO1xuICAgICAgICBcbiAgICAgICAgc3luY1RleHQgKz0gYCR7c3VtbWFyeUljb259ICoqU3luYyBDb21wbGV0ZSEqKlxcbmA7XG4gICAgICAgIHN5bmNUZXh0ICs9IGDwn5OKICoqT3ZlcmFsbCBSZXN1bHRzKio6ICR7c3luY0NvdW50fS8ke3RvdGFsRWxlbWVudHN9IGVsZW1lbnRzIHN5bmNlZCAoJHtzdWNjZXNzUmF0ZX0lKVxcbmA7XG4gICAgICAgIHN5bmNUZXh0ICs9IGDwn4+gICoqUG9ydGZvbGlvKio6IGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS8ke3BvcnRmb2xpb01hbmFnZXIuZ2V0UmVwb3NpdG9yeU5hbWUoKX1cXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgLy8gSW5jbHVkZSBmYWlsZWQgZWxlbWVudHMgaW5mb3JtYXRpb24gd2l0aCBhY3Rpb25hYmxlIHN1Z2dlc3Rpb25zXG4gICAgICAgIGlmIChmYWlsZWRFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc3luY1RleHQgKz0gYOKaoO+4jyAqKklzc3VlcyBFbmNvdW50ZXJlZCoqICgke2ZhaWxlZEVsZW1lbnRzLmxlbmd0aH0gcHJvYmxlbXMpOlxcblxcbmA7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gR3JvdXAgZmFpbHVyZXMgYnkgdHlwZSBmb3IgYmV0dGVyIG9yZ2FuaXphdGlvblxuICAgICAgICAgIGNvbnN0IGZhaWx1cmVzQnlUeXBlOiBSZWNvcmQ8c3RyaW5nLCBBcnJheTx7bmFtZTogc3RyaW5nLCBlcnJvcjogc3RyaW5nfT4+ID0ge307XG4gICAgICAgICAgZm9yIChjb25zdCBmYWlsZWQgb2YgZmFpbGVkRWxlbWVudHMpIHtcbiAgICAgICAgICAgIGlmICghZmFpbHVyZXNCeVR5cGVbZmFpbGVkLnR5cGVdKSB7XG4gICAgICAgICAgICAgIGZhaWx1cmVzQnlUeXBlW2ZhaWxlZC50eXBlXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmFpbHVyZXNCeVR5cGVbZmFpbGVkLnR5cGVdLnB1c2goeyBuYW1lOiBmYWlsZWQubmFtZSwgZXJyb3I6IGZhaWxlZC5lcnJvciB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgZm9yIChjb25zdCBbdHlwZSwgZmFpbHVyZXNdIG9mIE9iamVjdC5lbnRyaWVzKGZhaWx1cmVzQnlUeXBlKSkge1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYPCfk4EgKioke3R5cGV9KiogKCR7ZmFpbHVyZXMubGVuZ3RofSBpc3N1ZXMpOlxcbmA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgZmFpbHVyZXMpIHtcbiAgICAgICAgICAgICAgaWYgKGZhaWx1cmUubmFtZSA9PT0gJ0FMTCcpIHtcbiAgICAgICAgICAgICAgICBzeW5jVGV4dCArPSBgICDinYwgJHtmYWlsdXJlLmVycm9yfVxcbmA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4p2MIFwiJHtmYWlsdXJlLm5hbWV9XCI6ICR7ZmFpbHVyZS5lcnJvcn1cXG5gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBgXFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IEFkZCBoZWxwZnVsIHN1Z2dlc3Rpb25zIGJhc2VkIG9uIGVycm9yIGNvZGVzIGZvdW5kXG4gICAgICAgICAgc3luY1RleHQgKz0gYPCfkqEgKipUcm91Ymxlc2hvb3RpbmcgVGlwcyoqOlxcbmA7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ2hlY2sgZm9yIHNwZWNpZmljIGVycm9yIGNvZGVzIGFuZCBwcm92aWRlIHRhcmdldGVkIGFkdmljZVxuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZXMgPSBmYWlsZWRFbGVtZW50cy5tYXAoZiA9PiBmLmVycm9yLm1hdGNoKC9eKFtBLVpfXStfXFxkKyk6Lyk/LlsxXSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICAgIGNvbnN0IHVuaXF1ZUVycm9yQ29kZXMgPSBbLi4ubmV3IFNldChlcnJvckNvZGVzKV07XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHVuaXF1ZUVycm9yQ29kZXMuaW5jbHVkZXMoJ1BPUlRGT0xJT19TWU5DXzAwMScpKSB7XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBgICDigKIg8J+UkCAqKkF1dGggRXJyb3IqKjogUnVuIFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIHRvIHJlLWF1dGhlbnRpY2F0ZVxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1bmlxdWVFcnJvckNvZGVzLmluY2x1ZGVzKCdQT1JURk9MSU9fU1lOQ18wMDInKSkge1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIPCfk4EgKipSZXBvIE1pc3NpbmcqKjogUnVuIFxcYGluaXRfcG9ydGZvbGlvXFxgIHRvIGNyZWF0ZSB5b3VyIHJlcG9zaXRvcnlcXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodW5pcXVlRXJyb3JDb2Rlcy5pbmNsdWRlcygnUE9SVEZPTElPX1NZTkNfMDA0JykpIHtcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiDwn5SnICoqQVBJIEVycm9yKio6IEdpdEh1YiByZXNwb25zZSBmb3JtYXQgaXNzdWUgLSBwbGVhc2UgcmVwb3J0IHRoaXMgYnVnXFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVuaXF1ZUVycm9yQ29kZXMuaW5jbHVkZXMoJ1BPUlRGT0xJT19TWU5DXzAwNicpKSB7XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBgICDigKIg4o+zICoqUmF0ZSBMaW1pdGVkKio6IFdhaXQgYSBmZXcgbWludXRlcyBhbmQgdHJ5IGFnYWluXFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gR2VuZXJhbCB0aXBzXG4gICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIENoZWNrIGVsZW1lbnQgZmlsZSBmb3JtYXRzIGFuZCBtZXRhZGF0YVxcbmA7XG4gICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIFRyeSBzeW5jaW5nIGluZGl2aWR1YWwgZWxlbWVudHMgd2l0aCBcXGBwb3J0Zm9saW9fZWxlbWVudF9tYW5hZ2VyXFxgICh1cGxvYWQgb3BlcmF0aW9uKVxcbmA7XG4gICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIFVzZSBcXGBzeW5jX3BvcnRmb2xpb1xcYCB3aXRoIFxcYGRyeV9ydW49dHJ1ZVxcYCB0byBwcmV2aWV3IGlzc3Vlc1xcblxcbmA7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQWRkIGVycm9yIGNvZGUgbGVnZW5kIGlmIHdlIGZvdW5kIGFueVxuICAgICAgICAgIGlmICh1bmlxdWVFcnJvckNvZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn5OLICoqRXJyb3IgQ29kZXMgRGV0ZWN0ZWQqKjpcXG5gO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb2RlIG9mIHVuaXF1ZUVycm9yQ29kZXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3JEZXNjcmlwdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICAgICAgICAgJ1BPUlRGT0xJT19TWU5DXzAwMSc6ICdBdXRoZW50aWNhdGlvbiBmYWlsdXJlJyxcbiAgICAgICAgICAgICAgICAnUE9SVEZPTElPX1NZTkNfMDAyJzogJ1JlcG9zaXRvcnkgbm90IGZvdW5kJyxcbiAgICAgICAgICAgICAgICAnUE9SVEZPTElPX1NZTkNfMDAzJzogJ0ZpbGUgY3JlYXRpb24gZmFpbGVkJyxcbiAgICAgICAgICAgICAgICAnUE9SVEZPTElPX1NZTkNfMDA0JzogJ0FQSSByZXNwb25zZSBwYXJzaW5nIGVycm9yJyxcbiAgICAgICAgICAgICAgICAnUE9SVEZPTElPX1NZTkNfMDA1JzogJ05ldHdvcmsgZXJyb3InLFxuICAgICAgICAgICAgICAgICdQT1JURk9MSU9fU1lOQ18wMDYnOiAnUmF0ZSBsaW1pdCBleGNlZWRlZCdcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBlcnJvckRlc2NyaXB0aW9uc1tjb2RlIGFzIHN0cmluZ10gfHwgJ1Vua25vd24gZXJyb3InO1xuICAgICAgICAgICAgICBzeW5jVGV4dCArPSBgICDigKIgJHtjb2RlfTogJHtkZXNjcmlwdGlvbn1cXG5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3luY1RleHQgKz0gYFxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn46JICoqUGVyZmVjdCBTeW5jISoqIEFsbCBlbGVtZW50cyB1cGxvYWRlZCBzdWNjZXNzZnVsbHkhXFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IEFkZCBuZXh0IHN0ZXBzIGFuZCBoZWxwZnVsIGxpbmtzXG4gICAgICAgIGlmIChzeW5jQ291bnQgPiAwKSB7XG4gICAgICAgICAgc3luY1RleHQgKz0gYPCfmoAgKipOZXh0IFN0ZXBzKio6XFxuYDtcbiAgICAgICAgICBzeW5jVGV4dCArPSBgICDigKIgVmlldyB5b3VyIHBvcnRmb2xpbzogaHR0cHM6Ly9naXRodWIuY29tLyR7dXNlcm5hbWV9LyR7cG9ydGZvbGlvTWFuYWdlci5nZXRSZXBvc2l0b3J5TmFtZSgpfVxcbmA7XG4gICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIFNoYXJlIGluZGl2aWR1YWwgZWxlbWVudHMgdXNpbmcgXFxgc3VibWl0X2NvbGxlY3Rpb25fY29udGVudCA8bmFtZT5cXGBcXG5gO1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiBLZWVwIHBvcnRmb2xpbyB1cGRhdGVkIHdpdGggXFxgc3luY19wb3J0Zm9saW9cXGAgcmVndWxhcmx5XFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgc3luY1RleHQgKz0gYFlvdXIgZWxlbWVudHMgYXJlIG5vdyBhdmFpbGFibGUgb24gR2l0SHViIWA7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBzeW5jVGV4dFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmRpcmVjdGlvbiA9PT0gJ3B1bGwnIHx8IG9wdGlvbnMuZGlyZWN0aW9uID09PSAnYm90aCcpIHtcbiAgICAgICAgY29uc3QgeyBQb3J0Zm9saW9QdWxsSGFuZGxlciB9ID0gYXdhaXQgaW1wb3J0KCcuL2hhbmRsZXJzL1BvcnRmb2xpb1B1bGxIYW5kbGVyLmpzJyk7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgUG9ydGZvbGlvUHVsbEhhbmRsZXIoKTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZXIuZXhlY3V0ZVB1bGwob3B0aW9ucywgdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBJbnZhbGlkIHN5bmMgZGlyZWN0aW9uLiBVc2UgJ3B1c2gnLCAncHVsbCcsIG9yICdib3RoJy5gXG4gICAgICAgIH1dXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIElNUFJPVkVEIEVSUk9SIEhBTkRMSU5HOiBFbnN1cmUgd2UgYWx3YXlzIGhhdmUgYSBtZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2VcbiAgICAgIGNvbnN0IHNhbml0aXplZEVycm9yID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gc2FuaXRpemVkRXJyb3I/Lm1lc3NhZ2UgfHwgKGVycm9yIGFzIGFueSk/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSB8fCAnVW5rbm93biBlcnJvciBvY2N1cnJlZCc7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEZhaWxlZCB0byBzeW5jIHBvcnRmb2xpbzogJHtlcnJvck1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucyAtIGRlbGVnYXRlcyB0byBDb25maWdIYW5kbGVyXG4gICAqL1xuICBhc3luYyBoYW5kbGVDb25maWdPcGVyYXRpb24ob3B0aW9uczogYW55KSB7XG4gICAgY29uc3QgeyBDb25maWdIYW5kbGVyIH0gPSBhd2FpdCBpbXBvcnQoJy4vaGFuZGxlcnMvQ29uZmlnSGFuZGxlci5qcycpO1xuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgQ29uZmlnSGFuZGxlcigpO1xuICAgIHJldHVybiBoYW5kbGVyLmhhbmRsZUNvbmZpZ09wZXJhdGlvbihvcHRpb25zLCB0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHN5bmMgb3BlcmF0aW9ucyAtIGRlbGVnYXRlcyB0byBTeW5jSGFuZGxlclxuICAgKi9cbiAgYXN5bmMgaGFuZGxlU3luY09wZXJhdGlvbihvcHRpb25zOiBhbnkpIHtcbiAgICBjb25zdCB7IFN5bmNIYW5kbGVyIH0gPSBhd2FpdCBpbXBvcnQoJy4vaGFuZGxlcnMvU3luY0hhbmRsZXJWMi5qcycpO1xuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgU3luY0hhbmRsZXIoKTtcbiAgICByZXR1cm4gaGFuZGxlci5oYW5kbGVTeW5jT3BlcmF0aW9uKG9wdGlvbnMsIHRoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggbG9jYWwgcG9ydGZvbGlvIHVzaW5nIHRoZSBtZXRhZGF0YSBpbmRleCBzeXN0ZW1cbiAgICogVGhpcyBwcm92aWRlcyBmYXN0LCBjb21wcmVoZW5zaXZlIHNlYXJjaCBhY3Jvc3MgYWxsIGVsZW1lbnQgdHlwZXNcbiAgICovXG4gIGFzeW5jIHNlYXJjaFBvcnRmb2xpbyhvcHRpb25zOiB7XG4gICAgcXVlcnk6IHN0cmluZzsgXG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmc7IFxuICAgIGZ1enp5TWF0Y2g/OiBib29sZWFuOyBcbiAgICBtYXhSZXN1bHRzPzogbnVtYmVyOyBcbiAgICBpbmNsdWRlS2V5d29yZHM/OiBib29sZWFuOyBcbiAgICBpbmNsdWRlVGFncz86IGJvb2xlYW47IFxuICAgIGluY2x1ZGVUcmlnZ2Vycz86IGJvb2xlYW47IFxuICAgIGluY2x1ZGVEZXNjcmlwdGlvbnM/OiBib29sZWFuO1xuICB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoZSBxdWVyeSBwYXJhbWV0ZXJcbiAgICAgIGlmICghb3B0aW9ucy5xdWVyeSB8fCB0eXBlb2Ygb3B0aW9ucy5xdWVyeSAhPT0gJ3N0cmluZycgfHwgb3B0aW9ucy5xdWVyeS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIFNlYXJjaCBxdWVyeSBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEltcG9ydCBwb3J0Zm9saW8gaW5kZXggbWFuYWdlclxuICAgICAgY29uc3QgeyBQb3J0Zm9saW9JbmRleE1hbmFnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vUG9ydGZvbGlvSW5kZXhNYW5hZ2VyLmpzJyk7XG4gICAgICBjb25zdCBpbmRleE1hbmFnZXIgPSBQb3J0Zm9saW9JbmRleE1hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblxuICAgICAgLy8gUGFyc2UgZWxlbWVudCB0eXBlIGlmIHByb3ZpZGVkXG4gICAgICBsZXQgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKG9wdGlvbnMuZWxlbWVudFR5cGUpIHtcbiAgICAgICAgY29uc3QgdmFsaWRUeXBlcyA9IFsncGVyc29uYXMnLCAnc2tpbGxzJywgJ3RlbXBsYXRlcycsICdhZ2VudHMnLCAnbWVtb3JpZXMnLCAnZW5zZW1ibGVzJ107XG4gICAgICAgIGlmICghdmFsaWRUeXBlcy5pbmNsdWRlcyhvcHRpb25zLmVsZW1lbnRUeXBlKSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEludmFsaWQgZWxlbWVudCB0eXBlLiBWYWxpZCB0eXBlczogJHt2YWxpZFR5cGVzLmpvaW4oJywgJyl9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRUeXBlID0gb3B0aW9ucy5lbGVtZW50VHlwZSBhcyBFbGVtZW50VHlwZTtcbiAgICAgIH1cblxuICAgICAgLy8gQnVpbGQgc2VhcmNoIG9wdGlvbnNcbiAgICAgIGNvbnN0IHNlYXJjaE9wdGlvbnMgPSB7XG4gICAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgICBmdXp6eU1hdGNoOiBvcHRpb25zLmZ1enp5TWF0Y2ggIT09IGZhbHNlLCAvLyBEZWZhdWx0IHRvIHRydWVcbiAgICAgICAgbWF4UmVzdWx0czogb3B0aW9ucy5tYXhSZXN1bHRzIHx8IDIwLFxuICAgICAgICBpbmNsdWRlS2V5d29yZHM6IG9wdGlvbnMuaW5jbHVkZUtleXdvcmRzICE9PSBmYWxzZSxcbiAgICAgICAgaW5jbHVkZVRhZ3M6IG9wdGlvbnMuaW5jbHVkZVRhZ3MgIT09IGZhbHNlLFxuICAgICAgICBpbmNsdWRlVHJpZ2dlcnM6IG9wdGlvbnMuaW5jbHVkZVRyaWdnZXJzICE9PSBmYWxzZSxcbiAgICAgICAgaW5jbHVkZURlc2NyaXB0aW9uczogb3B0aW9ucy5pbmNsdWRlRGVzY3JpcHRpb25zICE9PSBmYWxzZVxuICAgICAgfTtcblxuICAgICAgLy8gUGVyZm9ybSB0aGUgc2VhcmNoXG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgaW5kZXhNYW5hZ2VyLnNlYXJjaChvcHRpb25zLnF1ZXJ5LCBzZWFyY2hPcHRpb25zKTtcblxuICAgICAgLy8gRm9ybWF0IHRoZSByZXN1bHRzXG4gICAgICBsZXQgdGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCflI0gKipQb3J0Zm9saW8gU2VhcmNoIFJlc3VsdHMqKlxcblxcbmA7XG4gICAgICB0ZXh0ICs9IGAqKlF1ZXJ5Kio6IFwiJHtvcHRpb25zLnF1ZXJ5fVwiXFxuYDtcbiAgICAgIFxuICAgICAgaWYgKGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIHRleHQgKz0gYCoqVHlwZSBGaWx0ZXIqKjogJHtlbGVtZW50VHlwZX1cXG5gO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0ZXh0ICs9IGAqKkZvdW5kKio6ICR7cmVzdWx0cy5sZW5ndGh9IGVsZW1lbnQke3Jlc3VsdHMubGVuZ3RoID09PSAxID8gJycgOiAncyd9XFxuXFxuYDtcblxuICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRleHQgKz0gYE5vIGVsZW1lbnRzIGZvdW5kIG1hdGNoaW5nIHlvdXIgc2VhcmNoIGNyaXRlcmlhLlxcblxcbmA7XG4gICAgICAgIHRleHQgKz0gYCoqVGlwcyBmb3IgYmV0dGVyIHJlc3VsdHM6KipcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgVHJ5IGRpZmZlcmVudCBrZXl3b3JkcyBvciBwYXJ0aWFsIG5hbWVzXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFJlbW92ZSB0aGUgdHlwZSBmaWx0ZXIgdG8gc2VhcmNoIGFsbCBlbGVtZW50IHR5cGVzXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIENoZWNrIHNwZWxsaW5nIGFuZCB0cnkgc3lub255bXNcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgVXNlIHRoZSBsaXN0X2VsZW1lbnRzIHRvb2wgdG8gc2VlIGFsbCBhdmFpbGFibGUgY29udGVudGA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0ICs9IGAqKlJlc3VsdHM6KipcXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICAgIGNvbnN0IHsgZW50cnksIG1hdGNoVHlwZSB9ID0gcmVzdWx0O1xuICAgICAgICAgIGNvbnN0IGljb24gPSB0aGlzLmdldEVsZW1lbnRJY29uKGVudHJ5LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBcbiAgICAgICAgICB0ZXh0ICs9IGAke2ljb259ICoqJHtlbnRyeS5tZXRhZGF0YS5uYW1lfSoqXFxuYDtcbiAgICAgICAgICB0ZXh0ICs9IGAgICDwn5OBIFR5cGU6ICR7ZW50cnkuZWxlbWVudFR5cGV9XFxuYDtcbiAgICAgICAgICB0ZXh0ICs9IGAgICDwn46vIE1hdGNoOiAke21hdGNoVHlwZX1cXG5gO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChlbnRyeS5tZXRhZGF0YS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgY29uc3QgZGVzYyA9IGVudHJ5Lm1ldGFkYXRhLmRlc2NyaXB0aW9uLmxlbmd0aCA+IDEwMCBcbiAgICAgICAgICAgICAgPyBlbnRyeS5tZXRhZGF0YS5kZXNjcmlwdGlvbi5zdWJzdHJpbmcoMCwgMTAwKSArICcuLi4nXG4gICAgICAgICAgICAgIDogZW50cnkubWV0YWRhdGEuZGVzY3JpcHRpb247XG4gICAgICAgICAgICB0ZXh0ICs9IGAgICDwn5OdICR7ZGVzY31cXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoZW50cnkubWV0YWRhdGEudGFncyAmJiBlbnRyeS5tZXRhZGF0YS50YWdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRleHQgKz0gYCAgIPCfj7fvuI8gVGFnczogJHtlbnRyeS5tZXRhZGF0YS50YWdzLnNsaWNlKDAsIDUpLmpvaW4oJywgJyl9JHtlbnRyeS5tZXRhZGF0YS50YWdzLmxlbmd0aCA+IDUgPyAnLi4uJyA6ICcnfVxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHRleHQgKz0gYCAgIPCfk4QgRmlsZTogJHtlbnRyeS5maWxlbmFtZX0ubWRcXG5cXG5gO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPj0gc2VhcmNoT3B0aW9ucy5tYXhSZXN1bHRzKSB7XG4gICAgICAgICAgdGV4dCArPSBg4pqg77iPIFJlc3VsdHMgbGltaXRlZCB0byAke3NlYXJjaE9wdGlvbnMubWF4UmVzdWx0c30uIFJlZmluZSB5b3VyIHNlYXJjaCBmb3IgbW9yZSBzcGVjaWZpYyByZXN1bHRzLlxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRleHQgKz0gYPCfkqEgKipOZXh0IHN0ZXBzOioqXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSBnZXRfZWxlbWVudF9kZXRhaWxzIHRvIHNlZSBmdWxsIGNvbnRlbnRcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgVXNlIGFjdGl2YXRlX2VsZW1lbnQgdG8gYWN0aXZhdGUgZWxlbWVudHNcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgVXNlIHN1Ym1pdF9jb2xsZWN0aW9uX2NvbnRlbnQgdG8gc2hhcmUgd2l0aCB0aGUgY29tbXVuaXR5YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0XG4gICAgICAgIH1dXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuc2VhcmNoUG9ydGZvbGlvJywgZXJyb3IsIHsgXG4gICAgICAgIHF1ZXJ5OiBvcHRpb25zLnF1ZXJ5LFxuICAgICAgICBlbGVtZW50VHlwZTogb3B0aW9ucy5lbGVtZW50VHlwZSBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLCBcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgU2VhcmNoIGZhaWxlZDogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggYWNyb3NzIGFsbCBzb3VyY2VzIChsb2NhbCwgR2l0SHViLCBjb2xsZWN0aW9uKSB1c2luZyBVbmlmaWVkSW5kZXhNYW5hZ2VyXG4gICAqIFRoaXMgcHJvdmlkZXMgY29tcHJlaGVuc2l2ZSBzZWFyY2ggd2l0aCBkdXBsaWNhdGUgZGV0ZWN0aW9uIGFuZCB2ZXJzaW9uIGNvbXBhcmlzb25cbiAgICovXG4gIGFzeW5jIHNlYXJjaEFsbChvcHRpb25zOiB7XG4gICAgcXVlcnk6IHN0cmluZztcbiAgICBzb3VyY2VzPzogc3RyaW5nW107XG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmc7XG4gICAgcGFnZT86IG51bWJlcjtcbiAgICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgICBzb3J0Qnk/OiBzdHJpbmc7XG4gIH0pIHtcbiAgICB0cnkge1xuICAgICAgLy8gVmFsaWRhdGUgdGhlIHF1ZXJ5IHBhcmFtZXRlclxuICAgICAgaWYgKCFvcHRpb25zLnF1ZXJ5IHx8IHR5cGVvZiBvcHRpb25zLnF1ZXJ5ICE9PSAnc3RyaW5nJyB8fCBvcHRpb25zLnF1ZXJ5LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgU2VhcmNoIHF1ZXJ5IGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gSW1wb3J0IHVuaWZpZWQgaW5kZXggbWFuYWdlclxuICAgICAgY29uc3QgeyBVbmlmaWVkSW5kZXhNYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoJy4vcG9ydGZvbGlvL1VuaWZpZWRJbmRleE1hbmFnZXIuanMnKTtcbiAgICAgIGNvbnN0IHsgRWxlbWVudFR5cGUgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vdHlwZXMuanMnKTtcbiAgICAgIGNvbnN0IHVuaWZpZWRNYW5hZ2VyID0gVW5pZmllZEluZGV4TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXG4gICAgICAvLyBQYXJzZSBlbGVtZW50IHR5cGUgaWYgcHJvdmlkZWRcbiAgICAgIGxldCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGUgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAob3B0aW9ucy5lbGVtZW50VHlwZSkge1xuICAgICAgICBjb25zdCB2YWxpZFR5cGVzID0gWydwZXJzb25hcycsICdza2lsbHMnLCAndGVtcGxhdGVzJywgJ2FnZW50cycsICdtZW1vcmllcycsICdlbnNlbWJsZXMnXTtcbiAgICAgICAgaWYgKCF2YWxpZFR5cGVzLmluY2x1ZGVzKG9wdGlvbnMuZWxlbWVudFR5cGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgSW52YWxpZCBlbGVtZW50IHR5cGUuIFZhbGlkIHR5cGVzOiAke3ZhbGlkVHlwZXMuam9pbignLCAnKX1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudFR5cGUgPSBvcHRpb25zLmVsZW1lbnRUeXBlIGFzIEVsZW1lbnRUeXBlO1xuICAgICAgfVxuXG4gICAgICAvLyBQYXJzZSBzb3VyY2VzIChkZWZhdWx0IHRvIGxvY2FsIGFuZCBnaXRodWIpXG4gICAgICBjb25zdCBzb3VyY2VzID0gb3B0aW9ucy5zb3VyY2VzIHx8IFsnbG9jYWwnLCAnZ2l0aHViJ107XG4gICAgICBjb25zdCBpbmNsdWRlTG9jYWwgPSBzb3VyY2VzLmluY2x1ZGVzKCdsb2NhbCcpO1xuICAgICAgY29uc3QgaW5jbHVkZUdpdEh1YiA9IHNvdXJjZXMuaW5jbHVkZXMoJ2dpdGh1YicpO1xuICAgICAgY29uc3QgaW5jbHVkZUNvbGxlY3Rpb24gPSBzb3VyY2VzLmluY2x1ZGVzKCdjb2xsZWN0aW9uJyk7XG5cbiAgICAgIC8vIEJ1aWxkIHNlYXJjaCBvcHRpb25zXG4gICAgICBjb25zdCBzZWFyY2hPcHRpb25zID0ge1xuICAgICAgICBxdWVyeTogb3B0aW9ucy5xdWVyeSxcbiAgICAgICAgaW5jbHVkZUxvY2FsLFxuICAgICAgICBpbmNsdWRlR2l0SHViLFxuICAgICAgICBpbmNsdWRlQ29sbGVjdGlvbixcbiAgICAgICAgZWxlbWVudFR5cGUsXG4gICAgICAgIHBhZ2U6IG9wdGlvbnMucGFnZSB8fCAxLFxuICAgICAgICBwYWdlU2l6ZTogb3B0aW9ucy5wYWdlU2l6ZSB8fCAyMCxcbiAgICAgICAgc29ydEJ5OiAob3B0aW9ucy5zb3J0QnkgYXMgYW55KSB8fCAncmVsZXZhbmNlJ1xuICAgICAgfTtcblxuICAgICAgLy8gUGVyZm9ybSB0aGUgdW5pZmllZCBzZWFyY2hcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB1bmlmaWVkTWFuYWdlci5zZWFyY2goc2VhcmNoT3B0aW9ucyk7XG5cbiAgICAgIC8vIEZvcm1hdCB0aGUgcmVzdWx0c1xuICAgICAgbGV0IHRleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5SNICoqVW5pZmllZCBTZWFyY2ggUmVzdWx0cyoqXFxuXFxuYDtcbiAgICAgIHRleHQgKz0gYCoqUXVlcnkqKjogXCIke29wdGlvbnMucXVlcnl9XCJcXG5gO1xuICAgICAgdGV4dCArPSBgKipTb3VyY2VzKio6ICR7c291cmNlcy5qb2luKCcsICcpfVxcbmA7XG4gICAgICBcbiAgICAgIGlmIChlbGVtZW50VHlwZSkge1xuICAgICAgICB0ZXh0ICs9IGAqKlR5cGUgRmlsdGVyKio6ICR7ZWxlbWVudFR5cGV9XFxuYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGV4dCArPSBgKipGb3VuZCoqOiAke3Jlc3VsdHMubGVuZ3RofSBlbGVtZW50JHtyZXN1bHRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfVxcblxcbmA7XG5cbiAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0ZXh0ICs9IGBObyBlbGVtZW50cyBmb3VuZCBtYXRjaGluZyB5b3VyIHNlYXJjaCBjcml0ZXJpYS5cXG5cXG5gO1xuICAgICAgICB0ZXh0ICs9IGAqKlRpcHMgZm9yIGJldHRlciByZXN1bHRzOioqXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFRyeSBkaWZmZXJlbnQga2V5d29yZHMgb3IgcGFydGlhbCBuYW1lc1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBSZW1vdmUgdGhlIHR5cGUgZmlsdGVyIHRvIHNlYXJjaCBhbGwgZWxlbWVudCB0eXBlc1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBJbmNsdWRlIG1vcmUgc291cmNlczogbG9jYWwsIGdpdGh1YiwgY29sbGVjdGlvblxcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBDaGVjayBzcGVsbGluZyBhbmQgdHJ5IHN5bm9ueW1zXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSBicm93c2VfY29sbGVjdGlvbiB0byBleHBsb3JlIGF2YWlsYWJsZSBjb250ZW50YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHQgKz0gYCoqUmVzdWx0czoqKlxcblxcbmA7XG4gICAgICAgIFxuICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgY29uc3QgeyBlbnRyeSwgc291cmNlLCBtYXRjaFR5cGUsIHNjb3JlLCBpc0R1cGxpY2F0ZSwgdmVyc2lvbkNvbmZsaWN0IH0gPSByZXN1bHQ7XG4gICAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMuZ2V0RWxlbWVudEljb24oZW50cnkuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGNvbnN0IHNvdXJjZUljb24gPSB0aGlzLmdldFNvdXJjZUljb24oc291cmNlKTtcbiAgICAgICAgICBcbiAgICAgICAgICB0ZXh0ICs9IGAke2ljb259ICoqJHtlbnRyeS5uYW1lfSoqICR7c291cmNlSWNvbn1cXG5gO1xuICAgICAgICAgIHRleHQgKz0gYCAgIPCfk4EgVHlwZTogJHtlbnRyeS5lbGVtZW50VHlwZX0gfCBTb3VyY2U6ICR7c291cmNlfVxcbmA7XG4gICAgICAgICAgdGV4dCArPSBgICAg8J+OryBNYXRjaDogJHttYXRjaFR5cGV9IHwgU2NvcmU6ICR7c2NvcmUudG9GaXhlZCgyKX1cXG5gO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChlbnRyeS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgY29uc3QgZGVzYyA9IGVudHJ5LmRlc2NyaXB0aW9uLmxlbmd0aCA+IDEwMCBcbiAgICAgICAgICAgICAgPyBlbnRyeS5kZXNjcmlwdGlvbi5zdWJzdHJpbmcoMCwgMTAwKSArICcuLi4nXG4gICAgICAgICAgICAgIDogZW50cnkuZGVzY3JpcHRpb247XG4gICAgICAgICAgICB0ZXh0ICs9IGAgICDwn5OdICR7ZGVzY31cXG5gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlbnRyeS52ZXJzaW9uKSB7XG4gICAgICAgICAgICB0ZXh0ICs9IGAgICDwn4+377iPIFZlcnNpb246ICR7ZW50cnkudmVyc2lvbn1cXG5gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNob3cgZHVwbGljYXRlIGluZm9ybWF0aW9uXG4gICAgICAgICAgaWYgKGlzRHVwbGljYXRlKSB7XG4gICAgICAgICAgICB0ZXh0ICs9IGAgICDimqDvuI8gKipEdXBsaWNhdGUgZGV0ZWN0ZWQgYWNyb3NzIHNvdXJjZXMqKlxcbmA7XG4gICAgICAgICAgICBpZiAodmVyc2lvbkNvbmZsaWN0KSB7XG4gICAgICAgICAgICAgIHRleHQgKz0gYCAgIPCflIQgVmVyc2lvbiBjb25mbGljdCAtIFJlY29tbWVuZGVkOiAke3ZlcnNpb25Db25mbGljdC5yZWNvbW1lbmRlZH0gKCR7dmVyc2lvbkNvbmZsaWN0LnJlYXNvbn0pXFxuYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgdGV4dCArPSBgXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgaGFzTW9yZSA9IHJlc3VsdHMubGVuZ3RoID49IHNlYXJjaE9wdGlvbnMucGFnZVNpemU7XG4gICAgICAgIGlmIChoYXNNb3JlKSB7XG4gICAgICAgICAgY29uc3QgbmV4dFBhZ2UgPSBzZWFyY2hPcHRpb25zLnBhZ2UgKyAxO1xuICAgICAgICAgIHRleHQgKz0gYOKaoO+4jyBSZXN1bHRzIGxpbWl0ZWQgdG8gJHtzZWFyY2hPcHRpb25zLnBhZ2VTaXplfS4gVXNlIHBhZ2U9JHtuZXh0UGFnZX0gZm9yIG1vcmUgcmVzdWx0cy5cXG5cXG5gO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0ZXh0ICs9IGDwn5KhICoqTmV4dCBzdGVwczoqKlxcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBVc2UgZ2V0X2VsZW1lbnRfZGV0YWlscyB0byBzZWUgZnVsbCBjb250ZW50XFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSBpbnN0YWxsX2NvbGxlY3Rpb25fY29udGVudCBmb3IgY29sbGVjdGlvbiBpdGVtc1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBVc2UgYWN0aXZhdGVfZWxlbWVudCBmb3IgbG9jYWwgZWxlbWVudHNcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgQ2hlY2sgZm9yIGR1cGxpY2F0ZXMgYmVmb3JlIHN1Ym1pdHRpbmcgbmV3IGNvbnRlbnRgO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHRcbiAgICAgICAgfV1cbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zdCB7IEVycm9ySGFuZGxlciB9ID0gYXdhaXQgaW1wb3J0KCcuL3V0aWxzL0Vycm9ySGFuZGxlci5qcycpO1xuICAgICAgY29uc3QgeyBTZWN1cmVFcnJvckhhbmRsZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9zZWN1cml0eS9lcnJvckhhbmRsZXIuanMnKTtcbiAgICAgIFxuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuc2VhcmNoQWxsJywgZXJyb3IsIHsgXG4gICAgICAgIHF1ZXJ5OiBvcHRpb25zLnF1ZXJ5LFxuICAgICAgICBzb3VyY2VzOiBvcHRpb25zLnNvdXJjZXMsXG4gICAgICAgIGVsZW1lbnRUeXBlOiBvcHRpb25zLmVsZW1lbnRUeXBlIFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsIFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBVbmlmaWVkIHNlYXJjaCBmYWlsZWQ6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGljb24gZm9yIHNvdXJjZSB0eXBlXG4gICAqL1xuICBwcml2YXRlIGdldFNvdXJjZUljb24oc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGljb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgbG9jYWw6ICfwn5K7JyxcbiAgICAgIGdpdGh1YjogJ/CfkJknLFxuICAgICAgY29sbGVjdGlvbjogJ/CfjJAnXG4gICAgfTtcbiAgICByZXR1cm4gaWNvbnNbc291cmNlXSB8fCAn8J+TgSc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGljb24gZm9yIGVsZW1lbnQgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbGVtZW50SWNvbihlbGVtZW50VHlwZTogRWxlbWVudFR5cGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IGljb25zID0ge1xuICAgICAgcGVyc29uYXM6ICfwn46tJyxcbiAgICAgIHNraWxsczogJ/Cfjq8nLFxuICAgICAgdGVtcGxhdGVzOiAn8J+ThCcsXG4gICAgICBhZ2VudHM6ICfwn6SWJyxcbiAgICAgIG1lbW9yaWVzOiAn8J+noCcsXG4gICAgICBlbnNlbWJsZXM6ICfwn468J1xuICAgIH07XG4gICAgcmV0dXJuIGljb25zW2VsZW1lbnRUeXBlXSB8fCAn8J+TgSc7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byBjb3VudCBlbGVtZW50cyBpbiBhIGRpcmVjdG9yeVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjb3VudEVsZW1lbnRzSW5EaXIoZGlyUGF0aDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgaWYgZGlyZWN0b3J5IGV4aXN0cyBhbmQgaXMgYWNjZXNzaWJsZVxuICAgICAgYXdhaXQgZnMuYWNjZXNzKGRpclBhdGgpO1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpclBhdGgpO1xuICAgICAgXG4gICAgICAvLyBDb3VudCBhbGwgZWxlbWVudCBmaWxlcyAoLm1kLCAuanNvbiwgLnlhbWwpIHRvIHN1cHBvcnQgYWxsIGVsZW1lbnQgdHlwZXNcbiAgICAgIC8vIC0gUGVyc29uYXM6IC5tZCBmaWxlc1xuICAgICAgLy8gLSBTa2lsbHM6IC5tZCBmaWxlcyAgXG4gICAgICAvLyAtIFRlbXBsYXRlczogLm1kIG9yIC55YW1sIGZpbGVzXG4gICAgICAvLyAtIEFnZW50czogLm1kIGZpbGVzXG4gICAgICByZXR1cm4gZmlsZXMuZmlsdGVyKGZpbGUgPT4gXG4gICAgICAgIGZpbGUuZW5kc1dpdGgoJy5tZCcpIHx8IFxuICAgICAgICBmaWxlLmVuZHNXaXRoKCcuanNvbicpIHx8IFxuICAgICAgICBmaWxlLmVuZHNXaXRoKCcueWFtbCcpXG4gICAgICApLmxlbmd0aDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gZ2V0IGxpc3Qgb2YgZWxlbWVudHMgYnkgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRFbGVtZW50c0xpc3QoZWxlbWVudFR5cGU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbG9jYWxQb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgbGV0IGVsZW1lbnRUeXBlRW51bTogRWxlbWVudFR5cGU7XG4gICAgICBcbiAgICAgIHN3aXRjaCAoZWxlbWVudFR5cGUpIHtcbiAgICAgICAgY2FzZSAncGVyc29uYXMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLlBFUlNPTkE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3NraWxscyc6XG4gICAgICAgICAgZWxlbWVudFR5cGVFbnVtID0gRWxlbWVudFR5cGUuU0tJTEw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RlbXBsYXRlcyc6XG4gICAgICAgICAgZWxlbWVudFR5cGVFbnVtID0gRWxlbWVudFR5cGUuVEVNUExBVEU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2FnZW50cyc6XG4gICAgICAgICAgZWxlbWVudFR5cGVFbnVtID0gRWxlbWVudFR5cGUuQUdFTlQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21lbW9yaWVzJzpcbiAgICAgICAgICBlbGVtZW50VHlwZUVudW0gPSBFbGVtZW50VHlwZS5NRU1PUlk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gSW5zdGVhZCBvZiBzaWxlbnRseSByZXR1cm5pbmcgZW1wdHkgYXJyYXksIHRocm93IGRlc2NyaXB0aXZlIGVycm9yXG4gICAgICAgICAgY29uc3QgdmFsaWRUeXBlcyA9IFsncGVyc29uYXMnLCAnc2tpbGxzJywgJ3RlbXBsYXRlcycsICdhZ2VudHMnLCAnbWVtb3JpZXMnXTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCB0eXBlOiAnJHtlbGVtZW50VHlwZX0nLiBWYWxpZCB0eXBlcyBhcmU6ICR7dmFsaWRUeXBlcy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXJQYXRoID0gbG9jYWxQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoZWxlbWVudFR5cGVFbnVtKTtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgZGlyZWN0b3J5IGV4aXN0cyBhbmQgaXMgYWNjZXNzaWJsZVxuICAgICAgYXdhaXQgZnMuYWNjZXNzKGRpclBhdGgpO1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpclBhdGgpO1xuICAgICAgXG4gICAgICAvLyBGaWx0ZXIgYW5kIGV4dHJhY3QgbmFtZXMgZm9yIGFsbCBlbGVtZW50IGZpbGUgdHlwZXNcbiAgICAgIC8vIC0gUGVyc29uYXM6IC5tZCBmaWxlc1xuICAgICAgLy8gLSBTa2lsbHM6IC5tZCBmaWxlcyAgXG4gICAgICAvLyAtIFRlbXBsYXRlczogLm1kIG9yIC55YW1sIGZpbGVzXG4gICAgICAvLyAtIEFnZW50czogLm1kIGZpbGVzXG4gICAgICByZXR1cm4gZmlsZXNcbiAgICAgICAgLmZpbHRlcihmaWxlID0+IGZpbGUuZW5kc1dpdGgoJy5tZCcpIHx8IGZpbGUuZW5kc1dpdGgoJy5qc29uJykgfHwgZmlsZS5lbmRzV2l0aCgnLnlhbWwnKSlcbiAgICAgICAgLm1hcChmaWxlID0+IHtcbiAgICAgICAgICAvLyBSZW1vdmUgZmlsZSBleHRlbnNpb24gdG8gZ2V0IGVsZW1lbnQgbmFtZVxuICAgICAgICAgIGlmIChmaWxlLmVuZHNXaXRoKCcubWQnKSkgcmV0dXJuIGZpbGUucmVwbGFjZSgnLm1kJywgJycpO1xuICAgICAgICAgIGlmIChmaWxlLmVuZHNXaXRoKCcuanNvbicpKSByZXR1cm4gZmlsZS5yZXBsYWNlKCcuanNvbicsICcnKTtcbiAgICAgICAgICBpZiAoZmlsZS5lbmRzV2l0aCgnLnlhbWwnKSkgcmV0dXJuIGZpbGUucmVwbGFjZSgnLnlhbWwnLCAnJyk7XG4gICAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb3VyIHZhbGlkYXRpb24gZXJyb3IgZm9yIGludmFsaWQgZWxlbWVudCB0eXBlc1xuICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnSW52YWxpZCBlbGVtZW50IHR5cGU6JykpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7IC8vIFJlLXRocm93IHZhbGlkYXRpb24gZXJyb3JzIGZvciBkZWJ1Z2dpbmdcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRm9yIGZpbGUgc3lzdGVtIGVycm9ycywgcHJvdmlkZSBjb250ZXh0IGFib3V0IHRoZSBvcGVyYXRpb25cbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yLmNvZGUgPT09ICdFTk9FTlQnIFxuICAgICAgICA/IGBFbGVtZW50IGRpcmVjdG9yeSBub3QgZm91bmQgZm9yIHR5cGUgJyR7ZWxlbWVudFR5cGV9Jy4gRGlyZWN0b3J5IG1heSBub3QgZXhpc3QgeWV0LmBcbiAgICAgICAgOiBgRmFpbGVkIHRvIHJlYWQgZWxlbWVudHMgZGlyZWN0b3J5IGZvciB0eXBlICcke2VsZW1lbnRUeXBlfSc6ICR7ZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBmaWxlIHN5c3RlbSBlcnJvcid9YDtcbiAgICAgIFxuICAgICAgbG9nZ2VyLndhcm4oJ0Vycm9yIGluIGdldEVsZW1lbnRzTGlzdCcsIHsgXG4gICAgICAgIGVsZW1lbnRUeXBlLCBcbiAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UsIFxuICAgICAgICBjb2RlOiBlcnJvci5jb2RlIFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIGxvYWQgZWxlbWVudCBieSB0eXBlXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggY29udGVudCwgZmlsZW5hbWUsIGFuZCB0eXBlIHByb3BlcnRpZXNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZEVsZW1lbnRCeVR5cGUoZWxlbWVudE5hbWU6IHN0cmluZywgZWxlbWVudFR5cGU6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gU0VDVVJJVFk6IFNhbml0aXplIGVsZW1lbnROYW1lIGVhcmx5IHRvIHVzZSBpbiBlcnJvciBtZXNzYWdlcyB0b29cbiAgICBjb25zdCBzYW5pdGl6ZWROYW1lID0gcGF0aC5iYXNlbmFtZShlbGVtZW50TmFtZSk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxvY2FsUG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIGxldCBlbGVtZW50VHlwZUVudW06IEVsZW1lbnRUeXBlO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgJ3BlcnNvbmFzJzpcbiAgICAgICAgICBlbGVtZW50VHlwZUVudW0gPSBFbGVtZW50VHlwZS5QRVJTT05BO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdza2lsbHMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLlNLSUxMO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0ZW1wbGF0ZXMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLlRFTVBMQVRFO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhZ2VudHMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLkFHRU5UO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtZW1vcmllcyc6XG4gICAgICAgICAgZWxlbWVudFR5cGVFbnVtID0gRWxlbWVudFR5cGUuTUVNT1JZO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIEluc3RlYWQgb2Ygc2lsZW50bHkgcmV0dXJuaW5nIG51bGwsIHRocm93IGRlc2NyaXB0aXZlIGVycm9yXG4gICAgICAgICAgY29uc3QgdmFsaWRUeXBlcyA9IFsncGVyc29uYXMnLCAnc2tpbGxzJywgJ3RlbXBsYXRlcycsICdhZ2VudHMnLCAnbWVtb3JpZXMnXTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCB0eXBlOiAnJHtlbGVtZW50VHlwZX0nLiBWYWxpZCB0eXBlcyBhcmU6ICR7dmFsaWRUeXBlcy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXJQYXRoID0gbG9jYWxQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoZWxlbWVudFR5cGVFbnVtKTtcbiAgICAgIFxuICAgICAgLy8gRklYOiBDaGVjayBmb3IgYWN0dWFsIGZpbGUgZXh0ZW5zaW9ucyB1c2VkIGJ5IGVsZW1lbnRzICgubWQsIC5qc29uLCAueWFtbClcbiAgICAgIC8vIEVsZW1lbnRzIGFyZSBzdG9yZWQgYXMgbWFya2Rvd24gZmlsZXMgd2l0aCBZQU1MIGZyb250bWF0dGVyLCBub3QgSlNPTiBmaWxlc1xuICAgICAgLy8gUHJpb3JpdHkgb3JkZXI6IC5tZCAocHJpbWFyeSBmb3JtYXQpLCAuanNvbiAobGVnYWN5KSwgLnlhbWwvLnltbCAoY29uZmlnKVxuICAgICAgY29uc3QgZXh0ZW5zaW9ucyA9IFsnLm1kJywgJy5qc29uJywgJy55YW1sJywgJy55bWwnXTtcbiAgICAgIGxldCBjb250ZW50OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgIGxldCBmb3VuZEZpbGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgXG4gICAgICAvLyBEZWZpbmUgcmVhc29uYWJsZSBmaWxlIHNpemUgbGltaXQgKDEwTUIpXG4gICAgICBjb25zdCBNQVhfRklMRV9TSVpFID0gMTAgKiAxMDI0ICogMTAyNDsgLy8gMTBNQlxuICAgICAgXG4gICAgICBmb3IgKGNvbnN0IGV4dCBvZiBleHRlbnNpb25zKSB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRpclBhdGgsIGAke3Nhbml0aXplZE5hbWV9JHtleHR9YCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQ2hlY2sgZmlsZSBzaXplIGJlZm9yZSByZWFkaW5nIHRvIHByZXZlbnQgbWVtb3J5IGlzc3Vlc1xuICAgICAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChmaWxlUGF0aCk7XG4gICAgICAgICAgaWYgKHN0YXRzLnNpemUgPiBNQVhfRklMRV9TSVpFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgc2l6ZSBleGNlZWRzIGxpbWl0IG9mIDEwTUI6ICR7c3RhdHMuc2l6ZX0gYnl0ZXNgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgICBmb3VuZEZpbGUgPSBmaWxlUGF0aDtcbiAgICAgICAgICBicmVhazsgLy8gRm91bmQgdGhlIGZpbGUsIHN0b3Agc2VhcmNoaW5nXG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgLy8gRmlsZSBkb2Vzbid0IGV4aXN0IHdpdGggdGhpcyBleHRlbnNpb24sIHRyeSB0aGUgbmV4dCBvbmVcbiAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7IC8vIFJlLXRocm93IG5vbi1maWxlLW5vdC1mb3VuZCBlcnJvcnNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRklYOiBPbmx5IGNoZWNrIGZvdW5kRmlsZSwgbm90IGNvbnRlbnQgKGVtcHR5IGZpbGVzIGFyZSB2YWxpZClcbiAgICAgIGlmICghZm91bmRGaWxlKSB7XG4gICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGBGaWxlIG5vdCBmb3VuZGApLCB7IGNvZGU6ICdFTk9FTlQnIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBSZXR1cm4gYSBtaW5pbWFsIElFbGVtZW50LWxpa2Ugb2JqZWN0IHRoYXQgcG9ydGZvbGlvTWFuYWdlci5zYXZlRWxlbWVudCBjYW4gaGFuZGxlXG4gICAgICAvLyBUaGlzIHByZXNlcnZlcyB0aGUgcmF3IG1hcmtkb3duIGNvbnRlbnQgZm9yIHN5bmNpbmcgdG8gR2l0SHViXG4gICAgICByZXR1cm4ge1xuICAgICAgICAvLyBJRWxlbWVudCByZXF1aXJlZCBwcm9wZXJ0aWVzXG4gICAgICAgIGlkOiBgJHtlbGVtZW50VHlwZX1fJHtzYW5pdGl6ZWROYW1lfV8ke0RhdGUubm93KCl9YCxcbiAgICAgICAgdHlwZTogZWxlbWVudFR5cGVFbnVtLFxuICAgICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIG5hbWU6IHNhbml0aXplZE5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBMb2FkZWQgZnJvbSAke3BhdGguYmFzZW5hbWUoZm91bmRGaWxlKX1gLFxuICAgICAgICAgIGF1dGhvcjogJ3Vua25vd24nLFxuICAgICAgICAgIGNyZWF0ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICBtb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIHRhZ3M6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBJRWxlbWVudCByZXF1aXJlZCBtZXRob2RzIChtaW5pbWFsIGltcGxlbWVudGF0aW9ucyBmb3Igc3luYylcbiAgICAgICAgdmFsaWRhdGU6ICgpID0+ICh7IFxuICAgICAgICAgIGlzVmFsaWQ6IHRydWUsIFxuICAgICAgICAgIGVycm9yczogW10gYXMgYW55W10sIFxuICAgICAgICAgIHdhcm5pbmdzOiBbXSBhcyBhbnlbXSBcbiAgICAgICAgfSksXG4gICAgICAgIHNlcmlhbGl6ZTogKCkgPT4gY29udGVudCB8fCAnJyxcbiAgICAgICAgZGVzZXJpYWxpemU6ICgpID0+IHsgLyogbm8tb3AgKi8gfSxcbiAgICAgICAgZ2V0U3RhdHVzOiAoKSA9PiAoeyBzdGF0dXM6ICdhY3RpdmUnIGFzIGNvbnN0IH0pLFxuICAgICAgICBcbiAgICAgICAgLy8gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZvciBwb3J0Zm9saW8gc3luY1xuICAgICAgICBjb250ZW50OiBjb250ZW50IHx8ICcnLFxuICAgICAgICBmaWxlbmFtZTogcGF0aC5iYXNlbmFtZShmb3VuZEZpbGUpXG4gICAgICB9IGFzIGFueTsgLy8gVHlwZSBhc3NlcnRpb24gbmVlZGVkIHNpbmNlIHdlJ3JlIGR1Y2stdHlwaW5nIElFbGVtZW50XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBvdXIgdmFsaWRhdGlvbiBlcnJvciBmb3IgaW52YWxpZCBlbGVtZW50IHR5cGVzXG4gICAgICBpZiAoZXJyb3IubWVzc2FnZSAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdJbnZhbGlkIGVsZW1lbnQgdHlwZTonKSkge1xuICAgICAgICB0aHJvdyBlcnJvcjsgLy8gUmUtdGhyb3cgdmFsaWRhdGlvbiBlcnJvcnMgZm9yIGRlYnVnZ2luZ1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBQcm92aWRlIHNwZWNpZmljIGVycm9yIG1lc3NhZ2VzIGZvciBjb21tb24gZmlsZSBzeXN0ZW0gZXJyb3JzXG4gICAgICBsZXQgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gICAgICBcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBgRWxlbWVudCAnJHtzYW5pdGl6ZWROYW1lfScgbm90IGZvdW5kIGluICR7ZWxlbWVudFR5cGV9LiBTZWFyY2hlZCBmb3I6ICR7c2FuaXRpemVkTmFtZX0ubWQsICR7c2FuaXRpemVkTmFtZX0uanNvbiwgJHtzYW5pdGl6ZWROYW1lfS55YW1sLCAke3Nhbml0aXplZE5hbWV9LnltbGA7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYEVsZW1lbnQgJyR7c2FuaXRpemVkTmFtZX0nIGluICR7ZWxlbWVudFR5cGV9IGNvbnRhaW5zIGludmFsaWQgY29udGVudDogJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBgRmFpbGVkIHRvIGxvYWQgZWxlbWVudCAnJHtzYW5pdGl6ZWROYW1lfScgZnJvbSAke2VsZW1lbnRUeXBlfTogJHtlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJ31gO1xuICAgICAgfVxuICAgICAgXG4gICAgICBsb2dnZXIud2FybignRXJyb3IgaW4gbG9hZEVsZW1lbnRCeVR5cGUnLCB7IFxuICAgICAgICBlbGVtZW50TmFtZTogc2FuaXRpemVkTmFtZSwgXG4gICAgICAgIG9yaWdpbmFsTmFtZTogZWxlbWVudE5hbWUgIT09IHNhbml0aXplZE5hbWUgPyBlbGVtZW50TmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZWxlbWVudFR5cGUsIFxuICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSwgXG4gICAgICAgIGNvZGU6IGVycm9yLmNvZGUgXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcnVuKCkge1xuICAgIGxvZ2dlci5pbmZvKFwiU3RhcnRpbmcgRG9sbGhvdXNlTUNQIHNlcnZlci4uLlwiKTtcbiAgICAvLyBEb2NrZXIgYnVpbGQgdmVyaWZpY2F0aW9uIC0gcHJvdmVzIHdlJ3JlIHJ1bm5pbmcgZnJlc2ggY29kZVxuICAgIGxvZ2dlci5pbmZvKFwiQlVJTEQgVkVSSUZJQ0FUSU9OOiBSdW5uaW5nIGJ1aWxkIGZyb20gMjAyNS0wOC0xNyAxNjozMCBVVEMgLSBQUjYwNiBBUk02NCBmaXhcIik7XG4gICAgXG4gICAgLy8gRklYICM2MTA6IEluaXRpYWxpemUgcG9ydGZvbGlvIGFuZCBjb21wbGV0ZSBzZXR1cCBCRUZPUkUgY29ubmVjdGluZyB0byBNQ1BcbiAgICAvLyBUaGlzIGVuc3VyZXMgcGVyc29uYXMgYW5kIHBvcnRmb2xpbyBhcmUgcmVhZHkgd2hlbiBNQ1AgY29tbWFuZHMgYXJyaXZlXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBvcnRmb2xpbygpO1xuICAgICAgYXdhaXQgdGhpcy5jb21wbGV0ZUluaXRpYWxpemF0aW9uKCk7XG4gICAgICBsb2dnZXIuaW5mbyhcIlBvcnRmb2xpbyBhbmQgcGVyc29uYXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgLy8gT3V0cHV0IG1lc3NhZ2UgdGhhdCBEb2NrZXIgdGVzdHMgY2FuIGRldGVjdFxuICAgICAgbG9nZ2VyLmluZm8oXCJEb2xsaG91c2VNQ1Agc2VydmVyIHJlYWR5IC0gd2FpdGluZyBmb3IgTUNQIGNvbm5lY3Rpb24gb24gc3RkaW9cIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLnJ1bi5pbml0aWFsaXphdGlvbicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yOyAvLyBSZS10aHJvdyB0byBwcmV2ZW50IHNlcnZlciBmcm9tIHN0YXJ0aW5nIHdpdGggaW5jb21wbGV0ZSBpbml0aWFsaXphdGlvblxuICAgIH1cbiAgICBcbiAgICBjb25zdCB0cmFuc3BvcnQgPSBuZXcgU3RkaW9TZXJ2ZXJUcmFuc3BvcnQoKTtcbiAgICBcbiAgICAvLyBTZXQgdXAgZ3JhY2VmdWwgc2h1dGRvd24gaGFuZGxlcnNcbiAgICBjb25zdCBjbGVhbnVwID0gYXN5bmMgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oXCJTaHV0dGluZyBkb3duIERvbGxob3VzZU1DUCBzZXJ2ZXIuLi5cIik7XG4gICAgICBcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENsZWFuIHVwIEdpdEh1YiBhdXRoIG1hbmFnZXJcbiAgICAgICAgaWYgKHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmNsZWFudXAoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ2xlYW4gdXAgYW55IG90aGVyIHJlc291cmNlc1xuICAgICAgICBcbiAgICAgICAgbG9nZ2VyLmluZm8oXCJDbGVhbnVwIGNvbXBsZXRlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGR1cmluZyBjbGVhbnVwXCIsIHsgZXJyb3IgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9O1xuICAgIFxuICAgIC8vIFJlZ2lzdGVyIHNodXRkb3duIGhhbmRsZXJzXG4gICAgcHJvY2Vzcy5vbignU0lHSU5UJywgY2xlYW51cCk7XG4gICAgcHJvY2Vzcy5vbignU0lHVEVSTScsIGNsZWFudXApO1xuICAgIHByb2Nlc3Mub24oJ1NJR0hVUCcsIGNsZWFudXApO1xuICAgIFxuICAgIGF3YWl0IHRoaXMuc2VydmVyLmNvbm5lY3QodHJhbnNwb3J0KTtcbiAgICAvLyBNYXJrIHRoYXQgTUNQIGlzIG5vdyBjb25uZWN0ZWQgLSBubyBtb3JlIGNvbnNvbGUgb3V0cHV0IGFsbG93ZWRcbiAgICBsb2dnZXIuc2V0TUNQQ29ubmVjdGVkKCk7XG4gICAgbG9nZ2VyLmluZm8oXCJEb2xsaG91c2VNQ1Agc2VydmVyIHJ1bm5pbmcgb24gc3RkaW9cIik7XG4gIH1cbn1cblxuLy8gRXhwb3J0IGlzIGFscmVhZHkgYXQgY2xhc3MgZGVjbGFyYXRpb25cblxuLy8gT25seSBzdGFydCB0aGUgc2VydmVyIGlmIHRoaXMgZmlsZSBpcyBiZWluZyBydW4gZGlyZWN0bHkgKG5vdCBpbXBvcnRlZCBieSB0ZXN0cylcbi8vIEhhbmRsZSBkaWZmZXJlbnQgZXhlY3V0aW9uIG1ldGhvZHMgKGRpcmVjdCwgbnB4LCBDTEkpXG5jb25zdCBpc0RpcmVjdEV4ZWN1dGlvbiA9IGltcG9ydC5tZXRhLnVybCA9PT0gYGZpbGU6Ly8ke3Byb2Nlc3MuYXJndlsxXX1gO1xuY29uc3QgaXNOcHhFeGVjdXRpb24gPSBwcm9jZXNzLmVudi5ucG1fZXhlY3BhdGg/LmluY2x1ZGVzKCducHgnKTtcbmNvbnN0IGlzQ2xpRXhlY3V0aW9uID0gcHJvY2Vzcy5hcmd2WzFdPy5lbmRzV2l0aCgnL2RvbGxob3VzZW1jcCcpIHx8IHByb2Nlc3MuYXJndlsxXT8uZW5kc1dpdGgoJ1xcXFxkb2xsaG91c2VtY3AnKTtcbmNvbnN0IGlzVGVzdCA9IHByb2Nlc3MuZW52LkpFU1RfV09SS0VSX0lEO1xuXG4vLyBQcm9ncmVzc2l2ZSBzdGFydHVwIHdpdGggcmV0cmllcyBmb3IgbnB4L0NMSSBleGVjdXRpb25cbmNvbnN0IFNUQVJUVVBfREVMQVlTID0gWzEwLCA1MCwgMTAwLCAyMDBdOyAvLyBQcm9ncmVzc2l2ZSBkZWxheXMgaW4gbXNcblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRTZXJ2ZXJXaXRoUmV0cnkocmV0cmllc0xlZnQgPSBTVEFSVFVQX0RFTEFZUy5sZW5ndGgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgRG9sbGhvdXNlTUNQU2VydmVyKCk7XG4gICAgYXdhaXQgc2VydmVyLnJ1bigpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChyZXRyaWVzTGVmdCA+IDAgJiYgKGlzTnB4RXhlY3V0aW9uIHx8IGlzQ2xpRXhlY3V0aW9uKSkge1xuICAgICAgLy8gVHJ5IGFnYWluIHdpdGggYSBsb25nZXIgZGVsYXlcbiAgICAgIGNvbnN0IGRlbGF5SW5kZXggPSBTVEFSVFVQX0RFTEFZUy5sZW5ndGggLSByZXRyaWVzTGVmdDtcbiAgICAgIGNvbnN0IGRlbGF5ID0gU1RBUlRVUF9ERUxBWVNbZGVsYXlJbmRleF07XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXkpKTtcbiAgICAgIHJldHVybiBzdGFydFNlcnZlcldpdGhSZXRyeShyZXRyaWVzTGVmdCAtIDEpO1xuICAgIH1cbiAgICAvLyBGaW5hbCBmYWlsdXJlIC0gbWluaW1hbCBlcnJvciBtZXNzYWdlIGZvciBzZWN1cml0eVxuICAgIC8vIE5vdGU6IFVzaW5nIGNvbnNvbGUuZXJyb3IgaGVyZSBpcyBpbnRlbnRpb25hbCBhcyBpdCdzIHRoZSBmaW5hbCBlcnJvciBiZWZvcmUgZXhpdFxuICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBTZXJ2ZXIgc3RhcnR1cCBmYWlsZWRcIik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbmlmICgoaXNEaXJlY3RFeGVjdXRpb24gfHwgaXNOcHhFeGVjdXRpb24gfHwgaXNDbGlFeGVjdXRpb24pICYmICFpc1Rlc3QpIHtcbiAgc3RhcnRTZXJ2ZXJXaXRoUmV0cnkoKS5jYXRjaCgoKSA9PiB7XG4gICAgLy8gTm90ZTogVXNpbmcgY29uc29sZS5lcnJvciBoZXJlIGlzIGludGVudGlvbmFsIGFzIGl0J3MgdGhlIGZpbmFsIGVycm9yIGJlZm9yZSBleGl0XG4gICAgY29uc29sZS5lcnJvcihcIltEb2xsaG91c2VNQ1BdIFNlcnZlciBzdGFydHVwIGZhaWxlZFwiKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH0pO1xufSJdfQ==
5193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLGlEQUFpRDtBQUNqRCxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDeEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQyxDQUFDLENBQUM7QUFFSCxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25ELE9BQU8sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENBQUMsQ0FBQyxDQUFDO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBd0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNoSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBaUIsTUFBTSx5QkFBeUIs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RCxJQUFJLENBQUMsaUJBQWlCLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDdkUsb0JBQW9CLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ2hDLG9GQUFvRjtRQUNwRixPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbi8vIERlZmVuc2l2ZSBlcnJvciBoYW5kbGluZyBmb3IgbnB4L0NMSSBleGVjdXRpb25cbnByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgKGVycm9yKSA9PiB7XG4gIGNvbnNvbGUuZXJyb3IoJ1tEb2xsaG91c2VNQ1BdIFNlcnZlciBzdGFydHVwIGZhaWxlZCcpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59KTtcblxucHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgKHJlYXNvbiwgcHJvbWlzZSkgPT4ge1xuICBjb25zb2xlLmVycm9yKCdbRG9sbGhvdXNlTUNQXSBTZXJ2ZXIgc3RhcnR1cCBmYWlsZWQnKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufSk7XG5cbmltcG9ydCB7IFNlcnZlciB9IGZyb20gXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU3RkaW9TZXJ2ZXJUcmFuc3BvcnQgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvc3RkaW8uanNcIjtcbmltcG9ydCB7IE1jcEVycm9yLCBFcnJvckNvZGUgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay90eXBlcy5qc1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBsb2FkSW5kaWNhdG9yQ29uZmlnLCBmb3JtYXRJbmRpY2F0b3IsIHZhbGlkYXRlQ3VzdG9tRm9ybWF0LCB0eXBlIEluZGljYXRvckNvbmZpZyB9IGZyb20gJy4vY29uZmlnL2luZGljYXRvci1jb25maWcuanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4vc2VjdXJpdHkvc2VjdXJlWWFtbFBhcnNlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eUVycm9yIH0gZnJvbSAnLi9lcnJvcnMvU2VjdXJpdHlFcnJvci5qcyc7XG5pbXBvcnQgeyBTZWN1cmVFcnJvckhhbmRsZXIgfSBmcm9tICcuL3NlY3VyaXR5L2Vycm9ySGFuZGxlci5qcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXIsIEVycm9yQ2F0ZWdvcnkgfSBmcm9tICcuL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5cbi8vIEltcG9ydCBtb2R1bGFyaXplZCBjb21wb25lbnRzXG5pbXBvcnQgeyBQZXJzb25hLCBQZXJzb25hTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzL3BlcnNvbmEuanMnO1xuaW1wb3J0IHsgQVBJQ2FjaGUsIENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4vY2FjaGUvaW5kZXguanMnO1xuaW1wb3J0IHsgdmFsaWRhdGVGaWxlbmFtZSwgc2FuaXRpemVJbnB1dCwgdmFsaWRhdGVDb250ZW50U2l6ZSwgdmFsaWRhdGVVc2VybmFtZSwgTUNQSW5wdXRWYWxpZGF0b3IgfSBmcm9tICcuL3NlY3VyaXR5L0lucHV0VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNFQ1VSSVRZX0xJTUlUUywgVkFMSURBVElPTl9QQVRURVJOUyB9IGZyb20gJy4vc2VjdXJpdHkvY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tICcuL3NlY3VyaXR5L2NvbnRlbnRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgUGF0aFZhbGlkYXRvciB9IGZyb20gJy4vc2VjdXJpdHkvcGF0aFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tICcuL3NlY3VyaXR5L2ZpbGVMb2NrTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUFub255bW91c0lkLCBnZW5lcmF0ZVVuaXF1ZUlkLCBzbHVnaWZ5IH0gZnJvbSAnLi91dGlscy9maWxlc3lzdGVtLmpzJztcbmltcG9ydCB7IEdpdEh1YkNsaWVudCwgQ29sbGVjdGlvbkJyb3dzZXIsIENvbGxlY3Rpb25JbmRleE1hbmFnZXIsIENvbGxlY3Rpb25TZWFyY2gsIFBlcnNvbmFEZXRhaWxzLCBQZXJzb25hU3VibWl0dGVyLCBFbGVtZW50SW5zdGFsbGVyIH0gZnJvbSAnLi9jb2xsZWN0aW9uL2luZGV4LmpzJztcbmltcG9ydCB7IFNlcnZlclNldHVwLCBJVG9vbEhhbmRsZXIgfSBmcm9tICcuL3NlcnZlci9pbmRleC5qcyc7XG5pbXBvcnQgeyBHaXRIdWJBdXRoTWFuYWdlciwgdHlwZSBEZXZpY2VDb2RlUmVzcG9uc2UgfSBmcm9tICcuL2F1dGgvR2l0SHViQXV0aE1hbmFnZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgUGVyc29uYUV4cG9ydGVyLCBQZXJzb25hSW1wb3J0ZXIgfSBmcm9tICcuL3BlcnNvbmEvZXhwb3J0LWltcG9ydC9pbmRleC5qcyc7XG5pbXBvcnQgeyBpc0RlZmF1bHRQZXJzb25hIH0gZnJvbSAnLi9jb25zdGFudHMvZGVmYXVsdFBlcnNvbmFzLmpzJztcbmltcG9ydCB7IFBvcnRmb2xpb01hbmFnZXIsIEVsZW1lbnRUeXBlIH0gZnJvbSAnLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBNaWdyYXRpb25NYW5hZ2VyIH0gZnJvbSAnLi9wb3J0Zm9saW8vTWlncmF0aW9uTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBTa2lsbE1hbmFnZXIgfSBmcm9tICcuL2VsZW1lbnRzL3NraWxscy9pbmRleC5qcyc7XG5pbXBvcnQgeyBTa2lsbCB9IGZyb20gJy4vZWxlbWVudHMvc2tpbGxzL1NraWxsLmpzJztcbmltcG9ydCB7IFRlbXBsYXRlTWFuYWdlciB9IGZyb20gJy4vZWxlbWVudHMvdGVtcGxhdGVzL1RlbXBsYXRlTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZVJlbmRlcmVyIH0gZnJvbSAnLi91dGlscy9UZW1wbGF0ZVJlbmRlcmVyLmpzJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi9lbGVtZW50cy90ZW1wbGF0ZXMvVGVtcGxhdGUuanMnO1xuaW1wb3J0IHsgQWdlbnRNYW5hZ2VyIH0gZnJvbSAnLi9lbGVtZW50cy9hZ2VudHMvQWdlbnRNYW5hZ2VyLmpzJztcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi9lbGVtZW50cy9hZ2VudHMvQWdlbnQuanMnO1xuaW1wb3J0IHsgTWVtb3J5TWFuYWdlciB9IGZyb20gJy4vZWxlbWVudHMvbWVtb3JpZXMvTWVtb3J5TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBNZW1vcnkgfSBmcm9tICcuL2VsZW1lbnRzL21lbW9yaWVzL01lbW9yeS5qcyc7XG5pbXBvcnQgeyBDb25maWdNYW5hZ2VyIH0gZnJvbSAnLi9jb25maWcvQ29uZmlnTWFuYWdlci5qcyc7XG4vLyBDb25maWdXaXphcmQgaW1wb3J0cyByZW1vdmVkIC0gbm90IGluY2x1ZGVkIGluIGhvdGZpeFxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcblxuXG5cbi8vIERldGVjdCBleGVjdXRpb24gZW52aXJvbm1lbnRcbmNvbnN0IEVYRUNVVElPTl9FTlYgPSB7XG4gIGlzTnB4OiBwcm9jZXNzLmVudi5ucG1fZXhlY3BhdGg/LmluY2x1ZGVzKCducHgnKSB8fCBmYWxzZSxcbiAgaXNDbGk6IHByb2Nlc3MuYXJndlsxXT8uZW5kc1dpdGgoJy9kb2xsaG91c2VtY3AnKSB8fCBmYWxzZSxcbiAgaXNEaXJlY3Q6ICFwcm9jZXNzLmVudi5ucG1fZXhlY3BhdGgsXG4gIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgc2NyaXB0UGF0aDogcHJvY2Vzcy5hcmd2WzFdLFxufTtcblxuLy8gT25seSBsb2cgZXhlY3V0aW9uIGVudmlyb25tZW50IGluIGRlYnVnIG1vZGVcbmlmIChwcm9jZXNzLmVudi5ET0xMSE9VU0VfREVCVUcpIHtcbiAgY29uc29sZS5lcnJvcignW0RvbGxob3VzZU1DUF0gRGVidWcgbW9kZSBlbmFibGVkJyk7XG59XG5cbmV4cG9ydCBjbGFzcyBEb2xsaG91c2VNQ1BTZXJ2ZXIgaW1wbGVtZW50cyBJVG9vbEhhbmRsZXIge1xuICBwcml2YXRlIHNlcnZlcjogU2VydmVyO1xuICBwdWJsaWMgcGVyc29uYXNEaXI6IHN0cmluZyB8IG51bGw7XG4gIHByaXZhdGUgcGVyc29uYXM6IE1hcDxzdHJpbmcsIFBlcnNvbmE+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGFjdGl2ZVBlcnNvbmE6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1cnJlbnRVc2VyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0luaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaW5pdGlhbGl6YXRpb25Qcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYXBpQ2FjaGU6IEFQSUNhY2hlID0gbmV3IEFQSUNhY2hlKCk7XG4gIHByaXZhdGUgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUgPSBuZXcgQ29sbGVjdGlvbkNhY2hlKCk7XG4gIHByaXZhdGUgcmF0ZUxpbWl0VHJhY2tlciA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXJbXT4oKTtcbiAgcHJpdmF0ZSBpbmRpY2F0b3JDb25maWc6IEluZGljYXRvckNvbmZpZztcbiAgcHJpdmF0ZSBnaXRodWJDbGllbnQ6IEdpdEh1YkNsaWVudDtcbiAgcHJpdmF0ZSBnaXRodWJBdXRoTWFuYWdlcjogR2l0SHViQXV0aE1hbmFnZXI7XG4gIHByaXZhdGUgY29sbGVjdGlvbkluZGV4TWFuYWdlcjogQ29sbGVjdGlvbkluZGV4TWFuYWdlcjtcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uQnJvd3NlcjogQ29sbGVjdGlvbkJyb3dzZXI7XG4gIHByaXZhdGUgY29sbGVjdGlvblNlYXJjaDogQ29sbGVjdGlvblNlYXJjaDtcbiAgcHJpdmF0ZSBwZXJzb25hRGV0YWlsczogUGVyc29uYURldGFpbHM7XG4gIHByaXZhdGUgZWxlbWVudEluc3RhbGxlcjogRWxlbWVudEluc3RhbGxlcjtcbiAgcHJpdmF0ZSBwZXJzb25hU3VibWl0dGVyOiBQZXJzb25hU3VibWl0dGVyO1xuICBwcml2YXRlIHNlcnZlclNldHVwOiBTZXJ2ZXJTZXR1cDtcbiAgcHJpdmF0ZSBwZXJzb25hRXhwb3J0ZXI6IFBlcnNvbmFFeHBvcnRlcjtcbiAgcHJpdmF0ZSBwZXJzb25hSW1wb3J0ZXI/OiBQZXJzb25hSW1wb3J0ZXI7XG4gIHByaXZhdGUgcG9ydGZvbGlvTWFuYWdlcjogUG9ydGZvbGlvTWFuYWdlcjtcbiAgcHJpdmF0ZSBtaWdyYXRpb25NYW5hZ2VyOiBNaWdyYXRpb25NYW5hZ2VyO1xuICBwcml2YXRlIHNraWxsTWFuYWdlcjogU2tpbGxNYW5hZ2VyO1xuICBwcml2YXRlIHRlbXBsYXRlTWFuYWdlcjogVGVtcGxhdGVNYW5hZ2VyO1xuICBwcml2YXRlIHRlbXBsYXRlUmVuZGVyZXI6IFRlbXBsYXRlUmVuZGVyZXI7XG4gIHByaXZhdGUgYWdlbnRNYW5hZ2VyOiBBZ2VudE1hbmFnZXI7XG4gIHByaXZhdGUgbWVtb3J5TWFuYWdlcjogTWVtb3J5TWFuYWdlcjtcbiAgLy8gQ29uZmlnV2l6YXJkQ2hlY2sgcmVtb3ZlZCAtIG5vdCBpbmNsdWRlZCBpbiBob3RmaXhcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNlcnZlciA9IG5ldyBTZXJ2ZXIoXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiZG9sbGhvdXNlbWNwXCIsXG4gICAgICAgIHZlcnNpb246IFwiMS4wLjAtYnVpbGQtMjAyNTA4MTctMTYzMC1wcjYwNlwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgICAgdG9vbHM6IHt9LFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBDb25maWdXaXphcmRDaGVjayBpbml0aWFsaXphdGlvbiByZW1vdmVkIC0gbm90IGluY2x1ZGVkIGluIGhvdGZpeFxuICAgIFxuICAgIC8vIEluaXRpYWxpemUgcG9ydGZvbGlvIHN5c3RlbVxuICAgIHRoaXMucG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICB0aGlzLm1pZ3JhdGlvbk1hbmFnZXIgPSBuZXcgTWlncmF0aW9uTWFuYWdlcih0aGlzLnBvcnRmb2xpb01hbmFnZXIpO1xuICAgIFxuICAgIC8vIENSSVRJQ0FMIEZJWDogRG9uJ3QgYWNjZXNzIGRpcmVjdG9yaWVzIHVudGlsIGFmdGVyIG1pZ3JhdGlvbiBydW5zXG4gICAgLy8gUHJldmlvdXNseTogdGhpcy5wZXJzb25hc0RpciB3YXMgc2V0IGhlcmUsIGNyZWF0aW5nIGRpcmVjdG9yaWVzIGJlZm9yZSBtaWdyYXRpb24gY291bGQgZml4IHRoZW1cbiAgICAvLyBOb3c6IFdlIGRlbGF5IGRpcmVjdG9yeSBhY2Nlc3MgdW50aWwgaW5pdGlhbGl6ZVBvcnRmb2xpbygpIGNvbXBsZXRlc1xuICAgIC8vIFVzaW5nIG51bGwgdG8gbWFrZSB0aGUgdW5pbml0aWFsaXplZCBzdGF0ZSBleHBsaWNpdCAocGVyIFBSIHJldmlldyBmZWVkYmFjaylcbiAgICB0aGlzLnBlcnNvbmFzRGlyID0gbnVsbDsgLy8gV2lsbCBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBpbiBjb21wbGV0ZUluaXRpYWxpemF0aW9uKClcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGVsZW1lbnQgbWFuYWdlcnNcbiAgICB0aGlzLnNraWxsTWFuYWdlciA9IG5ldyBTa2lsbE1hbmFnZXIoKTtcbiAgICB0aGlzLnRlbXBsYXRlTWFuYWdlciA9IG5ldyBUZW1wbGF0ZU1hbmFnZXIoKTtcbiAgICB0aGlzLnRlbXBsYXRlUmVuZGVyZXIgPSBuZXcgVGVtcGxhdGVSZW5kZXJlcih0aGlzLnRlbXBsYXRlTWFuYWdlcik7XG4gICAgdGhpcy5hZ2VudE1hbmFnZXIgPSBuZXcgQWdlbnRNYW5hZ2VyKHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRCYXNlRGlyKCkpO1xuICAgIHRoaXMubWVtb3J5TWFuYWdlciA9IG5ldyBNZW1vcnlNYW5hZ2VyKCk7XG4gICAgXG4gICAgLy8gTG9nIHJlc29sdmVkIHBhdGggZm9yIGRlYnVnZ2luZ1xuICAgIGxvZ2dlci5pbmZvKGBQZXJzb25hcyBkaXJlY3RvcnkgcmVzb2x2ZWQgdG86ICR7dGhpcy5wZXJzb25hc0Rpcn1gKTtcbiAgICBcbiAgICAvLyBQYXRoVmFsaWRhdG9yIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbWlncmF0aW9uIGNvbXBsZXRlc1xuICAgIFxuICAgIC8vIExvYWQgdXNlciBpZGVudGl0eSBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIHRoaXMuY3VycmVudFVzZXIgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfVVNFUiB8fCBudWxsO1xuICAgIFxuICAgIC8vIExvYWQgaW5kaWNhdG9yIGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLmluZGljYXRvckNvbmZpZyA9IGxvYWRJbmRpY2F0b3JDb25maWcoKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHBlcnNvbmEgbWFuYWdlclxuICAgIFxuICAgIC8vIEluaXRpYWxpemUgY29sbGVjdGlvbiBtb2R1bGVzXG4gICAgdGhpcy5naXRodWJDbGllbnQgPSBuZXcgR2l0SHViQ2xpZW50KHRoaXMuYXBpQ2FjaGUsIHRoaXMucmF0ZUxpbWl0VHJhY2tlcik7XG4gICAgdGhpcy5naXRodWJBdXRoTWFuYWdlciA9IG5ldyBHaXRIdWJBdXRoTWFuYWdlcih0aGlzLmFwaUNhY2hlKTtcbiAgICB0aGlzLmNvbGxlY3Rpb25JbmRleE1hbmFnZXIgPSBuZXcgQ29sbGVjdGlvbkluZGV4TWFuYWdlcigpO1xuICAgIHRoaXMuY29sbGVjdGlvbkJyb3dzZXIgPSBuZXcgQ29sbGVjdGlvbkJyb3dzZXIodGhpcy5naXRodWJDbGllbnQsIHRoaXMuY29sbGVjdGlvbkNhY2hlLCB0aGlzLmNvbGxlY3Rpb25JbmRleE1hbmFnZXIpO1xuICAgIHRoaXMuY29sbGVjdGlvblNlYXJjaCA9IG5ldyBDb2xsZWN0aW9uU2VhcmNoKHRoaXMuZ2l0aHViQ2xpZW50LCB0aGlzLmNvbGxlY3Rpb25DYWNoZSk7XG4gICAgdGhpcy5wZXJzb25hRGV0YWlscyA9IG5ldyBQZXJzb25hRGV0YWlscyh0aGlzLmdpdGh1YkNsaWVudCk7XG4gICAgdGhpcy5lbGVtZW50SW5zdGFsbGVyID0gbmV3IEVsZW1lbnRJbnN0YWxsZXIodGhpcy5naXRodWJDbGllbnQpO1xuICAgIHRoaXMucGVyc29uYVN1Ym1pdHRlciA9IG5ldyBQZXJzb25hU3VibWl0dGVyKCk7XG4gICAgXG4gICAgLy8gVXBkYXRlIG1hbmFnZXIgd2lsbCBiZSBpbml0aWFsaXplZCBhZnRlciBtaWdyYXRpb24gY29tcGxldGVzIHRvIGF2b2lkIGpzZG9tIGNyYXNoXG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBleHBvcnQvaW1wb3J0L3NoYXJlIG1vZHVsZXNcbiAgICB0aGlzLnBlcnNvbmFFeHBvcnRlciA9IG5ldyBQZXJzb25hRXhwb3J0ZXIodGhpcy5jdXJyZW50VXNlcik7XG4gICAgLy8gUGVyc29uYUltcG9ydGVyIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbWlncmF0aW9uIGNvbXBsZXRlc1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgc2VydmVyIHNldHVwXG4gICAgdGhpcy5zZXJ2ZXJTZXR1cCA9IG5ldyBTZXJ2ZXJTZXR1cCgpO1xuICAgIHRoaXMuc2VydmVyU2V0dXAuc2V0dXBTZXJ2ZXIodGhpcy5zZXJ2ZXIsIHRoaXMpO1xuICAgIFxuICAgIC8vIEZJWCAjNjEwOiBQb3J0Zm9saW8gaW5pdGlhbGl6YXRpb24gbW92ZWQgdG8gcnVuKCkgbWV0aG9kIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25cbiAgICAvLyBQcmV2aW91c2x5OiB0aGlzLmluaXRpYWxpemVQb3J0Zm9saW8oKS50aGVuKCkgcmFuIGFzeW5jIGluIGNvbnN0cnVjdG9yXG4gICAgLy8gTm93OiBJbml0aWFsaXphdGlvbiBoYXBwZW5zIHN5bmNocm9ub3VzbHkgaW4gcnVuKCkgYmVmb3JlIE1DUCBjb25uZWN0aW9uXG4gIH1cbiAgXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVBvcnRmb2xpbygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDaGVjayBpZiBtaWdyYXRpb24gaXMgbmVlZGVkXG4gICAgY29uc3QgbmVlZHNNaWdyYXRpb24gPSBhd2FpdCB0aGlzLm1pZ3JhdGlvbk1hbmFnZXIubmVlZHNNaWdyYXRpb24oKTtcbiAgICBcbiAgICBpZiAobmVlZHNNaWdyYXRpb24pIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdMZWdhY3kgcGVyc29uYXMgZGV0ZWN0ZWQuIFN0YXJ0aW5nIG1pZ3JhdGlvbi4uLicpO1xuICAgICAgXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1pZ3JhdGlvbk1hbmFnZXIubWlncmF0ZSh7IGJhY2t1cDogdHJ1ZSB9KTtcbiAgICAgIFxuICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBTdWNjZXNzZnVsbHkgbWlncmF0ZWQgJHtyZXN1bHQubWlncmF0ZWRDb3VudH0gcGVyc29uYXNgKTtcbiAgICAgICAgaWYgKHJlc3VsdC5iYWNrZWRVcCAmJiByZXN1bHQuYmFja3VwUGF0aCkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBCYWNrdXAgY3JlYXRlZCBhdDogJHtyZXN1bHQuYmFja3VwUGF0aH1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdNaWdyYXRpb24gY29tcGxldGVkIHdpdGggZXJyb3JzOicpO1xuICAgICAgICByZXN1bHQuZXJyb3JzLmZvckVhY2goZXJyID0+IGxvZ2dlci5lcnJvcihgICAtICR7ZXJyfWApKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gRW5zdXJlIHBvcnRmb2xpbyBzdHJ1Y3R1cmUgZXhpc3RzXG4gICAgY29uc3QgcG9ydGZvbGlvRXhpc3RzID0gYXdhaXQgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmV4aXN0cygpO1xuICAgIGlmICghcG9ydGZvbGlvRXhpc3RzKSB7XG4gICAgICBsb2dnZXIuaW5mbygnQ3JlYXRpbmcgcG9ydGZvbGlvIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuLi4nKTtcbiAgICAgIGF3YWl0IHRoaXMucG9ydGZvbGlvTWFuYWdlci5pbml0aWFsaXplKCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEluaXRpYWxpemUgY29sbGVjdGlvbiBjYWNoZSBmb3IgYW5vbnltb3VzIGFjY2Vzc1xuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZUNvbGxlY3Rpb25DYWNoZSgpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ29tcGxldGUgaW5pdGlhbGl6YXRpb24gYWZ0ZXIgcG9ydGZvbGlvIGlzIHJlYWR5XG4gICAqIEZJWCAjNjEwOiBUaGlzIHdhcyBwcmV2aW91c2x5IGluIGEgLnRoZW4oKSBjYWxsYmFjayBpbiB0aGUgY29uc3RydWN0b3JcbiAgICogTm93IGNhbGxlZCBzeW5jaHJvbm91c2x5IGZyb20gcnVuKCkgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjb21wbGV0ZUluaXRpYWxpemF0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIE5PVyBzYWZlIHRvIGFjY2VzcyBkaXJlY3RvcmllcyBhZnRlciBtaWdyYXRpb25cbiAgICB0aGlzLnBlcnNvbmFzRGlyID0gdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuUEVSU09OQSk7XG4gICAgXG4gICAgLy8gTG9nIHJlc29sdmVkIHBhdGggZm9yIGRlYnVnZ2luZ1xuICAgIGxvZ2dlci5pbmZvKGBQZXJzb25hcyBkaXJlY3RvcnkgcmVzb2x2ZWQgdG86ICR7dGhpcy5wZXJzb25hc0Rpcn1gKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIFBhdGhWYWxpZGF0b3Igd2l0aCB0aGUgcGVyc29uYXMgZGlyZWN0b3J5XG4gICAgUGF0aFZhbGlkYXRvci5pbml0aWFsaXplKHRoaXMucGVyc29uYXNEaXIpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgdXBkYXRlIG1hbmFnZXIgd2l0aCBzYWZlIGRpcmVjdG9yeVxuICAgIFxuICAgIC8vIEluaXRpYWxpemUgaW1wb3J0IG1vZHVsZSB0aGF0IGRlcGVuZHMgb24gcGVyc29uYXNEaXJcbiAgICB0aGlzLnBlcnNvbmFJbXBvcnRlciA9IG5ldyBQZXJzb25hSW1wb3J0ZXIodGhpcy5wZXJzb25hc0RpciwgdGhpcy5jdXJyZW50VXNlcik7XG4gICAgXG4gICAgdGhpcy5sb2FkUGVyc29uYXMoKTtcbiAgICBcbiAgICAvLyBNYXJrIGluaXRpYWxpemF0aW9uIGFzIGNvbXBsZXRlXG4gICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEVuc3VyZSBzZXJ2ZXIgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGFueSBvcGVyYXRpb25cbiAgICogRklYICM2MTA6IEFkZGVkIGZvciB0ZXN0IGNvbXBhdGliaWxpdHkgLSB0ZXN0cyBkb24ndCBjYWxsIHJ1bigpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVuc3VyZUluaXRpYWxpemVkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gSWYgaW5pdGlhbGl6YXRpb24gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2FpdCBmb3IgaXRcbiAgICBpZiAodGhpcy5pbml0aWFsaXphdGlvblByb21pc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBTdGFydCBpbml0aWFsaXphdGlvblxuICAgIHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBvcnRmb2xpbygpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbXBsZXRlSW5pdGlhbGl6YXRpb24oKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCJQb3J0Zm9saW8gYW5kIHBlcnNvbmFzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAobGF6eSlcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5lbnN1cmVJbml0aWFsaXplZCcsIGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICBcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgY29sbGVjdGlvbiBjYWNoZSB3aXRoIHNlZWQgZGF0YSBmb3IgYW5vbnltb3VzIGJyb3dzaW5nXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVDb2xsZWN0aW9uQ2FjaGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGlzQ2FjaGVWYWxpZCA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbkNhY2hlLmlzQ2FjaGVWYWxpZCgpO1xuICAgICAgaWYgKCFpc0NhY2hlVmFsaWQpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ0luaXRpYWxpemluZyBjb2xsZWN0aW9uIGNhY2hlIHdpdGggc2VlZCBkYXRhLi4uJyk7XG4gICAgICAgIGNvbnN0IHsgQ29sbGVjdGlvblNlZWRlciB9ID0gYXdhaXQgaW1wb3J0KCcuL2NvbGxlY3Rpb24vQ29sbGVjdGlvblNlZWRlci5qcycpO1xuICAgICAgICBjb25zdCBzZWVkRGF0YSA9IENvbGxlY3Rpb25TZWVkZXIuZ2V0U2VlZERhdGEoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uQ2FjaGUuc2F2ZUNhY2hlKHNlZWREYXRhKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYENvbGxlY3Rpb24gY2FjaGUgaW5pdGlhbGl6ZWQgd2l0aCAke3NlZWREYXRhLmxlbmd0aH0gaXRlbXNgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uQ2FjaGUuZ2V0Q2FjaGVTdGF0cygpO1xuICAgICAgICBsb2dnZXIuZGVidWcoYENvbGxlY3Rpb24gY2FjaGUgYWxyZWFkeSB2YWxpZCB3aXRoICR7c3RhdHMuaXRlbUNvdW50fSBpdGVtc2ApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5pbml0aWFsaXplQ29sbGVjdGlvbkNhY2hlJywgZXJyb3IpO1xuICAgICAgLy8gRG9uJ3QgdGhyb3cgLSBjYWNoZSBmYWlsdXJlcyBzaG91bGRuJ3QgcHJldmVudCBzZXJ2ZXIgc3RhcnR1cFxuICAgIH1cbiAgfVxuXG4gIC8vIFRvb2wgaGFuZGxlciBtZXRob2RzIC0gbm93IHB1YmxpYyBmb3IgYWNjZXNzIGZyb20gdG9vbCBtb2R1bGVzXG4gIFxuICBwcml2YXRlIGdldFBlcnNvbmFJbmRpY2F0b3IoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlUGVyc29uYSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgY29uc3QgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KHRoaXMuYWN0aXZlUGVyc29uYSk7XG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWF0SW5kaWNhdG9yKHRoaXMuaW5kaWNhdG9yQ29uZmlnLCB7XG4gICAgICBuYW1lOiBwZXJzb25hLm1ldGFkYXRhLm5hbWUsXG4gICAgICB2ZXJzaW9uOiBwZXJzb25hLm1ldGFkYXRhLnZlcnNpb24sXG4gICAgICBhdXRob3I6IHBlcnNvbmEubWV0YWRhdGEuYXV0aG9yLFxuICAgICAgY2F0ZWdvcnk6IHBlcnNvbmEubWV0YWRhdGEuY2F0ZWdvcnlcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemUgZWxlbWVudCB0eXBlIHRvIGhhbmRsZSBib3RoIHNpbmd1bGFyIChuZXcpIGFuZCBwbHVyYWwgKGxlZ2FjeSkgZm9ybXNcbiAgICogVGhpcyBwcm92aWRlcyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGR1cmluZyB0aGUgdHJhbnNpdGlvbiB0byB2MS40LjBcbiAgICovXG4gIHByaXZhdGUgbm9ybWFsaXplRWxlbWVudFR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBNYXAgcGx1cmFsIGZvcm1zIHRvIHNpbmd1bGFyIEVsZW1lbnRUeXBlIHZhbHVlc1xuICAgIGNvbnN0IHBsdXJhbFRvU2luZ3VsYXJNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAncGVyc29uYXMnOiBFbGVtZW50VHlwZS5QRVJTT05BLFxuICAgICAgJ3NraWxscyc6IEVsZW1lbnRUeXBlLlNLSUxMLFxuICAgICAgJ3RlbXBsYXRlcyc6IEVsZW1lbnRUeXBlLlRFTVBMQVRFLFxuICAgICAgJ2FnZW50cyc6IEVsZW1lbnRUeXBlLkFHRU5ULFxuICAgICAgJ21lbW9yaWVzJzogRWxlbWVudFR5cGUuTUVNT1JZLFxuICAgICAgJ2Vuc2VtYmxlcyc6IEVsZW1lbnRUeXBlLkVOU0VNQkxFXG4gICAgfTtcbiAgICBcbiAgICAvLyBJZiBpdCdzIGFscmVhZHkgYSB2YWxpZCBFbGVtZW50VHlwZSB2YWx1ZSwgcmV0dXJuIGFzLWlzXG4gICAgaWYgKE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmluY2x1ZGVzKHR5cGUgYXMgRWxlbWVudFR5cGUpKSB7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gICAgXG4gICAgLy8gSWYgaXQncyBhIHBsdXJhbCBmb3JtLCBjb252ZXJ0IHRvIHNpbmd1bGFyXG4gICAgaWYgKHBsdXJhbFRvU2luZ3VsYXJNYXBbdHlwZV0pIHtcbiAgICAgIC8vIExvZyBkZXByZWNhdGlvbiB3YXJuaW5nXG4gICAgICBsb2dnZXIud2FybihgVXNpbmcgcGx1cmFsIGVsZW1lbnQgdHlwZSAnJHt0eXBlfScgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBzaW5ndWxhciBmb3JtICcke3BsdXJhbFRvU2luZ3VsYXJNYXBbdHlwZV19JyBpbnN0ZWFkLmApO1xuICAgICAgcmV0dXJuIHBsdXJhbFRvU2luZ3VsYXJNYXBbdHlwZV07XG4gICAgfVxuICAgIFxuICAgIC8vIFVua25vd24gdHlwZSAtIHJldHVybiBhcy1pcyBhbmQgbGV0IHZhbGlkYXRpb24gaGFuZGxlIGl0XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhbiBlbGVtZW50IGJ5IG5hbWUsIHN1cHBvcnRpbmcgYm90aCBleGFjdCBkaXNwbGF5IG5hbWUgYW5kIGZpbGVuYW1lIChzbHVnKSBtYXRjaGluZ1xuICAgKiBUaGlzIHByb3ZpZGVzIGJldHRlciBVWCBieSBhbGxvd2luZyB1c2VycyB0byByZWZlcmVuY2UgZWxlbWVudHMgYnkgZWl0aGVyIGZvcm1hdFxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIHRvIHNlYXJjaCBmb3IgKGNhbiBiZSBkaXNwbGF5IG5hbWUgb3IgZmlsZW5hbWUgd2l0aG91dCBleHRlbnNpb24pXG4gICAqIEBwYXJhbSBlbGVtZW50TGlzdCAtIFRoZSBsaXN0IG9mIGVsZW1lbnRzIHRvIHNlYXJjaCB0aHJvdWdoXG4gICAqIEByZXR1cm5zIFRoZSBmb3VuZCBlbGVtZW50IG9yIHVuZGVmaW5lZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmaW5kRWxlbWVudEZsZXhpYmx5KG5hbWU6IHN0cmluZywgZWxlbWVudExpc3Q6IGFueVtdKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAoIW5hbWUgfHwgIWVsZW1lbnRMaXN0IHx8IGVsZW1lbnRMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgXG4gICAgLy8gTm9ybWFsaXplIHRoZSBzZWFyY2ggbmFtZSBmb3IgY29tcGFyaXNvblxuICAgIGNvbnN0IHNlYXJjaE5hbWVMb3dlciA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBzZWFyY2hOYW1lU2x1ZyA9IHNsdWdpZnkobmFtZSk7XG4gICAgXG4gICAgLy8gRmlyc3QgdHJ5IGV4YWN0IG5hbWUgbWF0Y2ggKGNhc2UtaW5zZW5zaXRpdmUpXG4gICAgbGV0IGVsZW1lbnQgPSBlbGVtZW50TGlzdC5maW5kKGUgPT4gXG4gICAgICBlLm1ldGFkYXRhPy5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBzZWFyY2hOYW1lTG93ZXJcbiAgICApO1xuICAgIFxuICAgIC8vIElmIG5vdCBmb3VuZCwgdHJ5IHNsdWcgbWF0Y2ggKGZpbGVuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uKVxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IGVsZW1lbnRMaXN0LmZpbmQoZSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRTbHVnID0gc2x1Z2lmeShlLm1ldGFkYXRhPy5uYW1lIHx8ICcnKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRTbHVnID09PSBzZWFyY2hOYW1lU2x1ZyB8fCBlbGVtZW50U2x1ZyA9PT0gc2VhcmNoTmFtZUxvd2VyO1xuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIC8vIElmIHN0aWxsIG5vdCBmb3VuZCwgdHJ5IHBhcnRpYWwgbWF0Y2ggb24gZmlsZW5hbWVcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50TGlzdC5maW5kKGUgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50TmFtZSA9IGUubWV0YWRhdGE/Lm5hbWUgfHwgJyc7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRTbHVnID0gc2x1Z2lmeShlbGVtZW50TmFtZSk7XG4gICAgICAgIHJldHVybiBlbGVtZW50U2x1Zy5pbmNsdWRlcyhzZWFyY2hOYW1lU2x1ZykgfHwgXG4gICAgICAgICAgICAgICBlbGVtZW50TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaE5hbWVMb3dlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgc2x1ZyBmb3JtYXQgKGxvd2VyY2FzZSB3aXRoIGh5cGhlbnMpXG4gICAqIE1hdGNoZXMgdGhlIGZvcm1hdCB1c2VkIGZvciBlbGVtZW50IGZpbGVuYW1lc1xuICAgKi9cbiAgXG4gIC8qKlxuICAgKiBTYW5pdGl6ZSBtZXRhZGF0YSBvYmplY3QgdG8gcHJldmVudCBwcm90b3R5cGUgcG9sbHV0aW9uXG4gICAqIFJlbW92ZXMgYW55IGRhbmdlcm91cyBwcm9wZXJ0aWVzIHRoYXQgY291bGQgYWZmZWN0IE9iamVjdC5wcm90b3R5cGVcbiAgICovXG4gIHByaXZhdGUgc2FuaXRpemVNZXRhZGF0YShtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGlmICghbWV0YWRhdGEgfHwgdHlwZW9mIG1ldGFkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBkYW5nZXJvdXNQcm9wZXJ0aWVzID0gWydfX3Byb3RvX18nLCAnY29uc3RydWN0b3InLCAncHJvdG90eXBlJ107XG4gICAgY29uc3Qgc2FuaXRpemVkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YWRhdGEpKSB7XG4gICAgICBpZiAoIWRhbmdlcm91c1Byb3BlcnRpZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBzYW5pdGl6ZSBuZXN0ZWQgb2JqZWN0c1xuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBzYW5pdGl6ZWRba2V5XSA9IHRoaXMuc2FuaXRpemVNZXRhZGF0YSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2FuaXRpemVkW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gc2FuaXRpemVkO1xuICB9XG5cblxuICBwcml2YXRlIGFzeW5jIGxvYWRQZXJzb25hcygpIHtcbiAgICAvLyBWYWxpZGF0ZSB0aGUgcGVyc29uYXMgZGlyZWN0b3J5IHBhdGhcbiAgICAvLyBwZXJzb25hc0RpciBpcyBndWFyYW50ZWVkIHRvIGJlIHNldCBieSBjb21wbGV0ZUluaXRpYWxpemF0aW9uIGJlZm9yZSB0aGlzIGlzIGNhbGxlZFxuICAgIGlmICghcGF0aC5pc0Fic29sdXRlKHRoaXMucGVyc29uYXNEaXIhKSkge1xuICAgICAgbG9nZ2VyLndhcm4oYFBlcnNvbmFzIGRpcmVjdG9yeSBwYXRoIGlzIG5vdCBhYnNvbHV0ZTogJHt0aGlzLnBlcnNvbmFzRGlyfWApO1xuICAgIH1cbiAgICBcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKHRoaXMucGVyc29uYXNEaXIhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gQ3JlYXRlIHBlcnNvbmFzIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5ta2Rpcih0aGlzLnBlcnNvbmFzRGlyISwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBDcmVhdGVkIHBlcnNvbmFzIGRpcmVjdG9yeSBhdDogJHt0aGlzLnBlcnNvbmFzRGlyfWApO1xuICAgICAgICAvLyBDb250aW51ZSB0byB0cnkgbG9hZGluZyAoZGlyZWN0b3J5IHdpbGwgYmUgZW1wdHkpXG4gICAgICB9IGNhdGNoIChta2RpckVycm9yKSB7XG4gICAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmxvYWRQZXJzb25hcy5ta2RpcicsIG1rZGlyRXJyb3IsIHsgcGVyc29uYXNEaXI6IHRoaXMucGVyc29uYXNEaXIgfSk7XG4gICAgICAgIC8vIERvbid0IHRocm93IC0gZW1wdHkgcG9ydGZvbGlvIGlzIHZhbGlkXG4gICAgICAgIHRoaXMucGVyc29uYXMuY2xlYXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBwZXJzb25hc0RpciBpcyBndWFyYW50ZWVkIHRvIGJlIHNldCBieSBjb21wbGV0ZUluaXRpYWxpemF0aW9uIGJlZm9yZSB0aGlzIGlzIGNhbGxlZFxuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHRoaXMucGVyc29uYXNEaXIhKTtcbiAgICAgIGNvbnN0IG1hcmtkb3duRmlsZXMgPSBmaWxlc1xuICAgICAgICAuZmlsdGVyKGZpbGUgPT4gZmlsZS5lbmRzV2l0aCgnLm1kJykpXG4gICAgICAgIC5maWx0ZXIoZmlsZSA9PiAhdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmlzVGVzdEVsZW1lbnQoZmlsZSkpO1xuXG4gICAgICB0aGlzLnBlcnNvbmFzLmNsZWFyKCk7XG4gICAgICBcbiAgICAgIGlmIChtYXJrZG93bkZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBsb2dnZXIuaW5mbygnW0RvbGxob3VzZU1DUF0gTm8gcGVyc29uYXMgZm91bmQgaW4gcG9ydGZvbGlvLiBVc2UgYnJvd3NlX2NvbGxlY3Rpb24gdG8gaW5zdGFsbCBzb21lIScpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgbWFya2Rvd25GaWxlcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIhLCBmaWxlKTtcbiAgICAgICAgICBjb25zdCBmaWxlQ29udGVudCA9IGF3YWl0IFBhdGhWYWxpZGF0b3Iuc2FmZVJlYWRGaWxlKGZpbGVQYXRoKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBVc2Ugc2VjdXJlIFlBTUwgcGFyc2VyXG4gICAgICAgICAgbGV0IHBhcnNlZDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGFyc2VkID0gU2VjdXJlWWFtbFBhcnNlci5zYWZlTWF0dGVyKGZpbGVDb250ZW50KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VjdXJpdHlFcnJvcikge1xuICAgICAgICAgICAgICBsb2dnZXIud2FybihgU2VjdXJpdHkgdGhyZWF0IGRldGVjdGVkIGluIHBlcnNvbmEgJHtmaWxlfTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHBhcnNlZC5kYXRhIGFzIFBlcnNvbmFNZXRhZGF0YTtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gcGFyc2VkLmNvbnRlbnQ7XG5cbiAgICAgICAgICBpZiAoIW1ldGFkYXRhLm5hbWUpIHtcbiAgICAgICAgICAgIG1ldGFkYXRhLm5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGUsICcubWQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBHZW5lcmF0ZSB1bmlxdWUgSUQgaWYgbm90IHByZXNlbnRcbiAgICAgICAgICBsZXQgdW5pcXVlSWQgPSBtZXRhZGF0YS51bmlxdWVfaWQ7XG4gICAgICAgICAgaWYgKCF1bmlxdWVJZCkge1xuICAgICAgICAgICAgY29uc3QgYXV0aG9yRm9ySWQgPSBtZXRhZGF0YS5hdXRob3IgfHwgdGhpcy5nZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCk7XG4gICAgICAgICAgICB1bmlxdWVJZCA9IGdlbmVyYXRlVW5pcXVlSWQobWV0YWRhdGEubmFtZSwgYXV0aG9yRm9ySWQpO1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBHZW5lcmF0ZWQgdW5pcXVlIElEIGZvciAke21ldGFkYXRhLm5hbWV9OiAke3VuaXF1ZUlkfWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbmV3IG1ldGFkYXRhIGZpZWxkc1xuICAgICAgICAgIGlmICghbWV0YWRhdGEuY2F0ZWdvcnkpIG1ldGFkYXRhLmNhdGVnb3J5ID0gJ2dlbmVyYWwnO1xuICAgICAgICAgIGlmICghbWV0YWRhdGEuYWdlX3JhdGluZykgbWV0YWRhdGEuYWdlX3JhdGluZyA9ICdhbGwnO1xuICAgICAgICAgIGlmICghbWV0YWRhdGEuY29udGVudF9mbGFncykgbWV0YWRhdGEuY29udGVudF9mbGFncyA9IFtdO1xuICAgICAgICAgIGlmIChtZXRhZGF0YS5haV9nZW5lcmF0ZWQgPT09IHVuZGVmaW5lZCkgbWV0YWRhdGEuYWlfZ2VuZXJhdGVkID0gZmFsc2U7XG4gICAgICAgICAgaWYgKCFtZXRhZGF0YS5nZW5lcmF0aW9uX21ldGhvZCkgbWV0YWRhdGEuZ2VuZXJhdGlvbl9tZXRob2QgPSAnaHVtYW4nO1xuICAgICAgICAgIGlmICghbWV0YWRhdGEucHJpY2UpIG1ldGFkYXRhLnByaWNlID0gJ2ZyZWUnO1xuICAgICAgICAgIGlmICghbWV0YWRhdGEubGljZW5zZSkgbWV0YWRhdGEubGljZW5zZSA9ICdDQy1CWS1TQS00LjAnO1xuXG4gICAgICAgICAgY29uc3QgcGVyc29uYTogUGVyc29uYSA9IHtcbiAgICAgICAgICAgIG1ldGFkYXRhLFxuICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgIGZpbGVuYW1lOiBmaWxlLFxuICAgICAgICAgICAgdW5pcXVlX2lkOiB1bmlxdWVJZCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5wZXJzb25hcy5zZXQoZmlsZSwgcGVyc29uYSk7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBMb2FkZWQgcGVyc29uYTogJHttZXRhZGF0YS5uYW1lfSAoJHt1bmlxdWVJZH1gKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5sb2FkUGVyc29uYXMubG9hZEZpbGUnLCBlcnJvciwgeyBmaWxlIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBFTk9FTlQgZ3JhY2VmdWxseSAtIGRpcmVjdG9yeSBtaWdodCBub3QgZXhpc3QgeWV0XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1tEb2xsaG91c2VNQ1BdIFBlcnNvbmFzIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCB5ZXQgLSBwb3J0Zm9saW8gaXMgZW1wdHknKTtcbiAgICAgICAgdGhpcy5wZXJzb25hcy5jbGVhcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5sb2FkUGVyc29uYXMnLCBlcnJvcik7XG4gICAgICB0aGlzLnBlcnNvbmFzLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbGlzdFBlcnNvbmFzKCkge1xuICAgIGNvbnN0IHBlcnNvbmFMaXN0ID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKS5tYXAocGVyc29uYSA9PiAoe1xuICAgICAgZmlsZW5hbWU6IHBlcnNvbmEuZmlsZW5hbWUsXG4gICAgICB1bmlxdWVfaWQ6IHBlcnNvbmEudW5pcXVlX2lkLFxuICAgICAgbmFtZTogcGVyc29uYS5tZXRhZGF0YS5uYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHBlcnNvbmEubWV0YWRhdGEuZGVzY3JpcHRpb24sXG4gICAgICB0cmlnZ2VyczogcGVyc29uYS5tZXRhZGF0YS50cmlnZ2VycyB8fCBbXSxcbiAgICAgIHZlcnNpb246IHBlcnNvbmEubWV0YWRhdGEudmVyc2lvbiB8fCBcIjEuMFwiLFxuICAgICAgYXV0aG9yOiBwZXJzb25hLm1ldGFkYXRhLmF1dGhvciB8fCBcIlVua25vd25cIixcbiAgICAgIGNhdGVnb3J5OiBwZXJzb25hLm1ldGFkYXRhLmNhdGVnb3J5IHx8ICdnZW5lcmFsJyxcbiAgICAgIGFnZV9yYXRpbmc6IHBlcnNvbmEubWV0YWRhdGEuYWdlX3JhdGluZyB8fCAnYWxsJyxcbiAgICAgIHByaWNlOiBwZXJzb25hLm1ldGFkYXRhLnByaWNlIHx8ICdmcmVlJyxcbiAgICAgIGFpX2dlbmVyYXRlZDogcGVyc29uYS5tZXRhZGF0YS5haV9nZW5lcmF0ZWQgfHwgZmFsc2UsXG4gICAgICBhY3RpdmU6IHRoaXMuYWN0aXZlUGVyc29uYSA9PT0gcGVyc29uYS5maWxlbmFtZSxcbiAgICB9KSk7XG5cbiAgICBpZiAocGVyc29uYUxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX1Zb3UgZG9uJ3QgaGF2ZSBhbnkgcGVyc29uYXMgaW5zdGFsbGVkIHlldC4gV291bGQgeW91IGxpa2UgdG8gYnJvd3NlIHRoZSBEb2xsaG91c2VNQ1AgY29sbGVjdGlvbiBvbiBHaXRIdWIgdG8gc2VlIHdoYXQncyBhdmFpbGFibGU/IEkgY2FuIHNob3cgeW91IHBlcnNvbmFzIGZvciBjcmVhdGl2ZSB3cml0aW5nLCB0ZWNobmljYWwgYW5hbHlzaXMsIGFuZCBtb3JlLiBKdXN0IHNheSBcInllc1wiIG9yIHVzZSAnYnJvd3NlX2NvbGxlY3Rpb24nLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfUF2YWlsYWJsZSBQZXJzb25hcyAoJHtwZXJzb25hTGlzdC5sZW5ndGh9KTpcXG5cXG5gICtcbiAgICAgICAgICAgIHBlcnNvbmFMaXN0Lm1hcChwID0+IFxuICAgICAgICAgICAgICBgJHtwLmFjdGl2ZSA/ICfwn5S5ICcgOiAn4par77iPICd9Kioke3AubmFtZX0qKiAoJHtwLnVuaXF1ZV9pZH0pXFxuYCArXG4gICAgICAgICAgICAgIGAgICAke3AuZGVzY3JpcHRpb259XFxuYCArXG4gICAgICAgICAgICAgIGAgICDwn5OBICR7cC5jYXRlZ29yeX0gfCDwn46tICR7cC5hdXRob3J9IHwg8J+UliAke3AucHJpY2V9IHwgJHtwLmFpX2dlbmVyYXRlZCA/ICfwn6SWIEFJJyA6ICfwn5GkIEh1bWFuJ31cXG5gICtcbiAgICAgICAgICAgICAgYCAgIEFnZTogJHtwLmFnZV9yYXRpbmd9IHwgVmVyc2lvbjogJHtwLnZlcnNpb259XFxuYCArXG4gICAgICAgICAgICAgIGAgICBUcmlnZ2VyczogJHtwLnRyaWdnZXJzLmpvaW4oJywgJykgfHwgJ05vbmUnfVxcbmBcbiAgICAgICAgICAgICkuam9pbignXFxuJyksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBhY3RpdmF0ZVBlcnNvbmEocGVyc29uYUlkZW50aWZpZXI6IHN0cmluZykge1xuICAgIC8vIEVuaGFuY2VkIGlucHV0IHZhbGlkYXRpb24gZm9yIHBlcnNvbmEgaWRlbnRpZmllclxuICAgIGNvbnN0IHZhbGlkYXRlZElkZW50aWZpZXIgPSBNQ1BJbnB1dFZhbGlkYXRvci52YWxpZGF0ZVBlcnNvbmFJZGVudGlmaWVyKHBlcnNvbmFJZGVudGlmaWVyKTtcbiAgICBcbiAgICAvLyBUcnkgdG8gZmluZCBwZXJzb25hIGJ5IGZpbGVuYW1lIGZpcnN0LCB0aGVuIGJ5IG5hbWVcbiAgICBsZXQgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KHZhbGlkYXRlZElkZW50aWZpZXIpO1xuICAgIFxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgLy8gU2VhcmNoIGJ5IG5hbWVcbiAgICAgIHBlcnNvbmEgPSBBcnJheS5mcm9tKHRoaXMucGVyc29uYXMudmFsdWVzKCkpLmZpbmQocCA9PiBcbiAgICAgICAgcC5tZXRhZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IHZhbGlkYXRlZElkZW50aWZpZXIudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIHRocm93IG5ldyBNY3BFcnJvcihcbiAgICAgICAgRXJyb3JDb2RlLkludmFsaWRQYXJhbXMsXG4gICAgICAgIGBQZXJzb25hIG5vdCBmb3VuZDogJHtwZXJzb25hSWRlbnRpZmllcn1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZlUGVyc29uYSA9IHBlcnNvbmEuZmlsZW5hbWU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9UGVyc29uYSBBY3RpdmF0ZWQ6ICoqJHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9KipcXG5cXG5gICtcbiAgICAgICAgICAgIGAke3BlcnNvbmEubWV0YWRhdGEuZGVzY3JpcHRpb259XFxuXFxuYCArXG4gICAgICAgICAgICBgKipJbnN0cnVjdGlvbnM6KipcXG4ke3BlcnNvbmEuY29udGVudH1gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0QWN0aXZlUGVyc29uYSgpIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlUGVyc29uYSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9Tm8gcGVyc29uYSBpcyBjdXJyZW50bHkgYWN0aXZlLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KHRoaXMuYWN0aXZlUGVyc29uYSk7XG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICB0aGlzLmFjdGl2ZVBlcnNvbmEgPSBudWxsO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9QWN0aXZlIHBlcnNvbmEgbm90IGZvdW5kLiBEZWFjdGl2YXRlZC5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX1BY3RpdmUgUGVyc29uYTogKioke3BlcnNvbmEubWV0YWRhdGEubmFtZX0qKlxcblxcbmAgK1xuICAgICAgICAgICAgYCR7cGVyc29uYS5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG5cXG5gICtcbiAgICAgICAgICAgIGBGaWxlOiAke3BlcnNvbmEuZmlsZW5hbWV9XFxuYCArXG4gICAgICAgICAgICBgVmVyc2lvbjogJHtwZXJzb25hLm1ldGFkYXRhLnZlcnNpb24gfHwgJzEuMCd9XFxuYCArXG4gICAgICAgICAgICBgQXV0aG9yOiAke3BlcnNvbmEubWV0YWRhdGEuYXV0aG9yIHx8ICdVbmtub3duJ31gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVhY3RpdmF0ZVBlcnNvbmEoKSB7XG4gICAgY29uc3Qgd2FzQWN0aXZlID0gdGhpcy5hY3RpdmVQZXJzb25hICE9PSBudWxsO1xuICAgIGNvbnN0IGluZGljYXRvciA9IHRoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpO1xuICAgIHRoaXMuYWN0aXZlUGVyc29uYSA9IG51bGw7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogd2FzQWN0aXZlIFxuICAgICAgICAgICAgPyBgJHtpbmRpY2F0b3J94pyFIFBlcnNvbmEgZGVhY3RpdmF0ZWQuIEJhY2sgdG8gZGVmYXVsdCBtb2RlLmBcbiAgICAgICAgICAgIDogXCJObyBwZXJzb25hIHdhcyBhY3RpdmUuXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRQZXJzb25hRGV0YWlscyhwZXJzb25hSWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgLy8gVHJ5IHRvIGZpbmQgcGVyc29uYSBieSBmaWxlbmFtZSBmaXJzdCwgdGhlbiBieSBuYW1lXG4gICAgbGV0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldChwZXJzb25hSWRlbnRpZmllcik7XG4gICAgXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAvLyBTZWFyY2ggYnkgbmFtZSB3aXRoIHNsdWdpZnkgbm9ybWFsaXphdGlvbiAoZml4ZXMgRGVidWcgRGV0ZWN0aXZlJ3MgaWRlbnRpZmllZCBpc3N1ZSlcbiAgICAgIGNvbnN0IHNlYXJjaE5hbWVTbHVnID0gc2x1Z2lmeShwZXJzb25hSWRlbnRpZmllcik7XG4gICAgICBjb25zdCBzZWFyY2hOYW1lTG93ZXIgPSBwZXJzb25hSWRlbnRpZmllci50b0xvd2VyQ2FzZSgpO1xuICAgICAgXG4gICAgICBwZXJzb25hID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKS5maW5kKHAgPT4ge1xuICAgICAgICBjb25zdCBwZXJzb25hTmFtZUxvd2VyID0gcC5tZXRhZGF0YS5uYW1lPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBwZXJzb25hTmFtZVNsdWcgPSBzbHVnaWZ5KHAubWV0YWRhdGEubmFtZSB8fCAnJyk7XG4gICAgICAgIFxuICAgICAgICAvLyBUcnkgYm90aCBleGFjdCBtYXRjaCBhbmQgc2x1ZyBtYXRjaCBmb3IgZmxleGliaWxpdHlcbiAgICAgICAgcmV0dXJuIHBlcnNvbmFOYW1lTG93ZXIgPT09IHNlYXJjaE5hbWVMb3dlciB8fCBcbiAgICAgICAgICAgICAgIHBlcnNvbmFOYW1lU2x1ZyA9PT0gc2VhcmNoTmFtZVNsdWc7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIHRocm93IG5ldyBNY3BFcnJvcihcbiAgICAgICAgRXJyb3JDb2RlLkludmFsaWRQYXJhbXMsXG4gICAgICAgIGBQZXJzb25hIG5vdCBmb3VuZDogJHtwZXJzb25hSWRlbnRpZmllcn1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5OLICoqJHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9KiogRGV0YWlsc1xcblxcbmAgK1xuICAgICAgICAgICAgYCoqRGVzY3JpcHRpb246KiogJHtwZXJzb25hLm1ldGFkYXRhLmRlc2NyaXB0aW9ufVxcbmAgK1xuICAgICAgICAgICAgYCoqRmlsZToqKiAke3BlcnNvbmEuZmlsZW5hbWV9XFxuYCArXG4gICAgICAgICAgICBgKipWZXJzaW9uOioqICR7cGVyc29uYS5tZXRhZGF0YS52ZXJzaW9uIHx8ICcxLjAnfVxcbmAgK1xuICAgICAgICAgICAgYCoqQXV0aG9yOioqICR7cGVyc29uYS5tZXRhZGF0YS5hdXRob3IgfHwgJ1Vua25vd24nfVxcbmAgK1xuICAgICAgICAgICAgYCoqVHJpZ2dlcnM6KiogJHtwZXJzb25hLm1ldGFkYXRhLnRyaWdnZXJzPy5qb2luKCcsICcpIHx8ICdOb25lJ31cXG5cXG5gICtcbiAgICAgICAgICAgIGAqKkZ1bGwgQ29udGVudDoqKlxcblxcYFxcYFxcYFxcbiR7cGVyc29uYS5jb250ZW50fVxcblxcYFxcYFxcYGAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBhc3luYyByZWxvYWRQZXJzb25hcygpIHtcbiAgICBhd2FpdCB0aGlzLmxvYWRQZXJzb25hcygpO1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5SEIFJlbG9hZGVkICR7dGhpcy5wZXJzb25hcy5zaXplfSBwZXJzb25hcyBmcm9tICR7dGhpcy5wZXJzb25hc0Rpcn1gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLy8gPT09PT0gRWxlbWVudCBNZXRob2RzIChHZW5lcmljIGZvciBhbGwgZWxlbWVudCB0eXBlcykgPT09PT1cbiAgXG4gIGFzeW5jIGxpc3RFbGVtZW50cyh0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gTm9ybWFsaXplIHRoZSB0eXBlIHRvIGhhbmRsZSBib3RoIHBsdXJhbCBhbmQgc2luZ3VsYXIgZm9ybXNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIFxuICAgICAgc3dpdGNoIChub3JtYWxpemVkVHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6XG4gICAgICAgICAgcmV0dXJuIHRoaXMubGlzdFBlcnNvbmFzKCk7XG4gICAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6IHtcbiAgICAgICAgICBjb25zdCBza2lsbHMgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgaWYgKHNraWxscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCJObyBza2lsbHMgYXJlIGN1cnJlbnRseSBpbnN0YWxsZWQuIFRoZSBEb2xsaG91c2VNQ1AgY29sbGVjdGlvbiBoYXMgc2tpbGxzIGZvciBjb2RlIHJldmlldywgZGF0YSBhbmFseXNpcywgY3JlYXRpdmUgd3JpdGluZyBhbmQgbW9yZS4gV291bGQgeW91IGxpa2UgbWUgdG8gc2hvdyB5b3Ugd2hhdCdzIGF2YWlsYWJsZT8gSnVzdCBzYXkgXFxcInllc1xcXCIgb3IgSSBjYW4gaGVscCB5b3UgY3JlYXRlIGEgY3VzdG9tIHNraWxsLlwiXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBza2lsbExpc3QgPSBza2lsbHMubWFwKHNraWxsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhpdHkgPSBza2lsbC5tZXRhZGF0YS5jb21wbGV4aXR5IHx8ICdiZWdpbm5lcic7XG4gICAgICAgICAgICBjb25zdCBkb21haW5zID0gc2tpbGwubWV0YWRhdGEuZG9tYWlucz8uam9pbignLCAnKSB8fCAnZ2VuZXJhbCc7XG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gc2tpbGwudmVyc2lvbiB8fCBza2lsbC5tZXRhZGF0YS52ZXJzaW9uIHx8ICcxLjAuMCc7XG4gICAgICAgICAgICByZXR1cm4gYPCfm6DvuI8gJHtza2lsbC5tZXRhZGF0YS5uYW1lfSAodiR7dmVyc2lvbn0pIC0gJHtza2lsbC5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG4gICBDb21wbGV4aXR5OiAke2NvbXBsZXhpdHl9IHwgRG9tYWluczogJHtkb21haW5zfWA7XG4gICAgICAgICAgfSkuam9pbignXFxuXFxuJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg8J+TmiBBdmFpbGFibGUgU2tpbGxzOlxcblxcbiR7c2tpbGxMaXN0fWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURToge1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IHRoaXMudGVtcGxhdGVNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBpZiAodGVtcGxhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIllvdSBoYXZlbid0IGluc3RhbGxlZCBhbnkgdGVtcGxhdGVzIHlldC4gV291bGQgeW91IGxpa2UgdG8gc2VlIGF2YWlsYWJsZSB0ZW1wbGF0ZXMgZm9yIGVtYWlscywgcmVwb3J0cywgYW5kIGRvY3VtZW50YXRpb24/IEkgY2FuIHNob3cgeW91IGV4YW1wbGVzIGZyb20gdGhlIGNvbGxlY3Rpb24gb3IgaGVscCB5b3UgY3JlYXRlIHlvdXIgb3duLiBXaGF0IHdvdWxkIHlvdSBwcmVmZXI/XCJcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlTGlzdCA9IHRlbXBsYXRlcy5tYXAodGVtcGxhdGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVzID0gdGVtcGxhdGUubWV0YWRhdGEudmFyaWFibGVzPy5tYXAodiA9PiB2Lm5hbWUpLmpvaW4oJywgJykgfHwgJ25vbmUnO1xuICAgICAgICAgICAgY29uc3QgdmVyc2lvbiA9IHRlbXBsYXRlLnZlcnNpb24gfHwgdGVtcGxhdGUubWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wLjAnO1xuICAgICAgICAgICAgcmV0dXJuIGDwn5OEICR7dGVtcGxhdGUubWV0YWRhdGEubmFtZX0gKHYke3ZlcnNpb259KSAtICR7dGVtcGxhdGUubWV0YWRhdGEuZGVzY3JpcHRpb259XFxuICAgVmFyaWFibGVzOiAke3ZhcmlhYmxlc31gO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcblxcbicpO1xuICAgICAgICAgIFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYPCfk50gQXZhaWxhYmxlIFRlbXBsYXRlczpcXG5cXG4ke3RlbXBsYXRlTGlzdH1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6IHtcbiAgICAgICAgICBjb25zdCBhZ2VudHMgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgaWYgKGFnZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCJObyBhZ2VudHMgaW5zdGFsbGVkIHlldC4gQWdlbnRzIGFyZSBhdXRvbm9tb3VzIGhlbHBlcnMgdGhhdCBjYW4gd29yayBvbiB0YXNrcyBpbmRlcGVuZGVudGx5LiBUaGUgRG9sbGhvdXNlTUNQIGNvbGxlY3Rpb24gaW5jbHVkZXMgdGFzayBtYW5hZ2VycywgcmVzZWFyY2ggYXNzaXN0YW50cywgYW5kIG1vcmUuIFdvdWxkIHlvdSBsaWtlIHRvIGJyb3dzZSBhdmFpbGFibGUgYWdlbnRzIG9yIGxlYXJuIGhvdyB0byBjcmVhdGUgeW91ciBvd24/XCJcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYWdlbnRMaXN0ID0gYWdlbnRzLm1hcChhZ2VudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcGVjaWFsaXphdGlvbnMgPSAoYWdlbnQubWV0YWRhdGEgYXMgYW55KS5zcGVjaWFsaXphdGlvbnM/LmpvaW4oJywgJykgfHwgJ2dlbmVyYWwnO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gYWdlbnQuZ2V0U3RhdHVzKCk7XG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gYWdlbnQudmVyc2lvbiB8fCBhZ2VudC5tZXRhZGF0YS52ZXJzaW9uIHx8ICcxLjAuMCc7XG4gICAgICAgICAgICByZXR1cm4gYPCfpJYgJHthZ2VudC5tZXRhZGF0YS5uYW1lfSAodiR7dmVyc2lvbn0pIC0gJHthZ2VudC5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG4gICBTdGF0dXM6ICR7c3RhdHVzfSB8IFNwZWNpYWxpemF0aW9uczogJHtzcGVjaWFsaXphdGlvbnN9YDtcbiAgICAgICAgICB9KS5qb2luKCdcXG5cXG4nKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYPCfpJYgQXZhaWxhYmxlIEFnZW50czpcXG5cXG4ke2FnZW50TGlzdH1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLk1FTU9SWToge1xuICAgICAgICAgIGNvbnN0IG1lbW9yaWVzID0gYXdhaXQgdGhpcy5tZW1vcnlNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBpZiAobWVtb3JpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IFwiTm8gbWVtb3JpZXMgc3RvcmVkIHlldC4gTWVtb3JpZXMgaGVscCBtZSByZW1lbWJlciBjb250ZXh0IGFib3V0IHBlb3BsZSwgcHJvamVjdHMsIGFuZCBjb252ZXJzYXRpb25zLiBXb3VsZCB5b3UgbGlrZSBtZSB0byBzdGFydCBjcmVhdGluZyBtZW1vcmllcyB0byB0cmFjayBpbXBvcnRhbnQgaW5mb3JtYXRpb24/XCJcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbWVtb3J5TGlzdCA9IG1lbW9yaWVzLm1hcChtZW1vcnkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmV0ZW50aW9uRGF5cyA9IChtZW1vcnkubWV0YWRhdGEgYXMgYW55KS5yZXRlbnRpb25EYXlzIHx8ICdwZXJtYW5lbnQnO1xuICAgICAgICAgICAgY29uc3QgdGFncyA9IChtZW1vcnkubWV0YWRhdGEgYXMgYW55KS50YWdzPy5qb2luKCcsICcpIHx8ICdub25lJztcbiAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBtZW1vcnkudmVyc2lvbiB8fCBtZW1vcnkubWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wLjAnO1xuICAgICAgICAgICAgcmV0dXJuIGDwn6egICR7bWVtb3J5Lm1ldGFkYXRhLm5hbWV9ICh2JHt2ZXJzaW9ufSkgLSAke21lbW9yeS5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG4gICBSZXRlbnRpb246ICR7cmV0ZW50aW9uRGF5c30gZGF5cyB8IFRhZ3M6ICR7dGFnc31gO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcblxcbicpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg8J+noCBBdmFpbGFibGUgTWVtb3JpZXM6XFxuXFxuJHttZW1vcnlMaXN0fWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9Jy4gQXZhaWxhYmxlIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmpvaW4oJywgJyl9IChvciBsZWdhY3kgcGx1cmFsIGZvcm1zOiBwZXJzb25hcywgc2tpbGxzLCB0ZW1wbGF0ZXMsIGFnZW50cylgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmhhbmRsZUxpc3RFbGVtZW50cycsIGVycm9yLCB7IHR5cGUgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGxpc3QgJHt0eXBlfTogJHtFcnJvckhhbmRsZXIuZ2V0VXNlck1lc3NhZ2UoZXJyb3IpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBhY3RpdmF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gTm9ybWFsaXplIHRoZSB0eXBlIHRvIGhhbmRsZSBib3RoIHBsdXJhbCBhbmQgc2luZ3VsYXIgZm9ybXNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIFxuICAgICAgc3dpdGNoIChub3JtYWxpemVkVHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGVQZXJzb25hKG5hbWUpO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiB7XG4gICAgICAgICAgLy8gVXNlIGZsZXhpYmxlIGZpbmRpbmcgdG8gc3VwcG9ydCBib3RoIGRpc3BsYXkgbmFtZSBhbmQgZmlsZW5hbWVcbiAgICAgICAgICBjb25zdCBhbGxTa2lsbHMgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgY29uc3Qgc2tpbGwgPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50RmxleGlibHkobmFtZSwgYWxsU2tpbGxzKTtcbiAgICAgICAgICBpZiAoIXNraWxsKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgU2tpbGwgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIEFjdGl2YXRlIHRoZSBza2lsbFxuICAgICAgICAgIGF3YWl0IHNraWxsLmFjdGl2YXRlPy4oKTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4pyFIFNraWxsICcke25hbWV9JyBhY3RpdmF0ZWRcXG5cXG4ke3NraWxsLmluc3RydWN0aW9uc31gXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURToge1xuICAgICAgICAgIC8vIFVzZSBmbGV4aWJsZSBmaW5kaW5nIHRvIHN1cHBvcnQgYm90aCBkaXNwbGF5IG5hbWUgYW5kIGZpbGVuYW1lXG4gICAgICAgICAgY29uc3QgYWxsVGVtcGxhdGVzID0gYXdhaXQgdGhpcy50ZW1wbGF0ZU1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gYXdhaXQgdGhpcy5maW5kRWxlbWVudEZsZXhpYmx5KG5hbWUsIGFsbFRlbXBsYXRlcyk7XG4gICAgICAgICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFRlbXBsYXRlICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB0ZW1wbGF0ZS5tZXRhZGF0YS52YXJpYWJsZXM/Lm1hcCgodjogYW55KSA9PiB2Lm5hbWUpLmpvaW4oJywgJykgfHwgJ25vbmUnO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBUZW1wbGF0ZSAnJHtuYW1lfScgcmVhZHkgdG8gdXNlXFxuVmFyaWFibGVzOiAke3ZhcmlhYmxlc31cXG5cXG5Vc2UgJ3JlbmRlcl90ZW1wbGF0ZScgdG8gZ2VuZXJhdGUgY29udGVudCB3aXRoIHRoaXMgdGVtcGxhdGUuYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOiB7XG4gICAgICAgICAgLy8gVXNlIGZsZXhpYmxlIGZpbmRpbmcgdG8gc3VwcG9ydCBib3RoIGRpc3BsYXkgbmFtZSBhbmQgZmlsZW5hbWVcbiAgICAgICAgICBjb25zdCBhbGxBZ2VudHMgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgY29uc3QgYWdlbnQgPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50RmxleGlibHkobmFtZSwgYWxsQWdlbnRzKTtcbiAgICAgICAgICBpZiAoIWFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgQWdlbnQgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIEFjdGl2YXRlIHRoZSBhZ2VudFxuICAgICAgICAgIGF3YWl0IGFnZW50LmFjdGl2YXRlKCk7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4pyFIEFnZW50ICcke25hbWV9JyBhY3RpdmF0ZWQgYW5kIHJlYWR5XFxuU3BlY2lhbGl6YXRpb25zOiAkeyhhZ2VudC5tZXRhZGF0YSBhcyBhbnkpLnNwZWNpYWxpemF0aW9ucz8uam9pbignLCAnKSB8fCAnZ2VuZXJhbCd9XFxuXFxuVXNlICdleGVjdXRlX2FnZW50JyB0byBnaXZlIHRoaXMgYWdlbnQgYSBnb2FsLmBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuTUVNT1JZOiB7XG4gICAgICAgICAgLy8gVXNlIGZsZXhpYmxlIGZpbmRpbmcgdG8gc3VwcG9ydCBib3RoIGRpc3BsYXkgbmFtZSBhbmQgZmlsZW5hbWVcbiAgICAgICAgICBjb25zdCBhbGxNZW1vcmllcyA9IGF3YWl0IHRoaXMubWVtb3J5TWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgY29uc3QgbWVtb3J5ID0gYXdhaXQgdGhpcy5maW5kRWxlbWVudEZsZXhpYmx5KG5hbWUsIGFsbE1lbW9yaWVzKTtcbiAgICAgICAgICBpZiAoIW1lbW9yeSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MIE1lbW9yeSAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBBY3RpdmF0ZSB0aGUgbWVtb3J5XG4gICAgICAgICAgYXdhaXQgbWVtb3J5LmFjdGl2YXRlKCk7XG5cbiAgICAgICAgICBjb25zdCByZXRlbnRpb25EYXlzID0gKG1lbW9yeS5tZXRhZGF0YSBhcyBhbnkpLnJldGVudGlvbkRheXMgfHwgJ3Blcm1hbmVudCc7XG4gICAgICAgICAgY29uc3QgdGFncyA9IChtZW1vcnkubWV0YWRhdGEgYXMgYW55KS50YWdzPy5qb2luKCcsICcpIHx8ICdub25lJztcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBNZW1vcnkgJyR7bmFtZX0nIGFjdGl2YXRlZFxcblJldGVudGlvbjogJHtyZXRlbnRpb25EYXlzfSBkYXlzXFxuVGFnczogJHt0YWdzfVxcblxcblRoaXMgbWVtb3J5IGlzIG5vdyBhdmFpbGFibGUgZm9yIGNvbnRleHQgYW5kIHdpbGwgYmUgdXNlZCB0byBlbmhhbmNlIHJlc3BvbnNlcy5gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBVbmtub3duIGVsZW1lbnQgdHlwZSAnJHt0eXBlfSdgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmhhbmRsZUFjdGl2YXRlRWxlbWVudCcsIGVycm9yLCB7IHR5cGUsIG5hbWUgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGFjdGl2YXRlICR7dHlwZX0gJyR7bmFtZX0nOiAke0Vycm9ySGFuZGxlci5nZXRVc2VyTWVzc2FnZShlcnJvcil9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGdldEFjdGl2ZUVsZW1lbnRzKHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBOb3JtYWxpemUgdGhlIHR5cGUgdG8gaGFuZGxlIGJvdGggcGx1cmFsIGFuZCBzaW5ndWxhciBmb3Jtc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBY3RpdmVQZXJzb25hKCk7XG4gICAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6IHtcbiAgICAgICAgICBjb25zdCBza2lsbHMgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgY29uc3QgYWN0aXZlU2tpbGxzID0gc2tpbGxzLmZpbHRlcihzID0+IHMuZ2V0U3RhdHVzKCkgPT09ICdhY3RpdmUnKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoYWN0aXZlU2tpbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIvCfk4sgTm8gYWN0aXZlIHNraWxsc1wiXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBza2lsbExpc3QgPSBhY3RpdmVTa2lsbHMubWFwKHMgPT4gYPCfm6DvuI8gJHtzLm1ldGFkYXRhLm5hbWV9YCkuam9pbignLCAnKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGBBY3RpdmUgc2tpbGxzOiAke3NraWxsTGlzdH1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwi8J+TnSBUZW1wbGF0ZXMgYXJlIHN0YXRlbGVzcyBhbmQgYWN0aXZhdGVkIG9uLWRlbWFuZCB3aGVuIHJlbmRlcmluZ1wiXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6IHtcbiAgICAgICAgICBjb25zdCBhZ2VudHMgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgY29uc3QgYWN0aXZlQWdlbnRzID0gYWdlbnRzLmZpbHRlcihhID0+IGEuZ2V0U3RhdHVzKCkgPT09ICdhY3RpdmUnKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoYWN0aXZlQWdlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIvCfpJYgTm8gYWN0aXZlIGFnZW50c1wiXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBhZ2VudExpc3QgPSBhY3RpdmVBZ2VudHMubWFwKGEgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ29hbHMgPSAoYSBhcyBhbnkpLnN0YXRlPy5nb2Fscz8ubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgICByZXR1cm4gYPCfpJYgJHthLm1ldGFkYXRhLm5hbWV9ICgke2dvYWxzfSBhY3RpdmUgZ29hbHMpYDtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGBBY3RpdmUgYWdlbnRzOlxcbiR7YWdlbnRMaXN0fWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuTUVNT1JZOiB7XG4gICAgICAgICAgY29uc3QgbWVtb3JpZXMgPSBhd2FpdCB0aGlzLm1lbW9yeU1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZU1lbW9yaWVzID0gbWVtb3JpZXMuZmlsdGVyKG0gPT4gbS5nZXRTdGF0dXMoKSA9PT0gJ2FjdGl2ZScpO1xuXG4gICAgICAgICAgaWYgKGFjdGl2ZU1lbW9yaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIvCfp6AgTm8gYWN0aXZlIG1lbW9yaWVzXCJcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbWVtb3J5TGlzdCA9IGFjdGl2ZU1lbW9yaWVzLm1hcChtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhZ3MgPSAobS5tZXRhZGF0YSBhcyBhbnkpLnRhZ3M/LmpvaW4oJywgJykgfHwgJ25vbmUnO1xuICAgICAgICAgICAgY29uc3QgcmV0ZW50aW9uRGF5cyA9IChtLm1ldGFkYXRhIGFzIGFueSkucmV0ZW50aW9uRGF5cyB8fCAncGVybWFuZW50JztcbiAgICAgICAgICAgIHJldHVybiBg8J+noCAke20ubWV0YWRhdGEubmFtZX0gKFRhZ3M6ICR7dGFnc30pIC0gJHtyZXRlbnRpb25EYXlzfSBkYXlzIHJldGVudGlvbmA7XG4gICAgICAgICAgfSkuam9pbignXFxuJyk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGBBY3RpdmUgbWVtb3JpZXM6XFxuJHttZW1vcnlMaXN0fWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9J2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZ2V0IGFjdGl2ZSAke3R5cGV9OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZ2V0IGFjdGl2ZSAke3R5cGV9OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBkZWFjdGl2YXRlRWxlbWVudChuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBOb3JtYWxpemUgdGhlIHR5cGUgdG8gaGFuZGxlIGJvdGggcGx1cmFsIGFuZCBzaW5ndWxhciBmb3Jtc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWFjdGl2YXRlUGVyc29uYSgpO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiB7XG4gICAgICAgICAgLy8gVXNlIGZsZXhpYmxlIGZpbmRpbmcgdG8gc3VwcG9ydCBib3RoIGRpc3BsYXkgbmFtZSBhbmQgZmlsZW5hbWVcbiAgICAgICAgICBjb25zdCBhbGxTa2lsbHMgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgY29uc3Qgc2tpbGwgPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50RmxleGlibHkobmFtZSwgYWxsU2tpbGxzKTtcbiAgICAgICAgICBpZiAoIXNraWxsKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgU2tpbGwgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGF3YWl0IHNraWxsLmRlYWN0aXZhdGU/LigpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBTa2lsbCAnJHtza2lsbC5tZXRhZGF0YS5uYW1lfScgZGVhY3RpdmF0ZWRgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwi8J+TnSBUZW1wbGF0ZXMgYXJlIHN0YXRlbGVzcyAtIG5vdGhpbmcgdG8gZGVhY3RpdmF0ZVwiXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6IHtcbiAgICAgICAgICAvLyBVc2UgZmxleGlibGUgZmluZGluZyB0byBzdXBwb3J0IGJvdGggZGlzcGxheSBuYW1lIGFuZCBmaWxlbmFtZVxuICAgICAgICAgIGNvbnN0IGFsbEFnZW50cyA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBjb25zdCBhZ2VudCA9IGF3YWl0IHRoaXMuZmluZEVsZW1lbnRGbGV4aWJseShuYW1lLCBhbGxBZ2VudHMpO1xuICAgICAgICAgIGlmICghYWdlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKdjCBBZ2VudCAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgYXdhaXQgYWdlbnQuZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBBZ2VudCAnJHthZ2VudC5tZXRhZGF0YS5uYW1lfScgZGVhY3RpdmF0ZWRgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLk1FTU9SWToge1xuICAgICAgICAgIC8vIFVzZSBmbGV4aWJsZSBmaW5kaW5nIHRvIHN1cHBvcnQgYm90aCBkaXNwbGF5IG5hbWUgYW5kIGZpbGVuYW1lXG4gICAgICAgICAgY29uc3QgYWxsTWVtb3JpZXMgPSBhd2FpdCB0aGlzLm1lbW9yeU1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IG1lbW9yeSA9IGF3YWl0IHRoaXMuZmluZEVsZW1lbnRGbGV4aWJseShuYW1lLCBhbGxNZW1vcmllcyk7XG4gICAgICAgICAgaWYgKCFtZW1vcnkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKdjCBNZW1vcnkgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXdhaXQgbWVtb3J5LmRlYWN0aXZhdGUoKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinIUgTWVtb3J5ICcke21lbW9yeS5tZXRhZGF0YS5uYW1lfScgZGVhY3RpdmF0ZWRgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBVbmtub3duIGVsZW1lbnQgdHlwZSAnJHt0eXBlfSdgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRlYWN0aXZhdGUgJHt0eXBlfSAnJHtuYW1lfSc6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBkZWFjdGl2YXRlICR7dHlwZX0gJyR7bmFtZX0nOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBnZXRFbGVtZW50RGV0YWlscyhuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBOb3JtYWxpemUgdGhlIHR5cGUgdG8gaGFuZGxlIGJvdGggcGx1cmFsIGFuZCBzaW5ndWxhciBmb3Jtc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQZXJzb25hRGV0YWlscyhuYW1lKTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDoge1xuICAgICAgICAgIC8vIFVzZSBmbGV4aWJsZSBmaW5kaW5nIHRvIHN1cHBvcnQgYm90aCBkaXNwbGF5IG5hbWUgYW5kIGZpbGVuYW1lXG4gICAgICAgICAgY29uc3QgYWxsU2tpbGxzID0gYXdhaXQgdGhpcy5za2lsbE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IHNraWxsID0gYXdhaXQgdGhpcy5maW5kRWxlbWVudEZsZXhpYmx5KG5hbWUsIGFsbFNraWxscyk7XG4gICAgICAgICAgaWYgKCFza2lsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFNraWxsICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBkZXRhaWxzID0gW1xuICAgICAgICAgICAgYPCfm6DvuI8gKioke3NraWxsLm1ldGFkYXRhLm5hbWV9KipgLFxuICAgICAgICAgICAgYCR7c2tpbGwubWV0YWRhdGEuZGVzY3JpcHRpb259YCxcbiAgICAgICAgICAgIGBgLFxuICAgICAgICAgICAgYCoqQ29tcGxleGl0eSoqOiAke3NraWxsLm1ldGFkYXRhLmNvbXBsZXhpdHkgfHwgJ2JlZ2lubmVyJ31gLFxuICAgICAgICAgICAgYCoqRG9tYWlucyoqOiAke3NraWxsLm1ldGFkYXRhLmRvbWFpbnM/LmpvaW4oJywgJykgfHwgJ2dlbmVyYWwnfWAsXG4gICAgICAgICAgICBgKipMYW5ndWFnZXMqKjogJHtza2lsbC5tZXRhZGF0YS5sYW5ndWFnZXM/LmpvaW4oJywgJykgfHwgJ2FueSd9YCxcbiAgICAgICAgICAgIGAqKlByZXJlcXVpc2l0ZXMqKjogJHtza2lsbC5tZXRhZGF0YS5wcmVyZXF1aXNpdGVzPy5qb2luKCcsICcpIHx8ICdub25lJ31gLFxuICAgICAgICAgICAgYGAsXG4gICAgICAgICAgICBgKipJbnN0cnVjdGlvbnMqKjpgLFxuICAgICAgICAgICAgc2tpbGwuaW5zdHJ1Y3Rpb25zXG4gICAgICAgICAgXTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoc2tpbGwubWV0YWRhdGEucGFyYW1ldGVycyAmJiBza2lsbC5tZXRhZGF0YS5wYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRldGFpbHMucHVzaCgnJywgJyoqUGFyYW1ldGVycyoqOicpO1xuICAgICAgICAgICAgc2tpbGwubWV0YWRhdGEucGFyYW1ldGVycy5mb3JFYWNoKChwOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgZGV0YWlscy5wdXNoKGAtICR7cC5uYW1lfSAoJHtwLnR5cGV9KTogJHtwLmRlc2NyaXB0aW9ufWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogZGV0YWlscy5qb2luKCdcXG4nKVxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOiB7XG4gICAgICAgICAgLy8gVXNlIGZsZXhpYmxlIGZpbmRpbmcgdG8gc3VwcG9ydCBib3RoIGRpc3BsYXkgbmFtZSBhbmQgZmlsZW5hbWVcbiAgICAgICAgICBjb25zdCBhbGxUZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLnRlbXBsYXRlTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50RmxleGlibHkobmFtZSwgYWxsVGVtcGxhdGVzKTtcbiAgICAgICAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgVGVtcGxhdGUgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IGRldGFpbHMgPSBbXG4gICAgICAgICAgICBg8J+ThCAqKiR7dGVtcGxhdGUubWV0YWRhdGEubmFtZX0qKmAsXG4gICAgICAgICAgICBgJHt0ZW1wbGF0ZS5tZXRhZGF0YS5kZXNjcmlwdGlvbn1gLFxuICAgICAgICAgICAgYGAsXG4gICAgICAgICAgICBgKipPdXRwdXQgRm9ybWF0Kio6ICR7KHRlbXBsYXRlLm1ldGFkYXRhIGFzIGFueSkub3V0cHV0X2Zvcm1hdCB8fCAndGV4dCd9YCxcbiAgICAgICAgICAgIGAqKlRlbXBsYXRlIENvbnRlbnQqKjpgLFxuICAgICAgICAgICAgJ2BgYCcsXG4gICAgICAgICAgICB0ZW1wbGF0ZS5jb250ZW50LFxuICAgICAgICAgICAgJ2BgYCdcbiAgICAgICAgICBdO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmICh0ZW1wbGF0ZS5tZXRhZGF0YS52YXJpYWJsZXMgJiYgdGVtcGxhdGUubWV0YWRhdGEudmFyaWFibGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRldGFpbHMucHVzaCgnJywgJyoqVmFyaWFibGVzKio6Jyk7XG4gICAgICAgICAgICB0ZW1wbGF0ZS5tZXRhZGF0YS52YXJpYWJsZXMuZm9yRWFjaCgodjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGRldGFpbHMucHVzaChgLSAke3YubmFtZX0gKCR7di50eXBlfSk6ICR7di5kZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGRldGFpbHMuam9pbignXFxuJylcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDoge1xuICAgICAgICAgIC8vIFVzZSBmbGV4aWJsZSBmaW5kaW5nIHRvIHN1cHBvcnQgYm90aCBkaXNwbGF5IG5hbWUgYW5kIGZpbGVuYW1lXG4gICAgICAgICAgY29uc3QgYWxsQWdlbnRzID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IGFnZW50ID0gYXdhaXQgdGhpcy5maW5kRWxlbWVudEZsZXhpYmx5KG5hbWUsIGFsbEFnZW50cyk7XG4gICAgICAgICAgaWYgKCFhZ2VudCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MIEFnZW50ICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBkZXRhaWxzID0gW1xuICAgICAgICAgICAgYPCfpJYgKioke2FnZW50Lm1ldGFkYXRhLm5hbWV9KipgLFxuICAgICAgICAgICAgYCR7YWdlbnQubWV0YWRhdGEuZGVzY3JpcHRpb259YCxcbiAgICAgICAgICAgIGBgLFxuICAgICAgICAgICAgYCoqU3RhdHVzKio6ICR7YWdlbnQuZ2V0U3RhdHVzKCl9YCxcbiAgICAgICAgICAgIGAqKlNwZWNpYWxpemF0aW9ucyoqOiAkeyhhZ2VudC5tZXRhZGF0YSBhcyBhbnkpLnNwZWNpYWxpemF0aW9ucz8uam9pbignLCAnKSB8fCAnZ2VuZXJhbCd9YCxcbiAgICAgICAgICAgIGAqKkRlY2lzaW9uIEZyYW1ld29yayoqOiAkeyhhZ2VudC5tZXRhZGF0YSBhcyBhbnkpLmRlY2lzaW9uRnJhbWV3b3JrIHx8ICdydWxlLWJhc2VkJ31gLFxuICAgICAgICAgICAgYCoqUmlzayBUb2xlcmFuY2UqKjogJHsoYWdlbnQubWV0YWRhdGEgYXMgYW55KS5yaXNrVG9sZXJhbmNlIHx8ICdsb3cnfWAsXG4gICAgICAgICAgICBgYCxcbiAgICAgICAgICAgIGAqKkluc3RydWN0aW9ucyoqOmAsXG4gICAgICAgICAgICAoYWdlbnQgYXMgYW55KS5pbnN0cnVjdGlvbnMgfHwgJ05vIGluc3RydWN0aW9ucyBhdmFpbGFibGUnXG4gICAgICAgICAgXTtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBhZ2VudFN0YXRlID0gKGFnZW50IGFzIGFueSkuc3RhdGU7XG4gICAgICAgICAgaWYgKGFnZW50U3RhdGU/LmdvYWxzICYmIGFnZW50U3RhdGUuZ29hbHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGV0YWlscy5wdXNoKCcnLCAnKipDdXJyZW50IEdvYWxzKio6Jyk7XG4gICAgICAgICAgICBhZ2VudFN0YXRlLmdvYWxzLmZvckVhY2goKGc6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBkZXRhaWxzLnB1c2goYC0gJHtnLmRlc2NyaXB0aW9ufSAoJHtnLnN0YXR1c30pYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBkZXRhaWxzLmpvaW4oJ1xcbicpXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLk1FTU9SWToge1xuICAgICAgICAgIC8vIFVzZSBmbGV4aWJsZSBmaW5kaW5nIHRvIHN1cHBvcnQgYm90aCBkaXNwbGF5IG5hbWUgYW5kIGZpbGVuYW1lXG4gICAgICAgICAgY29uc3QgYWxsTWVtb3JpZXMgPSBhd2FpdCB0aGlzLm1lbW9yeU1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IG1lbW9yeSA9IGF3YWl0IHRoaXMuZmluZEVsZW1lbnRGbGV4aWJseShuYW1lLCBhbGxNZW1vcmllcyk7XG4gICAgICAgICAgaWYgKCFtZW1vcnkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKdjCBNZW1vcnkgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZGV0YWlscyA9IFtcbiAgICAgICAgICAgIGDwn6egICoqJHttZW1vcnkubWV0YWRhdGEubmFtZX0qKmAsXG4gICAgICAgICAgICBgJHttZW1vcnkubWV0YWRhdGEuZGVzY3JpcHRpb259YCxcbiAgICAgICAgICAgIGBgLFxuICAgICAgICAgICAgYCoqU3RhdHVzKio6ICR7bWVtb3J5LmdldFN0YXR1cygpfWAsXG4gICAgICAgICAgICBgKipSZXRlbnRpb24qKjogJHsobWVtb3J5Lm1ldGFkYXRhIGFzIGFueSkucmV0ZW50aW9uRGF5cyB8fCAncGVybWFuZW50J30gZGF5c2AsXG4gICAgICAgICAgICBgKipUYWdzKio6ICR7KG1lbW9yeS5tZXRhZGF0YSBhcyBhbnkpLnRhZ3M/LmpvaW4oJywgJykgfHwgJ25vbmUnfWAsXG4gICAgICAgICAgICBgKipTdG9yYWdlIEJhY2tlbmQqKjogJHsobWVtb3J5Lm1ldGFkYXRhIGFzIGFueSkuc3RvcmFnZUJhY2tlbmQgfHwgJ2ZpbGUnfWAsXG4gICAgICAgICAgICBgKipQcml2YWN5IExldmVsKio6ICR7KG1lbW9yeS5tZXRhZGF0YSBhcyBhbnkpLnByaXZhY3lMZXZlbCB8fCAncHJpdmF0ZSd9YCxcbiAgICAgICAgICAgIGBgLFxuICAgICAgICAgICAgYCoqQ29udGVudCoqOmAsXG4gICAgICAgICAgICBtZW1vcnkuY29udGVudCB8fCAnTm8gY29udGVudCBzdG9yZWQnXG4gICAgICAgICAgXTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogZGV0YWlscy5qb2luKCdcXG4nKVxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgVW5rbm93biBlbGVtZW50IHR5cGUgJyR7dHlwZX0nYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBnZXQgJHt0eXBlfSBkZXRhaWxzIGZvciAnJHtuYW1lfSc6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBnZXQgJHt0eXBlfSBkZXRhaWxzOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyByZWxvYWRFbGVtZW50cyh0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gTm9ybWFsaXplIHRoZSB0eXBlIHRvIGhhbmRsZSBib3RoIHBsdXJhbCBhbmQgc2luZ3VsYXIgZm9ybXNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIFxuICAgICAgc3dpdGNoIChub3JtYWxpemVkVHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVsb2FkUGVyc29uYXMoKTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDoge1xuICAgICAgICAgIHRoaXMuc2tpbGxNYW5hZ2VyLmNsZWFyQ2FjaGUoKTtcbiAgICAgICAgICBjb25zdCBza2lsbHMgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg8J+UhCBSZWxvYWRlZCAke3NraWxscy5sZW5ndGh9IHNraWxscyBmcm9tIHBvcnRmb2xpb2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURToge1xuICAgICAgICAgIC8vIFRlbXBsYXRlIG1hbmFnZXIgZG9lc24ndCBoYXZlIGNsZWFyQ2FjaGUsIGp1c3QgbGlzdFxuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IHRoaXMudGVtcGxhdGVNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDwn5SEIFJlbG9hZGVkICR7dGVtcGxhdGVzLmxlbmd0aH0gdGVtcGxhdGVzIGZyb20gcG9ydGZvbGlvYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOiB7XG4gICAgICAgICAgLy8gQWdlbnQgbWFuYWdlciBkb2Vzbid0IGhhdmUgY2xlYXJDYWNoZSwganVzdCBsaXN0XG4gICAgICAgICAgY29uc3QgYWdlbnRzID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYPCflIQgUmVsb2FkZWQgJHthZ2VudHMubGVuZ3RofSBhZ2VudHMgZnJvbSBwb3J0Zm9saW9gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLk1FTU9SWToge1xuICAgICAgICAgIC8vIE1lbW9yeSBtYW5hZ2VyIGRvZXNuJ3QgaGF2ZSBjbGVhckNhY2hlLCBqdXN0IGxpc3RcbiAgICAgICAgICBjb25zdCBtZW1vcmllcyA9IGF3YWl0IHRoaXMubWVtb3J5TWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg8J+UhCBSZWxvYWRlZCAke21lbW9yaWVzLmxlbmd0aH0gbWVtb3JpZXMgZnJvbSBwb3J0Zm9saW9gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBVbmtub3duIGVsZW1lbnQgdHlwZSAnJHt0eXBlfSdgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHJlbG9hZCAke3R5cGV9OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gcmVsb2FkICR7dHlwZX06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIEVsZW1lbnQtc3BlY2lmaWMgbWV0aG9kc1xuICBhc3luYyByZW5kZXJUZW1wbGF0ZShuYW1lOiBzdHJpbmcsIHZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIC8vIFVzZSB0aGUgbmV3IFRlbXBsYXRlUmVuZGVyZXIgdXRpbGl0eSBmb3IgY2xlYW5lciBjb2RlIGFuZCBiZXR0ZXIgdmFsaWRhdGlvblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMudGVtcGxhdGVSZW5kZXJlci5yZW5kZXIobmFtZSwgdmFyaWFibGVzKTtcbiAgICBcbiAgICBpZiAocmVzdWx0LnN1Y2Nlc3MgJiYgcmVzdWx0LmNvbnRlbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYPCfk4QgUmVuZGVyZWQgdGVtcGxhdGUgJyR7bmFtZX0nOlxcblxcbiR7cmVzdWx0LmNvbnRlbnR9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MICR7cmVzdWx0LmVycm9yIHx8ICdGYWlsZWQgdG8gcmVuZGVyIHRlbXBsYXRlJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgZXhlY3V0ZUFnZW50KG5hbWU6IHN0cmluZywgZ29hbDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFnZW50ID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIuZmluZChhID0+IGEubWV0YWRhdGEubmFtZSA9PT0gbmFtZSk7XG4gICAgICBpZiAoIWFnZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBBZ2VudCAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNpbXBsZSBhZ2VudCBleGVjdXRpb24gc2ltdWxhdGlvblxuICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICBzdW1tYXJ5OiBgQWdlbnQgJyR7bmFtZX0nIGlzIG5vdyB3b3JraW5nIG9uOiAke2dvYWx9YCxcbiAgICAgICAgc3RhdHVzOiAnaW4tcHJvZ3Jlc3MnLFxuICAgICAgICBhY3Rpb25zVGFrZW46IDFcbiAgICAgIH07XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYPCfpJYgQWdlbnQgJyR7bmFtZX0nIGV4ZWN1dGlvbiByZXN1bHQ6XFxuXFxuJHtyZXN1bHQuc3VtbWFyeX1cXG5cXG5TdGF0dXM6ICR7cmVzdWx0LnN0YXR1c31cXG5BY3Rpb25zIHRha2VuOiAke3Jlc3VsdC5hY3Rpb25zVGFrZW4gfHwgMH1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBleGVjdXRlIGFnZW50ICcke25hbWV9JzpgLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGV4ZWN1dGUgYWdlbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGNyZWF0ZUVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nOyBjb250ZW50Pzogc3RyaW5nOyBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT59KSB7XG4gICAgLy8gRW5zdXJlIGluaXRpYWxpemF0aW9uIGZvciB0ZXN0IGNvbXBhdGliaWxpdHlcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgdHlwZSwgZGVzY3JpcHRpb24sIGNvbnRlbnQsIG1ldGFkYXRhIH0gPSBhcmdzO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBlbGVtZW50IHR5cGVcbiAgICAgIGlmICghT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuaW5jbHVkZXModHlwZSBhcyBFbGVtZW50VHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIEludmFsaWQgZWxlbWVudCB0eXBlICcke3R5cGV9Jy4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuam9pbignLCAnKX0gKG9yIGxlZ2FjeSBwbHVyYWwgZm9ybXM6IHBlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYWdlbnRzKWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBpbnB1dHNcbiAgICAgIGNvbnN0IHZhbGlkYXRlZE5hbWUgPSB2YWxpZGF0ZUZpbGVuYW1lKG5hbWUpO1xuICAgICAgY29uc3QgdmFsaWRhdGVkRGVzY3JpcHRpb24gPSBzYW5pdGl6ZUlucHV0KGRlc2NyaXB0aW9uLCBTRUNVUklUWV9MSU1JVFMuTUFYX01FVEFEQVRBX0ZJRUxEX0xFTkdUSCk7XG4gICAgICBcbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogVmFsaWRhdGUgY29udGVudCBzaXplIEJFRk9SRSBwcm9jZXNzaW5nIHRvIHByZXZlbnQgbWVtb3J5IGV4aGF1c3Rpb25cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgQ2xhdWRlIGZyb20gdHJ5aW5nIHRvIG91dHB1dCBtYXNzaXZlIGNvbnRlbnQgaW4gcmVzcG9uc2VzXG4gICAgICBpZiAoY29udGVudCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhbGlkYXRlQ29udGVudFNpemUoY29udGVudCwgU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgQ29udGVudCB0b28gbGFyZ2U6ICR7ZXJyb3IubWVzc2FnZX0uIE1heGltdW0gYWxsb3dlZCBzaXplIGlzICR7U0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSH0gY2hhcmFjdGVycyAoJHtNYXRoLmZsb29yKFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEggLyAxMDI0KX1LQikuYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWDogU2FuaXRpemUgbWV0YWRhdGEgdG8gcHJldmVudCBwcm90b3R5cGUgcG9sbHV0aW9uXG4gICAgICBjb25zdCBzYW5pdGl6ZWRNZXRhZGF0YSA9IHRoaXMuc2FuaXRpemVNZXRhZGF0YShtZXRhZGF0YSB8fCB7fSk7XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBlbGVtZW50IGJhc2VkIG9uIHR5cGVcbiAgICAgIHN3aXRjaCAodHlwZSBhcyBFbGVtZW50VHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6XG4gICAgICAgICAgLy8gVXNlIGV4aXN0aW5nIHBlcnNvbmEgY3JlYXRpb24gbG9naWNcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVQZXJzb25hKFxuICAgICAgICAgICAgdmFsaWRhdGVkTmFtZSwgXG4gICAgICAgICAgICB2YWxpZGF0ZWREZXNjcmlwdGlvbiwgXG4gICAgICAgICAgICBjb250ZW50IHx8ICcnLFxuICAgICAgICAgICAgc2FuaXRpemVkTWV0YWRhdGE/LnRyaWdnZXJzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDpcbiAgICAgICAgICBjb25zdCBza2lsbCA9IGF3YWl0IHRoaXMuc2tpbGxNYW5hZ2VyLmNyZWF0ZSh7XG4gICAgICAgICAgICBuYW1lOiB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgLi4uc2FuaXRpemVkTWV0YWRhdGEsXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50IHx8ICcnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4pyFIENyZWF0ZWQgc2tpbGwgJyR7c2tpbGwubWV0YWRhdGEubmFtZX0nIHN1Y2Nlc3NmdWxseWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURTpcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IHRoaXMudGVtcGxhdGVNYW5hZ2VyLmNyZWF0ZSh7XG4gICAgICAgICAgICBuYW1lOiB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgY29udGVudDogY29udGVudCB8fCAnJyxcbiAgICAgICAgICAgIC4uLnNhbml0aXplZE1ldGFkYXRhXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4pyFIENyZWF0ZWQgdGVtcGxhdGUgJyR7dGVtcGxhdGUubWV0YWRhdGEubmFtZX0nIHN1Y2Nlc3NmdWxseWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDpcbiAgICAgICAgICBjb25zdCBhZ2VudFJlc3VsdCA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmNyZWF0ZShcbiAgICAgICAgICAgIHZhbGlkYXRlZE5hbWUsXG4gICAgICAgICAgICB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGNvbnRlbnQgfHwgJycsXG4gICAgICAgICAgICBzYW5pdGl6ZWRNZXRhZGF0YVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFhZ2VudFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgJHthZ2VudFJlc3VsdC5tZXNzYWdlfWBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBDcmVhdGVkIGFnZW50ICcke3ZhbGlkYXRlZE5hbWV9JyBzdWNjZXNzZnVsbHlgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG5cbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5NRU1PUlk6XG4gICAgICAgICAgY29uc3QgbWVtb3J5ID0gbmV3IE1lbW9yeSh7XG4gICAgICAgICAgICBuYW1lOiB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgLi4uc2FuaXRpemVkTWV0YWRhdGFcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCBjb250ZW50IGlmIHByb3ZpZGVkXG4gICAgICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgICAgIGF3YWl0IG1lbW9yeS5hZGRFbnRyeShjb250ZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTYXZlIHRoZSBtZW1vcnlcbiAgICAgICAgICBhd2FpdCB0aGlzLm1lbW9yeU1hbmFnZXIuc2F2ZShtZW1vcnkpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4pyFIENyZWF0ZWQgbWVtb3J5ICcke3ZhbGlkYXRlZE5hbWV9JyBzdWNjZXNzZnVsbHlgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgRWxlbWVudCB0eXBlICcke3R5cGV9JyBpcyBub3QgeWV0IHN1cHBvcnRlZCBmb3IgY3JlYXRpb25gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBlbGVtZW50OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gY3JlYXRlIGVsZW1lbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGVkaXRFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgZmllbGQ6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgYW55W119KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgdHlwZSwgZmllbGQsIHZhbHVlIH0gPSBhcmdzO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBlbGVtZW50IHR5cGVcbiAgICAgIGlmICghT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuaW5jbHVkZXModHlwZSBhcyBFbGVtZW50VHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIEludmFsaWQgZWxlbWVudCB0eXBlICcke3R5cGV9Jy4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuam9pbignLCAnKX0gKG9yIGxlZ2FjeSBwbHVyYWwgZm9ybXM6IHBlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYWdlbnRzKWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBGb3IgcGVyc29uYXMsIHVzZSBleGlzdGluZyBlZGl0IGxvZ2ljXG4gICAgICBpZiAodHlwZSA9PT0gRWxlbWVudFR5cGUuUEVSU09OQSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0UGVyc29uYShuYW1lLCBmaWVsZCwgU3RyaW5nKHZhbHVlKSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFRZUEUgU0FGRVRZOiBEZWZpbmUgYSBjb21tb24gaW50ZXJmYWNlIGZvciBlbGVtZW50IG1hbmFnZXJzXG4gICAgICBpbnRlcmZhY2UgRWxlbWVudE1hbmFnZXJCYXNlPFQ+IHtcbiAgICAgICAgZmluZChwcmVkaWNhdGU6IChlbGVtZW50OiBUKSA9PiBib29sZWFuKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPjtcbiAgICAgICAgc2F2ZShlbGVtZW50OiBULCBmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gR2V0IHRoZSBhcHByb3ByaWF0ZSBtYW5hZ2VyIGJhc2VkIG9uIHR5cGUgd2l0aCBwcm9wZXIgdHlwaW5nXG4gICAgICBsZXQgbWFuYWdlcjogRWxlbWVudE1hbmFnZXJCYXNlPFNraWxsIHwgVGVtcGxhdGUgfCBBZ2VudCB8IGFueT4gfCBudWxsID0gbnVsbDtcbiAgICAgIGxldCBlbGVtZW50OiBTa2lsbCB8IFRlbXBsYXRlIHwgQWdlbnQgfCBhbnkgfCB1bmRlZmluZWQ7XG5cbiAgICAgIHN3aXRjaCAodHlwZSBhcyBFbGVtZW50VHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOlxuICAgICAgICAgIG1hbmFnZXIgPSB0aGlzLnNraWxsTWFuYWdlciBhcyBFbGVtZW50TWFuYWdlckJhc2U8U2tpbGw+O1xuICAgICAgICAgIGVsZW1lbnQgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5maW5kKChlOiBTa2lsbCkgPT4gZS5tZXRhZGF0YS5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURTpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy50ZW1wbGF0ZU1hbmFnZXIgYXMgRWxlbWVudE1hbmFnZXJCYXNlPFRlbXBsYXRlPjtcbiAgICAgICAgICBlbGVtZW50ID0gYXdhaXQgdGhpcy50ZW1wbGF0ZU1hbmFnZXIuZmluZCgoZTogVGVtcGxhdGUpID0+IGUubWV0YWRhdGEubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6XG4gICAgICAgICAgbWFuYWdlciA9IHRoaXMuYWdlbnRNYW5hZ2VyIGFzIEVsZW1lbnRNYW5hZ2VyQmFzZTxBZ2VudD47XG4gICAgICAgICAgZWxlbWVudCA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmZpbmQoKGU6IEFnZW50KSA9PiBlLm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLk1FTU9SWTpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy5tZW1vcnlNYW5hZ2VyIGFzIEVsZW1lbnRNYW5hZ2VyQmFzZTxhbnk+O1xuICAgICAgICAgIGVsZW1lbnQgPSBhd2FpdCB0aGlzLm1lbW9yeU1hbmFnZXIuZmluZCgoZTogYW55KSA9PiBlLm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBFbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBlZGl0aW5nYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBlbGVtZW50IHdhcyBmb3VuZFxuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCAke3R5cGV9ICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSGFuZGxlIG5lc3RlZCBmaWVsZCB1cGRhdGVzIChlLmcuLCBcIm1ldGFkYXRhLmF1dGhvclwiKVxuICAgICAgY29uc3QgZmllbGRQYXJ0cyA9IGZpZWxkLnNwbGl0KCcuJyk7XG4gICAgICBcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWDogVmFsaWRhdGUgZmllbGQgbmFtZXMgdG8gcHJldmVudCBwcm90b3R5cGUgcG9sbHV0aW9uXG4gICAgICBjb25zdCBkYW5nZXJvdXNQcm9wZXJ0aWVzID0gWydfX3Byb3RvX18nLCAnY29uc3RydWN0b3InLCAncHJvdG90eXBlJ107XG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZmllbGRQYXJ0cykge1xuICAgICAgICBpZiAoZGFuZ2Vyb3VzUHJvcGVydGllcy5pbmNsdWRlcyhwYXJ0KSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBJbnZhbGlkIGZpZWxkIG5hbWU6ICcke3BhcnR9JyBpcyBub3QgYWxsb3dlZCBmb3Igc2VjdXJpdHkgcmVhc29uc2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBsZXQgdGFyZ2V0OiBhbnkgPSBlbGVtZW50O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZFBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAvLyBTRUNVUklUWTogQWRkaXRpb25hbCBjaGVjayB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnIHx8IHRhcmdldCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBDYW5ub3Qgc2V0IHByb3BlcnR5ICcke2ZpZWxkUGFydHNbaV19JyBvbiBub24tb2JqZWN0YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoIXRhcmdldFtmaWVsZFBhcnRzW2ldXSkge1xuICAgICAgICAgIC8vIFNFQ1VSSVRZOiBVc2UgT2JqZWN0LmRlZmluZVByb3BlcnR5IHRvIGF2b2lkIHByb3RvdHlwZSBjaGFpbiBwb2xsdXRpb25cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBmaWVsZFBhcnRzW2ldLCB7XG4gICAgICAgICAgICB2YWx1ZToge30sXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXQgPSB0YXJnZXRbZmllbGRQYXJ0c1tpXV07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSB0aGUgZmllbGRcbiAgICAgIGNvbnN0IGxhc3RGaWVsZCA9IGZpZWxkUGFydHNbZmllbGRQYXJ0cy5sZW5ndGggLSAxXTtcbiAgICAgIC8vIFNFQ1VSSVRZOiBVc2UgT2JqZWN0LmRlZmluZVByb3BlcnR5IGZvciB0aGUgZmluYWwgYXNzaWdubWVudCB0b29cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGxhc3RGaWVsZCwge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBWRVJTSU9OIEZJWDogSGFuZGxlIHZlcnNpb24gZmllbGQgdXBkYXRlcyBkaWZmZXJlbnRseVxuICAgICAgLy8gSWYgdXNlciBpcyBkaXJlY3RseSBlZGl0aW5nIHZlcnNpb24gZmllbGQsIGRvbid0IGF1dG8taW5jcmVtZW50XG4gICAgICBpZiAoZmllbGQgPT09ICd2ZXJzaW9uJyB8fCBmaWVsZCA9PT0gJ21ldGFkYXRhLnZlcnNpb24nKSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb25TdHJpbmcgPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICBcbiAgICAgICAgLy8gVkVSU0lPTiBWQUxJREFUSU9OOiBWYWxpZGF0ZSB2ZXJzaW9uIGZvcm1hdFxuICAgICAgICAvLyBBY2NlcHQgc2VtdmVyICgxLjAuMCksIHR3by1wYXJ0ICgxLjApLCBvciBzaW5nbGUgZGlnaXQgKDEpXG4gICAgICAgIC8vIEFsc28gYWNjZXB0cyBwcmUtcmVsZWFzZSB2ZXJzaW9ucyAoMS4wLjAtYmV0YSwgMS4wLjAtYWxwaGEuMSlcbiAgICAgICAgY29uc3QgaXNWYWxpZFZlcnNpb24gPSAvXihcXGQrKShcXC5cXGQrKT8oXFwuXFxkKyk/KC1bYS16QS1aMC05Li1dKyk/JC8udGVzdCh2ZXJzaW9uU3RyaW5nKTtcbiAgICAgICAgaWYgKCFpc1ZhbGlkVmVyc2lvbikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBJbnZhbGlkIHZlcnNpb24gZm9ybWF0OiAnJHt2ZXJzaW9uU3RyaW5nfScuIFBsZWFzZSB1c2UgZm9ybWF0IGxpa2UgMS4wLjAsIDEuMCwgb3IgMWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gRVJST1IgSEFORExJTkc6IFdyYXAgdmVyc2lvbiB1cGRhdGUgaW4gdHJ5LWNhdGNoXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVXBkYXRlIGJvdGggbG9jYXRpb25zIHRvIGVuc3VyZSBjb25zaXN0ZW5jeVxuICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9IHZlcnNpb25TdHJpbmc7XG4gICAgICAgICAgaWYgKGVsZW1lbnQubWV0YWRhdGEpIHtcbiAgICAgICAgICAgIGVsZW1lbnQubWV0YWRhdGEudmVyc2lvbiA9IHZlcnNpb25TdHJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHVwZGF0ZSB2ZXJzaW9uIGZvciAke25hbWV9OmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIHVwZGF0ZSB2ZXJzaW9uOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG90aGVyIGZpZWxkIGVkaXRzLCBhdXRvLWluY3JlbWVudCB2ZXJzaW9uXG4gICAgICAgIC8vIFZFUlNJT04gRklYOiBVcGRhdGUgYm90aCBlbGVtZW50LnZlcnNpb24gQU5EIGVsZW1lbnQubWV0YWRhdGEudmVyc2lvblxuICAgICAgICAvLyBQcmV2aW91c2x5OiBPbmx5IGVsZW1lbnQudmVyc2lvbiB3YXMgdXBkYXRlZCwgYnV0IHNvbWUgbWFuYWdlcnMgcmVhZCBmcm9tIG1ldGFkYXRhLnZlcnNpb25cbiAgICAgICAgLy8gTm93OiBLZWVwIGJvdGggaW4gc3luYyB0byBlbnN1cmUgdmVyc2lvbiBwZXJzaXN0cyBjb3JyZWN0bHlcbiAgICAgICAgXG4gICAgICAgIC8vIEVSUk9SIEhBTkRMSU5HOiBXcmFwIGF1dG8taW5jcmVtZW50IGluIHRyeS1jYXRjaFxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChlbGVtZW50LnZlcnNpb24pIHtcbiAgICAgICAgICAgIC8vIFBSRS1SRUxFQVNFIEhBTkRMSU5HOiBDaGVjayBmb3IgcHJlLXJlbGVhc2UgdmVyc2lvbnNcbiAgICAgICAgICAgIGNvbnN0IHByZVJlbGVhc2VNYXRjaCA9IGVsZW1lbnQudmVyc2lvbi5tYXRjaCgvXihcXGQrXFwuXFxkK1xcLlxcZCspKC0oW2EtekEtWjAtOS4tXSspKT8kLyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChwcmVSZWxlYXNlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIHByZS1yZWxlYXNlIHZlcnNpb25zIChlLmcuLCAxLjAuMC1iZXRhLjEpXG4gICAgICAgICAgICAgIGNvbnN0IGJhc2VWZXJzaW9uID0gcHJlUmVsZWFzZU1hdGNoWzFdO1xuICAgICAgICAgICAgICBjb25zdCBwcmVSZWxlYXNlVGFnID0gcHJlUmVsZWFzZU1hdGNoWzNdO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgaWYgKHByZVJlbGVhc2VUYWcpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBpdCBoYXMgYSBwcmUtcmVsZWFzZSB0YWcsIGluY3JlbWVudCB0aGUgcHJlLXJlbGVhc2UgbnVtYmVyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJlUmVsZWFzZU51bWJlck1hdGNoID0gcHJlUmVsZWFzZVRhZy5tYXRjaCgvXihbYS16QS1aXSspXFwuPyhcXGQrKT8kLyk7XG4gICAgICAgICAgICAgICAgaWYgKHByZVJlbGVhc2VOdW1iZXJNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcHJlUmVsZWFzZVR5cGUgPSBwcmVSZWxlYXNlTnVtYmVyTWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgICBjb25zdCBwcmVSZWxlYXNlTnVtYmVyID0gcGFyc2VJbnQocHJlUmVsZWFzZU51bWJlck1hdGNoWzJdIHx8ICcwJykgKyAxO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gYCR7YmFzZVZlcnNpb259LSR7cHJlUmVsZWFzZVR5cGV9LiR7cHJlUmVsZWFzZU51bWJlcn1gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBDb21wbGV4IHByZS1yZWxlYXNlLCBqdXN0IGluY3JlbWVudCBwYXRjaFxuICAgICAgICAgICAgICAgICAgY29uc3QgW21ham9yLCBtaW5vciwgcGF0Y2hdID0gYmFzZVZlcnNpb24uc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9IGAke21ham9yfS4ke21pbm9yfS4ke3BhdGNoICsgMX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBSZWd1bGFyIHNlbXZlciwgaW5jcmVtZW50IHBhdGNoXG4gICAgICAgICAgICAgICAgY29uc3QgW21ham9yLCBtaW5vciwgcGF0Y2hdID0gYmFzZVZlcnNpb24uc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSBgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaCArIDF9YDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIG5vbi1zZW12ZXIgdmVyc2lvbnNcbiAgICAgICAgICAgICAgY29uc3QgdmVyc2lvblBhcnRzID0gZWxlbWVudC52ZXJzaW9uLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgIGlmICh2ZXJzaW9uUGFydHMubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICAvLyBTdGFuZGFyZCBzZW12ZXIgZm9ybWF0IChlLmcuLCAxLjAuMClcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRjaCA9IHBhcnNlSW50KHZlcnNpb25QYXJ0c1syXSkgfHwgMDtcbiAgICAgICAgICAgICAgICB2ZXJzaW9uUGFydHNbMl0gPSBTdHJpbmcocGF0Y2ggKyAxKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSB2ZXJzaW9uUGFydHMuam9pbignLicpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZlcnNpb25QYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAvLyBUd28tcGFydCB2ZXJzaW9uIChlLmcuLCAxLjApIC0gYWRkIHBhdGNoIHZlcnNpb25cbiAgICAgICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSBgJHtlbGVtZW50LnZlcnNpb259LjFgO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZlcnNpb25QYXJ0cy5sZW5ndGggPT09IDEgJiYgL15cXGQrJC8udGVzdCh2ZXJzaW9uUGFydHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgLy8gU2luZ2xlIG51bWJlciB2ZXJzaW9uIChlLmcuLCAxKSAtIGNvbnZlcnQgdG8gc2VtdmVyXG4gICAgICAgICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gYCR7ZWxlbWVudC52ZXJzaW9ufS4wLjFgO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE5vbi1zdGFuZGFyZCB2ZXJzaW9uIC0gYXBwZW5kIG9yIHJlcGxhY2Ugd2l0aCBzdGFuZGFyZCBmb3JtYXRcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSAnMS4wLjEnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vIHZlcnNpb24gLSBzZXQgaW5pdGlhbCB2ZXJzaW9uXG4gICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSAnMS4wLjAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBFbnN1cmUgbWV0YWRhdGEudmVyc2lvbiBpcyBhbHNvIHVwZGF0ZWQgZm9yIG1hbmFnZXJzIHRoYXQgdXNlIGl0XG4gICAgICAgICAgaWYgKGVsZW1lbnQubWV0YWRhdGEpIHtcbiAgICAgICAgICAgIGVsZW1lbnQubWV0YWRhdGEudmVyc2lvbiA9IGVsZW1lbnQudmVyc2lvbjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gYXV0by1pbmNyZW1lbnQgdmVyc2lvbiBmb3IgJHtuYW1lfTpgLCBlcnJvcik7XG4gICAgICAgICAgLy8gRG9uJ3QgZmFpbCB0aGUgZW50aXJlIG9wZXJhdGlvbiwganVzdCBsb2cgdGhlIGVycm9yXG4gICAgICAgICAgLy8gVmVyc2lvbiB3aWxsIHJlbWFpbiB1bmNoYW5nZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTYXZlIHRoZSBlbGVtZW50IC0gbmVlZCB0byBkZXRlcm1pbmUgZmlsZW5hbWVcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7ZWxlbWVudC5tZXRhZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTktXS9nLCAnLScpfS5tZGA7XG4gICAgICAvLyBUWVBFIFNBRkVUWTogTm8gbmVlZCBmb3IgJ2FzIGFueScgY2FzdCBhbnltb3JlIHdpdGggcHJvcGVyIHR5cGluZ1xuICAgICAgYXdhaXQgbWFuYWdlciEuc2F2ZShlbGVtZW50LCBmaWxlbmFtZSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKchSBVcGRhdGVkICR7dHlwZX0gJyR7bmFtZX0nIC0gJHtmaWVsZH0gc2V0IHRvOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBlZGl0IGVsZW1lbnQ6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBlZGl0IGVsZW1lbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIHZhbGlkYXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHN0cmljdD86IGJvb2xlYW59KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgdHlwZSwgc3RyaWN0ID0gZmFsc2UgfSA9IGFyZ3M7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGVsZW1lbnQgdHlwZVxuICAgICAgaWYgKCFPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5pbmNsdWRlcyh0eXBlIGFzIEVsZW1lbnRUeXBlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgSW52YWxpZCBlbGVtZW50IHR5cGUgJyR7dHlwZX0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpfSAob3IgbGVnYWN5IHBsdXJhbCBmb3JtczogcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMpYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZvciBwZXJzb25hcywgdXNlIGV4aXN0aW5nIHZhbGlkYXRpb24gbG9naWNcbiAgICAgIGlmICh0eXBlID09PSBFbGVtZW50VHlwZS5QRVJTT05BKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUGVyc29uYShuYW1lKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gR2V0IHRoZSBhcHByb3ByaWF0ZSBtYW5hZ2VyIGJhc2VkIG9uIHR5cGVcbiAgICAgIGxldCBtYW5hZ2VyOiBTa2lsbE1hbmFnZXIgfCBUZW1wbGF0ZU1hbmFnZXIgfCBBZ2VudE1hbmFnZXIgfCBudWxsID0gbnVsbDtcbiAgICAgIHN3aXRjaCAodHlwZSBhcyBFbGVtZW50VHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOlxuICAgICAgICAgIG1hbmFnZXIgPSB0aGlzLnNraWxsTWFuYWdlcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURTpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy50ZW1wbGF0ZU1hbmFnZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6XG4gICAgICAgICAgbWFuYWdlciA9IHRoaXMuYWdlbnRNYW5hZ2VyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBFbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciB2YWxpZGF0aW9uYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBGaW5kIHRoZSBlbGVtZW50XG4gICAgICBjb25zdCBlbGVtZW50ID0gYXdhaXQgbWFuYWdlciEuZmluZCgoZTogYW55KSA9PiBlLm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCAke3R5cGV9ICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUGVyZm9ybSB2YWxpZGF0aW9uXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gZWxlbWVudC52YWxpZGF0ZSgpO1xuICAgICAgXG4gICAgICAvLyBGb3JtYXQgdmFsaWRhdGlvbiByZXBvcnRcbiAgICAgIGxldCByZXBvcnQgPSBg8J+UjSBWYWxpZGF0aW9uIFJlcG9ydCBmb3IgJHt0eXBlfSAnJHtuYW1lfSc6XFxuYDtcbiAgICAgIHJlcG9ydCArPSBgJHt2YWxpZGF0aW9uUmVzdWx0LnZhbGlkID8gJ+KchScgOiAn4p2MJ30gU3RhdHVzOiAke3ZhbGlkYXRpb25SZXN1bHQudmFsaWQgPyAnVmFsaWQnIDogJ0ludmFsaWQnfVxcblxcbmA7XG4gICAgICBcbiAgICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmVycm9ycyAmJiB2YWxpZGF0aW9uUmVzdWx0LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcG9ydCArPSBg4p2MIEVycm9ycyAoJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9ycy5sZW5ndGh9KTpcXG5gO1xuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0LmVycm9ycy5mb3JFYWNoKChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgcmVwb3J0ICs9IGAgICDigKIgJHtlcnJvci5maWVsZCB8fCAnR2VuZXJhbCd9OiAke2Vycm9yLm1lc3NhZ2V9XFxuYDtcbiAgICAgICAgICBpZiAoZXJyb3IuZml4KSB7XG4gICAgICAgICAgICByZXBvcnQgKz0gYCAgICAg8J+SoSBGaXg6ICR7ZXJyb3IuZml4fVxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmVwb3J0ICs9ICdcXG4nO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC53YXJuaW5ncyAmJiB2YWxpZGF0aW9uUmVzdWx0Lndhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVwb3J0ICs9IGDimqDvuI8gIFdhcm5pbmdzICgke3ZhbGlkYXRpb25SZXN1bHQud2FybmluZ3MubGVuZ3RofSk6XFxuYDtcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdC53YXJuaW5ncy5mb3JFYWNoKCh3YXJuaW5nOiBhbnkpID0+IHtcbiAgICAgICAgICByZXBvcnQgKz0gYCAgIOKAoiAke3dhcm5pbmcuZmllbGQgfHwgJ0dlbmVyYWwnfTogJHt3YXJuaW5nLm1lc3NhZ2V9XFxuYDtcbiAgICAgICAgICBpZiAod2FybmluZy5zdWdnZXN0aW9uKSB7XG4gICAgICAgICAgICByZXBvcnQgKz0gYCAgICAg8J+SoSBTdWdnZXN0aW9uOiAke3dhcm5pbmcuc3VnZ2VzdGlvbn1cXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJlcG9ydCArPSAnXFxuJztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuc3VnZ2VzdGlvbnMgJiYgdmFsaWRhdGlvblJlc3VsdC5zdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcG9ydCArPSBg8J+SoSBTdWdnZXN0aW9uczpcXG5gO1xuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0LnN1Z2dlc3Rpb25zLmZvckVhY2goKHN1Z2dlc3Rpb246IHN0cmluZykgPT4ge1xuICAgICAgICAgIHJlcG9ydCArPSBgICAg4oCiICR7c3VnZ2VzdGlvbn1cXG5gO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQWRkIHN0cmljdCBtb2RlIGFkZGl0aW9uYWwgY2hlY2tzIGlmIHJlcXVlc3RlZFxuICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICByZXBvcnQgKz0gJ1xcbvCfk4sgU3RyaWN0IE1vZGU6IEFkZGl0aW9uYWwgcXVhbGl0eSBjaGVja3MgYXBwbGllZCc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogcmVwb3J0XG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byB2YWxpZGF0ZSBlbGVtZW50OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gdmFsaWRhdGUgZWxlbWVudDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgZGVsZXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGRlbGV0ZURhdGE/OiBib29sZWFufSkge1xuICAgIC8vIEVuc3VyZSBpbml0aWFsaXphdGlvbiBmb3IgdGVzdCBjb21wYXRpYmlsaXR5XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG5hbWUsIHR5cGUsIGRlbGV0ZURhdGEgfSA9IGFyZ3M7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGVsZW1lbnQgdHlwZVxuICAgICAgaWYgKCFPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5pbmNsdWRlcyh0eXBlIGFzIEVsZW1lbnRUeXBlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgSW52YWxpZCBlbGVtZW50IHR5cGU6ICR7dHlwZX1cXG5WYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpfSAob3IgbGVnYWN5IHBsdXJhbCBmb3JtczogcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMpYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEdldCB0aGUgYXBwcm9wcmlhdGUgbWFuYWdlciBiYXNlZCBvbiB0eXBlXG4gICAgICBsZXQgbWFuYWdlcjogU2tpbGxNYW5hZ2VyIHwgVGVtcGxhdGVNYW5hZ2VyIHwgQWdlbnRNYW5hZ2VyIHwgbnVsbCA9IG51bGw7XG4gICAgICBzd2l0Y2ggKHR5cGUgYXMgRWxlbWVudFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy5za2lsbE1hbmFnZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6XG4gICAgICAgICAgbWFuYWdlciA9IHRoaXMudGVtcGxhdGVNYW5hZ2VyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOlxuICAgICAgICAgIG1hbmFnZXIgPSB0aGlzLmFnZW50TWFuYWdlcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgICAgIC8vIEZvciBwZXJzb25hcywgdXNlIGEgZGlmZmVyZW50IGFwcHJvYWNoXG4gICAgICAgICAgLy8gcGVyc29uYXNEaXIgaXMgZ3VhcmFudGVlZCB0byBiZSBzZXQgYWZ0ZXIgZW5zdXJlSW5pdGlhbGl6ZWQoKVxuICAgICAgICAgIGNvbnN0IHBlcnNvbmFQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIhLCBgJHtuYW1lfS5tZGApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBmcy5hY2Nlc3MocGVyc29uYVBhdGgpO1xuICAgICAgICAgICAgYXdhaXQgZnMudW5saW5rKHBlcnNvbmFQYXRoKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gUmVsb2FkIHBlcnNvbmFzIHRvIHVwZGF0ZSB0aGUgY2FjaGVcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFBlcnNvbmFzKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKchSBTdWNjZXNzZnVsbHkgZGVsZXRlZCBwZXJzb25hICcke25hbWV9J2BcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgJHt0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zbGljZSgxKX0gJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBFbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBkZWxldGlvbmBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW5zdXJlIG1hbmFnZXIgd2FzIGFzc2lnbmVkIChUeXBlU2NyaXB0IHR5cGUgc2FmZXR5KVxuICAgICAgaWYgKCFtYW5hZ2VyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBFbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRlbGV0aW9uYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZpbmQgdGhlIGVsZW1lbnQgZmlyc3QgdG8gY2hlY2sgaWYgaXQgZXhpc3RzXG4gICAgICBjb25zdCBlbGVtZW50ID0gYXdhaXQgbWFuYWdlciEuZmluZCgoZTogYW55KSA9PiBlLm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCAke3R5cGV9ICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgZm9yIGFzc29jaWF0ZWQgZGF0YSBmaWxlc1xuICAgICAgbGV0IGRhdGFGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICAgIFxuICAgICAgLy8gQWdlbnQtc3BlY2lmaWM6IENoZWNrIGZvciBzdGF0ZSBmaWxlc1xuICAgICAgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlLkFHRU5UKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gcGF0aC5qb2luKHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLkFHRU5UKSwgJy5zdGF0ZScpO1xuICAgICAgICBjb25zdCBzdGF0ZUZpbGUgPSBwYXRoLmpvaW4oc3RhdGVEaXIsIGAke25hbWV9LXN0YXRlLmpzb25gKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMuc3RhdChzdGF0ZUZpbGUpO1xuICAgICAgICAgIGRhdGFGaWxlcy5wdXNoKGAtIC5zdGF0ZS8ke25hbWV9LXN0YXRlLmpzb24gKCR7KHN0YXQuc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMil9IEtCKWApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIE5vIHN0YXRlIGZpbGUgZXhpc3RzLCB3aGljaCBpcyBmaW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gTWVtb3J5LXNwZWNpZmljOiBDaGVjayBmb3Igc3RvcmFnZSBmaWxlc1xuICAgICAgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlLk1FTU9SWSkge1xuICAgICAgICBjb25zdCBzdG9yYWdlRGlyID0gcGF0aC5qb2luKHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLk1FTU9SWSksICcuc3RvcmFnZScpO1xuICAgICAgICBjb25zdCBzdG9yYWdlRmlsZSA9IHBhdGguam9pbihzdG9yYWdlRGlyLCBgJHtuYW1lfS1tZW1vcnkuanNvbmApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBmcy5zdGF0KHN0b3JhZ2VGaWxlKTtcbiAgICAgICAgICBkYXRhRmlsZXMucHVzaChgLSAuc3RvcmFnZS8ke25hbWV9LW1lbW9yeS5qc29uICgkeyhzdGF0LnNpemUgLyAxMDI0KS50b0ZpeGVkKDIpfSBLQilgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBObyBzdG9yYWdlIGZpbGUgZXhpc3RzLCB3aGljaCBpcyBmaW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW5zZW1ibGUtc3BlY2lmaWM6IENoZWNrIGZvciBjb25maWcgZmlsZXNcbiAgICAgIGlmICh0eXBlID09PSBFbGVtZW50VHlwZS5FTlNFTUJMRSkge1xuICAgICAgICBjb25zdCBjb25maWdEaXIgPSBwYXRoLmpvaW4odGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuRU5TRU1CTEUpLCAnLmNvbmZpZ3MnKTtcbiAgICAgICAgY29uc3QgY29uZmlnRmlsZSA9IHBhdGguam9pbihjb25maWdEaXIsIGAke25hbWV9LWNvbmZpZy5qc29uYCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3RhdCA9IGF3YWl0IGZzLnN0YXQoY29uZmlnRmlsZSk7XG4gICAgICAgICAgZGF0YUZpbGVzLnB1c2goYC0gLmNvbmZpZ3MvJHtuYW1lfS1jb25maWcuanNvbiAoJHsoc3RhdC5zaXplIC8gMTAyNCkudG9GaXhlZCgyKX0gS0IpYCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gTm8gY29uZmlnIGZpbGUgZXhpc3RzLCB3aGljaCBpcyBmaW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSWYgZGF0YSBmaWxlcyBleGlzdCBhbmQgZGVsZXRlRGF0YSBpcyBub3Qgc3BlY2lmaWVkLCB3ZSBuZWVkIHRvIGluZm9ybSB0aGUgdXNlclxuICAgICAgaWYgKGRhdGFGaWxlcy5sZW5ndGggPiAwICYmIGRlbGV0ZURhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDimqDvuI8gIFRoaXMgJHt0eXBlfSBoYXMgYXNzb2NpYXRlZCBkYXRhIGZpbGVzOlxcbiR7ZGF0YUZpbGVzLmpvaW4oJ1xcbicpfVxcblxcbldvdWxkIHlvdSBsaWtlIHRvIGRlbGV0ZSB0aGVzZSBkYXRhIGZpbGVzIGFzIHdlbGw/XFxuXFxu4oCiIFRvIGRlbGV0ZSBldmVyeXRoaW5nIChlbGVtZW50ICsgZGF0YSksIHNheTogXCJZZXMsIGRlbGV0ZSBhbGwgZGF0YVwiXFxu4oCiIFRvIGtlZXAgdGhlIGRhdGEgZmlsZXMsIHNheTogXCJObywga2VlcCB0aGUgZGF0YVwiXFxu4oCiIFRvIGNhbmNlbCwgc2F5OiBcIkNhbmNlbFwiYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIERlbGV0ZSB0aGUgbWFpbiBlbGVtZW50IGZpbGVcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7c2x1Z2lmeShuYW1lKX0ubWRgO1xuICAgICAgY29uc3QgZmlsZXBhdGggPSBwYXRoLmpvaW4odGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIodHlwZSBhcyBFbGVtZW50VHlwZSksIGZpbGVuYW1lKTtcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMudW5saW5rKGZpbGVwYXRoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCAke3R5cGV9IGZpbGUgJyR7ZmlsZW5hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIERlbGV0ZSBhc3NvY2lhdGVkIGRhdGEgZmlsZXMgaWYgcmVxdWVzdGVkXG4gICAgICBpZiAoZGVsZXRlRGF0YSAmJiBkYXRhRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB1cGRhdGVkRGF0YUZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlLkFHRU5UKSB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVGaWxlID0gcGF0aC5qb2luKHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLkFHRU5UKSwgJy5zdGF0ZScsIGAke25hbWV9LXN0YXRlLmpzb25gKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZnMudW5saW5rKHN0YXRlRmlsZSk7XG4gICAgICAgICAgICB1cGRhdGVkRGF0YUZpbGVzLnB1c2goYCR7ZGF0YUZpbGVzWzBdfSDinJMgZGVsZXRlZGApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBMb2cgYnV0IGRvbid0IGZhaWwgaWYgc3RhdGUgZmlsZSBkZWxldGlvbiBmYWlsc1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBkZWxldGUgYWdlbnQgc3RhdGUgZmlsZTogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgIHVwZGF0ZWREYXRhRmlsZXMucHVzaChgJHtkYXRhRmlsZXNbMF19IOKaoO+4jyBkZWxldGlvbiBmYWlsZWRgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRWxlbWVudFR5cGUuTUVNT1JZKSB7XG4gICAgICAgICAgY29uc3Qgc3RvcmFnZUZpbGUgPSBwYXRoLmpvaW4odGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuTUVNT1JZKSwgJy5zdG9yYWdlJywgYCR7bmFtZX0tbWVtb3J5Lmpzb25gKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZnMudW5saW5rKHN0b3JhZ2VGaWxlKTtcbiAgICAgICAgICAgIHVwZGF0ZWREYXRhRmlsZXMucHVzaChgJHtkYXRhRmlsZXNbMF19IOKckyBkZWxldGVkYCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIExvZyBidXQgZG9uJ3QgZmFpbCBpZiBzdG9yYWdlIGZpbGUgZGVsZXRpb24gZmFpbHNcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gZGVsZXRlIG1lbW9yeSBzdG9yYWdlIGZpbGU6ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICB1cGRhdGVkRGF0YUZpbGVzLnB1c2goYCR7ZGF0YUZpbGVzWzBdfSDimqDvuI8gZGVsZXRpb24gZmFpbGVkYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlLkVOU0VNQkxFKSB7XG4gICAgICAgICAgY29uc3QgY29uZmlnRmlsZSA9IHBhdGguam9pbih0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5FTlNFTUJMRSksICcuY29uZmlncycsIGAke25hbWV9LWNvbmZpZy5qc29uYCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGZzLnVubGluayhjb25maWdGaWxlKTtcbiAgICAgICAgICAgIHVwZGF0ZWREYXRhRmlsZXMucHVzaChgJHtkYXRhRmlsZXNbMF19IOKckyBkZWxldGVkYCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIExvZyBidXQgZG9uJ3QgZmFpbCBpZiBjb25maWcgZmlsZSBkZWxldGlvbiBmYWlsc1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBkZWxldGUgZW5zZW1ibGUgY29uZmlnIGZpbGU6ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICB1cGRhdGVkRGF0YUZpbGVzLnB1c2goYCR7ZGF0YUZpbGVzWzBdfSDimqDvuI8gZGVsZXRpb24gZmFpbGVkYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBkYXRhRmlsZXMgPSB1cGRhdGVkRGF0YUZpbGVzO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBCdWlsZCBzdWNjZXNzIG1lc3NhZ2VcbiAgICAgIGxldCBtZXNzYWdlID0gYOKchSBTdWNjZXNzZnVsbHkgZGVsZXRlZCAke3R5cGV9ICcke25hbWV9J2A7XG4gICAgICBpZiAoZGF0YUZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKGRlbGV0ZURhdGEpIHtcbiAgICAgICAgICBtZXNzYWdlICs9IGBcXG5cXG5Bc3NvY2lhdGVkIGRhdGEgZmlsZXM6XFxuJHtkYXRhRmlsZXMuam9pbignXFxuJyl9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXNzYWdlICs9IGBcXG5cXG7imqDvuI8gQXNzb2NpYXRlZCBkYXRhIGZpbGVzIHdlcmUgcHJlc2VydmVkOlxcbiR7ZGF0YUZpbGVzLmpvaW4oJ1xcbicpfWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBtZXNzYWdlXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSBlbGVtZW50OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZGVsZXRlIGVsZW1lbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBjaGVja1JhdGVMaW1pdCBhbmQgZmV0Y2hGcm9tR2l0SHViIGFyZSBub3cgaGFuZGxlZCBieSBHaXRIdWJDbGllbnRcblxuICBhc3luYyBicm93c2VDb2xsZWN0aW9uKHNlY3Rpb24/OiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gRklYICM0NzE6IFJlcGxhY2UgbGVnYWN5IGNhdGVnb3J5IHZhbGlkYXRpb24gd2l0aCBwcm9wZXIgc2VjdGlvbi90eXBlIHZhbGlkYXRpb25cbiAgICAgIC8vIFZhbGlkIHNlY3Rpb25zOiBsaWJyYXJ5LCBzaG93Y2FzZSwgY2F0YWxvZ1xuICAgICAgLy8gVmFsaWQgdHlwZXMgZm9yIE1DUDogcGVyc29uYXMsIHNraWxscywgYWdlbnRzLCB0ZW1wbGF0ZXMgKG90aGVycyBmaWx0ZXJlZCBwZXIgSXNzdWUgIzE0NClcbiAgICAgIC8vIE5vdGU6IHRvb2xzLCBwcm9tcHRzLCBlbnNlbWJsZXMsIG1lbW9yaWVzIGV4aXN0IGluIGNvbGxlY3Rpb24gYnV0IGFyZSBmaWx0ZXJlZCBmcm9tIE1DUFxuICAgICAgY29uc3QgdmFsaWRTZWN0aW9ucyA9IFsnbGlicmFyeScsICdzaG93Y2FzZScsICdjYXRhbG9nJ107XG4gICAgICBcbiAgICAgIC8vIOKaoO+4jyBDUklUSUNBTDogV2hlbiBhZGRpbmcgbmV3IGVsZW1lbnQgdHlwZXMsIHlvdSBNVVNUIHVwZGF0ZSB0aGlzIGFycmF5IVxuICAgICAgLy8gU2VlIGRvY3MvZGV2ZWxvcG1lbnQvQURESU5HX05FV19FTEVNRU5UX1RZUEVTX0NIRUNLTElTVC5tZCBmb3IgY29tcGxldGUgY2hlY2tsaXN0XG4gICAgICAvLyBUaGlzIGFycmF5IGlzIG9mdGVuIGZvcmdvdHRlbiBhbmQgY2F1c2VzIHZhbGlkYXRpb24gZmFpbHVyZXMgZm9yIG5ldyB0eXBlc1xuICAgICAgY29uc3QgdmFsaWRUeXBlcyA9IFsncGVyc29uYXMnLCAnc2tpbGxzJywgJ2FnZW50cycsICd0ZW1wbGF0ZXMnLCAnbWVtb3JpZXMnXTsgIC8vIE9ubHkgTUNQLXN1cHBvcnRlZCB0eXBlc1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBzZWN0aW9uIGlmIHByb3ZpZGVkXG4gICAgICBjb25zdCB2YWxpZGF0ZWRTZWN0aW9uID0gc2VjdGlvbiA/IHNhbml0aXplSW5wdXQoc2VjdGlvbi50b0xvd2VyQ2FzZSgpLCAxMDApIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKHZhbGlkYXRlZFNlY3Rpb24gJiYgIXZhbGlkU2VjdGlvbnMuaW5jbHVkZXModmFsaWRhdGVkU2VjdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNlY3Rpb24gJyR7dmFsaWRhdGVkU2VjdGlvbn0nLiBNdXN0IGJlIG9uZSBvZjogJHt2YWxpZFNlY3Rpb25zLmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIHR5cGUgaWYgcHJvdmlkZWQgKG9ubHkgdmFsaWQgd2hlbiBzZWN0aW9uIGlzICdsaWJyYXJ5JylcbiAgICAgIGNvbnN0IHZhbGlkYXRlZFR5cGUgPSB0eXBlID8gc2FuaXRpemVJbnB1dCh0eXBlLnRvTG93ZXJDYXNlKCksIDEwMCkgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAodmFsaWRhdGVkVHlwZSAmJiB2YWxpZGF0ZWRTZWN0aW9uID09PSAnbGlicmFyeScgJiYgIXZhbGlkVHlwZXMuaW5jbHVkZXModmFsaWRhdGVkVHlwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR5cGUgJyR7dmFsaWRhdGVkVHlwZX0nLiBNdXN0IGJlIG9uZSBvZjogJHt2YWxpZFR5cGVzLmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG4gICAgICBpZiAodmFsaWRhdGVkVHlwZSAmJiB2YWxpZGF0ZWRTZWN0aW9uICE9PSAnbGlicmFyeScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeXBlIHBhcmFtZXRlciBpcyBvbmx5IHZhbGlkIHdoZW4gc2VjdGlvbiBpcyBcImxpYnJhcnlcIicpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb25Ccm93c2VyLmJyb3dzZUNvbGxlY3Rpb24odmFsaWRhdGVkU2VjdGlvbiwgdmFsaWRhdGVkVHlwZSk7XG4gICAgICBcbiAgICAgIC8vIEhhbmRsZSBzZWN0aW9ucyB2aWV3XG4gICAgICBjb25zdCBpdGVtcyA9IHJlc3VsdC5pdGVtcztcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSByZXN1bHQuc2VjdGlvbnMgfHwgcmVzdWx0LmNhdGVnb3JpZXM7XG4gICAgICBcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmNvbGxlY3Rpb25Ccm93c2VyLmZvcm1hdEJyb3dzZVJlc3VsdHMoXG4gICAgICAgIGl0ZW1zLCBcbiAgICAgICAgY2F0ZWdvcmllcywgXG4gICAgICAgIHZhbGlkYXRlZFNlY3Rpb24sIFxuICAgICAgICB2YWxpZGF0ZWRUeXBlLCBcbiAgICAgICAgdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKClcbiAgICAgICk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZCA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBDb2xsZWN0aW9uIGJyb3dzaW5nIGZhaWxlZDogJHtzYW5pdGl6ZWQubWVzc2FnZX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlYXJjaENvbGxlY3Rpb24ocXVlcnk6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBFbmhhbmNlZCBpbnB1dCB2YWxpZGF0aW9uIGZvciBzZWFyY2ggcXVlcnlcbiAgICAgIGNvbnN0IHZhbGlkYXRlZFF1ZXJ5ID0gTUNQSW5wdXRWYWxpZGF0b3IudmFsaWRhdGVTZWFyY2hRdWVyeShxdWVyeSk7XG4gICAgICBcbiAgICAgIGNvbnN0IGl0ZW1zID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uU2VhcmNoLnNlYXJjaENvbGxlY3Rpb24odmFsaWRhdGVkUXVlcnkpO1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMuY29sbGVjdGlvblNlYXJjaC5mb3JtYXRTZWFyY2hSZXN1bHRzKGl0ZW1zLCB2YWxpZGF0ZWRRdWVyeSwgdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRXJyb3Igc2VhcmNoaW5nIGNvbGxlY3Rpb246ICR7c2FuaXRpemVkLm1lc3NhZ2V9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZWFyY2hDb2xsZWN0aW9uRW5oYW5jZWQocXVlcnk6IHN0cmluZywgb3B0aW9uczogYW55ID0ge30pIHtcbiAgICB0cnkge1xuICAgICAgLy8gRW5oYW5jZWQgaW5wdXQgdmFsaWRhdGlvbiBmb3Igc2VhcmNoIHF1ZXJ5XG4gICAgICBjb25zdCB2YWxpZGF0ZWRRdWVyeSA9IE1DUElucHV0VmFsaWRhdG9yLnZhbGlkYXRlU2VhcmNoUXVlcnkocXVlcnkpO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBhbmQgc2FuaXRpemUgb3B0aW9uc1xuICAgICAgY29uc3QgdmFsaWRhdGVkT3B0aW9ucyA9IHtcbiAgICAgICAgZWxlbWVudFR5cGU6IG9wdGlvbnMuZWxlbWVudFR5cGUgPyBTdHJpbmcob3B0aW9ucy5lbGVtZW50VHlwZSkgOiB1bmRlZmluZWQsXG4gICAgICAgIGNhdGVnb3J5OiBvcHRpb25zLmNhdGVnb3J5ID8gU3RyaW5nKG9wdGlvbnMuY2F0ZWdvcnkpIDogdW5kZWZpbmVkLFxuICAgICAgICBwYWdlOiBvcHRpb25zLnBhZ2UgPyBNYXRoLm1heCgxLCBwYXJzZUludChvcHRpb25zLnBhZ2UpIHx8IDEpIDogMSxcbiAgICAgICAgcGFnZVNpemU6IG9wdGlvbnMucGFnZVNpemUgPyBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDEsIHBhcnNlSW50KG9wdGlvbnMucGFnZVNpemUpIHx8IDI1KSkgOiAyNSxcbiAgICAgICAgc29ydEJ5OiBvcHRpb25zLnNvcnRCeSAmJiBbJ3JlbGV2YW5jZScsICduYW1lJywgJ2RhdGUnXS5pbmNsdWRlcyhvcHRpb25zLnNvcnRCeSkgPyBvcHRpb25zLnNvcnRCeSA6ICdyZWxldmFuY2UnXG4gICAgICB9O1xuICAgICAgXG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uU2VhcmNoLnNlYXJjaENvbGxlY3Rpb25XaXRoT3B0aW9ucyh2YWxpZGF0ZWRRdWVyeSwgdmFsaWRhdGVkT3B0aW9ucyk7XG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5jb2xsZWN0aW9uU2VhcmNoLmZvcm1hdFNlYXJjaFJlc3VsdHNXaXRoUGFnaW5hdGlvbihyZXN1bHRzLCB0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZCA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBFcnJvciBzZWFyY2hpbmcgY29sbGVjdGlvbjogJHtzYW5pdGl6ZWQubWVzc2FnZX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvbGxlY3Rpb25Db250ZW50KHBhdGg6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG1ldGFkYXRhLCBjb250ZW50IH0gPSBhd2FpdCB0aGlzLnBlcnNvbmFEZXRhaWxzLmdldENvbGxlY3Rpb25Db250ZW50KHBhdGgpO1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMucGVyc29uYURldGFpbHMuZm9ybWF0UGVyc29uYURldGFpbHMobWV0YWRhdGEsIGNvbnRlbnQsIHBhdGgsIHRoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgc2FuaXRpemVkID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEVycm9yIGZldGNoaW5nIGNvbnRlbnQ6ICR7c2FuaXRpemVkLm1lc3NhZ2V9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbnN0YWxsQ29udGVudChpbnB1dFBhdGg6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmVsZW1lbnRJbnN0YWxsZXIuaW5zdGFsbENvbnRlbnQoaW5wdXRQYXRoKTtcbiAgICAgIFxuICAgICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDimqDvuI8gJHtyZXN1bHQubWVzc2FnZX1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBJZiBpdCdzIGEgcGVyc29uYSwgcmVsb2FkIHBlcnNvbmFzXG4gICAgICBpZiAocmVzdWx0LmVsZW1lbnRUeXBlID09PSBFbGVtZW50VHlwZS5QRVJTT05BKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZFBlcnNvbmFzKCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmVsZW1lbnRJbnN0YWxsZXIuZm9ybWF0SW5zdGFsbFN1Y2Nlc3MoXG4gICAgICAgIHJlc3VsdC5tZXRhZGF0YSEsIFxuICAgICAgICByZXN1bHQuZmlsZW5hbWUhLFxuICAgICAgICByZXN1bHQuZWxlbWVudFR5cGUhXG4gICAgICApO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRXJyb3IgaW5zdGFsbGluZyBBSSBjdXN0b21pemF0aW9uIGVsZW1lbnQ6ICR7c2FuaXRpemVkLm1lc3NhZ2V9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdWJtaXRDb250ZW50KGNvbnRlbnRJZGVudGlmaWVyOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVXNlIHRoZSBuZXcgcG9ydGZvbGlvLWJhc2VkIHN1Ym1pc3Npb24gdG9vbFxuICAgICAgY29uc3QgeyBTdWJtaXRUb1BvcnRmb2xpb1Rvb2wgfSA9IGF3YWl0IGltcG9ydCgnLi90b29scy9wb3J0Zm9saW8vc3VibWl0VG9Qb3J0Zm9saW9Ub29sLmpzJyk7XG4gICAgICBjb25zdCB7IEZpbGVEaXNjb3ZlcnlVdGlsIH0gPSBhd2FpdCBpbXBvcnQoJy4vdXRpbHMvRmlsZURpc2NvdmVyeVV0aWwuanMnKTtcbiAgICAgIGNvbnN0IHN1Ym1pdFRvb2wgPSBuZXcgU3VibWl0VG9Qb3J0Zm9saW9Ub29sKHRoaXMuYXBpQ2FjaGUpO1xuICAgIFxuICAgIC8vIFRyeSB0byBmaW5kIHRoZSBjb250ZW50IGFjcm9zcyBhbGwgZWxlbWVudCB0eXBlc1xuICAgIGNvbnN0IHBvcnRmb2xpb01hbmFnZXIgPSBQb3J0Zm9saW9NYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgbGV0IGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZm91bmRQYXRoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBcbiAgICAvLyBQRVJGT1JNQU5DRSBPUFRJTUlaQVRJT046IFNlYXJjaCBhbGwgZWxlbWVudCBkaXJlY3RvcmllcyBpbiBwYXJhbGxlbFxuICAgIC8vIE5PVEU6IFRoaXMgZHluYW1pY2FsbHkgaGFuZGxlcyBBTEwgZWxlbWVudCB0eXBlcyBmcm9tIHRoZSBFbGVtZW50VHlwZSBlbnVtXG4gICAgLy8gTm8gaGFyZGNvZGVkIGNvdW50IC0gaWYgeW91IGFkZCAxMCBtb3JlIGVsZW1lbnQgdHlwZXMgdG9tb3Jyb3csIHRoaXMgY29kZVxuICAgIC8vIHdpbGwgYXV0b21hdGljYWxseSBzZWFyY2ggYWxsIDE2IHR5cGVzIHdpdGhvdXQgYW55IGNoYW5nZXMgbmVlZGVkIGhlcmVcbiAgICBjb25zdCBzZWFyY2hQcm9taXNlcyA9IE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLm1hcChhc3luYyAodHlwZSkgPT4ge1xuICAgICAgY29uc3QgZGlyID0gcG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKHR5cGUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IEZpbGVEaXNjb3ZlcnlVdGlsLmZpbmRGaWxlKGRpciwgY29udGVudElkZW50aWZpZXIsIHtcbiAgICAgICAgICBleHRlbnNpb25zOiBbJy5tZCcsICcuanNvbicsICcueWFtbCcsICcueW1sJ10sXG4gICAgICAgICAgcGFydGlhbE1hdGNoOiB0cnVlLFxuICAgICAgICAgIGNhY2hlUmVzdWx0czogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBmaWxlID8geyB0eXBlOiB0eXBlIGFzIEVsZW1lbnRUeXBlLCBmaWxlIH0gOiBudWxsO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAvLyBJTVBST1ZFRCBFUlJPUiBIQU5ETElORzogTG9nIHdhcm5pbmdzIGZvciB1bmV4cGVjdGVkIGVycm9yc1xuICAgICAgICBpZiAoZXJyb3I/LmNvZGUgIT09ICdFTk9FTlQnICYmIGVycm9yPy5jb2RlICE9PSAnRU5PVERJUicpIHtcbiAgICAgICAgICAvLyBOb3QganVzdCBhIG1pc3NpbmcgZGlyZWN0b3J5IC0gdGhpcyBjb3VsZCBiZSBhIHBlcm1pc3Npb24gaXNzdWUgb3Igb3RoZXIgcHJvYmxlbVxuICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmV4cGVjdGVkIGVycm9yIHNlYXJjaGluZyAke3R5cGV9IGRpcmVjdG9yeWAsIHsgXG4gICAgICAgICAgICBjb250ZW50SWRlbnRpZmllcixcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3I/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICAgIGNvZGU6IGVycm9yPy5jb2RlIFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERpcmVjdG9yeSBkb2Vzbid0IGV4aXN0IC0gdGhpcyBpcyBleHBlY3RlZCBmb3IgdW51c2VkIGVsZW1lbnQgdHlwZXNcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYCR7dHlwZX0gZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LCBza2lwcGluZ2AsIHsgdHlwZSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvLyBXYWl0IGZvciBhbGwgc2VhcmNoZXMgdG8gY29tcGxldGUgYW5kIGZpbmQgdGhlIGZpcnN0IG1hdGNoXG4gICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChzZWFyY2hQcm9taXNlcyk7XG4gICAgXG4gICAgLy8gTk9URTogRmlsZSB2YWxpZGF0aW9uIC0gd2UgcmVseSBvbiB0aGUgcG9ydGZvbGlvIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdG8gZW5zdXJlXG4gICAgLy8gZmlsZXMgYXJlIGluIHRoZSBjb3JyZWN0IGVsZW1lbnQgdHlwZSBkaXJlY3RvcnkuIEFkZGl0aW9uYWwgc2NoZW1hIHZhbGlkYXRpb25cbiAgICAvLyBjb3VsZCBiZSBhZGRlZCBoZXJlIGlmIG5lZWRlZCwgYnV0IHRoZSBjdXJyZW50IGFwcHJvYWNoIGlzIHN1ZmZpY2llbnQgYXM6XG4gICAgLy8gMS4gRmlsZURpc2NvdmVyeVV0aWwgYWxyZWFkeSB2YWxpZGF0ZXMgZmlsZSBleHRlbnNpb25zXG4gICAgLy8gMi4gUG9ydGZvbGlvIHN0cnVjdHVyZSBlbmZvcmNlcyBwcm9wZXIgb3JnYW5pemF0aW9uXG4gICAgLy8gMy4gc3VibWl0VG9Qb3J0Zm9saW9Ub29sIHBlcmZvcm1zIGFkZGl0aW9uYWwgdmFsaWRhdGlvbiBkb3duc3RyZWFtXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2Ygc2VhcmNoUmVzdWx0cykge1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHJlc3VsdC52YWx1ZSkge1xuICAgICAgICBmb3VuZFBhdGggPSByZXN1bHQudmFsdWUuZmlsZTtcbiAgICAgICAgZWxlbWVudFR5cGUgPSByZXN1bHQudmFsdWUudHlwZTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGb3VuZCBjb250ZW50IGluICR7ZWxlbWVudFR5cGV9IGRpcmVjdG9yeWAsIHsgXG4gICAgICAgICAgY29udGVudElkZW50aWZpZXIsIFxuICAgICAgICAgIHR5cGU6IGVsZW1lbnRUeXBlLCBcbiAgICAgICAgICBmaWxlOiBmb3VuZFBhdGggXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gQ1JJVElDQUwgRklYOiBOZXZlciBkZWZhdWx0IHRvIGFueSBlbGVtZW50IHR5cGUgd2hlbiBjb250ZW50IGlzIG5vdCBmb3VuZFxuICAgIC8vIFRoaXMgcHJldmVudHMgaW5jb3JyZWN0IHN1Ym1pc3Npb25zIGFuZCBmb3JjZXMgcHJvcGVyIHR5cGUgZGV0ZWN0aW9uIG9yIHVzZXIgc3BlY2lmaWNhdGlvblxuICAgIGlmICghZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIENvbnRlbnQgbm90IGZvdW5kIGluIGFueSBlbGVtZW50IGRpcmVjdG9yeSAtIHByb3ZpZGUgaGVscGZ1bCBlcnJvciB3aXRoIHN1Z2dlc3Rpb25zXG4gICAgICBjb25zdCBhdmFpbGFibGVUeXBlcyA9IE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmpvaW4oJywgJyk7XG4gICAgICBsb2dnZXIud2FybihgQ29udGVudCBcIiR7Y29udGVudElkZW50aWZpZXJ9XCIgbm90IGZvdW5kIGluIGFueSBwb3J0Zm9saW8gZGlyZWN0b3J5YCwgeyBcbiAgICAgICAgY29udGVudElkZW50aWZpZXIsXG4gICAgICAgIHNlYXJjaGVkVHlwZXM6IE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpIFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBFbmhhbmNlZCBlcnJvciBtZXNzYWdlIHdpdGggc21hcnQgc3VnZ2VzdGlvbnNcbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBg4p2MIENvbnRlbnQgXCIke2NvbnRlbnRJZGVudGlmaWVyfVwiIG5vdCBmb3VuZCBpbiBwb3J0Zm9saW8uXFxuXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+UjSAqKlNlYXJjaGVkIGFjcm9zcyBhbGwgZWxlbWVudCB0eXBlcyoqOiAke2F2YWlsYWJsZVR5cGVzfVxcblxcbmA7XG4gICAgICBcbiAgICAgIC8vIFRyeSB0byBwcm92aWRlIHNtYXJ0IHN1Z2dlc3Rpb25zIGJhc2VkIG9uIHBhcnRpYWwgbWF0Y2hlc1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBGaWxlRGlzY292ZXJ5VXRpbCB9ID0gYXdhaXQgaW1wb3J0KCcuL3V0aWxzL0ZpbGVEaXNjb3ZlcnlVdGlsLmpzJyk7XG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBcbiAgICAgICAgLy8gU2VhcmNoIGZvciBzaW1pbGFyIG5hbWVzIGFjcm9zcyBhbGwgZWxlbWVudCB0eXBlc1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnRUeXBlIG9mIE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpKSB7XG4gICAgICAgICAgY29uc3QgZGlyID0gcG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKGVsZW1lbnRUeXBlKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGFydGlhbE1hdGNoZXMgPSBhd2FpdCBGaWxlRGlzY292ZXJ5VXRpbC5maW5kRmlsZShkaXIsIGNvbnRlbnRJZGVudGlmaWVyLCB7XG4gICAgICAgICAgICAgIGV4dGVuc2lvbnM6IFsnLm1kJywgJy5qc29uJywgJy55YW1sJywgJy55bWwnXSxcbiAgICAgICAgICAgICAgcGFydGlhbE1hdGNoOiB0cnVlLFxuICAgICAgICAgICAgICBjYWNoZVJlc3VsdHM6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFydGlhbE1hdGNoZXMpICYmIHBhcnRpYWxNYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiBwYXJ0aWFsTWF0Y2hlcy5zbGljZSgwLCAyKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VuYW1lID0gcGF0aC5iYXNlbmFtZShtYXRjaCwgcGF0aC5leHRuYW1lKG1hdGNoKSk7XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMucHVzaChgXCIke2Jhc2VuYW1lfVwiICgke2VsZW1lbnRUeXBlfSlgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0aWFsTWF0Y2hlcykge1xuICAgICAgICAgICAgICBjb25zdCBiYXNlbmFtZSA9IHBhdGguYmFzZW5hbWUocGFydGlhbE1hdGNoZXMsIHBhdGguZXh0bmFtZShwYXJ0aWFsTWF0Y2hlcykpO1xuICAgICAgICAgICAgICBzdWdnZXN0aW9ucy5wdXNoKGBcIiR7YmFzZW5hbWV9XCIgKCR7ZWxlbWVudFR5cGV9KWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBTa2lwIHRoaXMgdHlwZSBpZiB0aGVyZSdzIGFuIGVycm9yXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmIChzdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlICs9IGDwn5KhICoqRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8qKlxcbmA7XG4gICAgICAgICAgZm9yIChjb25zdCBzdWdnZXN0aW9uIG9mIHN1Z2dlc3Rpb25zLnNsaWNlKDAsIDUpKSB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYCAg4oCiICR7c3VnZ2VzdGlvbn1cXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYFxcbmA7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKHN1Z2dlc3Rpb25FcnJvcikge1xuICAgICAgICAvLyBJZiBzdWdnZXN0aW9ucyBmYWlsLCBjb250aW51ZSB3aXRob3V0IHRoZW1cbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gZ2VuZXJhdGUgc3VnZ2VzdGlvbnMnLCB7IHN1Z2dlc3Rpb25FcnJvciB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgZXJyb3JNZXNzYWdlICs9IGDwn5ug77iPICoqU3RlcC1ieS1zdGVwIHRyb3VibGVzaG9vdGluZyoqOlxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDEuIPCfk50gKipMaXN0IGFsbCBjb250ZW50Kio6IFVzZSBcXGBsaXN0X3BvcnRmb2xpb1xcYCB0byBzZWUgd2hhdCdzIGF2YWlsYWJsZVxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDIuIPCflI0gKipDaGVjayBzcGVsbGluZyoqOiBWZXJpZnkgdGhlIGV4YWN0IG5hbWUgYW5kIHRyeSB2YXJpYXRpb25zXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBgMy4g8J+OryAqKlNwZWNpZnkgdHlwZSoqOiBUcnkgXFxgc3VibWl0X2NvbGxlY3Rpb25fY29udGVudCBcIiR7Y29udGVudElkZW50aWZpZXJ9XCIgLS10eXBlPXBlcnNvbmFzXFxgXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBgNC4g8J+TgSAqKkJyb3dzZSBmaWxlcyoqOiBDaGVjayB5b3VyIHBvcnRmb2xpbyBkaXJlY3RvcnkgbWFudWFsbHlcXG5cXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGDwn5OdICoqVGlwKio6IFRoZSBzeXN0ZW0gc2VhcmNoZXMgYm90aCBmaWxlbmFtZXMgYW5kIGRpc3BsYXkgbmFtZXMgd2l0aCBmdXp6eSBtYXRjaGluZy5gO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGVzIGFjcm9zcyBhbGwgc291cmNlcyBiZWZvcmUgc3VibWlzc2lvblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IFVuaWZpZWRJbmRleE1hbmFnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vVW5pZmllZEluZGV4TWFuYWdlci5qcycpO1xuICAgICAgY29uc3QgdW5pZmllZE1hbmFnZXIgPSBVbmlmaWVkSW5kZXhNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICBcbiAgICAgIC8vIEV4dHJhY3QgdGhlIGFjdHVhbCBlbGVtZW50IG5hbWUgZnJvbSB0aGUgY29udGVudCBwYXRoXG4gICAgICBjb25zdCBiYXNlbmFtZSA9IHBhdGguYmFzZW5hbWUoZm91bmRQYXRoISwgcGF0aC5leHRuYW1lKGZvdW5kUGF0aCEpKTtcbiAgICAgIGNvbnN0IGR1cGxpY2F0ZXMgPSBhd2FpdCB1bmlmaWVkTWFuYWdlci5jaGVja0R1cGxpY2F0ZXMoYmFzZW5hbWUpO1xuICAgICAgXG4gICAgICBpZiAoZHVwbGljYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGR1cGxpY2F0ZSA9IGR1cGxpY2F0ZXNbMF07XG4gICAgICAgIGxldCB3YXJuaW5nVGV4dCA9IGDimqDvuI8gKipEdXBsaWNhdGUgRGV0ZWN0aW9uIEFsZXJ0KipcXG5cXG5gO1xuICAgICAgICB3YXJuaW5nVGV4dCArPSBgRm91bmQgXCIke2R1cGxpY2F0ZS5uYW1lfVwiIGluIG11bHRpcGxlIHNvdXJjZXM6XFxuXFxuYDtcbiAgICAgICAgXG4gICAgICAgIGZvciAoY29uc3Qgc291cmNlIG9mIGR1cGxpY2F0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgY29uc3Qgc291cmNlSWNvbiA9IHRoaXMuZ2V0U291cmNlSWNvbihzb3VyY2Uuc291cmNlKTtcbiAgICAgICAgICB3YXJuaW5nVGV4dCArPSBgJHtzb3VyY2VJY29ufSAqKiR7c291cmNlLnNvdXJjZX0qKjogJHtzb3VyY2UudmVyc2lvbiB8fCAndW5rbm93biB2ZXJzaW9uJ30gKCR7c291cmNlLmxhc3RNb2RpZmllZC50b0xvY2FsZURhdGVTdHJpbmcoKX0pXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgd2FybmluZ1RleHQgKz0gYFxcbmA7XG4gICAgICAgIFxuICAgICAgICBpZiAoZHVwbGljYXRlLmhhc1ZlcnNpb25Db25mbGljdCAmJiBkdXBsaWNhdGUudmVyc2lvbkNvbmZsaWN0KSB7XG4gICAgICAgICAgd2FybmluZ1RleHQgKz0gYPCflIQgKipWZXJzaW9uIENvbmZsaWN0IERldGVjdGVkKipcXG5gO1xuICAgICAgICAgIHdhcm5pbmdUZXh0ICs9IGBSZWNvbW1lbmRlZCBzb3VyY2U6ICoqJHtkdXBsaWNhdGUudmVyc2lvbkNvbmZsaWN0LnJlY29tbWVuZGVkfSoqXFxuYDtcbiAgICAgICAgICB3YXJuaW5nVGV4dCArPSBgUmVhc29uOiAke2R1cGxpY2F0ZS52ZXJzaW9uQ29uZmxpY3QucmVhc29ufVxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHdhcm5pbmdUZXh0ICs9IGAqKlJlY29tbWVuZGF0aW9uczoqKlxcbmA7XG4gICAgICAgIHdhcm5pbmdUZXh0ICs9IGDigKIgUmV2aWV3IGV4aXN0aW5nIHZlcnNpb25zIGJlZm9yZSBzdWJtaXR0aW5nXFxuYDtcbiAgICAgICAgd2FybmluZ1RleHQgKz0gYOKAoiBDb25zaWRlciB1cGRhdGluZyBsb2NhbCB2ZXJzaW9uIGluc3RlYWQgb2YgY3JlYXRpbmcgZHVwbGljYXRlXFxuYDtcbiAgICAgICAgd2FybmluZ1RleHQgKz0gYOKAoiBFbnN1cmUgeW91ciB2ZXJzaW9uIGFkZHMgbWVhbmluZ2Z1bCBpbXByb3ZlbWVudHNcXG5gO1xuICAgICAgICB3YXJuaW5nVGV4dCArPSBg4oCiIFVwZGF0ZSB2ZXJzaW9uIG51bWJlciBpbiBtZXRhZGF0YSBpZiBzdWJtaXR0aW5nIGVuaGFuY2VtZW50XFxuXFxuYDtcbiAgICAgICAgd2FybmluZ1RleHQgKz0gYCoqUHJvY2VlZGluZyB3aXRoIHN1Ym1pc3Npb24gYW55d2F5Li4uKipcXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgLy8gTG9nIHRoZSBkdXBsaWNhdGUgZGV0ZWN0aW9uIGZvciBtb25pdG9yaW5nXG4gICAgICAgIGxvZ2dlci53YXJuKCdEdXBsaWNhdGUgY29udGVudCBkZXRlY3RlZCBkdXJpbmcgc3VibWlzc2lvbicsIHtcbiAgICAgICAgICBjb250ZW50SWRlbnRpZmllcixcbiAgICAgICAgICBlbGVtZW50VHlwZSxcbiAgICAgICAgICBkdXBsaWNhdGVJbmZvOiBkdXBsaWNhdGVcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBDb250aW51ZSB3aXRoIHN1Ym1pc3Npb24gYnV0IHNob3cgd2FybmluZ1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdWJtaXRUb29sLmV4ZWN1dGUoe1xuICAgICAgICAgIG5hbWU6IGNvbnRlbnRJZGVudGlmaWVyLFxuICAgICAgICAgIHR5cGU6IGVsZW1lbnRUeXBlXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gQ29tYmluZSB3YXJuaW5nIHdpdGggc3VibWlzc2lvbiByZXN1bHRcbiAgICAgICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHtyZXN1bHQuc3VjY2VzcyA/ICfimqDvuI8nIDogJ+KdjCd9ICR7d2FybmluZ1RleHR9JHtyZXN1bHQubWVzc2FnZX1gO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiByZXNwb25zZVRleHQsXG4gICAgICAgICAgfV0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZHVwbGljYXRlRXJyb3IpIHtcbiAgICAgIC8vIElmIGR1cGxpY2F0ZSBjaGVja2luZyBmYWlscywgbG9nIGJ1dCBjb250aW51ZSB3aXRoIHN1Ym1pc3Npb25cbiAgICAgIGxvZ2dlci53YXJuKCdEdXBsaWNhdGUgY2hlY2tpbmcgZmFpbGVkIGR1cmluZyBzdWJtaXNzaW9uJywge1xuICAgICAgICBjb250ZW50SWRlbnRpZmllcixcbiAgICAgICAgZXJyb3I6IGR1cGxpY2F0ZUVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBkdXBsaWNhdGVFcnJvci5tZXNzYWdlIDogU3RyaW5nKGR1cGxpY2F0ZUVycm9yKVxuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIC8vIEV4ZWN1dGUgdGhlIHN1Ym1pc3Npb24gd2l0aCB0aGUgZGV0ZWN0ZWQgZWxlbWVudCB0eXBlXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3VibWl0VG9vbC5leGVjdXRlKHtcbiAgICAgIG5hbWU6IGNvbnRlbnRJZGVudGlmaWVyLFxuICAgICAgdHlwZTogZWxlbWVudFR5cGVcbiAgICB9KTtcbiAgICBcbiAgICAvLyBGb3JtYXQgdGhlIHJlc3BvbnNlIC0gdGhlIG1lc3NhZ2UgYWxyZWFkeSBjb250YWlucyBhbGwgZGV0YWlsc1xuICAgIGxldCByZXNwb25zZVRleHQgPSByZXN1bHQubWVzc2FnZTtcbiAgICBcbiAgICAvLyBBZGQgcGVyc29uYSBpbmRpY2F0b3IgZm9yIGNvbnNpc3RlbmN5XG4gICAgcmVzcG9uc2VUZXh0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHtyZXN1bHQuc3VjY2VzcyA/ICfinIUnIDogJ+KdjCd9ICR7cmVzcG9uc2VUZXh0fWA7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IHJlc3BvbnNlVGV4dCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgICBcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAvLyBVWCBJTVBST1ZFTUVOVDogQ29tcHJlaGVuc2l2ZSBlcnJvciBoYW5kbGluZyB3aXRoIGZhbGxiYWNrIHN1Z2dlc3Rpb25zXG4gICAgICBsb2dnZXIuZXJyb3IoJ1VuZXhwZWN0ZWQgZXJyb3IgaW4gc3VibWl0Q29udGVudCcsIHtcbiAgICAgICAgY29udGVudElkZW50aWZpZXIsXG4gICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICBzdGFjazogZXJyb3Iuc3RhY2tcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqU3VibWlzc2lvbiBGYWlsZWQqKlxcblxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYPCfmqggKipFcnJvcioqOiAke2Vycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3Igb2NjdXJyZWQnfVxcblxcbmA7XG4gICAgICBcbiAgICAgIC8vIFByb3ZpZGUgY29udGV4dHVhbCB0cm91Ymxlc2hvb3RpbmcgYmFzZWQgb24gZXJyb3IgdHlwZVxuICAgICAgaWYgKGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdhdXRoJykgfHwgZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ3Rva2VuJykpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlICs9IGDwn5SQICoqQXV0aGVudGljYXRpb24gSXNzdWUqKjpcXG5gO1xuICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYOKAoiBSdW46IFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIHRvIHJlLWF1dGhlbnRpY2F0ZVxcbmA7XG4gICAgICAgIGVycm9yTWVzc2FnZSArPSBg4oCiIENoZWNrOiBcXGBnaCBhdXRoIHN0YXR1c1xcYCBpZiB5b3UgaGF2ZSBHaXRIdWIgQ0xJXFxuXFxuYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCduZXR3b3JrJykgfHwgZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ2Nvbm5lY3Rpb24nKSkge1xuICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYPCfjJAgKipOZXR3b3JrIElzc3VlKio6XFxuYDtcbiAgICAgICAgZXJyb3JNZXNzYWdlICs9IGDigKIgQ2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uXFxuYDtcbiAgICAgICAgZXJyb3JNZXNzYWdlICs9IGDigKIgVHJ5IGFnYWluIGluIGEgZmV3IG1pbnV0ZXNcXG5gO1xuICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYOKAoiBDaGVjayBHaXRIdWIgc3RhdHVzOiBodHRwczovL3N0YXR1cy5naXRodWIuY29tXFxuXFxuYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgZXJyb3JNZXNzYWdlICs9IGDwn5qRICoqRW1lcmdlbmN5IEFsdGVybmF0aXZlcyoqOlxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDEuIPCflIQgKipSZXRyeSoqOiBUcnkgdGhlIHNhbWUgY29tbWFuZCBhZ2FpblxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDIuIPCfk50gKipDaGVjayBjb250ZW50Kio6IFVzZSBcXGBsaXN0X3BvcnRmb2xpb1xcYCB0byB2ZXJpZnkgdGhlIGVsZW1lbnQgZXhpc3RzXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBgMy4g8J+OryAqKlNwZWNpZnkgdHlwZSoqOiBBZGQgXFxgLS10eXBlPXBlcnNvbmFzXFxgIGlmIHlvdSBrbm93IHRoZSBlbGVtZW50IHR5cGVcXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGA0LiDwn5qRICoqTWFudWFsIHVwbG9hZCoqOiBDb3B5IGNvbnRlbnQgZGlyZWN0bHkgdG8gR2l0SHViIHZpYSB3ZWIgaW50ZXJmYWNlXFxuXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+TniAqKk5lZWQgaGVscD8qKiBUaGlzIGxvb2tzIGxpa2UgYSBzeXN0ZW0gaXNzdWUuIFBsZWFzZSByZXBvcnQgaXQgd2l0aCB0aGUgZXJyb3IgZGV0YWlscyBhYm92ZS5gO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0Q29sbGVjdGlvbkNhY2hlSGVhbHRoKCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgY2FjaGUgc3RhdGlzdGljcyBmcm9tIGJvdGggY2FjaGVzXG4gICAgICBjb25zdCBjb2xsZWN0aW9uU3RhdHMgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb25DYWNoZS5nZXRDYWNoZVN0YXRzKCk7XG4gICAgICBjb25zdCBzZWFyY2hTdGF0cyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvblNlYXJjaC5nZXRDYWNoZVN0YXRzKCk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGNhY2hlIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGNvbnN0IGNhY2hlRGlyID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICcuZG9sbGhvdXNlbWNwJywgJ2NhY2hlJyk7XG4gICAgICBsZXQgY2FjaGVGaWxlRXhpc3RzID0gZmFsc2U7XG4gICAgICBsZXQgY2FjaGVGaWxlU2l6ZSA9IDA7XG4gICAgICBcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNhY2hlRmlsZSA9IHBhdGguam9pbihjYWNoZURpciwgJ2NvbGxlY3Rpb24tY2FjaGUuanNvbicpO1xuICAgICAgICBjb25zdCBmaWxlU3RhdHMgPSBhd2FpdCBmcy5zdGF0KGNhY2hlRmlsZSk7XG4gICAgICAgIGNhY2hlRmlsZUV4aXN0cyA9IHRydWU7XG4gICAgICAgIGNhY2hlRmlsZVNpemUgPSBmaWxlU3RhdHMuc2l6ZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIENhY2hlIGZpbGUgZG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRm9ybWF0IGNhY2hlIGFnZVxuICAgICAgY29uc3QgZm9ybWF0QWdlID0gKGFnZU1zOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgICAgICBpZiAoYWdlTXMgPT09IDApIHJldHVybiAnTm90IGNhY2hlZCc7XG4gICAgICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihhZ2VNcyAvICgxMDAwICogNjAgKiA2MCkpO1xuICAgICAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigoYWdlTXMgJSAoMTAwMCAqIDYwICogNjApKSAvICgxMDAwICogNjApKTtcbiAgICAgICAgaWYgKGhvdXJzID4gMCkge1xuICAgICAgICAgIHJldHVybiBgJHtob3Vyc31oICR7bWludXRlc31tIG9sZGA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke21pbnV0ZXN9bSBvbGRgO1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgLy8gQnVpbGQgaGVhbHRoIHJlcG9ydCB3aXRoIGJvdGggY2FjaGUgc3lzdGVtc1xuICAgICAgY29uc3QgaGVhbHRoUmVwb3J0ID0ge1xuICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgc3RhdHVzOiBjb2xsZWN0aW9uU3RhdHMuaXNWYWxpZCA/ICdoZWFsdGh5JyA6IChjYWNoZUZpbGVFeGlzdHMgPyAnZXhwaXJlZCcgOiAnZW1wdHknKSxcbiAgICAgICAgICBjYWNoZUV4aXN0czogY2FjaGVGaWxlRXhpc3RzLFxuICAgICAgICAgIGl0ZW1Db3VudDogY29sbGVjdGlvblN0YXRzLml0ZW1Db3VudCxcbiAgICAgICAgICBjYWNoZUFnZTogZm9ybWF0QWdlKGNvbGxlY3Rpb25TdGF0cy5jYWNoZUFnZSksXG4gICAgICAgICAgY2FjaGVBZ2VNczogY29sbGVjdGlvblN0YXRzLmNhY2hlQWdlLFxuICAgICAgICAgIGlzVmFsaWQ6IGNvbGxlY3Rpb25TdGF0cy5pc1ZhbGlkLFxuICAgICAgICAgIGNhY2hlRmlsZVNpemU6IGNhY2hlRmlsZVNpemUsXG4gICAgICAgICAgY2FjaGVGaWxlU2l6ZUZvcm1hdHRlZDogY2FjaGVGaWxlU2l6ZSA+IDAgPyBgJHsoY2FjaGVGaWxlU2l6ZSAvIDEwMjQpLnRvRml4ZWQoMil9IEtCYCA6ICcwIEtCJyxcbiAgICAgICAgICB0dGxSZW1haW5pbmc6IGNvbGxlY3Rpb25TdGF0cy5pc1ZhbGlkID8gZm9ybWF0QWdlKDI0ICogNjAgKiA2MCAqIDEwMDAgLSBjb2xsZWN0aW9uU3RhdHMuY2FjaGVBZ2UpIDogJ0V4cGlyZWQnXG4gICAgICAgIH0sXG4gICAgICAgIGluZGV4OiB7XG4gICAgICAgICAgc3RhdHVzOiBzZWFyY2hTdGF0cy5pbmRleC5pc1ZhbGlkID8gJ2hlYWx0aHknIDogKHNlYXJjaFN0YXRzLmluZGV4Lmhhc0NhY2hlID8gJ2V4cGlyZWQnIDogJ2VtcHR5JyksXG4gICAgICAgICAgaGFzQ2FjaGU6IHNlYXJjaFN0YXRzLmluZGV4Lmhhc0NhY2hlLFxuICAgICAgICAgIGVsZW1lbnRzOiBzZWFyY2hTdGF0cy5pbmRleC5lbGVtZW50cyxcbiAgICAgICAgICBjYWNoZUFnZTogZm9ybWF0QWdlKHNlYXJjaFN0YXRzLmluZGV4LmFnZSksXG4gICAgICAgICAgaXNWYWxpZDogc2VhcmNoU3RhdHMuaW5kZXguaXNWYWxpZCxcbiAgICAgICAgICB0dGxSZW1haW5pbmc6IHNlYXJjaFN0YXRzLmluZGV4LmlzVmFsaWQgPyBmb3JtYXRBZ2UoMTUgKiA2MCAqIDEwMDAgLSBzZWFyY2hTdGF0cy5pbmRleC5hZ2UpIDogJ0V4cGlyZWQnXG4gICAgICAgIH0sXG4gICAgICAgIG92ZXJhbGw6IHtcbiAgICAgICAgICByZWNvbW1lbmRhdGlvbjogKGNvbGxlY3Rpb25TdGF0cy5pc1ZhbGlkIHx8IHNlYXJjaFN0YXRzLmluZGV4LmlzVmFsaWQpXG4gICAgICAgICAgICA/ICdDYWNoZSBzeXN0ZW0gaXMgb3BlcmF0aW9uYWwgYW5kIHNlcnZpbmcgY29udGVudCBlZmZpY2llbnRseSdcbiAgICAgICAgICAgIDogJ0NhY2hlIHN5c3RlbSB3aWxsIHJlZnJlc2ggb24gbmV4dCBhY2Nlc3MgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2UnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfk4ogKipDb2xsZWN0aW9uIENhY2hlIEhlYWx0aCBDaGVjayoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGAjIyDwn5eE77iPIENvbGxlY3Rpb24gQ2FjaGUgKExlZ2FjeSlcXG5gICtcbiAgICAgICAgICAgICAgYCoqU3RhdHVzKio6ICR7aGVhbHRoUmVwb3J0LmNvbGxlY3Rpb24uc3RhdHVzID09PSAnaGVhbHRoeScgPyAn4pyFJyA6IGhlYWx0aFJlcG9ydC5jb2xsZWN0aW9uLnN0YXR1cyA9PT0gJ2V4cGlyZWQnID8gJ+KaoO+4jycgOiAn8J+Tpid9ICR7aGVhbHRoUmVwb3J0LmNvbGxlY3Rpb24uc3RhdHVzLnRvVXBwZXJDYXNlKCl9XFxuYCArXG4gICAgICAgICAgICAgIGAqKkl0ZW1zIENhY2hlZCoqOiAke2hlYWx0aFJlcG9ydC5jb2xsZWN0aW9uLml0ZW1Db3VudH1cXG5gICtcbiAgICAgICAgICAgICAgYCoqQ2FjaGUgQWdlKio6ICR7aGVhbHRoUmVwb3J0LmNvbGxlY3Rpb24uY2FjaGVBZ2V9XFxuYCArXG4gICAgICAgICAgICAgIGAqKkNhY2hlIFNpemUqKjogJHtoZWFsdGhSZXBvcnQuY29sbGVjdGlvbi5jYWNoZUZpbGVTaXplRm9ybWF0dGVkfVxcbmAgK1xuICAgICAgICAgICAgICBgKipUVEwgUmVtYWluaW5nKio6ICR7aGVhbHRoUmVwb3J0LmNvbGxlY3Rpb24udHRsUmVtYWluaW5nfVxcblxcbmAgK1xuICAgICAgICAgICAgICBgIyMg8J+agCBJbmRleCBDYWNoZSAoRW5oYW5jZWQgU2VhcmNoKVxcbmAgK1xuICAgICAgICAgICAgICBgKipTdGF0dXMqKjogJHtoZWFsdGhSZXBvcnQuaW5kZXguc3RhdHVzID09PSAnaGVhbHRoeScgPyAn4pyFJyA6IGhlYWx0aFJlcG9ydC5pbmRleC5zdGF0dXMgPT09ICdleHBpcmVkJyA/ICfimqDvuI8nIDogJ/Cfk6YnfSAke2hlYWx0aFJlcG9ydC5pbmRleC5zdGF0dXMudG9VcHBlckNhc2UoKX1cXG5gICtcbiAgICAgICAgICAgICAgYCoqRWxlbWVudHMgSW5kZXhlZCoqOiAke2hlYWx0aFJlcG9ydC5pbmRleC5lbGVtZW50c31cXG5gICtcbiAgICAgICAgICAgICAgYCoqQ2FjaGUgQWdlKio6ICR7aGVhbHRoUmVwb3J0LmluZGV4LmNhY2hlQWdlfVxcbmAgK1xuICAgICAgICAgICAgICBgKipUVEwgUmVtYWluaW5nKio6ICR7aGVhbHRoUmVwb3J0LmluZGV4LnR0bFJlbWFpbmluZ31cXG5cXG5gICtcbiAgICAgICAgICAgICAgYCoqT3ZlcmFsbCBTdGF0dXMqKjogJHtoZWFsdGhSZXBvcnQub3ZlcmFsbC5yZWNvbW1lbmRhdGlvbn1cXG5cXG5gICtcbiAgICAgICAgICAgICAgYFRoZSBlbmhhbmNlZCBpbmRleCBjYWNoZSBwcm92aWRlcyBmYXN0IHNlYXJjaCB3aXRoIHBhZ2luYXRpb24sIGZpbHRlcmluZywgYW5kIHNvcnRpbmcuIGAgK1xuICAgICAgICAgICAgICBgVGhlIGNvbGxlY3Rpb24gY2FjaGUgc2VydmVzIGFzIGEgZmFsbGJhY2sgZm9yIG9mZmxpbmUgYnJvd3NpbmcuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZ2V0IGNhY2hlIGhlYWx0aDogJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBGYWlsZWQgdG8gZ2V0IGNhY2hlIGhlYWx0aDogJHtlcnJvck1lc3NhZ2V9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBVc2VyIGlkZW50aXR5IG1hbmFnZW1lbnRcbiAgYXN5bmMgc2V0VXNlcklkZW50aXR5KHVzZXJuYW1lOiBzdHJpbmcsIGVtYWlsPzogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghdXNlcm5hbWUgfHwgdXNlcm5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBVc2VybmFtZSBjYW5ub3QgYmUgZW1wdHlgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBhbmQgc2FuaXRpemUgdXNlcm5hbWVcbiAgICAgIGNvbnN0IHZhbGlkYXRlZFVzZXJuYW1lID0gdmFsaWRhdGVVc2VybmFtZSh1c2VybmFtZSk7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGVtYWlsIGlmIHByb3ZpZGVkXG4gICAgICBsZXQgdmFsaWRhdGVkRW1haWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChlbWFpbCkge1xuICAgICAgICBjb25zdCBzYW5pdGl6ZWRFbWFpbCA9IHNhbml0aXplSW5wdXQoZW1haWwsIDEwMCk7XG4gICAgICAgIGlmICghVkFMSURBVElPTl9QQVRURVJOUy5TQUZFX0VNQUlMLnRlc3Qoc2FuaXRpemVkRW1haWwpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVtYWlsIGZvcm1hdCcpO1xuICAgICAgICB9XG4gICAgICAgIHZhbGlkYXRlZEVtYWlsID0gc2FuaXRpemVkRW1haWw7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0aGUgdmFsaWRhdGVkIHVzZXIgaWRlbnRpdHlcbiAgICAgIHRoaXMuY3VycmVudFVzZXIgPSB2YWxpZGF0ZWRVc2VybmFtZTtcbiAgICAgIGlmICh2YWxpZGF0ZWRFbWFpbCkge1xuICAgICAgICBwcm9jZXNzLmVudi5ET0xMSE9VU0VfRU1BSUwgPSB2YWxpZGF0ZWRFbWFpbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqVXNlciBJZGVudGl0eSBTZXQqKlxcblxcbmAgK1xuICAgICAgICAgICAgYPCfkaQgKipVc2VybmFtZToqKiAke3ZhbGlkYXRlZFVzZXJuYW1lfVxcbmAgK1xuICAgICAgICAgICAgYCR7dmFsaWRhdGVkRW1haWwgPyBg8J+TpyAqKkVtYWlsOioqICR7dmFsaWRhdGVkRW1haWx9XFxuYCA6ICcnfWAgK1xuICAgICAgICAgICAgYFxcbvCfjq8gKipOZXh0IFN0ZXBzOioqXFxuYCArXG4gICAgICAgICAgICBg4oCiIE5ldyBwZXJzb25hcyB5b3UgY3JlYXRlIHdpbGwgYmUgYXR0cmlidXRlZCB0byBcIiR7dmFsaWRhdGVkVXNlcm5hbWV9XCJcXG5gICtcbiAgICAgICAgICAgIGDigKIgU2V0IGVudmlyb25tZW50IHZhcmlhYmxlIFxcYERPTExIT1VTRV9VU0VSPSR7dmFsaWRhdGVkVXNlcm5hbWV9XFxgIHRvIHBlcnNpc3QgdGhpcyBzZXR0aW5nXFxuYCArXG4gICAgICAgICAgICBgJHt2YWxpZGF0ZWRFbWFpbCA/IGDigKIgU2V0IGVudmlyb25tZW50IHZhcmlhYmxlIFxcYERPTExIT1VTRV9FTUFJTD0ke3ZhbGlkYXRlZEVtYWlsfVxcYCBmb3IgY29udGFjdCBpbmZvXFxuYCA6ICcnfWAgK1xuICAgICAgICAgICAgYOKAoiBVc2UgXFxgY2xlYXJfdXNlcl9pZGVudGl0eVxcYCB0byByZXR1cm4gdG8gYW5vbnltb3VzIG1vZGVgLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipWYWxpZGF0aW9uIEVycm9yKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYCR7c2FuaXRpemVkLm1lc3NhZ2V9XFxuXFxuYCArXG4gICAgICAgICAgICAgIGBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIHVzZXJuYW1lIChhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgaHlwaGVucywgdW5kZXJzY29yZXMsIGRvdHMgb25seSkuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRVc2VySWRlbnRpdHkoKSB7XG4gICAgY29uc3QgZW1haWwgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfRU1BSUw7XG4gICAgXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRVc2VyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5GkICoqVXNlciBJZGVudGl0eTogQW5vbnltb3VzKipcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn5SSICoqU3RhdHVzOioqIEFub255bW91cyBtb2RlXFxuYCArXG4gICAgICAgICAgICBg8J+TnSAqKkF0dHJpYnV0aW9uOioqIFBlcnNvbmFzIHdpbGwgdXNlIGFub255bW91cyBJRHNcXG5cXG5gICtcbiAgICAgICAgICAgIGAqKlRvIHNldCB5b3VyIGlkZW50aXR5OioqXFxuYCArXG4gICAgICAgICAgICBg4oCiIFVzZTogXFxgc2V0X3VzZXJfaWRlbnRpdHkgXCJ5b3VyLXVzZXJuYW1lXCJcXGBcXG5gICtcbiAgICAgICAgICAgIGDigKIgT3Igc2V0IGVudmlyb25tZW50IHZhcmlhYmxlOiBcXGBET0xMSE9VU0VfVVNFUj15b3VyLXVzZXJuYW1lXFxgYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+RpCAqKlVzZXIgSWRlbnRpdHk6ICR7dGhpcy5jdXJyZW50VXNlcn0qKlxcblxcbmAgK1xuICAgICAgICAgIGDinIUgKipTdGF0dXM6KiogQXV0aGVudGljYXRlZFxcbmAgK1xuICAgICAgICAgIGDwn5GkICoqVXNlcm5hbWU6KiogJHt0aGlzLmN1cnJlbnRVc2VyfVxcbmAgK1xuICAgICAgICAgIGAke2VtYWlsID8gYPCfk6cgKipFbWFpbDoqKiAke2VtYWlsfVxcbmAgOiAnJ31gICtcbiAgICAgICAgICBg8J+TnSAqKkF0dHJpYnV0aW9uOioqIE5ldyBwZXJzb25hcyB3aWxsIGJlIGNyZWRpdGVkIHRvIFwiJHt0aGlzLmN1cnJlbnRVc2VyfVwiXFxuXFxuYCArXG4gICAgICAgICAgYCoqRW52aXJvbm1lbnQgVmFyaWFibGVzOioqXFxuYCArXG4gICAgICAgICAgYOKAoiBcXGBET0xMSE9VU0VfVVNFUj0ke3RoaXMuY3VycmVudFVzZXJ9XFxgXFxuYCArXG4gICAgICAgICAgYCR7ZW1haWwgPyBg4oCiIFxcYERPTExIT1VTRV9FTUFJTD0ke2VtYWlsfVxcYFxcbmAgOiAnJ31gICtcbiAgICAgICAgICBgXFxuKipNYW5hZ2VtZW50OioqXFxuYCArXG4gICAgICAgICAgYOKAoiBVc2UgXFxgY2xlYXJfdXNlcl9pZGVudGl0eVxcYCB0byByZXR1cm4gdG8gYW5vbnltb3VzIG1vZGVcXG5gICtcbiAgICAgICAgICBg4oCiIFVzZSBcXGBzZXRfdXNlcl9pZGVudGl0eSBcIm5ldy11c2VybmFtZVwiXFxgIHRvIGNoYW5nZSB1c2VybmFtZWAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBjbGVhclVzZXJJZGVudGl0eSgpIHtcbiAgICBjb25zdCB3YXNTZXQgPSB0aGlzLmN1cnJlbnRVc2VyICE9PSBudWxsO1xuICAgIGNvbnN0IHByZXZpb3VzVXNlciA9IHRoaXMuY3VycmVudFVzZXI7XG4gICAgdGhpcy5jdXJyZW50VXNlciA9IG51bGw7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogd2FzU2V0IFxuICAgICAgICAgICAgPyBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipVc2VyIElkZW50aXR5IENsZWFyZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBg8J+RpCAqKlByZXZpb3VzOioqICR7cHJldmlvdXNVc2VyfVxcbmAgK1xuICAgICAgICAgICAgICBg8J+UkiAqKkN1cnJlbnQ6KiogQW5vbnltb3VzIG1vZGVcXG5cXG5gICtcbiAgICAgICAgICAgICAgYPCfk50gKipFZmZlY3Q6KiogTmV3IHBlcnNvbmFzIHdpbGwgdXNlIGFub255bW91cyBJRHNcXG5cXG5gICtcbiAgICAgICAgICAgICAgYOKaoO+4jyAqKk5vdGU6KiogVGhpcyBvbmx5IGFmZmVjdHMgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cXG5gICtcbiAgICAgICAgICAgICAgYFRvIHBlcnNpc3QgdGhpcyBjaGFuZ2UsIHVuc2V0IHRoZSBcXGBET0xMSE9VU0VfVVNFUlxcYCBlbnZpcm9ubWVudCB2YXJpYWJsZS5gXG4gICAgICAgICAgICA6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKEue+4jyAqKkFscmVhZHkgaW4gQW5vbnltb3VzIE1vZGUqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBg8J+RpCBObyB1c2VyIGlkZW50aXR5IHdhcyBzZXQuXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBVc2UgXFxgc2V0X3VzZXJfaWRlbnRpdHkgXCJ1c2VybmFtZVwiXFxgIHRvIHNldCB5b3VyIGlkZW50aXR5LmAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VXNlciB8fCBnZW5lcmF0ZUFub255bW91c0lkKCk7XG4gIH1cblxuICAvLyBHaXRIdWIgYXV0aGVudGljYXRpb24gbWFuYWdlbWVudFxuICBhc3luYyBzZXR1cEdpdEh1YkF1dGgoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIGN1cnJlbnQgYXV0aCBzdGF0dXMgZmlyc3RcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGF0dXMgPSBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmdldEF1dGhTdGF0dXMoKTtcbiAgICAgIFxuICAgICAgaWYgKGN1cnJlbnRTdGF0dXMuaXNBdXRoZW50aWNhdGVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqQWxyZWFkeSBDb25uZWN0ZWQgdG8gR2l0SHViKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDwn5GkICoqVXNlcm5hbWU6KiogJHtjdXJyZW50U3RhdHVzLnVzZXJuYW1lfVxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCflJEgKipQZXJtaXNzaW9uczoqKiAke2N1cnJlbnRTdGF0dXMuc2NvcGVzPy5qb2luKCcsICcpIHx8ICdiYXNpYyBhY2Nlc3MnfVxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFlvdSdyZSBhbGwgc2V0ISBZb3UgY2FuOlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBCcm93c2UgdGhlIGNvbGxlY3Rpb25cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgSW5zdGFsbCBjb250ZW50XFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIFN1Ym1pdCB5b3VyIGNyZWF0aW9uc1xcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFRvIGRpc2Nvbm5lY3QsIHNheSBcImRpc2Nvbm5lY3QgZnJvbSBHaXRIdWJcImBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBJbml0aWF0ZSBkZXZpY2UgZmxvd1xuICAgICAgbGV0IGRldmljZVJlc3BvbnNlOiBEZXZpY2VDb2RlUmVzcG9uc2U7XG4gICAgICB0cnkge1xuICAgICAgICBkZXZpY2VSZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIuaW5pdGlhdGVEZXZpY2VGbG93KCk7XG4gICAgICB9IGNhdGNoIChkZXZpY2VGbG93RXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdPQVVUSF9JTkRFWF8yNjgxOiBGYWlsZWQgdG8gaW5pdGlhdGUgZGV2aWNlIGZsb3cnLCB7IGVycm9yOiBkZXZpY2VGbG93RXJyb3IgfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgT0FVVEhfSU5ERVhfMjY4MTogRGV2aWNlIGZsb3cgaW5pdGlhdGlvbiBmYWlsZWQgLSAke2RldmljZUZsb3dFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZGV2aWNlRmxvd0Vycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogVXNlIGhlbHBlciBwcm9jZXNzIGFwcHJvYWNoIGZyb20gUFIgIzUxOFxuICAgICAgLy8gTUNQIHNlcnZlcnMgYXJlIHN0YXRlbGVzcyBhbmQgdGVybWluYXRlIGFmdGVyIHJldHVybmluZyByZXNwb25zZVxuICAgICAgLy8gVGhlIGhlbHBlciBwcm9jZXNzIHN1cnZpdmVzIE1DUCB0ZXJtaW5hdGlvbiBhbmQgY2FuIGNvbXBsZXRlIE9BdXRoIHBvbGxpbmdcbiAgICAgIFxuICAgICAgLy8gR2V0IHRoZSBPQXV0aCBjbGllbnQgSUQgLSB1c2UgdGhlIHNhbWUgbWV0aG9kIHRoYXQgaGFzIHRoZSBkZWZhdWx0IGZhbGxiYWNrXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgd2UgZ2V0IHRoZSBkZWZhdWx0IGNsaWVudCBJRCBpZiBubyBlbnYvY29uZmlnIGlzIHNldFxuICAgICAgbG9nZ2VyLmRlYnVnKCdPQVVUSF9TVEVQXzQ6IEdldHRpbmcgY2xpZW50IElEIGZvciBoZWxwZXIgcHJvY2VzcycpO1xuICAgICAgY29uc3QgY2xpZW50SWQgPSBhd2FpdCBHaXRIdWJBdXRoTWFuYWdlci5nZXRDbGllbnRJZCgpO1xuICAgICAgbG9nZ2VyLmRlYnVnKCdPQVVUSF9TVEVQXzU6IENsaWVudCBJRCBvYnRhaW5lZCcsIHsgY2xpZW50SWQ6IGNsaWVudElkPy5zdWJzdHJpbmcoMCwgOCkgKyAnLi4uJyB9KTtcbiAgICAgIFxuICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIG5vdyBzaW5jZSBnZXRDbGllbnRJZCgpIGFsd2F5cyByZXR1cm5zIGEgdmFsdWVcbiAgICAgIC8vIChlbnYsIGNvbmZpZywgb3IgZGVmYXVsdCksIGJ1dCBrZWVwaW5nIGZvciBzYWZldHlcbiAgICAgIGlmICghY2xpZW50SWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipHaXRIdWIgT0F1dGggQ29uZmlndXJhdGlvbiBFcnJvcioqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgVW5hYmxlIHRvIG9idGFpbiBHaXRIdWIgT0F1dGggY2xpZW50IElELlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFRoaXMgaXMgdW5leHBlY3RlZCAtIHBsZWFzZSByZXBvcnQgdGhpcyBpc3N1ZS5cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAqKldvcmthcm91bmQ6KipcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgU2V0IGVudmlyb25tZW50IHZhcmlhYmxlOiBET0xMSE9VU0VfR0lUSFVCX0NMSUVOVF9JRFxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBPciB1c2UgR2l0SHViIENMSTogZ2ggYXV0aCBsb2dpbiAtLXdlYmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTcGF3biB0aGUgT0F1dGggaGVscGVyIHByb2Nlc3NcbiAgICAgIC8vIFRoZSBoZWxwZXIgcnVucyBpbmRlcGVuZGVudGx5IGFuZCBzdXJ2aXZlcyBNQ1Agc2VydmVyIHRlcm1pbmF0aW9uXG4gICAgICBsZXQgaGVscGVyUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBHZXQgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgY29tcGlsZWQgSlMgZmlsZSBpc1xuICAgICAgICBjb25zdCBfX2ZpbGVuYW1lID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpO1xuICAgICAgICBjb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoX19maWxlbmFtZSk7XG4gICAgICAgIFxuICAgICAgICAvLyBGaW5kIHRoZSBvYXV0aC1oZWxwZXIubWpzIGZpbGVcbiAgICAgICAgLy8gSXQgc2hvdWxkIGJlIGluIHRoZSByb290IGRpcmVjdG9yeSAob25lIGxldmVsIHVwIGZyb20gZGlzdC8pXG4gICAgICAgIGNvbnN0IHBvc3NpYmxlUGF0aHMgPSBbXG4gICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ29hdXRoLWhlbHBlci5tanMnKSwgIC8vIEZyb20gZGlzdC9pbmRleC5qc1xuICAgICAgICAgIHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnb2F1dGgtaGVscGVyLm1qcycpLCAgICAvLyBGcm9tIENXRFxuICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICdvYXV0aC1oZWxwZXIubWpzJyksICAgICAgICAvLyBTYW1lIGRpcmVjdG9yeVxuICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICdvYXV0aC1oZWxwZXIubWpzJykgLy8gTlBNIHBhY2thZ2Ugcm9vdFxuICAgICAgICBdO1xuICAgICAgICBcbiAgICAgICAgaGVscGVyUGF0aCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgdGVzdFBhdGggb2YgcG9zc2libGVQYXRocykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBmcy5hY2Nlc3ModGVzdFBhdGgpO1xuICAgICAgICAgICAgaGVscGVyUGF0aCA9IHRlc3RQYXRoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBUcnkgbmV4dCBwYXRoXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoIWhlbHBlclBhdGgpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ09BVVRIX0lOREVYXzI3MzQ6IG9hdXRoLWhlbHBlci5tanMgbm90IGZvdW5kJywgeyBcbiAgICAgICAgICAgIHNlYXJjaGVkUGF0aHM6IHBvc3NpYmxlUGF0aHMsXG4gICAgICAgICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICAgICAgICBkaXJuYW1lOiBfX2Rpcm5hbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9BVVRIX0hFTFBFUl9OT1RfRk9VTkQ6IG9hdXRoLWhlbHBlci5tanMgbm90IGZvdW5kIGF0IGxpbmUgMjczNC4gU2VhcmNoZWQ6ICR7cG9zc2libGVQYXRocy5qb2luKCcsICcpfWApO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBsb2dnZXIuZGVidWcoJ09BVVRIX1NURVBfNjogU3Bhd25pbmcgaGVscGVyIHByb2Nlc3MnLCB7IFxuICAgICAgICAgIGhlbHBlclBhdGgsXG4gICAgICAgICAgY2xpZW50SWQ6IGNsaWVudElkPy5zdWJzdHJpbmcoMCwgOCkgKyAnLi4uJyxcbiAgICAgICAgICBkZXZpY2VDb2RlOiBkZXZpY2VSZXNwb25zZS5kZXZpY2VfY29kZS5zdWJzdHJpbmcoMCwgOCkgKyAnLi4uJ1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIFNwYXduIHRoZSBoZWxwZXIgYXMgYSBkZXRhY2hlZCBwcm9jZXNzXG4gICAgICAgIGNvbnN0IGhlbHBlciA9IHNwYXduKCdub2RlJywgW1xuICAgICAgICAgIGhlbHBlclBhdGgsXG4gICAgICAgICAgZGV2aWNlUmVzcG9uc2UuZGV2aWNlX2NvZGUsXG4gICAgICAgICAgKGRldmljZVJlc3BvbnNlLmludGVydmFsIHx8IDUpLnRvU3RyaW5nKCksXG4gICAgICAgICAgZGV2aWNlUmVzcG9uc2UuZXhwaXJlc19pbi50b1N0cmluZygpLFxuICAgICAgICAgIGNsaWVudElkXG4gICAgICAgIF0sIHtcbiAgICAgICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgICAgICBzdGRpbzogJ2lnbm9yZScsIC8vIENvbXBsZXRlbHkgZGV0YWNoIEkvT1xuICAgICAgICAgIHdpbmRvd3NIaWRlOiB0cnVlIC8vIEhpZGUgY29uc29sZSBvbiBXaW5kb3dzXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gQWxsb3cgdGhlIHBhcmVudCBwcm9jZXNzIHRvIGV4aXQgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgaGVscGVyXG4gICAgICAgIGhlbHBlci51bnJlZigpO1xuICAgICAgICBcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdPQVVUSF9TVEVQXzc6IEhlbHBlciBwcm9jZXNzIHNwYXduZWQgc3VjY2Vzc2Z1bGx5JywgeyBwaWQ6IGhlbHBlci5waWQgfSk7XG4gICAgICAgIFxuICAgICAgICBsb2dnZXIuaW5mbygnT0F1dGggaGVscGVyIHByb2Nlc3Mgc3Bhd25lZCcsIHtcbiAgICAgICAgICBwaWQ6IGhlbHBlci5waWQsXG4gICAgICAgICAgZXhwaXJlc0luOiBkZXZpY2VSZXNwb25zZS5leHBpcmVzX2luLFxuICAgICAgICAgIHVzZXJDb2RlOiBkZXZpY2VSZXNwb25zZS51c2VyX2NvZGVcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBXcml0ZSBzdGF0ZSBmaWxlIGZvciBtb25pdG9yaW5nXG4gICAgICAgIGNvbnN0IHN0YXRlRmlsZSA9IHBhdGguam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJy5hdXRoJywgJ29hdXRoLWhlbHBlci1zdGF0ZS5qc29uJyk7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gcGF0aC5kaXJuYW1lKHN0YXRlRmlsZSk7XG4gICAgICAgIGF3YWl0IGZzLm1rZGlyKHN0YXRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgICAgIHBpZDogaGVscGVyLnBpZCxcbiAgICAgICAgICBkZXZpY2VDb2RlOiBkZXZpY2VSZXNwb25zZS5kZXZpY2VfY29kZSxcbiAgICAgICAgICB1c2VyQ29kZTogZGV2aWNlUmVzcG9uc2UudXNlcl9jb2RlLFxuICAgICAgICAgIHN0YXJ0VGltZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIGV4cGlyZXNBdDogbmV3IERhdGUoRGF0ZS5ub3coKSArIGRldmljZVJlc3BvbnNlLmV4cGlyZXNfaW4gKiAxMDAwKS50b0lTT1N0cmluZygpXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBhd2FpdCBmcy53cml0ZUZpbGUoc3RhdGVGaWxlLCBKU09OLnN0cmluZ2lmeShzdGF0ZSwgbnVsbCwgMikpO1xuICAgICAgICBcbiAgICAgIH0gY2F0Y2ggKHNwYXduRXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdPQVVUSF9JTkRFWF8yNzc0OiBGYWlsZWQgdG8gc3Bhd24gT0F1dGggaGVscGVyIHByb2Nlc3MnLCB7IFxuICAgICAgICAgIGVycm9yOiBzcGF3bkVycm9yLFxuICAgICAgICAgIGhlbHBlclBhdGgsXG4gICAgICAgICAgY2xpZW50SWQ6IGNsaWVudElkPy5zdWJzdHJpbmcoMCwgOCkgKyAnLi4uJyxcbiAgICAgICAgICBlcnJvckNvZGU6IChzcGF3bkVycm9yIGFzIGFueSk/LmNvZGUsXG4gICAgICAgICAgc3lzY2FsbDogKHNwYXduRXJyb3IgYXMgYW55KT8uc3lzY2FsbFxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIFByb3ZpZGUgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZSBiYXNlZCBvbiBlcnJvciB0eXBlXG4gICAgICAgIGxldCBlcnJvckRldGFpbCA9ICcnO1xuICAgICAgICBpZiAoc3Bhd25FcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgaWYgKHNwYXduRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnRU5PRU5UJykpIHtcbiAgICAgICAgICAgIGVycm9yRGV0YWlsID0gYE9BVVRIX0hFTFBFUl9TUEFXTl9FTk9FTlQ6IE5vZGUuanMgZXhlY3V0YWJsZSBub3QgZm91bmQgb3IgaGVscGVyIHNjcmlwdCBtaXNzaW5nIGF0ICR7aGVscGVyUGF0aH1gO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3Bhd25FcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdFQUNDRVMnKSkge1xuICAgICAgICAgICAgZXJyb3JEZXRhaWwgPSBgT0FVVEhfSEVMUEVSX1NQQVdOX0VBQ0NFUzogUGVybWlzc2lvbiBkZW5pZWQgd2hlbiB0cnlpbmcgdG8gZXhlY3V0ZSAke2hlbHBlclBhdGh9YDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNwYXduRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnRTJCSUcnKSkge1xuICAgICAgICAgICAgZXJyb3JEZXRhaWwgPSBgT0FVVEhfSEVMUEVSX1NQQVdOX0UyQklHOiBBcmd1bWVudCBsaXN0IHRvbyBsb25nIGZvciBoZWxwZXIgcHJvY2Vzc2A7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9yRGV0YWlsID0gYE9BVVRIX0hFTFBFUl9TUEFXTl9GQUlMRUQ6IENvdWxkIG5vdCBzdGFydCBiYWNrZ3JvdW5kIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MgYXQgbGluZSAyNzc0IC0gJHtzcGF3bkVycm9yLm1lc3NhZ2V9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3JEZXRhaWwgPSBgT0FVVEhfSEVMUEVSX1NQQVdOX1VOS05PV046IFVua25vd24gc3Bhd24gZXJyb3IgYXQgbGluZSAyNzc0YDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIGluZm9ybWluZyB1c2VyIGFib3V0IHRoZSBpc3N1ZVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKaoO+4jyAqKk9BdXRoIEhlbHBlciBMYXVuY2ggRmFpbGVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAke2Vycm9yRGV0YWlsfVxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCoqQWx0ZXJuYXRpdmUgT3B0aW9uczoqKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDEuIFRyeSBhZ2FpbjogUnVuIHNldHVwX2dpdGh1Yl9hdXRoIGFnYWluXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMi4gVXNlIEdpdEh1YiBDTEk6IGdoIGF1dGggbG9naW4gLS13ZWJcXG5gICtcbiAgICAgICAgICAgICAgICAgIGAzLiBTZXQgdG9rZW4gbWFudWFsbHk6IGV4cG9ydCBHSVRIVUJfVE9LRU49eW91cl90b2tlbmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBSZXR1cm4gaW5zdHJ1Y3Rpb25zIHRvIHVzZXJcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogdGhpcy5naXRodWJBdXRoTWFuYWdlci5mb3JtYXRBdXRoSW5zdHJ1Y3Rpb25zKGRldmljZVJlc3BvbnNlKSArXG4gICAgICAgICAgICAgICAgJ1xcblxcbvCfk50gKipOb3RlKio6IEF1dGhlbnRpY2F0aW9uIHdpbGwgY29tcGxldGUgYXV0b21hdGljYWxseSBvbmNlIHlvdSBhdXRob3JpemUuICcgK1xuICAgICAgICAgICAgICAgICdZb3VyIHRva2VuIHdpbGwgYmUgc3RvcmVkIHNlY3VyZWx5IGZvciBmdXR1cmUgdXNlISdcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignT0FVVEhfSU5ERVhfMjgwNjogTWFpbiBjYXRjaCBibG9jayAtIGF1dGhlbnRpY2F0aW9uIHNldHVwIGZhaWxlZCcsIHsgXG4gICAgICAgIGVycm9yLFxuICAgICAgICBlcnJvclR5cGU6IGVycm9yPy5jb25zdHJ1Y3Rvcj8ubmFtZSxcbiAgICAgICAgZXJyb3JNZXNzYWdlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duJ1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIElmIGVycm9yIGFscmVhZHkgaGFzIG91ciBlcnJvciBjb2RlLCBwYXNzIGl0IHRocm91Z2hcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuICAgICAgY29uc3QgaGFzRXJyb3JDb2RlID0gZXJyb3JNZXNzYWdlLmluY2x1ZGVzKCdPQVVUSF8nKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipBdXRoZW50aWNhdGlvbiBTZXR1cCBGYWlsZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGAke2hhc0Vycm9yQ29kZSA/IGVycm9yTWVzc2FnZSA6IGBPQVVUSF9JTkRFWF8yODA2OiBVbmFibGUgdG8gc3RhcnQgR2l0SHViIGF1dGhlbnRpY2F0aW9uIC0gJHtlcnJvck1lc3NhZ2V9YH1cXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgJHshZXJyb3JNZXNzYWdlLmluY2x1ZGVzKCdPQVVUSF9ORVRXT1JLJykgPyAnUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiBhbmQgdHJ5IGFnYWluLicgOiAnJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgY2hlY2tHaXRIdWJBdXRoKCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBGaXJzdCBjaGVjayBmb3IgT0F1dGggaGVscGVyIHByb2Nlc3MgaGVhbHRoXG4gICAgICBjb25zdCBoZWxwZXJIZWFsdGggPSBhd2FpdCB0aGlzLmNoZWNrT0F1dGhIZWxwZXJIZWFsdGgoKTtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIuZ2V0QXV0aFN0YXR1cygpO1xuICAgICAgXG4gICAgICBpZiAoc3RhdHVzLmlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICAvLyBDbGVhbiB1cCBoZWxwZXIgc3RhdGUgZmlsZSBpZiBhdXRoIGlzIHN1Y2Nlc3NmdWxcbiAgICAgICAgaWYgKGhlbHBlckhlYWx0aC5leGlzdHMpIHtcbiAgICAgICAgICBjb25zdCBzdGF0ZUZpbGUgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICcuYXV0aCcsICdvYXV0aC1oZWxwZXItc3RhdGUuanNvbicpO1xuICAgICAgICAgIGF3YWl0IGZzLnVubGluayhzdGF0ZUZpbGUpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipHaXRIdWIgQ29ubmVjdGVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDwn5GkICoqVXNlcm5hbWU6KiogJHtzdGF0dXMudXNlcm5hbWV9XFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+UkSAqKlBlcm1pc3Npb25zOioqICR7c3RhdHVzLnNjb3Blcz8uam9pbignLCAnKSB8fCAnYmFzaWMgYWNjZXNzJ31cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAqKkF2YWlsYWJsZSBBY3Rpb25zOioqXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4pyFIEJyb3dzZSBjb2xsZWN0aW9uXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4pyFIEluc3RhbGwgY29udGVudFxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKchSBTdWJtaXQgY29udGVudFxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYEV2ZXJ5dGhpbmcgaXMgd29ya2luZyBwcm9wZXJseSFgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoaGVscGVySGVhbHRoLmlzQWN0aXZlKSB7XG4gICAgICAgIC8vIE9BdXRoIGhlbHBlciBpcyBhY3RpdmVseSBwb2xsaW5nXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94o+zICoqR2l0SHViIEF1dGhlbnRpY2F0aW9uIEluIFByb2dyZXNzKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDwn5SRICoqVXNlciBDb2RlOioqICR7aGVscGVySGVhbHRoLnVzZXJDb2RlfVxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKPse+4jyAqKlRpbWUgUmVtYWluaW5nOioqICR7TWF0aC5mbG9vcihoZWxwZXJIZWFsdGgudGltZVJlbWFpbmluZyAvIDYwKX1tICR7aGVscGVySGVhbHRoLnRpbWVSZW1haW5pbmcgJSA2MH1zXFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+UhCAqKlByb2Nlc3MgU3RhdHVzOioqICR7aGVscGVySGVhbHRoLnByb2Nlc3NBbGl2ZSA/ICfinIUgUnVubmluZycgOiAn4pqg77iPIE1heSBoYXZlIHN0b3BwZWQnfVxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCfk4EgKipMb2cgQXZhaWxhYmxlOioqICR7aGVscGVySGVhbHRoLmhhc0xvZyA/ICdZZXMnIDogJ05vJ31cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAqKldhaXRpbmcgZm9yIHlvdSB0bzoqKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDEuIEdvIHRvOiBodHRwczovL2dpdGh1Yi5jb20vbG9naW4vZGV2aWNlXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMi4gRW50ZXIgY29kZTogKioke2hlbHBlckhlYWx0aC51c2VyQ29kZX0qKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDMuIEF1dGhvcml6ZSB0aGUgYXBwbGljYXRpb25cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBUaGUgYXV0aGVudGljYXRpb24gd2lsbCBjb21wbGV0ZSBhdXRvbWF0aWNhbGx5IG9uY2UgeW91IGF1dGhvcml6ZS5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBSdW4gdGhpcyBjb21tYW5kIGFnYWluIHRvIGNoZWNrIHN0YXR1cy5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoaGVscGVySGVhbHRoLmV4aXN0cyAmJiBoZWxwZXJIZWFsdGguZXhwaXJlZCkge1xuICAgICAgICAvLyBIZWxwZXIgc3RhdGUgZXhpc3RzIGJ1dCBleHBpcmVkXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94o+x77iPICoqQXV0aGVudGljYXRpb24gRXhwaXJlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgVGhlIEdpdEh1YiBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGhhcyBleHBpcmVkLlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFVzZXIgY29kZTogJHtoZWxwZXJIZWFsdGgudXNlckNvZGV9IChleHBpcmVkKVxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCoqVG8gdHJ5IGFnYWluOioqXFxuYCArXG4gICAgICAgICAgICAgICAgICBgUnVuOiBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCB0byBnZXQgYSBuZXcgY29kZVxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCR7aGVscGVySGVhbHRoLmVycm9yTG9nID8gYCoqRXJyb3IgTG9nOioqXFxuXFxgXFxgXFxgXFxuJHtoZWxwZXJIZWFsdGguZXJyb3JMb2d9XFxuXFxgXFxgXFxgXFxuYCA6ICcnfWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChzdGF0dXMuaGFzVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3imqDvuI8gKipHaXRIdWIgVG9rZW4gSW52YWxpZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgQSBHaXRIdWIgdG9rZW4gd2FzIGZvdW5kIGJ1dCBpdCBhcHBlYXJzIHRvIGJlIGludmFsaWQgb3IgZXhwaXJlZC5cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAqKlRvIGZpeCB0aGlzOioqXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMS4gU2F5IFwic2V0IHVwIEdpdEh1YlwiIHRvIGF1dGhlbnRpY2F0ZSBhZ2FpblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDIuIE9yIGNoZWNrIHlvdXIgR0lUSFVCX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgTm90ZTogQnJvd3NlIGFuZCBpbnN0YWxsIHN0aWxsIHdvcmsgd2l0aG91dCBhdXRoZW50aWNhdGlvbiFgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+UkiAqKk5vdCBDb25uZWN0ZWQgdG8gR2l0SHViKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBZb3UncmUgbm90IGN1cnJlbnRseSBhdXRoZW50aWNhdGVkIHdpdGggR2l0SHViLlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCoqV2hhdCB3b3JrcyB3aXRob3V0IGF1dGg6KipcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDinIUgQnJvd3NlIHRoZSBwdWJsaWMgY29sbGVjdGlvblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKchSBJbnN0YWxsIGNvbW11bml0eSBjb250ZW50XFxuYCArXG4gICAgICAgICAgICAgICAgICBg4p2MIFN1Ym1pdCB5b3VyIG93biBjb250ZW50IChyZXF1aXJlcyBhdXRoKVxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFRvIGNvbm5lY3QsIGp1c3Qgc2F5IFwic2V0IHVwIEdpdEh1YlwiIG9yIFwiY29ubmVjdCB0byBHaXRIdWJcImBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjaGVjayBHaXRIdWIgYXV0aCcsIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKlVuYWJsZSB0byBDaGVjayBBdXRoZW50aWNhdGlvbioqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICAvLyBQdWJsaWMgbWV0aG9kIGZvciBvYXV0aF9oZWxwZXJfc3RhdHVzIHRvb2xcbiAgYXN5bmMgZ2V0T0F1dGhIZWxwZXJTdGF0dXModmVyYm9zZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGhlYWx0aCA9IGF3YWl0IHRoaXMuY2hlY2tPQXV0aEhlbHBlckhlYWx0aCgpO1xuICAgICAgY29uc3Qgc3RhdGVGaWxlID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnLmF1dGgnLCAnb2F1dGgtaGVscGVyLXN0YXRlLmpzb24nKTtcbiAgICAgIGNvbnN0IGxvZ0ZpbGUgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdvYXV0aC1oZWxwZXIubG9nJyk7XG4gICAgICBjb25zdCBwaWRGaWxlID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnLmF1dGgnLCAnb2F1dGgtaGVscGVyLnBpZCcpO1xuICAgICAgXG4gICAgICBsZXQgc3RhdHVzVGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfk4ogKipPQXV0aCBIZWxwZXIgUHJvY2VzcyBEaWFnbm9zdGljcyoqXFxuXFxuYDtcbiAgICAgIFxuICAgICAgLy8gQmFzaWMgc3RhdHVzXG4gICAgICBpZiAoIWhlYWx0aC5leGlzdHMpIHtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipTdGF0dXM6KiogTm8gT0F1dGggcHJvY2VzcyBkZXRlY3RlZFxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqU3RhdGUgRmlsZToqKiBOb3QgZm91bmRcXG5cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGBObyBhY3RpdmUgYXV0aGVudGljYXRpb24gcHJvY2Vzcy4gUnVuIFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIHRvIHN0YXJ0IG9uZS5cXG5gO1xuICAgICAgfSBlbHNlIGlmIChoZWFsdGguaXNBY3RpdmUpIHtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipTdGF0dXM6Kiog8J+foiBBQ1RJVkUgLSBBdXRoZW50aWNhdGlvbiBpbiBwcm9ncmVzc1xcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqVXNlciBDb2RlOioqICR7aGVhbHRoLnVzZXJDb2RlfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqUHJvY2VzcyBJRDoqKiAke2hlYWx0aC5waWR9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipQcm9jZXNzIEFsaXZlOioqICR7aGVhbHRoLnByb2Nlc3NBbGl2ZSA/ICfinIUgWWVzJyA6ICfinYwgTm8gKG1heSBoYXZlIGNyYXNoZWQpJ31cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlN0YXJ0ZWQ6KiogJHtoZWFsdGguc3RhcnRUaW1lPy50b0xvY2FsZVN0cmluZygpfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqRXhwaXJlczoqKiAke2hlYWx0aC5leHBpcmVzQXQ/LnRvTG9jYWxlU3RyaW5nKCl9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipUaW1lIFJlbWFpbmluZzoqKiAke01hdGguZmxvb3IoaGVhbHRoLnRpbWVSZW1haW5pbmcgLyA2MCl9bSAke2hlYWx0aC50aW1lUmVtYWluaW5nICUgNjB9c1xcblxcbmA7XG4gICAgICAgIFxuICAgICAgICBpZiAoIWhlYWx0aC5wcm9jZXNzQWxpdmUpIHtcbiAgICAgICAgICBzdGF0dXNUZXh0ICs9IGDimqDvuI8gKipXQVJOSU5HOioqIFByb2Nlc3MgYXBwZWFycyB0byBoYXZlIHN0b3BwZWQhXFxuYDtcbiAgICAgICAgICBzdGF0dXNUZXh0ICs9IGBUaGUgaGVscGVyIHByb2Nlc3MgKFBJRCAke2hlYWx0aC5waWR9KSBpcyBub3QgcmVzcG9uZGluZy5cXG5gO1xuICAgICAgICAgIHN0YXR1c1RleHQgKz0gYFlvdSBtYXkgbmVlZCB0byBydW4gXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgYWdhaW4uXFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChoZWFsdGguZXhwaXJlZCkge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlN0YXR1czoqKiDwn5S0IEVYUElSRURcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlVzZXIgQ29kZToqKiAke2hlYWx0aC51c2VyQ29kZX0gKGV4cGlyZWQpXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipQcm9jZXNzIElEOioqICR7aGVhbHRoLnBpZH1cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlN0YXJ0ZWQ6KiogJHtoZWFsdGguc3RhcnRUaW1lPy50b0xvY2FsZVN0cmluZygpfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqRXhwaXJlZDoqKiAke2hlYWx0aC5leHBpcmVzQXQ/LnRvTG9jYWxlU3RyaW5nKCl9XFxuXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgVGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgaGFzIGV4cGlyZWQuIFJ1biBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCB0byB0cnkgYWdhaW4uXFxuXFxuYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRmlsZSBsb2NhdGlvbnNcbiAgICAgIHN0YXR1c1RleHQgKz0gYCoq8J+TgSBGaWxlIExvY2F0aW9uczoqKlxcbmA7XG4gICAgICBzdGF0dXNUZXh0ICs9IGDigKIgU3RhdGU6ICR7c3RhdGVGaWxlfVxcbmA7XG4gICAgICBzdGF0dXNUZXh0ICs9IGDigKIgTG9nOiAke2xvZ0ZpbGV9ICR7aGVhbHRoLmhhc0xvZyA/ICcoZXhpc3RzKScgOiAnKG5vdCBmb3VuZCknfVxcbmA7XG4gICAgICBzdGF0dXNUZXh0ICs9IGDigKIgUElEOiAke3BpZEZpbGV9XFxuXFxuYDtcbiAgICAgIFxuICAgICAgLy8gRXJyb3IgbG9nIGlmIGF2YWlsYWJsZVxuICAgICAgaWYgKGhlYWx0aC5lcnJvckxvZykge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKuKaoO+4jyBSZWNlbnQgRXJyb3JzOioqXFxuXFxgXFxgXFxgXFxuJHtoZWFsdGguZXJyb3JMb2d9XFxuXFxgXFxgXFxgXFxuXFxuYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVmVyYm9zZSBsb2cgb3V0cHV0XG4gICAgICBpZiAodmVyYm9zZSAmJiBoZWFsdGguaGFzTG9nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZnVsbExvZyA9IGF3YWl0IGZzLnJlYWRGaWxlKGxvZ0ZpbGUsICd1dGYtOCcpO1xuICAgICAgICAgIGNvbnN0IGxpbmVzID0gZnVsbExvZy5zcGxpdCgnXFxuJykuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkpO1xuICAgICAgICAgIGNvbnN0IHJlY2VudExpbmVzID0gbGluZXMuc2xpY2UoLTIwKTsgLy8gTGFzdCAyMCBsaW5lc1xuICAgICAgICAgIFxuICAgICAgICAgIHN0YXR1c1RleHQgKz0gYCoq8J+TnCBSZWNlbnQgTG9nIE91dHB1dCAobGFzdCAyMCBsaW5lcyk6KipcXG5cXGBcXGBcXGBcXG5gO1xuICAgICAgICAgIHN0YXR1c1RleHQgKz0gcmVjZW50TGluZXMuam9pbignXFxuJyk7XG4gICAgICAgICAgc3RhdHVzVGV4dCArPSBgXFxuXFxgXFxgXFxgXFxuXFxuYDtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKvCfk5wgTG9nOioqIFVuYWJsZSB0byByZWFkIGxvZyBmaWxlXFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBUcm91Ymxlc2hvb3RpbmcgdGlwc1xuICAgICAgaWYgKGhlYWx0aC5leGlzdHMgJiYgIWhlYWx0aC5wcm9jZXNzQWxpdmUgJiYgIWhlYWx0aC5leHBpcmVkKSB7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoq8J+UpyBUcm91Ymxlc2hvb3RpbmcgVGlwczoqKlxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYDEuIFRoZSBoZWxwZXIgcHJvY2VzcyBtYXkgaGF2ZSBjcmFzaGVkXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgMi4gQ2hlY2sgdGhlIGxvZyBmaWxlIGZvciBlcnJvcnM6ICR7bG9nRmlsZX1cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAzLiBUcnkgcnVubmluZyBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCBhZ2FpblxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYDQuIEVuc3VyZSBET0xMSE9VU0VfR0lUSFVCX0NMSUVOVF9JRCBpcyBzZXRcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGA1LiBDaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb25cXG5gO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBNYW51YWwgY2xlYW51cCBpbnN0cnVjdGlvbnNcbiAgICAgIGlmIChoZWFsdGguZXhpc3RzICYmIChoZWFsdGguZXhwaXJlZCB8fCAhaGVhbHRoLnByb2Nlc3NBbGl2ZSkpIHtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgXFxuKirwn6e5IE1hbnVhbCBDbGVhbnVwIChpZiBuZWVkZWQpOioqXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgXFxgXFxgXFxgYmFzaFxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYHJtIFwiJHtzdGF0ZUZpbGV9XCJcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGBybSBcIiR7bG9nRmlsZX1cIlxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYHJtIFwiJHtwaWRGaWxlfVwiXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgXFxgXFxgXFxgXFxuYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBzdGF0dXNUZXh0XG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGdldCBPQXV0aCBoZWxwZXIgc3RhdHVzJywgeyBlcnJvciB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqRmFpbGVkIHRvIEdldCBPQXV0aCBIZWxwZXIgU3RhdHVzKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gY2hlY2sgT0F1dGggaGVscGVyIHByb2Nlc3MgaGVhbHRoXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tPQXV0aEhlbHBlckhlYWx0aCgpIHtcbiAgICBjb25zdCBzdGF0ZUZpbGUgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICcuYXV0aCcsICdvYXV0aC1oZWxwZXItc3RhdGUuanNvbicpO1xuICAgIGNvbnN0IGxvZ0ZpbGUgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdvYXV0aC1oZWxwZXIubG9nJyk7XG4gICAgXG4gICAgY29uc3QgaGVhbHRoID0ge1xuICAgICAgZXhpc3RzOiBmYWxzZSxcbiAgICAgIGlzQWN0aXZlOiBmYWxzZSxcbiAgICAgIGV4cGlyZWQ6IGZhbHNlLFxuICAgICAgcHJvY2Vzc0FsaXZlOiBmYWxzZSxcbiAgICAgIGhhc0xvZzogZmFsc2UsXG4gICAgICB1c2VyQ29kZTogJycsXG4gICAgICB0aW1lUmVtYWluaW5nOiAwLFxuICAgICAgcGlkOiAwLFxuICAgICAgc3RhcnRUaW1lOiBudWxsIGFzIERhdGUgfCBudWxsLFxuICAgICAgZXhwaXJlc0F0OiBudWxsIGFzIERhdGUgfCBudWxsLFxuICAgICAgZXJyb3JMb2c6ICcnXG4gICAgfTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgaWYgc3RhdGUgZmlsZSBleGlzdHNcbiAgICAgIGNvbnN0IHN0YXRlRGF0YSA9IGF3YWl0IGZzLnJlYWRGaWxlKHN0YXRlRmlsZSwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBzdGF0ZSA9IEpTT04ucGFyc2Uoc3RhdGVEYXRhKTtcbiAgICAgIGhlYWx0aC5leGlzdHMgPSB0cnVlO1xuICAgICAgaGVhbHRoLnBpZCA9IHN0YXRlLnBpZDtcbiAgICAgIGhlYWx0aC51c2VyQ29kZSA9IHN0YXRlLnVzZXJDb2RlO1xuICAgICAgaGVhbHRoLnN0YXJ0VGltZSA9IG5ldyBEYXRlKHN0YXRlLnN0YXJ0VGltZSk7XG4gICAgICBoZWFsdGguZXhwaXJlc0F0ID0gbmV3IERhdGUoc3RhdGUuZXhwaXJlc0F0KTtcbiAgICAgIFxuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIGlmIChoZWFsdGguZXhwaXJlc0F0ID4gbm93KSB7XG4gICAgICAgIGhlYWx0aC5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGhlYWx0aC50aW1lUmVtYWluaW5nID0gTWF0aC5jZWlsKChoZWFsdGguZXhwaXJlc0F0LmdldFRpbWUoKSAtIG5vdy5nZXRUaW1lKCkpIC8gMTAwMCk7XG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBpZiBwcm9jZXNzIGlzIHN0aWxsIGFsaXZlIChVbml4L0xpbnV4L01hYylcbiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gU2VuZCBzaWduYWwgMCB0byBjaGVjayBpZiBwcm9jZXNzIGV4aXN0c1xuICAgICAgICAgICAgcHJvY2Vzcy5raWxsKGhlYWx0aC5waWQsIDApO1xuICAgICAgICAgICAgaGVhbHRoLnByb2Nlc3NBbGl2ZSA9IHRydWU7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBoZWFsdGgucHJvY2Vzc0FsaXZlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE9uIFdpbmRvd3MsIHdlIGNhbid0IGVhc2lseSBjaGVjaywgc28gYXNzdW1lIGl0J3MgYWxpdmUgaWYgbm90IGV4cGlyZWRcbiAgICAgICAgICBoZWFsdGgucHJvY2Vzc0FsaXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhbHRoLmV4cGlyZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDaGVjayBmb3IgbG9nIGZpbGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2Vzcyhsb2dGaWxlKTtcbiAgICAgICAgaGVhbHRoLmhhc0xvZyA9IHRydWU7XG4gICAgICAgIFxuICAgICAgICAvLyBSZWFkIGxhc3QgZmV3IGxpbmVzIG9mIGxvZyBpZiB0aGVyZSdzIGFuIGVycm9yXG4gICAgICAgIGlmICghaGVhbHRoLnByb2Nlc3NBbGl2ZSB8fCBoZWFsdGguZXhwaXJlZCkge1xuICAgICAgICAgIGNvbnN0IGxvZ0NvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShsb2dGaWxlLCAndXRmLTgnKTtcbiAgICAgICAgICBjb25zdCBsaW5lcyA9IGxvZ0NvbnRlbnQuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgIC8vIEdldCBsYXN0IDEwIGxpbmVzIHRoYXQgY29udGFpbiBlcnJvcnMgb3IgaW1wb3J0YW50IGluZm9cbiAgICAgICAgICBjb25zdCBpbXBvcnRhbnRMaW5lcyA9IGxpbmVzLmZpbHRlcihsaW5lID0+IFxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygnZXJyb3InKSB8fCBcbiAgICAgICAgICAgIGxpbmUuaW5jbHVkZXMoJ0Vycm9yJykgfHwgXG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdmYWlsZWQnKSB8fFxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygnRmFpbGVkJykgfHxcbiAgICAgICAgICAgIGxpbmUuaW5jbHVkZXMoJ+KdjCcpIHx8XG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCfij7HvuI8nKVxuICAgICAgICAgICkuc2xpY2UoLTEwKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoaW1wb3J0YW50TGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaGVhbHRoLmVycm9yTG9nID0gaW1wb3J0YW50TGluZXMuam9pbignXFxuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gTG9nIGZpbGUgZG9lc24ndCBleGlzdFxuICAgICAgfVxuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFN0YXRlIGZpbGUgZG9lc24ndCBleGlzdCBvciBpcyBpbnZhbGlkXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdFTk9FTlQnKSkge1xuICAgICAgICAvLyBGaWxlIGRvZXNuJ3QgZXhpc3QsIHRoYXQncyBva1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdFcnJvciByZWFkaW5nIE9BdXRoIGhlbHBlciBzdGF0ZScsIHsgZXJyb3IgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBoZWFsdGg7XG4gIH1cbiAgXG4gIGFzeW5jIGNsZWFyR2l0SHViQXV0aCgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5naXRodWJBdXRoTWFuYWdlci5jbGVhckF1dGhlbnRpY2F0aW9uKCk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqR2l0SHViIERpc2Nvbm5lY3RlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYFlvdXIgR2l0SHViIGNvbm5lY3Rpb24gaGFzIGJlZW4gY2xlYXJlZC5cXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgKipXaGF0IHN0aWxsIHdvcmtzOioqXFxuYCArXG4gICAgICAgICAgICAgICAgYOKchSBCcm93c2UgdGhlIHB1YmxpYyBjb2xsZWN0aW9uXFxuYCArXG4gICAgICAgICAgICAgICAgYOKchSBJbnN0YWxsIGNvbW11bml0eSBjb250ZW50XFxuYCArXG4gICAgICAgICAgICAgICAgYOKdjCBTdWJtaXQgY29udGVudCAocmVxdWlyZXMgcmVjb25uZWN0aW9uKVxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBUbyByZWNvbm5lY3QgbGF0ZXIsIGp1c3Qgc2F5IFwiY29ubmVjdCB0byBHaXRIdWJcIlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGDimqDvuI8gKipOb3RlOioqIFRvIGZ1bGx5IHJlbW92ZSBhdXRoZW50aWNhdGlvbiwgYWxzbyB1bnNldCB0aGUgR0lUSFVCX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlLmBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGNsZWFyIEdpdEh1YiBhdXRoJywgeyBlcnJvciB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqRmFpbGVkIHRvIENsZWFyIEF1dGhlbnRpY2F0aW9uKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBPQXV0aCBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnRcbiAgYXN5bmMgY29uZmlndXJlT0F1dGgoY2xpZW50X2lkPzogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBDb25maWdNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICBhd2FpdCBjb25maWdNYW5hZ2VyLmluaXRpYWxpemUoKTtcbiAgICAgIFxuICAgICAgLy8gSWYgbm8gY2xpZW50X2lkIHByb3ZpZGVkLCBzaG93IGN1cnJlbnQgY29uZmlndXJhdGlvbiBzdGF0dXNcbiAgICAgIGlmICghY2xpZW50X2lkKSB7XG4gICAgICAgIC8vIENoZWNrIHdoYXQgT0F1dGggY2xpZW50IElEIHdpbGwgYWN0dWFsbHkgYmUgdXNlZFxuICAgICAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIGxvZ2ljIGluIEdpdEh1YkF1dGhNYW5hZ2VyLmdldENsaWVudElkKClcbiAgICAgICAgY29uc3QgY3VycmVudENsaWVudElkID0gYXdhaXQgR2l0SHViQXV0aE1hbmFnZXIuZ2V0Q2xpZW50SWQoKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChjdXJyZW50Q2xpZW50SWQpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIHVzaW5nIHRoZSBkZWZhdWx0IG9yIGEgY3VzdG9tIGNvbmZpZ1xuICAgICAgICAgIGNvbnN0IGNvbmZpZ3VyZWRDbGllbnRJZCA9IGNvbmZpZ01hbmFnZXIuZ2V0R2l0SHViQ2xpZW50SWQoKTtcbiAgICAgICAgICBjb25zdCBpc1VzaW5nRGVmYXVsdCA9ICFjb25maWd1cmVkQ2xpZW50SWQ7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gU2hvdyBmaXJzdCAxMCBjaGFyYWN0ZXJzIGZvciBzZWN1cml0eVxuICAgICAgICAgIGNvbnN0IG1hc2tlZENsaWVudElkID0gY3VycmVudENsaWVudElkLnN1YnN0cmluZygwLCAxMCkgKyAnLi4uJztcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSAqKkdpdEh1YiBPQXV0aCBDb25maWd1cmF0aW9uKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYCoqQ3VycmVudCBTdGF0dXM6KiogJHtpc1VzaW5nRGVmYXVsdCA/ICdVc2luZyBEZWZhdWx0JyA6ICdDb25maWd1cmVkJ31cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYCoqQ2xpZW50IElEOioqICR7bWFza2VkQ2xpZW50SWR9XFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAqKlNvdXJjZToqKiAke2lzVXNpbmdEZWZhdWx0ID8gJ0J1aWx0LWluIERvbGxob3VzZU1DUCBPQXV0aCBBcHAnIDogJ0N1c3RvbSBDb25maWd1cmF0aW9uJ31cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYFlvdXIgR2l0SHViIE9BdXRoIGlzIHJlYWR5IHRvIHVzZSEgWW91IGNhbiBub3c6XFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGDigKIgUnVuIHNldHVwX2dpdGh1Yl9hdXRoIHRvIGNvbm5lY3RcXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYOKAoiBTdWJtaXQgY29udGVudCB0byB0aGUgY29sbGVjdGlvblxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBg4oCiIEFjY2VzcyBhdXRoZW50aWNhdGVkIGZlYXR1cmVzXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIChpc1VzaW5nRGVmYXVsdCA/IFxuICAgICAgICAgICAgICAgICAgICAgIGAqKk5vdGU6KiogVXNpbmcgdGhlIGRlZmF1bHQgRG9sbGhvdXNlTUNQIE9BdXRoIGFwcC5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgICBgVG8gdXNlIHlvdXIgb3duIE9BdXRoIGFwcCwgcHJvdmlkZSBhIGNsaWVudF9pZCBwYXJhbWV0ZXIuXFxuXFxuYCA6IFxuICAgICAgICAgICAgICAgICAgICAgIGBUbyB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24sIHByb3ZpZGUgYSBuZXcgY2xpZW50X2lkIHBhcmFtZXRlci5cXG5cXG5gKVxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBzaW5jZSBHaXRIdWJBdXRoTWFuYWdlci5nZXRDbGllbnRJZCgpIGFsd2F5cyByZXR1cm5zIHNvbWV0aGluZ1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pqg77iPICoqR2l0SHViIE9BdXRoIE5vdCBDb25maWd1cmVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYE5vIEdpdEh1YiBPQXV0aCBjbGllbnQgSUQgaXMgY3VycmVudGx5IGNvbmZpZ3VyZWQuXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAqKlRvIHNldCB1cCBPQXV0aDoqKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgMS4gQ3JlYXRlIGEgR2l0SHViIE9BdXRoIGFwcCBhdDogaHR0cHM6Ly9naXRodWIuY29tL3NldHRpbmdzL2FwcGxpY2F0aW9ucy9uZXdcXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYDIuIFVzZSB0aGVzZSBzZXR0aW5nczpcXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYCAgIOKAoiBIb21lcGFnZSBVUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9Eb2xsaG91c2VNQ1BcXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYCAgIOKAoiBBdXRob3JpemF0aW9uIGNhbGxiYWNrIFVSTDogaHR0cDovL2xvY2FsaG9zdDozMDAwL2NhbGxiYWNrXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAzLiBDb3B5IHlvdXIgQ2xpZW50IElEIChzdGFydHMgd2l0aCBcIk92MjNsaVwiKVxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgNC4gUnVuOiBjb25maWd1cmVfb2F1dGggd2l0aCB5b3VyIGNsaWVudF9pZCBwYXJhbWV0ZXJcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYCoqTmVlZCBoZWxwPyoqIENoZWNrIHRoZSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxlZCBzZXR1cCBpbnN0cnVjdGlvbnMuYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGNsaWVudCBJRCBmb3JtYXRcbiAgICAgIGlmICghQ29uZmlnTWFuYWdlci52YWxpZGF0ZUNsaWVudElkKGNsaWVudF9pZCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipJbnZhbGlkIENsaWVudCBJRCBGb3JtYXQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYEdpdEh1YiBPQXV0aCBDbGllbnQgSURzIG11c3Q6XFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIFN0YXJ0IHdpdGggXCJPdjIzbGlcIlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBCZSBmb2xsb3dlZCBieSBhdCBsZWFzdCAxNCBhbHBoYW51bWVyaWMgY2hhcmFjdGVyc1xcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYCoqRXhhbXBsZToqKiBPdjIzbGlBQkNERUZHSElKS0xNTlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFBsZWFzZSBjaGVjayB5b3VyIGNsaWVudCBJRCBhbmQgdHJ5IGFnYWluLmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTYXZlIHRoZSBjbGllbnQgSURcbiAgICAgIGF3YWl0IGNvbmZpZ01hbmFnZXIuc2V0R2l0SHViQ2xpZW50SWQoY2xpZW50X2lkKTtcbiAgICAgIFxuICAgICAgLy8gU2hvdyBzdWNjZXNzIG1lc3NhZ2Ugd2l0aCBtYXNrZWQgSURcbiAgICAgIGNvbnN0IG1hc2tlZENsaWVudElkID0gY2xpZW50X2lkLnN1YnN0cmluZygwLCAxMCkgKyAnLi4uJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqR2l0SHViIE9BdXRoIENvbmZpZ3VyZWQgU3VjY2Vzc2Z1bGx5KipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgKipDbGllbnQgSUQ6KiogJHttYXNrZWRDbGllbnRJZH1cXG5gICtcbiAgICAgICAgICAgICAgICBgKipTYXZlZCB0bzoqKiB+Ly5kb2xsaG91c2UvY29uZmlnLmpzb25cXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgWW91ciBHaXRIdWIgT0F1dGggaXMgbm93IHJlYWR5ISBOZXh0IHN0ZXBzOlxcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgUnVuIHNldHVwX2dpdGh1Yl9hdXRoIHRvIGNvbm5lY3QgeW91ciBhY2NvdW50XFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiBTdGFydCBzdWJtaXR0aW5nIGNvbnRlbnQgdG8gdGhlIGNvbGxlY3Rpb25cXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiIEFjY2VzcyBhbGwgYXV0aGVudGljYXRlZCBmZWF0dXJlc1xcblxcbmAgK1xuICAgICAgICAgICAgICAgIGAqKk5vdGU6KiogWW91ciBjbGllbnQgSUQgaXMgc2VjdXJlbHkgc3RvcmVkIGluIHlvdXIgbG9jYWwgY29uZmlnIGZpbGUuYFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjb25maWd1cmUgT0F1dGgnLCB7IGVycm9yIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipPQXV0aCBDb25maWd1cmF0aW9uIEZhaWxlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfVxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBQbGVhc2UgY2hlY2s6XFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiBGaWxlIHBlcm1pc3Npb25zIGZvciB+Ly5kb2xsaG91c2UvY29uZmlnLmpzb25cXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiIFZhbGlkIGNsaWVudCBJRCBmb3JtYXQgKHN0YXJ0cyB3aXRoIFwiT3YyM2xpXCIpXFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiBBdmFpbGFibGUgZGlzayBzcGFjZWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hhdC1iYXNlZCBwZXJzb25hIG1hbmFnZW1lbnQgdG9vbHNcbiAgYXN5bmMgY3JlYXRlUGVyc29uYShuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIGluc3RydWN0aW9uczogc3RyaW5nLCB0cmlnZ2Vycz86IHN0cmluZykge1xuICAgIC8vIEVuc3VyZSBpbml0aWFsaXphdGlvbiBmb3IgdGVzdCBjb21wYXRpYmlsaXR5XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSByZXF1aXJlZCBmaWVsZHNcbiAgICAgIGlmICghbmFtZSB8fCAhZGVzY3JpcHRpb24gfHwgIWluc3RydWN0aW9ucykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKk1pc3NpbmcgUmVxdWlyZWQgRmllbGRzKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgUGxlYXNlIHByb3ZpZGUgYWxsIHJlcXVpcmVkIGZpZWxkczpcXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiICoqbmFtZSoqOiBEaXNwbGF5IG5hbWUgZm9yIHRoZSBwZXJzb25hXFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiAqKmRlc2NyaXB0aW9uKio6IEJyaWVmIGRlc2NyaXB0aW9uIG9mIHdoYXQgaXQgZG9lc1xcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgKippbnN0cnVjdGlvbnMqKjogVGhlIHBlcnNvbmEncyBiZWhhdmlvcmFsIGd1aWRlbGluZXNcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgKipPcHRpb25hbDoqKlxcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgKip0cmlnZ2VycyoqOiBDb21tYS1zZXBhcmF0ZWQga2V5d29yZHMgZm9yIGFjdGl2YXRpb25gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBTYW5pdGl6ZSBhbmQgdmFsaWRhdGUgaW5wdXRzXG4gICAgICBjb25zdCBzYW5pdGl6ZWROYW1lID0gc2FuaXRpemVJbnB1dChuYW1lLCAxMDApO1xuICAgICAgY29uc3Qgc2FuaXRpemVkRGVzY3JpcHRpb24gPSBzYW5pdGl6ZUlucHV0KGRlc2NyaXB0aW9uLCA1MDApO1xuICAgICAgLy8gRklYOiBQYXNzIE1BWF9DT05URU5UX0xFTkdUSCB0byBwcmV2ZW50IHRydW5jYXRpb24gYXQgZGVmYXVsdCAxMDAwIGNoYXJzXG4gICAgICBjb25zdCBzYW5pdGl6ZWRJbnN0cnVjdGlvbnMgPSBzYW5pdGl6ZUlucHV0KGluc3RydWN0aW9ucywgU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCk7XG4gICAgICBjb25zdCBzYW5pdGl6ZWRUcmlnZ2VycyA9IHRyaWdnZXJzID8gc2FuaXRpemVJbnB1dCh0cmlnZ2VycywgMjAwKSA6ICcnO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBuYW1lIGxlbmd0aCBhbmQgZm9ybWF0XG4gICAgICBpZiAoc2FuaXRpemVkTmFtZS5sZW5ndGggPCAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGVyc29uYSBuYW1lIG11c3QgYmUgYXQgbGVhc3QgMiBjaGFyYWN0ZXJzIGxvbmcnKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm8gY2F0ZWdvcnkgdmFsaWRhdGlvbiBuZWVkZWQgLSBjYXRlZ29yaWVzIGFyZSBkZXByZWNhdGVkXG5cbiAgICAgIC8vIFZhbGlkYXRlIGNvbnRlbnQgc2l6ZXNcbiAgICAgIHZhbGlkYXRlQ29udGVudFNpemUoc2FuaXRpemVkSW5zdHJ1Y3Rpb25zLCBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIKTtcbiAgICAgIHZhbGlkYXRlQ29udGVudFNpemUoc2FuaXRpemVkRGVzY3JpcHRpb24sIDIwMDApOyAvLyAyS0IgbWF4IGZvciBkZXNjcmlwdGlvblxuXG4gICAgICAvLyBWYWxpZGF0ZSBjb250ZW50IGZvciBzZWN1cml0eSB0aHJlYXRzXG4gICAgICBjb25zdCBuYW1lVmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZShzYW5pdGl6ZWROYW1lKTtcbiAgICAgIGlmICghbmFtZVZhbGlkYXRpb24uaXNWYWxpZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5hbWUgY29udGFpbnMgcHJvaGliaXRlZCBjb250ZW50OiAke25hbWVWYWxpZGF0aW9uLmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlc2NWYWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplKHNhbml0aXplZERlc2NyaXB0aW9uKTtcbiAgICAgIGlmICghZGVzY1ZhbGlkYXRpb24uaXNWYWxpZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERlc2NyaXB0aW9uIGNvbnRhaW5zIHByb2hpYml0ZWQgY29udGVudDogJHtkZXNjVmFsaWRhdGlvbi5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnNWYWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplKHNhbml0aXplZEluc3RydWN0aW9ucyk7XG4gICAgICBpZiAoIWluc3RydWN0aW9uc1ZhbGlkYXRpb24uaXNWYWxpZCAmJiBpbnN0cnVjdGlvbnNWYWxpZGF0aW9uLnNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdHJ1Y3Rpb25zIGNvbnRhaW4gc2VjdXJpdHkgdGhyZWF0czogJHtpbnN0cnVjdGlvbnNWYWxpZGF0aW9uLmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEdlbmVyYXRlIG1ldGFkYXRhXG4gICAgICBjb25zdCBhdXRob3IgPSB0aGlzLmdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24oKTtcbiAgICAgIGNvbnN0IHVuaXF1ZUlkID0gZ2VuZXJhdGVVbmlxdWVJZChzYW5pdGl6ZWROYW1lLCB0aGlzLmN1cnJlbnRVc2VyIHx8IHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IHZhbGlkYXRlRmlsZW5hbWUoYCR7c2x1Z2lmeShzYW5pdGl6ZWROYW1lKX0ubWRgKTtcbiAgICAgIC8vIHBlcnNvbmFzRGlyIGlzIGd1YXJhbnRlZWQgdG8gYmUgc2V0IGFmdGVyIGVuc3VyZUluaXRpYWxpemVkKClcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIhLCBmaWxlbmFtZSk7XG5cbiAgICAvLyBDaGVjayBpZiBmaWxlIGFscmVhZHkgZXhpc3RzXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IFBhdGhWYWxpZGF0b3IudmFsaWRhdGVQZXJzb25hUGF0aChmaWxlUGF0aCk7XG4gICAgICBhd2FpdCBmcy5hY2Nlc3MoZmlsZVBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pqg77iPICoqUGVyc29uYSBBbHJlYWR5IEV4aXN0cyoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBBIHBlcnNvbmEgZmlsZSBuYW1lZCBcIiR7ZmlsZW5hbWV9XCIgYWxyZWFkeSBleGlzdHMuXFxuYCArXG4gICAgICAgICAgICAgIGBVc2UgXFxgZWRpdF9wZXJzb25hXFxgIHRvIG1vZGlmeSBpdCwgb3IgY2hvb3NlIGEgZGlmZmVyZW50IG5hbWUuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZpbGUgZG9lc24ndCBleGlzdCwgcHJvY2VlZCB3aXRoIGNyZWF0aW9uXG4gICAgfVxuXG4gICAgICAvLyBQYXJzZSBhbmQgc2FuaXRpemUgdHJpZ2dlcnNcbiAgICAgIGNvbnN0IHRyaWdnZXJMaXN0ID0gc2FuaXRpemVkVHJpZ2dlcnMgPyBcbiAgICAgICAgc2FuaXRpemVkVHJpZ2dlcnMuc3BsaXQoJywnKS5tYXAodCA9PiBzYW5pdGl6ZUlucHV0KHQudHJpbSgpLCA1MCkpLmZpbHRlcih0ID0+IHQubGVuZ3RoID4gMCkgOiBcbiAgICAgICAgW107XG5cbiAgICAgIC8vIENyZWF0ZSBwZXJzb25hIG1ldGFkYXRhIHdpdGggc2FuaXRpemVkIHZhbHVlc1xuICAgICAgY29uc3QgbWV0YWRhdGE6IFBlcnNvbmFNZXRhZGF0YSA9IHtcbiAgICAgICAgbmFtZTogc2FuaXRpemVkTmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHNhbml0aXplZERlc2NyaXB0aW9uLFxuICAgICAgICB1bmlxdWVfaWQ6IHVuaXF1ZUlkLFxuICAgICAgICBhdXRob3IsXG4gICAgICAgIHRyaWdnZXJzOiB0cmlnZ2VyTGlzdCxcbiAgICAgICAgdmVyc2lvbjogXCIxLjBcIixcbiAgICAgICAgYWdlX3JhdGluZzogXCJhbGxcIixcbiAgICAgICAgY29udGVudF9mbGFnczogW1widXNlci1jcmVhdGVkXCJdLFxuICAgICAgICBhaV9nZW5lcmF0ZWQ6IHRydWUsXG4gICAgICAgIGdlbmVyYXRpb25fbWV0aG9kOiBcIkNsYXVkZVwiLFxuICAgICAgICBwcmljZTogXCJmcmVlXCIsXG4gICAgICAgIHJldmVudWVfc3BsaXQ6IFwiODAvMjBcIixcbiAgICAgICAgbGljZW5zZTogXCJDQy1CWS1TQS00LjBcIixcbiAgICAgICAgY3JlYXRlZF9kYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApXG4gICAgICB9O1xuXG4gICAgICAvLyBDcmVhdGUgZnVsbCBwZXJzb25hIGNvbnRlbnQgd2l0aCBzYW5pdGl6ZWQgdmFsdWVzXG4gICAgICAvLyBTRUNVUklUWTogQ29tcHJlaGVuc2l2ZSBZQU1MIGZvcm1hdHRpbmcgdG8gcHJldmVudCB0eXBlIGNvbmZ1c2lvbiBhbmQgaW5qZWN0aW9uIGF0dGFja3NcbiAgICAgIGNvbnN0IGZyb250bWF0dGVyID0gT2JqZWN0LmVudHJpZXMobWV0YWRhdGEpXG4gICAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIC8vIENSSVRJQ0FMOiBCbG9jayBwcm90b3R5cGUgcG9sbHV0aW9uIGF0dGVtcHRzXG4gICAgICAgICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycgfHwga2V5ID09PSAnY29uc3RydWN0b3InIHx8IGtleSA9PT0gJ3Byb3RvdHlwZScpIHtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBCbG9ja2VkIHBvdGVudGlhbCBwcm90b3R5cGUgcG9sbHV0aW9uIGF0dGVtcHQgd2l0aCBrZXk6ICR7a2V5fWApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBDUklUSUNBTDogQmxvY2sgbnVsbC91bmRlZmluZWQgdmFsdWVzIHRoYXQgY291bGQgY3Jhc2ggc2VydmVyXG4gICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBTa2lwcGluZyBudWxsL3VuZGVmaW5lZCB2YWx1ZSBmb3Iga2V5OiAke2tleX1gKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgLy8gRm9ybWF0IGFycmF5cyBwcm9wZXJseSBpbiBZQU1MXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiBgJHtrZXl9OiBbXWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTRUNVUklUWTogUXVvdGUgYWxsIGFycmF5IHN0cmluZyBlbGVtZW50cyB0byBwcmV2ZW50IHR5cGUgY29uZnVzaW9uXG4gICAgICAgICAgICByZXR1cm4gYCR7a2V5fTpcXG4ke3ZhbHVlLm1hcCh2ID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIEFsd2F5cyBxdW90ZSBzdHJpbmcgYXJyYXkgZWxlbWVudHMgdG8gcHJldmVudCBZQU1MIGludGVycHJldGF0aW9uXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAgIC0gJHtKU09OLnN0cmluZ2lmeSh2KX1gO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHYgPT09IG51bGwgfHwgdiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gU2tpcCBudWxsL3VuZGVmaW5lZCBhcnJheSBlbGVtZW50c1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBgICAtICR7dn1gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5maWx0ZXIodiA9PiB2ICE9PSBudWxsKS5qb2luKCdcXG4nKX1gO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gRmllbGRzIHRoYXQgbXVzdCBhbHdheXMgYmUgcXVvdGVkIHRvIHByZXNlcnZlIHR5cGVcbiAgICAgICAgICAgIGNvbnN0IGFsd2F5c1F1b3RlRmllbGRzID0gW1xuICAgICAgICAgICAgICAndmVyc2lvbicsICAgICAgLy8gUHJldmVudCAxLjAgLT4gMVxuICAgICAgICAgICAgICAncHJpY2UnLCAgICAgICAgLy8gUHJldmVudCAxMC45OSAtPiBmbG9hdFxuICAgICAgICAgICAgICAncmV2ZW51ZV9zcGxpdCcsIC8vIFByZXZlbnQgZnJhY3Rpb24gaW50ZXJwcmV0YXRpb25cbiAgICAgICAgICAgICAgJ3Bvc3RhbF9jb2RlJywgICAvLyBQcmV2ZW50IG9jdGFsIGludGVycHJldGF0aW9uXG4gICAgICAgICAgICAgICd1c2VyX2lkJywgICAgICAvLyBQcmV2ZW50IG51bWJlciBjb252ZXJzaW9uXG4gICAgICAgICAgICAgICd1bmlxdWVfaWQnICAgICAvLyBQcmVzZXJ2ZSBleGFjdCBmb3JtYXRcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFlBTUwgc3BlY2lhbCB2YWx1ZXMgdGhhdCBiZWNvbWUgYm9vbGVhbi9udWxsL2Zsb2F0XG4gICAgICAgICAgICBjb25zdCB5YW1sU3BlY2lhbFZhbHVlcyA9IC9eKHRydWV8ZmFsc2V8eWVzfG5vfG9ufG9mZnxudWxsfH58XFwuaW5mfFxcLm5hbnwtXFwuaW5mKSQvaTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gUGF0dGVybnMgdGhhdCBpbmRpY2F0ZSBzdHJpbmcgbmVlZHMgcXVvdGluZ1xuICAgICAgICAgICAgY29uc3QgbmVlZHNRdW90aW5nID0gXG4gICAgICAgICAgICAgIGFsd2F5c1F1b3RlRmllbGRzLmluY2x1ZGVzKGtleSkgfHxcbiAgICAgICAgICAgICAgeWFtbFNwZWNpYWxWYWx1ZXMudGVzdCh2YWx1ZSkgfHwgICAgICAgICAgIC8vIFlBTUwga2V5d29yZHNcbiAgICAgICAgICAgICAgL15bXFxkK1xcLS5dLy50ZXN0KHZhbHVlKSB8fCAgICAgICAgICAgICAgICAgLy8gU3RhcnRzIHdpdGggbnVtYmVyLWxpa2VcbiAgICAgICAgICAgICAgL14wWzAtN10rJC8udGVzdCh2YWx1ZSkgfHwgICAgICAgICAgICAgICAgIC8vIE9jdGFsIG51bWJlcnNcbiAgICAgICAgICAgICAgL14weFswLTlhLWZBLUZdKyQvLnRlc3QodmFsdWUpIHx8ICAgICAgICAgLy8gSGV4YWRlY2ltYWxcbiAgICAgICAgICAgICAgL15bKy1dP1xcZCpcXC4/XFxkKyhbZUVdWystXT9cXGQrKT8kLy50ZXN0KHZhbHVlKSB8fCAvLyBTY2llbnRpZmljIG5vdGF0aW9uXG4gICAgICAgICAgICAgIC9eXFxzfFxccyQvLnRlc3QodmFsdWUpIHx8ICAgICAgICAgICAgICAgICAgIC8vIExlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZVxuICAgICAgICAgICAgICAvWzojQCEmKlxcfD5bXFxde31dLy50ZXN0KHZhbHVlKSB8fCAgICAgICAgIC8vIFNwZWNpYWwgWUFNTCBjaGFyYWN0ZXJzXG4gICAgICAgICAgICAgIHZhbHVlID09PSAnJyB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW1wdHkgc3RyaW5nXG4gICAgICAgICAgICAgIHZhbHVlLmluY2x1ZGVzKCdcXG4nKSB8fCAgICAgICAgICAgICAgICAgICAgLy8gTXVsdGlsaW5lXG4gICAgICAgICAgICAgIHZhbHVlLmluY2x1ZGVzKCdcIicpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGFpbnMgcXVvdGVzXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChuZWVkc1F1b3RpbmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYCR7a2V5fTogJHt2YWx1ZX1gO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgLy8gQ1JJVElDQUw6IFJlamVjdCBzcGVjaWFsIGZsb2F0IHZhbHVlcyB0aGF0IGJyZWFrIGxvZ2ljXG4gICAgICAgICAgICBpZiAoIWlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgICAgICAgICBsb2dnZXIud2FybihgUmVqZWN0ZWQgbm9uLWZpbml0ZSBudW1iZXIgZm9yICR7a2V5fTogJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGAke2tleX06IDBgOyAvLyBTYWZlIGRlZmF1bHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oYFJlamVjdGVkIE5hTiBmb3IgJHtrZXl9YCk7XG4gICAgICAgICAgICAgIHJldHVybiBgJHtrZXl9OiAwYDsgLy8gU2FmZSBkZWZhdWx0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYCR7a2V5fTogJHt2YWx1ZX1gO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIC8vIEV4cGxpY2l0IGJvb2xlYW4gdmFsdWVzXG4gICAgICAgICAgICByZXR1cm4gYCR7a2V5fTogJHt2YWx1ZX1gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBPdGhlciB0eXBlcyAtIHN0cmluZ2lmeSBmb3Igc2FmZXR5XG4gICAgICAgICAgICByZXR1cm4gYCR7a2V5fTogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCdcXG4nKTtcblxuICAgICAgY29uc3QgcGVyc29uYUNvbnRlbnQgPSBgLS0tXG4ke2Zyb250bWF0dGVyfVxuLS0tXG5cbiMgJHtzYW5pdGl6ZWROYW1lfVxuXG4ke3Nhbml0aXplZEluc3RydWN0aW9uc31cblxuIyMgUmVzcG9uc2UgU3R5bGVcbi0gRm9sbG93IHRoZSBiZWhhdmlvcmFsIGd1aWRlbGluZXMgYWJvdmVcbi0gTWFpbnRhaW4gY29uc2lzdGVuY3kgd2l0aCB0aGUgcGVyc29uYSdzIGNoYXJhY3RlclxuLSBBZGFwdCByZXNwb25zZXMgdG8gbWF0Y2ggdGhlIGludGVuZGVkIHB1cnBvc2VcblxuIyMgVXNhZ2UgTm90ZXNcbi0gQ3JlYXRlZCB2aWEgRG9sbGhvdXNlTUNQIGNoYXQgaW50ZXJmYWNlXG4tIEF1dGhvcjogJHthdXRob3J9XG4tIFZlcnNpb246IDEuMGA7XG5cbiAgICAgIC8vIFZhbGlkYXRlIGZpbmFsIGNvbnRlbnQgc2l6ZVxuICAgICAgdmFsaWRhdGVDb250ZW50U2l6ZShwZXJzb25hQ29udGVudCwgU0VDVVJJVFlfTElNSVRTLk1BWF9QRVJTT05BX1NJWkVfQllURVMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZSBmaWxlIGxvY2tpbmcgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnNcbiAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci53aXRoTG9jayhgcGVyc29uYToke3Nhbml0aXplZE5hbWV9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBEb3VibGUtY2hlY2sgZmlsZSBkb2Vzbid0IGV4aXN0IChpbiBjYXNlIG9mIHJhY2UgY29uZGl0aW9uKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGZzLmFjY2VzcyhmaWxlUGF0aCk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQZXJzb25hIGZpbGUgXCIke2ZpbGVuYW1lfVwiIGFscmVhZHkgZXhpc3RzYCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAvLyBJZiBlcnJvciBpcyBub3QgRU5PRU5UIChmaWxlIG5vdCBmb3VuZCksIHJlLXRocm93IGl0XG4gICAgICAgICAgaWYgKGVycm9yLmNvZGUgIT09ICdFTk9FTlQnICYmIGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdhbHJlYWR5IGV4aXN0cycpKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gRmlsZSBkb2Vzbid0IGV4aXN0LCBwcm9jZWVkXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFdyaXRlIHRoZSBmaWxlIGF0b21pY2FsbHlcbiAgICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShmaWxlUGF0aCwgcGVyc29uYUNvbnRlbnQpO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIFJlbG9hZCBwZXJzb25hcyB0byBpbmNsdWRlIHRoZSBuZXcgb25lXG4gICAgICBhd2FpdCB0aGlzLmxvYWRQZXJzb25hcygpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipQZXJzb25hIENyZWF0ZWQgU3VjY2Vzc2Z1bGx5ISoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGDwn46tICoqJHtzYW5pdGl6ZWROYW1lfSoqIGJ5ICR7YXV0aG9yfVxcbmAgK1xuICAgICAgICAgICAgICBg8J+GlCBVbmlxdWUgSUQ6ICR7dW5pcXVlSWR9XFxuYCArXG4gICAgICAgICAgICAgIGDwn5OEIFNhdmVkIGFzOiAke2ZpbGVuYW1lfVxcbmAgK1xuICAgICAgICAgICAgICBg8J+TiiBUb3RhbCBwZXJzb25hczogJHt0aGlzLnBlcnNvbmFzLnNpemV9XFxuXFxuYCArXG4gICAgICAgICAgICAgIGDwn46vICoqUmVhZHkgdG8gdXNlOioqIFxcYGFjdGl2YXRlX3BlcnNvbmEgXCIke3Nhbml0aXplZE5hbWV9XCJcXGBcXG5gICtcbiAgICAgICAgICAgICAgYPCfk6QgKipTaGFyZSBpdDoqKiBcXGBzdWJtaXRfY29sbGVjdGlvbl9jb250ZW50IFwiJHtzYW5pdGl6ZWROYW1lfVwiXFxgXFxuYCArXG4gICAgICAgICAgICAgIGDinI/vuI8gKipFZGl0IGl0OioqIFxcYGVkaXRfcGVyc29uYSBcIiR7c2FuaXRpemVkTmFtZX1cIiBcImZpZWxkXCIgXCJuZXcgdmFsdWVcIlxcYGAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZCA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkVycm9yIENyZWF0aW5nIFBlcnNvbmEqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgRmFpbGVkIHRvIHdyaXRlIHBlcnNvbmEgZmlsZTogJHtzYW5pdGl6ZWQubWVzc2FnZX1cXG5cXG5gICtcbiAgICAgICAgICAgICAgYFBsZWFzZSBjaGVjayBwZXJtaXNzaW9ucyBhbmQgdHJ5IGFnYWluLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipWYWxpZGF0aW9uIEVycm9yKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYCR7c2FuaXRpemVkLm1lc3NhZ2V9XFxuXFxuYCArXG4gICAgICAgICAgICAgIGBQbGVhc2UgZml4IHRoZSBpc3N1ZSBhbmQgdHJ5IGFnYWluLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZWRpdFBlcnNvbmEocGVyc29uYUlkZW50aWZpZXI6IHN0cmluZywgZmllbGQ6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmICghcGVyc29uYUlkZW50aWZpZXIgfHwgIWZpZWxkIHx8ICF2YWx1ZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqTWlzc2luZyBQYXJhbWV0ZXJzKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYFVzYWdlOiBcXGBlZGl0X3BlcnNvbmEgXCJwZXJzb25hX25hbWVcIiBcImZpZWxkXCIgXCJuZXdfdmFsdWVcIlxcYFxcblxcbmAgK1xuICAgICAgICAgICAgICBgKipFZGl0YWJsZSBmaWVsZHM6KipcXG5gICtcbiAgICAgICAgICAgICAgYOKAoiAqKm5hbWUqKiAtIERpc3BsYXkgbmFtZVxcbmAgK1xuICAgICAgICAgICAgICBg4oCiICoqZGVzY3JpcHRpb24qKiAtIEJyaWVmIGRlc2NyaXB0aW9uXFxuYCArXG4gICAgICAgICAgICAgIGDigKIgKippbnN0cnVjdGlvbnMqKiAtIE1haW4gcGVyc29uYSBjb250ZW50XFxuYCArXG4gICAgICAgICAgICAgIGDigKIgKip0cmlnZ2VycyoqIC0gQ29tbWEtc2VwYXJhdGVkIGtleXdvcmRzXFxuYCArXG4gICAgICAgICAgICAgIGDigKIgKip2ZXJzaW9uKiogLSBWZXJzaW9uIG51bWJlcmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgcGVyc29uYVxuICAgIC8vIEZpcnN0IHRyeSBleGFjdCBtYXRjaCAod2l0aCBvciB3aXRob3V0IC5tZCBleHRlbnNpb24pXG4gICAgbGV0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldChwZXJzb25hSWRlbnRpZmllcik7XG4gICAgXG4gICAgaWYgKCFwZXJzb25hICYmICFwZXJzb25hSWRlbnRpZmllci5lbmRzV2l0aCgnLm1kJykpIHtcbiAgICAgIC8vIFRyeSBhZGRpbmcgLm1kIGV4dGVuc2lvblxuICAgICAgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KGAke3BlcnNvbmFJZGVudGlmaWVyfS5tZGApO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIC8vIFNlYXJjaCBieSBuYW1lIChjYXNlLWluc2Vuc2l0aXZlKVxuICAgICAgcGVyc29uYSA9IEFycmF5LmZyb20odGhpcy5wZXJzb25hcy52YWx1ZXMoKSkuZmluZChwID0+IFxuICAgICAgICBwLm1ldGFkYXRhLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gcGVyc29uYUlkZW50aWZpZXIudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAvLyBTZWFyY2ggYnkgbmFtZSB3aXRoIGh5cGhlbi10by1zcGFjZSBjb252ZXJzaW9uIChlLmcuLCBcImRlYnVnLWRldGVjdGl2ZVwiIC0+IFwiRGVidWcgRGV0ZWN0aXZlXCIpXG4gICAgICBjb25zdCBuYW1lV2l0aFNwYWNlcyA9IHBlcnNvbmFJZGVudGlmaWVyLnJlcGxhY2UoLy0vZywgJyAnKTtcbiAgICAgIHBlcnNvbmEgPSBBcnJheS5mcm9tKHRoaXMucGVyc29uYXMudmFsdWVzKCkpLmZpbmQocCA9PiBcbiAgICAgICAgcC5tZXRhZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWVXaXRoU3BhY2VzLnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipQZXJzb25hIE5vdCBGb3VuZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBDb3VsZCBub3QgZmluZCBwZXJzb25hOiBcIiR7cGVyc29uYUlkZW50aWZpZXJ9XCJcXG5cXG5gICtcbiAgICAgICAgICAgICAgYFVzZSBcXGBsaXN0X3BlcnNvbmFzXFxgIHRvIHNlZSBhdmFpbGFibGUgcGVyc29uYXMuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZEZpZWxkcyA9IFsnbmFtZScsICdkZXNjcmlwdGlvbicsICdpbnN0cnVjdGlvbnMnLCAndHJpZ2dlcnMnLCAndmVyc2lvbiddO1xuICAgIGlmICghdmFsaWRGaWVsZHMuaW5jbHVkZXMoZmllbGQudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkludmFsaWQgRmllbGQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgRmllbGQgXCIke2ZpZWxkfVwiIGlzIG5vdCBlZGl0YWJsZS5cXG5cXG5gICtcbiAgICAgICAgICAgICAgYCoqVmFsaWQgZmllbGRzOioqICR7dmFsaWRGaWVsZHMuam9pbignLCAnKX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIHBlcnNvbmFzRGlyIGlzIGd1YXJhbnRlZWQgdG8gYmUgc2V0IGFmdGVyIGluaXRpYWxpemF0aW9uXG4gICAgbGV0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIhLCBwZXJzb25hLmZpbGVuYW1lKTtcbiAgICBsZXQgaXNEZWZhdWx0ID0gaXNEZWZhdWx0UGVyc29uYShwZXJzb25hLmZpbGVuYW1lKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBSZWFkIGN1cnJlbnQgZmlsZVxuICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSBhd2FpdCBQYXRoVmFsaWRhdG9yLnNhZmVSZWFkRmlsZShmaWxlUGF0aCk7XG4gICAgICBcbiAgICAgIC8vIFVzZSBzZWN1cmUgWUFNTCBwYXJzZXJcbiAgICAgIGxldCBwYXJzZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBwYXJzZWQgPSBTZWN1cmVZYW1sUGFyc2VyLnNhZmVNYXR0ZXIoZmlsZUNvbnRlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VjdXJpdHlFcnJvcikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipTZWN1cml0eSBFcnJvcioqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgQ2Fubm90IGVkaXQgcGVyc29uYSBkdWUgdG8gc2VjdXJpdHkgdGhyZWF0OiAke2Vycm9yLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSWYgZWRpdGluZyBhIGRlZmF1bHQgcGVyc29uYSwgY3JlYXRlIGEgY29weSBpbnN0ZWFkXG4gICAgICBpZiAoaXNEZWZhdWx0KSB7XG4gICAgICAgIC8vIEdlbmVyYXRlIHVuaXF1ZSBJRCBmb3IgdGhlIGNvcHlcbiAgICAgICAgY29uc3QgYXV0aG9yID0gdGhpcy5jdXJyZW50VXNlciB8fCBnZW5lcmF0ZUFub255bW91c0lkKCk7XG4gICAgICAgIGNvbnN0IHVuaXF1ZUlkID0gZ2VuZXJhdGVVbmlxdWVJZChwZXJzb25hLm1ldGFkYXRhLm5hbWUsIGF1dGhvcik7XG4gICAgICAgIGNvbnN0IG5ld0ZpbGVuYW1lID0gYCR7dW5pcXVlSWR9Lm1kYDtcbiAgICAgICAgY29uc3QgbmV3RmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5wZXJzb25hc0RpciEsIG5ld0ZpbGVuYW1lKTtcbiAgICAgICAgXG4gICAgICAgIC8vIENyZWF0ZSBjb3B5IG9mIHRoZSBkZWZhdWx0IHBlcnNvbmFcbiAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IFBhdGhWYWxpZGF0b3Iuc2FmZVJlYWRGaWxlKGZpbGVQYXRoKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFVzZSBmaWxlIGxvY2tpbmcgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgd2hlbiBjcmVhdGluZyB0aGUgY29weVxuICAgICAgICBhd2FpdCBGaWxlTG9ja01hbmFnZXIud2l0aExvY2soYHBlcnNvbmE6JHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9LWNvcHlgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShuZXdGaWxlUGF0aCwgY29udGVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gVXBkYXRlIGZpbGUgcGF0aCB0byBwb2ludCB0byB0aGUgY29weVxuICAgICAgICBmaWxlUGF0aCA9IG5ld0ZpbGVQYXRoO1xuICAgICAgICBcbiAgICAgICAgLy8gVXBkYXRlIHRoZSB1bmlxdWVfaWQgaW4gdGhlIG1ldGFkYXRhXG4gICAgICAgIHBhcnNlZC5kYXRhLnVuaXF1ZV9pZCA9IHVuaXF1ZUlkO1xuICAgICAgICBwYXJzZWQuZGF0YS5hdXRob3IgPSBhdXRob3I7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSB0aGUgYXBwcm9wcmlhdGUgZmllbGRcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWVsZCA9IGZpZWxkLnRvTG93ZXJDYXNlKCk7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIHRoZSBuZXcgdmFsdWUgZm9yIHNlY3VyaXR5IHRocmVhdHNcbiAgICAgIGNvbnN0IHZhbHVlVmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZSh2YWx1ZSk7XG4gICAgICBpZiAoIXZhbHVlVmFsaWRhdGlvbi5pc1ZhbGlkICYmIHZhbHVlVmFsaWRhdGlvbi5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKlNlY3VyaXR5IFZhbGlkYXRpb24gRmFpbGVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYFRoZSBuZXcgdmFsdWUgY29udGFpbnMgcHJvaGliaXRlZCBjb250ZW50OlxcbmAgK1xuICAgICAgICAgICAgICBg4oCiICR7dmFsdWVWYWxpZGF0aW9uLmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJ1xcbuKAoiAnKX1cXG5cXG5gICtcbiAgICAgICAgICAgICAgYFBsZWFzZSByZW1vdmUgdGhlc2UgcGF0dGVybnMgYW5kIHRyeSBhZ2Fpbi5gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBVc2Ugc2FuaXRpemVkIHZhbHVlIGlmIG5lZWRlZFxuICAgICAgbGV0IHNhbml0aXplZFZhbHVlID0gdmFsdWVWYWxpZGF0aW9uLnNhbml0aXplZENvbnRlbnQgfHwgdmFsdWU7XG4gICAgICBcbiAgICAgIC8vIEFsd2F5cyByZW1vdmUgc2hlbGwgbWV0YWNoYXJhY3RlcnMgZnJvbSBkaXNwbGF5IG91dHB1dFxuICAgICAgY29uc3QgZGlzcGxheVZhbHVlID0gc2FuaXRpemVkVmFsdWUucmVwbGFjZSgvWzsmfGAkKCldL2csICcnKTtcbiAgICAgIFxuICAgICAgaWYgKG5vcm1hbGl6ZWRGaWVsZCA9PT0gJ2luc3RydWN0aW9ucycpIHtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBtYWluIGNvbnRlbnRcbiAgICAgICAgcGFyc2VkLmNvbnRlbnQgPSBzYW5pdGl6ZWRWYWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZEZpZWxkID09PSAndHJpZ2dlcnMnKSB7XG4gICAgICAgIC8vIFBhcnNlIHRyaWdnZXJzIGFzIGNvbW1hLXNlcGFyYXRlZCBsaXN0XG4gICAgICAgIHBhcnNlZC5kYXRhW25vcm1hbGl6ZWRGaWVsZF0gPSBzYW5pdGl6ZWRWYWx1ZS5zcGxpdCgnLCcpLm1hcCh0ID0+IHQudHJpbSgpKS5maWx0ZXIodCA9PiB0Lmxlbmd0aCA+IDApO1xuICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkRmllbGQgPT09ICdjYXRlZ29yeScpIHtcbiAgICAgICAgLy8gQ2F0ZWdvcnkgZmllbGQgaXMgZGVwcmVjYXRlZCBidXQgc3RpbGwgZWRpdGFibGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgICAgcGFyc2VkLmRhdGFbbm9ybWFsaXplZEZpZWxkXSA9IHNhbml0aXplZFZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXBkYXRlIG1ldGFkYXRhIGZpZWxkXG4gICAgICAgIC8vIEZvciBuYW1lIGZpZWxkLCBhcHBseSBhZGRpdGlvbmFsIHNhbml0aXphdGlvbiB0byByZW1vdmUgc2hlbGwgbWV0YWNoYXJhY3RlcnNcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRGaWVsZCA9PT0gJ25hbWUnKSB7XG4gICAgICAgICAgcGFyc2VkLmRhdGFbbm9ybWFsaXplZEZpZWxkXSA9IHNhbml0aXplSW5wdXQoc2FuaXRpemVkVmFsdWUsIDEwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyc2VkLmRhdGFbbm9ybWFsaXplZEZpZWxkXSA9IHNhbml0aXplZFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSB2ZXJzaW9uIGFuZCBtb2RpZmljYXRpb24gaW5mb1xuICAgICAgaWYgKG5vcm1hbGl6ZWRGaWVsZCAhPT0gJ3ZlcnNpb24nKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWZXJzaW9uID0gcGFyc2VkLmRhdGEudmVyc2lvbiB8fCAnMS4wJztcbiAgICAgICAgY29uc3QgdmVyc2lvblBhcnRzID0gY3VycmVudFZlcnNpb24uc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgICAgICAgdmVyc2lvblBhcnRzWzFdID0gKHZlcnNpb25QYXJ0c1sxXSB8fCAwKSArIDE7XG4gICAgICAgIHBhcnNlZC5kYXRhLnZlcnNpb24gPSB2ZXJzaW9uUGFydHMuam9pbignLicpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWdlbmVyYXRlIGZpbGUgY29udGVudFxuICAgICAgLy8gVXNlIHNlY3VyZSBZQU1MIHN0cmluZ2lmaWNhdGlvblxuICAgICAgY29uc3Qgc2VjdXJlUGFyc2VyID0gU2VjdXJlWWFtbFBhcnNlci5jcmVhdGVTZWN1cmVNYXR0ZXJQYXJzZXIoKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRDb250ZW50ID0gc2VjdXJlUGFyc2VyLnN0cmluZ2lmeShwYXJzZWQuY29udGVudCwgcGFyc2VkLmRhdGEpO1xuICAgICAgXG4gICAgICAvLyBVc2UgZmlsZSBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgICBhd2FpdCBGaWxlTG9ja01hbmFnZXIud2l0aExvY2soYHBlcnNvbmE6JHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBXcml0ZSB1cGRhdGVkIGZpbGUgYXRvbWljYWxseVxuICAgICAgICBhd2FpdCBGaWxlTG9ja01hbmFnZXIuYXRvbWljV3JpdGVGaWxlKGZpbGVQYXRoLCB1cGRhdGVkQ29udGVudCk7XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gUmVsb2FkIHBlcnNvbmFzXG4gICAgICBhd2FpdCB0aGlzLmxvYWRQZXJzb25hcygpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipQZXJzb25hIFVwZGF0ZWQgU3VjY2Vzc2Z1bGx5ISoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIChpc0RlZmF1bHQgPyBg8J+TiyAqKk5vdGU6KiogQ3JlYXRlZCBhIGNvcHkgb2YgdGhlIGRlZmF1bHQgcGVyc29uYSB0byBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwuXFxuXFxuYCA6ICcnKSArXG4gICAgICAgICAgICAgIGDwn46tICoqJHsocGFyc2VkLmRhdGEubmFtZSB8fCBwZXJzb25hLm1ldGFkYXRhLm5hbWUgfHwgJycpLnJlcGxhY2UoL1s7JnxgJCgpXS9nLCAnJyl9KipcXG5gICtcbiAgICAgICAgICAgICAgYPCfk50gKipGaWVsZCBVcGRhdGVkOioqICR7ZmllbGR9XFxuYCArXG4gICAgICAgICAgICAgIGDwn5SEICoqTmV3IFZhbHVlOioqICR7bm9ybWFsaXplZEZpZWxkID09PSAnaW5zdHJ1Y3Rpb25zJyA/ICdDb250ZW50IHVwZGF0ZWQnIDogZGlzcGxheVZhbHVlfVxcbmAgK1xuICAgICAgICAgICAgICBg8J+TiiAqKlZlcnNpb246KiogJHtwYXJzZWQuZGF0YS52ZXJzaW9ufVxcbmAgK1xuICAgICAgICAgICAgICAoaXNEZWZhdWx0ID8gYPCfhpQgKipOZXcgSUQ6KiogJHtwYXJzZWQuZGF0YS51bmlxdWVfaWR9XFxuYCA6ICcnKSArXG4gICAgICAgICAgICAgIGBcXG5gICtcbiAgICAgICAgICAgICAgYFVzZSBcXGBnZXRfcGVyc29uYV9kZXRhaWxzIFwiJHsocGFyc2VkLmRhdGEubmFtZSB8fCBwZXJzb25hLm1ldGFkYXRhLm5hbWUgfHwgJycpLnJlcGxhY2UoL1s7JnxgJCgpXS9nLCAnJyl9XCJcXGAgdG8gc2VlIGFsbCBjaGFuZ2VzLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZCA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkVycm9yIFVwZGF0aW5nIFBlcnNvbmEqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgRmFpbGVkIHRvIHVwZGF0ZSBwZXJzb25hOiAke3Nhbml0aXplZC5tZXNzYWdlfVxcblxcbmAgK1xuICAgICAgICAgICAgICBgUGxlYXNlIGNoZWNrIGZpbGUgcGVybWlzc2lvbnMgYW5kIHRyeSBhZ2Fpbi5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlUGVyc29uYShwZXJzb25hSWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgaWYgKCFwZXJzb25hSWRlbnRpZmllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqTWlzc2luZyBQZXJzb25hIElkZW50aWZpZXIqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgVXNhZ2U6IFxcYHZhbGlkYXRlX3BlcnNvbmEgXCJwZXJzb25hX25hbWVcIlxcYFxcblxcbmAgK1xuICAgICAgICAgICAgICBgVXNlIFxcYGxpc3RfcGVyc29uYXNcXGAgdG8gc2VlIGF2YWlsYWJsZSBwZXJzb25hcy5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEZpbmQgdGhlIHBlcnNvbmFcbiAgICAvLyBGaXJzdCB0cnkgZXhhY3QgbWF0Y2ggKHdpdGggb3Igd2l0aG91dCAubWQgZXh0ZW5zaW9uKVxuICAgIGxldCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQocGVyc29uYUlkZW50aWZpZXIpO1xuICAgIFxuICAgIGlmICghcGVyc29uYSAmJiAhcGVyc29uYUlkZW50aWZpZXIuZW5kc1dpdGgoJy5tZCcpKSB7XG4gICAgICAvLyBUcnkgYWRkaW5nIC5tZCBleHRlbnNpb25cbiAgICAgIHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldChgJHtwZXJzb25hSWRlbnRpZmllcn0ubWRgKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAvLyBTZWFyY2ggYnkgbmFtZSAoY2FzZS1pbnNlbnNpdGl2ZSlcbiAgICAgIHBlcnNvbmEgPSBBcnJheS5mcm9tKHRoaXMucGVyc29uYXMudmFsdWVzKCkpLmZpbmQocCA9PiBcbiAgICAgICAgcC5tZXRhZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IHBlcnNvbmFJZGVudGlmaWVyLnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgfVxuICAgIFxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgLy8gU2VhcmNoIGJ5IG5hbWUgd2l0aCBoeXBoZW4tdG8tc3BhY2UgY29udmVyc2lvbiAoZS5nLiwgXCJkZWJ1Zy1kZXRlY3RpdmVcIiAtPiBcIkRlYnVnIERldGVjdGl2ZVwiKVxuICAgICAgY29uc3QgbmFtZVdpdGhTcGFjZXMgPSBwZXJzb25hSWRlbnRpZmllci5yZXBsYWNlKC8tL2csICcgJyk7XG4gICAgICBwZXJzb25hID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKS5maW5kKHAgPT4gXG4gICAgICAgIHAubWV0YWRhdGEubmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lV2l0aFNwYWNlcy50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqUGVyc29uYSBOb3QgRm91bmQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgQ291bGQgbm90IGZpbmQgcGVyc29uYTogXCIke3BlcnNvbmFJZGVudGlmaWVyfVwiXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBVc2UgXFxgbGlzdF9wZXJzb25hc1xcYCB0byBzZWUgYXZhaWxhYmxlIHBlcnNvbmFzLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGlvbiBjaGVja3NcbiAgICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgbWV0YWRhdGEgPSBwZXJzb25hLm1ldGFkYXRhO1xuXG4gICAgLy8gUmVxdWlyZWQgZmllbGQgY2hlY2tzXG4gICAgaWYgKCFtZXRhZGF0YS5uYW1lIHx8IG1ldGFkYXRhLm5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaXNzdWVzLnB1c2goXCJNaXNzaW5nIG9yIGVtcHR5ICduYW1lJyBmaWVsZFwiKTtcbiAgICB9XG4gICAgaWYgKCFtZXRhZGF0YS5kZXNjcmlwdGlvbiB8fCBtZXRhZGF0YS5kZXNjcmlwdGlvbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICBpc3N1ZXMucHVzaChcIk1pc3Npbmcgb3IgZW1wdHkgJ2Rlc2NyaXB0aW9uJyBmaWVsZFwiKTtcbiAgICB9XG4gICAgaWYgKCFwZXJzb25hLmNvbnRlbnQgfHwgcGVyc29uYS5jb250ZW50LnRyaW0oKS5sZW5ndGggPCA1MCkge1xuICAgICAgaXNzdWVzLnB1c2goXCJQZXJzb25hIGNvbnRlbnQgaXMgdG9vIHNob3J0IChtaW5pbXVtIDUwIGNoYXJhY3RlcnMpXCIpO1xuICAgIH1cblxuICAgIC8vIENhdGVnb3J5IHZhbGlkYXRpb25cbiAgICBjb25zdCB2YWxpZENhdGVnb3JpZXMgPSBbJ2NyZWF0aXZlJywgJ3Byb2Zlc3Npb25hbCcsICdlZHVjYXRpb25hbCcsICdnYW1pbmcnLCAncGVyc29uYWwnLCAnZ2VuZXJhbCddO1xuICAgIGlmIChtZXRhZGF0YS5jYXRlZ29yeSAmJiAhdmFsaWRDYXRlZ29yaWVzLmluY2x1ZGVzKG1ldGFkYXRhLmNhdGVnb3J5KSkge1xuICAgICAgaXNzdWVzLnB1c2goYEludmFsaWQgY2F0ZWdvcnkgJyR7bWV0YWRhdGEuY2F0ZWdvcnl9Jy4gTXVzdCBiZSBvbmUgb2Y6ICR7dmFsaWRDYXRlZ29yaWVzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuXG4gICAgLy8gQWdlIHJhdGluZyB2YWxpZGF0aW9uXG4gICAgY29uc3QgdmFsaWRBZ2VSYXRpbmdzID0gWydhbGwnLCAnMTMrJywgJzE4KyddO1xuICAgIGlmIChtZXRhZGF0YS5hZ2VfcmF0aW5nICYmICF2YWxpZEFnZVJhdGluZ3MuaW5jbHVkZXMobWV0YWRhdGEuYWdlX3JhdGluZykpIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goYEludmFsaWQgYWdlX3JhdGluZyAnJHttZXRhZGF0YS5hZ2VfcmF0aW5nfScuIFNob3VsZCBiZSBvbmUgb2Y6ICR7dmFsaWRBZ2VSYXRpbmdzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuXG4gICAgLy8gT3B0aW9uYWwgZmllbGQgd2FybmluZ3NcbiAgICBpZiAoIW1ldGFkYXRhLnRyaWdnZXJzIHx8IG1ldGFkYXRhLnRyaWdnZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgd2FybmluZ3MucHVzaChcIk5vIHRyaWdnZXIga2V5d29yZHMgZGVmaW5lZCAtIHVzZXJzIG1heSBoYXZlIGRpZmZpY3VsdHkgZmluZGluZyB0aGlzIHBlcnNvbmFcIik7XG4gICAgfVxuICAgIGlmICghbWV0YWRhdGEudmVyc2lvbikge1xuICAgICAgd2FybmluZ3MucHVzaChcIk5vIHZlcnNpb24gc3BlY2lmaWVkIC0gZGVmYXVsdGluZyB0byAnMS4wJ1wiKTtcbiAgICB9XG4gICAgaWYgKCFtZXRhZGF0YS51bmlxdWVfaWQpIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goXCJObyB1bmlxdWVfaWQgLSBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseVwiKTtcbiAgICB9XG5cbiAgICAvLyBDb250ZW50IHF1YWxpdHkgY2hlY2tzXG4gICAgaWYgKHBlcnNvbmEuY29udGVudC5sZW5ndGggPiA1MDAwKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKFwiUGVyc29uYSBjb250ZW50IGlzIHZlcnkgbG9uZyAtIGNvbnNpZGVyIGJyZWFraW5nIGl0IGludG8gc2VjdGlvbnNcIik7XG4gICAgfVxuICAgIGlmIChtZXRhZGF0YS5uYW1lICYmIG1ldGFkYXRhLm5hbWUubGVuZ3RoID4gNTApIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goXCJQZXJzb25hIG5hbWUgaXMgdmVyeSBsb25nIC0gY29uc2lkZXIgc2hvcnRlbmluZyBmb3IgYmV0dGVyIGRpc3BsYXlcIik7XG4gICAgfVxuICAgIGlmIChtZXRhZGF0YS5kZXNjcmlwdGlvbiAmJiBtZXRhZGF0YS5kZXNjcmlwdGlvbi5sZW5ndGggPiAyMDApIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goXCJEZXNjcmlwdGlvbiBpcyB2ZXJ5IGxvbmcgLSBjb25zaWRlciBrZWVwaW5nIGl0IHVuZGVyIDIwMCBjaGFyYWN0ZXJzXCIpO1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIHZhbGlkYXRpb24gcmVwb3J0XG4gICAgbGV0IHJlcG9ydCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfk4sgKipWYWxpZGF0aW9uIFJlcG9ydDogJHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9KipcXG5cXG5gO1xuICAgIFxuICAgIGlmIChpc3N1ZXMubGVuZ3RoID09PSAwICYmIHdhcm5pbmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVwb3J0ICs9IGDinIUgKipBbGwgQ2hlY2tzIFBhc3NlZCEqKlxcblxcbmAgK1xuICAgICAgICBg8J+OrSAqKlBlcnNvbmE6KiogJHttZXRhZGF0YS5uYW1lfVxcbmAgK1xuICAgICAgICBg8J+TgSAqKkNhdGVnb3J5OioqICR7bWV0YWRhdGEuY2F0ZWdvcnkgfHwgJ2dlbmVyYWwnfVxcbmAgK1xuICAgICAgICBg8J+TiiAqKlZlcnNpb246KiogJHttZXRhZGF0YS52ZXJzaW9uIHx8ICcxLjAnfVxcbmAgK1xuICAgICAgICBg8J+TnSAqKkNvbnRlbnQgTGVuZ3RoOioqICR7cGVyc29uYS5jb250ZW50Lmxlbmd0aH0gY2hhcmFjdGVyc1xcbmAgK1xuICAgICAgICBg8J+UlyAqKlRyaWdnZXJzOioqICR7bWV0YWRhdGEudHJpZ2dlcnM/Lmxlbmd0aCB8fCAwfSBrZXl3b3Jkc1xcblxcbmAgK1xuICAgICAgICBgVGhpcyBwZXJzb25hIG1lZXRzIGFsbCB2YWxpZGF0aW9uIHJlcXVpcmVtZW50cyBhbmQgaXMgcmVhZHkgZm9yIHVzZSFgO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXNzdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVwb3J0ICs9IGDinYwgKipJc3N1ZXMgRm91bmQgKCR7aXNzdWVzLmxlbmd0aH0pOioqXFxuYDtcbiAgICAgICAgaXNzdWVzLmZvckVhY2goKGlzc3VlLCBpKSA9PiB7XG4gICAgICAgICAgcmVwb3J0ICs9IGAgICAke2kgKyAxfS4gJHtpc3N1ZX1cXG5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVwb3J0ICs9ICdcXG4nO1xuICAgICAgfVxuXG4gICAgICBpZiAod2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICByZXBvcnQgKz0gYOKaoO+4jyAqKldhcm5pbmdzICgke3dhcm5pbmdzLmxlbmd0aH0pOioqXFxuYDtcbiAgICAgICAgd2FybmluZ3MuZm9yRWFjaCgod2FybmluZywgaSkgPT4ge1xuICAgICAgICAgIHJlcG9ydCArPSBgICAgJHtpICsgMX0uICR7d2FybmluZ31cXG5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVwb3J0ICs9ICdcXG4nO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNzdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVwb3J0ICs9IGAqKlJlY29tbWVuZGF0aW9uOioqIEZpeCB0aGUgaXNzdWVzIGFib3ZlIGJlZm9yZSB1c2luZyB0aGlzIHBlcnNvbmEuXFxuYDtcbiAgICAgICAgcmVwb3J0ICs9IGBVc2UgXFxgZWRpdF9wZXJzb25hIFwiJHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9XCIgXCJmaWVsZFwiIFwidmFsdWVcIlxcYCB0byBtYWtlIGNvcnJlY3Rpb25zLmA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXBvcnQgKz0gYCoqU3RhdHVzOioqIFBlcnNvbmEgaXMgZnVuY3Rpb25hbCBidXQgY291bGQgYmUgaW1wcm92ZWQuXFxuYDtcbiAgICAgICAgcmVwb3J0ICs9IGBBZGRyZXNzIHdhcm5pbmdzIGFib3ZlIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlLmA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IHJlcG9ydCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIHJldHJ5TmV0d29ya09wZXJhdGlvbiBoYXMgYmVlbiByZW1vdmVkIHdpdGggVXBkYXRlVG9vbHNcblxuXG5cblxuXG5cblxuXG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBpbmRpY2F0b3Igc2V0dGluZ3NcbiAgICovXG4gIGFzeW5jIGNvbmZpZ3VyZUluZGljYXRvcihjb25maWc6IFBhcnRpYWw8SW5kaWNhdG9yQ29uZmlnPikge1xuICAgIHRyeSB7XG4gICAgICAvLyBVcGRhdGUgdGhlIGNvbmZpZ3VyYXRpb25cbiAgICAgIGlmIChjb25maWcuZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnLmVuYWJsZWQgPSBjb25maWcuZW5hYmxlZDtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcuc3R5bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmluZGljYXRvckNvbmZpZy5zdHlsZSA9IGNvbmZpZy5zdHlsZTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcuY3VzdG9tRm9ybWF0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgY3VzdG9tIGZvcm1hdCBiZWZvcmUgYXBwbHlpbmdcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlQ3VzdG9tRm9ybWF0KGNvbmZpZy5jdXN0b21Gb3JtYXQpO1xuICAgICAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEludmFsaWQgY3VzdG9tIGZvcm1hdDogJHt2YWxpZGF0aW9uLmVycm9yfWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmRpY2F0b3JDb25maWcuY3VzdG9tRm9ybWF0ID0gY29uZmlnLmN1c3RvbUZvcm1hdDtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcuc2hvd1ZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmluZGljYXRvckNvbmZpZy5zaG93VmVyc2lvbiA9IGNvbmZpZy5zaG93VmVyc2lvbjtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcuc2hvd0F1dGhvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dBdXRob3IgPSBjb25maWcuc2hvd0F1dGhvcjtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcuc2hvd0NhdGVnb3J5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JDb25maWcuc2hvd0NhdGVnb3J5ID0gY29uZmlnLnNob3dDYXRlZ29yeTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcuZW1vamkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmluZGljYXRvckNvbmZpZy5lbW9qaSA9IGNvbmZpZy5lbW9qaTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcuYnJhY2tldFN0eWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JDb25maWcuYnJhY2tldFN0eWxlID0gY29uZmlnLmJyYWNrZXRTdHlsZTtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBleGFtcGxlIG9mIHdoYXQgdGhlIGluZGljYXRvciB3b3VsZCBsb29rIGxpa2VcbiAgICAgIGxldCBleGFtcGxlSW5kaWNhdG9yID0gXCJcIjtcbiAgICAgIGlmICh0aGlzLmFjdGl2ZVBlcnNvbmEpIHtcbiAgICAgICAgY29uc3QgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KHRoaXMuYWN0aXZlUGVyc29uYSk7XG4gICAgICAgIGlmIChwZXJzb25hKSB7XG4gICAgICAgICAgZXhhbXBsZUluZGljYXRvciA9IGZvcm1hdEluZGljYXRvcih0aGlzLmluZGljYXRvckNvbmZpZywge1xuICAgICAgICAgICAgbmFtZTogcGVyc29uYS5tZXRhZGF0YS5uYW1lLFxuICAgICAgICAgICAgdmVyc2lvbjogcGVyc29uYS5tZXRhZGF0YS52ZXJzaW9uLFxuICAgICAgICAgICAgYXV0aG9yOiBwZXJzb25hLm1ldGFkYXRhLmF1dGhvcixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBwZXJzb25hLm1ldGFkYXRhLmNhdGVnb3J5XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNob3cgZXhhbXBsZSB3aXRoIHNhbXBsZSBkYXRhXG4gICAgICAgIGV4YW1wbGVJbmRpY2F0b3IgPSBmb3JtYXRJbmRpY2F0b3IodGhpcy5pbmRpY2F0b3JDb25maWcsIHtcbiAgICAgICAgICBuYW1lOiBcIkV4YW1wbGUgUGVyc29uYVwiLFxuICAgICAgICAgIHZlcnNpb246IFwiMS4wXCIsXG4gICAgICAgICAgYXV0aG9yOiBcIkB1c2VybmFtZVwiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImNyZWF0aXZlXCJcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSBJbmRpY2F0b3IgY29uZmlndXJhdGlvbiB1cGRhdGVkIHN1Y2Nlc3NmdWxseSFcblxuQ3VycmVudCBzZXR0aW5nczpcbi0gRW5hYmxlZDogJHt0aGlzLmluZGljYXRvckNvbmZpZy5lbmFibGVkfVxuLSBTdHlsZTogJHt0aGlzLmluZGljYXRvckNvbmZpZy5zdHlsZX1cbi0gU2hvdyBWZXJzaW9uOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dWZXJzaW9ufVxuLSBTaG93IEF1dGhvcjogJHt0aGlzLmluZGljYXRvckNvbmZpZy5zaG93QXV0aG9yfVxuLSBTaG93IENhdGVnb3J5OiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dDYXRlZ29yeX1cbi0gRW1vamk6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuZW1vaml9XG4tIEJyYWNrZXRzOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmJyYWNrZXRTdHlsZX1cbiR7dGhpcy5pbmRpY2F0b3JDb25maWcuY3VzdG9tRm9ybWF0ID8gYC0gQ3VzdG9tIEZvcm1hdDogJHt0aGlzLmluZGljYXRvckNvbmZpZy5jdXN0b21Gb3JtYXR9YCA6ICcnfVxuXG5FeGFtcGxlIGluZGljYXRvcjogJHtleGFtcGxlSW5kaWNhdG9yIHx8IFwiKG5vbmUgLSBpbmRpY2F0b3JzIGRpc2FibGVkKVwifVxuXG5Ob3RlOiBDb25maWd1cmF0aW9uIGlzIHRlbXBvcmFyeSBmb3IgdGhpcyBzZXNzaW9uLiBUbyBtYWtlIHBlcm1hbmVudCwgc2V0IGVudmlyb25tZW50IHZhcmlhYmxlczpcbi0gRE9MTEhPVVNFX0lORElDQVRPUl9FTkFCTEVEPXRydWUvZmFsc2Vcbi0gRE9MTEhPVVNFX0lORElDQVRPUl9TVFlMRT1mdWxsL21pbmltYWwvY29tcGFjdC9jdXN0b21cbi0gRE9MTEhPVVNFX0lORElDQVRPUl9GT1JNQVQ9XCJjdXN0b20gZm9ybWF0IHRlbXBsYXRlXCJcbi0gRE9MTEhPVVNFX0lORElDQVRPUl9TSE9XX1ZFUlNJT049dHJ1ZS9mYWxzZVxuLSBET0xMSE9VU0VfSU5ESUNBVE9SX1NIT1dfQVVUSE9SPXRydWUvZmFsc2Vcbi0gRE9MTEhPVVNFX0lORElDQVRPUl9TSE9XX0NBVEVHT1JZPXRydWUvZmFsc2Vcbi0gRE9MTEhPVVNFX0lORElDQVRPUl9FTU9KST3wn46tXG4tIERPTExIT1VTRV9JTkRJQ0FUT1JfQlJBQ0tFVFM9c3F1YXJlL3JvdW5kL2N1cmx5L2FuZ2xlL25vbmVgXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRXJyb3IgY29uZmlndXJpbmcgaW5kaWNhdG9yOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IGluZGljYXRvciBjb25maWd1cmF0aW9uXG4gICAqL1xuICBhc3luYyBjb25maWd1cmVDb2xsZWN0aW9uU3VibWlzc2lvbihhdXRvU3VibWl0OiBib29sZWFuKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFN0b3JlIHRoZSBjb25maWd1cmF0aW9uIGluIGVudmlyb25tZW50IHZhcmlhYmxlXG4gICAgICBpZiAoYXV0b1N1Ym1pdCkge1xuICAgICAgICBwcm9jZXNzLmVudi5ET0xMSE9VU0VfQVVUT19TVUJNSVRfVE9fQ09MTEVDVElPTiA9ICd0cnVlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfQVVUT19TVUJNSVRfVE9fQ09MTEVDVElPTjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZSA9IGF1dG9TdWJtaXQgXG4gICAgICAgID8gXCLinIUgQ29sbGVjdGlvbiBzdWJtaXNzaW9uIGVuYWJsZWQhIENvbnRlbnQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHN1Ym1pdHRlZCB0byB0aGUgRG9sbGhvdXNlTUNQIGNvbGxlY3Rpb24gYWZ0ZXIgcG9ydGZvbGlvIHVwbG9hZC5cIlxuICAgICAgICA6IFwi4pyFIENvbGxlY3Rpb24gc3VibWlzc2lvbiBkaXNhYmxlZC4gQ29udGVudCB3aWxsIG9ubHkgYmUgdXBsb2FkZWQgdG8geW91ciBwZXJzb25hbCBwb3J0Zm9saW8uXCI7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7bWVzc2FnZX1gXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGNvbmZpZ3VyaW5nIGNvbGxlY3Rpb24gc3VibWlzc2lvbicsIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRmFpbGVkIHRvIGNvbmZpZ3VyZSBjb2xsZWN0aW9uIHN1Ym1pc3Npb246ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRDb2xsZWN0aW9uU3VibWlzc2lvbkNvbmZpZygpIHtcbiAgICBjb25zdCBhdXRvU3VibWl0RW5hYmxlZCA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9BVVRPX1NVQk1JVF9UT19DT0xMRUNUSU9OID09PSAndHJ1ZSc7XG4gICAgXG4gICAgY29uc3QgbWVzc2FnZSA9IGAqKkNvbGxlY3Rpb24gU3VibWlzc2lvbiBDb25maWd1cmF0aW9uKipcXG5cXG5gICtcbiAgICAgIGDigKIgKipBdXRvLXN1Ym1pdCoqOiAke2F1dG9TdWJtaXRFbmFibGVkID8gJ+KchSBFbmFibGVkJyA6ICfinYwgRGlzYWJsZWQnfVxcblxcbmAgK1xuICAgICAgYFdoZW4gYXV0by1zdWJtaXQgaXMgZW5hYmxlZCwgdGhlIFxcYHN1Ym1pdF9jb2xsZWN0aW9uX2NvbnRlbnRcXGAgdG9vbCB3aWxsOlxcbmAgK1xuICAgICAgYDEuIFVwbG9hZCBjb250ZW50IHRvIHlvdXIgR2l0SHViIHBvcnRmb2xpb1xcbmAgK1xuICAgICAgYDIuIEF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgc3VibWlzc2lvbiBpc3N1ZSBpbiBEb2xsaG91c2VNQ1AvY29sbGVjdGlvblxcblxcbmAgK1xuICAgICAgYFRvIGNoYW5nZSB0aGlzIHNldHRpbmcsIHVzZTpcXG5gICtcbiAgICAgIGBcXGBcXGBcXGBcXG5jb25maWd1cmVfY29sbGVjdGlvbl9zdWJtaXNzaW9uIGF1dG9TdWJtaXQ6IHRydWUvZmFsc2VcXG5cXGBcXGBcXGBgO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7bWVzc2FnZX1gXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0SW5kaWNhdG9yQ29uZmlnKCkge1xuICAgIC8vIFNob3cgY3VycmVudCBjb25maWd1cmF0aW9uIGFuZCBleGFtcGxlXG4gICAgbGV0IGV4YW1wbGVJbmRpY2F0b3IgPSBcIlwiO1xuICAgIGlmICh0aGlzLmFjdGl2ZVBlcnNvbmEpIHtcbiAgICAgIGNvbnN0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldCh0aGlzLmFjdGl2ZVBlcnNvbmEpO1xuICAgICAgaWYgKHBlcnNvbmEpIHtcbiAgICAgICAgZXhhbXBsZUluZGljYXRvciA9IGZvcm1hdEluZGljYXRvcih0aGlzLmluZGljYXRvckNvbmZpZywge1xuICAgICAgICAgIG5hbWU6IHBlcnNvbmEubWV0YWRhdGEubmFtZSxcbiAgICAgICAgICB2ZXJzaW9uOiBwZXJzb25hLm1ldGFkYXRhLnZlcnNpb24sXG4gICAgICAgICAgYXV0aG9yOiBwZXJzb25hLm1ldGFkYXRhLmF1dGhvcixcbiAgICAgICAgICBjYXRlZ29yeTogcGVyc29uYS5tZXRhZGF0YS5jYXRlZ29yeVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2hvdyBleGFtcGxlIHdpdGggc2FtcGxlIGRhdGFcbiAgICAgIGV4YW1wbGVJbmRpY2F0b3IgPSBmb3JtYXRJbmRpY2F0b3IodGhpcy5pbmRpY2F0b3JDb25maWcsIHtcbiAgICAgICAgbmFtZTogXCJFeGFtcGxlIFBlcnNvbmFcIixcbiAgICAgICAgdmVyc2lvbjogXCIxLjBcIixcbiAgICAgICAgYXV0aG9yOiBcIkB1c2VybmFtZVwiLFxuICAgICAgICBjYXRlZ29yeTogXCJjcmVhdGl2ZVwiXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+TiiBDdXJyZW50IEluZGljYXRvciBDb25maWd1cmF0aW9uOlxuXG5TZXR0aW5nczpcbi0gRW5hYmxlZDogJHt0aGlzLmluZGljYXRvckNvbmZpZy5lbmFibGVkfVxuLSBTdHlsZTogJHt0aGlzLmluZGljYXRvckNvbmZpZy5zdHlsZX1cbi0gU2hvdyBWZXJzaW9uOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dWZXJzaW9ufVxuLSBTaG93IEF1dGhvcjogJHt0aGlzLmluZGljYXRvckNvbmZpZy5zaG93QXV0aG9yfVxuLSBTaG93IENhdGVnb3J5OiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dDYXRlZ29yeX1cbi0gRW1vamk6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuZW1vaml9XG4tIEJyYWNrZXRzOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmJyYWNrZXRTdHlsZX1cbi0gU2VwYXJhdG9yOiBcIiR7dGhpcy5pbmRpY2F0b3JDb25maWcuc2VwYXJhdG9yfVwiXG4ke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmN1c3RvbUZvcm1hdCA/IGAtIEN1c3RvbSBGb3JtYXQ6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuY3VzdG9tRm9ybWF0fWAgOiAnJ31cblxuQXZhaWxhYmxlIHN0eWxlczpcbi0gZnVsbDogW/Cfjq0gUGVyc29uYSBOYW1lIHYxLjAgYnkgQGF1dGhvcl1cbi0gbWluaW1hbDog8J+OrSBQZXJzb25hIE5hbWVcbi0gY29tcGFjdDogW1BlcnNvbmEgTmFtZSB2MS4wXVxuLSBjdXN0b206IFVzZSB5b3VyIG93biBmb3JtYXQgd2l0aCBwbGFjZWhvbGRlcnNcblxuRXhhbXBsZSB3aXRoIGN1cnJlbnQgc2V0dGluZ3M6ICR7ZXhhbXBsZUluZGljYXRvciB8fCBcIihub25lIC0gaW5kaWNhdG9ycyBkaXNhYmxlZClcIn1cblxuUGxhY2Vob2xkZXJzIGZvciBjdXN0b20gZm9ybWF0OlxuLSB7ZW1vaml9IC0gVGhlIGNvbmZpZ3VyZWQgZW1vamlcbi0ge25hbWV9IC0gUGVyc29uYSBuYW1lXG4tIHt2ZXJzaW9ufSAtIFBlcnNvbmEgdmVyc2lvblxuLSB7YXV0aG9yfSAtIFBlcnNvbmEgYXV0aG9yXG4tIHtjYXRlZ29yeX0gLSBQZXJzb25hIGNhdGVnb3J5YFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEV4cG9ydCBhIHNpbmdsZSBwZXJzb25hXG4gICAqL1xuICBhc3luYyBleHBvcnRQZXJzb25hKHBlcnNvbmFOYW1lOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVXNlIGEgc2luZ2xlIGxvb2t1cCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnNcbiAgICAgIGxldCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQocGVyc29uYU5hbWUpO1xuICAgICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAgIC8vIFRyeSBieSBmaWxlbmFtZVxuICAgICAgICBwZXJzb25hID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PT0gcGVyc29uYU5hbWUpO1xuICAgICAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBQZXJzb25hIG5vdCBmb3VuZDogJHtwZXJzb25hTmFtZX1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhwb3J0RGF0YSA9IHRoaXMucGVyc29uYUV4cG9ydGVyLmV4cG9ydFBlcnNvbmEocGVyc29uYSk7XG4gICAgICBjb25zdCBiYXNlNjQgPSB0aGlzLnBlcnNvbmFFeHBvcnRlci50b0Jhc2U2NChleHBvcnREYXRhKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGVyc29uYUV4cG9ydGVyLmZvcm1hdEV4cG9ydFJlc3VsdChwZXJzb25hLCBiYXNlNjQpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7cmVzdWx0fWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEV4cG9ydCBmYWlsZWQ6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IGFsbCBwZXJzb25hc1xuICAgKi9cbiAgYXN5bmMgZXhwb3J0QWxsUGVyc29uYXMoaW5jbHVkZURlZmF1bHRzID0gdHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwZXJzb25hc0FycmF5ID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKTtcbiAgICAgIGNvbnN0IGJ1bmRsZSA9IHRoaXMucGVyc29uYUV4cG9ydGVyLmV4cG9ydEJ1bmRsZShwZXJzb25hc0FycmF5LCBpbmNsdWRlRGVmYXVsdHMpO1xuICAgICAgY29uc3QgYmFzZTY0ID0gdGhpcy5wZXJzb25hRXhwb3J0ZXIudG9CYXNlNjQoYnVuZGxlKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGVyc29uYUV4cG9ydGVyLmZvcm1hdEJ1bmRsZVJlc3VsdChidW5kbGUsIGJhc2U2NCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHtyZXN1bHR9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRXhwb3J0IGZhaWxlZDogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBwZXJzb25hXG4gICAqL1xuICBhc3luYyBpbXBvcnRQZXJzb25hKHNvdXJjZTogc3RyaW5nLCBvdmVyd3JpdGUgPSBmYWxzZSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMucGVyc29uYUltcG9ydGVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEltcG9ydCBmdW5jdGlvbmFsaXR5IG5vdCBhdmFpbGFibGUgKGluaXRpYWxpemF0aW9uIGluIHByb2dyZXNzKWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wZXJzb25hSW1wb3J0ZXIuaW1wb3J0UGVyc29uYShzb3VyY2UsIHRoaXMucGVyc29uYXMsIG92ZXJ3cml0ZSk7XG4gICAgICBcbiAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAvLyBSZWxvYWQgcGVyc29uYXMgdG8gaW5jbHVkZSB0aGUgbmV3IG9uZVxuICAgICAgICBhd2FpdCB0aGlzLmxvYWRQZXJzb25hcygpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgJHtyZXN1bHQubWVzc2FnZX1cXG5cXG5QZXJzb25hIFwiJHtyZXN1bHQucGVyc29uYT8ubWV0YWRhdGEubmFtZX1cIiBpcyBub3cgYXZhaWxhYmxlLlxcblRvdGFsIHBlcnNvbmFzOiAke3RoaXMucGVyc29uYXMuc2l6ZX1gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICR7cmVzdWx0Lm1lc3NhZ2V9YFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEltcG9ydCBmYWlsZWQ6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBQb3J0Zm9saW8gbWFuYWdlbWVudCBtZXRob2RzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBDaGVjayBwb3J0Zm9saW8gc3RhdHVzIGluY2x1ZGluZyByZXBvc2l0b3J5IGV4aXN0ZW5jZSBhbmQgc3luYyBpbmZvcm1hdGlvblxuICAgKi9cbiAgYXN5bmMgcG9ydGZvbGlvU3RhdHVzKHVzZXJuYW1lPzogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFZhbGlkYXRlIHVzZXJuYW1lIHBhcmFtZXRlciBpZiBwcm92aWRlZFxuICAgICAgaWYgKHVzZXJuYW1lICYmIHR5cGVvZiB1c2VybmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWxpZGF0ZVVzZXJuYW1lKHVzZXJuYW1lKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBJbnZhbGlkIHVzZXJuYW1lOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1ZhbGlkYXRpb24gZmFpbGVkJ31gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gR2V0IGN1cnJlbnQgdXNlciBpZiB1c2VybmFtZSBub3QgcHJvdmlkZWRcbiAgICAgIGxldCB0YXJnZXRVc2VybmFtZSA9IHVzZXJuYW1lO1xuICAgICAgaWYgKCF0YXJnZXRVc2VybmFtZSkge1xuICAgICAgICBjb25zdCBhdXRoU3RhdHVzID0gYXdhaXQgdGhpcy5naXRodWJBdXRoTWFuYWdlci5nZXRBdXRoU3RhdHVzKCk7XG4gICAgICAgIGlmICghYXV0aFN0YXR1cy5pc0F1dGhlbnRpY2F0ZWQgfHwgIWF1dGhTdGF0dXMudXNlcm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkdpdEh1YiBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICBg8J+UkCAqKlF1aWNrIFNldHVwKio6XFxuYCArXG4gICAgICAgICAgICBgMS4gUnVuOiBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCB0byBhdXRoZW50aWNhdGVcXG5gICtcbiAgICAgICAgICAgIGAyLiBPciB1c2U6IFxcYGdoIGF1dGggbG9naW4gLS13ZWJcXGAgaWYgeW91IGhhdmUgR2l0SHViIENMSVxcblxcbmAgK1xuICAgICAgICAgICAgYPCfk50gKipXaGF0IHRoaXMgZW5hYmxlcyoqOlxcbmAgK1xuICAgICAgICAgICAgYOKAoiBVcGxvYWQgZWxlbWVudHMgdG8geW91ciBHaXRIdWIgcG9ydGZvbGlvXFxuYCArXG4gICAgICAgICAgICBg4oCiIFN5bmMgeW91ciBsb2NhbCBwb3J0Zm9saW8gd2l0aCBHaXRIdWJcXG5gICtcbiAgICAgICAgICAgIGDigKIgU2hhcmUgZWxlbWVudHMgd2l0aCB0aGUgY29tbXVuaXR5XFxuXFxuYCArXG4gICAgICAgICAgICBg8J+MkCAqKk5lZWQgaGVscD8qKiBWaXNpdDogaHR0cHM6Ly9kb2NzLmFudGhyb3BpYy5jb20vZW4vZG9jcy9jbGF1ZGUtY29kZS9vYXV0aC1zZXR1cGBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRVc2VybmFtZSA9IGF1dGhTdGF0dXMudXNlcm5hbWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHBvcnRmb2xpbyBleGlzdHNcbiAgICAgIGNvbnN0IHsgUG9ydGZvbGlvUmVwb01hbmFnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vUG9ydGZvbGlvUmVwb01hbmFnZXIuanMnKTtcbiAgICAgIGNvbnN0IHsgZ2V0UG9ydGZvbGlvUmVwb3NpdG9yeU5hbWUgfSA9IGF3YWl0IGltcG9ydCgnLi9jb25maWcvcG9ydGZvbGlvQ29uZmlnLmpzJyk7XG4gICAgICBjb25zdCBwb3J0Zm9saW9NYW5hZ2VyID0gbmV3IFBvcnRmb2xpb1JlcG9NYW5hZ2VyKGdldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lKCkpO1xuICAgICAgY29uc3QgcG9ydGZvbGlvRXhpc3RzID0gYXdhaXQgcG9ydGZvbGlvTWFuYWdlci5jaGVja1BvcnRmb2xpb0V4aXN0cyh0YXJnZXRVc2VybmFtZSk7XG5cbiAgICAgIGxldCBzdGF0dXNUZXh0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+TiiAqKlBvcnRmb2xpbyBTdGF0dXMgZm9yICR7dGFyZ2V0VXNlcm5hbWV9KipcXG5cXG5gO1xuXG4gICAgICBpZiAocG9ydGZvbGlvRXhpc3RzKSB7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYOKchSAqKlJlcG9zaXRvcnkqKjogJHtwb3J0Zm9saW9NYW5hZ2VyLmdldFJlcG9zaXRvcnlOYW1lKCl9IGV4aXN0c1xcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYPCflJcgKipVUkwqKjogaHR0cHM6Ly9naXRodWIuY29tLyR7dGFyZ2V0VXNlcm5hbWV9LyR7cG9ydGZvbGlvTWFuYWdlci5nZXRSZXBvc2l0b3J5TmFtZSgpfVxcblxcbmA7XG4gICAgICAgIFxuICAgICAgICAvLyBHZXQgbG9jYWwgZWxlbWVudHMgY291bnRcbiAgICAgICAgY29uc3QgbG9jYWxQb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgICBjb25zdCBwZXJzb25hc1BhdGggPSBsb2NhbFBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5QRVJTT05BKTtcbiAgICAgICAgY29uc3Qgc2tpbGxzUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlNLSUxMKTtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVzUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlRFTVBMQVRFKTtcbiAgICAgICAgY29uc3QgYWdlbnRzUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLkFHRU5UKTtcbiAgICAgICAgY29uc3QgbWVtb3JpZXNQYXRoID0gbG9jYWxQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuTUVNT1JZKTtcbiAgICAgICAgY29uc3QgZW5zZW1ibGVzUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLkVOU0VNQkxFKTtcblxuICAgICAgICBjb25zdCBbcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMsIG1lbW9yaWVzLCBlbnNlbWJsZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIHRoaXMuY291bnRFbGVtZW50c0luRGlyKHBlcnNvbmFzUGF0aCksXG4gICAgICAgICAgdGhpcy5jb3VudEVsZW1lbnRzSW5EaXIoc2tpbGxzUGF0aCksXG4gICAgICAgICAgdGhpcy5jb3VudEVsZW1lbnRzSW5EaXIodGVtcGxhdGVzUGF0aCksXG4gICAgICAgICAgdGhpcy5jb3VudEVsZW1lbnRzSW5EaXIoYWdlbnRzUGF0aCksXG4gICAgICAgICAgdGhpcy5jb3VudEVsZW1lbnRzSW5EaXIobWVtb3JpZXNQYXRoKSxcbiAgICAgICAgICB0aGlzLmNvdW50RWxlbWVudHNJbkRpcihlbnNlbWJsZXNQYXRoKVxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCB0b3RhbEVsZW1lbnRzID0gcGVyc29uYXMgKyBza2lsbHMgKyB0ZW1wbGF0ZXMgKyBhZ2VudHMgKyBtZW1vcmllcyArIGVuc2VtYmxlcztcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+TiCAqKkxvY2FsIEVsZW1lbnRzKio6XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgUGVyc29uYXM6ICR7cGVyc29uYXN9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgU2tpbGxzOiAke3NraWxsc31cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBUZW1wbGF0ZXM6ICR7dGVtcGxhdGVzfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIEFnZW50czogJHthZ2VudHN9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgTWVtb3JpZXM6ICR7bWVtb3JpZXN9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgRW5zZW1ibGVzOiAke2Vuc2VtYmxlc31cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiAqKlRvdGFsKio6ICR7dG90YWxFbGVtZW50c31cXG5cXG5gO1xuXG4gICAgICAgIHN0YXR1c1RleHQgKz0gYPCflIQgKipTeW5jIFN0YXR1cyoqOiBVc2Ugc3luY19wb3J0Zm9saW8gdG8gdXBkYXRlIEdpdEh1YlxcbmA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDinYwgKipSZXBvc2l0b3J5Kio6IE5vIHBvcnRmb2xpbyBmb3VuZFxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYPCfkqEgKipOZXh0IFN0ZXAqKjogVXNlIGluaXRfcG9ydGZvbGlvIHRvIGNyZWF0ZSBvbmVcXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+TnSAqKldoYXQgeW91J2xsIGdldCoqOlxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIEdpdEh1YiByZXBvc2l0b3J5IGZvciB5b3VyIGVsZW1lbnRzXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgT3JnYW5pemVkIGZvbGRlciBzdHJ1Y3R1cmVcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBSRUFETUUgd2l0aCB1c2FnZSBpbnN0cnVjdGlvbnNcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBFYXN5IHNoYXJpbmcgYW5kIGJhY2t1cFxcbmA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogc3RhdHVzVGV4dFxuICAgICAgICB9XVxuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBGYWlsZWQgdG8gY2hlY2sgcG9ydGZvbGlvIHN0YXR1czogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgbmV3IEdpdEh1YiBwb3J0Zm9saW8gcmVwb3NpdG9yeVxuICAgKi9cbiAgYXN5bmMgaW5pdFBvcnRmb2xpbyhvcHRpb25zOiB7cmVwb3NpdG9yeU5hbWU/OiBzdHJpbmc7IHByaXZhdGU/OiBib29sZWFuOyBkZXNjcmlwdGlvbj86IHN0cmluZ30pIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgYXV0aGVudGljYXRpb25cbiAgICAgIGNvbnN0IGF1dGhTdGF0dXMgPSBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmdldEF1dGhTdGF0dXMoKTtcbiAgICAgIGlmICghYXV0aFN0YXR1cy5pc0F1dGhlbnRpY2F0ZWQgfHwgIWF1dGhTdGF0dXMudXNlcm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipHaXRIdWIgQXV0aGVudGljYXRpb24gUmVxdWlyZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgYPCflJAgKipRdWljayBTZXR1cCoqOlxcbmAgK1xuICAgICAgICAgICAgYDEuIFJ1bjogXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgdG8gYXV0aGVudGljYXRlXFxuYCArXG4gICAgICAgICAgICBgMi4gT3IgdXNlOiBcXGBnaCBhdXRoIGxvZ2luIC0td2ViXFxgIGlmIHlvdSBoYXZlIEdpdEh1YiBDTElcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn5OdICoqV2hhdCB0aGlzIGVuYWJsZXMqKjpcXG5gICtcbiAgICAgICAgICAgIGDigKIgVXBsb2FkIGVsZW1lbnRzIHRvIHlvdXIgR2l0SHViIHBvcnRmb2xpb1xcbmAgK1xuICAgICAgICAgICAgYOKAoiBTeW5jIHlvdXIgbG9jYWwgcG9ydGZvbGlvIHdpdGggR2l0SHViXFxuYCArXG4gICAgICAgICAgICBg4oCiIFNoYXJlIGVsZW1lbnRzIHdpdGggdGhlIGNvbW11bml0eVxcblxcbmAgK1xuICAgICAgICAgICAgYPCfjJAgKipOZWVkIGhlbHA/KiogVmlzaXQ6IGh0dHBzOi8vZG9jcy5hbnRocm9waWMuY29tL2VuL2RvY3MvY2xhdWRlLWNvZGUvb2F1dGgtc2V0dXBgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXNlcm5hbWUgPSBhdXRoU3RhdHVzLnVzZXJuYW1lO1xuXG4gICAgICAvLyBDaGVjayBpZiBwb3J0Zm9saW8gYWxyZWFkeSBleGlzdHNcbiAgICAgIGNvbnN0IHsgUG9ydGZvbGlvUmVwb01hbmFnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vUG9ydGZvbGlvUmVwb01hbmFnZXIuanMnKTtcbiAgICAgIGNvbnN0IHsgZ2V0UG9ydGZvbGlvUmVwb3NpdG9yeU5hbWUgfSA9IGF3YWl0IGltcG9ydCgnLi9jb25maWcvcG9ydGZvbGlvQ29uZmlnLmpzJyk7XG4gICAgICBjb25zdCBwb3J0Zm9saW9NYW5hZ2VyID0gbmV3IFBvcnRmb2xpb1JlcG9NYW5hZ2VyKGdldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lKCkpO1xuICAgICAgY29uc3QgcG9ydGZvbGlvRXhpc3RzID0gYXdhaXQgcG9ydGZvbGlvTWFuYWdlci5jaGVja1BvcnRmb2xpb0V4aXN0cyh1c2VybmFtZSk7XG5cbiAgICAgIGlmIChwb3J0Zm9saW9FeGlzdHMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgUG9ydGZvbGlvIGFscmVhZHkgZXhpc3RzIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS8ke3BvcnRmb2xpb01hbmFnZXIuZ2V0UmVwb3NpdG9yeU5hbWUoKX1cXG5cXG5Vc2UgcG9ydGZvbGlvX3N0YXR1cyB0byBzZWUgZGV0YWlscyBvciBzeW5jX3BvcnRmb2xpbyB0byB1cGRhdGUgaXQuYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBwb3J0Zm9saW8gd2l0aCBleHBsaWNpdCBjb25zZW50XG4gICAgICBjb25zdCBwb3J0Zm9saW9VcmwgPSBhd2FpdCBwb3J0Zm9saW9NYW5hZ2VyLmNyZWF0ZVBvcnRmb2xpbyh1c2VybmFtZSwgdHJ1ZSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+OiSAqKlBvcnRmb2xpbyBDcmVhdGVkIFN1Y2Nlc3NmdWxseSEqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGDinIUgKipSZXBvc2l0b3J5Kio6IGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS8ke3BvcnRmb2xpb01hbmFnZXIuZ2V0UmVwb3NpdG9yeU5hbWUoKX1cXG5gICtcbiAgICAgICAgICAgICAgICBg8J+TgSAqKlN0cnVjdHVyZSoqOiBPcmdhbml6ZWQgZm9sZGVycyBmb3IgYWxsIGVsZW1lbnQgdHlwZXNcXG5gICtcbiAgICAgICAgICAgICAgICBg8J+TnSAqKlJFQURNRSoqOiBVc2FnZSBpbnN0cnVjdGlvbnMgaW5jbHVkZWRcXG5gICtcbiAgICAgICAgICAgICAgICBg8J+UhCAqKk5leHQgU3RlcCoqOiBVc2Ugc3luY19wb3J0Zm9saW8gdG8gdXBsb2FkIHlvdXIgZWxlbWVudHNcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgWW91ciBwb3J0Zm9saW8gaXMgcmVhZHkgZm9yIHNoYXJpbmcgeW91ciBEb2xsaG91c2VNQ1AgY3JlYXRpb25zIWBcbiAgICAgICAgfV1cbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRmFpbGVkIHRvIGluaXRpYWxpemUgcG9ydGZvbGlvOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBwb3J0Zm9saW8gc2V0dGluZ3NcbiAgICovXG4gIGFzeW5jIHBvcnRmb2xpb0NvbmZpZyhvcHRpb25zOiB7YXV0b1N5bmM/OiBib29sZWFuOyBkZWZhdWx0VmlzaWJpbGl0eT86IHN0cmluZzsgYXV0b1N1Ym1pdD86IGJvb2xlYW47IHJlcG9zaXRvcnlOYW1lPzogc3RyaW5nfSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gQ29uZmlnTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgYXdhaXQgY29uZmlnTWFuYWdlci5pbml0aWFsaXplKCk7XG5cbiAgICAgIGxldCBzdGF0dXNUZXh0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pqZ77iPICoqUG9ydGZvbGlvIENvbmZpZ3VyYXRpb24qKlxcblxcbmA7XG5cbiAgICAgIC8vIFVwZGF0ZSBzZXR0aW5ncyBpZiBwcm92aWRlZFxuICAgICAgaWYgKG9wdGlvbnMuYXV0b1N5bmMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBUaGlzIHdvdWxkIGJlIGltcGxlbWVudGVkIHdoZW4gYXV0by1zeW5jIGZlYXR1cmUgaXMgYWRkZWRcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+UhCBBdXRvLXN5bmM6ICR7b3B0aW9ucy5hdXRvU3luYyA/ICdFbmFibGVkJyA6ICdEaXNhYmxlZCd9IChDb21pbmcgc29vbilcXG5gO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5kZWZhdWx0VmlzaWJpbGl0eSkge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDwn5SSIERlZmF1bHQgdmlzaWJpbGl0eTogJHtvcHRpb25zLmRlZmF1bHRWaXNpYmlsaXR5fVxcbmA7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmF1dG9TdWJtaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBOb3RlOiBBdXRvLXN1Ym1pdCBjb25maWd1cmF0aW9uIHdvdWxkIGJlIGltcGxlbWVudGVkIGhlcmVcbiAgICAgICAgLy8gRm9yIG5vdywgd2UnbGwganVzdCBzaG93IHRoZSBzdGF0dXNcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+TpCBBdXRvLXN1Ym1pdCB0byBjb2xsZWN0aW9uOiAke29wdGlvbnMuYXV0b1N1Ym1pdCA/ICdFbmFibGVkJyA6ICdEaXNhYmxlZCd9IChDb21pbmcgc29vbilcXG5gO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5yZXBvc2l0b3J5TmFtZSkge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDwn5OBIFJlcG9zaXRvcnkgbmFtZTogJHtvcHRpb25zLnJlcG9zaXRvcnlOYW1lfSAoQ3VzdG9tIG5hbWVzIGNvbWluZyBzb29uKVxcbmA7XG4gICAgICB9XG5cbiAgICAgIC8vIFNob3cgY3VycmVudCBjb25maWd1cmF0aW9uXG4gICAgICBzdGF0dXNUZXh0ICs9IGBcXG7wn5OLICoqQ3VycmVudCBTZXR0aW5ncyoqOlxcbmA7XG4gICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBBdXRvLXN1Ym1pdDogRGlzYWJsZWQgKENvbWluZyBzb29uKVxcbmA7XG4gICAgICBjb25zdCB7IGdldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lIH0gPSBhd2FpdCBpbXBvcnQoJy4vY29uZmlnL3BvcnRmb2xpb0NvbmZpZy5qcycpO1xuICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgUmVwb3NpdG9yeSBuYW1lOiAke2dldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lKCl9XFxuYDtcbiAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIERlZmF1bHQgdmlzaWJpbGl0eTogcHVibGljXFxuYDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBzdGF0dXNUZXh0XG4gICAgICAgIH1dXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEZhaWxlZCB0byBjb25maWd1cmUgcG9ydGZvbGlvOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgcG9ydGZvbGlvIHdpdGggR2l0SHViXG4gICAqL1xuICBhc3luYyBzeW5jUG9ydGZvbGlvKG9wdGlvbnM6IHtcbiAgICBkaXJlY3Rpb246IHN0cmluZzsgXG4gICAgbW9kZT86IHN0cmluZztcbiAgICBmb3JjZTogYm9vbGVhbjsgXG4gICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIGNvbmZpcm1EZWxldGlvbnM/OiBib29sZWFuO1xuICB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIGF1dGhlbnRpY2F0aW9uXG4gICAgICBjb25zdCBhdXRoU3RhdHVzID0gYXdhaXQgdGhpcy5naXRodWJBdXRoTWFuYWdlci5nZXRBdXRoU3RhdHVzKCk7XG4gICAgICBpZiAoIWF1dGhTdGF0dXMuaXNBdXRoZW50aWNhdGVkIHx8ICFhdXRoU3RhdHVzLnVzZXJuYW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqR2l0SHViIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkKipcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn5SQICoqUXVpY2sgU2V0dXAqKjpcXG5gICtcbiAgICAgICAgICAgIGAxLiBSdW46IFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIHRvIGF1dGhlbnRpY2F0ZVxcbmAgK1xuICAgICAgICAgICAgYDIuIE9yIHVzZTogXFxgZ2ggYXV0aCBsb2dpbiAtLXdlYlxcYCBpZiB5b3UgaGF2ZSBHaXRIdWIgQ0xJXFxuXFxuYCArXG4gICAgICAgICAgICBg8J+TnSAqKldoYXQgdGhpcyBlbmFibGVzKio6XFxuYCArXG4gICAgICAgICAgICBg4oCiIFVwbG9hZCBlbGVtZW50cyB0byB5b3VyIEdpdEh1YiBwb3J0Zm9saW9cXG5gICtcbiAgICAgICAgICAgIGDigKIgU3luYyB5b3VyIGxvY2FsIHBvcnRmb2xpbyB3aXRoIEdpdEh1YlxcbmAgK1xuICAgICAgICAgICAgYOKAoiBTaGFyZSBlbGVtZW50cyB3aXRoIHRoZSBjb21tdW5pdHlcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn4yQICoqTmVlZCBoZWxwPyoqIFZpc2l0OiBodHRwczovL2RvY3MuYW50aHJvcGljLmNvbS9lbi9kb2NzL2NsYXVkZS1jb2RlL29hdXRoLXNldHVwYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVzZXJuYW1lID0gYXV0aFN0YXR1cy51c2VybmFtZTtcblxuICAgICAgLy8gQ2hlY2sgaWYgcG9ydGZvbGlvIGV4aXN0c1xuICAgICAgY29uc3QgeyBQb3J0Zm9saW9SZXBvTWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KCcuL3BvcnRmb2xpby9Qb3J0Zm9saW9SZXBvTWFuYWdlci5qcycpO1xuICAgICAgY29uc3QgeyBnZXRQb3J0Zm9saW9SZXBvc2l0b3J5TmFtZSB9ID0gYXdhaXQgaW1wb3J0KCcuL2NvbmZpZy9wb3J0Zm9saW9Db25maWcuanMnKTtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb01hbmFnZXIgPSBuZXcgUG9ydGZvbGlvUmVwb01hbmFnZXIoZ2V0UG9ydGZvbGlvUmVwb3NpdG9yeU5hbWUoKSk7XG4gICAgICBcbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogU2V0IEdpdEh1YiB0b2tlbiBsaWtlIHN1Ym1pdF9jb2xsZWN0aW9uX2NvbnRlbnQgZG9lc1xuICAgICAgLy8gV2l0aG91dCB0aGlzLCBjaGVja1BvcnRmb2xpb0V4aXN0cyBmYWlscyBiZWNhdXNlIGl0IGNhbid0IGF1dGhlbnRpY2F0ZSB0byBHaXRIdWJcbiAgICAgIGNvbnN0IHsgVG9rZW5NYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoJy4vc2VjdXJpdHkvdG9rZW5NYW5hZ2VyLmpzJyk7XG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IFRva2VuTWFuYWdlci5nZXRHaXRIdWJUb2tlbkFzeW5jKCk7XG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEdpdEh1YiBhdXRoZW50aWNhdGlvbiByZXF1aXJlZC4gUGxlYXNlIGF1dGhlbnRpY2F0ZSBmaXJzdCB1c2luZyBzZXR1cF9naXRodWJfYXV0aC5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHBvcnRmb2xpb01hbmFnZXIuc2V0VG9rZW4odG9rZW4pO1xuICAgICAgXG4gICAgICBjb25zdCBwb3J0Zm9saW9FeGlzdHMgPSBhd2FpdCBwb3J0Zm9saW9NYW5hZ2VyLmNoZWNrUG9ydGZvbGlvRXhpc3RzKHVzZXJuYW1lKTtcblxuICAgICAgaWYgKCFwb3J0Zm9saW9FeGlzdHMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipObyBQb3J0Zm9saW8gUmVwb3NpdG9yeSBGb3VuZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+PoCAqKlF1aWNrIFNldHVwKio6XFxuYCArXG4gICAgICAgICAgICAgICAgICBgMS4gUnVuOiBcXGBpbml0X3BvcnRmb2xpb1xcYCB0byBjcmVhdGUgeW91ciBHaXRIdWIgcG9ydGZvbGlvXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMi4gVGhpcyBjcmVhdGVzOiBodHRwczovL2dpdGh1Yi5jb20vW3VzZXJuYW1lXS8ke3BvcnRmb2xpb01hbmFnZXIuZ2V0UmVwb3NpdG9yeU5hbWUoKX1cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDwn5OdICoqV2hhdCB5b3UnbGwgZ2V0Kio6XFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIFB1YmxpYyByZXBvc2l0b3J5IHRvIHNob3djYXNlIHlvdXIgQUkgZWxlbWVudHNcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgT3JnYW5pemVkIHN0cnVjdHVyZSBmb3IgcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhbmQgYWdlbnRzXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIEF1dG9tYXRpYyBzeW5jaW5nIG9mIHlvdXIgbG9jYWwgcG9ydGZvbGlvXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIENvbW11bml0eSBzaGFyaW5nIGNhcGFiaWxpdGllc1xcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCfmoAgKipBZnRlciBzZXR1cCoqOiBVc2UgXFxgc3luY19wb3J0Zm9saW9cXGAgdG8gdXBsb2FkIHlvdXIgY29udGVudCFgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuZHJ5UnVuKSB7XG4gICAgICAgIC8vIFNob3cgd2hhdCB3b3VsZCBiZSBzeW5jZWRcbiAgICAgICAgY29uc3QgbG9jYWxQb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGVDb3VudHM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz4gPSB7fTtcbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGVFcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIFxuICAgICAgICAvLyBHZXQgZWxlbWVudCBjb3VudHMgd2l0aCBiZXR0ZXIgZXJyb3IgaGFuZGxpbmdcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50VHlwZSBvZiBbJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnLCAnYWdlbnRzJ10pIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCB0aGlzLmdldEVsZW1lbnRzTGlzdChlbGVtZW50VHlwZSk7XG4gICAgICAgICAgICBlbGVtZW50VHlwZUNvdW50c1tlbGVtZW50VHlwZV0gPSBlbGVtZW50cy5sZW5ndGg7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgZWxlbWVudFR5cGVDb3VudHNbZWxlbWVudFR5cGVdID0gJ0VSUk9SJztcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlRXJyb3JzLnB1c2goYCR7ZWxlbWVudFR5cGV9OiAke2Vycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkcnlSdW5UZXh0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+UjSAqKkRyeSBSdW4gLSBQb3J0Zm9saW8gU3luYyBQcmV2aWV3KipcXG5cXG5gO1xuICAgICAgICBkcnlSdW5UZXh0ICs9IGDwn5OkICoqRWxlbWVudHMgdG8gc3luYyoqICgke29wdGlvbnMuZGlyZWN0aW9ufSk6XFxuYDtcbiAgICAgICAgZHJ5UnVuVGV4dCArPSBgICDigKIgUGVyc29uYXM6ICR7ZWxlbWVudFR5cGVDb3VudHMucGVyc29uYXN9XFxuYDtcbiAgICAgICAgZHJ5UnVuVGV4dCArPSBgICDigKIgU2tpbGxzOiAke2VsZW1lbnRUeXBlQ291bnRzLnNraWxsc31cXG5gO1xuICAgICAgICBkcnlSdW5UZXh0ICs9IGAgIOKAoiBUZW1wbGF0ZXM6ICR7ZWxlbWVudFR5cGVDb3VudHMudGVtcGxhdGVzfVxcbmA7XG4gICAgICAgIGRyeVJ1blRleHQgKz0gYCAg4oCiIEFnZW50czogJHtlbGVtZW50VHlwZUNvdW50cy5hZ2VudHN9XFxuXFxuYDtcbiAgICAgICAgXG4gICAgICAgIC8vIEluY2x1ZGUgYW55IGVycm9ycyBlbmNvdW50ZXJlZCBkdXJpbmcgZHJ5IHJ1blxuICAgICAgICBpZiAoZWxlbWVudFR5cGVFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGRyeVJ1blRleHQgKz0gYOKaoO+4jyAqKkVycm9ycyBmb3VuZCBkdXJpbmcgcHJldmlldzoqKlxcbmA7XG4gICAgICAgICAgZm9yIChjb25zdCBlcnJvciBvZiBlbGVtZW50VHlwZUVycm9ycykge1xuICAgICAgICAgICAgZHJ5UnVuVGV4dCArPSBgICDigKIgJHtlcnJvcn1cXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkcnlSdW5UZXh0ICs9IGBcXG5gO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBkcnlSdW5UZXh0ICs9IGDwn46vICoqVGFyZ2V0Kio6IGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS8ke3BvcnRmb2xpb01hbmFnZXIuZ2V0UmVwb3NpdG9yeU5hbWUoKX1cXG5gO1xuICAgICAgICBkcnlSdW5UZXh0ICs9IGDimqDvuI8gICoqTm90ZSoqOiBUaGlzIGlzIGEgcHJldmlldy4gUmVtb3ZlIGRyeV9ydW49dHJ1ZSB0byBwZXJmb3JtIGFjdHVhbCBzeW5jLmA7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBkcnlSdW5UZXh0XG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIG5vdywgaW1wbGVtZW50IGJhc2ljIHB1c2ggZnVuY3Rpb25hbGl0eVxuICAgICAgaWYgKG9wdGlvbnMuZGlyZWN0aW9uID09PSAncHVzaCcgfHwgb3B0aW9ucy5kaXJlY3Rpb24gPT09ICdib3RoJykge1xuICAgICAgICBsZXQgc3luY0NvdW50ID0gMDtcbiAgICAgICAgbGV0IHRvdGFsRWxlbWVudHMgPSAwO1xuICAgICAgICBsZXQgc3luY1RleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5SEICoqU3luY2luZyBQb3J0Zm9saW8uLi4qKlxcblxcbmA7XG5cbiAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IENhbGN1bGF0ZSB0b3RhbCBlbGVtZW50cyBmb3IgcHJvZ3Jlc3MgdHJhY2tpbmdcbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGVzID0gWydwZXJzb25hcycsICdza2lsbHMnLCAndGVtcGxhdGVzJywgJ2FnZW50cyddIGFzIGNvbnN0O1xuICAgICAgICBjb25zdCBlbGVtZW50Q291bnRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gICAgICAgIGNvbnN0IGZhaWxlZEVsZW1lbnRzOiBBcnJheTx7dHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGVycm9yOiBzdHJpbmd9PiA9IFtdO1xuICAgICAgICBcbiAgICAgICAgLy8gUHJlLWNhbGN1bGF0ZSB0b3RhbHMgZm9yIGJldHRlciBwcm9ncmVzcyBpbmRpY2F0b3JzXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3luY1RleHQgKz0gYPCfk4ogKipDYWxjdWxhdGluZyBzeW5jIHNjb3BlLi4uKipcXG5gO1xuICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudFR5cGUgb2YgZWxlbWVudFR5cGVzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGF3YWl0IHRoaXMuZ2V0RWxlbWVudHNMaXN0KGVsZW1lbnRUeXBlKTtcbiAgICAgICAgICAgICAgZWxlbWVudENvdW50c1tlbGVtZW50VHlwZV0gPSBlbGVtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgIHRvdGFsRWxlbWVudHMgKz0gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgICBlbGVtZW50Q291bnRzW2VsZW1lbnRUeXBlXSA9IDA7XG4gICAgICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gY291bnQgJHtlbGVtZW50VHlwZX1gLCB7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBzeW5jVGV4dCArPSBgXFxu8J+OryAqKlJlYWR5IHRvIHN5bmMgJHt0b3RhbEVsZW1lbnRzfSBlbGVtZW50czoqKlxcbmA7XG4gICAgICAgICAgZm9yIChjb25zdCBbdHlwZSwgY291bnRdIG9mIE9iamVjdC5lbnRyaWVzKGVsZW1lbnRDb3VudHMpKSB7XG4gICAgICAgICAgICBjb25zdCBpY29uID0gY291bnQgPiAwID8gJ+KchScgOiAn4pqqJztcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgICR7aWNvbn0gJHt0eXBlfTogJHtjb3VudH0gZWxlbWVudHNcXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzeW5jVGV4dCArPSBgXFxu8J+agCAqKlN0YXJ0aW5nIHN5bmMgcHJvY2Vzcy4uLioqXFxuXFxuYDtcbiAgICAgICAgICBcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGBcXG7imqDvuI8gKipXYXJuaW5nKio6IENvdWxkIG5vdCBjYWxjdWxhdGUgc3luYyBzY29wZTogJHtlcnJvci5tZXNzYWdlfVxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBQcm9jZXNzIGVhY2ggZWxlbWVudCB0eXBlIHdpdGggcHJvZ3Jlc3MgdHJhY2tpbmdcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50VHlwZSBvZiBlbGVtZW50VHlwZXMpIHtcbiAgICAgICAgICBjb25zdCB0eXBlQ291bnQgPSBlbGVtZW50Q291bnRzW2VsZW1lbnRUeXBlXSB8fCAwO1xuICAgICAgICAgIGlmICh0eXBlQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGDij6kgKipTa2lwcGluZyAke2VsZW1lbnRUeXBlfSoqIChubyBlbGVtZW50cyBmb3VuZClcXG5gO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn5OBICoqUHJvY2Vzc2luZyAke2VsZW1lbnRUeXBlfSoqICgke3R5cGVDb3VudH0gZWxlbWVudHMpOlxcbmA7XG4gICAgICAgICAgbGV0IHR5cGVTdWNjZXNzQ291bnQgPSAwO1xuICAgICAgICAgIFxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGF3YWl0IHRoaXMuZ2V0RWxlbWVudHNMaXN0KGVsZW1lbnRUeXBlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50TmFtZSA9IGVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgICBjb25zdCBwcm9ncmVzcyA9IGBbJHtpICsgMX0vJHtlbGVtZW50cy5sZW5ndGh9XWA7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBTaG93IGluZGl2aWR1YWwgZWxlbWVudCBwcm9ncmVzc1xuICAgICAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgICR7cHJvZ3Jlc3N9IPCflIQgU3luY2luZyBcIiR7ZWxlbWVudE5hbWV9XCIuLi5gO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIExvYWQgZWxlbWVudCBhbmQgc2F2ZSB0byBwb3J0Zm9saW9cbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gYXdhaXQgdGhpcy5sb2FkRWxlbWVudEJ5VHlwZShlbGVtZW50TmFtZSwgZWxlbWVudFR5cGUpO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBwb3J0Zm9saW9NYW5hZ2VyLnNhdmVFbGVtZW50KGVsZW1lbnQsIHRydWUpOyAvLyBFeHBsaWNpdCBjb25zZW50XG4gICAgICAgICAgICAgICAgICBzeW5jQ291bnQrKztcbiAgICAgICAgICAgICAgICAgIHR5cGVTdWNjZXNzQ291bnQrKztcbiAgICAgICAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAg4pyFXFxuYDtcbiAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgU3VjY2Vzc2Z1bGx5IHN5bmNlZCAke2VsZW1lbnRUeXBlfS8ke2VsZW1lbnROYW1lfWApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzeW5jVGV4dCArPSBgIOKdjCAobnVsbCBlbGVtZW50KVxcbmA7XG4gICAgICAgICAgICAgICAgICBmYWlsZWRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZWxlbWVudFR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnROYW1lLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogJ0VsZW1lbnQgbG9hZGVkIGFzIG51bGwvdW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChlbGVtZW50RXJyb3I6IGFueSkge1xuICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZXJyb3IgY29kZSBpZiBwcmVzZW50XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZWxlbWVudEVycm9yLmNvZGUgfHwgKGVsZW1lbnRFcnJvci5tZXNzYWdlPy5tYXRjaCgvXFxbKFtBLVpfXStfXFxkKylcXF0vKT8uWzFdKSB8fCAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlbGVtZW50RXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvciBkdXJpbmcgZWxlbWVudCBzeW5jJztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBDbGVhbiB1cCBlcnJvciBtZXNzYWdlIGZvciBkaXNwbGF5IChyZW1vdmUgY29kZSBpZiBhbHJlYWR5IGV4dHJhY3RlZClcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5TWVzc2FnZSA9IGVycm9yQ29kZSBcbiAgICAgICAgICAgICAgICAgID8gZXJyb3JNZXNzYWdlLnJlcGxhY2UoL1xcW1tBLVpfXStfXFxkK1xcXVxccyovLCAnJylcbiAgICAgICAgICAgICAgICAgIDogZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIFNob3cgZXJyb3IgY29kZSBpbiBvdXRwdXQgZm9yIGJldHRlciBkaWFnbm9zdGljc1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yT3V0cHV0ID0gZXJyb3JDb2RlIFxuICAgICAgICAgICAgICAgICAgPyBgJHtlcnJvckNvZGV9OiAke2Rpc3BsYXlNZXNzYWdlfWBcbiAgICAgICAgICAgICAgICAgIDogZGlzcGxheU1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgc3luY1RleHQgKz0gYCDinYwgKCR7ZXJyb3JPdXRwdXR9KVxcbmA7XG4gICAgICAgICAgICAgICAgZmFpbGVkRWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBlbGVtZW50VHlwZSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnROYW1lLFxuICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yT3V0cHV0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBzeW5jICR7ZWxlbWVudFR5cGV9LyR7ZWxlbWVudE5hbWV9YCwgeyBcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICAgICAgICBlbGVtZW50TmFtZSxcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRUeXBlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IFNob3cgY29tcGxldGlvbiBzdW1tYXJ5IGZvciBlYWNoIHR5cGVcbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NSYXRlID0gZWxlbWVudHMubGVuZ3RoID4gMCA/IE1hdGgucm91bmQoKHR5cGVTdWNjZXNzQ291bnQgLyBlbGVtZW50cy5sZW5ndGgpICogMTAwKSA6IDA7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXNJY29uID0gc3VjY2Vzc1JhdGUgPT09IDEwMCA/ICfwn46JJyA6IHN1Y2Nlc3NSYXRlID4gNTAgPyAn4pqg77iPJyA6ICfinYwnO1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYCAgJHtzdGF0dXNJY29ufSAqKiR7ZWxlbWVudFR5cGV9IGNvbXBsZXRlKio6ICR7dHlwZVN1Y2Nlc3NDb3VudH0vJHtlbGVtZW50cy5sZW5ndGh9IHN5bmNlZCAoJHtzdWNjZXNzUmF0ZX0lKVxcblxcbmA7XG4gICAgICAgICAgfSBjYXRjaCAobGlzdEVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBCZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIGZvciBsaXN0IGZhaWx1cmVzXG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBsaXN0RXJyb3IubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGdldCBlbGVtZW50cyBsaXN0JztcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKdjCAqKkZhaWxlZCB0byBsaXN0ICR7ZWxlbWVudFR5cGV9Kio6ICR7ZXJyb3JNZXNzYWdlfVxcblxcbmA7XG4gICAgICAgICAgICBmYWlsZWRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogZWxlbWVudFR5cGUsXG4gICAgICAgICAgICAgIG5hbWU6ICdBTEwnLFxuICAgICAgICAgICAgICBlcnJvcjogYEZhaWxlZCB0byBsaXN0ICR7ZWxlbWVudFR5cGV9OiAke2Vycm9yTWVzc2FnZX1gXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gZ2V0ICR7ZWxlbWVudFR5cGV9IGxpc3RgLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IEVuaGFuY2VkIGZpbmFsIHN1bW1hcnkgd2l0aCBhY3Rpb25hYmxlIGluc2lnaHRzXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NSYXRlID0gdG90YWxFbGVtZW50cyA+IDAgPyBNYXRoLnJvdW5kKChzeW5jQ291bnQgLyB0b3RhbEVsZW1lbnRzKSAqIDEwMCkgOiAwO1xuICAgICAgICBjb25zdCBzdW1tYXJ5SWNvbiA9IHN1Y2Nlc3NSYXRlID09PSAxMDAgPyAn8J+OiScgOiBzdWNjZXNzUmF0ZSA+PSA4MCA/ICfinIUnIDogc3VjY2Vzc1JhdGUgPj0gNTAgPyAn4pqg77iPJyA6ICfinYwnO1xuICAgICAgICBcbiAgICAgICAgc3luY1RleHQgKz0gYCR7c3VtbWFyeUljb259ICoqU3luYyBDb21wbGV0ZSEqKlxcbmA7XG4gICAgICAgIHN5bmNUZXh0ICs9IGDwn5OKICoqT3ZlcmFsbCBSZXN1bHRzKio6ICR7c3luY0NvdW50fS8ke3RvdGFsRWxlbWVudHN9IGVsZW1lbnRzIHN5bmNlZCAoJHtzdWNjZXNzUmF0ZX0lKVxcbmA7XG4gICAgICAgIHN5bmNUZXh0ICs9IGDwn4+gICoqUG9ydGZvbGlvKio6IGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS8ke3BvcnRmb2xpb01hbmFnZXIuZ2V0UmVwb3NpdG9yeU5hbWUoKX1cXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgLy8gSW5jbHVkZSBmYWlsZWQgZWxlbWVudHMgaW5mb3JtYXRpb24gd2l0aCBhY3Rpb25hYmxlIHN1Z2dlc3Rpb25zXG4gICAgICAgIGlmIChmYWlsZWRFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc3luY1RleHQgKz0gYOKaoO+4jyAqKklzc3VlcyBFbmNvdW50ZXJlZCoqICgke2ZhaWxlZEVsZW1lbnRzLmxlbmd0aH0gcHJvYmxlbXMpOlxcblxcbmA7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gR3JvdXAgZmFpbHVyZXMgYnkgdHlwZSBmb3IgYmV0dGVyIG9yZ2FuaXphdGlvblxuICAgICAgICAgIGNvbnN0IGZhaWx1cmVzQnlUeXBlOiBSZWNvcmQ8c3RyaW5nLCBBcnJheTx7bmFtZTogc3RyaW5nLCBlcnJvcjogc3RyaW5nfT4+ID0ge307XG4gICAgICAgICAgZm9yIChjb25zdCBmYWlsZWQgb2YgZmFpbGVkRWxlbWVudHMpIHtcbiAgICAgICAgICAgIGlmICghZmFpbHVyZXNCeVR5cGVbZmFpbGVkLnR5cGVdKSB7XG4gICAgICAgICAgICAgIGZhaWx1cmVzQnlUeXBlW2ZhaWxlZC50eXBlXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmFpbHVyZXNCeVR5cGVbZmFpbGVkLnR5cGVdLnB1c2goeyBuYW1lOiBmYWlsZWQubmFtZSwgZXJyb3I6IGZhaWxlZC5lcnJvciB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgZm9yIChjb25zdCBbdHlwZSwgZmFpbHVyZXNdIG9mIE9iamVjdC5lbnRyaWVzKGZhaWx1cmVzQnlUeXBlKSkge1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYPCfk4EgKioke3R5cGV9KiogKCR7ZmFpbHVyZXMubGVuZ3RofSBpc3N1ZXMpOlxcbmA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgZmFpbHVyZXMpIHtcbiAgICAgICAgICAgICAgaWYgKGZhaWx1cmUubmFtZSA9PT0gJ0FMTCcpIHtcbiAgICAgICAgICAgICAgICBzeW5jVGV4dCArPSBgICDinYwgJHtmYWlsdXJlLmVycm9yfVxcbmA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4p2MIFwiJHtmYWlsdXJlLm5hbWV9XCI6ICR7ZmFpbHVyZS5lcnJvcn1cXG5gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBgXFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IEFkZCBoZWxwZnVsIHN1Z2dlc3Rpb25zIGJhc2VkIG9uIGVycm9yIGNvZGVzIGZvdW5kXG4gICAgICAgICAgc3luY1RleHQgKz0gYPCfkqEgKipUcm91Ymxlc2hvb3RpbmcgVGlwcyoqOlxcbmA7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ2hlY2sgZm9yIHNwZWNpZmljIGVycm9yIGNvZGVzIGFuZCBwcm92aWRlIHRhcmdldGVkIGFkdmljZVxuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZXMgPSBmYWlsZWRFbGVtZW50cy5tYXAoZiA9PiBmLmVycm9yLm1hdGNoKC9eKFtBLVpfXStfXFxkKyk6Lyk/LlsxXSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICAgIGNvbnN0IHVuaXF1ZUVycm9yQ29kZXMgPSBbLi4ubmV3IFNldChlcnJvckNvZGVzKV07XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHVuaXF1ZUVycm9yQ29kZXMuaW5jbHVkZXMoJ1BPUlRGT0xJT19TWU5DXzAwMScpKSB7XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBgICDigKIg8J+UkCAqKkF1dGggRXJyb3IqKjogUnVuIFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIHRvIHJlLWF1dGhlbnRpY2F0ZVxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1bmlxdWVFcnJvckNvZGVzLmluY2x1ZGVzKCdQT1JURk9MSU9fU1lOQ18wMDInKSkge1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIPCfk4EgKipSZXBvIE1pc3NpbmcqKjogUnVuIFxcYGluaXRfcG9ydGZvbGlvXFxgIHRvIGNyZWF0ZSB5b3VyIHJlcG9zaXRvcnlcXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodW5pcXVlRXJyb3JDb2Rlcy5pbmNsdWRlcygnUE9SVEZPTElPX1NZTkNfMDA0JykpIHtcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiDwn5SnICoqQVBJIEVycm9yKio6IEdpdEh1YiByZXNwb25zZSBmb3JtYXQgaXNzdWUgLSBwbGVhc2UgcmVwb3J0IHRoaXMgYnVnXFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVuaXF1ZUVycm9yQ29kZXMuaW5jbHVkZXMoJ1BPUlRGT0xJT19TWU5DXzAwNicpKSB7XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBgICDigKIg4o+zICoqUmF0ZSBMaW1pdGVkKio6IFdhaXQgYSBmZXcgbWludXRlcyBhbmQgdHJ5IGFnYWluXFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gR2VuZXJhbCB0aXBzXG4gICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIENoZWNrIGVsZW1lbnQgZmlsZSBmb3JtYXRzIGFuZCBtZXRhZGF0YVxcbmA7XG4gICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIFRyeSBzeW5jaW5nIGluZGl2aWR1YWwgZWxlbWVudHMgd2l0aCBcXGBwb3J0Zm9saW9fZWxlbWVudF9tYW5hZ2VyXFxgICh1cGxvYWQgb3BlcmF0aW9uKVxcbmA7XG4gICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIFVzZSBcXGBzeW5jX3BvcnRmb2xpb1xcYCB3aXRoIFxcYGRyeV9ydW49dHJ1ZVxcYCB0byBwcmV2aWV3IGlzc3Vlc1xcblxcbmA7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQWRkIGVycm9yIGNvZGUgbGVnZW5kIGlmIHdlIGZvdW5kIGFueVxuICAgICAgICAgIGlmICh1bmlxdWVFcnJvckNvZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn5OLICoqRXJyb3IgQ29kZXMgRGV0ZWN0ZWQqKjpcXG5gO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb2RlIG9mIHVuaXF1ZUVycm9yQ29kZXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3JEZXNjcmlwdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICAgICAgICAgJ1BPUlRGT0xJT19TWU5DXzAwMSc6ICdBdXRoZW50aWNhdGlvbiBmYWlsdXJlJyxcbiAgICAgICAgICAgICAgICAnUE9SVEZPTElPX1NZTkNfMDAyJzogJ1JlcG9zaXRvcnkgbm90IGZvdW5kJyxcbiAgICAgICAgICAgICAgICAnUE9SVEZPTElPX1NZTkNfMDAzJzogJ0ZpbGUgY3JlYXRpb24gZmFpbGVkJyxcbiAgICAgICAgICAgICAgICAnUE9SVEZPTElPX1NZTkNfMDA0JzogJ0FQSSByZXNwb25zZSBwYXJzaW5nIGVycm9yJyxcbiAgICAgICAgICAgICAgICAnUE9SVEZPTElPX1NZTkNfMDA1JzogJ05ldHdvcmsgZXJyb3InLFxuICAgICAgICAgICAgICAgICdQT1JURk9MSU9fU1lOQ18wMDYnOiAnUmF0ZSBsaW1pdCBleGNlZWRlZCdcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBlcnJvckRlc2NyaXB0aW9uc1tjb2RlIGFzIHN0cmluZ10gfHwgJ1Vua25vd24gZXJyb3InO1xuICAgICAgICAgICAgICBzeW5jVGV4dCArPSBgICDigKIgJHtjb2RlfTogJHtkZXNjcmlwdGlvbn1cXG5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3luY1RleHQgKz0gYFxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn46JICoqUGVyZmVjdCBTeW5jISoqIEFsbCBlbGVtZW50cyB1cGxvYWRlZCBzdWNjZXNzZnVsbHkhXFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IEFkZCBuZXh0IHN0ZXBzIGFuZCBoZWxwZnVsIGxpbmtzXG4gICAgICAgIGlmIChzeW5jQ291bnQgPiAwKSB7XG4gICAgICAgICAgc3luY1RleHQgKz0gYPCfmoAgKipOZXh0IFN0ZXBzKio6XFxuYDtcbiAgICAgICAgICBzeW5jVGV4dCArPSBgICDigKIgVmlldyB5b3VyIHBvcnRmb2xpbzogaHR0cHM6Ly9naXRodWIuY29tLyR7dXNlcm5hbWV9LyR7cG9ydGZvbGlvTWFuYWdlci5nZXRSZXBvc2l0b3J5TmFtZSgpfVxcbmA7XG4gICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIFNoYXJlIGluZGl2aWR1YWwgZWxlbWVudHMgdXNpbmcgXFxgc3VibWl0X2NvbGxlY3Rpb25fY29udGVudCA8bmFtZT5cXGBcXG5gO1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiBLZWVwIHBvcnRmb2xpbyB1cGRhdGVkIHdpdGggXFxgc3luY19wb3J0Zm9saW9cXGAgcmVndWxhcmx5XFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgc3luY1RleHQgKz0gYFlvdXIgZWxlbWVudHMgYXJlIG5vdyBhdmFpbGFibGUgb24gR2l0SHViIWA7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBzeW5jVGV4dFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmRpcmVjdGlvbiA9PT0gJ3B1bGwnIHx8IG9wdGlvbnMuZGlyZWN0aW9uID09PSAnYm90aCcpIHtcbiAgICAgICAgY29uc3QgeyBQb3J0Zm9saW9QdWxsSGFuZGxlciB9ID0gYXdhaXQgaW1wb3J0KCcuL2hhbmRsZXJzL1BvcnRmb2xpb1B1bGxIYW5kbGVyLmpzJyk7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgUG9ydGZvbGlvUHVsbEhhbmRsZXIoKTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZXIuZXhlY3V0ZVB1bGwob3B0aW9ucywgdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBJbnZhbGlkIHN5bmMgZGlyZWN0aW9uLiBVc2UgJ3B1c2gnLCAncHVsbCcsIG9yICdib3RoJy5gXG4gICAgICAgIH1dXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIElNUFJPVkVEIEVSUk9SIEhBTkRMSU5HOiBFbnN1cmUgd2UgYWx3YXlzIGhhdmUgYSBtZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2VcbiAgICAgIGNvbnN0IHNhbml0aXplZEVycm9yID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gc2FuaXRpemVkRXJyb3I/Lm1lc3NhZ2UgfHwgKGVycm9yIGFzIGFueSk/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSB8fCAnVW5rbm93biBlcnJvciBvY2N1cnJlZCc7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEZhaWxlZCB0byBzeW5jIHBvcnRmb2xpbzogJHtlcnJvck1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucyAtIGRlbGVnYXRlcyB0byBDb25maWdIYW5kbGVyXG4gICAqL1xuICBhc3luYyBoYW5kbGVDb25maWdPcGVyYXRpb24ob3B0aW9uczogYW55KSB7XG4gICAgY29uc3QgeyBDb25maWdIYW5kbGVyIH0gPSBhd2FpdCBpbXBvcnQoJy4vaGFuZGxlcnMvQ29uZmlnSGFuZGxlci5qcycpO1xuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgQ29uZmlnSGFuZGxlcigpO1xuICAgIHJldHVybiBoYW5kbGVyLmhhbmRsZUNvbmZpZ09wZXJhdGlvbihvcHRpb25zLCB0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHN5bmMgb3BlcmF0aW9ucyAtIGRlbGVnYXRlcyB0byBTeW5jSGFuZGxlclxuICAgKi9cbiAgYXN5bmMgaGFuZGxlU3luY09wZXJhdGlvbihvcHRpb25zOiBhbnkpIHtcbiAgICBjb25zdCB7IFN5bmNIYW5kbGVyIH0gPSBhd2FpdCBpbXBvcnQoJy4vaGFuZGxlcnMvU3luY0hhbmRsZXJWMi5qcycpO1xuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgU3luY0hhbmRsZXIoKTtcbiAgICByZXR1cm4gaGFuZGxlci5oYW5kbGVTeW5jT3BlcmF0aW9uKG9wdGlvbnMsIHRoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggbG9jYWwgcG9ydGZvbGlvIHVzaW5nIHRoZSBtZXRhZGF0YSBpbmRleCBzeXN0ZW1cbiAgICogVGhpcyBwcm92aWRlcyBmYXN0LCBjb21wcmVoZW5zaXZlIHNlYXJjaCBhY3Jvc3MgYWxsIGVsZW1lbnQgdHlwZXNcbiAgICovXG4gIGFzeW5jIHNlYXJjaFBvcnRmb2xpbyhvcHRpb25zOiB7XG4gICAgcXVlcnk6IHN0cmluZzsgXG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmc7IFxuICAgIGZ1enp5TWF0Y2g/OiBib29sZWFuOyBcbiAgICBtYXhSZXN1bHRzPzogbnVtYmVyOyBcbiAgICBpbmNsdWRlS2V5d29yZHM/OiBib29sZWFuOyBcbiAgICBpbmNsdWRlVGFncz86IGJvb2xlYW47IFxuICAgIGluY2x1ZGVUcmlnZ2Vycz86IGJvb2xlYW47IFxuICAgIGluY2x1ZGVEZXNjcmlwdGlvbnM/OiBib29sZWFuO1xuICB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoZSBxdWVyeSBwYXJhbWV0ZXJcbiAgICAgIGlmICghb3B0aW9ucy5xdWVyeSB8fCB0eXBlb2Ygb3B0aW9ucy5xdWVyeSAhPT0gJ3N0cmluZycgfHwgb3B0aW9ucy5xdWVyeS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIFNlYXJjaCBxdWVyeSBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEltcG9ydCBwb3J0Zm9saW8gaW5kZXggbWFuYWdlclxuICAgICAgY29uc3QgeyBQb3J0Zm9saW9JbmRleE1hbmFnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vUG9ydGZvbGlvSW5kZXhNYW5hZ2VyLmpzJyk7XG4gICAgICBjb25zdCBpbmRleE1hbmFnZXIgPSBQb3J0Zm9saW9JbmRleE1hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblxuICAgICAgLy8gUGFyc2UgZWxlbWVudCB0eXBlIGlmIHByb3ZpZGVkXG4gICAgICBsZXQgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKG9wdGlvbnMuZWxlbWVudFR5cGUpIHtcbiAgICAgICAgY29uc3QgdmFsaWRUeXBlcyA9IFsncGVyc29uYXMnLCAnc2tpbGxzJywgJ3RlbXBsYXRlcycsICdhZ2VudHMnLCAnbWVtb3JpZXMnLCAnZW5zZW1ibGVzJ107XG4gICAgICAgIGlmICghdmFsaWRUeXBlcy5pbmNsdWRlcyhvcHRpb25zLmVsZW1lbnRUeXBlKSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEludmFsaWQgZWxlbWVudCB0eXBlLiBWYWxpZCB0eXBlczogJHt2YWxpZFR5cGVzLmpvaW4oJywgJyl9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRUeXBlID0gb3B0aW9ucy5lbGVtZW50VHlwZSBhcyBFbGVtZW50VHlwZTtcbiAgICAgIH1cblxuICAgICAgLy8gQnVpbGQgc2VhcmNoIG9wdGlvbnNcbiAgICAgIGNvbnN0IHNlYXJjaE9wdGlvbnMgPSB7XG4gICAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgICBmdXp6eU1hdGNoOiBvcHRpb25zLmZ1enp5TWF0Y2ggIT09IGZhbHNlLCAvLyBEZWZhdWx0IHRvIHRydWVcbiAgICAgICAgbWF4UmVzdWx0czogb3B0aW9ucy5tYXhSZXN1bHRzIHx8IDIwLFxuICAgICAgICBpbmNsdWRlS2V5d29yZHM6IG9wdGlvbnMuaW5jbHVkZUtleXdvcmRzICE9PSBmYWxzZSxcbiAgICAgICAgaW5jbHVkZVRhZ3M6IG9wdGlvbnMuaW5jbHVkZVRhZ3MgIT09IGZhbHNlLFxuICAgICAgICBpbmNsdWRlVHJpZ2dlcnM6IG9wdGlvbnMuaW5jbHVkZVRyaWdnZXJzICE9PSBmYWxzZSxcbiAgICAgICAgaW5jbHVkZURlc2NyaXB0aW9uczogb3B0aW9ucy5pbmNsdWRlRGVzY3JpcHRpb25zICE9PSBmYWxzZVxuICAgICAgfTtcblxuICAgICAgLy8gUGVyZm9ybSB0aGUgc2VhcmNoXG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgaW5kZXhNYW5hZ2VyLnNlYXJjaChvcHRpb25zLnF1ZXJ5LCBzZWFyY2hPcHRpb25zKTtcblxuICAgICAgLy8gRm9ybWF0IHRoZSByZXN1bHRzXG4gICAgICBsZXQgdGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCflI0gKipQb3J0Zm9saW8gU2VhcmNoIFJlc3VsdHMqKlxcblxcbmA7XG4gICAgICB0ZXh0ICs9IGAqKlF1ZXJ5Kio6IFwiJHtvcHRpb25zLnF1ZXJ5fVwiXFxuYDtcbiAgICAgIFxuICAgICAgaWYgKGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIHRleHQgKz0gYCoqVHlwZSBGaWx0ZXIqKjogJHtlbGVtZW50VHlwZX1cXG5gO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0ZXh0ICs9IGAqKkZvdW5kKio6ICR7cmVzdWx0cy5sZW5ndGh9IGVsZW1lbnQke3Jlc3VsdHMubGVuZ3RoID09PSAxID8gJycgOiAncyd9XFxuXFxuYDtcblxuICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRleHQgKz0gYE5vIGVsZW1lbnRzIGZvdW5kIG1hdGNoaW5nIHlvdXIgc2VhcmNoIGNyaXRlcmlhLlxcblxcbmA7XG4gICAgICAgIHRleHQgKz0gYCoqVGlwcyBmb3IgYmV0dGVyIHJlc3VsdHM6KipcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgVHJ5IGRpZmZlcmVudCBrZXl3b3JkcyBvciBwYXJ0aWFsIG5hbWVzXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFJlbW92ZSB0aGUgdHlwZSBmaWx0ZXIgdG8gc2VhcmNoIGFsbCBlbGVtZW50IHR5cGVzXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIENoZWNrIHNwZWxsaW5nIGFuZCB0cnkgc3lub255bXNcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgVXNlIHRoZSBsaXN0X2VsZW1lbnRzIHRvb2wgdG8gc2VlIGFsbCBhdmFpbGFibGUgY29udGVudGA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0ICs9IGAqKlJlc3VsdHM6KipcXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICAgIGNvbnN0IHsgZW50cnksIG1hdGNoVHlwZSB9ID0gcmVzdWx0O1xuICAgICAgICAgIGNvbnN0IGljb24gPSB0aGlzLmdldEVsZW1lbnRJY29uKGVudHJ5LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBcbiAgICAgICAgICB0ZXh0ICs9IGAke2ljb259ICoqJHtlbnRyeS5tZXRhZGF0YS5uYW1lfSoqXFxuYDtcbiAgICAgICAgICB0ZXh0ICs9IGAgICDwn5OBIFR5cGU6ICR7ZW50cnkuZWxlbWVudFR5cGV9XFxuYDtcbiAgICAgICAgICB0ZXh0ICs9IGAgICDwn46vIE1hdGNoOiAke21hdGNoVHlwZX1cXG5gO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChlbnRyeS5tZXRhZGF0YS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgY29uc3QgZGVzYyA9IGVudHJ5Lm1ldGFkYXRhLmRlc2NyaXB0aW9uLmxlbmd0aCA+IDEwMCBcbiAgICAgICAgICAgICAgPyBlbnRyeS5tZXRhZGF0YS5kZXNjcmlwdGlvbi5zdWJzdHJpbmcoMCwgMTAwKSArICcuLi4nXG4gICAgICAgICAgICAgIDogZW50cnkubWV0YWRhdGEuZGVzY3JpcHRpb247XG4gICAgICAgICAgICB0ZXh0ICs9IGAgICDwn5OdICR7ZGVzY31cXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoZW50cnkubWV0YWRhdGEudGFncyAmJiBlbnRyeS5tZXRhZGF0YS50YWdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRleHQgKz0gYCAgIPCfj7fvuI8gVGFnczogJHtlbnRyeS5tZXRhZGF0YS50YWdzLnNsaWNlKDAsIDUpLmpvaW4oJywgJyl9JHtlbnRyeS5tZXRhZGF0YS50YWdzLmxlbmd0aCA+IDUgPyAnLi4uJyA6ICcnfVxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHRleHQgKz0gYCAgIPCfk4QgRmlsZTogJHtlbnRyeS5maWxlbmFtZX0ubWRcXG5cXG5gO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPj0gc2VhcmNoT3B0aW9ucy5tYXhSZXN1bHRzKSB7XG4gICAgICAgICAgdGV4dCArPSBg4pqg77iPIFJlc3VsdHMgbGltaXRlZCB0byAke3NlYXJjaE9wdGlvbnMubWF4UmVzdWx0c30uIFJlZmluZSB5b3VyIHNlYXJjaCBmb3IgbW9yZSBzcGVjaWZpYyByZXN1bHRzLlxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRleHQgKz0gYPCfkqEgKipOZXh0IHN0ZXBzOioqXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSBnZXRfZWxlbWVudF9kZXRhaWxzIHRvIHNlZSBmdWxsIGNvbnRlbnRcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgVXNlIGFjdGl2YXRlX2VsZW1lbnQgdG8gYWN0aXZhdGUgZWxlbWVudHNcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgVXNlIHN1Ym1pdF9jb2xsZWN0aW9uX2NvbnRlbnQgdG8gc2hhcmUgd2l0aCB0aGUgY29tbXVuaXR5YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0XG4gICAgICAgIH1dXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuc2VhcmNoUG9ydGZvbGlvJywgZXJyb3IsIHsgXG4gICAgICAgIHF1ZXJ5OiBvcHRpb25zLnF1ZXJ5LFxuICAgICAgICBlbGVtZW50VHlwZTogb3B0aW9ucy5lbGVtZW50VHlwZSBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLCBcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgU2VhcmNoIGZhaWxlZDogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggYWNyb3NzIGFsbCBzb3VyY2VzIChsb2NhbCwgR2l0SHViLCBjb2xsZWN0aW9uKSB1c2luZyBVbmlmaWVkSW5kZXhNYW5hZ2VyXG4gICAqIFRoaXMgcHJvdmlkZXMgY29tcHJlaGVuc2l2ZSBzZWFyY2ggd2l0aCBkdXBsaWNhdGUgZGV0ZWN0aW9uIGFuZCB2ZXJzaW9uIGNvbXBhcmlzb25cbiAgICovXG4gIGFzeW5jIHNlYXJjaEFsbChvcHRpb25zOiB7XG4gICAgcXVlcnk6IHN0cmluZztcbiAgICBzb3VyY2VzPzogc3RyaW5nW107XG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmc7XG4gICAgcGFnZT86IG51bWJlcjtcbiAgICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgICBzb3J0Qnk/OiBzdHJpbmc7XG4gIH0pIHtcbiAgICB0cnkge1xuICAgICAgLy8gVmFsaWRhdGUgdGhlIHF1ZXJ5IHBhcmFtZXRlclxuICAgICAgaWYgKCFvcHRpb25zLnF1ZXJ5IHx8IHR5cGVvZiBvcHRpb25zLnF1ZXJ5ICE9PSAnc3RyaW5nJyB8fCBvcHRpb25zLnF1ZXJ5LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgU2VhcmNoIHF1ZXJ5IGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gSW1wb3J0IHVuaWZpZWQgaW5kZXggbWFuYWdlclxuICAgICAgY29uc3QgeyBVbmlmaWVkSW5kZXhNYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoJy4vcG9ydGZvbGlvL1VuaWZpZWRJbmRleE1hbmFnZXIuanMnKTtcbiAgICAgIGNvbnN0IHsgRWxlbWVudFR5cGUgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vdHlwZXMuanMnKTtcbiAgICAgIGNvbnN0IHVuaWZpZWRNYW5hZ2VyID0gVW5pZmllZEluZGV4TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXG4gICAgICAvLyBQYXJzZSBlbGVtZW50IHR5cGUgaWYgcHJvdmlkZWRcbiAgICAgIGxldCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGUgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAob3B0aW9ucy5lbGVtZW50VHlwZSkge1xuICAgICAgICBjb25zdCB2YWxpZFR5cGVzID0gWydwZXJzb25hcycsICdza2lsbHMnLCAndGVtcGxhdGVzJywgJ2FnZW50cycsICdtZW1vcmllcycsICdlbnNlbWJsZXMnXTtcbiAgICAgICAgaWYgKCF2YWxpZFR5cGVzLmluY2x1ZGVzKG9wdGlvbnMuZWxlbWVudFR5cGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgSW52YWxpZCBlbGVtZW50IHR5cGUuIFZhbGlkIHR5cGVzOiAke3ZhbGlkVHlwZXMuam9pbignLCAnKX1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudFR5cGUgPSBvcHRpb25zLmVsZW1lbnRUeXBlIGFzIEVsZW1lbnRUeXBlO1xuICAgICAgfVxuXG4gICAgICAvLyBQYXJzZSBzb3VyY2VzIChkZWZhdWx0IHRvIGxvY2FsIGFuZCBnaXRodWIpXG4gICAgICBjb25zdCBzb3VyY2VzID0gb3B0aW9ucy5zb3VyY2VzIHx8IFsnbG9jYWwnLCAnZ2l0aHViJ107XG4gICAgICBjb25zdCBpbmNsdWRlTG9jYWwgPSBzb3VyY2VzLmluY2x1ZGVzKCdsb2NhbCcpO1xuICAgICAgY29uc3QgaW5jbHVkZUdpdEh1YiA9IHNvdXJjZXMuaW5jbHVkZXMoJ2dpdGh1YicpO1xuICAgICAgY29uc3QgaW5jbHVkZUNvbGxlY3Rpb24gPSBzb3VyY2VzLmluY2x1ZGVzKCdjb2xsZWN0aW9uJyk7XG5cbiAgICAgIC8vIEJ1aWxkIHNlYXJjaCBvcHRpb25zXG4gICAgICBjb25zdCBzZWFyY2hPcHRpb25zID0ge1xuICAgICAgICBxdWVyeTogb3B0aW9ucy5xdWVyeSxcbiAgICAgICAgaW5jbHVkZUxvY2FsLFxuICAgICAgICBpbmNsdWRlR2l0SHViLFxuICAgICAgICBpbmNsdWRlQ29sbGVjdGlvbixcbiAgICAgICAgZWxlbWVudFR5cGUsXG4gICAgICAgIHBhZ2U6IG9wdGlvbnMucGFnZSB8fCAxLFxuICAgICAgICBwYWdlU2l6ZTogb3B0aW9ucy5wYWdlU2l6ZSB8fCAyMCxcbiAgICAgICAgc29ydEJ5OiAob3B0aW9ucy5zb3J0QnkgYXMgYW55KSB8fCAncmVsZXZhbmNlJ1xuICAgICAgfTtcblxuICAgICAgLy8gUGVyZm9ybSB0aGUgdW5pZmllZCBzZWFyY2hcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB1bmlmaWVkTWFuYWdlci5zZWFyY2goc2VhcmNoT3B0aW9ucyk7XG5cbiAgICAgIC8vIEZvcm1hdCB0aGUgcmVzdWx0c1xuICAgICAgbGV0IHRleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5SNICoqVW5pZmllZCBTZWFyY2ggUmVzdWx0cyoqXFxuXFxuYDtcbiAgICAgIHRleHQgKz0gYCoqUXVlcnkqKjogXCIke29wdGlvbnMucXVlcnl9XCJcXG5gO1xuICAgICAgdGV4dCArPSBgKipTb3VyY2VzKio6ICR7c291cmNlcy5qb2luKCcsICcpfVxcbmA7XG4gICAgICBcbiAgICAgIGlmIChlbGVtZW50VHlwZSkge1xuICAgICAgICB0ZXh0ICs9IGAqKlR5cGUgRmlsdGVyKio6ICR7ZWxlbWVudFR5cGV9XFxuYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGV4dCArPSBgKipGb3VuZCoqOiAke3Jlc3VsdHMubGVuZ3RofSBlbGVtZW50JHtyZXN1bHRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfVxcblxcbmA7XG5cbiAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0ZXh0ICs9IGBObyBlbGVtZW50cyBmb3VuZCBtYXRjaGluZyB5b3VyIHNlYXJjaCBjcml0ZXJpYS5cXG5cXG5gO1xuICAgICAgICB0ZXh0ICs9IGAqKlRpcHMgZm9yIGJldHRlciByZXN1bHRzOioqXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFRyeSBkaWZmZXJlbnQga2V5d29yZHMgb3IgcGFydGlhbCBuYW1lc1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBSZW1vdmUgdGhlIHR5cGUgZmlsdGVyIHRvIHNlYXJjaCBhbGwgZWxlbWVudCB0eXBlc1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBJbmNsdWRlIG1vcmUgc291cmNlczogbG9jYWwsIGdpdGh1YiwgY29sbGVjdGlvblxcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBDaGVjayBzcGVsbGluZyBhbmQgdHJ5IHN5bm9ueW1zXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSBicm93c2VfY29sbGVjdGlvbiB0byBleHBsb3JlIGF2YWlsYWJsZSBjb250ZW50YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHQgKz0gYCoqUmVzdWx0czoqKlxcblxcbmA7XG4gICAgICAgIFxuICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgY29uc3QgeyBlbnRyeSwgc291cmNlLCBtYXRjaFR5cGUsIHNjb3JlLCBpc0R1cGxpY2F0ZSwgdmVyc2lvbkNvbmZsaWN0IH0gPSByZXN1bHQ7XG4gICAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMuZ2V0RWxlbWVudEljb24oZW50cnkuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGNvbnN0IHNvdXJjZUljb24gPSB0aGlzLmdldFNvdXJjZUljb24oc291cmNlKTtcbiAgICAgICAgICBcbiAgICAgICAgICB0ZXh0ICs9IGAke2ljb259ICoqJHtlbnRyeS5uYW1lfSoqICR7c291cmNlSWNvbn1cXG5gO1xuICAgICAgICAgIHRleHQgKz0gYCAgIPCfk4EgVHlwZTogJHtlbnRyeS5lbGVtZW50VHlwZX0gfCBTb3VyY2U6ICR7c291cmNlfVxcbmA7XG4gICAgICAgICAgdGV4dCArPSBgICAg8J+OryBNYXRjaDogJHttYXRjaFR5cGV9IHwgU2NvcmU6ICR7c2NvcmUudG9GaXhlZCgyKX1cXG5gO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChlbnRyeS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgY29uc3QgZGVzYyA9IGVudHJ5LmRlc2NyaXB0aW9uLmxlbmd0aCA+IDEwMCBcbiAgICAgICAgICAgICAgPyBlbnRyeS5kZXNjcmlwdGlvbi5zdWJzdHJpbmcoMCwgMTAwKSArICcuLi4nXG4gICAgICAgICAgICAgIDogZW50cnkuZGVzY3JpcHRpb247XG4gICAgICAgICAgICB0ZXh0ICs9IGAgICDwn5OdICR7ZGVzY31cXG5gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlbnRyeS52ZXJzaW9uKSB7XG4gICAgICAgICAgICB0ZXh0ICs9IGAgICDwn4+377iPIFZlcnNpb246ICR7ZW50cnkudmVyc2lvbn1cXG5gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNob3cgZHVwbGljYXRlIGluZm9ybWF0aW9uXG4gICAgICAgICAgaWYgKGlzRHVwbGljYXRlKSB7XG4gICAgICAgICAgICB0ZXh0ICs9IGAgICDimqDvuI8gKipEdXBsaWNhdGUgZGV0ZWN0ZWQgYWNyb3NzIHNvdXJjZXMqKlxcbmA7XG4gICAgICAgICAgICBpZiAodmVyc2lvbkNvbmZsaWN0KSB7XG4gICAgICAgICAgICAgIHRleHQgKz0gYCAgIPCflIQgVmVyc2lvbiBjb25mbGljdCAtIFJlY29tbWVuZGVkOiAke3ZlcnNpb25Db25mbGljdC5yZWNvbW1lbmRlZH0gKCR7dmVyc2lvbkNvbmZsaWN0LnJlYXNvbn0pXFxuYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgdGV4dCArPSBgXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgaGFzTW9yZSA9IHJlc3VsdHMubGVuZ3RoID49IHNlYXJjaE9wdGlvbnMucGFnZVNpemU7XG4gICAgICAgIGlmIChoYXNNb3JlKSB7XG4gICAgICAgICAgY29uc3QgbmV4dFBhZ2UgPSBzZWFyY2hPcHRpb25zLnBhZ2UgKyAxO1xuICAgICAgICAgIHRleHQgKz0gYOKaoO+4jyBSZXN1bHRzIGxpbWl0ZWQgdG8gJHtzZWFyY2hPcHRpb25zLnBhZ2VTaXplfS4gVXNlIHBhZ2U9JHtuZXh0UGFnZX0gZm9yIG1vcmUgcmVzdWx0cy5cXG5cXG5gO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0ZXh0ICs9IGDwn5KhICoqTmV4dCBzdGVwczoqKlxcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBVc2UgZ2V0X2VsZW1lbnRfZGV0YWlscyB0byBzZWUgZnVsbCBjb250ZW50XFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSBpbnN0YWxsX2NvbGxlY3Rpb25fY29udGVudCBmb3IgY29sbGVjdGlvbiBpdGVtc1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBVc2UgYWN0aXZhdGVfZWxlbWVudCBmb3IgbG9jYWwgZWxlbWVudHNcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgQ2hlY2sgZm9yIGR1cGxpY2F0ZXMgYmVmb3JlIHN1Ym1pdHRpbmcgbmV3IGNvbnRlbnRgO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHRcbiAgICAgICAgfV1cbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zdCB7IEVycm9ySGFuZGxlciB9ID0gYXdhaXQgaW1wb3J0KCcuL3V0aWxzL0Vycm9ySGFuZGxlci5qcycpO1xuICAgICAgY29uc3QgeyBTZWN1cmVFcnJvckhhbmRsZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9zZWN1cml0eS9lcnJvckhhbmRsZXIuanMnKTtcbiAgICAgIFxuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuc2VhcmNoQWxsJywgZXJyb3IsIHsgXG4gICAgICAgIHF1ZXJ5OiBvcHRpb25zLnF1ZXJ5LFxuICAgICAgICBzb3VyY2VzOiBvcHRpb25zLnNvdXJjZXMsXG4gICAgICAgIGVsZW1lbnRUeXBlOiBvcHRpb25zLmVsZW1lbnRUeXBlIFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsIFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBVbmlmaWVkIHNlYXJjaCBmYWlsZWQ6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGljb24gZm9yIHNvdXJjZSB0eXBlXG4gICAqL1xuICBwcml2YXRlIGdldFNvdXJjZUljb24oc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGljb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgbG9jYWw6ICfwn5K7JyxcbiAgICAgIGdpdGh1YjogJ/CfkJknLFxuICAgICAgY29sbGVjdGlvbjogJ/CfjJAnXG4gICAgfTtcbiAgICByZXR1cm4gaWNvbnNbc291cmNlXSB8fCAn8J+TgSc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGljb24gZm9yIGVsZW1lbnQgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbGVtZW50SWNvbihlbGVtZW50VHlwZTogRWxlbWVudFR5cGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IGljb25zID0ge1xuICAgICAgcGVyc29uYXM6ICfwn46tJyxcbiAgICAgIHNraWxsczogJ/Cfjq8nLFxuICAgICAgdGVtcGxhdGVzOiAn8J+ThCcsXG4gICAgICBhZ2VudHM6ICfwn6SWJyxcbiAgICAgIG1lbW9yaWVzOiAn8J+noCcsXG4gICAgICBlbnNlbWJsZXM6ICfwn468J1xuICAgIH07XG4gICAgcmV0dXJuIGljb25zW2VsZW1lbnRUeXBlXSB8fCAn8J+TgSc7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byBjb3VudCBlbGVtZW50cyBpbiBhIGRpcmVjdG9yeVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjb3VudEVsZW1lbnRzSW5EaXIoZGlyUGF0aDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgaWYgZGlyZWN0b3J5IGV4aXN0cyBhbmQgaXMgYWNjZXNzaWJsZVxuICAgICAgYXdhaXQgZnMuYWNjZXNzKGRpclBhdGgpO1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpclBhdGgpO1xuICAgICAgXG4gICAgICAvLyBDb3VudCBhbGwgZWxlbWVudCBmaWxlcyAoLm1kLCAuanNvbiwgLnlhbWwpIHRvIHN1cHBvcnQgYWxsIGVsZW1lbnQgdHlwZXNcbiAgICAgIC8vIC0gUGVyc29uYXM6IC5tZCBmaWxlc1xuICAgICAgLy8gLSBTa2lsbHM6IC5tZCBmaWxlcyAgXG4gICAgICAvLyAtIFRlbXBsYXRlczogLm1kIG9yIC55YW1sIGZpbGVzXG4gICAgICAvLyAtIEFnZW50czogLm1kIGZpbGVzXG4gICAgICByZXR1cm4gZmlsZXMuZmlsdGVyKGZpbGUgPT4gXG4gICAgICAgIGZpbGUuZW5kc1dpdGgoJy5tZCcpIHx8IFxuICAgICAgICBmaWxlLmVuZHNXaXRoKCcuanNvbicpIHx8IFxuICAgICAgICBmaWxlLmVuZHNXaXRoKCcueWFtbCcpXG4gICAgICApLmxlbmd0aDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gZ2V0IGxpc3Qgb2YgZWxlbWVudHMgYnkgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRFbGVtZW50c0xpc3QoZWxlbWVudFR5cGU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbG9jYWxQb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgbGV0IGVsZW1lbnRUeXBlRW51bTogRWxlbWVudFR5cGU7XG4gICAgICBcbiAgICAgIHN3aXRjaCAoZWxlbWVudFR5cGUpIHtcbiAgICAgICAgY2FzZSAncGVyc29uYXMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLlBFUlNPTkE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3NraWxscyc6XG4gICAgICAgICAgZWxlbWVudFR5cGVFbnVtID0gRWxlbWVudFR5cGUuU0tJTEw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RlbXBsYXRlcyc6XG4gICAgICAgICAgZWxlbWVudFR5cGVFbnVtID0gRWxlbWVudFR5cGUuVEVNUExBVEU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2FnZW50cyc6XG4gICAgICAgICAgZWxlbWVudFR5cGVFbnVtID0gRWxlbWVudFR5cGUuQUdFTlQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21lbW9yaWVzJzpcbiAgICAgICAgICBlbGVtZW50VHlwZUVudW0gPSBFbGVtZW50VHlwZS5NRU1PUlk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gSW5zdGVhZCBvZiBzaWxlbnRseSByZXR1cm5pbmcgZW1wdHkgYXJyYXksIHRocm93IGRlc2NyaXB0aXZlIGVycm9yXG4gICAgICAgICAgY29uc3QgdmFsaWRUeXBlcyA9IFsncGVyc29uYXMnLCAnc2tpbGxzJywgJ3RlbXBsYXRlcycsICdhZ2VudHMnLCAnbWVtb3JpZXMnXTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCB0eXBlOiAnJHtlbGVtZW50VHlwZX0nLiBWYWxpZCB0eXBlcyBhcmU6ICR7dmFsaWRUeXBlcy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXJQYXRoID0gbG9jYWxQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoZWxlbWVudFR5cGVFbnVtKTtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgZGlyZWN0b3J5IGV4aXN0cyBhbmQgaXMgYWNjZXNzaWJsZVxuICAgICAgYXdhaXQgZnMuYWNjZXNzKGRpclBhdGgpO1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpclBhdGgpO1xuICAgICAgXG4gICAgICAvLyBGaWx0ZXIgYW5kIGV4dHJhY3QgbmFtZXMgZm9yIGFsbCBlbGVtZW50IGZpbGUgdHlwZXNcbiAgICAgIC8vIC0gUGVyc29uYXM6IC5tZCBmaWxlc1xuICAgICAgLy8gLSBTa2lsbHM6IC5tZCBmaWxlcyAgXG4gICAgICAvLyAtIFRlbXBsYXRlczogLm1kIG9yIC55YW1sIGZpbGVzXG4gICAgICAvLyAtIEFnZW50czogLm1kIGZpbGVzXG4gICAgICByZXR1cm4gZmlsZXNcbiAgICAgICAgLmZpbHRlcihmaWxlID0+IGZpbGUuZW5kc1dpdGgoJy5tZCcpIHx8IGZpbGUuZW5kc1dpdGgoJy5qc29uJykgfHwgZmlsZS5lbmRzV2l0aCgnLnlhbWwnKSlcbiAgICAgICAgLm1hcChmaWxlID0+IHtcbiAgICAgICAgICAvLyBSZW1vdmUgZmlsZSBleHRlbnNpb24gdG8gZ2V0IGVsZW1lbnQgbmFtZVxuICAgICAgICAgIGlmIChmaWxlLmVuZHNXaXRoKCcubWQnKSkgcmV0dXJuIGZpbGUucmVwbGFjZSgnLm1kJywgJycpO1xuICAgICAgICAgIGlmIChmaWxlLmVuZHNXaXRoKCcuanNvbicpKSByZXR1cm4gZmlsZS5yZXBsYWNlKCcuanNvbicsICcnKTtcbiAgICAgICAgICBpZiAoZmlsZS5lbmRzV2l0aCgnLnlhbWwnKSkgcmV0dXJuIGZpbGUucmVwbGFjZSgnLnlhbWwnLCAnJyk7XG4gICAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb3VyIHZhbGlkYXRpb24gZXJyb3IgZm9yIGludmFsaWQgZWxlbWVudCB0eXBlc1xuICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnSW52YWxpZCBlbGVtZW50IHR5cGU6JykpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7IC8vIFJlLXRocm93IHZhbGlkYXRpb24gZXJyb3JzIGZvciBkZWJ1Z2dpbmdcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRm9yIGZpbGUgc3lzdGVtIGVycm9ycywgcHJvdmlkZSBjb250ZXh0IGFib3V0IHRoZSBvcGVyYXRpb25cbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yLmNvZGUgPT09ICdFTk9FTlQnIFxuICAgICAgICA/IGBFbGVtZW50IGRpcmVjdG9yeSBub3QgZm91bmQgZm9yIHR5cGUgJyR7ZWxlbWVudFR5cGV9Jy4gRGlyZWN0b3J5IG1heSBub3QgZXhpc3QgeWV0LmBcbiAgICAgICAgOiBgRmFpbGVkIHRvIHJlYWQgZWxlbWVudHMgZGlyZWN0b3J5IGZvciB0eXBlICcke2VsZW1lbnRUeXBlfSc6ICR7ZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBmaWxlIHN5c3RlbSBlcnJvcid9YDtcbiAgICAgIFxuICAgICAgbG9nZ2VyLndhcm4oJ0Vycm9yIGluIGdldEVsZW1lbnRzTGlzdCcsIHsgXG4gICAgICAgIGVsZW1lbnRUeXBlLCBcbiAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UsIFxuICAgICAgICBjb2RlOiBlcnJvci5jb2RlIFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIGxvYWQgZWxlbWVudCBieSB0eXBlXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggY29udGVudCwgZmlsZW5hbWUsIGFuZCB0eXBlIHByb3BlcnRpZXNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZEVsZW1lbnRCeVR5cGUoZWxlbWVudE5hbWU6IHN0cmluZywgZWxlbWVudFR5cGU6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gU0VDVVJJVFk6IFNhbml0aXplIGVsZW1lbnROYW1lIGVhcmx5IHRvIHVzZSBpbiBlcnJvciBtZXNzYWdlcyB0b29cbiAgICBjb25zdCBzYW5pdGl6ZWROYW1lID0gcGF0aC5iYXNlbmFtZShlbGVtZW50TmFtZSk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxvY2FsUG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIGxldCBlbGVtZW50VHlwZUVudW06IEVsZW1lbnRUeXBlO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgJ3BlcnNvbmFzJzpcbiAgICAgICAgICBlbGVtZW50VHlwZUVudW0gPSBFbGVtZW50VHlwZS5QRVJTT05BO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdza2lsbHMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLlNLSUxMO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0ZW1wbGF0ZXMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLlRFTVBMQVRFO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhZ2VudHMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLkFHRU5UO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtZW1vcmllcyc6XG4gICAgICAgICAgZWxlbWVudFR5cGVFbnVtID0gRWxlbWVudFR5cGUuTUVNT1JZO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIEluc3RlYWQgb2Ygc2lsZW50bHkgcmV0dXJuaW5nIG51bGwsIHRocm93IGRlc2NyaXB0aXZlIGVycm9yXG4gICAgICAgICAgY29uc3QgdmFsaWRUeXBlcyA9IFsncGVyc29uYXMnLCAnc2tpbGxzJywgJ3RlbXBsYXRlcycsICdhZ2VudHMnLCAnbWVtb3JpZXMnXTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCB0eXBlOiAnJHtlbGVtZW50VHlwZX0nLiBWYWxpZCB0eXBlcyBhcmU6ICR7dmFsaWRUeXBlcy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXJQYXRoID0gbG9jYWxQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoZWxlbWVudFR5cGVFbnVtKTtcbiAgICAgIFxuICAgICAgLy8gRklYOiBDaGVjayBmb3IgYWN0dWFsIGZpbGUgZXh0ZW5zaW9ucyB1c2VkIGJ5IGVsZW1lbnRzICgubWQsIC5qc29uLCAueWFtbClcbiAgICAgIC8vIEVsZW1lbnRzIGFyZSBzdG9yZWQgYXMgbWFya2Rvd24gZmlsZXMgd2l0aCBZQU1MIGZyb250bWF0dGVyLCBub3QgSlNPTiBmaWxlc1xuICAgICAgLy8gUHJpb3JpdHkgb3JkZXI6IC5tZCAocHJpbWFyeSBmb3JtYXQpLCAuanNvbiAobGVnYWN5KSwgLnlhbWwvLnltbCAoY29uZmlnKVxuICAgICAgY29uc3QgZXh0ZW5zaW9ucyA9IFsnLm1kJywgJy5qc29uJywgJy55YW1sJywgJy55bWwnXTtcbiAgICAgIGxldCBjb250ZW50OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgIGxldCBmb3VuZEZpbGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgXG4gICAgICAvLyBEZWZpbmUgcmVhc29uYWJsZSBmaWxlIHNpemUgbGltaXQgKDEwTUIpXG4gICAgICBjb25zdCBNQVhfRklMRV9TSVpFID0gMTAgKiAxMDI0ICogMTAyNDsgLy8gMTBNQlxuICAgICAgXG4gICAgICBmb3IgKGNvbnN0IGV4dCBvZiBleHRlbnNpb25zKSB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRpclBhdGgsIGAke3Nhbml0aXplZE5hbWV9JHtleHR9YCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQ2hlY2sgZmlsZSBzaXplIGJlZm9yZSByZWFkaW5nIHRvIHByZXZlbnQgbWVtb3J5IGlzc3Vlc1xuICAgICAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChmaWxlUGF0aCk7XG4gICAgICAgICAgaWYgKHN0YXRzLnNpemUgPiBNQVhfRklMRV9TSVpFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgc2l6ZSBleGNlZWRzIGxpbWl0IG9mIDEwTUI6ICR7c3RhdHMuc2l6ZX0gYnl0ZXNgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgICBmb3VuZEZpbGUgPSBmaWxlUGF0aDtcbiAgICAgICAgICBicmVhazsgLy8gRm91bmQgdGhlIGZpbGUsIHN0b3Agc2VhcmNoaW5nXG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgLy8gRmlsZSBkb2Vzbid0IGV4aXN0IHdpdGggdGhpcyBleHRlbnNpb24sIHRyeSB0aGUgbmV4dCBvbmVcbiAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7IC8vIFJlLXRocm93IG5vbi1maWxlLW5vdC1mb3VuZCBlcnJvcnNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRklYOiBPbmx5IGNoZWNrIGZvdW5kRmlsZSwgbm90IGNvbnRlbnQgKGVtcHR5IGZpbGVzIGFyZSB2YWxpZClcbiAgICAgIGlmICghZm91bmRGaWxlKSB7XG4gICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGBGaWxlIG5vdCBmb3VuZGApLCB7IGNvZGU6ICdFTk9FTlQnIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBSZXR1cm4gYSBtaW5pbWFsIElFbGVtZW50LWxpa2Ugb2JqZWN0IHRoYXQgcG9ydGZvbGlvTWFuYWdlci5zYXZlRWxlbWVudCBjYW4gaGFuZGxlXG4gICAgICAvLyBUaGlzIHByZXNlcnZlcyB0aGUgcmF3IG1hcmtkb3duIGNvbnRlbnQgZm9yIHN5bmNpbmcgdG8gR2l0SHViXG4gICAgICByZXR1cm4ge1xuICAgICAgICAvLyBJRWxlbWVudCByZXF1aXJlZCBwcm9wZXJ0aWVzXG4gICAgICAgIGlkOiBgJHtlbGVtZW50VHlwZX1fJHtzYW5pdGl6ZWROYW1lfV8ke0RhdGUubm93KCl9YCxcbiAgICAgICAgdHlwZTogZWxlbWVudFR5cGVFbnVtLFxuICAgICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIG5hbWU6IHNhbml0aXplZE5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBMb2FkZWQgZnJvbSAke3BhdGguYmFzZW5hbWUoZm91bmRGaWxlKX1gLFxuICAgICAgICAgIGF1dGhvcjogJ3Vua25vd24nLFxuICAgICAgICAgIGNyZWF0ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICBtb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIHRhZ3M6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBJRWxlbWVudCByZXF1aXJlZCBtZXRob2RzIChtaW5pbWFsIGltcGxlbWVudGF0aW9ucyBmb3Igc3luYylcbiAgICAgICAgdmFsaWRhdGU6ICgpID0+ICh7IFxuICAgICAgICAgIGlzVmFsaWQ6IHRydWUsIFxuICAgICAgICAgIGVycm9yczogW10gYXMgYW55W10sIFxuICAgICAgICAgIHdhcm5pbmdzOiBbXSBhcyBhbnlbXSBcbiAgICAgICAgfSksXG4gICAgICAgIHNlcmlhbGl6ZTogKCkgPT4gY29udGVudCB8fCAnJyxcbiAgICAgICAgZGVzZXJpYWxpemU6ICgpID0+IHsgLyogbm8tb3AgKi8gfSxcbiAgICAgICAgZ2V0U3RhdHVzOiAoKSA9PiAoeyBzdGF0dXM6ICdhY3RpdmUnIGFzIGNvbnN0IH0pLFxuICAgICAgICBcbiAgICAgICAgLy8gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZvciBwb3J0Zm9saW8gc3luY1xuICAgICAgICBjb250ZW50OiBjb250ZW50IHx8ICcnLFxuICAgICAgICBmaWxlbmFtZTogcGF0aC5iYXNlbmFtZShmb3VuZEZpbGUpXG4gICAgICB9IGFzIGFueTsgLy8gVHlwZSBhc3NlcnRpb24gbmVlZGVkIHNpbmNlIHdlJ3JlIGR1Y2stdHlwaW5nIElFbGVtZW50XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBvdXIgdmFsaWRhdGlvbiBlcnJvciBmb3IgaW52YWxpZCBlbGVtZW50IHR5cGVzXG4gICAgICBpZiAoZXJyb3IubWVzc2FnZSAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdJbnZhbGlkIGVsZW1lbnQgdHlwZTonKSkge1xuICAgICAgICB0aHJvdyBlcnJvcjsgLy8gUmUtdGhyb3cgdmFsaWRhdGlvbiBlcnJvcnMgZm9yIGRlYnVnZ2luZ1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBQcm92aWRlIHNwZWNpZmljIGVycm9yIG1lc3NhZ2VzIGZvciBjb21tb24gZmlsZSBzeXN0ZW0gZXJyb3JzXG4gICAgICBsZXQgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gICAgICBcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBgRWxlbWVudCAnJHtzYW5pdGl6ZWROYW1lfScgbm90IGZvdW5kIGluICR7ZWxlbWVudFR5cGV9LiBTZWFyY2hlZCBmb3I6ICR7c2FuaXRpemVkTmFtZX0ubWQsICR7c2FuaXRpemVkTmFtZX0uanNvbiwgJHtzYW5pdGl6ZWROYW1lfS55YW1sLCAke3Nhbml0aXplZE5hbWV9LnltbGA7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYEVsZW1lbnQgJyR7c2FuaXRpemVkTmFtZX0nIGluICR7ZWxlbWVudFR5cGV9IGNvbnRhaW5zIGludmFsaWQgY29udGVudDogJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBgRmFpbGVkIHRvIGxvYWQgZWxlbWVudCAnJHtzYW5pdGl6ZWROYW1lfScgZnJvbSAke2VsZW1lbnRUeXBlfTogJHtlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJ31gO1xuICAgICAgfVxuICAgICAgXG4gICAgICBsb2dnZXIud2FybignRXJyb3IgaW4gbG9hZEVsZW1lbnRCeVR5cGUnLCB7IFxuICAgICAgICBlbGVtZW50TmFtZTogc2FuaXRpemVkTmFtZSwgXG4gICAgICAgIG9yaWdpbmFsTmFtZTogZWxlbWVudE5hbWUgIT09IHNhbml0aXplZE5hbWUgPyBlbGVtZW50TmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZWxlbWVudFR5cGUsIFxuICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSwgXG4gICAgICAgIGNvZGU6IGVycm9yLmNvZGUgXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcnVuKCkge1xuICAgIGxvZ2dlci5pbmZvKFwiU3RhcnRpbmcgRG9sbGhvdXNlTUNQIHNlcnZlci4uLlwiKTtcbiAgICAvLyBEb2NrZXIgYnVpbGQgdmVyaWZpY2F0aW9uIC0gcHJvdmVzIHdlJ3JlIHJ1bm5pbmcgZnJlc2ggY29kZVxuICAgIGxvZ2dlci5pbmZvKFwiQlVJTEQgVkVSSUZJQ0FUSU9OOiBSdW5uaW5nIGJ1aWxkIGZyb20gMjAyNS0wOC0xNyAxNjozMCBVVEMgLSBQUjYwNiBBUk02NCBmaXhcIik7XG4gICAgXG4gICAgLy8gRklYICM2MTA6IEluaXRpYWxpemUgcG9ydGZvbGlvIGFuZCBjb21wbGV0ZSBzZXR1cCBCRUZPUkUgY29ubmVjdGluZyB0byBNQ1BcbiAgICAvLyBUaGlzIGVuc3VyZXMgcGVyc29uYXMgYW5kIHBvcnRmb2xpbyBhcmUgcmVhZHkgd2hlbiBNQ1AgY29tbWFuZHMgYXJyaXZlXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBvcnRmb2xpbygpO1xuICAgICAgYXdhaXQgdGhpcy5jb21wbGV0ZUluaXRpYWxpemF0aW9uKCk7XG4gICAgICBsb2dnZXIuaW5mbyhcIlBvcnRmb2xpbyBhbmQgcGVyc29uYXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgLy8gT3V0cHV0IG1lc3NhZ2UgdGhhdCBEb2NrZXIgdGVzdHMgY2FuIGRldGVjdFxuICAgICAgbG9nZ2VyLmluZm8oXCJEb2xsaG91c2VNQ1Agc2VydmVyIHJlYWR5IC0gd2FpdGluZyBmb3IgTUNQIGNvbm5lY3Rpb24gb24gc3RkaW9cIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLnJ1bi5pbml0aWFsaXphdGlvbicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yOyAvLyBSZS10aHJvdyB0byBwcmV2ZW50IHNlcnZlciBmcm9tIHN0YXJ0aW5nIHdpdGggaW5jb21wbGV0ZSBpbml0aWFsaXphdGlvblxuICAgIH1cbiAgICBcbiAgICBjb25zdCB0cmFuc3BvcnQgPSBuZXcgU3RkaW9TZXJ2ZXJUcmFuc3BvcnQoKTtcbiAgICBcbiAgICAvLyBTZXQgdXAgZ3JhY2VmdWwgc2h1dGRvd24gaGFuZGxlcnNcbiAgICBjb25zdCBjbGVhbnVwID0gYXN5bmMgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oXCJTaHV0dGluZyBkb3duIERvbGxob3VzZU1DUCBzZXJ2ZXIuLi5cIik7XG4gICAgICBcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENsZWFuIHVwIEdpdEh1YiBhdXRoIG1hbmFnZXJcbiAgICAgICAgaWYgKHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmNsZWFudXAoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ2xlYW4gdXAgYW55IG90aGVyIHJlc291cmNlc1xuICAgICAgICBcbiAgICAgICAgbG9nZ2VyLmluZm8oXCJDbGVhbnVwIGNvbXBsZXRlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGR1cmluZyBjbGVhbnVwXCIsIHsgZXJyb3IgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9O1xuICAgIFxuICAgIC8vIFJlZ2lzdGVyIHNodXRkb3duIGhhbmRsZXJzXG4gICAgcHJvY2Vzcy5vbignU0lHSU5UJywgY2xlYW51cCk7XG4gICAgcHJvY2Vzcy5vbignU0lHVEVSTScsIGNsZWFudXApO1xuICAgIHByb2Nlc3Mub24oJ1NJR0hVUCcsIGNsZWFudXApO1xuICAgIFxuICAgIGF3YWl0IHRoaXMuc2VydmVyLmNvbm5lY3QodHJhbnNwb3J0KTtcbiAgICAvLyBNYXJrIHRoYXQgTUNQIGlzIG5vdyBjb25uZWN0ZWQgLSBubyBtb3JlIGNvbnNvbGUgb3V0cHV0IGFsbG93ZWRcbiAgICBsb2dnZXIuc2V0TUNQQ29ubmVjdGVkKCk7XG4gICAgbG9nZ2VyLmluZm8oXCJEb2xsaG91c2VNQ1Agc2VydmVyIHJ1bm5pbmcgb24gc3RkaW9cIik7XG4gIH1cbn1cblxuLy8gRXhwb3J0IGlzIGFscmVhZHkgYXQgY2xhc3MgZGVjbGFyYXRpb25cblxuLy8gT25seSBzdGFydCB0aGUgc2VydmVyIGlmIHRoaXMgZmlsZSBpcyBiZWluZyBydW4gZGlyZWN0bHkgKG5vdCBpbXBvcnRlZCBieSB0ZXN0cylcbi8vIEhhbmRsZSBkaWZmZXJlbnQgZXhlY3V0aW9uIG1ldGhvZHMgKGRpcmVjdCwgbnB4LCBDTEkpXG5jb25zdCBpc0RpcmVjdEV4ZWN1dGlvbiA9IGltcG9ydC5tZXRhLnVybCA9PT0gYGZpbGU6Ly8ke3Byb2Nlc3MuYXJndlsxXX1gO1xuY29uc3QgaXNOcHhFeGVjdXRpb24gPSBwcm9jZXNzLmVudi5ucG1fZXhlY3BhdGg/LmluY2x1ZGVzKCducHgnKTtcbmNvbnN0IGlzQ2xpRXhlY3V0aW9uID0gcHJvY2Vzcy5hcmd2WzFdPy5lbmRzV2l0aCgnL2RvbGxob3VzZW1jcCcpIHx8IHByb2Nlc3MuYXJndlsxXT8uZW5kc1dpdGgoJ1xcXFxkb2xsaG91c2VtY3AnKTtcbmNvbnN0IGlzVGVzdCA9IHByb2Nlc3MuZW52LkpFU1RfV09SS0VSX0lEO1xuXG4vLyBQcm9ncmVzc2l2ZSBzdGFydHVwIHdpdGggcmV0cmllcyBmb3IgbnB4L0NMSSBleGVjdXRpb25cbmNvbnN0IFNUQVJUVVBfREVMQVlTID0gWzEwLCA1MCwgMTAwLCAyMDBdOyAvLyBQcm9ncmVzc2l2ZSBkZWxheXMgaW4gbXNcblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRTZXJ2ZXJXaXRoUmV0cnkocmV0cmllc0xlZnQgPSBTVEFSVFVQX0RFTEFZUy5sZW5ndGgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgRG9sbGhvdXNlTUNQU2VydmVyKCk7XG4gICAgYXdhaXQgc2VydmVyLnJ1bigpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChyZXRyaWVzTGVmdCA+IDAgJiYgKGlzTnB4RXhlY3V0aW9uIHx8IGlzQ2xpRXhlY3V0aW9uKSkge1xuICAgICAgLy8gVHJ5IGFnYWluIHdpdGggYSBsb25nZXIgZGVsYXlcbiAgICAgIGNvbnN0IGRlbGF5SW5kZXggPSBTVEFSVFVQX0RFTEFZUy5sZW5ndGggLSByZXRyaWVzTGVmdDtcbiAgICAgIGNvbnN0IGRlbGF5ID0gU1RBUlRVUF9ERUxBWVNbZGVsYXlJbmRleF07XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXkpKTtcbiAgICAgIHJldHVybiBzdGFydFNlcnZlcldpdGhSZXRyeShyZXRyaWVzTGVmdCAtIDEpO1xuICAgIH1cbiAgICAvLyBGaW5hbCBmYWlsdXJlIC0gbWluaW1hbCBlcnJvciBtZXNzYWdlIGZvciBzZWN1cml0eVxuICAgIC8vIE5vdGU6IFVzaW5nIGNvbnNvbGUuZXJyb3IgaGVyZSBpcyBpbnRlbnRpb25hbCBhcyBpdCdzIHRoZSBmaW5hbCBlcnJvciBiZWZvcmUgZXhpdFxuICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBTZXJ2ZXIgc3RhcnR1cCBmYWlsZWRcIik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbmlmICgoaXNEaXJlY3RFeGVjdXRpb24gfHwgaXNOcHhFeGVjdXRpb24gfHwgaXNDbGlFeGVjdXRpb24pICYmICFpc1Rlc3QpIHtcbiAgc3RhcnRTZXJ2ZXJXaXRoUmV0cnkoKS5jYXRjaCgoKSA9PiB7XG4gICAgLy8gTm90ZTogVXNpbmcgY29uc29sZS5lcnJvciBoZXJlIGlzIGludGVudGlvbmFsIGFzIGl0J3MgdGhlIGZpbmFsIGVycm9yIGJlZm9yZSBleGl0XG4gICAgY29uc29sZS5lcnJvcihcIltEb2xsaG91c2VNQ1BdIFNlcnZlciBzdGFydHVwIGZhaWxlZFwiKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH0pO1xufSJdfQ==