semantifold 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/build/src/backends/effects.js +3 -1
- package/build/src/backends/php.d.ts.map +1 -1
- package/build/src/backends/php.js +56 -3
- package/build/src/backends/python.js +11 -7
- package/build/src/backends/scalars.js +2 -2
- package/build/src/backends/shared.d.ts +2 -1
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +210 -8
- package/build/src/backends/writer.d.ts +18 -4
- package/build/src/backends/writer.d.ts.map +1 -1
- package/build/src/backends/writer.js +40 -4
- package/build/src/frontends/java.d.ts +1 -1
- package/build/src/frontends/java.d.ts.map +1 -1
- package/build/src/frontends/java.js +14 -11
- package/build/src/frontends/javascript-typescript.d.ts +1 -1
- package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
- package/build/src/frontends/javascript-typescript.js +17 -17
- package/build/src/frontends/php.d.ts +5 -1
- package/build/src/frontends/php.d.ts.map +1 -1
- package/build/src/frontends/php.js +159 -31
- package/build/src/frontends/python.d.ts.map +1 -1
- package/build/src/frontends/python.js +37 -7
- package/build/src/frontends/ruby.d.ts +1 -1
- package/build/src/frontends/ruby.d.ts.map +1 -1
- package/build/src/frontends/ruby.js +12 -9
- package/build/src/frontends/types.d.ts +9 -2
- package/build/src/frontends/types.d.ts.map +1 -1
- package/build/src/frontends/types.js +26 -9
- package/build/src/language-registry.d.ts.map +1 -1
- package/build/src/language-registry.js +30 -6
- package/build/src/mapping.d.ts.map +1 -1
- package/build/src/mapping.js +4 -2
- package/build/src/semantic/effects.d.ts.map +1 -1
- package/build/src/semantic/effects.js +3 -1
- package/build/src/semantic/provenance.d.ts.map +1 -1
- package/build/src/semantic/provenance.js +37 -4
- package/build/src/semantic/types.d.ts +140 -9
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +37 -6
- package/build/src/semantic/validate.d.ts +31 -2
- package/build/src/semantic/validate.d.ts.map +1 -1
- package/build/src/semantic/validate.js +347 -28
- package/docs/adr-bounded-subtyping.md +180 -0
- package/docs/goals.md +1 -1
- package/docs/language-support.md +5 -4
- package/docs/testing.md +2 -2
- package/package.json +1 -1
- package/src/backends/effects.js +1 -0
- package/src/backends/php.js +56 -2
- package/src/backends/python.js +10 -4
- package/src/backends/scalars.js +1 -1
- package/src/backends/shared.js +211 -7
- package/src/backends/writer.js +41 -3
- package/src/frontends/java.js +13 -10
- package/src/frontends/javascript-typescript.js +16 -16
- package/src/frontends/php.js +175 -31
- package/src/frontends/python.js +39 -5
- package/src/frontends/ruby.js +11 -8
- package/src/frontends/types.js +26 -8
- package/src/language-registry.js +29 -5
- package/src/mapping.js +3 -1
- package/src/semantic/effects.js +1 -0
- package/src/semantic/provenance.js +34 -3
- package/src/semantic/types.js +39 -5
- package/src/semantic/validate.js +378 -27
|
@@ -25,7 +25,7 @@ const binaryOperationSyntax = Object.freeze({
|
|
|
25
25
|
StringEqual: Object.freeze({ default: "==", strict: "===" }),
|
|
26
26
|
StringNotEqual: Object.freeze({ default: "!=", strict: "!==" })
|
|
27
27
|
});
|
|
28
|
-
const task005Languages = new Set(["php", "ruby", "javascript", "typescript", "java", "c", "dart", "zig"]);
|
|
28
|
+
const task005Languages = new Set(["php", "ruby", "javascript", "typescript", "java", "c", "dart", "zig", "python"]);
|
|
29
29
|
const task006Languages = new Set(["php", "ruby", "javascript", "typescript", "java"]);
|
|
30
30
|
const task007Languages = new Set(["php", "ruby", "javascript", "typescript", "java"]);
|
|
31
31
|
const task008Languages = new Set(["php", "ruby", "javascript", "typescript", "java"]);
|
|
@@ -36,6 +36,7 @@ const task014Languages = new Set(["php", "ruby", "javascript", "typescript", "ja
|
|
|
36
36
|
const task032Languages = new Set(["php", "ruby", "javascript", "typescript", "java"]);
|
|
37
37
|
const task033Languages = new Set(["php", "ruby", "javascript", "typescript", "java"]);
|
|
38
38
|
const task048ConditionalLanguages = new Set(["php", "ruby", "javascript", "typescript", "java"]);
|
|
39
|
+
const boundedSubtypingLanguages = new Set(["php"]);
|
|
39
40
|
const javaReferenceMethodHooks = new Set(["clone", "equals", "finalize", "getClass", "hashCode", "notify", "notifyAll", "toString", "wait"]);
|
|
40
41
|
const javascriptReferenceMethodHooks = new Set([
|
|
41
42
|
"__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor",
|
|
@@ -53,7 +54,7 @@ const javaObjectInstanceMethodSignatures = new Set([
|
|
|
53
54
|
* Checks the intentionally narrow backend contract.
|
|
54
55
|
* @param {import("../semantic/types.js").SemanticModule} module - Semantic module.
|
|
55
56
|
* @param {import("../semantic/types.js").BackendLanguage} language - Backend language or binary target.
|
|
56
|
-
* @param {{externalDeclarationIds?: Set<string>, program?: boolean, visibleFunctions?: Map<string, import("../semantic/types.js").FunctionDeclaration>, visibleRecords?: Map<string, import("../semantic/types.js").RecordDeclaration>, visibleClasses?: Map<string, import("../semantic/types.js").ClassDeclaration>, visibleErrors?: Map<string, import("../semantic/types.js").ErrorDeclaration>, visibleCallEffects?: Map<string, Set<string>>}} [options] - Resolved program validation context.
|
|
57
|
+
* @param {{externalDeclarationIds?: Set<string>, program?: boolean, visibleFunctions?: Map<string, import("../semantic/types.js").FunctionDeclaration>, visibleRecords?: Map<string, import("../semantic/types.js").RecordDeclaration>, visibleClasses?: Map<string, import("../semantic/types.js").ClassDeclaration>, visibleInterfaces?: Map<string, import("../semantic/types.js").InterfaceDeclaration>, visibleErrors?: Map<string, import("../semantic/types.js").ErrorDeclaration>, visibleCallEffects?: Map<string, Set<string>>}} [options] - Resolved program validation context.
|
|
57
58
|
* @returns {void}
|
|
58
59
|
*/
|
|
59
60
|
export function validateBackendModule(module, language, options = {}) {
|
|
@@ -90,6 +91,13 @@ export function validateBackendModule(module, language, options = {}) {
|
|
|
90
91
|
if (classes.length > 0 && !task033Languages.has(language)) {
|
|
91
92
|
unsupportedCapability(language, "Task 033 reference classes, methods, and constructors", classes[0]?.location ?? module.location);
|
|
92
93
|
}
|
|
94
|
+
const declaredInterfaces = module.interfaces;
|
|
95
|
+
const interfaces = declaredInterfaces === undefined ? [] : declaredInterfaces;
|
|
96
|
+
if (!Array.isArray(interfaces))
|
|
97
|
+
unsupportedCapability(language, "missing or invalid interface declarations", module.location);
|
|
98
|
+
if (interfaces.length > 0 && !boundedSubtypingLanguages.has(language)) {
|
|
99
|
+
unsupportedCapability(language, "Task 048 bounded subtyping interfaces", interfaces[0]?.location ?? module.location);
|
|
100
|
+
}
|
|
93
101
|
if (!task011Languages.has(language))
|
|
94
102
|
rejectTypedErrors(module, language);
|
|
95
103
|
if (!task032Languages.has(language))
|
|
@@ -97,7 +105,8 @@ export function validateBackendModule(module, language, options = {}) {
|
|
|
97
105
|
if (!task014Languages.has(language))
|
|
98
106
|
rejectOrderedMapCapability(module, language);
|
|
99
107
|
validateRecordTargets(records, module.functions, language, module.location);
|
|
100
|
-
|
|
108
|
+
validateInterfaceTargets(interfaces, records, errors, module.functions, language, module.location);
|
|
109
|
+
validateReferenceClassTargets(classes, records, errors, module.functions, interfaces, language, module.location);
|
|
101
110
|
if (!task008Languages.has(language))
|
|
102
111
|
rejectIterationStatements(module, language);
|
|
103
112
|
if (!task007Languages.has(language))
|
|
@@ -160,6 +169,7 @@ export function validateBackendModule(module, language, options = {}) {
|
|
|
160
169
|
classes: options.visibleClasses,
|
|
161
170
|
errors: options.visibleErrors,
|
|
162
171
|
functions: options.visibleFunctions,
|
|
172
|
+
interfaces: options.visibleInterfaces,
|
|
163
173
|
records: options.visibleRecords
|
|
164
174
|
});
|
|
165
175
|
}
|
|
@@ -367,7 +377,92 @@ function validateRecordTargets(records, functions, language, moduleLocation) {
|
|
|
367
377
|
* @param {import("../semantic/types.js").SourceLocation | undefined} moduleLocation - Fallback location.
|
|
368
378
|
* @returns {void}
|
|
369
379
|
*/
|
|
370
|
-
|
|
380
|
+
/**
|
|
381
|
+
* Validates the exact target-visible shape of every interface and its override contracts before output allocation.
|
|
382
|
+
* @param {import("../semantic/types.js").InterfaceDeclaration[]} interfaces - Candidate interfaces.
|
|
383
|
+
* @param {import("../semantic/types.js").RecordDeclaration[]} records - Existing records.
|
|
384
|
+
* @param {import("../semantic/types.js").ErrorDeclaration[]} errors - Existing typed errors.
|
|
385
|
+
* @param {import("../semantic/types.js").FunctionDeclaration[]} functions - Existing functions.
|
|
386
|
+
* @param {import("../semantic/types.js").BackendLanguage} language - Target language.
|
|
387
|
+
* @param {import("../semantic/types.js").SourceLocation | undefined} moduleLocation - Fallback location.
|
|
388
|
+
* @returns {void}
|
|
389
|
+
*/
|
|
390
|
+
function validateInterfaceTargets(interfaces, records, errors, functions, language, moduleLocation) {
|
|
391
|
+
if (interfaces.length == 0)
|
|
392
|
+
return;
|
|
393
|
+
const byId = new Map(interfaces.map((declaration) => [declaration.id, declaration]));
|
|
394
|
+
const targetNames = new Set();
|
|
395
|
+
for (const declaration of [...records, ...errors, ...functions]) {
|
|
396
|
+
if (!declaration || typeof declaration != "object" || Array.isArray(declaration))
|
|
397
|
+
continue;
|
|
398
|
+
const name = Reflect.get(declaration, "name");
|
|
399
|
+
if (typeof name == "string")
|
|
400
|
+
targetNames.add(language == "php" ? name.toLowerCase() : name);
|
|
401
|
+
}
|
|
402
|
+
for (let interfaceIndex = 0; interfaceIndex < interfaces.length; interfaceIndex += 1) {
|
|
403
|
+
const declaration = interfaces[interfaceIndex];
|
|
404
|
+
const location = diagnosticLocation(declaration?.location, moduleLocation);
|
|
405
|
+
const keys = declaration && typeof declaration == "object" && !Array.isArray(declaration)
|
|
406
|
+
? Object.keys(declaration).filter((key) => key != "sourceProvenance").sort().join(",") : "";
|
|
407
|
+
if (!declaration || declaration.kind != "InterfaceDeclaration" ||
|
|
408
|
+
!["extends,id,kind,location,methods,name", "id,kind,location,methods,name"].includes(keys) ||
|
|
409
|
+
!isDenseArray(declaration.methods) ||
|
|
410
|
+
!new RegExp(`^(?:[a-z][a-z0-9._-]*#)?interface:${interfaceIndex}$`, "u").test(String(declaration.id))) {
|
|
411
|
+
unsupportedCapability(language, "missing or invalid interface declaration", location);
|
|
412
|
+
}
|
|
413
|
+
const declarationLocation = requireSemanticLocation(declaration.location, language, "interface declaration location", location);
|
|
414
|
+
validateTargetTypeIdentifier(language, declaration.name, declarationLocation);
|
|
415
|
+
const targetName = language == "php" ? declaration.name.toLowerCase() : declaration.name;
|
|
416
|
+
if (targetNames.has(targetName))
|
|
417
|
+
unsupportedCapability(language, `interface collision '${declaration.name}'`, declarationLocation);
|
|
418
|
+
targetNames.add(targetName);
|
|
419
|
+
const methodNames = new Set();
|
|
420
|
+
for (let methodIndex = 0; methodIndex < declaration.methods.length; methodIndex += 1) {
|
|
421
|
+
const method = declaration.methods[methodIndex];
|
|
422
|
+
const methodLocation = diagnosticLocation(method?.location, declarationLocation);
|
|
423
|
+
const methodKeys = method && typeof method == "object" && !Array.isArray(method)
|
|
424
|
+
? Object.keys(method).filter((key) => key != "sourceProvenance").sort().join(",") : "";
|
|
425
|
+
if (!method || method.kind != "InterfaceMethodDeclaration" || methodKeys != "id,kind,location,name,parameters,returnType" ||
|
|
426
|
+
method.id != `${declaration.id}:method:${methodIndex}` || !isDenseArray(method.parameters)) {
|
|
427
|
+
unsupportedCapability(language, "missing or invalid interface method declaration", methodLocation);
|
|
428
|
+
}
|
|
429
|
+
const exactMethodLocation = requireSemanticLocation(method.location, language, "interface method declaration location", declarationLocation);
|
|
430
|
+
validateTargetIdentifier(language, method.name, "interface method", exactMethodLocation);
|
|
431
|
+
const normalized = language == "php" ? method.name.toLowerCase() : method.name;
|
|
432
|
+
if (methodNames.has(normalized))
|
|
433
|
+
unsupportedCapability(language, `duplicate interface method '${method.name}'`, exactMethodLocation);
|
|
434
|
+
methodNames.add(normalized);
|
|
435
|
+
validateReferenceClassParameters(method.parameters, "interface method", language, exactMethodLocation);
|
|
436
|
+
}
|
|
437
|
+
const parents = declaration.extends ?? [];
|
|
438
|
+
for (const parent of parents) {
|
|
439
|
+
const parentKeys = parent && typeof parent == "object" && !Array.isArray(parent)
|
|
440
|
+
? Object.keys(parent).filter((key) => key != "sourceProvenance").sort().join(",") : "";
|
|
441
|
+
if (!parent || parent.kind != "InterfaceType" || parentKeys != "declarationId,kind" ||
|
|
442
|
+
!byId.has(parent.declarationId)) {
|
|
443
|
+
unsupportedCapability(language, "missing or invalid interface parent reference", declarationLocation);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
for (const declaration of interfaces) {
|
|
448
|
+
for (const parent of declaration.extends ?? []) {
|
|
449
|
+
if (parent.declarationId == declaration.id)
|
|
450
|
+
unsupportedCapability(language, "interface extends itself", declaration.location);
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* Validates the exact target-visible shape of every reference class before output allocation.
|
|
456
|
+
* @param {import("../semantic/types.js").ClassDeclaration[]} classes - Candidate classes.
|
|
457
|
+
* @param {import("../semantic/types.js").RecordDeclaration[]} records - Existing records.
|
|
458
|
+
* @param {import("../semantic/types.js").ErrorDeclaration[]} errors - Existing typed errors.
|
|
459
|
+
* @param {import("../semantic/types.js").FunctionDeclaration[]} functions - Existing functions.
|
|
460
|
+
* @param {import("../semantic/types.js").InterfaceDeclaration[]} interfaces - Existing interfaces.
|
|
461
|
+
* @param {import("../semantic/types.js").BackendLanguage} language - Target language.
|
|
462
|
+
* @param {import("../semantic/types.js").SourceLocation | undefined} moduleLocation - Fallback location.
|
|
463
|
+
* @returns {void}
|
|
464
|
+
*/
|
|
465
|
+
function validateReferenceClassTargets(classes, records, errors, functions, interfaces, language, moduleLocation) {
|
|
371
466
|
const targetNames = new Set();
|
|
372
467
|
for (const declaration of [...records, ...errors, ...functions]) {
|
|
373
468
|
if (!declaration || typeof declaration != "object" || Array.isArray(declaration))
|
|
@@ -383,7 +478,8 @@ function validateReferenceClassTargets(classes, records, errors, functions, lang
|
|
|
383
478
|
const keys = declaration && typeof declaration == "object" && !Array.isArray(declaration)
|
|
384
479
|
? Object.keys(declaration).filter((key) => key != "sourceProvenance").sort().join(",") : "";
|
|
385
480
|
if (!declaration || declaration.kind != "ClassDeclaration" ||
|
|
386
|
-
!["constructor,fields,id,kind,location,methods,name", "constructor,fields,id,kind,location,methods,name,ownership"
|
|
481
|
+
!["constructor,fields,id,implements,kind,location,methods,name", "constructor,fields,id,implements,kind,location,methods,name,ownership",
|
|
482
|
+
"constructor,fields,id,kind,location,methods,name", "constructor,fields,id,kind,location,methods,name,ownership"].includes(keys) ||
|
|
387
483
|
!isDenseArray(declaration.fields) || declaration.fields.length == 0 || !isDenseArray(declaration.methods) ||
|
|
388
484
|
!new RegExp(`^(?:[a-z][a-z0-9._-]*#)?class:${classIndex}$`, "u").test(String(declaration.id))) {
|
|
389
485
|
unsupportedCapability(language, "missing or invalid reference class declaration", location);
|
|
@@ -434,7 +530,9 @@ function validateReferenceClassTargets(classes, records, errors, functions, lang
|
|
|
434
530
|
const methodKeys = method && typeof method == "object" && !Array.isArray(method)
|
|
435
531
|
? Object.keys(method).filter((key) => key != "sourceProvenance").sort().join(",") : "";
|
|
436
532
|
if (!method || method.kind != "MethodDeclaration" ||
|
|
437
|
-
!["body,id,kind,location,name,parameters,returnType",
|
|
533
|
+
!["body,id,implements,kind,location,name,parameters,returnType",
|
|
534
|
+
"body,effects,failureIds,id,implements,kind,location,name,parameters,returnType",
|
|
535
|
+
"body,id,kind,location,name,parameters,returnType",
|
|
438
536
|
"body,effects,failureIds,id,kind,location,name,parameters,returnType"].includes(methodKeys) ||
|
|
439
537
|
method.id != `${declaration.id}:method:${methodIndex}` || !isDenseArray(method.parameters)) {
|
|
440
538
|
unsupportedCapability(language, "missing or invalid method declaration", methodLocation);
|
|
@@ -468,12 +566,109 @@ function validateReferenceClassTargets(classes, records, errors, functions, lang
|
|
|
468
566
|
methodNames.add(normalized);
|
|
469
567
|
validateReferenceClassParameters(method.parameters, "method", language, exactMethodLocation);
|
|
470
568
|
}
|
|
569
|
+
const implemented = declaration.implements ?? [];
|
|
570
|
+
for (const reference of implemented) {
|
|
571
|
+
const referenceKeys = reference && typeof reference == "object" && !Array.isArray(reference)
|
|
572
|
+
? Object.keys(reference).filter((key) => key != "sourceProvenance").sort().join(",") : "";
|
|
573
|
+
if (!reference || reference.kind != "InterfaceType" || referenceKeys != "declarationId,kind" ||
|
|
574
|
+
!interfaces.some((candidate) => candidate.id == reference.declarationId)) {
|
|
575
|
+
unsupportedCapability(language, "missing or invalid implemented interface reference", location);
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
const satisfied = new Set();
|
|
579
|
+
for (const reference of implemented) {
|
|
580
|
+
for (const member of flattenedTargetInterfaceMembers(reference.declarationId, interfaces, language, location)) {
|
|
581
|
+
const method = declaration.methods.find((candidate) => candidate.name == member.name);
|
|
582
|
+
if (!method)
|
|
583
|
+
unsupportedCapability(language, `interface method '${member.name}' is not implemented`, location);
|
|
584
|
+
if (satisfied.has(member.name))
|
|
585
|
+
unsupportedCapability(language, `duplicate interface implementation '${member.name}'`, location);
|
|
586
|
+
if (method.parameters.length != member.parameters.length ||
|
|
587
|
+
method.parameters.some((parameter, index) => !sameTargetType(parameter.type, member.parameters[index].type))) {
|
|
588
|
+
unsupportedCapability(language, `interface method signature mismatch '${member.name}'`, location);
|
|
589
|
+
}
|
|
590
|
+
if (!sameTargetType(method.returnType, member.returnType)) {
|
|
591
|
+
unsupportedCapability(language, `interface method return mismatch '${member.name}'`, location);
|
|
592
|
+
}
|
|
593
|
+
satisfied.add(member.name);
|
|
594
|
+
}
|
|
595
|
+
}
|
|
471
596
|
}
|
|
472
597
|
}
|
|
598
|
+
/**
|
|
599
|
+
* Flattens one target-validated interface signature set in declaration order.
|
|
600
|
+
* @param {string} interfaceId - Interface identity.
|
|
601
|
+
* @param {import("../semantic/types.js").InterfaceDeclaration[]} interfaces - Interfaces in declaration order.
|
|
602
|
+
* @param {import("../semantic/types.js").BackendLanguage} language - Target language.
|
|
603
|
+
* @param {import("../semantic/types.js").SourceLocation | undefined} location - Diagnostic location.
|
|
604
|
+
* @param {Set<string>} [active] - Active extends path.
|
|
605
|
+
* @returns {import("../semantic/types.js").InterfaceMethodDeclaration[]} Flattened members.
|
|
606
|
+
*/
|
|
607
|
+
function flattenedTargetInterfaceMembers(interfaceId, interfaces, language, location, active = new Set()) {
|
|
608
|
+
const declaration = interfaces.find((candidate) => candidate.id == interfaceId);
|
|
609
|
+
if (!declaration)
|
|
610
|
+
unsupportedCapability(language, "missing or invalid implemented interface reference", location);
|
|
611
|
+
if (active.has(interfaceId))
|
|
612
|
+
unsupportedCapability(language, "interface extends itself", declaration.location);
|
|
613
|
+
active.add(interfaceId);
|
|
614
|
+
/** @type {import("../semantic/types.js").InterfaceMethodDeclaration[]} */
|
|
615
|
+
const members = [];
|
|
616
|
+
for (const parent of declaration.extends ?? []) {
|
|
617
|
+
for (const member of flattenedTargetInterfaceMembers(parent.declarationId, interfaces, language, location, active)) {
|
|
618
|
+
if (!members.some((candidate) => candidate.name == member.name))
|
|
619
|
+
members.push(member);
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
for (const method of declaration.methods) {
|
|
623
|
+
if (!members.some((candidate) => candidate.name == method.name))
|
|
624
|
+
members.push(method);
|
|
625
|
+
}
|
|
626
|
+
active.delete(interfaceId);
|
|
627
|
+
return members;
|
|
628
|
+
}
|
|
629
|
+
/**
|
|
630
|
+
* Compares two backend-validated semantic types structurally.
|
|
631
|
+
* @param {import("../semantic/types.js").SemanticFunctionReturnType} left - First type.
|
|
632
|
+
* @param {import("../semantic/types.js").SemanticFunctionReturnType} right - Second type.
|
|
633
|
+
* @returns {boolean} Whether the types are identical.
|
|
634
|
+
*/
|
|
635
|
+
function sameTargetType(left, right) {
|
|
636
|
+
return JSON.stringify(targetTypeIdentity(left)) == JSON.stringify(targetTypeIdentity(right));
|
|
637
|
+
}
|
|
638
|
+
/**
|
|
639
|
+
* Reduces one semantic type to its comparable target identity.
|
|
640
|
+
* @param {import("../semantic/types.js").SemanticFunctionReturnType} type - Semantic type.
|
|
641
|
+
* @returns {unknown} Comparable identity.
|
|
642
|
+
*/
|
|
643
|
+
function targetTypeIdentity(type) {
|
|
644
|
+
if (typeof type == "string")
|
|
645
|
+
return type;
|
|
646
|
+
if (type.kind == "TypeReference")
|
|
647
|
+
return type.name;
|
|
648
|
+
if (type.kind == "TypeVariableReference")
|
|
649
|
+
return { kind: "TypeVariableReference", parameterId: type.parameterId };
|
|
650
|
+
if (type.kind == "RecordType")
|
|
651
|
+
return { declarationId: type.declarationId, kind: "RecordType" };
|
|
652
|
+
if (type.kind == "ReferenceType")
|
|
653
|
+
return { declarationId: type.declarationId, kind: "ReferenceType" };
|
|
654
|
+
if (type.kind == "InterfaceType")
|
|
655
|
+
return { declarationId: type.declarationId, kind: "InterfaceType" };
|
|
656
|
+
if (type.kind == "OwnedResourceType")
|
|
657
|
+
return { kind: "OwnedResourceType", resourceId: type.resourceId };
|
|
658
|
+
if (type.kind == "OwnedReferenceType")
|
|
659
|
+
return { declarationId: type.declarationId, kind: "OwnedReferenceType" };
|
|
660
|
+
if (type.kind == "ListType")
|
|
661
|
+
return { elementType: targetTypeIdentity(type.elementType), kind: "ListType" };
|
|
662
|
+
if (type.kind == "OptionalType")
|
|
663
|
+
return { kind: "OptionalType", valueType: targetTypeIdentity(type.valueType) };
|
|
664
|
+
if (type.kind == "OrderedMapType")
|
|
665
|
+
return { keyType: targetTypeIdentity(type.keyType), kind: "OrderedMapType", valueType: targetTypeIdentity(type.valueType) };
|
|
666
|
+
return { keyType: targetTypeIdentity(type.keyType), kind: "MapType", valueType: targetTypeIdentity(type.valueType) };
|
|
667
|
+
}
|
|
473
668
|
/**
|
|
474
669
|
* Validates one reference callable's exact parameter shape and target names.
|
|
475
670
|
* @param {import("../semantic/types.js").Parameter[]} parameters - Candidate parameters.
|
|
476
|
-
* @param {"constructor" | "method"} owner - Callable kind.
|
|
671
|
+
* @param {"constructor" | "interface method" | "method"} owner - Callable kind.
|
|
477
672
|
* @param {import("../semantic/types.js").BackendLanguage} language - Target language.
|
|
478
673
|
* @param {import("../semantic/types.js").SourceLocation | undefined} ownerLocation - Fallback location.
|
|
479
674
|
* @returns {void}
|
|
@@ -1998,6 +2193,13 @@ export function emitType(writer, type, path, language, javaBoxed = false) {
|
|
|
1998
2193
|
});
|
|
1999
2194
|
return;
|
|
2000
2195
|
}
|
|
2196
|
+
if (type.kind == "InterfaceType") {
|
|
2197
|
+
const declaration = writer.interfaceForId(type.declarationId);
|
|
2198
|
+
writer.mapped(writer.interfaceNameForId(type.declarationId), {
|
|
2199
|
+
mappingKind: "exact", name: declaration.name, node: type, path, role: "type"
|
|
2200
|
+
});
|
|
2201
|
+
return;
|
|
2202
|
+
}
|
|
2001
2203
|
if (type.kind == "OwnedResourceType") {
|
|
2002
2204
|
const resource = writer.resourceForId(type.resourceId);
|
|
2003
2205
|
writer.mapped(writer.capabilityNominalName(resource.name), { mappingKind: "exact", name: resource.name, node: type, path, role: "type" });
|
|
@@ -2669,4 +2871,4 @@ function binaryOperationSpelling(operation, language) {
|
|
|
2669
2871
|
return syntax.strict;
|
|
2670
2872
|
return syntax.default;
|
|
2671
2873
|
}
|
|
2672
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL3NoYXJlZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsK0JBQStCLEVBQUUsd0JBQXdCLEVBQUUsNEJBQTRCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN4SCxPQUFPLEVBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sY0FBYyxDQUFBO0FBRTlELDhGQUE4RjtBQUM5RixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFBO0FBQ2pGLG9LQUFvSztBQUNwSyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDMUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUN6RCxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzNELGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDOUQsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN2RCxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUN6QyxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzNELGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUM7SUFDakQseUJBQXlCLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN6RCxlQUFlLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUM5QyxzQkFBc0IsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDO0lBQ3RELGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBQyxDQUFDO0lBQzlDLGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDOUQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUM7SUFDOUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUNyRCxXQUFXLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzFELGNBQWMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7Q0FDOUQsQ0FBQyxDQUFBO0FBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO0FBQ3pHLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNyRixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDckYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ3JGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNyRixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDckYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ3JGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNyRixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMs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Q0FBQyxDQUFBO0lBRS9DLElBQUksUUFBUSxJQUFJLEtBQUssSUFBSSxNQUFNLENBQUMsR0FBRztRQUFFLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQTtJQUN0RCxJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLE1BQU07UUFBRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUE7SUFDL0QsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLElBQUksUUFBUSxJQUFJLFlBQVksSUFBSSxRQUFRLElBQUksWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU07UUFBRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUE7SUFFdEgsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFBO0FBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHt1bnN1cHBvcnRlZENhcGFiaWxpdHl9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7aXNEZW5zZUFycmF5fSBmcm9tIFwiLi4vYXJyYXkuanNcIlxuaW1wb3J0IHt2YWxpZGF0ZUJhY2tlbmRUeXBlc30gZnJvbSBcIi4uL3NlbWFudGljL3ZhbGlkYXRlLmpzXCJcbmltcG9ydCB7dmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllciwgdmFsaWRhdGVUYXJnZXRJZGVudGlmaWVyLCB2YWxpZGF0ZVRhcmdldFR5cGVJZGVudGlmaWVyfSBmcm9tIFwiLi9pZGVudGlmaWVycy5qc1wiXG5pbXBvcnQge2VtaXRTY2FsYXJUeXBlLCBlbWl0U3RyaW5nTGl0ZXJhbH0gZnJvbSBcIi4vc2NhbGFycy5qc1wiXG5cbi8qKiBAdHlwZSB7UmVhZG9ubHk8UmVjb3JkPGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVW5hcnlPcGVyYXRpb24sIHN0cmluZz4+fSAqL1xuY29uc3QgdW5hcnlPcGVyYXRpb25TeW50YXggPSBPYmplY3QuZnJlZXplKHtCb29sZWFuTm90OiBcIiFcIiwgSW50ZWdlck5lZ2F0ZTogXCItXCJ9KVxuLyoqIEB0eXBlIHtSZWFkb25seTxSZWNvcmQ8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNCaW5hcnlPcGVyYXRpb24sIFJlYWRvbmx5PHtkZWZhdWx0OiBzdHJpbmcsIHBocD86IHN0cmluZywgcHl0aG9uPzogc3RyaW5nLCBzdHJpY3Q/OiBzdHJpbmd9Pj4+fSAqL1xuY29uc3QgYmluYXJ5T3BlcmF0aW9uU3ludGF4ID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEJvb2xlYW5BbmQ6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiJiZcIiwgcHl0aG9uOiBcImFuZFwifSksXG4gIEJvb2xlYW5FcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCI9PVwiLCBzdHJpY3Q6IFwiPT09XCJ9KSxcbiAgQm9vbGVhbk5vdEVxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIiE9XCIsIHN0cmljdDogXCIhPT1cIn0pLFxuICBCb29sZWFuT3I6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwifHxcIiwgcHl0aG9uOiBcIm9yXCJ9KSxcbiAgSW50ZWdlckFkZDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCIrXCJ9KSxcbiAgSW50ZWdlckVxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIj09XCIsIHN0cmljdDogXCI9PT1cIn0pLFxuICBJbnRlZ2VyR3JlYXRlclRoYW46IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPlwifSksXG4gIEludGVnZXJHcmVhdGVyVGhhbk9yRXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPj1cIn0pLFxuICBJbnRlZ2VyTGVzc1RoYW46IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPFwifSksXG4gIEludGVnZXJMZXNzVGhhbk9yRXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPD1cIn0pLFxuICBJbnRlZ2VyTXVsdGlwbHk6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiKlwifSksXG4gIEludGVnZXJOb3RFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCIhPVwiLCBzdHJpY3Q6IFwiIT09XCJ9KSxcbiAgSW50ZWdlclN1YnRyYWN0OiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIi1cIn0pLFxuICBTdHJpbmdDb25jYXQ6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiK1wiLCBwaHA6IFwiLlwifSksXG4gIFN0cmluZ0VxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIj09XCIsIHN0cmljdDogXCI9PT1cIn0pLFxuICBTdHJpbmdOb3RFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCIhPVwiLCBzdHJpY3Q6IFwiIT09XCJ9KVxufSlcbmNvbnN0IHRhc2swMDVMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIiwgXCJjXCIsIFwiZGFydFwiLCBcInppZ1wiXSlcbmNvbnN0IHRhc2swMDZMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDA3TGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAwOExhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IHRhc2swMDlMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDExTGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAxMkxhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IHRhc2swMTRMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDMyTGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAzM0xhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IHRhc2swNDhDb25kaXRpb25hbExhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IGphdmFSZWZlcmVuY2VNZXRob2RIb29rcyA9IG5ldyBTZXQoW1wiY2xvbmVcIiwgXCJlcXVhbHNcIiwgXCJmaW5hbGl6ZVwiLCBcImdldENsYXNzXCIsIFwiaGFzaENvZGVcIiwgXCJub3RpZnlcIiwgXCJub3RpZnlBbGxcIiwgXCJ0b1N0cmluZ1wiLCBcIndhaXRcIl0pXG5jb25zdCBqYXZhc2NyaXB0UmVmZXJlbmNlTWV0aG9kSG9va3MgPSBuZXcgU2V0KFtcbiAgXCJfX2RlZmluZUdldHRlcl9fXCIsIFwiX19kZWZpbmVTZXR0ZXJfX1wiLCBcIl9fbG9va3VwR2V0dGVyX19cIiwgXCJfX2xvb2t1cFNldHRlcl9fXCIsIFwiX19wcm90b19fXCIsIFwiY29uc3RydWN0b3JcIixcbiAgXCJoYXNPd25Qcm9wZXJ0eVwiLCBcImlzUHJvdG90eXBlT2ZcIiwgXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLCBcInRvTG9jYWxlU3RyaW5nXCIsIFwidG9TdHJpbmdcIiwgXCJ2YWx1ZU9mXCJcbl0pXG5jb25zdCBydWJ5UmVmZXJlbmNlTWV0aG9kSG9va3MgPSBuZXcgU2V0KFtcbiAgXCJfX3NlbmRfX1wiLCBcImV4dGVuZFwiLCBcImZldGNoXCIsIFwiaW5zdGFuY2VfZXZhbFwiLCBcImluc3RhbmNlX2V4ZWNcIiwgXCJtZXRob2RcIiwgXCJtZXRob2RfbWlzc2luZ1wiLCBcInB1YmxpY19zZW5kXCIsXG4gIFwicmVzcG9uZF90b19taXNzaW5nP1wiLCBcInNlbmRcIiwgXCJzaW5nbGV0b25fY2xhc3NcIiwgXCJzaXplXCJcbl0pXG5jb25zdCBqYXZhT2JqZWN0SW5zdGFuY2VNZXRob2RTaWduYXR1cmVzID0gbmV3IFNldChbXG4gIFwiY2xvbmUoKVwiLCBcImVxdWFscyhPYmplY3QpXCIsIFwiZmluYWxpemUoKVwiLCBcImdldENsYXNzKClcIiwgXCJoYXNoQ29kZSgpXCIsIFwibm90aWZ5KClcIiwgXCJub3RpZnlBbGwoKVwiLCBcInRvU3RyaW5nKClcIixcbiAgXCJ3YWl0KClcIiwgXCJ3YWl0KGxvbmcpXCIsIFwid2FpdChsb25nLGludClcIlxuXSlcblxuLyoqXG4gKiBDaGVja3MgdGhlIGludGVudGlvbmFsbHkgbmFycm93IGJhY2tlbmQgY29udHJhY3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGxhbmd1YWdlIG9yIGJpbmFyeSB0YXJnZXQuXG4gKiBAcGFyYW0ge3tleHRlcm5hbERlY2xhcmF0aW9uSWRzPzogU2V0PHN0cmluZz4sIHByb2dyYW0/OiBib29sZWFuLCB2aXNpYmxlRnVuY3Rpb25zPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHZpc2libGVSZWNvcmRzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+LCB2aXNpYmxlQ2xhc3Nlcz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+LCB2aXNpYmxlRXJyb3JzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj4sIHZpc2libGVDYWxsRWZmZWN0cz86IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+Pn19IFtvcHRpb25zXSAtIFJlc29sdmVkIHByb2dyYW0gdmFsaWRhdGlvbiBjb250ZXh0LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUJhY2tlbmRNb2R1bGUobW9kdWxlLCBsYW5ndWFnZSwgb3B0aW9ucyA9IHt9KSB7XG4gIGlmICghbW9kdWxlIHx8IHR5cGVvZiBtb2R1bGUgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KG1vZHVsZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBtb2R1bGVcIiwgdW5kZWZpbmVkKVxuICB9XG4gIGlmIChtb2R1bGUua2luZCAhPSBcIk1vZHVsZVwiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIG1vZHVsZS5raW5kLCBtb2R1bGUubG9jYXRpb24pXG4gIGlmICghQXJyYXkuaXNBcnJheShtb2R1bGUuZnVuY3Rpb25zKSB8fCAhbW9kdWxlLmVudHJ5UG9pbnQgfHwgdHlwZW9mIG1vZHVsZS5lbnRyeVBvaW50ICE9IFwib2JqZWN0XCIgfHxcbiAgICBtb2R1bGUuZW50cnlQb2ludC5raW5kICE9IFwiRW50cnlQb2ludFwiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIG1vZHVsZSBtZW1iZXJzXCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgY29uc3QgZGVjbGFyZWRSZWNvcmRzID0gbW9kdWxlLnJlY29yZHNcbiAgY29uc3QgcmVjb3JkcyA9IGRlY2xhcmVkUmVjb3JkcyA9PT0gdW5kZWZpbmVkID8gW10gOiBkZWNsYXJlZFJlY29yZHNcbiAgY29uc3QgZGVjbGFyZWRDbGFzc2VzID0gbW9kdWxlLmNsYXNzZXNcbiAgY29uc3QgY2xhc3NlcyA9IGRlY2xhcmVkQ2xhc3NlcyA9PT0gdW5kZWZpbmVkID8gW10gOiBkZWNsYXJlZENsYXNzZXNcbiAgY29uc3QgZGVjbGFyZWRFcnJvcnMgPSBtb2R1bGUuZXJyb3JzXG4gIGNvbnN0IGVycm9ycyA9IGRlY2xhcmVkRXJyb3JzID09PSB1bmRlZmluZWQgPyBbXSA6IGRlY2xhcmVkRXJyb3JzXG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlY29yZHMpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHJlY29yZCBkZWNsYXJhdGlvbnNcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICBpZiAoIUFycmF5LmlzQXJyYXkoY2xhc3NlcykpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgcmVmZXJlbmNlIGNsYXNzIGRlY2xhcmF0aW9uc1wiLCBtb2R1bGUubG9jYXRpb24pXG4gIGlmICghQXJyYXkuaXNBcnJheShlcnJvcnMpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGVycm9yIGRlY2xhcmF0aW9uc1wiLCBtb2R1bGUubG9jYXRpb24pXG4gIGlmIChtb2R1bGUuZnVuY3Rpb25zLmxlbmd0aCA9PSAwICYmICghb3B0aW9ucy5wcm9ncmFtIHx8XG4gICAgcmVjb3Jkcy5sZW5ndGggPT0gMCAmJiBjbGFzc2VzLmxlbmd0aCA9PSAwICYmIGVycm9ycy5sZW5ndGggPT0gMCAmJiBtb2R1bGUuZW50cnlQb2ludC5ib2R5Py5zdGF0ZW1lbnRzPy5sZW5ndGggPT0gMCkpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibW9kdWxlIHdpdGhvdXQgZGVjbGFyYXRpb25zIG9yIGV4ZWN1dGFibGUgZW50cnlcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGlmICghdGFzazAxMkxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpICYmIG1vZHVsZUhhc1R5cGVQYXJhbWV0ZXJzKG1vZHVsZSkpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMTIgdHlwZSBwYXJhbWV0ZXJzIGFuZCBnZW5lcmljIGRlY2xhcmF0aW9uc1wiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKHJlY29yZHMubGVuZ3RoID4gMCAmJiAhdGFzazAwOUxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA5IGNsb3NlZCByZWNvcmRzXCIsIHJlY29yZHNbMF0/LmxvY2F0aW9uID8/IG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBpZiAoY2xhc3Nlcy5sZW5ndGggPiAwICYmICF0YXNrMDMzTGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMzMgcmVmZXJlbmNlIGNsYXNzZXMsIG1ldGhvZHMsIGFuZCBjb25zdHJ1Y3RvcnNcIiwgY2xhc3Nlc1swXT8ubG9jYXRpb24gPz8gbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGlmICghdGFzazAxMUxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSByZWplY3RUeXBlZEVycm9ycyhtb2R1bGUsIGxhbmd1YWdlKVxuICBpZiAoIXRhc2swMzJMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgcmVqZWN0Q29uZGl0aW9uQ29udHJvbGxlZExvb3BzKG1vZHVsZSwgbGFuZ3VhZ2UpXG4gIGlmICghdGFzazAxNExhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSByZWplY3RPcmRlcmVkTWFwQ2FwYWJpbGl0eShtb2R1bGUsIGxhbmd1YWdlKVxuICB2YWxpZGF0ZVJlY29yZFRhcmdldHMocmVjb3JkcywgbW9kdWxlLmZ1bmN0aW9ucywgbGFuZ3VhZ2UsIG1vZHVsZS5sb2NhdGlvbilcbiAgdmFsaWRhdGVSZWZlcmVuY2VDbGFzc1RhcmdldHMoY2xhc3NlcywgcmVjb3JkcywgZXJyb3JzLCBtb2R1bGUuZnVuY3Rpb25zLCBsYW5ndWFnZSwgbW9kdWxlLmxvY2F0aW9uKVxuICBpZiAoIXRhc2swMDhMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgcmVqZWN0SXRlcmF0aW9uU3RhdGVtZW50cyhtb2R1bGUsIGxhbmd1YWdlKVxuICBpZiAoIXRhc2swMDdMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgcmVqZWN0T3B0aW9uYWxUeXBlcyhtb2R1bGUsIGxhbmd1YWdlKVxuICBpZiAoIXRhc2swMDZMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgcmVqZWN0Q29sbGVjdGlvblR5cGVzKG1vZHVsZSwgbGFuZ3VhZ2UpXG4gIGNvbnN0IGxvb3BPd25lcnMgPSBjb2xsZWN0TG9vcE93bmVycyhtb2R1bGUsIGxhbmd1YWdlKVxuXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgY2xhc3Nlcykge1xuICAgIHZhbGlkYXRlQmxvY2soZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSwgbGFuZ3VhZ2UsIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmxvY2F0aW9uLFxuICAgICAge2FjdGl2ZTogW10sIG93bmVyOiBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvciwgb3duZXJzOiBsb29wT3duZXJzfSwgbmV3IFNldCgpLCBvcHRpb25zLmV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgZm9yIChjb25zdCBtZXRob2Qgb2YgZGVjbGFyYXRpb24ubWV0aG9kcykge1xuICAgICAgdmFsaWRhdGVCbG9jayhtZXRob2QuYm9keSwgbGFuZ3VhZ2UsIG1ldGhvZC5sb2NhdGlvbixcbiAgICAgICAge2FjdGl2ZTogW10sIG93bmVyOiBtZXRob2QsIG93bmVyczogbG9vcE93bmVyc30sIG5ldyBTZXQoKSwgb3B0aW9ucy5leHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlQmxvY2sobW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgbGFuZ3VhZ2UsIG1vZHVsZS5lbnRyeVBvaW50LmxvY2F0aW9uLFxuICAgIHthY3RpdmU6IFtdLCBvd25lcjogbW9kdWxlLmVudHJ5UG9pbnQsIG93bmVyczogbG9vcE93bmVyc30sIG5ldyBTZXQoKSwgb3B0aW9ucy5leHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICBjb25zdCBkZWNsYXJhdGlvbklkcyA9IG5ldyBTZXQoKVxuICBjb25zdCBkZWNsYXJhdGlvbk5hbWVzID0gbmV3IFNldCgpXG4gIGNvbnN0IHRhcmdldERlY2xhcmF0aW9uTmFtZXMgPSBuZXcgU2V0KClcblxuICBmb3IgKGNvbnN0IGZ1bmN0aW9uRGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykge1xuICAgIGlmICghZnVuY3Rpb25EZWNsYXJhdGlvbiB8fCB0eXBlb2YgZnVuY3Rpb25EZWNsYXJhdGlvbiAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZnVuY3Rpb25EZWNsYXJhdGlvbikgfHxcbiAgICAgIGZ1bmN0aW9uRGVjbGFyYXRpb24ua2luZCAhPSBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiB8fCAhQXJyYXkuaXNBcnJheShmdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGZ1bmN0aW9uIGRlY2xhcmF0aW9uXCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgZnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lLCBcImZ1bmN0aW9uXCIsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgaWYgKGRlY2xhcmF0aW9uTmFtZXMuaGFzKGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGR1cGxpY2F0ZSBmdW5jdGlvbiAnJHtmdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWV9J2AsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgfVxuICAgIGRlY2xhcmF0aW9uTmFtZXMuYWRkKGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSlcbiAgICBjb25zdCB0YXJnZXREZWNsYXJhdGlvbk5hbWUgPSBsYW5ndWFnZSA9PSBcInBocFwiXG4gICAgICA/IGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZS5yZXBsYWNlKC9bQS1aXS9ndSwgKGNoYXJhY3RlcikgPT4gY2hhcmFjdGVyLnRvTG93ZXJDYXNlKCkpXG4gICAgICA6IGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZVxuXG4gICAgaWYgKHRhcmdldERlY2xhcmF0aW9uTmFtZXMuaGFzKHRhcmdldERlY2xhcmF0aW9uTmFtZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYHRhcmdldCBmdW5jdGlvbi1uYW1lIGNvbGxpc2lvbiAnJHtmdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWV9J2AsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgfVxuICAgIHRhcmdldERlY2xhcmF0aW9uTmFtZXMuYWRkKHRhcmdldERlY2xhcmF0aW9uTmFtZSlcbiAgICBpZiAodHlwZW9mIGZ1bmN0aW9uRGVjbGFyYXRpb24uaWQgIT0gXCJzdHJpbmdcIiB8fCAhL14oPzpbYS16XVthLXowLTkuXy1dKiMpP2Z1bmN0aW9uOlswLTldKyQvdS50ZXN0KGZ1bmN0aW9uRGVjbGFyYXRpb24uaWQpIHx8XG4gICAgICBkZWNsYXJhdGlvbklkcy5oYXMoZnVuY3Rpb25EZWNsYXJhdGlvbi5pZCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJkdXBsaWNhdGUgb3IgaW52YWxpZCBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpZGVudGl0eVwiLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICBkZWNsYXJhdGlvbklkcy5hZGQoZnVuY3Rpb25EZWNsYXJhdGlvbi5pZClcbiAgICB2YWxpZGF0ZVR5cGVQYXJhbWV0ZXJUYXJnZXRzKGZ1bmN0aW9uRGVjbGFyYXRpb24sIGxhbmd1YWdlKVxuXG4gICAgaWYgKCF0YXNrMDA1TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkgJiYgZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZnVuY3Rpb24gcGFyYW1ldGVyIGNvdW50IG90aGVyIHRoYW4gdHdvXCIsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghdGFzazAwNUxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpICYmIGZ1bmN0aW9uRGVjbGFyYXRpb24ucmV0dXJuVHlwZT8ua2luZCA9PSBcIlR5cGVSZWZlcmVuY2VcIiAmJlxuICAgICAgZnVuY3Rpb25EZWNsYXJhdGlvbi5yZXR1cm5UeXBlLm5hbWUgPT0gXCJ2b2lkXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNSB2b2lkIGZ1bmN0aW9uIHJldHVyblwiLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUJsb2NrKGZ1bmN0aW9uRGVjbGFyYXRpb24uYm9keSwgbGFuZ3VhZ2UsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24sXG4gICAgICB7YWN0aXZlOiBbXSwgb3duZXI6IGZ1bmN0aW9uRGVjbGFyYXRpb24sIG93bmVyczogbG9vcE93bmVyc30sIG5ldyBTZXQoKSwgb3B0aW9ucy5leHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuXG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKSB7XG4gICAgICBpZiAoIXBhcmFtZXRlciB8fCB0eXBlb2YgcGFyYW1ldGVyICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShwYXJhbWV0ZXIpIHx8IHBhcmFtZXRlci5raW5kICE9IFwiUGFyYW1ldGVyXCIpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBwYXJhbWV0ZXJcIiwgZnVuY3Rpb25EZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIHBhcmFtZXRlci5uYW1lLCBcInBhcmFtZXRlclwiLCBwYXJhbWV0ZXIubG9jYXRpb24pXG4gICAgfVxuICB9XG4gIHZhbGlkYXRlRXJyb3JUYXJnZXRzKGVycm9ycywgcmVjb3JkcywgbW9kdWxlLmZ1bmN0aW9ucywgbGFuZ3VhZ2UsIG1vZHVsZS5sb2NhdGlvbilcbiAgdmFsaWRhdGVTY2FmZm9sZGluZ05hbWVzKG1vZHVsZSwgbGFuZ3VhZ2UpXG4gIHZhbGlkYXRlQmFja2VuZFR5cGVzKG1vZHVsZSwgbGFuZ3VhZ2UsIHtcbiAgICBjYWxsRWZmZWN0czogb3B0aW9ucy52aXNpYmxlQ2FsbEVmZmVjdHMsXG4gICAgY2xhc3Nlczogb3B0aW9ucy52aXNpYmxlQ2xhc3NlcyxcbiAgICBlcnJvcnM6IG9wdGlvbnMudmlzaWJsZUVycm9ycyxcbiAgICBmdW5jdGlvbnM6IG9wdGlvbnMudmlzaWJsZUZ1bmN0aW9ucyxcbiAgICByZWNvcmRzOiBvcHRpb25zLnZpc2libGVSZWNvcmRzXG4gIH0pXG59XG5cbi8qKlxuICogUmVqZWN0cyBUYXNrIDAxNCBJUiB0cmFuc2FjdGlvbmFsbHkgYmVmb3JlIGEgbm9uLWNvaG9ydCB0YXJnZXQgYWxsb2NhdGVzIG91dHB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIENhbmRpZGF0ZSBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0T3JkZXJlZE1hcENhcGFiaWxpdHkobW9kdWxlLCBsYW5ndWFnZSkge1xuICBjb25zdCBub2RlID0gZmluZE9yZGVyZWRNYXBOb2RlKG1vZHVsZSlcblxuICBpZiAobm9kZSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDE0IG9yZGVyZWQtbWFwIGl0ZXJhdGlvblwiLCBkaWFnbm9zdGljTG9jYXRpb24obm9kZS5sb2NhdGlvbiwgbW9kdWxlLmxvY2F0aW9uKSlcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZmlyc3QgZGlzdGluY3Qgb3JkZXJlZC1tYXAgdHlwZSwgbGl0ZXJhbCwgb3IgbG9vcCBpbiBwYXJzZXItbmV1dHJhbCBJUi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgc3VidHJlZS5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFtzZWVuXSAtIEN5Y2xlIHByb3RlY3Rpb24uXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWR9IEZpcnN0IFRhc2sgMDE0IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGZpbmRPcmRlcmVkTWFwTm9kZSh2YWx1ZSwgc2VlbiA9IG5ldyBTZXQoKSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiIHx8IHNlZW4uaGFzKHZhbHVlKSkgcmV0dXJuIHVuZGVmaW5lZFxuICBzZWVuLmFkZCh2YWx1ZSlcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlcblxuICAgIGlmIChbXCJPcmRlcmVkTWFwVHlwZVwiLCBcIk9yZGVyZWRNYXBMaXRlcmFsXCIsIFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiXS5pbmNsdWRlcyhTdHJpbmcoY2FuZGlkYXRlLmtpbmQpKSkgcmV0dXJuIGNhbmRpZGF0ZVxuICB9XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IE9iamVjdC52YWx1ZXModmFsdWUpKSB7XG4gICAgY29uc3QgZm91bmQgPSBmaW5kT3JkZXJlZE1hcE5vZGUoY2hpbGQsIHNlZW4pXG5cbiAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZFxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIFJlamVjdHMgdHlwZWQgZXJyb3JzIGZvciBhIHRhcmdldCBvdXRzaWRlIHRoZSBUYXNrIDAxMSBjb2hvcnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDYW5kaWRhdGUgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdFR5cGVkRXJyb3JzKC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9ICovIG1vZHVsZSxcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIGxhbmd1YWdlKSB7XG4gIGlmICgobW9kdWxlLmVycm9ycyA/PyBbXSkubGVuZ3RoID4gMCkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAxMSB0eXBlZCBlcnJvcnMgYW5kIGhhbmRsaW5nXCIsIG1vZHVsZS5lcnJvcnM/LlswXT8ubG9jYXRpb24gPz8gbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykgcmVqZWN0VHlwZWRFcnJvckJsb2NrKGRlY2xhcmF0aW9uPy5ib2R5LCBsYW5ndWFnZSlcbiAgcmVqZWN0VHlwZWRFcnJvckJsb2NrKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIGxhbmd1YWdlKVxufVxuXG4vKipcbiAqIEZpbmRzIHR5cGVkLWVycm9yIHN0YXRlbWVudHMgd2l0aG91dCBkZXNjZW5kaW5nIHRocm91Z2ggbWFsZm9ybWVkIG9yIGN5Y2xpYyBibG9ja3MuXG4gKiBAcGFyYW0ge3Vua25vd259IGJsb2NrIC0gQ2FuZGlkYXRlIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW3NlZW5dIC0gVmlzaXRlZCBibG9ja3MuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0VHlwZWRFcnJvckJsb2NrKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gYmxvY2ssXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSAqLyBsYW5ndWFnZSxcbiAgLyoqIEB0eXBlIHtTZXQ8b2JqZWN0Pn0gKi8gc2VlbiA9IG5ldyBTZXQoKSkge1xuICBpZiAoIWJsb2NrIHx8IHR5cGVvZiBibG9jayAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmxvY2spIHx8IHNlZW4uaGFzKGJsb2NrKSkgcmV0dXJuXG4gIHNlZW4uYWRkKGJsb2NrKVxuICBjb25zdCBzdGF0ZW1lbnRzID0gUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShzdGF0ZW1lbnRzKSkgcmV0dXJuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSBjb250aW51ZVxuICAgIGlmIChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwia2luZFwiKSA9PSBcIlJhaXNlU3RhdGVtZW50XCIgfHwgUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIikgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDExIHR5cGVkIGVycm9ycyBhbmQgaGFuZGxpbmdcIixcbiAgICAgICAgZGlhZ25vc3RpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJsb2NhdGlvblwiKSwgUmVmbGVjdC5nZXQoYmxvY2ssIFwibG9jYXRpb25cIikpKVxuICAgIH1cbiAgICBpZiAoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIikgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RUeXBlZEVycm9yQmxvY2soUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImNvbnNlcXVlbnRcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgICAgcmVqZWN0VHlwZWRFcnJvckJsb2NrKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJhbHRlcm5hdGVcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgIH0gZWxzZSBpZiAoW1wiRm9yRWFjaFN0YXRlbWVudFwiLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiwgXCJXaGlsZVN0YXRlbWVudFwiXS5pbmNsdWRlcyhTdHJpbmcoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIikpKSkge1xuICAgICAgcmVqZWN0VHlwZWRFcnJvckJsb2NrKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGFyZ2V0LXZpc2libGUgbm9taW5hbCBlcnJvciBkZWNsYXJhdGlvbnMgYmVmb3JlIGVtaXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uW119IGVycm9ycyAtIEVycm9yIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb25bXX0gcmVjb3JkcyAtIFJlY29yZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb25bXX0gZnVuY3Rpb25zIC0gRnVuY3Rpb24gZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbW9kdWxlTG9jYXRpb24gLSBNb2R1bGUgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVFcnJvclRhcmdldHMoXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbltdfSAqLyBlcnJvcnMsXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb25bXX0gKi8gcmVjb3JkcyxcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uW119ICovIGZ1bmN0aW9ucyxcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIGxhbmd1YWdlLFxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSAqLyBtb2R1bGVMb2NhdGlvblxuKSB7XG4gIGNvbnN0IGlkcyA9IG5ldyBTZXQoKVxuICBjb25zdCBuYW1lcyA9IG5ldyBTZXQoWy4uLnJlY29yZHMsIC4uLmZ1bmN0aW9uc10ubWFwKCh7bmFtZX0pID0+IGxhbmd1YWdlID09IFwicGhwXCIgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOiBuYW1lKSlcbiAgY29uc3QgZm9yYmlkZGVuID0gbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyBuZXcgU2V0KFtcIkVycm9yXCIsIFwiQWdncmVnYXRlRXJyb3JcIl0pIDpcbiAgICBsYW5ndWFnZSA9PSBcInBocFwiID8gbmV3IFNldChbXCJUaHJvd2FibGVcIiwgXCJFeGNlcHRpb25cIiwgXCJSdW50aW1lRXhjZXB0aW9uXCIsIFwiRXJyb3JcIl0pIDpcbiAgICAgIGxhbmd1YWdlID09IFwicnVieVwiID8gbmV3IFNldChbXCJFeGNlcHRpb25cIiwgXCJTdGFuZGFyZEVycm9yXCIsIFwiU2NyaXB0RXJyb3JcIiwgXCJTeXN0ZW1FeGl0XCJdKSA6XG4gICAgICAgIGxhbmd1YWdlID09IFwiamF2YVwiID8gbmV3IFNldChbXCJUaHJvd2FibGVcIiwgXCJFeGNlcHRpb25cIiwgXCJSdW50aW1lRXhjZXB0aW9uXCIsIFwiRXJyb3JcIl0pIDogbmV3IFNldCgpXG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVycm9ycy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGVycm9yc1tpbmRleF1cbiAgICBjb25zdCBsb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihkZWNsYXJhdGlvbj8ubG9jYXRpb24sIG1vZHVsZUxvY2F0aW9uKVxuICAgIGNvbnN0IGZpZWxkcyA9IGRlY2xhcmF0aW9uICYmIHR5cGVvZiBkZWNsYXJhdGlvbiA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9uKVxuICAgICAgPyBPYmplY3Qua2V5cyhkZWNsYXJhdGlvbikuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCB0eXBlb2YgZGVjbGFyYXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9uKSB8fFxuICAgICAgZGVjbGFyYXRpb24ua2luZCAhPSBcIkVycm9yRGVjbGFyYXRpb25cIiB8fCBmaWVsZHMgIT0gXCJpZCxraW5kLGxvY2F0aW9uLG5hbWVcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBlcnJvciBkZWNsYXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24oZGVjbGFyYXRpb24ubG9jYXRpb24sIGxhbmd1YWdlLCBcImVycm9yIGRlY2xhcmF0aW9uIGxvY2F0aW9uXCIsIG1vZHVsZUxvY2F0aW9uKVxuICAgIHZhbGlkYXRlVGFyZ2V0VHlwZUlkZW50aWZpZXIobGFuZ3VhZ2UsIGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIGlmICgoZGVjbGFyYXRpb24uaWQgIT0gYGVycm9yOiR7aW5kZXh9YCAmJlxuICAgICAgIW5ldyBSZWdFeHAoYF5bYS16XVthLXowLTkuXy1dKiNlcnJvcjoke2luZGV4fSRgLCBcInVcIikudGVzdChkZWNsYXJhdGlvbi5pZCA/PyBcIlwiKSkgfHwgaWRzLmhhcyhkZWNsYXJhdGlvbi5pZCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJkdXBsaWNhdGUgb3IgaW52YWxpZCBlcnJvciBkZWNsYXJhdGlvbiBpZGVudGl0eVwiLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBkZWNsYXJhdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCkgOiBkZWNsYXJhdGlvbi5uYW1lXG5cbiAgICBpZiAobmFtZXMuaGFzKG5vcm1hbGl6ZWQpIHx8IGZvcmJpZGRlbi5oYXMoZGVjbGFyYXRpb24ubmFtZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGVycm9yIGRlY2xhcmF0aW9uIGNvbGxpc2lvbiAnJHtkZWNsYXJhdGlvbi5uYW1lfSdgLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gICAgaWRzLmFkZChkZWNsYXJhdGlvbi5pZClcbiAgICBuYW1lcy5hZGQobm9ybWFsaXplZClcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBldmVyeSBub21pbmFsIHJlY29yZCBpZGVudGlmaWVyLCBpZGVudGl0eSwgZmllbGQsIGFuZCB0YXJnZXQgY29sbGlzaW9uIGJlZm9yZSBvdXRwdXQgYWxsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb25bXX0gcmVjb3JkcyAtIENhbmRpZGF0ZSByZWNvcmRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uW119IGZ1bmN0aW9ucyAtIENhbmRpZGF0ZSBmdW5jdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBtb2R1bGVMb2NhdGlvbiAtIE1vZHVsZSBmYWxsYmFjayBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlY29yZFRhcmdldHMocmVjb3JkcywgZnVuY3Rpb25zLCBsYW5ndWFnZSwgbW9kdWxlTG9jYXRpb24pIHtcbiAgY29uc3QgZGVjbGFyYXRpb25JZHMgPSBuZXcgU2V0KClcbiAgY29uc3QgdGFyZ2V0TmFtZXMgPSBuZXcgU2V0KClcblxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9ucykge1xuICAgIGlmICghZGVjbGFyYXRpb24gfHwgdHlwZW9mIGRlY2xhcmF0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbikpIGNvbnRpbnVlXG4gICAgY29uc3QgbmFtZSA9IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcIm5hbWVcIilcblxuICAgIGlmICh0eXBlb2YgbmFtZSAhPSBcInN0cmluZ1wiKSBjb250aW51ZVxuICAgIHRhcmdldE5hbWVzLmFkZChsYW5ndWFnZSA9PSBcInBocFwiID8gbmFtZS50b0xvd2VyQ2FzZSgpIDogbmFtZSlcbiAgfVxuXG4gIGZvciAobGV0IHJlY29yZEluZGV4ID0gMDsgcmVjb3JkSW5kZXggPCByZWNvcmRzLmxlbmd0aDsgcmVjb3JkSW5kZXggKz0gMSkge1xuICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZHNbcmVjb3JkSW5kZXhdXG4gICAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24ocmVjb3JkPy5sb2NhdGlvbiwgbW9kdWxlTG9jYXRpb24pXG4gICAgY29uc3QgcmVjb3JkS2V5cyA9IHJlY29yZCAmJiB0eXBlb2YgcmVjb3JkID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkocmVjb3JkKVxuICAgICAgPyBPYmplY3Qua2V5cyhyZWNvcmQpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuICAgICAgOiBcIlwiXG5cbiAgICBpZiAoIXJlY29yZCB8fCB0eXBlb2YgcmVjb3JkICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShyZWNvcmQpIHx8IHJlY29yZC5raW5kICE9IFwiUmVjb3JkRGVjbGFyYXRpb25cIiB8fFxuICAgICAgIVtcImZpZWxkcyxpZCxraW5kLGxvY2F0aW9uLG5hbWVcIiwgXCJmaWVsZHMsaWQsa2luZCxsb2NhdGlvbixuYW1lLHR5cGVQYXJhbWV0ZXJzXCJdLmluY2x1ZGVzKHJlY29yZEtleXMpIHx8ICFpc0RlbnNlQXJyYXkocmVjb3JkLmZpZWxkcykpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgcmVjb3JkIGRlY2xhcmF0aW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihyZWNvcmQubG9jYXRpb24sIGxhbmd1YWdlLCBcInJlY29yZCBkZWNsYXJhdGlvbiBsb2NhdGlvblwiLCBtb2R1bGVMb2NhdGlvbilcbiAgICB2YWxpZGF0ZVRhcmdldFR5cGVJZGVudGlmaWVyKGxhbmd1YWdlLCByZWNvcmQubmFtZSwgcmVjb3JkLmxvY2F0aW9uKVxuICAgIGlmICh0eXBlb2YgcmVjb3JkLmlkICE9IFwic3RyaW5nXCIgfHwgIW5ldyBSZWdFeHAoYF4oPzpbYS16XVthLXowLTkuXy1dKiMpP3JlY29yZDoke3JlY29yZEluZGV4fSRgLCBcInVcIikudGVzdChyZWNvcmQuaWQpIHx8XG4gICAgICBkZWNsYXJhdGlvbklkcy5oYXMocmVjb3JkLmlkKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImR1cGxpY2F0ZSBvciBpbnZhbGlkIHJlY29yZCBkZWNsYXJhdGlvbiBpZGVudGl0eVwiLCByZWNvcmQubG9jYXRpb24pXG4gICAgfVxuICAgIGRlY2xhcmF0aW9uSWRzLmFkZChyZWNvcmQuaWQpXG4gICAgdmFsaWRhdGVUeXBlUGFyYW1ldGVyVGFyZ2V0cyhyZWNvcmQsIGxhbmd1YWdlKVxuICAgIGNvbnN0IHRhcmdldE5hbWUgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gcmVjb3JkLm5hbWUudG9Mb3dlckNhc2UoKSA6IHJlY29yZC5uYW1lXG5cbiAgICBpZiAodGFyZ2V0TmFtZXMuaGFzKHRhcmdldE5hbWUpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGByZWNvcmQgZGVjbGFyYXRpb24gY29sbGlzaW9uICcke3JlY29yZC5uYW1lfSdgLCByZWNvcmQubG9jYXRpb24pXG4gICAgdGFyZ2V0TmFtZXMuYWRkKHRhcmdldE5hbWUpXG4gICAgY29uc3QgZmllbGROYW1lcyA9IG5ldyBTZXQoKVxuXG4gICAgZm9yIChsZXQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCByZWNvcmQuZmllbGRzLmxlbmd0aDsgZmllbGRJbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IHJlY29yZC5maWVsZHNbZmllbGRJbmRleF1cbiAgICAgIGNvbnN0IGZpZWxkTG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oZmllbGQ/LmxvY2F0aW9uLCByZWNvcmQubG9jYXRpb24pXG4gICAgICBjb25zdCBmaWVsZEtleXMgPSBmaWVsZCAmJiB0eXBlb2YgZmllbGQgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShmaWVsZClcbiAgICAgICAgPyBPYmplY3Qua2V5cyhmaWVsZCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG4gICAgICAgIDogXCJcIlxuXG4gICAgICBpZiAoIWZpZWxkIHx8IHR5cGVvZiBmaWVsZCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZmllbGQpIHx8IGZpZWxkLmtpbmQgIT0gXCJSZWNvcmRGaWVsZFwiIHx8XG4gICAgICAgIGZpZWxkS2V5cyAhPSBcImlkLGtpbmQsbG9jYXRpb24sbmFtZSx0eXBlXCIpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCByZWNvcmQgZmllbGRcIiwgZmllbGRMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGZpZWxkLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJyZWNvcmQgZmllbGQgbG9jYXRpb25cIiwgcmVjb3JkLmxvY2F0aW9uKVxuICAgICAgaWYgKGZpZWxkLmlkICE9IGAke3JlY29yZC5pZH06ZmllbGQ6JHtmaWVsZEluZGV4fWApIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImR1cGxpY2F0ZSBvciBpbnZhbGlkIHJlY29yZCBmaWVsZCBpZGVudGl0eVwiLCBmaWVsZC5sb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgZmllbGQubmFtZSwgXCJyZWNvcmQgZmllbGRcIiwgZmllbGQubG9jYXRpb24pXG4gICAgICBjb25zdCBjb2xsaXNpb24gPSBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiAmJiBbXCJjb25zdHJ1Y3RvclwiLCBcInByb3RvdHlwZVwiLCBcIl9fcHJvdG9fX1wiXS5pbmNsdWRlcyhmaWVsZC5uYW1lKSB8fFxuICAgICAgICBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBbXCJjb25zdHJ1Y3RvclwiLCBcInByb3RvdHlwZVwiLCBcIl9fcHJvdG9fX1wiXS5pbmNsdWRlcyhmaWVsZC5uYW1lKSB8fFxuICAgICAgICBsYW5ndWFnZSA9PSBcInBocFwiICYmIGZpZWxkLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKFwiX19cIikgfHxcbiAgICAgICAgbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgJiYgW1wiaW5pdGlhbGl6ZVwiLCBcImZyZWV6ZVwiLCBcInNlbmRcIiwgXCJwdWJsaWNfc2VuZFwiLCBcIm1ldGhvZFwiLCBcInNpbmdsZXRvbl9jbGFzc1wiXS5pbmNsdWRlcyhmaWVsZC5uYW1lKSB8fFxuICAgICAgICBsYW5ndWFnZSA9PSBcImphdmFcIiAmJiBqYXZhT2JqZWN0SW5zdGFuY2VNZXRob2RTaWduYXR1cmVzLmhhcyhgJHtmaWVsZC5uYW1lfSgpYClcblxuICAgICAgaWYgKGNvbGxpc2lvbikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgcmVjb3JkIGZpZWxkIGNvbGxpc2lvbiAnJHtmaWVsZC5uYW1lfSdgLCBmaWVsZC5sb2NhdGlvbilcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gZmllbGQubmFtZS50b0xvd2VyQ2FzZSgpIDogZmllbGQubmFtZVxuXG4gICAgICBpZiAoZmllbGROYW1lcy5oYXMobm9ybWFsaXplZCkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGR1cGxpY2F0ZSB0YXJnZXQgcmVjb3JkIGZpZWxkICcke2ZpZWxkLm5hbWV9J2AsIGZpZWxkLmxvY2F0aW9uKVxuICAgICAgZmllbGROYW1lcy5hZGQobm9ybWFsaXplZClcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGV4YWN0IHRhcmdldC12aXNpYmxlIHNoYXBlIG9mIGV2ZXJ5IHJlZmVyZW5jZSBjbGFzcyBiZWZvcmUgb3V0cHV0IGFsbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb25bXX0gY2xhc3NlcyAtIENhbmRpZGF0ZSBjbGFzc2VzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbltdfSByZWNvcmRzIC0gRXhpc3RpbmcgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbltdfSBlcnJvcnMgLSBFeGlzdGluZyB0eXBlZCBlcnJvcnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb25bXX0gZnVuY3Rpb25zIC0gRXhpc3RpbmcgZnVuY3Rpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gbW9kdWxlTG9jYXRpb24gLSBGYWxsYmFjayBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlZmVyZW5jZUNsYXNzVGFyZ2V0cyhjbGFzc2VzLCByZWNvcmRzLCBlcnJvcnMsIGZ1bmN0aW9ucywgbGFuZ3VhZ2UsIG1vZHVsZUxvY2F0aW9uKSB7XG4gIGNvbnN0IHRhcmdldE5hbWVzID0gbmV3IFNldCgpXG5cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBbLi4ucmVjb3JkcywgLi4uZXJyb3JzLCAuLi5mdW5jdGlvbnNdKSB7XG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCB0eXBlb2YgZGVjbGFyYXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9uKSkgY29udGludWVcbiAgICBjb25zdCBuYW1lID0gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwibmFtZVwiKVxuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9IFwic3RyaW5nXCIpIGNvbnRpbnVlXG4gICAgdGFyZ2V0TmFtZXMuYWRkKGxhbmd1YWdlID09IFwicGhwXCIgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOiBuYW1lKVxuICB9XG5cbiAgZm9yIChsZXQgY2xhc3NJbmRleCA9IDA7IGNsYXNzSW5kZXggPCBjbGFzc2VzLmxlbmd0aDsgY2xhc3NJbmRleCArPSAxKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBjbGFzc2VzW2NsYXNzSW5kZXhdXG4gICAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oZGVjbGFyYXRpb24/LmxvY2F0aW9uLCBtb2R1bGVMb2NhdGlvbilcbiAgICBjb25zdCBrZXlzID0gZGVjbGFyYXRpb24gJiYgdHlwZW9mIGRlY2xhcmF0aW9uID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24pXG4gICAgICA/IE9iamVjdC5rZXlzKGRlY2xhcmF0aW9uKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIikgOiBcIlwiXG5cbiAgICBpZiAoIWRlY2xhcmF0aW9uIHx8IGRlY2xhcmF0aW9uLmtpbmQgIT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIgfHxcbiAgICAgICFbXCJjb25zdHJ1Y3RvcixmaWVsZHMsaWQsa2luZCxsb2NhdGlvbixtZXRob2RzLG5hbWVcIiwgXCJjb25zdHJ1Y3RvcixmaWVsZHMsaWQsa2luZCxsb2NhdGlvbixtZXRob2RzLG5hbWUsb3duZXJzaGlwXCJdLmluY2x1ZGVzKGtleXMpIHx8XG4gICAgICAhaXNEZW5zZUFycmF5KGRlY2xhcmF0aW9uLmZpZWxkcykgfHwgZGVjbGFyYXRpb24uZmllbGRzLmxlbmd0aCA9PSAwIHx8ICFpc0RlbnNlQXJyYXkoZGVjbGFyYXRpb24ubWV0aG9kcykgfHxcbiAgICAgICFuZXcgUmVnRXhwKGBeKD86W2Etel1bYS16MC05Ll8tXSojKT9jbGFzczoke2NsYXNzSW5kZXh9JGAsIFwidVwiKS50ZXN0KFN0cmluZyhkZWNsYXJhdGlvbi5pZCkpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHJlZmVyZW5jZSBjbGFzcyBkZWNsYXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0aW9uLm93bmVyc2hpcCAhPT0gdW5kZWZpbmVkICYmIGRlY2xhcmF0aW9uLm93bmVyc2hpcD8ua2luZCAhPSBcIm9yZGluYXJ5XCIgJiZcbiAgICAgIChkZWNsYXJhdGlvbi5vd25lcnNoaXA/LmtpbmQgIT0gXCJvd25lZFJlc291cmNlXCIgfHwgdHlwZW9mIGRlY2xhcmF0aW9uLm93bmVyc2hpcC5maWVsZElkICE9IFwic3RyaW5nXCIgfHxcbiAgICAgIHR5cGVvZiBkZWNsYXJhdGlvbi5vd25lcnNoaXAucmVzb3VyY2VJZCAhPSBcInN0cmluZ1wiKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCByZWZlcmVuY2UgY2xhc3MgcmVzb3VyY2Ugb3duZXJzaGlwXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBkZWNsYXJhdGlvbkxvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24oZGVjbGFyYXRpb24ubG9jYXRpb24sIGxhbmd1YWdlLCBcInJlZmVyZW5jZSBjbGFzcyBkZWNsYXJhdGlvbiBsb2NhdGlvblwiLCBtb2R1bGVMb2NhdGlvbilcblxuICAgIHZhbGlkYXRlVGFyZ2V0VHlwZUlkZW50aWZpZXIobGFuZ3VhZ2UsIGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uTG9jYXRpb24pXG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBkZWNsYXJhdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCkgOiBkZWNsYXJhdGlvbi5uYW1lXG5cbiAgICBpZiAodGFyZ2V0TmFtZXMuaGFzKHRhcmdldE5hbWUpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGByZWZlcmVuY2UgY2xhc3MgY29sbGlzaW9uICcke2RlY2xhcmF0aW9uLm5hbWV9J2AsIGRlY2xhcmF0aW9uTG9jYXRpb24pXG4gICAgdGFyZ2V0TmFtZXMuYWRkKHRhcmdldE5hbWUpXG4gICAgY29uc3QgZmllbGROYW1lcyA9IG5ldyBTZXQoKVxuXG4gICAgZm9yIChsZXQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoOyBmaWVsZEluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gZGVjbGFyYXRpb24uZmllbGRzW2ZpZWxkSW5kZXhdXG4gICAgICBjb25zdCBmaWVsZExvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKGZpZWxkPy5sb2NhdGlvbiwgbG9jYXRpb24pXG4gICAgICBjb25zdCBmaWVsZEtleXMgPSBmaWVsZCAmJiB0eXBlb2YgZmllbGQgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShmaWVsZClcbiAgICAgICAgPyBPYmplY3Qua2V5cyhmaWVsZCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgICBpZiAoIWZpZWxkIHx8IGZpZWxkLmtpbmQgIT0gXCJQcml2YXRlRmllbGRcIiB8fCBmaWVsZEtleXMgIT0gXCJpZCxraW5kLGxvY2F0aW9uLG5hbWUsdHlwZVwiIHx8XG4gICAgICAgIGZpZWxkLmlkICE9IGAke2RlY2xhcmF0aW9uLmlkfTpmaWVsZDoke2ZpZWxkSW5kZXh9YCkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHByaXZhdGUgZmllbGRcIiwgZmllbGRMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4YWN0RmllbGRMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGZpZWxkLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJwcml2YXRlIGZpZWxkIGxvY2F0aW9uXCIsIGRlY2xhcmF0aW9uTG9jYXRpb24pXG5cbiAgICAgIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgZmllbGQubmFtZSwgXCJwcml2YXRlIGZpZWxkXCIsIGV4YWN0RmllbGRMb2NhdGlvbilcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gZmllbGQubmFtZS50b0xvd2VyQ2FzZSgpIDogZmllbGQubmFtZVxuXG4gICAgICBpZiAoZmllbGROYW1lcy5oYXMobm9ybWFsaXplZCkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGR1cGxpY2F0ZSB0YXJnZXQgcHJpdmF0ZSBmaWVsZCAnJHtmaWVsZC5uYW1lfSdgLCBleGFjdEZpZWxkTG9jYXRpb24pXG4gICAgICBmaWVsZE5hbWVzLmFkZChub3JtYWxpemVkKVxuICAgIH1cbiAgICBjb25zdCBjb25zdHJ1Y3RvciA9IGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yXG4gICAgY29uc3QgY29uc3RydWN0b3JMb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihjb25zdHJ1Y3Rvcj8ubG9jYXRpb24sIGxvY2F0aW9uKVxuICAgIGNvbnN0IGNvbnN0cnVjdG9yS2V5cyA9IGNvbnN0cnVjdG9yICYmIHR5cGVvZiBjb25zdHJ1Y3RvciA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGNvbnN0cnVjdG9yKVxuICAgICAgPyBPYmplY3Qua2V5cyhjb25zdHJ1Y3RvcikuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgaWYgKCFjb25zdHJ1Y3RvciB8fCBjb25zdHJ1Y3Rvci5raW5kICE9IFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiIHx8XG4gICAgICAhW1wiYm9keSxpZCxraW5kLGxvY2F0aW9uLHBhcmFtZXRlcnNcIiwgXCJib2R5LGVmZmVjdHMsZmFpbHVyZUlkcyxpZCxraW5kLGxvY2F0aW9uLHBhcmFtZXRlcnNcIl0uaW5jbHVkZXMoY29uc3RydWN0b3JLZXlzKSB8fFxuICAgICAgY29uc3RydWN0b3IuaWQgIT0gYCR7ZGVjbGFyYXRpb24uaWR9OmNvbnN0cnVjdG9yYCB8fCAhaXNEZW5zZUFycmF5KGNvbnN0cnVjdG9yLnBhcmFtZXRlcnMpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uXCIsIGNvbnN0cnVjdG9yTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGV4YWN0Q29uc3RydWN0b3JMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGNvbnN0cnVjdG9yLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbiBsb2NhdGlvblwiLCBkZWNsYXJhdGlvbkxvY2F0aW9uKVxuXG4gICAgdmFsaWRhdGVSZWZlcmVuY2VDbGFzc1BhcmFtZXRlcnMoY29uc3RydWN0b3IucGFyYW1ldGVycywgXCJjb25zdHJ1Y3RvclwiLCBsYW5ndWFnZSwgZXhhY3RDb25zdHJ1Y3RvckxvY2F0aW9uKVxuICAgIGNvbnN0IG1ldGhvZE5hbWVzID0gbmV3IFNldCgpXG5cbiAgICBmb3IgKGxldCBtZXRob2RJbmRleCA9IDA7IG1ldGhvZEluZGV4IDwgZGVjbGFyYXRpb24ubWV0aG9kcy5sZW5ndGg7IG1ldGhvZEluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IG1ldGhvZCA9IGRlY2xhcmF0aW9uLm1ldGhvZHNbbWV0aG9kSW5kZXhdXG4gICAgICBjb25zdCBtZXRob2RMb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihtZXRob2Q/LmxvY2F0aW9uLCBsb2NhdGlvbilcbiAgICAgIGNvbnN0IG1ldGhvZEtleXMgPSBtZXRob2QgJiYgdHlwZW9mIG1ldGhvZCA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KG1ldGhvZClcbiAgICAgICAgPyBPYmplY3Qua2V5cyhtZXRob2QpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgICAgaWYgKCFtZXRob2QgfHwgbWV0aG9kLmtpbmQgIT0gXCJNZXRob2REZWNsYXJhdGlvblwiIHx8XG4gICAgICAgICFbXCJib2R5LGlkLGtpbmQsbG9jYXRpb24sbmFtZSxwYXJhbWV0ZXJzLHJldHVyblR5cGVcIixcbiAgICAgICAgICBcImJvZHksZWZmZWN0cyxmYWlsdXJlSWRzLGlkLGtpbmQsbG9jYXRpb24sbmFtZSxwYXJhbWV0ZXJzLHJldHVyblR5cGVcIl0uaW5jbHVkZXMobWV0aG9kS2V5cykgfHxcbiAgICAgICAgbWV0aG9kLmlkICE9IGAke2RlY2xhcmF0aW9uLmlkfTptZXRob2Q6JHttZXRob2RJbmRleH1gIHx8ICFpc0RlbnNlQXJyYXkobWV0aG9kLnBhcmFtZXRlcnMpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgbWV0aG9kIGRlY2xhcmF0aW9uXCIsIG1ldGhvZExvY2F0aW9uKVxuICAgICAgfVxuICAgICAgY29uc3QgZXhhY3RNZXRob2RMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG1ldGhvZC5sb2NhdGlvbiwgbGFuZ3VhZ2UsIFwibWV0aG9kIGRlY2xhcmF0aW9uIGxvY2F0aW9uXCIsIGRlY2xhcmF0aW9uTG9jYXRpb24pXG4gICAgICBjb25zdCBsaWZlY3ljbGVOYW1lID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiX19jb25zdHJ1Y3RcIiA6IGxhbmd1YWdlID09IFwicnVieVwiID8gXCJpbml0aWFsaXplXCIgOlxuICAgICAgICBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiA/IFwiY29uc3RydWN0b3JcIiA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAobWV0aG9kLm5hbWUgPT0gbGlmZWN5Y2xlTmFtZSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGByZXNlcnZlZCByZWZlcmVuY2UgbGlmZWN5Y2xlIG1ldGhvZCAnJHttZXRob2QubmFtZX0nYCwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc2VydmVkSG9vayA9IGxhbmd1YWdlID09IFwicGhwXCIgPyAvXl9fL3UudGVzdChtZXRob2QubmFtZSkgOlxuICAgICAgICBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IHJ1YnlSZWZlcmVuY2VNZXRob2RIb29rcy5oYXMobWV0aG9kLm5hbWUpIHx8XG4gICAgICAgICAgdHlwZW9mIG1ldGhvZC5uYW1lID09IFwic3RyaW5nXCIgJiYgbWV0aG9kLm5hbWUuZW5kc1dpdGgoXCI9XCIpIDpcbiAgICAgICAgICBsYW5ndWFnZSA9PSBcImphdmFcIiA/IGphdmFSZWZlcmVuY2VNZXRob2RIb29rcy5oYXMobWV0aG9kLm5hbWUpIDpcbiAgICAgICAgICAgIGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiID8gamF2YXNjcmlwdFJlZmVyZW5jZU1ldGhvZEhvb2tzLmhhcyhtZXRob2QubmFtZSkgOiBmYWxzZVxuXG4gICAgICBpZiAocmVzZXJ2ZWRIb29rKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGByZXNlcnZlZCByZWZlcmVuY2UgbWV0aG9kICcke21ldGhvZC5uYW1lfSdgLCBleGFjdE1ldGhvZExvY2F0aW9uKVxuICAgICAgaWYgKGxhbmd1YWdlID09IFwicnVieVwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWV0aG9kLm5hbWUgIT0gXCJzdHJpbmdcIiB8fCAhL15bQS1aYS16X11bQS1aYS16MC05X10qWyE/PV0/JC91LnRlc3QobWV0aG9kLm5hbWUpKSB7XG4gICAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWV0aG9kIGlkZW50aWZpZXIgJyR7U3RyaW5nKG1ldGhvZC5uYW1lKX0nYCwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgbWV0aG9kLm5hbWUsIFwibWV0aG9kXCIsIGV4YWN0TWV0aG9kTG9jYXRpb24pXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IG1ldGhvZC5uYW1lLnRvTG93ZXJDYXNlKCkgOiBtZXRob2QubmFtZVxuXG4gICAgICBpZiAobWV0aG9kTmFtZXMuaGFzKG5vcm1hbGl6ZWQpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBkdXBsaWNhdGUgdGFyZ2V0IG1ldGhvZCAnJHttZXRob2QubmFtZX0nYCwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBmaWVsZE5hbWVzLmhhcyhub3JtYWxpemVkKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGB0YXJnZXQgY2xhc3MgbWVtYmVyIGNvbGxpc2lvbiAnJHttZXRob2QubmFtZX0nYCwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIG1ldGhvZE5hbWVzLmFkZChub3JtYWxpemVkKVxuICAgICAgdmFsaWRhdGVSZWZlcmVuY2VDbGFzc1BhcmFtZXRlcnMobWV0aG9kLnBhcmFtZXRlcnMsIFwibWV0aG9kXCIsIGxhbmd1YWdlLCBleGFjdE1ldGhvZExvY2F0aW9uKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBvbmUgcmVmZXJlbmNlIGNhbGxhYmxlJ3MgZXhhY3QgcGFyYW1ldGVyIHNoYXBlIGFuZCB0YXJnZXQgbmFtZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdfSBwYXJhbWV0ZXJzIC0gQ2FuZGlkYXRlIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1wiY29uc3RydWN0b3JcIiB8IFwibWV0aG9kXCJ9IG93bmVyIC0gQ2FsbGFibGUga2luZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBGYWxsYmFjayBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlZmVyZW5jZUNsYXNzUGFyYW1ldGVycyhwYXJhbWV0ZXJzLCBvd25lciwgbGFuZ3VhZ2UsIG93bmVyTG9jYXRpb24pIHtcbiAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgcGFyYW1ldGVycykge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKHBhcmFtZXRlcj8ubG9jYXRpb24sIG93bmVyTG9jYXRpb24pXG4gICAgY29uc3Qga2V5cyA9IHBhcmFtZXRlciAmJiB0eXBlb2YgcGFyYW1ldGVyID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkocGFyYW1ldGVyKVxuICAgICAgPyBPYmplY3Qua2V5cyhwYXJhbWV0ZXIpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgIGlmICghcGFyYW1ldGVyIHx8IHBhcmFtZXRlci5raW5kICE9IFwiUGFyYW1ldGVyXCIgfHwga2V5cyAhPSBcImtpbmQsbG9jYXRpb24sbmFtZSx0eXBlXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1pc3Npbmcgb3IgaW52YWxpZCAke293bmVyfSBwYXJhbWV0ZXJgLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgZXhhY3RMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKHBhcmFtZXRlci5sb2NhdGlvbiwgbGFuZ3VhZ2UsIGAke293bmVyfSBwYXJhbWV0ZXIgbG9jYXRpb25gLCBvd25lckxvY2F0aW9uKVxuXG4gICAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgcGFyYW1ldGVyLm5hbWUsIFwicGFyYW1ldGVyXCIsIGV4YWN0TG9jYXRpb24pXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgb25lIGRlY2xhcmF0aW9uJ3MgdGFyZ2V0LXZpc2libGUgdHlwZS1wYXJhbWV0ZXIgbmFtZXMgYW5kIGlkZW50aXRpZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBPd25lci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVR5cGVQYXJhbWV0ZXJUYXJnZXRzKGRlY2xhcmF0aW9uLCBsYW5ndWFnZSkge1xuICBpZiAoZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuXG4gIGlmICghaXNEZW5zZUFycmF5KGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgdHlwZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zXCIsIGRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IG5hbWVzID0gbmV3IFNldCgpXG4gIC8qKlxuICAgKiBOb3JtYWxpemVzIGEgdHlwZS92YWx1ZSBzcGVsbGluZyBmb3IgdGFyZ2V0IGNvbGxpc2lvbiBjaGVja3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gQ2FuZGlkYXRlIHRhcmdldCBuYW1lLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUYXJnZXQgY29tcGFyaXNvbiBrZXkuXG4gICAqL1xuICBjb25zdCB0YXJnZXRLZXkgPSAobmFtZSkgPT4gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IG5hbWUudG9Mb3dlckNhc2UoKSA6IG5hbWVcbiAgY29uc3QgdmFsdWVOYW1lcyA9IG5ldyBTZXQoW1xuICAgIGRlY2xhcmF0aW9uLm5hbWUsXG4gICAgLi4uKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIgPyBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzIDogZGVjbGFyYXRpb24uZmllbGRzKS5tYXAoKHtuYW1lfSkgPT4gbmFtZSlcbiAgXS5tYXAodGFyZ2V0S2V5KSlcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnNbaW5kZXhdXG4gICAgY29uc3Qga2V5cyA9IHBhcmFtZXRlciAmJiB0eXBlb2YgcGFyYW1ldGVyID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkocGFyYW1ldGVyKVxuICAgICAgPyBPYmplY3Qua2V5cyhwYXJhbWV0ZXIpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgIGlmICghcGFyYW1ldGVyIHx8IHBhcmFtZXRlci5raW5kICE9IFwiVHlwZVBhcmFtZXRlclwiIHx8IGtleXMgIT0gXCJpZCxraW5kLGxvY2F0aW9uLG5hbWVcIiB8fFxuICAgICAgcGFyYW1ldGVyLmlkICE9IGAke2RlY2xhcmF0aW9uLmlkfTp0eXBlOiR7aW5kZXh9YCkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCB0eXBlIHBhcmFtZXRlciBkZWNsYXJhdGlvblwiLCBwYXJhbWV0ZXI/LmxvY2F0aW9uID8/IGRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihwYXJhbWV0ZXIubG9jYXRpb24sIGxhbmd1YWdlLCBcInR5cGUgcGFyYW1ldGVyIGxvY2F0aW9uXCIsIGRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIHZhbGlkYXRlVGFyZ2V0VHlwZUlkZW50aWZpZXIobGFuZ3VhZ2UsIHBhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXIubG9jYXRpb24pXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRhcmdldEtleShwYXJhbWV0ZXIubmFtZSlcblxuICAgIGlmIChuYW1lcy5oYXMobm9ybWFsaXplZCkgfHwgdmFsdWVOYW1lcy5oYXMobm9ybWFsaXplZCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYHRhcmdldCB0eXBlIHBhcmFtZXRlciBjb2xsaXNpb24gJyR7cGFyYW1ldGVyLm5hbWV9J2AsIHBhcmFtZXRlci5sb2NhdGlvbilcbiAgICB9XG4gICAgbmFtZXMuYWRkKG5vcm1hbGl6ZWQpXG4gIH1cbn1cblxuLyoqXG4gKiBEZXRlY3RzIFRhc2sgMDEyIElSIGJlZm9yZSBhIG5vbi1jb2hvcnQgYmFja2VuZCByZWFjaGVzIG9sZGVyIGZlYXR1cmUgY2hlY2tzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQ2FuZGlkYXRlIG1vZHVsZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGdlbmVyaWMgZGVjbGFyYXRpb25zIGFyZSBwcmVzZW50LlxuICovXG5mdW5jdGlvbiBtb2R1bGVIYXNUeXBlUGFyYW1ldGVycyhtb2R1bGUpIHtcbiAgcmV0dXJuIFsuLi5tb2R1bGUucmVjb3JkcyA/PyBbXSwgLi4ubW9kdWxlLmZ1bmN0aW9uc10uc29tZSgoZGVjbGFyYXRpb24pID0+XG4gICAgQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbj8udHlwZVBhcmFtZXRlcnMpICYmIGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA+IDApXG59XG5cbi8qKlxuICogUmVqZWN0cyBUYXNrIDAwOCBzdGF0ZW1lbnRzIGJlZm9yZSBhIG5vbi1jb2hvcnQgYmFja2VuZCByZWFjaGVzIGNvbGxlY3Rpb24tdHlwZSBjaGVja3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDYW5kaWRhdGUgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdEl0ZXJhdGlvblN0YXRlbWVudHMobW9kdWxlLCBsYW5ndWFnZSkge1xuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICByZWplY3RCbG9ja0l0ZXJhdGlvbihkZWNsYXJhdGlvbiAmJiB0eXBlb2YgZGVjbGFyYXRpb24gPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbilcbiAgICAgID8gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwiYm9keVwiKVxuICAgICAgOiB1bmRlZmluZWQsIGxhbmd1YWdlKVxuICB9XG4gIHJlamVjdEJsb2NrSXRlcmF0aW9uKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIGxhbmd1YWdlKVxufVxuXG4vKipcbiAqIFJlamVjdHMgVGFzayAwMzIgSVIgYmVmb3JlIGEgbm9uLWNvaG9ydCBiYWNrZW5kIGFsbG9jYXRlcyBvdXRwdXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDYW5kaWRhdGUgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdENvbmRpdGlvbkNvbnRyb2xsZWRMb29wcyhtb2R1bGUsIGxhbmd1YWdlKSB7XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykge1xuICAgIHJlamVjdEJsb2NrQ29uZGl0aW9uTG9vcChkZWNsYXJhdGlvbiAmJiB0eXBlb2YgZGVjbGFyYXRpb24gPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbilcbiAgICAgID8gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwiYm9keVwiKVxuICAgICAgOiB1bmRlZmluZWQsIGxhbmd1YWdlKVxuICB9XG4gIHJlamVjdEJsb2NrQ29uZGl0aW9uTG9vcChtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBsYW5ndWFnZSlcbn1cblxuLyoqXG4gKiBGaW5kcyBhIGNvbmRpdGlvbi1jb250cm9sbGVkIGxvb3Agd2l0aG91dCBkZXNjZW5kaW5nIHRocm91Z2ggbWFsZm9ybWVkIG9yIGN5Y2xpYyBjb250YWluZXJzLlxuICogQHBhcmFtIHt1bmtub3dufSBibG9jayAtIENhbmRpZGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFtzZWVuXSAtIFZpc2l0ZWQgY29udGFpbmVycy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AoYmxvY2ssIGxhbmd1YWdlLCBzZWVuID0gbmV3IFNldCgpKSB7XG4gIGlmICghYmxvY2sgfHwgdHlwZW9mIGJsb2NrICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShibG9jaykgfHwgc2Vlbi5oYXMoYmxvY2spKSByZXR1cm5cbiAgc2Vlbi5hZGQoYmxvY2spXG4gIGNvbnN0IHN0YXRlbWVudHMgPSBSZWZsZWN0LmdldChibG9jaywgXCJzdGF0ZW1lbnRzXCIpXG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHN0YXRlbWVudHMpKSByZXR1cm5cbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2Ygc3RhdGVtZW50cykge1xuICAgIGlmICghc3RhdGVtZW50IHx8IHR5cGVvZiBzdGF0ZW1lbnQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHN0YXRlbWVudCkpIGNvbnRpbnVlXG4gICAgY29uc3Qga2luZCA9IFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJraW5kXCIpXG4gICAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImxvY2F0aW9uXCIpLCBSZWZsZWN0LmdldChibG9jaywgXCJsb2NhdGlvblwiKSlcblxuICAgIGlmIChraW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDMyIGNvbmRpdGlvbi1jb250cm9sbGVkIGxvb3BcIiwgbG9jYXRpb24pXG4gICAgaWYgKGtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImNvbnNlcXVlbnRcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgICAgcmVqZWN0QmxvY2tDb25kaXRpb25Mb29wKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJhbHRlcm5hdGVcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgIH0gZWxzZSBpZiAoW1wiRm9yRWFjaFN0YXRlbWVudFwiLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiwgXCJXaGlsZVN0YXRlbWVudFwiXS5pbmNsdWRlcyhTdHJpbmcoa2luZCkpKSB7XG4gICAgICByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImJvZHlcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgIH0gZWxzZSBpZiAoa2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImJvZHlcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJoYW5kbGVyc1wiKSA/PyBbXSkgcmVqZWN0QmxvY2tDb25kaXRpb25Mb29wKFJlZmxlY3QuZ2V0KGhhbmRsZXIsIFwiY2F0Y2hCb2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICAgIHJlamVjdEJsb2NrQ29uZGl0aW9uTG9vcChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiZmluYWxseUJvZHlcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEZpbmRzIGEgVGFzayAwMDggbm9kZSB3aXRob3V0IGRlc2NlbmRpbmcgdGhyb3VnaCBtYWxmb3JtZWQgb3IgY3ljbGljIGNvbnRhaW5lcnMuXG4gKiBAcGFyYW0ge3Vua25vd259IGJsb2NrIC0gQ2FuZGlkYXRlIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW3NlZW5dIC0gVmlzaXRlZCBjb250YWluZXJzLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdEJsb2NrSXRlcmF0aW9uKGJsb2NrLCBsYW5ndWFnZSwgc2VlbiA9IG5ldyBTZXQoKSkge1xuICBpZiAoIWJsb2NrIHx8IHR5cGVvZiBibG9jayAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmxvY2spIHx8IHNlZW4uaGFzKGJsb2NrKSkgcmV0dXJuXG4gIHNlZW4uYWRkKGJsb2NrKVxuICBjb25zdCBzdGF0ZW1lbnRzID0gUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShzdGF0ZW1lbnRzKSkgcmV0dXJuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSBjb250aW51ZVxuICAgIGNvbnN0IGtpbmQgPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwia2luZFwiKVxuICAgIGNvbnN0IGxvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJsb2NhdGlvblwiKSwgUmVmbGVjdC5nZXQoYmxvY2ssIFwibG9jYXRpb25cIikpXG5cbiAgICBpZiAoW1wiRm9yRWFjaFN0YXRlbWVudFwiLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiwgXCJCcmVha1N0YXRlbWVudFwiLCBcIkNvbnRpbnVlU3RhdGVtZW50XCJdLmluY2x1ZGVzKGtpbmQpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDggb3JkZXJlZCBsaXN0IGl0ZXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKGtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RCbG9ja0l0ZXJhdGlvbihSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiY29uc2VxdWVudFwiKSwgbGFuZ3VhZ2UsIHNlZW4pXG4gICAgICByZWplY3RCbG9ja0l0ZXJhdGlvbihSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYWx0ZXJuYXRlXCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tJdGVyYXRpb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImJvZHlcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJoYW5kbGVyc1wiKSA/PyBbXSkgcmVqZWN0QmxvY2tJdGVyYXRpb24oUmVmbGVjdC5nZXQoaGFuZGxlciwgXCJjYXRjaEJvZHlcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgICAgcmVqZWN0QmxvY2tJdGVyYXRpb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImZpbmFsbHlCb2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZWplY3RzIFRhc2sgMDA3IG9wdGlvbmFsIHR5cGVzIGJlZm9yZSBhIG5vbi1jb2hvcnQgZW1pdHRlciBhbGxvY2F0ZXMgb3V0cHV0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQ2FuZGlkYXRlIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RPcHRpb25hbFR5cGVzKG1vZHVsZSwgbGFuZ3VhZ2UpIHtcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCB0eXBlb2YgZGVjbGFyYXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9uKSkgY29udGludWVcbiAgICBjb25zdCBsb2NhdGlvbiA9IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcImxvY2F0aW9uXCIpID8/IG1vZHVsZS5sb2NhdGlvblxuXG4gICAgaWYgKGNvbnRhaW5zT3B0aW9uYWxUeXBlKFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcInJldHVyblR5cGVcIikpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDcgb3B0aW9uYWwgcmV0dXJuIHR5cGVcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIEFycmF5LmlzQXJyYXkoUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwicGFyYW1ldGVyc1wiKSkgPyBSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJwYXJhbWV0ZXJzXCIpIDogW10pIHtcbiAgICAgIGlmIChjb250YWluc09wdGlvbmFsVHlwZShwYXJhbWV0ZXI/LnR5cGUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNyBvcHRpb25hbCBwYXJhbWV0ZXIgdHlwZVwiLCBwYXJhbWV0ZXIubG9jYXRpb24gPz8gbG9jYXRpb24pXG4gICAgICB9XG4gICAgfVxuICAgIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJib2R5XCIpLCBsYW5ndWFnZSlcbiAgfVxuICByZWplY3RCbG9ja09wdGlvbmFsVHlwZXMobW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgbGFuZ3VhZ2UpXG59XG5cbi8qKlxuICogUmVqZWN0cyBvcHRpb25hbCBsb2NhbCB0eXBlcyByZWN1cnNpdmVseSBpbiBvbmUgY2FuZGlkYXRlIGJsb2NrLlxuICogQHBhcmFtIHt1bmtub3dufSBibG9jayAtIENhbmRpZGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RCbG9ja09wdGlvbmFsVHlwZXMoYmxvY2ssIGxhbmd1YWdlKSB7XG4gIGlmICghYmxvY2sgfHwgdHlwZW9mIGJsb2NrICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShibG9jaykgfHwgIUFycmF5LmlzQXJyYXkoUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKSkpIHJldHVyblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBSZWZsZWN0LmdldChibG9jaywgXCJzdGF0ZW1lbnRzXCIpKSB7XG4gICAgaWYgKCFzdGF0ZW1lbnQgfHwgdHlwZW9mIHN0YXRlbWVudCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoc3RhdGVtZW50KSkgY29udGludWVcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgJiYgY29udGFpbnNPcHRpb25hbFR5cGUoc3RhdGVtZW50LnR5cGUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDcgb3B0aW9uYWwgbG9jYWwgdHlwZVwiLCBzdGF0ZW1lbnQubG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICAgIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhzdGF0ZW1lbnQuY29uc2VxdWVudCwgbGFuZ3VhZ2UpXG4gICAgICBpZiAoc3RhdGVtZW50LmFsdGVybmF0ZSkgcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKHN0YXRlbWVudC5hbHRlcm5hdGUsIGxhbmd1YWdlKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgIGlmIChjb250YWluc09wdGlvbmFsVHlwZShzdGF0ZW1lbnQudmFsdWVCaW5kaW5nPy50eXBlKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDcgb3B0aW9uYWwgaXRlcmF0aW9uIGJpbmRpbmcgdHlwZVwiLCBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLmxvY2F0aW9uID8/IHN0YXRlbWVudC5sb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhzdGF0ZW1lbnQuYm9keSwgbGFuZ3VhZ2UpXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhzdGF0ZW1lbnQuYm9keSwgbGFuZ3VhZ2UpXG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhzdGF0ZW1lbnQuYm9keSwgbGFuZ3VhZ2UpXG4gICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2Ygc3RhdGVtZW50LmhhbmRsZXJzID8/IFtdKSByZWplY3RCbG9ja09wdGlvbmFsVHlwZXMoaGFuZGxlci5jYXRjaEJvZHksIGxhbmd1YWdlKVxuICAgICAgaWYgKHN0YXRlbWVudC5maW5hbGx5Qm9keSkgcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKHN0YXRlbWVudC5maW5hbGx5Qm9keSwgbGFuZ3VhZ2UpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIG9uZSBib3VuZGVkIHJlY3Vyc2l2ZSBzZW1hbnRpYyB0eXBlIGZvciBhbiBvcHRpb25hbCBub2RlLlxuICogQHBhcmFtIHt1bmtub3dufSB0eXBlIC0gQ2FuZGlkYXRlIHR5cGUuXG4gKiBAcGFyYW0ge1NldDxvYmplY3Q+fSBbc2Vlbl0gLSBDeWNsZSBwcm90ZWN0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgYW4gb3B0aW9uYWwgdHlwZSBvY2N1cnMuXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zT3B0aW9uYWxUeXBlKHR5cGUsIHNlZW4gPSBuZXcgU2V0KCkpIHtcbiAgaWYgKCF0eXBlIHx8IHR5cGVvZiB0eXBlICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh0eXBlKSB8fCBzZWVuLmhhcyh0eXBlKSkgcmV0dXJuIGZhbHNlXG4gIHNlZW4uYWRkKHR5cGUpXG4gIGNvbnN0IGtpbmQgPSBSZWZsZWN0LmdldCh0eXBlLCBcImtpbmRcIilcblxuICBpZiAoa2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSByZXR1cm4gdHJ1ZVxuICBpZiAoa2luZCA9PSBcIkxpc3RUeXBlXCIpIHJldHVybiBjb250YWluc09wdGlvbmFsVHlwZShSZWZsZWN0LmdldCh0eXBlLCBcImVsZW1lbnRUeXBlXCIpLCBzZWVuKVxuICBpZiAoa2luZCA9PSBcIk1hcFR5cGVcIiB8fCBraW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIikgcmV0dXJuIGNvbnRhaW5zT3B0aW9uYWxUeXBlKFJlZmxlY3QuZ2V0KHR5cGUsIFwia2V5VHlwZVwiKSwgc2VlbikgfHxcbiAgICBjb250YWluc09wdGlvbmFsVHlwZShSZWZsZWN0LmdldCh0eXBlLCBcInZhbHVlVHlwZVwiKSwgc2VlbilcblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBSZWplY3RzIFRhc2sgMDA2IHR5cGVzIGJlZm9yZSBhIHJlZ2lzdGVyZWQgbm9uLWNvaG9ydCBlbWl0dGVyIGNhbiBhbGxvY2F0ZSBhbiBhcnRpZmFjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RDb2xsZWN0aW9uVHlwZXMobW9kdWxlLCBsYW5ndWFnZSkge1xuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICBpZiAoIWRlY2xhcmF0aW9uIHx8IHR5cGVvZiBkZWNsYXJhdGlvbiAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24pKSBjb250aW51ZVxuICAgIGNvbnN0IGxvY2F0aW9uID0gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwibG9jYXRpb25cIikgPz8gbW9kdWxlLmxvY2F0aW9uXG4gICAgY29uc3QgcmV0dXJuVHlwZSA9IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcInJldHVyblR5cGVcIilcblxuICAgIGlmIChpc0NvbGxlY3Rpb25UeXBlKHJldHVyblR5cGUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDYgaW1tdXRhYmxlIGNvbGxlY3Rpb24gcmV0dXJuIHR5cGVcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJwYXJhbWV0ZXJzXCIpXG5cbiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpID8gcGFyYW1ldGVycyA6IFtdKSB7XG4gICAgICBpZiAoaXNDb2xsZWN0aW9uVHlwZShwYXJhbWV0ZXI/LnR5cGUpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDYgaW1tdXRhYmxlIGNvbGxlY3Rpb24gcGFyYW1ldGVyIHR5cGVcIiwgcGFyYW1ldGVyLmxvY2F0aW9uID8/IGxvY2F0aW9uKVxuICAgIH1cbiAgICByZWplY3RCbG9ja0NvbGxlY3Rpb25UeXBlcyhSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJib2R5XCIpLCBsYW5ndWFnZSlcbiAgfVxuICByZWplY3RCbG9ja0NvbGxlY3Rpb25UeXBlcyhtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBsYW5ndWFnZSlcbn1cblxuLyoqXG4gKiBSZWplY3RzIGNvbGxlY3Rpb24gbG9jYWwgdHlwZXMgcmVjdXJzaXZlbHkgaW4gb25lIGJsb2NrLlxuICogQHBhcmFtIHt1bmtub3dufSBibG9jayAtIENhbmRpZGF0ZSBzZW1hbnRpYyBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RCbG9ja0NvbGxlY3Rpb25UeXBlcyhibG9jaywgbGFuZ3VhZ2UpIHtcbiAgaWYgKCFibG9jayB8fCB0eXBlb2YgYmxvY2sgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGJsb2NrKSB8fCAhQXJyYXkuaXNBcnJheShSZWZsZWN0LmdldChibG9jaywgXCJzdGF0ZW1lbnRzXCIpKSkgcmV0dXJuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIFJlZmxlY3QuZ2V0KGJsb2NrLCBcInN0YXRlbWVudHNcIikpIHtcbiAgICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSBjb250aW51ZVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiAmJiBpc0NvbGxlY3Rpb25UeXBlKHN0YXRlbWVudC50eXBlKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA2IGltbXV0YWJsZSBjb2xsZWN0aW9uIGxvY2FsIHR5cGVcIiwgc3RhdGVtZW50LmxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RCbG9ja0NvbGxlY3Rpb25UeXBlcyhzdGF0ZW1lbnQuY29uc2VxdWVudCwgbGFuZ3VhZ2UpXG4gICAgICBpZiAoc3RhdGVtZW50LmFsdGVybmF0ZSkgcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMoc3RhdGVtZW50LmFsdGVybmF0ZSwgbGFuZ3VhZ2UpXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIikge1xuICAgICAgaWYgKGlzQ29sbGVjdGlvblR5cGUoc3RhdGVtZW50LnZhbHVlQmluZGluZz8udHlwZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA2IGltbXV0YWJsZSBjb2xsZWN0aW9uIGl0ZXJhdGlvbiBiaW5kaW5nIHR5cGVcIiwgc3RhdGVtZW50LnZhbHVlQmluZGluZy5sb2NhdGlvbiA/PyBzdGF0ZW1lbnQubG9jYXRpb24pXG4gICAgICB9XG4gICAgICByZWplY3RCbG9ja0NvbGxlY3Rpb25UeXBlcyhzdGF0ZW1lbnQuYm9keSwgbGFuZ3VhZ2UpXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKHN0YXRlbWVudC5ib2R5LCBsYW5ndWFnZSlcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMoc3RhdGVtZW50LmJvZHksIGxhbmd1YWdlKVxuICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHN0YXRlbWVudC5oYW5kbGVycyA/PyBbXSkgcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMoaGFuZGxlci5jYXRjaEJvZHksIGxhbmd1YWdlKVxuICAgICAgaWYgKHN0YXRlbWVudC5maW5hbGx5Qm9keSkgcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMoc3RhdGVtZW50LmZpbmFsbHlCb2R5LCBsYW5ndWFnZSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgYSBwb3NzaWJsZSByZWN1cnNpdmUgY29sbGVjdGlvbiB0eXBlIHdpdGhvdXQgdHJhdmVyc2luZyBtYWxmb3JtZWQgY2hpbGRyZW4uXG4gKiBAcGFyYW0ge3Vua25vd259IHR5cGUgLSBDYW5kaWRhdGUgdHlwZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBvdXRlciB0eXBlIGlzIGEgY29sbGVjdGlvbi5cbiAqL1xuZnVuY3Rpb24gaXNDb2xsZWN0aW9uVHlwZSh0eXBlKSB7XG4gIHJldHVybiBCb29sZWFuKHR5cGUgJiYgdHlwZW9mIHR5cGUgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh0eXBlKSAmJlxuICAgIChbXCJMaXN0VHlwZVwiLCBcIk1hcFR5cGVcIiwgXCJPcmRlcmVkTWFwVHlwZVwiXS5pbmNsdWRlcyhTdHJpbmcoUmVmbGVjdC5nZXQodHlwZSwgXCJraW5kXCIpKSkpKVxufVxuXG4vKipcbiAqIFJlamVjdHMgc2VtYW50aWMgbmFtZXMgdGhhdCB3b3VsZCBjYXB0dXJlIHN5bnRheCBvd25lZCBieSBvbmUgYmFja2VuZCBlbWl0dGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZSBvciBiaW5hcnkgdGFyZ2V0LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU2NhZmZvbGRpbmdOYW1lcyhtb2R1bGUsIGxhbmd1YWdlKSB7XG4gIHZhbGlkYXRlUmVjb3JkQ29uc3RydWN0b3JOYW1lcyhtb2R1bGUsIGxhbmd1YWdlKVxuICBjb25zdCBuZWVkc05hdGl2ZU1hcCA9IFtcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCJdLmluY2x1ZGVzKGxhbmd1YWdlKSAmJlxuICAgIChtb2R1bGVDb250YWluc0V4cHJlc3Npb25LaW5kKG1vZHVsZSwgXCJNYXBMaXRlcmFsXCIpIHx8IG1vZHVsZUNvbnRhaW5zRXhwcmVzc2lvbktpbmQobW9kdWxlLCBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpKVxuICBjb25zdCBuZWVkc1BocENvdW50ID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiAmJiBtb2R1bGVDb250YWluc0V4cHJlc3Npb25LaW5kKG1vZHVsZSwgXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIilcbiAgY29uc3QgamF2YXNjcmlwdE93bmVkTmFtZXMgPSBuZXcgU2V0KFtcImNvbnNvbGVcIiwgLi4uKG5lZWRzTmF0aXZlTWFwID8gW1wiTWFwXCJdIDogW10pXSlcbiAgY29uc3Qgb3duZWRFbnRyeU5hbWVzID0gbGFuZ3VhZ2UgPT0gXCJnb1wiID8gbmV3IFNldChbXCJmbXRcIiwgXCJpbnQ2NFwiLCBcImJvb2xcIiwgXCJzdHJpbmdcIiwgXCJ0cnVlXCIsIFwiZmFsc2VcIl0pIDpcbiAgICBsYW5ndWFnZSA9PSBcImNzaGFycFwiID8gbmV3IFNldChbXCJTeXN0ZW1cIl0pIDogbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBuZXcgU2V0KFtcImFyZ3NcIiwgXCJTeXN0ZW1cIl0pIDpcbiAgICBbXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiXS5pbmNsdWRlcyhsYW5ndWFnZSkgPyBqYXZhc2NyaXB0T3duZWROYW1lcyA6IG5ldyBTZXQoKVxuICBjb25zdCBvd25lZFByaW50UmVjZWl2ZXJOYW1lcyA9IGxhbmd1YWdlID09IFwiZ29cIiA/IG5ldyBTZXQoW1wiZm10XCIsIFwiaW50NjRcIiwgXCJib29sXCIsIFwic3RyaW5nXCIsIFwidHJ1ZVwiLCBcImZhbHNlXCJdKSA6XG4gICAgbGFuZ3VhZ2UgPT0gXCJjc2hhcnBcIiB8fCBsYW5ndWFnZSA9PSBcImphdmFcIiA/IG5ldyBTZXQoW1wiU3lzdGVtXCJdKSA6XG4gICAgW1wiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIl0uaW5jbHVkZXMobGFuZ3VhZ2UpID8gamF2YXNjcmlwdE93bmVkTmFtZXMgOiBuZXcgU2V0KClcbiAgY29uc3Qgb3duZWRDYWxsYWJsZU5hbWVzID0gbGFuZ3VhZ2UgPT0gXCJnb1wiID8gbmV3IFNldChbXCJtYWluXCIsIFwiaW5pdFwiLCBcImZtdFwiLCBcImludDY0XCIsIFwiYm9vbFwiLCBcInN0cmluZ1wiLCBcInRydWVcIiwgXCJmYWxzZVwiXSkgOlxuICAgIGxhbmd1YWdlID09IFwiY3NoYXJwXCIgPyBuZXcgU2V0KFtcbiAgICBcIkVxdWFsc1wiLCBcIkZpbmFsaXplXCIsIFwiR2V0SGFzaENvZGVcIiwgXCJHZXRUeXBlXCIsIFwiTWFpblwiLCBcIk1lbWJlcndpc2VDbG9uZVwiLCBcIlByb2dyYW1cIiwgXCJSZWZlcmVuY2VFcXVhbHNcIiwgXCJTeXN0ZW1cIiwgXCJUb1N0cmluZ1wiXG4gIF0pIDpcbiAgICBsYW5ndWFnZSA9PSBcImphdmFcIiA/IG5ldyBTZXQoW1wibWFpblwiXSkgOlxuICAgIFtcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCJdLmluY2x1ZGVzKGxhbmd1YWdlKSA/IGphdmFzY3JpcHRPd25lZE5hbWVzIDpcbiAgICBuZWVkc1BocENvdW50ID8gbmV3IFNldChbXCJjb3VudFwiXSkgOlxuICAgIGxhbmd1YWdlID09IFwicnVieVwiID8gbmV3IFNldChbXCJwdXRzXCIsIFwic2VuZFwiLCBcInB1YmxpY19zZW5kXCIsIFwiX19zZW5kX19cIl0pIDogbmV3IFNldCgpXG4gIC8qKlxuICAgKiBQcm90ZWN0cyBwcmludC9mYWN0b3J5IHNwZWxsaW5ncyBpbnNpZGUgb25lIGNhbGxhYmxlIHNjb3BlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdfSBwYXJhbWV0ZXJzIC0gQ2FsbGFibGUgcGFyYW1ldGVycy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYm9keSAtIENhbGxhYmxlIGJvZHkuXG4gICAqIEBwYXJhbSB7XCJmdW5jdGlvblwiIHwgXCJjb25zdHJ1Y3RvclwiIHwgXCJtZXRob2RcIn0gb3duZXIgLSBEaWFnbm9zdGljIG93bmVyLlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVDYWxsYWJsZUJpbmRpbmdzID0gKHBhcmFtZXRlcnMsIGJvZHksIG93bmVyKSA9PiB7XG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgcGFyYW1ldGVycykge1xuICAgICAgaWYgKG93bmVkUHJpbnRSZWNlaXZlck5hbWVzLmhhcyhwYXJhbWV0ZXIubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gcGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfScgY2FwdHVyZXMgYmFja2VuZCBzY2FmZm9sZGluZ2AsIHBhcmFtZXRlci5sb2NhdGlvbilcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYWxsU3RhdGVtZW50cyhib2R5KSkge1xuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIG93bmVkUHJpbnRSZWNlaXZlck5hbWVzLmhhcyhzdGF0ZW1lbnQubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gbG9jYWwgJyR7c3RhdGVtZW50Lm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCwgc3RhdGVtZW50LmxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiICYmIG93bmVkUHJpbnRSZWNlaXZlck5hbWVzLmhhcyhzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLm5hbWUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7b3duZXJ9IGl0ZXJhdGlvbiBiaW5kaW5nICcke3N0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLFxuICAgICAgICAgIHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubG9jYXRpb24pXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBiaW5kaW5nIG9mIFtzdGF0ZW1lbnQua2V5QmluZGluZywgc3RhdGVtZW50LnZhbHVlQmluZGluZ10pIHtcbiAgICAgICAgICBpZiAob3duZWRQcmludFJlY2VpdmVyTmFtZXMuaGFzKGJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7b3duZXJ9IGl0ZXJhdGlvbiBiaW5kaW5nICcke2JpbmRpbmcubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLCBiaW5kaW5nLmxvY2F0aW9uKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHN0YXRlbWVudC5oYW5kbGVycyA/PyBbXSkge1xuICAgICAgICAgIGlmIChvd25lZFByaW50UmVjZWl2ZXJOYW1lcy5oYXMoaGFuZGxlci5jYXRjaEJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7b3duZXJ9IGNhdGNoIGJpbmRpbmcgJyR7aGFuZGxlci5jYXRjaEJpbmRpbmcubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLFxuICAgICAgICAgICAgICBoYW5kbGVyLmNhdGNoQmluZGluZy5sb2NhdGlvbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBhbGxTdGF0ZW1lbnRzKG1vZHVsZS5lbnRyeVBvaW50LmJvZHkpKSB7XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIG93bmVkRW50cnlOYW1lcy5oYXMoc3RhdGVtZW50Lm5hbWUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBlbnRyeSBsb2NhbCAnJHtzdGF0ZW1lbnQubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLCBzdGF0ZW1lbnQubG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiAmJiBvd25lZEVudHJ5TmFtZXMuaGFzKHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGVudHJ5IGl0ZXJhdGlvbiBiaW5kaW5nICcke3N0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLFxuICAgICAgICBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLmxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgIGZvciAoY29uc3QgYmluZGluZyBvZiBbc3RhdGVtZW50LmtleUJpbmRpbmcsIHN0YXRlbWVudC52YWx1ZUJpbmRpbmddKSB7XG4gICAgICAgIGlmIChvd25lZEVudHJ5TmFtZXMuaGFzKGJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBlbnRyeSBpdGVyYXRpb24gYmluZGluZyAnJHtiaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCwgYmluZGluZy5sb2NhdGlvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHN0YXRlbWVudC5oYW5kbGVycyA/PyBbXSkge1xuICAgICAgICBpZiAob3duZWRFbnRyeU5hbWVzLmhhcyhoYW5kbGVyLmNhdGNoQmluZGluZy5uYW1lKSkge1xuICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGVudHJ5IGNhdGNoIGJpbmRpbmcgJyR7aGFuZGxlci5jYXRjaEJpbmRpbmcubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLFxuICAgICAgICAgICAgaGFuZGxlci5jYXRjaEJpbmRpbmcubG9jYXRpb24pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBkZWNsYXJhdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCkgOiBkZWNsYXJhdGlvbi5uYW1lXG5cbiAgICBpZiAob3duZWRDYWxsYWJsZU5hbWVzLmhhcyh0YXJnZXROYW1lKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZnVuY3Rpb24gJyR7ZGVjbGFyYXRpb24ubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLCBkZWNsYXJhdGlvbk5hbWVMb2NhdGlvbihkZWNsYXJhdGlvbikpXG4gICAgfVxuICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIikge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZW1pdHRlZEphdmFGdW5jdGlvblNpZ25hdHVyZShkZWNsYXJhdGlvbilcblxuICAgICAgaWYgKHNpZ25hdHVyZSAmJiBqYXZhT2JqZWN0SW5zdGFuY2VNZXRob2RTaWduYXR1cmVzLmhhcyhzaWduYXR1cmUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBgZnVuY3Rpb24gJyR7c2lnbmF0dXJlfScgY29uZmxpY3RzIHdpdGggYW4gaW5oZXJpdGVkIGphdmEubGFuZy5PYmplY3QgaW5zdGFuY2UgbWV0aG9kYCxcbiAgICAgICAgICBkZWNsYXJhdGlvbk5hbWVMb2NhdGlvbihkZWNsYXJhdGlvbilcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0ZUNhbGxhYmxlQmluZGluZ3MoZGVjbGFyYXRpb24ucGFyYW1ldGVycywgZGVjbGFyYXRpb24uYm9keSwgXCJmdW5jdGlvblwiKVxuICB9XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmNsYXNzZXMgPz8gW10pIHtcbiAgICB2YWxpZGF0ZUNhbGxhYmxlQmluZGluZ3MoZGVjbGFyYXRpb24uY29uc3RydWN0b3IucGFyYW1ldGVycywgZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSwgXCJjb25zdHJ1Y3RvclwiKVxuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGRlY2xhcmF0aW9uLm1ldGhvZHMpIHZhbGlkYXRlQ2FsbGFibGVCaW5kaW5ncyhtZXRob2QucGFyYW1ldGVycywgbWV0aG9kLmJvZHksIFwibWV0aG9kXCIpXG4gIH1cbiAgaWYgKGxhbmd1YWdlID09IFwiamF2YVwiKSB2YWxpZGF0ZUphdmFVdGlsRmFjdG9yeU5hbWVzKG1vZHVsZSlcbn1cblxuLyoqXG4gKiBSZWplY3RzIEphdmFTY3JpcHQtZmFtaWx5IGxleGljYWwgYmluZGluZ3MgdGhhdCBjYW4gY2FwdHVyZSBlbWl0dGVkIGJhcmUgcmVjb3JkIGNvbnN0cnVjdG9yIG5hbWVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkLXNoYXBlIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlY29yZENvbnN0cnVjdG9yTmFtZXMobW9kdWxlLCBsYW5ndWFnZSkge1xuICBpZiAobGFuZ3VhZ2UgIT0gXCJqYXZhc2NyaXB0XCIgJiYgbGFuZ3VhZ2UgIT0gXCJ0eXBlc2NyaXB0XCIpIHJldHVyblxuICBjb25zdCByZWNvcmROYW1lcyA9IG5ldyBTZXQoW1xuICAgIC4uLihtb2R1bGUucmVjb3JkcyA/PyBbXSkubWFwKChyZWNvcmQpID0+IHJlY29yZC5uYW1lKSxcbiAgICAuLi4obW9kdWxlLmNsYXNzZXMgPz8gW10pLm1hcCgoZGVjbGFyYXRpb24pID0+IGRlY2xhcmF0aW9uLm5hbWUpLFxuICAgIC4uLihtb2R1bGUuZXJyb3JzID8/IFtdKS5tYXAoKGVycm9yKSA9PiBlcnJvci5uYW1lKVxuICBdKVxuXG4gIC8qKlxuICAgKiBDaGVja3MgZGVjbGFyYXRpb25zIG5lc3RlZCBiZW5lYXRoIG9uZSBvd25pbmcgYmxvY2suXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIC0gQmxvY2sgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHtcImVudHJ5XCIgfCBcImZ1bmN0aW9uXCIgfCBcImNvbnN0cnVjdG9yXCIgfCBcIm1ldGhvZFwifSBvd25lciAtIE93bmluZyBzY29wZSBraW5kLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlQmxvY2tOYW1lcyA9IChibG9jaywgb3duZXIpID0+IHtcbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBhbGxTdGF0ZW1lbnRzKGJsb2NrKSkge1xuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIHJlY29yZE5hbWVzLmhhcyhzdGF0ZW1lbnQubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gbG9jYWwgJyR7c3RhdGVtZW50Lm5hbWV9JyBjYXB0dXJlcyByZWNvcmQgY29uc3RydWN0b3JgLCBiaW5kaW5nTmFtZUxvY2F0aW9uKHN0YXRlbWVudCkpXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIgJiYgcmVjb3JkTmFtZXMuaGFzKHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGAke293bmVyfSBpdGVyYXRpb24gYmluZGluZyAnJHtzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyByZWNvcmQgY29uc3RydWN0b3JgLFxuICAgICAgICAgIGJpbmRpbmdOYW1lTG9jYXRpb24oc3RhdGVtZW50LnZhbHVlQmluZGluZylcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgYmluZGluZyBvZiBbc3RhdGVtZW50LmtleUJpbmRpbmcsIHN0YXRlbWVudC52YWx1ZUJpbmRpbmddKSB7XG4gICAgICAgICAgaWYgKHJlY29yZE5hbWVzLmhhcyhiaW5kaW5nLm5hbWUpKSB7XG4gICAgICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGAke293bmVyfSBpdGVyYXRpb24gYmluZGluZyAnJHtiaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyByZWNvcmQgY29uc3RydWN0b3JgLFxuICAgICAgICAgICAgICBiaW5kaW5nTmFtZUxvY2F0aW9uKGJpbmRpbmcpKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgICAgY29uc3QgY2FwdHVyZWQgPSAoc3RhdGVtZW50LmhhbmRsZXJzID8/IFtdKS5maW5kKChoYW5kbGVyKSA9PiByZWNvcmROYW1lcy5oYXMoaGFuZGxlci5jYXRjaEJpbmRpbmcubmFtZSkpXG5cbiAgICAgICAgaWYgKGNhcHR1cmVkKSB7XG4gICAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gY2F0Y2ggYmluZGluZyAnJHtjYXB0dXJlZC5jYXRjaEJpbmRpbmcubmFtZX0nIGNhcHR1cmVzIG5vbWluYWwgY29uc3RydWN0b3JgLFxuICAgICAgICAgICAgYmluZGluZ05hbWVMb2NhdGlvbihjYXB0dXJlZC5jYXRjaEJpbmRpbmcpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVCbG9ja05hbWVzKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIFwiZW50cnlcIilcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgZGVjbGFyYXRpb24ucGFyYW1ldGVycykge1xuICAgICAgaWYgKHJlY29yZE5hbWVzLmhhcyhwYXJhbWV0ZXIubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZnVuY3Rpb24gcGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfScgY2FwdHVyZXMgcmVjb3JkIGNvbnN0cnVjdG9yYCwgYmluZGluZ05hbWVMb2NhdGlvbihwYXJhbWV0ZXIpKVxuICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoZGVjbGFyYXRpb24uYm9keSwgXCJmdW5jdGlvblwiKVxuICB9XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmNsYXNzZXMgPz8gW10pIHtcbiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzKSB7XG4gICAgICBpZiAocmVjb3JkTmFtZXMuaGFzKHBhcmFtZXRlci5uYW1lKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgJyR7cGFyYW1ldGVyLm5hbWV9JyBjYXB0dXJlcyBub21pbmFsIGNvbnN0cnVjdG9yYCxcbiAgICAgICAgICBiaW5kaW5nTmFtZUxvY2F0aW9uKHBhcmFtZXRlcikpXG4gICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5ib2R5LCBcImNvbnN0cnVjdG9yXCIpXG4gICAgZm9yIChjb25zdCBtZXRob2Qgb2YgZGVjbGFyYXRpb24ubWV0aG9kcykge1xuICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgbWV0aG9kLnBhcmFtZXRlcnMpIHtcbiAgICAgICAgaWYgKHJlY29yZE5hbWVzLmhhcyhwYXJhbWV0ZXIubmFtZSkpIHtcbiAgICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBtZXRob2QgcGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfScgY2FwdHVyZXMgbm9taW5hbCBjb25zdHJ1Y3RvcmAsXG4gICAgICAgICAgICBiaW5kaW5nTmFtZUxvY2F0aW9uKHBhcmFtZXRlcikpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhtZXRob2QuYm9keSwgXCJtZXRob2RcIilcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZWplY3RzIGxleGljYWwgYmluZGluZ3MgdGhhdCB3b3VsZCBjYXB0dXJlIEphdmEncyBwYWNrYWdlIHF1YWxpZmllciBpbiBlbWl0dGVkIGNvbGxlY3Rpb24gZmFjdG9yaWVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUphdmFVdGlsRmFjdG9yeU5hbWVzKG1vZHVsZSkge1xuICAvKipcbiAgICogV2Fsa3Mgb25lIGxleGljYWwgYmxvY2sgd2hpbGUgcmV0YWluaW5nIG9ubHkgYSBjdXJyZW50bHkgdmlzaWJsZSBjYXB0dXJlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIEJsb2NrIHRvIGluc3BlY3QgaW4gc2VtYW50aWMgb3JkZXIuXG4gICAqIEBwYXJhbSB7e2RldGFpbDogc3RyaW5nLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IHwgdW5kZWZpbmVkfSBpbmhlcml0ZWQgLSBWaXNpYmxlIGNhcHR1cmUuXG4gICAqIEBwYXJhbSB7XCJlbnRyeVwiIHwgXCJmdW5jdGlvblwiIHwgXCJjb25zdHJ1Y3RvclwiIHwgXCJtZXRob2RcIn0gb3duZXIgLSBPd25pbmcgc2NvcGUga2luZC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjb25zdCB2YWxpZGF0ZUJsb2NrTmFtZXMgPSAoYmxvY2ssIGluaGVyaXRlZCwgb3duZXIpID0+IHtcbiAgICBsZXQgY2FwdHVyZSA9IGluaGVyaXRlZFxuXG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYmxvY2suc3RhdGVtZW50cykge1xuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIHN0YXRlbWVudC5uYW1lID09IFwiamF2YVwiKSB7XG4gICAgICAgIGNhcHR1cmUgPSB7XG4gICAgICAgICAgZGV0YWlsOiBgJHtvd25lcn0gbG9jYWwgJ2phdmEnIGNhcHR1cmVzIGphdmEudXRpbCBmYWN0b3J5IHN5bnRheGAsXG4gICAgICAgICAgbG9jYXRpb246IHN0YXRlbWVudC5sb2NhdGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBleHByZXNzaW9uID0gc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiID8gc3RhdGVtZW50LmNvbmRpdGlvbiA6XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5jb25kaXRpb24gOlxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5saXN0IDpcbiAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5tYXAgOlxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiA/IHN0YXRlbWVudC5pbml0aWFsaXplciA6XG4gICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOlxuICAgICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJSYWlzZVN0YXRlbWVudFwiID8gc3RhdGVtZW50LmVycm9yLm1lc3NhZ2UgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKGNhcHR1cmUgJiYgZXhwcmVzc2lvbiAmJiAoZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLCBcIkxpc3RMaXRlcmFsXCIpIHx8XG4gICAgICAgIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbiwgXCJNYXBMaXRlcmFsXCIpIHx8IGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbiwgXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKSB8fFxuICAgICAgICBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24sIFwiT3B0aW9uYWxOb25lXCIpIHx8XG4gICAgICAgIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbiwgXCJPcHRpb25hbFNvbWVcIikpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShcImphdmFcIiwgY2FwdHVyZS5kZXRhaWwsIGNhcHR1cmUubG9jYXRpb24pXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhzdGF0ZW1lbnQuY29uc2VxdWVudCwgY2FwdHVyZSwgb3duZXIpXG4gICAgICAgIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSB2YWxpZGF0ZUJsb2NrTmFtZXMoc3RhdGVtZW50LmFsdGVybmF0ZSwgY2FwdHVyZSwgb3duZXIpXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSB2YWxpZGF0ZUJsb2NrTmFtZXMoc3RhdGVtZW50LmJvZHksIGNhcHR1cmUsIG93bmVyKVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiKSB7XG4gICAgICAgIGNvbnN0IGxvb3BDYXB0dXJlID0gc3RhdGVtZW50LnZhbHVlQmluZGluZy5uYW1lID09IFwiamF2YVwiID8ge1xuICAgICAgICAgIGRldGFpbDogYCR7b3duZXJ9IGl0ZXJhdGlvbiBiaW5kaW5nICdqYXZhJyBjYXB0dXJlcyBqYXZhLnV0aWwgZmFjdG9yeSBzeW50YXhgLFxuICAgICAgICAgIGxvY2F0aW9uOiBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLmxvY2F0aW9uXG4gICAgICAgIH0gOiBjYXB0dXJlXG5cbiAgICAgICAgdmFsaWRhdGVCbG9ja05hbWVzKHN0YXRlbWVudC5ib2R5LCBsb29wQ2FwdHVyZSwgb3duZXIpXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgICAgY29uc3QgY2FwdHVyZWRCaW5kaW5nID0gW3N0YXRlbWVudC5rZXlCaW5kaW5nLCBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nXS5maW5kKCh7bmFtZX0pID0+IG5hbWUgPT0gXCJqYXZhXCIpXG4gICAgICAgIGNvbnN0IGxvb3BDYXB0dXJlID0gY2FwdHVyZWRCaW5kaW5nID8ge1xuICAgICAgICAgIGRldGFpbDogYCR7b3duZXJ9IGl0ZXJhdGlvbiBiaW5kaW5nICdqYXZhJyBjYXB0dXJlcyBqYXZhLnV0aWwgZmFjdG9yeSBzeW50YXhgLFxuICAgICAgICAgIGxvY2F0aW9uOiBjYXB0dXJlZEJpbmRpbmcubG9jYXRpb25cbiAgICAgICAgfSA6IGNhcHR1cmVcblxuICAgICAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoc3RhdGVtZW50LmJvZHksIGxvb3BDYXB0dXJlLCBvd25lcilcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhzdGF0ZW1lbnQuYm9keSwgY2FwdHVyZSwgb3duZXIpXG4gICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBzdGF0ZW1lbnQuaGFuZGxlcnMgPz8gW10pIHtcbiAgICAgICAgICBjb25zdCBjYXRjaENhcHR1cmUgPSBoYW5kbGVyLmNhdGNoQmluZGluZy5uYW1lID09IFwiamF2YVwiID8ge1xuICAgICAgICAgICAgZGV0YWlsOiBgJHtvd25lcn0gY2F0Y2ggYmluZGluZyAnamF2YScgY2FwdHVyZXMgamF2YS51dGlsIGZhY3Rvcnkgc3ludGF4YCxcbiAgICAgICAgICAgIGxvY2F0aW9uOiBoYW5kbGVyLmNhdGNoQmluZGluZy5sb2NhdGlvblxuICAgICAgICAgIH0gOiBjYXB0dXJlXG5cbiAgICAgICAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoaGFuZGxlci5jYXRjaEJvZHksIGNhdGNoQ2FwdHVyZSwgb3duZXIpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlbWVudC5maW5hbGx5Qm9keSkgdmFsaWRhdGVCbG9ja05hbWVzKHN0YXRlbWVudC5maW5hbGx5Qm9keSwgY2FwdHVyZSwgb3duZXIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVCbG9ja05hbWVzKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIHVuZGVmaW5lZCwgXCJlbnRyeVwiKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmZpbmQoKHtuYW1lfSkgPT4gbmFtZSA9PSBcImphdmFcIilcbiAgICBjb25zdCBjYXB0dXJlID0gcGFyYW1ldGVyID8ge1xuICAgICAgZGV0YWlsOiBcImZ1bmN0aW9uIHBhcmFtZXRlciAnamF2YScgY2FwdHVyZXMgamF2YS51dGlsIGZhY3Rvcnkgc3ludGF4XCIsXG4gICAgICBsb2NhdGlvbjogcGFyYW1ldGVyLmxvY2F0aW9uXG4gICAgfSA6IHVuZGVmaW5lZFxuXG4gICAgdmFsaWRhdGVCbG9ja05hbWVzKGRlY2xhcmF0aW9uLmJvZHksIGNhcHR1cmUsIFwiZnVuY3Rpb25cIilcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5jbGFzc2VzID8/IFtdKSB7XG4gICAgY29uc3QgY2FsbGFibGVzID0gW1xuICAgICAge2JvZHk6IGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmJvZHksIG93bmVyOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJjb25zdHJ1Y3RvclwiKSwgcGFyYW1ldGVyczogZGVjbGFyYXRpb24uY29uc3RydWN0b3IucGFyYW1ldGVyc30sXG4gICAgICAuLi5kZWNsYXJhdGlvbi5tZXRob2RzLm1hcCgobWV0aG9kKSA9PiAoe2JvZHk6IG1ldGhvZC5ib2R5LCBvd25lcjogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwibWV0aG9kXCIpLCBwYXJhbWV0ZXJzOiBtZXRob2QucGFyYW1ldGVyc30pKVxuICAgIF1cblxuICAgIGZvciAoY29uc3QgY2FsbGFibGUgb2YgY2FsbGFibGVzKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSBjYWxsYWJsZS5wYXJhbWV0ZXJzLmZpbmQoKHtuYW1lfSkgPT4gbmFtZSA9PSBcImphdmFcIilcbiAgICAgIGNvbnN0IGNhcHR1cmUgPSBwYXJhbWV0ZXIgPyB7XG4gICAgICAgIGRldGFpbDogYCR7Y2FsbGFibGUub3duZXJ9IHBhcmFtZXRlciAnamF2YScgY2FwdHVyZXMgamF2YS51dGlsIGZhY3Rvcnkgc3ludGF4YCxcbiAgICAgICAgbG9jYXRpb246IHBhcmFtZXRlci5sb2NhdGlvblxuICAgICAgfSA6IHVuZGVmaW5lZFxuXG4gICAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoY2FsbGFibGUuYm9keSwgY2FwdHVyZSwgY2FsbGFibGUub3duZXIpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIGEgbW9kdWxlIGNvbnRhaW5zIGFuIGV4cHJlc3Npb24ga2luZCB0aGF0IHJlcXVpcmVzIHRhcmdldCBydW50aW1lIHNjYWZmb2xkaW5nLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkLXNoYXBlIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbltcImtpbmRcIl19IGtpbmQgLSBTb3VnaHQgZXhwcmVzc2lvbiBraW5kLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGtpbmQgb2NjdXJzLlxuICovXG5mdW5jdGlvbiBtb2R1bGVDb250YWluc0V4cHJlc3Npb25LaW5kKG1vZHVsZSwga2luZCkge1xuICBjb25zdCBjbGFzc0Jsb2NrcyA9IChtb2R1bGUuY2xhc3NlcyA/PyBbXSkuZmxhdE1hcCgoZGVjbGFyYXRpb24pID0+IFtcbiAgICBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5ib2R5LCAuLi5kZWNsYXJhdGlvbi5tZXRob2RzLm1hcCgobWV0aG9kKSA9PiBtZXRob2QuYm9keSlcbiAgXSlcblxuICByZXR1cm4gW21vZHVsZS5lbnRyeVBvaW50LmJvZHksIC4uLm1vZHVsZS5mdW5jdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gZGVjbGFyYXRpb24uYm9keSksIC4uLmNsYXNzQmxvY2tzXS5zb21lKChibG9jaykgPT5cbiAgICBhbGxTdGF0ZW1lbnRzKGJsb2NrKS5zb21lKChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuY29uZGl0aW9uIDpcbiAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiID8gc3RhdGVtZW50LmNvbmRpdGlvbiA6XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiID8gc3RhdGVtZW50Lmxpc3QgOlxuICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiID8gc3RhdGVtZW50Lm1hcCA6XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiID8gc3RhdGVtZW50LmluaXRpYWxpemVyIDpcbiAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5leHByZXNzaW9uIDpcbiAgICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5leHByZXNzaW9uIDpcbiAgICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5leHByZXNzaW9uIDpcbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlJhaXNlU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXJyb3IubWVzc2FnZSA6IHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gZXhwcmVzc2lvbiA/IGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbiwga2luZCkgOiBmYWxzZVxuICAgIH0pKVxufVxuXG4vKipcbiAqIFNlYXJjaGVzIG9uZSB2YWxpZGF0ZWQgZXhwcmVzc2lvbiB0cmVlIGZvciBhIHNlbWFudGljIGtpbmQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBFeHByZXNzaW9uIHJvb3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb25bXCJraW5kXCJdfSBraW5kIC0gU291Z2h0IGtpbmQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUga2luZCBvY2N1cnMuXG4gKi9cbmZ1bmN0aW9uIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbiwga2luZCkge1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IGtpbmQpIHJldHVybiB0cnVlXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5vcGVyYW5kLCBraW5kKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5sZWZ0LCBraW5kKSB8fCBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24ucmlnaHQsIGtpbmQpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNvbmRpdGlvbmFsRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5jb25kaXRpb24sIGtpbmQpIHx8XG4gICAgICBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24uY29uc2VxdWVudCwga2luZCkgfHxcbiAgICAgIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5hbHRlcm5hdGUsIGtpbmQpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHJldHVybiBleHByZXNzaW9uLmFyZ3VtZW50cy5zb21lKChhcmd1bWVudCkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChhcmd1bWVudCwga2luZCkpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5yZWNlaXZlciwga2luZCkgfHxcbiAgICAgIGV4cHJlc3Npb24uYXJndW1lbnRzLnNvbWUoKGFyZ3VtZW50KSA9PiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGFyZ3VtZW50LCBraW5kKSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiUmVjb3JkQ29uc3RydWN0aW9uXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiUmVmZXJlbmNlQ29uc3RydWN0aW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5hcmd1bWVudHMuc29tZSgoYXJndW1lbnQpID0+IGV4cHJlc3Npb25Db250YWluc0tpbmQoYXJndW1lbnQsIGtpbmQpKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNZW1iZXJSZWFkXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiUHJpdmF0ZUZpZWxkUmVhZFwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5yZWNlaXZlciwga2luZClcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdExpdGVyYWxcIikgcmV0dXJuIGV4cHJlc3Npb24uZWxlbWVudHMuc29tZSgoZWxlbWVudCkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChlbGVtZW50LCBraW5kKSlcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExpdGVyYWxcIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24uZW50cmllcy5zb21lKChlbnRyeSkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChlbnRyeS5rZXksIGtpbmQpIHx8IGV4cHJlc3Npb25Db250YWluc0tpbmQoZW50cnkudmFsdWUsIGtpbmQpKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJMaXN0SW5kZXhFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLmNvbGxlY3Rpb24sIGtpbmQpIHx8IGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5pbmRleCwga2luZClcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBraW5kKSB8fCBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24ua2V5LCBraW5kKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIikgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBraW5kKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxTb21lXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24udmFsdWUsIGtpbmQpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbElzUHJlc2VudFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsVW53cmFwXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLm9wZXJhbmQsIGtpbmQpXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcGFyc2VyLWJhY2tlZCBmdW5jdGlvbi1uYW1lIGxvY2F0aW9uIHdoZW4gb25lIHN1cnZpdmVkIHNlbWFudGljIGFkYXB0YXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gU2VtYW50aWMgZnVuY3Rpb24gZGVjbGFyYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEV4YWN0IG5hbWUgb3IgZGVjbGFyYXRpb24gbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGRlY2xhcmF0aW9uTmFtZUxvY2F0aW9uKGRlY2xhcmF0aW9uKSB7XG4gIHJldHVybiBkZWNsYXJhdGlvbi5zb3VyY2VQcm92ZW5hbmNlPy5yYW5nZXMubmFtZSA/PyBkZWNsYXJhdGlvbi5sb2NhdGlvblxufVxuXG4vKipcbiAqIFJldHVybnMgYSBwYXJzZXItYmFja2VkIGJpbmRpbmctbmFtZSBsb2NhdGlvbiB3aGVuIG9uZSBzdXJ2aXZlZCBzZW1hbnRpYyBhZGFwdGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QYXJhbWV0ZXIgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVmFsdWVCaW5kaW5nIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2F0Y2hCaW5kaW5nfSBiaW5kaW5nIC0gU2VtYW50aWMgYmluZGluZy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gRXhhY3QgbmFtZSBvciBiaW5kaW5nIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBiaW5kaW5nTmFtZUxvY2F0aW9uKGJpbmRpbmcpIHtcbiAgcmV0dXJuIGJpbmRpbmcuc291cmNlUHJvdmVuYW5jZT8ucmFuZ2VzLm5hbWUgPz8gYmluZGluZy5sb2NhdGlvblxufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgSmF2YSBtZXRob2Qgc2lnbmF0dXJlIHVzZWQgZm9yIGluaGVyaXRlZC1pbnN0YW5jZSBjb2xsaXNpb24gY2hlY2tzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIENhbmRpZGF0ZSBKYXZhIHRhcmdldCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IEVtaXR0ZWQgbmFtZSBhbmQgcGFyYW1ldGVyIHR5cGVzIHdoZW4gYWxsIHR5cGVzIGFyZSBzdXBwb3J0ZWQuXG4gKi9cbmZ1bmN0aW9uIGVtaXR0ZWRKYXZhRnVuY3Rpb25TaWduYXR1cmUoZGVjbGFyYXRpb24pIHtcbiAgY29uc3QgcGFyYW1ldGVyVHlwZXMgPSBbXVxuXG4gIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCB0eXBlID0gcGFyYW1ldGVyLnR5cGVcblxuICAgIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodHlwZSkpIHJldHVybiB1bmRlZmluZWRcbiAgICBjb25zdCBlbWl0dGVkID0gdHlwZS5raW5kID09IFwiTGlzdFR5cGVcIiA/IFwiamF2YS51dGlsLkxpc3RcIiA6IHR5cGUua2luZCA9PSBcIk1hcFR5cGVcIiA/IFwiamF2YS51dGlsLk1hcFwiIDpcbiAgICAgIHR5cGUua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIgPyBcImphdmEudXRpbC5TZXF1ZW5jZWRNYXBcIiA6XG4gICAgICB0eXBlLmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIgPyBlbWl0U2NhbGFyVHlwZShcImphdmFcIiwgdHlwZSkgOiB1bmRlZmluZWRcblxuICAgIGlmICghZW1pdHRlZCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHBhcmFtZXRlclR5cGVzLnB1c2goZW1pdHRlZClcbiAgfVxuXG4gIHJldHVybiBgJHtkZWNsYXJhdGlvbi5uYW1lfSgke3BhcmFtZXRlclR5cGVzLmpvaW4oXCIsXCIpfSlgXG59XG5cbi8qKlxuICogUmV0dXJucyBldmVyeSBzdGF0ZW1lbnQgbmVzdGVkIGJlbmVhdGggYSBibG9jayBpbiBzZW1hbnRpYyBvcmRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIC0gU2VtYW50aWMgYmxvY2suXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50W119IFN0YXRlbWVudHMgaW5jbHVkaW5nIG5lc3RlZCBicmFuY2hlcy5cbiAqL1xuZnVuY3Rpb24gYWxsU3RhdGVtZW50cyhibG9jaykge1xuICByZXR1cm4gYmxvY2suc3RhdGVtZW50cy5mbGF0TWFwKChzdGF0ZW1lbnQpID0+IHtcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gW3N0YXRlbWVudCwgLi4uYWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQuY29uc2VxdWVudCksIC4uLihzdGF0ZW1lbnQuYWx0ZXJuYXRlID8gYWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQuYWx0ZXJuYXRlKSA6IFtdKV1cbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gW3N0YXRlbWVudCwgLi4uYWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQuYm9keSldXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHJldHVybiBbc3RhdGVtZW50LCAuLi5hbGxTdGF0ZW1lbnRzKHN0YXRlbWVudC5ib2R5KV1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIFtzdGF0ZW1lbnQsIC4uLmFsbFN0YXRlbWVudHMoc3RhdGVtZW50LmJvZHkpLFxuICAgICAgICAuLi4oc3RhdGVtZW50LmhhbmRsZXJzID8/IFtdKS5mbGF0TWFwKChoYW5kbGVyKSA9PiBhbGxTdGF0ZW1lbnRzKGhhbmRsZXIuY2F0Y2hCb2R5KSksXG4gICAgICAgIC4uLihzdGF0ZW1lbnQuZmluYWxseUJvZHkgPyBhbGxTdGF0ZW1lbnRzKHN0YXRlbWVudC5maW5hbGx5Qm9keSkgOiBbXSldXG4gICAgfVxuXG4gICAgcmV0dXJuIFtzdGF0ZW1lbnRdXG4gIH0pXG59XG5cbi8qKlxuICogSW5kZXhlcyBleGFjdCBsb29wIGlkZW50aXRpZXMgYmVmb3JlIHJlY3Vyc2l2ZSB0YXJnZXQgdmFsaWRhdGlvbiBzbyBjcm9zcy1mdW5jdGlvbiB0YXJnZXRzIGZhaWwgZGV0ZXJtaW5pc3RpY2FsbHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDYW5kaWRhdGUgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHJldHVybnMge01hcDxzdHJpbmcsIG9iamVjdD59IExvb3Agb3duZXIgYnkgbW9kdWxlLWxvY2FsIGlkZW50aXR5LlxuICovXG5mdW5jdGlvbiBjb2xsZWN0TG9vcE93bmVycyhtb2R1bGUsIGxhbmd1YWdlKSB7XG4gIGNvbnN0IG93bmVycyA9IG5ldyBNYXAoKVxuICBjb25zdCBjbGFzc093bmVycyA9IChtb2R1bGUuY2xhc3NlcyA/PyBbXSkuZmxhdE1hcCgoZGVjbGFyYXRpb24pID0+IFtkZWNsYXJhdGlvbi5jb25zdHJ1Y3RvciwgLi4uZGVjbGFyYXRpb24ubWV0aG9kc10pXG5cbiAgZm9yIChjb25zdCBvd25lciBvZiBbLi4uY2xhc3NPd25lcnMsIC4uLm1vZHVsZS5mdW5jdGlvbnMsIG1vZHVsZS5lbnRyeVBvaW50XSkge1xuICAgIGlmIChvd25lciAmJiB0eXBlb2Ygb3duZXIgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShvd25lcikpIHZpc2l0KFJlZmxlY3QuZ2V0KG93bmVyLCBcImJvZHlcIiksIG93bmVyKVxuICB9XG5cbiAgcmV0dXJuIG93bmVyc1xuXG4gIC8qKlxuICAgKiBWaXNpdHMgbG9vcCBjb250YWluZXJzIHdoaWxlIGJvdW5kaW5nIG1hbGZvcm1lZCBjeWNsZXMuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gYmxvY2sgLSBDYW5kaWRhdGUgYmxvY2suXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvd25lciAtIEVuY2xvc2luZyBmdW5jdGlvbiBvciBlbnRyeSBwb2ludC5cbiAgICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW2FjdGl2ZV0gLSBCbG9ja3Mgb24gdGhlIGFjdGl2ZSByZWN1cnNpdmUgcGF0aC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmdW5jdGlvbiB2aXNpdChibG9jaywgb3duZXIsIGFjdGl2ZSA9IG5ldyBTZXQoKSkge1xuICAgIGlmICghYmxvY2sgfHwgdHlwZW9mIGJsb2NrICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShibG9jaykgfHwgYWN0aXZlLmhhcyhibG9jaykpIHJldHVyblxuICAgIGNvbnN0IHN0YXRlbWVudHMgPSBSZWZsZWN0LmdldChibG9jaywgXCJzdGF0ZW1lbnRzXCIpXG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc3RhdGVtZW50cykpIHJldHVyblxuICAgIGNvbnN0IHBhdGggPSBuZXcgU2V0KGFjdGl2ZSlcblxuICAgIHBhdGguYWRkKGJsb2NrKVxuICAgIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICAgIGlmICghc3RhdGVtZW50IHx8IHR5cGVvZiBzdGF0ZW1lbnQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHN0YXRlbWVudCkpIGNvbnRpbnVlXG4gICAgICBjb25zdCBraW5kID0gU3RyaW5nKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJraW5kXCIpKVxuXG4gICAgICBpZiAoW1wiRm9yRWFjaFN0YXRlbWVudFwiLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiwgXCJXaGlsZVN0YXRlbWVudFwiXS5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICBjb25zdCBpZCA9IFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJpZFwiKVxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwibG9jYXRpb25cIiksIFJlZmxlY3QuZ2V0KGJsb2NrLCBcImxvY2F0aW9uXCIpKVxuXG4gICAgICAgIGlmICh0eXBlb2YgaWQgIT0gXCJzdHJpbmdcIiB8fCAhL15sb29wOlswLTldKyQvdS50ZXN0KGlkKSkgY29udGludWVcbiAgICAgICAgaWYgKG93bmVycy5oYXMoaWQpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZHVwbGljYXRlIG9yIGludmFsaWQgbG9vcCBpZGVudGl0eVwiLCBsb2NhdGlvbilcbiAgICAgICAgb3duZXJzLnNldChpZCwgb3duZXIpXG4gICAgICAgIHZpc2l0KFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBvd25lciwgcGF0aClcbiAgICAgIH0gZWxzZSBpZiAoa2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICAgICAgdmlzaXQoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImNvbnNlcXVlbnRcIiksIG93bmVyLCBwYXRoKVxuICAgICAgICB2aXNpdChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYWx0ZXJuYXRlXCIpLCBvd25lciwgcGF0aClcbiAgICAgIH0gZWxzZSBpZiAoa2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZpc2l0KFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBvd25lciwgcGF0aClcbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJoYW5kbGVyc1wiKSA/PyBbXSkgdmlzaXQoUmVmbGVjdC5nZXQoaGFuZGxlciwgXCJjYXRjaEJvZHlcIiksIG93bmVyLCBwYXRoKVxuICAgICAgICB2aXNpdChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiZmluYWxseUJvZHlcIiksIG93bmVyLCBwYXRoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBvbmUgY29tcGxldGUgc2VtYW50aWMgYmxvY2sgYmVmb3JlIGVtaXNzaW9uLlxuICogQHBhcmFtIHt1bmtub3dufSBibG9jayAtIENhbmRpZGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2Ugb3IgYmluYXJ5IHRhcmdldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBFbmNsb3NpbmcgbG9jYXRpb24uXG4gKiBAcGFyYW0ge3thY3RpdmU6IChpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaE1hcFN0YXRlbWVudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLldoaWxlU3RhdGVtZW50KVtdLCBvd25lcjogb2JqZWN0LCBvd25lcnM6IE1hcDxzdHJpbmcsIG9iamVjdD59fSBsb29wQ29udGV4dCAtIEFjdGl2ZSBsb29wcyBhbmQgdGhlaXIgbGV4aWNhbCBvd25lci5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFthY3RpdmVQYXRoXSAtIEJsb2NrcyBvbiB0aGUgYWN0aXZlIHJlY3Vyc2l2ZSBwYXRoLlxuICogQHBhcmFtIHtTZXQ8c3RyaW5nPn0gW2V4dGVybmFsRGVjbGFyYXRpb25JZHNdIC0gUmVzb2x2ZWQgZGVjbGFyYXRpb25zIHdob3NlIHNvdXJjZSBzcGVsbGluZyBpcyB0YXJnZXQtaW5kZXBlbmRlbnQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCbG9jayhibG9jaywgbGFuZ3VhZ2UsIG93bmVyTG9jYXRpb24sIGxvb3BDb250ZXh0LCBhY3RpdmVQYXRoID0gbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzID0gbmV3IFNldCgpKSB7XG4gIGlmICghYmxvY2sgfHwgdHlwZW9mIGJsb2NrICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShibG9jaykpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBibG9ja1wiLCBvd25lckxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgY2FuZGlkYXRlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKGJsb2NrKVxuICBjb25zdCBsb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihjYW5kaWRhdGUubG9jYXRpb24sIG93bmVyTG9jYXRpb24pXG5cbiAgaWYgKGFjdGl2ZVBhdGguaGFzKGNhbmRpZGF0ZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjeWNsaWMgYmxvY2tcIiwgbG9jYXRpb24pXG4gIGlmIChjYW5kaWRhdGUua2luZCAhPSBcIkJsb2NrXCIpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGJsb2NrICR7U3RyaW5nKFJlZmxlY3QuZ2V0KGJsb2NrLCBcImtpbmRcIikpfWAsIGxvY2F0aW9uKVxuICBpZiAoIUFycmF5LmlzQXJyYXkoY2FuZGlkYXRlLnN0YXRlbWVudHMpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGJsb2NrIHN0YXRlbWVudHNcIiwgbG9jYXRpb24pXG4gIGNvbnN0IGJsb2NrUGF0aCA9IG5ldyBTZXQoYWN0aXZlUGF0aClcblxuICBibG9ja1BhdGguYWRkKGNhbmRpZGF0ZSlcbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgY2FuZGlkYXRlLnN0YXRlbWVudHMpIHtcbiAgICB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZW1lbnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgbG9vcENvbnRleHQsIGJsb2NrUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBvbmUgc3VwcG9ydGVkIHN0YXRlbWVudCByZWN1cnNpdmVseS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gc3RhdGVtZW50IC0gQ2FuZGlkYXRlIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2Ugb3IgYmluYXJ5IHRhcmdldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBFbmNsb3NpbmcgYm9keSBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7e2FjdGl2ZTogKGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZvckVhY2hTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoTWFwU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuV2hpbGVTdGF0ZW1lbnQpW10sIG93bmVyOiBvYmplY3QsIG93bmVyczogTWFwPHN0cmluZywgb2JqZWN0Pn19IGxvb3BDb250ZXh0IC0gQWN0aXZlIGxvb3BzIGFuZCB0aGVpciBsZXhpY2FsIG93bmVyLlxuICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW2FjdGl2ZVBhdGhdIC0gQWN0aXZlIGJsb2NrIGNvbnRhaW5lcnMuXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSBbZXh0ZXJuYWxEZWNsYXJhdGlvbklkc10gLSBSZXNvbHZlZCBkZWNsYXJhdGlvbnMgd2hvc2Ugc291cmNlIHNwZWxsaW5nIGlzIHRhcmdldC1pbmRlcGVuZGVudC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZW1lbnQsIGxhbmd1YWdlLCBvd25lckxvY2F0aW9uLCBsb29wQ29udGV4dCwgYWN0aXZlUGF0aCA9IG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcyA9IG5ldyBTZXQoKSkge1xuICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgc3RhdGVtZW50XCIsIG93bmVyTG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBraW5kID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIilcbiAgY29uc3Qgb3duTG9jYXRpb24gPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwibG9jYXRpb25cIilcbiAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24ob3duTG9jYXRpb24sIG93bmVyTG9jYXRpb24pXG5cbiAgaWYgKHR5cGVvZiBraW5kICE9IFwic3RyaW5nXCIpIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHN0YXRlbWVudFwiLCBsb2NhdGlvbilcbiAgaWYgKGtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbn0gKi8gKHN0YXRlbWVudClcblxuICAgIGlmICh0eXBlb2YgZGVjbGFyYXRpb24ubXV0YWJsZSAhPSBcImJvb2xlYW5cIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImxvY2FsIGRlY2xhcmF0aW9uIHdpdGggaW52YWxpZCBtdXRhYmlsaXR5XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCBkZWNsYXJhdGlvbi5uYW1lLCBcImxvY2FsXCIsIGxvY2F0aW9uKVxuICAgIGlmIChkZWNsYXJhdGlvbi50eXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIiAmJiBkZWNsYXJhdGlvbi5pbml0aWFsaXplcj8ua2luZCAhPSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJvcmRlcmVkLW1hcCBsb2NhbCByZXF1aXJlcyBhIGRpcmVjdCBsaXRlcmFsIGluaXRpYWxpemVyXCIsXG4gICAgICAgIGRpYWdub3N0aWNMb2NhdGlvbihkZWNsYXJhdGlvbi5pbml0aWFsaXplcj8ubG9jYXRpb24sIGxvY2F0aW9uKSlcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0aW9uLmluaXRpYWxpemVyPy5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIiAmJiBkZWNsYXJhdGlvbi5tdXRhYmxlICE9PSBmYWxzZSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm9yZGVyZWQtbWFwIGxvY2FsIG11c3QgYmUgaW1tdXRhYmxlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oZGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcyxcbiAgICAgIGxhbmd1YWdlID09IFwiamF2YVwiICYmIGRlY2xhcmF0aW9uLmluaXRpYWxpemVyPy5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIilcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkFzc2lnbm1lbnRTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG5cbiAgICB2YWxpZGF0ZUFzc2lnbm1lbnRUYXJnZXQoYXNzaWdubWVudC50YXJnZXQsIGxhbmd1YWdlLCBsb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYXNzaWdubWVudC5leHByZXNzaW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJQcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgYXNzaWdubWVudCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoYXNzaWdubWVudCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiZXhwcmVzc2lvbixmaWVsZCxraW5kLGxvY2F0aW9uLHJlY2VpdmVyXCIgfHwgdHlwZW9mIGFzc2lnbm1lbnQuZmllbGQgIT0gXCJzdHJpbmdcIiB8fFxuICAgICAgYXNzaWdubWVudC5yZWNlaXZlcj8ua2luZCAhPSBcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIHByaXZhdGUgZmllbGQgcmVjZWl2ZXIgb3IgcHJpdmF0ZSBmaWVsZCBpZGVudGl0eVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGFzc2lnbm1lbnQucmVjZWl2ZXIsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYXNzaWdubWVudC5leHByZXNzaW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiZXhwcmVzc2lvblwiKVxuXG4gICAgaWYgKGV4cHJlc3Npb24gIT09IHVuZGVmaW5lZCkgdmFsaWRhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJydWJ5XCIgJiYgbG9vcENvbnRleHQuYWN0aXZlLnNvbWUoKHtraW5kfSkgPT4ga2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiB8fCBraW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcInJldHVybiBmcm9tIGFuIGl0ZXJhdGlvbiBib2R5XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIikge1xuICAgIGlmICghdGFzazAwNUxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDUgdm9pZCBjYWxsIGV4cHJlc3Npb24gc3RhdGVtZW50XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBleHByZXNzaW9uID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImV4cHJlc3Npb25cIilcblxuICAgIGlmICghZXhwcmVzc2lvbiB8fCB0eXBlb2YgZXhwcmVzc2lvbiAhPSBcIm9iamVjdFwiIHx8XG4gICAgICAhW1wiQ2FsbEV4cHJlc3Npb25cIiwgXCJFZmZlY3RDYWxsRXhwcmVzc2lvblwiLCBcIk1ldGhvZENhbGxFeHByZXNzaW9uXCJdLmluY2x1ZGVzKFN0cmluZyhSZWZsZWN0LmdldChleHByZXNzaW9uLCBcImtpbmRcIikpKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImV4cHJlc3Npb24gc3RhdGVtZW50IG90aGVyIHRoYW4gYSBkaXJlY3Qgb3IgcmVjZWl2ZXIgY2FsbFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIpIHtcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImV4cHJlc3Npb25cIiksIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCBicmFuY2ggPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklmU3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGJyYW5jaC5jb25kaXRpb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB2YWxpZGF0ZUJsb2NrKGJyYW5jaC5jb25zZXF1ZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGxvb3BDb250ZXh0LCBhY3RpdmVQYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIGlmIChPYmplY3QuaGFzT3duKGJyYW5jaCwgXCJhbHRlcm5hdGVcIikpIHtcbiAgICAgIHZhbGlkYXRlQmxvY2soYnJhbmNoLmFsdGVybmF0ZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBsb29wQ29udGV4dCwgYWN0aXZlUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJCcmVha1N0YXRlbWVudFwiIHx8IGtpbmQgPT0gXCJDb250aW51ZVN0YXRlbWVudFwiKSB7XG4gICAgaWYgKCF0YXNrMDA4TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwOCBvcmRlcmVkIGxpc3QgaXRlcmF0aW9uXCIsIGxvY2F0aW9uKVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG93bkxvY2F0aW9uLCBsYW5ndWFnZSwgYCR7a2luZH0gbG9jYXRpb25gLCBvd25lckxvY2F0aW9uKVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKC8qKiBAdHlwZSB7b2JqZWN0fSAqLyAoc3RhdGVtZW50KSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwia2luZCxsb2NhdGlvbix0YXJnZXRMb29wSWRcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWFsZm9ybWVkICR7a2luZH1gLCBsb2NhdGlvbilcbiAgICBjb25zdCB0YXJnZXRMb29wSWQgPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwidGFyZ2V0TG9vcElkXCIpXG4gICAgY29uc3QgbmVhcmVzdCA9IGxvb3BDb250ZXh0LmFjdGl2ZS5hdCgtMSlcblxuICAgIGlmICghbmVhcmVzdCkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtraW5kID09IFwiQnJlYWtTdGF0ZW1lbnRcIiA/IFwiYnJlYWtcIiA6IFwiY29udGludWVcIn0gb3V0c2lkZSBhIGxvb3BgLCBsb2NhdGlvbilcbiAgICBpZiAodHlwZW9mIHRhcmdldExvb3BJZCAhPSBcInN0cmluZ1wiIHx8ICFsb29wQ29udGV4dC5vd25lcnMuaGFzKHRhcmdldExvb3BJZCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJpbnZhbGlkIGxvb3AgY29udHJvbCB0YXJnZXQgaWRlbnRpdHlcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChsb29wQ29udGV4dC5vd25lcnMuZ2V0KHRhcmdldExvb3BJZCkgIT09IGxvb3BDb250ZXh0Lm93bmVyKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibG9vcCBjb250cm9sIHRhcmdldCBjcm9zc2VzIGEgZnVuY3Rpb24gYm91bmRhcnlcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmICh0YXJnZXRMb29wSWQgIT0gbmVhcmVzdC5pZCkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImxvb3AgY29udHJvbCBtdXN0IHRhcmdldCB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbG9vcFwiLCBsb2NhdGlvbilcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHtcbiAgICBpZiAoIXRhc2swMzJMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDMyIGNvbmRpdGlvbi1jb250cm9sbGVkIGxvb3BcIiwgbG9jYXRpb24pXG4gICAgY29uc3QgbG9vcExvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24ob3duTG9jYXRpb24sIGxhbmd1YWdlLCBcIldoaWxlU3RhdGVtZW50IGxvY2F0aW9uXCIsIG93bmVyTG9jYXRpb24pXG4gICAgY29uc3QgbG9vcCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuV2hpbGVTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMobG9vcCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiYm9keSxjb25kaXRpb24saWQsa2luZCxsb2NhdGlvblwiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIFdoaWxlU3RhdGVtZW50XCIsIGxvb3BMb2NhdGlvbilcbiAgICBpZiAodHlwZW9mIGxvb3AuaWQgIT0gXCJzdHJpbmdcIiB8fCAhL15sb29wOlswLTldKyQvdS50ZXN0KGxvb3AuaWQpIHx8IGxvb3BDb250ZXh0Lm93bmVycy5nZXQobG9vcC5pZCkgIT09IGxvb3BDb250ZXh0Lm93bmVyKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZHVwbGljYXRlIG9yIGludmFsaWQgbG9vcCBpZGVudGl0eVwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghbG9vcC5jb25kaXRpb24gfHwgdHlwZW9mIGxvb3AuY29uZGl0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShsb29wLmNvbmRpdGlvbikpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgY29uZGl0aW9uLWNvbnRyb2xsZWQgbG9vcCBjb25kaXRpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihSZWZsZWN0LmdldChsb29wLmNvbmRpdGlvbiwgXCJsb2NhdGlvblwiKSwgbGFuZ3VhZ2UsIFwiY29uZGl0aW9uLWNvbnRyb2xsZWQgbG9vcCBjb25kaXRpb24gbG9jYXRpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihsb29wLmNvbmRpdGlvbiwgbGFuZ3VhZ2UsIGxvb3BMb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICBpZiAoIWxvb3AuYm9keSB8fCB0eXBlb2YgbG9vcC5ib2R5ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShsb29wLmJvZHkpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGNvbmRpdGlvbi1jb250cm9sbGVkIGxvb3AgYm9keVwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KGxvb3AuYm9keSwgXCJsb2NhdGlvblwiKSwgbGFuZ3VhZ2UsIFwiY29uZGl0aW9uLWNvbnRyb2xsZWQgbG9vcCBib2R5IGxvY2F0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICB2YWxpZGF0ZUJsb2NrKGxvb3AuYm9keSwgbGFuZ3VhZ2UsIGxvb3BMb2NhdGlvbixcbiAgICAgIHthY3RpdmU6IFsuLi5sb29wQ29udGV4dC5hY3RpdmUsIGxvb3BdLCBvd25lcjogbG9vcENvbnRleHQub3duZXIsIG93bmVyczogbG9vcENvbnRleHQub3duZXJzfSwgYWN0aXZlUGF0aCxcbiAgICAgIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIpIHtcbiAgICBpZiAoIXRhc2swMDhMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA4IG9yZGVyZWQgbGlzdCBpdGVyYXRpb25cIiwgbG9jYXRpb24pXG4gICAgY29uc3QgbG9vcExvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24ob3duTG9jYXRpb24sIGxhbmd1YWdlLCBcIkZvckVhY2hTdGF0ZW1lbnQgbG9jYXRpb25cIiwgb3duZXJMb2NhdGlvbilcbiAgICBjb25zdCBsb29wID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGxvb3ApLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImJvZHksaWQsa2luZCxsaXN0LGxvY2F0aW9uLHZhbHVlQmluZGluZ1wiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIEZvckVhY2hTdGF0ZW1lbnRcIiwgbG9vcExvY2F0aW9uKVxuICAgIGlmICh0eXBlb2YgbG9vcC5pZCAhPSBcInN0cmluZ1wiIHx8ICEvXmxvb3A6WzAtOV0rJC91LnRlc3QobG9vcC5pZCkgfHwgbG9vcENvbnRleHQub3duZXJzLmdldChsb29wLmlkKSAhPT0gbG9vcENvbnRleHQub3duZXIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJkdXBsaWNhdGUgb3IgaW52YWxpZCBsb29wIGlkZW50aXR5XCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKCFsb29wLmxpc3QgfHwgdHlwZW9mIGxvb3AubGlzdCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobG9vcC5saXN0KSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBpdGVyYXRpb24gY29sbGVjdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KGxvb3AubGlzdCwgXCJsb2NhdGlvblwiKSwgbGFuZ3VhZ2UsIFwiaXRlcmF0aW9uIGNvbGxlY3Rpb24gbG9jYXRpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihsb29wLmxpc3QsIGxhbmd1YWdlLCBsb29wTG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgaWYgKCFsb29wLnZhbHVlQmluZGluZyB8fCB0eXBlb2YgbG9vcC52YWx1ZUJpbmRpbmcgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGxvb3AudmFsdWVCaW5kaW5nKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBpdGVyYXRpb24gYmluZGluZ1wiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGJpbmRpbmcgPSBsb29wLnZhbHVlQmluZGluZ1xuICAgIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KGJpbmRpbmcsIFwibG9jYXRpb25cIiksIGxhbmd1YWdlLCBcIml0ZXJhdGlvbiBiaW5kaW5nIGxvY2F0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICBjb25zdCBiaW5kaW5nRmllbGRzID0gT2JqZWN0LmtleXMoYmluZGluZykuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoYmluZGluZy5raW5kICE9IFwiVmFsdWVCaW5kaW5nXCIgfHwgYmluZGluZ0ZpZWxkcyAhPSBcImtpbmQsbG9jYXRpb24sbXV0YWJsZSxuYW1lLHR5cGVcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBpdGVyYXRpb24gYmluZGluZ1wiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChiaW5kaW5nLm11dGFibGUgIT09IGZhbHNlKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibXV0YWJsZSBpdGVyYXRpb24gYmluZGluZ1wiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgYmluZGluZy5uYW1lLCBcIml0ZXJhdGlvbiBiaW5kaW5nXCIsIGJpbmRpbmdMb2NhdGlvbilcbiAgICBpZiAoIWxvb3AuYm9keSB8fCB0eXBlb2YgbG9vcC5ib2R5ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShsb29wLmJvZHkpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGl0ZXJhdGlvbiBib2R5XCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24oUmVmbGVjdC5nZXQobG9vcC5ib2R5LCBcImxvY2F0aW9uXCIpLCBsYW5ndWFnZSwgXCJpdGVyYXRpb24gYm9keSBsb2NhdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgdmFsaWRhdGVCbG9jayhsb29wLmJvZHksIGxhbmd1YWdlLCBsb29wTG9jYXRpb24sXG4gICAgICB7YWN0aXZlOiBbLi4ubG9vcENvbnRleHQuYWN0aXZlLCBsb29wXSwgb3duZXI6IGxvb3BDb250ZXh0Lm93bmVyLCBvd25lcnM6IGxvb3BDb250ZXh0Lm93bmVyc30sIGFjdGl2ZVBhdGgsXG4gICAgICBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgaWYgKCF0YXNrMDE0TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAxNCBvcmRlcmVkLW1hcCBpdGVyYXRpb25cIiwgbG9jYXRpb24pXG4gICAgY29uc3QgbG9vcExvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24ob3duTG9jYXRpb24sIGxhbmd1YWdlLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnQgbG9jYXRpb25cIiwgb3duZXJMb2NhdGlvbilcbiAgICBjb25zdCBsb29wID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoTWFwU3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGxvb3ApLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImJvZHksaWQsa2V5QmluZGluZyxraW5kLGxvY2F0aW9uLG1hcCx2YWx1ZUJpbmRpbmdcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBGb3JFYWNoTWFwU3RhdGVtZW50XCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBsb29wLmlkICE9IFwic3RyaW5nXCIgfHwgIS9ebG9vcDpbMC05XSskL3UudGVzdChsb29wLmlkKSB8fCBsb29wQ29udGV4dC5vd25lcnMuZ2V0KGxvb3AuaWQpICE9PSBsb29wQ29udGV4dC5vd25lcikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImR1cGxpY2F0ZSBvciBpbnZhbGlkIGxvb3AgaWRlbnRpdHlcIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIWxvb3AubWFwIHx8IHR5cGVvZiBsb29wLm1hcCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobG9vcC5tYXApKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIG9yZGVyZWQtbWFwIGl0ZXJhdGlvbiBjb2xsZWN0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24oUmVmbGVjdC5nZXQobG9vcC5tYXAsIFwibG9jYXRpb25cIiksIGxhbmd1YWdlLCBcIm9yZGVyZWQtbWFwIGl0ZXJhdGlvbiBjb2xsZWN0aW9uIGxvY2F0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24obG9vcC5tYXAsIGxhbmd1YWdlLCBsb29wTG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgZm9yIChjb25zdCBbcm9sZSwgYmluZGluZ10gb2YgW1tcImtleVwiLCBsb29wLmtleUJpbmRpbmddLCBbXCJ2YWx1ZVwiLCBsb29wLnZhbHVlQmluZGluZ11dKSB7XG4gICAgICBpZiAoIWJpbmRpbmcgfHwgdHlwZW9mIGJpbmRpbmcgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGJpbmRpbmcpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1pc3Npbmcgb3IgaW52YWxpZCBtYXAgaXRlcmF0aW9uICR7cm9sZX0gYmluZGluZ2AsIGxvb3BMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGJpbmRpbmcubG9jYXRpb24sIGxhbmd1YWdlLCBgbWFwIGl0ZXJhdGlvbiAke3JvbGV9IGJpbmRpbmcgbG9jYXRpb25gLCBsb29wTG9jYXRpb24pXG4gICAgICBjb25zdCBiaW5kaW5nRmllbGRzID0gT2JqZWN0LmtleXMoYmluZGluZykuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICAgIGlmIChiaW5kaW5nLmtpbmQgIT0gXCJWYWx1ZUJpbmRpbmdcIiB8fCBiaW5kaW5nRmllbGRzICE9IFwia2luZCxsb2NhdGlvbixtdXRhYmxlLG5hbWUsdHlwZVwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1hbGZvcm1lZCBtYXAgaXRlcmF0aW9uICR7cm9sZX0gYmluZGluZ2AsIGJpbmRpbmdMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGlmIChiaW5kaW5nLm11dGFibGUgIT09IGZhbHNlKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiTWFwIGl0ZXJhdGlvbiBiaW5kaW5ncyBtdXN0IGJlIGltbXV0YWJsZVwiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgICB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCBiaW5kaW5nLm5hbWUsIGBtYXAgaXRlcmF0aW9uICR7cm9sZX0gYmluZGluZ2AsIGJpbmRpbmdMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKCFsb29wLmJvZHkgfHwgdHlwZW9mIGxvb3AuYm9keSAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobG9vcC5ib2R5KSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBtYXAgaXRlcmF0aW9uIGJvZHlcIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihSZWZsZWN0LmdldChsb29wLmJvZHksIFwibG9jYXRpb25cIiksIGxhbmd1YWdlLCBcIm1hcCBpdGVyYXRpb24gYm9keSBsb2NhdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgdmFsaWRhdGVCbG9jayhsb29wLmJvZHksIGxhbmd1YWdlLCBsb29wTG9jYXRpb24sXG4gICAgICB7YWN0aXZlOiBbLi4ubG9vcENvbnRleHQuYWN0aXZlLCBsb29wXSwgb3duZXI6IGxvb3BDb250ZXh0Lm93bmVyLCBvd25lcnM6IGxvb3BDb250ZXh0Lm93bmVyc30sIGFjdGl2ZVBhdGgsXG4gICAgICBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiUmFpc2VTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKC8qKiBAdHlwZSB7b2JqZWN0fSAqLyAoc3RhdGVtZW50KSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG4gICAgY29uc3QgcmFpc2VkID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImVycm9yXCIpXG4gICAgY29uc3QgcmFpc2VMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG93bkxvY2F0aW9uLCBsYW5ndWFnZSwgXCJSYWlzZVN0YXRlbWVudCBsb2NhdGlvblwiLCBvd25lckxvY2F0aW9uKVxuICAgIGNvbnN0IGNvbnN0cnVjdGlvbkZpZWxkcyA9IHJhaXNlZCAmJiB0eXBlb2YgcmFpc2VkID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkocmFpc2VkKVxuICAgICAgPyBPYmplY3Qua2V5cyhyYWlzZWQpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgIGlmIChmaWVsZHMgIT0gXCJlcnJvcixraW5kLGxvY2F0aW9uXCIgfHwgIXJhaXNlZCB8fCB0eXBlb2YgcmFpc2VkICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShyYWlzZWQpIHx8XG4gICAgICByYWlzZWQua2luZCAhPSBcIkVycm9yQ29uc3RydWN0aW9uXCIgfHwgY29uc3RydWN0aW9uRmllbGRzICE9IFwiZXJyb3Isa2luZCxsb2NhdGlvbixtZXNzYWdlXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgUmFpc2VTdGF0ZW1lbnRcIiwgcmFpc2VMb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24ocmFpc2VkLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJlcnJvciBjb25zdHJ1Y3Rpb24gbG9jYXRpb25cIiwgcmFpc2VMb2NhdGlvbilcbiAgICB2YWxpZGF0ZUVycm9yVHlwZVNoYXBlKHJhaXNlZC5lcnJvciwgbGFuZ3VhZ2UsIHJhaXNlZC5sb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24ocmFpc2VkLm1lc3NhZ2UsIGxhbmd1YWdlLCByYWlzZWQubG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJSZXRocm93U3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCByZXRocm93ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZXRocm93U3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuICAgIGNvbnN0IHJldGhyb3dMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG93bkxvY2F0aW9uLCBsYW5ndWFnZSwgXCJSZXRocm93U3RhdGVtZW50IGxvY2F0aW9uXCIsIG93bmVyTG9jYXRpb24pXG5cbiAgICBpZiAoT2JqZWN0LmtleXMocmV0aHJvdykuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpICE9IFwiYmluZGluZyxiaW5kaW5nTm9kZSxraW5kLGxvY2F0aW9uXCIgfHxcbiAgICAgIHR5cGVvZiByZXRocm93LmJpbmRpbmcgIT0gXCJzdHJpbmdcIiB8fCByZXRocm93LmJpbmRpbmcubGVuZ3RoID09IDAgfHxcbiAgICAgICFyZXRocm93LmJpbmRpbmdOb2RlIHx8IHJldGhyb3cuYmluZGluZ05vZGUua2luZCAhPSBcIkNhdGNoQmluZGluZ1wiIHx8IHJldGhyb3cuYmluZGluZ05vZGUubmFtZSAhPSByZXRocm93LmJpbmRpbmcpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgUmV0aHJvd1N0YXRlbWVudFwiLCByZXRocm93TG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIHJldGhyb3cuYmluZGluZywgXCJjYXRjaCBiaW5kaW5nXCIsIHJldGhyb3dMb2NhdGlvbilcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgdHJ5U3RhdGVtZW50ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UcnlTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG4gICAgY29uc3QgdHJ5TG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihvd25Mb2NhdGlvbiwgbGFuZ3VhZ2UsIFwiVHJ5U3RhdGVtZW50IGxvY2F0aW9uXCIsIG93bmVyTG9jYXRpb24pXG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXModHJ5U3RhdGVtZW50KS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJib2R5LGhhbmRsZXJzLGtpbmQsbG9jYXRpb25cIiAmJiBmaWVsZHMgIT0gXCJib2R5LGZpbmFsbHlCb2R5LGhhbmRsZXJzLGtpbmQsbG9jYXRpb25cIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBUcnlTdGF0ZW1lbnRcIiwgdHJ5TG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0cnlTdGF0ZW1lbnQuaGFuZGxlcnMpIHx8ICh0cnlTdGF0ZW1lbnQuaGFuZGxlcnMubGVuZ3RoID09IDAgJiYgIXRyeVN0YXRlbWVudC5maW5hbGx5Qm9keSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUcnlTdGF0ZW1lbnQgd2l0aG91dCBhbiBvcmRlcmVkIGhhbmRsZXIgbGlzdFwiLCB0cnlMb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVCbG9jayh0cnlTdGF0ZW1lbnQuYm9keSwgbGFuZ3VhZ2UsIHRyeUxvY2F0aW9uLCBsb29wQ29udGV4dCwgYWN0aXZlUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdHJ5U3RhdGVtZW50LmhhbmRsZXJzKSB7XG4gICAgICBjb25zdCBoYW5kbGVyTG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihoYW5kbGVyPy5sb2NhdGlvbiwgbGFuZ3VhZ2UsIFwiY2F0Y2ggaGFuZGxlciBsb2NhdGlvblwiLCB0cnlMb2NhdGlvbilcbiAgICAgIGNvbnN0IGhhbmRsZXJGaWVsZHMgPSBoYW5kbGVyICYmIHR5cGVvZiBoYW5kbGVyID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoaGFuZGxlcilcbiAgICAgICAgPyBPYmplY3Qua2V5cyhoYW5kbGVyKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIikgOiBcIlwiXG5cbiAgICAgIGlmICghaGFuZGxlciB8fCBoYW5kbGVyLmtpbmQgIT0gXCJDYXRjaEhhbmRsZXJcIiB8fCBoYW5kbGVyRmllbGRzICE9IFwiY2F0Y2hCaW5kaW5nLGNhdGNoQm9keSxjYXRjaFR5cGUsa2luZCxsb2NhdGlvblwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgY2F0Y2ggaGFuZGxlclwiLCBoYW5kbGVyTG9jYXRpb24pXG4gICAgICB9XG4gICAgICB2YWxpZGF0ZUVycm9yVHlwZVNoYXBlKGhhbmRsZXIuY2F0Y2hUeXBlLCBsYW5ndWFnZSwgaGFuZGxlckxvY2F0aW9uKVxuICAgICAgY29uc3QgYmluZGluZyA9IGhhbmRsZXIuY2F0Y2hCaW5kaW5nXG4gICAgICBjb25zdCBiaW5kaW5nRmllbGRzID0gYmluZGluZyAmJiB0eXBlb2YgYmluZGluZyA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGJpbmRpbmcpXG4gICAgICAgID8gT2JqZWN0LmtleXMoYmluZGluZykuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuICAgICAgY29uc3QgYmluZGluZ0xvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24oYmluZGluZz8ubG9jYXRpb24sIGxhbmd1YWdlLCBcImNhdGNoIGJpbmRpbmcgbG9jYXRpb25cIiwgaGFuZGxlckxvY2F0aW9uKVxuXG4gICAgICBpZiAoIWJpbmRpbmcgfHwgYmluZGluZy5raW5kICE9IFwiQ2F0Y2hCaW5kaW5nXCIgfHwgYmluZGluZ0ZpZWxkcyAhPSBcImtpbmQsbG9jYXRpb24sbXV0YWJsZSxuYW1lLHR5cGVcIiB8fCBiaW5kaW5nLm11dGFibGUgIT09IGZhbHNlKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgY2F0Y2ggYmluZGluZ1wiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgICB9XG4gICAgICB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCBiaW5kaW5nLm5hbWUsIFwiY2F0Y2ggYmluZGluZ1wiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgICB2YWxpZGF0ZUVycm9yVHlwZVNoYXBlKGJpbmRpbmcudHlwZSwgbGFuZ3VhZ2UsIGJpbmRpbmdMb2NhdGlvbilcbiAgICAgIGlmIChiaW5kaW5nLnR5cGUuZGVjbGFyYXRpb25JZCAhPSBoYW5kbGVyLmNhdGNoVHlwZS5kZWNsYXJhdGlvbklkKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjYXRjaCBiaW5kaW5nIHR5cGUgbWlzbWF0Y2hcIiwgYmluZGluZ0xvY2F0aW9uKVxuICAgICAgfVxuICAgICAgdmFsaWRhdGVCbG9jayhoYW5kbGVyLmNhdGNoQm9keSwgbGFuZ3VhZ2UsIGhhbmRsZXJMb2NhdGlvbiwgbG9vcENvbnRleHQsIGFjdGl2ZVBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgfVxuICAgIGlmICh0cnlTdGF0ZW1lbnQuZmluYWxseUJvZHkpIHZhbGlkYXRlQmxvY2sodHJ5U3RhdGVtZW50LmZpbmFsbHlCb2R5LCBsYW5ndWFnZSwgdHJ5TG9jYXRpb24sIGxvb3BDb250ZXh0LCBhY3RpdmVQYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG5cbiAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgc3RhdGVtZW50ICR7a2luZH1gLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGNsb3NlZCBwYXJzZXItbmV1dHJhbCBlcnJvciB0eXBlIHNoYXBlLlxuICogQHBhcmFtIHt1bmtub3dufSB0eXBlIC0gQ2FuZGlkYXRlIGVycm9yIHR5cGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBvd25lckxvY2F0aW9uIC0gTmVhcmVzdCBvd25pbmcgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVFcnJvclR5cGVTaGFwZSgvKiogQHR5cGUge3Vua25vd259ICovIHR5cGUsXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSAqLyBsYW5ndWFnZSxcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gKi8gb3duZXJMb2NhdGlvbikge1xuICBjb25zdCBmaWVsZHMgPSB0eXBlICYmIHR5cGVvZiB0eXBlID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodHlwZSlcbiAgICA/IE9iamVjdC5rZXlzKHR5cGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcbiAgY29uc3QgY2FuZGlkYXRlID0gdHlwZSAmJiB0eXBlb2YgdHlwZSA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHR5cGUpXG4gICAgPyAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodHlwZSkgOiB7fVxuXG4gIGlmIChjYW5kaWRhdGUua2luZCAhPSBcIkVycm9yVHlwZVwiIHx8IGZpZWxkcyAhPSBcImRlY2xhcmF0aW9uSWQsa2luZFwiIHx8IHR5cGVvZiBjYW5kaWRhdGUuZGVjbGFyYXRpb25JZCAhPSBcInN0cmluZ1wiIHx8XG4gICAgIS9eKD86KD86W2Etel1bYS16MC05Ll8tXSojKT9lcnJvcjpbMC05XSt8KD86bW9kdWxlOlswLTldK1xcLyk/Y2FwYWJpbGl0eTpbMC05XStcXC9mYWlsdXJlOlswLTldKykkL3VcbiAgICAgIC50ZXN0KGNhbmRpZGF0ZS5kZWNsYXJhdGlvbklkKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgZXJyb3IgdHlwZVwiLCBvd25lckxvY2F0aW9uKVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNvbXBsZXRlIHNlbWFudGljIGxvY2F0aW9uIHN1aXRhYmxlIGZvciBkaWFnbm9zdGljIGNvbnN0cnVjdGlvbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gY2FuZGlkYXRlIC0gUHJlZmVycmVkIGxvY2F0aW9uLlxuICogQHBhcmFtIHt1bmtub3dufSBmYWxsYmFjayAtIE5lYXJlc3QgZW5jbG9zaW5nIGxvY2F0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBTYWZlIGRpYWdub3N0aWMgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGRpYWdub3N0aWNMb2NhdGlvbihjYW5kaWRhdGUsIGZhbGxiYWNrKSB7XG4gIGlmIChpc1NlbWFudGljTG9jYXRpb24oY2FuZGlkYXRlKSkgcmV0dXJuIGNhbmRpZGF0ZVxuICBpZiAoaXNTZW1hbnRpY0xvY2F0aW9uKGZhbGxiYWNrKSkgcmV0dXJuIGZhbGxiYWNrXG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIFJlcXVpcmVzIG9uZSBjb21wbGV0ZSBwYXJzZXItbmV1dHJhbCBsb2NhdGlvbiBiZWZvcmUgYW55IGJhY2tlbmQgb3IgZGlhZ25vc3RpYyBjb25zdW1lcyBpdC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gY2FuZGlkYXRlIC0gUmVxdWlyZWQgbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBMb2NhdGlvbiBvd25lciBmb3IgYSBkZXRlcm1pbmlzdGljIGRpYWdub3N0aWMuXG4gKiBAcGFyYW0ge3Vua25vd259IGZhbGxiYWNrIC0gTmVhcmVzdCBlbmNsb3NpbmcgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFZhbGlkYXRlZCBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZVNlbWFudGljTG9jYXRpb24oY2FuZGlkYXRlLCBsYW5ndWFnZSwgc3ViamVjdCwgZmFsbGJhY2spIHtcbiAgaWYgKCFpc1NlbWFudGljTG9jYXRpb24oY2FuZGlkYXRlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWlzc2luZyBvciBpbnZhbGlkICR7c3ViamVjdH1gLCBkaWFnbm9zdGljTG9jYXRpb24oZmFsbGJhY2ssIHVuZGVmaW5lZCkpXG5cbiAgcmV0dXJuIGNhbmRpZGF0ZVxufVxuXG4vKipcbiAqIENoZWNrcyBhIGNvbXBsZXRlIG9yZGVyZWQgVVRGLTE2IHNvdXJjZSByYW5nZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gbG9jYXRpb24gLSBDYW5kaWRhdGUgc291cmNlIHJhbmdlLlxuICogQHJldHVybnMge2xvY2F0aW9uIGlzIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBXaGV0aGVyIHRoZSByYW5nZSBpcyBzYWZlIHRvIGNvbnN1bWUuXG4gKi9cbmZ1bmN0aW9uIGlzU2VtYW50aWNMb2NhdGlvbihsb2NhdGlvbikge1xuICBpZiAoIWxvY2F0aW9uIHx8IHR5cGVvZiBsb2NhdGlvbiAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobG9jYXRpb24pKSByZXR1cm4gZmFsc2VcbiAgY29uc3QgY2FuZGlkYXRlID0gLyoqIEB0eXBlIHt7ZmlsZW5hbWU/OiB1bmtub3duLCBzdGFydD86IHVua25vd24sIGVuZD86IHVua25vd259fSAqLyAobG9jYXRpb24pXG5cbiAgaWYgKHR5cGVvZiBjYW5kaWRhdGUuZmlsZW5hbWUgIT0gXCJzdHJpbmdcIiB8fCBjYW5kaWRhdGUuZmlsZW5hbWUubGVuZ3RoID09IDAgfHxcbiAgICAhaXNTZW1hbnRpY1BvaW50KGNhbmRpZGF0ZS5zdGFydCkgfHwgIWlzU2VtYW50aWNQb2ludChjYW5kaWRhdGUuZW5kKSkgcmV0dXJuIGZhbHNlXG5cbiAgcmV0dXJuIGNhbmRpZGF0ZS5lbmQub2Zmc2V0ID49IGNhbmRpZGF0ZS5zdGFydC5vZmZzZXQgJiYgY2FuZGlkYXRlLmVuZC5saW5lID49IGNhbmRpZGF0ZS5zdGFydC5saW5lICYmXG4gICAgKGNhbmRpZGF0ZS5lbmQubGluZSAhPSBjYW5kaWRhdGUuc3RhcnQubGluZSB8fCBjYW5kaWRhdGUuZW5kLmNvbHVtbiA+PSBjYW5kaWRhdGUuc3RhcnQuY29sdW1uKVxufVxuXG4vKipcbiAqIENoZWNrcyBvbmUgY29tcGxldGUgb25lLWJhc2VkIFVURi0xNiBzb3VyY2UgcG9pbnQuXG4gKiBAcGFyYW0ge3Vua25vd259IHBvaW50IC0gQ2FuZGlkYXRlIHNvdXJjZSBwb2ludC5cbiAqIEByZXR1cm5zIHtwb2ludCBpcyBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VQb2ludH0gV2hldGhlciBhbGwgY29vcmRpbmF0ZXMgYXJlIHZhbGlkLlxuICovXG5mdW5jdGlvbiBpc1NlbWFudGljUG9pbnQocG9pbnQpIHtcbiAgaWYgKCFwb2ludCB8fCB0eXBlb2YgcG9pbnQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHBvaW50KSkgcmV0dXJuIGZhbHNlXG4gIGNvbnN0IGNhbmRpZGF0ZSA9IC8qKiBAdHlwZSB7e29mZnNldD86IHVua25vd24sIGxpbmU/OiB1bmtub3duLCBjb2x1bW4/OiB1bmtub3dufX0gKi8gKHBvaW50KVxuXG4gIHJldHVybiBOdW1iZXIuaXNTYWZlSW50ZWdlcihjYW5kaWRhdGUub2Zmc2V0KSAmJiBOdW1iZXIoY2FuZGlkYXRlLm9mZnNldCkgPj0gMCAmJlxuICAgIE51bWJlci5pc1NhZmVJbnRlZ2VyKGNhbmRpZGF0ZS5saW5lKSAmJiBOdW1iZXIoY2FuZGlkYXRlLmxpbmUpID49IDEgJiZcbiAgICBOdW1iZXIuaXNTYWZlSW50ZWdlcihjYW5kaWRhdGUuY29sdW1uKSAmJiBOdW1iZXIoY2FuZGlkYXRlLmNvbHVtbikgPj0gMVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgc2ltcGxlIGlkZW50aWZpZXIgdGFyZ2V0IGludHJvZHVjZWQgYnkgdGFzayAwMDIuXG4gKiBAcGFyYW0ge3Vua25vd259IHRhcmdldCAtIENhbmRpZGF0ZSBhc3NpZ25tZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2Ugb3IgYmluYXJ5IHRhcmdldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBBc3NpZ25tZW50IGxvY2F0aW9uLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQXNzaWdubWVudFRhcmdldCh0YXJnZXQsIGxhbmd1YWdlLCBvd25lckxvY2F0aW9uKSB7XG4gIGlmICghdGFyZ2V0IHx8IHR5cGVvZiB0YXJnZXQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBhc3NpZ25tZW50IHRhcmdldFwiLCBvd25lckxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgY2FuZGlkYXRlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZGVudGlmaWVyRXhwcmVzc2lvbn0gKi8gKHRhcmdldClcbiAgY29uc3QgbG9jYXRpb24gPSBjYW5kaWRhdGUubG9jYXRpb24gPz8gb3duZXJMb2NhdGlvblxuXG4gIGlmIChjYW5kaWRhdGUua2luZCAhPSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgYXNzaWdubWVudCB0YXJnZXQgJHtTdHJpbmcoUmVmbGVjdC5nZXQodGFyZ2V0LCBcImtpbmRcIikpfWAsIGxvY2F0aW9uKVxuICB9XG5cbiAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgY2FuZGlkYXRlLm5hbWUsIFwiYXNzaWdubWVudCB0YXJnZXRcIiwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogQ2hlY2tzIGV4cHJlc3Npb24gYmFja2VuZCBjYXBhYmlsaXRpZXMgcmVjdXJzaXZlbHkuXG4gKiBAcGFyYW0ge3Vua25vd259IGV4cHJlc3Npb24gLSBDYW5kaWRhdGUgc2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2Ugb3IgYmluYXJ5IHRhcmdldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBOZWFyZXN0IG93bmluZyBub2RlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dKYXZhTmVnYXRlZE1pbmltdW1PcGVyYW5kXSAtIFdoZXRoZXIgSmF2YSBtYXkgdXNlIDIxNDc0ODM2NDggb25seSBiZW5lYXRoIGludGVnZXIgbmVnYXRpb24uXG4gKiBAcGFyYW0ge1NldDxvYmplY3Q+fSBbYWN0aXZlUGF0aF0gLSBBbmNlc3RvcnMgb24gdGhlIGN1cnJlbnQgcmVjdXJzaXZlIHZhbGlkYXRpb24gcGF0aC5cbiAqIEBwYXJhbSB7U2V0PHN0cmluZz59IFtleHRlcm5hbERlY2xhcmF0aW9uSWRzXSAtIFJlc29sdmVkIGRlY2xhcmF0aW9ucyB3aG9zZSBzb3VyY2Ugc3BlbGxpbmcgaXMgdGFyZ2V0LWluZGVwZW5kZW50LlxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dKYXZhT3JkZXJlZE1hcFJvb3RdIC0gV2hldGhlciB0aGlzIHJvb3QgaXMgYSBKYXZhIGxvY2FsIGluaXRpYWxpemVyIGVsaWdpYmxlIGZvciBzdGF0ZW1lbnQgbG93ZXJpbmcuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIGxhbmd1YWdlLCBvd25lckxvY2F0aW9uLCBhbGxvd0phdmFOZWdhdGVkTWluaW11bU9wZXJhbmQgPSBmYWxzZSwgYWN0aXZlUGF0aCA9IG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcyA9IG5ldyBTZXQoKSwgYWxsb3dKYXZhT3JkZXJlZE1hcFJvb3QgPSBmYWxzZSkge1xuICBpZiAoIWV4cHJlc3Npb24gfHwgdHlwZW9mIGV4cHJlc3Npb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGV4cHJlc3Npb24pKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgZXhwcmVzc2lvblwiLCBvd25lckxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgY2FuZGlkYXRlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoZXhwcmVzc2lvbilcbiAgY29uc3QgbG9jYXRpb24gPSBjYW5kaWRhdGUubG9jYXRpb24gPz8gb3duZXJMb2NhdGlvblxuXG4gIGlmIChhY3RpdmVQYXRoLmhhcyhjYW5kaWRhdGUpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiY3ljbGljIGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG4gIGNvbnN0IGV4cHJlc3Npb25QYXRoID0gbmV3IFNldChhY3RpdmVQYXRoKVxuXG4gIGV4cHJlc3Npb25QYXRoLmFkZChjYW5kaWRhdGUpXG5cbiAgaWYgKHR5cGVvZiBjYW5kaWRhdGUua2luZCAhPSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgZXhwcmVzc2lvblwiLCBsb2NhdGlvbilcbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgdmFsaWRhdGVUYXJnZXRJZGVudGlmaWVyKGxhbmd1YWdlLCBjYW5kaWRhdGUubmFtZSwgXCJyZWZlcmVuY2VcIiwgbG9jYXRpb24pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImNsYXNzSWQsa2luZCxsb2NhdGlvblwiIHx8IHR5cGVvZiBjYW5kaWRhdGUuY2xhc3NJZCAhPSBcInN0cmluZ1wiIHx8XG4gICAgICAhL14oPzpbYS16XVthLXowLTkuXy1dKiMpP2NsYXNzOlswLTldKyQvdS50ZXN0KGNhbmRpZGF0ZS5jbGFzc0lkKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBwcml2YXRlIGZpZWxkIHJlY2VpdmVyXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJFcnJvck1lc3NhZ2VSZWFkXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImtpbmQsbG9jYXRpb24scmVjZWl2ZXJcIiB8fCBjYW5kaWRhdGUucmVjZWl2ZXI/LmtpbmQgIT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIEVycm9yTWVzc2FnZVJlYWRcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUucmVjZWl2ZXIsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk93bmVkTW92ZUV4cHJlc3Npb25cIiB8fCBjYW5kaWRhdGUua2luZCA9PSBcIk93bmVkQm9ycm93RXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcbiAgICBjb25zdCBleHBlY3RlZCA9IGNhbmRpZGF0ZS5raW5kID09IFwiT3duZWRNb3ZlRXhwcmVzc2lvblwiID8gXCJleHByZXNzaW9uLGtpbmQsbG9jYXRpb24sdHlwZVwiIDogXCJleHByZXNzaW9uLGtpbmQsbG9jYXRpb24sbW9kZSx0eXBlXCJcblxuICAgIGlmIChmaWVsZHMgIT0gZXhwZWN0ZWQgfHwgY2FuZGlkYXRlLmV4cHJlc3Npb24ua2luZCAhPSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIgJiYgY2FuZGlkYXRlLmV4cHJlc3Npb24ua2luZCAhPSBcIlJlY2VpdmVyRXhwcmVzc2lvblwiICYmXG4gICAgICBjYW5kaWRhdGUuZXhwcmVzc2lvbi5raW5kICE9IFwiUHJpdmF0ZUZpZWxkUmVhZFwiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBtYWxmb3JtZWQgJHtjYW5kaWRhdGUua2luZH1gLCBsb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmV4cHJlc3Npb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkludGVnZXJMaXRlcmFsXCIpIHtcbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGNhbmRpZGF0ZS52YWx1ZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJub24tc2FmZSBpbnRlZ2VyIGxpdGVyYWxcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHZhbGlkTmVnYXRlZE1pbmltdW1PcGVyYW5kID0gYWxsb3dKYXZhTmVnYXRlZE1pbmltdW1PcGVyYW5kICYmIGNhbmRpZGF0ZS52YWx1ZSA9PSAyMTQ3NDgzNjQ4XG5cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgIXZhbGlkTmVnYXRlZE1pbmltdW1PcGVyYW5kICYmIChjYW5kaWRhdGUudmFsdWUgPCAtMjE0NzQ4MzY0OCB8fCBjYW5kaWRhdGUudmFsdWUgPiAyMTQ3NDgzNjQ3KSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImludGVnZXIgbGl0ZXJhbCBvdXRzaWRlIHNpZ25lZCAzMi1iaXQgaW50IHJhbmdlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoKGxhbmd1YWdlID09IFwiY3NoYXJwXCIgfHwgbGFuZ3VhZ2UgPT0gXCJnb1wiIHx8IGxhbmd1YWdlID09IFwiY1wiIHx8IGxhbmd1YWdlID09IFwiY3BwXCIgfHwgbGFuZ3VhZ2UgPT0gXCJkYXJ0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIiB8fCBsYW5ndWFnZSA9PSBcInJ1c3RcIiB8fCBsYW5ndWFnZSA9PSBcInN3aWZ0XCIpICYmIGNhbmRpZGF0ZS52YWx1ZSA8IDAgfHxcbiAgICAgIChsYW5ndWFnZSA9PSBcImNcIiB8fCBsYW5ndWFnZSA9PSBcImNwcFwiIHx8IGxhbmd1YWdlID09IFwiZGFydFwiIHx8IGxhbmd1YWdlID09IFwia290bGluXCIgfHwgbGFuZ3VhZ2UgPT0gXCJydXN0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJzd2lmdFwiKSAmJiBPYmplY3QuaXMoY2FuZGlkYXRlLnZhbHVlLCAtMCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJuZWdhdGl2ZSBpbnRlZ2VyIGxpdGVyYWwgd2l0aG91dCBzZW1hbnRpYyBuZWdhdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiQm9vbGVhbkxpdGVyYWxcIiB8fCBjYW5kaWRhdGUua2luZCA9PSBcIlN0cmluZ0xpdGVyYWxcIikgcmV0dXJuXG4gIGlmIChbXCJPcHRpb25hbE5vbmVcIiwgXCJPcHRpb25hbFNvbWVcIiwgXCJPcHRpb25hbElzUHJlc2VudFwiLCBcIk9wdGlvbmFsVW53cmFwXCJdLmluY2x1ZGVzKGNhbmRpZGF0ZS5raW5kKSkge1xuICAgIGlmICghdGFzazAwN0xhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDcgb3B0aW9uYWwgdmFsdWVzXCIsIGxvY2F0aW9uKVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG4gICAgY29uc3QgZXhwZWN0ZWRGaWVsZHMgPSBjYW5kaWRhdGUua2luZCA9PSBcIk9wdGlvbmFsTm9uZVwiID8gXCJraW5kLGxvY2F0aW9uXCIgOlxuICAgICAgY2FuZGlkYXRlLmtpbmQgPT0gXCJPcHRpb25hbFNvbWVcIiA/IFwia2luZCxsb2NhdGlvbix2YWx1ZVwiIDogXCJraW5kLGxvY2F0aW9uLG9wZXJhbmRcIlxuXG4gICAgaWYgKGZpZWxkcyAhPSBleHBlY3RlZEZpZWxkcykgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWFsZm9ybWVkICR7Y2FuZGlkYXRlLmtpbmR9YCwgbG9jYXRpb24pXG4gICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiT3B0aW9uYWxOb25lXCIpIHJldHVyblxuICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk9wdGlvbmFsU29tZVwiKSB7XG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLnZhbHVlLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBvcGVyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLk9wdGlvbmFsSXNQcmVzZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuT3B0aW9uYWxVbndyYXB9ICovIChjYW5kaWRhdGUpXG5cbiAgICBpZiAoIW9wZXJhdGlvbi5vcGVyYW5kIHx8IG9wZXJhdGlvbi5vcGVyYW5kLmtpbmQgIT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGAke2NhbmRpZGF0ZS5raW5kfSB3aXRob3V0IGEgc2ltcGxlIGlkZW50aWZpZXIgb3BlcmFuZGAsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24ob3BlcmF0aW9uLm9wZXJhbmQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChbXCJMaXN0TGl0ZXJhbFwiLCBcIk1hcExpdGVyYWxcIiwgXCJPcmRlcmVkTWFwTGl0ZXJhbFwiLCBcIkxpc3RJbmRleEV4cHJlc3Npb25cIiwgXCJNYXBMb29rdXBFeHByZXNzaW9uXCIsIFwiQ29sbGVjdGlvblNpemVFeHByZXNzaW9uXCJdLmluY2x1ZGVzKGNhbmRpZGF0ZS5raW5kKSkge1xuICAgIGlmICghdGFzazAwNkxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDYgaW1tdXRhYmxlIGNvbGxlY3Rpb25zXCIsIGxvY2F0aW9uKVxuICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIgJiYgIXRhc2swMTRMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDE0IG9yZGVyZWQtbWFwIGl0ZXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIiAmJiBsYW5ndWFnZSA9PSBcImphdmFcIiAmJiAhYWxsb3dKYXZhT3JkZXJlZE1hcFJvb3QpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJ1bnNhZmUgSmF2YSBvcmRlcmVkLW1hcCBleHByZXNzaW9uIGxvd2VyaW5nXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJMaXN0TGl0ZXJhbFwiKSB7XG4gICAgICBpZiAoIWlzRGVuc2VBcnJheShjYW5kaWRhdGUuZWxlbWVudHMpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBzcGFyc2UgbGlzdCBlbGVtZW50c1wiLCBsb2NhdGlvbilcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBjYW5kaWRhdGUuZWxlbWVudHMpIHtcbiAgICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGVsZW1lbnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk1hcExpdGVyYWxcIiB8fCBjYW5kaWRhdGUua2luZCA9PSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpIHtcbiAgICAgIGlmICghaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5lbnRyaWVzKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3Igc3BhcnNlIG1hcCBlbnRyaWVzXCIsIGxvY2F0aW9uKVxuICAgICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiTWFwTGl0ZXJhbFwiICYmIGxhbmd1YWdlID09IFwiamF2YVwiICYmIGNhbmRpZGF0ZS5lbnRyaWVzLmxlbmd0aCA+IDEwKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJqYXZhLnV0aWwuTWFwLm9mIHN1cHBvcnRzIGF0IG1vc3QgdGVuIGVudHJpZXNcIiwgbG9jYXRpb24pXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGNhbmRpZGF0ZS5lbnRyaWVzKSB7XG4gICAgICAgIGlmICghZW50cnkgfHwgZW50cnkua2luZCAhPSBcIk1hcEVudHJ5XCIgfHwgIWVudHJ5LmtleSB8fCBlbnRyeS5rZXkua2luZCAhPSBcIlN0cmluZ0xpdGVyYWxcIikge1xuICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgbWFwIGVudHJ5XCIsIGVudHJ5Py5sb2NhdGlvbiA/PyBsb2NhdGlvbilcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oZW50cnkua2V5LCBsYW5ndWFnZSwgZW50cnkubG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGVudHJ5LnZhbHVlLCBsYW5ndWFnZSwgZW50cnkubG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJMaXN0SW5kZXhFeHByZXNzaW9uXCIpIHtcbiAgICAgIGlmIChjYW5kaWRhdGUudG90YWxpdHkgPT0gXCJmYWlsLW9uLWFic2VuY2VcIiAmJiBsYW5ndWFnZSAhPSBcImphdmFcIikge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibGlzdCBhY2Nlc3MgZGVwZW5kcyBvbiBKYXZhLXNwZWNpZmljIGJvdW5kcyBmYWlsdXJlXCIsIGxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5jb2xsZWN0aW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUuaW5kZXgsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk1hcExvb2t1cEV4cHJlc3Npb25cIikge1xuICAgICAgaWYgKGNhbmRpZGF0ZS50b3RhbGl0eSA9PSBcImZhaWwtb24tYWJzZW5jZVwiICYmIGxhbmd1YWdlICE9IFwicnVieVwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYXAgbG9va3VwIGRlcGVuZHMgb24gUnVieSBmZXRjaCBhYnNlbmNlIGZhaWx1cmVcIiwgbG9jYXRpb24pXG4gICAgICB9XG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmNvbGxlY3Rpb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5rZXksIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkNvbGxlY3Rpb25TaXplRXhwcmVzc2lvblwiKSB7XG4gICAgICBpZiAoY2FuZGlkYXRlLmNvbGxlY3Rpb25LaW5kICE9IFwibGlzdFwiICYmIGNhbmRpZGF0ZS5jb2xsZWN0aW9uS2luZCAhPSBcIm1hcFwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjb2xsZWN0aW9uIHNpemUgd2l0aG91dCBhIHZhbGlkYXRlZCByZWNlaXZlciBraW5kXCIsIGxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5jb2xsZWN0aW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25JZCA9IGNhbmRpZGF0ZS5yZXNvbHV0aW9uICYmIHR5cGVvZiBjYW5kaWRhdGUucmVzb2x1dGlvbiA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGNhbmRpZGF0ZS5yZXNvbHV0aW9uKVxuICAgICAgPyBSZWZsZWN0LmdldChjYW5kaWRhdGUucmVzb2x1dGlvbiwgXCJkZWNsYXJhdGlvbklkXCIpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKHR5cGVvZiBkZWNsYXJhdGlvbklkICE9IFwic3RyaW5nXCIgfHwgIWV4dGVybmFsRGVjbGFyYXRpb25JZHMuaGFzKGRlY2xhcmF0aW9uSWQpKSB7XG4gICAgICB2YWxpZGF0ZVRhcmdldElkZW50aWZpZXIobGFuZ3VhZ2UsIGNhbmRpZGF0ZS5jYWxsZWUsIFwiY2FsbGVlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIWNhbmRpZGF0ZS5yZXNvbHV0aW9uIHx8IHR5cGVvZiBjYW5kaWRhdGUucmVzb2x1dGlvbiAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoY2FuZGlkYXRlLnJlc29sdXRpb24pKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHJlc29sdmVkIGNhbGwgc2lnbmF0dXJlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2FuZGlkYXRlLmFyZ3VtZW50cykpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgY2FsbCBhcmd1bWVudHNcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghdGFzazAwNUxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpICYmIGNhbmRpZGF0ZS5hcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjYWxsIGFyZ3VtZW50IGNvdW50IG90aGVyIHRoYW4gdHdvXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9mIGNhbmRpZGF0ZS5hcmd1bWVudHMpIHtcbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkVmZmVjdENhbGxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuICAgIGNvbnN0IHJlc29sdXRpb24gPSBjYW5kaWRhdGUucmVzb2x1dGlvblxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImFyZ3VtZW50cyxlZmZlY3RTaXRlSWQsa2luZCxsb2NhdGlvbixvcGVyYXRpb24scmVzb2x1dGlvblwiIHx8ICFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlLmFyZ3VtZW50cykgfHxcbiAgICAgIHR5cGVvZiBjYW5kaWRhdGUuZWZmZWN0U2l0ZUlkICE9IFwic3RyaW5nXCIgfHwgdHlwZW9mIGNhbmRpZGF0ZS5vcGVyYXRpb24gIT0gXCJzdHJpbmdcIiB8fCAhcmVzb2x1dGlvbiB8fFxuICAgICAgcmVzb2x1dGlvbi5raW5kICE9IFwiUmVzb2x2ZWRFZmZlY3RPcGVyYXRpb25TaWduYXR1cmVcIiB8fCByZXNvbHV0aW9uLm9wZXJhdGlvbklkICE9IGNhbmRpZGF0ZS5vcGVyYXRpb24gfHxcbiAgICAgICFpc0RlbnNlQXJyYXkocmVzb2x1dGlvbi5wYXJhbWV0ZXJUeXBlcykgfHwgIWlzRGVuc2VBcnJheShyZXNvbHV0aW9uLmZhaWx1cmVJZHMpIHx8IHJlc29sdXRpb24uZWZmZWN0cz8uam9pbihcIixcIikgIT0gXCJob3N0XCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgYXV0aG9yaXplZCBlZmZlY3QgY2FsbFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBjYW5kaWRhdGUuYXJndW1lbnRzKSB2YWxpZGF0ZUV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIlJlZmVyZW5jZUNvbnN0cnVjdGlvblwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcbiAgICBjb25zdCByZXNvbHV0aW9uID0gY2FuZGlkYXRlLnJlc29sdXRpb25cbiAgICBjb25zdCBlZmZlY3RmdWxGaWVsZHMgPSBcImFyZ3VtZW50cyxlZmZlY3RTaXRlSWQsZWZmZWN0cyxmYWlsdXJlSWRzLGtpbmQsbG9jYXRpb24scmVmZXJlbmNlLHJlc29sdXRpb25cIlxuICAgIGNvbnN0IHB1cmVGaWVsZHMgPSBcImFyZ3VtZW50cyxraW5kLGxvY2F0aW9uLHJlZmVyZW5jZSxyZXNvbHV0aW9uXCJcblxuICAgIGlmICghW3B1cmVGaWVsZHMsIGVmZmVjdGZ1bEZpZWxkc10uaW5jbHVkZXMoZmllbGRzKSB8fFxuICAgICAgY2FuZGlkYXRlLnJlZmVyZW5jZT8ua2luZCAhPSBcIlJlZmVyZW5jZVR5cGVcIiAmJiBjYW5kaWRhdGUucmVmZXJlbmNlPy5raW5kICE9IFwiT3duZWRSZWZlcmVuY2VUeXBlXCIgfHxcbiAgICAgIHR5cGVvZiBjYW5kaWRhdGUucmVmZXJlbmNlLmRlY2xhcmF0aW9uSWQgIT0gXCJzdHJpbmdcIiB8fCAhaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5hcmd1bWVudHMpIHx8XG4gICAgICAhcmVzb2x1dGlvbiB8fCByZXNvbHV0aW9uLmtpbmQgIT0gXCJSZXNvbHZlZENvbnN0cnVjdG9yU2lnbmF0dXJlXCIgfHxcbiAgICAgIHJlc29sdXRpb24uZGVjbGFyYXRpb25JZCAhPSBgJHtjYW5kaWRhdGUucmVmZXJlbmNlLmRlY2xhcmF0aW9uSWR9OmNvbnN0cnVjdG9yYCB8fCAhaXNEZW5zZUFycmF5KHJlc29sdXRpb24ucGFyYW1ldGVyVHlwZXMpIHx8XG4gICAgICBmaWVsZHMgPT0gZWZmZWN0ZnVsRmllbGRzICYmXG4gICAgICAodHlwZW9mIGNhbmRpZGF0ZS5lZmZlY3RTaXRlSWQgIT0gXCJzdHJpbmdcIiB8fCBjYW5kaWRhdGUuZWZmZWN0cz8uam9pbihcIixcIikgIT0gXCJob3N0XCIgfHwgIWlzRGVuc2VBcnJheShjYW5kaWRhdGUuZmFpbHVyZUlkcykpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIHJlZmVyZW5jZSBjb25zdHJ1Y3Rpb24gb3IgcmVzb2x2ZWQgY29uc3RydWN0b3Igc2lnbmF0dXJlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9mIGNhbmRpZGF0ZS5hcmd1bWVudHMpIHtcbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk1ldGhvZENhbGxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuICAgIGNvbnN0IHJlc29sdXRpb24gPSBjYW5kaWRhdGUucmVzb2x1dGlvblxuXG4gICAgY29uc3QgZWZmZWN0ZnVsRmllbGRzID0gXCJhcmd1bWVudHMsZWZmZWN0U2l0ZUlkLGVmZmVjdHMsZmFpbHVyZUlkcyxraW5kLGxvY2F0aW9uLG1ldGhvZCxyZWNlaXZlcixyZXNvbHV0aW9uXCJcbiAgICBjb25zdCBwdXJlRmllbGRzID0gXCJhcmd1bWVudHMsa2luZCxsb2NhdGlvbixtZXRob2QscmVjZWl2ZXIscmVzb2x1dGlvblwiXG5cbiAgICBpZiAoIVtwdXJlRmllbGRzLCBlZmZlY3RmdWxGaWVsZHNdLmluY2x1ZGVzKGZpZWxkcykgfHwgdHlwZW9mIGNhbmRpZGF0ZS5tZXRob2QgIT0gXCJzdHJpbmdcIiB8fFxuICAgICAgIWlzRGVuc2VBcnJheShjYW5kaWRhdGUuYXJndW1lbnRzKSB8fCAhcmVzb2x1dGlvbiB8fCByZXNvbHV0aW9uLmtpbmQgIT0gXCJSZXNvbHZlZE1ldGhvZFNpZ25hdHVyZVwiIHx8XG4gICAgICByZXNvbHV0aW9uLmRlY2xhcmF0aW9uSWQgIT0gY2FuZGlkYXRlLm1ldGhvZCB8fCAhaXNEZW5zZUFycmF5KHJlc29sdXRpb24ucGFyYW1ldGVyVHlwZXMpIHx8XG4gICAgICAhT2JqZWN0Lmhhc093bihyZXNvbHV0aW9uLCBcInJldHVyblR5cGVcIikgfHwgT2JqZWN0Lmhhc093bihyZXNvbHV0aW9uLCBcInJlc291cmNlRmxvd1wiKSAmJlxuICAgICAgKCFyZXNvbHV0aW9uLnJlc291cmNlRmxvdyB8fCAhW1wicHJlc2VydmVcIiwgXCJ0ZXJtaW5hbFwiXS5pbmNsdWRlcyhTdHJpbmcocmVzb2x1dGlvbi5yZXNvdXJjZUZsb3cua2luZCkpIHx8XG4gICAgICAgIE9iamVjdC5oYXNPd24ocmVzb2x1dGlvbi5yZXNvdXJjZUZsb3csIFwidGVybWluYWxGYWlsdXJlSWRcIikgJiYgdHlwZW9mIHJlc29sdXRpb24ucmVzb3VyY2VGbG93LnRlcm1pbmFsRmFpbHVyZUlkICE9IFwic3RyaW5nXCIpIHx8XG4gICAgICBmaWVsZHMgPT0gZWZmZWN0ZnVsRmllbGRzICYmXG4gICAgICAodHlwZW9mIGNhbmRpZGF0ZS5lZmZlY3RTaXRlSWQgIT0gXCJzdHJpbmdcIiB8fCBjYW5kaWRhdGUuZWZmZWN0cz8uam9pbihcIixcIikgIT0gXCJob3N0XCIgfHwgIWlzRGVuc2VBcnJheShjYW5kaWRhdGUuZmFpbHVyZUlkcykpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIHJlY2VpdmVyIGNhbGwgb3IgcmVzb2x2ZWQgbWV0aG9kIHNpZ25hdHVyZVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5yZWNlaXZlciwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBjYW5kaWRhdGUuYXJndW1lbnRzKSB7XG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJSZWNvcmRDb25zdHJ1Y3Rpb25cIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiYXJndW1lbnRzLGtpbmQsbG9jYXRpb24scmVjb3JkXCIgfHwgIWNhbmRpZGF0ZS5yZWNvcmQgfHwgY2FuZGlkYXRlLnJlY29yZC5raW5kICE9IFwiUmVjb3JkVHlwZVwiIHx8XG4gICAgICB0eXBlb2YgY2FuZGlkYXRlLnJlY29yZC5kZWNsYXJhdGlvbklkICE9IFwic3RyaW5nXCIgfHwgIWlzRGVuc2VBcnJheShjYW5kaWRhdGUuYXJndW1lbnRzKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBSZWNvcmRDb25zdHJ1Y3Rpb25cIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGZvciAoY29uc3QgYXJndW1lbnQgb2YgY2FuZGlkYXRlLmFyZ3VtZW50cykge1xuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGFyZ3VtZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiTWVtYmVyUmVhZFwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJmaWVsZCxraW5kLGxvY2F0aW9uLHJlY2VpdmVyXCIgfHwgdHlwZW9mIGNhbmRpZGF0ZS5maWVsZCAhPSBcInN0cmluZ1wiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIE1lbWJlclJlYWRcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUucmVjZWl2ZXIsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIlByaXZhdGVGaWVsZFJlYWRcIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiZmllbGQsa2luZCxsb2NhdGlvbixyZWNlaXZlclwiIHx8IHR5cGVvZiBjYW5kaWRhdGUuZmllbGQgIT0gXCJzdHJpbmdcIiB8fFxuICAgICAgY2FuZGlkYXRlLnJlY2VpdmVyPy5raW5kICE9IFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgcHJpdmF0ZSBmaWVsZCByZWNlaXZlciBvciBwcml2YXRlIGZpZWxkIGlkZW50aXR5XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLnJlY2VpdmVyLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikge1xuICAgIGlmICghT2JqZWN0Lmhhc093bih1bmFyeU9wZXJhdGlvblN5bnRheCwgU3RyaW5nKGNhbmRpZGF0ZS5vcGVyYXRpb24pKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgdW5hcnkgb3BlcmF0aW9uICR7U3RyaW5nKGNhbmRpZGF0ZS5vcGVyYXRpb24pfWAsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLm9wZXJhbmQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgY2FuZGlkYXRlLm9wZXJhdGlvbiA9PSBcIkludGVnZXJOZWdhdGVcIiwgZXhwcmVzc2lvblBhdGgsXG4gICAgICBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHZhbGlkYXRlS25vd25UYXJnZXRJbnRlZ2VyKGNhbmRpZGF0ZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgIGlmICghT2JqZWN0Lmhhc093bihiaW5hcnlPcGVyYXRpb25TeW50YXgsIFN0cmluZyhjYW5kaWRhdGUub3BlcmF0aW9uKSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGJpbmFyeSBvcGVyYXRpb24gJHtTdHJpbmcoY2FuZGlkYXRlLm9wZXJhdGlvbil9YCwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUubGVmdCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5yaWdodCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgdmFsaWRhdGVLbm93blRhcmdldEludGVnZXIoY2FuZGlkYXRlLCBsYW5ndWFnZSwgbG9jYXRpb24pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiYWx0ZXJuYXRlLGNvbmRpdGlvbixjb25zZXF1ZW50LGtpbmQsbG9jYXRpb24sdHlwZVwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIENvbmRpdGlvbmFsRXhwcmVzc2lvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKCF0YXNrMDQ4Q29uZGl0aW9uYWxMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDQ4IGNvbmRpdGlvbmFsIGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5jb25kaXRpb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUuY29uc2VxdWVudCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5hbHRlcm5hdGUsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG5cbiAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBTdHJpbmcoUmVmbGVjdC5nZXQoZXhwcmVzc2lvbiwgXCJraW5kXCIpKSwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogUmVqZWN0cyBjb21waWxlLXRpbWUta25vd24gSmF2YSBpbnRlZ2VyIG9wZXJhdGlvbiByZXN1bHRzIG91dHNpZGUgcHJpbWl0aXZlIGludC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVW5hcnlFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmluYXJ5RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIFZhbGlkYXRlZCBvcGVyYXRpb24gc2hhcGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGxhbmd1YWdlIG9yIGJpbmFyeSB0YXJnZXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBsb2NhdGlvbiAtIE9wZXJhdGlvbiBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUtub3duVGFyZ2V0SW50ZWdlcihleHByZXNzaW9uLCBsYW5ndWFnZSwgbG9jYXRpb24pIHtcbiAgY29uc3QgdmFsdWUgPSBrbm93bkludGVnZXJWYWx1ZShleHByZXNzaW9uKVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIiAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICh2YWx1ZSA8IC0yMTQ3NDgzNjQ4biB8fCB2YWx1ZSA+IDIxNDc0ODM2NDduKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjb21waWxlLXRpbWUta25vd24gaW50ZWdlciBvcGVyYXRpb24gb3V0c2lkZSBzaWduZWQgMzItYml0IGludCByYW5nZVwiLCBsb2NhdGlvbilcbiAgfVxuICBpZiAoKGxhbmd1YWdlID09IFwiY3NoYXJwXCIgfHwgbGFuZ3VhZ2UgPT0gXCJnb1wiIHx8IGxhbmd1YWdlID09IFwiY1wiIHx8IGxhbmd1YWdlID09IFwiY3BwXCIgfHwgbGFuZ3VhZ2UgPT0gXCJydXN0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJzd2lmdFwiIHx8IGxhbmd1YWdlID09IFwid2FzbVwiIHx8IGxhbmd1YWdlID09IFwiemlnXCIpICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAodmFsdWUgPCAtOTIyMzM3MjAzNjg1NDc3NTgwOG4gfHwgdmFsdWUgPiA5MjIzMzcyMDM2ODU0Nzc1ODA3bikpIHtcbiAgICBjb25zdCBzY2FsYXIgPSBsYW5ndWFnZSA9PSBcIndhc21cIiB8fCBsYW5ndWFnZSA9PSBcInppZ1wiID8gXCJpNjRcIiA6IGxhbmd1YWdlID09IFwic3dpZnRcIiA/IFwiSW50NjRcIiA6IFwibG9uZ1wiXG5cbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBjb21waWxlLXRpbWUta25vd24gaW50ZWdlciBvcGVyYXRpb24gb3V0c2lkZSBzaWduZWQgNjQtYml0ICR7c2NhbGFyfSByYW5nZWAsIGxvY2F0aW9uKVxuICB9XG4gIGlmICgobGFuZ3VhZ2UgPT0gXCJkYXJ0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIikgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICh2YWx1ZSA8IC1CaWdJbnQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHx8IHZhbHVlID4gQmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSkpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiY29tcGlsZS10aW1lLWtub3duIGludGVnZXIgb3BlcmF0aW9uIG91dHNpZGUgdGhlIFNlbWFudGlmb2xkIHNhZmUtaW50ZWdlciByYW5nZVwiLCBsb2NhdGlvbilcbiAgfVxufVxuXG4vKipcbiAqIEV2YWx1YXRlcyBvbmx5IGxpdGVyYWwgaW50ZWdlci1vcGVyYXRpb24gdHJlZXMgZm9yIGJvdW5kcyB2YWxpZGF0aW9uLCBuZXZlciBJUiBmb2xkaW5nLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIC0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIHtiaWdpbnQgfCB1bmRlZmluZWR9IEtub3duIG1hdGhlbWF0aWNhbCBpbnRlZ2VyLlxuICovXG5mdW5jdGlvbiBrbm93bkludGVnZXJWYWx1ZShleHByZXNzaW9uKSB7XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJbnRlZ2VyTGl0ZXJhbFwiICYmIE51bWJlci5pc1NhZmVJbnRlZ2VyKGV4cHJlc3Npb24udmFsdWUpKSByZXR1cm4gQmlnSW50KGV4cHJlc3Npb24udmFsdWUpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIiAmJiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJOZWdhdGVcIikge1xuICAgIGNvbnN0IG9wZXJhbmQgPSBrbm93bkludGVnZXJWYWx1ZShleHByZXNzaW9uLm9wZXJhbmQpXG5cbiAgICByZXR1cm4gb3BlcmFuZCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogLW9wZXJhbmRcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kICE9IFwiQmluYXJ5RXhwcmVzc2lvblwiKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3QgbGVmdCA9IGtub3duSW50ZWdlclZhbHVlKGV4cHJlc3Npb24ubGVmdClcbiAgY29uc3QgcmlnaHQgPSBrbm93bkludGVnZXJWYWx1ZShleHByZXNzaW9uLnJpZ2h0KVxuXG4gIGlmIChsZWZ0ID09PSB1bmRlZmluZWQgfHwgcmlnaHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZFxuICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyQWRkXCIpIHJldHVybiBsZWZ0ICsgcmlnaHRcbiAgaWYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlclN1YnRyYWN0XCIpIHJldHVybiBsZWZ0IC0gcmlnaHRcbiAgaWYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck11bHRpcGx5XCIpIHJldHVybiBsZWZ0ICogcmlnaHRcblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogRW1pdHMgb25lIHJlY3Vyc2l2ZSBzZW1hbnRpYyB0eXBlIHdoaWxlIG1hcHBpbmcgZXZlcnkgY29uc3RpdHVlbnQgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IHR5cGUgLSBTZW1hbnRpYyB0eXBlLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBFeGFjdCB0eXBlIG9jY3VycmVuY2UgcGF0aC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVGV4dEJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtqYXZhQm94ZWRdIC0gV2hldGhlciBhIEphdmEgc2NhbGFyIGlzIGEgZ2VuZXJpYyBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdFR5cGUod3JpdGVyLCB0eXBlLCBwYXRoLCBsYW5ndWFnZSwgamF2YUJveGVkID0gZmFsc2UpIHtcbiAgaWYgKHR5cGUua2luZCA9PSBcIlR5cGVWYXJpYWJsZVJlZmVyZW5jZVwiKSB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gd3JpdGVyLnR5cGVQYXJhbWV0ZXJGb3JJZCh0eXBlLnBhcmFtZXRlcklkKVxuXG4gICAgd3JpdGVyLm1hcHBlZChwYXJhbWV0ZXIubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IHBhcmFtZXRlci5uYW1lLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIlJlY29yZFR5cGVcIikge1xuICAgIGNvbnN0IHJlY29yZCA9IHdyaXRlci5yZWNvcmRGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpXG5cbiAgICB3cml0ZXIubWFwcGVkKHdyaXRlci5yZWNvcmROYW1lRm9ySWQodHlwZS5kZWNsYXJhdGlvbklkKSwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogcmVjb3JkLm5hbWUsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwiXG4gICAgfSlcbiAgICBpZiAodHlwZS5hcmd1bWVudHMpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIltcIiA6IFwiPFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHR5cGUsIHBhdGh9KVxuICAgICAgdHlwZS5hcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMobGFuZ3VhZ2UgPT0gXCJwaHBcIiB8fCBsYW5ndWFnZSA9PSBcInJ1YnlcIiB8fCBsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiLFwiIDogXCIsIFwiLFxuICAgICAgICAgIFwiZ2VuZXJpYyB0eXBlIGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbdHlwZV0sIFtwYXRoXSlcbiAgICAgICAgZW1pdFR5cGUod3JpdGVyLCBhcmd1bWVudCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgbGFuZ3VhZ2UsIGxhbmd1YWdlID09IFwiamF2YVwiKVxuICAgICAgfSlcbiAgICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIl1cIiA6IFwiPlwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHR5cGUsIHBhdGh9KVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZS5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSB3cml0ZXIuY2xhc3NGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpXG5cbiAgICB3cml0ZXIubWFwcGVkKHdyaXRlci5jbGFzc05hbWVGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBkZWNsYXJhdGlvbi5uYW1lLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIlxuICAgIH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIk93bmVkUmVzb3VyY2VUeXBlXCIpIHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHdyaXRlci5yZXNvdXJjZUZvcklkKHR5cGUucmVzb3VyY2VJZClcbiAgICB3cml0ZXIubWFwcGVkKHdyaXRlci5jYXBhYmlsaXR5Tm9taW5hbE5hbWUocmVzb3VyY2UubmFtZSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiByZXNvdXJjZS5uYW1lLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIk93bmVkUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSB3cml0ZXIuY2xhc3NGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpXG4gICAgd3JpdGVyLm1hcHBlZCh3cml0ZXIuY2xhc3NOYW1lRm9ySWQodHlwZS5kZWNsYXJhdGlvbklkKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IGRlY2xhcmF0aW9uLm5hbWUsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZS5raW5kID09IFwiVHlwZVJlZmVyZW5jZVwiKSB7XG4gICAgY29uc3Qgc3BlbGxpbmcgPSBsYW5ndWFnZSA9PSBcImphdmFcIiAmJiBqYXZhQm94ZWRcbiAgICAgID8gdHlwZS5uYW1lID09IFwiaW50ZWdlclwiID8gXCJJbnRlZ2VyXCIgOiB0eXBlLm5hbWUgPT0gXCJib29sZWFuXCIgPyBcIkJvb2xlYW5cIiA6IHR5cGUubmFtZSA9PSBcInN0cmluZ1wiID8gXCJTdHJpbmdcIiA6IFwidm9pZFwiXG4gICAgICA6IGVtaXRTY2FsYXJUeXBlKGxhbmd1YWdlLCB0eXBlKVxuXG4gICAgd3JpdGVyLm1hcHBlZChzcGVsbGluZywge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZS5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICBjb25zdCBwcmVmaXggPSBsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiamF2YS51dGlsLk9wdGlvbmFsPFwiIDogbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiP1wiIDogXCJcIlxuXG4gICAgd3JpdGVyLm1hcHBlZChwcmVmaXgsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIn0pXG4gICAgZW1pdFR5cGUod3JpdGVyLCB0eXBlLnZhbHVlVHlwZSwgYCR7cGF0aH0vdmFsdWVUeXBlYCwgbGFuZ3VhZ2UsIGxhbmd1YWdlID09IFwiamF2YVwiKVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIj5cIiA6IGxhbmd1YWdlID09IFwicnVieVwiID8gXCI/XCIgOiBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiA/IFwifG51bGxcIiA6XG4gICAgICBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiA/IFwiIHwgbnVsbFwiIDogXCJcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiB0eXBlLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBjb25zdCBwcmVmaXggPSB0eXBlLmtpbmQgPT0gXCJMaXN0VHlwZVwiXG4gICAgPyBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiQXJyYXlbXCIgOiBsYW5ndWFnZSA9PSBcInBocFwiID8gXCJsaXN0PFwiIDpcbiAgICAgIGxhbmd1YWdlID09IFwiamF2YVwiID8gXCJqYXZhLnV0aWwuTGlzdDxcIiA6IFwiUmVhZG9ubHlBcnJheTxcIlxuICAgIDogbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIkhhc2hbXCIgOiBsYW5ndWFnZSA9PSBcInBocFwiID8gXCJhcnJheTxcIiA6XG4gICAgICBsYW5ndWFnZSA9PSBcImphdmFcIiA/IHR5cGUua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIgPyBcImphdmEudXRpbC5TZXF1ZW5jZWRNYXA8XCIgOiBcImphdmEudXRpbC5NYXA8XCIgOiBcIlJlYWRvbmx5TWFwPFwiXG5cbiAgd3JpdGVyLm1hcHBlZChwcmVmaXgsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIn0pXG4gIGlmICh0eXBlLmtpbmQgPT0gXCJMaXN0VHlwZVwiKSB7XG4gICAgZW1pdFR5cGUod3JpdGVyLCB0eXBlLmVsZW1lbnRUeXBlLCBgJHtwYXRofS9lbGVtZW50VHlwZWAsIGxhbmd1YWdlLCBsYW5ndWFnZSA9PSBcImphdmFcIilcbiAgfSBlbHNlIHtcbiAgICBlbWl0VHlwZSh3cml0ZXIsIHR5cGUua2V5VHlwZSwgYCR7cGF0aH0va2V5VHlwZWAsIGxhbmd1YWdlLCBsYW5ndWFnZSA9PSBcImphdmFcIilcbiAgICB3cml0ZXIuc3ludGhldGljKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiID8gXCIsIFwiIDogXCIsXCIsIFwibWFwIHR5cGUgc2VwYXJhdG9yXCIsIFt0eXBlXSwgW3BhdGhdKVxuICAgIGVtaXRUeXBlKHdyaXRlciwgdHlwZS52YWx1ZVR5cGUsIGAke3BhdGh9L3ZhbHVlVHlwZWAsIGxhbmd1YWdlLCBsYW5ndWFnZSA9PSBcImphdmFcIilcbiAgfVxuICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicnVieVwiID8gXCJdXCIgOiBcIj5cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiB0eXBlLCBwYXRofSlcbn1cblxuLyoqXG4gKiBFbWl0cyBhIHN1cHBvcnRlZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBTZW1hbnRpYyBleHByZXNzaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBFeGFjdCBKU09OIFBvaW50ZXIgZm9yIHRoaXMgZXhwcmVzc2lvbiBvY2N1cnJlbmNlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UZXh0QmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7KG5hbWU6IHN0cmluZykgPT4gc3RyaW5nfSBlbWl0SWRlbnRpZmllciAtIElkZW50aWZpZXIgZm9ybWF0dGVyLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24sIHBhdGgsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcikge1xuICBjb25zdCBlZmZlY3RUZW1wb3JhcnkgPSB3cml0ZXIuZWZmZWN0UmVwbGFjZW1lbnROYW1lKGV4cHJlc3Npb24pXG5cbiAgaWYgKGVmZmVjdFRlbXBvcmFyeSkge1xuICAgIHdyaXRlci5zeW50aGV0aWMoZW1pdElkZW50aWZpZXIoZWZmZWN0VGVtcG9yYXJ5KSwgXCJleGFjdGx5LW9uY2UgZWZmZWN0IHRlbXBvcmFyeSByZWFkXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChlbWl0SWRlbnRpZmllcihleHByZXNzaW9uLm5hbWUpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJSZWNlaXZlckV4cHJlc3Npb25cIikge1xuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiJHRoaXNcIiA6IGxhbmd1YWdlID09IFwicnVieVwiID8gXCJzZWxmXCIgOiBcInRoaXNcIixcbiAgICAgIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcInJlY2VpdmVyXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPd25lZE1vdmVFeHByZXNzaW9uXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiT3duZWRCb3Jyb3dFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAoZXhwcmVzc2lvbi5leHByZXNzaW9uLmtpbmQgPT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKGVtaXRJZGVudGlmaWVyKGV4cHJlc3Npb24uZXhwcmVzc2lvbi5uYW1lKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IGV4cHJlc3Npb24uZXhwcmVzc2lvbi5uYW1lLFxuICAgICAgICBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmV4cHJlc3Npb24ua2luZCA9PSBcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicGhwXCIgPyBcIiR0aGlzXCIgOiBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwic2VsZlwiIDogXCJ0aGlzXCIsXG4gICAgICAgIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcInJlY2VpdmVyXCJ9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmaWVsZCA9IHdyaXRlci5wcml2YXRlRmllbGRGb3JJZChleHByZXNzaW9uLmV4cHJlc3Npb24uZmllbGQpXG5cbiAgICAgIGlmIChsYW5ndWFnZSAhPSBcInJ1YnlcIikge1xuICAgICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24uZXhwcmVzc2lvbi5yZWNlaXZlciwgYCR7cGF0aH0vZXhwcmVzc2lvbi9yZWNlaXZlcmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICAgIH1cbiAgICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IGAtPiR7ZmllbGQubmFtZX1gIDogbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgPyBgLiMke2ZpZWxkLm5hbWV9YCA6XG4gICAgICAgIGxhbmd1YWdlID09IFwicnVieVwiID8gYEAke2ZpZWxkLm5hbWV9YCA6IGAuJHtmaWVsZC5uYW1lfWAsXG4gICAgICB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZmllbGQubmFtZSwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJtZW1iZXJcIn0pXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJbnRlZ2VyTGl0ZXJhbFwiKSB7XG4gICAgY29uc3Qgc3BlbGxpbmcgPSBsYW5ndWFnZSA9PSBcImNzaGFycFwiIHx8IGxhbmd1YWdlID09IFwia290bGluXCIgPyBgJHtleHByZXNzaW9uLnZhbHVlfUxgIDogU3RyaW5nKGV4cHJlc3Npb24udmFsdWUpXG5cbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJsaXRlcmFsXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCb29sZWFuTGl0ZXJhbFwiKSB7XG4gICAgY29uc3Qgc3BlbGxpbmcgPSBsYW5ndWFnZSA9PSBcInB5dGhvblwiID8gZXhwcmVzc2lvbi52YWx1ZSA/IFwiVHJ1ZVwiIDogXCJGYWxzZVwiIDogZXhwcmVzc2lvbi52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiXG5cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJkYXJ0XCIpIHtcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoXCJfc2VtYW50aWZvbGRCb29sZWFuKFwiLCBcIkRhcnQgYW5hbHl6ZWQgQm9vbGVhbiBsaXRlcmFsXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIH1cbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJsaXRlcmFsXCJ9KVxuICAgIGlmIChsYW5ndWFnZSA9PSBcImRhcnRcIikgd3JpdGVyLnN5bnRoZXRpYyhcIilcIiwgXCJEYXJ0IGFuYWx5emVkIEJvb2xlYW4gbGl0ZXJhbFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChlbWl0U3RyaW5nTGl0ZXJhbChsYW5ndWFnZSwgZXhwcmVzc2lvbi52YWx1ZSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImxpdGVyYWxcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsTm9uZVwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiamF2YS51dGlsLk9wdGlvbmFsLmVtcHR5KClcIiA6IGxhbmd1YWdlID09IFwicnVieVwiID8gXCJuaWxcIiA6IFwibnVsbFwiLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImFic2VuY2VcIlxuICAgIH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsU29tZVwiKSB7XG4gICAgaWYgKGxhbmd1YWdlID09IFwiamF2YVwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiamF2YS51dGlsLk9wdGlvbmFsLm9mKFwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJzb21lXCJ9KVxuICAgIH0gZWxzZSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJzb21lXCJ9KVxuICAgIH1cbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24udmFsdWUsIGAke3BhdGh9L3ZhbHVlYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsSXNQcmVzZW50XCIpIHtcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJydWJ5XCIpIHdyaXRlci5tYXBwZWQoXCIhXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIGVsc2UgaWYgKGxhbmd1YWdlICE9IFwiamF2YVwiKSB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5vcGVyYW5kLCBgJHtwYXRofS9vcGVyYW5kYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIi5pc1ByZXNlbnQoKVwiIDogbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIi5uaWw/XCIgOiBcIiAhPT0gbnVsbFwiLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJcbiAgICB9KVxuICAgIGlmIChsYW5ndWFnZSAhPSBcInJ1YnlcIiAmJiBsYW5ndWFnZSAhPSBcImphdmFcIikgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxVbndyYXBcIikge1xuICAgIGlmIChsYW5ndWFnZSAhPSBcImphdmFcIikge1xuICAgICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwidW53cmFwXCJ9KVxuICAgIH1cbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ub3BlcmFuZCwgYCR7cGF0aH0vb3BlcmFuZGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCIuZ2V0KClcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwidW53cmFwXCJ9KVxuICAgIH0gZWxzZSB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJMaXN0TGl0ZXJhbFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiamF2YS51dGlsLkxpc3Qub2YoXCIgOiBcIltcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBleHByZXNzaW9uLmVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXgpIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcImxpc3QgZWxlbWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGVsZW1lbnQsIGAke3BhdGh9L2VsZW1lbnRzLyR7aW5kZXh9YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiKVwiIDogXCJdXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExpdGVyYWxcIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKSB7XG4gICAgY29uc3Qgb3BlbiA9IGxhbmd1YWdlID09IFwiamF2YVwiID8gXCJqYXZhLnV0aWwuTWFwLm9mKFwiIDogbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyBcIm5ldyBNYXAoW1wiIDpcbiAgICAgIGxhbmd1YWdlID09IFwicGhwXCIgPyBcIltcIiA6IFwie1wiXG4gICAgY29uc3QgY2xvc2UgPSBsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiKVwiIDogbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyBcIl0pXCIgOlxuICAgICAgbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiXVwiIDogXCJ9XCJcblxuICAgIHdyaXRlci5tYXBwZWQob3Blbiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBleHByZXNzaW9uLmVudHJpZXMuZm9yRWFjaCgoZW50cnksIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBlbnRyeVBhdGggPSBgJHtwYXRofS9lbnRyaWVzLyR7aW5kZXh9YFxuXG4gICAgICBpZiAoaW5kZXgpIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcIm1hcCBlbnRyeSBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIpIHdyaXRlci5tYXBwZWQoXCJbXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZW50cnksIHBhdGg6IGVudHJ5UGF0aH0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGVudHJ5LmtleSwgYCR7ZW50cnlQYXRofS9rZXlgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicnVieVwiID8gXCIgPT4gXCIgOiBsYW5ndWFnZSA9PSBcInBocFwiID8gXCIgPT4gXCIgOiBcIiwgXCIsIHtcbiAgICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZW50cnksIHBhdGg6IGVudHJ5UGF0aCwgcm9sZTogXCJvcGVyYXRvclwiXG4gICAgICB9KVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBlbnRyeS52YWx1ZSwgYCR7ZW50cnlQYXRofS92YWx1ZWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIikgd3JpdGVyLm1hcHBlZChcIl1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBlbnRyeSwgcGF0aDogZW50cnlQYXRofSlcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoY2xvc2UsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkxpc3RJbmRleEV4cHJlc3Npb25cIikge1xuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBgJHtwYXRofS9jb2xsZWN0aW9uYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIi5nZXQoXCIgOiBcIltcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmluZGV4LCBgJHtwYXRofS9pbmRleGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwiamF2YVwiID8gXCIpXCIgOiBcIl1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSB7XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmNvbGxlY3Rpb24sIGAke3BhdGh9L2NvbGxlY3Rpb25gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgY29uc3Qgb3BlcmF0b3IgPSBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiLmZldGNoKFwiIDogbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiW1wiIDogXCIuZ2V0KFwiXG5cbiAgICB3cml0ZXIubWFwcGVkKG9wZXJhdG9yLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ua2V5LCBgJHtwYXRofS9rZXlgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInBocFwiID8gXCJdXCIgOiBcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIpIHtcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoXCIhXCIsIFwic3RhdGljYWxseSBwcm92ZW4gbWFwIGxvb2t1cFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNvbGxlY3Rpb25TaXplRXhwcmVzc2lvblwiKSB7XG4gICAgaWYgKGxhbmd1YWdlID09IFwicGhwXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCJjb3VudChcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24uY29sbGVjdGlvbiwgYCR7cGF0aH0vY29sbGVjdGlvbmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmNvbGxlY3Rpb24sIGAke3BhdGh9L2NvbGxlY3Rpb25gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgY29uc3Qgb3BlcmF0b3IgPSBsYW5ndWFnZSA9PSBcInJ1YnlcIiB8fCBsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiLnNpemVcIiA6XG4gICAgICBleHByZXNzaW9uLmNvbGxlY3Rpb25LaW5kID09IFwibGlzdFwiID8gXCIubGVuZ3RoXCIgOiBcIi5zaXplXCJcblxuICAgIHdyaXRlci5tYXBwZWQoYCR7b3BlcmF0b3J9JHtsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiKClcIiA6IFwiXCJ9YCwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwiXG4gICAgfSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNhbGxBcmd1bWVudFN1ZmZpeCA9IHdyaXRlci5jYWxsQXJndW1lbnRTdWZmaXhGb3IoZXhwcmVzc2lvbilcbiAgICBjb25zdCBkYXJ0TXVsdGlsaW5lID0gbGFuZ3VhZ2UgPT0gXCJkYXJ0XCIgJiYgKGV4cHJlc3Npb24uYXJndW1lbnRzLmxlbmd0aCA+IDAgfHwgQm9vbGVhbihjYWxsQXJndW1lbnRTdWZmaXgpKSAmJlxuICAgICAgZGFydEV4cHJlc3Npb25FeGNlZWRzUGFnZVdpZHRoKHdyaXRlciwgZXhwcmVzc2lvbilcbiAgICBjb25zdCBkYXJ0SW5kZW50ID0gZGFydE11bHRpbGluZSA/IGN1cnJlbnRMaW5lSW5kZW50KHdyaXRlcikgOiBcIlwiXG5cbiAgICB3cml0ZXIubWFwcGVkKHdyaXRlci5jYWxsTmFtZUZvcihleHByZXNzaW9uKSwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZXhwcmVzc2lvbi5jYWxsZWUsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwiY2FsbGVlXCJcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZXhwcmVzc2lvbi5hcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoZGFydE11bHRpbGluZSkgd3JpdGVyLnN5bnRoZXRpYyhgJHtpbmRleCA/IFwiXCIgOiBcIlxcblwifSR7ZGFydEluZGVudH0gIGAsIFwiRGFydCBhcmd1bWVudCBpbmRlbnRhdGlvblwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGVsc2UgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwiYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBhcmd1bWVudCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgICAgaWYgKGRhcnRNdWx0aWxpbmUpIHdyaXRlci5zeW50aGV0aWMoXCIsXFxuXCIsIFwiRGFydCBmb3JtYXR0ZXIgYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIH0pXG4gICAgaWYgKGNhbGxBcmd1bWVudFN1ZmZpeCkge1xuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhkYXJ0TXVsdGlsaW5lID8gYCR7ZXhwcmVzc2lvbi5hcmd1bWVudHMubGVuZ3RoID8gXCJcIiA6IFwiXFxuXCJ9JHtkYXJ0SW5kZW50fSAgJHtjYWxsQXJndW1lbnRTdWZmaXh9LFxcbmAgOlxuICAgICAgICBgJHtleHByZXNzaW9uLmFyZ3VtZW50cy5sZW5ndGggPyBcIiwgXCIgOiBcIlwifSR7Y2FsbEFyZ3VtZW50U3VmZml4fWAsXG4gICAgICBcInRhcmdldC1jb250YWluZXIgc2VtYW50aWMgY2FsbCBhcmd1bWVudFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICB9XG4gICAgaWYgKGRhcnRNdWx0aWxpbmUpIHdyaXRlci5zeW50aGV0aWMoZGFydEluZGVudCwgXCJEYXJ0IGNhbGwgY2xvc2luZyBpbmRlbnRhdGlvblwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJFZmZlY3RDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gd3JpdGVyLmVmZmVjdE9wZXJhdGlvbkZvcklkKGV4cHJlc3Npb24ub3BlcmF0aW9uKVxuICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIiAmJiB3cml0ZXIucmVmZXJlbmNlQ2xhc3NFbWlzc2lvbkRlcHRoID4gMCkge1xuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIk1haW4uXCIsIFwicHJvdGVjdGVkIFRhc2sgMDM0IGhvc3Qgc3VwcG9ydCBvd25lclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICB9XG4gICAgd3JpdGVyLm1hcHBlZCh3cml0ZXIuc3RkbGliUHJvdmlkZXJFbnRyeUZvcihvcGVyYXRpb24pID8/IG9wZXJhdGlvbi5uYW1lLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBvcGVyYXRpb24ubmFtZSwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJjYWxsZWVcIlxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBleHByZXNzaW9uLmFyZ3VtZW50cy5mb3JFYWNoKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcImVmZmVjdCBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGFyZ3VtZW50LCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJSZWZlcmVuY2VDb25zdHJ1Y3Rpb25cIikge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gd3JpdGVyLmNsYXNzRm9ySWQoZXhwcmVzc2lvbi5yZWZlcmVuY2UuZGVjbGFyYXRpb25JZClcbiAgICBjb25zdCBuYW1lID0gd3JpdGVyLmNsYXNzTmFtZUZvcklkKGV4cHJlc3Npb24ucmVmZXJlbmNlLmRlY2xhcmF0aW9uSWQpXG4gICAgY29uc3QgcHJlZml4ID0gbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBgJHtuYW1lfS5uZXdgIDogYG5ldyAke25hbWV9YFxuXG4gICAgd3JpdGVyLm1hcHBlZChwcmVmaXgsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBkZWNsYXJhdGlvbi5uYW1lLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImNsYXNzXCJ9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZXhwcmVzc2lvbi5hcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJjb25zdHJ1Y3RvciBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGFyZ3VtZW50LCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJlY2VpdmVyLCBgJHtwYXRofS9yZWNlaXZlcmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICBjb25zdCBtZXRob2QgPSB3cml0ZXIubWV0aG9kRm9ySWQoZXhwcmVzc2lvbi5tZXRob2QpXG5cbiAgICB3cml0ZXIubWFwcGVkKGAke2xhbmd1YWdlID09IFwicGhwXCIgPyBcIi0+XCIgOiBcIi5cIn0ke21ldGhvZC5uYW1lfWAsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IG1ldGhvZC5uYW1lLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm1lbWJlclwiXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGV4cHJlc3Npb24uYXJndW1lbnRzLmZvckVhY2goKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwibWV0aG9kIGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgYXJndW1lbnQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlJlY29yZENvbnN0cnVjdGlvblwiKSB7XG4gICAgY29uc3QgcmVjb3JkID0gd3JpdGVyLnJlY29yZEZvcklkKGV4cHJlc3Npb24ucmVjb3JkLmRlY2xhcmF0aW9uSWQpXG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IHdyaXRlci5yZWNvcmROYW1lRm9ySWQoZXhwcmVzc2lvbi5yZWNvcmQuZGVjbGFyYXRpb25JZCwgdHJ1ZSlcbiAgICBjb25zdCBwcmVmaXggPSBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IGAke3RhcmdldE5hbWV9Lm5ld2AgOiBgbmV3ICR7dGFyZ2V0TmFtZX1gXG5cbiAgICB3cml0ZXIubWFwcGVkKHByZWZpeCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IHJlY29yZC5uYW1lLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcInJlY29yZFwifSlcbiAgICBpZiAoKGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwiamF2YVwiKSAmJiBleHByZXNzaW9uLnJlY29yZC5hcmd1bWVudHMpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCI8XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbi5yZWNvcmQsIHBhdGg6IGAke3BhdGh9L3JlY29yZGB9KVxuICAgICAgZXhwcmVzc2lvbi5yZWNvcmQuYXJndW1lbnRzLmZvckVhY2goKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKGxhbmd1YWdlID09IFwiamF2YVwiID8gXCIsXCIgOiBcIiwgXCIsIFwiZ2VuZXJpYyBjb25zdHJ1Y3Rpb24gYXJndW1lbnQgc2VwYXJhdG9yXCIsXG4gICAgICAgICAgW2V4cHJlc3Npb24ucmVjb3JkXSwgW2Ake3BhdGh9L3JlY29yZGBdKVxuICAgICAgICBlbWl0VHlwZSh3cml0ZXIsIGFyZ3VtZW50LCBgJHtwYXRofS9yZWNvcmQvYXJndW1lbnRzLyR7aW5kZXh9YCwgbGFuZ3VhZ2UsIGxhbmd1YWdlID09IFwiamF2YVwiKVxuICAgICAgfSlcbiAgICAgIHdyaXRlci5tYXBwZWQoXCI+XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbi5yZWNvcmQsIHBhdGg6IGAke3BhdGh9L3JlY29yZGB9KVxuICAgIH1cbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGV4cHJlc3Npb24uYXJndW1lbnRzLmZvckVhY2goKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwicmVjb3JkIGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgYXJndW1lbnQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1lbWJlclJlYWRcIikge1xuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yZWNlaXZlciwgYCR7cGF0aH0vcmVjZWl2ZXJgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgY29uc3QgZmllbGQgPSB3cml0ZXIuZmllbGRGb3JJZChleHByZXNzaW9uLmZpZWxkKVxuICAgIGNvbnN0IHBocEdlbmVyaWNSZWNvcmQgPSBsYW5ndWFnZSA9PSBcInBocFwiICYmXG4gICAgICAod3JpdGVyLnJlY29yZEZvckZpZWxkSWQoZXhwcmVzc2lvbi5maWVsZCkudHlwZVBhcmFtZXRlcnM/Lmxlbmd0aCA/PyAwKSA+IDBcbiAgICBjb25zdCBzcGVsbGluZyA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBgLT4ke2ZpZWxkLm5hbWV9JHtwaHBHZW5lcmljUmVjb3JkID8gXCIoKVwiIDogXCJcIn1gIDpcbiAgICAgIGxhbmd1YWdlID09IFwiamF2YVwiID8gYC4ke2ZpZWxkLm5hbWV9KClgIDogYC4ke2ZpZWxkLm5hbWV9YFxuXG4gICAgd3JpdGVyLm1hcHBlZChzcGVsbGluZywge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibWVtYmVyXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJQcml2YXRlRmllbGRSZWFkXCIpIHtcbiAgICBjb25zdCBmaWVsZCA9IHdyaXRlci5wcml2YXRlRmllbGRGb3JJZChleHByZXNzaW9uLmZpZWxkKVxuXG4gICAgaWYgKGxhbmd1YWdlID09IFwicnVieVwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKGBAJHtmaWVsZC5uYW1lfWAsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBmaWVsZC5uYW1lLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm1lbWJlclwifSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmVjZWl2ZXIsIGAke3BhdGh9L3JlY2VpdmVyYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IGAtPiR7ZmllbGQubmFtZX1gIDogbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgPyBgLiMke2ZpZWxkLm5hbWV9YCA6IGAuJHtmaWVsZC5uYW1lfWAsXG4gICAgICB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZmllbGQubmFtZSwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJtZW1iZXJcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkVycm9yTWVzc2FnZVJlYWRcIikge1xuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yZWNlaXZlciwgYCR7cGF0aH0vcmVjZWl2ZXJgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInBocFwiID8gXCItPmdldE1lc3NhZ2UoKVwiIDogbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIi5nZXRNZXNzYWdlKClcIiA6IFwiLm1lc3NhZ2VcIiwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJtZW1iZXJcIlxuICAgIH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5jb25kaXRpb24sIGAke3BhdGh9L2NvbmRpdGlvbmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiID8gXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5jb25zZXF1ZW50LCBgJHtwYXRofS9jb25zZXF1ZW50YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIgOiBcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwiY29sb25cIn0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmFsdGVybmF0ZSwgYCR7cGF0aH0vYWx0ZXJuYXRlYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJkYXJ0XCIgJiYgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTmVnYXRlXCIpIHtcbiAgICAgIGVtaXREYXJ0SW50ZWdlckhlbHBlcih3cml0ZXIsIGV4cHJlc3Npb24sIHBhdGgsIFwiX3NlbWFudGlmb2xkSW50ZWdlck5lZ2F0ZVwiLCBbXG4gICAgICAgIFtleHByZXNzaW9uLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgXVxuICAgICAgXSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIiAmJiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJOZWdhdGVcIikge1xuICAgICAgZW1pdEtvdGxpbkludGVnZXJIZWxwZXIod3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBcInNlbWFudGlmb2xkX2ludGVnZXJfbmVnYXRlXCIsIFtcbiAgICAgICAgW2V4cHJlc3Npb24ub3BlcmFuZCwgYCR7cGF0aH0vb3BlcmFuZGBdXG4gICAgICBdKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChsYW5ndWFnZSA9PSBcImNzaGFycFwiICYmIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck5lZ2F0ZVwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiY2hlY2tlZChcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICAgIHdyaXRlci5tYXBwZWQoXCItXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInB5dGhvblwiICYmIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiQm9vbGVhbk5vdFwiID8gXCJub3QgXCIgOiB1bmFyeU9wZXJhdGlvblN5bnRheFtleHByZXNzaW9uLm9wZXJhdGlvbl0sIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIlxuICAgIH0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcImRhcnRcIiAmJiBbXCJJbnRlZ2VyQWRkXCIsIFwiSW50ZWdlclN1YnRyYWN0XCIsIFwiSW50ZWdlck11bHRpcGx5XCJdLmluY2x1ZGVzKGV4cHJlc3Npb24ub3BlcmF0aW9uKSkge1xuICAgIGNvbnN0IGhlbHBlciA9IGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlckFkZFwiID8gXCJfc2VtYW50aWZvbGRJbnRlZ2VyQWRkXCIgOlxuICAgICAgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyU3VidHJhY3RcIiA/IFwiX3NlbWFudGlmb2xkSW50ZWdlclN1YnRyYWN0XCIgOiBcIl9zZW1hbnRpZm9sZEludGVnZXJNdWx0aXBseVwiXG5cbiAgICBlbWl0RGFydEludGVnZXJIZWxwZXIod3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBoZWxwZXIsIFtcbiAgICAgIFtleHByZXNzaW9uLmxlZnQsIGAke3BhdGh9L2xlZnRgXSwgW2V4cHJlc3Npb24ucmlnaHQsIGAke3BhdGh9L3JpZ2h0YF1cbiAgICBdKVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGxhbmd1YWdlID09IFwia290bGluXCIgJiYgW1wiSW50ZWdlckFkZFwiLCBcIkludGVnZXJTdWJ0cmFjdFwiLCBcIkludGVnZXJNdWx0aXBseVwiXS5pbmNsdWRlcyhleHByZXNzaW9uLm9wZXJhdGlvbikpIHtcbiAgICBjb25zdCBoZWxwZXIgPSBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJBZGRcIiA/IFwic2VtYW50aWZvbGRfaW50ZWdlcl9hZGRcIiA6XG4gICAgICBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJTdWJ0cmFjdFwiID8gXCJzZW1hbnRpZm9sZF9pbnRlZ2VyX3N1YnRyYWN0XCIgOiBcInNlbWFudGlmb2xkX2ludGVnZXJfbXVsdGlwbHlcIlxuXG4gICAgZW1pdEtvdGxpbkludGVnZXJIZWxwZXIod3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBoZWxwZXIsIFtcbiAgICAgIFtleHByZXNzaW9uLmxlZnQsIGAke3BhdGh9L2xlZnRgXSwgW2V4cHJlc3Npb24ucmlnaHQsIGAke3BhdGh9L3JpZ2h0YF1cbiAgICBdKVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGxhbmd1YWdlID09IFwia290bGluXCIgJiYgd3JpdGVyLnVzZXNNZXRob2RTdHJpbmdFcXVhbGl0eSgpICYmXG4gICAgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nRXF1YWxcIiB8fCBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIpKSB7XG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdOb3RFcXVhbFwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiIVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICB9XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmxlZnQsIGAke3BhdGh9L2xlZnRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIi5lcXVhbHMoXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIikpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAobGFuZ3VhZ2UgPT0gXCJjc2hhcnBcIiAmJiBbXCJJbnRlZ2VyQWRkXCIsIFwiSW50ZWdlclN1YnRyYWN0XCIsIFwiSW50ZWdlck11bHRpcGx5XCJdLmluY2x1ZGVzKGV4cHJlc3Npb24ub3BlcmF0aW9uKSkge1xuICAgIHdyaXRlci5tYXBwZWQoXCJjaGVja2VkKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5sZWZ0LCBgJHtwYXRofS9sZWZ0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwib3BlcmF0b3Igc3BhY2luZ1wiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGJpbmFyeU9wZXJhdGlvblNwZWxsaW5nKGV4cHJlc3Npb24ub3BlcmF0aW9uLCBsYW5ndWFnZSksIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIlxuICAgIH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJvcGVyYXRvciBzcGFjaW5nXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIiAmJiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdFcXVhbFwiIHx8IGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nTm90RXF1YWxcIikpIHtcbiAgICBjb25zdCBjb21wb3NpdGVPcGVyYXRvciA9IGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nTm90RXF1YWxcIiAmJiB3cml0ZXIuaGFzUmFuZ2UoZXhwcmVzc2lvbiwgcGF0aCwgXCJlcXVhbGl0eU9wZXJhdG9yXCIpXG5cbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGlmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCIhXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIH1cbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5sZWZ0LCBgJHtwYXRofS9sZWZ0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIi5lcXVhbHNcIiwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogY29tcG9zaXRlT3BlcmF0b3IgPyBcImVxdWFsaXR5T3BlcmF0b3JcIiA6IFwib3BlcmF0b3JcIlxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmlnaHQsIGAke3BhdGh9L3JpZ2h0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcInN3aWZ0XCIgJiYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nRXF1YWxcIiB8fCBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIpKSB7XG4gICAgd3JpdGVyLm1hcHBlZChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ0VxdWFsXCIgPyBcInNlbWFudGlmb2xkX3N0cmluZ19lcXVhbFwiIDogXCJzZW1hbnRpZm9sZF9zdHJpbmdfbm90X2VxdWFsXCIsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIlxuICAgIH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIihcIiwgXCJTd2lmdCBzY2FsYXItZXF1YWxpdHkgaGVscGVyIGNhbGxcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmxlZnQsIGAke3BhdGh9L2xlZnRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwiU3dpZnQgc2NhbGFyLWVxdWFsaXR5IGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmlnaHQsIGAke3BhdGh9L3JpZ2h0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIpXCIsIFwiU3dpZnQgc2NhbGFyLWVxdWFsaXR5IGhlbHBlciBjYWxsXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgZGFydE11bHRpbGluZSA9IGxhbmd1YWdlID09IFwiZGFydFwiICYmIGRhcnRFeHByZXNzaW9uRXhjZWVkc1BhZ2VXaWR0aCh3cml0ZXIsIGV4cHJlc3Npb24pXG4gIGNvbnN0IGRhcnRJbmRlbnQgPSBkYXJ0TXVsdGlsaW5lID8gY3VycmVudExpbmVJbmRlbnQod3JpdGVyKSA6IFwiXCJcblxuICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJvcGVyYXRvciBzcGFjaW5nXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICBjb25zdCBzcGVsbGluZyA9IGJpbmFyeU9wZXJhdGlvblNwZWxsaW5nKGV4cHJlc3Npb24ub3BlcmF0aW9uLCBsYW5ndWFnZSlcblxuICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdOb3RFcXVhbFwiICYmIHdyaXRlci5oYXNSYW5nZShleHByZXNzaW9uLCBwYXRoLCBcImVxdWFsaXR5T3BlcmF0b3JcIikpIHtcbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLnNsaWNlKDAsIDEpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLnNsaWNlKDEpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJlcXVhbGl0eU9wZXJhdG9yXCJ9KVxuICB9IGVsc2Ugd3JpdGVyLm1hcHBlZChzcGVsbGluZywge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gIHdyaXRlci5zeW50aGV0aWMoZGFydE11bHRpbGluZSA/IGBcXG4ke2RhcnRJbmRlbnR9ICAgIGAgOiBcIiBcIiwgXCJvcGVyYXRvciBzcGFjaW5nXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmlnaHQsIGAke3BhdGh9L3JpZ2h0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxufVxuXG4vKipcbiAqIEVtaXRzIGEgS290bGluIGNoZWNrZWQtaW50ZWdlciBoZWxwZXIgd2hpbGUgcHJlc2VydmluZyB0aGUgc2VtYW50aWMgb3BlcmF0b3IgcmFuZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVW5hcnlFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmluYXJ5RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIE9wZXJhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gT3BlcmF0aW9uIHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVscGVyIC0gRXhhY3QgdGFyZ2V0IGhlbHBlci5cbiAqIEBwYXJhbSB7W2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb24sIHN0cmluZ11bXX0gb3BlcmFuZHMgLSBPcmRlcmVkIG9wZXJhbmRzIGFuZCBwYXRocy5cbiAqL1xuZnVuY3Rpb24gZW1pdEtvdGxpbkludGVnZXJIZWxwZXIod3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBoZWxwZXIsIG9wZXJhbmRzKSB7XG4gIHdyaXRlci5tYXBwZWQoaGVscGVyLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIihcIiwgXCJLb3RsaW4gY2hlY2tlZC1pbnRlZ2VyIGhlbHBlciBjYWxsXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICBvcGVyYW5kcy5mb3JFYWNoKChbb3BlcmFuZCwgb3BlcmFuZFBhdGhdLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwiS290bGluIGNoZWNrZWQtaW50ZWdlciBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBvcGVyYW5kLCBvcGVyYW5kUGF0aCwgXCJrb3RsaW5cIiwgaWRlbnRpdHlJZGVudGlmaWVyKVxuICB9KVxuICB3cml0ZXIuc3ludGhldGljKFwiKVwiLCBcIktvdGxpbiBjaGVja2VkLWludGVnZXIgaGVscGVyIGNhbGxcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG59XG5cbi8qKlxuICogRW1pdHMgYSBjb21waWxlci1vd25lZCBEYXJ0IGNoZWNrZWQtaW50ZWdlciBoZWxwZXIgY2FsbC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVW5hcnlFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmluYXJ5RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiBPcGVyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBPcGVyYXRpb24gcGF0aC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWxwZXIgRXhhY3QgdGFyZ2V0IGhlbHBlci5cbiAqIEBwYXJhbSB7W2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb24sIHN0cmluZ11bXX0gb3BlcmFuZHMgT3JkZXJlZCBvcGVyYW5kcyBhbmQgcGF0aHMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdERhcnRJbnRlZ2VySGVscGVyKHdyaXRlciwgZXhwcmVzc2lvbiwgcGF0aCwgaGVscGVyLCBvcGVyYW5kcykge1xuICBjb25zdCBmbGF0TGVuZ3RoID0gaGVscGVyLmxlbmd0aCArIDIgKyBvcGVyYW5kcy5yZWR1Y2UoKHRvdGFsLCBbb3BlcmFuZF0sIGluZGV4KSA9PlxuICAgIHRvdGFsICsgZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgb3BlcmFuZCkubGVuZ3RoICsgKGluZGV4ID8gMiA6IDApLCAwKVxuICBjb25zdCBtdWx0aWxpbmUgPSB3cml0ZXIuY29sdW1uIC0gMSArIGZsYXRMZW5ndGggPiA4MFxuICBjb25zdCBpbmRlbnQgPSBtdWx0aWxpbmUgPyBjdXJyZW50TGluZUluZGVudCh3cml0ZXIpIDogXCJcIlxuXG4gIHdyaXRlci5tYXBwZWQoaGVscGVyLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIihcIiwgXCJEYXJ0IGNoZWNrZWQtaW50ZWdlciBoZWxwZXIgY2FsbFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgb3BlcmFuZHMuZm9yRWFjaCgoW29wZXJhbmQsIG9wZXJhbmRQYXRoXSwgaW5kZXgpID0+IHtcbiAgICBpZiAobXVsdGlsaW5lKSB3cml0ZXIuc3ludGhldGljKGAke2luZGV4ID8gXCJcIiA6IFwiXFxuXCJ9JHtpbmRlbnR9ICBgLCBcIkRhcnQgY2hlY2tlZC1pbnRlZ2VyIGFyZ3VtZW50IGluZGVudGF0aW9uXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIGVsc2UgaWYgKGluZGV4KSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJEYXJ0IGNoZWNrZWQtaW50ZWdlciBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBvcGVyYW5kLCBvcGVyYW5kUGF0aCwgXCJkYXJ0XCIsIGlkZW50aXR5SWRlbnRpZmllcilcbiAgICBpZiAobXVsdGlsaW5lKSB3cml0ZXIuc3ludGhldGljKFwiLFxcblwiLCBcIkRhcnQgZm9ybWF0dGVyIGNoZWNrZWQtaW50ZWdlciBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gIH0pXG4gIGlmIChtdWx0aWxpbmUpIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcIkRhcnQgY2hlY2tlZC1pbnRlZ2VyIGNsb3NpbmcgaW5kZW50YXRpb25cIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIpXCIsIFwiRGFydCBjaGVja2VkLWludGVnZXIgaGVscGVyIGNhbGxcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIERhcnQncyBkZWZhdWx0IDgwLWNvbHVtbiBmb3JtYXR0ZXIgbXVzdCBzcGxpdCBhbiBleHByZXNzaW9uIGF0IHRoZSBjdXJyZW50IHNpdGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBmbGF0IGV4cHJlc3Npb24gY3Jvc3NlcyB0aGUgZm9ybWF0dGVyIGJvdW5kYXJ5LlxuICovXG5mdW5jdGlvbiBkYXJ0RXhwcmVzc2lvbkV4Y2VlZHNQYWdlV2lkdGgod3JpdGVyLCBleHByZXNzaW9uKSB7XG4gIHJldHVybiB3cml0ZXIuY29sdW1uIC0gMSArIGZsYXREYXJ0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24pLmxlbmd0aCA+IDgwXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBnZW5lcmF0ZWQgbGluZSdzIHN0cnVjdHVyYWwgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBMZWFkaW5nIHNwYWNlcy5cbiAqL1xuZnVuY3Rpb24gY3VycmVudExpbmVJbmRlbnQod3JpdGVyKSB7XG4gIHJldHVybiAvXiAqL3UuZXhlYyh3cml0ZXIuY29kZS5zbGljZSh3cml0ZXIuY29kZS5sYXN0SW5kZXhPZihcIlxcblwiKSArIDEpKT8uWzBdID8/IFwiXCJcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBib3VuZGVkIFRhc2stMDA1IERhcnQgZXhwcmVzc2lvbiBwcm9maWxlIHdpdGhvdXQgbWFwcGluZ3MgZm9yIHBhZ2Utd2lkdGggcGxhbm5pbmcuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEZsYXQgY2Fub25pY2FsIHNwZWxsaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbikge1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikgcmV0dXJuIGV4cHJlc3Npb24ubmFtZVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSW50ZWdlckxpdGVyYWxcIikgcmV0dXJuIFN0cmluZyhleHByZXNzaW9uLnZhbHVlKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQm9vbGVhbkxpdGVyYWxcIikgcmV0dXJuIGBfc2VtYW50aWZvbGRCb29sZWFuKCR7ZXhwcmVzc2lvbi52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifSlgXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJTdHJpbmdMaXRlcmFsXCIpIHJldHVybiBlbWl0U3RyaW5nTGl0ZXJhbChcImRhcnRcIiwgZXhwcmVzc2lvbi52YWx1ZSlcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBhcmd1bWVudHNfID0gZXhwcmVzc2lvbi5hcmd1bWVudHMubWFwKChhcmd1bWVudCkgPT4gZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgYXJndW1lbnQpKVxuICAgIGNvbnN0IGNhbGxBcmd1bWVudFN1ZmZpeCA9IHdyaXRlci5jYWxsQXJndW1lbnRTdWZmaXhGb3IoZXhwcmVzc2lvbilcblxuICAgIGlmIChjYWxsQXJndW1lbnRTdWZmaXgpIGFyZ3VtZW50c18ucHVzaChjYWxsQXJndW1lbnRTdWZmaXgpXG5cbiAgICByZXR1cm4gYCR7d3JpdGVyLmNhbGxOYW1lRm9yKGV4cHJlc3Npb24pfSgke2FyZ3VtZW50c18uam9pbihcIiwgXCIpfSlgXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IGZsYXREYXJ0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ub3BlcmFuZClcblxuICAgIHJldHVybiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJOZWdhdGVcIiA/IGBfc2VtYW50aWZvbGRJbnRlZ2VyTmVnYXRlKCR7b3BlcmFuZH0pYCA6IGAoISR7b3BlcmFuZH0pYFxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBsZWZ0ID0gZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5sZWZ0KVxuICAgIGNvbnN0IHJpZ2h0ID0gZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yaWdodClcblxuICAgIGlmIChbXCJJbnRlZ2VyQWRkXCIsIFwiSW50ZWdlclN1YnRyYWN0XCIsIFwiSW50ZWdlck11bHRpcGx5XCJdLmluY2x1ZGVzKGV4cHJlc3Npb24ub3BlcmF0aW9uKSkge1xuICAgICAgY29uc3QgaGVscGVyID0gZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyQWRkXCIgPyBcIl9zZW1hbnRpZm9sZEludGVnZXJBZGRcIiA6XG4gICAgICAgIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlclN1YnRyYWN0XCIgPyBcIl9zZW1hbnRpZm9sZEludGVnZXJTdWJ0cmFjdFwiIDogXCJfc2VtYW50aWZvbGRJbnRlZ2VyTXVsdGlwbHlcIlxuXG4gICAgICByZXR1cm4gYCR7aGVscGVyfSgke2xlZnR9LCAke3JpZ2h0fSlgXG4gICAgfVxuICAgIHJldHVybiBgKCR7bGVmdH0gJHtiaW5hcnlPcGVyYXRpb25TcGVsbGluZyhleHByZXNzaW9uLm9wZXJhdGlvbiwgXCJkYXJ0XCIpfSAke3JpZ2h0fSlgXG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuc3VwcG9ydGVkIERhcnQgZXhwcmVzc2lvbiByZWFjaGVkIGZvcm1hdHRlciBwbGFubmluZyBhZnRlciBwcmVmbGlnaHQuXCIpXG59XG5cbi8qKlxuICogUHJlc2VydmVzIGEgS290bGluIGlkZW50aWZpZXIgc3BlbGxpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIElkZW50aWZpZXIgc3BlbGxpbmcuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBVbmNoYW5nZWQgc3BlbGxpbmcuXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5SWRlbnRpZmllcihuYW1lKSB7XG4gIHJldHVybiBuYW1lXG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIEphdmFTY3JpcHQtZmFtaWx5IGV4ZWN1dGlvbiBjYW4gY3JlYXRlIElFRUUtNzU0IHNpZ25lZCB6ZXJvLlxuICogU2VtYW50aWZvbGQgaW50ZWdlcnMgaGF2ZSBvbmUgbWF0aGVtYXRpY2FsIHplcm8sIHNvIHRob3NlIHRhcmdldHMgY2Fub25pY2FsaXplXG4gKiB0aGVpciBvYnNlcnZhYmxlIHNjYWxhciBvdXRwdXQgd2l0aG91dCBjaGFuZ2luZyB0aGUgb3BlcmF0aW9uIHRyZWUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBWYWxpZGF0ZWQgc2VtYW50aWMgbW9kdWxlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgY2Fub25pY2FsIG91dHB1dCByZW5kZXJpbmcgaXMgcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlc0Nhbm9uaWNhbFplcm9SZW5kZXJpbmcobW9kdWxlKSB7XG4gIHJldHVybiBtb2R1bGUuZnVuY3Rpb25zLnNvbWUoKGRlY2xhcmF0aW9uKSA9PiBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihkZWNsYXJhdGlvbi5ib2R5KSkgfHxcbiAgICBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihtb2R1bGUuZW50cnlQb2ludC5ib2R5KVxufVxuXG4vKipcbiAqIENoZWNrcyBvbmUgYmxvY2sgZm9yIHNpZ24tcHJvZHVjaW5nIGludGVnZXIgb3BlcmF0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIC0gU2VtYW50aWMgYmxvY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBhIG5lc3RlZCBleHByZXNzaW9uIGNhbiBwcm9kdWNlIHNpZ25lZCB6ZXJvIGluIEphdmFTY3JpcHQuXG4gKi9cbmZ1bmN0aW9uIGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGJsb2NrKSB7XG4gIHJldHVybiBibG9jay5zdGF0ZW1lbnRzLnNvbWUoKHN0YXRlbWVudCkgPT4ge1xuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5jb25kaXRpb24pIHx8XG4gICAgICAgIGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5jb25zZXF1ZW50KSB8fFxuICAgICAgICBCb29sZWFuKHN0YXRlbWVudC5hbHRlcm5hdGUgJiYgYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmFsdGVybmF0ZSkpXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50Lmxpc3QpIHx8IGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5ib2R5KVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5tYXApIHx8IGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5ib2R5KVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuY29uZGl0aW9uKSB8fCBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuYm9keSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgIHJldHVybiBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuYm9keSkgfHwgKHN0YXRlbWVudC5oYW5kbGVycyA/PyBbXSkuc29tZSgoaGFuZGxlcikgPT4gYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oaGFuZGxlci5jYXRjaEJvZHkpKSB8fFxuICAgICAgICAoc3RhdGVtZW50LmZpbmFsbHlCb2R5ID8gYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmZpbmFsbHlCb2R5KSA6IGZhbHNlKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJSYWlzZVN0YXRlbWVudFwiKSByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuZXJyb3IubWVzc2FnZSlcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5pbml0aWFsaXplcilcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuZXhwcmVzc2lvbilcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHtcbiAgICAgIHJldHVybiBCb29sZWFuKHN0YXRlbWVudC5leHByZXNzaW9uICYmIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmV4cHJlc3Npb24pKVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9KVxufVxuXG4vKipcbiAqIENoZWNrcyBvbmUgZXhwcmVzc2lvbiB0cmVlIGZvciBzaWduLXByb2R1Y2luZyBpbnRlZ2VyIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBTZW1hbnRpYyBleHByZXNzaW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyB0cmVlIGNvbnRhaW5zIGludGVnZXIgbmVnYXRpb24gb3IgbXVsdGlwbGljYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbikge1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTmVnYXRlXCIgfHwgZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLm9wZXJhbmQpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJNdWx0aXBseVwiIHx8IGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5sZWZ0KSB8fFxuICAgICAgZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLnJpZ2h0KVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24uYXJndW1lbnRzLnNvbWUoKGFyZ3VtZW50KSA9PiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGFyZ3VtZW50KSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5hcmd1bWVudHMuc29tZSgoYXJndW1lbnQpID0+IGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oYXJndW1lbnQpKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNZW1iZXJSZWFkXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24ucmVjZWl2ZXIpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJMaXN0TGl0ZXJhbFwiKSByZXR1cm4gZXhwcmVzc2lvbi5lbGVtZW50cy5zb21lKChlbGVtZW50KSA9PiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGVsZW1lbnQpKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTGl0ZXJhbFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5lbnRyaWVzLnNvbWUoKGVudHJ5KSA9PiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGVudHJ5LmtleSkgfHxcbiAgICAgIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZW50cnkudmFsdWUpKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJMaXN0SW5kZXhFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLmNvbGxlY3Rpb24pIHx8IGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5pbmRleClcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5jb2xsZWN0aW9uKSB8fCBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24ua2V5KVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIikgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5jb2xsZWN0aW9uKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxTb21lXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24udmFsdWUpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbElzUHJlc2VudFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsVW53cmFwXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLm9wZXJhbmQpXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBNYXBzIG9uZSBhbHJlYWR5IHZhbGlkYXRlZCBzZW1hbnRpYyBvcGVyYXRpb24gdG8gdGFyZ2V0IHN5bnRheC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNCaW5hcnlPcGVyYXRpb259IG9wZXJhdGlvbiAtIENsb3NlZCBzZW1hbnRpYyBvcGVyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHJldHVybnMge3N0cmluZ30gVGFyZ2V0IG9wZXJhdG9yIHNwZWxsaW5nLlxuICovXG5mdW5jdGlvbiBiaW5hcnlPcGVyYXRpb25TcGVsbGluZyhvcGVyYXRpb24sIGxhbmd1YWdlKSB7XG4gIGNvbnN0IHN5bnRheCA9IGJpbmFyeU9wZXJhdGlvblN5bnRheFtvcGVyYXRpb25dXG5cbiAgaWYgKGxhbmd1YWdlID09IFwicGhwXCIgJiYgc3ludGF4LnBocCkgcmV0dXJuIHN5bnRheC5waHBcbiAgaWYgKGxhbmd1YWdlID09IFwicHl0aG9uXCIgJiYgc3ludGF4LnB5dGhvbikgcmV0dXJuIHN5bnRheC5weXRob25cbiAgaWYgKChsYW5ndWFnZSA9PSBcInBocFwiIHx8IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiKSAmJiBzeW50YXguc3RyaWN0KSByZXR1cm4gc3ludGF4LnN0cmljdFxuXG4gIHJldHVybiBzeW50YXguZGVmYXVsdFxufVxuIl19
|
|
2874
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL3NoYXJlZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsK0JBQStCLEVBQUUsd0JBQXdCLEVBQUUsNEJBQTRCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN4SCxPQUFPLEVBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sY0FBYyxDQUFBO0FBRTlELDhGQUE4RjtBQUM5RixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFBO0FBQ2pGLG9LQUFvSztBQUNwSyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDMUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUN6RCxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzNELGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDOUQsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN2RCxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUN6QyxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzNELGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUM7SUFDakQseUJBQXlCLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN6RCxlQUFlLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUM5QyxzQkFBc0IsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDO0lBQ3RELGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBQyxDQUFDO0lBQzlDLGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDOUQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUM7SUFDOUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUNyRCxXQUFXLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzFELGNBQWMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7Q0FDOUQsQ0FBQyxDQUFBO0FBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQTtBQUNuSCxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDckYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ3JGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNyRixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDckYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ3JGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNyRixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDckYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcs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Q0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDcEksQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSwwQkFBMEI7UUFBRSxPQUFPLHdDQUF3QyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUN6SCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksY0FBYztRQUFFLE9BQU8sd0NBQXdDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3hHLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxtQkFBbUIsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDbEYsT0FBTyx3Q0FBd0MsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDckUsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsUUFBUTtJQUNsRCxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUUvQyxJQUFJLFFBQVEsSUFBSSxLQUFLLElBQUksTUFBTSxDQUFDLEdBQUc7UUFBRSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUE7SUFDdEQsSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQyxNQUFNO1FBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFBO0lBQy9ELElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxJQUFJLFFBQVEsSUFBSSxZQUFZLElBQUksUUFBUSxJQUFJLFlBQVksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNO1FBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFBO0lBRXRILE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQTtBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7dW5zdXBwb3J0ZWRDYXBhYmlsaXR5fSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2lzRGVuc2VBcnJheX0gZnJvbSBcIi4uL2FycmF5LmpzXCJcbmltcG9ydCB7dmFsaWRhdGVCYWNrZW5kVHlwZXN9IGZyb20gXCIuLi9zZW1hbnRpYy92YWxpZGF0ZS5qc1wiXG5pbXBvcnQge3ZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIsIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllciwgdmFsaWRhdGVUYXJnZXRUeXBlSWRlbnRpZmllcn0gZnJvbSBcIi4vaWRlbnRpZmllcnMuanNcIlxuaW1wb3J0IHtlbWl0U2NhbGFyVHlwZSwgZW1pdFN0cmluZ0xpdGVyYWx9IGZyb20gXCIuL3NjYWxhcnMuanNcIlxuXG4vKiogQHR5cGUge1JlYWRvbmx5PFJlY29yZDxpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1VuYXJ5T3BlcmF0aW9uLCBzdHJpbmc+Pn0gKi9cbmNvbnN0IHVuYXJ5T3BlcmF0aW9uU3ludGF4ID0gT2JqZWN0LmZyZWV6ZSh7Qm9vbGVhbk5vdDogXCIhXCIsIEludGVnZXJOZWdhdGU6IFwiLVwifSlcbi8qKiBAdHlwZSB7UmVhZG9ubHk8UmVjb3JkPGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljQmluYXJ5T3BlcmF0aW9uLCBSZWFkb25seTx7ZGVmYXVsdDogc3RyaW5nLCBwaHA/OiBzdHJpbmcsIHB5dGhvbj86IHN0cmluZywgc3RyaWN0Pzogc3RyaW5nfT4+Pn0gKi9cbmNvbnN0IGJpbmFyeU9wZXJhdGlvblN5bnRheCA9IE9iamVjdC5mcmVlemUoe1xuICBCb29sZWFuQW5kOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIiYmXCIsIHB5dGhvbjogXCJhbmRcIn0pLFxuICBCb29sZWFuRXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPT1cIiwgc3RyaWN0OiBcIj09PVwifSksXG4gIEJvb2xlYW5Ob3RFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCIhPVwiLCBzdHJpY3Q6IFwiIT09XCJ9KSxcbiAgQm9vbGVhbk9yOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcInx8XCIsIHB5dGhvbjogXCJvclwifSksXG4gIEludGVnZXJBZGQ6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiK1wifSksXG4gIEludGVnZXJFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCI9PVwiLCBzdHJpY3Q6IFwiPT09XCJ9KSxcbiAgSW50ZWdlckdyZWF0ZXJUaGFuOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIj5cIn0pLFxuICBJbnRlZ2VyR3JlYXRlclRoYW5PckVxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIj49XCJ9KSxcbiAgSW50ZWdlckxlc3NUaGFuOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIjxcIn0pLFxuICBJbnRlZ2VyTGVzc1RoYW5PckVxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIjw9XCJ9KSxcbiAgSW50ZWdlck11bHRpcGx5OiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIipcIn0pLFxuICBJbnRlZ2VyTm90RXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiIT1cIiwgc3RyaWN0OiBcIiE9PVwifSksXG4gIEludGVnZXJTdWJ0cmFjdDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCItXCJ9KSxcbiAgU3RyaW5nQ29uY2F0OiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIitcIiwgcGhwOiBcIi5cIn0pLFxuICBTdHJpbmdFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCI9PVwiLCBzdHJpY3Q6IFwiPT09XCJ9KSxcbiAgU3RyaW5nTm90RXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiIT1cIiwgc3RyaWN0OiBcIiE9PVwifSlcbn0pXG5jb25zdCB0YXNrMDA1TGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCIsIFwiY1wiLCBcImRhcnRcIiwgXCJ6aWdcIiwgXCJweXRob25cIl0pXG5jb25zdCB0YXNrMDA2TGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAwN0xhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IHRhc2swMDhMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDA5TGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAxMUxhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IHRhc2swMTJMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDE0TGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAzMkxhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IHRhc2swMzNMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDQ4Q29uZGl0aW9uYWxMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCBib3VuZGVkU3VidHlwaW5nTGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIl0pXG5jb25zdCBqYXZhUmVmZXJlbmNlTWV0aG9kSG9va3MgPSBuZXcgU2V0KFtcImNsb25lXCIsIFwiZXF1YWxzXCIsIFwiZmluYWxpemVcIiwgXCJnZXRDbGFzc1wiLCBcImhhc2hDb2RlXCIsIFwibm90aWZ5XCIsIFwibm90aWZ5QWxsXCIsIFwidG9TdHJpbmdcIiwgXCJ3YWl0XCJdKVxuY29uc3QgamF2YXNjcmlwdFJlZmVyZW5jZU1ldGhvZEhvb2tzID0gbmV3IFNldChbXG4gIFwiX19kZWZpbmVHZXR0ZXJfX1wiLCBcIl9fZGVmaW5lU2V0dGVyX19cIiwgXCJfX2xvb2t1cEdldHRlcl9fXCIsIFwiX19sb29rdXBTZXR0ZXJfX1wiLCBcIl9fcHJvdG9fX1wiLCBcImNvbnN0cnVjdG9yXCIsXG4gIFwiaGFzT3duUHJvcGVydHlcIiwgXCJpc1Byb3RvdHlwZU9mXCIsIFwicHJvcGVydHlJc0VudW1lcmFibGVcIiwgXCJ0b0xvY2FsZVN0cmluZ1wiLCBcInRvU3RyaW5nXCIsIFwidmFsdWVPZlwiXG5dKVxuY29uc3QgcnVieVJlZmVyZW5jZU1ldGhvZEhvb2tzID0gbmV3IFNldChbXG4gIFwiX19zZW5kX19cIiwgXCJleHRlbmRcIiwgXCJmZXRjaFwiLCBcImluc3RhbmNlX2V2YWxcIiwgXCJpbnN0YW5jZV9leGVjXCIsIFwibWV0aG9kXCIsIFwibWV0aG9kX21pc3NpbmdcIiwgXCJwdWJsaWNfc2VuZFwiLFxuICBcInJlc3BvbmRfdG9fbWlzc2luZz9cIiwgXCJzZW5kXCIsIFwic2luZ2xldG9uX2NsYXNzXCIsIFwic2l6ZVwiXG5dKVxuY29uc3QgamF2YU9iamVjdEluc3RhbmNlTWV0aG9kU2lnbmF0dXJlcyA9IG5ldyBTZXQoW1xuICBcImNsb25lKClcIiwgXCJlcXVhbHMoT2JqZWN0KVwiLCBcImZpbmFsaXplKClcIiwgXCJnZXRDbGFzcygpXCIsIFwiaGFzaENvZGUoKVwiLCBcIm5vdGlmeSgpXCIsIFwibm90aWZ5QWxsKClcIiwgXCJ0b1N0cmluZygpXCIsXG4gIFwid2FpdCgpXCIsIFwid2FpdChsb25nKVwiLCBcIndhaXQobG9uZyxpbnQpXCJcbl0pXG5cbi8qKlxuICogQ2hlY2tzIHRoZSBpbnRlbnRpb25hbGx5IG5hcnJvdyBiYWNrZW5kIGNvbnRyYWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZSBvciBiaW5hcnkgdGFyZ2V0LlxuICogQHBhcmFtIHt7ZXh0ZXJuYWxEZWNsYXJhdGlvbklkcz86IFNldDxzdHJpbmc+LCBwcm9ncmFtPzogYm9vbGVhbiwgdmlzaWJsZUZ1bmN0aW9ucz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb24+LCB2aXNpYmxlUmVjb3Jkcz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgdmlzaWJsZUNsYXNzZXM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPiwgdmlzaWJsZUludGVyZmFjZXM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JbnRlcmZhY2VEZWNsYXJhdGlvbj4sIHZpc2libGVFcnJvcnM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPiwgdmlzaWJsZUNhbGxFZmZlY3RzPzogTWFwPHN0cmluZywgU2V0PHN0cmluZz4+fX0gW29wdGlvbnNdIC0gUmVzb2x2ZWQgcHJvZ3JhbSB2YWxpZGF0aW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQmFja2VuZE1vZHVsZShtb2R1bGUsIGxhbmd1YWdlLCBvcHRpb25zID0ge30pIHtcbiAgaWYgKCFtb2R1bGUgfHwgdHlwZW9mIG1vZHVsZSAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobW9kdWxlKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIG1vZHVsZVwiLCB1bmRlZmluZWQpXG4gIH1cbiAgaWYgKG1vZHVsZS5raW5kICE9IFwiTW9kdWxlXCIpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgbW9kdWxlLmtpbmQsIG1vZHVsZS5sb2NhdGlvbilcbiAgaWYgKCFBcnJheS5pc0FycmF5KG1vZHVsZS5mdW5jdGlvbnMpIHx8ICFtb2R1bGUuZW50cnlQb2ludCB8fCB0eXBlb2YgbW9kdWxlLmVudHJ5UG9pbnQgIT0gXCJvYmplY3RcIiB8fFxuICAgIG1vZHVsZS5lbnRyeVBvaW50LmtpbmQgIT0gXCJFbnRyeVBvaW50XCIpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgbW9kdWxlIG1lbWJlcnNcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICBjb25zdCBkZWNsYXJlZFJlY29yZHMgPSBtb2R1bGUucmVjb3Jkc1xuICBjb25zdCByZWNvcmRzID0gZGVjbGFyZWRSZWNvcmRzID09PSB1bmRlZmluZWQgPyBbXSA6IGRlY2xhcmVkUmVjb3Jkc1xuICBjb25zdCBkZWNsYXJlZENsYXNzZXMgPSBtb2R1bGUuY2xhc3Nlc1xuICBjb25zdCBjbGFzc2VzID0gZGVjbGFyZWRDbGFzc2VzID09PSB1bmRlZmluZWQgPyBbXSA6IGRlY2xhcmVkQ2xhc3Nlc1xuICBjb25zdCBkZWNsYXJlZEVycm9ycyA9IG1vZHVsZS5lcnJvcnNcbiAgY29uc3QgZXJyb3JzID0gZGVjbGFyZWRFcnJvcnMgPT09IHVuZGVmaW5lZCA/IFtdIDogZGVjbGFyZWRFcnJvcnNcblxuICBpZiAoIUFycmF5LmlzQXJyYXkocmVjb3JkcykpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgcmVjb3JkIGRlY2xhcmF0aW9uc1wiLCBtb2R1bGUubG9jYXRpb24pXG4gIGlmICghQXJyYXkuaXNBcnJheShjbGFzc2VzKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCByZWZlcmVuY2UgY2xhc3MgZGVjbGFyYXRpb25zXCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgaWYgKCFBcnJheS5pc0FycmF5KGVycm9ycykpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgZXJyb3IgZGVjbGFyYXRpb25zXCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgaWYgKG1vZHVsZS5mdW5jdGlvbnMubGVuZ3RoID09IDAgJiYgKCFvcHRpb25zLnByb2dyYW0gfHxcbiAgICByZWNvcmRzLmxlbmd0aCA9PSAwICYmIGNsYXNzZXMubGVuZ3RoID09IDAgJiYgZXJyb3JzLmxlbmd0aCA9PSAwICYmIG1vZHVsZS5lbnRyeVBvaW50LmJvZHk/LnN0YXRlbWVudHM/Lmxlbmd0aCA9PSAwKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtb2R1bGUgd2l0aG91dCBkZWNsYXJhdGlvbnMgb3IgZXhlY3V0YWJsZSBlbnRyeVwiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKCF0YXNrMDEyTGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkgJiYgbW9kdWxlSGFzVHlwZVBhcmFtZXRlcnMobW9kdWxlKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAxMiB0eXBlIHBhcmFtZXRlcnMgYW5kIGdlbmVyaWMgZGVjbGFyYXRpb25zXCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBpZiAocmVjb3Jkcy5sZW5ndGggPiAwICYmICF0YXNrMDA5TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDkgY2xvc2VkIHJlY29yZHNcIiwgcmVjb3Jkc1swXT8ubG9jYXRpb24gPz8gbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGlmIChjbGFzc2VzLmxlbmd0aCA+IDAgJiYgIXRhc2swMzNMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAzMyByZWZlcmVuY2UgY2xhc3NlcywgbWV0aG9kcywgYW5kIGNvbnN0cnVjdG9yc1wiLCBjbGFzc2VzWzBdPy5sb2NhdGlvbiA/PyBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgY29uc3QgZGVjbGFyZWRJbnRlcmZhY2VzID0gbW9kdWxlLmludGVyZmFjZXNcbiAgY29uc3QgaW50ZXJmYWNlcyA9IGRlY2xhcmVkSW50ZXJmYWNlcyA9PT0gdW5kZWZpbmVkID8gW10gOiBkZWNsYXJlZEludGVyZmFjZXNcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoaW50ZXJmYWNlcykpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgaW50ZXJmYWNlIGRlY2xhcmF0aW9uc1wiLCBtb2R1bGUubG9jYXRpb24pXG4gIGlmIChpbnRlcmZhY2VzLmxlbmd0aCA+IDAgJiYgIWJvdW5kZWRTdWJ0eXBpbmdMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDA0OCBib3VuZGVkIHN1YnR5cGluZyBpbnRlcmZhY2VzXCIsIGludGVyZmFjZXNbMF0/LmxvY2F0aW9uID8/IG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBpZiAoIXRhc2swMTFMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgcmVqZWN0VHlwZWRFcnJvcnMobW9kdWxlLCBsYW5ndWFnZSlcbiAgaWYgKCF0YXNrMDMyTGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHJlamVjdENvbmRpdGlvbkNvbnRyb2xsZWRMb29wcyhtb2R1bGUsIGxhbmd1YWdlKVxuICBpZiAoIXRhc2swMTRMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgcmVqZWN0T3JkZXJlZE1hcENhcGFiaWxpdHkobW9kdWxlLCBsYW5ndWFnZSlcbiAgdmFsaWRhdGVSZWNvcmRUYXJnZXRzKHJlY29yZHMsIG1vZHVsZS5mdW5jdGlvbnMsIGxhbmd1YWdlLCBtb2R1bGUubG9jYXRpb24pXG4gIHZhbGlkYXRlSW50ZXJmYWNlVGFyZ2V0cyhpbnRlcmZhY2VzLCByZWNvcmRzLCBlcnJvcnMsIG1vZHVsZS5mdW5jdGlvbnMsIGxhbmd1YWdlLCBtb2R1bGUubG9jYXRpb24pXG4gIHZhbGlkYXRlUmVmZXJlbmNlQ2xhc3NUYXJnZXRzKGNsYXNzZXMsIHJlY29yZHMsIGVycm9ycywgbW9kdWxlLmZ1bmN0aW9ucywgaW50ZXJmYWNlcywgbGFuZ3VhZ2UsIG1vZHVsZS5sb2NhdGlvbilcbiAgaWYgKCF0YXNrMDA4TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHJlamVjdEl0ZXJhdGlvblN0YXRlbWVudHMobW9kdWxlLCBsYW5ndWFnZSlcbiAgaWYgKCF0YXNrMDA3TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHJlamVjdE9wdGlvbmFsVHlwZXMobW9kdWxlLCBsYW5ndWFnZSlcbiAgaWYgKCF0YXNrMDA2TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHJlamVjdENvbGxlY3Rpb25UeXBlcyhtb2R1bGUsIGxhbmd1YWdlKVxuICBjb25zdCBsb29wT3duZXJzID0gY29sbGVjdExvb3BPd25lcnMobW9kdWxlLCBsYW5ndWFnZSlcblxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGNsYXNzZXMpIHtcbiAgICB2YWxpZGF0ZUJsb2NrKGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmJvZHksIGxhbmd1YWdlLCBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5sb2NhdGlvbixcbiAgICAgIHthY3RpdmU6IFtdLCBvd25lcjogZGVjbGFyYXRpb24uY29uc3RydWN0b3IsIG93bmVyczogbG9vcE93bmVyc30sIG5ldyBTZXQoKSwgb3B0aW9ucy5leHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGRlY2xhcmF0aW9uLm1ldGhvZHMpIHtcbiAgICAgIHZhbGlkYXRlQmxvY2sobWV0aG9kLmJvZHksIGxhbmd1YWdlLCBtZXRob2QubG9jYXRpb24sXG4gICAgICAgIHthY3RpdmU6IFtdLCBvd25lcjogbWV0aG9kLCBvd25lcnM6IGxvb3BPd25lcnN9LCBuZXcgU2V0KCksIG9wdGlvbnMuZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUJsb2NrKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIGxhbmd1YWdlLCBtb2R1bGUuZW50cnlQb2ludC5sb2NhdGlvbixcbiAgICB7YWN0aXZlOiBbXSwgb3duZXI6IG1vZHVsZS5lbnRyeVBvaW50LCBvd25lcnM6IGxvb3BPd25lcnN9LCBuZXcgU2V0KCksIG9wdGlvbnMuZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgY29uc3QgZGVjbGFyYXRpb25JZHMgPSBuZXcgU2V0KClcbiAgY29uc3QgZGVjbGFyYXRpb25OYW1lcyA9IG5ldyBTZXQoKVxuICBjb25zdCB0YXJnZXREZWNsYXJhdGlvbk5hbWVzID0gbmV3IFNldCgpXG5cbiAgZm9yIChjb25zdCBmdW5jdGlvbkRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICBpZiAoIWZ1bmN0aW9uRGVjbGFyYXRpb24gfHwgdHlwZW9mIGZ1bmN0aW9uRGVjbGFyYXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGZ1bmN0aW9uRGVjbGFyYXRpb24pIHx8XG4gICAgICBmdW5jdGlvbkRlY2xhcmF0aW9uLmtpbmQgIT0gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIgfHwgIUFycmF5LmlzQXJyYXkoZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBmdW5jdGlvbiBkZWNsYXJhdGlvblwiLCBtb2R1bGUubG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSwgXCJmdW5jdGlvblwiLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIGlmIChkZWNsYXJhdGlvbk5hbWVzLmhhcyhmdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBkdXBsaWNhdGUgZnVuY3Rpb24gJyR7ZnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lfSdgLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICBkZWNsYXJhdGlvbk5hbWVzLmFkZChmdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUpXG4gICAgY29uc3QgdGFyZ2V0RGVjbGFyYXRpb25OYW1lID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIlxuICAgICAgPyBmdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUucmVwbGFjZSgvW0EtWl0vZ3UsIChjaGFyYWN0ZXIpID0+IGNoYXJhY3Rlci50b0xvd2VyQ2FzZSgpKVxuICAgICAgOiBmdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWVcblxuICAgIGlmICh0YXJnZXREZWNsYXJhdGlvbk5hbWVzLmhhcyh0YXJnZXREZWNsYXJhdGlvbk5hbWUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGB0YXJnZXQgZnVuY3Rpb24tbmFtZSBjb2xsaXNpb24gJyR7ZnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lfSdgLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICB0YXJnZXREZWNsYXJhdGlvbk5hbWVzLmFkZCh0YXJnZXREZWNsYXJhdGlvbk5hbWUpXG4gICAgaWYgKHR5cGVvZiBmdW5jdGlvbkRlY2xhcmF0aW9uLmlkICE9IFwic3RyaW5nXCIgfHwgIS9eKD86W2Etel1bYS16MC05Ll8tXSojKT9mdW5jdGlvbjpbMC05XSskL3UudGVzdChmdW5jdGlvbkRlY2xhcmF0aW9uLmlkKSB8fFxuICAgICAgZGVjbGFyYXRpb25JZHMuaGFzKGZ1bmN0aW9uRGVjbGFyYXRpb24uaWQpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZHVwbGljYXRlIG9yIGludmFsaWQgZnVuY3Rpb24gZGVjbGFyYXRpb24gaWRlbnRpdHlcIiwgZnVuY3Rpb25EZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gICAgZGVjbGFyYXRpb25JZHMuYWRkKGZ1bmN0aW9uRGVjbGFyYXRpb24uaWQpXG4gICAgdmFsaWRhdGVUeXBlUGFyYW1ldGVyVGFyZ2V0cyhmdW5jdGlvbkRlY2xhcmF0aW9uLCBsYW5ndWFnZSlcblxuICAgIGlmICghdGFzazAwNUxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpICYmIGZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycy5sZW5ndGggIT0gMikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImZ1bmN0aW9uIHBhcmFtZXRlciBjb3VudCBvdGhlciB0aGFuIHR3b1wiLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIXRhc2swMDVMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSAmJiBmdW5jdGlvbkRlY2xhcmF0aW9uLnJldHVyblR5cGU/LmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIgJiZcbiAgICAgIGZ1bmN0aW9uRGVjbGFyYXRpb24ucmV0dXJuVHlwZS5uYW1lID09IFwidm9pZFwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDUgdm9pZCBmdW5jdGlvbiByZXR1cm5cIiwgZnVuY3Rpb25EZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVCbG9jayhmdW5jdGlvbkRlY2xhcmF0aW9uLmJvZHksIGxhbmd1YWdlLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgICAge2FjdGl2ZTogW10sIG93bmVyOiBmdW5jdGlvbkRlY2xhcmF0aW9uLCBvd25lcnM6IGxvb3BPd25lcnN9LCBuZXcgU2V0KCksIG9wdGlvbnMuZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcblxuICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycykge1xuICAgICAgaWYgKCFwYXJhbWV0ZXIgfHwgdHlwZW9mIHBhcmFtZXRlciAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocGFyYW1ldGVyKSB8fCBwYXJhbWV0ZXIua2luZCAhPSBcIlBhcmFtZXRlclwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgcGFyYW1ldGVyXCIsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgICB9XG4gICAgICB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCBwYXJhbWV0ZXIubmFtZSwgXCJwYXJhbWV0ZXJcIiwgcGFyYW1ldGVyLmxvY2F0aW9uKVxuICAgIH1cbiAgfVxuICB2YWxpZGF0ZUVycm9yVGFyZ2V0cyhlcnJvcnMsIHJlY29yZHMsIG1vZHVsZS5mdW5jdGlvbnMsIGxhbmd1YWdlLCBtb2R1bGUubG9jYXRpb24pXG4gIHZhbGlkYXRlU2NhZmZvbGRpbmdOYW1lcyhtb2R1bGUsIGxhbmd1YWdlKVxuICB2YWxpZGF0ZUJhY2tlbmRUeXBlcyhtb2R1bGUsIGxhbmd1YWdlLCB7XG4gICAgY2FsbEVmZmVjdHM6IG9wdGlvbnMudmlzaWJsZUNhbGxFZmZlY3RzLFxuICAgIGNsYXNzZXM6IG9wdGlvbnMudmlzaWJsZUNsYXNzZXMsXG4gICAgZXJyb3JzOiBvcHRpb25zLnZpc2libGVFcnJvcnMsXG4gICAgZnVuY3Rpb25zOiBvcHRpb25zLnZpc2libGVGdW5jdGlvbnMsXG4gICAgaW50ZXJmYWNlczogb3B0aW9ucy52aXNpYmxlSW50ZXJmYWNlcyxcbiAgICByZWNvcmRzOiBvcHRpb25zLnZpc2libGVSZWNvcmRzXG4gIH0pXG59XG5cbi8qKlxuICogUmVqZWN0cyBUYXNrIDAxNCBJUiB0cmFuc2FjdGlvbmFsbHkgYmVmb3JlIGEgbm9uLWNvaG9ydCB0YXJnZXQgYWxsb2NhdGVzIG91dHB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIENhbmRpZGF0ZSBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0T3JkZXJlZE1hcENhcGFiaWxpdHkobW9kdWxlLCBsYW5ndWFnZSkge1xuICBjb25zdCBub2RlID0gZmluZE9yZGVyZWRNYXBOb2RlKG1vZHVsZSlcblxuICBpZiAobm9kZSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDE0IG9yZGVyZWQtbWFwIGl0ZXJhdGlvblwiLCBkaWFnbm9zdGljTG9jYXRpb24obm9kZS5sb2NhdGlvbiwgbW9kdWxlLmxvY2F0aW9uKSlcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZmlyc3QgZGlzdGluY3Qgb3JkZXJlZC1tYXAgdHlwZSwgbGl0ZXJhbCwgb3IgbG9vcCBpbiBwYXJzZXItbmV1dHJhbCBJUi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgc3VidHJlZS5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFtzZWVuXSAtIEN5Y2xlIHByb3RlY3Rpb24uXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWR9IEZpcnN0IFRhc2sgMDE0IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGZpbmRPcmRlcmVkTWFwTm9kZSh2YWx1ZSwgc2VlbiA9IG5ldyBTZXQoKSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiIHx8IHNlZW4uaGFzKHZhbHVlKSkgcmV0dXJuIHVuZGVmaW5lZFxuICBzZWVuLmFkZCh2YWx1ZSlcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlcblxuICAgIGlmIChbXCJPcmRlcmVkTWFwVHlwZVwiLCBcIk9yZGVyZWRNYXBMaXRlcmFsXCIsIFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiXS5pbmNsdWRlcyhTdHJpbmcoY2FuZGlkYXRlLmtpbmQpKSkgcmV0dXJuIGNhbmRpZGF0ZVxuICB9XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IE9iamVjdC52YWx1ZXModmFsdWUpKSB7XG4gICAgY29uc3QgZm91bmQgPSBmaW5kT3JkZXJlZE1hcE5vZGUoY2hpbGQsIHNlZW4pXG5cbiAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZFxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIFJlamVjdHMgdHlwZWQgZXJyb3JzIGZvciBhIHRhcmdldCBvdXRzaWRlIHRoZSBUYXNrIDAxMSBjb2hvcnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDYW5kaWRhdGUgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdFR5cGVkRXJyb3JzKC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9ICovIG1vZHVsZSxcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIGxhbmd1YWdlKSB7XG4gIGlmICgobW9kdWxlLmVycm9ycyA/PyBbXSkubGVuZ3RoID4gMCkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAxMSB0eXBlZCBlcnJvcnMgYW5kIGhhbmRsaW5nXCIsIG1vZHVsZS5lcnJvcnM/LlswXT8ubG9jYXRpb24gPz8gbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykgcmVqZWN0VHlwZWRFcnJvckJsb2NrKGRlY2xhcmF0aW9uPy5ib2R5LCBsYW5ndWFnZSlcbiAgcmVqZWN0VHlwZWRFcnJvckJsb2NrKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIGxhbmd1YWdlKVxufVxuXG4vKipcbiAqIEZpbmRzIHR5cGVkLWVycm9yIHN0YXRlbWVudHMgd2l0aG91dCBkZXNjZW5kaW5nIHRocm91Z2ggbWFsZm9ybWVkIG9yIGN5Y2xpYyBibG9ja3MuXG4gKiBAcGFyYW0ge3Vua25vd259IGJsb2NrIC0gQ2FuZGlkYXRlIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW3NlZW5dIC0gVmlzaXRlZCBibG9ja3MuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0VHlwZWRFcnJvckJsb2NrKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gYmxvY2ssXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSAqLyBsYW5ndWFnZSxcbiAgLyoqIEB0eXBlIHtTZXQ8b2JqZWN0Pn0gKi8gc2VlbiA9IG5ldyBTZXQoKSkge1xuICBpZiAoIWJsb2NrIHx8IHR5cGVvZiBibG9jayAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmxvY2spIHx8IHNlZW4uaGFzKGJsb2NrKSkgcmV0dXJuXG4gIHNlZW4uYWRkKGJsb2NrKVxuICBjb25zdCBzdGF0ZW1lbnRzID0gUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShzdGF0ZW1lbnRzKSkgcmV0dXJuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSBjb250aW51ZVxuICAgIGlmIChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwia2luZFwiKSA9PSBcIlJhaXNlU3RhdGVtZW50XCIgfHwgUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIikgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDExIHR5cGVkIGVycm9ycyBhbmQgaGFuZGxpbmdcIixcbiAgICAgICAgZGlhZ25vc3RpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJsb2NhdGlvblwiKSwgUmVmbGVjdC5nZXQoYmxvY2ssIFwibG9jYXRpb25cIikpKVxuICAgIH1cbiAgICBpZiAoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIikgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RUeXBlZEVycm9yQmxvY2soUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImNvbnNlcXVlbnRcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgICAgcmVqZWN0VHlwZWRFcnJvckJsb2NrKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJhbHRlcm5hdGVcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgIH0gZWxzZSBpZiAoW1wiRm9yRWFjaFN0YXRlbWVudFwiLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiwgXCJXaGlsZVN0YXRlbWVudFwiXS5pbmNsdWRlcyhTdHJpbmcoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIikpKSkge1xuICAgICAgcmVqZWN0VHlwZWRFcnJvckJsb2NrKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGFyZ2V0LXZpc2libGUgbm9taW5hbCBlcnJvciBkZWNsYXJhdGlvbnMgYmVmb3JlIGVtaXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uW119IGVycm9ycyAtIEVycm9yIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb25bXX0gcmVjb3JkcyAtIFJlY29yZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb25bXX0gZnVuY3Rpb25zIC0gRnVuY3Rpb24gZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbW9kdWxlTG9jYXRpb24gLSBNb2R1bGUgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVFcnJvclRhcmdldHMoXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbltdfSAqLyBlcnJvcnMsXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb25bXX0gKi8gcmVjb3JkcyxcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uW119ICovIGZ1bmN0aW9ucyxcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIGxhbmd1YWdlLFxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSAqLyBtb2R1bGVMb2NhdGlvblxuKSB7XG4gIGNvbnN0IGlkcyA9IG5ldyBTZXQoKVxuICBjb25zdCBuYW1lcyA9IG5ldyBTZXQoWy4uLnJlY29yZHMsIC4uLmZ1bmN0aW9uc10ubWFwKCh7bmFtZX0pID0+IGxhbmd1YWdlID09IFwicGhwXCIgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOiBuYW1lKSlcbiAgY29uc3QgZm9yYmlkZGVuID0gbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyBuZXcgU2V0KFtcIkVycm9yXCIsIFwiQWdncmVnYXRlRXJyb3JcIl0pIDpcbiAgICBsYW5ndWFnZSA9PSBcInBocFwiID8gbmV3IFNldChbXCJUaHJvd2FibGVcIiwgXCJFeGNlcHRpb25cIiwgXCJSdW50aW1lRXhjZXB0aW9uXCIsIFwiRXJyb3JcIl0pIDpcbiAgICAgIGxhbmd1YWdlID09IFwicnVieVwiID8gbmV3IFNldChbXCJFeGNlcHRpb25cIiwgXCJTdGFuZGFyZEVycm9yXCIsIFwiU2NyaXB0RXJyb3JcIiwgXCJTeXN0ZW1FeGl0XCJdKSA6XG4gICAgICAgIGxhbmd1YWdlID09IFwiamF2YVwiID8gbmV3IFNldChbXCJUaHJvd2FibGVcIiwgXCJFeGNlcHRpb25cIiwgXCJSdW50aW1lRXhjZXB0aW9uXCIsIFwiRXJyb3JcIl0pIDogbmV3IFNldCgpXG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVycm9ycy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGVycm9yc1tpbmRleF1cbiAgICBjb25zdCBsb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihkZWNsYXJhdGlvbj8ubG9jYXRpb24sIG1vZHVsZUxvY2F0aW9uKVxuICAgIGNvbnN0IGZpZWxkcyA9IGRlY2xhcmF0aW9uICYmIHR5cGVvZiBkZWNsYXJhdGlvbiA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9uKVxuICAgICAgPyBPYmplY3Qua2V5cyhkZWNsYXJhdGlvbikuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCB0eXBlb2YgZGVjbGFyYXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9uKSB8fFxuICAgICAgZGVjbGFyYXRpb24ua2luZCAhPSBcIkVycm9yRGVjbGFyYXRpb25cIiB8fCBmaWVsZHMgIT0gXCJpZCxraW5kLGxvY2F0aW9uLG5hbWVcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBlcnJvciBkZWNsYXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24oZGVjbGFyYXRpb24ubG9jYXRpb24sIGxhbmd1YWdlLCBcImVycm9yIGRlY2xhcmF0aW9uIGxvY2F0aW9uXCIsIG1vZHVsZUxvY2F0aW9uKVxuICAgIHZhbGlkYXRlVGFyZ2V0VHlwZUlkZW50aWZpZXIobGFuZ3VhZ2UsIGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIGlmICgoZGVjbGFyYXRpb24uaWQgIT0gYGVycm9yOiR7aW5kZXh9YCAmJlxuICAgICAgIW5ldyBSZWdFeHAoYF5bYS16XVthLXowLTkuXy1dKiNlcnJvcjoke2luZGV4fSRgLCBcInVcIikudGVzdChkZWNsYXJhdGlvbi5pZCA/PyBcIlwiKSkgfHwgaWRzLmhhcyhkZWNsYXJhdGlvbi5pZCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJkdXBsaWNhdGUgb3IgaW52YWxpZCBlcnJvciBkZWNsYXJhdGlvbiBpZGVudGl0eVwiLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBkZWNsYXJhdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCkgOiBkZWNsYXJhdGlvbi5uYW1lXG5cbiAgICBpZiAobmFtZXMuaGFzKG5vcm1hbGl6ZWQpIHx8IGZvcmJpZGRlbi5oYXMoZGVjbGFyYXRpb24ubmFtZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGVycm9yIGRlY2xhcmF0aW9uIGNvbGxpc2lvbiAnJHtkZWNsYXJhdGlvbi5uYW1lfSdgLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gICAgaWRzLmFkZChkZWNsYXJhdGlvbi5pZClcbiAgICBuYW1lcy5hZGQobm9ybWFsaXplZClcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBldmVyeSBub21pbmFsIHJlY29yZCBpZGVudGlmaWVyLCBpZGVudGl0eSwgZmllbGQsIGFuZCB0YXJnZXQgY29sbGlzaW9uIGJlZm9yZSBvdXRwdXQgYWxsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb25bXX0gcmVjb3JkcyAtIENhbmRpZGF0ZSByZWNvcmRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uW119IGZ1bmN0aW9ucyAtIENhbmRpZGF0ZSBmdW5jdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBtb2R1bGVMb2NhdGlvbiAtIE1vZHVsZSBmYWxsYmFjayBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlY29yZFRhcmdldHMocmVjb3JkcywgZnVuY3Rpb25zLCBsYW5ndWFnZSwgbW9kdWxlTG9jYXRpb24pIHtcbiAgY29uc3QgZGVjbGFyYXRpb25JZHMgPSBuZXcgU2V0KClcbiAgY29uc3QgdGFyZ2V0TmFtZXMgPSBuZXcgU2V0KClcblxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9ucykge1xuICAgIGlmICghZGVjbGFyYXRpb24gfHwgdHlwZW9mIGRlY2xhcmF0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbikpIGNvbnRpbnVlXG4gICAgY29uc3QgbmFtZSA9IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcIm5hbWVcIilcblxuICAgIGlmICh0eXBlb2YgbmFtZSAhPSBcInN0cmluZ1wiKSBjb250aW51ZVxuICAgIHRhcmdldE5hbWVzLmFkZChsYW5ndWFnZSA9PSBcInBocFwiID8gbmFtZS50b0xvd2VyQ2FzZSgpIDogbmFtZSlcbiAgfVxuXG4gIGZvciAobGV0IHJlY29yZEluZGV4ID0gMDsgcmVjb3JkSW5kZXggPCByZWNvcmRzLmxlbmd0aDsgcmVjb3JkSW5kZXggKz0gMSkge1xuICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZHNbcmVjb3JkSW5kZXhdXG4gICAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24ocmVjb3JkPy5sb2NhdGlvbiwgbW9kdWxlTG9jYXRpb24pXG4gICAgY29uc3QgcmVjb3JkS2V5cyA9IHJlY29yZCAmJiB0eXBlb2YgcmVjb3JkID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkocmVjb3JkKVxuICAgICAgPyBPYmplY3Qua2V5cyhyZWNvcmQpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuICAgICAgOiBcIlwiXG5cbiAgICBpZiAoIXJlY29yZCB8fCB0eXBlb2YgcmVjb3JkICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShyZWNvcmQpIHx8IHJlY29yZC5raW5kICE9IFwiUmVjb3JkRGVjbGFyYXRpb25cIiB8fFxuICAgICAgIVtcImZpZWxkcyxpZCxraW5kLGxvY2F0aW9uLG5hbWVcIiwgXCJmaWVsZHMsaWQsa2luZCxsb2NhdGlvbixuYW1lLHR5cGVQYXJhbWV0ZXJzXCJdLmluY2x1ZGVzKHJlY29yZEtleXMpIHx8ICFpc0RlbnNlQXJyYXkocmVjb3JkLmZpZWxkcykpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgcmVjb3JkIGRlY2xhcmF0aW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihyZWNvcmQubG9jYXRpb24sIGxhbmd1YWdlLCBcInJlY29yZCBkZWNsYXJhdGlvbiBsb2NhdGlvblwiLCBtb2R1bGVMb2NhdGlvbilcbiAgICB2YWxpZGF0ZVRhcmdldFR5cGVJZGVudGlmaWVyKGxhbmd1YWdlLCByZWNvcmQubmFtZSwgcmVjb3JkLmxvY2F0aW9uKVxuICAgIGlmICh0eXBlb2YgcmVjb3JkLmlkICE9IFwic3RyaW5nXCIgfHwgIW5ldyBSZWdFeHAoYF4oPzpbYS16XVthLXowLTkuXy1dKiMpP3JlY29yZDoke3JlY29yZEluZGV4fSRgLCBcInVcIikudGVzdChyZWNvcmQuaWQpIHx8XG4gICAgICBkZWNsYXJhdGlvbklkcy5oYXMocmVjb3JkLmlkKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImR1cGxpY2F0ZSBvciBpbnZhbGlkIHJlY29yZCBkZWNsYXJhdGlvbiBpZGVudGl0eVwiLCByZWNvcmQubG9jYXRpb24pXG4gICAgfVxuICAgIGRlY2xhcmF0aW9uSWRzLmFkZChyZWNvcmQuaWQpXG4gICAgdmFsaWRhdGVUeXBlUGFyYW1ldGVyVGFyZ2V0cyhyZWNvcmQsIGxhbmd1YWdlKVxuICAgIGNvbnN0IHRhcmdldE5hbWUgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gcmVjb3JkLm5hbWUudG9Mb3dlckNhc2UoKSA6IHJlY29yZC5uYW1lXG5cbiAgICBpZiAodGFyZ2V0TmFtZXMuaGFzKHRhcmdldE5hbWUpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGByZWNvcmQgZGVjbGFyYXRpb24gY29sbGlzaW9uICcke3JlY29yZC5uYW1lfSdgLCByZWNvcmQubG9jYXRpb24pXG4gICAgdGFyZ2V0TmFtZXMuYWRkKHRhcmdldE5hbWUpXG4gICAgY29uc3QgZmllbGROYW1lcyA9IG5ldyBTZXQoKVxuXG4gICAgZm9yIChsZXQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCByZWNvcmQuZmllbGRzLmxlbmd0aDsgZmllbGRJbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IHJlY29yZC5maWVsZHNbZmllbGRJbmRleF1cbiAgICAgIGNvbnN0IGZpZWxkTG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oZmllbGQ/LmxvY2F0aW9uLCByZWNvcmQubG9jYXRpb24pXG4gICAgICBjb25zdCBmaWVsZEtleXMgPSBmaWVsZCAmJiB0eXBlb2YgZmllbGQgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShmaWVsZClcbiAgICAgICAgPyBPYmplY3Qua2V5cyhmaWVsZCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG4gICAgICAgIDogXCJcIlxuXG4gICAgICBpZiAoIWZpZWxkIHx8IHR5cGVvZiBmaWVsZCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZmllbGQpIHx8IGZpZWxkLmtpbmQgIT0gXCJSZWNvcmRGaWVsZFwiIHx8XG4gICAgICAgIGZpZWxkS2V5cyAhPSBcImlkLGtpbmQsbG9jYXRpb24sbmFtZSx0eXBlXCIpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCByZWNvcmQgZmllbGRcIiwgZmllbGRMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGZpZWxkLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJyZWNvcmQgZmllbGQgbG9jYXRpb25cIiwgcmVjb3JkLmxvY2F0aW9uKVxuICAgICAgaWYgKGZpZWxkLmlkICE9IGAke3JlY29yZC5pZH06ZmllbGQ6JHtmaWVsZEluZGV4fWApIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImR1cGxpY2F0ZSBvciBpbnZhbGlkIHJlY29yZCBmaWVsZCBpZGVudGl0eVwiLCBmaWVsZC5sb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgZmllbGQubmFtZSwgXCJyZWNvcmQgZmllbGRcIiwgZmllbGQubG9jYXRpb24pXG4gICAgICBjb25zdCBjb2xsaXNpb24gPSBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiAmJiBbXCJjb25zdHJ1Y3RvclwiLCBcInByb3RvdHlwZVwiLCBcIl9fcHJvdG9fX1wiXS5pbmNsdWRlcyhmaWVsZC5uYW1lKSB8fFxuICAgICAgICBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBbXCJjb25zdHJ1Y3RvclwiLCBcInByb3RvdHlwZVwiLCBcIl9fcHJvdG9fX1wiXS5pbmNsdWRlcyhmaWVsZC5uYW1lKSB8fFxuICAgICAgICBsYW5ndWFnZSA9PSBcInBocFwiICYmIGZpZWxkLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKFwiX19cIikgfHxcbiAgICAgICAgbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgJiYgW1wiaW5pdGlhbGl6ZVwiLCBcImZyZWV6ZVwiLCBcInNlbmRcIiwgXCJwdWJsaWNfc2VuZFwiLCBcIm1ldGhvZFwiLCBcInNpbmdsZXRvbl9jbGFzc1wiXS5pbmNsdWRlcyhmaWVsZC5uYW1lKSB8fFxuICAgICAgICBsYW5ndWFnZSA9PSBcImphdmFcIiAmJiBqYXZhT2JqZWN0SW5zdGFuY2VNZXRob2RTaWduYXR1cmVzLmhhcyhgJHtmaWVsZC5uYW1lfSgpYClcblxuICAgICAgaWYgKGNvbGxpc2lvbikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgcmVjb3JkIGZpZWxkIGNvbGxpc2lvbiAnJHtmaWVsZC5uYW1lfSdgLCBmaWVsZC5sb2NhdGlvbilcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gZmllbGQubmFtZS50b0xvd2VyQ2FzZSgpIDogZmllbGQubmFtZVxuXG4gICAgICBpZiAoZmllbGROYW1lcy5oYXMobm9ybWFsaXplZCkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGR1cGxpY2F0ZSB0YXJnZXQgcmVjb3JkIGZpZWxkICcke2ZpZWxkLm5hbWV9J2AsIGZpZWxkLmxvY2F0aW9uKVxuICAgICAgZmllbGROYW1lcy5hZGQobm9ybWFsaXplZClcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGV4YWN0IHRhcmdldC12aXNpYmxlIHNoYXBlIG9mIGV2ZXJ5IHJlZmVyZW5jZSBjbGFzcyBiZWZvcmUgb3V0cHV0IGFsbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb25bXX0gY2xhc3NlcyAtIENhbmRpZGF0ZSBjbGFzc2VzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbltdfSByZWNvcmRzIC0gRXhpc3RpbmcgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbltdfSBlcnJvcnMgLSBFeGlzdGluZyB0eXBlZCBlcnJvcnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb25bXX0gZnVuY3Rpb25zIC0gRXhpc3RpbmcgZnVuY3Rpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gbW9kdWxlTG9jYXRpb24gLSBGYWxsYmFjayBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgZXhhY3QgdGFyZ2V0LXZpc2libGUgc2hhcGUgb2YgZXZlcnkgaW50ZXJmYWNlIGFuZCBpdHMgb3ZlcnJpZGUgY29udHJhY3RzIGJlZm9yZSBvdXRwdXQgYWxsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW50ZXJmYWNlRGVjbGFyYXRpb25bXX0gaW50ZXJmYWNlcyAtIENhbmRpZGF0ZSBpbnRlcmZhY2VzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbltdfSByZWNvcmRzIC0gRXhpc3RpbmcgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbltdfSBlcnJvcnMgLSBFeGlzdGluZyB0eXBlZCBlcnJvcnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb25bXX0gZnVuY3Rpb25zIC0gRXhpc3RpbmcgZnVuY3Rpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gbW9kdWxlTG9jYXRpb24gLSBGYWxsYmFjayBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUludGVyZmFjZVRhcmdldHMoaW50ZXJmYWNlcywgcmVjb3JkcywgZXJyb3JzLCBmdW5jdGlvbnMsIGxhbmd1YWdlLCBtb2R1bGVMb2NhdGlvbikge1xuICBpZiAoaW50ZXJmYWNlcy5sZW5ndGggPT0gMCkgcmV0dXJuXG4gIGNvbnN0IGJ5SWQgPSBuZXcgTWFwKGludGVyZmFjZXMubWFwKChkZWNsYXJhdGlvbikgPT4gW2RlY2xhcmF0aW9uLmlkLCBkZWNsYXJhdGlvbl0pKVxuICBjb25zdCB0YXJnZXROYW1lcyA9IG5ldyBTZXQoKVxuXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgWy4uLnJlY29yZHMsIC4uLmVycm9ycywgLi4uZnVuY3Rpb25zXSkge1xuICAgIGlmICghZGVjbGFyYXRpb24gfHwgdHlwZW9mIGRlY2xhcmF0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbikpIGNvbnRpbnVlXG4gICAgY29uc3QgbmFtZSA9IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcIm5hbWVcIilcblxuICAgIGlmICh0eXBlb2YgbmFtZSA9PSBcInN0cmluZ1wiKSB0YXJnZXROYW1lcy5hZGQobGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IG5hbWUudG9Mb3dlckNhc2UoKSA6IG5hbWUpXG4gIH1cblxuICBmb3IgKGxldCBpbnRlcmZhY2VJbmRleCA9IDA7IGludGVyZmFjZUluZGV4IDwgaW50ZXJmYWNlcy5sZW5ndGg7IGludGVyZmFjZUluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGludGVyZmFjZXNbaW50ZXJmYWNlSW5kZXhdXG4gICAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oZGVjbGFyYXRpb24/LmxvY2F0aW9uLCBtb2R1bGVMb2NhdGlvbilcbiAgICBjb25zdCBrZXlzID0gZGVjbGFyYXRpb24gJiYgdHlwZW9mIGRlY2xhcmF0aW9uID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24pXG4gICAgICA/IE9iamVjdC5rZXlzKGRlY2xhcmF0aW9uKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIikgOiBcIlwiXG5cbiAgICBpZiAoIWRlY2xhcmF0aW9uIHx8IGRlY2xhcmF0aW9uLmtpbmQgIT0gXCJJbnRlcmZhY2VEZWNsYXJhdGlvblwiIHx8XG4gICAgICAhW1wiZXh0ZW5kcyxpZCxraW5kLGxvY2F0aW9uLG1ldGhvZHMsbmFtZVwiLCBcImlkLGtpbmQsbG9jYXRpb24sbWV0aG9kcyxuYW1lXCJdLmluY2x1ZGVzKGtleXMpIHx8XG4gICAgICAhaXNEZW5zZUFycmF5KGRlY2xhcmF0aW9uLm1ldGhvZHMpIHx8XG4gICAgICAhbmV3IFJlZ0V4cChgXig/OlthLXpdW2EtejAtOS5fLV0qIyk/aW50ZXJmYWNlOiR7aW50ZXJmYWNlSW5kZXh9JGAsIFwidVwiKS50ZXN0KFN0cmluZyhkZWNsYXJhdGlvbi5pZCkpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGludGVyZmFjZSBkZWNsYXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgZGVjbGFyYXRpb25Mb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGRlY2xhcmF0aW9uLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJpbnRlcmZhY2UgZGVjbGFyYXRpb24gbG9jYXRpb25cIiwgbG9jYXRpb24pXG5cbiAgICB2YWxpZGF0ZVRhcmdldFR5cGVJZGVudGlmaWVyKGxhbmd1YWdlLCBkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbkxvY2F0aW9uKVxuICAgIGNvbnN0IHRhcmdldE5hbWUgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gZGVjbGFyYXRpb24ubmFtZS50b0xvd2VyQ2FzZSgpIDogZGVjbGFyYXRpb24ubmFtZVxuXG4gICAgaWYgKHRhcmdldE5hbWVzLmhhcyh0YXJnZXROYW1lKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgaW50ZXJmYWNlIGNvbGxpc2lvbiAnJHtkZWNsYXJhdGlvbi5uYW1lfSdgLCBkZWNsYXJhdGlvbkxvY2F0aW9uKVxuICAgIHRhcmdldE5hbWVzLmFkZCh0YXJnZXROYW1lKVxuICAgIGNvbnN0IG1ldGhvZE5hbWVzID0gbmV3IFNldCgpXG5cbiAgICBmb3IgKGxldCBtZXRob2RJbmRleCA9IDA7IG1ldGhvZEluZGV4IDwgZGVjbGFyYXRpb24ubWV0aG9kcy5sZW5ndGg7IG1ldGhvZEluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IG1ldGhvZCA9IGRlY2xhcmF0aW9uLm1ldGhvZHNbbWV0aG9kSW5kZXhdXG4gICAgICBjb25zdCBtZXRob2RMb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihtZXRob2Q/LmxvY2F0aW9uLCBkZWNsYXJhdGlvbkxvY2F0aW9uKVxuICAgICAgY29uc3QgbWV0aG9kS2V5cyA9IG1ldGhvZCAmJiB0eXBlb2YgbWV0aG9kID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkobWV0aG9kKVxuICAgICAgICA/IE9iamVjdC5rZXlzKG1ldGhvZCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgICBpZiAoIW1ldGhvZCB8fCBtZXRob2Qua2luZCAhPSBcIkludGVyZmFjZU1ldGhvZERlY2xhcmF0aW9uXCIgfHwgbWV0aG9kS2V5cyAhPSBcImlkLGtpbmQsbG9jYXRpb24sbmFtZSxwYXJhbWV0ZXJzLHJldHVyblR5cGVcIiB8fFxuICAgICAgICBtZXRob2QuaWQgIT0gYCR7ZGVjbGFyYXRpb24uaWR9Om1ldGhvZDoke21ldGhvZEluZGV4fWAgfHwgIWlzRGVuc2VBcnJheShtZXRob2QucGFyYW1ldGVycykpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBpbnRlcmZhY2UgbWV0aG9kIGRlY2xhcmF0aW9uXCIsIG1ldGhvZExvY2F0aW9uKVxuICAgICAgfVxuICAgICAgY29uc3QgZXhhY3RNZXRob2RMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG1ldGhvZC5sb2NhdGlvbiwgbGFuZ3VhZ2UsIFwiaW50ZXJmYWNlIG1ldGhvZCBkZWNsYXJhdGlvbiBsb2NhdGlvblwiLCBkZWNsYXJhdGlvbkxvY2F0aW9uKVxuXG4gICAgICB2YWxpZGF0ZVRhcmdldElkZW50aWZpZXIobGFuZ3VhZ2UsIG1ldGhvZC5uYW1lLCBcImludGVyZmFjZSBtZXRob2RcIiwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gbWV0aG9kLm5hbWUudG9Mb3dlckNhc2UoKSA6IG1ldGhvZC5uYW1lXG5cbiAgICAgIGlmIChtZXRob2ROYW1lcy5oYXMobm9ybWFsaXplZCkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGR1cGxpY2F0ZSBpbnRlcmZhY2UgbWV0aG9kICcke21ldGhvZC5uYW1lfSdgLCBleGFjdE1ldGhvZExvY2F0aW9uKVxuICAgICAgbWV0aG9kTmFtZXMuYWRkKG5vcm1hbGl6ZWQpXG4gICAgICB2YWxpZGF0ZVJlZmVyZW5jZUNsYXNzUGFyYW1ldGVycyhtZXRob2QucGFyYW1ldGVycywgXCJpbnRlcmZhY2UgbWV0aG9kXCIsIGxhbmd1YWdlLCBleGFjdE1ldGhvZExvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBwYXJlbnRzID0gZGVjbGFyYXRpb24uZXh0ZW5kcyA/PyBbXVxuXG4gICAgZm9yIChjb25zdCBwYXJlbnQgb2YgcGFyZW50cykge1xuICAgICAgY29uc3QgcGFyZW50S2V5cyA9IHBhcmVudCAmJiB0eXBlb2YgcGFyZW50ID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkocGFyZW50KVxuICAgICAgICA/IE9iamVjdC5rZXlzKHBhcmVudCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgICBpZiAoIXBhcmVudCB8fCBwYXJlbnQua2luZCAhPSBcIkludGVyZmFjZVR5cGVcIiB8fCBwYXJlbnRLZXlzICE9IFwiZGVjbGFyYXRpb25JZCxraW5kXCIgfHxcbiAgICAgICAgIWJ5SWQuaGFzKHBhcmVudC5kZWNsYXJhdGlvbklkKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGludGVyZmFjZSBwYXJlbnQgcmVmZXJlbmNlXCIsIGRlY2xhcmF0aW9uTG9jYXRpb24pXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgaW50ZXJmYWNlcykge1xuICAgIGZvciAoY29uc3QgcGFyZW50IG9mIGRlY2xhcmF0aW9uLmV4dGVuZHMgPz8gW10pIHtcbiAgICAgIGlmIChwYXJlbnQuZGVjbGFyYXRpb25JZCA9PSBkZWNsYXJhdGlvbi5pZCkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImludGVyZmFjZSBleHRlbmRzIGl0c2VsZlwiLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGV4YWN0IHRhcmdldC12aXNpYmxlIHNoYXBlIG9mIGV2ZXJ5IHJlZmVyZW5jZSBjbGFzcyBiZWZvcmUgb3V0cHV0IGFsbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb25bXX0gY2xhc3NlcyAtIENhbmRpZGF0ZSBjbGFzc2VzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbltdfSByZWNvcmRzIC0gRXhpc3RpbmcgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbltdfSBlcnJvcnMgLSBFeGlzdGluZyB0eXBlZCBlcnJvcnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb25bXX0gZnVuY3Rpb25zIC0gRXhpc3RpbmcgZnVuY3Rpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JbnRlcmZhY2VEZWNsYXJhdGlvbltdfSBpbnRlcmZhY2VzIC0gRXhpc3RpbmcgaW50ZXJmYWNlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG1vZHVsZUxvY2F0aW9uIC0gRmFsbGJhY2sgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVSZWZlcmVuY2VDbGFzc1RhcmdldHMoY2xhc3NlcywgcmVjb3JkcywgZXJyb3JzLCBmdW5jdGlvbnMsIGludGVyZmFjZXMsIGxhbmd1YWdlLCBtb2R1bGVMb2NhdGlvbikge1xuICBjb25zdCB0YXJnZXROYW1lcyA9IG5ldyBTZXQoKVxuXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgWy4uLnJlY29yZHMsIC4uLmVycm9ycywgLi4uZnVuY3Rpb25zXSkge1xuICAgIGlmICghZGVjbGFyYXRpb24gfHwgdHlwZW9mIGRlY2xhcmF0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbikpIGNvbnRpbnVlXG4gICAgY29uc3QgbmFtZSA9IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcIm5hbWVcIilcblxuICAgIGlmICh0eXBlb2YgbmFtZSAhPSBcInN0cmluZ1wiKSBjb250aW51ZVxuICAgIHRhcmdldE5hbWVzLmFkZChsYW5ndWFnZSA9PSBcInBocFwiID8gbmFtZS50b0xvd2VyQ2FzZSgpIDogbmFtZSlcbiAgfVxuXG4gIGZvciAobGV0IGNsYXNzSW5kZXggPSAwOyBjbGFzc0luZGV4IDwgY2xhc3Nlcy5sZW5ndGg7IGNsYXNzSW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY2xhc3Nlc1tjbGFzc0luZGV4XVxuICAgIGNvbnN0IGxvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKGRlY2xhcmF0aW9uPy5sb2NhdGlvbiwgbW9kdWxlTG9jYXRpb24pXG4gICAgY29uc3Qga2V5cyA9IGRlY2xhcmF0aW9uICYmIHR5cGVvZiBkZWNsYXJhdGlvbiA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9uKVxuICAgICAgPyBPYmplY3Qua2V5cyhkZWNsYXJhdGlvbikuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCBkZWNsYXJhdGlvbi5raW5kICE9IFwiQ2xhc3NEZWNsYXJhdGlvblwiIHx8XG4gICAgICAhW1wiY29uc3RydWN0b3IsZmllbGRzLGlkLGltcGxlbWVudHMsa2luZCxsb2NhdGlvbixtZXRob2RzLG5hbWVcIiwgXCJjb25zdHJ1Y3RvcixmaWVsZHMsaWQsaW1wbGVtZW50cyxraW5kLGxvY2F0aW9uLG1ldGhvZHMsbmFtZSxvd25lcnNoaXBcIixcbiAgICAgICAgXCJjb25zdHJ1Y3RvcixmaWVsZHMsaWQsa2luZCxsb2NhdGlvbixtZXRob2RzLG5hbWVcIiwgXCJjb25zdHJ1Y3RvcixmaWVsZHMsaWQsa2luZCxsb2NhdGlvbixtZXRob2RzLG5hbWUsb3duZXJzaGlwXCJdLmluY2x1ZGVzKGtleXMpIHx8XG4gICAgICAhaXNEZW5zZUFycmF5KGRlY2xhcmF0aW9uLmZpZWxkcykgfHwgZGVjbGFyYXRpb24uZmllbGRzLmxlbmd0aCA9PSAwIHx8ICFpc0RlbnNlQXJyYXkoZGVjbGFyYXRpb24ubWV0aG9kcykgfHxcbiAgICAgICFuZXcgUmVnRXhwKGBeKD86W2Etel1bYS16MC05Ll8tXSojKT9jbGFzczoke2NsYXNzSW5kZXh9JGAsIFwidVwiKS50ZXN0KFN0cmluZyhkZWNsYXJhdGlvbi5pZCkpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHJlZmVyZW5jZSBjbGFzcyBkZWNsYXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0aW9uLm93bmVyc2hpcCAhPT0gdW5kZWZpbmVkICYmIGRlY2xhcmF0aW9uLm93bmVyc2hpcD8ua2luZCAhPSBcIm9yZGluYXJ5XCIgJiZcbiAgICAgIChkZWNsYXJhdGlvbi5vd25lcnNoaXA/LmtpbmQgIT0gXCJvd25lZFJlc291cmNlXCIgfHwgdHlwZW9mIGRlY2xhcmF0aW9uLm93bmVyc2hpcC5maWVsZElkICE9IFwic3RyaW5nXCIgfHxcbiAgICAgIHR5cGVvZiBkZWNsYXJhdGlvbi5vd25lcnNoaXAucmVzb3VyY2VJZCAhPSBcInN0cmluZ1wiKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCByZWZlcmVuY2UgY2xhc3MgcmVzb3VyY2Ugb3duZXJzaGlwXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBkZWNsYXJhdGlvbkxvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24oZGVjbGFyYXRpb24ubG9jYXRpb24sIGxhbmd1YWdlLCBcInJlZmVyZW5jZSBjbGFzcyBkZWNsYXJhdGlvbiBsb2NhdGlvblwiLCBtb2R1bGVMb2NhdGlvbilcblxuICAgIHZhbGlkYXRlVGFyZ2V0VHlwZUlkZW50aWZpZXIobGFuZ3VhZ2UsIGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uTG9jYXRpb24pXG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBkZWNsYXJhdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCkgOiBkZWNsYXJhdGlvbi5uYW1lXG5cbiAgICBpZiAodGFyZ2V0TmFtZXMuaGFzKHRhcmdldE5hbWUpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGByZWZlcmVuY2UgY2xhc3MgY29sbGlzaW9uICcke2RlY2xhcmF0aW9uLm5hbWV9J2AsIGRlY2xhcmF0aW9uTG9jYXRpb24pXG4gICAgdGFyZ2V0TmFtZXMuYWRkKHRhcmdldE5hbWUpXG4gICAgY29uc3QgZmllbGROYW1lcyA9IG5ldyBTZXQoKVxuXG4gICAgZm9yIChsZXQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoOyBmaWVsZEluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gZGVjbGFyYXRpb24uZmllbGRzW2ZpZWxkSW5kZXhdXG4gICAgICBjb25zdCBmaWVsZExvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKGZpZWxkPy5sb2NhdGlvbiwgbG9jYXRpb24pXG4gICAgICBjb25zdCBmaWVsZEtleXMgPSBmaWVsZCAmJiB0eXBlb2YgZmllbGQgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShmaWVsZClcbiAgICAgICAgPyBPYmplY3Qua2V5cyhmaWVsZCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgICBpZiAoIWZpZWxkIHx8IGZpZWxkLmtpbmQgIT0gXCJQcml2YXRlRmllbGRcIiB8fCBmaWVsZEtleXMgIT0gXCJpZCxraW5kLGxvY2F0aW9uLG5hbWUsdHlwZVwiIHx8XG4gICAgICAgIGZpZWxkLmlkICE9IGAke2RlY2xhcmF0aW9uLmlkfTpmaWVsZDoke2ZpZWxkSW5kZXh9YCkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHByaXZhdGUgZmllbGRcIiwgZmllbGRMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4YWN0RmllbGRMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGZpZWxkLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJwcml2YXRlIGZpZWxkIGxvY2F0aW9uXCIsIGRlY2xhcmF0aW9uTG9jYXRpb24pXG5cbiAgICAgIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgZmllbGQubmFtZSwgXCJwcml2YXRlIGZpZWxkXCIsIGV4YWN0RmllbGRMb2NhdGlvbilcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gZmllbGQubmFtZS50b0xvd2VyQ2FzZSgpIDogZmllbGQubmFtZVxuXG4gICAgICBpZiAoZmllbGROYW1lcy5oYXMobm9ybWFsaXplZCkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGR1cGxpY2F0ZSB0YXJnZXQgcHJpdmF0ZSBmaWVsZCAnJHtmaWVsZC5uYW1lfSdgLCBleGFjdEZpZWxkTG9jYXRpb24pXG4gICAgICBmaWVsZE5hbWVzLmFkZChub3JtYWxpemVkKVxuICAgIH1cbiAgICBjb25zdCBjb25zdHJ1Y3RvciA9IGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yXG4gICAgY29uc3QgY29uc3RydWN0b3JMb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihjb25zdHJ1Y3Rvcj8ubG9jYXRpb24sIGxvY2F0aW9uKVxuICAgIGNvbnN0IGNvbnN0cnVjdG9yS2V5cyA9IGNvbnN0cnVjdG9yICYmIHR5cGVvZiBjb25zdHJ1Y3RvciA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGNvbnN0cnVjdG9yKVxuICAgICAgPyBPYmplY3Qua2V5cyhjb25zdHJ1Y3RvcikuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgaWYgKCFjb25zdHJ1Y3RvciB8fCBjb25zdHJ1Y3Rvci5raW5kICE9IFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiIHx8XG4gICAgICAhW1wiYm9keSxpZCxraW5kLGxvY2F0aW9uLHBhcmFtZXRlcnNcIiwgXCJib2R5LGVmZmVjdHMsZmFpbHVyZUlkcyxpZCxraW5kLGxvY2F0aW9uLHBhcmFtZXRlcnNcIl0uaW5jbHVkZXMoY29uc3RydWN0b3JLZXlzKSB8fFxuICAgICAgY29uc3RydWN0b3IuaWQgIT0gYCR7ZGVjbGFyYXRpb24uaWR9OmNvbnN0cnVjdG9yYCB8fCAhaXNEZW5zZUFycmF5KGNvbnN0cnVjdG9yLnBhcmFtZXRlcnMpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uXCIsIGNvbnN0cnVjdG9yTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGV4YWN0Q29uc3RydWN0b3JMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGNvbnN0cnVjdG9yLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbiBsb2NhdGlvblwiLCBkZWNsYXJhdGlvbkxvY2F0aW9uKVxuXG4gICAgdmFsaWRhdGVSZWZlcmVuY2VDbGFzc1BhcmFtZXRlcnMoY29uc3RydWN0b3IucGFyYW1ldGVycywgXCJjb25zdHJ1Y3RvclwiLCBsYW5ndWFnZSwgZXhhY3RDb25zdHJ1Y3RvckxvY2F0aW9uKVxuICAgIGNvbnN0IG1ldGhvZE5hbWVzID0gbmV3IFNldCgpXG5cbiAgICBmb3IgKGxldCBtZXRob2RJbmRleCA9IDA7IG1ldGhvZEluZGV4IDwgZGVjbGFyYXRpb24ubWV0aG9kcy5sZW5ndGg7IG1ldGhvZEluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IG1ldGhvZCA9IGRlY2xhcmF0aW9uLm1ldGhvZHNbbWV0aG9kSW5kZXhdXG4gICAgICBjb25zdCBtZXRob2RMb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihtZXRob2Q/LmxvY2F0aW9uLCBsb2NhdGlvbilcbiAgICAgIGNvbnN0IG1ldGhvZEtleXMgPSBtZXRob2QgJiYgdHlwZW9mIG1ldGhvZCA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KG1ldGhvZClcbiAgICAgICAgPyBPYmplY3Qua2V5cyhtZXRob2QpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgICAgaWYgKCFtZXRob2QgfHwgbWV0aG9kLmtpbmQgIT0gXCJNZXRob2REZWNsYXJhdGlvblwiIHx8XG4gICAgICAgICFbXCJib2R5LGlkLGltcGxlbWVudHMsa2luZCxsb2NhdGlvbixuYW1lLHBhcmFtZXRlcnMscmV0dXJuVHlwZVwiLFxuICAgICAgICAgIFwiYm9keSxlZmZlY3RzLGZhaWx1cmVJZHMsaWQsaW1wbGVtZW50cyxraW5kLGxvY2F0aW9uLG5hbWUscGFyYW1ldGVycyxyZXR1cm5UeXBlXCIsXG4gICAgICAgICAgXCJib2R5LGlkLGtpbmQsbG9jYXRpb24sbmFtZSxwYXJhbWV0ZXJzLHJldHVyblR5cGVcIixcbiAgICAgICAgICBcImJvZHksZWZmZWN0cyxmYWlsdXJlSWRzLGlkLGtpbmQsbG9jYXRpb24sbmFtZSxwYXJhbWV0ZXJzLHJldHVyblR5cGVcIl0uaW5jbHVkZXMobWV0aG9kS2V5cykgfHxcbiAgICAgICAgbWV0aG9kLmlkICE9IGAke2RlY2xhcmF0aW9uLmlkfTptZXRob2Q6JHttZXRob2RJbmRleH1gIHx8ICFpc0RlbnNlQXJyYXkobWV0aG9kLnBhcmFtZXRlcnMpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgbWV0aG9kIGRlY2xhcmF0aW9uXCIsIG1ldGhvZExvY2F0aW9uKVxuICAgICAgfVxuICAgICAgY29uc3QgZXhhY3RNZXRob2RMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG1ldGhvZC5sb2NhdGlvbiwgbGFuZ3VhZ2UsIFwibWV0aG9kIGRlY2xhcmF0aW9uIGxvY2F0aW9uXCIsIGRlY2xhcmF0aW9uTG9jYXRpb24pXG4gICAgICBjb25zdCBsaWZlY3ljbGVOYW1lID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiX19jb25zdHJ1Y3RcIiA6IGxhbmd1YWdlID09IFwicnVieVwiID8gXCJpbml0aWFsaXplXCIgOlxuICAgICAgICBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiA/IFwiY29uc3RydWN0b3JcIiA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAobWV0aG9kLm5hbWUgPT0gbGlmZWN5Y2xlTmFtZSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGByZXNlcnZlZCByZWZlcmVuY2UgbGlmZWN5Y2xlIG1ldGhvZCAnJHttZXRob2QubmFtZX0nYCwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc2VydmVkSG9vayA9IGxhbmd1YWdlID09IFwicGhwXCIgPyAvXl9fL3UudGVzdChtZXRob2QubmFtZSkgOlxuICAgICAgICBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IHJ1YnlSZWZlcmVuY2VNZXRob2RIb29rcy5oYXMobWV0aG9kLm5hbWUpIHx8XG4gICAgICAgICAgdHlwZW9mIG1ldGhvZC5uYW1lID09IFwic3RyaW5nXCIgJiYgbWV0aG9kLm5hbWUuZW5kc1dpdGgoXCI9XCIpIDpcbiAgICAgICAgICBsYW5ndWFnZSA9PSBcImphdmFcIiA/IGphdmFSZWZlcmVuY2VNZXRob2RIb29rcy5oYXMobWV0aG9kLm5hbWUpIDpcbiAgICAgICAgICAgIGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiID8gamF2YXNjcmlwdFJlZmVyZW5jZU1ldGhvZEhvb2tzLmhhcyhtZXRob2QubmFtZSkgOiBmYWxzZVxuXG4gICAgICBpZiAocmVzZXJ2ZWRIb29rKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGByZXNlcnZlZCByZWZlcmVuY2UgbWV0aG9kICcke21ldGhvZC5uYW1lfSdgLCBleGFjdE1ldGhvZExvY2F0aW9uKVxuICAgICAgaWYgKGxhbmd1YWdlID09IFwicnVieVwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWV0aG9kLm5hbWUgIT0gXCJzdHJpbmdcIiB8fCAhL15bQS1aYS16X11bQS1aYS16MC05X10qWyE/PV0/JC91LnRlc3QobWV0aG9kLm5hbWUpKSB7XG4gICAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWV0aG9kIGlkZW50aWZpZXIgJyR7U3RyaW5nKG1ldGhvZC5uYW1lKX0nYCwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgbWV0aG9kLm5hbWUsIFwibWV0aG9kXCIsIGV4YWN0TWV0aG9kTG9jYXRpb24pXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IG1ldGhvZC5uYW1lLnRvTG93ZXJDYXNlKCkgOiBtZXRob2QubmFtZVxuXG4gICAgICBpZiAobWV0aG9kTmFtZXMuaGFzKG5vcm1hbGl6ZWQpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBkdXBsaWNhdGUgdGFyZ2V0IG1ldGhvZCAnJHttZXRob2QubmFtZX0nYCwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBmaWVsZE5hbWVzLmhhcyhub3JtYWxpemVkKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGB0YXJnZXQgY2xhc3MgbWVtYmVyIGNvbGxpc2lvbiAnJHttZXRob2QubmFtZX0nYCwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIG1ldGhvZE5hbWVzLmFkZChub3JtYWxpemVkKVxuICAgICAgdmFsaWRhdGVSZWZlcmVuY2VDbGFzc1BhcmFtZXRlcnMobWV0aG9kLnBhcmFtZXRlcnMsIFwibWV0aG9kXCIsIGxhbmd1YWdlLCBleGFjdE1ldGhvZExvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBpbXBsZW1lbnRlZCA9IGRlY2xhcmF0aW9uLmltcGxlbWVudHMgPz8gW11cblxuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIGltcGxlbWVudGVkKSB7XG4gICAgICBjb25zdCByZWZlcmVuY2VLZXlzID0gcmVmZXJlbmNlICYmIHR5cGVvZiByZWZlcmVuY2UgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShyZWZlcmVuY2UpXG4gICAgICAgID8gT2JqZWN0LmtleXMocmVmZXJlbmNlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIikgOiBcIlwiXG5cbiAgICAgIGlmICghcmVmZXJlbmNlIHx8IHJlZmVyZW5jZS5raW5kICE9IFwiSW50ZXJmYWNlVHlwZVwiIHx8IHJlZmVyZW5jZUtleXMgIT0gXCJkZWNsYXJhdGlvbklkLGtpbmRcIiB8fFxuICAgICAgICAhaW50ZXJmYWNlcy5zb21lKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pZCA9PSByZWZlcmVuY2UuZGVjbGFyYXRpb25JZCkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBpbXBsZW1lbnRlZCBpbnRlcmZhY2UgcmVmZXJlbmNlXCIsIGxvY2F0aW9uKVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzYXRpc2ZpZWQgPSBuZXcgU2V0KClcblxuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIGltcGxlbWVudGVkKSB7XG4gICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBmbGF0dGVuZWRUYXJnZXRJbnRlcmZhY2VNZW1iZXJzKHJlZmVyZW5jZS5kZWNsYXJhdGlvbklkLCBpbnRlcmZhY2VzLCBsYW5ndWFnZSwgbG9jYXRpb24pKSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IGRlY2xhcmF0aW9uLm1ldGhvZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBtZW1iZXIubmFtZSlcblxuICAgICAgICBpZiAoIW1ldGhvZCkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgaW50ZXJmYWNlIG1ldGhvZCAnJHttZW1iZXIubmFtZX0nIGlzIG5vdCBpbXBsZW1lbnRlZGAsIGxvY2F0aW9uKVxuICAgICAgICBpZiAoc2F0aXNmaWVkLmhhcyhtZW1iZXIubmFtZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGR1cGxpY2F0ZSBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24gJyR7bWVtYmVyLm5hbWV9J2AsIGxvY2F0aW9uKVxuICAgICAgICBpZiAobWV0aG9kLnBhcmFtZXRlcnMubGVuZ3RoICE9IG1lbWJlci5wYXJhbWV0ZXJzLmxlbmd0aCB8fFxuICAgICAgICAgIG1ldGhvZC5wYXJhbWV0ZXJzLnNvbWUoKHBhcmFtZXRlciwgaW5kZXgpID0+ICFzYW1lVGFyZ2V0VHlwZShwYXJhbWV0ZXIudHlwZSwgbWVtYmVyLnBhcmFtZXRlcnNbaW5kZXhdLnR5cGUpKSkge1xuICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGludGVyZmFjZSBtZXRob2Qgc2lnbmF0dXJlIG1pc21hdGNoICcke21lbWJlci5uYW1lfSdgLCBsb2NhdGlvbilcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNhbWVUYXJnZXRUeXBlKG1ldGhvZC5yZXR1cm5UeXBlLCBtZW1iZXIucmV0dXJuVHlwZSkpIHtcbiAgICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBpbnRlcmZhY2UgbWV0aG9kIHJldHVybiBtaXNtYXRjaCAnJHttZW1iZXIubmFtZX0nYCwgbG9jYXRpb24pXG4gICAgICAgIH1cbiAgICAgICAgc2F0aXNmaWVkLmFkZChtZW1iZXIubmFtZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGbGF0dGVucyBvbmUgdGFyZ2V0LXZhbGlkYXRlZCBpbnRlcmZhY2Ugc2lnbmF0dXJlIHNldCBpbiBkZWNsYXJhdGlvbiBvcmRlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnRlcmZhY2VJZCAtIEludGVyZmFjZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW50ZXJmYWNlRGVjbGFyYXRpb25bXX0gaW50ZXJmYWNlcyAtIEludGVyZmFjZXMgaW4gZGVjbGFyYXRpb24gb3JkZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBsb2NhdGlvbiAtIERpYWdub3N0aWMgbG9jYXRpb24uXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSBbYWN0aXZlXSAtIEFjdGl2ZSBleHRlbmRzIHBhdGguXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW50ZXJmYWNlTWV0aG9kRGVjbGFyYXRpb25bXX0gRmxhdHRlbmVkIG1lbWJlcnMuXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5lZFRhcmdldEludGVyZmFjZU1lbWJlcnMoaW50ZXJmYWNlSWQsIGludGVyZmFjZXMsIGxhbmd1YWdlLCBsb2NhdGlvbiwgYWN0aXZlID0gbmV3IFNldCgpKSB7XG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gaW50ZXJmYWNlcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pZCA9PSBpbnRlcmZhY2VJZClcblxuICBpZiAoIWRlY2xhcmF0aW9uKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGltcGxlbWVudGVkIGludGVyZmFjZSByZWZlcmVuY2VcIiwgbG9jYXRpb24pXG4gIGlmIChhY3RpdmUuaGFzKGludGVyZmFjZUlkKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImludGVyZmFjZSBleHRlbmRzIGl0c2VsZlwiLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgYWN0aXZlLmFkZChpbnRlcmZhY2VJZClcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JbnRlcmZhY2VNZXRob2REZWNsYXJhdGlvbltdfSAqL1xuICBjb25zdCBtZW1iZXJzID0gW11cblxuICBmb3IgKGNvbnN0IHBhcmVudCBvZiBkZWNsYXJhdGlvbi5leHRlbmRzID8/IFtdKSB7XG4gICAgZm9yIChjb25zdCBtZW1iZXIgb2YgZmxhdHRlbmVkVGFyZ2V0SW50ZXJmYWNlTWVtYmVycyhwYXJlbnQuZGVjbGFyYXRpb25JZCwgaW50ZXJmYWNlcywgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBhY3RpdmUpKSB7XG4gICAgICBpZiAoIW1lbWJlcnMuc29tZSgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBtZW1iZXIubmFtZSkpIG1lbWJlcnMucHVzaChtZW1iZXIpXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgbWV0aG9kIG9mIGRlY2xhcmF0aW9uLm1ldGhvZHMpIHtcbiAgICBpZiAoIW1lbWJlcnMuc29tZSgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBtZXRob2QubmFtZSkpIG1lbWJlcnMucHVzaChtZXRob2QpXG4gIH1cbiAgYWN0aXZlLmRlbGV0ZShpbnRlcmZhY2VJZClcblxuICByZXR1cm4gbWVtYmVyc1xufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBiYWNrZW5kLXZhbGlkYXRlZCBzZW1hbnRpYyB0eXBlcyBzdHJ1Y3R1cmFsbHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfSBsZWZ0IC0gRmlyc3QgdHlwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IHJpZ2h0IC0gU2Vjb25kIHR5cGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHlwZXMgYXJlIGlkZW50aWNhbC5cbiAqL1xuZnVuY3Rpb24gc2FtZVRhcmdldFR5cGUobGVmdCwgcmlnaHQpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRhcmdldFR5cGVJZGVudGl0eShsZWZ0KSkgPT0gSlNPTi5zdHJpbmdpZnkodGFyZ2V0VHlwZUlkZW50aXR5KHJpZ2h0KSlcbn1cblxuLyoqXG4gKiBSZWR1Y2VzIG9uZSBzZW1hbnRpYyB0eXBlIHRvIGl0cyBjb21wYXJhYmxlIHRhcmdldCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IHR5cGUgLSBTZW1hbnRpYyB0eXBlLlxuICogQHJldHVybnMge3Vua25vd259IENvbXBhcmFibGUgaWRlbnRpdHkuXG4gKi9cbmZ1bmN0aW9uIHRhcmdldFR5cGVJZGVudGl0eSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PSBcInN0cmluZ1wiKSByZXR1cm4gdHlwZVxuICBpZiAodHlwZS5raW5kID09IFwiVHlwZVJlZmVyZW5jZVwiKSByZXR1cm4gdHlwZS5uYW1lXG4gIGlmICh0eXBlLmtpbmQgPT0gXCJUeXBlVmFyaWFibGVSZWZlcmVuY2VcIikgcmV0dXJuIHtraW5kOiBcIlR5cGVWYXJpYWJsZVJlZmVyZW5jZVwiLCBwYXJhbWV0ZXJJZDogdHlwZS5wYXJhbWV0ZXJJZH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIlJlY29yZFR5cGVcIikgcmV0dXJuIHtkZWNsYXJhdGlvbklkOiB0eXBlLmRlY2xhcmF0aW9uSWQsIGtpbmQ6IFwiUmVjb3JkVHlwZVwifVxuICBpZiAodHlwZS5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSByZXR1cm4ge2RlY2xhcmF0aW9uSWQ6IHR5cGUuZGVjbGFyYXRpb25JZCwga2luZDogXCJSZWZlcmVuY2VUeXBlXCJ9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJJbnRlcmZhY2VUeXBlXCIpIHJldHVybiB7ZGVjbGFyYXRpb25JZDogdHlwZS5kZWNsYXJhdGlvbklkLCBraW5kOiBcIkludGVyZmFjZVR5cGVcIn1cbiAgaWYgKHR5cGUua2luZCA9PSBcIk93bmVkUmVzb3VyY2VUeXBlXCIpIHJldHVybiB7a2luZDogXCJPd25lZFJlc291cmNlVHlwZVwiLCByZXNvdXJjZUlkOiB0eXBlLnJlc291cmNlSWR9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJPd25lZFJlZmVyZW5jZVR5cGVcIikgcmV0dXJuIHtkZWNsYXJhdGlvbklkOiB0eXBlLmRlY2xhcmF0aW9uSWQsIGtpbmQ6IFwiT3duZWRSZWZlcmVuY2VUeXBlXCJ9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJMaXN0VHlwZVwiKSByZXR1cm4ge2VsZW1lbnRUeXBlOiB0YXJnZXRUeXBlSWRlbnRpdHkodHlwZS5lbGVtZW50VHlwZSksIGtpbmQ6IFwiTGlzdFR5cGVcIn1cbiAgaWYgKHR5cGUua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSByZXR1cm4ge2tpbmQ6IFwiT3B0aW9uYWxUeXBlXCIsIHZhbHVlVHlwZTogdGFyZ2V0VHlwZUlkZW50aXR5KHR5cGUudmFsdWVUeXBlKX1cbiAgaWYgKHR5cGUua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHJldHVybiB7a2V5VHlwZTogdGFyZ2V0VHlwZUlkZW50aXR5KHR5cGUua2V5VHlwZSksIGtpbmQ6IFwiT3JkZXJlZE1hcFR5cGVcIiwgdmFsdWVUeXBlOiB0YXJnZXRUeXBlSWRlbnRpdHkodHlwZS52YWx1ZVR5cGUpfVxuXG4gIHJldHVybiB7a2V5VHlwZTogdGFyZ2V0VHlwZUlkZW50aXR5KHR5cGUua2V5VHlwZSksIGtpbmQ6IFwiTWFwVHlwZVwiLCB2YWx1ZVR5cGU6IHRhcmdldFR5cGVJZGVudGl0eSh0eXBlLnZhbHVlVHlwZSl9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIG9uZSByZWZlcmVuY2UgY2FsbGFibGUncyBleGFjdCBwYXJhbWV0ZXIgc2hhcGUgYW5kIHRhcmdldCBuYW1lcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUGFyYW1ldGVyW119IHBhcmFtZXRlcnMgLSBDYW5kaWRhdGUgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7XCJjb25zdHJ1Y3RvclwiIHwgXCJpbnRlcmZhY2UgbWV0aG9kXCIgfCBcIm1ldGhvZFwifSBvd25lciAtIENhbGxhYmxlIGtpbmQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBvd25lckxvY2F0aW9uIC0gRmFsbGJhY2sgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVSZWZlcmVuY2VDbGFzc1BhcmFtZXRlcnMocGFyYW1ldGVycywgb3duZXIsIGxhbmd1YWdlLCBvd25lckxvY2F0aW9uKSB7XG4gIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBsb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihwYXJhbWV0ZXI/LmxvY2F0aW9uLCBvd25lckxvY2F0aW9uKVxuICAgIGNvbnN0IGtleXMgPSBwYXJhbWV0ZXIgJiYgdHlwZW9mIHBhcmFtZXRlciA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHBhcmFtZXRlcilcbiAgICAgID8gT2JqZWN0LmtleXMocGFyYW1ldGVyKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIikgOiBcIlwiXG5cbiAgICBpZiAoIXBhcmFtZXRlciB8fCBwYXJhbWV0ZXIua2luZCAhPSBcIlBhcmFtZXRlclwiIHx8IGtleXMgIT0gXCJraW5kLGxvY2F0aW9uLG5hbWUsdHlwZVwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBtaXNzaW5nIG9yIGludmFsaWQgJHtvd25lcn0gcGFyYW1ldGVyYCwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGV4YWN0TG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihwYXJhbWV0ZXIubG9jYXRpb24sIGxhbmd1YWdlLCBgJHtvd25lcn0gcGFyYW1ldGVyIGxvY2F0aW9uYCwgb3duZXJMb2NhdGlvbilcblxuICAgIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIHBhcmFtZXRlci5uYW1lLCBcInBhcmFtZXRlclwiLCBleGFjdExvY2F0aW9uKVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIG9uZSBkZWNsYXJhdGlvbidzIHRhcmdldC12aXNpYmxlIHR5cGUtcGFyYW1ldGVyIG5hbWVzIGFuZCBpZGVudGl0aWVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gT3duZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVUeXBlUGFyYW1ldGVyVGFyZ2V0cyhkZWNsYXJhdGlvbiwgbGFuZ3VhZ2UpIHtcbiAgaWYgKGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzID09PSB1bmRlZmluZWQpIHJldHVyblxuICBpZiAoIWlzRGVuc2VBcnJheShkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycykpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHR5cGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9uc1wiLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgfVxuICBjb25zdCBuYW1lcyA9IG5ldyBTZXQoKVxuICAvKipcbiAgICogTm9ybWFsaXplcyBhIHR5cGUvdmFsdWUgc3BlbGxpbmcgZm9yIHRhcmdldCBjb2xsaXNpb24gY2hlY2tzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIENhbmRpZGF0ZSB0YXJnZXQgbmFtZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGFyZ2V0IGNvbXBhcmlzb24ga2V5LlxuICAgKi9cbiAgY29uc3QgdGFyZ2V0S2V5ID0gKG5hbWUpID0+IGxhbmd1YWdlID09IFwicGhwXCIgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOiBuYW1lXG4gIGNvbnN0IHZhbHVlTmFtZXMgPSBuZXcgU2V0KFtcbiAgICBkZWNsYXJhdGlvbi5uYW1lLFxuICAgIC4uLihkZWNsYXJhdGlvbi5raW5kID09IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiID8gZGVjbGFyYXRpb24ucGFyYW1ldGVycyA6IGRlY2xhcmF0aW9uLmZpZWxkcykubWFwKCh7bmFtZX0pID0+IG5hbWUpXG4gIF0ubWFwKHRhcmdldEtleSkpXG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzW2luZGV4XVxuICAgIGNvbnN0IGtleXMgPSBwYXJhbWV0ZXIgJiYgdHlwZW9mIHBhcmFtZXRlciA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHBhcmFtZXRlcilcbiAgICAgID8gT2JqZWN0LmtleXMocGFyYW1ldGVyKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIikgOiBcIlwiXG5cbiAgICBpZiAoIXBhcmFtZXRlciB8fCBwYXJhbWV0ZXIua2luZCAhPSBcIlR5cGVQYXJhbWV0ZXJcIiB8fCBrZXlzICE9IFwiaWQsa2luZCxsb2NhdGlvbixuYW1lXCIgfHxcbiAgICAgIHBhcmFtZXRlci5pZCAhPSBgJHtkZWNsYXJhdGlvbi5pZH06dHlwZToke2luZGV4fWApIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgdHlwZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb25cIiwgcGFyYW1ldGVyPy5sb2NhdGlvbiA/PyBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24ocGFyYW1ldGVyLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJ0eXBlIHBhcmFtZXRlciBsb2NhdGlvblwiLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB2YWxpZGF0ZVRhcmdldFR5cGVJZGVudGlmaWVyKGxhbmd1YWdlLCBwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLmxvY2F0aW9uKVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0YXJnZXRLZXkocGFyYW1ldGVyLm5hbWUpXG5cbiAgICBpZiAobmFtZXMuaGFzKG5vcm1hbGl6ZWQpIHx8IHZhbHVlTmFtZXMuaGFzKG5vcm1hbGl6ZWQpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGB0YXJnZXQgdHlwZSBwYXJhbWV0ZXIgY29sbGlzaW9uICcke3BhcmFtZXRlci5uYW1lfSdgLCBwYXJhbWV0ZXIubG9jYXRpb24pXG4gICAgfVxuICAgIG5hbWVzLmFkZChub3JtYWxpemVkKVxuICB9XG59XG5cbi8qKlxuICogRGV0ZWN0cyBUYXNrIDAxMiBJUiBiZWZvcmUgYSBub24tY29ob3J0IGJhY2tlbmQgcmVhY2hlcyBvbGRlciBmZWF0dXJlIGNoZWNrcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIENhbmRpZGF0ZSBtb2R1bGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBnZW5lcmljIGRlY2xhcmF0aW9ucyBhcmUgcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24gbW9kdWxlSGFzVHlwZVBhcmFtZXRlcnMobW9kdWxlKSB7XG4gIHJldHVybiBbLi4ubW9kdWxlLnJlY29yZHMgPz8gW10sIC4uLm1vZHVsZS5mdW5jdGlvbnNdLnNvbWUoKGRlY2xhcmF0aW9uKSA9PlxuICAgIEFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24/LnR5cGVQYXJhbWV0ZXJzKSAmJiBkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycy5sZW5ndGggPiAwKVxufVxuXG4vKipcbiAqIFJlamVjdHMgVGFzayAwMDggc3RhdGVtZW50cyBiZWZvcmUgYSBub24tY29ob3J0IGJhY2tlbmQgcmVhY2hlcyBjb2xsZWN0aW9uLXR5cGUgY2hlY2tzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQ2FuZGlkYXRlIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RJdGVyYXRpb25TdGF0ZW1lbnRzKG1vZHVsZSwgbGFuZ3VhZ2UpIHtcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgcmVqZWN0QmxvY2tJdGVyYXRpb24oZGVjbGFyYXRpb24gJiYgdHlwZW9mIGRlY2xhcmF0aW9uID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24pXG4gICAgICA/IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcImJvZHlcIilcbiAgICAgIDogdW5kZWZpbmVkLCBsYW5ndWFnZSlcbiAgfVxuICByZWplY3RCbG9ja0l0ZXJhdGlvbihtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBsYW5ndWFnZSlcbn1cblxuLyoqXG4gKiBSZWplY3RzIFRhc2sgMDMyIElSIGJlZm9yZSBhIG5vbi1jb2hvcnQgYmFja2VuZCBhbGxvY2F0ZXMgb3V0cHV0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQ2FuZGlkYXRlIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RDb25kaXRpb25Db250cm9sbGVkTG9vcHMobW9kdWxlLCBsYW5ndWFnZSkge1xuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AoZGVjbGFyYXRpb24gJiYgdHlwZW9mIGRlY2xhcmF0aW9uID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24pXG4gICAgICA/IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcImJvZHlcIilcbiAgICAgIDogdW5kZWZpbmVkLCBsYW5ndWFnZSlcbiAgfVxuICByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AobW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgbGFuZ3VhZ2UpXG59XG5cbi8qKlxuICogRmluZHMgYSBjb25kaXRpb24tY29udHJvbGxlZCBsb29wIHdpdGhvdXQgZGVzY2VuZGluZyB0aHJvdWdoIG1hbGZvcm1lZCBvciBjeWNsaWMgY29udGFpbmVycy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gYmxvY2sgLSBDYW5kaWRhdGUgYmxvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge1NldDxvYmplY3Q+fSBbc2Vlbl0gLSBWaXNpdGVkIGNvbnRhaW5lcnMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0QmxvY2tDb25kaXRpb25Mb29wKGJsb2NrLCBsYW5ndWFnZSwgc2VlbiA9IG5ldyBTZXQoKSkge1xuICBpZiAoIWJsb2NrIHx8IHR5cGVvZiBibG9jayAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmxvY2spIHx8IHNlZW4uaGFzKGJsb2NrKSkgcmV0dXJuXG4gIHNlZW4uYWRkKGJsb2NrKVxuICBjb25zdCBzdGF0ZW1lbnRzID0gUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShzdGF0ZW1lbnRzKSkgcmV0dXJuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSBjb250aW51ZVxuICAgIGNvbnN0IGtpbmQgPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwia2luZFwiKVxuICAgIGNvbnN0IGxvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJsb2NhdGlvblwiKSwgUmVmbGVjdC5nZXQoYmxvY2ssIFwibG9jYXRpb25cIikpXG5cbiAgICBpZiAoa2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAzMiBjb25kaXRpb24tY29udHJvbGxlZCBsb29wXCIsIGxvY2F0aW9uKVxuICAgIGlmIChraW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tDb25kaXRpb25Mb29wKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJjb25zZXF1ZW50XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICAgIHJlamVjdEJsb2NrQ29uZGl0aW9uTG9vcChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYWx0ZXJuYXRlXCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9IGVsc2UgaWYgKFtcIkZvckVhY2hTdGF0ZW1lbnRcIiwgXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIsIFwiV2hpbGVTdGF0ZW1lbnRcIl0uaW5jbHVkZXMoU3RyaW5nKGtpbmQpKSkge1xuICAgICAgcmVqZWN0QmxvY2tDb25kaXRpb25Mb29wKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tDb25kaXRpb25Mb29wKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiaGFuZGxlcnNcIikgPz8gW10pIHJlamVjdEJsb2NrQ29uZGl0aW9uTG9vcChSZWZsZWN0LmdldChoYW5kbGVyLCBcImNhdGNoQm9keVwiKSwgbGFuZ3VhZ2UsIHNlZW4pXG4gICAgICByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImZpbmFsbHlCb2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGaW5kcyBhIFRhc2sgMDA4IG5vZGUgd2l0aG91dCBkZXNjZW5kaW5nIHRocm91Z2ggbWFsZm9ybWVkIG9yIGN5Y2xpYyBjb250YWluZXJzLlxuICogQHBhcmFtIHt1bmtub3dufSBibG9jayAtIENhbmRpZGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFtzZWVuXSAtIFZpc2l0ZWQgY29udGFpbmVycy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RCbG9ja0l0ZXJhdGlvbihibG9jaywgbGFuZ3VhZ2UsIHNlZW4gPSBuZXcgU2V0KCkpIHtcbiAgaWYgKCFibG9jayB8fCB0eXBlb2YgYmxvY2sgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGJsb2NrKSB8fCBzZWVuLmhhcyhibG9jaykpIHJldHVyblxuICBzZWVuLmFkZChibG9jaylcbiAgY29uc3Qgc3RhdGVtZW50cyA9IFJlZmxlY3QuZ2V0KGJsb2NrLCBcInN0YXRlbWVudHNcIilcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoc3RhdGVtZW50cykpIHJldHVyblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgaWYgKCFzdGF0ZW1lbnQgfHwgdHlwZW9mIHN0YXRlbWVudCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoc3RhdGVtZW50KSkgY29udGludWVcbiAgICBjb25zdCBraW5kID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIilcbiAgICBjb25zdCBsb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwibG9jYXRpb25cIiksIFJlZmxlY3QuZ2V0KGJsb2NrLCBcImxvY2F0aW9uXCIpKVxuXG4gICAgaWYgKFtcIkZvckVhY2hTdGF0ZW1lbnRcIiwgXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIsIFwiQnJlYWtTdGF0ZW1lbnRcIiwgXCJDb250aW51ZVN0YXRlbWVudFwiXS5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA4IG9yZGVyZWQgbGlzdCBpdGVyYXRpb25cIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChraW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tJdGVyYXRpb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImNvbnNlcXVlbnRcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgICAgcmVqZWN0QmxvY2tJdGVyYXRpb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImFsdGVybmF0ZVwiKSwgbGFuZ3VhZ2UsIHNlZW4pXG4gICAgfSBlbHNlIGlmIChraW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgIHJlamVjdEJsb2NrSXRlcmF0aW9uKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiaGFuZGxlcnNcIikgPz8gW10pIHJlamVjdEJsb2NrSXRlcmF0aW9uKFJlZmxlY3QuZ2V0KGhhbmRsZXIsIFwiY2F0Y2hCb2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICAgIHJlamVjdEJsb2NrSXRlcmF0aW9uKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJmaW5hbGx5Qm9keVwiKSwgbGFuZ3VhZ2UsIHNlZW4pXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVqZWN0cyBUYXNrIDAwNyBvcHRpb25hbCB0eXBlcyBiZWZvcmUgYSBub24tY29ob3J0IGVtaXR0ZXIgYWxsb2NhdGVzIG91dHB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIENhbmRpZGF0ZSBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0T3B0aW9uYWxUeXBlcyhtb2R1bGUsIGxhbmd1YWdlKSB7XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykge1xuICAgIGlmICghZGVjbGFyYXRpb24gfHwgdHlwZW9mIGRlY2xhcmF0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbikpIGNvbnRpbnVlXG4gICAgY29uc3QgbG9jYXRpb24gPSBSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJsb2NhdGlvblwiKSA/PyBtb2R1bGUubG9jYXRpb25cblxuICAgIGlmIChjb250YWluc09wdGlvbmFsVHlwZShSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJyZXR1cm5UeXBlXCIpKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA3IG9wdGlvbmFsIHJldHVybiB0eXBlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBBcnJheS5pc0FycmF5KFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcInBhcmFtZXRlcnNcIikpID8gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwicGFyYW1ldGVyc1wiKSA6IFtdKSB7XG4gICAgICBpZiAoY29udGFpbnNPcHRpb25hbFR5cGUocGFyYW1ldGVyPy50eXBlKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDcgb3B0aW9uYWwgcGFyYW1ldGVyIHR5cGVcIiwgcGFyYW1ldGVyLmxvY2F0aW9uID8/IGxvY2F0aW9uKVxuICAgICAgfVxuICAgIH1cbiAgICByZWplY3RCbG9ja09wdGlvbmFsVHlwZXMoUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwiYm9keVwiKSwgbGFuZ3VhZ2UpXG4gIH1cbiAgcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIGxhbmd1YWdlKVxufVxuXG4vKipcbiAqIFJlamVjdHMgb3B0aW9uYWwgbG9jYWwgdHlwZXMgcmVjdXJzaXZlbHkgaW4gb25lIGNhbmRpZGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7dW5rbm93bn0gYmxvY2sgLSBDYW5kaWRhdGUgYmxvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKGJsb2NrLCBsYW5ndWFnZSkge1xuICBpZiAoIWJsb2NrIHx8IHR5cGVvZiBibG9jayAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmxvY2spIHx8ICFBcnJheS5pc0FycmF5KFJlZmxlY3QuZ2V0KGJsb2NrLCBcInN0YXRlbWVudHNcIikpKSByZXR1cm5cbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKSkge1xuICAgIGlmICghc3RhdGVtZW50IHx8IHR5cGVvZiBzdGF0ZW1lbnQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHN0YXRlbWVudCkpIGNvbnRpbnVlXG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIGNvbnRhaW5zT3B0aW9uYWxUeXBlKHN0YXRlbWVudC50eXBlKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA3IG9wdGlvbmFsIGxvY2FsIHR5cGVcIiwgc3RhdGVtZW50LmxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RCbG9ja09wdGlvbmFsVHlwZXMoc3RhdGVtZW50LmNvbnNlcXVlbnQsIGxhbmd1YWdlKVxuICAgICAgaWYgKHN0YXRlbWVudC5hbHRlcm5hdGUpIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBsYW5ndWFnZSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICBpZiAoY29udGFpbnNPcHRpb25hbFR5cGUoc3RhdGVtZW50LnZhbHVlQmluZGluZz8udHlwZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA3IG9wdGlvbmFsIGl0ZXJhdGlvbiBiaW5kaW5nIHR5cGVcIiwgc3RhdGVtZW50LnZhbHVlQmluZGluZy5sb2NhdGlvbiA/PyBzdGF0ZW1lbnQubG9jYXRpb24pXG4gICAgICB9XG4gICAgICByZWplY3RCbG9ja09wdGlvbmFsVHlwZXMoc3RhdGVtZW50LmJvZHksIGxhbmd1YWdlKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSByZWplY3RCbG9ja09wdGlvbmFsVHlwZXMoc3RhdGVtZW50LmJvZHksIGxhbmd1YWdlKVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RCbG9ja09wdGlvbmFsVHlwZXMoc3RhdGVtZW50LmJvZHksIGxhbmd1YWdlKVxuICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHN0YXRlbWVudC5oYW5kbGVycyA/PyBbXSkgcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKGhhbmRsZXIuY2F0Y2hCb2R5LCBsYW5ndWFnZSlcbiAgICAgIGlmIChzdGF0ZW1lbnQuZmluYWxseUJvZHkpIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhzdGF0ZW1lbnQuZmluYWxseUJvZHksIGxhbmd1YWdlKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyBvbmUgYm91bmRlZCByZWN1cnNpdmUgc2VtYW50aWMgdHlwZSBmb3IgYW4gb3B0aW9uYWwgbm9kZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdHlwZSAtIENhbmRpZGF0ZSB0eXBlLlxuICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW3NlZW5dIC0gQ3ljbGUgcHJvdGVjdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGFuIG9wdGlvbmFsIHR5cGUgb2NjdXJzLlxuICovXG5mdW5jdGlvbiBjb250YWluc09wdGlvbmFsVHlwZSh0eXBlLCBzZWVuID0gbmV3IFNldCgpKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodHlwZSkgfHwgc2Vlbi5oYXModHlwZSkpIHJldHVybiBmYWxzZVxuICBzZWVuLmFkZCh0eXBlKVxuICBjb25zdCBraW5kID0gUmVmbGVjdC5nZXQodHlwZSwgXCJraW5kXCIpXG5cbiAgaWYgKGtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikgcmV0dXJuIHRydWVcbiAgaWYgKGtpbmQgPT0gXCJMaXN0VHlwZVwiKSByZXR1cm4gY29udGFpbnNPcHRpb25hbFR5cGUoUmVmbGVjdC5nZXQodHlwZSwgXCJlbGVtZW50VHlwZVwiKSwgc2VlbilcbiAgaWYgKGtpbmQgPT0gXCJNYXBUeXBlXCIgfHwga2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHJldHVybiBjb250YWluc09wdGlvbmFsVHlwZShSZWZsZWN0LmdldCh0eXBlLCBcImtleVR5cGVcIiksIHNlZW4pIHx8XG4gICAgY29udGFpbnNPcHRpb25hbFR5cGUoUmVmbGVjdC5nZXQodHlwZSwgXCJ2YWx1ZVR5cGVcIiksIHNlZW4pXG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogUmVqZWN0cyBUYXNrIDAwNiB0eXBlcyBiZWZvcmUgYSByZWdpc3RlcmVkIG5vbi1jb2hvcnQgZW1pdHRlciBjYW4gYWxsb2NhdGUgYW4gYXJ0aWZhY3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0Q29sbGVjdGlvblR5cGVzKG1vZHVsZSwgbGFuZ3VhZ2UpIHtcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCB0eXBlb2YgZGVjbGFyYXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9uKSkgY29udGludWVcbiAgICBjb25zdCBsb2NhdGlvbiA9IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcImxvY2F0aW9uXCIpID8/IG1vZHVsZS5sb2NhdGlvblxuICAgIGNvbnN0IHJldHVyblR5cGUgPSBSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJyZXR1cm5UeXBlXCIpXG5cbiAgICBpZiAoaXNDb2xsZWN0aW9uVHlwZShyZXR1cm5UeXBlKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA2IGltbXV0YWJsZSBjb2xsZWN0aW9uIHJldHVybiB0eXBlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwicGFyYW1ldGVyc1wiKVxuXG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSA/IHBhcmFtZXRlcnMgOiBbXSkge1xuICAgICAgaWYgKGlzQ29sbGVjdGlvblR5cGUocGFyYW1ldGVyPy50eXBlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA2IGltbXV0YWJsZSBjb2xsZWN0aW9uIHBhcmFtZXRlciB0eXBlXCIsIHBhcmFtZXRlci5sb2NhdGlvbiA/PyBsb2NhdGlvbilcbiAgICB9XG4gICAgcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMoUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwiYm9keVwiKSwgbGFuZ3VhZ2UpXG4gIH1cbiAgcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMobW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgbGFuZ3VhZ2UpXG59XG5cbi8qKlxuICogUmVqZWN0cyBjb2xsZWN0aW9uIGxvY2FsIHR5cGVzIHJlY3Vyc2l2ZWx5IGluIG9uZSBibG9jay5cbiAqIEBwYXJhbSB7dW5rbm93bn0gYmxvY2sgLSBDYW5kaWRhdGUgc2VtYW50aWMgYmxvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMoYmxvY2ssIGxhbmd1YWdlKSB7XG4gIGlmICghYmxvY2sgfHwgdHlwZW9mIGJsb2NrICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShibG9jaykgfHwgIUFycmF5LmlzQXJyYXkoUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKSkpIHJldHVyblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBSZWZsZWN0LmdldChibG9jaywgXCJzdGF0ZW1lbnRzXCIpKSB7XG4gICAgaWYgKCFzdGF0ZW1lbnQgfHwgdHlwZW9mIHN0YXRlbWVudCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoc3RhdGVtZW50KSkgY29udGludWVcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgJiYgaXNDb2xsZWN0aW9uVHlwZShzdGF0ZW1lbnQudHlwZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNiBpbW11dGFibGUgY29sbGVjdGlvbiBsb2NhbCB0eXBlXCIsIHN0YXRlbWVudC5sb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMoc3RhdGVtZW50LmNvbnNlcXVlbnQsIGxhbmd1YWdlKVxuICAgICAgaWYgKHN0YXRlbWVudC5hbHRlcm5hdGUpIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKHN0YXRlbWVudC5hbHRlcm5hdGUsIGxhbmd1YWdlKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgIGlmIChpc0NvbGxlY3Rpb25UeXBlKHN0YXRlbWVudC52YWx1ZUJpbmRpbmc/LnR5cGUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNiBpbW11dGFibGUgY29sbGVjdGlvbiBpdGVyYXRpb24gYmluZGluZyB0eXBlXCIsIHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubG9jYXRpb24gPz8gc3RhdGVtZW50LmxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMoc3RhdGVtZW50LmJvZHksIGxhbmd1YWdlKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSByZWplY3RCbG9ja0NvbGxlY3Rpb25UeXBlcyhzdGF0ZW1lbnQuYm9keSwgbGFuZ3VhZ2UpXG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKHN0YXRlbWVudC5ib2R5LCBsYW5ndWFnZSlcbiAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBzdGF0ZW1lbnQuaGFuZGxlcnMgPz8gW10pIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKGhhbmRsZXIuY2F0Y2hCb2R5LCBsYW5ndWFnZSlcbiAgICAgIGlmIChzdGF0ZW1lbnQuZmluYWxseUJvZHkpIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKHN0YXRlbWVudC5maW5hbGx5Qm9keSwgbGFuZ3VhZ2UpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgcG9zc2libGUgcmVjdXJzaXZlIGNvbGxlY3Rpb24gdHlwZSB3aXRob3V0IHRyYXZlcnNpbmcgbWFsZm9ybWVkIGNoaWxkcmVuLlxuICogQHBhcmFtIHt1bmtub3dufSB0eXBlIC0gQ2FuZGlkYXRlIHR5cGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgb3V0ZXIgdHlwZSBpcyBhIGNvbGxlY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGlzQ29sbGVjdGlvblR5cGUodHlwZSkge1xuICByZXR1cm4gQm9vbGVhbih0eXBlICYmIHR5cGVvZiB0eXBlID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodHlwZSkgJiZcbiAgICAoW1wiTGlzdFR5cGVcIiwgXCJNYXBUeXBlXCIsIFwiT3JkZXJlZE1hcFR5cGVcIl0uaW5jbHVkZXMoU3RyaW5nKFJlZmxlY3QuZ2V0KHR5cGUsIFwia2luZFwiKSkpKSlcbn1cblxuLyoqXG4gKiBSZWplY3RzIHNlbWFudGljIG5hbWVzIHRoYXQgd291bGQgY2FwdHVyZSBzeW50YXggb3duZWQgYnkgb25lIGJhY2tlbmQgZW1pdHRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2Ugb3IgYmluYXJ5IHRhcmdldC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVNjYWZmb2xkaW5nTmFtZXMobW9kdWxlLCBsYW5ndWFnZSkge1xuICB2YWxpZGF0ZVJlY29yZENvbnN0cnVjdG9yTmFtZXMobW9kdWxlLCBsYW5ndWFnZSlcbiAgY29uc3QgbmVlZHNOYXRpdmVNYXAgPSBbXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiXS5pbmNsdWRlcyhsYW5ndWFnZSkgJiZcbiAgICAobW9kdWxlQ29udGFpbnNFeHByZXNzaW9uS2luZChtb2R1bGUsIFwiTWFwTGl0ZXJhbFwiKSB8fCBtb2R1bGVDb250YWluc0V4cHJlc3Npb25LaW5kKG1vZHVsZSwgXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKSlcbiAgY29uc3QgbmVlZHNQaHBDb3VudCA9IGxhbmd1YWdlID09IFwicGhwXCIgJiYgbW9kdWxlQ29udGFpbnNFeHByZXNzaW9uS2luZChtb2R1bGUsIFwiQ29sbGVjdGlvblNpemVFeHByZXNzaW9uXCIpXG4gIGNvbnN0IGphdmFzY3JpcHRPd25lZE5hbWVzID0gbmV3IFNldChbXCJjb25zb2xlXCIsIC4uLihuZWVkc05hdGl2ZU1hcCA/IFtcIk1hcFwiXSA6IFtdKV0pXG4gIGNvbnN0IG93bmVkRW50cnlOYW1lcyA9IGxhbmd1YWdlID09IFwiZ29cIiA/IG5ldyBTZXQoW1wiZm10XCIsIFwiaW50NjRcIiwgXCJib29sXCIsIFwic3RyaW5nXCIsIFwidHJ1ZVwiLCBcImZhbHNlXCJdKSA6XG4gICAgbGFuZ3VhZ2UgPT0gXCJjc2hhcnBcIiA/IG5ldyBTZXQoW1wiU3lzdGVtXCJdKSA6IGxhbmd1YWdlID09IFwiamF2YVwiID8gbmV3IFNldChbXCJhcmdzXCIsIFwiU3lzdGVtXCJdKSA6XG4gICAgW1wiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIl0uaW5jbHVkZXMobGFuZ3VhZ2UpID8gamF2YXNjcmlwdE93bmVkTmFtZXMgOiBuZXcgU2V0KClcbiAgY29uc3Qgb3duZWRQcmludFJlY2VpdmVyTmFtZXMgPSBsYW5ndWFnZSA9PSBcImdvXCIgPyBuZXcgU2V0KFtcImZtdFwiLCBcImludDY0XCIsIFwiYm9vbFwiLCBcInN0cmluZ1wiLCBcInRydWVcIiwgXCJmYWxzZVwiXSkgOlxuICAgIGxhbmd1YWdlID09IFwiY3NoYXJwXCIgfHwgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBuZXcgU2V0KFtcIlN5c3RlbVwiXSkgOlxuICAgIFtcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCJdLmluY2x1ZGVzKGxhbmd1YWdlKSA/IGphdmFzY3JpcHRPd25lZE5hbWVzIDogbmV3IFNldCgpXG4gIGNvbnN0IG93bmVkQ2FsbGFibGVOYW1lcyA9IGxhbmd1YWdlID09IFwiZ29cIiA/IG5ldyBTZXQoW1wibWFpblwiLCBcImluaXRcIiwgXCJmbXRcIiwgXCJpbnQ2NFwiLCBcImJvb2xcIiwgXCJzdHJpbmdcIiwgXCJ0cnVlXCIsIFwiZmFsc2VcIl0pIDpcbiAgICBsYW5ndWFnZSA9PSBcImNzaGFycFwiID8gbmV3IFNldChbXG4gICAgXCJFcXVhbHNcIiwgXCJGaW5hbGl6ZVwiLCBcIkdldEhhc2hDb2RlXCIsIFwiR2V0VHlwZVwiLCBcIk1haW5cIiwgXCJNZW1iZXJ3aXNlQ2xvbmVcIiwgXCJQcm9ncmFtXCIsIFwiUmVmZXJlbmNlRXF1YWxzXCIsIFwiU3lzdGVtXCIsIFwiVG9TdHJpbmdcIlxuICBdKSA6XG4gICAgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBuZXcgU2V0KFtcIm1haW5cIl0pIDpcbiAgICBbXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiXS5pbmNsdWRlcyhsYW5ndWFnZSkgPyBqYXZhc2NyaXB0T3duZWROYW1lcyA6XG4gICAgbmVlZHNQaHBDb3VudCA/IG5ldyBTZXQoW1wiY291bnRcIl0pIDpcbiAgICBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IG5ldyBTZXQoW1wicHV0c1wiLCBcInNlbmRcIiwgXCJwdWJsaWNfc2VuZFwiLCBcIl9fc2VuZF9fXCJdKSA6IG5ldyBTZXQoKVxuICAvKipcbiAgICogUHJvdGVjdHMgcHJpbnQvZmFjdG9yeSBzcGVsbGluZ3MgaW5zaWRlIG9uZSBjYWxsYWJsZSBzY29wZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QYXJhbWV0ZXJbXX0gcGFyYW1ldGVycyAtIENhbGxhYmxlIHBhcmFtZXRlcnMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJvZHkgLSBDYWxsYWJsZSBib2R5LlxuICAgKiBAcGFyYW0ge1wiZnVuY3Rpb25cIiB8IFwiY29uc3RydWN0b3JcIiB8IFwibWV0aG9kXCJ9IG93bmVyIC0gRGlhZ25vc3RpYyBvd25lci5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlQ2FsbGFibGVCaW5kaW5ncyA9IChwYXJhbWV0ZXJzLCBib2R5LCBvd25lcikgPT4ge1xuICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIHBhcmFtZXRlcnMpIHtcbiAgICAgIGlmIChvd25lZFByaW50UmVjZWl2ZXJOYW1lcy5oYXMocGFyYW1ldGVyLm5hbWUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7b3duZXJ9IHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLCBwYXJhbWV0ZXIubG9jYXRpb24pXG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIGFsbFN0YXRlbWVudHMoYm9keSkpIHtcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiAmJiBvd25lZFByaW50UmVjZWl2ZXJOYW1lcy5oYXMoc3RhdGVtZW50Lm5hbWUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7b3duZXJ9IGxvY2FsICcke3N0YXRlbWVudC5uYW1lfScgY2FwdHVyZXMgYmFja2VuZCBzY2FmZm9sZGluZ2AsIHN0YXRlbWVudC5sb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiAmJiBvd25lZFByaW50UmVjZWl2ZXJOYW1lcy5oYXMoc3RhdGVtZW50LnZhbHVlQmluZGluZy5uYW1lKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGAke293bmVyfSBpdGVyYXRpb24gYmluZGluZyAnJHtzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCxcbiAgICAgICAgICBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLmxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgYmluZGluZyBvZiBbc3RhdGVtZW50LmtleUJpbmRpbmcsIHN0YXRlbWVudC52YWx1ZUJpbmRpbmddKSB7XG4gICAgICAgICAgaWYgKG93bmVkUHJpbnRSZWNlaXZlck5hbWVzLmhhcyhiaW5kaW5nLm5hbWUpKSB7XG4gICAgICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGAke293bmVyfSBpdGVyYXRpb24gYmluZGluZyAnJHtiaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCwgYmluZGluZy5sb2NhdGlvbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBzdGF0ZW1lbnQuaGFuZGxlcnMgPz8gW10pIHtcbiAgICAgICAgICBpZiAob3duZWRQcmludFJlY2VpdmVyTmFtZXMuaGFzKGhhbmRsZXIuY2F0Y2hCaW5kaW5nLm5hbWUpKSB7XG4gICAgICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGAke293bmVyfSBjYXRjaCBiaW5kaW5nICcke2hhbmRsZXIuY2F0Y2hCaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCxcbiAgICAgICAgICAgICAgaGFuZGxlci5jYXRjaEJpbmRpbmcubG9jYXRpb24pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYWxsU3RhdGVtZW50cyhtb2R1bGUuZW50cnlQb2ludC5ib2R5KSkge1xuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiAmJiBvd25lZEVudHJ5TmFtZXMuaGFzKHN0YXRlbWVudC5uYW1lKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZW50cnkgbG9jYWwgJyR7c3RhdGVtZW50Lm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCwgc3RhdGVtZW50LmxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIgJiYgb3duZWRFbnRyeU5hbWVzLmhhcyhzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLm5hbWUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBlbnRyeSBpdGVyYXRpb24gYmluZGluZyAnJHtzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCxcbiAgICAgICAgc3RhdGVtZW50LnZhbHVlQmluZGluZy5sb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICBmb3IgKGNvbnN0IGJpbmRpbmcgb2YgW3N0YXRlbWVudC5rZXlCaW5kaW5nLCBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nXSkge1xuICAgICAgICBpZiAob3duZWRFbnRyeU5hbWVzLmhhcyhiaW5kaW5nLm5hbWUpKSB7XG4gICAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZW50cnkgaXRlcmF0aW9uIGJpbmRpbmcgJyR7YmluZGluZy5uYW1lfScgY2FwdHVyZXMgYmFja2VuZCBzY2FmZm9sZGluZ2AsIGJpbmRpbmcubG9jYXRpb24pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBzdGF0ZW1lbnQuaGFuZGxlcnMgPz8gW10pIHtcbiAgICAgICAgaWYgKG93bmVkRW50cnlOYW1lcy5oYXMoaGFuZGxlci5jYXRjaEJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBlbnRyeSBjYXRjaCBiaW5kaW5nICcke2hhbmRsZXIuY2F0Y2hCaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCxcbiAgICAgICAgICAgIGhhbmRsZXIuY2F0Y2hCaW5kaW5nLmxvY2F0aW9uKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykge1xuICAgIGNvbnN0IHRhcmdldE5hbWUgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gZGVjbGFyYXRpb24ubmFtZS50b0xvd2VyQ2FzZSgpIDogZGVjbGFyYXRpb24ubmFtZVxuXG4gICAgaWYgKG93bmVkQ2FsbGFibGVOYW1lcy5oYXModGFyZ2V0TmFtZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGZ1bmN0aW9uICcke2RlY2xhcmF0aW9uLm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCwgZGVjbGFyYXRpb25OYW1lTG9jYXRpb24oZGVjbGFyYXRpb24pKVxuICAgIH1cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIpIHtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGVtaXR0ZWRKYXZhRnVuY3Rpb25TaWduYXR1cmUoZGVjbGFyYXRpb24pXG5cbiAgICAgIGlmIChzaWduYXR1cmUgJiYgamF2YU9iamVjdEluc3RhbmNlTWV0aG9kU2lnbmF0dXJlcy5oYXMoc2lnbmF0dXJlKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgYGZ1bmN0aW9uICcke3NpZ25hdHVyZX0nIGNvbmZsaWN0cyB3aXRoIGFuIGluaGVyaXRlZCBqYXZhLmxhbmcuT2JqZWN0IGluc3RhbmNlIG1ldGhvZGAsXG4gICAgICAgICAgZGVjbGFyYXRpb25OYW1lTG9jYXRpb24oZGVjbGFyYXRpb24pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gICAgdmFsaWRhdGVDYWxsYWJsZUJpbmRpbmdzKGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMsIGRlY2xhcmF0aW9uLmJvZHksIFwiZnVuY3Rpb25cIilcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5jbGFzc2VzID8/IFtdKSB7XG4gICAgdmFsaWRhdGVDYWxsYWJsZUJpbmRpbmdzKGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnMsIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmJvZHksIFwiY29uc3RydWN0b3JcIilcbiAgICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBkZWNsYXJhdGlvbi5tZXRob2RzKSB2YWxpZGF0ZUNhbGxhYmxlQmluZGluZ3MobWV0aG9kLnBhcmFtZXRlcnMsIG1ldGhvZC5ib2R5LCBcIm1ldGhvZFwiKVxuICB9XG4gIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIikgdmFsaWRhdGVKYXZhVXRpbEZhY3RvcnlOYW1lcyhtb2R1bGUpXG59XG5cbi8qKlxuICogUmVqZWN0cyBKYXZhU2NyaXB0LWZhbWlseSBsZXhpY2FsIGJpbmRpbmdzIHRoYXQgY2FuIGNhcHR1cmUgZW1pdHRlZCBiYXJlIHJlY29yZCBjb25zdHJ1Y3RvciBuYW1lcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFZhbGlkYXRlZC1zaGFwZSBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVSZWNvcmRDb25zdHJ1Y3Rvck5hbWVzKG1vZHVsZSwgbGFuZ3VhZ2UpIHtcbiAgaWYgKGxhbmd1YWdlICE9IFwiamF2YXNjcmlwdFwiICYmIGxhbmd1YWdlICE9IFwidHlwZXNjcmlwdFwiKSByZXR1cm5cbiAgY29uc3QgcmVjb3JkTmFtZXMgPSBuZXcgU2V0KFtcbiAgICAuLi4obW9kdWxlLnJlY29yZHMgPz8gW10pLm1hcCgocmVjb3JkKSA9PiByZWNvcmQubmFtZSksXG4gICAgLi4uKG1vZHVsZS5jbGFzc2VzID8/IFtdKS5tYXAoKGRlY2xhcmF0aW9uKSA9PiBkZWNsYXJhdGlvbi5uYW1lKSxcbiAgICAuLi4obW9kdWxlLmVycm9ycyA/PyBbXSkubWFwKChlcnJvcikgPT4gZXJyb3IubmFtZSlcbiAgXSlcblxuICAvKipcbiAgICogQ2hlY2tzIGRlY2xhcmF0aW9ucyBuZXN0ZWQgYmVuZWF0aCBvbmUgb3duaW5nIGJsb2NrLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIEJsb2NrIHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7XCJlbnRyeVwiIHwgXCJmdW5jdGlvblwiIHwgXCJjb25zdHJ1Y3RvclwiIHwgXCJtZXRob2RcIn0gb3duZXIgLSBPd25pbmcgc2NvcGUga2luZC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjb25zdCB2YWxpZGF0ZUJsb2NrTmFtZXMgPSAoYmxvY2ssIG93bmVyKSA9PiB7XG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYWxsU3RhdGVtZW50cyhibG9jaykpIHtcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiAmJiByZWNvcmROYW1lcy5oYXMoc3RhdGVtZW50Lm5hbWUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7b3duZXJ9IGxvY2FsICcke3N0YXRlbWVudC5uYW1lfScgY2FwdHVyZXMgcmVjb3JkIGNvbnN0cnVjdG9yYCwgYmluZGluZ05hbWVMb2NhdGlvbihzdGF0ZW1lbnQpKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiICYmIHJlY29yZE5hbWVzLmhhcyhzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLm5hbWUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBgJHtvd25lcn0gaXRlcmF0aW9uIGJpbmRpbmcgJyR7c3RhdGVtZW50LnZhbHVlQmluZGluZy5uYW1lfScgY2FwdHVyZXMgcmVjb3JkIGNvbnN0cnVjdG9yYCxcbiAgICAgICAgICBiaW5kaW5nTmFtZUxvY2F0aW9uKHN0YXRlbWVudC52YWx1ZUJpbmRpbmcpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIikge1xuICAgICAgICBmb3IgKGNvbnN0IGJpbmRpbmcgb2YgW3N0YXRlbWVudC5rZXlCaW5kaW5nLCBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nXSkge1xuICAgICAgICAgIGlmIChyZWNvcmROYW1lcy5oYXMoYmluZGluZy5uYW1lKSkge1xuICAgICAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gaXRlcmF0aW9uIGJpbmRpbmcgJyR7YmluZGluZy5uYW1lfScgY2FwdHVyZXMgcmVjb3JkIGNvbnN0cnVjdG9yYCxcbiAgICAgICAgICAgICAgYmluZGluZ05hbWVMb2NhdGlvbihiaW5kaW5nKSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgICAgIGNvbnN0IGNhcHR1cmVkID0gKHN0YXRlbWVudC5oYW5kbGVycyA/PyBbXSkuZmluZCgoaGFuZGxlcikgPT4gcmVjb3JkTmFtZXMuaGFzKGhhbmRsZXIuY2F0Y2hCaW5kaW5nLm5hbWUpKVxuXG4gICAgICAgIGlmIChjYXB0dXJlZCkge1xuICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7b3duZXJ9IGNhdGNoIGJpbmRpbmcgJyR7Y2FwdHVyZWQuY2F0Y2hCaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyBub21pbmFsIGNvbnN0cnVjdG9yYCxcbiAgICAgICAgICAgIGJpbmRpbmdOYW1lTG9jYXRpb24oY2FwdHVyZWQuY2F0Y2hCaW5kaW5nKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlQmxvY2tOYW1lcyhtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBcImVudHJ5XCIpXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykge1xuICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMpIHtcbiAgICAgIGlmIChyZWNvcmROYW1lcy5oYXMocGFyYW1ldGVyLm5hbWUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGZ1bmN0aW9uIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nIGNhcHR1cmVzIHJlY29yZCBjb25zdHJ1Y3RvcmAsIGJpbmRpbmdOYW1lTG9jYXRpb24ocGFyYW1ldGVyKSlcbiAgICAgIH1cbiAgICB9XG4gICAgdmFsaWRhdGVCbG9ja05hbWVzKGRlY2xhcmF0aW9uLmJvZHksIFwiZnVuY3Rpb25cIilcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5jbGFzc2VzID8/IFtdKSB7XG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgZGVjbGFyYXRpb24uY29uc3RydWN0b3IucGFyYW1ldGVycykge1xuICAgICAgaWYgKHJlY29yZE5hbWVzLmhhcyhwYXJhbWV0ZXIubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgY29uc3RydWN0b3IgcGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfScgY2FwdHVyZXMgbm9taW5hbCBjb25zdHJ1Y3RvcmAsXG4gICAgICAgICAgYmluZGluZ05hbWVMb2NhdGlvbihwYXJhbWV0ZXIpKVxuICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSwgXCJjb25zdHJ1Y3RvclwiKVxuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGRlY2xhcmF0aW9uLm1ldGhvZHMpIHtcbiAgICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIG1ldGhvZC5wYXJhbWV0ZXJzKSB7XG4gICAgICAgIGlmIChyZWNvcmROYW1lcy5oYXMocGFyYW1ldGVyLm5hbWUpKSB7XG4gICAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWV0aG9kIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nIGNhcHR1cmVzIG5vbWluYWwgY29uc3RydWN0b3JgLFxuICAgICAgICAgICAgYmluZGluZ05hbWVMb2NhdGlvbihwYXJhbWV0ZXIpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YWxpZGF0ZUJsb2NrTmFtZXMobWV0aG9kLmJvZHksIFwibWV0aG9kXCIpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVqZWN0cyBsZXhpY2FsIGJpbmRpbmdzIHRoYXQgd291bGQgY2FwdHVyZSBKYXZhJ3MgcGFja2FnZSBxdWFsaWZpZXIgaW4gZW1pdHRlZCBjb2xsZWN0aW9uIGZhY3Rvcmllcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFZhbGlkYXRlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVKYXZhVXRpbEZhY3RvcnlOYW1lcyhtb2R1bGUpIHtcbiAgLyoqXG4gICAqIFdhbGtzIG9uZSBsZXhpY2FsIGJsb2NrIHdoaWxlIHJldGFpbmluZyBvbmx5IGEgY3VycmVudGx5IHZpc2libGUgY2FwdHVyZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYmxvY2sgLSBCbG9jayB0byBpbnNwZWN0IGluIHNlbWFudGljIG9yZGVyLlxuICAgKiBAcGFyYW0ge3tkZXRhaWw6IHN0cmluZywgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSB8IHVuZGVmaW5lZH0gaW5oZXJpdGVkIC0gVmlzaWJsZSBjYXB0dXJlLlxuICAgKiBAcGFyYW0ge1wiZW50cnlcIiB8IFwiZnVuY3Rpb25cIiB8IFwiY29uc3RydWN0b3JcIiB8IFwibWV0aG9kXCJ9IG93bmVyIC0gT3duaW5nIHNjb3BlIGtpbmQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVCbG9ja05hbWVzID0gKGJsb2NrLCBpbmhlcml0ZWQsIG93bmVyKSA9PiB7XG4gICAgbGV0IGNhcHR1cmUgPSBpbmhlcml0ZWRcblxuICAgIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIGJsb2NrLnN0YXRlbWVudHMpIHtcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiAmJiBzdGF0ZW1lbnQubmFtZSA9PSBcImphdmFcIikge1xuICAgICAgICBjYXB0dXJlID0ge1xuICAgICAgICAgIGRldGFpbDogYCR7b3duZXJ9IGxvY2FsICdqYXZhJyBjYXB0dXJlcyBqYXZhLnV0aWwgZmFjdG9yeSBzeW50YXhgLFxuICAgICAgICAgIGxvY2F0aW9uOiBzdGF0ZW1lbnQubG9jYXRpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5jb25kaXRpb24gOlxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuY29uZGl0aW9uIDpcbiAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQubGlzdCA6XG4gICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQubWFwIDpcbiAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgPyBzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIgOlxuICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOlxuICAgICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJQcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOlxuICAgICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5leHByZXNzaW9uIDpcbiAgICAgICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOlxuICAgICAgICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiUmFpc2VTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5lcnJvci5tZXNzYWdlIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmIChjYXB0dXJlICYmIGV4cHJlc3Npb24gJiYgKGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbiwgXCJMaXN0TGl0ZXJhbFwiKSB8fFxuICAgICAgICBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24sIFwiTWFwTGl0ZXJhbFwiKSB8fCBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24sIFwiT3JkZXJlZE1hcExpdGVyYWxcIikgfHxcbiAgICAgICAgZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLCBcIk9wdGlvbmFsTm9uZVwiKSB8fFxuICAgICAgICBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24sIFwiT3B0aW9uYWxTb21lXCIpKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoXCJqYXZhXCIsIGNhcHR1cmUuZGV0YWlsLCBjYXB0dXJlLmxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoc3RhdGVtZW50LmNvbnNlcXVlbnQsIGNhcHR1cmUsIG93bmVyKVxuICAgICAgICBpZiAoc3RhdGVtZW50LmFsdGVybmF0ZSkgdmFsaWRhdGVCbG9ja05hbWVzKHN0YXRlbWVudC5hbHRlcm5hdGUsIGNhcHR1cmUsIG93bmVyKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIikgdmFsaWRhdGVCbG9ja05hbWVzKHN0YXRlbWVudC5ib2R5LCBjYXB0dXJlLCBvd25lcilcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIikge1xuICAgICAgICBjb25zdCBsb29wQ2FwdHVyZSA9IHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZSA9PSBcImphdmFcIiA/IHtcbiAgICAgICAgICBkZXRhaWw6IGAke293bmVyfSBpdGVyYXRpb24gYmluZGluZyAnamF2YScgY2FwdHVyZXMgamF2YS51dGlsIGZhY3Rvcnkgc3ludGF4YCxcbiAgICAgICAgICBsb2NhdGlvbjogc3RhdGVtZW50LnZhbHVlQmluZGluZy5sb2NhdGlvblxuICAgICAgICB9IDogY2FwdHVyZVxuXG4gICAgICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhzdGF0ZW1lbnQuYm9keSwgbG9vcENhcHR1cmUsIG93bmVyKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICAgIGNvbnN0IGNhcHR1cmVkQmluZGluZyA9IFtzdGF0ZW1lbnQua2V5QmluZGluZywgc3RhdGVtZW50LnZhbHVlQmluZGluZ10uZmluZCgoe25hbWV9KSA9PiBuYW1lID09IFwiamF2YVwiKVxuICAgICAgICBjb25zdCBsb29wQ2FwdHVyZSA9IGNhcHR1cmVkQmluZGluZyA/IHtcbiAgICAgICAgICBkZXRhaWw6IGAke293bmVyfSBpdGVyYXRpb24gYmluZGluZyAnamF2YScgY2FwdHVyZXMgamF2YS51dGlsIGZhY3Rvcnkgc3ludGF4YCxcbiAgICAgICAgICBsb2NhdGlvbjogY2FwdHVyZWRCaW5kaW5nLmxvY2F0aW9uXG4gICAgICAgIH0gOiBjYXB0dXJlXG5cbiAgICAgICAgdmFsaWRhdGVCbG9ja05hbWVzKHN0YXRlbWVudC5ib2R5LCBsb29wQ2FwdHVyZSwgb3duZXIpXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoc3RhdGVtZW50LmJvZHksIGNhcHR1cmUsIG93bmVyKVxuICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2Ygc3RhdGVtZW50LmhhbmRsZXJzID8/IFtdKSB7XG4gICAgICAgICAgY29uc3QgY2F0Y2hDYXB0dXJlID0gaGFuZGxlci5jYXRjaEJpbmRpbmcubmFtZSA9PSBcImphdmFcIiA/IHtcbiAgICAgICAgICAgIGRldGFpbDogYCR7b3duZXJ9IGNhdGNoIGJpbmRpbmcgJ2phdmEnIGNhcHR1cmVzIGphdmEudXRpbCBmYWN0b3J5IHN5bnRheGAsXG4gICAgICAgICAgICBsb2NhdGlvbjogaGFuZGxlci5jYXRjaEJpbmRpbmcubG9jYXRpb25cbiAgICAgICAgICB9IDogY2FwdHVyZVxuXG4gICAgICAgICAgdmFsaWRhdGVCbG9ja05hbWVzKGhhbmRsZXIuY2F0Y2hCb2R5LCBjYXRjaENhcHR1cmUsIG93bmVyKVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZW1lbnQuZmluYWxseUJvZHkpIHZhbGlkYXRlQmxvY2tOYW1lcyhzdGF0ZW1lbnQuZmluYWxseUJvZHksIGNhcHR1cmUsIG93bmVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlQmxvY2tOYW1lcyhtb2R1bGUuZW50cnlQb2ludC5ib2R5LCB1bmRlZmluZWQsIFwiZW50cnlcIilcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gZGVjbGFyYXRpb24ucGFyYW1ldGVycy5maW5kKCh7bmFtZX0pID0+IG5hbWUgPT0gXCJqYXZhXCIpXG4gICAgY29uc3QgY2FwdHVyZSA9IHBhcmFtZXRlciA/IHtcbiAgICAgIGRldGFpbDogXCJmdW5jdGlvbiBwYXJhbWV0ZXIgJ2phdmEnIGNhcHR1cmVzIGphdmEudXRpbCBmYWN0b3J5IHN5bnRheFwiLFxuICAgICAgbG9jYXRpb246IHBhcmFtZXRlci5sb2NhdGlvblxuICAgIH0gOiB1bmRlZmluZWRcblxuICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhkZWNsYXJhdGlvbi5ib2R5LCBjYXB0dXJlLCBcImZ1bmN0aW9uXCIpXG4gIH1cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuY2xhc3NlcyA/PyBbXSkge1xuICAgIGNvbnN0IGNhbGxhYmxlcyA9IFtcbiAgICAgIHtib2R5OiBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5ib2R5LCBvd25lcjogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiY29uc3RydWN0b3JcIiksIHBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnN9LFxuICAgICAgLi4uZGVjbGFyYXRpb24ubWV0aG9kcy5tYXAoKG1ldGhvZCkgPT4gKHtib2R5OiBtZXRob2QuYm9keSwgb3duZXI6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIm1ldGhvZFwiKSwgcGFyYW1ldGVyczogbWV0aG9kLnBhcmFtZXRlcnN9KSlcbiAgICBdXG5cbiAgICBmb3IgKGNvbnN0IGNhbGxhYmxlIG9mIGNhbGxhYmxlcykge1xuICAgICAgY29uc3QgcGFyYW1ldGVyID0gY2FsbGFibGUucGFyYW1ldGVycy5maW5kKCh7bmFtZX0pID0+IG5hbWUgPT0gXCJqYXZhXCIpXG4gICAgICBjb25zdCBjYXB0dXJlID0gcGFyYW1ldGVyID8ge1xuICAgICAgICBkZXRhaWw6IGAke2NhbGxhYmxlLm93bmVyfSBwYXJhbWV0ZXIgJ2phdmEnIGNhcHR1cmVzIGphdmEudXRpbCBmYWN0b3J5IHN5bnRheGAsXG4gICAgICAgIGxvY2F0aW9uOiBwYXJhbWV0ZXIubG9jYXRpb25cbiAgICAgIH0gOiB1bmRlZmluZWRcblxuICAgICAgdmFsaWRhdGVCbG9ja05hbWVzKGNhbGxhYmxlLmJvZHksIGNhcHR1cmUsIGNhbGxhYmxlLm93bmVyKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBhIG1vZHVsZSBjb250YWlucyBhbiBleHByZXNzaW9uIGtpbmQgdGhhdCByZXF1aXJlcyB0YXJnZXQgcnVudGltZSBzY2FmZm9sZGluZy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFZhbGlkYXRlZC1zaGFwZSBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb25bXCJraW5kXCJdfSBraW5kIC0gU291Z2h0IGV4cHJlc3Npb24ga2luZC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBraW5kIG9jY3Vycy5cbiAqL1xuZnVuY3Rpb24gbW9kdWxlQ29udGFpbnNFeHByZXNzaW9uS2luZChtb2R1bGUsIGtpbmQpIHtcbiAgY29uc3QgY2xhc3NCbG9ja3MgPSAobW9kdWxlLmNsYXNzZXMgPz8gW10pLmZsYXRNYXAoKGRlY2xhcmF0aW9uKSA9PiBbXG4gICAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSwgLi4uZGVjbGFyYXRpb24ubWV0aG9kcy5tYXAoKG1ldGhvZCkgPT4gbWV0aG9kLmJvZHkpXG4gIF0pXG5cbiAgcmV0dXJuIFttb2R1bGUuZW50cnlQb2ludC5ib2R5LCAuLi5tb2R1bGUuZnVuY3Rpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IGRlY2xhcmF0aW9uLmJvZHkpLCAuLi5jbGFzc0Jsb2Nrc10uc29tZSgoYmxvY2spID0+XG4gICAgYWxsU3RhdGVtZW50cyhibG9jaykuc29tZSgoc3RhdGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBleHByZXNzaW9uID0gc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiID8gc3RhdGVtZW50LmNvbmRpdGlvbiA6XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5jb25kaXRpb24gOlxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5saXN0IDpcbiAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5tYXAgOlxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiA/IHN0YXRlbWVudC5pbml0aWFsaXplciA6XG4gICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOlxuICAgICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJSYWlzZVN0YXRlbWVudFwiID8gc3RhdGVtZW50LmVycm9yLm1lc3NhZ2UgOiB1bmRlZmluZWRcblxuICAgICAgcmV0dXJuIGV4cHJlc3Npb24gPyBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24sIGtpbmQpIDogZmFsc2VcbiAgICB9KSlcbn1cblxuLyoqXG4gKiBTZWFyY2hlcyBvbmUgdmFsaWRhdGVkIGV4cHJlc3Npb24gdHJlZSBmb3IgYSBzZW1hbnRpYyBraW5kLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIC0gRXhwcmVzc2lvbiByb290LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9uW1wia2luZFwiXX0ga2luZCAtIFNvdWdodCBraW5kLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGtpbmQgb2NjdXJzLlxuICovXG5mdW5jdGlvbiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24sIGtpbmQpIHtcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBraW5kKSByZXR1cm4gdHJ1ZVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24ub3BlcmFuZCwga2luZClcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24ubGVmdCwga2luZCkgfHwgZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLnJpZ2h0LCBraW5kKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24uY29uZGl0aW9uLCBraW5kKSB8fFxuICAgICAgZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLmNvbnNlcXVlbnQsIGtpbmQpIHx8XG4gICAgICBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24uYWx0ZXJuYXRlLCBraW5kKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSByZXR1cm4gZXhwcmVzc2lvbi5hcmd1bWVudHMuc29tZSgoYXJndW1lbnQpID0+IGV4cHJlc3Npb25Db250YWluc0tpbmQoYXJndW1lbnQsIGtpbmQpKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWV0aG9kQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24ucmVjZWl2ZXIsIGtpbmQpIHx8XG4gICAgICBleHByZXNzaW9uLmFyZ3VtZW50cy5zb21lKChhcmd1bWVudCkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChhcmd1bWVudCwga2luZCkpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlJlY29yZENvbnN0cnVjdGlvblwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIlJlZmVyZW5jZUNvbnN0cnVjdGlvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24uYXJndW1lbnRzLnNvbWUoKGFyZ3VtZW50KSA9PiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGFyZ3VtZW50LCBraW5kKSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWVtYmVyUmVhZFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIlByaXZhdGVGaWVsZFJlYWRcIikge1xuICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24ucmVjZWl2ZXIsIGtpbmQpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkxpc3RMaXRlcmFsXCIpIHJldHVybiBleHByZXNzaW9uLmVsZW1lbnRzLnNvbWUoKGVsZW1lbnQpID0+IGV4cHJlc3Npb25Db250YWluc0tpbmQoZWxlbWVudCwga2luZCkpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNYXBMaXRlcmFsXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIikge1xuICAgIHJldHVybiBleHByZXNzaW9uLmVudHJpZXMuc29tZSgoZW50cnkpID0+IGV4cHJlc3Npb25Db250YWluc0tpbmQoZW50cnkua2V5LCBraW5kKSB8fCBleHByZXNzaW9uQ29udGFpbnNLaW5kKGVudHJ5LnZhbHVlLCBraW5kKSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBraW5kKSB8fCBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24uaW5kZXgsIGtpbmQpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExvb2t1cEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24uY29sbGVjdGlvbiwga2luZCkgfHwgZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLmtleSwga2luZClcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ29sbGVjdGlvblNpemVFeHByZXNzaW9uXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24uY29sbGVjdGlvbiwga2luZClcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsU29tZVwiKSByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLnZhbHVlLCBraW5kKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxJc1ByZXNlbnRcIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbFVud3JhcFwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5vcGVyYW5kLCBraW5kKVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogUmV0dXJucyBhIHBhcnNlci1iYWNrZWQgZnVuY3Rpb24tbmFtZSBsb2NhdGlvbiB3aGVuIG9uZSBzdXJ2aXZlZCBzZW1hbnRpYyBhZGFwdGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFNlbWFudGljIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBFeGFjdCBuYW1lIG9yIGRlY2xhcmF0aW9uIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBkZWNsYXJhdGlvbk5hbWVMb2NhdGlvbihkZWNsYXJhdGlvbikge1xuICByZXR1cm4gZGVjbGFyYXRpb24uc291cmNlUHJvdmVuYW5jZT8ucmFuZ2VzLm5hbWUgPz8gZGVjbGFyYXRpb24ubG9jYXRpb25cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcGFyc2VyLWJhY2tlZCBiaW5kaW5nLW5hbWUgbG9jYXRpb24gd2hlbiBvbmUgc3Vydml2ZWQgc2VtYW50aWMgYWRhcHRhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUGFyYW1ldGVyIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlZhbHVlQmluZGluZyB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhdGNoQmluZGluZ30gYmluZGluZyAtIFNlbWFudGljIGJpbmRpbmcuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEV4YWN0IG5hbWUgb3IgYmluZGluZyBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmluZGluZ05hbWVMb2NhdGlvbihiaW5kaW5nKSB7XG4gIHJldHVybiBiaW5kaW5nLnNvdXJjZVByb3ZlbmFuY2U/LnJhbmdlcy5uYW1lID8/IGJpbmRpbmcubG9jYXRpb25cbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIEphdmEgbWV0aG9kIHNpZ25hdHVyZSB1c2VkIGZvciBpbmhlcml0ZWQtaW5zdGFuY2UgY29sbGlzaW9uIGNoZWNrcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBDYW5kaWRhdGUgSmF2YSB0YXJnZXQgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBFbWl0dGVkIG5hbWUgYW5kIHBhcmFtZXRlciB0eXBlcyB3aGVuIGFsbCB0eXBlcyBhcmUgc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBlbWl0dGVkSmF2YUZ1bmN0aW9uU2lnbmF0dXJlKGRlY2xhcmF0aW9uKSB7XG4gIGNvbnN0IHBhcmFtZXRlclR5cGVzID0gW11cblxuICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgdHlwZSA9IHBhcmFtZXRlci50eXBlXG5cbiAgICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHR5cGUpKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgY29uc3QgZW1pdHRlZCA9IHR5cGUua2luZCA9PSBcIkxpc3RUeXBlXCIgPyBcImphdmEudXRpbC5MaXN0XCIgOiB0eXBlLmtpbmQgPT0gXCJNYXBUeXBlXCIgPyBcImphdmEudXRpbC5NYXBcIiA6XG4gICAgICB0eXBlLmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiID8gXCJqYXZhLnV0aWwuU2VxdWVuY2VkTWFwXCIgOlxuICAgICAgdHlwZS5raW5kID09IFwiVHlwZVJlZmVyZW5jZVwiID8gZW1pdFNjYWxhclR5cGUoXCJqYXZhXCIsIHR5cGUpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoIWVtaXR0ZWQpIHJldHVybiB1bmRlZmluZWRcbiAgICBwYXJhbWV0ZXJUeXBlcy5wdXNoKGVtaXR0ZWQpXG4gIH1cblxuICByZXR1cm4gYCR7ZGVjbGFyYXRpb24ubmFtZX0oJHtwYXJhbWV0ZXJUeXBlcy5qb2luKFwiLFwiKX0pYFxufVxuXG4vKipcbiAqIFJldHVybnMgZXZlcnkgc3RhdGVtZW50IG5lc3RlZCBiZW5lYXRoIGEgYmxvY2sgaW4gc2VtYW50aWMgb3JkZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudFtdfSBTdGF0ZW1lbnRzIGluY2x1ZGluZyBuZXN0ZWQgYnJhbmNoZXMuXG4gKi9cbmZ1bmN0aW9uIGFsbFN0YXRlbWVudHMoYmxvY2spIHtcbiAgcmV0dXJuIGJsb2NrLnN0YXRlbWVudHMuZmxhdE1hcCgoc3RhdGVtZW50KSA9PiB7XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIFtzdGF0ZW1lbnQsIC4uLmFsbFN0YXRlbWVudHMoc3RhdGVtZW50LmNvbnNlcXVlbnQpLCAuLi4oc3RhdGVtZW50LmFsdGVybmF0ZSA/IGFsbFN0YXRlbWVudHMoc3RhdGVtZW50LmFsdGVybmF0ZSkgOiBbXSldXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIFtzdGF0ZW1lbnQsIC4uLmFsbFN0YXRlbWVudHMoc3RhdGVtZW50LmJvZHkpXVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSByZXR1cm4gW3N0YXRlbWVudCwgLi4uYWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQuYm9keSldXG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgIHJldHVybiBbc3RhdGVtZW50LCAuLi5hbGxTdGF0ZW1lbnRzKHN0YXRlbWVudC5ib2R5KSxcbiAgICAgICAgLi4uKHN0YXRlbWVudC5oYW5kbGVycyA/PyBbXSkuZmxhdE1hcCgoaGFuZGxlcikgPT4gYWxsU3RhdGVtZW50cyhoYW5kbGVyLmNhdGNoQm9keSkpLFxuICAgICAgICAuLi4oc3RhdGVtZW50LmZpbmFsbHlCb2R5ID8gYWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQuZmluYWxseUJvZHkpIDogW10pXVxuICAgIH1cblxuICAgIHJldHVybiBbc3RhdGVtZW50XVxuICB9KVxufVxuXG4vKipcbiAqIEluZGV4ZXMgZXhhY3QgbG9vcCBpZGVudGl0aWVzIGJlZm9yZSByZWN1cnNpdmUgdGFyZ2V0IHZhbGlkYXRpb24gc28gY3Jvc3MtZnVuY3Rpb24gdGFyZ2V0cyBmYWlsIGRldGVybWluaXN0aWNhbGx5LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQ2FuZGlkYXRlIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEByZXR1cm5zIHtNYXA8c3RyaW5nLCBvYmplY3Q+fSBMb29wIG93bmVyIGJ5IG1vZHVsZS1sb2NhbCBpZGVudGl0eS5cbiAqL1xuZnVuY3Rpb24gY29sbGVjdExvb3BPd25lcnMobW9kdWxlLCBsYW5ndWFnZSkge1xuICBjb25zdCBvd25lcnMgPSBuZXcgTWFwKClcbiAgY29uc3QgY2xhc3NPd25lcnMgPSAobW9kdWxlLmNsYXNzZXMgPz8gW10pLmZsYXRNYXAoKGRlY2xhcmF0aW9uKSA9PiBbZGVjbGFyYXRpb24uY29uc3RydWN0b3IsIC4uLmRlY2xhcmF0aW9uLm1ldGhvZHNdKVxuXG4gIGZvciAoY29uc3Qgb3duZXIgb2YgWy4uLmNsYXNzT3duZXJzLCAuLi5tb2R1bGUuZnVuY3Rpb25zLCBtb2R1bGUuZW50cnlQb2ludF0pIHtcbiAgICBpZiAob3duZXIgJiYgdHlwZW9mIG93bmVyID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkob3duZXIpKSB2aXNpdChSZWZsZWN0LmdldChvd25lciwgXCJib2R5XCIpLCBvd25lcilcbiAgfVxuXG4gIHJldHVybiBvd25lcnNcblxuICAvKipcbiAgICogVmlzaXRzIGxvb3AgY29udGFpbmVycyB3aGlsZSBib3VuZGluZyBtYWxmb3JtZWQgY3ljbGVzLlxuICAgKiBAcGFyYW0ge3Vua25vd259IGJsb2NrIC0gQ2FuZGlkYXRlIGJsb2NrLlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3duZXIgLSBFbmNsb3NpbmcgZnVuY3Rpb24gb3IgZW50cnkgcG9pbnQuXG4gICAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFthY3RpdmVdIC0gQmxvY2tzIG9uIHRoZSBhY3RpdmUgcmVjdXJzaXZlIHBhdGguXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gdmlzaXQoYmxvY2ssIG93bmVyLCBhY3RpdmUgPSBuZXcgU2V0KCkpIHtcbiAgICBpZiAoIWJsb2NrIHx8IHR5cGVvZiBibG9jayAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmxvY2spIHx8IGFjdGl2ZS5oYXMoYmxvY2spKSByZXR1cm5cbiAgICBjb25zdCBzdGF0ZW1lbnRzID0gUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHN0YXRlbWVudHMpKSByZXR1cm5cbiAgICBjb25zdCBwYXRoID0gbmV3IFNldChhY3RpdmUpXG5cbiAgICBwYXRoLmFkZChibG9jaylcbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSBjb250aW51ZVxuICAgICAgY29uc3Qga2luZCA9IFN0cmluZyhSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwia2luZFwiKSlcblxuICAgICAgaWYgKFtcIkZvckVhY2hTdGF0ZW1lbnRcIiwgXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIsIFwiV2hpbGVTdGF0ZW1lbnRcIl0uaW5jbHVkZXMoa2luZCkpIHtcbiAgICAgICAgY29uc3QgaWQgPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiaWRcIilcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImxvY2F0aW9uXCIpLCBSZWZsZWN0LmdldChibG9jaywgXCJsb2NhdGlvblwiKSlcblxuICAgICAgICBpZiAodHlwZW9mIGlkICE9IFwic3RyaW5nXCIgfHwgIS9ebG9vcDpbMC05XSskL3UudGVzdChpZCkpIGNvbnRpbnVlXG4gICAgICAgIGlmIChvd25lcnMuaGFzKGlkKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImR1cGxpY2F0ZSBvciBpbnZhbGlkIGxvb3AgaWRlbnRpdHlcIiwgbG9jYXRpb24pXG4gICAgICAgIG93bmVycy5zZXQoaWQsIG93bmVyKVxuICAgICAgICB2aXNpdChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYm9keVwiKSwgb3duZXIsIHBhdGgpXG4gICAgICB9IGVsc2UgaWYgKGtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZpc2l0KFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJjb25zZXF1ZW50XCIpLCBvd25lciwgcGF0aClcbiAgICAgICAgdmlzaXQoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImFsdGVybmF0ZVwiKSwgb3duZXIsIHBhdGgpXG4gICAgICB9IGVsc2UgaWYgKGtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgICB2aXNpdChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYm9keVwiKSwgb3duZXIsIHBhdGgpXG4gICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiaGFuZGxlcnNcIikgPz8gW10pIHZpc2l0KFJlZmxlY3QuZ2V0KGhhbmRsZXIsIFwiY2F0Y2hCb2R5XCIpLCBvd25lciwgcGF0aClcbiAgICAgICAgdmlzaXQoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImZpbmFsbHlCb2R5XCIpLCBvd25lciwgcGF0aClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgb25lIGNvbXBsZXRlIHNlbWFudGljIGJsb2NrIGJlZm9yZSBlbWlzc2lvbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gYmxvY2sgLSBDYW5kaWRhdGUgYmxvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGxhbmd1YWdlIG9yIGJpbmFyeSB0YXJnZXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBvd25lckxvY2F0aW9uIC0gRW5jbG9zaW5nIGxvY2F0aW9uLlxuICogQHBhcmFtIHt7YWN0aXZlOiAoaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaFN0YXRlbWVudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZvckVhY2hNYXBTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5XaGlsZVN0YXRlbWVudClbXSwgb3duZXI6IG9iamVjdCwgb3duZXJzOiBNYXA8c3RyaW5nLCBvYmplY3Q+fX0gbG9vcENvbnRleHQgLSBBY3RpdmUgbG9vcHMgYW5kIHRoZWlyIGxleGljYWwgb3duZXIuXG4gKiBAcGFyYW0ge1NldDxvYmplY3Q+fSBbYWN0aXZlUGF0aF0gLSBCbG9ja3Mgb24gdGhlIGFjdGl2ZSByZWN1cnNpdmUgcGF0aC5cbiAqIEBwYXJhbSB7U2V0PHN0cmluZz59IFtleHRlcm5hbERlY2xhcmF0aW9uSWRzXSAtIFJlc29sdmVkIGRlY2xhcmF0aW9ucyB3aG9zZSBzb3VyY2Ugc3BlbGxpbmcgaXMgdGFyZ2V0LWluZGVwZW5kZW50LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQmxvY2soYmxvY2ssIGxhbmd1YWdlLCBvd25lckxvY2F0aW9uLCBsb29wQ29udGV4dCwgYWN0aXZlUGF0aCA9IG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcyA9IG5ldyBTZXQoKSkge1xuICBpZiAoIWJsb2NrIHx8IHR5cGVvZiBibG9jayAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmxvY2spKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgYmxvY2tcIiwgb3duZXJMb2NhdGlvbilcbiAgfVxuXG4gIGNvbnN0IGNhbmRpZGF0ZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9ICovIChibG9jaylcbiAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oY2FuZGlkYXRlLmxvY2F0aW9uLCBvd25lckxvY2F0aW9uKVxuXG4gIGlmIChhY3RpdmVQYXRoLmhhcyhjYW5kaWRhdGUpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiY3ljbGljIGJsb2NrXCIsIGxvY2F0aW9uKVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgIT0gXCJCbG9ja1wiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBibG9jayAke1N0cmluZyhSZWZsZWN0LmdldChibG9jaywgXCJraW5kXCIpKX1gLCBsb2NhdGlvbilcbiAgaWYgKCFBcnJheS5pc0FycmF5KGNhbmRpZGF0ZS5zdGF0ZW1lbnRzKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBibG9jayBzdGF0ZW1lbnRzXCIsIGxvY2F0aW9uKVxuICBjb25zdCBibG9ja1BhdGggPSBuZXcgU2V0KGFjdGl2ZVBhdGgpXG5cbiAgYmxvY2tQYXRoLmFkZChjYW5kaWRhdGUpXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIGNhbmRpZGF0ZS5zdGF0ZW1lbnRzKSB7XG4gICAgdmFsaWRhdGVTdGF0ZW1lbnQoc3RhdGVtZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGxvb3BDb250ZXh0LCBibG9ja1BhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgb25lIHN1cHBvcnRlZCBzdGF0ZW1lbnQgcmVjdXJzaXZlbHkuXG4gKiBAcGFyYW0ge3Vua25vd259IHN0YXRlbWVudCAtIENhbmRpZGF0ZSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGxhbmd1YWdlIG9yIGJpbmFyeSB0YXJnZXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBvd25lckxvY2F0aW9uIC0gRW5jbG9zaW5nIGJvZHkgbG9jYXRpb24uXG4gKiBAcGFyYW0ge3thY3RpdmU6IChpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaE1hcFN0YXRlbWVudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLldoaWxlU3RhdGVtZW50KVtdLCBvd25lcjogb2JqZWN0LCBvd25lcnM6IE1hcDxzdHJpbmcsIG9iamVjdD59fSBsb29wQ29udGV4dCAtIEFjdGl2ZSBsb29wcyBhbmQgdGhlaXIgbGV4aWNhbCBvd25lci5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFthY3RpdmVQYXRoXSAtIEFjdGl2ZSBibG9jayBjb250YWluZXJzLlxuICogQHBhcmFtIHtTZXQ8c3RyaW5nPn0gW2V4dGVybmFsRGVjbGFyYXRpb25JZHNdIC0gUmVzb2x2ZWQgZGVjbGFyYXRpb25zIHdob3NlIHNvdXJjZSBzcGVsbGluZyBpcyB0YXJnZXQtaW5kZXBlbmRlbnQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnQoc3RhdGVtZW50LCBsYW5ndWFnZSwgb3duZXJMb2NhdGlvbiwgbG9vcENvbnRleHQsIGFjdGl2ZVBhdGggPSBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMgPSBuZXcgU2V0KCkpIHtcbiAgaWYgKCFzdGF0ZW1lbnQgfHwgdHlwZW9mIHN0YXRlbWVudCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoc3RhdGVtZW50KSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHN0YXRlbWVudFwiLCBvd25lckxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3Qga2luZCA9IFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJraW5kXCIpXG4gIGNvbnN0IG93bkxvY2F0aW9uID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImxvY2F0aW9uXCIpXG4gIGNvbnN0IGxvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKG93bkxvY2F0aW9uLCBvd25lckxvY2F0aW9uKVxuXG4gIGlmICh0eXBlb2Yga2luZCAhPSBcInN0cmluZ1wiKSByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBzdGF0ZW1lbnRcIiwgbG9jYXRpb24pXG4gIGlmIChraW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkxvY2FsRGVjbGFyYXRpb259ICovIChzdGF0ZW1lbnQpXG5cbiAgICBpZiAodHlwZW9mIGRlY2xhcmF0aW9uLm11dGFibGUgIT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJsb2NhbCBkZWNsYXJhdGlvbiB3aXRoIGludmFsaWQgbXV0YWJpbGl0eVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgZGVjbGFyYXRpb24ubmFtZSwgXCJsb2NhbFwiLCBsb2NhdGlvbilcbiAgICBpZiAoZGVjbGFyYXRpb24udHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIgJiYgZGVjbGFyYXRpb24uaW5pdGlhbGl6ZXI/LmtpbmQgIT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwib3JkZXJlZC1tYXAgbG9jYWwgcmVxdWlyZXMgYSBkaXJlY3QgbGl0ZXJhbCBpbml0aWFsaXplclwiLFxuICAgICAgICBkaWFnbm9zdGljTG9jYXRpb24oZGVjbGFyYXRpb24uaW5pdGlhbGl6ZXI/LmxvY2F0aW9uLCBsb2NhdGlvbikpXG4gICAgfVxuICAgIGlmIChkZWNsYXJhdGlvbi5pbml0aWFsaXplcj8ua2luZCA9PSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIgJiYgZGVjbGFyYXRpb24ubXV0YWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJvcmRlcmVkLW1hcCBsb2NhbCBtdXN0IGJlIGltbXV0YWJsZVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGRlY2xhcmF0aW9uLmluaXRpYWxpemVyLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMsXG4gICAgICBsYW5ndWFnZSA9PSBcImphdmFcIiAmJiBkZWNsYXJhdGlvbi5pbml0aWFsaXplcj8ua2luZCA9PSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCBhc3NpZ25tZW50ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Bc3NpZ25tZW50U3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuXG4gICAgdmFsaWRhdGVBc3NpZ25tZW50VGFyZ2V0KGFzc2lnbm1lbnQudGFyZ2V0LCBsYW5ndWFnZSwgbG9jYXRpb24pXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGFzc2lnbm1lbnQuZXhwcmVzc2lvbiwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGFzc2lnbm1lbnQpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImV4cHJlc3Npb24sZmllbGQsa2luZCxsb2NhdGlvbixyZWNlaXZlclwiIHx8IHR5cGVvZiBhc3NpZ25tZW50LmZpZWxkICE9IFwic3RyaW5nXCIgfHxcbiAgICAgIGFzc2lnbm1lbnQucmVjZWl2ZXI/LmtpbmQgIT0gXCJSZWNlaXZlckV4cHJlc3Npb25cIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBwcml2YXRlIGZpZWxkIHJlY2VpdmVyIG9yIHByaXZhdGUgZmllbGQgaWRlbnRpdHlcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihhc3NpZ25tZW50LnJlY2VpdmVyLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGFzc2lnbm1lbnQuZXhwcmVzc2lvbiwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImV4cHJlc3Npb25cIilcblxuICAgIGlmIChleHByZXNzaW9uICE9PSB1bmRlZmluZWQpIHZhbGlkYXRlRXhwcmVzc2lvbihleHByZXNzaW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgaWYgKGxhbmd1YWdlID09IFwicnVieVwiICYmIGxvb3BDb250ZXh0LmFjdGl2ZS5zb21lKCh7a2luZH0pID0+IGtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIgfHwga2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIikpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJyZXR1cm4gZnJvbSBhbiBpdGVyYXRpb24gYm9keVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIpIHtcbiAgICBpZiAoIXRhc2swMDVMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA1IHZvaWQgY2FsbCBleHByZXNzaW9uIHN0YXRlbWVudFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJleHByZXNzaW9uXCIpXG5cbiAgICBpZiAoIWV4cHJlc3Npb24gfHwgdHlwZW9mIGV4cHJlc3Npb24gIT0gXCJvYmplY3RcIiB8fFxuICAgICAgIVtcIkNhbGxFeHByZXNzaW9uXCIsIFwiRWZmZWN0Q2FsbEV4cHJlc3Npb25cIiwgXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiXS5pbmNsdWRlcyhTdHJpbmcoUmVmbGVjdC5nZXQoZXhwcmVzc2lvbiwgXCJraW5kXCIpKSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJleHByZXNzaW9uIHN0YXRlbWVudCBvdGhlciB0aGFuIGEgZGlyZWN0IG9yIHJlY2VpdmVyIGNhbGxcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihleHByZXNzaW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiKSB7XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJleHByZXNzaW9uXCIpLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgYnJhbmNoID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gKi8gKHN0YXRlbWVudClcblxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihicmFuY2guY29uZGl0aW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgdmFsaWRhdGVCbG9jayhicmFuY2guY29uc2VxdWVudCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBsb29wQ29udGV4dCwgYWN0aXZlUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICBpZiAoT2JqZWN0Lmhhc093bihicmFuY2gsIFwiYWx0ZXJuYXRlXCIpKSB7XG4gICAgICB2YWxpZGF0ZUJsb2NrKGJyYW5jaC5hbHRlcm5hdGUsIGxhbmd1YWdlLCBsb2NhdGlvbiwgbG9vcENvbnRleHQsIGFjdGl2ZVBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiQnJlYWtTdGF0ZW1lbnRcIiB8fCBraW5kID09IFwiQ29udGludWVTdGF0ZW1lbnRcIikge1xuICAgIGlmICghdGFzazAwOExhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDggb3JkZXJlZCBsaXN0IGl0ZXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihvd25Mb2NhdGlvbiwgbGFuZ3VhZ2UsIGAke2tpbmR9IGxvY2F0aW9uYCwgb3duZXJMb2NhdGlvbilcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cygvKiogQHR5cGUge29iamVjdH0gKi8gKHN0YXRlbWVudCkpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImtpbmQsbG9jYXRpb24sdGFyZ2V0TG9vcElkXCIpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1hbGZvcm1lZCAke2tpbmR9YCwgbG9jYXRpb24pXG4gICAgY29uc3QgdGFyZ2V0TG9vcElkID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcInRhcmdldExvb3BJZFwiKVxuICAgIGNvbnN0IG5lYXJlc3QgPSBsb29wQ29udGV4dC5hY3RpdmUuYXQoLTEpXG5cbiAgICBpZiAoIW5lYXJlc3QpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7a2luZCA9PSBcIkJyZWFrU3RhdGVtZW50XCIgPyBcImJyZWFrXCIgOiBcImNvbnRpbnVlXCJ9IG91dHNpZGUgYSBsb29wYCwgbG9jYXRpb24pXG4gICAgaWYgKHR5cGVvZiB0YXJnZXRMb29wSWQgIT0gXCJzdHJpbmdcIiB8fCAhbG9vcENvbnRleHQub3duZXJzLmhhcyh0YXJnZXRMb29wSWQpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiaW52YWxpZCBsb29wIGNvbnRyb2wgdGFyZ2V0IGlkZW50aXR5XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAobG9vcENvbnRleHQub3duZXJzLmdldCh0YXJnZXRMb29wSWQpICE9PSBsb29wQ29udGV4dC5vd25lcikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImxvb3AgY29udHJvbCB0YXJnZXQgY3Jvc3NlcyBhIGZ1bmN0aW9uIGJvdW5kYXJ5XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAodGFyZ2V0TG9vcElkICE9IG5lYXJlc3QuaWQpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJsb29wIGNvbnRyb2wgbXVzdCB0YXJnZXQgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGxvb3BcIiwgbG9jYXRpb24pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSB7XG4gICAgaWYgKCF0YXNrMDMyTGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAzMiBjb25kaXRpb24tY29udHJvbGxlZCBsb29wXCIsIGxvY2F0aW9uKVxuICAgIGNvbnN0IGxvb3BMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG93bkxvY2F0aW9uLCBsYW5ndWFnZSwgXCJXaGlsZVN0YXRlbWVudCBsb2NhdGlvblwiLCBvd25lckxvY2F0aW9uKVxuICAgIGNvbnN0IGxvb3AgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLldoaWxlU3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGxvb3ApLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImJvZHksY29uZGl0aW9uLGlkLGtpbmQsbG9jYXRpb25cIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBXaGlsZVN0YXRlbWVudFwiLCBsb29wTG9jYXRpb24pXG4gICAgaWYgKHR5cGVvZiBsb29wLmlkICE9IFwic3RyaW5nXCIgfHwgIS9ebG9vcDpbMC05XSskL3UudGVzdChsb29wLmlkKSB8fCBsb29wQ29udGV4dC5vd25lcnMuZ2V0KGxvb3AuaWQpICE9PSBsb29wQ29udGV4dC5vd25lcikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImR1cGxpY2F0ZSBvciBpbnZhbGlkIGxvb3AgaWRlbnRpdHlcIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIWxvb3AuY29uZGl0aW9uIHx8IHR5cGVvZiBsb29wLmNvbmRpdGlvbiAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobG9vcC5jb25kaXRpb24pKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGNvbmRpdGlvbi1jb250cm9sbGVkIGxvb3AgY29uZGl0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24oUmVmbGVjdC5nZXQobG9vcC5jb25kaXRpb24sIFwibG9jYXRpb25cIiksIGxhbmd1YWdlLCBcImNvbmRpdGlvbi1jb250cm9sbGVkIGxvb3AgY29uZGl0aW9uIGxvY2F0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24obG9vcC5jb25kaXRpb24sIGxhbmd1YWdlLCBsb29wTG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgaWYgKCFsb29wLmJvZHkgfHwgdHlwZW9mIGxvb3AuYm9keSAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobG9vcC5ib2R5KSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBjb25kaXRpb24tY29udHJvbGxlZCBsb29wIGJvZHlcIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihSZWZsZWN0LmdldChsb29wLmJvZHksIFwibG9jYXRpb25cIiksIGxhbmd1YWdlLCBcImNvbmRpdGlvbi1jb250cm9sbGVkIGxvb3AgYm9keSBsb2NhdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgdmFsaWRhdGVCbG9jayhsb29wLmJvZHksIGxhbmd1YWdlLCBsb29wTG9jYXRpb24sXG4gICAgICB7YWN0aXZlOiBbLi4ubG9vcENvbnRleHQuYWN0aXZlLCBsb29wXSwgb3duZXI6IGxvb3BDb250ZXh0Lm93bmVyLCBvd25lcnM6IGxvb3BDb250ZXh0Lm93bmVyc30sIGFjdGl2ZVBhdGgsXG4gICAgICBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiKSB7XG4gICAgaWYgKCF0YXNrMDA4TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwOCBvcmRlcmVkIGxpc3QgaXRlcmF0aW9uXCIsIGxvY2F0aW9uKVxuICAgIGNvbnN0IGxvb3BMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG93bkxvY2F0aW9uLCBsYW5ndWFnZSwgXCJGb3JFYWNoU3RhdGVtZW50IGxvY2F0aW9uXCIsIG93bmVyTG9jYXRpb24pXG4gICAgY29uc3QgbG9vcCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaFN0YXRlbWVudH0gKi8gKHN0YXRlbWVudClcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhsb29wKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJib2R5LGlkLGtpbmQsbGlzdCxsb2NhdGlvbix2YWx1ZUJpbmRpbmdcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBGb3JFYWNoU3RhdGVtZW50XCIsIGxvb3BMb2NhdGlvbilcbiAgICBpZiAodHlwZW9mIGxvb3AuaWQgIT0gXCJzdHJpbmdcIiB8fCAhL15sb29wOlswLTldKyQvdS50ZXN0KGxvb3AuaWQpIHx8IGxvb3BDb250ZXh0Lm93bmVycy5nZXQobG9vcC5pZCkgIT09IGxvb3BDb250ZXh0Lm93bmVyKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZHVwbGljYXRlIG9yIGludmFsaWQgbG9vcCBpZGVudGl0eVwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghbG9vcC5saXN0IHx8IHR5cGVvZiBsb29wLmxpc3QgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGxvb3AubGlzdCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgaXRlcmF0aW9uIGNvbGxlY3Rpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihSZWZsZWN0LmdldChsb29wLmxpc3QsIFwibG9jYXRpb25cIiksIGxhbmd1YWdlLCBcIml0ZXJhdGlvbiBjb2xsZWN0aW9uIGxvY2F0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24obG9vcC5saXN0LCBsYW5ndWFnZSwgbG9vcExvY2F0aW9uLCBmYWxzZSwgbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIGlmICghbG9vcC52YWx1ZUJpbmRpbmcgfHwgdHlwZW9mIGxvb3AudmFsdWVCaW5kaW5nICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShsb29wLnZhbHVlQmluZGluZykpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgaXRlcmF0aW9uIGJpbmRpbmdcIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBiaW5kaW5nID0gbG9vcC52YWx1ZUJpbmRpbmdcbiAgICBjb25zdCBiaW5kaW5nTG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihSZWZsZWN0LmdldChiaW5kaW5nLCBcImxvY2F0aW9uXCIpLCBsYW5ndWFnZSwgXCJpdGVyYXRpb24gYmluZGluZyBsb2NhdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgY29uc3QgYmluZGluZ0ZpZWxkcyA9IE9iamVjdC5rZXlzKGJpbmRpbmcpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGJpbmRpbmcua2luZCAhPSBcIlZhbHVlQmluZGluZ1wiIHx8IGJpbmRpbmdGaWVsZHMgIT0gXCJraW5kLGxvY2F0aW9uLG11dGFibGUsbmFtZSx0eXBlXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgaXRlcmF0aW9uIGJpbmRpbmdcIiwgYmluZGluZ0xvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoYmluZGluZy5tdXRhYmxlICE9PSBmYWxzZSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm11dGFibGUgaXRlcmF0aW9uIGJpbmRpbmdcIiwgYmluZGluZ0xvY2F0aW9uKVxuICAgIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIGJpbmRpbmcubmFtZSwgXCJpdGVyYXRpb24gYmluZGluZ1wiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgaWYgKCFsb29wLmJvZHkgfHwgdHlwZW9mIGxvb3AuYm9keSAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobG9vcC5ib2R5KSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBpdGVyYXRpb24gYm9keVwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KGxvb3AuYm9keSwgXCJsb2NhdGlvblwiKSwgbGFuZ3VhZ2UsIFwiaXRlcmF0aW9uIGJvZHkgbG9jYXRpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIHZhbGlkYXRlQmxvY2sobG9vcC5ib2R5LCBsYW5ndWFnZSwgbG9vcExvY2F0aW9uLFxuICAgICAge2FjdGl2ZTogWy4uLmxvb3BDb250ZXh0LmFjdGl2ZSwgbG9vcF0sIG93bmVyOiBsb29wQ29udGV4dC5vd25lciwgb3duZXJzOiBsb29wQ29udGV4dC5vd25lcnN9LCBhY3RpdmVQYXRoLFxuICAgICAgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIikge1xuICAgIGlmICghdGFzazAxNExhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMTQgb3JkZXJlZC1tYXAgaXRlcmF0aW9uXCIsIGxvY2F0aW9uKVxuICAgIGNvbnN0IGxvb3BMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG93bkxvY2F0aW9uLCBsYW5ndWFnZSwgXCJGb3JFYWNoTWFwU3RhdGVtZW50IGxvY2F0aW9uXCIsIG93bmVyTG9jYXRpb24pXG4gICAgY29uc3QgbG9vcCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaE1hcFN0YXRlbWVudH0gKi8gKHN0YXRlbWVudClcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhsb29wKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJib2R5LGlkLGtleUJpbmRpbmcsa2luZCxsb2NhdGlvbixtYXAsdmFsdWVCaW5kaW5nXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgRm9yRWFjaE1hcFN0YXRlbWVudFwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIGlmICh0eXBlb2YgbG9vcC5pZCAhPSBcInN0cmluZ1wiIHx8ICEvXmxvb3A6WzAtOV0rJC91LnRlc3QobG9vcC5pZCkgfHwgbG9vcENvbnRleHQub3duZXJzLmdldChsb29wLmlkKSAhPT0gbG9vcENvbnRleHQub3duZXIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJkdXBsaWNhdGUgb3IgaW52YWxpZCBsb29wIGlkZW50aXR5XCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKCFsb29wLm1hcCB8fCB0eXBlb2YgbG9vcC5tYXAgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGxvb3AubWFwKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBvcmRlcmVkLW1hcCBpdGVyYXRpb24gY29sbGVjdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KGxvb3AubWFwLCBcImxvY2F0aW9uXCIpLCBsYW5ndWFnZSwgXCJvcmRlcmVkLW1hcCBpdGVyYXRpb24gY29sbGVjdGlvbiBsb2NhdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGxvb3AubWFwLCBsYW5ndWFnZSwgbG9vcExvY2F0aW9uLCBmYWxzZSwgbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIGZvciAoY29uc3QgW3JvbGUsIGJpbmRpbmddIG9mIFtbXCJrZXlcIiwgbG9vcC5rZXlCaW5kaW5nXSwgW1widmFsdWVcIiwgbG9vcC52YWx1ZUJpbmRpbmddXSkge1xuICAgICAgaWYgKCFiaW5kaW5nIHx8IHR5cGVvZiBiaW5kaW5nICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShiaW5kaW5nKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBtaXNzaW5nIG9yIGludmFsaWQgbWFwIGl0ZXJhdGlvbiAke3JvbGV9IGJpbmRpbmdgLCBsb29wTG9jYXRpb24pXG4gICAgICB9XG4gICAgICBjb25zdCBiaW5kaW5nTG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihiaW5kaW5nLmxvY2F0aW9uLCBsYW5ndWFnZSwgYG1hcCBpdGVyYXRpb24gJHtyb2xlfSBiaW5kaW5nIGxvY2F0aW9uYCwgbG9vcExvY2F0aW9uKVxuICAgICAgY29uc3QgYmluZGluZ0ZpZWxkcyA9IE9iamVjdC5rZXlzKGJpbmRpbmcpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgICBpZiAoYmluZGluZy5raW5kICE9IFwiVmFsdWVCaW5kaW5nXCIgfHwgYmluZGluZ0ZpZWxkcyAhPSBcImtpbmQsbG9jYXRpb24sbXV0YWJsZSxuYW1lLHR5cGVcIikge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBtYWxmb3JtZWQgbWFwIGl0ZXJhdGlvbiAke3JvbGV9IGJpbmRpbmdgLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgICB9XG4gICAgICBpZiAoYmluZGluZy5tdXRhYmxlICE9PSBmYWxzZSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIk1hcCBpdGVyYXRpb24gYmluZGluZ3MgbXVzdCBiZSBpbW11dGFibGVcIiwgYmluZGluZ0xvY2F0aW9uKVxuICAgICAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgYmluZGluZy5uYW1lLCBgbWFwIGl0ZXJhdGlvbiAke3JvbGV9IGJpbmRpbmdgLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghbG9vcC5ib2R5IHx8IHR5cGVvZiBsb29wLmJvZHkgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGxvb3AuYm9keSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgbWFwIGl0ZXJhdGlvbiBib2R5XCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24oUmVmbGVjdC5nZXQobG9vcC5ib2R5LCBcImxvY2F0aW9uXCIpLCBsYW5ndWFnZSwgXCJtYXAgaXRlcmF0aW9uIGJvZHkgbG9jYXRpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIHZhbGlkYXRlQmxvY2sobG9vcC5ib2R5LCBsYW5ndWFnZSwgbG9vcExvY2F0aW9uLFxuICAgICAge2FjdGl2ZTogWy4uLmxvb3BDb250ZXh0LmFjdGl2ZSwgbG9vcF0sIG93bmVyOiBsb29wQ29udGV4dC5vd25lciwgb3duZXJzOiBsb29wQ29udGV4dC5vd25lcnN9LCBhY3RpdmVQYXRoLFxuICAgICAgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIlJhaXNlU3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cygvKiogQHR5cGUge29iamVjdH0gKi8gKHN0YXRlbWVudCkpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuICAgIGNvbnN0IHJhaXNlZCA9IFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJlcnJvclwiKVxuICAgIGNvbnN0IHJhaXNlTG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihvd25Mb2NhdGlvbiwgbGFuZ3VhZ2UsIFwiUmFpc2VTdGF0ZW1lbnQgbG9jYXRpb25cIiwgb3duZXJMb2NhdGlvbilcbiAgICBjb25zdCBjb25zdHJ1Y3Rpb25GaWVsZHMgPSByYWlzZWQgJiYgdHlwZW9mIHJhaXNlZCA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHJhaXNlZClcbiAgICAgID8gT2JqZWN0LmtleXMocmFpc2VkKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIikgOiBcIlwiXG5cbiAgICBpZiAoZmllbGRzICE9IFwiZXJyb3Isa2luZCxsb2NhdGlvblwiIHx8ICFyYWlzZWQgfHwgdHlwZW9mIHJhaXNlZCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocmFpc2VkKSB8fFxuICAgICAgcmFpc2VkLmtpbmQgIT0gXCJFcnJvckNvbnN0cnVjdGlvblwiIHx8IGNvbnN0cnVjdGlvbkZpZWxkcyAhPSBcImVycm9yLGtpbmQsbG9jYXRpb24sbWVzc2FnZVwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIFJhaXNlU3RhdGVtZW50XCIsIHJhaXNlTG9jYXRpb24pXG4gICAgfVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKHJhaXNlZC5sb2NhdGlvbiwgbGFuZ3VhZ2UsIFwiZXJyb3IgY29uc3RydWN0aW9uIGxvY2F0aW9uXCIsIHJhaXNlTG9jYXRpb24pXG4gICAgdmFsaWRhdGVFcnJvclR5cGVTaGFwZShyYWlzZWQuZXJyb3IsIGxhbmd1YWdlLCByYWlzZWQubG9jYXRpb24pXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKHJhaXNlZC5tZXNzYWdlLCBsYW5ndWFnZSwgcmFpc2VkLmxvY2F0aW9uLCBmYWxzZSwgbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiUmV0aHJvd1N0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgcmV0aHJvdyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmV0aHJvd1N0YXRlbWVudH0gKi8gKHN0YXRlbWVudClcbiAgICBjb25zdCByZXRocm93TG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihvd25Mb2NhdGlvbiwgbGFuZ3VhZ2UsIFwiUmV0aHJvd1N0YXRlbWVudCBsb2NhdGlvblwiLCBvd25lckxvY2F0aW9uKVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKHJldGhyb3cpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSAhPSBcImJpbmRpbmcsYmluZGluZ05vZGUsa2luZCxsb2NhdGlvblwiIHx8XG4gICAgICB0eXBlb2YgcmV0aHJvdy5iaW5kaW5nICE9IFwic3RyaW5nXCIgfHwgcmV0aHJvdy5iaW5kaW5nLmxlbmd0aCA9PSAwIHx8XG4gICAgICAhcmV0aHJvdy5iaW5kaW5nTm9kZSB8fCByZXRocm93LmJpbmRpbmdOb2RlLmtpbmQgIT0gXCJDYXRjaEJpbmRpbmdcIiB8fCByZXRocm93LmJpbmRpbmdOb2RlLm5hbWUgIT0gcmV0aHJvdy5iaW5kaW5nKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIFJldGhyb3dTdGF0ZW1lbnRcIiwgcmV0aHJvd0xvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCByZXRocm93LmJpbmRpbmcsIFwiY2F0Y2ggYmluZGluZ1wiLCByZXRocm93TG9jYXRpb24pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IHRyeVN0YXRlbWVudCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHJ5U3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuICAgIGNvbnN0IHRyeUxvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24ob3duTG9jYXRpb24sIGxhbmd1YWdlLCBcIlRyeVN0YXRlbWVudCBsb2NhdGlvblwiLCBvd25lckxvY2F0aW9uKVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKHRyeVN0YXRlbWVudCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiYm9keSxoYW5kbGVycyxraW5kLGxvY2F0aW9uXCIgJiYgZmllbGRzICE9IFwiYm9keSxmaW5hbGx5Qm9keSxoYW5kbGVycyxraW5kLGxvY2F0aW9uXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgVHJ5U3RhdGVtZW50XCIsIHRyeUxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodHJ5U3RhdGVtZW50LmhhbmRsZXJzKSB8fCAodHJ5U3RhdGVtZW50LmhhbmRsZXJzLmxlbmd0aCA9PSAwICYmICF0cnlTdGF0ZW1lbnQuZmluYWxseUJvZHkpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVHJ5U3RhdGVtZW50IHdpdGhvdXQgYW4gb3JkZXJlZCBoYW5kbGVyIGxpc3RcIiwgdHJ5TG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlQmxvY2sodHJ5U3RhdGVtZW50LmJvZHksIGxhbmd1YWdlLCB0cnlMb2NhdGlvbiwgbG9vcENvbnRleHQsIGFjdGl2ZVBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHRyeVN0YXRlbWVudC5oYW5kbGVycykge1xuICAgICAgY29uc3QgaGFuZGxlckxvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24oaGFuZGxlcj8ubG9jYXRpb24sIGxhbmd1YWdlLCBcImNhdGNoIGhhbmRsZXIgbG9jYXRpb25cIiwgdHJ5TG9jYXRpb24pXG4gICAgICBjb25zdCBoYW5kbGVyRmllbGRzID0gaGFuZGxlciAmJiB0eXBlb2YgaGFuZGxlciA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGhhbmRsZXIpXG4gICAgICAgID8gT2JqZWN0LmtleXMoaGFuZGxlcikuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgICBpZiAoIWhhbmRsZXIgfHwgaGFuZGxlci5raW5kICE9IFwiQ2F0Y2hIYW5kbGVyXCIgfHwgaGFuZGxlckZpZWxkcyAhPSBcImNhdGNoQmluZGluZyxjYXRjaEJvZHksY2F0Y2hUeXBlLGtpbmQsbG9jYXRpb25cIikge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIGNhdGNoIGhhbmRsZXJcIiwgaGFuZGxlckxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgdmFsaWRhdGVFcnJvclR5cGVTaGFwZShoYW5kbGVyLmNhdGNoVHlwZSwgbGFuZ3VhZ2UsIGhhbmRsZXJMb2NhdGlvbilcbiAgICAgIGNvbnN0IGJpbmRpbmcgPSBoYW5kbGVyLmNhdGNoQmluZGluZ1xuICAgICAgY29uc3QgYmluZGluZ0ZpZWxkcyA9IGJpbmRpbmcgJiYgdHlwZW9mIGJpbmRpbmcgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShiaW5kaW5nKVxuICAgICAgICA/IE9iamVjdC5rZXlzKGJpbmRpbmcpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcbiAgICAgIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGJpbmRpbmc/LmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJjYXRjaCBiaW5kaW5nIGxvY2F0aW9uXCIsIGhhbmRsZXJMb2NhdGlvbilcblxuICAgICAgaWYgKCFiaW5kaW5nIHx8IGJpbmRpbmcua2luZCAhPSBcIkNhdGNoQmluZGluZ1wiIHx8IGJpbmRpbmdGaWVsZHMgIT0gXCJraW5kLGxvY2F0aW9uLG11dGFibGUsbmFtZSx0eXBlXCIgfHwgYmluZGluZy5tdXRhYmxlICE9PSBmYWxzZSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIGNhdGNoIGJpbmRpbmdcIiwgYmluZGluZ0xvY2F0aW9uKVxuICAgICAgfVxuICAgICAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgYmluZGluZy5uYW1lLCBcImNhdGNoIGJpbmRpbmdcIiwgYmluZGluZ0xvY2F0aW9uKVxuICAgICAgdmFsaWRhdGVFcnJvclR5cGVTaGFwZShiaW5kaW5nLnR5cGUsIGxhbmd1YWdlLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgICBpZiAoYmluZGluZy50eXBlLmRlY2xhcmF0aW9uSWQgIT0gaGFuZGxlci5jYXRjaFR5cGUuZGVjbGFyYXRpb25JZCkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiY2F0Y2ggYmluZGluZyB0eXBlIG1pc21hdGNoXCIsIGJpbmRpbmdMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlQmxvY2soaGFuZGxlci5jYXRjaEJvZHksIGxhbmd1YWdlLCBoYW5kbGVyTG9jYXRpb24sIGxvb3BDb250ZXh0LCBhY3RpdmVQYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIH1cbiAgICBpZiAodHJ5U3RhdGVtZW50LmZpbmFsbHlCb2R5KSB2YWxpZGF0ZUJsb2NrKHRyeVN0YXRlbWVudC5maW5hbGx5Qm9keSwgbGFuZ3VhZ2UsIHRyeUxvY2F0aW9uLCBsb29wQ29udGV4dCwgYWN0aXZlUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuXG4gIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYHN0YXRlbWVudCAke2tpbmR9YCwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBjbG9zZWQgcGFyc2VyLW5ldXRyYWwgZXJyb3IgdHlwZSBzaGFwZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdHlwZSAtIENhbmRpZGF0ZSBlcnJvciB0eXBlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gb3duZXJMb2NhdGlvbiAtIE5lYXJlc3Qgb3duaW5nIGxvY2F0aW9uLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRXJyb3JUeXBlU2hhcGUoLyoqIEB0eXBlIHt1bmtub3dufSAqLyB0eXBlLFxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gKi8gbGFuZ3VhZ2UsXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259ICovIG93bmVyTG9jYXRpb24pIHtcbiAgY29uc3QgZmllbGRzID0gdHlwZSAmJiB0eXBlb2YgdHlwZSA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHR5cGUpXG4gICAgPyBPYmplY3Qua2V5cyh0eXBlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIikgOiBcIlwiXG4gIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGUgJiYgdHlwZW9mIHR5cGUgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh0eXBlKVxuICAgID8gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHR5cGUpIDoge31cblxuICBpZiAoY2FuZGlkYXRlLmtpbmQgIT0gXCJFcnJvclR5cGVcIiB8fCBmaWVsZHMgIT0gXCJkZWNsYXJhdGlvbklkLGtpbmRcIiB8fCB0eXBlb2YgY2FuZGlkYXRlLmRlY2xhcmF0aW9uSWQgIT0gXCJzdHJpbmdcIiB8fFxuICAgICEvXig/Oig/OlthLXpdW2EtejAtOS5fLV0qIyk/ZXJyb3I6WzAtOV0rfCg/Om1vZHVsZTpbMC05XStcXC8pP2NhcGFiaWxpdHk6WzAtOV0rXFwvZmFpbHVyZTpbMC05XSspJC91XG4gICAgICAudGVzdChjYW5kaWRhdGUuZGVjbGFyYXRpb25JZCkpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGVycm9yIHR5cGVcIiwgb3duZXJMb2NhdGlvbilcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYSBjb21wbGV0ZSBzZW1hbnRpYyBsb2NhdGlvbiBzdWl0YWJsZSBmb3IgZGlhZ25vc3RpYyBjb25zdHJ1Y3Rpb24uXG4gKiBAcGFyYW0ge3Vua25vd259IGNhbmRpZGF0ZSAtIFByZWZlcnJlZCBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZmFsbGJhY2sgLSBOZWFyZXN0IGVuY2xvc2luZyBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gU2FmZSBkaWFnbm9zdGljIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBkaWFnbm9zdGljTG9jYXRpb24oY2FuZGlkYXRlLCBmYWxsYmFjaykge1xuICBpZiAoaXNTZW1hbnRpY0xvY2F0aW9uKGNhbmRpZGF0ZSkpIHJldHVybiBjYW5kaWRhdGVcbiAgaWYgKGlzU2VtYW50aWNMb2NhdGlvbihmYWxsYmFjaykpIHJldHVybiBmYWxsYmFja1xuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBvbmUgY29tcGxldGUgcGFyc2VyLW5ldXRyYWwgbG9jYXRpb24gYmVmb3JlIGFueSBiYWNrZW5kIG9yIGRpYWdub3N0aWMgY29uc3VtZXMgaXQuXG4gKiBAcGFyYW0ge3Vua25vd259IGNhbmRpZGF0ZSAtIFJlcXVpcmVkIGxvY2F0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gTG9jYXRpb24gb3duZXIgZm9yIGEgZGV0ZXJtaW5pc3RpYyBkaWFnbm9zdGljLlxuICogQHBhcmFtIHt1bmtub3dufSBmYWxsYmFjayAtIE5lYXJlc3QgZW5jbG9zaW5nIGxvY2F0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBWYWxpZGF0ZWQgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGNhbmRpZGF0ZSwgbGFuZ3VhZ2UsIHN1YmplY3QsIGZhbGxiYWNrKSB7XG4gIGlmICghaXNTZW1hbnRpY0xvY2F0aW9uKGNhbmRpZGF0ZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1pc3Npbmcgb3IgaW52YWxpZCAke3N1YmplY3R9YCwgZGlhZ25vc3RpY0xvY2F0aW9uKGZhbGxiYWNrLCB1bmRlZmluZWQpKVxuXG4gIHJldHVybiBjYW5kaWRhdGVcbn1cblxuLyoqXG4gKiBDaGVja3MgYSBjb21wbGV0ZSBvcmRlcmVkIFVURi0xNiBzb3VyY2UgcmFuZ2UuXG4gKiBAcGFyYW0ge3Vua25vd259IGxvY2F0aW9uIC0gQ2FuZGlkYXRlIHNvdXJjZSByYW5nZS5cbiAqIEByZXR1cm5zIHtsb2NhdGlvbiBpcyBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gV2hldGhlciB0aGUgcmFuZ2UgaXMgc2FmZSB0byBjb25zdW1lLlxuICovXG5mdW5jdGlvbiBpc1NlbWFudGljTG9jYXRpb24obG9jYXRpb24pIHtcbiAgaWYgKCFsb2NhdGlvbiB8fCB0eXBlb2YgbG9jYXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGxvY2F0aW9uKSkgcmV0dXJuIGZhbHNlXG4gIGNvbnN0IGNhbmRpZGF0ZSA9IC8qKiBAdHlwZSB7e2ZpbGVuYW1lPzogdW5rbm93biwgc3RhcnQ/OiB1bmtub3duLCBlbmQ/OiB1bmtub3dufX0gKi8gKGxvY2F0aW9uKVxuXG4gIGlmICh0eXBlb2YgY2FuZGlkYXRlLmZpbGVuYW1lICE9IFwic3RyaW5nXCIgfHwgY2FuZGlkYXRlLmZpbGVuYW1lLmxlbmd0aCA9PSAwIHx8XG4gICAgIWlzU2VtYW50aWNQb2ludChjYW5kaWRhdGUuc3RhcnQpIHx8ICFpc1NlbWFudGljUG9pbnQoY2FuZGlkYXRlLmVuZCkpIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiBjYW5kaWRhdGUuZW5kLm9mZnNldCA+PSBjYW5kaWRhdGUuc3RhcnQub2Zmc2V0ICYmIGNhbmRpZGF0ZS5lbmQubGluZSA+PSBjYW5kaWRhdGUuc3RhcnQubGluZSAmJlxuICAgIChjYW5kaWRhdGUuZW5kLmxpbmUgIT0gY2FuZGlkYXRlLnN0YXJ0LmxpbmUgfHwgY2FuZGlkYXRlLmVuZC5jb2x1bW4gPj0gY2FuZGlkYXRlLnN0YXJ0LmNvbHVtbilcbn1cblxuLyoqXG4gKiBDaGVja3Mgb25lIGNvbXBsZXRlIG9uZS1iYXNlZCBVVEYtMTYgc291cmNlIHBvaW50LlxuICogQHBhcmFtIHt1bmtub3dufSBwb2ludCAtIENhbmRpZGF0ZSBzb3VyY2UgcG9pbnQuXG4gKiBAcmV0dXJucyB7cG9pbnQgaXMgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlUG9pbnR9IFdoZXRoZXIgYWxsIGNvb3JkaW5hdGVzIGFyZSB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gaXNTZW1hbnRpY1BvaW50KHBvaW50KSB7XG4gIGlmICghcG9pbnQgfHwgdHlwZW9mIHBvaW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShwb2ludCkpIHJldHVybiBmYWxzZVxuICBjb25zdCBjYW5kaWRhdGUgPSAvKiogQHR5cGUge3tvZmZzZXQ/OiB1bmtub3duLCBsaW5lPzogdW5rbm93biwgY29sdW1uPzogdW5rbm93bn19ICovIChwb2ludClcblxuICByZXR1cm4gTnVtYmVyLmlzU2FmZUludGVnZXIoY2FuZGlkYXRlLm9mZnNldCkgJiYgTnVtYmVyKGNhbmRpZGF0ZS5vZmZzZXQpID49IDAgJiZcbiAgICBOdW1iZXIuaXNTYWZlSW50ZWdlcihjYW5kaWRhdGUubGluZSkgJiYgTnVtYmVyKGNhbmRpZGF0ZS5saW5lKSA+PSAxICYmXG4gICAgTnVtYmVyLmlzU2FmZUludGVnZXIoY2FuZGlkYXRlLmNvbHVtbikgJiYgTnVtYmVyKGNhbmRpZGF0ZS5jb2x1bW4pID49IDFcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHNpbXBsZSBpZGVudGlmaWVyIHRhcmdldCBpbnRyb2R1Y2VkIGJ5IHRhc2sgMDAyLlxuICogQHBhcmFtIHt1bmtub3dufSB0YXJnZXQgLSBDYW5kaWRhdGUgYXNzaWdubWVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGxhbmd1YWdlIG9yIGJpbmFyeSB0YXJnZXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBvd25lckxvY2F0aW9uIC0gQXNzaWdubWVudCBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUFzc2lnbm1lbnRUYXJnZXQodGFyZ2V0LCBsYW5ndWFnZSwgb3duZXJMb2NhdGlvbikge1xuICBpZiAoIXRhcmdldCB8fCB0eXBlb2YgdGFyZ2V0ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgYXNzaWdubWVudCB0YXJnZXRcIiwgb3duZXJMb2NhdGlvbilcbiAgfVxuXG4gIGNvbnN0IGNhbmRpZGF0ZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWRlbnRpZmllckV4cHJlc3Npb259ICovICh0YXJnZXQpXG4gIGNvbnN0IGxvY2F0aW9uID0gY2FuZGlkYXRlLmxvY2F0aW9uID8/IG93bmVyTG9jYXRpb25cblxuICBpZiAoY2FuZGlkYXRlLmtpbmQgIT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGFzc2lnbm1lbnQgdGFyZ2V0ICR7U3RyaW5nKFJlZmxlY3QuZ2V0KHRhcmdldCwgXCJraW5kXCIpKX1gLCBsb2NhdGlvbilcbiAgfVxuXG4gIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIGNhbmRpZGF0ZS5uYW1lLCBcImFzc2lnbm1lbnQgdGFyZ2V0XCIsIGxvY2F0aW9uKVxufVxuXG4vKipcbiAqIENoZWNrcyBleHByZXNzaW9uIGJhY2tlbmQgY2FwYWJpbGl0aWVzIHJlY3Vyc2l2ZWx5LlxuICogQHBhcmFtIHt1bmtub3dufSBleHByZXNzaW9uIC0gQ2FuZGlkYXRlIHNlbWFudGljIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGxhbmd1YWdlIG9yIGJpbmFyeSB0YXJnZXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBvd25lckxvY2F0aW9uIC0gTmVhcmVzdCBvd25pbmcgbm9kZSBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93SmF2YU5lZ2F0ZWRNaW5pbXVtT3BlcmFuZF0gLSBXaGV0aGVyIEphdmEgbWF5IHVzZSAyMTQ3NDgzNjQ4IG9ubHkgYmVuZWF0aCBpbnRlZ2VyIG5lZ2F0aW9uLlxuICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW2FjdGl2ZVBhdGhdIC0gQW5jZXN0b3JzIG9uIHRoZSBjdXJyZW50IHJlY3Vyc2l2ZSB2YWxpZGF0aW9uIHBhdGguXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSBbZXh0ZXJuYWxEZWNsYXJhdGlvbklkc10gLSBSZXNvbHZlZCBkZWNsYXJhdGlvbnMgd2hvc2Ugc291cmNlIHNwZWxsaW5nIGlzIHRhcmdldC1pbmRlcGVuZGVudC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93SmF2YU9yZGVyZWRNYXBSb290XSAtIFdoZXRoZXIgdGhpcyByb290IGlzIGEgSmF2YSBsb2NhbCBpbml0aWFsaXplciBlbGlnaWJsZSBmb3Igc3RhdGVtZW50IGxvd2VyaW5nLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwcmVzc2lvbihleHByZXNzaW9uLCBsYW5ndWFnZSwgb3duZXJMb2NhdGlvbiwgYWxsb3dKYXZhTmVnYXRlZE1pbmltdW1PcGVyYW5kID0gZmFsc2UsIGFjdGl2ZVBhdGggPSBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMgPSBuZXcgU2V0KCksIGFsbG93SmF2YU9yZGVyZWRNYXBSb290ID0gZmFsc2UpIHtcbiAgaWYgKCFleHByZXNzaW9uIHx8IHR5cGVvZiBleHByZXNzaW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShleHByZXNzaW9uKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGV4cHJlc3Npb25cIiwgb3duZXJMb2NhdGlvbilcbiAgfVxuXG4gIGNvbnN0IGNhbmRpZGF0ZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKGV4cHJlc3Npb24pXG4gIGNvbnN0IGxvY2F0aW9uID0gY2FuZGlkYXRlLmxvY2F0aW9uID8/IG93bmVyTG9jYXRpb25cblxuICBpZiAoYWN0aXZlUGF0aC5oYXMoY2FuZGlkYXRlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImN5Y2xpYyBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuICBjb25zdCBleHByZXNzaW9uUGF0aCA9IG5ldyBTZXQoYWN0aXZlUGF0aClcblxuICBleHByZXNzaW9uUGF0aC5hZGQoY2FuZGlkYXRlKVxuXG4gIGlmICh0eXBlb2YgY2FuZGlkYXRlLmtpbmQgIT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikge1xuICAgIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgY2FuZGlkYXRlLm5hbWUsIFwicmVmZXJlbmNlXCIsIGxvY2F0aW9uKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJjbGFzc0lkLGtpbmQsbG9jYXRpb25cIiB8fCB0eXBlb2YgY2FuZGlkYXRlLmNsYXNzSWQgIT0gXCJzdHJpbmdcIiB8fFxuICAgICAgIS9eKD86W2Etel1bYS16MC05Ll8tXSojKT9jbGFzczpbMC05XSskL3UudGVzdChjYW5kaWRhdGUuY2xhc3NJZCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgcHJpdmF0ZSBmaWVsZCByZWNlaXZlclwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiRXJyb3JNZXNzYWdlUmVhZFwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJraW5kLGxvY2F0aW9uLHJlY2VpdmVyXCIgfHwgY2FuZGlkYXRlLnJlY2VpdmVyPy5raW5kICE9IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBFcnJvck1lc3NhZ2VSZWFkXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLnJlY2VpdmVyLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJPd25lZE1vdmVFeHByZXNzaW9uXCIgfHwgY2FuZGlkYXRlLmtpbmQgPT0gXCJPd25lZEJvcnJvd0V4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG4gICAgY29uc3QgZXhwZWN0ZWQgPSBjYW5kaWRhdGUua2luZCA9PSBcIk93bmVkTW92ZUV4cHJlc3Npb25cIiA/IFwiZXhwcmVzc2lvbixraW5kLGxvY2F0aW9uLHR5cGVcIiA6IFwiZXhwcmVzc2lvbixraW5kLGxvY2F0aW9uLG1vZGUsdHlwZVwiXG5cbiAgICBpZiAoZmllbGRzICE9IGV4cGVjdGVkIHx8IGNhbmRpZGF0ZS5leHByZXNzaW9uLmtpbmQgIT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiICYmIGNhbmRpZGF0ZS5leHByZXNzaW9uLmtpbmQgIT0gXCJSZWNlaXZlckV4cHJlc3Npb25cIiAmJlxuICAgICAgY2FuZGlkYXRlLmV4cHJlc3Npb24ua2luZCAhPSBcIlByaXZhdGVGaWVsZFJlYWRcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWFsZm9ybWVkICR7Y2FuZGlkYXRlLmtpbmR9YCwgbG9jYXRpb24pXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5leHByZXNzaW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJJbnRlZ2VyTGl0ZXJhbFwiKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihjYW5kaWRhdGUudmFsdWUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibm9uLXNhZmUgaW50ZWdlciBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCB2YWxpZE5lZ2F0ZWRNaW5pbXVtT3BlcmFuZCA9IGFsbG93SmF2YU5lZ2F0ZWRNaW5pbXVtT3BlcmFuZCAmJiBjYW5kaWRhdGUudmFsdWUgPT0gMjE0NzQ4MzY0OFxuXG4gICAgaWYgKGxhbmd1YWdlID09IFwiamF2YVwiICYmICF2YWxpZE5lZ2F0ZWRNaW5pbXVtT3BlcmFuZCAmJiAoY2FuZGlkYXRlLnZhbHVlIDwgLTIxNDc0ODM2NDggfHwgY2FuZGlkYXRlLnZhbHVlID4gMjE0NzQ4MzY0NykpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJpbnRlZ2VyIGxpdGVyYWwgb3V0c2lkZSBzaWduZWQgMzItYml0IGludCByYW5nZVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKChsYW5ndWFnZSA9PSBcImNzaGFycFwiIHx8IGxhbmd1YWdlID09IFwiZ29cIiB8fCBsYW5ndWFnZSA9PSBcImNcIiB8fCBsYW5ndWFnZSA9PSBcImNwcFwiIHx8IGxhbmd1YWdlID09IFwiZGFydFwiIHx8IGxhbmd1YWdlID09IFwia290bGluXCIgfHwgbGFuZ3VhZ2UgPT0gXCJydXN0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJzd2lmdFwiKSAmJiBjYW5kaWRhdGUudmFsdWUgPCAwIHx8XG4gICAgICAobGFuZ3VhZ2UgPT0gXCJjXCIgfHwgbGFuZ3VhZ2UgPT0gXCJjcHBcIiB8fCBsYW5ndWFnZSA9PSBcImRhcnRcIiB8fCBsYW5ndWFnZSA9PSBcImtvdGxpblwiIHx8IGxhbmd1YWdlID09IFwicnVzdFwiIHx8IGxhbmd1YWdlID09IFwic3dpZnRcIikgJiYgT2JqZWN0LmlzKGNhbmRpZGF0ZS52YWx1ZSwgLTApKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibmVnYXRpdmUgaW50ZWdlciBsaXRlcmFsIHdpdGhvdXQgc2VtYW50aWMgbmVnYXRpb25cIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkJvb2xlYW5MaXRlcmFsXCIgfHwgY2FuZGlkYXRlLmtpbmQgPT0gXCJTdHJpbmdMaXRlcmFsXCIpIHJldHVyblxuICBpZiAoW1wiT3B0aW9uYWxOb25lXCIsIFwiT3B0aW9uYWxTb21lXCIsIFwiT3B0aW9uYWxJc1ByZXNlbnRcIiwgXCJPcHRpb25hbFVud3JhcFwiXS5pbmNsdWRlcyhjYW5kaWRhdGUua2luZCkpIHtcbiAgICBpZiAoIXRhc2swMDdMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA3IG9wdGlvbmFsIHZhbHVlc1wiLCBsb2NhdGlvbilcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuICAgIGNvbnN0IGV4cGVjdGVkRmllbGRzID0gY2FuZGlkYXRlLmtpbmQgPT0gXCJPcHRpb25hbE5vbmVcIiA/IFwia2luZCxsb2NhdGlvblwiIDpcbiAgICAgIGNhbmRpZGF0ZS5raW5kID09IFwiT3B0aW9uYWxTb21lXCIgPyBcImtpbmQsbG9jYXRpb24sdmFsdWVcIiA6IFwia2luZCxsb2NhdGlvbixvcGVyYW5kXCJcblxuICAgIGlmIChmaWVsZHMgIT0gZXhwZWN0ZWRGaWVsZHMpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1hbGZvcm1lZCAke2NhbmRpZGF0ZS5raW5kfWAsIGxvY2F0aW9uKVxuICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk9wdGlvbmFsTm9uZVwiKSByZXR1cm5cbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJPcHRpb25hbFNvbWVcIikge1xuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS52YWx1ZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5PcHRpb25hbElzUHJlc2VudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLk9wdGlvbmFsVW53cmFwfSAqLyAoY2FuZGlkYXRlKVxuXG4gICAgaWYgKCFvcGVyYXRpb24ub3BlcmFuZCB8fCBvcGVyYXRpb24ub3BlcmFuZC5raW5kICE9IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtjYW5kaWRhdGUua2luZH0gd2l0aG91dCBhIHNpbXBsZSBpZGVudGlmaWVyIG9wZXJhbmRgLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKG9wZXJhdGlvbi5vcGVyYW5kLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoW1wiTGlzdExpdGVyYWxcIiwgXCJNYXBMaXRlcmFsXCIsIFwiT3JkZXJlZE1hcExpdGVyYWxcIiwgXCJMaXN0SW5kZXhFeHByZXNzaW9uXCIsIFwiTWFwTG9va3VwRXhwcmVzc2lvblwiLCBcIkNvbGxlY3Rpb25TaXplRXhwcmVzc2lvblwiXS5pbmNsdWRlcyhjYW5kaWRhdGUua2luZCkpIHtcbiAgICBpZiAoIXRhc2swMDZMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA2IGltbXV0YWJsZSBjb2xsZWN0aW9uc1wiLCBsb2NhdGlvbilcbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiICYmICF0YXNrMDE0TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAxNCBvcmRlcmVkLW1hcCBpdGVyYXRpb25cIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIgJiYgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgIWFsbG93SmF2YU9yZGVyZWRNYXBSb290KSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwidW5zYWZlIEphdmEgb3JkZXJlZC1tYXAgZXhwcmVzc2lvbiBsb3dlcmluZ1wiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiTGlzdExpdGVyYWxcIikge1xuICAgICAgaWYgKCFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlLmVsZW1lbnRzKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3Igc3BhcnNlIGxpc3QgZWxlbWVudHNcIiwgbG9jYXRpb24pXG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgY2FuZGlkYXRlLmVsZW1lbnRzKSB7XG4gICAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihlbGVtZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJNYXBMaXRlcmFsXCIgfHwgY2FuZGlkYXRlLmtpbmQgPT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKSB7XG4gICAgICBpZiAoIWlzRGVuc2VBcnJheShjYW5kaWRhdGUuZW50cmllcykpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIHNwYXJzZSBtYXAgZW50cmllc1wiLCBsb2NhdGlvbilcbiAgICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk1hcExpdGVyYWxcIiAmJiBsYW5ndWFnZSA9PSBcImphdmFcIiAmJiBjYW5kaWRhdGUuZW50cmllcy5sZW5ndGggPiAxMCkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiamF2YS51dGlsLk1hcC5vZiBzdXBwb3J0cyBhdCBtb3N0IHRlbiBlbnRyaWVzXCIsIGxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBjYW5kaWRhdGUuZW50cmllcykge1xuICAgICAgICBpZiAoIWVudHJ5IHx8IGVudHJ5LmtpbmQgIT0gXCJNYXBFbnRyeVwiIHx8ICFlbnRyeS5rZXkgfHwgZW50cnkua2V5LmtpbmQgIT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIG1hcCBlbnRyeVwiLCBlbnRyeT8ubG9jYXRpb24gPz8gbG9jYXRpb24pXG4gICAgICAgIH1cbiAgICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGVudHJ5LmtleSwgbGFuZ3VhZ2UsIGVudHJ5LmxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihlbnRyeS52YWx1ZSwgbGFuZ3VhZ2UsIGVudHJ5LmxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSB7XG4gICAgICBpZiAoY2FuZGlkYXRlLnRvdGFsaXR5ID09IFwiZmFpbC1vbi1hYnNlbmNlXCIgJiYgbGFuZ3VhZ2UgIT0gXCJqYXZhXCIpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImxpc3QgYWNjZXNzIGRlcGVuZHMgb24gSmF2YS1zcGVjaWZpYyBib3VuZHMgZmFpbHVyZVwiLCBsb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUuY29sbGVjdGlvbiwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmluZGV4LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJNYXBMb29rdXBFeHByZXNzaW9uXCIpIHtcbiAgICAgIGlmIChjYW5kaWRhdGUudG90YWxpdHkgPT0gXCJmYWlsLW9uLWFic2VuY2VcIiAmJiBsYW5ndWFnZSAhPSBcInJ1YnlcIikge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFwIGxvb2t1cCBkZXBlbmRzIG9uIFJ1YnkgZmV0Y2ggYWJzZW5jZSBmYWlsdXJlXCIsIGxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5jb2xsZWN0aW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUua2V5LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIikge1xuICAgICAgaWYgKGNhbmRpZGF0ZS5jb2xsZWN0aW9uS2luZCAhPSBcImxpc3RcIiAmJiBjYW5kaWRhdGUuY29sbGVjdGlvbktpbmQgIT0gXCJtYXBcIikge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiY29sbGVjdGlvbiBzaXplIHdpdGhvdXQgYSB2YWxpZGF0ZWQgcmVjZWl2ZXIga2luZFwiLCBsb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUuY29sbGVjdGlvbiwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uSWQgPSBjYW5kaWRhdGUucmVzb2x1dGlvbiAmJiB0eXBlb2YgY2FuZGlkYXRlLnJlc29sdXRpb24gPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShjYW5kaWRhdGUucmVzb2x1dGlvbilcbiAgICAgID8gUmVmbGVjdC5nZXQoY2FuZGlkYXRlLnJlc29sdXRpb24sIFwiZGVjbGFyYXRpb25JZFwiKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIGlmICh0eXBlb2YgZGVjbGFyYXRpb25JZCAhPSBcInN0cmluZ1wiIHx8ICFleHRlcm5hbERlY2xhcmF0aW9uSWRzLmhhcyhkZWNsYXJhdGlvbklkKSkge1xuICAgICAgdmFsaWRhdGVUYXJnZXRJZGVudGlmaWVyKGxhbmd1YWdlLCBjYW5kaWRhdGUuY2FsbGVlLCBcImNhbGxlZVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKCFjYW5kaWRhdGUucmVzb2x1dGlvbiB8fCB0eXBlb2YgY2FuZGlkYXRlLnJlc29sdXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGNhbmRpZGF0ZS5yZXNvbHV0aW9uKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCByZXNvbHZlZCBjYWxsIHNpZ25hdHVyZVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNhbmRpZGF0ZS5hcmd1bWVudHMpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGNhbGwgYXJndW1lbnRzXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIXRhc2swMDVMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSAmJiBjYW5kaWRhdGUuYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiY2FsbCBhcmd1bWVudCBjb3VudCBvdGhlciB0aGFuIHR3b1wiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBjYW5kaWRhdGUuYXJndW1lbnRzKSB7XG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJFZmZlY3RDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcbiAgICBjb25zdCByZXNvbHV0aW9uID0gY2FuZGlkYXRlLnJlc29sdXRpb25cblxuICAgIGlmIChmaWVsZHMgIT0gXCJhcmd1bWVudHMsZWZmZWN0U2l0ZUlkLGtpbmQsbG9jYXRpb24sb3BlcmF0aW9uLHJlc29sdXRpb25cIiB8fCAhaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5hcmd1bWVudHMpIHx8XG4gICAgICB0eXBlb2YgY2FuZGlkYXRlLmVmZmVjdFNpdGVJZCAhPSBcInN0cmluZ1wiIHx8IHR5cGVvZiBjYW5kaWRhdGUub3BlcmF0aW9uICE9IFwic3RyaW5nXCIgfHwgIXJlc29sdXRpb24gfHxcbiAgICAgIHJlc29sdXRpb24ua2luZCAhPSBcIlJlc29sdmVkRWZmZWN0T3BlcmF0aW9uU2lnbmF0dXJlXCIgfHwgcmVzb2x1dGlvbi5vcGVyYXRpb25JZCAhPSBjYW5kaWRhdGUub3BlcmF0aW9uIHx8XG4gICAgICAhaXNEZW5zZUFycmF5KHJlc29sdXRpb24ucGFyYW1ldGVyVHlwZXMpIHx8ICFpc0RlbnNlQXJyYXkocmVzb2x1dGlvbi5mYWlsdXJlSWRzKSB8fCByZXNvbHV0aW9uLmVmZmVjdHM/LmpvaW4oXCIsXCIpICE9IFwiaG9zdFwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIGF1dGhvcml6ZWQgZWZmZWN0IGNhbGxcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGZvciAoY29uc3QgYXJndW1lbnQgb2YgY2FuZGlkYXRlLmFyZ3VtZW50cykgdmFsaWRhdGVFeHByZXNzaW9uKGFyZ3VtZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJSZWZlcmVuY2VDb25zdHJ1Y3Rpb25cIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG4gICAgY29uc3QgcmVzb2x1dGlvbiA9IGNhbmRpZGF0ZS5yZXNvbHV0aW9uXG4gICAgY29uc3QgZWZmZWN0ZnVsRmllbGRzID0gXCJhcmd1bWVudHMsZWZmZWN0U2l0ZUlkLGVmZmVjdHMsZmFpbHVyZUlkcyxraW5kLGxvY2F0aW9uLHJlZmVyZW5jZSxyZXNvbHV0aW9uXCJcbiAgICBjb25zdCBwdXJlRmllbGRzID0gXCJhcmd1bWVudHMsa2luZCxsb2NhdGlvbixyZWZlcmVuY2UscmVzb2x1dGlvblwiXG5cbiAgICBpZiAoIVtwdXJlRmllbGRzLCBlZmZlY3RmdWxGaWVsZHNdLmluY2x1ZGVzKGZpZWxkcykgfHxcbiAgICAgIGNhbmRpZGF0ZS5yZWZlcmVuY2U/LmtpbmQgIT0gXCJSZWZlcmVuY2VUeXBlXCIgJiYgY2FuZGlkYXRlLnJlZmVyZW5jZT8ua2luZCAhPSBcIk93bmVkUmVmZXJlbmNlVHlwZVwiIHx8XG4gICAgICB0eXBlb2YgY2FuZGlkYXRlLnJlZmVyZW5jZS5kZWNsYXJhdGlvbklkICE9IFwic3RyaW5nXCIgfHwgIWlzRGVuc2VBcnJheShjYW5kaWRhdGUuYXJndW1lbnRzKSB8fFxuICAgICAgIXJlc29sdXRpb24gfHwgcmVzb2x1dGlvbi5raW5kICE9IFwiUmVzb2x2ZWRDb25zdHJ1Y3RvclNpZ25hdHVyZVwiIHx8XG4gICAgICByZXNvbHV0aW9uLmRlY2xhcmF0aW9uSWQgIT0gYCR7Y2FuZGlkYXRlLnJlZmVyZW5jZS5kZWNsYXJhdGlvbklkfTpjb25zdHJ1Y3RvcmAgfHwgIWlzRGVuc2VBcnJheShyZXNvbHV0aW9uLnBhcmFtZXRlclR5cGVzKSB8fFxuICAgICAgZmllbGRzID09IGVmZmVjdGZ1bEZpZWxkcyAmJlxuICAgICAgKHR5cGVvZiBjYW5kaWRhdGUuZWZmZWN0U2l0ZUlkICE9IFwic3RyaW5nXCIgfHwgY2FuZGlkYXRlLmVmZmVjdHM/LmpvaW4oXCIsXCIpICE9IFwiaG9zdFwiIHx8ICFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlLmZhaWx1cmVJZHMpKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCByZWZlcmVuY2UgY29uc3RydWN0aW9uIG9yIHJlc29sdmVkIGNvbnN0cnVjdG9yIHNpZ25hdHVyZVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBjYW5kaWRhdGUuYXJndW1lbnRzKSB7XG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcbiAgICBjb25zdCByZXNvbHV0aW9uID0gY2FuZGlkYXRlLnJlc29sdXRpb25cblxuICAgIGNvbnN0IGVmZmVjdGZ1bEZpZWxkcyA9IFwiYXJndW1lbnRzLGVmZmVjdFNpdGVJZCxlZmZlY3RzLGZhaWx1cmVJZHMsa2luZCxsb2NhdGlvbixtZXRob2QscmVjZWl2ZXIscmVzb2x1dGlvblwiXG4gICAgY29uc3QgcHVyZUZpZWxkcyA9IFwiYXJndW1lbnRzLGtpbmQsbG9jYXRpb24sbWV0aG9kLHJlY2VpdmVyLHJlc29sdXRpb25cIlxuXG4gICAgaWYgKCFbcHVyZUZpZWxkcywgZWZmZWN0ZnVsRmllbGRzXS5pbmNsdWRlcyhmaWVsZHMpIHx8IHR5cGVvZiBjYW5kaWRhdGUubWV0aG9kICE9IFwic3RyaW5nXCIgfHxcbiAgICAgICFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlLmFyZ3VtZW50cykgfHwgIXJlc29sdXRpb24gfHwgcmVzb2x1dGlvbi5raW5kICE9IFwiUmVzb2x2ZWRNZXRob2RTaWduYXR1cmVcIiB8fFxuICAgICAgcmVzb2x1dGlvbi5kZWNsYXJhdGlvbklkICE9IGNhbmRpZGF0ZS5tZXRob2QgfHwgIWlzRGVuc2VBcnJheShyZXNvbHV0aW9uLnBhcmFtZXRlclR5cGVzKSB8fFxuICAgICAgIU9iamVjdC5oYXNPd24ocmVzb2x1dGlvbiwgXCJyZXR1cm5UeXBlXCIpIHx8IE9iamVjdC5oYXNPd24ocmVzb2x1dGlvbiwgXCJyZXNvdXJjZUZsb3dcIikgJiZcbiAgICAgICghcmVzb2x1dGlvbi5yZXNvdXJjZUZsb3cgfHwgIVtcInByZXNlcnZlXCIsIFwidGVybWluYWxcIl0uaW5jbHVkZXMoU3RyaW5nKHJlc29sdXRpb24ucmVzb3VyY2VGbG93LmtpbmQpKSB8fFxuICAgICAgICBPYmplY3QuaGFzT3duKHJlc29sdXRpb24ucmVzb3VyY2VGbG93LCBcInRlcm1pbmFsRmFpbHVyZUlkXCIpICYmIHR5cGVvZiByZXNvbHV0aW9uLnJlc291cmNlRmxvdy50ZXJtaW5hbEZhaWx1cmVJZCAhPSBcInN0cmluZ1wiKSB8fFxuICAgICAgZmllbGRzID09IGVmZmVjdGZ1bEZpZWxkcyAmJlxuICAgICAgKHR5cGVvZiBjYW5kaWRhdGUuZWZmZWN0U2l0ZUlkICE9IFwic3RyaW5nXCIgfHwgY2FuZGlkYXRlLmVmZmVjdHM/LmpvaW4oXCIsXCIpICE9IFwiaG9zdFwiIHx8ICFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlLmZhaWx1cmVJZHMpKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCByZWNlaXZlciBjYWxsIG9yIHJlc29sdmVkIG1ldGhvZCBzaWduYXR1cmVcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUucmVjZWl2ZXIsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIGZvciAoY29uc3QgYXJndW1lbnQgb2YgY2FuZGlkYXRlLmFyZ3VtZW50cykge1xuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGFyZ3VtZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImFyZ3VtZW50cyxraW5kLGxvY2F0aW9uLHJlY29yZFwiIHx8ICFjYW5kaWRhdGUucmVjb3JkIHx8IGNhbmRpZGF0ZS5yZWNvcmQua2luZCAhPSBcIlJlY29yZFR5cGVcIiB8fFxuICAgICAgdHlwZW9mIGNhbmRpZGF0ZS5yZWNvcmQuZGVjbGFyYXRpb25JZCAhPSBcInN0cmluZ1wiIHx8ICFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlLmFyZ3VtZW50cykpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgUmVjb3JkQ29uc3RydWN0aW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9mIGNhbmRpZGF0ZS5hcmd1bWVudHMpIHtcbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk1lbWJlclJlYWRcIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiZmllbGQsa2luZCxsb2NhdGlvbixyZWNlaXZlclwiIHx8IHR5cGVvZiBjYW5kaWRhdGUuZmllbGQgIT0gXCJzdHJpbmdcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBNZW1iZXJSZWFkXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLnJlY2VpdmVyLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJQcml2YXRlRmllbGRSZWFkXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImZpZWxkLGtpbmQsbG9jYXRpb24scmVjZWl2ZXJcIiB8fCB0eXBlb2YgY2FuZGlkYXRlLmZpZWxkICE9IFwic3RyaW5nXCIgfHxcbiAgICAgIGNhbmRpZGF0ZS5yZWNlaXZlcj8ua2luZCAhPSBcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIHByaXZhdGUgZmllbGQgcmVjZWl2ZXIgb3IgcHJpdmF0ZSBmaWVsZCBpZGVudGl0eVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5yZWNlaXZlciwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAoIU9iamVjdC5oYXNPd24odW5hcnlPcGVyYXRpb25TeW50YXgsIFN0cmluZyhjYW5kaWRhdGUub3BlcmF0aW9uKSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYHVuYXJ5IG9wZXJhdGlvbiAke1N0cmluZyhjYW5kaWRhdGUub3BlcmF0aW9uKX1gLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5vcGVyYW5kLCBsYW5ndWFnZSwgbG9jYXRpb24sIGNhbmRpZGF0ZS5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTmVnYXRlXCIsIGV4cHJlc3Npb25QYXRoLFxuICAgICAgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB2YWxpZGF0ZUtub3duVGFyZ2V0SW50ZWdlcihjYW5kaWRhdGUsIGxhbmd1YWdlLCBsb2NhdGlvbilcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAoIU9iamVjdC5oYXNPd24oYmluYXJ5T3BlcmF0aW9uU3ludGF4LCBTdHJpbmcoY2FuZGlkYXRlLm9wZXJhdGlvbikpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBiaW5hcnkgb3BlcmF0aW9uICR7U3RyaW5nKGNhbmRpZGF0ZS5vcGVyYXRpb24pfWAsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmxlZnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUucmlnaHQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHZhbGlkYXRlS25vd25UYXJnZXRJbnRlZ2VyKGNhbmRpZGF0ZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uKVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImFsdGVybmF0ZSxjb25kaXRpb24sY29uc2VxdWVudCxraW5kLGxvY2F0aW9uLHR5cGVcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBDb25kaXRpb25hbEV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghdGFzazA0OENvbmRpdGlvbmFsTGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDA0OCBjb25kaXRpb25hbCBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUuY29uZGl0aW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmNvbnNlcXVlbnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUuYWx0ZXJuYXRlLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuXG4gIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgU3RyaW5nKFJlZmxlY3QuZ2V0KGV4cHJlc3Npb24sIFwia2luZFwiKSksIGxvY2F0aW9uKVxufVxuXG4vKipcbiAqIFJlamVjdHMgY29tcGlsZS10aW1lLWtub3duIEphdmEgaW50ZWdlciBvcGVyYXRpb24gcmVzdWx0cyBvdXRzaWRlIHByaW1pdGl2ZSBpbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlVuYXJ5RXhwcmVzc2lvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJpbmFyeUV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBWYWxpZGF0ZWQgb3BlcmF0aW9uIHNoYXBlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZSBvciBiaW5hcnkgdGFyZ2V0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gbG9jYXRpb24gLSBPcGVyYXRpb24gbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVLbm93blRhcmdldEludGVnZXIoZXhwcmVzc2lvbiwgbGFuZ3VhZ2UsIGxvY2F0aW9uKSB7XG4gIGNvbnN0IHZhbHVlID0ga25vd25JbnRlZ2VyVmFsdWUoZXhwcmVzc2lvbilcblxuICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiAodmFsdWUgPCAtMjE0NzQ4MzY0OG4gfHwgdmFsdWUgPiAyMTQ3NDgzNjQ3bikpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiY29tcGlsZS10aW1lLWtub3duIGludGVnZXIgb3BlcmF0aW9uIG91dHNpZGUgc2lnbmVkIDMyLWJpdCBpbnQgcmFuZ2VcIiwgbG9jYXRpb24pXG4gIH1cbiAgaWYgKChsYW5ndWFnZSA9PSBcImNzaGFycFwiIHx8IGxhbmd1YWdlID09IFwiZ29cIiB8fCBsYW5ndWFnZSA9PSBcImNcIiB8fCBsYW5ndWFnZSA9PSBcImNwcFwiIHx8IGxhbmd1YWdlID09IFwicnVzdFwiIHx8IGxhbmd1YWdlID09IFwic3dpZnRcIiB8fCBsYW5ndWFnZSA9PSBcIndhc21cIiB8fCBsYW5ndWFnZSA9PSBcInppZ1wiKSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgKHZhbHVlIDwgLTkyMjMzNzIwMzY4NTQ3NzU4MDhuIHx8IHZhbHVlID4gOTIyMzM3MjAzNjg1NDc3NTgwN24pKSB7XG4gICAgY29uc3Qgc2NhbGFyID0gbGFuZ3VhZ2UgPT0gXCJ3YXNtXCIgfHwgbGFuZ3VhZ2UgPT0gXCJ6aWdcIiA/IFwiaTY0XCIgOiBsYW5ndWFnZSA9PSBcInN3aWZ0XCIgPyBcIkludDY0XCIgOiBcImxvbmdcIlxuXG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgY29tcGlsZS10aW1lLWtub3duIGludGVnZXIgb3BlcmF0aW9uIG91dHNpZGUgc2lnbmVkIDY0LWJpdCAke3NjYWxhcn0gcmFuZ2VgLCBsb2NhdGlvbilcbiAgfVxuICBpZiAoKGxhbmd1YWdlID09IFwiZGFydFwiIHx8IGxhbmd1YWdlID09IFwia290bGluXCIpICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAodmFsdWUgPCAtQmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB8fCB2YWx1ZSA+IEJpZ0ludChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImNvbXBpbGUtdGltZS1rbm93biBpbnRlZ2VyIG9wZXJhdGlvbiBvdXRzaWRlIHRoZSBTZW1hbnRpZm9sZCBzYWZlLWludGVnZXIgcmFuZ2VcIiwgbG9jYXRpb24pXG4gIH1cbn1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgb25seSBsaXRlcmFsIGludGVnZXItb3BlcmF0aW9uIHRyZWVzIGZvciBib3VuZHMgdmFsaWRhdGlvbiwgbmV2ZXIgSVIgZm9sZGluZy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIFNlbWFudGljIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyB7YmlnaW50IHwgdW5kZWZpbmVkfSBLbm93biBtYXRoZW1hdGljYWwgaW50ZWdlci5cbiAqL1xuZnVuY3Rpb24ga25vd25JbnRlZ2VyVmFsdWUoZXhwcmVzc2lvbikge1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSW50ZWdlckxpdGVyYWxcIiAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcihleHByZXNzaW9uLnZhbHVlKSkgcmV0dXJuIEJpZ0ludChleHByZXNzaW9uLnZhbHVlKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIgJiYgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTmVnYXRlXCIpIHtcbiAgICBjb25zdCBvcGVyYW5kID0ga25vd25JbnRlZ2VyVmFsdWUoZXhwcmVzc2lvbi5vcGVyYW5kKVxuXG4gICAgcmV0dXJuIG9wZXJhbmQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IC1vcGVyYW5kXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCAhPSBcIkJpbmFyeUV4cHJlc3Npb25cIikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGNvbnN0IGxlZnQgPSBrbm93bkludGVnZXJWYWx1ZShleHByZXNzaW9uLmxlZnQpXG4gIGNvbnN0IHJpZ2h0ID0ga25vd25JbnRlZ2VyVmFsdWUoZXhwcmVzc2lvbi5yaWdodClcblxuICBpZiAobGVmdCA9PT0gdW5kZWZpbmVkIHx8IHJpZ2h0ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWRcbiAgaWYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlckFkZFwiKSByZXR1cm4gbGVmdCArIHJpZ2h0XG4gIGlmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJTdWJ0cmFjdFwiKSByZXR1cm4gbGVmdCAtIHJpZ2h0XG4gIGlmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJNdWx0aXBseVwiKSByZXR1cm4gbGVmdCAqIHJpZ2h0XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSByZWN1cnNpdmUgc2VtYW50aWMgdHlwZSB3aGlsZSBtYXBwaW5nIGV2ZXJ5IGNvbnN0aXR1ZW50IGlkZW50aXR5LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfSB0eXBlIC0gU2VtYW50aWMgdHlwZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gRXhhY3QgdHlwZSBvY2N1cnJlbmNlIHBhdGguXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlRleHRCYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtib29sZWFufSBbamF2YUJveGVkXSAtIFdoZXRoZXIgYSBKYXZhIHNjYWxhciBpcyBhIGdlbmVyaWMgYXJndW1lbnQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtaXRUeXBlKHdyaXRlciwgdHlwZSwgcGF0aCwgbGFuZ3VhZ2UsIGphdmFCb3hlZCA9IGZhbHNlKSB7XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJUeXBlVmFyaWFibGVSZWZlcmVuY2VcIikge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IHdyaXRlci50eXBlUGFyYW1ldGVyRm9ySWQodHlwZS5wYXJhbWV0ZXJJZClcblxuICAgIHdyaXRlci5tYXBwZWQocGFyYW1ldGVyLm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBwYXJhbWV0ZXIubmFtZSwgbm9kZTogdHlwZSwgcGF0aCwgcm9sZTogXCJ0eXBlXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHtcbiAgICBjb25zdCByZWNvcmQgPSB3cml0ZXIucmVjb3JkRm9ySWQodHlwZS5kZWNsYXJhdGlvbklkKVxuXG4gICAgd3JpdGVyLm1hcHBlZCh3cml0ZXIucmVjb3JkTmFtZUZvcklkKHR5cGUuZGVjbGFyYXRpb25JZCksIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IHJlY29yZC5uYW1lLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIlxuICAgIH0pXG4gICAgaWYgKHR5cGUuYXJndW1lbnRzKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicnVieVwiID8gXCJbXCIgOiBcIjxcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiB0eXBlLCBwYXRofSlcbiAgICAgIHR5cGUuYXJndW1lbnRzLmZvckVhY2goKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKGxhbmd1YWdlID09IFwicGhwXCIgfHwgbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgfHwgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIixcIiA6IFwiLCBcIixcbiAgICAgICAgICBcImdlbmVyaWMgdHlwZSBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW3R5cGVdLCBbcGF0aF0pXG4gICAgICAgIGVtaXRUeXBlKHdyaXRlciwgYXJndW1lbnQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxhbmd1YWdlLCBsYW5ndWFnZSA9PSBcImphdmFcIilcbiAgICAgIH0pXG4gICAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicnVieVwiID8gXCJdXCIgOiBcIj5cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiB0eXBlLCBwYXRofSlcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIikge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gd3JpdGVyLmNsYXNzRm9ySWQodHlwZS5kZWNsYXJhdGlvbklkKVxuXG4gICAgd3JpdGVyLm1hcHBlZCh3cml0ZXIuY2xhc3NOYW1lRm9ySWQodHlwZS5kZWNsYXJhdGlvbklkKSwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZGVjbGFyYXRpb24ubmFtZSwgbm9kZTogdHlwZSwgcGF0aCwgcm9sZTogXCJ0eXBlXCJcbiAgICB9KVxuICAgIHJldHVyblxuICB9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJJbnRlcmZhY2VUeXBlXCIpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHdyaXRlci5pbnRlcmZhY2VGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpXG5cbiAgICB3cml0ZXIubWFwcGVkKHdyaXRlci5pbnRlcmZhY2VOYW1lRm9ySWQodHlwZS5kZWNsYXJhdGlvbklkKSwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZGVjbGFyYXRpb24ubmFtZSwgbm9kZTogdHlwZSwgcGF0aCwgcm9sZTogXCJ0eXBlXCJcbiAgICB9KVxuICAgIHJldHVyblxuICB9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJPd25lZFJlc291cmNlVHlwZVwiKSB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB3cml0ZXIucmVzb3VyY2VGb3JJZCh0eXBlLnJlc291cmNlSWQpXG4gICAgd3JpdGVyLm1hcHBlZCh3cml0ZXIuY2FwYWJpbGl0eU5vbWluYWxOYW1lKHJlc291cmNlLm5hbWUpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogcmVzb3VyY2UubmFtZSwgbm9kZTogdHlwZSwgcGF0aCwgcm9sZTogXCJ0eXBlXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJPd25lZFJlZmVyZW5jZVR5cGVcIikge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gd3JpdGVyLmNsYXNzRm9ySWQodHlwZS5kZWNsYXJhdGlvbklkKVxuICAgIHdyaXRlci5tYXBwZWQod3JpdGVyLmNsYXNzTmFtZUZvcklkKHR5cGUuZGVjbGFyYXRpb25JZCksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBkZWNsYXJhdGlvbi5uYW1lLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIlR5cGVSZWZlcmVuY2VcIikge1xuICAgIGNvbnN0IHNwZWxsaW5nID0gbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgamF2YUJveGVkXG4gICAgICA/IHR5cGUubmFtZSA9PSBcImludGVnZXJcIiA/IFwiSW50ZWdlclwiIDogdHlwZS5uYW1lID09IFwiYm9vbGVhblwiID8gXCJCb29sZWFuXCIgOiB0eXBlLm5hbWUgPT0gXCJzdHJpbmdcIiA/IFwiU3RyaW5nXCIgOiBcInZvaWRcIlxuICAgICAgOiBlbWl0U2NhbGFyVHlwZShsYW5ndWFnZSwgdHlwZSlcblxuICAgIHdyaXRlci5tYXBwZWQoc3BlbGxpbmcsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgY29uc3QgcHJlZml4ID0gbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcImphdmEudXRpbC5PcHRpb25hbDxcIiA6IGxhbmd1YWdlID09IFwicGhwXCIgPyBcIj9cIiA6IFwiXCJcblxuICAgIHdyaXRlci5tYXBwZWQocHJlZml4LCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogdHlwZSwgcGF0aCwgcm9sZTogXCJ0eXBlXCJ9KVxuICAgIGVtaXRUeXBlKHdyaXRlciwgdHlwZS52YWx1ZVR5cGUsIGAke3BhdGh9L3ZhbHVlVHlwZWAsIGxhbmd1YWdlLCBsYW5ndWFnZSA9PSBcImphdmFcIilcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwiamF2YVwiID8gXCI+XCIgOiBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiP1wiIDogbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgPyBcInxudWxsXCIgOlxuICAgICAgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyBcIiB8IG51bGxcIiA6IFwiXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogdHlwZSwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgY29uc3QgcHJlZml4ID0gdHlwZS5raW5kID09IFwiTGlzdFR5cGVcIlxuICAgID8gbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIkFycmF5W1wiIDogbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwibGlzdDxcIiA6XG4gICAgICBsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiamF2YS51dGlsLkxpc3Q8XCIgOiBcIlJlYWRvbmx5QXJyYXk8XCJcbiAgICA6IGxhbmd1YWdlID09IFwicnVieVwiID8gXCJIYXNoW1wiIDogbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiYXJyYXk8XCIgOlxuICAgICAgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyB0eXBlLmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiID8gXCJqYXZhLnV0aWwuU2VxdWVuY2VkTWFwPFwiIDogXCJqYXZhLnV0aWwuTWFwPFwiIDogXCJSZWFkb25seU1hcDxcIlxuXG4gIHdyaXRlci5tYXBwZWQocHJlZml4LCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogdHlwZSwgcGF0aCwgcm9sZTogXCJ0eXBlXCJ9KVxuICBpZiAodHlwZS5raW5kID09IFwiTGlzdFR5cGVcIikge1xuICAgIGVtaXRUeXBlKHdyaXRlciwgdHlwZS5lbGVtZW50VHlwZSwgYCR7cGF0aH0vZWxlbWVudFR5cGVgLCBsYW5ndWFnZSwgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIpXG4gIH0gZWxzZSB7XG4gICAgZW1pdFR5cGUod3JpdGVyLCB0eXBlLmtleVR5cGUsIGAke3BhdGh9L2tleVR5cGVgLCBsYW5ndWFnZSwgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiA/IFwiLCBcIiA6IFwiLFwiLCBcIm1hcCB0eXBlIHNlcGFyYXRvclwiLCBbdHlwZV0sIFtwYXRoXSlcbiAgICBlbWl0VHlwZSh3cml0ZXIsIHR5cGUudmFsdWVUeXBlLCBgJHtwYXRofS92YWx1ZVR5cGVgLCBsYW5ndWFnZSwgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIpXG4gIH1cbiAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiXVwiIDogXCI+XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogdHlwZSwgcGF0aH0pXG59XG5cbi8qKlxuICogRW1pdHMgYSBzdXBwb3J0ZWQgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIC0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gRXhhY3QgSlNPTiBQb2ludGVyIGZvciB0aGlzIGV4cHJlc3Npb24gb2NjdXJyZW5jZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVGV4dEJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0geyhuYW1lOiBzdHJpbmcpID0+IHN0cmluZ30gZW1pdElkZW50aWZpZXIgLSBJZGVudGlmaWVyIGZvcm1hdHRlci5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpIHtcbiAgY29uc3QgZWZmZWN0VGVtcG9yYXJ5ID0gd3JpdGVyLmVmZmVjdFJlcGxhY2VtZW50TmFtZShleHByZXNzaW9uKVxuXG4gIGlmIChlZmZlY3RUZW1wb3JhcnkpIHtcbiAgICB3cml0ZXIuc3ludGhldGljKGVtaXRJZGVudGlmaWVyKGVmZmVjdFRlbXBvcmFyeSksIFwiZXhhY3RseS1vbmNlIGVmZmVjdCB0ZW1wb3JhcnkgcmVhZFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikge1xuICAgIHdyaXRlci5tYXBwZWQoZW1pdElkZW50aWZpZXIoZXhwcmVzc2lvbi5uYW1lKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicGhwXCIgPyBcIiR0aGlzXCIgOiBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwic2VsZlwiIDogXCJ0aGlzXCIsXG4gICAgICB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJyZWNlaXZlclwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3duZWRNb3ZlRXhwcmVzc2lvblwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk93bmVkQm9ycm93RXhwcmVzc2lvblwiKSB7XG4gICAgaWYgKGV4cHJlc3Npb24uZXhwcmVzc2lvbi5raW5kID09IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikge1xuICAgICAgd3JpdGVyLm1hcHBlZChlbWl0SWRlbnRpZmllcihleHByZXNzaW9uLmV4cHJlc3Npb24ubmFtZSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBleHByZXNzaW9uLmV4cHJlc3Npb24ubmFtZSxcbiAgICAgICAgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5leHByZXNzaW9uLmtpbmQgPT0gXCJSZWNlaXZlckV4cHJlc3Npb25cIikge1xuICAgICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInBocFwiID8gXCIkdGhpc1wiIDogbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcInNlbGZcIiA6IFwidGhpc1wiLFxuICAgICAgICB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJyZWNlaXZlclwifSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmllbGQgPSB3cml0ZXIucHJpdmF0ZUZpZWxkRm9ySWQoZXhwcmVzc2lvbi5leHByZXNzaW9uLmZpZWxkKVxuXG4gICAgICBpZiAobGFuZ3VhZ2UgIT0gXCJydWJ5XCIpIHtcbiAgICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmV4cHJlc3Npb24ucmVjZWl2ZXIsIGAke3BhdGh9L2V4cHJlc3Npb24vcmVjZWl2ZXJgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgICB9XG4gICAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicGhwXCIgPyBgLT4ke2ZpZWxkLm5hbWV9YCA6IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiID8gYC4jJHtmaWVsZC5uYW1lfWAgOlxuICAgICAgICBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IGBAJHtmaWVsZC5uYW1lfWAgOiBgLiR7ZmllbGQubmFtZX1gLFxuICAgICAge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IGZpZWxkLm5hbWUsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibWVtYmVyXCJ9KVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSW50ZWdlckxpdGVyYWxcIikge1xuICAgIGNvbnN0IHNwZWxsaW5nID0gbGFuZ3VhZ2UgPT0gXCJjc2hhcnBcIiB8fCBsYW5ndWFnZSA9PSBcImtvdGxpblwiID8gYCR7ZXhwcmVzc2lvbi52YWx1ZX1MYCA6IFN0cmluZyhleHByZXNzaW9uLnZhbHVlKVxuXG4gICAgd3JpdGVyLm1hcHBlZChzcGVsbGluZywge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibGl0ZXJhbFwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQm9vbGVhbkxpdGVyYWxcIikge1xuICAgIGNvbnN0IHNwZWxsaW5nID0gbGFuZ3VhZ2UgPT0gXCJweXRob25cIiA/IGV4cHJlc3Npb24udmFsdWUgPyBcIlRydWVcIiA6IFwiRmFsc2VcIiA6IGV4cHJlc3Npb24udmFsdWUgPyBcInRydWVcIiA6IFwiZmFsc2VcIlxuXG4gICAgaWYgKGxhbmd1YWdlID09IFwiZGFydFwiKSB7XG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiX3NlbWFudGlmb2xkQm9vbGVhbihcIiwgXCJEYXJ0IGFuYWx5emVkIEJvb2xlYW4gbGl0ZXJhbFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICB9XG4gICAgd3JpdGVyLm1hcHBlZChzcGVsbGluZywge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibGl0ZXJhbFwifSlcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJkYXJ0XCIpIHdyaXRlci5zeW50aGV0aWMoXCIpXCIsIFwiRGFydCBhbmFseXplZCBCb29sZWFuIGxpdGVyYWxcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlN0cmluZ0xpdGVyYWxcIikge1xuICAgIHdyaXRlci5tYXBwZWQoZW1pdFN0cmluZ0xpdGVyYWwobGFuZ3VhZ2UsIGV4cHJlc3Npb24udmFsdWUpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJsaXRlcmFsXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbE5vbmVcIikge1xuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcImphdmEudXRpbC5PcHRpb25hbC5lbXB0eSgpXCIgOiBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwibmlsXCIgOiBcIm51bGxcIiwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJhYnNlbmNlXCJcbiAgICB9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbFNvbWVcIikge1xuICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIikge1xuICAgICAgd3JpdGVyLm1hcHBlZChcImphdmEudXRpbC5PcHRpb25hbC5vZihcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwic29tZVwifSlcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwic29tZVwifSlcbiAgICB9XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnZhbHVlLCBgJHtwYXRofS92YWx1ZWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbElzUHJlc2VudFwiKSB7XG4gICAgaWYgKGxhbmd1YWdlID09IFwicnVieVwiKSB3cml0ZXIubWFwcGVkKFwiIVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICBlbHNlIGlmIChsYW5ndWFnZSAhPSBcImphdmFcIikgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ub3BlcmFuZCwgYCR7cGF0aH0vb3BlcmFuZGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwiamF2YVwiID8gXCIuaXNQcmVzZW50KClcIiA6IGxhbmd1YWdlID09IFwicnVieVwiID8gXCIubmlsP1wiIDogXCIgIT09IG51bGxcIiwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwiXG4gICAgfSlcbiAgICBpZiAobGFuZ3VhZ2UgIT0gXCJydWJ5XCIgJiYgbGFuZ3VhZ2UgIT0gXCJqYXZhXCIpIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsVW53cmFwXCIpIHtcbiAgICBpZiAobGFuZ3VhZ2UgIT0gXCJqYXZhXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcInVud3JhcFwifSlcbiAgICB9XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgaWYgKGxhbmd1YWdlID09IFwiamF2YVwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiLmdldCgpXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcInVud3JhcFwifSlcbiAgICB9IGVsc2Ugd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdExpdGVyYWxcIikge1xuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcImphdmEudXRpbC5MaXN0Lm9mKFwiIDogXCJbXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZXhwcmVzc2lvbi5lbGVtZW50cy5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4KSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJsaXN0IGVsZW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBlbGVtZW50LCBgJHtwYXRofS9lbGVtZW50cy8ke2luZGV4fWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIilcIiA6IFwiXVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNYXBMaXRlcmFsXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIikge1xuICAgIGNvbnN0IG9wZW4gPSBsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiamF2YS51dGlsLk1hcC5vZihcIiA6IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiID8gXCJuZXcgTWFwKFtcIiA6XG4gICAgICBsYW5ndWFnZSA9PSBcInBocFwiID8gXCJbXCIgOiBcIntcIlxuICAgIGNvbnN0IGNsb3NlID0gbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIilcIiA6IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiID8gXCJdKVwiIDpcbiAgICAgIGxhbmd1YWdlID09IFwicGhwXCIgPyBcIl1cIiA6IFwifVwiXG5cbiAgICB3cml0ZXIubWFwcGVkKG9wZW4sIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZXhwcmVzc2lvbi5lbnRyaWVzLmZvckVhY2goKGVudHJ5LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgZW50cnlQYXRoID0gYCR7cGF0aH0vZW50cmllcy8ke2luZGV4fWBcblxuICAgICAgaWYgKGluZGV4KSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJtYXAgZW50cnkgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgICAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiKSB3cml0ZXIubWFwcGVkKFwiW1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGVudHJ5LCBwYXRoOiBlbnRyeVBhdGh9KVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBlbnRyeS5rZXksIGAke2VudHJ5UGF0aH0va2V5YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiID0+IFwiIDogbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiID0+IFwiIDogXCIsIFwiLCB7XG4gICAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGVudHJ5LCBwYXRoOiBlbnRyeVBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIlxuICAgICAgfSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZW50cnkudmFsdWUsIGAke2VudHJ5UGF0aH0vdmFsdWVgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIpIHdyaXRlci5tYXBwZWQoXCJdXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZW50cnksIHBhdGg6IGVudHJ5UGF0aH0pXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKGNsb3NlLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJMaXN0SW5kZXhFeHByZXNzaW9uXCIpIHtcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24uY29sbGVjdGlvbiwgYCR7cGF0aH0vY29sbGVjdGlvbmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwiamF2YVwiID8gXCIuZ2V0KFwiIDogXCJbXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5pbmRleCwgYCR7cGF0aH0vaW5kZXhgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiKVwiIDogXCJdXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExvb2t1cEV4cHJlc3Npb25cIikge1xuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBgJHtwYXRofS9jb2xsZWN0aW9uYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIGNvbnN0IG9wZXJhdG9yID0gbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIi5mZXRjaChcIiA6IGxhbmd1YWdlID09IFwicGhwXCIgPyBcIltcIiA6IFwiLmdldChcIlxuXG4gICAgd3JpdGVyLm1hcHBlZChvcGVyYXRvciwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmtleSwgYCR7cGF0aH0va2V5YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiXVwiIDogXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgaWYgKGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiKSB7XG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiIVwiLCBcInN0YXRpY2FsbHkgcHJvdmVuIG1hcCBsb29rdXBcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIikge1xuICAgIGlmIChsYW5ndWFnZSA9PSBcInBocFwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiY291bnQoXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmNvbGxlY3Rpb24sIGAke3BhdGh9L2NvbGxlY3Rpb25gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBgJHtwYXRofS9jb2xsZWN0aW9uYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIGNvbnN0IG9wZXJhdG9yID0gbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgfHwgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIi5zaXplXCIgOlxuICAgICAgZXhwcmVzc2lvbi5jb2xsZWN0aW9uS2luZCA9PSBcImxpc3RcIiA/IFwiLmxlbmd0aFwiIDogXCIuc2l6ZVwiXG5cbiAgICB3cml0ZXIubWFwcGVkKGAke29wZXJhdG9yfSR7bGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIigpXCIgOiBcIlwifWAsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIlxuICAgIH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBjYWxsQXJndW1lbnRTdWZmaXggPSB3cml0ZXIuY2FsbEFyZ3VtZW50U3VmZml4Rm9yKGV4cHJlc3Npb24pXG4gICAgY29uc3QgZGFydE11bHRpbGluZSA9IGxhbmd1YWdlID09IFwiZGFydFwiICYmIChleHByZXNzaW9uLmFyZ3VtZW50cy5sZW5ndGggPiAwIHx8IEJvb2xlYW4oY2FsbEFyZ3VtZW50U3VmZml4KSkgJiZcbiAgICAgIGRhcnRFeHByZXNzaW9uRXhjZWVkc1BhZ2VXaWR0aCh3cml0ZXIsIGV4cHJlc3Npb24pXG4gICAgY29uc3QgZGFydEluZGVudCA9IGRhcnRNdWx0aWxpbmUgPyBjdXJyZW50TGluZUluZGVudCh3cml0ZXIpIDogXCJcIlxuXG4gICAgd3JpdGVyLm1hcHBlZCh3cml0ZXIuY2FsbE5hbWVGb3IoZXhwcmVzc2lvbiksIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IGV4cHJlc3Npb24uY2FsbGVlLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImNhbGxlZVwiXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGV4cHJlc3Npb24uYXJndW1lbnRzLmZvckVhY2goKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGRhcnRNdWx0aWxpbmUpIHdyaXRlci5zeW50aGV0aWMoYCR7aW5kZXggPyBcIlwiIDogXCJcXG5cIn0ke2RhcnRJbmRlbnR9ICBgLCBcIkRhcnQgYXJndW1lbnQgaW5kZW50YXRpb25cIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgICBlbHNlIGlmIChpbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcImFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgYXJndW1lbnQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICAgIGlmIChkYXJ0TXVsdGlsaW5lKSB3cml0ZXIuc3ludGhldGljKFwiLFxcblwiLCBcIkRhcnQgZm9ybWF0dGVyIGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICB9KVxuICAgIGlmIChjYWxsQXJndW1lbnRTdWZmaXgpIHtcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoZGFydE11bHRpbGluZSA/IGAke2V4cHJlc3Npb24uYXJndW1lbnRzLmxlbmd0aCA/IFwiXCIgOiBcIlxcblwifSR7ZGFydEluZGVudH0gICR7Y2FsbEFyZ3VtZW50U3VmZml4fSxcXG5gIDpcbiAgICAgICAgYCR7ZXhwcmVzc2lvbi5hcmd1bWVudHMubGVuZ3RoID8gXCIsIFwiIDogXCJcIn0ke2NhbGxBcmd1bWVudFN1ZmZpeH1gLFxuICAgICAgXCJ0YXJnZXQtY29udGFpbmVyIHNlbWFudGljIGNhbGwgYXJndW1lbnRcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgfVxuICAgIGlmIChkYXJ0TXVsdGlsaW5lKSB3cml0ZXIuc3ludGhldGljKGRhcnRJbmRlbnQsIFwiRGFydCBjYWxsIGNsb3NpbmcgaW5kZW50YXRpb25cIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiRWZmZWN0Q2FsbEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHdyaXRlci5lZmZlY3RPcGVyYXRpb25Gb3JJZChleHByZXNzaW9uLm9wZXJhdGlvbilcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgd3JpdGVyLnJlZmVyZW5jZUNsYXNzRW1pc3Npb25EZXB0aCA+IDApIHtcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoXCJNYWluLlwiLCBcInByb3RlY3RlZCBUYXNrIDAzNCBob3N0IHN1cHBvcnQgb3duZXJcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgfVxuICAgIHdyaXRlci5tYXBwZWQod3JpdGVyLnN0ZGxpYlByb3ZpZGVyRW50cnlGb3Iob3BlcmF0aW9uKSA/PyBvcGVyYXRpb24ubmFtZSwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogb3BlcmF0aW9uLm5hbWUsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwiY2FsbGVlXCJcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZXhwcmVzc2lvbi5hcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJlZmZlY3QgYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBhcmd1bWVudCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiUmVmZXJlbmNlQ29uc3RydWN0aW9uXCIpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHdyaXRlci5jbGFzc0ZvcklkKGV4cHJlc3Npb24ucmVmZXJlbmNlLmRlY2xhcmF0aW9uSWQpXG4gICAgY29uc3QgbmFtZSA9IHdyaXRlci5jbGFzc05hbWVGb3JJZChleHByZXNzaW9uLnJlZmVyZW5jZS5kZWNsYXJhdGlvbklkKVxuICAgIGNvbnN0IHByZWZpeCA9IGxhbmd1YWdlID09IFwicnVieVwiID8gYCR7bmFtZX0ubmV3YCA6IGBuZXcgJHtuYW1lfWBcblxuICAgIHdyaXRlci5tYXBwZWQocHJlZml4LCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZGVjbGFyYXRpb24ubmFtZSwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJjbGFzc1wifSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGV4cHJlc3Npb24uYXJndW1lbnRzLmZvckVhY2goKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwiY29uc3RydWN0b3IgYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBhcmd1bWVudCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWV0aG9kQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yZWNlaXZlciwgYCR7cGF0aH0vcmVjZWl2ZXJgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgY29uc3QgbWV0aG9kID0gd3JpdGVyLm1ldGhvZEZvcklkKGV4cHJlc3Npb24ubWV0aG9kKVxuXG4gICAgd3JpdGVyLm1hcHBlZChgJHtsYW5ndWFnZSA9PSBcInBocFwiID8gXCItPlwiIDogXCIuXCJ9JHttZXRob2QubmFtZX1gLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBtZXRob2QubmFtZSwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJtZW1iZXJcIlxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBleHByZXNzaW9uLmFyZ3VtZW50cy5mb3JFYWNoKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcIm1ldGhvZCBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGFyZ3VtZW50LCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJSZWNvcmRDb25zdHJ1Y3Rpb25cIikge1xuICAgIGNvbnN0IHJlY29yZCA9IHdyaXRlci5yZWNvcmRGb3JJZChleHByZXNzaW9uLnJlY29yZC5kZWNsYXJhdGlvbklkKVxuICAgIGNvbnN0IHRhcmdldE5hbWUgPSB3cml0ZXIucmVjb3JkTmFtZUZvcklkKGV4cHJlc3Npb24ucmVjb3JkLmRlY2xhcmF0aW9uSWQsIHRydWUpXG4gICAgY29uc3QgcHJlZml4ID0gbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBgJHt0YXJnZXROYW1lfS5uZXdgIDogYG5ldyAke3RhcmdldE5hbWV9YFxuXG4gICAgd3JpdGVyLm1hcHBlZChwcmVmaXgsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiByZWNvcmQubmFtZSwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJyZWNvcmRcIn0pXG4gICAgaWYgKChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcImphdmFcIikgJiYgZXhwcmVzc2lvbi5yZWNvcmQuYXJndW1lbnRzKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiPFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24ucmVjb3JkLCBwYXRoOiBgJHtwYXRofS9yZWNvcmRgfSlcbiAgICAgIGV4cHJlc3Npb24ucmVjb3JkLmFyZ3VtZW50cy5mb3JFYWNoKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiLFwiIDogXCIsIFwiLCBcImdlbmVyaWMgY29uc3RydWN0aW9uIGFyZ3VtZW50IHNlcGFyYXRvclwiLFxuICAgICAgICAgIFtleHByZXNzaW9uLnJlY29yZF0sIFtgJHtwYXRofS9yZWNvcmRgXSlcbiAgICAgICAgZW1pdFR5cGUod3JpdGVyLCBhcmd1bWVudCwgYCR7cGF0aH0vcmVjb3JkL2FyZ3VtZW50cy8ke2luZGV4fWAsIGxhbmd1YWdlLCBsYW5ndWFnZSA9PSBcImphdmFcIilcbiAgICAgIH0pXG4gICAgICB3cml0ZXIubWFwcGVkKFwiPlwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24ucmVjb3JkLCBwYXRoOiBgJHtwYXRofS9yZWNvcmRgfSlcbiAgICB9XG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBleHByZXNzaW9uLmFyZ3VtZW50cy5mb3JFYWNoKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcInJlY29yZCBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGFyZ3VtZW50LCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNZW1iZXJSZWFkXCIpIHtcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmVjZWl2ZXIsIGAke3BhdGh9L3JlY2VpdmVyYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIGNvbnN0IGZpZWxkID0gd3JpdGVyLmZpZWxkRm9ySWQoZXhwcmVzc2lvbi5maWVsZClcbiAgICBjb25zdCBwaHBHZW5lcmljUmVjb3JkID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiAmJlxuICAgICAgKHdyaXRlci5yZWNvcmRGb3JGaWVsZElkKGV4cHJlc3Npb24uZmllbGQpLnR5cGVQYXJhbWV0ZXJzPy5sZW5ndGggPz8gMCkgPiAwXG4gICAgY29uc3Qgc3BlbGxpbmcgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gYC0+JHtmaWVsZC5uYW1lfSR7cGhwR2VuZXJpY1JlY29yZCA/IFwiKClcIiA6IFwiXCJ9YCA6XG4gICAgICBsYW5ndWFnZSA9PSBcImphdmFcIiA/IGAuJHtmaWVsZC5uYW1lfSgpYCA6IGAuJHtmaWVsZC5uYW1lfWBcblxuICAgIHdyaXRlci5tYXBwZWQoc3BlbGxpbmcsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm1lbWJlclwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiUHJpdmF0ZUZpZWxkUmVhZFwiKSB7XG4gICAgY29uc3QgZmllbGQgPSB3cml0ZXIucHJpdmF0ZUZpZWxkRm9ySWQoZXhwcmVzc2lvbi5maWVsZClcblxuICAgIGlmIChsYW5ndWFnZSA9PSBcInJ1YnlcIikge1xuICAgICAgd3JpdGVyLm1hcHBlZChgQCR7ZmllbGQubmFtZX1gLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZmllbGQubmFtZSwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJtZW1iZXJcIn0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJlY2VpdmVyLCBgJHtwYXRofS9yZWNlaXZlcmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicGhwXCIgPyBgLT4ke2ZpZWxkLm5hbWV9YCA6IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiID8gYC4jJHtmaWVsZC5uYW1lfWAgOiBgLiR7ZmllbGQubmFtZX1gLFxuICAgICAge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IGZpZWxkLm5hbWUsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibWVtYmVyXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJFcnJvck1lc3NhZ2VSZWFkXCIpIHtcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmVjZWl2ZXIsIGAke3BhdGh9L3JlY2VpdmVyYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiLT5nZXRNZXNzYWdlKClcIiA6IGxhbmd1YWdlID09IFwiamF2YVwiID8gXCIuZ2V0TWVzc2FnZSgpXCIgOiBcIi5tZXNzYWdlXCIsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibWVtYmVyXCJcbiAgICB9KVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNvbmRpdGlvbmFsRXhwcmVzc2lvblwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24uY29uZGl0aW9uLCBgJHtwYXRofS9jb25kaXRpb25gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIiA/IFwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24uY29uc2VxdWVudCwgYCR7cGF0aH0vY29uc2VxdWVudGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiIDogXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImNvbG9uXCJ9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5hbHRlcm5hdGUsIGAke3BhdGh9L2FsdGVybmF0ZWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgaWYgKGxhbmd1YWdlID09IFwiZGFydFwiICYmIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck5lZ2F0ZVwiKSB7XG4gICAgICBlbWl0RGFydEludGVnZXJIZWxwZXIod3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBcIl9zZW1hbnRpZm9sZEludGVnZXJOZWdhdGVcIiwgW1xuICAgICAgICBbZXhwcmVzc2lvbi5vcGVyYW5kLCBgJHtwYXRofS9vcGVyYW5kYF1cbiAgICAgIF0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGxhbmd1YWdlID09IFwia290bGluXCIgJiYgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTmVnYXRlXCIpIHtcbiAgICAgIGVtaXRLb3RsaW5JbnRlZ2VySGVscGVyKHdyaXRlciwgZXhwcmVzc2lvbiwgcGF0aCwgXCJzZW1hbnRpZm9sZF9pbnRlZ2VyX25lZ2F0ZVwiLCBbXG4gICAgICAgIFtleHByZXNzaW9uLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgXVxuICAgICAgXSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJjc2hhcnBcIiAmJiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJOZWdhdGVcIikge1xuICAgICAgd3JpdGVyLm1hcHBlZChcImNoZWNrZWQoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgICB3cml0ZXIubWFwcGVkKFwiLVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5vcGVyYW5kLCBgJHtwYXRofS9vcGVyYW5kYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJweXRob25cIiAmJiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkJvb2xlYW5Ob3RcIiA/IFwibm90IFwiIDogdW5hcnlPcGVyYXRpb25TeW50YXhbZXhwcmVzc2lvbi5vcGVyYXRpb25dLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJcbiAgICB9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5vcGVyYW5kLCBgJHtwYXRofS9vcGVyYW5kYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAobGFuZ3VhZ2UgPT0gXCJkYXJ0XCIgJiYgW1wiSW50ZWdlckFkZFwiLCBcIkludGVnZXJTdWJ0cmFjdFwiLCBcIkludGVnZXJNdWx0aXBseVwiXS5pbmNsdWRlcyhleHByZXNzaW9uLm9wZXJhdGlvbikpIHtcbiAgICBjb25zdCBoZWxwZXIgPSBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJBZGRcIiA/IFwiX3NlbWFudGlmb2xkSW50ZWdlckFkZFwiIDpcbiAgICAgIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlclN1YnRyYWN0XCIgPyBcIl9zZW1hbnRpZm9sZEludGVnZXJTdWJ0cmFjdFwiIDogXCJfc2VtYW50aWZvbGRJbnRlZ2VyTXVsdGlwbHlcIlxuXG4gICAgZW1pdERhcnRJbnRlZ2VySGVscGVyKHdyaXRlciwgZXhwcmVzc2lvbiwgcGF0aCwgaGVscGVyLCBbXG4gICAgICBbZXhwcmVzc2lvbi5sZWZ0LCBgJHtwYXRofS9sZWZ0YF0sIFtleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGBdXG4gICAgXSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcImtvdGxpblwiICYmIFtcIkludGVnZXJBZGRcIiwgXCJJbnRlZ2VyU3VidHJhY3RcIiwgXCJJbnRlZ2VyTXVsdGlwbHlcIl0uaW5jbHVkZXMoZXhwcmVzc2lvbi5vcGVyYXRpb24pKSB7XG4gICAgY29uc3QgaGVscGVyID0gZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyQWRkXCIgPyBcInNlbWFudGlmb2xkX2ludGVnZXJfYWRkXCIgOlxuICAgICAgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyU3VidHJhY3RcIiA/IFwic2VtYW50aWZvbGRfaW50ZWdlcl9zdWJ0cmFjdFwiIDogXCJzZW1hbnRpZm9sZF9pbnRlZ2VyX211bHRpcGx5XCJcblxuICAgIGVtaXRLb3RsaW5JbnRlZ2VySGVscGVyKHdyaXRlciwgZXhwcmVzc2lvbiwgcGF0aCwgaGVscGVyLCBbXG4gICAgICBbZXhwcmVzc2lvbi5sZWZ0LCBgJHtwYXRofS9sZWZ0YF0sIFtleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGBdXG4gICAgXSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcImtvdGxpblwiICYmIHdyaXRlci51c2VzTWV0aG9kU3RyaW5nRXF1YWxpdHkoKSAmJlxuICAgIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ0VxdWFsXCIgfHwgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdOb3RFcXVhbFwiKSkge1xuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgaWYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nTm90RXF1YWxcIikge1xuICAgICAgd3JpdGVyLm1hcHBlZChcIiFcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgfVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5sZWZ0LCBgJHtwYXRofS9sZWZ0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIuZXF1YWxzKFwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmlnaHQsIGAke3BhdGh9L3JpZ2h0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGxhbmd1YWdlID09IFwiY3NoYXJwXCIgJiYgW1wiSW50ZWdlckFkZFwiLCBcIkludGVnZXJTdWJ0cmFjdFwiLCBcIkludGVnZXJNdWx0aXBseVwiXS5pbmNsdWRlcyhleHByZXNzaW9uLm9wZXJhdGlvbikpIHtcbiAgICB3cml0ZXIubWFwcGVkKFwiY2hlY2tlZChcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcIm9wZXJhdG9yIHNwYWNpbmdcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChiaW5hcnlPcGVyYXRpb25TcGVsbGluZyhleHByZXNzaW9uLm9wZXJhdGlvbiwgbGFuZ3VhZ2UpLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJcbiAgICB9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwib3BlcmF0b3Igc3BhY2luZ1wiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmlnaHQsIGAke3BhdGh9L3JpZ2h0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nRXF1YWxcIiB8fCBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIpKSB7XG4gICAgY29uc3QgY29tcG9zaXRlT3BlcmF0b3IgPSBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIgJiYgd3JpdGVyLmhhc1JhbmdlKGV4cHJlc3Npb24sIHBhdGgsIFwiZXF1YWxpdHlPcGVyYXRvclwiKVxuXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdOb3RFcXVhbFwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiIVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICB9XG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIuZXF1YWxzXCIsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IGNvbXBvc2l0ZU9wZXJhdG9yID8gXCJlcXVhbGl0eU9wZXJhdG9yXCIgOiBcIm9wZXJhdG9yXCJcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAobGFuZ3VhZ2UgPT0gXCJzd2lmdFwiICYmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ0VxdWFsXCIgfHwgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdOb3RFcXVhbFwiKSkge1xuICAgIHdyaXRlci5tYXBwZWQoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdFcXVhbFwiID8gXCJzZW1hbnRpZm9sZF9zdHJpbmdfZXF1YWxcIiA6IFwic2VtYW50aWZvbGRfc3RyaW5nX25vdF9lcXVhbFwiLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJcbiAgICB9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIoXCIsIFwiU3dpZnQgc2NhbGFyLWVxdWFsaXR5IGhlbHBlciBjYWxsXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5sZWZ0LCBgJHtwYXRofS9sZWZ0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcIlN3aWZ0IHNjYWxhci1lcXVhbGl0eSBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIuc3ludGhldGljKFwiKVwiLCBcIlN3aWZ0IHNjYWxhci1lcXVhbGl0eSBoZWxwZXIgY2FsbFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IGRhcnRNdWx0aWxpbmUgPSBsYW5ndWFnZSA9PSBcImRhcnRcIiAmJiBkYXJ0RXhwcmVzc2lvbkV4Y2VlZHNQYWdlV2lkdGgod3JpdGVyLCBleHByZXNzaW9uKVxuICBjb25zdCBkYXJ0SW5kZW50ID0gZGFydE11bHRpbGluZSA/IGN1cnJlbnRMaW5lSW5kZW50KHdyaXRlcikgOiBcIlwiXG5cbiAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmxlZnQsIGAke3BhdGh9L2xlZnRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwib3BlcmF0b3Igc3BhY2luZ1wiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgY29uc3Qgc3BlbGxpbmcgPSBiaW5hcnlPcGVyYXRpb25TcGVsbGluZyhleHByZXNzaW9uLm9wZXJhdGlvbiwgbGFuZ3VhZ2UpXG5cbiAgaWYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nTm90RXF1YWxcIiAmJiB3cml0ZXIuaGFzUmFuZ2UoZXhwcmVzc2lvbiwgcGF0aCwgXCJlcXVhbGl0eU9wZXJhdG9yXCIpKSB7XG4gICAgd3JpdGVyLm1hcHBlZChzcGVsbGluZy5zbGljZSgwLCAxKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgd3JpdGVyLm1hcHBlZChzcGVsbGluZy5zbGljZSgxKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwiZXF1YWxpdHlPcGVyYXRvclwifSlcbiAgfSBlbHNlIHdyaXRlci5tYXBwZWQoc3BlbGxpbmcsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICB3cml0ZXIuc3ludGhldGljKGRhcnRNdWx0aWxpbmUgPyBgXFxuJHtkYXJ0SW5kZW50fSAgICBgIDogXCIgXCIsIFwib3BlcmF0b3Igc3BhY2luZ1wiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbn1cblxuLyoqXG4gKiBFbWl0cyBhIEtvdGxpbiBjaGVja2VkLWludGVnZXIgaGVscGVyIHdoaWxlIHByZXNlcnZpbmcgdGhlIHNlbWFudGljIG9wZXJhdG9yIHJhbmdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlVuYXJ5RXhwcmVzc2lvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJpbmFyeUV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBPcGVyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIE9wZXJhdGlvbiBwYXRoLlxuICogQHBhcmFtIHtzdHJpbmd9IGhlbHBlciAtIEV4YWN0IHRhcmdldCBoZWxwZXIuXG4gKiBAcGFyYW0ge1tpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9uLCBzdHJpbmddW119IG9wZXJhbmRzIC0gT3JkZXJlZCBvcGVyYW5kcyBhbmQgcGF0aHMuXG4gKi9cbmZ1bmN0aW9uIGVtaXRLb3RsaW5JbnRlZ2VySGVscGVyKHdyaXRlciwgZXhwcmVzc2lvbiwgcGF0aCwgaGVscGVyLCBvcGVyYW5kcykge1xuICB3cml0ZXIubWFwcGVkKGhlbHBlciwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIoXCIsIFwiS290bGluIGNoZWNrZWQtaW50ZWdlciBoZWxwZXIgY2FsbFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgb3BlcmFuZHMuZm9yRWFjaCgoW29wZXJhbmQsIG9wZXJhbmRQYXRoXSwgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXgpIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcIktvdGxpbiBjaGVja2VkLWludGVnZXIgYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgb3BlcmFuZCwgb3BlcmFuZFBhdGgsIFwia290bGluXCIsIGlkZW50aXR5SWRlbnRpZmllcilcbiAgfSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIilcIiwgXCJLb3RsaW4gY2hlY2tlZC1pbnRlZ2VyIGhlbHBlciBjYWxsXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxufVxuXG4vKipcbiAqIEVtaXRzIGEgY29tcGlsZXItb3duZWQgRGFydCBjaGVja2VkLWludGVnZXIgaGVscGVyIGNhbGwuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlVuYXJ5RXhwcmVzc2lvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJpbmFyeUV4cHJlc3Npb259IGV4cHJlc3Npb24gT3BlcmF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggT3BlcmF0aW9uIHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVscGVyIEV4YWN0IHRhcmdldCBoZWxwZXIuXG4gKiBAcGFyYW0ge1tpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9uLCBzdHJpbmddW119IG9wZXJhbmRzIE9yZGVyZWQgb3BlcmFuZHMgYW5kIHBhdGhzLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXREYXJ0SW50ZWdlckhlbHBlcih3cml0ZXIsIGV4cHJlc3Npb24sIHBhdGgsIGhlbHBlciwgb3BlcmFuZHMpIHtcbiAgY29uc3QgZmxhdExlbmd0aCA9IGhlbHBlci5sZW5ndGggKyAyICsgb3BlcmFuZHMucmVkdWNlKCh0b3RhbCwgW29wZXJhbmRdLCBpbmRleCkgPT5cbiAgICB0b3RhbCArIGZsYXREYXJ0RXhwcmVzc2lvbih3cml0ZXIsIG9wZXJhbmQpLmxlbmd0aCArIChpbmRleCA/IDIgOiAwKSwgMClcbiAgY29uc3QgbXVsdGlsaW5lID0gd3JpdGVyLmNvbHVtbiAtIDEgKyBmbGF0TGVuZ3RoID4gODBcbiAgY29uc3QgaW5kZW50ID0gbXVsdGlsaW5lID8gY3VycmVudExpbmVJbmRlbnQod3JpdGVyKSA6IFwiXCJcblxuICB3cml0ZXIubWFwcGVkKGhlbHBlciwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIoXCIsIFwiRGFydCBjaGVja2VkLWludGVnZXIgaGVscGVyIGNhbGxcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gIG9wZXJhbmRzLmZvckVhY2goKFtvcGVyYW5kLCBvcGVyYW5kUGF0aF0sIGluZGV4KSA9PiB7XG4gICAgaWYgKG11bHRpbGluZSkgd3JpdGVyLnN5bnRoZXRpYyhgJHtpbmRleCA/IFwiXCIgOiBcIlxcblwifSR7aW5kZW50fSAgYCwgXCJEYXJ0IGNoZWNrZWQtaW50ZWdlciBhcmd1bWVudCBpbmRlbnRhdGlvblwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICBlbHNlIGlmIChpbmRleCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwiRGFydCBjaGVja2VkLWludGVnZXIgYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgb3BlcmFuZCwgb3BlcmFuZFBhdGgsIFwiZGFydFwiLCBpZGVudGl0eUlkZW50aWZpZXIpXG4gICAgaWYgKG11bHRpbGluZSkgd3JpdGVyLnN5bnRoZXRpYyhcIixcXG5cIiwgXCJEYXJ0IGZvcm1hdHRlciBjaGVja2VkLWludGVnZXIgYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICB9KVxuICBpZiAobXVsdGlsaW5lKSB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJEYXJ0IGNoZWNrZWQtaW50ZWdlciBjbG9zaW5nIGluZGVudGF0aW9uXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICB3cml0ZXIuc3ludGhldGljKFwiKVwiLCBcIkRhcnQgY2hlY2tlZC1pbnRlZ2VyIGhlbHBlciBjYWxsXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBEYXJ0J3MgZGVmYXVsdCA4MC1jb2x1bW4gZm9ybWF0dGVyIG11c3Qgc3BsaXQgYW4gZXhwcmVzc2lvbiBhdCB0aGUgY3VycmVudCBzaXRlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIFNlbWFudGljIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgZmxhdCBleHByZXNzaW9uIGNyb3NzZXMgdGhlIGZvcm1hdHRlciBib3VuZGFyeS5cbiAqL1xuZnVuY3Rpb24gZGFydEV4cHJlc3Npb25FeGNlZWRzUGFnZVdpZHRoKHdyaXRlciwgZXhwcmVzc2lvbikge1xuICByZXR1cm4gd3JpdGVyLmNvbHVtbiAtIDEgKyBmbGF0RGFydEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uKS5sZW5ndGggPiA4MFxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGN1cnJlbnQgZ2VuZXJhdGVkIGxpbmUncyBzdHJ1Y3R1cmFsIGluZGVudGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHJldHVybnMge3N0cmluZ30gTGVhZGluZyBzcGFjZXMuXG4gKi9cbmZ1bmN0aW9uIGN1cnJlbnRMaW5lSW5kZW50KHdyaXRlcikge1xuICByZXR1cm4gL14gKi91LmV4ZWMod3JpdGVyLmNvZGUuc2xpY2Uod3JpdGVyLmNvZGUubGFzdEluZGV4T2YoXCJcXG5cIikgKyAxKSk/LlswXSA/PyBcIlwiXG59XG5cbi8qKlxuICogUmVuZGVycyB0aGUgYm91bmRlZCBUYXNrLTAwNSBEYXJ0IGV4cHJlc3Npb24gcHJvZmlsZSB3aXRob3V0IG1hcHBpbmdzIGZvciBwYWdlLXdpZHRoIHBsYW5uaW5nLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIFNlbWFudGljIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBGbGF0IGNhbm9uaWNhbCBzcGVsbGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZsYXREYXJ0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24pIHtcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHJldHVybiBleHByZXNzaW9uLm5hbWVcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkludGVnZXJMaXRlcmFsXCIpIHJldHVybiBTdHJpbmcoZXhwcmVzc2lvbi52YWx1ZSlcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJvb2xlYW5MaXRlcmFsXCIpIHJldHVybiBgX3NlbWFudGlmb2xkQm9vbGVhbigke2V4cHJlc3Npb24udmFsdWUgPyBcInRydWVcIiA6IFwiZmFsc2VcIn0pYFxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiU3RyaW5nTGl0ZXJhbFwiKSByZXR1cm4gZW1pdFN0cmluZ0xpdGVyYWwoXCJkYXJ0XCIsIGV4cHJlc3Npb24udmFsdWUpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgYXJndW1lbnRzXyA9IGV4cHJlc3Npb24uYXJndW1lbnRzLm1hcCgoYXJndW1lbnQpID0+IGZsYXREYXJ0RXhwcmVzc2lvbih3cml0ZXIsIGFyZ3VtZW50KSlcbiAgICBjb25zdCBjYWxsQXJndW1lbnRTdWZmaXggPSB3cml0ZXIuY2FsbEFyZ3VtZW50U3VmZml4Rm9yKGV4cHJlc3Npb24pXG5cbiAgICBpZiAoY2FsbEFyZ3VtZW50U3VmZml4KSBhcmd1bWVudHNfLnB1c2goY2FsbEFyZ3VtZW50U3VmZml4KVxuXG4gICAgcmV0dXJuIGAke3dyaXRlci5jYWxsTmFtZUZvcihleHByZXNzaW9uKX0oJHthcmd1bWVudHNfLmpvaW4oXCIsIFwiKX0pYFxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IG9wZXJhbmQgPSBmbGF0RGFydEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLm9wZXJhbmQpXG5cbiAgICByZXR1cm4gZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTmVnYXRlXCIgPyBgX3NlbWFudGlmb2xkSW50ZWdlck5lZ2F0ZSgke29wZXJhbmR9KWAgOiBgKCEke29wZXJhbmR9KWBcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgbGVmdCA9IGZsYXREYXJ0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ubGVmdClcbiAgICBjb25zdCByaWdodCA9IGZsYXREYXJ0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmlnaHQpXG5cbiAgICBpZiAoW1wiSW50ZWdlckFkZFwiLCBcIkludGVnZXJTdWJ0cmFjdFwiLCBcIkludGVnZXJNdWx0aXBseVwiXS5pbmNsdWRlcyhleHByZXNzaW9uLm9wZXJhdGlvbikpIHtcbiAgICAgIGNvbnN0IGhlbHBlciA9IGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlckFkZFwiID8gXCJfc2VtYW50aWZvbGRJbnRlZ2VyQWRkXCIgOlxuICAgICAgICBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJTdWJ0cmFjdFwiID8gXCJfc2VtYW50aWZvbGRJbnRlZ2VyU3VidHJhY3RcIiA6IFwiX3NlbWFudGlmb2xkSW50ZWdlck11bHRpcGx5XCJcblxuICAgICAgcmV0dXJuIGAke2hlbHBlcn0oJHtsZWZ0fSwgJHtyaWdodH0pYFxuICAgIH1cbiAgICByZXR1cm4gYCgke2xlZnR9ICR7YmluYXJ5T3BlcmF0aW9uU3BlbGxpbmcoZXhwcmVzc2lvbi5vcGVyYXRpb24sIFwiZGFydFwiKX0gJHtyaWdodH0pYFxuICB9XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbnN1cHBvcnRlZCBEYXJ0IGV4cHJlc3Npb24gcmVhY2hlZCBmb3JtYXR0ZXIgcGxhbm5pbmcgYWZ0ZXIgcHJlZmxpZ2h0LlwiKVxufVxuXG4vKipcbiAqIFByZXNlcnZlcyBhIEtvdGxpbiBpZGVudGlmaWVyIHNwZWxsaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBJZGVudGlmaWVyIHNwZWxsaW5nLlxuICogQHJldHVybnMge3N0cmluZ30gVW5jaGFuZ2VkIHNwZWxsaW5nLlxuICovXG5mdW5jdGlvbiBpZGVudGl0eUlkZW50aWZpZXIobmFtZSkge1xuICByZXR1cm4gbmFtZVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBKYXZhU2NyaXB0LWZhbWlseSBleGVjdXRpb24gY2FuIGNyZWF0ZSBJRUVFLTc1NCBzaWduZWQgemVyby5cbiAqIFNlbWFudGlmb2xkIGludGVnZXJzIGhhdmUgb25lIG1hdGhlbWF0aWNhbCB6ZXJvLCBzbyB0aG9zZSB0YXJnZXRzIGNhbm9uaWNhbGl6ZVxuICogdGhlaXIgb2JzZXJ2YWJsZSBzY2FsYXIgb3V0cHV0IHdpdGhvdXQgY2hhbmdpbmcgdGhlIG9wZXJhdGlvbiB0cmVlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGNhbm9uaWNhbCBvdXRwdXQgcmVuZGVyaW5nIGlzIHJlcXVpcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZXNDYW5vbmljYWxaZXJvUmVuZGVyaW5nKG1vZHVsZSkge1xuICByZXR1cm4gbW9kdWxlLmZ1bmN0aW9ucy5zb21lKChkZWNsYXJhdGlvbikgPT4gYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZGVjbGFyYXRpb24uYm9keSkpIHx8XG4gICAgYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24obW9kdWxlLmVudHJ5UG9pbnQuYm9keSlcbn1cblxuLyoqXG4gKiBDaGVja3Mgb25lIGJsb2NrIGZvciBzaWduLXByb2R1Y2luZyBpbnRlZ2VyIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgYSBuZXN0ZWQgZXhwcmVzc2lvbiBjYW4gcHJvZHVjZSBzaWduZWQgemVybyBpbiBKYXZhU2NyaXB0LlxuICovXG5mdW5jdGlvbiBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihibG9jaykge1xuICByZXR1cm4gYmxvY2suc3RhdGVtZW50cy5zb21lKChzdGF0ZW1lbnQpID0+IHtcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuY29uZGl0aW9uKSB8fFxuICAgICAgICBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuY29uc2VxdWVudCkgfHxcbiAgICAgICAgQm9vbGVhbihzdGF0ZW1lbnQuYWx0ZXJuYXRlICYmIGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5hbHRlcm5hdGUpKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIpIHtcbiAgICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5saXN0KSB8fCBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuYm9keSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQubWFwKSB8fCBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuYm9keSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmNvbmRpdGlvbikgfHwgYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmJvZHkpXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmJvZHkpIHx8IChzdGF0ZW1lbnQuaGFuZGxlcnMgPz8gW10pLnNvbWUoKGhhbmRsZXIpID0+IGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGhhbmRsZXIuY2F0Y2hCb2R5KSkgfHxcbiAgICAgICAgKHN0YXRlbWVudC5maW5hbGx5Qm9keSA/IGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5maW5hbGx5Qm9keSkgOiBmYWxzZSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUmFpc2VTdGF0ZW1lbnRcIikgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmVycm9yLm1lc3NhZ2UpXG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiKSByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIpXG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmV4cHJlc3Npb24pXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gQm9vbGVhbihzdGF0ZW1lbnQuZXhwcmVzc2lvbiAmJiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5leHByZXNzaW9uKSlcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfSlcbn1cblxuLyoqXG4gKiBDaGVja3Mgb25lIGV4cHJlc3Npb24gdHJlZSBmb3Igc2lnbi1wcm9kdWNpbmcgaW50ZWdlciBvcGVyYXRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIC0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoaXMgdHJlZSBjb250YWlucyBpbnRlZ2VyIG5lZ2F0aW9uIG9yIG11bHRpcGxpY2F0aW9uLlxuICovXG5mdW5jdGlvbiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24pIHtcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck5lZ2F0ZVwiIHx8IGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5vcGVyYW5kKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTXVsdGlwbHlcIiB8fCBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24ubGVmdCkgfHxcbiAgICAgIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5yaWdodClcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uLmFyZ3VtZW50cy5zb21lKChhcmd1bWVudCkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihhcmd1bWVudCkpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlJlY29yZENvbnN0cnVjdGlvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24uYXJndW1lbnRzLnNvbWUoKGFyZ3VtZW50KSA9PiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGFyZ3VtZW50KSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWVtYmVyUmVhZFwiKSByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLnJlY2VpdmVyKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdExpdGVyYWxcIikgcmV0dXJuIGV4cHJlc3Npb24uZWxlbWVudHMuc29tZSgoZWxlbWVudCkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihlbGVtZW50KSlcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExpdGVyYWxcIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24uZW50cmllcy5zb21lKChlbnRyeSkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihlbnRyeS5rZXkpIHx8XG4gICAgICBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGVudHJ5LnZhbHVlKSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5jb2xsZWN0aW9uKSB8fCBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24uaW5kZXgpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExvb2t1cEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24uY29sbGVjdGlvbikgfHwgZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLmtleSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ29sbGVjdGlvblNpemVFeHByZXNzaW9uXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24uY29sbGVjdGlvbilcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsU29tZVwiKSByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLnZhbHVlKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxJc1ByZXNlbnRcIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbFVud3JhcFwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5vcGVyYW5kKVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogTWFwcyBvbmUgYWxyZWFkeSB2YWxpZGF0ZWQgc2VtYW50aWMgb3BlcmF0aW9uIHRvIHRhcmdldCBzeW50YXguXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljQmluYXJ5T3BlcmF0aW9ufSBvcGVyYXRpb24gLSBDbG9zZWQgc2VtYW50aWMgb3BlcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRhcmdldCBvcGVyYXRvciBzcGVsbGluZy5cbiAqL1xuZnVuY3Rpb24gYmluYXJ5T3BlcmF0aW9uU3BlbGxpbmcob3BlcmF0aW9uLCBsYW5ndWFnZSkge1xuICBjb25zdCBzeW50YXggPSBiaW5hcnlPcGVyYXRpb25TeW50YXhbb3BlcmF0aW9uXVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcInBocFwiICYmIHN5bnRheC5waHApIHJldHVybiBzeW50YXgucGhwXG4gIGlmIChsYW5ndWFnZSA9PSBcInB5dGhvblwiICYmIHN5bnRheC5weXRob24pIHJldHVybiBzeW50YXgucHl0aG9uXG4gIGlmICgobGFuZ3VhZ2UgPT0gXCJwaHBcIiB8fCBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIikgJiYgc3ludGF4LnN0cmljdCkgcmV0dXJuIHN5bnRheC5zdHJpY3RcblxuICByZXR1cm4gc3ludGF4LmRlZmF1bHRcbn1cbiJdfQ==
|