@aws-cdk/aws-imagebuilder-alpha 2.227.0-alpha.0 → 2.229.0-alpha.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.
@@ -86,7 +86,7 @@ var RepositoryService;
86
86
  * A container repository used to distribute container images in EC2 Image Builder
87
87
  */
88
88
  class Repository {
89
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.Repository", version: "2.227.0-alpha.0" };
89
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.Repository", version: "2.229.0-alpha.0" };
90
90
  /**
91
91
  * The ECR repository to use as the target container repository
92
92
  *
@@ -127,7 +127,7 @@ let DistributionConfiguration = (() => {
127
127
  DistributionConfiguration = _classThis = _classDescriptor.value;
128
128
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
129
129
  }
130
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.DistributionConfiguration", version: "2.227.0-alpha.0" };
130
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.DistributionConfiguration", version: "2.229.0-alpha.0" };
131
131
  /** Uniquely identifies this class. */
132
132
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-imagebuilder-alpha.DistributionConfiguration';
133
133
  /**
@@ -270,6 +270,17 @@ let DistributionConfiguration = (() => {
270
270
  throw new cdk.ValidationError('The distributionConfigurationName must be lowercase', this);
271
271
  }
272
272
  }
273
+ /**
274
+ * Renders the AMI and container distributions provided as input to the construct, into the `Distribution[]` structure
275
+ * that CfnDistributionConfiguration expects to receive. Distributions provided to CfnDistributionConfiguration must
276
+ * map to a unique region per entry in the list - this render function also handles combining AMI and container
277
+ * distributions in the same region into a single entry.
278
+ *
279
+ * This is rendered at synthesis time, as users can add additional AMI and container distributions with
280
+ * `addAmiDistributions` and `addContainerDistributions`, after the construct has been instantiated.
281
+ *
282
+ * @private
283
+ */
273
284
  renderDistributions() {
274
285
  if (!Object.keys(this.amiDistributionsByRegion).length &&
275
286
  !Object.keys(this.containerDistributionsByRegion).length) {
@@ -410,4 +421,4 @@ let DistributionConfiguration = (() => {
410
421
  return DistributionConfiguration = _classThis;
411
422
  })();
412
423
  exports.DistributionConfiguration = DistributionConfiguration;
413
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzdHJpYnV0aW9uLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkaXN0cmlidXRpb24tY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBbUM7QUFHbkMsMkNBQTJDO0FBQzNDLG1FQUE0RTtBQUc1RSw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBRzFFLE1BQU0saUNBQWlDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywyREFBMkQsQ0FBQyxDQUFDO0FBRWxILHFEQUFxRDtBQUNyRCxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQTBVaEM7O0dBRUc7QUFDSCxNQUFlLDZCQUE4QixTQUFRLEdBQUcsQ0FBQyxRQUFRO0lBVy9EOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLE9BQXVCLEVBQUUsR0FBRyxPQUFpQjtRQUN4RCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQzlCLE9BQU87WUFDUCxPQUFPO1lBQ1AsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDO1lBQ2pELEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7OztPQUlHO0lBQ0ksU0FBUyxDQUFDLE9BQXVCO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsMkNBQTJDLENBQUMsQ0FBQztLQUN6RTtDQUNGO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDM0I7O09BRUc7SUFDSCxnQ0FBVyxDQUFBO0FBQ2IsQ0FBQyxFQUxXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBSzVCO0FBRUQ7O0dBRUc7QUFDSCxNQUFzQixVQUFVOztJQUM5Qjs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUEyQjtRQUMvQyxNQUFNLE1BQU8sU0FB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aEMsTUFBTSwwQkFBMEIsR0FBRyxlQUFlLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FDbkUsQ0FBQyx5QkFBeUIsRUFBa0UsRUFBRSxDQUFDLENBQUM7Z0JBQzlGLFlBQVksRUFBRSx5QkFBeUIsQ0FBQyxVQUFVO2dCQUNsRCxRQUFRLEVBQUUseUJBQXlCLENBQUMsUUFBUTtnQkFDNUMsYUFBYSxFQUFFLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxhQUFhO2FBQ2pFLENBQUMsQ0FDSCxDQUFDO1lBRUYsT0FBTywwQkFBMEIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDcEY7O1lBNVZVLHVEQUF5Qjs7Ozs7QUFBekIsOERBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGVjciBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaW1hZ2VidWlsZGVyJztcbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCAqIGFzIHNzbSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuY29uc3QgRElTVFJJQlVUSU9OX0NPTkZJR1VSQVRJT05fU1lNQk9MID0gU3ltYm9sLmZvcignQGF3cy1jZGsvYXdzLWltYWdlYnVpbGRlci1hbHBoYS5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uJyk7XG5cbi8vIEZhc3QgTGF1bmNoIHJlcXVpcmVzIGF0IGxlYXN0IDYgcGFyYWxsZWwgbGF1bmNoZXMuXG5jb25zdCBNSU5fUEFSQUxMRUxfTEFVTkNIRVMgPSA2O1xuXG4vKipcbiAqIEFuIEVDMiBJbWFnZSBCdWlsZGVyIERpc3RyaWJ1dGlvbiBDb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEaXN0cmlidXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgY2RrLklSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCBjdXN0b20gYWN0aW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICogQHBhcmFtIGFjdGlvbnMgVGhlIGxpc3Qgb2YgYWN0aW9uc1xuICAgKi9cbiAgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xufVxuXG4vKipcbiAqIFRoZSBsYXVuY2ggcGVybWlzc2lvbnMgZm9yIHRoZSBBTUksIGRlZmluaW5nIHdoaWNoIHByaW5jaXBhbHMgYXJlIGFsbG93ZWQgdG8gYWNjZXNzIHRoZSBBTUlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbWlMYXVuY2hQZXJtaXNzaW9uIHtcbiAgLyoqXG4gICAqIFRoZSBBUk5zIGZvciB0aGUgQVdTIE9yZ2FuaXphdGlvbnMgb3JnYW5pemF0aW9uYWwgdW5pdHMgdG8gc2hhcmUgdGhlIEFNSSB3aXRoXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbmFsVW5pdEFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIEFSTnMgZm9yIHRoZSBBV1MgT3JnYW5pemF0aW9uIHRoYXQgeW91IHdhbnQgdG8gc2hhcmUgdGhlIEFNSSB3aXRoXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBtYWtlIHRoZSBBTUkgcHVibGljLiBCbG9jayBwdWJsaWMgYWNjZXNzIGZvciBBTUlzIG11c3QgYmUgZGlzYWJsZWQgdG8gbWFrZSB0aGUgQU1JIHB1YmxpYy5cbiAgICpcbiAgICogV0FSTklORzogTWFraW5nIGFuIEFNSSBwdWJsaWMgZXhwb3NlcyBpdCB0byBhbnkgQVdTIGFjY291bnQgZ2xvYmFsbHkuXG4gICAqICBFbnN1cmUgdGhlIEFNSSBkb2VzIG5vdCBjb250YWluOlxuICAgKiAgLSBTZW5zaXRpdmUgZGF0YSBvciBjcmVkZW50aWFsc1xuICAgKiAgLSBQcm9wcmlldGFyeSBzb2Z0d2FyZSBvciBjb25maWd1cmF0aW9uc1xuICAgKiAgLSBJbnRlcm5hbCBuZXR3b3JrIGluZm9ybWF0aW9uIG9yIHNlY3VyaXR5IHNldHRpbmdzXG4gICAqXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGJsb2NraW5nIHB1YmxpYyBhY2Nlc3MgZm9yIEFNSXMsIHNlZTogW1VuZGVyc3RhbmQgYmxvY2sgcHVibGljIGFjY2VzcyBmb3IgQU1Jc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2Jsb2NrLXB1YmxpYy1hY2Nlc3MtdG8tYW1pcy5odG1sKVxuICAgKlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaXNQdWJsaWNVc2VyR3JvdXA/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIGFjY291bnQgSURzIHRvIHNoYXJlIHRoZSBBTUkgd2l0aFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50SWRzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIFNTTSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBvciB1cGRhdGUgZm9yIHRoZSBkaXN0cmlidXRlZCBBTUlzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU1NNUGFyYW1ldGVyQ29uZmlndXJhdGlvbnMge1xuICAvKipcbiAgICogVGhlIEFXUyBhY2NvdW50IElEIHRoYXQgd2lsbCBvd24gdGhlIFNTTSBwYXJhbWV0ZXIgaW4gdGhlIGdpdmVuIHJlZ2lvbi4gVGhpcyBtdXN0IGJlIG9uZSBvZiB0aGUgdGFyZ2V0IGFjY291bnRzXG4gICAqIHRoYXQgd2FzIGluY2x1ZGVkIGluIHRoZSBsaXN0IG9mIEFNSSBkaXN0cmlidXRpb24gdGFyZ2V0IGFjY291bnRzXG4gICAqXG4gICAqIEBkZWZhdWx0IFRoZSBjdXJyZW50IGFjY291bnQgaXMgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgYW1pQWNjb3VudD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRhdGEgdHlwZSBvZiB0aGUgU1NNIHBhcmFtZXRlclxuICAgKlxuICAgKiBAZGVmYXVsdCBzc20uUGFyYW1ldGVyRGF0YVR5cGUuQVdTX0VDMl9JTUFHRVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YVR5cGU/OiBzc20uUGFyYW1ldGVyRGF0YVR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBTU00gcGFyYW1ldGVyIHRvIGNyZWF0ZSBvciB1cGRhdGVcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcjogc3NtLklTdHJpbmdQYXJhbWV0ZXI7XG59XG5cbi8qKlxuICogVGhlIGxhdW5jaCB0ZW1wbGF0ZSB0byBhcHBseSB0aGUgZGlzdHJpYnV0ZWQgQU1JIHRvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBsYXVuY2ggdGVtcGxhdGUgdG8gYXBwbHkgdGhlIGRpc3RyaWJ1dGVkIEFNSSB0by4gQSBuZXcgbGF1bmNoIHRlbXBsYXRlIHZlcnNpb24gd2lsbCBiZSBjcmVhdGVkIGZvciB0aGVcbiAgICogcHJvdmlkZWQgbGF1bmNoIHRlbXBsYXRlIHdpdGggdGhlIGRpc3RyaWJ1dGVkIEFNSSBhcHBsaWVkLlxuICAgKlxuICAgKiAqTm90ZToqIFRoZSBsYXVuY2ggdGVtcGxhdGUgc2hvdWxkIGV4cG9zZSBhIGBsYXVuY2hUZW1wbGF0ZUlkYC4gVGVtcGxhdGVzXG4gICAqIGltcG9ydGVkIGJ5IG5hbWUgb25seSBhcmUgbm90IHN1cHBvcnRlZC5cbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlOiBlYzIuSUxhdW5jaFRlbXBsYXRlO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIGFjY291bnQgSUQgdGhhdCBvd25zIHRoZSBsYXVuY2ggdGVtcGxhdGVcbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIGN1cnJlbnQgYWNjb3VudCBpcyB1c2VkXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50SWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2V0IHRoZSBuZXcgbGF1bmNoIHRlbXBsYXRlIHZlcnNpb24gdGhhdCBpcyBjcmVhdGVkIGFzIHRoZSBkZWZhdWx0IGxhdW5jaCB0ZW1wbGF0ZSB2ZXJzaW9uLiBBZnRlclxuICAgKiBjcmVhdGlvbiBvZiB0aGUgbGF1bmNoIHRlbXBsYXRlIHZlcnNpb24gY29udGFpbmluZyB0aGUgZGlzdHJpYnV0ZWQgQU1JLCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2V0IGFzIHRoZVxuICAgKiBkZWZhdWx0IHZlcnNpb24gZm9yIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzZXREZWZhdWx0VmVyc2lvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIEVDMiBGYXN0IExhdW5jaCBjb25maWd1cmF0aW9uIHRvIHVzZSBmb3IgdGhlIFdpbmRvd3MgQU1JXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFzdExhdW5jaENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgZmFzdCBsYXVuY2ggZm9yIHRoZSBBTUlcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbGF1bmNoIHRlbXBsYXRlIHRoYXQgdGhlIGZhc3QtbGF1bmNoIGVuYWJsZWQgV2luZG93cyBBTUkgdXNlcyB3aGVuIGl0IGxhdW5jaGVzIFdpbmRvd3MgaW5zdGFuY2VzIHRvIGNyZWF0ZVxuICAgKiBwcmUtcHJvdmlzaW9uZWQgc25hcHNob3RzXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlPzogZWMyLklMYXVuY2hUZW1wbGF0ZTtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcmFsbGVsIGluc3RhbmNlcyB0aGF0IGFyZSBsYXVuY2hlZCBmb3IgY3JlYXRpbmcgcmVzb3VyY2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IEEgbWF4aW11bSBvZiA2IGluc3RhbmNlcyBhcmUgbGF1bmNoZWQgaW4gcGFyYWxsZWxcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0VuYWJsZUZhc3RMYXVuY2guaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgbWF4UGFyYWxsZWxMYXVuY2hlcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBwcmUtcHJvdmlzaW9uZWQgc25hcHNob3RzIHRvIGtlZXAgb24gaGFuZCBmb3IgYSBmYXN0LWxhdW5jaCBlbmFibGVkIFdpbmRvd3MgQU1JXG4gICAqXG4gICAqIEBkZWZhdWx0IDEwIHNuYXBzaG90cyBhcmUga2VwdCBwcmUtcHJvdmlzaW9uZWRcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0VuYWJsZUZhc3RMYXVuY2guaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0U25hcHNob3RDb3VudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgcmVnaW9uYWwgZGlzdHJpYnV0aW9uIHNldHRpbmdzIHRvIHVzZSBmb3IgYW4gQU1JIGJ1aWxkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW1pRGlzdHJpYnV0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgcmVnaW9uIHRvIGRpc3RyaWJ1dGUgQU1JcyB0b1xuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgY3VycmVudCByZWdpb24gaXMgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFncyB0byBhcHBseSB0byB0aGUgZGlzdHJpYnV0ZWQgQU1Jc1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBhbWlUYWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBTUlcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYW1pRGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBLTVMga2V5IHRvIGVuY3J5cHQgdGhlIGRpc3RyaWJ1dGVkIEFNSSB3aXRoXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFtaUttc0tleT86IGttcy5JS2V5O1xuXG4gIC8qKlxuICAgKiBUaGUgbGF1bmNoIHBlcm1pc3Npb25zIGZvciB0aGUgQU1JLCBkZWZpbmluZyB3aGljaCBwcmluY2lwYWxzIGFyZSBhbGxvd2VkIHRvIGFjY2VzcyB0aGUgQU1JXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFtaUxhdW5jaFBlcm1pc3Npb24/OiBBbWlMYXVuY2hQZXJtaXNzaW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSB0byB1c2UgZm9yIHRoZSBkaXN0cmlidXRlZCBBTUlzXG4gICAqXG4gICAqIEBkZWZhdWx0IEEgbmFtZSBpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgaW1hZ2UgcmVjaXBlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGFtaU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhY2NvdW50IElEcyB0byBjb3B5IHRoZSBvdXRwdXQgQU1JIHRvXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFtaVRhcmdldEFjY291bnRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIFNTTSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBvciB1cGRhdGUgZm9yIHRoZSBkaXN0cmlidXRlZCBBTUlzXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHNzbVBhcmFtZXRlcnM/OiBTU01QYXJhbWV0ZXJDb25maWd1cmF0aW9uc1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbGF1bmNoIHRlbXBsYXRlcyB0byBhcHBseSB0aGUgZGlzdHJpYnV0ZWQgQU1JIHRvXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlcz86IExhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgZmFzdCBsYXVuY2ggY29uZmlndXJhdGlvbnMgdG8gdXNlIGZvciBlbmFibGluZyBFQzIgRmFzdCBMYXVuY2ggb24gdGhlIGRpc3RyaWJ1dGVkIFdpbmRvd3MgQU1JXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0VuYWJsZUZhc3RMYXVuY2guaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgZmFzdExhdW5jaENvbmZpZ3VyYXRpb25zPzogRmFzdExhdW5jaENvbmZpZ3VyYXRpb25bXTtcblxuICAvKipcbiAgICogVGhlIExpY2Vuc2UgTWFuYWdlciBsaWNlbnNlIGNvbmZpZ3VyYXRpb24gQVJOcyB0byBhcHBseSB0byB0aGUgZGlzdHJpYnV0ZWQgQU1Jc1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBsaWNlbnNlQ29uZmlndXJhdGlvbkFybnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgcmVnaW9uYWwgZGlzdHJpYnV0aW9uIHNldHRpbmdzIHRvIHVzZSBmb3IgYSBjb250YWluZXIgYnVpbGRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250YWluZXJEaXN0cmlidXRpb24ge1xuICAvKipcbiAgICogVGhlIHRhcmdldCByZWdpb24gdG8gZGlzdHJpYnV0ZSBjb250YWluZXJzIHRvXG4gICAqXG4gICAqIEBkZWZhdWx0IFRoZSBjdXJyZW50IHJlZ2lvbiBpcyB1c2VkXG4gICAqL1xuICByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXN0aW5hdGlvbiByZXBvc2l0b3J5IHRvIGRpc3RyaWJ1dGUgdGhlIG91dHB1dCBjb250YWluZXIgdG9cbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIHRhcmdldCByZXBvc2l0b3J5IGluIHRoZSBjb250YWluZXIgcmVjaXBlIGlzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lclJlcG9zaXRvcnk6IFJlcG9zaXRvcnk7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgY29udGFpbmVyIGltYWdlXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lckRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWRkaXRpb25hbCB0YWdzIHRvIGFwcGx5IHRvIHRoZSBkaXN0cmlidXRlZCBjb250YWluZXIgaW1hZ2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lclRhZ3M/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIERpc3RyaWJ1dGlvbiBDb25maWd1cmF0aW9uIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHRhcmdldCByZWdpb25zIGFuZCBhc3NvY2lhdGVkIEFNSSBkaXN0cmlidXRpb24gc2V0dGluZ3Mgd2hlcmUgdGhlIGJ1aWx0IEFNSSB3aWxsIGJlIGRpc3RyaWJ1dGVkLiBBTUlcbiAgICogZGlzdHJpYnV0aW9ucyBtYXkgYWxzbyBiZSBhZGRlZCB3aXRoIHRoZSBgYWRkQW1pRGlzdHJpYnV0aW9uc2AgbWV0aG9kLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lIGlmIGNvbnRhaW5lciBkaXN0cmlidXRpb25zIGFyZSBwcm92aWRlZC4gT3RoZXJ3aXNlLCBhdCBsZWFzdCBvbmUgQU1JIG9yIGNvbnRhaW5lciBkaXN0cmlidXRpb24gbXVzdFxuICAgKiAgICAgICAgICBiZSBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgYW1pRGlzdHJpYnV0aW9ucz86IEFtaURpc3RyaWJ1dGlvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiB0YXJnZXQgcmVnaW9ucyBhbmQgYXNzb2NpYXRlZCBjb250YWluZXIgZGlzdHJpYnV0aW9uIHNldHRpbmdzIHdoZXJlIHRoZSBidWlsdCBjb250YWluZXIgd2lsbCBiZVxuICAgKiBkaXN0cmlidXRlZC4gQ29udGFpbmVyIGRpc3RyaWJ1dGlvbnMgbWF5IGFsc28gYmUgYWRkZWQgd2l0aCB0aGUgYGFkZENvbnRhaW5lckRpc3RyaWJ1dGlvbnNgIG1ldGhvZC5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZSBpZiBBTUkgZGlzdHJpYnV0aW9ucyBhcmUgcHJvdmlkZWQuIE90aGVyd2lzZSwgYXQgbGVhc3Qgb25lIEFNSSBvciBjb250YWluZXIgZGlzdHJpYnV0aW9uIG11c3QgYmVcbiAgICogICAgICAgICAgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lckRpc3RyaWJ1dGlvbnM/OiBDb250YWluZXJEaXN0cmlidXRpb25bXTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBIG5hbWUgaXMgZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0YWdzIHRvIGFwcGx5IHRvIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBBIG5ldyBvciBpbXBvcnRlZCBEaXN0cmlidXRpb24gQ29uZmlndXJhdGlvblxuICovXG5hYnN0cmFjdCBjbGFzcyBEaXN0cmlidXRpb25Db25maWd1cmF0aW9uQmFzZSBleHRlbmRzIGNkay5SZXNvdXJjZSBpbXBsZW1lbnRzIElEaXN0cmlidXRpb25Db25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgY3VzdG9tIGFjdGlvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBsaXN0IG9mIGFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnMsXG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLmRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm5dLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsICdpbWFnZWJ1aWxkZXI6R2V0RGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbicpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHNlcnZpY2UgaW4gd2hpY2ggYSBjb250YWluZXIgc2hvdWxkIGJlIHJlZ2lzdGVyZWRcbiAqL1xuZXhwb3J0IGVudW0gUmVwb3NpdG9yeVNlcnZpY2Uge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBjb250YWluZXIgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgaW4gRUNSXG4gICAqL1xuICBFQ1IgPSAnRUNSJyxcbn1cblxuLyoqXG4gKiBBIGNvbnRhaW5lciByZXBvc2l0b3J5IHVzZWQgdG8gZGlzdHJpYnV0ZSBjb250YWluZXIgaW1hZ2VzIGluIEVDMiBJbWFnZSBCdWlsZGVyXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZXBvc2l0b3J5IHtcbiAgLyoqXG4gICAqIFRoZSBFQ1IgcmVwb3NpdG9yeSB0byB1c2UgYXMgdGhlIHRhcmdldCBjb250YWluZXIgcmVwb3NpdG9yeVxuICAgKlxuICAgKiBAcGFyYW0gcmVwb3NpdG9yeSBUaGUgRUNSIHJlcG9zaXRvcnkgdG8gdXNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21FY3IocmVwb3NpdG9yeTogZWNyLklSZXBvc2l0b3J5KTogUmVwb3NpdG9yeSB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgUmVwb3NpdG9yeSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcmVwb3NpdG9yeU5hbWU6IHN0cmluZyA9IHJlcG9zaXRvcnkucmVwb3NpdG9yeU5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZTogUmVwb3NpdG9yeVNlcnZpY2UgPSBSZXBvc2l0b3J5U2VydmljZS5FQ1I7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIHJlcG9zaXRvcnkgd2hlcmUgdGhlIG91dHB1dCBjb250YWluZXIgaW1hZ2UgaXMgc3RvcmVkXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSByZXBvc2l0b3J5TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VydmljZSBpbiB3aGljaCB0aGUgY29udGFpbmVyIHJlcG9zaXRvcnkgaXMgaG9zdGVkXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBzZXJ2aWNlOiBSZXBvc2l0b3J5U2VydmljZTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIEVDMiBJbWFnZSBCdWlsZGVyIERpc3RyaWJ1dGlvbiBDb25maWd1cmF0aW9uLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL21hbmFnZS1kaXN0cmlidXRpb24tc2V0dGluZ3MuaHRtbFxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25CYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtaW1hZ2VidWlsZGVyLWFscGhhLkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24nO1xuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZ2l2ZW4gaXRzIEFSTi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm4oXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm46IHN0cmluZyxcbiAgKTogSURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lID0gY2RrLlN0YWNrLm9mKHNjb3BlKS5zcGxpdEFybihcbiAgICAgIGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm4sXG4gICAgICBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgKS5yZXNvdXJjZU5hbWUhO1xuXG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm4gPSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lID0gZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZ2l2ZW4gaXRzIG5hbWUuIFRoZSBwcm92aWRlZCBuYW1lIG11c3QgYmUgbm9ybWFsaXplZCBieSBjb252ZXJ0aW5nXG4gICAqIGFsbCBhbHBoYWJldGljYWwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2UsIGFuZCByZXBsYWNpbmcgYWxsIHNwYWNlcyBhbmQgdW5kZXJzY29yZXMgd2l0aCBoeXBoZW5zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lOiBzdHJpbmcsXG4gICk6IElEaXN0cmlidXRpb25Db25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5mcm9tRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybihcbiAgICAgIHNjb3BlLFxuICAgICAgaWQsXG4gICAgICBjZGsuU3RhY2sub2Yoc2NvcGUpLmZvcm1hdEFybih7XG4gICAgICAgIHNlcnZpY2U6ICdpbWFnZWJ1aWxkZXInLFxuICAgICAgICByZXNvdXJjZTogJ2Rpc3RyaWJ1dGlvbi1jb25maWd1cmF0aW9uJyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG9iamVjdCBpcyBhIERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbih4OiBhbnkpOiB4IGlzIERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB4ICE9PSBudWxsICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiBESVNUUklCVVRJT05fQ09ORklHVVJBVElPTl9TWU1CT0wgaW4geDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWU6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGFtaURpc3RyaWJ1dGlvbnNCeVJlZ2lvbjogeyBbcmVnaW9uOiBzdHJpbmddOiBBbWlEaXN0cmlidXRpb24gfSA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5lckRpc3RyaWJ1dGlvbnNCeVJlZ2lvbjoge1xuICAgIFtyZWdpb246IHN0cmluZ106IENvbnRhaW5lckRpc3RyaWJ1dGlvbjtcbiAgfSA9IHt9O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvblByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTpcbiAgICAgICAgcHJvcHMuZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUgPz9cbiAgICAgICAgY2RrLkxhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgICAgY2RrLk5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICAgICAgICAgIG1heExlbmd0aDogMTI4LFxuICAgICAgICAgICAgICBzZXBhcmF0b3I6ICctJyxcbiAgICAgICAgICAgICAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiAnLScsXG4gICAgICAgICAgICB9KS50b0xvd2VyQ2FzZSgpLCAvLyBFbmZvcmNlIGxvd2VyY2FzZSBmb3IgdGhlIGF1dG8tZ2VuZXJhdGVkIGZhbGxiYWNrXG4gICAgICAgIH0pLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIERJU1RSSUJVVElPTl9DT05GSUdVUkFUSU9OX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMudmFsaWRhdGVEaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSgpO1xuXG4gICAgdGhpcy5hZGRBbWlEaXN0cmlidXRpb25zKC4uLihwcm9wcy5hbWlEaXN0cmlidXRpb25zID8/IFtdKSk7XG4gICAgdGhpcy5hZGRDb250YWluZXJEaXN0cmlidXRpb25zKC4uLihwcm9wcy5jb250YWluZXJEaXN0cmlidXRpb25zID8/IFtdKSk7XG5cbiAgICBjb25zdCBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uID0gbmV3IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24odGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBkaXN0cmlidXRpb25zOiBjZGsuTGF6eS5hbnkoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLnJlbmRlckRpc3RyaWJ1dGlvbnMoKSB9KSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgfSk7XG5cbiAgICB0aGlzLmRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lID0gdGhpcy5nZXRSZXNvdXJjZU5hbWVBdHRyaWJ1dGUoZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5hdHRyTmFtZSk7XG4gICAgdGhpcy5kaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuID0gdGhpcy5nZXRSZXNvdXJjZUFybkF0dHJpYnV0ZShkaXN0cmlidXRpb25Db25maWd1cmF0aW9uLmF0dHJBcm4sIHtcbiAgICAgIHNlcnZpY2U6ICdpbWFnZWJ1aWxkZXInLFxuICAgICAgcmVzb3VyY2U6ICdkaXN0cmlidXRpb24tY29uZmlndXJhdGlvbicsXG4gICAgICByZXNvdXJjZU5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgQU1JIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyB0byB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGFtaURpc3RyaWJ1dGlvbnMgVGhlIGxpc3Qgb2YgQU1JIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyB0byBhcHBseVxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZEFtaURpc3RyaWJ1dGlvbnMoLi4uYW1pRGlzdHJpYnV0aW9uczogQW1pRGlzdHJpYnV0aW9uW10pOiB2b2lkIHtcbiAgICBhbWlEaXN0cmlidXRpb25zLmZvckVhY2goKGFtaURpc3RyaWJ1dGlvbikgPT4ge1xuICAgICAgY29uc3QgcmVnaW9uID0gYW1pRGlzdHJpYnV0aW9uLnJlZ2lvbiA/PyBjZGsuU3RhY2sub2YodGhpcykucmVnaW9uO1xuICAgICAgaWYgKHRoaXMuYW1pRGlzdHJpYnV0aW9uc0J5UmVnaW9uW3JlZ2lvbl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYGR1cGxpY2F0ZSBBTUkgZGlzdHJpYnV0aW9uIGZvdW5kIGZvciByZWdpb24gXCIke3JlZ2lvbn1cIjsgb25seSBvbmUgQU1JIGRpc3RyaWJ1dGlvbiBwZXIgcmVnaW9uIGlzIGFsbG93ZWRgLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYW1pRGlzdHJpYnV0aW9uc0J5UmVnaW9uW3JlZ2lvbl0gPSBhbWlEaXN0cmlidXRpb247XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBjb250YWluZXIgZGlzdHJpYnV0aW9uIHNldHRpbmdzIHRvIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyRGlzdHJpYnV0aW9ucyBUaGUgbGlzdCBvZiBjb250YWluZXIgZGlzdHJpYnV0aW9uIHNldHRpbmdzIHRvIGFwcGx5XG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkQ29udGFpbmVyRGlzdHJpYnV0aW9ucyguLi5jb250YWluZXJEaXN0cmlidXRpb25zOiBDb250YWluZXJEaXN0cmlidXRpb25bXSk6IHZvaWQge1xuICAgIGNvbnRhaW5lckRpc3RyaWJ1dGlvbnMuZm9yRWFjaCgoY29udGFpbmVyRGlzdHJpYnV0aW9uKSA9PiB7XG4gICAgICBjb25zdCByZWdpb24gPSBjb250YWluZXJEaXN0cmlidXRpb24ucmVnaW9uID8/IGNkay5TdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgICBpZiAodGhpcy5jb250YWluZXJEaXN0cmlidXRpb25zQnlSZWdpb25bcmVnaW9uXSkge1xuICAgICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBgZHVwbGljYXRlIENvbnRhaW5lciBkaXN0cmlidXRpb24gZm91bmQgZm9yIHJlZ2lvbiBcIiR7cmVnaW9ufVwiOyBvbmx5IG9uZSBDb250YWluZXIgZGlzdHJpYnV0aW9uIHBlciByZWdpb24gaXMgYWxsb3dlZGAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb250YWluZXJEaXN0cmlidXRpb25zQnlSZWdpb25bcmVnaW9uXSA9IGNvbnRhaW5lckRpc3RyaWJ1dGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVEaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSgpIHtcbiAgICBpZiAoY2RrLlRva2VuLmlzVW5yZXNvbHZlZCh0aGlzLnBoeXNpY2FsTmFtZSkpIHtcbiAgICAgIHJldHVybjsgLy8gQ2Fubm90IHZhbGlkYXRlIHVucmVzb2x2ZWQgdG9rZW5zLCBnaXZlbiB0aGVpciBhY3R1YWwgdmFsdWUgaXMgcmVuZGVyZWQgYXQgZGVwbG95bWVudCB0aW1lXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lLmxlbmd0aCA+IDEyOCkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ1RoZSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSBjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gMTI4IGNoYXJhY3RlcnMnLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUuaW5jbHVkZXMoJyAnKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ1RoZSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSBjYW5ub3QgY29udGFpbiBzcGFjZXMnLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ1RoZSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSBjYW5ub3QgY29udGFpbiB1bmRlcnNjb3JlcycsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZSAhPT0gdGhpcy5waHlzaWNhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ1RoZSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSBtdXN0IGJlIGxvd2VyY2FzZScsIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyRGlzdHJpYnV0aW9ucygpOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLkRpc3RyaWJ1dGlvblByb3BlcnR5W10ge1xuICAgIGlmIChcbiAgICAgICFPYmplY3Qua2V5cyh0aGlzLmFtaURpc3RyaWJ1dGlvbnNCeVJlZ2lvbikubGVuZ3RoICYmXG4gICAgICAhT2JqZWN0LmtleXModGhpcy5jb250YWluZXJEaXN0cmlidXRpb25zQnlSZWdpb24pLmxlbmd0aFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ1lvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIEFNSSBvciBjb250YWluZXIgZGlzdHJpYnV0aW9uJywgdGhpcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZGlzdHJpYnV0aW9uQnlSZWdpb246IHsgW3JlZ2lvbjogc3RyaW5nXTogQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5EaXN0cmlidXRpb25Qcm9wZXJ0eSB9ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtyZWdpb24sIGRpc3RyaWJ1dGlvbl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5hbWlEaXN0cmlidXRpb25zQnlSZWdpb24pKSB7XG4gICAgICBkaXN0cmlidXRpb25CeVJlZ2lvbltyZWdpb25dID0ge1xuICAgICAgICByZWdpb24sXG4gICAgICAgIGFtaURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb246IHRoaXMuYnVpbGRBbWlEaXN0cmlidXRpb24oZGlzdHJpYnV0aW9uKSxcbiAgICAgICAgZmFzdExhdW5jaENvbmZpZ3VyYXRpb25zOiB0aGlzLmJ1aWxkRmFzdExhdW5jaENvbmZpZ3VyYXRpb25zKGRpc3RyaWJ1dGlvbiksXG4gICAgICAgIGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbnM6IHRoaXMuYnVpbGRMYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25zKGRpc3RyaWJ1dGlvbiksXG4gICAgICAgIHNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25zOiB0aGlzLmJ1aWxkU3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbnMoZGlzdHJpYnV0aW9uKSxcbiAgICAgICAgbGljZW5zZUNvbmZpZ3VyYXRpb25Bcm5zOiB0aGlzLmJ1aWxkTGljZW5zZUNvbmZpZ3VyYXRpb25Bcm5zKGRpc3RyaWJ1dGlvbiksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3JlZ2lvbiwgY29udGFpbmVyRGlzdHJpYnV0aW9uXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmNvbnRhaW5lckRpc3RyaWJ1dGlvbnNCeVJlZ2lvbikpIHtcbiAgICAgIGRpc3RyaWJ1dGlvbkJ5UmVnaW9uW3JlZ2lvbl0gPSB7XG4gICAgICAgIC4uLihkaXN0cmlidXRpb25CeVJlZ2lvbltyZWdpb25dID8/IHt9KSxcbiAgICAgICAgcmVnaW9uLFxuICAgICAgICBjb250YWluZXJEaXN0cmlidXRpb25Db25maWd1cmF0aW9uOiB0aGlzLmJ1aWxkQ29udGFpbmVyRGlzdHJpYnV0aW9uKGNvbnRhaW5lckRpc3RyaWJ1dGlvbiksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGRpc3RyaWJ1dGlvbnMgPSBPYmplY3QudmFsdWVzKGRpc3RyaWJ1dGlvbkJ5UmVnaW9uKTtcblxuICAgIGRpc3RyaWJ1dGlvbnMuZm9yRWFjaCgoZGlzdHJpYnV0aW9uKSA9PiB7XG4gICAgICBjb25zdCB7IHJlZ2lvbjogXywgLi4uZGlzdHJpYnV0aW9uV2l0aG91dFJlZ2lvbiB9ID0gZGlzdHJpYnV0aW9uO1xuICAgICAgaWYgKCFPYmplY3QuZW50cmllcyhkaXN0cmlidXRpb25XaXRob3V0UmVnaW9uKS5zb21lKChbX18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYGF0IGxlYXN0IG9uZSBkaXN0cmlidXRpb24gcHJvcGVydHkgbXVzdCBiZSBzZXQgZm9yIHJlZ2lvbiBcIiR7ZGlzdHJpYnV0aW9uLnJlZ2lvbn1cImAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkaXN0cmlidXRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEFtaURpc3RyaWJ1dGlvbihhbWlEaXN0cmlidXRpb246IEFtaURpc3RyaWJ1dGlvbik6IG9iamVjdCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbGF1bmNoUGVybWlzc2lvbnMgPSB0aGlzLmJ1aWxkQW1pTGF1bmNoUGVybWlzc2lvbnMoYW1pRGlzdHJpYnV0aW9uKTtcbiAgICBjb25zdCBhbWlEaXN0cmlidXRpb25Db25maWd1cmF0aW9uID0ge1xuICAgICAgLi4uKE9iamVjdC5rZXlzKGFtaURpc3RyaWJ1dGlvbi5hbWlUYWdzID8/IHt9KS5sZW5ndGggJiYgeyBBbWlUYWdzOiBhbWlEaXN0cmlidXRpb24uYW1pVGFncyB9KSxcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pRGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCAmJiB7IERlc2NyaXB0aW9uOiBhbWlEaXN0cmlidXRpb24uYW1pRGVzY3JpcHRpb24gfSksXG4gICAgICAuLi4oYW1pRGlzdHJpYnV0aW9uLmFtaUttc0tleSAhPT0gdW5kZWZpbmVkICYmIHsgS21zS2V5SWQ6IGFtaURpc3RyaWJ1dGlvbi5hbWlLbXNLZXkua2V5QXJuIH0pLFxuICAgICAgLi4uKGxhdW5jaFBlcm1pc3Npb25zICYmIHsgTGF1bmNoUGVybWlzc2lvbkNvbmZpZ3VyYXRpb246IGxhdW5jaFBlcm1pc3Npb25zIH0pLFxuICAgICAgLi4uKGFtaURpc3RyaWJ1dGlvbi5hbWlOYW1lICE9PSB1bmRlZmluZWQgJiYgeyBOYW1lOiBhbWlEaXN0cmlidXRpb24uYW1pTmFtZSB9KSxcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pVGFyZ2V0QWNjb3VudElkcyAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgVGFyZ2V0QWNjb3VudElkczogYW1pRGlzdHJpYnV0aW9uLmFtaVRhcmdldEFjY291bnRJZHMsXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGFtaURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24pLmxlbmd0aCA/IGFtaURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29udGFpbmVyRGlzdHJpYnV0aW9uKGNvbnRhaW5lckRpc3RyaWJ1dGlvbjogQ29udGFpbmVyRGlzdHJpYnV0aW9uKTogb2JqZWN0IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4ge1xuICAgICAgQ29udGFpbmVyVGFnczogY29udGFpbmVyRGlzdHJpYnV0aW9uLmNvbnRhaW5lclRhZ3MsXG4gICAgICBEZXNjcmlwdGlvbjogY29udGFpbmVyRGlzdHJpYnV0aW9uLmNvbnRhaW5lckRlc2NyaXB0aW9uLFxuICAgICAgVGFyZ2V0UmVwb3NpdG9yeToge1xuICAgICAgICBSZXBvc2l0b3J5TmFtZTogY29udGFpbmVyRGlzdHJpYnV0aW9uLmNvbnRhaW5lclJlcG9zaXRvcnkucmVwb3NpdG9yeU5hbWUsXG4gICAgICAgIFNlcnZpY2U6IGNvbnRhaW5lckRpc3RyaWJ1dGlvbi5jb250YWluZXJSZXBvc2l0b3J5LnNlcnZpY2UsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQW1pTGF1bmNoUGVybWlzc2lvbnMoYW1pRGlzdHJpYnV0aW9uOiBBbWlEaXN0cmlidXRpb24pOiBvYmplY3QgfCB1bmRlZmluZWQge1xuICAgIGlmIChhbWlEaXN0cmlidXRpb24uYW1pTGF1bmNoUGVybWlzc2lvbj8uaXNQdWJsaWNVc2VyR3JvdXApIHtcbiAgICAgIGNkay5Bbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nKFxuICAgICAgICAnQU1JIGlzIGNvbmZpZ3VyZWQgZm9yIHB1YmxpYyBhY2Nlc3MsIG1ha2luZyBpdCBhdmFpbGFibGUgdG8gYW55IEFXUyBhY2NvdW50IGdsb2JhbGx5LiAnICtcbiAgICAgICAgICAnRW5zdXJlIG5vIHNlbnNpdGl2ZSBkYXRhLCBjcmVkZW50aWFscywgb3IgcHJvcHJpZXRhcnkgY29uZmlndXJhdGlvbnMgYXJlIGluY2x1ZGVkLiAnICtcbiAgICAgICAgICBcIlJldmlldyB5b3VyIG9yZ2FuaXphdGlvbidzIHNlY3VyaXR5IHBvbGljaWVzIGJlZm9yZSBkZXBsb3lpbmcgcHVibGljIEFNSXMuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGxhdW5jaFBlcm1pc3Npb25zID0ge1xuICAgICAgLi4uKGFtaURpc3RyaWJ1dGlvbi5hbWlMYXVuY2hQZXJtaXNzaW9uPy5vcmdhbml6YXRpb25hbFVuaXRBcm5zICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBPcmdhbml6YXRpb25hbFVuaXRBcm5zOiBhbWlEaXN0cmlidXRpb24uYW1pTGF1bmNoUGVybWlzc2lvbj8ub3JnYW5pemF0aW9uYWxVbml0QXJucyxcbiAgICAgIH0pLFxuICAgICAgLi4uKGFtaURpc3RyaWJ1dGlvbi5hbWlMYXVuY2hQZXJtaXNzaW9uPy5vcmdhbml6YXRpb25Bcm5zICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBPcmdhbml6YXRpb25Bcm5zOiBhbWlEaXN0cmlidXRpb24uYW1pTGF1bmNoUGVybWlzc2lvbj8ub3JnYW5pemF0aW9uQXJucyxcbiAgICAgIH0pLFxuICAgICAgLi4uKGFtaURpc3RyaWJ1dGlvbi5hbWlMYXVuY2hQZXJtaXNzaW9uPy5pc1B1YmxpY1VzZXJHcm91cCAmJiB7XG4gICAgICAgIFVzZXJHcm91cHM6IFsnYWxsJ10sXG4gICAgICB9KSxcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pTGF1bmNoUGVybWlzc2lvbj8uYWNjb3VudElkcyAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgVXNlcklkczogYW1pRGlzdHJpYnV0aW9uLmFtaUxhdW5jaFBlcm1pc3Npb24/LmFjY291bnRJZHMsXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxhdW5jaFBlcm1pc3Npb25zKS5sZW5ndGggPyBsYXVuY2hQZXJtaXNzaW9ucyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGYXN0TGF1bmNoQ29uZmlndXJhdGlvbnMoXG4gICAgYW1pRGlzdHJpYnV0aW9uOiBBbWlEaXN0cmlidXRpb24sXG4gICk6IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uRmFzdExhdW5jaENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBmYXN0TGF1bmNoQ29uZmlndXJhdGlvbnMgPSBhbWlEaXN0cmlidXRpb24uZmFzdExhdW5jaENvbmZpZ3VyYXRpb25zPy5tYXAoXG4gICAgICAoZmFzdExhdW5jaENvbmZpZ3VyYXRpb24pOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLkZhc3RMYXVuY2hDb25maWd1cmF0aW9uUHJvcGVydHkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZmFzdExhdW5jaENvbmZpZ3VyYXRpb24ubWF4UGFyYWxsZWxMYXVuY2hlcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgIWNkay5Ub2tlbi5pc1VucmVzb2x2ZWQoZmFzdExhdW5jaENvbmZpZ3VyYXRpb24ubWF4UGFyYWxsZWxMYXVuY2hlcykgJiZcbiAgICAgICAgICBmYXN0TGF1bmNoQ29uZmlndXJhdGlvbi5tYXhQYXJhbGxlbExhdW5jaGVzIDwgTUlOX1BBUkFMTEVMX0xBVU5DSEVTXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgICAgYHlvdSBtdXN0IHNwZWNpZnkgYSBtYXhpbXVtIHBhcmFsbGVsIGxhdW5jaCBjb3VudCBvZiBhdCBsZWFzdCAke01JTl9QQVJBTExFTF9MQVVOQ0hFU31gLFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGF1bmNoVGVtcGxhdGUgPSBmYXN0TGF1bmNoQ29uZmlndXJhdGlvbi5sYXVuY2hUZW1wbGF0ZTtcbiAgICAgICAgY29uc3QgdXNlRmFzdExhdW5jaExhdW5jaFRlbXBsYXRlSWQgPSBsYXVuY2hUZW1wbGF0ZT8ubGF1bmNoVGVtcGxhdGVJZCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBmYXN0TGF1bmNoTGF1bmNoVGVtcGxhdGU6IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uRmFzdExhdW5jaExhdW5jaFRlbXBsYXRlU3BlY2lmaWNhdGlvblByb3BlcnR5ID0ge1xuICAgICAgICAgIC4uLih1c2VGYXN0TGF1bmNoTGF1bmNoVGVtcGxhdGVJZCAmJiB7XG4gICAgICAgICAgICBsYXVuY2hUZW1wbGF0ZUlkOiBsYXVuY2hUZW1wbGF0ZT8ubGF1bmNoVGVtcGxhdGVJZCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi4oIXVzZUZhc3RMYXVuY2hMYXVuY2hUZW1wbGF0ZUlkICYmIHtcbiAgICAgICAgICAgIGxhdW5jaFRlbXBsYXRlTmFtZTogbGF1bmNoVGVtcGxhdGU/LmxhdW5jaFRlbXBsYXRlTmFtZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi4obGF1bmNoVGVtcGxhdGU/LnZlcnNpb25OdW1iZXIgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgICAgICBsYXVuY2hUZW1wbGF0ZVZlcnNpb246IGxhdW5jaFRlbXBsYXRlPy52ZXJzaW9uTnVtYmVyLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZW5hYmxlZDogZmFzdExhdW5jaENvbmZpZ3VyYXRpb24uZW5hYmxlZCxcbiAgICAgICAgICBtYXhQYXJhbGxlbExhdW5jaGVzOiBmYXN0TGF1bmNoQ29uZmlndXJhdGlvbi5tYXhQYXJhbGxlbExhdW5jaGVzLFxuICAgICAgICAgIC4uLihPYmplY3Qua2V5cyhmYXN0TGF1bmNoTGF1bmNoVGVtcGxhdGUpLmxlbmd0aCAmJiB7IGxhdW5jaFRlbXBsYXRlOiBmYXN0TGF1bmNoTGF1bmNoVGVtcGxhdGUgfSksXG4gICAgICAgICAgLi4uKGZhc3RMYXVuY2hDb25maWd1cmF0aW9uLnRhcmdldFNuYXBzaG90Q291bnQgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgICAgICBzbmFwc2hvdENvbmZpZ3VyYXRpb246IHsgdGFyZ2V0UmVzb3VyY2VDb3VudDogZmFzdExhdW5jaENvbmZpZ3VyYXRpb24udGFyZ2V0U25hcHNob3RDb3VudCB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGZhc3RMYXVuY2hDb25maWd1cmF0aW9ucz8ubGVuZ3RoID8gZmFzdExhdW5jaENvbmZpZ3VyYXRpb25zIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZExhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbnMoXG4gICAgYW1pRGlzdHJpYnV0aW9uOiBBbWlEaXN0cmlidXRpb24sXG4gICk6IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uTGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uUHJvcGVydHlbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9ucyA9IGFtaURpc3RyaWJ1dGlvbi5sYXVuY2hUZW1wbGF0ZXM/Lm1hcChcbiAgICAgIChsYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb24pOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLkxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvblByb3BlcnR5ID0+IHtcbiAgICAgICAgaWYgKCFsYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb24ubGF1bmNoVGVtcGxhdGUubGF1bmNoVGVtcGxhdGVJZCkge1xuICAgICAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgICAgJ1lvdSBtdXN0IHJlZmVyZW5jZSBsYXVuY2ggdGVtcGxhdGVzIGJ5IElEIGluIGxhdW5jaCB0ZW1wbGF0ZSBjb25maWd1cmF0aW9ucycsXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFjY291bnRJZDogbGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uLmFjY291bnRJZCxcbiAgICAgICAgICBsYXVuY2hUZW1wbGF0ZUlkOiBsYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb24ubGF1bmNoVGVtcGxhdGUubGF1bmNoVGVtcGxhdGVJZCxcbiAgICAgICAgICBzZXREZWZhdWx0VmVyc2lvbjogbGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uLnNldERlZmF1bHRWZXJzaW9uLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbnM/Lmxlbmd0aCA/IGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTGljZW5zZUNvbmZpZ3VyYXRpb25Bcm5zKGFtaURpc3RyaWJ1dGlvbjogQW1pRGlzdHJpYnV0aW9uKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBhbWlEaXN0cmlidXRpb24ubGljZW5zZUNvbmZpZ3VyYXRpb25Bcm5zPy5sZW5ndGggPyBhbWlEaXN0cmlidXRpb24ubGljZW5zZUNvbmZpZ3VyYXRpb25Bcm5zIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25zKFxuICAgIGFtaURpc3RyaWJ1dGlvbjogQW1pRGlzdHJpYnV0aW9uLFxuICApOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLlNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzc21QYXJhbWV0ZXJDb25maWd1cmF0aW9ucyA9IGFtaURpc3RyaWJ1dGlvbi5zc21QYXJhbWV0ZXJzPy5tYXAoXG4gICAgICAoc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbik6IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uU3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvblByb3BlcnR5ID0+ICh7XG4gICAgICAgIGFtaUFjY291bnRJZDogc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbi5hbWlBY2NvdW50LFxuICAgICAgICBkYXRhVHlwZTogc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbi5kYXRhVHlwZSxcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbi5wYXJhbWV0ZXIucGFyYW1ldGVyTmFtZSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbnM/Lmxlbmd0aCA/IHNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25zIDogdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
424
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzdHJpYnV0aW9uLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkaXN0cmlidXRpb24tY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBbUM7QUFHbkMsMkNBQTJDO0FBQzNDLG1FQUE0RTtBQUc1RSw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBRzFFLE1BQU0saUNBQWlDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywyREFBMkQsQ0FBQyxDQUFDO0FBRWxILHFEQUFxRDtBQUNyRCxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQTBVaEM7O0dBRUc7QUFDSCxNQUFlLDZCQUE4QixTQUFRLEdBQUcsQ0FBQyxRQUFRO0lBVy9EOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLE9BQXVCLEVBQUUsR0FBRyxPQUFpQjtRQUN4RCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQzlCLE9BQU87WUFDUCxPQUFPO1lBQ1AsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDO1lBQ2pELEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7OztPQUlHO0lBQ0ksU0FBUyxDQUFDLE9BQXVCO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsMkNBQTJDLENBQUMsQ0FBQztLQUN6RTtDQUNGO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDM0I7O09BRUc7SUFDSCxnQ0FBVyxDQUFBO0FBQ2IsQ0FBQyxFQUxXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBSzVCO0FBRUQ7O0dBRUc7QUFDSCxNQUFzQixVQUFVOztJQUM5Qjs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUEyQjtRQUMvQyxNQUFNLE1BQU8sU0FB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QStCLENBQ3JDLGVBQWdDO1lBRWhDLE1BQU0sMEJBQTBCLEdBQUcsZUFBZSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQ25FLENBQUMseUJBQXlCLEVBQWtFLEVBQUUsQ0FBQyxDQUFDO2dCQUM5RixZQUFZLEVBQUUseUJBQXlCLENBQUMsVUFBVTtnQkFDbEQsUUFBUSxFQUFFLHlCQUF5QixDQUFDLFFBQVE7Z0JBQzVDLGFBQWEsRUFBRSx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsYUFBYTthQUNqRSxDQUFDLENBQ0gsQ0FBQztZQUVGLE9BQU8sMEJBQTBCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1NBQ3BGOztZQXZXVSx1REFBeUI7Ozs7O0FBQXpCLDhEQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBlY3IgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWltYWdlYnVpbGRlcic7XG5pbXBvcnQgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmNvbnN0IERJU1RSSUJVVElPTl9DT05GSUdVUkFUSU9OX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ0Bhd3MtY2RrL2F3cy1pbWFnZWJ1aWxkZXItYWxwaGEuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbicpO1xuXG4vLyBGYXN0IExhdW5jaCByZXF1aXJlcyBhdCBsZWFzdCA2IHBhcmFsbGVsIGxhdW5jaGVzLlxuY29uc3QgTUlOX1BBUkFMTEVMX0xBVU5DSEVTID0gNjtcblxuLyoqXG4gKiBBbiBFQzIgSW1hZ2UgQnVpbGRlciBEaXN0cmlidXRpb24gQ29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIGNkay5JUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgY3VzdG9tIGFjdGlvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBsaXN0IG9mIGFjdGlvbnNcbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbn1cblxuLyoqXG4gKiBUaGUgbGF1bmNoIHBlcm1pc3Npb25zIGZvciB0aGUgQU1JLCBkZWZpbmluZyB3aGljaCBwcmluY2lwYWxzIGFyZSBhbGxvd2VkIHRvIGFjY2VzcyB0aGUgQU1JXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW1pTGF1bmNoUGVybWlzc2lvbiB7XG4gIC8qKlxuICAgKiBUaGUgQVJOcyBmb3IgdGhlIEFXUyBPcmdhbml6YXRpb25zIG9yZ2FuaXphdGlvbmFsIHVuaXRzIHRvIHNoYXJlIHRoZSBBTUkgd2l0aFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25hbFVuaXRBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBBUk5zIGZvciB0aGUgQVdTIE9yZ2FuaXphdGlvbiB0aGF0IHlvdSB3YW50IHRvIHNoYXJlIHRoZSBBTUkgd2l0aFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25Bcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gbWFrZSB0aGUgQU1JIHB1YmxpYy4gQmxvY2sgcHVibGljIGFjY2VzcyBmb3IgQU1JcyBtdXN0IGJlIGRpc2FibGVkIHRvIG1ha2UgdGhlIEFNSSBwdWJsaWMuXG4gICAqXG4gICAqIFdBUk5JTkc6IE1ha2luZyBhbiBBTUkgcHVibGljIGV4cG9zZXMgaXQgdG8gYW55IEFXUyBhY2NvdW50IGdsb2JhbGx5LlxuICAgKiAgRW5zdXJlIHRoZSBBTUkgZG9lcyBub3QgY29udGFpbjpcbiAgICogIC0gU2Vuc2l0aXZlIGRhdGEgb3IgY3JlZGVudGlhbHNcbiAgICogIC0gUHJvcHJpZXRhcnkgc29mdHdhcmUgb3IgY29uZmlndXJhdGlvbnNcbiAgICogIC0gSW50ZXJuYWwgbmV0d29yayBpbmZvcm1hdGlvbiBvciBzZWN1cml0eSBzZXR0aW5nc1xuICAgKlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBibG9ja2luZyBwdWJsaWMgYWNjZXNzIGZvciBBTUlzLCBzZWU6IFtVbmRlcnN0YW5kIGJsb2NrIHB1YmxpYyBhY2Nlc3MgZm9yIEFNSXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9ibG9jay1wdWJsaWMtYWNjZXNzLXRvLWFtaXMuaHRtbClcbiAgICpcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGlzUHVibGljVXNlckdyb3VwPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIEFXUyBhY2NvdW50IElEcyB0byBzaGFyZSB0aGUgQU1JIHdpdGhcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudElkcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBTU00gcGFyYW1ldGVycyB0byBjcmVhdGUgb3IgdXBkYXRlIGZvciB0aGUgZGlzdHJpYnV0ZWQgQU1Jc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNTTVBhcmFtZXRlckNvbmZpZ3VyYXRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgYWNjb3VudCBJRCB0aGF0IHdpbGwgb3duIHRoZSBTU00gcGFyYW1ldGVyIGluIHRoZSBnaXZlbiByZWdpb24uIFRoaXMgbXVzdCBiZSBvbmUgb2YgdGhlIHRhcmdldCBhY2NvdW50c1xuICAgKiB0aGF0IHdhcyBpbmNsdWRlZCBpbiB0aGUgbGlzdCBvZiBBTUkgZGlzdHJpYnV0aW9uIHRhcmdldCBhY2NvdW50c1xuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgY3VycmVudCBhY2NvdW50IGlzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGFtaUFjY291bnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHR5cGUgb2YgdGhlIFNTTSBwYXJhbWV0ZXJcbiAgICpcbiAgICogQGRlZmF1bHQgc3NtLlBhcmFtZXRlckRhdGFUeXBlLkFXU19FQzJfSU1BR0VcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFUeXBlPzogc3NtLlBhcmFtZXRlckRhdGFUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgU1NNIHBhcmFtZXRlciB0byBjcmVhdGUgb3IgdXBkYXRlXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXI6IHNzbS5JU3RyaW5nUGFyYW1ldGVyO1xufVxuXG4vKipcbiAqIFRoZSBsYXVuY2ggdGVtcGxhdGUgdG8gYXBwbHkgdGhlIGRpc3RyaWJ1dGVkIEFNSSB0b1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgbGF1bmNoIHRlbXBsYXRlIHRvIGFwcGx5IHRoZSBkaXN0cmlidXRlZCBBTUkgdG8uIEEgbmV3IGxhdW5jaCB0ZW1wbGF0ZSB2ZXJzaW9uIHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhlXG4gICAqIHByb3ZpZGVkIGxhdW5jaCB0ZW1wbGF0ZSB3aXRoIHRoZSBkaXN0cmlidXRlZCBBTUkgYXBwbGllZC5cbiAgICpcbiAgICogKk5vdGU6KiBUaGUgbGF1bmNoIHRlbXBsYXRlIHNob3VsZCBleHBvc2UgYSBgbGF1bmNoVGVtcGxhdGVJZGAuIFRlbXBsYXRlc1xuICAgKiBpbXBvcnRlZCBieSBuYW1lIG9ubHkgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gICAqXG4gICAqL1xuICByZWFkb25seSBsYXVuY2hUZW1wbGF0ZTogZWMyLklMYXVuY2hUZW1wbGF0ZTtcblxuICAvKipcbiAgICogVGhlIEFXUyBhY2NvdW50IElEIHRoYXQgb3ducyB0aGUgbGF1bmNoIHRlbXBsYXRlXG4gICAqXG4gICAqIEBkZWZhdWx0IFRoZSBjdXJyZW50IGFjY291bnQgaXMgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNldCB0aGUgbmV3IGxhdW5jaCB0ZW1wbGF0ZSB2ZXJzaW9uIHRoYXQgaXMgY3JlYXRlZCBhcyB0aGUgZGVmYXVsdCBsYXVuY2ggdGVtcGxhdGUgdmVyc2lvbi4gQWZ0ZXJcbiAgICogY3JlYXRpb24gb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZSB2ZXJzaW9uIGNvbnRhaW5pbmcgdGhlIGRpc3RyaWJ1dGVkIEFNSSwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNldCBhcyB0aGVcbiAgICogZGVmYXVsdCB2ZXJzaW9uIGZvciB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2V0RGVmYXVsdFZlcnNpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBFQzIgRmFzdCBMYXVuY2ggY29uZmlndXJhdGlvbiB0byB1c2UgZm9yIHRoZSBXaW5kb3dzIEFNSVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhc3RMYXVuY2hDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGZhc3QgbGF1bmNoIGZvciB0aGUgQU1JXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGxhdW5jaCB0ZW1wbGF0ZSB0aGF0IHRoZSBmYXN0LWxhdW5jaCBlbmFibGVkIFdpbmRvd3MgQU1JIHVzZXMgd2hlbiBpdCBsYXVuY2hlcyBXaW5kb3dzIGluc3RhbmNlcyB0byBjcmVhdGVcbiAgICogcHJlLXByb3Zpc2lvbmVkIHNuYXBzaG90c1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBsYXVuY2hUZW1wbGF0ZT86IGVjMi5JTGF1bmNoVGVtcGxhdGU7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJhbGxlbCBpbnN0YW5jZXMgdGhhdCBhcmUgbGF1bmNoZWQgZm9yIGNyZWF0aW5nIHJlc291cmNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBBIG1heGltdW0gb2YgNiBpbnN0YW5jZXMgYXJlIGxhdW5jaGVkIGluIHBhcmFsbGVsXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9FbmFibGVGYXN0TGF1bmNoLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IG1heFBhcmFsbGVsTGF1bmNoZXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgcHJlLXByb3Zpc2lvbmVkIHNuYXBzaG90cyB0byBrZWVwIG9uIGhhbmQgZm9yIGEgZmFzdC1sYXVuY2ggZW5hYmxlZCBXaW5kb3dzIEFNSVxuICAgKlxuICAgKiBAZGVmYXVsdCAxMCBzbmFwc2hvdHMgYXJlIGtlcHQgcHJlLXByb3Zpc2lvbmVkXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9FbmFibGVGYXN0TGF1bmNoLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldFNuYXBzaG90Q291bnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHJlZ2lvbmFsIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyB0byB1c2UgZm9yIGFuIEFNSSBidWlsZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFtaURpc3RyaWJ1dGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgdGFyZ2V0IHJlZ2lvbiB0byBkaXN0cmlidXRlIEFNSXMgdG9cbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIGN1cnJlbnQgcmVnaW9uIGlzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIGRpc3RyaWJ1dGVkIEFNSXNcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYW1pVGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQU1JXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFtaURlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSB0byBlbmNyeXB0IHRoZSBkaXN0cmlidXRlZCBBTUkgd2l0aFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBhbWlLbXNLZXk/OiBrbXMuSUtleTtcblxuICAvKipcbiAgICogVGhlIGxhdW5jaCBwZXJtaXNzaW9ucyBmb3IgdGhlIEFNSSwgZGVmaW5pbmcgd2hpY2ggcHJpbmNpcGFscyBhcmUgYWxsb3dlZCB0byBhY2Nlc3MgdGhlIEFNSVxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBhbWlMYXVuY2hQZXJtaXNzaW9uPzogQW1pTGF1bmNoUGVybWlzc2lvbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgdG8gdXNlIGZvciB0aGUgZGlzdHJpYnV0ZWQgQU1Jc1xuICAgKlxuICAgKiBAZGVmYXVsdCBBIG5hbWUgaXMgZ2VuZXJhdGVkIGZyb20gdGhlIGltYWdlIHJlY2lwZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBhbWlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWNjb3VudCBJRHMgdG8gY29weSB0aGUgb3V0cHV0IEFNSSB0b1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBhbWlUYXJnZXRBY2NvdW50SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBTU00gcGFyYW1ldGVycyB0byBjcmVhdGUgb3IgdXBkYXRlIGZvciB0aGUgZGlzdHJpYnV0ZWQgQU1Jc1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBzc21QYXJhbWV0ZXJzPzogU1NNUGFyYW1ldGVyQ29uZmlndXJhdGlvbnNbXTtcblxuICAvKipcbiAgICogVGhlIGxhdW5jaCB0ZW1wbGF0ZXMgdG8gYXBwbHkgdGhlIGRpc3RyaWJ1dGVkIEFNSSB0b1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBsYXVuY2hUZW1wbGF0ZXM/OiBMYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25bXTtcblxuICAvKipcbiAgICogVGhlIGZhc3QgbGF1bmNoIGNvbmZpZ3VyYXRpb25zIHRvIHVzZSBmb3IgZW5hYmxpbmcgRUMyIEZhc3QgTGF1bmNoIG9uIHRoZSBkaXN0cmlidXRlZCBXaW5kb3dzIEFNSVxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9FbmFibGVGYXN0TGF1bmNoLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGZhc3RMYXVuY2hDb25maWd1cmF0aW9ucz86IEZhc3RMYXVuY2hDb25maWd1cmF0aW9uW107XG5cbiAgLyoqXG4gICAqIFRoZSBMaWNlbnNlIE1hbmFnZXIgbGljZW5zZSBjb25maWd1cmF0aW9uIEFSTnMgdG8gYXBwbHkgdG8gdGhlIGRpc3RyaWJ1dGVkIEFNSXNcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbGljZW5zZUNvbmZpZ3VyYXRpb25Bcm5zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIHJlZ2lvbmFsIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyB0byB1c2UgZm9yIGEgY29udGFpbmVyIGJ1aWxkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFpbmVyRGlzdHJpYnV0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgcmVnaW9uIHRvIGRpc3RyaWJ1dGUgY29udGFpbmVycyB0b1xuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgY3VycmVudCByZWdpb24gaXMgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzdGluYXRpb24gcmVwb3NpdG9yeSB0byBkaXN0cmlidXRlIHRoZSBvdXRwdXQgY29udGFpbmVyIHRvXG4gICAqXG4gICAqIEBkZWZhdWx0IFRoZSB0YXJnZXQgcmVwb3NpdG9yeSBpbiB0aGUgY29udGFpbmVyIHJlY2lwZSBpcyB1c2VkXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJSZXBvc2l0b3J5OiBSZXBvc2l0b3J5O1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGNvbnRhaW5lciBpbWFnZVxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJEZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFkZGl0aW9uYWwgdGFncyB0byBhcHBseSB0byB0aGUgZGlzdHJpYnV0ZWQgY29udGFpbmVyIGltYWdlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJUYWdzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBEaXN0cmlidXRpb24gQ29uZmlndXJhdGlvbiByZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiB0YXJnZXQgcmVnaW9ucyBhbmQgYXNzb2NpYXRlZCBBTUkgZGlzdHJpYnV0aW9uIHNldHRpbmdzIHdoZXJlIHRoZSBidWlsdCBBTUkgd2lsbCBiZSBkaXN0cmlidXRlZC4gQU1JXG4gICAqIGRpc3RyaWJ1dGlvbnMgbWF5IGFsc28gYmUgYWRkZWQgd2l0aCB0aGUgYGFkZEFtaURpc3RyaWJ1dGlvbnNgIG1ldGhvZC5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZSBpZiBjb250YWluZXIgZGlzdHJpYnV0aW9ucyBhcmUgcHJvdmlkZWQuIE90aGVyd2lzZSwgYXQgbGVhc3Qgb25lIEFNSSBvciBjb250YWluZXIgZGlzdHJpYnV0aW9uIG11c3RcbiAgICogICAgICAgICAgYmUgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGFtaURpc3RyaWJ1dGlvbnM/OiBBbWlEaXN0cmlidXRpb25bXTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgdGFyZ2V0IHJlZ2lvbnMgYW5kIGFzc29jaWF0ZWQgY29udGFpbmVyIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyB3aGVyZSB0aGUgYnVpbHQgY29udGFpbmVyIHdpbGwgYmVcbiAgICogZGlzdHJpYnV0ZWQuIENvbnRhaW5lciBkaXN0cmlidXRpb25zIG1heSBhbHNvIGJlIGFkZGVkIHdpdGggdGhlIGBhZGRDb250YWluZXJEaXN0cmlidXRpb25zYCBtZXRob2QuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmUgaWYgQU1JIGRpc3RyaWJ1dGlvbnMgYXJlIHByb3ZpZGVkLiBPdGhlcndpc2UsIGF0IGxlYXN0IG9uZSBBTUkgb3IgY29udGFpbmVyIGRpc3RyaWJ1dGlvbiBtdXN0IGJlXG4gICAqICAgICAgICAgIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJEaXN0cmlidXRpb25zPzogQ29udGFpbmVyRGlzdHJpYnV0aW9uW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgQSBuYW1lIGlzIGdlbmVyYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFncyB0byBhcHBseSB0byB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogQSBuZXcgb3IgaW1wb3J0ZWQgRGlzdHJpYnV0aW9uIENvbmZpZ3VyYXRpb25cbiAqL1xuYWJzdHJhY3QgY2xhc3MgRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkJhc2UgZXh0ZW5kcyBjZGsuUmVzb3VyY2UgaW1wbGVtZW50cyBJRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyYW50IGN1c3RvbSBhY3Rpb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgbGlzdCBvZiBhY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy5kaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuXSxcbiAgICAgIHNjb3BlOiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAnaW1hZ2VidWlsZGVyOkdldERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24nKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBzZXJ2aWNlIGluIHdoaWNoIGEgY29udGFpbmVyIHNob3VsZCBiZSByZWdpc3RlcmVkXG4gKi9cbmV4cG9ydCBlbnVtIFJlcG9zaXRvcnlTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgY29udGFpbmVyIHNob3VsZCBiZSByZWdpc3RlcmVkIGluIEVDUlxuICAgKi9cbiAgRUNSID0gJ0VDUicsXG59XG5cbi8qKlxuICogQSBjb250YWluZXIgcmVwb3NpdG9yeSB1c2VkIHRvIGRpc3RyaWJ1dGUgY29udGFpbmVyIGltYWdlcyBpbiBFQzIgSW1hZ2UgQnVpbGRlclxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVwb3NpdG9yeSB7XG4gIC8qKlxuICAgKiBUaGUgRUNSIHJlcG9zaXRvcnkgdG8gdXNlIGFzIHRoZSB0YXJnZXQgY29udGFpbmVyIHJlcG9zaXRvcnlcbiAgICpcbiAgICogQHBhcmFtIHJlcG9zaXRvcnkgVGhlIEVDUiByZXBvc2l0b3J5IHRvIHVzZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRWNyKHJlcG9zaXRvcnk6IGVjci5JUmVwb3NpdG9yeSk6IFJlcG9zaXRvcnkge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFJlcG9zaXRvcnkge1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJlcG9zaXRvcnlOYW1lOiBzdHJpbmcgPSByZXBvc2l0b3J5LnJlcG9zaXRvcnlOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2U6IFJlcG9zaXRvcnlTZXJ2aWNlID0gUmVwb3NpdG9yeVNlcnZpY2UuRUNSO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciByZXBvc2l0b3J5IHdoZXJlIHRoZSBvdXRwdXQgY29udGFpbmVyIGltYWdlIGlzIHN0b3JlZFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgcmVwb3NpdG9yeU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNlcnZpY2UgaW4gd2hpY2ggdGhlIGNvbnRhaW5lciByZXBvc2l0b3J5IGlzIGhvc3RlZFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgc2VydmljZTogUmVwb3NpdG9yeVNlcnZpY2U7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBFQzIgSW1hZ2UgQnVpbGRlciBEaXN0cmlidXRpb24gQ29uZmlndXJhdGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9tYW5hZ2UtZGlzdHJpYnV0aW9uLXNldHRpbmdzLmh0bWxcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBEaXN0cmlidXRpb25Db25maWd1cmF0aW9uQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWltYWdlYnVpbGRlci1hbHBoYS5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uJztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGdpdmVuIGl0cyBBUk4uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21EaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuOiBzdHJpbmcsXG4gICk6IElEaXN0cmlidXRpb25Db25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSA9IGNkay5TdGFjay5vZihzY29wZSkuc3BsaXRBcm4oXG4gICAgICBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuLFxuICAgICAgY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgICkucmVzb3VyY2VOYW1lITtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25CYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuID0gZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSA9IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGdpdmVuIGl0cyBuYW1lLiBUaGUgcHJvdmlkZWQgbmFtZSBtdXN0IGJlIG5vcm1hbGl6ZWQgYnkgY29udmVydGluZ1xuICAgKiBhbGwgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLCBhbmQgcmVwbGFjaW5nIGFsbCBzcGFjZXMgYW5kIHVuZGVyc2NvcmVzIHdpdGggaHlwaGVucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZTogc3RyaW5nLFxuICApOiBJRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm4oXG4gICAgICBzY29wZSxcbiAgICAgIGlkLFxuICAgICAgY2RrLlN0YWNrLm9mKHNjb3BlKS5mb3JtYXRBcm4oe1xuICAgICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgICAgcmVzb3VyY2U6ICdkaXN0cmlidXRpb24tY29uZmlndXJhdGlvbicsXG4gICAgICAgIHJlc291cmNlTmFtZTogZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBEaXN0cmlidXRpb25Db25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc0Rpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24oeDogYW55KTogeCBpcyBEaXN0cmlidXRpb25Db25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4geCAhPT0gbnVsbCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgRElTVFJJQlVUSU9OX0NPTkZJR1VSQVRJT05fU1lNQk9MIGluIHg7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhbWlEaXN0cmlidXRpb25zQnlSZWdpb246IHsgW3JlZ2lvbjogc3RyaW5nXTogQW1pRGlzdHJpYnV0aW9uIH0gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb250YWluZXJEaXN0cmlidXRpb25zQnlSZWdpb246IHtcbiAgICBbcmVnaW9uOiBzdHJpbmddOiBDb250YWluZXJEaXN0cmlidXRpb247XG4gIH0gPSB7fTtcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Qcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6XG4gICAgICAgIHByb3BzLmRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lID8/XG4gICAgICAgIGNkay5MYXp5LnN0cmluZyh7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT5cbiAgICAgICAgICAgIGNkay5OYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge1xuICAgICAgICAgICAgICBtYXhMZW5ndGg6IDEyOCxcbiAgICAgICAgICAgICAgc2VwYXJhdG9yOiAnLScsXG4gICAgICAgICAgICAgIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogJy0nLFxuICAgICAgICAgICAgfSkudG9Mb3dlckNhc2UoKSwgLy8gRW5mb3JjZSBsb3dlcmNhc2UgZm9yIHRoZSBhdXRvLWdlbmVyYXRlZCBmYWxsYmFja1xuICAgICAgICB9KSxcbiAgICB9KTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBESVNUUklCVVRJT05fQ09ORklHVVJBVElPTl9TWU1CT0wsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgICB0aGlzLnZhbGlkYXRlRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUoKTtcblxuICAgIHRoaXMuYWRkQW1pRGlzdHJpYnV0aW9ucyguLi4ocHJvcHMuYW1pRGlzdHJpYnV0aW9ucyA/PyBbXSkpO1xuICAgIHRoaXMuYWRkQ29udGFpbmVyRGlzdHJpYnV0aW9ucyguLi4ocHJvcHMuY29udGFpbmVyRGlzdHJpYnV0aW9ucyA/PyBbXSkpO1xuXG4gICAgY29uc3QgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiA9IG5ldyBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZGlzdHJpYnV0aW9uczogY2RrLkxhenkuYW55KHsgcHJvZHVjZTogKCkgPT4gdGhpcy5yZW5kZXJEaXN0cmlidXRpb25zKCkgfSksXG4gICAgICB0YWdzOiBwcm9wcy50YWdzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSA9IHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uYXR0ck5hbWUpO1xuICAgIHRoaXMuZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybiA9IHRoaXMuZ2V0UmVzb3VyY2VBcm5BdHRyaWJ1dGUoZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5hdHRyQXJuLCB7XG4gICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgIHJlc291cmNlOiAnZGlzdHJpYnV0aW9uLWNvbmZpZ3VyYXRpb24nLFxuICAgICAgcmVzb3VyY2VOYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIEFNSSBkaXN0cmlidXRpb24gc2V0dGluZ3MgdG8gdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBhbWlEaXN0cmlidXRpb25zIFRoZSBsaXN0IG9mIEFNSSBkaXN0cmlidXRpb24gc2V0dGluZ3MgdG8gYXBwbHlcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRBbWlEaXN0cmlidXRpb25zKC4uLmFtaURpc3RyaWJ1dGlvbnM6IEFtaURpc3RyaWJ1dGlvbltdKTogdm9pZCB7XG4gICAgYW1pRGlzdHJpYnV0aW9ucy5mb3JFYWNoKChhbWlEaXN0cmlidXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHJlZ2lvbiA9IGFtaURpc3RyaWJ1dGlvbi5yZWdpb24gPz8gY2RrLlN0YWNrLm9mKHRoaXMpLnJlZ2lvbjtcbiAgICAgIGlmICh0aGlzLmFtaURpc3RyaWJ1dGlvbnNCeVJlZ2lvbltyZWdpb25dKSB7XG4gICAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGBkdXBsaWNhdGUgQU1JIGRpc3RyaWJ1dGlvbiBmb3VuZCBmb3IgcmVnaW9uIFwiJHtyZWdpb259XCI7IG9ubHkgb25lIEFNSSBkaXN0cmlidXRpb24gcGVyIHJlZ2lvbiBpcyBhbGxvd2VkYCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFtaURpc3RyaWJ1dGlvbnNCeVJlZ2lvbltyZWdpb25dID0gYW1pRGlzdHJpYnV0aW9uO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgY29udGFpbmVyIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyB0byB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lckRpc3RyaWJ1dGlvbnMgVGhlIGxpc3Qgb2YgY29udGFpbmVyIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyB0byBhcHBseVxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZENvbnRhaW5lckRpc3RyaWJ1dGlvbnMoLi4uY29udGFpbmVyRGlzdHJpYnV0aW9uczogQ29udGFpbmVyRGlzdHJpYnV0aW9uW10pOiB2b2lkIHtcbiAgICBjb250YWluZXJEaXN0cmlidXRpb25zLmZvckVhY2goKGNvbnRhaW5lckRpc3RyaWJ1dGlvbikgPT4ge1xuICAgICAgY29uc3QgcmVnaW9uID0gY29udGFpbmVyRGlzdHJpYnV0aW9uLnJlZ2lvbiA/PyBjZGsuU3RhY2sub2YodGhpcykucmVnaW9uO1xuICAgICAgaWYgKHRoaXMuY29udGFpbmVyRGlzdHJpYnV0aW9uc0J5UmVnaW9uW3JlZ2lvbl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYGR1cGxpY2F0ZSBDb250YWluZXIgZGlzdHJpYnV0aW9uIGZvdW5kIGZvciByZWdpb24gXCIke3JlZ2lvbn1cIjsgb25seSBvbmUgQ29udGFpbmVyIGRpc3RyaWJ1dGlvbiBwZXIgcmVnaW9uIGlzIGFsbG93ZWRgLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29udGFpbmVyRGlzdHJpYnV0aW9uc0J5UmVnaW9uW3JlZ2lvbl0gPSBjb250YWluZXJEaXN0cmlidXRpb247XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUoKSB7XG4gICAgaWYgKGNkay5Ub2tlbi5pc1VucmVzb2x2ZWQodGhpcy5waHlzaWNhbE5hbWUpKSB7XG4gICAgICByZXR1cm47IC8vIENhbm5vdCB2YWxpZGF0ZSB1bnJlc29sdmVkIHRva2VucywgZ2l2ZW4gdGhlaXIgYWN0dWFsIHZhbHVlIGlzIHJlbmRlcmVkIGF0IGRlcGxveW1lbnQgdGltZVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5sZW5ndGggPiAxMjgpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKCdUaGUgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUgY2Fubm90IGJlIGxvbmdlciB0aGFuIDEyOCBjaGFyYWN0ZXJzJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lLmluY2x1ZGVzKCcgJykpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKCdUaGUgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUgY2Fubm90IGNvbnRhaW4gc3BhY2VzJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lLmluY2x1ZGVzKCdfJykpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKCdUaGUgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUgY2Fubm90IGNvbnRhaW4gdW5kZXJzY29yZXMnLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUgIT09IHRoaXMucGh5c2ljYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKCdUaGUgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUgbXVzdCBiZSBsb3dlcmNhc2UnLCB0aGlzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgQU1JIGFuZCBjb250YWluZXIgZGlzdHJpYnV0aW9ucyBwcm92aWRlZCBhcyBpbnB1dCB0byB0aGUgY29uc3RydWN0LCBpbnRvIHRoZSBgRGlzdHJpYnV0aW9uW11gIHN0cnVjdHVyZVxuICAgKiB0aGF0IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gZXhwZWN0cyB0byByZWNlaXZlLiBEaXN0cmlidXRpb25zIHByb3ZpZGVkIHRvIENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gbXVzdFxuICAgKiBtYXAgdG8gYSB1bmlxdWUgcmVnaW9uIHBlciBlbnRyeSBpbiB0aGUgbGlzdCAtIHRoaXMgcmVuZGVyIGZ1bmN0aW9uIGFsc28gaGFuZGxlcyBjb21iaW5pbmcgQU1JIGFuZCBjb250YWluZXJcbiAgICogZGlzdHJpYnV0aW9ucyBpbiB0aGUgc2FtZSByZWdpb24gaW50byBhIHNpbmdsZSBlbnRyeS5cbiAgICpcbiAgICogVGhpcyBpcyByZW5kZXJlZCBhdCBzeW50aGVzaXMgdGltZSwgYXMgdXNlcnMgY2FuIGFkZCBhZGRpdGlvbmFsIEFNSSBhbmQgY29udGFpbmVyIGRpc3RyaWJ1dGlvbnMgd2l0aFxuICAgKiBgYWRkQW1pRGlzdHJpYnV0aW9uc2AgYW5kIGBhZGRDb250YWluZXJEaXN0cmlidXRpb25zYCwgYWZ0ZXIgdGhlIGNvbnN0cnVjdCBoYXMgYmVlbiBpbnN0YW50aWF0ZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckRpc3RyaWJ1dGlvbnMoKTogQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5EaXN0cmlidXRpb25Qcm9wZXJ0eVtdIHtcbiAgICBpZiAoXG4gICAgICAhT2JqZWN0LmtleXModGhpcy5hbWlEaXN0cmlidXRpb25zQnlSZWdpb24pLmxlbmd0aCAmJlxuICAgICAgIU9iamVjdC5rZXlzKHRoaXMuY29udGFpbmVyRGlzdHJpYnV0aW9uc0J5UmVnaW9uKS5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKCdZb3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBBTUkgb3IgY29udGFpbmVyIGRpc3RyaWJ1dGlvbicsIHRoaXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGRpc3RyaWJ1dGlvbkJ5UmVnaW9uOiB7IFtyZWdpb246IHN0cmluZ106IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uRGlzdHJpYnV0aW9uUHJvcGVydHkgfSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBbcmVnaW9uLCBkaXN0cmlidXRpb25dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuYW1pRGlzdHJpYnV0aW9uc0J5UmVnaW9uKSkge1xuICAgICAgZGlzdHJpYnV0aW9uQnlSZWdpb25bcmVnaW9uXSA9IHtcbiAgICAgICAgcmVnaW9uLFxuICAgICAgICBhbWlEaXN0cmlidXRpb25Db25maWd1cmF0aW9uOiB0aGlzLmJ1aWxkQW1pRGlzdHJpYnV0aW9uKGRpc3RyaWJ1dGlvbiksXG4gICAgICAgIGZhc3RMYXVuY2hDb25maWd1cmF0aW9uczogdGhpcy5idWlsZEZhc3RMYXVuY2hDb25maWd1cmF0aW9ucyhkaXN0cmlidXRpb24pLFxuICAgICAgICBsYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25zOiB0aGlzLmJ1aWxkTGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9ucyhkaXN0cmlidXRpb24pLFxuICAgICAgICBzc21QYXJhbWV0ZXJDb25maWd1cmF0aW9uczogdGhpcy5idWlsZFNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25zKGRpc3RyaWJ1dGlvbiksXG4gICAgICAgIGxpY2Vuc2VDb25maWd1cmF0aW9uQXJuczogdGhpcy5idWlsZExpY2Vuc2VDb25maWd1cmF0aW9uQXJucyhkaXN0cmlidXRpb24pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtyZWdpb24sIGNvbnRhaW5lckRpc3RyaWJ1dGlvbl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb250YWluZXJEaXN0cmlidXRpb25zQnlSZWdpb24pKSB7XG4gICAgICBkaXN0cmlidXRpb25CeVJlZ2lvbltyZWdpb25dID0ge1xuICAgICAgICAuLi4oZGlzdHJpYnV0aW9uQnlSZWdpb25bcmVnaW9uXSA/PyB7fSksXG4gICAgICAgIHJlZ2lvbixcbiAgICAgICAgY29udGFpbmVyRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbjogdGhpcy5idWlsZENvbnRhaW5lckRpc3RyaWJ1dGlvbihjb250YWluZXJEaXN0cmlidXRpb24pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXN0cmlidXRpb25zID0gT2JqZWN0LnZhbHVlcyhkaXN0cmlidXRpb25CeVJlZ2lvbik7XG5cbiAgICBkaXN0cmlidXRpb25zLmZvckVhY2goKGRpc3RyaWJ1dGlvbikgPT4ge1xuICAgICAgY29uc3QgeyByZWdpb246IF8sIC4uLmRpc3RyaWJ1dGlvbldpdGhvdXRSZWdpb24gfSA9IGRpc3RyaWJ1dGlvbjtcbiAgICAgIGlmICghT2JqZWN0LmVudHJpZXMoZGlzdHJpYnV0aW9uV2l0aG91dFJlZ2lvbikuc29tZSgoW19fLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGBhdCBsZWFzdCBvbmUgZGlzdHJpYnV0aW9uIHByb3BlcnR5IG11c3QgYmUgc2V0IGZvciByZWdpb24gXCIke2Rpc3RyaWJ1dGlvbi5yZWdpb259XCJgLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGlzdHJpYnV0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRBbWlEaXN0cmlidXRpb24oYW1pRGlzdHJpYnV0aW9uOiBBbWlEaXN0cmlidXRpb24pOiBvYmplY3QgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGxhdW5jaFBlcm1pc3Npb25zID0gdGhpcy5idWlsZEFtaUxhdW5jaFBlcm1pc3Npb25zKGFtaURpc3RyaWJ1dGlvbik7XG4gICAgY29uc3QgYW1pRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIC4uLihPYmplY3Qua2V5cyhhbWlEaXN0cmlidXRpb24uYW1pVGFncyA/PyB7fSkubGVuZ3RoICYmIHsgQW1pVGFnczogYW1pRGlzdHJpYnV0aW9uLmFtaVRhZ3MgfSksXG4gICAgICAuLi4oYW1pRGlzdHJpYnV0aW9uLmFtaURlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYgeyBEZXNjcmlwdGlvbjogYW1pRGlzdHJpYnV0aW9uLmFtaURlc2NyaXB0aW9uIH0pLFxuICAgICAgLi4uKGFtaURpc3RyaWJ1dGlvbi5hbWlLbXNLZXkgIT09IHVuZGVmaW5lZCAmJiB7IEttc0tleUlkOiBhbWlEaXN0cmlidXRpb24uYW1pS21zS2V5LmtleUFybiB9KSxcbiAgICAgIC4uLihsYXVuY2hQZXJtaXNzaW9ucyAmJiB7IExhdW5jaFBlcm1pc3Npb25Db25maWd1cmF0aW9uOiBsYXVuY2hQZXJtaXNzaW9ucyB9KSxcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pTmFtZSAhPT0gdW5kZWZpbmVkICYmIHsgTmFtZTogYW1pRGlzdHJpYnV0aW9uLmFtaU5hbWUgfSksXG4gICAgICAuLi4oYW1pRGlzdHJpYnV0aW9uLmFtaVRhcmdldEFjY291bnRJZHMgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIFRhcmdldEFjY291bnRJZHM6IGFtaURpc3RyaWJ1dGlvbi5hbWlUYXJnZXRBY2NvdW50SWRzLFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhhbWlEaXN0cmlidXRpb25Db25maWd1cmF0aW9uKS5sZW5ndGggPyBhbWlEaXN0cmlidXRpb25Db25maWd1cmF0aW9uIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbnRhaW5lckRpc3RyaWJ1dGlvbihjb250YWluZXJEaXN0cmlidXRpb246IENvbnRhaW5lckRpc3RyaWJ1dGlvbik6IG9iamVjdCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIENvbnRhaW5lclRhZ3M6IGNvbnRhaW5lckRpc3RyaWJ1dGlvbi5jb250YWluZXJUYWdzLFxuICAgICAgRGVzY3JpcHRpb246IGNvbnRhaW5lckRpc3RyaWJ1dGlvbi5jb250YWluZXJEZXNjcmlwdGlvbixcbiAgICAgIFRhcmdldFJlcG9zaXRvcnk6IHtcbiAgICAgICAgUmVwb3NpdG9yeU5hbWU6IGNvbnRhaW5lckRpc3RyaWJ1dGlvbi5jb250YWluZXJSZXBvc2l0b3J5LnJlcG9zaXRvcnlOYW1lLFxuICAgICAgICBTZXJ2aWNlOiBjb250YWluZXJEaXN0cmlidXRpb24uY29udGFpbmVyUmVwb3NpdG9yeS5zZXJ2aWNlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEFtaUxhdW5jaFBlcm1pc3Npb25zKGFtaURpc3RyaWJ1dGlvbjogQW1pRGlzdHJpYnV0aW9uKTogb2JqZWN0IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoYW1pRGlzdHJpYnV0aW9uLmFtaUxhdW5jaFBlcm1pc3Npb24/LmlzUHVibGljVXNlckdyb3VwKSB7XG4gICAgICBjZGsuQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZyhcbiAgICAgICAgJ0FNSSBpcyBjb25maWd1cmVkIGZvciBwdWJsaWMgYWNjZXNzLCBtYWtpbmcgaXQgYXZhaWxhYmxlIHRvIGFueSBBV1MgYWNjb3VudCBnbG9iYWxseS4gJyArXG4gICAgICAgICAgJ0Vuc3VyZSBubyBzZW5zaXRpdmUgZGF0YSwgY3JlZGVudGlhbHMsIG9yIHByb3ByaWV0YXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBpbmNsdWRlZC4gJyArXG4gICAgICAgICAgXCJSZXZpZXcgeW91ciBvcmdhbml6YXRpb24ncyBzZWN1cml0eSBwb2xpY2llcyBiZWZvcmUgZGVwbG95aW5nIHB1YmxpYyBBTUlzLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXVuY2hQZXJtaXNzaW9ucyA9IHtcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pTGF1bmNoUGVybWlzc2lvbj8ub3JnYW5pemF0aW9uYWxVbml0QXJucyAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgT3JnYW5pemF0aW9uYWxVbml0QXJuczogYW1pRGlzdHJpYnV0aW9uLmFtaUxhdW5jaFBlcm1pc3Npb24/Lm9yZ2FuaXphdGlvbmFsVW5pdEFybnMsXG4gICAgICB9KSxcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pTGF1bmNoUGVybWlzc2lvbj8ub3JnYW5pemF0aW9uQXJucyAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgT3JnYW5pemF0aW9uQXJuczogYW1pRGlzdHJpYnV0aW9uLmFtaUxhdW5jaFBlcm1pc3Npb24/Lm9yZ2FuaXphdGlvbkFybnMsXG4gICAgICB9KSxcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pTGF1bmNoUGVybWlzc2lvbj8uaXNQdWJsaWNVc2VyR3JvdXAgJiYge1xuICAgICAgICBVc2VyR3JvdXBzOiBbJ2FsbCddLFxuICAgICAgfSksXG4gICAgICAuLi4oYW1pRGlzdHJpYnV0aW9uLmFtaUxhdW5jaFBlcm1pc3Npb24/LmFjY291bnRJZHMgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIFVzZXJJZHM6IGFtaURpc3RyaWJ1dGlvbi5hbWlMYXVuY2hQZXJtaXNzaW9uPy5hY2NvdW50SWRzLFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYXVuY2hQZXJtaXNzaW9ucykubGVuZ3RoID8gbGF1bmNoUGVybWlzc2lvbnMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRmFzdExhdW5jaENvbmZpZ3VyYXRpb25zKFxuICAgIGFtaURpc3RyaWJ1dGlvbjogQW1pRGlzdHJpYnV0aW9uLFxuICApOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLkZhc3RMYXVuY2hDb25maWd1cmF0aW9uUHJvcGVydHlbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmFzdExhdW5jaENvbmZpZ3VyYXRpb25zID0gYW1pRGlzdHJpYnV0aW9uLmZhc3RMYXVuY2hDb25maWd1cmF0aW9ucz8ubWFwKFxuICAgICAgKGZhc3RMYXVuY2hDb25maWd1cmF0aW9uKTogQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5GYXN0TGF1bmNoQ29uZmlndXJhdGlvblByb3BlcnR5ID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZhc3RMYXVuY2hDb25maWd1cmF0aW9uLm1heFBhcmFsbGVsTGF1bmNoZXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICFjZGsuVG9rZW4uaXNVbnJlc29sdmVkKGZhc3RMYXVuY2hDb25maWd1cmF0aW9uLm1heFBhcmFsbGVsTGF1bmNoZXMpICYmXG4gICAgICAgICAgZmFzdExhdW5jaENvbmZpZ3VyYXRpb24ubWF4UGFyYWxsZWxMYXVuY2hlcyA8IE1JTl9QQVJBTExFTF9MQVVOQ0hFU1xuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAgIGB5b3UgbXVzdCBzcGVjaWZ5IGEgbWF4aW11bSBwYXJhbGxlbCBsYXVuY2ggY291bnQgb2YgYXQgbGVhc3QgJHtNSU5fUEFSQUxMRUxfTEFVTkNIRVN9YCxcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhdW5jaFRlbXBsYXRlID0gZmFzdExhdW5jaENvbmZpZ3VyYXRpb24ubGF1bmNoVGVtcGxhdGU7XG4gICAgICAgIGNvbnN0IHVzZUZhc3RMYXVuY2hMYXVuY2hUZW1wbGF0ZUlkID0gbGF1bmNoVGVtcGxhdGU/LmxhdW5jaFRlbXBsYXRlSWQgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZmFzdExhdW5jaExhdW5jaFRlbXBsYXRlOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLkZhc3RMYXVuY2hMYXVuY2hUZW1wbGF0ZVNwZWNpZmljYXRpb25Qcm9wZXJ0eSA9IHtcbiAgICAgICAgICAuLi4odXNlRmFzdExhdW5jaExhdW5jaFRlbXBsYXRlSWQgJiYge1xuICAgICAgICAgICAgbGF1bmNoVGVtcGxhdGVJZDogbGF1bmNoVGVtcGxhdGU/LmxhdW5jaFRlbXBsYXRlSWQsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLi4uKCF1c2VGYXN0TGF1bmNoTGF1bmNoVGVtcGxhdGVJZCAmJiB7XG4gICAgICAgICAgICBsYXVuY2hUZW1wbGF0ZU5hbWU6IGxhdW5jaFRlbXBsYXRlPy5sYXVuY2hUZW1wbGF0ZU5hbWUsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLi4uKGxhdW5jaFRlbXBsYXRlPy52ZXJzaW9uTnVtYmVyICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICAgICAgbGF1bmNoVGVtcGxhdGVWZXJzaW9uOiBsYXVuY2hUZW1wbGF0ZT8udmVyc2lvbk51bWJlcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVuYWJsZWQ6IGZhc3RMYXVuY2hDb25maWd1cmF0aW9uLmVuYWJsZWQsXG4gICAgICAgICAgbWF4UGFyYWxsZWxMYXVuY2hlczogZmFzdExhdW5jaENvbmZpZ3VyYXRpb24ubWF4UGFyYWxsZWxMYXVuY2hlcyxcbiAgICAgICAgICAuLi4oT2JqZWN0LmtleXMoZmFzdExhdW5jaExhdW5jaFRlbXBsYXRlKS5sZW5ndGggJiYgeyBsYXVuY2hUZW1wbGF0ZTogZmFzdExhdW5jaExhdW5jaFRlbXBsYXRlIH0pLFxuICAgICAgICAgIC4uLihmYXN0TGF1bmNoQ29uZmlndXJhdGlvbi50YXJnZXRTbmFwc2hvdENvdW50ICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICAgICAgc25hcHNob3RDb25maWd1cmF0aW9uOiB7IHRhcmdldFJlc291cmNlQ291bnQ6IGZhc3RMYXVuY2hDb25maWd1cmF0aW9uLnRhcmdldFNuYXBzaG90Q291bnQgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHJldHVybiBmYXN0TGF1bmNoQ29uZmlndXJhdGlvbnM/Lmxlbmd0aCA/IGZhc3RMYXVuY2hDb25maWd1cmF0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRMYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25zKFxuICAgIGFtaURpc3RyaWJ1dGlvbjogQW1pRGlzdHJpYnV0aW9uLFxuICApOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLkxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvblByb3BlcnR5W10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbnMgPSBhbWlEaXN0cmlidXRpb24ubGF1bmNoVGVtcGxhdGVzPy5tYXAoXG4gICAgICAobGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uKTogQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5MYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25Qcm9wZXJ0eSA9PiB7XG4gICAgICAgIGlmICghbGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uLmxhdW5jaFRlbXBsYXRlLmxhdW5jaFRlbXBsYXRlSWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAgICdZb3UgbXVzdCByZWZlcmVuY2UgbGF1bmNoIHRlbXBsYXRlcyBieSBJRCBpbiBsYXVuY2ggdGVtcGxhdGUgY29uZmlndXJhdGlvbnMnLFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY2NvdW50SWQ6IGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbi5hY2NvdW50SWQsXG4gICAgICAgICAgbGF1bmNoVGVtcGxhdGVJZDogbGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uLmxhdW5jaFRlbXBsYXRlLmxhdW5jaFRlbXBsYXRlSWQsXG4gICAgICAgICAgc2V0RGVmYXVsdFZlcnNpb246IGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbi5zZXREZWZhdWx0VmVyc2lvbixcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHJldHVybiBsYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25zPy5sZW5ndGggPyBsYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25zIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZExpY2Vuc2VDb25maWd1cmF0aW9uQXJucyhhbWlEaXN0cmlidXRpb246IEFtaURpc3RyaWJ1dGlvbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gYW1pRGlzdHJpYnV0aW9uLmxpY2Vuc2VDb25maWd1cmF0aW9uQXJucz8ubGVuZ3RoID8gYW1pRGlzdHJpYnV0aW9uLmxpY2Vuc2VDb25maWd1cmF0aW9uQXJucyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTc21QYXJhbWV0ZXJDb25maWd1cmF0aW9ucyhcbiAgICBhbWlEaXN0cmlidXRpb246IEFtaURpc3RyaWJ1dGlvbixcbiAgKTogQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5Tc21QYXJhbWV0ZXJDb25maWd1cmF0aW9uUHJvcGVydHlbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbnMgPSBhbWlEaXN0cmlidXRpb24uc3NtUGFyYW1ldGVycz8ubWFwKFxuICAgICAgKHNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24pOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLlNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25Qcm9wZXJ0eSA9PiAoe1xuICAgICAgICBhbWlBY2NvdW50SWQ6IHNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24uYW1pQWNjb3VudCxcbiAgICAgICAgZGF0YVR5cGU6IHNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24uZGF0YVR5cGUsXG4gICAgICAgIHBhcmFtZXRlck5hbWU6IHNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24ucGFyYW1ldGVyLnBhcmFtZXRlck5hbWUsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25zPy5sZW5ndGggPyBzc21QYXJhbWV0ZXJDb25maWd1cmF0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
@@ -0,0 +1,238 @@
1
+ import * as cdk from 'aws-cdk-lib';
2
+ import * as ec2 from 'aws-cdk-lib/aws-ec2';
3
+ import * as iam from 'aws-cdk-lib/aws-iam';
4
+ import { Construct } from 'constructs';
5
+ import { BaseImage } from './base-image';
6
+ import { IContainerRecipe } from './container-recipe';
7
+ import { ComponentConfiguration, IRecipeBase } from './recipe-base';
8
+ /**
9
+ * An EC2 Image Builder Image Recipe.
10
+ */
11
+ export interface IImageRecipe extends IRecipeBase {
12
+ /**
13
+ * The ARN of the image recipe
14
+ *
15
+ * @attribute
16
+ */
17
+ readonly imageRecipeArn: string;
18
+ /**
19
+ * The name of the image recipe
20
+ *
21
+ * @attribute
22
+ */
23
+ readonly imageRecipeName: string;
24
+ /**
25
+ * The version of the image recipe
26
+ *
27
+ * @attribute
28
+ */
29
+ readonly imageRecipeVersion: string;
30
+ }
31
+ /**
32
+ * Properties for creating an Image Recipe resource
33
+ */
34
+ export interface ImageRecipeProps {
35
+ /**
36
+ * The base image for customizations specified in the image recipe.
37
+ */
38
+ readonly baseImage: BaseImage;
39
+ /**
40
+ * The name of the image recipe.
41
+ *
42
+ * @default - a name is generated
43
+ */
44
+ readonly imageRecipeName?: string;
45
+ /**
46
+ * The version of the image recipe.
47
+ *
48
+ * @default 1.0.x
49
+ */
50
+ readonly imageRecipeVersion?: string;
51
+ /**
52
+ * The description of the image recipe.
53
+ *
54
+ * @default None
55
+ */
56
+ readonly description?: string;
57
+ /**
58
+ * The list of component configurations to apply in the image build.
59
+ *
60
+ * @default None
61
+ */
62
+ readonly components?: ComponentConfiguration[];
63
+ /**
64
+ * The additional tags to assign to the output AMI generated by the build.
65
+ *
66
+ * @default None
67
+ */
68
+ readonly amiTags?: {
69
+ [key: string]: string;
70
+ };
71
+ /**
72
+ * The block devices to attach to the instance used for building the image.
73
+ *
74
+ * @default None
75
+ */
76
+ readonly blockDevices?: ec2.BlockDevice[];
77
+ /**
78
+ * The working directory for use during build and test workflows.
79
+ *
80
+ * @default - the Image Builder default working directory is used. For Linux and macOS builds, this would be /tmp. For
81
+ * Windows builds, this would be C:/
82
+ */
83
+ readonly workingDirectory?: string;
84
+ /**
85
+ * Whether to uninstall the Systems Manager agent from your final build image, prior to creating the new AMI.
86
+ *
87
+ * @default - this is false if the Systems Manager agent is pre-installed on the base image. Otherwise, this is true.
88
+ */
89
+ readonly uninstallSsmAgentAfterBuild?: boolean;
90
+ /**
91
+ * The user data commands to pass to Image Builder build and test EC2 instances. For Linux and macOS, Image Builder
92
+ * uses a default user data script to install the Systems Manager agent. If you override the user data, you must
93
+ * ensure to add commands to install Systems Manager agent, if it is not pre-installed on your base image.
94
+ *
95
+ * @default None
96
+ */
97
+ readonly userDataOverride?: ec2.UserData;
98
+ /**
99
+ * The tags to apply to the image recipe
100
+ *
101
+ * @default None
102
+ */
103
+ readonly tags?: {
104
+ [key: string]: string;
105
+ };
106
+ }
107
+ /**
108
+ * Properties for an EC2 Image Builder image recipe
109
+ */
110
+ export interface ImageRecipeAttributes {
111
+ /**
112
+ * The ARN of the image recipe
113
+ *
114
+ * @default - derived from the imageRecipeName
115
+ */
116
+ readonly imageRecipeArn?: string;
117
+ /**
118
+ * The name of the image recipe
119
+ *
120
+ * @default - derived from the imageRecipeArn
121
+ */
122
+ readonly imageRecipeName?: string;
123
+ /**
124
+ * The version of the image recipe
125
+ *
126
+ * @default - derived from imageRecipeArn. if a imageRecipeName is provided, the latest version, x.x.x, will
127
+ * be used
128
+ */
129
+ readonly imageRecipeVersion?: string;
130
+ }
131
+ /**
132
+ * A new or imported Image Recipe
133
+ */
134
+ declare abstract class ImageRecipeBase extends cdk.Resource implements IImageRecipe {
135
+ /**
136
+ * The ARN of the image recipe
137
+ */
138
+ abstract readonly imageRecipeArn: string;
139
+ /**
140
+ * The name of the image recipe
141
+ */
142
+ abstract readonly imageRecipeName: string;
143
+ /**
144
+ * The version of the image recipe
145
+ */
146
+ abstract readonly imageRecipeVersion: string;
147
+ /**
148
+ * Grant custom actions to the given grantee for the image recipe
149
+ *
150
+ * @param grantee The principal
151
+ * @param actions The list of actions
152
+ */
153
+ grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant;
154
+ /**
155
+ * Grant read permissions to the given grantee for the image recipe
156
+ *
157
+ * @param grantee The principal
158
+ */
159
+ grantRead(grantee: iam.IGrantable): iam.Grant;
160
+ /**
161
+ * Indicates whether the recipe is a Container Recipe
162
+ *
163
+ * @internal
164
+ */
165
+ _isContainerRecipe(): this is IContainerRecipe;
166
+ /**
167
+ * Indicates whether the recipe is an Image Recipe
168
+ *
169
+ * @internal
170
+ */
171
+ _isImageRecipe(): this is IImageRecipe;
172
+ }
173
+ /**
174
+ * Represents an EC2 Image Builder Image Recipe.
175
+ *
176
+ * @see https://docs.aws.amazon.com/imagebuilder/latest/userguide/manage-recipes.html
177
+ */
178
+ export declare class ImageRecipe extends ImageRecipeBase {
179
+ /** Uniquely identifies this class. */
180
+ static readonly PROPERTY_INJECTION_ID: string;
181
+ /**
182
+ * Import an existing image recipe given its ARN.
183
+ */
184
+ static fromImageRecipeArn(scope: Construct, id: string, imageRecipeArn: string): IImageRecipe;
185
+ /**
186
+ * Import the latest version of an existing image recipe given its name. The provided name must be normalized by
187
+ * converting all alphabetical characters to lowercase, and replacing all spaces and underscores with hyphens.
188
+ */
189
+ static fromImageRecipeName(scope: Construct, id: string, imageRecipeName: string): IImageRecipe;
190
+ /**
191
+ * Import an existing image recipe by providing its attributes. If the image recipe name is provided as an attribute,
192
+ * it must be normalized by converting all alphabetical characters to lowercase, and replacing all spaces and
193
+ * underscores with hyphens.
194
+ */
195
+ static fromImageRecipeAttributes(scope: Construct, id: string, attrs: ImageRecipeAttributes): IImageRecipe;
196
+ /**
197
+ * Return whether the given object is an ImageRecipe.
198
+ */
199
+ static isImageRecipe(x: any): x is ImageRecipe;
200
+ /**
201
+ * The ARN of the image recipe
202
+ */
203
+ readonly imageRecipeArn: string;
204
+ /**
205
+ * The name of the image recipe
206
+ */
207
+ readonly imageRecipeName: string;
208
+ /**
209
+ * The version of the image recipe
210
+ */
211
+ readonly imageRecipeVersion: string;
212
+ private readonly blockDevices;
213
+ constructor(scope: Construct, id: string, props: ImageRecipeProps);
214
+ /**
215
+ * Adds block devices to attach to the instance used for building the image.
216
+ *
217
+ * @param blockDevices The list of block devices to attach
218
+ */
219
+ addBlockDevice(...blockDevices: ec2.BlockDevice[]): void;
220
+ /**
221
+ * Renders the input block devices, into the `BlockDeviceMapping[]` structure that CfnImageRecipe expects to receive.
222
+ * This is rendered at synthesis time, as users can add additional block devices with `addBlockDevice`, after the
223
+ * construct has been instantiated.
224
+ *
225
+ * @private
226
+ */
227
+ private renderBlockDevices;
228
+ /**
229
+ * Generates the additional instance configuration property into the `AdditionalInstanceConfiguration` type in the
230
+ * CloudFormation L1 definition.
231
+ *
232
+ * @param props The props passed as input to the construct
233
+ * @private
234
+ */
235
+ private buildAdditionalInstanceConfiguration;
236
+ private validateImageRecipeName;
237
+ }
238
+ export {};