@pipeline-builder/pipeline-core 3.4.118 → 3.4.119

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.
@@ -52,6 +52,10 @@ const DEFAULT_TEAM_FEATURES = defaultFeatures('team', ['RBAC & team roles']);
52
52
  const DEFAULT_ENTERPRISE_FEATURES = defaultFeatures('enterprise', [
53
53
  'RBAC & team roles', 'Reporting dashboard',
54
54
  ]);
55
+ // Unlimited includes every feature (TIER_FEATURES.unlimited = all).
56
+ const DEFAULT_UNLIMITED_FEATURES = defaultFeatures('unlimited', [
57
+ 'Unlimited everything', 'RBAC & team roles', 'Reporting dashboard',
58
+ ]);
55
59
  /**
56
60
  * Parse a price (in cents) from an env var, falling back to the default when
57
61
  * unset OR malformed. A NaN (e.g. `BILLING_PLAN_PRO_MONTHLY=abc`) must never
@@ -147,6 +151,25 @@ export function loadBillingConfig() {
147
151
  isDefault: false,
148
152
  sortOrder: 3,
149
153
  },
154
+ // The billing-DISABLED default plan: everything uncapped, all features, free.
155
+ // Seeded so the tier→plan mapping resolves, but never offered for sale — the
156
+ // read-plans route filters it out (see createReadPlanRoutes), so it's hidden
157
+ // whenever billing is enabled (the only time /plans is served).
158
+ unlimited: {
159
+ id: 'unlimited',
160
+ name: process.env.BILLING_PLAN_UNLIMITED_NAME || 'Unlimited',
161
+ description: process.env.BILLING_PLAN_UNLIMITED_DESCRIPTION
162
+ || 'Everything uncapped — the default when billing is disabled',
163
+ tier: 'unlimited',
164
+ prices: {
165
+ monthly: envCents(process.env.BILLING_PLAN_UNLIMITED_MONTHLY, 0),
166
+ annual: envCents(process.env.BILLING_PLAN_UNLIMITED_ANNUAL, 0),
167
+ },
168
+ features: parseFeatures(process.env.BILLING_PLAN_UNLIMITED_FEATURES, DEFAULT_UNLIMITED_FEATURES),
169
+ isActive: true,
170
+ isDefault: false,
171
+ sortOrder: 4,
172
+ },
150
173
  };
151
174
  // Derive the array consumers read (`config.plans`) in canonical tier order.
152
175
  const plans = VALID_TIERS.map((tier) => planByTier[tier]);
@@ -298,4 +321,4 @@ function loadBundles() {
298
321
  b('team_usage_analytics', 'Team Usage Analytics', 'Per-team usage breakdown across the org → team subtree (all quota dimensions)', {}, 3000, ['pro', 'team'], 9, { features: ['team_usage_analytics'], stackable: false }),
299
322
  ];
300
323
  }
301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGluZy1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2JpbGxpbmctY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBd0MsTUFBTSw0QkFBNEIsQ0FBQztBQU8xSixnRkFBZ0Y7QUFDaEYsOEVBQThFO0FBQzlFLGtEQUFrRDtBQUNsRCxrRkFBa0Y7QUFDbEYsaURBQWlEO0FBQ2pELHdFQUF3RTtBQUN4RSwyRUFBMkU7QUFDM0UsNkVBQTZFO0FBQzdFLCtFQUErRTtBQUMvRSxpRkFBaUY7QUFDakYsNEVBQTRFO0FBRTVFLHdGQUF3RjtBQUN4RixTQUFTLFNBQVMsQ0FBQyxLQUFhLEVBQUUsUUFBZ0IsRUFBRSxNQUFjO0lBQ2hFLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztRQUFFLE9BQU8sYUFBYSxNQUFNLEVBQUUsQ0FBQztJQUMvQyxPQUFPLFNBQVMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3JGLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxJQUFlLEVBQUUsS0FBZTtJQUN2RCxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ25DLE9BQU87UUFDTCxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO1FBQ25DLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUM7UUFDekMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUs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LEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDaEksOEVBQThFO1FBQzlFLDRFQUE0RTtRQUM1RSx3RUFBd0U7UUFDeEUsMkVBQTJFO1FBQzNFLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSwyQkFBMkIsRUFBRSxxSEFBcUgsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUM5USxzRUFBc0U7UUFDdEUsK0VBQStFO1FBQy9FLDhFQUE4RTtRQUM5RSwwRkFBMEY7UUFDMUYsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLCtFQUErRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsc0JBQXNCLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7S0FDM04sQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBMb2FkIGJpbGxpbmcgcGxhbiBjb25maWd1cmF0aW9uIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqIFBlci1wbGFuIHByaWNlcyBhcmUgdGhlIG1vc3QgbGlrZWx5IHRvIHZhcnkgYmV0d2VlbiBlbnZpcm9ubWVudHM6XG4gKiAgIEJJTExJTkdfUExBTl97VElFUn1fTU9OVEhMWSAvIEJJTExJTkdfUExBTl97VElFUn1fQU5OVUFMICAoaW4gY2VudHMpXG4gKlxuICogT3B0aW9uYWwgb3ZlcnJpZGVzIGZvciBkZXNjcmlwdGlvbnMgYW5kIGZlYXR1cmVzOlxuICogICBCSUxMSU5HX1BMQU5fe1RJRVJ9X05BTUUgICAgICAgICAgKHBsYWluIHN0cmluZywgZGlzcGxheSBuYW1lKVxuICogICBCSUxMSU5HX1BMQU5fe1RJRVJ9X0RFU0NSSVBUSU9OICAgKHBsYWluIHN0cmluZylcbiAqICAgQklMTElOR19QTEFOX3tUSUVSfV9GRUFUVVJFUyAgICAgIChKU09OIHN0cmluZyBhcnJheSlcbiAqXG4gKiBBbGwgZGVmYXVsdHMgbWF0Y2ggdGhlIG9yaWdpbmFsIGhhcmRjb2RlZCBzZWVkIGRhdGEgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKi9cbmltcG9ydCB7IFFVT1RBX1RJRVJTLCBUSUVSX0ZFQVRVUkVTLCBGRUFUVVJFX01FVEFEQVRBLCBWQUxJRF9USUVSUywgaXNWYWxpZFRpZXIsIHR5cGUgUXVvdGFUaWVyLCB0eXBlIFF1b3RhVGllckxpbWl0cyB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgQmlsbGluZ0NvbmZpZywgQmlsbGluZ1BsYW5Db25maWcsIEJ1bmRsZUNvbmZpZywgQ29tYm9EaXNjb3VudENvbmZpZyB9IGZyb20gJy4vY29uZmlnLXR5cGVzLmpzJztcblxuLyoqIFBlci11bml0IHF1b3RhIGRlbHRhcyBmb3IgYSBidW5kbGUg4oCUIGtleXMgY29uc3RyYWluZWQgdG8gcmVhbCBxdW90YSBmaWVsZHNcbiAqICAobWF0Y2hlcyBgQnVuZGxlQ29uZmlnLmdyYW50c2ApLCBzbyBhIHR5cG8nZCBkaW1lbnNpb24gZmFpbHMgdG8gY29tcGlsZS4gKi9cbnR5cGUgR3JhbnRNYXAgPSBQYXJ0aWFsPFJlY29yZDxrZXlvZiBRdW90YVRpZXJMaW1pdHMsIG51bWJlcj4+O1xuXG4vLyAtLSBEZWZhdWx0IGZlYXR1cmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhlIG1hcmtldGVkIGZlYXR1cmUgbGlzdCBpcyBidWlsdCBmcm9tIHR3byBkZXJpdmVkIHNvdXJjZXMgc28gaXQgY2FuIG5ldmVyXG4vLyBkcmlmdCBmcm9tIHdoYXQgdGhlIHBsYXRmb3JtIGFjdHVhbGx5IGVuZm9yY2VzOlxuLy8gICAxLiBMSU1JVCBsaW5lcyBkZXJpdmVkIGZyb20gZWFjaCB0aWVyJ3MgRUZGRUNUSVZFIHF1b3RhIGxpbWl0cyAoUVVPVEFfVElFUlMpLFxuLy8gICAgICBzbyB0aGV5IHRyYWNrIFFVT1RBX1RJRVJfKiBlbnYgb3ZlcnJpZGVzLlxuLy8gICAyLiBJTkNMVURFRC1GRUFUVVJFIGxpbmVzIGRlcml2ZWQgZnJvbSB0aGUgZW5mb3JjZWQgZW50aXRsZW1lbnQgc2V0XG4vLyAgICAgIChUSUVSX0ZFQVRVUkVTKSB2aWEgRkVBVFVSRV9NRVRBREFUQSBsYWJlbHMg4oCUIHNvIGFuIGFkdmVydGlzZWQgYmFzZVxuLy8gICAgICBmZWF0dXJlIGlzIGFsd2F5cyBvbmUgYHJlcXVpcmVGZWF0dXJlYCBhY3R1YWxseSBncmFudHMgZm9yIHRoYXQgdGllci5cbi8vIE9ubHkgZ2VudWluZWx5IG5vbi1nYXRlZCBtYXJrZXRpbmcgY29weSAoc3VwcG9ydCBsZXZlbCwgZGFzaGJvYXJkcywgUkJBQykgaXNcbi8vIGhhbmQtYXV0aG9yZWQsIHBhc3NlZCBhcyBgcGVya3NgLiBQdXJjaGFzYWJsZSBhZGQtb25zIChzc28sIGF1ZGl0X2xvZykgYXJlIE5PVFxuLy8gbGlzdGVkIGFzIGJhc2UgcGVya3MgaGVyZSDigJQgdGhleSBhcmUgc29sZCBhcyBidW5kbGVzIChzZWUgbG9hZEJ1bmRsZXMoKSkuXG5cbi8qKiBcIlVwIHRvIE4gcGx1Z2luc1wiIC8gXCJVbmxpbWl0ZWQgcGx1Z2luc1wiIGZyb20gYW4gZWZmZWN0aXZlIGxpbWl0ICgtMSA9IHVubGltaXRlZCkuICovXG5mdW5jdGlvbiBsaW1pdExpbmUobGltaXQ6IG51bWJlciwgc2luZ3VsYXI6IHN0cmluZywgcGx1cmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAobGltaXQgPT09IC0xKSByZXR1cm4gYFVubGltaXRlZCAke3BsdXJhbH1gO1xuICByZXR1cm4gYFVwIHRvICR7bGltaXQudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJyl9ICR7bGltaXQgPT09IDEgPyBzaW5ndWxhciA6IHBsdXJhbH1gO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0RmVhdHVyZXModGllcjogUXVvdGFUaWVyLCBwZXJrczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGwgPSBRVU9UQV9USUVSU1t0aWVyXS5saW1pdHM7XG4gIHJldHVybiBbXG4gICAgbGltaXRMaW5lKGwuc2VhdHMsICdzZWF0JywgJ3NlYXRzJyksXG4gICAgbGltaXRMaW5lKGwucGx1Z2lucywgJ3BsdWdpbicsICdwbHVnaW5zJyksXG4gICAgbGltaXRMaW5lKGwucGlwZWxpbmVzLCAncGlwZWxpbmUnLCAncGlwZWxpbmVzJyksXG4gICAgbGltaXRMaW5lKGwuYXBpQ2FsbHMsICdBUEkgY2FsbCcsICdBUEkgY2FsbHMnKSxcbiAgICBsaW1pdExpbmUobC5haUNhbGxzLCAnQUkgY2FsbCcsICdBSSBjYWxscycpLFxuICAgIC8vIEVuZm9yY2VkIGVudGl0bGVtZW50cyDihpIgY3VzdG9tZXItZmFjaW5nIGxhYmVscyAoc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCkuXG4gICAgLi4uVElFUl9GRUFUVVJFU1t0aWVyXS5tYXAoKGYpID0+IEZFQVRVUkVfTUVUQURBVEFbZl0ubGFiZWwpLFxuICAgIC4uLnBlcmtzLFxuICBdO1xufVxuXG4vLyBOb3RlOiBgcGVya3NgIGFyZSBub24tZ2F0ZWQgbWFya2V0aW5nIGxpbmVzIG9ubHkuIEVuZm9yY2VkIGZlYXR1cmVzIChpbmNsLlxuLy8gUHJpb3JpdHkgU3VwcG9ydCBmb3IgcHJvL3RlYW0vZW50ZXJwcmlzZSkgY29tZSBmcm9tIFRJRVJfRkVBVFVSRVMgYWJvdmUuXG5jb25zdCBERUZBVUxUX0RFVkVMT1BFUl9GRUFUVVJFUyA9IGRlZmF1bHRGZWF0dXJlcygnZGV2ZWxvcGVyJywgWydDb21tdW5pdHkgc3VwcG9ydCddKTtcbmNvbnN0IERFRkFVTFRfUFJPX0ZFQVRVUkVTID0gZGVmYXVsdEZlYXR1cmVzKCdwcm8nLCBbJ1JlcG9ydGluZyBkYXNoYm9hcmQnXSk7XG5jb25zdCBERUZBVUxUX1RFQU1fRkVBVFVSRVMgPSBkZWZhdWx0RmVhdHVyZXMoJ3RlYW0nLCBbJ1JCQUMgJiB0ZWFtIHJvbGVzJ10pO1xuY29uc3QgREVGQVVMVF9FTlRFUlBSSVNFX0ZFQVRVUkVTID0gZGVmYXVsdEZlYXR1cmVzKCdlbnRlcnByaXNlJywgW1xuICAnUkJBQyAmIHRlYW0gcm9sZXMnLCAnUmVwb3J0aW5nIGRhc2hib2FyZCcsXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBhIHByaWNlIChpbiBjZW50cykgZnJvbSBhbiBlbnYgdmFyLCBmYWxsaW5nIGJhY2sgdG8gdGhlIGRlZmF1bHQgd2hlblxuICogdW5zZXQgT1IgbWFsZm9ybWVkLiBBIE5hTiAoZS5nLiBgQklMTElOR19QTEFOX1BST19NT05USExZPWFiY2ApIG11c3QgbmV2ZXJcbiAqIGZsb3cgaW50byB0aGUgcmV0dXJuZWQgY29uZmlnIGFzIGEgcHJpY2UuXG4gKi9cbmZ1bmN0aW9uIGVudkNlbnRzKGVudlZhcjogc3RyaW5nIHwgdW5kZWZpbmVkLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKGVudlZhciA9PT0gdW5kZWZpbmVkIHx8IGVudlZhciA9PT0gJycpIHJldHVybiBmYWxsYmFjaztcbiAgY29uc3QgbiA9IHBhcnNlSW50KGVudlZhciwgMTApO1xuICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gZmFsbGJhY2sgOiBuO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgSlNPTiBhcnJheSBmcm9tIGFuIGVudiB2YXIsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LlxuICovXG5mdW5jdGlvbiBwYXJzZUZlYXR1cmVzKGVudlZhcjogc3RyaW5nIHwgdW5kZWZpbmVkLCBmYWxsYmFjazogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGlmICghZW52VmFyKSByZXR1cm4gZmFsbGJhY2s7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShlbnZWYXIpO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBhcnNlZCkgPyBwYXJzZWQgOiBmYWxsYmFjaztcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbGxiYWNrO1xuICB9XG59XG5cbi8qKlxuICogTG9hZCBiaWxsaW5nIHBsYW4gY29uZmlndXJhdGlvbiBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRCaWxsaW5nQ29uZmlnKCk6IEJpbGxpbmdDb25maWcge1xuICAvLyBLZXllZCBieSBRdW90YVRpZXIgc28gdGhlIGNvbXBpbGVyIGZvcmNlcyBhIHBsYW4gZm9yIEVWRVJZIHRpZXIg4oCUIGFkZGluZyBhXG4gIC8vIDV0aCBRdW90YVRpZXIgd2l0aG91dCBhIHBsYW4gaGVyZSBpcyBub3cgYSBjb21waWxlIGVycm9yICh3YXMgYSBoYW5kLWtlcHRcbiAgLy8gNC1lbGVtZW50IGFycmF5IHRoYXQgc2lsZW50bHkgc2hpcHBlZCBubyBwbGFuL3ByaWNlIGZvciBhIG5ldyB0aWVyKS4gVGhlXG4gIC8vIHB1YmxpYyBgY29uZmlnLnBsYW5zYCBzaGFwZSBzdGF5cyBhbiBhcnJheSwgZGVyaXZlZCBiZWxvdyBpbiBWQUxJRF9USUVSU1xuICAvLyBvcmRlciAoZGV2ZWxvcGVyLCBwcm8sIHRlYW0sIGVudGVycHJpc2UpIHRvIHByZXNlcnZlIGNvbnN1bWVyIG9yZGVyaW5nLlxuICBjb25zdCBwbGFuQnlUaWVyOiBSZWNvcmQ8UXVvdGFUaWVyLCBCaWxsaW5nUGxhbkNvbmZpZz4gPSB7XG4gICAgZGV2ZWxvcGVyOiB7XG4gICAgICBpZDogJ2RldmVsb3BlcicsXG4gICAgICBuYW1lOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fREVWRUxPUEVSX05BTUUgfHwgJ0RldmVsb3BlcicsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0RFVkVMT1BFUl9ERVNDUklQVElPTlxuICAgICAgICB8fCAnRnJlZSBzdGFydGVyIHRpZXIgZm9yIGluZGl2aWR1YWwgZGV2ZWxvcGVycycsXG4gICAgICB0aWVyOiAnZGV2ZWxvcGVyJyxcbiAgICAgIHByaWNlczoge1xuICAgICAgICBtb250aGx5OiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fREVWRUxPUEVSX01PTlRITFksIDApLFxuICAgICAgICBhbm51YWw6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9ERVZFTE9QRVJfQU5OVUFMLCAwKSxcbiAgICAgIH0sXG4gICAgICBmZWF0dXJlczogcGFyc2VGZWF0dXJlcyhcbiAgICAgICAgcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0RFVkVMT1BFUl9GRUFUVVJFUyxcbiAgICAgICAgREVGQVVMVF9ERVZFTE9QRVJfRkVBVFVSRVMsXG4gICAgICApLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBpc0RlZmF1bHQ6IHRydWUsXG4gICAgICBzb3J0T3JkZXI6IDAsXG4gICAgfSxcbiAgICBwcm86IHtcbiAgICAgIGlkOiAncHJvJyxcbiAgICAgIG5hbWU6IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9QUk9fTkFNRSB8fCAnUHJvJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fUFJPX0RFU0NSSVBUSU9OXG4gICAgICAgIHx8ICdGb3IgaW5kaXZpZHVhbCBwb3dlciB1c2VycyBhbmQgcHJvZHVjdGlvbiB3b3JrbG9hZHMnLFxuICAgICAgdGllcjogJ3BybycsXG4gICAgICBwcmljZXM6IHtcbiAgICAgICAgbW9udGhseTogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1BST19NT05USExZLCA0OTAwKSxcbiAgICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fUFJPX0FOTlVBTCwgNDkwMDApLFxuICAgICAgfSxcbiAgICAgIGZlYXR1cmVzOiBwYXJzZUZlYXR1cmVzKFxuICAgICAgICBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fUFJPX0ZFQVRVUkVTLFxuICAgICAgICBERUZBVUxUX1BST19GRUFUVVJFUyxcbiAgICAgICksXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGlzRGVmYXVsdDogZmFsc2UsXG4gICAgICBzb3J0T3JkZXI6IDEsXG4gICAgfSxcbiAgICB0ZWFtOiB7XG4gICAgICBpZDogJ3RlYW0nLFxuICAgICAgbmFtZTogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1RFQU1fTkFNRSB8fCAnVGVhbScsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1RFQU1fREVTQ1JJUFRJT05cbiAgICAgICAgfHwgJ0ZvciB0ZWFtcyBjb2xsYWJvcmF0aW5nIG9uIHNoYXJlZCBwaXBlbGluZXMnLFxuICAgICAgdGllcjogJ3RlYW0nLFxuICAgICAgcHJpY2VzOiB7XG4gICAgICAgIG1vbnRobHk6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9URUFNX01PTlRITFksIDE0OTAwKSxcbiAgICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVEVBTV9BTk5VQUwsIDE0OTAwMCksXG4gICAgICB9LFxuICAgICAgZmVhdHVyZXM6IHBhcnNlRmVhdHVyZXMoXG4gICAgICAgIHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9URUFNX0ZFQVRVUkVTLFxuICAgICAgICBERUZBVUxUX1RFQU1fRkVBVFVSRVMsXG4gICAgICApLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBpc0RlZmF1bHQ6IGZhbHNlLFxuICAgICAgc29ydE9yZGVyOiAyLFxuICAgIH0sXG4gICAgZW50ZXJwcmlzZToge1xuICAgICAgaWQ6ICdlbnRlcnByaXNlJyxcbiAgICAgIG5hbWU6IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9FTlRFUlBSSVNFX05BTUUgfHwgJ0VudGVycHJpc2UnLFxuICAgICAgZGVzY3JpcHRpb246IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9FTlRFUlBSSVNFX0RFU0NSSVBUSU9OXG4gICAgICAgIHx8ICdPcmctd2lkZSBzY2FsZSB3aXRoIHVubGltaXRlZCBzZWF0cyBhbmQgcHJpb3JpdHkgc3VwcG9ydCcsXG4gICAgICB0aWVyOiAnZW50ZXJwcmlzZScsXG4gICAgICBwcmljZXM6IHtcbiAgICAgICAgbW9udGhseTogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0VOVEVSUFJJU0VfTU9OVEhMWSwgMzk5MDApLFxuICAgICAgICBhbm51YWw6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9FTlRFUlBSSVNFX0FOTlVBTCwgMzk5MDAwKSxcbiAgICAgIH0sXG4gICAgICBmZWF0dXJlczogcGFyc2VGZWF0dXJlcyhcbiAgICAgICAgcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0VOVEVSUFJJU0VfRkVBVFVSRVMsXG4gICAgICAgIERFRkFVTFRfRU5URVJQUklTRV9GRUFUVVJFUyxcbiAgICAgICksXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGlzRGVmYXVsdDogZmFsc2UsXG4gICAgICBzb3J0T3JkZXI6IDMsXG4gICAgfSxcbiAgfTtcblxuICAvLyBEZXJpdmUgdGhlIGFycmF5IGNvbnN1bWVycyByZWFkIChgY29uZmlnLnBsYW5zYCkgaW4gY2Fub25pY2FsIHRpZXIgb3JkZXIuXG4gIGNvbnN0IHBsYW5zOiBCaWxsaW5nUGxhbkNvbmZpZ1tdID0gVkFMSURfVElFUlMubWFwKCh0aWVyKSA9PiBwbGFuQnlUaWVyW3RpZXJdKTtcblxuICByZXR1cm4geyBwbGFucywgYnVuZGxlczogbG9hZEJ1bmRsZXMoKSwgY29tYm9EaXNjb3VudHM6IGxvYWRDb21ib0Rpc2NvdW50cygpIH07XG59XG5cbi8qKlxuICogQ29tYm8gZGlzY291bnRzIChkb2NzL2JpbGxpbmctYnVuZGxlcy5tZCDCp0NvbWJvIHByaWNpbmcpLiBXaGVuIGFuIGFjY291bnQgb3duc1xuICogZXZlcnkgbWVtYmVyIGJ1bmRsZSAoZWFjaCBhdCDiiaUgaXRzIG1pbmltdW0gcXVhbnRpdHkpLCB0aGUgc2V0IGlzIGJpbGxlZCBhdCB0aGVcbiAqIGNvbWJpbmVkIHByaWNlIGluc3RlYWQgb2YgdGhlIHN1bSBvZiB0aGUgbWVtYmVycyDigJQgcmVhbGl6ZWQgYXMgYSByZWN1cnJpbmcgdXNhZ2VcbiAqIGNyZWRpdCBmb3IgdGhlIGRpZmZlcmVuY2UuIE92ZXJsYXBwaW5nIGNvbWJvcyBhcmUgcmVzb2x2ZWQgYnkgbWF4LXdlaWdodCBwYWNraW5nXG4gKiAoYSBzaGFyZWQgYWRkLW9uIGlzIG5ldmVyIGRpc2NvdW50ZWQgdHdpY2UpOyBgc29ydE9yZGVyYCBicmVha3MgZXF1YWwtdG90YWwgdGllcy5cbiAqXG4gKiBEZWZhdWx0czpcbiAqICAtIFwiQW5hbHl0aWNzIFN1aXRlXCIg4oCUIEFkdmFuY2VkIFJlcG9ydGluZyAoRE9SQSkgKyBUZWFtIFVzYWdlIEFuYWx5dGljcywgZWFjaFxuICogICAgJDMwL21vLCB0b2dldGhlciAkNDAvbW8gKCQ0MDAveXIpIOKGkiBhICQyMC9tbyBjcmVkaXQuXG4gKiAgLSBcIlRlYW0gR3Jvd3RoIEJ1bmRsZVwiIOKAlCDiiaUxIFNlYXQgUGFjayAoJDI1KSArIFRlYW0gVXNhZ2UgQW5hbHl0aWNzICgkMzApLFxuICogICAgdG9nZXRoZXIgJDM1L21vICgkMzUwL3lyKSDihpIgYSAkMjAvbW8gY3JlZGl0LlxuICogUHJpY2VzIGVudi1vdmVycmlkYWJsZSB2aWEgYEJJTExJTkdfQ09NQk9fPElEPl9NT05USExZYCAvIGBfQU5OVUFMYC5cbiAqL1xuZnVuY3Rpb24gbG9hZENvbWJvRGlzY291bnRzKCk6IENvbWJvRGlzY291bnRDb25maWdbXSB7XG4gIGNvbnN0IGMgPSAoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgYnVuZGxlSWRzOiBzdHJpbmdbXSxcbiAgICBtb250aGx5OiBudW1iZXIsXG4gICAgYW5udWFsOiBudW1iZXIsXG4gICAgc29ydE9yZGVyOiBudW1iZXIsXG4gICAgbWluUXVhbnRpdGllcz86IFJlY29yZDxzdHJpbmcsIG51bWJlcj4sXG4gICk6IENvbWJvRGlzY291bnRDb25maWcgPT4gKHtcbiAgICBpZCxcbiAgICBuYW1lLFxuICAgIGJ1bmRsZUlkcyxcbiAgICAuLi4obWluUXVhbnRpdGllcyA/IHsgbWluUXVhbnRpdGllcyB9IDoge30pLFxuICAgIHByaWNlczoge1xuICAgICAgbW9udGhseTogZW52Q2VudHMocHJvY2Vzcy5lbnZbYEJJTExJTkdfQ09NQk9fJHtpZC50b1VwcGVyQ2FzZSgpfV9NT05USExZYF0sIG1vbnRobHkpLFxuICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudltgQklMTElOR19DT01CT18ke2lkLnRvVXBwZXJDYXNlKCl9X0FOTlVBTGBdLCBhbm51YWwpLFxuICAgIH0sXG4gICAgc29ydE9yZGVyLFxuICAgIGlzQWN0aXZlOiB0cnVlLFxuICB9KTtcblxuICBjb25zdCBjb21ib3MgPSBbXG4gICAgYygnYW5hbHl0aWNzX3N1aXRlJywgJ0FuYWx5dGljcyBTdWl0ZScsIFsnYWR2YW5jZWRfcmVwb3J0aW5nJywgJ3RlYW1fdXNhZ2VfYW5hbHl0aWNzJ10sIDQwMDAsIDQwMDAwLCAwKSxcbiAgICBjKCd0ZWFtX2dyb3d0aCcsICdUZWFtIEdyb3d0aCBCdW5kbGUnLCBbJ3NlYXRfcGFjaycsICd0ZWFtX3VzYWdlX2FuYWx5dGljcyddLCAzNTAwLCAzNTAwMCwgMSwgeyBzZWF0X3BhY2s6IDEgfSksXG4gIF07XG4gIHdhcm5Pbk5vbkRpc2NvdW50Q29tYm9zKGNvbWJvcyk7XG4gIHJldHVybiBjb21ib3M7XG59XG5cbi8qKlxuICogR3VhcmRyYWlsOiBhIGNvbWJvIHdob3NlIGNvbWJpbmVkIHByaWNlIGlzIOKJpSBpdHMgbWluaW11bS1jb21wb3NpdGlvbiBiYXNrZXQgZ3JhbnRzXG4gKiBubyBjcmVkaXQgKHRoZSBjcmVkaXQgY2xhbXBzIHRvICQwKSBhbmQgaXMgc2lsZW50bHkgaW5lcnQuIFdhcm4gbG91ZGx5IGluc3RlYWQgc28gYVxuICogbWlzY29uZmlndXJlZCBgQklMTElOR19DT01CT18qYCBvdmVycmlkZSBpcyBjYXVnaHQuIE5vbi1mYXRhbC5cbiAqL1xuZnVuY3Rpb24gd2Fybk9uTm9uRGlzY291bnRDb21ib3MoY29tYm9zOiBDb21ib0Rpc2NvdW50Q29uZmlnW10pOiB2b2lkIHtcbiAgLy8gQ29tYm8gbWVtYmVycyBhcmUgYWx3YXlzIGJ1bmRsZXM7IHJlc29sdmUgdGhlaXIgKGVudi1lZmZlY3RpdmUpIHVuaXQgcHJpY2VzIG9uY2UuXG4gIGNvbnN0IGJ5SWQgPSBuZXcgTWFwKGxvYWRCdW5kbGVzKCkubWFwKChiKSA9PiBbYi5pZCwgYl0pKTtcbiAgZm9yIChjb25zdCBjb21ibyBvZiBjb21ib3MpIHtcbiAgICBmb3IgKGNvbnN0IGludGVydmFsIG9mIFsnbW9udGhseScsICdhbm51YWwnXSBhcyBjb25zdCkge1xuICAgICAgY29uc3QgYmFza2V0ID0gY29tYm8uYnVuZGxlSWRzLnJlZHVjZSgocywgaWQpID0+IHMgKyAoYnlJZC5nZXQoaWQpPy5wcmljZXNbaW50ZXJ2YWxdID8/IDApICogKGNvbWJvLm1pblF1YW50aXRpZXM/LltpZF0gPz8gMSksIDApO1xuICAgICAgaWYgKGNvbWJvLnByaWNlc1tpbnRlcnZhbF0gPj0gYmFza2V0KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihgW2JpbGxpbmctY29uZmlnXSBDb21ibyBcIiR7Y29tYm8uaWR9XCIgJHtpbnRlcnZhbH0gcHJpY2UgJHtjb21iby5wcmljZXNbaW50ZXJ2YWxdfSDiiaUgbWVtYmVyIGJhc2tldCAke2Jhc2tldH07IGl0IGdyYW50cyBubyBkaXNjb3VudC5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgQlVORExFX0dCID0gMTAyNCAqIDEwMjQgKiAxMDI0O1xuXG4vKipcbiAqIEFwcGx5IGEgcGVyLWJ1bmRsZSBncmFudCBvdmVycmlkZS4gRWFjaCBzdGFja2FibGUgcGFjayBncmFudHMgZXhhY3RseSBvbmVcbiAqIHF1b3RhIGRpbWVuc2lvbiwgc28gYEJJTExJTkdfQlVORExFXzxJRD5fR1JBTlRgIHJldHVuZXMgdGhhdCBhbW91bnQgKGUuZy4gbWFrZVxuICogdGhlIFNlYXQgUGFjayBncmFudCArMTAgaW5zdGVhZCBvZiArNSkg4oCUIHBhcmFsbGVsIHRvIHRoZSBwcmljZSBvdmVycmlkZXMuXG4gKiBJZ25vcmVkIGZvciBtdWx0aS1kaW1lbnNpb24gb3IgZmVhdHVyZS1vbmx5IChlbXB0eS1ncmFudCkgYnVuZGxlcywgYW5kIGZvciBhXG4gKiBtYWxmb3JtZWQvbmVnYXRpdmUgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5R3JhbnRPdmVycmlkZShpZDogc3RyaW5nLCBncmFudHM6IEdyYW50TWFwKTogR3JhbnRNYXAge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltgQklMTElOR19CVU5ETEVfJHtpZC50b1VwcGVyQ2FzZSgpfV9HUkFOVGBdO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZ3JhbnRzKTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdyA9PT0gJycgfHwga2V5cy5sZW5ndGggIT09IDEpIHJldHVybiBncmFudHM7XG4gIGNvbnN0IG4gPSBwYXJzZUludChyYXcsIDEwKTtcbiAgaWYgKE51bWJlci5pc05hTihuKSB8fCBuIDwgMCkgcmV0dXJuIGdyYW50cztcbiAgLy8gYGtleXNgIGNhbWUgZnJvbSBhIEdyYW50TWFwLCBzbyBpdHMgc29sZSBrZXkgaXMgYSBRdW90YVRpZXJMaW1pdHMgZmllbGQuXG4gIHJldHVybiB7IFtrZXlzWzBdIGFzIGtleW9mIFF1b3RhVGllckxpbWl0c106IG4gfTtcbn1cblxuLyoqXG4gKiBBcHBseSBhIHBlci1idW5kbGUgdGllci1hdmFpbGFiaWxpdHkgb3ZlcnJpZGUuIGBCSUxMSU5HX0JVTkRMRV88SUQ+X1RJRVJTYCBpcyBhXG4gKiBKU09OIGFycmF5IG9mIHRpZXIgSURzIHRoYXQgbWF5IHB1cmNoYXNlIHRoZSBidW5kbGUgKGUuZy4gYFtcImRldmVsb3BlclwiLFwicHJvXCJdYClcbiAqIOKAlCBwYXJhbGxlbCB0byB0aGUgcHJpY2UvZ3JhbnQgb3ZlcnJpZGVzLiBGYWxscyBiYWNrIHRvIGBkZWZhdWx0VGllcnNgIHdoZW5cbiAqIHVuc2V0LCBtYWxmb3JtZWQsIGVtcHR5LCBvciBjb250YWluaW5nIGFuIHVua25vd24gdGllci5cbiAqL1xuZnVuY3Rpb24gYXBwbHlUaWVyc092ZXJyaWRlKGlkOiBzdHJpbmcsIGRlZmF1bHRUaWVyczogUXVvdGFUaWVyW10pOiBRdW90YVRpZXJbXSB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52W2BCSUxMSU5HX0JVTkRMRV8ke2lkLnRvVXBwZXJDYXNlKCl9X1RJRVJTYF07XG4gIGlmICghcmF3KSByZXR1cm4gZGVmYXVsdFRpZXJzO1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyc2VkKSB8fCBwYXJzZWQubGVuZ3RoID09PSAwKSByZXR1cm4gZGVmYXVsdFRpZXJzO1xuICAgIGNvbnN0IHZhbGlkID0gcGFyc2VkLmZpbHRlcigodCk6IHQgaXMgUXVvdGFUaWVyID0+IHR5cGVvZiB0ID09PSAnc3RyaW5nJyAmJiBpc1ZhbGlkVGllcih0KSk7XG4gICAgcmV0dXJuIHZhbGlkLmxlbmd0aCA9PT0gcGFyc2VkLmxlbmd0aCA/IHZhbGlkIDogZGVmYXVsdFRpZXJzO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFRpZXJzO1xuICB9XG59XG5cbi8qKlxuICogUHVyY2hhc2FibGUgYWRkLW9uIGJ1bmRsZXMgKGRvY3MvYmlsbGluZy1idW5kbGVzLm1kIMKnMykuIEdyYW50cyBhcmUgcGVyLXVuaXRcbiAqIGRlbHRhcyBvbiBRdW90YVRpZXJMaW1pdHM7IHByaWNlcyAoY2VudHMsIGBCSUxMSU5HX0JVTkRMRV88SUQ+X01PTlRITFlgIC9cbiAqIGBfQU5OVUFMYCksIHRoZSBzaW5nbGUtZGltZW5zaW9uIGdyYW50IGFtb3VudCAoYEJJTExJTkdfQlVORExFXzxJRD5fR1JBTlRgKSxcbiAqIGFuZCB0aGUgcHVyY2hhc2FibGUtdGllciBsaXN0IChgQklMTElOR19CVU5ETEVfPElEPl9USUVSU2ApIGFyZSBhbGxcbiAqIGVudi1vdmVycmlkYWJsZS4gQW5udWFsIOKJiCAxMMOXIG1vbnRobHkuXG4gKi9cbmZ1bmN0aW9uIGxvYWRCdW5kbGVzKCk6IEJ1bmRsZUNvbmZpZ1tdIHtcbiAgY29uc3QgYiA9IChcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICAgIGdyYW50czogR3JhbnRNYXAsXG4gICAgbW9udGhseTogbnVtYmVyLFxuICAgIGF2YWlsYWJsZUZvclRpZXJzOiBRdW90YVRpZXJbXSxcbiAgICBzb3J0T3JkZXI6IG51bWJlcixcbiAgICBleHRyYTogeyBmZWF0dXJlcz86IHN0cmluZ1tdOyBzdGFja2FibGU/OiBib29sZWFuIH0gPSB7fSxcbiAgKTogQnVuZGxlQ29uZmlnID0+IHtcbiAgICAvLyBSZXNvbHZlIG1vbnRobHkgZmlyc3Qgc28gdGhlIGFubnVhbCBmYWxsYmFjayB0cmFja3MgYSBgX01PTlRITFlgIG92ZXJyaWRlXG4gICAgLy8gKGFubnVhbCDiiYggMTDDlyB0aGUgKmVmZmVjdGl2ZSogbW9udGhseSwgbm90IHRoZSBoYXJkY29kZWQgZGVmYXVsdCkuXG4gICAgY29uc3QgcmVzb2x2ZWRNb250aGx5ID0gZW52Q2VudHMocHJvY2Vzcy5lbnZbYEJJTExJTkdfQlVORExFXyR7aWQudG9VcHBlckNhc2UoKX1fTU9OVEhMWWBdLCBtb250aGx5KTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQsXG4gICAgICBuYW1lLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBncmFudHM6IGFwcGx5R3JhbnRPdmVycmlkZShpZCwgZ3JhbnRzKSxcbiAgICAgIC4uLihleHRyYS5mZWF0dXJlcyA/IHsgZmVhdHVyZXM6IGV4dHJhLmZlYXR1cmVzIH0gOiB7fSksXG4gICAgICBwcmljZXM6IHtcbiAgICAgICAgbW9udGhseTogcmVzb2x2ZWRNb250aGx5LFxuICAgICAgICBhbm51YWw6IGVudkNlbnRzKHByb2Nlc3MuZW52W2BCSUxMSU5HX0JVTkRMRV8ke2lkLnRvVXBwZXJDYXNlKCl9X0FOTlVBTGBdLCByZXNvbHZlZE1vbnRobHkgKiAxMCksXG4gICAgICB9LFxuICAgICAgc3RhY2thYmxlOiBleHRyYS5zdGFja2FibGUgPz8gdHJ1ZSxcbiAgICAgIGF2YWlsYWJsZUZvclRpZXJzOiBhcHBseVRpZXJzT3ZlcnJpZGUoaWQsIGF2YWlsYWJsZUZvclRpZXJzKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgc29ydE9yZGVyLFxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgQUxMOiBRdW90YVRpZXJbXSA9IFsnZGV2ZWxvcGVyJywgJ3BybycsICd0ZWFtJywgJ2VudGVycHJpc2UnXTtcbiAgcmV0dXJuIFtcbiAgICAvLyBDYXBhY2l0eSBwYWNrcyAoc2VhdHMvcGlwZWxpbmVzL3BsdWdpbnMpIGFyZSBhdmFpbGFibGUgb24gRVZFUlkgdGllciBzbyBhbnlcbiAgICAvLyBhY2NvdW50IOKAlCBpbmNsdWRpbmcgZnJlZSAoZGV2ZWxvcGVyKSDigJQgY2FuIGV4cGFuZCBpbiBwbGFjZS4gRmVhdHVyZSBidW5kbGVzXG4gICAgLy8gKGF1ZGl0X2xvZy9zc28pIGFuZCByYXRlIHBhY2tzIHN0YXkgdGllci1zY29wZWQgYnkgZGVmYXVsdC5cbiAgICBiKCdzZWF0X3BhY2snLCAnU2VhdCBQYWNrICgrNSknLCAnNSBhZGRpdGlvbmFsIG1lbWJlciBzZWF0cycsIHsgc2VhdHM6IDUgfSwgMjUwMCwgQUxMLCAwKSxcbiAgICBiKCdwaXBlbGluZV9wYWNrJywgJ1BpcGVsaW5lIFBhY2sgKCsxMCknLCAnMTAgYWRkaXRpb25hbCBwaXBlbGluZXMnLCB7IHBpcGVsaW5lczogMTAgfSwgMTUwMCwgQUxMLCAxKSxcbiAgICBiKCdwbHVnaW5fcGFjaycsICdQbHVnaW4gUGFjayAoKzEwMCknLCAnMTAwIGFkZGl0aW9uYWwgcGx1Z2lucycsIHsgcGx1Z2luczogMTAwIH0sIDE1MDAsIEFMTCwgMiksXG4gICAgYignYXBpX3BhY2snLCAnQVBJIFBhY2sgKCsxTSknLCAnMSwwMDAsMDAwIGFkZGl0aW9uYWwgQVBJIGNhbGxzIC8gcGVyaW9kJywgeyBhcGlDYWxsczogMV8wMDBfMDAwIH0sIDIwMDAsIEFMTCwgMyksXG4gICAgYignYWlfcGFjaycsICdBSSBQYWNrICgrNWspJywgJzUsMDAwIGFkZGl0aW9uYWwgQUkgY2FsbHMgLyBwZXJpb2QnLCB7IGFpQ2FsbHM6IDUwMDAgfSwgNzUwMCwgQUxMLCA0KSxcbiAgICBiKCdzdG9yYWdlX3BhY2snLCAnU3RvcmFnZSBQYWNrICgrNTAgR0IpJywgJzUwIEdCIGFkZGl0aW9uYWwgcmVnaXN0cnkgc3RvcmFnZScsIHsgc3RvcmFnZUJ5dGVzOiA1MCAqIEJVTkRMRV9HQiB9LCAyNTAwLCBBTEwsIDUpLFxuICAgIGIoJ2F1ZGl0X2xvZycsICdBdWRpdCBMb2cnLCAnQXVkaXQgbG9nIGNhcGFiaWxpdHknLCB7fSwgMjAwMCwgWydwcm8nXSwgNiwgeyBmZWF0dXJlczogWydhdWRpdF9sb2cnXSwgc3RhY2thYmxlOiBmYWxzZSB9KSxcbiAgICAvLyBTU08gaXMgSU5DTFVERUQgaW4gVGVhbSAoc2VlIFRJRVJfRkVBVFVSRVMudGVhbSksIHNvIHRoZSBhZGQtb24gaXMgUHJvLW9ubHkuXG4gICAgYignc3NvJywgJ1NTTyAvIElkUCcsICdTU08gKyB1cCB0byA1IElkUCBjb25maWdzJywgeyBpZHBDb25maWdzOiA1IH0sIDQwMDAsIFsncHJvJ10sIDcsIHsgZmVhdHVyZXM6IFsnc3NvJ10sIHN0YWNrYWJsZTogZmFsc2UgfSksXG4gICAgLy8gRE9SQSAvIGFkdmFuY2VkIGRlbGl2ZXJ5IGFuYWx5dGljcy4gSU5DTFVERUQgaW4gRW50ZXJwcmlzZSAoVElFUl9GRUFUVVJFUyksXG4gICAgLy8gc28gdGhlIGFkZC1vbiBpcyBvZmZlcmVkIHRvIGV2ZXJ5IG90aGVyIHRpZXIgKGRldmVsb3Blci9wcm8vdGVhbSkuIFByaWNlZFxuICAgIC8vIGJldHdlZW4gQXVkaXQgTG9nICgkMjApIGFuZCBTU08gKCQ0MCkg4oCUIGEgaGlnaGVyLXZhbHVlLCBhY3RpdmVseS11c2VkXG4gICAgLy8gYW5hbHl0aWNzIHN1cmZhY2UgdGhhbiB0aGUgYXVkaXQgbG9nLCBidXQgYmVsb3cgdGhlIFNTTyBlbnRlcnByaXNlIGdhdGUuXG4gICAgYignYWR2YW5jZWRfcmVwb3J0aW5nJywgJ0FkdmFuY2VkIFJlcG9ydGluZyAoRE9SQSknLCAnRE9SQSBkZWxpdmVyeSBtZXRyaWNzIOKAlCBkZXBsb3ltZW50IGZyZXF1ZW5jeSwgY2hhbmdlIGZhaWx1cmUgcmF0ZSwgTVRUUiwgbGVhZC10aW1lIHByb3h5LCBwZXJmb3JtYW5jZSBiYW5kcyArIHRyZW5kJywge30sIDMwMDAsIFsnZGV2ZWxvcGVyJywgJ3BybycsICd0ZWFtJ10sIDgsIHsgZmVhdHVyZXM6IFsnYWR2YW5jZWRfcmVwb3J0aW5nJ10sIHN0YWNrYWJsZTogZmFsc2UgfSksXG4gICAgLy8gUGVyLXRlYW0gdXNhZ2UgYnJlYWtkb3duIGFjcm9zcyB0aGUgb3JnIOKGkiB0ZWFtIHN1YnRyZWUuIElOQ0xVREVEIGluXG4gICAgLy8gRW50ZXJwcmlzZSAoVElFUl9GRUFUVVJFUyk7IHRoZSBhZGQtb24gaXMgb2ZmZXJlZCB0byBQcm8vVGVhbSAoZGV2ZWxvcGVyIGhhc1xuICAgIC8vIG5vIHRlYW1zIHRvIGJyZWFrIGRvd24pLiBQcmljZWQgYXQgJDMwL21vICgkMzAwL3lyKSDigJQgcGFyaXR5IHdpdGggRE9SQSwgaXRzXG4gICAgLy8gYW5hbHl0aWNzIHNpYmxpbmcuIE92ZXJyaWRhYmxlIHZpYSBCSUxMSU5HX0JVTkRMRV9URUFNX1VTQUdFX0FOQUxZVElDU19NT05USExZL19BTk5VQUwuXG4gICAgYigndGVhbV91c2FnZV9hbmFseXRpY3MnLCAnVGVhbSBVc2FnZSBBbmFseXRpY3MnLCAnUGVyLXRlYW0gdXNhZ2UgYnJlYWtkb3duIGFjcm9zcyB0aGUgb3JnIOKGkiB0ZWFtIHN1YnRyZWUgKGFsbCBxdW90YSBkaW1lbnNpb25zKScsIHt9LCAzMDAwLCBbJ3BybycsICd0ZWFtJ10sIDksIHsgZmVhdHVyZXM6IFsndGVhbV91c2FnZV9hbmFseXRpY3MnXSwgc3RhY2thYmxlOiBmYWxzZSB9KSxcbiAgXTtcbn1cbiJdfQ==
324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGluZy1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2JpbGxpbmctY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBd0MsTUFBTSw0QkFBNEIsQ0FBQztBQU8xSixnRkFBZ0Y7QUFDaEYsOEVBQThFO0FBQzlFLGtEQUFrRDtBQUNsRCxrRkFBa0Y7QUFDbEYsaURBQWlEO0FBQ2pELHdFQUF3RTtBQUN4RSwyRUFBMkU7QUFDM0UsNkVBQTZFO0FBQzdFLCtFQUErRTtBQUMvRSxpRkFBaUY7QUFDakYsNEVBQTRFO0FBRTVFLHdGQUF3RjtBQUN4RixTQUFTLFNBQVMsQ0FBQyxLQUFhLEVBQUUsUUFBZ0IsRUFBRSxNQUFjO0lBQ2hFLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztRQUFFLE9BQU8sYUFBYSxNQUFNLEVBQUUsQ0FBQztJQUMvQyxPQUFPLFNBQVMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3JGLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxJQUFlLEVBQUUsS0FBZTtJQUN2RCxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ25DLE9BQU87UUFDTCxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO1FBQ25DLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUM7UUFDekMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUs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QUErRTtRQUMvRSw4RUFBOEU7UUFDOUUsMEZBQTBGO1FBQzFGLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSwrRUFBK0UsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO0tBQzNOLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogTG9hZCBiaWxsaW5nIHBsYW4gY29uZmlndXJhdGlvbiBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqXG4gKiBQZXItcGxhbiBwcmljZXMgYXJlIHRoZSBtb3N0IGxpa2VseSB0byB2YXJ5IGJldHdlZW4gZW52aXJvbm1lbnRzOlxuICogICBCSUxMSU5HX1BMQU5fe1RJRVJ9X01PTlRITFkgLyBCSUxMSU5HX1BMQU5fe1RJRVJ9X0FOTlVBTCAgKGluIGNlbnRzKVxuICpcbiAqIE9wdGlvbmFsIG92ZXJyaWRlcyBmb3IgZGVzY3JpcHRpb25zIGFuZCBmZWF0dXJlczpcbiAqICAgQklMTElOR19QTEFOX3tUSUVSfV9OQU1FICAgICAgICAgIChwbGFpbiBzdHJpbmcsIGRpc3BsYXkgbmFtZSlcbiAqICAgQklMTElOR19QTEFOX3tUSUVSfV9ERVNDUklQVElPTiAgIChwbGFpbiBzdHJpbmcpXG4gKiAgIEJJTExJTkdfUExBTl97VElFUn1fRkVBVFVSRVMgICAgICAoSlNPTiBzdHJpbmcgYXJyYXkpXG4gKlxuICogQWxsIGRlZmF1bHRzIG1hdGNoIHRoZSBvcmlnaW5hbCBoYXJkY29kZWQgc2VlZCBkYXRhIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICovXG5pbXBvcnQgeyBRVU9UQV9USUVSUywgVElFUl9GRUFUVVJFUywgRkVBVFVSRV9NRVRBREFUQSwgVkFMSURfVElFUlMsIGlzVmFsaWRUaWVyLCB0eXBlIFF1b3RhVGllciwgdHlwZSBRdW90YVRpZXJMaW1pdHMgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IEJpbGxpbmdDb25maWcsIEJpbGxpbmdQbGFuQ29uZmlnLCBCdW5kbGVDb25maWcsIENvbWJvRGlzY291bnRDb25maWcgfSBmcm9tICcuL2NvbmZpZy10eXBlcy5qcyc7XG5cbi8qKiBQZXItdW5pdCBxdW90YSBkZWx0YXMgZm9yIGEgYnVuZGxlIOKAlCBrZXlzIGNvbnN0cmFpbmVkIHRvIHJlYWwgcXVvdGEgZmllbGRzXG4gKiAgKG1hdGNoZXMgYEJ1bmRsZUNvbmZpZy5ncmFudHNgKSwgc28gYSB0eXBvJ2QgZGltZW5zaW9uIGZhaWxzIHRvIGNvbXBpbGUuICovXG50eXBlIEdyYW50TWFwID0gUGFydGlhbDxSZWNvcmQ8a2V5b2YgUXVvdGFUaWVyTGltaXRzLCBudW1iZXI+PjtcblxuLy8gLS0gRGVmYXVsdCBmZWF0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoZSBtYXJrZXRlZCBmZWF0dXJlIGxpc3QgaXMgYnVpbHQgZnJvbSB0d28gZGVyaXZlZCBzb3VyY2VzIHNvIGl0IGNhbiBuZXZlclxuLy8gZHJpZnQgZnJvbSB3aGF0IHRoZSBwbGF0Zm9ybSBhY3R1YWxseSBlbmZvcmNlczpcbi8vICAgMS4gTElNSVQgbGluZXMgZGVyaXZlZCBmcm9tIGVhY2ggdGllcidzIEVGRkVDVElWRSBxdW90YSBsaW1pdHMgKFFVT1RBX1RJRVJTKSxcbi8vICAgICAgc28gdGhleSB0cmFjayBRVU9UQV9USUVSXyogZW52IG92ZXJyaWRlcy5cbi8vICAgMi4gSU5DTFVERUQtRkVBVFVSRSBsaW5lcyBkZXJpdmVkIGZyb20gdGhlIGVuZm9yY2VkIGVudGl0bGVtZW50IHNldFxuLy8gICAgICAoVElFUl9GRUFUVVJFUykgdmlhIEZFQVRVUkVfTUVUQURBVEEgbGFiZWxzIOKAlCBzbyBhbiBhZHZlcnRpc2VkIGJhc2Vcbi8vICAgICAgZmVhdHVyZSBpcyBhbHdheXMgb25lIGByZXF1aXJlRmVhdHVyZWAgYWN0dWFsbHkgZ3JhbnRzIGZvciB0aGF0IHRpZXIuXG4vLyBPbmx5IGdlbnVpbmVseSBub24tZ2F0ZWQgbWFya2V0aW5nIGNvcHkgKHN1cHBvcnQgbGV2ZWwsIGRhc2hib2FyZHMsIFJCQUMpIGlzXG4vLyBoYW5kLWF1dGhvcmVkLCBwYXNzZWQgYXMgYHBlcmtzYC4gUHVyY2hhc2FibGUgYWRkLW9ucyAoc3NvLCBhdWRpdF9sb2cpIGFyZSBOT1Rcbi8vIGxpc3RlZCBhcyBiYXNlIHBlcmtzIGhlcmUg4oCUIHRoZXkgYXJlIHNvbGQgYXMgYnVuZGxlcyAoc2VlIGxvYWRCdW5kbGVzKCkpLlxuXG4vKiogXCJVcCB0byBOIHBsdWdpbnNcIiAvIFwiVW5saW1pdGVkIHBsdWdpbnNcIiBmcm9tIGFuIGVmZmVjdGl2ZSBsaW1pdCAoLTEgPSB1bmxpbWl0ZWQpLiAqL1xuZnVuY3Rpb24gbGltaXRMaW5lKGxpbWl0OiBudW1iZXIsIHNpbmd1bGFyOiBzdHJpbmcsIHBsdXJhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGxpbWl0ID09PSAtMSkgcmV0dXJuIGBVbmxpbWl0ZWQgJHtwbHVyYWx9YDtcbiAgcmV0dXJuIGBVcCB0byAke2xpbWl0LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycpfSAke2xpbWl0ID09PSAxID8gc2luZ3VsYXIgOiBwbHVyYWx9YDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZlYXR1cmVzKHRpZXI6IFF1b3RhVGllciwgcGVya3M6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBjb25zdCBsID0gUVVPVEFfVElFUlNbdGllcl0ubGltaXRzO1xuICByZXR1cm4gW1xuICAgIGxpbWl0TGluZShsLnNlYXRzLCAnc2VhdCcsICdzZWF0cycpLFxuICAgIGxpbWl0TGluZShsLnBsdWdpbnMsICdwbHVnaW4nLCAncGx1Z2lucycpLFxuICAgIGxpbWl0TGluZShsLnBpcGVsaW5lcywgJ3BpcGVsaW5lJywgJ3BpcGVsaW5lcycpLFxuICAgIGxpbWl0TGluZShsLmFwaUNhbGxzLCAnQVBJIGNhbGwnLCAnQVBJIGNhbGxzJyksXG4gICAgbGltaXRMaW5lKGwuYWlDYWxscywgJ0FJIGNhbGwnLCAnQUkgY2FsbHMnKSxcbiAgICAvLyBFbmZvcmNlZCBlbnRpdGxlbWVudHMg4oaSIGN1c3RvbWVyLWZhY2luZyBsYWJlbHMgKHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGgpLlxuICAgIC4uLlRJRVJfRkVBVFVSRVNbdGllcl0ubWFwKChmKSA9PiBGRUFUVVJFX01FVEFEQVRBW2ZdLmxhYmVsKSxcbiAgICAuLi5wZXJrcyxcbiAgXTtcbn1cblxuLy8gTm90ZTogYHBlcmtzYCBhcmUgbm9uLWdhdGVkIG1hcmtldGluZyBsaW5lcyBvbmx5LiBFbmZvcmNlZCBmZWF0dXJlcyAoaW5jbC5cbi8vIFByaW9yaXR5IFN1cHBvcnQgZm9yIHByby90ZWFtL2VudGVycHJpc2UpIGNvbWUgZnJvbSBUSUVSX0ZFQVRVUkVTIGFib3ZlLlxuY29uc3QgREVGQVVMVF9ERVZFTE9QRVJfRkVBVFVSRVMgPSBkZWZhdWx0RmVhdHVyZXMoJ2RldmVsb3BlcicsIFsnQ29tbXVuaXR5IHN1cHBvcnQnXSk7XG5jb25zdCBERUZBVUxUX1BST19GRUFUVVJFUyA9IGRlZmF1bHRGZWF0dXJlcygncHJvJywgWydSZXBvcnRpbmcgZGFzaGJvYXJkJ10pO1xuY29uc3QgREVGQVVMVF9URUFNX0ZFQVRVUkVTID0gZGVmYXVsdEZlYXR1cmVzKCd0ZWFtJywgWydSQkFDICYgdGVhbSByb2xlcyddKTtcbmNvbnN0IERFRkFVTFRfRU5URVJQUklTRV9GRUFUVVJFUyA9IGRlZmF1bHRGZWF0dXJlcygnZW50ZXJwcmlzZScsIFtcbiAgJ1JCQUMgJiB0ZWFtIHJvbGVzJywgJ1JlcG9ydGluZyBkYXNoYm9hcmQnLFxuXSk7XG4vLyBVbmxpbWl0ZWQgaW5jbHVkZXMgZXZlcnkgZmVhdHVyZSAoVElFUl9GRUFUVVJFUy51bmxpbWl0ZWQgPSBhbGwpLlxuY29uc3QgREVGQVVMVF9VTkxJTUlURURfRkVBVFVSRVMgPSBkZWZhdWx0RmVhdHVyZXMoJ3VubGltaXRlZCcsIFtcbiAgJ1VubGltaXRlZCBldmVyeXRoaW5nJywgJ1JCQUMgJiB0ZWFtIHJvbGVzJywgJ1JlcG9ydGluZyBkYXNoYm9hcmQnLFxuXSk7XG5cbi8qKlxuICogUGFyc2UgYSBwcmljZSAoaW4gY2VudHMpIGZyb20gYW4gZW52IHZhciwgZmFsbGluZyBiYWNrIHRvIHRoZSBkZWZhdWx0IHdoZW5cbiAqIHVuc2V0IE9SIG1hbGZvcm1lZC4gQSBOYU4gKGUuZy4gYEJJTExJTkdfUExBTl9QUk9fTU9OVEhMWT1hYmNgKSBtdXN0IG5ldmVyXG4gKiBmbG93IGludG8gdGhlIHJldHVybmVkIGNvbmZpZyBhcyBhIHByaWNlLlxuICovXG5mdW5jdGlvbiBlbnZDZW50cyhlbnZWYXI6IHN0cmluZyB8IHVuZGVmaW5lZCwgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChlbnZWYXIgPT09IHVuZGVmaW5lZCB8fCBlbnZWYXIgPT09ICcnKSByZXR1cm4gZmFsbGJhY2s7XG4gIGNvbnN0IG4gPSBwYXJzZUludChlbnZWYXIsIDEwKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IGZhbGxiYWNrIDogbjtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIEpTT04gYXJyYXkgZnJvbSBhbiBlbnYgdmFyLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VGZWF0dXJlcyhlbnZWYXI6IHN0cmluZyB8IHVuZGVmaW5lZCwgZmFsbGJhY2s6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBpZiAoIWVudlZhcikgcmV0dXJuIGZhbGxiYWNrO1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoZW52VmFyKTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwYXJzZWQpID8gcGFyc2VkIDogZmFsbGJhY2s7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxufVxuXG4vKipcbiAqIExvYWQgYmlsbGluZyBwbGFuIGNvbmZpZ3VyYXRpb24gZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQmlsbGluZ0NvbmZpZygpOiBCaWxsaW5nQ29uZmlnIHtcbiAgLy8gS2V5ZWQgYnkgUXVvdGFUaWVyIHNvIHRoZSBjb21waWxlciBmb3JjZXMgYSBwbGFuIGZvciBFVkVSWSB0aWVyIOKAlCBhZGRpbmcgYVxuICAvLyA1dGggUXVvdGFUaWVyIHdpdGhvdXQgYSBwbGFuIGhlcmUgaXMgbm93IGEgY29tcGlsZSBlcnJvciAod2FzIGEgaGFuZC1rZXB0XG4gIC8vIDQtZWxlbWVudCBhcnJheSB0aGF0IHNpbGVudGx5IHNoaXBwZWQgbm8gcGxhbi9wcmljZSBmb3IgYSBuZXcgdGllcikuIFRoZVxuICAvLyBwdWJsaWMgYGNvbmZpZy5wbGFuc2Agc2hhcGUgc3RheXMgYW4gYXJyYXksIGRlcml2ZWQgYmVsb3cgaW4gVkFMSURfVElFUlNcbiAgLy8gb3JkZXIgKGRldmVsb3BlciwgcHJvLCB0ZWFtLCBlbnRlcnByaXNlKSB0byBwcmVzZXJ2ZSBjb25zdW1lciBvcmRlcmluZy5cbiAgY29uc3QgcGxhbkJ5VGllcjogUmVjb3JkPFF1b3RhVGllciwgQmlsbGluZ1BsYW5Db25maWc+ID0ge1xuICAgIGRldmVsb3Blcjoge1xuICAgICAgaWQ6ICdkZXZlbG9wZXInLFxuICAgICAgbmFtZTogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0RFVkVMT1BFUl9OQU1FIHx8ICdEZXZlbG9wZXInLFxuICAgICAgZGVzY3JpcHRpb246IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9ERVZFTE9QRVJfREVTQ1JJUFRJT05cbiAgICAgICAgfHwgJ0ZyZWUgc3RhcnRlciB0aWVyIGZvciBpbmRpdmlkdWFsIGRldmVsb3BlcnMnLFxuICAgICAgdGllcjogJ2RldmVsb3BlcicsXG4gICAgICBwcmljZXM6IHtcbiAgICAgICAgbW9udGhseTogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0RFVkVMT1BFUl9NT05USExZLCAwKSxcbiAgICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fREVWRUxPUEVSX0FOTlVBTCwgMCksXG4gICAgICB9LFxuICAgICAgZmVhdHVyZXM6IHBhcnNlRmVhdHVyZXMoXG4gICAgICAgIHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9ERVZFTE9QRVJfRkVBVFVSRVMsXG4gICAgICAgIERFRkFVTFRfREVWRUxPUEVSX0ZFQVRVUkVTLFxuICAgICAgKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgaXNEZWZhdWx0OiB0cnVlLFxuICAgICAgc29ydE9yZGVyOiAwLFxuICAgIH0sXG4gICAgcHJvOiB7XG4gICAgICBpZDogJ3BybycsXG4gICAgICBuYW1lOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fUFJPX05BTUUgfHwgJ1BybycsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1BST19ERVNDUklQVElPTlxuICAgICAgICB8fCAnRm9yIGluZGl2aWR1YWwgcG93ZXIgdXNlcnMgYW5kIHByb2R1Y3Rpb24gd29ya2xvYWRzJyxcbiAgICAgIHRpZXI6ICdwcm8nLFxuICAgICAgcHJpY2VzOiB7XG4gICAgICAgIG1vbnRobHk6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9QUk9fTU9OVEhMWSwgNDkwMCksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1BST19BTk5VQUwsIDQ5MDAwKSxcbiAgICAgIH0sXG4gICAgICBmZWF0dXJlczogcGFyc2VGZWF0dXJlcyhcbiAgICAgICAgcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1BST19GRUFUVVJFUyxcbiAgICAgICAgREVGQVVMVF9QUk9fRkVBVFVSRVMsXG4gICAgICApLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBpc0RlZmF1bHQ6IGZhbHNlLFxuICAgICAgc29ydE9yZGVyOiAxLFxuICAgIH0sXG4gICAgdGVhbToge1xuICAgICAgaWQ6ICd0ZWFtJyxcbiAgICAgIG5hbWU6IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9URUFNX05BTUUgfHwgJ1RlYW0nLFxuICAgICAgZGVzY3JpcHRpb246IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9URUFNX0RFU0NSSVBUSU9OXG4gICAgICAgIHx8ICdGb3IgdGVhbXMgY29sbGFib3JhdGluZyBvbiBzaGFyZWQgcGlwZWxpbmVzJyxcbiAgICAgIHRpZXI6ICd0ZWFtJyxcbiAgICAgIHByaWNlczoge1xuICAgICAgICBtb250aGx5OiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVEVBTV9NT05USExZLCAxNDkwMCksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1RFQU1fQU5OVUFMLCAxNDkwMDApLFxuICAgICAgfSxcbiAgICAgIGZlYXR1cmVzOiBwYXJzZUZlYXR1cmVzKFxuICAgICAgICBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVEVBTV9GRUFUVVJFUyxcbiAgICAgICAgREVGQVVMVF9URUFNX0ZFQVRVUkVTLFxuICAgICAgKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgaXNEZWZhdWx0OiBmYWxzZSxcbiAgICAgIHNvcnRPcmRlcjogMixcbiAgICB9LFxuICAgIGVudGVycHJpc2U6IHtcbiAgICAgIGlkOiAnZW50ZXJwcmlzZScsXG4gICAgICBuYW1lOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fRU5URVJQUklTRV9OQU1FIHx8ICdFbnRlcnByaXNlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fRU5URVJQUklTRV9ERVNDUklQVElPTlxuICAgICAgICB8fCAnT3JnLXdpZGUgc2NhbGUgd2l0aCB1bmxpbWl0ZWQgc2VhdHMgYW5kIHByaW9yaXR5IHN1cHBvcnQnLFxuICAgICAgdGllcjogJ2VudGVycHJpc2UnLFxuICAgICAgcHJpY2VzOiB7XG4gICAgICAgIG1vbnRobHk6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9FTlRFUlBSSVNFX01PTlRITFksIDM5OTAwKSxcbiAgICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fRU5URVJQUklTRV9BTk5VQUwsIDM5OTAwMCksXG4gICAgICB9LFxuICAgICAgZmVhdHVyZXM6IHBhcnNlRmVhdHVyZXMoXG4gICAgICAgIHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9FTlRFUlBSSVNFX0ZFQVRVUkVTLFxuICAgICAgICBERUZBVUxUX0VOVEVSUFJJU0VfRkVBVFVSRVMsXG4gICAgICApLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBpc0RlZmF1bHQ6IGZhbHNlLFxuICAgICAgc29ydE9yZGVyOiAzLFxuICAgIH0sXG4gICAgLy8gVGhlIGJpbGxpbmctRElTQUJMRUQgZGVmYXVsdCBwbGFuOiBldmVyeXRoaW5nIHVuY2FwcGVkLCBhbGwgZmVhdHVyZXMsIGZyZWUuXG4gICAgLy8gU2VlZGVkIHNvIHRoZSB0aWVy4oaScGxhbiBtYXBwaW5nIHJlc29sdmVzLCBidXQgbmV2ZXIgb2ZmZXJlZCBmb3Igc2FsZSDigJQgdGhlXG4gICAgLy8gcmVhZC1wbGFucyByb3V0ZSBmaWx0ZXJzIGl0IG91dCAoc2VlIGNyZWF0ZVJlYWRQbGFuUm91dGVzKSwgc28gaXQncyBoaWRkZW5cbiAgICAvLyB3aGVuZXZlciBiaWxsaW5nIGlzIGVuYWJsZWQgKHRoZSBvbmx5IHRpbWUgL3BsYW5zIGlzIHNlcnZlZCkuXG4gICAgdW5saW1pdGVkOiB7XG4gICAgICBpZDogJ3VubGltaXRlZCcsXG4gICAgICBuYW1lOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVU5MSU1JVEVEX05BTUUgfHwgJ1VubGltaXRlZCcsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1VOTElNSVRFRF9ERVNDUklQVElPTlxuICAgICAgICB8fCAnRXZlcnl0aGluZyB1bmNhcHBlZCDigJQgdGhlIGRlZmF1bHQgd2hlbiBiaWxsaW5nIGlzIGRpc2FibGVkJyxcbiAgICAgIHRpZXI6ICd1bmxpbWl0ZWQnLFxuICAgICAgcHJpY2VzOiB7XG4gICAgICAgIG1vbnRobHk6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9VTkxJTUlURURfTU9OVEhMWSwgMCksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1VOTElNSVRFRF9BTk5VQUwsIDApLFxuICAgICAgfSxcbiAgICAgIGZlYXR1cmVzOiBwYXJzZUZlYXR1cmVzKFxuICAgICAgICBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVU5MSU1JVEVEX0ZFQVRVUkVTLFxuICAgICAgICBERUZBVUxUX1VOTElNSVRFRF9GRUFUVVJFUyxcbiAgICAgICksXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGlzRGVmYXVsdDogZmFsc2UsXG4gICAgICBzb3J0T3JkZXI6IDQsXG4gICAgfSxcbiAgfTtcblxuICAvLyBEZXJpdmUgdGhlIGFycmF5IGNvbnN1bWVycyByZWFkIChgY29uZmlnLnBsYW5zYCkgaW4gY2Fub25pY2FsIHRpZXIgb3JkZXIuXG4gIGNvbnN0IHBsYW5zOiBCaWxsaW5nUGxhbkNvbmZpZ1tdID0gVkFMSURfVElFUlMubWFwKCh0aWVyKSA9PiBwbGFuQnlUaWVyW3RpZXJdKTtcblxuICByZXR1cm4geyBwbGFucywgYnVuZGxlczogbG9hZEJ1bmRsZXMoKSwgY29tYm9EaXNjb3VudHM6IGxvYWRDb21ib0Rpc2NvdW50cygpIH07XG59XG5cbi8qKlxuICogQ29tYm8gZGlzY291bnRzIChkb2NzL2JpbGxpbmctYnVuZGxlcy5tZCDCp0NvbWJvIHByaWNpbmcpLiBXaGVuIGFuIGFjY291bnQgb3duc1xuICogZXZlcnkgbWVtYmVyIGJ1bmRsZSAoZWFjaCBhdCDiiaUgaXRzIG1pbmltdW0gcXVhbnRpdHkpLCB0aGUgc2V0IGlzIGJpbGxlZCBhdCB0aGVcbiAqIGNvbWJpbmVkIHByaWNlIGluc3RlYWQgb2YgdGhlIHN1bSBvZiB0aGUgbWVtYmVycyDigJQgcmVhbGl6ZWQgYXMgYSByZWN1cnJpbmcgdXNhZ2VcbiAqIGNyZWRpdCBmb3IgdGhlIGRpZmZlcmVuY2UuIE92ZXJsYXBwaW5nIGNvbWJvcyBhcmUgcmVzb2x2ZWQgYnkgbWF4LXdlaWdodCBwYWNraW5nXG4gKiAoYSBzaGFyZWQgYWRkLW9uIGlzIG5ldmVyIGRpc2NvdW50ZWQgdHdpY2UpOyBgc29ydE9yZGVyYCBicmVha3MgZXF1YWwtdG90YWwgdGllcy5cbiAqXG4gKiBEZWZhdWx0czpcbiAqICAtIFwiQW5hbHl0aWNzIFN1aXRlXCIg4oCUIEFkdmFuY2VkIFJlcG9ydGluZyAoRE9SQSkgKyBUZWFtIFVzYWdlIEFuYWx5dGljcywgZWFjaFxuICogICAgJDMwL21vLCB0b2dldGhlciAkNDAvbW8gKCQ0MDAveXIpIOKGkiBhICQyMC9tbyBjcmVkaXQuXG4gKiAgLSBcIlRlYW0gR3Jvd3RoIEJ1bmRsZVwiIOKAlCDiiaUxIFNlYXQgUGFjayAoJDI1KSArIFRlYW0gVXNhZ2UgQW5hbHl0aWNzICgkMzApLFxuICogICAgdG9nZXRoZXIgJDM1L21vICgkMzUwL3lyKSDihpIgYSAkMjAvbW8gY3JlZGl0LlxuICogUHJpY2VzIGVudi1vdmVycmlkYWJsZSB2aWEgYEJJTExJTkdfQ09NQk9fPElEPl9NT05USExZYCAvIGBfQU5OVUFMYC5cbiAqL1xuZnVuY3Rpb24gbG9hZENvbWJvRGlzY291bnRzKCk6IENvbWJvRGlzY291bnRDb25maWdbXSB7XG4gIGNvbnN0IGMgPSAoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgYnVuZGxlSWRzOiBzdHJpbmdbXSxcbiAgICBtb250aGx5OiBudW1iZXIsXG4gICAgYW5udWFsOiBudW1iZXIsXG4gICAgc29ydE9yZGVyOiBudW1iZXIsXG4gICAgbWluUXVhbnRpdGllcz86IFJlY29yZDxzdHJpbmcsIG51bWJlcj4sXG4gICk6IENvbWJvRGlzY291bnRDb25maWcgPT4gKHtcbiAgICBpZCxcbiAgICBuYW1lLFxuICAgIGJ1bmRsZUlkcyxcbiAgICAuLi4obWluUXVhbnRpdGllcyA/IHsgbWluUXVhbnRpdGllcyB9IDoge30pLFxuICAgIHByaWNlczoge1xuICAgICAgbW9udGhseTogZW52Q2VudHMocHJvY2Vzcy5lbnZbYEJJTExJTkdfQ09NQk9fJHtpZC50b1VwcGVyQ2FzZSgpfV9NT05USExZYF0sIG1vbnRobHkpLFxuICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudltgQklMTElOR19DT01CT18ke2lkLnRvVXBwZXJDYXNlKCl9X0FOTlVBTGBdLCBhbm51YWwpLFxuICAgIH0sXG4gICAgc29ydE9yZGVyLFxuICAgIGlzQWN0aXZlOiB0cnVlLFxuICB9KTtcblxuICBjb25zdCBjb21ib3MgPSBbXG4gICAgYygnYW5hbHl0aWNzX3N1aXRlJywgJ0FuYWx5dGljcyBTdWl0ZScsIFsnYWR2YW5jZWRfcmVwb3J0aW5nJywgJ3RlYW1fdXNhZ2VfYW5hbHl0aWNzJ10sIDQwMDAsIDQwMDAwLCAwKSxcbiAgICBjKCd0ZWFtX2dyb3d0aCcsICdUZWFtIEdyb3d0aCBCdW5kbGUnLCBbJ3NlYXRfcGFjaycsICd0ZWFtX3VzYWdlX2FuYWx5dGljcyddLCAzNTAwLCAzNTAwMCwgMSwgeyBzZWF0X3BhY2s6IDEgfSksXG4gIF07XG4gIHdhcm5Pbk5vbkRpc2NvdW50Q29tYm9zKGNvbWJvcyk7XG4gIHJldHVybiBjb21ib3M7XG59XG5cbi8qKlxuICogR3VhcmRyYWlsOiBhIGNvbWJvIHdob3NlIGNvbWJpbmVkIHByaWNlIGlzIOKJpSBpdHMgbWluaW11bS1jb21wb3NpdGlvbiBiYXNrZXQgZ3JhbnRzXG4gKiBubyBjcmVkaXQgKHRoZSBjcmVkaXQgY2xhbXBzIHRvICQwKSBhbmQgaXMgc2lsZW50bHkgaW5lcnQuIFdhcm4gbG91ZGx5IGluc3RlYWQgc28gYVxuICogbWlzY29uZmlndXJlZCBgQklMTElOR19DT01CT18qYCBvdmVycmlkZSBpcyBjYXVnaHQuIE5vbi1mYXRhbC5cbiAqL1xuZnVuY3Rpb24gd2Fybk9uTm9uRGlzY291bnRDb21ib3MoY29tYm9zOiBDb21ib0Rpc2NvdW50Q29uZmlnW10pOiB2b2lkIHtcbiAgLy8gQ29tYm8gbWVtYmVycyBhcmUgYWx3YXlzIGJ1bmRsZXM7IHJlc29sdmUgdGhlaXIgKGVudi1lZmZlY3RpdmUpIHVuaXQgcHJpY2VzIG9uY2UuXG4gIGNvbnN0IGJ5SWQgPSBuZXcgTWFwKGxvYWRCdW5kbGVzKCkubWFwKChiKSA9PiBbYi5pZCwgYl0pKTtcbiAgZm9yIChjb25zdCBjb21ibyBvZiBjb21ib3MpIHtcbiAgICBmb3IgKGNvbnN0IGludGVydmFsIG9mIFsnbW9udGhseScsICdhbm51YWwnXSBhcyBjb25zdCkge1xuICAgICAgY29uc3QgYmFza2V0ID0gY29tYm8uYnVuZGxlSWRzLnJlZHVjZSgocywgaWQpID0+IHMgKyAoYnlJZC5nZXQoaWQpPy5wcmljZXNbaW50ZXJ2YWxdID8/IDApICogKGNvbWJvLm1pblF1YW50aXRpZXM/LltpZF0gPz8gMSksIDApO1xuICAgICAgaWYgKGNvbWJvLnByaWNlc1tpbnRlcnZhbF0gPj0gYmFza2V0KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihgW2JpbGxpbmctY29uZmlnXSBDb21ibyBcIiR7Y29tYm8uaWR9XCIgJHtpbnRlcnZhbH0gcHJpY2UgJHtjb21iby5wcmljZXNbaW50ZXJ2YWxdfSDiiaUgbWVtYmVyIGJhc2tldCAke2Jhc2tldH07IGl0IGdyYW50cyBubyBkaXNjb3VudC5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgQlVORExFX0dCID0gMTAyNCAqIDEwMjQgKiAxMDI0O1xuXG4vKipcbiAqIEFwcGx5IGEgcGVyLWJ1bmRsZSBncmFudCBvdmVycmlkZS4gRWFjaCBzdGFja2FibGUgcGFjayBncmFudHMgZXhhY3RseSBvbmVcbiAqIHF1b3RhIGRpbWVuc2lvbiwgc28gYEJJTExJTkdfQlVORExFXzxJRD5fR1JBTlRgIHJldHVuZXMgdGhhdCBhbW91bnQgKGUuZy4gbWFrZVxuICogdGhlIFNlYXQgUGFjayBncmFudCArMTAgaW5zdGVhZCBvZiArNSkg4oCUIHBhcmFsbGVsIHRvIHRoZSBwcmljZSBvdmVycmlkZXMuXG4gKiBJZ25vcmVkIGZvciBtdWx0aS1kaW1lbnNpb24gb3IgZmVhdHVyZS1vbmx5IChlbXB0eS1ncmFudCkgYnVuZGxlcywgYW5kIGZvciBhXG4gKiBtYWxmb3JtZWQvbmVnYXRpdmUgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5R3JhbnRPdmVycmlkZShpZDogc3RyaW5nLCBncmFudHM6IEdyYW50TWFwKTogR3JhbnRNYXAge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltgQklMTElOR19CVU5ETEVfJHtpZC50b1VwcGVyQ2FzZSgpfV9HUkFOVGBdO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZ3JhbnRzKTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdyA9PT0gJycgfHwga2V5cy5sZW5ndGggIT09IDEpIHJldHVybiBncmFudHM7XG4gIGNvbnN0IG4gPSBwYXJzZUludChyYXcsIDEwKTtcbiAgaWYgKE51bWJlci5pc05hTihuKSB8fCBuIDwgMCkgcmV0dXJuIGdyYW50cztcbiAgLy8gYGtleXNgIGNhbWUgZnJvbSBhIEdyYW50TWFwLCBzbyBpdHMgc29sZSBrZXkgaXMgYSBRdW90YVRpZXJMaW1pdHMgZmllbGQuXG4gIHJldHVybiB7IFtrZXlzWzBdIGFzIGtleW9mIFF1b3RhVGllckxpbWl0c106IG4gfTtcbn1cblxuLyoqXG4gKiBBcHBseSBhIHBlci1idW5kbGUgdGllci1hdmFpbGFiaWxpdHkgb3ZlcnJpZGUuIGBCSUxMSU5HX0JVTkRMRV88SUQ+X1RJRVJTYCBpcyBhXG4gKiBKU09OIGFycmF5IG9mIHRpZXIgSURzIHRoYXQgbWF5IHB1cmNoYXNlIHRoZSBidW5kbGUgKGUuZy4gYFtcImRldmVsb3BlclwiLFwicHJvXCJdYClcbiAqIOKAlCBwYXJhbGxlbCB0byB0aGUgcHJpY2UvZ3JhbnQgb3ZlcnJpZGVzLiBGYWxscyBiYWNrIHRvIGBkZWZhdWx0VGllcnNgIHdoZW5cbiAqIHVuc2V0LCBtYWxmb3JtZWQsIGVtcHR5LCBvciBjb250YWluaW5nIGFuIHVua25vd24gdGllci5cbiAqL1xuZnVuY3Rpb24gYXBwbHlUaWVyc092ZXJyaWRlKGlkOiBzdHJpbmcsIGRlZmF1bHRUaWVyczogUXVvdGFUaWVyW10pOiBRdW90YVRpZXJbXSB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52W2BCSUxMSU5HX0JVTkRMRV8ke2lkLnRvVXBwZXJDYXNlKCl9X1RJRVJTYF07XG4gIGlmICghcmF3KSByZXR1cm4gZGVmYXVsdFRpZXJzO1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyc2VkKSB8fCBwYXJzZWQubGVuZ3RoID09PSAwKSByZXR1cm4gZGVmYXVsdFRpZXJzO1xuICAgIGNvbnN0IHZhbGlkID0gcGFyc2VkLmZpbHRlcigodCk6IHQgaXMgUXVvdGFUaWVyID0+IHR5cGVvZiB0ID09PSAnc3RyaW5nJyAmJiBpc1ZhbGlkVGllcih0KSk7XG4gICAgcmV0dXJuIHZhbGlkLmxlbmd0aCA9PT0gcGFyc2VkLmxlbmd0aCA/IHZhbGlkIDogZGVmYXVsdFRpZXJzO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFRpZXJzO1xuICB9XG59XG5cbi8qKlxuICogUHVyY2hhc2FibGUgYWRkLW9uIGJ1bmRsZXMgKGRvY3MvYmlsbGluZy1idW5kbGVzLm1kIMKnMykuIEdyYW50cyBhcmUgcGVyLXVuaXRcbiAqIGRlbHRhcyBvbiBRdW90YVRpZXJMaW1pdHM7IHByaWNlcyAoY2VudHMsIGBCSUxMSU5HX0JVTkRMRV88SUQ+X01PTlRITFlgIC9cbiAqIGBfQU5OVUFMYCksIHRoZSBzaW5nbGUtZGltZW5zaW9uIGdyYW50IGFtb3VudCAoYEJJTExJTkdfQlVORExFXzxJRD5fR1JBTlRgKSxcbiAqIGFuZCB0aGUgcHVyY2hhc2FibGUtdGllciBsaXN0IChgQklMTElOR19CVU5ETEVfPElEPl9USUVSU2ApIGFyZSBhbGxcbiAqIGVudi1vdmVycmlkYWJsZS4gQW5udWFsIOKJiCAxMMOXIG1vbnRobHkuXG4gKi9cbmZ1bmN0aW9uIGxvYWRCdW5kbGVzKCk6IEJ1bmRsZUNvbmZpZ1tdIHtcbiAgY29uc3QgYiA9IChcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICAgIGdyYW50czogR3JhbnRNYXAsXG4gICAgbW9udGhseTogbnVtYmVyLFxuICAgIGF2YWlsYWJsZUZvclRpZXJzOiBRdW90YVRpZXJbXSxcbiAgICBzb3J0T3JkZXI6IG51bWJlcixcbiAgICBleHRyYTogeyBmZWF0dXJlcz86IHN0cmluZ1tdOyBzdGFja2FibGU/OiBib29sZWFuIH0gPSB7fSxcbiAgKTogQnVuZGxlQ29uZmlnID0+IHtcbiAgICAvLyBSZXNvbHZlIG1vbnRobHkgZmlyc3Qgc28gdGhlIGFubnVhbCBmYWxsYmFjayB0cmFja3MgYSBgX01PTlRITFlgIG92ZXJyaWRlXG4gICAgLy8gKGFubnVhbCDiiYggMTDDlyB0aGUgKmVmZmVjdGl2ZSogbW9udGhseSwgbm90IHRoZSBoYXJkY29kZWQgZGVmYXVsdCkuXG4gICAgY29uc3QgcmVzb2x2ZWRNb250aGx5ID0gZW52Q2VudHMocHJvY2Vzcy5lbnZbYEJJTExJTkdfQlVORExFXyR7aWQudG9VcHBlckNhc2UoKX1fTU9OVEhMWWBdLCBtb250aGx5KTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQsXG4gICAgICBuYW1lLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBncmFudHM6IGFwcGx5R3JhbnRPdmVycmlkZShpZCwgZ3JhbnRzKSxcbiAgICAgIC4uLihleHRyYS5mZWF0dXJlcyA/IHsgZmVhdHVyZXM6IGV4dHJhLmZlYXR1cmVzIH0gOiB7fSksXG4gICAgICBwcmljZXM6IHtcbiAgICAgICAgbW9udGhseTogcmVzb2x2ZWRNb250aGx5LFxuICAgICAgICBhbm51YWw6IGVudkNlbnRzKHByb2Nlc3MuZW52W2BCSUxMSU5HX0JVTkRMRV8ke2lkLnRvVXBwZXJDYXNlKCl9X0FOTlVBTGBdLCByZXNvbHZlZE1vbnRobHkgKiAxMCksXG4gICAgICB9LFxuICAgICAgc3RhY2thYmxlOiBleHRyYS5zdGFja2FibGUgPz8gdHJ1ZSxcbiAgICAgIGF2YWlsYWJsZUZvclRpZXJzOiBhcHBseVRpZXJzT3ZlcnJpZGUoaWQsIGF2YWlsYWJsZUZvclRpZXJzKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgc29ydE9yZGVyLFxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgQUxMOiBRdW90YVRpZXJbXSA9IFsnZGV2ZWxvcGVyJywgJ3BybycsICd0ZWFtJywgJ2VudGVycHJpc2UnXTtcbiAgcmV0dXJuIFtcbiAgICAvLyBDYXBhY2l0eSBwYWNrcyAoc2VhdHMvcGlwZWxpbmVzL3BsdWdpbnMpIGFyZSBhdmFpbGFibGUgb24gRVZFUlkgdGllciBzbyBhbnlcbiAgICAvLyBhY2NvdW50IOKAlCBpbmNsdWRpbmcgZnJlZSAoZGV2ZWxvcGVyKSDigJQgY2FuIGV4cGFuZCBpbiBwbGFjZS4gRmVhdHVyZSBidW5kbGVzXG4gICAgLy8gKGF1ZGl0X2xvZy9zc28pIGFuZCByYXRlIHBhY2tzIHN0YXkgdGllci1zY29wZWQgYnkgZGVmYXVsdC5cbiAgICBiKCdzZWF0X3BhY2snLCAnU2VhdCBQYWNrICgrNSknLCAnNSBhZGRpdGlvbmFsIG1lbWJlciBzZWF0cycsIHsgc2VhdHM6IDUgfSwgMjUwMCwgQUxMLCAwKSxcbiAgICBiKCdwaXBlbGluZV9wYWNrJywgJ1BpcGVsaW5lIFBhY2sgKCsxMCknLCAnMTAgYWRkaXRpb25hbCBwaXBlbGluZXMnLCB7IHBpcGVsaW5lczogMTAgfSwgMTUwMCwgQUxMLCAxKSxcbiAgICBiKCdwbHVnaW5fcGFjaycsICdQbHVnaW4gUGFjayAoKzEwMCknLCAnMTAwIGFkZGl0aW9uYWwgcGx1Z2lucycsIHsgcGx1Z2luczogMTAwIH0sIDE1MDAsIEFMTCwgMiksXG4gICAgYignYXBpX3BhY2snLCAnQVBJIFBhY2sgKCsxTSknLCAnMSwwMDAsMDAwIGFkZGl0aW9uYWwgQVBJIGNhbGxzIC8gcGVyaW9kJywgeyBhcGlDYWxsczogMV8wMDBfMDAwIH0sIDIwMDAsIEFMTCwgMyksXG4gICAgYignYWlfcGFjaycsICdBSSBQYWNrICgrNWspJywgJzUsMDAwIGFkZGl0aW9uYWwgQUkgY2FsbHMgLyBwZXJpb2QnLCB7IGFpQ2FsbHM6IDUwMDAgfSwgNzUwMCwgQUxMLCA0KSxcbiAgICBiKCdzdG9yYWdlX3BhY2snLCAnU3RvcmFnZSBQYWNrICgrNTAgR0IpJywgJzUwIEdCIGFkZGl0aW9uYWwgcmVnaXN0cnkgc3RvcmFnZScsIHsgc3RvcmFnZUJ5dGVzOiA1MCAqIEJVTkRMRV9HQiB9LCAyNTAwLCBBTEwsIDUpLFxuICAgIGIoJ2F1ZGl0X2xvZycsICdBdWRpdCBMb2cnLCAnQXVkaXQgbG9nIGNhcGFiaWxpdHknLCB7fSwgMjAwMCwgWydwcm8nXSwgNiwgeyBmZWF0dXJlczogWydhdWRpdF9sb2cnXSwgc3RhY2thYmxlOiBmYWxzZSB9KSxcbiAgICAvLyBTU08gaXMgSU5DTFVERUQgaW4gVGVhbSAoc2VlIFRJRVJfRkVBVFVSRVMudGVhbSksIHNvIHRoZSBhZGQtb24gaXMgUHJvLW9ubHkuXG4gICAgYignc3NvJywgJ1NTTyAvIElkUCcsICdTU08gKyB1cCB0byA1IElkUCBjb25maWdzJywgeyBpZHBDb25maWdzOiA1IH0sIDQwMDAsIFsncHJvJ10sIDcsIHsgZmVhdHVyZXM6IFsnc3NvJ10sIHN0YWNrYWJsZTogZmFsc2UgfSksXG4gICAgLy8gRE9SQSAvIGFkdmFuY2VkIGRlbGl2ZXJ5IGFuYWx5dGljcy4gSU5DTFVERUQgaW4gRW50ZXJwcmlzZSAoVElFUl9GRUFUVVJFUyksXG4gICAgLy8gc28gdGhlIGFkZC1vbiBpcyBvZmZlcmVkIHRvIGV2ZXJ5IG90aGVyIHRpZXIgKGRldmVsb3Blci9wcm8vdGVhbSkuIFByaWNlZFxuICAgIC8vIGJldHdlZW4gQXVkaXQgTG9nICgkMjApIGFuZCBTU08gKCQ0MCkg4oCUIGEgaGlnaGVyLXZhbHVlLCBhY3RpdmVseS11c2VkXG4gICAgLy8gYW5hbHl0aWNzIHN1cmZhY2UgdGhhbiB0aGUgYXVkaXQgbG9nLCBidXQgYmVsb3cgdGhlIFNTTyBlbnRlcnByaXNlIGdhdGUuXG4gICAgYignYWR2YW5jZWRfcmVwb3J0aW5nJywgJ0FkdmFuY2VkIFJlcG9ydGluZyAoRE9SQSknLCAnRE9SQSBkZWxpdmVyeSBtZXRyaWNzIOKAlCBkZXBsb3ltZW50IGZyZXF1ZW5jeSwgY2hhbmdlIGZhaWx1cmUgcmF0ZSwgTVRUUiwgbGVhZC10aW1lIHByb3h5LCBwZXJmb3JtYW5jZSBiYW5kcyArIHRyZW5kJywge30sIDMwMDAsIFsnZGV2ZWxvcGVyJywgJ3BybycsICd0ZWFtJ10sIDgsIHsgZmVhdHVyZXM6IFsnYWR2YW5jZWRfcmVwb3J0aW5nJ10sIHN0YWNrYWJsZTogZmFsc2UgfSksXG4gICAgLy8gUGVyLXRlYW0gdXNhZ2UgYnJlYWtkb3duIGFjcm9zcyB0aGUgb3JnIOKGkiB0ZWFtIHN1YnRyZWUuIElOQ0xVREVEIGluXG4gICAgLy8gRW50ZXJwcmlzZSAoVElFUl9GRUFUVVJFUyk7IHRoZSBhZGQtb24gaXMgb2ZmZXJlZCB0byBQcm8vVGVhbSAoZGV2ZWxvcGVyIGhhc1xuICAgIC8vIG5vIHRlYW1zIHRvIGJyZWFrIGRvd24pLiBQcmljZWQgYXQgJDMwL21vICgkMzAwL3lyKSDigJQgcGFyaXR5IHdpdGggRE9SQSwgaXRzXG4gICAgLy8gYW5hbHl0aWNzIHNpYmxpbmcuIE92ZXJyaWRhYmxlIHZpYSBCSUxMSU5HX0JVTkRMRV9URUFNX1VTQUdFX0FOQUxZVElDU19NT05USExZL19BTk5VQUwuXG4gICAgYigndGVhbV91c2FnZV9hbmFseXRpY3MnLCAnVGVhbSBVc2FnZSBBbmFseXRpY3MnLCAnUGVyLXRlYW0gdXNhZ2UgYnJlYWtkb3duIGFjcm9zcyB0aGUgb3JnIOKGkiB0ZWFtIHN1YnRyZWUgKGFsbCBxdW90YSBkaW1lbnNpb25zKScsIHt9LCAzMDAwLCBbJ3BybycsICd0ZWFtJ10sIDksIHsgZmVhdHVyZXM6IFsndGVhbV91c2FnZV9hbmFseXRpY3MnXSwgc3RhY2thYmxlOiBmYWxzZSB9KSxcbiAgXTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -30,8 +30,8 @@
30
30
  "constructs": "10.7.0",
31
31
  "jsonwebtoken": "9.0.3",
32
32
  "uuid": "14.0.1",
33
- "@pipeline-builder/api-core": "3.4.100",
34
- "@pipeline-builder/pipeline-data": "3.4.104"
33
+ "@pipeline-builder/api-core": "3.4.101",
34
+ "@pipeline-builder/pipeline-data": "3.4.105"
35
35
  },
36
36
  "keywords": [
37
37
  "ci-cd",
@@ -87,7 +87,7 @@
87
87
  "access": "public",
88
88
  "registry": "https://registry.npmjs.org/"
89
89
  },
90
- "version": "3.4.118",
90
+ "version": "3.4.119",
91
91
  "bugs": {
92
92
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
93
93
  },