aws-cdk 2.37.1 → 2.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +13 -1
  2. package/THIRD_PARTY_LICENSES +81 -1
  3. package/build-info.json +2 -2
  4. package/lib/api/aws-auth/aws-sdk-inifile.js +2 -3
  5. package/lib/api/aws-auth/awscli-compatible.js +5 -7
  6. package/lib/api/aws-auth/sdk-provider.js +7 -11
  7. package/lib/api/aws-auth/sdk.js +2 -3
  8. package/lib/api/bootstrap/bootstrap-environment.js +14 -15
  9. package/lib/api/bootstrap/deploy-bootstrap.js +5 -7
  10. package/lib/api/cloudformation-deployments.js +9 -12
  11. package/lib/api/cxapp/cloud-assembly.js +3 -4
  12. package/lib/api/cxapp/cloud-executable.js +2 -3
  13. package/lib/api/cxapp/exec.js +8 -10
  14. package/lib/api/deploy-stack.js +11 -13
  15. package/lib/api/evaluate-cloudformation-template.js +6 -11
  16. package/lib/api/hotswap/appsync-mapping-templates.js +4 -5
  17. package/lib/api/hotswap/code-build-projects.js +2 -3
  18. package/lib/api/hotswap/ecs-services.js +4 -5
  19. package/lib/api/hotswap/lambda-functions.js +45 -24
  20. package/lib/api/hotswap/s3-bucket-deployments.js +3 -5
  21. package/lib/api/hotswap/stepfunctions-state-machines.js +2 -3
  22. package/lib/api/hotswap-deployments.js +5 -7
  23. package/lib/api/logs/logs-monitor.js +5 -8
  24. package/lib/api/nested-stack-helpers.js +9 -11
  25. package/lib/api/toolkit-info.js +12 -17
  26. package/lib/api/util/cloudformation/stack-activity-monitor.js +17 -27
  27. package/lib/api/util/cloudformation.js +7 -11
  28. package/lib/api/util/placeholders.js +2 -3
  29. package/lib/assets.js +3 -4
  30. package/lib/cdk-toolkit.d.ts +14 -0
  31. package/lib/cdk-toolkit.js +36 -19
  32. package/lib/cli.js +14 -14
  33. package/lib/context-providers/load-balancers.js +11 -18
  34. package/lib/context-providers/security-groups.js +5 -7
  35. package/lib/deploy.d.ts +7 -0
  36. package/lib/deploy.js +43 -0
  37. package/lib/import.js +8 -13
  38. package/lib/index.js +2500 -1469
  39. package/lib/notices.js +11 -17
  40. package/lib/settings.js +4 -5
  41. package/lib/util/asset-publishing.js +5 -8
  42. package/lib/util/directories.js +2 -3
  43. package/lib/version.js +2 -2
  44. package/package.json +10 -9
  45. package/test/api/bootstrap2.test.js +2 -3
  46. package/test/api/cloud-executable.test.js +2 -3
  47. package/test/api/deploy-stack.test.js +4 -7
  48. package/test/api/fake-sts.js +6 -8
  49. package/test/api/hotswap/hotswap-deployments.test.js +4 -4
  50. package/test/api/hotswap/lambda-functions-docker-hotswap-deployments.test.js +3 -3
  51. package/test/api/hotswap/lambda-functions-hotswap-deployments.test.js +179 -7
  52. package/test/api/sdk-provider.test.js +8 -11
  53. package/test/aws-sdk-non-public-apis.test.js +2 -3
  54. package/test/cdk-toolkit.test.js +10 -1
  55. package/test/context-providers/load-balancers.test.js +3 -5
  56. package/test/deploy.test.d.ts +1 -0
  57. package/test/deploy.test.js +175 -0
  58. package/test/import.test.js +2 -2
  59. package/test/init.test.js +2 -3
  60. package/test/integ/cli/app/app.js +19 -0
  61. package/test/integ/cli/bootstrapping.integtest.js +9 -20
  62. package/test/integ/cli/cli.integtest.js +62 -31
  63. package/test/integ/github-helpers.js +2 -3
  64. package/test/integ/helpers/aws.js +4 -7
  65. package/test/integ/helpers/cdk.js +21 -30
  66. package/test/integ/helpers/sam.js +10 -17
  67. package/test/util/mock-child_process.js +3 -4
  68. package/test/util/mock-sdk.js +4 -6
  69. package/test/util/mock-toolkitinfo.js +4 -5
  70. package/test/util.js +3 -5
@@ -58,8 +58,7 @@ class SdkProvider {
58
58
  * class `AwsCliCompatible` for the details.
59
59
  */
60
60
  static async withAwsCliCompatibleDefaults(options = {}) {
61
- var _a;
62
- const sdkOptions = parseHttpOptions((_a = options.httpOptions) !== null && _a !== void 0 ? _a : {});
61
+ const sdkOptions = parseHttpOptions(options.httpOptions ?? {});
63
62
  const chain = await awscli_compatible_1.AwsCliCompatible.credentialChain({
64
63
  profile: options.profile,
65
64
  ec2instance: options.ec2creds,
@@ -86,7 +85,7 @@ class SdkProvider {
86
85
  }
87
86
  // Simple case is if we don't need to "assumeRole" here. If so, we must now have credentials for the right
88
87
  // account.
89
- if ((options === null || options === void 0 ? void 0 : options.assumeRoleArn) === undefined) {
88
+ if (options?.assumeRoleArn === undefined) {
90
89
  if (baseCreds.source === 'incorrectDefault') {
91
90
  throw new Error(fmtObtainCredentialsError(env.account, baseCreds));
92
91
  }
@@ -137,9 +136,8 @@ class SdkProvider {
137
136
  * any SDK credentials.
138
137
  */
139
138
  async resolveEnvironment(env) {
140
- var _a;
141
139
  const region = env.region !== cxapi.UNKNOWN_REGION ? env.region : this.defaultRegion;
142
- const account = env.account !== cxapi.UNKNOWN_ACCOUNT ? env.account : (_a = (await this.defaultAccount())) === null || _a === void 0 ? void 0 : _a.accountId;
140
+ const account = env.account !== cxapi.UNKNOWN_ACCOUNT ? env.account : (await this.defaultAccount())?.accountId;
143
141
  if (!account) {
144
142
  throw new Error('Unable to resolve AWS account to use. It must be either configured when you define your CDK Stack, or through the environment');
145
143
  }
@@ -188,9 +186,8 @@ class SdkProvider {
188
186
  * 4. Return a failure if any of them returned credentials
189
187
  */
190
188
  async obtainBaseCredentials(accountId, mode) {
191
- var _a;
192
189
  // First try 'current' credentials
193
- const defaultAccountId = (_a = (await this.defaultAccount())) === null || _a === void 0 ? void 0 : _a.accountId;
190
+ const defaultAccountId = (await this.defaultAccount())?.accountId;
194
191
  if (defaultAccountId === accountId) {
195
192
  return { source: 'correctDefault', credentials: await this.defaultCredentials() };
196
193
  }
@@ -232,7 +229,7 @@ class SdkProvider {
232
229
  */
233
230
  async withAssumedRole(masterCredentials, roleArn, externalId, region) {
234
231
  _env_1.debug(`Assuming role '${roleArn}'.`);
235
- region = region !== null && region !== void 0 ? region : this.defaultRegion;
232
+ region = region ?? this.defaultRegion;
236
233
  const creds = new AWS.ChainableTemporaryCredentials({
237
234
  params: {
238
235
  RoleArn: roleArn,
@@ -262,7 +259,6 @@ const DEFAULT_TIMEOUT = 300000;
262
259
  * `customUserAgent` lives, but `httpOptions` is the most important attribute.
263
260
  */
264
261
  function parseHttpOptions(options) {
265
- var _a;
266
262
  const config = {};
267
263
  config.httpOptions = {};
268
264
  config.httpOptions.connectTimeout = DEFAULT_CONNECTION_TIMEOUT;
@@ -270,7 +266,7 @@ function parseHttpOptions(options) {
270
266
  let userAgent = options.userAgent;
271
267
  if (userAgent == null) {
272
268
  // Find the package.json from the main toolkit
273
- const pkg = JSON.parse((_a = readIfPossible(path.join(__dirname, '..', '..', '..', 'package.json'))) !== null && _a !== void 0 ? _a : '{}');
269
+ const pkg = JSON.parse(readIfPossible(path.join(__dirname, '..', '..', '..', 'package.json')) ?? '{}');
274
270
  userAgent = `${pkg.name}/${pkg.version}`;
275
271
  }
276
272
  config.customUserAgent = userAgent;
@@ -380,4 +376,4 @@ function fmtObtainedCredentials(obtainResult) {
380
376
  return msg.join('');
381
377
  }
382
378
  }
383
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2RrLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IseUNBQXlDO0FBQ3pDLCtCQUErQjtBQUUvQiwrQkFBK0I7QUFDL0IsaUNBQXdDO0FBQ3hDLDJEQUF1RDtBQUN2RCxxQ0FBa0M7QUFDbEMsNkRBQXlEO0FBRXpELCtCQUFrQztBQUdsQywwREFBMEQ7QUFDMUQseUJBQXlCO0FBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEdBQUcsVUFBVSxDQUFDO0FBQ3BELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLEdBQUcsR0FBRyxDQUFDO0FBMkR0RCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUNoRCxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBNkJ4RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQWEsV0FBVztJQTBCdEIsWUFDbUIsWUFBeUM7SUFDMUQ7O09BRUc7SUFDYSxhQUFxQixFQUNwQixhQUFtQyxFQUFFO1FBTHJDLGlCQUFZLEdBQVosWUFBWSxDQUE2QjtRQUkxQyxrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUNwQixlQUFVLEdBQVYsVUFBVSxDQUEyQjtRQVJ2QyxZQUFPLEdBQUcsSUFBSSxzQ0FBaUIsRUFBRSxDQUFDO0lBU25ELENBQUM7SUFoQ0Q7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLFVBQThCLEVBQUU7O1FBQy9FLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixPQUFDLE9BQU8sQ0FBQyxXQUFXLG1DQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRS9ELE1BQU0sS0FBSyxHQUFHLE1BQU0sb0NBQWdCLENBQUMsZUFBZSxDQUFDO1lBQ25ELE9BQU8sRUFBRSxPQUFP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QUFPLG1DQUFtQyxZQUFZLENBQUMsVUFBVSxHQUFHLENBQUM7UUFDdkUsS0FBSyxrQkFBa0I7WUFDckIsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyw4Q0FBOEMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFFakYsSUFBSSxZQUFZLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3pDLEdBQUcsQ0FBQyxJQUFJLENBQUMsNkRBQTZELFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNoSDtZQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFZCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDdkI7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBBV1MgZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYXRpb25PcHRpb25zIH0gZnJvbSAnYXdzLXNkay9saWIvY29uZmlnLWJhc2UnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgZGVidWcsIHdhcm5pbmcgfSBmcm9tICcuL19lbnYnO1xuaW1wb3J0IHsgQXdzQ2xpQ29tcGF0aWJsZSB9IGZyb20gJy4vYXdzY2xpLWNvbXBhdGlibGUnO1xuaW1wb3J0IHsgY2FjaGVkIH0gZnJvbSAnLi9jYWNoZWQnO1xuaW1wb3J0IHsgQ3JlZGVudGlhbFBsdWdpbnMgfSBmcm9tICcuL2NyZWRlbnRpYWwtcGx1Z2lucyc7XG5pbXBvcnQgeyBNb2RlIH0gZnJvbSAnLi9jcmVkZW50aWFscyc7XG5pbXBvcnQgeyBJU0RLLCBTREsgfSBmcm9tICcuL3Nkayc7XG5cblxuLy8gU29tZSBjb25maWd1cmF0aW9uIHRoYXQgY2FuIG9ubHkgYmUgYWNoaWV2ZWQgYnkgc2V0dGluZ1xuLy8gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxucHJvY2Vzcy5lbnYuQVdTX1NUU19SRUdJT05BTF9FTkRQT0lOVFMgPSAncmVnaW9uYWwnO1xucHJvY2Vzcy5lbnYuQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRUQgPSAnMSc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIGRlZmF1bHQgU0RLIHByb3ZpZGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2RrUHJvdmlkZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFByb2ZpbGUgdG8gcmVhZCBmcm9tIH4vLmF3c1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHByb2ZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgd2Ugc2hvdWxkIGNoZWNrIGZvciBFQzIgY3JlZGVudGlhbHNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBBdXRvZGV0ZWN0XG4gICAqL1xuICByZWFkb25seSBlYzJjcmVkcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgd2Ugc2hvdWxkIGNoZWNrIGZvciBjb250YWluZXIgY3JlZGVudGlhbHNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBBdXRvZGV0ZWN0XG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJDcmVkcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEhUVFAgb3B0aW9ucyBmb3IgU0RLXG4gICAqL1xuICByZWFkb25seSBodHRwT3B0aW9ucz86IFNka0h0dHBPcHRpb25zO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGluZGl2aWR1YWwgU0RLc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNka0h0dHBPcHRpb25zIHtcbiAgLyoqXG4gICAqIFByb3h5IGFkZHJlc3MgdG8gdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIHByb3h5XG4gICAqL1xuICByZWFkb25seSBwcm94eUFkZHJlc3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcGF0aCB0byBhIGNlcnRpZmljYXRlIGJ1bmRsZSB0aGF0IGNvbnRhaW5zIGEgY2VydCB0byBiZSB0cnVzdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBObyBjZXJ0aWZpY2F0ZSBidW5kbGVcbiAgICovXG4gIHJlYWRvbmx5IGNhQnVuZGxlUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGN1c3RvbSB1c2VyIGFnZW50IHRvIHVzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSA8cGFja2FnZS1uYW1lPi88cGFja2FnZS12ZXJzaW9uPlxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckFnZW50Pzogc3RyaW5nO1xufVxuXG5jb25zdCBDQUNIRURfQUNDT1VOVCA9IFN5bWJvbCgnY2FjaGVkX2FjY291bnQnKTtcbmNvbnN0IENBQ0hFRF9ERUZBVUxUX0NSRURFTlRJQUxTID0gU3ltYm9sKCdjYWNoZWRfZGVmYXVsdF9jcmVkZW50aWFscycpO1xuXG4vKipcbiAqIFNESyBjb25maWd1cmF0aW9uIGZvciBhIGdpdmVuIGVudmlyb25tZW50XG4gKiAnZm9yRW52aXJvbm1lbnQnIHdpbGwgYXR0ZW1wdCB0byBhc3N1bWUgYSByb2xlIGFuZCBpZiBpdFxuICogaXMgbm90IHN1Y2Nlc3NmdWwsIHRoZW4gaXQgd2lsbCBlaXRoZXI6XG4gKiAgIDEuIENoZWNrIHRvIHNlZSBpZiB0aGUgZGVmYXVsdCBjcmVkZW50aWFscyAobG9jYWwgY3JlZGVudGlhbHMgdGhlIENMSSB3YXMgZXhlY3V0ZWQgd2l0aClcbiAqICAgICAgYXJlIGZvciB0aGUgZ2l2ZW4gZW52aXJvbm1lbnQuIElmIHRoZXkgYXJlIHRoZW4gcmV0dXJuIHRob3NlLlxuICogICAyLiBJZiB0aGUgZGVmYXVsdCBjcmVkZW50aWFscyBhcmUgbm90IGZvciB0aGUgZ2l2ZW4gZW52aXJvbm1lbnQgdGhlblxuICogICAgICB0aHJvdyBhbiBlcnJvclxuICpcbiAqICdkaWRBc3N1bWVSb2xlJyBhbGxvd3MgY2FsbGVycyB0byB3aGV0aGVyIHRoZXkgYXJlIHJlY2VpdmluZyB0aGUgYXNzdW1lIHJvbGVcbiAqIGNyZWRlbnRpYWxzIG9yIHRoZSBkZWZhdWx0IGNyZWRlbnRpYWxzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNka0ZvckVudmlyb25tZW50IHtcbiAgLyoqXG4gICAqIFRoZSBTREsgZm9yIHRoZSBnaXZlbiBlbnZpcm9ubWVudFxuICAgKi9cbiAgcmVhZG9ubHkgc2RrOiBJU0RLO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgYXNzdW1lIHJvbGUgd2FzIHN1Y2Nlc3NmdWwuXG4gICAqIElmIHRoZSBhc3N1bWUgcm9sZSB3YXMgbm90IHN1Y2Nlc3NmdWwgKGZhbHNlKVxuICAgKiB0aGVuIHRoYXQgbWVhbnMgdGhhdCB0aGUgJ3NkaycgcmV0dXJuZWQgY29udGFpbnNcbiAgICogdGhlIGRlZmF1bHQgY3JlZGVudGlhbHMgKG5vdCB0aGUgYXNzdW1lIHJvbGUgY3JlZGVudGlhbHMpXG4gICAqL1xuICByZWFkb25seSBkaWRBc3N1bWVSb2xlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgaW5zdGFuY2VzIG9mIHRoZSBBV1MgU0RLIGFwcHJvcHJpYXRlIGZvciBhIGdpdmVuIGFjY291bnQvcmVnaW9uLlxuICpcbiAqIEJlaGF2aW9yIGlzIGFzIGZvbGxvd3M6XG4gKlxuICogLSBGaXJzdCwgYSBzZXQgb2YgXCJiYXNlXCIgY3JlZGVudGlhbHMgYXJlIGVzdGFibGlzaGVkXG4gKiAgIC0gSWYgYSB0YXJnZXQgZW52aXJvbm1lbnQgaXMgZ2l2ZW4gYW5kIHRoZSBkZWZhdWx0IChcImN1cnJlbnRcIikgU0RLIGNyZWRlbnRpYWxzIGFyZSBmb3JcbiAqICAgICB0aGF0IGFjY291bnQsIHJldHVybiB0aG9zZTsgb3RoZXJ3aXNlXG4gKiAgIC0gSWYgYSB0YXJnZXQgZW52aXJvbm1lbnQgaXMgZ2l2ZW4sIHNjYW4gYWxsIGNyZWRlbnRpYWwgcHJvdmlkZXIgcGx1Z2luc1xuICogICAgIGZvciBjcmVkZW50aWFscywgYW5kIHJldHVybiB0aG9zZSBpZiBmb3VuZDsgb3RoZXJ3aXNlXG4gKiAgIC0gUmV0dXJuIGRlZmF1bHQgKFwiY3VycmVudFwiKSBTREsgY3JlZGVudGlhbHMsIG5vdGluZyB0aGF0IHRoZXkgbWlnaHQgYmUgd3JvbmcuXG4gKlxuICogLSBTZWNvbmQsIGEgcm9sZSBtYXkgb3B0aW9uYWxseSBuZWVkIHRvIGJlIGFzc3VtZWQuIFVzZSB0aGUgYmFzZSBjcmVkZW50aWFsc1xuICogICBlc3RhYmxpc2hlZCBpbiB0aGUgcHJldmlvdXMgcHJvY2VzcyB0byBhc3N1bWUgdGhhdCByb2xlLlxuICogICAtIElmIGFzc3VtaW5nIHRoZSByb2xlIGZhaWxzIGFuZCB0aGUgYmFzZSBjcmVkZW50aWFscyBhcmUgZm9yIHRoZSBjb3JyZWN0XG4gKiAgICAgYWNjb3VudCwgcmV0dXJuIHRob3NlLiBUaGlzIGlzIGEgZmFsbGJhY2sgZm9yIHBlb3BsZSB3aG8gYXJlIHRyeWluZyB0byBpbnRlcmFjdFxuICogICAgIHdpdGggYSBEZWZhdWx0IFN5bnRoZXNpemVkIHN0YWNrIGFuZCBhbHJlYWR5IGhhdmUgcmlnaHQgY3JlZGVudGlhbHMgc2V0dXAuXG4gKlxuICogICAgIFR5cGljYWwgY2FzZXMgd2Ugc2VlIGluIHRoZSB3aWxkOlxuICogICAgIC0gQ3JlZGVudGlhbCBwbHVnaW4gc2V0dXAgdGhhdCwgYWx0aG91Z2ggbm90IHJlY29tbWVuZGVkLCB3b3JrcyBmb3IgdGhlbVxuICogICAgIC0gU2VlZGVkIHRlcm1pbmFsIHdpdGggYFJlYWRPbmx5YCBjcmVkZW50aWFscyBpbiBvcmRlciB0byBkbyBgY2RrIGRpZmZgLS10aGUgYFJlYWRPbmx5YFxuICogICAgICAgcm9sZSBkb2Vzbid0IGhhdmUgYHN0czpBc3N1bWVSb2xlYCBhbmQgd2lsbCBmYWlsIGZvciBubyByZWFsIGdvb2QgcmVhc29uLlxuICovXG5leHBvcnQgY2xhc3MgU2RrUHJvdmlkZXIge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFNka1Byb3ZpZGVyIHdoaWNoIGdldHMgaXRzIGRlZmF1bHRzIGluIGEgd2F5IHRoYXQgYmVoYXZlcyBsaWtlIHRoZSBBV1MgQ0xJIGRvZXNcbiAgICpcbiAgICogVGhlIEFXUyBTREsgZm9yIEpTIGJlaGF2ZXMgc2xpZ2h0bHkgZGlmZmVyZW50bHkgZnJvbSB0aGUgQVdTIENMSSBpbiBhIG51bWJlciBvZiB3YXlzOyBzZWUgdGhlXG4gICAqIGNsYXNzIGBBd3NDbGlDb21wYXRpYmxlYCBmb3IgdGhlIGRldGFpbHMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIHdpdGhBd3NDbGlDb21wYXRpYmxlRGVmYXVsdHMob3B0aW9uczogU2RrUHJvdmlkZXJPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzZGtPcHRpb25zID0gcGFyc2VIdHRwT3B0aW9ucyhvcHRpb25zLmh0dHBPcHRpb25zID8/IHt9KTtcblxuICAgIGNvbnN0IGNoYWluID0gYXdhaXQgQXdzQ2xpQ29tcGF0aWJsZS5jcmVkZW50aWFsQ2hhaW4oe1xuICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgZWMyaW5zdGFuY2U6IG9wdGlvbnMuZWMyY3JlZHMsXG4gICAgICBjb250YWluZXJDcmVkczogb3B0aW9ucy5jb250YWluZXJDcmVkcyxcbiAgICAgIGh0dHBPcHRpb25zOiBzZGtPcHRpb25zLmh0dHBPcHRpb25zLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlZ2lvbiA9IGF3YWl0IEF3c0NsaUNvbXBhdGlibGUucmVnaW9uKHtcbiAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICAgIGVjMmluc3RhbmNlOiBvcHRpb25zLmVjMmNyZWRzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBTZGtQcm92aWRlcihjaGFpbiwgcmVnaW9uLCBzZGtPcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2lucyA9IG5ldyBDcmVkZW50aWFsUGx1Z2lucygpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRDaGFpbjogQVdTLkNyZWRlbnRpYWxQcm92aWRlckNoYWluLFxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgcmVnaW9uXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRSZWdpb246IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNka09wdGlvbnM6IENvbmZpZ3VyYXRpb25PcHRpb25zID0ge30pIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gU0RLIHdoaWNoIGNhbiBkbyBvcGVyYXRpb25zIGluIHRoZSBnaXZlbiBlbnZpcm9ubWVudFxuICAgKlxuICAgKiBUaGUgYGVudmlyb25tZW50YCBwYXJhbWV0ZXIgaXMgcmVzb2x2ZWQgZmlyc3QgKHNlZSBgcmVzb2x2ZUVudmlyb25tZW50KClgKS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBmb3JFbnZpcm9ubWVudChcbiAgICBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsXG4gICAgbW9kZTogTW9kZSxcbiAgICBvcHRpb25zPzogQ3JlZGVudGlhbHNPcHRpb25zLFxuICApOiBQcm9taXNlPFNka0ZvckVudmlyb25tZW50PiB7XG4gICAgY29uc3QgZW52ID0gYXdhaXQgdGhpcy5yZXNvbHZlRW52aXJvbm1lbnQoZW52aXJvbm1lbnQpO1xuICAgIGNvbnN0IGJhc2VDcmVkcyA9IGF3YWl0IHRoaXMub2J0YWluQmFzZUNyZWRlbnRpYWxzKGVudi5hY2NvdW50LCBtb2RlKTtcblxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIG5lZWQgYXQgbGVhc3QgU09NRSBjcmVkZW50aWFsc1xuICAgIGlmIChiYXNlQ3JlZHMuc291cmNlID09PSAnbm9uZScpIHsgdGhyb3cgbmV3IEVycm9yKGZtdE9idGFpbkNyZWRlbnRpYWxzRXJyb3IoZW52LmFjY291bnQsIGJhc2VDcmVkcykpOyB9XG5cbiAgICAvLyBTaW1wbGUgY2FzZSBpcyBpZiB3ZSBkb24ndCBuZWVkIHRvIFwiYXNzdW1lUm9sZVwiIGhlcmUuIElmIHNvLCB3ZSBtdXN0IG5vdyBoYXZlIGNyZWRlbnRpYWxzIGZvciB0aGUgcmlnaHRcbiAgICAvLyBhY2NvdW50LlxuICAgIGlmIChvcHRpb25zPy5hc3N1bWVSb2xlQXJuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChiYXNlQ3JlZHMuc291cmNlID09PSAnaW5jb3JyZWN0RGVmYXVsdCcpIHsgdGhyb3cgbmV3IEVycm9yKGZtdE9idGFpbkNyZWRlbnRpYWxzRXJyb3IoZW52LmFjY291bnQsIGJhc2VDcmVkcykpOyB9XG4gICAgICByZXR1cm4geyBzZGs6IG5ldyBTREsoYmFzZUNyZWRzLmNyZWRlbnRpYWxzLCBlbnYucmVnaW9uLCB0aGlzLnNka09wdGlvbnMpLCBkaWRBc3N1bWVSb2xlOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIC8vIFdlIHdpbGwgcHJvY2VlZCB0byBBc3N1bWVSb2xlIHVzaW5nIHdoYXRldmVyIHdlJ3ZlIGJlZW4gZ2l2ZW4uXG4gICAgY29uc3Qgc2RrID0gYXdhaXQgdGhpcy53aXRoQXNzdW1lZFJvbGUoYmFzZUNyZWRzLCBvcHRpb25zLmFzc3VtZVJvbGVBcm4sIG9wdGlvbnMuYXNzdW1lUm9sZUV4dGVybmFsSWQsIGVudi5yZWdpb24pO1xuXG4gICAgLy8gRXhlcmNpc2UgdGhlIEFzc3VtZVJvbGVDcmVkZW50aWFsc1Byb3ZpZGVyIHdlJ3ZlIGdvdHRlbiBhdCBsZWFzdCBvbmNlIHNvXG4gICAgLy8gd2UgY2FuIGRldGVybWluZSB3aGV0aGVyIHRoZSBBc3N1bWVSb2xlIGNhbGwgc3VjY2VlZHMgb3Igbm90LlxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZGsuZm9yY2VDcmVkZW50aWFsUmV0cmlldmFsKCk7XG4gICAgICByZXR1cm4geyBzZGssIGRpZEFzc3VtZVJvbGU6IHRydWUgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBBc3N1bWVSb2xlIGZhaWxlZC4gUHJvY2VlZCBhbmQgd2FybiAqaWYgYW5kIG9ubHkgaWYqIHRoZSBiYXNlQ3JlZGVudGlhbHMgd2VyZSBhbHJlYWR5IGZvciB0aGUgcmlnaHQgYWNjb3VudFxuICAgICAgLy8gb3IgcmV0dXJuZWQgZnJvbSBhIHBsdWdpbi4gVGhpcyBpcyB0byBjb3ZlciBzb21lIGN1cnJlbnQgc2V0dXBzIGZvciBwZW9wbGUgdXNpbmcgcGx1Z2lucyBvciBwcmVmZXJyaW5nIHRvXG4gICAgICAvLyBmZWVkIHRoZSBDTEkgY3JlZGVudGlhbHMgd2hpY2ggYXJlIHN1ZmZpY2llbnQgYnkgdGhlbXNlbHZlcy4gUHJlZmVyIHRvIGFzc3VtZSB0aGUgY29ycmVjdCByb2xlIGlmIHdlIGNhbixcbiAgICAgIC8vIGJ1dCBpZiB3ZSBjYW4ndCB0aGVuIGxldCdzIGp1c3QgdHJ5IHdpdGggYXZhaWxhYmxlIGNyZWRlbnRpYWxzIGFueXdheS5cbiAgICAgIGlmIChiYXNlQ3JlZHMuc291cmNlID09PSAnY29ycmVjdERlZmF1bHQnIHx8IGJhc2VDcmVkcy5zb3VyY2UgPT09ICdwbHVnaW4nKSB7XG4gICAgICAgIGRlYnVnKGUubWVzc2FnZSk7XG4gICAgICAgIHdhcm5pbmcoYCR7Zm10T2J0YWluZWRDcmVkZW50aWFscyhiYXNlQ3JlZHMpfSBjb3VsZCBub3QgYmUgdXNlZCB0byBhc3N1bWUgJyR7b3B0aW9ucy5hc3N1bWVSb2xlQXJufScsIGJ1dCBhcmUgZm9yIHRoZSByaWdodCBhY2NvdW50LiBQcm9jZWVkaW5nIGFueXdheS5gKTtcbiAgICAgICAgcmV0dXJuIHsgc2RrOiBuZXcgU0RLKGJhc2VDcmVkcy5jcmVkZW50aWFscywgZW52LnJlZ2lvbiwgdGhpcy5zZGtPcHRpb25zKSwgZGlkQXNzdW1lUm9sZTogZmFsc2UgfTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBwYXJ0aXRpb24gdGhhdCBiYXNlIGNyZWRlbnRpYWxzIGFyZSBmb3JcbiAgICpcbiAgICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGVyZSBhcmUgbm8gYmFzZSBjcmVkZW50aWFscy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBiYXNlQ3JlZGVudGlhbHNQYXJ0aXRpb24oZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LCBtb2RlOiBNb2RlKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBlbnYgPSBhd2FpdCB0aGlzLnJlc29sdmVFbnZpcm9ubWVudChlbnZpcm9ubWVudCk7XG4gICAgY29uc3QgYmFzZUNyZWRzID0gYXdhaXQgdGhpcy5vYnRhaW5CYXNlQ3JlZGVudGlhbHMoZW52LmFjY291bnQsIG1vZGUpO1xuICAgIGlmIChiYXNlQ3JlZHMuc291cmNlID09PSAnbm9uZScpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICAgIHJldHVybiAoYXdhaXQgbmV3IFNESyhiYXNlQ3JlZHMuY3JlZGVudGlhbHMsIGVudi5yZWdpb24sIHRoaXMuc2RrT3B0aW9ucykuY3VycmVudEFjY291bnQoKSkucGFydGl0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGVudmlyb25tZW50IGZvciBhIHN0YWNrXG4gICAqXG4gICAqIFJlcGxhY2VzIHRoZSBtYWdpYyB2YWx1ZXMgYFVOS05PV05fUkVHSU9OYCBhbmQgYFVOS05PV05fQUNDT1VOVGBcbiAgICogd2l0aCB0aGUgZGVmYXVsdHMgZm9yIHRoZSBjdXJyZW50IFNESyBjb25maWd1cmF0aW9uIChgfi8uYXdzL2NvbmZpZ2Agb3JcbiAgICogb3RoZXJ3aXNlKS5cbiAgICpcbiAgICogSXQgaXMgYW4gZXJyb3IgaWYgYFVOS05PV05fQUNDT1VOVGAgaXMgdXNlZCBidXQgdGhlIHVzZXIgaGFzbid0IGNvbmZpZ3VyZWRcbiAgICogYW55IFNESyBjcmVkZW50aWFscy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXNvbHZlRW52aXJvbm1lbnQoZW52OiBjeGFwaS5FbnZpcm9ubWVudCk6IFByb21pc2U8Y3hhcGkuRW52aXJvbm1lbnQ+IHtcbiAgICBjb25zdCByZWdpb24gPSBlbnYucmVnaW9uICE9PSBjeGFwaS5VTktOT1dOX1JFR0lPTiA/IGVudi5yZWdpb24gOiB0aGlzLmRlZmF1bHRSZWdpb247XG4gICAgY29uc3QgYWNjb3VudCA9IGVudi5hY2NvdW50ICE9PSBjeGFwaS5VTktOT1dOX0FDQ09VTlQgPyBlbnYuYWNjb3VudCA6IChhd2FpdCB0aGlzLmRlZmF1bHRBY2NvdW50KCkpPy5hY2NvdW50SWQ7XG5cbiAgICBpZiAoIWFjY291bnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJlc29sdmUgQVdTIGFjY291bnQgdG8gdXNlLiBJdCBtdXN0IGJlIGVpdGhlciBjb25maWd1cmVkIHdoZW4geW91IGRlZmluZSB5b3VyIENESyBTdGFjaywgb3IgdGhyb3VnaCB0aGUgZW52aXJvbm1lbnQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVnaW9uLFxuICAgICAgYWNjb3VudCxcbiAgICAgIG5hbWU6IGN4YXBpLkVudmlyb25tZW50VXRpbHMuZm9ybWF0KGFjY291bnQsIHJlZ2lvbiksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYWNjb3VudCB3ZSdkIGF1dGggaW50byBpZiB3ZSB1c2VkIGRlZmF1bHQgY3JlZGVudGlhbHMuXG4gICAqXG4gICAqIERlZmF1bHQgY3JlZGVudGlhbHMgYXJlIHRoZSBzZXQgb2YgYW1iaWVudGx5IGNvbmZpZ3VyZWQgY3JlZGVudGlhbHMgdXNpbmdcbiAgICogb25lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIG9yIH4vLmF3cy9jcmVkZW50aWFscywgb3IgdGhlICpvbmUqXG4gICAqIHByb2ZpbGUgdGhhdCB3YXMgcGFzc2VkIGludG8gdGhlIENMSS5cbiAgICpcbiAgICogTWlnaHQgcmV0dXJuIHVuZGVmaW5lZCBpZiB0aGVyZSBhcmUgbm8gZGVmYXVsdC9hbWJpZW50IGNyZWRlbnRpYWxzXG4gICAqIGF2YWlsYWJsZSAoaW4gd2hpY2ggY2FzZSB0aGUgdXNlciBzaG91bGQgYmV0dGVyIGhvcGUgdGhleSBoYXZlXG4gICAqIGNyZWRlbnRpYWwgcGx1Z2lucyBjb25maWd1cmVkKS5cbiAgICpcbiAgICogVXNlcyBhIGNhY2hlIHRvIGF2b2lkIFNUUyBjYWxscyBpZiB3ZSBkb24ndCBuZWVkICdlbS5cbiAgICovXG4gIHB1YmxpYyBkZWZhdWx0QWNjb3VudCgpOiBQcm9taXNlPEFjY291bnQgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gY2FjaGVkKHRoaXMsIENBQ0hFRF9BQ0NPVU5ULCBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjcmVkcyA9IGF3YWl0IHRoaXMuZGVmYXVsdENyZWRlbnRpYWxzKCk7XG5cbiAgICAgICAgY29uc3QgYWNjZXNzS2V5SWQgPSBjcmVkcy5hY2Nlc3NLZXlJZDtcbiAgICAgICAgaWYgKCFhY2Nlc3NLZXlJZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJlc29sdmUgQVdTIGNyZWRlbnRpYWxzIChzZXR1cCB3aXRoIFwiYXdzIGNvbmZpZ3VyZVwiKScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG5ldyBTREsoY3JlZHMsIHRoaXMuZGVmYXVsdFJlZ2lvbiwgdGhpcy5zZGtPcHRpb25zKS5jdXJyZW50QWNjb3VudCgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWJ1ZygnVW5hYmxlIHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBBV1MgYWNjb3VudDonLCBlKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3JlZGVudGlhbHMgZm9yIHRoZSBnaXZlbiBhY2NvdW50IElEIGluIHRoZSBnaXZlbiBtb2RlXG4gICAqXG4gICAqIDEuIFVzZSB0aGUgZGVmYXVsdCBjcmVkZW50aWFscyBpZiB0aGUgZGVzdGluYXRpb24gYWNjb3VudCBtYXRjaGVzIHRoZVxuICAgKiAgICBjdXJyZW50IGNyZWRlbnRpYWxzJyBhY2NvdW50LlxuICAgKiAyLiBPdGhlcndpc2UgdHJ5IGFsbCBjcmVkZW50aWFsIHBsdWdpbnMuXG4gICAqIDMuIEZhaWwgaWYgbmVpdGhlciBvZiB0aGVzZSB5aWVsZCBhbnkgY3JlZGVudGlhbHMuXG4gICAqIDQuIFJldHVybiBhIGZhaWx1cmUgaWYgYW55IG9mIHRoZW0gcmV0dXJuZWQgY3JlZGVudGlhbHNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgb2J0YWluQmFzZUNyZWRlbnRpYWxzKGFjY291bnRJZDogc3RyaW5nLCBtb2RlOiBNb2RlKTogUHJvbWlzZTxPYnRhaW5CYXNlQ3JlZGVudGlhbHNSZXN1bHQ+IHtcbiAgICAvLyBGaXJzdCB0cnkgJ2N1cnJlbnQnIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgZGVmYXVsdEFjY291bnRJZCA9IChhd2FpdCB0aGlzLmRlZmF1bHRBY2NvdW50KCkpPy5hY2NvdW50SWQ7XG4gICAgaWYgKGRlZmF1bHRBY2NvdW50SWQgPT09IGFjY291bnRJZCkge1xuICAgICAgcmV0dXJuIHsgc291cmNlOiAnY29ycmVjdERlZmF1bHQnLCBjcmVkZW50aWFsczogYXdhaXQgdGhpcy5kZWZhdWx0Q3JlZGVudGlhbHMoKSB9O1xuICAgIH1cblxuICAgIC8vIFRoZW4gdHJ5IHRoZSBwbHVnaW5zXG4gICAgY29uc3QgcGx1Z2luQ3JlZHMgPSBhd2FpdCB0aGlzLnBsdWdpbnMuZmV0Y2hDcmVkZW50aWFsc0ZvcihhY2NvdW50SWQsIG1vZGUpO1xuICAgIGlmIChwbHVnaW5DcmVkcykge1xuICAgICAgcmV0dXJuIHsgc291cmNlOiAncGx1Z2luJywgLi4ucGx1Z2luQ3JlZHMgfTtcbiAgICB9XG5cbiAgICAvLyBGYWxsIGJhY2sgdG8gZGVmYXVsdCBjcmVkZW50aWFscyB3aXRoIGEgbm90ZSB0aGF0IHRoZXkncmUgbm90IHRoZSByaWdodCBvbmVzIHlldFxuICAgIGlmIChkZWZhdWx0QWNjb3VudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogJ2luY29ycmVjdERlZmF1bHQnLFxuICAgICAgICBhY2NvdW50SWQ6IGRlZmF1bHRBY2NvdW50SWQsXG4gICAgICAgIGNyZWRlbnRpYWxzOiBhd2FpdCB0aGlzLmRlZmF1bHRDcmVkZW50aWFscygpLFxuICAgICAgICB1bnVzZWRQbHVnaW5zOiB0aGlzLnBsdWdpbnMuYXZhaWxhYmxlUGx1Z2luTmFtZXMsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEFwcGFyZW50bHkgd2UgZGlkbid0IGZpbmQgYW55IGF0IGFsbFxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6ICdub25lJyxcbiAgICAgIHVudXNlZFBsdWdpbnM6IHRoaXMucGx1Z2lucy5hdmFpbGFibGVQbHVnaW5OYW1lcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGRlZmF1bHQgY2hhaW4gdG8gdGhlIGZpcnN0IHNldCBvZiBjcmVkZW50aWFscyB0aGF0IGlzIGF2YWlsYWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBkZWZhdWx0Q3JlZGVudGlhbHMoKTogUHJvbWlzZTxBV1MuQ3JlZGVudGlhbHM+IHtcbiAgICByZXR1cm4gY2FjaGVkKHRoaXMsIENBQ0hFRF9ERUZBVUxUX0NSRURFTlRJQUxTLCAoKSA9PiB7XG4gICAgICBkZWJ1ZygnUmVzb2x2aW5nIGRlZmF1bHQgY3JlZGVudGlhbHMnKTtcbiAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRDaGFpbi5yZXNvbHZlUHJvbWlzZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBTREsgd2hpY2ggdXNlcyBhc3N1bWVkIHJvbGUgY3JlZGVudGlhbHNcbiAgICpcbiAgICogVGhlIGJhc2UgY3JlZGVudGlhbHMgdXNlZCB0byByZXRyaWV2ZSB0aGUgYXNzdW1lZCByb2xlIGNyZWRlbnRpYWxzIHdpbGwgYmUgdGhlXG4gICAqIHNhbWUgY3JlZGVudGlhbHMgcmV0dXJuZWQgYnkgb2J0YWluQ3JlZGVudGlhbHMgaWYgYW4gZW52aXJvbm1lbnQgYW5kIG1vZGUgaXMgcGFzc2VkLFxuICAgKiBvdGhlcndpc2UgaXQgd2lsbCBiZSB0aGUgY3VycmVudCBjcmVkZW50aWFscy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgd2l0aEFzc3VtZWRSb2xlKFxuICAgIG1hc3RlckNyZWRlbnRpYWxzOiBFeGNsdWRlPE9idGFpbkJhc2VDcmVkZW50aWFsc1Jlc3VsdCwgeyBzb3VyY2U6ICdub25lJyB9PixcbiAgICByb2xlQXJuOiBzdHJpbmcsXG4gICAgZXh0ZXJuYWxJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHJlZ2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgZGVidWcoYEFzc3VtaW5nIHJvbGUgJyR7cm9sZUFybn0nLmApO1xuXG4gICAgcmVnaW9uID0gcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbjtcblxuICAgIGNvbnN0IGNyZWRzID0gbmV3IEFXUy5DaGFpbmFibGVUZW1wb3JhcnlDcmVkZW50aWFscyh7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgUm9sZUFybjogcm9sZUFybixcbiAgICAgICAgLi4uZXh0ZXJuYWxJZCA/IHsgRXh0ZXJuYWxJZDogZXh0ZXJuYWxJZCB9IDoge30sXG4gICAgICAgIFJvbGVTZXNzaW9uTmFtZTogYGF3cy1jZGstJHtzYWZlVXNlcm5hbWUoKX1gLFxuICAgICAgfSxcbiAgICAgIHN0c0NvbmZpZzoge1xuICAgICAgICByZWdpb24sXG4gICAgICAgIC4uLnRoaXMuc2RrT3B0aW9ucyxcbiAgICAgIH0sXG4gICAgICBtYXN0ZXJDcmVkZW50aWFsczogbWFzdGVyQ3JlZGVudGlhbHMuY3JlZGVudGlhbHMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFNESyhjcmVkcywgcmVnaW9uLCB0aGlzLnNka09wdGlvbnMsIHtcbiAgICAgIGFzc3VtZVJvbGVDcmVkZW50aWFsc1NvdXJjZURlc2NyaXB0aW9uOiBmbXRPYnRhaW5lZENyZWRlbnRpYWxzKG1hc3RlckNyZWRlbnRpYWxzKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIEFXUyBhY2NvdW50XG4gKlxuICogQW4gQVdTIGFjY291bnQgYWx3YXlzIGV4aXN0cyBpbiBvbmx5IG9uZSBwYXJ0aXRpb24uIFVzdWFsbHkgd2UgZG9uJ3QgY2FyZSBhYm91dFxuICogdGhlIHBhcnRpdGlvbiwgYnV0IHdoZW4gd2UgbmVlZCB0byBmb3JtIEFSTnMgd2UgZG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWNjb3VudCB7XG4gIC8qKlxuICAgKiBUaGUgYWNjb3VudCBudW1iZXJcbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFydGl0aW9uICgnYXdzJyBvciAnYXdzLWNuJyBvciBvdGhlcndpc2UpXG4gICAqL1xuICByZWFkb25seSBwYXJ0aXRpb246IHN0cmluZztcbn1cblxuY29uc3QgREVGQVVMVF9DT05ORUNUSU9OX1RJTUVPVVQgPSAxMDAwMDtcbmNvbnN0IERFRkFVTFRfVElNRU9VVCA9IDMwMDAwMDtcblxuLyoqXG4gKiBHZXQgSFRUUCBvcHRpb25zIGZvciB0aGUgU0RLXG4gKlxuICogUmVhZCBmcm9tIHVzZXIgaW5wdXQgb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqIFJldHVybnMgYSBjb21wbGV0ZSBgQ29uZmlndXJhdGlvbk9wdGlvbnNgIG9iamVjdCBiZWNhdXNlIHRoYXQncyB3aGVyZVxuICogYGN1c3RvbVVzZXJBZ2VudGAgbGl2ZXMsIGJ1dCBgaHR0cE9wdGlvbnNgIGlzIHRoZSBtb3N0IGltcG9ydGFudCBhdHRyaWJ1dGUuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSHR0cE9wdGlvbnMob3B0aW9uczogU2RrSHR0cE9wdGlvbnMpIHtcbiAgY29uc3QgY29uZmlnOiBDb25maWd1cmF0aW9uT3B0aW9ucyA9IHt9O1xuICBjb25maWcuaHR0cE9wdGlvbnMgPSB7fTtcblxuICBjb25maWcuaHR0cE9wdGlvbnMuY29ubmVjdFRpbWVvdXQgPSBERUZBVUxUX0NPTk5FQ1RJT05fVElNRU9VVDtcbiAgY29uZmlnLmh0dHBPcHRpb25zLnRpbWVvdXQgPSBERUZBVUxUX1RJTUVPVVQ7XG5cbiAgbGV0IHVzZXJBZ2VudCA9IG9wdGlvbnMudXNlckFnZW50O1xuICBpZiAodXNlckFnZW50ID09IG51bGwpIHtcbiAgICAvLyBGaW5kIHRoZSBwYWNrYWdlLmpzb24gZnJvbSB0aGUgbWFpbiB0b29sa2l0XG4gICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShyZWFkSWZQb3NzaWJsZShwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnLi4nLCAncGFja2FnZS5qc29uJykpID8/ICd7fScpO1xuICAgIHVzZXJBZ2VudCA9IGAke3BrZy5uYW1lfS8ke3BrZy52ZXJzaW9ufWA7XG4gIH1cbiAgY29uZmlnLmN1c3RvbVVzZXJBZ2VudCA9IHVzZXJBZ2VudDtcblxuICBjb25zdCBjYUJ1bmRsZVBhdGggPSBvcHRpb25zLmNhQnVuZGxlUGF0aCB8fCBjYUJ1bmRsZVBhdGhGcm9tRW52aXJvbm1lbnQoKTtcbiAgaWYgKGNhQnVuZGxlUGF0aCkge1xuICAgIGRlYnVnKCdVc2luZyBDQSBidW5kbGUgcGF0aDogJXMnLCBjYUJ1bmRsZVBhdGgpO1xuICAgIChjb25maWcuaHR0cE9wdGlvbnMgYXMgYW55KS5jYSA9IHJlYWRJZlBvc3NpYmxlKGNhQnVuZGxlUGF0aCk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5wcm94eUFkZHJlc3MpIHtcbiAgICBkZWJ1ZygnUHJveHkgc2VydmVyIGZyb20gY29tbWFuZC1saW5lIGFyZ3VtZW50czogJXMnLCBvcHRpb25zLnByb3h5QWRkcmVzcyk7XG4gIH1cblxuICAvLyBDb25maWd1cmUgdGhlIHByb3h5IGFnZW50LiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgdXNlIEhUVFBTP19QUk9YWSBhbmRcbiAgLy8gTk9fUFJPWFkgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGRldGVybWluZSB3aGljaCBwcm94eSB0byB1c2UgZm9yIGVhY2hcbiAgLy8gcmVxdWVzdC5cbiAgLy9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgY29uc3QgUHJveHlBZ2VudCA9IHJlcXVpcmUoJ3Byb3h5LWFnZW50Jyk7XG4gIGNvbmZpZy5odHRwT3B0aW9ucy5hZ2VudCA9IG5ldyBQcm94eUFnZW50KG9wdGlvbnMucHJveHlBZGRyZXNzKTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKipcbiAqIEZpbmQgYW5kIHJldHVybiBhIENBIGNlcnRpZmljYXRlIGJ1bmRsZSBwYXRoIHRvIGJlIHBhc3NlZCBpbnRvIHRoZSBTREsuXG4gKi9cbmZ1bmN0aW9uIGNhQnVuZGxlUGF0aEZyb21FbnZpcm9ubWVudCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAocHJvY2Vzcy5lbnYuYXdzX2NhX2J1bmRsZSkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5hd3NfY2FfYnVuZGxlO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5BV1NfQ0FfQlVORExFKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LkFXU19DQV9CVU5ETEU7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZWFkIGEgZmlsZSBpZiBpdCBleGlzdHMsIG9yIHJldHVybiB1bmRlZmluZWRcbiAqXG4gKiBOb3QgYXN5bmMgYmVjYXVzZSBpdCBpcyB1c2VkIGluIHRoZSBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiByZWFkSWZQb3NzaWJsZShmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBpZiAoIWZzLnBhdGhFeGlzdHNTeW5jKGZpbGVuYW1lKSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhmaWxlbmFtZSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGRlYnVnKGUpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHVzZXJuYW1lIHdpdGggY2hhcmFjdGVycyBpbnZhbGlkIGZvciBhIFJvbGVTZXNzaW9uTmFtZSByZW1vdmVkXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vU1RTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0Fzc3VtZVJvbGUuaHRtbCNBUElfQXNzdW1lUm9sZV9SZXF1ZXN0UGFyYW1ldGVyc1xuICovXG5mdW5jdGlvbiBzYWZlVXNlcm5hbWUoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9zLnVzZXJJbmZvKCkudXNlcm5hbWUucmVwbGFjZSgvW15cXHcrPSwuQC1dL2csICdAJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gJ25vbmFtZSc7XG4gIH1cbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBvYnRhaW5pbmcgY3JlZGVudGlhbHMgZm9yIGFuIGVudmlyb25tZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlZGVudGlhbHNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHJvbGUgdGhhdCBuZWVkcyB0byBiZSBhc3N1bWVkLCBpZiBhbnlcbiAgICovXG4gIHJlYWRvbmx5IGFzc3VtZVJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIElEIHJlcXVpcmVkIHRvIGFzc3VtZSB0aGUgZ2l2ZW4gcm9sZS5cbiAgICovXG4gIHJlYWRvbmx5IGFzc3VtZVJvbGVFeHRlcm5hbElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBvYnRhaW5pbmcgYmFzZSBjcmVkZW50aWFsc1xuICovXG50eXBlIE9idGFpbkJhc2VDcmVkZW50aWFsc1Jlc3VsdCA9XG4gIHsgc291cmNlOiAnY29ycmVjdERlZmF1bHQnOyBjcmVkZW50aWFsczogQVdTLkNyZWRlbnRpYWxzIH1cbiAgfCB7IHNvdXJjZTogJ3BsdWdpbic7IHBsdWdpbk5hbWU6IHN0cmluZywgY3JlZGVudGlhbHM6IEFXUy5DcmVkZW50aWFscyB9XG4gIHwgeyBzb3VyY2U6ICdpbmNvcnJlY3REZWZhdWx0JzsgY3JlZGVudGlhbHM6IEFXUy5DcmVkZW50aWFsczsgYWNjb3VudElkOiBzdHJpbmc7IHVudXNlZFBsdWdpbnM6IHN0cmluZ1tdIH1cbiAgfCB7IHNvdXJjZTogJ25vbmUnOyB1bnVzZWRQbHVnaW5zOiBzdHJpbmdbXSB9O1xuXG4vKipcbiAqIElzb2xhdGluZyB0aGUgY29kZSB0aGF0IHRyYW5zbGF0ZXMgY2FsY3VsYXRpb24gZXJyb3JzIGludG8gaHVtYW4gZXJyb3IgbWVzc2FnZXNcbiAqXG4gKiBXZSBjb3ZlciB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICpcbiAqIC0gTm8gY3JlZGVudGlhbHMgYXJlIGF2YWlsYWJsZSBhdCBhbGxcbiAqIC0gRGVmYXVsdCBjcmVkZW50aWFscyBhcmUgZm9yIHRoZSB3cm9uZyBhY2NvdW50XG4gKi9cbmZ1bmN0aW9uIGZtdE9idGFpbkNyZWRlbnRpYWxzRXJyb3IodGFyZ2V0QWNjb3VudElkOiBzdHJpbmcsIG9idGFpblJlc3VsdDogT2J0YWluQmFzZUNyZWRlbnRpYWxzUmVzdWx0ICYgeyBzb3VyY2U6ICdub25lJyB8ICdpbmNvcnJlY3REZWZhdWx0JyB9KTogc3RyaW5nIHtcbiAgY29uc3QgbXNnID0gW2BOZWVkIHRvIHBlcmZvcm0gQVdTIGNhbGxzIGZvciBhY2NvdW50ICR7dGFyZ2V0QWNjb3VudElkfWBdO1xuICBzd2l0Y2ggKG9idGFpblJlc3VsdC5zb3VyY2UpIHtcbiAgICBjYXNlICdpbmNvcnJlY3REZWZhdWx0JzpcbiAgICAgIG1zZy5wdXNoKGBidXQgdGhlIGN1cnJlbnQgY3JlZGVudGlhbHMgYXJlIGZvciAke29idGFpblJlc3VsdC5hY2NvdW50SWR9YCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdub25lJzpcbiAgICAgIG1zZy5wdXNoKCdidXQgbm8gY3JlZGVudGlhbHMgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQnKTtcbiAgfVxuICBpZiAob2J0YWluUmVzdWx0LnVudXNlZFBsdWdpbnMubGVuZ3RoID4gMCkge1xuICAgIG1zZy5wdXNoKGBhbmQgbm9uZSBvZiB0aGVzZSBwbHVnaW5zIGZvdW5kIGFueTogJHtvYnRhaW5SZXN1bHQudW51c2VkUGx1Z2lucy5qb2luKCcsICcpfWApO1xuICB9XG4gIHJldHVybiBtc2cuam9pbignLCAnKTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgYSBtZXNzYWdlIGluZGljYXRpbmcgd2hlcmUgd2UgZ290IGJhc2UgY3JlZGVudGlhbHMgZm9yIHRoZSBhc3N1bWUgcm9sZVxuICpcbiAqIFdlIGNvdmVyIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG4gKlxuICogLSBEZWZhdWx0IGNyZWRlbnRpYWxzIGZvciB0aGUgcmlnaHQgYWNjb3VudFxuICogLSBEZWZhdWx0IGNyZWRlbnRpYWxzIGZvciB0aGUgd3JvbmcgYWNjb3VudFxuICogLSBDcmVkZW50aWFscyByZXR1cm5lZCBmcm9tIGEgcGx1Z2luXG4gKi9cbmZ1bmN0aW9uIGZtdE9idGFpbmVkQ3JlZGVudGlhbHMoXG4gIG9idGFpblJlc3VsdDogRXhjbHVkZTxPYnRhaW5CYXNlQ3JlZGVudGlhbHNSZXN1bHQsIHsgc291cmNlOiAnbm9uZScgfT4pOiBzdHJpbmcge1xuICBzd2l0Y2ggKG9idGFpblJlc3VsdC5zb3VyY2UpIHtcbiAgICBjYXNlICdjb3JyZWN0RGVmYXVsdCc6XG4gICAgICByZXR1cm4gJ2N1cnJlbnQgY3JlZGVudGlhbHMnO1xuICAgIGNhc2UgJ3BsdWdpbic6XG4gICAgICByZXR1cm4gYGNyZWRlbnRpYWxzIHJldHVybmVkIGJ5IHBsdWdpbiAnJHtvYnRhaW5SZXN1bHQucGx1Z2luTmFtZX0nYDtcbiAgICBjYXNlICdpbmNvcnJlY3REZWZhdWx0JzpcbiAgICAgIGNvbnN0IG1zZyA9IFtdO1xuICAgICAgbXNnLnB1c2goYGN1cnJlbnQgY3JlZGVudGlhbHMgKHdoaWNoIGFyZSBmb3IgYWNjb3VudCAke29idGFpblJlc3VsdC5hY2NvdW50SWR9YCk7XG5cbiAgICAgIGlmIChvYnRhaW5SZXN1bHQudW51c2VkUGx1Z2lucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG1zZy5wdXNoKGAsIGFuZCBub25lIG9mIHRoZSBmb2xsb3dpbmcgcGx1Z2lucyBwcm92aWRlZCBjcmVkZW50aWFsczogJHtvYnRhaW5SZXN1bHQudW51c2VkUGx1Z2lucy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuICAgICAgbXNnLnB1c2goJyknKTtcblxuICAgICAgcmV0dXJuIG1zZy5qb2luKCcnKTtcbiAgfVxufVxuIl19
379
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2RrLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IseUNBQXlDO0FBQ3pDLCtCQUErQjtBQUUvQiwrQkFBK0I7QUFDL0IsaUNBQXdDO0FBQ3hDLDJEQUF1RDtBQUN2RCxxQ0FBa0M7QUFDbEMsNkRBQXlEO0FBRXpELCtCQUFrQztBQUdsQywwREFBMEQ7QUFDMUQseUJBQXlCO0FBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEdBQUcsVUFBVSxDQUFDO0FBQ3BELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLEdBQUcsR0FBRyxDQUFDO0FBMkR0RCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUNoRCxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBNkJ4RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQWEsV0FBVztJQTBCdEIsWUFDbUIsWUFBeUM7SUFDMUQ7O09BRUc7SUFDYSxhQUFxQixFQUNwQixhQUFtQyxFQUFFO1FBTHJDLGlCQUFZLEdBQVosWUFBWSxDQUE2QjtRQUkxQyxrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUNwQixlQUFVLEdBQVYsVUFBVSxDQUEyQjtRQVJ2QyxZQUFPLEdBQUcsSUFBSSxzQ0FBaUIsRUFBRSxDQUFDO0lBU25ELENBQUM7SUFoQ0Q7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLFVBQThCLEVBQUU7UUFDL0UsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUUvRCxNQUFNLEtBQUssR0FBRyxNQUFNLG9DQUFnQixDQUFDLGVBQWUsQ0FBQztZQUNuRCxPQUFPLEVBQUUsT0FBTyxD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WUFDckIsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyw4Q0FBOEMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFFakYsSUFBSSxZQUFZLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3pDLEdBQUcsQ0FBQyxJQUFJLENBQUMsNkRBQTZELFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNoSDtZQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFZCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDdkI7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBBV1MgZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYXRpb25PcHRpb25zIH0gZnJvbSAnYXdzLXNkay9saWIvY29uZmlnLWJhc2UnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgZGVidWcsIHdhcm5pbmcgfSBmcm9tICcuL19lbnYnO1xuaW1wb3J0IHsgQXdzQ2xpQ29tcGF0aWJsZSB9IGZyb20gJy4vYXdzY2xpLWNvbXBhdGlibGUnO1xuaW1wb3J0IHsgY2FjaGVkIH0gZnJvbSAnLi9jYWNoZWQnO1xuaW1wb3J0IHsgQ3JlZGVudGlhbFBsdWdpbnMgfSBmcm9tICcuL2NyZWRlbnRpYWwtcGx1Z2lucyc7XG5pbXBvcnQgeyBNb2RlIH0gZnJvbSAnLi9jcmVkZW50aWFscyc7XG5pbXBvcnQgeyBJU0RLLCBTREsgfSBmcm9tICcuL3Nkayc7XG5cblxuLy8gU29tZSBjb25maWd1cmF0aW9uIHRoYXQgY2FuIG9ubHkgYmUgYWNoaWV2ZWQgYnkgc2V0dGluZ1xuLy8gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxucHJvY2Vzcy5lbnYuQVdTX1NUU19SRUdJT05BTF9FTkRQT0lOVFMgPSAncmVnaW9uYWwnO1xucHJvY2Vzcy5lbnYuQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRUQgPSAnMSc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIGRlZmF1bHQgU0RLIHByb3ZpZGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2RrUHJvdmlkZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFByb2ZpbGUgdG8gcmVhZCBmcm9tIH4vLmF3c1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHByb2ZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgd2Ugc2hvdWxkIGNoZWNrIGZvciBFQzIgY3JlZGVudGlhbHNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBBdXRvZGV0ZWN0XG4gICAqL1xuICByZWFkb25seSBlYzJjcmVkcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgd2Ugc2hvdWxkIGNoZWNrIGZvciBjb250YWluZXIgY3JlZGVudGlhbHNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBBdXRvZGV0ZWN0XG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJDcmVkcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEhUVFAgb3B0aW9ucyBmb3IgU0RLXG4gICAqL1xuICByZWFkb25seSBodHRwT3B0aW9ucz86IFNka0h0dHBPcHRpb25zO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGluZGl2aWR1YWwgU0RLc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNka0h0dHBPcHRpb25zIHtcbiAgLyoqXG4gICAqIFByb3h5IGFkZHJlc3MgdG8gdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIHByb3h5XG4gICAqL1xuICByZWFkb25seSBwcm94eUFkZHJlc3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcGF0aCB0byBhIGNlcnRpZmljYXRlIGJ1bmRsZSB0aGF0IGNvbnRhaW5zIGEgY2VydCB0byBiZSB0cnVzdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBObyBjZXJ0aWZpY2F0ZSBidW5kbGVcbiAgICovXG4gIHJlYWRvbmx5IGNhQnVuZGxlUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGN1c3RvbSB1c2VyIGFnZW50IHRvIHVzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSA8cGFja2FnZS1uYW1lPi88cGFja2FnZS12ZXJzaW9uPlxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckFnZW50Pzogc3RyaW5nO1xufVxuXG5jb25zdCBDQUNIRURfQUNDT1VOVCA9IFN5bWJvbCgnY2FjaGVkX2FjY291bnQnKTtcbmNvbnN0IENBQ0hFRF9ERUZBVUxUX0NSRURFTlRJQUxTID0gU3ltYm9sKCdjYWNoZWRfZGVmYXVsdF9jcmVkZW50aWFscycpO1xuXG4vKipcbiAqIFNESyBjb25maWd1cmF0aW9uIGZvciBhIGdpdmVuIGVudmlyb25tZW50XG4gKiAnZm9yRW52aXJvbm1lbnQnIHdpbGwgYXR0ZW1wdCB0byBhc3N1bWUgYSByb2xlIGFuZCBpZiBpdFxuICogaXMgbm90IHN1Y2Nlc3NmdWwsIHRoZW4gaXQgd2lsbCBlaXRoZXI6XG4gKiAgIDEuIENoZWNrIHRvIHNlZSBpZiB0aGUgZGVmYXVsdCBjcmVkZW50aWFscyAobG9jYWwgY3JlZGVudGlhbHMgdGhlIENMSSB3YXMgZXhlY3V0ZWQgd2l0aClcbiAqICAgICAgYXJlIGZvciB0aGUgZ2l2ZW4gZW52aXJvbm1lbnQuIElmIHRoZXkgYXJlIHRoZW4gcmV0dXJuIHRob3NlLlxuICogICAyLiBJZiB0aGUgZGVmYXVsdCBjcmVkZW50aWFscyBhcmUgbm90IGZvciB0aGUgZ2l2ZW4gZW52aXJvbm1lbnQgdGhlblxuICogICAgICB0aHJvdyBhbiBlcnJvclxuICpcbiAqICdkaWRBc3N1bWVSb2xlJyBhbGxvd3MgY2FsbGVycyB0byB3aGV0aGVyIHRoZXkgYXJlIHJlY2VpdmluZyB0aGUgYXNzdW1lIHJvbGVcbiAqIGNyZWRlbnRpYWxzIG9yIHRoZSBkZWZhdWx0IGNyZWRlbnRpYWxzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNka0ZvckVudmlyb25tZW50IHtcbiAgLyoqXG4gICAqIFRoZSBTREsgZm9yIHRoZSBnaXZlbiBlbnZpcm9ubWVudFxuICAgKi9cbiAgcmVhZG9ubHkgc2RrOiBJU0RLO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgYXNzdW1lIHJvbGUgd2FzIHN1Y2Nlc3NmdWwuXG4gICAqIElmIHRoZSBhc3N1bWUgcm9sZSB3YXMgbm90IHN1Y2Nlc3NmdWwgKGZhbHNlKVxuICAgKiB0aGVuIHRoYXQgbWVhbnMgdGhhdCB0aGUgJ3NkaycgcmV0dXJuZWQgY29udGFpbnNcbiAgICogdGhlIGRlZmF1bHQgY3JlZGVudGlhbHMgKG5vdCB0aGUgYXNzdW1lIHJvbGUgY3JlZGVudGlhbHMpXG4gICAqL1xuICByZWFkb25seSBkaWRBc3N1bWVSb2xlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgaW5zdGFuY2VzIG9mIHRoZSBBV1MgU0RLIGFwcHJvcHJpYXRlIGZvciBhIGdpdmVuIGFjY291bnQvcmVnaW9uLlxuICpcbiAqIEJlaGF2aW9yIGlzIGFzIGZvbGxvd3M6XG4gKlxuICogLSBGaXJzdCwgYSBzZXQgb2YgXCJiYXNlXCIgY3JlZGVudGlhbHMgYXJlIGVzdGFibGlzaGVkXG4gKiAgIC0gSWYgYSB0YXJnZXQgZW52aXJvbm1lbnQgaXMgZ2l2ZW4gYW5kIHRoZSBkZWZhdWx0IChcImN1cnJlbnRcIikgU0RLIGNyZWRlbnRpYWxzIGFyZSBmb3JcbiAqICAgICB0aGF0IGFjY291bnQsIHJldHVybiB0aG9zZTsgb3RoZXJ3aXNlXG4gKiAgIC0gSWYgYSB0YXJnZXQgZW52aXJvbm1lbnQgaXMgZ2l2ZW4sIHNjYW4gYWxsIGNyZWRlbnRpYWwgcHJvdmlkZXIgcGx1Z2luc1xuICogICAgIGZvciBjcmVkZW50aWFscywgYW5kIHJldHVybiB0aG9zZSBpZiBmb3VuZDsgb3RoZXJ3aXNlXG4gKiAgIC0gUmV0dXJuIGRlZmF1bHQgKFwiY3VycmVudFwiKSBTREsgY3JlZGVudGlhbHMsIG5vdGluZyB0aGF0IHRoZXkgbWlnaHQgYmUgd3JvbmcuXG4gKlxuICogLSBTZWNvbmQsIGEgcm9sZSBtYXkgb3B0aW9uYWxseSBuZWVkIHRvIGJlIGFzc3VtZWQuIFVzZSB0aGUgYmFzZSBjcmVkZW50aWFsc1xuICogICBlc3RhYmxpc2hlZCBpbiB0aGUgcHJldmlvdXMgcHJvY2VzcyB0byBhc3N1bWUgdGhhdCByb2xlLlxuICogICAtIElmIGFzc3VtaW5nIHRoZSByb2xlIGZhaWxzIGFuZCB0aGUgYmFzZSBjcmVkZW50aWFscyBhcmUgZm9yIHRoZSBjb3JyZWN0XG4gKiAgICAgYWNjb3VudCwgcmV0dXJuIHRob3NlLiBUaGlzIGlzIGEgZmFsbGJhY2sgZm9yIHBlb3BsZSB3aG8gYXJlIHRyeWluZyB0byBpbnRlcmFjdFxuICogICAgIHdpdGggYSBEZWZhdWx0IFN5bnRoZXNpemVkIHN0YWNrIGFuZCBhbHJlYWR5IGhhdmUgcmlnaHQgY3JlZGVudGlhbHMgc2V0dXAuXG4gKlxuICogICAgIFR5cGljYWwgY2FzZXMgd2Ugc2VlIGluIHRoZSB3aWxkOlxuICogICAgIC0gQ3JlZGVudGlhbCBwbHVnaW4gc2V0dXAgdGhhdCwgYWx0aG91Z2ggbm90IHJlY29tbWVuZGVkLCB3b3JrcyBmb3IgdGhlbVxuICogICAgIC0gU2VlZGVkIHRlcm1pbmFsIHdpdGggYFJlYWRPbmx5YCBjcmVkZW50aWFscyBpbiBvcmRlciB0byBkbyBgY2RrIGRpZmZgLS10aGUgYFJlYWRPbmx5YFxuICogICAgICAgcm9sZSBkb2Vzbid0IGhhdmUgYHN0czpBc3N1bWVSb2xlYCBhbmQgd2lsbCBmYWlsIGZvciBubyByZWFsIGdvb2QgcmVhc29uLlxuICovXG5leHBvcnQgY2xhc3MgU2RrUHJvdmlkZXIge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFNka1Byb3ZpZGVyIHdoaWNoIGdldHMgaXRzIGRlZmF1bHRzIGluIGEgd2F5IHRoYXQgYmVoYXZlcyBsaWtlIHRoZSBBV1MgQ0xJIGRvZXNcbiAgICpcbiAgICogVGhlIEFXUyBTREsgZm9yIEpTIGJlaGF2ZXMgc2xpZ2h0bHkgZGlmZmVyZW50bHkgZnJvbSB0aGUgQVdTIENMSSBpbiBhIG51bWJlciBvZiB3YXlzOyBzZWUgdGhlXG4gICAqIGNsYXNzIGBBd3NDbGlDb21wYXRpYmxlYCBmb3IgdGhlIGRldGFpbHMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIHdpdGhBd3NDbGlDb21wYXRpYmxlRGVmYXVsdHMob3B0aW9uczogU2RrUHJvdmlkZXJPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzZGtPcHRpb25zID0gcGFyc2VIdHRwT3B0aW9ucyhvcHRpb25zLmh0dHBPcHRpb25zID8/IHt9KTtcblxuICAgIGNvbnN0IGNoYWluID0gYXdhaXQgQXdzQ2xpQ29tcGF0aWJsZS5jcmVkZW50aWFsQ2hhaW4oe1xuICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgZWMyaW5zdGFuY2U6IG9wdGlvbnMuZWMyY3JlZHMsXG4gICAgICBjb250YWluZXJDcmVkczogb3B0aW9ucy5jb250YWluZXJDcmVkcyxcbiAgICAgIGh0dHBPcHRpb25zOiBzZGtPcHRpb25zLmh0dHBPcHRpb25zLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlZ2lvbiA9IGF3YWl0IEF3c0NsaUNvbXBhdGlibGUucmVnaW9uKHtcbiAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICAgIGVjMmluc3RhbmNlOiBvcHRpb25zLmVjMmNyZWRzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBTZGtQcm92aWRlcihjaGFpbiwgcmVnaW9uLCBzZGtPcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2lucyA9IG5ldyBDcmVkZW50aWFsUGx1Z2lucygpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRDaGFpbjogQVdTLkNyZWRlbnRpYWxQcm92aWRlckNoYWluLFxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgcmVnaW9uXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRSZWdpb246IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNka09wdGlvbnM6IENvbmZpZ3VyYXRpb25PcHRpb25zID0ge30pIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gU0RLIHdoaWNoIGNhbiBkbyBvcGVyYXRpb25zIGluIHRoZSBnaXZlbiBlbnZpcm9ubWVudFxuICAgKlxuICAgKiBUaGUgYGVudmlyb25tZW50YCBwYXJhbWV0ZXIgaXMgcmVzb2x2ZWQgZmlyc3QgKHNlZSBgcmVzb2x2ZUVudmlyb25tZW50KClgKS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBmb3JFbnZpcm9ubWVudChcbiAgICBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsXG4gICAgbW9kZTogTW9kZSxcbiAgICBvcHRpb25zPzogQ3JlZGVudGlhbHNPcHRpb25zLFxuICApOiBQcm9taXNlPFNka0ZvckVudmlyb25tZW50PiB7XG4gICAgY29uc3QgZW52ID0gYXdhaXQgdGhpcy5yZXNvbHZlRW52aXJvbm1lbnQoZW52aXJvbm1lbnQpO1xuICAgIGNvbnN0IGJhc2VDcmVkcyA9IGF3YWl0IHRoaXMub2J0YWluQmFzZUNyZWRlbnRpYWxzKGVudi5hY2NvdW50LCBtb2RlKTtcblxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIG5lZWQgYXQgbGVhc3QgU09NRSBjcmVkZW50aWFsc1xuICAgIGlmIChiYXNlQ3JlZHMuc291cmNlID09PSAnbm9uZScpIHsgdGhyb3cgbmV3IEVycm9yKGZtdE9idGFpbkNyZWRlbnRpYWxzRXJyb3IoZW52LmFjY291bnQsIGJhc2VDcmVkcykpOyB9XG5cbiAgICAvLyBTaW1wbGUgY2FzZSBpcyBpZiB3ZSBkb24ndCBuZWVkIHRvIFwiYXNzdW1lUm9sZVwiIGhlcmUuIElmIHNvLCB3ZSBtdXN0IG5vdyBoYXZlIGNyZWRlbnRpYWxzIGZvciB0aGUgcmlnaHRcbiAgICAvLyBhY2NvdW50LlxuICAgIGlmIChvcHRpb25zPy5hc3N1bWVSb2xlQXJuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChiYXNlQ3JlZHMuc291cmNlID09PSAnaW5jb3JyZWN0RGVmYXVsdCcpIHsgdGhyb3cgbmV3IEVycm9yKGZtdE9idGFpbkNyZWRlbnRpYWxzRXJyb3IoZW52LmFjY291bnQsIGJhc2VDcmVkcykpOyB9XG4gICAgICByZXR1cm4geyBzZGs6IG5ldyBTREsoYmFzZUNyZWRzLmNyZWRlbnRpYWxzLCBlbnYucmVnaW9uLCB0aGlzLnNka09wdGlvbnMpLCBkaWRBc3N1bWVSb2xlOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIC8vIFdlIHdpbGwgcHJvY2VlZCB0byBBc3N1bWVSb2xlIHVzaW5nIHdoYXRldmVyIHdlJ3ZlIGJlZW4gZ2l2ZW4uXG4gICAgY29uc3Qgc2RrID0gYXdhaXQgdGhpcy53aXRoQXNzdW1lZFJvbGUoYmFzZUNyZWRzLCBvcHRpb25zLmFzc3VtZVJvbGVBcm4sIG9wdGlvbnMuYXNzdW1lUm9sZUV4dGVybmFsSWQsIGVudi5yZWdpb24pO1xuXG4gICAgLy8gRXhlcmNpc2UgdGhlIEFzc3VtZVJvbGVDcmVkZW50aWFsc1Byb3ZpZGVyIHdlJ3ZlIGdvdHRlbiBhdCBsZWFzdCBvbmNlIHNvXG4gICAgLy8gd2UgY2FuIGRldGVybWluZSB3aGV0aGVyIHRoZSBBc3N1bWVSb2xlIGNhbGwgc3VjY2VlZHMgb3Igbm90LlxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZGsuZm9yY2VDcmVkZW50aWFsUmV0cmlldmFsKCk7XG4gICAgICByZXR1cm4geyBzZGssIGRpZEFzc3VtZVJvbGU6IHRydWUgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBBc3N1bWVSb2xlIGZhaWxlZC4gUHJvY2VlZCBhbmQgd2FybiAqaWYgYW5kIG9ubHkgaWYqIHRoZSBiYXNlQ3JlZGVudGlhbHMgd2VyZSBhbHJlYWR5IGZvciB0aGUgcmlnaHQgYWNjb3VudFxuICAgICAgLy8gb3IgcmV0dXJuZWQgZnJvbSBhIHBsdWdpbi4gVGhpcyBpcyB0byBjb3ZlciBzb21lIGN1cnJlbnQgc2V0dXBzIGZvciBwZW9wbGUgdXNpbmcgcGx1Z2lucyBvciBwcmVmZXJyaW5nIHRvXG4gICAgICAvLyBmZWVkIHRoZSBDTEkgY3JlZGVudGlhbHMgd2hpY2ggYXJlIHN1ZmZpY2llbnQgYnkgdGhlbXNlbHZlcy4gUHJlZmVyIHRvIGFzc3VtZSB0aGUgY29ycmVjdCByb2xlIGlmIHdlIGNhbixcbiAgICAgIC8vIGJ1dCBpZiB3ZSBjYW4ndCB0aGVuIGxldCdzIGp1c3QgdHJ5IHdpdGggYXZhaWxhYmxlIGNyZWRlbnRpYWxzIGFueXdheS5cbiAgICAgIGlmIChiYXNlQ3JlZHMuc291cmNlID09PSAnY29ycmVjdERlZmF1bHQnIHx8IGJhc2VDcmVkcy5zb3VyY2UgPT09ICdwbHVnaW4nKSB7XG4gICAgICAgIGRlYnVnKGUubWVzc2FnZSk7XG4gICAgICAgIHdhcm5pbmcoYCR7Zm10T2J0YWluZWRDcmVkZW50aWFscyhiYXNlQ3JlZHMpfSBjb3VsZCBub3QgYmUgdXNlZCB0byBhc3N1bWUgJyR7b3B0aW9ucy5hc3N1bWVSb2xlQXJufScsIGJ1dCBhcmUgZm9yIHRoZSByaWdodCBhY2NvdW50LiBQcm9jZWVkaW5nIGFueXdheS5gKTtcbiAgICAgICAgcmV0dXJuIHsgc2RrOiBuZXcgU0RLKGJhc2VDcmVkcy5jcmVkZW50aWFscywgZW52LnJlZ2lvbiwgdGhpcy5zZGtPcHRpb25zKSwgZGlkQXNzdW1lUm9sZTogZmFsc2UgfTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBwYXJ0aXRpb24gdGhhdCBiYXNlIGNyZWRlbnRpYWxzIGFyZSBmb3JcbiAgICpcbiAgICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGVyZSBhcmUgbm8gYmFzZSBjcmVkZW50aWFscy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBiYXNlQ3JlZGVudGlhbHNQYXJ0aXRpb24oZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LCBtb2RlOiBNb2RlKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBlbnYgPSBhd2FpdCB0aGlzLnJlc29sdmVFbnZpcm9ubWVudChlbnZpcm9ubWVudCk7XG4gICAgY29uc3QgYmFzZUNyZWRzID0gYXdhaXQgdGhpcy5vYnRhaW5CYXNlQ3JlZGVudGlhbHMoZW52LmFjY291bnQsIG1vZGUpO1xuICAgIGlmIChiYXNlQ3JlZHMuc291cmNlID09PSAnbm9uZScpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICAgIHJldHVybiAoYXdhaXQgbmV3IFNESyhiYXNlQ3JlZHMuY3JlZGVudGlhbHMsIGVudi5yZWdpb24sIHRoaXMuc2RrT3B0aW9ucykuY3VycmVudEFjY291bnQoKSkucGFydGl0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGVudmlyb25tZW50IGZvciBhIHN0YWNrXG4gICAqXG4gICAqIFJlcGxhY2VzIHRoZSBtYWdpYyB2YWx1ZXMgYFVOS05PV05fUkVHSU9OYCBhbmQgYFVOS05PV05fQUNDT1VOVGBcbiAgICogd2l0aCB0aGUgZGVmYXVsdHMgZm9yIHRoZSBjdXJyZW50IFNESyBjb25maWd1cmF0aW9uIChgfi8uYXdzL2NvbmZpZ2Agb3JcbiAgICogb3RoZXJ3aXNlKS5cbiAgICpcbiAgICogSXQgaXMgYW4gZXJyb3IgaWYgYFVOS05PV05fQUNDT1VOVGAgaXMgdXNlZCBidXQgdGhlIHVzZXIgaGFzbid0IGNvbmZpZ3VyZWRcbiAgICogYW55IFNESyBjcmVkZW50aWFscy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXNvbHZlRW52aXJvbm1lbnQoZW52OiBjeGFwaS5FbnZpcm9ubWVudCk6IFByb21pc2U8Y3hhcGkuRW52aXJvbm1lbnQ+IHtcbiAgICBjb25zdCByZWdpb24gPSBlbnYucmVnaW9uICE9PSBjeGFwaS5VTktOT1dOX1JFR0lPTiA/IGVudi5yZWdpb24gOiB0aGlzLmRlZmF1bHRSZWdpb247XG4gICAgY29uc3QgYWNjb3VudCA9IGVudi5hY2NvdW50ICE9PSBjeGFwaS5VTktOT1dOX0FDQ09VTlQgPyBlbnYuYWNjb3VudCA6IChhd2FpdCB0aGlzLmRlZmF1bHRBY2NvdW50KCkpPy5hY2NvdW50SWQ7XG5cbiAgICBpZiAoIWFjY291bnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJlc29sdmUgQVdTIGFjY291bnQgdG8gdXNlLiBJdCBtdXN0IGJlIGVpdGhlciBjb25maWd1cmVkIHdoZW4geW91IGRlZmluZSB5b3VyIENESyBTdGFjaywgb3IgdGhyb3VnaCB0aGUgZW52aXJvbm1lbnQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVnaW9uLFxuICAgICAgYWNjb3VudCxcbiAgICAgIG5hbWU6IGN4YXBpLkVudmlyb25tZW50VXRpbHMuZm9ybWF0KGFjY291bnQsIHJlZ2lvbiksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYWNjb3VudCB3ZSdkIGF1dGggaW50byBpZiB3ZSB1c2VkIGRlZmF1bHQgY3JlZGVudGlhbHMuXG4gICAqXG4gICAqIERlZmF1bHQgY3JlZGVudGlhbHMgYXJlIHRoZSBzZXQgb2YgYW1iaWVudGx5IGNvbmZpZ3VyZWQgY3JlZGVudGlhbHMgdXNpbmdcbiAgICogb25lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIG9yIH4vLmF3cy9jcmVkZW50aWFscywgb3IgdGhlICpvbmUqXG4gICAqIHByb2ZpbGUgdGhhdCB3YXMgcGFzc2VkIGludG8gdGhlIENMSS5cbiAgICpcbiAgICogTWlnaHQgcmV0dXJuIHVuZGVmaW5lZCBpZiB0aGVyZSBhcmUgbm8gZGVmYXVsdC9hbWJpZW50IGNyZWRlbnRpYWxzXG4gICAqIGF2YWlsYWJsZSAoaW4gd2hpY2ggY2FzZSB0aGUgdXNlciBzaG91bGQgYmV0dGVyIGhvcGUgdGhleSBoYXZlXG4gICAqIGNyZWRlbnRpYWwgcGx1Z2lucyBjb25maWd1cmVkKS5cbiAgICpcbiAgICogVXNlcyBhIGNhY2hlIHRvIGF2b2lkIFNUUyBjYWxscyBpZiB3ZSBkb24ndCBuZWVkICdlbS5cbiAgICovXG4gIHB1YmxpYyBkZWZhdWx0QWNjb3VudCgpOiBQcm9taXNlPEFjY291bnQgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gY2FjaGVkKHRoaXMsIENBQ0hFRF9BQ0NPVU5ULCBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjcmVkcyA9IGF3YWl0IHRoaXMuZGVmYXVsdENyZWRlbnRpYWxzKCk7XG5cbiAgICAgICAgY29uc3QgYWNjZXNzS2V5SWQgPSBjcmVkcy5hY2Nlc3NLZXlJZDtcbiAgICAgICAgaWYgKCFhY2Nlc3NLZXlJZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJlc29sdmUgQVdTIGNyZWRlbnRpYWxzIChzZXR1cCB3aXRoIFwiYXdzIGNvbmZpZ3VyZVwiKScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG5ldyBTREsoY3JlZHMsIHRoaXMuZGVmYXVsdFJlZ2lvbiwgdGhpcy5zZGtPcHRpb25zKS5jdXJyZW50QWNjb3VudCgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWJ1ZygnVW5hYmxlIHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBBV1MgYWNjb3VudDonLCBlKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3JlZGVudGlhbHMgZm9yIHRoZSBnaXZlbiBhY2NvdW50IElEIGluIHRoZSBnaXZlbiBtb2RlXG4gICAqXG4gICAqIDEuIFVzZSB0aGUgZGVmYXVsdCBjcmVkZW50aWFscyBpZiB0aGUgZGVzdGluYXRpb24gYWNjb3VudCBtYXRjaGVzIHRoZVxuICAgKiAgICBjdXJyZW50IGNyZWRlbnRpYWxzJyBhY2NvdW50LlxuICAgKiAyLiBPdGhlcndpc2UgdHJ5IGFsbCBjcmVkZW50aWFsIHBsdWdpbnMuXG4gICAqIDMuIEZhaWwgaWYgbmVpdGhlciBvZiB0aGVzZSB5aWVsZCBhbnkgY3JlZGVudGlhbHMuXG4gICAqIDQuIFJldHVybiBhIGZhaWx1cmUgaWYgYW55IG9mIHRoZW0gcmV0dXJuZWQgY3JlZGVudGlhbHNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgb2J0YWluQmFzZUNyZWRlbnRpYWxzKGFjY291bnRJZDogc3RyaW5nLCBtb2RlOiBNb2RlKTogUHJvbWlzZTxPYnRhaW5CYXNlQ3JlZGVudGlhbHNSZXN1bHQ+IHtcbiAgICAvLyBGaXJzdCB0cnkgJ2N1cnJlbnQnIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgZGVmYXVsdEFjY291bnRJZCA9IChhd2FpdCB0aGlzLmRlZmF1bHRBY2NvdW50KCkpPy5hY2NvdW50SWQ7XG4gICAgaWYgKGRlZmF1bHRBY2NvdW50SWQgPT09IGFjY291bnRJZCkge1xuICAgICAgcmV0dXJuIHsgc291cmNlOiAnY29ycmVjdERlZmF1bHQnLCBjcmVkZW50aWFsczogYXdhaXQgdGhpcy5kZWZhdWx0Q3JlZGVudGlhbHMoKSB9O1xuICAgIH1cblxuICAgIC8vIFRoZW4gdHJ5IHRoZSBwbHVnaW5zXG4gICAgY29uc3QgcGx1Z2luQ3JlZHMgPSBhd2FpdCB0aGlzLnBsdWdpbnMuZmV0Y2hDcmVkZW50aWFsc0ZvcihhY2NvdW50SWQsIG1vZGUpO1xuICAgIGlmIChwbHVnaW5DcmVkcykge1xuICAgICAgcmV0dXJuIHsgc291cmNlOiAncGx1Z2luJywgLi4ucGx1Z2luQ3JlZHMgfTtcbiAgICB9XG5cbiAgICAvLyBGYWxsIGJhY2sgdG8gZGVmYXVsdCBjcmVkZW50aWFscyB3aXRoIGEgbm90ZSB0aGF0IHRoZXkncmUgbm90IHRoZSByaWdodCBvbmVzIHlldFxuICAgIGlmIChkZWZhdWx0QWNjb3VudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogJ2luY29ycmVjdERlZmF1bHQnLFxuICAgICAgICBhY2NvdW50SWQ6IGRlZmF1bHRBY2NvdW50SWQsXG4gICAgICAgIGNyZWRlbnRpYWxzOiBhd2FpdCB0aGlzLmRlZmF1bHRDcmVkZW50aWFscygpLFxuICAgICAgICB1bnVzZWRQbHVnaW5zOiB0aGlzLnBsdWdpbnMuYXZhaWxhYmxlUGx1Z2luTmFtZXMsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEFwcGFyZW50bHkgd2UgZGlkbid0IGZpbmQgYW55IGF0IGFsbFxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6ICdub25lJyxcbiAgICAgIHVudXNlZFBsdWdpbnM6IHRoaXMucGx1Z2lucy5hdmFpbGFibGVQbHVnaW5OYW1lcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGRlZmF1bHQgY2hhaW4gdG8gdGhlIGZpcnN0IHNldCBvZiBjcmVkZW50aWFscyB0aGF0IGlzIGF2YWlsYWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBkZWZhdWx0Q3JlZGVudGlhbHMoKTogUHJvbWlzZTxBV1MuQ3JlZGVudGlhbHM+IHtcbiAgICByZXR1cm4gY2FjaGVkKHRoaXMsIENBQ0hFRF9ERUZBVUxUX0NSRURFTlRJQUxTLCAoKSA9PiB7XG4gICAgICBkZWJ1ZygnUmVzb2x2aW5nIGRlZmF1bHQgY3JlZGVudGlhbHMnKTtcbiAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRDaGFpbi5yZXNvbHZlUHJvbWlzZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBTREsgd2hpY2ggdXNlcyBhc3N1bWVkIHJvbGUgY3JlZGVudGlhbHNcbiAgICpcbiAgICogVGhlIGJhc2UgY3JlZGVudGlhbHMgdXNlZCB0byByZXRyaWV2ZSB0aGUgYXNzdW1lZCByb2xlIGNyZWRlbnRpYWxzIHdpbGwgYmUgdGhlXG4gICAqIHNhbWUgY3JlZGVudGlhbHMgcmV0dXJuZWQgYnkgb2J0YWluQ3JlZGVudGlhbHMgaWYgYW4gZW52aXJvbm1lbnQgYW5kIG1vZGUgaXMgcGFzc2VkLFxuICAgKiBvdGhlcndpc2UgaXQgd2lsbCBiZSB0aGUgY3VycmVudCBjcmVkZW50aWFscy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgd2l0aEFzc3VtZWRSb2xlKFxuICAgIG1hc3RlckNyZWRlbnRpYWxzOiBFeGNsdWRlPE9idGFpbkJhc2VDcmVkZW50aWFsc1Jlc3VsdCwgeyBzb3VyY2U6ICdub25lJyB9PixcbiAgICByb2xlQXJuOiBzdHJpbmcsXG4gICAgZXh0ZXJuYWxJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHJlZ2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgZGVidWcoYEFzc3VtaW5nIHJvbGUgJyR7cm9sZUFybn0nLmApO1xuXG4gICAgcmVnaW9uID0gcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbjtcblxuICAgIGNvbnN0IGNyZWRzID0gbmV3IEFXUy5DaGFpbmFibGVUZW1wb3JhcnlDcmVkZW50aWFscyh7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgUm9sZUFybjogcm9sZUFybixcbiAgICAgICAgLi4uZXh0ZXJuYWxJZCA/IHsgRXh0ZXJuYWxJZDogZXh0ZXJuYWxJZCB9IDoge30sXG4gICAgICAgIFJvbGVTZXNzaW9uTmFtZTogYGF3cy1jZGstJHtzYWZlVXNlcm5hbWUoKX1gLFxuICAgICAgfSxcbiAgICAgIHN0c0NvbmZpZzoge1xuICAgICAgICByZWdpb24sXG4gICAgICAgIC4uLnRoaXMuc2RrT3B0aW9ucyxcbiAgICAgIH0sXG4gICAgICBtYXN0ZXJDcmVkZW50aWFsczogbWFzdGVyQ3JlZGVudGlhbHMuY3JlZGVudGlhbHMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFNESyhjcmVkcywgcmVnaW9uLCB0aGlzLnNka09wdGlvbnMsIHtcbiAgICAgIGFzc3VtZVJvbGVDcmVkZW50aWFsc1NvdXJjZURlc2NyaXB0aW9uOiBmbXRPYnRhaW5lZENyZWRlbnRpYWxzKG1hc3RlckNyZWRlbnRpYWxzKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIEFXUyBhY2NvdW50XG4gKlxuICogQW4gQVdTIGFjY291bnQgYWx3YXlzIGV4aXN0cyBpbiBvbmx5IG9uZSBwYXJ0aXRpb24uIFVzdWFsbHkgd2UgZG9uJ3QgY2FyZSBhYm91dFxuICogdGhlIHBhcnRpdGlvbiwgYnV0IHdoZW4gd2UgbmVlZCB0byBmb3JtIEFSTnMgd2UgZG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWNjb3VudCB7XG4gIC8qKlxuICAgKiBUaGUgYWNjb3VudCBudW1iZXJcbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFydGl0aW9uICgnYXdzJyBvciAnYXdzLWNuJyBvciBvdGhlcndpc2UpXG4gICAqL1xuICByZWFkb25seSBwYXJ0aXRpb246IHN0cmluZztcbn1cblxuY29uc3QgREVGQVVMVF9DT05ORUNUSU9OX1RJTUVPVVQgPSAxMDAwMDtcbmNvbnN0IERFRkFVTFRfVElNRU9VVCA9IDMwMDAwMDtcblxuLyoqXG4gKiBHZXQgSFRUUCBvcHRpb25zIGZvciB0aGUgU0RLXG4gKlxuICogUmVhZCBmcm9tIHVzZXIgaW5wdXQgb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqIFJldHVybnMgYSBjb21wbGV0ZSBgQ29uZmlndXJhdGlvbk9wdGlvbnNgIG9iamVjdCBiZWNhdXNlIHRoYXQncyB3aGVyZVxuICogYGN1c3RvbVVzZXJBZ2VudGAgbGl2ZXMsIGJ1dCBgaHR0cE9wdGlvbnNgIGlzIHRoZSBtb3N0IGltcG9ydGFudCBhdHRyaWJ1dGUuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSHR0cE9wdGlvbnMob3B0aW9uczogU2RrSHR0cE9wdGlvbnMpIHtcbiAgY29uc3QgY29uZmlnOiBDb25maWd1cmF0aW9uT3B0aW9ucyA9IHt9O1xuICBjb25maWcuaHR0cE9wdGlvbnMgPSB7fTtcblxuICBjb25maWcuaHR0cE9wdGlvbnMuY29ubmVjdFRpbWVvdXQgPSBERUZBVUxUX0NPTk5FQ1RJT05fVElNRU9VVDtcbiAgY29uZmlnLmh0dHBPcHRpb25zLnRpbWVvdXQgPSBERUZBVUxUX1RJTUVPVVQ7XG5cbiAgbGV0IHVzZXJBZ2VudCA9IG9wdGlvbnMudXNlckFnZW50O1xuICBpZiAodXNlckFnZW50ID09IG51bGwpIHtcbiAgICAvLyBGaW5kIHRoZSBwYWNrYWdlLmpzb24gZnJvbSB0aGUgbWFpbiB0b29sa2l0XG4gICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShyZWFkSWZQb3NzaWJsZShwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnLi4nLCAncGFja2FnZS5qc29uJykpID8/ICd7fScpO1xuICAgIHVzZXJBZ2VudCA9IGAke3BrZy5uYW1lfS8ke3BrZy52ZXJzaW9ufWA7XG4gIH1cbiAgY29uZmlnLmN1c3RvbVVzZXJBZ2VudCA9IHVzZXJBZ2VudDtcblxuICBjb25zdCBjYUJ1bmRsZVBhdGggPSBvcHRpb25zLmNhQnVuZGxlUGF0aCB8fCBjYUJ1bmRsZVBhdGhGcm9tRW52aXJvbm1lbnQoKTtcbiAgaWYgKGNhQnVuZGxlUGF0aCkge1xuICAgIGRlYnVnKCdVc2luZyBDQSBidW5kbGUgcGF0aDogJXMnLCBjYUJ1bmRsZVBhdGgpO1xuICAgIChjb25maWcuaHR0cE9wdGlvbnMgYXMgYW55KS5jYSA9IHJlYWRJZlBvc3NpYmxlKGNhQnVuZGxlUGF0aCk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5wcm94eUFkZHJlc3MpIHtcbiAgICBkZWJ1ZygnUHJveHkgc2VydmVyIGZyb20gY29tbWFuZC1saW5lIGFyZ3VtZW50czogJXMnLCBvcHRpb25zLnByb3h5QWRkcmVzcyk7XG4gIH1cblxuICAvLyBDb25maWd1cmUgdGhlIHByb3h5IGFnZW50LiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgdXNlIEhUVFBTP19QUk9YWSBhbmRcbiAgLy8gTk9fUFJPWFkgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGRldGVybWluZSB3aGljaCBwcm94eSB0byB1c2UgZm9yIGVhY2hcbiAgLy8gcmVxdWVzdC5cbiAgLy9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgY29uc3QgUHJveHlBZ2VudCA9IHJlcXVpcmUoJ3Byb3h5LWFnZW50Jyk7XG4gIGNvbmZpZy5odHRwT3B0aW9ucy5hZ2VudCA9IG5ldyBQcm94eUFnZW50KG9wdGlvbnMucHJveHlBZGRyZXNzKTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKipcbiAqIEZpbmQgYW5kIHJldHVybiBhIENBIGNlcnRpZmljYXRlIGJ1bmRsZSBwYXRoIHRvIGJlIHBhc3NlZCBpbnRvIHRoZSBTREsuXG4gKi9cbmZ1bmN0aW9uIGNhQnVuZGxlUGF0aEZyb21FbnZpcm9ubWVudCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAocHJvY2Vzcy5lbnYuYXdzX2NhX2J1bmRsZSkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5hd3NfY2FfYnVuZGxlO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5BV1NfQ0FfQlVORExFKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LkFXU19DQV9CVU5ETEU7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZWFkIGEgZmlsZSBpZiBpdCBleGlzdHMsIG9yIHJldHVybiB1bmRlZmluZWRcbiAqXG4gKiBOb3QgYXN5bmMgYmVjYXVzZSBpdCBpcyB1c2VkIGluIHRoZSBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiByZWFkSWZQb3NzaWJsZShmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBpZiAoIWZzLnBhdGhFeGlzdHNTeW5jKGZpbGVuYW1lKSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhmaWxlbmFtZSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGRlYnVnKGUpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHVzZXJuYW1lIHdpdGggY2hhcmFjdGVycyBpbnZhbGlkIGZvciBhIFJvbGVTZXNzaW9uTmFtZSByZW1vdmVkXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vU1RTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0Fzc3VtZVJvbGUuaHRtbCNBUElfQXNzdW1lUm9sZV9SZXF1ZXN0UGFyYW1ldGVyc1xuICovXG5mdW5jdGlvbiBzYWZlVXNlcm5hbWUoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9zLnVzZXJJbmZvKCkudXNlcm5hbWUucmVwbGFjZSgvW15cXHcrPSwuQC1dL2csICdAJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gJ25vbmFtZSc7XG4gIH1cbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBvYnRhaW5pbmcgY3JlZGVudGlhbHMgZm9yIGFuIGVudmlyb25tZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlZGVudGlhbHNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHJvbGUgdGhhdCBuZWVkcyB0byBiZSBhc3N1bWVkLCBpZiBhbnlcbiAgICovXG4gIHJlYWRvbmx5IGFzc3VtZVJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIElEIHJlcXVpcmVkIHRvIGFzc3VtZSB0aGUgZ2l2ZW4gcm9sZS5cbiAgICovXG4gIHJlYWRvbmx5IGFzc3VtZVJvbGVFeHRlcm5hbElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBvYnRhaW5pbmcgYmFzZSBjcmVkZW50aWFsc1xuICovXG50eXBlIE9idGFpbkJhc2VDcmVkZW50aWFsc1Jlc3VsdCA9XG4gIHsgc291cmNlOiAnY29ycmVjdERlZmF1bHQnOyBjcmVkZW50aWFsczogQVdTLkNyZWRlbnRpYWxzIH1cbiAgfCB7IHNvdXJjZTogJ3BsdWdpbic7IHBsdWdpbk5hbWU6IHN0cmluZywgY3JlZGVudGlhbHM6IEFXUy5DcmVkZW50aWFscyB9XG4gIHwgeyBzb3VyY2U6ICdpbmNvcnJlY3REZWZhdWx0JzsgY3JlZGVudGlhbHM6IEFXUy5DcmVkZW50aWFsczsgYWNjb3VudElkOiBzdHJpbmc7IHVudXNlZFBsdWdpbnM6IHN0cmluZ1tdIH1cbiAgfCB7IHNvdXJjZTogJ25vbmUnOyB1bnVzZWRQbHVnaW5zOiBzdHJpbmdbXSB9O1xuXG4vKipcbiAqIElzb2xhdGluZyB0aGUgY29kZSB0aGF0IHRyYW5zbGF0ZXMgY2FsY3VsYXRpb24gZXJyb3JzIGludG8gaHVtYW4gZXJyb3IgbWVzc2FnZXNcbiAqXG4gKiBXZSBjb3ZlciB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICpcbiAqIC0gTm8gY3JlZGVudGlhbHMgYXJlIGF2YWlsYWJsZSBhdCBhbGxcbiAqIC0gRGVmYXVsdCBjcmVkZW50aWFscyBhcmUgZm9yIHRoZSB3cm9uZyBhY2NvdW50XG4gKi9cbmZ1bmN0aW9uIGZtdE9idGFpbkNyZWRlbnRpYWxzRXJyb3IodGFyZ2V0QWNjb3VudElkOiBzdHJpbmcsIG9idGFpblJlc3VsdDogT2J0YWluQmFzZUNyZWRlbnRpYWxzUmVzdWx0ICYgeyBzb3VyY2U6ICdub25lJyB8ICdpbmNvcnJlY3REZWZhdWx0JyB9KTogc3RyaW5nIHtcbiAgY29uc3QgbXNnID0gW2BOZWVkIHRvIHBlcmZvcm0gQVdTIGNhbGxzIGZvciBhY2NvdW50ICR7dGFyZ2V0QWNjb3VudElkfWBdO1xuICBzd2l0Y2ggKG9idGFpblJlc3VsdC5zb3VyY2UpIHtcbiAgICBjYXNlICdpbmNvcnJlY3REZWZhdWx0JzpcbiAgICAgIG1zZy5wdXNoKGBidXQgdGhlIGN1cnJlbnQgY3JlZGVudGlhbHMgYXJlIGZvciAke29idGFpblJlc3VsdC5hY2NvdW50SWR9YCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdub25lJzpcbiAgICAgIG1zZy5wdXNoKCdidXQgbm8gY3JlZGVudGlhbHMgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQnKTtcbiAgfVxuICBpZiAob2J0YWluUmVzdWx0LnVudXNlZFBsdWdpbnMubGVuZ3RoID4gMCkge1xuICAgIG1zZy5wdXNoKGBhbmQgbm9uZSBvZiB0aGVzZSBwbHVnaW5zIGZvdW5kIGFueTogJHtvYnRhaW5SZXN1bHQudW51c2VkUGx1Z2lucy5qb2luKCcsICcpfWApO1xuICB9XG4gIHJldHVybiBtc2cuam9pbignLCAnKTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgYSBtZXNzYWdlIGluZGljYXRpbmcgd2hlcmUgd2UgZ290IGJhc2UgY3JlZGVudGlhbHMgZm9yIHRoZSBhc3N1bWUgcm9sZVxuICpcbiAqIFdlIGNvdmVyIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG4gKlxuICogLSBEZWZhdWx0IGNyZWRlbnRpYWxzIGZvciB0aGUgcmlnaHQgYWNjb3VudFxuICogLSBEZWZhdWx0IGNyZWRlbnRpYWxzIGZvciB0aGUgd3JvbmcgYWNjb3VudFxuICogLSBDcmVkZW50aWFscyByZXR1cm5lZCBmcm9tIGEgcGx1Z2luXG4gKi9cbmZ1bmN0aW9uIGZtdE9idGFpbmVkQ3JlZGVudGlhbHMoXG4gIG9idGFpblJlc3VsdDogRXhjbHVkZTxPYnRhaW5CYXNlQ3JlZGVudGlhbHNSZXN1bHQsIHsgc291cmNlOiAnbm9uZScgfT4pOiBzdHJpbmcge1xuICBzd2l0Y2ggKG9idGFpblJlc3VsdC5zb3VyY2UpIHtcbiAgICBjYXNlICdjb3JyZWN0RGVmYXVsdCc6XG4gICAgICByZXR1cm4gJ2N1cnJlbnQgY3JlZGVudGlhbHMnO1xuICAgIGNhc2UgJ3BsdWdpbic6XG4gICAgICByZXR1cm4gYGNyZWRlbnRpYWxzIHJldHVybmVkIGJ5IHBsdWdpbiAnJHtvYnRhaW5SZXN1bHQucGx1Z2luTmFtZX0nYDtcbiAgICBjYXNlICdpbmNvcnJlY3REZWZhdWx0JzpcbiAgICAgIGNvbnN0IG1zZyA9IFtdO1xuICAgICAgbXNnLnB1c2goYGN1cnJlbnQgY3JlZGVudGlhbHMgKHdoaWNoIGFyZSBmb3IgYWNjb3VudCAke29idGFpblJlc3VsdC5hY2NvdW50SWR9YCk7XG5cbiAgICAgIGlmIChvYnRhaW5SZXN1bHQudW51c2VkUGx1Z2lucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG1zZy5wdXNoKGAsIGFuZCBub25lIG9mIHRoZSBmb2xsb3dpbmcgcGx1Z2lucyBwcm92aWRlZCBjcmVkZW50aWFsczogJHtvYnRhaW5SZXN1bHQudW51c2VkUGx1Z2lucy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuICAgICAgbXNnLnB1c2goJyknKTtcblxuICAgICAgcmV0dXJuIG1zZy5qb2luKCcnKTtcbiAgfVxufVxuIl19
@@ -53,8 +53,7 @@ class SDK {
53
53
  : userAgentData;
54
54
  }
55
55
  removeCustomUserAgent(userAgentData) {
56
- var _a;
57
- this.config.customUserAgent = (_a = this.config.customUserAgent) === null || _a === void 0 ? void 0 : _a.replace(userAgentData, '');
56
+ this.config.customUserAgent = this.config.customUserAgent?.replace(userAgentData, '');
58
57
  }
59
58
  lambda() {
60
59
  return this.wrapServiceErrorHandling(new AWS.Lambda(this.config));
@@ -275,4 +274,4 @@ function allChainedExceptionMessages(e) {
275
274
  }
276
275
  return ret.join(': ');
277
276
  }
278
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2RrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUUvQixpQ0FBc0M7QUFDdEMsbURBQXdEO0FBQ3hELHFDQUFrQztBQUdsQyw0RkFBNEY7QUFDNUYsc0VBQXNFO0FBQ3RFLEVBQUU7QUFDRiwwRkFBMEY7QUFDMUYsc0JBQXNCO0FBRXRCLDBEQUEwRDtBQUMxRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUN4RCx5REFBeUQ7QUFFekQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRTtJQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLGtGQUFrRixDQUFDLENBQUM7Q0FDckc7QUE2REQ7O0dBRUc7QUFDSCxNQUFhLEdBQUc7SUFvQmQsWUFDbUIsWUFBNkIsRUFDOUMsTUFBYyxFQUNkLGNBQW9DLEVBQUUsRUFDckIsYUFBeUIsRUFBRTtRQUgzQixpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFHN0IsZUFBVSxHQUFWLFVBQVUsQ0FBaUI7UUFqQjlDOztXQUVHO1FBQ2MsaUJBQVksR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUVwRjs7Ozs7V0FLRztRQUNjLCtCQUEwQixHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFLLEVBQUUsRUFBRSxDQUFDO1FBUW5HLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixHQUFHLFdBQVc7WUFDZCxHQUFHLElBQUksQ0FBQyxZQUFZO1lBQ3BCLFdBQVcsRUFBRSxZQUFZO1lBQ3pCLE1BQU07WUFDTixNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENB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QUNOLGtFQUFrRTthQUNuRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNiO1FBRUQsc0ZBQXNGO1FBQ3RGLDRDQUE0QztRQUM1QyxDQUFDLENBQUMsT0FBTyxHQUFHLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQzs7QUEvUUgsa0JBZ1JDO0FBL1F5QixnQkFBWSxHQUFHLElBQUkscUNBQXFCLEVBQUUsQ0FBQztBQWlSckUsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUUxRCxTQUFTLFVBQVUsQ0FBQyxDQUFNO0lBQ3hCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLG1CQUFtQixDQUFDO0FBQzFELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsMkJBQTJCLENBQUMsQ0FBb0I7SUFDdkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztJQUNoQyxPQUFPLENBQUMsRUFBRTtRQUNSLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BCLENBQUMsR0FBSSxDQUFTLENBQUMsYUFBYSxDQUFDO0tBQzlCO0lBQ0QsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBBV1MgZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYXRpb25PcHRpb25zIH0gZnJvbSAnYXdzLXNkay9saWIvY29uZmlnLWJhc2UnO1xuaW1wb3J0IHsgZGVidWcsIHRyYWNlIH0gZnJvbSAnLi9fZW52JztcbmltcG9ydCB7IEFjY291bnRBY2Nlc3NLZXlDYWNoZSB9IGZyb20gJy4vYWNjb3VudC1jYWNoZSc7XG5pbXBvcnQgeyBjYWNoZWQgfSBmcm9tICcuL2NhY2hlZCc7XG5pbXBvcnQgeyBBY2NvdW50IH0gZnJvbSAnLi9zZGstcHJvdmlkZXInO1xuXG4vLyBXZSBuZWVkIHRvIG1hcCByZWdpb25zIHRvIGRvbWFpbiBzdWZmaXhlcywgYW5kIHRoZSBTREsgYWxyZWFkeSBoYXMgYSBmdW5jdGlvbiB0byBkbyB0aGlzLlxuLy8gSXQncyBub3QgcGFydCBvZiB0aGUgcHVibGljIEFQSSwgYnV0IGl0J3MgYWxzbyB1bmxpa2VseSB0byBnbyBhd2F5LlxuLy9cbi8vIFJldXNlIHRoYXQgZnVuY3Rpb24sIGFuZCBhZGQgYSBzYWZldHkgY2hlY2sgc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IGJyZWFrIGlmIHRoZXkgZXZlclxuLy8gcmVmYWN0b3IgdGhhdCBhd2F5LlxuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG5jb25zdCByZWdpb25VdGlsID0gcmVxdWlyZSgnYXdzLXNkay9saWIvcmVnaW9uX2NvbmZpZycpO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG5cbmlmICghcmVnaW9uVXRpbC5nZXRFbmRwb2ludFN1ZmZpeCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgdmVyc2lvbiBvZiBBV1MgU0RLIGZvciBKUyBkb2VzIG5vdCBoYXZlIHRoZSBcXCdnZXRFbmRwb2ludFN1ZmZpeFxcJyBmdW5jdGlvbiEnKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU0RLIHtcbiAgLyoqXG4gICAqIFRoZSByZWdpb24gdGhpcyBTREsgaGFzIGJlZW4gaW5zdGFudGlhdGVkIGZvclxuICAgKlxuICAgKiAoQXMgZGlzdGluY3QgZnJvbSB0aGUgYGRlZmF1bHRSZWdpb24oKWAgb24gU2RrUHJvdmlkZXIgd2hpY2hcbiAgICogcmVwcmVzZW50cyB0aGUgcmVnaW9uIGNvbmZpZ3VyZWQgaW4gdGhlIGRlZmF1bHQgY29uZmlnKS5cbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnRSZWdpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFjY291bnQgdGhpcyBTREsgaGFzIGJlZW4gaW5zdGFudGlhdGVkIGZvclxuICAgKlxuICAgKiAoQXMgZGlzdGluY3QgZnJvbSB0aGUgYGRlZmF1bHRBY2NvdW50KClgIG9uIFNka1Byb3ZpZGVyIHdoaWNoXG4gICAqIHJlcHJlc2VudHMgdGhlIGFjY291bnQgYXZhaWxhYmxlIGJ5IHVzaW5nIGRlZmF1bHQgY3JlZGVudGlhbHMpLlxuICAgKi9cbiAgY3VycmVudEFjY291bnQoKTogUHJvbWlzZTxBY2NvdW50PjtcblxuICBnZXRFbmRwb2ludFN1ZmZpeChyZWdpb246IHN0cmluZyk6IHN0cmluZztcblxuICAvKipcbiAgICogQXBwZW5kcyB0aGUgZ2l2ZW4gc3RyaW5nIGFzIHRoZSBleHRyYSBpbmZvcm1hdGlvbiB0byBwdXQgaW50byB0aGUgVXNlci1BZ2VudCBoZWFkZXIgZm9yIGFueSByZXF1ZXN0cyBpbnZva2VkIGJ5IHRoaXMgU0RLLlxuICAgKiBJZiB0aGUgc3RyaW5nIGlzICd1bmRlZmluZWQnLCB0aGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0LlxuICAgKi9cbiAgYXBwZW5kQ3VzdG9tVXNlckFnZW50KHVzZXJBZ2VudERhdGE/OiBzdHJpbmcpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBnaXZlbiBzdHJpbmcgZnJvbSB0aGUgZXh0cmEgVXNlci1BZ2VudCBoZWFkZXIgZGF0YSB1c2VkIGZvciByZXF1ZXN0cyBpbnZva2VkIGJ5IHRoaXMgU0RLLlxuICAgKi9cbiAgcmVtb3ZlQ3VzdG9tVXNlckFnZW50KHVzZXJBZ2VudERhdGE6IHN0cmluZyk6IHZvaWQ7XG5cbiAgbGFtYmRhKCk6IEFXUy5MYW1iZGE7XG4gIGNsb3VkRm9ybWF0aW9uKCk6IEFXUy5DbG91ZEZvcm1hdGlvbjtcbiAgZWMyKCk6IEFXUy5FQzI7XG4gIHNzbSgpOiBBV1MuU1NNO1xuICBzMygpOiBBV1MuUzM7XG4gIHJvdXRlNTMoKTogQVdTLlJvdXRlNTM7XG4gIGVjcigpOiBBV1MuRUNSO1xuICBlY3MoKTogQVdTLkVDUztcbiAgZWxidjIoKTogQVdTLkVMQnYyO1xuICBzZWNyZXRzTWFuYWdlcigpOiBBV1MuU2VjcmV0c01hbmFnZXI7XG4gIGttcygpOiBBV1MuS01TO1xuICBzdGVwRnVuY3Rpb25zKCk6IEFXUy5TdGVwRnVuY3Rpb25zO1xuICBjb2RlQnVpbGQoKTogQVdTLkNvZGVCdWlsZFxuICBjbG91ZFdhdGNoTG9ncygpOiBBV1MuQ2xvdWRXYXRjaExvZ3M7XG4gIGFwcHN5bmMoKTogQVdTLkFwcFN5bmM7XG59XG5cbi8qKlxuICogQWRkaXRpb25hbCBTREsgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2RrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGRlc2NyaXB0aXZlIHN0cmluZ3MgdGhhdCBpbmRpY2F0ZSB3aGVyZSB0aGUgXCJBc3N1bWVSb2xlXCIgY3JlZGVudGlhbHMgYXJlIGNvbWluZyBmcm9tXG4gICAqXG4gICAqIFdpbGwgYmUgcHJpbnRlZCBpbiBhbiBlcnJvciBtZXNzYWdlIHRvIGhlbHAgdXNlcnMgZGlhZ25vc2UgYXV0aCBwcm9ibGVtcy5cbiAgICovXG4gIHJlYWRvbmx5IGFzc3VtZVJvbGVDcmVkZW50aWFsc1NvdXJjZURlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJhc2UgZnVuY3Rpb25hbGl0eSBvZiBTREsgd2l0aG91dCBjcmVkZW50aWFsIGZldGNoaW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBTREsgaW1wbGVtZW50cyBJU0RLIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgYWNjb3VudENhY2hlID0gbmV3IEFjY291bnRBY2Nlc3NLZXlDYWNoZSgpO1xuXG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50UmVnaW9uOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IENvbmZpZ3VyYXRpb25PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHJldHJ5IG9wdGlvbnMgZm9yIFNESyBjbGllbnRzLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSByZXRyeU9wdGlvbnMgPSB7IG1heFJldHJpZXM6IDYsIHJldHJ5RGVsYXlPcHRpb25zOiB7IGJhc2U6IDMwMCB9IH07XG5cbiAgLyoqXG4gICAqIFRoZSBtb3JlIGdlbmVyb3VzIHJldHJ5IHBvbGljeSBmb3IgQ2xvdWRGb3JtYXRpb24sIHdoaWNoIGhhcyBhIDEgVFBNIGxpbWl0IG9uIGNlcnRhaW4gQVBJcyxcbiAgICogd2hpY2ggYXJlIGFidW5kYW50bHkgdXNlZCBmb3IgZGVwbG95bWVudCB0cmFja2luZywgLi4uXG4gICAqXG4gICAqIFNvIHdlJ3JlIGFsbG93aW5nIHdheSBtb3JlIHJldHJpZXMsIGJ1dCB3YWl0aW5nIGEgYml0IG1vcmUuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNsb3VkRm9ybWF0aW9uUmV0cnlPcHRpb25zID0geyBtYXhSZXRyaWVzOiAxMCwgcmV0cnlEZWxheU9wdGlvbnM6IHsgYmFzZTogMV8wMDAgfSB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NyZWRlbnRpYWxzOiBBV1MuQ3JlZGVudGlhbHMsXG4gICAgcmVnaW9uOiBzdHJpbmcsXG4gICAgaHR0cE9wdGlvbnM6IENvbmZpZ3VyYXRpb25PcHRpb25zID0ge30sXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZGtPcHRpb25zOiBTZGtPcHRpb25zID0ge30pIHtcblxuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgLi4uaHR0cE9wdGlvbnMsXG4gICAgICAuLi50aGlzLnJldHJ5T3B0aW9ucyxcbiAgICAgIGNyZWRlbnRpYWxzOiBfY3JlZGVudGlhbHMsXG4gICAgICByZWdpb24sXG4gICAgICBsb2dnZXI6IHsgbG9nOiAoLi4ubWVzc2FnZXMpID0+IG1lc3NhZ2VzLmZvckVhY2gobSA9PiB0cmFjZSgnJXMnLCBtKSkgfSxcbiAgICB9O1xuICAgIHRoaXMuY3VycmVudFJlZ2lvbiA9IHJlZ2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBhcHBlbmRDdXN0b21Vc2VyQWdlbnQodXNlckFnZW50RGF0YT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdXNlckFnZW50RGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRDdXN0b21Vc2VyQWdlbnQgPSB0aGlzLmNvbmZpZy5jdXN0b21Vc2VyQWdlbnQ7XG4gICAgdGhpcy5jb25maWcuY3VzdG9tVXNlckFnZW50ID0gY3VycmVudEN1c3RvbVVzZXJBZ2VudFxuICAgICAgPyBgJHtjdXJyZW50Q3VzdG9tVXNlckFnZW50fSAke3VzZXJBZ2VudERhdGF9YFxuICAgICAgOiB1c2VyQWdlbnREYXRhO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUN1c3RvbVVzZXJBZ2VudCh1c2VyQWdlbnREYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5jdXN0b21Vc2VyQWdlbnQgPSB0aGlzLmNvbmZpZy5jdXN0b21Vc2VyQWdlbnQ/LnJlcGxhY2UodXNlckFnZW50RGF0YSwgJycpO1xuICB9XG5cbiAgcHVibGljIGxhbWJkYSgpOiBBV1MuTGFtYmRhIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5MYW1iZGEodGhpcy5jb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG91ZEZvcm1hdGlvbigpOiBBV1MuQ2xvdWRGb3JtYXRpb24ge1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLkNsb3VkRm9ybWF0aW9uKHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgLi4udGhpcy5jbG91ZEZvcm1hdGlvblJldHJ5T3B0aW9ucyxcbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgZWMyKCk6IEFXUy5FQzIge1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLkVDMih0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIHNzbSgpOiBBV1MuU1NNIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5TU00odGhpcy5jb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyBzMygpOiBBV1MuUzMge1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLlMzKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICBwdWJsaWMgcm91dGU1MygpOiBBV1MuUm91dGU1MyB7XG4gICAgcmV0dXJuIHRoaXMud3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nKG5ldyBBV1MuUm91dGU1Myh0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIGVjcigpOiBBV1MuRUNSIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5FQ1IodGhpcy5jb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyBlY3MoKTogQVdTLkVDUyB7XG4gICAgcmV0dXJuIHRoaXMud3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nKG5ldyBBV1MuRUNTKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICBwdWJsaWMgZWxidjIoKTogQVdTLkVMQnYyIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5FTEJ2Mih0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIHNlY3JldHNNYW5hZ2VyKCk6IEFXUy5TZWNyZXRzTWFuYWdlciB7XG4gICAgcmV0dXJuIHRoaXMud3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nKG5ldyBBV1MuU2VjcmV0c01hbmFnZXIodGhpcy5jb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyBrbXMoKTogQVdTLktNUyB7XG4gICAgcmV0dXJuIHRoaXMud3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nKG5ldyBBV1MuS01TKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICBwdWJsaWMgc3RlcEZ1bmN0aW9ucygpOiBBV1MuU3RlcEZ1bmN0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMud3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nKG5ldyBBV1MuU3RlcEZ1bmN0aW9ucyh0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIGNvZGVCdWlsZCgpOiBBV1MuQ29kZUJ1aWxkIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5Db2RlQnVpbGQodGhpcy5jb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG91ZFdhdGNoTG9ncygpOiBBV1MuQ2xvdWRXYXRjaExvZ3Mge1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLkNsb3VkV2F0Y2hMb2dzKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICBwdWJsaWMgYXBwc3luYygpOiBBV1MuQXBwU3luYyB7XG4gICAgcmV0dXJuIHRoaXMud3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nKG5ldyBBV1MuQXBwU3luYyh0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGN1cnJlbnRBY2NvdW50KCk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIC8vIEdldC9yZWZyZXNoIGlmIG5lY2Vzc2FyeSBiZWZvcmUgd2UgY2FuIGFjY2VzcyBgYWNjZXNzS2V5SWRgXG4gICAgYXdhaXQgdGhpcy5mb3JjZUNyZWRlbnRpYWxSZXRyaWV2YWwoKTtcblxuICAgIHJldHVybiBjYWNoZWQodGhpcywgQ1VSUkVOVF9BQ0NPVU5UX0tFWSwgKCkgPT4gU0RLLmFjY291bnRDYWNoZS5mZXRjaCh0aGlzLl9jcmVkZW50aWFscy5hY2Nlc3NLZXlJZCwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBvbmUsIHJlc29sdmUgZnJvbSBTVFMgYW5kIHN0b3JlIGluIGNhY2hlLlxuICAgICAgZGVidWcoJ0xvb2tpbmcgdXAgZGVmYXVsdCBhY2NvdW50IElEIGZyb20gU1RTJyk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBuZXcgQVdTLlNUUyh0aGlzLmNvbmZpZykuZ2V0Q2FsbGVySWRlbnRpdHkoKS5wcm9taXNlKCk7XG4gICAgICBjb25zdCBhY2NvdW50SWQgPSByZXN1bHQuQWNjb3VudDtcbiAgICAgIGNvbnN0IHBhcnRpdGlvbiA9IHJlc3VsdC5Bcm4hLnNwbGl0KCc6JylbMV07XG4gICAgICBpZiAoIWFjY291bnRJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NUUyBkaWRuXFwndCByZXR1cm4gYW4gYWNjb3VudCBJRCcpO1xuICAgICAgfVxuICAgICAgZGVidWcoJ0RlZmF1bHQgYWNjb3VudCBJRDonLCBhY2NvdW50SWQpO1xuICAgICAgcmV0dXJuIHsgYWNjb3VudElkLCBwYXJ0aXRpb24gfTtcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50IGNyZWRlbnRpYWxzXG4gICAqXG4gICAqIERvbid0IHVzZSAtLSBvbmx5IHVzZWQgdG8gd3JpdGUgdGVzdHMgYXJvdW5kIGFzc3VtaW5nIHJvbGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGN1cnJlbnRDcmVkZW50aWFscygpOiBQcm9taXNlPEFXUy5DcmVkZW50aWFscz4ge1xuICAgIGF3YWl0IHRoaXMuZm9yY2VDcmVkZW50aWFsUmV0cmlldmFsKCk7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWRlbnRpYWxzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlIHJldHJpZXZhbCBvZiB0aGUgY3VycmVudCBjcmVkZW50aWFsc1xuICAgKlxuICAgKiBSZWxldmFudCBpZiB0aGUgY3VycmVudCBjcmVkZW50aWFscyBhcmUgQXNzdW1lUm9sZSBjcmVkZW50aWFscyAtLSBkbyB0aGUgYWN0dWFsXG4gICAqIGxvb2t1cCwgYW5kIHRyYW5zbGF0ZSBhbnkgZXJyb3IgaW50byBhIHVzZWZ1bCBlcnJvciBtZXNzYWdlICh0YWtpbmcgaW50b1xuICAgKiBhY2NvdW50IGNyZWRlbnRpYWwgcHJvdmVuYW5jZSkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZm9yY2VDcmVkZW50aWFsUmV0cmlldmFsKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9jcmVkZW50aWFscy5nZXRQcm9taXNlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZGVidWcoYEFzc3VtaW5nIHJvbGUgZmFpbGVkOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihbXG4gICAgICAgICdDb3VsZCBub3QgYXNzdW1lIHJvbGUgaW4gdGFyZ2V0IGFjY291bnQnLFxuICAgICAgICAuLi50aGlzLnNka09wdGlvbnMuYXNzdW1lUm9sZUNyZWRlbnRpYWxzU291cmNlRGVzY3JpcHRpb25cbiAgICAgICAgICA/IFtgdXNpbmcgJHt0aGlzLnNka09wdGlvbnMuYXNzdW1lUm9sZUNyZWRlbnRpYWxzU291cmNlRGVzY3JpcHRpb259YF1cbiAgICAgICAgICA6IFtdLFxuICAgICAgICBlLm1lc3NhZ2UsXG4gICAgICAgICcuIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGlzIHJvbGUgZXhpc3RzIGluIHRoZSBhY2NvdW50LiBJZiBpdCBkb2VzblxcJ3QgZXhpc3QsIChyZSktYm9vdHN0cmFwIHRoZSBlbnZpcm9ubWVudCAnICtcbiAgICAgICAgJ3dpdGggdGhlIHJpZ2h0IFxcJy0tdHJ1c3RcXCcsIHVzaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgQ0RLIENMSS4nLFxuICAgICAgXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRFbmRwb2ludFN1ZmZpeChyZWdpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlZ2lvblV0aWwuZ2V0RW5kcG9pbnRTdWZmaXgocmVnaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSB3cmFwcGluZyBvYmplY3QgZm9yIHRoZSB1bmRlcmx5aW5nIHNlcnZpY2Ugb2JqZWN0XG4gICAqXG4gICAqIFJlc3BvbmRzIHRvIGZhaWx1cmVzIGluIHRoZSB1bmRlcmx5aW5nIHNlcnZpY2UgY2FsbHMsIGluIHR3byBkaWZmZXJlbnRcbiAgICogd2F5czpcbiAgICpcbiAgICogLSBXaGVuIGVycm9ycyBhcmUgZW5jb3VudGVyZWQsIGxvZyB0aGUgZmFpbGluZyBjYWxsIGFuZCB0aGUgZXJyb3IgdGhhdFxuICAgKiAgIGl0IHRyaWdnZXJlZCAoYXQgZGVidWcgbGV2ZWwpLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBsYWNrIG9mXG4gICAqICAgc3RhY2sgdHJhY2VzIGluIE5vZGVKUyBvdGhlcndpc2UgbWFrZXMgaXQgdmVyeSBoYXJkIHRvIHN1c3Mgb3V0IHdoZXJlXG4gICAqICAgYSBjZXJ0YWluIEFXUyBlcnJvciBvY2N1cnJlZC5cbiAgICogLSBUaGUgSlMgU0RLIGhhcyBhIGZ1bm55IGJ1c2luZXNzIG9mIHdyYXBwaW5nIGFueSBjcmVkZW50aWFsLWJhc2VkIGVycm9yXG4gICAqICAgaW4gYSBzdXBlci1nZW5lcmljIChhbmQgaW4gb3VyIGNhc2Ugd3JvbmcpIGV4Y2VwdGlvbi4gSWYgd2UgdGhlbiB1c2UgYVxuICAgKiAgICdDaGFpbmFibGVUZW1wb3JhcnlDcmVkZW50aWFscycgYW5kIHRoZSB0YXJnZXQgcm9sZSBkb2Vzbid0IGV4aXN0LFxuICAgKiAgIHRoZSBlcnJvciBtZXNzYWdlIHRoYXQgc2hvd3MgdXAgYnkgZGVmYXVsdCBpcyBzdXBlciBtaXNsZWFkaW5nXG4gICAqICAgKGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1qcy9pc3N1ZXMvMzI3MikuIFdlIGNhbiBmaXggdGhpcyBiZWNhdXNlXG4gICAqICAgdGhlIGV4Y2VwdGlvbiBjb250YWlucyB0aGUgXCJpbm5lciBleGNlcHRpb25cIiwgc28gd2UgdW53cmFwIGFuZCB0aHJvd1xuICAgKiAgIHRoZSBjb3JyZWN0IGVycm9yIChcImNhbm5vdCBhc3N1bWUgcm9sZVwiKS5cbiAgICpcbiAgICogVGhlIHdyYXBwaW5nIGJ1c2luZXNzIGJlbG93IGlzIHNsaWdodGx5IG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB5b3UnZCB0aGlua1xuICAgKiBiZWNhdXNlIHdlIG11c3QgaG9vayBpbnRvIHRoZSBgcHJvbWlzZSgpYCBtZXRob2Qgb2YgdGhlIG9iamVjdCB0aGF0J3MgYmVpbmdcbiAgICogcmV0dXJuZWQgZnJvbSB0aGUgbWV0aG9kcyBvZiB0aGUgb2JqZWN0IHRoYXQgd2Ugd3JhcCwgc28gdGhlcmUncyB0d29cbiAgICogbGV2ZWxzIG9mIHdyYXBwaW5nIGdvaW5nIG9uLCBhbmQgYWxzbyBzb21lIGV4Y2VwdGlvbnMgdG8gdGhlIHdyYXBwaW5nIG1hZ2ljLlxuICAgKi9cbiAgcHJpdmF0ZSB3cmFwU2VydmljZUVycm9ySGFuZGxpbmc8QSBleHRlbmRzIG9iamVjdD4oc2VydmljZU9iamVjdDogQSk6IEEge1xuICAgIGNvbnN0IGNsYXNzT2JqZWN0ID0gc2VydmljZU9iamVjdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICByZXR1cm4gbmV3IFByb3h5KHNlcnZpY2VPYmplY3QsIHtcbiAgICAgIGdldChvYmo6IEEsIHByb3A6IHN0cmluZykge1xuICAgICAgICBjb25zdCByZWFsID0gKG9iaiBhcyBhbnkpW3Byb3BdO1xuICAgICAgICAvLyBUaGluZ3Mgd2UgZG9uJ3Qgd2FudCB0byBpbnRlcmNlcHQ6XG4gICAgICAgIC8vIC0gQW55dGhpbmcgdGhhdCdzIG5vdCBhIGZ1bmN0aW9uLlxuICAgICAgICAvLyAtICdjb25zdHJ1Y3RvcicsIHMzLnVwbG9hZCgpIHdpbGwgdXNlIHRoaXMgdG8gZG8gc29tZSBtYWdpYyBhbmQgd2UgbmVlZCB0aGUgdW5kZXJseWluZyBjb25zdHJ1Y3Rvci5cbiAgICAgICAgLy8gLSBBbnkgbWV0aG9kIHRoYXQncyBub3Qgb24gdGhlIHNlcnZpY2UgY2xhc3MgKGRvIG5vdCBpbnRlcmNlcHQgJ21ha2VSZXF1ZXN0JyBhbmQgb3RoZXIgaGVscGVycykuXG4gICAgICAgIGlmIChwcm9wID09PSAnY29uc3RydWN0b3InIHx8ICFjbGFzc09iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wKSB8fCAhaXNGdW5jdGlvbihyZWFsKSkgeyByZXR1cm4gcmVhbDsgfVxuXG4gICAgICAgIC8vIE5PVEU6IFRoaXMgbXVzdCBiZSBhIGZ1bmN0aW9uKCkgYW5kIG5vdCBhbiAoKSA9PiB7XG4gICAgICAgIC8vIGJlY2F1c2UgSSBuZWVkICd0aGlzJyB0byBiZSBkeW5hbWljYWxseSBib3VuZCBhbmQgbm90IHN0YXRpY2FsbHkgYm91bmQuXG4gICAgICAgIC8vIElmIHlvdXIgbGludGVyIGNvbXBsYWlucyBkb24ndCBsaXN0ZW4gdG8gaXQhXG4gICAgICAgIHJldHVybiBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgICAgICAvLyBDYWxsIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uLiBJZiBpdCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGEgcHJvbWlzZSgpXG4gICAgICAgICAgLy8gbWV0aG9kIG9uIGl0LCB3cmFwIHRoYXQgJ3Byb21pc2UnIG1ldGhvZC5cbiAgICAgICAgICBjb25zdCBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVhbC5hcHBseSh0aGlzLCBhcmdzKTtcblxuICAgICAgICAgIC8vIERvbid0IGludGVyY2VwdCB1bmxlc3MgdGhlIHJldHVybiB2YWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCBhICcucHJvbWlzZSgpJyBtZXRob2QuXG4gICAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZSAhPT0gJ29iamVjdCcgfHwgIXJlc3BvbnNlKSB7IHJldHVybiByZXNwb25zZTsgfVxuICAgICAgICAgIGlmICghKCdwcm9taXNlJyBpbiByZXNwb25zZSkpIHsgcmV0dXJuIHJlc3BvbnNlOyB9XG5cbiAgICAgICAgICAvLyBSZXR1cm4gYW4gb2JqZWN0IHdpdGggdGhlIHByb21pc2UgbWV0aG9kIHJlcGxhY2VkIHdpdGggYSB3cmFwcGVyIHdoaWNoIHdpbGxcbiAgICAgICAgICAvLyBkbyBhZGRpdGlvbmFsIHRoaW5ncyB0byBlcnJvcnMuXG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShyZXNwb25zZSksIHtcbiAgICAgICAgICAgIHByb21pc2UoKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5wcm9taXNlKCkuY2F0Y2goKGU6IEVycm9yICYgeyBjb2RlPzogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgICBlID0gc2VsZi5tYWtlRGV0YWlsZWRFeGNlcHRpb24oZSk7XG4gICAgICAgICAgICAgICAgZGVidWcoYENhbGwgZmFpbGVkOiAke3Byb3B9KCR7SlNPTi5zdHJpbmdpZnkoYXJnc1swXSl9KSA9PiAke2UubWVzc2FnZX0gKGNvZGU9JHtlLmNvZGV9KWApO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTsgLy8gUmUtJ3Rocm93JyB0aGUgbmV3IGVycm9yXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBhIG1vcmUgZGV0YWlsZWQgZXJyb3Igb3V0IG9mIGEgZ2VuZXJpYyBlcnJvciBpZiB3ZSBjYW5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBhbiBlcnJvciBhYm91dCBBc3N1bWluZyBSb2xlcywgYWRkIGluIHRoZSBjb250ZXh0IHNob3dpbmcgdGhlXG4gICAqIGNoYWluIG9mIGNyZWRlbnRpYWxzIHdlIHVzZWQgdG8gdHJ5IHRvIGFzc3VtZSB0aGUgcm9sZS5cbiAgICovXG4gIHByaXZhdGUgbWFrZURldGFpbGVkRXhjZXB0aW9uKGU6IEVycm9yKTogRXJyb3Ige1xuICAgIC8vIFRoaXMgaXMgdGhlIHN1cGVyLWdlbmVyaWMgXCJzb21ldGhpbmcncyB3cm9uZ1wiIGVycm9yIHRoYXQgdGhlIEpTIFNESyB3cmFwcyBvdGhlciBlcnJvcnMgaW4uXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3Mtc2RrLWpzL2Jsb2IvZjBhYzJlNTM0NTdjNzUxMjg4M2QwNjc3MDEzZWFjYWFkNmNkOGExOS9saWIvZXZlbnRfbGlzdGVuZXJzLmpzI0w4NFxuICAgIGlmICh0eXBlb2YgZS5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiBlLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnTWlzc2luZyBjcmVkZW50aWFscyBpbiBjb25maWcnKSkge1xuICAgICAgY29uc3Qgb3JpZ2luYWwgPSAoZSBhcyBhbnkpLm9yaWdpbmFsRXJyb3I7XG4gICAgICBpZiAob3JpZ2luYWwpIHtcbiAgICAgICAgLy8gV2hlbiB0aGUgU0RLIGRvZXMgYSAndXRpbC5jb3B5JywgdGhleSBsb3NlIHRoZSBFcnJvci1uZXNzIG9mIHRoZSBpbm5lciBlcnJvclxuICAgICAgICAvLyAodGhleSBjb3B5IHRoZSBFcnJvcidzIHByb3BlcnRpZXMgaW50byBhIHBsYWluIG9iamVjdCkgc28gbWFrZSBpdCBhbiBFcnJvciBvYmplY3QgYWdhaW4uXG4gICAgICAgIGUgPSBPYmplY3QuYXNzaWduKG5ldyBFcnJvcigpLCBvcmlnaW5hbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIGVycm9yIG1pZ2h0IHN0aWxsIGJlIGEgZ2VuZXJpYyBcIkNoYWluYWJsZVRlbXBvcmFyeUNyZWRlbnRpYWxzIGZhaWxlZFwiXG4gICAgLy8gZXJyb3Igd2hpY2ggd3JhcHMgdGhlIFJFQUwgZXJyb3IgKEFzc3VtZVJvbGUgZmFpbGVkKS4gV2UncmUgZ29pbmcgdG8gcmVwbGFjZSB0aGUgZXJyb3JcbiAgICAvLyBtZXNzYWdlIHdpdGggb25lIHRoYXQncyBtb3JlIGxpa2VseSB0byBoZWxwIHVzZXJzLCBhbmQgdGVsbCB0aGVtIHRoZSBtb3N0IHByb2JhYmxlXG4gICAgLy8gZml4IChib290c3RyYXBwaW5nKS4gVGhlIHVuZGVybHlpbmcgc2VydmljZSBjYWxsIGZhaWx1cmUgd2lsbCBiZSBhcHBlbmRlZCBiZWxvdy5cbiAgICBpZiAoZS5tZXNzYWdlID09PSAnQ291bGQgbm90IGxvYWQgY3JlZGVudGlhbHMgZnJvbSBDaGFpbmFibGVUZW1wb3JhcnlDcmVkZW50aWFscycpIHtcbiAgICAgIGUubWVzc2FnZSA9IFtcbiAgICAgICAgJ0NvdWxkIG5vdCBhc3N1bWUgcm9sZSBpbiB0YXJnZXQgYWNjb3VudCcsXG4gICAgICAgIC4uLnRoaXMuc2RrT3B0aW9ucy5hc3N1bWVSb2xlQ3JlZGVudGlhbHNTb3VyY2VEZXNjcmlwdGlvblxuICAgICAgICAgID8gW2B1c2luZyAke3RoaXMuc2RrT3B0aW9ucy5hc3N1bWVSb2xlQ3JlZGVudGlhbHNTb3VyY2VEZXNjcmlwdGlvbn1gXVxuICAgICAgICAgIDogW10sXG4gICAgICAgICcoZGlkIHlvdSBib290c3RyYXAgdGhlIGVudmlyb25tZW50IHdpdGggdGhlIHJpZ2h0IFxcJy0tdHJ1c3RcXCdzPyknLFxuICAgICAgXS5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgLy8gUmVwbGFjZSB0aGUgbWVzc2FnZSBvbiB0aGlzIGVycm9yIHdpdGggYSBjb25jYXRlbmF0aW9uIG9mIGFsbCBpbm5lciBlcnJvciBtZXNzYWdlcy5cbiAgICAvLyBNdXN0IG1vcmUgY2xlYXIgd2hhdCdzIGdvaW5nIG9uIHRoYXQgd2F5LlxuICAgIGUubWVzc2FnZSA9IGFsbENoYWluZWRFeGNlcHRpb25NZXNzYWdlcyhlKTtcbiAgICByZXR1cm4gZTtcbiAgfVxufVxuXG5jb25zdCBDVVJSRU5UX0FDQ09VTlRfS0VZID0gU3ltYm9sKCdjdXJyZW50X2FjY291bnRfa2V5Jyk7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oeDogYW55KTogeCBpcyAoLi4uYXJnczogYW55W10pID0+IGFueSB7XG4gIHJldHVybiB4ICYmIHt9LnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBjb25jYXRlbmF0ZWQgbWVzc2FnZSBvZiBhbGwgZXhjZXB0aW9ucyBpbiB0aGUgQVdTIGV4Y2VwdGlvbiBjaGFpblxuICovXG5mdW5jdGlvbiBhbGxDaGFpbmVkRXhjZXB0aW9uTWVzc2FnZXMoZTogRXJyb3IgfCB1bmRlZmluZWQpIHtcbiAgY29uc3QgcmV0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgd2hpbGUgKGUpIHtcbiAgICByZXQucHVzaChlLm1lc3NhZ2UpO1xuICAgIGUgPSAoZSBhcyBhbnkpLm9yaWdpbmFsRXJyb3I7XG4gIH1cbiAgcmV0dXJuIHJldC5qb2luKCc6ICcpO1xufVxuIl19
277
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2RrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUUvQixpQ0FBc0M7QUFDdEMsbURBQXdEO0FBQ3hELHFDQUFrQztBQUdsQyw0RkFBNEY7QUFDNUYsc0VBQXNFO0FBQ3RFLEVBQUU7QUFDRiwwRkFBMEY7QUFDMUYsc0JBQXNCO0FBRXRCLDBEQUEwRDtBQUMxRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUN4RCx5REFBeUQ7QUFFekQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRTtJQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLGtGQUFrRixDQUFDLENBQUM7Q0FDckc7QUE2REQ7O0dBRUc7QUFDSCxNQUFhLEdBQUc7SUFvQmQsWUFDbUIsWUFBNkIsRUFDOUMsTUFBYyxFQUNkLGNBQW9DLEVBQUUsRUFDckIsYUFBeUIsRUFBRTtRQUgzQixpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFHN0IsZUFBVSxHQUFWLFVBQVUsQ0FBaUI7UUFqQjlDOztXQUVHO1FBQ2MsaUJBQVksR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUVwRjs7Ozs7V0FLRztRQUNjLCtCQUEwQixHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFLLEVBQUUsRUFBRSxDQUFDO1FBUW5HLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixHQUFHLFdBQVc7WUFDZCxHQUFHLElBQUksQ0FBQyxZQUFZO1lBQ3BCLFdBQVcsRUFBRSxZQUFZO1lBQ3pCLE1BQU07WUFDTixNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENB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TixrRUFBa0U7YUFDbkUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDYjtRQUVELHNGQUFzRjtRQUN0Riw0Q0FBNEM7UUFDNUMsQ0FBQyxDQUFDLE9BQU8sR0FBRywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7O0FBL1FILGtCQWdSQztBQS9ReUIsZ0JBQVksR0FBRyxJQUFJLHFDQUFxQixFQUFFLENBQUM7QUFpUnJFLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFMUQsU0FBUyxVQUFVLENBQUMsQ0FBTTtJQUN4QixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxtQkFBbUIsQ0FBQztBQUMxRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLDJCQUEyQixDQUFDLENBQW9CO0lBQ3ZELE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFDaEMsT0FBTyxDQUFDLEVBQUU7UUFDUixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQixDQUFDLEdBQUksQ0FBUyxDQUFDLGFBQWEsQ0FBQztLQUM5QjtJQUNELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmF0aW9uT3B0aW9ucyB9IGZyb20gJ2F3cy1zZGsvbGliL2NvbmZpZy1iYXNlJztcbmltcG9ydCB7IGRlYnVnLCB0cmFjZSB9IGZyb20gJy4vX2Vudic7XG5pbXBvcnQgeyBBY2NvdW50QWNjZXNzS2V5Q2FjaGUgfSBmcm9tICcuL2FjY291bnQtY2FjaGUnO1xuaW1wb3J0IHsgY2FjaGVkIH0gZnJvbSAnLi9jYWNoZWQnO1xuaW1wb3J0IHsgQWNjb3VudCB9IGZyb20gJy4vc2RrLXByb3ZpZGVyJztcblxuLy8gV2UgbmVlZCB0byBtYXAgcmVnaW9ucyB0byBkb21haW4gc3VmZml4ZXMsIGFuZCB0aGUgU0RLIGFscmVhZHkgaGFzIGEgZnVuY3Rpb24gdG8gZG8gdGhpcy5cbi8vIEl0J3Mgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEksIGJ1dCBpdCdzIGFsc28gdW5saWtlbHkgdG8gZ28gYXdheS5cbi8vXG4vLyBSZXVzZSB0aGF0IGZ1bmN0aW9uLCBhbmQgYWRkIGEgc2FmZXR5IGNoZWNrIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBicmVhayBpZiB0aGV5IGV2ZXJcbi8vIHJlZmFjdG9yIHRoYXQgYXdheS5cblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuY29uc3QgcmVnaW9uVXRpbCA9IHJlcXVpcmUoJ2F3cy1zZGsvbGliL3JlZ2lvbl9jb25maWcnKTtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuXG5pZiAoIXJlZ2lvblV0aWwuZ2V0RW5kcG9pbnRTdWZmaXgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIHZlcnNpb24gb2YgQVdTIFNESyBmb3IgSlMgZG9lcyBub3QgaGF2ZSB0aGUgXFwnZ2V0RW5kcG9pbnRTdWZmaXhcXCcgZnVuY3Rpb24hJyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNESyB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIHRoaXMgU0RLIGhhcyBiZWVuIGluc3RhbnRpYXRlZCBmb3JcbiAgICpcbiAgICogKEFzIGRpc3RpbmN0IGZyb20gdGhlIGBkZWZhdWx0UmVnaW9uKClgIG9uIFNka1Byb3ZpZGVyIHdoaWNoXG4gICAqIHJlcHJlc2VudHMgdGhlIHJlZ2lvbiBjb25maWd1cmVkIGluIHRoZSBkZWZhdWx0IGNvbmZpZykuXG4gICAqL1xuICByZWFkb25seSBjdXJyZW50UmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBY2NvdW50IHRoaXMgU0RLIGhhcyBiZWVuIGluc3RhbnRpYXRlZCBmb3JcbiAgICpcbiAgICogKEFzIGRpc3RpbmN0IGZyb20gdGhlIGBkZWZhdWx0QWNjb3VudCgpYCBvbiBTZGtQcm92aWRlciB3aGljaFxuICAgKiByZXByZXNlbnRzIHRoZSBhY2NvdW50IGF2YWlsYWJsZSBieSB1c2luZyBkZWZhdWx0IGNyZWRlbnRpYWxzKS5cbiAgICovXG4gIGN1cnJlbnRBY2NvdW50KCk6IFByb21pc2U8QWNjb3VudD47XG5cbiAgZ2V0RW5kcG9pbnRTdWZmaXgocmVnaW9uOiBzdHJpbmcpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgdGhlIGdpdmVuIHN0cmluZyBhcyB0aGUgZXh0cmEgaW5mb3JtYXRpb24gdG8gcHV0IGludG8gdGhlIFVzZXItQWdlbnQgaGVhZGVyIGZvciBhbnkgcmVxdWVzdHMgaW52b2tlZCBieSB0aGlzIFNESy5cbiAgICogSWYgdGhlIHN0cmluZyBpcyAndW5kZWZpbmVkJywgdGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdC5cbiAgICovXG4gIGFwcGVuZEN1c3RvbVVzZXJBZ2VudCh1c2VyQWdlbnREYXRhPzogc3RyaW5nKTogdm9pZDtcblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gc3RyaW5nIGZyb20gdGhlIGV4dHJhIFVzZXItQWdlbnQgaGVhZGVyIGRhdGEgdXNlZCBmb3IgcmVxdWVzdHMgaW52b2tlZCBieSB0aGlzIFNESy5cbiAgICovXG4gIHJlbW92ZUN1c3RvbVVzZXJBZ2VudCh1c2VyQWdlbnREYXRhOiBzdHJpbmcpOiB2b2lkO1xuXG4gIGxhbWJkYSgpOiBBV1MuTGFtYmRhO1xuICBjbG91ZEZvcm1hdGlvbigpOiBBV1MuQ2xvdWRGb3JtYXRpb247XG4gIGVjMigpOiBBV1MuRUMyO1xuICBzc20oKTogQVdTLlNTTTtcbiAgczMoKTogQVdTLlMzO1xuICByb3V0ZTUzKCk6IEFXUy5Sb3V0ZTUzO1xuICBlY3IoKTogQVdTLkVDUjtcbiAgZWNzKCk6IEFXUy5FQ1M7XG4gIGVsYnYyKCk6IEFXUy5FTEJ2MjtcbiAgc2VjcmV0c01hbmFnZXIoKTogQVdTLlNlY3JldHNNYW5hZ2VyO1xuICBrbXMoKTogQVdTLktNUztcbiAgc3RlcEZ1bmN0aW9ucygpOiBBV1MuU3RlcEZ1bmN0aW9ucztcbiAgY29kZUJ1aWxkKCk6IEFXUy5Db2RlQnVpbGRcbiAgY2xvdWRXYXRjaExvZ3MoKTogQVdTLkNsb3VkV2F0Y2hMb2dzO1xuICBhcHBzeW5jKCk6IEFXUy5BcHBTeW5jO1xufVxuXG4vKipcbiAqIEFkZGl0aW9uYWwgU0RLIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNka09wdGlvbnMge1xuICAvKipcbiAgICogQWRkaXRpb25hbCBkZXNjcmlwdGl2ZSBzdHJpbmdzIHRoYXQgaW5kaWNhdGUgd2hlcmUgdGhlIFwiQXNzdW1lUm9sZVwiIGNyZWRlbnRpYWxzIGFyZSBjb21pbmcgZnJvbVxuICAgKlxuICAgKiBXaWxsIGJlIHByaW50ZWQgaW4gYW4gZXJyb3IgbWVzc2FnZSB0byBoZWxwIHVzZXJzIGRpYWdub3NlIGF1dGggcHJvYmxlbXMuXG4gICAqL1xuICByZWFkb25seSBhc3N1bWVSb2xlQ3JlZGVudGlhbHNTb3VyY2VEZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBCYXNlIGZ1bmN0aW9uYWxpdHkgb2YgU0RLIHdpdGhvdXQgY3JlZGVudGlhbCBmZXRjaGluZ1xuICovXG5leHBvcnQgY2xhc3MgU0RLIGltcGxlbWVudHMgSVNESyB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGFjY291bnRDYWNoZSA9IG5ldyBBY2NvdW50QWNjZXNzS2V5Q2FjaGUoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgY3VycmVudFJlZ2lvbjogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBDb25maWd1cmF0aW9uT3B0aW9ucztcblxuICAvKipcbiAgICogRGVmYXVsdCByZXRyeSBvcHRpb25zIGZvciBTREsgY2xpZW50cy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcmV0cnlPcHRpb25zID0geyBtYXhSZXRyaWVzOiA2LCByZXRyeURlbGF5T3B0aW9uczogeyBiYXNlOiAzMDAgfSB9O1xuXG4gIC8qKlxuICAgKiBUaGUgbW9yZSBnZW5lcm91cyByZXRyeSBwb2xpY3kgZm9yIENsb3VkRm9ybWF0aW9uLCB3aGljaCBoYXMgYSAxIFRQTSBsaW1pdCBvbiBjZXJ0YWluIEFQSXMsXG4gICAqIHdoaWNoIGFyZSBhYnVuZGFudGx5IHVzZWQgZm9yIGRlcGxveW1lbnQgdHJhY2tpbmcsIC4uLlxuICAgKlxuICAgKiBTbyB3ZSdyZSBhbGxvd2luZyB3YXkgbW9yZSByZXRyaWVzLCBidXQgd2FpdGluZyBhIGJpdCBtb3JlLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjbG91ZEZvcm1hdGlvblJldHJ5T3B0aW9ucyA9IHsgbWF4UmV0cmllczogMTAsIHJldHJ5RGVsYXlPcHRpb25zOiB7IGJhc2U6IDFfMDAwIH0gfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jcmVkZW50aWFsczogQVdTLkNyZWRlbnRpYWxzLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICAgIGh0dHBPcHRpb25zOiBDb25maWd1cmF0aW9uT3B0aW9ucyA9IHt9LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2RrT3B0aW9uczogU2RrT3B0aW9ucyA9IHt9KSB7XG5cbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIC4uLmh0dHBPcHRpb25zLFxuICAgICAgLi4udGhpcy5yZXRyeU9wdGlvbnMsXG4gICAgICBjcmVkZW50aWFsczogX2NyZWRlbnRpYWxzLFxuICAgICAgcmVnaW9uLFxuICAgICAgbG9nZ2VyOiB7IGxvZzogKC4uLm1lc3NhZ2VzKSA9PiBtZXNzYWdlcy5mb3JFYWNoKG0gPT4gdHJhY2UoJyVzJywgbSkpIH0sXG4gICAgfTtcbiAgICB0aGlzLmN1cnJlbnRSZWdpb24gPSByZWdpb247XG4gIH1cblxuICBwdWJsaWMgYXBwZW5kQ3VzdG9tVXNlckFnZW50KHVzZXJBZ2VudERhdGE/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXVzZXJBZ2VudERhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50Q3VzdG9tVXNlckFnZW50ID0gdGhpcy5jb25maWcuY3VzdG9tVXNlckFnZW50O1xuICAgIHRoaXMuY29uZmlnLmN1c3RvbVVzZXJBZ2VudCA9IGN1cnJlbnRDdXN0b21Vc2VyQWdlbnRcbiAgICAgID8gYCR7Y3VycmVudEN1c3RvbVVzZXJBZ2VudH0gJHt1c2VyQWdlbnREYXRhfWBcbiAgICAgIDogdXNlckFnZW50RGF0YTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVDdXN0b21Vc2VyQWdlbnQodXNlckFnZW50RGF0YTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuY3VzdG9tVXNlckFnZW50ID0gdGhpcy5jb25maWcuY3VzdG9tVXNlckFnZW50Py5yZXBsYWNlKHVzZXJBZ2VudERhdGEsICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBsYW1iZGEoKTogQVdTLkxhbWJkYSB7XG4gICAgcmV0dXJuIHRoaXMud3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nKG5ldyBBV1MuTGFtYmRhKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICBwdWJsaWMgY2xvdWRGb3JtYXRpb24oKTogQVdTLkNsb3VkRm9ybWF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5DbG91ZEZvcm1hdGlvbih7XG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgIC4uLnRoaXMuY2xvdWRGb3JtYXRpb25SZXRyeU9wdGlvbnMsXG4gICAgfSkpO1xuICB9XG5cbiAgcHVibGljIGVjMigpOiBBV1MuRUMyIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5FQzIodGhpcy5jb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyBzc20oKTogQVdTLlNTTSB7XG4gICAgcmV0dXJuIHRoaXMud3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nKG5ldyBBV1MuU1NNKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICBwdWJsaWMgczMoKTogQVdTLlMzIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5TMyh0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIHJvdXRlNTMoKTogQVdTLlJvdXRlNTMge1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLlJvdXRlNTModGhpcy5jb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyBlY3IoKTogQVdTLkVDUiB7XG4gICAgcmV0dXJuIHRoaXMud3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nKG5ldyBBV1MuRUNSKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICBwdWJsaWMgZWNzKCk6IEFXUy5FQ1Mge1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLkVDUyh0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIGVsYnYyKCk6IEFXUy5FTEJ2MiB7XG4gICAgcmV0dXJuIHRoaXMud3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nKG5ldyBBV1MuRUxCdjIodGhpcy5jb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWNyZXRzTWFuYWdlcigpOiBBV1MuU2VjcmV0c01hbmFnZXIge1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLlNlY3JldHNNYW5hZ2VyKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICBwdWJsaWMga21zKCk6IEFXUy5LTVMge1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLktNUyh0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIHN0ZXBGdW5jdGlvbnMoKTogQVdTLlN0ZXBGdW5jdGlvbnMge1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLlN0ZXBGdW5jdGlvbnModGhpcy5jb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyBjb2RlQnVpbGQoKTogQVdTLkNvZGVCdWlsZCB7XG4gICAgcmV0dXJuIHRoaXMud3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nKG5ldyBBV1MuQ29kZUJ1aWxkKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICBwdWJsaWMgY2xvdWRXYXRjaExvZ3MoKTogQVdTLkNsb3VkV2F0Y2hMb2dzIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5DbG91ZFdhdGNoTG9ncyh0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIGFwcHN5bmMoKTogQVdTLkFwcFN5bmMge1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLkFwcFN5bmModGhpcy5jb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjdXJyZW50QWNjb3VudCgpOiBQcm9taXNlPEFjY291bnQ+IHtcbiAgICAvLyBHZXQvcmVmcmVzaCBpZiBuZWNlc3NhcnkgYmVmb3JlIHdlIGNhbiBhY2Nlc3MgYGFjY2Vzc0tleUlkYFxuICAgIGF3YWl0IHRoaXMuZm9yY2VDcmVkZW50aWFsUmV0cmlldmFsKCk7XG5cbiAgICByZXR1cm4gY2FjaGVkKHRoaXMsIENVUlJFTlRfQUNDT1VOVF9LRVksICgpID0+IFNESy5hY2NvdW50Q2FjaGUuZmV0Y2godGhpcy5fY3JlZGVudGlhbHMuYWNjZXNzS2V5SWQsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIGlmIHdlIGRvbid0IGhhdmUgb25lLCByZXNvbHZlIGZyb20gU1RTIGFuZCBzdG9yZSBpbiBjYWNoZS5cbiAgICAgIGRlYnVnKCdMb29raW5nIHVwIGRlZmF1bHQgYWNjb3VudCBJRCBmcm9tIFNUUycpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbmV3IEFXUy5TVFModGhpcy5jb25maWcpLmdldENhbGxlcklkZW50aXR5KCkucHJvbWlzZSgpO1xuICAgICAgY29uc3QgYWNjb3VudElkID0gcmVzdWx0LkFjY291bnQ7XG4gICAgICBjb25zdCBwYXJ0aXRpb24gPSByZXN1bHQuQXJuIS5zcGxpdCgnOicpWzFdO1xuICAgICAgaWYgKCFhY2NvdW50SWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTVFMgZGlkblxcJ3QgcmV0dXJuIGFuIGFjY291bnQgSUQnKTtcbiAgICAgIH1cbiAgICAgIGRlYnVnKCdEZWZhdWx0IGFjY291bnQgSUQ6JywgYWNjb3VudElkKTtcbiAgICAgIHJldHVybiB7IGFjY291bnRJZCwgcGFydGl0aW9uIH07XG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgY3VycmVudCBjcmVkZW50aWFsc1xuICAgKlxuICAgKiBEb24ndCB1c2UgLS0gb25seSB1c2VkIHRvIHdyaXRlIHRlc3RzIGFyb3VuZCBhc3N1bWluZyByb2xlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjdXJyZW50Q3JlZGVudGlhbHMoKTogUHJvbWlzZTxBV1MuQ3JlZGVudGlhbHM+IHtcbiAgICBhd2FpdCB0aGlzLmZvcmNlQ3JlZGVudGlhbFJldHJpZXZhbCgpO1xuICAgIHJldHVybiB0aGlzLl9jcmVkZW50aWFscztcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZSByZXRyaWV2YWwgb2YgdGhlIGN1cnJlbnQgY3JlZGVudGlhbHNcbiAgICpcbiAgICogUmVsZXZhbnQgaWYgdGhlIGN1cnJlbnQgY3JlZGVudGlhbHMgYXJlIEFzc3VtZVJvbGUgY3JlZGVudGlhbHMgLS0gZG8gdGhlIGFjdHVhbFxuICAgKiBsb29rdXAsIGFuZCB0cmFuc2xhdGUgYW55IGVycm9yIGludG8gYSB1c2VmdWwgZXJyb3IgbWVzc2FnZSAodGFraW5nIGludG9cbiAgICogYWNjb3VudCBjcmVkZW50aWFsIHByb3ZlbmFuY2UpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZvcmNlQ3JlZGVudGlhbFJldHJpZXZhbCgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fY3JlZGVudGlhbHMuZ2V0UHJvbWlzZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGRlYnVnKGBBc3N1bWluZyByb2xlIGZhaWxlZDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoW1xuICAgICAgICAnQ291bGQgbm90IGFzc3VtZSByb2xlIGluIHRhcmdldCBhY2NvdW50JyxcbiAgICAgICAgLi4udGhpcy5zZGtPcHRpb25zLmFzc3VtZVJvbGVDcmVkZW50aWFsc1NvdXJjZURlc2NyaXB0aW9uXG4gICAgICAgICAgPyBbYHVzaW5nICR7dGhpcy5zZGtPcHRpb25zLmFzc3VtZVJvbGVDcmVkZW50aWFsc1NvdXJjZURlc2NyaXB0aW9ufWBdXG4gICAgICAgICAgOiBbXSxcbiAgICAgICAgZS5tZXNzYWdlLFxuICAgICAgICAnLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgdGhpcyByb2xlIGV4aXN0cyBpbiB0aGUgYWNjb3VudC4gSWYgaXQgZG9lc25cXCd0IGV4aXN0LCAocmUpLWJvb3RzdHJhcCB0aGUgZW52aXJvbm1lbnQgJyArXG4gICAgICAgICd3aXRoIHRoZSByaWdodCBcXCctLXRydXN0XFwnLCB1c2luZyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIENESyBDTEkuJyxcbiAgICAgIF0uam9pbignICcpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0RW5kcG9pbnRTdWZmaXgocmVnaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiByZWdpb25VdGlsLmdldEVuZHBvaW50U3VmZml4KHJlZ2lvbik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgd3JhcHBpbmcgb2JqZWN0IGZvciB0aGUgdW5kZXJseWluZyBzZXJ2aWNlIG9iamVjdFxuICAgKlxuICAgKiBSZXNwb25kcyB0byBmYWlsdXJlcyBpbiB0aGUgdW5kZXJseWluZyBzZXJ2aWNlIGNhbGxzLCBpbiB0d28gZGlmZmVyZW50XG4gICAqIHdheXM6XG4gICAqXG4gICAqIC0gV2hlbiBlcnJvcnMgYXJlIGVuY291bnRlcmVkLCBsb2cgdGhlIGZhaWxpbmcgY2FsbCBhbmQgdGhlIGVycm9yIHRoYXRcbiAgICogICBpdCB0cmlnZ2VyZWQgKGF0IGRlYnVnIGxldmVsKS4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgbGFjayBvZlxuICAgKiAgIHN0YWNrIHRyYWNlcyBpbiBOb2RlSlMgb3RoZXJ3aXNlIG1ha2VzIGl0IHZlcnkgaGFyZCB0byBzdXNzIG91dCB3aGVyZVxuICAgKiAgIGEgY2VydGFpbiBBV1MgZXJyb3Igb2NjdXJyZWQuXG4gICAqIC0gVGhlIEpTIFNESyBoYXMgYSBmdW5ueSBidXNpbmVzcyBvZiB3cmFwcGluZyBhbnkgY3JlZGVudGlhbC1iYXNlZCBlcnJvclxuICAgKiAgIGluIGEgc3VwZXItZ2VuZXJpYyAoYW5kIGluIG91ciBjYXNlIHdyb25nKSBleGNlcHRpb24uIElmIHdlIHRoZW4gdXNlIGFcbiAgICogICAnQ2hhaW5hYmxlVGVtcG9yYXJ5Q3JlZGVudGlhbHMnIGFuZCB0aGUgdGFyZ2V0IHJvbGUgZG9lc24ndCBleGlzdCxcbiAgICogICB0aGUgZXJyb3IgbWVzc2FnZSB0aGF0IHNob3dzIHVwIGJ5IGRlZmF1bHQgaXMgc3VwZXIgbWlzbGVhZGluZ1xuICAgKiAgIChodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMvaXNzdWVzLzMyNzIpLiBXZSBjYW4gZml4IHRoaXMgYmVjYXVzZVxuICAgKiAgIHRoZSBleGNlcHRpb24gY29udGFpbnMgdGhlIFwiaW5uZXIgZXhjZXB0aW9uXCIsIHNvIHdlIHVud3JhcCBhbmQgdGhyb3dcbiAgICogICB0aGUgY29ycmVjdCBlcnJvciAoXCJjYW5ub3QgYXNzdW1lIHJvbGVcIikuXG4gICAqXG4gICAqIFRoZSB3cmFwcGluZyBidXNpbmVzcyBiZWxvdyBpcyBzbGlnaHRseSBtb3JlIGNvbXBsaWNhdGVkIHRoYW4geW91J2QgdGhpbmtcbiAgICogYmVjYXVzZSB3ZSBtdXN0IGhvb2sgaW50byB0aGUgYHByb21pc2UoKWAgbWV0aG9kIG9mIHRoZSBvYmplY3QgdGhhdCdzIGJlaW5nXG4gICAqIHJldHVybmVkIGZyb20gdGhlIG1ldGhvZHMgb2YgdGhlIG9iamVjdCB0aGF0IHdlIHdyYXAsIHNvIHRoZXJlJ3MgdHdvXG4gICAqIGxldmVscyBvZiB3cmFwcGluZyBnb2luZyBvbiwgYW5kIGFsc28gc29tZSBleGNlcHRpb25zIHRvIHRoZSB3cmFwcGluZyBtYWdpYy5cbiAgICovXG4gIHByaXZhdGUgd3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nPEEgZXh0ZW5kcyBvYmplY3Q+KHNlcnZpY2VPYmplY3Q6IEEpOiBBIHtcbiAgICBjb25zdCBjbGFzc09iamVjdCA9IHNlcnZpY2VPYmplY3QuY29uc3RydWN0b3IucHJvdG90eXBlO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5ldyBQcm94eShzZXJ2aWNlT2JqZWN0LCB7XG4gICAgICBnZXQob2JqOiBBLCBwcm9wOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcmVhbCA9IChvYmogYXMgYW55KVtwcm9wXTtcbiAgICAgICAgLy8gVGhpbmdzIHdlIGRvbid0IHdhbnQgdG8gaW50ZXJjZXB0OlxuICAgICAgICAvLyAtIEFueXRoaW5nIHRoYXQncyBub3QgYSBmdW5jdGlvbi5cbiAgICAgICAgLy8gLSAnY29uc3RydWN0b3InLCBzMy51cGxvYWQoKSB3aWxsIHVzZSB0aGlzIHRvIGRvIHNvbWUgbWFnaWMgYW5kIHdlIG5lZWQgdGhlIHVuZGVybHlpbmcgY29uc3RydWN0b3IuXG4gICAgICAgIC8vIC0gQW55IG1ldGhvZCB0aGF0J3Mgbm90IG9uIHRoZSBzZXJ2aWNlIGNsYXNzIChkbyBub3QgaW50ZXJjZXB0ICdtYWtlUmVxdWVzdCcgYW5kIG90aGVyIGhlbHBlcnMpLlxuICAgICAgICBpZiAocHJvcCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhY2xhc3NPYmplY3QuaGFzT3duUHJvcGVydHkocHJvcCkgfHwgIWlzRnVuY3Rpb24ocmVhbCkpIHsgcmV0dXJuIHJlYWw7IH1cblxuICAgICAgICAvLyBOT1RFOiBUaGlzIG11c3QgYmUgYSBmdW5jdGlvbigpIGFuZCBub3QgYW4gKCkgPT4ge1xuICAgICAgICAvLyBiZWNhdXNlIEkgbmVlZCAndGhpcycgdG8gYmUgZHluYW1pY2FsbHkgYm91bmQgYW5kIG5vdCBzdGF0aWNhbGx5IGJvdW5kLlxuICAgICAgICAvLyBJZiB5b3VyIGxpbnRlciBjb21wbGFpbnMgZG9uJ3QgbGlzdGVuIHRvIGl0IVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgICAgICAgLy8gQ2FsbCB0aGUgdW5kZXJseWluZyBmdW5jdGlvbi4gSWYgaXQgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBhIHByb21pc2UoKVxuICAgICAgICAgIC8vIG1ldGhvZCBvbiBpdCwgd3JhcCB0aGF0ICdwcm9taXNlJyBtZXRob2QuXG4gICAgICAgICAgY29uc3QgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlYWwuYXBwbHkodGhpcywgYXJncyk7XG5cbiAgICAgICAgICAvLyBEb24ndCBpbnRlcmNlcHQgdW5sZXNzIHRoZSByZXR1cm4gdmFsdWUgaXMgYW4gb2JqZWN0IHdpdGggYSAnLnByb21pc2UoKScgbWV0aG9kLlxuICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UgIT09ICdvYmplY3QnIHx8ICFyZXNwb25zZSkgeyByZXR1cm4gcmVzcG9uc2U7IH1cbiAgICAgICAgICBpZiAoISgncHJvbWlzZScgaW4gcmVzcG9uc2UpKSB7IHJldHVybiByZXNwb25zZTsgfVxuXG4gICAgICAgICAgLy8gUmV0dXJuIGFuIG9iamVjdCB3aXRoIHRoZSBwcm9taXNlIG1ldGhvZCByZXBsYWNlZCB3aXRoIGEgd3JhcHBlciB3aGljaCB3aWxsXG4gICAgICAgICAgLy8gZG8gYWRkaXRpb25hbCB0aGluZ3MgdG8gZXJyb3JzLlxuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUocmVzcG9uc2UpLCB7XG4gICAgICAgICAgICBwcm9taXNlKCkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucHJvbWlzZSgpLmNhdGNoKChlOiBFcnJvciAmIHsgY29kZT86IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgZSA9IHNlbGYubWFrZURldGFpbGVkRXhjZXB0aW9uKGUpO1xuICAgICAgICAgICAgICAgIGRlYnVnKGBDYWxsIGZhaWxlZDogJHtwcm9wfSgke0pTT04uc3RyaW5naWZ5KGFyZ3NbMF0pfSkgPT4gJHtlLm1lc3NhZ2V9IChjb2RlPSR7ZS5jb2RlfSlgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7IC8vIFJlLSd0aHJvdycgdGhlIG5ldyBlcnJvclxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgYSBtb3JlIGRldGFpbGVkIGVycm9yIG91dCBvZiBhIGdlbmVyaWMgZXJyb3IgaWYgd2UgY2FuXG4gICAqXG4gICAqIElmIHRoaXMgaXMgYW4gZXJyb3IgYWJvdXQgQXNzdW1pbmcgUm9sZXMsIGFkZCBpbiB0aGUgY29udGV4dCBzaG93aW5nIHRoZVxuICAgKiBjaGFpbiBvZiBjcmVkZW50aWFscyB3ZSB1c2VkIHRvIHRyeSB0byBhc3N1bWUgdGhlIHJvbGUuXG4gICAqL1xuICBwcml2YXRlIG1ha2VEZXRhaWxlZEV4Y2VwdGlvbihlOiBFcnJvcik6IEVycm9yIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBzdXBlci1nZW5lcmljIFwic29tZXRoaW5nJ3Mgd3JvbmdcIiBlcnJvciB0aGF0IHRoZSBKUyBTREsgd3JhcHMgb3RoZXIgZXJyb3JzIGluLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1qcy9ibG9iL2YwYWMyZTUzNDU3Yzc1MTI4ODNkMDY3NzAxM2VhY2FhZDZjZDhhMTkvbGliL2V2ZW50X2xpc3RlbmVycy5qcyNMODRcbiAgICBpZiAodHlwZW9mIGUubWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgZS5tZXNzYWdlLnN0YXJ0c1dpdGgoJ01pc3NpbmcgY3JlZGVudGlhbHMgaW4gY29uZmlnJykpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsID0gKGUgYXMgYW55KS5vcmlnaW5hbEVycm9yO1xuICAgICAgaWYgKG9yaWdpbmFsKSB7XG4gICAgICAgIC8vIFdoZW4gdGhlIFNESyBkb2VzIGEgJ3V0aWwuY29weScsIHRoZXkgbG9zZSB0aGUgRXJyb3ItbmVzcyBvZiB0aGUgaW5uZXIgZXJyb3JcbiAgICAgICAgLy8gKHRoZXkgY29weSB0aGUgRXJyb3IncyBwcm9wZXJ0aWVzIGludG8gYSBwbGFpbiBvYmplY3QpIHNvIG1ha2UgaXQgYW4gRXJyb3Igb2JqZWN0IGFnYWluLlxuICAgICAgICBlID0gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoKSwgb3JpZ2luYWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSBlcnJvciBtaWdodCBzdGlsbCBiZSBhIGdlbmVyaWMgXCJDaGFpbmFibGVUZW1wb3JhcnlDcmVkZW50aWFscyBmYWlsZWRcIlxuICAgIC8vIGVycm9yIHdoaWNoIHdyYXBzIHRoZSBSRUFMIGVycm9yIChBc3N1bWVSb2xlIGZhaWxlZCkuIFdlJ3JlIGdvaW5nIHRvIHJlcGxhY2UgdGhlIGVycm9yXG4gICAgLy8gbWVzc2FnZSB3aXRoIG9uZSB0aGF0J3MgbW9yZSBsaWtlbHkgdG8gaGVscCB1c2VycywgYW5kIHRlbGwgdGhlbSB0aGUgbW9zdCBwcm9iYWJsZVxuICAgIC8vIGZpeCAoYm9vdHN0cmFwcGluZykuIFRoZSB1bmRlcmx5aW5nIHNlcnZpY2UgY2FsbCBmYWlsdXJlIHdpbGwgYmUgYXBwZW5kZWQgYmVsb3cuXG4gICAgaWYgKGUubWVzc2FnZSA9PT0gJ0NvdWxkIG5vdCBsb2FkIGNyZWRlbnRpYWxzIGZyb20gQ2hhaW5hYmxlVGVtcG9yYXJ5Q3JlZGVudGlhbHMnKSB7XG4gICAgICBlLm1lc3NhZ2UgPSBbXG4gICAgICAgICdDb3VsZCBub3QgYXNzdW1lIHJvbGUgaW4gdGFyZ2V0IGFjY291bnQnLFxuICAgICAgICAuLi50aGlzLnNka09wdGlvbnMuYXNzdW1lUm9sZUNyZWRlbnRpYWxzU291cmNlRGVzY3JpcHRpb25cbiAgICAgICAgICA/IFtgdXNpbmcgJHt0aGlzLnNka09wdGlvbnMuYXNzdW1lUm9sZUNyZWRlbnRpYWxzU291cmNlRGVzY3JpcHRpb259YF1cbiAgICAgICAgICA6IFtdLFxuICAgICAgICAnKGRpZCB5b3UgYm9vdHN0cmFwIHRoZSBlbnZpcm9ubWVudCB3aXRoIHRoZSByaWdodCBcXCctLXRydXN0XFwncz8pJyxcbiAgICAgIF0uam9pbignICcpO1xuICAgIH1cblxuICAgIC8vIFJlcGxhY2UgdGhlIG1lc3NhZ2Ugb24gdGhpcyBlcnJvciB3aXRoIGEgY29uY2F0ZW5hdGlvbiBvZiBhbGwgaW5uZXIgZXJyb3IgbWVzc2FnZXMuXG4gICAgLy8gTXVzdCBtb3JlIGNsZWFyIHdoYXQncyBnb2luZyBvbiB0aGF0IHdheS5cbiAgICBlLm1lc3NhZ2UgPSBhbGxDaGFpbmVkRXhjZXB0aW9uTWVzc2FnZXMoZSk7XG4gICAgcmV0dXJuIGU7XG4gIH1cbn1cblxuY29uc3QgQ1VSUkVOVF9BQ0NPVU5UX0tFWSA9IFN5bWJvbCgnY3VycmVudF9hY2NvdW50X2tleScpO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHg6IGFueSk6IHggaXMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkge1xuICByZXR1cm4geCAmJiB7fS50b1N0cmluZy5jYWxsKHgpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgY29uY2F0ZW5hdGVkIG1lc3NhZ2Ugb2YgYWxsIGV4Y2VwdGlvbnMgaW4gdGhlIEFXUyBleGNlcHRpb24gY2hhaW5cbiAqL1xuZnVuY3Rpb24gYWxsQ2hhaW5lZEV4Y2VwdGlvbk1lc3NhZ2VzKGU6IEVycm9yIHwgdW5kZWZpbmVkKSB7XG4gIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIHdoaWxlIChlKSB7XG4gICAgcmV0LnB1c2goZS5tZXNzYWdlKTtcbiAgICBlID0gKGUgYXMgYW55KS5vcmlnaW5hbEVycm9yO1xuICB9XG4gIHJldHVybiByZXQuam9pbignOiAnKTtcbn1cbiJdfQ==
@@ -31,12 +31,11 @@ class Bootstrapper {
31
31
  *
32
32
  */
33
33
  async legacyBootstrap(environment, sdkProvider, options = {}) {
34
- var _a, _b, _c, _d;
35
- const params = (_a = options.parameters) !== null && _a !== void 0 ? _a : {};
36
- if ((_b = params.trustedAccounts) === null || _b === void 0 ? void 0 : _b.length) {
34
+ const params = options.parameters ?? {};
35
+ if (params.trustedAccounts?.length) {
37
36
  throw new Error('--trust can only be passed for the modern bootstrap experience.');
38
37
  }
39
- if ((_c = params.cloudFormationExecutionPolicies) === null || _c === void 0 ? void 0 : _c.length) {
38
+ if (params.cloudFormationExecutionPolicies?.length) {
40
39
  throw new Error('--cloudformation-execution-policies can only be passed for the modern bootstrap experience.');
41
40
  }
42
41
  if (params.createCustomerMasterKey !== undefined) {
@@ -48,7 +47,7 @@ class Bootstrapper {
48
47
  const current = await deploy_bootstrap_1.BootstrapStack.lookup(sdkProvider, environment, options.toolkitStackName);
49
48
  return current.update(await this.loadTemplate(params), {}, {
50
49
  ...options,
51
- terminationProtection: (_d = options.terminationProtection) !== null && _d !== void 0 ? _d : current.terminationProtection,
50
+ terminationProtection: options.terminationProtection ?? current.terminationProtection,
52
51
  });
53
52
  }
54
53
  /**
@@ -56,8 +55,7 @@ class Bootstrapper {
56
55
  *
57
56
  */
58
57
  async modernBootstrap(environment, sdkProvider, options = {}) {
59
- var _a, _b, _c, _d, _e, _f;
60
- const params = (_a = options.parameters) !== null && _a !== void 0 ? _a : {};
58
+ const params = options.parameters ?? {};
61
59
  const bootstrapTemplate = await this.loadTemplate();
62
60
  const current = await deploy_bootstrap_1.BootstrapStack.lookup(sdkProvider, environment, options.toolkitStackName);
63
61
  if (params.createCustomerMasterKey !== undefined && params.kmsKeyId) {
@@ -71,11 +69,11 @@ class Bootstrapper {
71
69
  // Ideally we'd do this inside the template, but the `Rules` section of CFN
72
70
  // templates doesn't seem to be able to express the conditions that we need
73
71
  // (can't use Fn::Join or reference Conditions) so we do it here instead.
74
- const trustedAccounts = (_b = params.trustedAccounts) !== null && _b !== void 0 ? _b : splitCfnArray(current.parameters.TrustedAccounts);
72
+ const trustedAccounts = params.trustedAccounts ?? splitCfnArray(current.parameters.TrustedAccounts);
75
73
  console_1.info(`Trusted accounts for deployment: ${trustedAccounts.length > 0 ? trustedAccounts.join(', ') : '(none)'}`);
76
- const trustedAccountsForLookup = (_c = params.trustedAccountsForLookup) !== null && _c !== void 0 ? _c : splitCfnArray(current.parameters.TrustedAccountsForLookup);
74
+ const trustedAccountsForLookup = params.trustedAccountsForLookup ?? splitCfnArray(current.parameters.TrustedAccountsForLookup);
77
75
  console_1.info(`Trusted accounts for lookup: ${trustedAccountsForLookup.length > 0 ? trustedAccountsForLookup.join(', ') : '(none)'}`);
78
- const cloudFormationExecutionPolicies = (_d = params.cloudFormationExecutionPolicies) !== null && _d !== void 0 ? _d : splitCfnArray(current.parameters.CloudFormationExecutionPolicies);
76
+ const cloudFormationExecutionPolicies = params.cloudFormationExecutionPolicies ?? splitCfnArray(current.parameters.CloudFormationExecutionPolicies);
79
77
  if (trustedAccounts.length === 0 && cloudFormationExecutionPolicies.length === 0) {
80
78
  // For self-trust it's okay to default to AdministratorAccess, and it improves the usability of bootstrapping a lot.
81
79
  //
@@ -107,9 +105,10 @@ class Bootstrapper {
107
105
  // * undefined if we already had a value in place (reusing what we had)
108
106
  // * '-' if this is the first time we're deploying this stack (or upgrading from old to new bootstrap)
109
107
  const currentKmsKeyId = current.parameters.FileAssetsBucketKmsKeyId;
110
- const kmsKeyId = (_e = params.kmsKeyId) !== null && _e !== void 0 ? _e : (params.createCustomerMasterKey === true ? CREATE_NEW_KEY :
111
- params.createCustomerMasterKey === false || currentKmsKeyId === undefined ? USE_AWS_MANAGED_KEY :
112
- undefined);
108
+ const kmsKeyId = params.kmsKeyId ??
109
+ (params.createCustomerMasterKey === true ? CREATE_NEW_KEY :
110
+ params.createCustomerMasterKey === false || currentKmsKeyId === undefined ? USE_AWS_MANAGED_KEY :
111
+ undefined);
113
112
  return current.update(bootstrapTemplate, {
114
113
  FileAssetsBucketName: params.bucketName,
115
114
  FileAssetsBucketKmsKeyId: kmsKeyId,
@@ -121,7 +120,7 @@ class Bootstrapper {
121
120
  PublicAccessBlockConfiguration: params.publicAccessBlockConfiguration || params.publicAccessBlockConfiguration === undefined ? 'true' : 'false',
122
121
  }, {
123
122
  ...options,
124
- terminationProtection: (_f = options.terminationProtection) !== null && _f !== void 0 ? _f : current.terminationProtection,
123
+ terminationProtection: options.terminationProtection ?? current.terminationProtection,
125
124
  });
126
125
  }
127
126
  async customBootstrap(environment, sdkProvider, options = {}) {
@@ -166,4 +165,4 @@ function splitCfnArray(xs) {
166
165
  }
167
166
  return xs.split(',');
168
167
  }
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLWVudmlyb25tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYm9vdHN0cmFwLWVudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUErQjtBQUMvQiw2QkFBNkI7QUFFN0IsMkNBQXdDO0FBQ3hDLCtDQUE2RDtBQUM3RCx3REFBaUQ7QUFJakQseURBQWtGO0FBQ2xGLHVEQUE0RDtBQVU1RCxNQUFhLFlBQVk7SUFDdkIsWUFBNkIsTUFBdUI7UUFBdkIsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7SUFDcEQsQ0FBQztJQUVNLG9CQUFvQixDQUFDLFdBQThCLEVBQUUsV0FBd0IsRUFBRSxVQUF1QyxFQUFFO1FBQzdILFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDMUIsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pFLEtBQUssU0FBUztnQkFDWixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNqRSxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDbEU7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVk7UUFDdkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxrQkFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLGVBQWUsQ0FBQyxXQUE4QixFQUFFLFdBQXdCLEVBQUUsVUFBdUMsRUFBRTs7UUFDL0gsTUFBTSxNQUFNLFNBQUcsT0FBTyxD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cUJBQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixDQUFDLENBQUMsQ0FBQztZQUN4RyxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyx5Q0FBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMxQztJQUNILENBQUM7Q0FDRjtBQTlKRCxvQ0E4SkM7QUFFRDs7R0FFRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsaUJBQWlCLENBQUM7QUFFOUM7O0dBRUc7QUFDSCxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFFMUI7Ozs7R0FJRztBQUNILFNBQVMsYUFBYSxDQUFDLEVBQXNCO0lBQzNDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssU0FBUyxFQUFFO1FBQUUsT0FBTyxFQUFFLENBQUM7S0FBRTtJQUNqRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluZm8gfSBmcm9tICdjb25zb2xlJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgd2FybmluZyB9IGZyb20gJy4uLy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHsgbG9hZFN0cnVjdHVyZWRGaWxlLCB0b1lBTUwgfSBmcm9tICcuLi8uLi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgcm9vdERpciB9IGZyb20gJy4uLy4uL3V0aWwvZGlyZWN0b3JpZXMnO1xuaW1wb3J0IHsgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi9hd3MtYXV0aCc7XG5pbXBvcnQgeyBEZXBsb3lTdGFja1Jlc3VsdCB9IGZyb20gJy4uL2RlcGxveS1zdGFjayc7XG5pbXBvcnQgeyBCb290c3RyYXBFbnZpcm9ubWVudE9wdGlvbnMsIEJvb3RzdHJhcHBpbmdQYXJhbWV0ZXJzIH0gZnJvbSAnLi9ib290c3RyYXAtcHJvcHMnO1xuaW1wb3J0IHsgQm9vdHN0cmFwU3RhY2ssIGJvb3RzdHJhcFZlcnNpb25Gcm9tVGVtcGxhdGUgfSBmcm9tICcuL2RlcGxveS1ib290c3RyYXAnO1xuaW1wb3J0IHsgbGVnYWN5Qm9vdHN0cmFwVGVtcGxhdGUgfSBmcm9tICcuL2xlZ2FjeS10ZW1wbGF0ZSc7XG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cblxuZXhwb3J0IHR5cGUgQm9vdHN0cmFwU291cmNlID1cbiAgeyBzb3VyY2U6ICdsZWdhY3knIH1cbiAgfCB7IHNvdXJjZTogJ2RlZmF1bHQnIH1cbiAgfCB7IHNvdXJjZTogJ2N1c3RvbSc7IHRlbXBsYXRlRmlsZTogc3RyaW5nIH07XG5cblxuZXhwb3J0IGNsYXNzIEJvb3RzdHJhcHBlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc291cmNlOiBCb290c3RyYXBTb3VyY2UpIHtcbiAgfVxuXG4gIHB1YmxpYyBib290c3RyYXBFbnZpcm9ubWVudChlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlciwgb3B0aW9uczogQm9vdHN0cmFwRW52aXJvbm1lbnRPcHRpb25zID0ge30pOiBQcm9taXNlPERlcGxveVN0YWNrUmVzdWx0PiB7XG4gICAgc3dpdGNoICh0aGlzLnNvdXJjZS5zb3VyY2UpIHtcbiAgICAgIGNhc2UgJ2xlZ2FjeSc6XG4gICAgICAgIHJldHVybiB0aGlzLmxlZ2FjeUJvb3RzdHJhcChlbnZpcm9ubWVudCwgc2RrUHJvdmlkZXIsIG9wdGlvbnMpO1xuICAgICAgY2FzZSAnZGVmYXVsdCc6XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVybkJvb3RzdHJhcChlbnZpcm9ubWVudCwgc2RrUHJvdmlkZXIsIG9wdGlvbnMpO1xuICAgICAgY2FzZSAnY3VzdG9tJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tQm9vdHN0cmFwKGVudmlyb25tZW50LCBzZGtQcm92aWRlciwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHNob3dUZW1wbGF0ZSgpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IHRoaXMubG9hZFRlbXBsYXRlKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7dG9ZQU1MKHRlbXBsYXRlKX1cXG5gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXBsb3kgbGVnYWN5IGJvb3RzdHJhcCBzdGFja1xuICAgKlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsZWdhY3lCb290c3RyYXAoZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LCBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsIG9wdGlvbnM6IEJvb3RzdHJhcEVudmlyb25tZW50T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG9wdGlvbnMucGFyYW1ldGVycyA/PyB7fTtcblxuICAgIGlmIChwYXJhbXMudHJ1c3RlZEFjY291bnRzPy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignLS10cnVzdCBjYW4gb25seSBiZSBwYXNzZWQgZm9yIHRoZSBtb2Rlcm4gYm9vdHN0cmFwIGV4cGVyaWVuY2UuJyk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuY2xvdWRGb3JtYXRpb25FeGVjdXRpb25Qb2xpY2llcz8ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJy0tY2xvdWRmb3JtYXRpb24tZXhlY3V0aW9uLXBvbGljaWVzIGNhbiBvbmx5IGJlIHBhc3NlZCBmb3IgdGhlIG1vZGVybiBib290c3RyYXAgZXhwZXJpZW5jZS4nKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5jcmVhdGVDdXN0b21lck1hc3RlcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJy0tYm9vdHN0cmFwLWN1c3RvbWVyLWtleSBjYW4gb25seSBiZSBwYXNzZWQgZm9yIHRoZSBtb2Rlcm4gYm9vdHN0cmFwIGV4cGVyaWVuY2UuJyk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMucXVhbGlmaWVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJy0tcXVhbGlmaWVyIGNhbiBvbmx5IGJlIHBhc3NlZCBmb3IgdGhlIG1vZGVybiBib290c3RyYXAgZXhwZXJpZW5jZS4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgQm9vdHN0cmFwU3RhY2subG9va3VwKHNka1Byb3ZpZGVyLCBlbnZpcm9ubWVudCwgb3B0aW9ucy50b29sa2l0U3RhY2tOYW1lKTtcbiAgICByZXR1cm4gY3VycmVudC51cGRhdGUoYXdhaXQgdGhpcy5sb2FkVGVtcGxhdGUocGFyYW1zKSwge30sIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB0ZXJtaW5hdGlvblByb3RlY3Rpb246IG9wdGlvbnMudGVybWluYXRpb25Qcm90ZWN0aW9uID8/IGN1cnJlbnQudGVybWluYXRpb25Qcm90ZWN0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcGxveSBDSS9DRC1yZWFkeSBib290c3RyYXAgc3RhY2sgZnJvbSB0ZW1wbGF0ZVxuICAgKlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBtb2Rlcm5Cb290c3RyYXAoXG4gICAgZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LFxuICAgIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcixcbiAgICBvcHRpb25zOiBCb290c3RyYXBFbnZpcm9ubWVudE9wdGlvbnMgPSB7fSk6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQ+IHtcblxuICAgIGNvbnN0IHBhcmFtcyA9IG9wdGlvbnMucGFyYW1ldGVycyA/PyB7fTtcblxuICAgIGNvbnN0IGJvb3RzdHJhcFRlbXBsYXRlID0gYXdhaXQgdGhpcy5sb2FkVGVtcGxhdGUoKTtcblxuICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCBCb290c3RyYXBTdGFjay5sb29rdXAoc2RrUHJvdmlkZXIsIGVudmlyb25tZW50LCBvcHRpb25zLnRvb2xraXRTdGFja05hbWUpO1xuXG4gICAgaWYgKHBhcmFtcy5jcmVhdGVDdXN0b21lck1hc3RlcktleSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtcy5rbXNLZXlJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHBhc3MgXFwnLS1ib290c3RyYXAta21zLWtleS1pZFxcJyBhbmQgXFwnLS1ib290c3RyYXAtY3VzdG9tZXIta2V5XFwnIHRvZ2V0aGVyLiBTcGVjaWZ5IG9uZSBvciB0aGUgb3RoZXInKTtcbiAgICB9XG5cbiAgICAvLyBJZiBwZW9wbGUgcmUtYm9vdHN0cmFwLCBleGlzdGluZyBwYXJhbWV0ZXIgdmFsdWVzIGFyZSByZXVzZWQgc28gdGhhdCBwZW9wbGUgZG9uJ3QgYWNjaWRlbnRhbGx5IGNoYW5nZSB0aGUgY29uZmlndXJhdGlvblxuICAgIC8vIG9uIHRoZWlyIGJvb3RzdHJhcCBzdGFjayAodGhpcyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaW4gZGVwbG95U3RhY2spLiBIb3dldmVyLCB0byBkbyBwcm9wZXIgdmFsaWRhdGlvbiBvbiB0aGVcbiAgICAvLyBjb21iaW5lZCBhcmd1bWVudHMgKHN1Y2ggdGhhdCBpZiAtLXRydXN0IGhhcyBiZWVuIGdpdmVuLCAtLWNsb3VkZm9ybWF0aW9uLWV4ZWN1dGlvbi1wb2xpY2llcyBpcyBuZWNlc3NhcnkgYXMgd2VsbClcbiAgICAvLyB3ZSBuZWVkIHRvIHRha2UgdGhpcyBwYXJhbWV0ZXIgcmV1c2UgaW50byBhY2NvdW50LlxuICAgIC8vXG4gICAgLy8gSWRlYWxseSB3ZSdkIGRvIHRoaXMgaW5zaWRlIHRoZSB0ZW1wbGF0ZSwgYnV0IHRoZSBgUnVsZXNgIHNlY3Rpb24gb2YgQ0ZOXG4gICAgLy8gdGVtcGxhdGVzIGRvZXNuJ3Qgc2VlbSB0byBiZSBhYmxlIHRvIGV4cHJlc3MgdGhlIGNvbmRpdGlvbnMgdGhhdCB3ZSBuZWVkXG4gICAgLy8gKGNhbid0IHVzZSBGbjo6Sm9pbiBvciByZWZlcmVuY2UgQ29uZGl0aW9ucykgc28gd2UgZG8gaXQgaGVyZSBpbnN0ZWFkLlxuICAgIGNvbnN0IHRydXN0ZWRBY2NvdW50cyA9IHBhcmFtcy50cnVzdGVkQWNjb3VudHMgPz8gc3BsaXRDZm5BcnJheShjdXJyZW50LnBhcmFtZXRlcnMuVHJ1c3RlZEFjY291bnRzKTtcbiAgICBpbmZvKGBUcnVzdGVkIGFjY291bnRzIGZvciBkZXBsb3ltZW50OiAke3RydXN0ZWRBY2NvdW50cy5sZW5ndGggPiAwID8gdHJ1c3RlZEFjY291bnRzLmpvaW4oJywgJykgOiAnKG5vbmUpJ31gKTtcblxuICAgIGNvbnN0IHRydXN0ZWRBY2NvdW50c0Zvckxvb2t1cCA9IHBhcmFtcy50cnVzdGVkQWNjb3VudHNGb3JMb29rdXAgPz8gc3BsaXRDZm5BcnJheShjdXJyZW50LnBhcmFtZXRlcnMuVHJ1c3RlZEFjY291bnRzRm9yTG9va3VwKTtcbiAgICBpbmZvKGBUcnVzdGVkIGFjY291bnRzIGZvciBsb29rdXA6ICR7dHJ1c3RlZEFjY291bnRzRm9yTG9va3VwLmxlbmd0aCA+IDAgPyB0cnVzdGVkQWNjb3VudHNGb3JMb29rdXAuam9pbignLCAnKSA6ICcobm9uZSknfWApO1xuXG4gICAgY29uc3QgY2xvdWRGb3JtYXRpb25FeGVjdXRpb25Qb2xpY2llcyA9IHBhcmFtcy5jbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzID8/IHNwbGl0Q2ZuQXJyYXkoY3VycmVudC5wYXJhbWV0ZXJzLkNsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXMpO1xuICAgIGlmICh0cnVzdGVkQWNjb3VudHMubGVuZ3RoID09PSAwICYmIGNsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBGb3Igc2VsZi10cnVzdCBpdCdzIG9rYXkgdG8gZGVmYXVsdCB0byBBZG1pbmlzdHJhdG9yQWNjZXNzLCBhbmQgaXQgaW1wcm92ZXMgdGhlIHVzYWJpbGl0eSBvZiBib290c3RyYXBwaW5nIGEgbG90LlxuICAgICAgLy9cbiAgICAgIC8vIFdlIGRvbid0IGFjdHVhbGx5IG1ha2UgdGhlIGltcGxpY2l0eSBwb2xpY3kgYSBwaHlzaWNhbCBwYXJhbWV0ZXIuIFRoZSB0ZW1wbGF0ZSB3aWxsIGluZmVyIGl0IGluc3RlYWQsXG4gICAgICAvLyB3ZSBzaW1wbHkgZG8gdGhlIFVJIGFkdmVydGlzaW5nIHRoYXQgYmVoYXZpb3IgaGVyZS5cbiAgICAgIC8vXG4gICAgICAvLyBJZiB3ZSBESUQgbWFrZSBpdCBhbiBleHBsaWNpdCBwYXJhbWV0ZXIsIHdlIHdvdWxkbid0IGJlIGFibGUgdG8gdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHdoZXRoZXJcbiAgICAgIC8vIHdlIGluZmVycmVkIGl0IG9yIHdoZXRoZXIgdGhlIHVzZXIgdG9sZCB1cywgYW5kIHRoZSBzZXF1ZW5jZTpcbiAgICAgIC8vXG4gICAgICAvLyAkIGNkayBib290c3RyYXBcbiAgICAgIC8vICQgY2RrIGJvb3RzdHJhcCAtLXRydXN0IDEyMzRcbiAgICAgIC8vXG4gICAgICAvLyBXb3VsZCBsZWF2ZSBBZG1pbmlzdHJhdG9yQWNjZXNzIHBvbGljaWVzIHdpdGggYSB0cnVzdCByZWxhdGlvbnNoaXAsIHdpdGhvdXQgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgLy8gYXBwcm92aW5nIHRoZSB0cnVzdCBwb2xpY3kuXG4gICAgICBjb25zdCBpbXBsaWNpdFBvbGljeSA9IGBhcm46JHthd2FpdCBjdXJyZW50LnBhcnRpdGlvbigpfTppYW06OmF3czpwb2xpY3kvQWRtaW5pc3RyYXRvckFjY2Vzc2A7XG4gICAgICB3YXJuaW5nKGBVc2luZyBkZWZhdWx0IGV4ZWN1dGlvbiBwb2xpY3kgb2YgJyR7aW1wbGljaXRQb2xpY3l9Jy4gUGFzcyAnLS1jbG91ZGZvcm1hdGlvbi1leGVjdXRpb24tcG9saWNpZXMnIHRvIGN1c3RvbWl6ZS5gKTtcbiAgICB9IGVsc2UgaWYgKGNsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBwYXNzIFxcJy0tY2xvdWRmb3JtYXRpb24tZXhlY3V0aW9uLXBvbGljaWVzXFwnIHdoZW4gdXNpbmcgXFwnLS10cnVzdFxcJyB0byBzcGVjaWZ5IGRlcGxveW1lbnQgcGVybWlzc2lvbnMuIFRyeSBhIG1hbmFnZWQgcG9saWN5IG9mIHRoZSBmb3JtIFxcJ2Fybjphd3M6aWFtOjphd3M6cG9saWN5LzxQb2xpY3lOYW1lPlxcJy4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVtaW5kIHBlb3BsZSB3aGF0IHRoZSBjdXJyZW50IHNldHRpbmdzIGFyZVxuICAgICAgaW5mbyhgRXhlY3V0aW9uIHBvbGljaWVzOiAke2Nsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXMuam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICAvLyAqIElmIGFuIEFSTiBpcyBnaXZlbiwgdGhhdCBBUk4uIE90aGVyd2lzZTpcbiAgICAvLyAgICogJy0nIGlmIGN1c3RvbWVyS2V5ID0gZmFsc2VcbiAgICAvLyAgICogJycgaWYgY3VzdG9tZXJLZXkgPSB0cnVlXG4gICAgLy8gICAqIGlmIGN1c3RvbWVyS2V5IGlzIGFsc28gbm90IGdpdmVuXG4gICAgLy8gICAgICogdW5kZWZpbmVkIGlmIHdlIGFscmVhZHkgaGFkIGEgdmFsdWUgaW4gcGxhY2UgKHJldXNpbmcgd2hhdCB3ZSBoYWQpXG4gICAgLy8gICAgICogJy0nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UncmUgZGVwbG95aW5nIHRoaXMgc3RhY2sgKG9yIHVwZ3JhZGluZyBmcm9tIG9sZCB0byBuZXcgYm9vdHN0cmFwKVxuICAgIGNvbnN0IGN1cnJlbnRLbXNLZXlJZCA9IGN1cnJlbnQucGFyYW1ldGVycy5GaWxlQXNzZXRzQnVja2V0S21zS2V5SWQ7XG4gICAgY29uc3Qga21zS2V5SWQgPSBwYXJhbXMua21zS2V5SWQgPz9cbiAgICAgIChwYXJhbXMuY3JlYXRlQ3VzdG9tZXJNYXN0ZXJLZXkgPT09IHRydWUgPyBDUkVBVEVfTkVXX0tFWSA6XG4gICAgICAgIHBhcmFtcy5jcmVhdGVDdXN0b21lck1hc3RlcktleSA9PT0gZmFsc2UgfHwgY3VycmVudEttc0tleUlkID09PSB1bmRlZmluZWQgPyBVU0VfQVdTX01BTkFHRURfS0VZIDpcbiAgICAgICAgICB1bmRlZmluZWQpO1xuXG4gICAgcmV0dXJuIGN1cnJlbnQudXBkYXRlKFxuICAgICAgYm9vdHN0cmFwVGVtcGxhdGUsXG4gICAgICB7XG4gICAgICAgIEZpbGVBc3NldHNCdWNrZXROYW1lOiBwYXJhbXMuYnVja2V0TmFtZSxcbiAgICAgICAgRmlsZUFzc2V0c0J1Y2tldEttc0tleUlkOiBrbXNLZXlJZCxcbiAgICAgICAgLy8gRW1wdHkgYXJyYXkgYmVjb21lcyBlbXB0eSBzdHJpbmdcbiAgICAgICAgVHJ1c3RlZEFjY291bnRzOiB0cnVzdGVkQWNjb3VudHMuam9pbignLCcpLFxuICAgICAgICBUcnVzdGVkQWNjb3VudHNGb3JMb29rdXA6IHRydXN0ZWRBY2NvdW50c0Zvckxvb2t1cC5qb2luKCcsJyksXG4gICAgICAgIENsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXM6IGNsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXMuam9pbignLCcpLFxuICAgICAgICBRdWFsaWZpZXI6IHBhcmFtcy5xdWFsaWZpZXIsXG4gICAgICAgIFB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbjogcGFyYW1zLnB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbiB8fCBwYXJhbXMucHVibGljQWNjZXNzQmxvY2tDb25maWd1cmF0aW9uID09PSB1bmRlZmluZWQgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgfSwge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICB0ZXJtaW5hdGlvblByb3RlY3Rpb246IG9wdGlvbnMudGVybWluYXRpb25Qcm90ZWN0aW9uID8/IGN1cnJlbnQudGVybWluYXRpb25Qcm90ZWN0aW9uLFxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGN1c3RvbUJvb3RzdHJhcChcbiAgICBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsXG4gICAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLFxuICAgIG9wdGlvbnM6IEJvb3RzdHJhcEVudmlyb25tZW50T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuXG4gICAgLy8gTG9vayBhdCB0aGUgdGVtcGxhdGUsIGRlY2lkZSB3aGV0aGVyIGl0J3MgbW9zdCBsaWtlbHkgYSBsZWdhY3kgb3IgbW9kZXJuIGJvb3RzdHJhcFxuICAgIC8vIHRlbXBsYXRlLCBhbmQgdXNlIHRoZSByaWdodCBib290c3RyYXBwZXIgZm9yIHRoYXQuXG4gICAgY29uc3QgdmVyc2lvbiA9IGJvb3RzdHJhcFZlcnNpb25Gcm9tVGVtcGxhdGUoYXdhaXQgdGhpcy5sb2FkVGVtcGxhdGUoKSk7XG4gICAgaWYgKHZlcnNpb24gPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmxlZ2FjeUJvb3RzdHJhcChlbnZpcm9ubWVudCwgc2RrUHJvdmlkZXIsIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5tb2Rlcm5Cb290c3RyYXAoZW52aXJvbm1lbnQsIHNka1Byb3ZpZGVyLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRUZW1wbGF0ZShwYXJhbXM6IEJvb3RzdHJhcHBpbmdQYXJhbWV0ZXJzID0ge30pOiBQcm9taXNlPGFueT4ge1xuICAgIHN3aXRjaCAodGhpcy5zb3VyY2Uuc291cmNlKSB7XG4gICAgICBjYXNlICdjdXN0b20nOlxuICAgICAgICByZXR1cm4gbG9hZFN0cnVjdHVyZWRGaWxlKHRoaXMuc291cmNlLnRlbXBsYXRlRmlsZSk7XG4gICAgICBjYXNlICdkZWZhdWx0JzpcbiAgICAgICAgcmV0dXJuIGxvYWRTdHJ1Y3R1cmVkRmlsZShwYXRoLmpvaW4ocm9vdERpcigpLCAnbGliJywgJ2FwaScsICdib290c3RyYXAnLCAnYm9vdHN0cmFwLXRlbXBsYXRlLnlhbWwnKSk7XG4gICAgICBjYXNlICdsZWdhY3knOlxuICAgICAgICByZXR1cm4gbGVnYWN5Qm9vdHN0cmFwVGVtcGxhdGUocGFyYW1zKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBNYWdpYyBwYXJhbWV0ZXIgdmFsdWUgdGhhdCB3aWxsIGNhdXNlIHRoZSBib290c3RyYXAtdGVtcGxhdGUueW1sIHRvIE5PVCBjcmVhdGUgYSBDTUsgYnV0IHVzZSB0aGUgZGVmYXVsdCBrZXlvXG4gKi9cbmNvbnN0IFVTRV9BV1NfTUFOQUdFRF9LRVkgPSAnQVdTX01BTkFHRURfS0VZJztcblxuLyoqXG4gKiBNYWdpYyBwYXJhbWV0ZXIgdmFsdWUgdGhhdCB3aWxsIGNhdXNlIHRoZSBib290c3RyYXAtdGVtcGxhdGUueW1sIHRvIGNyZWF0ZSBhIENNS1xuICovXG5jb25zdCBDUkVBVEVfTkVXX0tFWSA9ICcnO1xuXG4vKipcbiAqIFNwbGl0IGFuIGFycmF5LWxpa2UgQ2xvdWRGb3JtYXRpb24gcGFyYW1ldGVyIG9uICxcbiAqXG4gKiBBbiBlbXB0eSBzdHJpbmcgaXMgdGhlIGVtcHR5IGFycmF5IChpbnN0ZWFkIG9mIGBbJyddYCkuXG4gKi9cbmZ1bmN0aW9uIHNwbGl0Q2ZuQXJyYXkoeHM6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHtcbiAgaWYgKHhzID09PSAnJyB8fCB4cyA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBbXTsgfVxuICByZXR1cm4geHMuc3BsaXQoJywnKTtcbn1cbiJdfQ==
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLWVudmlyb25tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYm9vdHN0cmFwLWVudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUErQjtBQUMvQiw2QkFBNkI7QUFFN0IsMkNBQXdDO0FBQ3hDLCtDQUE2RDtBQUM3RCx3REFBaUQ7QUFJakQseURBQWtGO0FBQ2xGLHVEQUE0RDtBQVU1RCxNQUFhLFlBQVk7SUFDdkIsWUFBNkIsTUFBdUI7UUFBdkIsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7SUFDcEQsQ0FBQztJQUVNLG9CQUFvQixDQUFDLFdBQThCLEVBQUUsV0FBd0IsRUFBRSxVQUF1QyxFQUFFO1FBQzdILFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDMUIsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pFLEtBQUssU0FBUztnQkFDWixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNqRSxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDbEU7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVk7UUFDdkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxrQkFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLGVBQWUsQ0FBQyxXQUE4QixFQUFFLFdBQXdCLEVBQUUsVUFBdUMsRUFBRTtRQUMvSCxNQUFNLE1BQU0sR0FBRyxPQUFPLENB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RUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7WUFDeEcsS0FBSyxRQUFRO2dCQUNYLE9BQU8seUNBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDMUM7SUFDSCxDQUFDO0NBQ0Y7QUE5SkQsb0NBOEpDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLGlCQUFpQixDQUFDO0FBRTlDOztHQUVHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBRTFCOzs7O0dBSUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxFQUFzQjtJQUMzQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLFNBQVMsRUFBRTtRQUFFLE9BQU8sRUFBRSxDQUFDO0tBQUU7SUFDakQsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmZvIH0gZnJvbSAnY29uc29sZSc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB7IHdhcm5pbmcgfSBmcm9tICcuLi8uLi9sb2dnaW5nJztcbmltcG9ydCB7IGxvYWRTdHJ1Y3R1cmVkRmlsZSwgdG9ZQU1MIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXplJztcbmltcG9ydCB7IHJvb3REaXIgfSBmcm9tICcuLi8uLi91dGlsL2RpcmVjdG9yaWVzJztcbmltcG9ydCB7IFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vYXdzLWF1dGgnO1xuaW1wb3J0IHsgRGVwbG95U3RhY2tSZXN1bHQgfSBmcm9tICcuLi9kZXBsb3ktc3RhY2snO1xuaW1wb3J0IHsgQm9vdHN0cmFwRW52aXJvbm1lbnRPcHRpb25zLCBCb290c3RyYXBwaW5nUGFyYW1ldGVycyB9IGZyb20gJy4vYm9vdHN0cmFwLXByb3BzJztcbmltcG9ydCB7IEJvb3RzdHJhcFN0YWNrLCBib290c3RyYXBWZXJzaW9uRnJvbVRlbXBsYXRlIH0gZnJvbSAnLi9kZXBsb3ktYm9vdHN0cmFwJztcbmltcG9ydCB7IGxlZ2FjeUJvb3RzdHJhcFRlbXBsYXRlIH0gZnJvbSAnLi9sZWdhY3ktdGVtcGxhdGUnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cbmV4cG9ydCB0eXBlIEJvb3RzdHJhcFNvdXJjZSA9XG4gIHsgc291cmNlOiAnbGVnYWN5JyB9XG4gIHwgeyBzb3VyY2U6ICdkZWZhdWx0JyB9XG4gIHwgeyBzb3VyY2U6ICdjdXN0b20nOyB0ZW1wbGF0ZUZpbGU6IHN0cmluZyB9O1xuXG5cbmV4cG9ydCBjbGFzcyBCb290c3RyYXBwZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHNvdXJjZTogQm9vdHN0cmFwU291cmNlKSB7XG4gIH1cblxuICBwdWJsaWMgYm9vdHN0cmFwRW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LCBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsIG9wdGlvbnM6IEJvb3RzdHJhcEVudmlyb25tZW50T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuICAgIHN3aXRjaCAodGhpcy5zb3VyY2Uuc291cmNlKSB7XG4gICAgICBjYXNlICdsZWdhY3knOlxuICAgICAgICByZXR1cm4gdGhpcy5sZWdhY3lCb290c3RyYXAoZW52aXJvbm1lbnQsIHNka1Byb3ZpZGVyLCBvcHRpb25zKTtcbiAgICAgIGNhc2UgJ2RlZmF1bHQnOlxuICAgICAgICByZXR1cm4gdGhpcy5tb2Rlcm5Cb290c3RyYXAoZW52aXJvbm1lbnQsIHNka1Byb3ZpZGVyLCBvcHRpb25zKTtcbiAgICAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbUJvb3RzdHJhcChlbnZpcm9ubWVudCwgc2RrUHJvdmlkZXIsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzaG93VGVtcGxhdGUoKSB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCB0aGlzLmxvYWRUZW1wbGF0ZSgpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke3RvWUFNTCh0ZW1wbGF0ZSl9XFxuYCk7XG4gIH1cblxuICAvKipcbiAgICogRGVwbG95IGxlZ2FjeSBib290c3RyYXAgc3RhY2tcbiAgICpcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbGVnYWN5Qm9vdHN0cmFwKGVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudCwgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLCBvcHRpb25zOiBCb290c3RyYXBFbnZpcm9ubWVudE9wdGlvbnMgPSB7fSk6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBvcHRpb25zLnBhcmFtZXRlcnMgPz8ge307XG5cbiAgICBpZiAocGFyYW1zLnRydXN0ZWRBY2NvdW50cz8ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJy0tdHJ1c3QgY2FuIG9ubHkgYmUgcGFzc2VkIGZvciB0aGUgbW9kZXJuIGJvb3RzdHJhcCBleHBlcmllbmNlLicpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmNsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXM/Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCctLWNsb3VkZm9ybWF0aW9uLWV4ZWN1dGlvbi1wb2xpY2llcyBjYW4gb25seSBiZSBwYXNzZWQgZm9yIHRoZSBtb2Rlcm4gYm9vdHN0cmFwIGV4cGVyaWVuY2UuJyk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuY3JlYXRlQ3VzdG9tZXJNYXN0ZXJLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCctLWJvb3RzdHJhcC1jdXN0b21lci1rZXkgY2FuIG9ubHkgYmUgcGFzc2VkIGZvciB0aGUgbW9kZXJuIGJvb3RzdHJhcCBleHBlcmllbmNlLicpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnF1YWxpZmllcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCctLXF1YWxpZmllciBjYW4gb25seSBiZSBwYXNzZWQgZm9yIHRoZSBtb2Rlcm4gYm9vdHN0cmFwIGV4cGVyaWVuY2UuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudCA9IGF3YWl0IEJvb3RzdHJhcFN0YWNrLmxvb2t1cChzZGtQcm92aWRlciwgZW52aXJvbm1lbnQsIG9wdGlvbnMudG9vbGtpdFN0YWNrTmFtZSk7XG4gICAgcmV0dXJuIGN1cnJlbnQudXBkYXRlKGF3YWl0IHRoaXMubG9hZFRlbXBsYXRlKHBhcmFtcyksIHt9LCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgdGVybWluYXRpb25Qcm90ZWN0aW9uOiBvcHRpb25zLnRlcm1pbmF0aW9uUHJvdGVjdGlvbiA/PyBjdXJyZW50LnRlcm1pbmF0aW9uUHJvdGVjdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXBsb3kgQ0kvQ0QtcmVhZHkgYm9vdHN0cmFwIHN0YWNrIGZyb20gdGVtcGxhdGVcbiAgICpcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbW9kZXJuQm9vdHN0cmFwKFxuICAgIGVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudCxcbiAgICBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsXG4gICAgb3B0aW9uczogQm9vdHN0cmFwRW52aXJvbm1lbnRPcHRpb25zID0ge30pOiBQcm9taXNlPERlcGxveVN0YWNrUmVzdWx0PiB7XG5cbiAgICBjb25zdCBwYXJhbXMgPSBvcHRpb25zLnBhcmFtZXRlcnMgPz8ge307XG5cbiAgICBjb25zdCBib290c3RyYXBUZW1wbGF0ZSA9IGF3YWl0IHRoaXMubG9hZFRlbXBsYXRlKCk7XG5cbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgQm9vdHN0cmFwU3RhY2subG9va3VwKHNka1Byb3ZpZGVyLCBlbnZpcm9ubWVudCwgb3B0aW9ucy50b29sa2l0U3RhY2tOYW1lKTtcblxuICAgIGlmIChwYXJhbXMuY3JlYXRlQ3VzdG9tZXJNYXN0ZXJLZXkgIT09IHVuZGVmaW5lZCAmJiBwYXJhbXMua21zS2V5SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGNhbm5vdCBwYXNzIFxcJy0tYm9vdHN0cmFwLWttcy1rZXktaWRcXCcgYW5kIFxcJy0tYm9vdHN0cmFwLWN1c3RvbWVyLWtleVxcJyB0b2dldGhlci4gU3BlY2lmeSBvbmUgb3IgdGhlIG90aGVyJyk7XG4gICAgfVxuXG4gICAgLy8gSWYgcGVvcGxlIHJlLWJvb3RzdHJhcCwgZXhpc3RpbmcgcGFyYW1ldGVyIHZhbHVlcyBhcmUgcmV1c2VkIHNvIHRoYXQgcGVvcGxlIGRvbid0IGFjY2lkZW50YWxseSBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb25cbiAgICAvLyBvbiB0aGVpciBib290c3RyYXAgc3RhY2sgKHRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGluIGRlcGxveVN0YWNrKS4gSG93ZXZlciwgdG8gZG8gcHJvcGVyIHZhbGlkYXRpb24gb24gdGhlXG4gICAgLy8gY29tYmluZWQgYXJndW1lbnRzIChzdWNoIHRoYXQgaWYgLS10cnVzdCBoYXMgYmVlbiBnaXZlbiwgLS1jbG91ZGZvcm1hdGlvbi1leGVjdXRpb24tcG9saWNpZXMgaXMgbmVjZXNzYXJ5IGFzIHdlbGwpXG4gICAgLy8gd2UgbmVlZCB0byB0YWtlIHRoaXMgcGFyYW1ldGVyIHJldXNlIGludG8gYWNjb3VudC5cbiAgICAvL1xuICAgIC8vIElkZWFsbHkgd2UnZCBkbyB0aGlzIGluc2lkZSB0aGUgdGVtcGxhdGUsIGJ1dCB0aGUgYFJ1bGVzYCBzZWN0aW9uIG9mIENGTlxuICAgIC8vIHRlbXBsYXRlcyBkb2Vzbid0IHNlZW0gdG8gYmUgYWJsZSB0byBleHByZXNzIHRoZSBjb25kaXRpb25zIHRoYXQgd2UgbmVlZFxuICAgIC8vIChjYW4ndCB1c2UgRm46OkpvaW4gb3IgcmVmZXJlbmNlIENvbmRpdGlvbnMpIHNvIHdlIGRvIGl0IGhlcmUgaW5zdGVhZC5cbiAgICBjb25zdCB0cnVzdGVkQWNjb3VudHMgPSBwYXJhbXMudHJ1c3RlZEFjY291bnRzID8/IHNwbGl0Q2ZuQXJyYXkoY3VycmVudC5wYXJhbWV0ZXJzLlRydXN0ZWRBY2NvdW50cyk7XG4gICAgaW5mbyhgVHJ1c3RlZCBhY2NvdW50cyBmb3IgZGVwbG95bWVudDogJHt0cnVzdGVkQWNjb3VudHMubGVuZ3RoID4gMCA/IHRydXN0ZWRBY2NvdW50cy5qb2luKCcsICcpIDogJyhub25lKSd9YCk7XG5cbiAgICBjb25zdCB0cnVzdGVkQWNjb3VudHNGb3JMb29rdXAgPSBwYXJhbXMudHJ1c3RlZEFjY291bnRzRm9yTG9va3VwID8/IHNwbGl0Q2ZuQXJyYXkoY3VycmVudC5wYXJhbWV0ZXJzLlRydXN0ZWRBY2NvdW50c0Zvckxvb2t1cCk7XG4gICAgaW5mbyhgVHJ1c3RlZCBhY2NvdW50cyBmb3IgbG9va3VwOiAke3RydXN0ZWRBY2NvdW50c0Zvckxvb2t1cC5sZW5ndGggPiAwID8gdHJ1c3RlZEFjY291bnRzRm9yTG9va3VwLmpvaW4oJywgJykgOiAnKG5vbmUpJ31gKTtcblxuICAgIGNvbnN0IGNsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXMgPSBwYXJhbXMuY2xvdWRGb3JtYXRpb25FeGVjdXRpb25Qb2xpY2llcyA/PyBzcGxpdENmbkFycmF5KGN1cnJlbnQucGFyYW1ldGVycy5DbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzKTtcbiAgICBpZiAodHJ1c3RlZEFjY291bnRzLmxlbmd0aCA9PT0gMCAmJiBjbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gRm9yIHNlbGYtdHJ1c3QgaXQncyBva2F5IHRvIGRlZmF1bHQgdG8gQWRtaW5pc3RyYXRvckFjY2VzcywgYW5kIGl0IGltcHJvdmVzIHRoZSB1c2FiaWxpdHkgb2YgYm9vdHN0cmFwcGluZyBhIGxvdC5cbiAgICAgIC8vXG4gICAgICAvLyBXZSBkb24ndCBhY3R1YWxseSBtYWtlIHRoZSBpbXBsaWNpdHkgcG9saWN5IGEgcGh5c2ljYWwgcGFyYW1ldGVyLiBUaGUgdGVtcGxhdGUgd2lsbCBpbmZlciBpdCBpbnN0ZWFkLFxuICAgICAgLy8gd2Ugc2ltcGx5IGRvIHRoZSBVSSBhZHZlcnRpc2luZyB0aGF0IGJlaGF2aW9yIGhlcmUuXG4gICAgICAvL1xuICAgICAgLy8gSWYgd2UgRElEIG1ha2UgaXQgYW4gZXhwbGljaXQgcGFyYW1ldGVyLCB3ZSB3b3VsZG4ndCBiZSBhYmxlIHRvIHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB3aGV0aGVyXG4gICAgICAvLyB3ZSBpbmZlcnJlZCBpdCBvciB3aGV0aGVyIHRoZSB1c2VyIHRvbGQgdXMsIGFuZCB0aGUgc2VxdWVuY2U6XG4gICAgICAvL1xuICAgICAgLy8gJCBjZGsgYm9vdHN0cmFwXG4gICAgICAvLyAkIGNkayBib290c3RyYXAgLS10cnVzdCAxMjM0XG4gICAgICAvL1xuICAgICAgLy8gV291bGQgbGVhdmUgQWRtaW5pc3RyYXRvckFjY2VzcyBwb2xpY2llcyB3aXRoIGEgdHJ1c3QgcmVsYXRpb25zaGlwLCB3aXRob3V0IHRoZSB1c2VyIGV4cGxpY2l0bHlcbiAgICAgIC8vIGFwcHJvdmluZyB0aGUgdHJ1c3QgcG9saWN5LlxuICAgICAgY29uc3QgaW1wbGljaXRQb2xpY3kgPSBgYXJuOiR7YXdhaXQgY3VycmVudC5wYXJ0aXRpb24oKX06aWFtOjphd3M6cG9saWN5L0FkbWluaXN0cmF0b3JBY2Nlc3NgO1xuICAgICAgd2FybmluZyhgVXNpbmcgZGVmYXVsdCBleGVjdXRpb24gcG9saWN5IG9mICcke2ltcGxpY2l0UG9saWN5fScuIFBhc3MgJy0tY2xvdWRmb3JtYXRpb24tZXhlY3V0aW9uLXBvbGljaWVzJyB0byBjdXN0b21pemUuYCk7XG4gICAgfSBlbHNlIGlmIChjbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgcGFzcyBcXCctLWNsb3VkZm9ybWF0aW9uLWV4ZWN1dGlvbi1wb2xpY2llc1xcJyB3aGVuIHVzaW5nIFxcJy0tdHJ1c3RcXCcgdG8gc3BlY2lmeSBkZXBsb3ltZW50IHBlcm1pc3Npb25zLiBUcnkgYSBtYW5hZ2VkIHBvbGljeSBvZiB0aGUgZm9ybSBcXCdhcm46YXdzOmlhbTo6YXdzOnBvbGljeS88UG9saWN5TmFtZT5cXCcuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbWluZCBwZW9wbGUgd2hhdCB0aGUgY3VycmVudCBzZXR0aW5ncyBhcmVcbiAgICAgIGluZm8oYEV4ZWN1dGlvbiBwb2xpY2llczogJHtjbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuXG4gICAgLy8gKiBJZiBhbiBBUk4gaXMgZ2l2ZW4sIHRoYXQgQVJOLiBPdGhlcndpc2U6XG4gICAgLy8gICAqICctJyBpZiBjdXN0b21lcktleSA9IGZhbHNlXG4gICAgLy8gICAqICcnIGlmIGN1c3RvbWVyS2V5ID0gdHJ1ZVxuICAgIC8vICAgKiBpZiBjdXN0b21lcktleSBpcyBhbHNvIG5vdCBnaXZlblxuICAgIC8vICAgICAqIHVuZGVmaW5lZCBpZiB3ZSBhbHJlYWR5IGhhZCBhIHZhbHVlIGluIHBsYWNlIChyZXVzaW5nIHdoYXQgd2UgaGFkKVxuICAgIC8vICAgICAqICctJyBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3JlIGRlcGxveWluZyB0aGlzIHN0YWNrIChvciB1cGdyYWRpbmcgZnJvbSBvbGQgdG8gbmV3IGJvb3RzdHJhcClcbiAgICBjb25zdCBjdXJyZW50S21zS2V5SWQgPSBjdXJyZW50LnBhcmFtZXRlcnMuRmlsZUFzc2V0c0J1Y2tldEttc0tleUlkO1xuICAgIGNvbnN0IGttc0tleUlkID0gcGFyYW1zLmttc0tleUlkID8/XG4gICAgICAocGFyYW1zLmNyZWF0ZUN1c3RvbWVyTWFzdGVyS2V5ID09PSB0cnVlID8gQ1JFQVRFX05FV19LRVkgOlxuICAgICAgICBwYXJhbXMuY3JlYXRlQ3VzdG9tZXJNYXN0ZXJLZXkgPT09IGZhbHNlIHx8IGN1cnJlbnRLbXNLZXlJZCA9PT0gdW5kZWZpbmVkID8gVVNFX0FXU19NQU5BR0VEX0tFWSA6XG4gICAgICAgICAgdW5kZWZpbmVkKTtcblxuICAgIHJldHVybiBjdXJyZW50LnVwZGF0ZShcbiAgICAgIGJvb3RzdHJhcFRlbXBsYXRlLFxuICAgICAge1xuICAgICAgICBGaWxlQXNzZXRzQnVja2V0TmFtZTogcGFyYW1zLmJ1Y2tldE5hbWUsXG4gICAgICAgIEZpbGVBc3NldHNCdWNrZXRLbXNLZXlJZDoga21zS2V5SWQsXG4gICAgICAgIC8vIEVtcHR5IGFycmF5IGJlY29tZXMgZW1wdHkgc3RyaW5nXG4gICAgICAgIFRydXN0ZWRBY2NvdW50czogdHJ1c3RlZEFjY291bnRzLmpvaW4oJywnKSxcbiAgICAgICAgVHJ1c3RlZEFjY291bnRzRm9yTG9va3VwOiB0cnVzdGVkQWNjb3VudHNGb3JMb29rdXAuam9pbignLCcpLFxuICAgICAgICBDbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzOiBjbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzLmpvaW4oJywnKSxcbiAgICAgICAgUXVhbGlmaWVyOiBwYXJhbXMucXVhbGlmaWVyLFxuICAgICAgICBQdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb246IHBhcmFtcy5wdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb24gfHwgcGFyYW1zLnB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbiA9PT0gdW5kZWZpbmVkID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgIH0sIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgdGVybWluYXRpb25Qcm90ZWN0aW9uOiBvcHRpb25zLnRlcm1pbmF0aW9uUHJvdGVjdGlvbiA/PyBjdXJyZW50LnRlcm1pbmF0aW9uUHJvdGVjdGlvbixcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjdXN0b21Cb290c3RyYXAoXG4gICAgZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LFxuICAgIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcixcbiAgICBvcHRpb25zOiBCb290c3RyYXBFbnZpcm9ubWVudE9wdGlvbnMgPSB7fSk6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQ+IHtcblxuICAgIC8vIExvb2sgYXQgdGhlIHRlbXBsYXRlLCBkZWNpZGUgd2hldGhlciBpdCdzIG1vc3QgbGlrZWx5IGEgbGVnYWN5IG9yIG1vZGVybiBib290c3RyYXBcbiAgICAvLyB0ZW1wbGF0ZSwgYW5kIHVzZSB0aGUgcmlnaHQgYm9vdHN0cmFwcGVyIGZvciB0aGF0LlxuICAgIGNvbnN0IHZlcnNpb24gPSBib290c3RyYXBWZXJzaW9uRnJvbVRlbXBsYXRlKGF3YWl0IHRoaXMubG9hZFRlbXBsYXRlKCkpO1xuICAgIGlmICh2ZXJzaW9uID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5sZWdhY3lCb290c3RyYXAoZW52aXJvbm1lbnQsIHNka1Byb3ZpZGVyLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMubW9kZXJuQm9vdHN0cmFwKGVudmlyb25tZW50LCBzZGtQcm92aWRlciwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkVGVtcGxhdGUocGFyYW1zOiBCb290c3RyYXBwaW5nUGFyYW1ldGVycyA9IHt9KTogUHJvbWlzZTxhbnk+IHtcbiAgICBzd2l0Y2ggKHRoaXMuc291cmNlLnNvdXJjZSkge1xuICAgICAgY2FzZSAnY3VzdG9tJzpcbiAgICAgICAgcmV0dXJuIGxvYWRTdHJ1Y3R1cmVkRmlsZSh0aGlzLnNvdXJjZS50ZW1wbGF0ZUZpbGUpO1xuICAgICAgY2FzZSAnZGVmYXVsdCc6XG4gICAgICAgIHJldHVybiBsb2FkU3RydWN0dXJlZEZpbGUocGF0aC5qb2luKHJvb3REaXIoKSwgJ2xpYicsICdhcGknLCAnYm9vdHN0cmFwJywgJ2Jvb3RzdHJhcC10ZW1wbGF0ZS55YW1sJykpO1xuICAgICAgY2FzZSAnbGVnYWN5JzpcbiAgICAgICAgcmV0dXJuIGxlZ2FjeUJvb3RzdHJhcFRlbXBsYXRlKHBhcmFtcyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogTWFnaWMgcGFyYW1ldGVyIHZhbHVlIHRoYXQgd2lsbCBjYXVzZSB0aGUgYm9vdHN0cmFwLXRlbXBsYXRlLnltbCB0byBOT1QgY3JlYXRlIGEgQ01LIGJ1dCB1c2UgdGhlIGRlZmF1bHQga2V5b1xuICovXG5jb25zdCBVU0VfQVdTX01BTkFHRURfS0VZID0gJ0FXU19NQU5BR0VEX0tFWSc7XG5cbi8qKlxuICogTWFnaWMgcGFyYW1ldGVyIHZhbHVlIHRoYXQgd2lsbCBjYXVzZSB0aGUgYm9vdHN0cmFwLXRlbXBsYXRlLnltbCB0byBjcmVhdGUgYSBDTUtcbiAqL1xuY29uc3QgQ1JFQVRFX05FV19LRVkgPSAnJztcblxuLyoqXG4gKiBTcGxpdCBhbiBhcnJheS1saWtlIENsb3VkRm9ybWF0aW9uIHBhcmFtZXRlciBvbiAsXG4gKlxuICogQW4gZW1wdHkgc3RyaW5nIGlzIHRoZSBlbXB0eSBhcnJheSAoaW5zdGVhZCBvZiBgWycnXWApLlxuICovXG5mdW5jdGlvbiBzcGxpdENmbkFycmF5KHhzOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gIGlmICh4cyA9PT0gJycgfHwgeHMgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gW107IH1cbiAgcmV0dXJuIHhzLnNwbGl0KCcsJyk7XG59XG4iXX0=