@pipeline-builder/pipeline-data 4.1.22 → 4.1.24

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.
@@ -1,12 +1,8 @@
1
+ import type { HealthBreakdown } from '../database/drizzle-schema.js';
1
2
  export type DirectoryTrustTier = 'official' | 'verified' | 'community' | 'unverified';
2
3
  export type DirectoryIconKind = 'vendor' | 'uploaded' | 'monogram' | 'category';
3
4
  export type DirectorySort = 'relevance' | 'rating' | 'installs' | 'updated' | 'name' | 'health';
4
5
  export declare const DIRECTORY_SORTS: readonly DirectorySort[];
5
- /** Per-component health scores: `{ score: 0..1 | null (missing), weight }`. */
6
- export type DirectoryHealthBreakdown = Record<string, {
7
- score: number | null;
8
- weight: number;
9
- }>;
10
6
  export declare const DIRECTORY_TIERS: readonly DirectoryTrustTier[];
11
7
  /** Minimum `word_similarity(query, name)` for a fuzzy name match (typo tolerance). */
12
8
  export declare const FUZZY_NAME_THRESHOLD = 0.3;
@@ -143,7 +139,7 @@ export interface DirectoryListingDetail extends DirectoryListingCard {
143
139
  recentRating: number | null;
144
140
  activeOrgCount: number | null;
145
141
  /** Per-component health scores behind {@link DirectoryListingCard.healthScore}. */
146
- healthBreakdown: DirectoryHealthBreakdown | null;
142
+ healthBreakdown: HealthBreakdown | null;
147
143
  /** 30-day runtime success rate (0..1), or null with no runs. */
148
144
  successRate30d: number | null;
149
145
  }
@@ -219,7 +215,7 @@ export interface PublicListingRow {
219
215
  install_count: number | string;
220
216
  active_org_count: number | string | null;
221
217
  health_score?: number | string | null;
222
- health_breakdown?: DirectoryHealthBreakdown | null;
218
+ health_breakdown?: HealthBreakdown | null;
223
219
  success_rate_30d?: number | string | null;
224
220
  state: 'listed' | 'unmaintained';
225
221
  }
@@ -17,7 +17,7 @@
17
17
  * Bayesian rating and install count when present. Paused listings are hidden.
18
18
  */
19
19
  import { sql } from 'drizzle-orm';
20
- import { advisoryRangeCovers } from './plugin-resolution.js';
20
+ import { advisoryRangeCovers } from './plugin-advisories.js';
21
21
  import { compareSemver } from './semver-range.js';
22
22
  import { resultRows } from '../database/pg-result.js';
23
23
  import { getPublicReaderDb } from '../database/public-reader.js';
@@ -460,4 +460,4 @@ export async function listPublicListingsForSitemap(max = 5000) {
460
460
  return resultRows(res)
461
461
  .map((r) => ({ publisher: r.publisher_handle, name: r.name, updatedAt: iso(r.updated_at) }));
462
462
  }
463
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWRpcmVjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcHVibGljLWRpcmVjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxHQUFHLEVBQVksTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVVqRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQTZCLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUkxSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWtDLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFFbEgsc0ZBQXNGO0FBQ3RGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUV4Qyx1RUFBdUU7QUFDdkUsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsR0FBRyxDQUFDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztBQUMxQyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7QUE2SHRDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBMEIsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM5RixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENB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IENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBRdWVyaWVzIGJlaGluZCB0aGUgYW5vbnltb3VzIHB1YmxpYyBwbHVnaW4gZGlyZWN0b3J5XG4gKiAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuXG4gKlxuICogRXZlcnkgcXVlcnkgaGVyZSByZWFkcyBPTkxZIHRoZSBgcHVibGljX2xpc3RpbmdzYCwgYHB1YmxpY19saXN0ZWRfdmVyc2lvbnNgLFxuICogYHB1YmxpY19hZHZpc29yaWVzYCBhbmQgYHB1YmxpY19yZXZpZXdzYCB2aWV3cywgdGhyb3VnaCB0aGUgYGVjb3N5c3RlbV9wdWJsaWNfcmVhZGVyYFxuICogY29ubmVjdGlvbiAoe0BsaW5rIGdldFB1YmxpY1JlYWRlckRifSkuIFRob3NlIHZpZXdzIGFscmVhZHkgZmlsdGVyIHRvIHB1YmxpY1xuICogcm93cyAobGlzdGVkL3VubWFpbnRhaW5lZCBsaXN0aW5ncyBvZiBub24tc3VzcGVuZGVkIHB1Ymxpc2hlcnMsIG5vbi1wYXVzZWRcbiAqIHZlcnNpb25zLCBwdWJsaXNoZWQgYWR2aXNvcmllcykgYW5kIHByb2plY3QgcHVibGljIGNvbHVtbnMgb25seSwgc28gbm90aGluZ1xuICogaGVyZSBuZWVkcyDigJQgb3IgaGFzIOKAlCBhIHRlbmFudCBjb250ZXh0LlxuICpcbiAqIFNlYXJjaDogUG9zdGdyZXMgZnVsbC10ZXh0IChgc2VhcmNoX3ZlY3RvcmAsIHdlaWdodGVkIG5hbWUgQSAvIGtleXdvcmRzIGFuZFxuICogY2F0ZWdvcnkgQiAvIHN1bW1hcnkgQyAvIFJFQURNRSBELCBgZW5nbGlzaGAgY29uZmlnKSBPUiBhIHRyaWdyYW0gbWF0Y2ggb24gdGhlXG4gKiBuYW1lICh0eXBvIHRvbGVyYW5jZSksIHJhbmtlZCBieSBgdHNfcmFua2AgKyBuYW1lIHNpbWlsYXJpdHksIGJsZW5kZWQgd2l0aCB0aGVcbiAqIEJheWVzaWFuIHJhdGluZyBhbmQgaW5zdGFsbCBjb3VudCB3aGVuIHByZXNlbnQuIFBhdXNlZCBsaXN0aW5ncyBhcmUgaGlkZGVuLlxuICovXG5cbmltcG9ydCB7IHNxbCwgdHlwZSBTUUwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5cbmltcG9ydCB7IGFkdmlzb3J5UmFuZ2VDb3ZlcnMgfSBmcm9tICcuL3BsdWdpbi1yZXNvbHV0aW9uLmpzJztcbmltcG9ydCB7IGNvbXBhcmVTZW12ZXIgfSBmcm9tICcuL3NlbXZlci1yYW5nZS5qcyc7XG5pbXBvcnQgeyByZXN1bHRSb3dzIH0gZnJvbSAnLi4vZGF0YWJhc2UvcGctcmVzdWx0LmpzJztcbmltcG9ydCB7IGdldFB1YmxpY1JlYWRlckRiIH0gZnJvbSAnLi4vZGF0YWJhc2UvcHVibGljLXJlYWRlci5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWMgY29udHJhY3QgKG1pcnJvcnMgZnJvbnRlbmQvc3JjL2xpYi9wdWJsaWMtZGlyZWN0b3J5L3R5cGVzLnRzKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgRGlyZWN0b3J5VHJ1c3RUaWVyID0gJ29mZmljaWFsJyB8ICd2ZXJpZmllZCcgfCAnY29tbXVuaXR5JyB8ICd1bnZlcmlmaWVkJztcbmV4cG9ydCB0eXBlIERpcmVjdG9yeUljb25LaW5kID0gJ3ZlbmRvcicgfCAndXBsb2FkZWQnIHwgJ21vbm9ncmFtJyB8ICdjYXRlZ29yeSc7XG5leHBvcnQgdHlwZSBEaXJlY3RvcnlTb3J0ID0gJ3JlbGV2YW5jZScgfCAncmF0aW5nJyB8ICdpbnN0YWxscycgfCAndXBkYXRlZCcgfCAnbmFtZScgfCAnaGVhbHRoJztcblxuZXhwb3J0IGNvbnN0IERJUkVDVE9SWV9TT1JUUzogcmVhZG9ubHkgRGlyZWN0b3J5U29ydFtdID0gWydyZWxldmFuY2UnLCAncmF0aW5nJywgJ2luc3RhbGxzJywgJ3VwZGF0ZWQnLCAnbmFtZScsICdoZWFsdGgnXTtcblxuLyoqIFBlci1jb21wb25lbnQgaGVhbHRoIHNjb3JlczogYHsgc2NvcmU6IDAuLjEgfCBudWxsIChtaXNzaW5nKSwgd2VpZ2h0IH1gLiAqL1xuZXhwb3J0IHR5cGUgRGlyZWN0b3J5SGVhbHRoQnJlYWtkb3duID0gUmVjb3JkPHN0cmluZywgeyBzY29yZTogbnVtYmVyIHwgbnVsbDsgd2VpZ2h0OiBudW1iZXIgfT47XG5leHBvcnQgY29uc3QgRElSRUNUT1JZX1RJRVJTOiByZWFkb25seSBEaXJlY3RvcnlUcnVzdFRpZXJbXSA9IFsnb2ZmaWNpYWwnLCAndmVyaWZpZWQnLCAnY29tbXVuaXR5JywgJ3VudmVyaWZpZWQnXTtcblxuLyoqIE1pbmltdW0gYHdvcmRfc2ltaWxhcml0eShxdWVyeSwgbmFtZSlgIGZvciBhIGZ1enp5IG5hbWUgbWF0Y2ggKHR5cG8gdG9sZXJhbmNlKS4gKi9cbmV4cG9ydCBjb25zdCBGVVpaWV9OQU1FX1RIUkVTSE9MRCA9IDAuMztcblxuLyoqIE1heCBxdWVyeSBsZW5ndGggYWNjZXB0ZWQgKGxvbmdlciBpcyB0cnVuY2F0ZWQsIG5ldmVyIGFuIGVycm9yKS4gKi9cbmV4cG9ydCBjb25zdCBESVJFQ1RPUllfTUFYX1FVRVJZX0xFTkdUSCA9IDEwMDtcbmV4cG9ydCBjb25zdCBESVJFQ1RPUllfREVGQVVMVF9MSU1JVCA9IDI0O1xuZXhwb3J0IGNvbnN0IERJUkVDVE9SWV9NQVhfTElNSVQgPSA2MDtcblxuZXhwb3J0IGludGVyZmFjZSBEaXJlY3RvcnlTZWFyY2hQYXJhbXMge1xuICBxPzogc3RyaW5nO1xuICBjYXRlZ29yeT86IHN0cmluZztcbiAgdGllcj86IERpcmVjdG9yeVRydXN0VGllcjtcbiAgbGljZW5zZT86IHN0cmluZztcbiAgY29tcHV0ZVR5cGU/OiBzdHJpbmc7XG4gIG5lZWRzU2VjcmV0cz86IGJvb2xlYW47XG4gIG1pblJhdGluZz86IG51bWJlcjtcbiAgc29ydD86IERpcmVjdG9yeVNvcnQ7XG4gIGN1cnNvcj86IHN0cmluZztcbiAgbGltaXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0b3J5TGlzdGluZ0NhcmQge1xuICBwdWJsaXNoZXI6IHsgaGFuZGxlOiBzdHJpbmc7IGRpc3BsYXlOYW1lOiBzdHJpbmc7IHRpZXI6IERpcmVjdG9yeVRydXN0VGllciB9O1xuICBuYW1lOiBzdHJpbmc7XG4gIHN1bW1hcnk6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAga2V5d29yZHM6IHN0cmluZ1tdO1xuICBsYXRlc3RWZXJzaW9uOiBzdHJpbmc7XG4gIGxpY2Vuc2U6IHN0cmluZztcbiAgaWNvblVybDogc3RyaW5nIHwgbnVsbDtcbiAgaWNvbktpbmQ6IERpcmVjdG9yeUljb25LaW5kO1xuICBpY29uS2V5OiBzdHJpbmcgfCBudWxsO1xuICBpY29uSGV4OiBzdHJpbmcgfCBudWxsO1xuICBpY29uQmFkZ2U6IHN0cmluZyB8IG51bGw7XG4gIHJhdGluZzogeyBzY29yZTogbnVtYmVyOyBjb3VudDogbnVtYmVyIH0gfCBudWxsO1xuICBpbnN0YWxsQ291bnQ6IG51bWJlcjtcbiAgLyoqIDDigJMxMDAgaGVhbHRoIHNjb3JlOyBudWxsIHdoZW4gZmV3ZXIgdGhhbiB0aHJlZSBjb21wb25lbnRzIGFyZSBrbm93bi4gKi9cbiAgaGVhbHRoU2NvcmU6IG51bWJlciB8IG51bGw7XG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xuICBzdGF0ZTogJ2xpc3RlZCcgfCAndW5tYWludGFpbmVkJztcbiAgaGlnaGxpZ2h0PzogeyBuYW1lPzogc3RyaW5nOyBzdW1tYXJ5Pzogc3RyaW5nIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0b3J5U2VhcmNoUmVzdWx0IHtcbiAgaXRlbXM6IERpcmVjdG9yeUxpc3RpbmdDYXJkW107XG4gIGZhY2V0czoge1xuICAgIGNhdGVnb3J5OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuICAgIHRpZXI6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gICAgbGljZW5zZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgICBjb21wdXRlVHlwZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgICBuZWVkc1NlY3JldHM6IHsgdHJ1ZTogbnVtYmVyOyBmYWxzZTogbnVtYmVyIH07XG4gIH07XG4gIHRvdGFsOiBudW1iZXI7XG4gIG5leHRDdXJzb3I6IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0b3J5Q2F0ZWdvcnlTdW1tYXJ5IHtcbiAgaWQ6IHN0cmluZztcbiAgY291bnQ6IG51bWJlcjtcbiAgdG9wOiBEaXJlY3RvcnlMaXN0aW5nQ2FyZFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdG9yeUxpc3RpbmdWZXJzaW9uIHtcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBwdWJsaXNoZWRBdDogc3RyaW5nO1xuICBicmVha2luZzogYm9vbGVhbjtcbiAgZGVwcmVjYXRlZDogYm9vbGVhbjtcbiAgZGVwcmVjYXRpb25NZXNzYWdlOiBzdHJpbmcgfCBudWxsO1xuICB5YW5rZWQ6IGJvb2xlYW47XG4gIGNoYW5nZWxvZzogc3RyaW5nIHwgbnVsbDtcbiAgdnVsbkNyaXRpY2FsOiBudW1iZXIgfCBudWxsO1xuICB2dWxuSGlnaDogbnVtYmVyIHwgbnVsbDtcbiAgLyoqIE9mIHRob3NlLCB0aGUgZmluZGluZ3MgZ3J5cGUgcmVwb3J0cyBhIGZpeGVkIHZlcnNpb24gZm9yLiAqL1xuICB2dWxuQ3JpdGljYWxGaXhhYmxlOiBudW1iZXIgfCBudWxsO1xuICB2dWxuSGlnaEZpeGFibGU6IG51bWJlciB8IG51bGw7XG4gIHNjYW5uZWRBdDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFdoZW4gdGhlIG5pZ2h0bHkgcmVzY2FuIGZsYWdnZWQgdGhpcyB2ZXJzaW9uIChmaXhhYmxlIGNyaXRpY2FscyBvdmVyIHRoZSBwbGF0Zm9ybSBmbG9vcik7IG51bGwgPSBub3QgZmxhZ2dlZC4gKi9cbiAgc2NhbkZsYWdnZWRBdDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIElkcyBvZiB0aGUgcHVibGlzaGVkIGFkdmlzb3JpZXMgd2hvc2UgcmFuZ2UgY292ZXJzIHRoaXMgdmVyc2lvbi4gKi9cbiAgYWR2aXNvcnlJZHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdG9yeUxpc3RpbmdEZXRhaWwgZXh0ZW5kcyBEaXJlY3RvcnlMaXN0aW5nQ2FyZCB7XG4gIHJlYWRtZUh0bWw6IHN0cmluZyB8IG51bGw7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGhvbWVwYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBzb3VyY2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIHZlcnNpb25zOiBEaXJlY3RvcnlMaXN0aW5nVmVyc2lvbltdO1xuICBjb25maWd1cmF0aW9uOiB7XG4gICAgc2VjcmV0czogeyBuYW1lOiBzdHJpbmc7IHJlcXVpcmVkOiBib29sZWFuOyBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXTtcbiAgICByZXF1aXJlZE1ldGFkYXRhOiBzdHJpbmdbXTtcbiAgICByZXF1aXJlZFZhcnM6IHN0cmluZ1tdO1xuICAgIGNvbXB1dGVUeXBlOiBzdHJpbmc7XG4gICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogc3RyaW5nIHwgbnVsbDtcbiAgICBuZXR3b3JrRWdyZXNzOiBzdHJpbmdbXTtcbiAgICBwbHVnaW5UeXBlOiBzdHJpbmc7XG4gIH07XG4gIHN1cHBseUNoYWluOiB7XG4gICAgc2lnbmVkOiBib29sZWFuO1xuICAgIGRpZ2VzdDogc3RyaW5nIHwgbnVsbDtcbiAgICBpbWFnZVNvdXJjZTogc3RyaW5nIHwgbnVsbDtcbiAgICBzY2FubmVkQXQ6IHN0cmluZyB8IG51bGw7XG4gICAgdnVsbkNyaXRpY2FsOiBudW1iZXIgfCBudWxsO1xuICAgIHZ1bG5IaWdoOiBudW1iZXIgfCBudWxsO1xuICAgIHZ1bG5Dcml0aWNhbEZpeGFibGU6IG51bWJlciB8IG51bGw7XG4gICAgdnVsbkhpZ2hGaXhhYmxlOiBudW1iZXIgfCBudWxsO1xuICAgIHNjYW5GbGFnZ2VkQXQ6IHN0cmluZyB8IG51bGw7XG4gICAgc2JvbVVybDogc3RyaW5nIHwgbnVsbDtcbiAgfTtcbiAgYWR2aXNvcmllczoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc2V2ZXJpdHk6IHN0cmluZztcbiAgICBzdW1tYXJ5OiBzdHJpbmc7XG4gICAgYWZmZWN0ZWRSYW5nZTogc3RyaW5nO1xuICAgIGZpeGVkVmVyc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgICBwdWJsaXNoZWRBdDogc3RyaW5nO1xuICAgIC8qKiBTZXJ2ZXItc2FuaXRpemVkIEhUTUwgKHRoZSBzdG9yZWQgcmVuZGVyIG9mIHRoZSBkZXRhaWxzIG1hcmtkb3duKS4gKi9cbiAgICBkZXRhaWxzSHRtbDogc3RyaW5nIHwgbnVsbDtcbiAgICBjdmVJZHM6IHN0cmluZ1tdO1xuICB9W107XG4gIHJhdGluZ0Rpc3RyaWJ1dGlvbjogUmVjb3JkPCcxJyB8ICcyJyB8ICczJyB8ICc0JyB8ICc1JywgbnVtYmVyPiB8IG51bGw7XG4gIC8qKiBUaGUgQmF5ZXNpYW4gcmF0aW5nIG92ZXIgcmV2aWV3cyBvZiB0aGUgbGFzdCB0d28gbWlub3IgdmVyc2lvbnMuICovXG4gIHJlY2VudFJhdGluZzogbnVtYmVyIHwgbnVsbDtcbiAgYWN0aXZlT3JnQ291bnQ6IG51bWJlciB8IG51bGw7XG4gIC8qKiBQZXItY29tcG9uZW50IGhlYWx0aCBzY29yZXMgYmVoaW5kIHtAbGluayBEaXJlY3RvcnlMaXN0aW5nQ2FyZC5oZWFsdGhTY29yZX0uICovXG4gIGhlYWx0aEJyZWFrZG93bjogRGlyZWN0b3J5SGVhbHRoQnJlYWtkb3duIHwgbnVsbDtcbiAgLyoqIDMwLWRheSBydW50aW1lIHN1Y2Nlc3MgcmF0ZSAoMC4uMSksIG9yIG51bGwgd2l0aCBubyBydW5zLiAqL1xuICBzdWNjZXNzUmF0ZTMwZDogbnVtYmVyIHwgbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgUmV2aWV3U29ydCA9ICdoZWxwZnVsJyB8ICdyZWNlbnQnIHwgJ2hpZ2hlc3QnIHwgJ2xvd2VzdCc7XG5leHBvcnQgY29uc3QgUkVWSUVXX1NPUlRTOiByZWFkb25seSBSZXZpZXdTb3J0W10gPSBbJ2hlbHBmdWwnLCAncmVjZW50JywgJ2hpZ2hlc3QnLCAnbG93ZXN0J107XG5leHBvcnQgY29uc3QgUkVWSUVXU19ERUZBVUxUX0xJTUlUID0gMTA7XG5leHBvcnQgY29uc3QgUkVWSUVXU19NQVhfTElNSVQgPSA1MDtcblxuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNSZXZpZXdSZXBseSB7XG4gIGJvZHlIdG1sOiBzdHJpbmc7XG4gIHB1Ymxpc2hlckRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbn1cblxuLyoqIE9uZSBwdWJsaXNoZWQgcmV2aWV3IGFzIHRoZSBkaXJlY3Rvcnkgc2hvd3MgaXQ6IGRpc3BsYXkgbmFtZSBvbmx5LCBuZXZlciBhbiBvcmcuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY1Jldmlld0l0ZW0ge1xuICBpZDogc3RyaW5nO1xuICByYXRpbmc6IG51bWJlcjtcbiAgdGl0bGU6IHN0cmluZyB8IG51bGw7XG4gIGJvZHlIdG1sOiBzdHJpbmcgfCBudWxsO1xuICB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICAvKiogTnVsbCBvbmNlIHRoZSBhdXRob3IncyBhY2NvdW50IHdhcyBkZWxldGVkICh0aGUgcmV2aWV3IGlzIGFub255bWl6ZWQpLiAqL1xuICBhdXRob3I6IHsgZGlzcGxheU5hbWU6IHN0cmluZyB9IHwgbnVsbDtcbiAgdmVyaWZpZWRVc2U6IGJvb2xlYW47XG4gIGhlbHBmdWxDb3VudDogbnVtYmVyO1xuICBlZGl0ZWQ6IGJvb2xlYW47XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbiAgcmVwbHk6IFB1YmxpY1Jldmlld1JlcGx5IHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNSZXZpZXdQYWdlIHtcbiAgcmV2aWV3czogUHVibGljUmV2aWV3SXRlbVtdO1xuICB0b3RhbDogbnVtYmVyO1xuICBuZXh0Q3Vyc29yOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY1Jldmlld1F1ZXJ5IHtcbiAgc29ydD86IFJldmlld1NvcnQ7XG4gIC8qKiBPbmx5IHJldmlld3Mgd2l0aCBleGFjdGx5IHRoaXMgbWFueSBzdGFycy4gKi9cbiAgcmF0aW5nPzogbnVtYmVyO1xuICBjdXJzb3I/OiBzdHJpbmc7XG4gIGxpbWl0PzogbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUm93IG1hcHBpbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBBIGBwdWJsaWNfbGlzdGluZ3NgIHJvdyBhcyB0aGUgcmF3IHF1ZXJpZXMgcmV0dXJuIGl0IChzbmFrZV9jYXNlKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljTGlzdGluZ1JvdyB7XG4gIGlkOiBzdHJpbmc7XG4gIHB1Ymxpc2hlcl9oYW5kbGU6IHN0cmluZztcbiAgcHVibGlzaGVyX2Rpc3BsYXlfbmFtZTogc3RyaW5nO1xuICBwdWJsaXNoZXJfdGllcjogRGlyZWN0b3J5VHJ1c3RUaWVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIHN1bW1hcnk6IHN0cmluZyB8IG51bGw7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xuICByZWFkbWVfaHRtbDogc3RyaW5nIHwgbnVsbDtcbiAgbGljZW5zZTogc3RyaW5nIHwgbnVsbDtcbiAgaG9tZXBhZ2VfdXJsOiBzdHJpbmcgfCBudWxsO1xuICBzb3VyY2VfdXJsOiBzdHJpbmcgfCBudWxsO1xuICBpY29uOiB7IGtleTogc3RyaW5nOyBiYWRnZT86IHN0cmluZyB9IHwgbnVsbDtcbiAgdXBsb2FkZWRfaWNvbjogeyBrZXkyNTY6IHN0cmluZzsga2V5NjQ6IHN0cmluZyB9IHwgbnVsbDtcbiAga2V5d29yZHM6IHN0cmluZ1tdIHwgbnVsbDtcbiAgbGF0ZXN0X3ZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gIHVwZGF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gIHJhdGluZ19iYXllczogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbiAgcmF0aW5nX2NvdW50OiBudW1iZXIgfCBzdHJpbmc7XG4gIHJhdGluZ19kaXN0OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHwgbnVsbDtcbiAgcmVjZW50X3JhdGluZz86IG51bWJlciB8IHN0cmluZyB8IG51bGw7XG4gIGluc3RhbGxfY291bnQ6IG51bWJlciB8IHN0cmluZztcbiAgYWN0aXZlX29yZ19jb3VudDogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbiAgaGVhbHRoX3Njb3JlPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbiAgaGVhbHRoX2JyZWFrZG93bj86IERpcmVjdG9yeUhlYWx0aEJyZWFrZG93biB8IG51bGw7XG4gIHN1Y2Nlc3NfcmF0ZV8zMGQ/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsO1xuICBzdGF0ZTogJ2xpc3RlZCcgfCAndW5tYWludGFpbmVkJztcbn1cblxuZnVuY3Rpb24gbnVtKHY6IG51bWJlciB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBudW1iZXIge1xuICBjb25zdCBuID0gdHlwZW9mIHYgPT09ICdudW1iZXInID8gdiA6IE51bWJlci5wYXJzZUZsb2F0KFN0cmluZyh2ID8/ICcwJykpO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pID8gbiA6IDA7XG59XG5cbmZ1bmN0aW9uIGlzbyh2OiBEYXRlIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGlmICghdikgcmV0dXJuICcnO1xuICByZXR1cm4gdiBpbnN0YW5jZW9mIERhdGUgPyB2LnRvSVNPU3RyaW5nKCkgOiBuZXcgRGF0ZSh2KS50b0lTT1N0cmluZygpO1xufVxuXG4vKipcbiAqIFRoZSBpY29uIGZhbGxiYWNrIGNoYWluOiB1cGxvYWRlZCAoaWYgdGhlIHRpZXIgbWF5IHVwbG9hZCkg4oaSIGN1cmF0ZWRcbiAqIHZlbmRvciBrZXkgKE9mZmljaWFsLCBhbmQgVmVyaWZpZWQgcHVibGlzaGVycyBmb3IgbWFya3MgdGhleSBvd24g4oCUIG93bmVyc2hpcFxuICogaXMgY2hlY2tlZCB3aGVuIHRoZSBpY29uIGlzIGFwcHJvdmVkKSDihpIgbW9ub2dyYW0uIENvbW11bml0eSBhbmQgYW5vbnltb3VzXG4gKiBsaXN0aW5ncyBjYW4gbmV2ZXIgc2hvdyBhIGN1cmF0ZWQgdmVuZG9yIG1hcmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTGlzdGluZ0ljb24ocm93OiBQaWNrPFB1YmxpY0xpc3RpbmdSb3csICdwdWJsaXNoZXJfdGllcicgfCAnaWNvbicgfCAndXBsb2FkZWRfaWNvbic+KTogUGljazxcbiAgRGlyZWN0b3J5TGlzdGluZ0NhcmQsICdpY29uS2luZCcgfCAnaWNvblVybCcgfCAnaWNvbktleScgfCAnaWNvbkJhZGdlJyB8ICdpY29uSGV4J1xuPiB7XG4gIGNvbnN0IG5vbmUgPSB7IGljb25Vcmw6IG51bGwsIGljb25LZXk6IG51bGwsIGljb25CYWRnZTogbnVsbCwgaWNvbkhleDogbnVsbCB9O1xuICBpZiAocm93LnVwbG9hZGVkX2ljb24/LmtleTI1Nikge1xuICAgIHJldHVybiB7IC4uLm5vbmUsIGljb25LaW5kOiAndXBsb2FkZWQnLCBpY29uVXJsOiBgL2FwaS9wdWJsaWMvcGx1Z2lucy9pY29ucy8ke2VuY29kZVVSSUNvbXBvbmVudChyb3cudXBsb2FkZWRfaWNvbi5rZXkyNTYpfWAgfTtcbiAgfVxuICBjb25zdCBjdXJhdGVkQWxsb3dlZCA9IHJvdy5wdWJsaXNoZXJfdGllciA9PT0gJ29mZmljaWFsJyB8fCByb3cucHVibGlzaGVyX3RpZXIgPT09ICd2ZXJpZmllZCc7XG4gIGlmIChjdXJhdGVkQWxsb3dlZCAmJiByb3cuaWNvbj8ua2V5KSB7XG4gICAgcmV0dXJuIHsgLi4ubm9uZSwgaWNvbktpbmQ6ICd2ZW5kb3InLCBpY29uS2V5OiByb3cuaWNvbi5rZXksIGljb25CYWRnZTogcm93Lmljb24uYmFkZ2UgPz8gbnVsbCB9O1xuICB9XG4gIHJldHVybiB7IC4uLm5vbmUsIGljb25LaW5kOiAnbW9ub2dyYW0nIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0xpc3RpbmdDYXJkKHJvdzogUHVibGljTGlzdGluZ1Jvdyk6IERpcmVjdG9yeUxpc3RpbmdDYXJkIHtcbiAgY29uc3QgcmF0aW5nQ291bnQgPSBudW0ocm93LnJhdGluZ19jb3VudCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiB7IGhhbmRsZTogcm93LnB1Ymxpc2hlcl9oYW5kbGUsIGRpc3BsYXlOYW1lOiByb3cucHVibGlzaGVyX2Rpc3BsYXlfbmFtZSwgdGllcjogcm93LnB1Ymxpc2hlcl90aWVyIH0sXG4gICAgbmFtZTogcm93Lm5hbWUsXG4gICAgc3VtbWFyeTogcm93LnN1bW1hcnkgPz8gJycsXG4gICAgY2F0ZWdvcnk6IHJvdy5jYXRlZ29yeSxcbiAgICBrZXl3b3Jkczogcm93LmtleXdvcmRzID8/IFtdLFxuICAgIGxhdGVzdFZlcnNpb246IHJvdy5sYXRlc3RfdmVyc2lvbiA/PyAnJyxcbiAgICBsaWNlbnNlOiByb3cubGljZW5zZSA/PyAnJyxcbiAgICAuLi5yZXNvbHZlTGlzdGluZ0ljb24ocm93KSxcbiAgICByYXRpbmc6IHJhdGluZ0NvdW50ID4gMCAmJiByb3cucmF0aW5nX2JheWVzICE9IG51bGwgPyB7IHNjb3JlOiBNYXRoLnJvdW5kKG51bShyb3cucmF0aW5nX2JheWVzKSAqIDEwMCkgLyAxMDAsIGNvdW50OiByYXRpbmdDb3VudCB9IDogbnVsbCxcbiAgICBpbnN0YWxsQ291bnQ6IG51bShyb3cuaW5zdGFsbF9jb3VudCksXG4gICAgaGVhbHRoU2NvcmU6IHJvdy5oZWFsdGhfc2NvcmUgPT0gbnVsbCA/IG51bGwgOiBNYXRoLnJvdW5kKG51bShyb3cuaGVhbHRoX3Njb3JlKSksXG4gICAgdXBkYXRlZEF0OiBpc28ocm93LnVwZGF0ZWRfYXQpLFxuICAgIHN0YXRlOiByb3cuc3RhdGUsXG4gIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZWFyY2hcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBOb3JtYWxpemUgdGhlIHVzZXIncyBxdWVyeTogY29sbGFwc2Ugd2hpdGVzcGFjZSwgY2FwIHRoZSBsZW5ndGguICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUXVlcnkocTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgcmV0dXJuIChxID8/ICcnKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpLnNsaWNlKDAsIERJUkVDVE9SWV9NQVhfUVVFUllfTEVOR1RIKTtcbn1cblxuLyoqIFNlYXJjaCB0ZXJtcyBmb3IgaGlnaGxpZ2h0aW5nOiB3b3JkcyBvZiDiiaUgMiBjaGFyYWN0ZXJzLCByZWdleC1lc2NhcGVkLiAqL1xuZnVuY3Rpb24gaGlnaGxpZ2h0VGVybXMocTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gWy4uLm5ldyBTZXQocS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXmEtejAtOS5fLV0rLykuZmlsdGVyKCh0KSA9PiB0Lmxlbmd0aCA+PSAyKSldXG4gICAgLm1hcCgodCkgPT4gdC5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpKTtcbn1cblxuLyoqXG4gKiBXcmFwIG1hdGNoZWQgdGVybXMgaW4gYDxtYXJrPmAuIFRoZSBmcm9udGVuZCByZW5kZXJzIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZVxuICogYDxtYXJrPmAgbWFya2VycyBhcyBURVhUIChuZXZlciBIVE1MKSwgc28gdGhlIHNvdXJjZSB0ZXh0IGlzIG5vdCBlc2NhcGVkIGhlcmUuXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIG5vdGhpbmcgbWF0Y2hlZCAodGhlIGNhcmQgdGhlbiByZW5kZXJzIHBsYWluIHRleHQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlnaGxpZ2h0VGV4dCh0ZXh0OiBzdHJpbmcsIHE6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRlcm1zID0gaGlnaGxpZ2h0VGVybXMocSk7XG4gIGlmICghdGV4dCB8fCB0ZXJtcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgKCR7dGVybXMuam9pbignfCcpfSlgLCAnZ2knKTtcbiAgaWYgKCFyZS50ZXN0KHRleHQpKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKHJlLCAnPG1hcms+JDE8L21hcms+Jyk7XG59XG5cbi8qKiBPcGFxdWUgY3Vyc29yOiBhbiBvZmZzZXQsIGJhc2U2NHVybC1lbmNvZGVkIHNvIGNsaWVudHMgZG9uJ3QgZGVwZW5kIG9uIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU9mZnNldEN1cnNvcihvZmZzZXQ6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeSh7IG86IG9mZnNldCB9KSkudG9TdHJpbmcoJ2Jhc2U2NHVybCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlT2Zmc2V0Q3Vyc29yKGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgaWYgKCFjdXJzb3IpIHJldHVybiAwO1xuICB0cnkge1xuICAgIGNvbnN0IG8gPSAoSlNPTi5wYXJzZShCdWZmZXIuZnJvbShjdXJzb3IsICdiYXNlNjR1cmwnKS50b1N0cmluZygndXRmOCcpKSBhcyB7IG8/OiB1bmtub3duIH0pLm87XG4gICAgcmV0dXJuIHR5cGVvZiBvID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNJbnRlZ2VyKG8pICYmIG8gPj0gMCAmJiBvIDw9IDEwXzAwMCA/IG8gOiAwO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbGFtcExpbWl0KGxpbWl0OiBudW1iZXIgfCB1bmRlZmluZWQpOiBudW1iZXIge1xuICBpZiAoIWxpbWl0IHx8ICFOdW1iZXIuaXNGaW5pdGUobGltaXQpKSByZXR1cm4gRElSRUNUT1JZX0RFRkFVTFRfTElNSVQ7XG4gIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChNYXRoLnRydW5jKGxpbWl0KSwgMSksIERJUkVDVE9SWV9NQVhfTElNSVQpO1xufVxuXG4vKipcbiAqIFRoZSBmaWx0ZXJlZCBiYXNlIHNldCBhcyBhIENURSBib2R5LiBFdmVyeSBzZWFyY2gsIGZhY2V0IGFuZCBjYXRlZ29yeSBxdWVyeVxuICogcmVhZHMgdGhyb3VnaCB0aGlzLCBzbyB0aGV5IGNhbid0IGRpc2FncmVlIGFib3V0IHdoYXQncyB2aXNpYmxlLlxuICovXG5mdW5jdGlvbiBiYXNlUXVlcnkocGFyYW1zOiBEaXJlY3RvcnlTZWFyY2hQYXJhbXMsIHE6IHN0cmluZyk6IFNRTCB7XG4gIGNvbnN0IHdoZXJlOiBTUUxbXSA9IFtzcWxgbC5wYXVzZWRfYXQgSVMgTlVMTGBdO1xuICBpZiAocSkge1xuICAgIC8vIEZ1bGwgdGV4dCwgT1IgYSBmdXp6eSBtYXRjaCBhZ2FpbnN0IHRoZSBiZXN0LW1hdGNoaW5nIFBBUlQgb2YgdGhlIG5hbWVcbiAgICAvLyAod29yZF9zaW1pbGFyaXR5OiBcInRlcmFmcm9tXCIg4oaSIHRlcnJhZm9ybS1wbGFuIHNjb3JlcyAwLjM2LCB3aGlsZSB1bnJlbGF0ZWRcbiAgICAvLyB3b3JkcyBzdGF5IOKJpCAwLjIg4oCUIHdob2xlLW5hbWUgc2ltaWxhcml0eSgpIGRpbHV0ZXMgYSBsb25nIG5hbWUgYmVsb3cgYW55XG4gICAgLy8gdXNlZnVsIHRocmVzaG9sZCkuIEV4cGxpY2l0IGZ1bmN0aW9uLCBub3QgdGhlIGA8JWAgb3BlcmF0b3IsIHNvIHRoZSBjdXQtb2ZmXG4gICAgLy8gZG9lc24ndCBkZXBlbmQgb24gYSBzZXNzaW9uIEdVQyBwZ2JvdW5jZXIgY2FuJ3QgY2FycnkuIEEgc2VxIHNjYW4gb3ZlciB0aGVcbiAgICAvLyBwdWJsaWMgbGlzdGluZ3MgKHRob3VzYW5kcyBvZiByb3dzIGF0IG1vc3QpIGlzIGZpbmUuXG4gICAgd2hlcmUucHVzaChzcWxgKGwuc2VhcmNoX3ZlY3RvciBAQCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICR7cX0pIE9SIHdvcmRfc2ltaWxhcml0eSgke3F9LCBsLm5hbWUpID49ICR7RlVaWllfTkFNRV9USFJFU0hPTER9IE9SIGwubmFtZSBJTElLRSAke2AlJHtxLnJlcGxhY2UoL1tcXFxcJV9dL2csICdcXFxcJCYnKX0lYH0pYCk7XG4gIH1cbiAgaWYgKHBhcmFtcy5jYXRlZ29yeSkgd2hlcmUucHVzaChzcWxgbC5jYXRlZ29yeSA9ICR7cGFyYW1zLmNhdGVnb3J5fWApO1xuICBpZiAocGFyYW1zLnRpZXIpIHdoZXJlLnB1c2goc3FsYGwucHVibGlzaGVyX3RpZXIgPSAke3BhcmFtcy50aWVyfWApO1xuICBpZiAocGFyYW1zLmxpY2Vuc2UpIHdoZXJlLnB1c2goc3FsYGwubGljZW5zZSA9ICR7cGFyYW1zLmxpY2Vuc2V9YCk7XG4gIGlmIChwYXJhbXMuY29tcHV0ZVR5cGUpIHdoZXJlLnB1c2goc3FsYHYuY29tcHV0ZV90eXBlID0gJHtwYXJhbXMuY29tcHV0ZVR5cGV9YCk7XG4gIGlmIChwYXJhbXMubmVlZHNTZWNyZXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB3aGVyZS5wdXNoKHBhcmFtcy5uZWVkc1NlY3JldHNcbiAgICAgID8gc3FsYGpzb25iX2FycmF5X2xlbmd0aChDT0FMRVNDRSh2LnNlY3JldHMsICdbXSc6Ompzb25iKSkgPiAwYFxuICAgICAgOiBzcWxganNvbmJfYXJyYXlfbGVuZ3RoKENPQUxFU0NFKHYuc2VjcmV0cywgJ1tdJzo6anNvbmIpKSA9IDBgKTtcbiAgfVxuICBpZiAocGFyYW1zLm1pblJhdGluZyAhPT0gdW5kZWZpbmVkICYmIE51bWJlci5pc0Zpbml0ZShwYXJhbXMubWluUmF0aW5nKSkge1xuICAgIHdoZXJlLnB1c2goc3FsYGwucmF0aW5nX2JheWVzID49ICR7cGFyYW1zLm1pblJhdGluZ31gKTtcbiAgfVxuICBjb25zdCByYW5rID0gcVxuICAgID8gc3FsYCh0c19yYW5rKGwuc2VhcmNoX3ZlY3Rvciwgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAke3F9KSkgKyB3b3JkX3NpbWlsYXJpdHkoJHtxfSwgbC5uYW1lKSlgXG4gICAgOiBzcWxgMDo6cmVhbGA7XG4gIHJldHVybiBzcWxgXG4gICAgU0VMRUNUIGwuaWQsIGwucHVibGlzaGVyX2hhbmRsZSwgbC5wdWJsaXNoZXJfZGlzcGxheV9uYW1lLCBsLnB1Ymxpc2hlcl90aWVyLCBsLm5hbWUsIGwuY2F0ZWdvcnksXG4gICAgICAgICAgIGwuc3VtbWFyeSwgbC5kZXNjcmlwdGlvbiwgbC5yZWFkbWVfaHRtbCwgbC5saWNlbnNlLCBsLmhvbWVwYWdlX3VybCwgbC5zb3VyY2VfdXJsLCBsLmljb24sXG4gICAgICAgICAgIGwudXBsb2FkZWRfaWNvbiwgbC5rZXl3b3JkcywgbC5sYXRlc3RfdmVyc2lvbiwgbC51cGRhdGVkX2F0LCBsLnJhdGluZ19iYXllcywgbC5yYXRpbmdfY291bnQsXG4gICAgICAgICAgIGwucmF0aW5nX2Rpc3QsIGwuaW5zdGFsbF9jb3VudCwgbC5hY3RpdmVfb3JnX2NvdW50LCBsLmhlYWx0aF9zY29yZSwgbC5zdGF0ZSxcbiAgICAgICAgICAgdi5jb21wdXRlX3R5cGUsXG4gICAgICAgICAgIChqc29uYl9hcnJheV9sZW5ndGgoQ09BTEVTQ0Uodi5zZWNyZXRzLCAnW10nOjpqc29uYikpID4gMCkgQVMgbmVlZHNfc2VjcmV0cyxcbiAgICAgICAgICAgJHtyYW5rfSBBUyByYW5rXG4gICAgICBGUk9NIHB1YmxpY19saXN0aW5ncyBsXG4gICAgICBMRUZUIEpPSU4gTEFURVJBTCAoXG4gICAgICAgIFNFTEVDVCBwdi5jb21wdXRlX3R5cGUsIHB2LnNlY3JldHNcbiAgICAgICAgICBGUk9NIHB1YmxpY19saXN0ZWRfdmVyc2lvbnMgcHZcbiAgICAgICAgIFdIRVJFIHB2Lmxpc3RpbmdfaWQgPSBsLmlkIEFORCBwdi52ZXJzaW9uID0gbC5sYXRlc3RfdmVyc2lvbiBBTkQgTk9UIHB2LnlhbmtlZFxuICAgICAgICAgTElNSVQgMVxuICAgICAgKSB2IE9OIHRydWVcbiAgICAgV0hFUkUgJHtzcWwuam9pbih3aGVyZSwgc3FsYCBBTkQgYCl9YDtcbn1cblxuZnVuY3Rpb24gb3JkZXJCeShzb3J0OiBEaXJlY3RvcnlTb3J0LCBoYXNRdWVyeTogYm9vbGVhbik6IFNRTCB7XG4gIHN3aXRjaCAoc29ydCA9PT0gJ3JlbGV2YW5jZScgJiYgIWhhc1F1ZXJ5ID8gJ3VwZGF0ZWQnIDogc29ydCkge1xuICAgIGNhc2UgJ3JlbGV2YW5jZSc6XG4gICAgICAvLyBUZXh0IHJlbGV2YW5jZSBmaXJzdCwgbnVkZ2VkIGJ5IHJhdGluZyBhbmQgYWRvcHRpb24gc28gZXF1YWwgbWF0Y2hlc1xuICAgICAgLy8gZmF2b3VyIHByb3ZlbiBwbHVnaW5zLlxuICAgICAgcmV0dXJuIHNxbGAocmFuayAqICgxICsgQ09BTEVTQ0UocmF0aW5nX2JheWVzLCAwKSAvIDEwKSArIGxuKDEgKyBpbnN0YWxsX2NvdW50KSAvIDIwKSBERVNDLCBuYW1lIEFTQ2A7XG4gICAgY2FzZSAncmF0aW5nJzpcbiAgICAgIHJldHVybiBzcWxgcmF0aW5nX2JheWVzIERFU0MgTlVMTFMgTEFTVCwgcmF0aW5nX2NvdW50IERFU0MsIG5hbWUgQVNDYDtcbiAgICBjYXNlICdpbnN0YWxscyc6XG4gICAgICByZXR1cm4gc3FsYGluc3RhbGxfY291bnQgREVTQywgbmFtZSBBU0NgO1xuICAgIGNhc2UgJ25hbWUnOlxuICAgICAgcmV0dXJuIHNxbGBuYW1lIEFTQywgcHVibGlzaGVyX2hhbmRsZSBBU0NgO1xuICAgIGNhc2UgJ2hlYWx0aCc6XG4gICAgICByZXR1cm4gc3FsYGhlYWx0aF9zY29yZSBERVNDIE5VTExTIExBU1QsIGluc3RhbGxfY291bnQgREVTQywgbmFtZSBBU0NgO1xuICAgIGNhc2UgJ3VwZGF0ZWQnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3FsYHVwZGF0ZWRfYXQgREVTQywgbmFtZSBBU0NgO1xuICB9XG59XG5cbi8qKiBTZWFyY2ggdGhlIGRpcmVjdG9yeTogb25lIHBhZ2Ugb2YgY2FyZHMsIGZhY2V0IGNvdW50cywgdG90YWwgYW5kIG5leHQgY3Vyc29yLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlYXJjaFB1YmxpY0xpc3RpbmdzKHBhcmFtczogRGlyZWN0b3J5U2VhcmNoUGFyYW1zKTogUHJvbWlzZTxEaXJlY3RvcnlTZWFyY2hSZXN1bHQ+IHtcbiAgY29uc3QgZGIgPSBnZXRQdWJsaWNSZWFkZXJEYigpO1xuICBjb25zdCBxID0gbm9ybWFsaXplUXVlcnkocGFyYW1zLnEpO1xuICBjb25zdCBsaW1pdCA9IGNsYW1wTGltaXQocGFyYW1zLmxpbWl0KTtcbiAgY29uc3Qgb2Zmc2V0ID0gZGVjb2RlT2Zmc2V0Q3Vyc29yKHBhcmFtcy5jdXJzb3IpO1xuICBjb25zdCBzb3J0ID0gcGFyYW1zLnNvcnQgJiYgRElSRUNUT1JZX1NPUlRTLmluY2x1ZGVzKHBhcmFtcy5zb3J0KSA/IHBhcmFtcy5zb3J0IDogJ3JlbGV2YW5jZSc7XG4gIGNvbnN0IGJhc2UgPSBiYXNlUXVlcnkocGFyYW1zLCBxKTtcblxuICBjb25zdCBbcGFnZVJlcywgZmFjZXRSZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGRiLmV4ZWN1dGUoc3FsYFxuICAgICAgV0lUSCBiYXNlIEFTICgke2Jhc2V9KVxuICAgICAgU0VMRUNUIGJhc2UuKiwgQ09VTlQoKikgT1ZFUiAoKSBBUyB0b3RhbFxuICAgICAgICBGUk9NIGJhc2VcbiAgICAgICBPUkRFUiBCWSAke29yZGVyQnkoc29ydCwgcSAhPT0gJycpfVxuICAgICAgIExJTUlUICR7bGltaXR9IE9GRlNFVCAke29mZnNldH1gKSxcbiAgICBkYi5leGVjdXRlKHNxbGBcbiAgICAgIFdJVEggYmFzZSBBUyAoJHtiYXNlfSlcbiAgICAgIFNFTEVDVCBjYXRlZ29yeSwgcHVibGlzaGVyX3RpZXIsIGxpY2Vuc2UsIGNvbXB1dGVfdHlwZSwgbmVlZHNfc2VjcmV0cyxcbiAgICAgICAgICAgICBHUk9VUElORyhjYXRlZ29yeSkgQVMgZ19jYXRlZ29yeSwgR1JPVVBJTkcocHVibGlzaGVyX3RpZXIpIEFTIGdfdGllcixcbiAgICAgICAgICAgICBHUk9VUElORyhsaWNlbnNlKSBBUyBnX2xpY2Vuc2UsIEdST1VQSU5HKGNvbXB1dGVfdHlwZSkgQVMgZ19jb21wdXRlLFxuICAgICAgICAgICAgIEdST1VQSU5HKG5lZWRzX3NlY3JldHMpIEFTIGdfc2VjcmV0cyxcbiAgICAgICAgICAgICBDT1VOVCgqKSBBUyBuXG4gICAgICAgIEZST00gYmFzZVxuICAgICAgIEdST1VQIEJZIEdST1VQSU5HIFNFVFMgKChjYXRlZ29yeSksIChwdWJsaXNoZXJfdGllciksIChsaWNlbnNlKSwgKGNvbXB1dGVfdHlwZSksIChuZWVkc19zZWNyZXRzKSlgKSxcbiAgXSk7XG5cbiAgY29uc3QgcGFnZSA9IHJlc3VsdFJvd3M8UHVibGljTGlzdGluZ1JvdyAmIHsgdG90YWw6IG51bWJlciB8IHN0cmluZyB9PihwYWdlUmVzKTtcbiAgY29uc3QgdG90YWwgPSBwYWdlLmxlbmd0aCA+IDAgPyBudW0ocGFnZVswXSEudG90YWwpIDogMDtcbiAgY29uc3QgaXRlbXMgPSBwYWdlLm1hcCgocm93KSA9PiB7XG4gICAgY29uc3QgY2FyZCA9IHRvTGlzdGluZ0NhcmQocm93KTtcbiAgICBpZiAocSkge1xuICAgICAgY29uc3QgaGlnaGxpZ2h0ID0geyBuYW1lOiBoaWdobGlnaHRUZXh0KGNhcmQubmFtZSwgcSksIHN1bW1hcnk6IGhpZ2hsaWdodFRleHQoY2FyZC5zdW1tYXJ5LCBxKSB9O1xuICAgICAgaWYgKGhpZ2hsaWdodC5uYW1lIHx8IGhpZ2hsaWdodC5zdW1tYXJ5KSBjYXJkLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgICB9XG4gICAgcmV0dXJuIGNhcmQ7XG4gIH0pO1xuXG4gIGNvbnN0IGZhY2V0czogRGlyZWN0b3J5U2VhcmNoUmVzdWx0WydmYWNldHMnXSA9IHtcbiAgICBjYXRlZ29yeToge30sIHRpZXI6IHt9LCBsaWNlbnNlOiB7fSwgY29tcHV0ZVR5cGU6IHt9LCBuZWVkc1NlY3JldHM6IHsgdHJ1ZTogMCwgZmFsc2U6IDAgfSxcbiAgfTtcbiAgdHlwZSBGYWNldFJvdyA9IHtcbiAgICBjYXRlZ29yeTogc3RyaW5nIHwgbnVsbDtcbiAgICBwdWJsaXNoZXJfdGllcjogc3RyaW5nIHwgbnVsbDtcbiAgICBsaWNlbnNlOiBzdHJpbmcgfCBudWxsO1xuICAgIGNvbXB1dGVfdHlwZTogc3RyaW5nIHwgbnVsbDtcbiAgICBuZWVkc19zZWNyZXRzOiBib29sZWFuIHwgbnVsbDtcbiAgICBnX2NhdGVnb3J5OiBudW1iZXI7XG4gICAgZ190aWVyOiBudW1iZXI7XG4gICAgZ19saWNlbnNlOiBudW1iZXI7XG4gICAgZ19jb21wdXRlOiBudW1iZXI7XG4gICAgZ19zZWNyZXRzOiBudW1iZXI7XG4gICAgbjogbnVtYmVyIHwgc3RyaW5nO1xuICB9O1xuICBmb3IgKGNvbnN0IHIgb2YgcmVzdWx0Um93czxGYWNldFJvdz4oZmFjZXRSZXMpKSB7XG4gICAgY29uc3QgbiA9IG51bShyLm4pO1xuICAgIGlmIChOdW1iZXIoci5nX2NhdGVnb3J5KSA9PT0gMCAmJiByLmNhdGVnb3J5KSBmYWNldHMuY2F0ZWdvcnlbci5jYXRlZ29yeV0gPSBuO1xuICAgIGVsc2UgaWYgKE51bWJlcihyLmdfdGllcikgPT09IDAgJiYgci5wdWJsaXNoZXJfdGllcikgZmFjZXRzLnRpZXJbci5wdWJsaXNoZXJfdGllcl0gPSBuO1xuICAgIGVsc2UgaWYgKE51bWJlcihyLmdfbGljZW5zZSkgPT09IDAgJiYgci5saWNlbnNlKSBmYWNldHMubGljZW5zZVtyLmxpY2Vuc2VdID0gbjtcbiAgICBlbHNlIGlmIChOdW1iZXIoci5nX2NvbXB1dGUpID09PSAwICYmIHIuY29tcHV0ZV90eXBlKSBmYWNldHMuY29tcHV0ZVR5cGVbci5jb21wdXRlX3R5cGVdID0gbjtcbiAgICBlbHNlIGlmIChOdW1iZXIoci5nX3NlY3JldHMpID09PSAwICYmIHIubmVlZHNfc2VjcmV0cyAhPT0gbnVsbCkgZmFjZXRzLm5lZWRzU2VjcmV0c1tyLm5lZWRzX3NlY3JldHMgPyAndHJ1ZScgOiAnZmFsc2UnXSA9IG47XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGl0ZW1zLFxuICAgIGZhY2V0cyxcbiAgICB0b3RhbCxcbiAgICBuZXh0Q3Vyc29yOiBvZmZzZXQgKyBpdGVtcy5sZW5ndGggPCB0b3RhbCA/IGVuY29kZU9mZnNldEN1cnNvcihvZmZzZXQgKyBpdGVtcy5sZW5ndGgpIDogbnVsbCxcbiAgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENhdGVnb3JpZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBFdmVyeSBjYXRlZ29yeSB3aXRoIGl0cyBsaXZlIGNvdW50IGFuZCBpdHMgdG9wIGxpc3RpbmdzIChieSByYXRpbmcsIHRoZW4gaW5zdGFsbHMpLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RQdWJsaWNDYXRlZ29yaWVzKHRvcFBlckNhdGVnb3J5ID0gMyk6IFByb21pc2U8RGlyZWN0b3J5Q2F0ZWdvcnlTdW1tYXJ5W10+IHtcbiAgY29uc3QgZGIgPSBnZXRQdWJsaWNSZWFkZXJEYigpO1xuICBjb25zdCByZXMgPSBhd2FpdCBkYi5leGVjdXRlKHNxbGBcbiAgICBXSVRIIHJhbmtlZCBBUyAoXG4gICAgICBTRUxFQ1QgbC4qLFxuICAgICAgICAgICAgIFJPV19OVU1CRVIoKSBPVkVSIChQQVJUSVRJT04gQlkgbC5jYXRlZ29yeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUkRFUiBCWSBsLnJhdGluZ19iYXllcyBERVNDIE5VTExTIExBU1QsIGwuaW5zdGFsbF9jb3VudCBERVNDLCBsLm5hbWUgQVNDKSBBUyBybixcbiAgICAgICAgICAgICBDT1VOVCgqKSBPVkVSIChQQVJUSVRJT04gQlkgbC5jYXRlZ29yeSkgQVMgY2F0ZWdvcnlfY291bnRcbiAgICAgICAgRlJPTSBwdWJsaWNfbGlzdGluZ3MgbFxuICAgICAgIFdIRVJFIGwucGF1c2VkX2F0IElTIE5VTExcbiAgICApXG4gICAgU0VMRUNUICogRlJPTSByYW5rZWQgV0hFUkUgcm4gPD0gJHtNYXRoLm1heCgwLCBNYXRoLm1pbih0b3BQZXJDYXRlZ29yeSwgMTApKX0gT1JERVIgQlkgY2F0ZWdvcnkgQVNDLCBybiBBU0NgKTtcblxuICBjb25zdCBieUNhdGVnb3J5ID0gbmV3IE1hcDxzdHJpbmcsIERpcmVjdG9yeUNhdGVnb3J5U3VtbWFyeT4oKTtcbiAgZm9yIChjb25zdCByb3cgb2YgcmVzdWx0Um93czxQdWJsaWNMaXN0aW5nUm93ICYgeyBjYXRlZ29yeV9jb3VudDogbnVtYmVyIHwgc3RyaW5nIH0+KHJlcykpIHtcbiAgICBsZXQgc3VtbWFyeSA9IGJ5Q2F0ZWdvcnkuZ2V0KHJvdy5jYXRlZ29yeSk7XG4gICAgaWYgKCFzdW1tYXJ5KSB7XG4gICAgICBzdW1tYXJ5ID0geyBpZDogcm93LmNhdGVnb3J5LCBjb3VudDogbnVtKHJvdy5jYXRlZ29yeV9jb3VudCksIHRvcDogW10gfTtcbiAgICAgIGJ5Q2F0ZWdvcnkuc2V0KHJvdy5jYXRlZ29yeSwgc3VtbWFyeSk7XG4gICAgfVxuICAgIHN1bW1hcnkudG9wLnB1c2godG9MaXN0aW5nQ2FyZChyb3cpKTtcbiAgfVxuICByZXR1cm4gWy4uLmJ5Q2F0ZWdvcnkudmFsdWVzKCldO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gT25lIGxpc3Rpbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnR5cGUgVmVyc2lvblJvdyA9IHtcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBwdWJsaXNoZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gIGJyZWFraW5nOiBib29sZWFuO1xuICBkZXByZWNhdGVkX2F0OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbiAgZGVwcmVjYXRpb25fbWVzc2FnZTogc3RyaW5nIHwgbnVsbDtcbiAgeWFua2VkOiBib29sZWFuO1xuICBjaGFuZ2Vsb2c6IHN0cmluZyB8IG51bGw7XG4gIHZ1bG5fY3JpdGljYWw6IG51bWJlciB8IG51bGw7XG4gIHZ1bG5faGlnaDogbnVtYmVyIHwgbnVsbDtcbiAgdnVsbl9jcml0aWNhbF9maXhhYmxlOiBudW1iZXIgfCBudWxsO1xuICB2dWxuX2hpZ2hfZml4YWJsZTogbnVtYmVyIHwgbnVsbDtcbiAgc2Nhbm5lZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gIHNjYW5fZmxhZ2dlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gIGltYWdlX2RpZ2VzdDogc3RyaW5nIHwgbnVsbDtcbiAgaW1hZ2Vfc291cmNlOiBzdHJpbmcgfCBudWxsO1xuICBwbHVnaW5fdHlwZTogc3RyaW5nIHwgbnVsbDtcbiAgY29tcHV0ZV90eXBlOiBzdHJpbmcgfCBudWxsO1xuICBzZWNyZXRzOiB7IG5hbWU6IHN0cmluZzsgcmVxdWlyZWQ6IGJvb2xlYW47IGRlc2NyaXB0aW9uPzogc3RyaW5nIH1bXSB8IG51bGw7XG4gIHJlcXVpcmVkX21ldGFkYXRhOiBzdHJpbmdbXSB8IG51bGw7XG4gIHJlcXVpcmVkX3ZhcnM6IHN0cmluZ1tdIHwgbnVsbDtcbiAgbmV0d29ya19lZ3Jlc3M6IHN0cmluZ1tdIHwgbnVsbDtcbiAgcmVhZG1lX2h0bWw6IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIEFkdmlzb3J5Um93ID0ge1xuICBpZDogc3RyaW5nO1xuICBzZXZlcml0eTogc3RyaW5nO1xuICBzdW1tYXJ5OiBzdHJpbmc7XG4gIGFmZmVjdGVkX3JhbmdlOiBzdHJpbmc7XG4gIGZpeGVkX3ZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gIHB1Ymxpc2hlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gIGRldGFpbHNfaHRtbDogc3RyaW5nIHwgbnVsbDtcbiAgY3ZlX2lkczogc3RyaW5nW10gfCBudWxsO1xufTtcblxuLyoqXG4gKiBPbmUgbGlzdGluZydzIHBhZ2UgZGF0YSwgb3IgbnVsbCB3aGVuIGl0IGlzbid0IHB1YmxpYyAodW5rbm93biwgc3VzcGVuZGVkLFxuICogdHJhbnNmZXJyZWQsIHBhdXNlZCBieSBpdHMgcHVibGlzaGVyIOKAlCBvciBpdHMgcHVibGlzaGVyIGlzIHN1c3BlbmRlZCkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQdWJsaWNMaXN0aW5nKHB1Ymxpc2hlckhhbmRsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBQcm9taXNlPERpcmVjdG9yeUxpc3RpbmdEZXRhaWwgfCBudWxsPiB7XG4gIGNvbnN0IGRiID0gZ2V0UHVibGljUmVhZGVyRGIoKTtcbiAgY29uc3QgbGlzdGluZ1JlcyA9IGF3YWl0IGRiLmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVCAqIEZST00gcHVibGljX2xpc3RpbmdzXG4gICAgIFdIRVJFIHB1Ymxpc2hlcl9oYW5kbGUgPSAke3B1Ymxpc2hlckhhbmRsZX0gQU5EIG5hbWUgPSAke25hbWV9IEFORCBwYXVzZWRfYXQgSVMgTlVMTFxuICAgICBMSU1JVCAxYCk7XG4gIGNvbnN0IHJvdyA9IHJlc3VsdFJvd3M8UHVibGljTGlzdGluZ1Jvdz4obGlzdGluZ1JlcylbMF07XG4gIGlmICghcm93KSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBbdmVyc2lvblJlcywgYWR2aXNvcnlSZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGRiLmV4ZWN1dGUoc3FsYFNFTEVDVCAqIEZST00gcHVibGljX2xpc3RlZF92ZXJzaW9ucyBXSEVSRSBsaXN0aW5nX2lkID0gJHtyb3cuaWR9YCksXG4gICAgZGIuZXhlY3V0ZShzcWxgU0VMRUNUICogRlJPTSBwdWJsaWNfYWR2aXNvcmllcyBXSEVSRSBsaXN0aW5nX2lkID0gJHtyb3cuaWR9IE9SREVSIEJZIHB1Ymxpc2hlZF9hdCBERVNDYCksXG4gIF0pO1xuICBjb25zdCB2ZXJzaW9uUm93cyA9IHJlc3VsdFJvd3M8VmVyc2lvblJvdz4odmVyc2lvblJlcykuc29ydCgoYSwgYikgPT4gY29tcGFyZVNlbXZlcihiLnZlcnNpb24sIGEudmVyc2lvbikpO1xuICBjb25zdCBhZHZpc29yeVJvd3MgPSByZXN1bHRSb3dzPEFkdmlzb3J5Um93PihhZHZpc29yeVJlcyk7XG4gIC8vIFRoZSB2ZXJzaW9uIHRoZSBwYWdlIGRlc2NyaWJlczogdGhlIGxpc3RpbmcncyBsYXRlc3QsIGVsc2UgdGhlIG5ld2VzdCBub24teWFua2VkIG9uZS5cbiAgY29uc3QgY3VycmVudCA9IHZlcnNpb25Sb3dzLmZpbmQoKHYpID0+IHYudmVyc2lvbiA9PT0gcm93LmxhdGVzdF92ZXJzaW9uICYmICF2LnlhbmtlZClcbiAgICA/PyB2ZXJzaW9uUm93cy5maW5kKCh2KSA9PiAhdi55YW5rZWQpXG4gICAgPz8gbnVsbDtcblxuICBjb25zdCBkaXN0ID0gcm93LnJhdGluZ19kaXN0ID8/IG51bGw7XG4gIGNvbnN0IGNhcmQgPSB0b0xpc3RpbmdDYXJkKHJvdyk7XG4gIHJldHVybiB7XG4gICAgLi4uY2FyZCxcbiAgICByZWFkbWVIdG1sOiByb3cucmVhZG1lX2h0bWwgPz8gY3VycmVudD8ucmVhZG1lX2h0bWwgPz8gbnVsbCxcbiAgICBkZXNjcmlwdGlvbjogcm93LmRlc2NyaXB0aW9uID8/ICcnLFxuICAgIGhvbWVwYWdlVXJsOiByb3cuaG9tZXBhZ2VfdXJsLFxuICAgIHNvdXJjZVVybDogcm93LnNvdXJjZV91cmwsXG4gICAgdmVyc2lvbnM6IHZlcnNpb25Sb3dzLm1hcCgodikgPT4gKHtcbiAgICAgIHZlcnNpb246IHYudmVyc2lvbixcbiAgICAgIHB1Ymxpc2hlZEF0OiBpc28odi5wdWJsaXNoZWRfYXQpLFxuICAgICAgYnJlYWtpbmc6IHYuYnJlYWtpbmcsXG4gICAgICBkZXByZWNhdGVkOiB2LmRlcHJlY2F0ZWRfYXQgIT0gbnVsbCxcbiAgICAgIGRlcHJlY2F0aW9uTWVzc2FnZTogdi5kZXByZWNhdGlvbl9tZXNzYWdlLFxuICAgICAgeWFua2VkOiB2LnlhbmtlZCxcbiAgICAgIGNoYW5nZWxvZzogdi5jaGFuZ2Vsb2csXG4gICAgICB2dWxuQ3JpdGljYWw6IHYudnVsbl9jcml0aWNhbCxcbiAgICAgIHZ1bG5IaWdoOiB2LnZ1bG5faGlnaCxcbiAgICAgIHZ1bG5Dcml0aWNhbEZpeGFibGU6IHYudnVsbl9jcml0aWNhbF9maXhhYmxlID8/IG51bGwsXG4gICAgICB2dWxuSGlnaEZpeGFibGU6IHYudnVsbl9oaWdoX2ZpeGFibGUgPz8gbnVsbCxcbiAgICAgIHNjYW5uZWRBdDogdi5zY2FubmVkX2F0ID8gaXNvKHYuc2Nhbm5lZF9hdCkgOiBudWxsLFxuICAgICAgc2NhbkZsYWdnZWRBdDogdi5zY2FuX2ZsYWdnZWRfYXQgPyBpc28odi5zY2FuX2ZsYWdnZWRfYXQpIDogbnVsbCxcbiAgICAgIGFkdmlzb3J5SWRzOiBhZHZpc29yeVJvd3MuZmlsdGVyKChhKSA9PiBhZHZpc29yeVJhbmdlQ292ZXJzKGEuYWZmZWN0ZWRfcmFuZ2UsIHYudmVyc2lvbikpLm1hcCgoYSkgPT4gYS5pZCksXG4gICAgfSkpLFxuICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgIHNlY3JldHM6IChjdXJyZW50Py5zZWNyZXRzID8/IFtdKS5tYXAoKHMpID0+ICh7IG5hbWU6IHMubmFtZSwgcmVxdWlyZWQ6IHMucmVxdWlyZWQsIGRlc2NyaXB0aW9uOiBzLmRlc2NyaXB0aW9uID8/ICcnIH0pKSxcbiAgICAgIHJlcXVpcmVkTWV0YWRhdGE6IGN1cnJlbnQ/LnJlcXVpcmVkX21ldGFkYXRhID8/IFtdLFxuICAgICAgcmVxdWlyZWRWYXJzOiBjdXJyZW50Py5yZXF1aXJlZF92YXJzID8/IFtdLFxuICAgICAgY29tcHV0ZVR5cGU6IGN1cnJlbnQ/LmNvbXB1dGVfdHlwZSA/PyAnJyxcbiAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6IG51bGwsXG4gICAgICBuZXR3b3JrRWdyZXNzOiBjdXJyZW50Py5uZXR3b3JrX2VncmVzcyA/PyBbXSxcbiAgICAgIHBsdWdpblR5cGU6IGN1cnJlbnQ/LnBsdWdpbl90eXBlID8/ICcnLFxuICAgIH0sXG4gICAgc3VwcGx5Q2hhaW46IHtcbiAgICAgIC8vIEEgbGlzdGVkIHZlcnNpb24gZXhpc3RzIG9ubHkgYWZ0ZXIgdGhlIHBsYXRmb3JtIHJlLXNpZ25lZCBpdCBpbiBwdWJsaWMvKi5cbiAgICAgIHNpZ25lZDogY3VycmVudD8uaW1hZ2VfZGlnZXN0ICE9IG51bGwsXG4gICAgICBkaWdlc3Q6IGN1cnJlbnQ/LmltYWdlX2RpZ2VzdCA/PyBudWxsLFxuICAgICAgaW1hZ2VTb3VyY2U6IGN1cnJlbnQ/LmltYWdlX3NvdXJjZSA/PyBudWxsLFxuICAgICAgc2Nhbm5lZEF0OiBjdXJyZW50Py5zY2FubmVkX2F0ID8gaXNvKGN1cnJlbnQuc2Nhbm5lZF9hdCkgOiBudWxsLFxuICAgICAgdnVsbkNyaXRpY2FsOiBjdXJyZW50Py52dWxuX2NyaXRpY2FsID8/IG51bGwsXG4gICAgICB2dWxuSGlnaDogY3VycmVudD8udnVsbl9oaWdoID8/IG51bGwsXG4gICAgICB2dWxuQ3JpdGljYWxGaXhhYmxlOiBjdXJyZW50Py52dWxuX2NyaXRpY2FsX2ZpeGFibGUgPz8gbnVsbCxcbiAgICAgIHZ1bG5IaWdoRml4YWJsZTogY3VycmVudD8udnVsbl9oaWdoX2ZpeGFibGUgPz8gbnVsbCxcbiAgICAgIHNjYW5GbGFnZ2VkQXQ6IGN1cnJlbnQ/LnNjYW5fZmxhZ2dlZF9hdCA/IGlzbyhjdXJyZW50LnNjYW5fZmxhZ2dlZF9hdCkgOiBudWxsLFxuICAgICAgc2JvbVVybDogY3VycmVudD8uaW1hZ2VfZGlnZXN0XG4gICAgICAgID8gYC9hcGkvcHVibGljL3BsdWdpbnMvJHtlbmNvZGVVUklDb21wb25lbnQocm93LnB1Ymxpc2hlcl9oYW5kbGUpfS8ke2VuY29kZVVSSUNvbXBvbmVudChyb3cubmFtZSl9L3ZlcnNpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGN1cnJlbnQudmVyc2lvbil9L3Nib21gXG4gICAgICAgIDogbnVsbCxcbiAgICB9LFxuICAgIGFkdmlzb3JpZXM6IGFkdmlzb3J5Um93cy5tYXAoKGEpID0+ICh7XG4gICAgICBpZDogYS5pZCxcbiAgICAgIHNldmVyaXR5OiBhLnNldmVyaXR5LFxuICAgICAgc3VtbWFyeTogYS5zdW1tYXJ5LFxuICAgICAgYWZmZWN0ZWRSYW5nZTogYS5hZmZlY3RlZF9yYW5nZSxcbiAgICAgIGZpeGVkVmVyc2lvbjogYS5maXhlZF92ZXJzaW9uLFxuICAgICAgcHVibGlzaGVkQXQ6IGlzbyhhLnB1Ymxpc2hlZF9hdCksXG4gICAgICBkZXRhaWxzSHRtbDogYS5kZXRhaWxzX2h0bWwsXG4gICAgICBjdmVJZHM6IGEuY3ZlX2lkcyA/PyBbXSxcbiAgICB9KSksXG4gICAgcmF0aW5nRGlzdHJpYnV0aW9uOiBkaXN0XG4gICAgICA/IHsgMTogbnVtKGRpc3RbJzEnXSksIDI6IG51bShkaXN0WycyJ10pLCAzOiBudW0oZGlzdFsnMyddKSwgNDogbnVtKGRpc3RbJzQnXSksIDU6IG51bShkaXN0Wyc1J10pIH1cbiAgICAgIDogbnVsbCxcbiAgICByZWNlbnRSYXRpbmc6IHJvdy5yZWNlbnRfcmF0aW5nID09IG51bGwgPyBudWxsIDogTWF0aC5yb3VuZChudW0ocm93LnJlY2VudF9yYXRpbmcpICogMTAwKSAvIDEwMCxcbiAgICBhY3RpdmVPcmdDb3VudDogcm93LmFjdGl2ZV9vcmdfY291bnQgPT0gbnVsbCA/IG51bGwgOiBudW0ocm93LmFjdGl2ZV9vcmdfY291bnQpLFxuICAgIGhlYWx0aEJyZWFrZG93bjogcm93LmhlYWx0aF9icmVha2Rvd24gPz8gbnVsbCxcbiAgICBzdWNjZXNzUmF0ZTMwZDogcm93LnN1Y2Nlc3NfcmF0ZV8zMGQgPT0gbnVsbCA/IG51bGwgOiBNYXRoLnJvdW5kKG51bShyb3cuc3VjY2Vzc19yYXRlXzMwZCkgKiAxMDAwKSAvIDEwMDAsXG4gIH07XG59XG5cbi8qKiBPbmUgbGlzdGVkIHZlcnNpb24ncyBwdWJsaWMgaW1hZ2UgaWRlbnRpdHkgKGZvciB0aGUgU0JPTSBkb3dubG9hZCksIG9yIG51bGwuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UHVibGljTGlzdGVkVmVyc2lvbihcbiAgcHVibGlzaGVySGFuZGxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nLFxuKTogUHJvbWlzZTx7IGltYWdlUmVwb3NpdG9yeTogc3RyaW5nOyBpbWFnZURpZ2VzdDogc3RyaW5nIH0gfCBudWxsPiB7XG4gIGNvbnN0IGRiID0gZ2V0UHVibGljUmVhZGVyRGIoKTtcbiAgY29uc3QgcmVzID0gYXdhaXQgZGIuZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIGltYWdlX3JlcG9zaXRvcnksIGltYWdlX2RpZ2VzdCBGUk9NIHB1YmxpY19saXN0ZWRfdmVyc2lvbnNcbiAgICAgV0hFUkUgcHVibGlzaGVyX2hhbmRsZSA9ICR7cHVibGlzaGVySGFuZGxlfSBBTkQgbmFtZSA9ICR7bmFtZX0gQU5EIHZlcnNpb24gPSAke3ZlcnNpb259IEFORCBOT1QgeWFua2VkXG4gICAgICAgQU5EIGxpc3RpbmdfaWQgSU4gKFNFTEVDVCBpZCBGUk9NIHB1YmxpY19saXN0aW5ncyBXSEVSRSBwYXVzZWRfYXQgSVMgTlVMTClcbiAgICAgTElNSVQgMWApO1xuICBjb25zdCByb3cgPSByZXN1bHRSb3dzPHsgaW1hZ2VfcmVwb3NpdG9yeTogc3RyaW5nIHwgbnVsbDsgaW1hZ2VfZGlnZXN0OiBzdHJpbmcgfCBudWxsIH0+KHJlcylbMF07XG4gIGlmICghcm93Py5pbWFnZV9yZXBvc2l0b3J5IHx8ICFyb3cuaW1hZ2VfZGlnZXN0KSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHsgaW1hZ2VSZXBvc2l0b3J5OiByb3cuaW1hZ2VfcmVwb3NpdG9yeSwgaW1hZ2VEaWdlc3Q6IHJvdy5pbWFnZV9kaWdlc3QgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJldmlld3Ncbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnR5cGUgUmV2aWV3Um93ID0ge1xuICBpZDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICByYXRpbmc6IG51bWJlciB8IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZyB8IG51bGw7XG4gIGJvZHlfaHRtbDogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aG9yX2Rpc3BsYXlfbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgdmVyaWZpZWRfdXNlOiBib29sZWFuO1xuICBoZWxwZnVsX2NvdW50OiBudW1iZXIgfCBzdHJpbmc7XG4gIGVkaXRlZDogYm9vbGVhbjtcbiAgY3JlYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgdXBkYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgcHVibGlzaGVyX2Rpc3BsYXlfbmFtZTogc3RyaW5nO1xuICByZXBseV9ib2R5X2h0bWw6IHN0cmluZyB8IG51bGw7XG4gIHJlcGx5X2NyZWF0ZWRfYXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICByZXBseV91cGRhdGVkX2F0OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbiAgdG90YWw6IG51bWJlciB8IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIHJldmlld09yZGVyKHNvcnQ6IFJldmlld1NvcnQpOiBTUUwge1xuICBzd2l0Y2ggKHNvcnQpIHtcbiAgICBjYXNlICdyZWNlbnQnOiByZXR1cm4gc3FsYGNyZWF0ZWRfYXQgREVTQywgaWQgQVNDYDtcbiAgICBjYXNlICdoaWdoZXN0JzogcmV0dXJuIHNxbGByYXRpbmcgREVTQywgaGVscGZ1bF9jb3VudCBERVNDLCBjcmVhdGVkX2F0IERFU0MsIGlkIEFTQ2A7XG4gICAgY2FzZSAnbG93ZXN0JzogcmV0dXJuIHNxbGByYXRpbmcgQVNDLCBoZWxwZnVsX2NvdW50IERFU0MsIGNyZWF0ZWRfYXQgREVTQywgaWQgQVNDYDtcbiAgICBjYXNlICdoZWxwZnVsJzpcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gVmVyaWZpZWQgdXNlIGJyZWFrcyB0aWVzOiBhbiBvcmcgdGhhdCBydW5zIHRoZSBwbHVnaW4ga25vd3MgaXQgYmVzdC5cbiAgICAgIHJldHVybiBzcWxgaGVscGZ1bF9jb3VudCBERVNDLCB2ZXJpZmllZF91c2UgREVTQywgY3JlYXRlZF9hdCBERVNDLCBpZCBBU0NgO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1B1YmxpY1Jldmlldyhyb3c6IE9taXQ8UmV2aWV3Um93LCAndG90YWwnPik6IFB1YmxpY1Jldmlld0l0ZW0ge1xuICByZXR1cm4ge1xuICAgIGlkOiByb3cuaWQsXG4gICAgcmF0aW5nOiBudW0ocm93LnJhdGluZyksXG4gICAgdGl0bGU6IHJvdy50aXRsZSxcbiAgICBib2R5SHRtbDogcm93LmJvZHlfaHRtbCxcbiAgICB2ZXJzaW9uOiByb3cudmVyc2lvbixcbiAgICBhdXRob3I6IHJvdy5hdXRob3JfZGlzcGxheV9uYW1lID8geyBkaXNwbGF5TmFtZTogcm93LmF1dGhvcl9kaXNwbGF5X25hbWUgfSA6IG51bGwsXG4gICAgdmVyaWZpZWRVc2U6IHJvdy52ZXJpZmllZF91c2UgPT09IHRydWUsXG4gICAgaGVscGZ1bENvdW50OiBudW0ocm93LmhlbHBmdWxfY291bnQpLFxuICAgIGVkaXRlZDogcm93LmVkaXRlZCA9PT0gdHJ1ZSxcbiAgICBjcmVhdGVkQXQ6IGlzbyhyb3cuY3JlYXRlZF9hdCksXG4gICAgdXBkYXRlZEF0OiBpc28ocm93LnVwZGF0ZWRfYXQpLFxuICAgIHJlcGx5OiByb3cucmVwbHlfYm9keV9odG1sXG4gICAgICA/IHtcbiAgICAgICAgYm9keUh0bWw6IHJvdy5yZXBseV9ib2R5X2h0bWwsXG4gICAgICAgIHB1Ymxpc2hlckRpc3BsYXlOYW1lOiByb3cucHVibGlzaGVyX2Rpc3BsYXlfbmFtZSxcbiAgICAgICAgY3JlYXRlZEF0OiBpc28ocm93LnJlcGx5X2NyZWF0ZWRfYXQpLFxuICAgICAgICB1cGRhdGVkQXQ6IGlzbyhyb3cucmVwbHlfdXBkYXRlZF9hdCksXG4gICAgICB9XG4gICAgICA6IG51bGwsXG4gIH07XG59XG5cbi8qKlxuICogT25lIHBhZ2Ugb2YgYSBsaXN0aW5nJ3MgcHVibGlzaGVkIHJldmlld3MgKHRoZSBkaXJlY3RvcnkncyBSZXZpZXdzIHRhYiksIG9yIG51bGxcbiAqIHdoZW4gdGhlIGxpc3RpbmcgaXNuJ3QgcHVibGljLiBIZWxkIGFuZCByZW1vdmVkIHJldmlld3MgbmV2ZXIgcmVhY2ggdGhlIHZpZXcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UHVibGljUmV2aWV3cyhwdWJsaXNoZXJIYW5kbGU6IHN0cmluZywgbmFtZTogc3RyaW5nLCBxdWVyeTogUHVibGljUmV2aWV3UXVlcnkgPSB7fSk6IFByb21pc2U8UHVibGljUmV2aWV3UGFnZSB8IG51bGw+IHtcbiAgY29uc3QgZGIgPSBnZXRQdWJsaWNSZWFkZXJEYigpO1xuICBjb25zdCBsaXN0aW5nID0gcmVzdWx0Um93czx7IGlkOiBzdHJpbmcgfT4oYXdhaXQgZGIuZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIGlkIEZST00gcHVibGljX2xpc3RpbmdzXG4gICAgIFdIRVJFIHB1Ymxpc2hlcl9oYW5kbGUgPSAke3B1Ymxpc2hlckhhbmRsZX0gQU5EIG5hbWUgPSAke25hbWV9IEFORCBwYXVzZWRfYXQgSVMgTlVMTFxuICAgICBMSU1JVCAxYCkpWzBdO1xuICBpZiAoIWxpc3RpbmcpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IHNvcnQgPSBxdWVyeS5zb3J0ICYmIFJFVklFV19TT1JUUy5pbmNsdWRlcyhxdWVyeS5zb3J0KSA/IHF1ZXJ5LnNvcnQgOiAnaGVscGZ1bCc7XG4gIGNvbnN0IGxpbWl0ID0gIXF1ZXJ5LmxpbWl0IHx8ICFOdW1iZXIuaXNGaW5pdGUocXVlcnkubGltaXQpXG4gICAgPyBSRVZJRVdTX0RFRkFVTFRfTElNSVRcbiAgICA6IE1hdGgubWluKE1hdGgubWF4KE1hdGgudHJ1bmMocXVlcnkubGltaXQpLCAxKSwgUkVWSUVXU19NQVhfTElNSVQpO1xuICBjb25zdCBvZmZzZXQgPSBkZWNvZGVPZmZzZXRDdXJzb3IocXVlcnkuY3Vyc29yKTtcbiAgY29uc3Qgd2hlcmU6IFNRTFtdID0gW3NxbGBsaXN0aW5nX2lkID0gJHtsaXN0aW5nLmlkfWBdO1xuICBpZiAocXVlcnkucmF0aW5nICE9PSB1bmRlZmluZWQgJiYgTnVtYmVyLmlzSW50ZWdlcihxdWVyeS5yYXRpbmcpICYmIHF1ZXJ5LnJhdGluZyA+PSAxICYmIHF1ZXJ5LnJhdGluZyA8PSA1KSB7XG4gICAgd2hlcmUucHVzaChzcWxgcmF0aW5nID0gJHtxdWVyeS5yYXRpbmd9YCk7XG4gIH1cbiAgY29uc3Qgcm93cyA9IHJlc3VsdFJvd3M8UmV2aWV3Um93Pihhd2FpdCBkYi5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1QgaWQsIHZlcnNpb24sIHJhdGluZywgdGl0bGUsIGJvZHlfaHRtbCwgYXV0aG9yX2Rpc3BsYXlfbmFtZSwgdmVyaWZpZWRfdXNlLCBoZWxwZnVsX2NvdW50LCBlZGl0ZWQsXG4gICAgICAgICAgIGNyZWF0ZWRfYXQsIHVwZGF0ZWRfYXQsIHB1Ymxpc2hlcl9kaXNwbGF5X25hbWUsIHJlcGx5X2JvZHlfaHRtbCwgcmVwbHlfY3JlYXRlZF9hdCwgcmVwbHlfdXBkYXRlZF9hdCxcbiAgICAgICAgICAgQ09VTlQoKikgT1ZFUiAoKSBBUyB0b3RhbFxuICAgICAgRlJPTSBwdWJsaWNfcmV2aWV3c1xuICAgICBXSEVSRSAke3NxbC5qb2luKHdoZXJlLCBzcWxgIEFORCBgKX1cbiAgICAgT1JERVIgQlkgJHtyZXZpZXdPcmRlcihzb3J0KX1cbiAgICAgTElNSVQgJHtsaW1pdH0gT0ZGU0VUICR7b2Zmc2V0fWApKTtcbiAgY29uc3QgdG90YWwgPSByb3dzLmxlbmd0aCA+IDAgPyBudW0ocm93c1swXSEudG90YWwpIDogMDtcbiAgcmV0dXJuIHtcbiAgICByZXZpZXdzOiByb3dzLm1hcCh0b1B1YmxpY1JldmlldyksXG4gICAgdG90YWwsXG4gICAgbmV4dEN1cnNvcjogb2Zmc2V0ICsgcm93cy5sZW5ndGggPCB0b3RhbCA/IGVuY29kZU9mZnNldEN1cnNvcihvZmZzZXQgKyByb3dzLmxlbmd0aCkgOiBudWxsLFxuICB9O1xufVxuXG4vKiogRXZlcnkgcHVibGljIGxpc3RpbmcncyBVUkwgcGFydHMgKyBsYXN0IHVwZGF0ZSwgZm9yIHRoZSBzaXRlbWFwLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RQdWJsaWNMaXN0aW5nc0ZvclNpdGVtYXAobWF4ID0gNTAwMCk6IFByb21pc2U8eyBwdWJsaXNoZXI6IHN0cmluZzsgbmFtZTogc3RyaW5nOyB1cGRhdGVkQXQ6IHN0cmluZyB9W10+IHtcbiAgY29uc3QgZGIgPSBnZXRQdWJsaWNSZWFkZXJEYigpO1xuICBjb25zdCByZXMgPSBhd2FpdCBkYi5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1QgcHVibGlzaGVyX2hhbmRsZSwgbmFtZSwgdXBkYXRlZF9hdCBGUk9NIHB1YmxpY19saXN0aW5nc1xuICAgICBXSEVSRSBwYXVzZWRfYXQgSVMgTlVMTCBPUkRFUiBCWSB1cGRhdGVkX2F0IERFU0MgTElNSVQgJHtNYXRoLm1pbihNYXRoLm1heChtYXgsIDEpLCA1MF8wMDApfWApO1xuICByZXR1cm4gcmVzdWx0Um93czx7IHB1Ymxpc2hlcl9oYW5kbGU6IHN0cmluZzsgbmFtZTogc3RyaW5nOyB1cGRhdGVkX2F0OiBEYXRlIHwgc3RyaW5nIH0+KHJlcylcbiAgICAubWFwKChyKSA9PiAoeyBwdWJsaXNoZXI6IHIucHVibGlzaGVyX2hhbmRsZSwgbmFtZTogci5uYW1lLCB1cGRhdGVkQXQ6IGlzbyhyLnVwZGF0ZWRfYXQpIH0pKTtcbn1cbiJdfQ==
463
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWRpcmVjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcHVibGljLWRpcmVjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxHQUFHLEVBQVksTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVVqRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQTZCLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUUxSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWtDLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFFbEgsc0ZBQXNGO0FBQ3RGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUV4Qyx1RUFBdUU7QUFDdkUsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsR0FBRyxDQUFDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztBQUMxQyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7QUE2SHRDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBMEIsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM5RixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENB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IENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBRdWVyaWVzIGJlaGluZCB0aGUgYW5vbnltb3VzIHB1YmxpYyBwbHVnaW4gZGlyZWN0b3J5XG4gKiAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuXG4gKlxuICogRXZlcnkgcXVlcnkgaGVyZSByZWFkcyBPTkxZIHRoZSBgcHVibGljX2xpc3RpbmdzYCwgYHB1YmxpY19saXN0ZWRfdmVyc2lvbnNgLFxuICogYHB1YmxpY19hZHZpc29yaWVzYCBhbmQgYHB1YmxpY19yZXZpZXdzYCB2aWV3cywgdGhyb3VnaCB0aGUgYGVjb3N5c3RlbV9wdWJsaWNfcmVhZGVyYFxuICogY29ubmVjdGlvbiAoe0BsaW5rIGdldFB1YmxpY1JlYWRlckRifSkuIFRob3NlIHZpZXdzIGFscmVhZHkgZmlsdGVyIHRvIHB1YmxpY1xuICogcm93cyAobGlzdGVkL3VubWFpbnRhaW5lZCBsaXN0aW5ncyBvZiBub24tc3VzcGVuZGVkIHB1Ymxpc2hlcnMsIG5vbi1wYXVzZWRcbiAqIHZlcnNpb25zLCBwdWJsaXNoZWQgYWR2aXNvcmllcykgYW5kIHByb2plY3QgcHVibGljIGNvbHVtbnMgb25seSwgc28gbm90aGluZ1xuICogaGVyZSBuZWVkcyDigJQgb3IgaGFzIOKAlCBhIHRlbmFudCBjb250ZXh0LlxuICpcbiAqIFNlYXJjaDogUG9zdGdyZXMgZnVsbC10ZXh0IChgc2VhcmNoX3ZlY3RvcmAsIHdlaWdodGVkIG5hbWUgQSAvIGtleXdvcmRzIGFuZFxuICogY2F0ZWdvcnkgQiAvIHN1bW1hcnkgQyAvIFJFQURNRSBELCBgZW5nbGlzaGAgY29uZmlnKSBPUiBhIHRyaWdyYW0gbWF0Y2ggb24gdGhlXG4gKiBuYW1lICh0eXBvIHRvbGVyYW5jZSksIHJhbmtlZCBieSBgdHNfcmFua2AgKyBuYW1lIHNpbWlsYXJpdHksIGJsZW5kZWQgd2l0aCB0aGVcbiAqIEJheWVzaWFuIHJhdGluZyBhbmQgaW5zdGFsbCBjb3VudCB3aGVuIHByZXNlbnQuIFBhdXNlZCBsaXN0aW5ncyBhcmUgaGlkZGVuLlxuICovXG5cbmltcG9ydCB7IHNxbCwgdHlwZSBTUUwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5cbmltcG9ydCB7IGFkdmlzb3J5UmFuZ2VDb3ZlcnMgfSBmcm9tICcuL3BsdWdpbi1hZHZpc29yaWVzLmpzJztcbmltcG9ydCB7IGNvbXBhcmVTZW12ZXIgfSBmcm9tICcuL3NlbXZlci1yYW5nZS5qcyc7XG5pbXBvcnQgdHlwZSB7IEhlYWx0aEJyZWFrZG93biB9IGZyb20gJy4uL2RhdGFiYXNlL2RyaXp6bGUtc2NoZW1hLmpzJztcbmltcG9ydCB7IHJlc3VsdFJvd3MgfSBmcm9tICcuLi9kYXRhYmFzZS9wZy1yZXN1bHQuanMnO1xuaW1wb3J0IHsgZ2V0UHVibGljUmVhZGVyRGIgfSBmcm9tICcuLi9kYXRhYmFzZS9wdWJsaWMtcmVhZGVyLmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpYyBjb250cmFjdCAobWlycm9ycyBmcm9udGVuZC9zcmMvbGliL3B1YmxpYy1kaXJlY3RvcnkvdHlwZXMudHMpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBEaXJlY3RvcnlUcnVzdFRpZXIgPSAnb2ZmaWNpYWwnIHwgJ3ZlcmlmaWVkJyB8ICdjb21tdW5pdHknIHwgJ3VudmVyaWZpZWQnO1xuZXhwb3J0IHR5cGUgRGlyZWN0b3J5SWNvbktpbmQgPSAndmVuZG9yJyB8ICd1cGxvYWRlZCcgfCAnbW9ub2dyYW0nIHwgJ2NhdGVnb3J5JztcbmV4cG9ydCB0eXBlIERpcmVjdG9yeVNvcnQgPSAncmVsZXZhbmNlJyB8ICdyYXRpbmcnIHwgJ2luc3RhbGxzJyB8ICd1cGRhdGVkJyB8ICduYW1lJyB8ICdoZWFsdGgnO1xuXG5leHBvcnQgY29uc3QgRElSRUNUT1JZX1NPUlRTOiByZWFkb25seSBEaXJlY3RvcnlTb3J0W10gPSBbJ3JlbGV2YW5jZScsICdyYXRpbmcnLCAnaW5zdGFsbHMnLCAndXBkYXRlZCcsICduYW1lJywgJ2hlYWx0aCddO1xuXG5leHBvcnQgY29uc3QgRElSRUNUT1JZX1RJRVJTOiByZWFkb25seSBEaXJlY3RvcnlUcnVzdFRpZXJbXSA9IFsnb2ZmaWNpYWwnLCAndmVyaWZpZWQnLCAnY29tbXVuaXR5JywgJ3VudmVyaWZpZWQnXTtcblxuLyoqIE1pbmltdW0gYHdvcmRfc2ltaWxhcml0eShxdWVyeSwgbmFtZSlgIGZvciBhIGZ1enp5IG5hbWUgbWF0Y2ggKHR5cG8gdG9sZXJhbmNlKS4gKi9cbmV4cG9ydCBjb25zdCBGVVpaWV9OQU1FX1RIUkVTSE9MRCA9IDAuMztcblxuLyoqIE1heCBxdWVyeSBsZW5ndGggYWNjZXB0ZWQgKGxvbmdlciBpcyB0cnVuY2F0ZWQsIG5ldmVyIGFuIGVycm9yKS4gKi9cbmV4cG9ydCBjb25zdCBESVJFQ1RPUllfTUFYX1FVRVJZX0xFTkdUSCA9IDEwMDtcbmV4cG9ydCBjb25zdCBESVJFQ1RPUllfREVGQVVMVF9MSU1JVCA9IDI0O1xuZXhwb3J0IGNvbnN0IERJUkVDVE9SWV9NQVhfTElNSVQgPSA2MDtcblxuZXhwb3J0IGludGVyZmFjZSBEaXJlY3RvcnlTZWFyY2hQYXJhbXMge1xuICBxPzogc3RyaW5nO1xuICBjYXRlZ29yeT86IHN0cmluZztcbiAgdGllcj86IERpcmVjdG9yeVRydXN0VGllcjtcbiAgbGljZW5zZT86IHN0cmluZztcbiAgY29tcHV0ZVR5cGU/OiBzdHJpbmc7XG4gIG5lZWRzU2VjcmV0cz86IGJvb2xlYW47XG4gIG1pblJhdGluZz86IG51bWJlcjtcbiAgc29ydD86IERpcmVjdG9yeVNvcnQ7XG4gIGN1cnNvcj86IHN0cmluZztcbiAgbGltaXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0b3J5TGlzdGluZ0NhcmQge1xuICBwdWJsaXNoZXI6IHsgaGFuZGxlOiBzdHJpbmc7IGRpc3BsYXlOYW1lOiBzdHJpbmc7IHRpZXI6IERpcmVjdG9yeVRydXN0VGllciB9O1xuICBuYW1lOiBzdHJpbmc7XG4gIHN1bW1hcnk6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAga2V5d29yZHM6IHN0cmluZ1tdO1xuICBsYXRlc3RWZXJzaW9uOiBzdHJpbmc7XG4gIGxpY2Vuc2U6IHN0cmluZztcbiAgaWNvblVybDogc3RyaW5nIHwgbnVsbDtcbiAgaWNvbktpbmQ6IERpcmVjdG9yeUljb25LaW5kO1xuICBpY29uS2V5OiBzdHJpbmcgfCBudWxsO1xuICBpY29uSGV4OiBzdHJpbmcgfCBudWxsO1xuICBpY29uQmFkZ2U6IHN0cmluZyB8IG51bGw7XG4gIHJhdGluZzogeyBzY29yZTogbnVtYmVyOyBjb3VudDogbnVtYmVyIH0gfCBudWxsO1xuICBpbnN0YWxsQ291bnQ6IG51bWJlcjtcbiAgLyoqIDDigJMxMDAgaGVhbHRoIHNjb3JlOyBudWxsIHdoZW4gZmV3ZXIgdGhhbiB0aHJlZSBjb21wb25lbnRzIGFyZSBrbm93bi4gKi9cbiAgaGVhbHRoU2NvcmU6IG51bWJlciB8IG51bGw7XG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xuICBzdGF0ZTogJ2xpc3RlZCcgfCAndW5tYWludGFpbmVkJztcbiAgaGlnaGxpZ2h0PzogeyBuYW1lPzogc3RyaW5nOyBzdW1tYXJ5Pzogc3RyaW5nIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0b3J5U2VhcmNoUmVzdWx0IHtcbiAgaXRlbXM6IERpcmVjdG9yeUxpc3RpbmdDYXJkW107XG4gIGZhY2V0czoge1xuICAgIGNhdGVnb3J5OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuICAgIHRpZXI6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gICAgbGljZW5zZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgICBjb21wdXRlVHlwZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgICBuZWVkc1NlY3JldHM6IHsgdHJ1ZTogbnVtYmVyOyBmYWxzZTogbnVtYmVyIH07XG4gIH07XG4gIHRvdGFsOiBudW1iZXI7XG4gIG5leHRDdXJzb3I6IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0b3J5Q2F0ZWdvcnlTdW1tYXJ5IHtcbiAgaWQ6IHN0cmluZztcbiAgY291bnQ6IG51bWJlcjtcbiAgdG9wOiBEaXJlY3RvcnlMaXN0aW5nQ2FyZFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdG9yeUxpc3RpbmdWZXJzaW9uIHtcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBwdWJsaXNoZWRBdDogc3RyaW5nO1xuICBicmVha2luZzogYm9vbGVhbjtcbiAgZGVwcmVjYXRlZDogYm9vbGVhbjtcbiAgZGVwcmVjYXRpb25NZXNzYWdlOiBzdHJpbmcgfCBudWxsO1xuICB5YW5rZWQ6IGJvb2xlYW47XG4gIGNoYW5nZWxvZzogc3RyaW5nIHwgbnVsbDtcbiAgdnVsbkNyaXRpY2FsOiBudW1iZXIgfCBudWxsO1xuICB2dWxuSGlnaDogbnVtYmVyIHwgbnVsbDtcbiAgLyoqIE9mIHRob3NlLCB0aGUgZmluZGluZ3MgZ3J5cGUgcmVwb3J0cyBhIGZpeGVkIHZlcnNpb24gZm9yLiAqL1xuICB2dWxuQ3JpdGljYWxGaXhhYmxlOiBudW1iZXIgfCBudWxsO1xuICB2dWxuSGlnaEZpeGFibGU6IG51bWJlciB8IG51bGw7XG4gIHNjYW5uZWRBdDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFdoZW4gdGhlIG5pZ2h0bHkgcmVzY2FuIGZsYWdnZWQgdGhpcyB2ZXJzaW9uIChmaXhhYmxlIGNyaXRpY2FscyBvdmVyIHRoZSBwbGF0Zm9ybSBmbG9vcik7IG51bGwgPSBub3QgZmxhZ2dlZC4gKi9cbiAgc2NhbkZsYWdnZWRBdDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIElkcyBvZiB0aGUgcHVibGlzaGVkIGFkdmlzb3JpZXMgd2hvc2UgcmFuZ2UgY292ZXJzIHRoaXMgdmVyc2lvbi4gKi9cbiAgYWR2aXNvcnlJZHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdG9yeUxpc3RpbmdEZXRhaWwgZXh0ZW5kcyBEaXJlY3RvcnlMaXN0aW5nQ2FyZCB7XG4gIHJlYWRtZUh0bWw6IHN0cmluZyB8IG51bGw7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGhvbWVwYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBzb3VyY2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIHZlcnNpb25zOiBEaXJlY3RvcnlMaXN0aW5nVmVyc2lvbltdO1xuICBjb25maWd1cmF0aW9uOiB7XG4gICAgc2VjcmV0czogeyBuYW1lOiBzdHJpbmc7IHJlcXVpcmVkOiBib29sZWFuOyBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXTtcbiAgICByZXF1aXJlZE1ldGFkYXRhOiBzdHJpbmdbXTtcbiAgICByZXF1aXJlZFZhcnM6IHN0cmluZ1tdO1xuICAgIGNvbXB1dGVUeXBlOiBzdHJpbmc7XG4gICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogc3RyaW5nIHwgbnVsbDtcbiAgICBuZXR3b3JrRWdyZXNzOiBzdHJpbmdbXTtcbiAgICBwbHVnaW5UeXBlOiBzdHJpbmc7XG4gIH07XG4gIHN1cHBseUNoYWluOiB7XG4gICAgc2lnbmVkOiBib29sZWFuO1xuICAgIGRpZ2VzdDogc3RyaW5nIHwgbnVsbDtcbiAgICBpbWFnZVNvdXJjZTogc3RyaW5nIHwgbnVsbDtcbiAgICBzY2FubmVkQXQ6IHN0cmluZyB8IG51bGw7XG4gICAgdnVsbkNyaXRpY2FsOiBudW1iZXIgfCBudWxsO1xuICAgIHZ1bG5IaWdoOiBudW1iZXIgfCBudWxsO1xuICAgIHZ1bG5Dcml0aWNhbEZpeGFibGU6IG51bWJlciB8IG51bGw7XG4gICAgdnVsbkhpZ2hGaXhhYmxlOiBudW1iZXIgfCBudWxsO1xuICAgIHNjYW5GbGFnZ2VkQXQ6IHN0cmluZyB8IG51bGw7XG4gICAgc2JvbVVybDogc3RyaW5nIHwgbnVsbDtcbiAgfTtcbiAgYWR2aXNvcmllczoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc2V2ZXJpdHk6IHN0cmluZztcbiAgICBzdW1tYXJ5OiBzdHJpbmc7XG4gICAgYWZmZWN0ZWRSYW5nZTogc3RyaW5nO1xuICAgIGZpeGVkVmVyc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgICBwdWJsaXNoZWRBdDogc3RyaW5nO1xuICAgIC8qKiBTZXJ2ZXItc2FuaXRpemVkIEhUTUwgKHRoZSBzdG9yZWQgcmVuZGVyIG9mIHRoZSBkZXRhaWxzIG1hcmtkb3duKS4gKi9cbiAgICBkZXRhaWxzSHRtbDogc3RyaW5nIHwgbnVsbDtcbiAgICBjdmVJZHM6IHN0cmluZ1tdO1xuICB9W107XG4gIHJhdGluZ0Rpc3RyaWJ1dGlvbjogUmVjb3JkPCcxJyB8ICcyJyB8ICczJyB8ICc0JyB8ICc1JywgbnVtYmVyPiB8IG51bGw7XG4gIC8qKiBUaGUgQmF5ZXNpYW4gcmF0aW5nIG92ZXIgcmV2aWV3cyBvZiB0aGUgbGFzdCB0d28gbWlub3IgdmVyc2lvbnMuICovXG4gIHJlY2VudFJhdGluZzogbnVtYmVyIHwgbnVsbDtcbiAgYWN0aXZlT3JnQ291bnQ6IG51bWJlciB8IG51bGw7XG4gIC8qKiBQZXItY29tcG9uZW50IGhlYWx0aCBzY29yZXMgYmVoaW5kIHtAbGluayBEaXJlY3RvcnlMaXN0aW5nQ2FyZC5oZWFsdGhTY29yZX0uICovXG4gIGhlYWx0aEJyZWFrZG93bjogSGVhbHRoQnJlYWtkb3duIHwgbnVsbDtcbiAgLyoqIDMwLWRheSBydW50aW1lIHN1Y2Nlc3MgcmF0ZSAoMC4uMSksIG9yIG51bGwgd2l0aCBubyBydW5zLiAqL1xuICBzdWNjZXNzUmF0ZTMwZDogbnVtYmVyIHwgbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgUmV2aWV3U29ydCA9ICdoZWxwZnVsJyB8ICdyZWNlbnQnIHwgJ2hpZ2hlc3QnIHwgJ2xvd2VzdCc7XG5leHBvcnQgY29uc3QgUkVWSUVXX1NPUlRTOiByZWFkb25seSBSZXZpZXdTb3J0W10gPSBbJ2hlbHBmdWwnLCAncmVjZW50JywgJ2hpZ2hlc3QnLCAnbG93ZXN0J107XG5leHBvcnQgY29uc3QgUkVWSUVXU19ERUZBVUxUX0xJTUlUID0gMTA7XG5leHBvcnQgY29uc3QgUkVWSUVXU19NQVhfTElNSVQgPSA1MDtcblxuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNSZXZpZXdSZXBseSB7XG4gIGJvZHlIdG1sOiBzdHJpbmc7XG4gIHB1Ymxpc2hlckRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbn1cblxuLyoqIE9uZSBwdWJsaXNoZWQgcmV2aWV3IGFzIHRoZSBkaXJlY3Rvcnkgc2hvd3MgaXQ6IGRpc3BsYXkgbmFtZSBvbmx5LCBuZXZlciBhbiBvcmcuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY1Jldmlld0l0ZW0ge1xuICBpZDogc3RyaW5nO1xuICByYXRpbmc6IG51bWJlcjtcbiAgdGl0bGU6IHN0cmluZyB8IG51bGw7XG4gIGJvZHlIdG1sOiBzdHJpbmcgfCBudWxsO1xuICB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICAvKiogTnVsbCBvbmNlIHRoZSBhdXRob3IncyBhY2NvdW50IHdhcyBkZWxldGVkICh0aGUgcmV2aWV3IGlzIGFub255bWl6ZWQpLiAqL1xuICBhdXRob3I6IHsgZGlzcGxheU5hbWU6IHN0cmluZyB9IHwgbnVsbDtcbiAgdmVyaWZpZWRVc2U6IGJvb2xlYW47XG4gIGhlbHBmdWxDb3VudDogbnVtYmVyO1xuICBlZGl0ZWQ6IGJvb2xlYW47XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbiAgcmVwbHk6IFB1YmxpY1Jldmlld1JlcGx5IHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNSZXZpZXdQYWdlIHtcbiAgcmV2aWV3czogUHVibGljUmV2aWV3SXRlbVtdO1xuICB0b3RhbDogbnVtYmVyO1xuICBuZXh0Q3Vyc29yOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY1Jldmlld1F1ZXJ5IHtcbiAgc29ydD86IFJldmlld1NvcnQ7XG4gIC8qKiBPbmx5IHJldmlld3Mgd2l0aCBleGFjdGx5IHRoaXMgbWFueSBzdGFycy4gKi9cbiAgcmF0aW5nPzogbnVtYmVyO1xuICBjdXJzb3I/OiBzdHJpbmc7XG4gIGxpbWl0PzogbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUm93IG1hcHBpbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBBIGBwdWJsaWNfbGlzdGluZ3NgIHJvdyBhcyB0aGUgcmF3IHF1ZXJpZXMgcmV0dXJuIGl0IChzbmFrZV9jYXNlKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljTGlzdGluZ1JvdyB7XG4gIGlkOiBzdHJpbmc7XG4gIHB1Ymxpc2hlcl9oYW5kbGU6IHN0cmluZztcbiAgcHVibGlzaGVyX2Rpc3BsYXlfbmFtZTogc3RyaW5nO1xuICBwdWJsaXNoZXJfdGllcjogRGlyZWN0b3J5VHJ1c3RUaWVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIHN1bW1hcnk6IHN0cmluZyB8IG51bGw7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xuICByZWFkbWVfaHRtbDogc3RyaW5nIHwgbnVsbDtcbiAgbGljZW5zZTogc3RyaW5nIHwgbnVsbDtcbiAgaG9tZXBhZ2VfdXJsOiBzdHJpbmcgfCBudWxsO1xuICBzb3VyY2VfdXJsOiBzdHJpbmcgfCBudWxsO1xuICBpY29uOiB7IGtleTogc3RyaW5nOyBiYWRnZT86IHN0cmluZyB9IHwgbnVsbDtcbiAgdXBsb2FkZWRfaWNvbjogeyBrZXkyNTY6IHN0cmluZzsga2V5NjQ6IHN0cmluZyB9IHwgbnVsbDtcbiAga2V5d29yZHM6IHN0cmluZ1tdIHwgbnVsbDtcbiAgbGF0ZXN0X3ZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gIHVwZGF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gIHJhdGluZ19iYXllczogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbiAgcmF0aW5nX2NvdW50OiBudW1iZXIgfCBzdHJpbmc7XG4gIHJhdGluZ19kaXN0OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHwgbnVsbDtcbiAgcmVjZW50X3JhdGluZz86IG51bWJlciB8IHN0cmluZyB8IG51bGw7XG4gIGluc3RhbGxfY291bnQ6IG51bWJlciB8IHN0cmluZztcbiAgYWN0aXZlX29yZ19jb3VudDogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbiAgaGVhbHRoX3Njb3JlPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbiAgaGVhbHRoX2JyZWFrZG93bj86IEhlYWx0aEJyZWFrZG93biB8IG51bGw7XG4gIHN1Y2Nlc3NfcmF0ZV8zMGQ/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsO1xuICBzdGF0ZTogJ2xpc3RlZCcgfCAndW5tYWludGFpbmVkJztcbn1cblxuZnVuY3Rpb24gbnVtKHY6IG51bWJlciB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBudW1iZXIge1xuICBjb25zdCBuID0gdHlwZW9mIHYgPT09ICdudW1iZXInID8gdiA6IE51bWJlci5wYXJzZUZsb2F0KFN0cmluZyh2ID8/ICcwJykpO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pID8gbiA6IDA7XG59XG5cbmZ1bmN0aW9uIGlzbyh2OiBEYXRlIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGlmICghdikgcmV0dXJuICcnO1xuICByZXR1cm4gdiBpbnN0YW5jZW9mIERhdGUgPyB2LnRvSVNPU3RyaW5nKCkgOiBuZXcgRGF0ZSh2KS50b0lTT1N0cmluZygpO1xufVxuXG4vKipcbiAqIFRoZSBpY29uIGZhbGxiYWNrIGNoYWluOiB1cGxvYWRlZCAoaWYgdGhlIHRpZXIgbWF5IHVwbG9hZCkg4oaSIGN1cmF0ZWRcbiAqIHZlbmRvciBrZXkgKE9mZmljaWFsLCBhbmQgVmVyaWZpZWQgcHVibGlzaGVycyBmb3IgbWFya3MgdGhleSBvd24g4oCUIG93bmVyc2hpcFxuICogaXMgY2hlY2tlZCB3aGVuIHRoZSBpY29uIGlzIGFwcHJvdmVkKSDihpIgbW9ub2dyYW0uIENvbW11bml0eSBhbmQgYW5vbnltb3VzXG4gKiBsaXN0aW5ncyBjYW4gbmV2ZXIgc2hvdyBhIGN1cmF0ZWQgdmVuZG9yIG1hcmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTGlzdGluZ0ljb24ocm93OiBQaWNrPFB1YmxpY0xpc3RpbmdSb3csICdwdWJsaXNoZXJfdGllcicgfCAnaWNvbicgfCAndXBsb2FkZWRfaWNvbic+KTogUGljazxcbiAgRGlyZWN0b3J5TGlzdGluZ0NhcmQsICdpY29uS2luZCcgfCAnaWNvblVybCcgfCAnaWNvbktleScgfCAnaWNvbkJhZGdlJyB8ICdpY29uSGV4J1xuPiB7XG4gIGNvbnN0IG5vbmUgPSB7IGljb25Vcmw6IG51bGwsIGljb25LZXk6IG51bGwsIGljb25CYWRnZTogbnVsbCwgaWNvbkhleDogbnVsbCB9O1xuICBpZiAocm93LnVwbG9hZGVkX2ljb24/LmtleTI1Nikge1xuICAgIHJldHVybiB7IC4uLm5vbmUsIGljb25LaW5kOiAndXBsb2FkZWQnLCBpY29uVXJsOiBgL2FwaS9wdWJsaWMvcGx1Z2lucy9pY29ucy8ke2VuY29kZVVSSUNvbXBvbmVudChyb3cudXBsb2FkZWRfaWNvbi5rZXkyNTYpfWAgfTtcbiAgfVxuICBjb25zdCBjdXJhdGVkQWxsb3dlZCA9IHJvdy5wdWJsaXNoZXJfdGllciA9PT0gJ29mZmljaWFsJyB8fCByb3cucHVibGlzaGVyX3RpZXIgPT09ICd2ZXJpZmllZCc7XG4gIGlmIChjdXJhdGVkQWxsb3dlZCAmJiByb3cuaWNvbj8ua2V5KSB7XG4gICAgcmV0dXJuIHsgLi4ubm9uZSwgaWNvbktpbmQ6ICd2ZW5kb3InLCBpY29uS2V5OiByb3cuaWNvbi5rZXksIGljb25CYWRnZTogcm93Lmljb24uYmFkZ2UgPz8gbnVsbCB9O1xuICB9XG4gIHJldHVybiB7IC4uLm5vbmUsIGljb25LaW5kOiAnbW9ub2dyYW0nIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0xpc3RpbmdDYXJkKHJvdzogUHVibGljTGlzdGluZ1Jvdyk6IERpcmVjdG9yeUxpc3RpbmdDYXJkIHtcbiAgY29uc3QgcmF0aW5nQ291bnQgPSBudW0ocm93LnJhdGluZ19jb3VudCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiB7IGhhbmRsZTogcm93LnB1Ymxpc2hlcl9oYW5kbGUsIGRpc3BsYXlOYW1lOiByb3cucHVibGlzaGVyX2Rpc3BsYXlfbmFtZSwgdGllcjogcm93LnB1Ymxpc2hlcl90aWVyIH0sXG4gICAgbmFtZTogcm93Lm5hbWUsXG4gICAgc3VtbWFyeTogcm93LnN1bW1hcnkgPz8gJycsXG4gICAgY2F0ZWdvcnk6IHJvdy5jYXRlZ29yeSxcbiAgICBrZXl3b3Jkczogcm93LmtleXdvcmRzID8/IFtdLFxuICAgIGxhdGVzdFZlcnNpb246IHJvdy5sYXRlc3RfdmVyc2lvbiA/PyAnJyxcbiAgICBsaWNlbnNlOiByb3cubGljZW5zZSA/PyAnJyxcbiAgICAuLi5yZXNvbHZlTGlzdGluZ0ljb24ocm93KSxcbiAgICByYXRpbmc6IHJhdGluZ0NvdW50ID4gMCAmJiByb3cucmF0aW5nX2JheWVzICE9IG51bGwgPyB7IHNjb3JlOiBNYXRoLnJvdW5kKG51bShyb3cucmF0aW5nX2JheWVzKSAqIDEwMCkgLyAxMDAsIGNvdW50OiByYXRpbmdDb3VudCB9IDogbnVsbCxcbiAgICBpbnN0YWxsQ291bnQ6IG51bShyb3cuaW5zdGFsbF9jb3VudCksXG4gICAgaGVhbHRoU2NvcmU6IHJvdy5oZWFsdGhfc2NvcmUgPT0gbnVsbCA/IG51bGwgOiBNYXRoLnJvdW5kKG51bShyb3cuaGVhbHRoX3Njb3JlKSksXG4gICAgdXBkYXRlZEF0OiBpc28ocm93LnVwZGF0ZWRfYXQpLFxuICAgIHN0YXRlOiByb3cuc3RhdGUsXG4gIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZWFyY2hcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBOb3JtYWxpemUgdGhlIHVzZXIncyBxdWVyeTogY29sbGFwc2Ugd2hpdGVzcGFjZSwgY2FwIHRoZSBsZW5ndGguICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUXVlcnkocTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgcmV0dXJuIChxID8/ICcnKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpLnNsaWNlKDAsIERJUkVDVE9SWV9NQVhfUVVFUllfTEVOR1RIKTtcbn1cblxuLyoqIFNlYXJjaCB0ZXJtcyBmb3IgaGlnaGxpZ2h0aW5nOiB3b3JkcyBvZiDiiaUgMiBjaGFyYWN0ZXJzLCByZWdleC1lc2NhcGVkLiAqL1xuZnVuY3Rpb24gaGlnaGxpZ2h0VGVybXMocTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gWy4uLm5ldyBTZXQocS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXmEtejAtOS5fLV0rLykuZmlsdGVyKCh0KSA9PiB0Lmxlbmd0aCA+PSAyKSldXG4gICAgLm1hcCgodCkgPT4gdC5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpKTtcbn1cblxuLyoqXG4gKiBXcmFwIG1hdGNoZWQgdGVybXMgaW4gYDxtYXJrPmAuIFRoZSBmcm9udGVuZCByZW5kZXJzIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZVxuICogYDxtYXJrPmAgbWFya2VycyBhcyBURVhUIChuZXZlciBIVE1MKSwgc28gdGhlIHNvdXJjZSB0ZXh0IGlzIG5vdCBlc2NhcGVkIGhlcmUuXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIG5vdGhpbmcgbWF0Y2hlZCAodGhlIGNhcmQgdGhlbiByZW5kZXJzIHBsYWluIHRleHQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlnaGxpZ2h0VGV4dCh0ZXh0OiBzdHJpbmcsIHE6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRlcm1zID0gaGlnaGxpZ2h0VGVybXMocSk7XG4gIGlmICghdGV4dCB8fCB0ZXJtcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgKCR7dGVybXMuam9pbignfCcpfSlgLCAnZ2knKTtcbiAgaWYgKCFyZS50ZXN0KHRleHQpKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKHJlLCAnPG1hcms+JDE8L21hcms+Jyk7XG59XG5cbi8qKiBPcGFxdWUgY3Vyc29yOiBhbiBvZmZzZXQsIGJhc2U2NHVybC1lbmNvZGVkIHNvIGNsaWVudHMgZG9uJ3QgZGVwZW5kIG9uIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU9mZnNldEN1cnNvcihvZmZzZXQ6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeSh7IG86IG9mZnNldCB9KSkudG9TdHJpbmcoJ2Jhc2U2NHVybCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlT2Zmc2V0Q3Vyc29yKGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgaWYgKCFjdXJzb3IpIHJldHVybiAwO1xuICB0cnkge1xuICAgIGNvbnN0IG8gPSAoSlNPTi5wYXJzZShCdWZmZXIuZnJvbShjdXJzb3IsICdiYXNlNjR1cmwnKS50b1N0cmluZygndXRmOCcpKSBhcyB7IG8/OiB1bmtub3duIH0pLm87XG4gICAgcmV0dXJuIHR5cGVvZiBvID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNJbnRlZ2VyKG8pICYmIG8gPj0gMCAmJiBvIDw9IDEwXzAwMCA/IG8gOiAwO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbGFtcExpbWl0KGxpbWl0OiBudW1iZXIgfCB1bmRlZmluZWQpOiBudW1iZXIge1xuICBpZiAoIWxpbWl0IHx8ICFOdW1iZXIuaXNGaW5pdGUobGltaXQpKSByZXR1cm4gRElSRUNUT1JZX0RFRkFVTFRfTElNSVQ7XG4gIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChNYXRoLnRydW5jKGxpbWl0KSwgMSksIERJUkVDVE9SWV9NQVhfTElNSVQpO1xufVxuXG4vKipcbiAqIFRoZSBmaWx0ZXJlZCBiYXNlIHNldCBhcyBhIENURSBib2R5LiBFdmVyeSBzZWFyY2gsIGZhY2V0IGFuZCBjYXRlZ29yeSBxdWVyeVxuICogcmVhZHMgdGhyb3VnaCB0aGlzLCBzbyB0aGV5IGNhbid0IGRpc2FncmVlIGFib3V0IHdoYXQncyB2aXNpYmxlLlxuICovXG5mdW5jdGlvbiBiYXNlUXVlcnkocGFyYW1zOiBEaXJlY3RvcnlTZWFyY2hQYXJhbXMsIHE6IHN0cmluZyk6IFNRTCB7XG4gIGNvbnN0IHdoZXJlOiBTUUxbXSA9IFtzcWxgbC5wYXVzZWRfYXQgSVMgTlVMTGBdO1xuICBpZiAocSkge1xuICAgIC8vIEZ1bGwgdGV4dCwgT1IgYSBmdXp6eSBtYXRjaCBhZ2FpbnN0IHRoZSBiZXN0LW1hdGNoaW5nIFBBUlQgb2YgdGhlIG5hbWVcbiAgICAvLyAod29yZF9zaW1pbGFyaXR5OiBcInRlcmFmcm9tXCIg4oaSIHRlcnJhZm9ybS1wbGFuIHNjb3JlcyAwLjM2LCB3aGlsZSB1bnJlbGF0ZWRcbiAgICAvLyB3b3JkcyBzdGF5IOKJpCAwLjIg4oCUIHdob2xlLW5hbWUgc2ltaWxhcml0eSgpIGRpbHV0ZXMgYSBsb25nIG5hbWUgYmVsb3cgYW55XG4gICAgLy8gdXNlZnVsIHRocmVzaG9sZCkuIEV4cGxpY2l0IGZ1bmN0aW9uLCBub3QgdGhlIGA8JWAgb3BlcmF0b3IsIHNvIHRoZSBjdXQtb2ZmXG4gICAgLy8gZG9lc24ndCBkZXBlbmQgb24gYSBzZXNzaW9uIEdVQyBwZ2JvdW5jZXIgY2FuJ3QgY2FycnkuIEEgc2VxIHNjYW4gb3ZlciB0aGVcbiAgICAvLyBwdWJsaWMgbGlzdGluZ3MgKHRob3VzYW5kcyBvZiByb3dzIGF0IG1vc3QpIGlzIGZpbmUuXG4gICAgd2hlcmUucHVzaChzcWxgKGwuc2VhcmNoX3ZlY3RvciBAQCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICR7cX0pIE9SIHdvcmRfc2ltaWxhcml0eSgke3F9LCBsLm5hbWUpID49ICR7RlVaWllfTkFNRV9USFJFU0hPTER9IE9SIGwubmFtZSBJTElLRSAke2AlJHtxLnJlcGxhY2UoL1tcXFxcJV9dL2csICdcXFxcJCYnKX0lYH0pYCk7XG4gIH1cbiAgaWYgKHBhcmFtcy5jYXRlZ29yeSkgd2hlcmUucHVzaChzcWxgbC5jYXRlZ29yeSA9ICR7cGFyYW1zLmNhdGVnb3J5fWApO1xuICBpZiAocGFyYW1zLnRpZXIpIHdoZXJlLnB1c2goc3FsYGwucHVibGlzaGVyX3RpZXIgPSAke3BhcmFtcy50aWVyfWApO1xuICBpZiAocGFyYW1zLmxpY2Vuc2UpIHdoZXJlLnB1c2goc3FsYGwubGljZW5zZSA9ICR7cGFyYW1zLmxpY2Vuc2V9YCk7XG4gIGlmIChwYXJhbXMuY29tcHV0ZVR5cGUpIHdoZXJlLnB1c2goc3FsYHYuY29tcHV0ZV90eXBlID0gJHtwYXJhbXMuY29tcHV0ZVR5cGV9YCk7XG4gIGlmIChwYXJhbXMubmVlZHNTZWNyZXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB3aGVyZS5wdXNoKHBhcmFtcy5uZWVkc1NlY3JldHNcbiAgICAgID8gc3FsYGpzb25iX2FycmF5X2xlbmd0aChDT0FMRVNDRSh2LnNlY3JldHMsICdbXSc6Ompzb25iKSkgPiAwYFxuICAgICAgOiBzcWxganNvbmJfYXJyYXlfbGVuZ3RoKENPQUxFU0NFKHYuc2VjcmV0cywgJ1tdJzo6anNvbmIpKSA9IDBgKTtcbiAgfVxuICBpZiAocGFyYW1zLm1pblJhdGluZyAhPT0gdW5kZWZpbmVkICYmIE51bWJlci5pc0Zpbml0ZShwYXJhbXMubWluUmF0aW5nKSkge1xuICAgIHdoZXJlLnB1c2goc3FsYGwucmF0aW5nX2JheWVzID49ICR7cGFyYW1zLm1pblJhdGluZ31gKTtcbiAgfVxuICBjb25zdCByYW5rID0gcVxuICAgID8gc3FsYCh0c19yYW5rKGwuc2VhcmNoX3ZlY3Rvciwgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAke3F9KSkgKyB3b3JkX3NpbWlsYXJpdHkoJHtxfSwgbC5uYW1lKSlgXG4gICAgOiBzcWxgMDo6cmVhbGA7XG4gIHJldHVybiBzcWxgXG4gICAgU0VMRUNUIGwuaWQsIGwucHVibGlzaGVyX2hhbmRsZSwgbC5wdWJsaXNoZXJfZGlzcGxheV9uYW1lLCBsLnB1Ymxpc2hlcl90aWVyLCBsLm5hbWUsIGwuY2F0ZWdvcnksXG4gICAgICAgICAgIGwuc3VtbWFyeSwgbC5kZXNjcmlwdGlvbiwgbC5yZWFkbWVfaHRtbCwgbC5saWNlbnNlLCBsLmhvbWVwYWdlX3VybCwgbC5zb3VyY2VfdXJsLCBsLmljb24sXG4gICAgICAgICAgIGwudXBsb2FkZWRfaWNvbiwgbC5rZXl3b3JkcywgbC5sYXRlc3RfdmVyc2lvbiwgbC51cGRhdGVkX2F0LCBsLnJhdGluZ19iYXllcywgbC5yYXRpbmdfY291bnQsXG4gICAgICAgICAgIGwucmF0aW5nX2Rpc3QsIGwuaW5zdGFsbF9jb3VudCwgbC5hY3RpdmVfb3JnX2NvdW50LCBsLmhlYWx0aF9zY29yZSwgbC5zdGF0ZSxcbiAgICAgICAgICAgdi5jb21wdXRlX3R5cGUsXG4gICAgICAgICAgIChqc29uYl9hcnJheV9sZW5ndGgoQ09BTEVTQ0Uodi5zZWNyZXRzLCAnW10nOjpqc29uYikpID4gMCkgQVMgbmVlZHNfc2VjcmV0cyxcbiAgICAgICAgICAgJHtyYW5rfSBBUyByYW5rXG4gICAgICBGUk9NIHB1YmxpY19saXN0aW5ncyBsXG4gICAgICBMRUZUIEpPSU4gTEFURVJBTCAoXG4gICAgICAgIFNFTEVDVCBwdi5jb21wdXRlX3R5cGUsIHB2LnNlY3JldHNcbiAgICAgICAgICBGUk9NIHB1YmxpY19saXN0ZWRfdmVyc2lvbnMgcHZcbiAgICAgICAgIFdIRVJFIHB2Lmxpc3RpbmdfaWQgPSBsLmlkIEFORCBwdi52ZXJzaW9uID0gbC5sYXRlc3RfdmVyc2lvbiBBTkQgTk9UIHB2LnlhbmtlZFxuICAgICAgICAgTElNSVQgMVxuICAgICAgKSB2IE9OIHRydWVcbiAgICAgV0hFUkUgJHtzcWwuam9pbih3aGVyZSwgc3FsYCBBTkQgYCl9YDtcbn1cblxuZnVuY3Rpb24gb3JkZXJCeShzb3J0OiBEaXJlY3RvcnlTb3J0LCBoYXNRdWVyeTogYm9vbGVhbik6IFNRTCB7XG4gIHN3aXRjaCAoc29ydCA9PT0gJ3JlbGV2YW5jZScgJiYgIWhhc1F1ZXJ5ID8gJ3VwZGF0ZWQnIDogc29ydCkge1xuICAgIGNhc2UgJ3JlbGV2YW5jZSc6XG4gICAgICAvLyBUZXh0IHJlbGV2YW5jZSBmaXJzdCwgbnVkZ2VkIGJ5IHJhdGluZyBhbmQgYWRvcHRpb24gc28gZXF1YWwgbWF0Y2hlc1xuICAgICAgLy8gZmF2b3VyIHByb3ZlbiBwbHVnaW5zLlxuICAgICAgcmV0dXJuIHNxbGAocmFuayAqICgxICsgQ09BTEVTQ0UocmF0aW5nX2JheWVzLCAwKSAvIDEwKSArIGxuKDEgKyBpbnN0YWxsX2NvdW50KSAvIDIwKSBERVNDLCBuYW1lIEFTQ2A7XG4gICAgY2FzZSAncmF0aW5nJzpcbiAgICAgIHJldHVybiBzcWxgcmF0aW5nX2JheWVzIERFU0MgTlVMTFMgTEFTVCwgcmF0aW5nX2NvdW50IERFU0MsIG5hbWUgQVNDYDtcbiAgICBjYXNlICdpbnN0YWxscyc6XG4gICAgICByZXR1cm4gc3FsYGluc3RhbGxfY291bnQgREVTQywgbmFtZSBBU0NgO1xuICAgIGNhc2UgJ25hbWUnOlxuICAgICAgcmV0dXJuIHNxbGBuYW1lIEFTQywgcHVibGlzaGVyX2hhbmRsZSBBU0NgO1xuICAgIGNhc2UgJ2hlYWx0aCc6XG4gICAgICByZXR1cm4gc3FsYGhlYWx0aF9zY29yZSBERVNDIE5VTExTIExBU1QsIGluc3RhbGxfY291bnQgREVTQywgbmFtZSBBU0NgO1xuICAgIGNhc2UgJ3VwZGF0ZWQnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3FsYHVwZGF0ZWRfYXQgREVTQywgbmFtZSBBU0NgO1xuICB9XG59XG5cbi8qKiBTZWFyY2ggdGhlIGRpcmVjdG9yeTogb25lIHBhZ2Ugb2YgY2FyZHMsIGZhY2V0IGNvdW50cywgdG90YWwgYW5kIG5leHQgY3Vyc29yLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlYXJjaFB1YmxpY0xpc3RpbmdzKHBhcmFtczogRGlyZWN0b3J5U2VhcmNoUGFyYW1zKTogUHJvbWlzZTxEaXJlY3RvcnlTZWFyY2hSZXN1bHQ+IHtcbiAgY29uc3QgZGIgPSBnZXRQdWJsaWNSZWFkZXJEYigpO1xuICBjb25zdCBxID0gbm9ybWFsaXplUXVlcnkocGFyYW1zLnEpO1xuICBjb25zdCBsaW1pdCA9IGNsYW1wTGltaXQocGFyYW1zLmxpbWl0KTtcbiAgY29uc3Qgb2Zmc2V0ID0gZGVjb2RlT2Zmc2V0Q3Vyc29yKHBhcmFtcy5jdXJzb3IpO1xuICBjb25zdCBzb3J0ID0gcGFyYW1zLnNvcnQgJiYgRElSRUNUT1JZX1NPUlRTLmluY2x1ZGVzKHBhcmFtcy5zb3J0KSA/IHBhcmFtcy5zb3J0IDogJ3JlbGV2YW5jZSc7XG4gIGNvbnN0IGJhc2UgPSBiYXNlUXVlcnkocGFyYW1zLCBxKTtcblxuICBjb25zdCBbcGFnZVJlcywgZmFjZXRSZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGRiLmV4ZWN1dGUoc3FsYFxuICAgICAgV0lUSCBiYXNlIEFTICgke2Jhc2V9KVxuICAgICAgU0VMRUNUIGJhc2UuKiwgQ09VTlQoKikgT1ZFUiAoKSBBUyB0b3RhbFxuICAgICAgICBGUk9NIGJhc2VcbiAgICAgICBPUkRFUiBCWSAke29yZGVyQnkoc29ydCwgcSAhPT0gJycpfVxuICAgICAgIExJTUlUICR7bGltaXR9IE9GRlNFVCAke29mZnNldH1gKSxcbiAgICBkYi5leGVjdXRlKHNxbGBcbiAgICAgIFdJVEggYmFzZSBBUyAoJHtiYXNlfSlcbiAgICAgIFNFTEVDVCBjYXRlZ29yeSwgcHVibGlzaGVyX3RpZXIsIGxpY2Vuc2UsIGNvbXB1dGVfdHlwZSwgbmVlZHNfc2VjcmV0cyxcbiAgICAgICAgICAgICBHUk9VUElORyhjYXRlZ29yeSkgQVMgZ19jYXRlZ29yeSwgR1JPVVBJTkcocHVibGlzaGVyX3RpZXIpIEFTIGdfdGllcixcbiAgICAgICAgICAgICBHUk9VUElORyhsaWNlbnNlKSBBUyBnX2xpY2Vuc2UsIEdST1VQSU5HKGNvbXB1dGVfdHlwZSkgQVMgZ19jb21wdXRlLFxuICAgICAgICAgICAgIEdST1VQSU5HKG5lZWRzX3NlY3JldHMpIEFTIGdfc2VjcmV0cyxcbiAgICAgICAgICAgICBDT1VOVCgqKSBBUyBuXG4gICAgICAgIEZST00gYmFzZVxuICAgICAgIEdST1VQIEJZIEdST1VQSU5HIFNFVFMgKChjYXRlZ29yeSksIChwdWJsaXNoZXJfdGllciksIChsaWNlbnNlKSwgKGNvbXB1dGVfdHlwZSksIChuZWVkc19zZWNyZXRzKSlgKSxcbiAgXSk7XG5cbiAgY29uc3QgcGFnZSA9IHJlc3VsdFJvd3M8UHVibGljTGlzdGluZ1JvdyAmIHsgdG90YWw6IG51bWJlciB8IHN0cmluZyB9PihwYWdlUmVzKTtcbiAgY29uc3QgdG90YWwgPSBwYWdlLmxlbmd0aCA+IDAgPyBudW0ocGFnZVswXSEudG90YWwpIDogMDtcbiAgY29uc3QgaXRlbXMgPSBwYWdlLm1hcCgocm93KSA9PiB7XG4gICAgY29uc3QgY2FyZCA9IHRvTGlzdGluZ0NhcmQocm93KTtcbiAgICBpZiAocSkge1xuICAgICAgY29uc3QgaGlnaGxpZ2h0ID0geyBuYW1lOiBoaWdobGlnaHRUZXh0KGNhcmQubmFtZSwgcSksIHN1bW1hcnk6IGhpZ2hsaWdodFRleHQoY2FyZC5zdW1tYXJ5LCBxKSB9O1xuICAgICAgaWYgKGhpZ2hsaWdodC5uYW1lIHx8IGhpZ2hsaWdodC5zdW1tYXJ5KSBjYXJkLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgICB9XG4gICAgcmV0dXJuIGNhcmQ7XG4gIH0pO1xuXG4gIGNvbnN0IGZhY2V0czogRGlyZWN0b3J5U2VhcmNoUmVzdWx0WydmYWNldHMnXSA9IHtcbiAgICBjYXRlZ29yeToge30sIHRpZXI6IHt9LCBsaWNlbnNlOiB7fSwgY29tcHV0ZVR5cGU6IHt9LCBuZWVkc1NlY3JldHM6IHsgdHJ1ZTogMCwgZmFsc2U6IDAgfSxcbiAgfTtcbiAgdHlwZSBGYWNldFJvdyA9IHtcbiAgICBjYXRlZ29yeTogc3RyaW5nIHwgbnVsbDtcbiAgICBwdWJsaXNoZXJfdGllcjogc3RyaW5nIHwgbnVsbDtcbiAgICBsaWNlbnNlOiBzdHJpbmcgfCBudWxsO1xuICAgIGNvbXB1dGVfdHlwZTogc3RyaW5nIHwgbnVsbDtcbiAgICBuZWVkc19zZWNyZXRzOiBib29sZWFuIHwgbnVsbDtcbiAgICBnX2NhdGVnb3J5OiBudW1iZXI7XG4gICAgZ190aWVyOiBudW1iZXI7XG4gICAgZ19saWNlbnNlOiBudW1iZXI7XG4gICAgZ19jb21wdXRlOiBudW1iZXI7XG4gICAgZ19zZWNyZXRzOiBudW1iZXI7XG4gICAgbjogbnVtYmVyIHwgc3RyaW5nO1xuICB9O1xuICBmb3IgKGNvbnN0IHIgb2YgcmVzdWx0Um93czxGYWNldFJvdz4oZmFjZXRSZXMpKSB7XG4gICAgY29uc3QgbiA9IG51bShyLm4pO1xuICAgIGlmIChOdW1iZXIoci5nX2NhdGVnb3J5KSA9PT0gMCAmJiByLmNhdGVnb3J5KSBmYWNldHMuY2F0ZWdvcnlbci5jYXRlZ29yeV0gPSBuO1xuICAgIGVsc2UgaWYgKE51bWJlcihyLmdfdGllcikgPT09IDAgJiYgci5wdWJsaXNoZXJfdGllcikgZmFjZXRzLnRpZXJbci5wdWJsaXNoZXJfdGllcl0gPSBuO1xuICAgIGVsc2UgaWYgKE51bWJlcihyLmdfbGljZW5zZSkgPT09IDAgJiYgci5saWNlbnNlKSBmYWNldHMubGljZW5zZVtyLmxpY2Vuc2VdID0gbjtcbiAgICBlbHNlIGlmIChOdW1iZXIoci5nX2NvbXB1dGUpID09PSAwICYmIHIuY29tcHV0ZV90eXBlKSBmYWNldHMuY29tcHV0ZVR5cGVbci5jb21wdXRlX3R5cGVdID0gbjtcbiAgICBlbHNlIGlmIChOdW1iZXIoci5nX3NlY3JldHMpID09PSAwICYmIHIubmVlZHNfc2VjcmV0cyAhPT0gbnVsbCkgZmFjZXRzLm5lZWRzU2VjcmV0c1tyLm5lZWRzX3NlY3JldHMgPyAndHJ1ZScgOiAnZmFsc2UnXSA9IG47XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGl0ZW1zLFxuICAgIGZhY2V0cyxcbiAgICB0b3RhbCxcbiAgICBuZXh0Q3Vyc29yOiBvZmZzZXQgKyBpdGVtcy5sZW5ndGggPCB0b3RhbCA/IGVuY29kZU9mZnNldEN1cnNvcihvZmZzZXQgKyBpdGVtcy5sZW5ndGgpIDogbnVsbCxcbiAgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENhdGVnb3JpZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBFdmVyeSBjYXRlZ29yeSB3aXRoIGl0cyBsaXZlIGNvdW50IGFuZCBpdHMgdG9wIGxpc3RpbmdzIChieSByYXRpbmcsIHRoZW4gaW5zdGFsbHMpLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RQdWJsaWNDYXRlZ29yaWVzKHRvcFBlckNhdGVnb3J5ID0gMyk6IFByb21pc2U8RGlyZWN0b3J5Q2F0ZWdvcnlTdW1tYXJ5W10+IHtcbiAgY29uc3QgZGIgPSBnZXRQdWJsaWNSZWFkZXJEYigpO1xuICBjb25zdCByZXMgPSBhd2FpdCBkYi5leGVjdXRlKHNxbGBcbiAgICBXSVRIIHJhbmtlZCBBUyAoXG4gICAgICBTRUxFQ1QgbC4qLFxuICAgICAgICAgICAgIFJPV19OVU1CRVIoKSBPVkVSIChQQVJUSVRJT04gQlkgbC5jYXRlZ29yeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUkRFUiBCWSBsLnJhdGluZ19iYXllcyBERVNDIE5VTExTIExBU1QsIGwuaW5zdGFsbF9jb3VudCBERVNDLCBsLm5hbWUgQVNDKSBBUyBybixcbiAgICAgICAgICAgICBDT1VOVCgqKSBPVkVSIChQQVJUSVRJT04gQlkgbC5jYXRlZ29yeSkgQVMgY2F0ZWdvcnlfY291bnRcbiAgICAgICAgRlJPTSBwdWJsaWNfbGlzdGluZ3MgbFxuICAgICAgIFdIRVJFIGwucGF1c2VkX2F0IElTIE5VTExcbiAgICApXG4gICAgU0VMRUNUICogRlJPTSByYW5rZWQgV0hFUkUgcm4gPD0gJHtNYXRoLm1heCgwLCBNYXRoLm1pbih0b3BQZXJDYXRlZ29yeSwgMTApKX0gT1JERVIgQlkgY2F0ZWdvcnkgQVNDLCBybiBBU0NgKTtcblxuICBjb25zdCBieUNhdGVnb3J5ID0gbmV3IE1hcDxzdHJpbmcsIERpcmVjdG9yeUNhdGVnb3J5U3VtbWFyeT4oKTtcbiAgZm9yIChjb25zdCByb3cgb2YgcmVzdWx0Um93czxQdWJsaWNMaXN0aW5nUm93ICYgeyBjYXRlZ29yeV9jb3VudDogbnVtYmVyIHwgc3RyaW5nIH0+KHJlcykpIHtcbiAgICBsZXQgc3VtbWFyeSA9IGJ5Q2F0ZWdvcnkuZ2V0KHJvdy5jYXRlZ29yeSk7XG4gICAgaWYgKCFzdW1tYXJ5KSB7XG4gICAgICBzdW1tYXJ5ID0geyBpZDogcm93LmNhdGVnb3J5LCBjb3VudDogbnVtKHJvdy5jYXRlZ29yeV9jb3VudCksIHRvcDogW10gfTtcbiAgICAgIGJ5Q2F0ZWdvcnkuc2V0KHJvdy5jYXRlZ29yeSwgc3VtbWFyeSk7XG4gICAgfVxuICAgIHN1bW1hcnkudG9wLnB1c2godG9MaXN0aW5nQ2FyZChyb3cpKTtcbiAgfVxuICByZXR1cm4gWy4uLmJ5Q2F0ZWdvcnkudmFsdWVzKCldO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gT25lIGxpc3Rpbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnR5cGUgVmVyc2lvblJvdyA9IHtcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBwdWJsaXNoZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gIGJyZWFraW5nOiBib29sZWFuO1xuICBkZXByZWNhdGVkX2F0OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbiAgZGVwcmVjYXRpb25fbWVzc2FnZTogc3RyaW5nIHwgbnVsbDtcbiAgeWFua2VkOiBib29sZWFuO1xuICBjaGFuZ2Vsb2c6IHN0cmluZyB8IG51bGw7XG4gIHZ1bG5fY3JpdGljYWw6IG51bWJlciB8IG51bGw7XG4gIHZ1bG5faGlnaDogbnVtYmVyIHwgbnVsbDtcbiAgdnVsbl9jcml0aWNhbF9maXhhYmxlOiBudW1iZXIgfCBudWxsO1xuICB2dWxuX2hpZ2hfZml4YWJsZTogbnVtYmVyIHwgbnVsbDtcbiAgc2Nhbm5lZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gIHNjYW5fZmxhZ2dlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gIGltYWdlX2RpZ2VzdDogc3RyaW5nIHwgbnVsbDtcbiAgaW1hZ2Vfc291cmNlOiBzdHJpbmcgfCBudWxsO1xuICBwbHVnaW5fdHlwZTogc3RyaW5nIHwgbnVsbDtcbiAgY29tcHV0ZV90eXBlOiBzdHJpbmcgfCBudWxsO1xuICBzZWNyZXRzOiB7IG5hbWU6IHN0cmluZzsgcmVxdWlyZWQ6IGJvb2xlYW47IGRlc2NyaXB0aW9uPzogc3RyaW5nIH1bXSB8IG51bGw7XG4gIHJlcXVpcmVkX21ldGFkYXRhOiBzdHJpbmdbXSB8IG51bGw7XG4gIHJlcXVpcmVkX3ZhcnM6IHN0cmluZ1tdIHwgbnVsbDtcbiAgbmV0d29ya19lZ3Jlc3M6IHN0cmluZ1tdIHwgbnVsbDtcbiAgcmVhZG1lX2h0bWw6IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIEFkdmlzb3J5Um93ID0ge1xuICBpZDogc3RyaW5nO1xuICBzZXZlcml0eTogc3RyaW5nO1xuICBzdW1tYXJ5OiBzdHJpbmc7XG4gIGFmZmVjdGVkX3JhbmdlOiBzdHJpbmc7XG4gIGZpeGVkX3ZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gIHB1Ymxpc2hlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gIGRldGFpbHNfaHRtbDogc3RyaW5nIHwgbnVsbDtcbiAgY3ZlX2lkczogc3RyaW5nW10gfCBudWxsO1xufTtcblxuLyoqXG4gKiBPbmUgbGlzdGluZydzIHBhZ2UgZGF0YSwgb3IgbnVsbCB3aGVuIGl0IGlzbid0IHB1YmxpYyAodW5rbm93biwgc3VzcGVuZGVkLFxuICogdHJhbnNmZXJyZWQsIHBhdXNlZCBieSBpdHMgcHVibGlzaGVyIOKAlCBvciBpdHMgcHVibGlzaGVyIGlzIHN1c3BlbmRlZCkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQdWJsaWNMaXN0aW5nKHB1Ymxpc2hlckhhbmRsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBQcm9taXNlPERpcmVjdG9yeUxpc3RpbmdEZXRhaWwgfCBudWxsPiB7XG4gIGNvbnN0IGRiID0gZ2V0UHVibGljUmVhZGVyRGIoKTtcbiAgY29uc3QgbGlzdGluZ1JlcyA9IGF3YWl0IGRiLmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVCAqIEZST00gcHVibGljX2xpc3RpbmdzXG4gICAgIFdIRVJFIHB1Ymxpc2hlcl9oYW5kbGUgPSAke3B1Ymxpc2hlckhhbmRsZX0gQU5EIG5hbWUgPSAke25hbWV9IEFORCBwYXVzZWRfYXQgSVMgTlVMTFxuICAgICBMSU1JVCAxYCk7XG4gIGNvbnN0IHJvdyA9IHJlc3VsdFJvd3M8UHVibGljTGlzdGluZ1Jvdz4obGlzdGluZ1JlcylbMF07XG4gIGlmICghcm93KSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBbdmVyc2lvblJlcywgYWR2aXNvcnlSZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGRiLmV4ZWN1dGUoc3FsYFNFTEVDVCAqIEZST00gcHVibGljX2xpc3RlZF92ZXJzaW9ucyBXSEVSRSBsaXN0aW5nX2lkID0gJHtyb3cuaWR9YCksXG4gICAgZGIuZXhlY3V0ZShzcWxgU0VMRUNUICogRlJPTSBwdWJsaWNfYWR2aXNvcmllcyBXSEVSRSBsaXN0aW5nX2lkID0gJHtyb3cuaWR9IE9SREVSIEJZIHB1Ymxpc2hlZF9hdCBERVNDYCksXG4gIF0pO1xuICBjb25zdCB2ZXJzaW9uUm93cyA9IHJlc3VsdFJvd3M8VmVyc2lvblJvdz4odmVyc2lvblJlcykuc29ydCgoYSwgYikgPT4gY29tcGFyZVNlbXZlcihiLnZlcnNpb24sIGEudmVyc2lvbikpO1xuICBjb25zdCBhZHZpc29yeVJvd3MgPSByZXN1bHRSb3dzPEFkdmlzb3J5Um93PihhZHZpc29yeVJlcyk7XG4gIC8vIFRoZSB2ZXJzaW9uIHRoZSBwYWdlIGRlc2NyaWJlczogdGhlIGxpc3RpbmcncyBsYXRlc3QsIGVsc2UgdGhlIG5ld2VzdCBub24teWFua2VkIG9uZS5cbiAgY29uc3QgY3VycmVudCA9IHZlcnNpb25Sb3dzLmZpbmQoKHYpID0+IHYudmVyc2lvbiA9PT0gcm93LmxhdGVzdF92ZXJzaW9uICYmICF2LnlhbmtlZClcbiAgICA/PyB2ZXJzaW9uUm93cy5maW5kKCh2KSA9PiAhdi55YW5rZWQpXG4gICAgPz8gbnVsbDtcblxuICBjb25zdCBkaXN0ID0gcm93LnJhdGluZ19kaXN0ID8/IG51bGw7XG4gIGNvbnN0IGNhcmQgPSB0b0xpc3RpbmdDYXJkKHJvdyk7XG4gIHJldHVybiB7XG4gICAgLi4uY2FyZCxcbiAgICByZWFkbWVIdG1sOiByb3cucmVhZG1lX2h0bWwgPz8gY3VycmVudD8ucmVhZG1lX2h0bWwgPz8gbnVsbCxcbiAgICBkZXNjcmlwdGlvbjogcm93LmRlc2NyaXB0aW9uID8/ICcnLFxuICAgIGhvbWVwYWdlVXJsOiByb3cuaG9tZXBhZ2VfdXJsLFxuICAgIHNvdXJjZVVybDogcm93LnNvdXJjZV91cmwsXG4gICAgdmVyc2lvbnM6IHZlcnNpb25Sb3dzLm1hcCgodikgPT4gKHtcbiAgICAgIHZlcnNpb246IHYudmVyc2lvbixcbiAgICAgIHB1Ymxpc2hlZEF0OiBpc28odi5wdWJsaXNoZWRfYXQpLFxuICAgICAgYnJlYWtpbmc6IHYuYnJlYWtpbmcsXG4gICAgICBkZXByZWNhdGVkOiB2LmRlcHJlY2F0ZWRfYXQgIT0gbnVsbCxcbiAgICAgIGRlcHJlY2F0aW9uTWVzc2FnZTogdi5kZXByZWNhdGlvbl9tZXNzYWdlLFxuICAgICAgeWFua2VkOiB2LnlhbmtlZCxcbiAgICAgIGNoYW5nZWxvZzogdi5jaGFuZ2Vsb2csXG4gICAgICB2dWxuQ3JpdGljYWw6IHYudnVsbl9jcml0aWNhbCxcbiAgICAgIHZ1bG5IaWdoOiB2LnZ1bG5faGlnaCxcbiAgICAgIHZ1bG5Dcml0aWNhbEZpeGFibGU6IHYudnVsbl9jcml0aWNhbF9maXhhYmxlID8/IG51bGwsXG4gICAgICB2dWxuSGlnaEZpeGFibGU6IHYudnVsbl9oaWdoX2ZpeGFibGUgPz8gbnVsbCxcbiAgICAgIHNjYW5uZWRBdDogdi5zY2FubmVkX2F0ID8gaXNvKHYuc2Nhbm5lZF9hdCkgOiBudWxsLFxuICAgICAgc2NhbkZsYWdnZWRBdDogdi5zY2FuX2ZsYWdnZWRfYXQgPyBpc28odi5zY2FuX2ZsYWdnZWRfYXQpIDogbnVsbCxcbiAgICAgIGFkdmlzb3J5SWRzOiBhZHZpc29yeVJvd3MuZmlsdGVyKChhKSA9PiBhZHZpc29yeVJhbmdlQ292ZXJzKGEuYWZmZWN0ZWRfcmFuZ2UsIHYudmVyc2lvbikpLm1hcCgoYSkgPT4gYS5pZCksXG4gICAgfSkpLFxuICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgIHNlY3JldHM6IChjdXJyZW50Py5zZWNyZXRzID8/IFtdKS5tYXAoKHMpID0+ICh7IG5hbWU6IHMubmFtZSwgcmVxdWlyZWQ6IHMucmVxdWlyZWQsIGRlc2NyaXB0aW9uOiBzLmRlc2NyaXB0aW9uID8/ICcnIH0pKSxcbiAgICAgIHJlcXVpcmVkTWV0YWRhdGE6IGN1cnJlbnQ/LnJlcXVpcmVkX21ldGFkYXRhID8/IFtdLFxuICAgICAgcmVxdWlyZWRWYXJzOiBjdXJyZW50Py5yZXF1aXJlZF92YXJzID8/IFtdLFxuICAgICAgY29tcHV0ZVR5cGU6IGN1cnJlbnQ/LmNvbXB1dGVfdHlwZSA/PyAnJyxcbiAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6IG51bGwsXG4gICAgICBuZXR3b3JrRWdyZXNzOiBjdXJyZW50Py5uZXR3b3JrX2VncmVzcyA/PyBbXSxcbiAgICAgIHBsdWdpblR5cGU6IGN1cnJlbnQ/LnBsdWdpbl90eXBlID8/ICcnLFxuICAgIH0sXG4gICAgc3VwcGx5Q2hhaW46IHtcbiAgICAgIC8vIEEgbGlzdGVkIHZlcnNpb24gZXhpc3RzIG9ubHkgYWZ0ZXIgdGhlIHBsYXRmb3JtIHJlLXNpZ25lZCBpdCBpbiBwdWJsaWMvKi5cbiAgICAgIHNpZ25lZDogY3VycmVudD8uaW1hZ2VfZGlnZXN0ICE9IG51bGwsXG4gICAgICBkaWdlc3Q6IGN1cnJlbnQ/LmltYWdlX2RpZ2VzdCA/PyBudWxsLFxuICAgICAgaW1hZ2VTb3VyY2U6IGN1cnJlbnQ/LmltYWdlX3NvdXJjZSA/PyBudWxsLFxuICAgICAgc2Nhbm5lZEF0OiBjdXJyZW50Py5zY2FubmVkX2F0ID8gaXNvKGN1cnJlbnQuc2Nhbm5lZF9hdCkgOiBudWxsLFxuICAgICAgdnVsbkNyaXRpY2FsOiBjdXJyZW50Py52dWxuX2NyaXRpY2FsID8/IG51bGwsXG4gICAgICB2dWxuSGlnaDogY3VycmVudD8udnVsbl9oaWdoID8/IG51bGwsXG4gICAgICB2dWxuQ3JpdGljYWxGaXhhYmxlOiBjdXJyZW50Py52dWxuX2NyaXRpY2FsX2ZpeGFibGUgPz8gbnVsbCxcbiAgICAgIHZ1bG5IaWdoRml4YWJsZTogY3VycmVudD8udnVsbl9oaWdoX2ZpeGFibGUgPz8gbnVsbCxcbiAgICAgIHNjYW5GbGFnZ2VkQXQ6IGN1cnJlbnQ/LnNjYW5fZmxhZ2dlZF9hdCA/IGlzbyhjdXJyZW50LnNjYW5fZmxhZ2dlZF9hdCkgOiBudWxsLFxuICAgICAgc2JvbVVybDogY3VycmVudD8uaW1hZ2VfZGlnZXN0XG4gICAgICAgID8gYC9hcGkvcHVibGljL3BsdWdpbnMvJHtlbmNvZGVVUklDb21wb25lbnQocm93LnB1Ymxpc2hlcl9oYW5kbGUpfS8ke2VuY29kZVVSSUNvbXBvbmVudChyb3cubmFtZSl9L3ZlcnNpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGN1cnJlbnQudmVyc2lvbil9L3Nib21gXG4gICAgICAgIDogbnVsbCxcbiAgICB9LFxuICAgIGFkdmlzb3JpZXM6IGFkdmlzb3J5Um93cy5tYXAoKGEpID0+ICh7XG4gICAgICBpZDogYS5pZCxcbiAgICAgIHNldmVyaXR5OiBhLnNldmVyaXR5LFxuICAgICAgc3VtbWFyeTogYS5zdW1tYXJ5LFxuICAgICAgYWZmZWN0ZWRSYW5nZTogYS5hZmZlY3RlZF9yYW5nZSxcbiAgICAgIGZpeGVkVmVyc2lvbjogYS5maXhlZF92ZXJzaW9uLFxuICAgICAgcHVibGlzaGVkQXQ6IGlzbyhhLnB1Ymxpc2hlZF9hdCksXG4gICAgICBkZXRhaWxzSHRtbDogYS5kZXRhaWxzX2h0bWwsXG4gICAgICBjdmVJZHM6IGEuY3ZlX2lkcyA/PyBbXSxcbiAgICB9KSksXG4gICAgcmF0aW5nRGlzdHJpYnV0aW9uOiBkaXN0XG4gICAgICA/IHsgMTogbnVtKGRpc3RbJzEnXSksIDI6IG51bShkaXN0WycyJ10pLCAzOiBudW0oZGlzdFsnMyddKSwgNDogbnVtKGRpc3RbJzQnXSksIDU6IG51bShkaXN0Wyc1J10pIH1cbiAgICAgIDogbnVsbCxcbiAgICByZWNlbnRSYXRpbmc6IHJvdy5yZWNlbnRfcmF0aW5nID09IG51bGwgPyBudWxsIDogTWF0aC5yb3VuZChudW0ocm93LnJlY2VudF9yYXRpbmcpICogMTAwKSAvIDEwMCxcbiAgICBhY3RpdmVPcmdDb3VudDogcm93LmFjdGl2ZV9vcmdfY291bnQgPT0gbnVsbCA/IG51bGwgOiBudW0ocm93LmFjdGl2ZV9vcmdfY291bnQpLFxuICAgIGhlYWx0aEJyZWFrZG93bjogcm93LmhlYWx0aF9icmVha2Rvd24gPz8gbnVsbCxcbiAgICBzdWNjZXNzUmF0ZTMwZDogcm93LnN1Y2Nlc3NfcmF0ZV8zMGQgPT0gbnVsbCA/IG51bGwgOiBNYXRoLnJvdW5kKG51bShyb3cuc3VjY2Vzc19yYXRlXzMwZCkgKiAxMDAwKSAvIDEwMDAsXG4gIH07XG59XG5cbi8qKiBPbmUgbGlzdGVkIHZlcnNpb24ncyBwdWJsaWMgaW1hZ2UgaWRlbnRpdHkgKGZvciB0aGUgU0JPTSBkb3dubG9hZCksIG9yIG51bGwuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UHVibGljTGlzdGVkVmVyc2lvbihcbiAgcHVibGlzaGVySGFuZGxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nLFxuKTogUHJvbWlzZTx7IGltYWdlUmVwb3NpdG9yeTogc3RyaW5nOyBpbWFnZURpZ2VzdDogc3RyaW5nIH0gfCBudWxsPiB7XG4gIGNvbnN0IGRiID0gZ2V0UHVibGljUmVhZGVyRGIoKTtcbiAgY29uc3QgcmVzID0gYXdhaXQgZGIuZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIGltYWdlX3JlcG9zaXRvcnksIGltYWdlX2RpZ2VzdCBGUk9NIHB1YmxpY19saXN0ZWRfdmVyc2lvbnNcbiAgICAgV0hFUkUgcHVibGlzaGVyX2hhbmRsZSA9ICR7cHVibGlzaGVySGFuZGxlfSBBTkQgbmFtZSA9ICR7bmFtZX0gQU5EIHZlcnNpb24gPSAke3ZlcnNpb259IEFORCBOT1QgeWFua2VkXG4gICAgICAgQU5EIGxpc3RpbmdfaWQgSU4gKFNFTEVDVCBpZCBGUk9NIHB1YmxpY19saXN0aW5ncyBXSEVSRSBwYXVzZWRfYXQgSVMgTlVMTClcbiAgICAgTElNSVQgMWApO1xuICBjb25zdCByb3cgPSByZXN1bHRSb3dzPHsgaW1hZ2VfcmVwb3NpdG9yeTogc3RyaW5nIHwgbnVsbDsgaW1hZ2VfZGlnZXN0OiBzdHJpbmcgfCBudWxsIH0+KHJlcylbMF07XG4gIGlmICghcm93Py5pbWFnZV9yZXBvc2l0b3J5IHx8ICFyb3cuaW1hZ2VfZGlnZXN0KSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHsgaW1hZ2VSZXBvc2l0b3J5OiByb3cuaW1hZ2VfcmVwb3NpdG9yeSwgaW1hZ2VEaWdlc3Q6IHJvdy5pbWFnZV9kaWdlc3QgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJldmlld3Ncbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnR5cGUgUmV2aWV3Um93ID0ge1xuICBpZDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICByYXRpbmc6IG51bWJlciB8IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZyB8IG51bGw7XG4gIGJvZHlfaHRtbDogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aG9yX2Rpc3BsYXlfbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgdmVyaWZpZWRfdXNlOiBib29sZWFuO1xuICBoZWxwZnVsX2NvdW50OiBudW1iZXIgfCBzdHJpbmc7XG4gIGVkaXRlZDogYm9vbGVhbjtcbiAgY3JlYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgdXBkYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgcHVibGlzaGVyX2Rpc3BsYXlfbmFtZTogc3RyaW5nO1xuICByZXBseV9ib2R5X2h0bWw6IHN0cmluZyB8IG51bGw7XG4gIHJlcGx5X2NyZWF0ZWRfYXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICByZXBseV91cGRhdGVkX2F0OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbiAgdG90YWw6IG51bWJlciB8IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIHJldmlld09yZGVyKHNvcnQ6IFJldmlld1NvcnQpOiBTUUwge1xuICBzd2l0Y2ggKHNvcnQpIHtcbiAgICBjYXNlICdyZWNlbnQnOiByZXR1cm4gc3FsYGNyZWF0ZWRfYXQgREVTQywgaWQgQVNDYDtcbiAgICBjYXNlICdoaWdoZXN0JzogcmV0dXJuIHNxbGByYXRpbmcgREVTQywgaGVscGZ1bF9jb3VudCBERVNDLCBjcmVhdGVkX2F0IERFU0MsIGlkIEFTQ2A7XG4gICAgY2FzZSAnbG93ZXN0JzogcmV0dXJuIHNxbGByYXRpbmcgQVNDLCBoZWxwZnVsX2NvdW50IERFU0MsIGNyZWF0ZWRfYXQgREVTQywgaWQgQVNDYDtcbiAgICBjYXNlICdoZWxwZnVsJzpcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gVmVyaWZpZWQgdXNlIGJyZWFrcyB0aWVzOiBhbiBvcmcgdGhhdCBydW5zIHRoZSBwbHVnaW4ga25vd3MgaXQgYmVzdC5cbiAgICAgIHJldHVybiBzcWxgaGVscGZ1bF9jb3VudCBERVNDLCB2ZXJpZmllZF91c2UgREVTQywgY3JlYXRlZF9hdCBERVNDLCBpZCBBU0NgO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1B1YmxpY1Jldmlldyhyb3c6IE9taXQ8UmV2aWV3Um93LCAndG90YWwnPik6IFB1YmxpY1Jldmlld0l0ZW0ge1xuICByZXR1cm4ge1xuICAgIGlkOiByb3cuaWQsXG4gICAgcmF0aW5nOiBudW0ocm93LnJhdGluZyksXG4gICAgdGl0bGU6IHJvdy50aXRsZSxcbiAgICBib2R5SHRtbDogcm93LmJvZHlfaHRtbCxcbiAgICB2ZXJzaW9uOiByb3cudmVyc2lvbixcbiAgICBhdXRob3I6IHJvdy5hdXRob3JfZGlzcGxheV9uYW1lID8geyBkaXNwbGF5TmFtZTogcm93LmF1dGhvcl9kaXNwbGF5X25hbWUgfSA6IG51bGwsXG4gICAgdmVyaWZpZWRVc2U6IHJvdy52ZXJpZmllZF91c2UgPT09IHRydWUsXG4gICAgaGVscGZ1bENvdW50OiBudW0ocm93LmhlbHBmdWxfY291bnQpLFxuICAgIGVkaXRlZDogcm93LmVkaXRlZCA9PT0gdHJ1ZSxcbiAgICBjcmVhdGVkQXQ6IGlzbyhyb3cuY3JlYXRlZF9hdCksXG4gICAgdXBkYXRlZEF0OiBpc28ocm93LnVwZGF0ZWRfYXQpLFxuICAgIHJlcGx5OiByb3cucmVwbHlfYm9keV9odG1sXG4gICAgICA/IHtcbiAgICAgICAgYm9keUh0bWw6IHJvdy5yZXBseV9ib2R5X2h0bWwsXG4gICAgICAgIHB1Ymxpc2hlckRpc3BsYXlOYW1lOiByb3cucHVibGlzaGVyX2Rpc3BsYXlfbmFtZSxcbiAgICAgICAgY3JlYXRlZEF0OiBpc28ocm93LnJlcGx5X2NyZWF0ZWRfYXQpLFxuICAgICAgICB1cGRhdGVkQXQ6IGlzbyhyb3cucmVwbHlfdXBkYXRlZF9hdCksXG4gICAgICB9XG4gICAgICA6IG51bGwsXG4gIH07XG59XG5cbi8qKlxuICogT25lIHBhZ2Ugb2YgYSBsaXN0aW5nJ3MgcHVibGlzaGVkIHJldmlld3MgKHRoZSBkaXJlY3RvcnkncyBSZXZpZXdzIHRhYiksIG9yIG51bGxcbiAqIHdoZW4gdGhlIGxpc3RpbmcgaXNuJ3QgcHVibGljLiBIZWxkIGFuZCByZW1vdmVkIHJldmlld3MgbmV2ZXIgcmVhY2ggdGhlIHZpZXcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UHVibGljUmV2aWV3cyhwdWJsaXNoZXJIYW5kbGU6IHN0cmluZywgbmFtZTogc3RyaW5nLCBxdWVyeTogUHVibGljUmV2aWV3UXVlcnkgPSB7fSk6IFByb21pc2U8UHVibGljUmV2aWV3UGFnZSB8IG51bGw+IHtcbiAgY29uc3QgZGIgPSBnZXRQdWJsaWNSZWFkZXJEYigpO1xuICBjb25zdCBsaXN0aW5nID0gcmVzdWx0Um93czx7IGlkOiBzdHJpbmcgfT4oYXdhaXQgZGIuZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIGlkIEZST00gcHVibGljX2xpc3RpbmdzXG4gICAgIFdIRVJFIHB1Ymxpc2hlcl9oYW5kbGUgPSAke3B1Ymxpc2hlckhhbmRsZX0gQU5EIG5hbWUgPSAke25hbWV9IEFORCBwYXVzZWRfYXQgSVMgTlVMTFxuICAgICBMSU1JVCAxYCkpWzBdO1xuICBpZiAoIWxpc3RpbmcpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IHNvcnQgPSBxdWVyeS5zb3J0ICYmIFJFVklFV19TT1JUUy5pbmNsdWRlcyhxdWVyeS5zb3J0KSA/IHF1ZXJ5LnNvcnQgOiAnaGVscGZ1bCc7XG4gIGNvbnN0IGxpbWl0ID0gIXF1ZXJ5LmxpbWl0IHx8ICFOdW1iZXIuaXNGaW5pdGUocXVlcnkubGltaXQpXG4gICAgPyBSRVZJRVdTX0RFRkFVTFRfTElNSVRcbiAgICA6IE1hdGgubWluKE1hdGgubWF4KE1hdGgudHJ1bmMocXVlcnkubGltaXQpLCAxKSwgUkVWSUVXU19NQVhfTElNSVQpO1xuICBjb25zdCBvZmZzZXQgPSBkZWNvZGVPZmZzZXRDdXJzb3IocXVlcnkuY3Vyc29yKTtcbiAgY29uc3Qgd2hlcmU6IFNRTFtdID0gW3NxbGBsaXN0aW5nX2lkID0gJHtsaXN0aW5nLmlkfWBdO1xuICBpZiAocXVlcnkucmF0aW5nICE9PSB1bmRlZmluZWQgJiYgTnVtYmVyLmlzSW50ZWdlcihxdWVyeS5yYXRpbmcpICYmIHF1ZXJ5LnJhdGluZyA+PSAxICYmIHF1ZXJ5LnJhdGluZyA8PSA1KSB7XG4gICAgd2hlcmUucHVzaChzcWxgcmF0aW5nID0gJHtxdWVyeS5yYXRpbmd9YCk7XG4gIH1cbiAgY29uc3Qgcm93cyA9IHJlc3VsdFJvd3M8UmV2aWV3Um93Pihhd2FpdCBkYi5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1QgaWQsIHZlcnNpb24sIHJhdGluZywgdGl0bGUsIGJvZHlfaHRtbCwgYXV0aG9yX2Rpc3BsYXlfbmFtZSwgdmVyaWZpZWRfdXNlLCBoZWxwZnVsX2NvdW50LCBlZGl0ZWQsXG4gICAgICAgICAgIGNyZWF0ZWRfYXQsIHVwZGF0ZWRfYXQsIHB1Ymxpc2hlcl9kaXNwbGF5X25hbWUsIHJlcGx5X2JvZHlfaHRtbCwgcmVwbHlfY3JlYXRlZF9hdCwgcmVwbHlfdXBkYXRlZF9hdCxcbiAgICAgICAgICAgQ09VTlQoKikgT1ZFUiAoKSBBUyB0b3RhbFxuICAgICAgRlJPTSBwdWJsaWNfcmV2aWV3c1xuICAgICBXSEVSRSAke3NxbC5qb2luKHdoZXJlLCBzcWxgIEFORCBgKX1cbiAgICAgT1JERVIgQlkgJHtyZXZpZXdPcmRlcihzb3J0KX1cbiAgICAgTElNSVQgJHtsaW1pdH0gT0ZGU0VUICR7b2Zmc2V0fWApKTtcbiAgY29uc3QgdG90YWwgPSByb3dzLmxlbmd0aCA+IDAgPyBudW0ocm93c1swXSEudG90YWwpIDogMDtcbiAgcmV0dXJuIHtcbiAgICByZXZpZXdzOiByb3dzLm1hcCh0b1B1YmxpY1JldmlldyksXG4gICAgdG90YWwsXG4gICAgbmV4dEN1cnNvcjogb2Zmc2V0ICsgcm93cy5sZW5ndGggPCB0b3RhbCA/IGVuY29kZU9mZnNldEN1cnNvcihvZmZzZXQgKyByb3dzLmxlbmd0aCkgOiBudWxsLFxuICB9O1xufVxuXG4vKiogRXZlcnkgcHVibGljIGxpc3RpbmcncyBVUkwgcGFydHMgKyBsYXN0IHVwZGF0ZSwgZm9yIHRoZSBzaXRlbWFwLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RQdWJsaWNMaXN0aW5nc0ZvclNpdGVtYXAobWF4ID0gNTAwMCk6IFByb21pc2U8eyBwdWJsaXNoZXI6IHN0cmluZzsgbmFtZTogc3RyaW5nOyB1cGRhdGVkQXQ6IHN0cmluZyB9W10+IHtcbiAgY29uc3QgZGIgPSBnZXRQdWJsaWNSZWFkZXJEYigpO1xuICBjb25zdCByZXMgPSBhd2FpdCBkYi5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1QgcHVibGlzaGVyX2hhbmRsZSwgbmFtZSwgdXBkYXRlZF9hdCBGUk9NIHB1YmxpY19saXN0aW5nc1xuICAgICBXSEVSRSBwYXVzZWRfYXQgSVMgTlVMTCBPUkRFUiBCWSB1cGRhdGVkX2F0IERFU0MgTElNSVQgJHtNYXRoLm1pbihNYXRoLm1heChtYXgsIDEpLCA1MF8wMDApfWApO1xuICByZXR1cm4gcmVzdWx0Um93czx7IHB1Ymxpc2hlcl9oYW5kbGU6IHN0cmluZzsgbmFtZTogc3RyaW5nOyB1cGRhdGVkX2F0OiBEYXRlIHwgc3RyaW5nIH0+KHJlcylcbiAgICAubWFwKChyKSA9PiAoeyBwdWJsaXNoZXI6IHIucHVibGlzaGVyX2hhbmRsZSwgbmFtZTogci5uYW1lLCB1cGRhdGVkQXQ6IGlzbyhyLnVwZGF0ZWRfYXQpIH0pKTtcbn1cbiJdfQ==
@@ -1,2 +1,7 @@
1
1
  export declare const inventoryCache: import("@pipeline-builder/api-core").CacheService;
2
2
  export declare const timeseriesCache: import("@pipeline-builder/api-core").CacheService;
3
+ /** Drop every cached report for an org — called after an ingest/write that
4
+ * could change any of them. Both caches are pattern-invalidated because a
5
+ * single write (an event, a deploy outcome, an incident) can move inventory
6
+ * and timeseries numbers alike. */
7
+ export declare function invalidateOrgReports(orgId: string): Promise<void>;
@@ -11,4 +11,14 @@
11
11
  import { createCacheService, envInt } from '@pipeline-builder/api-core';
12
12
  export const inventoryCache = createCacheService('report:inv:', envInt('CACHE_TTL_REPORT_INVENTORY', 300, { min: 1 }));
13
13
  export const timeseriesCache = createCacheService('report:ts:', envInt('CACHE_TTL_REPORT_TIMESERIES', 120, { min: 1 }));
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9yZXBvcnRpbmcvY2FjaGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV4RSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgdHdvIHJlcG9ydCBjYWNoZXMuIEEgc2VwYXJhdGUgbW9kdWxlIGJlY2F1c2UgYm90aCB0aGUgc2VydmljZSAoZm9yXG4gKiBpbnZhbGlkYXRpb24pIGFuZCB0aGUgZXh0cmFjdGVkIHF1ZXJ5IG1vZHVsZXMgKHZpYSBydW5SZXBvcnQpIG5lZWQgdGhlbSwgYW5kIGFcbiAqIHNoYXJlZCBzaW5nbGV0b24gbXVzdCBoYXZlIGV4YWN0bHkgb25lIGRlZmluaXRpb24gc2l0ZS5cbiAqXG4gKiBJbnZlbnRvcnkgcmVhZHMgKHBsdWdpbiBzdW1tYXJ5L2Rpc3RyaWJ1dGlvbi92ZXJzaW9ucykgY2hhbmdlIHJhcmVseSDigJQgNSBtaW4uXG4gKiBUaW1lc2VyaWVzIHJlYWRzIChleGVjdXRpb24vYnVpbGQgbWV0cmljcyBvdmVyIGEgcmFuZ2UpIOKAlCAyIG1pbi5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVDYWNoZVNlcnZpY2UsIGVudkludCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcblxuZXhwb3J0IGNvbnN0IGludmVudG9yeUNhY2hlID0gY3JlYXRlQ2FjaGVTZXJ2aWNlKCdyZXBvcnQ6aW52OicsIGVudkludCgnQ0FDSEVfVFRMX1JFUE9SVF9JTlZFTlRPUlknLCAzMDAsIHsgbWluOiAxIH0pKTtcbmV4cG9ydCBjb25zdCB0aW1lc2VyaWVzQ2FjaGUgPSBjcmVhdGVDYWNoZVNlcnZpY2UoJ3JlcG9ydDp0czonLCBlbnZJbnQoJ0NBQ0hFX1RUTF9SRVBPUlRfVElNRVNFUklFUycsIDEyMCwgeyBtaW46IDEgfSkpO1xuIl19
14
+ /** Drop every cached report for an org — called after an ingest/write that
15
+ * could change any of them. Both caches are pattern-invalidated because a
16
+ * single write (an event, a deploy outcome, an incident) can move inventory
17
+ * and timeseries numbers alike. */
18
+ export async function invalidateOrgReports(orgId) {
19
+ await Promise.all([
20
+ inventoryCache.invalidatePattern(`${orgId}:*`),
21
+ timeseriesCache.invalidatePattern(`${orgId}:*`),
22
+ ]);
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9yZXBvcnRpbmcvY2FjaGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV4RSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFeEg7OztvQ0FHb0M7QUFDcEMsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxLQUFhO0lBQ3RELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNoQixjQUFjLENBQUMsaUJBQWlCLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQztRQUM5QyxlQUFlLENBQUMsaUJBQWlCLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQztLQUNoRCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIHR3byByZXBvcnQgY2FjaGVzLiBBIHNlcGFyYXRlIG1vZHVsZSBiZWNhdXNlIGJvdGggdGhlIHNlcnZpY2UgKGZvclxuICogaW52YWxpZGF0aW9uKSBhbmQgdGhlIGV4dHJhY3RlZCBxdWVyeSBtb2R1bGVzICh2aWEgcnVuUmVwb3J0KSBuZWVkIHRoZW0sIGFuZCBhXG4gKiBzaGFyZWQgc2luZ2xldG9uIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBkZWZpbml0aW9uIHNpdGUuXG4gKlxuICogSW52ZW50b3J5IHJlYWRzIChwbHVnaW4gc3VtbWFyeS9kaXN0cmlidXRpb24vdmVyc2lvbnMpIGNoYW5nZSByYXJlbHkg4oCUIDUgbWluLlxuICogVGltZXNlcmllcyByZWFkcyAoZXhlY3V0aW9uL2J1aWxkIG1ldHJpY3Mgb3ZlciBhIHJhbmdlKSDigJQgMiBtaW4uXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlQ2FjaGVTZXJ2aWNlLCBlbnZJbnQgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5cbmV4cG9ydCBjb25zdCBpbnZlbnRvcnlDYWNoZSA9IGNyZWF0ZUNhY2hlU2VydmljZSgncmVwb3J0OmludjonLCBlbnZJbnQoJ0NBQ0hFX1RUTF9SRVBPUlRfSU5WRU5UT1JZJywgMzAwLCB7IG1pbjogMSB9KSk7XG5leHBvcnQgY29uc3QgdGltZXNlcmllc0NhY2hlID0gY3JlYXRlQ2FjaGVTZXJ2aWNlKCdyZXBvcnQ6dHM6JywgZW52SW50KCdDQUNIRV9UVExfUkVQT1JUX1RJTUVTRVJJRVMnLCAxMjAsIHsgbWluOiAxIH0pKTtcblxuLyoqIERyb3AgZXZlcnkgY2FjaGVkIHJlcG9ydCBmb3IgYW4gb3JnIOKAlCBjYWxsZWQgYWZ0ZXIgYW4gaW5nZXN0L3dyaXRlIHRoYXRcbiAqICBjb3VsZCBjaGFuZ2UgYW55IG9mIHRoZW0uIEJvdGggY2FjaGVzIGFyZSBwYXR0ZXJuLWludmFsaWRhdGVkIGJlY2F1c2UgYVxuICogIHNpbmdsZSB3cml0ZSAoYW4gZXZlbnQsIGEgZGVwbG95IG91dGNvbWUsIGFuIGluY2lkZW50KSBjYW4gbW92ZSBpbnZlbnRvcnlcbiAqICBhbmQgdGltZXNlcmllcyBudW1iZXJzIGFsaWtlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGludmFsaWRhdGVPcmdSZXBvcnRzKG9yZ0lkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGludmVudG9yeUNhY2hlLmludmFsaWRhdGVQYXR0ZXJuKGAke29yZ0lkfToqYCksXG4gICAgdGltZXNlcmllc0NhY2hlLmludmFsaWRhdGVQYXR0ZXJuKGAke29yZ0lkfToqYCksXG4gIF0pO1xufVxuIl19
@@ -29,7 +29,7 @@ export declare function resolveIncidentWindowHours(override?: number | null): nu
29
29
  /**
30
30
  * Reporting retention windows. Records in `pipeline_events`,
31
31
  * `deployment_outcomes`, and `incidents` grow unbounded without a sweep, so a
32
- * split, per-org retention purge (see {@link ReportingService.purgeExpiredReportingData})
32
+ * split, per-org retention purge (see `purgeExpiredReportingData` in ./retention-sweep.ts)
33
33
  * hard-deletes rows older than these windows, by `created_at`:
34
34
  * - **Standard events** — `pipeline_events` with `environment IS NULL` and no
35
35
  * `commit_timestamp` (non-deploy STAGE/ACTION/build). High volume → short
@@ -35,7 +35,7 @@ export function resolveIncidentWindowHours(override) {
35
35
  /**
36
36
  * Reporting retention windows. Records in `pipeline_events`,
37
37
  * `deployment_outcomes`, and `incidents` grow unbounded without a sweep, so a
38
- * split, per-org retention purge (see {@link ReportingService.purgeExpiredReportingData})
38
+ * split, per-org retention purge (see `purgeExpiredReportingData` in ./retention-sweep.ts)
39
39
  * hard-deletes rows older than these windows, by `created_at`:
40
40
  * - **Standard events** — `pipeline_events` with `environment IS NULL` and no
41
41
  * `commit_timestamp` (non-deploy STAGE/ACTION/build). High volume → short
@@ -125,4 +125,4 @@ export function median(values) {
125
125
  * trend, and build health — so the precedence can't drift between them. Assumes the
126
126
  * grouped event alias is `e`.
127
127
  */
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9yYS1zY29yaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9yZXBvcnRpbmcvZG9yYS1zY29yaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFJdEM7Ozs7R0FJRztBQUVIOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBRXpDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7SUFDOUMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUMzRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUVMOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsUUFBd0I7SUFDakUsT0FBTyxRQUFRLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQztBQUMvRyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCx3RkFBd0Y7QUFDeEYsTUFBTSxVQUFVLHFCQUFxQixDQUFDLE1BQWMsRUFBRSxXQUFtQjtJQUN2RSxJQUFJLFdBQVcsSUFBSSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDbEMsSUFBSSxNQUFNLElBQUksQ0FBQztRQUFFLE9BQU8sT0FBTyxDQUFDO0lBQ2hDLElBQUksTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDbkMsSUFBSSxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUN0QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFDRCx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLHlCQUF5QixDQUFDLEdBQVcsRUFBRSxLQUFhO0lBQ2xFLElBQUksS0FBSyxJQUFJLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM1QixJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDN0IsSUFBSSxHQUFHLElBQUksRUFBRTtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQzdCLElBQUksR0FBRyxJQUFJLEVBQUU7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUMvQixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFDRCwwRUFBMEU7QUFDMUUsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFVBQXlCO0lBQzNELElBQUksVUFBVSxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNwQyxJQUFJLFVBQVUsR0FBRyxJQUFJO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDdEMsSUFBSSxVQUFVLEdBQUcsS0FBSztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ3RDLElBQUksVUFBVSxHQUFHLE1BQU07UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUN6QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFDRCx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLG9CQUFvQixDQUFDLGFBQTRCO0lBQy9ELElBQUksYUFBYSxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN2QyxJQUFJLGFBQWEsR0FBRyxLQUFLO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDMUMsSUFBSSxhQUFhLEdBQUcsTUFBTTtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQzFDLElBQUksYUFBYSxHQUFHLE9BQU87UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUM3QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxLQUFhLEVBQUUsTUFBYztJQUNqRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxNQUFnQjtJQUNyQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3JDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDNUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVEOzs7Ozs7R0FNRyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IERvcmFMZXZlbCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKipcbiAqIERPUkEgcGVyZm9ybWFuY2UgYmFuZGluZyBwbHVzIHRoZSBzbWFsbCBzdGF0aXN0aWNzIGhlbHBlcnMgaXQgbmVlZHMuXG4gKiBQdXJlIGZ1bmN0aW9ucyDigJQgbm8gZGF0YWJhc2UgYWNjZXNzLCBubyBJL08g4oCUIHdoaWNoIGlzIHdoYXQgbGV0cyB0aGVcbiAqIHRocmVzaG9sZHMgYmUgdW5pdC10ZXN0ZWQgaW5kZXBlbmRlbnRseSBvZiB0aGUgcXVlcmllcyB0aGF0IGZlZWQgdGhlbS5cbiAqL1xuXG4vKipcbiAqIFRoZSBET1JBIGhlYWRsaW5lIGVudmlyb25tZW50LiBEZXBsb3ltZW50IHRvIHRoaXMgbGl0ZXJhbCBlbnYgbmFtZSBpcyB0aGVcbiAqIGluZHVzdHJ5LXN0YW5kYXJkIERPUkEgc2lnbmFsOyBNVFRSIGlzIG1lYXN1cmVkIHByb2R1Y3Rpb24tb25seSwgYW5kIHRoaXNcbiAqIGVudmlyb25tZW50J3MgY2FyZCBpcyB0aGUgc3VtbWFyeSBzaG93biBhdCB0aGUgdG9wIG9mIHRoZSBwYW5lbC5cbiAqL1xuZXhwb3J0IGNvbnN0IEhFQURMSU5FX0VOViA9ICdwcm9kdWN0aW9uJztcblxuLyoqXG4gKiBJbmNpZGVudOKGkmRlcGxveSBjb3JyZWxhdGlvbiB3aW5kb3cuIEFuIGluY2lkZW50IGlzIGF0dHJpYnV0ZWQgdG8gdGhlXG4gKiBtb3N0IHJlY2VudCBTVUNDRVNTRlVMIGRlcGxveSB0byBpdHMgZW52aXJvbm1lbnQgd2hvc2UgYGNvbXBsZXRlZF9hdGAgaXMgd2l0aGluXG4gKiB0aGlzIG1hbnkgaG91cnMgYmVmb3JlIHRoZSBpbmNpZGVudCdzIGBvcGVuZWRfYXRgLiBEZWZhdWx0IDI0aDsgb3ZlcnJpZGUgdmlhXG4gKiBgRE9SQV9JTkNJREVOVF9XSU5ET1dfSE9VUlNgLiBHdWFyZGVkIHRvIGEgcG9zaXRpdmUgZmluaXRlIG51bWJlci5cbiAqL1xuZXhwb3J0IGNvbnN0IERPUkFfSU5DSURFTlRfV0lORE9XX0hPVVJTID0gKCgpID0+IHtcbiAgY29uc3QgcmF3ID0gTnVtYmVyKHByb2Nlc3MuZW52LkRPUkFfSU5DSURFTlRfV0lORE9XX0hPVVJTKTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShyYXcpICYmIHJhdyA+IDAgPyByYXcgOiAyNDtcbn0pKCk7XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgZWZmZWN0aXZlIGluY2lkZW504oaSZGVwbG95IGNvcnJlbGF0aW9uIHdpbmRvdy4gQSBwZXItb3JnXG4gKiBvdmVycmlkZSAoZnJvbSBgZG9yYV9zZXR0aW5ncy5pbmNpZGVudF93aW5kb3dfaG91cnNgLCBzdXJmYWNlZCB0aHJvdWdoIHRoZVxuICogc2V0dGluZ3MgZW5kcG9pbnQgYW5kIHRocmVhZGVkIGludG8ge0BsaW5rIERvcmFPcHRpb25zLmluY2lkZW50V2luZG93SG91cnN9KVxuICogd2lucyB3aGVuIGl0IGlzIGEgcG9zaXRpdmUgZmluaXRlIG51bWJlcjsgb3RoZXJ3aXNlIHRoZSBnbG9iYWwgZW52IGRlZmF1bHRcbiAqIGBET1JBX0lOQ0lERU5UX1dJTkRPV19IT1VSU2AgYXBwbGllcy4gQ2VudHJhbGl6ZWQgc28gdGhlIERPUkEgY29ycmVsYXRpb24sIHRoZVxuICogaW5jaWRlbnRzIGxpc3QsIGFuZCB0aGUgd2lyaW5nLXRlc3QgZHJ5LXJ1biBhbGwgYWdyZWUgb24gdGhlIHNhbWUgcnVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJbmNpZGVudFdpbmRvd0hvdXJzKG92ZXJyaWRlPzogbnVtYmVyIHwgbnVsbCk6IG51bWJlciB7XG4gIHJldHVybiBvdmVycmlkZSAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShvdmVycmlkZSkgJiYgb3ZlcnJpZGUgPiAwID8gb3ZlcnJpZGUgOiBET1JBX0lOQ0lERU5UX1dJTkRPV19IT1VSUztcbn1cblxuLyoqXG4gKiBSZXBvcnRpbmcgcmV0ZW50aW9uIHdpbmRvd3MuIFJlY29yZHMgaW4gYHBpcGVsaW5lX2V2ZW50c2AsXG4gKiBgZGVwbG95bWVudF9vdXRjb21lc2AsIGFuZCBgaW5jaWRlbnRzYCBncm93IHVuYm91bmRlZCB3aXRob3V0IGEgc3dlZXAsIHNvIGFcbiAqIHNwbGl0LCBwZXItb3JnIHJldGVudGlvbiBwdXJnZSAoc2VlIHtAbGluayBSZXBvcnRpbmdTZXJ2aWNlLnB1cmdlRXhwaXJlZFJlcG9ydGluZ0RhdGF9KVxuICogaGFyZC1kZWxldGVzIHJvd3Mgb2xkZXIgdGhhbiB0aGVzZSB3aW5kb3dzLCBieSBgY3JlYXRlZF9hdGA6XG4gKiAgLSAqKlN0YW5kYXJkIGV2ZW50cyoqIOKAlCBgcGlwZWxpbmVfZXZlbnRzYCB3aXRoIGBlbnZpcm9ubWVudCBJUyBOVUxMYCBhbmQgbm9cbiAqICAgIGBjb21taXRfdGltZXN0YW1wYCAobm9uLWRlcGxveSBTVEFHRS9BQ1RJT04vYnVpbGQpLiBIaWdoIHZvbHVtZSDihpIgc2hvcnRcbiAqICAgIGRlZmF1bHQgKDMwIGRheXMpLiBBIHJvdyB0aGF0IERPRVMgY2FycnkgYSBjb21taXQgdGltZXN0YW1wIGlzIERPUkEgc291cmNlXG4gKiAgICBkYXRhIOKAlCBsZWFkIHRpbWUgam9pbnMgb24gaXQg4oCUIHNvIGl0IGZvbGxvd3MgdGhlIERPUkEgd2luZG93IGluc3RlYWQuXG4gKiAgLSAqKkRPUkEgc291cmNlKiog4oCUIGBwaXBlbGluZV9ldmVudHNgIHdpdGggYGVudmlyb25tZW50IElTIE5PVCBOVUxMYCAoZGVwbG95XG4gKiAgICBzdGFnZXMpIHBsdXMgYWxsIG9mIGBkZXBsb3ltZW50X291dGNvbWVzYCBhbmQgYGluY2lkZW50c2AuIExvdyB2b2x1bWUg4oaSXG4gKiAgICBsb25nZXIgZGVmYXVsdCAoMTgwIGRheXMpLiBET1JBIGhpc3RvcnkgaXMgdGhlcmVmb3JlIGJvdW5kZWQgYnkgdGhpcyB3aW5kb3c7XG4gKiAgICB0aGUgcmVwb3J0IHF1ZXJ5IHN0aWxsIGhhcmQtY2FwcyBhdCAzNjUgZGF5cyAoYSBsb25nZXIgcGVyLW9yZyBvdmVycmlkZSBvbmx5XG4gKiAgICByZXRhaW5zIHJhdyBzb3VyY2Ugcm93cywgbmV2ZXIgd2lkZW5zIGEgcmVwb3J0KS5cbiAqIGBpbmdlc3RfaGVhbHRoYCBhbmQgYGRvcmFfc2V0dGluZ3NgIGFyZSBuZXZlciBwdXJnZWQuIEVudi1vdmVycmlkYWJsZSBnbG9iYWxzO1xuICogYSBwZXItb3JnIG92ZXJyaWRlIGluIGBkb3JhX3NldHRpbmdzYCB3aW5zIChzZWUge0BsaW5rIHJlc29sdmVFdmVudFJldGVudGlvbkRheXN9KS5cbiAqL1xuXG4vKiogRGVwbG95bWVudCBmcmVxdWVuY3kgYnkgZGVwbG95cy9kYXk6IGVsaXRlIOKJpTEvZGF5LCBoaWdoIOKJpTEvd2VlaywgbWVkaXVtIOKJpTEvbW9udGguICovXG5leHBvcnQgZnVuY3Rpb24gZG9yYUxldmVsRm9yRnJlcXVlbmN5KHBlckRheTogbnVtYmVyLCBkZXBsb3ltZW50czogbnVtYmVyKTogRG9yYUxldmVsIHtcbiAgaWYgKGRlcGxveW1lbnRzIDw9IDApIHJldHVybiBudWxsO1xuICBpZiAocGVyRGF5ID49IDEpIHJldHVybiAnZWxpdGUnO1xuICBpZiAocGVyRGF5ID49IDEgLyA3KSByZXR1cm4gJ2hpZ2gnO1xuICBpZiAocGVyRGF5ID49IDEgLyAzMCkgcmV0dXJuICdtZWRpdW0nO1xuICByZXR1cm4gJ2xvdyc7XG59XG4vKiogQ2hhbmdlIGZhaWx1cmUgcmF0ZSBieSBwZXJjZW50OiBlbGl0ZSDiiaQ1JSwgaGlnaCDiiaQxMCUsIG1lZGl1bSDiiaQxNSUuICovXG5leHBvcnQgZnVuY3Rpb24gZG9yYUxldmVsRm9yQ2hhbmdlRmFpbHVyZShwY3Q6IG51bWJlciwgdG90YWw6IG51bWJlcik6IERvcmFMZXZlbCB7XG4gIGlmICh0b3RhbCA8PSAwKSByZXR1cm4gbnVsbDtcbiAgaWYgKHBjdCA8PSA1KSByZXR1cm4gJ2VsaXRlJztcbiAgaWYgKHBjdCA8PSAxMCkgcmV0dXJuICdoaWdoJztcbiAgaWYgKHBjdCA8PSAxNSkgcmV0dXJuICdtZWRpdW0nO1xuICByZXR1cm4gJ2xvdyc7XG59XG4vKiogVGltZSB0byByZXN0b3JlIGJ5IHNlY29uZHM6IGVsaXRlIDwxaCwgaGlnaCA8MSBkYXksIG1lZGl1bSA8MSB3ZWVrLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvcmFMZXZlbEZvclJlc3RvcmUoYXZnU2Vjb25kczogbnVtYmVyIHwgbnVsbCk6IERvcmFMZXZlbCB7XG4gIGlmIChhdmdTZWNvbmRzID09IG51bGwpIHJldHVybiBudWxsO1xuICBpZiAoYXZnU2Vjb25kcyA8IDM2MDApIHJldHVybiAnZWxpdGUnO1xuICBpZiAoYXZnU2Vjb25kcyA8IDg2NDAwKSByZXR1cm4gJ2hpZ2gnO1xuICBpZiAoYXZnU2Vjb25kcyA8IDYwNDgwMCkgcmV0dXJuICdtZWRpdW0nO1xuICByZXR1cm4gJ2xvdyc7XG59XG4vKiogTGVhZCB0aW1lIGJ5IHNlY29uZHM6IGVsaXRlIDwxIGRheSwgaGlnaCA8MSB3ZWVrLCBtZWRpdW0gPDEgbW9udGguICovXG5leHBvcnQgZnVuY3Rpb24gZG9yYUxldmVsRm9yTGVhZFRpbWUobWVkaWFuU2Vjb25kczogbnVtYmVyIHwgbnVsbCk6IERvcmFMZXZlbCB7XG4gIGlmIChtZWRpYW5TZWNvbmRzID09IG51bGwpIHJldHVybiBudWxsO1xuICBpZiAobWVkaWFuU2Vjb25kcyA8IDg2NDAwKSByZXR1cm4gJ2VsaXRlJztcbiAgaWYgKG1lZGlhblNlY29uZHMgPCA2MDQ4MDApIHJldHVybiAnaGlnaCc7XG4gIGlmIChtZWRpYW5TZWNvbmRzIDwgMjU5MjAwMCkgcmV0dXJuICdtZWRpdW0nO1xuICByZXR1cm4gJ2xvdyc7XG59XG5cbi8qKlxuICogUm91bmQgYHZhbHVlYCB0byBgZGlnaXRzYCBkZWNpbWFsIHBsYWNlcywgcmV0dXJuaW5nIGEgcmVhbCBudW1iZXIuIFNtYWxsXG4gKiBtb2R1bGUtcHJpdmF0ZSBoZWxwZXIgc28gdGhlIERPUkEgc2hhcGluZyBkb2Vzbid0IHJlcGVhdCB0aGVcbiAqIGBOdW1iZXIoTnVtYmVyKHgpLnRvRml4ZWQobikpYCBwYXR0ZXJuICh0b0ZpeGVkIGFsb25lIHlpZWxkcyBhIHN0cmluZykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3VuZCh2YWx1ZTogbnVtYmVyLCBkaWdpdHM6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBOdW1iZXIodmFsdWUudG9GaXhlZChkaWdpdHMpKTtcbn1cblxuLyoqXG4gKiBNZWRpYW4gb2YgYSBudW1lcmljIHNhbXBsZSwgb3IgYG51bGxgIHdoZW4gZW1wdHkuIFVzZWQgZm9yIG1lYXN1cmVkIGxlYWQgdGltZVxuICogYW5kIE1UVFIg4oCUIGJvdGggYXJlIGNyb3NzLXNvdXJjZSBnYXBzIGNvbXB1dGVkIGluIEpTIGZyb20gY2xhbXBlZCBkZWx0YXMsIHNvXG4gKiB0aGUgbWVkaWFuIGxpdmVzIGhlcmUgcmF0aGVyIHRoYW4gaW4gU1FMIFBFUkNFTlRJTEVfQ09OVCAoa2VlcHMgdGhlIGdvbGRlblxuICogZml4dHVyZSB0ZXN0cyBhYmxlIHRvIHByb3ZlIHRoZSBtZXRyaWMgbWF0aCB3aXRob3V0IGEgbGl2ZSBQb3N0Z3JlcykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZWRpYW4odmFsdWVzOiBudW1iZXJbXSk6IG51bWJlciB8IG51bGwge1xuICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHMgPSBbLi4udmFsdWVzXS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIGNvbnN0IG1pZCA9IE1hdGguZmxvb3Iocy5sZW5ndGggLyAyKTtcbiAgcmV0dXJuIHMubGVuZ3RoICUgMiA9PT0gMSA/IHNbbWlkXSA6IChzW21pZCAtIDFdICsgc1ttaWRdKSAvIDI7XG59XG5cbi8qKlxuICogUm9sbCBhIGdyb3VwIG9mIGRlcGxveS9zdGFnZSBldmVudHMgKGdyb3VwZWQgcGVyIGV4ZWN1dGlvbikgdXAgdG8gb25lIHRlcm1pbmFsXG4gKiBzdGF0dXM6IEZBSUxFRCB3aW5zLCB0aGVuIFNVQ0NFRURFRCwgZWxzZSBPVEhFUiAoc3RpbGwtcnVubmluZyAvIG5vbi10ZXJtaW5hbCkuXG4gKiBTaGFyZWQgYnkgdGhlIHRocmVlIHBlci0oZW52fHN0YWdlLCBleGVjdXRpb24pIHJvbGx1cCBDVEVzIOKAlCBET1JBIG1ldHJpY3MsIERPUkFcbiAqIHRyZW5kLCBhbmQgYnVpbGQgaGVhbHRoIOKAlCBzbyB0aGUgcHJlY2VkZW5jZSBjYW4ndCBkcmlmdCBiZXR3ZWVuIHRoZW0uIEFzc3VtZXMgdGhlXG4gKiBncm91cGVkIGV2ZW50IGFsaWFzIGlzIGBlYC5cbiAqL1xuIl19
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9yYS1zY29yaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9yZXBvcnRpbmcvZG9yYS1zY29yaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFJdEM7Ozs7R0FJRztBQUVIOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBRXpDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7SUFDOUMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUMzRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUVMOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsUUFBd0I7SUFDakUsT0FBTyxRQUFRLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQztBQUMvRyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCx3RkFBd0Y7QUFDeEYsTUFBTSxVQUFVLHFCQUFxQixDQUFDLE1BQWMsRUFBRSxXQUFtQjtJQUN2RSxJQUFJLFdBQVcsSUFBSSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDbEMsSUFBSSxNQUFNLElBQUksQ0FBQztRQUFFLE9BQU8sT0FBTyxDQUFDO0lBQ2hDLElBQUksTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDbkMsSUFBSSxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUN0QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFDRCx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLHlCQUF5QixDQUFDLEdBQVcsRUFBRSxLQUFhO0lBQ2xFLElBQUksS0FBSyxJQUFJLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM1QixJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDN0IsSUFBSSxHQUFHLElBQUksRUFBRTtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQzdCLElBQUksR0FBRyxJQUFJLEVBQUU7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUMvQixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFDRCwwRUFBMEU7QUFDMUUsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFVBQXlCO0lBQzNELElBQUksVUFBVSxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNwQyxJQUFJLFVBQVUsR0FBRyxJQUFJO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDdEMsSUFBSSxVQUFVLEdBQUcsS0FBSztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ3RDLElBQUksVUFBVSxHQUFHLE1BQU07UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUN6QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFDRCx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLG9CQUFvQixDQUFDLGFBQTRCO0lBQy9ELElBQUksYUFBYSxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN2QyxJQUFJLGFBQWEsR0FBRyxLQUFLO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDMUMsSUFBSSxhQUFhLEdBQUcsTUFBTTtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQzFDLElBQUksYUFBYSxHQUFHLE9BQU87UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUM3QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxLQUFhLEVBQUUsTUFBYztJQUNqRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxNQUFnQjtJQUNyQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3JDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDNUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVEOzs7Ozs7R0FNRyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IERvcmFMZXZlbCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKipcbiAqIERPUkEgcGVyZm9ybWFuY2UgYmFuZGluZyBwbHVzIHRoZSBzbWFsbCBzdGF0aXN0aWNzIGhlbHBlcnMgaXQgbmVlZHMuXG4gKiBQdXJlIGZ1bmN0aW9ucyDigJQgbm8gZGF0YWJhc2UgYWNjZXNzLCBubyBJL08g4oCUIHdoaWNoIGlzIHdoYXQgbGV0cyB0aGVcbiAqIHRocmVzaG9sZHMgYmUgdW5pdC10ZXN0ZWQgaW5kZXBlbmRlbnRseSBvZiB0aGUgcXVlcmllcyB0aGF0IGZlZWQgdGhlbS5cbiAqL1xuXG4vKipcbiAqIFRoZSBET1JBIGhlYWRsaW5lIGVudmlyb25tZW50LiBEZXBsb3ltZW50IHRvIHRoaXMgbGl0ZXJhbCBlbnYgbmFtZSBpcyB0aGVcbiAqIGluZHVzdHJ5LXN0YW5kYXJkIERPUkEgc2lnbmFsOyBNVFRSIGlzIG1lYXN1cmVkIHByb2R1Y3Rpb24tb25seSwgYW5kIHRoaXNcbiAqIGVudmlyb25tZW50J3MgY2FyZCBpcyB0aGUgc3VtbWFyeSBzaG93biBhdCB0aGUgdG9wIG9mIHRoZSBwYW5lbC5cbiAqL1xuZXhwb3J0IGNvbnN0IEhFQURMSU5FX0VOViA9ICdwcm9kdWN0aW9uJztcblxuLyoqXG4gKiBJbmNpZGVudOKGkmRlcGxveSBjb3JyZWxhdGlvbiB3aW5kb3cuIEFuIGluY2lkZW50IGlzIGF0dHJpYnV0ZWQgdG8gdGhlXG4gKiBtb3N0IHJlY2VudCBTVUNDRVNTRlVMIGRlcGxveSB0byBpdHMgZW52aXJvbm1lbnQgd2hvc2UgYGNvbXBsZXRlZF9hdGAgaXMgd2l0aGluXG4gKiB0aGlzIG1hbnkgaG91cnMgYmVmb3JlIHRoZSBpbmNpZGVudCdzIGBvcGVuZWRfYXRgLiBEZWZhdWx0IDI0aDsgb3ZlcnJpZGUgdmlhXG4gKiBgRE9SQV9JTkNJREVOVF9XSU5ET1dfSE9VUlNgLiBHdWFyZGVkIHRvIGEgcG9zaXRpdmUgZmluaXRlIG51bWJlci5cbiAqL1xuZXhwb3J0IGNvbnN0IERPUkFfSU5DSURFTlRfV0lORE9XX0hPVVJTID0gKCgpID0+IHtcbiAgY29uc3QgcmF3ID0gTnVtYmVyKHByb2Nlc3MuZW52LkRPUkFfSU5DSURFTlRfV0lORE9XX0hPVVJTKTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShyYXcpICYmIHJhdyA+IDAgPyByYXcgOiAyNDtcbn0pKCk7XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgZWZmZWN0aXZlIGluY2lkZW504oaSZGVwbG95IGNvcnJlbGF0aW9uIHdpbmRvdy4gQSBwZXItb3JnXG4gKiBvdmVycmlkZSAoZnJvbSBgZG9yYV9zZXR0aW5ncy5pbmNpZGVudF93aW5kb3dfaG91cnNgLCBzdXJmYWNlZCB0aHJvdWdoIHRoZVxuICogc2V0dGluZ3MgZW5kcG9pbnQgYW5kIHRocmVhZGVkIGludG8ge0BsaW5rIERvcmFPcHRpb25zLmluY2lkZW50V2luZG93SG91cnN9KVxuICogd2lucyB3aGVuIGl0IGlzIGEgcG9zaXRpdmUgZmluaXRlIG51bWJlcjsgb3RoZXJ3aXNlIHRoZSBnbG9iYWwgZW52IGRlZmF1bHRcbiAqIGBET1JBX0lOQ0lERU5UX1dJTkRPV19IT1VSU2AgYXBwbGllcy4gQ2VudHJhbGl6ZWQgc28gdGhlIERPUkEgY29ycmVsYXRpb24sIHRoZVxuICogaW5jaWRlbnRzIGxpc3QsIGFuZCB0aGUgd2lyaW5nLXRlc3QgZHJ5LXJ1biBhbGwgYWdyZWUgb24gdGhlIHNhbWUgcnVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJbmNpZGVudFdpbmRvd0hvdXJzKG92ZXJyaWRlPzogbnVtYmVyIHwgbnVsbCk6IG51bWJlciB7XG4gIHJldHVybiBvdmVycmlkZSAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShvdmVycmlkZSkgJiYgb3ZlcnJpZGUgPiAwID8gb3ZlcnJpZGUgOiBET1JBX0lOQ0lERU5UX1dJTkRPV19IT1VSUztcbn1cblxuLyoqXG4gKiBSZXBvcnRpbmcgcmV0ZW50aW9uIHdpbmRvd3MuIFJlY29yZHMgaW4gYHBpcGVsaW5lX2V2ZW50c2AsXG4gKiBgZGVwbG95bWVudF9vdXRjb21lc2AsIGFuZCBgaW5jaWRlbnRzYCBncm93IHVuYm91bmRlZCB3aXRob3V0IGEgc3dlZXAsIHNvIGFcbiAqIHNwbGl0LCBwZXItb3JnIHJldGVudGlvbiBwdXJnZSAoc2VlIGBwdXJnZUV4cGlyZWRSZXBvcnRpbmdEYXRhYCBpbiAuL3JldGVudGlvbi1zd2VlcC50cylcbiAqIGhhcmQtZGVsZXRlcyByb3dzIG9sZGVyIHRoYW4gdGhlc2Ugd2luZG93cywgYnkgYGNyZWF0ZWRfYXRgOlxuICogIC0gKipTdGFuZGFyZCBldmVudHMqKiDigJQgYHBpcGVsaW5lX2V2ZW50c2Agd2l0aCBgZW52aXJvbm1lbnQgSVMgTlVMTGAgYW5kIG5vXG4gKiAgICBgY29tbWl0X3RpbWVzdGFtcGAgKG5vbi1kZXBsb3kgU1RBR0UvQUNUSU9OL2J1aWxkKS4gSGlnaCB2b2x1bWUg4oaSIHNob3J0XG4gKiAgICBkZWZhdWx0ICgzMCBkYXlzKS4gQSByb3cgdGhhdCBET0VTIGNhcnJ5IGEgY29tbWl0IHRpbWVzdGFtcCBpcyBET1JBIHNvdXJjZVxuICogICAgZGF0YSDigJQgbGVhZCB0aW1lIGpvaW5zIG9uIGl0IOKAlCBzbyBpdCBmb2xsb3dzIHRoZSBET1JBIHdpbmRvdyBpbnN0ZWFkLlxuICogIC0gKipET1JBIHNvdXJjZSoqIOKAlCBgcGlwZWxpbmVfZXZlbnRzYCB3aXRoIGBlbnZpcm9ubWVudCBJUyBOT1QgTlVMTGAgKGRlcGxveVxuICogICAgc3RhZ2VzKSBwbHVzIGFsbCBvZiBgZGVwbG95bWVudF9vdXRjb21lc2AgYW5kIGBpbmNpZGVudHNgLiBMb3cgdm9sdW1lIOKGklxuICogICAgbG9uZ2VyIGRlZmF1bHQgKDE4MCBkYXlzKS4gRE9SQSBoaXN0b3J5IGlzIHRoZXJlZm9yZSBib3VuZGVkIGJ5IHRoaXMgd2luZG93O1xuICogICAgdGhlIHJlcG9ydCBxdWVyeSBzdGlsbCBoYXJkLWNhcHMgYXQgMzY1IGRheXMgKGEgbG9uZ2VyIHBlci1vcmcgb3ZlcnJpZGUgb25seVxuICogICAgcmV0YWlucyByYXcgc291cmNlIHJvd3MsIG5ldmVyIHdpZGVucyBhIHJlcG9ydCkuXG4gKiBgaW5nZXN0X2hlYWx0aGAgYW5kIGBkb3JhX3NldHRpbmdzYCBhcmUgbmV2ZXIgcHVyZ2VkLiBFbnYtb3ZlcnJpZGFibGUgZ2xvYmFscztcbiAqIGEgcGVyLW9yZyBvdmVycmlkZSBpbiBgZG9yYV9zZXR0aW5nc2Agd2lucyAoc2VlIHtAbGluayByZXNvbHZlRXZlbnRSZXRlbnRpb25EYXlzfSkuXG4gKi9cblxuLyoqIERlcGxveW1lbnQgZnJlcXVlbmN5IGJ5IGRlcGxveXMvZGF5OiBlbGl0ZSDiiaUxL2RheSwgaGlnaCDiiaUxL3dlZWssIG1lZGl1bSDiiaUxL21vbnRoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvcmFMZXZlbEZvckZyZXF1ZW5jeShwZXJEYXk6IG51bWJlciwgZGVwbG95bWVudHM6IG51bWJlcik6IERvcmFMZXZlbCB7XG4gIGlmIChkZXBsb3ltZW50cyA8PSAwKSByZXR1cm4gbnVsbDtcbiAgaWYgKHBlckRheSA+PSAxKSByZXR1cm4gJ2VsaXRlJztcbiAgaWYgKHBlckRheSA+PSAxIC8gNykgcmV0dXJuICdoaWdoJztcbiAgaWYgKHBlckRheSA+PSAxIC8gMzApIHJldHVybiAnbWVkaXVtJztcbiAgcmV0dXJuICdsb3cnO1xufVxuLyoqIENoYW5nZSBmYWlsdXJlIHJhdGUgYnkgcGVyY2VudDogZWxpdGUg4omkNSUsIGhpZ2gg4omkMTAlLCBtZWRpdW0g4omkMTUlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvcmFMZXZlbEZvckNoYW5nZUZhaWx1cmUocGN0OiBudW1iZXIsIHRvdGFsOiBudW1iZXIpOiBEb3JhTGV2ZWwge1xuICBpZiAodG90YWwgPD0gMCkgcmV0dXJuIG51bGw7XG4gIGlmIChwY3QgPD0gNSkgcmV0dXJuICdlbGl0ZSc7XG4gIGlmIChwY3QgPD0gMTApIHJldHVybiAnaGlnaCc7XG4gIGlmIChwY3QgPD0gMTUpIHJldHVybiAnbWVkaXVtJztcbiAgcmV0dXJuICdsb3cnO1xufVxuLyoqIFRpbWUgdG8gcmVzdG9yZSBieSBzZWNvbmRzOiBlbGl0ZSA8MWgsIGhpZ2ggPDEgZGF5LCBtZWRpdW0gPDEgd2Vlay4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb3JhTGV2ZWxGb3JSZXN0b3JlKGF2Z1NlY29uZHM6IG51bWJlciB8IG51bGwpOiBEb3JhTGV2ZWwge1xuICBpZiAoYXZnU2Vjb25kcyA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgaWYgKGF2Z1NlY29uZHMgPCAzNjAwKSByZXR1cm4gJ2VsaXRlJztcbiAgaWYgKGF2Z1NlY29uZHMgPCA4NjQwMCkgcmV0dXJuICdoaWdoJztcbiAgaWYgKGF2Z1NlY29uZHMgPCA2MDQ4MDApIHJldHVybiAnbWVkaXVtJztcbiAgcmV0dXJuICdsb3cnO1xufVxuLyoqIExlYWQgdGltZSBieSBzZWNvbmRzOiBlbGl0ZSA8MSBkYXksIGhpZ2ggPDEgd2VlaywgbWVkaXVtIDwxIG1vbnRoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvcmFMZXZlbEZvckxlYWRUaW1lKG1lZGlhblNlY29uZHM6IG51bWJlciB8IG51bGwpOiBEb3JhTGV2ZWwge1xuICBpZiAobWVkaWFuU2Vjb25kcyA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgaWYgKG1lZGlhblNlY29uZHMgPCA4NjQwMCkgcmV0dXJuICdlbGl0ZSc7XG4gIGlmIChtZWRpYW5TZWNvbmRzIDwgNjA0ODAwKSByZXR1cm4gJ2hpZ2gnO1xuICBpZiAobWVkaWFuU2Vjb25kcyA8IDI1OTIwMDApIHJldHVybiAnbWVkaXVtJztcbiAgcmV0dXJuICdsb3cnO1xufVxuXG4vKipcbiAqIFJvdW5kIGB2YWx1ZWAgdG8gYGRpZ2l0c2AgZGVjaW1hbCBwbGFjZXMsIHJldHVybmluZyBhIHJlYWwgbnVtYmVyLiBTbWFsbFxuICogbW9kdWxlLXByaXZhdGUgaGVscGVyIHNvIHRoZSBET1JBIHNoYXBpbmcgZG9lc24ndCByZXBlYXQgdGhlXG4gKiBgTnVtYmVyKE51bWJlcih4KS50b0ZpeGVkKG4pKWAgcGF0dGVybiAodG9GaXhlZCBhbG9uZSB5aWVsZHMgYSBzdHJpbmcpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcm91bmQodmFsdWU6IG51bWJlciwgZGlnaXRzOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTnVtYmVyKHZhbHVlLnRvRml4ZWQoZGlnaXRzKSk7XG59XG5cbi8qKlxuICogTWVkaWFuIG9mIGEgbnVtZXJpYyBzYW1wbGUsIG9yIGBudWxsYCB3aGVuIGVtcHR5LiBVc2VkIGZvciBtZWFzdXJlZCBsZWFkIHRpbWVcbiAqIGFuZCBNVFRSIOKAlCBib3RoIGFyZSBjcm9zcy1zb3VyY2UgZ2FwcyBjb21wdXRlZCBpbiBKUyBmcm9tIGNsYW1wZWQgZGVsdGFzLCBzb1xuICogdGhlIG1lZGlhbiBsaXZlcyBoZXJlIHJhdGhlciB0aGFuIGluIFNRTCBQRVJDRU5USUxFX0NPTlQgKGtlZXBzIHRoZSBnb2xkZW5cbiAqIGZpeHR1cmUgdGVzdHMgYWJsZSB0byBwcm92ZSB0aGUgbWV0cmljIG1hdGggd2l0aG91dCBhIGxpdmUgUG9zdGdyZXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVkaWFuKHZhbHVlczogbnVtYmVyW10pOiBudW1iZXIgfCBudWxsIHtcbiAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICBjb25zdCBzID0gWy4uLnZhbHVlc10uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICBjb25zdCBtaWQgPSBNYXRoLmZsb29yKHMubGVuZ3RoIC8gMik7XG4gIHJldHVybiBzLmxlbmd0aCAlIDIgPT09IDEgPyBzW21pZF0gOiAoc1ttaWQgLSAxXSArIHNbbWlkXSkgLyAyO1xufVxuXG4vKipcbiAqIFJvbGwgYSBncm91cCBvZiBkZXBsb3kvc3RhZ2UgZXZlbnRzIChncm91cGVkIHBlciBleGVjdXRpb24pIHVwIHRvIG9uZSB0ZXJtaW5hbFxuICogc3RhdHVzOiBGQUlMRUQgd2lucywgdGhlbiBTVUNDRUVERUQsIGVsc2UgT1RIRVIgKHN0aWxsLXJ1bm5pbmcgLyBub24tdGVybWluYWwpLlxuICogU2hhcmVkIGJ5IHRoZSB0aHJlZSBwZXItKGVudnxzdGFnZSwgZXhlY3V0aW9uKSByb2xsdXAgQ1RFcyDigJQgRE9SQSBtZXRyaWNzLCBET1JBXG4gKiB0cmVuZCwgYW5kIGJ1aWxkIGhlYWx0aCDigJQgc28gdGhlIHByZWNlZGVuY2UgY2FuJ3QgZHJpZnQgYmV0d2VlbiB0aGVtLiBBc3N1bWVzIHRoZVxuICogZ3JvdXBlZCBldmVudCBhbGlhcyBpcyBgZWAuXG4gKi9cbiJdfQ==
@@ -0,0 +1,11 @@
1
+ import type { IngestEvent, IngestMetric, IngestResult } from './types.js';
2
+ /**
3
+ * Resolve incoming events against the pipeline registry, batch-insert the
4
+ * matched ones, and invalidate reporting caches for affected orgs.
5
+ * Events for unregistered pipeline ids are dropped (and logged at WARN
6
+ * with sample ids so an operator can see when EventBridge is delivering
7
+ * events for pipelines that haven't called POST /pipelines/registry yet).
8
+ *
9
+ * Returns counts + a sample of unregistered pipeline ids for observability.
10
+ */
11
+ export declare function ingestEvents(events: IngestEvent[], onMetric?: (m: IngestMetric) => void): Promise<IngestResult>;