@sumaris-net/ngx-components 18.23.48 → 18.23.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/doc/changelog.md +4 -0
  2. package/esm2022/public_api.mjs +2 -1
  3. package/esm2022/src/app/admin/users/users.mjs +25 -22
  4. package/esm2022/src/app/core/account/new-token.form.mjs +12 -9
  5. package/esm2022/src/app/core/account/token.table.mjs +14 -11
  6. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +9 -6
  7. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +8 -5
  8. package/esm2022/src/app/core/form/list/list.form.mjs +8 -5
  9. package/esm2022/src/app/core/form/properties/properties.form.mjs +12 -9
  10. package/esm2022/src/app/core/form/properties/properties.table.mjs +15 -12
  11. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +10 -7
  12. package/esm2022/src/app/core/home/home.mjs +21 -18
  13. package/esm2022/src/app/core/menu/menu.component.mjs +10 -7
  14. package/esm2022/src/app/core/settings/settings.page.mjs +10 -7
  15. package/esm2022/src/app/core/table/column/actions-column.component.mjs +8 -5
  16. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +9 -6
  17. package/esm2022/src/app/core/table/testing/table.testing.mjs +27 -23
  18. package/esm2022/src/app/core/table/testing/table2.testing.mjs +25 -22
  19. package/esm2022/src/app/shared/constants.mjs +3 -1
  20. package/esm2022/src/app/shared/directives/autotooltip.directive.mjs +35 -0
  21. package/esm2022/src/app/shared/directives/directives.module.mjs +33 -4
  22. package/esm2022/src/app/shared/functions.mjs +2 -2
  23. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +15 -12
  24. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +13 -11
  25. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +4 -2
  26. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +5 -2
  27. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +9 -6
  28. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +15 -4
  29. package/esm2022/src/app/shared/material/chips/chips.module.mjs +5 -2
  30. package/esm2022/src/app/shared/material/chips/material.chips.mjs +14 -12
  31. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +8 -5
  32. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +11 -9
  33. package/esm2022/src/app/social/feed/feed.component.mjs +15 -12
  34. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +11 -8
  35. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +12 -9
  36. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +12 -8
  37. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +12 -9
  38. package/esm2022/src/app/social/user-event/notification/user-event-notification.modal.mjs +9 -6
  39. package/fesm2022/sumaris-net.ngx-components.mjs +195 -90
  40. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  41. package/package.json +1 -1
  42. package/public_api.d.ts +1 -0
  43. package/src/app/admin/users/users.d.ts +1 -0
  44. package/src/app/core/account/new-token.form.d.ts +1 -0
  45. package/src/app/core/account/token.table.d.ts +1 -0
  46. package/src/app/core/form/array/testing/form-array.test.d.ts +1 -0
  47. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +1 -0
  48. package/src/app/core/form/list/list.form.d.ts +1 -0
  49. package/src/app/core/form/properties/properties.form.d.ts +1 -0
  50. package/src/app/core/form/properties/properties.table.d.ts +1 -0
  51. package/src/app/core/form/text-popover/text-popover.component.d.ts +1 -0
  52. package/src/app/core/home/home.d.ts +1 -0
  53. package/src/app/core/menu/menu.component.d.ts +1 -0
  54. package/src/app/core/settings/settings.page.d.ts +1 -0
  55. package/src/app/core/table/column/actions-column.component.d.ts +1 -0
  56. package/src/app/core/table/column/nav-actions-column.component.d.ts +1 -0
  57. package/src/app/core/table/testing/table.testing.d.ts +1 -0
  58. package/src/app/core/table/testing/table2.testing.d.ts +1 -0
  59. package/src/app/shared/constants.d.ts +2 -0
  60. package/src/app/shared/directives/autotooltip.directive.d.ts +14 -0
  61. package/src/app/shared/directives/directives.module.d.ts +4 -3
  62. package/src/app/shared/image/gallery/image-gallery.component.d.ts +1 -0
  63. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +1 -0
  64. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +2 -1
  65. package/src/app/shared/material/boolean/boolean.module.d.ts +2 -1
  66. package/src/app/shared/material/boolean/material.boolean.d.ts +1 -0
  67. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +5 -0
  68. package/src/app/shared/material/chips/chips.module.d.ts +2 -1
  69. package/src/app/shared/material/chips/material.chips.d.ts +1 -0
  70. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +1 -0
  71. package/src/app/shared/storage/storage-explorer.component.d.ts +1 -0
  72. package/src/app/social/feed/feed.component.d.ts +1 -0
  73. package/src/app/social/job/progression/job-progression.icon.d.ts +1 -0
  74. package/src/app/social/job/progression/job-progression.list.d.ts +1 -0
  75. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +1 -0
  76. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +2 -0
  77. package/src/app/social/user-event/notification/user-event-notification.modal.d.ts +1 -0
  78. package/src/assets/manifest.json +1 -1
@@ -1,3 +1,4 @@
1
+ import { InjectionToken } from '@angular/core';
1
2
  export const DATE_ISO_PATTERN = 'YYYY-MM-DDTHH:mm:ss.SSSZ';
2
3
  export const DATE_PATTERN = 'YYYY-MM-DD';
3
4
  export const DATE_MATCH_REGEXP = /^\d+[-]\d+-\d+$/;
@@ -13,4 +14,5 @@ export const KEYBOARD_HIDE_DELAY_MS = 250; // 1s
13
14
  // Separator to join properties (see `joinPropertiesPath()` or `referentialToString()` )
14
15
  export const DEFAULT_JOIN_PROPERTIES_SEPARATOR = ' - ';
15
16
  export const DEFAULT_JOIN_ARRAY_VALUES_SEPARATOR = ', ';
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLDBCQUEwQixDQUFDO0FBQzNELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDekMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsUUFBUSxDQUFDLENBQUMsYUFBYTtBQUMvRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsdUVBQXVFLENBQUM7QUFDckcsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsUUFBUSxDQUFDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLG9DQUFvQyxHQUFHLFNBQVMsQ0FBQztBQUU5RCxpRUFBaUU7QUFDakUsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsUUFBUSxDQUFDLENBQUMsNEJBQTRCO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLG9DQUFvQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLDRCQUE0QjtBQUUzRixNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxNQUFNLENBQUM7QUFFMUQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSztBQUVoRCx3RkFBd0Y7QUFDeEYsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQVcsS0FBSyxDQUFDO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLG1DQUFtQyxHQUFXLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBEQVRFX0lTT19QQVRURVJOID0gJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTWic7XG5leHBvcnQgY29uc3QgREFURV9QQVRURVJOID0gJ1lZWVktTU0tREQnO1xuZXhwb3J0IGNvbnN0IERBVEVfTUFUQ0hfUkVHRVhQID0gL15cXGQrWy1dXFxkKy1cXGQrJC87XG5leHBvcnQgY29uc3QgREVGQVVMVF9QTEFDRUhPTERFUl9DSEFSID0gJ1xcdTAwNUYnOyAvLyB1bmRlcnNjb3JlXG5leHBvcnQgY29uc3QgUFVCS0VZX1JFR0VYUCA9IC9eWzEyMzQ1Njc4OUFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXpdezQzLDQ0fSQvO1xuZXhwb3J0IGNvbnN0IFNQQUNFX1BMQUNFSE9MREVSX0NIQVIgPSAnXFx1MjAwMCc7XG5leHBvcnQgY29uc3QgU1BBQ0VfUExBQ0VIT0xERVJfQ0hBUl9SRUdFWFBfR0xPQkFMID0gL1xcdTIwMDAvZztcblxuLy8gU2VlIGh0dHBzOi8vdW5pY29kZS1zZWFyY2gubmV0L3VuaWNvZGUtbmFtZXNlYXJjaC5wbD90ZXJtPVpFUk9cbmV4cG9ydCBjb25zdCBFTVBUWV9QTEFDRUhPTERFUl9DSEFSID0gJ1xcdUZFRkYnOyAvLyBaRVJPIFdJRFRIIE5PLUJSRUFLIFNQQUNFXG5leHBvcnQgY29uc3QgRU1QVFlfUExBQ0VIT0xERVJfQ0hBUl9SRUdFWFBfR0xPQkFMID0gL1xcdUZFRkYvZzsgLy8gWkVSTyBXSURUSCBOTy1CUkVBSyBTUEFDRVxuXG5leHBvcnQgY29uc3QgUExVU19QTEFDRUhPTERFUl9DSEFSX1JFR0VYUF9HTE9CQUwgPSAvWytdL2c7XG5cbmV4cG9ydCBjb25zdCBLRVlCT0FSRF9ISURFX0RFTEFZX01TID0gMjUwOyAvLyAxc1xuXG4vLyBTZXBhcmF0b3IgdG8gam9pbiBwcm9wZXJ0aWVzIChzZWUgYGpvaW5Qcm9wZXJ0aWVzUGF0aCgpYCBvciBgcmVmZXJlbnRpYWxUb1N0cmluZygpYCApXG5leHBvcnQgY29uc3QgREVGQVVMVF9KT0lOX1BST1BFUlRJRVNfU0VQQVJBVE9SOiBzdHJpbmcgPSAnIC0gJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX0pPSU5fQVJSQVlfVkFMVUVTX1NFUEFSQVRPUjogc3RyaW5nID0gJywgJztcbiJdfQ==
17
+ export const SHOW_TOOLTIP = new InjectionToken('Use Material Tooltip or not');
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsMEJBQTBCLENBQUM7QUFDM0QsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQztBQUN6QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUNuRCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxRQUFRLENBQUMsQ0FBQyxhQUFhO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyx1RUFBdUUsQ0FBQztBQUNyRyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxRQUFRLENBQUM7QUFDL0MsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBQUcsU0FBUyxDQUFDO0FBRTlELGlFQUFpRTtBQUNqRSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxRQUFRLENBQUMsQ0FBQyw0QkFBNEI7QUFDNUUsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBQUcsU0FBUyxDQUFDLENBQUMsNEJBQTRCO0FBRTNGLE1BQU0sQ0FBQyxNQUFNLG1DQUFtQyxHQUFHLE1BQU0sQ0FBQztBQUUxRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLO0FBRWhELHdGQUF3RjtBQUN4RixNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBVyxLQUFLLENBQUM7QUFDL0QsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQVcsSUFBSSxDQUFDO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBVSw2QkFBNkIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IERBVEVfSVNPX1BBVFRFUk4gPSAnWVlZWS1NTS1ERFRISDptbTpzcy5TU1NaJztcbmV4cG9ydCBjb25zdCBEQVRFX1BBVFRFUk4gPSAnWVlZWS1NTS1ERCc7XG5leHBvcnQgY29uc3QgREFURV9NQVRDSF9SRUdFWFAgPSAvXlxcZCtbLV1cXGQrLVxcZCskLztcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BMQUNFSE9MREVSX0NIQVIgPSAnXFx1MDA1Ric7IC8vIHVuZGVyc2NvcmVcbmV4cG9ydCBjb25zdCBQVUJLRVlfUkVHRVhQID0gL15bMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5el17NDMsNDR9JC87XG5leHBvcnQgY29uc3QgU1BBQ0VfUExBQ0VIT0xERVJfQ0hBUiA9ICdcXHUyMDAwJztcbmV4cG9ydCBjb25zdCBTUEFDRV9QTEFDRUhPTERFUl9DSEFSX1JFR0VYUF9HTE9CQUwgPSAvXFx1MjAwMC9nO1xuXG4vLyBTZWUgaHR0cHM6Ly91bmljb2RlLXNlYXJjaC5uZXQvdW5pY29kZS1uYW1lc2VhcmNoLnBsP3Rlcm09WkVST1xuZXhwb3J0IGNvbnN0IEVNUFRZX1BMQUNFSE9MREVSX0NIQVIgPSAnXFx1RkVGRic7IC8vIFpFUk8gV0lEVEggTk8tQlJFQUsgU1BBQ0VcbmV4cG9ydCBjb25zdCBFTVBUWV9QTEFDRUhPTERFUl9DSEFSX1JFR0VYUF9HTE9CQUwgPSAvXFx1RkVGRi9nOyAvLyBaRVJPIFdJRFRIIE5PLUJSRUFLIFNQQUNFXG5cbmV4cG9ydCBjb25zdCBQTFVTX1BMQUNFSE9MREVSX0NIQVJfUkVHRVhQX0dMT0JBTCA9IC9bK10vZztcblxuZXhwb3J0IGNvbnN0IEtFWUJPQVJEX0hJREVfREVMQVlfTVMgPSAyNTA7IC8vIDFzXG5cbi8vIFNlcGFyYXRvciB0byBqb2luIHByb3BlcnRpZXMgKHNlZSBgam9pblByb3BlcnRpZXNQYXRoKClgIG9yIGByZWZlcmVudGlhbFRvU3RyaW5nKClgIClcbmV4cG9ydCBjb25zdCBERUZBVUxUX0pPSU5fUFJPUEVSVElFU19TRVBBUkFUT1I6IHN0cmluZyA9ICcgLSAnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSk9JTl9BUlJBWV9WQUxVRVNfU0VQQVJBVE9SOiBzdHJpbmcgPSAnLCAnO1xuZXhwb3J0IGNvbnN0IFNIT1dfVE9PTFRJUCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxib29sZWFuPignVXNlIE1hdGVyaWFsIFRvb2x0aXAgb3Igbm90Jyk7XG4iXX0=
@@ -0,0 +1,35 @@
1
+ import { booleanAttribute, Directive, ElementRef, Inject, Input } from '@angular/core';
2
+ import { MatTooltip } from '@angular/material/tooltip';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/material/tooltip";
5
+ export class AutoTooltipDirective {
6
+ elementRef;
7
+ matTooltip;
8
+ appAutoTooltip = true;
9
+ constructor(elementRef, matTooltip) {
10
+ this.elementRef = elementRef;
11
+ this.matTooltip = matTooltip;
12
+ }
13
+ ngAfterContentChecked() {
14
+ // Update Material Tooltip if different
15
+ if (this.elementRef.nativeElement && this.matTooltip && this.matTooltip.message !== this.elementRef.nativeElement.textContent) {
16
+ this.matTooltip.message = this.elementRef.nativeElement.textContent;
17
+ }
18
+ }
19
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AutoTooltipDirective, deps: [{ token: ElementRef }, { token: i1.MatTooltip }], target: i0.ɵɵFactoryTarget.Directive });
20
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.14", type: AutoTooltipDirective, selector: "ion-label[appAutoTooltip], mat-label[appAutoTooltip]", inputs: { appAutoTooltip: ["appAutoTooltip", "appAutoTooltip", booleanAttribute] }, hostDirectives: [{ directive: i1.MatTooltip }], ngImport: i0 });
21
+ }
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AutoTooltipDirective, decorators: [{
23
+ type: Directive,
24
+ args: [{
25
+ selector: 'ion-label[appAutoTooltip], mat-label[appAutoTooltip]',
26
+ hostDirectives: [MatTooltip],
27
+ }]
28
+ }], ctorParameters: () => [{ type: i0.ElementRef, decorators: [{
29
+ type: Inject,
30
+ args: [ElementRef]
31
+ }] }, { type: i1.MatTooltip }], propDecorators: { appAutoTooltip: [{
32
+ type: Input,
33
+ args: [{ transform: booleanAttribute }]
34
+ }] } });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3Rvb2x0aXAuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZGlyZWN0aXZlcy9hdXRvdG9vbHRpcC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7QUFNdkQsTUFBTSxPQUFPLG9CQUFvQjtJQUlRO0lBQ3BCO0lBSnFCLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFFOUQsWUFDdUMsVUFBbUMsRUFDdkQsVUFBc0I7UUFERixlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUN2RCxlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQ3RDLENBQUM7SUFFSixxQkFBcUI7UUFDbkIsdUNBQXVDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM5SCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7UUFDdEUsQ0FBQztJQUNILENBQUM7d0dBYlUsb0JBQW9CLGtCQUlyQixVQUFVOzRGQUpULG9CQUFvQixtSUFDWCxnQkFBZ0I7OzRGQUR6QixvQkFBb0I7a0JBSmhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHNEQUFzRDtvQkFDaEUsY0FBYyxFQUFFLENBQUMsVUFBVSxDQUFDO2lCQUM3Qjs7MEJBS0ksTUFBTTsyQkFBQyxVQUFVO2tFQUhvQixjQUFjO3NCQUFyRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgYm9vbGVhbkF0dHJpYnV0ZSwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRUb29sdGlwIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2lvbi1sYWJlbFthcHBBdXRvVG9vbHRpcF0sIG1hdC1sYWJlbFthcHBBdXRvVG9vbHRpcF0nLFxuICBob3N0RGlyZWN0aXZlczogW01hdFRvb2x0aXBdLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRvVG9vbHRpcERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudENoZWNrZWQge1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYXBwQXV0b1Rvb2x0aXAgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRWxlbWVudFJlZikgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1hdFRvb2x0aXA6IE1hdFRvb2x0aXBcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgTWF0ZXJpYWwgVG9vbHRpcCBpZiBkaWZmZXJlbnRcbiAgICBpZiAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5tYXRUb29sdGlwICYmIHRoaXMubWF0VG9vbHRpcC5tZXNzYWdlICE9PSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCkge1xuICAgICAgdGhpcy5tYXRUb29sdGlwLm1lc3NhZ2UgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -7,18 +7,47 @@ import { DragAndDropDirective } from './drag-and-drop.directive';
7
7
  import { AutoTitleDirective } from './autotitle.directive';
8
8
  import { ThrottledClickDirective } from './throttled-click.directive';
9
9
  import { AutoResizeDirective } from './autoresize.directive';
10
+ import { AutoTooltipDirective } from './autotooltip.directive';
10
11
  import * as i0 from "@angular/core";
11
12
  export class SharedDirectivesModule {
12
13
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SharedDirectivesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
13
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: SharedDirectivesModule, declarations: [AutofocusDirective, NgVarDirective, DragAndDropDirective, AutoTitleDirective, ThrottledClickDirective, AutoResizeDirective], imports: [CommonModule, IonicModule], exports: [AutofocusDirective, NgVarDirective, DragAndDropDirective, AutoTitleDirective, ThrottledClickDirective, AutoResizeDirective] });
14
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: SharedDirectivesModule, declarations: [AutofocusDirective,
15
+ NgVarDirective,
16
+ DragAndDropDirective,
17
+ AutoTitleDirective,
18
+ ThrottledClickDirective,
19
+ AutoResizeDirective,
20
+ AutoTooltipDirective], imports: [CommonModule, IonicModule], exports: [AutofocusDirective,
21
+ NgVarDirective,
22
+ DragAndDropDirective,
23
+ AutoTitleDirective,
24
+ ThrottledClickDirective,
25
+ AutoResizeDirective,
26
+ AutoTooltipDirective] });
14
27
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SharedDirectivesModule, imports: [CommonModule, IonicModule] });
15
28
  }
16
29
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SharedDirectivesModule, decorators: [{
17
30
  type: NgModule,
18
31
  args: [{
19
32
  imports: [CommonModule, IonicModule],
20
- declarations: [AutofocusDirective, NgVarDirective, DragAndDropDirective, AutoTitleDirective, ThrottledClickDirective, AutoResizeDirective],
21
- exports: [AutofocusDirective, NgVarDirective, DragAndDropDirective, AutoTitleDirective, ThrottledClickDirective, AutoResizeDirective],
33
+ declarations: [
34
+ AutofocusDirective,
35
+ NgVarDirective,
36
+ DragAndDropDirective,
37
+ AutoTitleDirective,
38
+ ThrottledClickDirective,
39
+ AutoResizeDirective,
40
+ AutoTooltipDirective,
41
+ ],
42
+ exports: [
43
+ AutofocusDirective,
44
+ NgVarDirective,
45
+ DragAndDropDirective,
46
+ AutoTitleDirective,
47
+ ThrottledClickDirective,
48
+ AutoResizeDirective,
49
+ AutoTooltipDirective,
50
+ ],
22
51
  }]
23
52
  }] });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aXZlcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9kaXJlY3RpdmVzL2RpcmVjdGl2ZXMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBTzdELE1BQU0sT0FBTyxzQkFBc0I7d0dBQXRCLHNCQUFzQjt5R0FBdEIsc0JBQXNCLGlCQUhsQixrQkFBa0IsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLGFBRC9ILFlBQVksRUFBRSxXQUFXLGFBRXpCLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUI7eUdBRXpILHNCQUFzQixZQUp2QixZQUFZLEVBQUUsV0FBVzs7NEZBSXhCLHNCQUFzQjtrQkFMbEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDO29CQUNwQyxZQUFZLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLENBQUM7b0JBQzFJLE9BQU8sRUFBRSxDQUFDLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsQ0FBQztpQkFDdEkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElvbmljTW9kdWxlIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgQXV0b2ZvY3VzRGlyZWN0aXZlIH0gZnJvbSAnLi9hdXRvZm9jdXMuZGlyZWN0aXZlJztcbmltcG9ydCB7IE5nVmFyRGlyZWN0aXZlIH0gZnJvbSAnLi9uZy12YXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IERyYWdBbmREcm9wRGlyZWN0aXZlIH0gZnJvbSAnLi9kcmFnLWFuZC1kcm9wLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBdXRvVGl0bGVEaXJlY3RpdmUgfSBmcm9tICcuL2F1dG90aXRsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGhyb3R0bGVkQ2xpY2tEaXJlY3RpdmUgfSBmcm9tICcuL3Rocm90dGxlZC1jbGljay5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQXV0b1Jlc2l6ZURpcmVjdGl2ZSB9IGZyb20gJy4vYXV0b3Jlc2l6ZS5kaXJlY3RpdmUnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJb25pY01vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW0F1dG9mb2N1c0RpcmVjdGl2ZSwgTmdWYXJEaXJlY3RpdmUsIERyYWdBbmREcm9wRGlyZWN0aXZlLCBBdXRvVGl0bGVEaXJlY3RpdmUsIFRocm90dGxlZENsaWNrRGlyZWN0aXZlLCBBdXRvUmVzaXplRGlyZWN0aXZlXSxcbiAgZXhwb3J0czogW0F1dG9mb2N1c0RpcmVjdGl2ZSwgTmdWYXJEaXJlY3RpdmUsIERyYWdBbmREcm9wRGlyZWN0aXZlLCBBdXRvVGl0bGVEaXJlY3RpdmUsIFRocm90dGxlZENsaWNrRGlyZWN0aXZlLCBBdXRvUmVzaXplRGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgU2hhcmVkRGlyZWN0aXZlc01vZHVsZSB7fVxuIl19
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aXZlcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9kaXJlY3RpdmVzL2RpcmVjdGl2ZXMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBdUIvRCxNQUFNLE9BQU8sc0JBQXNCO3dHQUF0QixzQkFBc0I7eUdBQXRCLHNCQUFzQixpQkFsQi9CLGtCQUFrQjtZQUNsQixjQUFjO1lBQ2Qsb0JBQW9CO1lBQ3BCLGtCQUFrQjtZQUNsQix1QkFBdUI7WUFDdkIsbUJBQW1CO1lBQ25CLG9CQUFvQixhQVJaLFlBQVksRUFBRSxXQUFXLGFBV2pDLGtCQUFrQjtZQUNsQixjQUFjO1lBQ2Qsb0JBQW9CO1lBQ3BCLGtCQUFrQjtZQUNsQix1QkFBdUI7WUFDdkIsbUJBQW1CO1lBQ25CLG9CQUFvQjt5R0FHWCxzQkFBc0IsWUFwQnZCLFlBQVksRUFBRSxXQUFXOzs0RkFvQnhCLHNCQUFzQjtrQkFyQmxDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQztvQkFDcEMsWUFBWSxFQUFFO3dCQUNaLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxvQkFBb0I7d0JBQ3BCLGtCQUFrQjt3QkFDbEIsdUJBQXVCO3dCQUN2QixtQkFBbUI7d0JBQ25CLG9CQUFvQjtxQkFDckI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxvQkFBb0I7d0JBQ3BCLGtCQUFrQjt3QkFDbEIsdUJBQXVCO3dCQUN2QixtQkFBbUI7d0JBQ25CLG9CQUFvQjtxQkFDckI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElvbmljTW9kdWxlIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgQXV0b2ZvY3VzRGlyZWN0aXZlIH0gZnJvbSAnLi9hdXRvZm9jdXMuZGlyZWN0aXZlJztcbmltcG9ydCB7IE5nVmFyRGlyZWN0aXZlIH0gZnJvbSAnLi9uZy12YXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IERyYWdBbmREcm9wRGlyZWN0aXZlIH0gZnJvbSAnLi9kcmFnLWFuZC1kcm9wLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBdXRvVGl0bGVEaXJlY3RpdmUgfSBmcm9tICcuL2F1dG90aXRsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGhyb3R0bGVkQ2xpY2tEaXJlY3RpdmUgfSBmcm9tICcuL3Rocm90dGxlZC1jbGljay5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQXV0b1Jlc2l6ZURpcmVjdGl2ZSB9IGZyb20gJy4vYXV0b3Jlc2l6ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQXV0b1Rvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICcuL2F1dG90b29sdGlwLmRpcmVjdGl2ZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIElvbmljTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgQXV0b2ZvY3VzRGlyZWN0aXZlLFxuICAgIE5nVmFyRGlyZWN0aXZlLFxuICAgIERyYWdBbmREcm9wRGlyZWN0aXZlLFxuICAgIEF1dG9UaXRsZURpcmVjdGl2ZSxcbiAgICBUaHJvdHRsZWRDbGlja0RpcmVjdGl2ZSxcbiAgICBBdXRvUmVzaXplRGlyZWN0aXZlLFxuICAgIEF1dG9Ub29sdGlwRGlyZWN0aXZlLFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgQXV0b2ZvY3VzRGlyZWN0aXZlLFxuICAgIE5nVmFyRGlyZWN0aXZlLFxuICAgIERyYWdBbmREcm9wRGlyZWN0aXZlLFxuICAgIEF1dG9UaXRsZURpcmVjdGl2ZSxcbiAgICBUaHJvdHRsZWRDbGlja0RpcmVjdGl2ZSxcbiAgICBBdXRvUmVzaXplRGlyZWN0aXZlLFxuICAgIEF1dG9Ub29sdGlwRGlyZWN0aXZlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTaGFyZWREaXJlY3RpdmVzTW9kdWxlIHt9XG4iXX0=
@@ -801,7 +801,7 @@ export function mergeObjectsWithoutUndefined(...objects) {
801
801
  * @return {unknown} A new object that combines the properties of the provided objects, excluding `undefined` values.
802
802
  */
803
803
  export function assignSkipUndefined(target, ...sources) {
804
- if (!sources)
804
+ if (isEmptyArray(sources))
805
805
  return target;
806
806
  if (!target)
807
807
  return assignSkipUndefined(sources[0], ...sources.slice(1));
@@ -822,4 +822,4 @@ export function assignSkipUndefined(target, ...sources) {
822
822
  return acc;
823
823
  }, target);
824
824
  }
825
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxhQUFhLE1BQU0sT0FBTyxDQUFDO0FBRXZDLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFM0MsTUFBTSxVQUFVLEtBQUssQ0FBSSxHQUF5QjtJQUNoRCxPQUFPLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQztBQUMzQyxDQUFDO0FBQ0QsTUFBTSxVQUFVLFlBQVksQ0FBSSxHQUF5QjtJQUN2RCxPQUFPLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDN0YsQ0FBQztBQUNELE1BQU0sVUFBVSxRQUFRLENBQUksR0FBeUI7SUFDbkQsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFDM0MsQ0FBQztBQUNELE1BQU0sVUFBVSxlQUFlLENBQUksR0FBeUI7SUFDMUQsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzdGLENBQUM7QUFDRCxNQUFNLFVBQVUsYUFBYSxDQUFJLEdBQXlCO0lBQ3hELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFH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QUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekUsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2pDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxHQUFHLENBQUM7UUFDckIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDOUIsaUJBQWlCO29CQUNqQixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUNuQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjbG9uZUltcG9ydGVkIGZyb20gJ2Nsb25lJztcbmltcG9ydCB7IEtleXNFbnVtLCBLZXlWYWx1ZVR5cGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IERFRkFVTFRfSk9JTl9QUk9QRVJUSUVTX1NFUEFSQVRPUiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFJlZ0V4cFV0aWxzIH0gZnJvbSAnLi9yZWdleHBzJztcbmltcG9ydCB7IHVud3JhcEVTTW9kdWxlIH0gZnJvbSAnLi9tb2R1bGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmlsPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05pbE9yQmxhbms8VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8ICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJyAmJiBvYmoudHJpbSgpID09PSAnJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROaWw8VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TmlsT3JCbGFuazxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgJiYgKHR5cGVvZiBvYmogIT09ICdzdHJpbmcnIHx8IG9iai50cmltKCkgIT09ICcnKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE5pbE9yTmFOPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCAmJiAodHlwZW9mIG9iaiAhPT0gJ251bWJlcicgfHwgIWlzTmFOKG9iaikpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTmlsT3JOYU48VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8ICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJyAmJiBpc05hTihvYmopKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05vdEVtcHR5QXJyYXk8VD4ob2JqOiBUW10gfCByZWFkb25seSBUW10gfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgJiYgb2JqLmxlbmd0aCA+IDA7XG59XG5leHBvcnQgZnVuY3Rpb24gZmlyc3RBcnJheVZhbHVlPFQ+KG9iajogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFQgfCB1bmRlZmluZWQge1xuICByZXR1cm4gaXNOb3RFbXB0eUFycmF5KG9iaikgPyBvYmpbMF0gOiB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbGFzdEFycmF5VmFsdWU8VD4ob2JqOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkKTogVCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBpc05vdEVtcHR5QXJyYXkob2JqKSA/IG9ialtvYmoubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eUFycmF5PFQ+KG9iajogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8ICFvYmoubGVuZ3RoO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5UmVzaXplPFQ+KGFycmF5OiBUW10gfCBudWxsIHwgdW5kZWZpbmVkLCBzaXplOiBudW1iZXIsIGRlZmF1bHRWYWx1ZT86IFQpOiBUW10ge1xuICBpZiAoc2l6ZSA8IDApIHRocm93IG5ldyBFcnJvcihcIkFyZ3VtZW50ICdzaXplJyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyXCIpO1xuICBpZiAoIWFycmF5KSByZXR1cm4gbmV3QXJyYXkoc2l6ZSwgZGVmYXVsdFZhbHVlKTtcblxuICAvLyBSZWR1Y2Ugc2l6ZVxuICBpZiAoYXJyYXkubGVuZ3RoID4gc2l6ZSkge1xuICAgIHJldHVybiBhcnJheS5zbGljZSgwLCBzaXplKTtcbiAgfVxuICAvLyBJbmNyZWFzZSBzaXplXG4gIGVsc2UgaWYgKGFycmF5Lmxlbmd0aCA8IHNpemUpIHtcbiAgICByZXR1cm4gWy4uLmFycmF5LCAuLi5uZXdBcnJheShzaXplIC0gYXJyYXkubGVuZ3RoLCBkZWZhdWx0VmFsdWUpXTtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBuZXdBcnJheTxUPihzaXplOiBudW1iZXIsIGRlZmF1bHRWYWx1ZT86IFQpOiBUW10ge1xuICBpZiAoc2l6ZSA8IDApIHRocm93IG5ldyBFcnJvcihcIkFyZ3VtZW50ICdzaXplJyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyXCIpO1xuICByZXR1cm4gbmV3IEFycmF5KHNpemUpLmZpbGwoZGVmYXVsdFZhbHVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE5pbEJvb2xlYW4ob2JqOiBhbnkgfCBudWxsIHwgdW5kZWZpbmVkKTogb2JqIGlzIGJvb2xlYW4ge1xuICByZXR1cm4gKG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHx8IGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TmlsU3RyaW5nKG9iajogYW55IHwgbnVsbCB8IHVuZGVmaW5lZCk6IG9iaiBpcyBzdHJpbmcge1xuICByZXR1cm4gKG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykgfHwgZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROaWxPYmplY3Qob2JqOiBhbnkgfCBudWxsIHwgdW5kZWZpbmVkKTogb2JqIGlzIG9iamVjdCB7XG4gIHJldHVybiAob2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB8fCBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JsYW5rU3RyaW5nKG9iajogYW55IHwgbnVsbCB8IHVuZGVmaW5lZCk6IG9iaiBpcyBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ3N0cmluZycgJiYgb2JqLnRyaW0oKS5sZW5ndGggPT09IDA7XG59XG5leHBvcnQgZnVuY3Rpb24gbm90TmlsT3JEZWZhdWx0PFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZTogVCk6IFQge1xuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsID8gb2JqIDogZGVmYXVsdFZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5U2l6ZTxUPihvYmo6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQpOiBudW1iZXIge1xuICByZXR1cm4gKGlzTm90RW1wdHlBcnJheShvYmopICYmIG9iai5sZW5ndGgpIHx8IDA7XG59XG5cbi8qKlxuICogUmVtb3ZlIGR1cGxpY2F0ZWQgdmFsdWUsIGluIGFycmF5LiBXaWxsIGNvbXB1dGUgYSB1bmlxdWUga2V5IChmcm9tIGdpdmVuIHByb3BlcnRpZXMsIG9yIGdpdmVuIGZ1bmN0aW9uKS5cbiAqIElmIHByb3BlcnRpZXNPcktleUZuIGlzIG5pbCBvciB1bmRlZmluZWQsIHdpbGwgdXNlIGFsbCBvYmplY3QgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB2YWx1ZXNcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzT3JLZXlGblxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlEaXN0aW5jdDxUID0gYW55Pih2YWx1ZXM6IFRbXSwgcHJvcGVydGllc09yS2V5Rm4/OiBzdHJpbmcgfCBzdHJpbmdbXSB8ICgob2JqOiBUKSA9PiBzdHJpbmcpKTogVFtdIHtcbiAgaWYgKGlzRW1wdHlBcnJheSh2YWx1ZXMpKSByZXR1cm4gdmFsdWVzO1xuICBjb25zdCBwcm9wZXJ0aWVzOiBzdHJpbmdbXSA9ICghcHJvcGVydGllc09yS2V5Rm4gJiYgT2JqZWN0LmtleXModmFsdWVzWzBdKSkgfHwgKEFycmF5LmlzQXJyYXkocHJvcGVydGllc09yS2V5Rm4pICYmIHByb3BlcnRpZXNPcktleUZuKTtcbiAgY29uc3QgZ2V0S2V5OiAob2JqOiBUKSA9PiBzdHJpbmcgPVxuICAgICh0eXBlb2YgcHJvcGVydGllc09yS2V5Rm4gPT09ICdmdW5jdGlvbicgJiYgcHJvcGVydGllc09yS2V5Rm4pIHx8XG4gICAgKHR5cGVvZiBwcm9wZXJ0aWVzT3JLZXlGbiA9PT0gJ3N0cmluZycgJiYgKChvYmopID0+IGdldFByb3BlcnR5QnlQYXRoQXNTdHJpbmcob2JqLCBwcm9wZXJ0aWVzT3JLZXlGbikpKSB8fFxuICAgIChpc0VtcHR5QXJyYXkocHJvcGVydGllcykgJiYgKChvYmopID0+IG9iaj8udG9TdHJpbmcoKSkpIHx8XG4gICAgKChvYmopID0+IGpvaW5Qcm9wZXJ0aWVzUGF0aChvYmosIHByb3BlcnRpZXMsICd8JykpO1xuICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICByZXR1cm4gdmFsdWVzLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XG4gICAgY29uc3QgdW5pcXVlS2V5ID0gZ2V0S2V5KGl0ZW0pO1xuICAgIGlmIChleGlzdGluZ0lkcy5oYXModW5pcXVlS2V5KSkgcmV0dXJuIHJlczsgLy8gU2tpcCBpZiBkdXBsaWNhdGVcbiAgICBleGlzdGluZ0lkcy5hZGQodW5pcXVlS2V5KTtcbiAgICByZXR1cm4gcmVzLmNvbmNhdChpdGVtKTtcbiAgfSwgW10pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG51bGxJZlVuZGVmaW5lZDxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogVCB8IG51bGwge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgPyBudWxsIDogb2JqO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG51bGxJZk5pbE9yQmxhbms8VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFQgfCBudWxsIHtcbiAgcmV0dXJuIGlzTmlsT3JCbGFuayhvYmopID8gbnVsbCA6IG9iajtcbn1cbmV4cG9ydCBmdW5jdGlvbiB1bmRlZmluZWRJZk51bGw8VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFQgfCB1bmRlZmluZWQge1xuICByZXR1cm4gb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRyaW1FbXB0eVRvTnVsbDxUPihzdHI6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgdmFsdWUgPSAoc3RyICYmIHN0ci50cmltKCkpIHx8IHVuZGVmaW5lZDtcbiAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggJiYgdmFsdWUpIHx8IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9Cb29sZWFuKG9iajogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQgfCBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCA/IChvYmogIT09ICdmYWxzZScgPyAhIW9iaiA6IGZhbHNlKSA6IGRlZmF1bHRWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcihvYmo6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQgfCBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBpc05vdE5pbE9yTmFOKG9iaikgPyArb2JqIDogZGVmYXVsdFZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvRmxvYXQob2JqOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBkZWZhdWx0VmFsdWU/OiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCA/IHBhcnNlRmxvYXQob2JqKSA6IGRlZmF1bHRWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b0ludChvYmo6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZT86IG51bWJlcik6IG51bWJlciB8IG51bGwge1xuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsID8gcGFyc2VJbnQob2JqLCAwKSA6IGRlZmF1bHRWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b05vdE5pbDxUID0gYW55PihvYmo6IFQsIGRlZmF1bHRWYWx1ZT86IFQpOiBhbnkgfCBudWxsIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCA/IG9iaiA6IGRlZmF1bHRWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEdXBsaWNhdGVzRnJvbUFycmF5PFQ+KG9iajogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCwgcHJvcGVydHk/OiBzdHJpbmcpOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGlzRW1wdHlBcnJheShvYmopKSByZXR1cm4gb2JqO1xuICBpZiAocHJvcGVydHkpIHtcbiAgICByZXR1cm4gb2JqLmZpbHRlcigoaXRlbSwgaSwgYXJyYXkpID0+IGFycmF5LmZpbmRJbmRleCgodCkgPT4gdCAmJiBpdGVtICYmIHRbcHJvcGVydHldID09PSBpdGVtW3Byb3BlcnR5XSkgPT09IGkpO1xuICB9XG4gIHJldHVybiBvYmouZmlsdGVyKChpdGVtLCBpLCBhcnJheSkgPT4gYXJyYXkuZmluZEluZGV4KCh0KSA9PiB0ICYmIGl0ZW0gJiYgdCA9PT0gaXRlbSkgPT09IGkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRzV2l0aFVwcGVyQ2FzZShpbnB1dDogc3RyaW5nLCBzZWFyY2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaW5wdXQ/LnRvVXBwZXJDYXNlKCkuc3RhcnRzV2l0aChzZWFyY2gpIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBSZWdleHBzLm1hdGNoVXBwZXJDYXNlIGluc3RlYWRcbiAqL1xuZXhwb3J0IGNvbnN0IG1hdGNoVXBwZXJDYXNlID0gUmVnRXhwVXRpbHMubWF0Y2hVcHBlckNhc2U7XG5cbi8qKlxuICogUmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGlmIGFueS4gRXhhbXBsZXMgOlxuICogLSAnL3Rlc3QvJyAtPiAnL3Rlc3QnXG4gKiAtICcvJyAtPiB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vVHJhaWxpbmdTbGFzaChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIXBhdGggfHwgcGF0aC50cmltKCkgPT09ICcvJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHBhdGgudHJpbSgpLmxhc3RJbmRleE9mKCcvJykgPT09IHBhdGgubGVuZ3RoIC0gMSkgcmV0dXJuIHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gMSk7XG4gIHJldHVybiBwYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUFsbCh2YWx1ZTogc3RyaW5nLCBzZWFyY2hTdHJpbmc6IGFueSwgcmVwbGFjZW1lbnQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB3aGlsZSAodmFsdWUgJiYgdmFsdWUuaW5kZXhPZihzZWFyY2hTdHJpbmcpICE9PSAtMSkge1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZShzZWFyY2hTdHJpbmcsIHJlcGxhY2VtZW50KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVSZWdFeHAodmFsdWU6IHN0cmluZykge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRW5kKHZhbHVlOiBzdHJpbmcsIGVuZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlPy5lbmRzV2l0aChlbmQgfHwgJycpID8gdmFsdWUuc3Vic3RyKDAsIHZhbHVlLmxlbmd0aCAtIGVuZC5sZW5ndGgpIDogdmFsdWU7XG59XG5cbi8qKlxuICogUmVwbGFjZSBjYXNlIGNoYW5nZSBieSBhbiB1bmRlcnNjb3JlICguZS5nICdteVN0cmluZycgYmVjb21lcyAnbXlfc3RyaW5nJylcbiAqXG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUNhc2VUb1VuZGVyc2NvcmUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChpc05pbE9yQmxhbmsodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDFfJDInKS50b0xvd2VyQ2FzZSgpO1xufVxuXG4vKipcbiAqIFJlcGxhY2UgdW5kZXJzY29yZSBieSBhIGNoYW5nZSBjYXNlICguZS5nICdNWV9TVFJJTkcnIGJlY29tZXMgJ015U3RyaW5nJylcbiAqXG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuZGVyc2NvcmVUb0NoYW5nZUNhc2UodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChpc05pbE9yQmxhbmsodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIHJldHVybiB2YWx1ZVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnNwbGl0KCdfJylcbiAgICAuZmlsdGVyKGlzTm90TmlsT3JCbGFuaylcbiAgICAubWFwKChzdHIsIGluZGV4KSA9PiAoaW5kZXggPT09IDAgPyBzdHIgOiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoc3RyKSkpXG4gICAgLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRGlhY3JpdGljcyh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1Z2dlc3RGcm9tU3RyaW5nQXJyYXkodmFsdWVzOiBzdHJpbmdbXSwgc2VhcmNoVGV4dDogYW55LCBvcHRzPzogeyBhbnlTZWFyY2g/OiBib29sZWFuIH0pOiBzdHJpbmdbXSB7XG4gIHNlYXJjaFRleHQgPSAodHlwZW9mIHNlYXJjaFRleHQgPT09ICdzdHJpbmcnICYmIHNlYXJjaFRleHQgIT09ICcqJyAmJiBzZWFyY2hUZXh0KSB8fCB1bmRlZmluZWQ7XG4gIGxldCBjbGVhblNlYXJjaFRleHQgPSBSZWdFeHBVdGlscy5jbGVhblNlYXJjaFRleHQoc2VhcmNoVGV4dCBhcyBzdHJpbmcpO1xuICBpZiAoIWNsZWFuU2VhcmNoVGV4dD8ubGVuZ3RoKSByZXR1cm4gdmFsdWVzO1xuXG4gIC8vIElmIHdpbGRjYXJkLCBzZWFyY2ggdXNpbmcgcmVnZXhwXG4gIGlmIChvcHRzPy5hbnlTZWFyY2ggfHwgUmVnRXhwVXRpbHMuaGFzV2lsZGNhcmRDaGFyYWN0ZXIoY2xlYW5TZWFyY2hUZXh0KSkge1xuICAgIGNvbnN0IHJlZ2V4cCA9IFJlZ0V4cFV0aWxzLmNvbXBpbGVTZWFyY2hSZWdleHAoY2xlYW5TZWFyY2hUZXh0LCAnZ2knKTtcbiAgICByZXR1cm4gdmFsdWVzLmZpbHRlcigodikgPT4gUmVnRXhwVXRpbHMubWF0Y2godiwgcmVnZXhwKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgbm8gd2lsZGNhcmQsIHNlYXJjaCB1c2luZyBzdGFydHNXaXRoXG4gICAgY2xlYW5TZWFyY2hUZXh0ID0gY2xlYW5TZWFyY2hUZXh0LnRvVXBwZXJDYXNlKCk7XG4gICAgcmV0dXJuIHZhbHVlcy5maWx0ZXIoKHYpID0+IHN0YXJ0c1dpdGhVcHBlckNhc2UodiwgY2xlYW5TZWFyY2hUZXh0KSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGpvaW5Qcm9wZXJ0aWVzUGF0aDxUID0gYW55PihvYmo6IFQsIHByb3BlcnRpZXM6IHN0cmluZ1tdLCBzZXBhcmF0b3I/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIW9iaikgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZGlzcGxheSBhbiB1bmRlZmluZWQgZW50aXR5LicpO1xuICBpZiAoaXNFbXB0eUFycmF5KHByb3BlcnRpZXMpKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIG9yIGVtcHR5ICdwcm9wZXJ0aWVzJyBhcmd1bWVudFwiKTtcbiAgcmV0dXJuIHByb3BlcnRpZXNcbiAgICAubWFwKChwYXRoKSA9PiBnZXRQcm9wZXJ0eUJ5UGF0aChvYmosIHBhdGgpKVxuICAgIC5maWx0ZXIoaXNOb3ROaWxPckJsYW5rKVxuICAgIC5qb2luKHNlcGFyYXRvciB8fCBERUZBVUxUX0pPSU5fUFJPUEVSVElFU19TRVBBUkFUT1IpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gam9pblByb3BlcnRpZXM8VCA9IGFueSwgSyBleHRlbmRzIGtleW9mIFQgPSBhbnk+KG9iajogVCwga2V5czogS1tdLCBzZXBhcmF0b3I/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIW9iaikgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZGlzcGxheSBhbiB1bmRlZmluZWQgZW50aXR5LicpO1xuICByZXR1cm4ga2V5c1xuICAgIC5tYXAoKGtleSkgPT4gZ2V0UHJvcGVydHkob2JqLCBrZXkpKVxuICAgIC5maWx0ZXIoaXNOb3ROaWxPckJsYW5rKVxuICAgIC5qb2luKHNlcGFyYXRvciB8fCBERUZBVUxUX0pPSU5fUFJPUEVSVElFU19TRVBBUkFUT1IpO1xufVxuXG4vKipcbiAqIEdlbmVyaWMgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMuXG4gKlxuICogQ29tcGFyZXMgdHdvIHZhbHVlcyB1c2luZyB0aGUgSmF2YVNjcmlwdCBncmVhdGVyLXRoYW4gb3BlcmF0b3IuXG4gKiBXb3JrcyBmb3IgbnVtYmVycywgc3RyaW5ncywgZGF0ZXMsIGFuZCBhbnkgdHlwZXMgdGhhdCBwcm92aWRlXG4gKiBhIG1lYW5pbmdmdWwgYD5gIGNvbXBhcmlzb24uIFVzZSBmb3IgYXNjZW5kaW5nIG9yZGVyLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFR5cGUgb2YgdGhlIGNvbXBhcmVkIHZhbHVlcy5cbiAqIEBwYXJhbSBhIC0gTGVmdCB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIGIgLSBSaWdodCB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMgMCBpZiBlcXVhbCwgLTEgaWYgYSA8IGIsIDEgaWYgYSA+IGIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlVmFsdWVzPFQ+KGE6IFQsIGI6IFQpOiBudW1iZXIge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIDA7XG4gIHJldHVybiBhID4gYiA/IDEgOiAtMTtcbn1cblxuLyoqXG4gKiBSZXZlcnNlIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIChkZXNjZW5kaW5nIG9yZGVyKS5cbiAqXG4gKiBTYW1lIHNlbWFudGljcyBhcyB7QGxpbmsgY29tcGFyZVZhbHVlc30gYnV0IGludmVydGVkLCB0byBzb3J0XG4gKiBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFR5cGUgb2YgdGhlIGNvbXBhcmVkIHZhbHVlcy5cbiAqIEBwYXJhbSBhIC0gTGVmdCB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIGIgLSBSaWdodCB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMgMCBpZiBlcXVhbCwgMSBpZiBhIDwgYiwgLTEgaWYgYSA+IGIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlVmFsdWVzRGVzYzxUPihhOiBULCBiOiBUKTogbnVtYmVyIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiAwO1xuICByZXR1cm4gYSA+IGIgPyAtMSA6IDE7XG59XG5cbi8qKlxuICogQnVpbGQgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIGJhc2VkIG9uIGEgbmVzdGVkIHByb3BlcnR5IHBhdGguXG4gKlxuICogVXNlcyB7QGxpbmsgZ2V0UHJvcGVydHlCeVBhdGh9IHRvIGV4dHJhY3QgdmFsdWVzIGFuZCBjb21wYXJlcyB0aGVtXG4gKiBpbiBhc2NlbmRpbmcgb3IgZGVzY2VuZGluZyBvcmRlci5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUeXBlIG9mIGNvbXBhcmVkIG9iamVjdHMuXG4gKiBAcGFyYW0gcGF0aCAtIFByb3BlcnR5IHBhdGggb3IgYXJyYXkgcGF0aCAoZS5nLiBcImEuYlswXS5jXCIpLlxuICogQHBhcmFtIGRpcmVjdGlvbiAtIFNvcnQgZGlyZWN0aW9uLCAnYXNjJyBieSBkZWZhdWx0LlxuICogQHBhcmFtIG51bGxzRmlyc3RcbiAqIEByZXR1cm5zIEEgY29tcGFyYXRvciBjb21wYXRpYmxlIHdpdGggYEFycmF5LnByb3RvdHlwZS5zb3J0YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5UGF0aENvbXBhcmF0b3I8VCA9IGFueT4oXG4gIHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLFxuICBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnID0gJ2FzYycsXG4gIG51bGxzRmlyc3Q/OiBib29sZWFuXG4pOiAoYTogVCwgYjogVCkgPT4gbnVtYmVyIHtcbiAgbnVsbHNGaXJzdCA9IG51bGxzRmlyc3QgPz8gZGlyZWN0aW9uID09ICdkZXNjJztcbiAgY29uc3QgY29tcGFyZUZuID0gZGlyZWN0aW9uID09PSAnYXNjJyA/IGNvbXBhcmVWYWx1ZXMgOiBjb21wYXJlVmFsdWVzRGVzYztcbiAgcmV0dXJuIChhOiBULCBiOiBUKSA9PiB7XG4gICAgY29uc3QgdmFsdWVBID0gZ2V0UHJvcGVydHlCeVBhdGgoYSwgcGF0aCk7XG4gICAgY29uc3QgdmFsdWVCID0gZ2V0UHJvcGVydHlCeVBhdGgoYiwgcGF0aCk7XG4gICAgaWYgKHZhbHVlQSA9PSBudWxsICYmIHZhbHVlQiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICBpZiAodmFsdWVBID09IG51bGwpIHJldHVybiBudWxsc0ZpcnN0ID8gLTEgOiAxO1xuICAgIGlmICh2YWx1ZUIgPT0gbnVsbCkgcmV0dXJuIG51bGxzRmlyc3QgPyAxIDogLTE7XG4gICAgcmV0dXJuIGNvbXBhcmVGbih2YWx1ZUEsIHZhbHVlQik7XG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgYSBjb21wYXJhdG9yIGJhc2VkIG9uIGEgZGlyZWN0IHByb3BlcnR5IG9mIHRoZSBjb21wYXJlZCBvYmplY3RzLlxuICpcbiAqIEZhbGxzIGJhY2sgdG8gYGRlZmF1bHRWYWx1ZWAgd2hlbiB0aGUgcHJvcGVydHkgaXMgYHVuZGVmaW5lZGAgb24gYW4gaXRlbS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUeXBlIG9mIGNvbXBhcmVkIG9iamVjdHMuXG4gKiBAdHlwZVBhcmFtIEsgLSBLZXkgb2YgdGhlIHByb3BlcnR5IGluIGBUYC5cbiAqIEBwYXJhbSBwcm9wZXJ0eSAtIFByb3BlcnR5IG5hbWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSBkaXJlY3Rpb24gLSBTb3J0IGRpcmVjdGlvbiwgJ2FzYycgYnkgZGVmYXVsdC5cbiAqIEBwYXJhbSBudWxsc0ZpcnN0IC0gSWYgdHJ1ZSwgbmlsIHZhbHVlcyBhcmUgcGxhY2VkIGZpcnN0LCBlbHNlIGxhc3QuIEJ5IGRlZmF1bHQsICdmYWxzZScgaWYgZGlyZWN0aW9uPSdhc2MnLCAndHJ1ZScgaWYgZGlyZWN0aW9uPSdkZXNjJ1xuICogQHJldHVybnMgQSBjb21wYXJhdG9yIGNvbXBhdGlibGUgd2l0aCBgQXJyYXkucHJvdG90eXBlLnNvcnRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlDb21wYXJhdG9yPFQgPSBhbnksIEsgZXh0ZW5kcyBrZXlvZiBUID0gYW55PihcbiAgcHJvcGVydHk6IEssXG4gIGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJyxcbiAgbnVsbHNGaXJzdD86IGJvb2xlYW5cbik6IChhOiBULCBiOiBUKSA9PiBudW1iZXIge1xuICBudWxsc0ZpcnN0ID0gbnVsbHNGaXJzdCA/PyBkaXJlY3Rpb24gPT09ICdkZXNjJztcbiAgY29uc3QgY29tcGFyZUZuID0gZGlyZWN0aW9uID09PSAnYXNjJyA/IGNvbXBhcmVWYWx1ZXMgOiBjb21wYXJlVmFsdWVzRGVzYztcbiAgcmV0dXJuIChhOiBULCBiOiBUKSA9PiB7XG4gICAgY29uc3QgdmFsdWVBID0gYVtwcm9wZXJ0eV07XG4gICAgY29uc3QgdmFsdWVCID0gYltwcm9wZXJ0eV07XG4gICAgaWYgKHZhbHVlQSA9PSBudWxsICYmIHZhbHVlQiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICBpZiAodmFsdWVBID09IG51bGwpIHJldHVybiBudWxsc0ZpcnN0ID8gLTEgOiAxO1xuICAgIGlmICh2YWx1ZUIgPT0gbnVsbCkgcmV0dXJuIG51bGxzRmlyc3QgPyAxIDogLTE7XG4gICAgcmV0dXJuIGNvbXBhcmVGbih2YWx1ZUEsIHZhbHVlQik7XG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgYSBjb21wYXJhdG9yIHVzaW5nIG11bHRpcGxlIHByb3BlcnR5IHBhdGhzIGFzIHRpZS1icmVha2Vycy5cbiAqXG4gKiBFYWNoIGtleSBpbiBga2V5c2AgaXMgcmVzb2x2ZWQgdmlhIHtAbGluayBnZXRQcm9wZXJ0eUJ5UGF0aH0uIFRoZSBmaXJzdFxuICogbm9uLXplcm8gY29tcGFyaXNvbiByZXN1bHQgaXMgcmV0dXJuZWQuIElmIHByb3ZpZGVkLCBgZGVmYXVsdFZhbHVlc1tpXWBcbiAqIGlzIHVzZWQgd2hlbiBhIHZhbHVlIGF0IGBrZXlzW2ldYCBpcyB1bmRlZmluZWQuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVHlwZSBvZiBjb21wYXJlZCBvYmplY3RzLlxuICogQHBhcmFtIGtleXMgLSBPcmRlcmVkIGxpc3Qgb2YgcHJvcGVydHkgcGF0aHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSBkaXJlY3Rpb24gLSBTb3J0IGRpcmVjdGlvbiBhcHBsaWVkIHRvIGVhY2gga2V5LCAnYXNjJyBieSBkZWZhdWx0LlxuICogQHBhcmFtIG51bGxzRmlyc3QgLSBPcHRpb25hbFxuICogQHRocm93cyBFcnJvciB3aGVuIGBrZXlzYCBpcyBlbXB0eSBvciB3aGVuIGBkZWZhdWx0VmFsdWVzYCBsZW5ndGggaXMgaW52YWxpZC5cbiAqIEByZXR1cm5zIEEgY29tcGFyYXRvciBjb21wYXRpYmxlIHdpdGggYEFycmF5LnByb3RvdHlwZS5zb3J0YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNQYXRoQ29tcGFyYXRvcjxUID0gYW55PihrZXlzOiBzdHJpbmdbXSwgZGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyA9ICdhc2MnLCBudWxsc0ZpcnN0PzogYm9vbGVhbik6IChhOiBULCBiOiBUKSA9PiBudW1iZXIge1xuICBpZiAoaXNFbXB0eUFycmF5KGtleXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudHM6IG1pc3NpbmcgJ2tleXMnIG9yIGFycmF5ICdkZWZhdWx0VmFsdWVzJyBoYXMgYSBiYWQgbGVuZ3RoXCIpO1xuICB9XG4gIG51bGxzRmlyc3QgPSBudWxsc0ZpcnN0ID8/IGRpcmVjdGlvbiA9PT0gJ2Rlc2MnO1xuICBjb25zdCBjb21wYXJlRm4gPSBkaXJlY3Rpb24gPT09ICdhc2MnID8gY29tcGFyZVZhbHVlcyA6IGNvbXBhcmVWYWx1ZXNEZXNjO1xuICByZXR1cm4gKGE6IFQsIGI6IFQpID0+XG4gICAga2V5c1xuICAgICAgLm1hcCgoa2V5LCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZUEgPSBnZXRQcm9wZXJ0eUJ5UGF0aChhLCBrZXkpO1xuICAgICAgICBjb25zdCB2YWx1ZUIgPSBnZXRQcm9wZXJ0eUJ5UGF0aChiLCBrZXkpO1xuICAgICAgICBpZiAodmFsdWVBID09IG51bGwgJiYgdmFsdWVCID09IG51bGwpIHJldHVybiAwO1xuICAgICAgICBpZiAodmFsdWVBID09IG51bGwpIHJldHVybiBudWxsc0ZpcnN0ID8gLTEgOiAxO1xuICAgICAgICBpZiAodmFsdWVCID09IG51bGwpIHJldHVybiBudWxsc0ZpcnN0ID8gMSA6IC0xO1xuICAgICAgICByZXR1cm4gY29tcGFyZUZuKHZhbHVlQSwgdmFsdWVCKTtcbiAgICAgIH0pXG4gICAgICAvLyBTdG9wIGlmIG5vdCBlcXVhbHMsIG90aGVyd2lzZSBjb250aW51ZSB3aXRoIHRoZSBuZXh0IGtleVxuICAgICAgLmZpbmQoKHJlcykgPT4gcmVzICE9PSAwKSB8fCAwO1xufVxuXG4vKipcbiAqIENvbXBvc2UgYSBjb21wYXJhdG9yIGZyb20gbXVsdGlwbGUgY29tcGFyYXRvcnMgKG11bHRpLWxldmVsIHNvcnQpLlxuICpcbiAqIEVhY2ggY29tcGFyYXRvciBpcyBhcHBsaWVkIHNlcXVlbnRpYWxseS4gVGhlIGZpcnN0IG5vbi16ZXJvIHJlc3VsdCBpc1xuICogcmV0dXJuZWQsIGFsbG93aW5nIHlvdSB0byBkZWZpbmUgcHJpbWFyeSwgc2Vjb25kYXJ5LCB0ZXJ0aWFyeSBjcml0ZXJpYSwgZXRjLlxuICogSWYgYWxsIGNvbXBhcmF0b3JzIHJldHVybiAwLCB0aGUgaXRlbXMgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUeXBlIG9mIHRoZSBjb21wYXJlZCBpdGVtcy5cbiAqIEBwYXJhbSBjb21wYXJhdG9ycyAtIExpc3Qgb2YgY29tcGFyYXRvciBmdW5jdGlvbnMgdG8gYXBwbHkgaW4gb3JkZXIuXG4gKiBAcmV0dXJucyBBIGNvbXBhcmF0b3IgY29tcGF0aWJsZSB3aXRoIGBBcnJheS5wcm90b3R5cGUuc29ydGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlQ29tcGFyYXRvcnM8VD4oLi4uY29tcGFyYXRvcnM6IEFycmF5PChhOiBULCBiOiBUKSA9PiBudW1iZXI+KTogKGE6IFQsIGI6IFQpID0+IG51bWJlciB7XG4gIHJldHVybiAoYTogVCwgYjogVCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICBjb21wYXJhdG9yc1xuICAgICAgICA/Lm1hcCgoY29tcGFyYXRvcikgPT4gY29tcGFyYXRvcihhLCBiKSlcbiAgICAgICAgLy8gU3RvcCBpZiBub3QgZXF1YWxzLCBvdGhlcndpc2UgY29udGludWUgd2l0aCB0aGUgbmV4dCBrZXlcbiAgICAgICAgLmZpbmQoKHJlcykgPT4gcmVzICE9PSAwKSB8fCAwXG4gICAgKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvcnQ8VD4oYXJyYXk6IFRbXSwgYXR0cmlidXRlPzogc3RyaW5nLCBvcHRzPzogSW50bC5Db2xsYXRvck9wdGlvbnMpOiBUW10ge1xuICBpZiAoaXNFbXB0eUFycmF5KGFycmF5KSkgcmV0dXJuIGFycmF5O1xuICBjb25zdCBjb21wYXJlRm46IChhOiBhbnksIGI6IGFueSkgPT4gbnVtYmVyID0gb3B0cyA/IG5ldyBJbnRsLkNvbGxhdG9yKHVuZGVmaW5lZCwgb3B0cykuY29tcGFyZSA6ICh2MSwgdjIpID0+ICh2MSA9PT0gdjIgPyAwIDogdjEgPiB2MiA/IDEgOiAtMSk7XG4gIHJldHVybiBhcnJheVxuICAgIC5zbGljZSgpIC8vIGNvcHlcbiAgICAuc29ydChhdHRyaWJ1dGUgPyAoYSwgYikgPT4gY29tcGFyZUZuKGFbYXR0cmlidXRlXSwgYlthdHRyaWJ1dGVdKSA6IGNvbXBhcmVGbik7XG59XG5jb25zdCBJTlRFR0VSX1JFR0VYUCA9IC9eWy1dP1xcZCskLztcbmV4cG9ydCBmdW5jdGlvbiBpc0ludCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgJiYgSU5URUdFUl9SRUdFWFAudGVzdCh2YWx1ZSk7XG59XG5jb25zdCBOVU1CRVJfUkVHRVhQID0gL15bLV0/XFxkKyhcXC5cXGQrKT8kLztcbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgJiYgTlVNQkVSX1JFR0VYUC50ZXN0KHZhbHVlKTtcbn1cblxuY29uc3QgTlVNQkVSX1JBTkdFX1JFR0VYUCA9IC9eKFxcZCstXFxkKyl8KFs+PD1dKlxcZCspJC87XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXJSYW5nZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgJiYgTlVNQkVSX1JBTkdFX1JFR0VYUC50ZXN0KHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3BlcnR5QnlQYXRoKG9iajogYW55LCBwYXRoOiBzdHJpbmcgfCBBcnJheTxzdHJpbmcgfCBudW1iZXI+LCBkZWZhdWx0VmFsdWU/OiBhbnkpOiBhbnkge1xuICBpZiAoaXNOaWwob2JqKSkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgLy8gUGF0aCBpcyBhbiBhcnJheTogY29udmVydCBwYXRoIHRvIHN0cmluZ1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXRoKSkge1xuICAgIHJldHVybiBnZXRQcm9wZXJ0eUJ5UGF0aChvYmosIHBhdGguam9pbignLicpLCBkZWZhdWx0VmFsdWUpO1xuICB9XG4gIGlmIChpc05pbE9yQmxhbmsocGF0aCkpIHJldHVybiBvYmo7XG4gIGlmIChwYXRoLmluZGV4T2YoJ1snKSAhPT0gLTEpIHtcbiAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9bLl0/XFxbKFteXFxbXFxdXSopXShbLl0pPy8sICcuJDEkMicpO1xuICB9XG4gIGNvbnN0IGkgPSBwYXRoLmluZGV4T2YoJy4nKTtcbiAgLy8gU2ltcGxlIHByb3BlcnR5IHBhdGhcbiAgaWYgKGkgPT09IC0xKSB7XG4gICAgY29uc3QgcmVzID0gb2JqW3BhdGhdO1xuICAgIHJldHVybiBpc05vdE5pbChyZXMpIHx8IGlzTmlsKGRlZmF1bHRWYWx1ZSkgPyByZXMgOiBkZWZhdWx0VmFsdWU7XG4gIH1cbiAgLy8gQ29tcGxleCBwcm9wZXJ0eSBwYXRoXG4gIGNvbnN0IG9wdGlvbmFsID0gcGF0aC5jaGFyQXQoaSAtIDEpID09PSAnPyc7XG4gIGNvbnN0IGtleSA9IHBhdGguc3Vic3RyaW5nKDAsIG9wdGlvbmFsID8gaSAtIDEgOiBpKTtcbiAgaWYgKGlzTmlsKG9ialtrZXldKSkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBPYmplY3Qgb3IgQXJyYXlcbiAgICAvLyBSZWN1cnNpdmUgY2FsbFxuICAgIHJldHVybiBnZXRQcm9wZXJ0eUJ5UGF0aChvYmpba2V5XSwgcGF0aC5zdWJzdHJpbmcoaSArIDEpKTtcbiAgfVxuICBpZiAob3B0aW9uYWwpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwcm9wZXJ0eSBwYXRoOiAnJHtrZXl9JyBpcyBub3QgYW4gdmFsaWQgb2JqZWN0LmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvcGVydHk8VCA9IGFueSwgSyBleHRlbmRzIGtleW9mIFQgPSBhbnk+KG9iajogVCwga2V5OiBLKTogVFtLXSB7XG4gIGlmIChpc05pbChvYmopKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gb2JqW2tleV07IC8vIEluZmVycmVkIHR5cGUgaXMgVFtLXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvcGVydHlCeVBhdGhBc1N0cmluZyhvYmo6IGFueSwgcGF0aDogc3RyaW5nIHwgc3RyaW5nW10sIGRlZmF1bHRWYWx1ZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJlcyA9IGdldFByb3BlcnR5QnlQYXRoKG9iaiwgcGF0aCwgZGVmYXVsdFZhbHVlKTtcbiAgcmV0dXJuIHR5cGVvZiByZXMgPT09ICdzdHJpbmcnID8gcmVzIDogaXNOaWwocmVzKSA/IHJlcyA6ICcnICsgcmVzO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhbiBvYmplY3QncyBwcm9wZXJ0eSwgdXNpbmcgYSBwYXRoIChsaWtlICc8cHJvcGVydHlfMT4uPHN1Yl9wcm9wZXJ0eV8xPicpXG4gKiBAcGFyYW0gb2JqXG4gKiBAcGFyYW0gcGF0aFxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuIHRoZSBnaXZlbiBvYmpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5QnlQYXRoPFQgPSBhbnk+KG9iajogVCwgcGF0aDogc3RyaW5nIHwgc3RyaW5nW10sIHZhbHVlOiBhbnkpOiBUIHtcbiAgLy8gUGF0aCBpcyBhbiBhcnJheTogY29udmVydCBwYXRoIHRvIHN0cmluZ1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXRoKSkge1xuICAgIHJldHVybiBzZXRQcm9wZXJ0eUJ5UGF0aChvYmosIHBhdGguam9pbignLicpLCB2YWx1ZSk7XG4gIH1cbiAgaWYgKGlzTmlsKG9iaikpIHJldHVybiBvYmo7IC8vIFNraXBcbiAgY29uc3QgaSA9IHBhdGguaW5kZXhPZignLicpO1xuICAvLyBTaW1wbGUgcHJvcGVydHkgcGF0aFxuICBpZiAoaSA9PT0gLTEpIHtcbiAgICBvYmpbcGF0aF0gPSB2YWx1ZTtcbiAgICByZXR1cm4gb2JqO1xuICB9XG4gIGNvbnN0IGtleSA9IHBhdGguc3Vic3RyaW5nKDAsIGkpO1xuICBpZiAoaXNOaWwob2JqW2tleV0pKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAob2JqW2tleV0gJiYgdHlwZW9mIG9ialtrZXldID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBzZXRQcm9wZXJ0eUJ5UGF0aChvYmpba2V5XSwgcGF0aC5zdWJzdHJpbmcoaSArIDEpLCB2YWx1ZSk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZvcm0gcGF0aDogJyR7a2V5fScgaXMgbm90IGFuIHZhbGlkIG9iamVjdC5gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKG1zIDw9IDApIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb21pc2U8VD4odmFsdWU6IFQgfCBQcm9taXNlPFQ+KTogdmFsdWUgaXMgUHJvbWlzZTxUPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWU/LlsndGhlbiddID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZT8uWydjYXRjaCddID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIFJvdW5kcyBhIG51bWVyaWMgdmFsdWUgdG8gJ25iRGVjaW1hbCcgZGVjaW1hbCBwbGFjZXMuXG4gKlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSByb3VuZGVkLiBDYW4gYmUgYSBudW1iZXIsIHVuZGVmaW5lZCwgb3IgbnVsbC5cbiAqIEBwYXJhbSBuYkRlY2ltYWwgdGhlIG51bWJlciBvZiBkZWNpbWFsIChkZWZhdWx0OiAyKVxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgcm91bmRlZCB2YWx1ZSB3aXRoIHR3byBkZWNpbWFsIHBsYWNlcyBpZiB0aGUgaW5wdXQgdmFsdWUgaXMgYSB2YWxpZCBudW1iZXI7IG90aGVyd2lzZSwgcmV0dXJucyB0aGUgaW5wdXQgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3VuZCh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbCwgbmJEZWNpbWFsPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKGlzTm90TmlsT3JOYU4oK3ZhbHVlKSkge1xuICAgIG5iRGVjaW1hbCA9IG5iRGVjaW1hbCA/PyAyO1xuICAgIGNvbnN0IGZhY3RvciA9IE1hdGgucG93KDEwLCBuYkRlY2ltYWwpO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKCgrdmFsdWUgKyBOdW1iZXIuRVBTSUxPTikgKiBmYWN0b3IpIC8gZmFjdG9yO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsc09yTmlsKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSkge1xuICByZXR1cm4gdmFsdWUxID09PSB2YWx1ZTIgfHwgKGlzTmlsKHZhbHVlMSkgJiYgaXNOaWwodmFsdWUyKSk7XG59XG5cbi8qKlxuICogcmVtb3ZlIGVsZW1lbnRzIGZyb20gYW4gYXJyYXlcbiAqXG4gKiBAcmV0dXJuIHRoZSByZW1vdmVkIGVsZW1lbnRzXG4gKiBAcGFyYW0gYXJyYXkgdGhlIGFycmF5IG9uIHdoaWNoIGVsZW1lbnRzIHdpbGwgYmUgcmVtb3ZlZFxuICogQHBhcmFtIHByZWRpY2F0ZSB0aGUgc2VsZWN0aW9uIHByZWRpY2F0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQWxsPFQ+KGFycmF5OiBUW10sIHByZWRpY2F0ZTogKHZhbHVlOiBUKSA9PiBib29sZWFuKTogVFtdIHtcbiAgbGV0IG5iUmVtb3ZlID0gMDtcbiAgcmV0dXJuIGFycmF5XG4gICAgLnNsaWNlKClcbiAgICAubWFwKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICAgIG5iUmVtb3ZlKys7IC8vIGdsaXRjaCBjb3VudGVyIHRvIGF2b2lkIGluZGV4IGdhcFxuICAgICAgICByZXR1cm4gYXJyYXkuc3BsaWNlKGluZGV4IC0gbmJSZW1vdmUgKyAxLCAxKVswXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pXG4gICAgLmZpbHRlcihpc05vdE5pbCk7XG59XG5cbi8qKlxuICogcmVtb3ZlIHRoZSBmaXJzdCBlbGVtZW50IGZyb20gYW4gYXJyYXlcbiAqXG4gKiBAcmV0dXJuIHRoZSByZW1vdmVkIGVsZW1lbnRcbiAqIEBwYXJhbSBhcnJheSB0aGUgYXJyYXkgb24gd2hpY2ggdGhlIGVsZW1lbnQgd2lsbCBiZSByZW1vdmVkXG4gKiBAcGFyYW0gcHJlZGljYXRlIHRoZSBzZWxlY3Rpb24gcHJlZGljYXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmU8VD4oYXJyYXk6IFRbXSwgcHJlZGljYXRlOiAodmFsdWU6IFQpID0+IGJvb2xlYW4pOiBUIHtcbiAgcmV0dXJuIGFycmF5LnNsaWNlKCkuZmluZCgodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGFycmF5LnNwbGljZShpbmRleCwgMSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcGl0YWxpemVGaXJzdExldHRlcih2YWx1ZTogc3RyaW5nKSB7XG4gIGlmICghdmFsdWUgfHwgdmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm4gdmFsdWU7XG4gIHJldHVybiB2YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbHVlLnN1YnN0cmluZygxKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB1bmNhcGl0YWxpemVGaXJzdExldHRlcih2YWx1ZTogc3RyaW5nKSB7XG4gIGlmICghdmFsdWUgfHwgdmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm4gdmFsdWU7XG4gIHJldHVybiB2YWx1ZS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHZhbHVlLnN1YnN0cmluZygxKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBib29sZWFuVG9TdHJpbmcodmFsdWU6IGFueSwgb3B0czogeyB5ZXNMYWJlbDogc3RyaW5nOyBub0xhYmVsOiBzdHJpbmcgfSA9IHsgeWVzTGFiZWw6ICdDT01NT04uWUVTJywgbm9MYWJlbDogJ0NPTU1PTi5OTycgfSkge1xuICBpZiAoaXNOaWwodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gdmFsdWUgPT09IDEgfHwgdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09ICd0cnVlJyA/IG9wdHMueWVzTGFiZWwgOiBvcHRzLm5vTGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdEJ5UHJvcGVydHk8VCwgTSBleHRlbmRzIEtleVZhbHVlVHlwZTxUPiA9IEtleVZhbHVlVHlwZTxUPj4oYXJyYXk6IFRbXSB8IHJlYWRvbmx5IFRbXSwgcHJvcGVydHlOYW1lOiBrZXlvZiBUIHwgc3RyaW5nKTogTSB7XG4gIHJldHVybiAoYXJyYXkgfHwgW10pLnJlZHVjZSgocmVzLCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IGtleSA9ICh2YWx1ZSBhcyB1bmtub3duIGFzIGFueSk/Lltwcm9wZXJ0eU5hbWVdO1xuICAgIGlmIChpc05vdE5pbChrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9LCB7fSkgYXMgTTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0QnlJZDxULCBNIGV4dGVuZHMgS2V5VmFsdWVUeXBlPFQ+ID0gS2V5VmFsdWVUeXBlPFQ+PihhcnJheTogVFtdIHwgcmVhZG9ubHkgVFtdKTogTSB7XG4gIHJldHVybiAoYXJyYXkgfHwgW10pLnJlZHVjZShcbiAgICAocmVzLCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdmFsdWU/LlsnaWQnXTtcbiAgICAgIGlmIChpc05vdE5pbChrZXkpKSB7XG4gICAgICAgIHJlc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgPE0+e31cbiAgKTtcbn1cblxuLyoqXG4gKiBTcGxpdCBhbiBhcnJheSwgaW50byBhIG1hcCBvZiBhcnJheSwgZ3JvdXAgYnkgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RCeVByb3BlcnR5PFQ+KHZhbHVlczogVFtdLCBwcm9wZXJ0eU5hbWU6IGtleW9mIFQsIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bWJlcik6IEtleVZhbHVlVHlwZTxUW10+IHtcbiAgcmV0dXJuICh2YWx1ZXMgfHwgW10pLnJlZHVjZShcbiAgICAocmVzLCBpdGVtKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBpdGVtPy5bcHJvcGVydHlOYW1lXSA/PyBkZWZhdWx0VmFsdWU7XG4gICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmVzW2tleV0gPSByZXNba2V5XSB8fCBbXTtcbiAgICAgICAgcmVzW2tleV0ucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICA8S2V5VmFsdWVUeXBlPFRbXT4+e31cbiAgKTtcbn1cblxuXG4vKipcbiAqIFNwbGl0IGFuIGFycmF5LCBpbnRvIGEgbWFwIG9mIGFycmF5LCBncm91cCBieSBwcm9wZXJ0eSBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0QnlQcm9wZXJ0eVBhdGg8VD4odmFsdWVzOiBUW10sIHByb3BlcnR5UGF0aDogc3RyaW5nIHwgQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiwgZGVmYXVsdFZhbHVlPzogc3RyaW5nIHwgbnVtYmVyKTogS2V5VmFsdWVUeXBlPFRbXT4ge1xuICByZXR1cm4gKHZhbHVlcyB8fCBbXSkucmVkdWNlKFxuICAgIChyZXMsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGdldFByb3BlcnR5QnlQYXRoKGl0ZW0sIHByb3BlcnR5UGF0aCwgZGVmYXVsdFZhbHVlKTtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnbnVtYmVyJyB8fCB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXNba2V5XSA9IHJlc1trZXldIHx8IFtdO1xuICAgICAgICByZXNba2V5XS5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuICAgIDxLZXlWYWx1ZVR5cGU8VFtdPj57fVxuICApO1xufVxuXG5cbi8qKlxuICogU3BsaXQgYW4gYXJyYXkgaW50byBjaHVua3Mgd2l0aCBmaXhlZCBzaXplXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdEFycmF5SW5DaHVua3M8VCA9IGFueT4odmFsdWU6IFRbXSwgY2h1bmtTaXplOiBudW1iZXIpOiBUW11bXSB7XG4gIGlmICghdmFsdWU/Lmxlbmd0aCkgcmV0dXJuIFtdO1xuICBpZiAoY2h1bmtTaXplID09PSAtMSkgcmV0dXJuIFt2YWx1ZV07IC8vIE9ubHkgb25lIHBhZ2VcbiAgaWYgKCFjaHVua1NpemUgfHwgaXNOYU4oY2h1bmtTaXplKSB8fCBjaHVua1NpemUgPCAxKSB7XG4gICAgdGhyb3cgJ1tzcGxpdEFycmF5SW5DaHVua3NdIE51bWJlciBvZiByb3cgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciAhJztcbiAgfVxuICBpZiAodmFsdWUubGVuZ3RoIDw9IGNodW5rU2l6ZSkge1xuICAgIHJldHVybiBbdmFsdWVdO1xuICB9XG4gIGxldCBsZW5ndGggPSBNYXRoLnJvdW5kKHZhbHVlLmxlbmd0aCAvIGNodW5rU2l6ZSArIDAuNSk7XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IChsZW5ndGggLSAxKSAqIGNodW5rU2l6ZSkge1xuICAgIGxlbmd0aCA9IGxlbmd0aCAtIDE7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzdGFydCA9IGkgKiBjaHVua1NpemU7XG4gICAgY29uc3QgZW5kID0gTWF0aC5taW4odmFsdWUubGVuZ3RoLCBzdGFydCArIGNodW5rU2l6ZSk7XG4gICAgcmVzdWx0W2ldID0gdmFsdWUuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHR3byBvYmplY3RzIG9yIHR3byB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogVHdvIG9iamVjdHMgb3IgdmFsdWVzIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgaWYgYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAqXG4gKiAqIEJvdGggb2JqZWN0cyBvciB2YWx1ZXMgcGFzcyBgPT09YCBjb21wYXJpc29uLlxuICogKiBCb3RoIG9iamVjdHMgb3IgdmFsdWVzIGFyZSBvZiB0aGUgc2FtZSB0eXBlIGFuZCBhbGwgb2YgdGhlaXIgcHJvcGVydGllcyBhcmUgZXF1YWwgYnlcbiAqICAgY29tcGFyaW5nIHRoZW0gd2l0aCBgZXF1YWxzYC5cbiAqXG4gKiBAcGFyYW0gbzEgT2JqZWN0IG9yIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0gbzIgT2JqZWN0IG9yIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB0cnVlIGlmIGFyZ3VtZW50cyBhcmUgZXF1YWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMobzE6IGFueSwgbzI6IGFueSk6IGJvb2xlYW4ge1xuICBpZiAobzEgPT09IG8yKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKG8xID09PSBudWxsIHx8IG8yID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChvMSAhPT0gbzEgJiYgbzIgIT09IG8yKSByZXR1cm4gdHJ1ZTsgLy8gTmFOID09PSBOYU5cbiAgY29uc3QgdDEgPSB0eXBlb2YgbzE7XG4gIGNvbnN0IHQyID0gdHlwZW9mIG8yO1xuICBsZXQgbGVuZ3RoOiBudW1iZXI7XG4gIGxldCBrZXk6IGFueTtcbiAgbGV0IGtleVNldDogYW55O1xuICBpZiAodDEgPT09IHQyICYmIHQxID09PSAnb2JqZWN0Jykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG8xKSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG8yKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKChsZW5ndGggPSBvMS5sZW5ndGgpID09PSBvMi5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChrZXkgPSAwOyBrZXkgPCBsZW5ndGg7IGtleSsrKSB7XG4gICAgICAgICAgaWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobzIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGtleVNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ3VhcmQtZm9yLWluXG4gICAgICBmb3IgKGtleSBpbiBvMSkge1xuICAgICAgICBpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBrZXlTZXRba2V5XSA9IHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGtleSBpbiBvMikge1xuICAgICAgICBpZiAoIShrZXkgaW4ga2V5U2V0KSAmJiB0eXBlb2YgbzJba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmNvbnN0IF9jbG9uZSA9IHVud3JhcEVTTW9kdWxlPHR5cGVvZiBjbG9uZUltcG9ydGVkPihjbG9uZUltcG9ydGVkKTtcblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBCZWFucyB7XG4gIC8qKlxuICAgKiBEZWVwIGNsb25lLlxuICAgKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3B2b3JiL2Nsb25lXG4gICAqL1xuICBzdGF0aWMgY2xvbmUgPSBfY2xvbmU7XG5cbiAgLyoqXG4gICAqIENvcHkgYSBzb3VyY2Ugb2JqZWN0LCBieSBpbmNsdWRpbmcgb25seSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlbiBkYXRhVHlwZS5cbiAgICogSU1QT1JUQU5UOiBleHRyYSBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBpbiB0aGUgdGFyZ2V0Q2xhc3MgYXJlIE5PVCBjb3BpZWQuXG4gICAqXG4gICAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QgdG8gY29weVxuICAgKiBAcGFyYW0gZGF0YVR5cGUgdGhlIGNsYXNzIHRvIHVzZSBhcyB0YXJnZXQgY2xhc3NcbiAgICogQHBhcmFtIGtleXMgVGhlIGtleXMgdG8gY29weS4gSWYgZW1wdHksIHdpbGwgY29weSBvbmx5IE5PVCBvcHRpb25hbCBwcm9wZXJ0aWVzIGZyb20gdGhlIGRhdGFUeXBlXG4gICAqL1xuICBzdGF0aWMgY29weTxUPihzb3VyY2U6IFQsIGRhdGFUeXBlOiBuZXcgKCkgPT4gVCwga2V5cz86IEtleXNFbnVtPFQ+KTogVCB7XG4gICAgaWYgKGlzTmlsKHNvdXJjZSkpIHJldHVybiBzb3VyY2U7XG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IGRhdGFUeXBlKCk7XG4gICAgT2JqZWN0LmtleXMoa2V5cyB8fCB0YXJnZXQpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNheXMgaWYgYW4gb2JqZWN0IGFsbCBhbGwgcHJvcGVydGllcyB0byBuaWxcbiAgICovXG4gIHN0YXRpYyBpc0VtcHR5PFQ+KFxuICAgIGRhdGE6IFQsXG4gICAga2V5cz86IEtleXNFbnVtPFQ+IHwgc3RyaW5nW10sXG4gICAgb3B0cz86IHtcbiAgICAgIGJsYW5rU3RyaW5nTGlrZUVtcHR5PzogYm9vbGVhbjtcbiAgICB9XG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBpc05pbChkYXRhKSB8fFxuICAgICAgKEFycmF5LmlzQXJyYXkoa2V5cykgPyBrZXlzIDogT2JqZWN0LmtleXMoa2V5cyB8fCBkYXRhKSlcbiAgICAgICAgLy8gRmluZCBpbmRleCBvZiB0aGUgZmlyc3QgTk9UIG5pbCB2YWx1ZVxuICAgICAgICAuZmluZEluZGV4KChrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgcmV0dXJuICFCZWFucy5pc0VtcHR5KHZhbHVlLCBudWxsLCBvcHRzKTsgLy8gTG9vcFxuICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMuYmxhbmtTdHJpbmdMaWtlRW1wdHkgPT09IHRydWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIGlzTm90TmlsT3JCbGFuayh2YWx1ZSk7XG4gICAgICAgICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKTtcbiAgICAgICAgfSkgPT09IC0xXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBjb2xsZWN0QnlJZDxUPihhcnJheTogVFtdKTogS2V5VmFsdWVUeXBlPFRbXT4ge1xuICAgIHJldHVybiBjb2xsZWN0QnlQcm9wZXJ0eShhcnJheSwgJ2lkJyBhcyBrZXlvZiBUKTtcbiAgfVxuXG4gIHN0YXRpYyBjb2xsZWN0QnlQcm9wZXJ0eSA9IGNvbGxlY3RCeVByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFBhcmVudFdpdGhDbGFzcyhlbGVtOiBIVE1MRWxlbWVudCwgY2xhc3NOYW1lOiBzdHJpbmcpOiBIVE1MRWxlbWVudCB7XG4gIGlmICghY2xhc3NOYW1lKSByZXR1cm4gdW5kZWZpbmVkO1xuICBsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtPy5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAoY3VycmVudEVsZW1lbnQpIHtcbiAgICBpZiAoY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHJldHVybiBjdXJyZW50RWxlbWVudDtcbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludGVyc2VjdEFycmF5czxUID0gYW55Pih2YWx1ZXM6IFRbXVtdKTogVFtdIHtcbiAgaWYgKGlzRW1wdHlBcnJheSh2YWx1ZXMpKSByZXR1cm4gW107XG5cbiAgLy8gVXRpbGlzZSBsYSBtw6l0aG9kZSByZWR1Y2UgcG91ciBvYnRlbmlyIGwnaW50ZXJzZWN0aW9uIGRlcyB0YWJsZWF1eFxuICByZXR1cm4gdmFsdWVzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MuZmlsdGVyKCh4KSA9PiBjdXJyLmluY2x1ZGVzKHgpKSwgdmFsdWVzWzBdLnNsaWNlKCkpO1xufVxuXG4vKipcbiAqIEludGVycG9sYXRlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgcGxhY2Vob2xkZXJzIHdpdGggY29ycmVzcG9uZGluZyB2YWx1ZXMgZnJvbSB0aGUgcHJvdmlkZWQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIHN0cmluZyBjb250YWluaW5nIHBsYWNlaG9sZGVycyBlbmNsb3NlZCBpbiBkb3VibGUgY3VybHkgYnJhY2VzIChlLmcuLCB7e2tleX19KS5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gaW50ZXJwb2xhdGVQYXJhbXMgLSBBbiBvYmplY3QgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnMgZm9yIGludGVycG9sYXRpb24uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnRlcnBvbGF0ZWQgc3RyaW5nIHdpdGggcGxhY2Vob2xkZXJzIHJlcGxhY2VkIGJ5IGNvcnJlc3BvbmRpbmcgdmFsdWVzLCBvciB0aGUgb3JpZ2luYWwgc3RyaW5nIGlmIG5vIHBsYWNlaG9sZGVycyBhcmUgbWF0Y2hlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVycG9sYXRlU3RyaW5nKG1lc3NhZ2U6IHN0cmluZywgaW50ZXJwb2xhdGVQYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBzdHJpbmcge1xuICBpZiAoaXNOaWxPckJsYW5rKG1lc3NhZ2UpKSByZXR1cm4gbWVzc2FnZTtcblxuICByZXR1cm4gbWVzc2FnZS5yZXBsYWNlKC97eyhbXn1dKyl9fS9nLCAobWF0Y2g6IHN0cmluZywgcGF0aDogc3RyaW5nKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSBnZXRQcm9wZXJ0eUJ5UGF0aEFzU3RyaW5nKGludGVycG9sYXRlUGFyYW1zLCBwYXRoLnRyaW0oKSk7XG4gICAgICByZXR1cm4gcGFyYW1WYWx1ZSB8fCAnJztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBVbmFibGUgdG8gYmluZCBhbiBleHByZXNzaW9uOlxcblxcdC0gbWVzc2FnZTogJHttZXNzYWdlfVxcblxcdC0gZXhwcmVzc2lvbjogJHttYXRjaH1gKTtcbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqXG4gKiBUcmFuc2Zvcm1zIGEgdmFsdWUgKHR5cGljYWxseSBhIHN0cmluZykgdG8gYSBudW1iZXIuXG4gKiBJbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIG9mIGFuIGlucHV0LlxuICogU2hvdWxkIHJldHVybiBuPXVuZGVmaW5lZCB3aGVuIGZvciBhIG5pbCBpbnB1dFxuICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIGJlIHRyYW5zZm9ybWVkLlxuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgVmFsdWUgdG8gdXNlIGlmIHRoZSBwcm92aWRlZCB2YWx1ZSBjYW4ndCBiZSBwYXJzZWQgYXMgYSBudW1iZXIuXG4gKlxuICogIEB1c2FnZU5vdGVzXG4gKiAgYGBgdHNcbiAqICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBpZCE6IG51bWJlcjtcbiAqICBgYGBcbiAqXG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJPck5pbEF0dHJpYnV0ZSh2YWx1ZTogdW5rbm93biwgZmFsbGJhY2tWYWx1ZSA9IE5hTik6IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIHZhbHVlIGFzIHVuZGVmaW5lZCB8IG51bGw7XG4gIC8vIHBhcnNlRmxvYXQodmFsdWUpIGhhbmRsZXMgbW9zdCBvZiB0aGUgY2FzZXMgd2UncmUgaW50ZXJlc3RlZCBpbiAoaXQgdHJlYXRzIG51bGwsIGVtcHR5IHN0cmluZyxcbiAgLy8gYW5kIG90aGVyIG5vbi1udW1iZXIgdmFsdWVzIGFzIE5hTiwgd2hlcmUgTnVtYmVyIGp1c3QgdXNlcyAwKSBidXQgaXQgY29uc2lkZXJzIHRoZSBzdHJpbmdcbiAgLy8gJzEyM2hlbGxvJyB0byBiZSBhIHZhbGlkIG51bWJlci4gVGhlcmVmb3JlIHdlIGFsc28gY2hlY2sgaWYgTnVtYmVyKHZhbHVlKSBpcyBOYU4uXG4gIGNvbnN0IGlzTnVtYmVyVmFsdWUgPSAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSBhcyBhbnkpKSAmJiAhaXNOYU4oTnVtYmVyKHZhbHVlKSk7XG4gIHJldHVybiBpc051bWJlclZhbHVlID8gTnVtYmVyKHZhbHVlKSA6IGZhbGxiYWNrVmFsdWU7XG59XG5cbi8qKlxuICogRm9ybWF0cyBhIGdpdmVuIG51bWJlciBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgLSBUaGUgbnVtYmVyIHRvIGJlIGZvcm1hdHRlZC5cbiAqIEBwYXJhbSB7SW50bC5OdW1iZXJGb3JtYXRPcHRpb25zICYgeyBmaXhlZERlY2ltYWxzPzogbnVtYmVyIH19IFtvcHRzXSAtIEFuIG9wdGlvbmFsIG9iamVjdCBjb250YWluaW5nIGZvcm1hdHRpbmcgb3B0aW9ucy4gSXQgY2FuIGluY2x1ZGUgc3RhbmRhcmQgYEludGwuTnVtYmVyRm9ybWF0T3B0aW9uc2AgcHJvcGVydGllcyBhbmQgYW4gYWRkaXRpb25hbCBgZml4ZWREZWNpbWFsc2AgcHJvcGVydHkgdG8gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGZpeGVkIGRlY2ltYWwgcGxhY2VzLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIG51bWJlciBhcyBhIHN0cmluZywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJUb1N0cmluZyh2YWw6IG51bWJlciwgb3B0cz86IEludGwuTnVtYmVyRm9ybWF0T3B0aW9ucyAmIHsgZml4ZWREZWNpbWFscz86IG51bWJlciB9KTogc3RyaW5nIHtcbiAgLy8gRm9ybWF0IHRoZSBvdXRwdXQgdG8gZGlzcGxheSBhbnkgd2F5IHlvdSB3YW50IGhlcmUuXG4gIGlmICh2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwgJiYgIWlzTmFOKHZhbCkpIHtcbiAgICBpZiAob3B0cz8uZml4ZWREZWNpbWFscykge1xuICAgICAgcmV0dXJuIHZhbC50b0ZpeGVkKG9wdHMuZml4ZWREZWNpbWFscyk7XG4gICAgfVxuICAgIHJldHVybiB2YWwudG9Mb2NhbGVTdHJpbmcodW5kZWZpbmVkLCBvcHRzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVU2UgYXNzaWduU2tpcFVuZGVmaW5lZCBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU9iamVjdHNXaXRob3V0VW5kZWZpbmVkKC4uLm9iamVjdHM6IHVua25vd25bXSk6IHVua25vd24ge1xuICByZXR1cm4gYXNzaWduU2tpcFVuZGVmaW5lZCh7fSwgLi4ub2JqZWN0cyk7XG59XG5cbi8qKlxuICogTWVyZ2VzIG11bHRpcGxlIG9iamVjdHMgaW50byBvbmUsIHNraXBwaW5nIHByb3BlcnRpZXMgd2l0aCBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gKlxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIHsuLi51bmtub3duW119IHNvdXJjZXMgLSBUaGUgb2JqZWN0cyB0byBiZSBtZXJnZWQuXG4gKiBAcmV0dXJuIHt1bmtub3dufSBBIG5ldyBvYmplY3QgdGhhdCBjb21iaW5lcyB0aGUgcHJvcGVydGllcyBvZiB0aGUgcHJvdmlkZWQgb2JqZWN0cywgZXhjbHVkaW5nIGB1bmRlZmluZWRgIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnblNraXBVbmRlZmluZWQodGFyZ2V0OiB1bmtub3duLCAuLi5zb3VyY2VzOiB1bmtub3duW10pOiB1bmtub3duIHtcbiAgaWYgKCFzb3VyY2VzKSByZXR1cm4gdGFyZ2V0O1xuICBpZiAoIXRhcmdldCkgcmV0dXJuIGFzc2lnblNraXBVbmRlZmluZWQoc291cmNlc1swXSwgLi4uc291cmNlcy5zbGljZSgxKSk7XG4gIHJldHVybiBzb3VyY2VzLnJlZHVjZSgoYWNjLCBvYmopID0+IHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIGFjYztcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIC8vIFJlY3Vyc2l2ZSBjYWxsXG4gICAgICAgICAgYWNjW2tleV0gPSBhc3NpZ25Ta2lwVW5kZWZpbmVkKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHRhcmdldCk7XG59XG4iXX0=
825
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxhQUFhLE1BQU0sT0FBTyxDQUFDO0FBRXZDLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFM0MsTUFBTSxVQUFVLEtBQUssQ0FBSSxHQUF5QjtJQUNoRCxPQUFPLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQztBQUMzQyxDQUFDO0FBQ0QsTUFBTSxVQUFVLFlBQVksQ0FBSSxHQUF5QjtJQUN2RCxPQUFPLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDN0YsQ0FBQztBQUNELE1BQU0sVUFBVSxRQUFRLENBQUksR0FBeUI7SUFDbkQsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFDM0MsQ0FBQztBQUNELE1BQU0sVUFBVSxlQUFlLENBQUksR0FBeUI7SUFDMUQsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzdGLENBQUM7QUFDRCxNQUFNLFVBQVUsYUFBYSxDQUFJLEdBQXlCO0lBQ3hELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFH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QW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNqQyxJQUFJLENBQUMsR0FBRztZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQ3JCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDL0MsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3hCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzlCLGlCQUFpQjtvQkFDakIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDbkIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2xvbmVJbXBvcnRlZCBmcm9tICdjbG9uZSc7XG5pbXBvcnQgeyBLZXlzRW51bSwgS2V5VmFsdWVUeXBlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBERUZBVUxUX0pPSU5fUFJPUEVSVElFU19TRVBBUkFUT1IgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBSZWdFeHBVdGlscyB9IGZyb20gJy4vcmVnZXhwcyc7XG5pbXBvcnQgeyB1bndyYXBFU01vZHVsZSB9IGZyb20gJy4vbW9kdWxlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05pbDxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOaWxPckJsYW5rPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCB8fCAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycgJiYgb2JqLnRyaW0oKSA9PT0gJycpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TmlsPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE5pbE9yQmxhbms8VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsICYmICh0eXBlb2Ygb2JqICE9PSAnc3RyaW5nJyB8fCBvYmoudHJpbSgpICE9PSAnJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROaWxPck5hTjxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgJiYgKHR5cGVvZiBvYmogIT09ICdudW1iZXInIHx8ICFpc05hTihvYmopKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05pbE9yTmFOPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCB8fCAodHlwZW9mIG9iaiA9PT0gJ251bWJlcicgJiYgaXNOYU4ob2JqKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOb3RFbXB0eUFycmF5PFQ+KG9iajogVFtdIHwgcmVhZG9ubHkgVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsICYmIG9iai5sZW5ndGggPiAwO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0QXJyYXlWYWx1ZTxUPihvYmo6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGlzTm90RW1wdHlBcnJheShvYmopID8gb2JqWzBdIDogdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGxhc3RBcnJheVZhbHVlPFQ+KG9iajogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFQgfCB1bmRlZmluZWQge1xuICByZXR1cm4gaXNOb3RFbXB0eUFycmF5KG9iaikgPyBvYmpbb2JqLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHlBcnJheTxUPihvYmo6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCB8fCAhb2JqLmxlbmd0aDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhcnJheVJlc2l6ZTxUPihhcnJheTogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCwgc2l6ZTogbnVtYmVyLCBkZWZhdWx0VmFsdWU/OiBUKTogVFtdIHtcbiAgaWYgKHNpemUgPCAwKSB0aHJvdyBuZXcgRXJyb3IoXCJBcmd1bWVudCAnc2l6ZScgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclwiKTtcbiAgaWYgKCFhcnJheSkgcmV0dXJuIG5ld0FycmF5KHNpemUsIGRlZmF1bHRWYWx1ZSk7XG5cbiAgLy8gUmVkdWNlIHNpemVcbiAgaWYgKGFycmF5Lmxlbmd0aCA+IHNpemUpIHtcbiAgICByZXR1cm4gYXJyYXkuc2xpY2UoMCwgc2l6ZSk7XG4gIH1cbiAgLy8gSW5jcmVhc2Ugc2l6ZVxuICBlbHNlIGlmIChhcnJheS5sZW5ndGggPCBzaXplKSB7XG4gICAgcmV0dXJuIFsuLi5hcnJheSwgLi4ubmV3QXJyYXkoc2l6ZSAtIGFycmF5Lmxlbmd0aCwgZGVmYXVsdFZhbHVlKV07XG4gIH1cblxuICByZXR1cm4gYXJyYXk7XG59XG5leHBvcnQgZnVuY3Rpb24gbmV3QXJyYXk8VD4oc2l6ZTogbnVtYmVyLCBkZWZhdWx0VmFsdWU/OiBUKTogVFtdIHtcbiAgaWYgKHNpemUgPCAwKSB0aHJvdyBuZXcgRXJyb3IoXCJBcmd1bWVudCAnc2l6ZScgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclwiKTtcbiAgcmV0dXJuIG5ldyBBcnJheShzaXplKS5maWxsKGRlZmF1bHRWYWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROaWxCb29sZWFuKG9iajogYW55IHwgbnVsbCB8IHVuZGVmaW5lZCk6IG9iaiBpcyBib29sZWFuIHtcbiAgcmV0dXJuIChvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ2Jvb2xlYW4nKSB8fCBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE5pbFN0cmluZyhvYmo6IGFueSB8IG51bGwgfCB1bmRlZmluZWQpOiBvYmogaXMgc3RyaW5nIHtcbiAgcmV0dXJuIChvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHx8IGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TmlsT2JqZWN0KG9iajogYW55IHwgbnVsbCB8IHVuZGVmaW5lZCk6IG9iaiBpcyBvYmplY3Qge1xuICByZXR1cm4gKG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JykgfHwgZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCbGFua1N0cmluZyhvYmo6IGFueSB8IG51bGwgfCB1bmRlZmluZWQpOiBvYmogaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdzdHJpbmcnICYmIG9iai50cmltKCkubGVuZ3RoID09PSAwO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vdE5pbE9yRGVmYXVsdDxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkLCBkZWZhdWx0VmFsdWU6IFQpOiBUIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCA/IG9iaiA6IGRlZmF1bHRWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhcnJheVNpemU8VD4ob2JqOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgcmV0dXJuIChpc05vdEVtcHR5QXJyYXkob2JqKSAmJiBvYmoubGVuZ3RoKSB8fCAwO1xufVxuXG4vKipcbiAqIFJlbW92ZSBkdXBsaWNhdGVkIHZhbHVlLCBpbiBhcnJheS4gV2lsbCBjb21wdXRlIGEgdW5pcXVlIGtleSAoZnJvbSBnaXZlbiBwcm9wZXJ0aWVzLCBvciBnaXZlbiBmdW5jdGlvbikuXG4gKiBJZiBwcm9wZXJ0aWVzT3JLZXlGbiBpcyBuaWwgb3IgdW5kZWZpbmVkLCB3aWxsIHVzZSBhbGwgb2JqZWN0IHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0gdmFsdWVzXG4gKiBAcGFyYW0gcHJvcGVydGllc09yS2V5Rm5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFycmF5RGlzdGluY3Q8VCA9IGFueT4odmFsdWVzOiBUW10sIHByb3BlcnRpZXNPcktleUZuPzogc3RyaW5nIHwgc3RyaW5nW10gfCAoKG9iajogVCkgPT4gc3RyaW5nKSk6IFRbXSB7XG4gIGlmIChpc0VtcHR5QXJyYXkodmFsdWVzKSkgcmV0dXJuIHZhbHVlcztcbiAgY29uc3QgcHJvcGVydGllczogc3RyaW5nW10gPSAoIXByb3BlcnRpZXNPcktleUZuICYmIE9iamVjdC5rZXlzKHZhbHVlc1swXSkpIHx8IChBcnJheS5pc0FycmF5KHByb3BlcnRpZXNPcktleUZuKSAmJiBwcm9wZXJ0aWVzT3JLZXlGbik7XG4gIGNvbnN0IGdldEtleTogKG9iajogVCkgPT4gc3RyaW5nID1cbiAgICAodHlwZW9mIHByb3BlcnRpZXNPcktleUZuID09PSAnZnVuY3Rpb24nICYmIHByb3BlcnRpZXNPcktleUZuKSB8fFxuICAgICh0eXBlb2YgcHJvcGVydGllc09yS2V5Rm4gPT09ICdzdHJpbmcnICYmICgob2JqKSA9PiBnZXRQcm9wZXJ0eUJ5UGF0aEFzU3RyaW5nKG9iaiwgcHJvcGVydGllc09yS2V5Rm4pKSkgfHxcbiAgICAoaXNFbXB0eUFycmF5KHByb3BlcnRpZXMpICYmICgob2JqKSA9PiBvYmo/LnRvU3RyaW5nKCkpKSB8fFxuICAgICgob2JqKSA9PiBqb2luUHJvcGVydGllc1BhdGgob2JqLCBwcm9wZXJ0aWVzLCAnfCcpKTtcbiAgY29uc3QgZXhpc3RpbmdJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoKHJlcywgaXRlbSkgPT4ge1xuICAgIGNvbnN0IHVuaXF1ZUtleSA9IGdldEtleShpdGVtKTtcbiAgICBpZiAoZXhpc3RpbmdJZHMuaGFzKHVuaXF1ZUtleSkpIHJldHVybiByZXM7IC8vIFNraXAgaWYgZHVwbGljYXRlXG4gICAgZXhpc3RpbmdJZHMuYWRkKHVuaXF1ZUtleSk7XG4gICAgcmV0dXJuIHJlcy5jb25jYXQoaXRlbSk7XG4gIH0sIFtdKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBudWxsSWZVbmRlZmluZWQ8VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFQgfCBudWxsIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG9iajtcbn1cbmV4cG9ydCBmdW5jdGlvbiBudWxsSWZOaWxPckJsYW5rPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBUIHwgbnVsbCB7XG4gIHJldHVybiBpc05pbE9yQmxhbmsob2JqKSA/IG51bGwgOiBvYmo7XG59XG5leHBvcnQgZnVuY3Rpb24gdW5kZWZpbmVkSWZOdWxsPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iajtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0cmltRW1wdHlUb051bGw8VD4oc3RyOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHZhbHVlID0gKHN0ciAmJiBzdHIudHJpbSgpKSB8fCB1bmRlZmluZWQ7XG4gIHJldHVybiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoICYmIHZhbHVlKSB8fCBudWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvQm9vbGVhbihvYmo6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkIHwgc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgPyAob2JqICE9PSAnZmFsc2UnID8gISFvYmogOiBmYWxzZSkgOiBkZWZhdWx0VmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9OdW1iZXIob2JqOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkIHwgc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gaXNOb3ROaWxPck5hTihvYmopID8gK29iaiA6IGRlZmF1bHRWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b0Zsb2F0KG9iajogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlPzogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgPyBwYXJzZUZsb2F0KG9iaikgOiBkZWZhdWx0VmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9JbnQob2JqOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBkZWZhdWx0VmFsdWU/OiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCA/IHBhcnNlSW50KG9iaiwgMCkgOiBkZWZhdWx0VmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9Ob3ROaWw8VCA9IGFueT4ob2JqOiBULCBkZWZhdWx0VmFsdWU/OiBUKTogYW55IHwgbnVsbCB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgPyBvYmogOiBkZWZhdWx0VmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRHVwbGljYXRlc0Zyb21BcnJheTxUPihvYmo6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQsIHByb3BlcnR5Pzogc3RyaW5nKTogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gIGlmIChpc0VtcHR5QXJyYXkob2JqKSkgcmV0dXJuIG9iajtcbiAgaWYgKHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIG9iai5maWx0ZXIoKGl0ZW0sIGksIGFycmF5KSA9PiBhcnJheS5maW5kSW5kZXgoKHQpID0+IHQgJiYgaXRlbSAmJiB0W3Byb3BlcnR5XSA9PT0gaXRlbVtwcm9wZXJ0eV0pID09PSBpKTtcbiAgfVxuICByZXR1cm4gb2JqLmZpbHRlcigoaXRlbSwgaSwgYXJyYXkpID0+IGFycmF5LmZpbmRJbmRleCgodCkgPT4gdCAmJiBpdGVtICYmIHQgPT09IGl0ZW0pID09PSBpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0c1dpdGhVcHBlckNhc2UoaW5wdXQ6IHN0cmluZywgc2VhcmNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlucHV0Py50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgoc2VhcmNoKSB8fCBmYWxzZTtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgUmVnZXhwcy5tYXRjaFVwcGVyQ2FzZSBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBjb25zdCBtYXRjaFVwcGVyQ2FzZSA9IFJlZ0V4cFV0aWxzLm1hdGNoVXBwZXJDYXNlO1xuXG4vKipcbiAqIFJlbW92ZSB0cmFpbGluZyBzbGFzaCBpZiBhbnkuIEV4YW1wbGVzIDpcbiAqIC0gJy90ZXN0LycgLT4gJy90ZXN0J1xuICogLSAnLycgLT4gdW5kZWZpbmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub1RyYWlsaW5nU2xhc2gocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFwYXRoIHx8IHBhdGgudHJpbSgpID09PSAnLycpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChwYXRoLnRyaW0oKS5sYXN0SW5kZXhPZignLycpID09PSBwYXRoLmxlbmd0aCAtIDEpIHJldHVybiBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxlbmd0aCAtIDEpO1xuICByZXR1cm4gcGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VBbGwodmFsdWU6IHN0cmluZywgc2VhcmNoU3RyaW5nOiBhbnksIHJlcGxhY2VtZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgd2hpbGUgKHZhbHVlICYmIHZhbHVlLmluZGV4T2Yoc2VhcmNoU3RyaW5nKSAhPT0gLTEpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2Uoc2VhcmNoU3RyaW5nLCByZXBsYWNlbWVudCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHZhbHVlOiBzdHJpbmcpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVuZCh2YWx1ZTogc3RyaW5nLCBlbmQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZT8uZW5kc1dpdGgoZW5kIHx8ICcnKSA/IHZhbHVlLnN1YnN0cigwLCB2YWx1ZS5sZW5ndGggLSBlbmQubGVuZ3RoKSA6IHZhbHVlO1xufVxuXG4vKipcbiAqIFJlcGxhY2UgY2FzZSBjaGFuZ2UgYnkgYW4gdW5kZXJzY29yZSAoLmUuZyAnbXlTdHJpbmcnIGJlY29tZXMgJ215X3N0cmluZycpXG4gKlxuICogQHBhcmFtIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoaXNOaWxPckJsYW5rKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICByZXR1cm4gdmFsdWUucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgJyQxXyQyJykudG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlIHVuZGVyc2NvcmUgYnkgYSBjaGFuZ2UgY2FzZSAoLmUuZyAnTVlfU1RSSU5HJyBiZWNvbWVzICdNeVN0cmluZycpXG4gKlxuICogQHBhcmFtIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmRlcnNjb3JlVG9DaGFuZ2VDYXNlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoaXNOaWxPckJsYW5rKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICByZXR1cm4gdmFsdWVcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5zcGxpdCgnXycpXG4gICAgLmZpbHRlcihpc05vdE5pbE9yQmxhbmspXG4gICAgLm1hcCgoc3RyLCBpbmRleCkgPT4gKGluZGV4ID09PSAwID8gc3RyIDogY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHN0cikpKVxuICAgIC5qb2luKCcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURpYWNyaXRpY3ModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWdnZXN0RnJvbVN0cmluZ0FycmF5KHZhbHVlczogc3RyaW5nW10sIHNlYXJjaFRleHQ6IGFueSwgb3B0cz86IHsgYW55U2VhcmNoPzogYm9vbGVhbiB9KTogc3RyaW5nW10ge1xuICBzZWFyY2hUZXh0ID0gKHR5cGVvZiBzZWFyY2hUZXh0ID09PSAnc3RyaW5nJyAmJiBzZWFyY2hUZXh0ICE9PSAnKicgJiYgc2VhcmNoVGV4dCkgfHwgdW5kZWZpbmVkO1xuICBsZXQgY2xlYW5TZWFyY2hUZXh0ID0gUmVnRXhwVXRpbHMuY2xlYW5TZWFyY2hUZXh0KHNlYXJjaFRleHQgYXMgc3RyaW5nKTtcbiAgaWYgKCFjbGVhblNlYXJjaFRleHQ/Lmxlbmd0aCkgcmV0dXJuIHZhbHVlcztcblxuICAvLyBJZiB3aWxkY2FyZCwgc2VhcmNoIHVzaW5nIHJlZ2V4cFxuICBpZiAob3B0cz8uYW55U2VhcmNoIHx8IFJlZ0V4cFV0aWxzLmhhc1dpbGRjYXJkQ2hhcmFjdGVyKGNsZWFuU2VhcmNoVGV4dCkpIHtcbiAgICBjb25zdCByZWdleHAgPSBSZWdFeHBVdGlscy5jb21waWxlU2VhcmNoUmVnZXhwKGNsZWFuU2VhcmNoVGV4dCwgJ2dpJyk7XG4gICAgcmV0dXJuIHZhbHVlcy5maWx0ZXIoKHYpID0+IFJlZ0V4cFV0aWxzLm1hdGNoKHYsIHJlZ2V4cCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIG5vIHdpbGRjYXJkLCBzZWFyY2ggdXNpbmcgc3RhcnRzV2l0aFxuICAgIGNsZWFuU2VhcmNoVGV4dCA9IGNsZWFuU2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKCh2KSA9PiBzdGFydHNXaXRoVXBwZXJDYXNlKHYsIGNsZWFuU2VhcmNoVGV4dCkpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqb2luUHJvcGVydGllc1BhdGg8VCA9IGFueT4ob2JqOiBULCBwcm9wZXJ0aWVzOiBzdHJpbmdbXSwgc2VwYXJhdG9yPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvYmopIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGRpc3BsYXkgYW4gdW5kZWZpbmVkIGVudGl0eS4nKTtcbiAgaWYgKGlzRW1wdHlBcnJheShwcm9wZXJ0aWVzKSkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBvciBlbXB0eSAncHJvcGVydGllcycgYXJndW1lbnRcIik7XG4gIHJldHVybiBwcm9wZXJ0aWVzXG4gICAgLm1hcCgocGF0aCkgPT4gZ2V0UHJvcGVydHlCeVBhdGgob2JqLCBwYXRoKSlcbiAgICAuZmlsdGVyKGlzTm90TmlsT3JCbGFuaylcbiAgICAuam9pbihzZXBhcmF0b3IgfHwgREVGQVVMVF9KT0lOX1BST1BFUlRJRVNfU0VQQVJBVE9SKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGpvaW5Qcm9wZXJ0aWVzPFQgPSBhbnksIEsgZXh0ZW5kcyBrZXlvZiBUID0gYW55PihvYmo6IFQsIGtleXM6IEtbXSwgc2VwYXJhdG9yPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvYmopIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGRpc3BsYXkgYW4gdW5kZWZpbmVkIGVudGl0eS4nKTtcbiAgcmV0dXJuIGtleXNcbiAgICAubWFwKChrZXkpID0+IGdldFByb3BlcnR5KG9iaiwga2V5KSlcbiAgICAuZmlsdGVyKGlzTm90TmlsT3JCbGFuaylcbiAgICAuam9pbihzZXBhcmF0b3IgfHwgREVGQVVMVF9KT0lOX1BST1BFUlRJRVNfU0VQQVJBVE9SKTtcbn1cblxuLyoqXG4gKiBHZW5lcmljIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzLlxuICpcbiAqIENvbXBhcmVzIHR3byB2YWx1ZXMgdXNpbmcgdGhlIEphdmFTY3JpcHQgZ3JlYXRlci10aGFuIG9wZXJhdG9yLlxuICogV29ya3MgZm9yIG51bWJlcnMsIHN0cmluZ3MsIGRhdGVzLCBhbmQgYW55IHR5cGVzIHRoYXQgcHJvdmlkZVxuICogYSBtZWFuaW5nZnVsIGA+YCBjb21wYXJpc29uLiBVc2UgZm9yIGFzY2VuZGluZyBvcmRlci5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUeXBlIG9mIHRoZSBjb21wYXJlZCB2YWx1ZXMuXG4gKiBAcGFyYW0gYSAtIExlZnQgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSBiIC0gUmlnaHQgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIDAgaWYgZXF1YWwsIC0xIGlmIGEgPCBiLCAxIGlmIGEgPiBiLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZVZhbHVlczxUPihhOiBULCBiOiBUKTogbnVtYmVyIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiAwO1xuICByZXR1cm4gYSA+IGIgPyAxIDogLTE7XG59XG5cbi8qKlxuICogUmV2ZXJzZSBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyAoZGVzY2VuZGluZyBvcmRlcikuXG4gKlxuICogU2FtZSBzZW1hbnRpY3MgYXMge0BsaW5rIGNvbXBhcmVWYWx1ZXN9IGJ1dCBpbnZlcnRlZCwgdG8gc29ydFxuICogaW4gZGVzY2VuZGluZyBvcmRlci5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUeXBlIG9mIHRoZSBjb21wYXJlZCB2YWx1ZXMuXG4gKiBAcGFyYW0gYSAtIExlZnQgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSBiIC0gUmlnaHQgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIDAgaWYgZXF1YWwsIDEgaWYgYSA8IGIsIC0xIGlmIGEgPiBiLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZVZhbHVlc0Rlc2M8VD4oYTogVCwgYjogVCk6IG51bWJlciB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gMDtcbiAgcmV0dXJuIGEgPiBiID8gLTEgOiAxO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgY29tcGFyYXRvciBmdW5jdGlvbiBiYXNlZCBvbiBhIG5lc3RlZCBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIFVzZXMge0BsaW5rIGdldFByb3BlcnR5QnlQYXRofSB0byBleHRyYWN0IHZhbHVlcyBhbmQgY29tcGFyZXMgdGhlbVxuICogaW4gYXNjZW5kaW5nIG9yIGRlc2NlbmRpbmcgb3JkZXIuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVHlwZSBvZiBjb21wYXJlZCBvYmplY3RzLlxuICogQHBhcmFtIHBhdGggLSBQcm9wZXJ0eSBwYXRoIG9yIGFycmF5IHBhdGggKGUuZy4gXCJhLmJbMF0uY1wiKS5cbiAqIEBwYXJhbSBkaXJlY3Rpb24gLSBTb3J0IGRpcmVjdGlvbiwgJ2FzYycgYnkgZGVmYXVsdC5cbiAqIEBwYXJhbSBudWxsc0ZpcnN0XG4gKiBAcmV0dXJucyBBIGNvbXBhcmF0b3IgY29tcGF0aWJsZSB3aXRoIGBBcnJheS5wcm90b3R5cGUuc29ydGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVBhdGhDb21wYXJhdG9yPFQgPSBhbnk+KFxuICBwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgZGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyA9ICdhc2MnLFxuICBudWxsc0ZpcnN0PzogYm9vbGVhblxuKTogKGE6IFQsIGI6IFQpID0+IG51bWJlciB7XG4gIG51bGxzRmlyc3QgPSBudWxsc0ZpcnN0ID8/IGRpcmVjdGlvbiA9PSAnZGVzYyc7XG4gIGNvbnN0IGNvbXBhcmVGbiA9IGRpcmVjdGlvbiA9PT0gJ2FzYycgPyBjb21wYXJlVmFsdWVzIDogY29tcGFyZVZhbHVlc0Rlc2M7XG4gIHJldHVybiAoYTogVCwgYjogVCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlQSA9IGdldFByb3BlcnR5QnlQYXRoKGEsIHBhdGgpO1xuICAgIGNvbnN0IHZhbHVlQiA9IGdldFByb3BlcnR5QnlQYXRoKGIsIHBhdGgpO1xuICAgIGlmICh2YWx1ZUEgPT0gbnVsbCAmJiB2YWx1ZUIgPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgaWYgKHZhbHVlQSA9PSBudWxsKSByZXR1cm4gbnVsbHNGaXJzdCA/IC0xIDogMTtcbiAgICBpZiAodmFsdWVCID09IG51bGwpIHJldHVybiBudWxsc0ZpcnN0ID8gMSA6IC0xO1xuICAgIHJldHVybiBjb21wYXJlRm4odmFsdWVBLCB2YWx1ZUIpO1xuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgY29tcGFyYXRvciBiYXNlZCBvbiBhIGRpcmVjdCBwcm9wZXJ0eSBvZiB0aGUgY29tcGFyZWQgb2JqZWN0cy5cbiAqXG4gKiBGYWxscyBiYWNrIHRvIGBkZWZhdWx0VmFsdWVgIHdoZW4gdGhlIHByb3BlcnR5IGlzIGB1bmRlZmluZWRgIG9uIGFuIGl0ZW0uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVHlwZSBvZiBjb21wYXJlZCBvYmplY3RzLlxuICogQHR5cGVQYXJhbSBLIC0gS2V5IG9mIHRoZSBwcm9wZXJ0eSBpbiBgVGAuXG4gKiBAcGFyYW0gcHJvcGVydHkgLSBQcm9wZXJ0eSBuYW1lIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0gZGlyZWN0aW9uIC0gU29ydCBkaXJlY3Rpb24sICdhc2MnIGJ5IGRlZmF1bHQuXG4gKiBAcGFyYW0gbnVsbHNGaXJzdCAtIElmIHRydWUsIG5pbCB2YWx1ZXMgYXJlIHBsYWNlZCBmaXJzdCwgZWxzZSBsYXN0LiBCeSBkZWZhdWx0LCAnZmFsc2UnIGlmIGRpcmVjdGlvbj0nYXNjJywgJ3RydWUnIGlmIGRpcmVjdGlvbj0nZGVzYydcbiAqIEByZXR1cm5zIEEgY29tcGFyYXRvciBjb21wYXRpYmxlIHdpdGggYEFycmF5LnByb3RvdHlwZS5zb3J0YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5Q29tcGFyYXRvcjxUID0gYW55LCBLIGV4dGVuZHMga2V5b2YgVCA9IGFueT4oXG4gIHByb3BlcnR5OiBLLFxuICBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnID0gJ2FzYycsXG4gIG51bGxzRmlyc3Q/OiBib29sZWFuXG4pOiAoYTogVCwgYjogVCkgPT4gbnVtYmVyIHtcbiAgbnVsbHNGaXJzdCA9IG51bGxzRmlyc3QgPz8gZGlyZWN0aW9uID09PSAnZGVzYyc7XG4gIGNvbnN0IGNvbXBhcmVGbiA9IGRpcmVjdGlvbiA9PT0gJ2FzYycgPyBjb21wYXJlVmFsdWVzIDogY29tcGFyZVZhbHVlc0Rlc2M7XG4gIHJldHVybiAoYTogVCwgYjogVCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlQSA9IGFbcHJvcGVydHldO1xuICAgIGNvbnN0IHZhbHVlQiA9IGJbcHJvcGVydHldO1xuICAgIGlmICh2YWx1ZUEgPT0gbnVsbCAmJiB2YWx1ZUIgPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgaWYgKHZhbHVlQSA9PSBudWxsKSByZXR1cm4gbnVsbHNGaXJzdCA/IC0xIDogMTtcbiAgICBpZiAodmFsdWVCID09IG51bGwpIHJldHVybiBudWxsc0ZpcnN0ID8gMSA6IC0xO1xuICAgIHJldHVybiBjb21wYXJlRm4odmFsdWVBLCB2YWx1ZUIpO1xuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgY29tcGFyYXRvciB1c2luZyBtdWx0aXBsZSBwcm9wZXJ0eSBwYXRocyBhcyB0aWUtYnJlYWtlcnMuXG4gKlxuICogRWFjaCBrZXkgaW4gYGtleXNgIGlzIHJlc29sdmVkIHZpYSB7QGxpbmsgZ2V0UHJvcGVydHlCeVBhdGh9LiBUaGUgZmlyc3RcbiAqIG5vbi16ZXJvIGNvbXBhcmlzb24gcmVzdWx0IGlzIHJldHVybmVkLiBJZiBwcm92aWRlZCwgYGRlZmF1bHRWYWx1ZXNbaV1gXG4gKiBpcyB1c2VkIHdoZW4gYSB2YWx1ZSBhdCBga2V5c1tpXWAgaXMgdW5kZWZpbmVkLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFR5cGUgb2YgY29tcGFyZWQgb2JqZWN0cy5cbiAqIEBwYXJhbSBrZXlzIC0gT3JkZXJlZCBsaXN0IG9mIHByb3BlcnR5IHBhdGhzIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0gZGlyZWN0aW9uIC0gU29ydCBkaXJlY3Rpb24gYXBwbGllZCB0byBlYWNoIGtleSwgJ2FzYycgYnkgZGVmYXVsdC5cbiAqIEBwYXJhbSBudWxsc0ZpcnN0IC0gT3B0aW9uYWxcbiAqIEB0aHJvd3MgRXJyb3Igd2hlbiBga2V5c2AgaXMgZW1wdHkgb3Igd2hlbiBgZGVmYXVsdFZhbHVlc2AgbGVuZ3RoIGlzIGludmFsaWQuXG4gKiBAcmV0dXJucyBBIGNvbXBhcmF0b3IgY29tcGF0aWJsZSB3aXRoIGBBcnJheS5wcm90b3R5cGUuc29ydGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzUGF0aENvbXBhcmF0b3I8VCA9IGFueT4oa2V5czogc3RyaW5nW10sIGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJywgbnVsbHNGaXJzdD86IGJvb2xlYW4pOiAoYTogVCwgYjogVCkgPT4gbnVtYmVyIHtcbiAgaWYgKGlzRW1wdHlBcnJheShrZXlzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzOiBtaXNzaW5nICdrZXlzJyBvciBhcnJheSAnZGVmYXVsdFZhbHVlcycgaGFzIGEgYmFkIGxlbmd0aFwiKTtcbiAgfVxuICBudWxsc0ZpcnN0ID0gbnVsbHNGaXJzdCA/PyBkaXJlY3Rpb24gPT09ICdkZXNjJztcbiAgY29uc3QgY29tcGFyZUZuID0gZGlyZWN0aW9uID09PSAnYXNjJyA/IGNvbXBhcmVWYWx1ZXMgOiBjb21wYXJlVmFsdWVzRGVzYztcbiAgcmV0dXJuIChhOiBULCBiOiBUKSA9PlxuICAgIGtleXNcbiAgICAgIC5tYXAoKGtleSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWVBID0gZ2V0UHJvcGVydHlCeVBhdGgoYSwga2V5KTtcbiAgICAgICAgY29uc3QgdmFsdWVCID0gZ2V0UHJvcGVydHlCeVBhdGgoYiwga2V5KTtcbiAgICAgICAgaWYgKHZhbHVlQSA9PSBudWxsICYmIHZhbHVlQiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICAgICAgaWYgKHZhbHVlQSA9PSBudWxsKSByZXR1cm4gbnVsbHNGaXJzdCA/IC0xIDogMTtcbiAgICAgICAgaWYgKHZhbHVlQiA9PSBudWxsKSByZXR1cm4gbnVsbHNGaXJzdCA/IDEgOiAtMTtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVGbih2YWx1ZUEsIHZhbHVlQik7XG4gICAgICB9KVxuICAgICAgLy8gU3RvcCBpZiBub3QgZXF1YWxzLCBvdGhlcndpc2UgY29udGludWUgd2l0aCB0aGUgbmV4dCBrZXlcbiAgICAgIC5maW5kKChyZXMpID0+IHJlcyAhPT0gMCkgfHwgMDtcbn1cblxuLyoqXG4gKiBDb21wb3NlIGEgY29tcGFyYXRvciBmcm9tIG11bHRpcGxlIGNvbXBhcmF0b3JzIChtdWx0aS1sZXZlbCBzb3J0KS5cbiAqXG4gKiBFYWNoIGNvbXBhcmF0b3IgaXMgYXBwbGllZCBzZXF1ZW50aWFsbHkuIFRoZSBmaXJzdCBub24temVybyByZXN1bHQgaXNcbiAqIHJldHVybmVkLCBhbGxvd2luZyB5b3UgdG8gZGVmaW5lIHByaW1hcnksIHNlY29uZGFyeSwgdGVydGlhcnkgY3JpdGVyaWEsIGV0Yy5cbiAqIElmIGFsbCBjb21wYXJhdG9ycyByZXR1cm4gMCwgdGhlIGl0ZW1zIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVHlwZSBvZiB0aGUgY29tcGFyZWQgaXRlbXMuXG4gKiBAcGFyYW0gY29tcGFyYXRvcnMgLSBMaXN0IG9mIGNvbXBhcmF0b3IgZnVuY3Rpb25zIHRvIGFwcGx5IGluIG9yZGVyLlxuICogQHJldHVybnMgQSBjb21wYXJhdG9yIGNvbXBhdGlibGUgd2l0aCBgQXJyYXkucHJvdG90eXBlLnNvcnRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcG9zZUNvbXBhcmF0b3JzPFQ+KC4uLmNvbXBhcmF0b3JzOiBBcnJheTwoYTogVCwgYjogVCkgPT4gbnVtYmVyPik6IChhOiBULCBiOiBUKSA9PiBudW1iZXIge1xuICByZXR1cm4gKGE6IFQsIGI6IFQpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgY29tcGFyYXRvcnNcbiAgICAgICAgPy5tYXAoKGNvbXBhcmF0b3IpID0+IGNvbXBhcmF0b3IoYSwgYikpXG4gICAgICAgIC8vIFN0b3AgaWYgbm90IGVxdWFscywgb3RoZXJ3aXNlIGNvbnRpbnVlIHdpdGggdGhlIG5leHQga2V5XG4gICAgICAgIC5maW5kKChyZXMpID0+IHJlcyAhPT0gMCkgfHwgMFxuICAgICk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3J0PFQ+KGFycmF5OiBUW10sIGF0dHJpYnV0ZT86IHN0cmluZywgb3B0cz86IEludGwuQ29sbGF0b3JPcHRpb25zKTogVFtdIHtcbiAgaWYgKGlzRW1wdHlBcnJheShhcnJheSkpIHJldHVybiBhcnJheTtcbiAgY29uc3QgY29tcGFyZUZuOiAoYTogYW55LCBiOiBhbnkpID0+IG51bWJlciA9IG9wdHMgPyBuZXcgSW50bC5Db2xsYXRvcih1bmRlZmluZWQsIG9wdHMpLmNvbXBhcmUgOiAodjEsIHYyKSA9PiAodjEgPT09IHYyID8gMCA6IHYxID4gdjIgPyAxIDogLTEpO1xuICByZXR1cm4gYXJyYXlcbiAgICAuc2xpY2UoKSAvLyBjb3B5XG4gICAgLnNvcnQoYXR0cmlidXRlID8gKGEsIGIpID0+IGNvbXBhcmVGbihhW2F0dHJpYnV0ZV0sIGJbYXR0cmlidXRlXSkgOiBjb21wYXJlRm4pO1xufVxuY29uc3QgSU5URUdFUl9SRUdFWFAgPSAvXlstXT9cXGQrJC87XG5leHBvcnQgZnVuY3Rpb24gaXNJbnQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNOb3ROaWwodmFsdWUpICYmIElOVEVHRVJfUkVHRVhQLnRlc3QodmFsdWUpO1xufVxuY29uc3QgTlVNQkVSX1JFR0VYUCA9IC9eWy1dP1xcZCsoXFwuXFxkKyk/JC87XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNOb3ROaWwodmFsdWUpICYmIE5VTUJFUl9SRUdFWFAudGVzdCh2YWx1ZSk7XG59XG5cbmNvbnN0IE5VTUJFUl9SQU5HRV9SRUdFWFAgPSAvXihcXGQrLVxcZCspfChbPjw9XSpcXGQrKSQvO1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyUmFuZ2UodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNOb3ROaWwodmFsdWUpICYmIE5VTUJFUl9SQU5HRV9SRUdFWFAudGVzdCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0eUJ5UGF0aChvYmo6IGFueSwgcGF0aDogc3RyaW5nIHwgQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiwgZGVmYXVsdFZhbHVlPzogYW55KTogYW55IHtcbiAgaWYgKGlzTmlsKG9iaikpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIC8vIFBhdGggaXMgYW4gYXJyYXk6IGNvbnZlcnQgcGF0aCB0byBzdHJpbmdcbiAgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkpIHtcbiAgICByZXR1cm4gZ2V0UHJvcGVydHlCeVBhdGgob2JqLCBwYXRoLmpvaW4oJy4nKSwgZGVmYXVsdFZhbHVlKTtcbiAgfVxuICBpZiAoaXNOaWxPckJsYW5rKHBhdGgpKSByZXR1cm4gb2JqO1xuICBpZiAocGF0aC5pbmRleE9mKCdbJykgIT09IC0xKSB7XG4gICAgcGF0aCA9IHBhdGgucmVwbGFjZSgvWy5dP1xcWyhbXlxcW1xcXV0qKV0oWy5dKT8vLCAnLiQxJDInKTtcbiAgfVxuICBjb25zdCBpID0gcGF0aC5pbmRleE9mKCcuJyk7XG4gIC8vIFNpbXBsZSBwcm9wZXJ0eSBwYXRoXG4gIGlmIChpID09PSAtMSkge1xuICAgIGNvbnN0IHJlcyA9IG9ialtwYXRoXTtcbiAgICByZXR1cm4gaXNOb3ROaWwocmVzKSB8fCBpc05pbChkZWZhdWx0VmFsdWUpID8gcmVzIDogZGVmYXVsdFZhbHVlO1xuICB9XG4gIC8vIENvbXBsZXggcHJvcGVydHkgcGF0aFxuICBjb25zdCBvcHRpb25hbCA9IHBhdGguY2hhckF0KGkgLSAxKSA9PT0gJz8nO1xuICBjb25zdCBrZXkgPSBwYXRoLnN1YnN0cmluZygwLCBvcHRpb25hbCA/IGkgLSAxIDogaSk7XG4gIGlmIChpc05pbChvYmpba2V5XSkpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgLy8gT2JqZWN0IG9yIEFycmF5XG4gICAgLy8gUmVjdXJzaXZlIGNhbGxcbiAgICByZXR1cm4gZ2V0UHJvcGVydHlCeVBhdGgob2JqW2tleV0sIHBhdGguc3Vic3RyaW5nKGkgKyAxKSk7XG4gIH1cbiAgaWYgKG9wdGlvbmFsKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcHJvcGVydHkgcGF0aDogJyR7a2V5fScgaXMgbm90IGFuIHZhbGlkIG9iamVjdC5gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3BlcnR5PFQgPSBhbnksIEsgZXh0ZW5kcyBrZXlvZiBUID0gYW55PihvYmo6IFQsIGtleTogSyk6IFRbS10ge1xuICBpZiAoaXNOaWwob2JqKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIG9ialtrZXldOyAvLyBJbmZlcnJlZCB0eXBlIGlzIFRbS11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3BlcnR5QnlQYXRoQXNTdHJpbmcob2JqOiBhbnksIHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCByZXMgPSBnZXRQcm9wZXJ0eUJ5UGF0aChvYmosIHBhdGgsIGRlZmF1bHRWYWx1ZSk7XG4gIHJldHVybiB0eXBlb2YgcmVzID09PSAnc3RyaW5nJyA/IHJlcyA6IGlzTmlsKHJlcykgPyByZXMgOiAnJyArIHJlcztcbn1cblxuLyoqXG4gKiBVcGRhdGUgYW4gb2JqZWN0J3MgcHJvcGVydHksIHVzaW5nIGEgcGF0aCAobGlrZSAnPHByb3BlcnR5XzE+LjxzdWJfcHJvcGVydHlfMT4nKVxuICogQHBhcmFtIG9ialxuICogQHBhcmFtIHBhdGhcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybiB0aGUgZ2l2ZW4gb2JqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wZXJ0eUJ5UGF0aDxUID0gYW55PihvYmo6IFQsIHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCB2YWx1ZTogYW55KTogVCB7XG4gIC8vIFBhdGggaXMgYW4gYXJyYXk6IGNvbnZlcnQgcGF0aCB0byBzdHJpbmdcbiAgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkpIHtcbiAgICByZXR1cm4gc2V0UHJvcGVydHlCeVBhdGgob2JqLCBwYXRoLmpvaW4oJy4nKSwgdmFsdWUpO1xuICB9XG4gIGlmIChpc05pbChvYmopKSByZXR1cm4gb2JqOyAvLyBTa2lwXG4gIGNvbnN0IGkgPSBwYXRoLmluZGV4T2YoJy4nKTtcbiAgLy8gU2ltcGxlIHByb3BlcnR5IHBhdGhcbiAgaWYgKGkgPT09IC0xKSB7XG4gICAgb2JqW3BhdGhdID0gdmFsdWU7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuICBjb25zdCBrZXkgPSBwYXRoLnN1YnN0cmluZygwLCBpKTtcbiAgaWYgKGlzTmlsKG9ialtrZXldKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKG9ialtrZXldICYmIHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gc2V0UHJvcGVydHlCeVBhdGgob2JqW2tleV0sIHBhdGguc3Vic3RyaW5nKGkgKyAxKSwgdmFsdWUpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmb3JtIHBhdGg6ICcke2tleX0nIGlzIG5vdCBhbiB2YWxpZCBvYmplY3QuYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChtcyA8PSAwKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9taXNlPFQ+KHZhbHVlOiBUIHwgUHJvbWlzZTxUPik6IHZhbHVlIGlzIFByb21pc2U8VD4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlPy5bJ3RoZW4nXSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWU/LlsnY2F0Y2gnXSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBSb3VuZHMgYSBudW1lcmljIHZhbHVlIHRvICduYkRlY2ltYWwnIGRlY2ltYWwgcGxhY2VzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbH0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgcm91bmRlZC4gQ2FuIGJlIGEgbnVtYmVyLCB1bmRlZmluZWQsIG9yIG51bGwuXG4gKiBAcGFyYW0gbmJEZWNpbWFsIHRoZSBudW1iZXIgb2YgZGVjaW1hbCAoZGVmYXVsdDogMilcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHJvdW5kZWQgdmFsdWUgd2l0aCB0d28gZGVjaW1hbCBwbGFjZXMgaWYgdGhlIGlucHV0IHZhbHVlIGlzIGEgdmFsaWQgbnVtYmVyOyBvdGhlcndpc2UsIHJldHVybnMgdGhlIGlucHV0IHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcm91bmQodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwsIG5iRGVjaW1hbD86IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChpc05vdE5pbE9yTmFOKCt2YWx1ZSkpIHtcbiAgICBuYkRlY2ltYWwgPSBuYkRlY2ltYWwgPz8gMjtcbiAgICBjb25zdCBmYWN0b3IgPSBNYXRoLnBvdygxMCwgbmJEZWNpbWFsKTtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCgoK3ZhbHVlICsgTnVtYmVyLkVQU0lMT04pICogZmFjdG9yKSAvIGZhY3RvcjtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHNPck5pbCh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpIHtcbiAgcmV0dXJuIHZhbHVlMSA9PT0gdmFsdWUyIHx8IChpc05pbCh2YWx1ZTEpICYmIGlzTmlsKHZhbHVlMikpO1xufVxuXG4vKipcbiAqIHJlbW92ZSBlbGVtZW50cyBmcm9tIGFuIGFycmF5XG4gKlxuICogQHJldHVybiB0aGUgcmVtb3ZlZCBlbGVtZW50c1xuICogQHBhcmFtIGFycmF5IHRoZSBhcnJheSBvbiB3aGljaCBlbGVtZW50cyB3aWxsIGJlIHJlbW92ZWRcbiAqIEBwYXJhbSBwcmVkaWNhdGUgdGhlIHNlbGVjdGlvbiBwcmVkaWNhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUFsbDxUPihhcnJheTogVFtdLCBwcmVkaWNhdGU6ICh2YWx1ZTogVCkgPT4gYm9vbGVhbik6IFRbXSB7XG4gIGxldCBuYlJlbW92ZSA9IDA7XG4gIHJldHVybiBhcnJheVxuICAgIC5zbGljZSgpXG4gICAgLm1hcCgodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgICBuYlJlbW92ZSsrOyAvLyBnbGl0Y2ggY291bnRlciB0byBhdm9pZCBpbmRleCBnYXBcbiAgICAgICAgcmV0dXJuIGFycmF5LnNwbGljZShpbmRleCAtIG5iUmVtb3ZlICsgMSwgMSlbMF07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KVxuICAgIC5maWx0ZXIoaXNOb3ROaWwpO1xufVxuXG4vKipcbiAqIHJlbW92ZSB0aGUgZmlyc3QgZWxlbWVudCBmcm9tIGFuIGFycmF5XG4gKlxuICogQHJldHVybiB0aGUgcmVtb3ZlZCBlbGVtZW50XG4gKiBAcGFyYW0gYXJyYXkgdGhlIGFycmF5IG9uIHdoaWNoIHRoZSBlbGVtZW50IHdpbGwgYmUgcmVtb3ZlZFxuICogQHBhcmFtIHByZWRpY2F0ZSB0aGUgc2VsZWN0aW9uIHByZWRpY2F0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlPFQ+KGFycmF5OiBUW10sIHByZWRpY2F0ZTogKHZhbHVlOiBUKSA9PiBib29sZWFuKTogVCB7XG4gIHJldHVybiBhcnJheS5zbGljZSgpLmZpbmQoKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBhcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIodmFsdWU6IHN0cmluZykge1xuICBpZiAoIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHZhbHVlO1xuICByZXR1cm4gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zdWJzdHJpbmcoMSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdW5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodmFsdWU6IHN0cmluZykge1xuICBpZiAoIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHZhbHVlO1xuICByZXR1cm4gdmFsdWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyB2YWx1ZS5zdWJzdHJpbmcoMSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYm9vbGVhblRvU3RyaW5nKHZhbHVlOiBhbnksIG9wdHM6IHsgeWVzTGFiZWw6IHN0cmluZzsgbm9MYWJlbDogc3RyaW5nIH0gPSB7IHllc0xhYmVsOiAnQ09NTU9OLllFUycsIG5vTGFiZWw6ICdDT01NT04uTk8nIH0pIHtcbiAgaWYgKGlzTmlsKHZhbHVlKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHZhbHVlID09PSAxIHx8IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSAndHJ1ZScgPyBvcHRzLnllc0xhYmVsIDogb3B0cy5ub0xhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRCeVByb3BlcnR5PFQsIE0gZXh0ZW5kcyBLZXlWYWx1ZVR5cGU8VD4gPSBLZXlWYWx1ZVR5cGU8VD4+KGFycmF5OiBUW10gfCByZWFkb25seSBUW10sIHByb3BlcnR5TmFtZToga2V5b2YgVCB8IHN0cmluZyk6IE0ge1xuICByZXR1cm4gKGFycmF5IHx8IFtdKS5yZWR1Y2UoKHJlcywgdmFsdWUpID0+IHtcbiAgICBjb25zdCBrZXkgPSAodmFsdWUgYXMgdW5rbm93biBhcyBhbnkpPy5bcHJvcGVydHlOYW1lXTtcbiAgICBpZiAoaXNOb3ROaWwoa2V5KSkge1xuICAgICAgcmVzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfSwge30pIGFzIE07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdEJ5SWQ8VCwgTSBleHRlbmRzIEtleVZhbHVlVHlwZTxUPiA9IEtleVZhbHVlVHlwZTxUPj4oYXJyYXk6IFRbXSB8IHJlYWRvbmx5IFRbXSk6IE0ge1xuICByZXR1cm4gKGFycmF5IHx8IFtdKS5yZWR1Y2UoXG4gICAgKHJlcywgdmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHZhbHVlPy5bJ2lkJ107XG4gICAgICBpZiAoaXNOb3ROaWwoa2V5KSkge1xuICAgICAgICByZXNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuICAgIDxNPnt9XG4gICk7XG59XG5cbi8qKlxuICogU3BsaXQgYW4gYXJyYXksIGludG8gYSBtYXAgb2YgYXJyYXksIGdyb3VwIGJ5IHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0QnlQcm9wZXJ0eTxUPih2YWx1ZXM6IFRbXSwgcHJvcGVydHlOYW1lOiBrZXlvZiBULCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBudW1iZXIpOiBLZXlWYWx1ZVR5cGU8VFtdPiB7XG4gIHJldHVybiAodmFsdWVzIHx8IFtdKS5yZWR1Y2UoXG4gICAgKHJlcywgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gaXRlbT8uW3Byb3BlcnR5TmFtZV0gPz8gZGVmYXVsdFZhbHVlO1xuICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdudW1iZXInIHx8IHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJlc1trZXldID0gcmVzW2tleV0gfHwgW107XG4gICAgICAgIHJlc1trZXldLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgPEtleVZhbHVlVHlwZTxUW10+Pnt9XG4gICk7XG59XG5cblxuLyoqXG4gKiBTcGxpdCBhbiBhcnJheSwgaW50byBhIG1hcCBvZiBhcnJheSwgZ3JvdXAgYnkgcHJvcGVydHkgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdEJ5UHJvcGVydHlQYXRoPFQ+KHZhbHVlczogVFtdLCBwcm9wZXJ0eVBhdGg6IHN0cmluZyB8IEFycmF5PHN0cmluZyB8IG51bWJlcj4sIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bWJlcik6IEtleVZhbHVlVHlwZTxUW10+IHtcbiAgcmV0dXJuICh2YWx1ZXMgfHwgW10pLnJlZHVjZShcbiAgICAocmVzLCBpdGVtKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBnZXRQcm9wZXJ0eUJ5UGF0aChpdGVtLCBwcm9wZXJ0eVBhdGgsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmVzW2tleV0gPSByZXNba2V5XSB8fCBbXTtcbiAgICAgICAgcmVzW2tleV0ucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICA8S2V5VmFsdWVUeXBlPFRbXT4+e31cbiAgKTtcbn1cblxuXG4vKipcbiAqIFNwbGl0IGFuIGFycmF5IGludG8gY2h1bmtzIHdpdGggZml4ZWQgc2l6ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRBcnJheUluQ2h1bmtzPFQgPSBhbnk+KHZhbHVlOiBUW10sIGNodW5rU2l6ZTogbnVtYmVyKTogVFtdW10ge1xuICBpZiAoIXZhbHVlPy5sZW5ndGgpIHJldHVybiBbXTtcbiAgaWYgKGNodW5rU2l6ZSA9PT0gLTEpIHJldHVybiBbdmFsdWVdOyAvLyBPbmx5IG9uZSBwYWdlXG4gIGlmICghY2h1bmtTaXplIHx8IGlzTmFOKGNodW5rU2l6ZSkgfHwgY2h1bmtTaXplIDwgMSkge1xuICAgIHRocm93ICdbc3BsaXRBcnJheUluQ2h1bmtzXSBOdW1iZXIgb2Ygcm93IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIgISc7XG4gIH1cbiAgaWYgKHZhbHVlLmxlbmd0aCA8PSBjaHVua1NpemUpIHtcbiAgICByZXR1cm4gW3ZhbHVlXTtcbiAgfVxuICBsZXQgbGVuZ3RoID0gTWF0aC5yb3VuZCh2YWx1ZS5sZW5ndGggLyBjaHVua1NpemUgKyAwLjUpO1xuICBpZiAodmFsdWUubGVuZ3RoID09PSAobGVuZ3RoIC0gMSkgKiBjaHVua1NpemUpIHtcbiAgICBsZW5ndGggPSBsZW5ndGggLSAxO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShsZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBpICogY2h1bmtTaXplO1xuICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKHZhbHVlLmxlbmd0aCwgc3RhcnQgKyBjaHVua1NpemUpO1xuICAgIHJlc3VsdFtpXSA9IHZhbHVlLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0d28gb2JqZWN0cyBvciB0d28gdmFsdWVzIGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIFR3byBvYmplY3RzIG9yIHZhbHVlcyBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gKlxuICogKiBCb3RoIG9iamVjdHMgb3IgdmFsdWVzIHBhc3MgYD09PWAgY29tcGFyaXNvbi5cbiAqICogQm90aCBvYmplY3RzIG9yIHZhbHVlcyBhcmUgb2YgdGhlIHNhbWUgdHlwZSBhbmQgYWxsIG9mIHRoZWlyIHByb3BlcnRpZXMgYXJlIGVxdWFsIGJ5XG4gKiAgIGNvbXBhcmluZyB0aGVtIHdpdGggYGVxdWFsc2AuXG4gKlxuICogQHBhcmFtIG8xIE9iamVjdCBvciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIG8yIE9iamVjdCBvciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMgdHJ1ZSBpZiBhcmd1bWVudHMgYXJlIGVxdWFsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKG8xOiBhbnksIG8yOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKG8xID09PSBvMikgcmV0dXJuIHRydWU7XG4gIGlmIChvMSA9PT0gbnVsbCB8fCBvMiA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAobzEgIT09IG8xICYmIG8yICE9PSBvMikgcmV0dXJuIHRydWU7IC8vIE5hTiA9PT0gTmFOXG4gIGNvbnN0IHQxID0gdHlwZW9mIG8xO1xuICBjb25zdCB0MiA9IHR5cGVvZiBvMjtcbiAgbGV0IGxlbmd0aDogbnVtYmVyO1xuICBsZXQga2V5OiBhbnk7XG4gIGxldCBrZXlTZXQ6IGFueTtcbiAgaWYgKHQxID09PSB0MiAmJiB0MSA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvMSkpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShvMikpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICgobGVuZ3RoID0gbzEubGVuZ3RoKSA9PT0gbzIubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoa2V5ID0gMDsga2V5IDwgbGVuZ3RoOyBrZXkrKykge1xuICAgICAgICAgIGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG8yKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBrZXlTZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGd1YXJkLWZvci1pblxuICAgICAgZm9yIChrZXkgaW4gbzEpIHtcbiAgICAgICAgaWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAga2V5U2V0W2tleV0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChrZXkgaW4gbzIpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIGtleVNldCkgJiYgdHlwZW9mIG8yW2tleV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5jb25zdCBfY2xvbmUgPSB1bndyYXBFU01vZHVsZTx0eXBlb2YgY2xvbmVJbXBvcnRlZD4oY2xvbmVJbXBvcnRlZCk7XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgQmVhbnMge1xuICAvKipcbiAgICogRGVlcCBjbG9uZS5cbiAgICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wdm9yYi9jbG9uZVxuICAgKi9cbiAgc3RhdGljIGNsb25lID0gX2Nsb25lO1xuXG4gIC8qKlxuICAgKiBDb3B5IGEgc291cmNlIG9iamVjdCwgYnkgaW5jbHVkaW5nIG9ubHkgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW4gZGF0YVR5cGUuXG4gICAqIElNUE9SVEFOVDogZXh0cmEgcHJvcGVydGllcyB0aGF0IGFyZSBOT1QgaW4gdGhlIHRhcmdldENsYXNzIGFyZSBOT1QgY29waWVkLlxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IHRvIGNvcHlcbiAgICogQHBhcmFtIGRhdGFUeXBlIHRoZSBjbGFzcyB0byB1c2UgYXMgdGFyZ2V0IGNsYXNzXG4gICAqIEBwYXJhbSBrZXlzIFRoZSBrZXlzIHRvIGNvcHkuIElmIGVtcHR5LCB3aWxsIGNvcHkgb25seSBOT1Qgb3B0aW9uYWwgcHJvcGVydGllcyBmcm9tIHRoZSBkYXRhVHlwZVxuICAgKi9cbiAgc3RhdGljIGNvcHk8VD4oc291cmNlOiBULCBkYXRhVHlwZTogbmV3ICgpID0+IFQsIGtleXM/OiBLZXlzRW51bTxUPik6IFQge1xuICAgIGlmIChpc05pbChzb3VyY2UpKSByZXR1cm4gc291cmNlO1xuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBkYXRhVHlwZSgpO1xuICAgIE9iamVjdC5rZXlzKGtleXMgfHwgdGFyZ2V0KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXlzIGlmIGFuIG9iamVjdCBhbGwgYWxsIHByb3BlcnRpZXMgdG8gbmlsXG4gICAqL1xuICBzdGF0aWMgaXNFbXB0eTxUPihcbiAgICBkYXRhOiBULFxuICAgIGtleXM/OiBLZXlzRW51bTxUPiB8IHN0cmluZ1tdLFxuICAgIG9wdHM/OiB7XG4gICAgICBibGFua1N0cmluZ0xpa2VFbXB0eT86IGJvb2xlYW47XG4gICAgfVxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXNOaWwoZGF0YSkgfHxcbiAgICAgIChBcnJheS5pc0FycmF5KGtleXMpID8ga2V5cyA6IE9iamVjdC5rZXlzKGtleXMgfHwgZGF0YSkpXG4gICAgICAgIC8vIEZpbmQgaW5kZXggb2YgdGhlIGZpcnN0IE5PVCBuaWwgdmFsdWVcbiAgICAgICAgLmZpbmRJbmRleCgoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHJldHVybiAhQmVhbnMuaXNFbXB0eSh2YWx1ZSwgbnVsbCwgb3B0cyk7IC8vIExvb3BcbiAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLmJsYW5rU3RyaW5nTGlrZUVtcHR5ID09PSB0cnVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiBpc05vdE5pbE9yQmxhbmsodmFsdWUpO1xuICAgICAgICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSk7XG4gICAgICAgIH0pID09PSAtMVxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgY29sbGVjdEJ5SWQ8VD4oYXJyYXk6IFRbXSk6IEtleVZhbHVlVHlwZTxUW10+IHtcbiAgICByZXR1cm4gY29sbGVjdEJ5UHJvcGVydHkoYXJyYXksICdpZCcgYXMga2V5b2YgVCk7XG4gIH1cblxuICBzdGF0aWMgY29sbGVjdEJ5UHJvcGVydHkgPSBjb2xsZWN0QnlQcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQYXJlbnRXaXRoQ2xhc3MoZWxlbTogSFRNTEVsZW1lbnQsIGNsYXNzTmFtZTogc3RyaW5nKTogSFRNTEVsZW1lbnQge1xuICBpZiAoIWNsYXNzTmFtZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgbGV0IGN1cnJlbnRFbGVtZW50ID0gZWxlbT8ucGFyZW50RWxlbWVudDtcbiAgd2hpbGUgKGN1cnJlbnRFbGVtZW50KSB7XG4gICAgaWYgKGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKSByZXR1cm4gY3VycmVudEVsZW1lbnQ7XG4gICAgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcnNlY3RBcnJheXM8VCA9IGFueT4odmFsdWVzOiBUW11bXSk6IFRbXSB7XG4gIGlmIChpc0VtcHR5QXJyYXkodmFsdWVzKSkgcmV0dXJuIFtdO1xuXG4gIC8vIFV0aWxpc2UgbGEgbcOpdGhvZGUgcmVkdWNlIHBvdXIgb2J0ZW5pciBsJ2ludGVyc2VjdGlvbiBkZXMgdGFibGVhdXhcbiAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjLmZpbHRlcigoeCkgPT4gY3Vyci5pbmNsdWRlcyh4KSksIHZhbHVlc1swXS5zbGljZSgpKTtcbn1cblxuLyoqXG4gKiBJbnRlcnBvbGF0ZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIHBsYWNlaG9sZGVycyB3aXRoIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGZyb20gdGhlIHByb3ZpZGVkIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBzdHJpbmcgY29udGFpbmluZyBwbGFjZWhvbGRlcnMgZW5jbG9zZWQgaW4gZG91YmxlIGN1cmx5IGJyYWNlcyAoZS5nLiwge3trZXl9fSkuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGludGVycG9sYXRlUGFyYW1zIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciBpbnRlcnBvbGF0aW9uLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW50ZXJwb2xhdGVkIHN0cmluZyB3aXRoIHBsYWNlaG9sZGVycyByZXBsYWNlZCBieSBjb3JyZXNwb25kaW5nIHZhbHVlcywgb3IgdGhlIG9yaWdpbmFsIHN0cmluZyBpZiBubyBwbGFjZWhvbGRlcnMgYXJlIG1hdGNoZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcnBvbGF0ZVN0cmluZyhtZXNzYWdlOiBzdHJpbmcsIGludGVycG9sYXRlUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHtcbiAgaWYgKGlzTmlsT3JCbGFuayhtZXNzYWdlKSkgcmV0dXJuIG1lc3NhZ2U7XG5cbiAgcmV0dXJuIG1lc3NhZ2UucmVwbGFjZSgve3soW159XSspfX0vZywgKG1hdGNoOiBzdHJpbmcsIHBhdGg6IHN0cmluZykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbVZhbHVlID0gZ2V0UHJvcGVydHlCeVBhdGhBc1N0cmluZyhpbnRlcnBvbGF0ZVBhcmFtcywgcGF0aC50cmltKCkpO1xuICAgICAgcmV0dXJuIHBhcmFtVmFsdWUgfHwgJyc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihgVW5hYmxlIHRvIGJpbmQgYW4gZXhwcmVzc2lvbjpcXG5cXHQtIG1lc3NhZ2U6ICR7bWVzc2FnZX1cXG5cXHQtIGV4cHJlc3Npb246ICR7bWF0Y2h9YCk7XG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKlxuICogVHJhbnNmb3JtcyBhIHZhbHVlICh0eXBpY2FsbHkgYSBzdHJpbmcpIHRvIGEgbnVtYmVyLlxuICogSW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhIHRyYW5zZm9ybSBmdW5jdGlvbiBvZiBhbiBpbnB1dC5cbiAqIFNob3VsZCByZXR1cm4gbj11bmRlZmluZWQgd2hlbiBmb3IgYSBuaWwgaW5wdXRcbiAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBiZSB0cmFuc2Zvcm1lZC5cbiAqIEBwYXJhbSBmYWxsYmFja1ZhbHVlIFZhbHVlIHRvIHVzZSBpZiB0aGUgcHJvdmlkZWQgdmFsdWUgY2FuJ3QgYmUgcGFyc2VkIGFzIGEgbnVtYmVyLlxuICpcbiAqICBAdXNhZ2VOb3Rlc1xuICogIGBgYHRzXG4gKiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgaWQhOiBudW1iZXI7XG4gKiAgYGBgXG4gKlxuICogQHB1YmxpY0FwaVxuICovXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyT3JOaWxBdHRyaWJ1dGUodmFsdWU6IHVua25vd24sIGZhbGxiYWNrVmFsdWUgPSBOYU4pOiBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHJldHVybiB2YWx1ZSBhcyB1bmRlZmluZWQgfCBudWxsO1xuICAvLyBwYXJzZUZsb2F0KHZhbHVlKSBoYW5kbGVzIG1vc3Qgb2YgdGhlIGNhc2VzIHdlJ3JlIGludGVyZXN0ZWQgaW4gKGl0IHRyZWF0cyBudWxsLCBlbXB0eSBzdHJpbmcsXG4gIC8vIGFuZCBvdGhlciBub24tbnVtYmVyIHZhbHVlcyBhcyBOYU4sIHdoZXJlIE51bWJlciBqdXN0IHVzZXMgMCkgYnV0IGl0IGNvbnNpZGVycyB0aGUgc3RyaW5nXG4gIC8vICcxMjNoZWxsbycgdG8gYmUgYSB2YWxpZCBudW1iZXIuIFRoZXJlZm9yZSB3ZSBhbHNvIGNoZWNrIGlmIE51bWJlcih2YWx1ZSkgaXMgTmFOLlxuICBjb25zdCBpc051bWJlclZhbHVlID0gIWlzTmFOKHBhcnNlRmxvYXQodmFsdWUgYXMgYW55KSkgJiYgIWlzTmFOKE51bWJlcih2YWx1ZSkpO1xuICByZXR1cm4gaXNOdW1iZXJWYWx1ZSA/IE51bWJlcih2YWx1ZSkgOiBmYWxsYmFja1ZhbHVlO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgYSBnaXZlbiBudW1iZXIgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsIC0gVGhlIG51bWJlciB0byBiZSBmb3JtYXR0ZWQuXG4gKiBAcGFyYW0ge0ludGwuTnVtYmVyRm9ybWF0T3B0aW9ucyAmIHsgZml4ZWREZWNpbWFscz86IG51bWJlciB9fSBbb3B0c10gLSBBbiBvcHRpb25hbCBvYmplY3QgY29udGFpbmluZyBmb3JtYXR0aW5nIG9wdGlvbnMuIEl0IGNhbiBpbmNsdWRlIHN0YW5kYXJkIGBJbnRsLk51bWJlckZvcm1hdE9wdGlvbnNgIHByb3BlcnRpZXMgYW5kIGFuIGFkZGl0aW9uYWwgYGZpeGVkRGVjaW1hbHNgIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZiBmaXhlZCBkZWNpbWFsIHBsYWNlcy5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGZvcm1hdHRlZCBudW1iZXIgYXMgYSBzdHJpbmcsIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBvcHRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyVG9TdHJpbmcodmFsOiBudW1iZXIsIG9wdHM/OiBJbnRsLk51bWJlckZvcm1hdE9wdGlvbnMgJiB7IGZpeGVkRGVjaW1hbHM/OiBudW1iZXIgfSk6IHN0cmluZyB7XG4gIC8vIEZvcm1hdCB0aGUgb3V0cHV0IHRvIGRpc3BsYXkgYW55IHdheSB5b3Ugd2FudCBoZXJlLlxuICBpZiAodmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBudWxsICYmICFpc05hTih2YWwpKSB7XG4gICAgaWYgKG9wdHM/LmZpeGVkRGVjaW1hbHMpIHtcbiAgICAgIHJldHVybiB2YWwudG9GaXhlZChvcHRzLmZpeGVkRGVjaW1hbHMpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsLnRvTG9jYWxlU3RyaW5nKHVuZGVmaW5lZCwgb3B0cyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVVNlIGFzc2lnblNraXBVbmRlZmluZWQgaW5zdGVhZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VPYmplY3RzV2l0aG91dFVuZGVmaW5lZCguLi5vYmplY3RzOiB1bmtub3duW10pOiB1bmtub3duIHtcbiAgcmV0dXJuIGFzc2lnblNraXBVbmRlZmluZWQoe30sIC4uLm9iamVjdHMpO1xufVxuXG4vKipcbiAqIE1lcmdlcyBtdWx0aXBsZSBvYmplY3RzIGludG8gb25lLCBza2lwcGluZyBwcm9wZXJ0aWVzIHdpdGggYHVuZGVmaW5lZGAgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEBwYXJhbSB7Li4udW5rbm93bltdfSBzb3VyY2VzIC0gVGhlIG9iamVjdHMgdG8gYmUgbWVyZ2VkLlxuICogQHJldHVybiB7dW5rbm93bn0gQSBuZXcgb2JqZWN0IHRoYXQgY29tYmluZXMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHByb3ZpZGVkIG9iamVjdHMsIGV4Y2x1ZGluZyBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25Ta2lwVW5kZWZpbmVkKHRhcmdldDogdW5rbm93biwgLi4uc291cmNlczogdW5rbm93bltdKTogdW5rbm93biB7XG4gIGlmIChpc0VtcHR5QXJyYXkoc291cmNlcykpIHJldHVybiB0YXJnZXQ7XG4gIGlmICghdGFyZ2V0KSByZXR1cm4gYXNzaWduU2tpcFVuZGVmaW5lZChzb3VyY2VzWzBdLCAuLi5zb3VyY2VzLnNsaWNlKDEpKTtcbiAgcmV0dXJuIHNvdXJjZXMucmVkdWNlKChhY2MsIG9iaikgPT4ge1xuICAgIGlmICghb2JqKSByZXR1cm4gYWNjO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgLy8gUmVjdXJzaXZlIGNhbGxcbiAgICAgICAgICBhY2Nba2V5XSA9IGFzc2lnblNraXBVbmRlZmluZWQodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgdGFyZ2V0KTtcbn1cbiJdfQ==