@cdklabs/cdk-appmod-catalog-blueprints 1.0.0 → 1.1.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 (41) hide show
  1. package/.jsii +846 -273
  2. package/lib/document-processing/adapter/adapter.d.ts +47 -0
  3. package/lib/document-processing/adapter/adapter.js +5 -0
  4. package/lib/document-processing/adapter/index.d.ts +2 -0
  5. package/lib/document-processing/adapter/index.js +19 -0
  6. package/lib/document-processing/adapter/queued-s3-adapter.d.ts +66 -0
  7. package/lib/document-processing/adapter/queued-s3-adapter.js +230 -0
  8. package/lib/document-processing/agentic-document-processing.d.ts +22 -0
  9. package/lib/document-processing/agentic-document-processing.js +12 -14
  10. package/lib/document-processing/base-document-processing.d.ts +8 -44
  11. package/lib/document-processing/base-document-processing.js +23 -189
  12. package/lib/document-processing/bedrock-document-processing.js +4 -13
  13. package/lib/document-processing/default-document-processing-config.d.ts +3 -0
  14. package/lib/document-processing/default-document-processing-config.js +14 -0
  15. package/lib/document-processing/index.d.ts +2 -0
  16. package/lib/document-processing/index.js +3 -1
  17. package/lib/document-processing/resources/default-bedrock-invoke/index.py +36 -24
  18. package/lib/document-processing/resources/default-sqs-consumer/index.py +10 -5
  19. package/lib/document-processing/resources/default-strands-agent/index.py +8 -5
  20. package/lib/document-processing/tests/agentic-document-processing-nag.test.js +6 -2
  21. package/lib/document-processing/tests/agentic-document-processing.test.js +5 -19
  22. package/lib/document-processing/tests/bedrock-document-processing-nag.test.js +6 -2
  23. package/lib/framework/custom-resource/default-runtimes.d.ts +1 -0
  24. package/lib/framework/custom-resource/default-runtimes.js +3 -2
  25. package/lib/framework/foundation/access-log.js +1 -1
  26. package/lib/framework/foundation/eventbridge-broker.js +1 -1
  27. package/lib/framework/foundation/network.js +1 -1
  28. package/lib/tsconfig.tsbuildinfo +1 -1
  29. package/lib/utilities/data-loader.js +4 -3
  30. package/lib/utilities/lambda-iam-utils.d.ts +8 -0
  31. package/lib/utilities/lambda-iam-utils.js +7 -5
  32. package/lib/utilities/observability/cloudfront-distribution-observability-property-injector.js +1 -1
  33. package/lib/utilities/observability/default-observability-config.d.ts +9 -0
  34. package/lib/utilities/observability/default-observability-config.js +20 -0
  35. package/lib/utilities/observability/index.d.ts +1 -0
  36. package/lib/utilities/observability/index.js +2 -1
  37. package/lib/utilities/observability/lambda-observability-property-injector.js +5 -4
  38. package/lib/utilities/observability/powertools-config.js +1 -1
  39. package/lib/utilities/observability/state-machine-observability-property-injector.js +1 -1
  40. package/lib/webapp/frontend-construct.js +1 -1
  41. package/package.json +14 -18
@@ -17,6 +17,7 @@ const aws_stepfunctions_1 = require("aws-cdk-lib/aws-stepfunctions");
17
17
  const aws_stepfunctions_tasks_1 = require("aws-cdk-lib/aws-stepfunctions-tasks");
18
18
  const custom_resources_1 = require("aws-cdk-lib/custom-resources");
19
19
  const constructs_1 = require("constructs");
20
+ const framework_1 = require("../framework");
20
21
  /**
21
22
  * Supported database engines
22
23
  */
@@ -191,7 +192,7 @@ class DataLoader extends constructs_1.Construct {
191
192
  ].join(' && '),
192
193
  ],
193
194
  // Use the standard Python image to avoid pre-installed packages
194
- image: aws_cdk_lib_1.DockerImage.fromRegistry('public.ecr.aws/docker/library/python:3.13.5-bullseye'),
195
+ image: aws_cdk_lib_1.DockerImage.fromRegistry(framework_1.DefaultRuntimes.PYTHON_BUNDLING_IMAGE),
195
196
  },
196
197
  });
197
198
  // Grant permissions
@@ -443,5 +444,5 @@ def handler(event, context):
443
444
  }
444
445
  exports.DataLoader = DataLoader;
445
446
  _a = JSII_RTTI_SYMBOL_1;
446
- DataLoader[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DataLoader", version: "1.0.0" };
447
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi91c2UtY2FzZXMvdXRpbGl0aWVzL2RhdGEtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUV0Qyw2QkFBNkI7QUFDN0IsOEVBQWtFO0FBQ2xFLDZDQUFtRjtBQUNuRixpREFBZ0Y7QUFDaEYsaURBQXFIO0FBQ3JILHVEQUFpRztBQUVqRywrQ0FBaUY7QUFDakYscUVBQXlFO0FBRXpFLHFFQUE2RjtBQUM3RixpRkFBbUU7QUFDbkUsbUVBQXdEO0FBQ3hELDJDQUF1QztBQUV2Qzs7R0FFRztBQUNILElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4QixpQ0FBZSxDQUFBO0lBQ2YsMkNBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQUhXLGNBQWMsOEJBQWQsY0FBYyxRQUd6QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxRQU9YO0FBUEQsV0FBWSxRQUFRO0lBQ2xCLHdCQUF3QjtJQUN4Qix1QkFBVyxDQUFBO0lBQ1gsNkNBQTZDO0lBQzdDLG1DQUF1QixDQUFBO0lBQ3ZCLGdEQUFnRDtJQUNoRCw2QkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBUFcsUUFBUSx3QkFBUixRQUFRLFFBT25CO0FBb0REOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQWEsVUFBVyxTQUFRLHNCQUFTO0lBZ0J2QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzlELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUVuQyxpQkFBaUI7UUFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQixrQ0FBa0M7UUFDbEMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsSUFB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QXFCO1lBQ3hELENBQUM7aUJBQU0sQ0FBQztnQkFDTixtREFBbUQ7Z0JBQ25ELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5QyxPQUFPLGNBQWMsUUFBUSxFQUFFLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUEvYkgsZ0NBZ2NDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgUHl0aG9uRnVuY3Rpb24gfSBmcm9tICdAYXdzLWNkay9hd3MtbGFtYmRhLXB5dGhvbi1hbHBoYSc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSwgQ3VzdG9tUmVzb3VyY2UsIERvY2tlckltYWdlIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSVZwYywgU2VjdXJpdHlHcm91cCwgUG9ydCwgSVNlY3VyaXR5R3JvdXAgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgUm9sZSwgU2VydmljZVByaW5jaXBhbCwgTWFuYWdlZFBvbGljeSwgUG9saWN5RG9jdW1lbnQsIEVmZmVjdCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQXJjaGl0ZWN0dXJlLCBDb2RlLCBGdW5jdGlvbiBhcyBMYW1iZGFGdW5jdGlvbiwgUnVudGltZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgSURhdGFiYXNlQ2x1c3RlciwgSURhdGFiYXNlSW5zdGFuY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtcmRzJztcbmltcG9ydCB7IEJ1Y2tldCwgQnVja2V0RW5jcnlwdGlvbiwgQmxvY2tQdWJsaWNBY2Nlc3MgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQnVja2V0RGVwbG95bWVudCwgU291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWRlcGxveW1lbnQnO1xuaW1wb3J0IHsgSVNlY3JldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlcic7XG5pbXBvcnQgeyBTdGF0ZU1hY2hpbmUsIERlZmluaXRpb25Cb2R5LCBNYXAsIFRhc2tJbnB1dCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCB7IExhbWJkYUludm9rZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBTdXBwb3J0ZWQgZGF0YWJhc2UgZW5naW5lc1xuICovXG5leHBvcnQgZW51bSBEYXRhYmFzZUVuZ2luZSB7XG4gIE1ZU1FMID0gJ215c3FsJyxcbiAgUE9TVEdSRVNRTCA9ICdwb3N0Z3Jlc3FsJyxcbn1cblxuLyoqXG4gKiBTdXBwb3J0ZWQgZmlsZSB0eXBlcyBmb3IgZGF0YSBsb2FkaW5nXG4gKi9cbmV4cG9ydCBlbnVtIEZpbGVUeXBlIHtcbiAgLyoqIFN0YW5kYXJkIFNRTCBmaWxlICovXG4gIFNRTCA9ICdzcWwnLFxuICAvKiogTXlTUUwgZHVtcCBmaWxlIGdlbmVyYXRlZCBieSBteXNxbGR1bXAgKi9cbiAgTVlTUUxEVU1QID0gJ215c3FsZHVtcCcsXG4gIC8qKiBQb3N0Z3JlU1FMIGR1bXAgZmlsZSBnZW5lcmF0ZWQgYnkgcGdfZHVtcCAqL1xuICBQR0RVTVAgPSAncGdkdW1wJyxcbn1cblxuLyoqXG4gKiBEYXRhYmFzZSBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZUNvbmZpZyB7XG4gIC8qKiBEYXRhYmFzZSBlbmdpbmUgdHlwZSAqL1xuICByZWFkb25seSBlbmdpbmU6IERhdGFiYXNlRW5naW5lO1xuICAvKiogRGF0YWJhc2UgY2x1c3RlciAoZm9yIEF1cm9yYSkgKi9cbiAgcmVhZG9ubHkgY2x1c3Rlcj86IElEYXRhYmFzZUNsdXN0ZXI7XG4gIC8qKiBEYXRhYmFzZSBpbnN0YW5jZSAoZm9yIFJEUykgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2U/OiBJRGF0YWJhc2VJbnN0YW5jZTtcbiAgLyoqIERhdGFiYXNlIGNyZWRlbnRpYWxzIHNlY3JldCAqL1xuICByZWFkb25seSBzZWNyZXQ6IElTZWNyZXQ7XG4gIC8qKiBEYXRhYmFzZSBuYW1lIHRvIGNvbm5lY3QgdG8gKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VOYW1lOiBzdHJpbmc7XG4gIC8qKiBWUEMgd2hlcmUgdGhlIGRhdGFiYXNlIGlzIGxvY2F0ZWQgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjO1xuICAvKiogU2VjdXJpdHkgZ3JvdXAgZm9yIGRhdGFiYXNlIGFjY2VzcyAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwOiBJU2VjdXJpdHlHcm91cDtcbn1cblxuLyoqXG4gKiBGaWxlIGlucHV0IGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlSW5wdXQge1xuICAvKiogUGF0aCB0byB0aGUgZmlsZSAobG9jYWwgcGF0aCBvciBTMyBVUkkpICovXG4gIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG4gIC8qKiBUeXBlIG9mIGZpbGUgKi9cbiAgcmVhZG9ubHkgZmlsZVR5cGU6IEZpbGVUeXBlO1xuICAvKiogRXhlY3V0aW9uIG9yZGVyIChsb3dlciBudW1iZXJzIGV4ZWN1dGUgZmlyc3QpICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvbk9yZGVyPzogbnVtYmVyO1xuICAvKiogV2hldGhlciB0byBjb250aW51ZSBvbiBlcnJvciAqL1xuICByZWFkb25seSBjb250aW51ZU9uRXJyb3I/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSBEYXRhTG9hZGVyIGNvbnN0cnVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFMb2FkZXJQcm9wcyB7XG4gIC8qKiBEYXRhYmFzZSBjb25maWd1cmF0aW9uICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlQ29uZmlnOiBEYXRhYmFzZUNvbmZpZztcbiAgLyoqIExpc3Qgb2YgZmlsZXMgdG8gbG9hZCAqL1xuICByZWFkb25seSBmaWxlSW5wdXRzOiBGaWxlSW5wdXRbXTtcbiAgLyoqIE9wdGlvbmFsIHJlbW92YWwgcG9saWN5IGZvciByZXNvdXJjZXMgKGRlZmF1bHRzIHRvIERFU1RST1kpICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5O1xuICAvKiogT3B0aW9uYWwgdGltZW91dCBmb3IgTGFtYmRhIGZ1bmN0aW9uIChkZWZhdWx0cyB0byAxNSBtaW51dGVzKSAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG4gIC8qKiBPcHRpb25hbCBtZW1vcnkgc2l6ZSBmb3IgTGFtYmRhIGZ1bmN0aW9uIChkZWZhdWx0cyB0byAxMDI0IE1CKSAqL1xuICByZWFkb25seSBtZW1vcnlTaXplPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIERhdGFMb2FkZXIgY29uc3RydWN0IGZvciBsb2FkaW5nIGRhdGEgaW50byBBdXJvcmEvUkRTIGRhdGFiYXNlc1xuICpcbiAqIFRoaXMgY29uc3RydWN0IHByb3ZpZGVzIGEgc2ltcGxpZmllZCBzb2x1dGlvbiBmb3IgbG9hZGluZyBkYXRhIGZyb20gdmFyaW91cyBmaWxlIGZvcm1hdHNcbiAqIChTUUwsIG15c3FsZHVtcCwgcGdfZHVtcCkgaW50byBNeVNRTCBvciBQb3N0Z3JlU1FMIGRhdGFiYXNlcy4gSXQgdXNlcyBTMyBmb3IgZmlsZSBzdG9yYWdlLFxuICogU3RlcCBGdW5jdGlvbnMgZm9yIG9yY2hlc3RyYXRpb24sIGFuZCBMYW1iZGEgZm9yIHByb2Nlc3NpbmcuXG4gKlxuICogQXJjaGl0ZWN0dXJlOlxuICogMS4gRmlsZXMgYXJlIHVwbG9hZGVkIHRvIFMzIGJ1Y2tldFxuICogMi4gU3RlcCBGdW5jdGlvbiBpcyB0cmlnZ2VyZWQgd2l0aCBsaXN0IG9mIFMzIGtleXNcbiAqIDMuIFN0ZXAgRnVuY3Rpb24gaXRlcmF0ZXMgb3ZlciBmaWxlcyBpbiBleGVjdXRpb24gb3JkZXJcbiAqIDQuIExhbWJkYSBmdW5jdGlvbiBwcm9jZXNzZXMgZWFjaCBmaWxlIGFnYWluc3QgdGhlIGRhdGFiYXNlXG4gKlxuICogRXhhbXBsZSB1c2FnZTpcbiAqIENyZWF0ZSBhIERhdGFMb2FkZXIgd2l0aCBkYXRhYmFzZSBjb25maWd1cmF0aW9uIGFuZCBmaWxlIGlucHV0cy5cbiAqIFRoZSBjb25zdHJ1Y3Qgd2lsbCBoYW5kbGUgdXBsb2FkaW5nIGZpbGVzIHRvIFMzLCBjcmVhdGluZyBhIFN0ZXAgRnVuY3Rpb25cbiAqIHRvIG9yY2hlc3RyYXRlIHByb2Nlc3NpbmcsIGFuZCBleGVjdXRpbmcgdGhlIGRhdGEgbG9hZGluZyBwaXBlbGluZS5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFMb2FkZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKiogVGhlIFMzIGJ1Y2tldCB1c2VkIGZvciBzdG9yaW5nIGZpbGVzICovXG4gIHB1YmxpYyByZWFkb25seSBidWNrZXQ6IEJ1Y2tldDtcbiAgLyoqIFRoZSBTdGVwIEZ1bmN0aW9ucyBzdGF0ZSBtYWNoaW5lIGZvciBvcmNoZXN0cmF0aW9uICovXG4gIHB1YmxpYyByZWFkb25seSBzdGF0ZU1hY2hpbmU6IFN0YXRlTWFjaGluZTtcbiAgLyoqIFRoZSBMYW1iZGEgZnVuY3Rpb24gdGhhdCBwcm9jZXNzZXMgdGhlIGRhdGEgbG9hZGluZyAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvY2Vzc29yRnVuY3Rpb246IExhbWJkYUZ1bmN0aW9uO1xuICAvKiogVGhlIGJ1Y2tldCBkZXBsb3ltZW50IGZvciB1cGxvYWRpbmcgZmlsZXMgKi9cbiAgcHVibGljIGJ1Y2tldERlcGxveW1lbnQ/OiBCdWNrZXREZXBsb3ltZW50O1xuICAvKiogVGhlIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlciBmb3IgdHJpZ2dlcmluZyBzdGF0ZSBtYWNoaW5lIGV4ZWN1dGlvbiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3VzdG9tUmVzb3VyY2VQcm92aWRlcjogUHJvdmlkZXI7XG4gIC8qKiBUaGUgY3VzdG9tIHJlc291cmNlIHRoYXQgdHJpZ2dlcnMgdGhlIHN0YXRlIG1hY2hpbmUgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV4ZWN1dGlvblRyaWdnZXI6IEN1c3RvbVJlc291cmNlO1xuICAvKiogVGhlIGZpbGUgaW5wdXRzIGNvbmZpZ3VyYXRpb24gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlSW5wdXRzOiBGaWxlSW5wdXRbXTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YUxvYWRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIFN0b3JlIGZpbGUgaW5wdXRzIGZvciBsYXRlciB1c2VcbiAgICB0aGlzLmZpbGVJbnB1dHMgPSBwcm9wcy5maWxlSW5wdXRzO1xuXG4gICAgLy8gVmFsaWRhdGUgcHJvcHNcbiAgICB0aGlzLl92YWxpZGF0ZVByb3BzKHByb3BzKTtcblxuICAgIC8vIEdldCByZW1vdmFsIHBvbGljeSB3aXRoIGRlZmF1bHRcbiAgICBjb25zdCByZW1vdmFsUG9saWN5ID0gcHJvcHMucmVtb3ZhbFBvbGljeSB8fCBSZW1vdmFsUG9saWN5LkRFU1RST1k7XG5cbiAgICAvLyBDcmVhdGUgUzMgYnVja2V0IGZvciBzdG9yaW5nIGZpbGVzXG4gICAgdGhpcy5idWNrZXQgPSB0aGlzLl9jcmVhdGVCdWNrZXQocmVtb3ZhbFBvbGljeSk7XG5cbiAgICAvLyBDcmVhdGUgTGFtYmRhIGZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nXG4gICAgdGhpcy5wcm9jZXNzb3JGdW5jdGlvbiA9IHRoaXMuX2NyZWF0ZVByb2Nlc3NvckZ1bmN0aW9uKHByb3BzKTtcblxuICAgIC8vIENyZWF0ZSBTdGVwIEZ1bmN0aW9ucyBzdGF0ZSBtYWNoaW5lXG4gICAgdGhpcy5zdGF0ZU1hY2hpbmUgPSB0aGlzLl9jcmVhdGVTdGF0ZU1hY2hpbmUoKTtcblxuICAgIC8vIENyZWF0ZSBjdXN0b20gcmVzb3VyY2UgcHJvdmlkZXIgZm9yIHRyaWdnZXJpbmcgZXhlY3V0aW9uXG4gICAgdGhpcy5jdXN0b21SZXNvdXJjZVByb3ZpZGVyID0gdGhpcy5fY3JlYXRlQ3VzdG9tUmVzb3VyY2VQcm92aWRlcigpO1xuXG4gICAgLy8gVXBsb2FkIGZpbGVzIHRvIFMzXG4gICAgdGhpcy5fc2V0dXBGaWxlUHJvY2Vzc2luZyhwcm9wcyk7XG5cbiAgICAvLyBDcmVhdGUgY3VzdG9tIHJlc291cmNlIHRvIHRyaWdnZXIgZXhlY3V0aW9uIGFmdGVyIGZpbGVzIGFyZSB1cGxvYWRlZFxuICAgIHRoaXMuZXhlY3V0aW9uVHJpZ2dlciA9IHRoaXMuX2NyZWF0ZUV4ZWN1dGlvblRyaWdnZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgYWRkaXRpb25hbCBJQU0gcGVybWlzc2lvbnMgdG8gdGhlIGV4ZWN1dGlvbiB0cmlnZ2VyIExhbWJkYSBmdW5jdGlvblxuICAgKiBAcGFyYW0gc3RhdGVtZW50IFRoZSBJQU0gcG9saWN5IHN0YXRlbWVudCB0byBhZGRcbiAgICovXG4gIHB1YmxpYyBncmFudEV4ZWN1dGlvblRyaWdnZXJQZXJtaXNzaW9ucyhzdGF0ZW1lbnQ6IFBvbGljeVN0YXRlbWVudCk6IHZvaWQge1xuICAgIC8vIEdldCB0aGUgTGFtYmRhIGZ1bmN0aW9uIGZyb20gdGhlIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlclxuICAgIGNvbnN0IHRyaWdnZXJGdW5jdGlvbiA9IHRoaXMuY3VzdG9tUmVzb3VyY2VQcm92aWRlci5vbkV2ZW50SGFuZGxlcjtcbiAgICBpZiAodHJpZ2dlckZ1bmN0aW9uKSB7XG4gICAgICB0cmlnZ2VyRnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KHN0YXRlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgY29uc3RydWN0IHByb3BlcnRpZXNcbiAgICogQHBhcmFtIHByb3BzIFRoZSBEYXRhTG9hZGVyIHByb3BlcnRpZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX3ZhbGlkYXRlUHJvcHMocHJvcHM6IERhdGFMb2FkZXJQcm9wcyk6IHZvaWQge1xuICAgIGlmICghcHJvcHMuZGF0YWJhc2VDb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGF0YWJhc2VDb25maWcgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXByb3BzLmRhdGFiYXNlQ29uZmlnLmNsdXN0ZXIgJiYgIXByb3BzLmRhdGFiYXNlQ29uZmlnLmluc3RhbmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VpdGhlciBjbHVzdGVyIG9yIGluc3RhbmNlIG11c3QgYmUgcHJvdmlkZWQgaW4gZGF0YWJhc2VDb25maWcnKTtcbiAgICB9XG5cbiAgICBpZiAoIXByb3BzLmZpbGVJbnB1dHMgfHwgcHJvcHMuZmlsZUlucHV0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXQgbGVhc3Qgb25lIGZpbGUgaW5wdXQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBmaWxlIGlucHV0c1xuICAgIGZvciAoY29uc3QgZmlsZUlucHV0IG9mIHByb3BzLmZpbGVJbnB1dHMpIHtcbiAgICAgIGlmICghZmlsZUlucHV0LmZpbGVQYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZmlsZVBhdGggaXMgcmVxdWlyZWQgZm9yIGVhY2ggZmlsZSBpbnB1dCcpO1xuICAgICAgfVxuICAgICAgaWYgKCFmaWxlSW5wdXQuZmlsZVR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaWxlVHlwZSBpcyByZXF1aXJlZCBmb3IgZWFjaCBmaWxlIGlucHV0Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZW5naW5lIGNvbXBhdGliaWxpdHlcbiAgICBmb3IgKGNvbnN0IGZpbGVJbnB1dCBvZiBwcm9wcy5maWxlSW5wdXRzKSB7XG4gICAgICBpZiAocHJvcHMuZGF0YWJhc2VDb25maWcuZW5naW5lID09PSBEYXRhYmFzZUVuZ2luZS5NWVNRTCAmJlxuICAgICAgICAgIGZpbGVJbnB1dC5maWxlVHlwZSA9PT0gRmlsZVR5cGUuUEdEVU1QKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUG9zdGdyZVNRTCBkdW1wIGZpbGVzIGNhbm5vdCBiZSB1c2VkIHdpdGggTXlTUUwgZGF0YWJhc2VzJyk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuZGF0YWJhc2VDb25maWcuZW5naW5lID09PSBEYXRhYmFzZUVuZ2luZS5QT1NUR1JFU1FMICYmXG4gICAgICAgICAgZmlsZUlucHV0LmZpbGVUeXBlID09PSBGaWxlVHlwZS5NWVNRTERVTVApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNeVNRTCBkdW1wIGZpbGVzIGNhbm5vdCBiZSB1c2VkIHdpdGggUG9zdGdyZVNRTCBkYXRhYmFzZXMnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgUzMgYnVja2V0IGZvciBzdG9yaW5nIGZpbGVzXG4gICAqIEBwYXJhbSByZW1vdmFsUG9saWN5IFRoZSByZW1vdmFsIHBvbGljeSB0byBhcHBseVxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBTMyBidWNrZXRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZUJ1Y2tldChyZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5KTogQnVja2V0IHtcbiAgICBjb25zdCBidWNrZXQgPSBuZXcgQnVja2V0KHRoaXMsICdEYXRhTG9hZGVyQnVja2V0Jywge1xuICAgICAgZW5jcnlwdGlvbjogQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IEJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHJlbW92YWxQb2xpY3ksXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogcmVtb3ZhbFBvbGljeSA9PT0gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJ1Y2tldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBMYW1iZGEgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgZGF0YSBsb2FkaW5nXG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgRGF0YUxvYWRlciBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIExhbWJkYSBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfY3JlYXRlUHJvY2Vzc29yRnVuY3Rpb24ocHJvcHM6IERhdGFMb2FkZXJQcm9wcyk6IExhbWJkYUZ1bmN0aW9uIHtcbiAgICAvLyBDcmVhdGUgYSBkZWRpY2F0ZWQgc2VjdXJpdHkgZ3JvdXAgZm9yIHRoZSBMYW1iZGEgZnVuY3Rpb25cbiAgICBjb25zdCBsYW1iZGFTZWN1cml0eUdyb3VwID0gbmV3IFNlY3VyaXR5R3JvdXAodGhpcywgJ0RhdGFMb2FkZXJQcm9jZXNzb3JTZWN1cml0eUdyb3VwJywge1xuICAgICAgdnBjOiBwcm9wcy5kYXRhYmFzZUNvbmZpZy52cGMsXG4gICAgICBkZXNjcmlwdGlvbjogJ1NlY3VyaXR5IGdyb3VwIGZvciBEYXRhTG9hZGVyIHByb2Nlc3NvciBMYW1iZGEgZnVuY3Rpb24nLFxuICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSwgLy8gTGFtYmRhIG5lZWRzIG91dGJvdW5kIGFjY2VzcyBmb3IgQVdTIHNlcnZpY2VzIGFuZCBpbnRlcm5ldFxuICAgIH0pO1xuXG4gICAgLy8gQWxsb3cgTGFtYmRhIHRvIGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlXG4gICAgLy8gQWRkIGluZ3Jlc3MgcnVsZSB0byBkYXRhYmFzZSBzZWN1cml0eSBncm91cCB0byBhbGxvdyBjb25uZWN0aW9ucyBmcm9tIExhbWJkYVxuICAgIHByb3BzLmRhdGFiYXNlQ29uZmlnLnNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoXG4gICAgICBsYW1iZGFTZWN1cml0eUdyb3VwLFxuICAgICAgUG9ydC50Y3AocHJvcHMuZGF0YWJhc2VDb25maWcuZW5naW5lID09PSBEYXRhYmFzZUVuZ2luZS5NWVNRTCA/IDMzMDYgOiA1NDMyKSxcbiAgICAgIGBBbGxvdyBEYXRhTG9hZGVyIExhbWJkYSB0byBjb25uZWN0IHRvICR7cHJvcHMuZGF0YWJhc2VDb25maWcuZW5naW5lfSBkYXRhYmFzZWAsXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBMYW1iZGEgZnVuY3Rpb24gd2l0aCBhdXRvbWF0aWMgZGVwZW5kZW5jeSBidW5kbGluZ1xuICAgIGNvbnN0IGxhbWJkYUZ1bmN0aW9uID0gbmV3IFB5dGhvbkZ1bmN0aW9uKHRoaXMsICdEYXRhTG9hZGVyUHJvY2Vzc29yJywge1xuICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdkYXRhLWxvYWRlci1sYW1iZGEnKSxcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuUFlUSE9OXzNfMTMsXG4gICAgICBoYW5kbGVyOiAnaGFuZGxlcicsXG4gICAgICBpbmRleDogJ2luZGV4LnB5JyxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLnRpbWVvdXQgfHwgRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICBtZW1vcnlTaXplOiBwcm9wcy5tZW1vcnlTaXplIHx8IDEwMjQsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICB2cGM6IHByb3BzLmRhdGFiYXNlQ29uZmlnLnZwYyxcbiAgICAgIHNlY3VyaXR5R3JvdXBzOiBbbGFtYmRhU2VjdXJpdHlHcm91cF0sIC8vIFVzZSB0aGUgZGVkaWNhdGVkIExhbWJkYSBzZWN1cml0eSBncm91cFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgREFUQUJBU0VfRU5HSU5FOiBwcm9wcy5kYXRhYmFzZUNvbmZpZy5lbmdpbmUsXG4gICAgICAgIERBVEFCQVNFX1NFQ1JFVF9BUk46IHByb3BzLmRhdGFiYXNlQ29uZmlnLnNlY3JldC5zZWNyZXRBcm4sXG4gICAgICAgIERBVEFCQVNFX05BTUU6IHByb3BzLmRhdGFiYXNlQ29uZmlnLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgUzNfQlVDS0VUOiB0aGlzLmJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgfSxcbiAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgIC8vIFVzZSBjdXN0b20gYnVuZGxpbmcgY29tbWFuZHMgdG8gYXZvaWQgUG9ldHJ5IGNvbmZsaWN0c1xuICAgICAgICBjb21tYW5kOiBbXG4gICAgICAgICAgJ2Jhc2gnLCAnLWMnLCBbXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBjbGVhbiB2aXJ0dWFsIGVudmlyb25tZW50XG4gICAgICAgICAgICAncHl0aG9uIC1tIHZlbnYgL3RtcC92ZW52JyxcbiAgICAgICAgICAgIC8vIEFjdGl2YXRlIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50XG4gICAgICAgICAgICAnc291cmNlIC90bXAvdmVudi9iaW4vYWN0aXZhdGUnLFxuICAgICAgICAgICAgLy8gSW5zdGFsbCBkZXBlbmRlbmNpZXMgaW4gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnRcbiAgICAgICAgICAgICdwaXAgaW5zdGFsbCAtLXVwZ3JhZGUgcGlwJyxcbiAgICAgICAgICAgICdwaXAgaW5zdGFsbCAtciByZXF1aXJlbWVudHMudHh0IC10IC9hc3NldC1vdXRwdXQnLFxuICAgICAgICAgICAgLy8gQ29weSBzb3VyY2UgZmlsZXNcbiAgICAgICAgICAgICdjcCAtciAuIC9hc3NldC1vdXRwdXQnLFxuICAgICAgICAgICAgLy8gQ2xlYW4gdXAgX19weWNhY2hlX18gYW5kIG90aGVyIHVubmVjZXNzYXJ5IGZpbGVzXG4gICAgICAgICAgICAnZmluZCAvYXNzZXQtb3V0cHV0IC10eXBlIGQgLW5hbWUgX19weWNhY2hlX18gLWV4ZWMgcm0gLXJmIHt9ICsgfHwgdHJ1ZScsXG4gICAgICAgICAgICAnZmluZCAvYXNzZXQtb3V0cHV0IC1uYW1lIFwiKi5weWNcIiAtZGVsZXRlIHx8IHRydWUnLFxuICAgICAgICAgIF0uam9pbignICYmICcpLFxuICAgICAgICBdLFxuICAgICAgICAvLyBVc2UgdGhlIHN0YW5kYXJkIFB5dGhvbiBpbWFnZSB0byBhdm9pZCBwcmUtaW5zdGFsbGVkIHBhY2thZ2VzXG4gICAgICAgIGltYWdlOiBEb2NrZXJJbWFnZS5mcm9tUmVnaXN0cnkoJ3B1YmxpYy5lY3IuYXdzL2RvY2tlci9saWJyYXJ5L3B5dGhvbjozLjEzLjUtYnVsbHNleWUnKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9uc1xuICAgIHRoaXMuX2dyYW50UGVybWlzc2lvbnMobGFtYmRhRnVuY3Rpb24sIHByb3BzKTtcblxuICAgIHJldHVybiBsYW1iZGFGdW5jdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBTdGVwIEZ1bmN0aW9ucyBzdGF0ZSBtYWNoaW5lXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIHN0YXRlIG1hY2hpbmVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZVN0YXRlTWFjaGluZSgpOiBTdGF0ZU1hY2hpbmUge1xuICAgIC8vIENyZWF0ZSBhIE1hcCBzdGF0ZSB0byBpdGVyYXRlIG92ZXIgZmlsZSBrZXlzXG4gICAgY29uc3QgcHJvY2Vzc0ZpbGVUYXNrID0gbmV3IExhbWJkYUludm9rZSh0aGlzLCAnUHJvY2Vzc0ZpbGVUYXNrJywge1xuICAgICAgbGFtYmRhRnVuY3Rpb246IHRoaXMucHJvY2Vzc29yRnVuY3Rpb24sXG4gICAgICBwYXlsb2FkOiBUYXNrSW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgICdzM0tleS4kJzogJyQnLFxuICAgICAgICAnYnVja2V0TmFtZSc6IHRoaXMuYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSB0aGUgc3RhdGUgbWFjaGluZSBkZWZpbml0aW9uXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IG5ldyBNYXAodGhpcywgJ1Byb2Nlc3NGaWxlc01hcCcsIHtcbiAgICAgIGl0ZW1zUGF0aDogJyQuZmlsZUtleXMnLFxuICAgICAgbWF4Q29uY3VycmVuY3k6IDEsIC8vIFByb2Nlc3MgZmlsZXMgc2VxdWVudGlhbGx5IHRvIG1haW50YWluIG9yZGVyXG4gICAgfSkuaXRlbVByb2Nlc3Nvcihwcm9jZXNzRmlsZVRhc2spO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBzdGF0ZSBtYWNoaW5lXG4gICAgY29uc3Qgc3RhdGVNYWNoaW5lID0gbmV3IFN0YXRlTWFjaGluZSh0aGlzLCAnRGF0YUxvYWRlclN0YXRlTWFjaGluZScsIHtcbiAgICAgIGRlZmluaXRpb25Cb2R5OiBEZWZpbml0aW9uQm9keS5mcm9tQ2hhaW5hYmxlKGRlZmluaXRpb24pLFxuICAgICAgdGltZW91dDogRHVyYXRpb24uaG91cnMoMiksIC8vIEFsbG93IHVwIHRvIDIgaG91cnMgZm9yIHRoZSBlbnRpcmUgcHJvY2Vzc1xuICAgIH0pO1xuXG4gICAgLy8gR3JhbnQgdGhlIHN0YXRlIG1hY2hpbmUgcGVybWlzc2lvbiB0byBpbnZva2UgdGhlIExhbWJkYSBmdW5jdGlvblxuICAgIHRoaXMucHJvY2Vzc29yRnVuY3Rpb24uZ3JhbnRJbnZva2Uoc3RhdGVNYWNoaW5lKTtcblxuICAgIHJldHVybiBzdGF0ZU1hY2hpbmU7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyB0byB0aGUgTGFtYmRhIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSBsYW1iZGFGdW5jdGlvbiBUaGUgTGFtYmRhIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgRGF0YUxvYWRlciBwcm9wZXJ0aWVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9ncmFudFBlcm1pc3Npb25zKGxhbWJkYUZ1bmN0aW9uOiBMYW1iZGFGdW5jdGlvbiwgcHJvcHM6IERhdGFMb2FkZXJQcm9wcyk6IHZvaWQge1xuICAgIC8vIEdyYW50IFMzIHBlcm1pc3Npb25zXG4gICAgdGhpcy5idWNrZXQuZ3JhbnRSZWFkKGxhbWJkYUZ1bmN0aW9uKTtcblxuICAgIC8vIEdyYW50IFNlY3JldHMgTWFuYWdlciBwZXJtaXNzaW9uc1xuICAgIHByb3BzLmRhdGFiYXNlQ29uZmlnLnNlY3JldC5ncmFudFJlYWQobGFtYmRhRnVuY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgZmlsZSBwcm9jZXNzaW5nIGJ5IHVwbG9hZGluZyBmaWxlcyB0byBTM1xuICAgKiBAcGFyYW0gcHJvcHMgVGhlIERhdGFMb2FkZXIgcHJvcGVydGllc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfc2V0dXBGaWxlUHJvY2Vzc2luZyhwcm9wczogRGF0YUxvYWRlclByb3BzKTogdm9pZCB7XG4gICAgLy8gU2VwYXJhdGUgbG9jYWwgZmlsZXMgZnJvbSBTMyBVUklzXG4gICAgY29uc3QgbG9jYWxGaWxlcyA9IHByb3BzLmZpbGVJbnB1dHMuZmlsdGVyKGYgPT4gIWYuZmlsZVBhdGguc3RhcnRzV2l0aCgnczM6Ly8nKSk7XG5cbiAgICAvLyBVcGxvYWQgbG9jYWwgZmlsZXMgdG8gUzMgaWYgYW55XG4gICAgaWYgKGxvY2FsRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gUHJvY2VzcyBlYWNoIGZpbGUgaW5kaXZpZHVhbGx5IHRvIGhhbmRsZSBib3RoIGZpbGVzIGFuZCBkaXJlY3Rvcmllc1xuICAgICAgbG9jYWxGaWxlcy5mb3JFYWNoKChmaWxlSW5wdXQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gZmlsZUlucHV0LmZpbGVQYXRoO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgICAgICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgICAgIGNvbnN0IHBhdGhNb2R1bGUgPSByZXF1aXJlKCdwYXRoJyk7XG5cbiAgICAgICAgbGV0IHJlc29sdmVkUGF0aDogc3RyaW5nO1xuICAgICAgICBpZiAocGF0aE1vZHVsZS5pc0Fic29sdXRlKGZpbGVQYXRoKSkge1xuICAgICAgICAgIHJlc29sdmVkUGF0aCA9IGZpbGVQYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFJlc29sdmUgcmVsYXRpdmUgcGF0aHMgZnJvbSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICAgICAgICAgIHJlc29sdmVkUGF0aCA9IHBhdGhNb2R1bGUucmVzb2x2ZShmaWxlUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcGF0aCBleGlzdHNcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHJlc29sdmVkUGF0aCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgbm90IGZvdW5kOiAke3Jlc29sdmVkUGF0aH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmcy5zdGF0U3luYyhyZXNvbHZlZFBhdGgpLmlzRmlsZSgpKSB7XG4gICAgICAgICAgLy8gRm9yIGluZGl2aWR1YWwgZmlsZXMsIGRlcGxveSBmcm9tIHBhcmVudCBkaXJlY3Rvcnkgd2l0aCBpbmNsdWRlIGZpbHRlclxuICAgICAgICAgIGNvbnN0IHBhcmVudERpciA9IHBhdGhNb2R1bGUuZGlybmFtZShyZXNvbHZlZFBhdGgpO1xuICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aE1vZHVsZS5iYXNlbmFtZShyZXNvbHZlZFBhdGgpO1xuXG4gICAgICAgICAgbmV3IEJ1Y2tldERlcGxveW1lbnQodGhpcywgYERhdGFMb2FkZXJGaWxlRGVwbG95bWVudCR7aW5kZXh9YCwge1xuICAgICAgICAgICAgc291cmNlczogW1NvdXJjZS5hc3NldChwYXJlbnREaXIpXSxcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiB0aGlzLmJ1Y2tldCxcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4OiAnZGF0YS1maWxlcy8nLFxuICAgICAgICAgICAgaW5jbHVkZTogW2ZpbGVOYW1lXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGb3IgZGlyZWN0b3JpZXMsIGRlcGxveSBlbnRpcmUgZGlyZWN0b3J5XG4gICAgICAgICAgbmV3IEJ1Y2tldERlcGxveW1lbnQodGhpcywgYERhdGFMb2FkZXJGaWxlRGVwbG95bWVudCR7aW5kZXh9YCwge1xuICAgICAgICAgICAgc291cmNlczogW1NvdXJjZS5hc3NldChyZXNvbHZlZFBhdGgpXSxcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiB0aGlzLmJ1Y2tldCxcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4OiAnZGF0YS1maWxlcy8nLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlciBmb3IgdHJpZ2dlcmluZyBzdGF0ZSBtYWNoaW5lIGV4ZWN1dGlvblxuICAgKiBAcmV0dXJucyBUaGUgY3VzdG9tIHJlc291cmNlIHByb3ZpZGVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9jcmVhdGVDdXN0b21SZXNvdXJjZVByb3ZpZGVyKCk6IFByb3ZpZGVyIHtcbiAgICAvLyBDcmVhdGUgSUFNIHJvbGUgZm9yIHRoZSBjdXN0b20gcmVzb3VyY2UgTGFtYmRhIGZ1bmN0aW9uIHdpdGggYWxsIG5lY2Vzc2FyeSBwb2xpY2llc1xuICAgIGNvbnN0IGN1c3RvbVJlc291cmNlUm9sZSA9IG5ldyBSb2xlKHRoaXMsICdTdGF0ZU1hY2hpbmVFeGVjdXRpb25UcmlnZ2VyUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICBkZXNjcmlwdGlvbjogJ0lBTSByb2xlIGZvciBEYXRhTG9hZGVyIGN1c3RvbSByZXNvdXJjZSBMYW1iZGEgZnVuY3Rpb24nLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgIE1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJyksXG4gICAgICBdLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgU3RhdGVNYWNoaW5lRXhlY3V0aW9uUG9saWN5OiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICdzdGF0ZXM6U3RhcnRFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICdzdGF0ZXM6RGVzY3JpYmVFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICdzdGF0ZXM6U3RvcEV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVNYWNoaW5lLnN0YXRlTWFjaGluZUFybixcbiAgICAgICAgICAgICAgICBgJHt0aGlzLnN0YXRlTWFjaGluZS5zdGF0ZU1hY2hpbmVBcm59OipgLCAvLyBGb3IgZXhlY3V0aW9uIEFSTnNcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBMYW1iZGEgZnVuY3Rpb24gZm9yIGN1c3RvbSByZXNvdXJjZSB3aXRoIHRoZSBwcmUtY29uZmlndXJlZCByb2xlXG4gICAgY29uc3QgY3VzdG9tUmVzb3VyY2VGdW5jdGlvbiA9IG5ldyBMYW1iZGFGdW5jdGlvbih0aGlzLCAnU3RhdGVNYWNoaW5lRXhlY3V0aW9uVHJpZ2dlcicsIHtcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuUFlUSE9OXzNfMTEsXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICByb2xlOiBjdXN0b21SZXNvdXJjZVJvbGUsIC8vIEF0dGFjaCB0aGUgcm9sZSBkdXJpbmcgY3JlYXRpb25cbiAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZShgXG5pbXBvcnQganNvblxuaW1wb3J0IGJvdG8zXG5pbXBvcnQgbG9nZ2luZ1xuXG5sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpXG5sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKVxuXG5zdGVwZnVuY3Rpb25zID0gYm90bzMuY2xpZW50KCdzdGVwZnVuY3Rpb25zJylcblxuZGVmIGhhbmRsZXIoZXZlbnQsIGNvbnRleHQpOlxuICAgIGxvZ2dlci5pbmZvKGZcIlJlY2VpdmVkIGV2ZW50OiB7anNvbi5kdW1wcyhldmVudCl9XCIpXG4gICAgXG4gICAgcmVxdWVzdF90eXBlID0gZXZlbnRbJ1JlcXVlc3RUeXBlJ11cbiAgICBcbiAgICBpZiByZXF1ZXN0X3R5cGUgPT0gJ0NyZWF0ZScgb3IgcmVxdWVzdF90eXBlID09ICdVcGRhdGUnOlxuICAgICAgICB0cnk6XG4gICAgICAgICAgICAjIEdldCBwYXJhbWV0ZXJzIGZyb20gZXZlbnRcbiAgICAgICAgICAgIHN0YXRlX21hY2hpbmVfYXJuID0gZXZlbnRbJ1Jlc291cmNlUHJvcGVydGllcyddWydTdGF0ZU1hY2hpbmVBcm4nXVxuICAgICAgICAgICAgZmlsZV9rZXlzID0gZXZlbnRbJ1Jlc291cmNlUHJvcGVydGllcyddWydGaWxlS2V5cyddXG4gICAgICAgICAgICBcbiAgICAgICAgICAgICMgU3RhcnQgZXhlY3V0aW9uXG4gICAgICAgICAgICByZXNwb25zZSA9IHN0ZXBmdW5jdGlvbnMuc3RhcnRfZXhlY3V0aW9uKFxuICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZUFybj1zdGF0ZV9tYWNoaW5lX2FybixcbiAgICAgICAgICAgICAgICBpbnB1dD1qc29uLmR1bXBzKHtcbiAgICAgICAgICAgICAgICAgICAgJ2ZpbGVLZXlzJzogZmlsZV9rZXlzXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZXhlY3V0aW9uX2FybiA9IHJlc3BvbnNlWydleGVjdXRpb25Bcm4nXVxuICAgICAgICAgICAgbG9nZ2VyLmluZm8oZlwiU3RhcnRlZCBleGVjdXRpb246IHtleGVjdXRpb25fYXJufVwiKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICdTdGF0dXMnOiAnU1VDQ0VTUycsXG4gICAgICAgICAgICAgICAgJ1BoeXNpY2FsUmVzb3VyY2VJZCc6IGV4ZWN1dGlvbl9hcm4sXG4gICAgICAgICAgICAgICAgJ0RhdGEnOiB7XG4gICAgICAgICAgICAgICAgICAgICdFeGVjdXRpb25Bcm4nOiBleGVjdXRpb25fYXJuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTpcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihmXCJFcnJvciBzdGFydGluZyBleGVjdXRpb246IHtzdHIoZSl9XCIpXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICdTdGF0dXMnOiAnRkFJTEVEJyxcbiAgICAgICAgICAgICAgICAnUmVhc29uJzogc3RyKGUpLFxuICAgICAgICAgICAgICAgICdQaHlzaWNhbFJlc291cmNlSWQnOiAnZmFpbGVkJ1xuICAgICAgICAgICAgfVxuICAgIFxuICAgIGVsaWYgcmVxdWVzdF90eXBlID09ICdEZWxldGUnOlxuICAgICAgICAjIEZvciBkZWxldGUsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgc3BlY2lhbFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ1N0YXR1cyc6ICdTVUNDRVNTJyxcbiAgICAgICAgICAgICdQaHlzaWNhbFJlc291cmNlSWQnOiBldmVudC5nZXQoJ1BoeXNpY2FsUmVzb3VyY2VJZCcsICdub25lJylcbiAgICAgICAgfVxuICAgIFxuICAgIHJldHVybiB7XG4gICAgICAgICdTdGF0dXMnOiAnU1VDQ0VTUycsXG4gICAgICAgICdQaHlzaWNhbFJlc291cmNlSWQnOiAnbm9uZSdcbiAgICB9XG4gICAgICBgKSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgcHJvdmlkZXIgd2l0aCB0aGUgTGFtYmRhIGZ1bmN0aW9uIHRoYXQgYWxyZWFkeSBoYXMgdGhlIGNvcnJlY3Qgcm9sZVxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsICdTdGF0ZU1hY2hpbmVFeGVjdXRpb25Qcm92aWRlcicsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiBjdXN0b21SZXNvdXJjZUZ1bmN0aW9uLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHByb3ZpZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjdXN0b20gcmVzb3VyY2UgdG8gdHJpZ2dlciBzdGF0ZSBtYWNoaW5lIGV4ZWN1dGlvblxuICAgKiBAcmV0dXJucyBUaGUgY3VzdG9tIHJlc291cmNlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9jcmVhdGVFeGVjdXRpb25UcmlnZ2VyKCk6IEN1c3RvbVJlc291cmNlIHtcbiAgICAvLyBHZXQgb3JkZXJlZCBmaWxlIGtleXNcbiAgICBjb25zdCBvcmRlcmVkRmlsZUtleXMgPSB0aGlzLl9nZXRPcmRlcmVkRmlsZUtleXMoKTtcblxuICAgIGNvbnN0IGN1c3RvbVJlc291cmNlID0gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsICdFeGVjdXRpb25UcmlnZ2VyUmVzb3VyY2UnLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHRoaXMuY3VzdG9tUmVzb3VyY2VQcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFN0YXRlTWFjaGluZUFybjogdGhpcy5zdGF0ZU1hY2hpbmUuc3RhdGVNYWNoaW5lQXJuLFxuICAgICAgICBGaWxlS2V5czogb3JkZXJlZEZpbGVLZXlzLFxuICAgICAgICAvLyBBZGQgYSB0aW1lc3RhbXAgdG8gZm9yY2UgdXBkYXRlcyB3aGVuIG5lZWRlZFxuICAgICAgICBUaW1lc3RhbXA6IERhdGUubm93KCkudG9TdHJpbmcoKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBFbnN1cmUgdGhlIGN1c3RvbSByZXNvdXJjZSBydW5zIGFmdGVyIGJ1Y2tldCBkZXBsb3ltZW50IChpZiBleGlzdHMpXG4gICAgaWYgKHRoaXMuYnVja2V0RGVwbG95bWVudCkge1xuICAgICAgY3VzdG9tUmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMuc3RhdGVNYWNoaW5lKTtcbiAgICAgIGN1c3RvbVJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmJ1Y2tldERlcGxveW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBjdXN0b21SZXNvdXJjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBvcmRlcmVkIGZpbGUga2V5cyBmb3IgZXhlY3V0aW9uXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIFMzIGtleXMgaW4gZXhlY3V0aW9uIG9yZGVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9nZXRPcmRlcmVkRmlsZUtleXMoKTogc3RyaW5nW10ge1xuICAgIC8vIFNvcnQgZmlsZXMgYnkgZXhlY3V0aW9uIG9yZGVyXG4gICAgY29uc3Qgc29ydGVkRmlsZXMgPSBbLi4udGhpcy5maWxlSW5wdXRzXS5zb3J0KFxuICAgICAgKGEsIGIpID0+IChhLmV4ZWN1dGlvbk9yZGVyIHx8IDApIC0gKGIuZXhlY3V0aW9uT3JkZXIgfHwgMCksXG4gICAgKTtcblxuICAgIC8vIENvbnZlcnQgZmlsZSBwYXRocyB0byBTMyBrZXlzXG4gICAgcmV0dXJuIHNvcnRlZEZpbGVzLm1hcChmaWxlID0+IHtcbiAgICAgIGlmIChmaWxlLmZpbGVQYXRoLnN0YXJ0c1dpdGgoJ3MzOi8vJykpIHtcbiAgICAgICAgLy8gRXh0cmFjdCBrZXkgZnJvbSBTMyBVUklcbiAgICAgICAgY29uc3QgcGFydHMgPSBmaWxlLmZpbGVQYXRoLnJlcGxhY2UoJ3MzOi8vJywgJycpLnNwbGl0KCcvJyk7XG4gICAgICAgIHJldHVybiBwYXJ0cy5zbGljZSgxKS5qb2luKCcvJyk7IC8vIFJlbW92ZSBidWNrZXQgbmFtZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTG9jYWwgZmlsZXMgYXJlIHVwbG9hZGVkIHdpdGggZGF0YS1maWxlcy8gcHJlZml4XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlLmZpbGVQYXRoKTtcbiAgICAgICAgcmV0dXJuIGBkYXRhLWZpbGVzLyR7ZmlsZU5hbWV9YDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
447
+ DataLoader[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DataLoader", version: "1.1.0" };
448
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi91c2UtY2FzZXMvdXRpbGl0aWVzL2RhdGEtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUV0Qyw2QkFBNkI7QUFDN0IsOEVBQWtFO0FBQ2xFLDZDQUFtRjtBQUNuRixpREFBZ0Y7QUFDaEYsaURBQXFIO0FBQ3JILHVEQUFpRztBQUVqRywrQ0FBaUY7QUFDakYscUVBQXlFO0FBRXpFLHFFQUE2RjtBQUM3RixpRkFBbUU7QUFDbkUsbUVBQXdEO0FBQ3hELDJDQUF1QztBQUN2Qyw0Q0FBK0M7QUFFL0M7O0dBRUc7QUFDSCxJQUFZLGNBR1g7QUFIRCxXQUFZLGNBQWM7SUFDeEIsaUNBQWUsQ0FBQTtJQUNmLDJDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFIVyxjQUFjLDhCQUFkLGNBQWMsUUFHekI7QUFFRDs7R0FFRztBQUNILElBQVksUUFPWDtBQVBELFdBQVksUUFBUTtJQUNsQix3QkFBd0I7SUFDeEIsdUJBQVcsQ0FBQTtJQUNYLDZDQUE2QztJQUM3QyxtQ0FBdUIsQ0FBQTtJQUN2QixnREFBZ0Q7SUFDaEQsNkJBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQVBXLFFBQVEsd0JBQVIsUUFBUSxRQU9uQjtBQW9ERDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFhLFVBQVcsU0FBUSxzQkFBUztJQWdCdkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLGtDQUFrQztRQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFFbkMsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0Isa0NBQWtDO1FBQ2xDLE1BQU0sYUFBYSxHQUFHLEtBQUss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LEdBQUcsQ0FBQyxDQUFDLENBQUMscUJBQXFCO1lBQ3hELENBQUM7aUJBQU0sQ0FBQztnQkFDTixtREFBbUQ7Z0JBQ25ELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5QyxPQUFPLGNBQWMsUUFBUSxFQUFFLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUEvYkgsZ0NBZ2NDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgUHl0aG9uRnVuY3Rpb24gfSBmcm9tICdAYXdzLWNkay9hd3MtbGFtYmRhLXB5dGhvbi1hbHBoYSc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSwgQ3VzdG9tUmVzb3VyY2UsIERvY2tlckltYWdlIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSVZwYywgU2VjdXJpdHlHcm91cCwgUG9ydCwgSVNlY3VyaXR5R3JvdXAgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgUm9sZSwgU2VydmljZVByaW5jaXBhbCwgTWFuYWdlZFBvbGljeSwgUG9saWN5RG9jdW1lbnQsIEVmZmVjdCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQXJjaGl0ZWN0dXJlLCBDb2RlLCBGdW5jdGlvbiBhcyBMYW1iZGFGdW5jdGlvbiwgUnVudGltZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgSURhdGFiYXNlQ2x1c3RlciwgSURhdGFiYXNlSW5zdGFuY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtcmRzJztcbmltcG9ydCB7IEJ1Y2tldCwgQnVja2V0RW5jcnlwdGlvbiwgQmxvY2tQdWJsaWNBY2Nlc3MgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQnVja2V0RGVwbG95bWVudCwgU291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWRlcGxveW1lbnQnO1xuaW1wb3J0IHsgSVNlY3JldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlcic7XG5pbXBvcnQgeyBTdGF0ZU1hY2hpbmUsIERlZmluaXRpb25Cb2R5LCBNYXAsIFRhc2tJbnB1dCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCB7IExhbWJkYUludm9rZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IERlZmF1bHRSdW50aW1lcyB9IGZyb20gJy4uL2ZyYW1ld29yayc7XG5cbi8qKlxuICogU3VwcG9ydGVkIGRhdGFiYXNlIGVuZ2luZXNcbiAqL1xuZXhwb3J0IGVudW0gRGF0YWJhc2VFbmdpbmUge1xuICBNWVNRTCA9ICdteXNxbCcsXG4gIFBPU1RHUkVTUUwgPSAncG9zdGdyZXNxbCcsXG59XG5cbi8qKlxuICogU3VwcG9ydGVkIGZpbGUgdHlwZXMgZm9yIGRhdGEgbG9hZGluZ1xuICovXG5leHBvcnQgZW51bSBGaWxlVHlwZSB7XG4gIC8qKiBTdGFuZGFyZCBTUUwgZmlsZSAqL1xuICBTUUwgPSAnc3FsJyxcbiAgLyoqIE15U1FMIGR1bXAgZmlsZSBnZW5lcmF0ZWQgYnkgbXlzcWxkdW1wICovXG4gIE1ZU1FMRFVNUCA9ICdteXNxbGR1bXAnLFxuICAvKiogUG9zdGdyZVNRTCBkdW1wIGZpbGUgZ2VuZXJhdGVkIGJ5IHBnX2R1bXAgKi9cbiAgUEdEVU1QID0gJ3BnZHVtcCcsXG59XG5cbi8qKlxuICogRGF0YWJhc2UgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VDb25maWcge1xuICAvKiogRGF0YWJhc2UgZW5naW5lIHR5cGUgKi9cbiAgcmVhZG9ubHkgZW5naW5lOiBEYXRhYmFzZUVuZ2luZTtcbiAgLyoqIERhdGFiYXNlIGNsdXN0ZXIgKGZvciBBdXJvcmEpICovXG4gIHJlYWRvbmx5IGNsdXN0ZXI/OiBJRGF0YWJhc2VDbHVzdGVyO1xuICAvKiogRGF0YWJhc2UgaW5zdGFuY2UgKGZvciBSRFMpICovXG4gIHJlYWRvbmx5IGluc3RhbmNlPzogSURhdGFiYXNlSW5zdGFuY2U7XG4gIC8qKiBEYXRhYmFzZSBjcmVkZW50aWFscyBzZWNyZXQgKi9cbiAgcmVhZG9ubHkgc2VjcmV0OiBJU2VjcmV0O1xuICAvKiogRGF0YWJhc2UgbmFtZSB0byBjb25uZWN0IHRvICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlTmFtZTogc3RyaW5nO1xuICAvKiogVlBDIHdoZXJlIHRoZSBkYXRhYmFzZSBpcyBsb2NhdGVkICovXG4gIHJlYWRvbmx5IHZwYzogSVZwYztcbiAgLyoqIFNlY3VyaXR5IGdyb3VwIGZvciBkYXRhYmFzZSBhY2Nlc3MgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cDogSVNlY3VyaXR5R3JvdXA7XG59XG5cbi8qKlxuICogRmlsZSBpbnB1dCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUlucHV0IHtcbiAgLyoqIFBhdGggdG8gdGhlIGZpbGUgKGxvY2FsIHBhdGggb3IgUzMgVVJJKSAqL1xuICByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xuICAvKiogVHlwZSBvZiBmaWxlICovXG4gIHJlYWRvbmx5IGZpbGVUeXBlOiBGaWxlVHlwZTtcbiAgLyoqIEV4ZWN1dGlvbiBvcmRlciAobG93ZXIgbnVtYmVycyBleGVjdXRlIGZpcnN0KSAqL1xuICByZWFkb25seSBleGVjdXRpb25PcmRlcj86IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgdG8gY29udGludWUgb24gZXJyb3IgKi9cbiAgcmVhZG9ubHkgY29udGludWVPbkVycm9yPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB0aGUgRGF0YUxvYWRlciBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhTG9hZGVyUHJvcHMge1xuICAvKiogRGF0YWJhc2UgY29uZmlndXJhdGlvbiAqL1xuICByZWFkb25seSBkYXRhYmFzZUNvbmZpZzogRGF0YWJhc2VDb25maWc7XG4gIC8qKiBMaXN0IG9mIGZpbGVzIHRvIGxvYWQgKi9cbiAgcmVhZG9ubHkgZmlsZUlucHV0czogRmlsZUlucHV0W107XG4gIC8qKiBPcHRpb25hbCByZW1vdmFsIHBvbGljeSBmb3IgcmVzb3VyY2VzIChkZWZhdWx0cyB0byBERVNUUk9ZKSAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcbiAgLyoqIE9wdGlvbmFsIHRpbWVvdXQgZm9yIExhbWJkYSBmdW5jdGlvbiAoZGVmYXVsdHMgdG8gMTUgbWludXRlcykgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IER1cmF0aW9uO1xuICAvKiogT3B0aW9uYWwgbWVtb3J5IHNpemUgZm9yIExhbWJkYSBmdW5jdGlvbiAoZGVmYXVsdHMgdG8gMTAyNCBNQikgKi9cbiAgcmVhZG9ubHkgbWVtb3J5U2l6ZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBEYXRhTG9hZGVyIGNvbnN0cnVjdCBmb3IgbG9hZGluZyBkYXRhIGludG8gQXVyb3JhL1JEUyBkYXRhYmFzZXNcbiAqXG4gKiBUaGlzIGNvbnN0cnVjdCBwcm92aWRlcyBhIHNpbXBsaWZpZWQgc29sdXRpb24gZm9yIGxvYWRpbmcgZGF0YSBmcm9tIHZhcmlvdXMgZmlsZSBmb3JtYXRzXG4gKiAoU1FMLCBteXNxbGR1bXAsIHBnX2R1bXApIGludG8gTXlTUUwgb3IgUG9zdGdyZVNRTCBkYXRhYmFzZXMuIEl0IHVzZXMgUzMgZm9yIGZpbGUgc3RvcmFnZSxcbiAqIFN0ZXAgRnVuY3Rpb25zIGZvciBvcmNoZXN0cmF0aW9uLCBhbmQgTGFtYmRhIGZvciBwcm9jZXNzaW5nLlxuICpcbiAqIEFyY2hpdGVjdHVyZTpcbiAqIDEuIEZpbGVzIGFyZSB1cGxvYWRlZCB0byBTMyBidWNrZXRcbiAqIDIuIFN0ZXAgRnVuY3Rpb24gaXMgdHJpZ2dlcmVkIHdpdGggbGlzdCBvZiBTMyBrZXlzXG4gKiAzLiBTdGVwIEZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgZmlsZXMgaW4gZXhlY3V0aW9uIG9yZGVyXG4gKiA0LiBMYW1iZGEgZnVuY3Rpb24gcHJvY2Vzc2VzIGVhY2ggZmlsZSBhZ2FpbnN0IHRoZSBkYXRhYmFzZVxuICpcbiAqIEV4YW1wbGUgdXNhZ2U6XG4gKiBDcmVhdGUgYSBEYXRhTG9hZGVyIHdpdGggZGF0YWJhc2UgY29uZmlndXJhdGlvbiBhbmQgZmlsZSBpbnB1dHMuXG4gKiBUaGUgY29uc3RydWN0IHdpbGwgaGFuZGxlIHVwbG9hZGluZyBmaWxlcyB0byBTMywgY3JlYXRpbmcgYSBTdGVwIEZ1bmN0aW9uXG4gKiB0byBvcmNoZXN0cmF0ZSBwcm9jZXNzaW5nLCBhbmQgZXhlY3V0aW5nIHRoZSBkYXRhIGxvYWRpbmcgcGlwZWxpbmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhTG9hZGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqIFRoZSBTMyBidWNrZXQgdXNlZCBmb3Igc3RvcmluZyBmaWxlcyAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVja2V0OiBCdWNrZXQ7XG4gIC8qKiBUaGUgU3RlcCBGdW5jdGlvbnMgc3RhdGUgbWFjaGluZSBmb3Igb3JjaGVzdHJhdGlvbiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdGVNYWNoaW5lOiBTdGF0ZU1hY2hpbmU7XG4gIC8qKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIHRoYXQgcHJvY2Vzc2VzIHRoZSBkYXRhIGxvYWRpbmcgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb2Nlc3NvckZ1bmN0aW9uOiBMYW1iZGFGdW5jdGlvbjtcbiAgLyoqIFRoZSBidWNrZXQgZGVwbG95bWVudCBmb3IgdXBsb2FkaW5nIGZpbGVzICovXG4gIHB1YmxpYyBidWNrZXREZXBsb3ltZW50PzogQnVja2V0RGVwbG95bWVudDtcbiAgLyoqIFRoZSBjdXN0b20gcmVzb3VyY2UgcHJvdmlkZXIgZm9yIHRyaWdnZXJpbmcgc3RhdGUgbWFjaGluZSBleGVjdXRpb24gKi9cbiAgcHVibGljIHJlYWRvbmx5IGN1c3RvbVJlc291cmNlUHJvdmlkZXI6IFByb3ZpZGVyO1xuICAvKiogVGhlIGN1c3RvbSByZXNvdXJjZSB0aGF0IHRyaWdnZXJzIHRoZSBzdGF0ZSBtYWNoaW5lICovXG4gIHB1YmxpYyByZWFkb25seSBleGVjdXRpb25UcmlnZ2VyOiBDdXN0b21SZXNvdXJjZTtcbiAgLyoqIFRoZSBmaWxlIGlucHV0cyBjb25maWd1cmF0aW9uICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZUlucHV0czogRmlsZUlucHV0W107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERhdGFMb2FkZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBTdG9yZSBmaWxlIGlucHV0cyBmb3IgbGF0ZXIgdXNlXG4gICAgdGhpcy5maWxlSW5wdXRzID0gcHJvcHMuZmlsZUlucHV0cztcblxuICAgIC8vIFZhbGlkYXRlIHByb3BzXG4gICAgdGhpcy5fdmFsaWRhdGVQcm9wcyhwcm9wcyk7XG5cbiAgICAvLyBHZXQgcmVtb3ZhbCBwb2xpY3kgd2l0aCBkZWZhdWx0XG4gICAgY29uc3QgcmVtb3ZhbFBvbGljeSA9IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZO1xuXG4gICAgLy8gQ3JlYXRlIFMzIGJ1Y2tldCBmb3Igc3RvcmluZyBmaWxlc1xuICAgIHRoaXMuYnVja2V0ID0gdGhpcy5fY3JlYXRlQnVja2V0KHJlbW92YWxQb2xpY3kpO1xuXG4gICAgLy8gQ3JlYXRlIExhbWJkYSBmdW5jdGlvbiBmb3IgcHJvY2Vzc2luZ1xuICAgIHRoaXMucHJvY2Vzc29yRnVuY3Rpb24gPSB0aGlzLl9jcmVhdGVQcm9jZXNzb3JGdW5jdGlvbihwcm9wcyk7XG5cbiAgICAvLyBDcmVhdGUgU3RlcCBGdW5jdGlvbnMgc3RhdGUgbWFjaGluZVxuICAgIHRoaXMuc3RhdGVNYWNoaW5lID0gdGhpcy5fY3JlYXRlU3RhdGVNYWNoaW5lKCk7XG5cbiAgICAvLyBDcmVhdGUgY3VzdG9tIHJlc291cmNlIHByb3ZpZGVyIGZvciB0cmlnZ2VyaW5nIGV4ZWN1dGlvblxuICAgIHRoaXMuY3VzdG9tUmVzb3VyY2VQcm92aWRlciA9IHRoaXMuX2NyZWF0ZUN1c3RvbVJlc291cmNlUHJvdmlkZXIoKTtcblxuICAgIC8vIFVwbG9hZCBmaWxlcyB0byBTM1xuICAgIHRoaXMuX3NldHVwRmlsZVByb2Nlc3NpbmcocHJvcHMpO1xuXG4gICAgLy8gQ3JlYXRlIGN1c3RvbSByZXNvdXJjZSB0byB0cmlnZ2VyIGV4ZWN1dGlvbiBhZnRlciBmaWxlcyBhcmUgdXBsb2FkZWRcbiAgICB0aGlzLmV4ZWN1dGlvblRyaWdnZXIgPSB0aGlzLl9jcmVhdGVFeGVjdXRpb25UcmlnZ2VyKCk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIGFkZGl0aW9uYWwgSUFNIHBlcm1pc3Npb25zIHRvIHRoZSBleGVjdXRpb24gdHJpZ2dlciBMYW1iZGEgZnVuY3Rpb25cbiAgICogQHBhcmFtIHN0YXRlbWVudCBUaGUgSUFNIHBvbGljeSBzdGF0ZW1lbnQgdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRFeGVjdXRpb25UcmlnZ2VyUGVybWlzc2lvbnMoc3RhdGVtZW50OiBQb2xpY3lTdGF0ZW1lbnQpOiB2b2lkIHtcbiAgICAvLyBHZXQgdGhlIExhbWJkYSBmdW5jdGlvbiBmcm9tIHRoZSBjdXN0b20gcmVzb3VyY2UgcHJvdmlkZXJcbiAgICBjb25zdCB0cmlnZ2VyRnVuY3Rpb24gPSB0aGlzLmN1c3RvbVJlc291cmNlUHJvdmlkZXIub25FdmVudEhhbmRsZXI7XG4gICAgaWYgKHRyaWdnZXJGdW5jdGlvbikge1xuICAgICAgdHJpZ2dlckZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGNvbnN0cnVjdCBwcm9wZXJ0aWVzXG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgRGF0YUxvYWRlciBwcm9wZXJ0aWVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF92YWxpZGF0ZVByb3BzKHByb3BzOiBEYXRhTG9hZGVyUHJvcHMpOiB2b2lkIHtcbiAgICBpZiAoIXByb3BzLmRhdGFiYXNlQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhdGFiYXNlQ29uZmlnIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9wcy5kYXRhYmFzZUNvbmZpZy5jbHVzdGVyICYmICFwcm9wcy5kYXRhYmFzZUNvbmZpZy5pbnN0YW5jZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFaXRoZXIgY2x1c3RlciBvciBpbnN0YW5jZSBtdXN0IGJlIHByb3ZpZGVkIGluIGRhdGFiYXNlQ29uZmlnJyk7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9wcy5maWxlSW5wdXRzIHx8IHByb3BzLmZpbGVJbnB1dHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0IGxlYXN0IG9uZSBmaWxlIGlucHV0IGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZmlsZSBpbnB1dHNcbiAgICBmb3IgKGNvbnN0IGZpbGVJbnB1dCBvZiBwcm9wcy5maWxlSW5wdXRzKSB7XG4gICAgICBpZiAoIWZpbGVJbnB1dC5maWxlUGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpbGVQYXRoIGlzIHJlcXVpcmVkIGZvciBlYWNoIGZpbGUgaW5wdXQnKTtcbiAgICAgIH1cbiAgICAgIGlmICghZmlsZUlucHV0LmZpbGVUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZmlsZVR5cGUgaXMgcmVxdWlyZWQgZm9yIGVhY2ggZmlsZSBpbnB1dCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVuZ2luZSBjb21wYXRpYmlsaXR5XG4gICAgZm9yIChjb25zdCBmaWxlSW5wdXQgb2YgcHJvcHMuZmlsZUlucHV0cykge1xuICAgICAgaWYgKHByb3BzLmRhdGFiYXNlQ29uZmlnLmVuZ2luZSA9PT0gRGF0YWJhc2VFbmdpbmUuTVlTUUwgJiZcbiAgICAgICAgICBmaWxlSW5wdXQuZmlsZVR5cGUgPT09IEZpbGVUeXBlLlBHRFVNUCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Bvc3RncmVTUUwgZHVtcCBmaWxlcyBjYW5ub3QgYmUgdXNlZCB3aXRoIE15U1FMIGRhdGFiYXNlcycpO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLmRhdGFiYXNlQ29uZmlnLmVuZ2luZSA9PT0gRGF0YWJhc2VFbmdpbmUuUE9TVEdSRVNRTCAmJlxuICAgICAgICAgIGZpbGVJbnB1dC5maWxlVHlwZSA9PT0gRmlsZVR5cGUuTVlTUUxEVU1QKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTXlTUUwgZHVtcCBmaWxlcyBjYW5ub3QgYmUgdXNlZCB3aXRoIFBvc3RncmVTUUwgZGF0YWJhc2VzJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIFMzIGJ1Y2tldCBmb3Igc3RvcmluZyBmaWxlc1xuICAgKiBAcGFyYW0gcmVtb3ZhbFBvbGljeSBUaGUgcmVtb3ZhbCBwb2xpY3kgdG8gYXBwbHlcbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgUzMgYnVja2V0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9jcmVhdGVCdWNrZXQocmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeSk6IEJ1Y2tldCB7XG4gICAgY29uc3QgYnVja2V0ID0gbmV3IEJ1Y2tldCh0aGlzLCAnRGF0YUxvYWRlckJ1Y2tldCcsIHtcbiAgICAgIGVuY3J5cHRpb246IEJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBCbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICByZW1vdmFsUG9saWN5OiByZW1vdmFsUG9saWN5LFxuICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHJlbW92YWxQb2xpY3kgPT09IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICB9KTtcblxuICAgIHJldHVybiBidWNrZXQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgTGFtYmRhIGZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIGRhdGEgbG9hZGluZ1xuICAgKiBAcGFyYW0gcHJvcHMgVGhlIERhdGFMb2FkZXIgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBMYW1iZGEgZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZVByb2Nlc3NvckZ1bmN0aW9uKHByb3BzOiBEYXRhTG9hZGVyUHJvcHMpOiBMYW1iZGFGdW5jdGlvbiB7XG4gICAgLy8gQ3JlYXRlIGEgZGVkaWNhdGVkIHNlY3VyaXR5IGdyb3VwIGZvciB0aGUgTGFtYmRhIGZ1bmN0aW9uXG4gICAgY29uc3QgbGFtYmRhU2VjdXJpdHlHcm91cCA9IG5ldyBTZWN1cml0eUdyb3VwKHRoaXMsICdEYXRhTG9hZGVyUHJvY2Vzc29yU2VjdXJpdHlHcm91cCcsIHtcbiAgICAgIHZwYzogcHJvcHMuZGF0YWJhc2VDb25maWcudnBjLFxuICAgICAgZGVzY3JpcHRpb246ICdTZWN1cml0eSBncm91cCBmb3IgRGF0YUxvYWRlciBwcm9jZXNzb3IgTGFtYmRhIGZ1bmN0aW9uJyxcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsIC8vIExhbWJkYSBuZWVkcyBvdXRib3VuZCBhY2Nlc3MgZm9yIEFXUyBzZXJ2aWNlcyBhbmQgaW50ZXJuZXRcbiAgICB9KTtcblxuICAgIC8vIEFsbG93IExhbWJkYSB0byBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZVxuICAgIC8vIEFkZCBpbmdyZXNzIHJ1bGUgdG8gZGF0YWJhc2Ugc2VjdXJpdHkgZ3JvdXAgdG8gYWxsb3cgY29ubmVjdGlvbnMgZnJvbSBMYW1iZGFcbiAgICBwcm9wcy5kYXRhYmFzZUNvbmZpZy5zZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgbGFtYmRhU2VjdXJpdHlHcm91cCxcbiAgICAgIFBvcnQudGNwKHByb3BzLmRhdGFiYXNlQ29uZmlnLmVuZ2luZSA9PT0gRGF0YWJhc2VFbmdpbmUuTVlTUUwgPyAzMzA2IDogNTQzMiksXG4gICAgICBgQWxsb3cgRGF0YUxvYWRlciBMYW1iZGEgdG8gY29ubmVjdCB0byAke3Byb3BzLmRhdGFiYXNlQ29uZmlnLmVuZ2luZX0gZGF0YWJhc2VgLFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgTGFtYmRhIGZ1bmN0aW9uIHdpdGggYXV0b21hdGljIGRlcGVuZGVuY3kgYnVuZGxpbmdcbiAgICBjb25zdCBsYW1iZGFGdW5jdGlvbiA9IG5ldyBQeXRob25GdW5jdGlvbih0aGlzLCAnRGF0YUxvYWRlclByb2Nlc3NvcicsIHtcbiAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnZGF0YS1sb2FkZXItbGFtYmRhJyksXG4gICAgICBydW50aW1lOiBSdW50aW1lLlBZVEhPTl8zXzEzLFxuICAgICAgaGFuZGxlcjogJ2hhbmRsZXInLFxuICAgICAgaW5kZXg6ICdpbmRleC5weScsXG4gICAgICB0aW1lb3V0OiBwcm9wcy50aW1lb3V0IHx8IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgbWVtb3J5U2l6ZTogcHJvcHMubWVtb3J5U2l6ZSB8fCAxMDI0LFxuICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgdnBjOiBwcm9wcy5kYXRhYmFzZUNvbmZpZy52cGMsXG4gICAgICBzZWN1cml0eUdyb3VwczogW2xhbWJkYVNlY3VyaXR5R3JvdXBdLCAvLyBVc2UgdGhlIGRlZGljYXRlZCBMYW1iZGEgc2VjdXJpdHkgZ3JvdXBcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIERBVEFCQVNFX0VOR0lORTogcHJvcHMuZGF0YWJhc2VDb25maWcuZW5naW5lLFxuICAgICAgICBEQVRBQkFTRV9TRUNSRVRfQVJOOiBwcm9wcy5kYXRhYmFzZUNvbmZpZy5zZWNyZXQuc2VjcmV0QXJuLFxuICAgICAgICBEQVRBQkFTRV9OQU1FOiBwcm9wcy5kYXRhYmFzZUNvbmZpZy5kYXRhYmFzZU5hbWUsXG4gICAgICAgIFMzX0JVQ0tFVDogdGhpcy5idWNrZXQuYnVja2V0TmFtZSxcbiAgICAgIH0sXG4gICAgICBidW5kbGluZzoge1xuICAgICAgICAvLyBVc2UgY3VzdG9tIGJ1bmRsaW5nIGNvbW1hbmRzIHRvIGF2b2lkIFBvZXRyeSBjb25mbGljdHNcbiAgICAgICAgY29tbWFuZDogW1xuICAgICAgICAgICdiYXNoJywgJy1jJywgW1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgY2xlYW4gdmlydHVhbCBlbnZpcm9ubWVudFxuICAgICAgICAgICAgJ3B5dGhvbiAtbSB2ZW52IC90bXAvdmVudicsXG4gICAgICAgICAgICAvLyBBY3RpdmF0ZSB0aGUgdmlydHVhbCBlbnZpcm9ubWVudFxuICAgICAgICAgICAgJ3NvdXJjZSAvdG1wL3ZlbnYvYmluL2FjdGl2YXRlJyxcbiAgICAgICAgICAgIC8vIEluc3RhbGwgZGVwZW5kZW5jaWVzIGluIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50XG4gICAgICAgICAgICAncGlwIGluc3RhbGwgLS11cGdyYWRlIHBpcCcsXG4gICAgICAgICAgICAncGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLnR4dCAtdCAvYXNzZXQtb3V0cHV0JyxcbiAgICAgICAgICAgIC8vIENvcHkgc291cmNlIGZpbGVzXG4gICAgICAgICAgICAnY3AgLXIgLiAvYXNzZXQtb3V0cHV0JyxcbiAgICAgICAgICAgIC8vIENsZWFuIHVwIF9fcHljYWNoZV9fIGFuZCBvdGhlciB1bm5lY2Vzc2FyeSBmaWxlc1xuICAgICAgICAgICAgJ2ZpbmQgL2Fzc2V0LW91dHB1dCAtdHlwZSBkIC1uYW1lIF9fcHljYWNoZV9fIC1leGVjIHJtIC1yZiB7fSArIHx8IHRydWUnLFxuICAgICAgICAgICAgJ2ZpbmQgL2Fzc2V0LW91dHB1dCAtbmFtZSBcIioucHljXCIgLWRlbGV0ZSB8fCB0cnVlJyxcbiAgICAgICAgICBdLmpvaW4oJyAmJiAnKSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gVXNlIHRoZSBzdGFuZGFyZCBQeXRob24gaW1hZ2UgdG8gYXZvaWQgcHJlLWluc3RhbGxlZCBwYWNrYWdlc1xuICAgICAgICBpbWFnZTogRG9ja2VySW1hZ2UuZnJvbVJlZ2lzdHJ5KERlZmF1bHRSdW50aW1lcy5QWVRIT05fQlVORExJTkdfSU1BR0UpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEdyYW50IHBlcm1pc3Npb25zXG4gICAgdGhpcy5fZ3JhbnRQZXJtaXNzaW9ucyhsYW1iZGFGdW5jdGlvbiwgcHJvcHMpO1xuXG4gICAgcmV0dXJuIGxhbWJkYUZ1bmN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIFN0ZXAgRnVuY3Rpb25zIHN0YXRlIG1hY2hpbmVcbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgc3RhdGUgbWFjaGluZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfY3JlYXRlU3RhdGVNYWNoaW5lKCk6IFN0YXRlTWFjaGluZSB7XG4gICAgLy8gQ3JlYXRlIGEgTWFwIHN0YXRlIHRvIGl0ZXJhdGUgb3ZlciBmaWxlIGtleXNcbiAgICBjb25zdCBwcm9jZXNzRmlsZVRhc2sgPSBuZXcgTGFtYmRhSW52b2tlKHRoaXMsICdQcm9jZXNzRmlsZVRhc2snLCB7XG4gICAgICBsYW1iZGFGdW5jdGlvbjogdGhpcy5wcm9jZXNzb3JGdW5jdGlvbixcbiAgICAgIHBheWxvYWQ6IFRhc2tJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgJ3MzS2V5LiQnOiAnJCcsXG4gICAgICAgICdidWNrZXROYW1lJzogdGhpcy5idWNrZXQuYnVja2V0TmFtZSxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBzdGF0ZSBtYWNoaW5lIGRlZmluaXRpb25cbiAgICBjb25zdCBkZWZpbml0aW9uID0gbmV3IE1hcCh0aGlzLCAnUHJvY2Vzc0ZpbGVzTWFwJywge1xuICAgICAgaXRlbXNQYXRoOiAnJC5maWxlS2V5cycsXG4gICAgICBtYXhDb25jdXJyZW5jeTogMSwgLy8gUHJvY2VzcyBmaWxlcyBzZXF1ZW50aWFsbHkgdG8gbWFpbnRhaW4gb3JkZXJcbiAgICB9KS5pdGVtUHJvY2Vzc29yKHByb2Nlc3NGaWxlVGFzayk7XG5cbiAgICAvLyBDcmVhdGUgdGhlIHN0YXRlIG1hY2hpbmVcbiAgICBjb25zdCBzdGF0ZU1hY2hpbmUgPSBuZXcgU3RhdGVNYWNoaW5lKHRoaXMsICdEYXRhTG9hZGVyU3RhdGVNYWNoaW5lJywge1xuICAgICAgZGVmaW5pdGlvbkJvZHk6IERlZmluaXRpb25Cb2R5LmZyb21DaGFpbmFibGUoZGVmaW5pdGlvbiksXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5ob3VycygyKSwgLy8gQWxsb3cgdXAgdG8gMiBob3VycyBmb3IgdGhlIGVudGlyZSBwcm9jZXNzXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCB0aGUgc3RhdGUgbWFjaGluZSBwZXJtaXNzaW9uIHRvIGludm9rZSB0aGUgTGFtYmRhIGZ1bmN0aW9uXG4gICAgdGhpcy5wcm9jZXNzb3JGdW5jdGlvbi5ncmFudEludm9rZShzdGF0ZU1hY2hpbmUpO1xuXG4gICAgcmV0dXJuIHN0YXRlTWFjaGluZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHRvIHRoZSBMYW1iZGEgZnVuY3Rpb25cbiAgICogQHBhcmFtIGxhbWJkYUZ1bmN0aW9uIFRoZSBMYW1iZGEgZnVuY3Rpb25cbiAgICogQHBhcmFtIHByb3BzIFRoZSBEYXRhTG9hZGVyIHByb3BlcnRpZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2dyYW50UGVybWlzc2lvbnMobGFtYmRhRnVuY3Rpb246IExhbWJkYUZ1bmN0aW9uLCBwcm9wczogRGF0YUxvYWRlclByb3BzKTogdm9pZCB7XG4gICAgLy8gR3JhbnQgUzMgcGVybWlzc2lvbnNcbiAgICB0aGlzLmJ1Y2tldC5ncmFudFJlYWQobGFtYmRhRnVuY3Rpb24pO1xuXG4gICAgLy8gR3JhbnQgU2VjcmV0cyBNYW5hZ2VyIHBlcm1pc3Npb25zXG4gICAgcHJvcHMuZGF0YWJhc2VDb25maWcuc2VjcmV0LmdyYW50UmVhZChsYW1iZGFGdW5jdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCBmaWxlIHByb2Nlc3NpbmcgYnkgdXBsb2FkaW5nIGZpbGVzIHRvIFMzXG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgRGF0YUxvYWRlciBwcm9wZXJ0aWVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9zZXR1cEZpbGVQcm9jZXNzaW5nKHByb3BzOiBEYXRhTG9hZGVyUHJvcHMpOiB2b2lkIHtcbiAgICAvLyBTZXBhcmF0ZSBsb2NhbCBmaWxlcyBmcm9tIFMzIFVSSXNcbiAgICBjb25zdCBsb2NhbEZpbGVzID0gcHJvcHMuZmlsZUlucHV0cy5maWx0ZXIoZiA9PiAhZi5maWxlUGF0aC5zdGFydHNXaXRoKCdzMzovLycpKTtcblxuICAgIC8vIFVwbG9hZCBsb2NhbCBmaWxlcyB0byBTMyBpZiBhbnlcbiAgICBpZiAobG9jYWxGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBQcm9jZXNzIGVhY2ggZmlsZSBpbmRpdmlkdWFsbHkgdG8gaGFuZGxlIGJvdGggZmlsZXMgYW5kIGRpcmVjdG9yaWVzXG4gICAgICBsb2NhbEZpbGVzLmZvckVhY2goKGZpbGVJbnB1dCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBmaWxlSW5wdXQuZmlsZVBhdGg7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgICAgIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgICAgY29uc3QgcGF0aE1vZHVsZSA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuICAgICAgICBsZXQgcmVzb2x2ZWRQYXRoOiBzdHJpbmc7XG4gICAgICAgIGlmIChwYXRoTW9kdWxlLmlzQWJzb2x1dGUoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gZmlsZVBhdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUmVzb2x2ZSByZWxhdGl2ZSBwYXRocyBmcm9tIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcGF0aE1vZHVsZS5yZXNvbHZlKGZpbGVQYXRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBwYXRoIGV4aXN0c1xuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocmVzb2x2ZWRQYXRoKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSBub3QgZm91bmQ6ICR7cmVzb2x2ZWRQYXRofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZzLnN0YXRTeW5jKHJlc29sdmVkUGF0aCkuaXNGaWxlKCkpIHtcbiAgICAgICAgICAvLyBGb3IgaW5kaXZpZHVhbCBmaWxlcywgZGVwbG95IGZyb20gcGFyZW50IGRpcmVjdG9yeSB3aXRoIGluY2x1ZGUgZmlsdGVyXG4gICAgICAgICAgY29uc3QgcGFyZW50RGlyID0gcGF0aE1vZHVsZS5kaXJuYW1lKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoTW9kdWxlLmJhc2VuYW1lKHJlc29sdmVkUGF0aCk7XG5cbiAgICAgICAgICBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBgRGF0YUxvYWRlckZpbGVEZXBsb3ltZW50JHtpbmRleH1gLCB7XG4gICAgICAgICAgICBzb3VyY2VzOiBbU291cmNlLmFzc2V0KHBhcmVudERpcildLFxuICAgICAgICAgICAgZGVzdGluYXRpb25CdWNrZXQ6IHRoaXMuYnVja2V0LFxuICAgICAgICAgICAgZGVzdGluYXRpb25LZXlQcmVmaXg6ICdkYXRhLWZpbGVzLycsXG4gICAgICAgICAgICBpbmNsdWRlOiBbZmlsZU5hbWVdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvciBkaXJlY3RvcmllcywgZGVwbG95IGVudGlyZSBkaXJlY3RvcnlcbiAgICAgICAgICBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBgRGF0YUxvYWRlckZpbGVEZXBsb3ltZW50JHtpbmRleH1gLCB7XG4gICAgICAgICAgICBzb3VyY2VzOiBbU291cmNlLmFzc2V0KHJlc29sdmVkUGF0aCldLFxuICAgICAgICAgICAgZGVzdGluYXRpb25CdWNrZXQ6IHRoaXMuYnVja2V0LFxuICAgICAgICAgICAgZGVzdGluYXRpb25LZXlQcmVmaXg6ICdkYXRhLWZpbGVzLycsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY3VzdG9tIHJlc291cmNlIHByb3ZpZGVyIGZvciB0cmlnZ2VyaW5nIHN0YXRlIG1hY2hpbmUgZXhlY3V0aW9uXG4gICAqIEByZXR1cm5zIFRoZSBjdXN0b20gcmVzb3VyY2UgcHJvdmlkZXJcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZUN1c3RvbVJlc291cmNlUHJvdmlkZXIoKTogUHJvdmlkZXIge1xuICAgIC8vIENyZWF0ZSBJQU0gcm9sZSBmb3IgdGhlIGN1c3RvbSByZXNvdXJjZSBMYW1iZGEgZnVuY3Rpb24gd2l0aCBhbGwgbmVjZXNzYXJ5IHBvbGljaWVzXG4gICAgY29uc3QgY3VzdG9tUmVzb3VyY2VSb2xlID0gbmV3IFJvbGUodGhpcywgJ1N0YXRlTWFjaGluZUV4ZWN1dGlvblRyaWdnZXJSb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgU2VydmljZVByaW5jaXBhbCgnbGFtYmRhLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSUFNIHJvbGUgZm9yIERhdGFMb2FkZXIgY3VzdG9tIHJlc291cmNlIExhbWJkYSBmdW5jdGlvbicsXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUnKSxcbiAgICAgIF0sXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBTdGF0ZU1hY2hpbmVFeGVjdXRpb25Qb2xpY3k6IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgJ3N0YXRlczpTdGFydEV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgJ3N0YXRlczpEZXNjcmliZUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgJ3N0YXRlczpTdG9wRXhlY3V0aW9uJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZU1hY2hpbmUuc3RhdGVNYWNoaW5lQXJuLFxuICAgICAgICAgICAgICAgIGAke3RoaXMuc3RhdGVNYWNoaW5lLnN0YXRlTWFjaGluZUFybn06KmAsIC8vIEZvciBleGVjdXRpb24gQVJOc1xuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIExhbWJkYSBmdW5jdGlvbiBmb3IgY3VzdG9tIHJlc291cmNlIHdpdGggdGhlIHByZS1jb25maWd1cmVkIHJvbGVcbiAgICBjb25zdCBjdXN0b21SZXNvdXJjZUZ1bmN0aW9uID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsICdTdGF0ZU1hY2hpbmVFeGVjdXRpb25UcmlnZ2VyJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5QWVRIT05fM18xMSxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIHJvbGU6IGN1c3RvbVJlc291cmNlUm9sZSwgLy8gQXR0YWNoIHRoZSByb2xlIGR1cmluZyBjcmVhdGlvblxuICAgICAgY29kZTogQ29kZS5mcm9tSW5saW5lKGBcbmltcG9ydCBqc29uXG5pbXBvcnQgYm90bzNcbmltcG9ydCBsb2dnaW5nXG5cbmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKClcbmxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pXG5cbnN0ZXBmdW5jdGlvbnMgPSBib3RvMy5jbGllbnQoJ3N0ZXBmdW5jdGlvbnMnKVxuXG5kZWYgaGFuZGxlcihldmVudCwgY29udGV4dCk6XG4gICAgbG9nZ2VyLmluZm8oZlwiUmVjZWl2ZWQgZXZlbnQ6IHtqc29uLmR1bXBzKGV2ZW50KX1cIilcbiAgICBcbiAgICByZXF1ZXN0X3R5cGUgPSBldmVudFsnUmVxdWVzdFR5cGUnXVxuICAgIFxuICAgIGlmIHJlcXVlc3RfdHlwZSA9PSAnQ3JlYXRlJyBvciByZXF1ZXN0X3R5cGUgPT0gJ1VwZGF0ZSc6XG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgICMgR2V0IHBhcmFtZXRlcnMgZnJvbSBldmVudFxuICAgICAgICAgICAgc3RhdGVfbWFjaGluZV9hcm4gPSBldmVudFsnUmVzb3VyY2VQcm9wZXJ0aWVzJ11bJ1N0YXRlTWFjaGluZUFybiddXG4gICAgICAgICAgICBmaWxlX2tleXMgPSBldmVudFsnUmVzb3VyY2VQcm9wZXJ0aWVzJ11bJ0ZpbGVLZXlzJ11cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgIyBTdGFydCBleGVjdXRpb25cbiAgICAgICAgICAgIHJlc3BvbnNlID0gc3RlcGZ1bmN0aW9ucy5zdGFydF9leGVjdXRpb24oXG4gICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lQXJuPXN0YXRlX21hY2hpbmVfYXJuLFxuICAgICAgICAgICAgICAgIGlucHV0PWpzb24uZHVtcHMoe1xuICAgICAgICAgICAgICAgICAgICAnZmlsZUtleXMnOiBmaWxlX2tleXNcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBleGVjdXRpb25fYXJuID0gcmVzcG9uc2VbJ2V4ZWN1dGlvbkFybiddXG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhmXCJTdGFydGVkIGV4ZWN1dGlvbjoge2V4ZWN1dGlvbl9hcm59XCIpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgJ1N0YXR1cyc6ICdTVUNDRVNTJyxcbiAgICAgICAgICAgICAgICAnUGh5c2ljYWxSZXNvdXJjZUlkJzogZXhlY3V0aW9uX2FybixcbiAgICAgICAgICAgICAgICAnRGF0YSc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ0V4ZWN1dGlvbkFybic6IGV4ZWN1dGlvbl9hcm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOlxuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGZcIkVycm9yIHN0YXJ0aW5nIGV4ZWN1dGlvbjoge3N0cihlKX1cIilcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgJ1N0YXR1cyc6ICdGQUlMRUQnLFxuICAgICAgICAgICAgICAgICdSZWFzb24nOiBzdHIoZSksXG4gICAgICAgICAgICAgICAgJ1BoeXNpY2FsUmVzb3VyY2VJZCc6ICdmYWlsZWQnXG4gICAgICAgICAgICB9XG4gICAgXG4gICAgZWxpZiByZXF1ZXN0X3R5cGUgPT0gJ0RlbGV0ZSc6XG4gICAgICAgICMgRm9yIGRlbGV0ZSwgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBzcGVjaWFsXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnU3RhdHVzJzogJ1NVQ0NFU1MnLFxuICAgICAgICAgICAgJ1BoeXNpY2FsUmVzb3VyY2VJZCc6IGV2ZW50LmdldCgnUGh5c2ljYWxSZXNvdXJjZUlkJywgJ25vbmUnKVxuICAgICAgICB9XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ1N0YXR1cyc6ICdTVUNDRVNTJyxcbiAgICAgICAgJ1BoeXNpY2FsUmVzb3VyY2VJZCc6ICdub25lJ1xuICAgIH1cbiAgICAgIGApLFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBwcm92aWRlciB3aXRoIHRoZSBMYW1iZGEgZnVuY3Rpb24gdGhhdCBhbHJlYWR5IGhhcyB0aGUgY29ycmVjdCByb2xlXG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIodGhpcywgJ1N0YXRlTWFjaGluZUV4ZWN1dGlvblByb3ZpZGVyJywge1xuICAgICAgb25FdmVudEhhbmRsZXI6IGN1c3RvbVJlc291cmNlRnVuY3Rpb24sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHJvdmlkZXI7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGN1c3RvbSByZXNvdXJjZSB0byB0cmlnZ2VyIHN0YXRlIG1hY2hpbmUgZXhlY3V0aW9uXG4gICAqIEByZXR1cm5zIFRoZSBjdXN0b20gcmVzb3VyY2VcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZUV4ZWN1dGlvblRyaWdnZXIoKTogQ3VzdG9tUmVzb3VyY2Uge1xuICAgIC8vIEdldCBvcmRlcmVkIGZpbGUga2V5c1xuICAgIGNvbnN0IG9yZGVyZWRGaWxlS2V5cyA9IHRoaXMuX2dldE9yZGVyZWRGaWxlS2V5cygpO1xuXG4gICAgY29uc3QgY3VzdG9tUmVzb3VyY2UgPSBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgJ0V4ZWN1dGlvblRyaWdnZXJSZXNvdXJjZScsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogdGhpcy5jdXN0b21SZXNvdXJjZVByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgU3RhdGVNYWNoaW5lQXJuOiB0aGlzLnN0YXRlTWFjaGluZS5zdGF0ZU1hY2hpbmVBcm4sXG4gICAgICAgIEZpbGVLZXlzOiBvcmRlcmVkRmlsZUtleXMsXG4gICAgICAgIC8vIEFkZCBhIHRpbWVzdGFtcCB0byBmb3JjZSB1cGRhdGVzIHdoZW4gbmVlZGVkXG4gICAgICAgIFRpbWVzdGFtcDogRGF0ZS5ub3coKS50b1N0cmluZygpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEVuc3VyZSB0aGUgY3VzdG9tIHJlc291cmNlIHJ1bnMgYWZ0ZXIgYnVja2V0IGRlcGxveW1lbnQgKGlmIGV4aXN0cylcbiAgICBpZiAodGhpcy5idWNrZXREZXBsb3ltZW50KSB7XG4gICAgICBjdXN0b21SZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5zdGF0ZU1hY2hpbmUpO1xuICAgICAgY3VzdG9tUmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMuYnVja2V0RGVwbG95bWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1c3RvbVJlc291cmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG9yZGVyZWQgZmlsZSBrZXlzIGZvciBleGVjdXRpb25cbiAgICogQHJldHVybnMgQXJyYXkgb2YgUzMga2V5cyBpbiBleGVjdXRpb24gb3JkZXJcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2dldE9yZGVyZWRGaWxlS2V5cygpOiBzdHJpbmdbXSB7XG4gICAgLy8gU29ydCBmaWxlcyBieSBleGVjdXRpb24gb3JkZXJcbiAgICBjb25zdCBzb3J0ZWRGaWxlcyA9IFsuLi50aGlzLmZpbGVJbnB1dHNdLnNvcnQoXG4gICAgICAoYSwgYikgPT4gKGEuZXhlY3V0aW9uT3JkZXIgfHwgMCkgLSAoYi5leGVjdXRpb25PcmRlciB8fCAwKSxcbiAgICApO1xuXG4gICAgLy8gQ29udmVydCBmaWxlIHBhdGhzIHRvIFMzIGtleXNcbiAgICByZXR1cm4gc29ydGVkRmlsZXMubWFwKGZpbGUgPT4ge1xuICAgICAgaWYgKGZpbGUuZmlsZVBhdGguc3RhcnRzV2l0aCgnczM6Ly8nKSkge1xuICAgICAgICAvLyBFeHRyYWN0IGtleSBmcm9tIFMzIFVSSVxuICAgICAgICBjb25zdCBwYXJ0cyA9IGZpbGUuZmlsZVBhdGgucmVwbGFjZSgnczM6Ly8nLCAnJykuc3BsaXQoJy8nKTtcbiAgICAgICAgcmV0dXJuIHBhcnRzLnNsaWNlKDEpLmpvaW4oJy8nKTsgLy8gUmVtb3ZlIGJ1Y2tldCBuYW1lXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb2NhbCBmaWxlcyBhcmUgdXBsb2FkZWQgd2l0aCBkYXRhLWZpbGVzLyBwcmVmaXhcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGUuZmlsZVBhdGgpO1xuICAgICAgICByZXR1cm4gYGRhdGEtZmlsZXMvJHtmaWxlTmFtZX1gO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -32,6 +32,13 @@ export interface LambdaLogsPermissionsProps {
32
32
  * AWS account ID for the log group ARN
33
33
  */
34
34
  readonly account: string;
35
+ /**
36
+ * Whether observability is enabled or not. This would have an impact
37
+ * on the result IAM policy for the LogGroup for the Lambda function
38
+ *
39
+ * @default false
40
+ */
41
+ readonly enableObservability?: boolean;
35
42
  }
36
43
  /**
37
44
  * Result of creating Lambda logs permissions
@@ -50,6 +57,7 @@ export interface LambdaLogsPermissionsResult {
50
57
  * Utility class for creating secure Lambda IAM policy statements with minimal permissions
51
58
  */
52
59
  export declare class LambdaIamUtils {
60
+ static readonly OBSERVABILITY_SUFFIX = "-secured";
53
61
  /**
54
62
  * Creates CloudWatch Logs policy statements for Lambda execution
55
63
  *
@@ -21,14 +21,15 @@ class LambdaIamUtils {
21
21
  static createLogsPermissions(props) {
22
22
  // Generate unique function name using construct node path
23
23
  const uniqueFunctionName = LambdaIamUtils.generateUniqueFunctionName(props.scope, props.functionName);
24
- const logGroupName = props.logGroupName || `/aws/lambda/${uniqueFunctionName}`;
24
+ const logGroupName = props.logGroupName || `/aws/lambda/${uniqueFunctionName}` + props.enableObservability ? LambdaIamUtils.OBSERVABILITY_SUFFIX : '';
25
+ let logGroupArn = `arn:aws:logs:${props.region}:${props.account}:log-group:${logGroupName}`;
25
26
  const policyStatements = [
26
27
  // Permission to create log group
27
28
  new iam.PolicyStatement({
28
29
  effect: iam.Effect.ALLOW,
29
30
  actions: ['logs:CreateLogGroup'],
30
31
  resources: [
31
- `arn:aws:logs:${props.region}:${props.account}:log-group:${logGroupName}:*`,
32
+ logGroupArn,
32
33
  ],
33
34
  }),
34
35
  // Permission to create log streams and put log events
@@ -39,7 +40,7 @@ class LambdaIamUtils {
39
40
  'logs:PutLogEvents',
40
41
  ],
41
42
  resources: [
42
- `arn:aws:logs:${props.region}:${props.account}:log-group:${logGroupName}:*`,
43
+ `${logGroupArn}:*`,
43
44
  ],
44
45
  }),
45
46
  ];
@@ -231,5 +232,6 @@ class LambdaIamUtils {
231
232
  }
232
233
  exports.LambdaIamUtils = LambdaIamUtils;
233
234
  _a = JSII_RTTI_SYMBOL_1;
234
- LambdaIamUtils[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.LambdaIamUtils", version: "1.0.0" };
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWlhbS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3VzZS1jYXNlcy91dGlsaXRpZXMvbGFtYmRhLWlhbS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFFQUFxRTtBQUNyRSxzQ0FBc0M7QUFDdEMsbUNBQW1DO0FBQ25DLDZDQUFvQztBQUNwQywyQ0FBMkM7QUF5RDNDOztHQUVHO0FBQ0gsTUFBYSxjQUFjO0lBQ3pCOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQWlDO1FBQ25FLDBEQUEwRDtRQUMxRCxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0RyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLGVBQWUsa0JBQWtCLEVBQUUsQ0FBQztRQUUvRSxNQUFNLGdCQUFnQixHQUFHO1lBQ3ZCLGlDQUFpQztZQUNqQyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7Z0JBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7Z0JBQ3hCLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDO2dCQUNoQyxTQUFTLEVBQUU7b0JBQ1QsZ0JBQWdCLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sY0FBYyxZQUFZLElBQUk7aUJBQzVFO2FBQ0YsQ0FBQztZQUNGLHNEQUFzRDtZQUN0RCxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7Z0JBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7Z0JBQ3hCLE9BQU8sRUFBRTtvQkFDUCxzQkFBc0I7b0JBQ3RCLG1CQUFtQjtpQkFDcEI7Z0JBQ0QsU0FBUyxFQUFFO29CQUNULGdCQUFnQixLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLGNBQWMsWUFB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QUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLG1DQUFtQyxDQUMvQyxTQUFpQixFQUNqQixVQUFvQixDQUFDLCtCQUErQixDQUFDO1FBRXJELE9BQU8sSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO1lBQzdCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDeEIsT0FBTztZQUNQLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQztTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLHdCQUF3QixDQUNwQyxNQUFjLEVBQ2QsVUFBb0IsQ0FBQyxhQUFhLEVBQUUscUJBQXFCLENBQUM7UUFFMUQsT0FBTyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7WUFDN0IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztZQUN4QixPQUFPO1lBQ1AsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDO1NBQ3BCLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBN1BILHdDQThQQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBOYW1lcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFN0YWNrIGluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhSWFtVXRpbHNTdGFja0luZm8ge1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcbiAgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTGFtYmRhIENsb3VkV2F0Y2ggTG9ncyBwZXJtaXNzaW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUxvZ3NQZXJtaXNzaW9uc1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgKHVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIG5hbWVzKVxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcblxuICAvKipcbiAgICogVGhlIGJhc2UgbmFtZSBvZiB0aGUgTGFtYmRhIGZ1bmN0aW9uXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQ3VzdG9tIGxvZyBncm91cCBuYW1lIHBhdHRlcm5cbiAgICogQGRlZmF1bHQgJy9hd3MvbGFtYmRhL3t1bmlxdWVGdW5jdGlvbk5hbWV9J1xuICAgKi9cbiAgcmVhZG9ubHkgbG9nR3JvdXBOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBV1MgcmVnaW9uIGZvciB0aGUgbG9nIGdyb3VwIEFSTlxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFXUyBhY2NvdW50IElEIGZvciB0aGUgbG9nIGdyb3VwIEFSTlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBjcmVhdGluZyBMYW1iZGEgbG9ncyBwZXJtaXNzaW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUxvZ3NQZXJtaXNzaW9uc1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IHN0YXRlbWVudHMgZm9yIENsb3VkV2F0Y2ggTG9nc1xuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5U3RhdGVtZW50czogaWFtLlBvbGljeVN0YXRlbWVudFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGZ1bmN0aW9uIG5hbWUgdGhhdCB3YXMgZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSB1bmlxdWVGdW5jdGlvbk5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBVdGlsaXR5IGNsYXNzIGZvciBjcmVhdGluZyBzZWN1cmUgTGFtYmRhIElBTSBwb2xpY3kgc3RhdGVtZW50cyB3aXRoIG1pbmltYWwgcGVybWlzc2lvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIExhbWJkYUlhbVV0aWxzIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgQ2xvdWRXYXRjaCBMb2dzIHBvbGljeSBzdGF0ZW1lbnRzIGZvciBMYW1iZGEgZXhlY3V0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBDb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgcG9saWN5IHN0YXRlbWVudHMgYW5kIHRoZSB1bmlxdWUgZnVuY3Rpb24gbmFtZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVMb2dzUGVybWlzc2lvbnMocHJvcHM6IExhbWJkYUxvZ3NQZXJtaXNzaW9uc1Byb3BzKTogTGFtYmRhTG9nc1Blcm1pc3Npb25zUmVzdWx0IHtcbiAgICAvLyBHZW5lcmF0ZSB1bmlxdWUgZnVuY3Rpb24gbmFtZSB1c2luZyBjb25zdHJ1Y3Qgbm9kZSBwYXRoXG4gICAgY29uc3QgdW5pcXVlRnVuY3Rpb25OYW1lID0gTGFtYmRhSWFtVXRpbHMuZ2VuZXJhdGVVbmlxdWVGdW5jdGlvbk5hbWUocHJvcHMuc2NvcGUsIHByb3BzLmZ1bmN0aW9uTmFtZSk7XG4gICAgY29uc3QgbG9nR3JvdXBOYW1lID0gcHJvcHMubG9nR3JvdXBOYW1lIHx8IGAvYXdzL2xhbWJkYS8ke3VuaXF1ZUZ1bmN0aW9uTmFtZX1gO1xuXG4gICAgY29uc3QgcG9saWN5U3RhdGVtZW50cyA9IFtcbiAgICAgIC8vIFBlcm1pc3Npb24gdG8gY3JlYXRlIGxvZyBncm91cFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsnbG9nczpDcmVhdGVMb2dHcm91cCddLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOmF3czpsb2dzOiR7cHJvcHMucmVnaW9ufToke3Byb3BzLmFjY291bnR9OmxvZy1ncm91cDoke2xvZ0dyb3VwTmFtZX06KmAsXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICAgIC8vIFBlcm1pc3Npb24gdG8gY3JlYXRlIGxvZyBzdHJlYW1zIGFuZCBwdXQgbG9nIGV2ZW50c1xuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnbG9nczpDcmVhdGVMb2dTdHJlYW0nLFxuICAgICAgICAgICdsb2dzOlB1dExvZ0V2ZW50cycsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGBhcm46YXdzOmxvZ3M6JHtwcm9wcy5yZWdpb259OiR7cHJvcHMuYWNjb3VudH06bG9nLWdyb3VwOiR7bG9nR3JvdXBOYW1lfToqYCxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgcG9saWN5U3RhdGVtZW50cyxcbiAgICAgIHVuaXF1ZUZ1bmN0aW9uTmFtZSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZW5lcmF0ZUxhbWJkYVZQQ1Blcm1pc3Npb25zKCk6IGlhbS5Qb2xpY3lTdGF0ZW1lbnQge1xuICAgIHJldHVybiBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgICdlYzI6Q3JlYXRlTmV0d29ya0ludGVyZmFjZScsXG4gICAgICAgICdlYzI6RGVzY3JpYmVOZXR3b3JrSW50ZXJmYWNlcycsXG4gICAgICAgICdlYzI6RGVzY3JpYmVTdWJuZXRzJyxcbiAgICAgICAgJ2VjMjpEZWxldGVOZXR3b3JrSW50ZXJmYWNlJyxcbiAgICAgICAgJ2VjMjpBc3NpZ25Qcml2YXRlSXBBZGRyZXNzZXMnLFxuICAgICAgICAnZWMyOlVuYXNzaWduUHJpdmF0ZUlwQWRkcmVzc2VzJyxcbiAgICAgICAgJ2VjMjpEZXNjcmliZVNlY3VyaXR5R3JvdXBzJyxcbiAgICAgICAgJ2VjMjpEZXNjcmliZVZwY3MnLFxuICAgICAgICAnZWMyOkdldFNlY3VyaXR5R3JvdXBzRm9yVnBjJyxcbiAgICAgIF0sXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHVuaXF1ZSBmdW5jdGlvbiBuYW1lIHVzaW5nIENESydzIGJ1aWx0LWluIGZ1bmN0aW9uYWxpdHlcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGJhc2VOYW1lIFRoZSBiYXNlIG5hbWUgZm9yIHRoZSBmdW5jdGlvblxuICAgKiBAcmV0dXJucyBVbmlxdWUgZnVuY3Rpb24gbmFtZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZW5lcmF0ZVVuaXF1ZUZ1bmN0aW9uTmFtZShzY29wZTogQ29uc3RydWN0LCBiYXNlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7YmFzZU5hbWV9LSR7TmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHNjb3BlLCB7IG1heExlbmd0aDogNjQgLSAoYmFzZU5hbWUubGVuZ3RoICsgMSkgfSkudG9Mb3dlckNhc2UoKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgVlBDIHBlcm1pc3Npb25zIGZvciBMYW1iZGEgZnVuY3Rpb25zIHJ1bm5pbmcgaW4gVlBDXG4gICAqXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIElBTSBQb2xpY3lTdGF0ZW1lbnRzIGZvciBWUEMgYWNjZXNzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVZwY1Blcm1pc3Npb25zKCk6IGlhbS5Qb2xpY3lTdGF0ZW1lbnRbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2VjMjpDcmVhdGVOZXR3b3JrSW50ZXJmYWNlJyxcbiAgICAgICAgICAnZWMyOkRlc2NyaWJlTmV0d29ya0ludGVyZmFjZXMnLFxuICAgICAgICAgICdlYzI6RGVsZXRlTmV0d29ya0ludGVyZmFjZScsXG4gICAgICAgICAgJ2VjMjpBdHRhY2hOZXR3b3JrSW50ZXJmYWNlJyxcbiAgICAgICAgICAnZWMyOkRldGFjaE5ldHdvcmtJbnRlcmZhY2UnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLCAvLyBWUEMgcGVybWlzc2lvbnMgcmVxdWlyZSB3aWxkY2FyZCByZXNvdXJjZXNcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBYLVJheSB0cmFjaW5nIHBlcm1pc3Npb25zIGZvciBMYW1iZGEgZnVuY3Rpb25zXG4gICAqXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIElBTSBQb2xpY3lTdGF0ZW1lbnRzIGZvciBYLVJheSB0cmFjaW5nXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVhSYXlQZXJtaXNzaW9ucygpOiBpYW0uUG9saWN5U3RhdGVtZW50W10ge1xuICAgIHJldHVybiBbXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICd4cmF5OlB1dFRyYWNlU2VnbWVudHMnLFxuICAgICAgICAgICd4cmF5OlB1dFRlbGVtZXRyeVJlY29yZHMnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLCAvLyBYLVJheSBwZXJtaXNzaW9ucyByZXF1aXJlIHdpbGRjYXJkIHJlc291cmNlc1xuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIGdldCByZWdpb24gYW5kIGFjY291bnQgZnJvbSBhIGNvbnN0cnVjdFxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcmV0dXJucyBMYW1iZGFJYW1VdGlsc1N0YWNrSW5mb1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRTdGFja0luZm8oc2NvcGU6IENvbnN0cnVjdCk6IExhbWJkYUlhbVV0aWxzU3RhY2tJbmZvIHtcbiAgICBjb25zdCBzdGFjayA9IGNkay5TdGFjay5vZihzY29wZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZ2lvbjogc3RhY2sucmVnaW9uLFxuICAgICAgYWNjb3VudDogc3RhY2suYWNjb3VudCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBwb2xpY3kgc3RhdGVtZW50IGZvciBEeW5hbW9EQiB0YWJsZSBhY2Nlc3NcbiAgICpcbiAgICogQHBhcmFtIHRhYmxlQXJuIFRoZSBBUk4gb2YgdGhlIER5bmFtb0RCIHRhYmxlXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBEeW5hbW9EQiBhY3Rpb25zIHRvIGFsbG93XG4gICAqIEByZXR1cm5zIFBvbGljeVN0YXRlbWVudCBmb3IgRHluYW1vREIgYWNjZXNzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUR5bmFtb0RiUG9saWN5U3RhdGVtZW50KFxuICAgIHRhYmxlQXJuOiBzdHJpbmcsXG4gICAgYWN0aW9uczogc3RyaW5nW10gPSBbJ2R5bmFtb2RiOkdldEl0ZW0nLCAnZHluYW1vZGI6UHV0SXRlbScsICdkeW5hbW9kYjpVcGRhdGVJdGVtJywgJ2R5bmFtb2RiOkRlbGV0ZUl0ZW0nLCAnZHluYW1vZGI6UXVlcnknLCAnZHluYW1vZGI6U2NhbiddLFxuICApOiBpYW0uUG9saWN5U3RhdGVtZW50IHtcbiAgICByZXR1cm4gbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9ucyxcbiAgICAgIHJlc291cmNlczogW3RhYmxlQXJuLCBgJHt0YWJsZUFybn0vaW5kZXgvKmBdLCAvLyBJbmNsdWRlIEdTSSBhY2Nlc3NcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcG9saWN5IHN0YXRlbWVudCBmb3IgUzMgYnVja2V0IGFjY2Vzc1xuICAgKlxuICAgKiBAcGFyYW0gYnVja2V0QXJuIFRoZSBBUk4gb2YgdGhlIFMzIGJ1Y2tldFxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgUzMgYWN0aW9ucyB0byBhbGxvd1xuICAgKiBAcGFyYW0gaW5jbHVkZU9iamVjdHMgV2hldGhlciB0byBpbmNsdWRlIG9iamVjdC1sZXZlbCBwZXJtaXNzaW9uc1xuICAgKiBAcmV0dXJucyBQb2xpY3lTdGF0ZW1lbnQgZm9yIFMzIGFjY2Vzc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVTM1BvbGljeVN0YXRlbWVudChcbiAgICBidWNrZXRBcm46IHN0cmluZyxcbiAgICBhY3Rpb25zOiBzdHJpbmdbXSA9IFsnczM6R2V0T2JqZWN0JywgJ3MzOlB1dE9iamVjdCddLFxuICAgIGluY2x1ZGVPYmplY3RzOiBib29sZWFuID0gdHJ1ZSxcbiAgKTogaWFtLlBvbGljeVN0YXRlbWVudCB7XG4gICAgY29uc3QgcmVzb3VyY2VzID0gW2J1Y2tldEFybl07XG4gICAgaWYgKGluY2x1ZGVPYmplY3RzKSB7XG4gICAgICByZXNvdXJjZXMucHVzaChgJHtidWNrZXRBcm59LypgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9ucyxcbiAgICAgIHJlc291cmNlcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcG9saWN5IHN0YXRlbWVudCBmb3IgU1FTIHF1ZXVlIGFjY2Vzc1xuICAgKlxuICAgKiBAcGFyYW0gcXVldWVBcm4gVGhlIEFSTiBvZiB0aGUgU1FTIHF1ZXVlXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBTUVMgYWN0aW9ucyB0byBhbGxvd1xuICAgKiBAcmV0dXJucyBQb2xpY3lTdGF0ZW1lbnQgZm9yIFNRUyBhY2Nlc3NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlU3FzUG9saWN5U3RhdGVtZW50KFxuICAgIHF1ZXVlQXJuOiBzdHJpbmcsXG4gICAgYWN0aW9uczogc3RyaW5nW10gPSBbJ3NxczpSZWNlaXZlTWVzc2FnZScsICdzcXM6RGVsZXRlTWVzc2FnZScsICdzcXM6R2V0UXVldWVBdHRyaWJ1dGVzJ10sXG4gICk6IGlhbS5Qb2xpY3lTdGF0ZW1lbnQge1xuICAgIHJldHVybiBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VzOiBbcXVldWVBcm5dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBwb2xpY3kgc3RhdGVtZW50IGZvciBTTlMgdG9waWMgYWNjZXNzXG4gICAqXG4gICAqIEBwYXJhbSB0b3BpY0FybiBUaGUgQVJOIG9mIHRoZSBTTlMgdG9waWNcbiAgICogQHBhcmFtIGFjdGlvbnMgVGhlIFNOUyBhY3Rpb25zIHRvIGFsbG93XG4gICAqIEByZXR1cm5zIFBvbGljeVN0YXRlbWVudCBmb3IgU05TIGFjY2Vzc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVTbnNQb2xpY3lTdGF0ZW1lbnQoXG4gICAgdG9waWNBcm46IHN0cmluZyxcbiAgICBhY3Rpb25zOiBzdHJpbmdbXSA9IFsnc25zOlB1Ymxpc2gnXSxcbiAgKTogaWFtLlBvbGljeVN0YXRlbWVudCB7XG4gICAgcmV0dXJuIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnMsXG4gICAgICByZXNvdXJjZXM6IFt0b3BpY0Fybl0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHBvbGljeSBzdGF0ZW1lbnQgZm9yIFN0ZXAgRnVuY3Rpb25zIGV4ZWN1dGlvblxuICAgKlxuICAgKiBAcGFyYW0gc3RhdGVNYWNoaW5lQXJuIFRoZSBBUk4gb2YgdGhlIFN0ZXAgRnVuY3Rpb25zIHN0YXRlIG1hY2hpbmVcbiAgICogQHBhcmFtIGFjdGlvbnMgVGhlIFN0ZXAgRnVuY3Rpb25zIGFjdGlvbnMgdG8gYWxsb3dcbiAgICogQHJldHVybnMgUG9saWN5U3RhdGVtZW50IGZvciBTdGVwIEZ1bmN0aW9ucyBhY2Nlc3NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlU3RlcEZ1bmN0aW9uc1BvbGljeVN0YXRlbWVudChcbiAgICBzdGF0ZU1hY2hpbmVBcm46IHN0cmluZyxcbiAgICBhY3Rpb25zOiBzdHJpbmdbXSA9IFsnc3RhdGVzOlN0YXJ0RXhlY3V0aW9uJ10sXG4gICk6IGlhbS5Qb2xpY3lTdGF0ZW1lbnQge1xuICAgIHJldHVybiBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VzOiBbc3RhdGVNYWNoaW5lQXJuXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcG9saWN5IHN0YXRlbWVudCBmb3IgU2VjcmV0cyBNYW5hZ2VyIGFjY2Vzc1xuICAgKlxuICAgKiBAcGFyYW0gc2VjcmV0QXJuIFRoZSBBUk4gb2YgdGhlIHNlY3JldFxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgU2VjcmV0cyBNYW5hZ2VyIGFjdGlvbnMgdG8gYWxsb3dcbiAgICogQHJldHVybnMgUG9saWN5U3RhdGVtZW50IGZvciBTZWNyZXRzIE1hbmFnZXIgYWNjZXNzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVNlY3JldHNNYW5hZ2VyUG9saWN5U3RhdGVtZW50KFxuICAgIHNlY3JldEFybjogc3RyaW5nLFxuICAgIGFjdGlvbnM6IHN0cmluZ1tdID0gWydzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZSddLFxuICApOiBpYW0uUG9saWN5U3RhdGVtZW50IHtcbiAgICByZXR1cm4gbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9ucyxcbiAgICAgIHJlc291cmNlczogW3NlY3JldEFybl0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHBvbGljeSBzdGF0ZW1lbnQgZm9yIEtNUyBrZXkgYWNjZXNzXG4gICAqXG4gICAqIEBwYXJhbSBrZXlBcm4gVGhlIEFSTiBvZiB0aGUgS01TIGtleVxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgS01TIGFjdGlvbnMgdG8gYWxsb3dcbiAgICogQHJldHVybnMgUG9saWN5U3RhdGVtZW50IGZvciBLTVMgYWNjZXNzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUttc1BvbGljeVN0YXRlbWVudChcbiAgICBrZXlBcm46IHN0cmluZyxcbiAgICBhY3Rpb25zOiBzdHJpbmdbXSA9IFsna21zOkRlY3J5cHQnLCAna21zOkdlbmVyYXRlRGF0YUtleSddLFxuICApOiBpYW0uUG9saWN5U3RhdGVtZW50IHtcbiAgICByZXR1cm4gbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9ucyxcbiAgICAgIHJlc291cmNlczogW2tleUFybl0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
235
+ LambdaIamUtils[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.LambdaIamUtils", version: "1.1.0" };
236
+ LambdaIamUtils.OBSERVABILITY_SUFFIX = '-secured';
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWlhbS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3VzZS1jYXNlcy91dGlsaXRpZXMvbGFtYmRhLWlhbS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFFQUFxRTtBQUNyRSxzQ0FBc0M7QUFDdEMsbUNBQW1DO0FBQ25DLDZDQUFvQztBQUNwQywyQ0FBMkM7QUFpRTNDOztHQUVHO0FBQ0gsTUFBYSxjQUFjO0lBRXpCOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQWlDO1FBQ25FLDBEQUEwRDtRQUMxRCxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0RyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLGVBQWUsa0JBQWtCLEVBQUUsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RKLElBQUksV0FBVyxHQUFHLGdCQUFnQixLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLGNBQWMsWUFBWSxFQUFFLENBQUM7UUFDNUYsTUFBTSxnQkFBZ0IsR0FBRztZQUN2QixpQ0FBaUM7WUFDakMsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO2dCQUN0QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLO2dCQUN4QixPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDaEMsU0FBUyxFQUFFO29CQUNULFdBQVc7aUJBQ1o7YUFDRixDQUFDO1lBQ0Ysc0RBQXNEO1lBQ3RELElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztnQkFDdEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztnQkFDeEIsT0FBTyxFQUFFO29C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QUN4QixPQUFPO1lBQ1AsU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsbUNBQW1DLENBQy9DLFNBQWlCLEVBQ2pCLFVBQW9CLENBQUMsK0JBQStCLENBQUM7UUFFckQsT0FBTyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7WUFDN0IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztZQUN4QixPQUFPO1lBQ1AsU0FBUyxFQUFFLENBQUMsU0FBUyxDQUFDO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsd0JBQXdCLENBQ3BDLE1BQWMsRUFDZCxVQUFvQixDQUFDLGFBQWEsRUFBRSxxQkFBcUIsQ0FBQztRQUUxRCxPQUFPLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUM3QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLO1lBQ3hCLE9BQU87WUFDUCxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUM7U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUE5UEgsd0NBK1BDOzs7QUE5UHdCLG1DQUFvQixHQUFHLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBOYW1lcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFN0YWNrIGluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhSWFtVXRpbHNTdGFja0luZm8ge1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcbiAgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTGFtYmRhIENsb3VkV2F0Y2ggTG9ncyBwZXJtaXNzaW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUxvZ3NQZXJtaXNzaW9uc1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgKHVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIG5hbWVzKVxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcblxuICAvKipcbiAgICogVGhlIGJhc2UgbmFtZSBvZiB0aGUgTGFtYmRhIGZ1bmN0aW9uXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQ3VzdG9tIGxvZyBncm91cCBuYW1lIHBhdHRlcm5cbiAgICogQGRlZmF1bHQgJy9hd3MvbGFtYmRhL3t1bmlxdWVGdW5jdGlvbk5hbWV9J1xuICAgKi9cbiAgcmVhZG9ubHkgbG9nR3JvdXBOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBV1MgcmVnaW9uIGZvciB0aGUgbG9nIGdyb3VwIEFSTlxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFXUyBhY2NvdW50IElEIGZvciB0aGUgbG9nIGdyb3VwIEFSTlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9ic2VydmFiaWxpdHkgaXMgZW5hYmxlZCBvciBub3QuIFRoaXMgd291bGQgaGF2ZSBhbiBpbXBhY3RcbiAgICogb24gdGhlIHJlc3VsdCBJQU0gcG9saWN5IGZvciB0aGUgTG9nR3JvdXAgZm9yIHRoZSBMYW1iZGEgZnVuY3Rpb25cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZU9ic2VydmFiaWxpdHk/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBjcmVhdGluZyBMYW1iZGEgbG9ncyBwZXJtaXNzaW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUxvZ3NQZXJtaXNzaW9uc1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IHN0YXRlbWVudHMgZm9yIENsb3VkV2F0Y2ggTG9nc1xuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5U3RhdGVtZW50czogaWFtLlBvbGljeVN0YXRlbWVudFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGZ1bmN0aW9uIG5hbWUgdGhhdCB3YXMgZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSB1bmlxdWVGdW5jdGlvbk5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBVdGlsaXR5IGNsYXNzIGZvciBjcmVhdGluZyBzZWN1cmUgTGFtYmRhIElBTSBwb2xpY3kgc3RhdGVtZW50cyB3aXRoIG1pbmltYWwgcGVybWlzc2lvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIExhbWJkYUlhbVV0aWxzIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPQlNFUlZBQklMSVRZX1NVRkZJWCA9ICctc2VjdXJlZCc7XG4gIC8qKlxuICAgKiBDcmVhdGVzIENsb3VkV2F0Y2ggTG9ncyBwb2xpY3kgc3RhdGVtZW50cyBmb3IgTGFtYmRhIGV4ZWN1dGlvblxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIE9iamVjdCBjb250YWluaW5nIHBvbGljeSBzdGF0ZW1lbnRzIGFuZCB0aGUgdW5pcXVlIGZ1bmN0aW9uIG5hbWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlTG9nc1Blcm1pc3Npb25zKHByb3BzOiBMYW1iZGFMb2dzUGVybWlzc2lvbnNQcm9wcyk6IExhbWJkYUxvZ3NQZXJtaXNzaW9uc1Jlc3VsdCB7XG4gICAgLy8gR2VuZXJhdGUgdW5pcXVlIGZ1bmN0aW9uIG5hbWUgdXNpbmcgY29uc3RydWN0IG5vZGUgcGF0aFxuICAgIGNvbnN0IHVuaXF1ZUZ1bmN0aW9uTmFtZSA9IExhbWJkYUlhbVV0aWxzLmdlbmVyYXRlVW5pcXVlRnVuY3Rpb25OYW1lKHByb3BzLnNjb3BlLCBwcm9wcy5mdW5jdGlvbk5hbWUpO1xuICAgIGNvbnN0IGxvZ0dyb3VwTmFtZSA9IHByb3BzLmxvZ0dyb3VwTmFtZSB8fCBgL2F3cy9sYW1iZGEvJHt1bmlxdWVGdW5jdGlvbk5hbWV9YCArIHByb3BzLmVuYWJsZU9ic2VydmFiaWxpdHkgPyBMYW1iZGFJYW1VdGlscy5PQlNFUlZBQklMSVRZX1NVRkZJWCA6ICcnO1xuICAgIGxldCBsb2dHcm91cEFybiA9IGBhcm46YXdzOmxvZ3M6JHtwcm9wcy5yZWdpb259OiR7cHJvcHMuYWNjb3VudH06bG9nLWdyb3VwOiR7bG9nR3JvdXBOYW1lfWA7XG4gICAgY29uc3QgcG9saWN5U3RhdGVtZW50cyA9IFtcbiAgICAgIC8vIFBlcm1pc3Npb24gdG8gY3JlYXRlIGxvZyBncm91cFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsnbG9nczpDcmVhdGVMb2dHcm91cCddLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBsb2dHcm91cEFybixcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICAgLy8gUGVybWlzc2lvbiB0byBjcmVhdGUgbG9nIHN0cmVhbXMgYW5kIHB1dCBsb2cgZXZlbnRzXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsXG4gICAgICAgICAgJ2xvZ3M6UHV0TG9nRXZlbnRzJyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgYCR7bG9nR3JvdXBBcm59OipgLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICBwb2xpY3lTdGF0ZW1lbnRzLFxuICAgICAgdW5pcXVlRnVuY3Rpb25OYW1lLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlTGFtYmRhVlBDUGVybWlzc2lvbnMoKTogaWFtLlBvbGljeVN0YXRlbWVudCB7XG4gICAgcmV0dXJuIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ2VjMjpDcmVhdGVOZXR3b3JrSW50ZXJmYWNlJyxcbiAgICAgICAgJ2VjMjpEZXNjcmliZU5ldHdvcmtJbnRlcmZhY2VzJyxcbiAgICAgICAgJ2VjMjpEZXNjcmliZVN1Ym5ldHMnLFxuICAgICAgICAnZWMyOkRlbGV0ZU5ldHdvcmtJbnRlcmZhY2UnLFxuICAgICAgICAnZWMyOkFzc2lnblByaXZhdGVJcEFkZHJlc3NlcycsXG4gICAgICAgICdlYzI6VW5hc3NpZ25Qcml2YXRlSXBBZGRyZXNzZXMnLFxuICAgICAgICAnZWMyOkRlc2NyaWJlU2VjdXJpdHlHcm91cHMnLFxuICAgICAgICAnZWMyOkRlc2NyaWJlVnBjcycsXG4gICAgICAgICdlYzI6R2V0U2VjdXJpdHlHcm91cHNGb3JWcGMnLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgdW5pcXVlIGZ1bmN0aW9uIG5hbWUgdXNpbmcgQ0RLJ3MgYnVpbHQtaW4gZnVuY3Rpb25hbGl0eVxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gYmFzZU5hbWUgVGhlIGJhc2UgbmFtZSBmb3IgdGhlIGZ1bmN0aW9uXG4gICAqIEByZXR1cm5zIFVuaXF1ZSBmdW5jdGlvbiBuYW1lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlVW5pcXVlRnVuY3Rpb25OYW1lKHNjb3BlOiBDb25zdHJ1Y3QsIGJhc2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtiYXNlTmFtZX0tJHtOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUoc2NvcGUsIHsgbWF4TGVuZ3RoOiA2NCAtIChiYXNlTmFtZS5sZW5ndGggKyAxKSB9KS50b0xvd2VyQ2FzZSgpfWA7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBWUEMgcGVybWlzc2lvbnMgZm9yIExhbWJkYSBmdW5jdGlvbnMgcnVubmluZyBpbiBWUENcbiAgICpcbiAgICogQHJldHVybnMgQXJyYXkgb2YgSUFNIFBvbGljeVN0YXRlbWVudHMgZm9yIFZQQyBhY2Nlc3NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlVnBjUGVybWlzc2lvbnMoKTogaWFtLlBvbGljeVN0YXRlbWVudFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnZWMyOkNyZWF0ZU5ldHdvcmtJbnRlcmZhY2UnLFxuICAgICAgICAgICdlYzI6RGVzY3JpYmVOZXR3b3JrSW50ZXJmYWNlcycsXG4gICAgICAgICAgJ2VjMjpEZWxldGVOZXR3b3JrSW50ZXJmYWNlJyxcbiAgICAgICAgICAnZWMyOkF0dGFjaE5ldHdvcmtJbnRlcmZhY2UnLFxuICAgICAgICAgICdlYzI6RGV0YWNoTmV0d29ya0ludGVyZmFjZScsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sIC8vIFZQQyBwZXJtaXNzaW9ucyByZXF1aXJlIHdpbGRjYXJkIHJlc291cmNlc1xuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIFgtUmF5IHRyYWNpbmcgcGVybWlzc2lvbnMgZm9yIExhbWJkYSBmdW5jdGlvbnNcbiAgICpcbiAgICogQHJldHVybnMgQXJyYXkgb2YgSUFNIFBvbGljeVN0YXRlbWVudHMgZm9yIFgtUmF5IHRyYWNpbmdcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlWFJheVBlcm1pc3Npb25zKCk6IGlhbS5Qb2xpY3lTdGF0ZW1lbnRbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ3hyYXk6UHV0VHJhY2VTZWdtZW50cycsXG4gICAgICAgICAgJ3hyYXk6UHV0VGVsZW1ldHJ5UmVjb3JkcycsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sIC8vIFgtUmF5IHBlcm1pc3Npb25zIHJlcXVpcmUgd2lsZGNhcmQgcmVzb3VyY2VzXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gZ2V0IHJlZ2lvbiBhbmQgYWNjb3VudCBmcm9tIGEgY29uc3RydWN0XG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEByZXR1cm5zIExhbWJkYUlhbVV0aWxzU3RhY2tJbmZvXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldFN0YWNrSW5mbyhzY29wZTogQ29uc3RydWN0KTogTGFtYmRhSWFtVXRpbHNTdGFja0luZm8ge1xuICAgIGNvbnN0IHN0YWNrID0gY2RrLlN0YWNrLm9mKHNjb3BlKTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVnaW9uOiBzdGFjay5yZWdpb24sXG4gICAgICBhY2NvdW50OiBzdGFjay5hY2NvdW50LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHBvbGljeSBzdGF0ZW1lbnQgZm9yIER5bmFtb0RCIHRhYmxlIGFjY2Vzc1xuICAgKlxuICAgKiBAcGFyYW0gdGFibGVBcm4gVGhlIEFSTiBvZiB0aGUgRHluYW1vREIgdGFibGVcbiAgICogQHBhcmFtIGFjdGlvbnMgVGhlIER5bmFtb0RCIGFjdGlvbnMgdG8gYWxsb3dcbiAgICogQHJldHVybnMgUG9saWN5U3RhdGVtZW50IGZvciBEeW5hbW9EQiBhY2Nlc3NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlRHluYW1vRGJQb2xpY3lTdGF0ZW1lbnQoXG4gICAgdGFibGVBcm46IHN0cmluZyxcbiAgICBhY3Rpb25zOiBzdHJpbmdbXSA9IFsnZHluYW1vZGI6R2V0SXRlbScsICdkeW5hbW9kYjpQdXRJdGVtJywgJ2R5bmFtb2RiOlVwZGF0ZUl0ZW0nLCAnZHluYW1vZGI6RGVsZXRlSXRlbScsICdkeW5hbW9kYjpRdWVyeScsICdkeW5hbW9kYjpTY2FuJ10sXG4gICk6IGlhbS5Qb2xpY3lTdGF0ZW1lbnQge1xuICAgIHJldHVybiBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VzOiBbdGFibGVBcm4sIGAke3RhYmxlQXJufS9pbmRleC8qYF0sIC8vIEluY2x1ZGUgR1NJIGFjY2Vzc1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBwb2xpY3kgc3RhdGVtZW50IGZvciBTMyBidWNrZXQgYWNjZXNzXG4gICAqXG4gICAqIEBwYXJhbSBidWNrZXRBcm4gVGhlIEFSTiBvZiB0aGUgUzMgYnVja2V0XG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBTMyBhY3Rpb25zIHRvIGFsbG93XG4gICAqIEBwYXJhbSBpbmNsdWRlT2JqZWN0cyBXaGV0aGVyIHRvIGluY2x1ZGUgb2JqZWN0LWxldmVsIHBlcm1pc3Npb25zXG4gICAqIEByZXR1cm5zIFBvbGljeVN0YXRlbWVudCBmb3IgUzMgYWNjZXNzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVMzUG9saWN5U3RhdGVtZW50KFxuICAgIGJ1Y2tldEFybjogc3RyaW5nLFxuICAgIGFjdGlvbnM6IHN0cmluZ1tdID0gWydzMzpHZXRPYmplY3QnLCAnczM6UHV0T2JqZWN0J10sXG4gICAgaW5jbHVkZU9iamVjdHM6IGJvb2xlYW4gPSB0cnVlLFxuICApOiBpYW0uUG9saWN5U3RhdGVtZW50IHtcbiAgICBjb25zdCByZXNvdXJjZXMgPSBbYnVja2V0QXJuXTtcbiAgICBpZiAoaW5jbHVkZU9iamVjdHMpIHtcbiAgICAgIHJlc291cmNlcy5wdXNoKGAke2J1Y2tldEFybn0vKmApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBwb2xpY3kgc3RhdGVtZW50IGZvciBTUVMgcXVldWUgYWNjZXNzXG4gICAqXG4gICAqIEBwYXJhbSBxdWV1ZUFybiBUaGUgQVJOIG9mIHRoZSBTUVMgcXVldWVcbiAgICogQHBhcmFtIGFjdGlvbnMgVGhlIFNRUyBhY3Rpb25zIHRvIGFsbG93XG4gICAqIEByZXR1cm5zIFBvbGljeVN0YXRlbWVudCBmb3IgU1FTIGFjY2Vzc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVTcXNQb2xpY3lTdGF0ZW1lbnQoXG4gICAgcXVldWVBcm46IHN0cmluZyxcbiAgICBhY3Rpb25zOiBzdHJpbmdbXSA9IFsnc3FzOlJlY2VpdmVNZXNzYWdlJywgJ3NxczpEZWxldGVNZXNzYWdlJywgJ3NxczpHZXRRdWV1ZUF0dHJpYnV0ZXMnXSxcbiAgKTogaWFtLlBvbGljeVN0YXRlbWVudCB7XG4gICAgcmV0dXJuIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnMsXG4gICAgICByZXNvdXJjZXM6IFtxdWV1ZUFybl0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHBvbGljeSBzdGF0ZW1lbnQgZm9yIFNOUyB0b3BpYyBhY2Nlc3NcbiAgICpcbiAgICogQHBhcmFtIHRvcGljQXJuIFRoZSBBUk4gb2YgdGhlIFNOUyB0b3BpY1xuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgU05TIGFjdGlvbnMgdG8gYWxsb3dcbiAgICogQHJldHVybnMgUG9saWN5U3RhdGVtZW50IGZvciBTTlMgYWNjZXNzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVNuc1BvbGljeVN0YXRlbWVudChcbiAgICB0b3BpY0Fybjogc3RyaW5nLFxuICAgIGFjdGlvbnM6IHN0cmluZ1tdID0gWydzbnM6UHVibGlzaCddLFxuICApOiBpYW0uUG9saWN5U3RhdGVtZW50IHtcbiAgICByZXR1cm4gbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9ucyxcbiAgICAgIHJlc291cmNlczogW3RvcGljQXJuXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcG9saWN5IHN0YXRlbWVudCBmb3IgU3RlcCBGdW5jdGlvbnMgZXhlY3V0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBzdGF0ZU1hY2hpbmVBcm4gVGhlIEFSTiBvZiB0aGUgU3RlcCBGdW5jdGlvbnMgc3RhdGUgbWFjaGluZVxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgU3RlcCBGdW5jdGlvbnMgYWN0aW9ucyB0byBhbGxvd1xuICAgKiBAcmV0dXJucyBQb2xpY3lTdGF0ZW1lbnQgZm9yIFN0ZXAgRnVuY3Rpb25zIGFjY2Vzc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVTdGVwRnVuY3Rpb25zUG9saWN5U3RhdGVtZW50KFxuICAgIHN0YXRlTWFjaGluZUFybjogc3RyaW5nLFxuICAgIGFjdGlvbnM6IHN0cmluZ1tdID0gWydzdGF0ZXM6U3RhcnRFeGVjdXRpb24nXSxcbiAgKTogaWFtLlBvbGljeVN0YXRlbWVudCB7XG4gICAgcmV0dXJuIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnMsXG4gICAgICByZXNvdXJjZXM6IFtzdGF0ZU1hY2hpbmVBcm5dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBwb2xpY3kgc3RhdGVtZW50IGZvciBTZWNyZXRzIE1hbmFnZXIgYWNjZXNzXG4gICAqXG4gICAqIEBwYXJhbSBzZWNyZXRBcm4gVGhlIEFSTiBvZiB0aGUgc2VjcmV0XG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBTZWNyZXRzIE1hbmFnZXIgYWN0aW9ucyB0byBhbGxvd1xuICAgKiBAcmV0dXJucyBQb2xpY3lTdGF0ZW1lbnQgZm9yIFNlY3JldHMgTWFuYWdlciBhY2Nlc3NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlU2VjcmV0c01hbmFnZXJQb2xpY3lTdGF0ZW1lbnQoXG4gICAgc2VjcmV0QXJuOiBzdHJpbmcsXG4gICAgYWN0aW9uczogc3RyaW5nW10gPSBbJ3NlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlJ10sXG4gICk6IGlhbS5Qb2xpY3lTdGF0ZW1lbnQge1xuICAgIHJldHVybiBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VzOiBbc2VjcmV0QXJuXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcG9saWN5IHN0YXRlbWVudCBmb3IgS01TIGtleSBhY2Nlc3NcbiAgICpcbiAgICogQHBhcmFtIGtleUFybiBUaGUgQVJOIG9mIHRoZSBLTVMga2V5XG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBLTVMgYWN0aW9ucyB0byBhbGxvd1xuICAgKiBAcmV0dXJucyBQb2xpY3lTdGF0ZW1lbnQgZm9yIEtNUyBhY2Nlc3NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlS21zUG9saWN5U3RhdGVtZW50KFxuICAgIGtleUFybjogc3RyaW5nLFxuICAgIGFjdGlvbnM6IHN0cmluZ1tdID0gWydrbXM6RGVjcnlwdCcsICdrbXM6R2VuZXJhdGVEYXRhS2V5J10sXG4gICk6IGlhbS5Qb2xpY3lTdGF0ZW1lbnQge1xuICAgIHJldHVybiBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VzOiBba2V5QXJuXSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -18,5 +18,5 @@ class CloudfrontDistributionObservabilityPropertyInjector {
18
18
  }
19
19
  exports.CloudfrontDistributionObservabilityPropertyInjector = CloudfrontDistributionObservabilityPropertyInjector;
20
20
  _a = JSII_RTTI_SYMBOL_1;
21
- CloudfrontDistributionObservabilityPropertyInjector[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.CloudfrontDistributionObservabilityPropertyInjector", version: "1.0.0" };
21
+ CloudfrontDistributionObservabilityPropertyInjector[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.CloudfrontDistributionObservabilityPropertyInjector", version: "1.1.0" };
22
22
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmcm9udC1kaXN0cmlidXRpb24tb2JzZXJ2YWJpbGl0eS1wcm9wZXJ0eS1pbmplY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy91dGlsaXRpZXMvb2JzZXJ2YWJpbGl0eS9jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1vYnNlcnZhYmlsaXR5LXByb3BlcnR5LWluamVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsK0RBQTBEO0FBRTFELE1BQWEsbURBQW1EO0lBRzlEO1FBQ0UsSUFBSSxDQUFDLGlCQUFpQixHQUFHLDZCQUFZLENBQUMscUJBQXFCLENBQUM7SUFDOUQsQ0FBQztJQUVELE1BQU0sQ0FBQyxhQUFrQixFQUFFLE9BQXlCO1FBQ2xELE9BQU87WUFDTCxhQUFhLEVBQUUsSUFBSTtZQUNuQixhQUFhLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxnQkFBZ0I7WUFDNUMsR0FBRyxhQUFhO1NBQ2pCLENBQUM7SUFDSixDQUFDOztBQWJILGtIQWVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uQ29udGV4dCwgSVByb3BlcnR5SW5qZWN0b3IgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBEaXN0cmlidXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udCc7XG5cbmV4cG9ydCBjbGFzcyBDbG91ZGZyb250RGlzdHJpYnV0aW9uT2JzZXJ2YWJpbGl0eVByb3BlcnR5SW5qZWN0b3IgaW1wbGVtZW50cyBJUHJvcGVydHlJbmplY3RvciB7XG4gIHJlYWRvbmx5IGNvbnN0cnVjdFVuaXF1ZUlkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RVbmlxdWVJZCA9IERpc3RyaWJ1dGlvbi5QUk9QRVJUWV9JTkpFQ1RJT05fSUQ7XG4gIH1cblxuICBpbmplY3Qob3JpZ2luYWxQcm9wczogYW55LCBjb250ZXh0OiBJbmplY3Rpb25Db250ZXh0KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgZW5hYmxlTG9nZ2luZzogdHJ1ZSxcbiAgICAgIGxvZ0ZpbGVQcmVmaXg6IGAke2NvbnRleHQuaWR9LWRpc3RyaWJ1dGlvbi1gLFxuICAgICAgLi4ub3JpZ2luYWxQcm9wcyxcbiAgICB9O1xuICB9XG5cbn0iXX0=
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Contains default constants for Observability related configuration
3
+ */
4
+ export declare class DefaultObservabilityConfig {
5
+ /**
6
+ * Default namespace for powertools
7
+ */
8
+ static readonly DEFAULT_METRIC_NAMESPACE = "appmod-catalog-blueprints";
9
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.DefaultObservabilityConfig = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
7
+ // SPDX-License-Identifier: Apache-2.0
8
+ /**
9
+ * Contains default constants for Observability related configuration
10
+ */
11
+ class DefaultObservabilityConfig {
12
+ }
13
+ exports.DefaultObservabilityConfig = DefaultObservabilityConfig;
14
+ _a = JSII_RTTI_SYMBOL_1;
15
+ DefaultObservabilityConfig[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DefaultObservabilityConfig", version: "1.1.0" };
16
+ /**
17
+ * Default namespace for powertools
18
+ */
19
+ DefaultObservabilityConfig.DEFAULT_METRIC_NAMESPACE = 'appmod-catalog-blueprints';
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1vYnNlcnZhYmlsaXR5LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy91dGlsaXRpZXMvb2JzZXJ2YWJpbGl0eS9kZWZhdWx0LW9ic2VydmFiaWxpdHktY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUV0Qzs7R0FFRztBQUNILE1BQWEsMEJBQTBCOztBQUF2QyxnRUFNQzs7O0FBSkM7O0tBRUs7QUFDa0IsbURBQXdCLEdBQUcsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogQ29udGFpbnMgZGVmYXVsdCBjb25zdGFudHMgZm9yIE9ic2VydmFiaWxpdHkgcmVsYXRlZCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBEZWZhdWx0T2JzZXJ2YWJpbGl0eUNvbmZpZyB7XG5cbiAgLyoqXG4gICAgICogRGVmYXVsdCBuYW1lc3BhY2UgZm9yIHBvd2VydG9vbHNcbiAgICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX01FVFJJQ19OQU1FU1BBQ0UgPSAnYXBwbW9kLWNhdGFsb2ctYmx1ZXByaW50cyc7XG59Il19
@@ -4,3 +4,4 @@ export * from './cloudfront-distribution-observability-property-injector';
4
4
  export * from './observable';
5
5
  export * from './powertools-config';
6
6
  export * from './log-group-data-protection-props';
7
+ export * from './default-observability-config';
@@ -22,4 +22,5 @@ __exportStar(require("./cloudfront-distribution-observability-property-injector"
22
22
  __exportStar(require("./observable"), exports);
23
23
  __exportStar(require("./powertools-config"), exports);
24
24
  __exportStar(require("./log-group-data-protection-props"), exports);
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvdXRpbGl0aWVzL29ic2VydmFiaWxpdHkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHFFQUFxRTtBQUNyRSxzQ0FBc0M7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdEMsMkVBQXlEO0FBQ3pELGtGQUFnRTtBQUNoRSw0RkFBMEU7QUFDMUUsK0NBQTZCO0FBQzdCLHNEQUFvQztBQUNwQyxvRUFBa0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCAqIGZyb20gJy4vbGFtYmRhLW9ic2VydmFiaWxpdHktcHJvcGVydHktaW5qZWN0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9zdGF0ZS1tYWNoaW5lLW9ic2VydmFiaWxpdHktcHJvcGVydHktaW5qZWN0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1vYnNlcnZhYmlsaXR5LXByb3BlcnR5LWluamVjdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vb2JzZXJ2YWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL3Bvd2VydG9vbHMtY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbG9nLWdyb3VwLWRhdGEtcHJvdGVjdGlvbi1wcm9wcyc7Il19
25
+ __exportStar(require("./default-observability-config"), exports);
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvdXRpbGl0aWVzL29ic2VydmFiaWxpdHkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHFFQUFxRTtBQUNyRSxzQ0FBc0M7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdEMsMkVBQXlEO0FBQ3pELGtGQUFnRTtBQUNoRSw0RkFBMEU7QUFDMUUsK0NBQTZCO0FBQzdCLHNEQUFvQztBQUNwQyxvRUFBa0Q7QUFDbEQsaUVBQStDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQgKiBmcm9tICcuL2xhbWJkYS1vYnNlcnZhYmlsaXR5LXByb3BlcnR5LWluamVjdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdGUtbWFjaGluZS1vYnNlcnZhYmlsaXR5LXByb3BlcnR5LWluamVjdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vY2xvdWRmcm9udC1kaXN0cmlidXRpb24tb2JzZXJ2YWJpbGl0eS1wcm9wZXJ0eS1pbmplY3Rvcic7XG5leHBvcnQgKiBmcm9tICcuL29ic2VydmFibGUnO1xuZXhwb3J0ICogZnJvbSAnLi9wb3dlcnRvb2xzLWNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2xvZy1ncm91cC1kYXRhLXByb3RlY3Rpb24tcHJvcHMnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWZhdWx0LW9ic2VydmFiaWxpdHktY29uZmlnJzsiXX0=
@@ -7,6 +7,7 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
7
7
  const aws_iam_1 = require("aws-cdk-lib/aws-iam");
8
8
  const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
9
9
  const aws_logs_1 = require("aws-cdk-lib/aws-logs");
10
+ const lambda_iam_utils_1 = require("../lambda-iam-utils");
10
11
  class LambdaObservabilityPropertyInjector {
11
12
  constructor(logGroupDataProtection) {
12
13
  this.constructUniqueId = aws_lambda_1.Function.PROPERTY_INJECTION_ID;
@@ -14,7 +15,7 @@ class LambdaObservabilityPropertyInjector {
14
15
  }
15
16
  inject(originalProps, _context) {
16
17
  const { region, account } = aws_cdk_lib_1.Stack.of(_context.scope);
17
- const logGroupName = `/aws/lambda/${originalProps.functionName}`;
18
+ const logGroupName = `/aws/lambda/${originalProps.functionName}${lambda_iam_utils_1.LambdaIamUtils.OBSERVABILITY_SUFFIX}`;
18
19
  const logGroupArn = `arn:aws:logs:${region}:${account}:log-group:${logGroupName}`;
19
20
  this.logGroupDataProtection.logGroupEncryptionKey?.grantEncryptDecrypt(new aws_iam_1.ServicePrincipal('logs.amazonaws.com', {
20
21
  conditions: {
@@ -24,7 +25,7 @@ class LambdaObservabilityPropertyInjector {
24
25
  },
25
26
  }));
26
27
  return {
27
- LogGroup: new aws_logs_1.LogGroup(_context.scope, `${_context.id}-LogGroup`, {
28
+ logGroup: new aws_logs_1.LogGroup(_context.scope, `${_context.id}-LogGroup`, {
28
29
  logGroupName,
29
30
  encryptionKey: this.logGroupDataProtection.logGroupEncryptionKey,
30
31
  dataProtectionPolicy: this.logGroupDataProtection.dataProtectionIdentifiers ? new aws_logs_1.DataProtectionPolicy({
@@ -39,5 +40,5 @@ class LambdaObservabilityPropertyInjector {
39
40
  }
40
41
  exports.LambdaObservabilityPropertyInjector = LambdaObservabilityPropertyInjector;
41
42
  _a = JSII_RTTI_SYMBOL_1;
42
- LambdaObservabilityPropertyInjector[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.LambdaObservabilityPropertyInjector", version: "1.0.0" };
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLW9ic2VydmFiaWxpdHktcHJvcGVydHktaW5qZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvdXRpbGl0aWVzL29ic2VydmFiaWxpdHkvbGFtYmRhLW9ic2VydmFiaWxpdHktcHJvcGVydHktaW5qZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBd0Y7QUFDeEYsaURBQXVEO0FBQ3ZELHVEQUEyRDtBQUMzRCxtREFBc0U7QUFHdEUsTUFBYSxtQ0FBbUM7SUFJOUMsWUFBWSxzQkFBbUQ7UUFDN0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLHFCQUFRLENBQUMscUJBQXFCLENBQUM7UUFDeEQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHNCQUFzQixDQUFDO0lBQ3ZELENBQUM7SUFFRCxNQUFNLENBQUMsYUFBa0IsRUFBRSxRQUEwQjtRQUNuRCxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxNQUFNLFlBQVksR0FBRyxlQUFlLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNqRSxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsTUFBTSxJQUFJLE9BQU8sY0FBYyxZQUFZLEVBQUUsQ0FBQztRQUNsRixJQUFJLENBQUMsc0JBQXNCLENBQUMscUJBQXFCLEVBQUUsbUJBQW1CLENBQUMsSUFBSSwwQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBRTtZQUNoSCxVQUFVLEVBQUU7Z0JBQ1YsU0FBUyxFQUFFO29CQUNULG9DQUFvQyxFQUFFLFdBQVc7aUJBQ2xEO2FBQ0Y7U0FDRixDQUFDLENBQUMsQ0FBQztRQUVKLE9BQU87WUFDTCxRQUFRLEVBQUUsSUFBSSxtQkFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxXQUFXLEVBQUU7Z0JBQ2hFLFlBQVk7Z0JBQ1osYUFBYSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxxQkFBcUI7Z0JBQ2hFLG9CQUFvQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsSUFBSSwrQkFBb0IsQ0FBQztvQkFDckcsV0FBVyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx5QkFBeUI7aUJBQ25FLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDZCxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO2FBQ3JDLENBQUM7WUFDRixPQUFPLEVBQUUsb0JBQU8sQ0FBQyxNQUFNO1lBQ3ZCLEdBQUcsYUFBYTtTQUNqQixDQUFDO0lBQ0osQ0FBQzs7QUFqQ0gsa0ZBbUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uQ29udGV4dCwgSVByb3BlcnR5SW5qZWN0b3IsIFJlbW92YWxQb2xpY3ksIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgU2VydmljZVByaW5jaXBhbCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgRnVuY3Rpb24sIFRyYWNpbmcgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IERhdGFQcm90ZWN0aW9uUG9saWN5LCBMb2dHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IExvZ0dyb3VwRGF0YVByb3RlY3Rpb25Qcm9wcyB9IGZyb20gJy4vbG9nLWdyb3VwLWRhdGEtcHJvdGVjdGlvbi1wcm9wcyc7XG5cbmV4cG9ydCBjbGFzcyBMYW1iZGFPYnNlcnZhYmlsaXR5UHJvcGVydHlJbmplY3RvciBpbXBsZW1lbnRzIElQcm9wZXJ0eUluamVjdG9yIHtcbiAgcmVhZG9ubHkgY29uc3RydWN0VW5pcXVlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9nR3JvdXBEYXRhUHJvdGVjdGlvbjogTG9nR3JvdXBEYXRhUHJvdGVjdGlvblByb3BzO1xuXG4gIGNvbnN0cnVjdG9yKGxvZ0dyb3VwRGF0YVByb3RlY3Rpb246IExvZ0dyb3VwRGF0YVByb3RlY3Rpb25Qcm9wcykge1xuICAgIHRoaXMuY29uc3RydWN0VW5pcXVlSWQgPSBGdW5jdGlvbi5QUk9QRVJUWV9JTkpFQ1RJT05fSUQ7XG4gICAgdGhpcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uID0gbG9nR3JvdXBEYXRhUHJvdGVjdGlvbjtcbiAgfVxuXG4gIGluamVjdChvcmlnaW5hbFByb3BzOiBhbnksIF9jb250ZXh0OiBJbmplY3Rpb25Db250ZXh0KTogYW55IHtcbiAgICBjb25zdCB7IHJlZ2lvbiwgYWNjb3VudCB9ID0gU3RhY2sub2YoX2NvbnRleHQuc2NvcGUpO1xuICAgIGNvbnN0IGxvZ0dyb3VwTmFtZSA9IGAvYXdzL2xhbWJkYS8ke29yaWdpbmFsUHJvcHMuZnVuY3Rpb25OYW1lfWA7XG4gICAgY29uc3QgbG9nR3JvdXBBcm4gPSBgYXJuOmF3czpsb2dzOiR7cmVnaW9ufToke2FjY291bnR9OmxvZy1ncm91cDoke2xvZ0dyb3VwTmFtZX1gO1xuICAgIHRoaXMubG9nR3JvdXBEYXRhUHJvdGVjdGlvbi5sb2dHcm91cEVuY3J5cHRpb25LZXk/LmdyYW50RW5jcnlwdERlY3J5cHQobmV3IFNlcnZpY2VQcmluY2lwYWwoJ2xvZ3MuYW1hem9uYXdzLmNvbScsIHtcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgQXJuRXF1YWxzOiB7XG4gICAgICAgICAgJ2ttczpFbmNyeXB0aW9uQ29udGV4dDphd3M6bG9nczphcm4nOiBsb2dHcm91cEFybixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIExvZ0dyb3VwOiBuZXcgTG9nR3JvdXAoX2NvbnRleHQuc2NvcGUsIGAke19jb250ZXh0LmlkfS1Mb2dHcm91cGAsIHtcbiAgICAgICAgbG9nR3JvdXBOYW1lLFxuICAgICAgICBlbmNyeXB0aW9uS2V5OiB0aGlzLmxvZ0dyb3VwRGF0YVByb3RlY3Rpb24ubG9nR3JvdXBFbmNyeXB0aW9uS2V5LFxuICAgICAgICBkYXRhUHJvdGVjdGlvblBvbGljeTogdGhpcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uLmRhdGFQcm90ZWN0aW9uSWRlbnRpZmllcnMgPyBuZXcgRGF0YVByb3RlY3Rpb25Qb2xpY3koe1xuICAgICAgICAgIGlkZW50aWZpZXJzOiB0aGlzLmxvZ0dyb3VwRGF0YVByb3RlY3Rpb24uZGF0YVByb3RlY3Rpb25JZGVudGlmaWVycyxcbiAgICAgICAgfSkgOiB1bmRlZmluZWQsXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIH0pLFxuICAgICAgdHJhY2luZzogVHJhY2luZy5BQ1RJVkUsXG4gICAgICAuLi5vcmlnaW5hbFByb3BzLFxuICAgIH07XG4gIH1cblxufSJdfQ==
43
+ LambdaObservabilityPropertyInjector[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.LambdaObservabilityPropertyInjector", version: "1.1.0" };
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLW9ic2VydmFiaWxpdHktcHJvcGVydHktaW5qZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvdXRpbGl0aWVzL29ic2VydmFiaWxpdHkvbGFtYmRhLW9ic2VydmFiaWxpdHktcHJvcGVydHktaW5qZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBd0Y7QUFDeEYsaURBQXVEO0FBQ3ZELHVEQUEyRDtBQUMzRCxtREFBc0U7QUFFdEUsMERBQXFEO0FBRXJELE1BQWEsbUNBQW1DO0lBSTlDLFlBQVksc0JBQW1EO1FBQzdELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxxQkFBUSxDQUFDLHFCQUFxQixDQUFDO1FBQ3hELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztJQUN2RCxDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWtCLEVBQUUsUUFBMEI7UUFDbkQsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsTUFBTSxZQUFZLEdBQUcsZUFBZSxhQUFhLENBQUMsWUFBWSxHQUFHLGlDQUFjLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN2RyxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsTUFBTSxJQUFJLE9BQU8sY0FBYyxZQUFZLEVBQUUsQ0FBQztRQUNsRixJQUFJLENBQUMsc0JBQXNCLENBQUMscUJBQXFCLEVBQUUsbUJBQW1CLENBQUMsSUFBSSwwQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBRTtZQUNoSCxVQUFVLEVBQUU7Z0JBQ1YsU0FBUyxFQUFFO29CQUNULG9DQUFvQyxFQUFFLFdBQVc7aUJBQ2xEO2FBQ0Y7U0FDRixDQUFDLENBQUMsQ0FBQztRQUVKLE9BQU87WUFDTCxRQUFRLEVBQUUsSUFBSSxtQkFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxXQUFXLEVBQUU7Z0JBQ2hFLFlBQVk7Z0JBQ1osYUFBYSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxxQkFBcUI7Z0JBQ2hFLG9CQUFvQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsSUFBSSwrQkFBb0IsQ0FBQztvQkFDckcsV0FBVyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx5QkFBeUI7aUJBQ25FLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDZCxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO2FBQ3JDLENBQUM7WUFDRixPQUFPLEVBQUUsb0JBQU8sQ0FBQyxNQUFNO1lBQ3ZCLEdBQUcsYUFBYTtTQUNqQixDQUFDO0lBQ0osQ0FBQzs7QUFqQ0gsa0ZBbUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uQ29udGV4dCwgSVByb3BlcnR5SW5qZWN0b3IsIFJlbW92YWxQb2xpY3ksIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgU2VydmljZVByaW5jaXBhbCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgRnVuY3Rpb24sIFRyYWNpbmcgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IERhdGFQcm90ZWN0aW9uUG9saWN5LCBMb2dHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IExvZ0dyb3VwRGF0YVByb3RlY3Rpb25Qcm9wcyB9IGZyb20gJy4vbG9nLWdyb3VwLWRhdGEtcHJvdGVjdGlvbi1wcm9wcyc7XG5pbXBvcnQgeyBMYW1iZGFJYW1VdGlscyB9IGZyb20gJy4uL2xhbWJkYS1pYW0tdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgTGFtYmRhT2JzZXJ2YWJpbGl0eVByb3BlcnR5SW5qZWN0b3IgaW1wbGVtZW50cyBJUHJvcGVydHlJbmplY3RvciB7XG4gIHJlYWRvbmx5IGNvbnN0cnVjdFVuaXF1ZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxvZ0dyb3VwRGF0YVByb3RlY3Rpb246IExvZ0dyb3VwRGF0YVByb3RlY3Rpb25Qcm9wcztcblxuICBjb25zdHJ1Y3Rvcihsb2dHcm91cERhdGFQcm90ZWN0aW9uOiBMb2dHcm91cERhdGFQcm90ZWN0aW9uUHJvcHMpIHtcbiAgICB0aGlzLmNvbnN0cnVjdFVuaXF1ZUlkID0gRnVuY3Rpb24uUFJPUEVSVFlfSU5KRUNUSU9OX0lEO1xuICAgIHRoaXMubG9nR3JvdXBEYXRhUHJvdGVjdGlvbiA9IGxvZ0dyb3VwRGF0YVByb3RlY3Rpb247XG4gIH1cblxuICBpbmplY3Qob3JpZ2luYWxQcm9wczogYW55LCBfY29udGV4dDogSW5qZWN0aW9uQ29udGV4dCk6IGFueSB7XG4gICAgY29uc3QgeyByZWdpb24sIGFjY291bnQgfSA9IFN0YWNrLm9mKF9jb250ZXh0LnNjb3BlKTtcbiAgICBjb25zdCBsb2dHcm91cE5hbWUgPSBgL2F3cy9sYW1iZGEvJHtvcmlnaW5hbFByb3BzLmZ1bmN0aW9uTmFtZX0ke0xhbWJkYUlhbVV0aWxzLk9CU0VSVkFCSUxJVFlfU1VGRklYfWA7XG4gICAgY29uc3QgbG9nR3JvdXBBcm4gPSBgYXJuOmF3czpsb2dzOiR7cmVnaW9ufToke2FjY291bnR9OmxvZy1ncm91cDoke2xvZ0dyb3VwTmFtZX1gO1xuICAgIHRoaXMubG9nR3JvdXBEYXRhUHJvdGVjdGlvbi5sb2dHcm91cEVuY3J5cHRpb25LZXk/LmdyYW50RW5jcnlwdERlY3J5cHQobmV3IFNlcnZpY2VQcmluY2lwYWwoJ2xvZ3MuYW1hem9uYXdzLmNvbScsIHtcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgQXJuRXF1YWxzOiB7XG4gICAgICAgICAgJ2ttczpFbmNyeXB0aW9uQ29udGV4dDphd3M6bG9nczphcm4nOiBsb2dHcm91cEFybixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxvZ0dyb3VwOiBuZXcgTG9nR3JvdXAoX2NvbnRleHQuc2NvcGUsIGAke19jb250ZXh0LmlkfS1Mb2dHcm91cGAsIHtcbiAgICAgICAgbG9nR3JvdXBOYW1lLFxuICAgICAgICBlbmNyeXB0aW9uS2V5OiB0aGlzLmxvZ0dyb3VwRGF0YVByb3RlY3Rpb24ubG9nR3JvdXBFbmNyeXB0aW9uS2V5LFxuICAgICAgICBkYXRhUHJvdGVjdGlvblBvbGljeTogdGhpcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uLmRhdGFQcm90ZWN0aW9uSWRlbnRpZmllcnMgPyBuZXcgRGF0YVByb3RlY3Rpb25Qb2xpY3koe1xuICAgICAgICAgIGlkZW50aWZpZXJzOiB0aGlzLmxvZ0dyb3VwRGF0YVByb3RlY3Rpb24uZGF0YVByb3RlY3Rpb25JZGVudGlmaWVycyxcbiAgICAgICAgfSkgOiB1bmRlZmluZWQsXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIH0pLFxuICAgICAgdHJhY2luZzogVHJhY2luZy5BQ1RJVkUsXG4gICAgICAuLi5vcmlnaW5hbFByb3BzLFxuICAgIH07XG4gIH1cblxufSJdfQ==
@@ -21,5 +21,5 @@ class PowertoolsConfig {
21
21
  }
22
22
  exports.PowertoolsConfig = PowertoolsConfig;
23
23
  _a = JSII_RTTI_SYMBOL_1;
24
- PowertoolsConfig[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.PowertoolsConfig", version: "1.0.0" };
24
+ PowertoolsConfig[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.PowertoolsConfig", version: "1.1.0" };
25
25
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG93ZXJ0b29scy1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvdXRpbGl0aWVzL29ic2VydmFiaWxpdHkvcG93ZXJ0b29scy1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxNQUFhLGdCQUFnQjtJQUNwQixNQUFNLENBQUMsMkJBQTJCLENBQUMsc0JBQStCLEtBQUssRUFBRSxtQkFBMkIsZ0JBQWdCLEVBQUUsY0FBc0Isd0JBQXdCO1FBQ3pLLElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUN4QixPQUFPO2dCQUNMLDRCQUE0QixFQUFFLGdCQUFnQjtnQkFDOUMsdUJBQXVCLEVBQUUsV0FBVzthQUNyQyxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPO2dCQUNMLDJCQUEyQixFQUFFLE1BQU07Z0JBQ25DLHlCQUF5QixFQUFFLE1BQU07YUFDbEMsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDOztBQWJILDRDQWNDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFBvd2VydG9vbHNDb25maWcge1xuICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlRGVmYXVsdExhbWJkYUNvbmZpZyhlbmFibGVPYnNlcnZhYmlsaXR5OiBib29sZWFuID0gZmFsc2UsIG1ldHJpY3NOYW1lc3BhY2U6IHN0cmluZyA9ICdhcHBtb2QtY2F0YWxvZycsIHNlcnZpY2VOYW1lOiBzdHJpbmcgPSAnYXBwbW9kLWNhdGFsb2ctc2VydmljZScpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBpZiAoZW5hYmxlT2JzZXJ2YWJpbGl0eSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUE9XRVJUT09MU19NRVRSSUNTX05BTUVTUEFDRTogbWV0cmljc05hbWVzcGFjZSxcbiAgICAgICAgUE9XRVJUT09MU19TRVJWSUNFX05BTUU6IHNlcnZpY2VOYW1lLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUE9XRVJUT09MU19NRVRSSUNTX0RJU0FCTEVEOiAndHJ1ZScsXG4gICAgICAgIFBPV0VSVE9PTFNfVFJBQ0VfRElTQUJMRUQ6ICd0cnVlJyxcbiAgICAgIH07XG4gICAgfVxuICB9XG59Il19
@@ -45,5 +45,5 @@ class StateMachineObservabilityPropertyInjector {
45
45
  }
46
46
  exports.StateMachineObservabilityPropertyInjector = StateMachineObservabilityPropertyInjector;
47
47
  _a = JSII_RTTI_SYMBOL_1;
48
- StateMachineObservabilityPropertyInjector[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.StateMachineObservabilityPropertyInjector", version: "1.0.0" };
48
+ StateMachineObservabilityPropertyInjector[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.StateMachineObservabilityPropertyInjector", version: "1.1.0" };
49
49
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtbWFjaGluZS1vYnNlcnZhYmlsaXR5LXByb3BlcnR5LWluamVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXNlLWNhc2VzL3V0aWxpdGllcy9vYnNlcnZhYmlsaXR5L3N0YXRlLW1hY2hpbmUtb2JzZXJ2YWJpbGl0eS1wcm9wZXJ0eS1pbmplY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUErRjtBQUMvRixpREFBdUQ7QUFDdkQsbURBQXNFO0FBQ3RFLHFFQUF1RTtBQUd2RSxNQUFhLHlDQUF5QztJQUlwRCxZQUFZLHNCQUFtRDtRQUM3RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0NBQVksQ0FBQyxxQkFBcUIsQ0FBQztRQUM1RCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUM7SUFDdkQsQ0FBQztJQUVELE1BQU0sQ0FBQyxhQUFrQixFQUFFLFFBQTBCO1FBQ25ELE1BQU0sVUFBVSxHQUFHLG1CQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtZQUMxRCxTQUFTLEVBQUUsR0FBRztTQUNmLENBQUMsQ0FBQztRQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELE1BQU0sWUFBWSxHQUFHLHlCQUF5QixVQUFVLGVBQWUsQ0FBQztRQUN4RSxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsTUFBTSxJQUFJLE9BQU8sY0FBYyxZQUFZLEVBQUUsQ0FBQztRQUNsRixJQUFJLENBQUMsc0JBQXNCLENBQUMscUJBQXFCLEVBQUUsbUJBQW1CLENBQUMsSUFBSSwwQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBRTtZQUNoSCxVQUFVLEVBQUU7Z0JBQ1YsU0FBUyxFQUFFO29CQUNULG9DQUFvQyxFQUFFLFdBQVc7aUJBQ2xEO2FBQ0Y7U0FDRixDQUFDLENBQUMsQ0FBQztRQUVKLE9BQU87WUFDTCxjQUFjLEVBQUUsSUFBSTtZQUNwQixJQUFJLEVBQUU7Z0JBQ0osV0FBVyxFQUFFLElBQUksbUJBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsV0FBVyxFQUFFO29CQUNuRSxZQUFZO29CQUNaLGFBQWEsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMscUJBQXFCO29CQUNoRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLElBQUksK0JBQW9CLENBQUM7d0JBQ3JHLFdBQVcsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMseUJBQXlCO3FCQUNuRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7b0JBQ2QsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztpQkFDckMsQ0FBQztnQkFDRixLQUFLLEVBQUUsNEJBQVEsQ0FBQyxHQUFHO2FBQ3BCO1lBQ0QsR0FBRyxhQUFhO1NBQ2pCLENBQUM7SUFDSixDQUFDOztBQXZDSCw4RkF5Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Db250ZXh0LCBJUHJvcGVydHlJbmplY3RvciwgTmFtZXMsIFJlbW92YWxQb2xpY3ksIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgU2VydmljZVByaW5jaXBhbCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgRGF0YVByb3RlY3Rpb25Qb2xpY3ksIExvZ0dyb3VwIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgTG9nTGV2ZWwsIFN0YXRlTWFjaGluZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCB7IExvZ0dyb3VwRGF0YVByb3RlY3Rpb25Qcm9wcyB9IGZyb20gJy4vbG9nLWdyb3VwLWRhdGEtcHJvdGVjdGlvbi1wcm9wcyc7XG5cbmV4cG9ydCBjbGFzcyBTdGF0ZU1hY2hpbmVPYnNlcnZhYmlsaXR5UHJvcGVydHlJbmplY3RvciBpbXBsZW1lbnRzIElQcm9wZXJ0eUluamVjdG9yIHtcbiAgcmVhZG9ubHkgY29uc3RydWN0VW5pcXVlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9nR3JvdXBEYXRhUHJvdGVjdGlvbjogTG9nR3JvdXBEYXRhUHJvdGVjdGlvblByb3BzO1xuXG4gIGNvbnN0cnVjdG9yKGxvZ0dyb3VwRGF0YVByb3RlY3Rpb246IExvZ0dyb3VwRGF0YVByb3RlY3Rpb25Qcm9wcykge1xuICAgIHRoaXMuY29uc3RydWN0VW5pcXVlSWQgPSBTdGF0ZU1hY2hpbmUuUFJPUEVSVFlfSU5KRUNUSU9OX0lEO1xuICAgIHRoaXMubG9nR3JvdXBEYXRhUHJvdGVjdGlvbiA9IGxvZ0dyb3VwRGF0YVByb3RlY3Rpb247XG4gIH1cblxuICBpbmplY3Qob3JpZ2luYWxQcm9wczogYW55LCBfY29udGV4dDogSW5qZWN0aW9uQ29udGV4dCk6IGFueSB7XG4gICAgY29uc3QgbmFtZVByZWZpeCA9IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZShfY29udGV4dC5zY29wZSwge1xuICAgICAgbWF4TGVuZ3RoOiAxMDAsXG4gICAgfSk7XG4gICAgY29uc3QgeyByZWdpb24sIGFjY291bnQgfSA9IFN0YWNrLm9mKF9jb250ZXh0LnNjb3BlKTtcbiAgICBjb25zdCBsb2dHcm91cE5hbWUgPSBgL2F3cy9zZm4tc3RhdGVtYWNoaW5lLyR7bmFtZVByZWZpeH0tc3RhdGVtYWNoaW5lYDtcbiAgICBjb25zdCBsb2dHcm91cEFybiA9IGBhcm46YXdzOmxvZ3M6JHtyZWdpb259OiR7YWNjb3VudH06bG9nLWdyb3VwOiR7bG9nR3JvdXBOYW1lfWA7XG4gICAgdGhpcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uLmxvZ0dyb3VwRW5jcnlwdGlvbktleT8uZ3JhbnRFbmNyeXB0RGVjcnlwdChuZXcgU2VydmljZVByaW5jaXBhbCgnbG9ncy5hbWF6b25hd3MuY29tJywge1xuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBBcm5FcXVhbHM6IHtcbiAgICAgICAgICAna21zOkVuY3J5cHRpb25Db250ZXh0OmF3czpsb2dzOmFybic6IGxvZ0dyb3VwQXJuLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHJhY2luZ0VuYWJsZWQ6IHRydWUsXG4gICAgICBsb2dzOiB7XG4gICAgICAgIGRlc3RpbmF0aW9uOiBuZXcgTG9nR3JvdXAoX2NvbnRleHQuc2NvcGUsIGAke19jb250ZXh0LmlkfS1Mb2dHcm91cGAsIHtcbiAgICAgICAgICBsb2dHcm91cE5hbWUsXG4gICAgICAgICAgZW5jcnlwdGlvbktleTogdGhpcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uLmxvZ0dyb3VwRW5jcnlwdGlvbktleSxcbiAgICAgICAgICBkYXRhUHJvdGVjdGlvblBvbGljeTogdGhpcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uLmRhdGFQcm90ZWN0aW9uSWRlbnRpZmllcnMgPyBuZXcgRGF0YVByb3RlY3Rpb25Qb2xpY3koe1xuICAgICAgICAgICAgaWRlbnRpZmllcnM6IHRoaXMubG9nR3JvdXBEYXRhUHJvdGVjdGlvbi5kYXRhUHJvdGVjdGlvbklkZW50aWZpZXJzLFxuICAgICAgICAgIH0pIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgICAgfSksXG4gICAgICAgIGxldmVsOiBMb2dMZXZlbC5BTEwsXG4gICAgICB9LFxuICAgICAgLi4ub3JpZ2luYWxQcm9wcyxcbiAgICB9O1xuICB9XG5cbn0iXX0=
@@ -249,5 +249,5 @@ class Frontend extends constructs_1.Construct {
249
249
  }
250
250
  exports.Frontend = Frontend;
251
251
  _a = JSII_RTTI_SYMBOL_1;
252
- Frontend[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.Frontend", version: "1.0.0" };
252
+ Frontend[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.Frontend", version: "1.1.0" };
253
253
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlbmQtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdXNlLWNhc2VzL3dlYmFwcC9mcm9udGVuZC1jb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBRXRDLDZCQUE2QjtBQUM3Qiw2Q0FBNEU7QUFFNUUsK0RBU29DO0FBQ3BDLCtFQUFvRTtBQUNwRSxpREFBOEQ7QUFDOUQseURBQTZFO0FBQzdFLHlFQUFtRTtBQUNuRSwrQ0FBaUY7QUFDakYsNkRBQWtEO0FBQ2xELHFFQUF5RTtBQUN6RSwyQ0FBdUM7QUFDdkMsNENBQW1GO0FBRW5GOztHQUVHO0FBQ1UsUUFBQSwyQkFBMkIsR0FBb0I7SUFDMUQ7UUFDRSxVQUFVLEVBQUUsR0FBRztRQUNmLGtCQUFrQixFQUFFLEdBQUc7UUFDdkIsZ0JBQWdCLEVBQUUsYUFBYTtLQUNoQztJQUNEO1FBQ0UsVUFBVSxFQUFFLEdBQUc7UUFDZixrQkFBa0IsRUFBRSxHQUFHO1FBQ3ZCLGdCQUFnQixFQUFFLGFBQWE7S0FDaEM7Q0FDRixDQUFDO0FBdURGOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsc0JBQVM7SUFZckM7Ozs7O09BS0c7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM5QiwrQkFBaUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUM1QixJQUFJLCtEQUFtRCxFQUFFLENBQzFELENBQUM7UUFDSixDQUFDO1FBRUQsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0Isa0NBQWtDO1FBQ2xDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLElB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cUJBQU8sQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUU7Z0JBQzNELElBQUksRUFBRSxZQUFZLENBQUMsVUFBVTtnQkFDN0IsVUFBVSxFQUFFLFlBQVksQ0FBQyxVQUFVO2dCQUNuQyxNQUFNLEVBQUUsMEJBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxzQ0FBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDeEUsQ0FBQyxDQUFDO1lBRUgseUNBQXlDO1lBQ3pDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEdBQUc7UUFDUixPQUFPLElBQUksQ0FBQyxVQUFVO1lBQ3BCLENBQUMsQ0FBQyxXQUFXLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDOUIsQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFRDs7O09BR0c7SUFDSSxzQkFBc0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDO0lBQ2xELENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUNoQyxDQUFDOztBQWxQSCw0QkFtUEMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEb2NrZXJJbWFnZSwgUHJvcGVydHlJbmplY3RvcnMsIFJlbW92YWxQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJQ2VydGlmaWNhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJztcbmltcG9ydCB7XG4gIERpc3RyaWJ1dGlvbixcbiAgRGlzdHJpYnV0aW9uUHJvcHMsXG4gIEVycm9yUmVzcG9uc2UsXG4gIEZ1bmN0aW9uIGFzIENsb3VkRnJvbnRGdW5jdGlvbixcbiAgRnVuY3Rpb25Db2RlLFxuICBGdW5jdGlvbkV2ZW50VHlwZSxcbiAgUHJpY2VDbGFzcyxcbiAgVmlld2VyUHJvdG9jb2xQb2xpY3ksXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250JztcbmltcG9ydCB7IFMzQnVja2V0T3JpZ2luIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQtb3JpZ2lucyc7XG5pbXBvcnQgeyBFZmZlY3QsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQVJlY29yZCwgSUhvc3RlZFpvbmUsIFJlY29yZFRhcmdldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzJztcbmltcG9ydCB7IENsb3VkRnJvbnRUYXJnZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzJztcbmltcG9ydCB7IEJsb2NrUHVibGljQWNjZXNzLCBCdWNrZXQsIEJ1Y2tldEVuY3J5cHRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQXNzZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbmltcG9ydCB7IEJ1Y2tldERlcGxveW1lbnQsIFNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1kZXBsb3ltZW50JztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQ2xvdWRmcm9udERpc3RyaWJ1dGlvbk9ic2VydmFiaWxpdHlQcm9wZXJ0eUluamVjdG9yIH0gZnJvbSAnLi4vdXRpbGl0aWVzJztcblxuLyoqXG4gKiBEZWZhdWx0IENsb3VkRnJvbnQgZXJyb3IgcmVzcG9uc2VzIGZvciBTaW5nbGUgUGFnZSBBcHBsaWNhdGlvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1BBX0VSUk9SX1JFU1BPTlNFUzogRXJyb3JSZXNwb25zZVtdID0gW1xuICB7XG4gICAgaHR0cFN0YXR1czogNDAzLFxuICAgIHJlc3BvbnNlSHR0cFN0YXR1czogMjAwLFxuICAgIHJlc3BvbnNlUGFnZVBhdGg6ICcvaW5kZXguaHRtbCcsXG4gIH0sXG4gIHtcbiAgICBodHRwU3RhdHVzOiA0MDQsXG4gICAgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsXG4gICAgcmVzcG9uc2VQYWdlUGF0aDogJy9pbmRleC5odG1sJyxcbiAgfSxcbl07XG5cbi8qKlxuICogQ3VzdG9tIGRvbWFpbiBjb25maWd1cmF0aW9uIGZvciB0aGUgZnJvbnRlbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21Eb21haW5Db25maWcge1xuICAvKiogRG9tYWluIG5hbWUgZm9yIHRoZSBmcm9udGVuZCAoZS5nLiwgJ2FwcC5leGFtcGxlLmNvbScpICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWU6IHN0cmluZztcbiAgLyoqIFNTTCBjZXJ0aWZpY2F0ZSBmb3IgdGhlIGRvbWFpbiAocmVxdWlyZWQgd2hlbiBkb21haW5OYW1lIGlzIHByb3ZpZGVkKSAqL1xuICByZWFkb25seSBjZXJ0aWZpY2F0ZTogSUNlcnRpZmljYXRlO1xuICAvKiogT3B0aW9uYWwgaG9zdGVkIHpvbmUgZm9yIGF1dG9tYXRpYyBETlMgcmVjb3JkIGNyZWF0aW9uICovXG4gIHJlYWRvbmx5IGhvc3RlZFpvbmU/OiBJSG9zdGVkWm9uZTtcbn1cblxuLyoqXG4gKiBBZGRpdGlvbmFsIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRpdGlvbmFsRGlzdHJpYnV0aW9uUHJvcHMge1xuICAvKiogT3B0aW9uYWwgY29tbWVudCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiAqL1xuICByZWFkb25seSBjb21tZW50Pzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgZW5hYmxlZCBmbGFnIGZvciB0aGUgZGlzdHJpYnV0aW9uICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuICAvKiogT3B0aW9uYWwgcHJpY2UgY2xhc3MgZm9yIHRoZSBkaXN0cmlidXRpb24gKi9cbiAgcmVhZG9ubHkgcHJpY2VDbGFzcz86IFByaWNlQ2xhc3M7XG4gIC8qKiBPcHRpb25hbCB3ZWIgQUNMIElEIGZvciB0aGUgZGlzdHJpYnV0aW9uICovXG4gIHJlYWRvbmx5IHdlYkFjbElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSBGcm9udGVuZCBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGcm9udGVuZFByb3BzIHtcbiAgLyoqIEJhc2UgZGlyZWN0b3J5IG9mIHRoZSBmcm9udGVuZCBzb3VyY2UgY29kZSAqL1xuICByZWFkb25seSBzb3VyY2VEaXJlY3Rvcnk6IHN0cmluZztcbiAgLyoqIERpcmVjdG9yeSB3aGVyZSBidWlsZCBhcnRpZmFjdHMgYXJlIGxvY2F0ZWQgYWZ0ZXIgYnVpbGQgY29tbWFuZCBjb21wbGV0ZXMgKGRlZmF1bHRzIHRvICd7c291cmNlRGlyZWN0b3J5fS9idWlsZCcpICovXG4gIHJlYWRvbmx5IGJ1aWxkT3V0cHV0RGlyZWN0b3J5Pzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgYnVpbGQgY29tbWFuZCAoZGVmYXVsdHMgdG8gJ25wbSBydW4gYnVpbGQnKSAqL1xuICByZWFkb25seSBidWlsZENvbW1hbmQ/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBjdXN0b20gZG9tYWluIGNvbmZpZ3VyYXRpb24gKi9cbiAgcmVhZG9ubHkgY3VzdG9tRG9tYWluPzogQ3VzdG9tRG9tYWluQ29uZmlnO1xuICAvKiogT3B0aW9uYWwgQ2xvdWRGcm9udCBlcnJvciByZXNwb25zZXMgKGRlZmF1bHRzIHRvIFNQQS1mcmllbmRseSByZXNwb25zZXMpICovXG4gIHJlYWRvbmx5IGVycm9yUmVzcG9uc2VzPzogRXJyb3JSZXNwb25zZVtdO1xuICAvKiogT3B0aW9uYWwgYWRkaXRpb25hbCBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBwcm9wZXJ0aWVzICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvblByb3BzPzogQWRkaXRpb25hbERpc3RyaWJ1dGlvblByb3BzO1xuICAvKiogT3B0aW9uYWwgZmxhZyB0byBza2lwIHRoZSBidWlsZCBwcm9jZXNzICh1c2VmdWwgZm9yIHByZS1idWlsdCBhcnRpZmFjdHMpICovXG4gIHJlYWRvbmx5IHNraXBCdWlsZD86IGJvb2xlYW47XG4gIC8qKiBPcHRpb25hbCByZW1vdmFsIHBvbGljeSBmb3IgYWxsIHJlc291cmNlcyAoZGVmYXVsdHMgdG8gREVTVFJPWSkgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG4gIC8qKlxuICAgKiBFbmFibGUgbG9nZ2luZyBhbmQgdHJhY2luZyBmb3IgYWxsIHN1cHBvcnRpbmcgcmVzb3VyY2VcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZU9ic2VydmFiaWxpdHk/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEZyb250ZW5kIGNvbnN0cnVjdCB0aGF0IGRlcGxveXMgYSBmcm9udGVuZCBhcHBsaWNhdGlvbiB0byBTMyBhbmQgQ2xvdWRGcm9udFxuICpcbiAqIFRoaXMgY29uc3RydWN0IHByb3ZpZGVzIGEgY29tcGxldGUgc29sdXRpb24gZm9yIGhvc3Rpbmcgc3RhdGljIGZyb250ZW5kIGFwcGxpY2F0aW9uc1xuICogd2l0aCB0aGUgZm9sbG93aW5nIGZlYXR1cmVzOlxuICogLSBTMyBidWNrZXQgZm9yIGhvc3Rpbmcgc3RhdGljIGFzc2V0cyB3aXRoIHNlY3VyaXR5IGJlc3QgcHJhY3RpY2VzXG4gKiAtIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIGZvciBnbG9iYWwgY29udGVudCBkZWxpdmVyeVxuICogLSBPcHRpb25hbCBjdXN0b20gZG9tYWluIHdpdGggU1NMIGNlcnRpZmljYXRlXG4gKiAtIEF1dG9tYXRpYyBidWlsZCBwcm9jZXNzIGV4ZWN1dGlvblxuICogLSBTUEEtZnJpZW5kbHkgZXJyb3IgaGFuZGxpbmcgYnkgZGVmYXVsdFxuICogLSBTZWN1cml0eSBjb25maWd1cmF0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgRnJvbnRlbmQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKiogVGhlIFMzIGJ1Y2tldCBob3N0aW5nIHRoZSBmcm9udGVuZCBhc3NldHMgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1Y2tldDogQnVja2V0O1xuICAvKiogVGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uICovXG4gIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb246IERpc3RyaWJ1dGlvbjtcbiAgLyoqIFRoZSBidWNrZXQgZGVwbG95bWVudCB0aGF0IHVwbG9hZHMgdGhlIGZyb250ZW5kIGFzc2V0cyAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVja2V0RGVwbG95bWVudDogQnVja2V0RGVwbG95bWVudDtcbiAgLyoqIFRoZSBjdXN0b20gZG9tYWluIG5hbWUgKGlmIGNvbmZpZ3VyZWQpICovXG4gIHB1YmxpYyByZWFkb25seSBkb21haW5OYW1lPzogc3RyaW5nO1xuICAvKiogVGhlIEFzc2V0IGNvbnRhaW5pbmcgdGhlIGZyb250ZW5kIHNvdXJjZSBjb2RlICovXG4gIHB1YmxpYyByZWFkb25seSBhc3NldD86IEFzc2V0O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEZyb250ZW5kXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IElEXG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgZnJvbnRlbmQgcHJvcGVydGllc1xuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEZyb250ZW5kUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKHByb3BzLmVuYWJsZU9ic2VydmFiaWxpdHkpIHtcbiAgICAgIFByb3BlcnR5SW5qZWN0b3JzLm9mKHRoaXMpLmFkZChcbiAgICAgICAgbmV3IENsb3VkZnJvbnREaXN0cmlidXRpb25PYnNlcnZhYmlsaXR5UHJvcGVydHlJbmplY3RvcigpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSByZXF1aXJlZCBwYXJhbWV0ZXJzXG4gICAgdGhpcy5fdmFsaWRhdGVQcm9wcyhwcm9wcyk7XG5cbiAgICAvLyBHZXQgcmVtb3ZhbCBwb2xpY3kgd2l0aCBkZWZhdWx0XG4gICAgY29uc3QgcmVtb3ZhbFBvbGljeSA9IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZO1xuXG4gICAgLy8gQ3JlYXRlIGFzc2V0IGZvciBzb3VyY2UgY29kZSB3aXRoIG9wdGlvbmFsIGJ1bmRsaW5nXG4gICAgaWYgKCFwcm9wcy5za2lwQnVpbGQpIHtcbiAgICAgIHRoaXMuYXNzZXQgPSB0aGlzLl9jcmVhdGVBc3NldChwcm9wcyk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIFMzIGJ1Y2tldCBmb3IgaG9zdGluZ1xuICAgIHRoaXMuYnVja2V0ID0gbmV3IEJ1Y2tldCh0aGlzLCAnRnJvbnRlbmRCdWNrZXQnLCB7XG4gICAgICBlbmNyeXB0aW9uOiBCdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgICBibG9ja1B1YmxpY0FjY2VzczogQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcmVtb3ZhbFBvbGljeSxcbiAgICAgIGF1dG9EZWxldGVPYmplY3RzOiByZW1vdmFsUG9saWN5ID09PSBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb25cbiAgICB0aGlzLmRpc3RyaWJ1dGlvbiA9IHRoaXMuX2NyZWF0ZURpc3RyaWJ1dGlvbihwcm9wcywgcmVtb3ZhbFBvbGljeSk7XG5cbiAgICAvLyBEZXBsb3kgZnJvbnRlbmQgYXNzZXRzIHRvIFMzXG4gICAgY29uc3QgYnVpbGRPdXRwdXREaXJlY3RvcnkgPSBwcm9wcy5idWlsZE91dHB1dERpcmVjdG9yeSB8fCBwYXRoLmpvaW4ocHJvcHMuc291cmNlRGlyZWN0b3J5LCAnYnVpbGQnKTtcbiAgICB0aGlzLmJ1Y2tldERlcGxveW1lbnQgPSBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCAnRnJvbnRlbmREZXBsb3ltZW50Jywge1xuICAgICAgc291cmNlczogdGhpcy5hc3NldFxuICAgICAgICA/IFtTb3VyY2UuYnVja2V0KHRoaXMuYXNzZXQuYnVja2V0LCB0aGlzLmFzc2V0LnMzT2JqZWN0S2V5KV1cbiAgICAgICAgOiBbU291cmNlLmFzc2V0KGJ1aWxkT3V0cHV0RGlyZWN0b3J5KV0sXG4gICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogdGhpcy5idWNrZXQsXG4gICAgICBkaXN0cmlidXRpb246IHRoaXMuZGlzdHJpYnV0aW9uLFxuICAgICAgZGlzdHJpYnV0aW9uUGF0aHM6IFsnLyonXSxcbiAgICB9KTtcblxuICAgIHRoaXMuYnVja2V0RGVwbG95bWVudC5oYW5kbGVyUm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnY2xvdWRmcm9udDpHZXRJbnZhbGlkYXRpb24nLFxuICAgICAgICAnY2xvdWRmcm9udDpDcmVhdGVJbnZhbGlkYXRpb24nLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuXG4gICAgLy8gTm90ZTogQnVja2V0RGVwbG95bWVudCBkb2Vzbid0IHN1cHBvcnQgYXBwbHlSZW1vdmFsUG9saWN5IGRpcmVjdGx5XG4gICAgLy8gSXQgd2lsbCBiZSBjbGVhbmVkIHVwIHdoZW4gdGhlIGJ1Y2tldCBpcyBkZWxldGVkIGR1ZSB0byBhdXRvRGVsZXRlT2JqZWN0c1xuXG4gICAgLy8gU2V0dXAgY3VzdG9tIGRvbWFpbiBpZiBwcm92aWRlZFxuICAgIGlmIChwcm9wcy5jdXN0b21Eb21haW4pIHtcbiAgICAgIHRoaXMuZG9tYWluTmFtZSA9IHByb3BzLmN1c3RvbURvbWFpbi5kb21haW5OYW1lO1xuICAgICAgdGhpcy5fc2V0dXBDdXN0b21Eb21haW4ocHJvcHMuY3VzdG9tRG9tYWluLCByZW1vdmFsUG9saWN5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBjb25zdHJ1Y3QgcHJvcGVydGllc1xuICAgKiBAcGFyYW0gcHJvcHMgVGhlIGZyb250ZW5kIHByb3BlcnRpZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX3ZhbGlkYXRlUHJvcHMocHJvcHM6IEZyb250ZW5kUHJvcHMpOiB2b2lkIHtcbiAgICBpZiAoIXByb3BzLnNvdXJjZURpcmVjdG9yeSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzb3VyY2VEaXJlY3RvcnkgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuY3VzdG9tRG9tYWluPy5kb21haW5OYW1lICYmICFwcm9wcy5jdXN0b21Eb21haW4uY2VydGlmaWNhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2VydGlmaWNhdGUgaXMgcmVxdWlyZWQgd2hlbiBkb21haW5OYW1lIGlzIHByb3ZpZGVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gQXNzZXQgZm9yIHRoZSBmcm9udGVuZCBzb3VyY2UgY29kZSB3aXRoIGJ1bmRsaW5nXG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgZnJvbnRlbmQgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBUaGUgQXNzZXQgY29udGFpbmluZyB0aGUgYnVpbHQgZnJvbnRlbmRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZUFzc2V0KHByb3BzOiBGcm9udGVuZFByb3BzKTogQXNzZXQge1xuICAgIGNvbnN0IGJ1aWxkQ29tbWFuZCA9IHByb3BzLmJ1aWxkQ29tbWFuZCB8fCAnbnBtIHJ1biBidWlsZCc7XG4gICAgY29uc3QgYnVpbGRPdXRwdXREaXJlY3RvcnkgPSBwcm9wcy5idWlsZE91dHB1dERpcmVjdG9yeSB8fCBwYXRoLmpvaW4ocHJvcHMuc291cmNlRGlyZWN0b3J5LCAnYnVpbGQnKTtcblxuICAgIC8vIEV4dHJhY3QgdGhlIGJ1aWxkIGRpcmVjdG9yeSBuYW1lIGZyb20gdGhlIGZ1bGwgcGF0aFxuICAgIGNvbnN0IGJ1aWxkRGlyTmFtZSA9IHBhdGguYmFzZW5hbWUoYnVpbGRPdXRwdXREaXJlY3RvcnkpO1xuXG4gICAgY29uc3QgYXNzZXQgPSBuZXcgQXNzZXQodGhpcywgJ0Zyb250ZW5kQXNzZXQnLCB7XG4gICAgICBwYXRoOiBwcm9wcy5zb3VyY2VEaXJlY3RvcnksXG4gICAgICBidW5kbGluZzoge1xuICAgICAgICBpbWFnZTogRG9ja2VySW1hZ2UuZnJvbVJlZ2lzdHJ5KCdwdWJsaWMuZWNyLmF3cy9kb2NrZXIvbGlicmFyeS9ub2RlOmx0cy1hbHBpbmUnKSxcbiAgICAgICAgY29tbWFuZDogW1xuICAgICAgICAgICdzaCcsICctYycsIFtcbiAgICAgICAgICAgICdjZCAvYXNzZXQtaW5wdXQnLFxuICAgICAgICAgICAgJ25wbSBjaSAtLW9ubHk9cHJvZHVjdGlvbicsXG4gICAgICAgICAgICBidWlsZENvbW1hbmQsXG4gICAgICAgICAgICBgY3AgLXIgLi8ke2J1aWxkRGlyTmFtZX0vKiAvYXNzZXQtb3V0cHV0L2AsXG4gICAgICAgICAgXS5qb2luKCcgJiYgJyksXG4gICAgICAgIF0sXG4gICAgICAgIHVzZXI6ICdyb290JyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBOb3RlOiBBc3NldCBkb2Vzbid0IHN1cHBvcnQgYXBwbHlSZW1vdmFsUG9saWN5IGRpcmVjdGx5XG4gICAgLy8gVGhlIHVuZGVybHlpbmcgUzMgb2JqZWN0cyB3aWxsIGJlIG1hbmFnZWQgYnkgdGhlIGFzc2V0IGJ1Y2tldCdzIHJlbW92YWwgcG9saWN5XG5cbiAgICByZXR1cm4gYXNzZXQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb25cbiAgICogQHBhcmFtIHByb3BzIFRoZSBmcm9udGVuZCBwcm9wZXJ0aWVzXG4gICAqIEBwYXJhbSByZW1vdmFsUG9saWN5IFRoZSByZW1vdmFsIHBvbGljeSB0byBhcHBseVxuICAgKiBAcmV0dXJucyBUaGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZURpc3RyaWJ1dGlvbihwcm9wczogRnJvbnRlbmRQcm9wcywgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeSk6IERpc3RyaWJ1dGlvbiB7XG4gICAgY29uc3QgZXJyb3JSZXNwb25zZXMgPSBwcm9wcy5lcnJvclJlc3BvbnNlcyB8fCBERUZBVUxUX1NQQV9FUlJPUl9SRVNQT05TRVM7XG5cbiAgICAvLyBDcmVhdGUgYSBDbG91ZEZyb250IGZ1bmN0aW9uIGZvciBzZWN1cml0eSBoZWFkZXJzXG4gICAgY29uc3Qgc2VjdXJpdHlIZWFkZXJzRnVuY3Rpb24gPSBuZXcgQ2xvdWRGcm9udEZ1bmN0aW9uKHRoaXMsICdTZWN1cml0eUhlYWRlcnNGdW5jdGlvbicsIHtcbiAgICAgIGNvZGU6IEZ1bmN0aW9uQ29kZS5mcm9tSW5saW5lKGBcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgICAgICAgIHZhciByZXNwb25zZSA9IGV2ZW50LnJlc3BvbnNlO1xuICAgICAgICAgIHZhciBoZWFkZXJzID0gcmVzcG9uc2UuaGVhZGVycztcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBBZGQgc2VjdXJpdHkgaGVhZGVyc1xuICAgICAgICAgIGhlYWRlcnNbJ3N0cmljdC10cmFuc3BvcnQtc2VjdXJpdHknXSA9IHsgdmFsdWU6ICdtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZCcgfTtcbiAgICAgICAgICBoZWFkZXJzWydjb250ZW50LXR5cGUtb3B0aW9ucyddID0geyB2YWx1ZTogJ25vc25pZmYnIH07XG4gICAgICAgICAgaGVhZGVyc1sneC1mcmFtZS1vcHRpb25zJ10gPSB7IHZhbHVlOiAnREVOWScgfTtcbiAgICAgICAgICBoZWFkZXJzWyd4LWNvbnRlbnQtdHlwZS1vcHRpb25zJ10gPSB7IHZhbHVlOiAnbm9zbmlmZicgfTtcbiAgICAgICAgICBoZWFkZXJzWydyZWZlcnJlci1wb2xpY3knXSA9IHsgdmFsdWU6ICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyB9O1xuICAgICAgICAgIGhlYWRlcnNbJ3Blcm1pc3Npb25zLXBvbGljeSddID0geyB2YWx1ZTogJ2NhbWVyYT0oKSwgbWljcm9waG9uZT0oKSwgZ2VvbG9jYXRpb249KCknIH07XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICBgKSxcbiAgICB9KTtcblxuICAgIC8vIEFwcGx5IHJlbW92YWwgcG9saWN5IHRvIENsb3VkRnJvbnQgZnVuY3Rpb25cbiAgICBzZWN1cml0eUhlYWRlcnNGdW5jdGlvbi5hcHBseVJlbW92YWxQb2xpY3kocmVtb3ZhbFBvbGljeSk7XG5cbiAgICBjb25zdCBkaXN0cmlidXRpb25Db25maWc6IERpc3RyaWJ1dGlvblByb3BzID0ge1xuICAgICAgZGVmYXVsdEJlaGF2aW9yOiB7XG4gICAgICAgIG9yaWdpbjogUzNCdWNrZXRPcmlnaW4ud2l0aE9yaWdpbkFjY2Vzc0NvbnRyb2wodGhpcy5idWNrZXQpLFxuICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgIGZ1bmN0aW9uQXNzb2NpYXRpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246IHNlY3VyaXR5SGVhZGVyc0Z1bmN0aW9uLFxuICAgICAgICAgICAgZXZlbnRUeXBlOiBGdW5jdGlvbkV2ZW50VHlwZS5WSUVXRVJfUkVTUE9OU0UsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0Um9vdE9iamVjdDogJ2luZGV4Lmh0bWwnLFxuICAgICAgZXJyb3JSZXNwb25zZXMsXG4gICAgICBjb21tZW50OiBwcm9wcy5kaXN0cmlidXRpb25Qcm9wcz8uY29tbWVudCxcbiAgICAgIGVuYWJsZWQ6IHByb3BzLmRpc3RyaWJ1dGlvblByb3BzPy5lbmFibGVkLFxuICAgICAgcHJpY2VDbGFzczogcHJvcHMuZGlzdHJpYnV0aW9uUHJvcHM/LnByaWNlQ2xhc3MsXG4gICAgICB3ZWJBY2xJZDogcHJvcHMuZGlzdHJpYnV0aW9uUHJvcHM/LndlYkFjbElkLFxuICAgIH07XG5cbiAgICAvLyBBZGQgY3VzdG9tIGRvbWFpbiBjb25maWd1cmF0aW9uIGlmIHByb3ZpZGVkXG4gICAgbGV0IGRpc3RyaWJ1dGlvbjogRGlzdHJpYnV0aW9uO1xuICAgIGlmIChwcm9wcy5jdXN0b21Eb21haW4pIHtcbiAgICAgIGRpc3RyaWJ1dGlvbiA9IG5ldyBEaXN0cmlidXRpb24odGhpcywgJ0Zyb250ZW5kRGlzdHJpYnV0aW9uJywge1xuICAgICAgICAuLi5kaXN0cmlidXRpb25Db25maWcsXG4gICAgICAgIGRvbWFpbk5hbWVzOiBbcHJvcHMuY3VzdG9tRG9tYWluLmRvbWFpbk5hbWVdLFxuICAgICAgICBjZXJ0aWZpY2F0ZTogcHJvcHMuY3VzdG9tRG9tYWluLmNlcnRpZmljYXRlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3RyaWJ1dGlvbiA9IG5ldyBEaXN0cmlidXRpb24odGhpcywgJ0Zyb250ZW5kRGlzdHJpYnV0aW9uJywgZGlzdHJpYnV0aW9uQ29uZmlnKTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSByZW1vdmFsIHBvbGljeSB0byBkaXN0cmlidXRpb25cbiAgICBkaXN0cmlidXRpb24uYXBwbHlSZW1vdmFsUG9saWN5KHJlbW92YWxQb2xpY3kpO1xuXG4gICAgcmV0dXJuIGRpc3RyaWJ1dGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGN1c3RvbSBkb21haW4gd2l0aCBSb3V0ZTUzIHJlY29yZFxuICAgKiBAcGFyYW0gY3VzdG9tRG9tYWluIFRoZSBjdXN0b20gZG9tYWluIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtIHJlbW92YWxQb2xpY3kgVGhlIHJlbW92YWwgcG9saWN5IHRvIGFwcGx5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9zZXR1cEN1c3RvbURvbWFpbihjdXN0b21Eb21haW46IEN1c3RvbURvbWFpbkNvbmZpZywgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeSk6IHZvaWQge1xuICAgIGlmIChjdXN0b21Eb21haW4uaG9zdGVkWm9uZSkge1xuICAgICAgY29uc3QgYWxpYXNSZWNvcmQgPSBuZXcgQVJlY29yZCh0aGlzLCAnRnJvbnRlbmRBbGlhc1JlY29yZCcsIHtcbiAgICAgICAgem9uZTogY3VzdG9tRG9tYWluLmhvc3RlZFpvbmUsXG4gICAgICAgIHJlY29yZE5hbWU6IGN1c3RvbURvbWFpbi5kb21haW5OYW1lLFxuICAgICAgICB0YXJnZXQ6IFJlY29yZFRhcmdldC5mcm9tQWxpYXMobmV3IENsb3VkRnJvbnRUYXJnZXQodGhpcy5kaXN0cmlidXRpb24pKSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBcHBseSByZW1vdmFsIHBvbGljeSB0byBSb3V0ZTUzIHJlY29yZFxuICAgICAgYWxpYXNSZWNvcmQuYXBwbHlSZW1vdmFsUG9saWN5KHJlbW92YWxQb2xpY3kpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBVUkwgb2YgdGhlIGZyb250ZW5kIGFwcGxpY2F0aW9uXG4gICAqIEByZXR1cm5zIFRoZSBmcm9udGVuZCBVUkxcbiAgICovXG4gIHB1YmxpYyB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kb21haW5OYW1lXG4gICAgICA/IGBodHRwczovLyR7dGhpcy5kb21haW5OYW1lfWBcbiAgICAgIDogYGh0dHBzOi8vJHt0aGlzLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25Eb21haW5OYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gZG9tYWluIG5hbWVcbiAgICogQHJldHVybnMgVGhlIENsb3VkRnJvbnQgZG9tYWluIG5hbWVcbiAgICovXG4gIHB1YmxpYyBkaXN0cmlidXRpb25Eb21haW5OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbkRvbWFpbk5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgUzMgYnVja2V0IG5hbWVcbiAgICogQHJldHVybnMgVGhlIFMzIGJ1Y2tldCBuYW1lXG4gICAqL1xuICBwdWJsaWMgYnVja2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5idWNrZXROYW1lO1xuICB9XG59XG4iXX0=