deployable-awscdk-app-ts 0.1.682 → 0.1.684

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.
package/lib/index.js CHANGED
@@ -23,6 +23,7 @@ const types_1 = require("./types");
23
23
  const utils_1 = require("./utils");
24
24
  __exportStar(require("./types"), exports);
25
25
  exports.utils = require("./utils");
26
+ __exportStar(require("./steps"), exports);
26
27
  class DeployableAwsCdkTypeScriptApp extends projen_1.awscdk.AwsCdkTypeScriptApp {
27
28
  constructor(options) {
28
29
  const deployable = options.release ?? true;
@@ -150,5 +151,5 @@ class DeployableAwsCdkTypeScriptApp extends projen_1.awscdk.AwsCdkTypeScriptApp
150
151
  }
151
152
  exports.DeployableAwsCdkTypeScriptApp = DeployableAwsCdkTypeScriptApp;
152
153
  _a = JSII_RTTI_SYMBOL_1;
153
- DeployableAwsCdkTypeScriptApp[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptApp", version: "0.1.682" };
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFnRDtBQUVoRCxtQ0FBb0U7QUFDcEUsbUNBQXdKO0FBQ3hKLG1DQUE4QztBQUU5QywwQ0FBd0I7QUFDeEIsbUNBQWlDO0FBRWpDLE1BQWEsNkJBQThCLFNBQVEsZUFBTSxDQUFDLG1CQUFtQjtJQWlCM0UsWUFBWSxPQUE2QztRQUN2RCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQztRQUMzQyxLQUFLLENBQUM7WUFDSixHQUFHLE9BQU87WUFDVixPQUFPLEVBQUUsVUFBVTtTQUNwQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDO1FBQ25ELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUMscUJBQXFCLElBQUksS0FBSyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUM7UUFDdkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ25FLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUM7UUFDdkQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxJQUFJLHlCQUFpQixDQUFDLE1BQU0sQ0FBQztRQUVwRixJQUFJLENBQUMsVUFBVSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFNUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUZBQWlGLENBQUMs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QUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksdUNBQXVDLENBQUMsdUJBQTBEO1FBQ3ZHLGlEQUF5QyxDQUFDLHlDQUF5QyxDQUNqRixJQUFJLENBQUMsYUFBYSxFQUNsQix1QkFBdUIsQ0FDeEIsQ0FBQztRQUVGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyx1QkFBdUIsQ0FBQztJQUN6RCxDQUFDOztBQXZKSCxzRUF3SkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhd3NjZGssIFRhc2ssIFRleHRGaWxlIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IENvZGVBcnRpZmFjdE9wdGlvbnMgfSBmcm9tICdwcm9qZW4vbGliL2phdmFzY3JpcHQnO1xuaW1wb3J0IHsgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkgfSBmcm9tICcuL3N0ZXBzJztcbmltcG9ydCB7IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwT3B0aW9ucywgRGVwbG95Sm9iU3RyYXRlZ3ksIERlcGxveU9wdGlvbnMsIEVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcywgRW52aXJvbm1lbnRPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRNYWpvck5vZGVWZXJzaW9uIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogYXMgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcCBleHRlbmRzIGF3c2Nkay5Bd3NDZGtUeXBlU2NyaXB0QXBwIHtcblxuICAvKipcbiAgICogVGFzayB0byBkZXBsb3kgeW91ciBhcHAuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVwbG95V29ya2Zsb3dUYXNrOiBUYXNrO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVwbG95YWJsZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBnZW5lcmF0ZU52bXJjOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGNoZWNrQWN0aXZlRGVwbG95bWVudDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvd05vZGVWZXJzaW9uPzogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZGVwbG95T3B0aW9uczogRGVwbG95T3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBjb2RlQXJ0aWZhY3RPcHRpb25zPzogQ29kZUFydGlmYWN0T3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBkZXBsb3lKb2JTdHJhdGVneTogRGVwbG95Sm9iU3RyYXRlZ3k7XG5cbiAgcHJpdmF0ZSBlbnZpcm9ubWVudERlcGVuZGVuY2llczogRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwT3B0aW9ucykge1xuICAgIGNvbnN0IGRlcGxveWFibGUgPSBvcHRpb25zLnJlbGVhc2UgPz8gdHJ1ZTtcbiAgICBzdXBlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgcmVsZWFzZTogZGVwbG95YWJsZSxcbiAgICB9KTtcbiAgICB0aGlzLmRlcGxveWFibGUgPSBkZXBsb3lhYmxlO1xuICAgIHRoaXMuZ2VuZXJhdGVOdm1yYyA9IG9wdGlvbnMuZ2VuZXJhdGVOdm1yYyA/PyB0cnVlO1xuICAgIHRoaXMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID0gb3B0aW9ucy5jaGVja0FjdGl2ZURlcGxveW1lbnQgPz8gZmFsc2U7XG4gICAgdGhpcy53b3JrZmxvd05vZGVWZXJzaW9uID0gb3B0aW9ucy53b3JrZmxvd05vZGVWZXJzaW9uO1xuICAgIHRoaXMuZGVwbG95T3B0aW9ucyA9IG9wdGlvbnMuZGVwbG95T3B0aW9ucyA/PyB7IGVudmlyb25tZW50czogW10gfTtcbiAgICB0aGlzLmNvZGVBcnRpZmFjdE9wdGlvbnMgPSBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnM7XG4gICAgdGhpcy5kZXBsb3lKb2JTdHJhdGVneSA9IHRoaXMuZGVwbG95T3B0aW9ucy5qb2JTdHJhdGVneSA/PyBEZXBsb3lKb2JTdHJhdGVneS5NQVRSSVg7XG5cbiAgICB0aGlzLmFkZERldkRlcHMoJ2RlcGxveWFibGUtYXdzY2RrLWFwcC10cycpO1xuXG4gICAgaWYgKCFkZXBsb3lhYmxlKSB7dGhpcy5sb2dnZXIud2FybignVGhlIHByb2plY3QgaXMgZXhwbGljaXRseSBzZXQgdG8gbm90IHJlbGVhc2UsIG1ha2Ugc3VyZSB0aGlzIGlzIGRlc2lyZWQgc2V0dGluZycpO31cblxuICAgIGlmICh0aGlzLmdlbmVyYXRlTnZtcmMgJiYgIXRoaXMud29ya2Zsb3dOb2RlVmVyc2lvbikge3RoaXMud29ya2Zsb3dOb2RlVmVyc2lvbiA9ICcxNC4xOC4xJzt9XG5cbiAgICBpZiAodGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50ICYmIHRoaXMubWFqb3JOb2RlVmVyc2lvbiA+PSAxOCkge3Rocm93IG5ldyBFcnJvcihgbnBtQ29uZmlnRW52aXJvbm1lbnQgaXMgbm90IHN1cHBvcnRlZCBmb3Igbm9kZSB2ZXJzaW9ucyBhYm92ZSB2ZXJzaW9uIDE4LiBDdXJyZW50IHZlcnNpb24gaXMgJHt0aGlzLm5vZGVWZXJzaW9ufWApO31cblxuICAgIGNvbnN0IGRlcGxveUFyZ3VtZW50ID0gdGhpcy5kZXBsb3lPcHRpb25zLnN0YWNrUGF0dGVybiA/IGAgJHt0aGlzLmRlcGxveU9wdGlvbnMuc3RhY2tQYXR0ZXJufWA6ICcnO1xuICAgIGNvbnN0IGRlcGxveUNvbW1hbmQgPSBgY2RrIGRlcGxveSR7ZGVwbG95QXJndW1lbnR9ICR7dGhpcy5nZXRNZXRob2RBcmd1bWVudCgpfSAtLXJlcXVpcmUtYXBwcm92YWwgbmV2ZXJgO1xuICAgIGNvbnN0IHJlcXVpcmVkRW52ID0gdGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50ID8gW2BucG1fY29uZmlnXyR7dGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50fWBdIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVwbG95V29ya2Zsb3dUYXNrID0gdGhpcy5hZGRUYXNrKCdkZXBsb3k6d29ya2Zsb3cnLCB7XG4gICAgICByZXF1aXJlZEVudixcbiAgICAgIGV4ZWM6IGRlcGxveUNvbW1hbmQsXG4gICAgfSk7XG4gICAgdGhpcy5hZGRUYXNrKCdkZXBsb3k6aG90c3dhcCcsIHtcbiAgICAgIHJlcXVpcmVkRW52LFxuICAgICAgZXhlYzogYCR7ZGVwbG95Q29tbWFuZH0gLS1ob3Rzd2FwYCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gdGhlIG1ham9yIG5vZGUgdmVyc2lvbiBzZXQgZm9yIHRoZSBwcm9qZWN0XG4gICAqIEBkZWZhdWx0IDE2XG4gICAqL1xuICBnZXQgbWFqb3JOb2RlVmVyc2lvbigpOiBudW1iZXIge1xuICAgIHJldHVybiBnZXRNYWpvck5vZGVWZXJzaW9uKHRoaXMubm9kZVZlcnNpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZXRob2RBcmd1bWVudCgpIHtcbiAgICByZXR1cm4gYC0tbWV0aG9kICR7dGhpcy5kZXBsb3lPcHRpb25zLm1ldGhvZCA/PyAnY2hhbmdlLXNldCd9YDtcbiAgfVxuXG4gIHN5bnRoKCkge1xuICAgIGlmICh0aGlzLmRlcGxveWFibGUpIHt0aGlzLmFkZERlcGxveUpvYnMoKTt9XG5cbiAgICBpZiAodGhpcy5nZW5lcmF0ZU52bXJjKSB7XG4gICAgICBuZXcgVGV4dEZpbGUodGhpcywgJy5udm1yYycsIHtcbiAgICAgICAgbGluZXM6IFt0aGlzLndvcmtmbG93Tm9kZVZlcnNpb24gPz8gJyddLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3VwZXIuc3ludGgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbmV3IGVudmlyb25tZW50cyB0byB0aGUgYXBwbGljYXRpb25cbiAgICogQHBhcmFtIGl0ZW1zIGxpc3Qgb2YgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKi9cbiAgYWRkRW52aXJvbm1lbnRzKC4uLml0ZW1zOiBFbnZpcm9ubWVudE9wdGlvbnNbXSkge1xuICAgIHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMucHVzaCguLi5pdGVtcyk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUVudmlyb25tZW50cyhuZXdFbnZpcm9ubWVudHM6IEVudmlyb25tZW50T3B0aW9uc1tdKSB7XG4gICAgdGhpcy5kZXBsb3lPcHRpb25zID0ge1xuICAgICAgLi4udGhpcy5kZXBsb3lPcHRpb25zLFxuICAgICAgZW52aXJvbm1lbnRzOiBuZXdFbnZpcm9ubWVudHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgZm9yIGVudmlyb25tZW50c1xuICAgKiBAcGFyYW0gc2NyaXB0IHRoZSBzY3JpcHQgdG8gYmUgYWRkZWQsIGZvciBleGFtcGxlIFwicG9zdDpkZXBsb3lcIlxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lRmlsdGVyIHRoZSBuYW1lIG9mIGVudmlyb25tZW50cyB0byBhZGQgdGhlIHNjcmlwdHMgdG8sIGlmIG5vdCBwcm92aWRlZCBvciBlbXB0eSB3aWxsIHVwZGF0ZSBhbGxcbiAgICovXG4gIHVwZGF0ZVBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdFRvRW52aXJvbm1lbnRzKHNjcmlwdDogc3RyaW5nLCBlbnZpcm9ubWVudE5hbWVGaWx0ZXI/OiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IG5ld0Vudmlyb25tZW50cyA9IHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMubWFwKGVudmlyb25tZW50ID0+IHtcbiAgICAgIGlmIChlbnZpcm9ubWVudE5hbWVGaWx0ZXIgJiYgZW52aXJvbm1lbnROYW1lRmlsdGVyLmxlbmd0aCA+IDAgJiYgIWVudmlyb25tZW50TmFtZUZpbHRlci5pbmNsdWRlcyhlbnZpcm9ubWVudC5uYW1lKSkge3JldHVybiBlbnZpcm9ubWVudDt9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmVudmlyb25tZW50LFxuICAgICAgICBwb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQ6IHNjcmlwdCxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVFbnZpcm9ubWVudHMobmV3RW52aXJvbm1lbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCBmb3IgZW52aXJvbm1lbnRzXG4gICAqIEBwYXJhbSBzY3JpcHQgdGhlIHNjcmlwdCB0byBiZSBhZGRlZCwgZm9yIGV4YW1wbGUgXCJwcmU6ZGVwbG95XCJcbiAgICogQHBhcmFtIGVudmlyb25tZW50TmFtZUZpbHRlciB0aGUgbmFtZSBvZiBlbnZpcm9ubWVudHMgdG8gYWRkIHRoZSBzY3JpcHRzIHRvLCBpZiBub3QgcHJvdmlkZWQgb3IgZW1wdHkgd2lsbCB1cGRhdGUgYWxsXG4gICAqL1xuICB1cGRhdGVQcmVEZXBsb3lXb3JrZmxvd1NjcmlwdFRvRW52aXJvbm1lbnRzKHNjcmlwdDogc3RyaW5nLCBlbnZpcm9ubWVudE5hbWVGaWx0ZXI/OiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IG5ld0Vudmlyb25tZW50cyA9IHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMubWFwKGVudmlyb25tZW50ID0+IHtcbiAgICAgIGlmIChlbnZpcm9ubWVudE5hbWVGaWx0ZXIgJiYgZW52aXJvbm1lbnROYW1lRmlsdGVyLmxlbmd0aCA+IDAgJiYgIWVudmlyb25tZW50TmFtZUZpbHRlci5pbmNsdWRlcyhlbnZpcm9ubWVudC5uYW1lKSkge3JldHVybiBlbnZpcm9ubWVudDt9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmVudmlyb25tZW50LFxuICAgICAgICBwcmVEZXBsb3lXb3JrZmxvd1NjcmlwdDogc2NyaXB0LFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUVudmlyb25tZW50cyhuZXdFbnZpcm9ubWVudHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREZXBsb3lKb2JzKCkge1xuXG4gICAgY29uc3Qgc3RlcEZhY3RvcnkgPSBuZXcgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkodGhpcywge1xuICAgICAgYXV0aFByb3ZpZGVyOiB0aGlzLmNvZGVBcnRpZmFjdE9wdGlvbnM/LmF1dGhQcm92aWRlcixcbiAgICAgIGNoZWNrQWN0aXZlRGVwbG95bWVudDogdGhpcy5jaGVja0FjdGl2ZURlcGxveW1lbnQsXG4gICAgICBkZXBsb3lPcHRpb25zOiB0aGlzLmRlcGxveU9wdGlvbnMsXG4gICAgICBwcmVJbnN0YWxsVGFza05hbWU6IHRoaXMuZGVwbG95T3B0aW9ucy50YXNrVG9SdW5QcmVJbnN0YWxsLFxuICAgICAgbnBtQ29uZmlnRW52aXJvbm1lbnQ6IHRoaXMuZGVwbG95T3B0aW9ucy5ucG1Db25maWdFbnZpcm9ubWVudCxcbiAgICAgIGpvYlN0cmF0ZWd5OiB0aGlzLmRlcGxveUpvYlN0cmF0ZWd5LFxuICAgICAgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM6IHRoaXMuZW52aXJvbm1lbnREZXBlbmRlbmNpZXMsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbGVhc2U/LmFkZEpvYnMoc3RlcEZhY3RvcnkuZGVwbG95bWVudEpvYnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBlbnZpcm9ubWVudCBkZXBsb3ltZW50IGRlcGVuZGVuY2llc1xuICAgKiBAcGFyYW0gZW52aXJvbm1lbnREZXBlbmRlbmNpZXMgYW4gb2JqZWN0IGRlZmluaW5nIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGVudmlyb25tZW50c1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZUVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcyhlbnZpcm9ubWVudERlcGVuZGVuY2llczogRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzKSB7XG4gICAgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkudmFsaWRhdGVFbnZpcm9ubWVudERlcGxveW1lbnREZXBlbmRlbmNpZXMoXG4gICAgICB0aGlzLmRlcGxveU9wdGlvbnMsXG4gICAgICBlbnZpcm9ubWVudERlcGVuZGVuY2llcyxcbiAgICApO1xuXG4gICAgdGhpcy5lbnZpcm9ubWVudERlcGVuZGVuY2llcyA9IGVudmlyb25tZW50RGVwZW5kZW5jaWVzO1xuICB9XG59Il19
154
+ DeployableAwsCdkTypeScriptApp[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptApp", version: "0.1.684" };
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFnRDtBQUVoRCxtQ0FBb0U7QUFDcEUsbUNBQXdKO0FBQ3hKLG1DQUE4QztBQUU5QywwQ0FBd0I7QUFDeEIsbUNBQWlDO0FBQ2pDLDBDQUF3QjtBQUV4QixNQUFhLDZCQUE4QixTQUFRLGVBQU0sQ0FBQyxtQkFBbUI7SUFpQjNFLFlBQVksT0FBNkM7UUFDdkQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUM7UUFDM0MsS0FBSyxDQUFDO1lBQ0osR0FBRyxPQUFPO1lBQ1YsT0FBTyxFQUFFLFVBQVU7U0FDcEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQztRQUNuRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixJQUFJLEtBQUssQ0FBQztRQUNwRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDO1FBQ3ZELElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNuRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDO1FBQ3ZELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsSUFBSSx5QkFBaUIsQ0FBQyxNQUFNLENBQUM7UUFFcEYsSUFBSSxDQUFDLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFD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LENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLHVDQUF1QyxDQUFDLHVCQUEwRDtRQUN2RyxpREFBeUMsQ0FBQyx5Q0FBeUMsQ0FDakYsSUFBSSxDQUFDLGFBQWEsRUFDbEIsdUJBQXVCLENBQ3hCLENBQUM7UUFFRixJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7SUFDekQsQ0FBQzs7QUF2Skgsc0VBd0pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXdzY2RrLCBUYXNrLCBUZXh0RmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBDb2RlQXJ0aWZhY3RPcHRpb25zIH0gZnJvbSAncHJvamVuL2xpYi9qYXZhc2NyaXB0JztcbmltcG9ydCB7IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5IH0gZnJvbSAnLi9zdGVwcyc7XG5pbXBvcnQgeyBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMsIERlcGxveUpvYlN0cmF0ZWd5LCBEZXBsb3lPcHRpb25zLCBFbnZpcm9ubWVudERlcGxveW1lbnREZXBlbmRlbmNpZXMsIEVudmlyb25tZW50T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0TWFqb3JOb2RlVmVyc2lvbiB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdGVwcyc7XG5cbmV4cG9ydCBjbGFzcyBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcCBleHRlbmRzIGF3c2Nkay5Bd3NDZGtUeXBlU2NyaXB0QXBwIHtcblxuICAvKipcbiAgICogVGFzayB0byBkZXBsb3kgeW91ciBhcHAuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVwbG95V29ya2Zsb3dUYXNrOiBUYXNrO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVwbG95YWJsZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBnZW5lcmF0ZU52bXJjOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGNoZWNrQWN0aXZlRGVwbG95bWVudDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvd05vZGVWZXJzaW9uPzogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZGVwbG95T3B0aW9uczogRGVwbG95T3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBjb2RlQXJ0aWZhY3RPcHRpb25zPzogQ29kZUFydGlmYWN0T3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBkZXBsb3lKb2JTdHJhdGVneTogRGVwbG95Sm9iU3RyYXRlZ3k7XG5cbiAgcHJpdmF0ZSBlbnZpcm9ubWVudERlcGVuZGVuY2llczogRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwT3B0aW9ucykge1xuICAgIGNvbnN0IGRlcGxveWFibGUgPSBvcHRpb25zLnJlbGVhc2UgPz8gdHJ1ZTtcbiAgICBzdXBlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgcmVsZWFzZTogZGVwbG95YWJsZSxcbiAgICB9KTtcbiAgICB0aGlzLmRlcGxveWFibGUgPSBkZXBsb3lhYmxlO1xuICAgIHRoaXMuZ2VuZXJhdGVOdm1yYyA9IG9wdGlvbnMuZ2VuZXJhdGVOdm1yYyA/PyB0cnVlO1xuICAgIHRoaXMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID0gb3B0aW9ucy5jaGVja0FjdGl2ZURlcGxveW1lbnQgPz8gZmFsc2U7XG4gICAgdGhpcy53b3JrZmxvd05vZGVWZXJzaW9uID0gb3B0aW9ucy53b3JrZmxvd05vZGVWZXJzaW9uO1xuICAgIHRoaXMuZGVwbG95T3B0aW9ucyA9IG9wdGlvbnMuZGVwbG95T3B0aW9ucyA/PyB7IGVudmlyb25tZW50czogW10gfTtcbiAgICB0aGlzLmNvZGVBcnRpZmFjdE9wdGlvbnMgPSBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnM7XG4gICAgdGhpcy5kZXBsb3lKb2JTdHJhdGVneSA9IHRoaXMuZGVwbG95T3B0aW9ucy5qb2JTdHJhdGVneSA/PyBEZXBsb3lKb2JTdHJhdGVneS5NQVRSSVg7XG5cbiAgICB0aGlzLmFkZERldkRlcHMoJ2RlcGxveWFibGUtYXdzY2RrLWFwcC10cycpO1xuXG4gICAgaWYgKCFkZXBsb3lhYmxlKSB7dGhpcy5sb2dnZXIud2FybignVGhlIHByb2plY3QgaXMgZXhwbGljaXRseSBzZXQgdG8gbm90IHJlbGVhc2UsIG1ha2Ugc3VyZSB0aGlzIGlzIGRlc2lyZWQgc2V0dGluZycpO31cblxuICAgIGlmICh0aGlzLmdlbmVyYXRlTnZtcmMgJiYgIXRoaXMud29ya2Zsb3dOb2RlVmVyc2lvbikge3RoaXMud29ya2Zsb3dOb2RlVmVyc2lvbiA9ICcxNC4xOC4xJzt9XG5cbiAgICBpZiAodGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50ICYmIHRoaXMubWFqb3JOb2RlVmVyc2lvbiA+PSAxOCkge3Rocm93IG5ldyBFcnJvcihgbnBtQ29uZmlnRW52aXJvbm1lbnQgaXMgbm90IHN1cHBvcnRlZCBmb3Igbm9kZSB2ZXJzaW9ucyBhYm92ZSB2ZXJzaW9uIDE4LiBDdXJyZW50IHZlcnNpb24gaXMgJHt0aGlzLm5vZGVWZXJzaW9ufWApO31cblxuICAgIGNvbnN0IGRlcGxveUFyZ3VtZW50ID0gdGhpcy5kZXBsb3lPcHRpb25zLnN0YWNrUGF0dGVybiA/IGAgJHt0aGlzLmRlcGxveU9wdGlvbnMuc3RhY2tQYXR0ZXJufWA6ICcnO1xuICAgIGNvbnN0IGRlcGxveUNvbW1hbmQgPSBgY2RrIGRlcGxveSR7ZGVwbG95QXJndW1lbnR9ICR7dGhpcy5nZXRNZXRob2RBcmd1bWVudCgpfSAtLXJlcXVpcmUtYXBwcm92YWwgbmV2ZXJgO1xuICAgIGNvbnN0IHJlcXVpcmVkRW52ID0gdGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50ID8gW2BucG1fY29uZmlnXyR7dGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50fWBdIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVwbG95V29ya2Zsb3dUYXNrID0gdGhpcy5hZGRUYXNrKCdkZXBsb3k6d29ya2Zsb3cnLCB7XG4gICAgICByZXF1aXJlZEVudixcbiAgICAgIGV4ZWM6IGRlcGxveUNvbW1hbmQsXG4gICAgfSk7XG4gICAgdGhpcy5hZGRUYXNrKCdkZXBsb3k6aG90c3dhcCcsIHtcbiAgICAgIHJlcXVpcmVkRW52LFxuICAgICAgZXhlYzogYCR7ZGVwbG95Q29tbWFuZH0gLS1ob3Rzd2FwYCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gdGhlIG1ham9yIG5vZGUgdmVyc2lvbiBzZXQgZm9yIHRoZSBwcm9qZWN0XG4gICAqIEBkZWZhdWx0IDE2XG4gICAqL1xuICBnZXQgbWFqb3JOb2RlVmVyc2lvbigpOiBudW1iZXIge1xuICAgIHJldHVybiBnZXRNYWpvck5vZGVWZXJzaW9uKHRoaXMubm9kZVZlcnNpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZXRob2RBcmd1bWVudCgpIHtcbiAgICByZXR1cm4gYC0tbWV0aG9kICR7dGhpcy5kZXBsb3lPcHRpb25zLm1ldGhvZCA/PyAnY2hhbmdlLXNldCd9YDtcbiAgfVxuXG4gIHN5bnRoKCkge1xuICAgIGlmICh0aGlzLmRlcGxveWFibGUpIHt0aGlzLmFkZERlcGxveUpvYnMoKTt9XG5cbiAgICBpZiAodGhpcy5nZW5lcmF0ZU52bXJjKSB7XG4gICAgICBuZXcgVGV4dEZpbGUodGhpcywgJy5udm1yYycsIHtcbiAgICAgICAgbGluZXM6IFt0aGlzLndvcmtmbG93Tm9kZVZlcnNpb24gPz8gJyddLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3VwZXIuc3ludGgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbmV3IGVudmlyb25tZW50cyB0byB0aGUgYXBwbGljYXRpb25cbiAgICogQHBhcmFtIGl0ZW1zIGxpc3Qgb2YgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKi9cbiAgYWRkRW52aXJvbm1lbnRzKC4uLml0ZW1zOiBFbnZpcm9ubWVudE9wdGlvbnNbXSkge1xuICAgIHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMucHVzaCguLi5pdGVtcyk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUVudmlyb25tZW50cyhuZXdFbnZpcm9ubWVudHM6IEVudmlyb25tZW50T3B0aW9uc1tdKSB7XG4gICAgdGhpcy5kZXBsb3lPcHRpb25zID0ge1xuICAgICAgLi4udGhpcy5kZXBsb3lPcHRpb25zLFxuICAgICAgZW52aXJvbm1lbnRzOiBuZXdFbnZpcm9ubWVudHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgZm9yIGVudmlyb25tZW50c1xuICAgKiBAcGFyYW0gc2NyaXB0IHRoZSBzY3JpcHQgdG8gYmUgYWRkZWQsIGZvciBleGFtcGxlIFwicG9zdDpkZXBsb3lcIlxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lRmlsdGVyIHRoZSBuYW1lIG9mIGVudmlyb25tZW50cyB0byBhZGQgdGhlIHNjcmlwdHMgdG8sIGlmIG5vdCBwcm92aWRlZCBvciBlbXB0eSB3aWxsIHVwZGF0ZSBhbGxcbiAgICovXG4gIHVwZGF0ZVBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdFRvRW52aXJvbm1lbnRzKHNjcmlwdDogc3RyaW5nLCBlbnZpcm9ubWVudE5hbWVGaWx0ZXI/OiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IG5ld0Vudmlyb25tZW50cyA9IHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMubWFwKGVudmlyb25tZW50ID0+IHtcbiAgICAgIGlmIChlbnZpcm9ubWVudE5hbWVGaWx0ZXIgJiYgZW52aXJvbm1lbnROYW1lRmlsdGVyLmxlbmd0aCA+IDAgJiYgIWVudmlyb25tZW50TmFtZUZpbHRlci5pbmNsdWRlcyhlbnZpcm9ubWVudC5uYW1lKSkge3JldHVybiBlbnZpcm9ubWVudDt9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmVudmlyb25tZW50LFxuICAgICAgICBwb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQ6IHNjcmlwdCxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVFbnZpcm9ubWVudHMobmV3RW52aXJvbm1lbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCBmb3IgZW52aXJvbm1lbnRzXG4gICAqIEBwYXJhbSBzY3JpcHQgdGhlIHNjcmlwdCB0byBiZSBhZGRlZCwgZm9yIGV4YW1wbGUgXCJwcmU6ZGVwbG95XCJcbiAgICogQHBhcmFtIGVudmlyb25tZW50TmFtZUZpbHRlciB0aGUgbmFtZSBvZiBlbnZpcm9ubWVudHMgdG8gYWRkIHRoZSBzY3JpcHRzIHRvLCBpZiBub3QgcHJvdmlkZWQgb3IgZW1wdHkgd2lsbCB1cGRhdGUgYWxsXG4gICAqL1xuICB1cGRhdGVQcmVEZXBsb3lXb3JrZmxvd1NjcmlwdFRvRW52aXJvbm1lbnRzKHNjcmlwdDogc3RyaW5nLCBlbnZpcm9ubWVudE5hbWVGaWx0ZXI/OiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IG5ld0Vudmlyb25tZW50cyA9IHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMubWFwKGVudmlyb25tZW50ID0+IHtcbiAgICAgIGlmIChlbnZpcm9ubWVudE5hbWVGaWx0ZXIgJiYgZW52aXJvbm1lbnROYW1lRmlsdGVyLmxlbmd0aCA+IDAgJiYgIWVudmlyb25tZW50TmFtZUZpbHRlci5pbmNsdWRlcyhlbnZpcm9ubWVudC5uYW1lKSkge3JldHVybiBlbnZpcm9ubWVudDt9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmVudmlyb25tZW50LFxuICAgICAgICBwcmVEZXBsb3lXb3JrZmxvd1NjcmlwdDogc2NyaXB0LFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUVudmlyb25tZW50cyhuZXdFbnZpcm9ubWVudHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREZXBsb3lKb2JzKCkge1xuXG4gICAgY29uc3Qgc3RlcEZhY3RvcnkgPSBuZXcgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkodGhpcywge1xuICAgICAgYXV0aFByb3ZpZGVyOiB0aGlzLmNvZGVBcnRpZmFjdE9wdGlvbnM/LmF1dGhQcm92aWRlcixcbiAgICAgIGNoZWNrQWN0aXZlRGVwbG95bWVudDogdGhpcy5jaGVja0FjdGl2ZURlcGxveW1lbnQsXG4gICAgICBkZXBsb3lPcHRpb25zOiB0aGlzLmRlcGxveU9wdGlvbnMsXG4gICAgICBwcmVJbnN0YWxsVGFza05hbWU6IHRoaXMuZGVwbG95T3B0aW9ucy50YXNrVG9SdW5QcmVJbnN0YWxsLFxuICAgICAgbnBtQ29uZmlnRW52aXJvbm1lbnQ6IHRoaXMuZGVwbG95T3B0aW9ucy5ucG1Db25maWdFbnZpcm9ubWVudCxcbiAgICAgIGpvYlN0cmF0ZWd5OiB0aGlzLmRlcGxveUpvYlN0cmF0ZWd5LFxuICAgICAgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM6IHRoaXMuZW52aXJvbm1lbnREZXBlbmRlbmNpZXMsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbGVhc2U/LmFkZEpvYnMoc3RlcEZhY3RvcnkuZGVwbG95bWVudEpvYnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBlbnZpcm9ubWVudCBkZXBsb3ltZW50IGRlcGVuZGVuY2llc1xuICAgKiBAcGFyYW0gZW52aXJvbm1lbnREZXBlbmRlbmNpZXMgYW4gb2JqZWN0IGRlZmluaW5nIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGVudmlyb25tZW50c1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZUVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcyhlbnZpcm9ubWVudERlcGVuZGVuY2llczogRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzKSB7XG4gICAgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkudmFsaWRhdGVFbnZpcm9ubWVudERlcGxveW1lbnREZXBlbmRlbmNpZXMoXG4gICAgICB0aGlzLmRlcGxveU9wdGlvbnMsXG4gICAgICBlbnZpcm9ubWVudERlcGVuZGVuY2llcyxcbiAgICApO1xuXG4gICAgdGhpcy5lbnZpcm9ubWVudERlcGVuZGVuY2llcyA9IGVudmlyb25tZW50RGVwZW5kZW5jaWVzO1xuICB9XG59Il19
package/lib/steps.d.ts CHANGED
@@ -187,7 +187,7 @@ export declare class DeployableAwsCdkTypeScriptAppStepsFactory {
187
187
  * Get deployment jobs for multi-job strategy
188
188
  * @returns Record of jobs
189
189
  */
190
- getDeploymentJobsForMultiJob(): Record<string, Job>;
190
+ get deploymentJobsForMultiJob(): Record<string, Job>;
191
191
  /**
192
192
  * Get the job definition for a specific environment
193
193
  * @param environmentOptions The environment options
@@ -196,3 +196,9 @@ export declare class DeployableAwsCdkTypeScriptAppStepsFactory {
196
196
  */
197
197
  getJobForEnvironment(environmentOptions: EnvironmentOptions, environmentVariableName: string | undefined): Job;
198
198
  }
199
+ /**
200
+ * Get the deploy job ID for a specific environment
201
+ * @param environmentName The name of the environment
202
+ * @returns The deploy job ID
203
+ */
204
+ export declare function getDeployJobId(environmentName: string): string;
package/lib/steps.js CHANGED
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
+ var _a;
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
4
  exports.DeployableAwsCdkTypeScriptAppStepsFactory = void 0;
5
+ exports.getDeployJobId = getDeployJobId;
6
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
4
7
  const github_1 = require("projen/lib/github");
5
8
  const workflows_model_1 = require("projen/lib/github/workflows-model");
6
9
  const javascript_1 = require("projen/lib/javascript");
@@ -330,7 +333,7 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
330
333
  if (this.props.deployOptions.environments.length === 0) {
331
334
  this.project.logger.warn('The project does not have any environment set, make sure this is desired setting');
332
335
  }
333
- return this.props.jobStrategy === types_1.DeployJobStrategy.MATRIX ? this.deploymentJobsForMatrix : this.getDeploymentJobsForMultiJob();
336
+ return this.props.jobStrategy === types_1.DeployJobStrategy.MATRIX ? this.deploymentJobsForMatrix : this.deploymentJobsForMultiJob;
334
337
  }
335
338
  /**
336
339
  * Get deployment jobs for matrix strategy
@@ -442,7 +445,7 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
442
445
  * Get deployment jobs for multi-job strategy
443
446
  * @returns Record of jobs
444
447
  */
445
- getDeploymentJobsForMultiJob() {
448
+ get deploymentJobsForMultiJob() {
446
449
  const { environmentVariableName, environments } = this.props.deployOptions;
447
450
  const jobs = environments.map((environmentOptions) => {
448
451
  return [getDeployJobId(environmentOptions.name), this.getJobForEnvironment(environmentOptions, environmentVariableName)];
@@ -506,7 +509,14 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
506
509
  }
507
510
  }
508
511
  exports.DeployableAwsCdkTypeScriptAppStepsFactory = DeployableAwsCdkTypeScriptAppStepsFactory;
512
+ _a = JSII_RTTI_SYMBOL_1;
513
+ DeployableAwsCdkTypeScriptAppStepsFactory[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory", version: "0.1.684" };
514
+ /**
515
+ * Get the deploy job ID for a specific environment
516
+ * @param environmentName The name of the environment
517
+ * @returns The deploy job ID
518
+ */
509
519
  function getDeployJobId(environmentName) {
510
520
  return `Deploy-${environmentName}`;
511
521
  }
512
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3RlcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsOENBQWtEO0FBQ2xELHVFQUFnRjtBQUNoRixzREFBaUU7QUFDakUsbUNBQWtIO0FBRWxILE1BQU0sMkJBQTJCLEdBQUcsa0JBQWtCLENBQUM7QUFDdkQsTUFBTSxzQ0FBc0MsR0FBRSxTQUFTLDJCQUEyQiwwQ0FBMEMsQ0FBQztBQXdDN0g7OztHQUdHO0FBQ0gsTUFBYSx5Q0FBeUM7SUFFcEQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyx5Q0FBeUMsQ0FDckQsYUFBNEIsRUFDNUIsdUJBQTBEO1FBRzFELElBQUksYUFBYSxDQUFDLFdBQVcsS0FBSyx5QkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM5RCxNQUFNLElBQUksS0FBSyxDQUFDLCtFQUErRSxDQUFDLENBQUM7UUFDbkcsQ0FBQztRQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQzlELE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsd0VBQXdFLENBQUMsQ0FBQztZQUMvRyxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDakIsTUFBTSxpQkFBaUIsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQy9FLElBQUksQ0FB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O1FBRUQsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG1DQUFtQyxDQUNqRSxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQzFELGtCQUFrQixDQUFDLHdCQUF3QixJQUFJLEVBQUUsQ0FDbEQsQ0FBQztRQUNGLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUN2QixhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0NBRUY7QUF2b0JELDhGQXVvQkM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxlQUF1QjtJQUM3QyxPQUFPLFVBQVUsZUFBZSxFQUFFLENBQUM7QUFDckMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGphdmFzY3JpcHQgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgV29ya2Zsb3dTdGVwcyB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViJztcbmltcG9ydCB7IEpvYlBlcm1pc3Npb24sIEpvYlN0ZXAsIEpvYiB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbCc7XG5pbXBvcnQgeyBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIgfSBmcm9tICdwcm9qZW4vbGliL2phdmFzY3JpcHQnO1xuaW1wb3J0IHsgRGVwbG95Sm9iU3RyYXRlZ3ksIERlcGxveU9wdGlvbnMsIEVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcywgRW52aXJvbm1lbnRPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBJZCA9ICdkZXBsb3ltZW50LWNoZWNrJztcbmNvbnN0IHNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uPSBgc3RlcHMuJHtjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwSWR9Lm91dHB1dHMuaGFzX2FjdGl2ZV9kZXBsb3ltZW50ICE9ICd0cnVlJ2A7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnlQcm9wcyB7XG4gIC8qKlxuICAgKiBEZXBsb3ltZW50IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveU9wdGlvbnM6IERlcGxveU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY2hlY2sgZm9yIGFjdGl2ZSBkZXBsb3ltZW50cyBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIGRlcGxveW1lbnRcbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrQWN0aXZlRGVwbG95bWVudDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHRhc2sgdG8gcnVuIGJlZm9yZSBpbnN0YWxsaW5nIGRlcGVuZGVuY2llcywgaWYgYW55XG4gICAqL1xuICByZWFkb25seSBwcmVJbnN0YWxsVGFza05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRoZW50aWNhdGlvbiBwcm92aWRlciBmb3IgQ29kZUFydGlmYWN0LCBpZiBhbnlcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhQcm92aWRlcj86IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlcjtcblxuICAvKipcbiAgICogVGhlIG5wbSBjb25maWcgdG8gc2V0IHdpdGggdGhlIGVudmlyb25tZW50IHRoYXQgaXMgYmVpbmcgZGVwbG95ZWQsIGlmIGFueVxuICAgKiBOb3RlOiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG5vZGUgdmVyc2lvbnMgYWJvdmUgMThcbiAgICovXG4gIHJlYWRvbmx5IG5wbUNvbmZpZ0Vudmlyb25tZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXBsb3ltZW50IGpvYiBzdHJhdGVneSwgd2hldGhlciB0byB1c2UgYSBtYXRyaXggam9iIG9yIG11bHRpcGxlIGpvYnMgZm9yIGVhY2ggZW52aXJvbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IGpvYlN0cmF0ZWd5OiBEZXBsb3lKb2JTdHJhdGVneTtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgZGVwbG95bWVudCBkZXBlbmRlbmNpZXMsIGlmIGFueVxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM/OiBFbnZpcm9ubWVudERlcGxveW1lbnREZXBlbmRlbmNpZXM7XG59XG5cbi8qKlxuICogRmFjdG9yeSB0byBjcmVhdGUgcmV1c2FibGUgc3RlcHMgZm9yIHRoZSBkZXBsb3ltZW50IHdvcmtmbG93XG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBjbGFzcyBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSB7XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgdGhlIHByb3ZpZGVkIGVudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzIGFyZSB2YWxpZFxuICAgKiBAcGFyYW0gZGVwbG95T3B0aW9ucyBUaGUgZGVwbG95bWVudCBvcHRpb25zXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudERlcGVuZGVuY2llcyBUaGUgZW52aXJvbm1lbnQgZGVwbG95bWVudCBkZXBlbmRlbmNpZXMgdG8gdmFsaWRhdGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmFsaWRhdGVFbnZpcm9ubWVudERlcGxveW1lbnREZXBlbmRlbmNpZXMoXG4gICAgZGVwbG95T3B0aW9uczogRGVwbG95T3B0aW9ucyxcbiAgICBlbnZpcm9ubWVudERlcGVuZGVuY2llczogRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzLFxuICApOiB2b2lkIHtcblxuICAgIGlmIChkZXBsb3lPcHRpb25zLmpvYlN0cmF0ZWd5ICE9PSBEZXBsb3lKb2JTdHJhdGVneS5NVUxUSV9KT0IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRW52aXJvbm1lbnQgZGVwbG95bWVudCBkZXBlbmRlbmNpZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGZvciBNVUxUSV9KT0Igc3RyYXRlZ3knKTtcbiAgICB9XG5cbiAgICBPYmplY3QuZW50cmllcyhlbnZpcm9ubWVudERlcGVuZGVuY2llcykuZm9yRWFjaCgoW2VudiwgZGVwc10pID0+IHtcbiAgICAgIGNvbnN0IGhhc0Vudmlyb25tZW50ID0gZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMuc29tZShlID0+IGUubmFtZSA9PT0gZW52KTtcbiAgICAgIGlmICghaGFzRW52aXJvbm1lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbnZpcm9ubWVudCBcIiR7ZW52fVwiIGRlZmluZWQgaW4gZGVwZW5kZW5jaWVzIGRvZXMgbm90IGV4aXN0IGluIGRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzYCk7XG4gICAgICB9XG4gICAgICBkZXBzLmZvckVhY2goZGVwID0+IHtcbiAgICAgICAgY29uc3QgaGFzRGVwRW52aXJvbm1lbnQgPSBkZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5zb21lKGUgPT4gZS5uYW1lID09PSBkZXApO1xuICAgICAgICBpZiAoIWhhc0RlcEVudmlyb25tZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZXBlbmRlbmN5IGVudmlyb25tZW50IFwiJHtkZXB9XCIgZm9yIGVudmlyb25tZW50IFwiJHtlbnZ9XCIgZG9lcyBub3QgZXhpc3QgaW4gZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHNgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5XG4gICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgZmFjdG9yeSBwcm9wZXJ0aWVzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2plY3Q6IGphdmFzY3JpcHQuTm9kZVByb2plY3QsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnlQcm9wcyxcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDb25kaXRpb24gdG8gc2tpcCBhIHN0ZXAgaWYgYW4gYWN0aXZlIGRlcGxveW1lbnQgaXMgYWxyZWFkeSBwcmVzZW50XG4gICAqIEByZXR1cm5zIEpvYlN0ZXAgY29uZGl0aW9uIG9yIHVuZGVmaW5lZCBpZiBjaGVja0FjdGl2ZURlcGxveW1lbnQgaXMgZmFsc2VcbiAgICovXG4gIHB1YmxpYyBnZXQgc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24oKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8geyBpZjogYFxcJHt7ICR7c2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb259IH19YCB9IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGdldCBjaGVja291dFN0ZXAoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIFdvcmtmbG93U3RlcHMuY2hlY2tvdXQoe1xuICAgICAgd2l0aDoge1xuICAgICAgICBmZXRjaERlcHRoOiAwLFxuICAgICAgICByZWY6ICcke3sgZ2l0aHViLnNoYSB9fScsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gcnVuIGJlZm9yZSBpbnN0YWxsaW5nIGRlcGVuZGVuY2llcyBpZiBleGlzdHNcbiAgICogQHJldHVybnMgSm9iU3RlcCBvciB1bmRlZmluZWQgaWYgbm8gcHJlSW5zdGFsbFRhc2tOYW1lIGlzIHByb3ZpZGVkXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKCk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5wcm9wcy5wcmVJbnN0YWxsVGFza05hbWUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24sXG4gICAgICBuYW1lOiB0aGlzLnByb3BzLnByZUluc3RhbGxUYXNrTmFtZSxcbiAgICAgIHJ1bjogYG5weCBwcm9qZW4gJHt0aGlzLnByb3BzLnByZUluc3RhbGxUYXNrTmFtZX1gLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBjaGVjayBpZiB0aGVyZSBpcyBhbiBhY3RpdmUgZGVwbG95bWVudCBmb3IgdGhlIGVudmlyb25tZW50IGluIHRoZSBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yTWF0cml4KCk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldENoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudCgnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW4gYWN0aXZlIGRlcGxveW1lbnQgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGVudmlyb25tZW50IFRoZSBlbnZpcm9ubWVudCB0byBjaGVja1xuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0Q2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcElkLFxuICAgICAgdXNlczogJ0FtaW5GYXpsTW9uZG8vY2hlY2stZGVwbG95ZWQtZW52aXJvbm1lbnRAdjEnLFxuICAgICAgd2l0aDoge1xuICAgICAgICBlbnZpcm9ubWVudDogZW52aXJvbm1lbnQsXG4gICAgICB9LFxuICAgICAgZW52OiB7XG4gICAgICAgIEdJVEhVQl9UT0tFTjogJyR7eyBzZWNyZXRzLkdJVEhVQl9UT0tFTiB9fScsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBzZXR1cCBBV1MgY3JlZGVudGlhbHMgaW4gdGhlIGVudmlyb25tZW50IGZvciB0aGUgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBbXVxuICAgKi9cbiAgcHVibGljIGdldCBzZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JNYXRyaXgoKTogSm9iU3RlcFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5zZXR1cEF3c0NyZWRlbnRpYWxzSW5FbnZpcm9ubWVudEZvck1hdHJpeCxcbiAgICAgIHRoaXMuYXNzdW1lQXdzUm9sZVN0ZXBGb3JNYXRyaXgsXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0ZXBzIHRvIHNldHVwIEFXUyBjcmVkZW50aWFscyBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnRPcHRpb25zIFRoZSBlbnZpcm9ubWVudCBvcHRpb25zXG4gICAqIEByZXR1cm5zIEpvYlN0ZXBbXVxuICAgKi9cbiAgcHVibGljIGdldFNldHVwQXdzQ3JlZGVudGlhbHNTdGVwc0ZvckVudmlyb25tZW50KGVudmlyb25tZW50T3B0aW9uczogRW52aXJvbm1lbnRPcHRpb25zKTogSm9iU3RlcFtdIHtcbiAgICBjb25zdCBzdGVwczogSm9iU3RlcFtdID0gW107XG5cbiAgICBjb25zdCBmcm9tRW52VmFyaWFibGVTdGVwID0gdGhpcy5nZXRTZXR1cEF3c0NyZWRlbnRpYWxzSW5FbnZpcm9ubWVudEZvckVudmlyb25tZW50KFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5hY2Nlc3NLZXlJZFNlY3JldE5hbWUgPz8gJ0FXU19BQ0NFU1NfS0VZX0lEJyxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lID8/ICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJlZ2lvbixcbiAgICApO1xuXG4gICAgaWYgKGZyb21FbnZWYXJpYWJsZVN0ZXApIHtcbiAgICAgIHN0ZXBzLnB1c2goZnJvbUVudlZhcmlhYmxlU3RlcCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNzdW1lUm9sZVN0ZXAgPSB0aGlzLmdldEFzc3VtZUF3c1JvbGVTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLmFjY2Vzc0tleUlkU2VjcmV0TmFtZSA/PyAnQVdTX0FDQ0VTU19LRVlfSUQnLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgPz8gJ0FXU19TRUNSRVRfQUNDRVNTX0tFWScsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMucmVnaW9uLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSA/PyAnJyxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5hc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzID8/IDkwMCxcbiAgICApO1xuXG4gICAgaWYgKGFzc3VtZVJvbGVTdGVwKSB7XG4gICAgICBzdGVwcy5wdXNoKGFzc3VtZVJvbGVTdGVwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RlcHM7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBzZXR1cCBBV1MgY3JlZGVudGlhbHMgaW4gdGhlIGVudmlyb25tZW50IGZvciB0aGUgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgc2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JNYXRyaXgoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JFbnZpcm9ubWVudChcbiAgICAgICdtYXRyaXguYXNzdW1lUm9sZScsXG4gICAgICAnbWF0cml4LmFjY2Vzc0tleUlkU2VjcmV0TmFtZScsXG4gICAgICAnbWF0cml4LnNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUnLFxuICAgICAgJyR7eyBtYXRyaXgucmVnaW9uIH19JyxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHNldHVwIEFXUyBjcmVkZW50aWFscyBpbiB0aGUgZW52aXJvbm1lbnQgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGFzc3VtZVJvbGVGbGFnIFdoZXRoZXIgdG8gYXNzdW1lIGEgcm9sZSwgY2FuIGJlIGEgYm9vbGVhbiBvciBhIHN0cmluZyBmb3IgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEBwYXJhbSBhY2Nlc3NLZXlJZFNlY3JldE5hbWUgVGhlIEdpdEh1YiBzZWNyZXQgbmFtZSBmb3IgdGhlIGFjY2VzcyBrZXkgSURcbiAgICogQHBhcmFtIHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgVGhlIEdpdEh1YiBzZWNyZXQgbmFtZSBmb3IgdGhlIHNlY3JldCBhY2Nlc3Mga2V5XG4gICAqIEBwYXJhbSByZWdpb24gVGhlIHJlZ2lvblxuICAgKiBAcmV0dXJucyBKb2JTdGVwIG9yIHVuZGVmaW5lZCBpZiBubyBBV1MgY3JlZGVudGlhbHMgYXJlIHByb3ZpZGVkLFxuICAgKiBpZiBhc3N1bWVSb2xlRmxhZyBpcyBib29sZWFuIHdpbGwgYmUgZXZhbHVhdGVkIGFuZCByZXR1cm4gYSBKb2JTdGVwIG9ubHkgaWYgZmFsc2VcbiAgICogaWYgYXNzdW1lUm9sZUZsYWcgaXMgc3RyaW5nIHdpbGwgYWx3YXlzIHJldHVybiBhIEpvYlN0ZXAgKGZvciBtYXRyaXggc3RyYXRlZ3kpXG4gICAqL1xuICBwdWJsaWMgZ2V0U2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JFbnZpcm9ubWVudChcbiAgICBhc3N1bWVSb2xlRmxhZzogYm9vbGVhbiB8IHN0cmluZyxcbiAgICBhY2Nlc3NLZXlJZFNlY3JldE5hbWU6IHN0cmluZyxcbiAgICBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lOiBzdHJpbmcsXG4gICAgcmVnaW9uOiBzdHJpbmcsXG4gICk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuXG4gICAgZnVuY3Rpb24gZ2V0Q29uZGl0aW9uKGZhY3Rvcnk6IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5KSB7XG4gICAgICBpZiAodHlwZW9mIGFzc3VtZVJvbGVGbGFnID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgaWYgKGFzc3VtZVJvbGVGbGFnKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgPyBza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbiA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWN0b3J5LnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/XG4gICAgICAgIGBcXCR7eyAke2Fzc3VtZVJvbGVGbGFnfSA9PSAnZmFsc2UnICYmICR7c2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb259IH19YCA6XG4gICAgICAgIGBcXCR7eyAke2Fzc3VtZVJvbGVGbGFnfSA9PSAnZmFsc2UnIH19YDtcbiAgICB9XG5cbiAgICBjb25zdCBjb21tYW5kcyA9IFtcbiAgICAgICdlY2hvIFwiQVdTX0FDQ0VTU19LRVlfSUQ9JGFjY2Vzc0tleUlkXCIgPj4gJEdJVEhVQl9FTlYnLFxuICAgICAgJ2VjaG8gXCJBV1NfU0VDUkVUX0FDQ0VTU19LRVk9JHNlY3JldEFjY2Vzc0tleVwiID4+ICRHSVRIVUJfRU5WJyxcbiAgICAgICdlY2hvIFwiQVdTX1JFR0lPTj0kcmVnaW9uXCIgPj4gJEdJVEhVQl9FTlYnLFxuICAgIF07XG5cbiAgICBpZiAodHlwZW9mIGFzc3VtZVJvbGVGbGFnID09PSAnYm9vbGVhbicgJiYgYXNzdW1lUm9sZUZsYWcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZGl0aW9uID0gZ2V0Q29uZGl0aW9uKHRoaXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlmOiBjb25kaXRpb24sXG4gICAgICBuYW1lOiAnQ29uZmlndXJlIEFXUyBDcmVkZW50aWFscycsXG4gICAgICBydW46IGAke2NvbW1hbmRzLmpvaW4oJ1xcbicpfWAsXG4gICAgICBlbnY6IHtcbiAgICAgICAgYWNjZXNzS2V5SWQ6IGBcXCR7eyBzZWNyZXRzWyR7YWNjZXNzS2V5SWRTZWNyZXROYW1lfV0gfX1gLFxuICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IGBcXCR7eyBzZWNyZXRzWyR7c2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZX1dIH19YCxcbiAgICAgICAgcmVnaW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gYXNzdW1lIGFuIEFXUyByb2xlIGZvciB0aGUgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgYXNzdW1lQXdzUm9sZVN0ZXBGb3JNYXRyaXgoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXNzdW1lQXdzUm9sZVN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgICdtYXRyaXguYXNzdW1lUm9sZScsXG4gICAgICAnbWF0cml4LmFjY2Vzc0tleUlkU2VjcmV0TmFtZScsXG4gICAgICAnbWF0cml4LnNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUnLFxuICAgICAgJyR7eyBtYXRyaXgucmVnaW9uIH19JyxcbiAgICAgICcke3sgbWF0cml4LnJvbGVUb0Fzc3VtZSB9fScsXG4gICAgICAnJHt7IG1hdHJpeC5hc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzIH19JyxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGFzc3VtZSBhbiBBV1Mgcm9sZSBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gYXNzdW1lUm9sZUZsYWcgV2hldGhlciB0byBhc3N1bWUgYSByb2xlLCBjYW4gYmUgYSBib29sZWFuIG9yIGEgc3RyaW5nIGZvciBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHBhcmFtIGFjY2Vzc0tleUlkU2VjcmV0TmFtZSBUaGUgR2l0SHViIHNlY3JldCBuYW1lIGZvciB0aGUgYWNjZXNzIGtleSBJRFxuICAgKiBAcGFyYW0gc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSBUaGUgR2l0SHViIHNlY3JldCBuYW1lIGZvciB0aGUgc2VjcmV0IGFjY2VzcyBrZXlcbiAgICogQHBhcmFtIHJlZ2lvbiBUaGUgcmVnaW9uXG4gICAqIEBwYXJhbSByb2xlVG9Bc3N1bWUgVGhlIHJvbGUgdG8gYXNzdW1lXG4gICAqIEBwYXJhbSBhc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzIFRoZSBkdXJhdGlvbiBmb3IgYXNzdW1pbmcgdGhlIHJvbGVcbiAgICogQHJldHVybnMgSm9iU3RlcCBvciB1bmRlZmluZWQgaWYgYXNzdW1lUm9sZUZsYWcgaXMgYm9vbGVhbiBhbmQgZmFsc2VcbiAgICogaWYgYXNzdW1lUm9sZUZsYWcgaXMgc3RyaW5nIHdpbGwgYWx3YXlzIHJldHVybiBhIEpvYlN0ZXAgKGZvciBtYXRyaXggc3RyYXRlZ3kpXG4gICAqL1xuICBwdWJsaWMgZ2V0QXNzdW1lQXdzUm9sZVN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICBhc3N1bWVSb2xlRmxhZzogYm9vbGVhbiB8IHN0cmluZyxcbiAgICBhY2Nlc3NLZXlJZFNlY3JldE5hbWU6IHN0cmluZyxcbiAgICBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lOiBzdHJpbmcsXG4gICAgcmVnaW9uOiBzdHJpbmcsXG4gICAgcm9sZVRvQXNzdW1lOiBzdHJpbmcsXG4gICAgYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcz86IHN0cmluZyB8IG51bWJlcixcbiAgKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgZnVuY3Rpb24gZ2V0Q29uZGl0aW9uKGZhY3Rvcnk6IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5KSB7XG4gICAgICBpZiAodHlwZW9mIGFzc3VtZVJvbGVGbGFnID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgaWYgKCFhc3N1bWVSb2xlRmxhZykge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8gc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgP1xuICAgICAgICBgXFwke3sgJHthc3N1bWVSb2xlRmxhZ30gPT0gJ3RydWUnICYmICR7c2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb259IH19YCA6XG4gICAgICAgIGBcXCR7eyAke2Fzc3VtZVJvbGVGbGFnfSA9PSAndHJ1ZScgfX1gO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYXNzdW1lUm9sZUZsYWcgPT09ICdib29sZWFuJyAmJiAhYXNzdW1lUm9sZUZsYWcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZGl0aW9uID0gZ2V0Q29uZGl0aW9uKHRoaXMpO1xuXG4gICAgY29uc3Qgc2VjcmV0c1BhcmFtcyA9XG4gICAgICB0aGlzLnByb3BzLmF1dGhQcm92aWRlciA9PT0gQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkFDQ0VTU19BTkRfU0VDUkVUX0tFWV9QQUlSID9cbiAgICAgICAge1xuICAgICAgICAgICdhd3MtYWNjZXNzLWtleS1pZCc6IGBcXCR7eyBzZWNyZXRzWyR7YWNjZXNzS2V5SWRTZWNyZXROYW1lfV0gfX1gLFxuICAgICAgICAgICdhd3Mtc2VjcmV0LWFjY2Vzcy1rZXknOiBgXFwke3sgc2VjcmV0c1ske3NlY3JldEFjY2Vzc0tleVNlY3JldE5hbWV9XSB9fWAsXG4gICAgICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlmOiBjb25kaXRpb24sXG4gICAgICBuYW1lOiAnQXNzdW1lIEFXUyBSb2xlJyxcbiAgICAgIHVzZXM6ICdhd3MtYWN0aW9ucy9jb25maWd1cmUtYXdzLWNyZWRlbnRpYWxzQHY0JyxcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgLi4uc2VjcmV0c1BhcmFtcyxcbiAgICAgICAgJ3JvbGUtdG8tYXNzdW1lJzogcm9sZVRvQXNzdW1lLFxuICAgICAgICAnYXdzLXJlZ2lvbic6IHJlZ2lvbixcbiAgICAgICAgJ3JvbGUtZHVyYXRpb24tc2Vjb25kcyc6IGFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBzZXR1cCBOUE0gY29uZmlnIGlmIHByb3ZpZGVkXG4gICAqIEByZXR1cm5zIEpvYlN0ZXAgb3IgdW5kZWZpbmVkIGlmIG5vIG5wbUNvbmZpZyBpcyBwcm92aWRlZFxuICAgKi9cbiAgcHVibGljIGdldCBzZXR1cE5wbUNvbmZpZ0Zvck1hdHJpeCgpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTZXR1cE5wbUNvbmZpZ0ZvckVudmlyb25tZW50KCcke3sgbWF0cml4LmVudmlyb25tZW50IH19Jyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgeyBucG1Db25maWdFbnZpcm9ubWVudCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoIW5wbUNvbmZpZ0Vudmlyb25tZW50KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGVudmlyb25tZW50VmFyaWFibGVOYW1lID0gJ0NPTkZJR19WQUxVRSc7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24sXG4gICAgICBuYW1lOiAnU2V0dGluZyBOUE0gQ29uZmlnJyxcbiAgICAgIGVudjoge1xuICAgICAgICBbZW52aXJvbm1lbnRWYXJpYWJsZU5hbWVdOiBlbnZpcm9ubWVudCxcbiAgICAgIH0sXG4gICAgICBydW46IGBucG0gY29uZmlnIHNldCAke25wbUNvbmZpZ0Vudmlyb25tZW50fSAkJHtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZX1gLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGVwIHRvIHJ1biBhIHNwZWNpZmljIHNjcmlwdFxuICAgKiBAcGFyYW0gc2NyaXB0TmFtZSBUaGUgbmFtZSBvZiB0aGUgc2NyaXB0IHRvIHJ1blxuICAgKiBAcGFyYW0gc3RlcE5hbWUgVGhlIG5hbWUgb2YgdGhlIHN0ZXAgaW4gdGhlIHdvcmtmbG93XG4gICAqIEBwYXJhbSBoYXNTY3JpcHRGbGFnIFdoZXRoZXIgdGhlIHNjcmlwdCBzaG91bGQgYmUgcnVuXG4gICAqIEByZXR1cm5zIFRoZSBqb2Igc3RlcCB0byBydW4gdGhlIHNjcmlwdCBvciB1bmRlZmluZWQgaWYgbm90IGFwcGxpY2FibGVcbiAgICogSWYgaGFzU2NyaXB0RmxhZyBpcyBib29sZWFuIGFuZCBmYWxzZSB3aWxsIHJldHVybiB1bmRlZmluZWRcbiAgICogSWYgaGFzU2NyaXB0RmxhZyBpcyBzdHJpbmcgd2lsbCBhbHdheXMgcmV0dXJuIGEgSm9iU3RlcCAoZm9yIG1hdHJpeCBzdHJhdGVneSlcbiAgICovXG4gIHB1YmxpYyBnZXRSdW5TY3JpcHRTdGVwKFxuICAgIHNjcmlwdE5hbWU6IHN0cmluZyxcbiAgICBzdGVwTmFtZTogc3RyaW5nLFxuICAgIGhhc1NjcmlwdEZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGZ1bmN0aW9uIGdldENvbmRpdGlvbihmYWN0b3J5OiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSkge1xuICAgICAgaWYgKHR5cGVvZiBoYXNTY3JpcHRGbGFnID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgaWYgKCFoYXNTY3JpcHRGbGFnKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgPyBza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbiA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWN0b3J5LnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/XG4gICAgICAgIGBcXCR7eyAke2hhc1NjcmlwdEZsYWd9ID09ICd0cnVlJyAmJiAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgOlxuICAgICAgICBgXFwke3sgJHtoYXNTY3JpcHRGbGFnfSA9PSAndHJ1ZScgfX1gO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGhhc1NjcmlwdEZsYWcgPT09ICdib29sZWFuJyAmJiAhaGFzU2NyaXB0RmxhZykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBjb25kaXRpb24gPSBnZXRDb25kaXRpb24odGhpcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWY6IGNvbmRpdGlvbixcbiAgICAgIG5hbWU6IGBSdW4gJHtzdGVwTmFtZX1gLFxuICAgICAgcnVuOiBgJHt0aGlzLnByb2plY3QucnVuU2NyaXB0Q29tbWFuZH0gJHtzY3JpcHROYW1lfWAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGRlcGxveSB0aGUgd29ya2Zsb3dcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBkZXBsb3ltZW50U3RlcCgpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSdW5TY3JpcHRTdGVwKFxuICAgICAgJ2RlcGxveTp3b3JrZmxvdycsXG4gICAgICAnRGVwbG95bWVudCcsXG4gICAgICB0cnVlLFxuICAgICkhO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gcnVuIHBvc3QgZGVwbG95bWVudCBzY3JpcHQgaW4gbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJlRGVwbG95bWVudFN0ZXBGb3JNYXRyaXgoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgICdtYXRyaXguaGFzUHJlRGVwbG95VGFzaycsXG4gICAgICAnJHt7IG1hdHJpeC5wcmVEZXBsb3ltZW50U2NyaXB0IH19JyxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHByZS1kZXBsb3ltZW50IHN0ZXAgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGhhc1ByZURlcGxveVRhc2tGbGFnIFdoZXRoZXIgdGhlIHByZS1kZXBsb3ltZW50IHRhc2sgc2hvdWxkIGJlIHJ1blxuICAgKiBAcGFyYW0gcHJlRGVwbG95bWVudFNjcmlwdCBUaGUgc2NyaXB0IHRvIHJ1blxuICAgKiBAcmV0dXJucyBUaGUgam9iIHN0ZXAgdG8gcnVuIHRoZSBwcmUtZGVwbG95bWVudCBzY3JpcHQgb3IgdW5kZWZpbmVkIGlmIG5vdCBhcHBsaWNhYmxlXG4gICAqIElmIGhhc1ByZURlcGxveVRhc2tGbGFnIGlzIGJvb2xlYW4gYW5kIGZhbHNlIHdpbGwgcmV0dXJuIHVuZGVmaW5lZFxuICAgKiBJZiBoYXNQcmVEZXBsb3lUYXNrRmxhZyBpcyBzdHJpbmcgd2lsbCBhbHdheXMgcmV0dXJuIGEgSm9iU3RlcCAoZm9yIG1hdHJpeCBzdHJhdGVneSlcbiAgICovXG4gIHB1YmxpYyBnZXRQcmVEZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgIGhhc1ByZURlcGxveVRhc2tGbGFnOiBib29sZWFuIHwgc3RyaW5nLFxuICAgIHByZURlcGxveW1lbnRTY3JpcHQ6IHN0cmluZyxcbiAgKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRSdW5TY3JpcHRTdGVwKFxuICAgICAgcHJlRGVwbG95bWVudFNjcmlwdCxcbiAgICAgICdQcmUgRGVwbG95bWVudCcsXG4gICAgICBoYXNQcmVEZXBsb3lUYXNrRmxhZyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gcnVuIHBvc3QgZGVwbG95bWVudCBzY3JpcHQgaW4gbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgcG9zdERlcGxveW1lbnRTdGVwRm9yTWF0cml4KCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldFBvc3REZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgICAgJ21hdHJpeC5oYXNQb3N0RGVwbG95VGFzaycsXG4gICAgICAnJHt7IG1hdHJpeC5wb3N0RGVwbG95bWVudFNjcmlwdCB9fScsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwb3N0LWRlcGxveW1lbnQgc3RlcCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gaGFzUG9zdERlcGxveVRhc2tGbGFnIFdoZXRoZXIgdGhlIHBvc3QtZGVwbG95bWVudCB0YXNrIHNob3VsZCBiZSBydW5cbiAgICogQHBhcmFtIHBvc3REZXBsb3ltZW50U2NyaXB0IFRoZSBzY3JpcHQgdG8gcnVuXG4gICAqIEByZXR1cm5zIFRoZSBqb2Igc3RlcCB0byBydW4gdGhlIHBvc3QtZGVwbG95bWVudCBzY3JpcHQgb3IgdW5kZWZpbmVkIGlmIG5vdCBhcHBsaWNhYmxlXG4gICAqIElmIGhhc1Bvc3REZXBsb3lUYXNrRmxhZyBpcyBib29sZWFuIGFuZCBmYWxzZSB3aWxsIHJldHVybiB1bmRlZmluZWRcbiAgICogSWYgaGFzUG9zdERlcGxveVRhc2tGbGFnIGlzIHN0cmluZyB3aWxsIGFsd2F5cyByZXR1cm4gYSBKb2JTdGVwIChmb3IgbWF0cml4IHN0cmF0ZWd5KVxuICAgKi9cbiAgcHVibGljIGdldFBvc3REZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgIGhhc1Bvc3REZXBsb3lUYXNrRmxhZzogYm9vbGVhbiB8IHN0cmluZyxcbiAgICBwb3N0RGVwbG95bWVudFNjcmlwdDogc3RyaW5nLFxuICApOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcblxuICAgIHJldHVybiB0aGlzLmdldFJ1blNjcmlwdFN0ZXAoXG4gICAgICBwb3N0RGVwbG95bWVudFNjcmlwdCxcbiAgICAgICdQb3N0IERlcGxveW1lbnQnLFxuICAgICAgaGFzUG9zdERlcGxveVRhc2tGbGFnLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBkZXBsb3ltZW50IGpvYnMgd2hldGhlciBmb3IgbWF0cml4IHN0cmF0ZWd5IG9yIG5vdFxuICAgKiBAcmV0dXJucyBSZWNvcmQgb2Ygam9ic1xuICAgKi9cbiAgcHVibGljIGdldCBkZXBsb3ltZW50Sm9icygpOiBSZWNvcmQ8c3RyaW5nLCBKb2I+IHtcblxuICAgIGlmICh0aGlzLnByb3BzLmRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wcm9qZWN0LmxvZ2dlci53YXJuKCdUaGUgcHJvamVjdCBkb2VzIG5vdCBoYXZlIGFueSBlbnZpcm9ubWVudCBzZXQsIG1ha2Ugc3VyZSB0aGlzIGlzIGRlc2lyZWQgc2V0dGluZycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5qb2JTdHJhdGVneSA9PT0gRGVwbG95Sm9iU3RyYXRlZ3kuTUFUUklYID8gdGhpcy5kZXBsb3ltZW50Sm9ic0Zvck1hdHJpeCA6IHRoaXMuZ2V0RGVwbG95bWVudEpvYnNGb3JNdWx0aUpvYigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZXBsb3ltZW50IGpvYnMgZm9yIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBSZWNvcmQgb2Ygam9ic1xuICAgKi9cbiAgcHVibGljIGdldCBkZXBsb3ltZW50Sm9ic0Zvck1hdHJpeCgpOiBSZWNvcmQ8c3RyaW5nLCBKb2I+IHtcblxuICAgIGNvbnN0IHsgZW52aXJvbm1lbnRzLCBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSB9ID0gdGhpcy5wcm9wcy5kZXBsb3lPcHRpb25zO1xuXG4gICAgY29uc3QgaW5jbHVkZSA9IGVudmlyb25tZW50cy5tYXAoZW52aXJvbm1lbnRPcHRpb25zID0+IHtcbiAgICAgIGNvbnN0IHsgYXdzQ3JlZGVudGlhbHMgfSA9IGVudmlyb25tZW50T3B0aW9ucztcblxuICAgICAgY29uc3QgYXNzdW1lUm9sZSA9IGF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSA/ICd0cnVlJyA6ICdmYWxzZSc7XG5cbiAgICAgIGNvbnN0IGFzc3VtZVJvbGVTZXR0aW5ncyA9IGF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSA/IHtcbiAgICAgICAgcm9sZVRvQXNzdW1lOiBhd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUsXG4gICAgICAgIGFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHM6IGF3c0NyZWRlbnRpYWxzLmFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHMgfHwgOTAwLFxuICAgICAgfTogdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBhY2Nlc3NLZXlJZFNlY3JldE5hbWUgPSBhd3NDcmVkZW50aWFscy5hY2Nlc3NLZXlJZFNlY3JldE5hbWUgPz8gJ0FXU19BQ0NFU1NfS0VZX0lEJztcbiAgICAgIGNvbnN0IHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgPSBhd3NDcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lID8/ICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknO1xuXG4gICAgICBjb25zdCBoYXNQb3N0RGVwbG95VGFzayA9IGVudmlyb25tZW50T3B0aW9ucy5wb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgICAgY29uc3QgaGFzUHJlRGVwbG95VGFzayA9IGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCA/ICd0cnVlJyA6ICdmYWxzZSc7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudE9wdGlvbnMubmFtZSxcbiAgICAgICAgYWNjZXNzS2V5SWRTZWNyZXROYW1lLFxuICAgICAgICBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lLFxuICAgICAgICByZWdpb246IGF3c0NyZWRlbnRpYWxzLnJlZ2lvbixcbiAgICAgICAgYXNzdW1lUm9sZSxcbiAgICAgICAgaGFzUG9zdERlcGxveVRhc2ssXG4gICAgICAgIHBvc3REZXBsb3ltZW50U2NyaXB0OiBlbnZpcm9ubWVudE9wdGlvbnMucG9zdERlcGxveVdvcmtmbG93U2NyaXB0IHx8ICcnLFxuICAgICAgICBoYXNQcmVEZXBsb3lUYXNrLFxuICAgICAgICBwcmVEZXBsb3ltZW50U2NyaXB0OiBlbnZpcm9ubWVudE9wdGlvbnMucHJlRGVwbG95V29ya2Zsb3dTY3JpcHQgfHwgJycsXG4gICAgICAgIC4uLmFzc3VtZVJvbGVTZXR0aW5ncyxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBkZXBsb3lKb2JFbnYgPSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA/IHtcbiAgICAgIFtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZV06ICcke3sgbWF0cml4LmVudmlyb25tZW50IH19JyxcbiAgICB9IDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgam9iRGVmaW5pdGlvbjogSm9iID0ge1xuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIGNvbmN1cnJlbmN5OiB7XG4gICAgICAgICdncm91cCc6ICcke3sgbWF0cml4LmVudmlyb25tZW50IH19LWRlcGxveScsXG4gICAgICAgICdjYW5jZWwtaW4tcHJvZ3Jlc3MnOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBuZWVkczogW1xuICAgICAgICAncmVsZWFzZV9naXRodWInLFxuICAgICAgXSxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIGRlcGxveW1lbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIGlkVG9rZW46IHRoaXMucHJvcHMuYXV0aFByb3ZpZGVyID09PSBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuR0lUSFVCX09JREMgPyBKb2JQZXJtaXNzaW9uLldSSVRFIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIHN0cmF0ZWd5OiB7XG4gICAgICAgIG1heFBhcmFsbGVsOiAxLFxuICAgICAgICBtYXRyaXg6IHtcbiAgICAgICAgICBkb21haW46IHtcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBpbmNsdWRlLm1hcChlID0+IGUuZW52aXJvbm1lbnQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5jbHVkZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBuYW1lOiAnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fScsXG4gICAgICB9LFxuICAgICAgZW52OiBkZXBsb3lKb2JFbnYsXG4gICAgICBzdGVwczogW10sXG4gICAgfTtcblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLmNoZWNrb3V0U3RlcCk7XG5cbiAgICBjb25zdCBwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCA9IHRoaXMucHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXA7XG4gICAgaWYgKHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2gocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi4odGhpcy5wcm9qZWN0KS5yZW5kZXJXb3JrZmxvd1NldHVwKCkpO1xuXG4gICAgY29uc3QgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCA9IHRoaXMuY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeDtcbiAgICBpZiAoY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JNYXRyaXgpO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi50aGlzLnNldHVwQXdzQ3JlZGVudGlhbHNTdGVwc0Zvck1hdHJpeCk7XG5cbiAgICBjb25zdCBzZXR1cE5wbUNvbmZpZ1N0ZXAgPSB0aGlzLnNldHVwTnBtQ29uZmlnRm9yTWF0cml4O1xuICAgIGlmIChzZXR1cE5wbUNvbmZpZ1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChzZXR1cE5wbUNvbmZpZ1N0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLnByZURlcGxveW1lbnRTdGVwRm9yTWF0cml4KTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5kZXBsb3ltZW50U3RlcCk7XG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMucG9zdERlcGxveW1lbnRTdGVwRm9yTWF0cml4KTtcblxuICAgIHJldHVybiB7IGRlcGxveTogam9iRGVmaW5pdGlvbiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSURzIG9mIHRoZSBqb2JzIHRoYXQgbXVzdCBiZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgZW52aXJvbm1lbnQncyBkZXBsb3ltZW50IGpvYlxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudFxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBqb2IgSURzXG4gICAqL1xuICBwdWJsaWMgZ2V0RGVwbG95bWVudEpvYlByZXJlcXVpc2l0ZUpvYklkcyhlbnZpcm9ubWVudE5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbJ3JlbGVhc2VfZ2l0aHViJ107XG4gICAgaWYgKCF0aGlzLnByb3BzLmVudmlyb25tZW50RGVwZW5kZW5jaWVzKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMucHJvcHMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMuZmluZEluZGV4KGVudiA9PiBlbnYubmFtZSA9PT0gZW52aXJvbm1lbnROYW1lKTtcbiAgICAgIGNvbnN0IHByZXJlcXVpc2l0ZUVudmlyb25tZW50ID0gaW5kZXggPiAwID8gdGhpcy5wcm9wcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50c1tpbmRleCAtIDFdIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKHByZXJlcXVpc2l0ZUVudmlyb25tZW50KSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGdldERlcGxveUpvYklkKHByZXJlcXVpc2l0ZUVudmlyb25tZW50Lm5hbWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gdGhpcy5wcm9wcy5lbnZpcm9ubWVudERlcGVuZGVuY2llc1tlbnZpcm9ubWVudE5hbWVdO1xuICAgICAgaWYgKGRlcGVuZGVuY2llcykge1xuICAgICAgICBkZXBlbmRlbmNpZXMuZm9yRWFjaChkZXAgPT4ge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGdldERlcGxveUpvYklkKGRlcCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGVwbG95bWVudCBqb2JzIGZvciBtdWx0aS1qb2Igc3RyYXRlZ3lcbiAgICogQHJldHVybnMgUmVjb3JkIG9mIGpvYnNcbiAgICovXG4gIHB1YmxpYyBnZXREZXBsb3ltZW50Sm9ic0Zvck11bHRpSm9iKCk6IFJlY29yZDxzdHJpbmcsIEpvYj4ge1xuICAgIGNvbnN0IHsgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUsIGVudmlyb25tZW50cyB9ID0gdGhpcy5wcm9wcy5kZXBsb3lPcHRpb25zO1xuICAgIGNvbnN0IGpvYnMgPSBlbnZpcm9ubWVudHMubWFwKChlbnZpcm9ubWVudE9wdGlvbnMpOiBbc3RyaW5nLCBKb2JdID0+IHtcbiAgICAgIHJldHVybiBbZ2V0RGVwbG95Sm9iSWQoZW52aXJvbm1lbnRPcHRpb25zLm5hbWUpLCB0aGlzLmdldEpvYkZvckVudmlyb25tZW50KGVudmlyb25tZW50T3B0aW9ucywgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUpXTtcbiAgICB9KTtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGpvYnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgam9iIGRlZmluaXRpb24gZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGVudmlyb25tZW50T3B0aW9ucyBUaGUgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKiBAcGFyYW0gZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHNldCB3aXRoIHRoZSBlbnZpcm9ubWVudCBuYW1lLCBpZiBhbnlcbiAgICogQHJldHVybnMgVGhlIGpvYiBkZWZpbml0aW9uIGZvciB0aGUgZW52aXJvbm1lbnRcbiAgICovXG4gIHB1YmxpYyBnZXRKb2JGb3JFbnZpcm9ubWVudChcbiAgICBlbnZpcm9ubWVudE9wdGlvbnM6IEVudmlyb25tZW50T3B0aW9ucyxcbiAgICBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICApOiBKb2Ige1xuICAgIGNvbnN0IHsgbmFtZSB9ID0gZW52aXJvbm1lbnRPcHRpb25zO1xuICAgIGNvbnN0IGRlcGxveUpvYkVudiA9IGVudmlyb25tZW50VmFyaWFibGVOYW1lID8ge1xuICAgICAgW2Vudmlyb25tZW50VmFyaWFibGVOYW1lXTogbmFtZSxcbiAgICB9IDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgam9iRGVmaW5pdGlvbjogSm9iID0ge1xuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIGNvbmN1cnJlbmN5OiB7XG4gICAgICAgICdncm91cCc6IGAke25hbWV9LWRlcGxveWAsXG4gICAgICAgICdjYW5jZWwtaW4tcHJvZ3Jlc3MnOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBuZWVkczogdGhpcy5nZXREZXBsb3ltZW50Sm9iUHJlcmVxdWlzaXRlSm9iSWRzKG5hbWUpLFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgZGVwbG95bWVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgaWRUb2tlbjogdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQyA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgIH0sXG4gICAgICBlbnY6IGRlcGxveUpvYkVudixcbiAgICAgIHN0ZXBzOiBbXSxcbiAgICB9O1xuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMuY2hlY2tvdXRTdGVwKTtcblxuICAgIGNvbnN0IHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwID0gdGhpcy5wcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcDtcbiAgICBpZiAocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKC4uLih0aGlzLnByb2plY3QpLnJlbmRlcldvcmtmbG93U2V0dXAoKSk7XG5cbiAgICBjb25zdCBjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwID0gdGhpcy5nZXRDaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQobmFtZSk7XG4gICAgaWYgKGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4udGhpcy5nZXRTZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnMpKTtcblxuICAgIGNvbnN0IHNldHVwTnBtQ29uZmlnU3RlcCA9IHRoaXMuZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudChuYW1lKTtcbiAgICBpZiAoc2V0dXBOcG1Db25maWdTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goc2V0dXBOcG1Db25maWdTdGVwKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVEZXBsb3ltZW50U3RlcCA9IHRoaXMuZ2V0UHJlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCB8fCAnJyxcbiAgICApO1xuICAgIGlmIChwcmVEZXBsb3ltZW50U3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHByZURlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5kZXBsb3ltZW50U3RlcCk7XG5cbiAgICBjb25zdCBwb3N0RGVwbG95bWVudFN0ZXAgPSB0aGlzLmdldFBvc3REZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLnBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdCA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgfHwgJycsXG4gICAgKTtcbiAgICBpZiAocG9zdERlcGxveW1lbnRTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2gocG9zdERlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gam9iRGVmaW5pdGlvbjtcbiAgfVxuXG59XG5cbmZ1bmN0aW9uIGdldERlcGxveUpvYklkKGVudmlyb25tZW50TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBEZXBsb3ktJHtlbnZpcm9ubWVudE5hbWV9YDtcbn1cbiJdfQ==
522
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3RlcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQWlzQkEsd0NBRUM7O0FBbHNCRCw4Q0FBa0Q7QUFDbEQsdUVBQWdGO0FBQ2hGLHNEQUFpRTtBQUNqRSxtQ0FBa0g7QUFFbEgsTUFBTSwyQkFBMkIsR0FBRyxrQkFBa0IsQ0FBQztBQUN2RCxNQUFNLHNDQUFzQyxHQUFFLFNBQVMsMkJBQTJCLDBDQUEwQyxDQUFDO0FBd0M3SDs7O0dBR0c7QUFDSCxNQUFhLHlDQUF5QztJQUVwRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLHlDQUF5QyxDQUNyRCxhQUE0QixFQUM1Qix1QkFBMEQ7UUFHMUQsSUFBSSxhQUFhLENBQUMsV0FBVyxLQUFLLHlCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlELE1BQU0sSUFBSSxLQUFLLENBQUMsK0VBQStFLENBQUMsQ0FBQztRQUNuRyxDQUFDO1FBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDOUQsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyx3RUFBd0UsQ0FBQyxDQUFDO1lBQy9HLENBQUM7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQixNQUFNLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FB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QyxDQUFDO1FBQzlDLENBQUM7UUFFRCxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFOUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUNBQW1DLENBQ2pFLGtCQUFrQixDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFDMUQsa0JBQWtCLENBQUMsd0JBQXdCLElBQUksRUFBRSxDQUNsRCxDQUFDO1FBQ0YsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3ZCLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7O0FBcm9CSCw4RkF1b0JDOzs7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLGVBQXVCO0lBQ3BELE9BQU8sVUFBVSxlQUFlLEVBQUUsQ0FBQztBQUNyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgamF2YXNjcmlwdCB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBXb3JrZmxvd1N0ZXBzIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgSm9iUGVybWlzc2lvbiwgSm9iU3RlcCwgSm9iIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlciB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBEZXBsb3lKb2JTdHJhdGVneSwgRGVwbG95T3B0aW9ucywgRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzLCBFbnZpcm9ubWVudE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcElkID0gJ2RlcGxveW1lbnQtY2hlY2snO1xuY29uc3Qgc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb249IGBzdGVwcy4ke2NoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBJZH0ub3V0cHV0cy5oYXNfYWN0aXZlX2RlcGxveW1lbnQgIT0gJ3RydWUnYDtcblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeVByb3BzIHtcbiAgLyoqXG4gICAqIERlcGxveW1lbnQgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95T3B0aW9uczogRGVwbG95T3B0aW9ucztcblxuICAvKipcbiAgICogV2hldGhlciB0byBjaGVjayBmb3IgYWN0aXZlIGRlcGxveW1lbnRzIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggZGVwbG95bWVudFxuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2tBY3RpdmVEZXBsb3ltZW50OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGFzayB0byBydW4gYmVmb3JlIGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzLCBpZiBhbnlcbiAgICovXG4gIHJlYWRvbmx5IHByZUluc3RhbGxUYXNrTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyIGZvciBDb2RlQXJ0aWZhY3QsIGlmIGFueVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aFByb3ZpZGVyPzogQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbnBtIGNvbmZpZyB0byBzZXQgd2l0aCB0aGUgZW52aXJvbm1lbnQgdGhhdCBpcyBiZWluZyBkZXBsb3llZCwgaWYgYW55XG4gICAqIE5vdGU6IFRoaXMgaXMgbm90IHN1cHBvcnRlZCBmb3Igbm9kZSB2ZXJzaW9ucyBhYm92ZSAxOFxuICAgKi9cbiAgcmVhZG9ubHkgbnBtQ29uZmlnRW52aXJvbm1lbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlcGxveW1lbnQgam9iIHN0cmF0ZWd5LCB3aGV0aGVyIHRvIHVzZSBhIG1hdHJpeCBqb2Igb3IgbXVsdGlwbGUgam9icyBmb3IgZWFjaCBlbnZpcm9ubWVudFxuICAgKi9cbiAgcmVhZG9ubHkgam9iU3RyYXRlZ3k6IERlcGxveUpvYlN0cmF0ZWd5O1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCBkZXBsb3ltZW50IGRlcGVuZGVuY2llcywgaWYgYW55XG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudERlcGVuZGVuY2llcz86IEVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcztcbn1cblxuLyoqXG4gKiBGYWN0b3J5IHRvIGNyZWF0ZSByZXVzYWJsZSBzdGVwcyBmb3IgdGhlIGRlcGxveW1lbnQgd29ya2Zsb3dcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IGNsYXNzIERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5IHtcblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCB0aGUgcHJvdmlkZWQgZW52aXJvbm1lbnQgZGVwbG95bWVudCBkZXBlbmRlbmNpZXMgYXJlIHZhbGlkXG4gICAqIEBwYXJhbSBkZXBsb3lPcHRpb25zIFRoZSBkZXBsb3ltZW50IG9wdGlvbnNcbiAgICogQHBhcmFtIGVudmlyb25tZW50RGVwZW5kZW5jaWVzIFRoZSBlbnZpcm9ubWVudCBkZXBsb3ltZW50IGRlcGVuZGVuY2llcyB0byB2YWxpZGF0ZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2YWxpZGF0ZUVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcyhcbiAgICBkZXBsb3lPcHRpb25zOiBEZXBsb3lPcHRpb25zLFxuICAgIGVudmlyb25tZW50RGVwZW5kZW5jaWVzOiBFbnZpcm9ubWVudERlcGxveW1lbnREZXBlbmRlbmNpZXMsXG4gICk6IHZvaWQge1xuXG4gICAgaWYgKGRlcGxveU9wdGlvbnMuam9iU3RyYXRlZ3kgIT09IERlcGxveUpvYlN0cmF0ZWd5Lk1VTFRJX0pPQikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbnZpcm9ubWVudCBkZXBsb3ltZW50IGRlcGVuZGVuY2llcyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIE1VTFRJX0pPQiBzdHJhdGVneScpO1xuICAgIH1cblxuICAgIE9iamVjdC5lbnRyaWVzKGVudmlyb25tZW50RGVwZW5kZW5jaWVzKS5mb3JFYWNoKChbZW52LCBkZXBzXSkgPT4ge1xuICAgICAgY29uc3QgaGFzRW52aXJvbm1lbnQgPSBkZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5zb21lKGUgPT4gZS5uYW1lID09PSBlbnYpO1xuICAgICAgaWYgKCFoYXNFbnZpcm9ubWVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVudmlyb25tZW50IFwiJHtlbnZ9XCIgZGVmaW5lZCBpbiBkZXBlbmRlbmNpZXMgZG9lcyBub3QgZXhpc3QgaW4gZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHNgKTtcbiAgICAgIH1cbiAgICAgIGRlcHMuZm9yRWFjaChkZXAgPT4ge1xuICAgICAgICBjb25zdCBoYXNEZXBFbnZpcm9ubWVudCA9IGRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzLnNvbWUoZSA9PiBlLm5hbWUgPT09IGRlcCk7XG4gICAgICAgIGlmICghaGFzRGVwRW52aXJvbm1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERlcGVuZGVuY3kgZW52aXJvbm1lbnQgXCIke2RlcH1cIiBmb3IgZW52aXJvbm1lbnQgXCIke2Vudn1cIiBkb2VzIG5vdCBleGlzdCBpbiBkZXBsb3lPcHRpb25zLmVudmlyb25tZW50c2ApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnlcbiAgICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3RcbiAgICogQHBhcmFtIHByb3BzIFRoZSBmYWN0b3J5IHByb3BlcnRpZXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdDogamF2YXNjcmlwdC5Ob2RlUHJvamVjdCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeVByb3BzLFxuICApIHt9XG5cbiAgLyoqXG4gICAqIENvbmRpdGlvbiB0byBza2lwIGEgc3RlcCBpZiBhbiBhY3RpdmUgZGVwbG95bWVudCBpcyBhbHJlYWR5IHByZXNlbnRcbiAgICogQHJldHVybnMgSm9iU3RlcCBjb25kaXRpb24gb3IgdW5kZWZpbmVkIGlmIGNoZWNrQWN0aXZlRGVwbG95bWVudCBpcyBmYWxzZVxuICAgKi9cbiAgcHVibGljIGdldCBza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbigpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgPyB7IGlmOiBgXFwke3sgJHtza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbn0gfX1gIH0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNoZWNrb3V0U3RlcCgpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4gV29ya2Zsb3dTdGVwcy5jaGVja291dCh7XG4gICAgICB3aXRoOiB7XG4gICAgICAgIGZldGNoRGVwdGg6IDAsXG4gICAgICAgIHJlZjogJyR7eyBnaXRodWIuc2hhIH19JyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBydW4gYmVmb3JlIGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzIGlmIGV4aXN0c1xuICAgKiBAcmV0dXJucyBKb2JTdGVwIG9yIHVuZGVmaW5lZCBpZiBubyBwcmVJbnN0YWxsVGFza05hbWUgaXMgcHJvdmlkZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXAoKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLnByZUluc3RhbGxUYXNrTmFtZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5za2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbixcbiAgICAgIG5hbWU6IHRoaXMucHJvcHMucHJlSW5zdGFsbFRhc2tOYW1lLFxuICAgICAgcnVuOiBgbnB4IHByb2plbiAke3RoaXMucHJvcHMucHJlSW5zdGFsbFRhc2tOYW1lfWAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGFjdGl2ZSBkZXBsb3ltZW50IGZvciB0aGUgZW52aXJvbm1lbnQgaW4gdGhlIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JNYXRyaXgoKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KCcke3sgbWF0cml4LmVudmlyb25tZW50IH19Jyk7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBjaGVjayBpZiB0aGVyZSBpcyBhbiBhY3RpdmUgZGVwbG95bWVudCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnQgVGhlIGVudmlyb25tZW50IHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXRDaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZyk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwSWQsXG4gICAgICB1c2VzOiAnQW1pbkZhemxNb25kby9jaGVjay1kZXBsb3llZC1lbnZpcm9ubWVudEB2MScsXG4gICAgICB3aXRoOiB7XG4gICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudCxcbiAgICAgIH0sXG4gICAgICBlbnY6IHtcbiAgICAgICAgR0lUSFVCX1RPS0VOOiAnJHt7IHNlY3JldHMuR0lUSFVCX1RPS0VOIH19JyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHNldHVwIEFXUyBjcmVkZW50aWFscyBpbiB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHJldHVybnMgSm9iU3RlcFtdXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNldHVwQXdzQ3JlZGVudGlhbHNTdGVwc0Zvck1hdHJpeCgpOiBKb2JTdGVwW10ge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLnNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yTWF0cml4LFxuICAgICAgdGhpcy5hc3N1bWVBd3NSb2xlU3RlcEZvck1hdHJpeCxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RlcHMgdG8gc2V0dXAgQVdTIGNyZWRlbnRpYWxzIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudE9wdGlvbnMgVGhlIGVudmlyb25tZW50IG9wdGlvbnNcbiAgICogQHJldHVybnMgSm9iU3RlcFtdXG4gICAqL1xuICBwdWJsaWMgZ2V0U2V0dXBBd3NDcmVkZW50aWFsc1N0ZXBzRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnRPcHRpb25zOiBFbnZpcm9ubWVudE9wdGlvbnMpOiBKb2JTdGVwW10ge1xuICAgIGNvbnN0IHN0ZXBzOiBKb2JTdGVwW10gPSBbXTtcblxuICAgIGNvbnN0IGZyb21FbnZWYXJpYWJsZVN0ZXAgPSB0aGlzLmdldFNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yRW52aXJvbm1lbnQoXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLmFjY2Vzc0tleUlkU2VjcmV0TmFtZSA/PyAnQVdTX0FDQ0VTU19LRVlfSUQnLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgPz8gJ0FXU19TRUNSRVRfQUNDRVNTX0tFWScsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMucmVnaW9uLFxuICAgICk7XG5cbiAgICBpZiAoZnJvbUVudlZhcmlhYmxlU3RlcCkge1xuICAgICAgc3RlcHMucHVzaChmcm9tRW52VmFyaWFibGVTdGVwKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc3N1bWVSb2xlU3RlcCA9IHRoaXMuZ2V0QXNzdW1lQXdzUm9sZVN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUgPyB0cnVlIDogZmFsc2UsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuYWNjZXNzS2V5SWRTZWNyZXROYW1lID8/ICdBV1NfQUNDRVNTX0tFWV9JRCcsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSA/PyAnQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZJyxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yZWdpb24sXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8/ICcnLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLmFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHMgPz8gOTAwLFxuICAgICk7XG5cbiAgICBpZiAoYXNzdW1lUm9sZVN0ZXApIHtcbiAgICAgIHN0ZXBzLnB1c2goYXNzdW1lUm9sZVN0ZXApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGVwcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHNldHVwIEFXUyBjcmVkZW50aWFscyBpbiB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBzZXR1cEF3c0NyZWRlbnRpYWxzSW5FbnZpcm9ubWVudEZvck1hdHJpeCgpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTZXR1cEF3c0NyZWRlbnRpYWxzSW5FbnZpcm9ubWVudEZvckVudmlyb25tZW50KFxuICAgICAgJ21hdHJpeC5hc3N1bWVSb2xlJyxcbiAgICAgICdtYXRyaXguYWNjZXNzS2V5SWRTZWNyZXROYW1lJyxcbiAgICAgICdtYXRyaXguc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZScsXG4gICAgICAnJHt7IG1hdHJpeC5yZWdpb24gfX0nLFxuICAgICkhO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gc2V0dXAgQVdTIGNyZWRlbnRpYWxzIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gYXNzdW1lUm9sZUZsYWcgV2hldGhlciB0byBhc3N1bWUgYSByb2xlLCBjYW4gYmUgYSBib29sZWFuIG9yIGEgc3RyaW5nIGZvciBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHBhcmFtIGFjY2Vzc0tleUlkU2VjcmV0TmFtZSBUaGUgR2l0SHViIHNlY3JldCBuYW1lIGZvciB0aGUgYWNjZXNzIGtleSBJRFxuICAgKiBAcGFyYW0gc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSBUaGUgR2l0SHViIHNlY3JldCBuYW1lIGZvciB0aGUgc2VjcmV0IGFjY2VzcyBrZXlcbiAgICogQHBhcmFtIHJlZ2lvbiBUaGUgcmVnaW9uXG4gICAqIEByZXR1cm5zIEpvYlN0ZXAgb3IgdW5kZWZpbmVkIGlmIG5vIEFXUyBjcmVkZW50aWFscyBhcmUgcHJvdmlkZWQsXG4gICAqIGlmIGFzc3VtZVJvbGVGbGFnIGlzIGJvb2xlYW4gd2lsbCBiZSBldmFsdWF0ZWQgYW5kIHJldHVybiBhIEpvYlN0ZXAgb25seSBpZiBmYWxzZVxuICAgKiBpZiBhc3N1bWVSb2xlRmxhZyBpcyBzdHJpbmcgd2lsbCBhbHdheXMgcmV0dXJuIGEgSm9iU3RlcCAoZm9yIG1hdHJpeCBzdHJhdGVneSlcbiAgICovXG4gIHB1YmxpYyBnZXRTZXR1cEF3c0NyZWRlbnRpYWxzSW5FbnZpcm9ubWVudEZvckVudmlyb25tZW50KFxuICAgIGFzc3VtZVJvbGVGbGFnOiBib29sZWFuIHwgc3RyaW5nLFxuICAgIGFjY2Vzc0tleUlkU2VjcmV0TmFtZTogc3RyaW5nLFxuICAgIHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWU6IHN0cmluZyxcbiAgICByZWdpb246IHN0cmluZyxcbiAgKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG5cbiAgICBmdW5jdGlvbiBnZXRDb25kaXRpb24oZmFjdG9yeTogRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkpIHtcbiAgICAgIGlmICh0eXBlb2YgYXNzdW1lUm9sZUZsYWcgPT09ICdib29sZWFuJykge1xuICAgICAgICBpZiAoYXNzdW1lUm9sZUZsYWcpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWN0b3J5LnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/IHNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID9cbiAgICAgICAgYFxcJHt7ICR7YXNzdW1lUm9sZUZsYWd9ID09ICdmYWxzZScgJiYgJHtza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbn0gfX1gIDpcbiAgICAgICAgYFxcJHt7ICR7YXNzdW1lUm9sZUZsYWd9ID09ICdmYWxzZScgfX1gO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1hbmRzID0gW1xuICAgICAgJ2VjaG8gXCJBV1NfQUNDRVNTX0tFWV9JRD0kYWNjZXNzS2V5SWRcIiA+PiAkR0lUSFVCX0VOVicsXG4gICAgICAnZWNobyBcIkFXU19TRUNSRVRfQUNDRVNTX0tFWT0kc2VjcmV0QWNjZXNzS2V5XCIgPj4gJEdJVEhVQl9FTlYnLFxuICAgICAgJ2VjaG8gXCJBV1NfUkVHSU9OPSRyZWdpb25cIiA+PiAkR0lUSFVCX0VOVicsXG4gICAgXTtcblxuICAgIGlmICh0eXBlb2YgYXNzdW1lUm9sZUZsYWcgPT09ICdib29sZWFuJyAmJiBhc3N1bWVSb2xlRmxhZykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBjb25kaXRpb24gPSBnZXRDb25kaXRpb24odGhpcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWY6IGNvbmRpdGlvbixcbiAgICAgIG5hbWU6ICdDb25maWd1cmUgQVdTIENyZWRlbnRpYWxzJyxcbiAgICAgIHJ1bjogYCR7Y29tbWFuZHMuam9pbignXFxuJyl9YCxcbiAgICAgIGVudjoge1xuICAgICAgICBhY2Nlc3NLZXlJZDogYFxcJHt7IHNlY3JldHNbJHthY2Nlc3NLZXlJZFNlY3JldE5hbWV9XSB9fWAsXG4gICAgICAgIHNlY3JldEFjY2Vzc0tleTogYFxcJHt7IHNlY3JldHNbJHtzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lfV0gfX1gLFxuICAgICAgICByZWdpb24sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBhc3N1bWUgYW4gQVdTIHJvbGUgZm9yIHRoZSBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBhc3N1bWVBd3NSb2xlU3RlcEZvck1hdHJpeCgpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBc3N1bWVBd3NSb2xlU3RlcEZvckVudmlyb25tZW50KFxuICAgICAgJ21hdHJpeC5hc3N1bWVSb2xlJyxcbiAgICAgICdtYXRyaXguYWNjZXNzS2V5SWRTZWNyZXROYW1lJyxcbiAgICAgICdtYXRyaXguc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZScsXG4gICAgICAnJHt7IG1hdHJpeC5yZWdpb24gfX0nLFxuICAgICAgJyR7eyBtYXRyaXgucm9sZVRvQXNzdW1lIH19JyxcbiAgICAgICcke3sgbWF0cml4LmFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHMgfX0nLFxuICAgICkhO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gYXNzdW1lIGFuIEFXUyByb2xlIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBhc3N1bWVSb2xlRmxhZyBXaGV0aGVyIHRvIGFzc3VtZSBhIHJvbGUsIGNhbiBiZSBhIGJvb2xlYW4gb3IgYSBzdHJpbmcgZm9yIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcGFyYW0gYWNjZXNzS2V5SWRTZWNyZXROYW1lIFRoZSBHaXRIdWIgc2VjcmV0IG5hbWUgZm9yIHRoZSBhY2Nlc3Mga2V5IElEXG4gICAqIEBwYXJhbSBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lIFRoZSBHaXRIdWIgc2VjcmV0IG5hbWUgZm9yIHRoZSBzZWNyZXQgYWNjZXNzIGtleVxuICAgKiBAcGFyYW0gcmVnaW9uIFRoZSByZWdpb25cbiAgICogQHBhcmFtIHJvbGVUb0Fzc3VtZSBUaGUgcm9sZSB0byBhc3N1bWVcbiAgICogQHBhcmFtIGFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHMgVGhlIGR1cmF0aW9uIGZvciBhc3N1bWluZyB0aGUgcm9sZVxuICAgKiBAcmV0dXJucyBKb2JTdGVwIG9yIHVuZGVmaW5lZCBpZiBhc3N1bWVSb2xlRmxhZyBpcyBib29sZWFuIGFuZCBmYWxzZVxuICAgKiBpZiBhc3N1bWVSb2xlRmxhZyBpcyBzdHJpbmcgd2lsbCBhbHdheXMgcmV0dXJuIGEgSm9iU3RlcCAoZm9yIG1hdHJpeCBzdHJhdGVneSlcbiAgICovXG4gIHB1YmxpYyBnZXRBc3N1bWVBd3NSb2xlU3RlcEZvckVudmlyb25tZW50KFxuICAgIGFzc3VtZVJvbGVGbGFnOiBib29sZWFuIHwgc3RyaW5nLFxuICAgIGFjY2Vzc0tleUlkU2VjcmV0TmFtZTogc3RyaW5nLFxuICAgIHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWU6IHN0cmluZyxcbiAgICByZWdpb246IHN0cmluZyxcbiAgICByb2xlVG9Bc3N1bWU6IHN0cmluZyxcbiAgICBhc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzPzogc3RyaW5nIHwgbnVtYmVyLFxuICApOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBmdW5jdGlvbiBnZXRDb25kaXRpb24oZmFjdG9yeTogRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkpIHtcbiAgICAgIGlmICh0eXBlb2YgYXNzdW1lUm9sZUZsYWcgPT09ICdib29sZWFuJykge1xuICAgICAgICBpZiAoIWFzc3VtZVJvbGVGbGFnKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgPyBza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbiA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWN0b3J5LnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/XG4gICAgICAgIGBcXCR7eyAke2Fzc3VtZVJvbGVGbGFnfSA9PSAndHJ1ZScgJiYgJHtza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbn0gfX1gIDpcbiAgICAgICAgYFxcJHt7ICR7YXNzdW1lUm9sZUZsYWd9ID09ICd0cnVlJyB9fWA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhc3N1bWVSb2xlRmxhZyA9PT0gJ2Jvb2xlYW4nICYmICFhc3N1bWVSb2xlRmxhZykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBjb25kaXRpb24gPSBnZXRDb25kaXRpb24odGhpcyk7XG5cbiAgICBjb25zdCBzZWNyZXRzUGFyYW1zID1cbiAgICAgIHRoaXMucHJvcHMuYXV0aFByb3ZpZGVyID09PSBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuQUNDRVNTX0FORF9TRUNSRVRfS0VZX1BBSVIgP1xuICAgICAgICB7XG4gICAgICAgICAgJ2F3cy1hY2Nlc3Mta2V5LWlkJzogYFxcJHt7IHNlY3JldHNbJHthY2Nlc3NLZXlJZFNlY3JldE5hbWV9XSB9fWAsXG4gICAgICAgICAgJ2F3cy1zZWNyZXQtYWNjZXNzLWtleSc6IGBcXCR7eyBzZWNyZXRzWyR7c2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZX1dIH19YCxcbiAgICAgICAgfSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgaWY6IGNvbmRpdGlvbixcbiAgICAgIG5hbWU6ICdBc3N1bWUgQVdTIFJvbGUnLFxuICAgICAgdXNlczogJ2F3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHNAdjQnLFxuICAgICAgd2l0aDoge1xuICAgICAgICAuLi5zZWNyZXRzUGFyYW1zLFxuICAgICAgICAncm9sZS10by1hc3N1bWUnOiByb2xlVG9Bc3N1bWUsXG4gICAgICAgICdhd3MtcmVnaW9uJzogcmVnaW9uLFxuICAgICAgICAncm9sZS1kdXJhdGlvbi1zZWNvbmRzJzogYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHNldHVwIE5QTSBjb25maWcgaWYgcHJvdmlkZWRcbiAgICogQHJldHVybnMgSm9iU3RlcCBvciB1bmRlZmluZWQgaWYgbm8gbnBtQ29uZmlnIGlzIHByb3ZpZGVkXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNldHVwTnBtQ29uZmlnRm9yTWF0cml4KCk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldFNldHVwTnBtQ29uZmlnRm9yRW52aXJvbm1lbnQoJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0nKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZXR1cE5wbUNvbmZpZ0ZvckVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB7IG5wbUNvbmZpZ0Vudmlyb25tZW50IH0gPSB0aGlzLnByb3BzO1xuICAgIGlmICghbnBtQ29uZmlnRW52aXJvbm1lbnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgPSAnQ09ORklHX1ZBTFVFJztcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5za2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbixcbiAgICAgIG5hbWU6ICdTZXR0aW5nIE5QTSBDb25maWcnLFxuICAgICAgZW52OiB7XG4gICAgICAgIFtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZV06IGVudmlyb25tZW50LFxuICAgICAgfSxcbiAgICAgIHJ1bjogYG5wbSBjb25maWcgc2V0ICR7bnBtQ29uZmlnRW52aXJvbm1lbnR9ICQke2Vudmlyb25tZW50VmFyaWFibGVOYW1lfWAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0ZXAgdG8gcnVuIGEgc3BlY2lmaWMgc2NyaXB0XG4gICAqIEBwYXJhbSBzY3JpcHROYW1lIFRoZSBuYW1lIG9mIHRoZSBzY3JpcHQgdG8gcnVuXG4gICAqIEBwYXJhbSBzdGVwTmFtZSBUaGUgbmFtZSBvZiB0aGUgc3RlcCBpbiB0aGUgd29ya2Zsb3dcbiAgICogQHBhcmFtIGhhc1NjcmlwdEZsYWcgV2hldGhlciB0aGUgc2NyaXB0IHNob3VsZCBiZSBydW5cbiAgICogQHJldHVybnMgVGhlIGpvYiBzdGVwIHRvIHJ1biB0aGUgc2NyaXB0IG9yIHVuZGVmaW5lZCBpZiBub3QgYXBwbGljYWJsZVxuICAgKiBJZiBoYXNTY3JpcHRGbGFnIGlzIGJvb2xlYW4gYW5kIGZhbHNlIHdpbGwgcmV0dXJuIHVuZGVmaW5lZFxuICAgKiBJZiBoYXNTY3JpcHRGbGFnIGlzIHN0cmluZyB3aWxsIGFsd2F5cyByZXR1cm4gYSBKb2JTdGVwIChmb3IgbWF0cml4IHN0cmF0ZWd5KVxuICAgKi9cbiAgcHVibGljIGdldFJ1blNjcmlwdFN0ZXAoXG4gICAgc2NyaXB0TmFtZTogc3RyaW5nLFxuICAgIHN0ZXBOYW1lOiBzdHJpbmcsXG4gICAgaGFzU2NyaXB0RmxhZzogYm9vbGVhbiB8IHN0cmluZyxcbiAgKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgZnVuY3Rpb24gZ2V0Q29uZGl0aW9uKGZhY3Rvcnk6IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5KSB7XG4gICAgICBpZiAodHlwZW9mIGhhc1NjcmlwdEZsYWcgPT09ICdib29sZWFuJykge1xuICAgICAgICBpZiAoIWhhc1NjcmlwdEZsYWcpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWN0b3J5LnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/IHNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID9cbiAgICAgICAgYFxcJHt7ICR7aGFzU2NyaXB0RmxhZ30gPT0gJ3RydWUnICYmICR7c2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb259IH19YCA6XG4gICAgICAgIGBcXCR7eyAke2hhc1NjcmlwdEZsYWd9ID09ICd0cnVlJyB9fWA7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaGFzU2NyaXB0RmxhZyA9PT0gJ2Jvb2xlYW4nICYmICFoYXNTY3JpcHRGbGFnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmRpdGlvbiA9IGdldENvbmRpdGlvbih0aGlzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZjogY29uZGl0aW9uLFxuICAgICAgbmFtZTogYFJ1biAke3N0ZXBOYW1lfWAsXG4gICAgICBydW46IGAke3RoaXMucHJvamVjdC5ydW5TY3JpcHRDb21tYW5kfSAke3NjcmlwdE5hbWV9YCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gZGVwbG95IHRoZSB3b3JrZmxvd1xuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlcGxveW1lbnRTdGVwKCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldFJ1blNjcmlwdFN0ZXAoXG4gICAgICAnZGVwbG95OndvcmtmbG93JyxcbiAgICAgICdEZXBsb3ltZW50JyxcbiAgICAgIHRydWUsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBydW4gcG9zdCBkZXBsb3ltZW50IHNjcmlwdCBpbiBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBwcmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCgpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcmVEZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgICAgJ21hdHJpeC5oYXNQcmVEZXBsb3lUYXNrJyxcbiAgICAgICcke3sgbWF0cml4LnByZURlcGxveW1lbnRTY3JpcHQgfX0nLFxuICAgICkhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHJlLWRlcGxveW1lbnQgc3RlcCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gaGFzUHJlRGVwbG95VGFza0ZsYWcgV2hldGhlciB0aGUgcHJlLWRlcGxveW1lbnQgdGFzayBzaG91bGQgYmUgcnVuXG4gICAqIEBwYXJhbSBwcmVEZXBsb3ltZW50U2NyaXB0IFRoZSBzY3JpcHQgdG8gcnVuXG4gICAqIEByZXR1cm5zIFRoZSBqb2Igc3RlcCB0byBydW4gdGhlIHByZS1kZXBsb3ltZW50IHNjcmlwdCBvciB1bmRlZmluZWQgaWYgbm90IGFwcGxpY2FibGVcbiAgICogSWYgaGFzUHJlRGVwbG95VGFza0ZsYWcgaXMgYm9vbGVhbiBhbmQgZmFsc2Ugd2lsbCByZXR1cm4gdW5kZWZpbmVkXG4gICAqIElmIGhhc1ByZURlcGxveVRhc2tGbGFnIGlzIHN0cmluZyB3aWxsIGFsd2F5cyByZXR1cm4gYSBKb2JTdGVwIChmb3IgbWF0cml4IHN0cmF0ZWd5KVxuICAgKi9cbiAgcHVibGljIGdldFByZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgaGFzUHJlRGVwbG95VGFza0ZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgcHJlRGVwbG95bWVudFNjcmlwdDogc3RyaW5nLFxuICApOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcblxuICAgIHJldHVybiB0aGlzLmdldFJ1blNjcmlwdFN0ZXAoXG4gICAgICBwcmVEZXBsb3ltZW50U2NyaXB0LFxuICAgICAgJ1ByZSBEZXBsb3ltZW50JyxcbiAgICAgIGhhc1ByZURlcGxveVRhc2tGbGFnLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBydW4gcG9zdCBkZXBsb3ltZW50IHNjcmlwdCBpbiBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBwb3N0RGVwbG95bWVudFN0ZXBGb3JNYXRyaXgoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UG9zdERlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgICAnbWF0cml4Lmhhc1Bvc3REZXBsb3lUYXNrJyxcbiAgICAgICcke3sgbWF0cml4LnBvc3REZXBsb3ltZW50U2NyaXB0IH19JyxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBvc3QtZGVwbG95bWVudCBzdGVwIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBoYXNQb3N0RGVwbG95VGFza0ZsYWcgV2hldGhlciB0aGUgcG9zdC1kZXBsb3ltZW50IHRhc2sgc2hvdWxkIGJlIHJ1blxuICAgKiBAcGFyYW0gcG9zdERlcGxveW1lbnRTY3JpcHQgVGhlIHNjcmlwdCB0byBydW5cbiAgICogQHJldHVybnMgVGhlIGpvYiBzdGVwIHRvIHJ1biB0aGUgcG9zdC1kZXBsb3ltZW50IHNjcmlwdCBvciB1bmRlZmluZWQgaWYgbm90IGFwcGxpY2FibGVcbiAgICogSWYgaGFzUG9zdERlcGxveVRhc2tGbGFnIGlzIGJvb2xlYW4gYW5kIGZhbHNlIHdpbGwgcmV0dXJuIHVuZGVmaW5lZFxuICAgKiBJZiBoYXNQb3N0RGVwbG95VGFza0ZsYWcgaXMgc3RyaW5nIHdpbGwgYWx3YXlzIHJldHVybiBhIEpvYlN0ZXAgKGZvciBtYXRyaXggc3RyYXRlZ3kpXG4gICAqL1xuICBwdWJsaWMgZ2V0UG9zdERlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgaGFzUG9zdERlcGxveVRhc2tGbGFnOiBib29sZWFuIHwgc3RyaW5nLFxuICAgIHBvc3REZXBsb3ltZW50U2NyaXB0OiBzdHJpbmcsXG4gICk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UnVuU2NyaXB0U3RlcChcbiAgICAgIHBvc3REZXBsb3ltZW50U2NyaXB0LFxuICAgICAgJ1Bvc3QgRGVwbG95bWVudCcsXG4gICAgICBoYXNQb3N0RGVwbG95VGFza0ZsYWcsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGRlcGxveW1lbnQgam9icyB3aGV0aGVyIGZvciBtYXRyaXggc3RyYXRlZ3kgb3Igbm90XG4gICAqIEByZXR1cm5zIFJlY29yZCBvZiBqb2JzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlcGxveW1lbnRKb2JzKCk6IFJlY29yZDxzdHJpbmcsIEpvYj4ge1xuXG4gICAgaWYgKHRoaXMucHJvcHMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnByb2plY3QubG9nZ2VyLndhcm4oJ1RoZSBwcm9qZWN0IGRvZXMgbm90IGhhdmUgYW55IGVudmlyb25tZW50IHNldCwgbWFrZSBzdXJlIHRoaXMgaXMgZGVzaXJlZCBzZXR0aW5nJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnByb3BzLmpvYlN0cmF0ZWd5ID09PSBEZXBsb3lKb2JTdHJhdGVneS5NQVRSSVggPyB0aGlzLmRlcGxveW1lbnRKb2JzRm9yTWF0cml4IDogdGhpcy5kZXBsb3ltZW50Sm9ic0Zvck11bHRpSm9iO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZXBsb3ltZW50IGpvYnMgZm9yIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBSZWNvcmQgb2Ygam9ic1xuICAgKi9cbiAgcHVibGljIGdldCBkZXBsb3ltZW50Sm9ic0Zvck1hdHJpeCgpOiBSZWNvcmQ8c3RyaW5nLCBKb2I+IHtcblxuICAgIGNvbnN0IHsgZW52aXJvbm1lbnRzLCBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSB9ID0gdGhpcy5wcm9wcy5kZXBsb3lPcHRpb25zO1xuXG4gICAgY29uc3QgaW5jbHVkZSA9IGVudmlyb25tZW50cy5tYXAoZW52aXJvbm1lbnRPcHRpb25zID0+IHtcbiAgICAgIGNvbnN0IHsgYXdzQ3JlZGVudGlhbHMgfSA9IGVudmlyb25tZW50T3B0aW9ucztcblxuICAgICAgY29uc3QgYXNzdW1lUm9sZSA9IGF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSA/ICd0cnVlJyA6ICdmYWxzZSc7XG5cbiAgICAgIGNvbnN0IGFzc3VtZVJvbGVTZXR0aW5ncyA9IGF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSA/IHtcbiAgICAgICAgcm9sZVRvQXNzdW1lOiBhd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUsXG4gICAgICAgIGFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHM6IGF3c0NyZWRlbnRpYWxzLmFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHMgfHwgOTAwLFxuICAgICAgfTogdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBhY2Nlc3NLZXlJZFNlY3JldE5hbWUgPSBhd3NDcmVkZW50aWFscy5hY2Nlc3NLZXlJZFNlY3JldE5hbWUgPz8gJ0FXU19BQ0NFU1NfS0VZX0lEJztcbiAgICAgIGNvbnN0IHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgPSBhd3NDcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lID8/ICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknO1xuXG4gICAgICBjb25zdCBoYXNQb3N0RGVwbG95VGFzayA9IGVudmlyb25tZW50T3B0aW9ucy5wb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgICAgY29uc3QgaGFzUHJlRGVwbG95VGFzayA9IGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCA/ICd0cnVlJyA6ICdmYWxzZSc7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudE9wdGlvbnMubmFtZSxcbiAgICAgICAgYWNjZXNzS2V5SWRTZWNyZXROYW1lLFxuICAgICAgICBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lLFxuICAgICAgICByZWdpb246IGF3c0NyZWRlbnRpYWxzLnJlZ2lvbixcbiAgICAgICAgYXNzdW1lUm9sZSxcbiAgICAgICAgaGFzUG9zdERlcGxveVRhc2ssXG4gICAgICAgIHBvc3REZXBsb3ltZW50U2NyaXB0OiBlbnZpcm9ubWVudE9wdGlvbnMucG9zdERlcGxveVdvcmtmbG93U2NyaXB0IHx8ICcnLFxuICAgICAgICBoYXNQcmVEZXBsb3lUYXNrLFxuICAgICAgICBwcmVEZXBsb3ltZW50U2NyaXB0OiBlbnZpcm9ubWVudE9wdGlvbnMucHJlRGVwbG95V29ya2Zsb3dTY3JpcHQgfHwgJycsXG4gICAgICAgIC4uLmFzc3VtZVJvbGVTZXR0aW5ncyxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBkZXBsb3lKb2JFbnYgPSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA/IHtcbiAgICAgIFtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZV06ICcke3sgbWF0cml4LmVudmlyb25tZW50IH19JyxcbiAgICB9IDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgam9iRGVmaW5pdGlvbjogSm9iID0ge1xuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIGNvbmN1cnJlbmN5OiB7XG4gICAgICAgICdncm91cCc6ICcke3sgbWF0cml4LmVudmlyb25tZW50IH19LWRlcGxveScsXG4gICAgICAgICdjYW5jZWwtaW4tcHJvZ3Jlc3MnOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBuZWVkczogW1xuICAgICAgICAncmVsZWFzZV9naXRodWInLFxuICAgICAgXSxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIGRlcGxveW1lbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIGlkVG9rZW46IHRoaXMucHJvcHMuYXV0aFByb3ZpZGVyID09PSBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuR0lUSFVCX09JREMgPyBKb2JQZXJtaXNzaW9uLldSSVRFIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIHN0cmF0ZWd5OiB7XG4gICAgICAgIG1heFBhcmFsbGVsOiAxLFxuICAgICAgICBtYXRyaXg6IHtcbiAgICAgICAgICBkb21haW46IHtcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBpbmNsdWRlLm1hcChlID0+IGUuZW52aXJvbm1lbnQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5jbHVkZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBuYW1lOiAnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fScsXG4gICAgICB9LFxuICAgICAgZW52OiBkZXBsb3lKb2JFbnYsXG4gICAgICBzdGVwczogW10sXG4gICAgfTtcblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLmNoZWNrb3V0U3RlcCk7XG5cbiAgICBjb25zdCBwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCA9IHRoaXMucHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXA7XG4gICAgaWYgKHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2gocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi4odGhpcy5wcm9qZWN0KS5yZW5kZXJXb3JrZmxvd1NldHVwKCkpO1xuXG4gICAgY29uc3QgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCA9IHRoaXMuY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeDtcbiAgICBpZiAoY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JNYXRyaXgpO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi50aGlzLnNldHVwQXdzQ3JlZGVudGlhbHNTdGVwc0Zvck1hdHJpeCk7XG5cbiAgICBjb25zdCBzZXR1cE5wbUNvbmZpZ1N0ZXAgPSB0aGlzLnNldHVwTnBtQ29uZmlnRm9yTWF0cml4O1xuICAgIGlmIChzZXR1cE5wbUNvbmZpZ1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChzZXR1cE5wbUNvbmZpZ1N0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLnByZURlcGxveW1lbnRTdGVwRm9yTWF0cml4KTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5kZXBsb3ltZW50U3RlcCk7XG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMucG9zdERlcGxveW1lbnRTdGVwRm9yTWF0cml4KTtcblxuICAgIHJldHVybiB7IGRlcGxveTogam9iRGVmaW5pdGlvbiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSURzIG9mIHRoZSBqb2JzIHRoYXQgbXVzdCBiZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgZW52aXJvbm1lbnQncyBkZXBsb3ltZW50IGpvYlxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudFxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBqb2IgSURzXG4gICAqL1xuICBwdWJsaWMgZ2V0RGVwbG95bWVudEpvYlByZXJlcXVpc2l0ZUpvYklkcyhlbnZpcm9ubWVudE5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbJ3JlbGVhc2VfZ2l0aHViJ107XG4gICAgaWYgKCF0aGlzLnByb3BzLmVudmlyb25tZW50RGVwZW5kZW5jaWVzKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMucHJvcHMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMuZmluZEluZGV4KGVudiA9PiBlbnYubmFtZSA9PT0gZW52aXJvbm1lbnROYW1lKTtcbiAgICAgIGNvbnN0IHByZXJlcXVpc2l0ZUVudmlyb25tZW50ID0gaW5kZXggPiAwID8gdGhpcy5wcm9wcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50c1tpbmRleCAtIDFdIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKHByZXJlcXVpc2l0ZUVudmlyb25tZW50KSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGdldERlcGxveUpvYklkKHByZXJlcXVpc2l0ZUVudmlyb25tZW50Lm5hbWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gdGhpcy5wcm9wcy5lbnZpcm9ubWVudERlcGVuZGVuY2llc1tlbnZpcm9ubWVudE5hbWVdO1xuICAgICAgaWYgKGRlcGVuZGVuY2llcykge1xuICAgICAgICBkZXBlbmRlbmNpZXMuZm9yRWFjaChkZXAgPT4ge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGdldERlcGxveUpvYklkKGRlcCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGVwbG95bWVudCBqb2JzIGZvciBtdWx0aS1qb2Igc3RyYXRlZ3lcbiAgICogQHJldHVybnMgUmVjb3JkIG9mIGpvYnNcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVwbG95bWVudEpvYnNGb3JNdWx0aUpvYigpOiBSZWNvcmQ8c3RyaW5nLCBKb2I+IHtcbiAgICBjb25zdCB7IGVudmlyb25tZW50VmFyaWFibGVOYW1lLCBlbnZpcm9ubWVudHMgfSA9IHRoaXMucHJvcHMuZGVwbG95T3B0aW9ucztcbiAgICBjb25zdCBqb2JzID0gZW52aXJvbm1lbnRzLm1hcCgoZW52aXJvbm1lbnRPcHRpb25zKTogW3N0cmluZywgSm9iXSA9PiB7XG4gICAgICByZXR1cm4gW2dldERlcGxveUpvYklkKGVudmlyb25tZW50T3B0aW9ucy5uYW1lKSwgdGhpcy5nZXRKb2JGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnMsIGVudmlyb25tZW50VmFyaWFibGVOYW1lKV07XG4gICAgfSk7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhqb2JzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGpvYiBkZWZpbml0aW9uIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudE9wdGlvbnMgVGhlIGVudmlyb25tZW50IG9wdGlvbnNcbiAgICogQHBhcmFtIGVudmlyb25tZW50VmFyaWFibGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBzZXQgd2l0aCB0aGUgZW52aXJvbm1lbnQgbmFtZSwgaWYgYW55XG4gICAqIEByZXR1cm5zIFRoZSBqb2IgZGVmaW5pdGlvbiBmb3IgdGhlIGVudmlyb25tZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0Sm9iRm9yRW52aXJvbm1lbnQoXG4gICAgZW52aXJvbm1lbnRPcHRpb25zOiBFbnZpcm9ubWVudE9wdGlvbnMsXG4gICAgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgKTogSm9iIHtcbiAgICBjb25zdCB7IG5hbWUgfSA9IGVudmlyb25tZW50T3B0aW9ucztcbiAgICBjb25zdCBkZXBsb3lKb2JFbnYgPSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA/IHtcbiAgICAgIFtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZV06IG5hbWUsXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGpvYkRlZmluaXRpb246IEpvYiA9IHtcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBjb25jdXJyZW5jeToge1xuICAgICAgICAnZ3JvdXAnOiBgJHtuYW1lfS1kZXBsb3lgLFxuICAgICAgICAnY2FuY2VsLWluLXByb2dyZXNzJzogZmFsc2UsXG4gICAgICB9LFxuICAgICAgbmVlZHM6IHRoaXMuZ2V0RGVwbG95bWVudEpvYlByZXJlcXVpc2l0ZUpvYklkcyhuYW1lKSxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIGRlcGxveW1lbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIGlkVG9rZW46IHRoaXMucHJvcHMuYXV0aFByb3ZpZGVyID09PSBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuR0lUSFVCX09JREMgPyBKb2JQZXJtaXNzaW9uLldSSVRFIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB9LFxuICAgICAgZW52OiBkZXBsb3lKb2JFbnYsXG4gICAgICBzdGVwczogW10sXG4gICAgfTtcblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLmNoZWNrb3V0U3RlcCk7XG5cbiAgICBjb25zdCBwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCA9IHRoaXMucHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXA7XG4gICAgaWYgKHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2gocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi4odGhpcy5wcm9qZWN0KS5yZW5kZXJXb3JrZmxvd1NldHVwKCkpO1xuXG4gICAgY29uc3QgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcCA9IHRoaXMuZ2V0Q2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KG5hbWUpO1xuICAgIGlmIChjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKC4uLnRoaXMuZ2V0U2V0dXBBd3NDcmVkZW50aWFsc1N0ZXBzRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnRPcHRpb25zKSk7XG5cbiAgICBjb25zdCBzZXR1cE5wbUNvbmZpZ1N0ZXAgPSB0aGlzLmdldFNldHVwTnBtQ29uZmlnRm9yRW52aXJvbm1lbnQobmFtZSk7XG4gICAgaWYgKHNldHVwTnBtQ29uZmlnU3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHNldHVwTnBtQ29uZmlnU3RlcCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJlRGVwbG95bWVudFN0ZXAgPSB0aGlzLmdldFByZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMucHJlRGVwbG95V29ya2Zsb3dTY3JpcHQgPyB0cnVlIDogZmFsc2UsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMucHJlRGVwbG95V29ya2Zsb3dTY3JpcHQgfHwgJycsXG4gICAgKTtcbiAgICBpZiAocHJlRGVwbG95bWVudFN0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChwcmVEZXBsb3ltZW50U3RlcCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMuZGVwbG95bWVudFN0ZXApO1xuXG4gICAgY29uc3QgcG9zdERlcGxveW1lbnRTdGVwID0gdGhpcy5nZXRQb3N0RGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgPyB0cnVlIDogZmFsc2UsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMucG9zdERlcGxveVdvcmtmbG93U2NyaXB0IHx8ICcnLFxuICAgICk7XG4gICAgaWYgKHBvc3REZXBsb3ltZW50U3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHBvc3REZXBsb3ltZW50U3RlcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGpvYkRlZmluaXRpb247XG4gIH1cblxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVwbG95IGpvYiBJRCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICogQHBhcmFtIGVudmlyb25tZW50TmFtZSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnRcbiAqIEByZXR1cm5zIFRoZSBkZXBsb3kgam9iIElEXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXBsb3lKb2JJZChlbnZpcm9ubWVudE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgRGVwbG95LSR7ZW52aXJvbm1lbnROYW1lfWA7XG59XG4iXX0=
package/package.json CHANGED
@@ -40,7 +40,7 @@
40
40
  "@stylistic/eslint-plugin": "^2",
41
41
  "@types/fs-extra": "^11.0.4",
42
42
  "@types/jest": "^29.5.14",
43
- "@types/node": "^18",
43
+ "@types/node": "^20",
44
44
  "@types/semver": "^7.7.1",
45
45
  "@typescript-eslint/eslint-plugin": "^8",
46
46
  "@typescript-eslint/parser": "^8",
@@ -52,11 +52,11 @@
52
52
  "fs-extra": "^11.3.2",
53
53
  "jest": "^29.7.0",
54
54
  "jest-junit": "^16",
55
- "jsii": "5.8.x",
55
+ "jsii": "5.9.x",
56
56
  "jsii-diff": "^1.116.0",
57
57
  "jsii-docgen": "^10.5.0",
58
58
  "jsii-pacmak": "^1.116.0",
59
- "jsii-rosetta": "5.8.x",
59
+ "jsii-rosetta": "5.9.x",
60
60
  "projen": "^0.98.1",
61
61
  "ts-jest": "^29.4.5",
62
62
  "ts-node": "^10.9.2",
@@ -80,12 +80,15 @@
80
80
  "Typescript",
81
81
  "projen"
82
82
  ],
83
+ "engines": {
84
+ "node": ">= 20.0.0"
85
+ },
83
86
  "main": "lib/index.js",
84
87
  "license": "Apache-2.0",
85
88
  "publishConfig": {
86
89
  "access": "public"
87
90
  },
88
- "version": "0.1.682",
91
+ "version": "0.1.684",
89
92
  "jest": {
90
93
  "coverageProvider": "v8",
91
94
  "testMatch": [