aws-delivlib 14.15.96 → 14.15.98

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/lib/build-spec.d.ts +12 -12
  2. package/lib/build-spec.js +1 -1
  3. package/lib/custom-resource-handlers/src/certificate-signing-request.tsbuildinfo +1 -1
  4. package/lib/custom-resource-handlers/src/pgp-secret.tsbuildinfo +1 -1
  5. package/lib/custom-resource-handlers/src/private-key.tsbuildinfo +1 -1
  6. package/lib/open-pgp-key-pair.js +1 -1
  7. package/lib/package-integrity/handler/validate.bundle.js +158 -112
  8. package/lib/pipeline.js +1 -1
  9. package/lib/publishing/github/node_modules/.yarn-integrity +4 -4
  10. package/lib/publishing/github/node_modules/@types/jsonwebtoken/node_modules/@types/node/README.md +1 -1
  11. package/lib/publishing/github/node_modules/@types/jsonwebtoken/node_modules/@types/node/cluster.d.ts +1 -1
  12. package/lib/publishing/github/node_modules/@types/jsonwebtoken/node_modules/@types/node/diagnostics_channel.d.ts +20 -1
  13. package/lib/publishing/github/node_modules/@types/jsonwebtoken/node_modules/@types/node/fs/promises.d.ts +13 -0
  14. package/lib/publishing/github/node_modules/@types/jsonwebtoken/node_modules/@types/node/fs.d.ts +86 -2
  15. package/lib/publishing/github/node_modules/@types/jsonwebtoken/node_modules/@types/node/http.d.ts +2 -1
  16. package/lib/publishing/github/node_modules/@types/jsonwebtoken/node_modules/@types/node/net.d.ts +12 -6
  17. package/lib/publishing/github/node_modules/@types/jsonwebtoken/node_modules/@types/node/package.json +2 -2
  18. package/lib/publishing/github/node_modules/@types/jsonwebtoken/node_modules/@types/node/vm.d.ts +20 -5
  19. package/lib/publishing/github/node_modules/jwa/index.js +16 -2
  20. package/lib/publishing/github/node_modules/jwa/package.json +2 -2
  21. package/lib/publishing/github/node_modules/semver/bin/semver.js +2 -0
  22. package/lib/publishing/github/node_modules/semver/classes/comparator.js +2 -0
  23. package/lib/publishing/github/node_modules/semver/classes/index.js +2 -0
  24. package/lib/publishing/github/node_modules/semver/classes/range.js +2 -0
  25. package/lib/publishing/github/node_modules/semver/classes/semver.js +4 -3
  26. package/lib/publishing/github/node_modules/semver/functions/clean.js +2 -0
  27. package/lib/publishing/github/node_modules/semver/functions/cmp.js +2 -0
  28. package/lib/publishing/github/node_modules/semver/functions/coerce.js +2 -0
  29. package/lib/publishing/github/node_modules/semver/functions/compare-build.js +2 -0
  30. package/lib/publishing/github/node_modules/semver/functions/compare-loose.js +2 -0
  31. package/lib/publishing/github/node_modules/semver/functions/compare.js +2 -0
  32. package/lib/publishing/github/node_modules/semver/functions/diff.js +2 -0
  33. package/lib/publishing/github/node_modules/semver/functions/eq.js +2 -0
  34. package/lib/publishing/github/node_modules/semver/functions/gt.js +2 -0
  35. package/lib/publishing/github/node_modules/semver/functions/gte.js +2 -0
  36. package/lib/publishing/github/node_modules/semver/functions/inc.js +2 -0
  37. package/lib/publishing/github/node_modules/semver/functions/lt.js +2 -0
  38. package/lib/publishing/github/node_modules/semver/functions/lte.js +2 -0
  39. package/lib/publishing/github/node_modules/semver/functions/major.js +2 -0
  40. package/lib/publishing/github/node_modules/semver/functions/minor.js +2 -0
  41. package/lib/publishing/github/node_modules/semver/functions/neq.js +2 -0
  42. package/lib/publishing/github/node_modules/semver/functions/parse.js +2 -0
  43. package/lib/publishing/github/node_modules/semver/functions/patch.js +2 -0
  44. package/lib/publishing/github/node_modules/semver/functions/prerelease.js +2 -0
  45. package/lib/publishing/github/node_modules/semver/functions/rcompare.js +2 -0
  46. package/lib/publishing/github/node_modules/semver/functions/rsort.js +2 -0
  47. package/lib/publishing/github/node_modules/semver/functions/satisfies.js +2 -0
  48. package/lib/publishing/github/node_modules/semver/functions/sort.js +2 -0
  49. package/lib/publishing/github/node_modules/semver/functions/valid.js +2 -0
  50. package/lib/publishing/github/node_modules/semver/index.js +2 -0
  51. package/lib/publishing/github/node_modules/semver/internal/constants.js +2 -0
  52. package/lib/publishing/github/node_modules/semver/internal/debug.js +2 -0
  53. package/lib/publishing/github/node_modules/semver/internal/identifiers.js +2 -0
  54. package/lib/publishing/github/node_modules/semver/internal/lrucache.js +2 -0
  55. package/lib/publishing/github/node_modules/semver/internal/parse-options.js +2 -0
  56. package/lib/publishing/github/node_modules/semver/internal/re.js +8 -4
  57. package/lib/publishing/github/node_modules/semver/package.json +3 -3
  58. package/lib/publishing/github/node_modules/semver/preload.js +2 -0
  59. package/lib/publishing/github/node_modules/semver/ranges/gtr.js +2 -0
  60. package/lib/publishing/github/node_modules/semver/ranges/intersects.js +2 -0
  61. package/lib/publishing/github/node_modules/semver/ranges/ltr.js +2 -0
  62. package/lib/publishing/github/node_modules/semver/ranges/max-satisfying.js +2 -0
  63. package/lib/publishing/github/node_modules/semver/ranges/min-satisfying.js +2 -0
  64. package/lib/publishing/github/node_modules/semver/ranges/min-version.js +2 -0
  65. package/lib/publishing/github/node_modules/semver/ranges/outside.js +2 -0
  66. package/lib/publishing/github/node_modules/semver/ranges/simplify.js +2 -0
  67. package/lib/publishing/github/node_modules/semver/ranges/subset.js +2 -0
  68. package/lib/publishing/github/node_modules/semver/ranges/to-comparators.js +2 -0
  69. package/lib/publishing/github/node_modules/semver/ranges/valid.js +2 -0
  70. package/lib/shellable.js +1 -1
  71. package/lib/util.js +1 -1
  72. package/package.json +9 -9
@@ -47,20 +47,20 @@ export interface SimpleBuildSpecProps {
47
47
  };
48
48
  }
49
49
  export interface BuildSpecStruct {
50
- version: '0.2';
50
+ 'version': '0.2';
51
51
  'run-as'?: string;
52
- env?: EnvStruct;
53
- phases?: {
52
+ 'env'?: EnvStruct;
53
+ 'phases'?: {
54
54
  [key: string]: PhaseStruct;
55
55
  };
56
- artifacts?: PrimaryArtifactStruct;
57
- cache?: CacheStruct;
58
- reports?: {
56
+ 'artifacts'?: PrimaryArtifactStruct;
57
+ 'cache'?: CacheStruct;
58
+ 'reports'?: {
59
59
  [key: string]: ReportStruct;
60
60
  };
61
61
  }
62
62
  export interface EnvStruct {
63
- variables?: {
63
+ 'variables'?: {
64
64
  [key: string]: string;
65
65
  };
66
66
  'parameter-store'?: {
@@ -70,18 +70,18 @@ export interface EnvStruct {
70
70
  }
71
71
  export interface PhaseStruct {
72
72
  'run-as'?: string;
73
- commands: string[];
74
- finally?: string[];
73
+ 'commands': string[];
74
+ 'finally'?: string[];
75
75
  }
76
76
  export interface ReportStruct {
77
- files?: string[];
77
+ 'files'?: string[];
78
78
  'base-directory'?: string;
79
79
  'discard-paths'?: 'yes' | 'no';
80
80
  'file-format'?: 'CucumberJson' | 'JunitXml' | 'NunitXml' | 'TestNGXml' | 'VisualStudioTrx';
81
81
  }
82
82
  export interface ArtifactStruct {
83
- files?: string[];
84
- name?: string;
83
+ 'files'?: string[];
84
+ 'name'?: string;
85
85
  'base-directory'?: string;
86
86
  'discard-paths'?: 'yes' | 'no';
87
87
  }
package/lib/build-spec.js CHANGED
@@ -167,4 +167,4 @@ function renameKey(xs, orig, rename) {
167
167
  }
168
168
  return ret;
169
169
  }
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJ1aWxkLXNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQWdEO0FBR2hELE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFhLFNBQVM7SUFDYixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQXVCO1FBQzNDLE9BQU8sSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBMkI7UUFDOUMsaUZBQWlGO1FBQ2pGLHlEQUF5RDtRQUN6RCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUMxQyxLQUFLLENBQUMsNkJBQTZCLElBQUksRUFBRSxFQUN6QyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ2xGLENBQUM7UUFFRixJQUFJLFNBQTRDLENBQUM7UUFDakQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckQsU0FBUyxHQUFHO2dCQUNWLHFCQUFxQixFQUFFLElBQUEsZ0JBQVMsRUFBQyxtQkFBb0IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzNELGdCQUFnQixFQUFFLENBQUM7b0JBQ25CLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztpQkFDbEIsQ0FBQyxDQUFDO2FBQ0osQ0FBQztTQUNIO1FBRUQsT0FBTyxJQUFJLFNBQVMsQ0FBQztZQUNuQixPQUFPLEVBQUUsS0FBSztZQUNkLE1BQU0sRUFBRSxJQUFBLGtCQUFXLEVBQUM7Z0JBQ2xCLE9BQU8sRUFB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U0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztTQUMzSTtRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBMUlELDhCQTBJQztBQXlFRDs7R0FFRztBQUNILFNBQVMsa0JBQWtCLENBQUksRUFBc0I7SUFDbkQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3JCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3BCO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFJLEVBQXNCLEVBQUUsSUFBWSxFQUFFLE1BQWM7SUFDeEUsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEMsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO1FBQ2YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNsQjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1hcFZhbHVlcywgbm9VbmRlZmluZWQgfSBmcm9tICcuL3V0aWwnO1xuXG5cbmNvbnN0IE1BR0lDX0FSVElGQUNUX05BTUUgPSAnUFJJTUFSWSc7XG5cbi8qKlxuICogQ2xhc3MgdG8gbW9kZWwgYSBidWlsZHNwZWMgdmVyc2lvbiAwLjJcbiAqXG4gKiBBcnRpZmFjdCBoYW5kbGluZyBpcyBhIGxpdHRsZSBzcGVjaWFsOiBDb2RlQnVpbGQgd2lsbCBpbnRlcnByZXQgdGhlXG4gKiAnYXJ0aWZhY3RzJyBzZWN0aW9uIGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZXJlIGFyZSBzZWNvbmRhcnlcbiAqIGFydGlmYWN0cyBvciBub3QuXG4gKlxuICogSWYgdGhlcmUgaXMgb25seSBvbmUgYXJ0aWZhY3QsIHRoZSBzaW5nbGUgYXJ0aWZhY3QgbXVzdCBnbyBpbnRvIHRoZSB0b3AtbGV2ZWxcbiAqICdhcnRpZmFjdHMnIHNlY3Rpb24uIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBhcnRpZmFjdHMsIGFsbCBvZiB0aGVtIG11c3QgZ29cbiAqIGludG8gdGhlICdzZWNvbmRhcnktYXJ0aWZhY3RzJyBzZWN0aW9uLiBVcG9uIHJlbmRlcmluZyB0byBKU09OLCB0aGUgY2FsbGVyXG4gKiBtdXN0IHN1cHBseSB0aGUgbmFtZSBvZiB0aGUgcHJpbWFyeSBhcnRpZmFjdCAoaXQncyBkZXRlcm1pbmVkIGJ5XG4gKiB0aGUgQ29kZVBpcGVsaW5lIEFjdGlvbiB0aGF0IGludm9rZXMgdGhlIENvZGVCdWlsZCBQcm9qZWN0IHRoYXQgdXNlcyB0aGlzXG4gKiBidWlsZHNwZWMpLlxuICpcbiAqIElOVkFSSUFOVDogaW4tbWVtb3J5LCB0aGUgQnVpbGRTcGVjIHdpbGwgdHJlYXQgYWxsIGFydGlmYWN0cyB0aGUgc2FtZSAoYXNcbiAqIGEgYmFnIG9mIHNlY29uZGFyeSBhcnRpZmFjdHMpLiBBdCB0aGUgZWRnZXMgKGNvbnN0cnVjdGlvbiBvciByZW5kZXJpbmcpLFxuICogaWYgdGhlcmUncyBvbmx5IGEgc2luZ2xlIGFydGlmYWN0IGl0IHdpbGwgYmUgcmVuZGVyZWQgdG8gdGhlIHByaW1hcnlcbiAqIGFydGlmYWN0LlxuICovXG5leHBvcnQgY2xhc3MgQnVpbGRTcGVjIHtcbiAgcHVibGljIHN0YXRpYyBsaXRlcmFsKHN0cnVjdDogQnVpbGRTcGVjU3RydWN0KSB7XG4gICAgcmV0dXJuIG5ldyBCdWlsZFNwZWMoc3RydWN0KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgc2ltcGxlKHByb3BzOiBTaW1wbGVCdWlsZFNwZWNQcm9wcykge1xuICAgIC8vIFdlIG1lcmdlIHRoZSBwcmltYXJ5IGFydGlmYWN0IGludG8gdGhlIHNlY29uZGFyeSBhcnRpZmFjdHMgdW5kZXIgYSBzcGVjaWFsIGtleVxuICAgIC8vIFRoZXkgd2lsbCBiZSBjb21wYWN0ZWQgYmFjayB0b2dldGhlciBkdXJpbmcgcmVuZGVyaW5nLlxuICAgIGNvbnN0IGFydGlmYWN0RGlyZWN0b3JpZXMgPSBPYmplY3QuYXNzaWduKHt9LFxuICAgICAgcHJvcHMuYWRkaXRpb25hbEFydGlmYWN0RGlyZWN0b3JpZXMgfHwge30sXG4gICAgICBwcm9wcy5hcnRpZmFjdERpcmVjdG9yeSA/IHsgW01BR0lDX0FSVElGQUNUX05BTUVdOiBwcm9wcy5hcnRpZmFjdERpcmVjdG9yeSB9IDoge30sXG4gICAgKTtcblxuICAgIGxldCBhcnRpZmFjdHM6IFByaW1hcnlBcnRpZmFjdFN0cnVjdCB8IHVuZGVmaW5lZDtcbiAgICBpZiAoT2JqZWN0LmtleXMoYXJ0aWZhY3REaXJlY3RvcmllcyB8fCB7fSkubGVuZ3RoID4gMCkge1xuICAgICAgYXJ0aWZhY3RzID0ge1xuICAgICAgICAnc2Vjb25kYXJ5LWFydGlmYWN0cyc6IG1hcFZhbHVlcyhhcnRpZmFjdERpcmVjdG9yaWVzISwgZCA9PiAoe1xuICAgICAgICAgICdiYXNlLWRpcmVjdG9yeSc6IGQsXG4gICAgICAgICAgJ2ZpbGVzJzogWycqKi8qJ10sXG4gICAgICAgIH0pKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCdWlsZFNwZWMoe1xuICAgICAgdmVyc2lvbjogJzAuMicsXG4gICAgICBwaGFzZXM6IG5vVW5kZWZpbmVkKHtcbiAgICAgICAgaW5zdGFsbDogcHJvcHMuaW5zdGFsbCAhPT0gdW5kZWZpbmVkID8geyBjb21tYW5kczogcHJvcHMuaW5zdGFsbCB9IDogdW5kZWZpbmVkLFxuICAgICAgICBwcmVfYnVpbGQ6IHByb3BzLnByZUJ1aWxkICE9PSB1bmRlZmluZWQgPyB7IGNvbW1hbmRzOiBwcm9wcy5wcmVCdWlsZCB9IDogdW5kZWZpbmVkLFxuICAgICAgICBidWlsZDogcHJvcHMuYnVpbGQgIT09IHVuZGVmaW5lZCA/IHsgY29tbWFuZHM6IHByb3BzLmJ1aWxkIH0gOiB1bmRlZmluZWQsXG4gICAgICB9KSxcbiAgICAgIGFydGlmYWN0cyxcbiAgICAgIHJlcG9ydHM6IHByb3BzLnJlcG9ydHMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGVtcHR5KCkge1xuICAgIHJldHVybiBuZXcgQnVpbGRTcGVjKHsgdmVyc2lvbjogJzAuMicgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc3BlYzogQnVpbGRTcGVjU3RydWN0KSB7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFkZGl0aW9uYWxBcnRpZmFjdE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zcGVjLmFydGlmYWN0cyAmJiB0aGlzLnNwZWMuYXJ0aWZhY3RzWydzZWNvbmRhcnktYXJ0aWZhY3RzJ10gfHwge30pLmZpbHRlcihuID0+IG4gIT09IE1BR0lDX0FSVElGQUNUX05BTUUpO1xuICB9XG5cbiAgcHVibGljIG1lcmdlKG90aGVyOiBCdWlsZFNwZWMpOiBCdWlsZFNwZWMge1xuICAgIHJldHVybiBuZXcgQnVpbGRTcGVjKHtcbiAgICAgICd2ZXJzaW9uJzogJzAuMicsXG4gICAgICAncnVuLWFzJzogbWVyZ2VPYmoodGhpcy5zcGVjWydydW4tYXMnXSwgb3RoZXIuc3BlY1sncnVuLWFzJ10sIGVxdWFsT2JqZWN0cyksXG4gICAgICAnZW52JzogbWVyZ2VPYmoodGhpcy5zcGVjLmVudiwgb3RoZXIuc3BlYy5lbnYsIChhLCBiKSA9PiAoe1xuICAgICAgICAncGFyYW1ldGVyLXN0b3JlJzogbWVyZ2VEaWN0KGFbJ3BhcmFtZXRlci1zdG9yZSddLCBiWydwYXJhbWV0ZXItc3RvcmUnXSwgZXF1YWxPYmplY3RzKSxcbiAgICAgICAgJ3ZhcmlhYmxlcyc6IG1lcmdlRGljdChhLnZhcmlhYmxlcywgYi52YXJpYWJsZXMsIGVxdWFsT2JqZWN0cyksXG4gICAgICB9KSksXG4gICAgICAncGhhc2VzJzogbWVyZ2VEaWN0KHRoaXMuc3BlYy5waGFzZXMsIG90aGVyLnNwZWMucGhhc2VzLCAoYSwgYikgPT4gKHtcbiAgICAgICAgJ3J1bi1hcyc6IG1lcmdlT2JqKHRoaXMuc3BlY1sncnVuLWFzJ10sIG90aGVyLnNwZWNbJ3J1bi1hcyddLCBlcXVhbE9iamVjdHMpLFxuICAgICAgICAnY29tbWFuZHMnOiBtZXJnZUxpc3QoYS5jb21tYW5kcywgYi5jb21tYW5kcykhLFxuICAgICAgICAnZmluYWxseSc6IG1lcmdlTGlzdChhLmZpbmFsbHksIGIuZmluYWxseSksXG4gICAgICB9KSksXG4gICAgICAnYXJ0aWZhY3RzJzogbWVyZ2VPYmoodGhpcy5zcGVjLmFydGlmYWN0cywgb3RoZXIuc3BlYy5hcnRpZmFjdHMsIG1lcmdlQXJ0aWZhY3RzKSxcbiAgICAgICdjYWNoZSc6IG1lcmdlT2JqKHRoaXMuc3BlYy5jYWNoZSwgb3RoZXIuc3BlYy5jYWNoZSwgKGEsIGIpID0+ICh7XG4gICAgICAgIHBhdGhzOiBtZXJnZUxpc3QoYS5wYXRocywgYi5wYXRocykhLFxuICAgICAgfSkpLFxuICAgICAgJ3JlcG9ydHMnOiBtZXJnZURpY3QodGhpcy5zcGVjLnJlcG9ydHMsIG90aGVyLnNwZWMucmVwb3J0cywgKGEsIGIpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXBvcnRzIG11c3QgaGF2ZSB1bmlxdWUgbmFtZXMsIGdvdCAke2F9IGFuZCAke2J9YCk7XG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG1lcmdlQXJ0aWZhY3RzKGE6IFByaW1hcnlBcnRpZmFjdFN0cnVjdCwgYjogUHJpbWFyeUFydGlmYWN0U3RydWN0KTogUHJpbWFyeUFydGlmYWN0U3RydWN0IHtcbiAgICAgIGlmIChhLmZpbGVzIHx8IGIuZmlsZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb25lIG9mIHRoZSBCdWlsZFNwZWNzIG1heSBoYXZlIGEgcHJpbWFyeSBhcnRpZmFjdC4nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJ0aWZhY3RzID0gT2JqZWN0LmFzc2lnbih7fSwgYVsnc2Vjb25kYXJ5LWFydGlmYWN0cyddIHx8IHt9KTtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGJbJ3NlY29uZGFyeS1hcnRpZmFjdHMnXSB8fCB7fSkpIHtcbiAgICAgICAgaWYgKGsgaW4gYXJ0aWZhY3RzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBhbHJlYWR5IGFuIGFydGlmYWN0IHdpdGggbmFtZSAke2t9YCk7XG4gICAgICAgIH1cbiAgICAgICAgYXJ0aWZhY3RzW2tdID0gdjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBhLCB7ICdzZWNvbmRhcnktYXJ0aWZhY3RzJzogYXJ0aWZhY3RzIH0pO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZXF1YWxPYmplY3RzKGE6IHN0cmluZywgYjogc3RyaW5nKSB7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IG1lcmdlIHR3byBkaWZmZXJlbnQgdmFsdWVzIGZvciB0aGUgc2FtZSBrZXk6ICR7SlNPTi5zdHJpbmdpZnkoYSl9LCAke0pTT04uc3RyaW5naWZ5KGIpfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VPYmo8VD4oYTogVCB8IHVuZGVmaW5lZCwgYjogVCB8IHVuZGVmaW5lZCwgZm46IChhOiBULCBiOiBUKSA9PiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAoYSA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBiOyB9XG4gICAgICBpZiAoYiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBhOyB9XG4gICAgICByZXR1cm4gZm4oYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VEaWN0PFQ+KGFzOiB7W2s6IHN0cmluZ106IFR9IHwgdW5kZWZpbmVkLCBiczoge1trOiBzdHJpbmddOiBUfSB8IHVuZGVmaW5lZCwgZm46IChhOiBULCBiOiBUKSA9PiBUKSB7XG4gICAgICByZXR1cm4gbWVyZ2VPYmooYXMsIGJzLCAoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCByZXQgPSBPYmplY3QuYXNzaWduKHt9LCBhKTtcbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoYikpIHtcbiAgICAgICAgICBpZiAocmV0W2tdKSB7XG4gICAgICAgICAgICByZXRba10gPSBmbihyZXRba10sIHYpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRba10gPSB2O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VMaXN0PFQ+KGFzOiBUW10gfCB1bmRlZmluZWQsIGJzOiBUW10gfCB1bmRlZmluZWQpOiBUW10gfCB1bmRlZmluZWQge1xuICAgICAgcmV0dXJuIG1lcmdlT2JqKGFzLCBicywgKGEsIGIpID0+IGEuY29uY2F0KGIpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVuZGVyKG9wdGlvbnM6IEJ1aWxkU3BlY1JlbmRlck9wdGlvbnMgPSB7fSk6IEJ1aWxkU3BlY1N0cnVjdCB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc3BlYywgeyBhcnRpZmFjdHM6IHRoaXMucmVuZGVyQXJ0aWZhY3RzKG9wdGlvbnMpIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJBcnRpZmFjdHMob3B0aW9uczogQnVpbGRTcGVjUmVuZGVyT3B0aW9ucyk6IFByaW1hcnlBcnRpZmFjdFN0cnVjdCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnNwZWMuYXJ0aWZhY3RzIHx8ICF0aGlzLnNwZWMuYXJ0aWZhY3RzWydzZWNvbmRhcnktYXJ0aWZhY3RzJ10pIHsgcmV0dXJuIHRoaXMuc3BlYy5hcnRpZmFjdHM7IH1cblxuICAgIC8vIFNpbXBsaWZ5IGEgc2luZ2xlIFwic2Vjb25kYXJ5LWFydGlmYWN0c1wiIHRvIGEgc2luZ2xlIHByaW1hcnkgYXJ0aWZhY3QgKHJlZ2FyZGxlc3Mgb2YgdGhlIG5hbWUpXG4gICAgY29uc3Qgc2luZ2xlQXJ0ID0gZGljdFNpbmdsZXRvblZhbHVlKHRoaXMuc3BlYy5hcnRpZmFjdHNbJ3NlY29uZGFyeS1hcnRpZmFjdHMnXSk7XG4gICAgaWYgKHNpbmdsZUFydCkgeyByZXR1cm4gc2luZ2xlQXJ0OyB9XG5cbiAgICAvLyBPdGhlcndpc2UgcmVuYW1lIGEgJ1BSSU1BUlknIGtleSBpZiBpdCBleGlzdHNcbiAgICBpZiAoTUFHSUNfQVJUSUZBQ1RfTkFNRSBpbiB0aGlzLnNwZWMuYXJ0aWZhY3RzWydzZWNvbmRhcnktYXJ0aWZhY3RzJ10pIHtcbiAgICAgIGlmICghb3B0aW9ucy5wcmltYXJ5QXJ0aWZhY3ROYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVwbGFjZW1lbnQgbmFtZSBmb3IgJHtNQUdJQ19BUlRJRkFDVF9OQU1FfSBhcnRpZmFjdCBub3Qgc3VwcGxpZWRgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgJ3NlY29uZGFyeS1hcnRpZmFjdHMnOiByZW5hbWVLZXkodGhpcy5zcGVjLmFydGlmYWN0c1snc2Vjb25kYXJ5LWFydGlmYWN0cyddLCBNQUdJQ19BUlRJRkFDVF9OQU1FLCBvcHRpb25zLnByaW1hcnlBcnRpZmFjdE5hbWUpIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3BlYy5hcnRpZmFjdHM7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaW1wbGVCdWlsZFNwZWNQcm9wcyB7XG4gIGluc3RhbGw/OiBzdHJpbmdbXTtcbiAgcHJlQnVpbGQ/OiBzdHJpbmdbXTtcbiAgYnVpbGQ/OiBzdHJpbmdbXTtcbiAgcmVwb3J0cz86IHtba2V5OiBzdHJpbmddOiBSZXBvcnRTdHJ1Y3R9O1xuICBhcnRpZmFjdERpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hlcmUgdGhlIGRpcmVjdG9yaWVzIGZvciBlYWNoIGFydGlmYWN0IGFyZVxuICAgKlxuICAgKiBVc2Ugc3BlY2lhbCBuYW1lIFBSSU1BUlkgdG8gcmVmZXIgdG8gdGhlIHByaW1hcnkgYXJ0aWZhY3QuIFdpbGwgYmVcbiAgICogcmVwbGFjZWQgd2l0aCB0aGUgYWN0dWFsIGFydGlmYWN0IG5hbWUgd2hlbiB0aGUgYnVpbGQgc3BlYyBpcyBzeW50aGVzaXplZC5cbiAgICovXG4gIGFkZGl0aW9uYWxBcnRpZmFjdERpcmVjdG9yaWVzPzoge1tpZDogc3RyaW5nXTogc3RyaW5nfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZFNwZWNTdHJ1Y3Qge1xuICB2ZXJzaW9uOiAnMC4yJztcbiAgJ3J1bi1hcyc/OiBzdHJpbmc7XG4gIGVudj86IEVudlN0cnVjdDtcbiAgcGhhc2VzPzoge1trZXk6IHN0cmluZ106IFBoYXNlU3RydWN0fTtcbiAgYXJ0aWZhY3RzPzogUHJpbWFyeUFydGlmYWN0U3RydWN0O1xuICBjYWNoZT86IENhY2hlU3RydWN0O1xuICByZXBvcnRzPzoge1trZXk6IHN0cmluZ106IFJlcG9ydFN0cnVjdH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW52U3RydWN0IHtcbiAgdmFyaWFibGVzPzoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG4gICdwYXJhbWV0ZXItc3RvcmUnPzoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG4gICdleHBvcnRlZC12YXJpYWJsZXMnPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGhhc2VTdHJ1Y3Qge1xuICAncnVuLWFzJz86IHN0cmluZztcbiAgY29tbWFuZHM6IHN0cmluZ1tdO1xuICBmaW5hbGx5Pzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U3RydWN0IHtcbiAgZmlsZXM/OiBzdHJpbmdbXTtcbiAgJ2Jhc2UtZGlyZWN0b3J5Jz86IHN0cmluZztcbiAgJ2Rpc2NhcmQtcGF0aHMnPzogJ3llcycgfCAnbm8nO1xuICAnZmlsZS1mb3JtYXQnPzogJ0N1Y3VtYmVySnNvbicgfCAnSnVuaXRYbWwnIHwgJ051bml0WG1sJyB8ICdUZXN0TkdYbWwnIHwgJ1Zpc3VhbFN0dWRpb1RyeCc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXJ0aWZhY3RTdHJ1Y3Qge1xuICBmaWxlcz86IHN0cmluZ1tdO1xuICBuYW1lPzogc3RyaW5nO1xuICAnYmFzZS1kaXJlY3RvcnknPzogc3RyaW5nO1xuICAnZGlzY2FyZC1wYXRocyc/OiAneWVzJyB8ICdubyc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJpbWFyeUFydGlmYWN0U3RydWN0IGV4dGVuZHMgQXJ0aWZhY3RTdHJ1Y3Qge1xuICAnc2Vjb25kYXJ5LWFydGlmYWN0cyc/OiB7W2tleTogc3RyaW5nXTogQXJ0aWZhY3RTdHJ1Y3R9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlU3RydWN0IHtcbiAgcGF0aHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkU3BlY1JlbmRlck9wdGlvbnMge1xuICAvKipcbiAgICogUmVwbGFjZSBQUklNQVJZIGFydGlmYWN0IG5hbWUgd2l0aCB0aGlzXG4gICAqXG4gICAqIENhbm5vdCB1c2UgdGhlIHNwZWNpYWwgdGVybSBQUklNQVJZIGlmIHRoaXMgaXMgbm90IHN1cHBsaWVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAgQ2Fubm90IHVzZSBQUklNQVJZXG4gICAqL1xuICBwcmltYXJ5QXJ0aWZhY3ROYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIElmIHRoZSBkaWN0IGlzIGEgc2luZ2xldG9uIGRpY3QsIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGtleSwgb3RoZXJ3aXNlIHJldHVybiB1bmRlZmluZWRcbiAqL1xuZnVuY3Rpb24gZGljdFNpbmdsZXRvblZhbHVlPFQ+KHhzOiB7W2tleTogc3RyaW5nXTogVH0pOiBUIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHhzKTtcbiAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHhzW2tleXNbMF1dO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHJlbmFtZUtleTxUPih4czoge1trZXk6IHN0cmluZ106IFR9LCBvcmlnOiBzdHJpbmcsIHJlbmFtZTogc3RyaW5nKToge1trZXk6IHN0cmluZ106IFR9IHtcbiAgY29uc3QgcmV0ID0gT2JqZWN0LmFzc2lnbih7fSwgeHMpO1xuICBpZiAob3JpZyBpbiByZXQpIHtcbiAgICByZXRbcmVuYW1lXSA9IHJldFtvcmlnXTtcbiAgICBkZWxldGUgcmV0W29yaWddO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG4iXX0=
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJ1aWxkLXNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQWdEO0FBR2hELE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFhLFNBQVM7SUFDYixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQXVCO1FBQzNDLE9BQU8sSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBMkI7UUFDOUMsaUZBQWlGO1FBQ2pGLHlEQUF5RDtRQUN6RCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUMxQyxLQUFLLENBQUMsNkJBQTZCLElBQUksRUFBRSxFQUN6QyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ2xGLENBQUM7UUFFRixJQUFJLFNBQTRDLENBQUM7UUFDakQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckQsU0FBUyxHQUFHO2dCQUNWLHFCQUFxQixFQUFFLElBQUEsZ0JBQVMsRUFBQyxtQkFBb0IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzNELGdCQUFnQixFQUFFLENBQUM7b0JBQ25CLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztpQkFDbEIsQ0FBQyxDQUFDO2FBQ0osQ0FBQztTQUNIO1FBRUQsT0FBTyxJQUFJLFNBQVMsQ0FBQztZQUNuQixPQUFPLEVBQUUsS0FBSztZQUNkLE1BQU0sRUFBRSxJQUFBLGtCQUFXLEVBQUM7Z0JBQ2xCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUM5RSxTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDbEYsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7YUFDekUsQ0FBQztZQUNGLFNBQVM7WUFDVCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLO1FBQ2pCLE9BQU8sSUFBSSxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsWUFBcUMsSUFBcUI7UUFBckIsU0FBSSxHQUFKLElBQUksQ0FBaUI7SUFDMUQsQ0FBQztJQUVELElBQVcsdUJBQXVCO1FBQ2hDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3JJLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBZ0I7UUFDM0IsT0FBTyxJQUFJLFNBQVMsQ0FBQztZQUNuQixTQUFTLEVBQUUsS0FBSztZQUNoQixRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxZQUFZLENBQUM7WUFDM0UsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3hELGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxZQUFZLENBQUM7Z0JBQ3RGLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQzthQUMvRCxDQUFDLENBQUM7WUFDSCxRQUFRLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbEUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWSxDQUFDO2dCQUMzRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBRTtnQkFDOUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7YUFDM0MsQ0FBQyxDQUFDO1lBQ0gsV0FBVyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUM7WUFDaEYsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzlELEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFFO2FBQ3BDLENBQUMsQ0FBQztZQUNILFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ25FLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLENBQUMsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILFNBQVMsY0FBYyxDQUFDLENBQXdCLEVBQUUsQ0FBd0I7WUFDeEUsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQzthQUN4RTtZQUVELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO2dCQUNuRSxJQUFJLENBQUMsSUFBSSxTQUFTLEVBQUU7b0JBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2hFO2dCQUNELFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDbEI7WUFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUdELFNBQVMsWUFBWSxDQUFDLENBQVMsRUFBRSxDQUFTO1lBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDWCxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ2xIO1lBQ0QsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBRUQsU0FBUyxRQUFRLENBQUksQ0FBZ0IsRUFBRSxDQUFnQixFQUFFLEVBQXFCO1lBQzVFLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTtnQkFBRSxPQUFPLENBQUMsQ0FBQzthQUFFO1lBQ2xDLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTtnQkFBRSxPQUFPLENBQUMsQ0FBQzthQUFFO1lBQ2xDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBRUQsU0FBUyxTQUFTLENBQUksRUFBa0MsRUFBRSxFQUFrQyxFQUFFLEVBQXFCO1lBQ2pILE9BQU8sUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDdEMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ3hCO3lCQUFNO3dCQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ1o7aUJBQ0Y7Z0JBQ0QsT0FBTyxHQUFHLENBQUM7WUFDYixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxTQUFTLFNBQVMsQ0FBSSxFQUFtQixFQUFFLEVBQW1CO1lBQzVELE9BQU8sUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakQsQ0FBQztJQUNILENBQUM7SUFFTSxNQUFNLENBQUMsVUFBa0MsRUFBRTtRQUNoRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVPLGVBQWUsQ0FBQyxPQUErQjtRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUFFO1FBRXhHLGdHQUFnRztRQUNoRyxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7UUFDakYsSUFBSSxTQUFTLEVBQUU7WUFBRSxPQUFPLFNBQVMsQ0FBQztTQUFFO1FBRXBDLGdEQUFnRDtRQUNoRCxJQUFJLG1CQUFtQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLEVBQUU7WUFDckUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRTtnQkFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsbUJBQW1CLHdCQUF3QixDQUFDLENBQUM7YUFDdEY7WUFFRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztTQUMzSTtRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBMUlELDhCQTBJQztBQXlFRDs7R0FFRztBQUNILFNBQVMsa0JBQWtCLENBQUksRUFBd0I7SUFDckQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3JCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3BCO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFJLEVBQXdCLEVBQUUsSUFBWSxFQUFFLE1BQWM7SUFDMUUsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEMsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO1FBQ2YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNsQjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1hcFZhbHVlcywgbm9VbmRlZmluZWQgfSBmcm9tICcuL3V0aWwnO1xuXG5cbmNvbnN0IE1BR0lDX0FSVElGQUNUX05BTUUgPSAnUFJJTUFSWSc7XG5cbi8qKlxuICogQ2xhc3MgdG8gbW9kZWwgYSBidWlsZHNwZWMgdmVyc2lvbiAwLjJcbiAqXG4gKiBBcnRpZmFjdCBoYW5kbGluZyBpcyBhIGxpdHRsZSBzcGVjaWFsOiBDb2RlQnVpbGQgd2lsbCBpbnRlcnByZXQgdGhlXG4gKiAnYXJ0aWZhY3RzJyBzZWN0aW9uIGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZXJlIGFyZSBzZWNvbmRhcnlcbiAqIGFydGlmYWN0cyBvciBub3QuXG4gKlxuICogSWYgdGhlcmUgaXMgb25seSBvbmUgYXJ0aWZhY3QsIHRoZSBzaW5nbGUgYXJ0aWZhY3QgbXVzdCBnbyBpbnRvIHRoZSB0b3AtbGV2ZWxcbiAqICdhcnRpZmFjdHMnIHNlY3Rpb24uIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBhcnRpZmFjdHMsIGFsbCBvZiB0aGVtIG11c3QgZ29cbiAqIGludG8gdGhlICdzZWNvbmRhcnktYXJ0aWZhY3RzJyBzZWN0aW9uLiBVcG9uIHJlbmRlcmluZyB0byBKU09OLCB0aGUgY2FsbGVyXG4gKiBtdXN0IHN1cHBseSB0aGUgbmFtZSBvZiB0aGUgcHJpbWFyeSBhcnRpZmFjdCAoaXQncyBkZXRlcm1pbmVkIGJ5XG4gKiB0aGUgQ29kZVBpcGVsaW5lIEFjdGlvbiB0aGF0IGludm9rZXMgdGhlIENvZGVCdWlsZCBQcm9qZWN0IHRoYXQgdXNlcyB0aGlzXG4gKiBidWlsZHNwZWMpLlxuICpcbiAqIElOVkFSSUFOVDogaW4tbWVtb3J5LCB0aGUgQnVpbGRTcGVjIHdpbGwgdHJlYXQgYWxsIGFydGlmYWN0cyB0aGUgc2FtZSAoYXNcbiAqIGEgYmFnIG9mIHNlY29uZGFyeSBhcnRpZmFjdHMpLiBBdCB0aGUgZWRnZXMgKGNvbnN0cnVjdGlvbiBvciByZW5kZXJpbmcpLFxuICogaWYgdGhlcmUncyBvbmx5IGEgc2luZ2xlIGFydGlmYWN0IGl0IHdpbGwgYmUgcmVuZGVyZWQgdG8gdGhlIHByaW1hcnlcbiAqIGFydGlmYWN0LlxuICovXG5leHBvcnQgY2xhc3MgQnVpbGRTcGVjIHtcbiAgcHVibGljIHN0YXRpYyBsaXRlcmFsKHN0cnVjdDogQnVpbGRTcGVjU3RydWN0KSB7XG4gICAgcmV0dXJuIG5ldyBCdWlsZFNwZWMoc3RydWN0KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgc2ltcGxlKHByb3BzOiBTaW1wbGVCdWlsZFNwZWNQcm9wcykge1xuICAgIC8vIFdlIG1lcmdlIHRoZSBwcmltYXJ5IGFydGlmYWN0IGludG8gdGhlIHNlY29uZGFyeSBhcnRpZmFjdHMgdW5kZXIgYSBzcGVjaWFsIGtleVxuICAgIC8vIFRoZXkgd2lsbCBiZSBjb21wYWN0ZWQgYmFjayB0b2dldGhlciBkdXJpbmcgcmVuZGVyaW5nLlxuICAgIGNvbnN0IGFydGlmYWN0RGlyZWN0b3JpZXMgPSBPYmplY3QuYXNzaWduKHt9LFxuICAgICAgcHJvcHMuYWRkaXRpb25hbEFydGlmYWN0RGlyZWN0b3JpZXMgfHwge30sXG4gICAgICBwcm9wcy5hcnRpZmFjdERpcmVjdG9yeSA/IHsgW01BR0lDX0FSVElGQUNUX05BTUVdOiBwcm9wcy5hcnRpZmFjdERpcmVjdG9yeSB9IDoge30sXG4gICAgKTtcblxuICAgIGxldCBhcnRpZmFjdHM6IFByaW1hcnlBcnRpZmFjdFN0cnVjdCB8IHVuZGVmaW5lZDtcbiAgICBpZiAoT2JqZWN0LmtleXMoYXJ0aWZhY3REaXJlY3RvcmllcyB8fCB7fSkubGVuZ3RoID4gMCkge1xuICAgICAgYXJ0aWZhY3RzID0ge1xuICAgICAgICAnc2Vjb25kYXJ5LWFydGlmYWN0cyc6IG1hcFZhbHVlcyhhcnRpZmFjdERpcmVjdG9yaWVzISwgZCA9PiAoe1xuICAgICAgICAgICdiYXNlLWRpcmVjdG9yeSc6IGQsXG4gICAgICAgICAgJ2ZpbGVzJzogWycqKi8qJ10sXG4gICAgICAgIH0pKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCdWlsZFNwZWMoe1xuICAgICAgdmVyc2lvbjogJzAuMicsXG4gICAgICBwaGFzZXM6IG5vVW5kZWZpbmVkKHtcbiAgICAgICAgaW5zdGFsbDogcHJvcHMuaW5zdGFsbCAhPT0gdW5kZWZpbmVkID8geyBjb21tYW5kczogcHJvcHMuaW5zdGFsbCB9IDogdW5kZWZpbmVkLFxuICAgICAgICBwcmVfYnVpbGQ6IHByb3BzLnByZUJ1aWxkICE9PSB1bmRlZmluZWQgPyB7IGNvbW1hbmRzOiBwcm9wcy5wcmVCdWlsZCB9IDogdW5kZWZpbmVkLFxuICAgICAgICBidWlsZDogcHJvcHMuYnVpbGQgIT09IHVuZGVmaW5lZCA/IHsgY29tbWFuZHM6IHByb3BzLmJ1aWxkIH0gOiB1bmRlZmluZWQsXG4gICAgICB9KSxcbiAgICAgIGFydGlmYWN0cyxcbiAgICAgIHJlcG9ydHM6IHByb3BzLnJlcG9ydHMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGVtcHR5KCkge1xuICAgIHJldHVybiBuZXcgQnVpbGRTcGVjKHsgdmVyc2lvbjogJzAuMicgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc3BlYzogQnVpbGRTcGVjU3RydWN0KSB7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFkZGl0aW9uYWxBcnRpZmFjdE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zcGVjLmFydGlmYWN0cyAmJiB0aGlzLnNwZWMuYXJ0aWZhY3RzWydzZWNvbmRhcnktYXJ0aWZhY3RzJ10gfHwge30pLmZpbHRlcihuID0+IG4gIT09IE1BR0lDX0FSVElGQUNUX05BTUUpO1xuICB9XG5cbiAgcHVibGljIG1lcmdlKG90aGVyOiBCdWlsZFNwZWMpOiBCdWlsZFNwZWMge1xuICAgIHJldHVybiBuZXcgQnVpbGRTcGVjKHtcbiAgICAgICd2ZXJzaW9uJzogJzAuMicsXG4gICAgICAncnVuLWFzJzogbWVyZ2VPYmoodGhpcy5zcGVjWydydW4tYXMnXSwgb3RoZXIuc3BlY1sncnVuLWFzJ10sIGVxdWFsT2JqZWN0cyksXG4gICAgICAnZW52JzogbWVyZ2VPYmoodGhpcy5zcGVjLmVudiwgb3RoZXIuc3BlYy5lbnYsIChhLCBiKSA9PiAoe1xuICAgICAgICAncGFyYW1ldGVyLXN0b3JlJzogbWVyZ2VEaWN0KGFbJ3BhcmFtZXRlci1zdG9yZSddLCBiWydwYXJhbWV0ZXItc3RvcmUnXSwgZXF1YWxPYmplY3RzKSxcbiAgICAgICAgJ3ZhcmlhYmxlcyc6IG1lcmdlRGljdChhLnZhcmlhYmxlcywgYi52YXJpYWJsZXMsIGVxdWFsT2JqZWN0cyksXG4gICAgICB9KSksXG4gICAgICAncGhhc2VzJzogbWVyZ2VEaWN0KHRoaXMuc3BlYy5waGFzZXMsIG90aGVyLnNwZWMucGhhc2VzLCAoYSwgYikgPT4gKHtcbiAgICAgICAgJ3J1bi1hcyc6IG1lcmdlT2JqKHRoaXMuc3BlY1sncnVuLWFzJ10sIG90aGVyLnNwZWNbJ3J1bi1hcyddLCBlcXVhbE9iamVjdHMpLFxuICAgICAgICAnY29tbWFuZHMnOiBtZXJnZUxpc3QoYS5jb21tYW5kcywgYi5jb21tYW5kcykhLFxuICAgICAgICAnZmluYWxseSc6IG1lcmdlTGlzdChhLmZpbmFsbHksIGIuZmluYWxseSksXG4gICAgICB9KSksXG4gICAgICAnYXJ0aWZhY3RzJzogbWVyZ2VPYmoodGhpcy5zcGVjLmFydGlmYWN0cywgb3RoZXIuc3BlYy5hcnRpZmFjdHMsIG1lcmdlQXJ0aWZhY3RzKSxcbiAgICAgICdjYWNoZSc6IG1lcmdlT2JqKHRoaXMuc3BlYy5jYWNoZSwgb3RoZXIuc3BlYy5jYWNoZSwgKGEsIGIpID0+ICh7XG4gICAgICAgIHBhdGhzOiBtZXJnZUxpc3QoYS5wYXRocywgYi5wYXRocykhLFxuICAgICAgfSkpLFxuICAgICAgJ3JlcG9ydHMnOiBtZXJnZURpY3QodGhpcy5zcGVjLnJlcG9ydHMsIG90aGVyLnNwZWMucmVwb3J0cywgKGEsIGIpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXBvcnRzIG11c3QgaGF2ZSB1bmlxdWUgbmFtZXMsIGdvdCAke2F9IGFuZCAke2J9YCk7XG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG1lcmdlQXJ0aWZhY3RzKGE6IFByaW1hcnlBcnRpZmFjdFN0cnVjdCwgYjogUHJpbWFyeUFydGlmYWN0U3RydWN0KTogUHJpbWFyeUFydGlmYWN0U3RydWN0IHtcbiAgICAgIGlmIChhLmZpbGVzIHx8IGIuZmlsZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb25lIG9mIHRoZSBCdWlsZFNwZWNzIG1heSBoYXZlIGEgcHJpbWFyeSBhcnRpZmFjdC4nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJ0aWZhY3RzID0gT2JqZWN0LmFzc2lnbih7fSwgYVsnc2Vjb25kYXJ5LWFydGlmYWN0cyddIHx8IHt9KTtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGJbJ3NlY29uZGFyeS1hcnRpZmFjdHMnXSB8fCB7fSkpIHtcbiAgICAgICAgaWYgKGsgaW4gYXJ0aWZhY3RzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBhbHJlYWR5IGFuIGFydGlmYWN0IHdpdGggbmFtZSAke2t9YCk7XG4gICAgICAgIH1cbiAgICAgICAgYXJ0aWZhY3RzW2tdID0gdjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBhLCB7ICdzZWNvbmRhcnktYXJ0aWZhY3RzJzogYXJ0aWZhY3RzIH0pO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZXF1YWxPYmplY3RzKGE6IHN0cmluZywgYjogc3RyaW5nKSB7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IG1lcmdlIHR3byBkaWZmZXJlbnQgdmFsdWVzIGZvciB0aGUgc2FtZSBrZXk6ICR7SlNPTi5zdHJpbmdpZnkoYSl9LCAke0pTT04uc3RyaW5naWZ5KGIpfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VPYmo8VD4oYTogVCB8IHVuZGVmaW5lZCwgYjogVCB8IHVuZGVmaW5lZCwgZm46IChhOiBULCBiOiBUKSA9PiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAoYSA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBiOyB9XG4gICAgICBpZiAoYiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBhOyB9XG4gICAgICByZXR1cm4gZm4oYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VEaWN0PFQ+KGFzOiB7IFtrOiBzdHJpbmddOiBUIH0gfCB1bmRlZmluZWQsIGJzOiB7IFtrOiBzdHJpbmddOiBUIH0gfCB1bmRlZmluZWQsIGZuOiAoYTogVCwgYjogVCkgPT4gVCkge1xuICAgICAgcmV0dXJuIG1lcmdlT2JqKGFzLCBicywgKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgcmV0ID0gT2JqZWN0LmFzc2lnbih7fSwgYSk7XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGIpKSB7XG4gICAgICAgICAgaWYgKHJldFtrXSkge1xuICAgICAgICAgICAgcmV0W2tdID0gZm4ocmV0W2tdLCB2KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0W2tdID0gdjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlTGlzdDxUPihhczogVFtdIHwgdW5kZWZpbmVkLCBiczogVFtdIHwgdW5kZWZpbmVkKTogVFtdIHwgdW5kZWZpbmVkIHtcbiAgICAgIHJldHVybiBtZXJnZU9iaihhcywgYnMsIChhLCBiKSA9PiBhLmNvbmNhdChiKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbmRlcihvcHRpb25zOiBCdWlsZFNwZWNSZW5kZXJPcHRpb25zID0ge30pOiBCdWlsZFNwZWNTdHJ1Y3Qge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnNwZWMsIHsgYXJ0aWZhY3RzOiB0aGlzLnJlbmRlckFydGlmYWN0cyhvcHRpb25zKSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQXJ0aWZhY3RzKG9wdGlvbnM6IEJ1aWxkU3BlY1JlbmRlck9wdGlvbnMpOiBQcmltYXJ5QXJ0aWZhY3RTdHJ1Y3QgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5zcGVjLmFydGlmYWN0cyB8fCAhdGhpcy5zcGVjLmFydGlmYWN0c1snc2Vjb25kYXJ5LWFydGlmYWN0cyddKSB7IHJldHVybiB0aGlzLnNwZWMuYXJ0aWZhY3RzOyB9XG5cbiAgICAvLyBTaW1wbGlmeSBhIHNpbmdsZSBcInNlY29uZGFyeS1hcnRpZmFjdHNcIiB0byBhIHNpbmdsZSBwcmltYXJ5IGFydGlmYWN0IChyZWdhcmRsZXNzIG9mIHRoZSBuYW1lKVxuICAgIGNvbnN0IHNpbmdsZUFydCA9IGRpY3RTaW5nbGV0b25WYWx1ZSh0aGlzLnNwZWMuYXJ0aWZhY3RzWydzZWNvbmRhcnktYXJ0aWZhY3RzJ10pO1xuICAgIGlmIChzaW5nbGVBcnQpIHsgcmV0dXJuIHNpbmdsZUFydDsgfVxuXG4gICAgLy8gT3RoZXJ3aXNlIHJlbmFtZSBhICdQUklNQVJZJyBrZXkgaWYgaXQgZXhpc3RzXG4gICAgaWYgKE1BR0lDX0FSVElGQUNUX05BTUUgaW4gdGhpcy5zcGVjLmFydGlmYWN0c1snc2Vjb25kYXJ5LWFydGlmYWN0cyddKSB7XG4gICAgICBpZiAoIW9wdGlvbnMucHJpbWFyeUFydGlmYWN0TmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcGxhY2VtZW50IG5hbWUgZm9yICR7TUFHSUNfQVJUSUZBQ1RfTkFNRX0gYXJ0aWZhY3Qgbm90IHN1cHBsaWVkYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7ICdzZWNvbmRhcnktYXJ0aWZhY3RzJzogcmVuYW1lS2V5KHRoaXMuc3BlYy5hcnRpZmFjdHNbJ3NlY29uZGFyeS1hcnRpZmFjdHMnXSwgTUFHSUNfQVJUSUZBQ1RfTkFNRSwgb3B0aW9ucy5wcmltYXJ5QXJ0aWZhY3ROYW1lKSB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNwZWMuYXJ0aWZhY3RzO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2ltcGxlQnVpbGRTcGVjUHJvcHMge1xuICBpbnN0YWxsPzogc3RyaW5nW107XG4gIHByZUJ1aWxkPzogc3RyaW5nW107XG4gIGJ1aWxkPzogc3RyaW5nW107XG4gIHJlcG9ydHM/OiB7IFtrZXk6IHN0cmluZ106IFJlcG9ydFN0cnVjdCB9O1xuICBhcnRpZmFjdERpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hlcmUgdGhlIGRpcmVjdG9yaWVzIGZvciBlYWNoIGFydGlmYWN0IGFyZVxuICAgKlxuICAgKiBVc2Ugc3BlY2lhbCBuYW1lIFBSSU1BUlkgdG8gcmVmZXIgdG8gdGhlIHByaW1hcnkgYXJ0aWZhY3QuIFdpbGwgYmVcbiAgICogcmVwbGFjZWQgd2l0aCB0aGUgYWN0dWFsIGFydGlmYWN0IG5hbWUgd2hlbiB0aGUgYnVpbGQgc3BlYyBpcyBzeW50aGVzaXplZC5cbiAgICovXG4gIGFkZGl0aW9uYWxBcnRpZmFjdERpcmVjdG9yaWVzPzogeyBbaWQ6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkU3BlY1N0cnVjdCB7XG4gICd2ZXJzaW9uJzogJzAuMic7XG4gICdydW4tYXMnPzogc3RyaW5nO1xuICAnZW52Jz86IEVudlN0cnVjdDtcbiAgJ3BoYXNlcyc/OiB7IFtrZXk6IHN0cmluZ106IFBoYXNlU3RydWN0IH07XG4gICdhcnRpZmFjdHMnPzogUHJpbWFyeUFydGlmYWN0U3RydWN0O1xuICAnY2FjaGUnPzogQ2FjaGVTdHJ1Y3Q7XG4gICdyZXBvcnRzJz86IHsgW2tleTogc3RyaW5nXTogUmVwb3J0U3RydWN0IH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW52U3RydWN0IHtcbiAgJ3ZhcmlhYmxlcyc/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAncGFyYW1ldGVyLXN0b3JlJz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gICdleHBvcnRlZC12YXJpYWJsZXMnPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGhhc2VTdHJ1Y3Qge1xuICAncnVuLWFzJz86IHN0cmluZztcbiAgJ2NvbW1hbmRzJzogc3RyaW5nW107XG4gICdmaW5hbGx5Jz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFN0cnVjdCB7XG4gICdmaWxlcyc/OiBzdHJpbmdbXTtcbiAgJ2Jhc2UtZGlyZWN0b3J5Jz86IHN0cmluZztcbiAgJ2Rpc2NhcmQtcGF0aHMnPzogJ3llcycgfCAnbm8nO1xuICAnZmlsZS1mb3JtYXQnPzogJ0N1Y3VtYmVySnNvbicgfCAnSnVuaXRYbWwnIHwgJ051bml0WG1sJyB8ICdUZXN0TkdYbWwnIHwgJ1Zpc3VhbFN0dWRpb1RyeCc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXJ0aWZhY3RTdHJ1Y3Qge1xuICAnZmlsZXMnPzogc3RyaW5nW107XG4gICduYW1lJz86IHN0cmluZztcbiAgJ2Jhc2UtZGlyZWN0b3J5Jz86IHN0cmluZztcbiAgJ2Rpc2NhcmQtcGF0aHMnPzogJ3llcycgfCAnbm8nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByaW1hcnlBcnRpZmFjdFN0cnVjdCBleHRlbmRzIEFydGlmYWN0U3RydWN0IHtcbiAgJ3NlY29uZGFyeS1hcnRpZmFjdHMnPzogeyBba2V5OiBzdHJpbmddOiBBcnRpZmFjdFN0cnVjdCB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlU3RydWN0IHtcbiAgcGF0aHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkU3BlY1JlbmRlck9wdGlvbnMge1xuICAvKipcbiAgICogUmVwbGFjZSBQUklNQVJZIGFydGlmYWN0IG5hbWUgd2l0aCB0aGlzXG4gICAqXG4gICAqIENhbm5vdCB1c2UgdGhlIHNwZWNpYWwgdGVybSBQUklNQVJZIGlmIHRoaXMgaXMgbm90IHN1cHBsaWVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAgQ2Fubm90IHVzZSBQUklNQVJZXG4gICAqL1xuICBwcmltYXJ5QXJ0aWZhY3ROYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIElmIHRoZSBkaWN0IGlzIGEgc2luZ2xldG9uIGRpY3QsIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGtleSwgb3RoZXJ3aXNlIHJldHVybiB1bmRlZmluZWRcbiAqL1xuZnVuY3Rpb24gZGljdFNpbmdsZXRvblZhbHVlPFQ+KHhzOiB7IFtrZXk6IHN0cmluZ106IFQgfSk6IFQgfCB1bmRlZmluZWQge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoeHMpO1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4geHNba2V5c1swXV07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVuYW1lS2V5PFQ+KHhzOiB7IFtrZXk6IHN0cmluZ106IFQgfSwgb3JpZzogc3RyaW5nLCByZW5hbWU6IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogVCB9IHtcbiAgY29uc3QgcmV0ID0gT2JqZWN0LmFzc2lnbih7fSwgeHMpO1xuICBpZiAob3JpZyBpbiByZXQpIHtcbiAgICByZXRbcmVuYW1lXSA9IHJldFtvcmlnXTtcbiAgICBkZWxldGUgcmV0W29yaWddO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG4iXX0=