@pipeline-builder/pipeline-core 4.4.12 → 4.4.13

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.
@@ -33,9 +33,6 @@ import type { CodeBuildStepOptions } from '../pipeline/step-types.js';
33
33
  * needs a Construct to anchor the imported secret to.
34
34
  */
35
35
  export declare function resolvePluginImage(scope: Construct | undefined, plugin: Plugin, orgId?: string): IBuildImage | undefined;
36
- /** The managed toolchain's build-image plugin name and its (system-org) image repository. */
37
- export declare const BOOTSTRAP_PLUGIN_NAME = "pipeline-bootstrap";
38
- export declare const BOOTSTRAP_IMAGE_REPOSITORY = "system/pipeline-bootstrap";
39
36
  /**
40
37
  * The default CodeBuild image — every action without a plugin-baked image (the
41
38
  * pipeline-wide `codeBuildDefaults`, a plugin-less step, asset publishing) —
@@ -1,6 +1,6 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- import { createLogger } from '@pipeline-builder/api-core';
3
+ import { createLogger, MANAGED_TOOLCHAIN } from '@pipeline-builder/api-core';
4
4
  import { Duration, SecretValue, Stack } from 'aws-cdk-lib';
5
5
  import { BuildEnvironmentVariableType, BuildSpec, ComputeType as CDKComputeType, LinuxBuildImage } from 'aws-cdk-lib/aws-codebuild';
6
6
  import { Secret } from 'aws-cdk-lib/aws-secretsmanager';
@@ -270,8 +270,8 @@ export function resolvePluginImage(scope, plugin, orgId) {
270
270
  });
271
271
  }
272
272
  /** The managed toolchain's build-image plugin name and its (system-org) image repository. */
273
- export const BOOTSTRAP_PLUGIN_NAME = 'pipeline-bootstrap';
274
- export const BOOTSTRAP_IMAGE_REPOSITORY = `system/${BOOTSTRAP_PLUGIN_NAME}`;
273
+ const BOOTSTRAP_PLUGIN_NAME = MANAGED_TOOLCHAIN.bootstrap;
274
+ const BOOTSTRAP_IMAGE_REPOSITORY = `system/${BOOTSTRAP_PLUGIN_NAME}`;
275
275
  /**
276
276
  * The default CodeBuild image — every action without a plugin-baked image (the
277
277
  * pipeline-wide `codeBuildDefaults`, a plugin-less step, asset publishing) —
@@ -538,4 +538,4 @@ export function getComputeType(input = 'SMALL') {
538
538
  export function unwrapSecret(value) {
539
539
  return typeof value === 'string' ? value : value.unsafeUnwrap();
540
540
  }
541
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtaGVscGVycy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvcGlwZWxpbmUtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLFNBQVMsRUFBRSxXQUFXLElBQUksY0FBYyxFQUFFLGVBQWUsRUFBb0IsTUFBTSwyQkFBMkIsQ0FBQztBQUN0SixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRixPQUFPLEVBQW9CLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0ksT0FBTyxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQXFCLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekgsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakUsT0FBTyxFQUFF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QU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUEyQjtJQUN0RCxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDbEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHsgRHVyYXRpb24sIFNlY3JldFZhbHVlLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZVR5cGUsIEJ1aWxkU3BlYywgQ29tcHV0ZVR5cGUgYXMgQ0RLQ29tcHV0ZVR5cGUsIExpbnV4QnVpbGRJbWFnZSwgdHlwZSBJQnVpbGRJbWFnZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCB7IENvZGVCdWlsZFN0ZXAsIE1hbnVhbEFwcHJvdmFsU3RlcCwgU2hlbGxTdGVwIH0gZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyB0eXBlIEFydGlmYWN0S2V5IH0gZnJvbSAnLi9hcnRpZmFjdC1tYW5hZ2VyLmpzJztcbmltcG9ydCB7IG1ldGFkYXRhRm9yU2hlbGxTdGVwLCBtZXRhZGF0YUZvckNvZGVCdWlsZFN0ZXAsIG1ldGFkYXRhRm9yQnVpbGRFbnZpcm9ubWVudCwgbmV0d29ya0NvbmZpZ0Zyb21NZXRhZGF0YSB9IGZyb20gJy4vbWV0YWRhdGEtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBTVEVQX0JPT1RTVFJBUF9DTUQsIGV4dHJhY3RNZXRhZGF0YUVudiwgbWVyZ2UsIHdyYXBDb21tYW5kc0ZvckZhaWx1cmVCZWhhdmlvciB9IGZyb20gJy4vbWV0YWRhdGEtaGVscGVycy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlTmV0d29yayB9IGZyb20gJy4vbmV0d29yay5qcyc7XG5pbXBvcnQgeyBQbHVnaW5UeXBlLCBDb21wdXRlVHlwZSwgdHlwZSBNZXRhRGF0YVR5cGUgfSBmcm9tICcuL3BpcGVsaW5lLXR5cGVzLmpzJztcbmltcG9ydCB7IHBsdWdpbkFydGlmYWN0QWxpYXMgfSBmcm9tICcuL3BsdWdpbi1jb250cmFjdC5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9SRVBPUlRfS0VZX0VOViwgU0VDVVJJVFlfUkVQT1JUX1NFQ1JFVF9MRUFGLCBTRUNVUklUWV9SRVBPUlRfVVBMT0FEX0VOViB9IGZyb20gJy4vc2VjdXJpdHktcmVwb3J0cy5qcyc7XG5pbXBvcnQgeyBDVVJBVEVEX1NFTEZfTVVUQVRJT05fSU1BR0UgfSBmcm9tICcuL3NlbGYtbXV0YXRpb24uanMnO1xuaW1wb3J0IHsgUExVR0lOX0lNQUdFX1JFUE9TSVRPUllfUkUgfSBmcm9tICcuL3N0ZXAtbWFuaWZlc3QuanMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcuanMnO1xuaW1wb3J0IHR5cGUgeyBDb2RlQnVpbGRTdGVwT3B0aW9ucywgU3RlcEN1c3RvbWl6YXRpb24gfSBmcm9tICcuLi9waXBlbGluZS9zdGVwLXR5cGVzLmpzJztcbmltcG9ydCB7IHJlc29sdmVQbHVnaW5UZW1wbGF0ZXMgfSBmcm9tICcuLi90ZW1wbGF0ZS9wbHVnaW4tcmVzb2x2ZXIuanMnO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoJ3BpcGVsaW5lLWhlbHBlcnMnKTtcblxuLyoqXG4gKiBCdWlsZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBwbHVnaW4gY29uZmlnLCBtZXJnZWQgbWV0YWRhdGEsIGFuZCBjdXN0b20gZW52LlxuICpcbiAqIE1lcmdlIG9yZGVyIChsYXN0IHdpbnMpOlxuICogICAxLiBwbHVnaW4uZW52IOKAlCBwbHVnaW4gZGVmYXVsdCBlbnYgdmFycyAobG93ZXN0IHByaW9yaXR5KVxuICogICAyLiBub24tbmFtZXNwYWNlZCBtZXRhZGF0YSBrZXlzIOKAlCBlLmcuIFBZVEhPTl9WRVJTSU9OLCBXT1JLRElSXG4gKiAgIDMuIGN1c3RvbUVudiDigJQgcGVyLXN0ZXAgY3VzdG9tIGVudiB2YXJzIChoaWdoZXN0IHByaW9yaXR5KVxuICovXG5mdW5jdGlvbiBidWlsZEVudihwbHVnaW46IFBsdWdpbiwgbWV0YWRhdGE6IE1ldGFEYXRhVHlwZSwgY3VzdG9tRW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICByZXR1cm4ge1xuICAgIC4uLihwbHVnaW4uZW52ID8/IHt9KSxcbiAgICAuLi5leHRyYWN0TWV0YWRhdGFFbnYobWV0YWRhdGEpLFxuICAgIC4uLihjdXN0b21FbnYgPz8ge30pLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGJvb3RzdHJhcC1wcmVmaXhlZCBpbnN0YWxsIGFuZCBidWlsZCBjb21tYW5kcyBmcm9tIHBsdWdpbiBjb25maWcuXG4gKiBFYWNoIGNvbW1hbmQgbGlzdCBpcyBwcmVwZW5kZWQgd2l0aCBhIFdPUktESVIgYm9vdHN0cmFwIHRoYXQgZGVmYXVsdHMgdG8gJy4vJy5cbiAqIFdoZW4gY3VzdG9tIGNvbW1hbmRzIGFyZSBwcm92aWRlZCwgdGhleSBhcmUgaW5qZWN0ZWQgYmVmb3JlL2FmdGVyIHRoZSBwbHVnaW4ncyBjb21tYW5kcy5cbiAqIEJ1aWxkIGNvbW1hbmRzIGFyZSBvcHRpb25hbGx5IHdyYXBwZWQgYnkgZmFpbHVyZUJlaGF2aW9yIGxvZ2ljLlxuICovXG5mdW5jdGlvbiBidWlsZENvbW1hbmRzKHBsdWdpbjogUGx1Z2luLCBjdXN0b20/OiBTdGVwQ3VzdG9taXphdGlvbiwgZmFpbHVyZUJlaGF2aW9yPzogJ2ZhaWwnIHwgJ3dhcm4nIHwgJ2lnbm9yZScpOiB7IGluc3RhbGxDb21tYW5kczogc3RyaW5nW107IGNvbW1hbmRzOiBzdHJpbmdbXSB9IHtcbiAgY29uc3QgdXNlckNvbW1hbmRzID0gW1xuICAgIC4uLihjdXN0b20/LnByZUNvbW1hbmRzID8/IFtdKSxcbiAgICAuLi4ocGx1Z2luLmNvbW1hbmRzPy5sZW5ndGggPyBwbHVnaW4uY29tbWFuZHMgOiBbXSksXG4gICAgLi4uKGN1c3RvbT8ucG9zdENvbW1hbmRzID8/IFtdKSxcbiAgXTtcblxuICByZXR1cm4ge1xuICAgIGluc3RhbGxDb21tYW5kczogW1xuICAgICAgU1RFUF9CT09UU1RSQVBfQ01ELFxuICAgICAgLi4uKGN1c3RvbT8ucHJlSW5zdGFsbENvbW1hbmRzID8/IFtdKSxcbiAgICAgIC4uLihwbHVnaW4uaW5zdGFsbENvbW1hbmRzID8/IFtdKSxcbiAgICAgIC4uLihjdXN0b20/LnBvc3RJbnN0YWxsQ29tbWFuZHMgPz8gW10pLFxuICAgIF0sXG4gICAgY29tbWFuZHM6IFtTVEVQX0JPT1RTVFJBUF9DTUQsIC4uLndyYXBDb21tYW5kc0ZvckZhaWx1cmVCZWhhdmlvcih1c2VyQ29tbWFuZHMsIGZhaWx1cmVCZWhhdmlvcildLFxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBwbGFpbiBlbnYgcmVjb3JkIHRvIENvZGVCdWlsZCdzIGVudmlyb25tZW50VmFyaWFibGVzIGZvcm1hdCAoUExBSU5URVhUKS5cbiAqL1xuZnVuY3Rpb24gdG9Db2RlQnVpbGRFbnZWYXJzKGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHN0cmluZyB9PiB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZW52KS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IFtuYW1lLCB7IHZhbHVlIH1dKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBTRUNSRVRTX01BTkFHRVItdHlwZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBwbHVnaW4gc2VjcmV0IGRlY2xhcmF0aW9ucy5cbiAqIFVzZXMgbmFtaW5nIGNvbnZlbnRpb246IHBpcGVsaW5lLWJ1aWxkZXIve29yZ0lkfS97c2VjcmV0TmFtZX1cbiAqIEVhY2ggb3JnIG1hbmFnZXMgdGhlc2Ugc2VjcmV0cyBpbiB0aGVpciBvd24gQVdTIFNlY3JldHMgTWFuYWdlci5cbiAqL1xuY29uc3QgVkFMSURfU0VDUkVUX05BTUUgPSAvXlthLXpBLVowLTkvXys9LkAtXSskLztcblxuLyoqXG4gKiBTZWNyZXRzIE1hbmFnZXIgbGVhZiBob2xkaW5nIHRoZSBvcmcncyBSRUdJU1RSWSBjcmVkZW50aWFsIOKAlCB0aGVcbiAqIGByZWdpc3RyeTpwdXNoYC1zY29wZWQgc2VydmljZS1hY2NvdW50IGtleSBDb2RlQnVpbGQgcHJlc2VudHMgYXMgQmFzaWMgYXV0aCB0b1xuICogcGlwZWxpbmUtaW1hZ2UtcmVnaXN0cnkuIERlbGliZXJhdGVseSBOT1QgYHBsYXRmb3JtYDogdGhhdCBzZWNyZXQgaG9sZHNcbiAqIHRoZSBvcmcncyBmdWxsLXByaXZpbGVnZSBhdXRvbWF0aW9uIGNyZWRlbnRpYWwsIGFuZCBhIGJ1aWxkIGNvbnRhaW5lciBoYXMgbm9cbiAqIGJ1c2luZXNzIGJlaW5nIGFibGUgdG8gY2FsbCB0aGUgQVBJIHdpdGggaXQuXG4gKiBQcm92aXNpb25lZCBieSBgcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbiAtLXNjb3BlIHJlZ2lzdHJ5OnB1c2hgLlxuICovXG5jb25zdCBSRUdJU1RSWV9DUkVERU5USUFMX1NFQ1JFVCA9ICdyZWdpc3RyeS1wdXNoJztcblxuZnVuY3Rpb24gdG9TZWNyZXRFbnZWYXJzKFxuICBzZWNyZXRzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgcmVxdWlyZWQ6IGJvb2xlYW4gfT4sXG4gIG9yZ0lkOiBzdHJpbmcsXG4pOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiBzdHJpbmc7IHR5cGU6IEJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZVR5cGUgfT4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIHNlY3JldHMubWFwKCh7IG5hbWUgfSkgPT4ge1xuICAgICAgY29uc3Qgc2VjcmV0UGF0aCA9IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aChvcmdJZCwgbmFtZSk7XG4gICAgICBpZiAoIVZBTElEX1NFQ1JFVF9OQU1FLnRlc3Qoc2VjcmV0UGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZWNyZXQgcGF0aCBcIiR7c2VjcmV0UGF0aH1cIiBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgZm9yIEFXUyBTZWNyZXRzIE1hbmFnZXJgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogc2VjcmV0UGF0aCxcbiAgICAgICAgICB0eXBlOiBCdWlsZEVudmlyb25tZW50VmFyaWFibGVUeXBlLlNFQ1JFVFNfTUFOQUdFUixcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSksXG4gICk7XG59XG5cbi8qKlxuICogSW4tY2x1c3RlciAvIGxvY2FsIHJlZ2lzdHJ5IGhvc3RuYW1lcyB0aGF0IEFXUyBDb2RlQnVpbGQgKG91dC1vZi1jbHVzdGVyKVxuICogY2Fubm90IHJlc29sdmUuIEJha2luZyBvbmUgb2YgdGhlc2UgaW50byBhIENvZGVCdWlsZCBpbWFnZSBVUkkgZ3VhcmFudGVlcyBhXG4gKiBgQlVJTERfQ09OVEFJTkVSX1VOQUJMRV9UT19QVUxMX0lNQUdFYCBmYWlsdXJlIGF0IGJ1aWxkIHRpbWUsIHNvIHdlIGZhaWwgdGhlXG4gKiBzeW50aCBmYXN0IGluc3RlYWQg4oCUIHdpdGggYSBtZXNzYWdlIHRoYXQgc2F5cyBob3cgdG8gZml4IGl0LlxuICovXG5jb25zdCBVTlJFQUNIQUJMRV9QVUxMX0hPU1RTID0gbmV3IFNldChbJ3JlZ2lzdHJ5JywgJ2xvY2FsaG9zdCcsICcxMjcuMC4wLjEnLCAnOjoxJywgJzAuMC4wLjAnXSk7XG5cbi8qKiBLdWJlcm5ldGVzIC8gbUROUyBzdWZmaXhlcyB0aGF0IG9ubHkgcmVzb2x2ZSBpbnNpZGUgdGhlIGNsdXN0ZXIvTEFOLiAqL1xuY29uc3QgVU5SRUFDSEFCTEVfSE9TVF9TVUZGSVhFUyA9IFsnLnN2YycsICcuc3ZjLmNsdXN0ZXIubG9jYWwnLCAnLmxvY2FsJ107XG5cbi8qKlxuICogUmVkdWNlIGEgcmVnaXN0cnkgaG9zdCB2YWx1ZSB0byBpdHMgYmFyZSBob3N0bmFtZSBmb3IgdGhlIHJlYWNoYWJpbGl0eSBjaGVjazpcbiAqIHN0cmlwIElQdjYgYnJhY2tldHMgYW5kIGFueSBgOnBvcnRgIHN1ZmZpeCAoYW4gb3BlcmF0b3IgbWF5IHB1dCBob3N0K3BvcnQgaW5cbiAqIG9uZSBmaWVsZCksIHNvIGByZWdpc3RyeTo1MDAwYCAvIGBbOjoxXTo1MDAwYCBhcmUgc3RpbGwgcmVjb2duaXplZC5cbiAqL1xuZnVuY3Rpb24gYmFyZUhvc3RuYW1lKHJhd0hvc3Q6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBoID0gcmF3SG9zdC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGguc3RhcnRzV2l0aCgnWycpKSB7XG4gICAgY29uc3QgZW5kID0gaC5pbmRleE9mKCddJyk7XG4gICAgaWYgKGVuZCAhPT0gLTEpIHJldHVybiBoLnNsaWNlKDEsIGVuZCk7IC8vIFs6OjFdOjUwMDAgLT4gOjoxXG4gIH1cbiAgLy8gU3RyaXAgYSB0cmFpbGluZyA6cG9ydCBvbmx5IGZvciBub24tSVB2NiB2YWx1ZXMgKElQdjYgY29udGFpbnMgJzo6JyBvciA+MSAnOicpLlxuICBpZiAoaC5pbmNsdWRlcygnOicpICYmIChoLm1hdGNoKC86L2cpPy5sZW5ndGggPz8gMCkgPT09IDEpIGggPSBoLnNwbGl0KCc6JylbMF07XG4gIHJldHVybiBoO1xufVxuXG4vKiogVHJ1ZSB3aGVuIENvZGVCdWlsZCAob3V0LW9mLWNsdXN0ZXIpIGNvdWxkIG5vdCByZXNvbHZlIHRoaXMgcmVnaXN0cnkgaG9zdC4gKi9cbmZ1bmN0aW9uIGlzVW5yZWFjaGFibGVQdWxsSG9zdChyYXdIb3N0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgaCA9IGJhcmVIb3N0bmFtZShyYXdIb3N0KTtcbiAgaWYgKGggPT09ICcnKSByZXR1cm4gdHJ1ZTsgLy8gbm8gaG9zdCDihpIgbWFsZm9ybWVkIFVSSVxuICBpZiAoVU5SRUFDSEFCTEVfUFVMTF9IT1NUUy5oYXMoaCkpIHJldHVybiB0cnVlO1xuICByZXR1cm4gVU5SRUFDSEFCTEVfSE9TVF9TVUZGSVhFUy5zb21lKChzKSA9PiBoLmVuZHNXaXRoKHMpKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBleHRlcm5hbCAob3V0LW9mLWNsdXN0ZXIpIHJlZ2lzdHJ5IHB1bGwgaG9zdCArIGA6cG9ydGAgc3VmZml4IGZvclxuICogYSBDb2RlQnVpbGQgaW1hZ2UgVVJJLCBhbmQgZmFpbCBmYXN0IGlmIGl0IHJlc29sdmVkIHRvIGFuIGluLWNsdXN0ZXIvbG9jYWxcbiAqIGRlZmF1bHQgdGhhdCBDb2RlQnVpbGQgY2FuJ3QgcmVhY2guXG4gKlxuICogUHJlZmVycyBgcHVsbEhvc3RgL2BwdWxsUG9ydGAgKHRoZSBwdWJsaWMgZW5kcG9pbnQgQ29kZUJ1aWxkIGNhbiByZXNvbHZlKSBhbmRcbiAqIGZhbGxzIGJhY2sgdG8gYGhvc3RgL2Bwb3J0YCBmb3Igc2luZ2xlLWhvc3QgZGVwbG95cy4gcGlwZWxpbmUtbWFuYWdlciBiYWtlc1xuICogdGhlIHJpZ2h0IHB1bGwgaG9zdCBpbnRvIHRoZSBzeW50aCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlIHBsYXRmb3JtIFVSTCBpdFxuICogZGVwbG95cyBhZ2FpbnN0IChgcHJvcHMucmVnaXN0cnlgKTsgdGhpcyBndWFyZCBjYXRjaGVzIHRoZSBjYXNlIHdoZXJlIG5laXRoZXJcbiAqIHRoYXQgbm9yIGBJTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1RgL2BQTEFURk9STV9CQVNFX1VSTGAgd2FzIHN1cHBsaWVkLlxuICpcbiAqIEVzY2FwZSBoYXRjaDogYEFMTE9XX0lOQ0xVU1RFUl9QVUxMX0hPU1Q9dHJ1ZWAgKGUuZy4gQ29kZUJ1aWxkIGluIGEgVlBDIHdob3NlXG4gKiBwcml2YXRlIEROUyBnZW51aW5lbHkgcmVzb2x2ZXMgdGhlIGluLWNsdXN0ZXIgbmFtZSkuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVFeHRlcm5hbFB1bGxUYXJnZXQoXG4gIHJlZ2lzdHJ5OiB7IGhvc3Q/OiBzdHJpbmc7IHBvcnQ/OiBudW1iZXI7IHB1bGxIb3N0Pzogc3RyaW5nOyBwdWxsUG9ydD86IG51bWJlciB9LFxuKTogeyBob3N0OiBzdHJpbmc7IHBvcnRQYXJ0OiBzdHJpbmcgfSB7XG4gIGNvbnN0IGhvc3QgPSByZWdpc3RyeS5wdWxsSG9zdCB8fCByZWdpc3RyeS5ob3N0IHx8ICcnO1xuICBjb25zdCBwb3J0ID0gcmVnaXN0cnkucHVsbFBvcnQgPz8gcmVnaXN0cnkucG9ydDtcbiAgaWYgKHByb2Nlc3MuZW52LkFMTE9XX0lOQ0xVU1RFUl9QVUxMX0hPU1QgIT09ICd0cnVlJyAmJiBpc1VucmVhY2hhYmxlUHVsbEhvc3QoaG9zdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgUmVnaXN0cnkgcHVsbCBob3N0IHJlc29sdmVkIHRvICcke2hvc3R9Jywgd2hpY2ggQVdTIENvZGVCdWlsZCBjYW5ub3QgcmVhY2gg4oCUIGl0IGlzIHRoZSBgICtcbiAgICAgICdpbi1jbHVzdGVyL2xvY2FsIGRlZmF1bHQuIFRoZSBzeW50aGVzaXplZCBwaXBlbGluZSB3b3VsZCBmYWlsIGF0IGJ1aWxkIHRpbWUgd2l0aCAnICtcbiAgICAgICdCVUlMRF9DT05UQUlORVJfVU5BQkxFX1RPX1BVTExfSU1BR0UuIFNldCB0aGUgcGxhdGZvcm1cXCdzIHB1YmxpYyBob3N0IHZpYSAnICtcbiAgICAgICdJTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1Qgb3IgUExBVEZPUk1fQkFTRV9VUkwgYmVmb3JlIGRlcGxveWluZyDigJQgcGlwZWxpbmUtbWFuYWdlciBiYWtlcyAnICtcbiAgICAgICd0aGlzIGluIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgcGxhdGZvcm0gVVJMIGl0IGRlcGxveXMgYWdhaW5zdC4gJyArXG4gICAgICAnU2V0IEFMTE9XX0lOQ0xVU1RFUl9QVUxMX0hPU1Q9dHJ1ZSB0byBieXBhc3MgKGluLVZQQyBwcml2YXRlIEROUykuJyxcbiAgICApO1xuICB9XG4gIGNvbnN0IHBvcnRQYXJ0ID0gcG9ydCAmJiBwb3J0ICE9PSA4MCAmJiBwb3J0ICE9PSA0NDMgPyBgOiR7cG9ydH1gIDogJyc7XG4gIHJldHVybiB7IGhvc3QsIHBvcnRQYXJ0IH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgQ29kZUJ1aWxkIGltYWdlIHRvIHVzZSBmb3IgYSBwbHVnaW4uXG4gKlxuICogU3RyYXRlZ3k6XG4gKiAgIDEuIElmIHRoZSBwbHVnaW4gc2V0cyBgYXdzOmNkazpjb2RlYnVpbGQ6YnVpbGRlbnZpcm9ubWVudDpidWlsZEltYWdlYFxuICogICAgICBleHBsaWNpdGx5IGluIG1ldGFkYXRhLCB0aGUgbWV0YWRhdGEtYnVpbGRlciBwYXNzdGhyb3VnaCBoYW5kbGVzIGl0XG4gKiAgICAgICh2aWEgYG1ldGFkYXRhRm9yQnVpbGRFbnZpcm9ubWVudGApLiBUaGlzIGZ1bmN0aW9uIHJldHVybnNcbiAqICAgICAgYHVuZGVmaW5lZGAgYW5kIHRoZSBtZXRhZGF0YSB3aW5zLlxuICogICAyLiBPdGhlcndpc2UsIGlmIHRoZSBwbHVnaW4gaGFzIGEgYG5hbWVgK2B2ZXJzaW9uYCBBTkQgdGhlIHJlZ2lzdHJ5XG4gKiAgICAgIGNvbmZpZyBpcyBwb3B1bGF0ZWQsIGJ1aWxkIGEgYExpbnV4QnVpbGRJbWFnZS5mcm9tRG9ja2VyUmVnaXN0cnkoKWBcbiAqICAgICAgaW1hZ2UgcG9pbnRpbmcgYXQgYDxyZWdpc3RyeS1ob3N0Pjo8cG9ydD4vPG5zPi88bmFtZT5APGltYWdlRGlnZXN0PmBcbiAqICAgICAgd2hlcmUgYDxucz5gIGlzIGBzeXN0ZW1gIG9yIGBvcmctPG9yZ0lkPmAuIFBpbm5lZCBCWSBESUdFU1Qg4oCUIHRoZSBvbmVcbiAqICAgICAgdGhlIHBsdWdpbiBzZXJ2aWNlIHZlcmlmaWVkIGFnYWluc3QgaXRzIHNpZ25pbmcga2V5IGJlZm9yZSByZXR1cm5pbmdcbiAqICAgICAgdGhpcyByZWNvcmQg4oCUIG5ldmVyIGJ5IHRoZSBtdXRhYmxlIGA6PHZlcnNpb24+YCB0YWcsIHdoaWNoIGFueW9uZVxuICogICAgICBob2xkaW5nIHRoZSBvcmcncyByZWdpc3RyeSBwdXNoIGNyZWRlbnRpYWwgY291bGQgcmUtcG9pbnQuIEEgcGx1Z2luXG4gKiAgICAgIHRoYXQgbmVlZHMgYW4gaW1hZ2UgYnV0IGNhcnJpZXMgbm8gZGlnZXN0IGlzIHJlZnVzZWQgKHRocm93cyk6IHJ1bm5pbmdcbiAqICAgICAgYW4gdW52ZXJpZmllZCBpbWFnZSBpcyB3b3JzZSB0aGFuIGEgZmFpbGVkIHN5bnRoLiBDb2RlQnVpbGQgYXV0aGVudGljYXRlcyBieVxuICogICAgICBzZW5kaW5nIHRoZSBwZXItb3JnIHBsYXRmb3JtIFNlY3JldCBhcyBCYXNpYyBhdXRoIHRvXG4gKiAgICAgIGBwaXBlbGluZS1pbWFnZS1yZWdpc3RyeWAncyBgL3Rva2VuYCBlbmRwb2ludDsgdGhlIEpXVCBpbiBgcGFzc3dvcmRgXG4gKiAgICAgIHJlc29sdmVzIHRvIGEgcmVnaXN0cnkgdG9rZW4gc2NvcGVkIHRvIHRoZSBvcmcuXG4gKiAgIDMuIElmIGBtZXRhZGF0YV9vbmx5YCwgcmV0dXJuIGB1bmRlZmluZWRgIHNvIHRoZSBzdGVwIHJ1bnMgb24gdGhlXG4gKiAgICAgIHBpcGVsaW5lJ3MgZGVmYXVsdCBpbWFnZSAoYGNvZGVCdWlsZERlZmF1bHRzYDogdGhlIHRvb2xjaGFpbiByZWxlYXNlJ3NcbiAqICAgICAgYHN5c3RlbS9waXBlbGluZS1ib290c3RyYXBAPGRpZ2VzdD5gLCBzZWUge0BsaW5rIHJlc29sdmVEZWZhdWx0QnVpbGRJbWFnZX0pLlxuICpcbiAqIGBzY29wZWAgYW5kIGBvcmdJZGAgYXJlIHJlcXVpcmVkOiB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBTZWNyZXQgaXMgbmFtZWRcbiAqIGBwaXBlbGluZS1idWlsZGVyLzxvcmdJZD4vcGxhdGZvcm1gLCBhbmQgYFNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKClgXG4gKiBuZWVkcyBhIENvbnN0cnVjdCB0byBhbmNob3IgdGhlIGltcG9ydGVkIHNlY3JldCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQbHVnaW5JbWFnZShzY29wZTogQ29uc3RydWN0IHwgdW5kZWZpbmVkLCBwbHVnaW46IFBsdWdpbiwgb3JnSWQ/OiBzdHJpbmcpOiBJQnVpbGRJbWFnZSB8IHVuZGVmaW5lZCB7XG4gIC8vIGBtZXRhZGF0YV9vbmx5YCBwbHVnaW5zIGxlZ2l0aW1hdGVseSBoYXZlIG5vIGltYWdlIOKAlCB0aGVpciB3b3JrIHJ1bnNcbiAgLy8gaW4gdGhlIGRlZmF1bHQgQ29kZUJ1aWxkIGltYWdlLiBRdWlldCBza2lwLlxuICBpZiAocGx1Z2luLmJ1aWxkVHlwZSA9PT0gJ21ldGFkYXRhX29ubHknKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIC8vIGJ1aWxkX2ltYWdlIC8gcHJlYnVpbHQgcGx1Z2lucyBtdXN0IGhhdmUgbmFtZSArIHZlcnNpb24gKERCIGNvbnN0cmFpbnRcbiAgLy8gbWFrZXMgYm90aCBOT1QgTlVMTCkuIERlZmVuc2l2ZSBjaGVjayBpbiBjYXNlIGEgbWFsZm9ybWVkIHJvdyBzbGlwcyBpbi5cbiAgaWYgKCFwbHVnaW4ubmFtZSB8fCAhcGx1Z2luLnZlcnNpb24pIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBQbHVnaW4gXCIke3BsdWdpbi5uYW1lfVwiIGhhcyBidWlsZFR5cGU9JHtwbHVnaW4uYnVpbGRUeXBlfSBidXQgbWlzc2luZyBuYW1lL3ZlcnNpb24g4oCUIGAgK1xuICAgICAgJ0NvZGVCdWlsZCB3aWxsIHJ1biBvbiB0aGUgZGVmYXVsdCBidWlsZCBpbWFnZSBhbmQgd29uXFwndCBoYXZlIHRoZSBwbHVnaW5cXCdzIGJha2VkIHRvb2xzLicsXG4gICAgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gTm8gZGlnZXN0IOKHkiB0aGUgcGx1Z2luIHNlcnZpY2UgbmV2ZXIgc2lnbmVkIGFuIGltYWdlIGZvciB0aGlzIHJvdyAob3IgdGhlXG4gIC8vIHJlY29yZCBkaWRuJ3QgY29tZSBmcm9tIGAvcGx1Z2lucy9sb29rdXBgKS4gRmFpbCB0aGUgc3ludGggcmF0aGVyIHRoYW4gZmFsbFxuICAvLyBiYWNrIHRvIHRoZSB0YWcuXG4gIGlmICghcGx1Z2luLmltYWdlRGlnZXN0IHx8ICEvXnNoYTI1NjpbMC05YS1mXXs2NH0kLy50ZXN0KHBsdWdpbi5pbWFnZURpZ2VzdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX06JHtwbHVnaW4udmVyc2lvbn1cIiBoYXMgYnVpbGRUeXBlPSR7cGx1Z2luLmJ1aWxkVHlwZX0gYnV0IG5vIHNpZ25lZCBpbWFnZSBkaWdlc3QuIGAgK1xuICAgICAgJ1JlYnVpbGQgdGhlIHBsdWdpbiAocmUtdXBsb2FkIGl0KSBzbyB0aGUgcGxhdGZvcm0gY2FuIGJ1aWxkLCBzaWduIGFuZCByZWNvcmQgaXRzIGltYWdlLicsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSByZXBvc2l0b3J5IGNvbWVzIGZyb20gbG9va3VwOiBgcHVibGljLzxwdWJsaXNoZXI+LzxuYW1lPmAgZm9yIGFcbiAgLy8gbGlzdGVkIHBsdWdpbiAodGhlIHJlYWQtb25seSBjb3B5IGV2ZXJ5IG9yZyBtYXkgcHVsbCksIGBvcmctPGlkPi88bmFtZT5gXG4gIC8vIGZvciB0aGUgb3JnJ3Mgb3duLiBOZXZlciBkZXJpdmVkIGhlcmUgZnJvbSB0aGUgcmVjb3JkJ3Mgb3duZXIg4oCUIGEgbGlzdGluZydzXG4gIC8vIGltYWdlIGRvZXNuJ3QgbGl2ZSBpbiBpdHMgcHVibGlzaGVyJ3MgbmFtZXNwYWNlLlxuICBjb25zdCByZXBvc2l0b3J5ID0gKHBsdWdpbiBhcyBQbHVnaW4gJiB7IGltYWdlUmVwb3NpdG9yeT86IHN0cmluZyB8IG51bGwgfSkuaW1hZ2VSZXBvc2l0b3J5O1xuICBpZiAoIXJlcG9zaXRvcnkgfHwgIVBMVUdJTl9JTUFHRV9SRVBPU0lUT1JZX1JFLnRlc3QocmVwb3NpdG9yeSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX06JHtwbHVnaW4udmVyc2lvbn1cIiBoYXMgbm8gaW1hZ2UgcmVwb3NpdG9yeSBmcm9tIHRoZSBwbHVnaW4gbG9va3VwLiBgICtcbiAgICAgICdSZXNvbHZlIHBsdWdpbnMgdGhyb3VnaCB0aGUgcGxhdGZvcm0gKGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoYCAvIHRoZSBsb29rdXAgY3VzdG9tIHJlc291cmNlKS4nLFxuICAgICk7XG4gIH1cblxuICBsZXQgcmVnaXN0cnk7XG4gIHRyeSB7XG4gICAgcmVnaXN0cnkgPSBDb25maWcuZ2V0KCdyZWdpc3RyeScpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBDb25maWcgbmFtZXNwYWNlIG5vdCBsb2FkZWQgKGUuZy4sIHVuaXQgdGVzdHMgd2l0aG91dCBmdWxsIGNvbmZpZykuXG4gICAgbG9nLndhcm4oXG4gICAgICBgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX06JHtwbHVnaW4udmVyc2lvbn1cIiBuZWVkcyB0aGUgcmVnaXN0cnkgY29uZmlnIGJ1dCBpdCdzIG5vdCBsb2FkZWQg4oCUIGAgK1xuICAgICAgJ0NvZGVCdWlsZCB3aWxsIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBidWlsZCBpbWFnZS4gJyArXG4gICAgICAnU2V0IElNQUdFX1JFR0lTVFJZX0hPU1QgKyBJTUFHRV9SRUdJU1RSWV9QT1JUIGluIHBpcGVsaW5lLW1hbmFnZXJcXCdzIGVudmlyb25tZW50LicsXG4gICAgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFyZWdpc3RyeT8uaG9zdCkge1xuICAgIGxvZy53YXJuKFxuICAgICAgYFBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9OiR7cGx1Z2luLnZlcnNpb259XCIgbmVlZHMgSU1BR0VfUkVHSVNUUllfSE9TVCBidXQgaXQncyBlbXB0eSDigJQgYCArXG4gICAgICAnQ29kZUJ1aWxkIHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGJ1aWxkIGltYWdlLiAnICtcbiAgICAgICdTZXQgSU1BR0VfUkVHSVNUUllfSE9TVCBpbiBwaXBlbGluZS1tYW5hZ2VyXFwncyBlbnZpcm9ubWVudCB0byB1c2UgdGhlIHBsdWdpbiBpbWFnZS4nLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNjb3BlKSB7XG4gICAgbG9nLndhcm4oYFBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9XCIgaW1hZ2UgcmVzb2x1dGlvbiBza2lwcGVkOiBubyBjb25zdHJ1Y3Qgc2NvcGUgcHJvdmlkZWRgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gUGVyLW9yZyBhdXRoIHJlcXVpcmVzIG9yZ0lkIOKAlCB0aGUgU2VjcmV0IGlzIG5hbWVkIHBlciBvcmcuXG4gIGlmICghb3JnSWQpIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBQbHVnaW4gXCIke3BsdWdpbi5uYW1lfVwiIGltYWdlIHJlc29sdXRpb24gc2tpcHBlZDogb3JnSWQgaXMgcmVxdWlyZWQgdG8gYCArXG4gICAgICAncmVzb2x2ZSB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBTZWNyZXQgdXNlZCBmb3IgQ29kZUJ1aWxkIEJhc2ljIGF1dGguJyxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBDb21wb3NlIHRoZSBpbWFnZSBVUkkgZnJvbSB0aGUgbG9va3VwJ3MgcmVwb3NpdG9yeSwgcGlubmVkIGJ5IGRpZ2VzdC5cbiAgLy8gVGhlIHRva2VuIHNlcnZpY2UgZ3JhbnRzIHB1bGwgb24gYHB1YmxpYy8qYCB0byBldmVyeSBhdXRoZW50aWNhdGVkXG4gIC8vIGlkZW50aXR5IGFuZCBvbiBgb3JnLTxpZD4vKmAgdG8gdGhhdCBvcmcgKGFuZCBpdHMgdGVhbXMpLlxuICAvLyBVc2UgdGhlIGV4dGVybmFsIHB1bGwgaG9zdC9wb3J0OiB0aGlzIGltYWdlIFVSSSBpcyBjb25zdW1lZCBieSBBV1NcbiAgLy8gQ29kZUJ1aWxkIChvdXQtb2YtY2x1c3RlciksIHdoaWNoIGNhbid0IHJlc29sdmUgdGhlIGluLWNsdXN0ZXJcbiAgLy8gYHJlZ2lzdHJ5OjUwMDBgIENsdXN0ZXJJUC4gRmFsbCBiYWNrIHRvIGBob3N0YC9gcG9ydGAgZm9yIHNpbmdsZS1ob3N0IC9cbiAgLy8gaW4tY2x1c3Rlci1vbmx5IGRlcGxveXMgd2hlcmUgbm8gc2VwYXJhdGUgcHVsbCBob3N0IGlzIGNvbmZpZ3VyZWQuXG4gIGNvbnN0IHsgaG9zdDogcHVsbEhvc3QsIHBvcnRQYXJ0IH0gPSByZXNvbHZlRXh0ZXJuYWxQdWxsVGFyZ2V0KHJlZ2lzdHJ5KTtcbiAgY29uc3QgaW1hZ2VVcmkgPSBgJHtwdWxsSG9zdH0ke3BvcnRQYXJ0fS8ke3JlcG9zaXRvcnl9QCR7cGx1Z2luLmltYWdlRGlnZXN0fWA7XG5cbiAgLy8gQ29kZUJ1aWxkIHJlYWRzIGBwaXBlbGluZS1idWlsZGVyLzxvcmdJZD4vcmVnaXN0cnktcHVzaGAgYW5kIHNlbmRzIGl0c1xuICAvLyBgdXNlcm5hbWVgL2BwYXNzd29yZGAgZmllbGRzIGFzIEhUVFAgQmFzaWMgdG8gdGhlIHJlZ2lzdHJ5LiBUaGUgcmVnaXN0cnlcbiAgLy8gY2hhbGxlbmdlcyB3aXRoIGEgQmVhcmVyIHJlYWxtIHBvaW50aW5nIGF0IHBpcGVsaW5lLWltYWdlLXJlZ2lzdHJ5J3NcbiAgLy8gYC90b2tlbmAgZW5kcG9pbnQ7IHRoZSBEb2NrZXIgY2xpZW50IGZvcndhcmRzIHRob3NlIGNyZWRzLCBpbWFnZS1yZWdpc3RyeVxuICAvLyBleGNoYW5nZXMgdGhlIG9wYXF1ZSBgcGJfc2Ff4oCmYCBrZXkgZm9yIGEgc2hvcnQtbGl2ZWQgdG9rZW4sIGFuZCBhIHJlZ2lzdHJ5XG4gIC8vIHRva2VuIHNjb3BlZCB0byB0aGUgb3JnIGlzIGlzc3VlZC5cbiAgLy9cbiAgLy8gVGhpcyBpcyB0aGUgUkVHSVNUUlktT05MWSBjcmVkZW50aWFsLCBub3QgdGhlIG9yZydzIGZ1bGwtcHJpdmlsZWdlXG4gIC8vIHBsYXRmb3JtIG9uZTogaXRzIGV4Y2hhbmdlZCB0b2tlbiBjYXJyaWVzIHRoZSBzaW5nbGUgYHJlZ2lzdHJ5OnB1c2hgIHNjb3BlXG4gIC8vIGFuZCBubyBBUEkgcGVybWlzc2lvbnMgYXQgYWxsLCBzbyBhIENvZGVCdWlsZCBqb2IgdGhhdCBsZWFrcyBpdCBjYW4gbW92ZVxuICAvLyBpbWFnZXMgaW5zaWRlIHRoaXMgb3JnJ3MgbmFtZXNwYWNlIGFuZCBub3RoaW5nIGVsc2UuIFRoZSBwbHVnaW4tbG9va3VwXG4gIC8vIExhbWJkYSBrZWVwcyByZWFkaW5nIGAuLi4vcGxhdGZvcm1gIOKAlCBpdCBjYWxscyB0aGUgb3JkaW5hcnkgQVBJLCB3aGljaCBub1xuICAvLyBzaW5nbGUgc2NvcGUgY292ZXJzLlxuICAvLyBQcm92aXNpb24gaXQgd2l0aDogcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbiAtLXNjb3BlIHJlZ2lzdHJ5OnB1c2hcbiAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gIGNvbnN0IHNlY3JldE5hbWUgPSBDb3JlQ29uc3RhbnRzLnNlY3JldFBhdGgob3JnSWQsIFJFR0lTVFJZX0NSRURFTlRJQUxfU0VDUkVUKTtcbiAgLy8gQ0RLIGNvbnN0cnVjdCBJRHMgYWxsb3cgb25seSBbQS1aYS16MC05Xy1dOyBzYW5pdGl6ZSB0aGUgc2VjcmV0IG5hbWUuXG4gIGNvbnN0IHNlY3JldENvbnN0cnVjdElkID0gYFJlZ2lzdHJ5Q3JlZHNfJHtzZWNyZXROYW1lLnJlcGxhY2UoL1teQS1aYS16MC05Xy1dL2csICdfJyl9YDtcbiAgY29uc3QgY3JlZGVudGlhbHNTZWNyZXQgPSAoc3RhY2subm9kZS50cnlGaW5kQ2hpbGQoc2VjcmV0Q29uc3RydWN0SWQpIGFzIFNlY3JldCB8IHVuZGVmaW5lZClcbiAgICA/PyBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMihzdGFjaywgc2VjcmV0Q29uc3RydWN0SWQsIHNlY3JldE5hbWUpO1xuXG4gIHJldHVybiBMaW51eEJ1aWxkSW1hZ2UuZnJvbURvY2tlclJlZ2lzdHJ5KGltYWdlVXJpLCB7XG4gICAgc2VjcmV0c01hbmFnZXJDcmVkZW50aWFsczogY3JlZGVudGlhbHNTZWNyZXQsXG4gIH0pO1xufVxuXG4vKiogVGhlIG1hbmFnZWQgdG9vbGNoYWluJ3MgYnVpbGQtaW1hZ2UgcGx1Z2luIG5hbWUgYW5kIGl0cyAoc3lzdGVtLW9yZykgaW1hZ2UgcmVwb3NpdG9yeS4gKi9cbmV4cG9ydCBjb25zdCBCT09UU1RSQVBfUExVR0lOX05BTUUgPSAncGlwZWxpbmUtYm9vdHN0cmFwJztcbmV4cG9ydCBjb25zdCBCT09UU1RSQVBfSU1BR0VfUkVQT1NJVE9SWSA9IGBzeXN0ZW0vJHtCT09UU1RSQVBfUExVR0lOX05BTUV9YDtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBDb2RlQnVpbGQgaW1hZ2Ug4oCUIGV2ZXJ5IGFjdGlvbiB3aXRob3V0IGEgcGx1Z2luLWJha2VkIGltYWdlICh0aGVcbiAqIHBpcGVsaW5lLXdpZGUgYGNvZGVCdWlsZERlZmF1bHRzYCwgYSBwbHVnaW4tbGVzcyBzdGVwLCBhc3NldCBwdWJsaXNoaW5nKSDigJRcbiAqIHBpbm5lZCB0byB0aGUgcmVzb2x2ZWQgdG9vbGNoYWluIHJlbGVhc2UncyBgcGlwZWxpbmUtYm9vdHN0cmFwYCBpbWFnZS5cbiAqXG4gKiBFeGFjdGx5IHRoZSBwYXRoIGEgc3lzdGVtIHBsdWdpbidzIGltYWdlIHRha2VzICh7QGxpbmsgcmVzb2x2ZVBsdWdpbkltYWdlfSk6XG4gKiBgPGV4dGVybmFsIHB1bGwgaG9zdD4vc3lzdGVtL3BpcGVsaW5lLWJvb3RzdHJhcEA8c2lnbmVkIGRpZ2VzdD5gIHdpdGggdGhlXG4gKiBvcmcncyBgcmVnaXN0cnktcHVzaGAgc2VjcmV0IGFzIHRoZSBwdWxsIGNyZWRlbnRpYWwuIFRoZXJlIGlzIG5vIGVudi1kcml2ZW5cbiAqIGltYWdlLCBubyB0YWcgcHVsbCBhbmQgbm8gY3VyYXRlZCBmYWxsYmFjazogdGhlIGJvb3RzdHJhcCBpcyByZXNvbHZlZCBmcm9tXG4gKiB0aGUgcGxhdGZvcm0gKGBwaXBlbGluZS1tYW5hZ2VyYCdzIGByZXNvbHZlQm9vdHN0cmFwSW1hZ2VgLCBEMikgYW5kIGFueXRoaW5nXG4gKiBzaG9ydCBvZiBhIHBpbm5lZCwgcHVsbGFibGUgaW1hZ2UgZmFpbHMgdGhlIHN5bnRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZURlZmF1bHRCdWlsZEltYWdlKHNjb3BlOiBDb25zdHJ1Y3QsIG9yZ0lkOiBzdHJpbmcgfCB1bmRlZmluZWQsIGJvb3RzdHJhcDogUGx1Z2luKTogSUJ1aWxkSW1hZ2Uge1xuICBjb25zdCBmYWlsID0gKHdoeTogc3RyaW5nKTogbmV2ZXIgPT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBCT09UU1RSQVBfSU1BR0VfVU5SRVNPTFZFRDogdGhlIGRlZmF1bHQgYnVpbGQgaW1hZ2UgY2FuJ3QgYmUgcGlubmVkIOKAlCAke3doeX0uIGAgK1xuICAgICAgJ1N5bnRoZXNpemUgdGhyb3VnaCBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aC9kZXBsb3lgIChvciBwYXNzIGAtLXRvb2xjaGFpbi1maWxlYCB3aXRoIGAtLWxvY2FsLXNwZWNgKS4nLFxuICAgICk7XG4gIH07XG4gIGlmICghYm9vdHN0cmFwIHx8IGJvb3RzdHJhcC5uYW1lICE9PSBCT09UU1RSQVBfUExVR0lOX05BTUUpIHtcbiAgICBmYWlsKGByZXNvbHZlZEJvb3RzdHJhcCBpcyBcIiR7Ym9vdHN0cmFwPy5uYW1lID8/ICdtaXNzaW5nJ31cIiwgbm90ICR7Qk9PVFNUUkFQX1BMVUdJTl9OQU1FfWApO1xuICB9XG4gIGNvbnN0IHJlcG9zaXRvcnkgPSAoYm9vdHN0cmFwIGFzIFBsdWdpbiAmIHsgaW1hZ2VSZXBvc2l0b3J5Pzogc3RyaW5nIHwgbnVsbCB9KS5pbWFnZVJlcG9zaXRvcnk7XG4gIGlmIChyZXBvc2l0b3J5ICE9PSBCT09UU1RSQVBfSU1BR0VfUkVQT1NJVE9SWSkge1xuICAgIGZhaWwoYCR7Qk9PVFNUUkFQX1BMVUdJTl9OQU1FfToke2Jvb3RzdHJhcC52ZXJzaW9ufSBoYXMgaW1hZ2UgcmVwb3NpdG9yeSBcIiR7cmVwb3NpdG9yeSA/PyAnbm9uZSd9XCIsIG5vdCAke0JPT1RTVFJBUF9JTUFHRV9SRVBPU0lUT1JZfWApO1xuICB9XG4gIGlmICghb3JnSWQpIGZhaWwoJ3RoZSBwaXBlbGluZSBoYXMgbm8gb3JnSWQgKHRoZSByZWdpc3RyeSBwdWxsIGNyZWRlbnRpYWwgaXMgcGVyIG9yZyknKTtcbiAgLy8gVGhyb3dzIG9uIGEgbWlzc2luZy9tYWxmb3JtZWQgZGlnZXN0IGFuZCBhbiB1bnJlYWNoYWJsZSBwdWxsIGhvc3QuXG4gIGNvbnN0IGltYWdlID0gcmVzb2x2ZVBsdWdpbkltYWdlKHNjb3BlLCB7IC4uLmJvb3RzdHJhcCwgYnVpbGRUeXBlOiAncHJlYnVpbHQnIH0sIG9yZ0lkKTtcbiAgaWYgKCFpbWFnZSkgZmFpbCgndGhlIHJlZ2lzdHJ5IGNvbmZpZyBpcyBub3QgbG9hZGVkIChJTUFHRV9SRUdJU1RSWV9IT1NUIC8gdGhlIHBsYXRmb3JtIFVSTCknKTtcbiAgcmV0dXJuIGltYWdlIGFzIElCdWlsZEltYWdlO1xufVxuXG4vKipcbiAqIFRoZSBBV1MgY3VyYXRlZCBpbWFnZSBzZWxmLW11dGF0aW9uIHJ1bnMgb24gKEQxMCk6IGl0IG9ubHkgbmVlZHMgTm9kZSBhbmQgdGhlXG4gKiBwaW5uZWQgQ0RLIENMSSwgYW5kIGEgY3VyYXRlZCBpbWFnZSBrZWVwcyBhIGRlZmVjdGl2ZSB0b29sY2hhaW4gcmVsZWFzZVxuICogcmVjb3ZlcmFibGUuIEN1cmF0ZWQg4oeSIGBmcm9tQ29kZUJ1aWxkSW1hZ2VJZGAgKENPREVCVUlMRCBwdWxsIGNyZWRlbnRpYWxzIOKAlFxuICogYGZyb21Eb2NrZXJSZWdpc3RyeWAgd291bGQgc2V0IFNFUlZJQ0VfUk9MRSwgd2hpY2ggQ0ZOIHJlamVjdHMgZm9yIGEgY3VyYXRlZCBpbWFnZSkuXG4gKi9cbmV4cG9ydCBjb25zdCBjdXJhdGVkU2VsZk11dGF0aW9uSW1hZ2UgPSAoKTogSUJ1aWxkSW1hZ2UgPT4gTGludXhCdWlsZEltYWdlLmZyb21Db2RlQnVpbGRJbWFnZUlkKENVUkFURURfU0VMRl9NVVRBVElPTl9JTUFHRSk7XG5cbi8qKlxuICogQ3JlYXRlIGEgQ29kZUJ1aWxkIHN0ZXAgb3IgU2hlbGwgc3RlcCBiYXNlZCBvbiBwbHVnaW4gY29uZmlndXJhdGlvbi5cbiAqXG4gKiBNZXRhZGF0YSBtZXJnZSBvcmRlciAobGFzdCB3aW5zKTpcbiAqICAgMS4gUGx1Z2luIG1ldGFkYXRhIChmcm9tIHBsdWdpbi5tZXRhZGF0YSBpbiBkYXRhYmFzZSkg4oCUIHRoZSBwbHVnaW5cbiAqICAgICAgYXV0aG9yJ3MgYmFrZWQtaW4gZGVmYXVsdHNcbiAqICAgMi4gU3RlcC1sZXZlbCBtZXRhZGF0YSAoZnJvbSBvcHRpb25zLm1ldGFkYXRhKSDigJQgdGhlIHBpcGVsaW5lIGF1dGhvcidzXG4gKiAgICAgIHBlci1zdGVwIG92ZXJyaWRlcywgd2hpY2ggYXJlIG1vcmUgc3BlY2lmaWMgYW5kIG11c3Qgd2luXG4gKlxuICogRW52aXJvbm1lbnQgbWVyZ2Ugb3JkZXIgKGxhc3Qgd2lucyk6XG4gKiAgIDEuIFBsdWdpbiBlbnYgdmFycyAoZnJvbSBwbHVnaW4uZW52KVxuICogICAyLiBDdXN0b20gZW52IHZhcnMgKGZyb20gb3B0aW9ucy5lbnYpXG4gKiAgIDMuIFdPUktESVIgZnJvbSBtZXJnZWQgbWV0YWRhdGFcbiAqXG4gKiBDREsgcHJvcCBzcHJlYWQgb3JkZXIgKGxhc3Qgd2lucyk6XG4gKiAgIHByb2dyYW1tYXRpYyBkZWZhdWx0cyAoaW5wdXQsIGNvbW1hbmRzLCBlbnYsIG5ldHdvcmspIOKGkiBtZXRhZGF0YSBvdmVycmlkZXNcbiAqXG4gKiBUaGlzIG1lYW5zIG1ldGFkYXRhIGtleXMgbGlrZSBgYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpjb21tYW5kc2BcbiAqIHdpbGwgb3ZlcnJpZGUgdGhlIHBsdWdpbi1kZXJpdmVkIGNvbW1hbmRzIHdoZW4gZXhwbGljaXRseSBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb2RlQnVpbGRTdGVwKG9wdGlvbnM6IENvZGVCdWlsZFN0ZXBPcHRpb25zKTogU2hlbGxTdGVwIHwgQ29kZUJ1aWxkU3RlcCB8IE1hbnVhbEFwcHJvdmFsU3RlcCB7XG4gIGNvbnN0IHtcbiAgICBpZCwgaW5wdXQsIG1ldGFkYXRhLCBuZXR3b3JrLCBzY29wZSxcbiAgICBwcmVJbnN0YWxsQ29tbWFuZHMsIHBvc3RJbnN0YWxsQ29tbWFuZHMsIHByZUNvbW1hbmRzLCBwb3N0Q29tbWFuZHMsXG4gICAgZW52OiBjdXN0b21FbnYsIGFkZGl0aW9uYWxJbnB1dHMsIHRpbWVvdXQsIGZhaWx1cmVCZWhhdmlvcixcbiAgICBhcnRpZmFjdE1hbmFnZXIsIHN0YWdlTmFtZSwgc3RhZ2VBbGlhcywgcGx1Z2luQWxpYXMsIG9yZ0lkLCBwaXBlbGluZVNjb3BlLFxuICB9ID0gb3B0aW9ucztcblxuICAvLyBSZXNvbHZlIHt7IC4uLiB9fSB0ZW1wbGF0ZXMgaW4gcGx1Z2luIHNwZWMgZmllbGRzIGFnYWluc3QgdGhlIHBpcGVsaW5lIHNjb3BlLlxuICAvLyBFdmVyeSBjYWxsIGdvZXMgdGhyb3VnaCB0aGUgcmVzb2x2ZXIg4oCUIHBsdWdpbnMgd2l0aG91dCB0ZW1wbGF0ZSB0b2tlbnMgYXJlXG4gIC8vIGEgbm8tb3AgZmFzdCBwYXRoIGluc2lkZSByZXNvbHZlUGx1Z2luVGVtcGxhdGVzKCkuXG4gIGNvbnN0IHBsdWdpbiA9IHJlc29sdmVQbHVnaW5UZW1wbGF0ZXMob3B0aW9ucy5wbHVnaW4sIHBpcGVsaW5lU2NvcGUpO1xuXG4gIC8vIFBlci1zdGVwIG1ldGFkYXRhICh0aGUgcGlwZWxpbmUgYXV0aG9yJ3Mgb3ZlcnJpZGVzLCBlLmcuIEpBVkFfVkVSU0lPTj0yNSlcbiAgLy8gbXVzdCB3aW4gb3ZlciB0aGUgcGx1Z2luJ3MgY2F0YWxvZyBgbWV0YWRhdGFgIGRlZmF1bHRzLCBzbyBpdCBnb2VzIExBU1QuXG4gIC8vIFJldmVyc2luZyB0aGVzZSBzaWxlbnRseSBkcm9wcGVkIHBlci1zdGVwIG92ZXJyaWRlcyBmb3IgYW55IHBsdWdpbiB0aGF0XG4gIC8vIHNoaXBzIG5vbi1lbXB0eSBjYXRhbG9nIG1ldGFkYXRhIChwbHVnaW5zIHRoYXQgY2FycnkgZGVmYXVsdHMgdW5kZXIgYGVudmBcbiAgLy8gaW5zdGVhZCDigJQgbGlrZSBqYXZhLWNvcnJldHRvIOKAlCB3ZXJlIHVuYWZmZWN0ZWQsIHdoaWNoIG1hc2tlZCB0aGlzKS5cbiAgY29uc3QgbWVyZ2VkID0gbWVyZ2UocGx1Z2luLm1ldGFkYXRhID8/IHt9LCBtZXRhZGF0YSA/PyB7fSk7XG5cbiAgLy8gTWFudWFsQXBwcm92YWxTdGVwOiBubyBjb21tYW5kcywgZW52LCBjb21wdXRlLCBvciBuZXR3b3JrIOKAlCBqdXN0IGlkICsgb3B0aW9uYWwgY29tbWVudFxuICBpZiAocGx1Z2luLnBsdWdpblR5cGUgPT09IFBsdWdpblR5cGUuTUFOVUFMX0FQUFJPVkFMX1NURVApIHtcbiAgICByZXR1cm4gbmV3IE1hbnVhbEFwcHJvdmFsU3RlcChpZCwge1xuICAgICAgY29tbWVudDogdHlwZW9mIG1lcmdlZC5BUFBST1ZBTF9DT01NRU5UID09PSAnc3RyaW5nJyA/IG1lcmdlZC5BUFBST1ZBTF9DT01NRU5UIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG5cbiAgbG9nLmRlYnVnKCdbQ3JlYXRlQ29kZUJ1aWxkU3RlcF0gQnVpbGRpbmcgc3RlcCB3aXRoIG1lcmdlZCBtZXRhZGF0YScpO1xuXG4gIC8vIFdhcm4gYWJvdXQgcmVxdWlyZWQgc2VjcmV0cyB3aXRob3V0IG9yZ0lkIChjYW4ndCByZXNvbHZlKVxuICBjb25zdCByZXF1aXJlZFNlY3JldHMgPSBwbHVnaW4uc2VjcmV0cz8uZmlsdGVyKHMgPT4gcy5yZXF1aXJlZCkgPz8gW107XG4gIGlmIChyZXF1aXJlZFNlY3JldHMubGVuZ3RoID4gMCAmJiAhb3JnSWQpIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBQbHVnaW4gXCIke3BsdWdpbi5uYW1lfVwiIGRlY2xhcmVzICR7cmVxdWlyZWRTZWNyZXRzLmxlbmd0aH0gcmVxdWlyZWQgc2VjcmV0KHMpIGJ1dCBubyBvcmdJZCBpcyBhdmFpbGFibGUuIGAgK1xuICAgICAgYFNlY3JldHMgd2lsbCBub3QgYmUgaW5qZWN0ZWQ6ICR7cmVxdWlyZWRTZWNyZXRzLm1hcChzID0+IHMubmFtZSkuam9pbignLCAnKX1gLFxuICAgICk7XG4gIH1cblxuICAvLyBSZXNvbHZlIHBsdWdpbiBzZWNyZXRzIGFzIFNFQ1JFVFNfTUFOQUdFUiBlbnYgdmFycyDigJQgb25seSBSRVFVSVJFRCBvbmVzLlxuICAvLyBDb2RlQnVpbGQgdHJlYXRzIGEgU0VDUkVUU19NQU5BR0VSIGVudiB2YXIgYXMgTUFOREFUT1JZOiBpdCBmYWlscyB0aGUgYnVpbGRcbiAgLy8gYXQgRE9XTkxPQURfU09VUkNFIChcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb246IGNhbid0IGZpbmQgdGhlIHNwZWNpZmllZFxuICAvLyBzZWNyZXRcIikgaWYgdGhlIHNlY3JldCBpcyBhYnNlbnQuIEF1dG8td2lyaW5nIGFuIE9QVElPTkFMIHNlY3JldFxuICAvLyAoYHJlcXVpcmVkOiBmYWxzZWAsIGUuZy4gTlZEX0FQSV9LRVkgLyBTRU1HUkVQX0FQUF9UT0tFTikgdGhlIG9wZXJhdG9yIGhhc24ndFxuICAvLyBjcmVhdGVkIHdvdWxkIHRoZXJlZm9yZSBicmVhayBldmVyeSBidWlsZCDigJQgdGhlIGV4YWN0IG9wcG9zaXRlIG9mIFwib3B0aW9uYWxcIi5cbiAgLy8gT3B0aW9uYWwgc2VjcmV0cyBhcmUgbGVmdCBmb3IgdGhlIHBsdWdpbiB0byByZWFkIG9ubHkgd2hlcmUgdGhlIG9wZXJhdG9yIGhhc1xuICAvLyBwcm92aXNpb25lZCB0aGVtIChvdXQtb2YtYmFuZCBlbnYvc2VjcmV0KSwgbm90IGZvcmNlLWluamVjdGVkIGhlcmUuXG4gIGNvbnN0IHNlY3JldEVudlZhcnMgPSAocmVxdWlyZWRTZWNyZXRzLmxlbmd0aCAmJiBvcmdJZClcbiAgICA/IHRvU2VjcmV0RW52VmFycyhyZXF1aXJlZFNlY3JldHMsIG9yZ0lkKVxuICAgIDoge307XG5cbiAgY29uc3QgZW52ID0gYnVpbGRFbnYocGx1Z2luLCBtZXJnZWQsIGN1c3RvbUVudik7XG5cbiAgLy8gU2VjdXJpdHktcmVwb3J0IHVwbG9hZCAob3B0LWluKTogaW5qZWN0IHRoZSBvcmcncyByZXBvcnRpbmc6aW5nZXN0LXNjb3BlZFxuICAvLyBrZXkg4oCUIG5ldmVyIHRoZSBmdWxsIHBsYXRmb3JtIGNyZWRlbnRpYWwg4oCUIGFzIGEgU0VDUkVUU19NQU5BR0VSIHZhcmlhYmxlLlxuICAvLyBDREsgZ3JhbnRzIHRoZSBzdGVwIHJvbGUgcmVhZCBvbiBleGFjdGx5IHRoYXQgc2VjcmV0LiBTZWUgY29yZS9zZWN1cml0eS1yZXBvcnRzLnRzLlxuICBjb25zdCByZXBvcnRVcGxvYWQgPSBlbnZbU0VDVVJJVFlfUkVQT1JUX1VQTE9BRF9FTlZdID09PSAndHJ1ZSc7XG4gIGlmIChyZXBvcnRVcGxvYWQgJiYgIW9yZ0lkKSB7XG4gICAgbG9nLndhcm4oYFN0ZXAgXCIke2lkfVwiIHNldHMgJHtTRUNVUklUWV9SRVBPUlRfVVBMT0FEX0VOVn09dHJ1ZSBidXQgbm8gb3JnSWQgaXMgYXZhaWxhYmxlIOKAlCB0aGUgdXBsb2FkIGtleSBjYW5ub3QgYmUgaW5qZWN0ZWQgYW5kIHRoZSB1cGxvYWQgd2lsbCBmYWlsLmApO1xuICB9XG4gIGNvbnN0IHJlcG9ydEtleUVudlZhcjogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogc3RyaW5nOyB0eXBlOiBCdWlsZEVudmlyb25tZW50VmFyaWFibGVUeXBlIH0+ID0gcmVwb3J0VXBsb2FkICYmIG9yZ0lkXG4gICAgPyB7XG4gICAgICBbU0VDVVJJVFlfUkVQT1JUX0tFWV9FTlZdOiB7XG4gICAgICAgIHZhbHVlOiBgJHtDb3JlQ29uc3RhbnRzLnNlY3JldFBhdGgob3JnSWQsIFNFQ1VSSVRZX1JFUE9SVF9TRUNSRVRfTEVBRil9OnBhc3N3b3JkYCxcbiAgICAgICAgdHlwZTogQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlVHlwZS5TRUNSRVRTX01BTkFHRVIsXG4gICAgICB9LFxuICAgIH1cbiAgICA6IHt9O1xuXG4gIC8vIENvZGVQaXBlbGluZSByZXNvbHZlZCB2YXJpYWJsZXMg4oCUIG11c3QgYmUgaW4gQ29kZUJ1aWxkU3RlcC5lbnYgKGFjdGlvbi1sZXZlbCksXG4gIC8vIG5vdCBidWlsZEVudmlyb25tZW50LmVudmlyb25tZW50VmFyaWFibGVzIChwcm9qZWN0LWxldmVsKVxuICBjb25zdCBhY3Rpb25FbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgUElQRUxJTkVfRVhFQ1VUSU9OX0lEOiAnI3tjb2RlcGlwZWxpbmUuUGlwZWxpbmVFeGVjdXRpb25JZH0nLFxuICB9O1xuXG4gIGNvbnN0IG91dHB1dERpciA9IHBsdWdpbi5wcmltYXJ5T3V0cHV0RGlyZWN0b3J5O1xuICBjb25zdCBlbnN1cmVPdXRwdXREaXIgPSAob3V0cHV0RGlyICYmICFvdXRwdXREaXIuaW5jbHVkZXMoJyonKSlcbiAgICA/IFtgbWtkaXIgLXAgXCIke291dHB1dERpcn1cIiAmJiB0b3VjaCBcIiR7b3V0cHV0RGlyfS8uZ2l0a2VlcFwiYF1cbiAgICA6IFtdO1xuXG4gIGNvbnN0IHsgaW5zdGFsbENvbW1hbmRzLCBjb21tYW5kcyB9ID0gYnVpbGRDb21tYW5kcyhwbHVnaW4sIHtcbiAgICBwcmVJbnN0YWxsQ29tbWFuZHM6IFsuLi5lbnN1cmVPdXRwdXREaXIsIC4uLihwcmVJbnN0YWxsQ29tbWFuZHMgPz8gW10pXSxcbiAgICBwb3N0SW5zdGFsbENvbW1hbmRzLFxuICAgIHByZUNvbW1hbmRzLFxuICAgIHBvc3RDb21tYW5kcyxcbiAgfSwgZmFpbHVyZUJlaGF2aW9yKTtcblxuICBjb25zdCBwcm9ncmFtbWF0aWMgPSB7IGlucHV0LCBpbnN0YWxsQ29tbWFuZHMsIGNvbW1hbmRzIH07XG5cbiAgLy8gUmVzb2x2ZSB0aGUgcGx1Z2luJ3MgcnVudGltZSBpbWFnZS4gQSBzdGVwIHdpdGggbm8gYGJ1aWxkSW1hZ2VgIHJ1bnMgb25cbiAgLy8gdGhlIHBpcGVsaW5lJ3MgZGVmYXVsdCBpbWFnZSAodGhlIHRvb2xjaGFpbiByZWxlYXNlJ3MgcGlwZWxpbmUtYm9vdHN0cmFwLFxuICAvLyB2aWEgYGNvZGVCdWlsZERlZmF1bHRzYCksIHdoaWNoIGNhcnJpZXMgcGlwZWxpbmUtbWFuYWdlciBhbmQgdGhlIENESyBDTElcbiAgLy8gYnV0IE5PTkUgb2YgYSBwbHVnaW4ncyBiYWtlZCB0b29scyAoc255aywgdGVycmFmb3JtLCBldGMuKS4gV2lyaW5nIHRoZSBwbHVnaW4ncyBpbWFnZVxuICAvLyBoZXJlIG1lYW5zIENvZGVCdWlsZCBwdWxscyBmcm9tIG91ciBwcml2YXRlIHJlZ2lzdHJ5IGFuZCB0aGUgdG9vbHNcbiAgLy8gaW5zdGFsbGVkIGluIHRoZSBwbHVnaW4ncyBEb2NrZXJmaWxlIGFyZSBhY3R1YWxseSBhdmFpbGFibGUuXG4gIGNvbnN0IHBsdWdpbkJ1aWxkSW1hZ2UgPSByZXNvbHZlUGx1Z2luSW1hZ2Uoc2NvcGUsIHBsdWdpbiwgb3JnSWQpO1xuXG4gIC8vIFNoZWxsU3RlcCBicmFuY2guXG4gIC8vIFNoZWxsU3RlcCBpdHNlbGYgZG9lc24ndCBhY2NlcHQgYGJ1aWxkRW52aXJvbm1lbnRgL2BidWlsZEltYWdlYC4gQ0RLXG4gIC8vIHBpcGVsaW5lcyB3cmFwcyBTaGVsbFN0ZXBzIGluIGEgZGVmYXVsdCBDb2RlQnVpbGQgYWN0aW9uIHRoYXQgcnVucyBvblxuICAvLyB0aGUgcGlwZWxpbmUncyBkZWZhdWx0IGltYWdlIChwaXBlbGluZS1ib290c3RyYXApIOKAlCB3aGljaCB3b24ndCBoYXZlIHRoZVxuICAvLyBwbHVnaW4ncyB0b29scy5cbiAgLy9cbiAgLy8gU28gd2hlbiBhIFNIRUxMX1NURVAgcGx1Z2luIERPRVMgaGF2ZSBhbiBpbWFnZSAoYmVjYXVzZSBpdHMgYXV0aG9yXG4gIC8vIGJha2VkIHRvb2xzIGludG8gYSBEb2NrZXJmaWxlKSwgd2UgUFJPTU9URSBpdCB0byBhIENvZGVCdWlsZFN0ZXAgd2l0aFxuICAvLyB0aGUgcmVzb2x2ZWQgaW1hZ2UuIFRoZSBwbHVnaW4gYXV0aG9yJ3MgaW50ZW50IChcInVzZSBteSBiYWtlZCB0b29sc1wiKVxuICAvLyBpcyBwcmVzZXJ2ZWQgd2l0aG91dCBmb3JjaW5nIHRoZW0gdG8gY2hhbmdlIHBsdWdpblR5cGUuXG4gIC8vXG4gIC8vIFdoZW4gdGhlIHBsdWdpbiBoYXMgbm8gaW1hZ2UgKG9yIHJlZ2lzdHJ5IGlzbid0IGNvbmZpZ3VyZWQpLCB3ZSBrZWVwXG4gIC8vIHRoZSBvcmlnaW5hbCBTaGVsbFN0ZXAg4oCUIGl0J3MgbGlnaHRlciB3ZWlnaHQgYW5kIHRoZSBkZWZhdWx0XG4gIC8vIENvZGVCdWlsZCBpbWFnZSBpcyBmaW5lLlxuICBpZiAocGx1Z2luLnBsdWdpblR5cGUgPT09IFBsdWdpblR5cGUuU0hFTExfU1RFUCkge1xuICAgIGlmICghcGx1Z2luQnVpbGRJbWFnZSkge1xuICAgICAgcmV0dXJuIG5ldyBTaGVsbFN0ZXAoaWQsIHtcbiAgICAgICAgLi4ucHJvZ3JhbW1hdGljLFxuICAgICAgICBlbnY6IHsgLi4uZW52LCAuLi5hY3Rpb25FbnYgfSxcbiAgICAgICAgLi4ubWV0YWRhdGFGb3JTaGVsbFN0ZXAobWVyZ2VkKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYFtDcmVhdGVDb2RlQnVpbGRTdGVwXSBTSEVMTF9TVEVQIHBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9XCIgaGFzIGEgcmVnaXN0cnkgaW1hZ2Ug4oCUIHByb21vdGluZyB0byBDb2RlQnVpbGRTdGVwIHNvIHRoZSBwbHVnaW4gaW1hZ2UgaXMgYWN0dWFsbHkgdXNlZGApO1xuICAgIC8vIEZhbGwgdGhyb3VnaCB0byB0aGUgQ29kZUJ1aWxkU3RlcCBwYXRoIGJlbG93LlxuICB9XG5cbiAgY29uc3QgY29tcHV0ZVR5cGUgPSBnZXRDb21wdXRlVHlwZShcbiAgICBwbHVnaW4uY29tcHV0ZVR5cGUgPz8gb3B0aW9ucy5kZWZhdWx0Q29tcHV0ZVR5cGUgPz8gJ1NNQUxMJyxcbiAgKTtcblxuICAvLyBTdGVwIG5ldHdvcms6IGV4cGxpY2l0IHN0ZXAgY29uZmlnIHdpbnMsIGVsc2UgdGhpcyBzdGVwJ3MgYGVjMjpuZXR3b3JrYCBtZXRhZGF0YS5cbiAgY29uc3QgcmVzb2x2ZWROZXR3b3JrID0gbmV0d29yayA/PyBuZXR3b3JrQ29uZmlnRnJvbU1ldGFkYXRhKG1lcmdlZCk7XG4gIGNvbnN0IG5ldHdvcmtQcm9wcyA9IHJlc29sdmVkTmV0d29ya1xuICAgID8gcmVzb2x2ZU5ldHdvcmsoc2NvcGUsIG9wdGlvbnMudW5pcXVlSWQsIHJlc29sdmVkTmV0d29yaylcbiAgICA6IHt9O1xuXG4gIC8vIE1ldGFkYXRhIHNwcmVhZCBsYXN0IHNvIGl0IGNhbiBvdmVycmlkZSBwcm9ncmFtbWF0aWMgZGVmYXVsdHMuXG4gIC8vIE5PVEU6IENhY2hpbmcgaXMgc3VwcG9ydGVkIHZpYSB0d28gbWV0YWRhdGEgcGF0aHM6XG4gIC8vICAgMS4gTWV0YWRhdGFLZXlzLkNBQ0hFICgnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpjYWNoZScpIOKAlCBwYXNzZWQgZGlyZWN0bHlcbiAgLy8gICAgICBhcyB0aGUgQ29kZUJ1aWxkU3RlcCBgY2FjaGVgIHByb3AgKGV4cGVjdHMgYSBjb2RlYnVpbGQuQ2FjaGUgb2JqZWN0KS5cbiAgLy8gICAyLiBNZXRhZGF0YUtleXMuUEFSVElBTF9CVUlMRF9TUEVDICgnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpwYXJ0aWFsYnVpbGRzcGVjJylcbiAgLy8gICAgICDigJQgcGFzc2VkIGFzIGBwYXJ0aWFsQnVpbGRTcGVjYCwgd2hpY2ggY2FuIGluY2x1ZGUgYSBgY2FjaGU6YCBzZWN0aW9uIGZvclxuICAvLyAgICAgIFMzIG9yIGxvY2FsIGNhY2hpbmcgKGUuZy4sIEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHsgY2FjaGU6IHsgcGF0aHM6IFsuLi5dIH0gfSkpLlxuICAvLyBQZXItc3RlcCBidWlsZEVudmlyb25tZW50IG92ZXJyaWRlcyBmcm9tIG1ldGFkYXRhIChhd3M6Y2RrOmNvZGVidWlsZDpidWlsZGVudmlyb25tZW50OiopLlxuICAvLyBBIG1ldGFkYXRhLXByb3ZpZGVkIGNvbXB1dGVUeXBlIGlzIGEgcmF3IHBhc3N0aHJvdWdoLCBzbyBub3JtYWxpemUgaXQgdGhyb3VnaFxuICAvLyBnZXRDb21wdXRlVHlwZSDigJQgb3RoZXJ3aXNlIGEgZnJpZW5kbHkgdmFsdWUgbGlrZSBcIkxBUkdFXCIgcmVhY2hlcyBDb2RlQnVpbGQgdmVyYmF0aW1cbiAgLy8gYW5kIGZhaWxzIHdpdGggXCJJbnZhbGlkIGNvbXB1dGUgdHlwZSBwcm92aWRlZFwiIChpdCBuZWVkcyBCVUlMRF9HRU5FUkFMMV9MQVJHRSkuXG4gIGNvbnN0IHJhd01ldGFCdWlsZEVudiA9IG1ldGFkYXRhRm9yQnVpbGRFbnZpcm9ubWVudChtZXJnZWQpO1xuICBjb25zdCBtZXRhQnVpbGRFbnYgPSB0eXBlb2YgcmF3TWV0YUJ1aWxkRW52LmNvbXB1dGVUeXBlID09PSAnc3RyaW5nJ1xuICAgID8geyAuLi5yYXdNZXRhQnVpbGRFbnYsIGNvbXB1dGVUeXBlOiBnZXRDb21wdXRlVHlwZShyYXdNZXRhQnVpbGRFbnYuY29tcHV0ZVR5cGUpIH1cbiAgICA6IHJhd01ldGFCdWlsZEVudjtcblxuICBjb25zdCBzdGVwID0gbmV3IENvZGVCdWlsZFN0ZXAoaWQsIHtcbiAgICAuLi5wcm9ncmFtbWF0aWMsXG4gICAgLi4ubmV0d29ya1Byb3BzLFxuICAgIC4uLihhZGRpdGlvbmFsSW5wdXRzICYmIHsgYWRkaXRpb25hbElucHV0cyB9KSxcbiAgICAuLi4odGltZW91dCAmJiB7IHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXModGltZW91dCkgfSksXG4gICAgZW52OiBhY3Rpb25FbnYsXG4gICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogcGx1Z2luLnByaW1hcnlPdXRwdXREaXJlY3RvcnkgPz8gdW5kZWZpbmVkLFxuICAgIC8vIFBpbiB0aGUgYnVpbGRzcGVjIHNoZWxsIHRvIFBPU0lYIC9iaW4vc2ggc28gZXhlY3V0aW9uIGlzIGlkZW50aWNhbCB0b1xuICAgIC8vIENvZGVCdWlsZCdzIGRlZmF1bHQgYW5kIHBvcnRhYmxlIGFjcm9zcyBtaW5pbWFsIGJhc2UgaW1hZ2VzIChubyBiYXNoXG4gICAgLy8gZGVwZW5kZW5jeSkuIFBsdWdpbiBzcGVjcyBhcmUgYXV0aG9yZWQgUE9TSVgtY2xlYW4gdG8gbWF0Y2gg4oCUIG5vIGJhc2gtb25seVxuICAgIC8vIGBbWyBdXWAsIGFycmF5cywgYHJlYWQgLXJhIDw8PGAsIG9yIGBzb3VyY2VgL2Budm0gdXNlYC9gc2RrIHVzZWAuIEFcbiAgICAvLyBwbHVnaW4tc3VwcGxpZWQgcGFydGlhbEJ1aWxkU3BlYyAobm9uZSB0b2RheSkgd291bGQgb3ZlcnJpZGUgdGhpcyB2aWEgdGhlXG4gICAgLy8gbWV0YWRhdGEgc3ByZWFkIGJlbG93IGFuZCBtdXN0IHRoZW4gc2V0IGBlbnYuc2hlbGxgIGl0c2VsZi5cbiAgICBwYXJ0aWFsQnVpbGRTcGVjOiBCdWlsZFNwZWMuZnJvbU9iamVjdCh7IGVudjogeyBzaGVsbDogJy9iaW4vc2gnIH0gfSksXG4gICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgY29tcHV0ZVR5cGUsXG4gICAgICBidWlsZEltYWdlOiBwbHVnaW5CdWlsZEltYWdlID8/IGRlZmF1bHRCdWlsZEltYWdlT3JUaHJvdyhvcHRpb25zKSxcbiAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgIC4uLnRvQ29kZUJ1aWxkRW52VmFycyhlbnYpLFxuICAgICAgICAuLi5zZWNyZXRFbnZWYXJzLFxuICAgICAgICAuLi5yZXBvcnRLZXlFbnZWYXIsXG4gICAgICB9LFxuICAgICAgLi4ubWV0YUJ1aWxkRW52LFxuICAgIH0sXG4gICAgLi4ubWV0YWRhdGFGb3JDb2RlQnVpbGRTdGVwKG1lcmdlZCksXG4gIH0pO1xuXG4gIC8vIFJlZ2lzdGVyIHdpdGggYXJ0aWZhY3QgbWFuYWdlciBpZiBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5IGlzIHNldFxuICBpZiAocGx1Z2luLnByaW1hcnlPdXRwdXREaXJlY3RvcnkgJiYgYXJ0aWZhY3RNYW5hZ2VyICYmIHN0YWdlTmFtZSkge1xuICAgIGNvbnN0IGFydGlmYWN0S2V5OiBBcnRpZmFjdEtleSA9IHtcbiAgICAgIHN0YWdlTmFtZSxcbiAgICAgIHN0YWdlQWxpYXM6IHN0YWdlQWxpYXMgPz8gYCR7c3RhZ2VOYW1lfS1hbGlhc2AsXG4gICAgICBwbHVnaW5OYW1lOiBwbHVnaW4ubmFtZSxcbiAgICAgIHBsdWdpbkFsaWFzOiBwbHVnaW5BbGlhcyA/PyBwbHVnaW5BcnRpZmFjdEFsaWFzKHBsdWdpbiksXG4gICAgICBvdXRwdXREaXJlY3Rvcnk6IHBsdWdpbi5wcmltYXJ5T3V0cHV0RGlyZWN0b3J5LFxuICAgIH07XG4gICAgYXJ0aWZhY3RNYW5hZ2VyLmFkZChhcnRpZmFjdEtleSwgc3RlcCk7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBpbWFnZSBhIHBsdWdpbi1sZXNzIENvZGVCdWlsZCBzdGVwIHJ1bnMgb24uIEl0IGlzIHJlc29sdmVkIG9uY2VcbiAqIHBlciBwaXBlbGluZSBmcm9tIGByZXNvbHZlZEJvb3RzdHJhcGAgYW5kIGhhbmRlZCBkb3duOyBhIHN0ZXAgd2l0aG91dCBvbmVcbiAqIGhhcyBubyBpbWFnZSB0byBydW4gb24sIHNvIHRoZSBzeW50aCBzdG9wcyByYXRoZXIgdGhhbiBsZXQgQ29kZUJ1aWxkIHBpY2tcbiAqIGl0cyBvd24uXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRCdWlsZEltYWdlT3JUaHJvdyhvcHRpb25zOiBDb2RlQnVpbGRTdGVwT3B0aW9ucyk6IElCdWlsZEltYWdlIHtcbiAgaWYgKG9wdGlvbnMuZGVmYXVsdEJ1aWxkSW1hZ2UpIHJldHVybiBvcHRpb25zLmRlZmF1bHRCdWlsZEltYWdlO1xuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYEJPT1RTVFJBUF9JTUFHRV9VTlJFU09MVkVEOiBzdGVwIFwiJHtvcHRpb25zLmlkfVwiIChwbHVnaW4gXCIke29wdGlvbnMucGx1Z2luLm5hbWV9XCIpIGhhcyBubyBwbHVnaW4gaW1hZ2UgYW5kIG5vIGRlZmF1bHQgYnVpbGQgaW1hZ2UuIGAgK1xuICAgICdQYXNzIGBkZWZhdWx0QnVpbGRJbWFnZWAgKFBpcGVsaW5lQnVpbGRlciByZXNvbHZlcyBpdCBmcm9tIGByZXNvbHZlZEJvb3RzdHJhcGApLicsXG4gICk7XG59XG5cbi8qKlxuICogQ29udmVydCBzdHJpbmcgb3IgQ29tcHV0ZVR5cGUgZW51bSB0byBDREsgQ29tcHV0ZVR5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbXB1dGVUeXBlKGlucHV0OiBzdHJpbmcgfCBDREtDb21wdXRlVHlwZSA9ICdTTUFMTCcpOiBDREtDb21wdXRlVHlwZSB7XG4gIC8vIElmIGFscmVhZHkgYSBDREsgQ29tcHV0ZVR5cGUsIHJldHVybiBhcy1pc1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuXG4gIC8vIEFscmVhZHkgYSBuYXRpdmUgQ29kZUJ1aWxkIENvbXB1dGVUeXBlIChlLmcuIFwiQlVJTERfR0VORVJBTDFfTEFSR0VcIik/IEFjY2VwdCBhcy1pc1xuICAvLyBzbyBib3RoIGZyaWVuZGx5IChMQVJHRSkgYW5kIG5hdGl2ZSB2YWx1ZXMgcm91bmQtdHJpcCB3aXRob3V0IGZhbGxpbmcgYmFjayB0byBTTUFMTC5cbiAgaWYgKChPYmplY3QudmFsdWVzKENES0NvbXB1dGVUeXBlKSBhcyBzdHJpbmdbXSkuaW5jbHVkZXMoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0IGFzIENES0NvbXB1dGVUeXBlO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IGlucHV0LnRvVXBwZXJDYXNlKCkgYXMgQ29tcHV0ZVR5cGU7XG5cbiAgY29uc3QgbWFwcGluZzogUmVjb3JkPENvbXB1dGVUeXBlLCBDREtDb21wdXRlVHlwZT4gPSB7XG4gICAgW0NvbXB1dGVUeXBlLlNNQUxMXTogQ0RLQ29tcHV0ZVR5cGUuU01BTEwsXG4gICAgW0NvbXB1dGVUeXBlLk1FRElVTV06IENES0NvbXB1dGVUeXBlLk1FRElVTSxcbiAgICBbQ29tcHV0ZVR5cGUuTEFSR0VdOiBDREtDb21wdXRlVHlwZS5MQVJHRSxcbiAgICBbQ29tcHV0ZVR5cGUuWDJfTEFSR0VdOiBDREtDb21wdXRlVHlwZS5YMl9MQVJHRSxcbiAgfTtcblxuICBjb25zdCByZXN1bHQgPSBtYXBwaW5nW25vcm1hbGl6ZWRdO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIGxvZy53YXJuKGBVbmtub3duIGNvbXB1dGUgdHlwZSBcIiR7aW5wdXR9XCIsIGZhbGxpbmcgYmFjayB0byBTTUFMTGApO1xuICAgIHJldHVybiBDREtDb21wdXRlVHlwZS5TTUFMTDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFVud3JhcCBhIFNlY3JldFZhbHVlIHwgc3RyaW5nIGludG8gYSBwbGFpbiBzdHJpbmcuXG4gKiBXaGVuIGEgU2VjcmV0VmFsdWUgaXMgcHJvdmlkZWQgKGUuZy4gZnJvbSBTZWNyZXRzIE1hbmFnZXIpLCBjYWxscyB1bnNhZmVVbndyYXAoKVxuICogdG8gZXh0cmFjdCB0aGUgdW5kZXJseWluZyB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcFNlY3JldCh2YWx1ZTogU2VjcmV0VmFsdWUgfCBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogdmFsdWUudW5zYWZlVW53cmFwKCk7XG59XG4iXX0=
541
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtaGVscGVycy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvcGlwZWxpbmUtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU3RSxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLFNBQVMsRUFBRSxXQUFXLElBQUksY0FBYyxFQUFFLGVBQWUsRUFBb0IsTUFBTSwyQkFBMkIsQ0FBQztBQUN0SixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRixPQUFPLEVBQW9CLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0ksT0FBTyxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQXFCLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekgsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFD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T0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQTJCO0lBQ3RELE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNsRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciwgTUFOQUdFRF9UT09MQ0hBSU4gfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHsgRHVyYXRpb24sIFNlY3JldFZhbHVlLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZVR5cGUsIEJ1aWxkU3BlYywgQ29tcHV0ZVR5cGUgYXMgQ0RLQ29tcHV0ZVR5cGUsIExpbnV4QnVpbGRJbWFnZSwgdHlwZSBJQnVpbGRJbWFnZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCB7IENvZGVCdWlsZFN0ZXAsIE1hbnVhbEFwcHJvdmFsU3RlcCwgU2hlbGxTdGVwIH0gZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyB0eXBlIEFydGlmYWN0S2V5IH0gZnJvbSAnLi9hcnRpZmFjdC1tYW5hZ2VyLmpzJztcbmltcG9ydCB7IG1ldGFkYXRhRm9yU2hlbGxTdGVwLCBtZXRhZGF0YUZvckNvZGVCdWlsZFN0ZXAsIG1ldGFkYXRhRm9yQnVpbGRFbnZpcm9ubWVudCwgbmV0d29ya0NvbmZpZ0Zyb21NZXRhZGF0YSB9IGZyb20gJy4vbWV0YWRhdGEtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBTVEVQX0JPT1RTVFJBUF9DTUQsIGV4dHJhY3RNZXRhZGF0YUVudiwgbWVyZ2UsIHdyYXBDb21tYW5kc0ZvckZhaWx1cmVCZWhhdmlvciB9IGZyb20gJy4vbWV0YWRhdGEtaGVscGVycy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlTmV0d29yayB9IGZyb20gJy4vbmV0d29yay5qcyc7XG5pbXBvcnQgeyBQbHVnaW5UeXBlLCBDb21wdXRlVHlwZSwgdHlwZSBNZXRhRGF0YVR5cGUgfSBmcm9tICcuL3BpcGVsaW5lLXR5cGVzLmpzJztcbmltcG9ydCB7IHBsdWdpbkFydGlmYWN0QWxpYXMgfSBmcm9tICcuL3BsdWdpbi1jb250cmFjdC5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9SRVBPUlRfS0VZX0VOViwgU0VDVVJJVFlfUkVQT1JUX1NFQ1JFVF9MRUFGLCBTRUNVUklUWV9SRVBPUlRfVVBMT0FEX0VOViB9IGZyb20gJy4vc2VjdXJpdHktcmVwb3J0cy5qcyc7XG5pbXBvcnQgeyBDVVJBVEVEX1NFTEZfTVVUQVRJT05fSU1BR0UgfSBmcm9tICcuL3NlbGYtbXV0YXRpb24uanMnO1xuaW1wb3J0IHsgUExVR0lOX0lNQUdFX1JFUE9TSVRPUllfUkUgfSBmcm9tICcuL3N0ZXAtbWFuaWZlc3QuanMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcuanMnO1xuaW1wb3J0IHR5cGUgeyBDb2RlQnVpbGRTdGVwT3B0aW9ucywgU3RlcEN1c3RvbWl6YXRpb24gfSBmcm9tICcuLi9waXBlbGluZS9zdGVwLXR5cGVzLmpzJztcbmltcG9ydCB7IHJlc29sdmVQbHVnaW5UZW1wbGF0ZXMgfSBmcm9tICcuLi90ZW1wbGF0ZS9wbHVnaW4tcmVzb2x2ZXIuanMnO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoJ3BpcGVsaW5lLWhlbHBlcnMnKTtcblxuLyoqXG4gKiBCdWlsZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBwbHVnaW4gY29uZmlnLCBtZXJnZWQgbWV0YWRhdGEsIGFuZCBjdXN0b20gZW52LlxuICpcbiAqIE1lcmdlIG9yZGVyIChsYXN0IHdpbnMpOlxuICogICAxLiBwbHVnaW4uZW52IOKAlCBwbHVnaW4gZGVmYXVsdCBlbnYgdmFycyAobG93ZXN0IHByaW9yaXR5KVxuICogICAyLiBub24tbmFtZXNwYWNlZCBtZXRhZGF0YSBrZXlzIOKAlCBlLmcuIFBZVEhPTl9WRVJTSU9OLCBXT1JLRElSXG4gKiAgIDMuIGN1c3RvbUVudiDigJQgcGVyLXN0ZXAgY3VzdG9tIGVudiB2YXJzIChoaWdoZXN0IHByaW9yaXR5KVxuICovXG5mdW5jdGlvbiBidWlsZEVudihwbHVnaW46IFBsdWdpbiwgbWV0YWRhdGE6IE1ldGFEYXRhVHlwZSwgY3VzdG9tRW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICByZXR1cm4ge1xuICAgIC4uLihwbHVnaW4uZW52ID8/IHt9KSxcbiAgICAuLi5leHRyYWN0TWV0YWRhdGFFbnYobWV0YWRhdGEpLFxuICAgIC4uLihjdXN0b21FbnYgPz8ge30pLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGJvb3RzdHJhcC1wcmVmaXhlZCBpbnN0YWxsIGFuZCBidWlsZCBjb21tYW5kcyBmcm9tIHBsdWdpbiBjb25maWcuXG4gKiBFYWNoIGNvbW1hbmQgbGlzdCBpcyBwcmVwZW5kZWQgd2l0aCBhIFdPUktESVIgYm9vdHN0cmFwIHRoYXQgZGVmYXVsdHMgdG8gJy4vJy5cbiAqIFdoZW4gY3VzdG9tIGNvbW1hbmRzIGFyZSBwcm92aWRlZCwgdGhleSBhcmUgaW5qZWN0ZWQgYmVmb3JlL2FmdGVyIHRoZSBwbHVnaW4ncyBjb21tYW5kcy5cbiAqIEJ1aWxkIGNvbW1hbmRzIGFyZSBvcHRpb25hbGx5IHdyYXBwZWQgYnkgZmFpbHVyZUJlaGF2aW9yIGxvZ2ljLlxuICovXG5mdW5jdGlvbiBidWlsZENvbW1hbmRzKHBsdWdpbjogUGx1Z2luLCBjdXN0b20/OiBTdGVwQ3VzdG9taXphdGlvbiwgZmFpbHVyZUJlaGF2aW9yPzogJ2ZhaWwnIHwgJ3dhcm4nIHwgJ2lnbm9yZScpOiB7IGluc3RhbGxDb21tYW5kczogc3RyaW5nW107IGNvbW1hbmRzOiBzdHJpbmdbXSB9IHtcbiAgY29uc3QgdXNlckNvbW1hbmRzID0gW1xuICAgIC4uLihjdXN0b20/LnByZUNvbW1hbmRzID8/IFtdKSxcbiAgICAuLi4ocGx1Z2luLmNvbW1hbmRzPy5sZW5ndGggPyBwbHVnaW4uY29tbWFuZHMgOiBbXSksXG4gICAgLi4uKGN1c3RvbT8ucG9zdENvbW1hbmRzID8/IFtdKSxcbiAgXTtcblxuICByZXR1cm4ge1xuICAgIGluc3RhbGxDb21tYW5kczogW1xuICAgICAgU1RFUF9CT09UU1RSQVBfQ01ELFxuICAgICAgLi4uKGN1c3RvbT8ucHJlSW5zdGFsbENvbW1hbmRzID8/IFtdKSxcbiAgICAgIC4uLihwbHVnaW4uaW5zdGFsbENvbW1hbmRzID8/IFtdKSxcbiAgICAgIC4uLihjdXN0b20/LnBvc3RJbnN0YWxsQ29tbWFuZHMgPz8gW10pLFxuICAgIF0sXG4gICAgY29tbWFuZHM6IFtTVEVQX0JPT1RTVFJBUF9DTUQsIC4uLndyYXBDb21tYW5kc0ZvckZhaWx1cmVCZWhhdmlvcih1c2VyQ29tbWFuZHMsIGZhaWx1cmVCZWhhdmlvcildLFxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBwbGFpbiBlbnYgcmVjb3JkIHRvIENvZGVCdWlsZCdzIGVudmlyb25tZW50VmFyaWFibGVzIGZvcm1hdCAoUExBSU5URVhUKS5cbiAqL1xuZnVuY3Rpb24gdG9Db2RlQnVpbGRFbnZWYXJzKGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHN0cmluZyB9PiB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZW52KS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IFtuYW1lLCB7IHZhbHVlIH1dKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBTRUNSRVRTX01BTkFHRVItdHlwZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBwbHVnaW4gc2VjcmV0IGRlY2xhcmF0aW9ucy5cbiAqIFVzZXMgbmFtaW5nIGNvbnZlbnRpb246IHBpcGVsaW5lLWJ1aWxkZXIve29yZ0lkfS97c2VjcmV0TmFtZX1cbiAqIEVhY2ggb3JnIG1hbmFnZXMgdGhlc2Ugc2VjcmV0cyBpbiB0aGVpciBvd24gQVdTIFNlY3JldHMgTWFuYWdlci5cbiAqL1xuY29uc3QgVkFMSURfU0VDUkVUX05BTUUgPSAvXlthLXpBLVowLTkvXys9LkAtXSskLztcblxuLyoqXG4gKiBTZWNyZXRzIE1hbmFnZXIgbGVhZiBob2xkaW5nIHRoZSBvcmcncyBSRUdJU1RSWSBjcmVkZW50aWFsIOKAlCB0aGVcbiAqIGByZWdpc3RyeTpwdXNoYC1zY29wZWQgc2VydmljZS1hY2NvdW50IGtleSBDb2RlQnVpbGQgcHJlc2VudHMgYXMgQmFzaWMgYXV0aCB0b1xuICogcGlwZWxpbmUtaW1hZ2UtcmVnaXN0cnkuIERlbGliZXJhdGVseSBOT1QgYHBsYXRmb3JtYDogdGhhdCBzZWNyZXQgaG9sZHNcbiAqIHRoZSBvcmcncyBmdWxsLXByaXZpbGVnZSBhdXRvbWF0aW9uIGNyZWRlbnRpYWwsIGFuZCBhIGJ1aWxkIGNvbnRhaW5lciBoYXMgbm9cbiAqIGJ1c2luZXNzIGJlaW5nIGFibGUgdG8gY2FsbCB0aGUgQVBJIHdpdGggaXQuXG4gKiBQcm92aXNpb25lZCBieSBgcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbiAtLXNjb3BlIHJlZ2lzdHJ5OnB1c2hgLlxuICovXG5jb25zdCBSRUdJU1RSWV9DUkVERU5USUFMX1NFQ1JFVCA9ICdyZWdpc3RyeS1wdXNoJztcblxuZnVuY3Rpb24gdG9TZWNyZXRFbnZWYXJzKFxuICBzZWNyZXRzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgcmVxdWlyZWQ6IGJvb2xlYW4gfT4sXG4gIG9yZ0lkOiBzdHJpbmcsXG4pOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiBzdHJpbmc7IHR5cGU6IEJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZVR5cGUgfT4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIHNlY3JldHMubWFwKCh7IG5hbWUgfSkgPT4ge1xuICAgICAgY29uc3Qgc2VjcmV0UGF0aCA9IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aChvcmdJZCwgbmFtZSk7XG4gICAgICBpZiAoIVZBTElEX1NFQ1JFVF9OQU1FLnRlc3Qoc2VjcmV0UGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZWNyZXQgcGF0aCBcIiR7c2VjcmV0UGF0aH1cIiBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgZm9yIEFXUyBTZWNyZXRzIE1hbmFnZXJgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogc2VjcmV0UGF0aCxcbiAgICAgICAgICB0eXBlOiBCdWlsZEVudmlyb25tZW50VmFyaWFibGVUeXBlLlNFQ1JFVFNfTUFOQUdFUixcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSksXG4gICk7XG59XG5cbi8qKlxuICogSW4tY2x1c3RlciAvIGxvY2FsIHJlZ2lzdHJ5IGhvc3RuYW1lcyB0aGF0IEFXUyBDb2RlQnVpbGQgKG91dC1vZi1jbHVzdGVyKVxuICogY2Fubm90IHJlc29sdmUuIEJha2luZyBvbmUgb2YgdGhlc2UgaW50byBhIENvZGVCdWlsZCBpbWFnZSBVUkkgZ3VhcmFudGVlcyBhXG4gKiBgQlVJTERfQ09OVEFJTkVSX1VOQUJMRV9UT19QVUxMX0lNQUdFYCBmYWlsdXJlIGF0IGJ1aWxkIHRpbWUsIHNvIHdlIGZhaWwgdGhlXG4gKiBzeW50aCBmYXN0IGluc3RlYWQg4oCUIHdpdGggYSBtZXNzYWdlIHRoYXQgc2F5cyBob3cgdG8gZml4IGl0LlxuICovXG5jb25zdCBVTlJFQUNIQUJMRV9QVUxMX0hPU1RTID0gbmV3IFNldChbJ3JlZ2lzdHJ5JywgJ2xvY2FsaG9zdCcsICcxMjcuMC4wLjEnLCAnOjoxJywgJzAuMC4wLjAnXSk7XG5cbi8qKiBLdWJlcm5ldGVzIC8gbUROUyBzdWZmaXhlcyB0aGF0IG9ubHkgcmVzb2x2ZSBpbnNpZGUgdGhlIGNsdXN0ZXIvTEFOLiAqL1xuY29uc3QgVU5SRUFDSEFCTEVfSE9TVF9TVUZGSVhFUyA9IFsnLnN2YycsICcuc3ZjLmNsdXN0ZXIubG9jYWwnLCAnLmxvY2FsJ107XG5cbi8qKlxuICogUmVkdWNlIGEgcmVnaXN0cnkgaG9zdCB2YWx1ZSB0byBpdHMgYmFyZSBob3N0bmFtZSBmb3IgdGhlIHJlYWNoYWJpbGl0eSBjaGVjazpcbiAqIHN0cmlwIElQdjYgYnJhY2tldHMgYW5kIGFueSBgOnBvcnRgIHN1ZmZpeCAoYW4gb3BlcmF0b3IgbWF5IHB1dCBob3N0K3BvcnQgaW5cbiAqIG9uZSBmaWVsZCksIHNvIGByZWdpc3RyeTo1MDAwYCAvIGBbOjoxXTo1MDAwYCBhcmUgc3RpbGwgcmVjb2duaXplZC5cbiAqL1xuZnVuY3Rpb24gYmFyZUhvc3RuYW1lKHJhd0hvc3Q6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBoID0gcmF3SG9zdC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGguc3RhcnRzV2l0aCgnWycpKSB7XG4gICAgY29uc3QgZW5kID0gaC5pbmRleE9mKCddJyk7XG4gICAgaWYgKGVuZCAhPT0gLTEpIHJldHVybiBoLnNsaWNlKDEsIGVuZCk7IC8vIFs6OjFdOjUwMDAgLT4gOjoxXG4gIH1cbiAgLy8gU3RyaXAgYSB0cmFpbGluZyA6cG9ydCBvbmx5IGZvciBub24tSVB2NiB2YWx1ZXMgKElQdjYgY29udGFpbnMgJzo6JyBvciA+MSAnOicpLlxuICBpZiAoaC5pbmNsdWRlcygnOicpICYmIChoLm1hdGNoKC86L2cpPy5sZW5ndGggPz8gMCkgPT09IDEpIGggPSBoLnNwbGl0KCc6JylbMF07XG4gIHJldHVybiBoO1xufVxuXG4vKiogVHJ1ZSB3aGVuIENvZGVCdWlsZCAob3V0LW9mLWNsdXN0ZXIpIGNvdWxkIG5vdCByZXNvbHZlIHRoaXMgcmVnaXN0cnkgaG9zdC4gKi9cbmZ1bmN0aW9uIGlzVW5yZWFjaGFibGVQdWxsSG9zdChyYXdIb3N0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgaCA9IGJhcmVIb3N0bmFtZShyYXdIb3N0KTtcbiAgaWYgKGggPT09ICcnKSByZXR1cm4gdHJ1ZTsgLy8gbm8gaG9zdCDihpIgbWFsZm9ybWVkIFVSSVxuICBpZiAoVU5SRUFDSEFCTEVfUFVMTF9IT1NUUy5oYXMoaCkpIHJldHVybiB0cnVlO1xuICByZXR1cm4gVU5SRUFDSEFCTEVfSE9TVF9TVUZGSVhFUy5zb21lKChzKSA9PiBoLmVuZHNXaXRoKHMpKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBleHRlcm5hbCAob3V0LW9mLWNsdXN0ZXIpIHJlZ2lzdHJ5IHB1bGwgaG9zdCArIGA6cG9ydGAgc3VmZml4IGZvclxuICogYSBDb2RlQnVpbGQgaW1hZ2UgVVJJLCBhbmQgZmFpbCBmYXN0IGlmIGl0IHJlc29sdmVkIHRvIGFuIGluLWNsdXN0ZXIvbG9jYWxcbiAqIGRlZmF1bHQgdGhhdCBDb2RlQnVpbGQgY2FuJ3QgcmVhY2guXG4gKlxuICogUHJlZmVycyBgcHVsbEhvc3RgL2BwdWxsUG9ydGAgKHRoZSBwdWJsaWMgZW5kcG9pbnQgQ29kZUJ1aWxkIGNhbiByZXNvbHZlKSBhbmRcbiAqIGZhbGxzIGJhY2sgdG8gYGhvc3RgL2Bwb3J0YCBmb3Igc2luZ2xlLWhvc3QgZGVwbG95cy4gcGlwZWxpbmUtbWFuYWdlciBiYWtlc1xuICogdGhlIHJpZ2h0IHB1bGwgaG9zdCBpbnRvIHRoZSBzeW50aCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlIHBsYXRmb3JtIFVSTCBpdFxuICogZGVwbG95cyBhZ2FpbnN0IChgcHJvcHMucmVnaXN0cnlgKTsgdGhpcyBndWFyZCBjYXRjaGVzIHRoZSBjYXNlIHdoZXJlIG5laXRoZXJcbiAqIHRoYXQgbm9yIGBJTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1RgL2BQTEFURk9STV9CQVNFX1VSTGAgd2FzIHN1cHBsaWVkLlxuICpcbiAqIEVzY2FwZSBoYXRjaDogYEFMTE9XX0lOQ0xVU1RFUl9QVUxMX0hPU1Q9dHJ1ZWAgKGUuZy4gQ29kZUJ1aWxkIGluIGEgVlBDIHdob3NlXG4gKiBwcml2YXRlIEROUyBnZW51aW5lbHkgcmVzb2x2ZXMgdGhlIGluLWNsdXN0ZXIgbmFtZSkuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVFeHRlcm5hbFB1bGxUYXJnZXQoXG4gIHJlZ2lzdHJ5OiB7IGhvc3Q/OiBzdHJpbmc7IHBvcnQ/OiBudW1iZXI7IHB1bGxIb3N0Pzogc3RyaW5nOyBwdWxsUG9ydD86IG51bWJlciB9LFxuKTogeyBob3N0OiBzdHJpbmc7IHBvcnRQYXJ0OiBzdHJpbmcgfSB7XG4gIGNvbnN0IGhvc3QgPSByZWdpc3RyeS5wdWxsSG9zdCB8fCByZWdpc3RyeS5ob3N0IHx8ICcnO1xuICBjb25zdCBwb3J0ID0gcmVnaXN0cnkucHVsbFBvcnQgPz8gcmVnaXN0cnkucG9ydDtcbiAgaWYgKHByb2Nlc3MuZW52LkFMTE9XX0lOQ0xVU1RFUl9QVUxMX0hPU1QgIT09ICd0cnVlJyAmJiBpc1VucmVhY2hhYmxlUHVsbEhvc3QoaG9zdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgUmVnaXN0cnkgcHVsbCBob3N0IHJlc29sdmVkIHRvICcke2hvc3R9Jywgd2hpY2ggQVdTIENvZGVCdWlsZCBjYW5ub3QgcmVhY2gg4oCUIGl0IGlzIHRoZSBgICtcbiAgICAgICdpbi1jbHVzdGVyL2xvY2FsIGRlZmF1bHQuIFRoZSBzeW50aGVzaXplZCBwaXBlbGluZSB3b3VsZCBmYWlsIGF0IGJ1aWxkIHRpbWUgd2l0aCAnICtcbiAgICAgICdCVUlMRF9DT05UQUlORVJfVU5BQkxFX1RPX1BVTExfSU1BR0UuIFNldCB0aGUgcGxhdGZvcm1cXCdzIHB1YmxpYyBob3N0IHZpYSAnICtcbiAgICAgICdJTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1Qgb3IgUExBVEZPUk1fQkFTRV9VUkwgYmVmb3JlIGRlcGxveWluZyDigJQgcGlwZWxpbmUtbWFuYWdlciBiYWtlcyAnICtcbiAgICAgICd0aGlzIGluIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgcGxhdGZvcm0gVVJMIGl0IGRlcGxveXMgYWdhaW5zdC4gJyArXG4gICAgICAnU2V0IEFMTE9XX0lOQ0xVU1RFUl9QVUxMX0hPU1Q9dHJ1ZSB0byBieXBhc3MgKGluLVZQQyBwcml2YXRlIEROUykuJyxcbiAgICApO1xuICB9XG4gIGNvbnN0IHBvcnRQYXJ0ID0gcG9ydCAmJiBwb3J0ICE9PSA4MCAmJiBwb3J0ICE9PSA0NDMgPyBgOiR7cG9ydH1gIDogJyc7XG4gIHJldHVybiB7IGhvc3QsIHBvcnRQYXJ0IH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgQ29kZUJ1aWxkIGltYWdlIHRvIHVzZSBmb3IgYSBwbHVnaW4uXG4gKlxuICogU3RyYXRlZ3k6XG4gKiAgIDEuIElmIHRoZSBwbHVnaW4gc2V0cyBgYXdzOmNkazpjb2RlYnVpbGQ6YnVpbGRlbnZpcm9ubWVudDpidWlsZEltYWdlYFxuICogICAgICBleHBsaWNpdGx5IGluIG1ldGFkYXRhLCB0aGUgbWV0YWRhdGEtYnVpbGRlciBwYXNzdGhyb3VnaCBoYW5kbGVzIGl0XG4gKiAgICAgICh2aWEgYG1ldGFkYXRhRm9yQnVpbGRFbnZpcm9ubWVudGApLiBUaGlzIGZ1bmN0aW9uIHJldHVybnNcbiAqICAgICAgYHVuZGVmaW5lZGAgYW5kIHRoZSBtZXRhZGF0YSB3aW5zLlxuICogICAyLiBPdGhlcndpc2UsIGlmIHRoZSBwbHVnaW4gaGFzIGEgYG5hbWVgK2B2ZXJzaW9uYCBBTkQgdGhlIHJlZ2lzdHJ5XG4gKiAgICAgIGNvbmZpZyBpcyBwb3B1bGF0ZWQsIGJ1aWxkIGEgYExpbnV4QnVpbGRJbWFnZS5mcm9tRG9ja2VyUmVnaXN0cnkoKWBcbiAqICAgICAgaW1hZ2UgcG9pbnRpbmcgYXQgYDxyZWdpc3RyeS1ob3N0Pjo8cG9ydD4vPG5zPi88bmFtZT5APGltYWdlRGlnZXN0PmBcbiAqICAgICAgd2hlcmUgYDxucz5gIGlzIGBzeXN0ZW1gIG9yIGBvcmctPG9yZ0lkPmAuIFBpbm5lZCBCWSBESUdFU1Qg4oCUIHRoZSBvbmVcbiAqICAgICAgdGhlIHBsdWdpbiBzZXJ2aWNlIHZlcmlmaWVkIGFnYWluc3QgaXRzIHNpZ25pbmcga2V5IGJlZm9yZSByZXR1cm5pbmdcbiAqICAgICAgdGhpcyByZWNvcmQg4oCUIG5ldmVyIGJ5IHRoZSBtdXRhYmxlIGA6PHZlcnNpb24+YCB0YWcsIHdoaWNoIGFueW9uZVxuICogICAgICBob2xkaW5nIHRoZSBvcmcncyByZWdpc3RyeSBwdXNoIGNyZWRlbnRpYWwgY291bGQgcmUtcG9pbnQuIEEgcGx1Z2luXG4gKiAgICAgIHRoYXQgbmVlZHMgYW4gaW1hZ2UgYnV0IGNhcnJpZXMgbm8gZGlnZXN0IGlzIHJlZnVzZWQgKHRocm93cyk6IHJ1bm5pbmdcbiAqICAgICAgYW4gdW52ZXJpZmllZCBpbWFnZSBpcyB3b3JzZSB0aGFuIGEgZmFpbGVkIHN5bnRoLiBDb2RlQnVpbGQgYXV0aGVudGljYXRlcyBieVxuICogICAgICBzZW5kaW5nIHRoZSBwZXItb3JnIHBsYXRmb3JtIFNlY3JldCBhcyBCYXNpYyBhdXRoIHRvXG4gKiAgICAgIGBwaXBlbGluZS1pbWFnZS1yZWdpc3RyeWAncyBgL3Rva2VuYCBlbmRwb2ludDsgdGhlIEpXVCBpbiBgcGFzc3dvcmRgXG4gKiAgICAgIHJlc29sdmVzIHRvIGEgcmVnaXN0cnkgdG9rZW4gc2NvcGVkIHRvIHRoZSBvcmcuXG4gKiAgIDMuIElmIGBtZXRhZGF0YV9vbmx5YCwgcmV0dXJuIGB1bmRlZmluZWRgIHNvIHRoZSBzdGVwIHJ1bnMgb24gdGhlXG4gKiAgICAgIHBpcGVsaW5lJ3MgZGVmYXVsdCBpbWFnZSAoYGNvZGVCdWlsZERlZmF1bHRzYDogdGhlIHRvb2xjaGFpbiByZWxlYXNlJ3NcbiAqICAgICAgYHN5c3RlbS9waXBlbGluZS1ib290c3RyYXBAPGRpZ2VzdD5gLCBzZWUge0BsaW5rIHJlc29sdmVEZWZhdWx0QnVpbGRJbWFnZX0pLlxuICpcbiAqIGBzY29wZWAgYW5kIGBvcmdJZGAgYXJlIHJlcXVpcmVkOiB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBTZWNyZXQgaXMgbmFtZWRcbiAqIGBwaXBlbGluZS1idWlsZGVyLzxvcmdJZD4vcGxhdGZvcm1gLCBhbmQgYFNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKClgXG4gKiBuZWVkcyBhIENvbnN0cnVjdCB0byBhbmNob3IgdGhlIGltcG9ydGVkIHNlY3JldCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQbHVnaW5JbWFnZShzY29wZTogQ29uc3RydWN0IHwgdW5kZWZpbmVkLCBwbHVnaW46IFBsdWdpbiwgb3JnSWQ/OiBzdHJpbmcpOiBJQnVpbGRJbWFnZSB8IHVuZGVmaW5lZCB7XG4gIC8vIGBtZXRhZGF0YV9vbmx5YCBwbHVnaW5zIGxlZ2l0aW1hdGVseSBoYXZlIG5vIGltYWdlIOKAlCB0aGVpciB3b3JrIHJ1bnNcbiAgLy8gaW4gdGhlIGRlZmF1bHQgQ29kZUJ1aWxkIGltYWdlLiBRdWlldCBza2lwLlxuICBpZiAocGx1Z2luLmJ1aWxkVHlwZSA9PT0gJ21ldGFkYXRhX29ubHknKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIC8vIGJ1aWxkX2ltYWdlIC8gcHJlYnVpbHQgcGx1Z2lucyBtdXN0IGhhdmUgbmFtZSArIHZlcnNpb24gKERCIGNvbnN0cmFpbnRcbiAgLy8gbWFrZXMgYm90aCBOT1QgTlVMTCkuIERlZmVuc2l2ZSBjaGVjayBpbiBjYXNlIGEgbWFsZm9ybWVkIHJvdyBzbGlwcyBpbi5cbiAgaWYgKCFwbHVnaW4ubmFtZSB8fCAhcGx1Z2luLnZlcnNpb24pIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBQbHVnaW4gXCIke3BsdWdpbi5uYW1lfVwiIGhhcyBidWlsZFR5cGU9JHtwbHVnaW4uYnVpbGRUeXBlfSBidXQgbWlzc2luZyBuYW1lL3ZlcnNpb24g4oCUIGAgK1xuICAgICAgJ0NvZGVCdWlsZCB3aWxsIHJ1biBvbiB0aGUgZGVmYXVsdCBidWlsZCBpbWFnZSBhbmQgd29uXFwndCBoYXZlIHRoZSBwbHVnaW5cXCdzIGJha2VkIHRvb2xzLicsXG4gICAgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gTm8gZGlnZXN0IOKHkiB0aGUgcGx1Z2luIHNlcnZpY2UgbmV2ZXIgc2lnbmVkIGFuIGltYWdlIGZvciB0aGlzIHJvdyAob3IgdGhlXG4gIC8vIHJlY29yZCBkaWRuJ3QgY29tZSBmcm9tIGAvcGx1Z2lucy9sb29rdXBgKS4gRmFpbCB0aGUgc3ludGggcmF0aGVyIHRoYW4gZmFsbFxuICAvLyBiYWNrIHRvIHRoZSB0YWcuXG4gIGlmICghcGx1Z2luLmltYWdlRGlnZXN0IHx8ICEvXnNoYTI1NjpbMC05YS1mXXs2NH0kLy50ZXN0KHBsdWdpbi5pbWFnZURpZ2VzdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX06JHtwbHVnaW4udmVyc2lvbn1cIiBoYXMgYnVpbGRUeXBlPSR7cGx1Z2luLmJ1aWxkVHlwZX0gYnV0IG5vIHNpZ25lZCBpbWFnZSBkaWdlc3QuIGAgK1xuICAgICAgJ1JlYnVpbGQgdGhlIHBsdWdpbiAocmUtdXBsb2FkIGl0KSBzbyB0aGUgcGxhdGZvcm0gY2FuIGJ1aWxkLCBzaWduIGFuZCByZWNvcmQgaXRzIGltYWdlLicsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSByZXBvc2l0b3J5IGNvbWVzIGZyb20gbG9va3VwOiBgcHVibGljLzxwdWJsaXNoZXI+LzxuYW1lPmAgZm9yIGFcbiAgLy8gbGlzdGVkIHBsdWdpbiAodGhlIHJlYWQtb25seSBjb3B5IGV2ZXJ5IG9yZyBtYXkgcHVsbCksIGBvcmctPGlkPi88bmFtZT5gXG4gIC8vIGZvciB0aGUgb3JnJ3Mgb3duLiBOZXZlciBkZXJpdmVkIGhlcmUgZnJvbSB0aGUgcmVjb3JkJ3Mgb3duZXIg4oCUIGEgbGlzdGluZydzXG4gIC8vIGltYWdlIGRvZXNuJ3QgbGl2ZSBpbiBpdHMgcHVibGlzaGVyJ3MgbmFtZXNwYWNlLlxuICBjb25zdCByZXBvc2l0b3J5ID0gKHBsdWdpbiBhcyBQbHVnaW4gJiB7IGltYWdlUmVwb3NpdG9yeT86IHN0cmluZyB8IG51bGwgfSkuaW1hZ2VSZXBvc2l0b3J5O1xuICBpZiAoIXJlcG9zaXRvcnkgfHwgIVBMVUdJTl9JTUFHRV9SRVBPU0lUT1JZX1JFLnRlc3QocmVwb3NpdG9yeSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX06JHtwbHVnaW4udmVyc2lvbn1cIiBoYXMgbm8gaW1hZ2UgcmVwb3NpdG9yeSBmcm9tIHRoZSBwbHVnaW4gbG9va3VwLiBgICtcbiAgICAgICdSZXNvbHZlIHBsdWdpbnMgdGhyb3VnaCB0aGUgcGxhdGZvcm0gKGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoYCAvIHRoZSBsb29rdXAgY3VzdG9tIHJlc291cmNlKS4nLFxuICAgICk7XG4gIH1cblxuICBsZXQgcmVnaXN0cnk7XG4gIHRyeSB7XG4gICAgcmVnaXN0cnkgPSBDb25maWcuZ2V0KCdyZWdpc3RyeScpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBDb25maWcgbmFtZXNwYWNlIG5vdCBsb2FkZWQgKGUuZy4sIHVuaXQgdGVzdHMgd2l0aG91dCBmdWxsIGNvbmZpZykuXG4gICAgbG9nLndhcm4oXG4gICAgICBgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX06JHtwbHVnaW4udmVyc2lvbn1cIiBuZWVkcyB0aGUgcmVnaXN0cnkgY29uZmlnIGJ1dCBpdCdzIG5vdCBsb2FkZWQg4oCUIGAgK1xuICAgICAgJ0NvZGVCdWlsZCB3aWxsIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBidWlsZCBpbWFnZS4gJyArXG4gICAgICAnU2V0IElNQUdFX1JFR0lTVFJZX0hPU1QgKyBJTUFHRV9SRUdJU1RSWV9QT1JUIGluIHBpcGVsaW5lLW1hbmFnZXJcXCdzIGVudmlyb25tZW50LicsXG4gICAgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFyZWdpc3RyeT8uaG9zdCkge1xuICAgIGxvZy53YXJuKFxuICAgICAgYFBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9OiR7cGx1Z2luLnZlcnNpb259XCIgbmVlZHMgSU1BR0VfUkVHSVNUUllfSE9TVCBidXQgaXQncyBlbXB0eSDigJQgYCArXG4gICAgICAnQ29kZUJ1aWxkIHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGJ1aWxkIGltYWdlLiAnICtcbiAgICAgICdTZXQgSU1BR0VfUkVHSVNUUllfSE9TVCBpbiBwaXBlbGluZS1tYW5hZ2VyXFwncyBlbnZpcm9ubWVudCB0byB1c2UgdGhlIHBsdWdpbiBpbWFnZS4nLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNjb3BlKSB7XG4gICAgbG9nLndhcm4oYFBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9XCIgaW1hZ2UgcmVzb2x1dGlvbiBza2lwcGVkOiBubyBjb25zdHJ1Y3Qgc2NvcGUgcHJvdmlkZWRgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gUGVyLW9yZyBhdXRoIHJlcXVpcmVzIG9yZ0lkIOKAlCB0aGUgU2VjcmV0IGlzIG5hbWVkIHBlciBvcmcuXG4gIGlmICghb3JnSWQpIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBQbHVnaW4gXCIke3BsdWdpbi5uYW1lfVwiIGltYWdlIHJlc29sdXRpb24gc2tpcHBlZDogb3JnSWQgaXMgcmVxdWlyZWQgdG8gYCArXG4gICAgICAncmVzb2x2ZSB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBTZWNyZXQgdXNlZCBmb3IgQ29kZUJ1aWxkIEJhc2ljIGF1dGguJyxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBDb21wb3NlIHRoZSBpbWFnZSBVUkkgZnJvbSB0aGUgbG9va3VwJ3MgcmVwb3NpdG9yeSwgcGlubmVkIGJ5IGRpZ2VzdC5cbiAgLy8gVGhlIHRva2VuIHNlcnZpY2UgZ3JhbnRzIHB1bGwgb24gYHB1YmxpYy8qYCB0byBldmVyeSBhdXRoZW50aWNhdGVkXG4gIC8vIGlkZW50aXR5IGFuZCBvbiBgb3JnLTxpZD4vKmAgdG8gdGhhdCBvcmcgKGFuZCBpdHMgdGVhbXMpLlxuICAvLyBVc2UgdGhlIGV4dGVybmFsIHB1bGwgaG9zdC9wb3J0OiB0aGlzIGltYWdlIFVSSSBpcyBjb25zdW1lZCBieSBBV1NcbiAgLy8gQ29kZUJ1aWxkIChvdXQtb2YtY2x1c3RlciksIHdoaWNoIGNhbid0IHJlc29sdmUgdGhlIGluLWNsdXN0ZXJcbiAgLy8gYHJlZ2lzdHJ5OjUwMDBgIENsdXN0ZXJJUC4gRmFsbCBiYWNrIHRvIGBob3N0YC9gcG9ydGAgZm9yIHNpbmdsZS1ob3N0IC9cbiAgLy8gaW4tY2x1c3Rlci1vbmx5IGRlcGxveXMgd2hlcmUgbm8gc2VwYXJhdGUgcHVsbCBob3N0IGlzIGNvbmZpZ3VyZWQuXG4gIGNvbnN0IHsgaG9zdDogcHVsbEhvc3QsIHBvcnRQYXJ0IH0gPSByZXNvbHZlRXh0ZXJuYWxQdWxsVGFyZ2V0KHJlZ2lzdHJ5KTtcbiAgY29uc3QgaW1hZ2VVcmkgPSBgJHtwdWxsSG9zdH0ke3BvcnRQYXJ0fS8ke3JlcG9zaXRvcnl9QCR7cGx1Z2luLmltYWdlRGlnZXN0fWA7XG5cbiAgLy8gQ29kZUJ1aWxkIHJlYWRzIGBwaXBlbGluZS1idWlsZGVyLzxvcmdJZD4vcmVnaXN0cnktcHVzaGAgYW5kIHNlbmRzIGl0c1xuICAvLyBgdXNlcm5hbWVgL2BwYXNzd29yZGAgZmllbGRzIGFzIEhUVFAgQmFzaWMgdG8gdGhlIHJlZ2lzdHJ5LiBUaGUgcmVnaXN0cnlcbiAgLy8gY2hhbGxlbmdlcyB3aXRoIGEgQmVhcmVyIHJlYWxtIHBvaW50aW5nIGF0IHBpcGVsaW5lLWltYWdlLXJlZ2lzdHJ5J3NcbiAgLy8gYC90b2tlbmAgZW5kcG9pbnQ7IHRoZSBEb2NrZXIgY2xpZW50IGZvcndhcmRzIHRob3NlIGNyZWRzLCBpbWFnZS1yZWdpc3RyeVxuICAvLyBleGNoYW5nZXMgdGhlIG9wYXF1ZSBgcGJfc2Ff4oCmYCBrZXkgZm9yIGEgc2hvcnQtbGl2ZWQgdG9rZW4sIGFuZCBhIHJlZ2lzdHJ5XG4gIC8vIHRva2VuIHNjb3BlZCB0byB0aGUgb3JnIGlzIGlzc3VlZC5cbiAgLy9cbiAgLy8gVGhpcyBpcyB0aGUgUkVHSVNUUlktT05MWSBjcmVkZW50aWFsLCBub3QgdGhlIG9yZydzIGZ1bGwtcHJpdmlsZWdlXG4gIC8vIHBsYXRmb3JtIG9uZTogaXRzIGV4Y2hhbmdlZCB0b2tlbiBjYXJyaWVzIHRoZSBzaW5nbGUgYHJlZ2lzdHJ5OnB1c2hgIHNjb3BlXG4gIC8vIGFuZCBubyBBUEkgcGVybWlzc2lvbnMgYXQgYWxsLCBzbyBhIENvZGVCdWlsZCBqb2IgdGhhdCBsZWFrcyBpdCBjYW4gbW92ZVxuICAvLyBpbWFnZXMgaW5zaWRlIHRoaXMgb3JnJ3MgbmFtZXNwYWNlIGFuZCBub3RoaW5nIGVsc2UuIFRoZSBwbHVnaW4tbG9va3VwXG4gIC8vIExhbWJkYSBrZWVwcyByZWFkaW5nIGAuLi4vcGxhdGZvcm1gIOKAlCBpdCBjYWxscyB0aGUgb3JkaW5hcnkgQVBJLCB3aGljaCBub1xuICAvLyBzaW5nbGUgc2NvcGUgY292ZXJzLlxuICAvLyBQcm92aXNpb24gaXQgd2l0aDogcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbiAtLXNjb3BlIHJlZ2lzdHJ5OnB1c2hcbiAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gIGNvbnN0IHNlY3JldE5hbWUgPSBDb3JlQ29uc3RhbnRzLnNlY3JldFBhdGgob3JnSWQsIFJFR0lTVFJZX0NSRURFTlRJQUxfU0VDUkVUKTtcbiAgLy8gQ0RLIGNvbnN0cnVjdCBJRHMgYWxsb3cgb25seSBbQS1aYS16MC05Xy1dOyBzYW5pdGl6ZSB0aGUgc2VjcmV0IG5hbWUuXG4gIGNvbnN0IHNlY3JldENvbnN0cnVjdElkID0gYFJlZ2lzdHJ5Q3JlZHNfJHtzZWNyZXROYW1lLnJlcGxhY2UoL1teQS1aYS16MC05Xy1dL2csICdfJyl9YDtcbiAgY29uc3QgY3JlZGVudGlhbHNTZWNyZXQgPSAoc3RhY2subm9kZS50cnlGaW5kQ2hpbGQoc2VjcmV0Q29uc3RydWN0SWQpIGFzIFNlY3JldCB8IHVuZGVmaW5lZClcbiAgICA/PyBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMihzdGFjaywgc2VjcmV0Q29uc3RydWN0SWQsIHNlY3JldE5hbWUpO1xuXG4gIHJldHVybiBMaW51eEJ1aWxkSW1hZ2UuZnJvbURvY2tlclJlZ2lzdHJ5KGltYWdlVXJpLCB7XG4gICAgc2VjcmV0c01hbmFnZXJDcmVkZW50aWFsczogY3JlZGVudGlhbHNTZWNyZXQsXG4gIH0pO1xufVxuXG4vKiogVGhlIG1hbmFnZWQgdG9vbGNoYWluJ3MgYnVpbGQtaW1hZ2UgcGx1Z2luIG5hbWUgYW5kIGl0cyAoc3lzdGVtLW9yZykgaW1hZ2UgcmVwb3NpdG9yeS4gKi9cbmNvbnN0IEJPT1RTVFJBUF9QTFVHSU5fTkFNRSA9IE1BTkFHRURfVE9PTENIQUlOLmJvb3RzdHJhcDtcbmNvbnN0IEJPT1RTVFJBUF9JTUFHRV9SRVBPU0lUT1JZID0gYHN5c3RlbS8ke0JPT1RTVFJBUF9QTFVHSU5fTkFNRX1gO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IENvZGVCdWlsZCBpbWFnZSDigJQgZXZlcnkgYWN0aW9uIHdpdGhvdXQgYSBwbHVnaW4tYmFrZWQgaW1hZ2UgKHRoZVxuICogcGlwZWxpbmUtd2lkZSBgY29kZUJ1aWxkRGVmYXVsdHNgLCBhIHBsdWdpbi1sZXNzIHN0ZXAsIGFzc2V0IHB1Ymxpc2hpbmcpIOKAlFxuICogcGlubmVkIHRvIHRoZSByZXNvbHZlZCB0b29sY2hhaW4gcmVsZWFzZSdzIGBwaXBlbGluZS1ib290c3RyYXBgIGltYWdlLlxuICpcbiAqIEV4YWN0bHkgdGhlIHBhdGggYSBzeXN0ZW0gcGx1Z2luJ3MgaW1hZ2UgdGFrZXMgKHtAbGluayByZXNvbHZlUGx1Z2luSW1hZ2V9KTpcbiAqIGA8ZXh0ZXJuYWwgcHVsbCBob3N0Pi9zeXN0ZW0vcGlwZWxpbmUtYm9vdHN0cmFwQDxzaWduZWQgZGlnZXN0PmAgd2l0aCB0aGVcbiAqIG9yZydzIGByZWdpc3RyeS1wdXNoYCBzZWNyZXQgYXMgdGhlIHB1bGwgY3JlZGVudGlhbC4gVGhlcmUgaXMgbm8gZW52LWRyaXZlblxuICogaW1hZ2UsIG5vIHRhZyBwdWxsIGFuZCBubyBjdXJhdGVkIGZhbGxiYWNrOiB0aGUgYm9vdHN0cmFwIGlzIHJlc29sdmVkIGZyb21cbiAqIHRoZSBwbGF0Zm9ybSAoYHBpcGVsaW5lLW1hbmFnZXJgJ3MgYHJlc29sdmVCb290c3RyYXBJbWFnZWAsIEQyKSBhbmQgYW55dGhpbmdcbiAqIHNob3J0IG9mIGEgcGlubmVkLCBwdWxsYWJsZSBpbWFnZSBmYWlscyB0aGUgc3ludGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRGVmYXVsdEJ1aWxkSW1hZ2Uoc2NvcGU6IENvbnN0cnVjdCwgb3JnSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgYm9vdHN0cmFwOiBQbHVnaW4pOiBJQnVpbGRJbWFnZSB7XG4gIGNvbnN0IGZhaWwgPSAod2h5OiBzdHJpbmcpOiBuZXZlciA9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEJPT1RTVFJBUF9JTUFHRV9VTlJFU09MVkVEOiB0aGUgZGVmYXVsdCBidWlsZCBpbWFnZSBjYW4ndCBiZSBwaW5uZWQg4oCUICR7d2h5fS4gYCArXG4gICAgICAnU3ludGhlc2l6ZSB0aHJvdWdoIGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoL2RlcGxveWAgKG9yIHBhc3MgYC0tdG9vbGNoYWluLWZpbGVgIHdpdGggYC0tbG9jYWwtc3BlY2ApLicsXG4gICAgKTtcbiAgfTtcbiAgaWYgKCFib290c3RyYXAgfHwgYm9vdHN0cmFwLm5hbWUgIT09IEJPT1RTVFJBUF9QTFVHSU5fTkFNRSkge1xuICAgIGZhaWwoYHJlc29sdmVkQm9vdHN0cmFwIGlzIFwiJHtib290c3RyYXA/Lm5hbWUgPz8gJ21pc3NpbmcnfVwiLCBub3QgJHtCT09UU1RSQVBfUExVR0lOX05BTUV9YCk7XG4gIH1cbiAgY29uc3QgcmVwb3NpdG9yeSA9IChib290c3RyYXAgYXMgUGx1Z2luICYgeyBpbWFnZVJlcG9zaXRvcnk/OiBzdHJpbmcgfCBudWxsIH0pLmltYWdlUmVwb3NpdG9yeTtcbiAgaWYgKHJlcG9zaXRvcnkgIT09IEJPT1RTVFJBUF9JTUFHRV9SRVBPU0lUT1JZKSB7XG4gICAgZmFpbChgJHtCT09UU1RSQVBfUExVR0lOX05BTUV9OiR7Ym9vdHN0cmFwLnZlcnNpb259IGhhcyBpbWFnZSByZXBvc2l0b3J5IFwiJHtyZXBvc2l0b3J5ID8/ICdub25lJ31cIiwgbm90ICR7Qk9PVFNUUkFQX0lNQUdFX1JFUE9TSVRPUll9YCk7XG4gIH1cbiAgaWYgKCFvcmdJZCkgZmFpbCgndGhlIHBpcGVsaW5lIGhhcyBubyBvcmdJZCAodGhlIHJlZ2lzdHJ5IHB1bGwgY3JlZGVudGlhbCBpcyBwZXIgb3JnKScpO1xuICAvLyBUaHJvd3Mgb24gYSBtaXNzaW5nL21hbGZvcm1lZCBkaWdlc3QgYW5kIGFuIHVucmVhY2hhYmxlIHB1bGwgaG9zdC5cbiAgY29uc3QgaW1hZ2UgPSByZXNvbHZlUGx1Z2luSW1hZ2Uoc2NvcGUsIHsgLi4uYm9vdHN0cmFwLCBidWlsZFR5cGU6ICdwcmVidWlsdCcgfSwgb3JnSWQpO1xuICBpZiAoIWltYWdlKSBmYWlsKCd0aGUgcmVnaXN0cnkgY29uZmlnIGlzIG5vdCBsb2FkZWQgKElNQUdFX1JFR0lTVFJZX0hPU1QgLyB0aGUgcGxhdGZvcm0gVVJMKScpO1xuICByZXR1cm4gaW1hZ2UgYXMgSUJ1aWxkSW1hZ2U7XG59XG5cbi8qKlxuICogVGhlIEFXUyBjdXJhdGVkIGltYWdlIHNlbGYtbXV0YXRpb24gcnVucyBvbiAoRDEwKTogaXQgb25seSBuZWVkcyBOb2RlIGFuZCB0aGVcbiAqIHBpbm5lZCBDREsgQ0xJLCBhbmQgYSBjdXJhdGVkIGltYWdlIGtlZXBzIGEgZGVmZWN0aXZlIHRvb2xjaGFpbiByZWxlYXNlXG4gKiByZWNvdmVyYWJsZS4gQ3VyYXRlZCDih5IgYGZyb21Db2RlQnVpbGRJbWFnZUlkYCAoQ09ERUJVSUxEIHB1bGwgY3JlZGVudGlhbHMg4oCUXG4gKiBgZnJvbURvY2tlclJlZ2lzdHJ5YCB3b3VsZCBzZXQgU0VSVklDRV9ST0xFLCB3aGljaCBDRk4gcmVqZWN0cyBmb3IgYSBjdXJhdGVkIGltYWdlKS5cbiAqL1xuZXhwb3J0IGNvbnN0IGN1cmF0ZWRTZWxmTXV0YXRpb25JbWFnZSA9ICgpOiBJQnVpbGRJbWFnZSA9PiBMaW51eEJ1aWxkSW1hZ2UuZnJvbUNvZGVCdWlsZEltYWdlSWQoQ1VSQVRFRF9TRUxGX01VVEFUSU9OX0lNQUdFKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBDb2RlQnVpbGQgc3RlcCBvciBTaGVsbCBzdGVwIGJhc2VkIG9uIHBsdWdpbiBjb25maWd1cmF0aW9uLlxuICpcbiAqIE1ldGFkYXRhIG1lcmdlIG9yZGVyIChsYXN0IHdpbnMpOlxuICogICAxLiBQbHVnaW4gbWV0YWRhdGEgKGZyb20gcGx1Z2luLm1ldGFkYXRhIGluIGRhdGFiYXNlKSDigJQgdGhlIHBsdWdpblxuICogICAgICBhdXRob3IncyBiYWtlZC1pbiBkZWZhdWx0c1xuICogICAyLiBTdGVwLWxldmVsIG1ldGFkYXRhIChmcm9tIG9wdGlvbnMubWV0YWRhdGEpIOKAlCB0aGUgcGlwZWxpbmUgYXV0aG9yJ3NcbiAqICAgICAgcGVyLXN0ZXAgb3ZlcnJpZGVzLCB3aGljaCBhcmUgbW9yZSBzcGVjaWZpYyBhbmQgbXVzdCB3aW5cbiAqXG4gKiBFbnZpcm9ubWVudCBtZXJnZSBvcmRlciAobGFzdCB3aW5zKTpcbiAqICAgMS4gUGx1Z2luIGVudiB2YXJzIChmcm9tIHBsdWdpbi5lbnYpXG4gKiAgIDIuIEN1c3RvbSBlbnYgdmFycyAoZnJvbSBvcHRpb25zLmVudilcbiAqICAgMy4gV09SS0RJUiBmcm9tIG1lcmdlZCBtZXRhZGF0YVxuICpcbiAqIENESyBwcm9wIHNwcmVhZCBvcmRlciAobGFzdCB3aW5zKTpcbiAqICAgcHJvZ3JhbW1hdGljIGRlZmF1bHRzIChpbnB1dCwgY29tbWFuZHMsIGVudiwgbmV0d29yaykg4oaSIG1ldGFkYXRhIG92ZXJyaWRlc1xuICpcbiAqIFRoaXMgbWVhbnMgbWV0YWRhdGEga2V5cyBsaWtlIGBhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmNvbW1hbmRzYFxuICogd2lsbCBvdmVycmlkZSB0aGUgcGx1Z2luLWRlcml2ZWQgY29tbWFuZHMgd2hlbiBleHBsaWNpdGx5IHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvZGVCdWlsZFN0ZXAob3B0aW9uczogQ29kZUJ1aWxkU3RlcE9wdGlvbnMpOiBTaGVsbFN0ZXAgfCBDb2RlQnVpbGRTdGVwIHwgTWFudWFsQXBwcm92YWxTdGVwIHtcbiAgY29uc3Qge1xuICAgIGlkLCBpbnB1dCwgbWV0YWRhdGEsIG5ldHdvcmssIHNjb3BlLFxuICAgIHByZUluc3RhbGxDb21tYW5kcywgcG9zdEluc3RhbGxDb21tYW5kcywgcHJlQ29tbWFuZHMsIHBvc3RDb21tYW5kcyxcbiAgICBlbnY6IGN1c3RvbUVudiwgYWRkaXRpb25hbElucHV0cywgdGltZW91dCwgZmFpbHVyZUJlaGF2aW9yLFxuICAgIGFydGlmYWN0TWFuYWdlciwgc3RhZ2VOYW1lLCBzdGFnZUFsaWFzLCBwbHVnaW5BbGlhcywgb3JnSWQsIHBpcGVsaW5lU2NvcGUsXG4gIH0gPSBvcHRpb25zO1xuXG4gIC8vIFJlc29sdmUge3sgLi4uIH19IHRlbXBsYXRlcyBpbiBwbHVnaW4gc3BlYyBmaWVsZHMgYWdhaW5zdCB0aGUgcGlwZWxpbmUgc2NvcGUuXG4gIC8vIEV2ZXJ5IGNhbGwgZ29lcyB0aHJvdWdoIHRoZSByZXNvbHZlciDigJQgcGx1Z2lucyB3aXRob3V0IHRlbXBsYXRlIHRva2VucyBhcmVcbiAgLy8gYSBuby1vcCBmYXN0IHBhdGggaW5zaWRlIHJlc29sdmVQbHVnaW5UZW1wbGF0ZXMoKS5cbiAgY29uc3QgcGx1Z2luID0gcmVzb2x2ZVBsdWdpblRlbXBsYXRlcyhvcHRpb25zLnBsdWdpbiwgcGlwZWxpbmVTY29wZSk7XG5cbiAgLy8gUGVyLXN0ZXAgbWV0YWRhdGEgKHRoZSBwaXBlbGluZSBhdXRob3IncyBvdmVycmlkZXMsIGUuZy4gSkFWQV9WRVJTSU9OPTI1KVxuICAvLyBtdXN0IHdpbiBvdmVyIHRoZSBwbHVnaW4ncyBjYXRhbG9nIGBtZXRhZGF0YWAgZGVmYXVsdHMsIHNvIGl0IGdvZXMgTEFTVC5cbiAgLy8gUmV2ZXJzaW5nIHRoZXNlIHNpbGVudGx5IGRyb3BwZWQgcGVyLXN0ZXAgb3ZlcnJpZGVzIGZvciBhbnkgcGx1Z2luIHRoYXRcbiAgLy8gc2hpcHMgbm9uLWVtcHR5IGNhdGFsb2cgbWV0YWRhdGEgKHBsdWdpbnMgdGhhdCBjYXJyeSBkZWZhdWx0cyB1bmRlciBgZW52YFxuICAvLyBpbnN0ZWFkIOKAlCBsaWtlIGphdmEtY29ycmV0dG8g4oCUIHdlcmUgdW5hZmZlY3RlZCwgd2hpY2ggbWFza2VkIHRoaXMpLlxuICBjb25zdCBtZXJnZWQgPSBtZXJnZShwbHVnaW4ubWV0YWRhdGEgPz8ge30sIG1ldGFkYXRhID8/IHt9KTtcblxuICAvLyBNYW51YWxBcHByb3ZhbFN0ZXA6IG5vIGNvbW1hbmRzLCBlbnYsIGNvbXB1dGUsIG9yIG5ldHdvcmsg4oCUIGp1c3QgaWQgKyBvcHRpb25hbCBjb21tZW50XG4gIGlmIChwbHVnaW4ucGx1Z2luVHlwZSA9PT0gUGx1Z2luVHlwZS5NQU5VQUxfQVBQUk9WQUxfU1RFUCkge1xuICAgIHJldHVybiBuZXcgTWFudWFsQXBwcm92YWxTdGVwKGlkLCB7XG4gICAgICBjb21tZW50OiB0eXBlb2YgbWVyZ2VkLkFQUFJPVkFMX0NPTU1FTlQgPT09ICdzdHJpbmcnID8gbWVyZ2VkLkFQUFJPVkFMX0NPTU1FTlQgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH1cblxuICBsb2cuZGVidWcoJ1tDcmVhdGVDb2RlQnVpbGRTdGVwXSBCdWlsZGluZyBzdGVwIHdpdGggbWVyZ2VkIG1ldGFkYXRhJyk7XG5cbiAgLy8gV2FybiBhYm91dCByZXF1aXJlZCBzZWNyZXRzIHdpdGhvdXQgb3JnSWQgKGNhbid0IHJlc29sdmUpXG4gIGNvbnN0IHJlcXVpcmVkU2VjcmV0cyA9IHBsdWdpbi5zZWNyZXRzPy5maWx0ZXIocyA9PiBzLnJlcXVpcmVkKSA/PyBbXTtcbiAgaWYgKHJlcXVpcmVkU2VjcmV0cy5sZW5ndGggPiAwICYmICFvcmdJZCkge1xuICAgIGxvZy53YXJuKFxuICAgICAgYFBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9XCIgZGVjbGFyZXMgJHtyZXF1aXJlZFNlY3JldHMubGVuZ3RofSByZXF1aXJlZCBzZWNyZXQocykgYnV0IG5vIG9yZ0lkIGlzIGF2YWlsYWJsZS4gYCArXG4gICAgICBgU2VjcmV0cyB3aWxsIG5vdCBiZSBpbmplY3RlZDogJHtyZXF1aXJlZFNlY3JldHMubWFwKHMgPT4gcy5uYW1lKS5qb2luKCcsICcpfWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJlc29sdmUgcGx1Z2luIHNlY3JldHMgYXMgU0VDUkVUU19NQU5BR0VSIGVudiB2YXJzIOKAlCBvbmx5IFJFUVVJUkVEIG9uZXMuXG4gIC8vIENvZGVCdWlsZCB0cmVhdHMgYSBTRUNSRVRTX01BTkFHRVIgZW52IHZhciBhcyBNQU5EQVRPUlk6IGl0IGZhaWxzIHRoZSBidWlsZFxuICAvLyBhdCBET1dOTE9BRF9TT1VSQ0UgKFwiUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbjogY2FuJ3QgZmluZCB0aGUgc3BlY2lmaWVkXG4gIC8vIHNlY3JldFwiKSBpZiB0aGUgc2VjcmV0IGlzIGFic2VudC4gQXV0by13aXJpbmcgYW4gT1BUSU9OQUwgc2VjcmV0XG4gIC8vIChgcmVxdWlyZWQ6IGZhbHNlYCwgZS5nLiBOVkRfQVBJX0tFWSAvIFNFTUdSRVBfQVBQX1RPS0VOKSB0aGUgb3BlcmF0b3IgaGFzbid0XG4gIC8vIGNyZWF0ZWQgd291bGQgdGhlcmVmb3JlIGJyZWFrIGV2ZXJ5IGJ1aWxkIOKAlCB0aGUgZXhhY3Qgb3Bwb3NpdGUgb2YgXCJvcHRpb25hbFwiLlxuICAvLyBPcHRpb25hbCBzZWNyZXRzIGFyZSBsZWZ0IGZvciB0aGUgcGx1Z2luIHRvIHJlYWQgb25seSB3aGVyZSB0aGUgb3BlcmF0b3IgaGFzXG4gIC8vIHByb3Zpc2lvbmVkIHRoZW0gKG91dC1vZi1iYW5kIGVudi9zZWNyZXQpLCBub3QgZm9yY2UtaW5qZWN0ZWQgaGVyZS5cbiAgY29uc3Qgc2VjcmV0RW52VmFycyA9IChyZXF1aXJlZFNlY3JldHMubGVuZ3RoICYmIG9yZ0lkKVxuICAgID8gdG9TZWNyZXRFbnZWYXJzKHJlcXVpcmVkU2VjcmV0cywgb3JnSWQpXG4gICAgOiB7fTtcblxuICBjb25zdCBlbnYgPSBidWlsZEVudihwbHVnaW4sIG1lcmdlZCwgY3VzdG9tRW52KTtcblxuICAvLyBTZWN1cml0eS1yZXBvcnQgdXBsb2FkIChvcHQtaW4pOiBpbmplY3QgdGhlIG9yZydzIHJlcG9ydGluZzppbmdlc3Qtc2NvcGVkXG4gIC8vIGtleSDigJQgbmV2ZXIgdGhlIGZ1bGwgcGxhdGZvcm0gY3JlZGVudGlhbCDigJQgYXMgYSBTRUNSRVRTX01BTkFHRVIgdmFyaWFibGUuXG4gIC8vIENESyBncmFudHMgdGhlIHN0ZXAgcm9sZSByZWFkIG9uIGV4YWN0bHkgdGhhdCBzZWNyZXQuIFNlZSBjb3JlL3NlY3VyaXR5LXJlcG9ydHMudHMuXG4gIGNvbnN0IHJlcG9ydFVwbG9hZCA9IGVudltTRUNVUklUWV9SRVBPUlRfVVBMT0FEX0VOVl0gPT09ICd0cnVlJztcbiAgaWYgKHJlcG9ydFVwbG9hZCAmJiAhb3JnSWQpIHtcbiAgICBsb2cud2FybihgU3RlcCBcIiR7aWR9XCIgc2V0cyAke1NFQ1VSSVRZX1JFUE9SVF9VUExPQURfRU5WfT10cnVlIGJ1dCBubyBvcmdJZCBpcyBhdmFpbGFibGUg4oCUIHRoZSB1cGxvYWQga2V5IGNhbm5vdCBiZSBpbmplY3RlZCBhbmQgdGhlIHVwbG9hZCB3aWxsIGZhaWwuYCk7XG4gIH1cbiAgY29uc3QgcmVwb3J0S2V5RW52VmFyOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiBzdHJpbmc7IHR5cGU6IEJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZVR5cGUgfT4gPSByZXBvcnRVcGxvYWQgJiYgb3JnSWRcbiAgICA/IHtcbiAgICAgIFtTRUNVUklUWV9SRVBPUlRfS0VZX0VOVl06IHtcbiAgICAgICAgdmFsdWU6IGAke0NvcmVDb25zdGFudHMuc2VjcmV0UGF0aChvcmdJZCwgU0VDVVJJVFlfUkVQT1JUX1NFQ1JFVF9MRUFGKX06cGFzc3dvcmRgLFxuICAgICAgICB0eXBlOiBCdWlsZEVudmlyb25tZW50VmFyaWFibGVUeXBlLlNFQ1JFVFNfTUFOQUdFUixcbiAgICAgIH0sXG4gICAgfVxuICAgIDoge307XG5cbiAgLy8gQ29kZVBpcGVsaW5lIHJlc29sdmVkIHZhcmlhYmxlcyDigJQgbXVzdCBiZSBpbiBDb2RlQnVpbGRTdGVwLmVudiAoYWN0aW9uLWxldmVsKSxcbiAgLy8gbm90IGJ1aWxkRW52aXJvbm1lbnQuZW52aXJvbm1lbnRWYXJpYWJsZXMgKHByb2plY3QtbGV2ZWwpXG4gIGNvbnN0IGFjdGlvbkVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBQSVBFTElORV9FWEVDVVRJT05fSUQ6ICcje2NvZGVwaXBlbGluZS5QaXBlbGluZUV4ZWN1dGlvbklkfScsXG4gIH07XG5cbiAgY29uc3Qgb3V0cHV0RGlyID0gcGx1Z2luLnByaW1hcnlPdXRwdXREaXJlY3Rvcnk7XG4gIGNvbnN0IGVuc3VyZU91dHB1dERpciA9IChvdXRwdXREaXIgJiYgIW91dHB1dERpci5pbmNsdWRlcygnKicpKVxuICAgID8gW2Bta2RpciAtcCBcIiR7b3V0cHV0RGlyfVwiICYmIHRvdWNoIFwiJHtvdXRwdXREaXJ9Ly5naXRrZWVwXCJgXVxuICAgIDogW107XG5cbiAgY29uc3QgeyBpbnN0YWxsQ29tbWFuZHMsIGNvbW1hbmRzIH0gPSBidWlsZENvbW1hbmRzKHBsdWdpbiwge1xuICAgIHByZUluc3RhbGxDb21tYW5kczogWy4uLmVuc3VyZU91dHB1dERpciwgLi4uKHByZUluc3RhbGxDb21tYW5kcyA/PyBbXSldLFxuICAgIHBvc3RJbnN0YWxsQ29tbWFuZHMsXG4gICAgcHJlQ29tbWFuZHMsXG4gICAgcG9zdENvbW1hbmRzLFxuICB9LCBmYWlsdXJlQmVoYXZpb3IpO1xuXG4gIGNvbnN0IHByb2dyYW1tYXRpYyA9IHsgaW5wdXQsIGluc3RhbGxDb21tYW5kcywgY29tbWFuZHMgfTtcblxuICAvLyBSZXNvbHZlIHRoZSBwbHVnaW4ncyBydW50aW1lIGltYWdlLiBBIHN0ZXAgd2l0aCBubyBgYnVpbGRJbWFnZWAgcnVucyBvblxuICAvLyB0aGUgcGlwZWxpbmUncyBkZWZhdWx0IGltYWdlICh0aGUgdG9vbGNoYWluIHJlbGVhc2UncyBwaXBlbGluZS1ib290c3RyYXAsXG4gIC8vIHZpYSBgY29kZUJ1aWxkRGVmYXVsdHNgKSwgd2hpY2ggY2FycmllcyBwaXBlbGluZS1tYW5hZ2VyIGFuZCB0aGUgQ0RLIENMSVxuICAvLyBidXQgTk9ORSBvZiBhIHBsdWdpbidzIGJha2VkIHRvb2xzIChzbnlrLCB0ZXJyYWZvcm0sIGV0Yy4pLiBXaXJpbmcgdGhlIHBsdWdpbidzIGltYWdlXG4gIC8vIGhlcmUgbWVhbnMgQ29kZUJ1aWxkIHB1bGxzIGZyb20gb3VyIHByaXZhdGUgcmVnaXN0cnkgYW5kIHRoZSB0b29sc1xuICAvLyBpbnN0YWxsZWQgaW4gdGhlIHBsdWdpbidzIERvY2tlcmZpbGUgYXJlIGFjdHVhbGx5IGF2YWlsYWJsZS5cbiAgY29uc3QgcGx1Z2luQnVpbGRJbWFnZSA9IHJlc29sdmVQbHVnaW5JbWFnZShzY29wZSwgcGx1Z2luLCBvcmdJZCk7XG5cbiAgLy8gU2hlbGxTdGVwIGJyYW5jaC5cbiAgLy8gU2hlbGxTdGVwIGl0c2VsZiBkb2Vzbid0IGFjY2VwdCBgYnVpbGRFbnZpcm9ubWVudGAvYGJ1aWxkSW1hZ2VgLiBDREtcbiAgLy8gcGlwZWxpbmVzIHdyYXBzIFNoZWxsU3RlcHMgaW4gYSBkZWZhdWx0IENvZGVCdWlsZCBhY3Rpb24gdGhhdCBydW5zIG9uXG4gIC8vIHRoZSBwaXBlbGluZSdzIGRlZmF1bHQgaW1hZ2UgKHBpcGVsaW5lLWJvb3RzdHJhcCkg4oCUIHdoaWNoIHdvbid0IGhhdmUgdGhlXG4gIC8vIHBsdWdpbidzIHRvb2xzLlxuICAvL1xuICAvLyBTbyB3aGVuIGEgU0hFTExfU1RFUCBwbHVnaW4gRE9FUyBoYXZlIGFuIGltYWdlIChiZWNhdXNlIGl0cyBhdXRob3JcbiAgLy8gYmFrZWQgdG9vbHMgaW50byBhIERvY2tlcmZpbGUpLCB3ZSBQUk9NT1RFIGl0IHRvIGEgQ29kZUJ1aWxkU3RlcCB3aXRoXG4gIC8vIHRoZSByZXNvbHZlZCBpbWFnZS4gVGhlIHBsdWdpbiBhdXRob3IncyBpbnRlbnQgKFwidXNlIG15IGJha2VkIHRvb2xzXCIpXG4gIC8vIGlzIHByZXNlcnZlZCB3aXRob3V0IGZvcmNpbmcgdGhlbSB0byBjaGFuZ2UgcGx1Z2luVHlwZS5cbiAgLy9cbiAgLy8gV2hlbiB0aGUgcGx1Z2luIGhhcyBubyBpbWFnZSAob3IgcmVnaXN0cnkgaXNuJ3QgY29uZmlndXJlZCksIHdlIGtlZXBcbiAgLy8gdGhlIG9yaWdpbmFsIFNoZWxsU3RlcCDigJQgaXQncyBsaWdodGVyIHdlaWdodCBhbmQgdGhlIGRlZmF1bHRcbiAgLy8gQ29kZUJ1aWxkIGltYWdlIGlzIGZpbmUuXG4gIGlmIChwbHVnaW4ucGx1Z2luVHlwZSA9PT0gUGx1Z2luVHlwZS5TSEVMTF9TVEVQKSB7XG4gICAgaWYgKCFwbHVnaW5CdWlsZEltYWdlKSB7XG4gICAgICByZXR1cm4gbmV3IFNoZWxsU3RlcChpZCwge1xuICAgICAgICAuLi5wcm9ncmFtbWF0aWMsXG4gICAgICAgIGVudjogeyAuLi5lbnYsIC4uLmFjdGlvbkVudiB9LFxuICAgICAgICAuLi5tZXRhZGF0YUZvclNoZWxsU3RlcChtZXJnZWQpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgW0NyZWF0ZUNvZGVCdWlsZFN0ZXBdIFNIRUxMX1NURVAgcGx1Z2luIFwiJHtwbHVnaW4ubmFtZX1cIiBoYXMgYSByZWdpc3RyeSBpbWFnZSDigJQgcHJvbW90aW5nIHRvIENvZGVCdWlsZFN0ZXAgc28gdGhlIHBsdWdpbiBpbWFnZSBpcyBhY3R1YWxseSB1c2VkYCk7XG4gICAgLy8gRmFsbCB0aHJvdWdoIHRvIHRoZSBDb2RlQnVpbGRTdGVwIHBhdGggYmVsb3cuXG4gIH1cblxuICBjb25zdCBjb21wdXRlVHlwZSA9IGdldENvbXB1dGVUeXBlKFxuICAgIHBsdWdpbi5jb21wdXRlVHlwZSA/PyBvcHRpb25zLmRlZmF1bHRDb21wdXRlVHlwZSA/PyAnU01BTEwnLFxuICApO1xuXG4gIC8vIFN0ZXAgbmV0d29yazogZXhwbGljaXQgc3RlcCBjb25maWcgd2lucywgZWxzZSB0aGlzIHN0ZXAncyBgZWMyOm5ldHdvcmtgIG1ldGFkYXRhLlxuICBjb25zdCByZXNvbHZlZE5ldHdvcmsgPSBuZXR3b3JrID8/IG5ldHdvcmtDb25maWdGcm9tTWV0YWRhdGEobWVyZ2VkKTtcbiAgY29uc3QgbmV0d29ya1Byb3BzID0gcmVzb2x2ZWROZXR3b3JrXG4gICAgPyByZXNvbHZlTmV0d29yayhzY29wZSwgb3B0aW9ucy51bmlxdWVJZCwgcmVzb2x2ZWROZXR3b3JrKVxuICAgIDoge307XG5cbiAgLy8gTWV0YWRhdGEgc3ByZWFkIGxhc3Qgc28gaXQgY2FuIG92ZXJyaWRlIHByb2dyYW1tYXRpYyBkZWZhdWx0cy5cbiAgLy8gTk9URTogQ2FjaGluZyBpcyBzdXBwb3J0ZWQgdmlhIHR3byBtZXRhZGF0YSBwYXRoczpcbiAgLy8gICAxLiBNZXRhZGF0YUtleXMuQ0FDSEUgKCdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmNhY2hlJykg4oCUIHBhc3NlZCBkaXJlY3RseVxuICAvLyAgICAgIGFzIHRoZSBDb2RlQnVpbGRTdGVwIGBjYWNoZWAgcHJvcCAoZXhwZWN0cyBhIGNvZGVidWlsZC5DYWNoZSBvYmplY3QpLlxuICAvLyAgIDIuIE1ldGFkYXRhS2V5cy5QQVJUSUFMX0JVSUxEX1NQRUMgKCdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOnBhcnRpYWxidWlsZHNwZWMnKVxuICAvLyAgICAgIOKAlCBwYXNzZWQgYXMgYHBhcnRpYWxCdWlsZFNwZWNgLCB3aGljaCBjYW4gaW5jbHVkZSBhIGBjYWNoZTpgIHNlY3Rpb24gZm9yXG4gIC8vICAgICAgUzMgb3IgbG9jYWwgY2FjaGluZyAoZS5nLiwgQnVpbGRTcGVjLmZyb21PYmplY3QoeyBjYWNoZTogeyBwYXRoczogWy4uLl0gfSB9KSkuXG4gIC8vIFBlci1zdGVwIGJ1aWxkRW52aXJvbm1lbnQgb3ZlcnJpZGVzIGZyb20gbWV0YWRhdGEgKGF3czpjZGs6Y29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQ6KikuXG4gIC8vIEEgbWV0YWRhdGEtcHJvdmlkZWQgY29tcHV0ZVR5cGUgaXMgYSByYXcgcGFzc3Rocm91Z2gsIHNvIG5vcm1hbGl6ZSBpdCB0aHJvdWdoXG4gIC8vIGdldENvbXB1dGVUeXBlIOKAlCBvdGhlcndpc2UgYSBmcmllbmRseSB2YWx1ZSBsaWtlIFwiTEFSR0VcIiByZWFjaGVzIENvZGVCdWlsZCB2ZXJiYXRpbVxuICAvLyBhbmQgZmFpbHMgd2l0aCBcIkludmFsaWQgY29tcHV0ZSB0eXBlIHByb3ZpZGVkXCIgKGl0IG5lZWRzIEJVSUxEX0dFTkVSQUwxX0xBUkdFKS5cbiAgY29uc3QgcmF3TWV0YUJ1aWxkRW52ID0gbWV0YWRhdGFGb3JCdWlsZEVudmlyb25tZW50KG1lcmdlZCk7XG4gIGNvbnN0IG1ldGFCdWlsZEVudiA9IHR5cGVvZiByYXdNZXRhQnVpbGRFbnYuY29tcHV0ZVR5cGUgPT09ICdzdHJpbmcnXG4gICAgPyB7IC4uLnJhd01ldGFCdWlsZEVudiwgY29tcHV0ZVR5cGU6IGdldENvbXB1dGVUeXBlKHJhd01ldGFCdWlsZEVudi5jb21wdXRlVHlwZSkgfVxuICAgIDogcmF3TWV0YUJ1aWxkRW52O1xuXG4gIGNvbnN0IHN0ZXAgPSBuZXcgQ29kZUJ1aWxkU3RlcChpZCwge1xuICAgIC4uLnByb2dyYW1tYXRpYyxcbiAgICAuLi5uZXR3b3JrUHJvcHMsXG4gICAgLi4uKGFkZGl0aW9uYWxJbnB1dHMgJiYgeyBhZGRpdGlvbmFsSW5wdXRzIH0pLFxuICAgIC4uLih0aW1lb3V0ICYmIHsgdGltZW91dDogRHVyYXRpb24ubWludXRlcyh0aW1lb3V0KSB9KSxcbiAgICBlbnY6IGFjdGlvbkVudixcbiAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiBwbHVnaW4ucHJpbWFyeU91dHB1dERpcmVjdG9yeSA/PyB1bmRlZmluZWQsXG4gICAgLy8gUGluIHRoZSBidWlsZHNwZWMgc2hlbGwgdG8gUE9TSVggL2Jpbi9zaCBzbyBleGVjdXRpb24gaXMgaWRlbnRpY2FsIHRvXG4gICAgLy8gQ29kZUJ1aWxkJ3MgZGVmYXVsdCBhbmQgcG9ydGFibGUgYWNyb3NzIG1pbmltYWwgYmFzZSBpbWFnZXMgKG5vIGJhc2hcbiAgICAvLyBkZXBlbmRlbmN5KS4gUGx1Z2luIHNwZWNzIGFyZSBhdXRob3JlZCBQT1NJWC1jbGVhbiB0byBtYXRjaCDigJQgbm8gYmFzaC1vbmx5XG4gICAgLy8gYFtbIF1dYCwgYXJyYXlzLCBgcmVhZCAtcmEgPDw8YCwgb3IgYHNvdXJjZWAvYG52bSB1c2VgL2BzZGsgdXNlYC4gQVxuICAgIC8vIHBsdWdpbi1zdXBwbGllZCBwYXJ0aWFsQnVpbGRTcGVjIChub25lIHRvZGF5KSB3b3VsZCBvdmVycmlkZSB0aGlzIHZpYSB0aGVcbiAgICAvLyBtZXRhZGF0YSBzcHJlYWQgYmVsb3cgYW5kIG11c3QgdGhlbiBzZXQgYGVudi5zaGVsbGAgaXRzZWxmLlxuICAgIHBhcnRpYWxCdWlsZFNwZWM6IEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHsgZW52OiB7IHNoZWxsOiAnL2Jpbi9zaCcgfSB9KSxcbiAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICBjb21wdXRlVHlwZSxcbiAgICAgIGJ1aWxkSW1hZ2U6IHBsdWdpbkJ1aWxkSW1hZ2UgPz8gZGVmYXVsdEJ1aWxkSW1hZ2VPclRocm93KG9wdGlvbnMpLFxuICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgLi4udG9Db2RlQnVpbGRFbnZWYXJzKGVudiksXG4gICAgICAgIC4uLnNlY3JldEVudlZhcnMsXG4gICAgICAgIC4uLnJlcG9ydEtleUVudlZhcixcbiAgICAgIH0sXG4gICAgICAuLi5tZXRhQnVpbGRFbnYsXG4gICAgfSxcbiAgICAuLi5tZXRhZGF0YUZvckNvZGVCdWlsZFN0ZXAobWVyZ2VkKSxcbiAgfSk7XG5cbiAgLy8gUmVnaXN0ZXIgd2l0aCBhcnRpZmFjdCBtYW5hZ2VyIGlmIHByaW1hcnlPdXRwdXREaXJlY3RvcnkgaXMgc2V0XG4gIGlmIChwbHVnaW4ucHJpbWFyeU91dHB1dERpcmVjdG9yeSAmJiBhcnRpZmFjdE1hbmFnZXIgJiYgc3RhZ2VOYW1lKSB7XG4gICAgY29uc3QgYXJ0aWZhY3RLZXk6IEFydGlmYWN0S2V5ID0ge1xuICAgICAgc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VBbGlhczogc3RhZ2VBbGlhcyA/PyBgJHtzdGFnZU5hbWV9LWFsaWFzYCxcbiAgICAgIHBsdWdpbk5hbWU6IHBsdWdpbi5uYW1lLFxuICAgICAgcGx1Z2luQWxpYXM6IHBsdWdpbkFsaWFzID8/IHBsdWdpbkFydGlmYWN0QWxpYXMocGx1Z2luKSxcbiAgICAgIG91dHB1dERpcmVjdG9yeTogcGx1Z2luLnByaW1hcnlPdXRwdXREaXJlY3RvcnksXG4gICAgfTtcbiAgICBhcnRpZmFjdE1hbmFnZXIuYWRkKGFydGlmYWN0S2V5LCBzdGVwKTtcbiAgfVxuXG4gIHJldHVybiBzdGVwO1xufVxuXG4vKipcbiAqIFRoZSBkZWZhdWx0IGltYWdlIGEgcGx1Z2luLWxlc3MgQ29kZUJ1aWxkIHN0ZXAgcnVucyBvbi4gSXQgaXMgcmVzb2x2ZWQgb25jZVxuICogcGVyIHBpcGVsaW5lIGZyb20gYHJlc29sdmVkQm9vdHN0cmFwYCBhbmQgaGFuZGVkIGRvd247IGEgc3RlcCB3aXRob3V0IG9uZVxuICogaGFzIG5vIGltYWdlIHRvIHJ1biBvbiwgc28gdGhlIHN5bnRoIHN0b3BzIHJhdGhlciB0aGFuIGxldCBDb2RlQnVpbGQgcGlja1xuICogaXRzIG93bi5cbiAqL1xuZnVuY3Rpb24gZGVmYXVsdEJ1aWxkSW1hZ2VPclRocm93KG9wdGlvbnM6IENvZGVCdWlsZFN0ZXBPcHRpb25zKTogSUJ1aWxkSW1hZ2Uge1xuICBpZiAob3B0aW9ucy5kZWZhdWx0QnVpbGRJbWFnZSkgcmV0dXJuIG9wdGlvbnMuZGVmYXVsdEJ1aWxkSW1hZ2U7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgQk9PVFNUUkFQX0lNQUdFX1VOUkVTT0xWRUQ6IHN0ZXAgXCIke29wdGlvbnMuaWR9XCIgKHBsdWdpbiBcIiR7b3B0aW9ucy5wbHVnaW4ubmFtZX1cIikgaGFzIG5vIHBsdWdpbiBpbWFnZSBhbmQgbm8gZGVmYXVsdCBidWlsZCBpbWFnZS4gYCArXG4gICAgJ1Bhc3MgYGRlZmF1bHRCdWlsZEltYWdlYCAoUGlwZWxpbmVCdWlsZGVyIHJlc29sdmVzIGl0IGZyb20gYHJlc29sdmVkQm9vdHN0cmFwYCkuJyxcbiAgKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHN0cmluZyBvciBDb21wdXRlVHlwZSBlbnVtIHRvIENESyBDb21wdXRlVHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcHV0ZVR5cGUoaW5wdXQ6IHN0cmluZyB8IENES0NvbXB1dGVUeXBlID0gJ1NNQUxMJyk6IENES0NvbXB1dGVUeXBlIHtcbiAgLy8gSWYgYWxyZWFkeSBhIENESyBDb21wdXRlVHlwZSwgcmV0dXJuIGFzLWlzXG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgLy8gQWxyZWFkeSBhIG5hdGl2ZSBDb2RlQnVpbGQgQ29tcHV0ZVR5cGUgKGUuZy4gXCJCVUlMRF9HRU5FUkFMMV9MQVJHRVwiKT8gQWNjZXB0IGFzLWlzXG4gIC8vIHNvIGJvdGggZnJpZW5kbHkgKExBUkdFKSBhbmQgbmF0aXZlIHZhbHVlcyByb3VuZC10cmlwIHdpdGhvdXQgZmFsbGluZyBiYWNrIHRvIFNNQUxMLlxuICBpZiAoKE9iamVjdC52YWx1ZXMoQ0RLQ29tcHV0ZVR5cGUpIGFzIHN0cmluZ1tdKS5pbmNsdWRlcyhpbnB1dCkpIHtcbiAgICByZXR1cm4gaW5wdXQgYXMgQ0RLQ29tcHV0ZVR5cGU7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkID0gaW5wdXQudG9VcHBlckNhc2UoKSBhcyBDb21wdXRlVHlwZTtcblxuICBjb25zdCBtYXBwaW5nOiBSZWNvcmQ8Q29tcHV0ZVR5cGUsIENES0NvbXB1dGVUeXBlPiA9IHtcbiAgICBbQ29tcHV0ZVR5cGUuU01BTExdOiBDREtDb21wdXRlVHlwZS5TTUFMTCxcbiAgICBbQ29tcHV0ZVR5cGUuTUVESVVNXTogQ0RLQ29tcHV0ZVR5cGUuTUVESVVNLFxuICAgIFtDb21wdXRlVHlwZS5MQVJHRV06IENES0NvbXB1dGVUeXBlLkxBUkdFLFxuICAgIFtDb21wdXRlVHlwZS5YMl9MQVJHRV06IENES0NvbXB1dGVUeXBlLlgyX0xBUkdFLFxuICB9O1xuXG4gIGNvbnN0IHJlc3VsdCA9IG1hcHBpbmdbbm9ybWFsaXplZF07XG4gIGlmICghcmVzdWx0KSB7XG4gICAgbG9nLndhcm4oYFVua25vd24gY29tcHV0ZSB0eXBlIFwiJHtpbnB1dH1cIiwgZmFsbGluZyBiYWNrIHRvIFNNQUxMYCk7XG4gICAgcmV0dXJuIENES0NvbXB1dGVUeXBlLlNNQUxMO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVW53cmFwIGEgU2VjcmV0VmFsdWUgfCBzdHJpbmcgaW50byBhIHBsYWluIHN0cmluZy5cbiAqIFdoZW4gYSBTZWNyZXRWYWx1ZSBpcyBwcm92aWRlZCAoZS5nLiBmcm9tIFNlY3JldHMgTWFuYWdlciksIGNhbGxzIHVuc2FmZVVud3JhcCgpXG4gKiB0byBleHRyYWN0IHRoZSB1bmRlcmx5aW5nIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwU2VjcmV0KHZhbHVlOiBTZWNyZXRWYWx1ZSB8IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiB2YWx1ZS51bnNhZmVVbndyYXAoKTtcbn1cbiJdfQ==
@@ -1,3 +1,5 @@
1
+ import { type ToolchainResolvedVia } from '@pipeline-builder/api-core/plugin-catalog';
2
+ import type { PluginToolchain } from '@pipeline-builder/api-core';
1
3
  import type { Plugin } from '@pipeline-builder/pipeline-data';
2
4
  /** How serious a lookup warning is (vulnerability state is graded, never refused). */
3
5
  export type LookupWarningSeverity = 'info' | 'warning' | 'error' | 'critical';
@@ -10,18 +12,8 @@ export interface LookupWarning {
10
12
  /** Absent on the wire → `warning`. */
11
13
  readonly severity: LookupWarningSeverity;
12
14
  }
13
- /** How a managed toolchain release was chosen for the caller (never anything about other orgs). */
14
- export type ToolchainResolvedVia = 'pin' | 'org-default' | 'canary' | 'default';
15
- export declare const TOOLCHAIN_RESOLVED_VIA: readonly ToolchainResolvedVia[];
16
- /** The exact tool versions a toolchain release carries (the bootstrap spec's `toolchain`). */
17
- export interface ToolchainVersions {
18
- readonly pipelineManager?: string;
19
- readonly awsCdk?: string;
20
- readonly cdkAssets?: string;
21
- readonly esbuild?: string;
22
- readonly pnpm?: string;
23
- readonly node?: string;
24
- }
15
+ /** The exact tool versions a toolchain release carries (the bootstrap spec's `toolchain`), as far as an answer carries them. */
16
+ export type ToolchainVersions = Partial<Readonly<PluginToolchain>>;
25
17
  /**
26
18
  * The release a managed-name lookup (`pipeline-bootstrap`, `cdk-synth`)
27
19
  * resolved to: `data.toolchain` of the `/plugins/lookup` answer. `versions`
@@ -1,9 +1,15 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
+ // The dependency-free plugin-catalog subpath only: the plugin-lookup Lambda
4
+ // bundles this module, so it must not pull in the api-core root.
5
+ import { TOOLCHAIN_METADATA_PREFIX, TOOLCHAIN_RESOLVED_VIA } from '@pipeline-builder/api-core/plugin-catalog';
3
6
  /** Severities, least to most serious. */
4
7
  export const LOOKUP_WARNING_SEVERITIES = ['info', 'warning', 'error', 'critical'];
5
- export const TOOLCHAIN_RESOLVED_VIA = ['pin', 'org-default', 'canary', 'default'];
6
- const TOOLCHAIN_VERSION_KEYS = ['pipelineManager', 'awsCdk', 'cdkAssets', 'esbuild', 'pnpm', 'node'];
8
+ /** Every tool field, keyed so a field added to api-core's `PluginToolchainSchema` fails to compile here until listed. */
9
+ const TOOLCHAIN_VERSION_FIELDS = {
10
+ pipelineManager: true, awsCdk: true, cdkAssets: true, esbuild: true, pnpm: true, node: true,
11
+ };
12
+ const TOOLCHAIN_VERSION_KEYS = Object.keys(TOOLCHAIN_VERSION_FIELDS);
7
13
  /** Pick the string tool versions off an object (unknown keys and non-strings ignored). */
8
14
  function pickVersions(raw) {
9
15
  if (!raw || typeof raw !== 'object')
@@ -16,12 +22,6 @@ function pickVersions(raw) {
16
22
  }
17
23
  return out;
18
24
  }
19
- /**
20
- * The flat `metadata` key prefix the platform persists a build image's
21
- * `toolchain` under (`toolchain.awsCdk`, …; api-core `TOOLCHAIN_METADATA_PREFIX`,
22
- * repeated here so this module stays dependency-free).
23
- */
24
- const TOOLCHAIN_METADATA_PREFIX = 'toolchain.';
25
25
  /** The tool versions a plugin row's `metadata` carries as flat `toolchain.<field>` keys. */
26
26
  function versionsFromMetadata(metadata) {
27
27
  if (!metadata || typeof metadata !== 'object')
@@ -132,4 +132,4 @@ export function exactPinNotFoundMessage(label, pin, state) {
132
132
  default: return `Plugin "${label}" version ${pin} does not exist (never published, or refused by its build's vulnerability scan)`;
133
133
  }
134
134
  }
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC1lbnZlbG9wZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvcGx1Z2luLWxvb2t1cC1lbnZlbG9wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBT3RDLHlDQUF5QztBQUN6QyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBcUMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztBQWFwSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBb0MsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQVluSCxNQUFNLHNCQUFzQixHQUF5QyxDQUFDLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQXlCM0ksMEZBQTBGO0FBQzFGLFNBQVMsWUFBWSxDQUFDLEdBQVk7SUFDaEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDL0MsTUFBTSxHQUFHLEdBQTJCLEVBQUUsQ0FBQztJQUN2QyxLQUFLLE1BQU0sR0FBRyxJQUFJLHNCQUFzQixFQUFFLENBQUM7UUFDekMsTUFBTSxDQUFDLEdBQUksR0FBK0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7WUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSx5QkFBeUIsR0FBRyxZQUFZLENBQUM7QUFFL0MsNEZBQTRGO0FBQzVGLFNBQVMsb0JBQW9CLENBQUMsUUFBaUI7SUFDN0MsSUFBSSxDQUFD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LENBQUM7UUFDZCxLQUFLLFNBQVMsRUFBRSxPQUFPLFdBQVcsS0FBSyxhQUFhLEdBQUcscUNBQXFDLENBQUM7UUFDN0YsS0FBSyxVQUFVLEVBQUUsT0FBTyxXQUFXLEtBQUssYUFBYSxHQUFHLGNBQWMsQ0FBQztRQUN2RSxLQUFLLFFBQVEsRUFBRSxPQUFPLFdBQVcsS0FBSyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ3BFLEtBQUssU0FBUyxFQUFFLE9BQU8sV0FBVyxLQUFLLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQztRQUN6RSxTQUFTLE9BQU8sV0FBVyxLQUFLLGFBQWEsR0FBRyxpRkFBaUYsQ0FBQztJQUNwSSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuXG4vKiogSG93IHNlcmlvdXMgYSBsb29rdXAgd2FybmluZyBpcyAodnVsbmVyYWJpbGl0eSBzdGF0ZSBpcyBncmFkZWQsIG5ldmVyIHJlZnVzZWQpLiAqL1xuZXhwb3J0IHR5cGUgTG9va3VwV2FybmluZ1NldmVyaXR5ID0gJ2luZm8nIHwgJ3dhcm5pbmcnIHwgJ2Vycm9yJyB8ICdjcml0aWNhbCc7XG5cbi8qKiBTZXZlcml0aWVzLCBsZWFzdCB0byBtb3N0IHNlcmlvdXMuICovXG5leHBvcnQgY29uc3QgTE9PS1VQX1dBUk5JTkdfU0VWRVJJVElFUzogcmVhZG9ubHkgTG9va3VwV2FybmluZ1NldmVyaXR5W10gPSBbJ2luZm8nLCAnd2FybmluZycsICdlcnJvcicsICdjcml0aWNhbCddO1xuXG4vKiogT25lIHdhcm5pbmcgcmlkaW5nIGJlc2lkZSBhIHJlc29sdmVkIHBsdWdpbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9va3VwV2FybmluZyB7XG4gIHJlYWRvbmx5IGNvZGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcbiAgLyoqIEFic2VudCBvbiB0aGUgd2lyZSDihpIgYHdhcm5pbmdgLiAqL1xuICByZWFkb25seSBzZXZlcml0eTogTG9va3VwV2FybmluZ1NldmVyaXR5O1xufVxuXG4vKiogSG93IGEgbWFuYWdlZCB0b29sY2hhaW4gcmVsZWFzZSB3YXMgY2hvc2VuIGZvciB0aGUgY2FsbGVyIChuZXZlciBhbnl0aGluZyBhYm91dCBvdGhlciBvcmdzKS4gKi9cbmV4cG9ydCB0eXBlIFRvb2xjaGFpblJlc29sdmVkVmlhID0gJ3BpbicgfCAnb3JnLWRlZmF1bHQnIHwgJ2NhbmFyeScgfCAnZGVmYXVsdCc7XG5cbmV4cG9ydCBjb25zdCBUT09MQ0hBSU5fUkVTT0xWRURfVklBOiByZWFkb25seSBUb29sY2hhaW5SZXNvbHZlZFZpYVtdID0gWydwaW4nLCAnb3JnLWRlZmF1bHQnLCAnY2FuYXJ5JywgJ2RlZmF1bHQnXTtcblxuLyoqIFRoZSBleGFjdCB0b29sIHZlcnNpb25zIGEgdG9vbGNoYWluIHJlbGVhc2UgY2FycmllcyAodGhlIGJvb3RzdHJhcCBzcGVjJ3MgYHRvb2xjaGFpbmApLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb29sY2hhaW5WZXJzaW9ucyB7XG4gIHJlYWRvbmx5IHBpcGVsaW5lTWFuYWdlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgYXdzQ2RrPzogc3RyaW5nO1xuICByZWFkb25seSBjZGtBc3NldHM/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVzYnVpbGQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBucG0/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5vZGU/OiBzdHJpbmc7XG59XG5cbmNvbnN0IFRPT0xDSEFJTl9WRVJTSU9OX0tFWVM6IHJlYWRvbmx5IChrZXlvZiBUb29sY2hhaW5WZXJzaW9ucylbXSA9IFsncGlwZWxpbmVNYW5hZ2VyJywgJ2F3c0NkaycsICdjZGtBc3NldHMnLCAnZXNidWlsZCcsICdwbnBtJywgJ25vZGUnXTtcblxuLyoqXG4gKiBUaGUgcmVsZWFzZSBhIG1hbmFnZWQtbmFtZSBsb29rdXAgKGBwaXBlbGluZS1ib290c3RyYXBgLCBgY2RrLXN5bnRoYClcbiAqIHJlc29sdmVkIHRvOiBgZGF0YS50b29sY2hhaW5gIG9mIHRoZSBgL3BsdWdpbnMvbG9va3VwYCBhbnN3ZXIuIGB2ZXJzaW9uc2BcbiAqIGhvbGRzIHRoZSB0b29sIHZlcnNpb25zIHdoZW4gdGhlIGFuc3dlciAob3IgdGhlIHBsdWdpbiByZWNvcmQpIGNhcnJpZXMgdGhlbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb29rdXBUb29sY2hhaW4ge1xuICByZWFkb25seSByZWxlYXNlVmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSByZXNvbHZlZFZpYTogVG9vbGNoYWluUmVzb2x2ZWRWaWE7XG4gIHJlYWRvbmx5IHZlcnNpb25zOiBUb29sY2hhaW5WZXJzaW9ucztcbn1cblxuLyoqXG4gKiBUaGUgcmVzb2x2ZWQgYHBpcGVsaW5lLWJvb3RzdHJhcGAgaGFsZiBvZiBhIHRvb2xjaGFpbiByZWxlYXNlOiB0aGUgcGx1Z2luXG4gKiByZWNvcmQgdGhlIGRlZmF1bHQgQ29kZUJ1aWxkIGltYWdlIGlzIHBpbm5lZCB0byAoYnkgaXRzIHNpZ25lZCBkaWdlc3QpIGFuZFxuICogdGhlIHJlbGVhc2UgaXQgY2FtZSBmcm9tLiBQcm9kdWNlZCBieSBgcGlwZWxpbmUtbWFuYWdlcmAnc1xuICogYHJlc29sdmVCb290c3RyYXBJbWFnZWAgKG9yIGEgYC0tdG9vbGNoYWluLWZpbGVgKSBhbmQgcGFzc2VkIHRvXG4gKiBgUGlwZWxpbmVCdWlsZGVyYCBhcyBgcmVzb2x2ZWRCb290c3RyYXBgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkQm9vdHN0cmFwIHtcbiAgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW47XG4gIHJlYWRvbmx5IHRvb2xjaGFpbjogTG9va3VwVG9vbGNoYWluO1xufVxuXG4vKiogUGljayB0aGUgc3RyaW5nIHRvb2wgdmVyc2lvbnMgb2ZmIGFuIG9iamVjdCAodW5rbm93biBrZXlzIGFuZCBub24tc3RyaW5ncyBpZ25vcmVkKS4gKi9cbmZ1bmN0aW9uIHBpY2tWZXJzaW9ucyhyYXc6IHVua25vd24pOiBUb29sY2hhaW5WZXJzaW9ucyB7XG4gIGlmICghcmF3IHx8IHR5cGVvZiByYXcgIT09ICdvYmplY3QnKSByZXR1cm4ge307XG4gIGNvbnN0IG91dDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBUT09MQ0hBSU5fVkVSU0lPTl9LRVlTKSB7XG4gICAgY29uc3QgdiA9IChyYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA+IDApIG91dFtrZXldID0gdjtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFRoZSBmbGF0IGBtZXRhZGF0YWAga2V5IHByZWZpeCB0aGUgcGxhdGZvcm0gcGVyc2lzdHMgYSBidWlsZCBpbWFnZSdzXG4gKiBgdG9vbGNoYWluYCB1bmRlciAoYHRvb2xjaGFpbi5hd3NDZGtgLCDigKY7IGFwaS1jb3JlIGBUT09MQ0hBSU5fTUVUQURBVEFfUFJFRklYYCxcbiAqIHJlcGVhdGVkIGhlcmUgc28gdGhpcyBtb2R1bGUgc3RheXMgZGVwZW5kZW5jeS1mcmVlKS5cbiAqL1xuY29uc3QgVE9PTENIQUlOX01FVEFEQVRBX1BSRUZJWCA9ICd0b29sY2hhaW4uJztcblxuLyoqIFRoZSB0b29sIHZlcnNpb25zIGEgcGx1Z2luIHJvdydzIGBtZXRhZGF0YWAgY2FycmllcyBhcyBmbGF0IGB0b29sY2hhaW4uPGZpZWxkPmAga2V5cy4gKi9cbmZ1bmN0aW9uIHZlcnNpb25zRnJvbU1ldGFkYXRhKG1ldGFkYXRhOiB1bmtub3duKTogVG9vbGNoYWluVmVyc2lvbnMge1xuICBpZiAoIW1ldGFkYXRhIHx8IHR5cGVvZiBtZXRhZGF0YSAhPT0gJ29iamVjdCcpIHJldHVybiB7fTtcbiAgY29uc3QgZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhtZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICBpZiAoay5zdGFydHNXaXRoKFRPT0xDSEFJTl9NRVRBREFUQV9QUkVGSVgpKSBmaWVsZHNbay5zbGljZShUT09MQ0hBSU5fTUVUQURBVEFfUFJFRklYLmxlbmd0aCldID0gdjtcbiAgfVxuICByZXR1cm4gcGlja1ZlcnNpb25zKGZpZWxkcyk7XG59XG5cbi8qKlxuICogUGFyc2UgYSBsb29rdXAncyBgdG9vbGNoYWluYCBibG9jay4gTnVsbCB1bmxlc3MgaXQgY2FycmllcyBhIHJlbGVhc2UgdmVyc2lvblxuICogYW5kIGEga25vd24gYHJlc29sdmVkVmlhYC4gVG9vbCB2ZXJzaW9ucyBjb21lIGZyb20sIGxvd2VzdCBwcmVjZWRlbmNlIGZpcnN0OlxuICogdGhlIHBsdWdpbiByb3cncyBgbWV0YWRhdGFgIChgdG9vbGNoYWluLjxmaWVsZD5gIGtleXMsIHdoZXJlIHRoZSBwbGF0Zm9ybVxuICogcGVyc2lzdHMgdGhlIGJvb3RzdHJhcCBzcGVjJ3MgYHRvb2xjaGFpbmApLCB0aGUgcmVjb3JkJ3Mgb3duIGB0b29sY2hhaW5gLFxuICogdGhlIGJsb2NrJ3MgZmxhdCBmaWVsZHMsIHRoZW4gYHRvb2xjaGFpbi52ZXJzaW9uc2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxvb2t1cFRvb2xjaGFpbihyYXc6IHVua25vd24sIHBsdWdpbj86IHVua25vd24pOiBMb29rdXBUb29sY2hhaW4gfCBudWxsIHtcbiAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gJ29iamVjdCcpIHJldHVybiBudWxsO1xuICBjb25zdCB7IHJlbGVhc2VWZXJzaW9uLCByZXNvbHZlZFZpYSwgdmVyc2lvbnMgfSA9IHJhdyBhcyB7IHJlbGVhc2VWZXJzaW9uPzogdW5rbm93bjsgcmVzb2x2ZWRWaWE/OiB1bmtub3duOyB2ZXJzaW9ucz86IHVua25vd24gfTtcbiAgaWYgKHR5cGVvZiByZWxlYXNlVmVyc2lvbiAhPT0gJ3N0cmluZycgfHwgcmVsZWFzZVZlcnNpb24ubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgaWYgKCEoVE9PTENIQUlOX1JFU09MVkVEX1ZJQSBhcyByZWFkb25seSB1bmtub3duW10pLmluY2x1ZGVzKHJlc29sdmVkVmlhKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHJlYyA9IHBsdWdpbiAmJiB0eXBlb2YgcGx1Z2luID09PSAnb2JqZWN0JyA/IHBsdWdpbiBhcyB7IHRvb2xjaGFpbj86IHVua25vd247IG1ldGFkYXRhPzogdW5rbm93biB9IDogdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIHJlbGVhc2VWZXJzaW9uLFxuICAgIHJlc29sdmVkVmlhOiByZXNvbHZlZFZpYSBhcyBUb29sY2hhaW5SZXNvbHZlZFZpYSxcbiAgICB2ZXJzaW9uczogeyAuLi52ZXJzaW9uc0Zyb21NZXRhZGF0YShyZWM/Lm1ldGFkYXRhKSwgLi4ucGlja1ZlcnNpb25zKHJlYz8udG9vbGNoYWluKSwgLi4ucGlja1ZlcnNpb25zKHJhdyksIC4uLnBpY2tWZXJzaW9ucyh2ZXJzaW9ucykgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBVbndyYXAgYSBgL3BsdWdpbnMvbG9va3VwYCBhbnN3ZXIuIFRoZSBwbGF0Zm9ybSdzIHN1Y2Nlc3MgZW52ZWxvcGUgaXNcbiAqIGB7IHN1Y2Nlc3MsIHN0YXR1c0NvZGUsIGRhdGE6IHsgcGx1Z2luLCB3YXJuaW5ncyB9IH1gIChub3RlIHRoZSBkb3VibGVcbiAqIG5lc3Rpbmc6IGBkYXRhLnBsdWdpbmApOyBgeyBkYXRhOiBQbHVnaW4gfWAsIGB7IHBsdWdpbiB9YCBhbmQgYSBiYXJlIFBsdWdpblxuICogYXJlIHRvbGVyYXRlZCB0b28uIFJldHVybnMgdGhlIHBsdWdpbiAobnVsbCB3aGVuIGFic2VudCBvciBuYW1lbGVzcykgYW5kIHRoZVxuICogZ3JhZGVkIHdhcm5pbmdzIChsaWZlY3ljbGUsIHZ1bG5lcmFiaWxpdHksIGNvbXBsaWFuY2UpIHRoYXQgcmlkZSBiZXNpZGUgaXQsXG4gKiBhbmQg4oCUIGZvciBhIG1hbmFnZWQgdG9vbGNoYWluIG5hbWUg4oCUIHRoZSByZWxlYXNlIGl0IHJlc29sdmVkIHRvIChgdG9vbGNoYWluYCkuXG4gKlxuICogRGVwZW5kZW5jeS1mcmVlICh0eXBlLW9ubHkgaW1wb3J0cykgc28gdGhlIHBsdWdpbi1sb29rdXAgTGFtYmRhIGNhbiBidW5kbGUgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBMb29rdXAoYm9keTogdW5rbm93bik6IHsgcGx1Z2luOiBQbHVnaW4gfCBudWxsOyB3YXJuaW5nczogTG9va3VwV2FybmluZ1tdOyB0b29sY2hhaW4/OiBMb29rdXBUb29sY2hhaW4gfSB7XG4gIGlmICghYm9keSB8fCB0eXBlb2YgYm9keSAhPT0gJ29iamVjdCcpIHJldHVybiB7IHBsdWdpbjogbnVsbCwgd2FybmluZ3M6IFtdIH07XG4gIGNvbnN0IGlubmVyID0gKGJvZHkgYXMgeyBkYXRhPzogdW5rbm93biB9KS5kYXRhO1xuICBjb25zdCBjb250YWluZXIgPSAoaW5uZXIgJiYgdHlwZW9mIGlubmVyID09PSAnb2JqZWN0JyA/IGlubmVyIDogYm9keSkgYXMgeyBwbHVnaW4/OiB1bmtub3duOyB3YXJuaW5ncz86IHVua25vd247IHRvb2xjaGFpbj86IHVua25vd24gfTtcbiAgY29uc3QgY2FuZGlkYXRlID0gY29udGFpbmVyLnBsdWdpbiA/PyBjb250YWluZXI7XG4gIGNvbnN0IHBsdWdpbiA9IGNhbmRpZGF0ZSAmJiB0eXBlb2YgY2FuZGlkYXRlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgKGNhbmRpZGF0ZSBhcyB7IG5hbWU/OiB1bmtub3duIH0pLm5hbWUgPT09ICdzdHJpbmcnXG4gICAgJiYgKGNhbmRpZGF0ZSBhcyB7IG5hbWU6IHN0cmluZyB9KS5uYW1lLmxlbmd0aCA+IDBcbiAgICA/IGNhbmRpZGF0ZSBhcyBQbHVnaW5cbiAgICA6IG51bGw7XG4gIGNvbnN0IHdhcm5pbmdzOiBMb29rdXBXYXJuaW5nW10gPSBbXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY29udGFpbmVyLndhcm5pbmdzKSkge1xuICAgIGZvciAoY29uc3QgdyBvZiBjb250YWluZXIud2FybmluZ3MpIHtcbiAgICAgIGlmICghdyB8fCB0eXBlb2YgdyAhPT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgeyBjb2RlLCBtZXNzYWdlLCBzZXZlcml0eSB9ID0gdyBhcyB7IGNvZGU/OiB1bmtub3duOyBtZXNzYWdlPzogdW5rbm93bjsgc2V2ZXJpdHk/OiB1bmtub3duIH07XG4gICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09ICdzdHJpbmcnIHx8IG1lc3NhZ2UubGVuZ3RoID09PSAwKSBjb250aW51ZTtcbiAgICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgICAuLi4odHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnID8geyBjb2RlIH0gOiB7fSksXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIHNldmVyaXR5OiAoTE9PS1VQX1dBUk5JTkdfU0VWRVJJVElFUyBhcyByZWFkb25seSB1bmtub3duW10pLmluY2x1ZGVzKHNldmVyaXR5KSA/IHNldmVyaXR5IGFzIExvb2t1cFdhcm5pbmdTZXZlcml0eSA6ICd3YXJuaW5nJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBjb25zdCB0b29sY2hhaW4gPSBwYXJzZUxvb2t1cFRvb2xjaGFpbihjb250YWluZXIudG9vbGNoYWluLCBwbHVnaW4pO1xuICByZXR1cm4geyBwbHVnaW4sIHdhcm5pbmdzLCAuLi4odG9vbGNoYWluICYmIHsgdG9vbGNoYWluIH0pIH07XG59XG5cbi8qKlxuICogT25lIGxpbmUgc3VtbWFyaXppbmcgZ3JhZGVkIHdhcm5pbmdzLCBtb3N0IHNlcmlvdXMgZmlyc3Qg4oCUXG4gKiBgMyBwbHVnaW4gd2FybmluZ3M6IDEgY3JpdGljYWwsIDIgZXJyb3JgLiBOdWxsIHdoZW4gdGhlcmUgYXJlIG5vbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdW1tYXJpemVMb29rdXBXYXJuaW5ncyh3YXJuaW5nczogcmVhZG9ubHkgUGljazxMb29rdXBXYXJuaW5nLCAnc2V2ZXJpdHknPltdKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICh3YXJuaW5ncy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICBjb25zdCBwYXJ0cyA9IFsuLi5MT09LVVBfV0FSTklOR19TRVZFUklUSUVTXS5yZXZlcnNlKClcbiAgICAubWFwKChzZXYpID0+IFtzZXYsIHdhcm5pbmdzLmZpbHRlcigodykgPT4gdy5zZXZlcml0eSA9PT0gc2V2KS5sZW5ndGhdIGFzIGNvbnN0KVxuICAgIC5maWx0ZXIoKFssIG5dKSA9PiBuID4gMClcbiAgICAubWFwKChbc2V2LCBuXSkgPT4gYCR7bn0gJHtzZXZ9YCk7XG4gIHJldHVybiBgJHt3YXJuaW5ncy5sZW5ndGh9IHBsdWdpbiB3YXJuaW5nJHt3YXJuaW5ncy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ306ICR7cGFydHMuam9pbignLCAnKX1gO1xufVxuXG4vKiogV2h5IGEgbG9va3VwIGZvdW5kIG5vdGhpbmcsIGFzIHRoZSBwbHVnaW4gc2VydmljZSdzIDQwNCBgZGV0YWlscy5zdGF0ZWAgcmVwb3J0cyBpdC4gKi9cbmV4cG9ydCB0eXBlIExvb2t1cE5vdEZvdW5kU3RhdGUgPSAnZGVsZXRlZCcgfCAnaW5hY3RpdmUnIHwgJ3lhbmtlZCcgfCAnbWlzc2luZyc7XG5cbmNvbnN0IE5PVF9GT1VORF9TVEFURVM6IHJlYWRvbmx5IExvb2t1cE5vdEZvdW5kU3RhdGVbXSA9IFsnZGVsZXRlZCcsICdpbmFjdGl2ZScsICd5YW5rZWQnLCAnbWlzc2luZyddO1xuXG4vKipcbiAqIGBkZXRhaWxzLnN0YXRlYCBvZiBhIHJlZnVzZWQgbG9va3VwLCByZWFkIG9mZiBlaXRoZXIgYW4gYXhpb3Mtc3R5bGUgZXJyb3JcbiAqIChgZXJyLnJlc3BvbnNlLmRhdGFgKSBvciB0aGUgcmVzcG9uc2UgYm9keSBpdHNlbGYuIE51bGwgd2hlbiBhYnNlbnQvdW5rbm93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvb2t1cE5vdEZvdW5kU3RhdGUoZXJyT3JCb2R5OiB1bmtub3duKTogTG9va3VwTm90Rm91bmRTdGF0ZSB8IG51bGwge1xuICBpZiAoIWVyck9yQm9keSB8fCB0eXBlb2YgZXJyT3JCb2R5ICE9PSAnb2JqZWN0JykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGRhdGEgPSAoZXJyT3JCb2R5IGFzIHsgcmVzcG9uc2U/OiB7IGRhdGE/OiB1bmtub3duIH0gfSkucmVzcG9uc2U/LmRhdGEgPz8gZXJyT3JCb2R5O1xuICBjb25zdCBkZXRhaWxzID0gZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyAoZGF0YSBhcyB7IGRldGFpbHM/OiB1bmtub3duIH0pLmRldGFpbHMgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHN0YXRlID0gZGV0YWlscyAmJiB0eXBlb2YgZGV0YWlscyA9PT0gJ29iamVjdCcgPyAoZGV0YWlscyBhcyB7IHN0YXRlPzogdW5rbm93biB9KS5zdGF0ZSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gJ3N0cmluZycgJiYgKE5PVF9GT1VORF9TVEFURVMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHN0YXRlKSA/IHN0YXRlIGFzIExvb2t1cE5vdEZvdW5kU3RhdGUgOiBudWxsO1xufVxuXG4vKipcbiAqIFRoZSBtZXNzYWdlIGZvciBhbiBleGFjdCB2ZXJzaW9uIHBpbiB0aGF0IGRpZCBub3QgcmVzb2x2ZS4gU2hhcmVkIGJ5IHRoZVxuICogQ0xJJ3MgcHJlLXJlc29sdXRpb24gYW5kIHRoZSBkZXBsb3ktdGltZSBMYW1iZGEncyBDbG91ZEZvcm1hdGlvbiByZWFzb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGFjdFBpbk5vdEZvdW5kTWVzc2FnZShsYWJlbDogc3RyaW5nLCBwaW46IHN0cmluZywgc3RhdGU6IExvb2t1cE5vdEZvdW5kU3RhdGUgfCBudWxsKTogc3RyaW5nIHtcbiAgc3dpdGNoIChzdGF0ZSkge1xuICAgIGNhc2UgJ2RlbGV0ZWQnOiByZXR1cm4gYFBsdWdpbiBcIiR7bGFiZWx9XCIgdmVyc2lvbiAke3Bpbn0gd2FzIGRlbGV0ZWQgZnJvbSB5b3VyIG9yZ2FuaXphdGlvbmA7XG4gICAgY2FzZSAnaW5hY3RpdmUnOiByZXR1cm4gYFBsdWdpbiBcIiR7bGFiZWx9XCIgdmVyc2lvbiAke3Bpbn0gaXMgaW5hY3RpdmVgO1xuICAgIGNhc2UgJ3lhbmtlZCc6IHJldHVybiBgUGx1Z2luIFwiJHtsYWJlbH1cIiB2ZXJzaW9uICR7cGlufSB3YXMgeWFua2VkYDtcbiAgICBjYXNlICdtaXNzaW5nJzogcmV0dXJuIGBQbHVnaW4gXCIke2xhYmVsfVwiIHZlcnNpb24gJHtwaW59IGRvZXMgbm90IGV4aXN0YDtcbiAgICBkZWZhdWx0OiByZXR1cm4gYFBsdWdpbiBcIiR7bGFiZWx9XCIgdmVyc2lvbiAke3Bpbn0gZG9lcyBub3QgZXhpc3QgKG5ldmVyIHB1Ymxpc2hlZCwgb3IgcmVmdXNlZCBieSBpdHMgYnVpbGQncyB2dWxuZXJhYmlsaXR5IHNjYW4pYDtcbiAgfVxufVxuIl19
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC1lbnZlbG9wZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvcGx1Z2luLWxvb2t1cC1lbnZlbG9wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLDRFQUE0RTtBQUM1RSxpRUFBaUU7QUFDakUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHNCQUFzQixFQUE2QixNQUFNLDJDQUEyQyxDQUFDO0FBT3pJLHlDQUF5QztBQUN6QyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBcUMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztBQWFwSCx5SEFBeUg7QUFDekgsTUFBTSx3QkFBd0IsR0FBd0M7SUFDcEUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0NBQzVGLENBQUM7QUFDRixNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQThCLENBQUM7QUF5QmxHLDBGQUEwRjtBQUMxRixTQUFTLFlBQVksQ0FBQyxHQUFZO0lBQ2hDLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUEyQixFQUFFLENBQUM7SUFDdkMsS0FBSyxNQUFNLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxHQUFJLEdBQStCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEQsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRCxDQUFD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QztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxLQUFhLEVBQUUsR0FBVyxFQUFFLEtBQWlDO0lBQ25HLFFBQVEsS0FBSyxFQUFFLENBQUM7UUFDZCxLQUFLLFNBQVMsRUFBRSxPQUFPLFdBQVcsS0FBSyxhQUFhLEdBQUcscUNBQXFDLENBQUM7UUFDN0YsS0FBSyxVQUFVLEVBQUUsT0FBTyxXQUFXLEtBQUssYUFBYSxHQUFHLGNBQWMsQ0FBQztRQUN2RSxLQUFLLFFBQVEsRUFBRSxPQUFPLFdBQVcsS0FBSyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ3BFLEtBQUssU0FBUyxFQUFFLE9BQU8sV0FBVyxLQUFLLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQztRQUN6RSxTQUFTLE9BQU8sV0FBVyxLQUFLLGFBQWEsR0FBRyxpRkFBaUYsQ0FBQztJQUNwSSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vLyBUaGUgZGVwZW5kZW5jeS1mcmVlIHBsdWdpbi1jYXRhbG9nIHN1YnBhdGggb25seTogdGhlIHBsdWdpbi1sb29rdXAgTGFtYmRhXG4vLyBidW5kbGVzIHRoaXMgbW9kdWxlLCBzbyBpdCBtdXN0IG5vdCBwdWxsIGluIHRoZSBhcGktY29yZSByb290LlxuaW1wb3J0IHsgVE9PTENIQUlOX01FVEFEQVRBX1BSRUZJWCwgVE9PTENIQUlOX1JFU09MVkVEX1ZJQSwgdHlwZSBUb29sY2hhaW5SZXNvbHZlZFZpYSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlL3BsdWdpbi1jYXRhbG9nJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luVG9vbGNoYWluIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhJztcblxuLyoqIEhvdyBzZXJpb3VzIGEgbG9va3VwIHdhcm5pbmcgaXMgKHZ1bG5lcmFiaWxpdHkgc3RhdGUgaXMgZ3JhZGVkLCBuZXZlciByZWZ1c2VkKS4gKi9cbmV4cG9ydCB0eXBlIExvb2t1cFdhcm5pbmdTZXZlcml0eSA9ICdpbmZvJyB8ICd3YXJuaW5nJyB8ICdlcnJvcicgfCAnY3JpdGljYWwnO1xuXG4vKiogU2V2ZXJpdGllcywgbGVhc3QgdG8gbW9zdCBzZXJpb3VzLiAqL1xuZXhwb3J0IGNvbnN0IExPT0tVUF9XQVJOSU5HX1NFVkVSSVRJRVM6IHJlYWRvbmx5IExvb2t1cFdhcm5pbmdTZXZlcml0eVtdID0gWydpbmZvJywgJ3dhcm5pbmcnLCAnZXJyb3InLCAnY3JpdGljYWwnXTtcblxuLyoqIE9uZSB3YXJuaW5nIHJpZGluZyBiZXNpZGUgYSByZXNvbHZlZCBwbHVnaW4uICovXG5leHBvcnQgaW50ZXJmYWNlIExvb2t1cFdhcm5pbmcge1xuICByZWFkb25seSBjb2RlPzogc3RyaW5nO1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG4gIC8qKiBBYnNlbnQgb24gdGhlIHdpcmUg4oaSIGB3YXJuaW5nYC4gKi9cbiAgcmVhZG9ubHkgc2V2ZXJpdHk6IExvb2t1cFdhcm5pbmdTZXZlcml0eTtcbn1cblxuLyoqIFRoZSBleGFjdCB0b29sIHZlcnNpb25zIGEgdG9vbGNoYWluIHJlbGVhc2UgY2FycmllcyAodGhlIGJvb3RzdHJhcCBzcGVjJ3MgYHRvb2xjaGFpbmApLCBhcyBmYXIgYXMgYW4gYW5zd2VyIGNhcnJpZXMgdGhlbS4gKi9cbmV4cG9ydCB0eXBlIFRvb2xjaGFpblZlcnNpb25zID0gUGFydGlhbDxSZWFkb25seTxQbHVnaW5Ub29sY2hhaW4+PjtcblxuLyoqIEV2ZXJ5IHRvb2wgZmllbGQsIGtleWVkIHNvIGEgZmllbGQgYWRkZWQgdG8gYXBpLWNvcmUncyBgUGx1Z2luVG9vbGNoYWluU2NoZW1hYCBmYWlscyB0byBjb21waWxlIGhlcmUgdW50aWwgbGlzdGVkLiAqL1xuY29uc3QgVE9PTENIQUlOX1ZFUlNJT05fRklFTERTOiBSZWNvcmQ8a2V5b2YgUGx1Z2luVG9vbGNoYWluLCB0cnVlPiA9IHtcbiAgcGlwZWxpbmVNYW5hZ2VyOiB0cnVlLCBhd3NDZGs6IHRydWUsIGNka0Fzc2V0czogdHJ1ZSwgZXNidWlsZDogdHJ1ZSwgcG5wbTogdHJ1ZSwgbm9kZTogdHJ1ZSxcbn07XG5jb25zdCBUT09MQ0hBSU5fVkVSU0lPTl9LRVlTID0gT2JqZWN0LmtleXMoVE9PTENIQUlOX1ZFUlNJT05fRklFTERTKSBhcyAoa2V5b2YgUGx1Z2luVG9vbGNoYWluKVtdO1xuXG4vKipcbiAqIFRoZSByZWxlYXNlIGEgbWFuYWdlZC1uYW1lIGxvb2t1cCAoYHBpcGVsaW5lLWJvb3RzdHJhcGAsIGBjZGstc3ludGhgKVxuICogcmVzb2x2ZWQgdG86IGBkYXRhLnRvb2xjaGFpbmAgb2YgdGhlIGAvcGx1Z2lucy9sb29rdXBgIGFuc3dlci4gYHZlcnNpb25zYFxuICogaG9sZHMgdGhlIHRvb2wgdmVyc2lvbnMgd2hlbiB0aGUgYW5zd2VyIChvciB0aGUgcGx1Z2luIHJlY29yZCkgY2FycmllcyB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvb2t1cFRvb2xjaGFpbiB7XG4gIHJlYWRvbmx5IHJlbGVhc2VWZXJzaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc29sdmVkVmlhOiBUb29sY2hhaW5SZXNvbHZlZFZpYTtcbiAgcmVhZG9ubHkgdmVyc2lvbnM6IFRvb2xjaGFpblZlcnNpb25zO1xufVxuXG4vKipcbiAqIFRoZSByZXNvbHZlZCBgcGlwZWxpbmUtYm9vdHN0cmFwYCBoYWxmIG9mIGEgdG9vbGNoYWluIHJlbGVhc2U6IHRoZSBwbHVnaW5cbiAqIHJlY29yZCB0aGUgZGVmYXVsdCBDb2RlQnVpbGQgaW1hZ2UgaXMgcGlubmVkIHRvIChieSBpdHMgc2lnbmVkIGRpZ2VzdCkgYW5kXG4gKiB0aGUgcmVsZWFzZSBpdCBjYW1lIGZyb20uIFByb2R1Y2VkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyYCdzXG4gKiBgcmVzb2x2ZUJvb3RzdHJhcEltYWdlYCAob3IgYSBgLS10b29sY2hhaW4tZmlsZWApIGFuZCBwYXNzZWQgdG9cbiAqIGBQaXBlbGluZUJ1aWxkZXJgIGFzIGByZXNvbHZlZEJvb3RzdHJhcGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRCb290c3RyYXAge1xuICByZWFkb25seSBwbHVnaW46IFBsdWdpbjtcbiAgcmVhZG9ubHkgdG9vbGNoYWluOiBMb29rdXBUb29sY2hhaW47XG59XG5cbi8qKiBQaWNrIHRoZSBzdHJpbmcgdG9vbCB2ZXJzaW9ucyBvZmYgYW4gb2JqZWN0ICh1bmtub3duIGtleXMgYW5kIG5vbi1zdHJpbmdzIGlnbm9yZWQpLiAqL1xuZnVuY3Rpb24gcGlja1ZlcnNpb25zKHJhdzogdW5rbm93bik6IFRvb2xjaGFpblZlcnNpb25zIHtcbiAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gJ29iamVjdCcpIHJldHVybiB7fTtcbiAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIFRPT0xDSEFJTl9WRVJTSU9OX0tFWVMpIHtcbiAgICBjb25zdCB2ID0gKHJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XTtcbiAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubGVuZ3RoID4gMCkgb3V0W2tleV0gPSB2O1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBUaGUgdG9vbCB2ZXJzaW9ucyBhIHBsdWdpbiByb3cncyBgbWV0YWRhdGFgIGNhcnJpZXMgYXMgZmxhdCBgdG9vbGNoYWluLjxmaWVsZD5gIGtleXMuICovXG5mdW5jdGlvbiB2ZXJzaW9uc0Zyb21NZXRhZGF0YShtZXRhZGF0YTogdW5rbm93bik6IFRvb2xjaGFpblZlcnNpb25zIHtcbiAgaWYgKCFtZXRhZGF0YSB8fCB0eXBlb2YgbWV0YWRhdGEgIT09ICdvYmplY3QnKSByZXR1cm4ge307XG4gIGNvbnN0IGZpZWxkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMobWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgaWYgKGsuc3RhcnRzV2l0aChUT09MQ0hBSU5fTUVUQURBVEFfUFJFRklYKSkgZmllbGRzW2suc2xpY2UoVE9PTENIQUlOX01FVEFEQVRBX1BSRUZJWC5sZW5ndGgpXSA9IHY7XG4gIH1cbiAgcmV0dXJuIHBpY2tWZXJzaW9ucyhmaWVsZHMpO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgbG9va3VwJ3MgYHRvb2xjaGFpbmAgYmxvY2suIE51bGwgdW5sZXNzIGl0IGNhcnJpZXMgYSByZWxlYXNlIHZlcnNpb25cbiAqIGFuZCBhIGtub3duIGByZXNvbHZlZFZpYWAuIFRvb2wgdmVyc2lvbnMgY29tZSBmcm9tLCBsb3dlc3QgcHJlY2VkZW5jZSBmaXJzdDpcbiAqIHRoZSBwbHVnaW4gcm93J3MgYG1ldGFkYXRhYCAoYHRvb2xjaGFpbi48ZmllbGQ+YCBrZXlzLCB3aGVyZSB0aGUgcGxhdGZvcm1cbiAqIHBlcnNpc3RzIHRoZSBib290c3RyYXAgc3BlYydzIGB0b29sY2hhaW5gKSwgdGhlIHJlY29yZCdzIG93biBgdG9vbGNoYWluYCxcbiAqIHRoZSBibG9jaydzIGZsYXQgZmllbGRzLCB0aGVuIGB0b29sY2hhaW4udmVyc2lvbnNgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMb29rdXBUb29sY2hhaW4ocmF3OiB1bmtub3duLCBwbHVnaW4/OiB1bmtub3duKTogTG9va3VwVG9vbGNoYWluIHwgbnVsbCB7XG4gIGlmICghcmF3IHx8IHR5cGVvZiByYXcgIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgeyByZWxlYXNlVmVyc2lvbiwgcmVzb2x2ZWRWaWEsIHZlcnNpb25zIH0gPSByYXcgYXMgeyByZWxlYXNlVmVyc2lvbj86IHVua25vd247IHJlc29sdmVkVmlhPzogdW5rbm93bjsgdmVyc2lvbnM/OiB1bmtub3duIH07XG4gIGlmICh0eXBlb2YgcmVsZWFzZVZlcnNpb24gIT09ICdzdHJpbmcnIHx8IHJlbGVhc2VWZXJzaW9uLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gIGlmICghKFRPT0xDSEFJTl9SRVNPTFZFRF9WSUEgYXMgcmVhZG9ubHkgdW5rbm93bltdKS5pbmNsdWRlcyhyZXNvbHZlZFZpYSkpIHJldHVybiBudWxsO1xuICBjb25zdCByZWMgPSBwbHVnaW4gJiYgdHlwZW9mIHBsdWdpbiA9PT0gJ29iamVjdCcgPyBwbHVnaW4gYXMgeyB0b29sY2hhaW4/OiB1bmtub3duOyBtZXRhZGF0YT86IHVua25vd24gfSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHtcbiAgICByZWxlYXNlVmVyc2lvbixcbiAgICByZXNvbHZlZFZpYTogcmVzb2x2ZWRWaWEgYXMgVG9vbGNoYWluUmVzb2x2ZWRWaWEsXG4gICAgdmVyc2lvbnM6IHsgLi4udmVyc2lvbnNGcm9tTWV0YWRhdGEocmVjPy5tZXRhZGF0YSksIC4uLnBpY2tWZXJzaW9ucyhyZWM/LnRvb2xjaGFpbiksIC4uLnBpY2tWZXJzaW9ucyhyYXcpLCAuLi5waWNrVmVyc2lvbnModmVyc2lvbnMpIH0sXG4gIH07XG59XG5cbi8qKlxuICogVW53cmFwIGEgYC9wbHVnaW5zL2xvb2t1cGAgYW5zd2VyLiBUaGUgcGxhdGZvcm0ncyBzdWNjZXNzIGVudmVsb3BlIGlzXG4gKiBgeyBzdWNjZXNzLCBzdGF0dXNDb2RlLCBkYXRhOiB7IHBsdWdpbiwgd2FybmluZ3MgfSB9YCAobm90ZSB0aGUgZG91YmxlXG4gKiBuZXN0aW5nOiBgZGF0YS5wbHVnaW5gKTsgYHsgZGF0YTogUGx1Z2luIH1gLCBgeyBwbHVnaW4gfWAgYW5kIGEgYmFyZSBQbHVnaW5cbiAqIGFyZSB0b2xlcmF0ZWQgdG9vLiBSZXR1cm5zIHRoZSBwbHVnaW4gKG51bGwgd2hlbiBhYnNlbnQgb3IgbmFtZWxlc3MpIGFuZCB0aGVcbiAqIGdyYWRlZCB3YXJuaW5ncyAobGlmZWN5Y2xlLCB2dWxuZXJhYmlsaXR5LCBjb21wbGlhbmNlKSB0aGF0IHJpZGUgYmVzaWRlIGl0LFxuICogYW5kIOKAlCBmb3IgYSBtYW5hZ2VkIHRvb2xjaGFpbiBuYW1lIOKAlCB0aGUgcmVsZWFzZSBpdCByZXNvbHZlZCB0byAoYHRvb2xjaGFpbmApLlxuICpcbiAqIERlcGVuZGVuY3ktZnJlZSAodHlwZS1vbmx5IGltcG9ydHMpIHNvIHRoZSBwbHVnaW4tbG9va3VwIExhbWJkYSBjYW4gYnVuZGxlIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwTG9va3VwKGJvZHk6IHVua25vd24pOiB7IHBsdWdpbjogUGx1Z2luIHwgbnVsbDsgd2FybmluZ3M6IExvb2t1cFdhcm5pbmdbXTsgdG9vbGNoYWluPzogTG9va3VwVG9vbGNoYWluIH0ge1xuICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkgIT09ICdvYmplY3QnKSByZXR1cm4geyBwbHVnaW46IG51bGwsIHdhcm5pbmdzOiBbXSB9O1xuICBjb25zdCBpbm5lciA9IChib2R5IGFzIHsgZGF0YT86IHVua25vd24gfSkuZGF0YTtcbiAgY29uc3QgY29udGFpbmVyID0gKGlubmVyICYmIHR5cGVvZiBpbm5lciA9PT0gJ29iamVjdCcgPyBpbm5lciA6IGJvZHkpIGFzIHsgcGx1Z2luPzogdW5rbm93bjsgd2FybmluZ3M/OiB1bmtub3duOyB0b29sY2hhaW4/OiB1bmtub3duIH07XG4gIGNvbnN0IGNhbmRpZGF0ZSA9IGNvbnRhaW5lci5wbHVnaW4gPz8gY29udGFpbmVyO1xuICBjb25zdCBwbHVnaW4gPSBjYW5kaWRhdGUgJiYgdHlwZW9mIGNhbmRpZGF0ZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIChjYW5kaWRhdGUgYXMgeyBuYW1lPzogdW5rbm93biB9KS5uYW1lID09PSAnc3RyaW5nJ1xuICAgICYmIChjYW5kaWRhdGUgYXMgeyBuYW1lOiBzdHJpbmcgfSkubmFtZS5sZW5ndGggPiAwXG4gICAgPyBjYW5kaWRhdGUgYXMgUGx1Z2luXG4gICAgOiBudWxsO1xuICBjb25zdCB3YXJuaW5nczogTG9va3VwV2FybmluZ1tdID0gW107XG4gIGlmIChBcnJheS5pc0FycmF5KGNvbnRhaW5lci53YXJuaW5ncykpIHtcbiAgICBmb3IgKGNvbnN0IHcgb2YgY29udGFpbmVyLndhcm5pbmdzKSB7XG4gICAgICBpZiAoIXcgfHwgdHlwZW9mIHcgIT09ICdvYmplY3QnKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHsgY29kZSwgbWVzc2FnZSwgc2V2ZXJpdHkgfSA9IHcgYXMgeyBjb2RlPzogdW5rbm93bjsgbWVzc2FnZT86IHVua25vd247IHNldmVyaXR5PzogdW5rbm93biB9O1xuICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSAnc3RyaW5nJyB8fCBtZXNzYWdlLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG4gICAgICB3YXJuaW5ncy5wdXNoKHtcbiAgICAgICAgLi4uKHR5cGVvZiBjb2RlID09PSAnc3RyaW5nJyA/IHsgY29kZSB9IDoge30pLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBzZXZlcml0eTogKExPT0tVUF9XQVJOSU5HX1NFVkVSSVRJRVMgYXMgcmVhZG9ubHkgdW5rbm93bltdKS5pbmNsdWRlcyhzZXZlcml0eSkgPyBzZXZlcml0eSBhcyBMb29rdXBXYXJuaW5nU2V2ZXJpdHkgOiAnd2FybmluZycsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdG9vbGNoYWluID0gcGFyc2VMb29rdXBUb29sY2hhaW4oY29udGFpbmVyLnRvb2xjaGFpbiwgcGx1Z2luKTtcbiAgcmV0dXJuIHsgcGx1Z2luLCB3YXJuaW5ncywgLi4uKHRvb2xjaGFpbiAmJiB7IHRvb2xjaGFpbiB9KSB9O1xufVxuXG4vKipcbiAqIE9uZSBsaW5lIHN1bW1hcml6aW5nIGdyYWRlZCB3YXJuaW5ncywgbW9zdCBzZXJpb3VzIGZpcnN0IOKAlFxuICogYDMgcGx1Z2luIHdhcm5pbmdzOiAxIGNyaXRpY2FsLCAyIGVycm9yYC4gTnVsbCB3aGVuIHRoZXJlIGFyZSBub25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VtbWFyaXplTG9va3VwV2FybmluZ3Mod2FybmluZ3M6IHJlYWRvbmx5IFBpY2s8TG9va3VwV2FybmluZywgJ3NldmVyaXR5Jz5bXSk6IHN0cmluZyB8IG51bGwge1xuICBpZiAod2FybmluZ3MubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcGFydHMgPSBbLi4uTE9PS1VQX1dBUk5JTkdfU0VWRVJJVElFU10ucmV2ZXJzZSgpXG4gICAgLm1hcCgoc2V2KSA9PiBbc2V2LCB3YXJuaW5ncy5maWx0ZXIoKHcpID0+IHcuc2V2ZXJpdHkgPT09IHNldikubGVuZ3RoXSBhcyBjb25zdClcbiAgICAuZmlsdGVyKChbLCBuXSkgPT4gbiA+IDApXG4gICAgLm1hcCgoW3Nldiwgbl0pID0+IGAke259ICR7c2V2fWApO1xuICByZXR1cm4gYCR7d2FybmluZ3MubGVuZ3RofSBwbHVnaW4gd2FybmluZyR7d2FybmluZ3MubGVuZ3RoID09PSAxID8gJycgOiAncyd9OiAke3BhcnRzLmpvaW4oJywgJyl9YDtcbn1cblxuLyoqIFdoeSBhIGxvb2t1cCBmb3VuZCBub3RoaW5nLCBhcyB0aGUgcGx1Z2luIHNlcnZpY2UncyA0MDQgYGRldGFpbHMuc3RhdGVgIHJlcG9ydHMgaXQuICovXG5leHBvcnQgdHlwZSBMb29rdXBOb3RGb3VuZFN0YXRlID0gJ2RlbGV0ZWQnIHwgJ2luYWN0aXZlJyB8ICd5YW5rZWQnIHwgJ21pc3NpbmcnO1xuXG5jb25zdCBOT1RfRk9VTkRfU1RBVEVTOiByZWFkb25seSBMb29rdXBOb3RGb3VuZFN0YXRlW10gPSBbJ2RlbGV0ZWQnLCAnaW5hY3RpdmUnLCAneWFua2VkJywgJ21pc3NpbmcnXTtcblxuLyoqXG4gKiBgZGV0YWlscy5zdGF0ZWAgb2YgYSByZWZ1c2VkIGxvb2t1cCwgcmVhZCBvZmYgZWl0aGVyIGFuIGF4aW9zLXN0eWxlIGVycm9yXG4gKiAoYGVyci5yZXNwb25zZS5kYXRhYCkgb3IgdGhlIHJlc3BvbnNlIGJvZHkgaXRzZWxmLiBOdWxsIHdoZW4gYWJzZW50L3Vua25vd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb29rdXBOb3RGb3VuZFN0YXRlKGVyck9yQm9keTogdW5rbm93bik6IExvb2t1cE5vdEZvdW5kU3RhdGUgfCBudWxsIHtcbiAgaWYgKCFlcnJPckJvZHkgfHwgdHlwZW9mIGVyck9yQm9keSAhPT0gJ29iamVjdCcpIHJldHVybiBudWxsO1xuICBjb25zdCBkYXRhID0gKGVyck9yQm9keSBhcyB7IHJlc3BvbnNlPzogeyBkYXRhPzogdW5rbm93biB9IH0pLnJlc3BvbnNlPy5kYXRhID8/IGVyck9yQm9keTtcbiAgY29uc3QgZGV0YWlscyA9IGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gKGRhdGEgYXMgeyBkZXRhaWxzPzogdW5rbm93biB9KS5kZXRhaWxzIDogdW5kZWZpbmVkO1xuICBjb25zdCBzdGF0ZSA9IGRldGFpbHMgJiYgdHlwZW9mIGRldGFpbHMgPT09ICdvYmplY3QnID8gKGRldGFpbHMgYXMgeyBzdGF0ZT86IHVua25vd24gfSkuc3RhdGUgOiB1bmRlZmluZWQ7XG4gIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09ICdzdHJpbmcnICYmIChOT1RfRk9VTkRfU1RBVEVTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyhzdGF0ZSkgPyBzdGF0ZSBhcyBMb29rdXBOb3RGb3VuZFN0YXRlIDogbnVsbDtcbn1cblxuLyoqXG4gKiBUaGUgbWVzc2FnZSBmb3IgYW4gZXhhY3QgdmVyc2lvbiBwaW4gdGhhdCBkaWQgbm90IHJlc29sdmUuIFNoYXJlZCBieSB0aGVcbiAqIENMSSdzIHByZS1yZXNvbHV0aW9uIGFuZCB0aGUgZGVwbG95LXRpbWUgTGFtYmRhJ3MgQ2xvdWRGb3JtYXRpb24gcmVhc29uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhhY3RQaW5Ob3RGb3VuZE1lc3NhZ2UobGFiZWw6IHN0cmluZywgcGluOiBzdHJpbmcsIHN0YXRlOiBMb29rdXBOb3RGb3VuZFN0YXRlIHwgbnVsbCk6IHN0cmluZyB7XG4gIHN3aXRjaCAoc3RhdGUpIHtcbiAgICBjYXNlICdkZWxldGVkJzogcmV0dXJuIGBQbHVnaW4gXCIke2xhYmVsfVwiIHZlcnNpb24gJHtwaW59IHdhcyBkZWxldGVkIGZyb20geW91ciBvcmdhbml6YXRpb25gO1xuICAgIGNhc2UgJ2luYWN0aXZlJzogcmV0dXJuIGBQbHVnaW4gXCIke2xhYmVsfVwiIHZlcnNpb24gJHtwaW59IGlzIGluYWN0aXZlYDtcbiAgICBjYXNlICd5YW5rZWQnOiByZXR1cm4gYFBsdWdpbiBcIiR7bGFiZWx9XCIgdmVyc2lvbiAke3Bpbn0gd2FzIHlhbmtlZGA7XG4gICAgY2FzZSAnbWlzc2luZyc6IHJldHVybiBgUGx1Z2luIFwiJHtsYWJlbH1cIiB2ZXJzaW9uICR7cGlufSBkb2VzIG5vdCBleGlzdGA7XG4gICAgZGVmYXVsdDogcmV0dXJuIGBQbHVnaW4gXCIke2xhYmVsfVwiIHZlcnNpb24gJHtwaW59IGRvZXMgbm90IGV4aXN0IChuZXZlciBwdWJsaXNoZWQsIG9yIHJlZnVzZWQgYnkgaXRzIGJ1aWxkJ3MgdnVsbmVyYWJpbGl0eSBzY2FuKWA7XG4gIH1cbn1cbiJdfQ==
@@ -10,8 +10,7 @@
10
10
  * CodePipeline, never recomputed from our own ids — they are exactly the names
11
11
  * CodePipeline state-change events report.
12
12
  */
13
- import { BUILD_IMAGE_MANIFEST_ACTION, BUILD_IMAGE_MANIFEST_STAGE, BUILD_IMAGE_STEP_KEY } from '@pipeline-builder/api-core';
14
- import type { ToolchainResolvedVia } from './plugin-lookup-envelope.js';
13
+ import { BUILD_IMAGE_MANIFEST_ACTION, BUILD_IMAGE_MANIFEST_STAGE, BUILD_IMAGE_STEP_KEY, type ToolchainResolvedVia } from '@pipeline-builder/api-core';
15
14
  export { BUILD_IMAGE_MANIFEST_ACTION, BUILD_IMAGE_MANIFEST_STAGE, BUILD_IMAGE_STEP_KEY };
16
15
  /**
17
16
  * File the synth app writes the manifest to, inside the cloud assembly
@@ -50,4 +50,4 @@ export function pluginImageRepository(plugin) {
50
50
  }
51
51
  /** A plugin image repository lookup may return: `public/<publisher>/<name>`, `org-<id>/<name>` or `system/<name>`. */
52
52
  export const PLUGIN_IMAGE_REPOSITORY_RE = /^(?:public\/[a-z0-9]+(?:-[a-z0-9]+)*|org-[a-z0-9][a-z0-9-]*|system)\/[a-z0-9][a-z0-9._-]*$/;
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1tYW5pZmVzdC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvc3RlcC1tYW5pZmVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7OztHQVdHO0FBRUgsT0FBTyxFQUNMLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLG9CQUFvQixFQUFFLGFBQWEsR0FDN0YsTUFBTSw0QkFBNEIsQ0FBQztBQUdwQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztBQUV6Rjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsdUJBQXVCLENBQUM7QUFFMUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLHNDQUFzQyxDQUFDO0FBZ0Q1RSx1RUFBdUU7QUFDdkUsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQXdCO0lBQ3hELE9BQVEsS0FBNEIsQ0FBQyxJQUFJLEtBQUssYUFBYTtXQUN0RCxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssMEJBQTBCLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSywyQkFBMkIsQ0FBQyxDQUFDO0FBQzVHLENBQUM7QUFTRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLE1BQXNCO0lBQzFELElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxlQUFlO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDcEYsT0FBTyxHQUFHLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdkMsQ0FBQztBQUVELHNIQUFzSDtBQUN0SCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyw0RkFBNEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFN0ZXAgbWFuaWZlc3Q6IHdoaWNoIHBsdWdpbiBlYWNoIENvZGVQaXBlbGluZSBhY3Rpb25cbiAqIG9mIGEgZGVwbG95ZWQgcGlwZWxpbmUgcnVucy4gQ0RLLWZyZWUgaGFsZiDigJQgdGhlIHNoYXBlcyBhbmQgaGVscGVycyBzaGFyZWQgYnlcbiAqIHRoZSBzeW50aCAod2hpY2ggcmVjb3JkcyBpdCwgc2VlIGBwaXBlbGluZS9zdGVwLW1hbmlmZXN0LXJlY29yZGVyLnRzYCksIHRoZVxuICogQ0xJICh3aGljaCBzaGlwcyBpdCB3aXRoIHRoZSByZWdpc3RyeSByZWdpc3RyYXRpb24pIGFuZCB0aGUgcGlwZWxpbmUgc2VydmljZVxuICogKHdoaWNoIHZhbGlkYXRlcyBhbmQgc3RvcmVzIGl0IGluIGBwaXBlbGluZV9zdGVwX21hbmlmZXN0c2ApLlxuICpcbiAqIEV2ZW50IGluZ2VzdCBqb2lucyBgcGlwZWxpbmVfZXZlbnRzYCBvbiAocGlwZWxpbmVfaWQsIHN0YWdlX25hbWUsXG4gKiBhY3Rpb25fbmFtZSksIHNvIGBzdGFnZU5hbWVgL2BhY3Rpb25OYW1lYCBoZXJlIGFyZSByZWFkIG9mZiB0aGUgQlVJTFRcbiAqIENvZGVQaXBlbGluZSwgbmV2ZXIgcmVjb21wdXRlZCBmcm9tIG91ciBvd24gaWRzIOKAlCB0aGV5IGFyZSBleGFjdGx5IHRoZSBuYW1lc1xuICogQ29kZVBpcGVsaW5lIHN0YXRlLWNoYW5nZSBldmVudHMgcmVwb3J0LlxuICovXG5cbmltcG9ydCB7XG4gIEJVSUxEX0lNQUdFX01BTklGRVNUX0FDVElPTiwgQlVJTERfSU1BR0VfTUFOSUZFU1RfU1RBR0UsIEJVSUxEX0lNQUdFX1NURVBfS0VZLCBTWVNURU1fT1JHX0lELFxufSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IFRvb2xjaGFpblJlc29sdmVkVmlhIH0gZnJvbSAnLi9wbHVnaW4tbG9va3VwLWVudmVsb3BlLmpzJztcblxuZXhwb3J0IHsgQlVJTERfSU1BR0VfTUFOSUZFU1RfQUNUSU9OLCBCVUlMRF9JTUFHRV9NQU5JRkVTVF9TVEFHRSwgQlVJTERfSU1BR0VfU1RFUF9LRVkgfTtcblxuLyoqXG4gKiBGaWxlIHRoZSBzeW50aCBhcHAgd3JpdGVzIHRoZSBtYW5pZmVzdCB0bywgaW5zaWRlIHRoZSBjbG91ZCBhc3NlbWJseVxuICogZGlyZWN0b3J5IChgY2RrIGRlcGxveSAtLW91dHB1dD08ZGlyPmApLiBUaGUgQ0xJIHJlYWRzIGl0IGJhY2sgYWZ0ZXIgYVxuICogc3VjY2Vzc2Z1bCBkZXBsb3kgYW5kIGZvcndhcmRzIGl0IG9uIHRoZSByZWdpc3RyeSBQT1NULlxuICovXG5leHBvcnQgY29uc3QgU1RFUF9NQU5JRkVTVF9GSUxFID0gJ3BiLXN0ZXAtbWFuaWZlc3QuanNvbic7XG5cbi8qKlxuICogYGlkYCBvZiBldmVyeSBzeW50aGVzaXplZCBwbGFjZWhvbGRlciBwbHVnaW4gKFBsdWdpbkxvb2t1cCBgZmFsbGJhY2soKWAgL1xuICogYGJvb3RzdHJhcCgpYCkg4oCUIGEgcmVjb3JkIHN0YW5kaW5nIGluIGZvciBhIGxvb2t1cCB0aGF0IGNvdWxkIG5vdCByZXNvbHZlIGF0XG4gKiBzeW50aC4gTmV2ZXIgYSByZWFsIGBwbHVnaW5zYCByb3csIHNvIHRoZSBzdGVwIG1hbmlmZXN0IG5ldmVyIHJlY29yZHMgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBQTEFDRUhPTERFUl9QTFVHSU5fSUQgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcblxuLyoqXG4gKiBPbmUgbWFuaWZlc3QgZW50cnkgYXMgdGhlIHN5bnRoIHJlY29yZHMgaXQuIENhcnJpZXMgdGhlIHJlc29sdmVkIHBsdWdpblxuICogcmVjb3JkJ3MgaWQgc28gdGhlIHBpcGVsaW5lIHNlcnZpY2UgY2FuIHJlLXJlc29sdmUgdGhlIGF1dGhvcml0YXRpdmVcbiAqIG5hbWUvdmVyc2lvbi9kaWdlc3Qvb3duZXIgaXRzZWxmIOKAlCB0aGUgQ0xJJ3MgY2xhaW0gaXMgbmV2ZXIgdHJ1c3RlZCBmb3JcbiAqIGFueXRoaW5nIHRoYXQgZmVlZHMgY3Jvc3Mtb3JnIHN0YXRzIChwdWJsaXNoZXIsIHZlcmlmaWVkIHVzZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcE1hbmlmZXN0RW50cnkge1xuICAvKiogQ29kZVBpcGVsaW5lIHN0YWdlIG5hbWUsIGFzIHRoZSBidWlsdCBwaXBlbGluZSBuYW1lcyBpdC4gKi9cbiAgcmVhZG9ubHkgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIC8qKiBDb2RlUGlwZWxpbmUgYWN0aW9uIG5hbWUsIGFzIHRoZSBidWlsdCBwaXBlbGluZSBuYW1lcyBpdC4gKi9cbiAgcmVhZG9ubHkgYWN0aW9uTmFtZTogc3RyaW5nO1xuICAvKiogYHBsdWdpbnMuaWRgIG9mIHRoZSByZXNvbHZlZCBwbHVnaW4gcmVjb3JkLiAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuICByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsdWdpblZlcnNpb246IHN0cmluZztcbiAgLyoqIFNpZ25lZCBpbWFnZSBkaWdlc3QgdGhlIHN0ZXAgaXMgcGlubmVkIHRvOyBudWxsIGZvciBpbWFnZS1sZXNzIHBsdWdpbnMuICovXG4gIHJlYWRvbmx5IGltYWdlRGlnZXN0OiBzdHJpbmcgfCBudWxsO1xuICAvKipcbiAgICogVGhlIHN0ZXAncyBsYWJlbCAoYHBsdWdpblN0ZXBMYWJlbGA6IGBzeW50aGAgb3IgYDxzdGFnZT4vPGFsaWFzID8/IG5hbWU+YCkg4oCUXG4gICAqIHdoYXQgdGhlIENMSSBhbmQgdGhlIGxvb2t1cCBMYW1iZGEgc2VuZCBhcyBsb29rdXAgYGNvbnRleHQuc3RlcEtleXNgLCBhbmQgdGhlXG4gICAqIHJ1bi10aW1lIGNoZWNrIGFza3MgYWJvdXQuIExldHMgdGhlIHBsYXRmb3JtIGpvaW4gbG9va3VwIHdhcm5pbmdzIHRvIHRoaXNcbiAgICogbWFuaWZlc3Qgcm93LlxuICAgKi9cbiAgcmVhZG9ubHkgc3RlcEtleT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGlwZWxpbmUncyBCVUlMRCBJTUFHRTogdGhlIHRvb2xjaGFpbiByZWxlYXNlJ3MgYHBpcGVsaW5lLWJvb3RzdHJhcGAgaGFsZlxuICogZXZlcnkgcGx1Z2luLWxlc3MgYWN0aW9uIHJ1bnMgb24gKGRvY3MvcGxhbnMvYm9vdHN0cmFwLWltYWdlLXZlcnNpb25pbmcubWQgwqc0KS5cbiAqIE5vdCBhIHN0ZXAg4oCUIGl0IHJpZGVzIHRoZSBtYW5pZmVzdCBhcyBhIG5vbi1zdGVwIGVudHJ5IHVuZGVyIHRoZVxuICogYGJ1aWxkLWltYWdlYCBrZXkgYW5kIHRoZSBzZW50aW5lbCAoc3RhZ2UsIGFjdGlvbikgdGhlIHBsYXRmb3JtIHN0b3JlcyBpdFxuICogdW5kZXIsIHNvIHRoZSBkZXBsb3ktcmVmZXJlbmNlIHBhdGggKGluLXVzZSBwcm90ZWN0aW9uKSBjb3VudHMgdGhlIHJlbGVhc2UuXG4gKiBgcGx1Z2luVmVyc2lvbmAgSVMgdGhlIHJlbGVhc2UgdmVyc2lvbiAoYm90aCBoYWx2ZXMgc2hhcmUgaXQpOyB0aGUgcGxhdGZvcm1cbiAqIHJlLXJlYWRzIG5hbWUvdmVyc2lvbi9kaWdlc3QgZnJvbSB0aGUgYHBsdWdpbklkYCByb3cgYXMgZm9yIGV2ZXJ5IGVudHJ5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkSW1hZ2VNYW5pZmVzdEVudHJ5IGV4dGVuZHMgU3RlcE1hbmlmZXN0RW50cnkge1xuICByZWFkb25seSBraW5kOiAnYnVpbGQtaW1hZ2UnO1xuICByZWFkb25seSBzdGFnZU5hbWU6IHR5cGVvZiBCVUlMRF9JTUFHRV9NQU5JRkVTVF9TVEFHRTtcbiAgcmVhZG9ubHkgYWN0aW9uTmFtZTogdHlwZW9mIEJVSUxEX0lNQUdFX01BTklGRVNUX0FDVElPTjtcbiAgcmVhZG9ubHkgc3RlcEtleTogdHlwZW9mIEJVSUxEX0lNQUdFX1NURVBfS0VZO1xuICByZWFkb25seSByZWxlYXNlVmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBpbWFnZVJlcG9zaXRvcnk6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBIb3cgdGhlIHJlbGVhc2Ugd2FzIGNob3NlbiBmb3IgdGhpcyBwaXBlbGluZSBhdCBzeW50aC4gKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZWRWaWE6IFRvb2xjaGFpblJlc29sdmVkVmlhO1xufVxuXG4vKiogV2hldGhlciBhIG1hbmlmZXN0IGVudHJ5IGlzIHRoZSB7QGxpbmsgQnVpbGRJbWFnZU1hbmlmZXN0RW50cnl9LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQnVpbGRJbWFnZUVudHJ5KGVudHJ5OiBTdGVwTWFuaWZlc3RFbnRyeSk6IGVudHJ5IGlzIEJ1aWxkSW1hZ2VNYW5pZmVzdEVudHJ5IHtcbiAgcmV0dXJuIChlbnRyeSBhcyB7IGtpbmQ/OiB1bmtub3duIH0pLmtpbmQgPT09ICdidWlsZC1pbWFnZSdcbiAgICB8fCAoZW50cnkuc3RhZ2VOYW1lID09PSBCVUlMRF9JTUFHRV9NQU5JRkVTVF9TVEFHRSAmJiBlbnRyeS5hY3Rpb25OYW1lID09PSBCVUlMRF9JTUFHRV9NQU5JRkVTVF9BQ1RJT04pO1xufVxuXG4vKiogVGhlIHBsdWdpbiBmaWVsZHMge0BsaW5rIHBsdWdpbkltYWdlUmVwb3NpdG9yeX0gcmVhZHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkltYWdlUmVmIHtcbiAgcmVhZG9ubHkgb3JnSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBidWlsZFR5cGU/OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKipcbiAqIFJlZ2lzdHJ5IHJlcG9zaXRvcnkgYW4gb3JnLW93bmVkIHBsdWdpbiBST1cncyBpbWFnZSBsaXZlcyBhdFxuICogKGA8bmFtZXNwYWNlPi88bmFtZT5gLCBubyBob3N0LCBubyBkaWdlc3QpOiB0aGUgc3lzdGVtIG9yZydzIHVuZGVyXG4gKiBgc3lzdGVtL2AsIGEgdGVuYW50J3MgdW5kZXIgYG9yZy08b3JnSWQ+L2AuIE11c3QgbWF0Y2ggdGhlIHB1c2ggc2lkZVxuICogKGFwaS9wbHVnaW4gYHBsdWdpblVyaWApLiBSZXR1cm5zIG51bGwgZm9yIGEgYG1ldGFkYXRhX29ubHlgIHBsdWdpbi5cbiAqXG4gKiBPbmx5IGZvciByb3dzIHRoZSBjYWxsZXIncyBvcmcgcmVzb2x2ZXMgYXMgaXRzIE9XTiAob3IgaXRzIHBhcmVudCdzKTogdGhlXG4gKiBwbHVnaW4gbG9va3VwIHN0YW1wcyBpdCBhcyB0aGUgcmVjb3JkJ3MgYGltYWdlUmVwb3NpdG9yeWAuIEEgbGlzdGVkIHBsdWdpbidzXG4gKiByZXBvc2l0b3J5IGlzIGl0cyBsaXN0aW5nIHZlcnNpb24ncyBgcHVibGljLzxwdWJsaXNoZXI+LzxuYW1lPmAgY29weSDigJRcbiAqIHN5bnRoIG5ldmVyIGRlcml2ZXMgYSByZXBvc2l0b3J5IGl0c2VsZi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsdWdpbkltYWdlUmVwb3NpdG9yeShwbHVnaW46IFBsdWdpbkltYWdlUmVmKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChwbHVnaW4uYnVpbGRUeXBlID09PSAnbWV0YWRhdGFfb25seScpIHJldHVybiBudWxsO1xuICBjb25zdCBuYW1lc3BhY2UgPSBwbHVnaW4ub3JnSWQgPT09IFNZU1RFTV9PUkdfSUQgPyAnc3lzdGVtJyA6IGBvcmctJHtwbHVnaW4ub3JnSWR9YDtcbiAgcmV0dXJuIGAke25hbWVzcGFjZX0vJHtwbHVnaW4ubmFtZX1gO1xufVxuXG4vKiogQSBwbHVnaW4gaW1hZ2UgcmVwb3NpdG9yeSBsb29rdXAgbWF5IHJldHVybjogYHB1YmxpYy88cHVibGlzaGVyPi88bmFtZT5gLCBgb3JnLTxpZD4vPG5hbWU+YCBvciBgc3lzdGVtLzxuYW1lPmAuICovXG5leHBvcnQgY29uc3QgUExVR0lOX0lNQUdFX1JFUE9TSVRPUllfUkUgPSAvXig/OnB1YmxpY1xcL1thLXowLTldKyg/Oi1bYS16MC05XSspKnxvcmctW2EtejAtOV1bYS16MC05LV0qfHN5c3RlbSlcXC9bYS16MC05XVthLXowLTkuXy1dKiQvO1xuIl19
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1tYW5pZmVzdC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvc3RlcC1tYW5pZmVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7OztHQVdHO0FBRUgsT0FBTyxFQUNMLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLG9CQUFvQixFQUFFLGFBQWEsR0FDN0YsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztBQUV6Rjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsdUJBQXVCLENBQUM7QUFFMUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLHNDQUFzQyxDQUFDO0FBZ0Q1RSx1RUFBdUU7QUFDdkUsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQXdCO0lBQ3hELE9BQVEsS0FBNEIsQ0FBQyxJQUFJLEtBQUssYUFBYTtXQUN0RCxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssMEJBQTBCLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSywyQkFBMkIsQ0FBQyxDQUFDO0FBQzVHLENBQUM7QUFTRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLE1BQXNCO0lBQzFELElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxlQUFlO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDcEYsT0FBTyxHQUFHLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdkMsQ0FBQztBQUVELHNIQUFzSDtBQUN0SCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyw0RkFBNEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFN0ZXAgbWFuaWZlc3Q6IHdoaWNoIHBsdWdpbiBlYWNoIENvZGVQaXBlbGluZSBhY3Rpb25cbiAqIG9mIGEgZGVwbG95ZWQgcGlwZWxpbmUgcnVucy4gQ0RLLWZyZWUgaGFsZiDigJQgdGhlIHNoYXBlcyBhbmQgaGVscGVycyBzaGFyZWQgYnlcbiAqIHRoZSBzeW50aCAod2hpY2ggcmVjb3JkcyBpdCwgc2VlIGBwaXBlbGluZS9zdGVwLW1hbmlmZXN0LXJlY29yZGVyLnRzYCksIHRoZVxuICogQ0xJICh3aGljaCBzaGlwcyBpdCB3aXRoIHRoZSByZWdpc3RyeSByZWdpc3RyYXRpb24pIGFuZCB0aGUgcGlwZWxpbmUgc2VydmljZVxuICogKHdoaWNoIHZhbGlkYXRlcyBhbmQgc3RvcmVzIGl0IGluIGBwaXBlbGluZV9zdGVwX21hbmlmZXN0c2ApLlxuICpcbiAqIEV2ZW50IGluZ2VzdCBqb2lucyBgcGlwZWxpbmVfZXZlbnRzYCBvbiAocGlwZWxpbmVfaWQsIHN0YWdlX25hbWUsXG4gKiBhY3Rpb25fbmFtZSksIHNvIGBzdGFnZU5hbWVgL2BhY3Rpb25OYW1lYCBoZXJlIGFyZSByZWFkIG9mZiB0aGUgQlVJTFRcbiAqIENvZGVQaXBlbGluZSwgbmV2ZXIgcmVjb21wdXRlZCBmcm9tIG91ciBvd24gaWRzIOKAlCB0aGV5IGFyZSBleGFjdGx5IHRoZSBuYW1lc1xuICogQ29kZVBpcGVsaW5lIHN0YXRlLWNoYW5nZSBldmVudHMgcmVwb3J0LlxuICovXG5cbmltcG9ydCB7XG4gIEJVSUxEX0lNQUdFX01BTklGRVNUX0FDVElPTiwgQlVJTERfSU1BR0VfTUFOSUZFU1RfU1RBR0UsIEJVSUxEX0lNQUdFX1NURVBfS0VZLCBTWVNURU1fT1JHX0lELCB0eXBlIFRvb2xjaGFpblJlc29sdmVkVmlhLFxufSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5cbmV4cG9ydCB7IEJVSUxEX0lNQUdFX01BTklGRVNUX0FDVElPTiwgQlVJTERfSU1BR0VfTUFOSUZFU1RfU1RBR0UsIEJVSUxEX0lNQUdFX1NURVBfS0VZIH07XG5cbi8qKlxuICogRmlsZSB0aGUgc3ludGggYXBwIHdyaXRlcyB0aGUgbWFuaWZlc3QgdG8sIGluc2lkZSB0aGUgY2xvdWQgYXNzZW1ibHlcbiAqIGRpcmVjdG9yeSAoYGNkayBkZXBsb3kgLS1vdXRwdXQ9PGRpcj5gKS4gVGhlIENMSSByZWFkcyBpdCBiYWNrIGFmdGVyIGFcbiAqIHN1Y2Nlc3NmdWwgZGVwbG95IGFuZCBmb3J3YXJkcyBpdCBvbiB0aGUgcmVnaXN0cnkgUE9TVC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNURVBfTUFOSUZFU1RfRklMRSA9ICdwYi1zdGVwLW1hbmlmZXN0Lmpzb24nO1xuXG4vKipcbiAqIGBpZGAgb2YgZXZlcnkgc3ludGhlc2l6ZWQgcGxhY2Vob2xkZXIgcGx1Z2luIChQbHVnaW5Mb29rdXAgYGZhbGxiYWNrKClgIC9cbiAqIGBib290c3RyYXAoKWApIOKAlCBhIHJlY29yZCBzdGFuZGluZyBpbiBmb3IgYSBsb29rdXAgdGhhdCBjb3VsZCBub3QgcmVzb2x2ZSBhdFxuICogc3ludGguIE5ldmVyIGEgcmVhbCBgcGx1Z2luc2Agcm93LCBzbyB0aGUgc3RlcCBtYW5pZmVzdCBuZXZlciByZWNvcmRzIGl0LlxuICovXG5leHBvcnQgY29uc3QgUExBQ0VIT0xERVJfUExVR0lOX0lEID0gJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCc7XG5cbi8qKlxuICogT25lIG1hbmlmZXN0IGVudHJ5IGFzIHRoZSBzeW50aCByZWNvcmRzIGl0LiBDYXJyaWVzIHRoZSByZXNvbHZlZCBwbHVnaW5cbiAqIHJlY29yZCdzIGlkIHNvIHRoZSBwaXBlbGluZSBzZXJ2aWNlIGNhbiByZS1yZXNvbHZlIHRoZSBhdXRob3JpdGF0aXZlXG4gKiBuYW1lL3ZlcnNpb24vZGlnZXN0L293bmVyIGl0c2VsZiDigJQgdGhlIENMSSdzIGNsYWltIGlzIG5ldmVyIHRydXN0ZWQgZm9yXG4gKiBhbnl0aGluZyB0aGF0IGZlZWRzIGNyb3NzLW9yZyBzdGF0cyAocHVibGlzaGVyLCB2ZXJpZmllZCB1c2UpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBNYW5pZmVzdEVudHJ5IHtcbiAgLyoqIENvZGVQaXBlbGluZSBzdGFnZSBuYW1lLCBhcyB0aGUgYnVpbHQgcGlwZWxpbmUgbmFtZXMgaXQuICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuICAvKiogQ29kZVBpcGVsaW5lIGFjdGlvbiBuYW1lLCBhcyB0aGUgYnVpbHQgcGlwZWxpbmUgbmFtZXMgaXQuICovXG4gIHJlYWRvbmx5IGFjdGlvbk5hbWU6IHN0cmluZztcbiAgLyoqIGBwbHVnaW5zLmlkYCBvZiB0aGUgcmVzb2x2ZWQgcGx1Z2luIHJlY29yZC4gKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBwbHVnaW5WZXJzaW9uOiBzdHJpbmc7XG4gIC8qKiBTaWduZWQgaW1hZ2UgZGlnZXN0IHRoZSBzdGVwIGlzIHBpbm5lZCB0bzsgbnVsbCBmb3IgaW1hZ2UtbGVzcyBwbHVnaW5zLiAqL1xuICByZWFkb25seSBpbWFnZURpZ2VzdDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqXG4gICAqIFRoZSBzdGVwJ3MgbGFiZWwgKGBwbHVnaW5TdGVwTGFiZWxgOiBgc3ludGhgIG9yIGA8c3RhZ2U+LzxhbGlhcyA/PyBuYW1lPmApIOKAlFxuICAgKiB3aGF0IHRoZSBDTEkgYW5kIHRoZSBsb29rdXAgTGFtYmRhIHNlbmQgYXMgbG9va3VwIGBjb250ZXh0LnN0ZXBLZXlzYCwgYW5kIHRoZVxuICAgKiBydW4tdGltZSBjaGVjayBhc2tzIGFib3V0LiBMZXRzIHRoZSBwbGF0Zm9ybSBqb2luIGxvb2t1cCB3YXJuaW5ncyB0byB0aGlzXG4gICAqIG1hbmlmZXN0IHJvdy5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZXBLZXk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHBpcGVsaW5lJ3MgQlVJTEQgSU1BR0U6IHRoZSB0b29sY2hhaW4gcmVsZWFzZSdzIGBwaXBlbGluZS1ib290c3RyYXBgIGhhbGZcbiAqIGV2ZXJ5IHBsdWdpbi1sZXNzIGFjdGlvbiBydW5zIG9uIChkb2NzL3BsYW5zL2Jvb3RzdHJhcC1pbWFnZS12ZXJzaW9uaW5nLm1kIMKnNCkuXG4gKiBOb3QgYSBzdGVwIOKAlCBpdCByaWRlcyB0aGUgbWFuaWZlc3QgYXMgYSBub24tc3RlcCBlbnRyeSB1bmRlciB0aGVcbiAqIGBidWlsZC1pbWFnZWAga2V5IGFuZCB0aGUgc2VudGluZWwgKHN0YWdlLCBhY3Rpb24pIHRoZSBwbGF0Zm9ybSBzdG9yZXMgaXRcbiAqIHVuZGVyLCBzbyB0aGUgZGVwbG95LXJlZmVyZW5jZSBwYXRoIChpbi11c2UgcHJvdGVjdGlvbikgY291bnRzIHRoZSByZWxlYXNlLlxuICogYHBsdWdpblZlcnNpb25gIElTIHRoZSByZWxlYXNlIHZlcnNpb24gKGJvdGggaGFsdmVzIHNoYXJlIGl0KTsgdGhlIHBsYXRmb3JtXG4gKiByZS1yZWFkcyBuYW1lL3ZlcnNpb24vZGlnZXN0IGZyb20gdGhlIGBwbHVnaW5JZGAgcm93IGFzIGZvciBldmVyeSBlbnRyeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZEltYWdlTWFuaWZlc3RFbnRyeSBleHRlbmRzIFN0ZXBNYW5pZmVzdEVudHJ5IHtcbiAgcmVhZG9ubHkga2luZDogJ2J1aWxkLWltYWdlJztcbiAgcmVhZG9ubHkgc3RhZ2VOYW1lOiB0eXBlb2YgQlVJTERfSU1BR0VfTUFOSUZFU1RfU1RBR0U7XG4gIHJlYWRvbmx5IGFjdGlvbk5hbWU6IHR5cGVvZiBCVUlMRF9JTUFHRV9NQU5JRkVTVF9BQ1RJT047XG4gIHJlYWRvbmx5IHN0ZXBLZXk6IHR5cGVvZiBCVUlMRF9JTUFHRV9TVEVQX0tFWTtcbiAgcmVhZG9ubHkgcmVsZWFzZVZlcnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgaW1hZ2VSZXBvc2l0b3J5OiBzdHJpbmcgfCBudWxsO1xuICAvKiogSG93IHRoZSByZWxlYXNlIHdhcyBjaG9zZW4gZm9yIHRoaXMgcGlwZWxpbmUgYXQgc3ludGguICovXG4gIHJlYWRvbmx5IHJlc29sdmVkVmlhOiBUb29sY2hhaW5SZXNvbHZlZFZpYTtcbn1cblxuLyoqIFdoZXRoZXIgYSBtYW5pZmVzdCBlbnRyeSBpcyB0aGUge0BsaW5rIEJ1aWxkSW1hZ2VNYW5pZmVzdEVudHJ5fS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0J1aWxkSW1hZ2VFbnRyeShlbnRyeTogU3RlcE1hbmlmZXN0RW50cnkpOiBlbnRyeSBpcyBCdWlsZEltYWdlTWFuaWZlc3RFbnRyeSB7XG4gIHJldHVybiAoZW50cnkgYXMgeyBraW5kPzogdW5rbm93biB9KS5raW5kID09PSAnYnVpbGQtaW1hZ2UnXG4gICAgfHwgKGVudHJ5LnN0YWdlTmFtZSA9PT0gQlVJTERfSU1BR0VfTUFOSUZFU1RfU1RBR0UgJiYgZW50cnkuYWN0aW9uTmFtZSA9PT0gQlVJTERfSU1BR0VfTUFOSUZFU1RfQUNUSU9OKTtcbn1cblxuLyoqIFRoZSBwbHVnaW4gZmllbGRzIHtAbGluayBwbHVnaW5JbWFnZVJlcG9zaXRvcnl9IHJlYWRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5JbWFnZVJlZiB7XG4gIHJlYWRvbmx5IG9yZ0lkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgYnVpbGRUeXBlPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBSZWdpc3RyeSByZXBvc2l0b3J5IGFuIG9yZy1vd25lZCBwbHVnaW4gUk9XJ3MgaW1hZ2UgbGl2ZXMgYXRcbiAqIChgPG5hbWVzcGFjZT4vPG5hbWU+YCwgbm8gaG9zdCwgbm8gZGlnZXN0KTogdGhlIHN5c3RlbSBvcmcncyB1bmRlclxuICogYHN5c3RlbS9gLCBhIHRlbmFudCdzIHVuZGVyIGBvcmctPG9yZ0lkPi9gLiBNdXN0IG1hdGNoIHRoZSBwdXNoIHNpZGVcbiAqIChhcGkvcGx1Z2luIGBwbHVnaW5VcmlgKS4gUmV0dXJucyBudWxsIGZvciBhIGBtZXRhZGF0YV9vbmx5YCBwbHVnaW4uXG4gKlxuICogT25seSBmb3Igcm93cyB0aGUgY2FsbGVyJ3Mgb3JnIHJlc29sdmVzIGFzIGl0cyBPV04gKG9yIGl0cyBwYXJlbnQncyk6IHRoZVxuICogcGx1Z2luIGxvb2t1cCBzdGFtcHMgaXQgYXMgdGhlIHJlY29yZCdzIGBpbWFnZVJlcG9zaXRvcnlgLiBBIGxpc3RlZCBwbHVnaW4nc1xuICogcmVwb3NpdG9yeSBpcyBpdHMgbGlzdGluZyB2ZXJzaW9uJ3MgYHB1YmxpYy88cHVibGlzaGVyPi88bmFtZT5gIGNvcHkg4oCUXG4gKiBzeW50aCBuZXZlciBkZXJpdmVzIGEgcmVwb3NpdG9yeSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbHVnaW5JbWFnZVJlcG9zaXRvcnkocGx1Z2luOiBQbHVnaW5JbWFnZVJlZik6IHN0cmluZyB8IG51bGwge1xuICBpZiAocGx1Z2luLmJ1aWxkVHlwZSA9PT0gJ21ldGFkYXRhX29ubHknKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgbmFtZXNwYWNlID0gcGx1Z2luLm9yZ0lkID09PSBTWVNURU1fT1JHX0lEID8gJ3N5c3RlbScgOiBgb3JnLSR7cGx1Z2luLm9yZ0lkfWA7XG4gIHJldHVybiBgJHtuYW1lc3BhY2V9LyR7cGx1Z2luLm5hbWV9YDtcbn1cblxuLyoqIEEgcGx1Z2luIGltYWdlIHJlcG9zaXRvcnkgbG9va3VwIG1heSByZXR1cm46IGBwdWJsaWMvPHB1Ymxpc2hlcj4vPG5hbWU+YCwgYG9yZy08aWQ+LzxuYW1lPmAgb3IgYHN5c3RlbS88bmFtZT5gLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9JTUFHRV9SRVBPU0lUT1JZX1JFID0gL14oPzpwdWJsaWNcXC9bYS16MC05XSsoPzotW2EtejAtOV0rKSp8b3JnLVthLXowLTldW2EtejAtOS1dKnxzeXN0ZW0pXFwvW2EtejAtOV1bYS16MC05Ll8tXSokLztcbiJdfQ==