@microsoft/windows-admin-center-sdk 2.541.1 → 2.552.1

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 (116) hide show
  1. package/angular/assets/strings/cs-CZ/strings.json +1 -1
  2. package/angular/assets/strings/de-DE/strings.json +1 -1
  3. package/angular/assets/strings/es-ES/strings.json +1 -1
  4. package/angular/assets/strings/fr-FR/strings.json +1 -1
  5. package/angular/assets/strings/hu-HU/strings.json +1 -1
  6. package/angular/assets/strings/id-ID/strings.json +1 -1
  7. package/angular/assets/strings/it-IT/strings.json +1 -1
  8. package/angular/assets/strings/ja-JP/strings.json +1 -1
  9. package/angular/assets/strings/ko-KR/strings.json +1 -1
  10. package/angular/assets/strings/nl-NL/strings.json +1 -1
  11. package/angular/assets/strings/pl-PL/strings.json +1 -1
  12. package/angular/assets/strings/pt-BR/strings.json +1 -1
  13. package/angular/assets/strings/pt-PT/strings.json +1 -1
  14. package/angular/assets/strings/ru-RU/strings.json +1 -1
  15. package/angular/assets/strings/strings.json +1 -1
  16. package/angular/assets/strings/sv-SE/strings.json +1 -1
  17. package/angular/assets/strings/tr-TR/strings.json +1 -1
  18. package/angular/assets/strings/zh-CN/strings.json +1 -1
  19. package/angular/assets/strings/zh-TW/strings.json +1 -1
  20. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +1385 -301
  21. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
  22. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +2 -2
  23. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
  24. package/angular/esm2015/src/controls/details/details.component.js +13 -5
  25. package/angular/esm2015/src/controls/index.js +7 -2
  26. package/angular/esm2015/src/controls/layout/layout.component.js +10 -2
  27. package/angular/esm2015/src/controls/pivot/pivot.component.js +58 -4
  28. package/angular/esm2015/src/controls/property-grid/property-grid.component.js +2 -2
  29. package/angular/esm2015/src/controls/ux/sme-ux-content/index.js +3 -0
  30. package/angular/esm2015/src/controls/ux/sme-ux-content/sme-ux-content.component.js +25 -0
  31. package/angular/esm2015/src/controls/ux/sme-ux-content/sme-ux-content.module.js +23 -0
  32. package/angular/esm2015/src/controls/ux/sme-ux-footer/index.js +4 -0
  33. package/angular/esm2015/src/controls/ux/sme-ux-footer/sme-ux-footer-template/sme-wizard-lite-footer-template/index.js +3 -0
  34. package/angular/esm2015/src/controls/ux/sme-ux-footer/sme-ux-footer-template/sme-wizard-lite-footer-template/sme-wizard-lite-footer-template.component.js +184 -0
  35. package/angular/esm2015/src/controls/ux/sme-ux-footer/sme-ux-footer-template/sme-wizard-lite-footer-template/sme-wizard-lite-footer-template.module.js +31 -0
  36. package/angular/esm2015/src/controls/ux/sme-ux-footer/sme-ux-footer.component.js +25 -0
  37. package/angular/esm2015/src/controls/ux/sme-ux-footer/sme-ux-footer.module.js +23 -0
  38. package/angular/esm2015/src/controls/ux/sme-ux-page/index.js +3 -0
  39. package/angular/esm2015/src/controls/ux/sme-ux-page/sme-ux-page.component.js +25 -0
  40. package/angular/esm2015/src/controls/ux/sme-ux-page/sme-ux-page.module.js +31 -0
  41. package/angular/esm2015/src/controls/wizard-lite/index.js +3 -0
  42. package/angular/esm2015/src/controls/wizard-lite/wizard-lite.component.js +109 -0
  43. package/angular/esm2015/src/controls/wizard-lite/wizard-lite.module.js +57 -0
  44. package/angular/esm2015/src/controls/wizard-lite/wizard-lite.service.js +109 -0
  45. package/angular/esm2015/src/controls/wizard-lite/wizard-navigation-button/index.js +3 -0
  46. package/angular/esm2015/src/controls/wizard-lite/wizard-navigation-button/wizard-navigation-button.component.js +241 -0
  47. package/angular/esm2015/src/controls/wizard-lite/wizard-navigation-button/wizard-navigation-button.module.js +31 -0
  48. package/angular/esm2015/src/generated/strings.js +1 -1
  49. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +1192 -282
  50. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
  51. package/angular/src/controls/details/details.component.d.ts +2 -1
  52. package/angular/src/controls/index.d.ts +6 -1
  53. package/angular/src/controls/pivot/pivot.component.d.ts +27 -1
  54. package/angular/src/controls/ux/sme-ux-content/index.d.ts +2 -0
  55. package/angular/src/controls/ux/sme-ux-content/sme-ux-content.component.d.ts +9 -0
  56. package/angular/src/controls/ux/sme-ux-content/sme-ux-content.module.d.ts +8 -0
  57. package/angular/src/controls/ux/sme-ux-footer/index.d.ts +3 -0
  58. package/angular/src/controls/ux/sme-ux-footer/sme-ux-footer-template/sme-wizard-lite-footer-template/index.d.ts +2 -0
  59. package/angular/src/controls/ux/sme-ux-footer/sme-ux-footer-template/sme-wizard-lite-footer-template/sme-wizard-lite-footer-template.component.d.ts +36 -0
  60. package/angular/src/controls/ux/sme-ux-footer/sme-ux-footer-template/sme-wizard-lite-footer-template/sme-wizard-lite-footer-template.module.d.ts +10 -0
  61. package/angular/src/controls/ux/sme-ux-footer/sme-ux-footer.component.d.ts +9 -0
  62. package/angular/src/controls/ux/sme-ux-footer/sme-ux-footer.module.d.ts +8 -0
  63. package/angular/src/controls/ux/sme-ux-page/index.d.ts +2 -0
  64. package/angular/src/controls/ux/sme-ux-page/sme-ux-page.component.d.ts +9 -0
  65. package/angular/src/controls/ux/sme-ux-page/sme-ux-page.module.d.ts +10 -0
  66. package/angular/src/controls/wizard-lite/index.d.ts +2 -0
  67. package/angular/src/controls/wizard-lite/wizard-lite.component.d.ts +38 -0
  68. package/angular/src/controls/wizard-lite/wizard-lite.module.d.ts +14 -0
  69. package/angular/src/controls/wizard-lite/wizard-lite.service.d.ts +30 -0
  70. package/angular/src/controls/wizard-lite/wizard-navigation-button/index.d.ts +2 -0
  71. package/angular/src/controls/wizard-lite/wizard-navigation-button/wizard-navigation-button.component.d.ts +108 -0
  72. package/angular/src/controls/wizard-lite/wizard-navigation-button/wizard-navigation-button.module.d.ts +9 -0
  73. package/angular/src/generated/strings.d.ts +10 -0
  74. package/core/assets/strings/cs-CZ/strings.json +1 -1
  75. package/core/assets/strings/de-DE/strings.json +1 -1
  76. package/core/assets/strings/es-ES/strings.json +1 -1
  77. package/core/assets/strings/fr-FR/strings.json +1 -1
  78. package/core/assets/strings/hu-HU/strings.json +1 -1
  79. package/core/assets/strings/id-ID/strings.json +1 -1
  80. package/core/assets/strings/it-IT/strings.json +1 -1
  81. package/core/assets/strings/ja-JP/strings.json +1 -1
  82. package/core/assets/strings/ko-KR/strings.json +1 -1
  83. package/core/assets/strings/nl-NL/strings.json +1 -1
  84. package/core/assets/strings/pl-PL/strings.json +1 -1
  85. package/core/assets/strings/pt-BR/strings.json +1 -1
  86. package/core/assets/strings/pt-PT/strings.json +1 -1
  87. package/core/assets/strings/ru-RU/strings.json +1 -1
  88. package/core/assets/strings/strings.json +1 -1
  89. package/core/assets/strings/sv-SE/strings.json +1 -1
  90. package/core/assets/strings/tr-TR/strings.json +1 -1
  91. package/core/assets/strings/zh-CN/strings.json +1 -1
  92. package/core/assets/strings/zh-TW/strings.json +1 -1
  93. package/core/data/file-transfer.js +5 -5
  94. package/core/data/file-transfer.js.map +1 -1
  95. package/core/data/wdac-operations.d.ts +10 -0
  96. package/core/data/wdac-operations.js +14 -1
  97. package/core/data/wdac-operations.js.map +1 -1
  98. package/core/diagnostics/sme-web-telemetry-models.d.ts +2 -1
  99. package/core/diagnostics/sme-web-telemetry-models.js +1 -0
  100. package/core/diagnostics/sme-web-telemetry-models.js.map +1 -1
  101. package/core/diagnostics/sme-web-telemetry.d.ts +20 -0
  102. package/core/diagnostics/sme-web-telemetry.js +59 -0
  103. package/core/diagnostics/sme-web-telemetry.js.map +1 -1
  104. package/core/generated/powershell-scripts.js +1 -1
  105. package/core/generated/powershell-scripts.js.map +1 -1
  106. package/core/generated/strings.d.ts +1 -0
  107. package/core/generated/strings.js.map +1 -1
  108. package/core/resources/scripts/public/inventory/Get-ServerInventory.ps1 +11 -3
  109. package/core/shared/server-inventory/server-inventory-cache.js +3 -0
  110. package/core/shared/server-inventory/server-inventory-cache.js.map +1 -1
  111. package/core/shared/server-inventory/server-inventory.d.ts +24 -0
  112. package/core/shared/server-inventory/server-inventory.js.map +1 -1
  113. package/package.json +1 -1
  114. package/styles/css/main-v2.css +1 -1
  115. package/tools/wac-cli/templates/wac-template/angular.json +2 -2
  116. package/tools/wac-cli/templates/wac-template/src/main.ts +3 -0
@@ -10,17 +10,20 @@ import * as i1 from "@angular/common";
10
10
  const _c0 = ["expander"];
11
11
  const _c1 = function (a0, a1) { return { "sme-icon-chevronUpMed": a0, "sme-icon-chevronDownMed": a1 }; };
12
12
  function DetailsComponent_span_5_Template(rf, ctx) { if (rf & 1) {
13
- i0.ɵɵelement(0, "span", 7);
13
+ i0.ɵɵelement(0, "span", 8);
14
14
  } if (rf & 2) {
15
15
  const ctx_r1 = i0.ɵɵnextContext();
16
16
  i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(1, _c1, !ctx_r1.isExpanded, ctx_r1.isExpanded));
17
17
  } }
18
18
  function DetailsComponent_span_6_Template(rf, ctx) { if (rf & 1) {
19
- i0.ɵɵelement(0, "span", 7);
19
+ i0.ɵɵelement(0, "span", 8);
20
20
  } if (rf & 2) {
21
21
  const ctx_r2 = i0.ɵɵnextContext();
22
22
  i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(1, _c1, ctx_r2.isExpanded, !ctx_r2.isExpanded));
23
23
  } }
24
+ function DetailsComponent_hr_12_Template(rf, ctx) { if (rf & 1) {
25
+ i0.ɵɵelement(0, "hr");
26
+ } }
24
27
  const _c2 = function (a0, a1) { return { "sme-layout-absolute-phone-up sme-position-inset-none sme-padding-bottom-sm sme-arrange-overflow-auto": a0, "sme-layout-relative sme-position-stretch-v": a1 }; };
25
28
  const _c3 = ["*"];
26
29
  /**
@@ -194,7 +197,7 @@ export class DetailsComponent extends CoreBaseComponent {
194
197
  } if (rf & 2) {
195
198
  let _t;
196
199
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.expander = _t.first);
197
- } }, inputs: { initialHeightPercentage: "initialHeightPercentage", header: "header", chevronInverted: "chevronInverted", autoHeight: "autoHeight", title: "title", isExpanded: "isExpanded" }, outputs: { isExpandedChange: "isExpandedChange" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c3, decls: 12, vars: 19, consts: [["role", "button", "tabindex", "0", 1, "sme-button", "sme-button-trigger", "sme-button-auto-width", "sme-position-flex-none", "sme-padding-squish-v-md", "sme-padding-horizontal-lg", "sme-position-stretch-h", "sme-position-left-inline", "sme-arrange-stack-h", "sme-focus-zone", 3, "click"], ["expander", ""], [1, "sme-font-h3", "sme-position-flex-auto", "sme-arrange-ellipsis"], ["class", "sme-icon sme-position-flex-none", "aria-hidden", "true", 3, "ngClass", 4, "ngIf"], [1, "sme-screen-reader", 3, "id"], [1, "sme-position-flex-auto", "sme-layout-relative"], [3, "ngClass"], ["aria-hidden", "true", 1, "sme-icon", "sme-position-flex-none", 3, "ngClass"]], template: function DetailsComponent_Template(rf, ctx) { if (rf & 1) {
200
+ } }, inputs: { initialHeightPercentage: "initialHeightPercentage", header: "header", chevronInverted: "chevronInverted", addBottomBorder: "addBottomBorder", autoHeight: "autoHeight", title: "title", isExpanded: "isExpanded" }, outputs: { isExpandedChange: "isExpandedChange" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c3, decls: 13, vars: 20, consts: [["role", "button", "tabindex", "0", 1, "sme-button", "sme-button-trigger", "sme-button-auto-width", "sme-position-flex-none", "sme-padding-squish-v-md", "sme-padding-horizontal-lg", "sme-position-stretch-h", "sme-position-left-inline", "sme-arrange-stack-h", "sme-focus-zone", 3, "click"], ["expander", ""], [1, "sme-font-h3", "sme-position-flex-auto", "sme-arrange-ellipsis"], ["class", "sme-icon sme-position-flex-none", "aria-hidden", "true", 3, "ngClass", 4, "ngIf"], [1, "sme-screen-reader", 3, "id"], [1, "sme-position-flex-auto", "sme-layout-relative"], [3, "ngClass"], [4, "ngIf"], ["aria-hidden", "true", 1, "sme-icon", "sme-position-flex-none", 3, "ngClass"]], template: function DetailsComponent_Template(rf, ctx) { if (rf & 1) {
198
201
  i0.ɵɵprojectionDef();
199
202
  i0.ɵɵelementStart(0, "h3");
200
203
  i0.ɵɵelementStart(1, "div", 0, 1);
@@ -214,6 +217,7 @@ export class DetailsComponent extends CoreBaseComponent {
214
217
  i0.ɵɵprojection(11);
215
218
  i0.ɵɵelementEnd();
216
219
  i0.ɵɵelementEnd();
220
+ i0.ɵɵtemplate(12, DetailsComponent_hr_12_Template, 1, 0, "hr", 7);
217
221
  } if (rf & 2) {
218
222
  i0.ɵɵadvance(1);
219
223
  i0.ɵɵstyleProp("min-height", ctx.minExpanderHeight);
@@ -232,7 +236,9 @@ export class DetailsComponent extends CoreBaseComponent {
232
236
  i0.ɵɵclassProp("sme-margin-horizontal-lg", ctx.shouldContentSlim)("sme-position-stretch-v", ctx.autoHeight);
233
237
  i0.ɵɵadvance(1);
234
238
  i0.ɵɵclassProp("sme-layout-none", !ctx.isExpanded);
235
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(16, _c2, !ctx.autoHeight, ctx.autoHeight));
239
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(17, _c2, !ctx.autoHeight, ctx.autoHeight));
240
+ i0.ɵɵadvance(2);
241
+ i0.ɵɵproperty("ngIf", ctx.addBottomBorder);
236
242
  } }, directives: [i1.NgIf, i1.NgClass], encapsulation: 2 });
237
243
  __decorate([
238
244
  Yield(),
@@ -272,6 +278,8 @@ __decorate([
272
278
  type: Input
273
279
  }], chevronInverted: [{
274
280
  type: Input
281
+ }], addBottomBorder: [{
282
+ type: Input
275
283
  }], autoHeight: [{
276
284
  type: Input
277
285
  }], title: [{
@@ -281,4 +289,4 @@ __decorate([
281
289
  }], isExpandedChange: [{
282
290
  type: Output
283
291
  }], onWindowBreakpointChanged: [], deferredOnLayoutChanged: [], onLayoutChanged: [] }); })();
284
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9kZXRhaWxzL2RldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZGV0YWlscy9kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhFQUE4RSxDQUFDO0FBRXhHLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUVqRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7O0lDYmpGLDBCQUU0Qjs7O0lBRDFCLDJGQUF5Rjs7O0lBRTNGLDBCQUU0Qjs7O0lBRDFCLDJGQUF5Rjs7OztBRFcvRjs7Ozs7Ozs7Ozs7R0FXRztBQUtILE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxpQkFBaUI7SUF5RG5ELFlBQVksUUFBa0IsRUFBMkMsTUFBYztRQUNuRixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUEzQ2Isb0JBQWUsR0FBRyxPQUFPLENBQUMsVUFBVSxFQUFXLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFjcEY7O1dBRUc7UUFFSSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBa0JuQixxQkFBZ0IsR0FBMEIs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MENBQXFCO1FBR0csZUFBd0I7UUFBeEIsMENBQXdCO1FBQUUsZUFBcUM7UUFBckMsbUVBQXFDO1FBSTFDLGVBQW9EO1FBQXBELGlFQUFvRCwwQ0FBQTtRQUV4RyxlQUFxQztRQUFyQyxrREFBcUM7UUFEbEMsc0ZBQTJMOztBRGlIOUw7SUFEQyxLQUFLLEVBQUU7Ozs7aUVBR1A7QUFNRDtJQURDLFFBQVEsRUFBRTs7OzsrREFHVjtBQU1EO0lBREMsS0FBSyxFQUFFOzs7O3VEQTJFUDt1RkF2TFEsZ0JBQWdCO2NBSjVCLFNBQVM7ZUFBQztnQkFDUCxRQUFRLEVBQUUsYUFBYTtnQkFDdkIsV0FBVyxFQUFFLDBCQUEwQjthQUMxQzs7c0JBMERvQyxRQUFROztzQkFBSSxNQUFNO3VCQUFDLG1CQUFtQjt3QkF2Q2hFLFFBQVE7a0JBRGQsU0FBUzttQkFBQyxVQUFVO1lBSWQsdUJBQXVCO2tCQUQ3QixLQUFLO1lBSUMsTUFBTTtrQkFEWixLQUFLO1lBSUMsZUFBZTtrQkFEckIsS0FBSztZQU9DLFVBQVU7a0JBRGhCLEtBQUs7WUFPSyxLQUFLO2tCQURmLEtBQUs7WUFVQyxVQUFVO2tCQURoQixLQUFLO1lBSUMsZ0JBQWdCO2tCQUR0QixNQUFNO1lBMkNBLHlCQUF5QixNQVF4Qix1QkFBdUIsTUFRdkIsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSW5qZWN0LFxyXG4gICAgSW5qZWN0b3IsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE9wdGlvbmFsLFxyXG4gICAgT3V0cHV0LFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEZWJvdW5jZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL2RlYm91bmNlLmRlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBEZXByZWNhdGVkIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RlY29yYXRvcnMvZGVwcmVjYXRpb24uZGVjb3JhdG9ycyc7XHJcbmltcG9ydCB7IFlpZWxkIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RlY29yYXRvcnMveWllbGQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgU3RyaW5ncyB9IGZyb20gJy4uLy4uL2dlbmVyYXRlZC9zdHJpbmdzJztcclxuaW1wb3J0IHsgQ29yZUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21tb24vYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMYXlvdXQsIFNNRV9MQVlPVVRfUFJPVklERVIgfSBmcm9tICcuLi9jb21tb24vbGF5b3V0JztcclxuaW1wb3J0IHsgRGV0YWlsc1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyIH0gZnJvbSAnLi9kZXRhaWxzLXJlc3BvbnNpdmUtd2luZG93LW1hbmFnZXInO1xyXG5cclxuLyoqXHJcbiAqXHJcbiAqIEBzbWVEb2Mge0BsYWJlbCBEZXRhaWxzIEBpZCBzbWUtZGV0YWlsc31cclxuICpcclxuICogQG92ZXJ2aWV3XHJcbiAqIEBmaWxlIHtAZmlsZXBhdGggLi9leGFtcGxlcy9kZXRhaWxzLW92ZXJ2aWV3Lm1kfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIEJhc2ljIFVzYWdlIEBpZCBiYXNpYy11c2FnZX1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZGV0YWlscy1leGFtcGxlLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9kZXRhaWxzLWV4YW1wbGUuY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWRldGFpbHMnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RldGFpbHMuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZXRhaWxzQ29tcG9uZW50IGV4dGVuZHMgQ29yZUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gICAgcHVibGljIGdldCBtaW5FeHBhbmRlckhlaWdodCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIubWluRXhwYW5kZXJIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBzaG91bGRDb250ZW50U2xpbSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIuc2hvdWxkQ29udGVudFNsaW07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0RldGFpbHNDb21wb25lbnQnO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJlc291cmNlU3RyaW5ncyA9IE1zZnRTbWUuZ2V0U3RyaW5nczxTdHJpbmdzPigpLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkRldGFpbHM7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZXhwYW5kZXInKVxyXG4gICAgcHVibGljIGV4cGFuZGVyOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaW5pdGlhbEhlaWdodFBlcmNlbnRhZ2U6IG51bWJlcjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGhlYWRlcjogc3RyaW5nO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY2hldnJvbkludmVydGVkOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRldGFpbCBjb21wb25lbnQncyBoZWlnaHQgd2lsbCBiZSBkZXRlcm1pbmVkIG9uIHRoZSB3aG9sZSBjaGlsZHJlbidzIGhlaWdodC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhdXRvSGVpZ2h0ID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSAwMi8yNS8yMDE5LiBQbGVhc2UgdXNlICdoZWFkZXInIGluc3RlYWRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgdGl0bGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuaGVhZGVyID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmhlYWRlcjtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGlzRXhwYW5kZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgaXNFeHBhbmRlZENoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICAgIHB1YmxpYyBsYXlvdXRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSBkZXRhaWxzUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXI6IERldGFpbHNSZXNwb25zaXZlV2luZG93TWFuYWdlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IsIEBPcHRpb25hbCgpIEBJbmplY3QoU01FX0xBWU9VVF9QUk9WSURFUikgbGF5b3V0OiBMYXlvdXQpIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsSGVpZ2h0UGVyY2VudGFnZSA9IDMwO1xyXG4gICAgICAgIGlmIChsYXlvdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5kZXRhaWxzUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIgPSBuZXcgRGV0YWlsc1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyKGxheW91dCk7XHJcbiAgICAgICAgICAgIC8vIG9uIHBhcmVudCBsYXlvdXQgY2hhbmdlcywgcmUtZW1pdCB0aGUgbGF5b3V0IGNoYW5nZSB0byBvdXIgZXZlbnRcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gobGF5b3V0LmxheW91dENoYW5nZWQuc3Vic2NyaWJlKCgoKSA9PiB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpKSkpO1xyXG4gICAgICAgICAgICAvLyBvbiB3aW5kb3cgYnJlYWsgcG9pbnQgY2hhbmdlcywgZW1pdCB0aGUgZXZlbnQgYWJvdXQgY3JpdGljYWwgY2xhc3NlcyBhbmQgc3R5bGluZyB1cGRhdGVzIHNpZ25hbC5cclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gobGF5b3V0LndpbmRvd0JyZWFrcG9pbnRDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uV2luZG93QnJlYWtwb2ludENoYW5nZWQoKSkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kZWZlcnJlZE9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG4gICAgICAgIGlmIChjaGFuZ2VzLmlzRXhwYW5kZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkxheW91dENoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvZ2dsZUV4cGFuc2lvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRXhwYW5kZWQgPSAhdGhpcy5pc0V4cGFuZGVkO1xyXG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZENoYW5nZS5lbWl0KHRoaXMuaXNFeHBhbmRlZCk7XHJcbiAgICAgICAgdGhpcy5vbkxheW91dENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVmcmVzaCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG9uIHdpbmRvdyBicmVha3BvaW50IGNoYW5nZWQgaGFuZGxlci5cclxuICAgICAqIEFkZGluZyB5aWVsZCBmb3IgY29tcG9uZW50IHRvIGdldCBFbGVtZW50UmVmIGFmdGVyIGluaXRpYWxpemF0aW9uLlxyXG4gICAgICovXHJcbiAgICBAWWllbGQoKVxyXG4gICAgcHVibGljIG9uV2luZG93QnJlYWtwb2ludENoYW5nZWQoKSB7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxzUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIub25XaW5kb3dTaXplQ2hhbmdlZCh0aGlzLmhvc3RFbGVtZW50Py5uYXRpdmVFbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkZWZlcnJlZCBsYXlvdXQgY2hhbmdlZCBoYW5kbGVyLlxyXG4gICAgICovXHJcbiAgICBARGVib3VuY2UoKVxyXG4gICAgcHJpdmF0ZSBkZWZlcnJlZE9uTGF5b3V0Q2hhbmdlZCgpIHtcclxuICAgICAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGxheW91dCBjaGFuZ2VkIGV2ZW50IGhhbmRsZXIuXHJcbiAgICAgKi9cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwcml2YXRlIG9uTGF5b3V0Q2hhbmdlZCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaG9zdEVsZW1lbnQgfHwgIXRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBleHBhbmRlck9mZnNldEhlaWdodCA9IE1zZnRTbWUuZ2V0VmFsdWU8bnVtYmVyPih0aGlzLmV4cGFuZGVyLCAnbmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQnKSB8fCAwO1xyXG4gICAgICAgIGNvbnN0IGV4cGFuZGVySGVpZ2h0ID0gZXhwYW5kZXJPZmZzZXRIZWlnaHQgPiAwID8gYHswfXB4YC5mb3JtYXQoZXhwYW5kZXJPZmZzZXRIZWlnaHQpIDogdGhpcy5taW5FeHBhbmRlckhlaWdodDtcclxuICAgICAgICBpZiAoIXRoaXMuaXNFeHBhbmRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gZXhwYW5kZXJIZWlnaHQ7XHJcbiAgICAgICAgICAgIHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5taW5IZWlnaHQgPSAnJztcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHBvdGVudGlhbEhlaWdodCA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRQYXJlbnQub2Zmc2V0SGVpZ2h0IHx8IDA7XHJcbiAgICAgICAgY29uc3QgcGFyZW50T2Zmc2V0VG9wID0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFBhcmVudC5vZmZzZXRUb3AgfHwgMDtcclxuICAgICAgICBjb25zdCB0b3RhbEhlaWdodCA9IE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTtcclxuXHJcbiAgICAgICAgY29uc3QgZGV0YWlsQ29udGVudEhlaWdodCA9IHRoaXMuZGV0YWlsc1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyLmRldGFpbENvbnRlbnRIZWlnaHQ7XHJcblxyXG4gICAgICAgIC8vIEVuZm9yY2VzIGEgbWF4IGhlaWdodCB3aGVuIHNldHRpbmcgdGhlIGRlZmF1bHQgaGVpZ2h0LlxyXG4gICAgICAgIGNvbnN0IG1heEhlaWdodCA9IGRldGFpbENvbnRlbnRIZWlnaHQubWF4O1xyXG4gICAgICAgIGNvbnN0IG1pbkhlaWdodCA9IGRldGFpbENvbnRlbnRIZWlnaHQubWluO1xyXG4gICAgICAgIGNvbnN0IHBob25lRG93biA9IGRldGFpbENvbnRlbnRIZWlnaHQucGhvbmVEb3duO1xyXG5cclxuICAgICAgICAvLyBPbiBzbWFsbCB3aW5kb3cgaGVpZ2h0LCB0aGUgZGV0YWlsIHBhbmUgaGVpZ2h0IHdvdWxkIGJlIHRoZSBzbWFsbGVyIHZhbHVlIFt3aW5kb3cgaGVpZ2h0ICogMC42LCBtYXhIZWlnaHRdXHJcbiAgICAgICAgaWYgKHBob25lRG93bikge1xyXG4gICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgPSBNYXRoLm1pbih0b3RhbEhlaWdodCAtIHBhcmVudE9mZnNldFRvcCwgcG90ZW50aWFsSGVpZ2h0KTtcclxuICAgICAgICAgICAgLy8gUHJldmVudHMgdGhlIGluaXRpYWwgc2l6ZSBleGNlZWQgbWF4IGhlaWdodFxyXG4gICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgPSBNYXRoLm1pbihwb3RlbnRpYWxIZWlnaHQsIG1heEhlaWdodCk7XHJcbiAgICAgICAgICAgIHBvdGVudGlhbEhlaWdodCA9IE1hdGgubWF4KHBvdGVudGlhbEhlaWdodCwgbWluSGVpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcbiAgICAgICAgICAgIGlmIChwb3J0SGVpZ2h0IDwgbWluSGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgPSBtaW5IZWlnaHQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9ydEhlaWdodCA+IG1pbkhlaWdodCAmJiBwb3J0SGVpZ2h0IDwgbWF4SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBNYXRoLmNlaWwgY2FuIG1ha2UgY2FsY3VsYXRpb24gd2l0aG91dCByb3VuZGluZyBpc3N1ZXMuXHJcbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgPSBNYXRoLmNlaWwocG9ydEhlaWdodCAqIDAuNik7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9ydEhlaWdodCA+IG1heEhlaWdodCAmJiBwb3J0SGVpZ2h0ICogMC40ID4gbWF4SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgPSBNYXRoLmNlaWwobWF4SGVpZ2h0KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwb3J0SGVpZ2h0ID4gbWF4SGVpZ2h0ICYmIHBvcnRIZWlnaHQgKiAwLjQgPiBtaW5IZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHBvdGVudGlhbEhlaWdodCA9IE1hdGguY2VpbChwb3J0SGVpZ2h0ICogMC40KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9ICcnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFNocmluayBvbmx5IGlmIGV4Y2VlZHMgcGFyZW50cyBvZmZzZXQgaGVpZ2h0O1xyXG4gICAgICAgICAgICBpZiAocG90ZW50aWFsSGVpZ2h0ID4gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFBhcmVudC5vZmZzZXRIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIC8vIFNldCBpbml0aWFsIGV4cGFuZGVkIGhlaWdodCB0byAzMHZoLlxyXG4gICAgICAgICAgICAgICAgLy8gUG9vciBkZXNpZ24gdGhhdCBuZWVkcyB0byByZS12aXNpdC5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG9uZVZoID0gdG90YWxIZWlnaHQgLyAxMDA7XHJcbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgPSBvbmVWaCAqIHRoaXMuaW5pdGlhbEhlaWdodFBlcmNlbnRhZ2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzbWUtYm9yZGVyLXRvcC1zbSBvbiB0aGUgZGV0YWlscyByZXNpemVyIGJvcmRlci5cclxuICAgICAgICAgICAgICAgIC8vIG1pbnVzIHRoZSBib3JkZXIgaGVpZ2h0IHRvIGdldCByaWQgb2YgdGhlIGV4dHJhIHNjcm9sbCBiYXIuXHJcbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgLT0gMTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcG90ZW50aWFsSGVpZ2h0ID0gTWF0aC5taW4ocG90ZW50aWFsSGVpZ2h0LCBtYXhIZWlnaHQpO1xyXG4gICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgPSBNYXRoLm1heChwb3RlbnRpYWxIZWlnaHQsIG1pbkhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUubWluSGVpZ2h0ID0gJyc7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuYXV0b0hlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGB7MH1weGAuZm9ybWF0KHBvdGVudGlhbEhlaWdodCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyB0aGUgaGVpZ2h0IHdvdWxkIGJlIGNoYW5nZWQgb24gd2luZG93IGhlaWdodCBvciB3aWR0aCBjaGFuZ2VcclxuICAgICAgICAgICAgLy8gcmUtY2FsY3VsYXRlIHRoZSBwb3RlbnRpYWwgaGVpZ2h0IHNob3VsZCBiZSBub3RpZnlpbmcgcGFyZW50cy5cclxuICAgICAgICAgICAgdGhpcy5sYXlvdXRDaGFuZ2VkLmVtaXQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5nZXRJbml0aWFsSG9zdENsYXNzZXMoKS5jb25jYXQoW1xyXG4gICAgICAgICAgICAnc21lLWFycmFuZ2Utc3RhY2stdidcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSWRCYWcoKTogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGV0YWlsc1NwYW46ICcnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG4iLCI8aDM+XHJcbiAgPGRpdiAjZXhwYW5kZXJcclxuICAgIGNsYXNzPVwic21lLWJ1dHRvbiBzbWUtYnV0dG9uLXRyaWdnZXIgc21lLWJ1dHRvbi1hdXRvLXdpZHRoIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLXBhZGRpbmctc3F1aXNoLXYtbWQgc21lLXBhZGRpbmctaG9yaXpvbnRhbC1sZyBzbWUtcG9zaXRpb24tc3RyZXRjaC1oIHNtZS1wb3NpdGlvbi1sZWZ0LWlubGluZSBzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1mb2N1cy16b25lXCJcclxuICAgIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIiAoY2xpY2spPVwidG9nZ2xlRXhwYW5zaW9uKClcIiBbc3R5bGUubWluLWhlaWdodF09XCJtaW5FeHBhbmRlckhlaWdodFwiXHJcbiAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiEhaXNFeHBhbmRlZFwiIFthdHRyLmFyaWEtZGVzY3JpYmVkQnldPVwiaWRCYWcuZGV0YWlsc1NwYW5cIj5cclxuICAgIDxzcGFuIGNsYXNzPVwic21lLWZvbnQtaDMgc21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtYXJyYW5nZS1lbGxpcHNpc1wiPnt7IGhlYWRlciB9fTwvc3Bhbj5cclxuICAgIDxzcGFuICpuZ0lmPVwiIWNoZXZyb25JbnZlcnRlZFwiIGNsYXNzPVwic21lLWljb24gc21lLXBvc2l0aW9uLWZsZXgtbm9uZVwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsnc21lLWljb24tY2hldnJvblVwTWVkJzogIWlzRXhwYW5kZWQsICdzbWUtaWNvbi1jaGV2cm9uRG93bk1lZCc6IGlzRXhwYW5kZWR9XCJcclxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJjaGV2cm9uSW52ZXJ0ZWRcIiBjbGFzcz1cInNtZS1pY29uIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmVcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7J3NtZS1pY29uLWNoZXZyb25VcE1lZCc6IGlzRXhwYW5kZWQsICdzbWUtaWNvbi1jaGV2cm9uRG93bk1lZCc6ICFpc0V4cGFuZGVkfVwiXHJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJzbWUtc2NyZWVuLXJlYWRlclwiIFtpZF09XCJpZEJhZy5kZXRhaWxzU3BhblwiPiB7eyByZXNvdXJjZVN0cmluZ3MuQXJpYURlc2NyaXB0aW9uIH19PC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvaDM+XHJcblxyXG48ZGl2IGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtbGF5b3V0LXJlbGF0aXZlXCIgW2NsYXNzLnNtZS1tYXJnaW4taG9yaXpvbnRhbC1sZ109XCJzaG91bGRDb250ZW50U2xpbVwiIFtjbGFzcy5zbWUtcG9zaXRpb24tc3RyZXRjaC12XT1cImF1dG9IZWlnaHRcIj5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnc21lLWxheW91dC1hYnNvbHV0ZS1waG9uZS11cCBzbWUtcG9zaXRpb24taW5zZXQtbm9uZSBzbWUtcGFkZGluZy1ib3R0b20tc20gc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0byc6ICFhdXRvSGVpZ2h0LCAnc21lLWxheW91dC1yZWxhdGl2ZSBzbWUtcG9zaXRpb24tc3RyZXRjaC12JzogYXV0b0hlaWdodH1cIlxyXG4gICAgW2NsYXNzLnNtZS1sYXlvdXQtbm9uZV09XCIhaXNFeHBhbmRlZFwiPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9kZXRhaWxzL2RldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZGV0YWlscy9kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhFQUE4RSxDQUFDO0FBRXhHLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUVqRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7O0lDYmpGLDBCQUU0Qjs7O0lBRDFCLDJGQUF5Rjs7O0lBRTNGLDBCQUU0Qjs7O0lBRDFCLDJGQUF5Rjs7O0lBYS9GLHFCQUE0Qjs7OztBREY1Qjs7Ozs7Ozs7Ozs7R0FXRztBQUtILE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxpQkFBaUI7SUE0RG5ELFlBQVksUUFBa0IsRUFBMkMsTUFBYztRQUNuRixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUE5Q2Isb0JBQWUsR0FBRyxPQUFPLENBQUMsVUFBVSxFQUFXLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFpQnBGOztXQUVHO1FBRUksZUFBVSxHQUFHLEtBQUssQ0FBQztRQWtC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dEIsMkNBQXNCO1FBR3RCLGVBQXFCO1FBQXJCLDBDQUFxQjtRQUdHLGVBQXdCO1FBQXhCLDBDQUF3QjtRQUFFLGVBQXFDO1FBQXJDLG1FQUFxQztRQUkxQyxlQUFvRDtRQUFwRCxpRUFBb0QsMENBQUE7UUFFeEcsZUFBcUM7UUFBckMsa0RBQXFDO1FBRGxDLHNGQUEyTDtRQU03TCxlQUFxQjtRQUFyQiwwQ0FBcUI7O0FEOEd0QjtJQURDLEtBQUssRUFBRTs7OztpRUFHUDtBQU1EO0lBREMsUUFBUSxFQUFFOzs7OytEQUdWO0FBTUQ7SUFEQyxLQUFLLEVBQUU7Ozs7dURBMkVQO3VGQTFMUSxnQkFBZ0I7Y0FKNUIsU0FBUztlQUFDO2dCQUNQLFFBQVEsRUFBRSxhQUFhO2dCQUN2QixXQUFXLEVBQUUsMEJBQTBCO2FBQzFDOztzQkE2RG9DLFFBQVE7O3NCQUFJLE1BQU07dUJBQUMsbUJBQW1CO3dCQTFDaEUsUUFBUTtrQkFEZCxTQUFTO21CQUFDLFVBQVU7WUFJZCx1QkFBdUI7a0JBRDdCLEtBQUs7WUFJQyxNQUFNO2tCQURaLEtBQUs7WUFJQyxlQUFlO2tCQURyQixLQUFLO1lBSUMsZUFBZTtrQkFEckIsS0FBSztZQU9DLFVBQVU7a0JBRGhCLEtBQUs7WUFPSyxLQUFLO2tCQURmLEtBQUs7WUFVQyxVQUFVO2tCQURoQixLQUFLO1lBSUMsZ0JBQWdCO2tCQUR0QixNQUFNO1lBMkNBLHlCQUF5QixNQVF4Qix1QkFBdUIsTUFRdkIsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSW5qZWN0LFxyXG4gICAgSW5qZWN0b3IsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE9wdGlvbmFsLFxyXG4gICAgT3V0cHV0LFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEZWJvdW5jZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL2RlYm91bmNlLmRlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBEZXByZWNhdGVkIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RlY29yYXRvcnMvZGVwcmVjYXRpb24uZGVjb3JhdG9ycyc7XHJcbmltcG9ydCB7IFlpZWxkIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RlY29yYXRvcnMveWllbGQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgU3RyaW5ncyB9IGZyb20gJy4uLy4uL2dlbmVyYXRlZC9zdHJpbmdzJztcclxuaW1wb3J0IHsgQ29yZUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21tb24vYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMYXlvdXQsIFNNRV9MQVlPVVRfUFJPVklERVIgfSBmcm9tICcuLi9jb21tb24vbGF5b3V0JztcclxuaW1wb3J0IHsgRGV0YWlsc1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyIH0gZnJvbSAnLi9kZXRhaWxzLXJlc3BvbnNpdmUtd2luZG93LW1hbmFnZXInO1xyXG5cclxuLyoqXHJcbiAqXHJcbiAqIEBzbWVEb2Mge0BsYWJlbCBEZXRhaWxzIEBpZCBzbWUtZGV0YWlsc31cclxuICpcclxuICogQG92ZXJ2aWV3XHJcbiAqIEBmaWxlIHtAZmlsZXBhdGggLi9leGFtcGxlcy9kZXRhaWxzLW92ZXJ2aWV3Lm1kfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIEJhc2ljIFVzYWdlIEBpZCBiYXNpYy11c2FnZX1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZGV0YWlscy1leGFtcGxlLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9kZXRhaWxzLWV4YW1wbGUuY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWRldGFpbHMnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RldGFpbHMuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZXRhaWxzQ29tcG9uZW50IGV4dGVuZHMgQ29yZUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gICAgcHVibGljIGdldCBtaW5FeHBhbmRlckhlaWdodCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIubWluRXhwYW5kZXJIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBzaG91bGRDb250ZW50U2xpbSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIuc2hvdWxkQ29udGVudFNsaW07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0RldGFpbHNDb21wb25lbnQnO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJlc291cmNlU3RyaW5ncyA9IE1zZnRTbWUuZ2V0U3RyaW5nczxTdHJpbmdzPigpLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkRldGFpbHM7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZXhwYW5kZXInKVxyXG4gICAgcHVibGljIGV4cGFuZGVyOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaW5pdGlhbEhlaWdodFBlcmNlbnRhZ2U6IG51bWJlcjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGhlYWRlcjogc3RyaW5nO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY2hldnJvbkludmVydGVkOiBib29sZWFuO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYWRkQm90dG9tQm9yZGVyOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRldGFpbCBjb21wb25lbnQncyBoZWlnaHQgd2lsbCBiZSBkZXRlcm1pbmVkIG9uIHRoZSB3aG9sZSBjaGlsZHJlbidzIGhlaWdodC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhdXRvSGVpZ2h0ID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSAwMi8yNS8yMDE5LiBQbGVhc2UgdXNlICdoZWFkZXInIGluc3RlYWRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgdGl0bGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuaGVhZGVyID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmhlYWRlcjtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGlzRXhwYW5kZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgaXNFeHBhbmRlZENoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICAgIHB1YmxpYyBsYXlvdXRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSBkZXRhaWxzUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXI6IERldGFpbHNSZXNwb25zaXZlV2luZG93TWFuYWdlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IsIEBPcHRpb25hbCgpIEBJbmplY3QoU01FX0xBWU9VVF9QUk9WSURFUikgbGF5b3V0OiBMYXlvdXQpIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsSGVpZ2h0UGVyY2VudGFnZSA9IDMwO1xyXG4gICAgICAgIGlmIChsYXlvdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5kZXRhaWxzUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIgPSBuZXcgRGV0YWlsc1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyKGxheW91dCk7XHJcbiAgICAgICAgICAgIC8vIG9uIHBhcmVudCBsYXlvdXQgY2hhbmdlcywgcmUtZW1pdCB0aGUgbGF5b3V0IGNoYW5nZSB0byBvdXIgZXZlbnRcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gobGF5b3V0LmxheW91dENoYW5nZWQuc3Vic2NyaWJlKCgoKSA9PiB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpKSkpO1xyXG4gICAgICAgICAgICAvLyBvbiB3aW5kb3cgYnJlYWsgcG9pbnQgY2hhbmdlcywgZW1pdCB0aGUgZXZlbnQgYWJvdXQgY3JpdGljYWwgY2xhc3NlcyBhbmQgc3R5bGluZyB1cGRhdGVzIHNpZ25hbC5cclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gobGF5b3V0LndpbmRvd0JyZWFrcG9pbnRDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uV2luZG93QnJlYWtwb2ludENoYW5nZWQoKSkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kZWZlcnJlZE9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG4gICAgICAgIGlmIChjaGFuZ2VzLmlzRXhwYW5kZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkxheW91dENoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvZ2dsZUV4cGFuc2lvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRXhwYW5kZWQgPSAhdGhpcy5pc0V4cGFuZGVkO1xyXG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZENoYW5nZS5lbWl0KHRoaXMuaXNFeHBhbmRlZCk7XHJcbiAgICAgICAgdGhpcy5vbkxheW91dENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVmcmVzaCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG9uIHdpbmRvdyBicmVha3BvaW50IGNoYW5nZWQgaGFuZGxlci5cclxuICAgICAqIEFkZGluZyB5aWVsZCBmb3IgY29tcG9uZW50IHRvIGdldCBFbGVtZW50UmVmIGFmdGVyIGluaXRpYWxpemF0aW9uLlxyXG4gICAgICovXHJcbiAgICBAWWllbGQoKVxyXG4gICAgcHVibGljIG9uV2luZG93QnJlYWtwb2ludENoYW5nZWQoKSB7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxzUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIub25XaW5kb3dTaXplQ2hhbmdlZCh0aGlzLmhvc3RFbGVtZW50Py5uYXRpdmVFbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkZWZlcnJlZCBsYXlvdXQgY2hhbmdlZCBoYW5kbGVyLlxyXG4gICAgICovXHJcbiAgICBARGVib3VuY2UoKVxyXG4gICAgcHJpdmF0ZSBkZWZlcnJlZE9uTGF5b3V0Q2hhbmdlZCgpIHtcclxuICAgICAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGxheW91dCBjaGFuZ2VkIGV2ZW50IGhhbmRsZXIuXHJcbiAgICAgKi9cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwcml2YXRlIG9uTGF5b3V0Q2hhbmdlZCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaG9zdEVsZW1lbnQgfHwgIXRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBleHBhbmRlck9mZnNldEhlaWdodCA9IE1zZnRTbWUuZ2V0VmFsdWU8bnVtYmVyPih0aGlzLmV4cGFuZGVyLCAnbmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQnKSB8fCAwO1xyXG4gICAgICAgIGNvbnN0IGV4cGFuZGVySGVpZ2h0ID0gZXhwYW5kZXJPZmZzZXRIZWlnaHQgPiAwID8gYHswfXB4YC5mb3JtYXQoZXhwYW5kZXJPZmZzZXRIZWlnaHQpIDogdGhpcy5taW5FeHBhbmRlckhlaWdodDtcclxuICAgICAgICBpZiAoIXRoaXMuaXNFeHBhbmRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gZXhwYW5kZXJIZWlnaHQ7XHJcbiAgICAgICAgICAgIHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5taW5IZWlnaHQgPSAnJztcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHBvdGVudGlhbEhlaWdodCA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRQYXJlbnQub2Zmc2V0SGVpZ2h0IHx8IDA7XHJcbiAgICAgICAgY29uc3QgcGFyZW50T2Zmc2V0VG9wID0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFBhcmVudC5vZmZzZXRUb3AgfHwgMDtcclxuICAgICAgICBjb25zdCB0b3RhbEhlaWdodCA9IE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTtcclxuXHJcbiAgICAgICAgY29uc3QgZGV0YWlsQ29udGVudEhlaWdodCA9IHRoaXMuZGV0YWlsc1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyLmRldGFpbENvbnRlbnRIZWlnaHQ7XHJcblxyXG4gICAgICAgIC8vIEVuZm9yY2VzIGEgbWF4IGhlaWdodCB3aGVuIHNldHRpbmcgdGhlIGRlZmF1bHQgaGVpZ2h0LlxyXG4gICAgICAgIGNvbnN0IG1heEhlaWdodCA9IGRldGFpbENvbnRlbnRIZWlnaHQubWF4O1xyXG4gICAgICAgIGNvbnN0IG1pbkhlaWdodCA9IGRldGFpbENvbnRlbnRIZWlnaHQubWluO1xyXG4gICAgICAgIGNvbnN0IHBob25lRG93biA9IGRldGFpbENvbnRlbnRIZWlnaHQucGhvbmVEb3duO1xyXG5cclxuICAgICAgICAvLyBPbiBzbWFsbCB3aW5kb3cgaGVpZ2h0LCB0aGUgZGV0YWlsIHBhbmUgaGVpZ2h0IHdvdWxkIGJlIHRoZSBzbWFsbGVyIHZhbHVlIFt3aW5kb3cgaGVpZ2h0ICogMC42LCBtYXhIZWlnaHRdXHJcbiAgICAgICAgaWYgKHBob25lRG93bikge1xyXG4gICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgPSBNYXRoLm1pbih0b3RhbEhlaWdodCAtIHBhcmVudE9mZnNldFRvcCwgcG90ZW50aWFsSGVpZ2h0KTtcclxuICAgICAgICAgICAgLy8gUHJldmVudHMgdGhlIGluaXRpYWwgc2l6ZSBleGNlZWQgbWF4IGhlaWdodFxyXG4gICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgPSBNYXRoLm1pbihwb3RlbnRpYWxIZWlnaHQsIG1heEhlaWdodCk7XHJcbiAgICAgICAgICAgIHBvdGVudGlhbEhlaWdodCA9IE1hdGgubWF4KHBvdGVudGlhbEhlaWdodCwgbWluSGVpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcbiAgICAgICAgICAgIGlmIChwb3J0SGVpZ2h0IDwgbWluSGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgPSBtaW5IZWlnaHQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9ydEhlaWdodCA+IG1pbkhlaWdodCAmJiBwb3J0SGVpZ2h0IDwgbWF4SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBNYXRoLmNlaWwgY2FuIG1ha2UgY2FsY3VsYXRpb24gd2l0aG91dCByb3VuZGluZyBpc3N1ZXMuXHJcbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgPSBNYXRoLmNlaWwocG9ydEhlaWdodCAqIDAuNik7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9ydEhlaWdodCA+IG1heEhlaWdodCAmJiBwb3J0SGVpZ2h0ICogMC40ID4gbWF4SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgPSBNYXRoLmNlaWwobWF4SGVpZ2h0KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwb3J0SGVpZ2h0ID4gbWF4SGVpZ2h0ICYmIHBvcnRIZWlnaHQgKiAwLjQgPiBtaW5IZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHBvdGVudGlhbEhlaWdodCA9IE1hdGguY2VpbChwb3J0SGVpZ2h0ICogMC40KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9ICcnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFNocmluayBvbmx5IGlmIGV4Y2VlZHMgcGFyZW50cyBvZmZzZXQgaGVpZ2h0O1xyXG4gICAgICAgICAgICBpZiAocG90ZW50aWFsSGVpZ2h0ID4gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFBhcmVudC5vZmZzZXRIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIC8vIFNldCBpbml0aWFsIGV4cGFuZGVkIGhlaWdodCB0byAzMHZoLlxyXG4gICAgICAgICAgICAgICAgLy8gUG9vciBkZXNpZ24gdGhhdCBuZWVkcyB0byByZS12aXNpdC5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG9uZVZoID0gdG90YWxIZWlnaHQgLyAxMDA7XHJcbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgPSBvbmVWaCAqIHRoaXMuaW5pdGlhbEhlaWdodFBlcmNlbnRhZ2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzbWUtYm9yZGVyLXRvcC1zbSBvbiB0aGUgZGV0YWlscyByZXNpemVyIGJvcmRlci5cclxuICAgICAgICAgICAgICAgIC8vIG1pbnVzIHRoZSBib3JkZXIgaGVpZ2h0IHRvIGdldCByaWQgb2YgdGhlIGV4dHJhIHNjcm9sbCBiYXIuXHJcbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgLT0gMTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcG90ZW50aWFsSGVpZ2h0ID0gTWF0aC5taW4ocG90ZW50aWFsSGVpZ2h0LCBtYXhIZWlnaHQpO1xyXG4gICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgPSBNYXRoLm1heChwb3RlbnRpYWxIZWlnaHQsIG1pbkhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUubWluSGVpZ2h0ID0gJyc7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuYXV0b0hlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGB7MH1weGAuZm9ybWF0KHBvdGVudGlhbEhlaWdodCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyB0aGUgaGVpZ2h0IHdvdWxkIGJlIGNoYW5nZWQgb24gd2luZG93IGhlaWdodCBvciB3aWR0aCBjaGFuZ2VcclxuICAgICAgICAgICAgLy8gcmUtY2FsY3VsYXRlIHRoZSBwb3RlbnRpYWwgaGVpZ2h0IHNob3VsZCBiZSBub3RpZnlpbmcgcGFyZW50cy5cclxuICAgICAgICAgICAgdGhpcy5sYXlvdXRDaGFuZ2VkLmVtaXQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5nZXRJbml0aWFsSG9zdENsYXNzZXMoKS5jb25jYXQoW1xyXG4gICAgICAgICAgICAnc21lLWFycmFuZ2Utc3RhY2stdidcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSWRCYWcoKTogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGV0YWlsc1NwYW46ICcnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG4iLCI8aDM+XHJcbiAgPGRpdiAjZXhwYW5kZXJcclxuICAgIGNsYXNzPVwic21lLWJ1dHRvbiBzbWUtYnV0dG9uLXRyaWdnZXIgc21lLWJ1dHRvbi1hdXRvLXdpZHRoIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLXBhZGRpbmctc3F1aXNoLXYtbWQgc21lLXBhZGRpbmctaG9yaXpvbnRhbC1sZyBzbWUtcG9zaXRpb24tc3RyZXRjaC1oIHNtZS1wb3NpdGlvbi1sZWZ0LWlubGluZSBzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1mb2N1cy16b25lXCJcclxuICAgIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIiAoY2xpY2spPVwidG9nZ2xlRXhwYW5zaW9uKClcIiBbc3R5bGUubWluLWhlaWdodF09XCJtaW5FeHBhbmRlckhlaWdodFwiXHJcbiAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiEhaXNFeHBhbmRlZFwiIFthdHRyLmFyaWEtZGVzY3JpYmVkQnldPVwiaWRCYWcuZGV0YWlsc1NwYW5cIj5cclxuICAgIDxzcGFuIGNsYXNzPVwic21lLWZvbnQtaDMgc21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtYXJyYW5nZS1lbGxpcHNpc1wiPnt7IGhlYWRlciB9fTwvc3Bhbj5cclxuICAgIDxzcGFuICpuZ0lmPVwiIWNoZXZyb25JbnZlcnRlZFwiIGNsYXNzPVwic21lLWljb24gc21lLXBvc2l0aW9uLWZsZXgtbm9uZVwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsnc21lLWljb24tY2hldnJvblVwTWVkJzogIWlzRXhwYW5kZWQsICdzbWUtaWNvbi1jaGV2cm9uRG93bk1lZCc6IGlzRXhwYW5kZWR9XCJcclxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJjaGV2cm9uSW52ZXJ0ZWRcIiBjbGFzcz1cInNtZS1pY29uIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmVcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7J3NtZS1pY29uLWNoZXZyb25VcE1lZCc6IGlzRXhwYW5kZWQsICdzbWUtaWNvbi1jaGV2cm9uRG93bk1lZCc6ICFpc0V4cGFuZGVkfVwiXHJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJzbWUtc2NyZWVuLXJlYWRlclwiIFtpZF09XCJpZEJhZy5kZXRhaWxzU3BhblwiPiB7eyByZXNvdXJjZVN0cmluZ3MuQXJpYURlc2NyaXB0aW9uIH19PC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvaDM+XHJcblxyXG48ZGl2IGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtbGF5b3V0LXJlbGF0aXZlXCIgW2NsYXNzLnNtZS1tYXJnaW4taG9yaXpvbnRhbC1sZ109XCJzaG91bGRDb250ZW50U2xpbVwiIFtjbGFzcy5zbWUtcG9zaXRpb24tc3RyZXRjaC12XT1cImF1dG9IZWlnaHRcIj5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnc21lLWxheW91dC1hYnNvbHV0ZS1waG9uZS11cCBzbWUtcG9zaXRpb24taW5zZXQtbm9uZSBzbWUtcGFkZGluZy1ib3R0b20tc20gc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0byc6ICFhdXRvSGVpZ2h0LCAnc21lLWxheW91dC1yZWxhdGl2ZSBzbWUtcG9zaXRpb24tc3RyZXRjaC12JzogYXV0b0hlaWdodH1cIlxyXG4gICAgW2NsYXNzLnNtZS1sYXlvdXQtbm9uZV09XCIhaXNFeHBhbmRlZFwiPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxociAqbmdJZj1cImFkZEJvdHRvbUJvcmRlclwiPlxyXG4iXX0=
@@ -19,6 +19,7 @@ export * from './breadcrumb-header/index';
19
19
  export * from './breadcrumb/index';
20
20
  export * from './chart/index';
21
21
  export * from './common/index';
22
+ export * from './context-menu/index';
22
23
  export * from './data-table/index';
23
24
  export * from './details/index';
24
25
  export * from './dialog/index';
@@ -48,6 +49,10 @@ export * from './snap-in-extension/index';
48
49
  export * from './split-view/index';
49
50
  export * from './tile/index';
50
51
  export * from './tooltip/index';
52
+ export * from './ux/sme-ux-content/index';
53
+ export * from './ux/sme-ux-footer/index';
54
+ export * from './ux/sme-ux-page/index';
51
55
  export * from './wizard/index';
52
- export * from './context-menu/index';
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN4RixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUN4RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWpELGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEJhY2tkcm9wQ29tcG9uZW50IH0gZnJvbSAnLi9iYWNrZHJvcC9iYWNrZHJvcC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBCYWNrZHJvcE1vZHVsZSB9IGZyb20gJy4vYmFja2Ryb3AvYmFja2Ryb3AubW9kdWxlJztcclxuZXhwb3J0IHsgVG9vbEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vdG9vbC1oZWFkZXIvdG9vbC1oZWFkZXIuY29tcG9uZW50JztcclxuZXhwb3J0IHsgVG9vbEhlYWRlck1vZHVsZSB9IGZyb20gJy4vdG9vbC1oZWFkZXIvdG9vbC1oZWFkZXIubW9kdWxlJztcclxuZXhwb3J0IHsgSWRsZUNvbXBvbmVudCB9IGZyb20gJy4vaWRsZS9pZGxlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IElkbGVNb2R1bGUgfSBmcm9tICcuL2lkbGUvaWRsZS5tb2R1bGUnO1xyXG5leHBvcnQgeyBVeEV4dGVuc2lvblJvb3RDb21wb25lbnQgfSBmcm9tICcuL2V4dGVuc2lvbi1yb290L3V4LWV4dGVuc2lvbi1yb290LmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IEJhY2tncm91bmRFeHRlbnNpb25Sb290Q29tcG9uZW50IH0gZnJvbSAnLi9leHRlbnNpb24tcm9vdC9iYWNrZ3JvdW5kLWV4dGVuc2lvbi1yb290LmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IEV4dGVuc2lvblJvb3RNb2R1bGUgfSBmcm9tICcuL2V4dGVuc2lvbi1yb290L2V4dGVuc2lvbi1yb290Lm1vZHVsZSc7XHJcbmV4cG9ydCB7IFNtZVV4Q29tcG9uZW50IH0gZnJvbSAnLi91eC9zbWUtdXguY29tcG9uZW50JztcclxuZXhwb3J0IHsgU21lVXhNb2R1bGUgfSBmcm9tICcuL3V4L3NtZS11eC5tb2R1bGUnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9hY2NvcmRpb24vaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2FjdGlvbnMvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2FjdGl2ZS1kaXJlY3RvcnkvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2FsZXJ0LWJhci9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYmFkZ2UvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Jhbm5lci9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYnJlYWRjcnVtYi1oZWFkZXIvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2JyZWFkY3J1bWIvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0L2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9jb21tb24vaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2RhdGEtdGFibGUvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2RldGFpbHMvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2RpYWxvZy9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZG9jdW1lbnRhdGlvbi9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZG91Z2hudXQtY2hhcnQvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Ryb3Bkb3duL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9mb3JtL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9ndWlkZWQtcGFuZWwvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2hlYWRlci9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vaG9yaXpvbnRhbC1iYXItY2hhcnQvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ljb24vaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xheW91dC9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGVnZW5kL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9saW5lLWNoYXJ0L2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9sb2FkaW5nLXdoZWVsL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9tYXN0ZXItdmlldy9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbm9kZS1jcmVkZW50aWFscy1mb3JtL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9wYWdlLWFsZXJ0LWJhci9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcGl2b3QvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL3Byb3BlcnR5LWdyaWQvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWVkaXRvci9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcmVzaXplci9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hLWZvcm0vaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2V0dGluZ3MvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NuYXAtaW4tZXh0ZW5zaW9uL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9zcGxpdC12aWV3L2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi90aWxlL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi90b29sdGlwL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi93aXphcmQvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbnRleHQtbWVudS9pbmRleCc7XHJcblxyXG4iXX0=
56
+ export * from './wizard-lite/wizard-navigation-button/index';
57
+ export * from './wizard-lite/index';
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN4RixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUN4RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWpELGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBCYWNrZHJvcENvbXBvbmVudCB9IGZyb20gJy4vYmFja2Ryb3AvYmFja2Ryb3AuY29tcG9uZW50JztcclxuZXhwb3J0IHsgQmFja2Ryb3BNb2R1bGUgfSBmcm9tICcuL2JhY2tkcm9wL2JhY2tkcm9wLm1vZHVsZSc7XHJcbmV4cG9ydCB7IFRvb2xIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL3Rvb2wtaGVhZGVyL3Rvb2wtaGVhZGVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IFRvb2xIZWFkZXJNb2R1bGUgfSBmcm9tICcuL3Rvb2wtaGVhZGVyL3Rvb2wtaGVhZGVyLm1vZHVsZSc7XHJcbmV4cG9ydCB7IElkbGVDb21wb25lbnQgfSBmcm9tICcuL2lkbGUvaWRsZS5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBJZGxlTW9kdWxlIH0gZnJvbSAnLi9pZGxlL2lkbGUubW9kdWxlJztcclxuZXhwb3J0IHsgVXhFeHRlbnNpb25Sb290Q29tcG9uZW50IH0gZnJvbSAnLi9leHRlbnNpb24tcm9vdC91eC1leHRlbnNpb24tcm9vdC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBCYWNrZ3JvdW5kRXh0ZW5zaW9uUm9vdENvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9uLXJvb3QvYmFja2dyb3VuZC1leHRlbnNpb24tcm9vdC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBFeHRlbnNpb25Sb290TW9kdWxlIH0gZnJvbSAnLi9leHRlbnNpb24tcm9vdC9leHRlbnNpb24tcm9vdC5tb2R1bGUnO1xyXG5leHBvcnQgeyBTbWVVeENvbXBvbmVudCB9IGZyb20gJy4vdXgvc21lLXV4LmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IFNtZVV4TW9kdWxlIH0gZnJvbSAnLi91eC9zbWUtdXgubW9kdWxlJztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vYWNjb3JkaW9uL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9hY3Rpb25zL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9hY3RpdmUtZGlyZWN0b3J5L2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9hbGVydC1iYXIvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2JhZGdlL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9iYW5uZXIvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2JyZWFkY3J1bWItaGVhZGVyL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9icmVhZGNydW1iL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9jaGFydC9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY29tbW9uL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9jb250ZXh0LW1lbnUvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2RhdGEtdGFibGUvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2RldGFpbHMvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2RpYWxvZy9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZG9jdW1lbnRhdGlvbi9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZG91Z2hudXQtY2hhcnQvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Ryb3Bkb3duL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9mb3JtL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9ndWlkZWQtcGFuZWwvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2hlYWRlci9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vaG9yaXpvbnRhbC1iYXItY2hhcnQvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ljb24vaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xheW91dC9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGVnZW5kL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9saW5lLWNoYXJ0L2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9sb2FkaW5nLXdoZWVsL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9tYXN0ZXItdmlldy9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbm9kZS1jcmVkZW50aWFscy1mb3JtL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9wYWdlLWFsZXJ0LWJhci9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcGl2b3QvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL3Byb3BlcnR5LWdyaWQvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWVkaXRvci9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcmVzaXplci9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hLWZvcm0vaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2V0dGluZ3MvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NuYXAtaW4tZXh0ZW5zaW9uL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9zcGxpdC12aWV3L2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi90aWxlL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi90b29sdGlwL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi91eC9zbWUtdXgtY29udGVudC9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdXgvc21lLXV4LWZvb3Rlci9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdXgvc21lLXV4LXBhZ2UvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL3dpemFyZC9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vd2l6YXJkLWxpdGUvd2l6YXJkLW5hdmlnYXRpb24tYnV0dG9uL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi93aXphcmQtbGl0ZS9pbmRleCc7XHJcbiJdfQ==
@@ -219,6 +219,10 @@ export class LayoutComponent extends CoreBaseComponent {
219
219
  this.resetFlex();
220
220
  }
221
221
  this.layoutDrivenType = layoutDrivenType;
222
+ // The vertical space gap is determined by the itemVerticalSpace parameter.
223
+ // For the defaultMode, it is controlled by the padding bottom of the grid item.
224
+ // For the responsive manager driven mode, it is controlled by the grid-gap.
225
+ this.hostElement.nativeElement.style.gridGap = layoutDrivenType === LayoutDrivenType.ResponsiveWindowManager ? `${this.itemVerticalSpace}px 0px` : 'unset';
222
226
  }
223
227
  getTotalColumnSpan(layoutItems) {
224
228
  this.columnSpanTotal = 0;
@@ -304,11 +308,12 @@ export class LayoutComponent extends CoreBaseComponent {
304
308
  * @param availableLayoutWidthInPixel available width in pixel horizontally.
305
309
  */
306
310
  configDrivenCalculationDefault(layoutItems, availableLayoutWidthInPixel) {
311
+ var _a;
307
312
  const defaultWidthForLayoutItemInPixel = 200;
308
313
  let widthUsedInPixel = 0;
309
314
  let percentageSoFar = 0;
310
315
  for (let i = 0; i < layoutItems.length; i++) {
311
- if (layoutItems[i].customConfig.width) {
316
+ if ((_a = layoutItems[i].customConfig) === null || _a === void 0 ? void 0 : _a.width) {
312
317
  const widthObject = layoutItems[i].customConfig.width;
313
318
  const remainingWidthInPixel = availableLayoutWidthInPixel - widthUsedInPixel;
314
319
  if (widthObject.type === LayoutItemConfigPropertyWidthType.Percentage) {
@@ -431,6 +436,9 @@ export class LayoutComponent extends CoreBaseComponent {
431
436
  updateCustomConfig(layoutItems) {
432
437
  const widthType = [];
433
438
  for (let i = 0; i < layoutItems.length; i++) {
439
+ if (!this.currentLayoutItemConfig[i]) {
440
+ continue;
441
+ }
434
442
  layoutItems[i].customConfig = this.currentLayoutItemConfig[i];
435
443
  if (!widthType.includes(layoutItems[i].customConfig.width.type)) {
436
444
  widthType.push(layoutItems[i].customConfig.width.type);
@@ -506,4 +514,4 @@ __decorate([
506
514
  }], windowBreakpointChanged: [{
507
515
  type: Output
508
516
  }], refresh: [], deferredOnLayoutChanged: [], onWindowBreakpointChanged: [] }); })();
509
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2xheW91dC9sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvbGF5b3V0L2xheW91dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BJLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDakcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNuRyxPQUFPLEVBQWtDLGdCQUFnQixFQUFvQixvQkFBb0IsRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlKLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7O0FBRW5GOztHQUVHO0FBS0gsTUFBTSxPQUFPLGVB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LENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUN2QixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7O2lHQWxoQlEsZUFBZSwwREFnSGdCLG1CQUFtQjt1RUFoSGxELGVBQWU7b0NBV1AsbUJBQW1CO29DQU1uQix5QkFBeUI7Ozs7Ozs7UUNyQzlDLGtCQUFrRDs7QUQySjlDO0lBREMsUUFBUSxFQUFFOzs7OzhDQUlWO0FBYUQ7SUFEQyxRQUFRLEVBQUU7Ozs7OERBR1Y7QUFPRDtJQURDLEtBQUssRUFBRTs7OztnRUFPUDt1RkF0S1EsZUFBZTtjQUozQixTQUFTO2VBQUM7Z0JBQ1AsUUFBUSxFQUFFLFlBQVk7Z0JBQ3RCLFdBQVcsRUFBRSx5QkFBeUI7YUFDekM7O3NCQWlIb0MsTUFBTTt1QkFBQyxtQkFBbUI7d0JBcEduRCxXQUFXO2tCQURsQixlQUFlO21CQUFDLG1CQUFtQjtZQU81QixXQUFXO2tCQURsQixlQUFlO21CQUFDLHlCQUF5QjtZQVluQyxtQkFBbUI7a0JBRHpCLEtBQUs7WUFPQyxpQkFBaUI7a0JBRHZCLEtBQUs7WUFPQyxpQkFBaUI7a0JBRHZCLEtBQUs7WUFPQyxVQUFVO2tCQURoQixLQUFLO1lBT0MsV0FBVztrQkFEakIsS0FBSztZQU9DLGdDQUFnQztrQkFEdEMsS0FBSztZQWFDLFlBQVk7a0JBRGxCLEtBQUs7WUFXQyxhQUFhO2tCQURuQixNQUFNO1lBT0EsdUJBQXVCO2tCQUQ3QixNQUFNO1lBaURBLE9BQU8sTUFnQk4sdUJBQXVCLE1BU3hCLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0b3IsIElucHV0LCBPdXRwdXQsIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEZWJvdW5jZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL2RlYm91bmNlLmRlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBZaWVsZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL3lpZWxkLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IExvZ0xldmVsIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2ctbGV2ZWwnO1xyXG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2dnaW5nJztcclxuaW1wb3J0IHsgQ29yZUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21tb24vYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMYXlvdXQsIFNNRV9MQVlPVVRfUFJPVklERVIgfSBmcm9tICcuLi9jb21tb24vbGF5b3V0JztcclxuaW1wb3J0IHsgU21lUmVzcG9uc2l2ZVdpbmRvd0JyZWFrcG9pbnRzIH0gZnJvbSAnLi4vY29tbW9uL3NtZS1yZXNwb25zaXZlLXdpbmRvdy1tYW5hZ2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExheW91dENvbmZpZywgTGF5b3V0Q29uZmlnSXRlbSwgTGF5b3V0RHJpdmVuVHlwZSwgTGF5b3V0SXRlbUNvbmZpZywgTGF5b3V0SXRlbUNvbmZpZ01vZGUsIExheW91dEl0ZW1Db25maWdQcm9wZXJ0eVdpZHRoVHlwZSB9IGZyb20gJy4vbGF5b3V0LWNvbmZpZyc7XHJcbmltcG9ydCB7IExheW91dERlZmluaXRpb25Db21wb25lbnQgfSBmcm9tICcuL2xheW91dC1kZWZpbml0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExheW91dEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2xheW91dC1pdGVtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExheW91dFJlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyIH0gZnJvbSAnLi9sYXlvdXQtcmVzcG9uc2l2ZS13aW5kb3ctbWFuYWdlcic7XHJcblxyXG4vKipcclxuICogTGF5b3V0IGNvbXBvbmVudFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1sYXlvdXQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xheW91dC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIExheW91dENvbXBvbmVudCBleHRlbmRzIENvcmVCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzb3VyY2UgbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmdcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBsb2dTb3VyY2VOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiAnTGF5b3V0Q29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsYXlvdXQgaXRlbXMgY29udGVudCBjaGlsZHJlbi5cclxuICAgICAqL1xyXG4gICAgQENvbnRlbnRDaGlsZHJlbihMYXlvdXRJdGVtQ29tcG9uZW50KVxyXG4gICAgcHJpdmF0ZSBsYXlvdXRJdGVtczogUXVlcnlMaXN0PExheW91dEl0ZW1Db21wb25lbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGxheW91dCBkZWZpbml0aW9uIGNvbnRlbnQgY2hpbGRyZW4uXHJcbiAgICAgKi9cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oTGF5b3V0RGVmaW5pdGlvbkNvbXBvbmVudClcclxuICAgIHByaXZhdGUgZGVmaW5pdGlvbnM6IFF1ZXJ5TGlzdDxMYXlvdXREZWZpbml0aW9uQ29tcG9uZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IGxheW91dCBkZWZpbml0aW9uIHZhbHVlIGJhc2VkIG9uIGN1c3RvbSBsYXlvdXQgZGVmaW5pdGlvbiBhbmQgdGhlIGJyb3dzZXIgd2luZG93IHNpemUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjdXJyZW50TGF5b3V0RGVmaW5pdGlvbjogTGF5b3V0RGVmaW5pdGlvbkNvbXBvbmVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkZWZhdWx0IGhvcml6b250YWwgc3BhY2UgaW4gYmV0d2VlbiBsYXlvdXQgaXRlbXMuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaXRlbUhvcml6b250YWxTcGFjZSA9IDMyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRlZmF1bHQgdmVydGljYWwgc3BhY2UgaW4gYmV0d2VlbiBsYXlvdXQgaXRlbXMuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaXRlbVZlcnRpY2FsU3BhY2UgPSAzMjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHRydWUsIHdpbGwgYWx3YXlzIHRyeSB0byBmaWxsIHRoZSB3aG9sZSByb3cgZm9yIGVhY2ggbGF5b3V0IGl0ZW0uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdHJ5VG9GaWxsV2hvbGVSb3cgPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGxheW91dCBkZWZpbml0aW9uLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRlZmluaXRpb246IHsgW2NvbHVtbkNvdW50OiBudW1iZXJdOiB7IGxvd2VyV2lkdGg/OiBudW1iZXIsIHVwcGVyV2lkdGg/OiBudW1iZXIgfSB9ID0ge307XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBmYWxzZSwgaXQgd2lsbCBub3QgYXNzaWduIGV4dHJhIHBhZGRpbmdzIHRvIHRoZSByaWdodCBmb3IgdGhlIGxhc3QgbGF5b3V0IGl0ZW0uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcGFkTGFzdEl0ZW0gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHRydWUsIG5vdCBleHRyYSByaWdodCBwYWRkaW5nIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgaXRlbSB0aGF0IHVzZXMgdGhlIHdob2xlIHdpZHRoIG9mIHRoZSByb3cuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbm9FeHRyYVJpZ2h0UGFkZGluZ09uZUl0ZW1QZXJSb3cgPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBsYXlvdXQgaXMgZm9yIHNldHRpbmdzIHdoZXJlIGl0IGNvbnRhaW5zIGEgbGVmdCBhbmQgcmlnaHQgbGF5b3V0IGl0ZW0uXHJcbiAgICAgKiBJZiB0cnVlLCB3aWxsIGFwcGx5IHNwZWNpYWwgZGVzaWduIGZvciBzZXR0aW5ncyBsYXlvdXQuXHJcbiAgICAgKiBPbiBwaG9uZS11cCwgdGhlIGxlZnQgc2lkZSBuYXZpZ2F0aW9uIGxheW91dCBpdGVtIHdpbGwgYmUgdXNpbmcgYSBmaXhlZCB3aWR0aCBieSBkZWZhdWx0IDMwMHB4LFxyXG4gICAgICogdGhlIHJpZ2h0IHNpZGUgbGF5b3V0IGl0ZW0gd2lsbCBiZSB1c2luZyB0aGUgcmVtYWluaW5nIHdpZHRoIGJ5IGRlZmF1bHQuXHJcbiAgICAgKlxyXG4gICAgICogT24gcGhvbmUtZG93biBvciA0MDAlIHpvb20sIG5vdGhpbmcgaXMgZGlmZmVyZW50IGZyb20gdGhlIHJlZ3VsYXIgc2V0dGluZ3MgcGFnZSxcclxuICAgICAqIHRoZSBsZWZ0IHJpZ2h0IGxheW91dCB3aWxsIGJlIHRyYW5zZm9ybWVkIHRvIHRvcCBib3R0b20gbGF5b3V0LlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGxheW91dENvbmZpZzogTGF5b3V0Q29uZmlnID0ge1xyXG4gICAgICAgIFtTbWVSZXNwb25zaXZlV2luZG93QnJlYWtwb2ludHMuUGhvbmVVcF06IHsnbW9kZSc6IExheW91dEl0ZW1Db25maWdNb2RlLkRlZmF1bHR9LFxyXG4gICAgICAgIFtTbWVSZXNwb25zaXZlV2luZG93QnJlYWtwb2ludHMuUGhvbmVEb3duXTogeydtb2RlJzogTGF5b3V0SXRlbUNvbmZpZ01vZGUuRGVmYXVsdH0sXHJcbiAgICAgICAgW1NtZVJlc3BvbnNpdmVXaW5kb3dCcmVha3BvaW50cy5SZWZsb3ddOiB7J21vZGUnOiBMYXlvdXRJdGVtQ29uZmlnTW9kZS5EZWZhdWx0fVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBMYXlvdXQgaW50ZXJmYWNlXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGxheW91dENoYW5nZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBMYXlvdXQgaW50ZXJmYWNlXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHdpbmRvd0JyZWFrcG9pbnRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSBjb2x1bW5Db3VudCA9IDE7XHJcbiAgICBwcml2YXRlIGNvbHVtblNwYW5Ub3RhbCA9IDA7XHJcbiAgICBwcml2YXRlIGxheW91dFJlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyOiBMYXlvdXRSZXNwb25zaXZlV2luZG93TWFuYWdlcjtcclxuICAgIHByaXZhdGUgbGF5b3V0RHJpdmVuVHlwZSA9IExheW91dERyaXZlblR5cGUuRGVmYXVsdDtcclxuICAgIHByaXZhdGUgY3VycmVudExheW91dEl0ZW1Db25maWc6IExheW91dEl0ZW1Db25maWdbXTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3R5bGVQaXhlbCA9ICdweCc7XHJcblxyXG4gICAgcHVibGljIGdldCBjdXJyZW50TGF5b3V0RGVmaW5pdGlvbk5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGF5b3V0RGVmaW5pdGlvbiA/IHRoaXMuY3VycmVudExheW91dERlZmluaXRpb24ubmFtZSA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudExheW91dERyaXZlblR5cGUoKTogTGF5b3V0RHJpdmVuVHlwZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0RHJpdmVuVHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRXaW5kb3dCcmVha3BvaW50KCk6IFNtZVJlc3BvbnNpdmVXaW5kb3dCcmVha3BvaW50cyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXI/LnByZXZTaXplLnNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBjdXJyZW50TGF5b3V0SXRlbXMoKTogUXVlcnlMaXN0PExheW91dEl0ZW1Db21wb25lbnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRJdGVtcztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IsIEBJbmplY3QoU01FX0xBWU9VVF9QUk9WSURFUikgbGF5b3V0OiBMYXlvdXQpIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcblxyXG4gICAgICAgIGlmIChsYXlvdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5sYXlvdXRSZXNwb25zaXZlV2luZG93TWFuYWdlciA9IG5ldyBMYXlvdXRSZXNwb25zaXZlV2luZG93TWFuYWdlcihsYXlvdXQpO1xyXG4gICAgICAgICAgICAvLyBvbiBwYXJlbnQgbGF5b3V0IGNoYW5nZXMsIHJlLWVtaXQgdGhlIGxheW91dCBjaGFuZ2UgdG8gb3VyIGV2ZW50XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGxheW91dC5sYXlvdXRDaGFuZ2VkLnN1YnNjcmliZSgoKCkgPT4gdGhpcy5vbkxheW91dENoYW5nZWQoKSkpKTtcclxuICAgICAgICAgICAgLy8gb24gd2luZG93IGJyZWFrIHBvaW50IGNoYW5nZXMsIGVtaXQgdGhlIGV2ZW50IGFib3V0IGNyaXRpY2FsIGNsYXNzZXMgYW5kIHN0eWxpbmcgdXBkYXRlcyBzaWduYWwuXHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGxheW91dC53aW5kb3dCcmVha3BvaW50Q2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbldpbmRvd0JyZWFrcG9pbnRDaGFuZ2VkKCkpKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGVmZXJyZWRPbkxheW91dENoYW5nZWQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5sYXlvdXRJdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgb3BlbiBBUEkgZm9yIHJlZnJlc2hpbmcgdGhlIGNvbnRyb2wgZXh0ZXJuYWxseS5cclxuICAgICAqL1xyXG4gICAgQERlYm91bmNlKClcclxuICAgIHB1YmxpYyByZWZyZXNoKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucmVzZXRGbGV4KCk7XHJcbiAgICAgICAgdGhpcy5vbkxheW91dENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9uIGxheW91dCBjaGFuZ2VkIGV2ZW50IGhhbmRsZXIsIG9jY3VycyBldmVyeSB0aW1lIHRoZSBsYXlvdXQgaGFzIGJlZW4gY2hhbmdlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uTGF5b3V0Q2hhbmdlZCgpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxheW91dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRlZmVycmVkIGxheW91dCBjaGFuZ2VkIGhhbmRsZXIuXHJcbiAgICAgKi9cclxuICAgIEBEZWJvdW5jZSgpXHJcbiAgICBwcml2YXRlIGRlZmVycmVkT25MYXlvdXRDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMub25MYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgb24gd2luZG93IGJyZWFrcG9pbnQgY2hhbmdlZCBoYW5kbGVyLlxyXG4gICAgICogQWRkaW5nIHlpZWxkIGZvciBjb21wb25lbnQgdG8gZ2V0IEVsZW1lbnRSZWYgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uXHJcbiAgICAgKi9cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwdWJsaWMgb25XaW5kb3dCcmVha3BvaW50Q2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubGF5b3V0SXRlbXMgfHwgIXRoaXMubGF5b3V0SXRlbXMudG9BcnJheSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGF5b3V0UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIub25XaW5kb3dTaXplQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZHMgY2xhc3NlcyBsaXN0ZWQgdG8gdGhlIHJvb3QgY29tcG9uZW50XHJcbiAgICAvLyBPbiBwaG9uZSBkb3duIHRoZSBmbGV4IHN0YXJ0IG5lZWRzIHRvIGJlIGZsZXggc3RhcnQgdG8gbWFrZSBzdXJlIG5vIGV4dHJhIHNwYWNlIGJlaW5nIGdlbmVyYXRlZC5cclxuICAgIHByb3RlY3RlZCBnZXRJbml0aWFsSG9zdENsYXNzZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldEluaXRpYWxIb3N0Q2xhc3NlcygpLmNvbmNhdChbXHJcbiAgICAgICAgICAgICdzbWUtYXJyYW5nZS13cmFwc3RhY2staCcsICdzbWUtbGF5b3V0LXBob25lLWRvd24nXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUxheW91dCgpOiB2b2lkIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxheW91dEl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGxheW91dEl0ZW1zID0gdGhpcy5sYXlvdXRJdGVtcy50b0FycmF5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VG90YWxDb2x1bW5TcGFuKGxheW91dEl0ZW1zKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRXaW5kb3dTaXplID0gdGhpcy5sYXlvdXRSZXNwb25zaXZlV2luZG93TWFuYWdlci5wcmV2U2l6ZS5zaXplO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxheW91dENvbmZpZyhjdXJyZW50V2luZG93U2l6ZSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBsYXlvdXRXaWR0aCA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCB8fCBOdW1iZXIuTUFYX1ZBTFVFO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sYXlvdXREcml2ZW5UeXBlID09PSBMYXlvdXREcml2ZW5UeXBlLkRlZmF1bHQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25zID0gdGhpcy5kZWZpbml0aW9ucy50b0FycmF5KCkuc29ydCgoYSwgYikgPT4gYS51bnRpbCAtIGIudW50aWwpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNMYXlvdXREZWZpbml0aW9uID0gdGhpcy5jdXJyZW50TGF5b3V0RGVmaW5pdGlvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ3VycmVudExheW91dERlZmluaXRpb24oZGVmaW5pdGlvbnMsIGxheW91dFdpZHRoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtSG9yaXpvbnRhbFNwYWNlUGVyY2VudGFnZSA9IE1hdGgucm91bmQodGhpcy5pdGVtSG9yaXpvbnRhbFNwYWNlICogMTAwIC8gbGF5b3V0V2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uQ291bnRNb2RpZmllciA9IHRoaXMucGFkTGFzdEl0ZW0gPyAwIDogMTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZUxheW91dFdpZHRoUGVyY2VudGFnZSA9IDEwMCAtIGl0ZW1Ib3Jpem9udGFsU3BhY2VQZXJjZW50YWdlICogKHRoaXMuY29sdW1uQ291bnQgLSBjb2x1bW5Db3VudE1vZGlmaWVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0RGVmaW5pdGlvbldpdGhDb2x1bW5TcGFuQ2FsY3VsYXRpb24obGF5b3V0SXRlbXMsIGF2YWlsYWJsZUxheW91dFdpZHRoUGVyY2VudGFnZSwgaXRlbUhvcml6b250YWxTcGFjZVBlcmNlbnRhZ2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0xheW91dERlZmluaXRpb24gIT09IHRoaXMuY3VycmVudExheW91dERlZmluaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXlvdXRDaGFuZ2VkLmVtaXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxheW91dERyaXZlblR5cGUgPT09IExheW91dERyaXZlblR5cGUuUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBhdmFpbGFibGVMYXlvdXRXaWR0aEluUGl4ZWwgPSBsYXlvdXRXaWR0aCAtIHRoaXMuaXRlbUhvcml6b250YWxTcGFjZTtcclxuICAgICAgICAgICAgICAgIGF2YWlsYWJsZUxheW91dFdpZHRoSW5QaXhlbCA9IGF2YWlsYWJsZUxheW91dFdpZHRoSW5QaXhlbCA+IDAgPyBhdmFpbGFibGVMYXlvdXRXaWR0aEluUGl4ZWwgOiAwO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGVMYXlvdXRXaWR0aEluUGl4ZWwgPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ0RyaXZlbkNhbGN1bGF0aW9uKGxheW91dEl0ZW1zLCBhdmFpbGFibGVMYXlvdXRXaWR0aEluUGl4ZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVMYXlvdXRDb25maWcoY3VycmVudFdpbmRvd1NpemU6IFNtZVJlc3BvbnNpdmVXaW5kb3dCcmVha3BvaW50cyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghY3VycmVudFdpbmRvd1NpemUpIHtcclxuICAgICAgICAgICAgdGhpcy5sYXlvdXREcml2ZW5UeXBlID0gTGF5b3V0RHJpdmVuVHlwZS5EZWZhdWx0O1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwaG9uZVVwID0gdGhpcy5sYXlvdXRDb25maWcuUGhvbmVVcDtcclxuICAgICAgICBjb25zdCBwaG9uZURvd24gPSB0aGlzLmxheW91dENvbmZpZy5QaG9uZURvd247XHJcbiAgICAgICAgY29uc3QgcmVmbG93ID0gdGhpcy5sYXlvdXRDb25maWcuUmVmbG93O1xyXG5cclxuICAgICAgICBpZiAoIXBob25lVXAgfHwgIXBob25lRG93biB8fCAhcmVmbG93KSB7XHJcbiAgICAgICAgICAgIExvZ2dpbmcubG9nKHtcclxuICAgICAgICAgICAgICAgIGxldmVsOiBMb2dMZXZlbC5EZWJ1ZyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIGxheW91dCBjb25maWcgaGFzIGJlZW4gcGFzc2VkIGluJyxcclxuICAgICAgICAgICAgICAgIHNvdXJjZTogJ0RhdGFUYWJsZUNvbXBvbmVudC5vbkNvbnRlbnRUYWJsZVByZXNzZWQnXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdE1vZGUgPSB7J21vZGUnOiBMYXlvdXRJdGVtQ29uZmlnTW9kZS5EZWZhdWx0fTtcclxuXHJcbiAgICAgICAgICAgIGlmICghcGhvbmVVcCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXRDb25maWcuUGhvbmVVcCA9IGRlZmF1bHRNb2RlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXBob25lRG93bikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXRDb25maWcuUGhvbmVEb3duID0gZGVmYXVsdE1vZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghcmVmbG93KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dENvbmZpZy5SZWZsb3cgPSBkZWZhdWx0TW9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudENvbmZpZzogTGF5b3V0Q29uZmlnSXRlbSA9IHRoaXMubGF5b3V0Q29uZmlnW2N1cnJlbnRXaW5kb3dTaXplXTtcclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnRDb25maWcubW9kZSA9PT0gIExheW91dEl0ZW1Db25maWdNb2RlLkRlZmF1bHQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRMYXlvdXREcml2ZW5UeXBlKExheW91dERyaXZlblR5cGUuRGVmYXVsdCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Q29uZmlnLm1vZGUgPT09ICBMYXlvdXRJdGVtQ29uZmlnTW9kZS5DdXN0b20gJiYgY3VycmVudENvbmZpZy5jb25maWcgJiYgY3VycmVudENvbmZpZy5jb25maWcubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TGF5b3V0RHJpdmVuVHlwZShMYXlvdXREcml2ZW5UeXBlLlJlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGF5b3V0SXRlbUNvbmZpZyA9IGN1cnJlbnRDb25maWcuY29uZmlnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlc2V0RmxleCgpIHtcclxuICAgICAgICBjb25zdCBsYXlvdXRJdGVtcyA9IHRoaXMubGF5b3V0SXRlbXMudG9BcnJheSgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5b3V0SXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbGF5b3V0SXRlbSA9IGxheW91dEl0ZW1zW2ldO1xyXG4gICAgICAgICAgICBpZiAobGF5b3V0SXRlbS5mbGV4KSB7XHJcbiAgICAgICAgICAgICAgICBsYXlvdXRJdGVtLmZsZXggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRMYXlvdXREcml2ZW5UeXBlKGxheW91dERyaXZlblR5cGU6IExheW91dERyaXZlblR5cGUpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5sYXlvdXREcml2ZW5UeXBlID09PSBMYXlvdXREcml2ZW5UeXBlLlJlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyICYmIGxheW91dERyaXZlblR5cGUgPT09IExheW91dERyaXZlblR5cGUuRGVmYXVsdCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2V0RmxleCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sYXlvdXREcml2ZW5UeXBlID0gbGF5b3V0RHJpdmVuVHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFRvdGFsQ29sdW1uU3BhbihsYXlvdXRJdGVtczogTGF5b3V0SXRlbUNvbXBvbmVudFtdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5TcGFuVG90YWwgPSAwO1xyXG4gICAgICAgIGxheW91dEl0ZW1zLmZvckVhY2goaXRlbSA9PiB0aGlzLmNvbHVtblNwYW5Ub3RhbCArPSBpdGVtLmNvbHVtblNwYW4pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ3VycmVudExheW91dERlZmluaXRpb24oXHJcbiAgICAgICAgZGVmaW5pdGlvbnM6IExheW91dERlZmluaXRpb25Db21wb25lbnRbXSxcclxuICAgICAgICBsYXlvdXRXaWR0aDogbnVtYmVyXHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRMYXlvdXREZWZpbml0aW9uID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBkZWZpbml0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uQ29sdW1ucyA9IGRlZmluaXRpb25zW2ldLmNvbHVtbnM7XHJcbiAgICAgICAgICAgIGlmIChsYXlvdXRXaWR0aCA8PSBkZWZpbml0aW9uc1tpXS51bnRpbCB8fCAodGhpcy50cnlUb0ZpbGxXaG9sZVJvdyAmJiB0aGlzLmNvbHVtblNwYW5Ub3RhbCA8PSBkZWZpbml0aW9uQ29sdW1ucykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uQ291bnQgPSBkZWZpbml0aW9uQ29sdW1ucztcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudExheW91dERlZmluaXRpb24gPSBkZWZpbml0aW9uc1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxheW91dERlZmluaXRpb25XaXRoQ29sdW1uU3BhbkNhbGN1bGF0aW9uKFxyXG4gICAgICAgIGxheW91dEl0ZW1zOiBMYXlvdXRJdGVtQ29tcG9uZW50W10sXHJcbiAgICAgICAgYXZhaWxhYmxlTGF5b3V0V2lkdGhQZXJjZW50YWdlOiBudW1iZXIsXHJcbiAgICAgICAgaXRlbUhvcml6b250YWxTcGFjZVBlcmNlbnRhZ2U6IG51bWJlclxyXG4gICAgKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHBlcmNlbnRhZ2VTb0ZhciA9IDA7XHJcbiAgICAgICAgbGV0IGNvbHVtbkluZGV4ID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheW91dEl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBwZXJjZW50YWdlID0gMDtcclxuICAgICAgICAgICAgY29sdW1uSW5kZXggKz0gbGF5b3V0SXRlbXNbaV0uY29sdW1uU3BhbjtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbkluZGV4ID09PSB0aGlzLmNvbHVtbkNvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJZiB0cnVlLCBpdCBtZWFucyB0aGlzIGxheW91dCBpdGVtIGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm93LlxyXG4gICAgICAgICAgICAgICAgLy8gSXQgZW5zdXJlcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdyB1c2UgcmVzdCBvZiB0aGUgcGVyY2VudGFnZS5cclxuICAgICAgICAgICAgICAgIC8vIEV4YW1wbGU6IElmIGl0J3MgYSAzIGNvbHVtbiBsYXlvdXQsIHRoZSBsYXN0IG9uZSdzIHBlcmNlbnRhZ2UgaXMgMzMuMzQlLCBub3QgMzMuMzMlXHJcbiAgICAgICAgICAgICAgICBwZXJjZW50YWdlID0gMTAwIC0gcGVyY2VudGFnZVNvRmFyO1xyXG4gICAgICAgICAgICAgICAgcGVyY2VudGFnZVNvRmFyID0gMDtcclxuICAgICAgICAgICAgICAgIC8vIDEgY29sdW1uIGFuZCAxIGxheW91dCBpdGVtLlxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbkluZGV4ID09PSAxICYmIHRoaXMuY29sdW1uQ291bnQgPT09IDEgJiYgIXRoaXMubm9FeHRyYVJpZ2h0UGFkZGluZ09uZUl0ZW1QZXJSb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBsYXlvdXRJdGVtc1tpXS5wYWRkaW5nUmlnaHQgPSAnMHB4JztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0SXRlbXNbaV0ucGFkZGluZ1JpZ2h0ID0gdGhpcy5wYWRMYXN0SXRlbSA/IHRoaXMuaXRlbUhvcml6b250YWxTcGFjZSArIHRoaXMuc3R5bGVQaXhlbCA6ICcwJyArIHRoaXMuc3R5bGVQaXhlbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4ID0gMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtblBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKGF2YWlsYWJsZUxheW91dFdpZHRoUGVyY2VudGFnZSAqIDEwMCAvIHRoaXMuY29sdW1uQ291bnQpIC8gMTAwO1xyXG4gICAgICAgICAgICAgICAgcGVyY2VudGFnZSA9IGxheW91dEl0ZW1zW2ldLmNvbHVtblNwYW4gKiAoY29sdW1uUGVyY2VudGFnZSArIGl0ZW1Ib3Jpem9udGFsU3BhY2VQZXJjZW50YWdlKTtcclxuICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2VTb0ZhciArPSBwZXJjZW50YWdlO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwZXJjZW50YWdlU29GYXIgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBwdXQgaXRlbSBvbiBuZXh0IHJvdyBpZiBpdCBpcyB0b28gYmlnXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlcmNlbnRhZ2UgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZSA9IDEwMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZVNvRmFyID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0SXRlbXNbaV0ucGFkZGluZ1JpZ2h0ID0gdGhpcy5wYWRMYXN0SXRlbSA/IHRoaXMuaXRlbUhvcml6b250YWxTcGFjZSArIHRoaXMuc3R5bGVQaXhlbCA6ICcwJyArIHRoaXMuc3R5bGVQaXhlbDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0SXRlbXNbaV0ucGFkZGluZ1JpZ2h0ID0gdGhpcy5pdGVtSG9yaXpvbnRhbFNwYWNlICsgdGhpcy5zdHlsZVBpeGVsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcz8uY3VycmVudExheW91dERlZmluaXRpb24/LmFkZEJvdHRvbVBhZGRpbmcpIHtcclxuICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLnBhZGRpbmdCb3R0b20gPSB0aGlzLml0ZW1WZXJ0aWNhbFNwYWNlICsgdGhpcy5zdHlsZVBpeGVsO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgYm90dG9tIHBhZGRpbmcgYWxyZWFkeSBleGlzdHMgYW5kIGN1cnJlbnRMYXlvdXREZWZpbml0aW9uLmFkZEJvdHRvbVBhZGRpbmcgaXMgRmFsc2VcclxuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgYm90dG9tIHBhZGRpbmcuXHJcbiAgICAgICAgICAgICAgICBpZiAobGF5b3V0SXRlbXNbaV0ucGFkZGluZ0JvdHRvbSA9PT0gdGhpcy5pdGVtVmVydGljYWxTcGFjZSArIHRoaXMuc3R5bGVQaXhlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLnBhZGRpbmdCb3R0b20gPSAnMCcgKyB0aGlzLnN0eWxlUGl4ZWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLndpZHRoID0gcGVyY2VudGFnZSArICclJztcclxuICAgICAgICAgICAgbGF5b3V0SXRlbXNbaV0ucmVhZHkoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb25maWdEcml2ZW5DYWxjdWxhdGlvbihcclxuICAgICAgICBsYXlvdXRJdGVtczogTGF5b3V0SXRlbUNvbXBvbmVudFtdLFxyXG4gICAgICAgIGF2YWlsYWJsZUxheW91dFdpZHRoSW5QaXhlbDogbnVtYmVyXHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBpc0h5YnJpZE1vZGUgPSB0aGlzLnVwZGF0ZUN1c3RvbUNvbmZpZyhsYXlvdXRJdGVtcyk7XHJcblxyXG4gICAgICAgIGlmIChpc0h5YnJpZE1vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maWdEcml2ZW5DYWxjdWxhdGlvbkh5YnJpZChsYXlvdXRJdGVtcywgYXZhaWxhYmxlTGF5b3V0V2lkdGhJblBpeGVsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ0RyaXZlbkNhbGN1bGF0aW9uRGVmYXVsdChsYXlvdXRJdGVtcywgYXZhaWxhYmxlTGF5b3V0V2lkdGhJblBpeGVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBkZWFsIHdpdGggY29uZmlndXJhdGlvbnMgdGhhdCBvbmx5IGhhcyBlaXRoZXIgcGVyY2VudGFnZSBvciBudW1iZXIuXHJcbiAgICAgKiBBaW1pbmcgYXQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBsYXlvdXRJdGVtcyBUaGUgbGF5b3V0IGl0ZW0gb2JqZWN0IGFycmF5XHJcbiAgICAgKiBAcGFyYW0gYXZhaWxhYmxlTGF5b3V0V2lkdGhJblBpeGVsIGF2YWlsYWJsZSB3aWR0aCBpbiBwaXhlbCBob3Jpem9udGFsbHkuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY29uZmlnRHJpdmVuQ2FsY3VsYXRpb25EZWZhdWx0KFxyXG4gICAgICAgIGxheW91dEl0ZW1zOiBMYXlvdXRJdGVtQ29tcG9uZW50W10sXHJcbiAgICAgICAgYXZhaWxhYmxlTGF5b3V0V2lkdGhJblBpeGVsOiBudW1iZXJcclxuICAgICkge1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRXaWR0aEZvckxheW91dEl0ZW1JblBpeGVsID0gMjAwO1xyXG5cclxuICAgICAgICBsZXQgd2lkdGhVc2VkSW5QaXhlbCA9IDA7XHJcbiAgICAgICAgbGV0IHBlcmNlbnRhZ2VTb0ZhciA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXlvdXRJdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAobGF5b3V0SXRlbXNbaV0uY3VzdG9tQ29uZmlnLndpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3aWR0aE9iamVjdCA9IGxheW91dEl0ZW1zW2ldLmN1c3RvbUNvbmZpZy53aWR0aDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ1dpZHRoSW5QaXhlbCA9IGF2YWlsYWJsZUxheW91dFdpZHRoSW5QaXhlbCAtIHdpZHRoVXNlZEluUGl4ZWw7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHdpZHRoT2JqZWN0LnR5cGUgPT09IExheW91dEl0ZW1Db25maWdQcm9wZXJ0eVdpZHRoVHlwZS5QZXJjZW50YWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoT2JqZWN0LnZhbHVlID4gMTAwIHx8IHdpZHRoT2JqZWN0LnZhbHVlIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aE9iamVjdC52YWx1ZSA9IDEwMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSB3aWR0aE9iamVjdC52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlU29GYXIgKz0gcGVyY2VudGFnZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFkZGluZ1JpZ2h0ID0gdGhpcy5pdGVtSG9yaXpvbnRhbFNwYWNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLnBhZGRpbmdSaWdodCA9IHBhZGRpbmdSaWdodC50b1N0cmluZygpLmNvbmNhdCh0aGlzLnN0eWxlUGl4ZWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLndpZHRoID0gcGVyY2VudGFnZSArICclJztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlcmNlbnRhZ2VTb0ZhciA+IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlU29GYXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2lkdGhPYmplY3QudHlwZSA9PT0gTGF5b3V0SXRlbUNvbmZpZ1Byb3BlcnR5V2lkdGhUeXBlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aE9iamVjdC52YWx1ZSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhPYmplY3QudmFsdWUgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdpZHRoRm9yTGF5b3V0SXRlbUluUGl4ZWwgPD0gcmVtYWluaW5nV2lkdGhJblBpeGVsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V2lkdGhGb3JMYXlvdXRJdGVtSW5QaXhlbCA6IHJlbWFpbmluZ1dpZHRoSW5QaXhlbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoVXNlZEluUGl4ZWwgKz0gd2lkdGhPYmplY3QudmFsdWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGhvdyB0byBkZXRlcm1pbmUgaWYgaXQgaXMgdGhlIGxhc3QgaXRlbSBpbiBhIHJvdz9cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWRkaW5nUmlnaHQgPSB0aGlzLml0ZW1Ib3Jpem9udGFsU3BhY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGhVc2VkSW5QaXhlbCArPSBwYWRkaW5nUmlnaHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLnBhZGRpbmdSaWdodCA9IHBhZGRpbmdSaWdodC50b1N0cmluZygpLmNvbmNhdCh0aGlzLnN0eWxlUGl4ZWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLndpZHRoID0gd2lkdGhPYmplY3QudmFsdWUgKyB0aGlzLnN0eWxlUGl4ZWw7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZ2dpbmcubG9nKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IExvZ0xldmVsLkRlYnVnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCB3aWR0aCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogJ0xheW91dENvbXBvbmVudC5jb25maWdEcml2ZW5DYWxjdWxhdGlvbkRlZmF1bHQnXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2dnaW5nLmxvZyh7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IExvZ0xldmVsLkRlYnVnLFxyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIHdpZHRoJyxcclxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6ICdMYXlvdXRDb21wb25lbnQuY29uZmlnRHJpdmVuQ2FsY3VsYXRpb25EZWZhdWx0J1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLnJlYWR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZGVhbCB3aXRoIGNvbmZpZ3VyYXRpb25zIHRoYXQgb25seSBoYXMgYm90aCBwZXJjZW50YWdlIGFuZCBudW1iZXIuXHJcbiAgICAgKiBBaW1pbmcgYXQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBsYXlvdXRJdGVtcyBUaGUgbGF5b3V0IGl0ZW0gb2JqZWN0IGFycmF5XHJcbiAgICAgKiBAcGFyYW0gYXZhaWxhYmxlTGF5b3V0V2lkdGhJblBpeGVsIGF2YWlsYWJsZSB3aWR0aCBpbiBwaXhlbCBob3Jpem9udGFsbHkuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY29uZmlnRHJpdmVuQ2FsY3VsYXRpb25IeWJyaWQoXHJcbiAgICAgICAgbGF5b3V0SXRlbXM6IExheW91dEl0ZW1Db21wb25lbnRbXSxcclxuICAgICAgICBhdmFpbGFibGVMYXlvdXRXaWR0aEluUGl4ZWw6IG51bWJlclxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFdpZHRoRm9yTGF5b3V0SXRlbUluUGl4ZWwgPSAyMDA7XHJcblxyXG4gICAgICAgIGxldCB3aWR0aFVzZWRJblBpeGVsID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheW91dEl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChsYXlvdXRJdGVtc1tpXS5jdXN0b21Db25maWcud2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoT2JqZWN0ID0gbGF5b3V0SXRlbXNbaV0uY3VzdG9tQ29uZmlnLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nV2lkdGhJblBpeGVsID0gYXZhaWxhYmxlTGF5b3V0V2lkdGhJblBpeGVsIC0gd2lkdGhVc2VkSW5QaXhlbDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAod2lkdGhPYmplY3QudHlwZSA9PT0gTGF5b3V0SXRlbUNvbmZpZ1Byb3BlcnR5V2lkdGhUeXBlLlBlcmNlbnRhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhPYmplY3QudmFsdWUgPiAxMDAgfHwgd2lkdGhPYmplY3QudmFsdWUgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoT2JqZWN0LnZhbHVlID0gMTAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaG93IHRvIGRldGVybWluZSBpZiBpdCBpcyB0aGUgbGFzdCBpdGVtIGluIGEgcm93P1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IHRoaXMuaXRlbUhvcml6b250YWxTcGFjZTtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aFVzZWRJblBpeGVsICs9IHBhZGRpbmdSaWdodDtcclxuICAgICAgICAgICAgICAgICAgICBsYXlvdXRJdGVtc1tpXS5wYWRkaW5nUmlnaHQgPSBwYWRkaW5nUmlnaHQudG9TdHJpbmcoKS5jb25jYXQodGhpcy5zdHlsZVBpeGVsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvdGVudGlhbFdpZHRoSW5QaXhlbCA9ICh3aWR0aE9iamVjdC52YWx1ZSAvIDEwMCkgKiByZW1haW5pbmdXaWR0aEluUGl4ZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvdGVudGlhbFdpZHRoSW5QaXhlbCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aFVzZWRJblBpeGVsID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhVc2VkSW5QaXhlbCArPSBwYWRkaW5nUmlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbFdpZHRoSW5QaXhlbCA9ICh3aWR0aE9iamVjdC52YWx1ZSAvIDEwMCkgKiAoYXZhaWxhYmxlTGF5b3V0V2lkdGhJblBpeGVsIC0gd2lkdGhVc2VkSW5QaXhlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvdGVudGlhbFdpZHRoSW5QaXhlbCA+PSByZW1haW5pbmdXaWR0aEluUGl4ZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbFdpZHRoSW5QaXhlbCA9IHJlbWFpbmluZ1dpZHRoSW5QaXhlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc2V0cyB0aGUgdXNlZCBwaXhlbCBmb3IgYSBuZXcgcm93LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhVc2VkSW5QaXhlbCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aFVzZWRJblBpeGVsICs9IHBvdGVudGlhbFdpZHRoSW5QaXhlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0SXRlbXNbaV0uZmxleCA9ICcxIDAgMCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLm1pbldpZHRoID0gZGVmYXVsdFdpZHRoRm9yTGF5b3V0SXRlbUluUGl4ZWwudG9TdHJpbmcoKS5jb25jYXQodGhpcy5zdHlsZVBpeGVsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLndpZHRoID0gcG90ZW50aWFsV2lkdGhJblBpeGVsICsgdGhpcy5zdHlsZVBpeGVsO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aWR0aE9iamVjdC50eXBlID09PSBMYXlvdXRJdGVtQ29uZmlnUHJvcGVydHlXaWR0aFR5cGUuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoT2JqZWN0LnZhbHVlIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aE9iamVjdC52YWx1ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V2lkdGhGb3JMYXlvdXRJdGVtSW5QaXhlbCA8PSByZW1haW5pbmdXaWR0aEluUGl4ZWwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXaWR0aEZvckxheW91dEl0ZW1JblBpeGVsIDogcmVtYWluaW5nV2lkdGhJblBpeGVsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGhVc2VkSW5QaXhlbCArPSB3aWR0aE9iamVjdC52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaG93IHRvIGRldGVybWluZSBpZiBpdCBpcyB0aGUgbGFzdCBpdGVtIGluIGEgcm93P1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IHRoaXMuaXRlbUhvcml6b250YWxTcGFjZTtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aFVzZWRJblBpeGVsICs9IHBhZGRpbmdSaWdodDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0SXRlbXNbaV0ucGFkZGluZ1JpZ2h0ID0gcGFkZGluZ1JpZ2h0LnRvU3RyaW5nKCkuY29uY2F0KHRoaXMuc3R5bGVQaXhlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0SXRlbXNbaV0ud2lkdGggPSB3aWR0aE9iamVjdC52YWx1ZSArIHRoaXMuc3R5bGVQaXhlbDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nZ2luZy5sb2coe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogTG9nTGV2ZWwuRGVidWcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIHdpZHRoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiAnTGF5b3V0Q29tcG9uZW50LmNvbmZpZ0RyaXZlbkNhbGN1bGF0aW9uSHlicmlkJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nZ2luZy5sb2coe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiBMb2dMZXZlbC5EZWJ1ZyxcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCB3aWR0aCcsXHJcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiAnTGF5b3V0Q29tcG9uZW50LmNvbmZpZ0RyaXZlbkNhbGN1bGF0aW9uSHlicmlkJ1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLnJlYWR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ3VzdG9tQ29uZmlnKGxheW91dEl0ZW1zOiBMYXlvdXRJdGVtQ29tcG9uZW50W10pOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCB3aWR0aFR5cGUgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheW91dEl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLmN1c3RvbUNvbmZpZyA9IHRoaXMuY3VycmVudExheW91dEl0ZW1Db25maWdbaV07XHJcbiAgICAgICAgICAgIGlmICghd2lkdGhUeXBlLmluY2x1ZGVzKGxheW91dEl0ZW1zW2ldLmN1c3RvbUNvbmZpZy53aWR0aC50eXBlKSkge1xyXG4gICAgICAgICAgICAgICAgd2lkdGhUeXBlLnB1c2gobGF5b3V0SXRlbXNbaV0uY3VzdG9tQ29uZmlnLndpZHRoLnR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAod2lkdGhUeXBlLmxlbmd0aCA8PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG59XHJcbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cInNtZS1sYXlvdXQtaXRlbVwiPjwvbmctY29udGVudD5cclxuIl19
517
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2xheW91dC9sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvbGF5b3V0L2xheW91dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BJLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDakcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNuRyxPQUFPLEVBQWtDLGdCQUFnQixFQUFvQixvQkFBb0IsRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlKLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7O0FBRW5GOztHQUVHO0FBS0gsTUFBTSxPQUFPLGVB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QXVCO2tCQUQ3QixNQUFNO1lBaURBLE9BQU8sTUFnQk4sdUJBQXVCLE1BU3hCLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0b3IsIElucHV0LCBPdXRwdXQsIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEZWJvdW5jZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL2RlYm91bmNlLmRlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBZaWVsZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL3lpZWxkLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IExvZ0xldmVsIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2ctbGV2ZWwnO1xyXG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2dnaW5nJztcclxuaW1wb3J0IHsgQ29yZUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21tb24vYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMYXlvdXQsIFNNRV9MQVlPVVRfUFJPVklERVIgfSBmcm9tICcuLi9jb21tb24vbGF5b3V0JztcclxuaW1wb3J0IHsgU21lUmVzcG9uc2l2ZVdpbmRvd0JyZWFrcG9pbnRzIH0gZnJvbSAnLi4vY29tbW9uL3NtZS1yZXNwb25zaXZlLXdpbmRvdy1tYW5hZ2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExheW91dENvbmZpZywgTGF5b3V0Q29uZmlnSXRlbSwgTGF5b3V0RHJpdmVuVHlwZSwgTGF5b3V0SXRlbUNvbmZpZywgTGF5b3V0SXRlbUNvbmZpZ01vZGUsIExheW91dEl0ZW1Db25maWdQcm9wZXJ0eVdpZHRoVHlwZSB9IGZyb20gJy4vbGF5b3V0LWNvbmZpZyc7XHJcbmltcG9ydCB7IExheW91dERlZmluaXRpb25Db21wb25lbnQgfSBmcm9tICcuL2xheW91dC1kZWZpbml0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExheW91dEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2xheW91dC1pdGVtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExheW91dFJlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyIH0gZnJvbSAnLi9sYXlvdXQtcmVzcG9uc2l2ZS13aW5kb3ctbWFuYWdlcic7XHJcblxyXG4vKipcclxuICogTGF5b3V0IGNvbXBvbmVudFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1sYXlvdXQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xheW91dC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIExheW91dENvbXBvbmVudCBleHRlbmRzIENvcmVCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzb3VyY2UgbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmdcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBsb2dTb3VyY2VOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiAnTGF5b3V0Q29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsYXlvdXQgaXRlbXMgY29udGVudCBjaGlsZHJlbi5cclxuICAgICAqL1xyXG4gICAgQENvbnRlbnRDaGlsZHJlbihMYXlvdXRJdGVtQ29tcG9uZW50KVxyXG4gICAgcHJpdmF0ZSBsYXlvdXRJdGVtczogUXVlcnlMaXN0PExheW91dEl0ZW1Db21wb25lbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGxheW91dCBkZWZpbml0aW9uIGNvbnRlbnQgY2hpbGRyZW4uXHJcbiAgICAgKi9cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oTGF5b3V0RGVmaW5pdGlvbkNvbXBvbmVudClcclxuICAgIHByaXZhdGUgZGVmaW5pdGlvbnM6IFF1ZXJ5TGlzdDxMYXlvdXREZWZpbml0aW9uQ29tcG9uZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IGxheW91dCBkZWZpbml0aW9uIHZhbHVlIGJhc2VkIG9uIGN1c3RvbSBsYXlvdXQgZGVmaW5pdGlvbiBhbmQgdGhlIGJyb3dzZXIgd2luZG93IHNpemUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjdXJyZW50TGF5b3V0RGVmaW5pdGlvbjogTGF5b3V0RGVmaW5pdGlvbkNvbXBvbmVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkZWZhdWx0IGhvcml6b250YWwgc3BhY2UgaW4gYmV0d2VlbiBsYXlvdXQgaXRlbXMuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaXRlbUhvcml6b250YWxTcGFjZSA9IDMyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRlZmF1bHQgdmVydGljYWwgc3BhY2UgaW4gYmV0d2VlbiBsYXlvdXQgaXRlbXMuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaXRlbVZlcnRpY2FsU3BhY2UgPSAzMjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHRydWUsIHdpbGwgYWx3YXlzIHRyeSB0byBmaWxsIHRoZSB3aG9sZSByb3cgZm9yIGVhY2ggbGF5b3V0IGl0ZW0uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdHJ5VG9GaWxsV2hvbGVSb3cgPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGxheW91dCBkZWZpbml0aW9uLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRlZmluaXRpb246IHsgW2NvbHVtbkNvdW50OiBudW1iZXJdOiB7IGxvd2VyV2lkdGg/OiBudW1iZXIsIHVwcGVyV2lkdGg/OiBudW1iZXIgfSB9ID0ge307XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBmYWxzZSwgaXQgd2lsbCBub3QgYXNzaWduIGV4dHJhIHBhZGRpbmdzIHRvIHRoZSByaWdodCBmb3IgdGhlIGxhc3QgbGF5b3V0IGl0ZW0uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcGFkTGFzdEl0ZW0gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHRydWUsIG5vdCBleHRyYSByaWdodCBwYWRkaW5nIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgaXRlbSB0aGF0IHVzZXMgdGhlIHdob2xlIHdpZHRoIG9mIHRoZSByb3cuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbm9FeHRyYVJpZ2h0UGFkZGluZ09uZUl0ZW1QZXJSb3cgPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBsYXlvdXQgaXMgZm9yIHNldHRpbmdzIHdoZXJlIGl0IGNvbnRhaW5zIGEgbGVmdCBhbmQgcmlnaHQgbGF5b3V0IGl0ZW0uXHJcbiAgICAgKiBJZiB0cnVlLCB3aWxsIGFwcGx5IHNwZWNpYWwgZGVzaWduIGZvciBzZXR0aW5ncyBsYXlvdXQuXHJcbiAgICAgKiBPbiBwaG9uZS11cCwgdGhlIGxlZnQgc2lkZSBuYXZpZ2F0aW9uIGxheW91dCBpdGVtIHdpbGwgYmUgdXNpbmcgYSBmaXhlZCB3aWR0aCBieSBkZWZhdWx0IDMwMHB4LFxyXG4gICAgICogdGhlIHJpZ2h0IHNpZGUgbGF5b3V0IGl0ZW0gd2lsbCBiZSB1c2luZyB0aGUgcmVtYWluaW5nIHdpZHRoIGJ5IGRlZmF1bHQuXHJcbiAgICAgKlxyXG4gICAgICogT24gcGhvbmUtZG93biBvciA0MDAlIHpvb20sIG5vdGhpbmcgaXMgZGlmZmVyZW50IGZyb20gdGhlIHJlZ3VsYXIgc2V0dGluZ3MgcGFnZSxcclxuICAgICAqIHRoZSBsZWZ0IHJpZ2h0IGxheW91dCB3aWxsIGJlIHRyYW5zZm9ybWVkIHRvIHRvcCBib3R0b20gbGF5b3V0LlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGxheW91dENvbmZpZzogTGF5b3V0Q29uZmlnID0ge1xyXG4gICAgICAgIFtTbWVSZXNwb25zaXZlV2luZG93QnJlYWtwb2ludHMuUGhvbmVVcF06IHsnbW9kZSc6IExheW91dEl0ZW1Db25maWdNb2RlLkRlZmF1bHR9LFxyXG4gICAgICAgIFtTbWVSZXNwb25zaXZlV2luZG93QnJlYWtwb2ludHMuUGhvbmVEb3duXTogeydtb2RlJzogTGF5b3V0SXRlbUNvbmZpZ01vZGUuRGVmYXVsdH0sXHJcbiAgICAgICAgW1NtZVJlc3BvbnNpdmVXaW5kb3dCcmVha3BvaW50cy5SZWZsb3ddOiB7J21vZGUnOiBMYXlvdXRJdGVtQ29uZmlnTW9kZS5EZWZhdWx0fVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBMYXlvdXQgaW50ZXJmYWNlXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGxheW91dENoYW5nZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBMYXlvdXQgaW50ZXJmYWNlXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHdpbmRvd0JyZWFrcG9pbnRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSBjb2x1bW5Db3VudCA9IDE7XHJcbiAgICBwcml2YXRlIGNvbHVtblNwYW5Ub3RhbCA9IDA7XHJcbiAgICBwcml2YXRlIGxheW91dFJlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyOiBMYXlvdXRSZXNwb25zaXZlV2luZG93TWFuYWdlcjtcclxuICAgIHByaXZhdGUgbGF5b3V0RHJpdmVuVHlwZSA9IExheW91dERyaXZlblR5cGUuRGVmYXVsdDtcclxuICAgIHByaXZhdGUgY3VycmVudExheW91dEl0ZW1Db25maWc6IExheW91dEl0ZW1Db25maWdbXTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3R5bGVQaXhlbCA9ICdweCc7XHJcblxyXG4gICAgcHVibGljIGdldCBjdXJyZW50TGF5b3V0RGVmaW5pdGlvbk5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGF5b3V0RGVmaW5pdGlvbiA/IHRoaXMuY3VycmVudExheW91dERlZmluaXRpb24ubmFtZSA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudExheW91dERyaXZlblR5cGUoKTogTGF5b3V0RHJpdmVuVHlwZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0RHJpdmVuVHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRXaW5kb3dCcmVha3BvaW50KCk6IFNtZVJlc3BvbnNpdmVXaW5kb3dCcmVha3BvaW50cyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXI/LnByZXZTaXplLnNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBjdXJyZW50TGF5b3V0SXRlbXMoKTogUXVlcnlMaXN0PExheW91dEl0ZW1Db21wb25lbnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRJdGVtcztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IsIEBJbmplY3QoU01FX0xBWU9VVF9QUk9WSURFUikgbGF5b3V0OiBMYXlvdXQpIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcblxyXG4gICAgICAgIGlmIChsYXlvdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5sYXlvdXRSZXNwb25zaXZlV2luZG93TWFuYWdlciA9IG5ldyBMYXlvdXRSZXNwb25zaXZlV2luZG93TWFuYWdlcihsYXlvdXQpO1xyXG4gICAgICAgICAgICAvLyBvbiBwYXJlbnQgbGF5b3V0IGNoYW5nZXMsIHJlLWVtaXQgdGhlIGxheW91dCBjaGFuZ2UgdG8gb3VyIGV2ZW50XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGxheW91dC5sYXlvdXRDaGFuZ2VkLnN1YnNjcmliZSgoKCkgPT4gdGhpcy5vbkxheW91dENoYW5nZWQoKSkpKTtcclxuICAgICAgICAgICAgLy8gb24gd2luZG93IGJyZWFrIHBvaW50IGNoYW5nZXMsIGVtaXQgdGhlIGV2ZW50IGFib3V0IGNyaXRpY2FsIGNsYXNzZXMgYW5kIHN0eWxpbmcgdXBkYXRlcyBzaWduYWwuXHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGxheW91dC53aW5kb3dCcmVha3BvaW50Q2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbldpbmRvd0JyZWFrcG9pbnRDaGFuZ2VkKCkpKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGVmZXJyZWRPbkxheW91dENoYW5nZWQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5sYXlvdXRJdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgb3BlbiBBUEkgZm9yIHJlZnJlc2hpbmcgdGhlIGNvbnRyb2wgZXh0ZXJuYWxseS5cclxuICAgICAqL1xyXG4gICAgQERlYm91bmNlKClcclxuICAgIHB1YmxpYyByZWZyZXNoKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucmVzZXRGbGV4KCk7XHJcbiAgICAgICAgdGhpcy5vbkxheW91dENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9uIGxheW91dCBjaGFuZ2VkIGV2ZW50IGhhbmRsZXIsIG9jY3VycyBldmVyeSB0aW1lIHRoZSBsYXlvdXQgaGFzIGJlZW4gY2hhbmdlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uTGF5b3V0Q2hhbmdlZCgpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxheW91dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRlZmVycmVkIGxheW91dCBjaGFuZ2VkIGhhbmRsZXIuXHJcbiAgICAgKi9cclxuICAgIEBEZWJvdW5jZSgpXHJcbiAgICBwcml2YXRlIGRlZmVycmVkT25MYXlvdXRDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMub25MYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgb24gd2luZG93IGJyZWFrcG9pbnQgY2hhbmdlZCBoYW5kbGVyLlxyXG4gICAgICogQWRkaW5nIHlpZWxkIGZvciBjb21wb25lbnQgdG8gZ2V0IEVsZW1lbnRSZWYgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uXHJcbiAgICAgKi9cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwdWJsaWMgb25XaW5kb3dCcmVha3BvaW50Q2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubGF5b3V0SXRlbXMgfHwgIXRoaXMubGF5b3V0SXRlbXMudG9BcnJheSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGF5b3V0UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIub25XaW5kb3dTaXplQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZHMgY2xhc3NlcyBsaXN0ZWQgdG8gdGhlIHJvb3QgY29tcG9uZW50XHJcbiAgICAvLyBPbiBwaG9uZSBkb3duIHRoZSBmbGV4IHN0YXJ0IG5lZWRzIHRvIGJlIGZsZXggc3RhcnQgdG8gbWFrZSBzdXJlIG5vIGV4dHJhIHNwYWNlIGJlaW5nIGdlbmVyYXRlZC5cclxuICAgIHByb3RlY3RlZCBnZXRJbml0aWFsSG9zdENsYXNzZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldEluaXRpYWxIb3N0Q2xhc3NlcygpLmNvbmNhdChbXHJcbiAgICAgICAgICAgICdzbWUtYXJyYW5nZS13cmFwc3RhY2staCcsICdzbWUtbGF5b3V0LXBob25lLWRvd24nXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUxheW91dCgpOiB2b2lkIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxheW91dEl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGxheW91dEl0ZW1zID0gdGhpcy5sYXlvdXRJdGVtcy50b0FycmF5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VG90YWxDb2x1bW5TcGFuKGxheW91dEl0ZW1zKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRXaW5kb3dTaXplID0gdGhpcy5sYXlvdXRSZXNwb25zaXZlV2luZG93TWFuYWdlci5wcmV2U2l6ZS5zaXplO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxheW91dENvbmZpZyhjdXJyZW50V2luZG93U2l6ZSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBsYXlvdXRXaWR0aCA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCB8fCBOdW1iZXIuTUFYX1ZBTFVFO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sYXlvdXREcml2ZW5UeXBlID09PSBMYXlvdXREcml2ZW5UeXBlLkRlZmF1bHQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25zID0gdGhpcy5kZWZpbml0aW9ucy50b0FycmF5KCkuc29ydCgoYSwgYikgPT4gYS51bnRpbCAtIGIudW50aWwpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNMYXlvdXREZWZpbml0aW9uID0gdGhpcy5jdXJyZW50TGF5b3V0RGVmaW5pdGlvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ3VycmVudExheW91dERlZmluaXRpb24oZGVmaW5pdGlvbnMsIGxheW91dFdpZHRoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtSG9yaXpvbnRhbFNwYWNlUGVyY2VudGFnZSA9IE1hdGgucm91bmQodGhpcy5pdGVtSG9yaXpvbnRhbFNwYWNlICogMTAwIC8gbGF5b3V0V2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uQ291bnRNb2RpZmllciA9IHRoaXMucGFkTGFzdEl0ZW0gPyAwIDogMTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZUxheW91dFdpZHRoUGVyY2VudGFnZSA9IDEwMCAtIGl0ZW1Ib3Jpem9udGFsU3BhY2VQZXJjZW50YWdlICogKHRoaXMuY29sdW1uQ291bnQgLSBjb2x1bW5Db3VudE1vZGlmaWVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0RGVmaW5pdGlvbldpdGhDb2x1bW5TcGFuQ2FsY3VsYXRpb24obGF5b3V0SXRlbXMsIGF2YWlsYWJsZUxheW91dFdpZHRoUGVyY2VudGFnZSwgaXRlbUhvcml6b250YWxTcGFjZVBlcmNlbnRhZ2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0xheW91dERlZmluaXRpb24gIT09IHRoaXMuY3VycmVudExheW91dERlZmluaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXlvdXRDaGFuZ2VkLmVtaXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxheW91dERyaXZlblR5cGUgPT09IExheW91dERyaXZlblR5cGUuUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBhdmFpbGFibGVMYXlvdXRXaWR0aEluUGl4ZWwgPSBsYXlvdXRXaWR0aCAtIHRoaXMuaXRlbUhvcml6b250YWxTcGFjZTtcclxuICAgICAgICAgICAgICAgIGF2YWlsYWJsZUxheW91dFdpZHRoSW5QaXhlbCA9IGF2YWlsYWJsZUxheW91dFdpZHRoSW5QaXhlbCA+IDAgPyBhdmFpbGFibGVMYXlvdXRXaWR0aEluUGl4ZWwgOiAwO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGVMYXlvdXRXaWR0aEluUGl4ZWwgPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ0RyaXZlbkNhbGN1bGF0aW9uKGxheW91dEl0ZW1zLCBhdmFpbGFibGVMYXlvdXRXaWR0aEluUGl4ZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVMYXlvdXRDb25maWcoY3VycmVudFdpbmRvd1NpemU6IFNtZVJlc3BvbnNpdmVXaW5kb3dCcmVha3BvaW50cyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghY3VycmVudFdpbmRvd1NpemUpIHtcclxuICAgICAgICAgICAgdGhpcy5sYXlvdXREcml2ZW5UeXBlID0gTGF5b3V0RHJpdmVuVHlwZS5EZWZhdWx0O1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwaG9uZVVwID0gdGhpcy5sYXlvdXRDb25maWcuUGhvbmVVcDtcclxuICAgICAgICBjb25zdCBwaG9uZURvd24gPSB0aGlzLmxheW91dENvbmZpZy5QaG9uZURvd247XHJcbiAgICAgICAgY29uc3QgcmVmbG93ID0gdGhpcy5sYXlvdXRDb25maWcuUmVmbG93O1xyXG5cclxuICAgICAgICBpZiAoIXBob25lVXAgfHwgIXBob25lRG93biB8fCAhcmVmbG93KSB7XHJcbiAgICAgICAgICAgIExvZ2dpbmcubG9nKHtcclxuICAgICAgICAgICAgICAgIGxldmVsOiBMb2dMZXZlbC5EZWJ1ZyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIGxheW91dCBjb25maWcgaGFzIGJlZW4gcGFzc2VkIGluJyxcclxuICAgICAgICAgICAgICAgIHNvdXJjZTogJ0RhdGFUYWJsZUNvbXBvbmVudC5vbkNvbnRlbnRUYWJsZVByZXNzZWQnXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdE1vZGUgPSB7J21vZGUnOiBMYXlvdXRJdGVtQ29uZmlnTW9kZS5EZWZhdWx0fTtcclxuXHJcbiAgICAgICAgICAgIGlmICghcGhvbmVVcCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXRDb25maWcuUGhvbmVVcCA9IGRlZmF1bHRNb2RlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXBob25lRG93bikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXRDb25maWcuUGhvbmVEb3duID0gZGVmYXVsdE1vZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghcmVmbG93KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dENvbmZpZy5SZWZsb3cgPSBkZWZhdWx0TW9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudENvbmZpZzogTGF5b3V0Q29uZmlnSXRlbSA9IHRoaXMubGF5b3V0Q29uZmlnW2N1cnJlbnRXaW5kb3dTaXplXTtcclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnRDb25maWcubW9kZSA9PT0gIExheW91dEl0ZW1Db25maWdNb2RlLkRlZmF1bHQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRMYXlvdXREcml2ZW5UeXBlKExheW91dERyaXZlblR5cGUuRGVmYXVsdCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Q29uZmlnLm1vZGUgPT09ICBMYXlvdXRJdGVtQ29uZmlnTW9kZS5DdXN0b20gJiYgY3VycmVudENvbmZpZy5jb25maWcgJiYgY3VycmVudENvbmZpZy5jb25maWcubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TGF5b3V0RHJpdmVuVHlwZShMYXlvdXREcml2ZW5UeXBlLlJlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGF5b3V0SXRlbUNvbmZpZyA9IGN1cnJlbnRDb25maWcuY29uZmlnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlc2V0RmxleCgpIHtcclxuICAgICAgICBjb25zdCBsYXlvdXRJdGVtcyA9IHRoaXMubGF5b3V0SXRlbXMudG9BcnJheSgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5b3V0SXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbGF5b3V0SXRlbSA9IGxheW91dEl0ZW1zW2ldO1xyXG4gICAgICAgICAgICBpZiAobGF5b3V0SXRlbS5mbGV4KSB7XHJcbiAgICAgICAgICAgICAgICBsYXlvdXRJdGVtLmZsZXggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRMYXlvdXREcml2ZW5UeXBlKGxheW91dERyaXZlblR5cGU6IExheW91dERyaXZlblR5cGUpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5sYXlvdXREcml2ZW5UeXBlID09PSBMYXlvdXREcml2ZW5UeXBlLlJlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyICYmIGxheW91dERyaXZlblR5cGUgPT09IExheW91dERyaXZlblR5cGUuRGVmYXVsdCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2V0RmxleCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sYXlvdXREcml2ZW5UeXBlID0gbGF5b3V0RHJpdmVuVHlwZTtcclxuICAgICAgICAvLyBUaGUgdmVydGljYWwgc3BhY2UgZ2FwIGlzIGRldGVybWluZWQgYnkgdGhlIGl0ZW1WZXJ0aWNhbFNwYWNlIHBhcmFtZXRlci5cclxuICAgICAgICAvLyBGb3IgdGhlIGRlZmF1bHRNb2RlLCBpdCBpcyBjb250cm9sbGVkIGJ5IHRoZSBwYWRkaW5nIGJvdHRvbSBvZiB0aGUgZ3JpZCBpdGVtLlxyXG4gICAgICAgIC8vIEZvciB0aGUgcmVzcG9uc2l2ZSBtYW5hZ2VyIGRyaXZlbiBtb2RlLCBpdCBpcyBjb250cm9sbGVkIGJ5IHRoZSBncmlkLWdhcC5cclxuICAgICAgICB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuZ3JpZEdhcCA9IGxheW91dERyaXZlblR5cGUgPT09IExheW91dERyaXZlblR5cGUuUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIgPyBgJHt0aGlzLml0ZW1WZXJ0aWNhbFNwYWNlfXB4IDBweGAgOiAndW5zZXQnO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VG90YWxDb2x1bW5TcGFuKGxheW91dEl0ZW1zOiBMYXlvdXRJdGVtQ29tcG9uZW50W10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbHVtblNwYW5Ub3RhbCA9IDA7XHJcbiAgICAgICAgbGF5b3V0SXRlbXMuZm9yRWFjaChpdGVtID0+IHRoaXMuY29sdW1uU3BhblRvdGFsICs9IGl0ZW0uY29sdW1uU3Bhbik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDdXJyZW50TGF5b3V0RGVmaW5pdGlvbihcclxuICAgICAgICBkZWZpbml0aW9uczogTGF5b3V0RGVmaW5pdGlvbkNvbXBvbmVudFtdLFxyXG4gICAgICAgIGxheW91dFdpZHRoOiBudW1iZXJcclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3VycmVudExheW91dERlZmluaXRpb24gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IGRlZmluaXRpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25Db2x1bW5zID0gZGVmaW5pdGlvbnNbaV0uY29sdW1ucztcclxuICAgICAgICAgICAgaWYgKGxheW91dFdpZHRoIDw9IGRlZmluaXRpb25zW2ldLnVudGlsIHx8ICh0aGlzLnRyeVRvRmlsbFdob2xlUm93ICYmIHRoaXMuY29sdW1uU3BhblRvdGFsIDw9IGRlZmluaXRpb25Db2x1bW5zKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5Db3VudCA9IGRlZmluaXRpb25Db2x1bW5zO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGF5b3V0RGVmaW5pdGlvbiA9IGRlZmluaXRpb25zW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbGF5b3V0RGVmaW5pdGlvbldpdGhDb2x1bW5TcGFuQ2FsY3VsYXRpb24oXHJcbiAgICAgICAgbGF5b3V0SXRlbXM6IExheW91dEl0ZW1Db21wb25lbnRbXSxcclxuICAgICAgICBhdmFpbGFibGVMYXlvdXRXaWR0aFBlcmNlbnRhZ2U6IG51bWJlcixcclxuICAgICAgICBpdGVtSG9yaXpvbnRhbFNwYWNlUGVyY2VudGFnZTogbnVtYmVyXHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICBsZXQgcGVyY2VudGFnZVNvRmFyID0gMDtcclxuICAgICAgICBsZXQgY29sdW1uSW5kZXggPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5b3V0SXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHBlcmNlbnRhZ2UgPSAwO1xyXG4gICAgICAgICAgICBjb2x1bW5JbmRleCArPSBsYXlvdXRJdGVtc1tpXS5jb2x1bW5TcGFuO1xyXG4gICAgICAgICAgICBpZiAoY29sdW1uSW5kZXggPT09IHRoaXMuY29sdW1uQ291bnQpIHtcclxuICAgICAgICAgICAgICAgIC8vIElmIHRydWUsIGl0IG1lYW5zIHRoaXMgbGF5b3V0IGl0ZW0gaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3cuXHJcbiAgICAgICAgICAgICAgICAvLyBJdCBlbnN1cmVzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm93IHVzZSByZXN0IG9mIHRoZSBwZXJjZW50YWdlLlxyXG4gICAgICAgICAgICAgICAgLy8gRXhhbXBsZTogSWYgaXQncyBhIDMgY29sdW1uIGxheW91dCwgdGhlIGxhc3Qgb25lJ3MgcGVyY2VudGFnZSBpcyAzMy4zNCUsIG5vdCAzMy4zMyVcclxuICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2UgPSAxMDAgLSBwZXJjZW50YWdlU29GYXI7XHJcbiAgICAgICAgICAgICAgICBwZXJjZW50YWdlU29GYXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgLy8gMSBjb2x1bW4gYW5kIDEgbGF5b3V0IGl0ZW0uXHJcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uSW5kZXggPT09IDEgJiYgdGhpcy5jb2x1bW5Db3VudCA9PT0gMSAmJiAhdGhpcy5ub0V4dHJhUmlnaHRQYWRkaW5nT25lSXRlbVBlclJvdykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLnBhZGRpbmdSaWdodCA9ICcwcHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsYXlvdXRJdGVtc1tpXS5wYWRkaW5nUmlnaHQgPSB0aGlzLnBhZExhc3RJdGVtID8gdGhpcy5pdGVtSG9yaXpvbnRhbFNwYWNlICsgdGhpcy5zdHlsZVBpeGVsIDogJzAnICsgdGhpcy5zdHlsZVBpeGVsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSAwO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uUGVyY2VudGFnZSA9IE1hdGgucm91bmQoYXZhaWxhYmxlTGF5b3V0V2lkdGhQZXJjZW50YWdlICogMTAwIC8gdGhpcy5jb2x1bW5Db3VudCkgLyAxMDA7XHJcbiAgICAgICAgICAgICAgICBwZXJjZW50YWdlID0gbGF5b3V0SXRlbXNbaV0uY29sdW1uU3BhbiAqIChjb2x1bW5QZXJjZW50YWdlICsgaXRlbUhvcml6b250YWxTcGFjZVBlcmNlbnRhZ2UpO1xyXG4gICAgICAgICAgICAgICAgcGVyY2VudGFnZVNvRmFyICs9IHBlcmNlbnRhZ2U7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHBlcmNlbnRhZ2VTb0ZhciA+IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHB1dCBpdGVtIG9uIG5leHQgcm93IGlmIGl0IGlzIHRvbyBiaWdcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGVyY2VudGFnZSA+IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlID0gMTAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlU29GYXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBsYXlvdXRJdGVtc1tpXS5wYWRkaW5nUmlnaHQgPSB0aGlzLnBhZExhc3RJdGVtID8gdGhpcy5pdGVtSG9yaXpvbnRhbFNwYWNlICsgdGhpcy5zdHlsZVBpeGVsIDogJzAnICsgdGhpcy5zdHlsZVBpeGVsO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsYXlvdXRJdGVtc1tpXS5wYWRkaW5nUmlnaHQgPSB0aGlzLml0ZW1Ib3Jpem9udGFsU3BhY2UgKyB0aGlzLnN0eWxlUGl4ZWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzPy5jdXJyZW50TGF5b3V0RGVmaW5pdGlvbj8uYWRkQm90dG9tUGFkZGluZykge1xyXG4gICAgICAgICAgICAgICAgbGF5b3V0SXRlbXNbaV0ucGFkZGluZ0JvdHRvbSA9IHRoaXMuaXRlbVZlcnRpY2FsU3BhY2UgKyB0aGlzLnN0eWxlUGl4ZWw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJZiBib3R0b20gcGFkZGluZyBhbHJlYWR5IGV4aXN0cyBhbmQgY3VycmVudExheW91dERlZmluaXRpb24uYWRkQm90dG9tUGFkZGluZyBpcyBGYWxzZVxyXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBib3R0b20gcGFkZGluZy5cclxuICAgICAgICAgICAgICAgIGlmIChsYXlvdXRJdGVtc1tpXS5wYWRkaW5nQm90dG9tID09PSB0aGlzLml0ZW1WZXJ0aWNhbFNwYWNlICsgdGhpcy5zdHlsZVBpeGVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0SXRlbXNbaV0ucGFkZGluZ0JvdHRvbSA9ICcwJyArIHRoaXMuc3R5bGVQaXhlbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGF5b3V0SXRlbXNbaV0ud2lkdGggPSBwZXJjZW50YWdlICsgJyUnO1xyXG4gICAgICAgICAgICBsYXlvdXRJdGVtc1tpXS5yZWFkeSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbmZpZ0RyaXZlbkNhbGN1bGF0aW9uKFxyXG4gICAgICAgIGxheW91dEl0ZW1zOiBMYXlvdXRJdGVtQ29tcG9uZW50W10sXHJcbiAgICAgICAgYXZhaWxhYmxlTGF5b3V0V2lkdGhJblBpeGVsOiBudW1iZXJcclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGlzSHlicmlkTW9kZSA9IHRoaXMudXBkYXRlQ3VzdG9tQ29uZmlnKGxheW91dEl0ZW1zKTtcclxuXHJcbiAgICAgICAgaWYgKGlzSHlicmlkTW9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ0RyaXZlbkNhbGN1bGF0aW9uSHlicmlkKGxheW91dEl0ZW1zLCBhdmFpbGFibGVMYXlvdXRXaWR0aEluUGl4ZWwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnRHJpdmVuQ2FsY3VsYXRpb25EZWZhdWx0KGxheW91dEl0ZW1zLCBhdmFpbGFibGVMYXlvdXRXaWR0aEluUGl4ZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRlYWwgd2l0aCBjb25maWd1cmF0aW9ucyB0aGF0IG9ubHkgaGFzIGVpdGhlciBwZXJjZW50YWdlIG9yIG51bWJlci5cclxuICAgICAqIEFpbWluZyBhdCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGxheW91dEl0ZW1zIFRoZSBsYXlvdXQgaXRlbSBvYmplY3QgYXJyYXlcclxuICAgICAqIEBwYXJhbSBhdmFpbGFibGVMYXlvdXRXaWR0aEluUGl4ZWwgYXZhaWxhYmxlIHdpZHRoIGluIHBpeGVsIGhvcml6b250YWxseS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjb25maWdEcml2ZW5DYWxjdWxhdGlvbkRlZmF1bHQoXHJcbiAgICAgICAgbGF5b3V0SXRlbXM6IExheW91dEl0ZW1Db21wb25lbnRbXSxcclxuICAgICAgICBhdmFpbGFibGVMYXlvdXRXaWR0aEluUGl4ZWw6IG51bWJlclxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFdpZHRoRm9yTGF5b3V0SXRlbUluUGl4ZWwgPSAyMDA7XHJcblxyXG4gICAgICAgIGxldCB3aWR0aFVzZWRJblBpeGVsID0gMDtcclxuICAgICAgICBsZXQgcGVyY2VudGFnZVNvRmFyID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheW91dEl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChsYXlvdXRJdGVtc1tpXS5jdXN0b21Db25maWc/LndpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3aWR0aE9iamVjdCA9IGxheW91dEl0ZW1zW2ldLmN1c3RvbUNvbmZpZy53aWR0aDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ1dpZHRoSW5QaXhlbCA9IGF2YWlsYWJsZUxheW91dFdpZHRoSW5QaXhlbCAtIHdpZHRoVXNlZEluUGl4ZWw7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHdpZHRoT2JqZWN0LnR5cGUgPT09IExheW91dEl0ZW1Db25maWdQcm9wZXJ0eVdpZHRoVHlwZS5QZXJjZW50YWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoT2JqZWN0LnZhbHVlID4gMTAwIHx8IHdpZHRoT2JqZWN0LnZhbHVlIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aE9iamVjdC52YWx1ZSA9IDEwMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSB3aWR0aE9iamVjdC52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlU29GYXIgKz0gcGVyY2VudGFnZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFkZGluZ1JpZ2h0ID0gdGhpcy5pdGVtSG9yaXpvbnRhbFNwYWNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLnBhZGRpbmdSaWdodCA9IHBhZGRpbmdSaWdodC50b1N0cmluZygpLmNvbmNhdCh0aGlzLnN0eWxlUGl4ZWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLndpZHRoID0gcGVyY2VudGFnZSArICclJztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlcmNlbnRhZ2VTb0ZhciA+IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlU29GYXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2lkdGhPYmplY3QudHlwZSA9PT0gTGF5b3V0SXRlbUNvbmZpZ1Byb3BlcnR5V2lkdGhUeXBlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aE9iamVjdC52YWx1ZSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhPYmplY3QudmFsdWUgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdpZHRoRm9yTGF5b3V0SXRlbUluUGl4ZWwgPD0gcmVtYWluaW5nV2lkdGhJblBpeGVsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V2lkdGhGb3JMYXlvdXRJdGVtSW5QaXhlbCA6IHJlbWFpbmluZ1dpZHRoSW5QaXhlbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoVXNlZEluUGl4ZWwgKz0gd2lkdGhPYmplY3QudmFsdWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGhvdyB0byBkZXRlcm1pbmUgaWYgaXQgaXMgdGhlIGxhc3QgaXRlbSBpbiBhIHJvdz9cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWRkaW5nUmlnaHQgPSB0aGlzLml0ZW1Ib3Jpem9udGFsU3BhY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGhVc2VkSW5QaXhlbCArPSBwYWRkaW5nUmlnaHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLnBhZGRpbmdSaWdodCA9IHBhZGRpbmdSaWdodC50b1N0cmluZygpLmNvbmNhdCh0aGlzLnN0eWxlUGl4ZWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLndpZHRoID0gd2lkdGhPYmplY3QudmFsdWUgKyB0aGlzLnN0eWxlUGl4ZWw7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZ2dpbmcubG9nKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IExvZ0xldmVsLkRlYnVnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCB3aWR0aCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogJ0xheW91dENvbXBvbmVudC5jb25maWdEcml2ZW5DYWxjdWxhdGlvbkRlZmF1bHQnXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2dnaW5nLmxvZyh7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IExvZ0xldmVsLkRlYnVnLFxyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIHdpZHRoJyxcclxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6ICdMYXlvdXRDb21wb25lbnQuY29uZmlnRHJpdmVuQ2FsY3VsYXRpb25EZWZhdWx0J1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLnJlYWR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZGVhbCB3aXRoIGNvbmZpZ3VyYXRpb25zIHRoYXQgb25seSBoYXMgYm90aCBwZXJjZW50YWdlIGFuZCBudW1iZXIuXHJcbiAgICAgKiBBaW1pbmcgYXQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBsYXlvdXRJdGVtcyBUaGUgbGF5b3V0IGl0ZW0gb2JqZWN0IGFycmF5XHJcbiAgICAgKiBAcGFyYW0gYXZhaWxhYmxlTGF5b3V0V2lkdGhJblBpeGVsIGF2YWlsYWJsZSB3aWR0aCBpbiBwaXhlbCBob3Jpem9udGFsbHkuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY29uZmlnRHJpdmVuQ2FsY3VsYXRpb25IeWJyaWQoXHJcbiAgICAgICAgbGF5b3V0SXRlbXM6IExheW91dEl0ZW1Db21wb25lbnRbXSxcclxuICAgICAgICBhdmFpbGFibGVMYXlvdXRXaWR0aEluUGl4ZWw6IG51bWJlclxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFdpZHRoRm9yTGF5b3V0SXRlbUluUGl4ZWwgPSAyMDA7XHJcblxyXG4gICAgICAgIGxldCB3aWR0aFVzZWRJblBpeGVsID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheW91dEl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChsYXlvdXRJdGVtc1tpXS5jdXN0b21Db25maWcud2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoT2JqZWN0ID0gbGF5b3V0SXRlbXNbaV0uY3VzdG9tQ29uZmlnLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nV2lkdGhJblBpeGVsID0gYXZhaWxhYmxlTGF5b3V0V2lkdGhJblBpeGVsIC0gd2lkdGhVc2VkSW5QaXhlbDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAod2lkdGhPYmplY3QudHlwZSA9PT0gTGF5b3V0SXRlbUNvbmZpZ1Byb3BlcnR5V2lkdGhUeXBlLlBlcmNlbnRhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhPYmplY3QudmFsdWUgPiAxMDAgfHwgd2lkdGhPYmplY3QudmFsdWUgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoT2JqZWN0LnZhbHVlID0gMTAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaG93IHRvIGRldGVybWluZSBpZiBpdCBpcyB0aGUgbGFzdCBpdGVtIGluIGEgcm93P1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IHRoaXMuaXRlbUhvcml6b250YWxTcGFjZTtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aFVzZWRJblBpeGVsICs9IHBhZGRpbmdSaWdodDtcclxuICAgICAgICAgICAgICAgICAgICBsYXlvdXRJdGVtc1tpXS5wYWRkaW5nUmlnaHQgPSBwYWRkaW5nUmlnaHQudG9TdHJpbmcoKS5jb25jYXQodGhpcy5zdHlsZVBpeGVsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvdGVudGlhbFdpZHRoSW5QaXhlbCA9ICh3aWR0aE9iamVjdC52YWx1ZSAvIDEwMCkgKiByZW1haW5pbmdXaWR0aEluUGl4ZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvdGVudGlhbFdpZHRoSW5QaXhlbCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aFVzZWRJblBpeGVsID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhVc2VkSW5QaXhlbCArPSBwYWRkaW5nUmlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbFdpZHRoSW5QaXhlbCA9ICh3aWR0aE9iamVjdC52YWx1ZSAvIDEwMCkgKiAoYXZhaWxhYmxlTGF5b3V0V2lkdGhJblBpeGVsIC0gd2lkdGhVc2VkSW5QaXhlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvdGVudGlhbFdpZHRoSW5QaXhlbCA+PSByZW1haW5pbmdXaWR0aEluUGl4ZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbFdpZHRoSW5QaXhlbCA9IHJlbWFpbmluZ1dpZHRoSW5QaXhlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc2V0cyB0aGUgdXNlZCBwaXhlbCBmb3IgYSBuZXcgcm93LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhVc2VkSW5QaXhlbCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aFVzZWRJblBpeGVsICs9IHBvdGVudGlhbFdpZHRoSW5QaXhlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0SXRlbXNbaV0uZmxleCA9ICcxIDAgMCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLm1pbldpZHRoID0gZGVmYXVsdFdpZHRoRm9yTGF5b3V0SXRlbUluUGl4ZWwudG9TdHJpbmcoKS5jb25jYXQodGhpcy5zdHlsZVBpeGVsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLndpZHRoID0gcG90ZW50aWFsV2lkdGhJblBpeGVsICsgdGhpcy5zdHlsZVBpeGVsO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aWR0aE9iamVjdC50eXBlID09PSBMYXlvdXRJdGVtQ29uZmlnUHJvcGVydHlXaWR0aFR5cGUuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoT2JqZWN0LnZhbHVlIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aE9iamVjdC52YWx1ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V2lkdGhGb3JMYXlvdXRJdGVtSW5QaXhlbCA8PSByZW1haW5pbmdXaWR0aEluUGl4ZWwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXaWR0aEZvckxheW91dEl0ZW1JblBpeGVsIDogcmVtYWluaW5nV2lkdGhJblBpeGVsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGhVc2VkSW5QaXhlbCArPSB3aWR0aE9iamVjdC52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaG93IHRvIGRldGVybWluZSBpZiBpdCBpcyB0aGUgbGFzdCBpdGVtIGluIGEgcm93P1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IHRoaXMuaXRlbUhvcml6b250YWxTcGFjZTtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aFVzZWRJblBpeGVsICs9IHBhZGRpbmdSaWdodDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0SXRlbXNbaV0ucGFkZGluZ1JpZ2h0ID0gcGFkZGluZ1JpZ2h0LnRvU3RyaW5nKCkuY29uY2F0KHRoaXMuc3R5bGVQaXhlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0SXRlbXNbaV0ud2lkdGggPSB3aWR0aE9iamVjdC52YWx1ZSArIHRoaXMuc3R5bGVQaXhlbDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nZ2luZy5sb2coe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogTG9nTGV2ZWwuRGVidWcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIHdpZHRoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiAnTGF5b3V0Q29tcG9uZW50LmNvbmZpZ0RyaXZlbkNhbGN1bGF0aW9uSHlicmlkJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nZ2luZy5sb2coe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiBMb2dMZXZlbC5EZWJ1ZyxcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCB3aWR0aCcsXHJcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiAnTGF5b3V0Q29tcG9uZW50LmNvbmZpZ0RyaXZlbkNhbGN1bGF0aW9uSHlicmlkJ1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLnJlYWR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ3VzdG9tQ29uZmlnKGxheW91dEl0ZW1zOiBMYXlvdXRJdGVtQ29tcG9uZW50W10pOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCB3aWR0aFR5cGUgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheW91dEl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50TGF5b3V0SXRlbUNvbmZpZ1tpXSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxheW91dEl0ZW1zW2ldLmN1c3RvbUNvbmZpZyA9IHRoaXMuY3VycmVudExheW91dEl0ZW1Db25maWdbaV07XHJcbiAgICAgICAgICAgIGlmICghd2lkdGhUeXBlLmluY2x1ZGVzKGxheW91dEl0ZW1zW2ldLmN1c3RvbUNvbmZpZy53aWR0aC50eXBlKSkge1xyXG4gICAgICAgICAgICAgICAgd2lkdGhUeXBlLnB1c2gobGF5b3V0SXRlbXNbaV0uY3VzdG9tQ29uZmlnLndpZHRoLnR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAod2lkdGhUeXBlLmxlbmd0aCA8PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG59XHJcbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cInNtZS1sYXlvdXQtaXRlbVwiPjwvbmctY29udGVudD5cclxuIl19