@microsoft/windows-admin-center-sdk 2.296.0 → 2.298.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) 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 +558 -240
  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 +7 -2
  24. package/angular/esm2015/src/controls/alert-bar/alert-bar.component.js +5 -5
  25. package/angular/esm2015/src/controls/common/base.component.js +8 -1
  26. package/angular/esm2015/src/controls/data-table/data-table.component.js +39 -9
  27. package/angular/esm2015/src/controls/form/form-field/checklist/checklist-form-field.component.js +11 -8
  28. package/angular/esm2015/src/controls/form/form-field/combobox/combobox-form-field.component.js +8 -9
  29. package/angular/esm2015/src/controls/form/form-field/file/file-form-field.component.js +14 -2
  30. package/angular/esm2015/src/controls/form/form-field/form-field.component.js +9 -2
  31. package/angular/esm2015/src/controls/layout/layout-definition.component.js +9 -2
  32. package/angular/esm2015/src/controls/layout/layout.component.js +11 -2
  33. package/angular/esm2015/src/controls/master-view/master-view.component.js +32 -5
  34. package/angular/esm2015/src/controls/page-alert-bar/models/index.js +1 -1
  35. package/angular/esm2015/src/controls/pivot/pivot.component.js +11 -5
  36. package/angular/esm2015/src/controls/property-grid/property-grid-item.component.js +50 -2
  37. package/angular/esm2015/src/controls/property-grid/property-grid.component.js +73 -60
  38. package/angular/esm2015/src/controls/property-grid/property-grid.module.js +5 -1
  39. package/angular/esm2015/src/controls/settings/common-settings/common-settings.component.js +151 -70
  40. package/angular/esm2015/src/controls/settings/settings.component.js +48 -8
  41. package/angular/esm2015/src/controls/settings/settings.module.js +21 -9
  42. package/angular/esm2015/src/controls/wizard/wizard.component.js +55 -65
  43. package/angular/esm2015/src/generated/strings.js +1 -1
  44. package/angular/esm2015/src/service/app-context.service.js +3 -1
  45. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +535 -240
  46. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
  47. package/angular/package.json +2 -0
  48. package/angular/src/controls/common/base.component.d.ts +5 -0
  49. package/angular/src/controls/data-table/data-table.component.d.ts +15 -0
  50. package/angular/src/controls/form/form-field/checklist/checklist-form-field.component.d.ts +1 -0
  51. package/angular/src/controls/form/form-field/file/file-form-field.component.d.ts +4 -0
  52. package/angular/src/controls/layout/layout-definition.component.d.ts +6 -1
  53. package/angular/src/controls/master-view/master-view.component.d.ts +118 -2
  54. package/angular/src/controls/page-alert-bar/models/index.d.ts +1 -1
  55. package/angular/src/controls/pivot/pivot.component.d.ts +4 -1
  56. package/angular/src/controls/property-grid/property-grid-item.component.d.ts +53 -3
  57. package/angular/src/controls/property-grid/property-grid.component.d.ts +1 -2
  58. package/angular/src/controls/property-grid/property-grid.module.d.ts +4 -3
  59. package/angular/src/controls/settings/common-settings/common-settings.component.d.ts +32 -1
  60. package/angular/src/controls/settings/settings.component.d.ts +18 -1
  61. package/angular/src/controls/settings/settings.module.d.ts +3 -1
  62. package/angular/src/generated/strings.d.ts +3 -0
  63. package/core/base/environment.d.ts +10 -0
  64. package/core/base/environment.js.map +1 -1
  65. package/core/data/gateway-connection.d.ts +34 -0
  66. package/core/data/gateway-connection.js +59 -2
  67. package/core/data/gateway-connection.js.map +1 -1
  68. package/core/data/gateway-status.d.ts +24 -0
  69. package/core/data/gateway-status.js +3 -0
  70. package/core/data/gateway-status.js.map +1 -0
  71. package/core/data/node-connection.d.ts +4 -0
  72. package/core/data/node-connection.js.map +1 -1
  73. package/core/data/powershell.d.ts +4 -0
  74. package/core/data/powershell.js +1 -0
  75. package/core/data/powershell.js.map +1 -1
  76. package/core/data/wdac-operations.d.ts +123 -0
  77. package/core/data/wdac-operations.js +144 -0
  78. package/core/data/wdac-operations.js.map +1 -0
  79. package/core/diagnostics/sme-web-telemetry-models.d.ts +20 -3
  80. package/core/diagnostics/sme-web-telemetry-models.js +6 -2
  81. package/core/diagnostics/sme-web-telemetry-models.js.map +1 -1
  82. package/core/diagnostics/sme-web-telemetry.d.ts +13 -1
  83. package/core/diagnostics/sme-web-telemetry.js +51 -11
  84. package/core/diagnostics/sme-web-telemetry.js.map +1 -1
  85. package/core/generated/powershell-scripts.d.ts +8 -4
  86. package/core/generated/powershell-scripts.js +8 -4
  87. package/core/generated/powershell-scripts.js.map +1 -1
  88. package/core/index.d.ts +2 -0
  89. package/core/index.js +1 -0
  90. package/core/index.js.map +1 -1
  91. package/core/manifest/environment-modules.js +10 -0
  92. package/core/manifest/environment-modules.js.map +1 -1
  93. package/core/notification/powershell-notification.js +1 -1
  94. package/core/notification/powershell-notification.js.map +1 -1
  95. package/core/performance/performance-tracker.d.ts +67 -0
  96. package/core/performance/performance-tracker.js +211 -4
  97. package/core/performance/performance-tracker.js.map +1 -1
  98. package/core/rpc/credssp/rpc-credssp-model.d.ts +27 -2
  99. package/core/rpc/credssp/rpc-credssp-model.js +10 -0
  100. package/core/rpc/credssp/rpc-credssp-model.js.map +1 -1
  101. package/core/security/credssp-manager.d.ts +15 -1
  102. package/core/security/credssp-manager.js +28 -0
  103. package/core/security/credssp-manager.js.map +1 -1
  104. package/core/shared/gateway-inventory/gateway-inventory.d.ts +10 -0
  105. package/core/shared/gateway-inventory/gateway-inventory.js +11 -0
  106. package/core/shared/gateway-inventory/gateway-inventory.js.map +1 -1
  107. package/e2e/assets/strings/cs-CZ/strings.json +1 -1
  108. package/e2e/assets/strings/de-DE/strings.json +1 -1
  109. package/e2e/assets/strings/es-ES/strings.json +1 -1
  110. package/e2e/assets/strings/fr-FR/strings.json +1 -1
  111. package/e2e/assets/strings/hu-HU/strings.json +1 -1
  112. package/e2e/assets/strings/it-IT/strings.json +1 -1
  113. package/e2e/assets/strings/ja-JP/strings.json +1 -1
  114. package/e2e/assets/strings/ko-KR/strings.json +1 -1
  115. package/e2e/assets/strings/nl-NL/strings.json +1 -1
  116. package/e2e/assets/strings/pl-PL/strings.json +1 -1
  117. package/e2e/assets/strings/pt-BR/strings.json +1 -1
  118. package/e2e/assets/strings/pt-PT/strings.json +1 -1
  119. package/e2e/assets/strings/ru-RU/strings.json +1 -1
  120. package/e2e/assets/strings/strings.json +1 -1
  121. package/e2e/assets/strings/sv-SE/strings.json +1 -1
  122. package/e2e/assets/strings/tr-TR/strings.json +1 -1
  123. package/e2e/assets/strings/zh-CN/strings.json +1 -1
  124. package/e2e/assets/strings/zh-TW/strings.json +1 -1
  125. package/package.json +5 -3
  126. package/styles/css/main.css +1 -1
  127. package/tools/module-template/gulpfile.ts/index.ts +1 -1
  128. package/tools/package-lock.json +18081 -4110
  129. package/tools/wac-cli/src/create/main.d.ts +6 -3
  130. package/tools/wac-cli/src/create/main.js +87 -35
  131. package/tools/wac-cli/src/create/main.js.map +1 -1
  132. package/tools/wac-cli/src/index.js +2 -2
  133. package/tools/wac-cli/src/index.js.map +1 -1
  134. package/tools/wac-cli/templates/internal/npmrc.txt +6 -0
  135. package/tools/wac-cli/templates/internal/package.json +101 -0
  136. package/tools/wac-cli/templates/{manifest/solution-manifest.json → solution/manifest.json} +19 -0
  137. package/tools/wac-cli/templates/solution/strings.resjson +16 -0
  138. package/tools/wac-cli/templates/wac-template/angular.json +2 -2
  139. package/tools/wac-cli/templates/wac-template/gulpfile.ts/config-data.ts +1 -1
  140. package/tools/wac-cli/templates/wac-template/package.json +0 -8
  141. package/tools/wac-cli/templates/wac-template/src/app/app-routing.module.ts +1 -1
  142. package/tools/wac-cli/templates/wac-template/src/main.ts +2 -0
  143. package/tools/wac-cli/templates/{manifest/tool-manifest.json → wac-template/src/manifest.json} +0 -0
  144. package/tools/wac-cli/templates/wac-template/src/polyfills.ts +1 -1
  145. package/tools/wac-cli/templates/wac-template/src/test.ts +2 -2
  146. package/tools/wac-cli/templates/wac-template/src/version.ts +3 -0
  147. package/tools/wac-cli/templates/wac-template/version.json +5 -0
@@ -141,6 +141,17 @@ let FileFormFieldComponent = class FileFormFieldComponent extends SmeInternalFor
141
141
  ? this.strings.MsftSmeShell.Angular.Form.File.selectedFilesFormat.multipleEnabled.none
142
142
  : this.strings.MsftSmeShell.Angular.Form.File.selectedFilesFormat.none;
143
143
  }
144
+ /**
145
+ * gets aria-label text
146
+ */
147
+ get ariaLabelText() {
148
+ const labelText = this.buttonLabel || (this.multiple
149
+ ? this.strings.MsftSmeShell.Angular.Form.File.buttonText.plural
150
+ : this.strings.MsftSmeShell.Angular.Form.File.buttonText.singular);
151
+ return this.hasFiles
152
+ ? this.strings.MsftSmeShell.Angular.Form.File.selectedFilesFormat.plural.format(this.files.length).concat(labelText)
153
+ : labelText;
154
+ }
144
155
  /**
145
156
  * Indicates if there are any files selected
146
157
  */
@@ -313,7 +324,7 @@ let FileFormFieldComponent = class FileFormFieldComponent extends SmeInternalFor
313
324
  } if (rf & 2) {
314
325
  let _t;
315
326
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.fileInput = _t.first);
316
- } }, inputs: { multiple: "multiple", fileTypes: "fileTypes", buttonLabel: "buttonLabel" }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c1, decls: 15, vars: 12, consts: [[3, "formField"], [1, "sme-file-drop-zone", "sme-subform-indent-none", "sme-subform-no-bottom-margin"], [1, "sme-padding-inset-xs", "sme-margin-bottom-xs", "sme-arrange-stack-v", 3, "smeDrop"], [1, "sme-file-input", "sme-margin-bottom-xxs"], ["type", "file", 1, "sme-layout-none", 3, "disabled", "change"], ["file", ""], ["type", "button", 1, "sme-button-primary", "sme-button-auto-width", "sme-margin-right-xs", 3, "smeDisabled", "click"], [1, "sme-position-flex-align-center"], [4, "ngIf"], ["aria-live", "polite", 1, "sme-margin-bottom-xs"], [3, "alert"], ["class", "sme-arrange-stack-h sme-margin-bottom-xs", 4, "ngFor", "ngForOf"], [1, "sme-arrange-stack-h", "sme-margin-bottom-xs"], [1, "sme-position-flex-none", "sme-icon", "sme-icon-size-lg"], ["aria-live", "polite", 1, "sme-position-flex-auto", "sme-padding-left-sm", "sme-arrange-stack-v"], [1, "sme-position-flex-auto", "sme-arrange-ellipsis", "sme-padding-inset-none"], ["type", "button", 1, "sme-button-trigger", "sme-position-flex-none", "sme-button-auto-width", 3, "title", "smeDisabled", "click"], [1, "sme-icon", "sme-icon-cancel", "sme-color-red"]], template: function FileFormFieldComponent_Template(rf, ctx) { if (rf & 1) {
327
+ } }, inputs: { multiple: "multiple", fileTypes: "fileTypes", buttonLabel: "buttonLabel" }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c1, decls: 15, vars: 13, consts: [[3, "formField"], [1, "sme-file-drop-zone", "sme-subform-indent-none", "sme-subform-no-bottom-margin"], [1, "sme-padding-inset-xs", "sme-margin-bottom-xs", "sme-arrange-stack-v", 3, "smeDrop"], [1, "sme-file-input", "sme-margin-bottom-xxs"], ["type", "file", 1, "sme-layout-none", 3, "disabled", "change"], ["file", ""], ["type", "button", 1, "sme-button-primary", "sme-button-auto-width", "sme-margin-right-xs", 3, "smeDisabled", "click"], [1, "sme-position-flex-align-center"], [4, "ngIf"], [1, "sme-margin-bottom-xs"], [3, "alert"], ["class", "sme-arrange-stack-h sme-margin-bottom-xs", 4, "ngFor", "ngForOf"], [1, "sme-arrange-stack-h", "sme-margin-bottom-xs"], [1, "sme-position-flex-none", "sme-icon", "sme-icon-size-lg"], [1, "sme-position-flex-auto", "sme-padding-left-sm", "sme-arrange-stack-v"], [1, "sme-position-flex-auto", "sme-arrange-ellipsis", "sme-padding-inset-none"], ["type", "button", 1, "sme-button-trigger", "sme-position-flex-none", "sme-button-auto-width", 3, "title", "smeDisabled", "click"], [1, "sme-icon", "sme-icon-cancel", "sme-color-red"]], template: function FileFormFieldComponent_Template(rf, ctx) { if (rf & 1) {
317
328
  const _r8 = i0.ɵɵgetCurrentView();
318
329
  i0.ɵɵelementStart(0, "sme-form-field-layout", 0);
319
330
  i0.ɵɵelementStart(1, "fieldset", 1);
@@ -349,6 +360,7 @@ let FileFormFieldComponent = class FileFormFieldComponent extends SmeInternalFor
349
360
  i0.ɵɵattribute("multiple", ctx.multiple || null)("accept", ctx.accept);
350
361
  i0.ɵɵadvance(2);
351
362
  i0.ɵɵproperty("smeDisabled", ctx.loadingOrDisabled);
363
+ i0.ɵɵattribute("aria-label", ctx.ariaLabelText);
352
364
  i0.ɵɵadvance(1);
353
365
  i0.ɵɵtextInterpolate1(" ", ctx.buttonLabel || (ctx.multiple ? ctx.strings.MsftSmeShell.Angular.Form.File.buttonText.plural : ctx.strings.MsftSmeShell.Angular.Form.File.buttonText.singular), " ");
354
366
  i0.ɵɵadvance(2);
@@ -389,4 +401,4 @@ export { FileFormFieldComponent };
389
401
  }], buttonLabel: [{
390
402
  type: Input
391
403
  }] }); })();
392
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1mb3JtLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2Zvcm0vZm9ybS1maWVsZC9maWxlL2ZpbGUtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvZmlsZS9maWxlLWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN2RixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdkcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFvQix1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3BHLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7SUNhaEQseUJBQWtCO0lBQUEsWUFDRTs7SUFBQSxpQkFBSTs7O0lBRE4sZUFDRTtJQURGLCtIQUNFOzs7O0lBS3BCLCtCQUFnRztJQUM5RiwwQkFDcUU7SUFDckUsK0JBQStGO0lBQzdGLGlDQUFrRjtJQUFBLFlBQWE7SUFBQSxpQkFBUTtJ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bGVtZW50UmVmLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2dnaW5nJztcclxuaW1wb3J0IHsgRG9tIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kb20vZG9tJztcclxuaW1wb3J0IHsgU21lU2NoZW1hUHJvcGVydHkgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLWRlY29yYXRvcic7XHJcbmltcG9ydCB7IFNpbXBsZVByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLWZpZWxkLWhvc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2NoZW1hUHJpbWl0aXZlVHlwZSB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtbW9kZWxzJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkFsZXJ0cywgVmFsaWRhdGlvbkFsZXJ0U2V2ZXJpdHkgfSBmcm9tICcuLi8uLi92YWxpZGF0aW9uLWFsZXJ0L3ZhbGlkYXRpb24tYWxlcnQnO1xyXG5pbXBvcnQgeyBTbWVJbnRlcm5hbEZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tZmllbGQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgV2Via2l0RmlsZVN5c3RlbSB9IGZyb20gJy4vd2Via2l0RmlsZVN5c3RlbSc7XHJcblxyXG4vLyB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGhcclxuQENvbXBvbmVudCh7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPHNtZS1mb3JtLWZpZWxkICNmaWVsZCB0eXBlPVwiZmlsZVwiIFsobmdNb2RlbCldPVwiZGF0YVwiIFtuYW1lXT1cInByb3BlcnR5U2NoZW1hLm5hbWVcIiBbbGFiZWxdPVwibG9jYWxpemUocHJvcGVydHlTY2hlbWEubGFiZWwpXCJcclxuICAgICAgICBbZGVzY3JpcHRpb25dPVwibG9jYWxpemUocHJvcGVydHlTY2hlbWEuZGVzY3JpcHRpb24pXCIgW3JlcXVpcmVkXT1cInByb3BlcnR5U2NoZW1hLnJlcXVpcmVkXCJcclxuICAgICAgICBbcmVhZG9ubHldPVwiISFldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5yZWFkb25seUNvbmRpdGlvbilcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhIShwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbiAmJiBldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbikpXCJcclxuICAgICAgICBbbXVsdGlwbGVdPVwicHJvcGVydHlTY2hlbWEub3B0aW9ucy5tdWx0aXBsZVwiIFtmaWxlVHlwZXNdPVwicHJvcGVydHlTY2hlbWEub3B0aW9ucy5maWxlVHlwZXNcIlxyXG4gICAgICAgIChjdXN0b21WYWxpZGF0ZSk9XCJyZXNvbHZlRnVuY3Rpb24ocHJvcGVydHlTY2hlbWEuY3VzdG9tVmFsaWRhdGlvbikoJGV2ZW50KVwiXHJcbiAgICAgICAgKGN1c3RvbUFzeW5jVmFsaWRhdGUpPVwicHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uICYmIHJlc29sdmVGdW5jdGlvbihwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24uaGFuZGxlcikoJGV2ZW50KVwiXHJcbiAgICAgICAgW3BlbmRpbmdNZXNzYWdlXT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiBsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24ucGVuZGluZ01lc3NhZ2UpXCJcclxuICAgICAgICBbY3VzdG9tQXN5bmNWYWxpZGF0ZURpc2FibGVkXT1cInNob3VsZEN1c3RvbUFzeW5jVmFsaWRhdGlvbkJlRGlzYWJsZWQoKVwiXHJcbiAgICAgICAgW2N1c3RvbUFzeW5jVmFsaWRhdGVEZWJvdW5jZVRpbWVdPVwicHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uICYmICtwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24uaGFuZGxlclwiXHJcbiAgICAgICAgPjwvc21lLWZvcm0tZmllbGQ+XHJcbiAgICBgXHJcbn0pXHJcbi8vIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoXHJcbmV4cG9ydCBjbGFzcyBGaWxlRm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50IGV4dGVuZHMgU2ltcGxlUHJvcGVydHlTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudCB7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBY2Nlc3NpYmxlIGZpbGUgZmllbGQgaW1wbGVtZW50YXRpb25cclxuICovXHJcbkBTbWVTY2hlbWFQcm9wZXJ0eSh7XHJcbiAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLkZpbGUsXHJcbiAgICBmb3JtYXQ6ICdkZWZhdWx0JyxcclxuICAgIGlzRGVmYXVsdEZvcm1hdDogdHJ1ZSxcclxuICAgIGRlc2NyaXB0aW9uOiAnQSBmaWxlIHVwbG9hZCBjb250cm9sIGJpbmRpbmcgdG8gZmlsZSBkYXRhLicsXHJcbiAgICBsb2FkZXJDb21wb25lbnQ6IEZpbGVGb3JtRmllbGRMb2FkZXJDb21wb25lbnRcclxufSlcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1mb3JtLWZpZWxkW3R5cGU9XCJmaWxlXCJdJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9maWxlLWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlRm9ybUZpZWxkQ29tcG9uZW50IGV4dGVuZHMgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQ8RmlsZSB8IEZpbGVbXT4gaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNvdXJjZSBuYW1lIHRvIHVzZSBmb3IgbG9nZ2luZ1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGxvZ1NvdXJjZU5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuICdGaWxlRm9ybUZpZWxkQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBmaWxlIGlucHV0IHBhcnQgb2YgdGhpcyBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoJ2ZpbGUnKVxyXG4gICAgcHVibGljIGZpbGVJbnB1dDogRWxlbWVudFJlZjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IG11bHRpcGxlIGZpbGVzIGFyZSBhbGxvd2VkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbXVsdGlwbGU6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhlIHR5cGUgb2YgZmlsZXMgdGhhdCBhcmUgYWxsb3dlZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGZpbGVUeXBlczogc3RyaW5nW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbGFiZWwgdG8gdXNlIG9uIHRoZSBzZWxlY3QgYnV0dG9uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYnV0dG9uTGFiZWw6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIGFjdGl2ZURyb3BwZWRGaWxlU3lzdGVtOiBXZWJraXRGaWxlU3lzdGVtO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFyaWEgbGFiZWwgZm9yIHRoaXMgaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBhcmlhTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNZXJnZWREZXNjcmlwdGlvbkxhYmVsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBnZXRzIHRoZSBmaWxlIGNvdW50IGxhYmVsXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZmlsZUNvdW50TGFiZWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzRmlsZXNcclxuICAgICAgICAgICAgPyB0aGlzLmhhc011bHRpcGxlRmlsZXNcclxuICAgICAgICAgICAgICAgID8gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uRmlsZS5zZWxlY3RlZEZpbGVzRm9ybWF0LnBsdXJhbC5mb3JtYXQodGhpcy5maWxlcy5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkZpbGUuc2VsZWN0ZWRGaWxlc0Zvcm1hdC5zaW5ndWxhclxyXG4gICAgICAgICAgICA6IHRoaXMubXVsdGlwbGVcclxuICAgICAgICAgICAgICAgID8gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uRmlsZS5zZWxlY3RlZEZpbGVzRm9ybWF0Lm11bHRpcGxlRW5hYmxlZC5ub25lXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkZpbGUuc2VsZWN0ZWRGaWxlc0Zvcm1hdC5ub25lO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZXJlIGFyZSBhbnkgZmlsZXMgc2VsZWN0ZWRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBmaWxlcygpOiBGaWxlW10ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpID8gdGhpcy52YWx1ZSA6ICEhdGhpcy52YWx1ZSA/IFt0aGlzLnZhbHVlXSA6IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZXJlIGFyZSBhbnkgZmlsZXMgc2VsZWN0ZWRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBoYXNGaWxlcygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/IEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwIDogISF0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmaWxlcyBzZWxlY3RlZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldCBoYXNNdWx0aXBsZUZpbGVzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmhhc0ZpbGVzICYmIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAxO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZXJlIGFyZSBhbnkgZmlsZSB0eXBlIHJlc3RyaWN0aW9uc1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldCBoYXNGaWxlVHlwZXMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5maWxlVHlwZXMgJiYgdGhpcy5maWxlVHlwZXMubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBmb3JtYXR0ZWQgYWNjZXB0IHByb3BlcnR5IGZvciBvdXIgZmlsZSBpbnB1dFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGFjY2VwdCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbGVUeXBlcyA/IHRoaXMuZmlsZVR5cGVzLmpvaW4oJywgJykgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGRpcmVjdG9yeVVwbG9hZFN1cHBvcnRlZCgpIHtcclxuICAgICAgICByZXR1cm4gISFEYXRhVHJhbnNmZXJJdGVtLnByb3RvdHlwZS53ZWJraXRHZXRBc0VudHJ5O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEZpbGVGb3JtRmllbGRDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkZpbGUucGxhY2Vob2xkZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0KCkge1xyXG4gICAgICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBudWxsO1xyXG4gICAgICAgIHN1cGVyLnJlc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgd2hlbiB0aGUgZmlsZSBpbnB1dCBoYXMgY2hhbmdlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25GaWxlQ2hhbmdlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKE1zZnRTbWUuZ2V0VmFsdWUodGhpcy5maWxlSW5wdXQsICduYXRpdmVFbGVtZW50LmZpbGVzJykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIHdoZW4gdGhlIHRoZXJlIGlzIGEgZHJvcCBvbnRvIHRoaXMgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25Ecm9wKGRhdGE6IERhdGFUcmFuc2Zlcikge1xyXG4gICAgICAgIC8vIGlmIHdlIGRyb3BwZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBmaWxlLCB0aGVuIGp1c3QgdXBkYXRlIHZhbHVlIHRvIGFuIGVtcHR5IGxpc3RcclxuICAgICAgICBpZiAoZGF0YS5maWxlcy5sZW5ndGggPT09IDAgfHwgZGF0YS5pdGVtcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShbXSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5kaXJlY3RvcnlVcGxvYWRTdXBwb3J0ZWQpIHtcclxuICAgICAgICAgICAgLy8gSWYgd2Via2l0IGlzIG5vdCBzdXBwb3J0ZWQsIHRoZXJlIGlzIG5vIHJlbGlhYmxlIHdheSB0byBkZXRlY3QgZm9sZGVycyBiZWluZyBkcm9wcGVkIHdpdGhvdXQgZXhjbHVkaW5nIHNvbWUgZmlsZSB0eXBlcy5cclxuICAgICAgICAgICAgLy8gYm90aCBFZGdlIGFuZCBDaHJvbWUgZnVsbHkgc3VwcG9ydCB0aGlzIGFwaS4gU28gd2Ugc2hvdWxkIGJlIGdvb2QgYXMgZmFyIGEgb3VyIHN1cHBvcnRlZCBicm93c2VyIG1hdHJpeCBpcyBjb25jZXJuZWQuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUoZGF0YS5maWxlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmaWxlU3lzdGVtID0gbmV3IFdlYmtpdEZpbGVTeXN0ZW0oZGF0YS5pdGVtcyk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVEcm9wcGVkRmlsZVN5c3RlbSA9IGZpbGVTeXN0ZW07XHJcbiAgICAgICAgZmlsZVN5c3RlbS5nZXRGaWxlTGlzdCgpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgZmlsZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlRHJvcHBlZEZpbGVTeXN0ZW0gPT09IGZpbGVTeXN0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKGZpbGVzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nZ2luZy5sb2dFcnJvcih0aGlzLmxvZ1NvdXJjZU5hbWUsICdBbiBFcnJvciBvY2N1cnJlZCByZXNvbHZpbmcgZHJvcHBlZCBmaWxlcycsIHsgZXJyb3I6IGVycm9yIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIGNvbnRyb2xzIHZhbHVlIHRvIHJlZmxlY3QgZHJvcHBlZCBvciBicm93c2VkIGZpbGVzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdXBkYXRlVmFsdWUoZmlsZXM6IEZpbGVMaXN0IHwgRmlsZVtdKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVEcm9wcGVkRmlsZVN5c3RlbSA9IG51bGw7XHJcbiAgICAgICAgaWYgKE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQoZmlsZXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm11bHRpcGxlID8gW10gOiBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlQXJyYXk6IEZpbGVbXSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlQXJyYXkucHVzaChmaWxlc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGZpbGVBcnJheTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gZmlsZXNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYW4gaXRlbSBhdCB0aGUgZ2l2ZW4gaW5kZXhcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlbW92ZUl0ZW1BdChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWVdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmlyc3RGb2N1c2FibGUgPSBEb20uZ2V0Rmlyc3RGb2N1c2FibGVEZXNjZW5kZW50KHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgaWYgKGZpcnN0Rm9jdXNhYmxlKSB7XHJcbiAgICAgICAgICAgIGZpcnN0Rm9jdXNhYmxlLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyB0aGUgaWRCYWcgdXNlZCBieSB0aGlzIGNvbXBvbmVudCB0byBzdG9yZSB1bmlxdWUgZWxlbWVudCBpZHMuXHJcbiAgICAgKiBpZCB2YWx1ZXMgd2lsbCBiZSBhc3NpZ25lZCBiZSB0aGUgQHNlZSBCYXNlQ29tcG9uZW50IHN1cGVyIGNsYXNzLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSWRCYWcoKTogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGV0YWlsc1NwYW46ICcnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNEaXJlY3RvcnkoZmlsZTogRmlsZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIWZpbGVbV2Via2l0RmlsZVN5c3RlbS5pc0RpcmVjdG9yeVByb3BlcnR5TmFtZV07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtcyB2YWxpZGF0aW9uIHRoYXQgaXMgaW50ZXJuYWwgdG8gdGhpcyBjb250cm9sXHJcbiAgICAgKiBAcGFyYW0gYyBUaGUgZm9ybSBjb250cm9sIGF0dGFjaGVkIHRvIHRoaXMgaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRlKGM6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkFsZXJ0cyB7XHJcbiAgICAgICAgLy8gU3RvcCBpZiB0aGVyZSBhcmUgbm8gZmlsZXMsIGZhbGxiYWNrIHRvIHN1cGVyIHZhbGlkYXRpb25cclxuICAgICAgICBpZiAoIXRoaXMuaGFzRmlsZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlKGMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGludmFsaWQgZmlsZSBlbnRyaWVzXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLmZpbGVzW2ldO1xyXG4gICAgICAgICAgICAvLyBkb250IGFsbG93IGRpcmVjdG9yaWVzXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGlyZWN0b3J5KGZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vRGlyZWN0b3JpZXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uRmlsZS5kaXJlY3Rvcmllc05vdEFsbG93ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk6IFZhbGlkYXRpb25BbGVydFNldmVyaXR5LkVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gRG8gbm90IGFsbG93IGludmFsaWQgZmlsZSB0eXBlc1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNGaWxlVHlwZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnRzID0gZmlsZS5uYW1lLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXh0ZW5zaW9uID0gc2VnbWVudHMubGVuZ3RoID4gMSA/IE1zZnRTbWUubGFzdChzZWdtZW50cykgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV4dGVuc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbiA9IGAuJHtleHRlbnNpb259YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5maWxlVHlwZXMuc29tZSh0eXBlID0+IHR5cGUgPT09IGZpbGUudHlwZSB8fCAoZXh0ZW5zaW9uICE9PSBudWxsICYmIHR5cGUgPT09IGV4dGVuc2lvbikpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2U6IHN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uIHx8IGZpbGUudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uRmlsZS5pbnZhbGlkRmlsZVR5cGVGb3JtYXQuZm9ybWF0KGV4dGVuc2lvbiB8fCBmaWxlLnR5cGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5GaWxlLmludmFsaWRGaWxlVW5rbm93blR5cGVGb3JtYXQuZm9ybWF0KGZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRGaWxlVHlwZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5OiBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eS5FcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlKGMpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxzbWUtZm9ybS1maWVsZC1sYXlvdXQgW2Zvcm1GaWVsZF09XCJ0aGlzXCI+XHJcbiAgPGZpZWxkc2V0IFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzbWUtZmlsZS1kcm9wLXpvbmUgc21lLXN1YmZvcm0taW5kZW50LW5vbmUgc21lLXN1YmZvcm0tbm8tYm90dG9tLW1hcmdpblwiPlxyXG4gICAgPHNtZS1kcm9wLXpvbmUgY2xhc3M9XCJzbWUtcGFkZGluZy1pbnNldC14cyBzbWUtbWFyZ2luLWJvdHRvbS14cyBzbWUtYXJyYW5nZS1zdGFjay12XCIgKHNtZURyb3ApPVwib25Ecm9wKCRldmVudClcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNtZS1maWxlLWlucHV0IHNtZS1tYXJnaW4tYm90dG9tLXh4c1wiPlxyXG4gICAgICAgIDxpbnB1dCAjZmlsZSB0eXBlPVwiZmlsZVwiIGNsYXNzPVwic21lLWxheW91dC1ub25lXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkXCIgKGNoYW5nZSk9XCJvbkZpbGVDaGFuZ2VkKClcIlxyXG4gICAgICAgICAgICAgICBbYXR0ci5tdWx0aXBsZV09XCJtdWx0aXBsZSB8fCBudWxsXCIgW2F0dHIuYWNjZXB0XT1cImFjY2VwdFwiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFtzbWVEaXNhYmxlZF09XCJsb2FkaW5nT3JEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNtZS1idXR0b24tcHJpbWFyeSBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLW1hcmdpbi1yaWdodC14c1wiIChjbGljayk9XCJmaWxlLmNsaWNrKClcIj5cclxuICAgICAgICAgIHt7IGJ1dHRvbkxhYmVsIHx8ICggbXVsdGlwbGVcclxuICAgICAgICAgID8gc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkZpbGUuYnV0dG9uVGV4dC5wbHVyYWxcclxuICAgICAgICAgIDogc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkZpbGUuYnV0dG9uVGV4dC5zaW5ndWxhciApXHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxiIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYWxpZ24tY2VudGVyXCI+XHJcbiAgICAgICAgICB7e1xyXG4gICAgICAgICAgbXVsdGlwbGVcclxuICAgICAgICAgID8gc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkZpbGUuZHJhZ0Ryb3BUZXh0LnBsdXJhbFxyXG4gICAgICAgICAgOiBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uRmlsZS5kcmFnRHJvcFRleHQuc2luZ3VsYXJcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgPC9iPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHAgKm5nSWY9XCJhY2NlcHRcIj57e3N0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5GaWxlLmFsbG93ZWRGaWxlVHlwZXNGb3JtYXQgfFxyXG4gICAgICAgIHNtZUZvcm1hdDphY2NlcHR9fTwvcD5cclxuICAgIDwvc21lLWRyb3Atem9uZT5cclxuICAgIDxwIGNsYXNzPVwic21lLW1hcmdpbi1ib3R0b20teHNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj57e2ZpbGVDb3VudExhYmVsfX08L3A+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0ZpbGVzXCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpbGUgb2YgZmlsZXM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWggc21lLW1hcmdpbi1ib3R0b20teHNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtaWNvbiBzbWUtaWNvbi1zaXplLWxnXCIgW2NsYXNzLnNtZS1pY29uLW9wZW5GaWxlXT1cIiFpc0RpcmVjdG9yeShmaWxlKVwiXHJcbiAgICAgICAgICAgICBbY2xhc3Muc21lLWljb24tb3BlbkZvbGRlckhvcml6b250YWxdPVwiaXNEaXJlY3RvcnkoZmlsZSlcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtcGFkZGluZy1sZWZ0LXNtIHNtZS1hcnJhbmdlLXN0YWNrLXZcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LWF1dG8gc21lLWFycmFuZ2UtZWxsaXBzaXMgc21lLXBhZGRpbmctaW5zZXQtbm9uZVwiPnt7ZmlsZS5uYW1lfX08L2xhYmVsPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtYXJyYW5nZS1lbGxpcHNpcyBzbWUtcGFkZGluZy1pbnNldC1ub25lXCI+XHJcbiAgICAgICAgICAgIHt7ZmlsZS5zaXplIHwgc21lQnl0ZVVuaXRDb252ZXJ0ZXI6MTAyNH19XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWJ1dHRvbi1hdXRvLXdpZHRoXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVJdGVtQXQoaSlcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uRmlsZS5yZW1vdmVCdXR0b25BcmlhTGFiZWxGb3JtYXQgfCBzbWVGb3JtYXQ6ZmlsZS5uYW1lXCJcclxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uRmlsZS5yZW1vdmVCdXR0b25Ub29sdGlwXCIgW3NtZURpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1pY29uIHNtZS1pY29uLWNhbmNlbCBzbWUtY29sb3ItcmVkXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZmllbGRzZXQ+XHJcbiAgPHNtZS12YWxpZGF0aW9uLWFsZXJ0IFthbGVydF09XCJhbGVydFwiPjwvc21lLXZhbGlkYXRpb24tYWxlcnQ+XHJcbjwvc21lLWZvcm0tZmllbGQtbGF5b3V0PlxyXG4iXX0=
404
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1mb3JtLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2Zvcm0vZm9ybS1maWVsZC9maWxlL2ZpbGUtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvZmlsZS9maWxlLWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN2RixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdkcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFvQix1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3BHLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7SUNhaEQseUJBQWtCO0lBQUEsWUFDRTs7SUFBQSxpQkFBSTs7O0lBRE4sZUFDRTtJQURGLCtIQUNFOzs7O0lBS3BCLCtCQUFnRztJQUM5RiwwQkFDcUU7SUFDckUsK0JBQTRFO0lBQzFFLGlDQUFrRjtJQUFBLFlBQWE7SUFBQSxpQkFBUTtJ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RUUsZUFBWTtRQUFaLGlDQUFZO1FBR2MsZUFBa0I7UUFBbEIsd0NBQWtCO1FBRW5DLGVBQWM7UUFBZCxtQ0FBYztRQW1CVCxlQUFlO1FBQWYsaUNBQWU7O0FERDFCLHNCQUFzQjtJQVhsQyxpQkFBaUIsQ0FBQztRQUNmLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO1FBQzlCLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLFdBQVcsRUFBRSw2Q0FBNkM7UUFDMUQsZUFBZSxFQUFFLDRCQUE0QjtLQUNoRCxDQUFDO3FDQW1IZ0IsUUFBUTtHQTlHYixzQkFBc0IsQ0FtUWxDO1NBblFZLHNCQUFzQjt1RkFBdEIsc0JBQXNCO2NBSmxDLFNBQVM7ZUFBQztnQkFDUCxRQUFRLEVBQUUsNkJBQTZCO2dCQUN2QyxXQUFXLEVBQUUsa0NBQWtDO2FBQ2xEOzJEQWNVLFNBQVM7a0JBRGYsU0FBUzttQkFBQyxNQUFNO1lBT1YsUUFBUTtrQkFEZCxLQUFLO1lBT0MsU0FBUztrQkFEZixLQUFLO1lBT0MsV0FBVztrQkFEakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3MvbG9nZ2luZyc7XHJcbmltcG9ydCB7IERvbSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZG9tL2RvbSc7XHJcbmltcG9ydCB7IFNtZVNjaGVtYVByb3BlcnR5IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBTaW1wbGVQcm9wZXJ0eVNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1maWVsZC1ob3N0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNjaGVtYVByaW1pdGl2ZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLW1vZGVscyc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25BbGVydHMsIFZhbGlkYXRpb25BbGVydFNldmVyaXR5IH0gZnJvbSAnLi4vLi4vdmFsaWRhdGlvbi1hbGVydC92YWxpZGF0aW9uLWFsZXJ0JztcclxuaW1wb3J0IHsgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFdlYmtpdEZpbGVTeXN0ZW0gfSBmcm9tICcuL3dlYmtpdEZpbGVTeXN0ZW0nO1xyXG5cclxuLy8gdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoXHJcbkBDb21wb25lbnQoe1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgIDxzbWUtZm9ybS1maWVsZCAjZmllbGQgdHlwZT1cImZpbGVcIiBbKG5nTW9kZWwpXT1cImRhdGFcIiBbbmFtZV09XCJwcm9wZXJ0eVNjaGVtYS5uYW1lXCIgW2xhYmVsXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmxhYmVsKVwiXHJcbiAgICAgICAgW2Rlc2NyaXB0aW9uXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmRlc2NyaXB0aW9uKVwiIFtyZXF1aXJlZF09XCJwcm9wZXJ0eVNjaGVtYS5yZXF1aXJlZFwiXHJcbiAgICAgICAgW3JlYWRvbmx5XT1cIiEhZXZhbEV4cHJlc3Npb24ocHJvcGVydHlTY2hlbWEucmVhZG9ubHlDb25kaXRpb24pXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiISEocHJvcGVydHlTY2hlbWEuZGlzYWJsZWRDb25kaXRpb24gJiYgZXZhbEV4cHJlc3Npb24ocHJvcGVydHlTY2hlbWEuZGlzYWJsZWRDb25kaXRpb24pKVwiXHJcbiAgICAgICAgW211bHRpcGxlXT1cInByb3BlcnR5U2NoZW1hLm9wdGlvbnMubXVsdGlwbGVcIiBbZmlsZVR5cGVzXT1cInByb3BlcnR5U2NoZW1hLm9wdGlvbnMuZmlsZVR5cGVzXCJcclxuICAgICAgICAoY3VzdG9tVmFsaWRhdGUpPVwicmVzb2x2ZUZ1bmN0aW9uKHByb3BlcnR5U2NoZW1hLmN1c3RvbVZhbGlkYXRpb24pKCRldmVudClcIlxyXG4gICAgICAgIChjdXN0b21Bc3luY1ZhbGlkYXRlKT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiByZXNvbHZlRnVuY3Rpb24ocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXIpKCRldmVudClcIlxyXG4gICAgICAgIFtwZW5kaW5nTWVzc2FnZV09XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgbG9jYWxpemUocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLnBlbmRpbmdNZXNzYWdlKVwiXHJcbiAgICAgICAgW2N1c3RvbUFzeW5jVmFsaWRhdGVEaXNhYmxlZF09XCJzaG91bGRDdXN0b21Bc3luY1ZhbGlkYXRpb25CZURpc2FibGVkKClcIlxyXG4gICAgICAgIFtjdXN0b21Bc3luY1ZhbGlkYXRlRGVib3VuY2VUaW1lXT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiArcHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXJcIlxyXG4gICAgICAgID48L3NtZS1mb3JtLWZpZWxkPlxyXG4gICAgYFxyXG59KVxyXG4vLyB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aFxyXG5leHBvcnQgY2xhc3MgRmlsZUZvcm1GaWVsZExvYWRlckNvbXBvbmVudCBleHRlbmRzIFNpbXBsZVByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQge1xyXG59XHJcblxyXG4vKipcclxuICogQWNjZXNzaWJsZSBmaWxlIGZpZWxkIGltcGxlbWVudGF0aW9uXHJcbiAqL1xyXG5AU21lU2NoZW1hUHJvcGVydHkoe1xyXG4gICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5GaWxlLFxyXG4gICAgZm9ybWF0OiAnZGVmYXVsdCcsXHJcbiAgICBpc0RlZmF1bHRGb3JtYXQ6IHRydWUsXHJcbiAgICBkZXNjcmlwdGlvbjogJ0EgZmlsZSB1cGxvYWQgY29udHJvbCBiaW5kaW5nIHRvIGZpbGUgZGF0YS4nLFxyXG4gICAgbG9hZGVyQ29tcG9uZW50OiBGaWxlRm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50XHJcbn0pXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtZm9ybS1maWVsZFt0eXBlPVwiZmlsZVwiXScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZmlsZS1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsZUZvcm1GaWVsZENvbXBvbmVudCBleHRlbmRzIFNtZUludGVybmFsRm9ybUZpZWxkQ29tcG9uZW50PEZpbGUgfCBGaWxlW10+IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzb3VyY2UgbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmdcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBsb2dTb3VyY2VOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiAnRmlsZUZvcm1GaWVsZENvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZmlsZSBpbnB1dCBwYXJ0IG9mIHRoaXMgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBAVmlld0NoaWxkKCdmaWxlJylcclxuICAgIHB1YmxpYyBmaWxlSW5wdXQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCBtdWx0aXBsZSBmaWxlcyBhcmUgYWxsb3dlZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG11bHRpcGxlOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoZSB0eXBlIG9mIGZpbGVzIHRoYXQgYXJlIGFsbG93ZWRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBmaWxlVHlwZXM6IHN0cmluZ1tdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGxhYmVsIHRvIHVzZSBvbiB0aGUgc2VsZWN0IGJ1dHRvblxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGJ1dHRvbkxhYmVsOiBzdHJpbmc7XHJcblxyXG4gICAgcHJpdmF0ZSBhY3RpdmVEcm9wcGVkRmlsZVN5c3RlbTogV2Via2l0RmlsZVN5c3RlbTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhcmlhIGxhYmVsIGZvciB0aGlzIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWVyZ2VkRGVzY3JpcHRpb25MYWJlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogZ2V0cyB0aGUgZmlsZSBjb3VudCBsYWJlbFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGZpbGVDb3VudExhYmVsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmhhc0ZpbGVzXHJcbiAgICAgICAgICAgID8gdGhpcy5oYXNNdWx0aXBsZUZpbGVzXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkZpbGUuc2VsZWN0ZWRGaWxlc0Zvcm1hdC5wbHVyYWwuZm9ybWF0KHRoaXMuZmlsZXMubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5GaWxlLnNlbGVjdGVkRmlsZXNGb3JtYXQuc2luZ3VsYXJcclxuICAgICAgICAgICAgOiB0aGlzLm11bHRpcGxlXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkZpbGUuc2VsZWN0ZWRGaWxlc0Zvcm1hdC5tdWx0aXBsZUVuYWJsZWQubm9uZVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5GaWxlLnNlbGVjdGVkRmlsZXNGb3JtYXQubm9uZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGdldHMgYXJpYS1sYWJlbCB0ZXh0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgYXJpYUxhYmVsVGV4dCgpIHtcclxuICAgICAgICBjb25zdCBsYWJlbFRleHQgPSB0aGlzLmJ1dHRvbkxhYmVsIHx8ICh0aGlzLm11bHRpcGxlXHJcbiAgICAgICAgICAgID8gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uRmlsZS5idXR0b25UZXh0LnBsdXJhbFxyXG4gICAgICAgICAgICA6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkZpbGUuYnV0dG9uVGV4dC5zaW5ndWxhcik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzRmlsZXNcclxuICAgICAgICAgICAgPyB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5GaWxlLnNlbGVjdGVkRmlsZXNGb3JtYXQucGx1cmFsLmZvcm1hdCh0aGlzLmZpbGVzLmxlbmd0aCkuY29uY2F0KGxhYmVsVGV4dClcclxuICAgICAgICAgICAgOiBsYWJlbFRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIGFueSBmaWxlcyBzZWxlY3RlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGZpbGVzKCk6IEZpbGVbXSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlIDogISF0aGlzLnZhbHVlID8gW3RoaXMudmFsdWVdIDogW107XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIGFueSBmaWxlcyBzZWxlY3RlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGhhc0ZpbGVzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlID8gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDAgOiAhIXRoaXMudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGZpbGVzIHNlbGVjdGVkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0IGhhc011bHRpcGxlRmlsZXMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzRmlsZXMgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIGFueSBmaWxlIHR5cGUgcmVzdHJpY3Rpb25zXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0IGhhc0ZpbGVUeXBlcygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLmZpbGVUeXBlcyAmJiB0aGlzLmZpbGVUeXBlcy5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIGZvcm1hdHRlZCBhY2NlcHQgcHJvcGVydHkgZm9yIG91ciBmaWxlIGlucHV0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgYWNjZXB0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsZVR5cGVzID8gdGhpcy5maWxlVHlwZXMuam9pbignLCAnKSA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZGlyZWN0b3J5VXBsb2FkU3VwcG9ydGVkKCkge1xyXG4gICAgICAgIHJldHVybiAhIURhdGFUcmFuc2Zlckl0ZW0ucHJvdG90eXBlLndlYmtpdEdldEFzRW50cnk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgRmlsZUZvcm1GaWVsZENvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uRmlsZS5wbGFjZWhvbGRlcjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgc3VwZXIucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyB3aGVuIHRoZSBmaWxlIGlucHV0IGhhcyBjaGFuZ2VkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkZpbGVDaGFuZ2VkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUoTXNmdFNtZS5nZXRWYWx1ZSh0aGlzLmZpbGVJbnB1dCwgJ25hdGl2ZUVsZW1lbnQuZmlsZXMnKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgd2hlbiB0aGUgdGhlcmUgaXMgYSBkcm9wIG9udG8gdGhpcyBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkRyb3AoZGF0YTogRGF0YVRyYW5zZmVyKSB7XHJcbiAgICAgICAgLy8gaWYgd2UgZHJvcHBlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGZpbGUsIHRoZW4ganVzdCB1cGRhdGUgdmFsdWUgdG8gYW4gZW1wdHkgbGlzdFxyXG4gICAgICAgIGlmIChkYXRhLmZpbGVzLmxlbmd0aCA9PT0gMCB8fCBkYXRhLml0ZW1zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKFtdKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmRpcmVjdG9yeVVwbG9hZFN1cHBvcnRlZCkge1xyXG4gICAgICAgICAgICAvLyBJZiB3ZWJraXQgaXMgbm90IHN1cHBvcnRlZCwgdGhlcmUgaXMgbm8gcmVsaWFibGUgd2F5IHRvIGRldGVjdCBmb2xkZXJzIGJlaW5nIGRyb3BwZWQgd2l0aG91dCBleGNsdWRpbmcgc29tZSBmaWxlIHR5cGVzLlxyXG4gICAgICAgICAgICAvLyBib3RoIEVkZ2UgYW5kIENocm9tZSBmdWxseSBzdXBwb3J0IHRoaXMgYXBpLiBTbyB3ZSBzaG91bGQgYmUgZ29vZCBhcyBmYXIgYSBvdXIgc3VwcG9ydGVkIGJyb3dzZXIgbWF0cml4IGlzIGNvbmNlcm5lZC5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShkYXRhLmZpbGVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGVTeXN0ZW0gPSBuZXcgV2Via2l0RmlsZVN5c3RlbShkYXRhLml0ZW1zKTtcclxuICAgICAgICB0aGlzLmFjdGl2ZURyb3BwZWRGaWxlU3lzdGVtID0gZmlsZVN5c3RlbTtcclxuICAgICAgICBmaWxlU3lzdGVtLmdldEZpbGVMaXN0KCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBmaWxlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVEcm9wcGVkRmlsZVN5c3RlbSA9PT0gZmlsZVN5c3RlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUoZmlsZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2dnaW5nLmxvZ0Vycm9yKHRoaXMubG9nU291cmNlTmFtZSwgJ0FuIEVycm9yIG9jY3VycmVkIHJlc29sdmluZyBkcm9wcGVkIGZpbGVzJywgeyBlcnJvcjogZXJyb3IgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgY29udHJvbHMgdmFsdWUgdG8gcmVmbGVjdCBkcm9wcGVkIG9yIGJyb3dzZWQgZmlsZXNcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB1cGRhdGVWYWx1ZShmaWxlczogRmlsZUxpc3QgfCBGaWxlW10pIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZURyb3BwZWRGaWxlU3lzdGVtID0gbnVsbDtcclxuICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZChmaWxlcykpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubXVsdGlwbGUgPyBbXSA6IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVBcnJheTogRmlsZVtdID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGZpbGVBcnJheS5wdXNoKGZpbGVzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gZmlsZUFycmF5O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBmaWxlc1swXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhbiBpdGVtIGF0IHRoZSBnaXZlbiBpbmRleFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVtb3ZlSXRlbUF0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbLi4udGhpcy52YWx1ZV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmaXJzdEZvY3VzYWJsZSA9IERvbS5nZXRGaXJzdEZvY3VzYWJsZURlc2NlbmRlbnQodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICBpZiAoZmlyc3RGb2N1c2FibGUpIHtcclxuICAgICAgICAgICAgZmlyc3RGb2N1c2FibGUuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIHRoZSBpZEJhZyB1c2VkIGJ5IHRoaXMgY29tcG9uZW50IHRvIHN0b3JlIHVuaXF1ZSBlbGVtZW50IGlkcy5cclxuICAgICAqIGlkIHZhbHVlcyB3aWxsIGJlIGFzc2lnbmVkIGJlIHRoZSBAc2VlIEJhc2VDb21wb25lbnQgc3VwZXIgY2xhc3MuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBjcmVhdGVJZEJhZygpOiBNc2Z0U21lLlN0cmluZ01hcDxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkZXRhaWxzU3BhbjogJydcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0RpcmVjdG9yeShmaWxlOiBGaWxlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhZmlsZVtXZWJraXRGaWxlU3lzdGVtLmlzRGlyZWN0b3J5UHJvcGVydHlOYW1lXTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIHZhbGlkYXRpb24gdGhhdCBpcyBpbnRlcm5hbCB0byB0aGlzIGNvbnRyb2xcclxuICAgICAqIEBwYXJhbSBjIFRoZSBmb3JtIGNvbnRyb2wgYXR0YWNoZWQgdG8gdGhpcyBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uQWxlcnRzIHtcclxuICAgICAgICAvLyBTdG9wIGlmIHRoZXJlIGFyZSBubyBmaWxlcywgZmFsbGJhY2sgdG8gc3VwZXIgdmFsaWRhdGlvblxyXG4gICAgICAgIGlmICghdGhpcy5oYXNGaWxlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gc3VwZXIudmFsaWRhdGUoYyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaGVjayBmb3IgaW52YWxpZCBmaWxlIGVudHJpZXNcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IHRoaXMuZmlsZXNbaV07XHJcbiAgICAgICAgICAgIC8vIGRvbnQgYWxsb3cgZGlyZWN0b3JpZXNcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEaXJlY3RvcnkoZmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9EaXJlY3Rvcmllczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5GaWxlLmRpcmVjdG9yaWVzTm90QWxsb3dlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eTogVmFsaWRhdGlvbkFsZXJ0U2V2ZXJpdHkuRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBEbyBub3QgYWxsb3cgaW52YWxpZCBmaWxlIHR5cGVzXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0ZpbGVUeXBlcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBmaWxlLm5hbWUuc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgICAgIGxldCBleHRlbnNpb24gPSBzZWdtZW50cy5sZW5ndGggPiAxID8gTXNmdFNtZS5sYXN0KHNlZ21lbnRzKSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uID0gYC4ke2V4dGVuc2lvbn1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpbGVUeXBlcy5zb21lKHR5cGUgPT4gdHlwZSA9PT0gZmlsZS50eXBlIHx8IChleHRlbnNpb24gIT09IG51bGwgJiYgdHlwZSA9PT0gZXh0ZW5zaW9uKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb24gfHwgZmlsZS50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5GaWxlLmludmFsaWRGaWxlVHlwZUZvcm1hdC5mb3JtYXQoZXh0ZW5zaW9uIHx8IGZpbGUudHlwZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkZpbGUuaW52YWxpZEZpbGVVbmtub3duVHlwZUZvcm1hdC5mb3JtYXQoZmlsZS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZEZpbGVUeXBlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk6IFZhbGlkYXRpb25BbGVydFNldmVyaXR5LkVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3VwZXIudmFsaWRhdGUoYyk7XHJcbiAgICB9XHJcbn1cclxuIiwiPHNtZS1mb3JtLWZpZWxkLWxheW91dCBbZm9ybUZpZWxkXT1cInRoaXNcIj5cclxuICA8ZmllbGRzZXQgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInNtZS1maWxlLWRyb3Atem9uZSBzbWUtc3ViZm9ybS1pbmRlbnQtbm9uZSBzbWUtc3ViZm9ybS1uby1ib3R0b20tbWFyZ2luXCI+XHJcbiAgICA8c21lLWRyb3Atem9uZSBjbGFzcz1cInNtZS1wYWRkaW5nLWluc2V0LXhzIHNtZS1tYXJnaW4tYm90dG9tLXhzIHNtZS1hcnJhbmdlLXN0YWNrLXZcIiAoc21lRHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic21lLWZpbGUtaW5wdXQgc21lLW1hcmdpbi1ib3R0b20teHhzXCI+XHJcbiAgICAgICAgPGlucHV0ICNmaWxlIHR5cGU9XCJmaWxlXCIgY2xhc3M9XCJzbWUtbGF5b3V0LW5vbmVcIiBbZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWRcIiAoY2hhbmdlKT1cIm9uRmlsZUNoYW5nZWQoKVwiXHJcbiAgICAgICAgICAgICAgIFthdHRyLm11bHRpcGxlXT1cIm11bHRpcGxlIHx8IG51bGxcIiBbYXR0ci5hY2NlcHRdPVwiYWNjZXB0XCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW3NtZURpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic21lLWJ1dHRvbi1wcmltYXJ5IHNtZS1idXR0b24tYXV0by13aWR0aCBzbWUtbWFyZ2luLXJpZ2h0LXhzXCIgKGNsaWNrKT1cImZpbGUuY2xpY2soKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsVGV4dFwiPlxyXG4gICAgICAgICAge3sgYnV0dG9uTGFiZWwgfHwgKCBtdWx0aXBsZVxyXG4gICAgICAgICAgPyBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uRmlsZS5idXR0b25UZXh0LnBsdXJhbFxyXG4gICAgICAgICAgOiBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uRmlsZS5idXR0b25UZXh0LnNpbmd1bGFyIClcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGIgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgIHt7XHJcbiAgICAgICAgICBtdWx0aXBsZVxyXG4gICAgICAgICAgPyBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uRmlsZS5kcmFnRHJvcFRleHQucGx1cmFsXHJcbiAgICAgICAgICA6IHN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5GaWxlLmRyYWdEcm9wVGV4dC5zaW5ndWxhclxyXG4gICAgICAgICAgfX1cclxuICAgICAgICA8L2I+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8cCAqbmdJZj1cImFjY2VwdFwiPnt7c3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkZpbGUuYWxsb3dlZEZpbGVUeXBlc0Zvcm1hdCB8XHJcbiAgICAgICAgc21lRm9ybWF0OmFjY2VwdH19PC9wPlxyXG4gICAgPC9zbWUtZHJvcC16b25lPlxyXG4gICAgPHAgY2xhc3M9XCJzbWUtbWFyZ2luLWJvdHRvbS14c1wiPnt7ZmlsZUNvdW50TGFiZWx9fTwvcD5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRmlsZXNcIj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmlsZSBvZiBmaWxlczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staCBzbWUtbWFyZ2luLWJvdHRvbS14c1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1pY29uIHNtZS1pY29uLXNpemUtbGdcIiBbY2xhc3Muc21lLWljb24tb3BlbkZpbGVdPVwiIWlzRGlyZWN0b3J5KGZpbGUpXCJcclxuICAgICAgICAgICAgIFtjbGFzcy5zbWUtaWNvbi1vcGVuRm9sZGVySG9yaXpvbnRhbF09XCJpc0RpcmVjdG9yeShmaWxlKVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1wYWRkaW5nLWxlZnQtc20gc21lLWFycmFuZ2Utc3RhY2stdlwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtYXJyYW5nZS1lbGxpcHNpcyBzbWUtcGFkZGluZy1pbnNldC1ub25lXCI+e3tmaWxlLm5hbWV9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1hcnJhbmdlLWVsbGlwc2lzIHNtZS1wYWRkaW5nLWluc2V0LW5vbmVcIj5cclxuICAgICAgICAgICAge3tmaWxlLnNpemUgfCBzbWVCeXRlVW5pdENvbnZlcnRlcjoxMDI0fX1cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzbWUtYnV0dG9uLXRyaWdnZXIgc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtYnV0dG9uLWF1dG8td2lkdGhcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUl0ZW1BdChpKVwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5GaWxlLnJlbW92ZUJ1dHRvbkFyaWFMYWJlbEZvcm1hdCB8IHNtZUZvcm1hdDpmaWxlLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5GaWxlLnJlbW92ZUJ1dHRvblRvb2x0aXBcIiBbc21lRGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWRcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tY2FuY2VsIHNtZS1jb2xvci1yZWRcIj48L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9maWVsZHNldD5cclxuICA8c21lLXZhbGlkYXRpb24tYWxlcnQgW2FsZXJ0XT1cImFsZXJ0XCI+PC9zbWUtdmFsaWRhdGlvbi1hbGVydD5cclxuPC9zbWUtZm9ybS1maWVsZC1sYXlvdXQ+XHJcbiJdfQ==