semantifold 0.13.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- 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/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 +209 -7
- 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/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 +14 -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 +346 -27
- package/docs/adr-bounded-subtyping.md +180 -0
- package/docs/language-support.md +1 -1
- package/package.json +1 -1
- package/src/backends/effects.js +1 -0
- package/src/backends/php.js +56 -2
- package/src/backends/scalars.js +1 -1
- package/src/backends/shared.js +210 -6
- 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/ruby.js +11 -8
- package/src/frontends/types.js +26 -8
- package/src/language-registry.js +13 -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 +377 -26
package/README.md
CHANGED
|
@@ -156,6 +156,7 @@ The execution specs require PHP CLI, Ruby, Python 3, TypeScript, a Java JDK, Kot
|
|
|
156
156
|
- [Multi-file modules and names](docs/multi-file-modules.md)
|
|
157
157
|
- [Standard-library portability design](docs/standard-library-portability.md)
|
|
158
158
|
- [Portable numeric tower ADR](docs/adr-numeric-tower.md)
|
|
159
|
+
- [Bounded subtyping ADR](docs/adr-bounded-subtyping.md)
|
|
159
160
|
- [Standard-library portability implementation plan](docs/plans/2026-09-05-standard-library-portability.md)
|
|
160
161
|
- [Language feature roadmap](https://github.com/kaspernj/semantifold/blob/master/todo/README.md)
|
|
161
162
|
- [Initial toolchain plan](docs/plans/2026-09-02-initial-toolchain.md)
|
|
@@ -269,6 +269,8 @@ function semanticTypeForIdentity(identity) {
|
|
|
269
269
|
declarationId: identity.declarationId, kind: "RecordType" };
|
|
270
270
|
if (identity.kind == "ReferenceType")
|
|
271
271
|
return { declarationId: identity.declarationId, kind: "ReferenceType" };
|
|
272
|
+
if (identity.kind == "InterfaceType")
|
|
273
|
+
return { declarationId: identity.declarationId, kind: "InterfaceType" };
|
|
272
274
|
if (identity.kind == "OwnedResourceType")
|
|
273
275
|
return { kind: "OwnedResourceType", resourceId: identity.resourceId };
|
|
274
276
|
if (identity.kind == "OwnedReferenceType")
|
|
@@ -744,4 +746,4 @@ const javaProviderShims = {
|
|
|
744
746
|
probeRead: "public static java.util.Optional<String> __semantifold_provider_java_probeRead(ProbeResource resource, boolean fail) { return probeRead(resource, fail); }",
|
|
745
747
|
probeTrace: "public static String __semantifold_provider_java_probeTrace() { return probeTrace(); }"
|
|
746
748
|
};
|
|
747
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kcy9lZmZlY3RzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0RCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQTtBQUVsRSxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ25GLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDakMsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsMkJBQTJCLEVBQUUseUJBQXlCO0NBQ3JHLENBQUMsQ0FBQTtBQUNGLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEMsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsZUFBZTtJQUMvSCxhQUFhLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsWUFBWTtDQUN2RSxDQUFDLENBQUE7QUFFRixzR0FBc0c7QUFDdEcsMEdBQTBHO0FBRTFHOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLDJCQUEyQixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxHQUFHLEVBQUU7SUFDeEUsTUFBTSxZQUFZLEdBQUcsTUFBTSxFQUFFLFlBQVksQ0FBQTtJQUV6QyxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMvQixNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFNUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsaUZBQWlGO1lBQy9HLHdFQUF3RSxD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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0ErQ2xCLENBQUE7QUFFRCxNQUFNLFdBQVcsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FzQ25CLENBQUE7QUFFRCxNQUFNLGlCQUFpQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7O0NBZ0J6QixDQUFBO0FBRUQsTUFBTSxpQkFBaUIsR0FBRzs7Ozs7Ozs7Ozs7Ozs7OztDQWdCekIsQ0FBQTtBQUVELE1BQU0sY0FBYyxHQUFHOzs7Ozs7Ozs7Q0FTdEIsQ0FBQTtBQUVELE1BQU0saUJBQWlCLEdBQUc7Ozs7Ozs7OztDQVN6QixDQUFBO0FBRUQsTUFBTSx3QkFBd0IsR0FBRzs7Ozs7Ozs7O0NBU2hDLENBQUE7QUFFRCxxQ0FBcUM7QUFDckMsTUFBTSxpQkFBaUIsR0FBRztJQUN4QixZQUFZLEVBQUUsbUhBQW1IO0lBQ2pJLFVBQVUsRUFBRSxpSUFBaUk7SUFDN0ksV0FBVyxFQUFFLDhJQUE4STtJQUMzSixTQUFTLEVBQUUsNEpBQTRKO0lBQ3ZLLFVBQVUsRUFBRSx3RkFBd0Y7Q0FDckcsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3Vuc3VwcG9ydGVkQ2FwYWJpbGl0eX0gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtpc1Rhc2swMzRSZXNvdXJjZVByb2JlfSBmcm9tIFwiLi4vc2VtYW50aWMvY2FwYWJpbGl0aWVzLmpzXCJcblxuY29uc3QgYWRvcHRlZFRhcmdldHMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDM3QXV0aG9yaXRpZXMgPSBuZXcgU2V0KFtcbiAgXCJzZW1hbnRpZm9sZC5vdXRwdXRcIiwgXCJzZW1hbnRpZm9sZC5yZXNvdXJjZVwiLCBcInNlbWFudGlmb2xkLnNvY2tldC1jbGllbnRcIiwgXCJzZW1hbnRpZm9sZC50ZXh0LXN0cmVhbVwiXG5dKVxuY29uc3QgcHJvdGVjdGVkU3VwcG9ydE5hbWVzID0gbmV3IFNldChbXG4gIFwiUHJvYmVPcGVyYXRpb25GYWlsdXJlXCIsIFwiUHJvYmVBY3F1aXJlRmFpbHVyZVwiLCBcIlByb2JlUmVhZEZhaWx1cmVcIiwgXCJQcm9iZUNsb3NlRmFpbHVyZVwiLCBcIlByb2JlUmVzb3VyY2VDbG9zZWRcIiwgXCJQcm9iZVJlc291cmNlXCIsXG4gIFwicHJvYmVFZmZlY3RcIiwgXCJwcm9iZUFjcXVpcmVcIiwgXCJwcm9iZVJlYWRcIiwgXCJwcm9iZUNsb3NlXCIsIFwicHJvYmVUcmFjZVwiXG5dKVxuXG4vKiogQHR5cGVkZWYge3tleHByZXNzaW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9uLCBwYXRoOiBzdHJpbmd9fSBFeHByZXNzaW9uUGF0aCAqL1xuLyoqIEB0eXBlZGVmIHt7ZGV0YWlsOiBzdHJpbmcsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn19IEV4Y2x1ZGVkRWZmZWN0ICovXG5cbi8qKlxuICogVmFsaWRhdGVzIFRhc2sgMDM0IHRhcmdldCBzdXBwb3J0IGJlZm9yZSBhIFNvdXJjZVdyaXRlciBpcyBhbGxvY2F0ZWQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDYW5kaWRhdGUgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gUmVxdWVzdGVkIHRhcmdldC5cbiAqIEBwYXJhbSB7e3VzZWRPcGVyYXRpb25zPzogcmVhZG9ubHkgc3RyaW5nW119fSBbb3B0aW9uc10gLSBQcm9ncmFtLXdpZGUgdXNlZCBjYW5vbmljYWxcbiAqICAgb3BlcmF0aW9ucyBmb3IgYSBsaW5rZWQgc3RkbGliIHByb3ZpZGVyOyByZXN0cmljdHMgdGhlIHJlc2VydmVkIHN1cHBvcnQgc3VyZmFjZSB0byB0aGVcbiAqICAgb3BlcmF0aW9ucyBhY3R1YWxseSBtYXRlcmlhbGl6ZWQgaW4gdGhlIHByb3ZpZGVyIGFydGlmYWN0LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVmbGlnaHRFZmZlY3RDYXBhYmlsaXRpZXMobW9kdWxlLCBsYW5ndWFnZSwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGNhcGFiaWxpdGllcyA9IG1vZHVsZT8uY2FwYWJpbGl0aWVzXG5cbiAgaWYgKGNhcGFiaWxpdGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgdW5hdXRob3JpemVkID0gZmluZFRhc2swMzROb2RlKG1vZHVsZSlcblxuICAgIGlmICh1bmF1dGhvcml6ZWQpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJNSVNTSU5HX0NBUEFCSUxJVFlfQVVUSE9SSVRZOiBUYXNrIDAzNCBJUiByZXF1aXJlcyBpdHMgY29tcGlsZXIgYXV0aG9yaXR5IGdyYXBoXCIsXG4gICAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9ICovIChSZWZsZWN0LmdldCh1bmF1dGhvcml6ZWQsIFwibG9jYXRpb25cIikgPz8gbW9kdWxlPy5sb2NhdGlvbikpXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmICghQXJyYXkuaXNBcnJheShjYXBhYmlsaXRpZXMpIHx8IGNhcGFiaWxpdGllcy5sZW5ndGggPT0gMCkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgb3IgZW1wdHkgVGFzayAwMzQgY2FwYWJpbGl0eSBncmFwaFwiLCBtb2R1bGU/LmxvY2F0aW9uKVxuICB9XG4gIGlmICghYWRvcHRlZFRhcmdldHMuaGFzKGxhbmd1YWdlKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAzNCBlZmZlY3RmdWwgY2FwYWJpbGl0aWVzIGFuZCBvd25lZCByZXNvdXJjZXNcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IHRhc2swMzcgPSBsYW5ndWFnZSA9PSBcInBocFwiICYmIGNhcGFiaWxpdGllcy5ldmVyeSgoY2FwYWJpbGl0eSkgPT4gdGFzazAzN0F1dGhvcml0aWVzLmhhcyhjYXBhYmlsaXR5LmF1dGhvcml0eUlkKSlcblxuICBpZiAoIWlzVGFzazAzNFJlc291cmNlUHJvYmUoY2FwYWJpbGl0aWVzKSAmJiAhdGFzazAzNykge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJ1bmJvdW5kIFRhc2sgMDM0IGNhcGFiaWxpdHkgYXV0aG9yaXR5XCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBpZiAoIUFycmF5LmlzQXJyYXkobW9kdWxlLmZ1bmN0aW9ucykgfHwgIW1vZHVsZS5lbnRyeVBvaW50IHx8IHR5cGVvZiBtb2R1bGUuZW50cnlQb2ludCAhPSBcIm9iamVjdFwiIHx8XG4gICAgIW1vZHVsZS5lbnRyeVBvaW50LmJvZHkgfHwgIUFycmF5LmlzQXJyYXkobW9kdWxlLmVudHJ5UG9pbnQuYm9keS5zdGF0ZW1lbnRzKSB8fFxuICAgIFttb2R1bGUucmVjb3JkcywgbW9kdWxlLmNsYXNzZXMsIG1vZHVsZS5lcnJvcnNdLnNvbWUoKGRlY2xhcmF0aW9ucykgPT4gZGVjbGFyYXRpb25zICE9PSB1bmRlZmluZWQgJiYgIUFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb25zKSkpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIFRhc2sgMDM0IHNlbWFudGljIG1vZHVsZVwiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgY29uc3QgY29sbGlzaW9uID0gbW9kdWxlTmVlZHNFZmZlY3RTdXBwb3J0KG1vZHVsZSkgPyBmaW5kU3VwcG9ydENvbGxpc2lvbihtb2R1bGUsIGxhbmd1YWdlLCBvcHRpb25zLnVzZWRPcGVyYXRpb25zKSA6IHVuZGVmaW5lZFxuXG4gIGlmIChjb2xsaXNpb24pIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYHByb3RlY3RlZCBUYXNrIDAzNCBzdXBwb3J0IG5hbWUgJyR7Y29sbGlzaW9uLm5hbWV9J2AsIGNvbGxpc2lvbi5sb2NhdGlvbilcbiAgY29uc3QgZXhjbHVkZWQgPSBmaW5kRXhjbHVkZWRFZmZlY3RDb250ZXh0KG1vZHVsZSlcbiAgaWYgKGV4Y2x1ZGVkKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGV4Y2x1ZGVkLmRldGFpbCwgZXhjbHVkZWQubG9jYXRpb24pXG59XG5cbi8qKlxuICogRmluZHMgY29tcGlsZXItYXV0aG9yaXplZCBUYXNrIDAzNCBJUiB0aGF0IGhhcyBiZWVuIGRldGFjaGVkIGZyb20gaXRzIGF1dGhvcml0eSBncmFwaC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgc2VtYW50aWMgZ3JhcGguXG4gKiBAcGFyYW0ge1NldDxvYmplY3Q+fSBbc2Vlbl0gLSBDeWNsZSBwcm90ZWN0aW9uLlxuICogQHJldHVybnMge29iamVjdCB8IHVuZGVmaW5lZH0gRmlyc3QgdW5hdXRob3JpemVkIFRhc2sgMDM0IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGZpbmRUYXNrMDM0Tm9kZSh2YWx1ZSwgc2VlbiA9IG5ldyBTZXQoKSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiIHx8IHNlZW4uaGFzKHZhbHVlKSkgcmV0dXJuIHVuZGVmaW5lZFxuICBzZWVuLmFkZCh2YWx1ZSlcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGNvbnN0IGtpbmQgPSBSZWZsZWN0LmdldCh2YWx1ZSwgXCJraW5kXCIpXG5cbiAgICBpZiAoW1wiRWZmZWN0Q2FsbEV4cHJlc3Npb25cIiwgXCJPd25lZEJvcnJvd0V4cHJlc3Npb25cIiwgXCJPd25lZE1vdmVFeHByZXNzaW9uXCIsIFwiT3duZWRSZWZlcmVuY2VUeXBlXCIsIFwiT3duZWRSZXNvdXJjZVR5cGVcIl0uaW5jbHVkZXMoU3RyaW5nKGtpbmQpKSB8fFxuICAgICAga2luZCA9PSBcIkVycm9yVHlwZVwiICYmIC9eY2FwYWJpbGl0eTpbMC05XStcXC9mYWlsdXJlOlswLTldKyQvdS50ZXN0KFN0cmluZyhSZWZsZWN0LmdldCh2YWx1ZSwgXCJkZWNsYXJhdGlvbklkXCIpKSkpIHJldHVybiB2YWx1ZVxuICB9XG4gIGZvciAoY29uc3QgW2tleSwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgIGlmIChbXCJsb2NhdGlvblwiLCBcInNvdXJjZVByb3ZlbmFuY2VcIl0uaW5jbHVkZXMoa2V5KSkgY29udGludWVcbiAgICBjb25zdCBmb3VuZCA9IGZpbmRUYXNrMDM0Tm9kZShjaGlsZCwgc2VlbilcbiAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZFxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBGaW5kcyBvbmUgdXNlciBkZWNsYXJhdGlvbiB0aGF0IHdvdWxkIGNvbGxpZGUgd2l0aCB0aGUgcHJvdGVjdGVkIHN1cHBvcnQgc3VyZmFjZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFZhbGlkYXRlZCBzZW1hbnRpYyBncmFwaC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7cmVhZG9ubHkgc3RyaW5nW119IFt1c2VkT3BlcmF0aW9uc10gLSBMaW5rZWQgcHJvdmlkZXIgb3BlcmF0aW9uczsgb21pdHRlZCBmb3IgdGhlIGZ1bGwgaW5saW5lZCBzdXJmYWNlLlxuICogQHJldHVybnMge3tuYW1lOiBzdHJpbmcsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gfCB1bmRlZmluZWR9IEZpcnN0IGNvbGxpc2lvbi5cbiAqL1xuZnVuY3Rpb24gZmluZFN1cHBvcnRDb2xsaXNpb24obW9kdWxlLCBsYW5ndWFnZSwgdXNlZE9wZXJhdGlvbnMpIHtcbiAgY29uc3QgcmVzZXJ2ZWQgPSBuZXcgU2V0KClcblxuICBpZiAodXNlZE9wZXJhdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBwcm90ZWN0ZWRTdXBwb3J0TmFtZXMpIHJlc2VydmVkLmFkZChzdXBwb3J0TmFtZUtleShuYW1lLCBsYW5ndWFnZSkpXG4gICAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiKSB7XG4gICAgICByZXNlcnZlZC5hZGQoXCJfX3NlbWFudGlmb2xkVGFzazAzNEZzXCIpXG4gICAgICByZXNlcnZlZC5hZGQoXCJfX3NlbWFudGlmb2xkVGFzazAzNFRyYWNlXCIpXG4gICAgfSBlbHNlIGlmIChsYW5ndWFnZSA9PSBcInBocFwiKSByZXNlcnZlZC5hZGQoXCJfX3NlbWFudGlmb2xkX3Rhc2swMzRfdHJhY2VcIilcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB1c2VkID0gbmV3IFNldCh1c2VkT3BlcmF0aW9ucylcblxuICAgIGZvciAoY29uc3QgbmFtZSBvZiB1c2VkKSByZXNlcnZlZC5hZGQoc3VwcG9ydE5hbWVLZXkobmFtZSwgbGFuZ3VhZ2UpKVxuICAgIGlmICh1c2VkLmhhcyhcInByb2JlRWZmZWN0XCIpKSByZXNlcnZlZC5hZGQoc3VwcG9ydE5hbWVLZXkoXCJQcm9iZU9wZXJhdGlvbkZhaWx1cmVcIiwgbGFuZ3VhZ2UpKVxuICAgIGlmICh1c2VkLmhhcyhcInByb2JlQWNxdWlyZVwiKSkgcmVzZXJ2ZWQuYWRkKHN1cHBvcnROYW1lS2V5KFwiUHJvYmVBY3F1aXJlRmFpbHVyZVwiLCBsYW5ndWFnZSkpXG4gICAgaWYgKHVzZWQuaGFzKFwicHJvYmVSZWFkXCIpKSByZXNlcnZlZC5hZGQoc3VwcG9ydE5hbWVLZXkoXCJQcm9iZVJlYWRGYWlsdXJlXCIsIGxhbmd1YWdlKSlcbiAgICBpZiAodXNlZC5oYXMoXCJwcm9iZUNsb3NlXCIpKSByZXNlcnZlZC5hZGQoc3VwcG9ydE5hbWVLZXkoXCJQcm9iZUNsb3NlRmFpbHVyZVwiLCBsYW5ndWFnZSkpXG4gICAgaWYgKHVzZWQuaGFzKFwicHJvYmVSZWFkXCIpIHx8IHVzZWQuaGFzKFwicHJvYmVDbG9zZVwiKSkgcmVzZXJ2ZWQuYWRkKHN1cHBvcnROYW1lS2V5KFwiUHJvYmVSZXNvdXJjZUNsb3NlZFwiLCBsYW5ndWFnZSkpXG4gICAgaWYgKHVzZWQuaGFzKFwicHJvYmVBY3F1aXJlXCIpIHx8IHVzZWQuaGFzKFwicHJvYmVSZWFkXCIpIHx8IHVzZWQuaGFzKFwicHJvYmVDbG9zZVwiKSkge1xuICAgICAgcmVzZXJ2ZWQuYWRkKHN1cHBvcnROYW1lS2V5KFwiUHJvYmVSZXNvdXJjZVwiLCBsYW5ndWFnZSkpXG4gICAgfVxuICAgIGlmICh1c2VkLnNpemUgPiAwKSB7XG4gICAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIpIHtcbiAgICAgICAgcmVzZXJ2ZWQuYWRkKFwiX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZVwiKVxuICAgICAgICBpZiAodXNlZC5oYXMoXCJwcm9iZUFjcXVpcmVcIikpIHJlc2VydmVkLmFkZChcIl9fc2VtYW50aWZvbGRUYXNrMDM0RnNcIilcbiAgICAgIH0gZWxzZSBpZiAobGFuZ3VhZ2UgPT0gXCJwaHBcIikgcmVzZXJ2ZWQuYWRkKFwiX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlXCIpXG4gICAgfVxuICB9XG4gIGNvbnN0IGRlY2xhcmF0aW9ucyA9IFsuLi5tb2R1bGUucmVjb3JkcyA/PyBbXSwgLi4ubW9kdWxlLmNsYXNzZXMgPz8gW10sIC4uLm1vZHVsZS5lcnJvcnMgPz8gW10sIC4uLm1vZHVsZS5mdW5jdGlvbnNdXG5cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBkZWNsYXJhdGlvbnMpIHtcbiAgICBpZiAoIWRlY2xhcmF0aW9uIHx8IHR5cGVvZiBkZWNsYXJhdGlvbiAhPSBcIm9iamVjdFwiKSBjb250aW51ZVxuICAgIGlmIChyZXNlcnZlZC5oYXMoc3VwcG9ydE5hbWVLZXkoZGVjbGFyYXRpb24ubmFtZSwgbGFuZ3VhZ2UpKSkgcmV0dXJuIHtsb2NhdGlvbjogZGVjbGFyYXRpb24ubG9jYXRpb24sIG5hbWU6IGRlY2xhcmF0aW9uLm5hbWV9XG4gIH1cbiAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwicGhwXCIpIHtcbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBtb2R1bGUuZW50cnlQb2ludC5ib2R5LnN0YXRlbWVudHMpIHtcbiAgICAgIGlmICghc3RhdGVtZW50IHx8IHR5cGVvZiBzdGF0ZW1lbnQgIT0gXCJvYmplY3RcIikgY29udGludWVcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiAmJiByZXNlcnZlZC5oYXMoc3VwcG9ydE5hbWVLZXkoc3RhdGVtZW50Lm5hbWUsIGxhbmd1YWdlKSkpIHtcbiAgICAgICAgcmV0dXJuIHtsb2NhdGlvbjogc3RhdGVtZW50LmxvY2F0aW9uLCBuYW1lOiBzdGF0ZW1lbnQubmFtZX1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEFwcGxpZXMgdGFyZ2V0IG5hbWVzcGFjZSBjYXNpbmcgdG8gYSBwcm90ZWN0ZWQgc3VwcG9ydCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBTb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IENvbXBhcmFibGUgbmFtZS5cbiAqL1xuZnVuY3Rpb24gc3VwcG9ydE5hbWVLZXkobmFtZSwgbGFuZ3VhZ2UpIHtcbiAgcmV0dXJuIGxhbmd1YWdlID09IFwicGhwXCIgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOiBuYW1lXG59XG5cbi8qKlxuICogRW1pdHMgZml4ZWQgdGFyZ2V0LXByaXZhdGUgVGFzayAwMzQgY29uZm9ybWFuY2Ugc3VwcG9ydC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBEZXN0aW5hdGlvbiB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBBdXRob3JpemVkIG1vZHVsZS5cbiAqIEBwYXJhbSB7XCJwaHBcIiB8IFwicnVieVwiIHwgXCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIiB8IFwiamF2YVwifSBsYW5ndWFnZSAtIEFkb3B0ZWQgdGFyZ2V0LlxuICogQHBhcmFtIHtcInRvcFwiIHwgXCJtZW1iZXJzXCJ9IFtwbGFjZW1lbnRdIC0gSmF2YSBzdXBwb3J0IHBsYWNlbWVudC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdEVmZmVjdFN1cHBvcnQod3JpdGVyLCBtb2R1bGUsIGxhbmd1YWdlLCBwbGFjZW1lbnQgPSBcInRvcFwiKSB7XG4gIGNvbnN0IGxpbmtlZCA9IHdyaXRlci5zdGRsaWJQcm92aWRlckVudHJpZXMgIT09IHVuZGVmaW5lZFxuXG4gIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIiAmJiBsaW5rZWQpIHtcbiAgICBpZiAocGxhY2VtZW50ICE9IFwibWVtYmVyc1wiIHx8IHdyaXRlci5zdGRsaWJQcm92aWRlclNoaW1zID09PSB1bmRlZmluZWQpIHJldHVyblxuICB9IGVsc2UgaWYgKGxpbmtlZCB8fCAhbW9kdWxlLmNhcGFiaWxpdGllcyB8fCAhbW9kdWxlTmVlZHNFZmZlY3RTdXBwb3J0KG1vZHVsZSkpIHtcbiAgICByZXR1cm5cbiAgfVxuICBjb25zdCBjb250ZW50ID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IHBocFN1cHBvcnQgOiBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IHJ1YnlTdXBwb3J0IDogbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgPyBqYXZhc2NyaXB0U3VwcG9ydCA6XG4gICAgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyB0eXBlc2NyaXB0U3VwcG9ydCA6XG4gICAgd3JpdGVyLnN0ZGxpYlByb3ZpZGVyU2hpbXMgIT09IHVuZGVmaW5lZCA/IGphdmFQcm9ncmFtTmVzdGVkU3VwcG9ydCArIGphdmFNZW1iZXJTdXBwb3J0IDpcbiAgICBwbGFjZW1lbnQgPT0gXCJ0b3BcIiA/IGphdmFUb3BTdXBwb3J0IDogamF2YU1lbWJlclN1cHBvcnRcblxuICB3cml0ZXIuc3ludGhldGljKGNvbnRlbnQsIFwic2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0XCIsIFttb2R1bGVdKVxufVxuXG4vKipcbiAqIEVtaXRzIHRoZSBwdWJsaWMgc3RhdGljIHByb3ZpZGVyIHNoaW1zIGZvciB0aGUgcHJvZ3JhbS13aWRlIHVzZWQgb3BlcmF0aW9ucyBvbiB0aGUgSmF2YSBvd25lciBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gRGVzdGluYXRpb24gd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gT3duZXIgbW9kdWxlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0RWZmZWN0UHJvdmlkZXJFbnRyaWVzKHdyaXRlciwgbW9kdWxlKSB7XG4gIGNvbnN0IG9wZXJhdGlvbnMgPSB3cml0ZXIuc3RkbGliUHJvdmlkZXJTaGltcyA/PyBbXVxuXG4gIGlmIChvcGVyYXRpb25zLmxlbmd0aCA9PSAwKSByZXR1cm5cbiAgY29uc3QgbGluZXMgPSBvcGVyYXRpb25zLm1hcCgob3BlcmF0aW9uKSA9PiBgICAke2phdmFQcm92aWRlclNoaW1zW29wZXJhdGlvbl19YClcblxuICB3cml0ZXIuc3ludGhldGljKGAke2xpbmVzLmpvaW4oXCJcXG5cIil9XFxuXFxuYCwgXCJzZW1hbnRpZm9sZC1zdGRsaWItcHJvdmlkZXItZW50cmllc1wiLCBbbW9kdWxlXSlcbn1cblxuLyoqXG4gKiBSZWNvZ25pemVzIG9ubHkgdGhlIGJ5dGUtZXhhY3QgcHJvdGVjdGVkIHN1cHBvcnQgZW1pdHRlZCBieSB0aGlzIGJhY2tlbmQuXG4gKiBGcm9udGVuZHMgdXNlIHRoaXMgaW4gYWRkaXRpb24gdG8gcGFyc2VyLXNoYXBlIGNoZWNrcyBkdXJpbmcgZ2VuZXJhdGVkLXNvdXJjZSByZXBhcnNlLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIGNhbmRpZGF0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge1wicGhwXCIgfCBcInJ1YnlcIiB8IFwiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCIgfCBcImphdmFcIn0gbGFuZ3VhZ2UgLSBBZG9wdGVkIHRhcmdldC5cbiAqIEBwYXJhbSB7XCJ0b3BcIiB8IFwibWVtYmVyc1wifSBbcGxhY2VtZW50XSAtIEphdmEgc3VwcG9ydCBwbGFjZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgZXhhY3QgcHJvdGVjdGVkIHNlZ21lbnQgaXMgcHJlc2VudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0V4YWN0RWZmZWN0U3VwcG9ydChzb3VyY2UsIGxhbmd1YWdlLCBwbGFjZW1lbnQgPSBcInRvcFwiKSB7XG4gIGNvbnN0IGNvbnRlbnQgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gcGhwU3VwcG9ydCA6IGxhbmd1YWdlID09IFwicnVieVwiID8gcnVieVN1cHBvcnQgOiBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiA/IGphdmFzY3JpcHRTdXBwb3J0IDpcbiAgICBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiA/IHR5cGVzY3JpcHRTdXBwb3J0IDogcGxhY2VtZW50ID09IFwidG9wXCIgPyBqYXZhVG9wU3VwcG9ydCA6IGphdmFNZW1iZXJTdXBwb3J0XG5cbiAgcmV0dXJuIHNvdXJjZS5pbmNsdWRlcyhjb250ZW50KVxufVxuXG4vKipcbiAqIE1hdGVyaWFsaXplcyBuZXN0ZWQgZWZmZWN0IHNpdGVzIGJlZm9yZSB0aGVpciBlbmNsb3NpbmcgZWFnZXIgZXhwcmVzc2lvbi5cbiAqIFRoZSBpbnN0YWxsZWQgcmVwbGFjZW1lbnRzIHJlbWFpbiBhY3RpdmUgdW50aWwgdGhlIG5leHQgc3RhdGVtZW50IGJlZ2lucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBEZXN0aW5hdGlvbiB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudH0gc3RhdGVtZW50IC0gQ3VycmVudCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5kZW50IC0gQ3VycmVudCB0YXJnZXQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEV4YWN0IHN0YXRlbWVudCBwYXRoLlxuICogQHBhcmFtIHtcInBocFwiIHwgXCJydWJ5XCIgfCBcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwiIHwgXCJqYXZhXCJ9IGxhbmd1YWdlIC0gQWRvcHRlZCB0YXJnZXQuXG4gKiBAcGFyYW0geyhleHByZXNzaW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9uLCBwYXRoOiBzdHJpbmcpID0+IHZvaWR9IGVtaXQgLSBUYXJnZXQgZXhwcmVzc2lvbiBlbWl0dGVyLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0RWZmZWN0UHJlZml4ZXMod3JpdGVyLCBzdGF0ZW1lbnQsIGluZGVudCwgcGF0aCwgbGFuZ3VhZ2UsIGVtaXQpIHtcbiAgLyoqIEB0eXBlIHtFeHByZXNzaW9uUGF0aFtdfSAqL1xuICBjb25zdCBwbGFubmVkID0gW11cblxuICBmb3IgKGNvbnN0IHJvb3Qgb2Ygc3RhdGVtZW50RXhwcmVzc2lvblJvb3RzKHN0YXRlbWVudCwgcGF0aCkpIGNvbGxlY3ROZXN0ZWRFZmZlY3RzKHJvb3QuZXhwcmVzc2lvbiwgcm9vdC5wYXRoLCByb290LmV4cHJlc3Npb24sIHBsYW5uZWQpXG4gIHdyaXRlci5wbGFuRWZmZWN0UmVwbGFjZW1lbnRzKHBsYW5uZWQubWFwKCh7ZXhwcmVzc2lvbn0pID0+IGV4cHJlc3Npb24pKVxuICBmb3IgKGNvbnN0IHtleHByZXNzaW9uLCBwYXRoOiBleHByZXNzaW9uUGF0aH0gb2YgcGxhbm5lZCkge1xuICAgIGNvbnN0IG5hbWUgPSB3cml0ZXIuZWZmZWN0VGVtcG9yYXJ5TmFtZShleHByZXNzaW9uKVxuICAgIGNvbnN0IHR5cGUgPSBlZmZlY3RFeHByZXNzaW9uVHlwZSh3cml0ZXIsIGV4cHJlc3Npb24pXG4gICAgY29uc3QgdHlwZU5hbWUgPSBlbWl0dGVkVHlwZU5hbWUod3JpdGVyLCB0eXBlLCBsYW5ndWFnZSlcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGxhbmd1YWdlID09IFwicGhwXCJcbiAgICAgID8gYC8qKlxcbiR7aW5kZW50fSAqIEB2YXIgJHt0eXBlTmFtZX0gJCR7bmFtZX1cXG4ke2luZGVudH0gKiBAc2VtYW50aWZvbGQtaW1tdXRhYmxlXFxuJHtpbmRlbnR9ICovXFxuJHtpbmRlbnR9JCR7bmFtZX0gPSBgXG4gICAgICA6IGxhbmd1YWdlID09IFwicnVieVwiXG4gICAgICAgID8gYCMgQHR5cGUgWyR7dHlwZU5hbWV9XVxcbiR7aW5kZW50fSMgQHNlbWFudGlmb2xkLWltbXV0YWJsZVxcbiR7aW5kZW50fSR7bmFtZX0gPSBgXG4gICAgICAgIDogbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgPyBgLyoqIEB0eXBlIHske3R5cGVOYW1lfX0gKi9cXG4ke2luZGVudH1jb25zdCAke25hbWV9ID0gYFxuICAgICAgICAgIDogbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyBgY29uc3QgJHtuYW1lfTogJHt0eXBlTmFtZX0gPSBgIDogYGZpbmFsICR7dHlwZU5hbWV9ICR7bmFtZX0gPSBgXG5cbiAgICB3cml0ZXIuc3ludGhldGljKGAke2luZGVudH0ke2RlY2xhcmF0aW9ufWAsIFwiZXhhY3RseS1vbmNlIGVmZmVjdCB0ZW1wb3JhcnlcIiwgW2V4cHJlc3Npb25dLCBbZXhwcmVzc2lvblBhdGhdKVxuICAgIHdyaXRlci5lbWl0RWZmZWN0RGVmaW5pdGlvbihleHByZXNzaW9uLCAoKSA9PiBlbWl0KGV4cHJlc3Npb24sIGV4cHJlc3Npb25QYXRoKSlcbiAgICB3cml0ZXIuc3ludGhldGljKGxhbmd1YWdlID09IFwicnVieVwiID8gXCJcXG5cIiA6IFwiO1xcblwiLCBcImV4YWN0bHktb25jZSBlZmZlY3QgdGVtcG9yYXJ5IHRlcm1pbmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbZXhwcmVzc2lvblBhdGhdKVxuICB9XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIHJlc3VsdCB0eXBlIG5lZWRlZCBmb3IgYW4gZWZmZWN0IHRlbXBvcmFyeS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBBY3RpdmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIC0gRWZmZWN0ZnVsIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUgfCB1bmRlZmluZWR9IFJlc3VsdCB0eXBlLlxuICovXG5mdW5jdGlvbiBlZmZlY3RFeHByZXNzaW9uVHlwZSh3cml0ZXIsIGV4cHJlc3Npb24pIHtcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkVmZmVjdENhbGxFeHByZXNzaW9uXCIpIHJldHVybiB3cml0ZXIuZWZmZWN0T3BlcmF0aW9uRm9ySWQoZXhwcmVzc2lvbi5vcGVyYXRpb24pLnJldHVyblR5cGVcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1ldGhvZENhbGxFeHByZXNzaW9uXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uLnJlc29sdXRpb24gPyBzZW1hbnRpY1R5cGVGb3JJZGVudGl0eShleHByZXNzaW9uLnJlc29sdXRpb24ucmV0dXJuVHlwZSkgOiB1bmRlZmluZWRcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogUmVoeWRyYXRlcyBhIHJlc29sdmVkIGNhbGwgcmVzdWx0IGZvciB0YXJnZXQtbG9jYWwgdGVtcG9yYXJ5IHNwZWxsaW5nLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvblJldHVyblR5cGVJZGVudGl0eX0gaWRlbnRpdHkgLSBFeGFjdCByZXNvbHZlZCByZXN1bHQgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IERldGFjaGVkIHNlbWFudGljIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIHNlbWFudGljVHlwZUZvcklkZW50aXR5KGlkZW50aXR5KSB7XG4gIGlmICh0eXBlb2YgaWRlbnRpdHkgPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7a2luZDogXCJUeXBlUmVmZXJlbmNlXCIsIG5hbWU6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25SZXR1cm5UeXBlTmFtZX0gKi8gKGlkZW50aXR5KX1cbiAgfVxuICBpZiAoaWRlbnRpdHkua2luZCA9PSBcIkxpc3RUeXBlXCIpIHJldHVybiB7ZWxlbWVudFR5cGU6IHNlbWFudGljVHlwZUZvclZhbHVlSWRlbnRpdHkoaWRlbnRpdHkuZWxlbWVudFR5cGUpLCBraW5kOiBcIkxpc3RUeXBlXCJ9XG4gIGlmIChpZGVudGl0eS5raW5kID09IFwiTWFwVHlwZVwiKSByZXR1cm4ge2tleVR5cGU6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVJlZmVyZW5jZX0gKi8gKFxuICAgIHNlbWFudGljVHlwZUZvclZhbHVlSWRlbnRpdHkoaWRlbnRpdHkua2V5VHlwZSkpLCBraW5kOiBcIk1hcFR5cGVcIixcbiAgICB2YWx1ZVR5cGU6IHNlbWFudGljVHlwZUZvclZhbHVlSWRlbnRpdHkoaWRlbnRpdHkudmFsdWVUeXBlKX1cbiAgaWYgKGlkZW50aXR5LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiKSByZXR1cm4ge2tleVR5cGU6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVJlZmVyZW5jZX0gKi8gKFxuICAgIHNlbWFudGljVHlwZUZvclZhbHVlSWRlbnRpdHkoaWRlbnRpdHkua2V5VHlwZSkpLCBraW5kOiBcIk9yZGVyZWRNYXBUeXBlXCIsXG4gICAgb3JkZXI6IFwiaW5zZXJ0aW9uXCIsIHZhbHVlVHlwZTogc2VtYW50aWNUeXBlRm9yVmFsdWVJZGVudGl0eShpZGVudGl0eS52YWx1ZVR5cGUpfVxuICBpZiAoaWRlbnRpdHkua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSByZXR1cm4ge2tpbmQ6IFwiT3B0aW9uYWxUeXBlXCIsIHZhbHVlVHlwZTogc2VtYW50aWNUeXBlRm9yVmFsdWVJZGVudGl0eShpZGVudGl0eS52YWx1ZVR5cGUpfVxuICBpZiAoaWRlbnRpdHkua2luZCA9PSBcIlJlY29yZFR5cGVcIikgcmV0dXJuIHthcmd1bWVudHM6IGlkZW50aXR5LmFyZ3VtZW50cz8ubWFwKHNlbWFudGljVHlwZUZvclZhbHVlSWRlbnRpdHkpLFxuICAgIGRlY2xhcmF0aW9uSWQ6IGlkZW50aXR5LmRlY2xhcmF0aW9uSWQsIGtpbmQ6IFwiUmVjb3JkVHlwZVwifVxuICBpZiAoaWRlbnRpdHkua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIikgcmV0dXJuIHtkZWNsYXJhdGlvbklkOiBpZGVudGl0eS5kZWNsYXJhdGlvbklkLCBraW5kOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgaWYgKGlkZW50aXR5LmtpbmQgPT0gXCJPd25lZFJlc291cmNlVHlwZVwiKSByZXR1cm4ge2tpbmQ6IFwiT3duZWRSZXNvdXJjZVR5cGVcIiwgcmVzb3VyY2VJZDogaWRlbnRpdHkucmVzb3VyY2VJZH1cbiAgaWYgKGlkZW50aXR5LmtpbmQgPT0gXCJPd25lZFJlZmVyZW5jZVR5cGVcIikgcmV0dXJuIHtkZWNsYXJhdGlvbklkOiBpZGVudGl0eS5kZWNsYXJhdGlvbklkLCBraW5kOiBcIk93bmVkUmVmZXJlbmNlVHlwZVwifVxuICByZXR1cm4ge2tpbmQ6IFwiVHlwZVZhcmlhYmxlUmVmZXJlbmNlXCIsIGxvY2F0aW9uOiAvKiogQHR5cGUge25ldmVyfSAqLyAodW5kZWZpbmVkKSwgcGFyYW1ldGVySWQ6IGlkZW50aXR5LnBhcmFtZXRlcklkfVxufVxuXG4vKipcbiAqIFJlaHlkcmF0ZXMgb25lIG5vbi12b2lkIHJlc29sdmVkIHR5cGUgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVHlwZUlkZW50aXR5fSBpZGVudGl0eSAtIEV4YWN0IHR5cGUgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IERldGFjaGVkIHNlbWFudGljIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIHNlbWFudGljVHlwZUZvclZhbHVlSWRlbnRpdHkoaWRlbnRpdHkpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9ICovIChzZW1hbnRpY1R5cGVGb3JJZGVudGl0eShpZGVudGl0eSkpXG59XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3Vic2V0IG9mIHNlbWFudGljIHR5cGVzIGFkbWl0dGVkIGZvciBzeW50aGV0aWMgdGVtcG9yYXJpZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gQWN0aXZlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUgfCB1bmRlZmluZWR9IHR5cGUgLSBTZW1hbnRpYyB0eXBlLlxuICogQHBhcmFtIHtcInBocFwiIHwgXCJydWJ5XCIgfCBcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwiIHwgXCJqYXZhXCJ9IGxhbmd1YWdlIC0gVGFyZ2V0LlxuICogQHBhcmFtIHtib29sZWFufSBbbmVzdGVkXSAtIFdoZXRoZXIgSmF2YSByZXF1aXJlcyBhIGJveGVkIHNjYWxhci5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRhcmdldCB0eXBlIHNwZWxsaW5nLlxuICovXG5mdW5jdGlvbiBlbWl0dGVkVHlwZU5hbWUod3JpdGVyLCB0eXBlLCBsYW5ndWFnZSwgbmVzdGVkID0gZmFsc2UpIHtcbiAgaWYgKCF0eXBlIHx8IHR5cGUua2luZCA9PSBcIlR5cGVSZWZlcmVuY2VcIiAmJiB0eXBlLm5hbWUgPT0gXCJ2b2lkXCIpIHJldHVybiBsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiT2JqZWN0XCIgOiBcInVua25vd25cIlxuICBpZiAodHlwZS5raW5kID09IFwiVHlwZVJlZmVyZW5jZVwiKSB7XG4gICAgaWYgKGxhbmd1YWdlID09IFwicGhwXCIpIHJldHVybiB0eXBlLm5hbWUgPT0gXCJpbnRlZ2VyXCIgPyBcImludFwiIDogdHlwZS5uYW1lID09IFwiYm9vbGVhblwiID8gXCJib29sXCIgOiBcInN0cmluZ1wiXG4gICAgaWYgKGxhbmd1YWdlID09IFwicnVieVwiKSByZXR1cm4gdHlwZS5uYW1lID09IFwiaW50ZWdlclwiID8gXCJJbnRlZ2VyXCIgOiB0eXBlLm5hbWUgPT0gXCJib29sZWFuXCIgPyBcIkJvb2xlYW5cIiA6IFwiU3RyaW5nXCJcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIpIHJldHVybiB0eXBlLm5hbWUgPT0gXCJpbnRlZ2VyXCIgPyBuZXN0ZWQgPyBcIkludGVnZXJcIiA6IFwiaW50XCIgOlxuICAgICAgdHlwZS5uYW1lID09IFwiYm9vbGVhblwiID8gbmVzdGVkID8gXCJCb29sZWFuXCIgOiBcImJvb2xlYW5cIiA6IFwiU3RyaW5nXCJcbiAgICByZXR1cm4gdHlwZS5uYW1lID09IFwiaW50ZWdlclwiID8gXCJudW1iZXJcIiA6IHR5cGUubmFtZVxuICB9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJPd25lZFJlc291cmNlVHlwZVwiKSByZXR1cm4gd3JpdGVyLnJlc291cmNlRm9ySWQodHlwZS5yZXNvdXJjZUlkKS5uYW1lXG4gIGlmICh0eXBlLmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIgfHwgdHlwZS5raW5kID09IFwiT3duZWRSZWZlcmVuY2VUeXBlXCIpIHJldHVybiB3cml0ZXIuY2xhc3NOYW1lRm9ySWQodHlwZS5kZWNsYXJhdGlvbklkKVxuICBpZiAodHlwZS5raW5kID09IFwiVHlwZVZhcmlhYmxlUmVmZXJlbmNlXCIpIHJldHVybiB3cml0ZXIudHlwZVBhcmFtZXRlckZvcklkKHR5cGUucGFyYW1ldGVySWQpLm5hbWVcbiAgaWYgKHR5cGUua2luZCA9PSBcIlJlY29yZFR5cGVcIikge1xuICAgIGNvbnN0IG5hbWUgPSB3cml0ZXIucmVjb3JkTmFtZUZvcklkKHR5cGUuZGVjbGFyYXRpb25JZClcbiAgICBjb25zdCBhcmd1bWVudHNfID0gdHlwZS5hcmd1bWVudHM/Lm1hcCgoYXJndW1lbnQpID0+IGVtaXR0ZWRUeXBlTmFtZSh3cml0ZXIsIGFyZ3VtZW50LCBsYW5ndWFnZSwgdHJ1ZSkpID8/IFtdXG5cbiAgICByZXR1cm4gYXJndW1lbnRzXy5sZW5ndGggPT0gMCA/IG5hbWUgOiBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IGAke25hbWV9WyR7YXJndW1lbnRzXy5qb2luKFwiLFwiKX1dYCA6IGAke25hbWV9PCR7YXJndW1lbnRzXy5qb2luKFwiLFwiKX0+YFxuICB9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgIGNvbnN0IHZhbHVlID0gZW1pdHRlZFR5cGVOYW1lKHdyaXRlciwgdHlwZS52YWx1ZVR5cGUsIGxhbmd1YWdlLCB0cnVlKVxuICAgIHJldHVybiBsYW5ndWFnZSA9PSBcInBocFwiID8gYD8ke3ZhbHVlfWAgOiBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IGAke3ZhbHVlfT9gIDpcbiAgICAgIGxhbmd1YWdlID09IFwiamF2YVwiID8gYGphdmEudXRpbC5PcHRpb25hbDwke3ZhbHVlfT5gIDogYCR7dmFsdWV9IHwgbnVsbGBcbiAgfVxuICBpZiAodHlwZS5raW5kID09IFwiTGlzdFR5cGVcIikge1xuICAgIGNvbnN0IHZhbHVlID0gZW1pdHRlZFR5cGVOYW1lKHdyaXRlciwgdHlwZS5lbGVtZW50VHlwZSwgbGFuZ3VhZ2UsIHRydWUpXG4gICAgcmV0dXJuIGxhbmd1YWdlID09IFwicGhwXCIgPyBgbGlzdDwke3ZhbHVlfT5gIDogbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBgQXJyYXk8JHt2YWx1ZX0+YCA6XG4gICAgICBsYW5ndWFnZSA9PSBcImphdmFcIiA/IGBqYXZhLnV0aWwuTGlzdDwke3ZhbHVlfT5gIDogYHJlYWRvbmx5ICR7dmFsdWV9W11gXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIk1hcFR5cGVcIiB8fCB0eXBlLmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiKSB7XG4gICAgY29uc3Qga2V5ID0gZW1pdHRlZFR5cGVOYW1lKHdyaXRlciwgdHlwZS5rZXlUeXBlLCBsYW5ndWFnZSwgdHJ1ZSlcbiAgICBjb25zdCB2YWx1ZSA9IGVtaXR0ZWRUeXBlTmFtZSh3cml0ZXIsIHR5cGUudmFsdWVUeXBlLCBsYW5ndWFnZSwgdHJ1ZSlcblxuICAgIGlmIChsYW5ndWFnZSA9PSBcInBocFwiKSByZXR1cm4gYGFycmF5PCR7a2V5fSwke3ZhbHVlfT5gXG4gICAgaWYgKGxhbmd1YWdlID09IFwicnVieVwiKSByZXR1cm4gYEhhc2hbJHtrZXl9LCR7dmFsdWV9XWBcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIpIHJldHVybiBgJHt0eXBlLmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiID8gXCJqYXZhLnV0aWwuU2VxdWVuY2VkTWFwXCIgOiBcImphdmEudXRpbC5NYXBcIn08JHtrZXl9LCR7dmFsdWV9PmBcbiAgICByZXR1cm4gYFJlYWRvbmx5TWFwPCR7a2V5fSwgJHt2YWx1ZX0+YFxuICB9XG4gIHJldHVybiBsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiT2JqZWN0XCIgOiBcInVua25vd25cIlxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4cHJlc3Npb24gcm9vdHMgZXZhbHVhdGVkIGJ5IG9uZSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudH0gc3RhdGVtZW50IC0gU3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBTdGFibGUgc3RhdGVtZW50IHBhdGguXG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvblBhdGhbXX0gRXhwcmVzc2lvbiByb290cy5cbiAqL1xuZnVuY3Rpb24gc3RhdGVtZW50RXhwcmVzc2lvblJvb3RzKHN0YXRlbWVudCwgcGF0aCkge1xuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHJldHVybiBbe2V4cHJlc3Npb246IHN0YXRlbWVudC5pbml0aWFsaXplciwgcGF0aDogYCR7cGF0aH0vaW5pdGlhbGl6ZXJgfV1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIikge1xuICAgIHJldHVybiBbe2V4cHJlc3Npb246IHN0YXRlbWVudC5leHByZXNzaW9uLCBwYXRoOiBgJHtwYXRofS9leHByZXNzaW9uYH1dXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHJldHVybiBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA/IFt7ZXhwcmVzc2lvbjogc3RhdGVtZW50LmV4cHJlc3Npb24sIHBhdGg6IGAke3BhdGh9L2V4cHJlc3Npb25gfV0gOiBbXVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJQcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudFwiKSByZXR1cm4gW3tleHByZXNzaW9uOiBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgcGF0aDogYCR7cGF0aH0vZXhwcmVzc2lvbmB9XVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIikgcmV0dXJuIFt7ZXhwcmVzc2lvbjogc3RhdGVtZW50LmNvbmRpdGlvbiwgcGF0aDogYCR7cGF0aH0vY29uZGl0aW9uYH1dXG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIikgcmV0dXJuIFt7ZXhwcmVzc2lvbjogc3RhdGVtZW50Lmxpc3QsIHBhdGg6IGAke3BhdGh9L2xpc3RgfV1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSByZXR1cm4gW3tleHByZXNzaW9uOiBzdGF0ZW1lbnQubWFwLCBwYXRoOiBgJHtwYXRofS9tYXBgfV1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUmFpc2VTdGF0ZW1lbnRcIikgcmV0dXJuIFt7ZXhwcmVzc2lvbjogc3RhdGVtZW50LmVycm9yLm1lc3NhZ2UsIHBhdGg6IGAke3BhdGh9L2Vycm9yL21lc3NhZ2VgfV1cbiAgcmV0dXJuIFtdXG59XG5cbi8qKlxuICogQ29sbGVjdHMgbmVzdGVkIGVmZmVjdCBzaXRlcyBpbiBwb3N0b3JkZXIgc28gY2hpbGRyZW4gYXJlIG1hdGVyaWFsaXplZCBmaXJzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIEN1cnJlbnQgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gQ3VycmVudCBvY2N1cnJlbmNlIHBhdGguXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IHJvb3QgLSBTdGF0ZW1lbnQgZXhwcmVzc2lvbiByb290LlxuICogQHBhcmFtIHtFeHByZXNzaW9uUGF0aFtdfSBvdXRwdXQgLSBPcmRlcmVkIHBsYW4gcmVjZWl2aW5nIG5lc3RlZCBzaXRlcy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBjb2xsZWN0TmVzdGVkRWZmZWN0cyhleHByZXNzaW9uLCBwYXRoLCByb290LCBvdXRwdXQpIHtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBleHByZXNzaW9uQ2hpbGRyZW4oZXhwcmVzc2lvbiwgcGF0aCkpIGNvbGxlY3ROZXN0ZWRFZmZlY3RzKGNoaWxkLmV4cHJlc3Npb24sIGNoaWxkLnBhdGgsIHJvb3QsIG91dHB1dClcbiAgaWYgKGV4cHJlc3Npb24gIT09IHJvb3QgJiYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkVmZmVjdENhbGxFeHByZXNzaW9uXCIgfHwgdHlwZW9mIFJlZmxlY3QuZ2V0KGV4cHJlc3Npb24sIFwiZWZmZWN0U2l0ZUlkXCIpID09IFwic3RyaW5nXCIpKSB7XG4gICAgb3V0cHV0LnB1c2goe2V4cHJlc3Npb24sIHBhdGh9KVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBwYXRoLWJlYXJpbmcgZXhwcmVzc2lvbiBjaGlsZHJlbiBpbiBldmFsdWF0aW9uIG9yZGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIC0gUGFyZW50IGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFBhcmVudCBwYXRoLlxuICogQHJldHVybnMge0V4cHJlc3Npb25QYXRoW119IENoaWxkcmVuLlxuICovXG5mdW5jdGlvbiBleHByZXNzaW9uQ2hpbGRyZW4oZXhwcmVzc2lvbiwgcGF0aCkge1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJFZmZlY3RDYWxsRXhwcmVzc2lvblwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIlJlZmVyZW5jZUNvbnN0cnVjdGlvblwiIHx8XG4gICAgZXhwcmVzc2lvbi5raW5kID09IFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpIHJldHVybiBleHByZXNzaW9uLmFyZ3VtZW50cy5tYXAoKGNoaWxkLCBpbmRleCkgPT4gKHtleHByZXNzaW9uOiBjaGlsZCwgcGF0aDogYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YH0pKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWV0aG9kQ2FsbEV4cHJlc3Npb25cIikgcmV0dXJuIFtcbiAgICB7ZXhwcmVzc2lvbjogZXhwcmVzc2lvbi5yZWNlaXZlciwgcGF0aDogYCR7cGF0aH0vcmVjZWl2ZXJgfSxcbiAgICAuLi5leHByZXNzaW9uLmFyZ3VtZW50cy5tYXAoKGNoaWxkLCBpbmRleCkgPT4gKHtleHByZXNzaW9uOiBjaGlsZCwgcGF0aDogYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YH0pKVxuICBdXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPd25lZE1vdmVFeHByZXNzaW9uXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiT3duZWRCb3Jyb3dFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gW3tleHByZXNzaW9uOiBleHByZXNzaW9uLmV4cHJlc3Npb24sIHBhdGg6IGAke3BhdGh9L2V4cHJlc3Npb25gfV1cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSByZXR1cm4gW1xuICAgIHtleHByZXNzaW9uOiBleHByZXNzaW9uLmxlZnQsIHBhdGg6IGAke3BhdGh9L2xlZnRgfSwge2V4cHJlc3Npb246IGV4cHJlc3Npb24ucmlnaHQsIHBhdGg6IGAke3BhdGh9L3JpZ2h0YH1cbiAgXVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHJldHVybiBbe2V4cHJlc3Npb246IGV4cHJlc3Npb24ub3BlcmFuZCwgcGF0aDogYCR7cGF0aH0vb3BlcmFuZGB9XVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxTb21lXCIpIHJldHVybiBbe2V4cHJlc3Npb246IGV4cHJlc3Npb24udmFsdWUsIHBhdGg6IGAke3BhdGh9L3ZhbHVlYH1dXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbElzUHJlc2VudFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsVW53cmFwXCIpIHtcbiAgICByZXR1cm4gW3tleHByZXNzaW9uOiBleHByZXNzaW9uLm9wZXJhbmQsIHBhdGg6IGAke3BhdGh9L29wZXJhbmRgfV1cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdExpdGVyYWxcIikgcmV0dXJuIGV4cHJlc3Npb24uZWxlbWVudHMubWFwKChjaGlsZCwgaW5kZXgpID0+ICh7ZXhwcmVzc2lvbjogY2hpbGQsIHBhdGg6IGAke3BhdGh9L2VsZW1lbnRzLyR7aW5kZXh9YH0pKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTGl0ZXJhbFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpIHJldHVybiBleHByZXNzaW9uLmVudHJpZXMuZmxhdE1hcCgoZW50cnksIGluZGV4KSA9PiBbXG4gICAge2V4cHJlc3Npb246IGVudHJ5LmtleSwgcGF0aDogYCR7cGF0aH0vZW50cmllcy8ke2luZGV4fS9rZXlgfSwge2V4cHJlc3Npb246IGVudHJ5LnZhbHVlLCBwYXRoOiBgJHtwYXRofS9lbnRyaWVzLyR7aW5kZXh9L3ZhbHVlYH1cbiAgXSlcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkxpc3RJbmRleEV4cHJlc3Npb25cIikgcmV0dXJuIFtcbiAgICB7ZXhwcmVzc2lvbjogZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBwYXRoOiBgJHtwYXRofS9jb2xsZWN0aW9uYH0sIHtleHByZXNzaW9uOiBleHByZXNzaW9uLmluZGV4LCBwYXRoOiBgJHtwYXRofS9pbmRleGB9XG4gIF1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExvb2t1cEV4cHJlc3Npb25cIikgcmV0dXJuIFtcbiAgICB7ZXhwcmVzc2lvbjogZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBwYXRoOiBgJHtwYXRofS9jb2xsZWN0aW9uYH0sIHtleHByZXNzaW9uOiBleHByZXNzaW9uLmtleSwgcGF0aDogYCR7cGF0aH0va2V5YH1cbiAgXVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ29sbGVjdGlvblNpemVFeHByZXNzaW9uXCIpIHJldHVybiBbe2V4cHJlc3Npb246IGV4cHJlc3Npb24uY29sbGVjdGlvbiwgcGF0aDogYCR7cGF0aH0vY29sbGVjdGlvbmB9XVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWVtYmVyUmVhZFwiKSByZXR1cm4gW3tleHByZXNzaW9uOiBleHByZXNzaW9uLnJlY2VpdmVyLCBwYXRoOiBgJHtwYXRofS9yZWNlaXZlcmB9XVxuICByZXR1cm4gW11cbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnZW5lcmF0ZWQgc3VwcG9ydCBpcyByZXF1aXJlZCBieSBhIHNlbWFudGljIGNhcGFiaWxpdHkgbm9kZSBvciB0eXBlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHByb3RlY3RlZCBiaW5kaW5nIGlzIHJlcXVpcmVkLlxuICovXG5mdW5jdGlvbiBtb2R1bGVOZWVkc0VmZmVjdFN1cHBvcnQobW9kdWxlKSB7XG4gIC8qKiBAdHlwZSB7dW5rbm93bltdfSAqL1xuICBjb25zdCBwZW5kaW5nID0gW21vZHVsZS5lbnRyeVBvaW50LCAuLi5tb2R1bGUuZnVuY3Rpb25zLCAuLi5tb2R1bGUucmVjb3JkcyA/PyBbXSwgLi4ubW9kdWxlLmVycm9ycyA/PyBbXSwgLi4ubW9kdWxlLmNsYXNzZXMgPz8gW11dXG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0KClcblxuICB3aGlsZSAocGVuZGluZy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwZW5kaW5nLnBvcCgpXG5cbiAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiIHx8IHNlZW4uaGFzKHZhbHVlKSkgY29udGludWVcbiAgICBzZWVuLmFkZCh2YWx1ZSlcbiAgICBjb25zdCBraW5kID0gUmVmbGVjdC5nZXQodmFsdWUsIFwia2luZFwiKVxuXG4gICAgaWYgKGtpbmQgPT0gXCJFZmZlY3RDYWxsRXhwcmVzc2lvblwiIHx8IGtpbmQgPT0gXCJPd25lZFJlc291cmNlVHlwZVwiIHx8IGtpbmQgPT0gXCJPd25lZFJlZmVyZW5jZVR5cGVcIiB8fFxuICAgICAga2luZCA9PSBcIkVycm9yVHlwZVwiICYmIC9eY2FwYWJpbGl0eTpbMC05XStcXC9mYWlsdXJlOlswLTldKyQvdS50ZXN0KFN0cmluZyhSZWZsZWN0LmdldCh2YWx1ZSwgXCJkZWNsYXJhdGlvbklkXCIpKSkpIHJldHVybiB0cnVlXG4gICAgZm9yIChjb25zdCBba2V5LCBjaGlsZF0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgICBpZiAoW1wibG9jYXRpb25cIiwgXCJzb3VyY2VQcm92ZW5hbmNlXCJdLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZCkpIHBlbmRpbmcucHVzaCguLi5jaGlsZClcbiAgICAgIGVsc2UgaWYgKGNoaWxkICYmIHR5cGVvZiBjaGlsZCA9PSBcIm9iamVjdFwiKSBwZW5kaW5nLnB1c2goY2hpbGQpXG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIEZpbmRzIGEgY29udGV4dCBleGNsdWRlZCBmcm9tIGJvdW5kZWQgZWFnZXIgbG93ZXJpbmcuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7RXhjbHVkZWRFZmZlY3QgfCB1bmRlZmluZWR9IEZpcnN0IGRldGVybWluaXN0aWMgZXhjbHVzaW9uLlxuICovXG5mdW5jdGlvbiBmaW5kRXhjbHVkZWRFZmZlY3RDb250ZXh0KG1vZHVsZSkge1xuICAvKiogQHR5cGUge29iamVjdFtdfSAqL1xuICBjb25zdCBvd25lcnMgPSBbLi4ubW9kdWxlLmZ1bmN0aW9ucy5maWx0ZXIoKG93bmVyKSA9PiBvd25lciAmJiB0eXBlb2Ygb3duZXIgPT0gXCJvYmplY3RcIiksIG1vZHVsZS5lbnRyeVBvaW50XVxuXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmNsYXNzZXMgPz8gW10pIHtcbiAgICBpZiAoIWRlY2xhcmF0aW9uIHx8IHR5cGVvZiBkZWNsYXJhdGlvbiAhPSBcIm9iamVjdFwiKSBjb250aW51ZVxuICAgIGlmIChkZWNsYXJhdGlvbi5jb25zdHJ1Y3RvciAmJiB0eXBlb2YgZGVjbGFyYXRpb24uY29uc3RydWN0b3IgPT0gXCJvYmplY3RcIikgb3duZXJzLnB1c2goZGVjbGFyYXRpb24uY29uc3RydWN0b3IpXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24ubWV0aG9kcykpIG93bmVycy5wdXNoKC4uLmRlY2xhcmF0aW9uLm1ldGhvZHMuZmlsdGVyKChvd25lcikgPT4gb3duZXIgJiYgdHlwZW9mIG93bmVyID09IFwib2JqZWN0XCIpKVxuICB9XG4gIGZvciAoY29uc3Qgb3duZXIgb2Ygb3duZXJzKSB7XG4gICAgY29uc3QgYm9keSA9IFJlZmxlY3QuZ2V0KG93bmVyLCBcImJvZHlcIilcblxuICAgIGlmICghYm9keSB8fCB0eXBlb2YgYm9keSAhPSBcIm9iamVjdFwiKSBjb250aW51ZVxuICAgIGNvbnN0IGZvdW5kID0gYmxvY2tFeGNsdWRlZCgvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoYm9keSkpXG4gICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmRcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogRmluZHMgYW4gZXhjbHVkZWQgY29udGV4dCBpbiBvbmUgc3RydWN0dXJlZCBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIC0gU2VtYW50aWMgYmxvY2suXG4gKiBAcmV0dXJucyB7RXhjbHVkZWRFZmZlY3QgfCB1bmRlZmluZWR9IEZpcnN0IGRldGVybWluaXN0aWMgZXhjbHVzaW9uLlxuICovXG5mdW5jdGlvbiBibG9ja0V4Y2x1ZGVkKGJsb2NrKSB7XG4gIGlmICghYmxvY2sgfHwgdHlwZW9mIGJsb2NrICE9IFwib2JqZWN0XCIgfHwgIUFycmF5LmlzQXJyYXkoYmxvY2suc3RhdGVtZW50cykpIHJldHVybiB1bmRlZmluZWRcbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYmxvY2suc3RhdGVtZW50cykge1xuICAgIGlmICghc3RhdGVtZW50IHx8IHR5cGVvZiBzdGF0ZW1lbnQgIT0gXCJvYmplY3RcIikgY29udGludWVcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiICYmIGNvbnRhaW5zRWZmZWN0KHN0YXRlbWVudC5jb25kaXRpb24pKSB7XG4gICAgICByZXR1cm4ge2RldGFpbDogXCJlZmZlY3RmdWwgY29uZGl0aW9uLWNvbnRyb2xsZWQgbG9vcCBjb25kaXRpb25cIiwgbG9jYXRpb246IHN0YXRlbWVudC5jb25kaXRpb24ubG9jYXRpb259XG4gICAgfVxuICAgIGNvbnN0IGV4cHJlc3Npb25zID0gc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgPyBbc3RhdGVtZW50LmluaXRpYWxpemVyXSA6XG4gICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIgPyBbc3RhdGVtZW50LmV4cHJlc3Npb25dIDpcbiAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5leHByZXNzaW9uID8gW3N0YXRlbWVudC5leHByZXNzaW9uXSA6IFtdIDpcbiAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIgPyBbc3RhdGVtZW50LmNvbmRpdGlvbl0gOiBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiA/IFtzdGF0ZW1lbnQubGlzdF0gOlxuICAgICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIgPyBbc3RhdGVtZW50Lm1hcF0gOiBzdGF0ZW1lbnQua2luZCA9PSBcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIgPyBbc3RhdGVtZW50LmV4cHJlc3Npb25dIDpcbiAgICAgICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJSYWlzZVN0YXRlbWVudFwiID8gW3N0YXRlbWVudC5lcnJvci5tZXNzYWdlXSA6IFtdXG4gICAgZm9yIChjb25zdCBleHByZXNzaW9uIG9mIGV4cHJlc3Npb25zKSB7XG4gICAgICBjb25zdCBjb25kaXRpb25hbCA9IGZpbmRDb25kaXRpb25hbEVmZmVjdChleHByZXNzaW9uKVxuICAgICAgaWYgKGNvbmRpdGlvbmFsKSByZXR1cm4ge2RldGFpbDogXCJlZmZlY3RmdWwgc2hvcnQtY2lyY3VpdCBCb29sZWFuQW5kL0Jvb2xlYW5PciBleHByZXNzaW9uXCIsIGxvY2F0aW9uOiBjb25kaXRpb25hbC5sb2NhdGlvbn1cbiAgICB9XG4gICAgY29uc3QgbmVzdGVkID0gc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiID8gW3N0YXRlbWVudC5jb25zZXF1ZW50LCAuLi4oc3RhdGVtZW50LmFsdGVybmF0ZSA/IFtzdGF0ZW1lbnQuYWx0ZXJuYXRlXSA6IFtdKV0gOlxuICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiID8gW3N0YXRlbWVudC5ib2R5XSA6XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIgPyBbc3RhdGVtZW50LmJvZHksIC4uLnN0YXRlbWVudC5oYW5kbGVycy5tYXAoKGhhbmRsZXIpID0+IGhhbmRsZXIuY2F0Y2hCb2R5KSxcbiAgICAgICAgICAuLi4oc3RhdGVtZW50LmZpbmFsbHlCb2R5ID8gW3N0YXRlbWVudC5maW5hbGx5Qm9keV0gOiBbXSldIDogW11cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5lc3RlZCkge1xuICAgICAgY29uc3QgZm91bmQgPSBibG9ja0V4Y2x1ZGVkKGNoaWxkKVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEZpbmRzIGFuIGVmZmVjdCBiZWxvdyBhIHNob3J0LWNpcmN1aXQgb3BlcmF0b3IuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBFeHByZXNzaW9uIHJvb3QuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbiB8IHVuZGVmaW5lZH0gSW52YWxpZCBjb25kaXRpb25hbCBlZmZlY3QuXG4gKi9cbmZ1bmN0aW9uIGZpbmRDb25kaXRpb25hbEVmZmVjdChleHByZXNzaW9uKSB7XG4gIGlmICghZXhwcmVzc2lvbiB8fCB0eXBlb2YgZXhwcmVzc2lvbiAhPSBcIm9iamVjdFwiKSByZXR1cm4gdW5kZWZpbmVkXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIgJiYgW1wiQm9vbGVhbkFuZFwiLCBcIkJvb2xlYW5PclwiXS5pbmNsdWRlcyhleHByZXNzaW9uLm9wZXJhdGlvbikgJiZcbiAgICAoY29udGFpbnNFZmZlY3QoZXhwcmVzc2lvbi5sZWZ0KSB8fCBjb250YWluc0VmZmVjdChleHByZXNzaW9uLnJpZ2h0KSkpIHJldHVybiBleHByZXNzaW9uXG4gIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4oZXhwcmVzc2lvbikpIHtcbiAgICBjb25zdCBmb3VuZCA9IGZpbmRDb25kaXRpb25hbEVmZmVjdChjaGlsZClcbiAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZFxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBleHByZXNzaW9uIGV2YWx1YXRlcyBhbiBlZmZlY3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBFeHByZXNzaW9uIHJvb3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBhbiBlZmZlY3QgaXMgcmVhY2hhYmxlLlxuICovXG5mdW5jdGlvbiBjb250YWluc0VmZmVjdChleHByZXNzaW9uKSB7XG4gIGlmICghZXhwcmVzc2lvbiB8fCB0eXBlb2YgZXhwcmVzc2lvbiAhPSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIGV4cHJlc3Npb24ua2luZCA9PSBcIkVmZmVjdENhbGxFeHByZXNzaW9uXCIgfHwgQm9vbGVhbihSZWZsZWN0LmdldChleHByZXNzaW9uLCBcImVmZmVjdFNpdGVJZFwiKSkgfHwgY2hpbGRyZW4oZXhwcmVzc2lvbikuc29tZShjb250YWluc0VmZmVjdClcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGNoaWxkIGV4cHJlc3Npb25zIGluIGV2YWx1YXRpb24gb3JkZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBQYXJlbnQgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9uW119IENoaWxkcmVuLlxuICovXG5mdW5jdGlvbiBjaGlsZHJlbihleHByZXNzaW9uKSB7XG4gIGlmICghZXhwcmVzc2lvbiB8fCB0eXBlb2YgZXhwcmVzc2lvbiAhPSBcIm9iamVjdFwiKSByZXR1cm4gW11cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiRWZmZWN0Q2FsbEV4cHJlc3Npb25cIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJSZWZlcmVuY2VDb25zdHJ1Y3Rpb25cIiB8fFxuICAgIGV4cHJlc3Npb24ua2luZCA9PSBcIlJlY29yZENvbnN0cnVjdGlvblwiKSByZXR1cm4gZXhwcmVzc2lvbi5hcmd1bWVudHNcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1ldGhvZENhbGxFeHByZXNzaW9uXCIpIHJldHVybiBbZXhwcmVzc2lvbi5yZWNlaXZlciwgLi4uZXhwcmVzc2lvbi5hcmd1bWVudHNdXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPd25lZE1vdmVFeHByZXNzaW9uXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiT3duZWRCb3Jyb3dFeHByZXNzaW9uXCIpIHJldHVybiBbZXhwcmVzc2lvbi5leHByZXNzaW9uXVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSByZXR1cm4gW2V4cHJlc3Npb24ubGVmdCwgZXhwcmVzc2lvbi5yaWdodF1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSByZXR1cm4gW2V4cHJlc3Npb24ub3BlcmFuZF1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsU29tZVwiKSByZXR1cm4gW2V4cHJlc3Npb24udmFsdWVdXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbElzUHJlc2VudFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsVW53cmFwXCIpIHJldHVybiBbZXhwcmVzc2lvbi5vcGVyYW5kXVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdExpdGVyYWxcIikgcmV0dXJuIGV4cHJlc3Npb24uZWxlbWVudHNcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExpdGVyYWxcIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKSByZXR1cm4gZXhwcmVzc2lvbi5lbnRyaWVzLmZsYXRNYXAoKHtrZXksIHZhbHVlfSkgPT4gW2tleSwgdmFsdWVdKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSByZXR1cm4gW2V4cHJlc3Npb24uY29sbGVjdGlvbiwgZXhwcmVzc2lvbi5pbmRleF1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExvb2t1cEV4cHJlc3Npb25cIikgcmV0dXJuIFtleHByZXNzaW9uLmNvbGxlY3Rpb24sIGV4cHJlc3Npb24ua2V5XVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ29sbGVjdGlvblNpemVFeHByZXNzaW9uXCIpIHJldHVybiBbZXhwcmVzc2lvbi5jb2xsZWN0aW9uXVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWVtYmVyUmVhZFwiKSByZXR1cm4gW2V4cHJlc3Npb24ucmVjZWl2ZXJdXG4gIHJldHVybiBbXVxufVxuXG5jb25zdCBwaHBTdXBwb3J0ID0gYC8qIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydCAqL1xuZmluYWwgY2xhc3MgUHJvYmVPcGVyYXRpb25GYWlsdXJlIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7fVxuZmluYWwgY2xhc3MgUHJvYmVBY3F1aXJlRmFpbHVyZSBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24ge31cbmZpbmFsIGNsYXNzIFByb2JlUmVhZEZhaWx1cmUgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHt9XG5maW5hbCBjbGFzcyBQcm9iZUNsb3NlRmFpbHVyZSBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24ge31cbmZpbmFsIGNsYXNzIFByb2JlUmVzb3VyY2VDbG9zZWQgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHt9XG5maW5hbCBjbGFzcyBQcm9iZVJlc291cmNlIHtcbiAgICBwdWJsaWMgYm9vbCAkY2xvc2VkID0gZmFsc2U7XG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHB1YmxpYyBtaXhlZCAkaGFuZGxlKSB7fVxufVxuJEdMT0JBTFNbJ19fc2VtYW50aWZvbGRfdGFzazAzNF90cmFjZSddID0gW107XG5mdW5jdGlvbiBwcm9iZUVmZmVjdChzdHJpbmcgJGxhYmVsLCBpbnQgJHZhbHVlLCBib29sICRmYWlsKTogaW50IHtcbiAgICAkR0xPQkFMU1snX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlJ11bXSA9ICdlZmZlY3Q6JyAuICRsYWJlbDtcbiAgICBpZiAoJGZhaWwpIHRocm93IG5ldyBQcm9iZU9wZXJhdGlvbkZhaWx1cmUoJ1Byb2JlT3BlcmF0aW9uRmFpbHVyZScpO1xuICAgIHJldHVybiAkdmFsdWU7XG59XG5mdW5jdGlvbiBwcm9iZUFjcXVpcmUoYm9vbCAkZmFpbCk6IFByb2JlUmVzb3VyY2Uge1xuICAgICRHTE9CQUxTWydfX3NlbWFudGlmb2xkX3Rhc2swMzRfdHJhY2UnXVtdID0gJ2FjcXVpcmUnO1xuICAgIGlmICgkZmFpbCkgdGhyb3cgbmV3IFByb2JlQWNxdWlyZUZhaWx1cmUoJ1Byb2JlQWNxdWlyZUZhaWx1cmUnKTtcbiAgICB0cnkgeyAkaGFuZGxlID0gQGZvcGVuKChzdHJpbmcpIGdldGVudignU0VNQU5USUZPTERfVEFTSzAzNF9QUk9CRV9QQVRIJyksICdyYicpOyB9XG4gICAgY2F0Y2ggKFRocm93YWJsZSkgeyB0aHJvdyBuZXcgUHJvYmVBY3F1aXJlRmFpbHVyZSgnUHJvYmVBY3F1aXJlRmFpbHVyZScpOyB9XG4gICAgaWYgKCRoYW5kbGUgPT09IGZhbHNlKSB0aHJvdyBuZXcgUHJvYmVBY3F1aXJlRmFpbHVyZSgnUHJvYmVBY3F1aXJlRmFpbHVyZScpO1xuICAgIHJldHVybiBuZXcgUHJvYmVSZXNvdXJjZSgkaGFuZGxlKTtcbn1cbmZ1bmN0aW9uIHByb2JlUmVhZChQcm9iZVJlc291cmNlICRyZXNvdXJjZSwgYm9vbCAkZmFpbCk6ID9zdHJpbmcge1xuICAgIGlmICgkcmVzb3VyY2UtPmNsb3NlZCkgdGhyb3cgbmV3IFByb2JlUmVzb3VyY2VDbG9zZWQoJ1Byb2JlUmVzb3VyY2VDbG9zZWQnKTtcbiAgICAkR0xPQkFMU1snX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlJ11bXSA9ICdyZWFkJztcbiAgICBpZiAoJGZhaWwpIHRocm93IG5ldyBQcm9iZVJlYWRGYWlsdXJlKCdQcm9iZVJlYWRGYWlsdXJlJyk7XG4gICAgdHJ5IHsgJGxpbmUgPSBAZmdldHMoJHJlc291cmNlLT5oYW5kbGUpOyB9XG4gICAgY2F0Y2ggKFRocm93YWJsZSkgeyB0aHJvdyBuZXcgUHJvYmVSZWFkRmFpbHVyZSgnUHJvYmVSZWFkRmFpbHVyZScpOyB9XG4gICAgaWYgKCRsaW5lID09PSBmYWxzZSkge1xuICAgICAgICBpZiAoZmVvZigkcmVzb3VyY2UtPmhhbmRsZSkpIHJldHVybiBudWxsO1xuICAgICAgICB0aHJvdyBuZXcgUHJvYmVSZWFkRmFpbHVyZSgnUHJvYmVSZWFkRmFpbHVyZScpO1xuICAgIH1cbiAgICByZXR1cm4gcnRyaW0oJGxpbmUsIFwiXFxcXHJcXFxcblwiKTtcbn1cbmZ1bmN0aW9uIHByb2JlQ2xvc2UoUHJvYmVSZXNvdXJjZSAkcmVzb3VyY2UsIGJvb2wgJGZhaWwpOiB2b2lkIHtcbiAgICBpZiAoJHJlc291cmNlLT5jbG9zZWQpIHRocm93IG5ldyBQcm9iZVJlc291cmNlQ2xvc2VkKCdQcm9iZVJlc291cmNlQ2xvc2VkJyk7XG4gICAgJEdMT0JBTFNbJ19fc2VtYW50aWZvbGRfdGFzazAzNF90cmFjZSddW10gPSAnY2xvc2UnO1xuICAgIHRyeSB7ICRjbG9zZWQgPSBAZmNsb3NlKCRyZXNvdXJjZS0+aGFuZGxlKTsgfVxuICAgIGNhdGNoIChUaHJvd2FibGUpIHsgJHJlc291cmNlLT5jbG9zZWQgPSB0cnVlOyB0aHJvdyBuZXcgUHJvYmVDbG9zZUZhaWx1cmUoJ1Byb2JlQ2xvc2VGYWlsdXJlJyk7IH1cbiAgICAkcmVzb3VyY2UtPmNsb3NlZCA9IHRydWU7XG4gICAgaWYgKCRmYWlsIHx8ICEkY2xvc2VkKSB0aHJvdyBuZXcgUHJvYmVDbG9zZUZhaWx1cmUoJ1Byb2JlQ2xvc2VGYWlsdXJlJyk7XG59XG5mdW5jdGlvbiBwcm9iZVRyYWNlKCk6IHN0cmluZyB7IHJldHVybiBpbXBsb2RlKCcsJywgJEdMT0JBTFNbJ19fc2VtYW50aWZvbGRfdGFzazAzNF90cmFjZSddKTsgfVxuLyogc2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0LWVuZCAqL1xuXG5gXG5cbmNvbnN0IHJ1YnlTdXBwb3J0ID0gYCMgc2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0XG5jbGFzcyBQcm9iZU9wZXJhdGlvbkZhaWx1cmUgPCBTdGFuZGFyZEVycm9yOyBlbmRcbmNsYXNzIFByb2JlQWNxdWlyZUZhaWx1cmUgPCBTdGFuZGFyZEVycm9yOyBlbmRcbmNsYXNzIFByb2JlUmVhZEZhaWx1cmUgPCBTdGFuZGFyZEVycm9yOyBlbmRcbmNsYXNzIFByb2JlQ2xvc2VGYWlsdXJlIDwgU3RhbmRhcmRFcnJvcjsgZW5kXG5jbGFzcyBQcm9iZVJlc291cmNlQ2xvc2VkIDwgU3RhbmRhcmRFcnJvcjsgZW5kXG5jbGFzcyBQcm9iZVJlc291cmNlXG4gIGF0dHJfYWNjZXNzb3IgOmhhbmRsZSwgOmNsb3NlZFxuICBkZWYgaW5pdGlhbGl6ZShoYW5kbGUpOyBAaGFuZGxlID0gaGFuZGxlOyBAY2xvc2VkID0gZmFsc2U7IGVuZFxuZW5kXG4kX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlID0gW11cbmRlZiBwcm9iZUVmZmVjdChsYWJlbCwgdmFsdWUsIGZhaWxfdmFsdWUpXG4gICRfX3NlbWFudGlmb2xkX3Rhc2swMzRfdHJhY2UgPDwgXCJlZmZlY3Q6I3tsYWJlbH1cIlxuICByYWlzZSBQcm9iZU9wZXJhdGlvbkZhaWx1cmUsIFwiUHJvYmVPcGVyYXRpb25GYWlsdXJlXCIgaWYgZmFpbF92YWx1ZVxuICB2YWx1ZVxuZW5kXG5kZWYgcHJvYmVBY3F1aXJlKGZhaWxfdmFsdWUpXG4gICRfX3NlbWFudGlmb2xkX3Rhc2swMzRfdHJhY2UgPDwgXCJhY3F1aXJlXCJcbiAgcmFpc2UgUHJvYmVBY3F1aXJlRmFpbHVyZSwgXCJQcm9iZUFjcXVpcmVGYWlsdXJlXCIgaWYgZmFpbF92YWx1ZVxuICBiZWdpbjsgUHJvYmVSZXNvdXJjZS5uZXcoRmlsZS5vcGVuKEVOVi5mZXRjaChcIlNFTUFOVElGT0xEX1RBU0swMzRfUFJPQkVfUEFUSFwiKSwgXCJyXCIpKTsgcmVzY3VlIFByb2JlQWNxdWlyZUZhaWx1cmU7IHJhaXNlOyByZXNjdWUgU3RhbmRhcmRFcnJvcjsgcmFpc2UgUHJvYmVBY3F1aXJlRmFpbHVyZSwgXCJQcm9iZUFjcXVpcmVGYWlsdXJlXCI7IGVuZFxuZW5kXG5kZWYgcHJvYmVSZWFkKHJlc291cmNlLCBmYWlsX3ZhbHVlKVxuICByYWlzZSBQcm9iZVJlc291cmNlQ2xvc2VkLCBcIlByb2JlUmVzb3VyY2VDbG9zZWRcIiBpZiByZXNvdXJjZS5jbG9zZWRcbiAgJF9fc2VtYW50aWZvbGRfdGFzazAzNF90cmFjZSA8PCBcInJlYWRcIlxuICByYWlzZSBQcm9iZVJlYWRGYWlsdXJlLCBcIlByb2JlUmVhZEZhaWx1cmVcIiBpZiBmYWlsX3ZhbHVlXG4gIGJlZ2luOyB2YWx1ZSA9IHJlc291cmNlLmhhbmRsZS5nZXRzOyB2YWx1ZS5uaWw/ID8gbmlsIDogdmFsdWUuY2hvbXA7IHJlc2N1ZSBQcm9iZVJlYWRGYWlsdXJlOyByYWlzZTsgcmVzY3VlIFN0YW5kYXJkRXJyb3I7IHJhaXNlIFByb2JlUmVhZEZhaWx1cmUsIFwiUHJvYmVSZWFkRmFpbHVyZVwiOyBlbmRcbmVuZFxuZGVmIHByb2JlQ2xvc2UocmVzb3VyY2UsIGZhaWxfdmFsdWUpXG4gIHJhaXNlIFByb2JlUmVzb3VyY2VDbG9zZWQsIFwiUHJvYmVSZXNvdXJjZUNsb3NlZFwiIGlmIHJlc291cmNlLmNsb3NlZFxuICAkX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlIDw8IFwiY2xvc2VcIlxuICBiZWdpbjsgcmVzb3VyY2UuaGFuZGxlLmNsb3NlOyByZXNjdWUgU3RhbmRhcmRFcnJvcjsgcmVzb3VyY2UuY2xvc2VkID0gdHJ1ZTsgcmFpc2UgUHJvYmVDbG9zZUZhaWx1cmUsIFwiUHJvYmVDbG9zZUZhaWx1cmVcIjsgZW5kXG4gIHJlc291cmNlLmNsb3NlZCA9IHRydWVcbiAgcmFpc2UgUHJvYmVDbG9zZUZhaWx1cmUsIFwiUHJvYmVDbG9zZUZhaWx1cmVcIiBpZiBmYWlsX3ZhbHVlXG4gIG5pbFxuZW5kXG5kZWYgcHJvYmVUcmFjZTsgJF9fc2VtYW50aWZvbGRfdGFzazAzNF90cmFjZS5qb2luKFwiLFwiKTsgZW5kXG4jIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC1lbmRcblxuYFxuXG5jb25zdCBqYXZhc2NyaXB0U3VwcG9ydCA9IGAvKiBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQgKi9cbmNvbnN0IF9fc2VtYW50aWZvbGRUYXNrMDM0RnMgPSBwcm9jZXNzLmdldEJ1aWx0aW5Nb2R1bGUoXCJub2RlOmZzXCIpXG5jbGFzcyBQcm9iZU9wZXJhdGlvbkZhaWx1cmUgZXh0ZW5kcyBFcnJvciB7fVxuY2xhc3MgUHJvYmVBY3F1aXJlRmFpbHVyZSBleHRlbmRzIEVycm9yIHt9XG5jbGFzcyBQcm9iZVJlYWRGYWlsdXJlIGV4dGVuZHMgRXJyb3Ige31cbmNsYXNzIFByb2JlQ2xvc2VGYWlsdXJlIGV4dGVuZHMgRXJyb3Ige31cbmNsYXNzIFByb2JlUmVzb3VyY2VDbG9zZWQgZXh0ZW5kcyBFcnJvciB7fVxuY2xhc3MgUHJvYmVSZXNvdXJjZSB7IGNvbnN0cnVjdG9yKGhhbmRsZSkgeyB0aGlzLmhhbmRsZSA9IGhhbmRsZTsgdGhpcy5jbG9zZWQgPSBmYWxzZTsgdGhpcy5wb3NpdGlvbiA9IDAgfSB9XG5jb25zdCBfX3NlbWFudGlmb2xkVGFzazAzNFRyYWNlID0gW11cbmZ1bmN0aW9uIHByb2JlRWZmZWN0KGxhYmVsLCB2YWx1ZSwgZmFpbCkgeyBfX3NlbWFudGlmb2xkVGFzazAzNFRyYWNlLnB1c2goXFxgZWZmZWN0OlxcJHtsYWJlbH1cXGApOyBpZiAoZmFpbCkgdGhyb3cgbmV3IFByb2JlT3BlcmF0aW9uRmFpbHVyZShcIlByb2JlT3BlcmF0aW9uRmFpbHVyZVwiKTsgcmV0dXJuIHZhbHVlIH1cbmZ1bmN0aW9uIHByb2JlQWNxdWlyZShmYWlsKSB7IF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2UucHVzaChcImFjcXVpcmVcIik7IGlmIChmYWlsKSB0aHJvdyBuZXcgUHJvYmVBY3F1aXJlRmFpbHVyZShcIlByb2JlQWNxdWlyZUZhaWx1cmVcIik7IHRyeSB7IHJldHVybiBuZXcgUHJvYmVSZXNvdXJjZShfX3NlbWFudGlmb2xkVGFzazAzNEZzLm9wZW5TeW5jKHByb2Nlc3MuZW52LlNFTUFOVElGT0xEX1RBU0swMzRfUFJPQkVfUEFUSCwgXCJyXCIpKSB9IGNhdGNoIHsgdGhyb3cgbmV3IFByb2JlQWNxdWlyZUZhaWx1cmUoXCJQcm9iZUFjcXVpcmVGYWlsdXJlXCIpIH0gfVxuZnVuY3Rpb24gcHJvYmVSZWFkKHJlc291cmNlLCBmYWlsKSB7IGlmIChyZXNvdXJjZS5jbG9zZWQpIHRocm93IG5ldyBQcm9iZVJlc291cmNlQ2xvc2VkKFwiUHJvYmVSZXNvdXJjZUNsb3NlZFwiKTsgX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZS5wdXNoKFwicmVhZFwiKTsgaWYgKGZhaWwpIHRocm93IG5ldyBQcm9iZVJlYWRGYWlsdXJlKFwiUHJvYmVSZWFkRmFpbHVyZVwiKTsgdHJ5IHsgY29uc3QgYnl0ZXMgPSBbXTsgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jKDEpOyB3aGlsZSAodHJ1ZSkgeyBjb25zdCBjb3VudCA9IF9fc2VtYW50aWZvbGRUYXNrMDM0RnMucmVhZFN5bmMocmVzb3VyY2UuaGFuZGxlLCBidWZmZXIsIDAsIDEsIHJlc291cmNlLnBvc2l0aW9uKyspOyBpZiAoY291bnQgPT09IDApIHJldHVybiBieXRlcy5sZW5ndGggPT09IDAgPyBudWxsIDogQnVmZmVyLmZyb20oYnl0ZXMpLnRvU3RyaW5nKFwidXRmOFwiKTsgaWYgKGJ1ZmZlclswXSA9PT0gMTApIHJldHVybiBCdWZmZXIuZnJvbShieXRlcykudG9TdHJpbmcoXCJ1dGY4XCIpLnJlcGxhY2UoL1xcXFxyJC91LCBcIlwiKTsgYnl0ZXMucHVzaChidWZmZXJbMF0pIH0gfSBjYXRjaCB7IHRocm93IG5ldyBQcm9iZVJlYWRGYWlsdXJlKFwiUHJvYmVSZWFkRmFpbHVyZVwiKSB9IH1cbmZ1bmN0aW9uIHByb2JlQ2xvc2UocmVzb3VyY2UsIGZhaWwpIHsgaWYgKHJlc291cmNlLmNsb3NlZCkgdGhyb3cgbmV3IFByb2JlUmVzb3VyY2VDbG9zZWQoXCJQcm9iZVJlc291cmNlQ2xvc2VkXCIpOyBfX3NlbWFudGlmb2xkVGFzazAzNFRyYWNlLnB1c2goXCJjbG9zZVwiKTsgdHJ5IHsgX19zZW1hbnRpZm9sZFRhc2swMzRGcy5jbG9zZVN5bmMocmVzb3VyY2UuaGFuZGxlKSB9IGNhdGNoIHsgcmVzb3VyY2UuY2xvc2VkID0gdHJ1ZTsgdGhyb3cgbmV3IFByb2JlQ2xvc2VGYWlsdXJlKFwiUHJvYmVDbG9zZUZhaWx1cmVcIikgfSByZXNvdXJjZS5jbG9zZWQgPSB0cnVlOyBpZiAoZmFpbCkgdGhyb3cgbmV3IFByb2JlQ2xvc2VGYWlsdXJlKFwiUHJvYmVDbG9zZUZhaWx1cmVcIikgfVxuZnVuY3Rpb24gcHJvYmVUcmFjZSgpIHsgcmV0dXJuIF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2Uuam9pbihcIixcIikgfVxuLyogc2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0LWVuZCAqL1xuXG5gXG5cbmNvbnN0IHR5cGVzY3JpcHRTdXBwb3J0ID0gYC8qIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydCAqL1xuY29uc3QgX19zZW1hbnRpZm9sZFRhc2swMzRGcyA9IHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZShcIm5vZGU6ZnNcIilcbmNsYXNzIFByb2JlT3BlcmF0aW9uRmFpbHVyZSBleHRlbmRzIEVycm9yIHt9XG5jbGFzcyBQcm9iZUFjcXVpcmVGYWlsdXJlIGV4dGVuZHMgRXJyb3Ige31cbmNsYXNzIFByb2JlUmVhZEZhaWx1cmUgZXh0ZW5kcyBFcnJvciB7fVxuY2xhc3MgUHJvYmVDbG9zZUZhaWx1cmUgZXh0ZW5kcyBFcnJvciB7fVxuY2xhc3MgUHJvYmVSZXNvdXJjZUNsb3NlZCBleHRlbmRzIEVycm9yIHt9XG5jbGFzcyBQcm9iZVJlc291cmNlIHsgY2xvc2VkID0gZmFsc2U7IHBvc2l0aW9uID0gMDsgY29uc3RydWN0b3IocmVhZG9ubHkgaGFuZGxlOiBudW1iZXIpIHt9IH1cbmNvbnN0IF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2U6IHN0cmluZ1tdID0gW11cbmZ1bmN0aW9uIHByb2JlRWZmZWN0KGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIsIGZhaWw6IGJvb2xlYW4pOiBudW1iZXIgeyBfX3NlbWFudGlmb2xkVGFzazAzNFRyYWNlLnB1c2goXFxgZWZmZWN0OlxcJHtsYWJlbH1cXGApOyBpZiAoZmFpbCkgdGhyb3cgbmV3IFByb2JlT3BlcmF0aW9uRmFpbHVyZShcIlByb2JlT3BlcmF0aW9uRmFpbHVyZVwiKTsgcmV0dXJuIHZhbHVlIH1cbmZ1bmN0aW9uIHByb2JlQWNxdWlyZShmYWlsOiBib29sZWFuKTogUHJvYmVSZXNvdXJjZSB7IF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2UucHVzaChcImFjcXVpcmVcIik7IGlmIChmYWlsKSB0aHJvdyBuZXcgUHJvYmVBY3F1aXJlRmFpbHVyZShcIlByb2JlQWNxdWlyZUZhaWx1cmVcIik7IHRyeSB7IHJldHVybiBuZXcgUHJvYmVSZXNvdXJjZShfX3NlbWFudGlmb2xkVGFzazAzNEZzLm9wZW5TeW5jKHByb2Nlc3MuZW52LlNFTUFOVElGT0xEX1RBU0swMzRfUFJPQkVfUEFUSCBhcyBzdHJpbmcsIFwiclwiKSkgfSBjYXRjaCB7IHRocm93IG5ldyBQcm9iZUFjcXVpcmVGYWlsdXJlKFwiUHJvYmVBY3F1aXJlRmFpbHVyZVwiKSB9IH1cbmZ1bmN0aW9uIHByb2JlUmVhZChyZXNvdXJjZTogUHJvYmVSZXNvdXJjZSwgZmFpbDogYm9vbGVhbik6IHN0cmluZyB8IG51bGwgeyBpZiAocmVzb3VyY2UuY2xvc2VkKSB0aHJvdyBuZXcgUHJvYmVSZXNvdXJjZUNsb3NlZChcIlByb2JlUmVzb3VyY2VDbG9zZWRcIik7IF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2UucHVzaChcInJlYWRcIik7IGlmIChmYWlsKSB0aHJvdyBuZXcgUHJvYmVSZWFkRmFpbHVyZShcIlByb2JlUmVhZEZhaWx1cmVcIik7IHRyeSB7IGNvbnN0IGJ5dGVzOiBudW1iZXJbXSA9IFtdOyBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoMSk7IHdoaWxlICh0cnVlKSB7IGNvbnN0IGNvdW50ID0gX19zZW1hbnRpZm9sZFRhc2swMzRGcy5yZWFkU3luYyhyZXNvdXJjZS5oYW5kbGUsIGJ1ZmZlciwgMCwgMSwgcmVzb3VyY2UucG9zaXRpb24rKyk7IGlmIChjb3VudCA9PT0gMCkgcmV0dXJuIGJ5dGVzLmxlbmd0aCA9PT0gMCA/IG51bGwgOiBCdWZmZXIuZnJvbShieXRlcykudG9TdHJpbmcoXCJ1dGY4XCIpOyBpZiAoYnVmZmVyWzBdID09PSAxMCkgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ5dGVzKS50b1N0cmluZyhcInV0ZjhcIikucmVwbGFjZSgvXFxcXHIkL3UsIFwiXCIpOyBieXRlcy5wdXNoKGJ1ZmZlclswXSkgfSB9IGNhdGNoIHsgdGhyb3cgbmV3IFByb2JlUmVhZEZhaWx1cmUoXCJQcm9iZVJlYWRGYWlsdXJlXCIpIH0gfVxuZnVuY3Rpb24gcHJvYmVDbG9zZShyZXNvdXJjZTogUHJvYmVSZXNvdXJjZSwgZmFpbDogYm9vbGVhbik6IHZvaWQgeyBpZiAocmVzb3VyY2UuY2xvc2VkKSB0aHJvdyBuZXcgUHJvYmVSZXNvdXJjZUNsb3NlZChcIlByb2JlUmVzb3VyY2VDbG9zZWRcIik7IF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2UucHVzaChcImNsb3NlXCIpOyB0cnkgeyBfX3NlbWFudGlmb2xkVGFzazAzNEZzLmNsb3NlU3luYyhyZXNvdXJjZS5oYW5kbGUpIH0gY2F0Y2ggeyByZXNvdXJjZS5jbG9zZWQgPSB0cnVlOyB0aHJvdyBuZXcgUHJvYmVDbG9zZUZhaWx1cmUoXCJQcm9iZUNsb3NlRmFpbHVyZVwiKSB9IHJlc291cmNlLmNsb3NlZCA9IHRydWU7IGlmIChmYWlsKSB0aHJvdyBuZXcgUHJvYmVDbG9zZUZhaWx1cmUoXCJQcm9iZUNsb3NlRmFpbHVyZVwiKSB9XG5mdW5jdGlvbiBwcm9iZVRyYWNlKCk6IHN0cmluZyB7IHJldHVybiBfX3NlbWFudGlmb2xkVGFzazAzNFRyYWNlLmpvaW4oXCIsXCIpIH1cbi8qIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC1lbmQgKi9cblxuYFxuXG5jb25zdCBqYXZhVG9wU3VwcG9ydCA9IGAvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnRcbmZpbmFsIGNsYXNzIFByb2JlT3BlcmF0aW9uRmFpbHVyZSBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24geyBQcm9iZU9wZXJhdGlvbkZhaWx1cmUoKSB7IHN1cGVyKFwiUHJvYmVPcGVyYXRpb25GYWlsdXJlXCIpOyB9IH1cbmZpbmFsIGNsYXNzIFByb2JlQWNxdWlyZUZhaWx1cmUgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsgUHJvYmVBY3F1aXJlRmFpbHVyZSgpIHsgc3VwZXIoXCJQcm9iZUFjcXVpcmVGYWlsdXJlXCIpOyB9IH1cbmZpbmFsIGNsYXNzIFByb2JlUmVhZEZhaWx1cmUgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsgUHJvYmVSZWFkRmFpbHVyZSgpIHsgc3VwZXIoXCJQcm9iZVJlYWRGYWlsdXJlXCIpOyB9IH1cbmZpbmFsIGNsYXNzIFByb2JlQ2xvc2VGYWlsdXJlIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7IFByb2JlQ2xvc2VGYWlsdXJlKCkgeyBzdXBlcihcIlByb2JlQ2xvc2VGYWlsdXJlXCIpOyB9IH1cbmZpbmFsIGNsYXNzIFByb2JlUmVzb3VyY2VDbG9zZWQgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsgUHJvYmVSZXNvdXJjZUNsb3NlZCgpIHsgc3VwZXIoXCJQcm9iZVJlc291cmNlQ2xvc2VkXCIpOyB9IH1cbmZpbmFsIGNsYXNzIFByb2JlUmVzb3VyY2UgeyBmaW5hbCBqYXZhLm5pby5jaGFubmVscy5GaWxlQ2hhbm5lbCBoYW5kbGU7IGJvb2xlYW4gY2xvc2VkID0gZmFsc2U7IFByb2JlUmVzb3VyY2UoamF2YS5uaW8uY2hhbm5lbHMuRmlsZUNoYW5uZWwgaGFuZGxlKSB7IHRoaXMuaGFuZGxlID0gaGFuZGxlOyB9IH1cbi8vIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC10b3AtZW5kXG5cbmBcblxuY29uc3QgamF2YU1lbWJlclN1cHBvcnQgPSBgICAvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtbWVtYmVyc1xuICBwcml2YXRlIHN0YXRpYyBmaW5hbCBqYXZhLnV0aWwuQXJyYXlMaXN0PFN0cmluZz4gX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZSA9IG5ldyBqYXZhLnV0aWwuQXJyYXlMaXN0PD4oKTtcbiAgc3RhdGljIGludCBwcm9iZUVmZmVjdChTdHJpbmcgbGFiZWwsIGludCB2YWx1ZSwgYm9vbGVhbiBmYWlsKSB7IF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2UuYWRkKFwiZWZmZWN0OlwiICsgbGFiZWwpOyBpZiAoZmFpbCkgdGhyb3cgbmV3IFByb2JlT3BlcmF0aW9uRmFpbHVyZSgpOyByZXR1cm4gdmFsdWU7IH1cbiAgc3RhdGljIFByb2JlUmVzb3VyY2UgcHJvYmVBY3F1aXJlKGJvb2xlYW4gZmFpbCkgeyBfX3NlbWFudGlmb2xkVGFzazAzNFRyYWNlLmFkZChcImFjcXVpcmVcIik7IGlmIChmYWlsKSB0aHJvdyBuZXcgUHJvYmVBY3F1aXJlRmFpbHVyZSgpOyB0cnkgeyByZXR1cm4gbmV3IFByb2JlUmVzb3VyY2UoamF2YS5uaW8uY2hhbm5lbHMuRmlsZUNoYW5uZWwub3BlbihqYXZhLm5pby5maWxlLlBhdGgub2YoU3lzdGVtLmdldGVudihcIlNFTUFOVElGT0xEX1RBU0swMzRfUFJPQkVfUEFUSFwiKSkpKTsgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiB8IGphdmEuaW8uSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7IHRocm93IG5ldyBQcm9iZUFjcXVpcmVGYWlsdXJlKCk7IH0gfVxuICBzdGF0aWMgamF2YS51dGlsLk9wdGlvbmFsPFN0cmluZz4gcHJvYmVSZWFkKFByb2JlUmVzb3VyY2UgcmVzb3VyY2UsIGJvb2xlYW4gZmFpbCkgeyBpZiAocmVzb3VyY2UuY2xvc2VkKSB0aHJvdyBuZXcgUHJvYmVSZXNvdXJjZUNsb3NlZCgpOyBfX3NlbWFudGlmb2xkVGFzazAzNFRyYWNlLmFkZChcInJlYWRcIik7IGlmIChmYWlsKSB0aHJvdyBuZXcgUHJvYmVSZWFkRmFpbHVyZSgpOyB0cnkgeyBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSBieXRlcyA9IG5ldyBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOyBqYXZhLm5pby5CeXRlQnVmZmVyIGJ1ZmZlciA9IGphdmEubmlvLkJ5dGVCdWZmZXIuYWxsb2NhdGUoMSk7IHdoaWxlICh0cnVlKSB7IGJ1ZmZlci5jbGVhcigpOyBpbnQgY291bnQgPSByZXNvdXJjZS5oYW5kbGUucmVhZChidWZmZXIpOyBpZiAoY291bnQgPCAwKSByZXR1cm4gYnl0ZXMuc2l6ZSgpID09IDAgPyBqYXZhLnV0aWwuT3B0aW9uYWwuZW1wdHkoKSA6IGphdmEudXRpbC5PcHRpb25hbC5vZihieXRlcy50b1N0cmluZyhqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpKTsgYnVmZmVyLmZsaXAoKTsgYnl0ZSB2YWx1ZSA9IGJ1ZmZlci5nZXQoKTsgaWYgKHZhbHVlID09IDEwKSByZXR1cm4gamF2YS51dGlsLk9wdGlvbmFsLm9mKGJ5dGVzLnRvU3RyaW5nKGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCkucmVwbGFjZUZpcnN0KFwiXFxcXHIkXCIsIFwiXCIpKTsgYnl0ZXMud3JpdGUodmFsdWUpOyB9IH0gY2F0Y2ggKGphdmEuaW8uSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7IHRocm93IG5ldyBQcm9iZVJlYWRGYWlsdXJlKCk7IH0gfVxuICBzdGF0aWMgdm9pZCBwcm9iZUNsb3NlKFByb2JlUmVzb3VyY2UgcmVzb3VyY2UsIGJvb2xlYW4gZmFpbCkgeyBpZiAocmVzb3VyY2UuY2xvc2VkKSB0aHJvdyBuZXcgUHJvYmVSZXNvdXJjZUNsb3NlZCgpOyBfX3NlbWFudGlmb2xkVGFzazAzNFRyYWNlLmFkZChcImNsb3NlXCIpOyB0cnkgeyByZXNvdXJjZS5oYW5kbGUuY2xvc2UoKTsgfSBjYXRjaCAoamF2YS5pby5JT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsgcmVzb3VyY2UuY2xvc2VkID0gdHJ1ZTsgdGhyb3cgbmV3IFByb2JlQ2xvc2VGYWlsdXJlKCk7IH0gcmVzb3VyY2UuY2xvc2VkID0gdHJ1ZTsgaWYgKGZhaWwpIHRocm93IG5ldyBQcm9iZUNsb3NlRmFpbHVyZSgpOyB9XG4gIHN0YXRpYyBTdHJpbmcgcHJvYmVUcmFjZSgpIHsgcmV0dXJuIFN0cmluZy5qb2luKFwiLFwiLCBfX3NlbWFudGlmb2xkVGFzazAzNFRyYWNlKTsgfVxuICAvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtbWVtYmVycy1lbmRcblxuYFxuXG5jb25zdCBqYXZhUHJvZ3JhbU5lc3RlZFN1cHBvcnQgPSBgICAvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtcHJvZ3JhbVxuICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFByb2JlT3BlcmF0aW9uRmFpbHVyZSBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24geyBQcm9iZU9wZXJhdGlvbkZhaWx1cmUoKSB7IHN1cGVyKFwiUHJvYmVPcGVyYXRpb25GYWlsdXJlXCIpOyB9IH1cbiAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBQcm9iZUFjcXVpcmVGYWlsdXJlIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7IFByb2JlQWNxdWlyZUZhaWx1cmUoKSB7IHN1cGVyKFwiUHJvYmVBY3F1aXJlRmFpbHVyZVwiKTsgfSB9XG4gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgUHJvYmVSZWFkRmFpbHVyZSBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24geyBQcm9iZVJlYWRGYWlsdXJlKCkgeyBzdXBlcihcIlByb2JlUmVhZEZhaWx1cmVcIik7IH0gfVxuICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFByb2JlQ2xvc2VGYWlsdXJlIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7IFByb2JlQ2xvc2VGYWlsdXJlKCkgeyBzdXBlcihcIlByb2JlQ2xvc2VGYWlsdXJlXCIpOyB9IH1cbiAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBQcm9iZVJlc291cmNlQ2xvc2VkIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7IFByb2JlUmVzb3VyY2VDbG9zZWQoKSB7IHN1cGVyKFwiUHJvYmVSZXNvdXJjZUNsb3NlZFwiKTsgfSB9XG4gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgUHJvYmVSZXNvdXJjZSB7IGZpbmFsIGphdmEubmlvLmNoYW5uZWxzLkZpbGVDaGFubmVsIGhhbmRsZTsgYm9vbGVhbiBjbG9zZWQgPSBmYWxzZTsgUHJvYmVSZXNvdXJjZShqYXZhLm5pby5jaGFubmVscy5GaWxlQ2hhbm5lbCBoYW5kbGUpIHsgdGhpcy5oYW5kbGUgPSBoYW5kbGU7IH0gfVxuICAvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtcHJvZ3JhbS1lbmRcblxuYFxuXG4vKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG5jb25zdCBqYXZhUHJvdmlkZXJTaGltcyA9IHtcbiAgcHJvYmVBY3F1aXJlOiBcInB1YmxpYyBzdGF0aWMgUHJvYmVSZXNvdXJjZSBfX3NlbWFudGlmb2xkX3Byb3ZpZGVyX2phdmFfcHJvYmVBY3F1aXJlKGJvb2xlYW4gZmFpbCkgeyByZXR1cm4gcHJvYmVBY3F1aXJlKGZhaWwpOyB9XCIsXG4gIHByb2JlQ2xvc2U6IFwicHVibGljIHN0YXRpYyB2b2lkIF9fc2VtYW50aWZvbGRfcHJvdmlkZXJfamF2YV9wcm9iZUNsb3NlKFByb2JlUmVzb3VyY2UgcmVzb3VyY2UsIGJvb2xlYW4gZmFpbCkgeyBwcm9iZUNsb3NlKHJlc291cmNlLCBmYWlsKTsgfVwiLFxuICBwcm9iZUVmZmVjdDogXCJwdWJsaWMgc3RhdGljIGludCBfX3NlbWFudGlmb2xkX3Byb3ZpZGVyX2phdmFfcHJvYmVFZmZlY3QoU3RyaW5nIGxhYmVsLCBpbnQgdmFsdWUsIGJvb2xlYW4gZmFpbCkgeyByZXR1cm4gcHJvYmVFZmZlY3QobGFiZWwsIHZhbHVlLCBmYWlsKTsgfVwiLFxuICBwcm9iZVJlYWQ6IFwicHVibGljIHN0YXRpYyBqYXZhLnV0aWwuT3B0aW9uYWw8U3RyaW5nPiBfX3NlbWFudGlmb2xkX3Byb3ZpZGVyX2phdmFfcHJvYmVSZWFkKFByb2JlUmVzb3VyY2UgcmVzb3VyY2UsIGJvb2xlYW4gZmFpbCkgeyByZXR1cm4gcHJvYmVSZWFkKHJlc291cmNlLCBmYWlsKTsgfVwiLFxuICBwcm9iZVRyYWNlOiBcInB1YmxpYyBzdGF0aWMgU3RyaW5nIF9fc2VtYW50aWZvbGRfcHJvdmlkZXJfamF2YV9wcm9iZVRyYWNlKCkgeyByZXR1cm4gcHJvYmVUcmFjZSgpOyB9XCJcbn1cbiJdfQ==
|
|
749
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kcy9lZmZlY3RzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0RCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQTtBQUVsRSxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ25GLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDakMsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsMkJBQTJCLEVBQUUseUJBQXlCO0NBQ3JHLENBQUMsQ0FBQTtBQUNGLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEMsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsZUFBZTtJQUMvSCxhQUFhLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsWUFBWTtDQUN2RSxDQUFDLENBQUE7QUFFRixzR0FBc0c7QUFDdEcsMEdBQTBHO0FBRTFHOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLDJCQUEyQixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxHQUFHLEVBQUU7SUFDeEUsTUFBTSxZQUFZLEdBQUcsTUFBTSxFQUFFLFlBQVksQ0FBQTtJQUV6QyxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMvQixNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFNUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsaUZBQWlGO1lBQy9HLHdFQUF3RSxD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Q0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDakUsT0FBTyxFQUFFLENBQUE7QUFDWCxDQUFDO0FBRUQsTUFBTSxVQUFVLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBK0NsQixDQUFBO0FBRUQsTUFBTSxXQUFXLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBc0NuQixDQUFBO0FBRUQsTUFBTSxpQkFBaUIsR0FBRzs7Ozs7Ozs7Ozs7Ozs7OztDQWdCekIsQ0FBQTtBQUVELE1BQU0saUJBQWlCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQnpCLENBQUE7QUFFRCxNQUFNLGNBQWMsR0FBRzs7Ozs7Ozs7O0NBU3RCLENBQUE7QUFFRCxNQUFNLGlCQUFpQixHQUFHOzs7Ozs7Ozs7Q0FTekIsQ0FBQTtBQUVELE1BQU0sd0JBQXdCLEdBQUc7Ozs7Ozs7OztDQVNoQyxDQUFBO0FBRUQscUNBQXFDO0FBQ3JDLE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsWUFBWSxFQUFFLG1IQUFtSDtJQUNqSSxVQUFVLEVBQUUsaUlBQWlJO0lBQzdJLFdBQVcsRUFBRSw4SUFBOEk7SUFDM0osU0FBUyxFQUFFLDRKQUE0SjtJQUN2SyxVQUFVLEVBQUUsd0ZBQXdGO0NBQ3JHLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHt1bnN1cHBvcnRlZENhcGFiaWxpdHl9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7aXNUYXNrMDM0UmVzb3VyY2VQcm9iZX0gZnJvbSBcIi4uL3NlbWFudGljL2NhcGFiaWxpdGllcy5qc1wiXG5cbmNvbnN0IGFkb3B0ZWRUYXJnZXRzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAzN0F1dGhvcml0aWVzID0gbmV3IFNldChbXG4gIFwic2VtYW50aWZvbGQub3V0cHV0XCIsIFwic2VtYW50aWZvbGQucmVzb3VyY2VcIiwgXCJzZW1hbnRpZm9sZC5zb2NrZXQtY2xpZW50XCIsIFwic2VtYW50aWZvbGQudGV4dC1zdHJlYW1cIlxuXSlcbmNvbnN0IHByb3RlY3RlZFN1cHBvcnROYW1lcyA9IG5ldyBTZXQoW1xuICBcIlByb2JlT3BlcmF0aW9uRmFpbHVyZVwiLCBcIlByb2JlQWNxdWlyZUZhaWx1cmVcIiwgXCJQcm9iZVJlYWRGYWlsdXJlXCIsIFwiUHJvYmVDbG9zZUZhaWx1cmVcIiwgXCJQcm9iZVJlc291cmNlQ2xvc2VkXCIsIFwiUHJvYmVSZXNvdXJjZVwiLFxuICBcInByb2JlRWZmZWN0XCIsIFwicHJvYmVBY3F1aXJlXCIsIFwicHJvYmVSZWFkXCIsIFwicHJvYmVDbG9zZVwiLCBcInByb2JlVHJhY2VcIlxuXSlcblxuLyoqIEB0eXBlZGVmIHt7ZXhwcmVzc2lvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbiwgcGF0aDogc3RyaW5nfX0gRXhwcmVzc2lvblBhdGggKi9cbi8qKiBAdHlwZWRlZiB7e2RldGFpbDogc3RyaW5nLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259fSBFeGNsdWRlZEVmZmVjdCAqL1xuXG4vKipcbiAqIFZhbGlkYXRlcyBUYXNrIDAzNCB0YXJnZXQgc3VwcG9ydCBiZWZvcmUgYSBTb3VyY2VXcml0ZXIgaXMgYWxsb2NhdGVkLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQ2FuZGlkYXRlIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFJlcXVlc3RlZCB0YXJnZXQuXG4gKiBAcGFyYW0ge3t1c2VkT3BlcmF0aW9ucz86IHJlYWRvbmx5IHN0cmluZ1tdfX0gW29wdGlvbnNdIC0gUHJvZ3JhbS13aWRlIHVzZWQgY2Fub25pY2FsXG4gKiAgIG9wZXJhdGlvbnMgZm9yIGEgbGlua2VkIHN0ZGxpYiBwcm92aWRlcjsgcmVzdHJpY3RzIHRoZSByZXNlcnZlZCBzdXBwb3J0IHN1cmZhY2UgdG8gdGhlXG4gKiAgIG9wZXJhdGlvbnMgYWN0dWFsbHkgbWF0ZXJpYWxpemVkIGluIHRoZSBwcm92aWRlciBhcnRpZmFjdC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlZmxpZ2h0RWZmZWN0Q2FwYWJpbGl0aWVzKG1vZHVsZSwgbGFuZ3VhZ2UsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBjYXBhYmlsaXRpZXMgPSBtb2R1bGU/LmNhcGFiaWxpdGllc1xuXG4gIGlmIChjYXBhYmlsaXRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHVuYXV0aG9yaXplZCA9IGZpbmRUYXNrMDM0Tm9kZShtb2R1bGUpXG5cbiAgICBpZiAodW5hdXRob3JpemVkKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiTUlTU0lOR19DQVBBQklMSVRZX0FVVEhPUklUWTogVGFzayAwMzQgSVIgcmVxdWlyZXMgaXRzIGNvbXBpbGVyIGF1dGhvcml0eSBncmFwaFwiLFxuICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSAqLyAoUmVmbGVjdC5nZXQodW5hdXRob3JpemVkLCBcImxvY2F0aW9uXCIpID8/IG1vZHVsZT8ubG9jYXRpb24pKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoIUFycmF5LmlzQXJyYXkoY2FwYWJpbGl0aWVzKSB8fCBjYXBhYmlsaXRpZXMubGVuZ3RoID09IDApIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIG9yIGVtcHR5IFRhc2sgMDM0IGNhcGFiaWxpdHkgZ3JhcGhcIiwgbW9kdWxlPy5sb2NhdGlvbilcbiAgfVxuICBpZiAoIWFkb3B0ZWRUYXJnZXRzLmhhcyhsYW5ndWFnZSkpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMzQgZWZmZWN0ZnVsIGNhcGFiaWxpdGllcyBhbmQgb3duZWQgcmVzb3VyY2VzXCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBjb25zdCB0YXNrMDM3ID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiAmJiBjYXBhYmlsaXRpZXMuZXZlcnkoKGNhcGFiaWxpdHkpID0+IHRhc2swMzdBdXRob3JpdGllcy5oYXMoY2FwYWJpbGl0eS5hdXRob3JpdHlJZCkpXG5cbiAgaWYgKCFpc1Rhc2swMzRSZXNvdXJjZVByb2JlKGNhcGFiaWxpdGllcykgJiYgIXRhc2swMzcpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwidW5ib3VuZCBUYXNrIDAzNCBjYXBhYmlsaXR5IGF1dGhvcml0eVwiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKCFBcnJheS5pc0FycmF5KG1vZHVsZS5mdW5jdGlvbnMpIHx8ICFtb2R1bGUuZW50cnlQb2ludCB8fCB0eXBlb2YgbW9kdWxlLmVudHJ5UG9pbnQgIT0gXCJvYmplY3RcIiB8fFxuICAgICFtb2R1bGUuZW50cnlQb2ludC5ib2R5IHx8ICFBcnJheS5pc0FycmF5KG1vZHVsZS5lbnRyeVBvaW50LmJvZHkuc3RhdGVtZW50cykgfHxcbiAgICBbbW9kdWxlLnJlY29yZHMsIG1vZHVsZS5jbGFzc2VzLCBtb2R1bGUuZXJyb3JzXS5zb21lKChkZWNsYXJhdGlvbnMpID0+IGRlY2xhcmF0aW9ucyAhPT0gdW5kZWZpbmVkICYmICFBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9ucykpKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBUYXNrIDAzNCBzZW1hbnRpYyBtb2R1bGVcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGNvbGxpc2lvbiA9IG1vZHVsZU5lZWRzRWZmZWN0U3VwcG9ydChtb2R1bGUpID8gZmluZFN1cHBvcnRDb2xsaXNpb24obW9kdWxlLCBsYW5ndWFnZSwgb3B0aW9ucy51c2VkT3BlcmF0aW9ucykgOiB1bmRlZmluZWRcblxuICBpZiAoY29sbGlzaW9uKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBwcm90ZWN0ZWQgVGFzayAwMzQgc3VwcG9ydCBuYW1lICcke2NvbGxpc2lvbi5uYW1lfSdgLCBjb2xsaXNpb24ubG9jYXRpb24pXG4gIGNvbnN0IGV4Y2x1ZGVkID0gZmluZEV4Y2x1ZGVkRWZmZWN0Q29udGV4dChtb2R1bGUpXG4gIGlmIChleGNsdWRlZCkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBleGNsdWRlZC5kZXRhaWwsIGV4Y2x1ZGVkLmxvY2F0aW9uKVxufVxuXG4vKipcbiAqIEZpbmRzIGNvbXBpbGVyLWF1dGhvcml6ZWQgVGFzayAwMzQgSVIgdGhhdCBoYXMgYmVlbiBkZXRhY2hlZCBmcm9tIGl0cyBhdXRob3JpdHkgZ3JhcGguXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ2FuZGlkYXRlIHNlbWFudGljIGdyYXBoLlxuICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW3NlZW5dIC0gQ3ljbGUgcHJvdGVjdGlvbi5cbiAqIEByZXR1cm5zIHtvYmplY3QgfCB1bmRlZmluZWR9IEZpcnN0IHVuYXV0aG9yaXplZCBUYXNrIDAzNCBub2RlLlxuICovXG5mdW5jdGlvbiBmaW5kVGFzazAzNE5vZGUodmFsdWUsIHNlZW4gPSBuZXcgU2V0KCkpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIiB8fCBzZWVuLmhhcyh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWRcbiAgc2Vlbi5hZGQodmFsdWUpXG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBjb25zdCBraW5kID0gUmVmbGVjdC5nZXQodmFsdWUsIFwia2luZFwiKVxuXG4gICAgaWYgKFtcIkVmZmVjdENhbGxFeHByZXNzaW9uXCIsIFwiT3duZWRCb3Jyb3dFeHByZXNzaW9uXCIsIFwiT3duZWRNb3ZlRXhwcmVzc2lvblwiLCBcIk93bmVkUmVmZXJlbmNlVHlwZVwiLCBcIk93bmVkUmVzb3VyY2VUeXBlXCJdLmluY2x1ZGVzKFN0cmluZyhraW5kKSkgfHxcbiAgICAgIGtpbmQgPT0gXCJFcnJvclR5cGVcIiAmJiAvXmNhcGFiaWxpdHk6WzAtOV0rXFwvZmFpbHVyZTpbMC05XSskL3UudGVzdChTdHJpbmcoUmVmbGVjdC5nZXQodmFsdWUsIFwiZGVjbGFyYXRpb25JZFwiKSkpKSByZXR1cm4gdmFsdWVcbiAgfVxuICBmb3IgKGNvbnN0IFtrZXksIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICBpZiAoW1wibG9jYXRpb25cIiwgXCJzb3VyY2VQcm92ZW5hbmNlXCJdLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlXG4gICAgY29uc3QgZm91bmQgPSBmaW5kVGFzazAzNE5vZGUoY2hpbGQsIHNlZW4pXG4gICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmRcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogRmluZHMgb25lIHVzZXIgZGVjbGFyYXRpb24gdGhhdCB3b3VsZCBjb2xsaWRlIHdpdGggdGhlIHByb3RlY3RlZCBzdXBwb3J0IHN1cmZhY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBWYWxpZGF0ZWQgc2VtYW50aWMgZ3JhcGguXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IHN0cmluZ1tdfSBbdXNlZE9wZXJhdGlvbnNdIC0gTGlua2VkIHByb3ZpZGVyIG9wZXJhdGlvbnM7IG9taXR0ZWQgZm9yIHRoZSBmdWxsIGlubGluZWQgc3VyZmFjZS5cbiAqIEByZXR1cm5zIHt7bmFtZTogc3RyaW5nLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IHwgdW5kZWZpbmVkfSBGaXJzdCBjb2xsaXNpb24uXG4gKi9cbmZ1bmN0aW9uIGZpbmRTdXBwb3J0Q29sbGlzaW9uKG1vZHVsZSwgbGFuZ3VhZ2UsIHVzZWRPcGVyYXRpb25zKSB7XG4gIGNvbnN0IHJlc2VydmVkID0gbmV3IFNldCgpXG5cbiAgaWYgKHVzZWRPcGVyYXRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgcHJvdGVjdGVkU3VwcG9ydE5hbWVzKSByZXNlcnZlZC5hZGQoc3VwcG9ydE5hbWVLZXkobmFtZSwgbGFuZ3VhZ2UpKVxuICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIikge1xuICAgICAgcmVzZXJ2ZWQuYWRkKFwiX19zZW1hbnRpZm9sZFRhc2swMzRGc1wiKVxuICAgICAgcmVzZXJ2ZWQuYWRkKFwiX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZVwiKVxuICAgIH0gZWxzZSBpZiAobGFuZ3VhZ2UgPT0gXCJwaHBcIikgcmVzZXJ2ZWQuYWRkKFwiX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlXCIpXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdXNlZCA9IG5ldyBTZXQodXNlZE9wZXJhdGlvbnMpXG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgdXNlZCkgcmVzZXJ2ZWQuYWRkKHN1cHBvcnROYW1lS2V5KG5hbWUsIGxhbmd1YWdlKSlcbiAgICBpZiAodXNlZC5oYXMoXCJwcm9iZUVmZmVjdFwiKSkgcmVzZXJ2ZWQuYWRkKHN1cHBvcnROYW1lS2V5KFwiUHJvYmVPcGVyYXRpb25GYWlsdXJlXCIsIGxhbmd1YWdlKSlcbiAgICBpZiAodXNlZC5oYXMoXCJwcm9iZUFjcXVpcmVcIikpIHJlc2VydmVkLmFkZChzdXBwb3J0TmFtZUtleShcIlByb2JlQWNxdWlyZUZhaWx1cmVcIiwgbGFuZ3VhZ2UpKVxuICAgIGlmICh1c2VkLmhhcyhcInByb2JlUmVhZFwiKSkgcmVzZXJ2ZWQuYWRkKHN1cHBvcnROYW1lS2V5KFwiUHJvYmVSZWFkRmFpbHVyZVwiLCBsYW5ndWFnZSkpXG4gICAgaWYgKHVzZWQuaGFzKFwicHJvYmVDbG9zZVwiKSkgcmVzZXJ2ZWQuYWRkKHN1cHBvcnROYW1lS2V5KFwiUHJvYmVDbG9zZUZhaWx1cmVcIiwgbGFuZ3VhZ2UpKVxuICAgIGlmICh1c2VkLmhhcyhcInByb2JlUmVhZFwiKSB8fCB1c2VkLmhhcyhcInByb2JlQ2xvc2VcIikpIHJlc2VydmVkLmFkZChzdXBwb3J0TmFtZUtleShcIlByb2JlUmVzb3VyY2VDbG9zZWRcIiwgbGFuZ3VhZ2UpKVxuICAgIGlmICh1c2VkLmhhcyhcInByb2JlQWNxdWlyZVwiKSB8fCB1c2VkLmhhcyhcInByb2JlUmVhZFwiKSB8fCB1c2VkLmhhcyhcInByb2JlQ2xvc2VcIikpIHtcbiAgICAgIHJlc2VydmVkLmFkZChzdXBwb3J0TmFtZUtleShcIlByb2JlUmVzb3VyY2VcIiwgbGFuZ3VhZ2UpKVxuICAgIH1cbiAgICBpZiAodXNlZC5zaXplID4gMCkge1xuICAgICAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiKSB7XG4gICAgICAgIHJlc2VydmVkLmFkZChcIl9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2VcIilcbiAgICAgICAgaWYgKHVzZWQuaGFzKFwicHJvYmVBY3F1aXJlXCIpKSByZXNlcnZlZC5hZGQoXCJfX3NlbWFudGlmb2xkVGFzazAzNEZzXCIpXG4gICAgICB9IGVsc2UgaWYgKGxhbmd1YWdlID09IFwicGhwXCIpIHJlc2VydmVkLmFkZChcIl9fc2VtYW50aWZvbGRfdGFzazAzNF90cmFjZVwiKVxuICAgIH1cbiAgfVxuICBjb25zdCBkZWNsYXJhdGlvbnMgPSBbLi4ubW9kdWxlLnJlY29yZHMgPz8gW10sIC4uLm1vZHVsZS5jbGFzc2VzID8/IFtdLCAuLi5tb2R1bGUuZXJyb3JzID8/IFtdLCAuLi5tb2R1bGUuZnVuY3Rpb25zXVxuXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgZGVjbGFyYXRpb25zKSB7XG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCB0eXBlb2YgZGVjbGFyYXRpb24gIT0gXCJvYmplY3RcIikgY29udGludWVcbiAgICBpZiAocmVzZXJ2ZWQuaGFzKHN1cHBvcnROYW1lS2V5KGRlY2xhcmF0aW9uLm5hbWUsIGxhbmd1YWdlKSkpIHJldHVybiB7bG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLCBuYW1lOiBkZWNsYXJhdGlvbi5uYW1lfVxuICB9XG4gIGlmIChsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInBocFwiKSB7XG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgbW9kdWxlLmVudHJ5UG9pbnQuYm9keS5zdGF0ZW1lbnRzKSB7XG4gICAgICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIpIGNvbnRpbnVlXG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgJiYgcmVzZXJ2ZWQuaGFzKHN1cHBvcnROYW1lS2V5KHN0YXRlbWVudC5uYW1lLCBsYW5ndWFnZSkpKSB7XG4gICAgICAgIHJldHVybiB7bG9jYXRpb246IHN0YXRlbWVudC5sb2NhdGlvbiwgbmFtZTogc3RhdGVtZW50Lm5hbWV9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBBcHBsaWVzIHRhcmdldCBuYW1lc3BhY2UgY2FzaW5nIHRvIGEgcHJvdGVjdGVkIHN1cHBvcnQgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gU291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBDb21wYXJhYmxlIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIHN1cHBvcnROYW1lS2V5KG5hbWUsIGxhbmd1YWdlKSB7XG4gIHJldHVybiBsYW5ndWFnZSA9PSBcInBocFwiID8gbmFtZS50b0xvd2VyQ2FzZSgpIDogbmFtZVxufVxuXG4vKipcbiAqIEVtaXRzIGZpeGVkIHRhcmdldC1wcml2YXRlIFRhc2sgMDM0IGNvbmZvcm1hbmNlIHN1cHBvcnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gRGVzdGluYXRpb24gd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQXV0aG9yaXplZCBtb2R1bGUuXG4gKiBAcGFyYW0ge1wicGhwXCIgfCBcInJ1YnlcIiB8IFwiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCIgfCBcImphdmFcIn0gbGFuZ3VhZ2UgLSBBZG9wdGVkIHRhcmdldC5cbiAqIEBwYXJhbSB7XCJ0b3BcIiB8IFwibWVtYmVyc1wifSBbcGxhY2VtZW50XSAtIEphdmEgc3VwcG9ydCBwbGFjZW1lbnQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtaXRFZmZlY3RTdXBwb3J0KHdyaXRlciwgbW9kdWxlLCBsYW5ndWFnZSwgcGxhY2VtZW50ID0gXCJ0b3BcIikge1xuICBjb25zdCBsaW5rZWQgPSB3cml0ZXIuc3RkbGliUHJvdmlkZXJFbnRyaWVzICE9PSB1bmRlZmluZWRcblxuICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgbGlua2VkKSB7XG4gICAgaWYgKHBsYWNlbWVudCAhPSBcIm1lbWJlcnNcIiB8fCB3cml0ZXIuc3RkbGliUHJvdmlkZXJTaGltcyA9PT0gdW5kZWZpbmVkKSByZXR1cm5cbiAgfSBlbHNlIGlmIChsaW5rZWQgfHwgIW1vZHVsZS5jYXBhYmlsaXRpZXMgfHwgIW1vZHVsZU5lZWRzRWZmZWN0U3VwcG9ydChtb2R1bGUpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgY29uc3QgY29udGVudCA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBwaHBTdXBwb3J0IDogbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBydWJ5U3VwcG9ydCA6IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiID8gamF2YXNjcmlwdFN1cHBvcnQgOlxuICAgIGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiID8gdHlwZXNjcmlwdFN1cHBvcnQgOlxuICAgIHdyaXRlci5zdGRsaWJQcm92aWRlclNoaW1zICE9PSB1bmRlZmluZWQgPyBqYXZhUHJvZ3JhbU5lc3RlZFN1cHBvcnQgKyBqYXZhTWVtYmVyU3VwcG9ydCA6XG4gICAgcGxhY2VtZW50ID09IFwidG9wXCIgPyBqYXZhVG9wU3VwcG9ydCA6IGphdmFNZW1iZXJTdXBwb3J0XG5cbiAgd3JpdGVyLnN5bnRoZXRpYyhjb250ZW50LCBcInNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydFwiLCBbbW9kdWxlXSlcbn1cblxuLyoqXG4gKiBFbWl0cyB0aGUgcHVibGljIHN0YXRpYyBwcm92aWRlciBzaGltcyBmb3IgdGhlIHByb2dyYW0td2lkZSB1c2VkIG9wZXJhdGlvbnMgb24gdGhlIEphdmEgb3duZXIgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIERlc3RpbmF0aW9uIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIE93bmVyIG1vZHVsZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdEVmZmVjdFByb3ZpZGVyRW50cmllcyh3cml0ZXIsIG1vZHVsZSkge1xuICBjb25zdCBvcGVyYXRpb25zID0gd3JpdGVyLnN0ZGxpYlByb3ZpZGVyU2hpbXMgPz8gW11cblxuICBpZiAob3BlcmF0aW9ucy5sZW5ndGggPT0gMCkgcmV0dXJuXG4gIGNvbnN0IGxpbmVzID0gb3BlcmF0aW9ucy5tYXAoKG9wZXJhdGlvbikgPT4gYCAgJHtqYXZhUHJvdmlkZXJTaGltc1tvcGVyYXRpb25dfWApXG5cbiAgd3JpdGVyLnN5bnRoZXRpYyhgJHtsaW5lcy5qb2luKFwiXFxuXCIpfVxcblxcbmAsIFwic2VtYW50aWZvbGQtc3RkbGliLXByb3ZpZGVyLWVudHJpZXNcIiwgW21vZHVsZV0pXG59XG5cbi8qKlxuICogUmVjb2duaXplcyBvbmx5IHRoZSBieXRlLWV4YWN0IHByb3RlY3RlZCBzdXBwb3J0IGVtaXR0ZWQgYnkgdGhpcyBiYWNrZW5kLlxuICogRnJvbnRlbmRzIHVzZSB0aGlzIGluIGFkZGl0aW9uIHRvIHBhcnNlci1zaGFwZSBjaGVja3MgZHVyaW5nIGdlbmVyYXRlZC1zb3VyY2UgcmVwYXJzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBjYW5kaWRhdGUgc291cmNlLlxuICogQHBhcmFtIHtcInBocFwiIHwgXCJydWJ5XCIgfCBcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwiIHwgXCJqYXZhXCJ9IGxhbmd1YWdlIC0gQWRvcHRlZCB0YXJnZXQuXG4gKiBAcGFyYW0ge1widG9wXCIgfCBcIm1lbWJlcnNcIn0gW3BsYWNlbWVudF0gLSBKYXZhIHN1cHBvcnQgcGxhY2VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGV4YWN0IHByb3RlY3RlZCBzZWdtZW50IGlzIHByZXNlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNFeGFjdEVmZmVjdFN1cHBvcnQoc291cmNlLCBsYW5ndWFnZSwgcGxhY2VtZW50ID0gXCJ0b3BcIikge1xuICBjb25zdCBjb250ZW50ID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IHBocFN1cHBvcnQgOiBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IHJ1YnlTdXBwb3J0IDogbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgPyBqYXZhc2NyaXB0U3VwcG9ydCA6XG4gICAgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyB0eXBlc2NyaXB0U3VwcG9ydCA6IHBsYWNlbWVudCA9PSBcInRvcFwiID8gamF2YVRvcFN1cHBvcnQgOiBqYXZhTWVtYmVyU3VwcG9ydFxuXG4gIHJldHVybiBzb3VyY2UuaW5jbHVkZXMoY29udGVudClcbn1cblxuLyoqXG4gKiBNYXRlcmlhbGl6ZXMgbmVzdGVkIGVmZmVjdCBzaXRlcyBiZWZvcmUgdGhlaXIgZW5jbG9zaW5nIGVhZ2VyIGV4cHJlc3Npb24uXG4gKiBUaGUgaW5zdGFsbGVkIHJlcGxhY2VtZW50cyByZW1haW4gYWN0aXZlIHVudGlsIHRoZSBuZXh0IHN0YXRlbWVudCBiZWdpbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gRGVzdGluYXRpb24gd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnR9IHN0YXRlbWVudCAtIEN1cnJlbnQgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCAtIEN1cnJlbnQgdGFyZ2V0IGluZGVudGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBFeGFjdCBzdGF0ZW1lbnQgcGF0aC5cbiAqIEBwYXJhbSB7XCJwaHBcIiB8IFwicnVieVwiIHwgXCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIiB8IFwiamF2YVwifSBsYW5ndWFnZSAtIEFkb3B0ZWQgdGFyZ2V0LlxuICogQHBhcmFtIHsoZXhwcmVzc2lvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbiwgcGF0aDogc3RyaW5nKSA9PiB2b2lkfSBlbWl0IC0gVGFyZ2V0IGV4cHJlc3Npb24gZW1pdHRlci5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdEVmZmVjdFByZWZpeGVzKHdyaXRlciwgc3RhdGVtZW50LCBpbmRlbnQsIHBhdGgsIGxhbmd1YWdlLCBlbWl0KSB7XG4gIC8qKiBAdHlwZSB7RXhwcmVzc2lvblBhdGhbXX0gKi9cbiAgY29uc3QgcGxhbm5lZCA9IFtdXG5cbiAgZm9yIChjb25zdCByb290IG9mIHN0YXRlbWVudEV4cHJlc3Npb25Sb290cyhzdGF0ZW1lbnQsIHBhdGgpKSBjb2xsZWN0TmVzdGVkRWZmZWN0cyhyb290LmV4cHJlc3Npb24sIHJvb3QucGF0aCwgcm9vdC5leHByZXNzaW9uLCBwbGFubmVkKVxuICB3cml0ZXIucGxhbkVmZmVjdFJlcGxhY2VtZW50cyhwbGFubmVkLm1hcCgoe2V4cHJlc3Npb259KSA9PiBleHByZXNzaW9uKSlcbiAgZm9yIChjb25zdCB7ZXhwcmVzc2lvbiwgcGF0aDogZXhwcmVzc2lvblBhdGh9IG9mIHBsYW5uZWQpIHtcbiAgICBjb25zdCBuYW1lID0gd3JpdGVyLmVmZmVjdFRlbXBvcmFyeU5hbWUoZXhwcmVzc2lvbilcbiAgICBjb25zdCB0eXBlID0gZWZmZWN0RXhwcmVzc2lvblR5cGUod3JpdGVyLCBleHByZXNzaW9uKVxuICAgIGNvbnN0IHR5cGVOYW1lID0gZW1pdHRlZFR5cGVOYW1lKHdyaXRlciwgdHlwZSwgbGFuZ3VhZ2UpXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBsYW5ndWFnZSA9PSBcInBocFwiXG4gICAgICA/IGAvKipcXG4ke2luZGVudH0gKiBAdmFyICR7dHlwZU5hbWV9ICQke25hbWV9XFxuJHtpbmRlbnR9ICogQHNlbWFudGlmb2xkLWltbXV0YWJsZVxcbiR7aW5kZW50fSAqL1xcbiR7aW5kZW50fSQke25hbWV9ID0gYFxuICAgICAgOiBsYW5ndWFnZSA9PSBcInJ1YnlcIlxuICAgICAgICA/IGAjIEB0eXBlIFske3R5cGVOYW1lfV1cXG4ke2luZGVudH0jIEBzZW1hbnRpZm9sZC1pbW11dGFibGVcXG4ke2luZGVudH0ke25hbWV9ID0gYFxuICAgICAgICA6IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiID8gYC8qKiBAdHlwZSB7JHt0eXBlTmFtZX19ICovXFxuJHtpbmRlbnR9Y29uc3QgJHtuYW1lfSA9IGBcbiAgICAgICAgICA6IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiID8gYGNvbnN0ICR7bmFtZX06ICR7dHlwZU5hbWV9ID0gYCA6IGBmaW5hbCAke3R5cGVOYW1lfSAke25hbWV9ID0gYFxuXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhgJHtpbmRlbnR9JHtkZWNsYXJhdGlvbn1gLCBcImV4YWN0bHktb25jZSBlZmZlY3QgdGVtcG9yYXJ5XCIsIFtleHByZXNzaW9uXSwgW2V4cHJlc3Npb25QYXRoXSlcbiAgICB3cml0ZXIuZW1pdEVmZmVjdERlZmluaXRpb24oZXhwcmVzc2lvbiwgKCkgPT4gZW1pdChleHByZXNzaW9uLCBleHByZXNzaW9uUGF0aCkpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiXFxuXCIgOiBcIjtcXG5cIiwgXCJleGFjdGx5LW9uY2UgZWZmZWN0IHRlbXBvcmFyeSB0ZXJtaW5hdG9yXCIsIFtleHByZXNzaW9uXSwgW2V4cHJlc3Npb25QYXRoXSlcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSByZXN1bHQgdHlwZSBuZWVkZWQgZm9yIGFuIGVmZmVjdCB0ZW1wb3JhcnkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gQWN0aXZlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIEVmZmVjdGZ1bCBleHByZXNzaW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgdW5kZWZpbmVkfSBSZXN1bHQgdHlwZS5cbiAqL1xuZnVuY3Rpb24gZWZmZWN0RXhwcmVzc2lvblR5cGUod3JpdGVyLCBleHByZXNzaW9uKSB7XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJFZmZlY3RDYWxsRXhwcmVzc2lvblwiKSByZXR1cm4gd3JpdGVyLmVmZmVjdE9wZXJhdGlvbkZvcklkKGV4cHJlc3Npb24ub3BlcmF0aW9uKS5yZXR1cm5UeXBlXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5yZXNvbHV0aW9uID8gc2VtYW50aWNUeXBlRm9ySWRlbnRpdHkoZXhwcmVzc2lvbi5yZXNvbHV0aW9uLnJldHVyblR5cGUpIDogdW5kZWZpbmVkXG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIFJlaHlkcmF0ZXMgYSByZXNvbHZlZCBjYWxsIHJlc3VsdCBmb3IgdGFyZ2V0LWxvY2FsIHRlbXBvcmFyeSBzcGVsbGluZy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25SZXR1cm5UeXBlSWRlbnRpdHl9IGlkZW50aXR5IC0gRXhhY3QgcmVzb2x2ZWQgcmVzdWx0IGlkZW50aXR5LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfSBEZXRhY2hlZCBzZW1hbnRpYyB0eXBlLlxuICovXG5mdW5jdGlvbiBzZW1hbnRpY1R5cGVGb3JJZGVudGl0eShpZGVudGl0eSkge1xuICBpZiAodHlwZW9mIGlkZW50aXR5ID09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4ge2tpbmQ6IFwiVHlwZVJlZmVyZW5jZVwiLCBuYW1lOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uUmV0dXJuVHlwZU5hbWV9ICovIChpZGVudGl0eSl9XG4gIH1cbiAgaWYgKGlkZW50aXR5LmtpbmQgPT0gXCJMaXN0VHlwZVwiKSByZXR1cm4ge2VsZW1lbnRUeXBlOiBzZW1hbnRpY1R5cGVGb3JWYWx1ZUlkZW50aXR5KGlkZW50aXR5LmVsZW1lbnRUeXBlKSwga2luZDogXCJMaXN0VHlwZVwifVxuICBpZiAoaWRlbnRpdHkua2luZCA9PSBcIk1hcFR5cGVcIikgcmV0dXJuIHtrZXlUeXBlOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVSZWZlcmVuY2V9ICovIChcbiAgICBzZW1hbnRpY1R5cGVGb3JWYWx1ZUlkZW50aXR5KGlkZW50aXR5LmtleVR5cGUpKSwga2luZDogXCJNYXBUeXBlXCIsXG4gICAgdmFsdWVUeXBlOiBzZW1hbnRpY1R5cGVGb3JWYWx1ZUlkZW50aXR5KGlkZW50aXR5LnZhbHVlVHlwZSl9XG4gIGlmIChpZGVudGl0eS5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIikgcmV0dXJuIHtrZXlUeXBlOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVSZWZlcmVuY2V9ICovIChcbiAgICBzZW1hbnRpY1R5cGVGb3JWYWx1ZUlkZW50aXR5KGlkZW50aXR5LmtleVR5cGUpKSwga2luZDogXCJPcmRlcmVkTWFwVHlwZVwiLFxuICAgIG9yZGVyOiBcImluc2VydGlvblwiLCB2YWx1ZVR5cGU6IHNlbWFudGljVHlwZUZvclZhbHVlSWRlbnRpdHkoaWRlbnRpdHkudmFsdWVUeXBlKX1cbiAgaWYgKGlkZW50aXR5LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikgcmV0dXJuIHtraW5kOiBcIk9wdGlvbmFsVHlwZVwiLCB2YWx1ZVR5cGU6IHNlbWFudGljVHlwZUZvclZhbHVlSWRlbnRpdHkoaWRlbnRpdHkudmFsdWVUeXBlKX1cbiAgaWYgKGlkZW50aXR5LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHJldHVybiB7YXJndW1lbnRzOiBpZGVudGl0eS5hcmd1bWVudHM/Lm1hcChzZW1hbnRpY1R5cGVGb3JWYWx1ZUlkZW50aXR5KSxcbiAgICBkZWNsYXJhdGlvbklkOiBpZGVudGl0eS5kZWNsYXJhdGlvbklkLCBraW5kOiBcIlJlY29yZFR5cGVcIn1cbiAgaWYgKGlkZW50aXR5LmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIpIHJldHVybiB7ZGVjbGFyYXRpb25JZDogaWRlbnRpdHkuZGVjbGFyYXRpb25JZCwga2luZDogXCJSZWZlcmVuY2VUeXBlXCJ9XG4gIGlmIChpZGVudGl0eS5raW5kID09IFwiSW50ZXJmYWNlVHlwZVwiKSByZXR1cm4ge2RlY2xhcmF0aW9uSWQ6IGlkZW50aXR5LmRlY2xhcmF0aW9uSWQsIGtpbmQ6IFwiSW50ZXJmYWNlVHlwZVwifVxuICBpZiAoaWRlbnRpdHkua2luZCA9PSBcIk93bmVkUmVzb3VyY2VUeXBlXCIpIHJldHVybiB7a2luZDogXCJPd25lZFJlc291cmNlVHlwZVwiLCByZXNvdXJjZUlkOiBpZGVudGl0eS5yZXNvdXJjZUlkfVxuICBpZiAoaWRlbnRpdHkua2luZCA9PSBcIk93bmVkUmVmZXJlbmNlVHlwZVwiKSByZXR1cm4ge2RlY2xhcmF0aW9uSWQ6IGlkZW50aXR5LmRlY2xhcmF0aW9uSWQsIGtpbmQ6IFwiT3duZWRSZWZlcmVuY2VUeXBlXCJ9XG4gIHJldHVybiB7a2luZDogXCJUeXBlVmFyaWFibGVSZWZlcmVuY2VcIiwgbG9jYXRpb246IC8qKiBAdHlwZSB7bmV2ZXJ9ICovICh1bmRlZmluZWQpLCBwYXJhbWV0ZXJJZDogaWRlbnRpdHkucGFyYW1ldGVySWR9XG59XG5cbi8qKlxuICogUmVoeWRyYXRlcyBvbmUgbm9uLXZvaWQgcmVzb2x2ZWQgdHlwZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNUeXBlSWRlbnRpdHl9IGlkZW50aXR5IC0gRXhhY3QgdHlwZSBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gRGV0YWNoZWQgc2VtYW50aWMgdHlwZS5cbiAqL1xuZnVuY3Rpb24gc2VtYW50aWNUeXBlRm9yVmFsdWVJZGVudGl0eShpZGVudGl0eSkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gKi8gKHNlbWFudGljVHlwZUZvcklkZW50aXR5KGlkZW50aXR5KSlcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzdWJzZXQgb2Ygc2VtYW50aWMgdHlwZXMgYWRtaXR0ZWQgZm9yIHN5bnRoZXRpYyB0ZW1wb3Jhcmllcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBBY3RpdmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZSB8IHVuZGVmaW5lZH0gdHlwZSAtIFNlbWFudGljIHR5cGUuXG4gKiBAcGFyYW0ge1wicGhwXCIgfCBcInJ1YnlcIiB8IFwiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCIgfCBcImphdmFcIn0gbGFuZ3VhZ2UgLSBUYXJnZXQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtuZXN0ZWRdIC0gV2hldGhlciBKYXZhIHJlcXVpcmVzIGEgYm94ZWQgc2NhbGFyLlxuICogQHJldHVybnMge3N0cmluZ30gVGFyZ2V0IHR5cGUgc3BlbGxpbmcuXG4gKi9cbmZ1bmN0aW9uIGVtaXR0ZWRUeXBlTmFtZSh3cml0ZXIsIHR5cGUsIGxhbmd1YWdlLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBpZiAoIXR5cGUgfHwgdHlwZS5raW5kID09IFwiVHlwZVJlZmVyZW5jZVwiICYmIHR5cGUubmFtZSA9PSBcInZvaWRcIikgcmV0dXJuIGxhbmd1YWdlID09IFwiamF2YVwiID8gXCJPYmplY3RcIiA6IFwidW5rbm93blwiXG4gIGlmICh0eXBlLmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIpIHtcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJwaHBcIikgcmV0dXJuIHR5cGUubmFtZSA9PSBcImludGVnZXJcIiA/IFwiaW50XCIgOiB0eXBlLm5hbWUgPT0gXCJib29sZWFuXCIgPyBcImJvb2xcIiA6IFwic3RyaW5nXCJcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJydWJ5XCIpIHJldHVybiB0eXBlLm5hbWUgPT0gXCJpbnRlZ2VyXCIgPyBcIkludGVnZXJcIiA6IHR5cGUubmFtZSA9PSBcImJvb2xlYW5cIiA/IFwiQm9vbGVhblwiIDogXCJTdHJpbmdcIlxuICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIikgcmV0dXJuIHR5cGUubmFtZSA9PSBcImludGVnZXJcIiA/IG5lc3RlZCA/IFwiSW50ZWdlclwiIDogXCJpbnRcIiA6XG4gICAgICB0eXBlLm5hbWUgPT0gXCJib29sZWFuXCIgPyBuZXN0ZWQgPyBcIkJvb2xlYW5cIiA6IFwiYm9vbGVhblwiIDogXCJTdHJpbmdcIlxuICAgIHJldHVybiB0eXBlLm5hbWUgPT0gXCJpbnRlZ2VyXCIgPyBcIm51bWJlclwiIDogdHlwZS5uYW1lXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIk93bmVkUmVzb3VyY2VUeXBlXCIpIHJldHVybiB3cml0ZXIucmVzb3VyY2VGb3JJZCh0eXBlLnJlc291cmNlSWQpLm5hbWVcbiAgaWYgKHR5cGUua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIiB8fCB0eXBlLmtpbmQgPT0gXCJPd25lZFJlZmVyZW5jZVR5cGVcIikgcmV0dXJuIHdyaXRlci5jbGFzc05hbWVGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpXG4gIGlmICh0eXBlLmtpbmQgPT0gXCJUeXBlVmFyaWFibGVSZWZlcmVuY2VcIikgcmV0dXJuIHdyaXRlci50eXBlUGFyYW1ldGVyRm9ySWQodHlwZS5wYXJhbWV0ZXJJZCkubmFtZVxuICBpZiAodHlwZS5raW5kID09IFwiUmVjb3JkVHlwZVwiKSB7XG4gICAgY29uc3QgbmFtZSA9IHdyaXRlci5yZWNvcmROYW1lRm9ySWQodHlwZS5kZWNsYXJhdGlvbklkKVxuICAgIGNvbnN0IGFyZ3VtZW50c18gPSB0eXBlLmFyZ3VtZW50cz8ubWFwKChhcmd1bWVudCkgPT4gZW1pdHRlZFR5cGVOYW1lKHdyaXRlciwgYXJndW1lbnQsIGxhbmd1YWdlLCB0cnVlKSkgPz8gW11cblxuICAgIHJldHVybiBhcmd1bWVudHNfLmxlbmd0aCA9PSAwID8gbmFtZSA6IGxhbmd1YWdlID09IFwicnVieVwiID8gYCR7bmFtZX1bJHthcmd1bWVudHNfLmpvaW4oXCIsXCIpfV1gIDogYCR7bmFtZX08JHthcmd1bWVudHNfLmpvaW4oXCIsXCIpfT5gXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgY29uc3QgdmFsdWUgPSBlbWl0dGVkVHlwZU5hbWUod3JpdGVyLCB0eXBlLnZhbHVlVHlwZSwgbGFuZ3VhZ2UsIHRydWUpXG4gICAgcmV0dXJuIGxhbmd1YWdlID09IFwicGhwXCIgPyBgPyR7dmFsdWV9YCA6IGxhbmd1YWdlID09IFwicnVieVwiID8gYCR7dmFsdWV9P2AgOlxuICAgICAgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBgamF2YS51dGlsLk9wdGlvbmFsPCR7dmFsdWV9PmAgOiBgJHt2YWx1ZX0gfCBudWxsYFxuICB9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJMaXN0VHlwZVwiKSB7XG4gICAgY29uc3QgdmFsdWUgPSBlbWl0dGVkVHlwZU5hbWUod3JpdGVyLCB0eXBlLmVsZW1lbnRUeXBlLCBsYW5ndWFnZSwgdHJ1ZSlcbiAgICByZXR1cm4gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IGBsaXN0PCR7dmFsdWV9PmAgOiBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IGBBcnJheTwke3ZhbHVlfT5gIDpcbiAgICAgIGxhbmd1YWdlID09IFwiamF2YVwiID8gYGphdmEudXRpbC5MaXN0PCR7dmFsdWV9PmAgOiBgcmVhZG9ubHkgJHt2YWx1ZX1bXWBcbiAgfVxuICBpZiAodHlwZS5raW5kID09IFwiTWFwVHlwZVwiIHx8IHR5cGUua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHtcbiAgICBjb25zdCBrZXkgPSBlbWl0dGVkVHlwZU5hbWUod3JpdGVyLCB0eXBlLmtleVR5cGUsIGxhbmd1YWdlLCB0cnVlKVxuICAgIGNvbnN0IHZhbHVlID0gZW1pdHRlZFR5cGVOYW1lKHdyaXRlciwgdHlwZS52YWx1ZVR5cGUsIGxhbmd1YWdlLCB0cnVlKVxuXG4gICAgaWYgKGxhbmd1YWdlID09IFwicGhwXCIpIHJldHVybiBgYXJyYXk8JHtrZXl9LCR7dmFsdWV9PmBcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJydWJ5XCIpIHJldHVybiBgSGFzaFske2tleX0sJHt2YWx1ZX1dYFxuICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIikgcmV0dXJuIGAke3R5cGUua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIgPyBcImphdmEudXRpbC5TZXF1ZW5jZWRNYXBcIiA6IFwiamF2YS51dGlsLk1hcFwifTwke2tleX0sJHt2YWx1ZX0+YFxuICAgIHJldHVybiBgUmVhZG9ubHlNYXA8JHtrZXl9LCAke3ZhbHVlfT5gXG4gIH1cbiAgcmV0dXJuIGxhbmd1YWdlID09IFwiamF2YVwiID8gXCJPYmplY3RcIiA6IFwidW5rbm93blwiXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXhwcmVzc2lvbiByb290cyBldmFsdWF0ZWQgYnkgb25lIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50fSBzdGF0ZW1lbnQgLSBTdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFN0YWJsZSBzdGF0ZW1lbnQgcGF0aC5cbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uUGF0aFtdfSBFeHByZXNzaW9uIHJvb3RzLlxuICovXG5mdW5jdGlvbiBzdGF0ZW1lbnRFeHByZXNzaW9uUm9vdHMoc3RhdGVtZW50LCBwYXRoKSB7XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIikgcmV0dXJuIFt7ZXhwcmVzc2lvbjogc3RhdGVtZW50LmluaXRpYWxpemVyLCBwYXRoOiBgJHtwYXRofS9pbml0aWFsaXplcmB9XVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiKSB7XG4gICAgcmV0dXJuIFt7ZXhwcmVzc2lvbjogc3RhdGVtZW50LmV4cHJlc3Npb24sIHBhdGg6IGAke3BhdGh9L2V4cHJlc3Npb25gfV1cbiAgfVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikgcmV0dXJuIHN0YXRlbWVudC5leHByZXNzaW9uID8gW3tleHByZXNzaW9uOiBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgcGF0aDogYCR7cGF0aH0vZXhwcmVzc2lvbmB9XSA6IFtdXG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIpIHJldHVybiBbe2V4cHJlc3Npb246IHN0YXRlbWVudC5leHByZXNzaW9uLCBwYXRoOiBgJHtwYXRofS9leHByZXNzaW9uYH1dXG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSByZXR1cm4gW3tleHByZXNzaW9uOiBzdGF0ZW1lbnQuY29uZGl0aW9uLCBwYXRoOiBgJHtwYXRofS9jb25kaXRpb25gfV1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiKSByZXR1cm4gW3tleHByZXNzaW9uOiBzdGF0ZW1lbnQubGlzdCwgcGF0aDogYCR7cGF0aH0vbGlzdGB9XVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHJldHVybiBbe2V4cHJlc3Npb246IHN0YXRlbWVudC5tYXAsIHBhdGg6IGAke3BhdGh9L21hcGB9XVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJSYWlzZVN0YXRlbWVudFwiKSByZXR1cm4gW3tleHByZXNzaW9uOiBzdGF0ZW1lbnQuZXJyb3IubWVzc2FnZSwgcGF0aDogYCR7cGF0aH0vZXJyb3IvbWVzc2FnZWB9XVxuICByZXR1cm4gW11cbn1cblxuLyoqXG4gKiBDb2xsZWN0cyBuZXN0ZWQgZWZmZWN0IHNpdGVzIGluIHBvc3RvcmRlciBzbyBjaGlsZHJlbiBhcmUgbWF0ZXJpYWxpemVkIGZpcnN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIC0gQ3VycmVudCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBDdXJyZW50IG9jY3VycmVuY2UgcGF0aC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gcm9vdCAtIFN0YXRlbWVudCBleHByZXNzaW9uIHJvb3QuXG4gKiBAcGFyYW0ge0V4cHJlc3Npb25QYXRoW119IG91dHB1dCAtIE9yZGVyZWQgcGxhbiByZWNlaXZpbmcgbmVzdGVkIHNpdGVzLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3ROZXN0ZWRFZmZlY3RzKGV4cHJlc3Npb24sIHBhdGgsIHJvb3QsIG91dHB1dCkge1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGV4cHJlc3Npb25DaGlsZHJlbihleHByZXNzaW9uLCBwYXRoKSkgY29sbGVjdE5lc3RlZEVmZmVjdHMoY2hpbGQuZXhwcmVzc2lvbiwgY2hpbGQucGF0aCwgcm9vdCwgb3V0cHV0KVxuICBpZiAoZXhwcmVzc2lvbiAhPT0gcm9vdCAmJiAoZXhwcmVzc2lvbi5raW5kID09IFwiRWZmZWN0Q2FsbEV4cHJlc3Npb25cIiB8fCB0eXBlb2YgUmVmbGVjdC5nZXQoZXhwcmVzc2lvbiwgXCJlZmZlY3RTaXRlSWRcIikgPT0gXCJzdHJpbmdcIikpIHtcbiAgICBvdXRwdXQucHVzaCh7ZXhwcmVzc2lvbiwgcGF0aH0pXG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHBhdGgtYmVhcmluZyBleHByZXNzaW9uIGNoaWxkcmVuIGluIGV2YWx1YXRpb24gb3JkZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBQYXJlbnQgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gUGFyZW50IHBhdGguXG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvblBhdGhbXX0gQ2hpbGRyZW4uXG4gKi9cbmZ1bmN0aW9uIGV4cHJlc3Npb25DaGlsZHJlbihleHByZXNzaW9uLCBwYXRoKSB7XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIkVmZmVjdENhbGxFeHByZXNzaW9uXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiUmVmZXJlbmNlQ29uc3RydWN0aW9uXCIgfHxcbiAgICBleHByZXNzaW9uLmtpbmQgPT0gXCJSZWNvcmRDb25zdHJ1Y3Rpb25cIikgcmV0dXJuIGV4cHJlc3Npb24uYXJndW1lbnRzLm1hcCgoY2hpbGQsIGluZGV4KSA9PiAoe2V4cHJlc3Npb246IGNoaWxkLCBwYXRoOiBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gfSkpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSByZXR1cm4gW1xuICAgIHtleHByZXNzaW9uOiBleHByZXNzaW9uLnJlY2VpdmVyLCBwYXRoOiBgJHtwYXRofS9yZWNlaXZlcmB9LFxuICAgIC4uLmV4cHJlc3Npb24uYXJndW1lbnRzLm1hcCgoY2hpbGQsIGluZGV4KSA9PiAoe2V4cHJlc3Npb246IGNoaWxkLCBwYXRoOiBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gfSkpXG4gIF1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk93bmVkTW92ZUV4cHJlc3Npb25cIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPd25lZEJvcnJvd0V4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBbe2V4cHJlc3Npb246IGV4cHJlc3Npb24uZXhwcmVzc2lvbiwgcGF0aDogYCR7cGF0aH0vZXhwcmVzc2lvbmB9XVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHJldHVybiBbXG4gICAge2V4cHJlc3Npb246IGV4cHJlc3Npb24ubGVmdCwgcGF0aDogYCR7cGF0aH0vbGVmdGB9LCB7ZXhwcmVzc2lvbjogZXhwcmVzc2lvbi5yaWdodCwgcGF0aDogYCR7cGF0aH0vcmlnaHRgfVxuICBdXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikgcmV0dXJuIFt7ZXhwcmVzc2lvbjogZXhwcmVzc2lvbi5vcGVyYW5kLCBwYXRoOiBgJHtwYXRofS9vcGVyYW5kYH1dXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbFNvbWVcIikgcmV0dXJuIFt7ZXhwcmVzc2lvbjogZXhwcmVzc2lvbi52YWx1ZSwgcGF0aDogYCR7cGF0aH0vdmFsdWVgfV1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsSXNQcmVzZW50XCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxVbndyYXBcIikge1xuICAgIHJldHVybiBbe2V4cHJlc3Npb246IGV4cHJlc3Npb24ub3BlcmFuZCwgcGF0aDogYCR7cGF0aH0vb3BlcmFuZGB9XVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJMaXN0TGl0ZXJhbFwiKSByZXR1cm4gZXhwcmVzc2lvbi5lbGVtZW50cy5tYXAoKGNoaWxkLCBpbmRleCkgPT4gKHtleHByZXNzaW9uOiBjaGlsZCwgcGF0aDogYCR7cGF0aH0vZWxlbWVudHMvJHtpbmRleH1gfSkpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNYXBMaXRlcmFsXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIikgcmV0dXJuIGV4cHJlc3Npb24uZW50cmllcy5mbGF0TWFwKChlbnRyeSwgaW5kZXgpID0+IFtcbiAgICB7ZXhwcmVzc2lvbjogZW50cnkua2V5LCBwYXRoOiBgJHtwYXRofS9lbnRyaWVzLyR7aW5kZXh9L2tleWB9LCB7ZXhwcmVzc2lvbjogZW50cnkudmFsdWUsIHBhdGg6IGAke3BhdGh9L2VudHJpZXMvJHtpbmRleH0vdmFsdWVgfVxuICBdKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSByZXR1cm4gW1xuICAgIHtleHByZXNzaW9uOiBleHByZXNzaW9uLmNvbGxlY3Rpb24sIHBhdGg6IGAke3BhdGh9L2NvbGxlY3Rpb25gfSwge2V4cHJlc3Npb246IGV4cHJlc3Npb24uaW5kZXgsIHBhdGg6IGAke3BhdGh9L2luZGV4YH1cbiAgXVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSByZXR1cm4gW1xuICAgIHtleHByZXNzaW9uOiBleHByZXNzaW9uLmNvbGxlY3Rpb24sIHBhdGg6IGAke3BhdGh9L2NvbGxlY3Rpb25gfSwge2V4cHJlc3Npb246IGV4cHJlc3Npb24ua2V5LCBwYXRoOiBgJHtwYXRofS9rZXlgfVxuICBdXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIikgcmV0dXJuIFt7ZXhwcmVzc2lvbjogZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBwYXRoOiBgJHtwYXRofS9jb2xsZWN0aW9uYH1dXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNZW1iZXJSZWFkXCIpIHJldHVybiBbe2V4cHJlc3Npb246IGV4cHJlc3Npb24ucmVjZWl2ZXIsIHBhdGg6IGAke3BhdGh9L3JlY2VpdmVyYH1dXG4gIHJldHVybiBbXVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdlbmVyYXRlZCBzdXBwb3J0IGlzIHJlcXVpcmVkIGJ5IGEgc2VtYW50aWMgY2FwYWJpbGl0eSBub2RlIG9yIHR5cGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgcHJvdGVjdGVkIGJpbmRpbmcgaXMgcmVxdWlyZWQuXG4gKi9cbmZ1bmN0aW9uIG1vZHVsZU5lZWRzRWZmZWN0U3VwcG9ydChtb2R1bGUpIHtcbiAgLyoqIEB0eXBlIHt1bmtub3duW119ICovXG4gIGNvbnN0IHBlbmRpbmcgPSBbbW9kdWxlLmVudHJ5UG9pbnQsIC4uLm1vZHVsZS5mdW5jdGlvbnMsIC4uLm1vZHVsZS5yZWNvcmRzID8/IFtdLCAuLi5tb2R1bGUuZXJyb3JzID8/IFtdLCAuLi5tb2R1bGUuY2xhc3NlcyA/PyBbXV1cbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKVxuXG4gIHdoaWxlIChwZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBlbmRpbmcucG9wKClcblxuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwib2JqZWN0XCIgfHwgc2Vlbi5oYXModmFsdWUpKSBjb250aW51ZVxuICAgIHNlZW4uYWRkKHZhbHVlKVxuICAgIGNvbnN0IGtpbmQgPSBSZWZsZWN0LmdldCh2YWx1ZSwgXCJraW5kXCIpXG5cbiAgICBpZiAoa2luZCA9PSBcIkVmZmVjdENhbGxFeHByZXNzaW9uXCIgfHwga2luZCA9PSBcIk93bmVkUmVzb3VyY2VUeXBlXCIgfHwga2luZCA9PSBcIk93bmVkUmVmZXJlbmNlVHlwZVwiIHx8XG4gICAgICBraW5kID09IFwiRXJyb3JUeXBlXCIgJiYgL15jYXBhYmlsaXR5OlswLTldK1xcL2ZhaWx1cmU6WzAtOV0rJC91LnRlc3QoU3RyaW5nKFJlZmxlY3QuZ2V0KHZhbHVlLCBcImRlY2xhcmF0aW9uSWRcIikpKSkgcmV0dXJuIHRydWVcbiAgICBmb3IgKGNvbnN0IFtrZXksIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgIGlmIChbXCJsb2NhdGlvblwiLCBcInNvdXJjZVByb3ZlbmFuY2VcIl0uaW5jbHVkZXMoa2V5KSkgY29udGludWVcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkgcGVuZGluZy5wdXNoKC4uLmNoaWxkKVxuICAgICAgZWxzZSBpZiAoY2hpbGQgJiYgdHlwZW9mIGNoaWxkID09IFwib2JqZWN0XCIpIHBlbmRpbmcucHVzaChjaGlsZClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogRmluZHMgYSBjb250ZXh0IGV4Y2x1ZGVkIGZyb20gYm91bmRlZCBlYWdlciBsb3dlcmluZy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFNlbWFudGljIG1vZHVsZS5cbiAqIEByZXR1cm5zIHtFeGNsdWRlZEVmZmVjdCB8IHVuZGVmaW5lZH0gRmlyc3QgZGV0ZXJtaW5pc3RpYyBleGNsdXNpb24uXG4gKi9cbmZ1bmN0aW9uIGZpbmRFeGNsdWRlZEVmZmVjdENvbnRleHQobW9kdWxlKSB7XG4gIC8qKiBAdHlwZSB7b2JqZWN0W119ICovXG4gIGNvbnN0IG93bmVycyA9IFsuLi5tb2R1bGUuZnVuY3Rpb25zLmZpbHRlcigob3duZXIpID0+IG93bmVyICYmIHR5cGVvZiBvd25lciA9PSBcIm9iamVjdFwiKSwgbW9kdWxlLmVudHJ5UG9pbnRdXG5cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuY2xhc3NlcyA/PyBbXSkge1xuICAgIGlmICghZGVjbGFyYXRpb24gfHwgdHlwZW9mIGRlY2xhcmF0aW9uICE9IFwib2JqZWN0XCIpIGNvbnRpbnVlXG4gICAgaWYgKGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yICYmIHR5cGVvZiBkZWNsYXJhdGlvbi5jb25zdHJ1Y3RvciA9PSBcIm9iamVjdFwiKSBvd25lcnMucHVzaChkZWNsYXJhdGlvbi5jb25zdHJ1Y3RvcilcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbi5tZXRob2RzKSkgb3duZXJzLnB1c2goLi4uZGVjbGFyYXRpb24ubWV0aG9kcy5maWx0ZXIoKG93bmVyKSA9PiBvd25lciAmJiB0eXBlb2Ygb3duZXIgPT0gXCJvYmplY3RcIikpXG4gIH1cbiAgZm9yIChjb25zdCBvd25lciBvZiBvd25lcnMpIHtcbiAgICBjb25zdCBib2R5ID0gUmVmbGVjdC5nZXQob3duZXIsIFwiYm9keVwiKVxuXG4gICAgaWYgKCFib2R5IHx8IHR5cGVvZiBib2R5ICE9IFwib2JqZWN0XCIpIGNvbnRpbnVlXG4gICAgY29uc3QgZm91bmQgPSBibG9ja0V4Y2x1ZGVkKC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9ICovIChib2R5KSlcbiAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZFxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBGaW5kcyBhbiBleGNsdWRlZCBjb250ZXh0IGluIG9uZSBzdHJ1Y3R1cmVkIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYmxvY2sgLSBTZW1hbnRpYyBibG9jay5cbiAqIEByZXR1cm5zIHtFeGNsdWRlZEVmZmVjdCB8IHVuZGVmaW5lZH0gRmlyc3QgZGV0ZXJtaW5pc3RpYyBleGNsdXNpb24uXG4gKi9cbmZ1bmN0aW9uIGJsb2NrRXhjbHVkZWQoYmxvY2spIHtcbiAgaWYgKCFibG9jayB8fCB0eXBlb2YgYmxvY2sgIT0gXCJvYmplY3RcIiB8fCAhQXJyYXkuaXNBcnJheShibG9jay5zdGF0ZW1lbnRzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBibG9jay5zdGF0ZW1lbnRzKSB7XG4gICAgaWYgKCFzdGF0ZW1lbnQgfHwgdHlwZW9mIHN0YXRlbWVudCAhPSBcIm9iamVjdFwiKSBjb250aW51ZVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIgJiYgY29udGFpbnNFZmZlY3Qoc3RhdGVtZW50LmNvbmRpdGlvbikpIHtcbiAgICAgIHJldHVybiB7ZGV0YWlsOiBcImVmZmVjdGZ1bCBjb25kaXRpb24tY29udHJvbGxlZCBsb29wIGNvbmRpdGlvblwiLCBsb2NhdGlvbjogc3RhdGVtZW50LmNvbmRpdGlvbi5sb2NhdGlvbn1cbiAgICB9XG4gICAgY29uc3QgZXhwcmVzc2lvbnMgPSBzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiA/IFtzdGF0ZW1lbnQuaW5pdGlhbGl6ZXJdIDpcbiAgICAgIHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIiA/IFtzdGF0ZW1lbnQuZXhwcmVzc2lvbl0gOlxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gPyBbc3RhdGVtZW50LmV4cHJlc3Npb25dIDogW10gOlxuICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIiA/IFtzdGF0ZW1lbnQuY29uZGl0aW9uXSA6IHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiID8gW3N0YXRlbWVudC5saXN0XSA6XG4gICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiA/IFtzdGF0ZW1lbnQubWFwXSA6IHN0YXRlbWVudC5raW5kID09IFwiUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnRcIiA/IFtzdGF0ZW1lbnQuZXhwcmVzc2lvbl0gOlxuICAgICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlJhaXNlU3RhdGVtZW50XCIgPyBbc3RhdGVtZW50LmVycm9yLm1lc3NhZ2VdIDogW11cbiAgICBmb3IgKGNvbnN0IGV4cHJlc3Npb24gb2YgZXhwcmVzc2lvbnMpIHtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbmFsID0gZmluZENvbmRpdGlvbmFsRWZmZWN0KGV4cHJlc3Npb24pXG4gICAgICBpZiAoY29uZGl0aW9uYWwpIHJldHVybiB7ZGV0YWlsOiBcImVmZmVjdGZ1bCBzaG9ydC1jaXJjdWl0IEJvb2xlYW5BbmQvQm9vbGVhbk9yIGV4cHJlc3Npb25cIiwgbG9jYXRpb246IGNvbmRpdGlvbmFsLmxvY2F0aW9ufVxuICAgIH1cbiAgICBjb25zdCBuZXN0ZWQgPSBzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIgPyBbc3RhdGVtZW50LmNvbnNlcXVlbnQsIC4uLihzdGF0ZW1lbnQuYWx0ZXJuYXRlID8gW3N0YXRlbWVudC5hbHRlcm5hdGVdIDogW10pXSA6XG4gICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIgPyBbc3RhdGVtZW50LmJvZHldIDpcbiAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIiA/IFtzdGF0ZW1lbnQuYm9keSwgLi4uc3RhdGVtZW50LmhhbmRsZXJzLm1hcCgoaGFuZGxlcikgPT4gaGFuZGxlci5jYXRjaEJvZHkpLFxuICAgICAgICAgIC4uLihzdGF0ZW1lbnQuZmluYWxseUJvZHkgPyBbc3RhdGVtZW50LmZpbmFsbHlCb2R5XSA6IFtdKV0gOiBbXVxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgbmVzdGVkKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IGJsb2NrRXhjbHVkZWQoY2hpbGQpXG4gICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZFxuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogRmluZHMgYW4gZWZmZWN0IGJlbG93IGEgc2hvcnQtY2lyY3VpdCBvcGVyYXRvci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24gcm9vdC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9uIHwgdW5kZWZpbmVkfSBJbnZhbGlkIGNvbmRpdGlvbmFsIGVmZmVjdC5cbiAqL1xuZnVuY3Rpb24gZmluZENvbmRpdGlvbmFsRWZmZWN0KGV4cHJlc3Npb24pIHtcbiAgaWYgKCFleHByZXNzaW9uIHx8IHR5cGVvZiBleHByZXNzaW9uICE9IFwib2JqZWN0XCIpIHJldHVybiB1bmRlZmluZWRcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIiAmJiBbXCJCb29sZWFuQW5kXCIsIFwiQm9vbGVhbk9yXCJdLmluY2x1ZGVzKGV4cHJlc3Npb24ub3BlcmF0aW9uKSAmJlxuICAgIChjb250YWluc0VmZmVjdChleHByZXNzaW9uLmxlZnQpIHx8IGNvbnRhaW5zRWZmZWN0KGV4cHJlc3Npb24ucmlnaHQpKSkgcmV0dXJuIGV4cHJlc3Npb25cbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbihleHByZXNzaW9uKSkge1xuICAgIGNvbnN0IGZvdW5kID0gZmluZENvbmRpdGlvbmFsRWZmZWN0KGNoaWxkKVxuICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kXG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFuIGV4cHJlc3Npb24gZXZhbHVhdGVzIGFuIGVmZmVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24gcm9vdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGFuIGVmZmVjdCBpcyByZWFjaGFibGUuXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zRWZmZWN0KGV4cHJlc3Npb24pIHtcbiAgaWYgKCFleHByZXNzaW9uIHx8IHR5cGVvZiBleHByZXNzaW9uICE9IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZVxuICByZXR1cm4gZXhwcmVzc2lvbi5raW5kID09IFwiRWZmZWN0Q2FsbEV4cHJlc3Npb25cIiB8fCBCb29sZWFuKFJlZmxlY3QuZ2V0KGV4cHJlc3Npb24sIFwiZWZmZWN0U2l0ZUlkXCIpKSB8fCBjaGlsZHJlbihleHByZXNzaW9uKS5zb21lKGNvbnRhaW5zRWZmZWN0KVxufVxuXG4vKipcbiAqIFJldHVybnMgY2hpbGQgZXhwcmVzc2lvbnMgaW4gZXZhbHVhdGlvbiBvcmRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIFBhcmVudCBleHByZXNzaW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb25bXX0gQ2hpbGRyZW4uXG4gKi9cbmZ1bmN0aW9uIGNoaWxkcmVuKGV4cHJlc3Npb24pIHtcbiAgaWYgKCFleHByZXNzaW9uIHx8IHR5cGVvZiBleHByZXNzaW9uICE9IFwib2JqZWN0XCIpIHJldHVybiBbXVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJFZmZlY3RDYWxsRXhwcmVzc2lvblwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIlJlZmVyZW5jZUNvbnN0cnVjdGlvblwiIHx8XG4gICAgZXhwcmVzc2lvbi5raW5kID09IFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpIHJldHVybiBleHByZXNzaW9uLmFyZ3VtZW50c1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWV0aG9kQ2FsbEV4cHJlc3Npb25cIikgcmV0dXJuIFtleHByZXNzaW9uLnJlY2VpdmVyLCAuLi5leHByZXNzaW9uLmFyZ3VtZW50c11cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk93bmVkTW92ZUV4cHJlc3Npb25cIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPd25lZEJvcnJvd0V4cHJlc3Npb25cIikgcmV0dXJuIFtleHByZXNzaW9uLmV4cHJlc3Npb25dXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHJldHVybiBbZXhwcmVzc2lvbi5sZWZ0LCBleHByZXNzaW9uLnJpZ2h0XVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHJldHVybiBbZXhwcmVzc2lvbi5vcGVyYW5kXVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxTb21lXCIpIHJldHVybiBbZXhwcmVzc2lvbi52YWx1ZV1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsSXNQcmVzZW50XCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxVbndyYXBcIikgcmV0dXJuIFtleHByZXNzaW9uLm9wZXJhbmRdXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJMaXN0TGl0ZXJhbFwiKSByZXR1cm4gZXhwcmVzc2lvbi5lbGVtZW50c1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTGl0ZXJhbFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpIHJldHVybiBleHByZXNzaW9uLmVudHJpZXMuZmxhdE1hcCgoe2tleSwgdmFsdWV9KSA9PiBba2V5LCB2YWx1ZV0pXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJMaXN0SW5kZXhFeHByZXNzaW9uXCIpIHJldHVybiBbZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBleHByZXNzaW9uLmluZGV4XVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSByZXR1cm4gW2V4cHJlc3Npb24uY29sbGVjdGlvbiwgZXhwcmVzc2lvbi5rZXldXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIikgcmV0dXJuIFtleHByZXNzaW9uLmNvbGxlY3Rpb25dXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNZW1iZXJSZWFkXCIpIHJldHVybiBbZXhwcmVzc2lvbi5yZWNlaXZlcl1cbiAgcmV0dXJuIFtdXG59XG5cbmNvbnN0IHBocFN1cHBvcnQgPSBgLyogc2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0ICovXG5maW5hbCBjbGFzcyBQcm9iZU9wZXJhdGlvbkZhaWx1cmUgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHt9XG5maW5hbCBjbGFzcyBQcm9iZUFjcXVpcmVGYWlsdXJlIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7fVxuZmluYWwgY2xhc3MgUHJvYmVSZWFkRmFpbHVyZSBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24ge31cbmZpbmFsIGNsYXNzIFByb2JlQ2xvc2VGYWlsdXJlIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7fVxuZmluYWwgY2xhc3MgUHJvYmVSZXNvdXJjZUNsb3NlZCBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24ge31cbmZpbmFsIGNsYXNzIFByb2JlUmVzb3VyY2Uge1xuICAgIHB1YmxpYyBib29sICRjbG9zZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QocHVibGljIG1peGVkICRoYW5kbGUpIHt9XG59XG4kR0xPQkFMU1snX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlJ10gPSBbXTtcbmZ1bmN0aW9uIHByb2JlRWZmZWN0KHN0cmluZyAkbGFiZWwsIGludCAkdmFsdWUsIGJvb2wgJGZhaWwpOiBpbnQge1xuICAgICRHTE9CQUxTWydfX3NlbWFudGlmb2xkX3Rhc2swMzRfdHJhY2UnXVtdID0gJ2VmZmVjdDonIC4gJGxhYmVsO1xuICAgIGlmICgkZmFpbCkgdGhyb3cgbmV3IFByb2JlT3BlcmF0aW9uRmFpbHVyZSgnUHJvYmVPcGVyYXRpb25GYWlsdXJlJyk7XG4gICAgcmV0dXJuICR2YWx1ZTtcbn1cbmZ1bmN0aW9uIHByb2JlQWNxdWlyZShib29sICRmYWlsKTogUHJvYmVSZXNvdXJjZSB7XG4gICAgJEdMT0JBTFNbJ19fc2VtYW50aWZvbGRfdGFzazAzNF90cmFjZSddW10gPSAnYWNxdWlyZSc7XG4gICAgaWYgKCRmYWlsKSB0aHJvdyBuZXcgUHJvYmVBY3F1aXJlRmFpbHVyZSgnUHJvYmVBY3F1aXJlRmFpbHVyZScpO1xuICAgIHRyeSB7ICRoYW5kbGUgPSBAZm9wZW4oKHN0cmluZykgZ2V0ZW52KCdTRU1BTlRJRk9MRF9UQVNLMDM0X1BST0JFX1BBVEgnKSwgJ3JiJyk7IH1cbiAgICBjYXRjaCAoVGhyb3dhYmxlKSB7IHRocm93IG5ldyBQcm9iZUFjcXVpcmVGYWlsdXJlKCdQcm9iZUFjcXVpcmVGYWlsdXJlJyk7IH1cbiAgICBpZiAoJGhhbmRsZSA9PT0gZmFsc2UpIHRocm93IG5ldyBQcm9iZUFjcXVpcmVGYWlsdXJlKCdQcm9iZUFjcXVpcmVGYWlsdXJlJyk7XG4gICAgcmV0dXJuIG5ldyBQcm9iZVJlc291cmNlKCRoYW5kbGUpO1xufVxuZnVuY3Rpb24gcHJvYmVSZWFkKFByb2JlUmVzb3VyY2UgJHJlc291cmNlLCBib29sICRmYWlsKTogP3N0cmluZyB7XG4gICAgaWYgKCRyZXNvdXJjZS0+Y2xvc2VkKSB0aHJvdyBuZXcgUHJvYmVSZXNvdXJjZUNsb3NlZCgnUHJvYmVSZXNvdXJjZUNsb3NlZCcpO1xuICAgICRHTE9CQUxTWydfX3NlbWFudGlmb2xkX3Rhc2swMzRfdHJhY2UnXVtdID0gJ3JlYWQnO1xuICAgIGlmICgkZmFpbCkgdGhyb3cgbmV3IFByb2JlUmVhZEZhaWx1cmUoJ1Byb2JlUmVhZEZhaWx1cmUnKTtcbiAgICB0cnkgeyAkbGluZSA9IEBmZ2V0cygkcmVzb3VyY2UtPmhhbmRsZSk7IH1cbiAgICBjYXRjaCAoVGhyb3dhYmxlKSB7IHRocm93IG5ldyBQcm9iZVJlYWRGYWlsdXJlKCdQcm9iZVJlYWRGYWlsdXJlJyk7IH1cbiAgICBpZiAoJGxpbmUgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChmZW9mKCRyZXNvdXJjZS0+aGFuZGxlKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHRocm93IG5ldyBQcm9iZVJlYWRGYWlsdXJlKCdQcm9iZVJlYWRGYWlsdXJlJyk7XG4gICAgfVxuICAgIHJldHVybiBydHJpbSgkbGluZSwgXCJcXFxcclxcXFxuXCIpO1xufVxuZnVuY3Rpb24gcHJvYmVDbG9zZShQcm9iZVJlc291cmNlICRyZXNvdXJjZSwgYm9vbCAkZmFpbCk6IHZvaWQge1xuICAgIGlmICgkcmVzb3VyY2UtPmNsb3NlZCkgdGhyb3cgbmV3IFByb2JlUmVzb3VyY2VDbG9zZWQoJ1Byb2JlUmVzb3VyY2VDbG9zZWQnKTtcbiAgICAkR0xPQkFMU1snX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlJ11bXSA9ICdjbG9zZSc7XG4gICAgdHJ5IHsgJGNsb3NlZCA9IEBmY2xvc2UoJHJlc291cmNlLT5oYW5kbGUpOyB9XG4gICAgY2F0Y2ggKFRocm93YWJsZSkgeyAkcmVzb3VyY2UtPmNsb3NlZCA9IHRydWU7IHRocm93IG5ldyBQcm9iZUNsb3NlRmFpbHVyZSgnUHJvYmVDbG9zZUZhaWx1cmUnKTsgfVxuICAgICRyZXNvdXJjZS0+Y2xvc2VkID0gdHJ1ZTtcbiAgICBpZiAoJGZhaWwgfHwgISRjbG9zZWQpIHRocm93IG5ldyBQcm9iZUNsb3NlRmFpbHVyZSgnUHJvYmVDbG9zZUZhaWx1cmUnKTtcbn1cbmZ1bmN0aW9uIHByb2JlVHJhY2UoKTogc3RyaW5nIHsgcmV0dXJuIGltcGxvZGUoJywnLCAkR0xPQkFMU1snX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlJ10pOyB9XG4vKiBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtZW5kICovXG5cbmBcblxuY29uc3QgcnVieVN1cHBvcnQgPSBgIyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnRcbmNsYXNzIFByb2JlT3BlcmF0aW9uRmFpbHVyZSA8IFN0YW5kYXJkRXJyb3I7IGVuZFxuY2xhc3MgUHJvYmVBY3F1aXJlRmFpbHVyZSA8IFN0YW5kYXJkRXJyb3I7IGVuZFxuY2xhc3MgUHJvYmVSZWFkRmFpbHVyZSA8IFN0YW5kYXJkRXJyb3I7IGVuZFxuY2xhc3MgUHJvYmVDbG9zZUZhaWx1cmUgPCBTdGFuZGFyZEVycm9yOyBlbmRcbmNsYXNzIFByb2JlUmVzb3VyY2VDbG9zZWQgPCBTdGFuZGFyZEVycm9yOyBlbmRcbmNsYXNzIFByb2JlUmVzb3VyY2VcbiAgYXR0cl9hY2Nlc3NvciA6aGFuZGxlLCA6Y2xvc2VkXG4gIGRlZiBpbml0aWFsaXplKGhhbmRsZSk7IEBoYW5kbGUgPSBoYW5kbGU7IEBjbG9zZWQgPSBmYWxzZTsgZW5kXG5lbmRcbiRfX3NlbWFudGlmb2xkX3Rhc2swMzRfdHJhY2UgPSBbXVxuZGVmIHByb2JlRWZmZWN0KGxhYmVsLCB2YWx1ZSwgZmFpbF92YWx1ZSlcbiAgJF9fc2VtYW50aWZvbGRfdGFzazAzNF90cmFjZSA8PCBcImVmZmVjdDoje2xhYmVsfVwiXG4gIHJhaXNlIFByb2JlT3BlcmF0aW9uRmFpbHVyZSwgXCJQcm9iZU9wZXJhdGlvbkZhaWx1cmVcIiBpZiBmYWlsX3ZhbHVlXG4gIHZhbHVlXG5lbmRcbmRlZiBwcm9iZUFjcXVpcmUoZmFpbF92YWx1ZSlcbiAgJF9fc2VtYW50aWZvbGRfdGFzazAzNF90cmFjZSA8PCBcImFjcXVpcmVcIlxuICByYWlzZSBQcm9iZUFjcXVpcmVGYWlsdXJlLCBcIlByb2JlQWNxdWlyZUZhaWx1cmVcIiBpZiBmYWlsX3ZhbHVlXG4gIGJlZ2luOyBQcm9iZVJlc291cmNlLm5ldyhGaWxlLm9wZW4oRU5WLmZldGNoKFwiU0VNQU5USUZPTERfVEFTSzAzNF9QUk9CRV9QQVRIXCIpLCBcInJcIikpOyByZXNjdWUgUHJvYmVBY3F1aXJlRmFpbHVyZTsgcmFpc2U7IHJlc2N1ZSBTdGFuZGFyZEVycm9yOyByYWlzZSBQcm9iZUFjcXVpcmVGYWlsdXJlLCBcIlByb2JlQWNxdWlyZUZhaWx1cmVcIjsgZW5kXG5lbmRcbmRlZiBwcm9iZVJlYWQocmVzb3VyY2UsIGZhaWxfdmFsdWUpXG4gIHJhaXNlIFByb2JlUmVzb3VyY2VDbG9zZWQsIFwiUHJvYmVSZXNvdXJjZUNsb3NlZFwiIGlmIHJlc291cmNlLmNsb3NlZFxuICAkX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlIDw8IFwicmVhZFwiXG4gIHJhaXNlIFByb2JlUmVhZEZhaWx1cmUsIFwiUHJvYmVSZWFkRmFpbHVyZVwiIGlmIGZhaWxfdmFsdWVcbiAgYmVnaW47IHZhbHVlID0gcmVzb3VyY2UuaGFuZGxlLmdldHM7IHZhbHVlLm5pbD8gPyBuaWwgOiB2YWx1ZS5jaG9tcDsgcmVzY3VlIFByb2JlUmVhZEZhaWx1cmU7IHJhaXNlOyByZXNjdWUgU3RhbmRhcmRFcnJvcjsgcmFpc2UgUHJvYmVSZWFkRmFpbHVyZSwgXCJQcm9iZVJlYWRGYWlsdXJlXCI7IGVuZFxuZW5kXG5kZWYgcHJvYmVDbG9zZShyZXNvdXJjZSwgZmFpbF92YWx1ZSlcbiAgcmFpc2UgUHJvYmVSZXNvdXJjZUNsb3NlZCwgXCJQcm9iZVJlc291cmNlQ2xvc2VkXCIgaWYgcmVzb3VyY2UuY2xvc2VkXG4gICRfX3NlbWFudGlmb2xkX3Rhc2swMzRfdHJhY2UgPDwgXCJjbG9zZVwiXG4gIGJlZ2luOyByZXNvdXJjZS5oYW5kbGUuY2xvc2U7IHJlc2N1ZSBTdGFuZGFyZEVycm9yOyByZXNvdXJjZS5jbG9zZWQgPSB0cnVlOyByYWlzZSBQcm9iZUNsb3NlRmFpbHVyZSwgXCJQcm9iZUNsb3NlRmFpbHVyZVwiOyBlbmRcbiAgcmVzb3VyY2UuY2xvc2VkID0gdHJ1ZVxuICByYWlzZSBQcm9iZUNsb3NlRmFpbHVyZSwgXCJQcm9iZUNsb3NlRmFpbHVyZVwiIGlmIGZhaWxfdmFsdWVcbiAgbmlsXG5lbmRcbmRlZiBwcm9iZVRyYWNlOyAkX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlLmpvaW4oXCIsXCIpOyBlbmRcbiMgc2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0LWVuZFxuXG5gXG5cbmNvbnN0IGphdmFzY3JpcHRTdXBwb3J0ID0gYC8qIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydCAqL1xuY29uc3QgX19zZW1hbnRpZm9sZFRhc2swMzRGcyA9IHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZShcIm5vZGU6ZnNcIilcbmNsYXNzIFByb2JlT3BlcmF0aW9uRmFpbHVyZSBleHRlbmRzIEVycm9yIHt9XG5jbGFzcyBQcm9iZUFjcXVpcmVGYWlsdXJlIGV4dGVuZHMgRXJyb3Ige31cbmNsYXNzIFByb2JlUmVhZEZhaWx1cmUgZXh0ZW5kcyBFcnJvciB7fVxuY2xhc3MgUHJvYmVDbG9zZUZhaWx1cmUgZXh0ZW5kcyBFcnJvciB7fVxuY2xhc3MgUHJvYmVSZXNvdXJjZUNsb3NlZCBleHRlbmRzIEVycm9yIHt9XG5jbGFzcyBQcm9iZVJlc291cmNlIHsgY29uc3RydWN0b3IoaGFuZGxlKSB7IHRoaXMuaGFuZGxlID0gaGFuZGxlOyB0aGlzLmNsb3NlZCA9IGZhbHNlOyB0aGlzLnBvc2l0aW9uID0gMCB9IH1cbmNvbnN0IF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2UgPSBbXVxuZnVuY3Rpb24gcHJvYmVFZmZlY3QobGFiZWwsIHZhbHVlLCBmYWlsKSB7IF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2UucHVzaChcXGBlZmZlY3Q6XFwke2xhYmVsfVxcYCk7IGlmIChmYWlsKSB0aHJvdyBuZXcgUHJvYmVPcGVyYXRpb25GYWlsdXJlKFwiUHJvYmVPcGVyYXRpb25GYWlsdXJlXCIpOyByZXR1cm4gdmFsdWUgfVxuZnVuY3Rpb24gcHJvYmVBY3F1aXJlKGZhaWwpIHsgX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZS5wdXNoKFwiYWNxdWlyZVwiKTsgaWYgKGZhaWwpIHRocm93IG5ldyBQcm9iZUFjcXVpcmVGYWlsdXJlKFwiUHJvYmVBY3F1aXJlRmFpbHVyZVwiKTsgdHJ5IHsgcmV0dXJuIG5ldyBQcm9iZVJlc291cmNlKF9fc2VtYW50aWZvbGRUYXNrMDM0RnMub3BlblN5bmMocHJvY2Vzcy5lbnYuU0VNQU5USUZPTERfVEFTSzAzNF9QUk9CRV9QQVRILCBcInJcIikpIH0gY2F0Y2ggeyB0aHJvdyBuZXcgUHJvYmVBY3F1aXJlRmFpbHVyZShcIlByb2JlQWNxdWlyZUZhaWx1cmVcIikgfSB9XG5mdW5jdGlvbiBwcm9iZVJlYWQocmVzb3VyY2UsIGZhaWwpIHsgaWYgKHJlc291cmNlLmNsb3NlZCkgdGhyb3cgbmV3IFByb2JlUmVzb3VyY2VDbG9zZWQoXCJQcm9iZVJlc291cmNlQ2xvc2VkXCIpOyBfX3NlbWFudGlmb2xkVGFzazAzNFRyYWNlLnB1c2goXCJyZWFkXCIpOyBpZiAoZmFpbCkgdGhyb3cgbmV3IFByb2JlUmVhZEZhaWx1cmUoXCJQcm9iZVJlYWRGYWlsdXJlXCIpOyB0cnkgeyBjb25zdCBieXRlcyA9IFtdOyBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoMSk7IHdoaWxlICh0cnVlKSB7IGNvbnN0IGNvdW50ID0gX19zZW1hbnRpZm9sZFRhc2swMzRGcy5yZWFkU3luYyhyZXNvdXJjZS5oYW5kbGUsIGJ1ZmZlciwgMCwgMSwgcmVzb3VyY2UucG9zaXRpb24rKyk7IGlmIChjb3VudCA9PT0gMCkgcmV0dXJuIGJ5dGVzLmxlbmd0aCA9PT0gMCA/IG51bGwgOiBCdWZmZXIuZnJvbShieXRlcykudG9TdHJpbmcoXCJ1dGY4XCIpOyBpZiAoYnVmZmVyWzBdID09PSAxMCkgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ5dGVzKS50b1N0cmluZyhcInV0ZjhcIikucmVwbGFjZSgvXFxcXHIkL3UsIFwiXCIpOyBieXRlcy5wdXNoKGJ1ZmZlclswXSkgfSB9IGNhdGNoIHsgdGhyb3cgbmV3IFByb2JlUmVhZEZhaWx1cmUoXCJQcm9iZVJlYWRGYWlsdXJlXCIpIH0gfVxuZnVuY3Rpb24gcHJvYmVDbG9zZShyZXNvdXJjZSwgZmFpbCkgeyBpZiAocmVzb3VyY2UuY2xvc2VkKSB0aHJvdyBuZXcgUHJvYmVSZXNvdXJjZUNsb3NlZChcIlByb2JlUmVzb3VyY2VDbG9zZWRcIik7IF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2UucHVzaChcImNsb3NlXCIpOyB0cnkgeyBfX3NlbWFudGlmb2xkVGFzazAzNEZzLmNsb3NlU3luYyhyZXNvdXJjZS5oYW5kbGUpIH0gY2F0Y2ggeyByZXNvdXJjZS5jbG9zZWQgPSB0cnVlOyB0aHJvdyBuZXcgUHJvYmVDbG9zZUZhaWx1cmUoXCJQcm9iZUNsb3NlRmFpbHVyZVwiKSB9IHJlc291cmNlLmNsb3NlZCA9IHRydWU7IGlmIChmYWlsKSB0aHJvdyBuZXcgUHJvYmVDbG9zZUZhaWx1cmUoXCJQcm9iZUNsb3NlRmFpbHVyZVwiKSB9XG5mdW5jdGlvbiBwcm9iZVRyYWNlKCkgeyByZXR1cm4gX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZS5qb2luKFwiLFwiKSB9XG4vKiBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtZW5kICovXG5cbmBcblxuY29uc3QgdHlwZXNjcmlwdFN1cHBvcnQgPSBgLyogc2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0ICovXG5jb25zdCBfX3NlbWFudGlmb2xkVGFzazAzNEZzID0gcHJvY2Vzcy5nZXRCdWlsdGluTW9kdWxlKFwibm9kZTpmc1wiKVxuY2xhc3MgUHJvYmVPcGVyYXRpb25GYWlsdXJlIGV4dGVuZHMgRXJyb3Ige31cbmNsYXNzIFByb2JlQWNxdWlyZUZhaWx1cmUgZXh0ZW5kcyBFcnJvciB7fVxuY2xhc3MgUHJvYmVSZWFkRmFpbHVyZSBleHRlbmRzIEVycm9yIHt9XG5jbGFzcyBQcm9iZUNsb3NlRmFpbHVyZSBleHRlbmRzIEVycm9yIHt9XG5jbGFzcyBQcm9iZVJlc291cmNlQ2xvc2VkIGV4dGVuZHMgRXJyb3Ige31cbmNsYXNzIFByb2JlUmVzb3VyY2UgeyBjbG9zZWQgPSBmYWxzZTsgcG9zaXRpb24gPSAwOyBjb25zdHJ1Y3RvcihyZWFkb25seSBoYW5kbGU6IG51bWJlcikge30gfVxuY29uc3QgX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZTogc3RyaW5nW10gPSBbXVxuZnVuY3Rpb24gcHJvYmVFZmZlY3QobGFiZWw6IHN0cmluZywgdmFsdWU6IG51bWJlciwgZmFpbDogYm9vbGVhbik6IG51bWJlciB7IF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2UucHVzaChcXGBlZmZlY3Q6XFwke2xhYmVsfVxcYCk7IGlmIChmYWlsKSB0aHJvdyBuZXcgUHJvYmVPcGVyYXRpb25GYWlsdXJlKFwiUHJvYmVPcGVyYXRpb25GYWlsdXJlXCIpOyByZXR1cm4gdmFsdWUgfVxuZnVuY3Rpb24gcHJvYmVBY3F1aXJlKGZhaWw6IGJvb2xlYW4pOiBQcm9iZVJlc291cmNlIHsgX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZS5wdXNoKFwiYWNxdWlyZVwiKTsgaWYgKGZhaWwpIHRocm93IG5ldyBQcm9iZUFjcXVpcmVGYWlsdXJlKFwiUHJvYmVBY3F1aXJlRmFpbHVyZVwiKTsgdHJ5IHsgcmV0dXJuIG5ldyBQcm9iZVJlc291cmNlKF9fc2VtYW50aWZvbGRUYXNrMDM0RnMub3BlblN5bmMocHJvY2Vzcy5lbnYuU0VNQU5USUZPTERfVEFTSzAzNF9QUk9CRV9QQVRIIGFzIHN0cmluZywgXCJyXCIpKSB9IGNhdGNoIHsgdGhyb3cgbmV3IFByb2JlQWNxdWlyZUZhaWx1cmUoXCJQcm9iZUFjcXVpcmVGYWlsdXJlXCIpIH0gfVxuZnVuY3Rpb24gcHJvYmVSZWFkKHJlc291cmNlOiBQcm9iZVJlc291cmNlLCBmYWlsOiBib29sZWFuKTogc3RyaW5nIHwgbnVsbCB7IGlmIChyZXNvdXJjZS5jbG9zZWQpIHRocm93IG5ldyBQcm9iZVJlc291cmNlQ2xvc2VkKFwiUHJvYmVSZXNvdXJjZUNsb3NlZFwiKTsgX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZS5wdXNoKFwicmVhZFwiKTsgaWYgKGZhaWwpIHRocm93IG5ldyBQcm9iZVJlYWRGYWlsdXJlKFwiUHJvYmVSZWFkRmFpbHVyZVwiKTsgdHJ5IHsgY29uc3QgYnl0ZXM6IG51bWJlcltdID0gW107IGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygxKTsgd2hpbGUgKHRydWUpIHsgY29uc3QgY291bnQgPSBfX3NlbWFudGlmb2xkVGFzazAzNEZzLnJlYWRTeW5jKHJlc291cmNlLmhhbmRsZSwgYnVmZmVyLCAwLCAxLCByZXNvdXJjZS5wb3NpdGlvbisrKTsgaWYgKGNvdW50ID09PSAwKSByZXR1cm4gYnl0ZXMubGVuZ3RoID09PSAwID8gbnVsbCA6IEJ1ZmZlci5mcm9tKGJ5dGVzKS50b1N0cmluZyhcInV0ZjhcIik7IGlmIChidWZmZXJbMF0gPT09IDEwKSByZXR1cm4gQnVmZmVyLmZyb20oYnl0ZXMpLnRvU3RyaW5nKFwidXRmOFwiKS5yZXBsYWNlKC9cXFxcciQvdSwgXCJcIik7IGJ5dGVzLnB1c2goYnVmZmVyWzBdKSB9IH0gY2F0Y2ggeyB0aHJvdyBuZXcgUHJvYmVSZWFkRmFpbHVyZShcIlByb2JlUmVhZEZhaWx1cmVcIikgfSB9XG5mdW5jdGlvbiBwcm9iZUNsb3NlKHJlc291cmNlOiBQcm9iZVJlc291cmNlLCBmYWlsOiBib29sZWFuKTogdm9pZCB7IGlmIChyZXNvdXJjZS5jbG9zZWQpIHRocm93IG5ldyBQcm9iZVJlc291cmNlQ2xvc2VkKFwiUHJvYmVSZXNvdXJjZUNsb3NlZFwiKTsgX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZS5wdXNoKFwiY2xvc2VcIik7IHRyeSB7IF9fc2VtYW50aWZvbGRUYXNrMDM0RnMuY2xvc2VTeW5jKHJlc291cmNlLmhhbmRsZSkgfSBjYXRjaCB7IHJlc291cmNlLmNsb3NlZCA9IHRydWU7IHRocm93IG5ldyBQcm9iZUNsb3NlRmFpbHVyZShcIlByb2JlQ2xvc2VGYWlsdXJlXCIpIH0gcmVzb3VyY2UuY2xvc2VkID0gdHJ1ZTsgaWYgKGZhaWwpIHRocm93IG5ldyBQcm9iZUNsb3NlRmFpbHVyZShcIlByb2JlQ2xvc2VGYWlsdXJlXCIpIH1cbmZ1bmN0aW9uIHByb2JlVHJhY2UoKTogc3RyaW5nIHsgcmV0dXJuIF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2Uuam9pbihcIixcIikgfVxuLyogc2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0LWVuZCAqL1xuXG5gXG5cbmNvbnN0IGphdmFUb3BTdXBwb3J0ID0gYC8vIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydFxuZmluYWwgY2xhc3MgUHJvYmVPcGVyYXRpb25GYWlsdXJlIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7IFByb2JlT3BlcmF0aW9uRmFpbHVyZSgpIHsgc3VwZXIoXCJQcm9iZU9wZXJhdGlvbkZhaWx1cmVcIik7IH0gfVxuZmluYWwgY2xhc3MgUHJvYmVBY3F1aXJlRmFpbHVyZSBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24geyBQcm9iZUFjcXVpcmVGYWlsdXJlKCkgeyBzdXBlcihcIlByb2JlQWNxdWlyZUZhaWx1cmVcIik7IH0gfVxuZmluYWwgY2xhc3MgUHJvYmVSZWFkRmFpbHVyZSBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24geyBQcm9iZVJlYWRGYWlsdXJlKCkgeyBzdXBlcihcIlByb2JlUmVhZEZhaWx1cmVcIik7IH0gfVxuZmluYWwgY2xhc3MgUHJvYmVDbG9zZUZhaWx1cmUgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsgUHJvYmVDbG9zZUZhaWx1cmUoKSB7IHN1cGVyKFwiUHJvYmVDbG9zZUZhaWx1cmVcIik7IH0gfVxuZmluYWwgY2xhc3MgUHJvYmVSZXNvdXJjZUNsb3NlZCBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24geyBQcm9iZVJlc291cmNlQ2xvc2VkKCkgeyBzdXBlcihcIlByb2JlUmVzb3VyY2VDbG9zZWRcIik7IH0gfVxuZmluYWwgY2xhc3MgUHJvYmVSZXNvdXJjZSB7IGZpbmFsIGphdmEubmlvLmNoYW5uZWxzLkZpbGVDaGFubmVsIGhhbmRsZTsgYm9vbGVhbiBjbG9zZWQgPSBmYWxzZTsgUHJvYmVSZXNvdXJjZShqYXZhLm5pby5jaGFubmVscy5GaWxlQ2hhbm5lbCBoYW5kbGUpIHsgdGhpcy5oYW5kbGUgPSBoYW5kbGU7IH0gfVxuLy8gc2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0LXRvcC1lbmRcblxuYFxuXG5jb25zdCBqYXZhTWVtYmVyU3VwcG9ydCA9IGAgIC8vIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC1tZW1iZXJzXG4gIHByaXZhdGUgc3RhdGljIGZpbmFsIGphdmEudXRpbC5BcnJheUxpc3Q8U3RyaW5nPiBfX3NlbWFudGlmb2xkVGFzazAzNFRyYWNlID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3Q8PigpO1xuICBzdGF0aWMgaW50IHByb2JlRWZmZWN0KFN0cmluZyBsYWJlbCwgaW50IHZhbHVlLCBib29sZWFuIGZhaWwpIHsgX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZS5hZGQoXCJlZmZlY3Q6XCIgKyBsYWJlbCk7IGlmIChmYWlsKSB0aHJvdyBuZXcgUHJvYmVPcGVyYXRpb25GYWlsdXJlKCk7IHJldHVybiB2YWx1ZTsgfVxuICBzdGF0aWMgUHJvYmVSZXNvdXJjZSBwcm9iZUFjcXVpcmUoYm9vbGVhbiBmYWlsKSB7IF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2UuYWRkKFwiYWNxdWlyZVwiKTsgaWYgKGZhaWwpIHRocm93IG5ldyBQcm9iZUFjcXVpcmVGYWlsdXJlKCk7IHRyeSB7IHJldHVybiBuZXcgUHJvYmVSZXNvdXJjZShqYXZhLm5pby5jaGFubmVscy5GaWxlQ2hhbm5lbC5vcGVuKGphdmEubmlvLmZpbGUuUGF0aC5vZihTeXN0ZW0uZ2V0ZW52KFwiU0VNQU5USUZPTERfVEFTSzAzNF9QUk9CRV9QQVRIXCIpKSkpOyB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIHwgamF2YS5pby5JT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsgdGhyb3cgbmV3IFByb2JlQWNxdWlyZUZhaWx1cmUoKTsgfSB9XG4gIHN0YXRpYyBqYXZhLnV0aWwuT3B0aW9uYWw8U3RyaW5nPiBwcm9iZVJlYWQoUHJvYmVSZXNvdXJjZSByZXNvdXJjZSwgYm9vbGVhbiBmYWlsKSB7IGlmIChyZXNvdXJjZS5jbG9zZWQpIHRocm93IG5ldyBQcm9iZVJlc291cmNlQ2xvc2VkKCk7IF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2UuYWRkKFwicmVhZFwiKTsgaWYgKGZhaWwpIHRocm93IG5ldyBQcm9iZVJlYWRGYWlsdXJlKCk7IHRyeSB7IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ5dGVzID0gbmV3IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7IGphdmEubmlvLkJ5dGVCdWZmZXIgYnVmZmVyID0gamF2YS5uaW8uQnl0ZUJ1ZmZlci5hbGxvY2F0ZSgxKTsgd2hpbGUgKHRydWUpIHsgYnVmZmVyLmNsZWFyKCk7IGludCBjb3VudCA9IHJlc291cmNlLmhhbmRsZS5yZWFkKGJ1ZmZlcik7IGlmIChjb3VudCA8IDApIHJldHVybiBieXRlcy5zaXplKCkgPT0gMCA/IGphdmEudXRpbC5PcHRpb25hbC5lbXB0eSgpIDogamF2YS51dGlsLk9wdGlvbmFsLm9mKGJ5dGVzLnRvU3RyaW5nKGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCkpOyBidWZmZXIuZmxpcCgpOyBieXRlIHZhbHVlID0gYnVmZmVyLmdldCgpOyBpZiAodmFsdWUgPT0gMTApIHJldHVybiBqYXZhLnV0aWwuT3B0aW9uYWwub2YoYnl0ZXMudG9TdHJpbmcoamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzLlVURl84KS5yZXBsYWNlRmlyc3QoXCJcXFxcciRcIiwgXCJcIikpOyBieXRlcy53cml0ZSh2YWx1ZSk7IH0gfSBjYXRjaCAoamF2YS5pby5JT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsgdGhyb3cgbmV3IFByb2JlUmVhZEZhaWx1cmUoKTsgfSB9XG4gIHN0YXRpYyB2b2lkIHByb2JlQ2xvc2UoUHJvYmVSZXNvdXJjZSByZXNvdXJjZSwgYm9vbGVhbiBmYWlsKSB7IGlmIChyZXNvdXJjZS5jbG9zZWQpIHRocm93IG5ldyBQcm9iZVJlc291cmNlQ2xvc2VkKCk7IF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2UuYWRkKFwiY2xvc2VcIik7IHRyeSB7IHJlc291cmNlLmhhbmRsZS5jbG9zZSgpOyB9IGNhdGNoIChqYXZhLmlvLklPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeyByZXNvdXJjZS5jbG9zZWQgPSB0cnVlOyB0aHJvdyBuZXcgUHJvYmVDbG9zZUZhaWx1cmUoKTsgfSByZXNvdXJjZS5jbG9zZWQgPSB0cnVlOyBpZiAoZmFpbCkgdGhyb3cgbmV3IFByb2JlQ2xvc2VGYWlsdXJlKCk7IH1cbiAgc3RhdGljIFN0cmluZyBwcm9iZVRyYWNlKCkgeyByZXR1cm4gU3RyaW5nLmpvaW4oXCIsXCIsIF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2UpOyB9XG4gIC8vIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC1tZW1iZXJzLWVuZFxuXG5gXG5cbmNvbnN0IGphdmFQcm9ncmFtTmVzdGVkU3VwcG9ydCA9IGAgIC8vIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC1wcm9ncmFtXG4gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgUHJvYmVPcGVyYXRpb25GYWlsdXJlIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7IFByb2JlT3BlcmF0aW9uRmFpbHVyZSgpIHsgc3VwZXIoXCJQcm9iZU9wZXJhdGlvbkZhaWx1cmVcIik7IH0gfVxuICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFByb2JlQWNxdWlyZUZhaWx1cmUgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsgUHJvYmVBY3F1aXJlRmFpbHVyZSgpIHsgc3VwZXIoXCJQcm9iZUFjcXVpcmVGYWlsdXJlXCIpOyB9IH1cbiAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBQcm9iZVJlYWRGYWlsdXJlIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7IFByb2JlUmVhZEZhaWx1cmUoKSB7IHN1cGVyKFwiUHJvYmVSZWFkRmFpbHVyZVwiKTsgfSB9XG4gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgUHJvYmVDbG9zZUZhaWx1cmUgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsgUHJvYmVDbG9zZUZhaWx1cmUoKSB7IHN1cGVyKFwiUHJvYmVDbG9zZUZhaWx1cmVcIik7IH0gfVxuICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFByb2JlUmVzb3VyY2VDbG9zZWQgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsgUHJvYmVSZXNvdXJjZUNsb3NlZCgpIHsgc3VwZXIoXCJQcm9iZVJlc291cmNlQ2xvc2VkXCIpOyB9IH1cbiAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBQcm9iZVJlc291cmNlIHsgZmluYWwgamF2YS5uaW8uY2hhbm5lbHMuRmlsZUNoYW5uZWwgaGFuZGxlOyBib29sZWFuIGNsb3NlZCA9IGZhbHNlOyBQcm9iZVJlc291cmNlKGphdmEubmlvLmNoYW5uZWxzLkZpbGVDaGFubmVsIGhhbmRsZSkgeyB0aGlzLmhhbmRsZSA9IGhhbmRsZTsgfSB9XG4gIC8vIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC1wcm9ncmFtLWVuZFxuXG5gXG5cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gKi9cbmNvbnN0IGphdmFQcm92aWRlclNoaW1zID0ge1xuICBwcm9iZUFjcXVpcmU6IFwicHVibGljIHN0YXRpYyBQcm9iZVJlc291cmNlIF9fc2VtYW50aWZvbGRfcHJvdmlkZXJfamF2YV9wcm9iZUFjcXVpcmUoYm9vbGVhbiBmYWlsKSB7IHJldHVybiBwcm9iZUFjcXVpcmUoZmFpbCk7IH1cIixcbiAgcHJvYmVDbG9zZTogXCJwdWJsaWMgc3RhdGljIHZvaWQgX19zZW1hbnRpZm9sZF9wcm92aWRlcl9qYXZhX3Byb2JlQ2xvc2UoUHJvYmVSZXNvdXJjZSByZXNvdXJjZSwgYm9vbGVhbiBmYWlsKSB7IHByb2JlQ2xvc2UocmVzb3VyY2UsIGZhaWwpOyB9XCIsXG4gIHByb2JlRWZmZWN0OiBcInB1YmxpYyBzdGF0aWMgaW50IF9fc2VtYW50aWZvbGRfcHJvdmlkZXJfamF2YV9wcm9iZUVmZmVjdChTdHJpbmcgbGFiZWwsIGludCB2YWx1ZSwgYm9vbGVhbiBmYWlsKSB7IHJldHVybiBwcm9iZUVmZmVjdChsYWJlbCwgdmFsdWUsIGZhaWwpOyB9XCIsXG4gIHByb2JlUmVhZDogXCJwdWJsaWMgc3RhdGljIGphdmEudXRpbC5PcHRpb25hbDxTdHJpbmc+IF9fc2VtYW50aWZvbGRfcHJvdmlkZXJfamF2YV9wcm9iZVJlYWQoUHJvYmVSZXNvdXJjZSByZXNvdXJjZSwgYm9vbGVhbiBmYWlsKSB7IHJldHVybiBwcm9iZVJlYWQocmVzb3VyY2UsIGZhaWwpOyB9XCIsXG4gIHByb2JlVHJhY2U6IFwicHVibGljIHN0YXRpYyBTdHJpbmcgX19zZW1hbnRpZm9sZF9wcm92aWRlcl9qYXZhX3Byb2JlVHJhY2UoKSB7IHJldHVybiBwcm9iZVRyYWNlKCk7IH1cIlxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"php.d.ts","sourceRoot":"","sources":["../../../src/backends/php.js"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAJvB,OAAO,sBAAsB,EAAE,cAIR,EAAE,MAAM,EAH/B,OAAO,aAAa,EAAE,YAGS,GAF7B,IAAI,
|
|
1
|
+
{"version":3,"file":"php.d.ts","sourceRoot":"","sources":["../../../src/backends/php.js"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAJvB,OAAO,sBAAsB,EAAE,cAIR,EAAE,MAAM,EAH/B,OAAO,aAAa,EAAE,YAGS,GAF7B,IAAI,CA6IhB"}
|