@microsoft/windows-admin-center-sdk 2.298.0 → 2.301.0

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 (149) 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/it-IT/strings.json +1 -1
  7. package/angular/assets/strings/ja-JP/strings.json +1 -1
  8. package/angular/assets/strings/ko-KR/strings.json +1 -1
  9. package/angular/assets/strings/nl-NL/strings.json +1 -1
  10. package/angular/assets/strings/pl-PL/strings.json +1 -1
  11. package/angular/assets/strings/pt-BR/strings.json +1 -1
  12. package/angular/assets/strings/pt-PT/strings.json +1 -1
  13. package/angular/assets/strings/ru-RU/strings.json +1 -1
  14. package/angular/assets/strings/strings.json +1 -1
  15. package/angular/assets/strings/sv-SE/strings.json +1 -1
  16. package/angular/assets/strings/tr-TR/strings.json +1 -1
  17. package/angular/assets/strings/zh-CN/strings.json +1 -1
  18. package/angular/assets/strings/zh-TW/strings.json +1 -1
  19. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +239 -568
  20. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
  21. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +2 -2
  22. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
  23. package/angular/esm2015/src/controls/actions/containers/action-bar/action-bar.component.js +2 -7
  24. package/angular/esm2015/src/controls/alert-bar/alert-bar.component.js +5 -5
  25. package/angular/esm2015/src/controls/common/base.component.js +1 -8
  26. package/angular/esm2015/src/controls/data-table/data-table.component.js +9 -39
  27. package/angular/esm2015/src/controls/form/form-field/checklist/checklist-form-field.component.js +8 -11
  28. package/angular/esm2015/src/controls/form/form-field/combobox/combobox-form-field.component.js +9 -8
  29. package/angular/esm2015/src/controls/form/form-field/file/file-form-field.component.js +2 -14
  30. package/angular/esm2015/src/controls/form/form-field/form-field.component.js +2 -9
  31. package/angular/esm2015/src/controls/layout/layout-definition.component.js +2 -9
  32. package/angular/esm2015/src/controls/layout/layout.component.js +2 -11
  33. package/angular/esm2015/src/controls/master-view/master-view.component.js +5 -32
  34. package/angular/esm2015/src/controls/page-alert-bar/models/index.js +1 -1
  35. package/angular/esm2015/src/controls/pivot/pivot-tab.component.js +1 -1
  36. package/angular/esm2015/src/controls/pivot/pivot.component.js +4 -21
  37. package/angular/esm2015/src/controls/property-grid/property-grid-item.component.js +2 -50
  38. package/angular/esm2015/src/controls/property-grid/property-grid.component.js +60 -73
  39. package/angular/esm2015/src/controls/property-grid/property-grid.module.js +1 -5
  40. package/angular/esm2015/src/controls/settings/common-settings/common-settings.component.js +70 -151
  41. package/angular/esm2015/src/controls/settings/settings.component.js +8 -48
  42. package/angular/esm2015/src/controls/settings/settings.module.js +9 -21
  43. package/angular/esm2015/src/controls/wizard/wizard.component.js +65 -55
  44. package/angular/esm2015/src/generated/strings.js +1 -1
  45. package/angular/esm2015/src/service/app-context.service.js +1 -3
  46. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +239 -545
  47. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
  48. package/angular/package.json +0 -2
  49. package/angular/src/controls/common/base.component.d.ts +0 -5
  50. package/angular/src/controls/data-table/data-table.component.d.ts +0 -15
  51. package/angular/src/controls/form/form-field/checklist/checklist-form-field.component.d.ts +0 -1
  52. package/angular/src/controls/form/form-field/file/file-form-field.component.d.ts +0 -4
  53. package/angular/src/controls/layout/layout-definition.component.d.ts +1 -6
  54. package/angular/src/controls/master-view/master-view.component.d.ts +2 -118
  55. package/angular/src/controls/page-alert-bar/models/index.d.ts +1 -1
  56. package/angular/src/controls/pivot/pivot-tab.component.d.ts +1 -0
  57. package/angular/src/controls/pivot/pivot.component.d.ts +0 -7
  58. package/angular/src/controls/property-grid/property-grid-item.component.d.ts +3 -53
  59. package/angular/src/controls/property-grid/property-grid.component.d.ts +2 -1
  60. package/angular/src/controls/property-grid/property-grid.module.d.ts +3 -4
  61. package/angular/src/controls/settings/common-settings/common-settings.component.d.ts +1 -32
  62. package/angular/src/controls/settings/settings.component.d.ts +1 -18
  63. package/angular/src/controls/settings/settings.module.d.ts +1 -3
  64. package/angular/src/generated/strings.d.ts +0 -3
  65. package/core/base/environment.d.ts +0 -10
  66. package/core/base/environment.js.map +1 -1
  67. package/core/data/gateway-connection.d.ts +0 -34
  68. package/core/data/gateway-connection.js +2 -59
  69. package/core/data/gateway-connection.js.map +1 -1
  70. package/core/data/node-connection.d.ts +0 -4
  71. package/core/data/node-connection.js.map +1 -1
  72. package/core/data/powershell.d.ts +0 -4
  73. package/core/data/powershell.js +0 -1
  74. package/core/data/powershell.js.map +1 -1
  75. package/core/diagnostics/sme-web-telemetry-models.d.ts +3 -20
  76. package/core/diagnostics/sme-web-telemetry-models.js +2 -6
  77. package/core/diagnostics/sme-web-telemetry-models.js.map +1 -1
  78. package/core/diagnostics/sme-web-telemetry.d.ts +1 -13
  79. package/core/diagnostics/sme-web-telemetry.js +11 -51
  80. package/core/diagnostics/sme-web-telemetry.js.map +1 -1
  81. package/core/generated/powershell-scripts.d.ts +0 -4
  82. package/core/generated/powershell-scripts.js +0 -4
  83. package/core/generated/powershell-scripts.js.map +1 -1
  84. package/core/index.d.ts +0 -2
  85. package/core/index.js +0 -1
  86. package/core/index.js.map +1 -1
  87. package/core/manifest/environment-modules.js +0 -10
  88. package/core/manifest/environment-modules.js.map +1 -1
  89. package/core/notification/powershell-notification.js +1 -1
  90. package/core/notification/powershell-notification.js.map +1 -1
  91. package/core/performance/performance-tracker.d.ts +0 -67
  92. package/core/performance/performance-tracker.js +4 -211
  93. package/core/performance/performance-tracker.js.map +1 -1
  94. package/core/rpc/credssp/rpc-credssp-model.d.ts +2 -27
  95. package/core/rpc/credssp/rpc-credssp-model.js +0 -10
  96. package/core/rpc/credssp/rpc-credssp-model.js.map +1 -1
  97. package/core/security/credssp-manager.d.ts +1 -15
  98. package/core/security/credssp-manager.js +0 -28
  99. package/core/security/credssp-manager.js.map +1 -1
  100. package/core/shared/gateway-inventory/gateway-inventory.d.ts +0 -10
  101. package/core/shared/gateway-inventory/gateway-inventory.js +0 -11
  102. package/core/shared/gateway-inventory/gateway-inventory.js.map +1 -1
  103. package/e2e/assets/strings/cs-CZ/strings.json +1 -1
  104. package/e2e/assets/strings/de-DE/strings.json +1 -1
  105. package/e2e/assets/strings/es-ES/strings.json +1 -1
  106. package/e2e/assets/strings/fr-FR/strings.json +1 -1
  107. package/e2e/assets/strings/hu-HU/strings.json +1 -1
  108. package/e2e/assets/strings/it-IT/strings.json +1 -1
  109. package/e2e/assets/strings/ja-JP/strings.json +1 -1
  110. package/e2e/assets/strings/ko-KR/strings.json +1 -1
  111. package/e2e/assets/strings/nl-NL/strings.json +1 -1
  112. package/e2e/assets/strings/pl-PL/strings.json +1 -1
  113. package/e2e/assets/strings/pt-BR/strings.json +1 -1
  114. package/e2e/assets/strings/pt-PT/strings.json +1 -1
  115. package/e2e/assets/strings/ru-RU/strings.json +1 -1
  116. package/e2e/assets/strings/strings.json +1 -1
  117. package/e2e/assets/strings/sv-SE/strings.json +1 -1
  118. package/e2e/assets/strings/tr-TR/strings.json +1 -1
  119. package/e2e/assets/strings/zh-CN/strings.json +1 -1
  120. package/e2e/assets/strings/zh-TW/strings.json +1 -1
  121. package/package.json +3 -5
  122. package/styles/css/main.css +1 -1
  123. package/tools/module-template/gulpfile.ts/index.ts +1 -1
  124. package/tools/package-lock.json +975 -14946
  125. package/tools/wac-cli/src/create/main.d.ts +3 -6
  126. package/tools/wac-cli/src/create/main.js +35 -87
  127. package/tools/wac-cli/src/create/main.js.map +1 -1
  128. package/tools/wac-cli/src/index.js +2 -2
  129. package/tools/wac-cli/src/index.js.map +1 -1
  130. package/tools/wac-cli/templates/{solution/manifest.json → manifest/solution-manifest.json} +0 -19
  131. package/tools/wac-cli/templates/{wac-template/src/manifest.json → manifest/tool-manifest.json} +0 -0
  132. package/tools/wac-cli/templates/wac-template/angular.json +2 -2
  133. package/tools/wac-cli/templates/wac-template/gulpfile.ts/config-data.ts +1 -1
  134. package/tools/wac-cli/templates/wac-template/package.json +8 -0
  135. package/tools/wac-cli/templates/wac-template/src/app/app-routing.module.ts +1 -1
  136. package/tools/wac-cli/templates/wac-template/src/main.ts +0 -2
  137. package/tools/wac-cli/templates/wac-template/src/polyfills.ts +1 -1
  138. package/tools/wac-cli/templates/wac-template/src/test.ts +2 -2
  139. package/core/data/gateway-status.d.ts +0 -24
  140. package/core/data/gateway-status.js +0 -3
  141. package/core/data/gateway-status.js.map +0 -1
  142. package/core/data/wdac-operations.d.ts +0 -123
  143. package/core/data/wdac-operations.js +0 -144
  144. package/core/data/wdac-operations.js.map +0 -1
  145. package/tools/wac-cli/templates/internal/npmrc.txt +0 -6
  146. package/tools/wac-cli/templates/internal/package.json +0 -101
  147. package/tools/wac-cli/templates/solution/strings.resjson +0 -16
  148. package/tools/wac-cli/templates/wac-template/src/version.ts +0 -3
  149. package/tools/wac-cli/templates/wac-template/version.json +0 -5
@@ -87,8 +87,8 @@ function ChecklistFormFieldComponent_div_1_div_1_Template(rf, ctx) { if (rf & 1)
87
87
  i0.ɵɵtextInterpolate(ctx_r1.getCheckboxCount());
88
88
  } }
89
89
  function ChecklistFormFieldComponent_div_1_ng_container_2_fieldset_8_Template(rf, ctx) { if (rf & 1) {
90
- i0.ɵɵelementStart(0, "fieldset", 13);
91
- i0.ɵɵelement(1, "sme-option-template-loader", 14);
90
+ i0.ɵɵelementStart(0, "fieldset", 12);
91
+ i0.ɵɵelement(1, "sme-option-template-loader", 13);
92
92
  i0.ɵɵelementEnd();
93
93
  } if (rf & 2) {
94
94
  const ctx_r9 = i0.ɵɵnextContext();
@@ -104,7 +104,7 @@ function ChecklistFormFieldComponent_div_1_ng_container_2_Template(rf, ctx) { if
104
104
  i0.ɵɵelementContainerStart(0);
105
105
  i0.ɵɵelementStart(1, "div", 10);
106
106
  i0.ɵɵelementStart(2, "label");
107
- i0.ɵɵelementStart(3, "input", 11);
107
+ i0.ɵɵelementStart(3, "input", 7);
108
108
  i0.ɵɵlistener("keydown", function ChecklistFormFieldComponent_div_1_ng_container_2_Template_input_keydown_3_listener($event) { i0.ɵɵrestoreView(_r11); const i_r7 = ctx.index; const ctx_r10 = i0.ɵɵnextContext(2); return ctx_r10.onCheckboxKeydown($event, i_r7); })("change", function ChecklistFormFieldComponent_div_1_ng_container_2_Template_input_change_3_listener() { i0.ɵɵrestoreView(_r11); const option_r6 = ctx.$implicit; const ctx_r12 = i0.ɵɵnextContext(2); return ctx_r12.toggleOption(option_r6, !option_r6.isSelected); });
109
109
  i0.ɵɵelementEnd();
110
110
  i0.ɵɵelementStart(4, "span", 8);
@@ -115,7 +115,7 @@ function ChecklistFormFieldComponent_div_1_ng_container_2_Template(rf, ctx) { if
115
115
  i0.ɵɵtext(7);
116
116
  i0.ɵɵelementEnd();
117
117
  i0.ɵɵelementEnd();
118
- i0.ɵɵtemplate(8, ChecklistFormFieldComponent_div_1_ng_container_2_fieldset_8_Template, 2, 4, "fieldset", 12);
118
+ i0.ɵɵtemplate(8, ChecklistFormFieldComponent_div_1_ng_container_2_fieldset_8_Template, 2, 4, "fieldset", 11);
119
119
  i0.ɵɵelementContainerEnd();
120
120
  } if (rf & 2) {
121
121
  const option_r6 = ctx.$implicit;
@@ -123,7 +123,7 @@ function ChecklistFormFieldComponent_div_1_ng_container_2_Template(rf, ctx) { if
123
123
  const ctx_r2 = i0.ɵɵnextContext(2);
124
124
  i0.ɵɵadvance(3);
125
125
  i0.ɵɵproperty("id", ctx_r2.idBag.checkbox + i_r7)("checked", option_r6.isSelected)("disabled", ctx_r2.loadingOrDisabled || option_r6.disabled);
126
- i0.ɵɵattribute("aria-label", option_r6.toString())("aria-describedby", ctx_r2.idBag.checkboxDescription + i_r7)("aria-checked", option_r6.isSelected)("aria-required", ctx_r2.required)("data-uta-id", ctx_r2.formatDataUtaId(option_r6.toString()));
126
+ i0.ɵɵattribute("aria-label", option_r6.toString())("aria-describedby", ctx_r2.idBag.checkboxDescription + i_r7)("aria-checked", option_r6.isSelected)("aria-required", ctx_r2.required);
127
127
  i0.ɵɵadvance(2);
128
128
  i0.ɵɵtextInterpolate(option_r6.toString());
129
129
  i0.ɵɵadvance(1);
@@ -136,7 +136,7 @@ function ChecklistFormFieldComponent_div_1_ng_container_2_Template(rf, ctx) { if
136
136
  function ChecklistFormFieldComponent_div_1_Template(rf, ctx) { if (rf & 1) {
137
137
  i0.ɵɵelementStart(0, "div", 3);
138
138
  i0.ɵɵtemplate(1, ChecklistFormFieldComponent_div_1_div_1_Template, 7, 10, "div", 4);
139
- i0.ɵɵtemplate(2, ChecklistFormFieldComponent_div_1_ng_container_2_Template, 9, 12, "ng-container", 5);
139
+ i0.ɵɵtemplate(2, ChecklistFormFieldComponent_div_1_ng_container_2_Template, 9, 11, "ng-container", 5);
140
140
  i0.ɵɵelementEnd();
141
141
  } if (rf & 2) {
142
142
  const ctx_r0 = i0.ɵɵnextContext();
@@ -421,9 +421,6 @@ let ChecklistFormFieldComponent = class ChecklistFormFieldComponent extends SmeI
421
421
  detailsSpan: ''
422
422
  };
423
423
  }
424
- formatDataUtaId(option) {
425
- return option.toLowerCase().replaceAll(' ', '-');
426
- }
427
424
  getCheckboxCount(index) {
428
425
  let total = this.options.length;
429
426
  let currentIndex = MsftSme.isNullOrUndefined(index) ? 0 : index + 1;
@@ -453,7 +450,7 @@ let ChecklistFormFieldComponent = class ChecklistFormFieldComponent extends SmeI
453
450
  /** @nocollapse */ ChecklistFormFieldComponent.ɵfac = function ChecklistFormFieldComponent_Factory(t) { return new (t || ChecklistFormFieldComponent)(i0.ɵɵdirectiveInject(i0.Injector)); };
454
451
  /** @nocollapse */ ChecklistFormFieldComponent.ɵcmp = i0.ɵɵdefineComponent({ type: ChecklistFormFieldComponent, selectors: [["sme-form-field", "type", "checklist"]], hostVars: 1, hostBindings: function ChecklistFormFieldComponent_HostBindings(rf, ctx) { if (rf & 2) {
455
452
  i0.ɵɵattribute("aria-label", ctx.ariaLabel);
456
- } }, inputs: { shouldUseOwnOptionsList: "shouldUseOwnOptionsList" }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c0, decls: 3, vars: 3, consts: [[1, "sme-focus-zone", 3, "formField"], ["role", "group", "class", "sme-form-field-editor sme-form-field-width", 4, "ngIf"], [3, "alert"], ["role", "group", 1, "sme-form-field-editor", "sme-form-field-width"], ["class", "sme-checkbox sme-checkbox-header", 4, "ngIf"], [4, "ngFor", "ngForOf"], [1, "sme-checkbox", "sme-checkbox-header"], ["type", "checkbox", "data-uta-id", "select-all", 3, "id", "checked", "disabled", "keydown", "change"], ["aria-hidden", "true"], [1, "sme-screen-reader", 3, "id"], [1, "sme-checkbox", "sme-margin-bottom-xxs"], ["type", "checkbox", 3, "id", "checked", "disabled", "keydown", "change"], ["class", "sme-focus-zone", 3, "disabled", 4, "ngIf"], [1, "sme-focus-zone", 3, "disabled"], [3, "template", "data", "optionIndex"]], template: function ChecklistFormFieldComponent_Template(rf, ctx) { if (rf & 1) {
453
+ } }, inputs: { shouldUseOwnOptionsList: "shouldUseOwnOptionsList" }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c0, decls: 3, vars: 3, consts: [[1, "sme-focus-zone", 3, "formField"], ["role", "group", "class", "sme-form-field-editor sme-form-field-width", 4, "ngIf"], [3, "alert"], ["role", "group", 1, "sme-form-field-editor", "sme-form-field-width"], ["class", "sme-checkbox sme-checkbox-header", 4, "ngIf"], [4, "ngFor", "ngForOf"], [1, "sme-checkbox", "sme-checkbox-header"], ["type", "checkbox", 3, "id", "checked", "disabled", "keydown", "change"], ["aria-hidden", "true"], [1, "sme-screen-reader", 3, "id"], [1, "sme-checkbox", "sme-margin-bottom-xxs"], ["class", "sme-focus-zone", 3, "disabled", 4, "ngIf"], [1, "sme-focus-zone", 3, "disabled"], [3, "template", "data", "optionIndex"]], template: function ChecklistFormFieldComponent_Template(rf, ctx) { if (rf & 1) {
457
454
  i0.ɵɵelementStart(0, "sme-form-field-layout", 0);
458
455
  i0.ɵɵtemplate(1, ChecklistFormFieldComponent_div_1_Template, 3, 2, "div", 1);
459
456
  i0.ɵɵelement(2, "sme-validation-alert", 2);
@@ -563,4 +560,4 @@ export { ChecklistFormFieldComponent };
563
560
  type: HostBinding,
564
561
  args: ['attr.aria-label']
565
562
  }] }); })();
566
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tsaXN0LWZvcm0tZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZm9ybS9mb3JtLWZpZWxkL2NoZWNrbGlzdC9jaGVja2xpc3QtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvY2hlY2tsaXN0L2NoZWNrbGlzdC1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBZ0IsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUU5RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFFOUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdkcsT0FBTyxFQUE2QyxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9HLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVuRSxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7SUFnQjlGLGdDQUVhOzs7O0lBRmdELHFDQUFvQix5Q0FBQSw4QkFBQTs7OztJQU16RSxnREFFd0I7SUFEcEIsb1hBQStEO0lBRW5FLGlCQUF3Qjs7OztJQUhELGtGQUEwRCwrRUFBQSwyQkFBQTs7O0lBSHpGLHFDQUMyQjtJQUN2QiwySEFLYztJQUNsQixpQkFBYTs7OztJQVIrQyxxQ0FBb0IseUNB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QixLQUFLO1lBT0ssU0FBUztrQkFEbkIsV0FBVzttQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBLZXlDb2RlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kYXRhL2FjY2Vzc2liaWxpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25BbGVydHMgfSBmcm9tICcuLi8uLi8uLi9mb3JtL3ZhbGlkYXRpb24tYWxlcnQvdmFsaWRhdGlvbi1hbGVydCc7XHJcbmltcG9ydCB7IFNtZVNjaGVtYVByb3BlcnR5IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBPYmplY3RQcm9wZXJ0eVNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1maWVsZC1ob3N0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNjaGVtYUFycmF5UHJvcGVydHksIFNjaGVtYU9iamVjdFByb3BlcnR5LCBTY2hlbWFQcmltaXRpdmVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBTY2hlbWFEYXRhVHlwZVN0b3JlIH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1zdG9yZSc7XHJcbmltcG9ydCB7IFNjaGVtYVV0aWxpdGllcyB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgRm9ybUZpZWxkT3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vb3B0aW9ucy1mb3JtLWZpZWxkL2Zvcm0tZmllbGQtb3B0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNtZUludGVybmFsT3B0aW9uc0Zvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL29wdGlvbnMtZm9ybS1maWVsZC9vcHRpb25zLWZvcm0tZmllbGQuY29tcG9uZW50JztcclxuXHJcbi8vIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aFxyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICA8c21lLWZvcm0tZmllbGQgI2ZpZWxkIHR5cGU9XCJjaGVja2xpc3RcIiBbKG5nTW9kZWwpXT1cImRhdGFcIiBbbmFtZV09XCJwcm9wZXJ0eVNjaGVtYS5uYW1lXCIgW2xhYmVsXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmxhYmVsKVwiXHJcbiAgICAgICAgW3JlcXVpcmVkXT1cInByb3BlcnR5U2NoZW1hLnJlcXVpcmVkXCIgW2Rlc2NyaXB0aW9uXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmRlc2NyaXB0aW9uKVwiIFtzaG91bGRVc2VPd25PcHRpb25zTGlzdF09XCJ0cnVlXCJcclxuICAgICAgICBbcmVhZG9ubHldPVwiISFldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5yZWFkb25seUNvbmRpdGlvbilcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhIShwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbiAmJiBldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbikpXCJcclxuICAgICAgICAoY3VzdG9tVmFsaWRhdGUpPVwicmVzb2x2ZUZ1bmN0aW9uKHByb3BlcnR5U2NoZW1hLmN1c3RvbVZhbGlkYXRpb24pKCRldmVudClcIlxyXG4gICAgICAgIChjdXN0b21Bc3luY1ZhbGlkYXRlKT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiByZXNvbHZlRnVuY3Rpb24ocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXIpKCRldmVudClcIlxyXG4gICAgICAgIFtwZW5kaW5nTWVzc2FnZV09XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgbG9jYWxpemUocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLnBlbmRpbmdNZXNzYWdlKVwiXHJcbiAgICAgICAgW2N1c3RvbUFzeW5jVmFsaWRhdGVEaXNhYmxlZF09XCJzaG91bGRDdXN0b21Bc3luY1ZhbGlkYXRpb25CZURpc2FibGVkKClcIlxyXG4gICAgICAgIFtjdXN0b21Bc3luY1ZhbGlkYXRlRGVib3VuY2VUaW1lXT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiArcHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXJcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPHNtZS1vcHRpb24gKm5nSWY9XCIhZ2V0T2JqZWN0T3B0aW9uQnlNYWluT3B0aW9uKGl0ZW0udmFsdWUpXCIgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIiBbbGFiZWxdPVwibG9jYWxpemUoaXRlbS5sYWJlbClcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICA8L3NtZS1vcHRpb24+XHJcbiAgICAgICAgICAgIDxzbWUtb3B0aW9uICpuZ0lmPVwiZ2V0T2JqZWN0T3B0aW9uQnlNYWluT3B0aW9uKGl0ZW0udmFsdWUpXCIgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIiBbbGFiZWxdPVwibG9jYWxpemUoaXRlbS5sYWJlbClcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzbWUtc2NoZW1hLWZpZWxkLWhvc3QgW3Byb3BlcnR5U2NoZW1hXT1cImdldE9iamVjdE9wdGlvbkJ5TWFpbk9wdGlvbihpdGVtLnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsoZGF0YSldPVwiZGF0YS5vYmplY3RPcHRpb25zICYmIGRhdGEub2JqZWN0T3B0aW9uc1tpdGVtLnZhbHVlXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NtZS1zY2hlbWEtZmllbGQtaG9zdD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvc21lLW9wdGlvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvc21lLWZvcm0tZmllbGQ+XHJcbiAgICBgXHJcbn0pXHJcbi8vIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoXHJcbmV4cG9ydCBjbGFzcyBDaGVja2xpc3RGb3JtRmllbGRMb2FkZXJDb21wb25lbnQgZXh0ZW5kcyBPYmplY3RQcm9wZXJ0eVNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50IHtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IG9wdGlvbnMoKTogYW55W10ge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XHJcbiAgICAgICAgY29uc3Qgc3RhdGljT3B0aW9uczogYW55W10gPSB0aGlzLnByb3BlcnR5U2NoZW1hLm9wdGlvbnMgJiYgdGhpcy5wcm9wZXJ0eVNjaGVtYS5vcHRpb25zLml0ZW1zIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGR5bmFtaWNPcHRpb25zOiBhbnlbXSA9IHRoaXMucmVzb2x2ZUNvbXBvbmVudE1lbWJlcih0aGlzLnByb3BlcnR5U2NoZW1hLm9wdGlvbnMuaXRlbXNCaW5kaW5nKTtcclxuXHJcbiAgICAgICAgaWYgKHN0YXRpY09wdGlvbnMpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChzdGF0aWNPcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGR5bmFtaWNPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZHluYW1pY09wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHJlZ2lzdGVyRGF0YVR5cGUoKSB7XHJcbiAgICAgICAgU2NoZW1hRGF0YVR5cGVTdG9yZS5yZWdpc3RlckRhdGFUeXBlKHtcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5PYmplY3QsXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ2NoZWNrbGlzdCcsXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQSBjaGVjayBsaXN0IGNvbnRyb2wgYmluZGluZyB0byBjaGVjayBsaXN0IG9iamVjdCBkYXRhLicsXHJcbiAgICAgICAgICAgIGxvYWRlckNvbXBvbmVudDogQ2hlY2tsaXN0Rm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE9iamVjdE9wdGlvbkJ5TWFpbk9wdGlvbihtYWluT3B0aW9uVmFsdWU6IHN0cmluZyk6IFNjaGVtYU9iamVjdFByb3BlcnR5IHtcclxuICAgICAgICBjb25zdCBvYmplY3RPcHRpb25zID0gPFNjaGVtYU9iamVjdFByb3BlcnR5PlNjaGVtYVV0aWxpdGllcy5nZXRQcm9wZXJ0eVNjaGVtYUJ5TmFtZSh0aGlzLnByb3BlcnR5U2NoZW1hLCAnb2JqZWN0T3B0aW9ucycpO1xyXG4gICAgICAgIGlmIChvYmplY3RPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdE9wdGlvbjogU2NoZW1hT2JqZWN0UHJvcGVydHkgPVxyXG4gICAgICAgICAgICAgICAgPFNjaGVtYU9iamVjdFByb3BlcnR5PlNjaGVtYVV0aWxpdGllcy5nZXRQcm9wZXJ0eVNjaGVtYUJ5TmFtZShvYmplY3RPcHRpb25zLCBtYWluT3B0aW9uVmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0T3B0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNWYWxpZCgpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydHlTY2hlbWEucmVxdWlyZWQgJiYgdGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZEhvc3RDb21wb25lbnRzID0gdGhpcy5maWVsZEhvc3RDb21wb25lbnRzLnRvQXJyYXkoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEub3B0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5vYmplY3RPcHRpb25zW3RoaXMuZGF0YS5vcHRpb25zW2ldXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkSG9zdENvbXBvbmVudEZvclNlbGVjdGVkT3B0aW9uID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRIb3N0Q29tcG9uZW50cy5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wZXJ0eVNjaGVtYS5uYW1lID09PSB0aGlzLmRhdGEub3B0aW9uc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkSG9zdENvbXBvbmVudEZvclNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZpZWxkSG9zdENvbXBvbmVudEZvclNlbGVjdGVkT3B0aW9uLmlzVmFsaWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQWNjZXNzaWJsZSBJbXBsZW1lbnRhdGlvbiBvZiBhIGZvcm0gZmllbGQgZm9yIGEgc2V0IG9mIC5zbWUtY2hlY2tib3hcclxuICovXHJcbkBTbWVTY2hlbWFQcm9wZXJ0eSh7XHJcbiAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgIGZvcm1hdDogJ2NoZWNrbGlzdCcsXHJcbiAgICBkZXNjcmlwdGlvbjogJ0EgY2hlY2sgbGlzdCBjb250cm9sIGJpbmRpbmcgdG8gY2hlY2sgbGlzdCBvYmplY3QgZGF0YS4nLFxyXG4gICAgbG9hZGVyQ29tcG9uZW50OiBDaGVja2xpc3RGb3JtRmllbGRMb2FkZXJDb21wb25lbnQsXHJcbiAgICBwcmVkZWZpbmVkT2JqZWN0UHJvcGVydGllczogW1xyXG4gICAgICAgIDxTY2hlbWFBcnJheVByb3BlcnR5PntcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5BcnJheSxcclxuICAgICAgICAgICAgZm9ybWF0OiAnc2ltcGxlLWxpc3QnLFxyXG4gICAgICAgICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBpdGVtOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIDxTY2hlbWFPYmplY3RQcm9wZXJ0eT57XHJcbiAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICBmb3JtYXQ6ICdkZWZhdWx0JyxcclxuICAgICAgICAgICAgbmFtZTogJ29iamVjdE9wdGlvbnMnLFxyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXHJcbiAgICAgICAgICAgICAgICA8U2NoZW1hT2JqZWN0UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICc8b2JqZWN0IGRhdGEgZm9yIG9wdGlvbiAxPicsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICA8U2NoZW1hT2JqZWN0UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICc8b2JqZWN0IGRhdGEgZm9yIG9wdGlvbiAyPicsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICA8U2NoZW1hT2JqZWN0UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICc8b2JqZWN0IGRhdGEgZm9yIG9wdGlvbiAzPicsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW11cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgIF0sXHJcbiAgICBvcHRpb25Qcm9wZXJ0aWVzOiBbXHJcbiAgICAgICAgPFNjaGVtYUFycmF5UHJvcGVydHk+e1xyXG4gICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLkFycmF5LFxyXG4gICAgICAgICAgICBmb3JtYXQ6ICdzaW1wbGUtbGlzdCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICdpdGVtcycsXHJcbiAgICAgICAgICAgIGxhYmVsOiAncmVzb3VyY2VzOnN0cmluZ3M6TXNmdFNtZVNoZWxsLkFuZ3VsYXIuU2NoZW1hRm9ybS5FZGl0b3IuUHJvcGVydHlGb3JtLk9wdGlvbnMuU3RhdGljT3B0aW9ucycsXHJcbiAgICAgICAgICAgIGl0ZW06IDxTY2hlbWFPYmplY3RQcm9wZXJ0eT57XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3Jlc291cmNlLXN0cmluZy1waWNrZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbGFiZWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yLlByb3BlcnR5Rm9ybS5PcHRpb25zLkxhYmVsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yLlByb3BlcnR5Rm9ybS5PcHRpb25zLlZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvdW50OiAxXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICBuYW1lOiAnaXRlbXNCaW5kaW5nJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdyZXNvdXJjZXM6c3RyaW5nczpNc2Z0U21lU2hlbGwuQW5ndWxhci5TY2hlbWFGb3JtLkVkaXRvci5Qcm9wZXJ0eUZvcm0uT3B0aW9ucy5EeW5hbWljT3B0aW9ucydcclxuICAgICAgICB9XHJcbiAgICBdXHJcbn0pXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtZm9ybS1maWVsZFt0eXBlPVwiY2hlY2tsaXN0XCJdJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGVja2xpc3QtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENoZWNrbGlzdEZvcm1GaWVsZENvbXBvbmVudDxUVmFsdWU+IGV4dGVuZHMgU21lSW50ZXJuYWxPcHRpb25zRm9ybUZpZWxkQ29tcG9uZW50PFRWYWx1ZVtdPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0NoZWNrbGlzdEZvcm1GaWVsZENvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBtdWx0aXBsZSBzZWxlY3Rpb24gaXMgdGhlIG9ubHkgc3VwcG9ydGVkIG1vZGUgb2YgdGhlIGNoZWNrbGlzdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbXVsdGlwbGUgPSB0cnVlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvdWxkVXNlT3duT3B0aW9uc0xpc3QgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhcmlhIGxhYmVsIGZvciB0aGlzIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsJylcclxuICAgIHB1YmxpYyBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWVyZ2VkRGVzY3JpcHRpb25MYWJlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIENoZWNrbGlzdEZvcm1GaWVsZENvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIGFuZ3VsYXIgT25Jbml0IGludGVyZmFjZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgncm9sZScsICdncm91cCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgc3VwZXIub25WYWx1ZUNoYW5nZWQodmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zaG91bGRVc2VPd25PcHRpb25zTGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uLmlzU2VsZWN0ZWQgPSB2YWx1ZS5vcHRpb25zICYmIHZhbHVlLm9wdGlvbnMuaW5kZXhPZihvcHRpb24udmFsdWUpICE9PSAtMTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVPcHRpb24ob3B0aW9uOiBGb3JtRmllbGRPcHRpb25Db21wb25lbnQsIHNlbGVjdDogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNob3VsZFVzZU93bk9wdGlvbnNMaXN0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlOiBhbnkgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9uLmlzU2VsZWN0ZWQgPT09IHNlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlLm9wdGlvbnMucHVzaChvcHRpb24udmFsdWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUub3B0aW9ucy5zcGxpY2UodmFsdWUub3B0aW9ucy5pbmRleE9mKG9wdGlvbi52YWx1ZSksIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIG9wdGlvbi5pc1NlbGVjdGVkID0gc2VsZWN0O1xyXG5cclxuICAgICAgICAgICAgc3VwZXIuc3luY1NlbGVjdGlvbkNoYW5nZWQodmFsdWUub3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdXBlci50b2dnbGVPcHRpb24ob3B0aW9uLCBzZWxlY3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9nZ2xlQWxsT3B0aW9ucyhzZWxlY3Q6IGJvb2xlYW4gPSAhdGhpcy5pc0FsbE9wdGlvbnNTZWxlY3RlZCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNob3VsZFVzZU93bk9wdGlvbnNMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWxsT3B0aW9uc1NlbGVjdGVkID09PSBzZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0IGFsbCBpcyBub3Qgc3VwcG9ydGVkIGluIHNpbmdsZSBzZWxlY3QgbW9kZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlOiBhbnkgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdmFsdWUub3B0aW9ucyA9IHNlbGVjdCA/IDxhbnk+dGhpcy5vcHRpb25zLnJlZHVjZSgoZW5hYmxlZFZhbHVlcywgY3VycmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgJiYgIWN1cnJlbnQuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkVmFsdWVzLnB1c2goY3VycmVudC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5hYmxlZFZhbHVlcztcclxuICAgICAgICAgICAgfSwgW10pIDogPGFueT5bXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIHN1cGVyLnN5bmNTZWxlY3Rpb25DaGFuZ2VkKHZhbHVlLm9wdGlvbnMpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gc3VwZXIudG9nZ2xlQWxsT3B0aW9ucyhzZWxlY3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2hlY2tib3hJZChmaXJzdDogYm9vbGVhbiwgbGFzdDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmIChmaXJzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pZEJhZy5maXJzdENoZWNrYm94O1xyXG4gICAgICAgIH0gZWxzZSBpZiAobGFzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pZEJhZy5sYXN0Q2hlY2tib3g7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzeW5jU2VsZWN0aW9uQ2hhbmdlZCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFVzZU93bk9wdGlvbnNMaXN0KSB7XHJcbiAgICAgICAgICAgIHN1cGVyLnN5bmNTZWxlY3Rpb25DaGFuZ2VkKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYXJpYSBsYWJlbCBmb3IgdGhpcyBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25DaGVja2JveEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucyB8fCB0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoYW5kbGVkID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGdvVG9JbmRleDogbnVtYmVyID0gbnVsbDtcclxuICAgICAgICBsZXQgZW5kSW5kZXggPSB0aGlzLm9wdGlvbnMubGVuZ3RoIC0gMTtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLnNob3dTZWxlY3RBbGwpIHtcclxuICAgICAgICAgICAgaW5kZXgrKztcclxuICAgICAgICAgICAgZW5kSW5kZXgrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5Ib21lOiB7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ29Ub0luZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5FbmQ6IHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDw9IGVuZEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ29Ub0luZGV4ID0gZW5kSW5kZXg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuVXBBcnJvdzoge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdvVG9JbmRleCA9IGluZGV4IC0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5Eb3duQXJyb3c6IHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDw9IGVuZEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ29Ub0luZGV4ID0gaW5kZXggKyAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIU1zZnRTbWUuaXNOdWxsKGdvVG9JbmRleCkpIHtcclxuICAgICAgICAgICAgbGV0IGNoZWNrYm94OiBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLnNob3dTZWxlY3RBbGwgJiYgZ29Ub0luZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBjaGVja2JveCA9IDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3RoaXMuaWRCYWcuc2VsZWN0QWxsQ2hlY2tib3h9YCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLnNob3dTZWxlY3RBbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBnb1RvSW5kZXgtLTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNoZWNrYm94ID0gPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dGhpcy5pZEJhZy5jaGVja2JveH0ke2dvVG9JbmRleH1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2hlY2tib3gpIHtcclxuICAgICAgICAgICAgICAgIGNoZWNrYm94LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChoYW5kbGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICogaWQgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgYmUgdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGNoZWNrYm94OiAnJyxcclxuICAgICAgICAgICAgY2hlY2tib3hEZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgICAgIHNlbGVjdEFsbENoZWNrYm94OiAnJyxcclxuICAgICAgICAgICAgc2VsZWN0QWxsQ2hlY2tib3hEZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgICAgIGRldGFpbHNTcGFuOiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZvcm1hdERhdGFVdGFJZChvcHRpb246IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnLScpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDaGVja2JveENvdW50KGluZGV4PzogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IHRvdGFsID0gdGhpcy5vcHRpb25zLmxlbmd0aDtcclxuICAgICAgICBsZXQgY3VycmVudEluZGV4ID0gTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZChpbmRleCkgPyAwIDogaW5kZXggKyAxO1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dTZWxlY3RBbGwpIHtcclxuICAgICAgICAgICAgdG90YWwrKztcclxuICAgICAgICAgICAgY3VycmVudEluZGV4Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5DaGVja2xpc3QuaW5kZXhEZXNjcmlwdGlvbi5mb3JtYXQoY3VycmVudEluZGV4LCB0b3RhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtcyB2YWxpZGF0aW9uIHRoYXQgaXMgaW50ZXJuYWwgdG8gdGhpcyBjb250cm9sXHJcbiAgICAgKiBAcGFyYW0gYyBUaGUgZm9ybSBjb250cm9sIGF0dGFjaGVkIHRvIHRoaXMgaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRlKGM6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkFsZXJ0cyB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZXF1aXJlZDogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCB8fCBrZXlzLmV2ZXJ5KGsgPT4gIXRoaXMudmFsdWVba10pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZXF1aXJlZDogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3VwZXIudmFsaWRhdGUoYyk7XHJcbiAgICB9XHJcbn1cclxuIiwiPHNtZS1mb3JtLWZpZWxkLWxheW91dCBbZm9ybUZpZWxkXT1cInRoaXNcIiBjbGFzcz1cInNtZS1mb2N1cy16b25lXCI+XHJcbiAgPGRpdiAqbmdJZj1cInZhbHVlXCIgcm9sZT1cImdyb3VwXCIgY2xhc3M9XCJzbWUtZm9ybS1maWVsZC1lZGl0b3Igc21lLWZvcm0tZmllbGQtd2lkdGhcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJtdWx0aXBsZSAmJiBzaG93U2VsZWN0QWxsXCIgY2xhc3M9XCJzbWUtY2hlY2tib3ggc21lLWNoZWNrYm94LWhlYWRlclwiPlxyXG4gICAgICA8bGFiZWw+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtpZF09XCJpZEJhZy5zZWxlY3RBbGxDaGVja2JveFwiIChrZXlkb3duKT1cIm9uQ2hlY2tib3hLZXlkb3duKCRldmVudCwgLTEpXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic2VsZWN0QWxsTGFiZWxcIiBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImlkQmFnLnNlbGVjdEFsbENoZWNrYm94RGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxPcHRpb25zKClcIiBbY2hlY2tlZF09XCJpc0FsbE9wdGlvbnNTZWxlY3RlZFwiIFthdHRyLmFyaWEtY2hlY2tlZF09XCJpc0FsbE9wdGlvbnNTZWxlY3RlZFwiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkXCIgZGF0YS11dGEtaWQ9XCJzZWxlY3QtYWxsXCIgLz5cclxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj57e3NlbGVjdEFsbExhYmVsfX08L3NwYW4+XHJcbiAgICAgICAgPGRpdiBbaWRdPVwiaWRCYWcuc2VsZWN0QWxsQ2hlY2tib3hEZXNjcmlwdGlvblwiIGNsYXNzPVwic21lLXNjcmVlbi1yZWFkZXJcIj57eyBnZXRDaGVja2JveENvdW50KCkgfX08L2Rpdj5cclxuICAgICAgPC9sYWJlbD5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnM7IGluZGV4IGFzIGlcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNtZS1jaGVja2JveCBzbWUtbWFyZ2luLWJvdHRvbS14eHNcIj5cclxuICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2lkXT1cImlkQmFnLmNoZWNrYm94ICsgaVwiIChrZXlkb3duKT1cIm9uQ2hlY2tib3hLZXlkb3duKCRldmVudCwgaSlcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm9wdGlvbi50b1N0cmluZygpXCIgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpZEJhZy5jaGVja2JveERlc2NyaXB0aW9uICsgaVwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlT3B0aW9uKG9wdGlvbiwgIW9wdGlvbi5pc1NlbGVjdGVkKVwiIFtjaGVja2VkXT1cIm9wdGlvbi5pc1NlbGVjdGVkXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cIm9wdGlvbi5pc1NlbGVjdGVkXCIgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiIFthdHRyLmRhdGEtdXRhLWlkXT1cImZvcm1hdERhdGFVdGFJZChvcHRpb24udG9TdHJpbmcoKSlcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWQgfHwgb3B0aW9uLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj57e29wdGlvbi50b1N0cmluZygpfX08L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8ZGl2IFtpZF09XCJpZEJhZy5jaGVja2JveERlc2NyaXB0aW9uICsgaVwiIGNsYXNzPVwic21lLXNjcmVlbi1yZWFkZXJcIj57eyBnZXRDaGVja2JveENvdW50KGkpIH19PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZmllbGRzZXQgKm5nSWY9XCJvcHRpb24uc3ViRm9ybVRlbXBsYXRlXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkIHx8ICFvcHRpb24uaXNTZWxlY3RlZCB8fCBvcHRpb24uZGlzYWJsZWRcIlxyXG4gICAgICAgIGNsYXNzPVwic21lLWZvY3VzLXpvbmVcIj5cclxuICAgICAgICA8c21lLW9wdGlvbi10ZW1wbGF0ZS1sb2FkZXIgW3RlbXBsYXRlXT1cIm9wdGlvbi5zdWJGb3JtVGVtcGxhdGVcIiBbZGF0YV09XCJvcHRpb25cIiBbb3B0aW9uSW5kZXhdPVwiaVwiPlxyXG4gICAgICAgIDwvc21lLW9wdGlvbi10ZW1wbGF0ZS1sb2FkZXI+XHJcbiAgICAgIDwvZmllbGRzZXQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuICA8c21lLXZhbGlkYXRpb24tYWxlcnQgW2FsZXJ0XT1cImFsZXJ0XCI+PC9zbWUtdmFsaWRhdGlvbi1hbGVydD5cclxuPC9zbWUtZm9ybS1maWVsZC1sYXlvdXQ+XHJcbiJdfQ==
563
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tsaXN0LWZvcm0tZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZm9ybS9mb3JtLWZpZWxkL2NoZWNrbGlzdC9jaGVja2xpc3QtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvY2hlY2tsaXN0L2NoZWNrbGlzdC1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBZ0IsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUU5RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFFOUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdkcsT0FBTyxFQUE2QyxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9HLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVuRSxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7SUFnQjlGLGdDQUVhOzs7O0lBRmdELHFDQUFvQix5Q0FBQSw4QkFBQTs7OztJQU16RSxnREFFd0I7SUFEcEIsb1hBQStEO0lBRW5FLGlCQUF3Qjs7OztJQUhELGtGQUEwRCwrRUFBQSwyQkFBQTs7O0lBSHpGLHFDQUMyQjtJQUN2QiwySEFLYztJQUNsQixpQkFBYTs7OztJQVIrQyxxQ0FBb0IseUNB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IEluamVjdG9yLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBLZXlDb2RlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kYXRhL2FjY2Vzc2liaWxpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25BbGVydHMgfSBmcm9tICcuLi8uLi8uLi9mb3JtL3ZhbGlkYXRpb24tYWxlcnQvdmFsaWRhdGlvbi1hbGVydCc7XHJcbmltcG9ydCB7IFNtZVNjaGVtYVByb3BlcnR5IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBPYmplY3RQcm9wZXJ0eVNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1maWVsZC1ob3N0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNjaGVtYUFycmF5UHJvcGVydHksIFNjaGVtYU9iamVjdFByb3BlcnR5LCBTY2hlbWFQcmltaXRpdmVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBTY2hlbWFEYXRhVHlwZVN0b3JlIH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1zdG9yZSc7XHJcbmltcG9ydCB7IFNjaGVtYVV0aWxpdGllcyB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgRm9ybUZpZWxkT3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vb3B0aW9ucy1mb3JtLWZpZWxkL2Zvcm0tZmllbGQtb3B0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNtZUludGVybmFsT3B0aW9uc0Zvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL29wdGlvbnMtZm9ybS1maWVsZC9vcHRpb25zLWZvcm0tZmllbGQuY29tcG9uZW50JztcclxuXHJcbi8vIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aFxyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICA8c21lLWZvcm0tZmllbGQgI2ZpZWxkIHR5cGU9XCJjaGVja2xpc3RcIiBbKG5nTW9kZWwpXT1cImRhdGFcIiBbbmFtZV09XCJwcm9wZXJ0eVNjaGVtYS5uYW1lXCIgW2xhYmVsXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmxhYmVsKVwiXHJcbiAgICAgICAgW3JlcXVpcmVkXT1cInByb3BlcnR5U2NoZW1hLnJlcXVpcmVkXCIgW2Rlc2NyaXB0aW9uXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmRlc2NyaXB0aW9uKVwiIFtzaG91bGRVc2VPd25PcHRpb25zTGlzdF09XCJ0cnVlXCJcclxuICAgICAgICBbcmVhZG9ubHldPVwiISFldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5yZWFkb25seUNvbmRpdGlvbilcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhIShwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbiAmJiBldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbikpXCJcclxuICAgICAgICAoY3VzdG9tVmFsaWRhdGUpPVwicmVzb2x2ZUZ1bmN0aW9uKHByb3BlcnR5U2NoZW1hLmN1c3RvbVZhbGlkYXRpb24pKCRldmVudClcIlxyXG4gICAgICAgIChjdXN0b21Bc3luY1ZhbGlkYXRlKT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiByZXNvbHZlRnVuY3Rpb24ocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXIpKCRldmVudClcIlxyXG4gICAgICAgIFtwZW5kaW5nTWVzc2FnZV09XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgbG9jYWxpemUocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLnBlbmRpbmdNZXNzYWdlKVwiXHJcbiAgICAgICAgW2N1c3RvbUFzeW5jVmFsaWRhdGVEaXNhYmxlZF09XCJzaG91bGRDdXN0b21Bc3luY1ZhbGlkYXRpb25CZURpc2FibGVkKClcIlxyXG4gICAgICAgIFtjdXN0b21Bc3luY1ZhbGlkYXRlRGVib3VuY2VUaW1lXT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiArcHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXJcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPHNtZS1vcHRpb24gKm5nSWY9XCIhZ2V0T2JqZWN0T3B0aW9uQnlNYWluT3B0aW9uKGl0ZW0udmFsdWUpXCIgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIiBbbGFiZWxdPVwibG9jYWxpemUoaXRlbS5sYWJlbClcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICA8L3NtZS1vcHRpb24+XHJcbiAgICAgICAgICAgIDxzbWUtb3B0aW9uICpuZ0lmPVwiZ2V0T2JqZWN0T3B0aW9uQnlNYWluT3B0aW9uKGl0ZW0udmFsdWUpXCIgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIiBbbGFiZWxdPVwibG9jYWxpemUoaXRlbS5sYWJlbClcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzbWUtc2NoZW1hLWZpZWxkLWhvc3QgW3Byb3BlcnR5U2NoZW1hXT1cImdldE9iamVjdE9wdGlvbkJ5TWFpbk9wdGlvbihpdGVtLnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsoZGF0YSldPVwiZGF0YS5vYmplY3RPcHRpb25zICYmIGRhdGEub2JqZWN0T3B0aW9uc1tpdGVtLnZhbHVlXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NtZS1zY2hlbWEtZmllbGQtaG9zdD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvc21lLW9wdGlvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvc21lLWZvcm0tZmllbGQ+XHJcbiAgICBgXHJcbn0pXHJcbi8vIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoXHJcbmV4cG9ydCBjbGFzcyBDaGVja2xpc3RGb3JtRmllbGRMb2FkZXJDb21wb25lbnQgZXh0ZW5kcyBPYmplY3RQcm9wZXJ0eVNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50IHtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IG9wdGlvbnMoKTogYW55W10ge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XHJcbiAgICAgICAgY29uc3Qgc3RhdGljT3B0aW9uczogYW55W10gPSB0aGlzLnByb3BlcnR5U2NoZW1hLm9wdGlvbnMgJiYgdGhpcy5wcm9wZXJ0eVNjaGVtYS5vcHRpb25zLml0ZW1zIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGR5bmFtaWNPcHRpb25zOiBhbnlbXSA9IHRoaXMucmVzb2x2ZUNvbXBvbmVudE1lbWJlcih0aGlzLnByb3BlcnR5U2NoZW1hLm9wdGlvbnMuaXRlbXNCaW5kaW5nKTtcclxuXHJcbiAgICAgICAgaWYgKHN0YXRpY09wdGlvbnMpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChzdGF0aWNPcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGR5bmFtaWNPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZHluYW1pY09wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHJlZ2lzdGVyRGF0YVR5cGUoKSB7XHJcbiAgICAgICAgU2NoZW1hRGF0YVR5cGVTdG9yZS5yZWdpc3RlckRhdGFUeXBlKHtcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5PYmplY3QsXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ2NoZWNrbGlzdCcsXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQSBjaGVjayBsaXN0IGNvbnRyb2wgYmluZGluZyB0byBjaGVjayBsaXN0IG9iamVjdCBkYXRhLicsXHJcbiAgICAgICAgICAgIGxvYWRlckNvbXBvbmVudDogQ2hlY2tsaXN0Rm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE9iamVjdE9wdGlvbkJ5TWFpbk9wdGlvbihtYWluT3B0aW9uVmFsdWU6IHN0cmluZyk6IFNjaGVtYU9iamVjdFByb3BlcnR5IHtcclxuICAgICAgICBjb25zdCBvYmplY3RPcHRpb25zID0gPFNjaGVtYU9iamVjdFByb3BlcnR5PlNjaGVtYVV0aWxpdGllcy5nZXRQcm9wZXJ0eVNjaGVtYUJ5TmFtZSh0aGlzLnByb3BlcnR5U2NoZW1hLCAnb2JqZWN0T3B0aW9ucycpO1xyXG4gICAgICAgIGlmIChvYmplY3RPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdE9wdGlvbjogU2NoZW1hT2JqZWN0UHJvcGVydHkgPVxyXG4gICAgICAgICAgICAgICAgPFNjaGVtYU9iamVjdFByb3BlcnR5PlNjaGVtYVV0aWxpdGllcy5nZXRQcm9wZXJ0eVNjaGVtYUJ5TmFtZShvYmplY3RPcHRpb25zLCBtYWluT3B0aW9uVmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0T3B0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNWYWxpZCgpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydHlTY2hlbWEucmVxdWlyZWQgJiYgdGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZEhvc3RDb21wb25lbnRzID0gdGhpcy5maWVsZEhvc3RDb21wb25lbnRzLnRvQXJyYXkoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEub3B0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5vYmplY3RPcHRpb25zW3RoaXMuZGF0YS5vcHRpb25zW2ldXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkSG9zdENvbXBvbmVudEZvclNlbGVjdGVkT3B0aW9uID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRIb3N0Q29tcG9uZW50cy5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wZXJ0eVNjaGVtYS5uYW1lID09PSB0aGlzLmRhdGEub3B0aW9uc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkSG9zdENvbXBvbmVudEZvclNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZpZWxkSG9zdENvbXBvbmVudEZvclNlbGVjdGVkT3B0aW9uLmlzVmFsaWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQWNjZXNzaWJsZSBJbXBsZW1lbnRhdGlvbiBvZiBhIGZvcm0gZmllbGQgZm9yIGEgc2V0IG9mIC5zbWUtY2hlY2tib3hcclxuICovXHJcbkBTbWVTY2hlbWFQcm9wZXJ0eSh7XHJcbiAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgIGZvcm1hdDogJ2NoZWNrbGlzdCcsXHJcbiAgICBkZXNjcmlwdGlvbjogJ0EgY2hlY2sgbGlzdCBjb250cm9sIGJpbmRpbmcgdG8gY2hlY2sgbGlzdCBvYmplY3QgZGF0YS4nLFxyXG4gICAgbG9hZGVyQ29tcG9uZW50OiBDaGVja2xpc3RGb3JtRmllbGRMb2FkZXJDb21wb25lbnQsXHJcbiAgICBwcmVkZWZpbmVkT2JqZWN0UHJvcGVydGllczogW1xyXG4gICAgICAgIDxTY2hlbWFBcnJheVByb3BlcnR5PntcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5BcnJheSxcclxuICAgICAgICAgICAgZm9ybWF0OiAnc2ltcGxlLWxpc3QnLFxyXG4gICAgICAgICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBpdGVtOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIDxTY2hlbWFPYmplY3RQcm9wZXJ0eT57XHJcbiAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICBmb3JtYXQ6ICdkZWZhdWx0JyxcclxuICAgICAgICAgICAgbmFtZTogJ29iamVjdE9wdGlvbnMnLFxyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXHJcbiAgICAgICAgICAgICAgICA8U2NoZW1hT2JqZWN0UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICc8b2JqZWN0IGRhdGEgZm9yIG9wdGlvbiAxPicsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICA8U2NoZW1hT2JqZWN0UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICc8b2JqZWN0IGRhdGEgZm9yIG9wdGlvbiAyPicsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICA8U2NoZW1hT2JqZWN0UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICc8b2JqZWN0IGRhdGEgZm9yIG9wdGlvbiAzPicsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW11cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgIF0sXHJcbiAgICBvcHRpb25Qcm9wZXJ0aWVzOiBbXHJcbiAgICAgICAgPFNjaGVtYUFycmF5UHJvcGVydHk+e1xyXG4gICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLkFycmF5LFxyXG4gICAgICAgICAgICBmb3JtYXQ6ICdzaW1wbGUtbGlzdCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICdpdGVtcycsXHJcbiAgICAgICAgICAgIGxhYmVsOiAncmVzb3VyY2VzOnN0cmluZ3M6TXNmdFNtZVNoZWxsLkFuZ3VsYXIuU2NoZW1hRm9ybS5FZGl0b3IuUHJvcGVydHlGb3JtLk9wdGlvbnMuU3RhdGljT3B0aW9ucycsXHJcbiAgICAgICAgICAgIGl0ZW06IDxTY2hlbWFPYmplY3RQcm9wZXJ0eT57XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3Jlc291cmNlLXN0cmluZy1waWNrZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbGFiZWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yLlByb3BlcnR5Rm9ybS5PcHRpb25zLkxhYmVsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yLlByb3BlcnR5Rm9ybS5PcHRpb25zLlZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvdW50OiAxXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICBuYW1lOiAnaXRlbXNCaW5kaW5nJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdyZXNvdXJjZXM6c3RyaW5nczpNc2Z0U21lU2hlbGwuQW5ndWxhci5TY2hlbWFGb3JtLkVkaXRvci5Qcm9wZXJ0eUZvcm0uT3B0aW9ucy5EeW5hbWljT3B0aW9ucydcclxuICAgICAgICB9XHJcbiAgICBdXHJcbn0pXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtZm9ybS1maWVsZFt0eXBlPVwiY2hlY2tsaXN0XCJdJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGVja2xpc3QtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENoZWNrbGlzdEZvcm1GaWVsZENvbXBvbmVudDxUVmFsdWU+IGV4dGVuZHMgU21lSW50ZXJuYWxPcHRpb25zRm9ybUZpZWxkQ29tcG9uZW50PFRWYWx1ZVtdPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0NoZWNrbGlzdEZvcm1GaWVsZENvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBtdWx0aXBsZSBzZWxlY3Rpb24gaXMgdGhlIG9ubHkgc3VwcG9ydGVkIG1vZGUgb2YgdGhlIGNoZWNrbGlzdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbXVsdGlwbGUgPSB0cnVlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvdWxkVXNlT3duT3B0aW9uc0xpc3QgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhcmlhIGxhYmVsIGZvciB0aGlzIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsJylcclxuICAgIHB1YmxpYyBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWVyZ2VkRGVzY3JpcHRpb25MYWJlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIENoZWNrbGlzdEZvcm1GaWVsZENvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIGFuZ3VsYXIgT25Jbml0IGludGVyZmFjZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgncm9sZScsICdncm91cCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgc3VwZXIub25WYWx1ZUNoYW5nZWQodmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zaG91bGRVc2VPd25PcHRpb25zTGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uLmlzU2VsZWN0ZWQgPSB2YWx1ZS5vcHRpb25zICYmIHZhbHVlLm9wdGlvbnMuaW5kZXhPZihvcHRpb24udmFsdWUpICE9PSAtMTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVPcHRpb24ob3B0aW9uOiBGb3JtRmllbGRPcHRpb25Db21wb25lbnQsIHNlbGVjdDogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNob3VsZFVzZU93bk9wdGlvbnNMaXN0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlOiBhbnkgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9uLmlzU2VsZWN0ZWQgPT09IHNlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlLm9wdGlvbnMucHVzaChvcHRpb24udmFsdWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUub3B0aW9ucy5zcGxpY2UodmFsdWUub3B0aW9ucy5pbmRleE9mKG9wdGlvbi52YWx1ZSksIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIG9wdGlvbi5pc1NlbGVjdGVkID0gc2VsZWN0O1xyXG5cclxuICAgICAgICAgICAgc3VwZXIuc3luY1NlbGVjdGlvbkNoYW5nZWQodmFsdWUub3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdXBlci50b2dnbGVPcHRpb24ob3B0aW9uLCBzZWxlY3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9nZ2xlQWxsT3B0aW9ucyhzZWxlY3Q6IGJvb2xlYW4gPSAhdGhpcy5pc0FsbE9wdGlvbnNTZWxlY3RlZCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNob3VsZFVzZU93bk9wdGlvbnNMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWxsT3B0aW9uc1NlbGVjdGVkID09PSBzZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0IGFsbCBpcyBub3Qgc3VwcG9ydGVkIGluIHNpbmdsZSBzZWxlY3QgbW9kZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlOiBhbnkgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdmFsdWUub3B0aW9ucyA9IHNlbGVjdCA/IDxhbnk+dGhpcy5vcHRpb25zLnJlZHVjZSgoZW5hYmxlZFZhbHVlcywgY3VycmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgJiYgIWN1cnJlbnQuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkVmFsdWVzLnB1c2goY3VycmVudC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5hYmxlZFZhbHVlcztcclxuICAgICAgICAgICAgfSwgW10pIDogPGFueT5bXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIHN1cGVyLnN5bmNTZWxlY3Rpb25DaGFuZ2VkKHZhbHVlLm9wdGlvbnMpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gc3VwZXIudG9nZ2xlQWxsT3B0aW9ucyhzZWxlY3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2hlY2tib3hJZChmaXJzdDogYm9vbGVhbiwgbGFzdDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmIChmaXJzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pZEJhZy5maXJzdENoZWNrYm94O1xyXG4gICAgICAgIH0gZWxzZSBpZiAobGFzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pZEJhZy5sYXN0Q2hlY2tib3g7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzeW5jU2VsZWN0aW9uQ2hhbmdlZCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFVzZU93bk9wdGlvbnNMaXN0KSB7XHJcbiAgICAgICAgICAgIHN1cGVyLnN5bmNTZWxlY3Rpb25DaGFuZ2VkKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYXJpYSBsYWJlbCBmb3IgdGhpcyBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25DaGVja2JveEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucyB8fCB0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoYW5kbGVkID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGdvVG9JbmRleDogbnVtYmVyID0gbnVsbDtcclxuICAgICAgICBsZXQgZW5kSW5kZXggPSB0aGlzLm9wdGlvbnMubGVuZ3RoIC0gMTtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLnNob3dTZWxlY3RBbGwpIHtcclxuICAgICAgICAgICAgaW5kZXgrKztcclxuICAgICAgICAgICAgZW5kSW5kZXgrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5Ib21lOiB7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ29Ub0luZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5FbmQ6IHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDw9IGVuZEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ29Ub0luZGV4ID0gZW5kSW5kZXg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuVXBBcnJvdzoge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdvVG9JbmRleCA9IGluZGV4IC0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5Eb3duQXJyb3c6IHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDw9IGVuZEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ29Ub0luZGV4ID0gaW5kZXggKyAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIU1zZnRTbWUuaXNOdWxsKGdvVG9JbmRleCkpIHtcclxuICAgICAgICAgICAgbGV0IGNoZWNrYm94OiBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLnNob3dTZWxlY3RBbGwgJiYgZ29Ub0luZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBjaGVja2JveCA9IDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3RoaXMuaWRCYWcuc2VsZWN0QWxsQ2hlY2tib3h9YCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLnNob3dTZWxlY3RBbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBnb1RvSW5kZXgtLTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNoZWNrYm94ID0gPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dGhpcy5pZEJhZy5jaGVja2JveH0ke2dvVG9JbmRleH1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2hlY2tib3gpIHtcclxuICAgICAgICAgICAgICAgIGNoZWNrYm94LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChoYW5kbGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICogaWQgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgYmUgdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGNoZWNrYm94OiAnJyxcclxuICAgICAgICAgICAgY2hlY2tib3hEZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgICAgIHNlbGVjdEFsbENoZWNrYm94OiAnJyxcclxuICAgICAgICAgICAgc2VsZWN0QWxsQ2hlY2tib3hEZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgICAgIGRldGFpbHNTcGFuOiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENoZWNrYm94Q291bnQoaW5kZXg/OiBudW1iZXIpIHtcclxuICAgICAgICBsZXQgdG90YWwgPSB0aGlzLm9wdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIGxldCBjdXJyZW50SW5kZXggPSBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGluZGV4KSA/IDAgOiBpbmRleCArIDE7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd1NlbGVjdEFsbCkge1xyXG4gICAgICAgICAgICB0b3RhbCsrO1xyXG4gICAgICAgICAgICBjdXJyZW50SW5kZXgrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkNoZWNrbGlzdC5pbmRleERlc2NyaXB0aW9uLmZvcm1hdChjdXJyZW50SW5kZXgsIHRvdGFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIHZhbGlkYXRpb24gdGhhdCBpcyBpbnRlcm5hbCB0byB0aGlzIGNvbnRyb2xcclxuICAgICAqIEBwYXJhbSBjIFRoZSBmb3JtIGNvbnRyb2wgYXR0YWNoZWQgdG8gdGhpcyBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uQWxlcnRzIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgaWYgKE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwIHx8IGtleXMuZXZlcnkoayA9PiAhdGhpcy52YWx1ZVtrXSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdXBlci52YWxpZGF0ZShjKTtcclxuICAgIH1cclxufVxyXG4iLCI8c21lLWZvcm0tZmllbGQtbGF5b3V0IFtmb3JtRmllbGRdPVwidGhpc1wiIGNsYXNzPVwic21lLWZvY3VzLXpvbmVcIj5cclxuICA8ZGl2ICpuZ0lmPVwidmFsdWVcIiByb2xlPVwiZ3JvdXBcIiBjbGFzcz1cInNtZS1mb3JtLWZpZWxkLWVkaXRvciBzbWUtZm9ybS1maWVsZC13aWR0aFwiPlxyXG4gICAgPGRpdiAqbmdJZj1cIm11bHRpcGxlICYmIHNob3dTZWxlY3RBbGxcIiBjbGFzcz1cInNtZS1jaGVja2JveCBzbWUtY2hlY2tib3gtaGVhZGVyXCI+XHJcbiAgICAgIDxsYWJlbD5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2lkXT1cImlkQmFnLnNlbGVjdEFsbENoZWNrYm94XCIgKGtleWRvd24pPVwib25DaGVja2JveEtleWRvd24oJGV2ZW50LCAtMSlcIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzZWxlY3RBbGxMYWJlbFwiIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaWRCYWcuc2VsZWN0QWxsQ2hlY2tib3hEZXNjcmlwdGlvblwiIChjaGFuZ2UpPVwidG9nZ2xlQWxsT3B0aW9ucygpXCJcclxuICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsT3B0aW9uc1NlbGVjdGVkXCIgW2F0dHIuYXJpYS1jaGVja2VkXT1cImlzQWxsT3B0aW9uc1NlbGVjdGVkXCIgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiIFtkaXNhYmxlZF09XCJsb2FkaW5nT3JEaXNhYmxlZFwiIC8+XHJcbiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+e3tzZWxlY3RBbGxMYWJlbH19PC9zcGFuPlxyXG4gICAgICAgIDxkaXYgW2lkXT1cImlkQmFnLnNlbGVjdEFsbENoZWNrYm94RGVzY3JpcHRpb25cIiBjbGFzcz1cInNtZS1zY3JlZW4tcmVhZGVyXCI+e3sgZ2V0Q2hlY2tib3hDb3VudCgpIH19PC9kaXY+XHJcbiAgICAgIDwvbGFiZWw+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzbWUtY2hlY2tib3ggc21lLW1hcmdpbi1ib3R0b20teHhzXCI+XHJcbiAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtpZF09XCJpZEJhZy5jaGVja2JveCArIGlcIiAoa2V5ZG93bik9XCJvbkNoZWNrYm94S2V5ZG93bigkZXZlbnQsIGkpXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJvcHRpb24udG9TdHJpbmcoKVwiIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaWRCYWcuY2hlY2tib3hEZXNjcmlwdGlvbiArIGlcIiAoY2hhbmdlKT1cInRvZ2dsZU9wdGlvbihvcHRpb24sICFvcHRpb24uaXNTZWxlY3RlZClcIlxyXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJvcHRpb24uaXNTZWxlY3RlZFwiIFthdHRyLmFyaWEtY2hlY2tlZF09XCJvcHRpb24uaXNTZWxlY3RlZFwiIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWQgfHwgb3B0aW9uLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj57e29wdGlvbi50b1N0cmluZygpfX08L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8ZGl2IFtpZF09XCJpZEJhZy5jaGVja2JveERlc2NyaXB0aW9uICsgaVwiIGNsYXNzPVwic21lLXNjcmVlbi1yZWFkZXJcIj57eyBnZXRDaGVja2JveENvdW50KGkpIH19PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZmllbGRzZXQgKm5nSWY9XCJvcHRpb24uc3ViRm9ybVRlbXBsYXRlXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkIHx8ICFvcHRpb24uaXNTZWxlY3RlZCB8fCBvcHRpb24uZGlzYWJsZWRcIlxyXG4gICAgICAgIGNsYXNzPVwic21lLWZvY3VzLXpvbmVcIj5cclxuICAgICAgICA8c21lLW9wdGlvbi10ZW1wbGF0ZS1sb2FkZXIgW3RlbXBsYXRlXT1cIm9wdGlvbi5zdWJGb3JtVGVtcGxhdGVcIiBbZGF0YV09XCJvcHRpb25cIiBbb3B0aW9uSW5kZXhdPVwiaVwiPlxyXG4gICAgICAgIDwvc21lLW9wdGlvbi10ZW1wbGF0ZS1sb2FkZXI+XHJcbiAgICAgIDwvZmllbGRzZXQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuICA8c21lLXZhbGlkYXRpb24tYWxlcnQgW2FsZXJ0XT1cImFsZXJ0XCI+PC9zbWUtdmFsaWRhdGlvbi1hbGVydD5cclxuPC9zbWUtZm9ybS1maWVsZC1sYXlvdXQ+XHJcbiJdfQ==
@@ -156,9 +156,10 @@ function ComboboxFormFieldComponent_ng_template_18_Template(rf, ctx) { if (rf &
156
156
  i0.ɵɵelementStart(2, "input", 28);
157
157
  i0.ɵɵlistener("change", function ComboboxFormFieldComponent_ng_template_18_Template_input_change_2_listener() { i0.ɵɵrestoreView(_r27); const option_r25 = ctx.$implicit; const ctx_r26 = i0.ɵɵnextContext(); return ctx_r26.toggleOption(option_r25, !option_r25.isSelected); });
158
158
  i0.ɵɵelementEnd();
159
- i0.ɵɵelementStart(3, "span", 29);
160
- i0.ɵɵelementStart(4, "span", 30);
161
- i0.ɵɵtext(5);
159
+ i0.ɵɵtext(3, " [disabled]=\"option.disabled\" class=\"sme-layout-absolute sme-position-inset-none\" /> ");
160
+ i0.ɵɵelementStart(4, "span", 29);
161
+ i0.ɵɵelementStart(5, "span", 30);
162
+ i0.ɵɵtext(6);
162
163
  i0.ɵɵelementEnd();
163
164
  i0.ɵɵelementEnd();
164
165
  i0.ɵɵelementEnd();
@@ -167,9 +168,9 @@ function ComboboxFormFieldComponent_ng_template_18_Template(rf, ctx) { if (rf &
167
168
  const option_r25 = ctx.$implicit;
168
169
  const ctx_r11 = i0.ɵɵnextContext();
169
170
  i0.ɵɵadvance(2);
170
- i0.ɵɵproperty("checked", option_r25.isSelected)("disabled", option_r25.disabled);
171
+ i0.ɵɵproperty("checked", option_r25.isSelected);
171
172
  i0.ɵɵattribute("aria-checked", option_r25.isSelected)("aria-label", option_r25.toString())("data-uta-id", option_r25.utaId ? option_r25.utaId : option_r25.value);
172
- i0.ɵɵadvance(1);
173
+ i0.ɵɵadvance(2);
173
174
  i0.ɵɵclassProp("sme-combobox-option-wrap", ctx_r11.overflowWrap);
174
175
  i0.ɵɵproperty("smeTooltip", option_r25.disabled ? null : option_r25.resolvedTooltipTemplate)("title", option_r25.resolvedTitle)("smeTooltipContext", option_r25.disabled ? null : option_r25.tooltipContext || option_r25);
175
176
  i0.ɵɵadvance(1);
@@ -488,7 +489,7 @@ let ComboboxFormFieldComponent = class ComboboxFormFieldComponent extends SmeInt
488
489
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.multiSelectTemplate = _t.first);
489
490
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.listboxElement = _t.first);
490
491
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dropDown = _t.first);
491
- } }, inputs: { multiple: "multiple", overflowWrap: "overflowWrap", maintainSearch: "maintainSearch", dropdownApplyFormFieldOffsetWidth: "dropdownApplyFormFieldOffsetWidth" }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c4, decls: 20, vars: 30, consts: [[3, "formField"], [1, "sme-combobox", "sme-focus-zone", "sme-form-field-editor", 3, "autoToggle", "disabled", "calculateHeight", "dropdownApplyFormFieldOffsetWidth", "toggled"], ["dropDown", ""], [1, "sme-combobox-header", "sme-dropdown-toggle", 3, "keydown", "keypress"], ["dropdownHeader", ""], ["type", "text", "role", "combobox", "readonly", "", "spellcheck", "false", "autocapitalize", "off", "autocomplete", "off", 3, "value", "placeholder", "click"], ["textInput", ""], ["type", "button", "tabindex", "-1", "role", "presentation", "aria-hidden", "true", 1, "sme-button-trigger", "sme-button-auto-width", 3, "click"], [1, "sme-icon", "sme-icon-chevronDown"], ["role", "listbox", 1, "sme-dropdown-content", "sme-dropdown-content-inherit-container-height", 3, "ngStyle", "id", "keydown"], ["listbox", ""], [3, "sme-padding-squish-v-xs", "keydown", 4, "ngIf"], ["class", "sme-checkbox sme-dropdown-interaction-enabled", "role", "option", 3, "sme-layout-none", 4, "ngIf"], [4, "ngIf"], [3, "alert"], ["singleSelectTemplate", ""], ["multiSelectTemplate", ""], [3, "keydown"], ["name", "searchStringValue", "type", "search", 3, "disableSearchButton", "placeholder", "label", "id", "count", "ngModel", "ngModelChange"], ["role", "option", 1, "sme-checkbox", "sme-dropdown-interaction-enabled"], [1, "sme-position-stretch-h", "sme-arrange-word-break-all"], ["type", "checkbox", "role", "checkbox", 1, "sme-layout-absolute", "sme-position-inset-none", 3, "checked", "change"], ["aria-hidden", "true"], [4, "ngFor", "ngForOf", "ngForTrackBy"], ["smeTemplateOutlet", "", 3, "template", "data"], ["type", "button", "role", "option", 3, "disabled", "click"], [3, "smeTooltip", "smeTooltipContext"], [1, "sme-layout-float-left", 3, "title"], ["type", "checkbox", "role", "checkbox", 1, "sme-layout-absolute", "sme-position-inset-none", 3, "checked", "disabled", "change"], ["aria-hidden", "true", 1, "sme-position-stretch-h", "sme-layout-float-left", 3, "smeTooltip", "title", "smeTooltipContext"], [1, "sme-position-stretch-h", "sme-layout-float-left"]], template: function ComboboxFormFieldComponent_Template(rf, ctx) { if (rf & 1) {
492
+ } }, inputs: { multiple: "multiple", overflowWrap: "overflowWrap", maintainSearch: "maintainSearch", dropdownApplyFormFieldOffsetWidth: "dropdownApplyFormFieldOffsetWidth" }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c4, decls: 20, vars: 30, consts: [[3, "formField"], [1, "sme-combobox", "sme-focus-zone", "sme-form-field-editor", 3, "autoToggle", "disabled", "calculateHeight", "dropdownApplyFormFieldOffsetWidth", "toggled"], ["dropDown", ""], [1, "sme-combobox-header", "sme-dropdown-toggle", 3, "keydown", "keypress"], ["dropdownHeader", ""], ["type", "text", "role", "combobox", "readonly", "", "spellcheck", "false", "autocapitalize", "off", "autocomplete", "off", 3, "value", "placeholder", "click"], ["textInput", ""], ["type", "button", "tabindex", "-1", "role", "presentation", "aria-hidden", "true", 1, "sme-button-trigger", "sme-button-auto-width", 3, "click"], [1, "sme-icon", "sme-icon-chevronDown"], ["role", "listbox", 1, "sme-dropdown-content", "sme-dropdown-content-inherit-container-height", 3, "ngStyle", "id", "keydown"], ["listbox", ""], [3, "sme-padding-squish-v-xs", "keydown", 4, "ngIf"], ["class", "sme-checkbox sme-dropdown-interaction-enabled", "role", "option", 3, "sme-layout-none", 4, "ngIf"], [4, "ngIf"], [3, "alert"], ["singleSelectTemplate", ""], ["multiSelectTemplate", ""], [3, "keydown"], ["name", "searchStringValue", "type", "search", 3, "disableSearchButton", "placeholder", "label", "id", "count", "ngModel", "ngModelChange"], ["role", "option", 1, "sme-checkbox", "sme-dropdown-interaction-enabled"], [1, "sme-position-stretch-h", "sme-arrange-word-break-all"], ["type", "checkbox", "role", "checkbox", 1, "sme-layout-absolute", "sme-position-inset-none", 3, "checked", "change"], ["aria-hidden", "true"], [4, "ngFor", "ngForOf", "ngForTrackBy"], ["smeTemplateOutlet", "", 3, "template", "data"], ["type", "button", "role", "option", 3, "disabled", "click"], [3, "smeTooltip", "smeTooltipContext"], [1, "sme-layout-float-left", 3, "title"], ["type", "checkbox", "role", "checkbox", 3, "checked", "change"], ["aria-hidden", "true", 1, "sme-position-stretch-h", "sme-layout-float-left", 3, "smeTooltip", "title", "smeTooltipContext"], [1, "sme-position-stretch-h", "sme-layout-float-left"]], template: function ComboboxFormFieldComponent_Template(rf, ctx) { if (rf & 1) {
492
493
  const _r28 = i0.ɵɵgetCurrentView();
493
494
  i0.ɵɵelementStart(0, "sme-form-field-layout", 0);
494
495
  i0.ɵɵelementStart(1, "sme-dropdown", 1, 2);
@@ -513,7 +514,7 @@ let ComboboxFormFieldComponent = class ComboboxFormFieldComponent extends SmeInt
513
514
  i0.ɵɵelementEnd();
514
515
  i0.ɵɵelement(15, "sme-validation-alert", 14);
515
516
  i0.ɵɵtemplate(16, ComboboxFormFieldComponent_ng_template_16_Template, 4, 14, "ng-template", null, 15, i0.ɵɵtemplateRefExtractor);
516
- i0.ɵɵtemplate(18, ComboboxFormFieldComponent_ng_template_18_Template, 6, 13, "ng-template", null, 16, i0.ɵɵtemplateRefExtractor);
517
+ i0.ɵɵtemplate(18, ComboboxFormFieldComponent_ng_template_18_Template, 7, 12, "ng-template", null, 16, i0.ɵɵtemplateRefExtractor);
517
518
  i0.ɵɵelementEnd();
518
519
  } if (rf & 2) {
519
520
  const _r0 = i0.ɵɵreference(2);
@@ -644,4 +645,4 @@ export { ComboboxFormFieldComponent };
644
645
  }], dropdownApplyFormFieldOffsetWidth: [{
645
646
  type: Input
646
647
  }], dropdownService: [], onSearchStringChange: [], updatePosition: [] }); })();
647
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvY29tYm9ib3gvY29tYm9ib3gtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvY29tYm9ib3gvY29tYm9ib3gtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDakcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3ZHLE9BQU8sRUFBNkMsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRyxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxvREFBb0Qs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QURsQixLQUFLO1lBT0MsY0FBYztrQkFEcEIsS0FBSztZQU9DLGlDQUFpQztrQkFEdkMsS0FBSztZQUlFLGVBQWUsTUEyTWhCLG9CQUFvQixNQU1uQixjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRGVib3VuY2UgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGVjb3JhdG9ycy9kZWJvdW5jZS5kZWNvcmF0b3JzJztcclxuaW1wb3J0IHsgWWllbGQgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGVjb3JhdG9ycy95aWVsZC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBLZXlDb2RlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kYXRhL2FjY2Vzc2liaWxpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IERvbSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZG9tL2RvbSc7XHJcbmltcG9ydCB7IFNtZUluamVjdCB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9kZWNvcmF0b3JzL2luamVjdGlvbi5kZWNvcmF0b3JzJztcclxuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEcm9wZG93blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9kcm9wZG93bi9kcm9wZG93bi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkFsZXJ0cyB9IGZyb20gJy4uLy4uLy4uL2Zvcm0vdmFsaWRhdGlvbi1hbGVydC92YWxpZGF0aW9uLWFsZXJ0JztcclxuaW1wb3J0IHsgU21lU2NoZW1hUHJvcGVydHkgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLWRlY29yYXRvcic7XHJcbmltcG9ydCB7IFNpbXBsZVByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLWZpZWxkLWhvc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2NoZW1hQXJyYXlQcm9wZXJ0eSwgU2NoZW1hT2JqZWN0UHJvcGVydHksIFNjaGVtYVByaW1pdGl2ZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLW1vZGVscyc7XHJcbmltcG9ydCB7IFNtZUludGVybmFsT3B0aW9uc0Zvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL29wdGlvbnMtZm9ybS1maWVsZC9vcHRpb25zLWZvcm0tZmllbGQuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCB0eXBlIFZhbHVlT3JBcnJheTxUPiA9IFQgfCBUW107XHJcbi8vIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aFxyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICA8c21lLWZvcm0tZmllbGQgI2ZpZWxkIHR5cGU9XCJjb21ib2JveFwiIFsobmdNb2RlbCldPVwiZGF0YVwiIFtuYW1lXT1cInByb3BlcnR5U2NoZW1hLm5hbWVcIiBbbGFiZWxdPVwibG9jYWxpemUocHJvcGVydHlTY2hlbWEubGFiZWwpXCJcclxuICAgICAgICBbZGVzY3JpcHRpb25dPVwibG9jYWxpemUocHJvcGVydHlTY2hlbWEuZGVzY3JpcHRpb24pXCIgW3JlcXVpcmVkXT1cInByb3BlcnR5U2NoZW1hLnJlcXVpcmVkXCJcclxuICAgICAgICBbcmVhZG9ubHldPVwiISEoZXZhbEV4cHJlc3Npb24ocHJvcGVydHlTY2hlbWEucmVhZG9ubHlDb25kaXRpb24pKVwiXHJcbiAgICAgICAgW2xvYWRpbmddPVwiISEocHJvcGVydHlTY2hlbWEub3B0aW9ucyAmJiBwcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmJ1c3lDb25kaXRpb24gJiYgZXZhbEV4cHJlc3Npb24ocHJvcGVydHlTY2hlbWEub3B0aW9ucy5idXN5Q29uZGl0aW9uKSlcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhIShwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbiAmJiBldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbikpIHx8ICEhKHByb3BlcnR5U2NoZW1hLm9wdGlvbnMgJiYgcHJvcGVydHlTY2hlbWEub3B0aW9ucy5idXN5Q29uZGl0aW9uICYmIGV2YWxFeHByZXNzaW9uKHByb3BlcnR5U2NoZW1hLm9wdGlvbnMuYnVzeUNvbmRpdGlvbikpXCJcclxuICAgICAgICAoY3VzdG9tVmFsaWRhdGUpPVwicmVzb2x2ZUZ1bmN0aW9uKHByb3BlcnR5U2NoZW1hLmN1c3RvbVZhbGlkYXRpb24pKCRldmVudClcIlxyXG4gICAgICAgIChjdXN0b21Bc3luY1ZhbGlkYXRlKT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiByZXNvbHZlRnVuY3Rpb24ocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXIpKCRldmVudClcIlxyXG4gICAgICAgIFtwZW5kaW5nTWVzc2FnZV09XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgbG9jYWxpemUocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLnBlbmRpbmdNZXNzYWdlKVwiXHJcbiAgICAgICAgW2N1c3RvbUFzeW5jVmFsaWRhdGVEaXNhYmxlZF09XCJzaG91bGRDdXN0b21Bc3luY1ZhbGlkYXRpb25CZURpc2FibGVkKClcIlxyXG4gICAgICAgIFtjdXN0b21Bc3luY1ZhbGlkYXRlRGVib3VuY2VUaW1lXT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiArcHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXJcIlxyXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5vcHRpb25zICYmIHByb3BlcnR5U2NoZW1hLm9wdGlvbnMucGxhY2Vob2xkZXIpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzbWUtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIHByb3BlcnR5U2NoZW1hLm9wdGlvbnMuaXRlbXNcIiBbdmFsdWVdPVwiaXRlbS52YWx1ZVwiIFtsYWJlbF09XCJsb2NhbGl6ZShpdGVtLmxhYmVsKVwiPjwvc21lLW9wdGlvbj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByb3BlcnR5U2NoZW1hLm9wdGlvbnMuaXRlbXNCaW5kaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8c21lLW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiByZXNvbHZlQ29tcG9uZW50TWVtYmVyKHByb3BlcnR5U2NoZW1hLm9wdGlvbnMuaXRlbXNCaW5kaW5nKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIiBbbGFiZWxdPVwibG9jYWxpemUoaXRlbS5sYWJlbClcIj48L3NtZS1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9zbWUtZm9ybS1maWVsZD5cclxuICAgIGBcclxufSlcclxuLy8gdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGhcclxuZXhwb3J0IGNsYXNzIENvbWJvYm94Rm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50IGV4dGVuZHMgU2ltcGxlUHJvcGVydHlTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudCB7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBY2Nlc3NpYmxlIEltcGxlbWVudGF0aW9uIG9mIGEgZm9ybSBmaWVsZCBjb21ibyBib3hcclxuICovXHJcbkBTbWVTY2hlbWFQcm9wZXJ0eSh7XHJcbiAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgIGZvcm1hdDogJ2NvbWJvYm94JyxcclxuICAgIGRlc2NyaXB0aW9uOiAnYSBjb21ib2JveCBjb250cm9sIGJpbmRpbmcgdG8gc3RyaW5nIGRhdGEuJyxcclxuICAgIGxvYWRlckNvbXBvbmVudDogQ29tYm9ib3hGb3JtRmllbGRMb2FkZXJDb21wb25lbnQsXHJcbiAgICBvcHRpb25Qcm9wZXJ0aWVzOiBbXHJcbiAgICAgICAgPFNjaGVtYUFycmF5UHJvcGVydHk+e1xyXG4gICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLkFycmF5LFxyXG4gICAgICAgICAgICBmb3JtYXQ6ICdzaW1wbGUtbGlzdCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICdpdGVtcycsXHJcbiAgICAgICAgICAgIGxhYmVsOiAncmVzb3VyY2VzOnN0cmluZ3M6TXNmdFNtZVNoZWxsLkFuZ3VsYXIuU2NoZW1hRm9ybS5FZGl0b3IuUHJvcGVydHlGb3JtLk9wdGlvbnMuU3RhdGljT3B0aW9ucycsXHJcbiAgICAgICAgICAgIGl0ZW06IDxTY2hlbWFPYmplY3RQcm9wZXJ0eT57XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3Jlc291cmNlLXN0cmluZy1waWNrZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbGFiZWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yLlByb3BlcnR5Rm9ybS5PcHRpb25zLkxhYmVsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yLlByb3BlcnR5Rm9ybS5PcHRpb25zLlZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvdW50OiAxXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICBuYW1lOiAnaXRlbXNCaW5kaW5nJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdyZXNvdXJjZXM6c3RyaW5nczpNc2Z0U21lU2hlbGwuQW5ndWxhci5TY2hlbWFGb3JtLkVkaXRvci5Qcm9wZXJ0eUZvcm0uT3B0aW9ucy5EeW5hbWljT3B0aW9ucydcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICBuYW1lOiAnYnVzeUNvbmRpdGlvbicsXHJcbiAgICAgICAgICAgIGxhYmVsOiAnYWN0dWFsX3N0cmluZzpCdXN5IENvbmRpdGlvbidcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ3Jlc291cmNlLXN0cmluZy1waWNrZXInLFxyXG4gICAgICAgICAgICBuYW1lOiAncGxhY2Vob2xkZXInLFxyXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6ICcnLFxyXG4gICAgICAgICAgICBsYWJlbDogJ2FjdHVhbF9zdHJpbmc6UGxhY2Vob2xkZXInXHJcbiAgICAgICAgfVxyXG4gICAgXVxyXG59KVxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWZvcm0tZmllbGRbdHlwZT1cImNvbWJvYm94XCJdLHNtZS1mb3JtLWZpZWxkW3R5cGU9XCJzZWxlY3RcIl0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbWJvYm94LWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21ib2JveEZvcm1GaWVsZENvbXBvbmVudDxUPiBleHRlbmRzIFNtZUludGVybmFsT3B0aW9uc0Zvcm1GaWVsZENvbXBvbmVudDxBcnJheTxUPj4gaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNvdXJjZSBuYW1lIHRvIHVzZSBmb3IgbG9nZ2luZ1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGxvZ1NvdXJjZU5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuICdDb21ib2JveEZvcm1GaWVsZENvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnc2luZ2xlU2VsZWN0VGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gICAgcHVibGljIHNpbmdsZVNlbGVjdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ211bHRpU2VsZWN0VGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gICAgcHVibGljIG11bHRpU2VsZWN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnbGlzdGJveCcpXHJcbiAgICBwdWJsaWMgbGlzdGJveEVsZW1lbnQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZHJvcERvd24nKVxyXG4gICAgcHVibGljIGRyb3BEb3duOiBEcm9wZG93bkNvbXBvbmVudDtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG11bHRpcGxlOiBib29sZWFuO1xyXG5cclxuICAgIC8vIGJ5IGRlZmF1bHQgd2lsbCBzaG93IGVsbGlwc2lzXHJcbiAgICAvLyBvdGhlcndpc2Ugc2hvdyB3cmFwcGVkIHRleHRcclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgb3ZlcmZsb3dXcmFwOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lIGlmIHJlc2V0IHNlYXJjaCBzdHJpbmcgb24gY29sbGFwc2UgZHJvcGRvd25cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBtYWludGFpblNlYXJjaDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZSBpZiB0aGUgZHJvcGRvd24gd2lsbCB1c2UgdGhlIHNtZS1mb3JtLWZpZWxkIHRvIGxpbWl0IGl0cyBtYXgtd2lkdGhcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBkcm9wZG93bkFwcGx5Rm9ybUZpZWxkT2Zmc2V0V2lkdGggPSB0cnVlO1xyXG5cclxuICAgIEBTbWVJbmplY3QoRHJvcGRvd25TZXJ2aWNlKVxyXG4gICAgcHJpdmF0ZSBkcm9wZG93blNlcnZpY2U6IERyb3Bkb3duU2VydmljZTtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IGlzRmlsdGVyZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU3RyaW5nICYmIHRoaXMuc2VhcmNoU3RyaW5nLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBpdGVtVGVtcGxhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgPyB0aGlzLm11bHRpU2VsZWN0VGVtcGxhdGUgOiB0aGlzLnNpbmdsZVNlbGVjdFRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIENvbWJvYm94Rm9ybUZpZWxkQ29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgICAgICB0aGlzLm11bHRpcGxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tYWludGFpblNlYXJjaCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1wbGVtZW50YXRpb24gb2YgYW5ndWxhciBPbkluaXQgaW50ZXJmYWNlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyBrZXlwcmVzcyBldmVudHMgb24gdGhlIGRyb3Bkb3duIHRvZ2dsZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25Ub2dnbGVLZXlQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIC8vIGZvciBhbGwgb3RoZXIgY2FzZXMsIHNlbmQgdG8gYXV0b2NvbXBsZXRlXHJcbiAgICAgICAgdGhpcy5wcm9ncmVzc2l2ZUF1dG9Db21wbGV0ZShldmVudC5rZXlDb2RlKTtcclxuXHJcbiAgICAgICAgLy8gaGFuZGxlIGFsbCBrZXlzXHJcbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMgdG9nZ2xlZCBzdGF0ZSBjaGFuZ2VzXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkRyb3Bkb3duVG9nZ2xlZChleHBhbmRlZDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmIChleHBhbmRlZCkge1xyXG4gICAgICAgICAgICAvLyBTaW5nbGUgc2VsZWN0aW9uIG9wdGlvbiB3aWR0aCBuZWVkIHRvIGJlIHJlc3RyaWN0ZWQgYnkgdGhlIGRyb3Bkb3duXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseVNpbmdsZU9wdGlvbldpZHRoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoYWJsZSAmJiAhTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UodGhpcy5zZWFyY2hTdHJpbmcpICYmICF0aGlzLm1haW50YWluU2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFN0cmluZyA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBmb2N1c09uID0gdGhpcy5saXN0Ym94RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tyb2xlPVwib3B0aW9uXCJdW2FyaWEtc2VsZWN0ZWQ9XCJ0cnVlXCJdJyk7XHJcbiAgICAgICAgICAgIGlmICghZm9jdXNPbikge1xyXG4gICAgICAgICAgICAgICAgZm9jdXNPbiA9IERvbS5nZXROZXh0Rm9jdXNhYmxlRWxlbWVudCh0aGlzLmxpc3Rib3hFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Rmlyc3RPcHRpb24oKTogSFRNTEVsZW1lbnQge1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrYm94ZXMgPSAoPEhUTUxFbGVtZW50PnRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCkucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hlY2tib3hlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hlY2tib3ggPSA8SFRNTEVsZW1lbnQ+Y2hlY2tib3hlcy5pdGVtKGkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKERvbS5pc0ZvY3VzYWJsZShjaGVja2JveCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hlY2tib3g7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKDxIVE1MRWxlbWVudD50aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbltyb2xlPVwib3B0aW9uXCJdJyk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gPEhUTUxFbGVtZW50Pm9wdGlvbnMuaXRlbShpKTtcclxuICAgICAgICAgICAgICAgIGlmIChEb20uaXNGb2N1c2FibGUob3B0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb247XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIGtleWRvd24gZXZlbnRzIG9uIHRoZSBkcm9wZG93biB0b2dnbGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uVG9nZ2xlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuRW50ZXI6XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5TcGFjZToge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wRG93bi5vblRvZ2dsZUNsaWNrKGV2ZW50LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5VcEFycm93OiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgIXRoaXMuZHJvcERvd24uaXNPcGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RQcmV2aW91c09wdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5Eb3duQXJyb3c6IHtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3BEb3duLm9uVG9nZ2xlQ2xpY2soZXZlbnQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5tdWx0aXBsZSAmJiAhdGhpcy5kcm9wRG93bi5pc09wZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdE5leHRPcHRpb24oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGhhbmRsZSBhbGwga2V5c1xyXG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyBrZXlkb3duIGV2ZW50cyBvbiBvcHRpb24gY2hhbmdlc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25MaXN0Ym94S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuVXBBcnJvdzpcclxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkxlZnRBcnJvdzoge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RDaGVja2JveCA9IHRoaXMuZ2V0Rmlyc3RPcHRpb24oKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaXJzdENoZWNrYm94ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGZpcnN0Q2hlY2tib3gpIHtcclxuICAgICAgICAgICAgICAgICAgICAoPEhUTUxFbGVtZW50Pig8SFRNTEVsZW1lbnQ+dGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwic2VhcmNoXCJdJykpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBoYW5kbGUgYWxsIGtleXNcclxuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblNlYXJjaEZvcm1LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5Eb3duQXJyb3c6XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5SaWdodEFycm93OiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdE9wdGlvbiA9IHRoaXMuZ2V0Rmlyc3RPcHRpb24oKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaXJzdE9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0T3B0aW9uLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDogeyByZXR1cm47IH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGhhbmRsZSBhbGwga2V5c1xyXG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIHRoZSBpZEJhZyB1c2VkIGJ5IHRoaXMgY29tcG9uZW50IHRvIHN0b3JlIHVuaXF1ZSBlbGVtZW50IGlkcy5cclxuICAgICAqIGlkIHZhbHVlcyB3aWxsIGJlIGFzc2lnbmVkIGJlIHRoZSBAc2VlIEJhc2VDb21wb25lbnQgc3VwZXIgY2xhc3MuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBjcmVhdGVJZEJhZygpOiBNc2Z0U21lLlN0cmluZ01hcDxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkZXRhaWxzU3BhbjogJycsXHJcbiAgICAgICAgICAgIGRyb3BEb3duQ29udGVudDogJycsXHJcbiAgICAgICAgICAgIHNlYXJjaElucHV0OiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtcyB2YWxpZGF0aW9uIHRoYXQgaXMgaW50ZXJuYWwgdG8gdGhpcyBjb250cm9sXHJcbiAgICAgKiBAcGFyYW0gYyBUaGUgZm9ybSBjb250cm9sIGF0dGFjaGVkIHRvIHRoaXMgaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRlKGM6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkFsZXJ0cyB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZXF1aXJlZDogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwIHx8IGtleXMuZXZlcnkoayA9PiAhdGhpcy52YWx1ZVtrXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyByZXF1aXJlZDogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3VwZXIudmFsaWRhdGUoYyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPbiBzZWFyY2hTdHJpbmcgbW9kZWwgY2hhbmdlXHJcbiAgICAgKi9cclxuICAgIEBEZWJvdW5jZSgpXHJcbiAgICBwdWJsaWMgb25TZWFyY2hTdHJpbmdDaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25CeVNlYXJjaFN0cmluZygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBAWWllbGQoKVxyXG4gICAgcHJpdmF0ZSB1cGRhdGVQb3NpdGlvbigpIHtcclxuICAgICAgICB0aGlzLmRyb3Bkb3duU2VydmljZS51cGRhdGVQb3NpdGlvbih0aGlzLmRyb3BEb3duLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGhhbmRsZXMgY2FsY3VsYXRpbmcgYW5kIHVwZGF0aW5nIHRoZSBzdHlsZXMgZm9yIGVhY2ggb2YgdGhlIG9wdGlvbnMgaW5zaWRlXHJcbiAgICAgKiBvZiB0aGUgZHJvcGRvd24gY29udGFpbmVyLCBiZWNhdXNlIHRoZSBkcm9wZG93biBjb250YWluZXIncyB3aWR0aCBpcyBkeW5hbWljLFxyXG4gICAgICogaGF2ZSB0byBjYWxjdWxhdGUgb3B0aW9uIGFzIHdlbGwuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYXBwbHlTaW5nbGVPcHRpb25XaWR0aCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0U2luZ2xlRHJvcGRvd25PcHRpb25XaWR0aCgpO1xyXG4gICAgICAgIGlmICh3aWR0aCA9PT0gbnVsbCkgeyByZXR1cm47IH1cclxuICAgICAgICBjb25zdCBvcHRpb25zID0gKDxIVE1MRWxlbWVudD50aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbltyb2xlPVwib3B0aW9uXCJdJyk7XHJcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7IHJldHVybjsgfVxyXG4gICAgICAgIC8vIFRPRE86IHdoZW4gZGVjaWRlZCB0byBkbyB2aXJ0dWFsaXphdGlvbiBmb3IgdGhpcyBwb3J0aW9uXHJcbiAgICAgICAgLy8gbmVlZCB0byBvbmx5IGNhbGN1bGF0ZSB0aGUgb25lcyB0aGF0IGFyZSBpbnNpZGUgb2YgdmlldyBwb3J0XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IDxIVE1MRWxlbWVudD5vcHRpb25zLml0ZW0oaSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwYW4gPSA8SFRNTEVsZW1lbnQ+b3B0aW9uLnF1ZXJ5U2VsZWN0b3IoJ3NwYW4nKTtcclxuICAgICAgICAgICAgaWYgKCFzcGFuKSB7IHJldHVybjsgfVxyXG4gICAgICAgICAgICBjb25zdCBpbm5lclNwYW4gPSA8SFRNTEVsZW1lbnQ+c3Bhbi5xdWVyeVNlbGVjdG9yKCdzcGFuJyk7XHJcbiAgICAgICAgICAgIGlmICghaW5uZXJTcGFuKSB7IHJldHVybjsgfVxyXG4gICAgICAgICAgICBzcGFuLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xyXG4gICAgICAgICAgICAvLyAyNCBpcyB0aGUgYnV0dG9uJ3MgcGFkZGluZyBsZWZ0IGFuZCByaWdodFxyXG4gICAgICAgICAgICAvLyB0aGUgaW5uZXIgcGFydCBvZiB0aGUgc3BhbiBuZWVkIHRvIGJlIHRoZSB0b3RhbCBkcm9wZG93biB2YWx1ZSBtaW51c1xyXG4gICAgICAgICAgICAvLyBidXR0b24ncyBwYWRkaW5nIGxlZnQgYW5kIHJpZ2h0IHRvIG1ha2UgdGhlIGVsbGlwc2lzIHdvcmtpbmdcclxuICAgICAgICAgICAgY29uc3QgaW5uZXJTcGFuV2lkdGggPSB3aWR0aCAtIDI0O1xyXG4gICAgICAgICAgICBpbm5lclNwYW4uc3R5bGUud2lkdGggPSBpbm5lclNwYW5XaWR0aCArICdweCc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGhhbmRsZXMgZ2V0dGluZyB0aGUgY3VycmVudCB3aWR0aCBiZWluZyBhcHBsaWVkIGJ5IHRoZSBkcm9wZG93biBzZXJ2aWNlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0U2luZ2xlRHJvcGRvd25PcHRpb25XaWR0aCgpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRFbGVtZW50ID0gKDxIVE1MRWxlbWVudD50aGlzLmRyb3BEb3duLmNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIGlmICghY29udGVudEVsZW1lbnQpIHsgcmV0dXJuIG51bGw7IH1cclxuICAgICAgICBjb25zdCBmaXJzdE9wdGlvbiA9IERvbS5nZXRGaXJzdEVsZW1lbnQoY29udGVudEVsZW1lbnQsIGVsZW1lbnQgPT4gZWxlbWVudC50YWdOYW1lID09PSAnQlVUVE9OJyk7XHJcbiAgICAgICAgaWYgKCFmaXJzdE9wdGlvbikgeyByZXR1cm4gbnVsbDsgfVxyXG4gICAgICAgIHJldHVybiBmaXJzdE9wdGlvbi5vZmZzZXRXaWR0aDtcclxuICAgIH1cclxufVxyXG4iLCI8c21lLWZvcm0tZmllbGQtbGF5b3V0IFtmb3JtRmllbGRdPVwidGhpc1wiPlxyXG4gIDxzbWUtZHJvcGRvd24gI2Ryb3BEb3duIFthdXRvVG9nZ2xlXT1cImZhbHNlXCIgY2xhc3M9XCJzbWUtY29tYm9ib3ggc21lLWZvY3VzLXpvbmUgc21lLWZvcm0tZmllbGQtZWRpdG9yXCJcclxuICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nT3JEaXNhYmxlZFwiIFtjYWxjdWxhdGVIZWlnaHRdPVwidHJ1ZVwiICh0b2dnbGVkKT1cIm9uRHJvcGRvd25Ub2dnbGVkKCRldmVudClcIlxyXG4gICAgW2Ryb3Bkb3duQXBwbHlGb3JtRmllbGRPZmZzZXRXaWR0aF09XCJkcm9wZG93bkFwcGx5Rm9ybUZpZWxkT2Zmc2V0V2lkdGhcIj5cclxuICAgIDxkaXYgI2Ryb3Bkb3duSGVhZGVyIGNsYXNzPVwic21lLWNvbWJvYm94LWhlYWRlciBzbWUtZHJvcGRvd24tdG9nZ2xlXCIgKGtleWRvd24pPVwib25Ub2dnbGVLZXlkb3duKCRldmVudClcIlxyXG4gICAgICAoa2V5cHJlc3MpPVwib25Ub2dnbGVLZXlQcmVzcygkZXZlbnQpXCI+XHJcbiAgICAgIDxpbnB1dCAjdGV4dElucHV0IHR5cGU9XCJ0ZXh0XCIgcm9sZT1cImNvbWJvYm94XCIgW3ZhbHVlXT1cInNlbGVjdGVkT3B0aW9uc0Rpc3BsYXlWYWx1ZVwiIHJlYWRvbmx5XHJcbiAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJpZEJhZy5kcm9wRG93bkNvbnRlbnRcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImxhYmVsXCJcclxuICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJsb2FkaW5nT3JEaXNhYmxlZCA/IHRydWUgOiBudWxsXCIgW2F0dHIuYXJpYS1vd25zXT1cImlkQmFnLmRyb3BEb3duQ29udGVudFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJkcm9wRG93bi5pc09wZW5cIiBbYXR0ci5hcmlhLWF1dG9jb21wbGV0ZV09XCInbm9uZSdcIlxyXG4gICAgICAgIChjbGljayk9XCJkcm9wRG93bi5vblRvZ2dsZUNsaWNrKCRldmVudCwgdHJ1ZSlcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY2FwaXRhbGl6ZT1cIm9mZlwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiIC8+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFthdHRyLmRpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkID8gdHJ1ZSA6IG51bGxcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cInByZXNlbnRhdGlvblwiXHJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW2F0dHIuYXJpYS1wcmVzc2VkXT1cImRyb3BEb3duLmlzT3BlblwiIFtjbGFzcy5zbWUtdG9nZ2xlZF09XCJkcm9wRG93bi5pc09wZW5cIlxyXG4gICAgICAgIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aFwiIChjbGljayk9XCJkcm9wRG93bi5vblRvZ2dsZUNsaWNrKCRldmVudCwgdHJ1ZSlcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1pY29uIHNtZS1pY29uLWNoZXZyb25Eb3duXCI+PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSBUaGUgbWluaW11bSBvZiB3aWR0aCB0aGF0IGEgZHJvcGRvd24gY2FuIGJlIGlzIHNldCBhdCAyMjBweCAtLT5cclxuICAgIDwhLS0gR3VhcmFudGVlIGRyb3Bkb3duIGNvbnRlbnQgd2lkdGggY2FuIG5vdCBnbyBiZWxvdyB0aGlzIHZhbHVlIG5vIG1hdHRlciBob3cgc21hbGwgdGhlIHdpbmRvdyBpcyBzZXQgYXQgLS0+XHJcbiAgICA8IS0tIE90aGVyd2lzZSB3aWxsIGRpc3BsYXkgZ3JheSBtYXJnaW4gdG8gdGhlIHJpZ2h0IG9mIHRoZSBkcm9wZG93biBjb250ZW50IG9uIHNtYWxsIHdpbmRvdyAtLT5cclxuICAgIDxkaXYgI2xpc3Rib3ggcm9sZT1cImxpc3Rib3hcIiBjbGFzcz1cInNtZS1kcm9wZG93bi1jb250ZW50IHNtZS1kcm9wZG93bi1jb250ZW50LWluaGVyaXQtY29udGFpbmVyLWhlaWdodFwiXHJcbiAgICAgIFtjbGFzcy5zbWUtcGFkZGluZy1zcXVpc2gtdi14c109XCJtdWx0aXBsZVwiIChrZXlkb3duKT1cIm9uTGlzdGJveEtleWRvd24oJGV2ZW50KVwiXHJcbiAgICAgIFtuZ1N0eWxlXT1cImRyb3Bkb3duQXBwbHlGb3JtRmllbGRPZmZzZXRXaWR0aCAmJiB7ICdtYXgtd2lkdGgucHgnOiBkcm9wZG93bkhlYWRlci5vZmZzZXRXaWR0aCA+IDIyMCA/IGRyb3Bkb3duSGVhZGVyLm9mZnNldFdpZHRoIDogMjIwfSB8fCAhZHJvcGRvd25BcHBseUZvcm1GaWVsZE9mZnNldFdpZHRoICYmIHsgJ21heC13aWR0aCc6ICdpbml0aWFsJyB9XCJcclxuICAgICAgW2lkXT1cImlkQmFnLmRyb3BEb3duQ29udGVudFwiPlxyXG4gICAgICA8Zm9ybSAqbmdJZj1cInNlYXJjaGFibGVcIiAoa2V5ZG93bik9XCJvblNlYXJjaEZvcm1LZXlkb3duKCRldmVudClcIiBbY2xhc3Muc21lLXBhZGRpbmctc3F1aXNoLXYteHNdPVwiIW11bHRpcGxlXCI+XHJcbiAgICAgICAgPHNtZS1mb3JtLWZpZWxkIG5hbWU9XCJzZWFyY2hTdHJpbmdWYWx1ZVwiIHR5cGU9XCJzZWFyY2hcIiBbZGlzYWJsZVNlYXJjaEJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5zZWFyY2hcIlxyXG4gICAgICAgICAgW2xhYmVsXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLnNlYXJjaFwiIFtpZF09XCJpZEJhZy5zZWFyY2hJbnB1dFwiXHJcbiAgICAgICAgICBbY291bnRdPVwib3B0aW9uc0ZpbHRlcmVkLmxlbmd0aCA/IG9wdGlvbnNGaWx0ZXJlZC5sZW5ndGggOiAwXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hTdHJpbmdcIlxyXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWFyY2hTdHJpbmdDaGFuZ2UoKVwiPjwvc21lLWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZm9ybT5cclxuICAgICAgPGRpdiAqbmdJZj1cIm11bHRpcGxlICYmIHNob3dTZWxlY3RBbGxcIiBjbGFzcz1cInNtZS1jaGVja2JveCBzbWUtZHJvcGRvd24taW50ZXJhY3Rpb24tZW5hYmxlZFwiXHJcbiAgICAgICAgW2NsYXNzLnNtZS1sYXlvdXQtbm9uZV09XCJpc0ZpbHRlcmVkXCIgcm9sZT1cIm9wdGlvblwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInNtZS1wb3NpdGlvbi1zdHJldGNoLWggc21lLWFycmFuZ2Utd29yZC1icmVhay1hbGxcIj5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiAoY2hhbmdlKT1cInRvZ2dsZUFsbE9wdGlvbnMoKVwiIFtjaGVja2VkXT1cImlzQWxsT3B0aW9uc1NlbGVjdGVkXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImlzQWxsT3B0aW9uc1NlbGVjdGVkXCIgcm9sZT1cImNoZWNrYm94XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJzZWxlY3RBbGxMYWJlbFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic21lLWxheW91dC1hYnNvbHV0ZSBzbWUtcG9zaXRpb24taW5zZXQtbm9uZVwiIC8+XHJcbiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj57e3NlbGVjdEFsbExhYmVsfX08L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hhYmxlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNGaWx0ZXJlZDt0cmFja0J5OiB0cmFja09wdGlvblwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBzbWVUZW1wbGF0ZU91dGxldCBbdGVtcGxhdGVdPVwiaXRlbVRlbXBsYXRlXCIgW2RhdGFdPVwib3B0aW9uXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlYXJjaGFibGVcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uczt0cmFja0J5OiB0cmFja09wdGlvblwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBzbWVUZW1wbGF0ZU91dGxldCBbdGVtcGxhdGVdPVwiaXRlbVRlbXBsYXRlXCIgW2RhdGFdPVwib3B0aW9uXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9zbWUtZHJvcGRvd24+XHJcbiAgPHNtZS12YWxpZGF0aW9uLWFsZXJ0IFthbGVydF09XCJhbGVydFwiPjwvc21lLXZhbGlkYXRpb24tYWxlcnQ+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjc2luZ2xlU2VsZWN0VGVtcGxhdGUgbGV0LW9wdGlvbj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHJvbGU9XCJvcHRpb25cIiBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cIm9wdGlvbi5pc1NlbGVjdGVkXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJvcHRpb24udG9TdHJpbmcoKVwiXHJcbiAgICAgIFtjbGFzcy5zbWUtc2VsZWN0ZWRdPVwib3B0aW9uLmlzU2VsZWN0ZWRcIiAoY2xpY2spPVwidG9nZ2xlT3B0aW9uKG9wdGlvbiwgdHJ1ZSk7IHRleHRJbnB1dC5mb2N1cygpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiIFthdHRyLmRhdGEtdXRhLWlkXT1cIm9wdGlvbi51dGFJZCA/IG9wdGlvbi51dGFJZCA6IG9wdGlvbi52YWx1ZVwiPlxyXG4gICAgICA8c3BhbiBbc21lVG9vbHRpcF09XCJvcHRpb24uZGlzYWJsZWQgPyBudWxsIDogb3B0aW9uLnJlc29sdmVkVG9vbHRpcFRlbXBsYXRlXCJcclxuICAgICAgICBbc21lVG9vbHRpcENvbnRleHRdPVwib3B0aW9uLmRpc2FibGVkID8gbnVsbCA6IChvcHRpb24udG9vbHRpcENvbnRleHQgfHwgb3B0aW9uKVwiPlxyXG4gICAgICAgIDxzcGFuIFtjbGFzcy5zbWUtYXJyYW5nZS1lbGxpcHNpc109XCIhb3ZlcmZsb3dXcmFwXCIgW3RpdGxlXT1cIm9wdGlvbi5yZXNvbHZlZFRpdGxlXCJcclxuICAgICAgICAgIFtjbGFzcy5zbWUtY29tYm9ib3gtb3B0aW9uLXdyYXBdPVwib3ZlcmZsb3dXcmFwXCJcclxuICAgICAgICAgIGNsYXNzPVwic21lLWxheW91dC1mbG9hdC1sZWZ0XCI+e3tvcHRpb24udG9TdHJpbmcoKX19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI211bHRpU2VsZWN0VGVtcGxhdGUgbGV0LW9wdGlvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJzbWUtY2hlY2tib3ggc21lLWRyb3Bkb3duLWludGVyYWN0aW9uLWVuYWJsZWRcIiByb2xlPVwib3B0aW9uXCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cInNtZS1wb3NpdGlvbi1zdHJldGNoLWggc21lLWFycmFuZ2Utd29yZC1icmVhay1hbGxcIj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgKGNoYW5nZSk9XCJ0b2dnbGVPcHRpb24ob3B0aW9uLCAhb3B0aW9uLmlzU2VsZWN0ZWQpXCIgW2NoZWNrZWRdPVwib3B0aW9uLmlzU2VsZWN0ZWRcIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cIm9wdGlvbi5pc1NlbGVjdGVkXCIgcm9sZT1cImNoZWNrYm94XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJvcHRpb24udG9TdHJpbmcoKVwiXHJcbiAgICAgICAgICBbYXR0ci5kYXRhLXV0YS1pZF09XCJvcHRpb24udXRhSWQgPyBvcHRpb24udXRhSWQgOiBvcHRpb24udmFsdWVcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiIGNsYXNzPVwic21lLWxheW91dC1hYnNvbHV0ZSBzbWUtcG9zaXRpb24taW5zZXQtbm9uZVwiIC8+XHJcbiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW2NsYXNzLnNtZS1jb21ib2JveC1vcHRpb24td3JhcF09XCJvdmVyZmxvd1dyYXBcIlxyXG4gICAgICAgICAgY2xhc3M9XCJzbWUtcG9zaXRpb24tc3RyZXRjaC1oIHNtZS1sYXlvdXQtZmxvYXQtbGVmdFwiXHJcbiAgICAgICAgICBbc21lVG9vbHRpcF09XCJvcHRpb24uZGlzYWJsZWQgPyBudWxsIDogb3B0aW9uLnJlc29sdmVkVG9vbHRpcFRlbXBsYXRlXCIgW3RpdGxlXT1cIm9wdGlvbi5yZXNvbHZlZFRpdGxlXCJcclxuICAgICAgICAgIFtzbWVUb29sdGlwQ29udGV4dF09XCJvcHRpb24uZGlzYWJsZWQgPyBudWxsIDogKG9wdGlvbi50b29sdGlwQ29udGV4dCB8fCBvcHRpb24pXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1wb3NpdGlvbi1zdHJldGNoLWggc21lLWxheW91dC1mbG9hdC1sZWZ0XCJcclxuICAgICAgICAgICAgW2NsYXNzLnNtZS1hcnJhbmdlLWVsbGlwc2lzXT1cIiFvdmVyZmxvd1dyYXBcIj57e29wdGlvbi50b1N0cmluZygpfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvbGFiZWw+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L3NtZS1mb3JtLWZpZWxkLWxheW91dD5cclxuIl19
648
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvY29tYm9ib3gvY29tYm9ib3gtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvY29tYm9ib3gvY29tYm9ib3gtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDakcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3ZHLE9BQU8sRUFBNkMsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRyxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxvREFBb0Qs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QVk7a0JBRGxCLEtBQUs7WUFPQyxjQUFjO2tCQURwQixLQUFLO1lBT0MsaUNBQWlDO2tCQUR2QyxLQUFLO1lBSUUsZUFBZSxNQTJNaEIsb0JBQW9CLE1BTW5CLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEZWJvdW5jZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL2RlYm91bmNlLmRlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBZaWVsZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL3lpZWxkLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IEtleUNvZGUgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RhdGEvYWNjZXNzaWJpbGl0eS1tYW5hZ2VyJztcclxuaW1wb3J0IHsgRG9tIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kb20vZG9tJztcclxuaW1wb3J0IHsgU21lSW5qZWN0IH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2RlY29yYXRvcnMvaW5qZWN0aW9uLmRlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERyb3Bkb3duU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uQWxlcnRzIH0gZnJvbSAnLi4vLi4vLi4vZm9ybS92YWxpZGF0aW9uLWFsZXJ0L3ZhbGlkYXRpb24tYWxlcnQnO1xyXG5pbXBvcnQgeyBTbWVTY2hlbWFQcm9wZXJ0eSB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgU2ltcGxlUHJvcGVydHlTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtZmllbGQtaG9zdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTY2hlbWFBcnJheVByb3BlcnR5LCBTY2hlbWFPYmplY3RQcm9wZXJ0eSwgU2NoZW1hUHJpbWl0aXZlVHlwZSB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtbW9kZWxzJztcclxuaW1wb3J0IHsgU21lSW50ZXJuYWxPcHRpb25zRm9ybUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vb3B0aW9ucy1mb3JtLWZpZWxkL29wdGlvbnMtZm9ybS1maWVsZC5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IHR5cGUgVmFsdWVPckFycmF5PFQ+ID0gVCB8IFRbXTtcclxuLy8gdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoXHJcbkBDb21wb25lbnQoe1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgIDxzbWUtZm9ybS1maWVsZCAjZmllbGQgdHlwZT1cImNvbWJvYm94XCIgWyhuZ01vZGVsKV09XCJkYXRhXCIgW25hbWVdPVwicHJvcGVydHlTY2hlbWEubmFtZVwiIFtsYWJlbF09XCJsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5sYWJlbClcIlxyXG4gICAgICAgIFtkZXNjcmlwdGlvbl09XCJsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5kZXNjcmlwdGlvbilcIiBbcmVxdWlyZWRdPVwicHJvcGVydHlTY2hlbWEucmVxdWlyZWRcIlxyXG4gICAgICAgIFtyZWFkb25seV09XCIhIShldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5yZWFkb25seUNvbmRpdGlvbikpXCJcclxuICAgICAgICBbbG9hZGluZ109XCIhIShwcm9wZXJ0eVNjaGVtYS5vcHRpb25zICYmIHByb3BlcnR5U2NoZW1hLm9wdGlvbnMuYnVzeUNvbmRpdGlvbiAmJiBldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmJ1c3lDb25kaXRpb24pKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiEhKHByb3BlcnR5U2NoZW1hLmRpc2FibGVkQ29uZGl0aW9uICYmIGV2YWxFeHByZXNzaW9uKHByb3BlcnR5U2NoZW1hLmRpc2FibGVkQ29uZGl0aW9uKSkgfHwgISEocHJvcGVydHlTY2hlbWEub3B0aW9ucyAmJiBwcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmJ1c3lDb25kaXRpb24gJiYgZXZhbEV4cHJlc3Npb24ocHJvcGVydHlTY2hlbWEub3B0aW9ucy5idXN5Q29uZGl0aW9uKSlcIlxyXG4gICAgICAgIChjdXN0b21WYWxpZGF0ZSk9XCJyZXNvbHZlRnVuY3Rpb24ocHJvcGVydHlTY2hlbWEuY3VzdG9tVmFsaWRhdGlvbikoJGV2ZW50KVwiXHJcbiAgICAgICAgKGN1c3RvbUFzeW5jVmFsaWRhdGUpPVwicHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uICYmIHJlc29sdmVGdW5jdGlvbihwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24uaGFuZGxlcikoJGV2ZW50KVwiXHJcbiAgICAgICAgW3BlbmRpbmdNZXNzYWdlXT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiBsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24ucGVuZGluZ01lc3NhZ2UpXCJcclxuICAgICAgICBbY3VzdG9tQXN5bmNWYWxpZGF0ZURpc2FibGVkXT1cInNob3VsZEN1c3RvbUFzeW5jVmFsaWRhdGlvbkJlRGlzYWJsZWQoKVwiXHJcbiAgICAgICAgW2N1c3RvbUFzeW5jVmFsaWRhdGVEZWJvdW5jZVRpbWVdPVwicHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uICYmICtwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24uaGFuZGxlclwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLm9wdGlvbnMgJiYgcHJvcGVydHlTY2hlbWEub3B0aW9ucy5wbGFjZWhvbGRlcilcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPHNtZS1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgcHJvcGVydHlTY2hlbWEub3B0aW9ucy5pdGVtc1wiIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCIgW2xhYmVsXT1cImxvY2FsaXplKGl0ZW0ubGFiZWwpXCI+PC9zbWUtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJvcGVydHlTY2hlbWEub3B0aW9ucy5pdGVtc0JpbmRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxzbWUtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJlc29sdmVDb21wb25lbnRNZW1iZXIocHJvcGVydHlTY2hlbWEub3B0aW9ucy5pdGVtc0JpbmRpbmcpXCJcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS52YWx1ZVwiIFtsYWJlbF09XCJsb2NhbGl6ZShpdGVtLmxhYmVsKVwiPjwvc21lLW9wdGlvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3NtZS1mb3JtLWZpZWxkPlxyXG4gICAgYFxyXG59KVxyXG4vLyB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aFxyXG5leHBvcnQgY2xhc3MgQ29tYm9ib3hGb3JtRmllbGRMb2FkZXJDb21wb25lbnQgZXh0ZW5kcyBTaW1wbGVQcm9wZXJ0eVNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50IHtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFjY2Vzc2libGUgSW1wbGVtZW50YXRpb24gb2YgYSBmb3JtIGZpZWxkIGNvbWJvIGJveFxyXG4gKi9cclxuQFNtZVNjaGVtYVByb3BlcnR5KHtcclxuICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuU3RyaW5nLFxyXG4gICAgZm9ybWF0OiAnY29tYm9ib3gnLFxyXG4gICAgZGVzY3JpcHRpb246ICdhIGNvbWJvYm94IGNvbnRyb2wgYmluZGluZyB0byBzdHJpbmcgZGF0YS4nLFxyXG4gICAgbG9hZGVyQ29tcG9uZW50OiBDb21ib2JveEZvcm1GaWVsZExvYWRlckNvbXBvbmVudCxcclxuICAgIG9wdGlvblByb3BlcnRpZXM6IFtcclxuICAgICAgICA8U2NoZW1hQXJyYXlQcm9wZXJ0eT57XHJcbiAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuQXJyYXksXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ3NpbXBsZS1saXN0JyxcclxuICAgICAgICAgICAgbmFtZTogJ2l0ZW1zJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdyZXNvdXJjZXM6c3RyaW5nczpNc2Z0U21lU2hlbGwuQW5ndWxhci5TY2hlbWFGb3JtLkVkaXRvci5Qcm9wZXJ0eUZvcm0uT3B0aW9ucy5TdGF0aWNPcHRpb25zJyxcclxuICAgICAgICAgICAgaXRlbTogPFNjaGVtYU9iamVjdFByb3BlcnR5PntcclxuICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgZm9ybWF0OiAnZGVmYXVsdCcsXHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAncmVzb3VyY2Utc3RyaW5nLXBpY2tlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdsYWJlbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAncmVzb3VyY2VzOnN0cmluZ3M6TXNmdFNtZVNoZWxsLkFuZ3VsYXIuU2NoZW1hRm9ybS5FZGl0b3IuUHJvcGVydHlGb3JtLk9wdGlvbnMuTGFiZWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAndGV4dGJveCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICd2YWx1ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAncmVzb3VyY2VzOnN0cmluZ3M6TXNmdFNtZVNoZWxsLkFuZ3VsYXIuU2NoZW1hRm9ybS5FZGl0b3IuUHJvcGVydHlGb3JtLk9wdGlvbnMuVmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uQ291bnQ6IDFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgZm9ybWF0OiAndGV4dGJveCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICdpdGVtc0JpbmRpbmcnLFxyXG4gICAgICAgICAgICBsYWJlbDogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yLlByb3BlcnR5Rm9ybS5PcHRpb25zLkR5bmFtaWNPcHRpb25zJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgZm9ybWF0OiAndGV4dGJveCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICdidXN5Q29uZGl0aW9uJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdhY3R1YWxfc3RyaW5nOkJ1c3kgQ29uZGl0aW9uJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgZm9ybWF0OiAncmVzb3VyY2Utc3RyaW5nLXBpY2tlcicsXHJcbiAgICAgICAgICAgIG5hbWU6ICdwbGFjZWhvbGRlcicsXHJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJycsXHJcbiAgICAgICAgICAgIGxhYmVsOiAnYWN0dWFsX3N0cmluZzpQbGFjZWhvbGRlcidcclxuICAgICAgICB9XHJcbiAgICBdXHJcbn0pXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtZm9ybS1maWVsZFt0eXBlPVwiY29tYm9ib3hcIl0sc21lLWZvcm0tZmllbGRbdHlwZT1cInNlbGVjdFwiXScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tYm9ib3gtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbWJvYm94Rm9ybUZpZWxkQ29tcG9uZW50PFQ+IGV4dGVuZHMgU21lSW50ZXJuYWxPcHRpb25zRm9ybUZpZWxkQ29tcG9uZW50PEFycmF5PFQ+PiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0NvbWJvYm94Rm9ybUZpZWxkQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICBAVmlld0NoaWxkKCdzaW5nbGVTZWxlY3RUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgICBwdWJsaWMgc2luZ2xlU2VsZWN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnbXVsdGlTZWxlY3RUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgICBwdWJsaWMgbXVsdGlTZWxlY3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdsaXN0Ym94JylcclxuICAgIHB1YmxpYyBsaXN0Ym94RWxlbWVudDogRWxlbWVudFJlZjtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdkcm9wRG93bicpXHJcbiAgICBwdWJsaWMgZHJvcERvd246IERyb3Bkb3duQ29tcG9uZW50O1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbXVsdGlwbGU6IGJvb2xlYW47XHJcblxyXG4gICAgLy8gYnkgZGVmYXVsdCB3aWxsIHNob3cgZWxsaXBzaXNcclxuICAgIC8vIG90aGVyd2lzZSBzaG93IHdyYXBwZWQgdGV4dFxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBvdmVyZmxvd1dyYXA6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmUgaWYgcmVzZXQgc2VhcmNoIHN0cmluZyBvbiBjb2xsYXBzZSBkcm9wZG93blxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG1haW50YWluU2VhcmNoOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lIGlmIHRoZSBkcm9wZG93biB3aWxsIHVzZSB0aGUgc21lLWZvcm0tZmllbGQgdG8gbGltaXQgaXRzIG1heC13aWR0aFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRyb3Bkb3duQXBwbHlGb3JtRmllbGRPZmZzZXRXaWR0aCA9IHRydWU7XHJcblxyXG4gICAgQFNtZUluamVjdChEcm9wZG93blNlcnZpY2UpXHJcbiAgICBwcml2YXRlIGRyb3Bkb3duU2VydmljZTogRHJvcGRvd25TZXJ2aWNlO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgaXNGaWx0ZXJlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hTdHJpbmcgJiYgdGhpcy5zZWFyY2hTdHJpbmcubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGl0ZW1UZW1wbGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/IHRoaXMubXVsdGlTZWxlY3RUZW1wbGF0ZSA6IHRoaXMuc2luZ2xlU2VsZWN0VGVtcGxhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgQ29tYm9ib3hGb3JtRmllbGRDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1haW50YWluU2VhcmNoID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBhbmd1bGFyIE9uSW5pdCBpbnRlcmZhY2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIGtleXByZXNzIGV2ZW50cyBvbiB0aGUgZHJvcGRvd24gdG9nZ2xlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblRvZ2dsZUtleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgLy8gZm9yIGFsbCBvdGhlciBjYXNlcywgc2VuZCB0byBhdXRvY29tcGxldGVcclxuICAgICAgICB0aGlzLnByb2dyZXNzaXZlQXV0b0NvbXBsZXRlKGV2ZW50LmtleUNvZGUpO1xyXG5cclxuICAgICAgICAvLyBoYW5kbGUgYWxsIGtleXNcclxuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB0b2dnbGVkIHN0YXRlIGNoYW5nZXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uRHJvcGRvd25Ub2dnbGVkKGV4cGFuZGVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKGV4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIC8vIFNpbmdsZSBzZWxlY3Rpb24gb3B0aW9uIHdpZHRoIG5lZWQgdG8gYmUgcmVzdHJpY3RlZCBieSB0aGUgZHJvcGRvd25cclxuICAgICAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5U2luZ2xlT3B0aW9uV2lkdGgoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hhYmxlICYmICFNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZSh0aGlzLnNlYXJjaFN0cmluZykgJiYgIXRoaXMubWFpbnRhaW5TZWFyY2gpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU3RyaW5nID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGZvY3VzT24gPSB0aGlzLmxpc3Rib3hFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3JvbGU9XCJvcHRpb25cIl1bYXJpYS1zZWxlY3RlZD1cInRydWVcIl0nKTtcclxuICAgICAgICAgICAgaWYgKCFmb2N1c09uKSB7XHJcbiAgICAgICAgICAgICAgICBmb2N1c09uID0gRG9tLmdldE5leHRGb2N1c2FibGVFbGVtZW50KHRoaXMubGlzdGJveEVsZW1lbnQubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGaXJzdE9wdGlvbigpOiBIVE1MRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgY29uc3QgY2hlY2tib3hlcyA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50KS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGVja2JveGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGVja2JveCA9IDxIVE1MRWxlbWVudD5jaGVja2JveGVzLml0ZW0oaSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoRG9tLmlzRm9jdXNhYmxlKGNoZWNrYm94KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGVja2JveDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoPEhUTUxFbGVtZW50PnRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCkucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uW3JvbGU9XCJvcHRpb25cIl0nKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSA8SFRNTEVsZW1lbnQ+b3B0aW9ucy5pdGVtKGkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKERvbS5pc0ZvY3VzYWJsZShvcHRpb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMga2V5ZG93biBldmVudHMgb24gdGhlIGRyb3Bkb3duIHRvZ2dsZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25Ub2dnbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5FbnRlcjpcclxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLlNwYWNlOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3BEb3duLm9uVG9nZ2xlQ2xpY2soZXZlbnQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLlVwQXJyb3c6IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiAhdGhpcy5kcm9wRG93bi5pc09wZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFByZXZpb3VzT3B0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkRvd25BcnJvdzoge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcERvd24ub25Ub2dnbGVDbGljayhldmVudCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm11bHRpcGxlICYmICF0aGlzLmRyb3BEb3duLmlzT3Blbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0TmV4dE9wdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaGFuZGxlIGFsbCBrZXlzXHJcbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIGtleWRvd24gZXZlbnRzIG9uIG9wdGlvbiBjaGFuZ2VzXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkxpc3Rib3hLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5VcEFycm93OlxyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuTGVmdEFycm93OiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENoZWNrYm94ID0gdGhpcy5nZXRGaXJzdE9wdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2hlY2tib3ggJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZmlyc3RDaGVja2JveCkge1xyXG4gICAgICAgICAgICAgICAgICAgICg8SFRNTEVsZW1lbnQ+KDxIVE1MRWxlbWVudD50aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJzZWFyY2hcIl0nKSkuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGhhbmRsZSBhbGwga2V5c1xyXG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uU2VhcmNoRm9ybUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkRvd25BcnJvdzpcclxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLlJpZ2h0QXJyb3c6IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gdGhpcy5nZXRGaXJzdE9wdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0T3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RPcHRpb24uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWZhdWx0OiB7IHJldHVybjsgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaGFuZGxlIGFsbCBrZXlzXHJcbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICogaWQgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgYmUgdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRldGFpbHNTcGFuOiAnJyxcclxuICAgICAgICAgICAgZHJvcERvd25Db250ZW50OiAnJyxcclxuICAgICAgICAgICAgc2VhcmNoSW5wdXQ6ICcnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIHZhbGlkYXRpb24gdGhhdCBpcyBpbnRlcm5hbCB0byB0aGlzIGNvbnRyb2xcclxuICAgICAqIEBwYXJhbSBjIFRoZSBmb3JtIGNvbnRyb2wgYXR0YWNoZWQgdG8gdGhpcyBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uQWxlcnRzIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgaWYgKE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDAgfHwga2V5cy5ldmVyeShrID0+ICF0aGlzLnZhbHVlW2tdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdXBlci52YWxpZGF0ZShjKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9uIHNlYXJjaFN0cmluZyBtb2RlbCBjaGFuZ2VcclxuICAgICAqL1xyXG4gICAgQERlYm91bmNlKClcclxuICAgIHB1YmxpYyBvblNlYXJjaFN0cmluZ0NoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbkJ5U2VhcmNoU3RyaW5nKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwcml2YXRlIHVwZGF0ZVBvc2l0aW9uKCkge1xyXG4gICAgICAgIHRoaXMuZHJvcGRvd25TZXJ2aWNlLnVwZGF0ZVBvc2l0aW9uKHRoaXMuZHJvcERvd24sIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgaGFuZGxlcyBjYWxjdWxhdGluZyBhbmQgdXBkYXRpbmcgdGhlIHN0eWxlcyBmb3IgZWFjaCBvZiB0aGUgb3B0aW9ucyBpbnNpZGVcclxuICAgICAqIG9mIHRoZSBkcm9wZG93biBjb250YWluZXIsIGJlY2F1c2UgdGhlIGRyb3Bkb3duIGNvbnRhaW5lcidzIHdpZHRoIGlzIGR5bmFtaWMsXHJcbiAgICAgKiBoYXZlIHRvIGNhbGN1bGF0ZSBvcHRpb24gYXMgd2VsbC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBhcHBseVNpbmdsZU9wdGlvbldpZHRoKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRTaW5nbGVEcm9wZG93bk9wdGlvbldpZHRoKCk7XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSBudWxsKSB7IHJldHVybjsgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoPEhUTUxFbGVtZW50PnRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCkucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uW3JvbGU9XCJvcHRpb25cIl0nKTtcclxuICAgICAgICBpZiAoIW9wdGlvbnMpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgLy8gVE9ETzogd2hlbiBkZWNpZGVkIHRvIGRvIHZpcnR1YWxpemF0aW9uIGZvciB0aGlzIHBvcnRpb25cclxuICAgICAgICAvLyBuZWVkIHRvIG9ubHkgY2FsY3VsYXRlIHRoZSBvbmVzIHRoYXQgYXJlIGluc2lkZSBvZiB2aWV3IHBvcnRcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gPEhUTUxFbGVtZW50Pm9wdGlvbnMuaXRlbShpKTtcclxuICAgICAgICAgICAgY29uc3Qgc3BhbiA9IDxIVE1MRWxlbWVudD5vcHRpb24ucXVlcnlTZWxlY3Rvcignc3BhbicpO1xyXG4gICAgICAgICAgICBpZiAoIXNwYW4pIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgIGNvbnN0IGlubmVyU3BhbiA9IDxIVE1MRWxlbWVudD5zcGFuLnF1ZXJ5U2VsZWN0b3IoJ3NwYW4nKTtcclxuICAgICAgICAgICAgaWYgKCFpbm5lclNwYW4pIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgIHNwYW4uc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XHJcbiAgICAgICAgICAgIC8vIDI0IGlzIHRoZSBidXR0b24ncyBwYWRkaW5nIGxlZnQgYW5kIHJpZ2h0XHJcbiAgICAgICAgICAgIC8vIHRoZSBpbm5lciBwYXJ0IG9mIHRoZSBzcGFuIG5lZWQgdG8gYmUgdGhlIHRvdGFsIGRyb3Bkb3duIHZhbHVlIG1pbnVzXHJcbiAgICAgICAgICAgIC8vIGJ1dHRvbidzIHBhZGRpbmcgbGVmdCBhbmQgcmlnaHQgdG8gbWFrZSB0aGUgZWxsaXBzaXMgd29ya2luZ1xyXG4gICAgICAgICAgICBjb25zdCBpbm5lclNwYW5XaWR0aCA9IHdpZHRoIC0gMjQ7XHJcbiAgICAgICAgICAgIGlubmVyU3Bhbi5zdHlsZS53aWR0aCA9IGlubmVyU3BhbldpZHRoICsgJ3B4JztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaGFuZGxlcyBnZXR0aW5nIHRoZSBjdXJyZW50IHdpZHRoIGJlaW5nIGFwcGxpZWQgYnkgdGhlIGRyb3Bkb3duIHNlcnZpY2VcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRTaW5nbGVEcm9wZG93bk9wdGlvbldpZHRoKCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgY29udGVudEVsZW1lbnQgPSAoPEhUTUxFbGVtZW50PnRoaXMuZHJvcERvd24uY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgaWYgKCFjb250ZW50RWxlbWVudCkgeyByZXR1cm4gbnVsbDsgfVxyXG4gICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gRG9tLmdldEZpcnN0RWxlbWVudChjb250ZW50RWxlbWVudCwgZWxlbWVudCA9PiBlbGVtZW50LnRhZ05hbWUgPT09ICdCVVRUT04nKTtcclxuICAgICAgICBpZiAoIWZpcnN0T3B0aW9uKSB7IHJldHVybiBudWxsOyB9XHJcbiAgICAgICAgcmV0dXJuIGZpcnN0T3B0aW9uLm9mZnNldFdpZHRoO1xyXG4gICAgfVxyXG59XHJcbiIsIjxzbWUtZm9ybS1maWVsZC1sYXlvdXQgW2Zvcm1GaWVsZF09XCJ0aGlzXCI+XHJcbiAgPHNtZS1kcm9wZG93biAjZHJvcERvd24gW2F1dG9Ub2dnbGVdPVwiZmFsc2VcIiBjbGFzcz1cInNtZS1jb21ib2JveCBzbWUtZm9jdXMtem9uZSBzbWUtZm9ybS1maWVsZC1lZGl0b3JcIlxyXG4gICAgW2Rpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkXCIgW2NhbGN1bGF0ZUhlaWdodF09XCJ0cnVlXCIgKHRvZ2dsZWQpPVwib25Ecm9wZG93blRvZ2dsZWQoJGV2ZW50KVwiXHJcbiAgICBbZHJvcGRvd25BcHBseUZvcm1GaWVsZE9mZnNldFdpZHRoXT1cImRyb3Bkb3duQXBwbHlGb3JtRmllbGRPZmZzZXRXaWR0aFwiPlxyXG4gICAgPGRpdiAjZHJvcGRvd25IZWFkZXIgY2xhc3M9XCJzbWUtY29tYm9ib3gtaGVhZGVyIHNtZS1kcm9wZG93bi10b2dnbGVcIiAoa2V5ZG93bik9XCJvblRvZ2dsZUtleWRvd24oJGV2ZW50KVwiXHJcbiAgICAgIChrZXlwcmVzcyk9XCJvblRvZ2dsZUtleVByZXNzKCRldmVudClcIj5cclxuICAgICAgPGlucHV0ICN0ZXh0SW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwiY29tYm9ib3hcIiBbdmFsdWVdPVwic2VsZWN0ZWRPcHRpb25zRGlzcGxheVZhbHVlXCIgcmVhZG9ubHlcclxuICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImlkQmFnLmRyb3BEb3duQ29udGVudFwiIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWxcIlxyXG4gICAgICAgIFthdHRyLmRpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkID8gdHJ1ZSA6IG51bGxcIiBbYXR0ci5hcmlhLW93bnNdPVwiaWRCYWcuZHJvcERvd25Db250ZW50XCJcclxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImRyb3BEb3duLmlzT3BlblwiIFthdHRyLmFyaWEtYXV0b2NvbXBsZXRlXT1cIidub25lJ1wiXHJcbiAgICAgICAgKGNsaWNrKT1cImRyb3BEb3duLm9uVG9nZ2xlQ2xpY2soJGV2ZW50LCB0cnVlKVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jYXBpdGFsaXplPVwib2ZmXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCIgLz5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2F0dHIuZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWQgPyB0cnVlIDogbnVsbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwicHJlc2VudGF0aW9uXCJcclxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIiBbYXR0ci5hcmlhLXByZXNzZWRdPVwiZHJvcERvd24uaXNPcGVuXCIgW2NsYXNzLnNtZS10b2dnbGVkXT1cImRyb3BEb3duLmlzT3BlblwiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtYnV0dG9uLXRyaWdnZXIgc21lLWJ1dHRvbi1hdXRvLXdpZHRoXCIgKGNsaWNrKT1cImRyb3BEb3duLm9uVG9nZ2xlQ2xpY2soJGV2ZW50LCB0cnVlKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tY2hldnJvbkRvd25cIj48L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIFRoZSBtaW5pbXVtIG9mIHdpZHRoIHRoYXQgYSBkcm9wZG93biBjYW4gYmUgaXMgc2V0IGF0IDIyMHB4IC0tPlxyXG4gICAgPCEtLSBHdWFyYW50ZWUgZHJvcGRvd24gY29udGVudCB3aWR0aCBjYW4gbm90IGdvIGJlbG93IHRoaXMgdmFsdWUgbm8gbWF0dGVyIGhvdyBzbWFsbCB0aGUgd2luZG93IGlzIHNldCBhdCAtLT5cclxuICAgIDwhLS0gT3RoZXJ3aXNlIHdpbGwgZGlzcGxheSBncmF5IG1hcmdpbiB0byB0aGUgcmlnaHQgb2YgdGhlIGRyb3Bkb3duIGNvbnRlbnQgb24gc21hbGwgd2luZG93IC0tPlxyXG4gICAgPGRpdiAjbGlzdGJveCByb2xlPVwibGlzdGJveFwiIGNsYXNzPVwic21lLWRyb3Bkb3duLWNvbnRlbnQgc21lLWRyb3Bkb3duLWNvbnRlbnQtaW5oZXJpdC1jb250YWluZXItaGVpZ2h0XCJcclxuICAgICAgW2NsYXNzLnNtZS1wYWRkaW5nLXNxdWlzaC12LXhzXT1cIm11bHRpcGxlXCIgKGtleWRvd24pPVwib25MaXN0Ym94S2V5ZG93bigkZXZlbnQpXCJcclxuICAgICAgW25nU3R5bGVdPVwiZHJvcGRvd25BcHBseUZvcm1GaWVsZE9mZnNldFdpZHRoICYmIHsgJ21heC13aWR0aC5weCc6IGRyb3Bkb3duSGVhZGVyLm9mZnNldFdpZHRoID4gMjIwID8gZHJvcGRvd25IZWFkZXIub2Zmc2V0V2lkdGggOiAyMjB9IHx8ICFkcm9wZG93bkFwcGx5Rm9ybUZpZWxkT2Zmc2V0V2lkdGggJiYgeyAnbWF4LXdpZHRoJzogJ2luaXRpYWwnIH1cIlxyXG4gICAgICBbaWRdPVwiaWRCYWcuZHJvcERvd25Db250ZW50XCI+XHJcbiAgICAgIDxmb3JtICpuZ0lmPVwic2VhcmNoYWJsZVwiIChrZXlkb3duKT1cIm9uU2VhcmNoRm9ybUtleWRvd24oJGV2ZW50KVwiIFtjbGFzcy5zbWUtcGFkZGluZy1zcXVpc2gtdi14c109XCIhbXVsdGlwbGVcIj5cclxuICAgICAgICA8c21lLWZvcm0tZmllbGQgbmFtZT1cInNlYXJjaFN0cmluZ1ZhbHVlXCIgdHlwZT1cInNlYXJjaFwiIFtkaXNhYmxlU2VhcmNoQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLnNlYXJjaFwiXHJcbiAgICAgICAgICBbbGFiZWxdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uc2VhcmNoXCIgW2lkXT1cImlkQmFnLnNlYXJjaElucHV0XCJcclxuICAgICAgICAgIFtjb3VudF09XCJvcHRpb25zRmlsdGVyZWQubGVuZ3RoID8gb3B0aW9uc0ZpbHRlcmVkLmxlbmd0aCA6IDBcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFN0cmluZ1wiXHJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaFN0cmluZ0NoYW5nZSgpXCI+PC9zbWUtZm9ybS1maWVsZD5cclxuICAgICAgPC9mb3JtPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwibXVsdGlwbGUgJiYgc2hvd1NlbGVjdEFsbFwiIGNsYXNzPVwic21lLWNoZWNrYm94IHNtZS1kcm9wZG93bi1pbnRlcmFjdGlvbi1lbmFibGVkXCJcclxuICAgICAgICBbY2xhc3Muc21lLWxheW91dC1ub25lXT1cImlzRmlsdGVyZWRcIiByb2xlPVwib3B0aW9uXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwic21lLXBvc2l0aW9uLXN0cmV0Y2gtaCBzbWUtYXJyYW5nZS13b3JkLWJyZWFrLWFsbFwiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIChjaGFuZ2UpPVwidG9nZ2xlQWxsT3B0aW9ucygpXCIgW2NoZWNrZWRdPVwiaXNBbGxPcHRpb25zU2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiaXNBbGxPcHRpb25zU2VsZWN0ZWRcIiByb2xlPVwiY2hlY2tib3hcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInNlbGVjdEFsbExhYmVsXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzbWUtbGF5b3V0LWFic29sdXRlIHNtZS1wb3NpdGlvbi1pbnNldC1ub25lXCIgLz5cclxuICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPnt7c2VsZWN0QWxsTGFiZWx9fTwvc3Bhbj5cclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaGFibGVcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc0ZpbHRlcmVkO3RyYWNrQnk6IHRyYWNrT3B0aW9uXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyIHNtZVRlbXBsYXRlT3V0bGV0IFt0ZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIiBbZGF0YV09XCJvcHRpb25cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VhcmNoYWJsZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zO3RyYWNrQnk6IHRyYWNrT3B0aW9uXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyIHNtZVRlbXBsYXRlT3V0bGV0IFt0ZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIiBbZGF0YV09XCJvcHRpb25cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L3NtZS1kcm9wZG93bj5cclxuICA8c21lLXZhbGlkYXRpb24tYWxlcnQgW2FsZXJ0XT1cImFsZXJ0XCI+PC9zbWUtdmFsaWRhdGlvbi1hbGVydD5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNzaW5nbGVTZWxlY3RUZW1wbGF0ZSBsZXQtb3B0aW9uPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcm9sZT1cIm9wdGlvblwiIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwib3B0aW9uLmlzU2VsZWN0ZWRcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIm9wdGlvbi50b1N0cmluZygpXCJcclxuICAgICAgW2NsYXNzLnNtZS1zZWxlY3RlZF09XCJvcHRpb24uaXNTZWxlY3RlZFwiIChjbGljayk9XCJ0b2dnbGVPcHRpb24ob3B0aW9uLCB0cnVlKTsgdGV4dElucHV0LmZvY3VzKClcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCIgW2F0dHIuZGF0YS11dGEtaWRdPVwib3B0aW9uLnV0YUlkID8gb3B0aW9uLnV0YUlkIDogb3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgIDxzcGFuIFtzbWVUb29sdGlwXT1cIm9wdGlvbi5kaXNhYmxlZCA/IG51bGwgOiBvcHRpb24ucmVzb2x2ZWRUb29sdGlwVGVtcGxhdGVcIlxyXG4gICAgICAgIFtzbWVUb29sdGlwQ29udGV4dF09XCJvcHRpb24uZGlzYWJsZWQgPyBudWxsIDogKG9wdGlvbi50b29sdGlwQ29udGV4dCB8fCBvcHRpb24pXCI+XHJcbiAgICAgICAgPHNwYW4gW2NsYXNzLnNtZS1hcnJhbmdlLWVsbGlwc2lzXT1cIiFvdmVyZmxvd1dyYXBcIiBbdGl0bGVdPVwib3B0aW9uLnJlc29sdmVkVGl0bGVcIlxyXG4gICAgICAgICAgW2NsYXNzLnNtZS1jb21ib2JveC1vcHRpb24td3JhcF09XCJvdmVyZmxvd1dyYXBcIlxyXG4gICAgICAgICAgY2xhc3M9XCJzbWUtbGF5b3V0LWZsb2F0LWxlZnRcIj57e29wdGlvbi50b1N0cmluZygpfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjbXVsdGlTZWxlY3RUZW1wbGF0ZSBsZXQtb3B0aW9uPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1jaGVja2JveCBzbWUtZHJvcGRvd24taW50ZXJhY3Rpb24tZW5hYmxlZFwiIHJvbGU9XCJvcHRpb25cIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwic21lLXBvc2l0aW9uLXN0cmV0Y2gtaCBzbWUtYXJyYW5nZS13b3JkLWJyZWFrLWFsbFwiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiAoY2hhbmdlKT1cInRvZ2dsZU9wdGlvbihvcHRpb24sICFvcHRpb24uaXNTZWxlY3RlZClcIiBbY2hlY2tlZF09XCJvcHRpb24uaXNTZWxlY3RlZFwiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwib3B0aW9uLmlzU2VsZWN0ZWRcIiByb2xlPVwiY2hlY2tib3hcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIm9wdGlvbi50b1N0cmluZygpXCIgW2F0dHIuZGF0YS11dGEtaWRdPVwib3B0aW9uLnV0YUlkID8gb3B0aW9uLnV0YUlkIDogb3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCIgY2xhc3M9XCJzbWUtbGF5b3V0LWFic29sdXRlIHNtZS1wb3NpdGlvbi1pbnNldC1ub25lXCIgLz5cclxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbY2xhc3Muc21lLWNvbWJvYm94LW9wdGlvbi13cmFwXT1cIm92ZXJmbG93V3JhcFwiXHJcbiAgICAgICAgICBjbGFzcz1cInNtZS1wb3NpdGlvbi1zdHJldGNoLWggc21lLWxheW91dC1mbG9hdC1sZWZ0XCJcclxuICAgICAgICAgIFtzbWVUb29sdGlwXT1cIm9wdGlvbi5kaXNhYmxlZCA/IG51bGwgOiBvcHRpb24ucmVzb2x2ZWRUb29sdGlwVGVtcGxhdGVcIiBbdGl0bGVdPVwib3B0aW9uLnJlc29sdmVkVGl0bGVcIlxyXG4gICAgICAgICAgW3NtZVRvb2x0aXBDb250ZXh0XT1cIm9wdGlvbi5kaXNhYmxlZCA/IG51bGwgOiAob3B0aW9uLnRvb2x0aXBDb250ZXh0IHx8IG9wdGlvbilcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLXBvc2l0aW9uLXN0cmV0Y2gtaCBzbWUtbGF5b3V0LWZsb2F0LWxlZnRcIlxyXG4gICAgICAgICAgICBbY2xhc3Muc21lLWFycmFuZ2UtZWxsaXBzaXNdPVwiIW92ZXJmbG93V3JhcFwiPnt7b3B0aW9uLnRvU3RyaW5nKCl9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9sYWJlbD5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvc21lLWZvcm0tZmllbGQtbGF5b3V0PlxyXG4iXX0=