semantifold 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +1 -0
  2. package/build/src/backends/effects.js +3 -1
  3. package/build/src/backends/php.d.ts.map +1 -1
  4. package/build/src/backends/php.js +56 -3
  5. package/build/src/backends/scalars.js +2 -2
  6. package/build/src/backends/shared.d.ts +2 -1
  7. package/build/src/backends/shared.d.ts.map +1 -1
  8. package/build/src/backends/shared.js +209 -7
  9. package/build/src/backends/writer.d.ts +18 -4
  10. package/build/src/backends/writer.d.ts.map +1 -1
  11. package/build/src/backends/writer.js +40 -4
  12. package/build/src/frontends/java.d.ts +1 -1
  13. package/build/src/frontends/java.d.ts.map +1 -1
  14. package/build/src/frontends/java.js +14 -11
  15. package/build/src/frontends/javascript-typescript.d.ts +1 -1
  16. package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
  17. package/build/src/frontends/javascript-typescript.js +17 -17
  18. package/build/src/frontends/php.d.ts +5 -1
  19. package/build/src/frontends/php.d.ts.map +1 -1
  20. package/build/src/frontends/php.js +159 -31
  21. package/build/src/frontends/ruby.d.ts +1 -1
  22. package/build/src/frontends/ruby.d.ts.map +1 -1
  23. package/build/src/frontends/ruby.js +12 -9
  24. package/build/src/frontends/types.d.ts +9 -2
  25. package/build/src/frontends/types.d.ts.map +1 -1
  26. package/build/src/frontends/types.js +26 -9
  27. package/build/src/language-registry.d.ts.map +1 -1
  28. package/build/src/language-registry.js +14 -6
  29. package/build/src/mapping.d.ts.map +1 -1
  30. package/build/src/mapping.js +4 -2
  31. package/build/src/semantic/effects.d.ts.map +1 -1
  32. package/build/src/semantic/effects.js +3 -1
  33. package/build/src/semantic/provenance.d.ts.map +1 -1
  34. package/build/src/semantic/provenance.js +37 -4
  35. package/build/src/semantic/types.d.ts +140 -9
  36. package/build/src/semantic/types.d.ts.map +1 -1
  37. package/build/src/semantic/types.js +37 -6
  38. package/build/src/semantic/validate.d.ts +31 -2
  39. package/build/src/semantic/validate.d.ts.map +1 -1
  40. package/build/src/semantic/validate.js +346 -27
  41. package/docs/adr-bounded-subtyping.md +180 -0
  42. package/docs/language-support.md +1 -1
  43. package/package.json +1 -1
  44. package/src/backends/effects.js +1 -0
  45. package/src/backends/php.js +56 -2
  46. package/src/backends/scalars.js +1 -1
  47. package/src/backends/shared.js +210 -6
  48. package/src/backends/writer.js +41 -3
  49. package/src/frontends/java.js +13 -10
  50. package/src/frontends/javascript-typescript.js +16 -16
  51. package/src/frontends/php.js +175 -31
  52. package/src/frontends/ruby.js +11 -8
  53. package/src/frontends/types.js +26 -8
  54. package/src/language-registry.js +13 -5
  55. package/src/mapping.js +3 -1
  56. package/src/semantic/effects.js +1 -0
  57. package/src/semantic/provenance.js +34 -3
  58. package/src/semantic/types.js +39 -5
  59. package/src/semantic/validate.js +377 -26
@@ -46,7 +46,7 @@ const referenceMethodHooks = new Set(["clone", "equals", "finalize", "getClass",
46
46
  * @property {Map<string, import("../semantic/types.js").ErrorDeclaration>} errors - Errors by identity.
47
47
  * @property {Set<string>} erasedBindingNames - Source bindings consumed by exact semantic folds in this scope.
48
48
  * @property {Map<string, JavaFunctionSignature>} functions - Explicit module function signatures.
49
- * @property {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} recordNames - Nominal declarations by source name.
49
+ * @property {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} recordNames - Nominal declarations by source name.
50
50
  * @property {Map<string, import("../semantic/types.js").RecordDeclaration>} records - Records by identity.
51
51
  * @property {import("../semantic/types.js").SemanticFunctionReturnType | undefined} returnType - Enclosing return type.
52
52
  * @property {Map<string, import("../semantic/types.js").TypeParameter>} [typeParameters] - Declaration-scoped parameters.
@@ -230,6 +230,9 @@ function convertExpression(node, filename, source, context, expectedType) {
230
230
  kind: /** @type {const} */ ("ReferenceConstruction"), location,
231
231
  reference: referenceType(/** @type {string} */ (declaration.id), classLocation) }, { class: classLocation });
232
232
  }
233
+ if (declaration.kind == "InterfaceDeclaration") {
234
+ return unsupportedSyntax("java", "construction of an interface", nodeLocation(typeNode, filename, source));
235
+ }
233
236
  if (declaration.kind == "EffectResourceDeclaration") {
234
237
  return unsupportedSyntax("java", "owned resource construction", nodeLocation(typeNode, filename, source));
235
238
  }
@@ -1351,7 +1354,7 @@ function convertJavaOrderedMapSequence(statements, start, filename, source, cont
1351
1354
  * @param {import("../semantic/types.js").SourceLocation} location - Source location.
1352
1355
  * @param {string} filename - Source filename.
1353
1356
  * @param {string} source - Complete source.
1354
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} [recordNames] - Nominal declarations by source name.
1357
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} [recordNames] - Nominal declarations by source name.
1355
1358
  * @param {Map<string, import("../semantic/types.js").TypeParameter>} [typeParameters] - Declaration-scoped parameters.
1356
1359
  * @returns {import("../semantic/types.js").SemanticValueType} Semantic type.
1357
1360
  */
@@ -1423,7 +1426,7 @@ function convertType(sourceType, subject, location, filename, source, recordName
1423
1426
  * @param {import("../semantic/types.js").SourceLocation} location - Owning location.
1424
1427
  * @param {string} filename - Source filename.
1425
1428
  * @param {string} source - Complete source.
1426
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} [recordNames] - Nominal declarations by source name.
1429
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} [recordNames] - Nominal declarations by source name.
1427
1430
  * @param {Map<string, import("../semantic/types.js").TypeParameter>} [typeParameters] - Declaration-scoped parameters.
1428
1431
  * @returns {import("../semantic/types.js").SemanticValueType} Semantic type.
1429
1432
  */
@@ -1454,7 +1457,7 @@ function convertJavaTypeArgument(node, subject, location, filename, source, reco
1454
1457
  * @param {import("../semantic/types.js").SourceLocation} location - Function location.
1455
1458
  * @param {string} filename - Source filename.
1456
1459
  * @param {string} source - Complete source.
1457
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} [recordNames] - Nominal declarations by source name.
1460
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} [recordNames] - Nominal declarations by source name.
1458
1461
  * @param {Map<string, import("../semantic/types.js").TypeParameter>} [typeParameters] - Declaration-scoped parameters.
1459
1462
  * @returns {import("../semantic/types.js").SemanticFunctionReturnType} Semantic return type.
1460
1463
  */
@@ -1504,7 +1507,7 @@ function convertJavaTypeParameters(node, ownerId, filename, source) {
1504
1507
  * @param {import("@lezer/common").SyntaxNode} node - Method declaration.
1505
1508
  * @param {string} filename - Source filename.
1506
1509
  * @param {string} source - Complete source.
1507
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} recordNames - Nominal declarations by source name.
1510
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} recordNames - Nominal declarations by source name.
1508
1511
  * @param {boolean} [programFunction] - Whether the canonical project profile admits explicit public or private visibility.
1509
1512
  * @param {string} [ownerId] - Stable function identity.
1510
1513
  * @param {boolean} [referenceModule] - Whether package-visible static functions are required by sibling reference classes.
@@ -1564,7 +1567,7 @@ function convertFunctionSignature(node, filename, source, recordNames, programFu
1564
1567
  * @param {import("@lezer/common").SyntaxNode} node - Method declaration.
1565
1568
  * @param {JavaFunctionSignature} signature - Preconverted function signature.
1566
1569
  * @param {Map<string, JavaFunctionSignature>} functions - Module function signatures.
1567
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} recordNames - Nominal declarations by source name.
1570
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} recordNames - Nominal declarations by source name.
1568
1571
  * @param {Map<string, import("../semantic/types.js").RecordDeclaration>} records - Record declarations by identity.
1569
1572
  * @param {Map<string, import("../semantic/types.js").ClassDeclaration>} classes - Reference classes by identity.
1570
1573
  * @param {Map<string, import("../semantic/types.js").ErrorDeclaration>} errorNames - Error declarations by source name.
@@ -1648,7 +1651,7 @@ function convertJavaError(node, declaration, filename, source, programError = fa
1648
1651
  * Reads one package-private Java reference constructor or instance-method signature.
1649
1652
  * @param {import("@lezer/common").SyntaxNode} node - Constructor or method declaration.
1650
1653
  * @param {import("../semantic/types.js").ClassDeclaration} declaration - Declaring class.
1651
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} nominalNames - Visible nominal declarations.
1654
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} nominalNames - Visible nominal declarations.
1652
1655
  * @param {boolean} constructor - Whether this is the sole constructor.
1653
1656
  * @param {string} filename - Source filename.
1654
1657
  * @param {string} source - Complete source.
@@ -1687,7 +1690,7 @@ function convertJavaClassCallableSignature(node, declaration, nominalNames, cons
1687
1690
  * Converts the bounded final/private-field Java reference-class profile.
1688
1691
  * @param {import("@lezer/common").SyntaxNode} node - Class declaration.
1689
1692
  * @param {import("../semantic/types.js").ClassDeclaration} declaration - Predeclared class identity.
1690
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} nominalNames - Visible nominal declarations.
1693
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} nominalNames - Visible nominal declarations.
1691
1694
  * @param {Map<string, import("../semantic/types.js").RecordDeclaration>} records - Records by identity.
1692
1695
  * @param {Map<string, import("../semantic/types.js").ClassDeclaration>} classes - Classes by identity.
1693
1696
  * @param {Map<string, JavaFunctionSignature>} functions - Top-level signatures.
@@ -1948,7 +1951,7 @@ function convertWhile(node, filename, source, context) {
1948
1951
  * @param {string} filename - Source filename.
1949
1952
  * @param {string} source - Complete source.
1950
1953
  * @param {Map<string, JavaFunctionSignature>} functions - Module function signatures.
1951
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} recordNames - Nominal declarations by source name.
1954
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} recordNames - Nominal declarations by source name.
1952
1955
  * @param {Map<string, import("../semantic/types.js").RecordDeclaration>} records - Record declarations by identity.
1953
1956
  * @param {Map<string, import("../semantic/types.js").ClassDeclaration>} classes - Reference classes by identity.
1954
1957
  * @param {Map<string, import("../semantic/types.js").ErrorDeclaration>} errorNames - Error declarations by source name.
@@ -2096,7 +2099,7 @@ export function parseJava({ capabilities = [], filename, source, program }) {
2096
2099
  kind: /** @type {const} */ ("ClassDeclaration"), location: nodeLocation(classNode, filename, source), methods: [],
2097
2100
  name: nodeText(requiredChild(classNode, "Definition", filename, source), source)
2098
2101
  }));
2099
- const recordNames = /** @type {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} */ (new Map(recordDeclarations.map((declaration) => /** @type {const} */ ([declaration.name, declaration]))));
2102
+ const recordNames = /** @type {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} */ (new Map(recordDeclarations.map((declaration) => /** @type {const} */ ([declaration.name, declaration]))));
2100
2103
  for (const resource of capabilities.flatMap(({ resources }) => resources))
2101
2104
  recordNames.set(resource.name, resource);
2102
2105
  for (const declaration of referenceDeclarations)
@@ -2348,4 +2351,4 @@ export function inspectJavaModule({ filename, source }) {
2348
2351
  });
2349
2352
  return { exports, imports, nativeName: `${packageName}.${className}` };
2350
2353
  }
2351
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZHMvamF2YS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUNsQyxPQUFPLEVBQUMscUJBQXFCLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEYsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQzNFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzdELE9BQU8sRUFBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUMzRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQTtBQUNsRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDdEUsT0FBTyxFQUFDLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUMsTUFBTSxZQUFZLENBQUE7QUFFalIsK0NBQStDO0FBQy9DLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN4QyxJQUFJLEVBQUUsSUFBSTtJQUNWLEdBQUcsRUFBRSxHQUFHO0lBQ1IsSUFBSSxFQUFFLElBQUk7SUFDVixDQUFDLEVBQUUsSUFBSTtJQUNQ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RUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxDQUFBO1FBQzVLLENBQUMsQ0FBQyxDQUFBO0lBRUosT0FBTyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsV0FBVyxJQUFJLFNBQVMsRUFBRSxFQUFDLENBQUE7QUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3BhcnNlcn0gZnJvbSBcIkBsZXplci9qYXZhXCJcbmltcG9ydCB7U2VtYW50aWZvbGREaWFnbm9zdGljLCBtaXNzaW5nVHlwZSwgdW5zdXBwb3J0ZWRTeW50YXh9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7bG9jYXRpb25Gcm9tT2Zmc2V0cywgbW9kdWxlTG9jYXRpb259IGZyb20gXCIuLi9zZW1hbnRpYy9sb2NhdGlvbi5qc1wiXG5pbXBvcnQge3dpdGhBZGFwdGVkT3BlcmF0aW9ufSBmcm9tIFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCJcbmltcG9ydCB7c2V0UGFyc2VyUmFuZ2VzLCB3aXRoUGFyc2VyUmFuZ2VzfSBmcm9tIFwiLi4vc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5pbXBvcnQge2hhc09ubHlVbmljb2RlU2NhbGFyc30gZnJvbSBcIi4uL3NlbWFudGljL3NjYWxhcnMuanNcIlxuaW1wb3J0IHtpc1Rhc2swMzRSZXNvdXJjZVByb2JlfSBmcm9tIFwiLi4vc2VtYW50aWMvY2FwYWJpbGl0aWVzLmpzXCJcbmltcG9ydCB7aGFzRXhhY3RFZmZlY3RTdXBwb3J0fSBmcm9tIFwiLi4vYmFja2VuZHMvZWZmZWN0cy5qc1wiXG5pbXBvcnQge3JlcXVpcmVTb3VyY2VSZXR1cm5UeXBlLCBzb3VyY2VTY2FsYXJUeXBlfSBmcm9tIFwiLi9zY2FsYXJzLmpzXCJcbmltcG9ydCB7Y2FwYWJpbGl0eUZ1bmN0aW9uU2lnbmF0dXJlcywgaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlLCBpdGVyYXRpb25CaW5kaW5nVHlwZSwgaXRlcmF0aW9uT3BlcmFuZFR5cGUsIGtub3duQ2FsbFJldHVyblR5cGUsIGxpc3RUeXBlLCBtYXBUeXBlLCBvcHRpb25hbFR5cGUsIG9yZGVyZWRNYXBUeXBlLCBvd25lZFJlc291cmNlVHlwZSwgcmVjb3JkVHlwZSwgcmVmZXJlbmNlVHlwZSwgc2FtZVZhbHVlVHlwZSwgdHlwZVZhcmlhYmxlfSBmcm9tIFwiLi90eXBlcy5qc1wiXG5cbi8qKiBAdHlwZSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj59ICovXG5jb25zdCBzaW1wbGVTdHJpbmdFc2NhcGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIFwiXFxcIlwiOiBcIlxcXCJcIixcbiAgXCInXCI6IFwiJ1wiLFxuICBcIlxcXFxcIjogXCJcXFxcXCIsXG4gIGI6IFwiXFxiXCIsXG4gIGY6IFwiXFxmXCIsXG4gIG46IFwiXFxuXCIsXG4gIHI6IFwiXFxyXCIsXG4gIHM6IFwiIFwiLFxuICB0OiBcIlxcdFwiXG59KVxuY29uc3QgamF2YUJpbmFyeU9wZXJhdGlvbnMgPSBuZXcgTWFwKFtcbiAgW1wiK1wiLCBcIkFkZFwiXSxcbiAgW1wiLVwiLCBcIlN1YnRyYWN0XCJdLFxuICBbXCIqXCIsIFwiTXVsdGlwbHlcIl0sXG4gIFtcIiYmXCIsIFwiQW5kXCJdLFxuICBbXCJ8fFwiLCBcIk9yXCJdLFxuICBbXCI9PVwiLCBcIkphdmFFcXVhbFwiXSxcbiAgW1wiIT1cIiwgXCJKYXZhTm90RXF1YWxcIl0sXG4gIFtcIjxcIiwgXCJMZXNzVGhhblwiXSxcbiAgW1wiPD1cIiwgXCJMZXNzVGhhbk9yRXF1YWxcIl0sXG4gIFtcIj5cIiwgXCJHcmVhdGVyVGhhblwiXSxcbiAgW1wiPj1cIiwgXCJHcmVhdGVyVGhhbk9yRXF1YWxcIl1cbl0pXG5jb25zdCByZWZlcmVuY2VNZXRob2RIb29rcyA9IG5ldyBTZXQoW1wiY2xvbmVcIiwgXCJlcXVhbHNcIiwgXCJmaW5hbGl6ZVwiLCBcImdldENsYXNzXCIsIFwiaGFzaENvZGVcIiwgXCJub3RpZnlcIiwgXCJub3RpZnlBbGxcIiwgXCJ0b1N0cmluZ1wiLCBcIndhaXRcIl0pXG5cbi8qKlxuICogQHR5cGVkZWYgSmF2YUNvbnZlcnNpb25Db250ZXh0XG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljQmluZGluZ1R5cGU+fSBiaW5kaW5ncyAtIEV4cGxpY2l0bHkgdHlwZWQgdmlzaWJsZSBiaW5kaW5ncy5cbiAqIEBwcm9wZXJ0eSB7U2V0PHN0cmluZz59IFtjYXRjaEJpbmRpbmdOYW1lc10gLSBMZXhpY2FsbHkgdmlzaWJsZSBleGFjdCBjYXRjaCBiaW5kaW5nIG5hbWVzLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYXRjaEJpbmRpbmc+fSBbY2F0Y2hCaW5kaW5nTm9kZXNdIC0gRXhhY3QgY2F0Y2ggYmluZGluZyBub2RlcyBieSB2aXNpYmxlIG5hbWUuXG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gUmVmZXJlbmNlIGNsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IFtjdXJyZW50Q2xhc3NdIC0gRW5jbG9zaW5nIHJlZmVyZW5jZSBjbGFzcy5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9yTmFtZXMgLSBFcnJvcnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvcnMgLSBFcnJvcnMgYnkgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge1NldDxzdHJpbmc+fSBlcmFzZWRCaW5kaW5nTmFtZXMgLSBTb3VyY2UgYmluZGluZ3MgY29uc3VtZWQgYnkgZXhhY3Qgc2VtYW50aWMgZm9sZHMgaW4gdGhpcyBzY29wZS5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgSmF2YUZ1bmN0aW9uU2lnbmF0dXJlPn0gZnVuY3Rpb25zIC0gRXhwbGljaXQgbW9kdWxlIGZ1bmN0aW9uIHNpZ25hdHVyZXMuXG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59IHJlY29yZHMgLSBSZWNvcmRzIGJ5IGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZSB8IHVuZGVmaW5lZH0gcmV0dXJuVHlwZSAtIEVuY2xvc2luZyByZXR1cm4gdHlwZS5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEphdmFGdW5jdGlvblNpZ25hdHVyZVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBDb21wbGV0ZSBkZWNsYXJhdGlvbiBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG5hbWVMb2NhdGlvbiAtIFBhcnNlci1vd25lZCBuYW1lIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBGdW5jdGlvbiBuYW1lLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QYXJhbWV0ZXJbXX0gcGFyYW1ldGVycyAtIFNlbWFudGljIHBhcmFtZXRlcnMuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfSByZXR1cm5UeXBlIC0gU2VtYW50aWMgcmV0dXJuIHR5cGUuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXX0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICovXG5cbi8qKlxuICogUmV0dXJucyBhbGwgZGlyZWN0IGNoaWxkIHN5bnRheCBub2Rlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gUGFyZW50IHN5bnRheCBub2RlLlxuICogQHJldHVybnMge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZVtdfSBDaGlsZCBzeW50YXggbm9kZXMuXG4gKi9cbmZ1bmN0aW9uIGRpcmVjdENoaWxkcmVuKG5vZGUpIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuXG4gIGZvciAobGV0IGNoaWxkID0gbm9kZS5maXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZykgY2hpbGRyZW4ucHVzaChjaGlsZClcblxuICByZXR1cm4gY2hpbGRyZW5cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHN0cnVjdHVyYWwgZGlyZWN0IGNoaWxkcmVuLCBleGNsdWRpbmcga25vd24gZ3JhbW1hciBkZWxpbWl0ZXJzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJlbnQgc3ludGF4IG5vZGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IE5hbWVkIGNoaWxkcmVuLlxuICovXG5mdW5jdGlvbiBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkge1xuICByZXR1cm4gZGlyZWN0Q2hpbGRyZW4obm9kZSkuZmlsdGVyKChjaGlsZCkgPT4gIVtcIntcIiwgXCJ9XCIsIFwiKFwiLCBcIilcIiwgXCIsXCIsIFwiO1wiLCBcIi5cIl0uaW5jbHVkZXMoY2hpbGQubmFtZSkpXG59XG5cbi8qKlxuICogRmluZHMgYWxsIGRlc2NlbmRhbnQgc3ludGF4IG5vZGVzIHdpdGggYSBnaXZlbiBuYW1lLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBSb290IHN5bnRheCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOb2RlIG5hbWUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IE1hdGNoaW5nIGRlc2NlbmRhbnRzLlxuICovXG5mdW5jdGlvbiBkZXNjZW5kYW50cyhub2RlLCBuYW1lKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBbXVxuXG4gIGZvciAoY29uc3QgY2hpbGQgb2YgZGlyZWN0Q2hpbGRyZW4obm9kZSkpIHtcbiAgICBpZiAoY2hpbGQubmFtZSA9PSBuYW1lKSBtYXRjaGVzLnB1c2goY2hpbGQpXG4gICAgbWF0Y2hlcy5wdXNoKC4uLmRlc2NlbmRhbnRzKGNoaWxkLCBuYW1lKSlcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVzXG59XG5cbi8qKlxuICogUmVxdWlyZXMgb25lIGRpcmVjdCBjaGlsZCBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJlbnQgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gQ2hpbGQgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBDaGlsZCBub2RlLlxuICovXG5mdW5jdGlvbiByZXF1aXJlZENoaWxkKG5vZGUsIG5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgY2hpbGQgPSBub2RlLmdldENoaWxkKG5hbWUpXG5cbiAgaWYgKCFjaGlsZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgJHtub2RlLm5hbWV9IHdpdGhvdXQgJHtuYW1lfWAsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICByZXR1cm4gY2hpbGRcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbm9ybWFsaXplZCBMZXplciBub2RlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBMZXplciBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gU291cmNlIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBub2RlLmZyb20sIG5vZGUudG8pXG59XG5cbi8qKlxuICogUmV0dXJucyBzb3VyY2UgdGV4dCBiZWxvbmdpbmcgdG8gYSBzeW50YXggbm9kZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gTGV6ZXIgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBOb2RlIHRleHQuXG4gKi9cbmZ1bmN0aW9uIG5vZGVUZXh0KG5vZGUsIHNvdXJjZSkge1xuICByZXR1cm4gc291cmNlLnNsaWNlKG5vZGUuZnJvbSwgbm9kZS50bylcbn1cblxuLyoqXG4gKiBQcm92ZXMgYW4gZXhhY3QgcGFyc2VyLXN0cnVjdHVyZWQgSmF2YSBxdWFsaWZpZWQgaWRlbnRpZmllci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gSWRlbnRpZmllciBvciBmaWVsZC1hY2Nlc3Mgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7c3RyaW5nW10gfCB1bmRlZmluZWR9IEV4YWN0IHN0cnVjdHVyYWwgbmFtZSBwYXJ0cy5cbiAqL1xuZnVuY3Rpb24gcXVhbGlmaWVkTmFtZVBhcnRzKG5vZGUsIHNvdXJjZSkge1xuICBpZiAoW1wiSWRlbnRpZmllclwiLCBcIlR5cGVOYW1lXCJdLmluY2x1ZGVzKG5vZGUubmFtZSkpIHJldHVybiBbbm9kZVRleHQobm9kZSwgc291cmNlKV1cbiAgaWYgKCFbXCJGaWVsZEFjY2Vzc1wiLCBcIlNjb3BlZFR5cGVOYW1lXCJdLmluY2x1ZGVzKG5vZGUubmFtZSkpIHJldHVybiB1bmRlZmluZWRcbiAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSlcblxuICBpZiAoY2hpbGRyZW4ubGVuZ3RoICE9IDIpIHJldHVybiB1bmRlZmluZWRcbiAgY29uc3QgbGVmdCA9IHF1YWxpZmllZE5hbWVQYXJ0cyhjaGlsZHJlblswXSwgc291cmNlKVxuICBjb25zdCByaWdodCA9IHF1YWxpZmllZE5hbWVQYXJ0cyhjaGlsZHJlblsxXSwgc291cmNlKVxuXG4gIHJldHVybiBsZWZ0ICYmIHJpZ2h0ID8gWy4uLmxlZnQsIC4uLnJpZ2h0XSA6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIENoZWNrcyB0aGUgb25seSBhY2NlcHRlZCBKYXZhIE9wdGlvbmFsIHR5cGUvZmFjdG9yeSBzeW1ib2wgc3BlbGxpbmdzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJzZXItcXVhbGlmaWVkIHN5bWJvbCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBub2RlIGlkZW50aWZpZXMgamF2YS51dGlsLk9wdGlvbmFsIG9yIE9wdGlvbmFsLlxuICovXG5mdW5jdGlvbiBpc0phdmFPcHRpb25hbFN5bWJvbChub2RlLCBzb3VyY2UpIHtcbiAgY29uc3QgcGFydHMgPSBxdWFsaWZpZWROYW1lUGFydHMobm9kZSwgc291cmNlKVxuXG4gIHJldHVybiBwYXJ0cz8uam9pbihcIi5cIikgPT0gXCJqYXZhLnV0aWwuT3B0aW9uYWxcIiB8fCBwYXJ0cz8uam9pbihcIi5cIikgPT0gXCJPcHRpb25hbFwiXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdXBwb3J0ZWQgSmF2YSBleHByZXNzaW9uIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIExlemVyIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IFtleHBlY3RlZFR5cGVdIC0gQ29udGV4dHVhbCBzZW1hbnRpYyB0eXBlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IFNlbWFudGljIGV4cHJlc3Npb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRFeHByZXNzaW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGV4cGVjdGVkVHlwZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSlcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggIT0gMSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvblwiLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24oY2hpbGRyZW5bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGV4cGVjdGVkVHlwZSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uLCBuYW1lOiBub2RlVGV4dChub2RlLCBzb3VyY2UpfSwge25hbWU6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJ0aGlzXCIpIHtcbiAgICBpZiAoIWNvbnRleHQuY3VycmVudENsYXNzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwicmVjZWl2ZXIgb3V0c2lkZSBhIHJlZmVyZW5jZSBjbGFzc1wiLCBsb2NhdGlvbilcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7Y2xhc3NJZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChjb250ZXh0LmN1cnJlbnRDbGFzcy5pZCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNlaXZlckV4cHJlc3Npb25cIiksIGxvY2F0aW9ufSwge3JlY2VpdmVyOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwiRmllbGRBY2Nlc3NcIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG4gICAgY29uc3QgcmVjZWl2ZXIgPSBjaGlsZHJlblswXVxuICAgIGNvbnN0IG1lbWJlciA9IGNoaWxkcmVuWzFdXG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoICE9IDIgfHwgcmVjZWl2ZXI/Lm5hbWUgIT0gXCJ0aGlzXCIgfHwgbWVtYmVyPy5uYW1lICE9IFwiSWRlbnRpZmllclwiIHx8ICFjb250ZXh0LmN1cnJlbnRDbGFzcykge1xuICAgICAgaWYgKHJlY2VpdmVyICYmIGtub3duRXhwcmVzc2lvblR5cGUocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpPy5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJwcml2YXRlIHJlZmVyZW5jZS1jbGFzcyBmaWVsZCBhY2Nlc3NcIiwgbG9jYXRpb24pXG4gICAgICB9XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiZmllbGQgYWNjZXNzIG91dHNpZGUgdGhlIGRlY2xhcmluZyByZWNlaXZlclwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgZmllbGQgPSBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBub2RlVGV4dChtZW1iZXIsIHNvdXJjZSkpXG5cbiAgICBpZiAoIWZpZWxkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGB1bmtub3duIHByaXZhdGUgZmllbGQgJyR7bm9kZVRleHQobWVtYmVyLCBzb3VyY2UpfSdgLCBub2RlTG9jYXRpb24obWVtYmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7ZmllbGQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZmllbGQuaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQcml2YXRlRmllbGRSZWFkXCIpLCBsb2NhdGlvbixcbiAgICAgIHJlY2VpdmVyOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY2VpdmVyRXhwcmVzc2lvbn0gKi8gKFxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpfSwge21lbWJlcjogbm9kZUxvY2F0aW9uKG1lbWJlciwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIkludGVnZXJMaXRlcmFsXCIpIHtcbiAgICBjb25zdCB2YWx1ZSA9IE51bWJlcihub2RlVGV4dChub2RlLCBzb3VyY2UpKVxuXG4gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJub24tc2FmZSBpbnRlZ2VyIGxpdGVyYWxcIiwgbG9jYXRpb24pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSW50ZWdlckxpdGVyYWxcIiksIGxvY2F0aW9uLCB2YWx1ZX0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwiQm9vbGVhbkxpdGVyYWxcIikge1xuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCb29sZWFuTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBub2RlVGV4dChub2RlLCBzb3VyY2UpID09IFwidHJ1ZVwifSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiU3RyaW5nTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBkZWNvZGVTdHJpbmdMaXRlcmFsKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJudWxsXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJudWxsIHJlZmVyZW5jZVwiLCBsb2NhdGlvbilcblxuICBpZiAobm9kZS5uYW1lID09IFwiT2JqZWN0Q3JlYXRpb25FeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKVxuICAgIGNvbnN0IHR5cGVOb2RlID0gY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IFtcIkdlbmVyaWNUeXBlXCIsIFwiVHlwZU5hbWVcIiwgXCJTY29wZWRUeXBlTmFtZVwiXS5pbmNsdWRlcyhjaGlsZC5uYW1lKSlcbiAgICBjb25zdCBuYW1lTm9kZSA9IHR5cGVOb2RlPy5uYW1lID09IFwiR2VuZXJpY1R5cGVcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbih0eXBlTm9kZSlbMF0gOiB0eXBlTm9kZVxuICAgIGNvbnN0IGFyZ3VtZW50TGlzdCA9IG5vZGUuZ2V0Q2hpbGQoXCJBcmd1bWVudExpc3RcIilcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IG5hbWVOb2RlID8gY29udGV4dC5yZWNvcmROYW1lcy5nZXQobm9kZVRleHQobmFtZU5vZGUsIHNvdXJjZSkpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoIXR5cGVOb2RlIHx8ICFuYW1lTm9kZSB8fCAhYXJndW1lbnRMaXN0IHx8ICFkZWNsYXJhdGlvbiB8fCBub2RlLmdldENoaWxkKFwiQ2xhc3NCb2R5XCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiY29uc3RydWN0aW9uIG9mIGFuIHVua25vd24gbm9taW5hbCBvciBhbm9ueW1vdXMgY2xhc3NcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGFyZ3VtZW50Tm9kZXMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KVxuICAgIGlmIChkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKSB7XG4gICAgICBpZiAodHlwZU5vZGUubmFtZSA9PSBcIkdlbmVyaWNUeXBlXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJnZW5lcmljIHJlZmVyZW5jZSBjb25zdHJ1Y3Rpb25cIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIGNvbnN0IGNsYXNzTG9jYXRpb24gPSBub2RlTG9jYXRpb24obmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHthcmd1bWVudHM6IGFyZ3VtZW50Tm9kZXMubWFwKChhcmd1bWVudCwgaW5kZXgpID0+XG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSkpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVmZXJlbmNlQ29uc3RydWN0aW9uXCIpLCBsb2NhdGlvbixcbiAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlVHlwZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgY2xhc3NMb2NhdGlvbil9LCB7Y2xhc3M6IGNsYXNzTG9jYXRpb259KVxuICAgIH1cbiAgICBpZiAoZGVjbGFyYXRpb24ua2luZCA9PSBcIkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb25cIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm93bmVkIHJlc291cmNlIGNvbnN0cnVjdGlvblwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCB0eXBlQXJndW1lbnRzTm9kZSA9IHR5cGVOb2RlLmdldENoaWxkKFwiVHlwZUFyZ3VtZW50c1wiKVxuXG4gICAgaWYgKHR5cGVOb2RlLm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiICYmICF0eXBlQXJndW1lbnRzTm9kZSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hbGZvcm1lZCBnZW5lcmljIHJlY29yZCBjb25zdHJ1Y3Rpb25cIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHR5cGVBcmd1bWVudHNOb2RlXG4gICAgICA/IHN0cnVjdHVyYWxDaGlsZHJlbih0eXBlQXJndW1lbnRzTm9kZSkubWFwKChhcmd1bWVudCkgPT4gY29udmVydEphdmFUeXBlQXJndW1lbnQoXG4gICAgICAgIGFyZ3VtZW50LCBgUmVjb3JkICcke2RlY2xhcmF0aW9uLm5hbWV9JyBhcHBsaWNhdGlvbmAsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKSlcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYXJndW1lbnRzOiBhcmd1bWVudE5vZGVzLm1hcCgoYXJndW1lbnQsIGluZGV4KSA9PlxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCxcbiAgICAgICAgICBpbnN0YW50aWF0ZWRSZWNvcmRGaWVsZFR5cGUoZGVjbGFyYXRpb24sIHR5cGVBcmd1bWVudHMsIGluZGV4KSkpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByZWNvcmQ6IHJlY29yZFR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIHR5cGVBcmd1bWVudHMpXG4gICAgfSwge3JlY29yZDogbm9kZUxvY2F0aW9uKG5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKVxuICAgIGNvbnN0IG9wZXJhdG9yTm9kZSA9IG5vZGUuZ2V0Q2hpbGQoXCJMb2dpY09wXCIpID8/IG5vZGUuZ2V0Q2hpbGQoXCJBcml0aE9wXCIpXG4gICAgY29uc3Qgb3BlcmFuZCA9IGNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiTG9naWNPcFwiICYmIGNoaWxkLm5hbWUgIT0gXCJBcml0aE9wXCIpXG4gICAgY29uc3Qgb3BlcmF0b3IgPSBvcGVyYXRvck5vZGUgPyBub2RlVGV4dChvcGVyYXRvck5vZGUsIHNvdXJjZSkgOiB1bmRlZmluZWRcblxuICAgIGlmICghb3BlcmF0b3JOb2RlIHx8ICFvcGVyYW5kIHx8IGNoaWxkcmVuLmxlbmd0aCAhPSAyIHx8IChvcGVyYXRvciAhPSBcIiFcIiAmJiBvcGVyYXRvciAhPSBcIi1cIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bmFyeSBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIGlmIChvcGVyYXRvciA9PSBcIiFcIiAmJiBvcGVyYW5kLm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCIgJiYgaXNFcXVhbHNJbnZvY2F0aW9uKG9wZXJhbmQsIHNvdXJjZSkgJiZcbiAgICAgICFpc1plcm9Bcmd1bWVudFJlY29yZE1lbWJlckludm9jYXRpb24ob3BlcmFuZCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpIHtcbiAgICAgIHJldHVybiBjb252ZXJ0U3RyaW5nRXF1YWxpdHkob3BlcmFuZCwgdHJ1ZSwgbG9jYXRpb24sIG5vZGVMb2NhdGlvbihvcGVyYXRvck5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH1cblxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIlVuYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBvcGVyYW5kOiBjb252ZXJ0RXhwcmVzc2lvbihvcGVyYW5kLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG9wZXJhdG9yTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KSwgb3BlcmF0b3IgPT0gXCIhXCIgPyBcIk5vdFwiIDogXCJOZWdhdGVcIilcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgbmFtZWQgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSlcbiAgICBjb25zdCBvcGVyYXRvck5vZGUgPSBub2RlLmdldENoaWxkKFwiQ29tcGFyZU9wXCIpID8/IG5vZGUuZ2V0Q2hpbGQoXCJBcml0aE9wXCIpID8/IG5vZGUuZ2V0Q2hpbGQoXCJMb2dpY09wXCIpID8/IG5vZGUuZ2V0Q2hpbGQoXCJCaXRPcFwiKVxuXG4gICAgaWYgKCFvcGVyYXRvck5vZGUgfHwgbmFtZWQubGVuZ3RoICE9IDMpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJiaW5hcnkgZXhwcmVzc2lvblwiLCBsb2NhdGlvbilcblxuICAgIGNvbnN0IG9wZXJhbmRzID0gW25hbWVkWzBdLCBuYW1lZFsyXV1cbiAgICBjb25zdCB1bnN1cHBvcnRlZE9wZXJhbmQgPSBvcGVyYW5kcy5maW5kKChvcGVyYW5kKSA9PiAhaXNTdXBwb3J0ZWRFeHByZXNzaW9uTm9kZShvcGVyYW5kKSlcblxuICAgIGlmICh1bnN1cHBvcnRlZE9wZXJhbmQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgdW5zdXBwb3J0ZWRPcGVyYW5kLm5hbWUsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZE9wZXJhbmQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gICAgY29uc3Qgb3BlcmF0b3IgPSBub2RlVGV4dChvcGVyYXRvck5vZGUsIHNvdXJjZSlcblxuICAgIGlmICghamF2YUJpbmFyeU9wZXJhdGlvbnMuaGFzKG9wZXJhdG9yKSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgYmluYXJ5ICR7b3BlcmF0b3J9YCwgbG9jYXRpb24pXG5cbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsZWZ0OiBjb252ZXJ0RXhwcmVzc2lvbihvcGVyYW5kc1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJpZ2h0OiBjb252ZXJ0RXhwcmVzc2lvbihvcGVyYW5kc1sxXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihvcGVyYXRvck5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSksIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCIpLkFkYXB0ZWRPcGVyYXRpb259ICovIChqYXZhQmluYXJ5T3BlcmF0aW9ucy5nZXQob3BlcmF0b3IpKSlcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwiVGVybmFyeUV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZGlyZWN0Q2hpbGRyZW4obm9kZSlcbiAgICBjb25zdCBxdWVzdGlvbiA9IGNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lID09IFwiP1wiIHx8IChjaGlsZC5uYW1lID09IFwiTG9naWNPcFwiICYmIG5vZGVUZXh0KGNoaWxkLCBzb3VyY2UpID09IFwiP1wiKSlcbiAgICBjb25zdCBjb2xvbiA9IGNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lID09IFwiOlwiIHx8IChjaGlsZC5uYW1lID09IFwiTG9naWNPcFwiICYmIG5vZGVUZXh0KGNoaWxkLCBzb3VyY2UpID09IFwiOlwiKSlcbiAgICBjb25zdCBuYW1lZCA9IGNoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkICE9PSBxdWVzdGlvbiAmJiBjaGlsZCAhPT0gY29sb24pXG5cbiAgICBpZiAoIXF1ZXN0aW9uIHx8ICFjb2xvbiB8fCBuYW1lZC5sZW5ndGggIT0gMykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInRlcm5hcnkgZXhwcmVzc2lvblwiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovICh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGFsdGVybmF0ZTogY29udmVydEV4cHJlc3Npb24obmFtZWRbMl0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgY29uZGl0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihuYW1lZFswXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBjb25zZXF1ZW50OiBjb252ZXJ0RXhwcmVzc2lvbihuYW1lZFsxXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIiksXG4gICAgICBsb2NhdGlvblxuICAgIH0sIHtcbiAgICAgIGFsdGVybmF0ZTogbm9kZUxvY2F0aW9uKG5hbWVkWzJdLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIGNvbG9uOiBub2RlTG9jYXRpb24oY29sb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgY29uZGl0aW9uOiBub2RlTG9jYXRpb24obmFtZWRbMF0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgY29uc2VxdWVudDogbm9kZUxvY2F0aW9uKG5hbWVkWzFdLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG9wZXJhdG9yOiBub2RlTG9jYXRpb24ocXVlc3Rpb24sIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSkpKVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIk1ldGhvZEludm9jYXRpb25cIikge1xuICAgIGlmIChpc0VxdWFsc0ludm9jYXRpb24obm9kZSwgc291cmNlKSAmJiAhaXNaZXJvQXJndW1lbnRSZWNvcmRNZW1iZXJJbnZvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKSB7XG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIk1ldGhvZE5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgICAgcmV0dXJuIGNvbnZlcnRTdHJpbmdFcXVhbGl0eShub2RlLCBmYWxzZSwgbG9jYXRpb24sIG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9XG5cbiAgICBjb25zdCBtZXRob2ROYW1lID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIk1ldGhvZE5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBhcmd1bWVudExpc3QgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiQXJndW1lbnRMaXN0XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgYXJndW1lbnROb2RlcyA9IHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpXG4gICAgY29uc3QgcmVjZWl2ZXIgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgIGNvbnN0IG1ldGhvZCA9IG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCByZWNlaXZlclRleHQgPSByZWNlaXZlciA/IG5vZGVUZXh0KHJlY2VpdmVyLCBzb3VyY2UpIDogXCJcIlxuXG4gICAgaWYgKHJlY2VpdmVyPy5uYW1lID09IFwiSWRlbnRpZmllclwiICYmIG1ldGhvZCA9PSBcImdldE1lc3NhZ2VcIiAmJiBhcmd1bWVudE5vZGVzLmxlbmd0aCA9PSAwICYmXG4gICAgICBjb250ZXh0LmJpbmRpbmdzLmdldChyZWNlaXZlclRleHQpPy5raW5kID09IFwiRXJyb3JUeXBlXCIpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVyTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JNZXNzYWdlUmVhZFwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHJlY2VpdmVyOiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb246IHJlY2VpdmVyTG9jYXRpb24sIG5hbWU6IHJlY2VpdmVyVGV4dH0sIHtcbiAgICAgICAgICBuYW1lOiByZWNlaXZlckxvY2F0aW9uXG4gICAgICAgIH0pXG4gICAgICB9LCB7bWVtYmVyOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cblxuICAgIGlmIChyZWNlaXZlciAmJiBbXCJnZXRDbGFzc1wiLCBcImhhc2hDb2RlXCIsIFwidG9TdHJpbmdcIiwgXCJjbG9uZVwiLCBcIm5vdGlmeVwiLCBcIm5vdGlmeUFsbFwiLCBcIndhaXRcIl0uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInJlZmxlY3RpdmUgb3IgT2JqZWN0IG1lbWJlciBhY2Nlc3NcIiwgbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cblxuICAgIGlmIChyZWNlaXZlciAmJiBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KT8ua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIikge1xuICAgICAgY29uc3QgcmVjZWl2ZXJUeXBlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWZlcmVuY2VUeXBlfSAqLyAoXG4gICAgICAgIGtub3duRXhwcmVzc2lvblR5cGUocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKVxuICAgICAgY29uc3QgZGVjbGFyZWRNZXRob2QgPSBjb250ZXh0LmNsYXNzZXMuZ2V0KHJlY2VpdmVyVHlwZS5kZWNsYXJhdGlvbklkKT8ubWV0aG9kcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09IG1ldGhvZClcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2FyZ3VtZW50czogYXJndW1lbnROb2Rlcy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGRlY2xhcmVkTWV0aG9kPy5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSkpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWV0aG9kQ2FsbEV4cHJlc3Npb25cIiksIGxvY2F0aW9uLCBtZXRob2Q6IGRlY2xhcmVkTWV0aG9kPy5pZCA/PyBtZXRob2QsXG4gICAgICByZWNlaXZlcjogY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpfSwge21lbWJlcjogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG5cbiAgICBpZiAocmVjZWl2ZXIgJiYgaXNKYXZhT3B0aW9uYWxTeW1ib2wocmVjZWl2ZXIsIHNvdXJjZSkpIHtcbiAgICAgIGNvbnN0IGZhY3RvcnlMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICBpZiAobWV0aG9kID09IFwiZW1wdHlcIiAmJiBhcmd1bWVudE5vZGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbE5vbmVcIiksIGxvY2F0aW9ufSwge1xuICAgICAgICAgIGFic2VuY2U6IGZhY3RvcnlMb2NhdGlvbixcbiAgICAgICAgICBmYWN0b3J5OiBmYWN0b3J5TG9jYXRpb25cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChtZXRob2QgPT0gXCJvZlwiICYmIGFyZ3VtZW50Tm9kZXMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsU29tZVwiKSxcbiAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICB2YWx1ZTogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnROb2Rlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCxcbiAgICAgICAgICAgIGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiID8gZXhwZWN0ZWRUeXBlLnZhbHVlVHlwZSA6IHVuZGVmaW5lZClcbiAgICAgICAgfSwge2ZhY3Rvcnk6IGZhY3RvcnlMb2NhdGlvbiwgc29tZTogZmFjdG9yeUxvY2F0aW9ufSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgdW5zdXBwb3J0ZWQgT3B0aW9uYWwuJHttZXRob2R9YCwgZmFjdG9yeUxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAocmVjZWl2ZXI/Lm5hbWUgPT0gXCJJZGVudGlmaWVyXCIgJiYgY29udGV4dC5iaW5kaW5ncy5nZXQocmVjZWl2ZXJUZXh0KT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICBjb25zdCBvcGVyYW5kID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZGVudGlmaWVyRXhwcmVzc2lvbn0gKi8gKFxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgIClcbiAgICAgIGNvbnN0IG9wZXJhdGlvbkxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICAgIGlmIChtZXRob2QgPT0gXCJpc1ByZXNlbnRcIiAmJiBhcmd1bWVudE5vZGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbElzUHJlc2VudFwiKSwgbG9jYXRpb24sIG9wZXJhbmR9LCB7XG4gICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdGlvbkxvY2F0aW9uXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAobWV0aG9kID09IFwiZ2V0XCIgJiYgYXJndW1lbnROb2Rlcy5sZW5ndGggPT0gMCkge1xuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxVbndyYXBcIiksIGxvY2F0aW9uLCBvcGVyYW5kfSwge1xuICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgICB1bndyYXA6IG9wZXJhdGlvbkxvY2F0aW9uXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYHVuc3VwcG9ydGVkIE9wdGlvbmFsLiR7bWV0aG9kfWAsIG9wZXJhdGlvbkxvY2F0aW9uKVxuICAgIH1cblxuICAgIGlmIChyZWNlaXZlciAmJiBtZXRob2QgPT0gXCJvZlwiICYmIHJlY2VpdmVyVGV4dCA9PSBcImphdmEudXRpbC5MaXN0XCIpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiTGlzdFR5cGVcIiA/IGV4cGVjdGVkVHlwZS5lbGVtZW50VHlwZSA6IHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGVsZW1lbnRzOiBhcmd1bWVudE5vZGVzLm1hcCgoYXJndW1lbnQpID0+IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBlbGVtZW50VHlwZSkpLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMaXN0TGl0ZXJhbFwiKSxcbiAgICAgICAgbG9jYXRpb25cbiAgICAgIH0sIHtmYWN0b3J5OiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgICBpZiAocmVjZWl2ZXIgJiYgbWV0aG9kID09IFwib2ZcIiAmJiByZWNlaXZlclRleHQgPT0gXCJqYXZhLnV0aWwuTWFwXCIpIHtcbiAgICAgIGlmIChhcmd1bWVudE5vZGVzLmxlbmd0aCAlIDIgIT0gMCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIk1hcC5vZiBvZGQgYXJndW1lbnQgY291bnRcIiwgbG9jYXRpb24pXG4gICAgICBpZiAoYXJndW1lbnROb2Rlcy5sZW5ndGggPiAyMCkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiamF2YS51dGlsLk1hcC5vZiBzdXBwb3J0cyBhdCBtb3N0IHRlbiBlbnRyaWVzXCIsIG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVudHJpZXMgPSBbXVxuICAgICAgY29uc3QgdmFsdWVUeXBlID0gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiTWFwVHlwZVwiID8gZXhwZWN0ZWRUeXBlLnZhbHVlVHlwZSA6IHVuZGVmaW5lZFxuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJndW1lbnROb2Rlcy5sZW5ndGg7IGluZGV4ICs9IDIpIHtcbiAgICAgICAgY29uc3Qga2V5Tm9kZSA9IGFyZ3VtZW50Tm9kZXNbaW5kZXhdXG5cbiAgICAgICAgaWYgKGtleU5vZGUubmFtZSAhPSBcIlN0cmluZ0xpdGVyYWxcIikge1xuICAgICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYXAga2V5IG90aGVyIHRoYW4gYSBzdHJpbmcgbGl0ZXJhbFwiLCBub2RlTG9jYXRpb24oa2V5Tm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gZGlyZWN0Q2hpbGRyZW4oYXJndW1lbnRMaXN0KS5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PSBcIixcIiAmJlxuICAgICAgICAgIGNoaWxkLmZyb20gPj0ga2V5Tm9kZS50byAmJiBjaGlsZC50byA8PSBhcmd1bWVudE5vZGVzW2luZGV4ICsgMV0uZnJvbSlcblxuICAgICAgICBpZiAoIXNlcGFyYXRvcikgdGhyb3cgbmV3IEVycm9yKFwiTGV6ZXIgb21pdHRlZCB0aGUgSmF2YSBNYXAub2YgZW50cnkgc2VwYXJhdG9yLlwiKVxuICAgICAgICBlbnRyaWVzLnB1c2god2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgICAga2V5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0cmluZ0xpdGVyYWx9ICovIChjb252ZXJ0RXhwcmVzc2lvbihrZXlOb2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSksXG4gICAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwRW50cnlcIiksXG4gICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwga2V5Tm9kZS5mcm9tLCBhcmd1bWVudE5vZGVzW2luZGV4ICsgMV0udG8pLFxuICAgICAgICAgIHZhbHVlOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudE5vZGVzW2luZGV4ICsgMV0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHZhbHVlVHlwZSlcbiAgICAgICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24oc2VwYXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKX0pKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7ZW50cmllcywga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwTGl0ZXJhbFwiKSwgbG9jYXRpb259LCB7XG4gICAgICAgIGZhY3Rvcnk6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKHJlY2VpdmVyICYmIG1ldGhvZCA9PSBcImdldFwiICYmIGFyZ3VtZW50Tm9kZXMubGVuZ3RoID09IDEpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyLm5hbWUgPT0gXCJJZGVudGlmaWVyXCIgPyBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlVGV4dChyZWNlaXZlciwgc291cmNlKSkgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCByZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiIHx8XG4gICAgICAgICghcmVjZWl2ZXJUeXBlICYmIGFyZ3VtZW50Tm9kZXNbMF0ubmFtZSA9PSBcIlN0cmluZ0xpdGVyYWxcIikpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICAgIGNvbGxlY3Rpb246IGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAgICBrZXk6IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50Tm9kZXNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1hcExvb2t1cEV4cHJlc3Npb25cIiksXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgdG90YWxpdHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInByb3ZlblwiKVxuICAgICAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICBpbmRleDogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnROb2Rlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxpc3RJbmRleEV4cHJlc3Npb25cIiksXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICB0b3RhbGl0eTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiZmFpbC1vbi1hYnNlbmNlXCIpXG4gICAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmIChyZWNlaXZlciAmJiBtZXRob2QgPT0gXCJzaXplXCIgJiYgYXJndW1lbnROb2Rlcy5sZW5ndGggPT0gMCkge1xuICAgICAgY29uc3QgcmVjZWl2ZXJUeXBlID0ga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcblxuICAgICAgaWYgKHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIlJlY29yZFR5cGVcIikge1xuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgICAgZmllbGQ6IG1ldGhvZCxcbiAgICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZW1iZXJSZWFkXCIpLFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgICAgfSwge21lbWJlcjogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIiksXG4gICAgICAgIGxvY2F0aW9uXG4gICAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuXG4gICAgaWYgKHJlY2VpdmVyICYmIHJlY2VpdmVyVGV4dCA9PSBcIk1haW5cIiAmJiBjb250ZXh0LmN1cnJlbnRDbGFzcyAmJiAhY29udGV4dC5iaW5kaW5ncy5oYXMocmVjZWl2ZXJUZXh0KSkge1xuICAgICAgY29uc3QgbG9jYWxTaWduYXR1cmUgPSBjb250ZXh0LmZ1bmN0aW9ucy5nZXQobWV0aG9kKVxuXG4gICAgICBpZiAobG9jYWxTaWduYXR1cmUpIHtcbiAgICAgICAgY29uc3QgYXJndW1lbnRzXyA9IGFyZ3VtZW50Tm9kZXMubWFwKChjaGlsZCwgaW5kZXgpID0+XG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24oY2hpbGQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGxvY2FsU2lnbmF0dXJlLnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSlcblxuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBjYWxsZWU6IG1ldGhvZCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2FsbEV4cHJlc3Npb25cIiksIGxvY2F0aW9ufSwge1xuICAgICAgICAgIGNhbGxlZTogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlY2VpdmVyKSB7XG4gICAgICBjb25zdCBxdWFsaWZpZWROYW1lID0gYCR7cmVjZWl2ZXJUZXh0fS4ke21ldGhvZH1gXG4gICAgICBjb25zdCBxdWFsaWZpZWRTaWduYXR1cmUgPSBjb250ZXh0LmZ1bmN0aW9ucy5nZXQocXVhbGlmaWVkTmFtZSlcblxuICAgICAgaWYgKHF1YWxpZmllZFNpZ25hdHVyZSkge1xuICAgICAgICBjb25zdCBhcmd1bWVudHNfID0gYXJndW1lbnROb2Rlcy5tYXAoKGNoaWxkLCBpbmRleCkgPT5cbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihjaGlsZCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgcXVhbGlmaWVkU2lnbmF0dXJlLnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSlcblxuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBjYWxsZWU6IHF1YWxpZmllZE5hbWUsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhbGxFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtcbiAgICAgICAgICBjYWxsZWU6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZWNlaXZlciAmJiBhcmd1bWVudE5vZGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGZpZWxkOiBtZXRob2QsXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1lbWJlclJlYWRcIiksXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICByZWNlaXZlcjogY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgICB9LCB7bWVtYmVyOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cblxuICAgIGNvbnN0IHVuc3VwcG9ydGVkUmVjZWl2ZXIgPSByZWNlaXZlclxuXG4gICAgaWYgKHVuc3VwcG9ydGVkUmVjZWl2ZXIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtZXRob2QgaW52b2NhdGlvbiByZWNlaXZlclwiLCBub2RlTG9jYXRpb24odW5zdXBwb3J0ZWRSZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3QgdW5zdXBwb3J0ZWRBcmd1bWVudCA9IGFyZ3VtZW50Tm9kZXMuZmluZCgoY2hpbGQpID0+ICFpc1N1cHBvcnRlZEV4cHJlc3Npb25Ob2RlKGNoaWxkKSlcblxuICAgIGlmICh1bnN1cHBvcnRlZEFyZ3VtZW50KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBtZXRob2QgYXJndW1lbnQgJHt1bnN1cHBvcnRlZEFyZ3VtZW50Lm5hbWV9YCwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkQXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3QgYXJndW1lbnRzXyA9IGFyZ3VtZW50Tm9kZXMubWFwKChjaGlsZCwgaW5kZXgpID0+XG4gICAgICBjb252ZXJ0RXhwcmVzc2lvbihjaGlsZCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgc2lnbmF0dXJlPy5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSkpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBjYWxsZWU6IG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhbGxFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtcbiAgICAgIGNhbGxlZTogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgbm9kZS5uYW1lLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhlIG9uZSBwYXJzZXItbmF0aXZlIEphdmEgc3RyaW5nIGVxdWFsaXR5IGludm9jYXRpb24gZm9ybS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gTWV0aG9kIGludm9jYXRpb24gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgaW52b2NhdGlvbiBzcGVsbHMgYC5lcXVhbHNgIHdpdGggYSByZWNlaXZlci5cbiAqL1xuZnVuY3Rpb24gaXNFcXVhbHNJbnZvY2F0aW9uKG5vZGUsIHNvdXJjZSkge1xuICBjb25zdCBtZXRob2ROYW1lID0gbm9kZS5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgY29uc3QgcmVjZWl2ZXJzID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuXG4gIHJldHVybiBtZXRob2ROYW1lICE9IG51bGwgJiYgbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSA9PSBcImVxdWFsc1wiICYmIHJlY2VpdmVycy5sZW5ndGggPT0gMVxufVxuXG4vKipcbiAqIERpc3Rpbmd1aXNoZXMgYSB6ZXJvLWFyZ3VtZW50IG5vbWluYWwgZmllbGQgYWNjZXNzb3IgZnJvbSBKYXZhIHN0cmluZyBlcXVhbGl0eSBzeW50YXguXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIE1ldGhvZCBpbnZvY2F0aW9uIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoaXMgaXMgYSBrbm93biByZWNvcmQgcmVjZWl2ZXIgd2l0aCBubyBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIGlzWmVyb0FyZ3VtZW50UmVjb3JkTWVtYmVySW52b2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFyZ3VtZW50TGlzdCA9IG5vZGUuZ2V0Q2hpbGQoXCJBcmd1bWVudExpc3RcIilcbiAgY29uc3QgcmVjZWl2ZXIgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuXG4gIHJldHVybiBhcmd1bWVudExpc3QgIT0gbnVsbCAmJiBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KS5sZW5ndGggPT0gMCAmJiByZWNlaXZlciAhPSBudWxsICYmXG4gICAga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCk/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCJcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBKYXZhIGAuZXF1YWxzYCBvciBpdHMgZGlyZWN0bHkgbmVnYXRlZCBmb3JtIHdpdGhvdXQgc291cmNlLXRleHQgaW5mZXJlbmNlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJzZXIgbWV0aG9kIGludm9jYXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG5lZ2F0ZWQgLSBXaGV0aGVyIGEgcGFyc2VyLW93bmVkIHVuYXJ5IG5vdCB3cmFwcyB0aGUgaW52b2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gV2hvbGUgZXF1YWxpdHkgZXhwcmVzc2lvbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG9wZXJhdG9yTG9jYXRpb24gLSBQYXJzZXItb3duZWQgb3BlcmF0b3IvbWV0aG9kIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gQWRhcHRlZCBlcXVhbGl0eSBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0U3RyaW5nRXF1YWxpdHkobm9kZSwgbmVnYXRlZCwgbG9jYXRpb24sIG9wZXJhdG9yTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgYXJndW1lbnRMaXN0ID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIkFyZ3VtZW50TGlzdFwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBhcmd1bWVudHNfID0gc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50TGlzdClcbiAgY29uc3QgcmVjZWl2ZXJzID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICBjb25zdCB1bnN1cHBvcnRlZEFyZ3VtZW50ID0gYXJndW1lbnRzXy5maW5kKChjaGlsZCkgPT4gIWlzU3VwcG9ydGVkRXhwcmVzc2lvbk5vZGUoY2hpbGQpKVxuXG4gIGlmIChyZWNlaXZlcnMubGVuZ3RoICE9IDEgfHwgYXJndW1lbnRzXy5sZW5ndGggIT0gMSB8fCB1bnN1cHBvcnRlZEFyZ3VtZW50KSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInN0cmluZyBlcXVhbHMgaW52b2NhdGlvblwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uPn0gKi9cbiAgY29uc3QgcmFuZ2VzID0ge29wZXJhdG9yOiBvcGVyYXRvckxvY2F0aW9ufVxuXG4gIGlmIChuZWdhdGVkKSB7XG4gICAgcmFuZ2VzLmVxdWFsaXR5T3BlcmF0b3IgPSBub2RlTG9jYXRpb24ocmVxdWlyZWRDaGlsZChub2RlLCBcIk1ldGhvZE5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSksIGZpbGVuYW1lLCBzb3VyY2UpXG4gIH1cblxuICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGtpbmQ6IFwiQmluYXJ5RXhwcmVzc2lvblwiLFxuICAgIGxlZnQ6IGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyc1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgbG9jYXRpb24sXG4gICAgcmlnaHQ6IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIH0sIHJhbmdlcyksIG5lZ2F0ZWQgPyBcIlN0cmluZ05vdEVxdWFsXCIgOiBcIlN0cmluZ0VxdWFsXCIpXG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIExlemVyIG5vZGUgaXMgaW4gdGhlIGV4cHJlc3Npb24gc3Vic2V0LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBKYXZhIHN5bnRheCBub2RlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG5vZGUgaXMgc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBpc1N1cHBvcnRlZEV4cHJlc3Npb25Ob2RlKG5vZGUpIHtcbiAgcmV0dXJuIFtcbiAgICBcIklkZW50aWZpZXJcIixcbiAgICBcIkludGVnZXJMaXRlcmFsXCIsXG4gICAgXCJCb29sZWFuTGl0ZXJhbFwiLFxuICAgIFwiU3RyaW5nTGl0ZXJhbFwiLFxuICAgIFwiVW5hcnlFeHByZXNzaW9uXCIsXG4gICAgXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgXCJUZXJuYXJ5RXhwcmVzc2lvblwiLFxuICAgIFwiTWV0aG9kSW52b2NhdGlvblwiLFxuICAgIFwiT2JqZWN0Q3JlYXRpb25FeHByZXNzaW9uXCIsXG4gICAgXCJGaWVsZEFjY2Vzc1wiLFxuICAgIFwidGhpc1wiLFxuICAgIFwibnVsbFwiLFxuICAgIFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIlxuICBdLmluY2x1ZGVzKG5vZGUubmFtZSlcbn1cblxuLyoqXG4gKiBBcHBsaWVzIEphdmEgVW5pY29kZSB0cmFuc2xhdGlvbiBiZWZvcmUgdG9rZW4tbGV2ZWwgc3RyaW5nIGVzY2FwZSBkZWNvZGluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsaXRlcmFsIC0gUGFyc2VyLWNvbmZpcm1lZCBKYXZhIHN0cmluZyBsaXRlcmFsLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBMaXRlcmFsIHNvdXJjZSBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFVuaWNvZGUtdHJhbnNsYXRlZCBsaXRlcmFsLlxuICovXG5mdW5jdGlvbiB0cmFuc2xhdGVVbmljb2RlRXNjYXBlcyhsaXRlcmFsLCBsb2NhdGlvbikge1xuICBsZXQgdHJhbnNsYXRlZCA9IFwiXCJcbiAgbGV0IGNvbnNlY3V0aXZlQmFja3NsYXNoZXMgPSAwXG4gIGxldCBwcmV2aW91c1dhc1VuaWNvZGVFc2NhcGUgPSBmYWxzZVxuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaXRlcmFsLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IGNoYXJhY3RlciA9IGxpdGVyYWxbaW5kZXhdXG4gICAgY29uc3QgZWxpZ2libGUgPSBjaGFyYWN0ZXIgPT0gXCJcXFxcXCIgJiYgKHByZXZpb3VzV2FzVW5pY29kZUVzY2FwZSB8fCBjb25zZWN1dGl2ZUJhY2tzbGFzaGVzICUgMiA9PSAwKVxuXG4gICAgaWYgKGVsaWdpYmxlICYmIGxpdGVyYWxbaW5kZXggKyAxXSA9PSBcInVcIikge1xuICAgICAgbGV0IGRpZ2l0c1N0YXJ0ID0gaW5kZXggKyAyXG5cbiAgICAgIHdoaWxlIChsaXRlcmFsW2RpZ2l0c1N0YXJ0XSA9PSBcInVcIikgZGlnaXRzU3RhcnQrK1xuXG4gICAgICBjb25zdCBoZXhhZGVjaW1hbCA9IGxpdGVyYWwuc2xpY2UoZGlnaXRzU3RhcnQsIGRpZ2l0c1N0YXJ0ICsgNClcbiAgICAgIGNvbnN0IGlzSGV4YWRlY2ltYWwgPSBoZXhhZGVjaW1hbC5sZW5ndGggPT0gNCAmJiBbLi4uaGV4YWRlY2ltYWxdLmV2ZXJ5KChkaWdpdCkgPT5cbiAgICAgICAgKGRpZ2l0ID49IFwiMFwiICYmIGRpZ2l0IDw9IFwiOVwiKSB8fCAoZGlnaXQgPj0gXCJBXCIgJiYgZGlnaXQgPD0gXCJGXCIpIHx8IChkaWdpdCA+PSBcImFcIiAmJiBkaWdpdCA8PSBcImZcIilcbiAgICAgIClcblxuICAgICAgaWYgKCFpc0hleGFkZWNpbWFsKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgc3RyaW5nIGVzY2FwZVwiLCBsb2NhdGlvbilcblxuICAgICAgY29uc3QgdHJhbnNsYXRlZENoYXJhY3RlciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoTnVtYmVyLnBhcnNlSW50KGhleGFkZWNpbWFsLCAxNikpXG5cbiAgICAgIHRyYW5zbGF0ZWQgKz0gdHJhbnNsYXRlZENoYXJhY3RlclxuICAgICAgY29uc2VjdXRpdmVCYWNrc2xhc2hlcyA9IHRyYW5zbGF0ZWRDaGFyYWN0ZXIgPT0gXCJcXFxcXCIgPyBjb25zZWN1dGl2ZUJhY2tzbGFzaGVzICsgMSA6IDBcbiAgICAgIHByZXZpb3VzV2FzVW5pY29kZUVzY2FwZSA9IHRydWVcbiAgICAgIGluZGV4ID0gZGlnaXRzU3RhcnQgKyAzXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHRyYW5zbGF0ZWQgKz0gY2hhcmFjdGVyXG4gICAgY29uc2VjdXRpdmVCYWNrc2xhc2hlcyA9IGNoYXJhY3RlciA9PSBcIlxcXFxcIiA/IGNvbnNlY3V0aXZlQmFja3NsYXNoZXMgKyAxIDogMFxuICAgIHByZXZpb3VzV2FzVW5pY29kZUVzY2FwZSA9IGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJhbnNsYXRlZFxufVxuXG4vKipcbiAqIERlY29kZXMgdGhlIGFjY2VwdGVkIGVzY2FwZXMgZnJvbSBvbmUgcGFyc2VyLWNvbmZpcm1lZCBKYXZhIHN0cmluZyBsaXRlcmFsLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBKYXZhIFN0cmluZ0xpdGVyYWwgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBEZWNvZGVkIFVuaWNvZGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBkZWNvZGVTdHJpbmdMaXRlcmFsKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbGl0ZXJhbCA9IHRyYW5zbGF0ZVVuaWNvZGVFc2NhcGVzKG5vZGVUZXh0KG5vZGUsIHNvdXJjZSksIGxvY2F0aW9uKVxuICBsZXQgdmFsdWUgPSBcIlwiXG5cbiAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGxpdGVyYWwubGVuZ3RoIC0gMTsgaW5kZXgrKykge1xuICAgIGNvbnN0IGNoYXJhY3RlciA9IGxpdGVyYWxbaW5kZXhdXG5cbiAgICBpZiAoY2hhcmFjdGVyID09IFwiXFxcIlwiIHx8IGNoYXJhY3RlciA9PSBcIlxcblwiIHx8IGNoYXJhY3RlciA9PSBcIlxcclwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiaW52YWxpZCBzdHJpbmcgbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICBpZiAoY2hhcmFjdGVyICE9IFwiXFxcXFwiKSB7XG4gICAgICB2YWx1ZSArPSBjaGFyYWN0ZXJcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGluZGV4ICsgMSA+PSBsaXRlcmFsLmxlbmd0aCAtIDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJpbnZhbGlkIHN0cmluZyBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuXG4gICAgY29uc3QgZXNjYXBlZCA9IGxpdGVyYWxbKytpbmRleF1cbiAgICBjb25zdCBzaW1wbGUgPSBzaW1wbGVTdHJpbmdFc2NhcGVzW2VzY2FwZWRdXG5cbiAgICBpZiAoc2ltcGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbHVlICs9IHNpbXBsZVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoZXNjYXBlZCA+PSBcIjBcIiAmJiBlc2NhcGVkIDw9IFwiN1wiKSB7XG4gICAgICBsZXQgb2N0YWwgPSBlc2NhcGVkXG4gICAgICBjb25zdCBtYXhpbXVtTGVuZ3RoID0gZXNjYXBlZCA8PSBcIjNcIiA/IDMgOiAyXG5cbiAgICAgIHdoaWxlIChvY3RhbC5sZW5ndGggPCBtYXhpbXVtTGVuZ3RoICYmIGxpdGVyYWxbaW5kZXggKyAxXSA+PSBcIjBcIiAmJiBsaXRlcmFsW2luZGV4ICsgMV0gPD0gXCI3XCIpIHtcbiAgICAgICAgb2N0YWwgKz0gbGl0ZXJhbFsrK2luZGV4XVxuICAgICAgfVxuXG4gICAgICB2YWx1ZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKE51bWJlci5wYXJzZUludChvY3RhbCwgOCkpXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCBzdHJpbmcgZXNjYXBlXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgaWYgKCFoYXNPbmx5VW5pY29kZVNjYWxhcnModmFsdWUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiaW52YWxpZCBVbmljb2RlIHN0cmluZyBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleHBsaWNpdCBKYXZhIHJldHVybiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gc3RhdGVtZW50IC0gSmF2YSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZXR1cm5TdGF0ZW1lbnR9IFNlbWFudGljIHJldHVybi5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJldHVybihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChzdGF0ZW1lbnQubmFtZSAhPSBcIlJldHVyblN0YXRlbWVudFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIHN0YXRlbWVudC5uYW1lLCBsb2NhdGlvbilcblxuICBjb25zdCBleHByZXNzaW9uTm9kZXMgPSBkaXJlY3RDaGlsZHJlbihzdGF0ZW1lbnQpLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJyZXR1cm5cIiAmJiBjaGlsZC5uYW1lICE9IFwiO1wiKVxuICBjb25zdCBleHByZXNzaW9uID0gZXhwcmVzc2lvbk5vZGVzLmxlbmd0aCA9PSAxID8gZXhwcmVzc2lvbk5vZGVzWzBdIDogdW5kZWZpbmVkXG5cbiAgaWYgKGV4cHJlc3Npb25Ob2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgY29uc3QgdW5zdXBwb3J0ZWQgPSBleHByZXNzaW9uTm9kZXNbMF1cblxuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcbiAgICAgIFwiamF2YVwiLFxuICAgICAgdW5zdXBwb3J0ZWQ/Lm5hbWUgPz8gXCJyZXR1cm4gZXhwcmVzc2lvblwiLFxuICAgICAgdW5zdXBwb3J0ZWQgPyBub2RlTG9jYXRpb24odW5zdXBwb3J0ZWQsIGZpbGVuYW1lLCBzb3VyY2UpIDogbG9jYXRpb25cbiAgICApXG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLihleHByZXNzaW9uID8ge2V4cHJlc3Npb246IGNvbnZlcnRFeHByZXNzaW9uKFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgc291cmNlLFxuICAgICAgY29udGV4dCxcbiAgICAgIGNvbnRleHQucmV0dXJuVHlwZT8ua2luZCA9PSBcIlR5cGVSZWZlcmVuY2VcIiAmJiBjb250ZXh0LnJldHVyblR5cGUubmFtZSA9PSBcInZvaWRcIlxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGUgfCB1bmRlZmluZWR9ICovIChjb250ZXh0LnJldHVyblR5cGUpXG4gICAgKX0gOiB7fSksXG4gICAga2luZDogXCJSZXR1cm5TdGF0ZW1lbnRcIixcbiAgICBsb2NhdGlvblxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIEphdmEgbG9jYWwgZGVjbGFyYXRpb24gb3IgYXNzaWdubWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBzdGF0ZW1lbnQgLSBKYXZhIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkxvY2FsU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnR9IFNlbWFudGljIGxvY2FsIG9yIHByaXZhdGUtZmllbGQgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0TG9jYWxTdGF0ZW1lbnQoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIikge1xuICAgIGNvbnN0IGRlY2xhcmF0b3JzID0gc3RhdGVtZW50LmdldENoaWxkcmVuKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpXG4gICAgY29uc3QgdHlwZU5vZGUgPSBkZWNsYXJhdGlvblR5cGUoc3RhdGVtZW50KVxuICAgIGNvbnN0IHZhck5vZGUgPSBzdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJ2YXJcIilcbiAgICBjb25zdCBtb2RpZmllcnMgPSBzdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgICBjb25zdCBtb2RpZmllckNoaWxkcmVuID0gbW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKG1vZGlmaWVycykgOiBbXVxuXG4gICAgaWYgKHZhck5vZGUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ2YXIgbG9jYWwgZGVjbGFyYXRpb25cIiwgbm9kZUxvY2F0aW9uKHZhck5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmIChkZWNsYXJhdG9ycy5sZW5ndGggIT0gMSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm11bHRpcGxlIGxvY2FsIGRlY2xhcmF0b3JzXCIsIGxvY2F0aW9uKVxuICAgIGlmICghdHlwZU5vZGUgfHwgdHlwZU5vZGUubmFtZSA9PSBcIkFycmF5VHlwZVwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgbG9jYWwgdHlwZVwiLCBsb2NhdGlvbilcbiAgICBpZiAobW9kaWZpZXJDaGlsZHJlbi5zb21lKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcImZpbmFsXCIpIHx8IG1vZGlmaWVyQ2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIGxvY2FsIG1vZGlmaWVyc1wiLCBtb2RpZmllcnMgPyBub2RlTG9jYXRpb24obW9kaWZpZXJzLCBmaWxlbmFtZSwgc291cmNlKSA6IGxvY2F0aW9uKVxuICAgIH1cblxuICAgIGNvbnN0IGRlY2xhcmF0b3IgPSBkZWNsYXJhdG9yc1swXVxuICAgIGNvbnN0IGRlZmluaXRpb24gPSByZXF1aXJlZENoaWxkKGRlY2xhcmF0b3IsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBkZWNsYXJhdG9yLmdldENoaWxkKFwiQXNzaWduT3BcIilcbiAgICBjb25zdCBkaW1lbnNpb25zID0gZGVjbGFyYXRvci5nZXRDaGlsZHJlbihcIkRpbWVuc2lvblwiKVxuICAgIGNvbnN0IGluaXRpYWxpemVyTm9kZXMgPSBkaXJlY3RDaGlsZHJlbihkZWNsYXJhdG9yKS5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiRGVmaW5pdGlvblwiICYmIGNoaWxkLm5hbWUgIT0gXCJBc3NpZ25PcFwiKVxuXG4gICAgaWYgKGRpbWVuc2lvbnMubGVuZ3RoID4gMCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImFycmF5IGxvY2FsIGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihkZWNsYXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBpZiAoIWFzc2lnbm1lbnQgfHwgbm9kZVRleHQoYXNzaWdubWVudCwgc291cmNlKSAhPSBcIj1cIiB8fCBpbml0aWFsaXplck5vZGVzLmxlbmd0aCAhPSAxKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5pbml0aWFsaXplZCBsb2NhbCBkZWNsYXJhdGlvblwiLCBub2RlTG9jYXRpb24oZGVjbGFyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuXG4gICAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcblxuICAgIGlmIChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJsb2NhbCBiaW5kaW5nIGNvbGxpZGVzIHdpdGggYSBjb25zdW1lZCBzb3VyY2UgYmluZGluZ1wiLCBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSBjb252ZXJ0VHlwZSh0eXBlTm9kZSwgYExvY2FsICcke25hbWV9J2AsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuICAgIGNvbnN0IGluaXRpYWxpemVyID0gY29udmVydEV4cHJlc3Npb24oaW5pdGlhbGl6ZXJOb2Rlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgdHlwZSlcblxuICAgIGNvbnRleHQuYmluZGluZ3Muc2V0KG5hbWUsIHR5cGUpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBpbml0aWFsaXplcixcbiAgICAgIGtpbmQ6IFwiTG9jYWxEZWNsYXJhdGlvblwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBtdXRhYmxlOiBtb2RpZmllckNoaWxkcmVuLmxlbmd0aCA9PSAwLFxuICAgICAgbmFtZSxcbiAgICAgIHR5cGVcbiAgICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLCBvcGVyYXRvcjogbm9kZUxvY2F0aW9uKGFzc2lnbm1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBzdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiKVxuXG4gICAgaWYgKCFhc3NpZ25tZW50KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIHN0YXRlbWVudC5uYW1lLCBsb2NhdGlvbilcblxuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKGFzc2lnbm1lbnQpXG4gICAgY29uc3Qgb3BlcmF0b3IgPSBhc3NpZ25tZW50LmdldENoaWxkKFwiQXNzaWduT3BcIilcbiAgICBjb25zdCB0YXJnZXQgPSBjaGlsZHJlblswXVxuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBjaGlsZHJlbi5hdCgtMSlcblxuICAgIGlmICghb3BlcmF0b3IgfHwgbm9kZVRleHQob3BlcmF0b3IsIHNvdXJjZSkgIT0gXCI9XCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJjb21wb3VuZCBhc3NpZ25tZW50XCIsIG5vZGVMb2NhdGlvbihhc3NpZ25tZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBpZiAodGFyZ2V0Py5uYW1lID09IFwiRmllbGRBY2Nlc3NcIiAmJiBjb250ZXh0LmN1cnJlbnRDbGFzcykge1xuICAgICAgY29uc3QgdGFyZ2V0Q2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4odGFyZ2V0KVxuICAgICAgY29uc3QgcmVjZWl2ZXIgPSB0YXJnZXRDaGlsZHJlblswXVxuICAgICAgY29uc3QgbWVtYmVyID0gdGFyZ2V0Q2hpbGRyZW5bMV1cbiAgICAgIGNvbnN0IGZpZWxkID0gdGFyZ2V0Q2hpbGRyZW4ubGVuZ3RoID09IDIgJiYgcmVjZWl2ZXI/Lm5hbWUgPT0gXCJ0aGlzXCIgJiYgbWVtYmVyPy5uYW1lID09IFwiSWRlbnRpZmllclwiXG4gICAgICAgID8gY29udGV4dC5jdXJyZW50Q2xhc3MuZmllbGRzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT0gbm9kZVRleHQobWVtYmVyLCBzb3VyY2UpKVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAoIWZpZWxkIHx8ICFleHByZXNzaW9uIHx8IGV4cHJlc3Npb24gPT0gdGFyZ2V0IHx8IGV4cHJlc3Npb24gPT0gb3BlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInByaXZhdGUgZmllbGQgd3JpdGUgb3V0c2lkZSB0aGUgZGVjbGFyaW5nIHJlY2VpdmVyXCIsIG5vZGVMb2NhdGlvbih0YXJnZXQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2V4cHJlc3Npb246IGNvbnZlcnRFeHByZXNzaW9uKGV4cHJlc3Npb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGZpZWxkLnR5cGUpLFxuICAgICAgICBmaWVsZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChmaWVsZC5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIpLCBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjZWl2ZXJFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKX0sXG4gICAgICB7bWVtYmVyOiBub2RlTG9jYXRpb24obWVtYmVyLCBmaWxlbmFtZSwgc291cmNlKSwgb3BlcmF0b3I6IG5vZGVMb2NhdGlvbihvcGVyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgICBpZiAoIXRhcmdldCB8fCB0YXJnZXQubmFtZSAhPSBcIklkZW50aWZpZXJcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCB0YXJnZXQ/Lm5hbWUgPz8gXCJhc3NpZ25tZW50IHRhcmdldFwiLCB0YXJnZXQgPyBub2RlTG9jYXRpb24odGFyZ2V0LCBmaWxlbmFtZSwgc291cmNlKSA6IGxvY2F0aW9uKVxuICAgIGlmICghZXhwcmVzc2lvbiB8fCBleHByZXNzaW9uID09IHRhcmdldCB8fCBleHByZXNzaW9uID09IG9wZXJhdG9yKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiYXNzaWdubWVudCBleHByZXNzaW9uXCIsIG5vZGVMb2NhdGlvbihhc3NpZ25tZW50LCBmaWxlbmFtZSwgc291cmNlKSlcblxuICAgIGNvbnN0IHRhcmdldEV4cHJlc3Npb24gPSB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbih0YXJnZXQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbmFtZTogbm9kZVRleHQodGFyZ2V0LCBzb3VyY2UpXG4gICAgfSwge25hbWU6IG5vZGVMb2NhdGlvbih0YXJnZXQsIGZpbGVuYW1lLCBzb3VyY2UpfSlcblxuICAgIGNvbnN0IHRhcmdldE5hbWUgPSBub2RlVGV4dCh0YXJnZXQsIHNvdXJjZSlcbiAgICBjb25zdCBiaW5kaW5nVHlwZSA9IGNvbnRleHQuYmluZGluZ3MuZ2V0KHRhcmdldE5hbWUpXG4gICAgY29uc3QgdmFsdWUgPSBjb252ZXJ0RXhwcmVzc2lvbihleHByZXNzaW9uLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LFxuICAgICAgYmluZGluZ1R5cGU/LmtpbmQgPT0gXCJFcnJvclR5cGVcIiA/IHVuZGVmaW5lZCA6IGJpbmRpbmdUeXBlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZXhwcmVzc2lvbjogdmFsdWUsXG4gICAgICBraW5kOiBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIixcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgdGFyZ2V0OiB0YXJnZXRFeHByZXNzaW9uXG4gICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24ob3BlcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgc3RhdGVtZW50Lm5hbWUsIGxvY2F0aW9uKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGhhdXN0aXZlIGRpcmVjdCBKYXZhIGJsb2NrIGNoaWxkLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IHN0YXRlbWVudCAtIEphdmEgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50fSBTZW1hbnRpYyBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTdGF0ZW1lbnQoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIlJldHVyblN0YXRlbWVudFwiKSByZXR1cm4gY29udmVydFJldHVybihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIklmU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0SWYoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJUaHJvd1N0YXRlbWVudFwiKSByZXR1cm4gY29udmVydEphdmFSYWlzZShzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIlRyeVN0YXRlbWVudFwiKSByZXR1cm4gY29udmVydEphdmFUcnkoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSByZXR1cm4gY29udmVydFdoaWxlKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiRW5oYW5jZWRGb3JTdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRGb3JFYWNoKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiQnJlYWtTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQubmFtZSA9PSBcIkNvbnRpbnVlU3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCBsYWJlbCA9IHN0YXRlbWVudC5nZXRDaGlsZChcIkxhYmVsXCIpXG5cbiAgICBpZiAobGFiZWwpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYGxhYmVsZWQgJHtzdGF0ZW1lbnQubmFtZSA9PSBcIkJyZWFrU3RhdGVtZW50XCIgPyBcImJyZWFrXCIgOiBcImNvbnRpbnVlXCJ9YCxcbiAgICAgIG5vZGVMb2NhdGlvbihsYWJlbCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3Qga2V5d29yZCA9IHJlcXVpcmVkQ2hpbGQoc3RhdGVtZW50LCBzdGF0ZW1lbnQubmFtZSA9PSBcIkJyZWFrU3RhdGVtZW50XCIgPyBcImJyZWFrXCIgOiBcImNvbnRpbnVlXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oa2V5d29yZCwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7XCJCcmVha1N0YXRlbWVudFwiIHwgXCJDb250aW51ZVN0YXRlbWVudFwifSAqLyAoXG4gICAgICAgIHN0YXRlbWVudC5uYW1lID09IFwiQnJlYWtTdGF0ZW1lbnRcIiA/IFwiQnJlYWtTdGF0ZW1lbnRcIiA6IFwiQ29udGludWVTdGF0ZW1lbnRcIlxuICAgICAgKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge2tleXdvcmQ6IGxvY2F0aW9ufSlcbiAgfVxuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIikgcmV0dXJuIGNvbnZlcnRMb2NhbFN0YXRlbWVudChzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIikge1xuICAgIGlmIChzdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiKSkgcmV0dXJuIGNvbnZlcnRMb2NhbFN0YXRlbWVudChzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgY29uc3QgaW52b2NhdGlvbiA9IHN0YXRlbWVudC5nZXRDaGlsZChcIk1ldGhvZEludm9jYXRpb25cIilcblxuICAgIGlmICghaW52b2NhdGlvbikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBzdGF0ZW1lbnQubmFtZSwgbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IGZpZWxkQWNjZXNzID0gaW52b2NhdGlvbi5nZXRDaGlsZChcIkZpZWxkQWNjZXNzXCIpXG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IGludm9jYXRpb24uZ2V0Q2hpbGQoXCJNZXRob2ROYW1lXCIpXG5cbiAgICBpZiAoIWZpZWxkQWNjZXNzIHx8ICFtZXRob2ROYW1lIHx8IG5vZGVUZXh0KGZpZWxkQWNjZXNzLCBzb3VyY2UpICE9IFwiU3lzdGVtLm91dFwiIHx8IG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkgIT0gXCJwcmludGxuXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4cHJlc3Npb246IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2FsbEV4cHJlc3Npb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5NZXRob2RDYWxsRXhwcmVzc2lvbn0gKi8gKFxuICAgICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGludm9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgICAgICksXG4gICAgICAgIGtpbmQ6IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiLFxuICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29udmVydFByaW50KHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgc3RhdGVtZW50Lm5hbWUsIG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGV4YWN0IGB0aHJvdyBuZXcgRGVjbGFyZWRFcnJvcihtZXNzYWdlKWAuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gc3RhdGVtZW50IC0gSmF2YSB0aHJvdyBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmFpc2VTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZXRocm93U3RhdGVtZW50fSBTZW1hbnRpYyByYWlzZSBvciByZXRocm93LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SmF2YVJhaXNlKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNvbnN0cnVjdGlvbiA9IHN0YXRlbWVudC5nZXRDaGlsZChcIk9iamVjdENyZWF0aW9uRXhwcmVzc2lvblwiKVxuICBjb25zdCB0eXBlTm9kZSA9IGNvbnN0cnVjdGlvbj8uZ2V0Q2hpbGQoXCJUeXBlTmFtZVwiKVxuICBjb25zdCBhcmd1bWVudHNOb2RlID0gY29uc3RydWN0aW9uPy5nZXRDaGlsZChcIkFyZ3VtZW50TGlzdFwiKVxuICBjb25zdCBhcmd1bWVudHNfID0gYXJndW1lbnRzTm9kZSA/IHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudHNOb2RlKSA6IFtdXG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gdHlwZU5vZGUgPyBjb250ZXh0LmVycm9yTmFtZXMuZ2V0KG5vZGVUZXh0KHR5cGVOb2RlLCBzb3VyY2UpKSA6IHVuZGVmaW5lZFxuXG4gIGlmICghY29uc3RydWN0aW9uICYmIGFyZ3VtZW50c18ubGVuZ3RoID09IDApIHtcbiAgICBjb25zdCB0aHJvd05vZGUgPSByZXF1aXJlZENoaWxkKHN0YXRlbWVudCwgXCJ0aHJvd1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHJldGhyb3duID0gc3RydWN0dXJhbENoaWxkcmVuKHN0YXRlbWVudCkuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBcIklkZW50aWZpZXJcIilcbiAgICBjb25zdCBiaW5kaW5nID0gcmV0aHJvd24gPyBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlVGV4dChyZXRocm93biwgc291cmNlKSkgOiB1bmRlZmluZWRcblxuICAgIGlmIChyZXRocm93biAmJiBiaW5kaW5nPy5raW5kID09IFwiRXJyb3JUeXBlXCIgJiYgY29udGV4dC5jYXRjaEJpbmRpbmdOYW1lcz8uaGFzKG5vZGVUZXh0KHJldGhyb3duLCBzb3VyY2UpKSkge1xuICAgICAgY29uc3QgYmluZGluZ05vZGUgPSBjb250ZXh0LmNhdGNoQmluZGluZ05vZGVzPy5nZXQobm9kZVRleHQocmV0aHJvd24sIHNvdXJjZSkpXG5cbiAgICAgIGlmICghYmluZGluZ05vZGUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ0aHJvdyBvZiBhIGNhdGNoIGJpbmRpbmcgd2l0aG91dCBhbiBleGFjdCBoYW5kbGVyIGJpbmRpbmdcIiwgbG9jYXRpb24pXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGJpbmRpbmc6IG5vZGVUZXh0KHJldGhyb3duLCBzb3VyY2UpLFxuICAgICAgICBiaW5kaW5nTm9kZSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmV0aHJvd1N0YXRlbWVudFwiKSxcbiAgICAgICAgbG9jYXRpb25cbiAgICAgIH0sIHtrZXl3b3JkOiBub2RlTG9jYXRpb24odGhyb3dOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICB9XG4gIGlmICghY29uc3RydWN0aW9uIHx8ICF0eXBlTm9kZSB8fCAhYXJndW1lbnRzTm9kZSB8fCAhZGVjbGFyYXRpb24gfHwgYXJndW1lbnRzXy5sZW5ndGggIT0gMSB8fCBjb25zdHJ1Y3Rpb24uZ2V0Q2hpbGQoXCJDbGFzc0JvZHlcIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidGhyb3cgb3RoZXIgdGhhbiBleGFjdCBkZWNsYXJlZCBlcnJvciBjb25zdHJ1Y3Rpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgdHlwZUxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBlcnJvcjogd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBlcnJvcjogd2l0aFBhcnNlclJhbmdlcyh7ZGVjbGFyYXRpb25JZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yVHlwZVwiKX0sIHt0eXBlOiB0eXBlTG9jYXRpb259KSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yQ29uc3RydWN0aW9uXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihjb25zdHJ1Y3Rpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbWVzc2FnZTogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7dHlwZTogdHlwZUxvY2F0aW9ufSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmFpc2VTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb25cbiAgfSwge2tleXdvcmQ6IG5vZGVMb2NhdGlvbihyZXF1aXJlZENoaWxkKHN0YXRlbWVudCwgXCJ0aHJvd1wiLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBjYXRjaCB3aXRoIG5vIHJlc291cmNlcyBvciBmaW5hbGx5LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IHN0YXRlbWVudCAtIEphdmEgdHJ5IHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UcnlTdGF0ZW1lbnR9IFNlbWFudGljIGV4YWN0IGhhbmRsZXIuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhVHJ5KHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGJvZHkgPSBzdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJCbG9ja1wiKVxuICBjb25zdCBjYXRjaGVzID0gc3RhdGVtZW50LmdldENoaWxkcmVuKFwiQ2F0Y2hDbGF1c2VcIilcbiAgY29uc3QgZmluYWxpemVyID0gc3RhdGVtZW50LmdldENoaWxkKFwiRmluYWxseUNsYXVzZVwiKVxuXG4gIGlmICghYm9keSB8fCAoY2F0Y2hlcy5sZW5ndGggPT0gMCAmJiAhZmluYWxpemVyKSB8fCBzdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJSZXNvdXJjZVNwZWNpZmljYXRpb25cIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidHJ5IHdpdGhvdXQgY2F0Y2hlcyBvciBmaW5hbGx5IGFuZCB3aXRob3V0IHJlc291cmNlc1wiLCBsb2NhdGlvbilcbiAgfVxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhdGNoSGFuZGxlcltdfSAqL1xuICBjb25zdCBoYW5kbGVycyA9IFtdXG4gIGNvbnN0IHNlZW5IYW5kbGVyTmFtZXMgPSBuZXcgU2V0KGNvbnRleHQuY2F0Y2hCaW5kaW5nTmFtZXMgPz8gW10pXG5cbiAgZm9yIChjb25zdCBoYW5kbGVyIG9mIGNhdGNoZXMpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSBoYW5kbGVyLmdldENoaWxkKFwiQ2F0Y2hGb3JtYWxQYXJhbWV0ZXJcIilcbiAgICBjb25zdCBjYXVnaHQgPSBwYXJhbWV0ZXI/LmdldENoaWxkKFwiQ2F0Y2hUeXBlXCIpXG4gICAgY29uc3QgdHlwZU5vZGVzID0gY2F1Z2h0ID8gc3RydWN0dXJhbENoaWxkcmVuKGNhdWdodCkgOiBbXVxuICAgIGNvbnN0IGRlZmluaXRpb24gPSBwYXJhbWV0ZXI/LmdldENoaWxkKFwiRGVmaW5pdGlvblwiKVxuICAgIGNvbnN0IGNhdGNoQm9keSA9IGhhbmRsZXIuZ2V0Q2hpbGQoXCJCbG9ja1wiKVxuICAgIGNvbnN0IHR5cGVOb2RlID0gdHlwZU5vZGVzWzBdXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSB0eXBlTm9kZSA/IGNvbnRleHQuZXJyb3JOYW1lcy5nZXQobm9kZVRleHQodHlwZU5vZGUsIHNvdXJjZSkpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoIXBhcmFtZXRlciB8fCAhY2F1Z2h0IHx8IHR5cGVOb2Rlcy5sZW5ndGggIT0gMSB8fCB0eXBlTm9kZT8ubmFtZSAhPSBcIlR5cGVOYW1lXCIgfHwgIWRlZmluaXRpb24gfHwgIWNhdGNoQm9keSB8fCAhZGVjbGFyYXRpb24gfHxcbiAgICAgIHBhcmFtZXRlci5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImJyb2FkLCBtdWx0aXBsZSwgb3IgbWFsZm9ybWVkIGNhdGNoXCIsIG5vZGVMb2NhdGlvbihoYW5kbGVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcblxuICAgIGlmIChzZWVuSGFuZGxlck5hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgY2F0Y2ggYmluZGluZyAnJHtuYW1lfScgc2hhZG93cyBhbiBvdXRlciBoYW5kbGVyIGJpbmRpbmdgLCBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIHNlZW5IYW5kbGVyTmFtZXMuYWRkKG5hbWUpXG4gICAgY29uc3QgY2F1Z2h0TG9jYXRpb24gPSBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgY2F0Y2hUeXBlID0gd2l0aFBhcnNlclJhbmdlcyh7ZGVjbGFyYXRpb25JZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yVHlwZVwiKX0sIHtcbiAgICAgIHR5cGU6IGNhdWdodExvY2F0aW9uXG4gICAgfSlcbiAgICBjb25zdCBjYXRjaENvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyksXG4gICAgICBjYXRjaEJpbmRpbmdOYW1lczogbmV3IFNldChzZWVuSGFuZGxlck5hbWVzKSwgY2F0Y2hCaW5kaW5nTm9kZXM6IG5ldyBNYXAoY29udGV4dC5jYXRjaEJpbmRpbmdOb2Rlcyl9XG5cbiAgICBjYXRjaENvbnRleHQuYmluZGluZ3Muc2V0KG5hbWUsIGNhdGNoVHlwZSlcbiAgICBjb25zdCBjYXRjaEJpbmRpbmdOb2RlID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDYXRjaEJpbmRpbmdcIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlOiBjYXRjaFR5cGVcbiAgICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSlcblxuICAgIGNhdGNoQ29udGV4dC5jYXRjaEJpbmRpbmdOb2Rlcy5zZXQobmFtZSwgY2F0Y2hCaW5kaW5nTm9kZSlcbiAgICBoYW5kbGVycy5wdXNoKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgY2F0Y2hCaW5kaW5nOiBjYXRjaEJpbmRpbmdOb2RlLFxuICAgICAgY2F0Y2hCb2R5OiBjb252ZXJ0QmxvY2soY2F0Y2hCb2R5LCBmaWxlbmFtZSwgc291cmNlLCBjYXRjaENvbnRleHQpLFxuICAgICAgY2F0Y2hUeXBlLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2F0Y2hIYW5kbGVyXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihoYW5kbGVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0sIHtjYXRjaDogbm9kZUxvY2F0aW9uKGhhbmRsZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSkpXG4gIH1cbiAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyl9XG4gIGNvbnN0IHNlbWFudGljID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UcnlTdGF0ZW1lbnR9ICovICh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiBjb252ZXJ0QmxvY2soYm9keSwgZmlsZW5hbWUsIHNvdXJjZSwgYm9keUNvbnRleHQpLFxuICAgIGhhbmRsZXJzLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlRyeVN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvblxuICB9LCB7dHJ5OiBub2RlTG9jYXRpb24ocmVxdWlyZWRDaGlsZChzdGF0ZW1lbnQsIFwidHJ5XCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlKX0pKVxuXG4gIGlmIChmaW5hbGl6ZXIpIHtcbiAgICBjb25zdCBmaW5hbGx5QmxvY2sgPSBmaW5hbGl6ZXIuZ2V0Q2hpbGQoXCJCbG9ja1wiKVxuXG4gICAgaWYgKCFmaW5hbGx5QmxvY2spIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgZmluYWxseSBibG9ja1wiLCBub2RlTG9jYXRpb24oZmluYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBzZW1hbnRpYy5maW5hbGx5Qm9keSA9IGNvbnZlcnRCbG9jayhmaW5hbGx5QmxvY2ssIGZpbGVuYW1lLCBzb3VyY2UsIGJvZHlDb250ZXh0KVxuICAgIHNldFBhcnNlclJhbmdlcyhzZW1hbnRpYywge2ZpbmFsbHk6IG5vZGVMb2NhdGlvbihmaW5hbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgdHJ5OiBub2RlTG9jYXRpb24ocmVxdWlyZWRDaGlsZChzdGF0ZW1lbnQsIFwidHJ5XCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbiAgcmV0dXJuIHNlbWFudGljXG59XG5cbi8qKlxuICogQ29udmVydHMgZXhhY3QgSmF2YSBlbmhhbmNlZC1mb3Igc3ludGF4IG92ZXIgb25lIHJlc29sdmVkIGBMaXN0PFQ+YC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gRW5oYW5jZWQtZm9yIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaE1hcFN0YXRlbWVudH0gU2VtYW50aWMgbG9vcC5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZvckVhY2gobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBzcGVjID0gbm9kZS5nZXRDaGlsZChcIkZvclNwZWNcIilcbiAgY29uc3QgYm9keSA9IGRpcmVjdENoaWxkcmVuKG5vZGUpLmZpbmRMYXN0KChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIkZvclNwZWNcIiAmJiBjaGlsZC5uYW1lICE9IFwiZm9yXCIpXG5cbiAgaWYgKCFzcGVjKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiZW5oYW5jZWQgZm9yIHdpdGhvdXQgc3BlY2lmaWNhdGlvblwiLCBsb2NhdGlvbilcbiAgaWYgKCFib2R5IHx8IGJvZHkubmFtZSAhPSBcIkJsb2NrXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJlbmhhbmNlZCBmb3Igd2l0aG91dCBibG9jayBib2R5XCIsIGJvZHkgPyBub2RlTG9jYXRpb24oYm9keSwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbilcbiAgY29uc3QgY2hpbGRyZW4gPSBkaXJlY3RDaGlsZHJlbihzcGVjKVxuICBjb25zdCBjb2xvbkluZGV4ID0gY2hpbGRyZW4uZmluZEluZGV4KChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PSBcIjpcIilcbiAgY29uc3QgdHlwZU5vZGUgPSBjb2xvbkluZGV4ID49IDIgPyBjaGlsZHJlbltjb2xvbkluZGV4IC0gMl0gOiB1bmRlZmluZWRcbiAgY29uc3QgYmluZGluZ05vZGUgPSBjb2xvbkluZGV4ID49IDIgPyBjaGlsZHJlbltjb2xvbkluZGV4IC0gMV0gOiB1bmRlZmluZWRcbiAgY29uc3QgY29sbGVjdGlvbk5vZGUgPSBjb2xvbkluZGV4ID49IDAgPyBjaGlsZHJlbltjb2xvbkluZGV4ICsgMV0gOiB1bmRlZmluZWRcblxuICBpZiAoIXR5cGVOb2RlIHx8ICFiaW5kaW5nTm9kZSB8fCBiaW5kaW5nTm9kZS5uYW1lICE9IFwiRGVmaW5pdGlvblwiIHx8ICFjb2xsZWN0aW9uTm9kZSB8fFxuICAgIGNoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gXCI6XCIpLmxlbmd0aCAhPSAxKSB7XG4gICAgY29uc3QgdW5zdXBwb3J0ZWQgPSBiaW5kaW5nTm9kZSA/PyBjb2xsZWN0aW9uTm9kZSA/PyBzcGVjXG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWFsZm9ybWVkIGVuaGFuY2VkIGZvciBzcGVjaWZpY2F0aW9uXCIsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKGNoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiBjaGlsZC5uYW1lID09IFwiTW9kaWZpZXJzXCIpKSB7XG4gICAgY29uc3QgbW9kaWZpZXJzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9ICovIChjaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PSBcIk1vZGlmaWVyc1wiKSlcblxuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJlbmhhbmNlZCBmb3IgbW9kaWZpZXJzXCIsIG5vZGVMb2NhdGlvbihtb2RpZmllcnMsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgaWYgKGNvbGxlY3Rpb25Ob2RlLm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCIpIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gY29sbGVjdGlvbk5vZGUuZ2V0Q2hpbGQoXCJNZXRob2ROYW1lXCIpXG4gICAgY29uc3QgYXJndW1lbnRMaXN0ID0gY29sbGVjdGlvbk5vZGUuZ2V0Q2hpbGQoXCJBcmd1bWVudExpc3RcIilcbiAgICBjb25zdCBtYXBOb2RlID0gc3RydWN0dXJhbENoaWxkcmVuKGNvbGxlY3Rpb25Ob2RlKS5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIk1ldGhvZE5hbWVcIiAmJiBjaGlsZC5uYW1lICE9IFwiQXJndW1lbnRMaXN0XCIpXG4gICAgY29uc3QgbWFwVHlwZV8gPSBtYXBOb2RlID8ga25vd25FeHByZXNzaW9uVHlwZShtYXBOb2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgYXJndW1lbnRMaXN0ICYmIG1hcE5vZGU/Lm5hbWUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgIG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkgPT0gXCJzZXF1ZW5jZWRFbnRyeVNldFwiICYmIHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpLmxlbmd0aCA9PSAwICYmXG4gICAgICBtYXBUeXBlXz8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHtcbiAgICAgIGNvbnN0IGVudHJ5VHlwZSA9IHR5cGVOb2RlLm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiID8gc3RydWN0dXJhbENoaWxkcmVuKHR5cGVOb2RlKSA6IFtdXG4gICAgICBjb25zdCBlbnRyeUFyZ3VtZW50cyA9IGVudHJ5VHlwZVsxXT8ubmFtZSA9PSBcIlR5cGVBcmd1bWVudHNcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbihlbnRyeVR5cGVbMV0pIDogW11cbiAgICAgIGNvbnN0IHBhcnNlZEtleVR5cGUgPSBlbnRyeUFyZ3VtZW50c1swXVxuICAgICAgICA/IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGVudHJ5QXJndW1lbnRzWzBdLCBcIk1hcCBlbnRyeSBrZXlcIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgICBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcGFyc2VkVmFsdWVUeXBlID0gZW50cnlBcmd1bWVudHNbMV1cbiAgICAgICAgPyBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChlbnRyeUFyZ3VtZW50c1sxXSwgXCJNYXAgZW50cnkgdmFsdWVcIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgICBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAoZW50cnlUeXBlLmxlbmd0aCAhPSAyIHx8IG5vZGVUZXh0KGVudHJ5VHlwZVswXSwgc291cmNlKSAhPSBcImphdmEudXRpbC5NYXAuRW50cnlcIiB8fCBlbnRyeUFyZ3VtZW50cy5sZW5ndGggIT0gMiB8fFxuICAgICAgICAhcGFyc2VkS2V5VHlwZSB8fCAhcGFyc2VkVmFsdWVUeXBlIHx8ICFzYW1lVmFsdWVUeXBlKHBhcnNlZEtleVR5cGUsIG1hcFR5cGVfLmtleVR5cGUpIHx8XG4gICAgICAgICFzYW1lVmFsdWVUeXBlKHBhcnNlZFZhbHVlVHlwZSwgbWFwVHlwZV8udmFsdWVUeXBlKSkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3JkZXJlZC1tYXAgZW50cnkgdHlwZVwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgYm9keVN0YXRlbWVudHMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYm9keSlcblxuICAgICAgaWYgKGJvZHlTdGF0ZW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9yZGVyZWQtbWFwIHBhaXIgYmluZGluZ3NcIiwgbm9kZUxvY2F0aW9uKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgZW50cnlOYW1lID0gbm9kZVRleHQoYmluZGluZ05vZGUsIHNvdXJjZSlcblxuICAgICAgaWYgKGNvbnRleHQuYmluZGluZ3MuaGFzKGVudHJ5TmFtZSkgfHwgY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuaGFzKGVudHJ5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9yZGVyZWQtbWFwIGVudHJ5IGJpbmRpbmcgY29sbGlzaW9uXCIsIG5vZGVMb2NhdGlvbihiaW5kaW5nTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBib2R5Q29udGV4dCA9IHtcbiAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksXG4gICAgICAgIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcykuYWRkKGVudHJ5TmFtZSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleUJpbmRpbmcgPSBjb252ZXJ0SmF2YU1hcFBhaXJCaW5kaW5nKFxuICAgICAgICBib2R5U3RhdGVtZW50c1swXSwgZW50cnlOYW1lLCBcImdldEtleVwiLCBtYXBUeXBlXy5rZXlUeXBlLCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dFxuICAgICAgKVxuICAgICAgY29uc3QgdmFsdWVCaW5kaW5nID0gY29udmVydEphdmFNYXBQYWlyQmluZGluZyhcbiAgICAgICAgYm9keVN0YXRlbWVudHNbMV0sIGVudHJ5TmFtZSwgXCJnZXRWYWx1ZVwiLCBtYXBUeXBlXy52YWx1ZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UsIGJvZHlDb250ZXh0XG4gICAgICApXG5cbiAgICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldChrZXlCaW5kaW5nLm5hbWUsIGtleUJpbmRpbmcudHlwZSlcbiAgICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldCh2YWx1ZUJpbmRpbmcubmFtZSwgdmFsdWVCaW5kaW5nLnR5cGUpXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCbG9ja1wiKSxcbiAgICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIHN0YXRlbWVudHM6IGNvbnZlcnRTdGF0ZW1lbnRzKGJvZHlTdGF0ZW1lbnRzLnNsaWNlKDIpLCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dClcbiAgICAgICAgfSxcbiAgICAgICAga2V5QmluZGluZyxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIG1hcDogY29udmVydEV4cHJlc3Npb24obWFwTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgIHZhbHVlQmluZGluZ1xuICAgICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24oY2hpbGRyZW5bY29sb25JbmRleF0sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgW1wiZW50cnlTZXRcIiwgXCJzZXF1ZW5jZWRFbnRyeVNldFwiXS5pbmNsdWRlcyhub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVub3JkZXJlZCBvciB1bnN1cHBvcnRlZCBtYXAgaXRlcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihjb2xsZWN0aW9uTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICB9XG4gIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihiaW5kaW5nTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgZGVjbGFyZWRUeXBlID0gY29udmVydEphdmFUeXBlQXJndW1lbnQodHlwZU5vZGUsIGBJdGVyYXRpb24gYmluZGluZyAnJHtub2RlVGV4dChiaW5kaW5nTm9kZSwgc291cmNlKX0nYCwgYmluZGluZ0xvY2F0aW9uLFxuICAgIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gIGNvbnN0IGNvbGxlY3Rpb25UeXBlID0gaXRlcmF0aW9uT3BlcmFuZFR5cGUoa25vd25FeHByZXNzaW9uVHlwZShjb2xsZWN0aW9uTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpXG5cbiAgaWYgKCFjb2xsZWN0aW9uVHlwZSB8fCBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiTGlzdFR5cGVcIiAmJiBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiTWFwVHlwZVwiKSB7XG4gICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwiamF2YVwiLCBcIkl0ZXJhdGlvbiBjb2xsZWN0aW9uXCIsIG5vZGVMb2NhdGlvbihjb2xsZWN0aW9uTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgdmFsdWVCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLFxuICAgIGxvY2F0aW9uOiBiaW5kaW5nTG9jYXRpb24sXG4gICAgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICBuYW1lOiBub2RlVGV4dChiaW5kaW5nTm9kZSwgc291cmNlKSxcbiAgICB0eXBlOiBkZWNsYXJlZFR5cGVcbiAgfSwge25hbWU6IGJpbmRpbmdMb2NhdGlvbn0pXG4gIGNvbnN0IGJvZHlDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpLCBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMpfVxuXG4gIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldCh2YWx1ZUJpbmRpbmcubmFtZSwgaXRlcmF0aW9uQmluZGluZ1R5cGUoZGVjbGFyZWRUeXBlLCBiaW5kaW5nTG9jYXRpb24pKVxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UsIGJvZHlDb250ZXh0KSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoU3RhdGVtZW50XCIpLFxuICAgIGxpc3Q6IGNvbnZlcnRFeHByZXNzaW9uKGNvbGxlY3Rpb25Ob2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICBsb2NhdGlvbixcbiAgICB2YWx1ZUJpbmRpbmdcbiAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24oY2hpbGRyZW5bY29sb25JbmRleF0sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgaW1tdXRhYmxlIGxvY2FsIGV4dHJhY3RlZCBmcm9tIGEgSmF2YSBvcmRlcmVkLW1hcCBlbnRyeS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBzdGF0ZW1lbnQgLSBQYWlyLWJpbmRpbmcgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZW50cnlOYW1lIC0gRW5oYW5jZWQtZm9yIGVudHJ5IGJpbmRpbmcgbmFtZS5cbiAqIEBwYXJhbSB7XCJnZXRLZXlcIiB8IFwiZ2V0VmFsdWVcIn0gYWNjZXNzb3IgLSBSZXF1aXJlZCBlbnRyeSBhY2Nlc3Nvci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IGV4cGVjdGVkVHlwZSAtIENhbm9uaWNhbCBiaW5kaW5nIHR5cGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlZhbHVlQmluZGluZ30gUGFpciBiaW5kaW5nLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SmF2YU1hcFBhaXJCaW5kaW5nKHN0YXRlbWVudCwgZW50cnlOYW1lLCBhY2Nlc3NvciwgZXhwZWN0ZWRUeXBlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gc3RhdGVtZW50LmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IGRlY2xhcmF0b3JzID0gc3RhdGVtZW50LmdldENoaWxkcmVuKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpXG4gIGNvbnN0IGRlY2xhcmF0b3IgPSBkZWNsYXJhdG9yc1swXVxuICBjb25zdCBkZWZpbml0aW9uID0gZGVjbGFyYXRvcj8uZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gIGNvbnN0IGFzc2lnbm1lbnQgPSBkZWNsYXJhdG9yPy5nZXRDaGlsZChcIkFzc2lnbk9wXCIpXG4gIGNvbnN0IGluaXRpYWxpemVyID0gZGVjbGFyYXRvclxuICAgID8gZGlyZWN0Q2hpbGRyZW4oZGVjbGFyYXRvcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJEZWZpbml0aW9uXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFzc2lnbk9wXCIpXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3QgbWV0aG9kTmFtZSA9IGluaXRpYWxpemVyPy5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgY29uc3QgYXJndW1lbnRMaXN0ID0gaW5pdGlhbGl6ZXI/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IHJlY2VpdmVyID0gaW5pdGlhbGl6ZXI/Lm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCJcbiAgICA/IHN0cnVjdHVyYWxDaGlsZHJlbihpbml0aWFsaXplcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHR5cGVOb2RlID0gZGVjbGFyYXRpb25UeXBlKHN0YXRlbWVudClcblxuICBpZiAoc3RhdGVtZW50Lm5hbWUgIT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIiB8fCBub2RlVGV4dChtb2RpZmllcnMgPz8gc3RhdGVtZW50LCBzb3VyY2UpICE9IFwiZmluYWxcIiB8fFxuICAgIGRlY2xhcmF0b3JzLmxlbmd0aCAhPSAxIHx8ICFkZWZpbml0aW9uIHx8ICFhc3NpZ25tZW50IHx8IG5vZGVUZXh0KGFzc2lnbm1lbnQsIHNvdXJjZSkgIT0gXCI9XCIgfHwgIWluaXRpYWxpemVyIHx8XG4gICAgaW5pdGlhbGl6ZXIubmFtZSAhPSBcIk1ldGhvZEludm9jYXRpb25cIiB8fCAhbWV0aG9kTmFtZSB8fCBub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpICE9IGFjY2Vzc29yIHx8XG4gICAgIWFyZ3VtZW50TGlzdCB8fCBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KS5sZW5ndGggIT0gMCB8fCByZWNlaXZlcj8ubmFtZSAhPSBcIklkZW50aWZpZXJcIiB8fFxuICAgIG5vZGVUZXh0KHJlY2VpdmVyLCBzb3VyY2UpICE9IGVudHJ5TmFtZSB8fCAhdHlwZU5vZGUpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBvcmRlcmVkLW1hcCAke2FjY2Vzc29yfSBiaW5kaW5nYCwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcblxuICBpZiAoY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgb3JkZXJlZC1tYXAgJHthY2Nlc3Nvcn0gYmluZGluZyBjb2xsaXNpb25gLCBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgdHlwZSA9IGNvbnZlcnRUeXBlKHR5cGVOb2RlLCBgTWFwIGl0ZXJhdGlvbiBiaW5kaW5nICcke25hbWV9J2AsIGxvY2F0aW9uLFxuICAgIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG5cbiAgaWYgKCFzYW1lVmFsdWVUeXBlKHR5cGUsIGV4cGVjdGVkVHlwZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBvcmRlcmVkLW1hcCAke2FjY2Vzc29yfSBiaW5kaW5nIHR5cGVgLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSxcbiAgICBsb2NhdGlvbixcbiAgICBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgIG5hbWUsXG4gICAgdHlwZVxuICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBleHByZXNzaW9uIHR5cGVzIGVzdGFibGlzaGVkIGJ5IEphdmEgZGVjbGFyYXRpb25zIGFuZCBmdW5jdGlvbiBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJzZXIgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvclR5cGUgfCB1bmRlZmluZWR9IEtub3duIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGtub3duRXhwcmVzc2lvblR5cGUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBpZiAobm9kZS5uYW1lID09IFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG5cbiAgICByZXR1cm4gY2hpbGRyZW4ubGVuZ3RoID09IDEgPyBrbm93bkV4cHJlc3Npb25UeXBlKGNoaWxkcmVuWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSA6IHVuZGVmaW5lZFxuICB9XG4gIGlmIChub2RlLm5hbWUgPT0gXCJ0aGlzXCIgJiYgY29udGV4dC5jdXJyZW50Q2xhc3M/LmlkKSB7XG4gICAgcmV0dXJuIHtkZWNsYXJhdGlvbklkOiBjb250ZXh0LmN1cnJlbnRDbGFzcy5pZCwga2luZDogXCJSZWZlcmVuY2VUeXBlXCJ9XG4gIH1cbiAgaWYgKG5vZGUubmFtZSA9PSBcIklkZW50aWZpZXJcIikgcmV0dXJuIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGVUZXh0KG5vZGUsIHNvdXJjZSkpXG4gIGlmIChub2RlLm5hbWUgPT0gXCJGaWVsZEFjY2Vzc1wiICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSlcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT0gMiAmJiBjaGlsZHJlblswXS5uYW1lID09IFwidGhpc1wiICYmIGNoaWxkcmVuWzFdLm5hbWUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICAgIHJldHVybiBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbm9kZVRleHQoY2hpbGRyZW5bMV0sIHNvdXJjZSkpPy50eXBlXG4gICAgfVxuICB9XG4gIGlmIChub2RlLm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCIpIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gbm9kZS5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgICBjb25zdCBhcmd1bWVudExpc3QgPSBub2RlLmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gICAgY29uc3QgcmVjZWl2ZXIgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuXG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgIXJlY2VpdmVyKSB7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBjb250ZXh0LmZ1bmN0aW9ucy5nZXQobm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSlcbiAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudExpc3QgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KSA6IFtdXG5cbiAgICAgIGlmIChzaWduYXR1cmUpIHJldHVybiBrbm93bkNhbGxSZXR1cm5UeXBlKHNpZ25hdHVyZSwgYXJndW1lbnRzXy5tYXAoKGFyZ3VtZW50KSA9PlxuICAgICAgICBrbm93bkV4cHJlc3Npb25UeXBlKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSkpXG4gICAgfVxuICAgIGlmIChtZXRob2ROYW1lICYmIHJlY2VpdmVyKSB7XG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgICBpZiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNsYXNzZXMuZ2V0KHJlY2VpdmVyVHlwZS5kZWNsYXJhdGlvbklkKT8ubWV0aG9kcy5maW5kKChtZXRob2QpID0+XG4gICAgICAgICAgbWV0aG9kLm5hbWUgPT0gbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSk/LnJldHVyblR5cGVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHF1YWxpZmllZCA9IGAke25vZGVUZXh0KHJlY2VpdmVyLCBzb3VyY2UpfS4ke25vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSl9YFxuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KHF1YWxpZmllZClcbiAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudExpc3QgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KSA6IFtdXG4gICAgICBjb25zdCByZXR1cm5UeXBlID0gc2lnbmF0dXJlID8ga25vd25DYWxsUmV0dXJuVHlwZShzaWduYXR1cmUsIGFyZ3VtZW50c18ubWFwKChhcmd1bWVudCkgPT5cbiAgICAgICAga25vd25FeHByZXNzaW9uVHlwZShhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpKSA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAocmV0dXJuVHlwZSkgcmV0dXJuIHJldHVyblR5cGVcbiAgICB9XG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgcmVjZWl2ZXIgJiYgYXJndW1lbnRMaXN0ICYmIG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkgPT0gXCJnZXRcIikge1xuICAgICAgY29uc3QgYXJndW1lbnRzXyA9IHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpXG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggPT0gMCAmJiByZWNlaXZlci5uYW1lID09IFwiSWRlbnRpZmllclwiICYmIHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiByZWNlaXZlclR5cGUudmFsdWVUeXBlXG4gICAgICB9XG4gICAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJiByZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiKSByZXR1cm4gcmVjZWl2ZXJUeXBlLmVsZW1lbnRUeXBlXG4gICAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpKSB7XG4gICAgICAgIHJldHVybiByZWNlaXZlclR5cGUudmFsdWVUeXBlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChtZXRob2ROYW1lICYmIHJlY2VpdmVyICYmIGFyZ3VtZW50TGlzdCAmJiBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KS5sZW5ndGggPT0gMCkge1xuICAgICAgY29uc3QgcmVjZWl2ZXJUeXBlID0ga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcblxuICAgICAgaWYgKHJlY2VpdmVyVHlwZT8ua2luZCAhPSBcIlJlY29yZFR5cGVcIikgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBjb250ZXh0LnJlY29yZHMuZ2V0KHJlY2VpdmVyVHlwZS5kZWNsYXJhdGlvbklkKVxuICAgICAgY29uc3QgaW5kZXggPSBkZWNsYXJhdGlvbj8uZmllbGRzLmZpbmRJbmRleCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSkgPz8gLTFcblxuICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uID8gaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlKGRlY2xhcmF0aW9uLCByZWNlaXZlclR5cGUuYXJndW1lbnRzLCBpbmRleCkgOiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbiAgaWYgKG5vZGUubmFtZSA9PSBcIk9iamVjdENyZWF0aW9uRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgdHlwZU5vZGUgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmluZCgoY2hpbGQpID0+IFtcIkdlbmVyaWNUeXBlXCIsIFwiVHlwZU5hbWVcIiwgXCJTY29wZWRUeXBlTmFtZVwiXS5pbmNsdWRlcyhjaGlsZC5uYW1lKSlcbiAgICBjb25zdCBuYW1lTm9kZSA9IHR5cGVOb2RlPy5uYW1lID09IFwiR2VuZXJpY1R5cGVcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbih0eXBlTm9kZSlbMF0gOiB0eXBlTm9kZVxuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gbmFtZU5vZGUgPyBjb250ZXh0LnJlY29yZE5hbWVzLmdldChub2RlVGV4dChuYW1lTm9kZSwgc291cmNlKSkgOiB1bmRlZmluZWRcblxuICAgIGlmIChkZWNsYXJhdGlvbj8uaWQgJiYgdHlwZU5vZGUpIHtcbiAgICAgIGNvbnN0IHR5cGVBcmd1bWVudHNOb2RlID0gdHlwZU5vZGU/LmdldENoaWxkKFwiVHlwZUFyZ3VtZW50c1wiKVxuICAgICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHR5cGVBcmd1bWVudHNOb2RlXG4gICAgICAgID8gc3RydWN0dXJhbENoaWxkcmVuKHR5cGVBcmd1bWVudHNOb2RlKS5tYXAoKGFyZ3VtZW50KSA9PiBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChcbiAgICAgICAgICBhcmd1bWVudCxcbiAgICAgICAgICBgUmVjb3JkICcke2RlY2xhcmF0aW9uLm5hbWV9JyBhcHBsaWNhdGlvbmAsXG4gICAgICAgICAgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgY29udGV4dC5yZWNvcmROYW1lcyxcbiAgICAgICAgICBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzXG4gICAgICAgICkpXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiXG4gICAgICAgID8ge2RlY2xhcmF0aW9uSWQ6IGRlY2xhcmF0aW9uLmlkLCBraW5kOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgICAgICAgOiB7ZGVjbGFyYXRpb25JZDogZGVjbGFyYXRpb24uaWQsIGtpbmQ6IFwiUmVjb3JkVHlwZVwiLCAuLi4odHlwZUFyZ3VtZW50cyA/IHthcmd1bWVudHM6IHR5cGVBcmd1bWVudHN9IDoge30pfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBkaXJlY3Qgc3RydWN0dXJhbCBjaGlsZHJlbiBvZiBvbmUgSmF2YSBibG9jayBpbiBzb3VyY2Ugb3JkZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIEphdmEgQmxvY2sgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBTZW1hbnRpYyBibG9jay5cbiAqL1xuZnVuY3Rpb24gY29udmVydEJsb2NrKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgaWYgKG5vZGUubmFtZSAhPSBcIkJsb2NrXCIgJiYgbm9kZS5uYW1lICE9IFwiQ29uc3RydWN0b3JCb2R5XCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBleHBlY3RlZCBibG9jaywgcmVjZWl2ZWQgJHtub2RlLm5hbWV9YCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBraW5kOiBcIkJsb2NrXCIsXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBzdGF0ZW1lbnRzOiBjb252ZXJ0U3RhdGVtZW50cyhzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSksIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIEphdmEgc3RhdGVtZW50IHNlcXVlbmNlLCBmb2xkaW5nIHRoZSBleGFjdCBwcm90ZWN0ZWQgb3JkZXJlZC1tYXAgY29uc3RydWN0aW9uIHByb2ZpbGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZVtdfSBzdGF0ZW1lbnRzIC0gRGlyZWN0IGJsb2NrIHN0YXRlbWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnRbXX0gU2VtYW50aWMgc3RhdGVtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29udmVydFN0YXRlbWVudHMoc3RhdGVtZW50cywgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBjb252ZXJ0ZWQgPSBbXVxuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzdGF0ZW1lbnRzLmxlbmd0aDspIHtcbiAgICBjb25zdCBvcmRlcmVkID0gY29udmVydEphdmFPcmRlcmVkTWFwU2VxdWVuY2Uoc3RhdGVtZW50cywgaW5kZXgsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG5cbiAgICBpZiAob3JkZXJlZCkge1xuICAgICAgY29udmVydGVkLnB1c2gob3JkZXJlZC5zdGF0ZW1lbnQpXG4gICAgICBpbmRleCA9IG9yZGVyZWQubmV4dEluZGV4XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnZlcnRlZC5wdXNoKGNvbnZlcnRTdGF0ZW1lbnQoc3RhdGVtZW50c1tpbmRleF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKVxuICAgICAgaW5kZXggKz0gMVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb252ZXJ0ZWRcbn1cblxuLyoqXG4gKiBSZWNvZ25pemVzIGNvbnN0cnVjdGlvbiB0aHJvdWdoIGEgcHJpdmF0ZSBMaW5rZWRIYXNoTWFwIGJhY2tpbmcgZm9sbG93ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIFNlcXVlbmNlZE1hcCBib3VuZGFyeS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IHN0YXRlbWVudHMgLSBEaXJlY3QgYmxvY2sgc3RhdGVtZW50cy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCAtIENhbmRpZGF0ZSBiYWNraW5nLWRlY2xhcmF0aW9uIGluZGV4LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7e3N0YXRlbWVudDogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbiwgbmV4dEluZGV4OiBudW1iZXJ9IHwgdW5kZWZpbmVkfSBGb2xkZWQgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhT3JkZXJlZE1hcFNlcXVlbmNlKHN0YXRlbWVudHMsIHN0YXJ0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJhY2tpbmdTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzW3N0YXJ0XVxuICBjb25zdCBiYWNraW5nVHlwZU5vZGUgPSBiYWNraW5nU3RhdGVtZW50Py5uYW1lID09IFwiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uXCIgPyBkZWNsYXJhdGlvblR5cGUoYmFja2luZ1N0YXRlbWVudCkgOiBudWxsXG4gIGNvbnN0IGJhY2tpbmdUeXBlQ2hpbGRyZW4gPSBiYWNraW5nVHlwZU5vZGU/Lm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiID8gc3RydWN0dXJhbENoaWxkcmVuKGJhY2tpbmdUeXBlTm9kZSkgOiBbXVxuXG4gIGlmIChiYWNraW5nVHlwZUNoaWxkcmVuLmxlbmd0aCAhPSAyIHx8IG5vZGVUZXh0KGJhY2tpbmdUeXBlQ2hpbGRyZW5bMF0sIHNvdXJjZSkgIT0gXCJqYXZhLnV0aWwuTGlua2VkSGFzaE1hcFwiKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oYmFja2luZ1N0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYmFja2luZ01vZGlmaWVycyA9IGJhY2tpbmdTdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgYmFja2luZ0RlY2xhcmF0b3JzID0gYmFja2luZ1N0YXRlbWVudC5nZXRDaGlsZHJlbihcIlZhcmlhYmxlRGVjbGFyYXRvclwiKVxuICBjb25zdCBiYWNraW5nRGVjbGFyYXRvciA9IGJhY2tpbmdEZWNsYXJhdG9yc1swXVxuICBjb25zdCBiYWNraW5nRGVmaW5pdGlvbiA9IGJhY2tpbmdEZWNsYXJhdG9yPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcbiAgY29uc3QgYmFja2luZ0Fzc2lnbm1lbnQgPSBiYWNraW5nRGVjbGFyYXRvcj8uZ2V0Q2hpbGQoXCJBc3NpZ25PcFwiKVxuICBjb25zdCBiYWNraW5nSW5pdGlhbGl6ZXIgPSBiYWNraW5nRGVjbGFyYXRvclxuICAgID8gZGlyZWN0Q2hpbGRyZW4oYmFja2luZ0RlY2xhcmF0b3IpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiRGVmaW5pdGlvblwiICYmIGNoaWxkLm5hbWUgIT0gXCJBc3NpZ25PcFwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IGNvbnN0cnVjdGlvblR5cGUgPSBiYWNraW5nSW5pdGlhbGl6ZXI/Lm5hbWUgPT0gXCJPYmplY3RDcmVhdGlvbkV4cHJlc3Npb25cIlxuICAgID8gc3RydWN0dXJhbENoaWxkcmVuKGJhY2tpbmdJbml0aWFsaXplcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IGNvbnN0cnVjdGlvblR5cGVDaGlsZHJlbiA9IGNvbnN0cnVjdGlvblR5cGUgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY29uc3RydWN0aW9uVHlwZSkgOiBbXVxuICBjb25zdCBjb25zdHJ1Y3Rpb25Bcmd1bWVudHMgPSBiYWNraW5nSW5pdGlhbGl6ZXI/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IGJhY2tpbmdBcmd1bWVudHNOb2RlID0gYmFja2luZ1R5cGVDaGlsZHJlblsxXVxuICBjb25zdCBiYWNraW5nQXJndW1lbnRzID0gYmFja2luZ0FyZ3VtZW50c05vZGU/Lm5hbWUgPT0gXCJUeXBlQXJndW1lbnRzXCIgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYmFja2luZ0FyZ3VtZW50c05vZGUpIDogW11cblxuICBpZiAobm9kZVRleHQoYmFja2luZ01vZGlmaWVycyA/PyBiYWNraW5nU3RhdGVtZW50LCBzb3VyY2UpICE9IFwiZmluYWxcIiB8fCBiYWNraW5nRGVjbGFyYXRvcnMubGVuZ3RoICE9IDEgfHxcbiAgICAhYmFja2luZ0RlZmluaXRpb24gfHwgIWJhY2tpbmdBc3NpZ25tZW50IHx8IG5vZGVUZXh0KGJhY2tpbmdBc3NpZ25tZW50LCBzb3VyY2UpICE9IFwiPVwiIHx8ICFiYWNraW5nSW5pdGlhbGl6ZXIgfHxcbiAgICBiYWNraW5nSW5pdGlhbGl6ZXIubmFtZSAhPSBcIk9iamVjdENyZWF0aW9uRXhwcmVzc2lvblwiIHx8IGJhY2tpbmdJbml0aWFsaXplci5nZXRDaGlsZChcIkNsYXNzQm9keVwiKSB8fFxuICAgIGNvbnN0cnVjdGlvblR5cGVDaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBub2RlVGV4dChjb25zdHJ1Y3Rpb25UeXBlQ2hpbGRyZW5bMF0sIHNvdXJjZSkgIT0gXCJqYXZhLnV0aWwuTGlua2VkSGFzaE1hcFwiIHx8XG4gICAgc3RydWN0dXJhbENoaWxkcmVuKGNvbnN0cnVjdGlvblR5cGVDaGlsZHJlblsxXSkubGVuZ3RoICE9IDAgfHwgIWNvbnN0cnVjdGlvbkFyZ3VtZW50cyB8fFxuICAgIHN0cnVjdHVyYWxDaGlsZHJlbihjb25zdHJ1Y3Rpb25Bcmd1bWVudHMpLmxlbmd0aCAhPSAwIHx8IGJhY2tpbmdBcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3JkZXJlZC1tYXAgTGlua2VkSGFzaE1hcCBiYWNraW5nXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgYmFja2luZ05hbWUgPSBub2RlVGV4dChiYWNraW5nRGVmaW5pdGlvbiwgc291cmNlKVxuXG4gIGlmIChjb250ZXh0LmJpbmRpbmdzLmhhcyhiYWNraW5nTmFtZSkgfHwgY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuaGFzKGJhY2tpbmdOYW1lKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvcmRlcmVkLW1hcCBiYWNraW5nIGJpbmRpbmcgY29sbGlzaW9uXCIsIG5vZGVMb2NhdGlvbihiYWNraW5nRGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGJhY2tpbmdBcmd1bWVudHNbMF0sIFwiT3JkZXJlZCBtYXAga2V5XCIsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLFxuICAgIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gIGNvbnN0IHZhbHVlVHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGJhY2tpbmdBcmd1bWVudHNbMV0sIFwiT3JkZXJlZCBtYXAgdmFsdWVcIiwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVycylcbiAgY29uc3QgZW50cmllcyA9IFtdXG4gIGxldCBpbmRleCA9IHN0YXJ0ICsgMVxuXG4gIHdoaWxlIChpbmRleCA8IHN0YXRlbWVudHMubGVuZ3RoKSB7XG4gICAgY29uc3QgcHV0U3RhdGVtZW50ID0gc3RhdGVtZW50c1tpbmRleF1cbiAgICBjb25zdCBpbnZvY2F0aW9uID0gcHV0U3RhdGVtZW50Lm5hbWUgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgPyBwdXRTdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJNZXRob2RJbnZvY2F0aW9uXCIpIDogbnVsbFxuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBpbnZvY2F0aW9uPy5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgICBjb25zdCBhcmd1bWVudExpc3QgPSBpbnZvY2F0aW9uPy5nZXRDaGlsZChcIkFyZ3VtZW50TGlzdFwiKVxuICAgIGNvbnN0IHJlY2VpdmVyID0gaW52b2NhdGlvblxuICAgICAgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oaW52b2NhdGlvbikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIGlmICghaW52b2NhdGlvbiB8fCByZWNlaXZlcj8ubmFtZSAhPSBcIklkZW50aWZpZXJcIiB8fCBub2RlVGV4dChyZWNlaXZlciwgc291cmNlKSAhPSBiYWNraW5nTmFtZSB8fFxuICAgICAgIW1ldGhvZE5hbWUgfHwgbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSAhPSBcInB1dFwiKSBicmVha1xuICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudExpc3QgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KSA6IFtdXG5cbiAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggIT0gMiB8fCBhcmd1bWVudHNfWzBdLm5hbWUgIT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvcmRlcmVkLW1hcCBwdXRcIiwgbm9kZUxvY2F0aW9uKHB1dFN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGVudHJpZXMucHVzaCh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtleTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdHJpbmdMaXRlcmFsfSAqLyAoXG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGtleVR5cGUpXG4gICAgICApLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwRW50cnlcIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGludm9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgdmFsdWU6IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50c19bMV0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHZhbHVlVHlwZSlcbiAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pKVxuICAgIGluZGV4ICs9IDFcbiAgfVxuXG4gIGNvbnN0IHNlYWxTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzW2luZGV4XVxuICBjb25zdCBzZWFsVHlwZU5vZGUgPSBzZWFsU3RhdGVtZW50Py5uYW1lID09IFwiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uXCIgPyBkZWNsYXJhdGlvblR5cGUoc2VhbFN0YXRlbWVudCkgOiBudWxsXG4gIGNvbnN0IHNlYWxEZWNsYXJhdG9ycyA9IHNlYWxTdGF0ZW1lbnQ/Lm5hbWUgPT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIiA/IHNlYWxTdGF0ZW1lbnQuZ2V0Q2hpbGRyZW4oXCJWYXJpYWJsZURlY2xhcmF0b3JcIikgOiBbXVxuICBjb25zdCBzZWFsRGVjbGFyYXRvciA9IHNlYWxEZWNsYXJhdG9yc1swXVxuICBjb25zdCBzZWFsRGVmaW5pdGlvbiA9IHNlYWxEZWNsYXJhdG9yPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcbiAgY29uc3Qgc2VhbEFzc2lnbm1lbnQgPSBzZWFsRGVjbGFyYXRvcj8uZ2V0Q2hpbGQoXCJBc3NpZ25PcFwiKVxuICBjb25zdCBzZWFsSW5pdGlhbGl6ZXIgPSBzZWFsRGVjbGFyYXRvclxuICAgID8gZGlyZWN0Q2hpbGRyZW4oc2VhbERlY2xhcmF0b3IpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiRGVmaW5pdGlvblwiICYmIGNoaWxkLm5hbWUgIT0gXCJBc3NpZ25PcFwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHNlYWxNZXRob2QgPSBzZWFsSW5pdGlhbGl6ZXI/LmdldENoaWxkKFwiTWV0aG9kTmFtZVwiKVxuICBjb25zdCBzZWFsQXJndW1lbnRzTm9kZSA9IHNlYWxJbml0aWFsaXplcj8uZ2V0Q2hpbGQoXCJBcmd1bWVudExpc3RcIilcbiAgY29uc3Qgc2VhbEFyZ3VtZW50cyA9IHNlYWxBcmd1bWVudHNOb2RlID8gc3RydWN0dXJhbENoaWxkcmVuKHNlYWxBcmd1bWVudHNOb2RlKSA6IFtdXG4gIGNvbnN0IHNlYWxSZWNlaXZlciA9IHNlYWxJbml0aWFsaXplcj8ubmFtZSA9PSBcIk1ldGhvZEludm9jYXRpb25cIlxuICAgID8gc3RydWN0dXJhbENoaWxkcmVuKHNlYWxJbml0aWFsaXplcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgIDogdW5kZWZpbmVkXG5cbiAgaWYgKCFzZWFsU3RhdGVtZW50IHx8IG5vZGVUZXh0KHNlYWxTdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgPz8gc2VhbFN0YXRlbWVudCwgc291cmNlKSAhPSBcImZpbmFsXCIgfHxcbiAgICAhc2VhbFR5cGVOb2RlIHx8IHNlYWxEZWNsYXJhdG9ycy5sZW5ndGggIT0gMSB8fCAhc2VhbERlZmluaXRpb24gfHwgIXNlYWxBc3NpZ25tZW50IHx8IG5vZGVUZXh0KHNlYWxBc3NpZ25tZW50LCBzb3VyY2UpICE9IFwiPVwiIHx8XG4gICAgc2VhbEluaXRpYWxpemVyPy5uYW1lICE9IFwiTWV0aG9kSW52b2NhdGlvblwiIHx8IG5vZGVUZXh0KHNlYWxSZWNlaXZlciA/PyBzZWFsU3RhdGVtZW50LCBzb3VyY2UpICE9IFwiamF2YS51dGlsLkNvbGxlY3Rpb25zXCIgfHxcbiAgICAhc2VhbE1ldGhvZCB8fCBub2RlVGV4dChzZWFsTWV0aG9kLCBzb3VyY2UpICE9IFwidW5tb2RpZmlhYmxlU2VxdWVuY2VkTWFwXCIgfHwgc2VhbEFyZ3VtZW50cy5sZW5ndGggIT0gMSB8fFxuICAgIHNlYWxBcmd1bWVudHNbMF0ubmFtZSAhPSBcIklkZW50aWZpZXJcIiB8fCBub2RlVGV4dChzZWFsQXJndW1lbnRzWzBdLCBzb3VyY2UpICE9IGJhY2tpbmdOYW1lKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9yZGVyZWQtbWFwIHVubW9kaWZpYWJsZSBTZXF1ZW5jZWRNYXAgYm91bmRhcnlcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KHNlYWxEZWZpbml0aW9uLCBzb3VyY2UpXG5cbiAgaWYgKG5hbWUgPT0gYmFja2luZ05hbWUpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3JkZXJlZC1tYXAgYm91bmRhcnkgYmluZGluZyBjb2xsaXNpb25cIiwgbm9kZUxvY2F0aW9uKHNlYWxEZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBib3VuZGFyeVR5cGUgPSBjb252ZXJ0VHlwZShzZWFsVHlwZU5vZGUsIGBMb2NhbCAnJHtuYW1lfSdgLCBub2RlTG9jYXRpb24oc2VhbFN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVycylcbiAgY29uc3Qgc2VhbFR5cGVDaGlsZHJlbiA9IHNlYWxUeXBlTm9kZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbihzZWFsVHlwZU5vZGUpIDogW11cbiAgY29uc3Qgc2VhbFR5cGVBcmd1bWVudHMgPSBzZWFsVHlwZUNoaWxkcmVuWzFdPy5uYW1lID09IFwiVHlwZUFyZ3VtZW50c1wiID8gc3RydWN0dXJhbENoaWxkcmVuKHNlYWxUeXBlQ2hpbGRyZW5bMV0pIDogW11cblxuICBpZiAoc2VhbFR5cGVDaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBub2RlVGV4dChzZWFsVHlwZUNoaWxkcmVuWzBdLCBzb3VyY2UpICE9IFwiamF2YS51dGlsLlNlcXVlbmNlZE1hcFwiIHx8XG4gICAgc2VhbFR5cGVBcmd1bWVudHMubGVuZ3RoICE9IDIgfHwgYm91bmRhcnlUeXBlLmtpbmQgIT0gXCJNYXBUeXBlXCIgfHwgIXNhbWVWYWx1ZVR5cGUoYm91bmRhcnlUeXBlLmtleVR5cGUsIGtleVR5cGUpIHx8XG4gICAgIXNhbWVWYWx1ZVR5cGUoYm91bmRhcnlUeXBlLnZhbHVlVHlwZSwgdmFsdWVUeXBlKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvcmRlcmVkLW1hcCBib3VuZGFyeSB0eXBlIG1pc21hdGNoXCIsIG5vZGVMb2NhdGlvbihzZWFsVHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHR5cGUgPSBvcmRlcmVkTWFwVHlwZShcbiAgICBib3VuZGFyeVR5cGUua2V5VHlwZSxcbiAgICBib3VuZGFyeVR5cGUudmFsdWVUeXBlLFxuICAgIG5vZGVMb2NhdGlvbihzZWFsVHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5vZGVMb2NhdGlvbihzZWFsVHlwZUFyZ3VtZW50c1swXSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgbm9kZUxvY2F0aW9uKHNlYWxUeXBlQXJndW1lbnRzWzFdLCBmaWxlbmFtZSwgc291cmNlKVxuICApXG5cbiAgY29udGV4dC5iaW5kaW5ncy5zZXQobmFtZSwgdHlwZSlcbiAgY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuYWRkKGJhY2tpbmdOYW1lKVxuICByZXR1cm4ge1xuICAgIG5leHRJbmRleDogaW5kZXggKyAxLFxuICAgIHN0YXRlbWVudDogd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBpbml0aWFsaXplcjogd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGVudHJpZXMsXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9yZGVyZWRNYXBMaXRlcmFsXCIpLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBiYWNraW5nSW5pdGlhbGl6ZXIuZnJvbSwgc2VhbEluaXRpYWxpemVyLnRvKVxuICAgICAgfSwge2ZhY3Rvcnk6IG5vZGVMb2NhdGlvbihiYWNraW5nSW5pdGlhbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMb2NhbERlY2xhcmF0aW9uXCIpLFxuICAgICAgbG9jYXRpb246IGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgYmFja2luZ1N0YXRlbWVudC5mcm9tLCBzZWFsU3RhdGVtZW50LnRvKSxcbiAgICAgIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lLFxuICAgICAgdHlwZVxuICAgIH0sIHtuYW1lOiBub2RlTG9jYXRpb24oc2VhbERlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLCBvcGVyYXRvcjogbm9kZUxvY2F0aW9uKHNlYWxBc3NpZ25tZW50LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhbiBleGFjdCBKYXZhIHNjYWxhciB0eXBlIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZSB8IG51bGx9IHNvdXJjZVR5cGUgLSBKYXZhIHR5cGUgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gU2VtYW50aWMgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGUoc291cmNlVHlwZSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBpZiAoIXNvdXJjZVR5cGUpIHJldHVybiBtaXNzaW5nVHlwZShcImphdmFcIiwgc3ViamVjdCwgbG9jYXRpb24pXG4gIGlmIChzb3VyY2VUeXBlLm5hbWUgPT0gXCJ2b2lkXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ2b2lkIHZhbHVlIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBpZiAoc291cmNlVHlwZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKHNvdXJjZVR5cGUpXG4gICAgY29uc3QgbmFtZU5vZGUgPSBjaGlsZHJlblswXVxuICAgIGNvbnN0IGFyZ3VtZW50c05vZGUgPSBjaGlsZHJlblsxXVxuXG4gICAgaWYgKCFuYW1lTm9kZSB8fCAhYXJndW1lbnRzTm9kZSB8fCBhcmd1bWVudHNOb2RlLm5hbWUgIT0gXCJUeXBlQXJndW1lbnRzXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgZ2VuZXJpYyBjb2xsZWN0aW9uIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBuYW1lID0gbm9kZVRleHQobmFtZU5vZGUsIHNvdXJjZSlcbiAgICBjb25zdCBhcmd1bWVudHNfID0gc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50c05vZGUpXG5cbiAgICBpZiAobmFtZSA9PSBcImphdmEudXRpbC5MaXN0XCIgJiYgYXJndW1lbnRzXy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIGxpc3RUeXBlKFxuICAgICAgICBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChhcmd1bWVudHNfWzBdLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG5hbWUgPT0gXCJqYXZhLnV0aWwuTWFwXCIgJiYgYXJndW1lbnRzXy5sZW5ndGggPT0gMikge1xuICAgICAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGFyZ3VtZW50c19bMF0sIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG5cbiAgICAgIGlmIChrZXlUeXBlLmtpbmQgIT0gXCJUeXBlUmVmZXJlbmNlXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hcCBrZXkgdHlwZSBvdGhlciB0aGFuIHN0cmluZ1wiLCBub2RlTG9jYXRpb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwVHlwZShcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgY29udmVydEphdmFUeXBlQXJndW1lbnQoYXJndW1lbnRzX1sxXSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICAgIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24oYXJndW1lbnRzX1sxXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG5hbWUgPT0gXCJqYXZhLnV0aWwuU2VxdWVuY2VkTWFwXCIgJiYgYXJndW1lbnRzXy5sZW5ndGggPT0gMikge1xuICAgICAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGFyZ3VtZW50c19bMF0sIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG5cbiAgICAgIGlmIChrZXlUeXBlLmtpbmQgIT0gXCJUeXBlUmVmZXJlbmNlXCIgfHwga2V5VHlwZS5uYW1lICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hcCBrZXkgdHlwZSBvdGhlciB0aGFuIHN0cmluZ1wiLCBub2RlTG9jYXRpb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwVHlwZShcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgY29udmVydEphdmFUeXBlQXJndW1lbnQoYXJndW1lbnRzX1sxXSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICAgIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24oYXJndW1lbnRzX1sxXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKChuYW1lID09IFwiamF2YS51dGlsLk9wdGlvbmFsXCIgfHwgbmFtZSA9PSBcIk9wdGlvbmFsXCIpICYmIGFyZ3VtZW50c18ubGVuZ3RoID09IDEpIHtcbiAgICAgIHJldHVybiBvcHRpb25hbFR5cGUoXG4gICAgICAgIGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGFyZ3VtZW50c19bMF0sIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpLFxuICAgICAgICBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIG5vZGVMb2NhdGlvbihhcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZE5hbWVzLmdldChuYW1lKVxuXG4gICAgaWYgKHJlY29yZD8uaWQpIHtcbiAgICAgIGlmIChyZWNvcmQua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiZ2VuZXJpYyByZWZlcmVuY2UgY2xhc3MgdHlwZVwiLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVjb3JkVHlwZShyZWNvcmQuaWQsIG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIGFyZ3VtZW50c18ubWFwKChhcmd1bWVudCkgPT5cbiAgICAgICAgY29udmVydEphdmFUeXBlQXJndW1lbnQoYXJndW1lbnQsIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpKSlcbiAgICB9XG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgZ2VuZXJpYyB0eXBlXCIsIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAoIVtcIlByaW1pdGl2ZVR5cGVcIiwgXCJUeXBlTmFtZVwiLCBcIlNjb3BlZFR5cGVOYW1lXCJdLmluY2x1ZGVzKHNvdXJjZVR5cGUubmFtZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgc2NhbGFyIHR5cGVcIiwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCB0eXBlUGFyYW1ldGVyID0gdHlwZVBhcmFtZXRlcnMuZ2V0KG5vZGVUZXh0KHNvdXJjZVR5cGUsIHNvdXJjZSkpXG5cbiAgaWYgKHR5cGVQYXJhbWV0ZXI/LmlkKSByZXR1cm4gdHlwZVZhcmlhYmxlKHR5cGVQYXJhbWV0ZXIuaWQsIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZGVjbGFyYXRpb24gPSByZWNvcmROYW1lcy5nZXQobm9kZVRleHQoc291cmNlVHlwZSwgc291cmNlKSlcblxuICBpZiAoZGVjbGFyYXRpb24/LmlkKSByZXR1cm4gZGVjbGFyYXRpb24ua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIlxuICAgID8gcmVmZXJlbmNlVHlwZShkZWNsYXJhdGlvbi5pZCwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIDogZGVjbGFyYXRpb24ua2luZCA9PSBcIkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb25cIlxuICAgICAgPyBvd25lZFJlc291cmNlVHlwZShkZWNsYXJhdGlvbi5pZCwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgOiByZWNvcmRUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgY29uc3QgdHlwZSA9IHNvdXJjZVNjYWxhclR5cGUoXCJqYXZhXCIsIG5vZGVUZXh0KHNvdXJjZVR5cGUsIHNvdXJjZSksIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICBpZiAoIXR5cGUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCBzY2FsYXIgdHlwZVwiLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgbG9jYXRpb24uZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgcmV0dXJuIHR5cGVcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgYm94ZWQgSmF2YSBjb2xsZWN0aW9uIHR5cGUgYXJndW1lbnQgb3IgbmVzdGVkIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFR5cGUgYXJndW1lbnQgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gT3duaW5nIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gU2VtYW50aWMgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFUeXBlQXJndW1lbnQobm9kZSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBpZiAobm9kZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIikgcmV0dXJuIGNvbnZlcnRUeXBlKG5vZGUsIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXIgPSB0eXBlUGFyYW1ldGVycy5nZXQobm9kZVRleHQobm9kZSwgc291cmNlKSlcblxuICBpZiAodHlwZVBhcmFtZXRlcj8uaWQpIHJldHVybiB0eXBlVmFyaWFibGUodHlwZVBhcmFtZXRlci5pZCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBkZWNsYXJhdGlvbiA9IHJlY29yZE5hbWVzLmdldChub2RlVGV4dChub2RlLCBzb3VyY2UpKVxuXG4gIGlmIChkZWNsYXJhdGlvbj8uaWQpIHJldHVybiBkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiXG4gICAgPyByZWZlcmVuY2VUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgOiBkZWNsYXJhdGlvbi5raW5kID09IFwiRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvblwiXG4gICAgICA/IG93bmVkUmVzb3VyY2VUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICA6IHJlY29yZFR5cGUoZGVjbGFyYXRpb24uaWQsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc3BlbGxpbmcgPSBub2RlVGV4dChub2RlLCBzb3VyY2UpXG4gIGNvbnN0IHNjYWxhciA9IHNwZWxsaW5nID09IFwiSW50ZWdlclwiID8gXCJpbnRlZ2VyXCIgOiBzcGVsbGluZyA9PSBcIkJvb2xlYW5cIiA/IFwiYm9vbGVhblwiIDogc3BlbGxpbmcgPT0gXCJTdHJpbmdcIiA/IFwic3RyaW5nXCIgOiB1bmRlZmluZWRcblxuICBpZiAoIXNjYWxhcikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIGNvbGxlY3Rpb24gdHlwZSBhcmd1bWVudFwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IHR5cGUgPSB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVJlZmVyZW5jZVwiKSwgbmFtZTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1R5cGVOYW1lfSAqLyAoc2NhbGFyKX1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh0eXBlLCB7dHlwZTogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhwbGljaXQgSmF2YSBmdW5jdGlvbiByZXR1cm4gdHlwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgbnVsbH0gc291cmNlVHlwZSAtIEphdmEgcmV0dXJuIHR5cGUgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgZnVuY3Rpb24gcmV0dXJuLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBGdW5jdGlvbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBbcmVjb3JkTmFtZXNdIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IFNlbWFudGljIHJldHVybiB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UmV0dXJuVHlwZShzb3VyY2VUeXBlLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGlmIChzb3VyY2VUeXBlPy5uYW1lID09IFwidm9pZFwiKSB7XG4gICAgcmV0dXJuIHJlcXVpcmVTb3VyY2VSZXR1cm5UeXBlKFwiamF2YVwiLCBcInZvaWRcIiwgc3ViamVjdCwgbG9jYXRpb24sIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiBjb252ZXJ0VHlwZShzb3VyY2VUeXBlLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGRpcmVjdCBKYXZhIGRlY2xhcmF0aW9uIHR5cGUgbm9kZSBzdXBwb3J0ZWQgYnkgc2NhbGFyIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIERlY2xhcmF0aW9uIG5vZGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgbnVsbH0gVHlwZSBzeW50YXggbm9kZS5cbiAqL1xuZnVuY3Rpb24gZGVjbGFyYXRpb25UeXBlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuZ2V0Q2hpbGQoXCJHZW5lcmljVHlwZVwiKSA/PyBub2RlLmdldENoaWxkKFwiUHJpbWl0aXZlVHlwZVwiKSA/PyBub2RlLmdldENoaWxkKFwiVHlwZU5hbWVcIikgPz8gbm9kZS5nZXRDaGlsZChcIlNjb3BlZFR5cGVOYW1lXCIpID8/IG5vZGUuZ2V0Q2hpbGQoXCJ2b2lkXCIpXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIG5hdGl2ZSB1bmJvdW5kZWQgaW52YXJpYW50IEphdmEgdHlwZS1wYXJhbWV0ZXIgbGlzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgbnVsbH0gbm9kZSAtIFR5cGVQYXJhbWV0ZXJzIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3duZXJJZCAtIFN0YWJsZSBvd25pbmcgZGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXSB8IHVuZGVmaW5lZH0gU2VtYW50aWMgcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFUeXBlUGFyYW1ldGVycyhub2RlLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghbm9kZSkgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBwYXJhbWV0ZXJzID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG5cbiAgcmV0dXJuIHBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocGFyYW1ldGVyKVxuICAgIGNvbnN0IGRlZmluaXRpb24gPSBjaGlsZHJlblswXVxuXG4gICAgaWYgKHBhcmFtZXRlci5uYW1lICE9IFwiVHlwZVBhcmFtZXRlclwiIHx8IGNoaWxkcmVuLmxlbmd0aCAhPSAxIHx8IGRlZmluaXRpb24/Lm5hbWUgIT0gXCJEZWZpbml0aW9uXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJib3VuZGVkLCBhbm5vdGF0ZWQsIG9yIG1hbGZvcm1lZCB0eXBlIHBhcmFtZXRlclwiLCBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGlkOiBgJHtvd25lcklkfTp0eXBlOiR7aW5kZXh9YCxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlR5cGVQYXJhbWV0ZXJcIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG5hbWU6IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcbiAgICB9LCB7bmFtZTogbG9jYXRpb259KVxuICB9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBzdXBwb3J0ZWQgSmF2YSBmdW5jdGlvbiBzaWduYXR1cmUgYmVmb3JlIGFkYXB0aW5nIGFueSBib2R5LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBNZXRob2QgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb2dyYW1GdW5jdGlvbl0gLSBXaGV0aGVyIHRoZSBjYW5vbmljYWwgcHJvamVjdCBwcm9maWxlIGFkbWl0cyBleHBsaWNpdCBwdWJsaWMgb3IgcHJpdmF0ZSB2aXNpYmlsaXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IFtvd25lcklkXSAtIFN0YWJsZSBmdW5jdGlvbiBpZGVudGl0eS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlZmVyZW5jZU1vZHVsZV0gLSBXaGV0aGVyIHBhY2thZ2UtdmlzaWJsZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSByZXF1aXJlZCBieSBzaWJsaW5nIHJlZmVyZW5jZSBjbGFzc2VzLlxuICogQHJldHVybnMge0phdmFGdW5jdGlvblNpZ25hdHVyZX0gU2VtYW50aWMgZnVuY3Rpb24gc2lnbmF0dXJlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHByb2dyYW1GdW5jdGlvbiA9IGZhbHNlLCBvd25lcklkID0gXCJmdW5jdGlvbjowXCIsXG4gIHJlZmVyZW5jZU1vZHVsZSA9IGZhbHNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1vZGlmaWVycyA9IG5vZGUuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgbW9kaWZpZXJOYW1lcyA9IG1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihtb2RpZmllcnMpLm1hcCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLm5hbWUpIDogW11cblxuICBjb25zdCByZXF1aXJlZE1vZGlmaWVycyA9IHByb2dyYW1GdW5jdGlvbiA/IFwicHVibGljIG9yIHByaXZhdGUgc3RhdGljXCIgOiByZWZlcmVuY2VNb2R1bGUgPyBcInByaXZhdGUgb3IgcGFja2FnZS12aXNpYmxlIHN0YXRpY1wiIDogXCJwcml2YXRlIHN0YXRpY1wiXG4gIGNvbnN0IG1vZGlmaWVyc1RleHQgPSBtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpXG5cbiAgaWYgKHByb2dyYW1GdW5jdGlvbiA/ICFbXCJwdWJsaWMgc3RhdGljXCIsIFwicHJpdmF0ZSBzdGF0aWNcIl0uaW5jbHVkZXMobW9kaWZpZXJzVGV4dCkgOlxuICAgIHJlZmVyZW5jZU1vZHVsZSA/ICFbXCJwcml2YXRlIHN0YXRpY1wiLCBcInN0YXRpY1wiXS5pbmNsdWRlcyhtb2RpZmllcnNUZXh0KSA6IG1vZGlmaWVyc1RleHQgIT0gXCJwcml2YXRlIHN0YXRpY1wiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgc2VtYW50aWMgZnVuY3Rpb24gd2l0aG91dCAke3JlcXVpcmVkTW9kaWZpZXJzfWAsIG1vZGlmaWVycyA/IG5vZGVMb2NhdGlvbihtb2RpZmllcnMsIGZpbGVuYW1lLCBzb3VyY2UpIDogbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSBub2RlLmdldENoaWxkKFwiVHlwZVBhcmFtZXRlcnNcIilcbiAgY29uc3QgdGhyb3dzID0gbm9kZS5nZXRDaGlsZChcIlRocm93c1wiKVxuXG4gIGlmICh0aHJvd3MpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJjaGVja2VkIHRocm93c1wiLCBub2RlTG9jYXRpb24odGhyb3dzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc2VtYW50aWNUeXBlUGFyYW1ldGVycyA9IGNvbnZlcnRKYXZhVHlwZVBhcmFtZXRlcnModHlwZVBhcmFtZXRlcnMsIG93bmVySWQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJOYW1lcyA9IG5ldyBNYXAoKHNlbWFudGljVHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuICBjb25zdCBkZWZpbml0aW9uID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHN0cnVjdHVyYWxDaGlsZHJlbihwYXJhbWV0ZXJzTm9kZSlcbiAgY29uc3QgdW5zdXBwb3J0ZWRQYXJhbWV0ZXIgPSBwYXJhbWV0ZXJOb2Rlcy5maW5kKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci5uYW1lICE9IFwiRm9ybWFsUGFyYW1ldGVyXCIpXG5cbiAgaWYgKHVuc3VwcG9ydGVkUGFyYW1ldGVyKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIHBhcmFtZXRlciBmb3JtXCIsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZFBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHBhcmFtZXRlckNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcilcblxuICAgIGlmIChwYXJhbWV0ZXJDaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgfHwgcGFyYW1ldGVyLmdldENoaWxkKFwiRGltZW5zaW9uXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgcGFyYW1ldGVyIGZvcm1cIiwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHBhcmFtZXRlck5hbWVOb2RlID0gcmVxdWlyZWRDaGlsZChwYXJhbWV0ZXIsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBub2RlVGV4dChwYXJhbWV0ZXJOYW1lTm9kZSwgc291cmNlKVxuXG4gICAgY29uc3Qgc2VtYW50aWNQYXJhbWV0ZXIgPSB7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksXG4gICAgICBsb2NhdGlvbjogcGFyYW1ldGVyTG9jYXRpb24sXG4gICAgICBuYW1lOiBwYXJhbWV0ZXJOYW1lLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyYXRpb25UeXBlKHBhcmFtZXRlciksIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICAgIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoc2VtYW50aWNQYXJhbWV0ZXIsIHtuYW1lOiBub2RlTG9jYXRpb24ocGFyYW1ldGVyTmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbixcbiAgICBuYW1lLFxuICAgIG5hbWVMb2NhdGlvbjogbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogY29udmVydFJldHVyblR5cGUoZGVjbGFyYXRpb25UeXBlKG5vZGUpLCBgRnVuY3Rpb24gJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcyksXG4gICAgLi4uKHNlbWFudGljVHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHNlbWFudGljVHlwZVBhcmFtZXRlcnN9IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgSmF2YSBmdW5jdGlvbiBib2R5IHVzaW5nIGFscmVhZHktcHJvdmVkIG1vZHVsZSBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBNZXRob2QgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge0phdmFGdW5jdGlvblNpZ25hdHVyZX0gc2lnbmF0dXJlIC0gUHJlY29udmVydGVkIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgSmF2YUZ1bmN0aW9uU2lnbmF0dXJlPn0gZnVuY3Rpb25zIC0gTW9kdWxlIGZ1bmN0aW9uIHNpZ25hdHVyZXMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59IHJlY29yZHMgLSBSZWNvcmQgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gY2xhc3NlcyAtIFJlZmVyZW5jZSBjbGFzc2VzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JOYW1lcyAtIEVycm9yIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9ycyAtIEVycm9yIGRlY2xhcmF0aW9ucyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gU2VtYW50aWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRGdW5jdGlvbihub2RlLCBzaWduYXR1cmUsIGZ1bmN0aW9ucywgcmVjb3JkTmFtZXMsIHJlY29yZHMsIGNsYXNzZXMsIGVycm9yTmFtZXMsIGVycm9ycywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBibG9jayA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJCbG9ja1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIGJpbmRpbmdzOiBuZXcgTWFwKHNpZ25hdHVyZS5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgIGNsYXNzZXMsXG4gICAgZXJyb3JOYW1lcyxcbiAgICBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoKSxcbiAgICBlcnJvcnMsXG4gICAgZnVuY3Rpb25zLFxuICAgIHJlY29yZE5hbWVzLFxuICAgIHJlY29yZHMsXG4gICAgcmV0dXJuVHlwZTogc2lnbmF0dXJlLnJldHVyblR5cGUsXG4gICAgdHlwZVBhcmFtZXRlcnM6IG5ldyBNYXAoKHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKGJsb2NrLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICBraW5kOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIixcbiAgICBsb2NhdGlvbjogc2lnbmF0dXJlLmxvY2F0aW9uLFxuICAgIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IHNpZ25hdHVyZS5yZXR1cm5UeXBlLFxuICAgIC4uLihzaWduYXR1cmUudHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHNpZ25hdHVyZS50eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfSwge25hbWU6IHNpZ25hdHVyZS5uYW1lTG9jYXRpb259KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBmaW5hbCBSdW50aW1lRXhjZXB0aW9uIHN1YmNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBKYXZhIGNsYXNzIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIHNlbWFudGljIGVycm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb2dyYW1FcnJvcl0gLSBXaGV0aGVyIHB1YmxpYyBwcm9ncmFtIHZpc2liaWxpdHkgaXMgYWRtaXR0ZWQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gU2VtYW50aWMgZXJyb3IgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhRXJyb3Iobm9kZSwgZGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHByb2dyYW1FcnJvciA9IGZhbHNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1vZGlmaWVycyA9IG5vZGUuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgbW9kaWZpZXJUZXh0ID0gbW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKG1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkuam9pbihcIiBcIikgOiBcIlwiXG4gIGNvbnN0IHN1cGVyY2xhc3MgPSBub2RlLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKVxuICBjb25zdCBzdXBlcmNsYXNzQ2hpbGRyZW4gPSBzdXBlcmNsYXNzID8gc3RydWN0dXJhbENoaWxkcmVuKHN1cGVyY2xhc3MpIDogW11cbiAgY29uc3QgcGFyZW50ID0gc3VwZXJjbGFzc0NoaWxkcmVuLmF0KC0xKVxuICBjb25zdCBib2R5ID0gbm9kZS5nZXRDaGlsZChcIkNsYXNzQm9keVwiKVxuICBjb25zdCBtZW1iZXJzID0gYm9keSA/IHN0cnVjdHVyYWxDaGlsZHJlbihib2R5KSA6IFtdXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gbWVtYmVyc1swXVxuICBjb25zdCBwYXJhbWV0ZXJzID0gY29uc3RydWN0b3I/LmdldENoaWxkKFwiRm9ybWFsUGFyYW1ldGVyc1wiKVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHBhcmFtZXRlcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocGFyYW1ldGVycykgOiBbXVxuICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJOb2Rlc1swXVxuICBjb25zdCBwYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyID8gZGVjbGFyYXRpb25UeXBlKHBhcmFtZXRlcikgOiBudWxsXG4gIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXI/LmdldENoaWxkKFwiRGVmaW5pdGlvblwiKVxuICBjb25zdCBjb25zdHJ1Y3RvckJvZHkgPSBjb25zdHJ1Y3Rvcj8uZ2V0Q2hpbGQoXCJDb25zdHJ1Y3RvckJvZHlcIilcbiAgY29uc3QgY29uc3RydWN0b3JTdGF0ZW1lbnRzID0gY29uc3RydWN0b3JCb2R5ID8gc3RydWN0dXJhbENoaWxkcmVuKGNvbnN0cnVjdG9yQm9keSkgOiBbXVxuICBjb25zdCBzdXBlckNhbGwgPSBjb25zdHJ1Y3RvclN0YXRlbWVudHNbMF1cbiAgY29uc3Qgc3VwZXJBcmd1bWVudHMgPSBzdXBlckNhbGw/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IHN1cGVyVmFsdWVzID0gc3VwZXJBcmd1bWVudHMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oc3VwZXJBcmd1bWVudHMpIDogW11cblxuICBpZiAoKHByb2dyYW1FcnJvciA/ICFbXCJwdWJsaWMgZmluYWxcIiwgXCJmaW5hbFwiXS5pbmNsdWRlcyhtb2RpZmllclRleHQpIDogbW9kaWZpZXJUZXh0ICE9IFwiZmluYWxcIikgfHxcbiAgICAhc3VwZXJjbGFzcyB8fCBzdXBlcmNsYXNzQ2hpbGRyZW4ubGVuZ3RoICE9IDIgfHwgcGFyZW50Py5uYW1lICE9IFwiVHlwZU5hbWVcIiB8fCBub2RlVGV4dChwYXJlbnQsIHNvdXJjZSkgIT0gXCJSdW50aW1lRXhjZXB0aW9uXCIgfHxcbiAgICBub2RlLmdldENoaWxkKFwiU3VwZXJJbnRlcmZhY2VzXCIpIHx8IG5vZGUuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSB8fCAhYm9keSB8fCBtZW1iZXJzLmxlbmd0aCAhPSAxIHx8XG4gICAgY29uc3RydWN0b3I/Lm5hbWUgIT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIgfHxcbiAgICAocHJvZ3JhbUVycm9yID8gbm9kZVRleHQoY29uc3RydWN0b3IuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgPz8gY29uc3RydWN0b3IsIHNvdXJjZSkgIT0gXCJwdWJsaWNcIiA6IGNvbnN0cnVjdG9yLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpKSB8fFxuICAgIGNvbnN0cnVjdG9yLmdldENoaWxkKFwiVGhyb3dzXCIpIHx8XG4gICAgbm9kZVRleHQoY29uc3RydWN0b3IuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpID8/IG5vZGUsIHNvdXJjZSkgIT0gZGVjbGFyYXRpb24ubmFtZSB8fCBwYXJhbWV0ZXJOb2Rlcy5sZW5ndGggIT0gMSB8fFxuICAgIHBhcmFtZXRlcj8ubmFtZSAhPSBcIkZvcm1hbFBhcmFtZXRlclwiIHx8IG5vZGVUZXh0KHBhcmFtZXRlclR5cGUgPz8gbm9kZSwgc291cmNlKSAhPSBcIlN0cmluZ1wiIHx8XG4gICAgbm9kZVRleHQocGFyYW1ldGVyTmFtZSA/PyBub2RlLCBzb3VyY2UpICE9IFwibWVzc2FnZVwiIHx8ICFjb25zdHJ1Y3RvckJvZHkgfHwgY29uc3RydWN0b3JTdGF0ZW1lbnRzLmxlbmd0aCAhPSAxIHx8XG4gICAgc3VwZXJDYWxsPy5uYW1lICE9IFwiRXhwbGljaXRDb25zdHJ1Y3Rvckludm9jYXRpb25cIiB8fCAhc3VwZXJDYWxsLmdldENoaWxkKFwic3VwZXJcIikgfHwgc3VwZXJWYWx1ZXMubGVuZ3RoICE9IDEgfHxcbiAgICBzdXBlclZhbHVlc1swXS5uYW1lICE9IFwiSWRlbnRpZmllclwiIHx8IG5vZGVUZXh0KHN1cGVyVmFsdWVzWzBdLCBzb3VyY2UpICE9IFwibWVzc2FnZVwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCB0eXBlZCBlcnJvciBkZWNsYXJhdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGRlY2xhcmF0aW9uLCB7XG4gICAgbmFtZTogbm9kZUxvY2F0aW9uKHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICB0eXBlOiBub2RlTG9jYXRpb24ocGFyZW50LCBmaWxlbmFtZSwgc291cmNlKVxuICB9KVxufVxuXG4vKipcbiAqIFJlYWRzIG9uZSBwYWNrYWdlLXByaXZhdGUgSmF2YSByZWZlcmVuY2UgY29uc3RydWN0b3Igb3IgaW5zdGFuY2UtbWV0aG9kIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gQ29uc3RydWN0b3Igb3IgbWV0aG9kIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIERlY2xhcmluZyBjbGFzcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IG5vbWluYWxOYW1lcyAtIFZpc2libGUgbm9taW5hbCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNvbnN0cnVjdG9yIC0gV2hldGhlciB0aGlzIGlzIHRoZSBzb2xlIGNvbnN0cnVjdG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lOiBzdHJpbmcsIG5hbWVMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHBhcmFtZXRlcnM6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdLCByZXR1cm5UeXBlPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9fSBFeGFjdCBzaWduYXR1cmUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhQ2xhc3NDYWxsYWJsZVNpZ25hdHVyZShub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCBjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBkZWZpbml0aW9uID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHN0cnVjdHVyYWxDaGlsZHJlbihwYXJhbWV0ZXJzTm9kZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gbm9kZS5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuXG4gIGlmIChtb2RpZmllcnMgfHwgbm9kZS5nZXRDaGlsZChcIlRocm93c1wiKSB8fCBub2RlLmdldENoaWxkKFwiVHlwZVBhcmFtZXRlcnNcIikgfHxcbiAgICBjb25zdHJ1Y3RvciAhPSAobm9kZS5uYW1lID09IFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSB8fCBjb25zdHJ1Y3RvciAmJiBuYW1lICE9IGRlY2xhcmF0aW9uLm5hbWUpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibm9uY2Fub25pY2FsIHJlZmVyZW5jZSBjbGFzcyBjYWxsYWJsZVwiLCBsb2NhdGlvbilcbiAgfVxuICBpZiAoIWNvbnN0cnVjdG9yICYmIHJlZmVyZW5jZU1ldGhvZEhvb2tzLmhhcyhuYW1lKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYHJlc2VydmVkIHJlZmVyZW5jZSBtZXRob2QgJyR7bmFtZX0nYCwgbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBjaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbihwYXJhbWV0ZXIpXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZU5vZGUgPSBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG5cbiAgICBpZiAocGFyYW1ldGVyLm5hbWUgIT0gXCJGb3JtYWxQYXJhbWV0ZXJcIiB8fCBjaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgfHxcbiAgICAgIHBhcmFtZXRlci5nZXRDaGlsZChcIkRpbWVuc2lvblwiKSB8fCAhcGFyYW1ldGVyTmFtZU5vZGUpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCByZWZlcmVuY2UgY2xhc3MgcGFyYW1ldGVyXCIsIHBhcmFtZXRlckxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gbm9kZVRleHQocGFyYW1ldGVyTmFtZU5vZGUsIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksIGxvY2F0aW9uOiBwYXJhbWV0ZXJMb2NhdGlvbiwgbmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgIHR5cGU6IGNvbnZlcnRUeXBlKGRlY2xhcmF0aW9uVHlwZShwYXJhbWV0ZXIpLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlck5hbWV9J2AsIHBhcmFtZXRlckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBub21pbmFsTmFtZXMpfSxcbiAgICB7bmFtZTogbm9kZUxvY2F0aW9uKHBhcmFtZXRlck5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG5cbiAgcmV0dXJuIHtsb2NhdGlvbiwgbmFtZTogY29uc3RydWN0b3IgPyBcImNvbnN0cnVjdG9yXCIgOiBuYW1lLCBuYW1lTG9jYXRpb246IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKSwgcGFyYW1ldGVycyxcbiAgICAuLi4oY29uc3RydWN0b3IgPyB7fSA6IHtyZXR1cm5UeXBlOiBjb252ZXJ0UmV0dXJuVHlwZShkZWNsYXJhdGlvblR5cGUobm9kZSksIGBNZXRob2QgJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLFxuICAgICAgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKX0pfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBib3VuZGVkIGZpbmFsL3ByaXZhdGUtZmllbGQgSmF2YSByZWZlcmVuY2UtY2xhc3MgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gQ2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgY2xhc3MgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBub21pbmFsTmFtZXMgLSBWaXNpYmxlIG5vbWluYWwgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59IHJlY29yZHMgLSBSZWNvcmRzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gY2xhc3NlcyAtIENsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIEphdmFGdW5jdGlvblNpZ25hdHVyZT59IGZ1bmN0aW9ucyAtIFRvcC1sZXZlbCBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JOYW1lcyAtIEVycm9ycyBieSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3JzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBTZW1hbnRpYyBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFSZWZlcmVuY2VDbGFzcyhub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCByZWNvcmRzLCBjbGFzc2VzLCBmdW5jdGlvbnMsIGVycm9yTmFtZXMsIGVycm9ycyxcbiAgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBtb2RpZmllcnMgPSBub2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG4gIGNvbnN0IGJvZHkgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1lbWJlcnMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYm9keSlcbiAgY29uc3QgZmllbGROb2RlcyA9IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiKVxuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGVzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IG1ldGhvZE5vZGVzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJNZXRob2REZWNsYXJhdGlvblwiKVxuXG4gIGlmIChtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IFwiZmluYWxcIiB8fCBub2RlLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKSB8fCBub2RlLmdldENoaWxkKFwiU3VwZXJJbnRlcmZhY2VzXCIpIHx8XG4gICAgbm9kZS5nZXRDaGlsZChcIlR5cGVQYXJhbWV0ZXJzXCIpIHx8IGNvbnN0cnVjdG9yTm9kZXMubGVuZ3RoICE9IDEgfHwgZmllbGROb2Rlcy5sZW5ndGggPT0gMCB8fFxuICAgIGZpZWxkTm9kZXMubGVuZ3RoICsgY29uc3RydWN0b3JOb2Rlcy5sZW5ndGggKyBtZXRob2ROb2Rlcy5sZW5ndGggIT0gbWVtYmVycy5sZW5ndGggfHxcbiAgICBtZW1iZXJzLnNsaWNlKDAsIGZpZWxkTm9kZXMubGVuZ3RoKS5zb21lKChtZW1iZXIpID0+IG1lbWJlci5uYW1lICE9IFwiRmllbGREZWNsYXJhdGlvblwiKSB8fFxuICAgIG1lbWJlcnNbZmllbGROb2Rlcy5sZW5ndGhdICE9IGNvbnN0cnVjdG9yTm9kZXNbMF0gfHxcbiAgICBtZW1iZXJzLnNsaWNlKGZpZWxkTm9kZXMubGVuZ3RoICsgMSkuc29tZSgobWVtYmVyKSA9PiBtZW1iZXIubmFtZSAhPSBcIk1ldGhvZERlY2xhcmF0aW9uXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWZlcmVuY2UgY2xhc3MgZGVjbGFyYXRpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgZGVjbGFyYXRpb24uZmllbGRzID0gZmllbGROb2Rlcy5tYXAoKGZpZWxkTm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBmaWVsZExvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGZpZWxkTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBmaWVsZE1vZGlmaWVycyA9IGZpZWxkTm9kZS5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICAgIGNvbnN0IG5hbWVzID0gZmllbGRNb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oZmllbGRNb2RpZmllcnMpLm1hcCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLm5hbWUpIDogW11cbiAgICBjb25zdCB2YXJpYWJsZU5vZGVzID0gZmllbGROb2RlLmdldENoaWxkcmVuKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpXG4gICAgY29uc3QgdmFyaWFibGUgPSB2YXJpYWJsZU5vZGVzWzBdXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHZhcmlhYmxlID8gdmFyaWFibGUuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpIDogbnVsbFxuXG4gICAgaWYgKG5hbWVzLmpvaW4oXCIgXCIpICE9IFwicHJpdmF0ZVwiIHx8IHZhcmlhYmxlTm9kZXMubGVuZ3RoICE9IDEgfHwgIWRlZmluaXRpb24gfHxcbiAgICAgIHN0cnVjdHVyYWxDaGlsZHJlbih2YXJpYWJsZSkubGVuZ3RoICE9IDEgfHwgZmllbGROb2RlLmdldENoaWxkKFwiRGltZW5zaW9uXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibm9uY2Fub25pY2FsIHByaXZhdGUgaW5zdGFuY2UgZmllbGRcIiwgZmllbGRMb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmZpZWxkOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sIG5hbWUsXG4gICAgICB0eXBlOiBjb252ZXJ0VHlwZShkZWNsYXJhdGlvblR5cGUoZmllbGROb2RlKSwgYFByaXZhdGUgZmllbGQgJyR7bmFtZX0nYCwgZmllbGRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKX0sXG4gICAge25hbWU6IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IGNvbnN0cnVjdG9yTm9kZXNbMF1cbiAgY29uc3QgY29uc3RydWN0b3JTaWduYXR1cmUgPSBjb252ZXJ0SmF2YUNsYXNzQ2FsbGFibGVTaWduYXR1cmUoY29uc3RydWN0b3JOb2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCB0cnVlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yID0gd2l0aFBhcnNlclJhbmdlcyh7Ym9keTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKHt9KSxcbiAgICBpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmNvbnN0cnVjdG9yYCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbjogY29uc3RydWN0b3JTaWduYXR1cmUubG9jYXRpb24sIHBhcmFtZXRlcnM6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLnBhcmFtZXRlcnN9LCB7Y29uc3RydWN0b3I6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG4gIGNvbnN0IG1ldGhvZFNpZ25hdHVyZXMgPSBtZXRob2ROb2Rlcy5tYXAoKG1ldGhvZCkgPT5cbiAgICBjb252ZXJ0SmF2YUNsYXNzQ2FsbGFibGVTaWduYXR1cmUobWV0aG9kLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCBmYWxzZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgZGVjbGFyYXRpb24ubWV0aG9kcyA9IG1ldGhvZFNpZ25hdHVyZXMubWFwKChzaWduYXR1cmUsIGluZGV4KSA9PiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoe30pLCBpZDogYCR7ZGVjbGFyYXRpb24uaWR9Om1ldGhvZDoke2luZGV4fWAsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWV0aG9kRGVjbGFyYXRpb25cIiksIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9ICovIChzaWduYXR1cmUucmV0dXJuVHlwZSlcbiAgfSwge25hbWU6IHNpZ25hdHVyZS5uYW1lTG9jYXRpb259KSlcbiAgY29uc3QgYmFzZSA9IHtiaW5kaW5nczogbmV3IE1hcCgpLCBjbGFzc2VzLCBjdXJyZW50Q2xhc3M6IGRlY2xhcmF0aW9uLCBlcnJvck5hbWVzLCBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoKSwgZXJyb3JzLFxuICAgIGZ1bmN0aW9ucywgcmVjb3JkTmFtZXM6IG5vbWluYWxOYW1lcywgcmVjb3Jkc31cbiAgY29uc3QgY29uc3RydWN0b3JCb2R5ID0gcmVxdWlyZWRDaGlsZChjb25zdHJ1Y3Rvck5vZGUsIFwiQ29uc3RydWN0b3JCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSA9IGNvbnZlcnRCbG9jayhjb25zdHJ1Y3RvckJvZHksIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgey4uLmJhc2UsIGJpbmRpbmdzOiBuZXcgTWFwKGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLnR5cGVdKSksXG4gICAgICByZXR1cm5UeXBlOiB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVJlZmVyZW5jZVwiKSwgbmFtZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwidm9pZFwiKX19KVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWV0aG9kTm9kZXMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgbWV0aG9kID0gZGVjbGFyYXRpb24ubWV0aG9kc1tpbmRleF1cblxuICAgIG1ldGhvZC5ib2R5ID0gY29udmVydEJsb2NrKHJlcXVpcmVkQ2hpbGQobWV0aG9kTm9kZXNbaW5kZXhdLCBcIkJsb2NrXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgey4uLmJhc2UsIGJpbmRpbmdzOiBuZXcgTWFwKG1ldGhvZC5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLCByZXR1cm5UeXBlOiBtZXRob2QucmV0dXJuVHlwZX0pXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IG5vZGVMb2NhdGlvbihyZXF1aXJlZENoaWxkKG5vZGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBjb252ZW50aW9uYWwgZmluYWwgSmF2YSBjbGFzcyB3aXRoIGV4YWN0IHByaXZhdGUtZmluYWwgc3RvcmFnZSxcbiAqIGNvbnN0cnVjdG9yIGluaXRpYWxpemF0aW9uLCBhbmQgY2Fub25pY2FsIGZpZWxkLW5hbWUgYWNjZXNzb3JzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBDbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgbm9taW5hbCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIFJlY29yZHMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJvZ3JhbVJlY29yZF0gLSBXaGV0aGVyIHRoZSBjYW5vbmljYWwgcHJvamVjdCBwcm9maWxlIGFkbWl0cyBwdWJsaWMgb3IgcGFja2FnZS1wcml2YXRlIGNsYXNzIHZpc2liaWxpdHkuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IFNlbWFudGljIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFSZWNvcmQobm9kZSwgZGVjbGFyYXRpb24sIHJlY29yZE5hbWVzLCBmaWxlbmFtZSwgc291cmNlLCBwcm9ncmFtUmVjb3JkID0gZmFsc2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgdHlwZVBhcmFtZXRlck5hbWVzID0gbmV3IE1hcCgoZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuICBjb25zdCBtb2RpZmllcnMgPSBub2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG5cbiAgY29uc3QgbW9kaWZpZXJzVGV4dCA9IG1vZGlmaWVyTmFtZXMuam9pbihcIiBcIilcblxuICBpZiAoKHByb2dyYW1SZWNvcmQgPyAhW1wicHVibGljIGZpbmFsXCIsIFwiZmluYWxcIl0uaW5jbHVkZXMobW9kaWZpZXJzVGV4dCkgOiBtb2RpZmllcnNUZXh0ICE9IFwiZmluYWxcIikgfHxcbiAgICBub2RlLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKSB8fCBub2RlLmdldENoaWxkKFwiU3VwZXJJbnRlcmZhY2VzXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY2xhc3MgbW9kaWZpZXJzXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGNsYXNzQm9keSA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJDbGFzc0JvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbWVtYmVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbihjbGFzc0JvZHkpXG4gIGNvbnN0IGZpZWxkcyA9IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiKVxuICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBtZW1iZXJzLmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIubmFtZSA9PSBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIilcbiAgY29uc3QgYWNjZXNzb3JzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJNZXRob2REZWNsYXJhdGlvblwiKVxuICBjb25zdCB1bnN1cHBvcnRlZCA9IG1lbWJlcnMuZmluZCgobWVtYmVyKSA9PiAhW1wiRmllbGREZWNsYXJhdGlvblwiLCBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIiwgXCJNZXRob2REZWNsYXJhdGlvblwiXS5pbmNsdWRlcyhtZW1iZXIubmFtZSkpXG5cbiAgaWYgKHVuc3VwcG9ydGVkIHx8IGNvbnN0cnVjdG9ycy5sZW5ndGggIT0gMSB8fCBhY2Nlc3NvcnMubGVuZ3RoICE9IGZpZWxkcy5sZW5ndGggfHxcbiAgICBtZW1iZXJzLnNsaWNlKDAsIGZpZWxkcy5sZW5ndGgpLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgIT0gXCJGaWVsZERlY2xhcmF0aW9uXCIpIHx8IG1lbWJlcnNbZmllbGRzLmxlbmd0aF0gIT0gY29uc3RydWN0b3JzWzBdIHx8XG4gICAgbWVtYmVycy5zbGljZShmaWVsZHMubGVuZ3RoICsgMSkuc29tZSgobWVtYmVyKSA9PiBtZW1iZXIubmFtZSAhPSBcIk1ldGhvZERlY2xhcmF0aW9uXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInJlY29yZCBjbGFzcyBtZW1iZXIgb3JkZXIgb3Igc2hhcGVcIiwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkID8/IG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGRlY2xhcmF0aW9uLmZpZWxkcyA9IGZpZWxkcy5tYXAoKGZpZWxkTm9kZSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkTG9jYXRpb24gPSBub2RlTG9jYXRpb24oZmllbGROb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGZpZWxkTW9kaWZpZXJzID0gZmllbGROb2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gICAgY29uc3QgbmFtZXMgPSBmaWVsZE1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihmaWVsZE1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkgOiBbXVxuICAgIGNvbnN0IHZhcmlhYmxlID0gcmVxdWlyZWRDaGlsZChmaWVsZE5vZGUsIFwiVmFyaWFibGVEZWNsYXJhdG9yXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHJlcXVpcmVkQ2hpbGQodmFyaWFibGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHZhcmlhYmxlQ2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4odmFyaWFibGUpXG5cbiAgICBpZiAobmFtZXMuam9pbihcIiBcIikgIT0gXCJwcml2YXRlIGZpbmFsXCIgfHwgdmFyaWFibGVDaGlsZHJlbi5sZW5ndGggIT0gMSB8fCBmaWVsZE5vZGUuZ2V0Q2hpbGQoXCJEaW1lbnNpb25cIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJyZWNvcmQgZmllbGQgb3V0c2lkZSBwcml2YXRlIGZpbmFsIHN0b3JhZ2UgcHJvZmlsZVwiLCBmaWVsZExvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZEZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sXG4gICAgICBuYW1lOiBub2RlVGV4dChkZWZpbml0aW9uLCBzb3VyY2UpLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyYXRpb25UeXBlKGZpZWxkTm9kZSksIGBSZWNvcmQgZmllbGQgJyR7bm9kZVRleHQoZGVmaW5pdGlvbiwgc291cmNlKX0nYCwgZmllbGRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhmaWVsZCwge25hbWU6IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JzWzBdXG4gIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IHJlcXVpcmVkQ2hpbGQoY29uc3RydWN0b3IsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IHJlcXVpcmVkQ2hpbGQoY29uc3RydWN0b3IsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJzID0gc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcnNOb2RlKVxuICBjb25zdCBib2R5ID0gcmVxdWlyZWRDaGlsZChjb25zdHJ1Y3RvciwgXCJDb25zdHJ1Y3RvckJvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXNzaWdubWVudHMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYm9keSlcblxuICBjb25zdCBjb25zdHJ1Y3Rvck1vZGlmaWVycyA9IGNvbnN0cnVjdG9yLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IGNvbnN0cnVjdG9yTW9kaWZpZXJOYW1lcyA9IGNvbnN0cnVjdG9yTW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKGNvbnN0cnVjdG9yTW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG5cbiAgaWYgKG5vZGVUZXh0KGNvbnN0cnVjdG9yTmFtZSwgc291cmNlKSAhPSBkZWNsYXJhdGlvbi5uYW1lIHx8XG4gICAgY29uc3RydWN0b3JNb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IChwcm9ncmFtUmVjb3JkID8gXCJwdWJsaWNcIiA6IFwiXCIpIHx8IGNvbnN0cnVjdG9yLmdldENoaWxkKFwiVGhyb3dzXCIpIHx8XG4gICAgY29uc3RydWN0b3IuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSB8fCBwYXJhbWV0ZXJzLmxlbmd0aCAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoIHx8IGFzc2lnbm1lbnRzLmxlbmd0aCAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY29uc3RydWN0b3JcIiwgbm9kZUxvY2F0aW9uKGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGVjbGFyYXRpb24uZmllbGRzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGZpZWxkID0gZGVjbGFyYXRpb24uZmllbGRzW2luZGV4XVxuICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlcnNbaW5kZXhdXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlcj8uZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gICAgY29uc3QgYXNzaWdubWVudCA9IGFzc2lnbm1lbnRzW2luZGV4XVxuICAgIGNvbnN0IGFzc2lnbm1lbnRFeHByZXNzaW9uID0gYXNzaWdubWVudD8uZ2V0Q2hpbGQoXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiKVxuICAgIGNvbnN0IGFzc2lnbm1lbnRDaGlsZHJlbiA9IGFzc2lnbm1lbnRFeHByZXNzaW9uID8gc3RydWN0dXJhbENoaWxkcmVuKGFzc2lnbm1lbnRFeHByZXNzaW9uKSA6IFtdXG4gICAgY29uc3QgZmllbGRBY2Nlc3MgPSBhc3NpZ25tZW50Q2hpbGRyZW5bMF1cbiAgICBjb25zdCBvcGVyYXRvciA9IGFzc2lnbm1lbnRDaGlsZHJlblsxXVxuICAgIGNvbnN0IHZhbHVlID0gYXNzaWdubWVudENoaWxkcmVuWzJdXG4gICAgY29uc3QgcGFyYW1ldGVyVHlwZSA9IHBhcmFtZXRlciA/IGNvbnZlcnRUeXBlKGRlY2xhcmF0aW9uVHlwZShwYXJhbWV0ZXIpLCBgUmVjb3JkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciAnJHtmaWVsZC5uYW1lfSdgLFxuICAgICAgbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSksIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAocGFyYW1ldGVyPy5uYW1lICE9IFwiRm9ybWFsUGFyYW1ldGVyXCIgfHwgIXBhcmFtZXRlck5hbWUgfHwgbm9kZVRleHQocGFyYW1ldGVyTmFtZSwgc291cmNlKSAhPSBmaWVsZC5uYW1lIHx8XG4gICAgICBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgfHwgcGFyYW1ldGVyLmdldENoaWxkKFwiRGltZW5zaW9uXCIpIHx8ICFwYXJhbWV0ZXJUeXBlIHx8ICFzYW1lVmFsdWVUeXBlKHBhcmFtZXRlclR5cGUsIGZpZWxkLnR5cGUpIHx8XG4gICAgICBhc3NpZ25tZW50Py5uYW1lICE9IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8IGFzc2lnbm1lbnRDaGlsZHJlbi5sZW5ndGggIT0gMyB8fCBmaWVsZEFjY2Vzcz8ubmFtZSAhPSBcIkZpZWxkQWNjZXNzXCIgfHxcbiAgICAgIG5vZGVUZXh0KGZpZWxkQWNjZXNzLCBzb3VyY2UpICE9IGB0aGlzLiR7ZmllbGQubmFtZX1gIHx8IG9wZXJhdG9yPy5uYW1lICE9IFwiQXNzaWduT3BcIiB8fCBub2RlVGV4dChvcGVyYXRvciwgc291cmNlKSAhPSBcIj1cIiB8fFxuICAgICAgdmFsdWU/Lm5hbWUgIT0gXCJJZGVudGlmaWVyXCIgfHwgbm9kZVRleHQodmFsdWUsIHNvdXJjZSkgIT0gZmllbGQubmFtZSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInJlY29yZCBmaWVsZCBub3QgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlXCIsIG5vZGVMb2NhdGlvbihhc3NpZ25tZW50ID8/IGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRlY2xhcmF0aW9uLmZpZWxkcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBmaWVsZCA9IGRlY2xhcmF0aW9uLmZpZWxkc1tpbmRleF1cbiAgICBjb25zdCBhY2Nlc3NvciA9IGFjY2Vzc29yc1tpbmRleF1cbiAgICBjb25zdCBuYW1lID0gcmVxdWlyZWRDaGlsZChhY2Nlc3NvciwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHJlcXVpcmVkQ2hpbGQoYWNjZXNzb3IsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGJsb2NrID0gcmVxdWlyZWRDaGlsZChhY2Nlc3NvciwgXCJCbG9ja1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHN0YXRlbWVudHMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYmxvY2spXG4gICAgY29uc3QgcmV0dXJuZWQgPSBzdGF0ZW1lbnRzWzBdPy5nZXRDaGlsZChcIkZpZWxkQWNjZXNzXCIpXG4gICAgY29uc3QgYWNjZXNzb3JUeXBlID0gY29udmVydFR5cGUoZGVjbGFyYXRpb25UeXBlKGFjY2Vzc29yKSwgYFJlY29yZCBhY2Nlc3NvciAnJHtmaWVsZC5uYW1lfSdgLFxuICAgICAgbm9kZUxvY2F0aW9uKGFjY2Vzc29yLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcblxuICAgIGNvbnN0IGFjY2Vzc29yTW9kaWZpZXJzID0gYWNjZXNzb3IuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgICBjb25zdCBhY2Nlc3Nvck1vZGlmaWVyTmFtZXMgPSBhY2Nlc3Nvck1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihhY2Nlc3Nvck1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkgOiBbXVxuXG4gICAgaWYgKGFjY2Vzc29yTW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSAocHJvZ3JhbVJlY29yZCA/IFwicHVibGljXCIgOiBcIlwiKSB8fCBhY2Nlc3Nvci5nZXRDaGlsZChcIlRocm93c1wiKSB8fCBhY2Nlc3Nvci5nZXRDaGlsZChcIlR5cGVQYXJhbWV0ZXJzXCIpIHx8XG4gICAgICBub2RlVGV4dChuYW1lLCBzb3VyY2UpICE9IGZpZWxkLm5hbWUgfHwgc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcnMpLmxlbmd0aCAhPSAwIHx8IHN0YXRlbWVudHMubGVuZ3RoICE9IDEgfHxcbiAgICAgIHN0YXRlbWVudHNbMF0ubmFtZSAhPSBcIlJldHVyblN0YXRlbWVudFwiIHx8ICFyZXR1cm5lZCB8fCBub2RlVGV4dChyZXR1cm5lZCwgc291cmNlKSAhPSBgdGhpcy4ke2ZpZWxkLm5hbWV9YCB8fFxuICAgICAgIXNhbWVWYWx1ZVR5cGUoYWNjZXNzb3JUeXBlLCBmaWVsZC50eXBlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgYWNjZXNzb3JcIiwgbm9kZUxvY2F0aW9uKGFjY2Vzc29yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IG5vZGVMb2NhdGlvbihyZXF1aXJlZENoaWxkKG5vZGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIERldGVjdHMgb25seSB0aGUgcGlubmVkIGdyYW1tYXIncyBwYXJzZXItYmFja2VkIHJlY292ZXJ5IHNoYXBlIGZvciBKYXZhIHJlY29yZCBzeW50YXguXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gcm9vdCAtIFByb2dyYW0gcm9vdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgdW5kZWZpbmVkfSBUaGUgcGFyc2VyLW93bmVkIGByZWNvcmRgIHR5cGUgdG9rZW4uXG4gKi9cbmZ1bmN0aW9uIGphdmFSZWNvcmRSZWNvdmVyeVRva2VuKHJvb3QsIHNvdXJjZSkge1xuICBjb25zdCBmaXJzdCA9IHN0cnVjdHVyYWxDaGlsZHJlbihyb290KVswXVxuICBjb25zdCB0eXBlID0gZmlyc3Q/Lm5hbWUgPT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIiA/IGZpcnN0LmdldENoaWxkKFwiVHlwZU5hbWVcIikgOiBudWxsXG5cbiAgcmV0dXJuIHR5cGUgJiYgbm9kZVRleHQodHlwZSwgc291cmNlKSA9PSBcInJlY29yZFwiID8gdHlwZSA6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBleGlzdGluZyBleGFjdCBKYXZhIGlmL2Vsc2UgdGVybWluYWwgd2l0aCByZXN0cmljdGVkIGJyYW5jaCBwcmVmaXhlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gSmF2YSBpZiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gU2VtYW50aWMgYnJhbmNoLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SWYobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjb25kaXRpb25Db250YWluZXIgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY29uZGl0aW9uTm9kZXMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY29uZGl0aW9uQ29udGFpbmVyKVxuICBjb25zdCBjb25kaXRpb24gPSBjb25kaXRpb25Ob2Rlcy5sZW5ndGggPT0gMSA/IGNvbmRpdGlvbk5vZGVzWzBdIDogdW5kZWZpbmVkXG4gIGNvbnN0IGRpcmVjdCA9IGRpcmVjdENoaWxkcmVuKG5vZGUpXG4gIGNvbnN0IGNvbmRpdGlvbkluZGV4ID0gZGlyZWN0LmZpbmRJbmRleCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gY29uZGl0aW9uQ29udGFpbmVyLm5hbWUgJiZcbiAgICBjaGlsZC5mcm9tID09IGNvbmRpdGlvbkNvbnRhaW5lci5mcm9tICYmIGNoaWxkLnRvID09IGNvbmRpdGlvbkNvbnRhaW5lci50bylcbiAgY29uc3QgY29uc2VxdWVudE5vZGUgPSBkaXJlY3RbY29uZGl0aW9uSW5kZXggKyAxXVxuICBjb25zdCBhbHRlcm5hdGVOb2RlID0gZGlyZWN0LmF0KC0xKSA9PSBjb25zZXF1ZW50Tm9kZSA/IHVuZGVmaW5lZCA6IGRpcmVjdC5hdCgtMSlcblxuICBpZiAoIWNvbmRpdGlvbiB8fCAhY29uc2VxdWVudE5vZGUgfHwgY29uc2VxdWVudE5vZGUubmFtZSAhPSBcIkJsb2NrXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiaWYgd2l0aG91dCBibG9jayBjb25zZXF1ZW50XCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3Qgc2VtYW50aWNDb25kaXRpb24gPSBjb252ZXJ0RXhwcmVzc2lvbihjb25kaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGxldCBhbHRlcm5hdGVcbiAgY29uc3QgY29uc2VxdWVudENvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyl9XG4gIGNvbnN0IGFsdGVybmF0ZUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyl9XG5cbiAgaWYgKGFsdGVybmF0ZU5vZGU/Lm5hbWUgPT0gXCJCbG9ja1wiKSB7XG4gICAgYWx0ZXJuYXRlID0gY29udmVydEJsb2NrKGFsdGVybmF0ZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGFsdGVybmF0ZUNvbnRleHQpXG4gIH0gZWxzZSBpZiAoYWx0ZXJuYXRlTm9kZT8ubmFtZSA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICBhbHRlcm5hdGUgPSB7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCbG9ja1wiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oYWx0ZXJuYXRlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBzdGF0ZW1lbnRzOiBbY29udmVydElmKGFsdGVybmF0ZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGFsdGVybmF0ZUNvbnRleHQpXVxuICAgIH1cbiAgfSBlbHNlIGlmIChhbHRlcm5hdGVOb2RlICYmIGFsdGVybmF0ZU5vZGUubmFtZSAhPSBcImVsc2VcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYGlmIGFsdGVybmF0ZSAke2FsdGVybmF0ZU5vZGUubmFtZX1gLCBub2RlTG9jYXRpb24oYWx0ZXJuYXRlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLihhbHRlcm5hdGUgPyB7YWx0ZXJuYXRlfSA6IHt9KSxcbiAgICBjb25kaXRpb246IHNlbWFudGljQ29uZGl0aW9uLFxuICAgIGNvbnNlcXVlbnQ6IGNvbnZlcnRCbG9jayhjb25zZXF1ZW50Tm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29uc2VxdWVudENvbnRleHQpLFxuICAgIGtpbmQ6IFwiSWZTdGF0ZW1lbnRcIixcbiAgICBsb2NhdGlvblxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IGJsb2NrLWJvZGllZCBKYXZhIHByZS1jb25kaXRpb24gbG9vcC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gSmF2YSBXaGlsZVN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLldoaWxlU3RhdGVtZW50fSBTZW1hbnRpYyBsb29wLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0V2hpbGUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBkaXJlY3QgPSBkaXJlY3RDaGlsZHJlbihub2RlKVxuICBjb25zdCBjb25kaXRpb25Db250YWluZXIgPSBub2RlLmdldENoaWxkKFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIilcbiAgY29uc3QgYm9keSA9IG5vZGUuZ2V0Q2hpbGQoXCJCbG9ja1wiKVxuICBjb25zdCBjb25kaXRpb25Ob2RlcyA9IGNvbmRpdGlvbkNvbnRhaW5lciA/IHN0cnVjdHVyYWxDaGlsZHJlbihjb25kaXRpb25Db250YWluZXIpIDogW11cblxuICBpZiAoZGlyZWN0Lmxlbmd0aCAhPSAzIHx8IGRpcmVjdFswXS5uYW1lICE9IFwid2hpbGVcIiB8fCBkaXJlY3RbMV0ubmFtZSAhPSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIgfHxcbiAgICBkaXJlY3RbMl0ubmFtZSAhPSBcIkJsb2NrXCIgfHwgIWNvbmRpdGlvbkNvbnRhaW5lciB8fCAhYm9keSB8fCBjb25kaXRpb25Ob2Rlcy5sZW5ndGggIT0gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ3aGlsZSB3aXRob3V0IGV4YWN0IGNvbmRpdGlvbiBhbmQgYmxvY2sgYm9keVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBib2R5Q29udGV4dCA9IHtcbiAgICAuLi5jb250ZXh0LFxuICAgIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpLFxuICAgIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcylcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiBjb252ZXJ0QmxvY2soYm9keSwgZmlsZW5hbWUsIHNvdXJjZSwgYm9keUNvbnRleHQpLFxuICAgIGNvbmRpdGlvbjogY29udmVydEV4cHJlc3Npb24oY29uZGl0aW9uTm9kZXNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIldoaWxlU3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHtrZXl3b3JkOiBub2RlTG9jYXRpb24oZGlyZWN0WzBdLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgSmF2YSdzIHN1cHBvcnRlZCBtYWluIG1ldGhvZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gTWFpbiBtZXRob2QuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBKYXZhRnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBNb2R1bGUgZnVuY3Rpb24gc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZCBkZWNsYXJhdGlvbnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gUmVmZXJlbmNlIGNsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVudHJ5UG9pbnR9IFNlbWFudGljIGVudHJ5IHBvaW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RW50cnlQb2ludChub2RlLCBmaWxlbmFtZSwgc291cmNlLCBmdW5jdGlvbnMsIHJlY29yZE5hbWVzLCByZWNvcmRzLCBjbGFzc2VzLCBlcnJvck5hbWVzLCBlcnJvcnMpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gbm9kZS5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICBjb25zdCBwYXJhbWV0ZXJzID0gbm9kZS5nZXRDaGlsZChcIkZvcm1hbFBhcmFtZXRlcnNcIilcbiAgY29uc3QgZGVmaW5pdGlvbiA9IG5vZGUuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gIGNvbnN0IHJldHVyblR5cGUgPSBub2RlLmdldENoaWxkKFwidm9pZFwiKVxuICBjb25zdCBtb2RpZmllck5hbWVzID0gbW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKG1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkgOiBbXVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHBhcmFtZXRlcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocGFyYW1ldGVycykgOiBbXVxuICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJOb2Rlc1swXVxuICBjb25zdCBwYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyPy5nZXRDaGlsZChcIkFycmF5VHlwZVwiKVxuICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcblxuICBpZiAobW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSBcInB1YmxpYyBzdGF0aWNcIiB8fCAhcGFyYW1ldGVycyB8fCBwYXJhbWV0ZXJOb2Rlcy5sZW5ndGggIT0gMSB8fFxuICAgIHBhcmFtZXRlcj8ubmFtZSAhPSBcIkZvcm1hbFBhcmFtZXRlclwiIHx8IG5vZGVUZXh0KHBhcmFtZXRlclR5cGUgPz8gbm9kZSwgc291cmNlKSAhPSBcIlN0cmluZ1tdXCIgfHxcbiAgICBub2RlVGV4dChwYXJhbWV0ZXJOYW1lID8/IG5vZGUsIHNvdXJjZSkgIT0gXCJhcmdzXCIgfHwgIWRlZmluaXRpb24gfHwgbm9kZVRleHQoZGVmaW5pdGlvbiwgc291cmNlKSAhPSBcIm1haW5cIiB8fCAhcmV0dXJuVHlwZSB8fFxuICAgIG5vZGUuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSB8fCBub2RlLmdldENoaWxkKFwiVGhyb3dzXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1haW4gbWV0aG9kIHNpZ25hdHVyZVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBibG9jayA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJCbG9ja1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBib2R5ID0gY29udmVydEJsb2NrKGJsb2NrLCBmaWxlbmFtZSwgc291cmNlLCB7XG4gICAgYmluZGluZ3M6IG5ldyBNYXAoKSxcbiAgICBjbGFzc2VzLFxuICAgIGVycm9yTmFtZXMsXG4gICAgZXJhc2VkQmluZGluZ05hbWVzOiBuZXcgU2V0KCksXG4gICAgZXJyb3JzLFxuICAgIGZ1bmN0aW9ucyxcbiAgICByZWNvcmROYW1lcyxcbiAgICByZWNvcmRzLFxuICAgIHJldHVyblR5cGU6IHVuZGVmaW5lZFxuICB9KVxuXG4gIHJldHVybiB7Ym9keSwga2luZDogXCJFbnRyeVBvaW50XCIsIGxvY2F0aW9ufVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBzdXBwb3J0ZWQgSmF2YSBwcmludCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gc3RhdGVtZW50IC0gRXhwcmVzc2lvbiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QcmludFN0YXRlbWVudH0gU2VtYW50aWMgcHJpbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQcmludChzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGNvbnN0IHByaW50SW52b2NhdGlvbiA9IHN0YXRlbWVudC5nZXRDaGlsZChcIk1ldGhvZEludm9jYXRpb25cIilcblxuICBpZiAoIXByaW50SW52b2NhdGlvbikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1haW4gd2l0aG91dCBTeXN0ZW0ub3V0LnByaW50bG5cIiwgbG9jYXRpb24pXG5cbiAgY29uc3QgZmllbGRBY2Nlc3MgPSBwcmludEludm9jYXRpb24uZ2V0Q2hpbGQoXCJGaWVsZEFjY2Vzc1wiKVxuICBjb25zdCBtZXRob2ROYW1lID0gcHJpbnRJbnZvY2F0aW9uLmdldENoaWxkKFwiTWV0aG9kTmFtZVwiKVxuXG4gIGlmICghZmllbGRBY2Nlc3MgfHwgIW1ldGhvZE5hbWUgfHwgbm9kZVRleHQoZmllbGRBY2Nlc3MsIHNvdXJjZSkgIT0gXCJTeXN0ZW0ub3V0XCIgfHwgbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSAhPSBcInByaW50bG5cIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWluIHdpdGhvdXQgU3lzdGVtLm91dC5wcmludGxuXCIsIG5vZGVMb2NhdGlvbihwcmludEludm9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgYXJndW1lbnRMaXN0ID0gcmVxdWlyZWRDaGlsZChwcmludEludm9jYXRpb24sIFwiQXJndW1lbnRMaXN0XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGFyZ3VtZW50c18gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KVxuXG4gIGlmIChhcmd1bWVudHNfLmxlbmd0aCAhPSAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInByaW50bG4gd2l0aG91dCBvbmUgc3VwcG9ydGVkIGFyZ3VtZW50XCIsIG5vZGVMb2NhdGlvbihhcmd1bWVudExpc3QsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgcHJpbnRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwcmludEludm9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgcmV0dXJuIHtleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSwga2luZDogXCJQcmludFN0YXRlbWVudFwiLCBsb2NhdGlvbjogcHJpbnRMb2NhdGlvbn1cbn1cblxuLyoqXG4gKiBQYXJzZXMgSmF2YSBpbnRvIHRoZSBzaGFyZWQgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gUGFyc2VyIGlucHV0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LmZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnNvdXJjZSAtIFNvdXJjZSB0ZXh0LlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gW2lucHV0LmNhcGFiaWxpdGllc10gLSBDb21waWxlci1hdXRob3JpemVkIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7e2lzRW50cnk6IGJvb2xlYW4sIGZ1bmN0aW9uczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHJlY29yZHM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgZXJyb3JzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59fSBbaW5wdXQucHJvZ3JhbV0gLSBSZXNvbHZlZCBwcm9ncmFtIGltcG9ydHMgYW5kIGVudHJ5IHJvbGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSmF2YSh7Y2FwYWJpbGl0aWVzID0gW10sIGZpbGVuYW1lLCBzb3VyY2UsIHByb2dyYW19KSB7XG4gIGNvbnN0IHRyZWUgPSBwYXJzZXIucGFyc2Uoc291cmNlKVxuICBjb25zdCBlcnJvciA9IGRlc2NlbmRhbnRzKHRyZWUudG9wTm9kZSwgXCLimqBcIilbMF1cblxuICBpZiAoZXJyb3IpIHtcbiAgICBjb25zdCByZWNvcmRUb2tlbiA9IGphdmFSZWNvcmRSZWNvdmVyeVRva2VuKHRyZWUudG9wTm9kZSwgc291cmNlKVxuXG4gICAgaWYgKHJlY29yZFRva2VuKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiSmF2YSByZWNvcmQgZGVjbGFyYXRpb24gdW5kZXIgdGhlIHBpbm5lZCBwYXJzZXJcIiwgbm9kZUxvY2F0aW9uKHJlY29yZFRva2VuLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiUEFSU0VfRVJST1JcIixcbiAgICAgIGxhbmd1YWdlOiBcImphdmFcIixcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZXJyb3IsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbWVzc2FnZTogXCJKYXZhIHBhcnNlciByZXBvcnRlZCBpbnZhbGlkIHN5bnRheC5cIlxuICAgIH0pXG4gIH1cblxuICBpZiAocHJvZ3JhbSkgcmV0dXJuIHBhcnNlSmF2YVByb2dyYW1Nb2R1bGUodHJlZS50b3BOb2RlLCBmaWxlbmFtZSwgc291cmNlLCBwcm9ncmFtLCBjYXBhYmlsaXRpZXMpXG5cbiAgY29uc3QgcHJvZ3JhbU1lbWJlcnMgPSB0YXNrMDM0SmF2YVByb2dyYW1NZW1iZXJzKHN0cnVjdHVyYWxDaGlsZHJlbih0cmVlLnRvcE5vZGUpLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNsYXNzRGVjbGFyYXRpb25zID0gcHJvZ3JhbU1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKVxuICBjb25zdCB1bmV4cGVjdGVkUHJvZ3JhbU1lbWJlciA9IHByb2dyYW1NZW1iZXJzLmZpbmQoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgIT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IG1haW5DbGFzc2VzID0gY2xhc3NEZWNsYXJhdGlvbnMuZmlsdGVyKChkZWNsYXJhdGlvbikgPT4gbm9kZVRleHQocmVxdWlyZWRDaGlsZChkZWNsYXJhdGlvbiwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpID09IFwiTWFpblwiKVxuICBjb25zdCBjbGFzc0RlY2xhcmF0aW9uID0gbWFpbkNsYXNzZXNbMF1cblxuICBpZiAoIWNsYXNzRGVjbGFyYXRpb24gfHwgbWFpbkNsYXNzZXMubGVuZ3RoICE9IDEgfHwgdW5leHBlY3RlZFByb2dyYW1NZW1iZXIgfHwgY2xhc3NEZWNsYXJhdGlvbnMuYXQoLTEpICE9IGNsYXNzRGVjbGFyYXRpb24pIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiY29tcGlsYXRpb24gdW5pdCBvdGhlciB0aGFuIHJlY29yZCBjbGFzc2VzIGZvbGxvd2VkIGJ5IG9uZSBNYWluIGNsYXNzXCIsXG4gICAgICBub2RlTG9jYXRpb24odW5leHBlY3RlZFByb2dyYW1NZW1iZXIgPz8gdHJlZS50b3BOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBjbGFzc05hbWUgPSByZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjbGFzc01vZGlmaWVycyA9IGNsYXNzRGVjbGFyYXRpb24uZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgY2xhc3NNb2RpZmllck5hbWVzID0gY2xhc3NNb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY2xhc3NNb2RpZmllcnMpLm1hcCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLm5hbWUpIDogW11cblxuICBpZiAobm9kZVRleHQoY2xhc3NOYW1lLCBzb3VyY2UpICE9IFwiTWFpblwiIHx8IGNsYXNzTW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSBcInB1YmxpYyBmaW5hbFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInB1YmxpYyBmaW5hbCBNYWluIGNsYXNzXCIsIG5vZGVMb2NhdGlvbihjbGFzc0RlY2xhcmF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBjbGFzc0JvZHkgPSByZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1lbWJlcnMgPSB0YXNrMDM0SmF2YU1haW5NZW1iZXJzKHN0cnVjdHVyYWxDaGlsZHJlbihjbGFzc0JvZHkpLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHVuc3VwcG9ydGVkTWVtYmVyID0gbWVtYmVycy5maW5kKChtZW1iZXIpID0+IG1lbWJlci5uYW1lICE9IFwiTWV0aG9kRGVjbGFyYXRpb25cIilcblxuICBpZiAodW5zdXBwb3J0ZWRNZW1iZXIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgdW5zdXBwb3J0ZWRNZW1iZXIubmFtZSwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkTWVtYmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgbWV0aG9kcyA9IG1lbWJlcnNcbiAgY29uc3QgbWFpbk1ldGhvZHMgPSBtZXRob2RzLmZpbHRlcigobWV0aG9kKSA9PiBub2RlVGV4dChyZXF1aXJlZENoaWxkKG1ldGhvZCwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpID09IFwibWFpblwiKVxuICBjb25zdCBtYWluTWV0aG9kID0gbWFpbk1ldGhvZHNbMF1cbiAgY29uc3QgZnVuY3Rpb25NZXRob2RzID0gbWV0aG9kcy5maWx0ZXIoKG1ldGhvZCkgPT4gbWV0aG9kICE9IG1haW5NZXRob2QpXG4gIGNvbnN0IGxvY2F0aW9uID0gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoZnVuY3Rpb25NZXRob2RzLmxlbmd0aCA9PSAwKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiY2xhc3Mgd2l0aG91dCBhIHNlbWFudGljIGZ1bmN0aW9uXCIsIGxvY2F0aW9uKVxuICBpZiAoIW1haW5NZXRob2QgfHwgbWFpbk1ldGhvZHMubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJjbGFzcyB3aXRob3V0IG9uZSB1bmFtYmlndW91cyBtYWluXCIsIGxvY2F0aW9uKVxuXG4gIGNvbnN0IG5vbWluYWxOb2RlcyA9IGNsYXNzRGVjbGFyYXRpb25zLmZpbHRlcigoZGVjbGFyYXRpb24pID0+IGRlY2xhcmF0aW9uICE9IGNsYXNzRGVjbGFyYXRpb24pXG4gIGNvbnN0IGVycm9yTm9kZXMgPSBub21pbmFsTm9kZXMuZmlsdGVyKChkZWNsYXJhdGlvbikgPT4ge1xuICAgIGNvbnN0IHBhcmVudCA9IGRlY2xhcmF0aW9uLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKVxuICAgIHJldHVybiBwYXJlbnQgJiYgbm9kZVRleHQocGFyZW50LCBzb3VyY2UpID09IFwiZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uXCJcbiAgfSlcbiAgY29uc3QgcmVmZXJlbmNlQ2xhc3NOb2RlcyA9IG5vbWluYWxOb2Rlcy5maWx0ZXIoKGRlY2xhcmF0aW9uKSA9PiAhZXJyb3JOb2Rlcy5pbmNsdWRlcyhkZWNsYXJhdGlvbikgJiZcbiAgICBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocmVxdWlyZWRDaGlsZChkZWNsYXJhdGlvbiwgXCJDbGFzc0JvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSkpLnNvbWUoKG1lbWJlcikgPT5cbiAgICAgIG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiICYmIG5vZGVUZXh0KG1lbWJlci5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKSA/PyBtZW1iZXIsIHNvdXJjZSkgPT0gXCJwcml2YXRlXCIpKVxuICBjb25zdCByZWNvcmROb2RlcyA9IG5vbWluYWxOb2Rlcy5maWx0ZXIoKGRlY2xhcmF0aW9uKSA9PiAhZXJyb3JOb2Rlcy5pbmNsdWRlcyhkZWNsYXJhdGlvbikgJiYgIXJlZmVyZW5jZUNsYXNzTm9kZXMuaW5jbHVkZXMoZGVjbGFyYXRpb24pKVxuICBjb25zdCBlcnJvckRlY2xhcmF0aW9ucyA9IGVycm9yTm9kZXMubWFwKChlcnJvck5vZGUsIGluZGV4KSA9PiAoe1xuICAgIGlkOiBgZXJyb3I6JHtpbmRleH1gLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihlcnJvck5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5hbWU6IG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQoZXJyb3JOb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSlcbiAgfSkpXG4gIGNvbnN0IHJlY29yZERlY2xhcmF0aW9ucyA9IHJlY29yZE5vZGVzLm1hcCgocmVjb3JkTm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZCA9IGByZWNvcmQ6JHtpbmRleH1gXG4gICAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSBjb252ZXJ0SmF2YVR5cGVQYXJhbWV0ZXJzKHJlY29yZE5vZGUuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSwgaWQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4ge1xuICAgICAgZmllbGRzOiBbXSxcbiAgICAgIGlkLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHJlY29yZE5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbmFtZTogbm9kZVRleHQocmVxdWlyZWRDaGlsZChyZWNvcmROb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSksXG4gICAgICAuLi4odHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnN9IDoge30pXG4gICAgfVxuICB9KVxuICBjb25zdCByZWZlcmVuY2VEZWNsYXJhdGlvbnMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgoY2xhc3NOb2RlLCBpbmRleCkgPT4gKHtcbiAgICBjb25zdHJ1Y3RvcjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Db25zdHJ1Y3RvckRlY2xhcmF0aW9ufSAqLyAoe30pLCBmaWVsZHM6IFtdLCBpZDogYGNsYXNzOiR7aW5kZXh9YCxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDbGFzc0RlY2xhcmF0aW9uXCIpLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNsYXNzTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIG1ldGhvZHM6IFtdLFxuICAgIG5hbWU6IG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQoY2xhc3NOb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSlcbiAgfSkpXG4gIGNvbnN0IHJlY29yZE5hbWVzID0gLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gKi8gKFxuICAgIG5ldyBNYXAocmVjb3JkRGVjbGFyYXRpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb25dKSkpKVxuICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7cmVzb3VyY2VzfSkgPT4gcmVzb3VyY2VzKSkgcmVjb3JkTmFtZXMuc2V0KHJlc291cmNlLm5hbWUsIHJlc291cmNlKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHJlZmVyZW5jZURlY2xhcmF0aW9ucykgcmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSAqL1xuICBjb25zdCBlcnJvck5hbWVzID0gbmV3IE1hcChlcnJvckRlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiAvKiogQHR5cGUge2NvbnN0fSAqLyAoW2RlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uXSkpKVxuICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgY2FwYWJpbGl0aWVzLmZsYXRNYXAoKHtmYWlsdXJlc30pID0+IGZhaWx1cmVzKSkge1xuICAgIGVycm9yTmFtZXMuc2V0KGZhaWx1cmUubmFtZSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoZmFpbHVyZSkpKVxuICB9XG4gIGNvbnN0IGVycm9yc0J5SWQgPSBuZXcgTWFwKFsuLi5lcnJvck5hbWVzLnZhbHVlcygpXS5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGVycm9ycyA9IGVycm9yTm9kZXMubWFwKChlcnJvck5vZGUsIGluZGV4KSA9PiBjb252ZXJ0SmF2YUVycm9yKGVycm9yTm9kZSwgZXJyb3JEZWNsYXJhdGlvbnNbaW5kZXhdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgcmVjb3Jkc0J5SWQgPSBuZXcgTWFwKHJlY29yZERlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGNsYXNzZXNCeUlkID0gbmV3IE1hcChyZWZlcmVuY2VEZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBkZWNsYXJhdGlvbl0pKVxuICBjb25zdCByZWNvcmRzID0gcmVjb3JkTm9kZXMubWFwKChyZWNvcmROb2RlLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0SmF2YVJlY29yZChyZWNvcmROb2RlLCByZWNvcmREZWNsYXJhdGlvbnNbaW5kZXhdLFxuICAgICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChyZWNvcmROYW1lcykpLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc2lnbmF0dXJlcyA9IGZ1bmN0aW9uTWV0aG9kcy5tYXAoKG1ldGhvZCwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG1ldGhvZCwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIGZhbHNlLCBgZnVuY3Rpb246JHtpbmRleH1gLCByZWZlcmVuY2VEZWNsYXJhdGlvbnMubGVuZ3RoID4gMCkpXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgSmF2YUZ1bmN0aW9uU2lnbmF0dXJlPn0gKi9cbiAgY29uc3QgZnVuY3Rpb25TaWduYXR1cmVzID0gbmV3IE1hcChjYXBhYmlsaXR5RnVuY3Rpb25TaWduYXR1cmVzKGNhcGFiaWxpdGllcywgbG9jYXRpb24pKVxuICBmb3IgKGNvbnN0IHNpZ25hdHVyZSBvZiBzaWduYXR1cmVzKSBmdW5jdGlvblNpZ25hdHVyZXMuc2V0KHNpZ25hdHVyZS5uYW1lLCBzaWduYXR1cmUpXG4gIGNvbnN0IGNsYXNzZXMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgoY2xhc3NOb2RlLCBpbmRleCkgPT4gY29udmVydEphdmFSZWZlcmVuY2VDbGFzcyhjbGFzc05vZGUsIHJlZmVyZW5jZURlY2xhcmF0aW9uc1tpbmRleF0sXG4gICAgcmVjb3JkTmFtZXMsIHJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCwgZnVuY3Rpb25TaWduYXR1cmVzLCBlcnJvck5hbWVzLCBlcnJvcnNCeUlkLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZnVuY3Rpb25zID0gZnVuY3Rpb25NZXRob2RzLm1hcCgobWV0aG9kLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb24obWV0aG9kLCBzaWduYXR1cmVzW2luZGV4XSwgZnVuY3Rpb25TaWduYXR1cmVzLCByZWNvcmROYW1lcywgcmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLFxuICAgICAgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBjb252ZXJ0RW50cnlQb2ludChtYWluTWV0aG9kLCBmaWxlbmFtZSwgc291cmNlLCBmdW5jdGlvblNpZ25hdHVyZXMsIHJlY29yZE5hbWVzLCByZWNvcmRzQnlJZCxcbiAgICBjbGFzc2VzQnlJZCwgZXJyb3JOYW1lcywgZXJyb3JzQnlJZClcblxuICByZXR1cm4ge2VudHJ5UG9pbnQsIGZ1bmN0aW9ucywga2luZDogXCJNb2R1bGVcIiwgbG9jYXRpb24sIC4uLihlcnJvcnMubGVuZ3RoID4gMCA/IHtlcnJvcnN9IDoge30pLFxuICAgIC4uLihjbGFzc2VzLmxlbmd0aCA+IDAgPyB7Y2xhc3Nlc30gOiB7fSksIC4uLihyZWNvcmRzLmxlbmd0aCA+IDAgPyB7cmVjb3Jkc30gOiB7fSl9XG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgZXhhY3QgcHJvdGVjdGVkIHRvcC1sZXZlbCBzdXBwb3J0IGVtaXR0ZWQgZm9yIHRoZSBidWlsdC1pbiBwcm9iZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IG1lbWJlcnMgLSBQYXJzZWQgcHJvZ3JhbSBtZW1iZXJzLlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gY2FwYWJpbGl0aWVzIC0gQXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZVtdfSBQb3J0YWJsZSBwcm9ncmFtIG1lbWJlcnMuXG4gKi9cbmZ1bmN0aW9uIHRhc2swMzRKYXZhUHJvZ3JhbU1lbWJlcnMobWVtYmVycywgY2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghaXNUYXNrMDM0UmVzb3VyY2VQcm9iZShjYXBhYmlsaXRpZXMpIHx8IG5vZGVUZXh0KG1lbWJlcnNbMF0sIHNvdXJjZSkgIT0gXCIvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnRcIikgcmV0dXJuIG1lbWJlcnNcbiAgaWYgKCFoYXNFeGFjdEVmZmVjdFN1cHBvcnQoc291cmNlLCBcImphdmFcIiwgXCJ0b3BcIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCB0b3AtbGV2ZWwgc3VwcG9ydFwiLCBub2RlTG9jYXRpb24obWVtYmVyc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgbmFtZXMgPSBbXCJQcm9iZU9wZXJhdGlvbkZhaWx1cmVcIiwgXCJQcm9iZUFjcXVpcmVGYWlsdXJlXCIsIFwiUHJvYmVSZWFkRmFpbHVyZVwiLCBcIlByb2JlQ2xvc2VGYWlsdXJlXCIsXG4gICAgXCJQcm9iZVJlc291cmNlQ2xvc2VkXCIsIFwiUHJvYmVSZXNvdXJjZVwiXVxuICBjb25zdCBtYXRjaGVzID0gbmFtZXMuZXZlcnkoKG5hbWUsIGluZGV4KSA9PiBtZW1iZXJzW2luZGV4ICsgMV0/Lm5hbWUgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIgJiZcbiAgICBub2RlVGV4dChyZXF1aXJlZENoaWxkKG1lbWJlcnNbaW5kZXggKyAxXSwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpID09IG5hbWUpXG5cbiAgaWYgKCFtYXRjaGVzIHx8IG5vZGVUZXh0KG1lbWJlcnNbbmFtZXMubGVuZ3RoICsgMV0sIHNvdXJjZSkgIT0gXCIvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtdG9wLWVuZFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hbGZvcm1lZCBwcm90ZWN0ZWQgVGFzayAwMzQgdG9wLWxldmVsIHN1cHBvcnRcIiwgbm9kZUxvY2F0aW9uKG1lbWJlcnNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIHJldHVybiBtZW1iZXJzLnNsaWNlKG5hbWVzLmxlbmd0aCArIDIpXG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgZXhhY3QgcHJvdGVjdGVkIE1haW4tbWVtYmVyIHN1cHBvcnQgZW1pdHRlZCBmb3IgdGhlIGJ1aWx0LWluIHByb2JlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGVbXX0gbWVtYmVycyAtIFBhcnNlZCBNYWluIG1lbWJlcnMuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdENhcGFiaWxpdHlEZWNsYXJhdGlvbltdfSBjYXBhYmlsaXRpZXMgLSBBdXRob3JpemVkIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IFBvcnRhYmxlIE1haW4gbWVtYmVycy5cbiAqL1xuZnVuY3Rpb24gdGFzazAzNEphdmFNYWluTWVtYmVycyhtZW1iZXJzLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKCFpc1Rhc2swMzRSZXNvdXJjZVByb2JlKGNhcGFiaWxpdGllcykgfHwgbm9kZVRleHQobWVtYmVyc1swXSwgc291cmNlKSAhPSBcIi8vIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC1tZW1iZXJzXCIpIHJldHVybiBtZW1iZXJzXG4gIGlmICghaGFzRXhhY3RFZmZlY3RTdXBwb3J0KHNvdXJjZSwgXCJqYXZhXCIsIFwibWVtYmVyc1wiKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IG1lbWJlciBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihtZW1iZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBleHBlY3RlZCA9IFtcbiAgICBbXCJGaWVsZERlY2xhcmF0aW9uXCIsIFwiX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZVwiXSwgW1wiTWV0aG9kRGVjbGFyYXRpb25cIiwgXCJwcm9iZUVmZmVjdFwiXSxcbiAgICBbXCJNZXRob2REZWNsYXJhdGlvblwiLCBcInByb2JlQWNxdWlyZVwiXSwgW1wiTWV0aG9kRGVjbGFyYXRpb25cIiwgXCJwcm9iZVJlYWRcIl0sXG4gICAgW1wiTWV0aG9kRGVjbGFyYXRpb25cIiwgXCJwcm9iZUNsb3NlXCJdLCBbXCJNZXRob2REZWNsYXJhdGlvblwiLCBcInByb2JlVHJhY2VcIl1cbiAgXVxuICBjb25zdCBtYXRjaGVzID0gZXhwZWN0ZWQuZXZlcnkoKFtraW5kLCBuYW1lXSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBtZW1iZXIgPSBtZW1iZXJzW2luZGV4ICsgMV1cbiAgICBpZiAobWVtYmVyPy5uYW1lICE9IGtpbmQpIHJldHVybiBmYWxzZVxuICAgIGlmIChraW5kID09IFwiRmllbGREZWNsYXJhdGlvblwiKSByZXR1cm4gbm9kZVRleHQobWVtYmVyLCBzb3VyY2UpLmluY2x1ZGVzKGAgJHtuYW1lfSA9YClcbiAgICByZXR1cm4gbm9kZVRleHQocmVxdWlyZWRDaGlsZChtZW1iZXIsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlKSA9PSBuYW1lXG4gIH0pXG5cbiAgaWYgKCFtYXRjaGVzIHx8IG5vZGVUZXh0KG1lbWJlcnNbZXhwZWN0ZWQubGVuZ3RoICsgMV0sIHNvdXJjZSkgIT0gXCIvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtbWVtYmVycy1lbmRcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IG1lbWJlciBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihtZW1iZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICByZXR1cm4gbWVtYmVycy5zbGljZShleHBlY3RlZC5sZW5ndGggKyAyKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBhbHJlYWR5LXF1YWxpZmllZCBjYW5vbmljYWwgSmF2YSBjb21waWxhdGlvbiB1bml0LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IHJvb3QgLSBFcnJvci1mcmVlIFByb2dyYW0gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEBwYXJhbSB7e2lzRW50cnk6IGJvb2xlYW4sIGZ1bmN0aW9uczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHJlY29yZHM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgZXJyb3JzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59fSBwcm9ncmFtIC0gUmVzb2x2ZWQgcHJvZ3JhbSBpbXBvcnRzIGFuZCBlbnRyeSByb2xlLlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gY2FwYWJpbGl0aWVzIC0gQ29tcGlsZXItYXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VKYXZhUHJvZ3JhbU1vZHVsZShyb290LCBmaWxlbmFtZSwgc291cmNlLCBwcm9ncmFtLCBjYXBhYmlsaXRpZXMpIHtcbiAgaW5zcGVjdEphdmFNb2R1bGUoe2ZpbGVuYW1lLCBzb3VyY2V9KVxuICBjb25zdCBjbGFzc0RlY2xhcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9ICovIChzdHJ1Y3R1cmFsQ2hpbGRyZW4ocm9vdCkuZmluZCgobm9kZSkgPT4gbm9kZS5uYW1lID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKSlcbiAgY29uc3QgY2xhc3NNb2RpZmllcnMgPSBjbGFzc0RlY2xhcmF0aW9uLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IGNsYXNzTW9kaWZpZXJOYW1lcyA9IGNsYXNzTW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKGNsYXNzTW9kaWZpZXJzKS5tYXAoKHtuYW1lfSkgPT4gbmFtZSkgOiBbXVxuICBjb25zdCBjbGFzc0JvZHkgPSByZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1lbWJlcnMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY2xhc3NCb2R5KVxuICBjb25zdCBtYWluTWV0aG9kcyA9IG1lbWJlcnMuZmlsdGVyKChtZXRob2QpID0+IG1ldGhvZC5uYW1lID09IFwiTWV0aG9kRGVjbGFyYXRpb25cIiAmJlxuICAgIG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQobWV0aG9kLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSkgPT0gXCJtYWluXCIpXG4gIGNvbnN0IHN1cGVyY2xhc3MgPSBjbGFzc0RlY2xhcmF0aW9uLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKVxuICBjb25zdCBpc0Vycm9yID0gQm9vbGVhbihzdXBlcmNsYXNzICYmIG5vZGVUZXh0KHN1cGVyY2xhc3MsIHNvdXJjZSkgPT0gXCJleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb25cIilcbiAgY29uc3QgaXNSZWNvcmQgPSAhaXNFcnJvciAmJiBtZW1iZXJzLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJGaWVsZERlY2xhcmF0aW9uXCIgfHwgbWVtYmVyLm5hbWUgPT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGxvY2F0aW9uID0gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAocHJvZ3JhbS5pc0VudHJ5ICYmIGNsYXNzTW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSBcInB1YmxpYyBmaW5hbFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInNlbGVjdGVkIGVudHJ5IGNsYXNzIHdpdGhvdXQgcHVibGljIGZpbmFsIHZpc2liaWxpdHlcIiwgbm9kZUxvY2F0aW9uKGNsYXNzRGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGlmIChwcm9ncmFtLmlzRW50cnkgJiYgbWFpbk1ldGhvZHMubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJzZWxlY3RlZCBlbnRyeSBjbGFzcyB3aXRob3V0IG9uZSBtYWluIG1ldGhvZFwiLCBsb2NhdGlvbilcbiAgaWYgKCFwcm9ncmFtLmlzRW50cnkgJiYgbWFpbk1ldGhvZHMubGVuZ3RoID4gMCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1haW4gbWV0aG9kIG91dHNpZGUgdGhlIHNlbGVjdGVkIGVudHJ5IG1vZHVsZVwiLCBub2RlTG9jYXRpb24obWFpbk1ldGhvZHNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBpZiAoKGlzUmVjb3JkIHx8IGlzRXJyb3IpICYmIG1haW5NZXRob2RzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibm9taW5hbCBjbGFzcyBjb250YWluaW5nIG1haW5cIiwgbm9kZUxvY2F0aW9uKGNsYXNzRGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgZXJyb3JEZWNsYXJhdGlvbnMgPSBpc0Vycm9yID8gW3tcbiAgICBpZDogXCJlcnJvcjowXCIsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNsYXNzRGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5hbWU6IG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQoY2xhc3NEZWNsYXJhdGlvbiwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpXG4gIH1dIDogW11cblxuICBjb25zdCByZWNvcmRUeXBlUGFyYW1ldGVycyA9IGlzUmVjb3JkXG4gICAgPyBjb252ZXJ0SmF2YVR5cGVQYXJhbWV0ZXJzKGNsYXNzRGVjbGFyYXRpb24uZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSwgXCJyZWNvcmQ6MFwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHJlY29yZERlY2xhcmF0aW9ucyA9IGlzUmVjb3JkID8gW3tcbiAgICBmaWVsZHM6IFtdLFxuICAgIGlkOiBcInJlY29yZDowXCIsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihjbGFzc0RlY2xhcmF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBuYW1lOiBub2RlVGV4dChyZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlKSxcbiAgICAuLi4ocmVjb3JkVHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHJlY29yZFR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XSA6IFtdXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gKi9cbiAgY29uc3QgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKHByb2dyYW0ucmVjb3JkcylcbiAgY29uc3QgZXJyb3JOYW1lcyA9IG5ldyBNYXAocHJvZ3JhbS5lcnJvcnMgPz8gW10pXG5cbiAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBjYXBhYmlsaXRpZXMuZmxhdE1hcCgoe3Jlc291cmNlc30pID0+IHJlc291cmNlcykpIHJlY29yZE5hbWVzLnNldChyZXNvdXJjZS5uYW1lLCByZXNvdXJjZSlcbiAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7ZmFpbHVyZXN9KSA9PiBmYWlsdXJlcykpIHtcbiAgICBlcnJvck5hbWVzLnNldChmYWlsdXJlLm5hbWUsIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGZhaWx1cmUpKSlcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHJlY29yZERlY2xhcmF0aW9ucykgcmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGVycm9yRGVjbGFyYXRpb25zKSBlcnJvck5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgY29uc3QgZXJyb3JzQnlJZCA9IG5ldyBNYXAoWy4uLmVycm9yTmFtZXMudmFsdWVzKCldLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgZXJyb3JzID0gZXJyb3JEZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gY29udmVydEphdmFFcnJvcihjbGFzc0RlY2xhcmF0aW9uLCBkZWNsYXJhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgdHJ1ZSkpXG4gIGNvbnN0IHJlY29yZHNCeUlkID0gbmV3IE1hcChbLi4ucHJvZ3JhbS5yZWNvcmRzLnZhbHVlcygpLCAuLi5yZWNvcmREZWNsYXJhdGlvbnNdXG4gICAgLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgY2xhc3Nlc0J5SWQgPSBuZXcgTWFwKClcbiAgY29uc3QgcmVjb3JkcyA9IHJlY29yZERlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PlxuICAgIGNvbnZlcnRKYXZhUmVjb3JkKGNsYXNzRGVjbGFyYXRpb24sIGRlY2xhcmF0aW9uLFxuICAgICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChyZWNvcmROYW1lcykpLFxuICAgICAgZmlsZW5hbWUsIHNvdXJjZSwgdHJ1ZSkpXG4gIGNvbnN0IGZ1bmN0aW9uTWV0aG9kcyA9IGlzUmVjb3JkIHx8IGlzRXJyb3IgPyBbXSA6IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiTWV0aG9kRGVjbGFyYXRpb25cIiAmJiAhbWFpbk1ldGhvZHMuaW5jbHVkZXMobWVtYmVyKSlcbiAgY29uc3Qgc2lnbmF0dXJlcyA9IGZ1bmN0aW9uTWV0aG9kcy5tYXAoKG1ldGhvZCwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG1ldGhvZCwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHRydWUsIGBmdW5jdGlvbjoke2luZGV4fWApKVxuICAvKiogQHR5cGUge1tzdHJpbmcsIEphdmFGdW5jdGlvblNpZ25hdHVyZV1bXX0gKi9cbiAgY29uc3QgaW1wb3J0ZWRGdW5jdGlvblNpZ25hdHVyZXMgPSBbLi4ucHJvZ3JhbS5mdW5jdGlvbnNdLm1hcCgoW2xvY2FsTmFtZSwgZGVjbGFyYXRpb25dKSA9PiBbbG9jYWxOYW1lLCB7XG4gICAgbG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIG5hbWU6IGxvY2FsTmFtZSxcbiAgICBuYW1lTG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIHBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogZGVjbGFyYXRpb24ucmV0dXJuVHlwZSxcbiAgICAuLi4oZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XSlcbiAgY29uc3QgZnVuY3Rpb25TaWduYXR1cmVzID0gbmV3IE1hcChbLi4uY2FwYWJpbGl0eUZ1bmN0aW9uU2lnbmF0dXJlcyhjYXBhYmlsaXRpZXMsIGxvY2F0aW9uKSwgLi4uaW1wb3J0ZWRGdW5jdGlvblNpZ25hdHVyZXNdKVxuXG4gIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHNpZ25hdHVyZXMpIGZ1bmN0aW9uU2lnbmF0dXJlcy5zZXQoc2lnbmF0dXJlLm5hbWUsIHNpZ25hdHVyZSlcbiAgY29uc3QgZnVuY3Rpb25zID0gZnVuY3Rpb25NZXRob2RzLm1hcCgobWV0aG9kLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb24obWV0aG9kLCBzaWduYXR1cmVzW2luZGV4XSwgZnVuY3Rpb25TaWduYXR1cmVzLCByZWNvcmROYW1lcywgcmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLFxuICAgICAgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGVtcHR5QmxvY2sgPSB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQmxvY2tcIiksIGxvY2F0aW9uLCBzdGF0ZW1lbnRzOiBbXX1cbiAgY29uc3QgZW50cnlQb2ludCA9IHByb2dyYW0uaXNFbnRyeVxuICAgID8gY29udmVydEVudHJ5UG9pbnQobWFpbk1ldGhvZHNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGZ1bmN0aW9uU2lnbmF0dXJlcywgcmVjb3JkTmFtZXMsIHJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCxcbiAgICAgIGVycm9yTmFtZXMsIGVycm9yc0J5SWQpXG4gICAgOiB7Ym9keTogZW1wdHlCbG9jaywga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRW50cnlQb2ludFwiKSwgbG9jYXRpb259XG5cbiAgcmV0dXJuIHtcbiAgICBlbnRyeVBvaW50LFxuICAgIGZ1bmN0aW9ucyxcbiAgICBraW5kOiBcIk1vZHVsZVwiLFxuICAgIGxvY2F0aW9uLFxuICAgIC4uLihlcnJvcnMubGVuZ3RoID4gMCA/IHtlcnJvcnN9IDoge30pLFxuICAgIC4uLihyZWNvcmRzLmxlbmd0aCA+IDAgPyB7cmVjb3Jkc30gOiB7fSlcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIGRpcmVjdCBwYWNrYWdlL2ltcG9ydC9jbGFzcyBub2RlcyBmcm9tIHRoZSBwaW5uZWQgTGV6ZXIgZ3JhbW1hci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHt7aW1wb3J0czoge2ltcG9ydGVkTmFtZTogc3RyaW5nLCBsb2NhbE5hbWU6IHN0cmluZywgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lc3BhY2U6IHRydWUsIHBhdGhMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNwZWNpZmllcjogc3RyaW5nLCB0eXBlT25seTogZmFsc2V9W10sIGV4cG9ydHM6IHtleHBvcnRlZE5hbWU6IHN0cmluZywgbG9jYWxOYW1lOiBzdHJpbmcsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgdHlwZU9ubHk6IGZhbHNlfVtdLCBuYXRpdmVOYW1lOiBzdHJpbmd9fSBQYXJzZXItb3duZWQgSmF2YSBtb2R1bGUgaGVhZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zcGVjdEphdmFNb2R1bGUoe2ZpbGVuYW1lLCBzb3VyY2V9KSB7XG4gIGNvbnN0IHRyZWUgPSBwYXJzZXIucGFyc2Uoc291cmNlKVxuICBjb25zdCBlcnJvciA9IGRlc2NlbmRhbnRzKHRyZWUudG9wTm9kZSwgXCLimqBcIilbMF1cblxuICBpZiAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiUEFSU0VfRVJST1JcIixcbiAgICAgIGxhbmd1YWdlOiBcImphdmFcIixcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZXJyb3IsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbWVzc2FnZTogXCJKYXZhIHBhcnNlciByZXBvcnRlZCBpbnZhbGlkIHN5bnRheC5cIlxuICAgIH0pXG4gIH1cbiAgY29uc3QgbWVtYmVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbih0cmVlLnRvcE5vZGUpXG4gIGNvbnN0IHBhY2thZ2VzID0gbWVtYmVycy5maWx0ZXIoKG5vZGUpID0+IG5vZGUubmFtZSA9PSBcIlBhY2thZ2VEZWNsYXJhdGlvblwiKVxuICBjb25zdCBpbXBvcnRzTm9kZXMgPSBtZW1iZXJzLmZpbHRlcigobm9kZSkgPT4gbm9kZS5uYW1lID09IFwiSW1wb3J0RGVjbGFyYXRpb25cIilcbiAgY29uc3QgY2xhc3NlcyA9IG1lbWJlcnMuZmlsdGVyKChub2RlKSA9PiBub2RlLm5hbWUgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGludmFsaWQgPSBtZW1iZXJzLmZpbmQoKG5vZGUpID0+ICFbXCJQYWNrYWdlRGVjbGFyYXRpb25cIiwgXCJJbXBvcnREZWNsYXJhdGlvblwiLCBcIkNsYXNzRGVjbGFyYXRpb25cIl0uaW5jbHVkZXMobm9kZS5uYW1lKSlcbiAgY29uc3QgcGFja2FnZU5vZGUgPSBwYWNrYWdlc1swXVxuICBjb25zdCBjbGFzc05vZGUgPSBjbGFzc2VzWzBdXG5cbiAgaWYgKCFwYWNrYWdlTm9kZSB8fCBwYWNrYWdlcy5sZW5ndGggIT0gMSB8fCAhY2xhc3NOb2RlIHx8IGNsYXNzZXMubGVuZ3RoICE9IDEgfHwgaW52YWxpZCB8fFxuICAgIG1lbWJlcnMuaW5kZXhPZihwYWNrYWdlTm9kZSkgIT0gMCB8fCBtZW1iZXJzLmluZGV4T2YoY2xhc3NOb2RlKSAhPSBtZW1iZXJzLmxlbmd0aCAtIDEpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib25lIHBhY2thZ2UgZm9sbG93ZWQgYnkgaW1wb3J0cyBhbmQgb25lIHB1YmxpYyBjbGFzc1wiLFxuICAgICAgbm9kZUxvY2F0aW9uKGludmFsaWQgPz8gcGFja2FnZXNbMV0gPz8gY2xhc3Nlc1sxXSA/PyB0cmVlLnRvcE5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHBhY2thZ2VOYW1lTm9kZSA9IHBhY2thZ2VOb2RlLmdldENoaWxkKFwiU2NvcGVkSWRlbnRpZmllclwiKSA/PyBwYWNrYWdlTm9kZS5nZXRDaGlsZChcIklkZW50aWZpZXJcIilcbiAgY29uc3QgY2xhc3NOYW1lTm9kZSA9IHJlcXVpcmVkQ2hpbGQoY2xhc3NOb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gY2xhc3NOb2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKHtuYW1lfSkgPT4gbmFtZSkgOiBbXVxuICBjb25zdCBwYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lTm9kZSA/IG5vZGVUZXh0KHBhY2thZ2VOYW1lTm9kZSwgc291cmNlKSA6IFwiXCJcbiAgY29uc3QgY2xhc3NOYW1lID0gbm9kZVRleHQoY2xhc3NOYW1lTm9kZSwgc291cmNlKVxuICBjb25zdCBleHBlY3RlZFN1ZmZpeCA9IGAke3BhY2thZ2VOYW1lLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKX0vJHtjbGFzc05hbWV9LmphdmFgXG5cbiAgaWYgKCFwYWNrYWdlTmFtZU5vZGUgfHwgIVtcInB1YmxpYyBmaW5hbFwiLCBcImZpbmFsXCJdLmluY2x1ZGVzKG1vZGlmaWVyTmFtZXMuam9pbihcIiBcIikpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChleHBlY3RlZFN1ZmZpeCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwicGFja2FnZS9wYXRoL3B1YmxpYy1jbGFzcyBjb250cmFjdFwiLCBub2RlTG9jYXRpb24oY2xhc3NOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBpbXBvcnRzID0gaW1wb3J0c05vZGVzLm1hcCgobm9kZSkgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSBub2RlLmdldENoaWxkKFwiU2NvcGVkSWRlbnRpZmllclwiKSA/PyBub2RlLmdldENoaWxkKFwiSWRlbnRpZmllclwiKVxuXG4gICAgaWYgKCFuYW1lIHx8IG5vZGUuZ2V0Q2hpbGQoXCJzdGF0aWNcIikgfHwgbm9kZS5nZXRDaGlsZChcIkFzdGVyaXNrXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwic3RhdGljIG9yIHdpbGRjYXJkIGltcG9ydFwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IHNwZWNpZmllciA9IG5vZGVUZXh0KG5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB7XG4gICAgICBpbXBvcnRlZE5hbWU6IFwiKlwiLFxuICAgICAgbG9jYWxOYW1lOiBzcGVjaWZpZXIuc3BsaXQoXCIuXCIpLmF0KC0xKSA/PyBcIlwiLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWVzcGFjZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKHRydWUpLFxuICAgICAgcGF0aExvY2F0aW9uOiBub2RlTG9jYXRpb24obmFtZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBzcGVjaWZpZXIsXG4gICAgICB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKVxuICAgIH1cbiAgfSlcbiAgY29uc3QgY2xhc3NCb2R5ID0gcmVxdWlyZWRDaGlsZChjbGFzc05vZGUsIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNsYXNzTWVtYmVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbihjbGFzc0JvZHkpXG4gIGNvbnN0IHJlY29yZENsYXNzID0gY2xhc3NNZW1iZXJzLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJGaWVsZERlY2xhcmF0aW9uXCIgfHwgbWVtYmVyLm5hbWUgPT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGV4cG9ydHMgPSByZWNvcmRDbGFzc1xuICAgID8gbW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSA9PSBcInB1YmxpYyBmaW5hbFwiXG4gICAgICA/IFt7ZXhwb3J0ZWROYW1lOiBjbGFzc05hbWUsIGxvY2FsTmFtZTogY2xhc3NOYW1lLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNsYXNzTmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKX1dXG4gICAgICA6IFtdXG4gICAgOiBtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IFwicHVibGljIGZpbmFsXCIgPyBbXSA6IGNsYXNzTWVtYmVycy5mbGF0TWFwKChtZW1iZXIpID0+IHtcbiAgICAgIGlmIChtZW1iZXIubmFtZSAhPSBcIk1ldGhvZERlY2xhcmF0aW9uXCIpIHJldHVybiBbXVxuICAgICAgY29uc3QgbmFtZSA9IHJlcXVpcmVkQ2hpbGQobWVtYmVyLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIGNvbnN0IG1ldGhvZE1vZGlmaWVycyA9IG1lbWJlci5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICAgICAgY29uc3QgbWV0aG9kTW9kaWZpZXJOYW1lcyA9IG1ldGhvZE1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihtZXRob2RNb2RpZmllcnMpLm1hcCgoe25hbWU6IG1vZGlmaWVyTmFtZX0pID0+IG1vZGlmaWVyTmFtZSkgOiBbXVxuXG4gICAgICBpZiAobm9kZVRleHQobmFtZSwgc291cmNlKSA9PSBcIm1haW5cIiB8fCBtZXRob2RNb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpID09IFwicHJpdmF0ZSBzdGF0aWNcIikgcmV0dXJuIFtdXG5cbiAgICAgIHJldHVybiBbe2V4cG9ydGVkTmFtZTogbm9kZVRleHQobmFtZSwgc291cmNlKSwgbG9jYWxOYW1lOiBub2RlVGV4dChuYW1lLCBzb3VyY2UpLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpLCB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKX1dXG4gICAgfSlcblxuICByZXR1cm4ge2V4cG9ydHMsIGltcG9ydHMsIG5hdGl2ZU5hbWU6IGAke3BhY2thZ2VOYW1lfS4ke2NsYXNzTmFtZX1gfVxufVxuIl19
2354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZHMvamF2YS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUNsQyxPQUFPLEVBQUMscUJBQXFCLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEYsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQzNFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzdELE9BQU8sRUFBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUMzRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQTtBQUNsRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDdEUsT0FBTyxFQUFDLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUMsTUFBTSxZQUFZLENBQUE7QUFFalIsK0NBQStDO0FBQy9DLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN4QyxJQUFJLEVBQUUsSUFBSTtJQUNWLEdBQUcsRUFBRSxHQUFHO0lBQ1IsSUFBSSxFQUFFLElBQUk7SUFDVixDQUFDLEVBQUUsSUFBSTtJQUNQ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QUFDLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQjtnQkFBRSxPQUFPLEVBQUUsQ0FBQTtZQUVwRyxPQUFPLENBQUMsRUFBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxDQUFBO1FBQzVLLENBQUMsQ0FBQyxDQUFBO0lBRUosT0FBTyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsV0FBVyxJQUFJLFNBQVMsRUFBRSxFQUFDLENBQUE7QUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3BhcnNlcn0gZnJvbSBcIkBsZXplci9qYXZhXCJcbmltcG9ydCB7U2VtYW50aWZvbGREaWFnbm9zdGljLCBtaXNzaW5nVHlwZSwgdW5zdXBwb3J0ZWRTeW50YXh9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7bG9jYXRpb25Gcm9tT2Zmc2V0cywgbW9kdWxlTG9jYXRpb259IGZyb20gXCIuLi9zZW1hbnRpYy9sb2NhdGlvbi5qc1wiXG5pbXBvcnQge3dpdGhBZGFwdGVkT3BlcmF0aW9ufSBmcm9tIFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCJcbmltcG9ydCB7c2V0UGFyc2VyUmFuZ2VzLCB3aXRoUGFyc2VyUmFuZ2VzfSBmcm9tIFwiLi4vc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5pbXBvcnQge2hhc09ubHlVbmljb2RlU2NhbGFyc30gZnJvbSBcIi4uL3NlbWFudGljL3NjYWxhcnMuanNcIlxuaW1wb3J0IHtpc1Rhc2swMzRSZXNvdXJjZVByb2JlfSBmcm9tIFwiLi4vc2VtYW50aWMvY2FwYWJpbGl0aWVzLmpzXCJcbmltcG9ydCB7aGFzRXhhY3RFZmZlY3RTdXBwb3J0fSBmcm9tIFwiLi4vYmFja2VuZHMvZWZmZWN0cy5qc1wiXG5pbXBvcnQge3JlcXVpcmVTb3VyY2VSZXR1cm5UeXBlLCBzb3VyY2VTY2FsYXJUeXBlfSBmcm9tIFwiLi9zY2FsYXJzLmpzXCJcbmltcG9ydCB7Y2FwYWJpbGl0eUZ1bmN0aW9uU2lnbmF0dXJlcywgaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlLCBpdGVyYXRpb25CaW5kaW5nVHlwZSwgaXRlcmF0aW9uT3BlcmFuZFR5cGUsIGtub3duQ2FsbFJldHVyblR5cGUsIGxpc3RUeXBlLCBtYXBUeXBlLCBvcHRpb25hbFR5cGUsIG9yZGVyZWRNYXBUeXBlLCBvd25lZFJlc291cmNlVHlwZSwgcmVjb3JkVHlwZSwgcmVmZXJlbmNlVHlwZSwgc2FtZVZhbHVlVHlwZSwgdHlwZVZhcmlhYmxlfSBmcm9tIFwiLi90eXBlcy5qc1wiXG5cbi8qKiBAdHlwZSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj59ICovXG5jb25zdCBzaW1wbGVTdHJpbmdFc2NhcGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIFwiXFxcIlwiOiBcIlxcXCJcIixcbiAgXCInXCI6IFwiJ1wiLFxuICBcIlxcXFxcIjogXCJcXFxcXCIsXG4gIGI6IFwiXFxiXCIsXG4gIGY6IFwiXFxmXCIsXG4gIG46IFwiXFxuXCIsXG4gIHI6IFwiXFxyXCIsXG4gIHM6IFwiIFwiLFxuICB0OiBcIlxcdFwiXG59KVxuY29uc3QgamF2YUJpbmFyeU9wZXJhdGlvbnMgPSBuZXcgTWFwKFtcbiAgW1wiK1wiLCBcIkFkZFwiXSxcbiAgW1wiLVwiLCBcIlN1YnRyYWN0XCJdLFxuICBbXCIqXCIsIFwiTXVsdGlwbHlcIl0sXG4gIFtcIiYmXCIsIFwiQW5kXCJdLFxuICBbXCJ8fFwiLCBcIk9yXCJdLFxuICBbXCI9PVwiLCBcIkphdmFFcXVhbFwiXSxcbiAgW1wiIT1cIiwgXCJKYXZhTm90RXF1YWxcIl0sXG4gIFtcIjxcIiwgXCJMZXNzVGhhblwiXSxcbiAgW1wiPD1cIiwgXCJMZXNzVGhhbk9yRXF1YWxcIl0sXG4gIFtcIj5cIiwgXCJHcmVhdGVyVGhhblwiXSxcbiAgW1wiPj1cIiwgXCJHcmVhdGVyVGhhbk9yRXF1YWxcIl1cbl0pXG5jb25zdCByZWZlcmVuY2VNZXRob2RIb29rcyA9IG5ldyBTZXQoW1wiY2xvbmVcIiwgXCJlcXVhbHNcIiwgXCJmaW5hbGl6ZVwiLCBcImdldENsYXNzXCIsIFwiaGFzaENvZGVcIiwgXCJub3RpZnlcIiwgXCJub3RpZnlBbGxcIiwgXCJ0b1N0cmluZ1wiLCBcIndhaXRcIl0pXG5cbi8qKlxuICogQHR5cGVkZWYgSmF2YUNvbnZlcnNpb25Db250ZXh0XG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljQmluZGluZ1R5cGU+fSBiaW5kaW5ncyAtIEV4cGxpY2l0bHkgdHlwZWQgdmlzaWJsZSBiaW5kaW5ncy5cbiAqIEBwcm9wZXJ0eSB7U2V0PHN0cmluZz59IFtjYXRjaEJpbmRpbmdOYW1lc10gLSBMZXhpY2FsbHkgdmlzaWJsZSBleGFjdCBjYXRjaCBiaW5kaW5nIG5hbWVzLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYXRjaEJpbmRpbmc+fSBbY2F0Y2hCaW5kaW5nTm9kZXNdIC0gRXhhY3QgY2F0Y2ggYmluZGluZyBub2RlcyBieSB2aXNpYmxlIG5hbWUuXG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gUmVmZXJlbmNlIGNsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IFtjdXJyZW50Q2xhc3NdIC0gRW5jbG9zaW5nIHJlZmVyZW5jZSBjbGFzcy5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9yTmFtZXMgLSBFcnJvcnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvcnMgLSBFcnJvcnMgYnkgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge1NldDxzdHJpbmc+fSBlcmFzZWRCaW5kaW5nTmFtZXMgLSBTb3VyY2UgYmluZGluZ3MgY29uc3VtZWQgYnkgZXhhY3Qgc2VtYW50aWMgZm9sZHMgaW4gdGhpcyBzY29wZS5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgSmF2YUZ1bmN0aW9uU2lnbmF0dXJlPn0gZnVuY3Rpb25zIC0gRXhwbGljaXQgbW9kdWxlIGZ1bmN0aW9uIHNpZ25hdHVyZXMuXG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JbnRlcmZhY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZHMgYnkgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgdW5kZWZpbmVkfSByZXR1cm5UeXBlIC0gRW5jbG9zaW5nIHJldHVybiB0eXBlLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgSmF2YUZ1bmN0aW9uU2lnbmF0dXJlXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIENvbXBsZXRlIGRlY2xhcmF0aW9uIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbmFtZUxvY2F0aW9uIC0gUGFyc2VyLW93bmVkIG5hbWUgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSAtIEZ1bmN0aW9uIG5hbWUuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdfSBwYXJhbWV0ZXJzIC0gU2VtYW50aWMgcGFyYW1ldGVycy5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IHJldHVyblR5cGUgLSBTZW1hbnRpYyByZXR1cm4gdHlwZS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdfSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBkaXJlY3QgY2hpbGQgc3ludGF4IG5vZGVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJlbnQgc3ludGF4IG5vZGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IENoaWxkIHN5bnRheCBub2Rlcy5cbiAqL1xuZnVuY3Rpb24gZGlyZWN0Q2hpbGRyZW4obm9kZSkge1xuICBjb25zdCBjaGlsZHJlbiA9IFtdXG5cbiAgZm9yIChsZXQgY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nKSBjaGlsZHJlbi5wdXNoKGNoaWxkKVxuXG4gIHJldHVybiBjaGlsZHJlblxufVxuXG4vKipcbiAqIFJldHVybnMgc3RydWN0dXJhbCBkaXJlY3QgY2hpbGRyZW4sIGV4Y2x1ZGluZyBrbm93biBncmFtbWFyIGRlbGltaXRlcnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFBhcmVudCBzeW50YXggbm9kZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGVbXX0gTmFtZWQgY2hpbGRyZW4uXG4gKi9cbmZ1bmN0aW9uIHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKSB7XG4gIHJldHVybiBkaXJlY3RDaGlsZHJlbihub2RlKS5maWx0ZXIoKGNoaWxkKSA9PiAhW1wie1wiLCBcIn1cIiwgXCIoXCIsIFwiKVwiLCBcIixcIiwgXCI7XCIsIFwiLlwiXS5pbmNsdWRlcyhjaGlsZC5uYW1lKSlcbn1cblxuLyoqXG4gKiBGaW5kcyBhbGwgZGVzY2VuZGFudCBzeW50YXggbm9kZXMgd2l0aCBhIGdpdmVuIG5hbWUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFJvb3Qgc3ludGF4IG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5vZGUgbmFtZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGVbXX0gTWF0Y2hpbmcgZGVzY2VuZGFudHMuXG4gKi9cbmZ1bmN0aW9uIGRlc2NlbmRhbnRzKG5vZGUsIG5hbWUpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IFtdXG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiBkaXJlY3RDaGlsZHJlbihub2RlKSkge1xuICAgIGlmIChjaGlsZC5uYW1lID09IG5hbWUpIG1hdGNoZXMucHVzaChjaGlsZClcbiAgICBtYXRjaGVzLnB1c2goLi4uZGVzY2VuZGFudHMoY2hpbGQsIG5hbWUpKVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZXNcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBvbmUgZGlyZWN0IGNoaWxkIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFBhcmVudCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBDaGlsZCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IENoaWxkIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkQ2hpbGQobm9kZSwgbmFtZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBjaGlsZCA9IG5vZGUuZ2V0Q2hpbGQobmFtZSlcblxuICBpZiAoIWNoaWxkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGAke25vZGUubmFtZX0gd2l0aG91dCAke25hbWV9YCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gIHJldHVybiBjaGlsZFxufVxuXG4vKipcbiAqIFJldHVybnMgYSBub3JtYWxpemVkIExlemVyIG5vZGUgbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIExlemVyIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBTb3VyY2UgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIG5vZGUuZnJvbSwgbm9kZS50bylcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHNvdXJjZSB0ZXh0IGJlbG9uZ2luZyB0byBhIHN5bnRheCBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBMZXplciBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IE5vZGUgdGV4dC5cbiAqL1xuZnVuY3Rpb24gbm9kZVRleHQobm9kZSwgc291cmNlKSB7XG4gIHJldHVybiBzb3VyY2Uuc2xpY2Uobm9kZS5mcm9tLCBub2RlLnRvKVxufVxuXG4vKipcbiAqIFByb3ZlcyBhbiBleGFjdCBwYXJzZXItc3RydWN0dXJlZCBKYXZhIHF1YWxpZmllZCBpZGVudGlmaWVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBJZGVudGlmaWVyIG9yIGZpZWxkLWFjY2VzcyBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtzdHJpbmdbXSB8IHVuZGVmaW5lZH0gRXhhY3Qgc3RydWN0dXJhbCBuYW1lIHBhcnRzLlxuICovXG5mdW5jdGlvbiBxdWFsaWZpZWROYW1lUGFydHMobm9kZSwgc291cmNlKSB7XG4gIGlmIChbXCJJZGVudGlmaWVyXCIsIFwiVHlwZU5hbWVcIl0uaW5jbHVkZXMobm9kZS5uYW1lKSkgcmV0dXJuIFtub2RlVGV4dChub2RlLCBzb3VyY2UpXVxuICBpZiAoIVtcIkZpZWxkQWNjZXNzXCIsIFwiU2NvcGVkVHlwZU5hbWVcIl0uaW5jbHVkZXMobm9kZS5uYW1lKSkgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBjaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKVxuXG4gIGlmIChjaGlsZHJlbi5sZW5ndGggIT0gMikgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBsZWZ0ID0gcXVhbGlmaWVkTmFtZVBhcnRzKGNoaWxkcmVuWzBdLCBzb3VyY2UpXG4gIGNvbnN0IHJpZ2h0ID0gcXVhbGlmaWVkTmFtZVBhcnRzKGNoaWxkcmVuWzFdLCBzb3VyY2UpXG5cbiAgcmV0dXJuIGxlZnQgJiYgcmlnaHQgPyBbLi4ubGVmdCwgLi4ucmlnaHRdIDogdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQ2hlY2tzIHRoZSBvbmx5IGFjY2VwdGVkIEphdmEgT3B0aW9uYWwgdHlwZS9mYWN0b3J5IHN5bWJvbCBzcGVsbGluZ3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFBhcnNlci1xdWFsaWZpZWQgc3ltYm9sIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG5vZGUgaWRlbnRpZmllcyBqYXZhLnV0aWwuT3B0aW9uYWwgb3IgT3B0aW9uYWwuXG4gKi9cbmZ1bmN0aW9uIGlzSmF2YU9wdGlvbmFsU3ltYm9sKG5vZGUsIHNvdXJjZSkge1xuICBjb25zdCBwYXJ0cyA9IHF1YWxpZmllZE5hbWVQYXJ0cyhub2RlLCBzb3VyY2UpXG5cbiAgcmV0dXJuIHBhcnRzPy5qb2luKFwiLlwiKSA9PSBcImphdmEudXRpbC5PcHRpb25hbFwiIHx8IHBhcnRzPy5qb2luKFwiLlwiKSA9PSBcIk9wdGlvbmFsXCJcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN1cHBvcnRlZCBKYXZhIGV4cHJlc3Npb24gbm9kZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gTGV6ZXIgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gW2V4cGVjdGVkVHlwZV0gLSBDb250ZXh0dWFsIHNlbWFudGljIHR5cGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEV4cHJlc3Npb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZXhwZWN0ZWRUeXBlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKVxuXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCAhPSAxKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgcGFyZW50aGVzaXplZCBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihjaGlsZHJlblswXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZXhwZWN0ZWRUeXBlKVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIklkZW50aWZpZXJcIikge1xuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb24sIG5hbWU6IG5vZGVUZXh0KG5vZGUsIHNvdXJjZSl9LCB7bmFtZTogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcInRoaXNcIikge1xuICAgIGlmICghY29udGV4dC5jdXJyZW50Q2xhc3MpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJyZWNlaXZlciBvdXRzaWRlIGEgcmVmZXJlbmNlIGNsYXNzXCIsIGxvY2F0aW9uKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtjbGFzc0lkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGNvbnRleHQuY3VycmVudENsYXNzLmlkKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb259LCB7cmVjZWl2ZXI6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJGaWVsZEFjY2Vzc1wiKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSlcbiAgICBjb25zdCByZWNlaXZlciA9IGNoaWxkcmVuWzBdXG4gICAgY29uc3QgbWVtYmVyID0gY2hpbGRyZW5bMV1cblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggIT0gMiB8fCByZWNlaXZlcj8ubmFtZSAhPSBcInRoaXNcIiB8fCBtZW1iZXI/Lm5hbWUgIT0gXCJJZGVudGlmaWVyXCIgfHwgIWNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgICBpZiAocmVjZWl2ZXIgJiYga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCk/LmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInByaXZhdGUgcmVmZXJlbmNlLWNsYXNzIGZpZWxkIGFjY2Vzc1wiLCBsb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJmaWVsZCBhY2Nlc3Mgb3V0c2lkZSB0aGUgZGVjbGFyaW5nIHJlY2VpdmVyXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IGNvbnRleHQuY3VycmVudENsYXNzLmZpZWxkcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09IG5vZGVUZXh0KG1lbWJlciwgc291cmNlKSlcblxuICAgIGlmICghZmllbGQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYHVua25vd24gcHJpdmF0ZSBmaWVsZCAnJHtub2RlVGV4dChtZW1iZXIsIHNvdXJjZSl9J2AsIG5vZGVMb2NhdGlvbihtZW1iZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtmaWVsZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChmaWVsZC5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaXZhdGVGaWVsZFJlYWRcIiksIGxvY2F0aW9uLFxuICAgICAgcmVjZWl2ZXI6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjZWl2ZXJFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSl9LCB7bWVtYmVyOiBub2RlTG9jYXRpb24obWVtYmVyLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwiSW50ZWdlckxpdGVyYWxcIikge1xuICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKG5vZGVUZXh0KG5vZGUsIHNvdXJjZSkpXG5cbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbi1zYWZlIGludGVnZXIgbGl0ZXJhbFwiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJbnRlZ2VyTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJCb29sZWFuTGl0ZXJhbFwiKSB7XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkJvb2xlYW5MaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IG5vZGVUZXh0KG5vZGUsIHNvdXJjZSkgPT0gXCJ0cnVlXCJ9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIlN0cmluZ0xpdGVyYWxcIikge1xuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJTdHJpbmdMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IGRlY29kZVN0cmluZ0xpdGVyYWwobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIm51bGxcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm51bGwgcmVmZXJlbmNlXCIsIGxvY2F0aW9uKVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJPYmplY3RDcmVhdGlvbkV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG4gICAgY29uc3QgdHlwZU5vZGUgPSBjaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gW1wiR2VuZXJpY1R5cGVcIiwgXCJUeXBlTmFtZVwiLCBcIlNjb3BlZFR5cGVOYW1lXCJdLmluY2x1ZGVzKGNoaWxkLm5hbWUpKVxuICAgIGNvbnN0IG5hbWVOb2RlID0gdHlwZU5vZGU/Lm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiID8gc3RydWN0dXJhbENoaWxkcmVuKHR5cGVOb2RlKVswXSA6IHR5cGVOb2RlXG4gICAgY29uc3QgYXJndW1lbnRMaXN0ID0gbm9kZS5nZXRDaGlsZChcIkFyZ3VtZW50TGlzdFwiKVxuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gbmFtZU5vZGUgPyBjb250ZXh0LnJlY29yZE5hbWVzLmdldChub2RlVGV4dChuYW1lTm9kZSwgc291cmNlKSkgOiB1bmRlZmluZWRcblxuICAgIGlmICghdHlwZU5vZGUgfHwgIW5hbWVOb2RlIHx8ICFhcmd1bWVudExpc3QgfHwgIWRlY2xhcmF0aW9uIHx8IG5vZGUuZ2V0Q2hpbGQoXCJDbGFzc0JvZHlcIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJjb25zdHJ1Y3Rpb24gb2YgYW4gdW5rbm93biBub21pbmFsIG9yIGFub255bW91cyBjbGFzc1wiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgYXJndW1lbnROb2RlcyA9IHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpXG4gICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpIHtcbiAgICAgIGlmICh0eXBlTm9kZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImdlbmVyaWMgcmVmZXJlbmNlIGNvbnN0cnVjdGlvblwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgY29uc3QgY2xhc3NMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2FyZ3VtZW50czogYXJndW1lbnROb2Rlcy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWZlcmVuY2VDb25zdHJ1Y3Rpb25cIiksIGxvY2F0aW9uLFxuICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2VUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBjbGFzc0xvY2F0aW9uKX0sIHtjbGFzczogY2xhc3NMb2NhdGlvbn0pXG4gICAgfVxuICAgIGlmIChkZWNsYXJhdGlvbi5raW5kID09IFwiSW50ZXJmYWNlRGVjbGFyYXRpb25cIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImNvbnN0cnVjdGlvbiBvZiBhbiBpbnRlcmZhY2VcIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJFZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvd25lZCByZXNvdXJjZSBjb25zdHJ1Y3Rpb25cIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgdHlwZUFyZ3VtZW50c05vZGUgPSB0eXBlTm9kZS5nZXRDaGlsZChcIlR5cGVBcmd1bWVudHNcIilcblxuICAgIGlmICh0eXBlTm9kZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIiAmJiAhdHlwZUFyZ3VtZW50c05vZGUpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgZ2VuZXJpYyByZWNvcmQgY29uc3RydWN0aW9uXCIsIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IHR5cGVBcmd1bWVudHMgPSB0eXBlQXJndW1lbnRzTm9kZVxuICAgICAgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4odHlwZUFyZ3VtZW50c05vZGUpLm1hcCgoYXJndW1lbnQpID0+IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KFxuICAgICAgICBhcmd1bWVudCwgYFJlY29yZCAnJHtkZWNsYXJhdGlvbi5uYW1lfScgYXBwbGljYXRpb25gLCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVycykpXG4gICAgICA6IHVuZGVmaW5lZFxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGFyZ3VtZW50czogYXJndW1lbnROb2Rlcy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsXG4gICAgICAgICAgaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlKGRlY2xhcmF0aW9uLCB0eXBlQXJndW1lbnRzLCBpbmRleCkpKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZENvbnN0cnVjdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmVjb3JkOiByZWNvcmRUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBub2RlTG9jYXRpb24obmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCB0eXBlQXJndW1lbnRzKVxuICAgIH0sIHtyZWNvcmQ6IG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSlcbiAgICBjb25zdCBvcGVyYXRvck5vZGUgPSBub2RlLmdldENoaWxkKFwiTG9naWNPcFwiKSA/PyBub2RlLmdldENoaWxkKFwiQXJpdGhPcFwiKVxuICAgIGNvbnN0IG9wZXJhbmQgPSBjaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIkxvZ2ljT3BcIiAmJiBjaGlsZC5uYW1lICE9IFwiQXJpdGhPcFwiKVxuICAgIGNvbnN0IG9wZXJhdG9yID0gb3BlcmF0b3JOb2RlID8gbm9kZVRleHQob3BlcmF0b3JOb2RlLCBzb3VyY2UpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoIW9wZXJhdG9yTm9kZSB8fCAhb3BlcmFuZCB8fCBjaGlsZHJlbi5sZW5ndGggIT0gMiB8fCAob3BlcmF0b3IgIT0gXCIhXCIgJiYgb3BlcmF0b3IgIT0gXCItXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5hcnkgZXhwcmVzc2lvblwiLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICBpZiAob3BlcmF0b3IgPT0gXCIhXCIgJiYgb3BlcmFuZC5uYW1lID09IFwiTWV0aG9kSW52b2NhdGlvblwiICYmIGlzRXF1YWxzSW52b2NhdGlvbihvcGVyYW5kLCBzb3VyY2UpICYmXG4gICAgICAhaXNaZXJvQXJndW1lbnRSZWNvcmRNZW1iZXJJbnZvY2F0aW9uKG9wZXJhbmQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKSB7XG4gICAgICByZXR1cm4gY29udmVydFN0cmluZ0VxdWFsaXR5KG9wZXJhbmQsIHRydWUsIGxvY2F0aW9uLCBub2RlTG9jYXRpb24ob3BlcmF0b3JOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9XG5cbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogXCJVbmFyeUV4cHJlc3Npb25cIixcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgb3BlcmFuZDogY29udmVydEV4cHJlc3Npb24ob3BlcmFuZCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihvcGVyYXRvck5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSksIG9wZXJhdG9yID09IFwiIVwiID8gXCJOb3RcIiA6IFwiTmVnYXRlXCIpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IG5hbWVkID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG4gICAgY29uc3Qgb3BlcmF0b3JOb2RlID0gbm9kZS5nZXRDaGlsZChcIkNvbXBhcmVPcFwiKSA/PyBub2RlLmdldENoaWxkKFwiQXJpdGhPcFwiKSA/PyBub2RlLmdldENoaWxkKFwiTG9naWNPcFwiKSA/PyBub2RlLmdldENoaWxkKFwiQml0T3BcIilcblxuICAgIGlmICghb3BlcmF0b3JOb2RlIHx8IG5hbWVkLmxlbmd0aCAhPSAzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiYmluYXJ5IGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG5cbiAgICBjb25zdCBvcGVyYW5kcyA9IFtuYW1lZFswXSwgbmFtZWRbMl1dXG4gICAgY29uc3QgdW5zdXBwb3J0ZWRPcGVyYW5kID0gb3BlcmFuZHMuZmluZCgob3BlcmFuZCkgPT4gIWlzU3VwcG9ydGVkRXhwcmVzc2lvbk5vZGUob3BlcmFuZCkpXG5cbiAgICBpZiAodW5zdXBwb3J0ZWRPcGVyYW5kKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIHVuc3VwcG9ydGVkT3BlcmFuZC5uYW1lLCBub2RlTG9jYXRpb24odW5zdXBwb3J0ZWRPcGVyYW5kLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICAgIGNvbnN0IG9wZXJhdG9yID0gbm9kZVRleHQob3BlcmF0b3JOb2RlLCBzb3VyY2UpXG5cbiAgICBpZiAoIWphdmFCaW5hcnlPcGVyYXRpb25zLmhhcyhvcGVyYXRvcikpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYGJpbmFyeSAke29wZXJhdG9yfWAsIGxvY2F0aW9uKVxuXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiQmluYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbGVmdDogY29udmVydEV4cHJlc3Npb24ob3BlcmFuZHNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByaWdodDogY29udmVydEV4cHJlc3Npb24ob3BlcmFuZHNbMV0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24ob3BlcmF0b3JOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pLCAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL29wZXJhdG9ycy5qc1wiKS5BZGFwdGVkT3BlcmF0aW9ufSAqLyAoamF2YUJpbmFyeU9wZXJhdGlvbnMuZ2V0KG9wZXJhdG9yKSkpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIlRlcm5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGRpcmVjdENoaWxkcmVuKG5vZGUpXG4gICAgY29uc3QgcXVlc3Rpb24gPSBjaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PSBcIj9cIiB8fCAoY2hpbGQubmFtZSA9PSBcIkxvZ2ljT3BcIiAmJiBub2RlVGV4dChjaGlsZCwgc291cmNlKSA9PSBcIj9cIikpXG4gICAgY29uc3QgY29sb24gPSBjaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PSBcIjpcIiB8fCAoY2hpbGQubmFtZSA9PSBcIkxvZ2ljT3BcIiAmJiBub2RlVGV4dChjaGlsZCwgc291cmNlKSA9PSBcIjpcIikpXG4gICAgY29uc3QgbmFtZWQgPSBjaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZCAhPT0gcXVlc3Rpb24gJiYgY2hpbGQgIT09IGNvbG9uKVxuXG4gICAgaWYgKCFxdWVzdGlvbiB8fCAhY29sb24gfHwgbmFtZWQubGVuZ3RoICE9IDMpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ0ZXJuYXJ5IGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAod2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBhbHRlcm5hdGU6IGNvbnZlcnRFeHByZXNzaW9uKG5hbWVkWzJdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGNvbmRpdGlvbjogY29udmVydEV4cHJlc3Npb24obmFtZWRbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgY29uc2VxdWVudDogY29udmVydEV4cHJlc3Npb24obmFtZWRbMV0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7XG4gICAgICBhbHRlcm5hdGU6IG5vZGVMb2NhdGlvbihuYW1lZFsyXSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBjb2xvbjogbm9kZUxvY2F0aW9uKGNvbG9uLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIGNvbmRpdGlvbjogbm9kZUxvY2F0aW9uKG5hbWVkWzBdLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIGNvbnNlcXVlbnQ6IG5vZGVMb2NhdGlvbihuYW1lZFsxXSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBvcGVyYXRvcjogbm9kZUxvY2F0aW9uKHF1ZXN0aW9uLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pKSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCIpIHtcbiAgICBpZiAoaXNFcXVhbHNJbnZvY2F0aW9uKG5vZGUsIHNvdXJjZSkgJiYgIWlzWmVyb0FyZ3VtZW50UmVjb3JkTWVtYmVySW52b2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSkge1xuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJNZXRob2ROYW1lXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICAgIHJldHVybiBjb252ZXJ0U3RyaW5nRXF1YWxpdHkobm9kZSwgZmFsc2UsIGxvY2F0aW9uLCBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSksIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgfVxuXG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJNZXRob2ROYW1lXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgYXJndW1lbnRMaXN0ID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIkFyZ3VtZW50TGlzdFwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGFyZ3VtZW50Tm9kZXMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KVxuICAgIGNvbnN0IHJlY2VpdmVyID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiTWV0aG9kTmFtZVwiICYmIGNoaWxkLm5hbWUgIT0gXCJBcmd1bWVudExpc3RcIilcbiAgICBjb25zdCBtZXRob2QgPSBub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgcmVjZWl2ZXJUZXh0ID0gcmVjZWl2ZXIgPyBub2RlVGV4dChyZWNlaXZlciwgc291cmNlKSA6IFwiXCJcblxuICAgIGlmIChyZWNlaXZlcj8ubmFtZSA9PSBcIklkZW50aWZpZXJcIiAmJiBtZXRob2QgPT0gXCJnZXRNZXNzYWdlXCIgJiYgYXJndW1lbnROb2Rlcy5sZW5ndGggPT0gMCAmJlxuICAgICAgY29udGV4dC5iaW5kaW5ncy5nZXQocmVjZWl2ZXJUZXh0KT8ua2luZCA9PSBcIkVycm9yVHlwZVwiKSB7XG4gICAgICBjb25zdCByZWNlaXZlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yTWVzc2FnZVJlYWRcIiksXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICByZWNlaXZlcjogd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uOiByZWNlaXZlckxvY2F0aW9uLCBuYW1lOiByZWNlaXZlclRleHR9LCB7XG4gICAgICAgICAgbmFtZTogcmVjZWl2ZXJMb2NhdGlvblxuICAgICAgICB9KVxuICAgICAgfSwge21lbWJlcjogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG5cbiAgICBpZiAocmVjZWl2ZXIgJiYgW1wiZ2V0Q2xhc3NcIiwgXCJoYXNoQ29kZVwiLCBcInRvU3RyaW5nXCIsIFwiY2xvbmVcIiwgXCJub3RpZnlcIiwgXCJub3RpZnlBbGxcIiwgXCJ3YWl0XCJdLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJyZWZsZWN0aXZlIG9yIE9iamVjdCBtZW1iZXIgYWNjZXNzXCIsIG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG5cbiAgICBpZiAocmVjZWl2ZXIgJiYga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCk/LmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVyVHlwZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVmZXJlbmNlVHlwZX0gKi8gKFxuICAgICAgICBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSlcbiAgICAgIGNvbnN0IGRlY2xhcmVkTWV0aG9kID0gY29udGV4dC5jbGFzc2VzLmdldChyZWNlaXZlclR5cGUuZGVjbGFyYXRpb25JZCk/Lm1ldGhvZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBtZXRob2QpXG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHthcmd1bWVudHM6IGFyZ3VtZW50Tm9kZXMubWFwKChhcmd1bWVudCwgaW5kZXgpID0+XG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBkZWNsYXJlZE1ldGhvZD8ucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1ldGhvZENhbGxFeHByZXNzaW9uXCIpLCBsb2NhdGlvbiwgbWV0aG9kOiBkZWNsYXJlZE1ldGhvZD8uaWQgPz8gbWV0aG9kLFxuICAgICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KX0sIHttZW1iZXI6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuXG4gICAgaWYgKHJlY2VpdmVyICYmIGlzSmF2YU9wdGlvbmFsU3ltYm9sKHJlY2VpdmVyLCBzb3VyY2UpKSB7XG4gICAgICBjb25zdCBmYWN0b3J5TG9jYXRpb24gPSBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgICAgaWYgKG1ldGhvZCA9PSBcImVtcHR5XCIgJiYgYXJndW1lbnROb2Rlcy5sZW5ndGggPT0gMCkge1xuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxOb25lXCIpLCBsb2NhdGlvbn0sIHtcbiAgICAgICAgICBhYnNlbmNlOiBmYWN0b3J5TG9jYXRpb24sXG4gICAgICAgICAgZmFjdG9yeTogZmFjdG9yeUxvY2F0aW9uXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAobWV0aG9kID09IFwib2ZcIiAmJiBhcmd1bWVudE5vZGVzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbFNvbWVcIiksXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgdmFsdWU6IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50Tm9kZXNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsXG4gICAgICAgICAgICBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIiA/IGV4cGVjdGVkVHlwZS52YWx1ZVR5cGUgOiB1bmRlZmluZWQpXG4gICAgICAgIH0sIHtmYWN0b3J5OiBmYWN0b3J5TG9jYXRpb24sIHNvbWU6IGZhY3RvcnlMb2NhdGlvbn0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYHVuc3VwcG9ydGVkIE9wdGlvbmFsLiR7bWV0aG9kfWAsIGZhY3RvcnlMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKHJlY2VpdmVyPy5uYW1lID09IFwiSWRlbnRpZmllclwiICYmIGNvbnRleHQuYmluZGluZ3MuZ2V0KHJlY2VpdmVyVGV4dCk/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgICAgY29uc3Qgb3BlcmFuZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWRlbnRpZmllckV4cHJlc3Npb259ICovIChcbiAgICAgICAgY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgICApXG4gICAgICBjb25zdCBvcGVyYXRpb25Mb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICBpZiAobWV0aG9kID09IFwiaXNQcmVzZW50XCIgJiYgYXJndW1lbnROb2Rlcy5sZW5ndGggPT0gMCkge1xuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxJc1ByZXNlbnRcIiksIGxvY2F0aW9uLCBvcGVyYW5kfSwge1xuICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRpb25Mb2NhdGlvblxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKG1ldGhvZCA9PSBcImdldFwiICYmIGFyZ3VtZW50Tm9kZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsVW53cmFwXCIpLCBsb2NhdGlvbiwgb3BlcmFuZH0sIHtcbiAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0aW9uTG9jYXRpb24sXG4gICAgICAgICAgdW53cmFwOiBvcGVyYXRpb25Mb2NhdGlvblxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGB1bnN1cHBvcnRlZCBPcHRpb25hbC4ke21ldGhvZH1gLCBvcGVyYXRpb25Mb2NhdGlvbilcbiAgICB9XG5cbiAgICBpZiAocmVjZWl2ZXIgJiYgbWV0aG9kID09IFwib2ZcIiAmJiByZWNlaXZlclRleHQgPT0gXCJqYXZhLnV0aWwuTGlzdFwiKSB7XG4gICAgICBjb25zdCBlbGVtZW50VHlwZSA9IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIkxpc3RUeXBlXCIgPyBleHBlY3RlZFR5cGUuZWxlbWVudFR5cGUgOiB1bmRlZmluZWRcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBlbGVtZW50czogYXJndW1lbnROb2Rlcy5tYXAoKGFyZ3VtZW50KSA9PiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZWxlbWVudFR5cGUpKSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTGlzdExpdGVyYWxcIiksXG4gICAgICAgIGxvY2F0aW9uXG4gICAgICB9LCB7ZmFjdG9yeTogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKHJlY2VpdmVyICYmIG1ldGhvZCA9PSBcIm9mXCIgJiYgcmVjZWl2ZXJUZXh0ID09IFwiamF2YS51dGlsLk1hcFwiKSB7XG4gICAgICBpZiAoYXJndW1lbnROb2Rlcy5sZW5ndGggJSAyICE9IDApIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJNYXAub2Ygb2RkIGFyZ3VtZW50IGNvdW50XCIsIGxvY2F0aW9uKVxuICAgICAgaWYgKGFyZ3VtZW50Tm9kZXMubGVuZ3RoID4gMjApIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImphdmEudXRpbC5NYXAub2Ygc3VwcG9ydHMgYXQgbW9zdCB0ZW4gZW50cmllc1wiLCBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBlbnRyaWVzID0gW11cbiAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiA/IGV4cGVjdGVkVHlwZS52YWx1ZVR5cGUgOiB1bmRlZmluZWRcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Tm9kZXMubGVuZ3RoOyBpbmRleCArPSAyKSB7XG4gICAgICAgIGNvbnN0IGtleU5vZGUgPSBhcmd1bWVudE5vZGVzW2luZGV4XVxuXG4gICAgICAgIGlmIChrZXlOb2RlLm5hbWUgIT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWFwIGtleSBvdGhlciB0aGFuIGEgc3RyaW5nIGxpdGVyYWxcIiwgbm9kZUxvY2F0aW9uKGtleU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IGRpcmVjdENoaWxkcmVuKGFyZ3VtZW50TGlzdCkuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gXCIsXCIgJiZcbiAgICAgICAgICBjaGlsZC5mcm9tID49IGtleU5vZGUudG8gJiYgY2hpbGQudG8gPD0gYXJndW1lbnROb2Rlc1tpbmRleCArIDFdLmZyb20pXG5cbiAgICAgICAgaWYgKCFzZXBhcmF0b3IpIHRocm93IG5ldyBFcnJvcihcIkxlemVyIG9taXR0ZWQgdGhlIEphdmEgTWFwLm9mIGVudHJ5IHNlcGFyYXRvci5cIilcbiAgICAgICAgZW50cmllcy5wdXNoKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICAgIGtleTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdHJpbmdMaXRlcmFsfSAqLyAoY29udmVydEV4cHJlc3Npb24oa2V5Tm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpLFxuICAgICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1hcEVudHJ5XCIpLFxuICAgICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIGtleU5vZGUuZnJvbSwgYXJndW1lbnROb2Rlc1tpbmRleCArIDFdLnRvKSxcbiAgICAgICAgICB2YWx1ZTogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnROb2Rlc1tpbmRleCArIDFdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB2YWx1ZVR5cGUpXG4gICAgICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKHNlcGFyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSl9KSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2VudHJpZXMsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1hcExpdGVyYWxcIiksIGxvY2F0aW9ufSwge1xuICAgICAgICBmYWN0b3J5OiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChyZWNlaXZlciAmJiBtZXRob2QgPT0gXCJnZXRcIiAmJiBhcmd1bWVudE5vZGVzLmxlbmd0aCA9PSAxKSB7XG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSByZWNlaXZlci5uYW1lID09IFwiSWRlbnRpZmllclwiID8gY29udGV4dC5iaW5kaW5ncy5nZXQobm9kZVRleHQocmVjZWl2ZXIsIHNvdXJjZSkpIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmIChyZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJNYXBUeXBlXCIgfHwgcmVjZWl2ZXJUeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIiB8fFxuICAgICAgICAoIXJlY2VpdmVyVHlwZSAmJiBhcmd1bWVudE5vZGVzWzBdLm5hbWUgPT0gXCJTdHJpbmdMaXRlcmFsXCIpKSB7XG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgICAga2V5OiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudE5vZGVzWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBMb29rdXBFeHByZXNzaW9uXCIpLFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIHRvdGFsaXR5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJwcm92ZW5cIilcbiAgICAgICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGNvbGxlY3Rpb246IGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAgaW5kZXg6IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50Tm9kZXNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMaXN0SW5kZXhFeHByZXNzaW9uXCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgdG90YWxpdHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcImZhaWwtb24tYWJzZW5jZVwiKVxuICAgICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgICBpZiAocmVjZWl2ZXIgJiYgbWV0aG9kID09IFwic2l6ZVwiICYmIGFyZ3VtZW50Tm9kZXMubGVuZ3RoID09IDApIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVyVHlwZSA9IGtub3duRXhwcmVzc2lvblR5cGUocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG5cbiAgICAgIGlmIChyZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICAgIGZpZWxkOiBtZXRob2QsXG4gICAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWVtYmVyUmVhZFwiKSxcbiAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICByZWNlaXZlcjogY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgICAgIH0sIHttZW1iZXI6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgICB9XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGNvbGxlY3Rpb246IGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ29sbGVjdGlvblNpemVFeHByZXNzaW9uXCIpLFxuICAgICAgICBsb2NhdGlvblxuICAgICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cblxuICAgIGlmIChyZWNlaXZlciAmJiByZWNlaXZlclRleHQgPT0gXCJNYWluXCIgJiYgY29udGV4dC5jdXJyZW50Q2xhc3MgJiYgIWNvbnRleHQuYmluZGluZ3MuaGFzKHJlY2VpdmVyVGV4dCkpIHtcbiAgICAgIGNvbnN0IGxvY2FsU2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KG1ldGhvZClcblxuICAgICAgaWYgKGxvY2FsU2lnbmF0dXJlKSB7XG4gICAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudE5vZGVzLm1hcCgoY2hpbGQsIGluZGV4KSA9PlxuICAgICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGNoaWxkLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBsb2NhbFNpZ25hdHVyZS5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSkpXG5cbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2FyZ3VtZW50czogYXJndW1lbnRzXywgY2FsbGVlOiBtZXRob2QsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhbGxFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtcbiAgICAgICAgICBjYWxsZWU6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZWNlaXZlcikge1xuICAgICAgY29uc3QgcXVhbGlmaWVkTmFtZSA9IGAke3JlY2VpdmVyVGV4dH0uJHttZXRob2R9YFxuICAgICAgY29uc3QgcXVhbGlmaWVkU2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KHF1YWxpZmllZE5hbWUpXG5cbiAgICAgIGlmIChxdWFsaWZpZWRTaWduYXR1cmUpIHtcbiAgICAgICAgY29uc3QgYXJndW1lbnRzXyA9IGFyZ3VtZW50Tm9kZXMubWFwKChjaGlsZCwgaW5kZXgpID0+XG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24oY2hpbGQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHF1YWxpZmllZFNpZ25hdHVyZS5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSkpXG5cbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2FyZ3VtZW50czogYXJndW1lbnRzXywgY2FsbGVlOiBxdWFsaWZpZWROYW1lLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDYWxsRXhwcmVzc2lvblwiKSwgbG9jYXRpb259LCB7XG4gICAgICAgICAgY2FsbGVlOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVjZWl2ZXIgJiYgYXJndW1lbnROb2Rlcy5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBmaWVsZDogbWV0aG9kLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZW1iZXJSZWFkXCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgfSwge21lbWJlcjogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG5cbiAgICBjb25zdCB1bnN1cHBvcnRlZFJlY2VpdmVyID0gcmVjZWl2ZXJcblxuICAgIGlmICh1bnN1cHBvcnRlZFJlY2VpdmVyKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWV0aG9kIGludm9jYXRpb24gcmVjZWl2ZXJcIiwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkUmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGNvbnN0IHVuc3VwcG9ydGVkQXJndW1lbnQgPSBhcmd1bWVudE5vZGVzLmZpbmQoKGNoaWxkKSA9PiAhaXNTdXBwb3J0ZWRFeHByZXNzaW9uTm9kZShjaGlsZCkpXG5cbiAgICBpZiAodW5zdXBwb3J0ZWRBcmd1bWVudCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgbWV0aG9kIGFyZ3VtZW50ICR7dW5zdXBwb3J0ZWRBcmd1bWVudC5uYW1lfWAsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZEFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcblxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpKVxuICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudE5vZGVzLm1hcCgoY2hpbGQsIGluZGV4KSA9PlxuICAgICAgY29udmVydEV4cHJlc3Npb24oY2hpbGQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHNpZ25hdHVyZT8ucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2FyZ3VtZW50czogYXJndW1lbnRzXywgY2FsbGVlOiBub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDYWxsRXhwcmVzc2lvblwiKSwgbG9jYXRpb259LCB7XG4gICAgICBjYWxsZWU6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIG5vZGUubmFtZSwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogQ2hlY2tzIHRoZSBvbmUgcGFyc2VyLW5hdGl2ZSBKYXZhIHN0cmluZyBlcXVhbGl0eSBpbnZvY2F0aW9uIGZvcm0uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIE1ldGhvZCBpbnZvY2F0aW9uIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGludm9jYXRpb24gc3BlbGxzIGAuZXF1YWxzYCB3aXRoIGEgcmVjZWl2ZXIuXG4gKi9cbmZ1bmN0aW9uIGlzRXF1YWxzSW52b2NhdGlvbihub2RlLCBzb3VyY2UpIHtcbiAgY29uc3QgbWV0aG9kTmFtZSA9IG5vZGUuZ2V0Q2hpbGQoXCJNZXRob2ROYW1lXCIpXG4gIGNvbnN0IHJlY2VpdmVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKS5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiTWV0aG9kTmFtZVwiICYmIGNoaWxkLm5hbWUgIT0gXCJBcmd1bWVudExpc3RcIilcblxuICByZXR1cm4gbWV0aG9kTmFtZSAhPSBudWxsICYmIG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkgPT0gXCJlcXVhbHNcIiAmJiByZWNlaXZlcnMubGVuZ3RoID09IDFcbn1cblxuLyoqXG4gKiBEaXN0aW5ndWlzaGVzIGEgemVyby1hcmd1bWVudCBub21pbmFsIGZpZWxkIGFjY2Vzc29yIGZyb20gSmF2YSBzdHJpbmcgZXF1YWxpdHkgc3ludGF4LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBNZXRob2QgaW52b2NhdGlvbiBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGlzIGlzIGEga25vd24gcmVjb3JkIHJlY2VpdmVyIHdpdGggbm8gYXJndW1lbnRzLlxuICovXG5mdW5jdGlvbiBpc1plcm9Bcmd1bWVudFJlY29yZE1lbWJlckludm9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBhcmd1bWVudExpc3QgPSBub2RlLmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IHJlY2VpdmVyID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiTWV0aG9kTmFtZVwiICYmIGNoaWxkLm5hbWUgIT0gXCJBcmd1bWVudExpc3RcIilcblxuICByZXR1cm4gYXJndW1lbnRMaXN0ICE9IG51bGwgJiYgc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50TGlzdCkubGVuZ3RoID09IDAgJiYgcmVjZWl2ZXIgIT0gbnVsbCAmJlxuICAgIGtub3duRXhwcmVzc2lvblR5cGUocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpPy5raW5kID09IFwiUmVjb3JkVHlwZVwiXG59XG5cbi8qKlxuICogQ29udmVydHMgSmF2YSBgLmVxdWFsc2Agb3IgaXRzIGRpcmVjdGx5IG5lZ2F0ZWQgZm9ybSB3aXRob3V0IHNvdXJjZS10ZXh0IGluZmVyZW5jZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gUGFyc2VyIG1ldGhvZCBpbnZvY2F0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBuZWdhdGVkIC0gV2hldGhlciBhIHBhcnNlci1vd25lZCB1bmFyeSBub3Qgd3JhcHMgdGhlIGludm9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFdob2xlIGVxdWFsaXR5IGV4cHJlc3Npb24gbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBvcGVyYXRvckxvY2F0aW9uIC0gUGFyc2VyLW93bmVkIG9wZXJhdG9yL21ldGhvZCBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IEFkYXB0ZWQgZXF1YWxpdHkgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydFN0cmluZ0VxdWFsaXR5KG5vZGUsIG5lZ2F0ZWQsIGxvY2F0aW9uLCBvcGVyYXRvckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFyZ3VtZW50TGlzdCA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJBcmd1bWVudExpc3RcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXJndW1lbnRzXyA9IHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpXG4gIGNvbnN0IHJlY2VpdmVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKS5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiTWV0aG9kTmFtZVwiICYmIGNoaWxkLm5hbWUgIT0gXCJBcmd1bWVudExpc3RcIilcbiAgY29uc3QgdW5zdXBwb3J0ZWRBcmd1bWVudCA9IGFyZ3VtZW50c18uZmluZCgoY2hpbGQpID0+ICFpc1N1cHBvcnRlZEV4cHJlc3Npb25Ob2RlKGNoaWxkKSlcblxuICBpZiAocmVjZWl2ZXJzLmxlbmd0aCAhPSAxIHx8IGFyZ3VtZW50c18ubGVuZ3RoICE9IDEgfHwgdW5zdXBwb3J0ZWRBcmd1bWVudCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJzdHJpbmcgZXF1YWxzIGludm9jYXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbj59ICovXG4gIGNvbnN0IHJhbmdlcyA9IHtvcGVyYXRvcjogb3BlcmF0b3JMb2NhdGlvbn1cblxuICBpZiAobmVnYXRlZCkge1xuICAgIHJhbmdlcy5lcXVhbGl0eU9wZXJhdG9yID0gbm9kZUxvY2F0aW9uKHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJNZXRob2ROYW1lXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlKVxuICB9XG5cbiAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBraW5kOiBcIkJpbmFyeUV4cHJlc3Npb25cIixcbiAgICBsZWZ0OiBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlcnNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgIGxvY2F0aW9uLFxuICAgIHJpZ2h0OiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICB9LCByYW5nZXMpLCBuZWdhdGVkID8gXCJTdHJpbmdOb3RFcXVhbFwiIDogXCJTdHJpbmdFcXVhbFwiKVxuXG4gIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBMZXplciBub2RlIGlzIGluIHRoZSBleHByZXNzaW9uIHN1YnNldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gSmF2YSBzeW50YXggbm9kZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBub2RlIGlzIHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gaXNTdXBwb3J0ZWRFeHByZXNzaW9uTm9kZShub2RlKSB7XG4gIHJldHVybiBbXG4gICAgXCJJZGVudGlmaWVyXCIsXG4gICAgXCJJbnRlZ2VyTGl0ZXJhbFwiLFxuICAgIFwiQm9vbGVhbkxpdGVyYWxcIixcbiAgICBcIlN0cmluZ0xpdGVyYWxcIixcbiAgICBcIlVuYXJ5RXhwcmVzc2lvblwiLFxuICAgIFwiQmluYXJ5RXhwcmVzc2lvblwiLFxuICAgIFwiVGVybmFyeUV4cHJlc3Npb25cIixcbiAgICBcIk1ldGhvZEludm9jYXRpb25cIixcbiAgICBcIk9iamVjdENyZWF0aW9uRXhwcmVzc2lvblwiLFxuICAgIFwiRmllbGRBY2Nlc3NcIixcbiAgICBcInRoaXNcIixcbiAgICBcIm51bGxcIixcbiAgICBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCJcbiAgXS5pbmNsdWRlcyhub2RlLm5hbWUpXG59XG5cbi8qKlxuICogQXBwbGllcyBKYXZhIFVuaWNvZGUgdHJhbnNsYXRpb24gYmVmb3JlIHRva2VuLWxldmVsIHN0cmluZyBlc2NhcGUgZGVjb2RpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGl0ZXJhbCAtIFBhcnNlci1jb25maXJtZWQgSmF2YSBzdHJpbmcgbGl0ZXJhbC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gTGl0ZXJhbCBzb3VyY2UgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBVbmljb2RlLXRyYW5zbGF0ZWQgbGl0ZXJhbC5cbiAqL1xuZnVuY3Rpb24gdHJhbnNsYXRlVW5pY29kZUVzY2FwZXMobGl0ZXJhbCwgbG9jYXRpb24pIHtcbiAgbGV0IHRyYW5zbGF0ZWQgPSBcIlwiXG4gIGxldCBjb25zZWN1dGl2ZUJhY2tzbGFzaGVzID0gMFxuICBsZXQgcHJldmlvdXNXYXNVbmljb2RlRXNjYXBlID0gZmFsc2VcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGl0ZXJhbC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBjaGFyYWN0ZXIgPSBsaXRlcmFsW2luZGV4XVxuICAgIGNvbnN0IGVsaWdpYmxlID0gY2hhcmFjdGVyID09IFwiXFxcXFwiICYmIChwcmV2aW91c1dhc1VuaWNvZGVFc2NhcGUgfHwgY29uc2VjdXRpdmVCYWNrc2xhc2hlcyAlIDIgPT0gMClcblxuICAgIGlmIChlbGlnaWJsZSAmJiBsaXRlcmFsW2luZGV4ICsgMV0gPT0gXCJ1XCIpIHtcbiAgICAgIGxldCBkaWdpdHNTdGFydCA9IGluZGV4ICsgMlxuXG4gICAgICB3aGlsZSAobGl0ZXJhbFtkaWdpdHNTdGFydF0gPT0gXCJ1XCIpIGRpZ2l0c1N0YXJ0KytcblxuICAgICAgY29uc3QgaGV4YWRlY2ltYWwgPSBsaXRlcmFsLnNsaWNlKGRpZ2l0c1N0YXJ0LCBkaWdpdHNTdGFydCArIDQpXG4gICAgICBjb25zdCBpc0hleGFkZWNpbWFsID0gaGV4YWRlY2ltYWwubGVuZ3RoID09IDQgJiYgWy4uLmhleGFkZWNpbWFsXS5ldmVyeSgoZGlnaXQpID0+XG4gICAgICAgIChkaWdpdCA+PSBcIjBcIiAmJiBkaWdpdCA8PSBcIjlcIikgfHwgKGRpZ2l0ID49IFwiQVwiICYmIGRpZ2l0IDw9IFwiRlwiKSB8fCAoZGlnaXQgPj0gXCJhXCIgJiYgZGlnaXQgPD0gXCJmXCIpXG4gICAgICApXG5cbiAgICAgIGlmICghaXNIZXhhZGVjaW1hbCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIHN0cmluZyBlc2NhcGVcIiwgbG9jYXRpb24pXG5cbiAgICAgIGNvbnN0IHRyYW5zbGF0ZWRDaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKE51bWJlci5wYXJzZUludChoZXhhZGVjaW1hbCwgMTYpKVxuXG4gICAgICB0cmFuc2xhdGVkICs9IHRyYW5zbGF0ZWRDaGFyYWN0ZXJcbiAgICAgIGNvbnNlY3V0aXZlQmFja3NsYXNoZXMgPSB0cmFuc2xhdGVkQ2hhcmFjdGVyID09IFwiXFxcXFwiID8gY29uc2VjdXRpdmVCYWNrc2xhc2hlcyArIDEgOiAwXG4gICAgICBwcmV2aW91c1dhc1VuaWNvZGVFc2NhcGUgPSB0cnVlXG4gICAgICBpbmRleCA9IGRpZ2l0c1N0YXJ0ICsgM1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB0cmFuc2xhdGVkICs9IGNoYXJhY3RlclxuICAgIGNvbnNlY3V0aXZlQmFja3NsYXNoZXMgPSBjaGFyYWN0ZXIgPT0gXCJcXFxcXCIgPyBjb25zZWN1dGl2ZUJhY2tzbGFzaGVzICsgMSA6IDBcbiAgICBwcmV2aW91c1dhc1VuaWNvZGVFc2NhcGUgPSBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRyYW5zbGF0ZWRcbn1cblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBhY2NlcHRlZCBlc2NhcGVzIGZyb20gb25lIHBhcnNlci1jb25maXJtZWQgSmF2YSBzdHJpbmcgbGl0ZXJhbC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gSmF2YSBTdHJpbmdMaXRlcmFsIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge3N0cmluZ30gRGVjb2RlZCBVbmljb2RlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZGVjb2RlU3RyaW5nTGl0ZXJhbChub2RlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGxpdGVyYWwgPSB0cmFuc2xhdGVVbmljb2RlRXNjYXBlcyhub2RlVGV4dChub2RlLCBzb3VyY2UpLCBsb2NhdGlvbilcbiAgbGV0IHZhbHVlID0gXCJcIlxuXG4gIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBsaXRlcmFsLmxlbmd0aCAtIDE7IGluZGV4KyspIHtcbiAgICBjb25zdCBjaGFyYWN0ZXIgPSBsaXRlcmFsW2luZGV4XVxuXG4gICAgaWYgKGNoYXJhY3RlciA9PSBcIlxcXCJcIiB8fCBjaGFyYWN0ZXIgPT0gXCJcXG5cIiB8fCBjaGFyYWN0ZXIgPT0gXCJcXHJcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImludmFsaWQgc3RyaW5nIGxpdGVyYWxcIiwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgaWYgKGNoYXJhY3RlciAhPSBcIlxcXFxcIikge1xuICAgICAgdmFsdWUgKz0gY2hhcmFjdGVyXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChpbmRleCArIDEgPj0gbGl0ZXJhbC5sZW5ndGggLSAxKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiaW52YWxpZCBzdHJpbmcgbGl0ZXJhbFwiLCBsb2NhdGlvbilcblxuICAgIGNvbnN0IGVzY2FwZWQgPSBsaXRlcmFsWysraW5kZXhdXG4gICAgY29uc3Qgc2ltcGxlID0gc2ltcGxlU3RyaW5nRXNjYXBlc1tlc2NhcGVkXVxuXG4gICAgaWYgKHNpbXBsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZSArPSBzaW1wbGVcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGVzY2FwZWQgPj0gXCIwXCIgJiYgZXNjYXBlZCA8PSBcIjdcIikge1xuICAgICAgbGV0IG9jdGFsID0gZXNjYXBlZFxuICAgICAgY29uc3QgbWF4aW11bUxlbmd0aCA9IGVzY2FwZWQgPD0gXCIzXCIgPyAzIDogMlxuXG4gICAgICB3aGlsZSAob2N0YWwubGVuZ3RoIDwgbWF4aW11bUxlbmd0aCAmJiBsaXRlcmFsW2luZGV4ICsgMV0gPj0gXCIwXCIgJiYgbGl0ZXJhbFtpbmRleCArIDFdIDw9IFwiN1wiKSB7XG4gICAgICAgIG9jdGFsICs9IGxpdGVyYWxbKytpbmRleF1cbiAgICAgIH1cblxuICAgICAgdmFsdWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShOdW1iZXIucGFyc2VJbnQob2N0YWwsIDgpKVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgc3RyaW5nIGVzY2FwZVwiLCBsb2NhdGlvbilcbiAgfVxuXG4gIGlmICghaGFzT25seVVuaWNvZGVTY2FsYXJzKHZhbHVlKSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImludmFsaWQgVW5pY29kZSBzdHJpbmcgbGl0ZXJhbFwiLCBsb2NhdGlvbilcblxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhwbGljaXQgSmF2YSByZXR1cm4gc3RhdGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IHN0YXRlbWVudCAtIEphdmEgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmV0dXJuU3RhdGVtZW50fSBTZW1hbnRpYyByZXR1cm4uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRSZXR1cm4oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoc3RhdGVtZW50Lm5hbWUgIT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBzdGF0ZW1lbnQubmFtZSwgbG9jYXRpb24pXG5cbiAgY29uc3QgZXhwcmVzc2lvbk5vZGVzID0gZGlyZWN0Q2hpbGRyZW4oc3RhdGVtZW50KS5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwicmV0dXJuXCIgJiYgY2hpbGQubmFtZSAhPSBcIjtcIilcbiAgY29uc3QgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Ob2Rlcy5sZW5ndGggPT0gMSA/IGV4cHJlc3Npb25Ob2Rlc1swXSA6IHVuZGVmaW5lZFxuXG4gIGlmIChleHByZXNzaW9uTm9kZXMubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IHVuc3VwcG9ydGVkID0gZXhwcmVzc2lvbk5vZGVzWzBdXG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXG4gICAgICBcImphdmFcIixcbiAgICAgIHVuc3VwcG9ydGVkPy5uYW1lID8/IFwicmV0dXJuIGV4cHJlc3Npb25cIixcbiAgICAgIHVuc3VwcG9ydGVkID8gbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkLCBmaWxlbmFtZSwgc291cmNlKSA6IGxvY2F0aW9uXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi4oZXhwcmVzc2lvbiA/IHtleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb250ZXh0LnJldHVyblR5cGU/LmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIgJiYgY29udGV4dC5yZXR1cm5UeXBlLm5hbWUgPT0gXCJ2b2lkXCJcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlIHwgdW5kZWZpbmVkfSAqLyAoY29udGV4dC5yZXR1cm5UeXBlKVxuICAgICl9IDoge30pLFxuICAgIGtpbmQ6IFwiUmV0dXJuU3RhdGVtZW50XCIsXG4gICAgbG9jYXRpb25cbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBKYXZhIGxvY2FsIGRlY2xhcmF0aW9uIG9yIGFzc2lnbm1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gc3RhdGVtZW50IC0gSmF2YSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbFN0YXRlbWVudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50fSBTZW1hbnRpYyBsb2NhbCBvciBwcml2YXRlLWZpZWxkIHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydExvY2FsU3RhdGVtZW50KHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uXCIpIHtcbiAgICBjb25zdCBkZWNsYXJhdG9ycyA9IHN0YXRlbWVudC5nZXRDaGlsZHJlbihcIlZhcmlhYmxlRGVjbGFyYXRvclwiKVxuICAgIGNvbnN0IHR5cGVOb2RlID0gZGVjbGFyYXRpb25UeXBlKHN0YXRlbWVudClcbiAgICBjb25zdCB2YXJOb2RlID0gc3RhdGVtZW50LmdldENoaWxkKFwidmFyXCIpXG4gICAgY29uc3QgbW9kaWZpZXJzID0gc3RhdGVtZW50LmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gICAgY29uc3QgbW9kaWZpZXJDaGlsZHJlbiA9IG1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihtb2RpZmllcnMpIDogW11cblxuICAgIGlmICh2YXJOb2RlKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidmFyIGxvY2FsIGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbih2YXJOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBpZiAoZGVjbGFyYXRvcnMubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtdWx0aXBsZSBsb2NhbCBkZWNsYXJhdG9yc1wiLCBsb2NhdGlvbilcbiAgICBpZiAoIXR5cGVOb2RlIHx8IHR5cGVOb2RlLm5hbWUgPT0gXCJBcnJheVR5cGVcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIGxvY2FsIHR5cGVcIiwgbG9jYXRpb24pXG4gICAgaWYgKG1vZGlmaWVyQ2hpbGRyZW4uc29tZSgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJmaW5hbFwiKSB8fCBtb2RpZmllckNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCBsb2NhbCBtb2RpZmllcnNcIiwgbW9kaWZpZXJzID8gbm9kZUxvY2F0aW9uKG1vZGlmaWVycywgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbilcbiAgICB9XG5cbiAgICBjb25zdCBkZWNsYXJhdG9yID0gZGVjbGFyYXRvcnNbMF1cbiAgICBjb25zdCBkZWZpbml0aW9uID0gcmVxdWlyZWRDaGlsZChkZWNsYXJhdG9yLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBhc3NpZ25tZW50ID0gZGVjbGFyYXRvci5nZXRDaGlsZChcIkFzc2lnbk9wXCIpXG4gICAgY29uc3QgZGltZW5zaW9ucyA9IGRlY2xhcmF0b3IuZ2V0Q2hpbGRyZW4oXCJEaW1lbnNpb25cIilcbiAgICBjb25zdCBpbml0aWFsaXplck5vZGVzID0gZGlyZWN0Q2hpbGRyZW4oZGVjbGFyYXRvcikuZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIkRlZmluaXRpb25cIiAmJiBjaGlsZC5uYW1lICE9IFwiQXNzaWduT3BcIilcblxuICAgIGlmIChkaW1lbnNpb25zLmxlbmd0aCA+IDApIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJhcnJheSBsb2NhbCBkZWNsYXJhdGlvblwiLCBub2RlTG9jYXRpb24oZGVjbGFyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgaWYgKCFhc3NpZ25tZW50IHx8IG5vZGVUZXh0KGFzc2lnbm1lbnQsIHNvdXJjZSkgIT0gXCI9XCIgfHwgaW5pdGlhbGl6ZXJOb2Rlcy5sZW5ndGggIT0gMSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuaW5pdGlhbGl6ZWQgbG9jYWwgZGVjbGFyYXRpb25cIiwgbm9kZUxvY2F0aW9uKGRlY2xhcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPSBub2RlVGV4dChkZWZpbml0aW9uLCBzb3VyY2UpXG5cbiAgICBpZiAoY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibG9jYWwgYmluZGluZyBjb2xsaWRlcyB3aXRoIGEgY29uc3VtZWQgc291cmNlIGJpbmRpbmdcIiwgbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCB0eXBlID0gY29udmVydFR5cGUodHlwZU5vZGUsIGBMb2NhbCAnJHtuYW1lfSdgLCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVycylcbiAgICBjb25zdCBpbml0aWFsaXplciA9IGNvbnZlcnRFeHByZXNzaW9uKGluaXRpYWxpemVyTm9kZXNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHR5cGUpXG5cbiAgICBjb250ZXh0LmJpbmRpbmdzLnNldChuYW1lLCB0eXBlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgaW5pdGlhbGl6ZXIsXG4gICAgICBraW5kOiBcIkxvY2FsRGVjbGFyYXRpb25cIixcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgbXV0YWJsZTogbW9kaWZpZXJDaGlsZHJlbi5sZW5ndGggPT0gMCxcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlXG4gICAgfSwge25hbWU6IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKSwgb3BlcmF0b3I6IG5vZGVMb2NhdGlvbihhc3NpZ25tZW50LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cblxuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCBhc3NpZ25tZW50ID0gc3RhdGVtZW50LmdldENoaWxkKFwiQXNzaWdubWVudEV4cHJlc3Npb25cIilcblxuICAgIGlmICghYXNzaWdubWVudCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBzdGF0ZW1lbnQubmFtZSwgbG9jYXRpb24pXG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbihhc3NpZ25tZW50KVxuICAgIGNvbnN0IG9wZXJhdG9yID0gYXNzaWdubWVudC5nZXRDaGlsZChcIkFzc2lnbk9wXCIpXG4gICAgY29uc3QgdGFyZ2V0ID0gY2hpbGRyZW5bMF1cbiAgICBjb25zdCBleHByZXNzaW9uID0gY2hpbGRyZW4uYXQoLTEpXG5cbiAgICBpZiAoIW9wZXJhdG9yIHx8IG5vZGVUZXh0KG9wZXJhdG9yLCBzb3VyY2UpICE9IFwiPVwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiY29tcG91bmQgYXNzaWdubWVudFwiLCBub2RlTG9jYXRpb24oYXNzaWdubWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgaWYgKHRhcmdldD8ubmFtZSA9PSBcIkZpZWxkQWNjZXNzXCIgJiYgY29udGV4dC5jdXJyZW50Q2xhc3MpIHtcbiAgICAgIGNvbnN0IHRhcmdldENoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKHRhcmdldClcbiAgICAgIGNvbnN0IHJlY2VpdmVyID0gdGFyZ2V0Q2hpbGRyZW5bMF1cbiAgICAgIGNvbnN0IG1lbWJlciA9IHRhcmdldENoaWxkcmVuWzFdXG4gICAgICBjb25zdCBmaWVsZCA9IHRhcmdldENoaWxkcmVuLmxlbmd0aCA9PSAyICYmIHJlY2VpdmVyPy5uYW1lID09IFwidGhpc1wiICYmIG1lbWJlcj8ubmFtZSA9PSBcIklkZW50aWZpZXJcIlxuICAgICAgICA/IGNvbnRleHQuY3VycmVudENsYXNzLmZpZWxkcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09IG5vZGVUZXh0KG1lbWJlciwgc291cmNlKSlcbiAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKCFmaWVsZCB8fCAhZXhwcmVzc2lvbiB8fCBleHByZXNzaW9uID09IHRhcmdldCB8fCBleHByZXNzaW9uID09IG9wZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJwcml2YXRlIGZpZWxkIHdyaXRlIG91dHNpZGUgdGhlIGRlY2xhcmluZyByZWNlaXZlclwiLCBub2RlTG9jYXRpb24odGFyZ2V0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihleHByZXNzaW9uLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBmaWVsZC50eXBlKSxcbiAgICAgICAgZmllbGQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZmllbGQuaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudFwiKSwgbG9jYXRpb24sXG4gICAgICAgIHJlY2VpdmVyOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY2VpdmVyRXhwcmVzc2lvbn0gKi8gKFxuICAgICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSl9LFxuICAgICAge21lbWJlcjogbm9kZUxvY2F0aW9uKG1lbWJlciwgZmlsZW5hbWUsIHNvdXJjZSksIG9wZXJhdG9yOiBub2RlTG9jYXRpb24ob3BlcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKCF0YXJnZXQgfHwgdGFyZ2V0Lm5hbWUgIT0gXCJJZGVudGlmaWVyXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgdGFyZ2V0Py5uYW1lID8/IFwiYXNzaWdubWVudCB0YXJnZXRcIiwgdGFyZ2V0ID8gbm9kZUxvY2F0aW9uKHRhcmdldCwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbilcbiAgICBpZiAoIWV4cHJlc3Npb24gfHwgZXhwcmVzc2lvbiA9PSB0YXJnZXQgfHwgZXhwcmVzc2lvbiA9PSBvcGVyYXRvcikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImFzc2lnbm1lbnQgZXhwcmVzc2lvblwiLCBub2RlTG9jYXRpb24oYXNzaWdubWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgICBjb25zdCB0YXJnZXRFeHByZXNzaW9uID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24odGFyZ2V0LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWU6IG5vZGVUZXh0KHRhcmdldCwgc291cmNlKVxuICAgIH0sIHtuYW1lOiBub2RlTG9jYXRpb24odGFyZ2V0LCBmaWxlbmFtZSwgc291cmNlKX0pXG5cbiAgICBjb25zdCB0YXJnZXROYW1lID0gbm9kZVRleHQodGFyZ2V0LCBzb3VyY2UpXG4gICAgY29uc3QgYmluZGluZ1R5cGUgPSBjb250ZXh0LmJpbmRpbmdzLmdldCh0YXJnZXROYW1lKVxuICAgIGNvbnN0IHZhbHVlID0gY29udmVydEV4cHJlc3Npb24oZXhwcmVzc2lvbiwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCxcbiAgICAgIGJpbmRpbmdUeXBlPy5raW5kID09IFwiRXJyb3JUeXBlXCIgPyB1bmRlZmluZWQgOiBiaW5kaW5nVHlwZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGV4cHJlc3Npb246IHZhbHVlLFxuICAgICAga2luZDogXCJBc3NpZ25tZW50U3RhdGVtZW50XCIsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHRhcmdldDogdGFyZ2V0RXhwcmVzc2lvblxuICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG9wZXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cblxuICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIHN0YXRlbWVudC5uYW1lLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhoYXVzdGl2ZSBkaXJlY3QgSmF2YSBibG9jayBjaGlsZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBzdGF0ZW1lbnQgLSBKYXZhIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudH0gU2VtYW50aWMgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0U3RhdGVtZW50KHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRSZXR1cm4oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJJZlN0YXRlbWVudFwiKSByZXR1cm4gY29udmVydElmKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiVGhyb3dTdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRKYXZhUmFpc2Uoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJUcnlTdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRKYXZhVHJ5KHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiV2hpbGVTdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRXaGlsZShzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIkVuaGFuY2VkRm9yU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0Rm9yRWFjaChzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIkJyZWFrU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50Lm5hbWUgPT0gXCJDb250aW51ZVN0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgbGFiZWwgPSBzdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJMYWJlbFwiKVxuXG4gICAgaWYgKGxhYmVsKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBsYWJlbGVkICR7c3RhdGVtZW50Lm5hbWUgPT0gXCJCcmVha1N0YXRlbWVudFwiID8gXCJicmVha1wiIDogXCJjb250aW51ZVwifWAsXG4gICAgICBub2RlTG9jYXRpb24obGFiZWwsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGNvbnN0IGtleXdvcmQgPSByZXF1aXJlZENoaWxkKHN0YXRlbWVudCwgc3RhdGVtZW50Lm5hbWUgPT0gXCJCcmVha1N0YXRlbWVudFwiID8gXCJicmVha1wiIDogXCJjb250aW51ZVwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGtleXdvcmQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge1wiQnJlYWtTdGF0ZW1lbnRcIiB8IFwiQ29udGludWVTdGF0ZW1lbnRcIn0gKi8gKFxuICAgICAgICBzdGF0ZW1lbnQubmFtZSA9PSBcIkJyZWFrU3RhdGVtZW50XCIgPyBcIkJyZWFrU3RhdGVtZW50XCIgOiBcIkNvbnRpbnVlU3RhdGVtZW50XCJcbiAgICAgICksXG4gICAgICBsb2NhdGlvblxuICAgIH0sIHtrZXl3b3JkOiBsb2NhdGlvbn0pXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uXCIpIHJldHVybiBjb252ZXJ0TG9jYWxTdGF0ZW1lbnQoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIpIHtcbiAgICBpZiAoc3RhdGVtZW50LmdldENoaWxkKFwiQXNzaWdubWVudEV4cHJlc3Npb25cIikpIHJldHVybiBjb252ZXJ0TG9jYWxTdGF0ZW1lbnQoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIGNvbnN0IGludm9jYXRpb24gPSBzdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJNZXRob2RJbnZvY2F0aW9uXCIpXG5cbiAgICBpZiAoIWludm9jYXRpb24pIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgc3RhdGVtZW50Lm5hbWUsIG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZEFjY2VzcyA9IGludm9jYXRpb24uZ2V0Q2hpbGQoXCJGaWVsZEFjY2Vzc1wiKVxuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBpbnZvY2F0aW9uLmdldENoaWxkKFwiTWV0aG9kTmFtZVwiKVxuXG4gICAgaWYgKCFmaWVsZEFjY2VzcyB8fCAhbWV0aG9kTmFtZSB8fCBub2RlVGV4dChmaWVsZEFjY2Vzcywgc291cmNlKSAhPSBcIlN5c3RlbS5vdXRcIiB8fCBub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpICE9IFwicHJpbnRsblwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHByZXNzaW9uOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhbGxFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTWV0aG9kQ2FsbEV4cHJlc3Npb259ICovIChcbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihpbnZvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgICApLFxuICAgICAgICBraW5kOiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIixcbiAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRQcmludChzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIH1cblxuICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIHN0YXRlbWVudC5uYW1lLCBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBleGFjdCBgdGhyb3cgbmV3IERlY2xhcmVkRXJyb3IobWVzc2FnZSlgLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IHN0YXRlbWVudCAtIEphdmEgdGhyb3cgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJhaXNlU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmV0aHJvd1N0YXRlbWVudH0gU2VtYW50aWMgcmFpc2Ugb3IgcmV0aHJvdy5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFSYWlzZShzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjb25zdHJ1Y3Rpb24gPSBzdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJPYmplY3RDcmVhdGlvbkV4cHJlc3Npb25cIilcbiAgY29uc3QgdHlwZU5vZGUgPSBjb25zdHJ1Y3Rpb24/LmdldENoaWxkKFwiVHlwZU5hbWVcIilcbiAgY29uc3QgYXJndW1lbnRzTm9kZSA9IGNvbnN0cnVjdGlvbj8uZ2V0Q2hpbGQoXCJBcmd1bWVudExpc3RcIilcbiAgY29uc3QgYXJndW1lbnRzXyA9IGFyZ3VtZW50c05vZGUgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRzTm9kZSkgOiBbXVxuICBjb25zdCBkZWNsYXJhdGlvbiA9IHR5cGVOb2RlID8gY29udGV4dC5lcnJvck5hbWVzLmdldChub2RlVGV4dCh0eXBlTm9kZSwgc291cmNlKSkgOiB1bmRlZmluZWRcblxuICBpZiAoIWNvbnN0cnVjdGlvbiAmJiBhcmd1bWVudHNfLmxlbmd0aCA9PSAwKSB7XG4gICAgY29uc3QgdGhyb3dOb2RlID0gcmVxdWlyZWRDaGlsZChzdGF0ZW1lbnQsIFwidGhyb3dcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCByZXRocm93biA9IHN0cnVjdHVyYWxDaGlsZHJlbihzdGF0ZW1lbnQpLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT0gXCJJZGVudGlmaWVyXCIpXG4gICAgY29uc3QgYmluZGluZyA9IHJldGhyb3duID8gY29udGV4dC5iaW5kaW5ncy5nZXQobm9kZVRleHQocmV0aHJvd24sIHNvdXJjZSkpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAocmV0aHJvd24gJiYgYmluZGluZz8ua2luZCA9PSBcIkVycm9yVHlwZVwiICYmIGNvbnRleHQuY2F0Y2hCaW5kaW5nTmFtZXM/Lmhhcyhub2RlVGV4dChyZXRocm93biwgc291cmNlKSkpIHtcbiAgICAgIGNvbnN0IGJpbmRpbmdOb2RlID0gY29udGV4dC5jYXRjaEJpbmRpbmdOb2Rlcz8uZ2V0KG5vZGVUZXh0KHJldGhyb3duLCBzb3VyY2UpKVxuXG4gICAgICBpZiAoIWJpbmRpbmdOb2RlKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidGhyb3cgb2YgYSBjYXRjaCBiaW5kaW5nIHdpdGhvdXQgYW4gZXhhY3QgaGFuZGxlciBiaW5kaW5nXCIsIGxvY2F0aW9uKVxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBiaW5kaW5nOiBub2RlVGV4dChyZXRocm93biwgc291cmNlKSxcbiAgICAgICAgYmluZGluZ05vZGUsXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJldGhyb3dTdGF0ZW1lbnRcIiksXG4gICAgICAgIGxvY2F0aW9uXG4gICAgICB9LCB7a2V5d29yZDogbm9kZUxvY2F0aW9uKHRocm93Tm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgfVxuICBpZiAoIWNvbnN0cnVjdGlvbiB8fCAhdHlwZU5vZGUgfHwgIWFyZ3VtZW50c05vZGUgfHwgIWRlY2xhcmF0aW9uIHx8IGFyZ3VtZW50c18ubGVuZ3RoICE9IDEgfHwgY29uc3RydWN0aW9uLmdldENoaWxkKFwiQ2xhc3NCb2R5XCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInRocm93IG90aGVyIHRoYW4gZXhhY3QgZGVjbGFyZWQgZXJyb3IgY29uc3RydWN0aW9uXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IHR5cGVMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgZXJyb3I6IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZXJyb3I6IHdpdGhQYXJzZXJSYW5nZXMoe2RlY2xhcmF0aW9uSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvclR5cGVcIil9LCB7dHlwZTogdHlwZUxvY2F0aW9ufSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvckNvbnN0cnVjdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oY29uc3RydWN0aW9uLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG1lc3NhZ2U6IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgfSwge3R5cGU6IHR5cGVMb2NhdGlvbn0pLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJhaXNlU3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHtrZXl3b3JkOiBub2RlTG9jYXRpb24ocmVxdWlyZWRDaGlsZChzdGF0ZW1lbnQsIFwidGhyb3dcIiwgZmlsZW5hbWUsIHNvdXJjZSksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgY2F0Y2ggd2l0aCBubyByZXNvdXJjZXMgb3IgZmluYWxseS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBzdGF0ZW1lbnQgLSBKYXZhIHRyeSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHJ5U3RhdGVtZW50fSBTZW1hbnRpYyBleGFjdCBoYW5kbGVyLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SmF2YVRyeShzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBib2R5ID0gc3RhdGVtZW50LmdldENoaWxkKFwiQmxvY2tcIilcbiAgY29uc3QgY2F0Y2hlcyA9IHN0YXRlbWVudC5nZXRDaGlsZHJlbihcIkNhdGNoQ2xhdXNlXCIpXG4gIGNvbnN0IGZpbmFsaXplciA9IHN0YXRlbWVudC5nZXRDaGlsZChcIkZpbmFsbHlDbGF1c2VcIilcblxuICBpZiAoIWJvZHkgfHwgKGNhdGNoZXMubGVuZ3RoID09IDAgJiYgIWZpbmFsaXplcikgfHwgc3RhdGVtZW50LmdldENoaWxkKFwiUmVzb3VyY2VTcGVjaWZpY2F0aW9uXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInRyeSB3aXRob3V0IGNhdGNoZXMgb3IgZmluYWxseSBhbmQgd2l0aG91dCByZXNvdXJjZXNcIiwgbG9jYXRpb24pXG4gIH1cbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYXRjaEhhbmRsZXJbXX0gKi9cbiAgY29uc3QgaGFuZGxlcnMgPSBbXVxuICBjb25zdCBzZWVuSGFuZGxlck5hbWVzID0gbmV3IFNldChjb250ZXh0LmNhdGNoQmluZGluZ05hbWVzID8/IFtdKVxuXG4gIGZvciAoY29uc3QgaGFuZGxlciBvZiBjYXRjaGVzKSB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gaGFuZGxlci5nZXRDaGlsZChcIkNhdGNoRm9ybWFsUGFyYW1ldGVyXCIpXG4gICAgY29uc3QgY2F1Z2h0ID0gcGFyYW1ldGVyPy5nZXRDaGlsZChcIkNhdGNoVHlwZVwiKVxuICAgIGNvbnN0IHR5cGVOb2RlcyA9IGNhdWdodCA/IHN0cnVjdHVyYWxDaGlsZHJlbihjYXVnaHQpIDogW11cbiAgICBjb25zdCBkZWZpbml0aW9uID0gcGFyYW1ldGVyPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcbiAgICBjb25zdCBjYXRjaEJvZHkgPSBoYW5kbGVyLmdldENoaWxkKFwiQmxvY2tcIilcbiAgICBjb25zdCB0eXBlTm9kZSA9IHR5cGVOb2Rlc1swXVxuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gdHlwZU5vZGUgPyBjb250ZXh0LmVycm9yTmFtZXMuZ2V0KG5vZGVUZXh0KHR5cGVOb2RlLCBzb3VyY2UpKSA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKCFwYXJhbWV0ZXIgfHwgIWNhdWdodCB8fCB0eXBlTm9kZXMubGVuZ3RoICE9IDEgfHwgdHlwZU5vZGU/Lm5hbWUgIT0gXCJUeXBlTmFtZVwiIHx8ICFkZWZpbml0aW9uIHx8ICFjYXRjaEJvZHkgfHwgIWRlY2xhcmF0aW9uIHx8XG4gICAgICBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJicm9hZCwgbXVsdGlwbGUsIG9yIG1hbGZvcm1lZCBjYXRjaFwiLCBub2RlTG9jYXRpb24oaGFuZGxlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSBub2RlVGV4dChkZWZpbml0aW9uLCBzb3VyY2UpXG5cbiAgICBpZiAoc2VlbkhhbmRsZXJOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYGNhdGNoIGJpbmRpbmcgJyR7bmFtZX0nIHNoYWRvd3MgYW4gb3V0ZXIgaGFuZGxlciBiaW5kaW5nYCwgbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBzZWVuSGFuZGxlck5hbWVzLmFkZChuYW1lKVxuICAgIGNvbnN0IGNhdWdodExvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGNhdGNoVHlwZSA9IHdpdGhQYXJzZXJSYW5nZXMoe2RlY2xhcmF0aW9uSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvclR5cGVcIil9LCB7XG4gICAgICB0eXBlOiBjYXVnaHRMb2NhdGlvblxuICAgIH0pXG4gICAgY29uc3QgY2F0Y2hDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpLCBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMpLFxuICAgICAgY2F0Y2hCaW5kaW5nTmFtZXM6IG5ldyBTZXQoc2VlbkhhbmRsZXJOYW1lcyksIGNhdGNoQmluZGluZ05vZGVzOiBuZXcgTWFwKGNvbnRleHQuY2F0Y2hCaW5kaW5nTm9kZXMpfVxuXG4gICAgY2F0Y2hDb250ZXh0LmJpbmRpbmdzLnNldChuYW1lLCBjYXRjaFR5cGUpXG4gICAgY29uc3QgY2F0Y2hCaW5kaW5nTm9kZSA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2F0Y2hCaW5kaW5nXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lLFxuICAgICAgdHlwZTogY2F0Y2hUeXBlXG4gICAgfSwge25hbWU6IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG5cbiAgICBjYXRjaENvbnRleHQuY2F0Y2hCaW5kaW5nTm9kZXMuc2V0KG5hbWUsIGNhdGNoQmluZGluZ05vZGUpXG4gICAgaGFuZGxlcnMucHVzaCh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGNhdGNoQmluZGluZzogY2F0Y2hCaW5kaW5nTm9kZSxcbiAgICAgIGNhdGNoQm9keTogY29udmVydEJsb2NrKGNhdGNoQm9keSwgZmlsZW5hbWUsIHNvdXJjZSwgY2F0Y2hDb250ZXh0KSxcbiAgICAgIGNhdGNoVHlwZSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhdGNoSGFuZGxlclwiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oaGFuZGxlciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9LCB7Y2F0Y2g6IG5vZGVMb2NhdGlvbihoYW5kbGVyLCBmaWxlbmFtZSwgc291cmNlKX0pKVxuICB9XG4gIGNvbnN0IGJvZHlDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpLCBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMpfVxuICBjb25zdCBzZW1hbnRpYyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHJ5U3RhdGVtZW50fSAqLyAod2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UsIGJvZHlDb250ZXh0KSxcbiAgICBoYW5kbGVycyxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJUcnlTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb25cbiAgfSwge3RyeTogbm9kZUxvY2F0aW9uKHJlcXVpcmVkQ2hpbGQoc3RhdGVtZW50LCBcInRyeVwiLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSl9KSlcblxuICBpZiAoZmluYWxpemVyKSB7XG4gICAgY29uc3QgZmluYWxseUJsb2NrID0gZmluYWxpemVyLmdldENoaWxkKFwiQmxvY2tcIilcblxuICAgIGlmICghZmluYWxseUJsb2NrKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWFsZm9ybWVkIGZpbmFsbHkgYmxvY2tcIiwgbm9kZUxvY2F0aW9uKGZpbmFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgc2VtYW50aWMuZmluYWxseUJvZHkgPSBjb252ZXJ0QmxvY2soZmluYWxseUJsb2NrLCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dClcbiAgICBzZXRQYXJzZXJSYW5nZXMoc2VtYW50aWMsIHtmaW5hbGx5OiBub2RlTG9jYXRpb24oZmluYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIHRyeTogbm9kZUxvY2F0aW9uKHJlcXVpcmVkQ2hpbGQoc3RhdGVtZW50LCBcInRyeVwiLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG4gIHJldHVybiBzZW1hbnRpY1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGV4YWN0IEphdmEgZW5oYW5jZWQtZm9yIHN5bnRheCBvdmVyIG9uZSByZXNvbHZlZCBgTGlzdDxUPmAuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIEVuaGFuY2VkLWZvciBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaFN0YXRlbWVudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZvckVhY2hNYXBTdGF0ZW1lbnR9IFNlbWFudGljIGxvb3AuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRGb3JFYWNoKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3Qgc3BlYyA9IG5vZGUuZ2V0Q2hpbGQoXCJGb3JTcGVjXCIpXG4gIGNvbnN0IGJvZHkgPSBkaXJlY3RDaGlsZHJlbihub2RlKS5maW5kTGFzdCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJGb3JTcGVjXCIgJiYgY2hpbGQubmFtZSAhPSBcImZvclwiKVxuXG4gIGlmICghc3BlYykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImVuaGFuY2VkIGZvciB3aXRob3V0IHNwZWNpZmljYXRpb25cIiwgbG9jYXRpb24pXG4gIGlmICghYm9keSB8fCBib2R5Lm5hbWUgIT0gXCJCbG9ja1wiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiZW5oYW5jZWQgZm9yIHdpdGhvdXQgYmxvY2sgYm9keVwiLCBib2R5ID8gbm9kZUxvY2F0aW9uKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UpIDogbG9jYXRpb24pXG4gIGNvbnN0IGNoaWxkcmVuID0gZGlyZWN0Q2hpbGRyZW4oc3BlYylcbiAgY29uc3QgY29sb25JbmRleCA9IGNoaWxkcmVuLmZpbmRJbmRleCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gXCI6XCIpXG4gIGNvbnN0IHR5cGVOb2RlID0gY29sb25JbmRleCA+PSAyID8gY2hpbGRyZW5bY29sb25JbmRleCAtIDJdIDogdW5kZWZpbmVkXG4gIGNvbnN0IGJpbmRpbmdOb2RlID0gY29sb25JbmRleCA+PSAyID8gY2hpbGRyZW5bY29sb25JbmRleCAtIDFdIDogdW5kZWZpbmVkXG4gIGNvbnN0IGNvbGxlY3Rpb25Ob2RlID0gY29sb25JbmRleCA+PSAwID8gY2hpbGRyZW5bY29sb25JbmRleCArIDFdIDogdW5kZWZpbmVkXG5cbiAgaWYgKCF0eXBlTm9kZSB8fCAhYmluZGluZ05vZGUgfHwgYmluZGluZ05vZGUubmFtZSAhPSBcIkRlZmluaXRpb25cIiB8fCAhY29sbGVjdGlvbk5vZGUgfHxcbiAgICBjaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC5uYW1lID09IFwiOlwiKS5sZW5ndGggIT0gMSkge1xuICAgIGNvbnN0IHVuc3VwcG9ydGVkID0gYmluZGluZ05vZGUgPz8gY29sbGVjdGlvbk5vZGUgPz8gc3BlY1xuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hbGZvcm1lZCBlbmhhbmNlZCBmb3Igc3BlY2lmaWNhdGlvblwiLCBub2RlTG9jYXRpb24odW5zdXBwb3J0ZWQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGlmIChjaGlsZHJlbi5zb21lKChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PSBcIk1vZGlmaWVyc1wiKSkge1xuICAgIGNvbnN0IG1vZGlmaWVycyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSAqLyAoY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gXCJNb2RpZmllcnNcIikpXG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiZW5oYW5jZWQgZm9yIG1vZGlmaWVyc1wiLCBub2RlTG9jYXRpb24obW9kaWZpZXJzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIGlmIChjb2xsZWN0aW9uTm9kZS5uYW1lID09IFwiTWV0aG9kSW52b2NhdGlvblwiKSB7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IGNvbGxlY3Rpb25Ob2RlLmdldENoaWxkKFwiTWV0aG9kTmFtZVwiKVxuICAgIGNvbnN0IGFyZ3VtZW50TGlzdCA9IGNvbGxlY3Rpb25Ob2RlLmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gICAgY29uc3QgbWFwTm9kZSA9IHN0cnVjdHVyYWxDaGlsZHJlbihjb2xsZWN0aW9uTm9kZSkuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgIGNvbnN0IG1hcFR5cGVfID0gbWFwTm9kZSA/IGtub3duRXhwcmVzc2lvblR5cGUobWFwTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkgOiB1bmRlZmluZWRcblxuICAgIGlmIChtZXRob2ROYW1lICYmIGFyZ3VtZW50TGlzdCAmJiBtYXBOb2RlPy5uYW1lID09IFwiSWRlbnRpZmllclwiICYmXG4gICAgICBub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpID09IFwic2VxdWVuY2VkRW50cnlTZXRcIiAmJiBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KS5sZW5ndGggPT0gMCAmJlxuICAgICAgbWFwVHlwZV8/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiKSB7XG4gICAgICBjb25zdCBlbnRyeVR5cGUgPSB0eXBlTm9kZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbih0eXBlTm9kZSkgOiBbXVxuICAgICAgY29uc3QgZW50cnlBcmd1bWVudHMgPSBlbnRyeVR5cGVbMV0/Lm5hbWUgPT0gXCJUeXBlQXJndW1lbnRzXCIgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oZW50cnlUeXBlWzFdKSA6IFtdXG4gICAgICBjb25zdCBwYXJzZWRLZXlUeXBlID0gZW50cnlBcmd1bWVudHNbMF1cbiAgICAgICAgPyBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChlbnRyeUFyZ3VtZW50c1swXSwgXCJNYXAgZW50cnkga2V5XCIsIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICAgICAgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVycylcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHBhcnNlZFZhbHVlVHlwZSA9IGVudHJ5QXJndW1lbnRzWzFdXG4gICAgICAgID8gY29udmVydEphdmFUeXBlQXJndW1lbnQoZW50cnlBcmd1bWVudHNbMV0sIFwiTWFwIGVudHJ5IHZhbHVlXCIsIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICAgICAgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVycylcbiAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKGVudHJ5VHlwZS5sZW5ndGggIT0gMiB8fCBub2RlVGV4dChlbnRyeVR5cGVbMF0sIHNvdXJjZSkgIT0gXCJqYXZhLnV0aWwuTWFwLkVudHJ5XCIgfHwgZW50cnlBcmd1bWVudHMubGVuZ3RoICE9IDIgfHxcbiAgICAgICAgIXBhcnNlZEtleVR5cGUgfHwgIXBhcnNlZFZhbHVlVHlwZSB8fCAhc2FtZVZhbHVlVHlwZShwYXJzZWRLZXlUeXBlLCBtYXBUeXBlXy5rZXlUeXBlKSB8fFxuICAgICAgICAhc2FtZVZhbHVlVHlwZShwYXJzZWRWYWx1ZVR5cGUsIG1hcFR5cGVfLnZhbHVlVHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9yZGVyZWQtbWFwIGVudHJ5IHR5cGVcIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJvZHlTdGF0ZW1lbnRzID0gc3RydWN0dXJhbENoaWxkcmVuKGJvZHkpXG5cbiAgICAgIGlmIChib2R5U3RhdGVtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvcmRlcmVkLW1hcCBwYWlyIGJpbmRpbmdzXCIsIG5vZGVMb2NhdGlvbihib2R5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVudHJ5TmFtZSA9IG5vZGVUZXh0KGJpbmRpbmdOb2RlLCBzb3VyY2UpXG5cbiAgICAgIGlmIChjb250ZXh0LmJpbmRpbmdzLmhhcyhlbnRyeU5hbWUpIHx8IGNvbnRleHQuZXJhc2VkQmluZGluZ05hbWVzLmhhcyhlbnRyeU5hbWUpKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvcmRlcmVkLW1hcCBlbnRyeSBiaW5kaW5nIGNvbGxpc2lvblwiLCBub2RlTG9jYXRpb24oYmluZGluZ05vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgYm9keUNvbnRleHQgPSB7XG4gICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpLFxuICAgICAgICBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMpLmFkZChlbnRyeU5hbWUpXG4gICAgICB9XG4gICAgICBjb25zdCBrZXlCaW5kaW5nID0gY29udmVydEphdmFNYXBQYWlyQmluZGluZyhcbiAgICAgICAgYm9keVN0YXRlbWVudHNbMF0sIGVudHJ5TmFtZSwgXCJnZXRLZXlcIiwgbWFwVHlwZV8ua2V5VHlwZSwgZmlsZW5hbWUsIHNvdXJjZSwgYm9keUNvbnRleHRcbiAgICAgIClcbiAgICAgIGNvbnN0IHZhbHVlQmluZGluZyA9IGNvbnZlcnRKYXZhTWFwUGFpckJpbmRpbmcoXG4gICAgICAgIGJvZHlTdGF0ZW1lbnRzWzFdLCBlbnRyeU5hbWUsIFwiZ2V0VmFsdWVcIiwgbWFwVHlwZV8udmFsdWVUeXBlLCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dFxuICAgICAgKVxuXG4gICAgICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQoa2V5QmluZGluZy5uYW1lLCBrZXlCaW5kaW5nLnR5cGUpXG4gICAgICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQodmFsdWVCaW5kaW5nLm5hbWUsIHZhbHVlQmluZGluZy50eXBlKVxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQmxvY2tcIiksXG4gICAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihib2R5LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBjb252ZXJ0U3RhdGVtZW50cyhib2R5U3RhdGVtZW50cy5zbGljZSgyKSwgZmlsZW5hbWUsIHNvdXJjZSwgYm9keUNvbnRleHQpXG4gICAgICAgIH0sXG4gICAgICAgIGtleUJpbmRpbmcsXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiksXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICBtYXA6IGNvbnZlcnRFeHByZXNzaW9uKG1hcE5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICB2YWx1ZUJpbmRpbmdcbiAgICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKGNoaWxkcmVuW2NvbG9uSW5kZXhdLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmIChtZXRob2ROYW1lICYmIFtcImVudHJ5U2V0XCIsIFwic2VxdWVuY2VkRW50cnlTZXRcIl0uaW5jbHVkZXMobm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bm9yZGVyZWQgb3IgdW5zdXBwb3J0ZWQgbWFwIGl0ZXJhdGlvblwiLCBub2RlTG9jYXRpb24oY29sbGVjdGlvbk5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgfVxuICBjb25zdCBiaW5kaW5nTG9jYXRpb24gPSBub2RlTG9jYXRpb24oYmluZGluZ05vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGRlY2xhcmVkVHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KHR5cGVOb2RlLCBgSXRlcmF0aW9uIGJpbmRpbmcgJyR7bm9kZVRleHQoYmluZGluZ05vZGUsIHNvdXJjZSl9J2AsIGJpbmRpbmdMb2NhdGlvbixcbiAgICBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGl0ZXJhdGlvbk9wZXJhbmRUeXBlKGtub3duRXhwcmVzc2lvblR5cGUoY29sbGVjdGlvbk5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKVxuXG4gIGlmICghY29sbGVjdGlvblR5cGUgfHwgY29sbGVjdGlvblR5cGUua2luZCAhPSBcIkxpc3RUeXBlXCIgJiYgY29sbGVjdGlvblR5cGUua2luZCAhPSBcIk1hcFR5cGVcIikge1xuICAgIHJldHVybiBtaXNzaW5nVHlwZShcImphdmFcIiwgXCJJdGVyYXRpb24gY29sbGVjdGlvblwiLCBub2RlTG9jYXRpb24oY29sbGVjdGlvbk5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHZhbHVlQmluZGluZyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSxcbiAgICBsb2NhdGlvbjogYmluZGluZ0xvY2F0aW9uLFxuICAgIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgbmFtZTogbm9kZVRleHQoYmluZGluZ05vZGUsIHNvdXJjZSksXG4gICAgdHlwZTogZGVjbGFyZWRUeXBlXG4gIH0sIHtuYW1lOiBiaW5kaW5nTG9jYXRpb259KVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKSwgZXJhc2VkQmluZGluZ05hbWVzOiBuZXcgU2V0KGNvbnRleHQuZXJhc2VkQmluZGluZ05hbWVzKX1cblxuICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQodmFsdWVCaW5kaW5nLm5hbWUsIGl0ZXJhdGlvbkJpbmRpbmdUeXBlKGRlY2xhcmVkVHlwZSwgYmluZGluZ0xvY2F0aW9uKSlcbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IGNvbnZlcnRCbG9jayhib2R5LCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dCksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRm9yRWFjaFN0YXRlbWVudFwiKSxcbiAgICBsaXN0OiBjb252ZXJ0RXhwcmVzc2lvbihjb2xsZWN0aW9uTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgbG9jYXRpb24sXG4gICAgdmFsdWVCaW5kaW5nXG4gIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKGNoaWxkcmVuW2NvbG9uSW5kZXhdLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IGltbXV0YWJsZSBsb2NhbCBleHRyYWN0ZWQgZnJvbSBhIEphdmEgb3JkZXJlZC1tYXAgZW50cnkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gc3RhdGVtZW50IC0gUGFpci1iaW5kaW5nIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGVudHJ5TmFtZSAtIEVuaGFuY2VkLWZvciBlbnRyeSBiaW5kaW5nIG5hbWUuXG4gKiBAcGFyYW0ge1wiZ2V0S2V5XCIgfCBcImdldFZhbHVlXCJ9IGFjY2Vzc29yIC0gUmVxdWlyZWQgZW50cnkgYWNjZXNzb3IuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSBleHBlY3RlZFR5cGUgLSBDYW5vbmljYWwgYmluZGluZyB0eXBlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5WYWx1ZUJpbmRpbmd9IFBhaXIgYmluZGluZy5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFNYXBQYWlyQmluZGluZyhzdGF0ZW1lbnQsIGVudHJ5TmFtZSwgYWNjZXNzb3IsIGV4cGVjdGVkVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1vZGlmaWVycyA9IHN0YXRlbWVudC5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICBjb25zdCBkZWNsYXJhdG9ycyA9IHN0YXRlbWVudC5nZXRDaGlsZHJlbihcIlZhcmlhYmxlRGVjbGFyYXRvclwiKVxuICBjb25zdCBkZWNsYXJhdG9yID0gZGVjbGFyYXRvcnNbMF1cbiAgY29uc3QgZGVmaW5pdGlvbiA9IGRlY2xhcmF0b3I/LmdldENoaWxkKFwiRGVmaW5pdGlvblwiKVxuICBjb25zdCBhc3NpZ25tZW50ID0gZGVjbGFyYXRvcj8uZ2V0Q2hpbGQoXCJBc3NpZ25PcFwiKVxuICBjb25zdCBpbml0aWFsaXplciA9IGRlY2xhcmF0b3JcbiAgICA/IGRpcmVjdENoaWxkcmVuKGRlY2xhcmF0b3IpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiRGVmaW5pdGlvblwiICYmIGNoaWxkLm5hbWUgIT0gXCJBc3NpZ25PcFwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IG1ldGhvZE5hbWUgPSBpbml0aWFsaXplcj8uZ2V0Q2hpbGQoXCJNZXRob2ROYW1lXCIpXG4gIGNvbnN0IGFyZ3VtZW50TGlzdCA9IGluaXRpYWxpemVyPy5nZXRDaGlsZChcIkFyZ3VtZW50TGlzdFwiKVxuICBjb25zdCByZWNlaXZlciA9IGluaXRpYWxpemVyPy5uYW1lID09IFwiTWV0aG9kSW52b2NhdGlvblwiXG4gICAgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oaW5pdGlhbGl6ZXIpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiTWV0aG9kTmFtZVwiICYmIGNoaWxkLm5hbWUgIT0gXCJBcmd1bWVudExpc3RcIilcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCB0eXBlTm9kZSA9IGRlY2xhcmF0aW9uVHlwZShzdGF0ZW1lbnQpXG5cbiAgaWYgKHN0YXRlbWVudC5uYW1lICE9IFwiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uXCIgfHwgbm9kZVRleHQobW9kaWZpZXJzID8/IHN0YXRlbWVudCwgc291cmNlKSAhPSBcImZpbmFsXCIgfHxcbiAgICBkZWNsYXJhdG9ycy5sZW5ndGggIT0gMSB8fCAhZGVmaW5pdGlvbiB8fCAhYXNzaWdubWVudCB8fCBub2RlVGV4dChhc3NpZ25tZW50LCBzb3VyY2UpICE9IFwiPVwiIHx8ICFpbml0aWFsaXplciB8fFxuICAgIGluaXRpYWxpemVyLm5hbWUgIT0gXCJNZXRob2RJbnZvY2F0aW9uXCIgfHwgIW1ldGhvZE5hbWUgfHwgbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSAhPSBhY2Nlc3NvciB8fFxuICAgICFhcmd1bWVudExpc3QgfHwgc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50TGlzdCkubGVuZ3RoICE9IDAgfHwgcmVjZWl2ZXI/Lm5hbWUgIT0gXCJJZGVudGlmaWVyXCIgfHxcbiAgICBub2RlVGV4dChyZWNlaXZlciwgc291cmNlKSAhPSBlbnRyeU5hbWUgfHwgIXR5cGVOb2RlKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgb3JkZXJlZC1tYXAgJHthY2Nlc3Nvcn0gYmluZGluZ2AsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IG5hbWUgPSBub2RlVGV4dChkZWZpbml0aW9uLCBzb3VyY2UpXG5cbiAgaWYgKGNvbnRleHQuZXJhc2VkQmluZGluZ05hbWVzLmhhcyhuYW1lKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYG9yZGVyZWQtbWFwICR7YWNjZXNzb3J9IGJpbmRpbmcgY29sbGlzaW9uYCwgbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHR5cGUgPSBjb252ZXJ0VHlwZSh0eXBlTm9kZSwgYE1hcCBpdGVyYXRpb24gYmluZGluZyAnJHtuYW1lfSdgLCBsb2NhdGlvbixcbiAgICBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuXG4gIGlmICghc2FtZVZhbHVlVHlwZSh0eXBlLCBleHBlY3RlZFR5cGUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgb3JkZXJlZC1tYXAgJHthY2Nlc3Nvcn0gYmluZGluZyB0eXBlYCwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJWYWx1ZUJpbmRpbmdcIiksXG4gICAgbG9jYXRpb24sXG4gICAgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICBuYW1lLFxuICAgIHR5cGVcbiAgfSwge25hbWU6IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogUmVzb2x2ZXMgZXhwcmVzc2lvbiB0eXBlcyBlc3RhYmxpc2hlZCBieSBKYXZhIGRlY2xhcmF0aW9ucyBhbmQgZnVuY3Rpb24gc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gUGFyc2VyIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JUeXBlIHwgdW5kZWZpbmVkfSBLbm93biB0eXBlLlxuICovXG5mdW5jdGlvbiBrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgaWYgKG5vZGUubmFtZSA9PSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKVxuXG4gICAgcmV0dXJuIGNoaWxkcmVuLmxlbmd0aCA9PSAxID8ga25vd25FeHByZXNzaW9uVHlwZShjaGlsZHJlblswXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkgOiB1bmRlZmluZWRcbiAgfVxuICBpZiAobm9kZS5uYW1lID09IFwidGhpc1wiICYmIGNvbnRleHQuY3VycmVudENsYXNzPy5pZCkge1xuICAgIHJldHVybiB7ZGVjbGFyYXRpb25JZDogY29udGV4dC5jdXJyZW50Q2xhc3MuaWQsIGtpbmQ6IFwiUmVmZXJlbmNlVHlwZVwifVxuICB9XG4gIGlmIChub2RlLm5hbWUgPT0gXCJJZGVudGlmaWVyXCIpIHJldHVybiBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlVGV4dChub2RlLCBzb3VyY2UpKVxuICBpZiAobm9kZS5uYW1lID09IFwiRmllbGRBY2Nlc3NcIiAmJiBjb250ZXh0LmN1cnJlbnRDbGFzcykge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09IDIgJiYgY2hpbGRyZW5bMF0ubmFtZSA9PSBcInRoaXNcIiAmJiBjaGlsZHJlblsxXS5uYW1lID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICByZXR1cm4gY29udGV4dC5jdXJyZW50Q2xhc3MuZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5uYW1lID09IG5vZGVUZXh0KGNoaWxkcmVuWzFdLCBzb3VyY2UpKT8udHlwZVxuICAgIH1cbiAgfVxuICBpZiAobm9kZS5uYW1lID09IFwiTWV0aG9kSW52b2NhdGlvblwiKSB7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IG5vZGUuZ2V0Q2hpbGQoXCJNZXRob2ROYW1lXCIpXG4gICAgY29uc3QgYXJndW1lbnRMaXN0ID0gbm9kZS5nZXRDaGlsZChcIkFyZ3VtZW50TGlzdFwiKVxuICAgIGNvbnN0IHJlY2VpdmVyID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiTWV0aG9kTmFtZVwiICYmIGNoaWxkLm5hbWUgIT0gXCJBcmd1bWVudExpc3RcIilcblxuICAgIGlmIChtZXRob2ROYW1lICYmICFyZWNlaXZlcikge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkpXG4gICAgICBjb25zdCBhcmd1bWVudHNfID0gYXJndW1lbnRMaXN0ID8gc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50TGlzdCkgOiBbXVxuXG4gICAgICBpZiAoc2lnbmF0dXJlKSByZXR1cm4ga25vd25DYWxsUmV0dXJuVHlwZShzaWduYXR1cmUsIGFyZ3VtZW50c18ubWFwKChhcmd1bWVudCkgPT5cbiAgICAgICAga25vd25FeHByZXNzaW9uVHlwZShhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpKVxuICAgIH1cbiAgICBpZiAobWV0aG9kTmFtZSAmJiByZWNlaXZlcikge1xuICAgICAgY29uc3QgcmVjZWl2ZXJUeXBlID0ga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcblxuICAgICAgaWYgKHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIikge1xuICAgICAgICByZXR1cm4gY29udGV4dC5jbGFzc2VzLmdldChyZWNlaXZlclR5cGUuZGVjbGFyYXRpb25JZCk/Lm1ldGhvZHMuZmluZCgobWV0aG9kKSA9PlxuICAgICAgICAgIG1ldGhvZC5uYW1lID09IG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkpPy5yZXR1cm5UeXBlXG4gICAgICB9XG4gICAgICBjb25zdCBxdWFsaWZpZWQgPSBgJHtub2RlVGV4dChyZWNlaXZlciwgc291cmNlKX0uJHtub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpfWBcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChxdWFsaWZpZWQpXG4gICAgICBjb25zdCBhcmd1bWVudHNfID0gYXJndW1lbnRMaXN0ID8gc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50TGlzdCkgOiBbXVxuICAgICAgY29uc3QgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZSA/IGtub3duQ2FsbFJldHVyblR5cGUoc2lnbmF0dXJlLCBhcmd1bWVudHNfLm1hcCgoYXJndW1lbnQpID0+XG4gICAgICAgIGtub3duRXhwcmVzc2lvblR5cGUoYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKSkgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKHJldHVyblR5cGUpIHJldHVybiByZXR1cm5UeXBlXG4gICAgfVxuICAgIGlmIChtZXRob2ROYW1lICYmIHJlY2VpdmVyICYmIGFyZ3VtZW50TGlzdCAmJiBub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpID09IFwiZ2V0XCIpIHtcbiAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KVxuICAgICAgY29uc3QgcmVjZWl2ZXJUeXBlID0ga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcblxuICAgICAgaWYgKGFyZ3VtZW50c18ubGVuZ3RoID09IDAgJiYgcmVjZWl2ZXIubmFtZSA9PSBcIklkZW50aWZpZXJcIiAmJiByZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgICAgICByZXR1cm4gcmVjZWl2ZXJUeXBlLnZhbHVlVHlwZVxuICAgICAgfVxuICAgICAgaWYgKGFyZ3VtZW50c18ubGVuZ3RoID09IDEgJiYgcmVjZWl2ZXJUeXBlPy5raW5kID09IFwiTGlzdFR5cGVcIikgcmV0dXJuIHJlY2VpdmVyVHlwZS5lbGVtZW50VHlwZVxuICAgICAgaWYgKGFyZ3VtZW50c18ubGVuZ3RoID09IDEgJiYgKHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCByZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiKSkge1xuICAgICAgICByZXR1cm4gcmVjZWl2ZXJUeXBlLnZhbHVlVHlwZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAobWV0aG9kTmFtZSAmJiByZWNlaXZlciAmJiBhcmd1bWVudExpc3QgJiYgc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50TGlzdCkubGVuZ3RoID09IDApIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVyVHlwZSA9IGtub3duRXhwcmVzc2lvblR5cGUocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG5cbiAgICAgIGlmIChyZWNlaXZlclR5cGU/LmtpbmQgIT0gXCJSZWNvcmRUeXBlXCIpIHJldHVybiB1bmRlZmluZWRcbiAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY29udGV4dC5yZWNvcmRzLmdldChyZWNlaXZlclR5cGUuZGVjbGFyYXRpb25JZClcbiAgICAgIGNvbnN0IGluZGV4ID0gZGVjbGFyYXRpb24/LmZpZWxkcy5maW5kSW5kZXgoKGZpZWxkKSA9PiBmaWVsZC5uYW1lID09IG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkpID8/IC0xXG5cbiAgICAgIHJldHVybiBkZWNsYXJhdGlvbiA/IGluc3RhbnRpYXRlZFJlY29yZEZpZWxkVHlwZShkZWNsYXJhdGlvbiwgcmVjZWl2ZXJUeXBlLmFyZ3VtZW50cywgaW5kZXgpIDogdW5kZWZpbmVkXG4gICAgfVxuICB9XG4gIGlmIChub2RlLm5hbWUgPT0gXCJPYmplY3RDcmVhdGlvbkV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IHR5cGVOb2RlID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpLmZpbmQoKGNoaWxkKSA9PiBbXCJHZW5lcmljVHlwZVwiLCBcIlR5cGVOYW1lXCIsIFwiU2NvcGVkVHlwZU5hbWVcIl0uaW5jbHVkZXMoY2hpbGQubmFtZSkpXG4gICAgY29uc3QgbmFtZU5vZGUgPSB0eXBlTm9kZT8ubmFtZSA9PSBcIkdlbmVyaWNUeXBlXCIgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4odHlwZU5vZGUpWzBdIDogdHlwZU5vZGVcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IG5hbWVOb2RlID8gY29udGV4dC5yZWNvcmROYW1lcy5nZXQobm9kZVRleHQobmFtZU5vZGUsIHNvdXJjZSkpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoZGVjbGFyYXRpb24/LmlkICYmIHR5cGVOb2RlKSB7XG4gICAgICBjb25zdCB0eXBlQXJndW1lbnRzTm9kZSA9IHR5cGVOb2RlPy5nZXRDaGlsZChcIlR5cGVBcmd1bWVudHNcIilcbiAgICAgIGNvbnN0IHR5cGVBcmd1bWVudHMgPSB0eXBlQXJndW1lbnRzTm9kZVxuICAgICAgICA/IHN0cnVjdHVyYWxDaGlsZHJlbih0eXBlQXJndW1lbnRzTm9kZSkubWFwKChhcmd1bWVudCkgPT4gY29udmVydEphdmFUeXBlQXJndW1lbnQoXG4gICAgICAgICAgYXJndW1lbnQsXG4gICAgICAgICAgYFJlY29yZCAnJHtkZWNsYXJhdGlvbi5uYW1lfScgYXBwbGljYXRpb25gLFxuICAgICAgICAgIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICAgIGNvbnRleHQucmVjb3JkTmFtZXMsXG4gICAgICAgICAgY29udGV4dC50eXBlUGFyYW1ldGVyc1xuICAgICAgICApKVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gZGVjbGFyYXRpb24ua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIlxuICAgICAgICA/IHtkZWNsYXJhdGlvbklkOiBkZWNsYXJhdGlvbi5pZCwga2luZDogXCJSZWZlcmVuY2VUeXBlXCJ9XG4gICAgICAgIDoge2RlY2xhcmF0aW9uSWQ6IGRlY2xhcmF0aW9uLmlkLCBraW5kOiBcIlJlY29yZFR5cGVcIiwgLi4uKHR5cGVBcmd1bWVudHMgPyB7YXJndW1lbnRzOiB0eXBlQXJndW1lbnRzfSA6IHt9KX1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQ29udmVydHMgZGlyZWN0IHN0cnVjdHVyYWwgY2hpbGRyZW4gb2Ygb25lIEphdmEgYmxvY2sgaW4gc291cmNlIG9yZGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBKYXZhIEJsb2NrIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gU2VtYW50aWMgYmxvY2suXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRCbG9jayhub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGlmIChub2RlLm5hbWUgIT0gXCJCbG9ja1wiICYmIG5vZGUubmFtZSAhPSBcIkNvbnN0cnVjdG9yQm9keVwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgZXhwZWN0ZWQgYmxvY2ssIHJlY2VpdmVkICR7bm9kZS5uYW1lfWAsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAga2luZDogXCJCbG9ja1wiLFxuICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgc3RhdGVtZW50czogY29udmVydFN0YXRlbWVudHMoc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBKYXZhIHN0YXRlbWVudCBzZXF1ZW5jZSwgZm9sZGluZyB0aGUgZXhhY3QgcHJvdGVjdGVkIG9yZGVyZWQtbWFwIGNvbnN0cnVjdGlvbiBwcm9maWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGVbXX0gc3RhdGVtZW50cyAtIERpcmVjdCBibG9jayBzdGF0ZW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50W119IFNlbWFudGljIHN0YXRlbWVudHMuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTdGF0ZW1lbnRzKHN0YXRlbWVudHMsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgY29udmVydGVkID0gW11cblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc3RhdGVtZW50cy5sZW5ndGg7KSB7XG4gICAgY29uc3Qgb3JkZXJlZCA9IGNvbnZlcnRKYXZhT3JkZXJlZE1hcFNlcXVlbmNlKHN0YXRlbWVudHMsIGluZGV4LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgaWYgKG9yZGVyZWQpIHtcbiAgICAgIGNvbnZlcnRlZC5wdXNoKG9yZGVyZWQuc3RhdGVtZW50KVxuICAgICAgaW5kZXggPSBvcmRlcmVkLm5leHRJbmRleFxuICAgIH0gZWxzZSB7XG4gICAgICBjb252ZXJ0ZWQucHVzaChjb252ZXJ0U3RhdGVtZW50KHN0YXRlbWVudHNbaW5kZXhdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSlcbiAgICAgIGluZGV4ICs9IDFcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29udmVydGVkXG59XG5cbi8qKlxuICogUmVjb2duaXplcyBjb25zdHJ1Y3Rpb24gdGhyb3VnaCBhIHByaXZhdGUgTGlua2VkSGFzaE1hcCBiYWNraW5nIGZvbGxvd2VkIGJ5IGFuIHVubW9kaWZpYWJsZSBTZXF1ZW5jZWRNYXAgYm91bmRhcnkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZVtdfSBzdGF0ZW1lbnRzIC0gRGlyZWN0IGJsb2NrIHN0YXRlbWVudHMuXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgLSBDYW5kaWRhdGUgYmFja2luZy1kZWNsYXJhdGlvbiBpbmRleC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge3tzdGF0ZW1lbnQ6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkxvY2FsRGVjbGFyYXRpb24sIG5leHRJbmRleDogbnVtYmVyfSB8IHVuZGVmaW5lZH0gRm9sZGVkIGRlY2xhcmF0aW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SmF2YU9yZGVyZWRNYXBTZXF1ZW5jZShzdGF0ZW1lbnRzLCBzdGFydCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBiYWNraW5nU3RhdGVtZW50ID0gc3RhdGVtZW50c1tzdGFydF1cbiAgY29uc3QgYmFja2luZ1R5cGVOb2RlID0gYmFja2luZ1N0YXRlbWVudD8ubmFtZSA9PSBcIkxvY2FsVmFyaWFibGVEZWNsYXJhdGlvblwiID8gZGVjbGFyYXRpb25UeXBlKGJhY2tpbmdTdGF0ZW1lbnQpIDogbnVsbFxuICBjb25zdCBiYWNraW5nVHlwZUNoaWxkcmVuID0gYmFja2luZ1R5cGVOb2RlPy5uYW1lID09IFwiR2VuZXJpY1R5cGVcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbihiYWNraW5nVHlwZU5vZGUpIDogW11cblxuICBpZiAoYmFja2luZ1R5cGVDaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBub2RlVGV4dChiYWNraW5nVHlwZUNoaWxkcmVuWzBdLCBzb3VyY2UpICE9IFwiamF2YS51dGlsLkxpbmtlZEhhc2hNYXBcIikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGJhY2tpbmdTdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGJhY2tpbmdNb2RpZmllcnMgPSBiYWNraW5nU3RhdGVtZW50LmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IGJhY2tpbmdEZWNsYXJhdG9ycyA9IGJhY2tpbmdTdGF0ZW1lbnQuZ2V0Q2hpbGRyZW4oXCJWYXJpYWJsZURlY2xhcmF0b3JcIilcbiAgY29uc3QgYmFja2luZ0RlY2xhcmF0b3IgPSBiYWNraW5nRGVjbGFyYXRvcnNbMF1cbiAgY29uc3QgYmFja2luZ0RlZmluaXRpb24gPSBiYWNraW5nRGVjbGFyYXRvcj8uZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gIGNvbnN0IGJhY2tpbmdBc3NpZ25tZW50ID0gYmFja2luZ0RlY2xhcmF0b3I/LmdldENoaWxkKFwiQXNzaWduT3BcIilcbiAgY29uc3QgYmFja2luZ0luaXRpYWxpemVyID0gYmFja2luZ0RlY2xhcmF0b3JcbiAgICA/IGRpcmVjdENoaWxkcmVuKGJhY2tpbmdEZWNsYXJhdG9yKS5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIkRlZmluaXRpb25cIiAmJiBjaGlsZC5uYW1lICE9IFwiQXNzaWduT3BcIilcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCBjb25zdHJ1Y3Rpb25UeXBlID0gYmFja2luZ0luaXRpYWxpemVyPy5uYW1lID09IFwiT2JqZWN0Q3JlYXRpb25FeHByZXNzaW9uXCJcbiAgICA/IHN0cnVjdHVyYWxDaGlsZHJlbihiYWNraW5nSW5pdGlhbGl6ZXIpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lID09IFwiR2VuZXJpY1R5cGVcIilcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCBjb25zdHJ1Y3Rpb25UeXBlQ2hpbGRyZW4gPSBjb25zdHJ1Y3Rpb25UeXBlID8gc3RydWN0dXJhbENoaWxkcmVuKGNvbnN0cnVjdGlvblR5cGUpIDogW11cbiAgY29uc3QgY29uc3RydWN0aW9uQXJndW1lbnRzID0gYmFja2luZ0luaXRpYWxpemVyPy5nZXRDaGlsZChcIkFyZ3VtZW50TGlzdFwiKVxuICBjb25zdCBiYWNraW5nQXJndW1lbnRzTm9kZSA9IGJhY2tpbmdUeXBlQ2hpbGRyZW5bMV1cbiAgY29uc3QgYmFja2luZ0FyZ3VtZW50cyA9IGJhY2tpbmdBcmd1bWVudHNOb2RlPy5uYW1lID09IFwiVHlwZUFyZ3VtZW50c1wiID8gc3RydWN0dXJhbENoaWxkcmVuKGJhY2tpbmdBcmd1bWVudHNOb2RlKSA6IFtdXG5cbiAgaWYgKG5vZGVUZXh0KGJhY2tpbmdNb2RpZmllcnMgPz8gYmFja2luZ1N0YXRlbWVudCwgc291cmNlKSAhPSBcImZpbmFsXCIgfHwgYmFja2luZ0RlY2xhcmF0b3JzLmxlbmd0aCAhPSAxIHx8XG4gICAgIWJhY2tpbmdEZWZpbml0aW9uIHx8ICFiYWNraW5nQXNzaWdubWVudCB8fCBub2RlVGV4dChiYWNraW5nQXNzaWdubWVudCwgc291cmNlKSAhPSBcIj1cIiB8fCAhYmFja2luZ0luaXRpYWxpemVyIHx8XG4gICAgYmFja2luZ0luaXRpYWxpemVyLm5hbWUgIT0gXCJPYmplY3RDcmVhdGlvbkV4cHJlc3Npb25cIiB8fCBiYWNraW5nSW5pdGlhbGl6ZXIuZ2V0Q2hpbGQoXCJDbGFzc0JvZHlcIikgfHxcbiAgICBjb25zdHJ1Y3Rpb25UeXBlQ2hpbGRyZW4ubGVuZ3RoICE9IDIgfHwgbm9kZVRleHQoY29uc3RydWN0aW9uVHlwZUNoaWxkcmVuWzBdLCBzb3VyY2UpICE9IFwiamF2YS51dGlsLkxpbmtlZEhhc2hNYXBcIiB8fFxuICAgIHN0cnVjdHVyYWxDaGlsZHJlbihjb25zdHJ1Y3Rpb25UeXBlQ2hpbGRyZW5bMV0pLmxlbmd0aCAhPSAwIHx8ICFjb25zdHJ1Y3Rpb25Bcmd1bWVudHMgfHxcbiAgICBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY29uc3RydWN0aW9uQXJndW1lbnRzKS5sZW5ndGggIT0gMCB8fCBiYWNraW5nQXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9yZGVyZWQtbWFwIExpbmtlZEhhc2hNYXAgYmFja2luZ1wiLCBsb2NhdGlvbilcbiAgfVxuXG4gIGNvbnN0IGJhY2tpbmdOYW1lID0gbm9kZVRleHQoYmFja2luZ0RlZmluaXRpb24sIHNvdXJjZSlcblxuICBpZiAoY29udGV4dC5iaW5kaW5ncy5oYXMoYmFja2luZ05hbWUpIHx8IGNvbnRleHQuZXJhc2VkQmluZGluZ05hbWVzLmhhcyhiYWNraW5nTmFtZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3JkZXJlZC1tYXAgYmFja2luZyBiaW5kaW5nIGNvbGxpc2lvblwiLCBub2RlTG9jYXRpb24oYmFja2luZ0RlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGtleVR5cGUgPSBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChiYWNraW5nQXJndW1lbnRzWzBdLCBcIk9yZGVyZWQgbWFwIGtleVwiLCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuICBjb25zdCB2YWx1ZVR5cGUgPSBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChiYWNraW5nQXJndW1lbnRzWzFdLCBcIk9yZGVyZWQgbWFwIHZhbHVlXCIsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLFxuICAgIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gIGNvbnN0IGVudHJpZXMgPSBbXVxuICBsZXQgaW5kZXggPSBzdGFydCArIDFcblxuICB3aGlsZSAoaW5kZXggPCBzdGF0ZW1lbnRzLmxlbmd0aCkge1xuICAgIGNvbnN0IHB1dFN0YXRlbWVudCA9IHN0YXRlbWVudHNbaW5kZXhdXG4gICAgY29uc3QgaW52b2NhdGlvbiA9IHB1dFN0YXRlbWVudC5uYW1lID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiID8gcHV0U3RhdGVtZW50LmdldENoaWxkKFwiTWV0aG9kSW52b2NhdGlvblwiKSA6IG51bGxcbiAgICBjb25zdCBtZXRob2ROYW1lID0gaW52b2NhdGlvbj8uZ2V0Q2hpbGQoXCJNZXRob2ROYW1lXCIpXG4gICAgY29uc3QgYXJndW1lbnRMaXN0ID0gaW52b2NhdGlvbj8uZ2V0Q2hpbGQoXCJBcmd1bWVudExpc3RcIilcbiAgICBjb25zdCByZWNlaXZlciA9IGludm9jYXRpb25cbiAgICAgID8gc3RydWN0dXJhbENoaWxkcmVuKGludm9jYXRpb24pLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiTWV0aG9kTmFtZVwiICYmIGNoaWxkLm5hbWUgIT0gXCJBcmd1bWVudExpc3RcIilcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoIWludm9jYXRpb24gfHwgcmVjZWl2ZXI/Lm5hbWUgIT0gXCJJZGVudGlmaWVyXCIgfHwgbm9kZVRleHQocmVjZWl2ZXIsIHNvdXJjZSkgIT0gYmFja2luZ05hbWUgfHxcbiAgICAgICFtZXRob2ROYW1lIHx8IG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkgIT0gXCJwdXRcIikgYnJlYWtcbiAgICBjb25zdCBhcmd1bWVudHNfID0gYXJndW1lbnRMaXN0ID8gc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50TGlzdCkgOiBbXVxuXG4gICAgaWYgKGFyZ3VtZW50c18ubGVuZ3RoICE9IDIgfHwgYXJndW1lbnRzX1swXS5uYW1lICE9IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3JkZXJlZC1tYXAgcHV0XCIsIG5vZGVMb2NhdGlvbihwdXRTdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBlbnRyaWVzLnB1c2god2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBrZXk6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RyaW5nTGl0ZXJhbH0gKi8gKFxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBrZXlUeXBlKVxuICAgICAgKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1hcEVudHJ5XCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihpbnZvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIHZhbHVlOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudHNfWzFdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB2YWx1ZVR5cGUpXG4gICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSl9KSlcbiAgICBpbmRleCArPSAxXG4gIH1cblxuICBjb25zdCBzZWFsU3RhdGVtZW50ID0gc3RhdGVtZW50c1tpbmRleF1cbiAgY29uc3Qgc2VhbFR5cGVOb2RlID0gc2VhbFN0YXRlbWVudD8ubmFtZSA9PSBcIkxvY2FsVmFyaWFibGVEZWNsYXJhdGlvblwiID8gZGVjbGFyYXRpb25UeXBlKHNlYWxTdGF0ZW1lbnQpIDogbnVsbFxuICBjb25zdCBzZWFsRGVjbGFyYXRvcnMgPSBzZWFsU3RhdGVtZW50Py5uYW1lID09IFwiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uXCIgPyBzZWFsU3RhdGVtZW50LmdldENoaWxkcmVuKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpIDogW11cbiAgY29uc3Qgc2VhbERlY2xhcmF0b3IgPSBzZWFsRGVjbGFyYXRvcnNbMF1cbiAgY29uc3Qgc2VhbERlZmluaXRpb24gPSBzZWFsRGVjbGFyYXRvcj8uZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gIGNvbnN0IHNlYWxBc3NpZ25tZW50ID0gc2VhbERlY2xhcmF0b3I/LmdldENoaWxkKFwiQXNzaWduT3BcIilcbiAgY29uc3Qgc2VhbEluaXRpYWxpemVyID0gc2VhbERlY2xhcmF0b3JcbiAgICA/IGRpcmVjdENoaWxkcmVuKHNlYWxEZWNsYXJhdG9yKS5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIkRlZmluaXRpb25cIiAmJiBjaGlsZC5uYW1lICE9IFwiQXNzaWduT3BcIilcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCBzZWFsTWV0aG9kID0gc2VhbEluaXRpYWxpemVyPy5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgY29uc3Qgc2VhbEFyZ3VtZW50c05vZGUgPSBzZWFsSW5pdGlhbGl6ZXI/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IHNlYWxBcmd1bWVudHMgPSBzZWFsQXJndW1lbnRzTm9kZSA/IHN0cnVjdHVyYWxDaGlsZHJlbihzZWFsQXJndW1lbnRzTm9kZSkgOiBbXVxuICBjb25zdCBzZWFsUmVjZWl2ZXIgPSBzZWFsSW5pdGlhbGl6ZXI/Lm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCJcbiAgICA/IHN0cnVjdHVyYWxDaGlsZHJlbihzZWFsSW5pdGlhbGl6ZXIpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiTWV0aG9kTmFtZVwiICYmIGNoaWxkLm5hbWUgIT0gXCJBcmd1bWVudExpc3RcIilcbiAgICA6IHVuZGVmaW5lZFxuXG4gIGlmICghc2VhbFN0YXRlbWVudCB8fCBub2RlVGV4dChzZWFsU3RhdGVtZW50LmdldENoaWxkKFwiTW9kaWZpZXJzXCIpID8/IHNlYWxTdGF0ZW1lbnQsIHNvdXJjZSkgIT0gXCJmaW5hbFwiIHx8XG4gICAgIXNlYWxUeXBlTm9kZSB8fCBzZWFsRGVjbGFyYXRvcnMubGVuZ3RoICE9IDEgfHwgIXNlYWxEZWZpbml0aW9uIHx8ICFzZWFsQXNzaWdubWVudCB8fCBub2RlVGV4dChzZWFsQXNzaWdubWVudCwgc291cmNlKSAhPSBcIj1cIiB8fFxuICAgIHNlYWxJbml0aWFsaXplcj8ubmFtZSAhPSBcIk1ldGhvZEludm9jYXRpb25cIiB8fCBub2RlVGV4dChzZWFsUmVjZWl2ZXIgPz8gc2VhbFN0YXRlbWVudCwgc291cmNlKSAhPSBcImphdmEudXRpbC5Db2xsZWN0aW9uc1wiIHx8XG4gICAgIXNlYWxNZXRob2QgfHwgbm9kZVRleHQoc2VhbE1ldGhvZCwgc291cmNlKSAhPSBcInVubW9kaWZpYWJsZVNlcXVlbmNlZE1hcFwiIHx8IHNlYWxBcmd1bWVudHMubGVuZ3RoICE9IDEgfHxcbiAgICBzZWFsQXJndW1lbnRzWzBdLm5hbWUgIT0gXCJJZGVudGlmaWVyXCIgfHwgbm9kZVRleHQoc2VhbEFyZ3VtZW50c1swXSwgc291cmNlKSAhPSBiYWNraW5nTmFtZSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvcmRlcmVkLW1hcCB1bm1vZGlmaWFibGUgU2VxdWVuY2VkTWFwIGJvdW5kYXJ5XCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IG5hbWUgPSBub2RlVGV4dChzZWFsRGVmaW5pdGlvbiwgc291cmNlKVxuXG4gIGlmIChuYW1lID09IGJhY2tpbmdOYW1lKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9yZGVyZWQtbWFwIGJvdW5kYXJ5IGJpbmRpbmcgY29sbGlzaW9uXCIsIG5vZGVMb2NhdGlvbihzZWFsRGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgYm91bmRhcnlUeXBlID0gY29udmVydFR5cGUoc2VhbFR5cGVOb2RlLCBgTG9jYWwgJyR7bmFtZX0nYCwgbm9kZUxvY2F0aW9uKHNlYWxTdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gIGNvbnN0IHNlYWxUeXBlQ2hpbGRyZW4gPSBzZWFsVHlwZU5vZGUubmFtZSA9PSBcIkdlbmVyaWNUeXBlXCIgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oc2VhbFR5cGVOb2RlKSA6IFtdXG4gIGNvbnN0IHNlYWxUeXBlQXJndW1lbnRzID0gc2VhbFR5cGVDaGlsZHJlblsxXT8ubmFtZSA9PSBcIlR5cGVBcmd1bWVudHNcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbihzZWFsVHlwZUNoaWxkcmVuWzFdKSA6IFtdXG5cbiAgaWYgKHNlYWxUeXBlQ2hpbGRyZW4ubGVuZ3RoICE9IDIgfHwgbm9kZVRleHQoc2VhbFR5cGVDaGlsZHJlblswXSwgc291cmNlKSAhPSBcImphdmEudXRpbC5TZXF1ZW5jZWRNYXBcIiB8fFxuICAgIHNlYWxUeXBlQXJndW1lbnRzLmxlbmd0aCAhPSAyIHx8IGJvdW5kYXJ5VHlwZS5raW5kICE9IFwiTWFwVHlwZVwiIHx8ICFzYW1lVmFsdWVUeXBlKGJvdW5kYXJ5VHlwZS5rZXlUeXBlLCBrZXlUeXBlKSB8fFxuICAgICFzYW1lVmFsdWVUeXBlKGJvdW5kYXJ5VHlwZS52YWx1ZVR5cGUsIHZhbHVlVHlwZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3JkZXJlZC1tYXAgYm91bmRhcnkgdHlwZSBtaXNtYXRjaFwiLCBub2RlTG9jYXRpb24oc2VhbFR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCB0eXBlID0gb3JkZXJlZE1hcFR5cGUoXG4gICAgYm91bmRhcnlUeXBlLmtleVR5cGUsXG4gICAgYm91bmRhcnlUeXBlLnZhbHVlVHlwZSxcbiAgICBub2RlTG9jYXRpb24oc2VhbFR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBub2RlTG9jYXRpb24oc2VhbFR5cGVBcmd1bWVudHNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5vZGVMb2NhdGlvbihzZWFsVHlwZUFyZ3VtZW50c1sxXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgKVxuXG4gIGNvbnRleHQuYmluZGluZ3Muc2V0KG5hbWUsIHR5cGUpXG4gIGNvbnRleHQuZXJhc2VkQmluZGluZ05hbWVzLmFkZChiYWNraW5nTmFtZSlcbiAgcmV0dXJuIHtcbiAgICBuZXh0SW5kZXg6IGluZGV4ICsgMSxcbiAgICBzdGF0ZW1lbnQ6IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgaW5pdGlhbGl6ZXI6IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBlbnRyaWVzLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKSxcbiAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgYmFja2luZ0luaXRpYWxpemVyLmZyb20sIHNlYWxJbml0aWFsaXplci50bylcbiAgICAgIH0sIHtmYWN0b3J5OiBub2RlTG9jYXRpb24oYmFja2luZ0luaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKX0pLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTG9jYWxEZWNsYXJhdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIGJhY2tpbmdTdGF0ZW1lbnQuZnJvbSwgc2VhbFN0YXRlbWVudC50byksXG4gICAgICBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgICAgbmFtZSxcbiAgICAgIHR5cGVcbiAgICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKHNlYWxEZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKSwgb3BlcmF0b3I6IG5vZGVMb2NhdGlvbihzZWFsQXNzaWdubWVudCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG59XG5cbi8qKlxuICogUmVxdWlyZXMgYW4gZXhhY3QgSmF2YSBzY2FsYXIgdHlwZSBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGUgfCBudWxsfSBzb3VyY2VUeXBlIC0gSmF2YSB0eXBlIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3ViamVjdCAtIFR5cGVkIHN1YmplY3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JbnRlcmZhY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gU2VtYW50aWMgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGUoc291cmNlVHlwZSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBpZiAoIXNvdXJjZVR5cGUpIHJldHVybiBtaXNzaW5nVHlwZShcImphdmFcIiwgc3ViamVjdCwgbG9jYXRpb24pXG4gIGlmIChzb3VyY2VUeXBlLm5hbWUgPT0gXCJ2b2lkXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ2b2lkIHZhbHVlIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBpZiAoc291cmNlVHlwZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKHNvdXJjZVR5cGUpXG4gICAgY29uc3QgbmFtZU5vZGUgPSBjaGlsZHJlblswXVxuICAgIGNvbnN0IGFyZ3VtZW50c05vZGUgPSBjaGlsZHJlblsxXVxuXG4gICAgaWYgKCFuYW1lTm9kZSB8fCAhYXJndW1lbnRzTm9kZSB8fCBhcmd1bWVudHNOb2RlLm5hbWUgIT0gXCJUeXBlQXJndW1lbnRzXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgZ2VuZXJpYyBjb2xsZWN0aW9uIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBuYW1lID0gbm9kZVRleHQobmFtZU5vZGUsIHNvdXJjZSlcbiAgICBjb25zdCBhcmd1bWVudHNfID0gc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50c05vZGUpXG5cbiAgICBpZiAobmFtZSA9PSBcImphdmEudXRpbC5MaXN0XCIgJiYgYXJndW1lbnRzXy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIGxpc3RUeXBlKFxuICAgICAgICBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChhcmd1bWVudHNfWzBdLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG5hbWUgPT0gXCJqYXZhLnV0aWwuTWFwXCIgJiYgYXJndW1lbnRzXy5sZW5ndGggPT0gMikge1xuICAgICAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGFyZ3VtZW50c19bMF0sIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG5cbiAgICAgIGlmIChrZXlUeXBlLmtpbmQgIT0gXCJUeXBlUmVmZXJlbmNlXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hcCBrZXkgdHlwZSBvdGhlciB0aGFuIHN0cmluZ1wiLCBub2RlTG9jYXRpb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwVHlwZShcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgY29udmVydEphdmFUeXBlQXJndW1lbnQoYXJndW1lbnRzX1sxXSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICAgIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24oYXJndW1lbnRzX1sxXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG5hbWUgPT0gXCJqYXZhLnV0aWwuU2VxdWVuY2VkTWFwXCIgJiYgYXJndW1lbnRzXy5sZW5ndGggPT0gMikge1xuICAgICAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGFyZ3VtZW50c19bMF0sIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG5cbiAgICAgIGlmIChrZXlUeXBlLmtpbmQgIT0gXCJUeXBlUmVmZXJlbmNlXCIgfHwga2V5VHlwZS5uYW1lICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hcCBrZXkgdHlwZSBvdGhlciB0aGFuIHN0cmluZ1wiLCBub2RlTG9jYXRpb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwVHlwZShcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgY29udmVydEphdmFUeXBlQXJndW1lbnQoYXJndW1lbnRzX1sxXSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICAgIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24oYXJndW1lbnRzX1sxXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKChuYW1lID09IFwiamF2YS51dGlsLk9wdGlvbmFsXCIgfHwgbmFtZSA9PSBcIk9wdGlvbmFsXCIpICYmIGFyZ3VtZW50c18ubGVuZ3RoID09IDEpIHtcbiAgICAgIHJldHVybiBvcHRpb25hbFR5cGUoXG4gICAgICAgIGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGFyZ3VtZW50c19bMF0sIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpLFxuICAgICAgICBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIG5vZGVMb2NhdGlvbihhcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZE5hbWVzLmdldChuYW1lKVxuXG4gICAgaWYgKHJlY29yZD8uaWQpIHtcbiAgICAgIGlmIChyZWNvcmQua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiZ2VuZXJpYyByZWZlcmVuY2UgY2xhc3MgdHlwZVwiLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVjb3JkVHlwZShyZWNvcmQuaWQsIG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIGFyZ3VtZW50c18ubWFwKChhcmd1bWVudCkgPT5cbiAgICAgICAgY29udmVydEphdmFUeXBlQXJndW1lbnQoYXJndW1lbnQsIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpKSlcbiAgICB9XG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgZ2VuZXJpYyB0eXBlXCIsIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAoIVtcIlByaW1pdGl2ZVR5cGVcIiwgXCJUeXBlTmFtZVwiLCBcIlNjb3BlZFR5cGVOYW1lXCJdLmluY2x1ZGVzKHNvdXJjZVR5cGUubmFtZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgc2NhbGFyIHR5cGVcIiwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCB0eXBlUGFyYW1ldGVyID0gdHlwZVBhcmFtZXRlcnMuZ2V0KG5vZGVUZXh0KHNvdXJjZVR5cGUsIHNvdXJjZSkpXG5cbiAgaWYgKHR5cGVQYXJhbWV0ZXI/LmlkKSByZXR1cm4gdHlwZVZhcmlhYmxlKHR5cGVQYXJhbWV0ZXIuaWQsIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZGVjbGFyYXRpb24gPSByZWNvcmROYW1lcy5nZXQobm9kZVRleHQoc291cmNlVHlwZSwgc291cmNlKSlcblxuICBpZiAoZGVjbGFyYXRpb24/LmlkKSByZXR1cm4gZGVjbGFyYXRpb24ua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIlxuICAgID8gcmVmZXJlbmNlVHlwZShkZWNsYXJhdGlvbi5pZCwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIDogZGVjbGFyYXRpb24ua2luZCA9PSBcIkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb25cIlxuICAgICAgPyBvd25lZFJlc291cmNlVHlwZShkZWNsYXJhdGlvbi5pZCwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgOiByZWNvcmRUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgY29uc3QgdHlwZSA9IHNvdXJjZVNjYWxhclR5cGUoXCJqYXZhXCIsIG5vZGVUZXh0KHNvdXJjZVR5cGUsIHNvdXJjZSksIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICBpZiAoIXR5cGUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCBzY2FsYXIgdHlwZVwiLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgbG9jYXRpb24uZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgcmV0dXJuIHR5cGVcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgYm94ZWQgSmF2YSBjb2xsZWN0aW9uIHR5cGUgYXJndW1lbnQgb3IgbmVzdGVkIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFR5cGUgYXJndW1lbnQgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gT3duaW5nIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkludGVyZmFjZURlY2xhcmF0aW9uPn0gW3JlY29yZE5hbWVzXSAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSBTZW1hbnRpYyB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChub2RlLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGlmIChub2RlLm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiKSByZXR1cm4gY29udmVydFR5cGUobm9kZSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycylcbiAgY29uc3QgdHlwZVBhcmFtZXRlciA9IHR5cGVQYXJhbWV0ZXJzLmdldChub2RlVGV4dChub2RlLCBzb3VyY2UpKVxuXG4gIGlmICh0eXBlUGFyYW1ldGVyPy5pZCkgcmV0dXJuIHR5cGVWYXJpYWJsZSh0eXBlUGFyYW1ldGVyLmlkLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gcmVjb3JkTmFtZXMuZ2V0KG5vZGVUZXh0KG5vZGUsIHNvdXJjZSkpXG5cbiAgaWYgKGRlY2xhcmF0aW9uPy5pZCkgcmV0dXJuIGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCJcbiAgICA/IHJlZmVyZW5jZVR5cGUoZGVjbGFyYXRpb24uaWQsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICA6IGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJFZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uXCJcbiAgICAgID8gb3duZWRSZXNvdXJjZVR5cGUoZGVjbGFyYXRpb24uaWQsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIDogcmVjb3JkVHlwZShkZWNsYXJhdGlvbi5pZCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBzcGVsbGluZyA9IG5vZGVUZXh0KG5vZGUsIHNvdXJjZSlcbiAgY29uc3Qgc2NhbGFyID0gc3BlbGxpbmcgPT0gXCJJbnRlZ2VyXCIgPyBcImludGVnZXJcIiA6IHNwZWxsaW5nID09IFwiQm9vbGVhblwiID8gXCJib29sZWFuXCIgOiBzcGVsbGluZyA9PSBcIlN0cmluZ1wiID8gXCJzdHJpbmdcIiA6IHVuZGVmaW5lZFxuXG4gIGlmICghc2NhbGFyKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgY29sbGVjdGlvbiB0eXBlIGFyZ3VtZW50XCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgdHlwZSA9IHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJUeXBlUmVmZXJlbmNlXCIpLCBuYW1lOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVHlwZU5hbWV9ICovIChzY2FsYXIpfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHR5cGUsIHt0eXBlOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleHBsaWNpdCBKYXZhIGZ1bmN0aW9uIHJldHVybiB0eXBlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGUgfCBudWxsfSBzb3VyY2VUeXBlIC0gSmF2YSByZXR1cm4gdHlwZSBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBUeXBlZCBmdW5jdGlvbiByZXR1cm4uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIEZ1bmN0aW9uIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkludGVyZmFjZURlY2xhcmF0aW9uPn0gW3JlY29yZE5hbWVzXSAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfSBTZW1hbnRpYyByZXR1cm4gdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJldHVyblR5cGUoc291cmNlVHlwZSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBpZiAoc291cmNlVHlwZT8ubmFtZSA9PSBcInZvaWRcIikge1xuICAgIHJldHVybiByZXF1aXJlU291cmNlUmV0dXJuVHlwZShcImphdmFcIiwgXCJ2b2lkXCIsIHN1YmplY3QsIGxvY2F0aW9uLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4gY29udmVydFR5cGUoc291cmNlVHlwZSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycylcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkaXJlY3QgSmF2YSBkZWNsYXJhdGlvbiB0eXBlIG5vZGUgc3VwcG9ydGVkIGJ5IHNjYWxhciBjb252ZXJzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBEZWNsYXJhdGlvbiBub2RlLlxuICogQHJldHVybnMge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZSB8IG51bGx9IFR5cGUgc3ludGF4IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGRlY2xhcmF0aW9uVHlwZShub2RlKSB7XG4gIHJldHVybiBub2RlLmdldENoaWxkKFwiR2VuZXJpY1R5cGVcIikgPz8gbm9kZS5nZXRDaGlsZChcIlByaW1pdGl2ZVR5cGVcIikgPz8gbm9kZS5nZXRDaGlsZChcIlR5cGVOYW1lXCIpID8/IG5vZGUuZ2V0Q2hpbGQoXCJTY29wZWRUeXBlTmFtZVwiKSA/PyBub2RlLmdldENoaWxkKFwidm9pZFwiKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBuYXRpdmUgdW5ib3VuZGVkIGludmFyaWFudCBKYXZhIHR5cGUtcGFyYW1ldGVyIGxpc3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZSB8IG51bGx9IG5vZGUgLSBUeXBlUGFyYW1ldGVycyBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IG93bmVySWQgLSBTdGFibGUgb3duaW5nIGRlY2xhcmF0aW9uIGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyW10gfCB1bmRlZmluZWR9IFNlbWFudGljIHBhcmFtZXRlcnMuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhVHlwZVBhcmFtZXRlcnMobm9kZSwgb3duZXJJZCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoIW5vZGUpIHJldHVybiB1bmRlZmluZWRcbiAgY29uc3QgcGFyYW1ldGVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKVxuXG4gIHJldHVybiBwYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcilcbiAgICBjb25zdCBkZWZpbml0aW9uID0gY2hpbGRyZW5bMF1cblxuICAgIGlmIChwYXJhbWV0ZXIubmFtZSAhPSBcIlR5cGVQYXJhbWV0ZXJcIiB8fCBjaGlsZHJlbi5sZW5ndGggIT0gMSB8fCBkZWZpbml0aW9uPy5uYW1lICE9IFwiRGVmaW5pdGlvblwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiYm91bmRlZCwgYW5ub3RhdGVkLCBvciBtYWxmb3JtZWQgdHlwZSBwYXJhbWV0ZXJcIiwgbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBpZDogYCR7b3duZXJJZH06dHlwZToke2luZGV4fWAsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJUeXBlUGFyYW1ldGVyXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBuYW1lOiBub2RlVGV4dChkZWZpbml0aW9uLCBzb3VyY2UpXG4gICAgfSwge25hbWU6IGxvY2F0aW9ufSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgc3VwcG9ydGVkIEphdmEgZnVuY3Rpb24gc2lnbmF0dXJlIGJlZm9yZSBhZGFwdGluZyBhbnkgYm9keS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gTWV0aG9kIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkludGVyZmFjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb2dyYW1GdW5jdGlvbl0gLSBXaGV0aGVyIHRoZSBjYW5vbmljYWwgcHJvamVjdCBwcm9maWxlIGFkbWl0cyBleHBsaWNpdCBwdWJsaWMgb3IgcHJpdmF0ZSB2aXNpYmlsaXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IFtvd25lcklkXSAtIFN0YWJsZSBmdW5jdGlvbiBpZGVudGl0eS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlZmVyZW5jZU1vZHVsZV0gLSBXaGV0aGVyIHBhY2thZ2UtdmlzaWJsZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSByZXF1aXJlZCBieSBzaWJsaW5nIHJlZmVyZW5jZSBjbGFzc2VzLlxuICogQHJldHVybnMge0phdmFGdW5jdGlvblNpZ25hdHVyZX0gU2VtYW50aWMgZnVuY3Rpb24gc2lnbmF0dXJlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHByb2dyYW1GdW5jdGlvbiA9IGZhbHNlLCBvd25lcklkID0gXCJmdW5jdGlvbjowXCIsXG4gIHJlZmVyZW5jZU1vZHVsZSA9IGZhbHNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1vZGlmaWVycyA9IG5vZGUuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgbW9kaWZpZXJOYW1lcyA9IG1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihtb2RpZmllcnMpLm1hcCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLm5hbWUpIDogW11cblxuICBjb25zdCByZXF1aXJlZE1vZGlmaWVycyA9IHByb2dyYW1GdW5jdGlvbiA/IFwicHVibGljIG9yIHByaXZhdGUgc3RhdGljXCIgOiByZWZlcmVuY2VNb2R1bGUgPyBcInByaXZhdGUgb3IgcGFja2FnZS12aXNpYmxlIHN0YXRpY1wiIDogXCJwcml2YXRlIHN0YXRpY1wiXG4gIGNvbnN0IG1vZGlmaWVyc1RleHQgPSBtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpXG5cbiAgaWYgKHByb2dyYW1GdW5jdGlvbiA/ICFbXCJwdWJsaWMgc3RhdGljXCIsIFwicHJpdmF0ZSBzdGF0aWNcIl0uaW5jbHVkZXMobW9kaWZpZXJzVGV4dCkgOlxuICAgIHJlZmVyZW5jZU1vZHVsZSA/ICFbXCJwcml2YXRlIHN0YXRpY1wiLCBcInN0YXRpY1wiXS5pbmNsdWRlcyhtb2RpZmllcnNUZXh0KSA6IG1vZGlmaWVyc1RleHQgIT0gXCJwcml2YXRlIHN0YXRpY1wiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgc2VtYW50aWMgZnVuY3Rpb24gd2l0aG91dCAke3JlcXVpcmVkTW9kaWZpZXJzfWAsIG1vZGlmaWVycyA/IG5vZGVMb2NhdGlvbihtb2RpZmllcnMsIGZpbGVuYW1lLCBzb3VyY2UpIDogbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSBub2RlLmdldENoaWxkKFwiVHlwZVBhcmFtZXRlcnNcIilcbiAgY29uc3QgdGhyb3dzID0gbm9kZS5nZXRDaGlsZChcIlRocm93c1wiKVxuXG4gIGlmICh0aHJvd3MpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJjaGVja2VkIHRocm93c1wiLCBub2RlTG9jYXRpb24odGhyb3dzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc2VtYW50aWNUeXBlUGFyYW1ldGVycyA9IGNvbnZlcnRKYXZhVHlwZVBhcmFtZXRlcnModHlwZVBhcmFtZXRlcnMsIG93bmVySWQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJOYW1lcyA9IG5ldyBNYXAoKHNlbWFudGljVHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuICBjb25zdCBkZWZpbml0aW9uID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHN0cnVjdHVyYWxDaGlsZHJlbihwYXJhbWV0ZXJzTm9kZSlcbiAgY29uc3QgdW5zdXBwb3J0ZWRQYXJhbWV0ZXIgPSBwYXJhbWV0ZXJOb2Rlcy5maW5kKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci5uYW1lICE9IFwiRm9ybWFsUGFyYW1ldGVyXCIpXG5cbiAgaWYgKHVuc3VwcG9ydGVkUGFyYW1ldGVyKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIHBhcmFtZXRlciBmb3JtXCIsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZFBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHBhcmFtZXRlckNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcilcblxuICAgIGlmIChwYXJhbWV0ZXJDaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgfHwgcGFyYW1ldGVyLmdldENoaWxkKFwiRGltZW5zaW9uXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgcGFyYW1ldGVyIGZvcm1cIiwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHBhcmFtZXRlck5hbWVOb2RlID0gcmVxdWlyZWRDaGlsZChwYXJhbWV0ZXIsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBub2RlVGV4dChwYXJhbWV0ZXJOYW1lTm9kZSwgc291cmNlKVxuXG4gICAgY29uc3Qgc2VtYW50aWNQYXJhbWV0ZXIgPSB7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksXG4gICAgICBsb2NhdGlvbjogcGFyYW1ldGVyTG9jYXRpb24sXG4gICAgICBuYW1lOiBwYXJhbWV0ZXJOYW1lLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyYXRpb25UeXBlKHBhcmFtZXRlciksIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICAgIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoc2VtYW50aWNQYXJhbWV0ZXIsIHtuYW1lOiBub2RlTG9jYXRpb24ocGFyYW1ldGVyTmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbixcbiAgICBuYW1lLFxuICAgIG5hbWVMb2NhdGlvbjogbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogY29udmVydFJldHVyblR5cGUoZGVjbGFyYXRpb25UeXBlKG5vZGUpLCBgRnVuY3Rpb24gJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcyksXG4gICAgLi4uKHNlbWFudGljVHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHNlbWFudGljVHlwZVBhcmFtZXRlcnN9IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgSmF2YSBmdW5jdGlvbiBib2R5IHVzaW5nIGFscmVhZHktcHJvdmVkIG1vZHVsZSBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBNZXRob2QgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge0phdmFGdW5jdGlvblNpZ25hdHVyZX0gc2lnbmF0dXJlIC0gUHJlY29udmVydGVkIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgSmF2YUZ1bmN0aW9uU2lnbmF0dXJlPn0gZnVuY3Rpb25zIC0gTW9kdWxlIGZ1bmN0aW9uIHNpZ25hdHVyZXMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JbnRlcmZhY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZCBkZWNsYXJhdGlvbnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gUmVmZXJlbmNlIGNsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSBTZW1hbnRpYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZ1bmN0aW9uKG5vZGUsIHNpZ25hdHVyZSwgZnVuY3Rpb25zLCByZWNvcmROYW1lcywgcmVjb3JkcywgY2xhc3NlcywgZXJyb3JOYW1lcywgZXJyb3JzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGJsb2NrID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIkJsb2NrXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgYmluZGluZ3M6IG5ldyBNYXAoc2lnbmF0dXJlLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLnR5cGVdKSksXG4gICAgY2xhc3NlcyxcbiAgICBlcnJvck5hbWVzLFxuICAgIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldCgpLFxuICAgIGVycm9ycyxcbiAgICBmdW5jdGlvbnMsXG4gICAgcmVjb3JkTmFtZXMsXG4gICAgcmVjb3JkcyxcbiAgICByZXR1cm5UeXBlOiBzaWduYXR1cmUucmV0dXJuVHlwZSxcbiAgICB0eXBlUGFyYW1ldGVyczogbmV3IE1hcCgoc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXJdKSlcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiBjb252ZXJ0QmxvY2soYmxvY2ssIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgIGtpbmQ6IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxuICAgIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sXG4gICAgbmFtZTogc2lnbmF0dXJlLm5hbWUsXG4gICAgcGFyYW1ldGVyczogc2lnbmF0dXJlLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogc2lnbmF0dXJlLnJldHVyblR5cGUsXG4gICAgLi4uKHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyczogc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9LCB7bmFtZTogc2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IGZpbmFsIFJ1bnRpbWVFeGNlcHRpb24gc3ViY2xhc3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIEphdmEgY2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgc2VtYW50aWMgZXJyb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJvZ3JhbUVycm9yXSAtIFdoZXRoZXIgcHVibGljIHByb2dyYW0gdmlzaWJpbGl0eSBpcyBhZG1pdHRlZC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSBTZW1hbnRpYyBlcnJvciBkZWNsYXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFFcnJvcihub2RlLCBkZWNsYXJhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcHJvZ3JhbUVycm9yID0gZmFsc2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gbm9kZS5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICBjb25zdCBtb2RpZmllclRleHQgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKS5qb2luKFwiIFwiKSA6IFwiXCJcbiAgY29uc3Qgc3VwZXJjbGFzcyA9IG5vZGUuZ2V0Q2hpbGQoXCJTdXBlcmNsYXNzXCIpXG4gIGNvbnN0IHN1cGVyY2xhc3NDaGlsZHJlbiA9IHN1cGVyY2xhc3MgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oc3VwZXJjbGFzcykgOiBbXVxuICBjb25zdCBwYXJlbnQgPSBzdXBlcmNsYXNzQ2hpbGRyZW4uYXQoLTEpXG4gIGNvbnN0IGJvZHkgPSBub2RlLmdldENoaWxkKFwiQ2xhc3NCb2R5XCIpXG4gIGNvbnN0IG1lbWJlcnMgPSBib2R5ID8gc3RydWN0dXJhbENoaWxkcmVuKGJvZHkpIDogW11cbiAgY29uc3QgY29uc3RydWN0b3IgPSBtZW1iZXJzWzBdXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBjb25zdHJ1Y3Rvcj8uZ2V0Q2hpbGQoXCJGb3JtYWxQYXJhbWV0ZXJzXCIpXG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcGFyYW1ldGVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihwYXJhbWV0ZXJzKSA6IFtdXG4gIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlck5vZGVzWzBdXG4gIGNvbnN0IHBhcmFtZXRlclR5cGUgPSBwYXJhbWV0ZXIgPyBkZWNsYXJhdGlvblR5cGUocGFyYW1ldGVyKSA6IG51bGxcbiAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlcj8uZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gIGNvbnN0IGNvbnN0cnVjdG9yQm9keSA9IGNvbnN0cnVjdG9yPy5nZXRDaGlsZChcIkNvbnN0cnVjdG9yQm9keVwiKVxuICBjb25zdCBjb25zdHJ1Y3RvclN0YXRlbWVudHMgPSBjb25zdHJ1Y3RvckJvZHkgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY29uc3RydWN0b3JCb2R5KSA6IFtdXG4gIGNvbnN0IHN1cGVyQ2FsbCA9IGNvbnN0cnVjdG9yU3RhdGVtZW50c1swXVxuICBjb25zdCBzdXBlckFyZ3VtZW50cyA9IHN1cGVyQ2FsbD8uZ2V0Q2hpbGQoXCJBcmd1bWVudExpc3RcIilcbiAgY29uc3Qgc3VwZXJWYWx1ZXMgPSBzdXBlckFyZ3VtZW50cyA/IHN0cnVjdHVyYWxDaGlsZHJlbihzdXBlckFyZ3VtZW50cykgOiBbXVxuXG4gIGlmICgocHJvZ3JhbUVycm9yID8gIVtcInB1YmxpYyBmaW5hbFwiLCBcImZpbmFsXCJdLmluY2x1ZGVzKG1vZGlmaWVyVGV4dCkgOiBtb2RpZmllclRleHQgIT0gXCJmaW5hbFwiKSB8fFxuICAgICFzdXBlcmNsYXNzIHx8IHN1cGVyY2xhc3NDaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBwYXJlbnQ/Lm5hbWUgIT0gXCJUeXBlTmFtZVwiIHx8IG5vZGVUZXh0KHBhcmVudCwgc291cmNlKSAhPSBcIlJ1bnRpbWVFeGNlcHRpb25cIiB8fFxuICAgIG5vZGUuZ2V0Q2hpbGQoXCJTdXBlckludGVyZmFjZXNcIikgfHwgbm9kZS5nZXRDaGlsZChcIlR5cGVQYXJhbWV0ZXJzXCIpIHx8ICFib2R5IHx8IG1lbWJlcnMubGVuZ3RoICE9IDEgfHxcbiAgICBjb25zdHJ1Y3Rvcj8ubmFtZSAhPSBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIiB8fFxuICAgIChwcm9ncmFtRXJyb3IgPyBub2RlVGV4dChjb25zdHJ1Y3Rvci5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKSA/PyBjb25zdHJ1Y3Rvciwgc291cmNlKSAhPSBcInB1YmxpY1wiIDogY29uc3RydWN0b3IuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikpIHx8XG4gICAgY29uc3RydWN0b3IuZ2V0Q2hpbGQoXCJUaHJvd3NcIikgfHxcbiAgICBub2RlVGV4dChjb25zdHJ1Y3Rvci5nZXRDaGlsZChcIkRlZmluaXRpb25cIikgPz8gbm9kZSwgc291cmNlKSAhPSBkZWNsYXJhdGlvbi5uYW1lIHx8IHBhcmFtZXRlck5vZGVzLmxlbmd0aCAhPSAxIHx8XG4gICAgcGFyYW1ldGVyPy5uYW1lICE9IFwiRm9ybWFsUGFyYW1ldGVyXCIgfHwgbm9kZVRleHQocGFyYW1ldGVyVHlwZSA/PyBub2RlLCBzb3VyY2UpICE9IFwiU3RyaW5nXCIgfHxcbiAgICBub2RlVGV4dChwYXJhbWV0ZXJOYW1lID8/IG5vZGUsIHNvdXJjZSkgIT0gXCJtZXNzYWdlXCIgfHwgIWNvbnN0cnVjdG9yQm9keSB8fCBjb25zdHJ1Y3RvclN0YXRlbWVudHMubGVuZ3RoICE9IDEgfHxcbiAgICBzdXBlckNhbGw/Lm5hbWUgIT0gXCJFeHBsaWNpdENvbnN0cnVjdG9ySW52b2NhdGlvblwiIHx8ICFzdXBlckNhbGwuZ2V0Q2hpbGQoXCJzdXBlclwiKSB8fCBzdXBlclZhbHVlcy5sZW5ndGggIT0gMSB8fFxuICAgIHN1cGVyVmFsdWVzWzBdLm5hbWUgIT0gXCJJZGVudGlmaWVyXCIgfHwgbm9kZVRleHQoc3VwZXJWYWx1ZXNbMF0sIHNvdXJjZSkgIT0gXCJtZXNzYWdlXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibm9uY2Fub25pY2FsIHR5cGVkIGVycm9yIGRlY2xhcmF0aW9uXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoZGVjbGFyYXRpb24sIHtcbiAgICBuYW1lOiBub2RlTG9jYXRpb24ocmVxdWlyZWRDaGlsZChub2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIHR5cGU6IG5vZGVMb2NhdGlvbihwYXJlbnQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIH0pXG59XG5cbi8qKlxuICogUmVhZHMgb25lIHBhY2thZ2UtcHJpdmF0ZSBKYXZhIHJlZmVyZW5jZSBjb25zdHJ1Y3RvciBvciBpbnN0YW5jZS1tZXRob2Qgc2lnbmF0dXJlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBDb25zdHJ1Y3RvciBvciBtZXRob2QgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gRGVjbGFyaW5nIGNsYXNzLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW50ZXJmYWNlRGVjbGFyYXRpb24+fSBub21pbmFsTmFtZXMgLSBWaXNpYmxlIG5vbWluYWwgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtib29sZWFufSBjb25zdHJ1Y3RvciAtIFdoZXRoZXIgdGhpcyBpcyB0aGUgc29sZSBjb25zdHJ1Y3Rvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7e2xvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgbmFtZTogc3RyaW5nLCBuYW1lTG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBwYXJhbWV0ZXJzOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QYXJhbWV0ZXJbXSwgcmV0dXJuVHlwZT86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfX0gRXhhY3Qgc2lnbmF0dXJlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SmF2YUNsYXNzQ2FsbGFibGVTaWduYXR1cmUobm9kZSwgZGVjbGFyYXRpb24sIG5vbWluYWxOYW1lcywgY29uc3RydWN0b3IsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgZGVmaW5pdGlvbiA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG5hbWUgPSBub2RlVGV4dChkZWZpbml0aW9uLCBzb3VyY2UpXG4gIGNvbnN0IHBhcmFtZXRlcnNOb2RlID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIkZvcm1hbFBhcmFtZXRlcnNcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgcGFyYW1ldGVyTm9kZXMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocGFyYW1ldGVyc05vZGUpXG4gIGNvbnN0IG1vZGlmaWVycyA9IG5vZGUuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcblxuICBpZiAobW9kaWZpZXJzIHx8IG5vZGUuZ2V0Q2hpbGQoXCJUaHJvd3NcIikgfHwgbm9kZS5nZXRDaGlsZChcIlR5cGVQYXJhbWV0ZXJzXCIpIHx8XG4gICAgY29uc3RydWN0b3IgIT0gKG5vZGUubmFtZSA9PSBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIikgfHwgY29uc3RydWN0b3IgJiYgbmFtZSAhPSBkZWNsYXJhdGlvbi5uYW1lKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWZlcmVuY2UgY2xhc3MgY2FsbGFibGVcIiwgbG9jYXRpb24pXG4gIH1cbiAgaWYgKCFjb25zdHJ1Y3RvciAmJiByZWZlcmVuY2VNZXRob2RIb29rcy5oYXMobmFtZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGByZXNlcnZlZCByZWZlcmVuY2UgbWV0aG9kICcke25hbWV9J2AsIG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyTm9kZXMubWFwKChwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocGFyYW1ldGVyKVxuICAgIGNvbnN0IHBhcmFtZXRlck5hbWVOb2RlID0gcGFyYW1ldGVyLmdldENoaWxkKFwiRGVmaW5pdGlvblwiKVxuXG4gICAgaWYgKHBhcmFtZXRlci5uYW1lICE9IFwiRm9ybWFsUGFyYW1ldGVyXCIgfHwgY2hpbGRyZW4ubGVuZ3RoICE9IDIgfHwgcGFyYW1ldGVyLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpIHx8XG4gICAgICBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJEaW1lbnNpb25cIikgfHwgIXBhcmFtZXRlck5hbWVOb2RlKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgcmVmZXJlbmNlIGNsYXNzIHBhcmFtZXRlclwiLCBwYXJhbWV0ZXJMb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IG5vZGVUZXh0KHBhcmFtZXRlck5hbWVOb2RlLCBzb3VyY2UpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUGFyYW1ldGVyXCIpLCBsb2NhdGlvbjogcGFyYW1ldGVyTG9jYXRpb24sIG5hbWU6IHBhcmFtZXRlck5hbWUsXG4gICAgICB0eXBlOiBjb252ZXJ0VHlwZShkZWNsYXJhdGlvblR5cGUocGFyYW1ldGVyKSwgYFBhcmFtZXRlciAnJHtwYXJhbWV0ZXJOYW1lfSdgLCBwYXJhbWV0ZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKX0sXG4gICAge25hbWU6IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXJOYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9KVxuXG4gIHJldHVybiB7bG9jYXRpb24sIG5hbWU6IGNvbnN0cnVjdG9yID8gXCJjb25zdHJ1Y3RvclwiIDogbmFtZSwgbmFtZUxvY2F0aW9uOiBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSksIHBhcmFtZXRlcnMsXG4gICAgLi4uKGNvbnN0cnVjdG9yID8ge30gOiB7cmV0dXJuVHlwZTogY29udmVydFJldHVyblR5cGUoZGVjbGFyYXRpb25UeXBlKG5vZGUpLCBgTWV0aG9kICcke25hbWV9JyByZXR1cm5gLCBsb2NhdGlvbixcbiAgICAgIGZpbGVuYW1lLCBzb3VyY2UsIG5vbWluYWxOYW1lcyl9KX1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgYm91bmRlZCBmaW5hbC9wcml2YXRlLWZpZWxkIEphdmEgcmVmZXJlbmNlLWNsYXNzIHByb2ZpbGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIENsYXNzIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIGNsYXNzIGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW50ZXJmYWNlRGVjbGFyYXRpb24+fSBub21pbmFsTmFtZXMgLSBWaXNpYmxlIG5vbWluYWwgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59IHJlY29yZHMgLSBSZWNvcmRzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gY2xhc3NlcyAtIENsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIEphdmFGdW5jdGlvblNpZ25hdHVyZT59IGZ1bmN0aW9ucyAtIFRvcC1sZXZlbCBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JOYW1lcyAtIEVycm9ycyBieSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3JzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBTZW1hbnRpYyBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFSZWZlcmVuY2VDbGFzcyhub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCByZWNvcmRzLCBjbGFzc2VzLCBmdW5jdGlvbnMsIGVycm9yTmFtZXMsIGVycm9ycyxcbiAgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBtb2RpZmllcnMgPSBub2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG4gIGNvbnN0IGJvZHkgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1lbWJlcnMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYm9keSlcbiAgY29uc3QgZmllbGROb2RlcyA9IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiKVxuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGVzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IG1ldGhvZE5vZGVzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJNZXRob2REZWNsYXJhdGlvblwiKVxuXG4gIGlmIChtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IFwiZmluYWxcIiB8fCBub2RlLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKSB8fCBub2RlLmdldENoaWxkKFwiU3VwZXJJbnRlcmZhY2VzXCIpIHx8XG4gICAgbm9kZS5nZXRDaGlsZChcIlR5cGVQYXJhbWV0ZXJzXCIpIHx8IGNvbnN0cnVjdG9yTm9kZXMubGVuZ3RoICE9IDEgfHwgZmllbGROb2Rlcy5sZW5ndGggPT0gMCB8fFxuICAgIGZpZWxkTm9kZXMubGVuZ3RoICsgY29uc3RydWN0b3JOb2Rlcy5sZW5ndGggKyBtZXRob2ROb2Rlcy5sZW5ndGggIT0gbWVtYmVycy5sZW5ndGggfHxcbiAgICBtZW1iZXJzLnNsaWNlKDAsIGZpZWxkTm9kZXMubGVuZ3RoKS5zb21lKChtZW1iZXIpID0+IG1lbWJlci5uYW1lICE9IFwiRmllbGREZWNsYXJhdGlvblwiKSB8fFxuICAgIG1lbWJlcnNbZmllbGROb2Rlcy5sZW5ndGhdICE9IGNvbnN0cnVjdG9yTm9kZXNbMF0gfHxcbiAgICBtZW1iZXJzLnNsaWNlKGZpZWxkTm9kZXMubGVuZ3RoICsgMSkuc29tZSgobWVtYmVyKSA9PiBtZW1iZXIubmFtZSAhPSBcIk1ldGhvZERlY2xhcmF0aW9uXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWZlcmVuY2UgY2xhc3MgZGVjbGFyYXRpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgZGVjbGFyYXRpb24uZmllbGRzID0gZmllbGROb2Rlcy5tYXAoKGZpZWxkTm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBmaWVsZExvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGZpZWxkTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBmaWVsZE1vZGlmaWVycyA9IGZpZWxkTm9kZS5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICAgIGNvbnN0IG5hbWVzID0gZmllbGRNb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oZmllbGRNb2RpZmllcnMpLm1hcCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLm5hbWUpIDogW11cbiAgICBjb25zdCB2YXJpYWJsZU5vZGVzID0gZmllbGROb2RlLmdldENoaWxkcmVuKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpXG4gICAgY29uc3QgdmFyaWFibGUgPSB2YXJpYWJsZU5vZGVzWzBdXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHZhcmlhYmxlID8gdmFyaWFibGUuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpIDogbnVsbFxuXG4gICAgaWYgKG5hbWVzLmpvaW4oXCIgXCIpICE9IFwicHJpdmF0ZVwiIHx8IHZhcmlhYmxlTm9kZXMubGVuZ3RoICE9IDEgfHwgIWRlZmluaXRpb24gfHxcbiAgICAgIHN0cnVjdHVyYWxDaGlsZHJlbih2YXJpYWJsZSkubGVuZ3RoICE9IDEgfHwgZmllbGROb2RlLmdldENoaWxkKFwiRGltZW5zaW9uXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibm9uY2Fub25pY2FsIHByaXZhdGUgaW5zdGFuY2UgZmllbGRcIiwgZmllbGRMb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmZpZWxkOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sIG5hbWUsXG4gICAgICB0eXBlOiBjb252ZXJ0VHlwZShkZWNsYXJhdGlvblR5cGUoZmllbGROb2RlKSwgYFByaXZhdGUgZmllbGQgJyR7bmFtZX0nYCwgZmllbGRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKX0sXG4gICAge25hbWU6IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IGNvbnN0cnVjdG9yTm9kZXNbMF1cbiAgY29uc3QgY29uc3RydWN0b3JTaWduYXR1cmUgPSBjb252ZXJ0SmF2YUNsYXNzQ2FsbGFibGVTaWduYXR1cmUoY29uc3RydWN0b3JOb2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCB0cnVlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yID0gd2l0aFBhcnNlclJhbmdlcyh7Ym9keTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKHt9KSxcbiAgICBpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmNvbnN0cnVjdG9yYCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbjogY29uc3RydWN0b3JTaWduYXR1cmUubG9jYXRpb24sIHBhcmFtZXRlcnM6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLnBhcmFtZXRlcnN9LCB7Y29uc3RydWN0b3I6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG4gIGNvbnN0IG1ldGhvZFNpZ25hdHVyZXMgPSBtZXRob2ROb2Rlcy5tYXAoKG1ldGhvZCkgPT5cbiAgICBjb252ZXJ0SmF2YUNsYXNzQ2FsbGFibGVTaWduYXR1cmUobWV0aG9kLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCBmYWxzZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgZGVjbGFyYXRpb24ubWV0aG9kcyA9IG1ldGhvZFNpZ25hdHVyZXMubWFwKChzaWduYXR1cmUsIGluZGV4KSA9PiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoe30pLCBpZDogYCR7ZGVjbGFyYXRpb24uaWR9Om1ldGhvZDoke2luZGV4fWAsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWV0aG9kRGVjbGFyYXRpb25cIiksIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9ICovIChzaWduYXR1cmUucmV0dXJuVHlwZSlcbiAgfSwge25hbWU6IHNpZ25hdHVyZS5uYW1lTG9jYXRpb259KSlcbiAgY29uc3QgYmFzZSA9IHtiaW5kaW5nczogbmV3IE1hcCgpLCBjbGFzc2VzLCBjdXJyZW50Q2xhc3M6IGRlY2xhcmF0aW9uLCBlcnJvck5hbWVzLCBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoKSwgZXJyb3JzLFxuICAgIGZ1bmN0aW9ucywgcmVjb3JkTmFtZXM6IG5vbWluYWxOYW1lcywgcmVjb3Jkc31cbiAgY29uc3QgY29uc3RydWN0b3JCb2R5ID0gcmVxdWlyZWRDaGlsZChjb25zdHJ1Y3Rvck5vZGUsIFwiQ29uc3RydWN0b3JCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSA9IGNvbnZlcnRCbG9jayhjb25zdHJ1Y3RvckJvZHksIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgey4uLmJhc2UsIGJpbmRpbmdzOiBuZXcgTWFwKGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLnR5cGVdKSksXG4gICAgICByZXR1cm5UeXBlOiB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVJlZmVyZW5jZVwiKSwgbmFtZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwidm9pZFwiKX19KVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWV0aG9kTm9kZXMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgbWV0aG9kID0gZGVjbGFyYXRpb24ubWV0aG9kc1tpbmRleF1cblxuICAgIG1ldGhvZC5ib2R5ID0gY29udmVydEJsb2NrKHJlcXVpcmVkQ2hpbGQobWV0aG9kTm9kZXNbaW5kZXhdLCBcIkJsb2NrXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgey4uLmJhc2UsIGJpbmRpbmdzOiBuZXcgTWFwKG1ldGhvZC5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLCByZXR1cm5UeXBlOiBtZXRob2QucmV0dXJuVHlwZX0pXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IG5vZGVMb2NhdGlvbihyZXF1aXJlZENoaWxkKG5vZGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBjb252ZW50aW9uYWwgZmluYWwgSmF2YSBjbGFzcyB3aXRoIGV4YWN0IHByaXZhdGUtZmluYWwgc3RvcmFnZSxcbiAqIGNvbnN0cnVjdG9yIGluaXRpYWxpemF0aW9uLCBhbmQgY2Fub25pY2FsIGZpZWxkLW5hbWUgYWNjZXNzb3JzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBDbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgbm9taW5hbCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIFJlY29yZHMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJvZ3JhbVJlY29yZF0gLSBXaGV0aGVyIHRoZSBjYW5vbmljYWwgcHJvamVjdCBwcm9maWxlIGFkbWl0cyBwdWJsaWMgb3IgcGFja2FnZS1wcml2YXRlIGNsYXNzIHZpc2liaWxpdHkuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IFNlbWFudGljIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFSZWNvcmQobm9kZSwgZGVjbGFyYXRpb24sIHJlY29yZE5hbWVzLCBmaWxlbmFtZSwgc291cmNlLCBwcm9ncmFtUmVjb3JkID0gZmFsc2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgdHlwZVBhcmFtZXRlck5hbWVzID0gbmV3IE1hcCgoZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuICBjb25zdCBtb2RpZmllcnMgPSBub2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG5cbiAgY29uc3QgbW9kaWZpZXJzVGV4dCA9IG1vZGlmaWVyTmFtZXMuam9pbihcIiBcIilcblxuICBpZiAoKHByb2dyYW1SZWNvcmQgPyAhW1wicHVibGljIGZpbmFsXCIsIFwiZmluYWxcIl0uaW5jbHVkZXMobW9kaWZpZXJzVGV4dCkgOiBtb2RpZmllcnNUZXh0ICE9IFwiZmluYWxcIikgfHxcbiAgICBub2RlLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKSB8fCBub2RlLmdldENoaWxkKFwiU3VwZXJJbnRlcmZhY2VzXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY2xhc3MgbW9kaWZpZXJzXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGNsYXNzQm9keSA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJDbGFzc0JvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbWVtYmVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbihjbGFzc0JvZHkpXG4gIGNvbnN0IGZpZWxkcyA9IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiKVxuICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBtZW1iZXJzLmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIubmFtZSA9PSBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIilcbiAgY29uc3QgYWNjZXNzb3JzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJNZXRob2REZWNsYXJhdGlvblwiKVxuICBjb25zdCB1bnN1cHBvcnRlZCA9IG1lbWJlcnMuZmluZCgobWVtYmVyKSA9PiAhW1wiRmllbGREZWNsYXJhdGlvblwiLCBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIiwgXCJNZXRob2REZWNsYXJhdGlvblwiXS5pbmNsdWRlcyhtZW1iZXIubmFtZSkpXG5cbiAgaWYgKHVuc3VwcG9ydGVkIHx8IGNvbnN0cnVjdG9ycy5sZW5ndGggIT0gMSB8fCBhY2Nlc3NvcnMubGVuZ3RoICE9IGZpZWxkcy5sZW5ndGggfHxcbiAgICBtZW1iZXJzLnNsaWNlKDAsIGZpZWxkcy5sZW5ndGgpLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgIT0gXCJGaWVsZERlY2xhcmF0aW9uXCIpIHx8IG1lbWJlcnNbZmllbGRzLmxlbmd0aF0gIT0gY29uc3RydWN0b3JzWzBdIHx8XG4gICAgbWVtYmVycy5zbGljZShmaWVsZHMubGVuZ3RoICsgMSkuc29tZSgobWVtYmVyKSA9PiBtZW1iZXIubmFtZSAhPSBcIk1ldGhvZERlY2xhcmF0aW9uXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInJlY29yZCBjbGFzcyBtZW1iZXIgb3JkZXIgb3Igc2hhcGVcIiwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkID8/IG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGRlY2xhcmF0aW9uLmZpZWxkcyA9IGZpZWxkcy5tYXAoKGZpZWxkTm9kZSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkTG9jYXRpb24gPSBub2RlTG9jYXRpb24oZmllbGROb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGZpZWxkTW9kaWZpZXJzID0gZmllbGROb2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gICAgY29uc3QgbmFtZXMgPSBmaWVsZE1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihmaWVsZE1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkgOiBbXVxuICAgIGNvbnN0IHZhcmlhYmxlID0gcmVxdWlyZWRDaGlsZChmaWVsZE5vZGUsIFwiVmFyaWFibGVEZWNsYXJhdG9yXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHJlcXVpcmVkQ2hpbGQodmFyaWFibGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHZhcmlhYmxlQ2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4odmFyaWFibGUpXG5cbiAgICBpZiAobmFtZXMuam9pbihcIiBcIikgIT0gXCJwcml2YXRlIGZpbmFsXCIgfHwgdmFyaWFibGVDaGlsZHJlbi5sZW5ndGggIT0gMSB8fCBmaWVsZE5vZGUuZ2V0Q2hpbGQoXCJEaW1lbnNpb25cIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJyZWNvcmQgZmllbGQgb3V0c2lkZSBwcml2YXRlIGZpbmFsIHN0b3JhZ2UgcHJvZmlsZVwiLCBmaWVsZExvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZEZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sXG4gICAgICBuYW1lOiBub2RlVGV4dChkZWZpbml0aW9uLCBzb3VyY2UpLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyYXRpb25UeXBlKGZpZWxkTm9kZSksIGBSZWNvcmQgZmllbGQgJyR7bm9kZVRleHQoZGVmaW5pdGlvbiwgc291cmNlKX0nYCwgZmllbGRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhmaWVsZCwge25hbWU6IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JzWzBdXG4gIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IHJlcXVpcmVkQ2hpbGQoY29uc3RydWN0b3IsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IHJlcXVpcmVkQ2hpbGQoY29uc3RydWN0b3IsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJzID0gc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcnNOb2RlKVxuICBjb25zdCBib2R5ID0gcmVxdWlyZWRDaGlsZChjb25zdHJ1Y3RvciwgXCJDb25zdHJ1Y3RvckJvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXNzaWdubWVudHMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYm9keSlcblxuICBjb25zdCBjb25zdHJ1Y3Rvck1vZGlmaWVycyA9IGNvbnN0cnVjdG9yLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IGNvbnN0cnVjdG9yTW9kaWZpZXJOYW1lcyA9IGNvbnN0cnVjdG9yTW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKGNvbnN0cnVjdG9yTW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG5cbiAgaWYgKG5vZGVUZXh0KGNvbnN0cnVjdG9yTmFtZSwgc291cmNlKSAhPSBkZWNsYXJhdGlvbi5uYW1lIHx8XG4gICAgY29uc3RydWN0b3JNb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IChwcm9ncmFtUmVjb3JkID8gXCJwdWJsaWNcIiA6IFwiXCIpIHx8IGNvbnN0cnVjdG9yLmdldENoaWxkKFwiVGhyb3dzXCIpIHx8XG4gICAgY29uc3RydWN0b3IuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSB8fCBwYXJhbWV0ZXJzLmxlbmd0aCAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoIHx8IGFzc2lnbm1lbnRzLmxlbmd0aCAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY29uc3RydWN0b3JcIiwgbm9kZUxvY2F0aW9uKGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGVjbGFyYXRpb24uZmllbGRzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGZpZWxkID0gZGVjbGFyYXRpb24uZmllbGRzW2luZGV4XVxuICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlcnNbaW5kZXhdXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlcj8uZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gICAgY29uc3QgYXNzaWdubWVudCA9IGFzc2lnbm1lbnRzW2luZGV4XVxuICAgIGNvbnN0IGFzc2lnbm1lbnRFeHByZXNzaW9uID0gYXNzaWdubWVudD8uZ2V0Q2hpbGQoXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiKVxuICAgIGNvbnN0IGFzc2lnbm1lbnRDaGlsZHJlbiA9IGFzc2lnbm1lbnRFeHByZXNzaW9uID8gc3RydWN0dXJhbENoaWxkcmVuKGFzc2lnbm1lbnRFeHByZXNzaW9uKSA6IFtdXG4gICAgY29uc3QgZmllbGRBY2Nlc3MgPSBhc3NpZ25tZW50Q2hpbGRyZW5bMF1cbiAgICBjb25zdCBvcGVyYXRvciA9IGFzc2lnbm1lbnRDaGlsZHJlblsxXVxuICAgIGNvbnN0IHZhbHVlID0gYXNzaWdubWVudENoaWxkcmVuWzJdXG4gICAgY29uc3QgcGFyYW1ldGVyVHlwZSA9IHBhcmFtZXRlciA/IGNvbnZlcnRUeXBlKGRlY2xhcmF0aW9uVHlwZShwYXJhbWV0ZXIpLCBgUmVjb3JkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciAnJHtmaWVsZC5uYW1lfSdgLFxuICAgICAgbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSksIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAocGFyYW1ldGVyPy5uYW1lICE9IFwiRm9ybWFsUGFyYW1ldGVyXCIgfHwgIXBhcmFtZXRlck5hbWUgfHwgbm9kZVRleHQocGFyYW1ldGVyTmFtZSwgc291cmNlKSAhPSBmaWVsZC5uYW1lIHx8XG4gICAgICBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgfHwgcGFyYW1ldGVyLmdldENoaWxkKFwiRGltZW5zaW9uXCIpIHx8ICFwYXJhbWV0ZXJUeXBlIHx8ICFzYW1lVmFsdWVUeXBlKHBhcmFtZXRlclR5cGUsIGZpZWxkLnR5cGUpIHx8XG4gICAgICBhc3NpZ25tZW50Py5uYW1lICE9IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8IGFzc2lnbm1lbnRDaGlsZHJlbi5sZW5ndGggIT0gMyB8fCBmaWVsZEFjY2Vzcz8ubmFtZSAhPSBcIkZpZWxkQWNjZXNzXCIgfHxcbiAgICAgIG5vZGVUZXh0KGZpZWxkQWNjZXNzLCBzb3VyY2UpICE9IGB0aGlzLiR7ZmllbGQubmFtZX1gIHx8IG9wZXJhdG9yPy5uYW1lICE9IFwiQXNzaWduT3BcIiB8fCBub2RlVGV4dChvcGVyYXRvciwgc291cmNlKSAhPSBcIj1cIiB8fFxuICAgICAgdmFsdWU/Lm5hbWUgIT0gXCJJZGVudGlmaWVyXCIgfHwgbm9kZVRleHQodmFsdWUsIHNvdXJjZSkgIT0gZmllbGQubmFtZSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInJlY29yZCBmaWVsZCBub3QgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlXCIsIG5vZGVMb2NhdGlvbihhc3NpZ25tZW50ID8/IGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRlY2xhcmF0aW9uLmZpZWxkcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBmaWVsZCA9IGRlY2xhcmF0aW9uLmZpZWxkc1tpbmRleF1cbiAgICBjb25zdCBhY2Nlc3NvciA9IGFjY2Vzc29yc1tpbmRleF1cbiAgICBjb25zdCBuYW1lID0gcmVxdWlyZWRDaGlsZChhY2Nlc3NvciwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHJlcXVpcmVkQ2hpbGQoYWNjZXNzb3IsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGJsb2NrID0gcmVxdWlyZWRDaGlsZChhY2Nlc3NvciwgXCJCbG9ja1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHN0YXRlbWVudHMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYmxvY2spXG4gICAgY29uc3QgcmV0dXJuZWQgPSBzdGF0ZW1lbnRzWzBdPy5nZXRDaGlsZChcIkZpZWxkQWNjZXNzXCIpXG4gICAgY29uc3QgYWNjZXNzb3JUeXBlID0gY29udmVydFR5cGUoZGVjbGFyYXRpb25UeXBlKGFjY2Vzc29yKSwgYFJlY29yZCBhY2Nlc3NvciAnJHtmaWVsZC5uYW1lfSdgLFxuICAgICAgbm9kZUxvY2F0aW9uKGFjY2Vzc29yLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcblxuICAgIGNvbnN0IGFjY2Vzc29yTW9kaWZpZXJzID0gYWNjZXNzb3IuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgICBjb25zdCBhY2Nlc3Nvck1vZGlmaWVyTmFtZXMgPSBhY2Nlc3Nvck1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihhY2Nlc3Nvck1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkgOiBbXVxuXG4gICAgaWYgKGFjY2Vzc29yTW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSAocHJvZ3JhbVJlY29yZCA/IFwicHVibGljXCIgOiBcIlwiKSB8fCBhY2Nlc3Nvci5nZXRDaGlsZChcIlRocm93c1wiKSB8fCBhY2Nlc3Nvci5nZXRDaGlsZChcIlR5cGVQYXJhbWV0ZXJzXCIpIHx8XG4gICAgICBub2RlVGV4dChuYW1lLCBzb3VyY2UpICE9IGZpZWxkLm5hbWUgfHwgc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcnMpLmxlbmd0aCAhPSAwIHx8IHN0YXRlbWVudHMubGVuZ3RoICE9IDEgfHxcbiAgICAgIHN0YXRlbWVudHNbMF0ubmFtZSAhPSBcIlJldHVyblN0YXRlbWVudFwiIHx8ICFyZXR1cm5lZCB8fCBub2RlVGV4dChyZXR1cm5lZCwgc291cmNlKSAhPSBgdGhpcy4ke2ZpZWxkLm5hbWV9YCB8fFxuICAgICAgIXNhbWVWYWx1ZVR5cGUoYWNjZXNzb3JUeXBlLCBmaWVsZC50eXBlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgYWNjZXNzb3JcIiwgbm9kZUxvY2F0aW9uKGFjY2Vzc29yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IG5vZGVMb2NhdGlvbihyZXF1aXJlZENoaWxkKG5vZGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIERldGVjdHMgb25seSB0aGUgcGlubmVkIGdyYW1tYXIncyBwYXJzZXItYmFja2VkIHJlY292ZXJ5IHNoYXBlIGZvciBKYXZhIHJlY29yZCBzeW50YXguXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gcm9vdCAtIFByb2dyYW0gcm9vdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgdW5kZWZpbmVkfSBUaGUgcGFyc2VyLW93bmVkIGByZWNvcmRgIHR5cGUgdG9rZW4uXG4gKi9cbmZ1bmN0aW9uIGphdmFSZWNvcmRSZWNvdmVyeVRva2VuKHJvb3QsIHNvdXJjZSkge1xuICBjb25zdCBmaXJzdCA9IHN0cnVjdHVyYWxDaGlsZHJlbihyb290KVswXVxuICBjb25zdCB0eXBlID0gZmlyc3Q/Lm5hbWUgPT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIiA/IGZpcnN0LmdldENoaWxkKFwiVHlwZU5hbWVcIikgOiBudWxsXG5cbiAgcmV0dXJuIHR5cGUgJiYgbm9kZVRleHQodHlwZSwgc291cmNlKSA9PSBcInJlY29yZFwiID8gdHlwZSA6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBleGlzdGluZyBleGFjdCBKYXZhIGlmL2Vsc2UgdGVybWluYWwgd2l0aCByZXN0cmljdGVkIGJyYW5jaCBwcmVmaXhlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gSmF2YSBpZiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gU2VtYW50aWMgYnJhbmNoLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SWYobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjb25kaXRpb25Db250YWluZXIgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY29uZGl0aW9uTm9kZXMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY29uZGl0aW9uQ29udGFpbmVyKVxuICBjb25zdCBjb25kaXRpb24gPSBjb25kaXRpb25Ob2Rlcy5sZW5ndGggPT0gMSA/IGNvbmRpdGlvbk5vZGVzWzBdIDogdW5kZWZpbmVkXG4gIGNvbnN0IGRpcmVjdCA9IGRpcmVjdENoaWxkcmVuKG5vZGUpXG4gIGNvbnN0IGNvbmRpdGlvbkluZGV4ID0gZGlyZWN0LmZpbmRJbmRleCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gY29uZGl0aW9uQ29udGFpbmVyLm5hbWUgJiZcbiAgICBjaGlsZC5mcm9tID09IGNvbmRpdGlvbkNvbnRhaW5lci5mcm9tICYmIGNoaWxkLnRvID09IGNvbmRpdGlvbkNvbnRhaW5lci50bylcbiAgY29uc3QgY29uc2VxdWVudE5vZGUgPSBkaXJlY3RbY29uZGl0aW9uSW5kZXggKyAxXVxuICBjb25zdCBhbHRlcm5hdGVOb2RlID0gZGlyZWN0LmF0KC0xKSA9PSBjb25zZXF1ZW50Tm9kZSA/IHVuZGVmaW5lZCA6IGRpcmVjdC5hdCgtMSlcblxuICBpZiAoIWNvbmRpdGlvbiB8fCAhY29uc2VxdWVudE5vZGUgfHwgY29uc2VxdWVudE5vZGUubmFtZSAhPSBcIkJsb2NrXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiaWYgd2l0aG91dCBibG9jayBjb25zZXF1ZW50XCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3Qgc2VtYW50aWNDb25kaXRpb24gPSBjb252ZXJ0RXhwcmVzc2lvbihjb25kaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGxldCBhbHRlcm5hdGVcbiAgY29uc3QgY29uc2VxdWVudENvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyl9XG4gIGNvbnN0IGFsdGVybmF0ZUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyl9XG5cbiAgaWYgKGFsdGVybmF0ZU5vZGU/Lm5hbWUgPT0gXCJCbG9ja1wiKSB7XG4gICAgYWx0ZXJuYXRlID0gY29udmVydEJsb2NrKGFsdGVybmF0ZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGFsdGVybmF0ZUNvbnRleHQpXG4gIH0gZWxzZSBpZiAoYWx0ZXJuYXRlTm9kZT8ubmFtZSA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICBhbHRlcm5hdGUgPSB7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCbG9ja1wiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oYWx0ZXJuYXRlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBzdGF0ZW1lbnRzOiBbY29udmVydElmKGFsdGVybmF0ZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGFsdGVybmF0ZUNvbnRleHQpXVxuICAgIH1cbiAgfSBlbHNlIGlmIChhbHRlcm5hdGVOb2RlICYmIGFsdGVybmF0ZU5vZGUubmFtZSAhPSBcImVsc2VcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYGlmIGFsdGVybmF0ZSAke2FsdGVybmF0ZU5vZGUubmFtZX1gLCBub2RlTG9jYXRpb24oYWx0ZXJuYXRlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLihhbHRlcm5hdGUgPyB7YWx0ZXJuYXRlfSA6IHt9KSxcbiAgICBjb25kaXRpb246IHNlbWFudGljQ29uZGl0aW9uLFxuICAgIGNvbnNlcXVlbnQ6IGNvbnZlcnRCbG9jayhjb25zZXF1ZW50Tm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29uc2VxdWVudENvbnRleHQpLFxuICAgIGtpbmQ6IFwiSWZTdGF0ZW1lbnRcIixcbiAgICBsb2NhdGlvblxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IGJsb2NrLWJvZGllZCBKYXZhIHByZS1jb25kaXRpb24gbG9vcC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gSmF2YSBXaGlsZVN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLldoaWxlU3RhdGVtZW50fSBTZW1hbnRpYyBsb29wLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0V2hpbGUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBkaXJlY3QgPSBkaXJlY3RDaGlsZHJlbihub2RlKVxuICBjb25zdCBjb25kaXRpb25Db250YWluZXIgPSBub2RlLmdldENoaWxkKFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIilcbiAgY29uc3QgYm9keSA9IG5vZGUuZ2V0Q2hpbGQoXCJCbG9ja1wiKVxuICBjb25zdCBjb25kaXRpb25Ob2RlcyA9IGNvbmRpdGlvbkNvbnRhaW5lciA/IHN0cnVjdHVyYWxDaGlsZHJlbihjb25kaXRpb25Db250YWluZXIpIDogW11cblxuICBpZiAoZGlyZWN0Lmxlbmd0aCAhPSAzIHx8IGRpcmVjdFswXS5uYW1lICE9IFwid2hpbGVcIiB8fCBkaXJlY3RbMV0ubmFtZSAhPSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIgfHxcbiAgICBkaXJlY3RbMl0ubmFtZSAhPSBcIkJsb2NrXCIgfHwgIWNvbmRpdGlvbkNvbnRhaW5lciB8fCAhYm9keSB8fCBjb25kaXRpb25Ob2Rlcy5sZW5ndGggIT0gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ3aGlsZSB3aXRob3V0IGV4YWN0IGNvbmRpdGlvbiBhbmQgYmxvY2sgYm9keVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBib2R5Q29udGV4dCA9IHtcbiAgICAuLi5jb250ZXh0LFxuICAgIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpLFxuICAgIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcylcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiBjb252ZXJ0QmxvY2soYm9keSwgZmlsZW5hbWUsIHNvdXJjZSwgYm9keUNvbnRleHQpLFxuICAgIGNvbmRpdGlvbjogY29udmVydEV4cHJlc3Npb24oY29uZGl0aW9uTm9kZXNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIldoaWxlU3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHtrZXl3b3JkOiBub2RlTG9jYXRpb24oZGlyZWN0WzBdLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgSmF2YSdzIHN1cHBvcnRlZCBtYWluIG1ldGhvZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gTWFpbiBtZXRob2QuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBKYXZhRnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBNb2R1bGUgZnVuY3Rpb24gc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkludGVyZmFjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSByZWNvcmRzIC0gUmVjb3JkIGRlY2xhcmF0aW9ucyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj59IGNsYXNzZXMgLSBSZWZlcmVuY2UgY2xhc3NlcyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9yTmFtZXMgLSBFcnJvciBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvcnMgLSBFcnJvciBkZWNsYXJhdGlvbnMgYnkgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRW50cnlQb2ludH0gU2VtYW50aWMgZW50cnkgcG9pbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRFbnRyeVBvaW50KG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGZ1bmN0aW9ucywgcmVjb3JkTmFtZXMsIHJlY29yZHMsIGNsYXNzZXMsIGVycm9yTmFtZXMsIGVycm9ycykge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBtb2RpZmllcnMgPSBub2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBub2RlLmdldENoaWxkKFwiRm9ybWFsUGFyYW1ldGVyc1wiKVxuICBjb25zdCBkZWZpbml0aW9uID0gbm9kZS5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcbiAgY29uc3QgcmV0dXJuVHlwZSA9IG5vZGUuZ2V0Q2hpbGQoXCJ2b2lkXCIpXG4gIGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcGFyYW1ldGVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihwYXJhbWV0ZXJzKSA6IFtdXG4gIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlck5vZGVzWzBdXG4gIGNvbnN0IHBhcmFtZXRlclR5cGUgPSBwYXJhbWV0ZXI/LmdldENoaWxkKFwiQXJyYXlUeXBlXCIpXG4gIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXI/LmdldENoaWxkKFwiRGVmaW5pdGlvblwiKVxuXG4gIGlmIChtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IFwicHVibGljIHN0YXRpY1wiIHx8ICFwYXJhbWV0ZXJzIHx8IHBhcmFtZXRlck5vZGVzLmxlbmd0aCAhPSAxIHx8XG4gICAgcGFyYW1ldGVyPy5uYW1lICE9IFwiRm9ybWFsUGFyYW1ldGVyXCIgfHwgbm9kZVRleHQocGFyYW1ldGVyVHlwZSA/PyBub2RlLCBzb3VyY2UpICE9IFwiU3RyaW5nW11cIiB8fFxuICAgIG5vZGVUZXh0KHBhcmFtZXRlck5hbWUgPz8gbm9kZSwgc291cmNlKSAhPSBcImFyZ3NcIiB8fCAhZGVmaW5pdGlvbiB8fCBub2RlVGV4dChkZWZpbml0aW9uLCBzb3VyY2UpICE9IFwibWFpblwiIHx8ICFyZXR1cm5UeXBlIHx8XG4gICAgbm9kZS5nZXRDaGlsZChcIlR5cGVQYXJhbWV0ZXJzXCIpIHx8IG5vZGUuZ2V0Q2hpbGQoXCJUaHJvd3NcIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWFpbiBtZXRob2Qgc2lnbmF0dXJlXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGJsb2NrID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIkJsb2NrXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGJvZHkgPSBjb252ZXJ0QmxvY2soYmxvY2ssIGZpbGVuYW1lLCBzb3VyY2UsIHtcbiAgICBiaW5kaW5nczogbmV3IE1hcCgpLFxuICAgIGNsYXNzZXMsXG4gICAgZXJyb3JOYW1lcyxcbiAgICBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoKSxcbiAgICBlcnJvcnMsXG4gICAgZnVuY3Rpb25zLFxuICAgIHJlY29yZE5hbWVzLFxuICAgIHJlY29yZHMsXG4gICAgcmV0dXJuVHlwZTogdW5kZWZpbmVkXG4gIH0pXG5cbiAgcmV0dXJuIHtib2R5LCBraW5kOiBcIkVudHJ5UG9pbnRcIiwgbG9jYXRpb259XG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIHN1cHBvcnRlZCBKYXZhIHByaW50IHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBzdGF0ZW1lbnQgLSBFeHByZXNzaW9uIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlByaW50U3RhdGVtZW50fSBTZW1hbnRpYyBwcmludC5cbiAqL1xuZnVuY3Rpb24gY29udmVydFByaW50KHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgY29uc3QgcHJpbnRJbnZvY2F0aW9uID0gc3RhdGVtZW50LmdldENoaWxkKFwiTWV0aG9kSW52b2NhdGlvblwiKVxuXG4gIGlmICghcHJpbnRJbnZvY2F0aW9uKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWFpbiB3aXRob3V0IFN5c3RlbS5vdXQucHJpbnRsblwiLCBsb2NhdGlvbilcblxuICBjb25zdCBmaWVsZEFjY2VzcyA9IHByaW50SW52b2NhdGlvbi5nZXRDaGlsZChcIkZpZWxkQWNjZXNzXCIpXG4gIGNvbnN0IG1ldGhvZE5hbWUgPSBwcmludEludm9jYXRpb24uZ2V0Q2hpbGQoXCJNZXRob2ROYW1lXCIpXG5cbiAgaWYgKCFmaWVsZEFjY2VzcyB8fCAhbWV0aG9kTmFtZSB8fCBub2RlVGV4dChmaWVsZEFjY2Vzcywgc291cmNlKSAhPSBcIlN5c3RlbS5vdXRcIiB8fCBub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpICE9IFwicHJpbnRsblwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1haW4gd2l0aG91dCBTeXN0ZW0ub3V0LnByaW50bG5cIiwgbm9kZUxvY2F0aW9uKHByaW50SW52b2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICBjb25zdCBhcmd1bWVudExpc3QgPSByZXF1aXJlZENoaWxkKHByaW50SW52b2NhdGlvbiwgXCJBcmd1bWVudExpc3RcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXJndW1lbnRzXyA9IHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpXG5cbiAgaWYgKGFyZ3VtZW50c18ubGVuZ3RoICE9IDEpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwicHJpbnRsbiB3aXRob3V0IG9uZSBzdXBwb3J0ZWQgYXJndW1lbnRcIiwgbm9kZUxvY2F0aW9uKGFyZ3VtZW50TGlzdCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICBjb25zdCBwcmludExvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHByaW50SW52b2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICByZXR1cm4ge2V4cHJlc3Npb246IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLCBraW5kOiBcIlByaW50U3RhdGVtZW50XCIsIGxvY2F0aW9uOiBwcmludExvY2F0aW9ufVxufVxuXG4vKipcbiAqIFBhcnNlcyBKYXZhIGludG8gdGhlIHNoYXJlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBQYXJzZXIgaW5wdXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuc291cmNlIC0gU291cmNlIHRleHQuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdENhcGFiaWxpdHlEZWNsYXJhdGlvbltdfSBbaW5wdXQuY2FwYWJpbGl0aWVzXSAtIENvbXBpbGVyLWF1dGhvcml6ZWQgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHt7aXNFbnRyeTogYm9vbGVhbiwgZnVuY3Rpb25zOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uPiwgcmVjb3JkczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+LCBlcnJvcnM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn19IFtpbnB1dC5wcm9ncmFtXSAtIFJlc29sdmVkIHByb2dyYW0gaW1wb3J0cyBhbmQgZW50cnkgcm9sZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gU2VtYW50aWMgbW9kdWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VKYXZhKHtjYXBhYmlsaXRpZXMgPSBbXSwgZmlsZW5hbWUsIHNvdXJjZSwgcHJvZ3JhbX0pIHtcbiAgY29uc3QgdHJlZSA9IHBhcnNlci5wYXJzZShzb3VyY2UpXG4gIGNvbnN0IGVycm9yID0gZGVzY2VuZGFudHModHJlZS50b3BOb2RlLCBcIuKaoFwiKVswXVxuXG4gIGlmIChlcnJvcikge1xuICAgIGNvbnN0IHJlY29yZFRva2VuID0gamF2YVJlY29yZFJlY292ZXJ5VG9rZW4odHJlZS50b3BOb2RlLCBzb3VyY2UpXG5cbiAgICBpZiAocmVjb3JkVG9rZW4pIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJKYXZhIHJlY29yZCBkZWNsYXJhdGlvbiB1bmRlciB0aGUgcGlubmVkIHBhcnNlclwiLCBub2RlTG9jYXRpb24ocmVjb3JkVG9rZW4sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgY29kZTogXCJQQVJTRV9FUlJPUlwiLFxuICAgICAgbGFuZ3VhZ2U6IFwiamF2YVwiLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihlcnJvciwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBtZXNzYWdlOiBcIkphdmEgcGFyc2VyIHJlcG9ydGVkIGludmFsaWQgc3ludGF4LlwiXG4gICAgfSlcbiAgfVxuXG4gIGlmIChwcm9ncmFtKSByZXR1cm4gcGFyc2VKYXZhUHJvZ3JhbU1vZHVsZSh0cmVlLnRvcE5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIHByb2dyYW0sIGNhcGFiaWxpdGllcylcblxuICBjb25zdCBwcm9ncmFtTWVtYmVycyA9IHRhc2swMzRKYXZhUHJvZ3JhbU1lbWJlcnMoc3RydWN0dXJhbENoaWxkcmVuKHRyZWUudG9wTm9kZSksIGNhcGFiaWxpdGllcywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY2xhc3NEZWNsYXJhdGlvbnMgPSBwcm9ncmFtTWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IHVuZXhwZWN0ZWRQcm9ncmFtTWVtYmVyID0gcHJvZ3JhbU1lbWJlcnMuZmluZCgobWVtYmVyKSA9PiBtZW1iZXIubmFtZSAhPSBcIkNsYXNzRGVjbGFyYXRpb25cIilcbiAgY29uc3QgbWFpbkNsYXNzZXMgPSBjbGFzc0RlY2xhcmF0aW9ucy5maWx0ZXIoKGRlY2xhcmF0aW9uKSA9PiBub2RlVGV4dChyZXF1aXJlZENoaWxkKGRlY2xhcmF0aW9uLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSkgPT0gXCJNYWluXCIpXG4gIGNvbnN0IGNsYXNzRGVjbGFyYXRpb24gPSBtYWluQ2xhc3Nlc1swXVxuXG4gIGlmICghY2xhc3NEZWNsYXJhdGlvbiB8fCBtYWluQ2xhc3Nlcy5sZW5ndGggIT0gMSB8fCB1bmV4cGVjdGVkUHJvZ3JhbU1lbWJlciB8fCBjbGFzc0RlY2xhcmF0aW9ucy5hdCgtMSkgIT0gY2xhc3NEZWNsYXJhdGlvbikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJjb21waWxhdGlvbiB1bml0IG90aGVyIHRoYW4gcmVjb3JkIGNsYXNzZXMgZm9sbG93ZWQgYnkgb25lIE1haW4gY2xhc3NcIixcbiAgICAgIG5vZGVMb2NhdGlvbih1bmV4cGVjdGVkUHJvZ3JhbU1lbWJlciA/PyB0cmVlLnRvcE5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGNsYXNzTmFtZSA9IHJlcXVpcmVkQ2hpbGQoY2xhc3NEZWNsYXJhdGlvbiwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNsYXNzTW9kaWZpZXJzID0gY2xhc3NEZWNsYXJhdGlvbi5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICBjb25zdCBjbGFzc01vZGlmaWVyTmFtZXMgPSBjbGFzc01vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihjbGFzc01vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkgOiBbXVxuXG4gIGlmIChub2RlVGV4dChjbGFzc05hbWUsIHNvdXJjZSkgIT0gXCJNYWluXCIgfHwgY2xhc3NNb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IFwicHVibGljIGZpbmFsXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwicHVibGljIGZpbmFsIE1haW4gY2xhc3NcIiwgbm9kZUxvY2F0aW9uKGNsYXNzRGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGNsYXNzQm9keSA9IHJlcXVpcmVkQ2hpbGQoY2xhc3NEZWNsYXJhdGlvbiwgXCJDbGFzc0JvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbWVtYmVycyA9IHRhc2swMzRKYXZhTWFpbk1lbWJlcnMoc3RydWN0dXJhbENoaWxkcmVuKGNsYXNzQm9keSksIGNhcGFiaWxpdGllcywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgdW5zdXBwb3J0ZWRNZW1iZXIgPSBtZW1iZXJzLmZpbmQoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgIT0gXCJNZXRob2REZWNsYXJhdGlvblwiKVxuXG4gIGlmICh1bnN1cHBvcnRlZE1lbWJlcikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCB1bnN1cHBvcnRlZE1lbWJlci5uYW1lLCBub2RlTG9jYXRpb24odW5zdXBwb3J0ZWRNZW1iZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBtZXRob2RzID0gbWVtYmVyc1xuICBjb25zdCBtYWluTWV0aG9kcyA9IG1ldGhvZHMuZmlsdGVyKChtZXRob2QpID0+IG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQobWV0aG9kLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSkgPT0gXCJtYWluXCIpXG4gIGNvbnN0IG1haW5NZXRob2QgPSBtYWluTWV0aG9kc1swXVxuICBjb25zdCBmdW5jdGlvbk1ldGhvZHMgPSBtZXRob2RzLmZpbHRlcigobWV0aG9kKSA9PiBtZXRob2QgIT0gbWFpbk1ldGhvZClcbiAgY29uc3QgbG9jYXRpb24gPSBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChmdW5jdGlvbk1ldGhvZHMubGVuZ3RoID09IDApIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJjbGFzcyB3aXRob3V0IGEgc2VtYW50aWMgZnVuY3Rpb25cIiwgbG9jYXRpb24pXG4gIGlmICghbWFpbk1ldGhvZCB8fCBtYWluTWV0aG9kcy5sZW5ndGggIT0gMSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImNsYXNzIHdpdGhvdXQgb25lIHVuYW1iaWd1b3VzIG1haW5cIiwgbG9jYXRpb24pXG5cbiAgY29uc3Qgbm9taW5hbE5vZGVzID0gY2xhc3NEZWNsYXJhdGlvbnMuZmlsdGVyKChkZWNsYXJhdGlvbikgPT4gZGVjbGFyYXRpb24gIT0gY2xhc3NEZWNsYXJhdGlvbilcbiAgY29uc3QgZXJyb3JOb2RlcyA9IG5vbWluYWxOb2Rlcy5maWx0ZXIoKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgY29uc3QgcGFyZW50ID0gZGVjbGFyYXRpb24uZ2V0Q2hpbGQoXCJTdXBlcmNsYXNzXCIpXG4gICAgcmV0dXJuIHBhcmVudCAmJiBub2RlVGV4dChwYXJlbnQsIHNvdXJjZSkgPT0gXCJleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb25cIlxuICB9KVxuICBjb25zdCByZWZlcmVuY2VDbGFzc05vZGVzID0gbm9taW5hbE5vZGVzLmZpbHRlcigoZGVjbGFyYXRpb24pID0+ICFlcnJvck5vZGVzLmluY2x1ZGVzKGRlY2xhcmF0aW9uKSAmJlxuICAgIHN0cnVjdHVyYWxDaGlsZHJlbihyZXF1aXJlZENoaWxkKGRlY2xhcmF0aW9uLCBcIkNsYXNzQm9keVwiLCBmaWxlbmFtZSwgc291cmNlKSkuc29tZSgobWVtYmVyKSA9PlxuICAgICAgbWVtYmVyLm5hbWUgPT0gXCJGaWVsZERlY2xhcmF0aW9uXCIgJiYgbm9kZVRleHQobWVtYmVyLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpID8/IG1lbWJlciwgc291cmNlKSA9PSBcInByaXZhdGVcIikpXG4gIGNvbnN0IHJlY29yZE5vZGVzID0gbm9taW5hbE5vZGVzLmZpbHRlcigoZGVjbGFyYXRpb24pID0+ICFlcnJvck5vZGVzLmluY2x1ZGVzKGRlY2xhcmF0aW9uKSAmJiAhcmVmZXJlbmNlQ2xhc3NOb2Rlcy5pbmNsdWRlcyhkZWNsYXJhdGlvbikpXG4gIGNvbnN0IGVycm9yRGVjbGFyYXRpb25zID0gZXJyb3JOb2Rlcy5tYXAoKGVycm9yTm9kZSwgaW5kZXgpID0+ICh7XG4gICAgaWQ6IGBlcnJvcjoke2luZGV4fWAsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGVycm9yTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgbmFtZTogbm9kZVRleHQocmVxdWlyZWRDaGlsZChlcnJvck5vZGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlKVxuICB9KSlcbiAgY29uc3QgcmVjb3JkRGVjbGFyYXRpb25zID0gcmVjb3JkTm9kZXMubWFwKChyZWNvcmROb2RlLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGlkID0gYHJlY29yZDoke2luZGV4fWBcbiAgICBjb25zdCB0eXBlUGFyYW1ldGVycyA9IGNvbnZlcnRKYXZhVHlwZVBhcmFtZXRlcnMocmVjb3JkTm9kZS5nZXRDaGlsZChcIlR5cGVQYXJhbWV0ZXJzXCIpLCBpZCwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB7XG4gICAgICBmaWVsZHM6IFtdLFxuICAgICAgaWQsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNvcmREZWNsYXJhdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24ocmVjb3JkTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBuYW1lOiBub2RlVGV4dChyZXF1aXJlZENoaWxkKHJlY29yZE5vZGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlKSxcbiAgICAgIC4uLih0eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgICB9XG4gIH0pXG4gIGNvbnN0IHJlZmVyZW5jZURlY2xhcmF0aW9ucyA9IHJlZmVyZW5jZUNsYXNzTm9kZXMubWFwKChjbGFzc05vZGUsIGluZGV4KSA9PiAoe1xuICAgIGNvbnN0cnVjdG9yOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNvbnN0cnVjdG9yRGVjbGFyYXRpb259ICovICh7fSksIGZpZWxkczogW10sIGlkOiBgY2xhc3M6JHtpbmRleH1gLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNsYXNzRGVjbGFyYXRpb25cIiksIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oY2xhc3NOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgbWV0aG9kczogW10sXG4gICAgbmFtZTogbm9kZVRleHQocmVxdWlyZWRDaGlsZChjbGFzc05vZGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlKVxuICB9KSlcbiAgY29uc3QgcmVjb3JkTmFtZXMgPSAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JbnRlcmZhY2VEZWNsYXJhdGlvbj59ICovIChcbiAgICBuZXcgTWFwKHJlY29yZERlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiAvKiogQHR5cGUge2NvbnN0fSAqLyAoW2RlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uXSkpKSlcbiAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBjYXBhYmlsaXRpZXMuZmxhdE1hcCgoe3Jlc291cmNlc30pID0+IHJlc291cmNlcykpIHJlY29yZE5hbWVzLnNldChyZXNvdXJjZS5uYW1lLCByZXNvdXJjZSlcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiByZWZlcmVuY2VEZWNsYXJhdGlvbnMpIHJlY29yZE5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gKi9cbiAgY29uc3QgZXJyb3JOYW1lcyA9IG5ldyBNYXAoZXJyb3JEZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gLyoqIEB0eXBlIHtjb25zdH0gKi8gKFtkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbl0pKSlcbiAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7ZmFpbHVyZXN9KSA9PiBmYWlsdXJlcykpIHtcbiAgICBlcnJvck5hbWVzLnNldChmYWlsdXJlLm5hbWUsIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGZhaWx1cmUpKSlcbiAgfVxuICBjb25zdCBlcnJvcnNCeUlkID0gbmV3IE1hcChbLi4uZXJyb3JOYW1lcy52YWx1ZXMoKV0ubWFwKChkZWNsYXJhdGlvbikgPT4gWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBkZWNsYXJhdGlvbl0pKVxuICBjb25zdCBlcnJvcnMgPSBlcnJvck5vZGVzLm1hcCgoZXJyb3JOb2RlLCBpbmRleCkgPT4gY29udmVydEphdmFFcnJvcihlcnJvck5vZGUsIGVycm9yRGVjbGFyYXRpb25zW2luZGV4XSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IHJlY29yZHNCeUlkID0gbmV3IE1hcChyZWNvcmREZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBkZWNsYXJhdGlvbl0pKVxuICBjb25zdCBjbGFzc2VzQnlJZCA9IG5ldyBNYXAocmVmZXJlbmNlRGVjbGFyYXRpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgcmVjb3JkcyA9IHJlY29yZE5vZGVzLm1hcCgocmVjb3JkTm9kZSwgaW5kZXgpID0+XG4gICAgY29udmVydEphdmFSZWNvcmQocmVjb3JkTm9kZSwgcmVjb3JkRGVjbGFyYXRpb25zW2luZGV4XSxcbiAgICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAocmVjb3JkTmFtZXMpKSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IHNpZ25hdHVyZXMgPSBmdW5jdGlvbk1ldGhvZHMubWFwKChtZXRob2QsIGluZGV4KSA9PlxuICAgIGNvbnZlcnRGdW5jdGlvblNpZ25hdHVyZShtZXRob2QsIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCBmYWxzZSwgYGZ1bmN0aW9uOiR7aW5kZXh9YCwgcmVmZXJlbmNlRGVjbGFyYXRpb25zLmxlbmd0aCA+IDApKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIEphdmFGdW5jdGlvblNpZ25hdHVyZT59ICovXG4gIGNvbnN0IGZ1bmN0aW9uU2lnbmF0dXJlcyA9IG5ldyBNYXAoY2FwYWJpbGl0eUZ1bmN0aW9uU2lnbmF0dXJlcyhjYXBhYmlsaXRpZXMsIGxvY2F0aW9uKSlcbiAgZm9yIChjb25zdCBzaWduYXR1cmUgb2Ygc2lnbmF0dXJlcykgZnVuY3Rpb25TaWduYXR1cmVzLnNldChzaWduYXR1cmUubmFtZSwgc2lnbmF0dXJlKVxuICBjb25zdCBjbGFzc2VzID0gcmVmZXJlbmNlQ2xhc3NOb2Rlcy5tYXAoKGNsYXNzTm9kZSwgaW5kZXgpID0+IGNvbnZlcnRKYXZhUmVmZXJlbmNlQ2xhc3MoY2xhc3NOb2RlLCByZWZlcmVuY2VEZWNsYXJhdGlvbnNbaW5kZXhdLFxuICAgIHJlY29yZE5hbWVzLCByZWNvcmRzQnlJZCwgY2xhc3Nlc0J5SWQsIGZ1bmN0aW9uU2lnbmF0dXJlcywgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGZ1bmN0aW9ucyA9IGZ1bmN0aW9uTWV0aG9kcy5tYXAoKG1ldGhvZCwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uKG1ldGhvZCwgc2lnbmF0dXJlc1tpbmRleF0sIGZ1bmN0aW9uU2lnbmF0dXJlcywgcmVjb3JkTmFtZXMsIHJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCxcbiAgICAgIGVycm9yTmFtZXMsIGVycm9yc0J5SWQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBlbnRyeVBvaW50ID0gY29udmVydEVudHJ5UG9pbnQobWFpbk1ldGhvZCwgZmlsZW5hbWUsIHNvdXJjZSwgZnVuY3Rpb25TaWduYXR1cmVzLCByZWNvcmROYW1lcywgcmVjb3Jkc0J5SWQsXG4gICAgY2xhc3Nlc0J5SWQsIGVycm9yTmFtZXMsIGVycm9yc0J5SWQpXG5cbiAgcmV0dXJuIHtlbnRyeVBvaW50LCBmdW5jdGlvbnMsIGtpbmQ6IFwiTW9kdWxlXCIsIGxvY2F0aW9uLCAuLi4oZXJyb3JzLmxlbmd0aCA+IDAgPyB7ZXJyb3JzfSA6IHt9KSxcbiAgICAuLi4oY2xhc3Nlcy5sZW5ndGggPiAwID8ge2NsYXNzZXN9IDoge30pLCAuLi4ocmVjb3Jkcy5sZW5ndGggPiAwID8ge3JlY29yZHN9IDoge30pfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGV4YWN0IHByb3RlY3RlZCB0b3AtbGV2ZWwgc3VwcG9ydCBlbWl0dGVkIGZvciB0aGUgYnVpbHQtaW4gcHJvYmUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZVtdfSBtZW1iZXJzIC0gUGFyc2VkIHByb2dyYW0gbWVtYmVycy5cbiAqIEBwYXJhbSB7cmVhZG9ubHkgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0Q2FwYWJpbGl0eURlY2xhcmF0aW9uW119IGNhcGFiaWxpdGllcyAtIEF1dGhvcml6ZWQgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGVbXX0gUG9ydGFibGUgcHJvZ3JhbSBtZW1iZXJzLlxuICovXG5mdW5jdGlvbiB0YXNrMDM0SmF2YVByb2dyYW1NZW1iZXJzKG1lbWJlcnMsIGNhcGFiaWxpdGllcywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoIWlzVGFzazAzNFJlc291cmNlUHJvYmUoY2FwYWJpbGl0aWVzKSB8fCBub2RlVGV4dChtZW1iZXJzWzBdLCBzb3VyY2UpICE9IFwiLy8gc2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0XCIpIHJldHVybiBtZW1iZXJzXG4gIGlmICghaGFzRXhhY3RFZmZlY3RTdXBwb3J0KHNvdXJjZSwgXCJqYXZhXCIsIFwidG9wXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hbGZvcm1lZCBwcm90ZWN0ZWQgVGFzayAwMzQgdG9wLWxldmVsIHN1cHBvcnRcIiwgbm9kZUxvY2F0aW9uKG1lbWJlcnNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IG5hbWVzID0gW1wiUHJvYmVPcGVyYXRpb25GYWlsdXJlXCIsIFwiUHJvYmVBY3F1aXJlRmFpbHVyZVwiLCBcIlByb2JlUmVhZEZhaWx1cmVcIiwgXCJQcm9iZUNsb3NlRmFpbHVyZVwiLFxuICAgIFwiUHJvYmVSZXNvdXJjZUNsb3NlZFwiLCBcIlByb2JlUmVzb3VyY2VcIl1cbiAgY29uc3QgbWF0Y2hlcyA9IG5hbWVzLmV2ZXJ5KChuYW1lLCBpbmRleCkgPT4gbWVtYmVyc1tpbmRleCArIDFdPy5uYW1lID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiICYmXG4gICAgbm9kZVRleHQocmVxdWlyZWRDaGlsZChtZW1iZXJzW2luZGV4ICsgMV0sIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlKSA9PSBuYW1lKVxuXG4gIGlmICghbWF0Y2hlcyB8fCBub2RlVGV4dChtZW1iZXJzW25hbWVzLmxlbmd0aCArIDFdLCBzb3VyY2UpICE9IFwiLy8gc2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0LXRvcC1lbmRcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IHRvcC1sZXZlbCBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihtZW1iZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICByZXR1cm4gbWVtYmVycy5zbGljZShuYW1lcy5sZW5ndGggKyAyKVxufVxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGV4YWN0IHByb3RlY3RlZCBNYWluLW1lbWJlciBzdXBwb3J0IGVtaXR0ZWQgZm9yIHRoZSBidWlsdC1pbiBwcm9iZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IG1lbWJlcnMgLSBQYXJzZWQgTWFpbiBtZW1iZXJzLlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gY2FwYWJpbGl0aWVzIC0gQXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZVtdfSBQb3J0YWJsZSBNYWluIG1lbWJlcnMuXG4gKi9cbmZ1bmN0aW9uIHRhc2swMzRKYXZhTWFpbk1lbWJlcnMobWVtYmVycywgY2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghaXNUYXNrMDM0UmVzb3VyY2VQcm9iZShjYXBhYmlsaXRpZXMpIHx8IG5vZGVUZXh0KG1lbWJlcnNbMF0sIHNvdXJjZSkgIT0gXCIvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtbWVtYmVyc1wiKSByZXR1cm4gbWVtYmVyc1xuICBpZiAoIWhhc0V4YWN0RWZmZWN0U3VwcG9ydChzb3VyY2UsIFwiamF2YVwiLCBcIm1lbWJlcnNcIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCBtZW1iZXIgc3VwcG9ydFwiLCBub2RlTG9jYXRpb24obWVtYmVyc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgZXhwZWN0ZWQgPSBbXG4gICAgW1wiRmllbGREZWNsYXJhdGlvblwiLCBcIl9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2VcIl0sIFtcIk1ldGhvZERlY2xhcmF0aW9uXCIsIFwicHJvYmVFZmZlY3RcIl0sXG4gICAgW1wiTWV0aG9kRGVjbGFyYXRpb25cIiwgXCJwcm9iZUFjcXVpcmVcIl0sIFtcIk1ldGhvZERlY2xhcmF0aW9uXCIsIFwicHJvYmVSZWFkXCJdLFxuICAgIFtcIk1ldGhvZERlY2xhcmF0aW9uXCIsIFwicHJvYmVDbG9zZVwiXSwgW1wiTWV0aG9kRGVjbGFyYXRpb25cIiwgXCJwcm9iZVRyYWNlXCJdXG4gIF1cbiAgY29uc3QgbWF0Y2hlcyA9IGV4cGVjdGVkLmV2ZXJ5KChba2luZCwgbmFtZV0sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgbWVtYmVyID0gbWVtYmVyc1tpbmRleCArIDFdXG4gICAgaWYgKG1lbWJlcj8ubmFtZSAhPSBraW5kKSByZXR1cm4gZmFsc2VcbiAgICBpZiAoa2luZCA9PSBcIkZpZWxkRGVjbGFyYXRpb25cIikgcmV0dXJuIG5vZGVUZXh0KG1lbWJlciwgc291cmNlKS5pbmNsdWRlcyhgICR7bmFtZX0gPWApXG4gICAgcmV0dXJuIG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQobWVtYmVyLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSkgPT0gbmFtZVxuICB9KVxuXG4gIGlmICghbWF0Y2hlcyB8fCBub2RlVGV4dChtZW1iZXJzW2V4cGVjdGVkLmxlbmd0aCArIDFdLCBzb3VyY2UpICE9IFwiLy8gc2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0LW1lbWJlcnMtZW5kXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCBtZW1iZXIgc3VwcG9ydFwiLCBub2RlTG9jYXRpb24obWVtYmVyc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgcmV0dXJuIG1lbWJlcnMuc2xpY2UoZXhwZWN0ZWQubGVuZ3RoICsgMilcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgYWxyZWFkeS1xdWFsaWZpZWQgY2Fub25pY2FsIEphdmEgY29tcGlsYXRpb24gdW5pdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSByb290IC0gRXJyb3ItZnJlZSBQcm9ncmFtIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlIHRleHQuXG4gKiBAcGFyYW0ge3tpc0VudHJ5OiBib29sZWFuLCBmdW5jdGlvbnM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb24+LCByZWNvcmRzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj4sIGVycm9ycz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fX0gcHJvZ3JhbSAtIFJlc29sdmVkIHByb2dyYW0gaW1wb3J0cyBhbmQgZW50cnkgcm9sZS5cbiAqIEBwYXJhbSB7cmVhZG9ubHkgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0Q2FwYWJpbGl0eURlY2xhcmF0aW9uW119IGNhcGFiaWxpdGllcyAtIENvbXBpbGVyLWF1dGhvcml6ZWQgZGVjbGFyYXRpb25zLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBTZW1hbnRpYyBtb2R1bGUuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSmF2YVByb2dyYW1Nb2R1bGUocm9vdCwgZmlsZW5hbWUsIHNvdXJjZSwgcHJvZ3JhbSwgY2FwYWJpbGl0aWVzKSB7XG4gIGluc3BlY3RKYXZhTW9kdWxlKHtmaWxlbmFtZSwgc291cmNlfSlcbiAgY29uc3QgY2xhc3NEZWNsYXJhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSAqLyAoc3RydWN0dXJhbENoaWxkcmVuKHJvb3QpLmZpbmQoKG5vZGUpID0+IG5vZGUubmFtZSA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIikpXG4gIGNvbnN0IGNsYXNzTW9kaWZpZXJzID0gY2xhc3NEZWNsYXJhdGlvbi5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICBjb25zdCBjbGFzc01vZGlmaWVyTmFtZXMgPSBjbGFzc01vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihjbGFzc01vZGlmaWVycykubWFwKCh7bmFtZX0pID0+IG5hbWUpIDogW11cbiAgY29uc3QgY2xhc3NCb2R5ID0gcmVxdWlyZWRDaGlsZChjbGFzc0RlY2xhcmF0aW9uLCBcIkNsYXNzQm9keVwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBtZW1iZXJzID0gc3RydWN0dXJhbENoaWxkcmVuKGNsYXNzQm9keSlcbiAgY29uc3QgbWFpbk1ldGhvZHMgPSBtZW1iZXJzLmZpbHRlcigobWV0aG9kKSA9PiBtZXRob2QubmFtZSA9PSBcIk1ldGhvZERlY2xhcmF0aW9uXCIgJiZcbiAgICBub2RlVGV4dChyZXF1aXJlZENoaWxkKG1ldGhvZCwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpID09IFwibWFpblwiKVxuICBjb25zdCBzdXBlcmNsYXNzID0gY2xhc3NEZWNsYXJhdGlvbi5nZXRDaGlsZChcIlN1cGVyY2xhc3NcIilcbiAgY29uc3QgaXNFcnJvciA9IEJvb2xlYW4oc3VwZXJjbGFzcyAmJiBub2RlVGV4dChzdXBlcmNsYXNzLCBzb3VyY2UpID09IFwiZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uXCIpXG4gIGNvbnN0IGlzUmVjb3JkID0gIWlzRXJyb3IgJiYgbWVtYmVycy5zb21lKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiIHx8IG1lbWJlci5uYW1lID09IFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiKVxuICBjb25zdCBsb2NhdGlvbiA9IG1vZHVsZUxvY2F0aW9uKGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKHByb2dyYW0uaXNFbnRyeSAmJiBjbGFzc01vZGlmaWVyTmFtZXMuam9pbihcIiBcIikgIT0gXCJwdWJsaWMgZmluYWxcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJzZWxlY3RlZCBlbnRyeSBjbGFzcyB3aXRob3V0IHB1YmxpYyBmaW5hbCB2aXNpYmlsaXR5XCIsIG5vZGVMb2NhdGlvbihjbGFzc0RlY2xhcmF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAocHJvZ3JhbS5pc0VudHJ5ICYmIG1haW5NZXRob2RzLmxlbmd0aCAhPSAxKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwic2VsZWN0ZWQgZW50cnkgY2xhc3Mgd2l0aG91dCBvbmUgbWFpbiBtZXRob2RcIiwgbG9jYXRpb24pXG4gIGlmICghcHJvZ3JhbS5pc0VudHJ5ICYmIG1haW5NZXRob2RzLmxlbmd0aCA+IDApIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWluIG1ldGhvZCBvdXRzaWRlIHRoZSBzZWxlY3RlZCBlbnRyeSBtb2R1bGVcIiwgbm9kZUxvY2F0aW9uKG1haW5NZXRob2RzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgaWYgKChpc1JlY29yZCB8fCBpc0Vycm9yKSAmJiBtYWluTWV0aG9kcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbWluYWwgY2xhc3MgY29udGFpbmluZyBtYWluXCIsIG5vZGVMb2NhdGlvbihjbGFzc0RlY2xhcmF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIGNvbnN0IGVycm9yRGVjbGFyYXRpb25zID0gaXNFcnJvciA/IFt7XG4gICAgaWQ6IFwiZXJyb3I6MFwiLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihjbGFzc0RlY2xhcmF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBuYW1lOiBub2RlVGV4dChyZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlKVxuICB9XSA6IFtdXG5cbiAgY29uc3QgcmVjb3JkVHlwZVBhcmFtZXRlcnMgPSBpc1JlY29yZFxuICAgID8gY29udmVydEphdmFUeXBlUGFyYW1ldGVycyhjbGFzc0RlY2xhcmF0aW9uLmdldENoaWxkKFwiVHlwZVBhcmFtZXRlcnNcIiksIFwicmVjb3JkOjBcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCByZWNvcmREZWNsYXJhdGlvbnMgPSBpc1JlY29yZCA/IFt7XG4gICAgZmllbGRzOiBbXSxcbiAgICBpZDogXCJyZWNvcmQ6MFwiLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZERlY2xhcmF0aW9uXCIpLFxuICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oY2xhc3NEZWNsYXJhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgbmFtZTogbm9kZVRleHQocmVxdWlyZWRDaGlsZChjbGFzc0RlY2xhcmF0aW9uLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSksXG4gICAgLi4uKHJlY29yZFR5cGVQYXJhbWV0ZXJzID8ge3R5cGVQYXJhbWV0ZXJzOiByZWNvcmRUeXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfV0gOiBbXVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59ICovXG4gIGNvbnN0IHJlY29yZE5hbWVzID0gbmV3IE1hcChwcm9ncmFtLnJlY29yZHMpXG4gIGNvbnN0IGVycm9yTmFtZXMgPSBuZXcgTWFwKHByb2dyYW0uZXJyb3JzID8/IFtdKVxuXG4gIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgY2FwYWJpbGl0aWVzLmZsYXRNYXAoKHtyZXNvdXJjZXN9KSA9PiByZXNvdXJjZXMpKSByZWNvcmROYW1lcy5zZXQocmVzb3VyY2UubmFtZSwgcmVzb3VyY2UpXG4gIGZvciAoY29uc3QgZmFpbHVyZSBvZiBjYXBhYmlsaXRpZXMuZmxhdE1hcCgoe2ZhaWx1cmVzfSkgPT4gZmFpbHVyZXMpKSB7XG4gICAgZXJyb3JOYW1lcy5zZXQoZmFpbHVyZS5uYW1lLCAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChmYWlsdXJlKSkpXG4gIH1cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiByZWNvcmREZWNsYXJhdGlvbnMpIHJlY29yZE5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBlcnJvckRlY2xhcmF0aW9ucykgZXJyb3JOYW1lcy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb24pXG4gIGNvbnN0IGVycm9yc0J5SWQgPSBuZXcgTWFwKFsuLi5lcnJvck5hbWVzLnZhbHVlcygpXS5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGVycm9ycyA9IGVycm9yRGVjbGFyYXRpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IGNvbnZlcnRKYXZhRXJyb3IoY2xhc3NEZWNsYXJhdGlvbiwgZGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHRydWUpKVxuICBjb25zdCByZWNvcmRzQnlJZCA9IG5ldyBNYXAoWy4uLnByb2dyYW0ucmVjb3Jkcy52YWx1ZXMoKSwgLi4ucmVjb3JkRGVjbGFyYXRpb25zXVxuICAgIC5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGNsYXNzZXNCeUlkID0gbmV3IE1hcCgpXG4gIGNvbnN0IHJlY29yZHMgPSByZWNvcmREZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT5cbiAgICBjb252ZXJ0SmF2YVJlY29yZChjbGFzc0RlY2xhcmF0aW9uLCBkZWNsYXJhdGlvbixcbiAgICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAocmVjb3JkTmFtZXMpKSxcbiAgICAgIGZpbGVuYW1lLCBzb3VyY2UsIHRydWUpKVxuICBjb25zdCBmdW5jdGlvbk1ldGhvZHMgPSBpc1JlY29yZCB8fCBpc0Vycm9yID8gW10gOiBtZW1iZXJzLmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIubmFtZSA9PSBcIk1ldGhvZERlY2xhcmF0aW9uXCIgJiYgIW1haW5NZXRob2RzLmluY2x1ZGVzKG1lbWJlcikpXG4gIGNvbnN0IHNpZ25hdHVyZXMgPSBmdW5jdGlvbk1ldGhvZHMubWFwKChtZXRob2QsIGluZGV4KSA9PlxuICAgIGNvbnZlcnRGdW5jdGlvblNpZ25hdHVyZShtZXRob2QsIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0cnVlLCBgZnVuY3Rpb246JHtpbmRleH1gKSlcbiAgLyoqIEB0eXBlIHtbc3RyaW5nLCBKYXZhRnVuY3Rpb25TaWduYXR1cmVdW119ICovXG4gIGNvbnN0IGltcG9ydGVkRnVuY3Rpb25TaWduYXR1cmVzID0gWy4uLnByb2dyYW0uZnVuY3Rpb25zXS5tYXAoKFtsb2NhbE5hbWUsIGRlY2xhcmF0aW9uXSkgPT4gW2xvY2FsTmFtZSwge1xuICAgIGxvY2F0aW9uOiBkZWNsYXJhdGlvbi5sb2NhdGlvbixcbiAgICBuYW1lOiBsb2NhbE5hbWUsXG4gICAgbmFtZUxvY2F0aW9uOiBkZWNsYXJhdGlvbi5sb2NhdGlvbixcbiAgICBwYXJhbWV0ZXJzOiBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IGRlY2xhcmF0aW9uLnJldHVyblR5cGUsXG4gICAgLi4uKGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzID8ge3R5cGVQYXJhbWV0ZXJzOiBkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfV0pXG4gIGNvbnN0IGZ1bmN0aW9uU2lnbmF0dXJlcyA9IG5ldyBNYXAoWy4uLmNhcGFiaWxpdHlGdW5jdGlvblNpZ25hdHVyZXMoY2FwYWJpbGl0aWVzLCBsb2NhdGlvbiksIC4uLmltcG9ydGVkRnVuY3Rpb25TaWduYXR1cmVzXSlcblxuICBmb3IgKGNvbnN0IHNpZ25hdHVyZSBvZiBzaWduYXR1cmVzKSBmdW5jdGlvblNpZ25hdHVyZXMuc2V0KHNpZ25hdHVyZS5uYW1lLCBzaWduYXR1cmUpXG4gIGNvbnN0IGZ1bmN0aW9ucyA9IGZ1bmN0aW9uTWV0aG9kcy5tYXAoKG1ldGhvZCwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uKG1ldGhvZCwgc2lnbmF0dXJlc1tpbmRleF0sIGZ1bmN0aW9uU2lnbmF0dXJlcywgcmVjb3JkTmFtZXMsIHJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCxcbiAgICAgIGVycm9yTmFtZXMsIGVycm9yc0J5SWQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBlbXB0eUJsb2NrID0ge2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkJsb2NrXCIpLCBsb2NhdGlvbiwgc3RhdGVtZW50czogW119XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBwcm9ncmFtLmlzRW50cnlcbiAgICA/IGNvbnZlcnRFbnRyeVBvaW50KG1haW5NZXRob2RzWzBdLCBmaWxlbmFtZSwgc291cmNlLCBmdW5jdGlvblNpZ25hdHVyZXMsIHJlY29yZE5hbWVzLCByZWNvcmRzQnlJZCwgY2xhc3Nlc0J5SWQsXG4gICAgICBlcnJvck5hbWVzLCBlcnJvcnNCeUlkKVxuICAgIDoge2JvZHk6IGVtcHR5QmxvY2ssIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVudHJ5UG9pbnRcIiksIGxvY2F0aW9ufVxuXG4gIHJldHVybiB7XG4gICAgZW50cnlQb2ludCxcbiAgICBmdW5jdGlvbnMsXG4gICAga2luZDogXCJNb2R1bGVcIixcbiAgICBsb2NhdGlvbixcbiAgICAuLi4oZXJyb3JzLmxlbmd0aCA+IDAgPyB7ZXJyb3JzfSA6IHt9KSxcbiAgICAuLi4ocmVjb3Jkcy5sZW5ndGggPiAwID8ge3JlY29yZHN9IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkcyBkaXJlY3QgcGFja2FnZS9pbXBvcnQvY2xhc3Mgbm9kZXMgZnJvbSB0aGUgcGlubmVkIExlemVyIGdyYW1tYXIuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBQYXJzZXIgaW5wdXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuc291cmNlIC0gU291cmNlIHRleHQuXG4gKiBAcmV0dXJucyB7e2ltcG9ydHM6IHtpbXBvcnRlZE5hbWU6IHN0cmluZywgbG9jYWxOYW1lOiBzdHJpbmcsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgbmFtZXNwYWNlOiB0cnVlLCBwYXRoTG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBzcGVjaWZpZXI6IHN0cmluZywgdHlwZU9ubHk6IGZhbHNlfVtdLCBleHBvcnRzOiB7ZXhwb3J0ZWROYW1lOiBzdHJpbmcsIGxvY2FsTmFtZTogc3RyaW5nLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHR5cGVPbmx5OiBmYWxzZX1bXSwgbmF0aXZlTmFtZTogc3RyaW5nfX0gUGFyc2VyLW93bmVkIEphdmEgbW9kdWxlIGhlYWRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3BlY3RKYXZhTW9kdWxlKHtmaWxlbmFtZSwgc291cmNlfSkge1xuICBjb25zdCB0cmVlID0gcGFyc2VyLnBhcnNlKHNvdXJjZSlcbiAgY29uc3QgZXJyb3IgPSBkZXNjZW5kYW50cyh0cmVlLnRvcE5vZGUsIFwi4pqgXCIpWzBdXG5cbiAgaWYgKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICBjb2RlOiBcIlBBUlNFX0VSUk9SXCIsXG4gICAgICBsYW5ndWFnZTogXCJqYXZhXCIsXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGVycm9yLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG1lc3NhZ2U6IFwiSmF2YSBwYXJzZXIgcmVwb3J0ZWQgaW52YWxpZCBzeW50YXguXCJcbiAgICB9KVxuICB9XG4gIGNvbnN0IG1lbWJlcnMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4odHJlZS50b3BOb2RlKVxuICBjb25zdCBwYWNrYWdlcyA9IG1lbWJlcnMuZmlsdGVyKChub2RlKSA9PiBub2RlLm5hbWUgPT0gXCJQYWNrYWdlRGVjbGFyYXRpb25cIilcbiAgY29uc3QgaW1wb3J0c05vZGVzID0gbWVtYmVycy5maWx0ZXIoKG5vZGUpID0+IG5vZGUubmFtZSA9PSBcIkltcG9ydERlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGNsYXNzZXMgPSBtZW1iZXJzLmZpbHRlcigobm9kZSkgPT4gbm9kZS5uYW1lID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKVxuICBjb25zdCBpbnZhbGlkID0gbWVtYmVycy5maW5kKChub2RlKSA9PiAhW1wiUGFja2FnZURlY2xhcmF0aW9uXCIsIFwiSW1wb3J0RGVjbGFyYXRpb25cIiwgXCJDbGFzc0RlY2xhcmF0aW9uXCJdLmluY2x1ZGVzKG5vZGUubmFtZSkpXG4gIGNvbnN0IHBhY2thZ2VOb2RlID0gcGFja2FnZXNbMF1cbiAgY29uc3QgY2xhc3NOb2RlID0gY2xhc3Nlc1swXVxuXG4gIGlmICghcGFja2FnZU5vZGUgfHwgcGFja2FnZXMubGVuZ3RoICE9IDEgfHwgIWNsYXNzTm9kZSB8fCBjbGFzc2VzLmxlbmd0aCAhPSAxIHx8IGludmFsaWQgfHxcbiAgICBtZW1iZXJzLmluZGV4T2YocGFja2FnZU5vZGUpICE9IDAgfHwgbWVtYmVycy5pbmRleE9mKGNsYXNzTm9kZSkgIT0gbWVtYmVycy5sZW5ndGggLSAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9uZSBwYWNrYWdlIGZvbGxvd2VkIGJ5IGltcG9ydHMgYW5kIG9uZSBwdWJsaWMgY2xhc3NcIixcbiAgICAgIG5vZGVMb2NhdGlvbihpbnZhbGlkID8/IHBhY2thZ2VzWzFdID8/IGNsYXNzZXNbMV0gPz8gdHJlZS50b3BOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBwYWNrYWdlTmFtZU5vZGUgPSBwYWNrYWdlTm9kZS5nZXRDaGlsZChcIlNjb3BlZElkZW50aWZpZXJcIikgPz8gcGFja2FnZU5vZGUuZ2V0Q2hpbGQoXCJJZGVudGlmaWVyXCIpXG4gIGNvbnN0IGNsYXNzTmFtZU5vZGUgPSByZXF1aXJlZENoaWxkKGNsYXNzTm9kZSwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1vZGlmaWVycyA9IGNsYXNzTm9kZS5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICBjb25zdCBtb2RpZmllck5hbWVzID0gbW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKG1vZGlmaWVycykubWFwKCh7bmFtZX0pID0+IG5hbWUpIDogW11cbiAgY29uc3QgcGFja2FnZU5hbWUgPSBwYWNrYWdlTmFtZU5vZGUgPyBub2RlVGV4dChwYWNrYWdlTmFtZU5vZGUsIHNvdXJjZSkgOiBcIlwiXG4gIGNvbnN0IGNsYXNzTmFtZSA9IG5vZGVUZXh0KGNsYXNzTmFtZU5vZGUsIHNvdXJjZSlcbiAgY29uc3QgZXhwZWN0ZWRTdWZmaXggPSBgJHtwYWNrYWdlTmFtZS5yZXBsYWNlQWxsKFwiLlwiLCBcIi9cIil9LyR7Y2xhc3NOYW1lfS5qYXZhYFxuXG4gIGlmICghcGFja2FnZU5hbWVOb2RlIHx8ICFbXCJwdWJsaWMgZmluYWxcIiwgXCJmaW5hbFwiXS5pbmNsdWRlcyhtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpKSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgoZXhwZWN0ZWRTdWZmaXgpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInBhY2thZ2UvcGF0aC9wdWJsaWMtY2xhc3MgY29udHJhY3RcIiwgbm9kZUxvY2F0aW9uKGNsYXNzTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgaW1wb3J0cyA9IGltcG9ydHNOb2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICBjb25zdCBuYW1lID0gbm9kZS5nZXRDaGlsZChcIlNjb3BlZElkZW50aWZpZXJcIikgPz8gbm9kZS5nZXRDaGlsZChcIklkZW50aWZpZXJcIilcblxuICAgIGlmICghbmFtZSB8fCBub2RlLmdldENoaWxkKFwic3RhdGljXCIpIHx8IG5vZGUuZ2V0Q2hpbGQoXCJBc3Rlcmlza1wiKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInN0YXRpYyBvciB3aWxkY2FyZCBpbXBvcnRcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBzcGVjaWZpZXIgPSBub2RlVGV4dChuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4ge1xuICAgICAgaW1wb3J0ZWROYW1lOiBcIipcIixcbiAgICAgIGxvY2FsTmFtZTogc3BlY2lmaWVyLnNwbGl0KFwiLlwiKS5hdCgtMSkgPz8gXCJcIixcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBuYW1lc3BhY2U6IC8qKiBAdHlwZSB7Y29uc3R9ICovICh0cnVlKSxcbiAgICAgIHBhdGhMb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgc3BlY2lmaWVyLFxuICAgICAgdHlwZU9ubHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSlcbiAgICB9XG4gIH0pXG4gIGNvbnN0IGNsYXNzQm9keSA9IHJlcXVpcmVkQ2hpbGQoY2xhc3NOb2RlLCBcIkNsYXNzQm9keVwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjbGFzc01lbWJlcnMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY2xhc3NCb2R5KVxuICBjb25zdCByZWNvcmRDbGFzcyA9IGNsYXNzTWVtYmVycy5zb21lKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiIHx8IG1lbWJlci5uYW1lID09IFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiKVxuICBjb25zdCBleHBvcnRzID0gcmVjb3JkQ2xhc3NcbiAgICA/IG1vZGlmaWVyTmFtZXMuam9pbihcIiBcIikgPT0gXCJwdWJsaWMgZmluYWxcIlxuICAgICAgPyBbe2V4cG9ydGVkTmFtZTogY2xhc3NOYW1lLCBsb2NhbE5hbWU6IGNsYXNzTmFtZSwgbG9jYXRpb246IG5vZGVMb2NhdGlvbihjbGFzc05hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgdHlwZU9ubHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSl9XVxuICAgICAgOiBbXVxuICAgIDogbW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSBcInB1YmxpYyBmaW5hbFwiID8gW10gOiBjbGFzc01lbWJlcnMuZmxhdE1hcCgobWVtYmVyKSA9PiB7XG4gICAgICBpZiAobWVtYmVyLm5hbWUgIT0gXCJNZXRob2REZWNsYXJhdGlvblwiKSByZXR1cm4gW11cbiAgICAgIGNvbnN0IG5hbWUgPSByZXF1aXJlZENoaWxkKG1lbWJlciwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICBjb25zdCBtZXRob2RNb2RpZmllcnMgPSBtZW1iZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgICAgIGNvbnN0IG1ldGhvZE1vZGlmaWVyTmFtZXMgPSBtZXRob2RNb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obWV0aG9kTW9kaWZpZXJzKS5tYXAoKHtuYW1lOiBtb2RpZmllck5hbWV9KSA9PiBtb2RpZmllck5hbWUpIDogW11cblxuICAgICAgaWYgKG5vZGVUZXh0KG5hbWUsIHNvdXJjZSkgPT0gXCJtYWluXCIgfHwgbWV0aG9kTW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSA9PSBcInByaXZhdGUgc3RhdGljXCIpIHJldHVybiBbXVxuXG4gICAgICByZXR1cm4gW3tleHBvcnRlZE5hbWU6IG5vZGVUZXh0KG5hbWUsIHNvdXJjZSksIGxvY2FsTmFtZTogbm9kZVRleHQobmFtZSwgc291cmNlKSwgbG9jYXRpb246IG5vZGVMb2NhdGlvbihuYW1lLCBmaWxlbmFtZSwgc291cmNlKSwgdHlwZU9ubHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSl9XVxuICAgIH0pXG5cbiAgcmV0dXJuIHtleHBvcnRzLCBpbXBvcnRzLCBuYXRpdmVOYW1lOiBgJHtwYWNrYWdlTmFtZX0uJHtjbGFzc05hbWV9YH1cbn1cbiJdfQ==