ontimize-web-ngx 15.6.0-next.1 → 15.6.0-next.11

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 (161) hide show
  1. package/esm2020/lib/components/app-header/o-app-header.component.mjs +3 -3
  2. package/esm2020/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.mjs +19 -3
  3. package/esm2020/lib/components/app-sidenav/menu-item/o-app-sidenav-menu-item.component.mjs +17 -4
  4. package/esm2020/lib/components/app-sidenav/o-app-sidenav.component.mjs +7 -5
  5. package/esm2020/lib/components/filter-builder/o-filter-builder.component.mjs +1 -1
  6. package/esm2020/lib/components/form/navigation/o-form-navigation.component.mjs +42 -24
  7. package/esm2020/lib/components/form/o-form.component.mjs +4 -3
  8. package/esm2020/lib/components/form/services/o-form-message.service.mjs +2 -2
  9. package/esm2020/lib/components/grid/o-grid.component.mjs +19 -17
  10. package/esm2020/lib/components/grid/skeketon/o-grid-skeleton.component.mjs +12 -15
  11. package/esm2020/lib/components/index.mjs +2 -1
  12. package/esm2020/lib/components/input/file-input/o-file-input.component.mjs +3 -2
  13. package/esm2020/lib/components/input/o-boolean-form-data-component.class.mjs +9 -1
  14. package/esm2020/lib/components/input/o-form-service-component.class.mjs +4 -3
  15. package/esm2020/lib/components/list/list-item/o-list-item.component.mjs +8 -3
  16. package/esm2020/lib/components/list/o-list.component.mjs +41 -16
  17. package/esm2020/lib/components/list/skeleton/o-list-skeleton.component.mjs +12 -15
  18. package/esm2020/lib/components/o-form-data-component.class.mjs +2 -2
  19. package/esm2020/lib/components/o-repeatable-skeleton.component.mjs +33 -0
  20. package/esm2020/lib/components/o-service-base-component.class.mjs +5 -4
  21. package/esm2020/lib/components/o-service-component.class.mjs +10 -9
  22. package/esm2020/lib/components/o-skeleton.component.mjs +15 -6
  23. package/esm2020/lib/components/table/column/cell-editor/o-base-table-cell-editor.class.mjs +2 -2
  24. package/esm2020/lib/components/table/column/cell-renderer/o-base-table-cell-renderer.class.mjs +1 -1
  25. package/esm2020/lib/components/table/column/cell-renderer/service/o-table-cell-renderer-service.component.mjs +5 -4
  26. package/esm2020/lib/components/table/column/o-column.class.mjs +2 -1
  27. package/esm2020/lib/components/table/column/o-table-column.component.mjs +10 -4
  28. package/esm2020/lib/components/table/extensions/contextmenu/o-table-context-menu.component.mjs +24 -6
  29. package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +75 -87
  30. package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column.service.mjs +53 -0
  31. package/esm2020/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.mjs +12 -4
  32. package/esm2020/lib/components/table/extensions/header/table-menu/o-table-menu.component.mjs +2 -2
  33. package/esm2020/lib/components/table/extensions/o-table.dao.mjs +6 -4
  34. package/esm2020/lib/components/table/extensions/skeleton/o-table-skeleton.component.mjs +5 -19
  35. package/esm2020/lib/components/table/o-table-base.class.mjs +1 -1
  36. package/esm2020/lib/components/table/o-table.component.mjs +104 -10
  37. package/esm2020/lib/components/table/o-table.module.mjs +4 -1
  38. package/esm2020/lib/components/tree/o-tree.component.mjs +96 -14
  39. package/esm2020/lib/components/tree/o-tree.datasource.mjs +3 -3
  40. package/esm2020/lib/components/user-info/o-user-info.component.mjs +5 -4
  41. package/esm2020/lib/config/o-providers.mjs +5 -3
  42. package/esm2020/lib/i18n/i18n.mjs +6 -3
  43. package/esm2020/lib/injection-tokens/index.mjs +19 -0
  44. package/esm2020/lib/interfaces/base-response.interface.mjs +1 -1
  45. package/esm2020/lib/interfaces/form-layout-manager.interface.mjs +1 -1
  46. package/esm2020/lib/interfaces/index.mjs +3 -1
  47. package/esm2020/lib/interfaces/jsonapi-config.interface.mjs +3 -0
  48. package/esm2020/lib/interfaces/jsonapi-response.interface.mjs +2 -1
  49. package/esm2020/lib/interfaces/o-table-column.interface.mjs +1 -1
  50. package/esm2020/lib/interfaces/service-response.interface.mjs +1 -1
  51. package/esm2020/lib/layouts/app-layout/o-app-layout-base.class.mjs +1 -1
  52. package/esm2020/lib/layouts/app-layout/o-app-layout.component.mjs +26 -9
  53. package/esm2020/lib/layouts/form-layout/o-form-layout-manager.component.mjs +4 -3
  54. package/esm2020/lib/layouts/form-layout/split-pane/o-form-layout-split-pane.component.mjs +2 -2
  55. package/esm2020/lib/layouts/form-layout/tabgroup/o-form-layout-tabgroup.component.mjs +2 -1
  56. package/esm2020/lib/services/base-service.class.mjs +3 -3
  57. package/esm2020/lib/services/factories.mjs +25 -53
  58. package/esm2020/lib/services/index.mjs +2 -2
  59. package/esm2020/lib/services/jsonapi/jsonapi-preferences.service.mjs +2 -2
  60. package/esm2020/lib/services/jsonapi/jsonapi.service.mjs +53 -21
  61. package/esm2020/lib/services/request-adapter/base-request-argument.adapter.mjs +12 -0
  62. package/esm2020/lib/services/request-adapter/base-request-argument.interface.mjs +2 -0
  63. package/esm2020/lib/services/request-adapter/index.mjs +5 -0
  64. package/esm2020/lib/services/request-adapter/jsonapi-request-arguments.adapter.mjs +70 -0
  65. package/esm2020/lib/services/request-adapter/ontimize-request-arguments.adapter.mjs +19 -0
  66. package/esm2020/lib/services/state/o-filter-builder-component-state.service.mjs +1 -1
  67. package/esm2020/lib/services/state/o-table-component-state.class.mjs +7 -1
  68. package/esm2020/lib/services/state/o-table-component-state.service.mjs +8 -2
  69. package/esm2020/lib/services/translate/o-translate.service.mjs +3 -2
  70. package/esm2020/lib/types/config.type.mjs +1 -1
  71. package/esm2020/lib/types/form-layout-detail-component-data.type.mjs +1 -1
  72. package/esm2020/lib/types/index.mjs +1 -2
  73. package/esm2020/lib/types/service-configuration.type.mjs +1 -1
  74. package/esm2020/lib/types/table/index.mjs +2 -1
  75. package/esm2020/lib/types/table/o-column-value-filter.type.mjs +1 -1
  76. package/esm2020/lib/types/table/o-table-expandable-row-state.type.mjs +2 -0
  77. package/esm2020/lib/util/codes.mjs +3 -1
  78. package/esm2020/lib/util/errors.mjs +3 -9
  79. package/esm2020/lib/util/factory.util.mjs +67 -0
  80. package/esm2020/lib/util/index.mjs +3 -1
  81. package/esm2020/lib/util/injection-token.utils.mjs +4 -0
  82. package/esm2020/lib/util/preference-mapping-util.mjs +2 -2
  83. package/esm2020/lib/util/sqltypes.mjs +2 -2
  84. package/esm2020/lib/util/util.mjs +11 -53
  85. package/esm2020/public-api.mjs +2 -1
  86. package/fesm2015/ontimize-web-ngx.mjs +6995 -6537
  87. package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
  88. package/fesm2020/ontimize-web-ngx.mjs +6634 -6194
  89. package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
  90. package/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.d.ts +3 -0
  91. package/lib/components/app-sidenav/menu-item/o-app-sidenav-menu-item.component.d.ts +1 -0
  92. package/lib/components/app-sidenav/o-app-sidenav.component.d.ts +2 -1
  93. package/lib/components/filter-builder/o-filter-builder.component.d.ts +1 -1
  94. package/lib/components/form/navigation/o-form-navigation.component.d.ts +7 -4
  95. package/lib/components/grid/skeketon/o-grid-skeleton.component.d.ts +4 -7
  96. package/lib/components/index.d.ts +1 -0
  97. package/lib/components/input/o-boolean-form-data-component.class.d.ts +1 -0
  98. package/lib/components/list/o-list.component.d.ts +5 -1
  99. package/lib/components/list/skeleton/o-list-skeleton.component.d.ts +4 -7
  100. package/lib/components/o-repeatable-skeleton.component.d.ts +9 -0
  101. package/lib/components/o-skeleton.component.d.ts +10 -5
  102. package/lib/components/table/column/cell-renderer/o-base-table-cell-renderer.class.d.ts +1 -1
  103. package/lib/components/table/column/o-column.class.d.ts +2 -1
  104. package/lib/components/table/column/o-table-column.component.d.ts +2 -2
  105. package/lib/components/table/extensions/contextmenu/o-table-context-menu.component.d.ts +2 -0
  106. package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.d.ts +9 -6
  107. package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column.service.d.ts +12 -0
  108. package/lib/components/table/extensions/header/o-table-header-components.d.ts +2 -2
  109. package/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.d.ts +1 -1
  110. package/lib/components/table/extensions/skeleton/o-table-skeleton.component.d.ts +1 -10
  111. package/lib/components/table/o-table-base.class.d.ts +2 -0
  112. package/lib/components/table/o-table.component.d.ts +12 -2
  113. package/lib/components/tree/o-tree.component.d.ts +10 -1
  114. package/lib/components/user-info/o-user-info.component.d.ts +2 -1
  115. package/lib/config/o-directives.d.ts +1 -1
  116. package/lib/i18n/i18n.d.ts +3 -0
  117. package/lib/injection-tokens/index.d.ts +33 -0
  118. package/lib/interfaces/base-response.interface.d.ts +0 -2
  119. package/lib/interfaces/form-layout-manager.interface.d.ts +1 -1
  120. package/lib/interfaces/index.d.ts +2 -0
  121. package/lib/interfaces/jsonapi-config.interface.d.ts +3 -0
  122. package/lib/interfaces/jsonapi-response.interface.d.ts +47 -7
  123. package/lib/interfaces/o-table-column.interface.d.ts +2 -1
  124. package/lib/interfaces/service-response.interface.d.ts +2 -0
  125. package/lib/layouts/app-layout/o-app-layout-base.class.d.ts +1 -1
  126. package/lib/layouts/app-layout/o-app-layout.component.d.ts +7 -3
  127. package/lib/services/base-service.class.d.ts +2 -2
  128. package/lib/services/factories.d.ts +7 -28
  129. package/lib/services/index.d.ts +1 -1
  130. package/lib/services/jsonapi/jsonapi.service.d.ts +7 -4
  131. package/lib/services/{query-arguments/base-query-argument.adapter.d.ts → request-adapter/base-request-argument.adapter.d.ts} +2 -1
  132. package/lib/services/{query-arguments/base-query-argument.interface.d.ts → request-adapter/base-request-argument.interface.d.ts} +1 -1
  133. package/lib/services/request-adapter/index.d.ts +4 -0
  134. package/lib/services/request-adapter/jsonapi-request-arguments.adapter.d.ts +13 -0
  135. package/lib/services/request-adapter/ontimize-request-arguments.adapter.d.ts +8 -0
  136. package/lib/services/state/o-filter-builder-component-state.service.d.ts +1 -1
  137. package/lib/services/state/o-table-component-state.class.d.ts +3 -0
  138. package/lib/types/config.type.d.ts +2 -2
  139. package/lib/types/form-layout-detail-component-data.type.d.ts +1 -1
  140. package/lib/types/index.d.ts +0 -1
  141. package/lib/types/service-configuration.type.d.ts +12 -2
  142. package/lib/types/table/index.d.ts +1 -0
  143. package/lib/types/table/o-column-value-filter.type.d.ts +3 -0
  144. package/lib/types/table/o-table-expandable-row-state.type.d.ts +5 -0
  145. package/lib/util/codes.d.ts +3 -0
  146. package/lib/util/factory.util.d.ts +10 -0
  147. package/lib/util/index.d.ts +2 -0
  148. package/lib/util/injection-token.utils.d.ts +2 -0
  149. package/lib/util/util.d.ts +1 -5
  150. package/package.json +1 -1
  151. package/public-api.d.ts +1 -0
  152. package/esm2020/lib/services/query-arguments/base-query-argument.adapter.mjs +0 -9
  153. package/esm2020/lib/services/query-arguments/base-query-argument.interface.mjs +0 -2
  154. package/esm2020/lib/services/query-arguments/index.mjs +0 -5
  155. package/esm2020/lib/services/query-arguments/jsonapi-query-arguments.adapter.mjs +0 -62
  156. package/esm2020/lib/services/query-arguments/ontimize-query-arguments.adapter.mjs +0 -19
  157. package/esm2020/lib/types/ontimize-service-config.type.mjs +0 -2
  158. package/lib/services/query-arguments/index.d.ts +0 -4
  159. package/lib/services/query-arguments/jsonapi-query-arguments.adapter.d.ts +0 -12
  160. package/lib/services/query-arguments/ontimize-query-arguments.adapter.d.ts +0 -8
  161. package/lib/types/ontimize-service-config.type.d.ts +0 -5
@@ -226,19 +226,21 @@ export class AbstractOServiceComponent extends AbstractOServiceBaseComponent {
226
226
  const extras = {
227
227
  relativeTo: relativeTo
228
228
  };
229
+ let isFormLayoutActive = false;
229
230
  if (this.formLayoutManager && this.formLayoutManager.isMainComponent(this)) {
230
231
  qParams[Codes.IGNORE_CAN_DEACTIVATE] = this.formLayoutManager.ignoreCanDeactivate;
232
+ isFormLayoutActive = true;
231
233
  this.formLayoutManager.setAsActiveFormLayoutManager();
232
234
  }
233
235
  extras[Codes.QUERY_PARAMS] = qParams;
234
236
  this.router.navigate(route, extras).
235
237
  then(() => {
236
- if (!this.formLayoutManager) {
238
+ if (!isFormLayoutActive) {
237
239
  this.navigationService.isNavigating = false;
238
240
  }
239
241
  })
240
- .catch(() => {
241
- console.error('Cannot match any routes. URL Segment: ', route);
242
+ .catch((e) => {
243
+ console.error('Cannot match any routes. URL Segment: ', route, e);
242
244
  this.navigationService.isNavigating = false;
243
245
  });
244
246
  }
@@ -263,9 +265,9 @@ export class AbstractOServiceComponent extends AbstractOServiceBaseComponent {
263
265
  formLayoutManagerService.context = void 0;
264
266
  if (this.oFormLayoutDialog) {
265
267
  console.warn('Navigation is not available yet in a form layout manager with mode="dialog"');
266
- return;
267
- }
268
- if (this.navigationService.isNavigating) {
268
+ if (this.formLayoutManager.navigationService) {
269
+ this.formLayoutManager.navigationService.isNavigating = false;
270
+ }
269
271
  return;
270
272
  }
271
273
  const zone = this.injector.get(NgZone);
@@ -278,7 +280,6 @@ export class AbstractOServiceComponent extends AbstractOServiceBaseComponent {
278
280
  if (!this.formLayoutManager?.isSplitPaneMode()) {
279
281
  formLayoutManagerService.context = context;
280
282
  }
281
- this.navigationService.isNavigating = true;
282
283
  await this.navigateToDetail(route, qParams, relativeTo);
283
284
  }
284
285
  });
@@ -680,7 +681,7 @@ export class AbstractOServiceComponent extends AbstractOServiceBaseComponent {
680
681
  updateComponentStateSubject.next(arg);
681
682
  }
682
683
  }
683
- if (((arg.previousIndex === void 0) || arg.previousIndex === 0) && this.formLayoutManager.navigationService.isNavigating) {
684
+ if (this.formLayoutManager.navigationService.isNavigating) {
684
685
  arg.data.rendererSubject.next(true);
685
686
  }
686
687
  this.checkViewPortSubject.next(true);
@@ -877,4 +878,4 @@ OServiceComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", vers
877
878
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OServiceComponent, decorators: [{
878
879
  type: Directive
879
880
  }] });
880
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1zZXJ2aWNlLWNvbXBvbmVudC5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL28tc2VydmljZS1jb21wb25lbnQuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdHLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsZUFBZSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUdqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUVyRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUdqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUc5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFJaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLHFCQUFxQixFQUFF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QUFxQixFQUFFOztvRUFDVztBQUduQztJQUFDLHFCQUFxQixFQUFFOztnRUFDaUI7QUFDekM7SUFBQyxxQkFBcUIsRUFBRTs7a0VBQ1M7QUFFakM7SUFBQyxxQkFBcUIsRUFBRTs7K0RBQ0Y7QUFDdEI7SUFBQyxxQkFBcUIsRUFBRTs7cUVBQ1c7QUFDbkM7SUFBQyxxQkFBcUIsRUFBRTs7NkVBQ29CO0FBK0I1QztJQUFDLHFCQUFxQixFQUFFOztrRUFDbUI7MkZBNUV2Qix5QkFBeUI7a0JBSjlDLFNBQVM7bUJBQUM7b0JBQ1QsTUFBTSxFQUFFLGtDQUFrQztvQkFDMUMsT0FBTyxFQUFFLG1DQUFtQztpQkFDN0M7cUpBSTBCLFlBQVk7c0JBQXBDLFNBQVM7dUJBQUMsWUFBWTtnQkFrQmIsUUFBUSxNQUVSLFFBQVEsTUFFUixRQUFRLE1BSVIsZUFBZSxNQUV6QixpQkFBaUIsTUFJUCxhQUFhLE1BRXZCLGVBQWUsTUFHZixZQUFZLE1BRVosa0JBQWtCLE1BRWxCLDBCQUEwQixNQWdDaEIsZUFBZSxNQXFEbEIsb0JBQW9CO3NCQUQxQixTQUFTO3VCQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUM7O0FBb3hCdEQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLHlCQUE4RDs7OEdBQXhGLGlCQUFpQjtrR0FBakIsaUJBQWlCOzJGQUFqQixpQkFBaUI7a0JBRDdCLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5qZWN0b3IsIE5nWm9uZSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRBcHBlYXJhbmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IsIFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBPRmlsdGVyQnVpbGRlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZmlsdGVyLWJ1aWxkZXIvby1maWx0ZXItYnVpbGRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgT1NlYXJjaElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9pbnB1dC9zZWFyY2gtaW5wdXQvby1zZWFyY2gtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEJvb2xlYW5Db252ZXJ0ZXIsIEJvb2xlYW5JbnB1dENvbnZlcnRlciB9IGZyb20gJy4uL2RlY29yYXRvcnMvaW5wdXQtY29udmVydGVyJztcbmltcG9ydCB7IElTZXJ2aWNlRGF0YUNvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VydmljZS1kYXRhLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9sYXlvdXRzL2Zvcm0tbGF5b3V0L2RpYWxvZy9vLWZvcm0tbGF5b3V0LWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vbGF5b3V0cy9mb3JtLWxheW91dC9vLWZvcm0tbGF5b3V0LW1hbmFnZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0VGFiR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9sYXlvdXRzL2Zvcm0tbGF5b3V0L3RhYmdyb3VwL28tZm9ybS1sYXlvdXQtdGFiZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcm1pc3Npb25zU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RTZXJ2aWNlQ29tcG9uZW50U3RhdGVDbGFzcyB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXRlL28tY29tcG9uZW50LXN0YXRlLmNsYXNzJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50U3RhdGVTZXJ2aWNlLCBEZWZhdWx0U2VydmljZUNvbXBvbmVudFN0YXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXRlL28tY29tcG9uZW50LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90cmFuc2xhdGUvby10cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBPUGVybWlzc2lvbnMgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBFeHByZXNzaW9uIH0gZnJvbSAnLi4vdHlwZXMvZXhwcmVzc2lvbi50eXBlJztcbmltcG9ydCB7IE9fR0xPQkFMX0NPTkZJRyB9IGZyb20gJy4uL3R5cGVzL28tZ2xvYmFsLWNvbmZpZy50eXBlJztcbmltcG9ydCB7IE9MaXN0SW5pdGlhbGl6YXRpb25PcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMvby1saXN0LWluaXRpYWxpemF0aW9uLW9wdGlvbnMudHlwZSc7XG5pbXBvcnQgeyBPUXVlcnlEYXRhQXJncyB9IGZyb20gJy4uL3R5cGVzL3F1ZXJ5LWRhdGEtYXJncy50eXBlJztcbmltcG9ydCB7IE9UYWJsZUluaXRpYWxpemF0aW9uT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzL3RhYmxlL28tdGFibGUtaW5pdGlhbGl6YXRpb24tb3B0aW9ucy50eXBlJztcbmltcG9ydCB7IE9ic2VydmFibGVXcmFwcGVyIH0gZnJvbSAnLi4vdXRpbC9hc3luYyc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgRmlsdGVyRXhwcmVzc2lvblV0aWxzIH0gZnJvbSAnLi4vdXRpbC9maWx0ZXItZXhwcmVzc2lvbi51dGlscyc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1V0aWxzIH0gZnJvbSAnLi4vdXRpbC9wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9Gb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9mb3JtL28tZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWJzdHJhY3RPU2VydmljZUJhc2VDb21wb25lbnQsIERFRkFVTFRfSU5QVVRTX09fU0VSVklDRV9CQVNFX0NPTVBPTkVOVCB9IGZyb20gJy4vby1zZXJ2aWNlLWJhc2UtY29tcG9uZW50LmNsYXNzJztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0TWFuYWdlckJhc2UgfSBmcm9tICcuLi9sYXlvdXRzL2Zvcm0tbGF5b3V0L28tZm9ybS1sYXlvdXQtbWFuYWdlci1iYXNlLmNsYXNzJztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0TWFuYWdlckNvbnRleHQgfSBmcm9tICcuLi90eXBlcy9mb3JtLWxheW91dC1tYW5hZ2VyLWNvbnRleHQudHlwZSc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvby1mb3JtLWxheW91dC1tYW5hZ2VyLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSXRlbUNsaWNrIHtcbiAgZ2V0SXRlbURhdGEoKTogYW55XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX1NFUlZJQ0VfQ09NUE9ORU5UID0gW1xuICAuLi5ERUZBVUxUX0lOUFVUU19PX1NFUlZJQ0VfQkFTRV9DT01QT05FTlQsXG5cbiAgJ190aXRsZTogdGl0bGUnLFxuXG4gIC8vIHZpc2libGUgW25vfHllc106IHZpc2liaWxpdHkuIERlZmF1bHQ6IHllcy5cbiAgJ292aXNpYmxlOiB2aXNpYmxlJyxcblxuICAvLyBlbmFibGVkIFtub3x5ZXNdOiBlZGl0YWJpbGl0eS4gRGVmYXVsdDogeWVzLlxuICAnb2VuYWJsZWQ6IGVuYWJsZWQnLFxuXG4gIC8vIGNvbnRyb2xzIFtzdHJpbmddW3llc3xub3x0cnVlfGZhbHNlXTpcbiAgJ2NvbnRyb2xzJyxcblxuICAvLyBkZXRhaWwtbW9kZSBbbm9uZXxjbGlja3xkb3VibGVjbGlja106IHdheSB0byBvcGVuIHRoZSBkZXRhaWwgZm9ybSBvZiBhIHJvdy4gRGVmYXVsdDogJ2NsaWNrJy5cbiAgJ2RldGFpbE1vZGU6IGRldGFpbC1tb2RlJyxcblxuICAvLyBkZXRhaWwtZm9ybS1yb3V0ZSBbc3RyaW5nXTogcm91dGUgb2YgZGV0YWlsIGZvcm0uIERlZmF1bHQ6ICdkZXRhaWwnLlxuICAnZGV0YWlsRm9ybVJvdXRlOiBkZXRhaWwtZm9ybS1yb3V0ZScsXG5cbiAgLy8gcmVjdXJzaXZlLWRldGFpbCBbbm98eWVzXTogZG8gbm90IGFwcGVuZCBkZXRhaWwga2V5cyB3aGVuIG5hdmlnYXRlIChvdmVyd3JpdGUgY3VycmVudCkuIERlZmF1bHQ6IG5vLlxuICAncmVjdXJzaXZlRGV0YWlsOiByZWN1cnNpdmUtZGV0YWlsJyxcblxuICAvLyBkZXRhaWwtYnV0dG9uLWluLXJvdyBbbm98eWVzXTogYWRkaW5nIGEgYnV0dG9uIGluIHJvdyBmb3Igb3BlbmluZyBkZXRhaWwgZm9ybS4gRGVmYXVsdDogeWVzLlxuICAnZGV0YWlsQnV0dG9uSW5Sb3c6IGRldGFpbC1idXR0b24taW4tcm93JyxcblxuICAvLyBkZXRhaWwtYnV0dG9uLWluLXJvdy1pY29uIFtzdHJpbmddOiBtYXRlcmlhbCBpY29uLiBEZWZhdWx0OiBtb2RlX2VkaXQuXG4gICdkZXRhaWxCdXR0b25JblJvd0ljb246IGRldGFpbC1idXR0b24taW4tcm93LWljb24nLFxuXG4gIC8vIGVkaXQtZm9ybS1yb3V0ZSBbc3RyaW5nXTogcm91dGUgb2YgZWRpdCBmb3JtLiBEZWZhdWx0OiAnZWRpdCcuXG4gICdlZGl0Rm9ybVJvdXRlOiBlZGl0LWZvcm0tcm91dGUnLFxuXG4gIC8vIHJlY3Vyc2l2ZS1lZGl0IFtub3x5ZXNdOiBkbyBub3QgYXBwZW5kIGRldGFpbCBrZXlzIHdoZW4gbmF2aWdhdGUgKG92ZXJ3cml0ZSBjdXJyZW50KS4gRGVmYXVsdDogbm8uXG4gICdyZWN1cnNpdmVFZGl0OiByZWN1cnNpdmUtZWRpdCcsXG5cbiAgLy8gZWRpdC1idXR0b24taW4tcm93IFtub3x5ZXNdOiBhZGRpbmcgYSBidXR0b24gaW4gcm93IGZvciBvcGVuaW5nIGVkaXRpb24gZm9ybS4gRGVmYXVsdDogbm8uXG4gICdlZGl0QnV0dG9uSW5Sb3c6IGVkaXQtYnV0dG9uLWluLXJvdycsXG5cbiAgLy8gZWRpdC1idXR0b24taW4tcm93LWljb24gW3N0cmluZ106IG1hdGVyaWFsIGljb24uIERlZmF1bHQ6IHNlYXJjaC5cbiAgJ2VkaXRCdXR0b25JblJvd0ljb246IGVkaXQtYnV0dG9uLWluLXJvdy1pY29uJyxcblxuICAvLyBpbnNlcnQtYnV0dG9uIFtub3x5ZXNdOiBzaG93IGluc2VydCBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgJ2luc2VydEJ1dHRvbjogaW5zZXJ0LWJ1dHRvbicsXG5cbiAgLy8gcm93LWhlaWdodCBbc21hbGwgfCBtZWRpdW0gfCBsYXJnZV1cbiAgJ3Jvd0hlaWdodCA6IHJvdy1oZWlnaHQnLFxuXG4gIC8vIGluc2VydC1mb3JtLXJvdXRlIFtzdHJpbmddOiByb3V0ZSBvZiBpbnNlcnQgZm9ybS4gRGVmYXVsdDpcbiAgJ2luc2VydEZvcm1Sb3V0ZTogaW5zZXJ0LWZvcm0tcm91dGUnLFxuXG4gIC8vIHJlY3Vyc2l2ZS1pbnNlcnQgW25vfHllc106IGRvIG5vdCBhcHBlbmQgaW5zZXJ0IGtleXMgd2hlbiBuYXZpZ2F0ZSAob3ZlcndyaXRlIGN1cnJlbnQpLiBEZWZhdWx0OiBuby5cbiAgJ3JlY3Vyc2l2ZUluc2VydDogcmVjdXJzaXZlLWluc2VydCcsXG5cbiAgLy8gZmlsdGVyIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHdoZXRoZXIgZmlsdGVyIGlzIGNhc2Ugc2Vuc2l0aXZlLiBEZWZhdWx0OiBuby5cbiAgJ2ZpbHRlckNhc2VTZW5zaXRpdmU6IGZpbHRlci1jYXNlLXNlbnNpdGl2ZScsXG5cbiAgLy8gcXVpY2stZmlsdGVyIFtub3x5ZXNdOiBzaG93IHF1aWNrIGZpbHRlci4gRGVmYXVsdDogeWVzLlxuICAncXVpY2tGaWx0ZXI6IHF1aWNrLWZpbHRlcicsXG5cbiAgLy8gcXVpY2stZmlsdGVyLXBsYWNlaG9sZGVyOiBxdWljayBmaWx0ZXIgcGxhY2Vob2xkZXJcbiAgJ3F1aWNrRmlsdGVyUGxhY2Vob2xkZXI6IHF1aWNrLWZpbHRlci1wbGFjZWhvbGRlcicsXG5cbiAgLy8gcGFnaW5hdGlvbi1jb250cm9scyBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHBhZ2luYXRpb24gY29udHJvbHMuIERlZmF1bHQ6IHllcy5cbiAgJ3BhZ2luYXRpb25Db250cm9sczogcGFnaW5hdGlvbi1jb250cm9scycsXG5cbiAgLy8gcGFnZS1zaXplLW9wdGlvbnMgW3N0cmluZ106IFBhZ2Ugc2l6ZSBvcHRpb25zIHNlcGFyYXRlZCBieSAnOycuXG4gICdwYWdlU2l6ZU9wdGlvbnM6IHBhZ2Utc2l6ZS1vcHRpb25zJyxcblxuICAvL3F1aWNrRmlsdGVyQXBwZWFyYW5jZVtsZWdhY3l8c3RhbmRhcmR8ZmlsbHxvdXRsaW5lXSBJbmRpY2F0ZXMgd2hpY2ggb2YgdGhlIG1hdC1mb3JtLWZpZWxkIGRpZmZlcmVudCBhcHBlYXJhbmNlIHZhcmlhbnRzIHdpbGwgYmUgdXNlZC4gRGVmYXVsdDogb3V0bGluZVxuICAncXVpY2tGaWx0ZXJBcHBlYXJhbmNlOnF1aWNrLWZpbHRlci1hcHBlYXJhbmNlJyxcblxuICAnZGlzYWJsZVBhZ2VTaXplQ2FsY3VsYXRpb246IGRpc2FibGUtcGFnZS1zaXplLWNhbGN1bGF0aW9uJ1xuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUUFVUU19PX1NFUlZJQ0VfQ09NUE9ORU5UID0gW1xuICAnb25DbGljaycsXG4gICdvbkRvdWJsZUNsaWNrJyxcbiAgJ29uRGF0YUxvYWRlZCcsXG4gICdvblBhZ2luYXRlZERhdGFMb2FkZWQnLFxuICAnb25TZWFyY2gnXG5dXG5cbkBEaXJlY3RpdmUoe1xuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fU0VSVklDRV9DT01QT05FTlQsXG4gIG91dHB1dHM6IERFRkFVTFRfT1VUUFVUU19PX1NFUlZJQ0VfQ09NUE9ORU5UXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0T1NlcnZpY2VDb21wb25lbnQ8VCBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50U3RhdGVTZXJ2aWNlPEFic3RyYWN0U2VydmljZUNvbXBvbmVudFN0YXRlQ2xhc3M+PlxuICBleHRlbmRzIEFic3RyYWN0T1NlcnZpY2VCYXNlQ29tcG9uZW50PFQ+XG4gIGltcGxlbWVudHMgSVNlcnZpY2VEYXRhQ29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIG1hdHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuXG4gIHByb3RlY3RlZCBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZTtcbiAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlcnZpY2U6IE9UcmFuc2xhdGVTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlO1xuXG4gIC8qIGlucHV0cyB2YXJpYWJsZXMgKi9cbiAgc2V0IHRpdGxlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGl0bGUgPSB2YWw7XG4gIH1cbiAgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuX3RpdGxlKSkge1xuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQodGhpcy5fdGl0bGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gIH1cbiAgcHJvdGVjdGVkIF90aXRsZTogc3RyaW5nO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHJvdGVjdGVkIG92aXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHByb3RlY3RlZCBvZW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwcm90ZWN0ZWQgY29udHJvbHM6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgZGV0YWlsTW9kZTogc3RyaW5nID0gQ29kZXMuREVUQUlMX01PREVfQ0xJQ0s7XG4gIHByb3RlY3RlZCBkZXRhaWxGb3JtUm91dGU6IHN0cmluZztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHByb3RlY3RlZCByZWN1cnNpdmVEZXRhaWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGRldGFpbEJ1dHRvbkluUm93OiBib29sZWFuID0gZmFsc2U7XG4gIGRldGFpbEJ1dHRvbkluUm93SWNvbjogc3RyaW5nID0gQ29kZXMuREVUQUlMX0lDT047XG4gIHByb3RlY3RlZCBlZGl0Rm9ybVJvdXRlOiBzdHJpbmc7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwcm90ZWN0ZWQgcmVjdXJzaXZlRWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZWRpdEJ1dHRvbkluUm93OiBib29sZWFuID0gZmFsc2U7XG4gIGVkaXRCdXR0b25JblJvd0ljb246IHN0cmluZyA9IENvZGVzLkVESVRfSUNPTjtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGluc2VydEJ1dHRvbjogYm9vbGVhbjtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHBhZ2luYXRpb25Db250cm9sczogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBkaXNhYmxlUGFnZVNpemVDYWxjdWxhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGdldCBwYWdlU2l6ZU9wdGlvbnMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wYWdlU2l6ZU9wdGlvbnM7XG4gIH1cblxuICBzZXQgcGFnZVNpemVPcHRpb25zKHZhbDogbnVtYmVyW10pIHtcbiAgICBpZiAoISh2YWwgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHZhbCA9IFV0aWwucGFyc2VBcnJheShTdHJpbmcodmFsKSkubWFwKGEgPT4gcGFyc2VJbnQoYSwgMTApKTtcbiAgICB9XG4gICAgdGhpcy5fcGFnZVNpemVPcHRpb25zID0gdmFsO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9yb3dIZWlnaHQgPSBDb2Rlcy5ERUZBVUxUX1JPV19IRUlHSFQ7XG4gIHByb3RlY3RlZCByb3dIZWlnaHRTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5fcm93SGVpZ2h0KTtcbiAgcHVibGljIHJvd0hlaWdodE9ic2VydmFibGU6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMucm93SGVpZ2h0U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcm90ZWN0ZWQgY2hlY2tWaWV3UG9ydFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwdWJsaWMgY2hlY2tWaWV3UG9ydE9ic2VydmFibGU6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmNoZWNrVmlld1BvcnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHNldCByb3dIZWlnaHQodmFsdWUpIHtcbiAgICB0aGlzLl9yb3dIZWlnaHQgPSB2YWx1ZSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcbiAgICBpZiAoIUNvZGVzLmlzVmFsaWRSb3dIZWlnaHQodGhpcy5fcm93SGVpZ2h0KSkge1xuICAgICAgdGhpcy5fcm93SGVpZ2h0ID0gQ29kZXMuREVGQVVMVF9ST1dfSEVJR0hUO1xuICAgIH1cbiAgICB0aGlzLnJvd0hlaWdodFN1YmplY3QubmV4dCh0aGlzLl9yb3dIZWlnaHQpO1xuICB9XG4gIGdldCByb3dIZWlnaHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcm93SGVpZ2h0O1xuICB9XG4gIHByb3RlY3RlZCBpbnNlcnRGb3JtUm91dGU6IHN0cmluZztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHByb3RlY3RlZCByZWN1cnNpdmVJbnNlcnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgX2ZpbHRlckNhc2VTZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2V0IGZpbHRlckNhc2VTZW5zaXRpdmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9maWx0ZXJDYXNlU2Vuc2l0aXZlID0gQm9vbGVhbkNvbnZlcnRlcih2YWx1ZSk7XG4gIH1cbiAgZ2V0IGZpbHRlckNhc2VTZW5zaXRpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckNhc2VTZW5zaXRpdmU7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3F1aWNrRmlsdGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgZ2V0IHF1aWNrRmlsdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9xdWlja0ZpbHRlcjtcbiAgfVxuICBzZXQgcXVpY2tGaWx0ZXIodmFsOiBib29sZWFuKSB7XG4gICAgdmFsID0gVXRpbC5wYXJzZUJvb2xlYW4oU3RyaW5nKHZhbCkpO1xuICAgIHRoaXMuX3F1aWNrRmlsdGVyID0gdmFsO1xuICAgIGlmICh2YWwpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWdpc3RlclF1aWNrRmlsdGVyKHRoaXMuc2VhcmNoSW5wdXRDb21wb25lbnQpLCAwKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcXVpY2tGaWx0ZXJQbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIC8qIGVuZCBvZiBpbnB1dHMgdmFyaWFibGVzICovXG5cbiAgLyogb3V0cHV0cyB2YXJpYWJsZXMgKi9cbiAgcHVibGljIG9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25Eb3VibGVDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBvbkRhdGFMb2FkZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25QYWdpbmF0ZWREYXRhTG9hZGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uU2VhcmNoOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyogZW5kIG9mIG91dHB1dHMgdmFyaWFibGVzICovXG5cbiAgcHVibGljIGZpbHRlckJ1aWxkZXI6IE9GaWx0ZXJCdWlsZGVyQ29tcG9uZW50O1xuICBwcm90ZWN0ZWQgX3NlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55PjtcblxuICBnZXQgc2VsZWN0aW9uKCkge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5fc2VsZWN0aW9uKSkge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odHJ1ZSwgW10sIHRydWUsIHRoaXMuY29tcGFyZVJvdygpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblRyaWdnZXJVcGRhdGVTdWJzY3JpcHRpb246IGFueTtcbiAgcHJvdGVjdGVkIGZvcm1MYXlvdXRNYW5hZ2VyOiBPRm9ybUxheW91dE1hbmFnZXJCYXNlO1xuICBwcm90ZWN0ZWQgZm9ybUxheW91dE1hbmFnZXJUYWJJbmRleDogbnVtYmVyO1xuICBwdWJsaWMgb0Zvcm1MYXlvdXREaWFsb2c6IE9Gb3JtTGF5b3V0RGlhbG9nQ29tcG9uZW50O1xuXG4gIHByb3RlY3RlZCB0YWJzU3Vic2NyaXB0aW9uczogYW55O1xuXG4gIHB1YmxpYyBxdWlja0ZpbHRlckNvbXBvbmVudDogT1NlYXJjaElucHV0Q29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoKGZvcndhcmRSZWYoKCkgPT4gT1NlYXJjaElucHV0Q29tcG9uZW50KSkpXG4gIHB1YmxpYyBzZWFyY2hJbnB1dENvbXBvbmVudDogT1NlYXJjaElucHV0Q29tcG9uZW50O1xuXG4gIHByb3RlY3RlZCBxdWlja0ZpbHRlckNvbEFycmF5OiBzdHJpbmdbXTtcblxuICBwcm90ZWN0ZWQgZGF0YVJlc3BvbnNlQXJyYXk6IGFueVtdID0gW107XG4gIHByb3RlY3RlZCBxdWlja0ZpbHRlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBfcGFnZVNpemVPcHRpb25zID0gQ29kZXMuUEFHRV9TSVpFX09QVElPTlM7XG5cbiAgcHJvdGVjdGVkIGNsaWNrVGltZXI7XG4gIHByb3RlY3RlZCBjbGlja0RlbGF5ID0gMjAwO1xuICBwcm90ZWN0ZWQgY2xpY2tQcmV2ZW50ID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfcXVpY2tGaWx0ZXJBcHBlYXJhbmNlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlID0gJ291dGxpbmUnO1xuXG4gIHByaXZhdGUgbXV0YXRpb25PYnNlcnZlcnM6IE11dGF0aW9uT2JzZXJ2ZXJbXSA9IFtdO1xuICBwdWJsaWMgZW5hYmxlZEluc2VydEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBlbmFibGVkUmVmcmVzaEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBlbFJlZjogRWxlbWVudFJlZixcbiAgICBwcm90ZWN0ZWQgZm9ybTogT0Zvcm1Db21wb25lbnRcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoUGVybWlzc2lvbnNTZXJ2aWNlKTtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChPVHJhbnNsYXRlU2VydmljZSk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5hdmlnYXRpb25TZXJ2aWNlKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gbm8gcGFyZW50IGZvcm0gbGF5b3V0IG1hbmFnZXJcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub0Zvcm1MYXlvdXREaWFsb2cgPSB0aGlzLmluamVjdG9yLmdldChPRm9ybUxheW91dERpYWxvZ0NvbXBvbmVudCk7XG4gICAgICB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyID0gdGhpcy5vRm9ybUxheW91dERpYWxvZy5mb3JtTGF5b3V0TWFuYWdlcjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBubyBwYXJlbnQgZm9ybSBsYXlvdXQgbWFuYWdlclxuICAgIH1cbiAgICB0aGlzLmdldEdsb2JhbEluamVjdGlvblRva2VuQ29uZmlnKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEdsb2JhbEluamVjdGlvblRva2VuQ29uZmlnKCkge1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9HbG9iYWxDb25maWcgPSB0aGlzLmluamVjdG9yLmdldChPX0dMT0JBTF9DT05GSUcpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9HbG9iYWxDb25maWcuc3RvcmVTdGF0ZSkpIHtcbiAgICAgICAgdGhpcy5zdG9yZVN0YXRlID0gb0dsb2JhbENvbmZpZy5zdG9yZVN0YXRlO1xuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBEbyBub3RoaW5nIGJlY2F1c2UgaXMgb3B0aW9uYWxcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgaWYgKHRoaXMuZGV0YWlsQnV0dG9uSW5Sb3cgfHwgdGhpcy5lZGl0QnV0dG9uSW5Sb3cpIHtcbiAgICAgIHRoaXMuZGV0YWlsTW9kZSA9IENvZGVzLkRFVEFJTF9NT0RFX05PTkU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWdpc3RlckZvcm1MYXlvdXRNYW5hZ2VyU3RhdGUoKTtcbiAgICBzdXBlci5hZnRlclZpZXdJbml0KCk7XG4gICAgaWYgKHRoaXMuZWxSZWYpIHtcbiAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyICYmIHRoaXMuZm9ybUxheW91dE1hbmFnZXIuaXNNYWluQ29tcG9uZW50KHRoaXMpKSB7XG4gICAgICB0aGlzLm9uVHJpZ2dlclVwZGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIub25UcmlnZ2VyVXBkYXRlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVsb2FkRGF0YSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIGlmICh0aGlzLm9uVHJpZ2dlclVwZGF0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5vblRyaWdnZXJVcGRhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFic1N1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHRoaXMudGFic1N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVpY2tGaWx0ZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucXVpY2tGaWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm92aXNpYmxlO1xuICB9XG5cbiAgcHVibGljIGhhc0NvbnRyb2xzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xzO1xuICB9XG5cbiAgcHVibGljIGhhc1RpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRpdGxlICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRJdGVtcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkO1xuICB9XG5cbiAgcHVibGljIGNsZWFyU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0U2VsZWN0ZWQoaXRlbTogYW55KTogdm9pZCB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGl0ZW0pKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi50b2dnbGUoaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5hdmlnYXRlVG9EZXRhaWwocm91dGU6IGFueVtdLCBxUGFyYW1zOiBhbnksIHJlbGF0aXZlVG86IEFjdGl2YXRlZFJvdXRlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZXh0cmFzID0ge1xuICAgICAgcmVsYXRpdmVUbzogcmVsYXRpdmVUb1xuICAgIH07XG4gICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIgJiYgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5pc01haW5Db21wb25lbnQodGhpcykpIHtcbiAgICAgIHFQYXJhbXNbQ29kZXMuSUdOT1JFX0NBTl9ERUFDVElWQVRFXSA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIuaWdub3JlQ2FuRGVhY3RpdmF0ZTtcbiAgICAgIHRoaXMuZm9ybUxheW91dE1hbmFnZXIuc2V0QXNBY3RpdmVGb3JtTGF5b3V0TWFuYWdlcigpO1xuICAgIH1cbiAgICBleHRyYXNbQ29kZXMuUVVFUllfUEFSQU1TXSA9IHFQYXJhbXM7XG5cbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShyb3V0ZSwgZXh0cmFzKS5cbiAgICAgIHRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUxheW91dE1hbmFnZXIpIHtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmlzTmF2aWdhdGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IG1hdGNoIGFueSByb3V0ZXMuIFVSTCBTZWdtZW50OiAnLCByb3V0ZSk7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuaXNOYXZpZ2F0aW5nID0gZmFsc2VcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGluc2VydERldGFpbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vRm9ybUxheW91dERpYWxvZykge1xuICAgICAgY29uc29sZS53YXJuKCdOYXZpZ2F0aW9uIGlzIG5vdCBhdmFpbGFibGUgeWV0IGluIGEgZm9ybSBsYXlvdXQgbWFuYWdlciB3aXRoIG1vZGU9XCJkaWFsb2dcIicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByb3V0ZSA9IHRoaXMuZ2V0SW5zZXJ0Um91dGUoKTtcbiAgICB0aGlzLmFkZEZvcm1MYXlvdXRNYW5hZ2VyUm91dGUocm91dGUpO1xuICAgIGlmIChyb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZVRvID0gdGhpcy5yZWN1cnNpdmVJbnNlcnQgPyB0aGlzLmFjdFJvdXRlLnBhcmVudCA6IHRoaXMuYWN0Um91dGU7XG4gICAgICBjb25zdCBxUGFyYW1zID0ge307XG4gICAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlciAmJiB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmlzVGFiTW9kZSgpKSB7XG4gICAgICAgIHFQYXJhbXNbQ29kZXMuSU5TRVJUSU9OX01PREVdID0gJ3RydWUnO1xuICAgICAgfVxuICAgICAgdGhpcy5uYXZpZ2F0ZVRvRGV0YWlsKHJvdXRlLCBxUGFyYW1zLCByZWxhdGl2ZVRvKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdmlld0RldGFpbChpdGVtOiBhbnksIGNvbnRleHQ/OiBPRm9ybUxheW91dE1hbmFnZXJDb250ZXh0KTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoT0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZSk7XG4gICAgZm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlLmNvbnRleHQgPSB2b2lkIDA7XG5cbiAgICBpZiAodGhpcy5vRm9ybUxheW91dERpYWxvZykge1xuICAgICAgY29uc29sZS53YXJuKCdOYXZpZ2F0aW9uIGlzIG5vdCBhdmFpbGFibGUgeWV0IGluIGEgZm9ybSBsYXlvdXQgbWFuYWdlciB3aXRoIG1vZGU9XCJkaWFsb2dcIicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5pc05hdmlnYXRpbmcpIHtcbiAgICAgIHJldHVybjtcblxuICAgIH1cbiAgICBjb25zdCB6b25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICB6b25lLnJ1bihhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByb3V0ZSA9IHRoaXMuZ2V0SXRlbU1vZGVSb3V0ZShpdGVtLCAnZGV0YWlsRm9ybVJvdXRlJyk7XG4gICAgICB0aGlzLmFkZEZvcm1MYXlvdXRNYW5hZ2VyUm91dGUocm91dGUpO1xuICAgICAgaWYgKHJvdXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcVBhcmFtcyA9IENvZGVzLmdldElzRGV0YWlsT2JqZWN0KCk7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlVG8gPSB0aGlzLnJlY3Vyc2l2ZURldGFpbCA/IHRoaXMuYWN0Um91dGUucGFyZW50IDogdGhpcy5hY3RSb3V0ZTtcblxuICAgICAgICBpZiAoIXRoaXMuZm9ybUxheW91dE1hbmFnZXI/LmlzU3BsaXRQYW5lTW9kZSgpKSB7XG4gICAgICAgICAgZm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuaXNOYXZpZ2F0aW5nID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0ZVRvRGV0YWlsKHJvdXRlLCBxUGFyYW1zLCByZWxhdGl2ZVRvKVxuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuICBwdWJsaWMgZWRpdERldGFpbChpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vRm9ybUxheW91dERpYWxvZykge1xuICAgICAgY29uc29sZS53YXJuKCdOYXZpZ2F0aW9uIGlzIG5vdCBhdmFpbGFibGUgeWV0IGluIGEgZm9ybSBsYXlvdXQgbWFuYWdlciB3aXRoIG1vZGU9XCJkaWFsb2dcIicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB6b25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICB6b25lLnJ1bihhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByb3V0ZSA9IHRoaXMuZ2V0SXRlbU1vZGVSb3V0ZShpdGVtLCAnZWRpdEZvcm1Sb3V0ZScpO1xuICAgICAgdGhpcy5hZGRGb3JtTGF5b3V0TWFuYWdlclJvdXRlKHJvdXRlKTtcbiAgICAgIGlmIChyb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHFQYXJhbXMgPSBDb2Rlcy5nZXRJc0RldGFpbE9iamVjdCgpO1xuICAgICAgICBjb25zdCByZWxhdGl2ZVRvID0gdGhpcy5yZWN1cnNpdmVFZGl0ID8gdGhpcy5hY3RSb3V0ZS5wYXJlbnQgOiB0aGlzLmFjdFJvdXRlO1xuXG4gICAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGVUb0RldGFpbChyb3V0ZSwgcVBhcmFtcywgcmVsYXRpdmVUbylcblxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZEZvcm1MYXlvdXRNYW5hZ2VyUm91dGUocm91dGVBcnI6IGFueVtdKTogYW55W10ge1xuICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyICYmIHJvdXRlQXJyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNvbXBSb3V0ZSA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIuZ2V0Um91dGVGb3JDb21wb25lbnQodGhpcyk7XG4gICAgICBpZiAoY29tcFJvdXRlICYmIGNvbXBSb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJvdXRlQXJyLnVuc2hpZnQoLi4uY29tcFJvdXRlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvdXRlQXJyO1xuICB9XG4gIHByb3RlY3RlZCBzZXRCdXR0b25QZXJtaXNzaW9ucyhhY3Rpb25zUGVybWlzc2lvbnMpOiB2b2lkIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoYWN0aW9uc1Blcm1pc3Npb25zKSkge1xuICAgICAgdGhpcy5zZXRQZXJtaXNzaW9uKCdpbnNlcnQnLCAnaW5zZXJ0QnV0dG9uJywgJ2VuYWJsZWRJbnNlcnRCdXR0b24nLCBhY3Rpb25zUGVybWlzc2lvbnMpO1xuICAgICAgdGhpcy5zZXRQZXJtaXNzaW9uKCdyZWZyZXNoJywgJ3JlZnJlc2hCdXR0b24nLCAnZW5hYmxlZFJlZnJlc2hCdXR0b24nLCBhY3Rpb25zUGVybWlzc2lvbnMpO1xuICAgICAgdGhpcy5zZXRQZXJtaXNzaW9uKCdkZWxldGUnLCAnZGVsZXRlQnV0dG9uJywgJ2VuYWJsZWREZWxldGVCdXR0b24nLCBhY3Rpb25zUGVybWlzc2lvbnMpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgc2V0UGVybWlzc2lvbihhdHRyOiBzdHJpbmcsIHZpc2libGVQcm9wOiBzdHJpbmcsIGVuYWJsZWRQcm9wOiBzdHJpbmcsIGFjdGlvbnNQZXJtaXNzaW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IHBlcm0gPSB0aGlzLmdldFBlcm1pc3Npb25CeUF0dHIoYXR0ciwgYWN0aW9uc1Blcm1pc3Npb25zKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocGVybSkpIHtcbiAgICAgIHRoaXNbdmlzaWJsZVByb3BdID0gcGVybS52aXNpYmxlO1xuICAgICAgdGhpc1tlbmFibGVkUHJvcF0gPSBwZXJtLmVuYWJsZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG1hbmFnZUN1c3RvbVBlcm1pc3Npb25zKGFjdGlvbnNQZXJtaXNzaW9ucywgc2VsZWN0b3IpOiB2b2lkIHtcbiAgICBjb25zdCBjdXN0b21QZXJtaXNzaW9ucyA9IGFjdGlvbnNQZXJtaXNzaW9ucy5maWx0ZXIocGVybSA9PiAhWydpbnNlcnQnLCAncmVmcmVzaCcsICdkZWxldGUnXS5pbmNsdWRlcyhwZXJtLmF0dHIpKTtcbiAgICBjdXN0b21QZXJtaXNzaW9ucy5mb3JFYWNoKHBlcm1pc3Npb24gPT4ge1xuICAgICAgdGhpcy5tYW5hZ2VQZXJtaXNzaW9uKHRoaXMuZWxSZWYsIHBlcm1pc3Npb24sIHRoaXMubXV0YXRpb25PYnNlcnZlcnMsIHNlbGVjdG9yKTtcbiAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0QWN0aW9uc1Blcm1pc3Npb25zKHBlcm1pc3Npb25zOiBhbnkpOiBPUGVybWlzc2lvbnNbXSB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHBlcm1pc3Npb25zKSA/IChwZXJtaXNzaW9ucy5hY3Rpb25zIHx8IFtdKSA6IFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBlcm1pc3Npb25CeUF0dHIoYXR0cjogc3RyaW5nLCBhY3Rpb25zUGVybWlzc2lvbnM6IE9QZXJtaXNzaW9uc1tdKTogT1Blcm1pc3Npb25zIHtcbiAgICByZXR1cm4gYWN0aW9uc1Blcm1pc3Npb25zLmZpbmQoKHBlcm06IE9QZXJtaXNzaW9ucykgPT4gcGVybS5hdHRyID09PSBhdHRyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYW5hZ2VQZXJtaXNzaW9uKGVsZW1lbnRSZWY6IGFueSwgcGVybWlzc2lvbjogT1Blcm1pc3Npb25zLCBtdXRhdGlvbk9ic2VydmVyczogYW55W10sIHNlbGVjdG9yOiBzdHJpbmcsIGF0dHI/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsZXQgZWxlbWVudEJ5QWN0aW9uO1xuICAgIGNvbnN0IGF0dHJBY3Rpb24gPSBVdGlsLmlzRGVmaW5lZChhdHRyKSA/IGF0dHIgOiBwZXJtaXNzaW9uLmF0dHI7XG4gICAgY29uc3QgYWxsRWxlbWVudHMgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cbiAgICBhbGxFbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhdHRyJykgPT09IGF0dHJBY3Rpb24pIHtcbiAgICAgICAgZWxlbWVudEJ5QWN0aW9uID0gZWxlbWVudDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChlbGVtZW50QnlBY3Rpb24pKSB7XG4gICAgICBpZiAoIXBlcm1pc3Npb24udmlzaWJsZSkge1xuICAgICAgICBlbGVtZW50QnlBY3Rpb24ucmVtb3ZlKCk7XG4gICAgICB9IGVsc2UgaWYgKCFwZXJtaXNzaW9uLmVuYWJsZWQpIHtcbiAgICAgICAgZWxlbWVudEJ5QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgbXV0YXRpb25PYnNlcnZlciA9IFBlcm1pc3Npb25zVXRpbHMucmVnaXN0ZXJEaXNhYmxlZENoYW5nZXNJbkRvbShlbGVtZW50QnlBY3Rpb24pO1xuICAgICAgICBtdXRhdGlvbk9ic2VydmVycy5wdXNoKG11dGF0aW9uT2JzZXJ2ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRFbmNvZGVkUGFyZW50S2V5cygpOiBzdHJpbmcge1xuICAgIGxldCBlbmNvZGVkOiBzdHJpbmc7XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX3BLZXlzRXF1aXYpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBLZXlzID0gdGhpcy5nZXRQYXJlbnRLZXlzVmFsdWVzKCk7XG4gICAgICBpZiAoT2JqZWN0LmtleXMocEtleXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZW5jb2RlZCA9IFV0aWwuZW5jb2RlUGFyZW50S2V5cyhwS2V5cyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbmNvZGVkO1xuICB9XG5cbiAgcHVibGljIGdldEluc2VydFJvdXRlKCk6IGFueVtdIHtcbiAgICBjb25zdCByb3V0ZSA9IFtdO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLmRldGFpbEZvcm1Sb3V0ZSkpIHtcbiAgICAgIHJvdXRlLnB1c2godGhpcy5kZXRhaWxGb3JtUm91dGUpO1xuICAgIH1cbiAgICBjb25zdCBpbnNlcnRSb3V0ZSA9IFV0aWwuaXNEZWZpbmVkKHRoaXMuaW5zZXJ0Rm9ybVJvdXRlKSA/IHRoaXMuaW5zZXJ0Rm9ybVJvdXRlIDogQ29kZXMuREVGQVVMVF9JTlNFUlRfUk9VVEU7XG4gICAgcm91dGUucHVzaChpbnNlcnRSb3V0ZSk7XG4gICAgLy8gYWRkaW5nIHBhcmVudC1rZXlzIGluZm8uLi5cbiAgICBjb25zdCBlbmNvZGVkUGFyZW50S2V5cyA9IHRoaXMuZ2V0RW5jb2RlZFBhcmVudEtleXMoKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoZW5jb2RlZFBhcmVudEtleXMpKSB7XG4gICAgICBjb25zdCByb3V0ZU9iaiA9IHt9O1xuICAgICAgcm91dGVPYmpbQ29kZXMuUEFSRU5UX0tFWVNfS0VZXSA9IGVuY29kZWRQYXJlbnRLZXlzO1xuICAgICAgcm91dGUucHVzaChyb3V0ZU9iaik7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnN0b3JlTmF2aWdhdGlvbkZvcm1Sb3V0ZXMoJ2luc2VydEZvcm1Sb3V0ZScpO1xuICAgIH1cbiAgICByZXR1cm4gcm91dGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0SXRlbU1vZGVSb3V0ZShpdGVtOiBhbnksIG1vZGVSb3V0ZTogc3RyaW5nKTogYW55W10ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0Um91dGVPZlNlbGVjdGVkUm93KGl0ZW0pO1xuICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuZGV0YWlsRm9ybVJvdXRlKSkge1xuICAgICAgICByZXN1bHQudW5zaGlmdCh0aGlzLmRldGFpbEZvcm1Sb3V0ZSk7XG4gICAgICB9XG4gICAgICBpZiAobW9kZVJvdXRlID09PSAnZWRpdEZvcm1Sb3V0ZScpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5lZGl0Rm9ybVJvdXRlIHx8IENvZGVzLkRFRkFVTFRfRURJVF9ST1VURSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCAmJiAhdGhpcy5vRm9ybUxheW91dERpYWxvZykge1xuICAgICAgdGhpcy5zdG9yZU5hdmlnYXRpb25Gb3JtUm91dGVzKG1vZGVSb3V0ZSwgdGhpcy5nZXRRdWVyeUNvbmZpZ3VyYXRpb24oKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UXVlcnlDb25maWd1cmF0aW9uKCk6IGFueSB7XG4gICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgIGtleXNWYWx1ZXM6IHRoaXMuZ2V0S2V5c1ZhbHVlcygpXG4gICAgfTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIHNlcnZpY2VUeXBlOiB0aGlzLnNlcnZpY2VUeXBlLFxuICAgICAgICBxdWVyeUFyZ3VtZW50czogdGhpcy5xdWVyeUFyZ3VtZW50cyxcbiAgICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSxcbiAgICAgICAgc2VydmljZTogdGhpcy5zZXJ2aWNlLFxuICAgICAgICBxdWVyeU1ldGhvZDogdGhpcy5wYWdlYWJsZSA/IHRoaXMucGFnaW5hdGVkUXVlcnlNZXRob2QgOiB0aGlzLnF1ZXJ5TWV0aG9kLFxuICAgICAgICB0b3RhbFJlY29yZHNOdW1iZXI6IHRoaXMuZ2V0VG90YWxSZWNvcmRzTnVtYmVyKCksXG4gICAgICAgIHF1ZXJ5Um93czogdGhpcy5xdWVyeVJvd3MsXG4gICAgICAgIHF1ZXJ5UmVjb3JkT2Zmc2V0OiBNYXRoLm1heCh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MsIHRoaXMuc3RhdGUucXVlcnlSZWNvcmRPZmZzZXQgLSB0aGlzLnF1ZXJ5Um93cylcbiAgICAgIH0sIHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0Um91dGVPZlNlbGVjdGVkUm93KGl0ZW06IGFueSk6IGFueVtdIHtcbiAgICBjb25zdCByb3V0ZSA9IFtdO1xuICAgIGlmIChVdGlsLmlzT2JqZWN0KGl0ZW0pKSB7XG4gICAgICB0aGlzLmtleXNBcnJheS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChpdGVtW2tleV0pKSB7XG4gICAgICAgICAgcm91dGUucHVzaChpdGVtW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdXRlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlbGV0ZUxvY2FsSXRlbXMoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtcygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRJdGVtcy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0ZWRJdGVtc1tpXTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbUt2ID0ge307XG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMua2V5c0FycmF5Lmxlbmd0aDsgKytrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMua2V5c0FycmF5W2tdO1xuICAgICAgICBzZWxlY3RlZEl0ZW1LdltrZXldID0gc2VsZWN0ZWRJdGVtW2tleV07XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBqID0gdGhpcy5kYXRhQXJyYXkubGVuZ3RoIC0gMTsgaiA+PSAwOyAtLWopIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZGF0YUFycmF5W2pdO1xuICAgICAgICBjb25zdCBpdGVtS3YgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLmtleXNBcnJheS5sZW5ndGg7ICsraykge1xuICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMua2V5c0FycmF5W2tdO1xuICAgICAgICAgIGl0ZW1LdltrZXldID0gaXRlbVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGsgaW4gc2VsZWN0ZWRJdGVtS3YpIHtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtS3YuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gaXRlbUt2Lmhhc093blByb3BlcnR5KGspICYmIChzZWxlY3RlZEl0ZW1LdltrXSA9PT0gaXRlbUt2W2tdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgdGhpcy5kYXRhQXJyYXkuc3BsaWNlKGosIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyByZWluaXRpYWxpemUob3B0aW9uczogT0xpc3RJbml0aWFsaXphdGlvbk9wdGlvbnMgfCBPVGFibGVJbml0aWFsaXphdGlvbk9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucyAmJiBPYmplY3Qua2V5cyhvcHRpb25zKS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNsb25lZE9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdlbnRpdHknKSkge1xuICAgICAgICB0aGlzLmVudGl0eSA9IGNsb25lZE9wdHMuZW50aXR5O1xuICAgICAgICBpZiAodGhpcy5vYXR0ckZyb21FbnRpdHkpIHtcbiAgICAgICAgICB0aGlzLm9hdHRyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBjbG9uZWRPcHRzLmVudGl0eTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBjbG9uZWRPcHRzKSB7XG4gICAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgICAgdGhpc1twcm9wXSA9IGNsb25lZE9wdHNbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGBvLWZpbHRlci1idWlsZGVyYCBjb21wb25lbnQgdGhhdCB0aGlzIGNvbXBvbmVudCB3aWxsIHVzZSB0byBmaWx0ZXIgaXRzIGRhdGEuXG4gICAqIEBwYXJhbSBmaWx0ZXJCdWlsZGVyIHRoZSBgby1maWx0ZXItYnVpbGRlcmAgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIHNldEZpbHRlckJ1aWxkZXIoZmlsdGVyQnVpbGRlcjogT0ZpbHRlckJ1aWxkZXJDb21wb25lbnQpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckJ1aWxkZXIgPSBmaWx0ZXJCdWlsZGVyO1xuICB9XG5cbiAgcHVibGljIGdldENvbXBvbmVudEZpbHRlcihleGlzdGluZ0ZpbHRlcjogYW55ID0ge30pOiBhbnkge1xuICAgIGNvbnN0IGZpbHRlciA9IHN1cGVyLmdldENvbXBvbmVudEZpbHRlcihleGlzdGluZ0ZpbHRlcik7XG5cbiAgICBjb25zdCBxdWlja0ZpbHRlckV4cHIgPSB0aGlzLmdldFF1aWNrRmlsdGVyRXhwcmVzc2lvbigpO1xuICAgIGNvbnN0IGZpbHRlckJ1aWxkZXJFeHByID0gdGhpcy5nZXRGaWx0ZXJCdWlsZGVyRXhwcmVzc2lvbigpO1xuICAgIGxldCBjb21wbGV4RXhwciA9IHF1aWNrRmlsdGVyRXhwciB8fCBmaWx0ZXJCdWlsZGVyRXhwcjtcbiAgICBpZiAocXVpY2tGaWx0ZXJFeHByICYmIGZpbHRlckJ1aWxkZXJFeHByKSB7XG4gICAgICBjb21wbGV4RXhwciA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZENvbXBsZXhFeHByZXNzaW9uKHF1aWNrRmlsdGVyRXhwciwgZmlsdGVyQnVpbGRlckV4cHIsIEZpbHRlckV4cHJlc3Npb25VdGlscy5PUF9BTkQpO1xuICAgIH1cblxuICAgIGlmIChjb21wbGV4RXhwciAmJiAhVXRpbC5pc0RlZmluZWQoZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5CQVNJQ19FWFBSRVNTSU9OX0tFWV0pKSB7XG4gICAgICBmaWx0ZXJbRmlsdGVyRXhwcmVzc2lvblV0aWxzLkJBU0lDX0VYUFJFU1NJT05fS0VZXSA9IGNvbXBsZXhFeHByO1xuICAgIH0gZWxzZSBpZiAoY29tcGxleEV4cHIpIHtcbiAgICAgIGZpbHRlcltGaWx0ZXJFeHByZXNzaW9uVXRpbHMuQkFTSUNfRVhQUkVTU0lPTl9LRVldID1cbiAgICAgICAgRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkQ29tcGxleEV4cHJlc3Npb24oZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5CQVNJQ19FWFBSRVNTSU9OX0tFWV0sIGNvbXBsZXhFeHByLCBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuT1BfQU5EKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFF1aWNrRmlsdGVyRXhwcmVzc2lvbigpOiBFeHByZXNzaW9uIHtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuIHRoaXMucXVpY2tGaWx0ZXJDb21wb25lbnQuZmlsdGVyRXhwcmVzc2lvbjtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRGaWx0ZXJCdWlsZGVyRXhwcmVzc2lvbigpOiBFeHByZXNzaW9uIHtcbiAgICAvLyBBZGQgZmlsdGVyIGZyb20gby1maWx0ZXItYnVpbGRlciBjb21wb25lbnRcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5maWx0ZXJCdWlsZGVyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyQnVpbGRlci5nZXRFeHByZXNzaW9uKCk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RvcmVOYXZpZ2F0aW9uRm9ybVJvdXRlcyhhY3RpdmVNb2RlOiBzdHJpbmcsIHF1ZXJ5Q29uZj86IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IG1haW5Gb3JtTGF5b3V0Q29tcCA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIgPyBVdGlsLmlzRGVmaW5lZCh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmlzTWFpbkNvbXBvbmVudCh0aGlzKSkgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5zdG9yZUZvcm1Sb3V0ZXMoe1xuICAgICAgbWFpbkZvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50OiBtYWluRm9ybUxheW91dENvbXAsXG4gICAgICBpc01haW5OYXZpZ2F0aW9uQ29tcG9uZW50OiB0cnVlLFxuICAgICAgZGV0YWlsRm9ybVJvdXRlOiB0aGlzLmRldGFpbEZvcm1Sb3V0ZSxcbiAgICAgIGVkaXRGb3JtUm91dGU6IHRoaXMuZWRpdEZvcm1Sb3V0ZSxcbiAgICAgIGluc2VydEZvcm1Sb3V0ZTogVXRpbC5pc0RlZmluZWQodGhpcy5pbnNlcnRGb3JtUm91dGUpID8gdGhpcy5pbnNlcnRGb3JtUm91dGUgOiBDb2Rlcy5ERUZBVUxUX0lOU0VSVF9ST1VURVxuICAgIH0sIGFjdGl2ZU1vZGUsIHF1ZXJ5Q29uZik7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2F2ZURhdGFOYXZpZ2F0aW9uSW5Mb2NhbFN0b3JhZ2UoKTogdm9pZCB7XG4gICAgLy8gU2F2ZSBkYXRhIG9mIHRoZSBsaXN0IGluIG5hdmlnYXRpb24tZGF0YSBpbiB0aGUgbG9jYWxzdG9yYWdlXG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0S2V5c1ZhbHVlcygpOiBhbnlbXSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YUFycmF5O1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHJldHVybiBkYXRhLm1hcCgocm93KSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIHNlbGYua2V5c0FycmF5LmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAocm93W2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9ialtrZXldID0gcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFJvdXRlS2V5KCk6IHN0cmluZyB7XG4gICAgbGV0IHJvdXRlID0gJyc7XG4gICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIgJiYgIXRoaXMuZm9ybUxheW91dE1hbmFnZXIuaXNNYWluQ29tcG9uZW50KHRoaXMpKSB7XG4gICAgICByb3V0ZSA9IHRoaXMucm91dGVyLnVybDtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIuZ2V0UGFyYW1zKCk7XG4gICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgIHJvdXRlICs9ICcvJyArIChPYmplY3Qua2V5cyhwYXJhbXMpLmpvaW4oJy8nKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvdXRlID0gc3VwZXIuZ2V0Um91dGVLZXkoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdXRlO1xuICB9XG5cbiAgZ2V0IGVsZW1lbnRSZWYoKTogRWxlbWVudFJlZiB7XG4gICAgcmV0dXJuIHRoaXMuZWxSZWY7XG4gIH1cblxuICBwdWJsaWMgc2hvd0Nhc2VTZW5zaXRpdmVDaGVja2JveCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMucGFnZWFibGU7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJRdWlja0ZpbHRlcihhcmc6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHF1aWNrRmlsdGVyID0gKGFyZyBhcyBPU2VhcmNoSW5wdXRDb21wb25lbnQpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50KSkge1xuICAgICAgLy8gYXZvaWRpbmcgdG8gcmVnaXN0ZXIgYSBxdWlja2ZpbHRlcmNvbXBvbmVudCBpZiBpdCBhbHJlYWR5IGV4aXN0cyBvbmVcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCA9IHF1aWNrRmlsdGVyO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50KSkge1xuICAgICAgdGhpcy5xdWlja0ZpbHRlclN1YnNjcmlwdGlvbiA9IHRoaXMucXVpY2tGaWx0ZXJDb21wb25lbnQub25TZWFyY2guc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICAgIHRoaXMub25TZWFyY2guZW1pdCh2YWwpO1xuICAgICAgICB0aGlzLmZpbHRlckRhdGEodmFsKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUpKSB7XG4gICAgICAgIGlmICgodGhpcy5zdGF0ZS5xdWlja0ZpbHRlclZhbHVlIHx8ICcnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudC5zZXRWYWx1ZSh0aGlzLnN0YXRlLnF1aWNrRmlsdGVyVmFsdWUsIHtcbiAgICAgICAgICAgIGVtaXRFdmVudDogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzRmlsdGVyQ2FzZVNlbnNpdGl2ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCB1c2VRdWlja0ZpbHRlclZhbHVlID0gVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCkgJiYgdGhpcy5zaG93Q2FzZVNlbnNpdGl2ZUNoZWNrYm94KCk7XG4gICAgaWYgKHVzZVF1aWNrRmlsdGVyVmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50LmZpbHRlckNhc2VTZW5zaXRpdmU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbHRlckNhc2VTZW5zaXRpdmU7XG4gIH1cblxuICBwdWJsaWMgY29uZmlndXJlRmlsdGVyVmFsdWUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHJldHVyblZhbCA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoJyonKSkge1xuICAgICAgICByZXR1cm5WYWwgPSAnKicgKyByZXR1cm5WYWw7XG4gICAgICB9XG4gICAgICBpZiAoIXZhbHVlLmVuZHNXaXRoKCcqJykpIHtcbiAgICAgICAgcmV0dXJuVmFsID0gcmV0dXJuVmFsICsgJyonO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuVmFsO1xuICB9XG5cbiAgcHVibGljIGdldFF1aWNrRmlsdGVyVmFsdWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCByZXN1bHQgPSAnJztcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50LmdldFZhbHVlKCkgfHwgJyc7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0UXVpY2tGaWx0ZXJDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5xdWlja0ZpbHRlckNvbEFycmF5O1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50KSkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudC5nZXRBY3RpdmVDb2x1bW5zKCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBkYXRhIGxvY2FsbHlcbiAgICogQHBhcmFtIHZhbHVlIHRoZSBmaWx0ZXJpbmcgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBmaWx0ZXJEYXRhKHZhbHVlPzogc3RyaW5nLCBsb2FkTW9yZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB2YWx1ZSA9IFV0aWwuaXNEZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCkgPyB0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50LmdldFZhbHVlKCkgOiB2b2lkIDA7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUpICYmIFV0aWwuaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5zdGF0ZS5xdWlja0ZpbHRlclZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBjb25zdCBxdWVyeUFyZ3M6IE9RdWVyeURhdGFBcmdzID0ge1xuICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgIGxlbmd0aDogdGhpcy5xdWVyeVJvd3MsXG4gICAgICAgIHJlcGxhY2U6IHRydWVcbiAgICAgIH07XG4gICAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFSZXNwb25zZUFycmF5ICYmIHRoaXMuZGF0YVJlc3BvbnNlQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGZpbHRlcmVkRGF0YSA9IHRoaXMuZGF0YVJlc3BvbnNlQXJyYXkuc2xpY2UoMCk7XG4gICAgICBmaWx0ZXJlZERhdGEgPSB0aGlzLmdldFF1aWNrRmlsdGVyRGF0YUZyb21BcnJheSh2YWx1ZSwgZmlsdGVyZWREYXRhKTtcbiAgICAgIGZpbHRlcmVkRGF0YSA9IHRoaXMuZ2V0U29ydGVkRGF0YUZyb21BcnJheShmaWx0ZXJlZERhdGEpO1xuICAgICAgZmlsdGVyZWREYXRhID0gdGhpcy5nZXRQYWdpbmF0aW9uRGF0YUZyb21BcnJheShmaWx0ZXJlZERhdGEpO1xuICAgICAgdGhpcy5zZXREYXRhQXJyYXkoZmlsdGVyZWREYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXREYXRhQXJyYXkodGhpcy5kYXRhUmVzcG9uc2VBcnJheSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldFF1aWNrRmlsdGVyRGF0YUZyb21BcnJheShxdWlja2ZpbHRlcjogc3RyaW5nLCBkYXRhQXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIGxldCByZXN1bHQgPSBkYXRhQXJyYXk7XG4gICAgaWYgKHF1aWNrZmlsdGVyICYmIHF1aWNrZmlsdGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNhc2VTZW5zaXRpdmUgPSB0aGlzLmlzRmlsdGVyQ2FzZVNlbnNpdGl2ZSgpO1xuICAgICAgY29uc3QgcXVpY2tGaWx0ZXJDb2x1bW5zID0gdGhpcy5nZXRRdWlja0ZpbHRlckNvbHVtbnMoKTtcbiAgICAgIGNvbnN0IHJlZ0V4cFN0ciA9IG5ldyBSZWdFeHAoVXRpbC5lc2NhcGVTcGVjaWFsQ2hhcmFjdGVyKFV0aWwubm9ybWFsaXplU3RyaW5nKHF1aWNrZmlsdGVyLCAhY2FzZVNlbnNpdGl2ZSkpKTtcbiAgICAgIHJlc3VsdCA9IGRhdGFBcnJheS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIHJldHVybiBxdWlja0ZpbHRlckNvbHVtbnMuc29tZShjb2wgPT4gcmVnRXhwU3RyLnRlc3QoVXRpbC5ub3JtYWxpemVTdHJpbmcoaXRlbVtjb2xdICsgJycsICFjYXNlU2Vuc2l0aXZlKSkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U29ydGVkRGF0YUZyb21BcnJheShkYXRhQXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBkYXRhQXJyYXk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RGF0YShkYXRhOiBhbnksIHNxbFR5cGVzPzogYW55LCByZXBsYWNlPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghVXRpbC5pc0FycmF5KGRhdGEpKSB7XG4gICAgICB0aGlzLnNldERhdGFBcnJheShbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YVJlc3BvbnNlQXJyYXkgPSB0aGlzLnBhcnNlUmVzcG9uc2VBcnJheShkYXRhLCByZXBsYWNlKTtcbiAgICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICAgIHRoaXMuc2V0RGF0YUFycmF5KHRoaXMuZGF0YVJlc3BvbnNlQXJyYXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWx0ZXJEYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLm9uUGFnaW5hdGVkRGF0YUxvYWRlZCwgZGF0YSk7XG4gICAgfVxuICAgIE9ic2VydmFibGVXcmFwcGVyLmNhbGxFbWl0KHRoaXMub25EYXRhTG9hZGVkLCB0aGlzLmRhdGFSZXNwb25zZUFycmF5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVJlc3BvbnNlQXJyYXkoZGF0YTogYW55W10sIHJlcGxhY2U/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJGb3JtTGF5b3V0TWFuYWdlclN0YXRlKCkge1xuICAgIGlmICh0aGlzLnN0b3JlU3RhdGUgJiYgdGhpcy5mb3JtTGF5b3V0TWFuYWdlciAmJiB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmlzVGFiTW9kZSgpICYmIHRoaXMuZm9ybUxheW91dE1hbmFnZXIub1RhYkdyb3VwKSB7XG4gICAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHRoaXMuZm9ybUxheW91dE1hbmFnZXJUYWJJbmRleCkpIHtcbiAgICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlclRhYkluZGV4ID0gdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5vVGFiR3JvdXAuZGF0YS5sZW5ndGg7XG4gICAgICB9XG4gICAgICBjb25zdCB1cGRhdGVDb21wb25lbnRTdGF0ZVN1YmplY3QgPSAodGhpcy5mb3JtTGF5b3V0TWFuYWdlci5vVGFiR3JvdXAgYXMgT0Zvcm1MYXlvdXRUYWJHcm91cENvbXBvbmVudCkudXBkYXRlVGFiQ29tcG9uZW50c1N0YXRlO1xuXG4gICAgICB0aGlzLnRhYnNTdWJzY3JpcHRpb25zID0gdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5vblNlbGVjdGVkVGFiQ2hhbmdlLnN1YnNjcmliZSgoYXJnKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyVGFiSW5kZXggPT09IGFyZy5wcmV2aW91c0luZGV4KSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZVN0b3JhZ2UoKTtcbiAgICAgICAgICAvLyBzZXR0aW5nIGFscmVhZHlTdG9yZWQgdG8gZmFsc2UgdG8gZm9yY2UgdHJpZ2dlcmluZyBhIG5ldyBzdG9yYWdlIHVwZGF0ZSBhZnRlciB0aGlzXG4gICAgICAgICAgdGhpcy5hbHJlYWR5U3RvcmVkID0gZmFsc2U7XG4gICAgICAgICAgaWYgKGFyZy5pbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgdXBkYXRlQ29tcG9uZW50U3RhdGVTdWJqZWN0Lm5leHQoYXJnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgoYXJnLnByZXZpb3VzSW5kZXggPT09IHZvaWQgMCkgfHwgYXJnLnByZXZpb3VzSW5kZXggPT09IDApICYmIHRoaXMuZm9ybUxheW91dE1hbmFnZXIubmF2aWdhdGlvblNlcnZpY2UuaXNOYXZpZ2F0aW5nKSB7XG4gICAgICAgICAgLyogaW4gdGhlIGZvcm0tbGF5b3V0IG1vZGU9dGFiLCB0aGUgb25seSB3YXkgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiByZW5kZXJlZCBpc1xuICAgICAgICAgICB3aGVuIG5hdmlnYXRpb25TZXJ2aWNlLmlzTmF2aWdhdGluZyBhbmQgY29tZXMgcHJldmlvdXNJbmRleD0wICAqL1xuICAgICAgICAgIGFyZy5kYXRhLnJlbmRlcmVyU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tWaWV3UG9ydFN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnRhYnNTdWJzY3JpcHRpb25zLmFkZCh1cGRhdGVDb21wb25lbnRTdGF0ZVN1YmplY3Quc3Vic2NyaWJlKChhcmcpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXJUYWJJbmRleCA9PT0gYXJnLmluZGV4KSB7XG4gICAgICAgICAgdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzKTtcbiAgICAgICAgICB0aGlzLmFwcGx5RGVmYXVsdENvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuXG4gICAgICB0aGlzLnRhYnNTdWJzY3JpcHRpb25zLmFkZCh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLm9uQ2xvc2VUYWIuc3Vic2NyaWJlKChhcmcpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXJUYWJJbmRleCA9PT0gYXJnLmluZGV4KSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZVN0b3JhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5RGVmYXVsdENvbmZpZ3VyYXRpb24oKSB7XG5cbiAgfVxuXG4gIHB1YmxpYyBvbkNoYW5nZVBhZ2UoZTogUGFnZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU2VydmljZT8uc2V0UGFnaW5hdGlvbkNvbnRleHQoeyBwYWdlTnVtYmVyOiBlLnBhZ2VJbmRleCwgcGFnZVNpemU6IGUucGFnZVNpemUgfSk7XG5cbiAgICBpZiAoIXRoaXMucGFnZWFibGUpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBlLnBhZ2VJbmRleDtcbiAgICAgIHRoaXMucXVlcnlSb3dzID0gZS5wYWdlU2l6ZTtcbiAgICAgIHRoaXMuZmlsdGVyRGF0YSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBnb2luZ0JhY2sgPSBlLnBhZ2VJbmRleCA8IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IGUucGFnZUluZGV4O1xuICAgIGNvbnN0IHBhZ2VTaXplID0gZS5wYWdlU2l6ZTtcblxuICAgIGNvbnN0IG9sZFF1ZXJ5Um93cyA9IHRoaXMucXVlcnlSb3dzO1xuICAgIGNvbnN0IGNoYW5naW5nUGFnZVNpemUgPSAob2xkUXVlcnlSb3dzICE9PSBwYWdlU2l6ZSk7XG4gICAgdGhpcy5xdWVyeVJvd3MgPSBwYWdlU2l6ZTtcblxuICAgIGxldCBuZXdTdGFydFJlY29yZDtcbiAgICBsZXQgcXVlcnlMZW5ndGg7XG5cbiAgICBpZiAoZ29pbmdCYWNrIHx8IGNoYW5naW5nUGFnZVNpemUpIHtcbiAgICAgIG5ld1N0YXJ0UmVjb3JkID0gKHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnF1ZXJ5Um93cyk7XG4gICAgICBxdWVyeUxlbmd0aCA9IHRoaXMucXVlcnlSb3dzO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTdGFydFJlY29yZCA9IE1hdGgubWF4KHRoaXMuc3RhdGUucXVlcnlSZWNvcmRPZmZzZXQsICh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MpKTtcbiAgICAgIGNvbnN0IG5ld0VuZFJlY29yZCA9IE1hdGgubWluKG5ld1N0YXJ0UmVjb3JkICsgdGhpcy5xdWVyeVJvd3MsIHRoaXMuc3RhdGUudG90YWxRdWVyeVJlY29yZHNOdW1iZXIpO1xuICAgICAgcXVlcnlMZW5ndGggPSB0aGlzLmRpc2FibGVQYWdlU2l6ZUNhbGN1bGF0aW9uID8gdGhpcy5xdWVyeVJvd3MgOiBNYXRoLm1pbih0aGlzLnF1ZXJ5Um93cywgbmV3RW5kUmVjb3JkIC0gbmV3U3RhcnRSZWNvcmQpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5QXJnczogT1F1ZXJ5RGF0YUFyZ3MgPSB7XG4gICAgICBvZmZzZXQ6IG5ld1N0YXJ0UmVjb3JkLFxuICAgICAgbGVuZ3RoOiBxdWVyeUxlbmd0aCxcbiAgICAgIHJlcGxhY2U6IHRydWVcbiAgICB9O1xuXG4gICAgdGhpcy5xdWVyeURhdGEodm9pZCAwLCBxdWVyeUFyZ3MpO1xuICB9XG5cbiAgc2V0IGN1cnJlbnRQYWdlKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5fY3VycmVudFBhZ2UgPSB2YWw7XG4gIH1cblxuICBnZXQgY3VycmVudFBhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFBhZ2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2N1cnJlbnRQYWdlOiBudW1iZXIgPSAwO1xuXG5cbiAgZ2V0IHRvdGFsUmVjb3JkcygpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUb3RhbFJlY29yZHNOdW1iZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGF0YVJlc3BvbnNlQXJyYXkubGVuZ3RoO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBhZ2luYXRpb25EYXRhRnJvbUFycmF5KGRhdGFBcnJheTogYW55W10pOiBhbnlbXSB7XG4gICAgbGV0IHJlc3VsdCA9IGRhdGFBcnJheTtcbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uQ29udHJvbHMpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5zcGxpY2UodGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucXVlcnlSb3dzLCB0aGlzLnF1ZXJ5Um93cyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBoYW5kbGVJdGVtQ2xpY2soaXRlbTogSXRlbUNsaWNrKTogdm9pZCB7XG4gICAgdGhpcy5jbGlja1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2xpY2tQcmV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXRlbUNsaWNrRG9uZShpdGVtKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2xpY2tQcmV2ZW50ID0gZmFsc2U7XG4gICAgfSwgdGhpcy5jbGlja0RlbGF5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpdGVtQ2xpY2tEb25lKGl0ZW06IEl0ZW1DbGljayk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gaXRlbS5nZXRJdGVtRGF0YSgpO1xuICAgIGlmICh0aGlzLmRldGFpbE1vZGUgPT09IENvZGVzLkRFVEFJTF9NT0RFX0NMSUNLKSB7XG4gICAgICB0aGlzLnNhdmVEYXRhTmF2aWdhdGlvbkluTG9jYWxTdG9yYWdlKCk7XG4gICAgICB0aGlzLnZpZXdEZXRhaWwoZGF0YSk7XG4gICAgfVxuICAgIHRoaXMub25DbGljay5lbWl0KGRhdGEpO1xuICB9XG5cbiAgaGFuZGxlSXRlbURibENsaWNrKGl0ZW06IEl0ZW1DbGljayk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmNsaWNrVGltZXIpO1xuICAgIHRoaXMuY2xpY2tQcmV2ZW50ID0gdHJ1ZTtcbiAgICB0aGlzLml0ZW1EYmxDbGlja0RvbmUoaXRlbSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXRlbURibENsaWNrRG9uZShpdGVtOiBJdGVtQ2xpY2spOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub2VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IGl0ZW0uZ2V0SXRlbURhdGEoKTtcbiAgICBpZiAoQ29kZXMuaXNEb3VibGVDbGlja01vZGUodGhpcy5kZXRhaWxNb2RlKSkge1xuICAgICAgdGhpcy5zYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpO1xuICAgICAgdGhpcy52aWV3RGV0YWlsKGRhdGEpO1xuICAgIH1cbiAgICB0aGlzLm9uRG91YmxlQ2xpY2suZW1pdChkYXRhKTtcbiAgfVxuXG4gIGdldCBxdWlja0ZpbHRlckFwcGVhcmFuY2UoKTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1aWNrRmlsdGVyQXBwZWFyYW5jZTtcbiAgfVxuXG4gIHNldCBxdWlja0ZpbHRlckFwcGVhcmFuY2UodmFsdWU6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBbJ2ZpbGwnLCAnb3V0bGluZSddO1xuICAgIGlmICh2YWx1ZXMuaW5kZXhPZih2YWx1ZSkgPT09IC0xKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1RoZSBxdWljay1maWx0ZXItYXBwZWFyYW5jZSBhdHRyaWJ1dGUgaXMgdW5kZWZpbmVkIHNvIHRoZSBvdXRsaW5lIHZhbHVlIHdpbGwgYmUgdXNlZCcpO1xuICAgICAgdmFsdWUgPSAnb3V0bGluZSc7XG4gICAgfVxuICAgIHRoaXMuX3F1aWNrRmlsdGVyQXBwZWFyYW5jZSA9IHZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNxbFR5cGVzT2ZLZXlzKCkge1xuICAgIGNvbnN0IHNxbFR5cGVzID0gdGhpcy5nZXRTcWxUeXBlcygpO1xuICAgIGNvbnN0IHNxbFR5cGVzQXJnID0ge307XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHNxbFR5cGVzKSkge1xuICAgICAgdGhpcy5rZXlzQXJyYXkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBzcWxUeXBlc0FyZ1trZXldID0gc3FsVHlwZXNba2V5XTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gc3FsVHlwZXNBcmc7XG5cbiAgfVxuXG4gIGNvbXBhcmVSb3coKTogKChvMTogYW55LCBvMjogYW55KSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChvMTogYW55LCBvMjogYW55KSA9PiB0aGlzLmtleXNBcnJheS5ldmVyeShrZXkgPT4gbzFba2V5XSA9PT0gbzJba2V5XSk7XG4gIH1cbn1cblxuLypUaGlzIGNsYXNzIGlzIGRlZmluaWVkIHRvIG1hbnRhaW4gYmFjd2FyZHMgY29tcGF0aWJpbGl0eSAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgT1NlcnZpY2VDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdE9TZXJ2aWNlQ29tcG9uZW50PERlZmF1bHRTZXJ2aWNlQ29tcG9uZW50U3RhdGVTZXJ2aWNlPiB7XG5cbn1cbiJdfQ==
881
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1zZXJ2aWNlLWNvbXBvbmVudC5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL28tc2VydmljZS1jb21wb25lbnQuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdHLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsZUFBZSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUdqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUVyRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUdqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUc5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFJaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLHFCQUFxQixFQUFF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O29FQUNXO0FBR25DO0lBQUMscUJBQXFCLEVBQUU7O2dFQUNpQjtBQUN6QztJQUFDLHFCQUFxQixFQUFFOztrRUFDUztBQUVqQztJQUFDLHFCQUFxQixFQUFFOzsrREFDRjtBQUN0QjtJQUFDLHFCQUFxQixFQUFFOztxRUFDVztBQUNuQztJQUFDLHFCQUFxQixFQUFFOzs2RUFDb0I7QUErQjVDO0lBQUMscUJBQXFCLEVBQUU7O2tFQUNtQjsyRkE1RXZCLHlCQUF5QjtrQkFKOUMsU0FBUzttQkFBQztvQkFDVCxNQUFNLEVBQUUsa0NBQWtDO29CQUMxQyxPQUFPLEVBQUUsbUNBQW1DO2lCQUM3QztxSkFJMEIsWUFBWTtzQkFBcEMsU0FBUzt1QkFBQyxZQUFZO2dCQWtCYixRQUFRLE1BRVIsUUFBUSxNQUVSLFFBQVEsTUFJUixlQUFlLE1BRXpCLGlCQUFpQixNQUlQLGFBQWEsTUFFdkIsZUFBZSxNQUdmLFlBQVksTUFFWixrQkFBa0IsTUFFbEIsMEJBQTBCLE1BZ0NoQixlQUFlLE1BcURsQixvQkFBb0I7c0JBRDFCLFNBQVM7dUJBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQzs7QUF5eEJ0RCxNQUFNLE9BQU8saUJBQWtCLFNBQVEseUJBQThEOzs4R0FBeEYsaUJBQWlCO2tHQUFqQixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFEN0IsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbmplY3RvciwgTmdab25lLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciwgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE9GaWx0ZXJCdWlsZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9maWx0ZXItYnVpbGRlci9vLWZpbHRlci1idWlsZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPU2VhcmNoSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2lucHV0L3NlYXJjaC1pbnB1dC9vLXNlYXJjaC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm9vbGVhbkNvbnZlcnRlciwgQm9vbGVhbklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgSVNlcnZpY2VEYXRhQ29tcG9uZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZXJ2aWNlLWRhdGEtY29tcG9uZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBPRm9ybUxheW91dERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2xheW91dHMvZm9ybS1sYXlvdXQvZGlhbG9nL28tZm9ybS1sYXlvdXQtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQgfSBmcm9tICcuLi9sYXlvdXRzL2Zvcm0tbGF5b3V0L28tZm9ybS1sYXlvdXQtbWFuYWdlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRUYWJHcm91cENvbXBvbmVudCB9IGZyb20gJy4uL2xheW91dHMvZm9ybS1sYXlvdXQvdGFiZ3JvdXAvby1mb3JtLWxheW91dC10YWJncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGVybWlzc2lvbnMvcGVybWlzc2lvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBBYnN0cmFjdFNlcnZpY2VDb21wb25lbnRTdGF0ZUNsYXNzIH0gZnJvbSAnLi4vc2VydmljZXMvc3RhdGUvby1jb21wb25lbnQtc3RhdGUuY2xhc3MnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21wb25lbnRTdGF0ZVNlcnZpY2UsIERlZmF1bHRTZXJ2aWNlQ29tcG9uZW50U3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RhdGUvby1jb21wb25lbnQtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBPVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS9vLXRyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9QZXJtaXNzaW9ucyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IEV4cHJlc3Npb24gfSBmcm9tICcuLi90eXBlcy9leHByZXNzaW9uLnR5cGUnO1xuaW1wb3J0IHsgT19HTE9CQUxfQ09ORklHIH0gZnJvbSAnLi4vdHlwZXMvby1nbG9iYWwtY29uZmlnLnR5cGUnO1xuaW1wb3J0IHsgT0xpc3RJbml0aWFsaXphdGlvbk9wdGlvbnMgfSBmcm9tICcuLi90eXBlcy9vLWxpc3QtaW5pdGlhbGl6YXRpb24tb3B0aW9ucy50eXBlJztcbmltcG9ydCB7IE9RdWVyeURhdGFBcmdzIH0gZnJvbSAnLi4vdHlwZXMvcXVlcnktZGF0YS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgT1RhYmxlSW5pdGlhbGl6YXRpb25PcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMvdGFibGUvby10YWJsZS1pbml0aWFsaXphdGlvbi1vcHRpb25zLnR5cGUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZVdyYXBwZXIgfSBmcm9tICcuLi91dGlsL2FzeW5jJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBGaWx0ZXJFeHByZXNzaW9uVXRpbHMgfSBmcm9tICcuLi91dGlsL2ZpbHRlci1leHByZXNzaW9uLnV0aWxzJztcbmltcG9ydCB7IFBlcm1pc3Npb25zVXRpbHMgfSBmcm9tICcuLi91dGlsL3Blcm1pc3Npb25zJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0Zvcm1Db21wb25lbnQgfSBmcm9tICcuL2Zvcm0vby1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBYnN0cmFjdE9TZXJ2aWNlQmFzZUNvbXBvbmVudCwgREVGQVVMVF9JTlBVVFNfT19TRVJWSUNFX0JBU0VfQ09NUE9ORU5UIH0gZnJvbSAnLi9vLXNlcnZpY2UtYmFzZS1jb21wb25lbnQuY2xhc3MnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQmFzZSB9IGZyb20gJy4uL2xheW91dHMvZm9ybS1sYXlvdXQvby1mb3JtLWxheW91dC1tYW5hZ2VyLWJhc2UuY2xhc3MnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQ29udGV4dCB9IGZyb20gJy4uL3R5cGVzL2Zvcm0tbGF5b3V0LW1hbmFnZXItY29udGV4dC50eXBlJztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0TWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9vLWZvcm0tbGF5b3V0LW1hbmFnZXIuc2VydmljZSc7XG5cbmludGVyZmFjZSBJdGVtQ2xpY2sge1xuICBnZXRJdGVtRGF0YSgpOiBhbnlcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fU0VSVklDRV9DT01QT05FTlQgPSBbXG4gIC4uLkRFRkFVTFRfSU5QVVRTX09fU0VSVklDRV9CQVNFX0NPTVBPTkVOVCxcblxuICAnX3RpdGxlOiB0aXRsZScsXG5cbiAgLy8gdmlzaWJsZSBbbm98eWVzXTogdmlzaWJpbGl0eS4gRGVmYXVsdDogeWVzLlxuICAnb3Zpc2libGU6IHZpc2libGUnLFxuXG4gIC8vIGVuYWJsZWQgW25vfHllc106IGVkaXRhYmlsaXR5LiBEZWZhdWx0OiB5ZXMuXG4gICdvZW5hYmxlZDogZW5hYmxlZCcsXG5cbiAgLy8gY29udHJvbHMgW3N0cmluZ11beWVzfG5vfHRydWV8ZmFsc2VdOlxuICAnY29udHJvbHMnLFxuXG4gIC8vIGRldGFpbC1tb2RlIFtub25lfGNsaWNrfGRvdWJsZWNsaWNrXTogd2F5IHRvIG9wZW4gdGhlIGRldGFpbCBmb3JtIG9mIGEgcm93LiBEZWZhdWx0OiAnY2xpY2snLlxuICAnZGV0YWlsTW9kZTogZGV0YWlsLW1vZGUnLFxuXG4gIC8vIGRldGFpbC1mb3JtLXJvdXRlIFtzdHJpbmddOiByb3V0ZSBvZiBkZXRhaWwgZm9ybS4gRGVmYXVsdDogJ2RldGFpbCcuXG4gICdkZXRhaWxGb3JtUm91dGU6IGRldGFpbC1mb3JtLXJvdXRlJyxcblxuICAvLyByZWN1cnNpdmUtZGV0YWlsIFtub3x5ZXNdOiBkbyBub3QgYXBwZW5kIGRldGFpbCBrZXlzIHdoZW4gbmF2aWdhdGUgKG92ZXJ3cml0ZSBjdXJyZW50KS4gRGVmYXVsdDogbm8uXG4gICdyZWN1cnNpdmVEZXRhaWw6IHJlY3Vyc2l2ZS1kZXRhaWwnLFxuXG4gIC8vIGRldGFpbC1idXR0b24taW4tcm93IFtub3x5ZXNdOiBhZGRpbmcgYSBidXR0b24gaW4gcm93IGZvciBvcGVuaW5nIGRldGFpbCBmb3JtLiBEZWZhdWx0OiB5ZXMuXG4gICdkZXRhaWxCdXR0b25JblJvdzogZGV0YWlsLWJ1dHRvbi1pbi1yb3cnLFxuXG4gIC8vIGRldGFpbC1idXR0b24taW4tcm93LWljb24gW3N0cmluZ106IG1hdGVyaWFsIGljb24uIERlZmF1bHQ6IG1vZGVfZWRpdC5cbiAgJ2RldGFpbEJ1dHRvbkluUm93SWNvbjogZGV0YWlsLWJ1dHRvbi1pbi1yb3ctaWNvbicsXG5cbiAgLy8gZWRpdC1mb3JtLXJvdXRlIFtzdHJpbmddOiByb3V0ZSBvZiBlZGl0IGZvcm0uIERlZmF1bHQ6ICdlZGl0Jy5cbiAgJ2VkaXRGb3JtUm91dGU6IGVkaXQtZm9ybS1yb3V0ZScsXG5cbiAgLy8gcmVjdXJzaXZlLWVkaXQgW25vfHllc106IGRvIG5vdCBhcHBlbmQgZGV0YWlsIGtleXMgd2hlbiBuYXZpZ2F0ZSAob3ZlcndyaXRlIGN1cnJlbnQpLiBEZWZhdWx0OiBuby5cbiAgJ3JlY3Vyc2l2ZUVkaXQ6IHJlY3Vyc2l2ZS1lZGl0JyxcblxuICAvLyBlZGl0LWJ1dHRvbi1pbi1yb3cgW25vfHllc106IGFkZGluZyBhIGJ1dHRvbiBpbiByb3cgZm9yIG9wZW5pbmcgZWRpdGlvbiBmb3JtLiBEZWZhdWx0OiBuby5cbiAgJ2VkaXRCdXR0b25JblJvdzogZWRpdC1idXR0b24taW4tcm93JyxcblxuICAvLyBlZGl0LWJ1dHRvbi1pbi1yb3ctaWNvbiBbc3RyaW5nXTogbWF0ZXJpYWwgaWNvbi4gRGVmYXVsdDogc2VhcmNoLlxuICAnZWRpdEJ1dHRvbkluUm93SWNvbjogZWRpdC1idXR0b24taW4tcm93LWljb24nLFxuXG4gIC8vIGluc2VydC1idXR0b24gW25vfHllc106IHNob3cgaW5zZXJ0IGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAnaW5zZXJ0QnV0dG9uOiBpbnNlcnQtYnV0dG9uJyxcblxuICAvLyByb3ctaGVpZ2h0IFtzbWFsbCB8IG1lZGl1bSB8IGxhcmdlXVxuICAncm93SGVpZ2h0IDogcm93LWhlaWdodCcsXG5cbiAgLy8gaW5zZXJ0LWZvcm0tcm91dGUgW3N0cmluZ106IHJvdXRlIG9mIGluc2VydCBmb3JtLiBEZWZhdWx0OlxuICAnaW5zZXJ0Rm9ybVJvdXRlOiBpbnNlcnQtZm9ybS1yb3V0ZScsXG5cbiAgLy8gcmVjdXJzaXZlLWluc2VydCBbbm98eWVzXTogZG8gbm90IGFwcGVuZCBpbnNlcnQga2V5cyB3aGVuIG5hdmlnYXRlIChvdmVyd3JpdGUgY3VycmVudCkuIERlZmF1bHQ6IG5vLlxuICAncmVjdXJzaXZlSW5zZXJ0OiByZWN1cnNpdmUtaW5zZXJ0JyxcblxuICAvLyBmaWx0ZXIgW3llc3xub3x0cnVlfGZhbHNlXTogd2hldGhlciBmaWx0ZXIgaXMgY2FzZSBzZW5zaXRpdmUuIERlZmF1bHQ6IG5vLlxuICAnZmlsdGVyQ2FzZVNlbnNpdGl2ZTogZmlsdGVyLWNhc2Utc2Vuc2l0aXZlJyxcblxuICAvLyBxdWljay1maWx0ZXIgW25vfHllc106IHNob3cgcXVpY2sgZmlsdGVyLiBEZWZhdWx0OiB5ZXMuXG4gICdxdWlja0ZpbHRlcjogcXVpY2stZmlsdGVyJyxcblxuICAvLyBxdWljay1maWx0ZXItcGxhY2Vob2xkZXI6IHF1aWNrIGZpbHRlciBwbGFjZWhvbGRlclxuICAncXVpY2tGaWx0ZXJQbGFjZWhvbGRlcjogcXVpY2stZmlsdGVyLXBsYWNlaG9sZGVyJyxcblxuICAvLyBwYWdpbmF0aW9uLWNvbnRyb2xzIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgcGFnaW5hdGlvbiBjb250cm9scy4gRGVmYXVsdDogeWVzLlxuICAncGFnaW5hdGlvbkNvbnRyb2xzOiBwYWdpbmF0aW9uLWNvbnRyb2xzJyxcblxuICAvLyBwYWdlLXNpemUtb3B0aW9ucyBbc3RyaW5nXTogUGFnZSBzaXplIG9wdGlvbnMgc2VwYXJhdGVkIGJ5ICc7Jy5cbiAgJ3BhZ2VTaXplT3B0aW9uczogcGFnZS1zaXplLW9wdGlvbnMnLFxuXG4gIC8vcXVpY2tGaWx0ZXJBcHBlYXJhbmNlW2xlZ2FjeXxzdGFuZGFyZHxmaWxsfG91dGxpbmVdIEluZGljYXRlcyB3aGljaCBvZiB0aGUgbWF0LWZvcm0tZmllbGQgZGlmZmVyZW50IGFwcGVhcmFuY2UgdmFyaWFudHMgd2lsbCBiZSB1c2VkLiBEZWZhdWx0OiBvdXRsaW5lXG4gICdxdWlja0ZpbHRlckFwcGVhcmFuY2U6cXVpY2stZmlsdGVyLWFwcGVhcmFuY2UnLFxuXG4gICdkaXNhYmxlUGFnZVNpemVDYWxjdWxhdGlvbjogZGlzYWJsZS1wYWdlLXNpemUtY2FsY3VsYXRpb24nXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRQVVRTX09fU0VSVklDRV9DT01QT05FTlQgPSBbXG4gICdvbkNsaWNrJyxcbiAgJ29uRG91YmxlQ2xpY2snLFxuICAnb25EYXRhTG9hZGVkJyxcbiAgJ29uUGFnaW5hdGVkRGF0YUxvYWRlZCcsXG4gICdvblNlYXJjaCdcbl1cblxuQERpcmVjdGl2ZSh7XG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19TRVJWSUNFX0NPTVBPTkVOVCxcbiAgb3V0cHV0czogREVGQVVMVF9PVVRQVVRTX09fU0VSVklDRV9DT01QT05FTlRcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RPU2VydmljZUNvbXBvbmVudDxUIGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnRTdGF0ZVNlcnZpY2U8QWJzdHJhY3RTZXJ2aWNlQ29tcG9uZW50U3RhdGVDbGFzcz4+XG4gIGV4dGVuZHMgQWJzdHJhY3RPU2VydmljZUJhc2VDb21wb25lbnQ8VD5cbiAgaW1wbGVtZW50cyBJU2VydmljZURhdGFDb21wb25lbnQge1xuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgbWF0cGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG5cbiAgcHJvdGVjdGVkIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogT1RyYW5zbGF0ZVNlcnZpY2U7XG4gIHByb3RlY3RlZCBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2U7XG5cbiAgLyogaW5wdXRzIHZhcmlhYmxlcyAqL1xuICBzZXQgdGl0bGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90aXRsZSA9IHZhbDtcbiAgfVxuICBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5fdGl0bGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCh0aGlzLl90aXRsZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgfVxuICBwcm90ZWN0ZWQgX3RpdGxlOiBzdHJpbmc7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwcm90ZWN0ZWQgb3Zpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHJvdGVjdGVkIG9lbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHByb3RlY3RlZCBjb250cm9sczogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBkZXRhaWxNb2RlOiBzdHJpbmcgPSBDb2Rlcy5ERVRBSUxfTU9ERV9DTElDSztcbiAgcHJvdGVjdGVkIGRldGFpbEZvcm1Sb3V0ZTogc3RyaW5nO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHJvdGVjdGVkIHJlY3Vyc2l2ZURldGFpbDogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZGV0YWlsQnV0dG9uSW5Sb3c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGV0YWlsQnV0dG9uSW5Sb3dJY29uOiBzdHJpbmcgPSBDb2Rlcy5ERVRBSUxfSUNPTjtcbiAgcHJvdGVjdGVkIGVkaXRGb3JtUm91dGU6IHN0cmluZztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHByb3RlY3RlZCByZWN1cnNpdmVFZGl0OiBib29sZWFuID0gZmFsc2U7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBlZGl0QnV0dG9uSW5Sb3c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZWRpdEJ1dHRvbkluUm93SWNvbjogc3RyaW5nID0gQ29kZXMuRURJVF9JQ09OO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgaW5zZXJ0QnV0dG9uOiBib29sZWFuO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcGFnaW5hdGlvbkNvbnRyb2xzOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGRpc2FibGVQYWdlU2l6ZUNhbGN1bGF0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0IHBhZ2VTaXplT3B0aW9ucygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VTaXplT3B0aW9ucztcbiAgfVxuXG4gIHNldCBwYWdlU2l6ZU9wdGlvbnModmFsOiBudW1iZXJbXSkge1xuICAgIGlmICghKHZhbCBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgdmFsID0gVXRpbC5wYXJzZUFycmF5KFN0cmluZyh2YWwpKS5tYXAoYSA9PiBwYXJzZUludChhLCAxMCkpO1xuICAgIH1cbiAgICB0aGlzLl9wYWdlU2l6ZU9wdGlvbnMgPSB2YWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3Jvd0hlaWdodCA9IENvZGVzLkRFRkFVTFRfUk9XX0hFSUdIVDtcbiAgcHJvdGVjdGVkIHJvd0hlaWdodFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLl9yb3dIZWlnaHQpO1xuICBwdWJsaWMgcm93SGVpZ2h0T2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5yb3dIZWlnaHRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByb3RlY3RlZCBjaGVja1ZpZXdQb3J0U3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHB1YmxpYyBjaGVja1ZpZXdQb3J0T2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuY2hlY2tWaWV3UG9ydFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgc2V0IHJvd0hlaWdodCh2YWx1ZSkge1xuICAgIHRoaXMuX3Jvd0hlaWdodCA9IHZhbHVlID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlO1xuICAgIGlmICghQ29kZXMuaXNWYWxpZFJvd0hlaWdodCh0aGlzLl9yb3dIZWlnaHQpKSB7XG4gICAgICB0aGlzLl9yb3dIZWlnaHQgPSBDb2Rlcy5ERUZBVUxUX1JPV19IRUlHSFQ7XG4gICAgfVxuICAgIHRoaXMucm93SGVpZ2h0U3ViamVjdC5uZXh0KHRoaXMuX3Jvd0hlaWdodCk7XG4gIH1cbiAgZ2V0IHJvd0hlaWdodCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9yb3dIZWlnaHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGluc2VydEZvcm1Sb3V0ZTogc3RyaW5nO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHJvdGVjdGVkIHJlY3Vyc2l2ZUluc2VydDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBfZmlsdGVyQ2FzZVNlbnNpdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzZXQgZmlsdGVyQ2FzZVNlbnNpdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2ZpbHRlckNhc2VTZW5zaXRpdmUgPSBCb29sZWFuQ29udmVydGVyKHZhbHVlKTtcbiAgfVxuICBnZXQgZmlsdGVyQ2FzZVNlbnNpdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyQ2FzZVNlbnNpdGl2ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfcXVpY2tGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBnZXQgcXVpY2tGaWx0ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3F1aWNrRmlsdGVyO1xuICB9XG4gIHNldCBxdWlja0ZpbHRlcih2YWw6IGJvb2xlYW4pIHtcbiAgICB2YWwgPSBVdGlsLnBhcnNlQm9vbGVhbihTdHJpbmcodmFsKSk7XG4gICAgdGhpcy5fcXVpY2tGaWx0ZXIgPSB2YWw7XG4gICAgaWYgKHZhbCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlZ2lzdGVyUXVpY2tGaWx0ZXIodGhpcy5zZWFyY2hJbnB1dENvbXBvbmVudCksIDApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBxdWlja0ZpbHRlclBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcbiAgLyogZW5kIG9mIGlucHV0cyB2YXJpYWJsZXMgKi9cblxuICAvKiBvdXRwdXRzIHZhcmlhYmxlcyAqL1xuICBwdWJsaWMgb25DbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBvbkRvdWJsZUNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uRGF0YUxvYWRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBvblBhZ2luYXRlZERhdGFMb2FkZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25TZWFyY2g6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvKiBlbmQgb2Ygb3V0cHV0cyB2YXJpYWJsZXMgKi9cblxuICBwdWJsaWMgZmlsdGVyQnVpbGRlcjogT0ZpbHRlckJ1aWxkZXJDb21wb25lbnQ7XG4gIHByb3RlY3RlZCBfc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxhbnk+O1xuXG4gIGdldCBzZWxlY3Rpb24oKSB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLl9zZWxlY3Rpb24pKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0cnVlLCBbXSwgdHJ1ZSwgdGhpcy5jb21wYXJlUm93KCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uVHJpZ2dlclVwZGF0ZVN1YnNjcmlwdGlvbjogYW55O1xuICBwcm90ZWN0ZWQgZm9ybUxheW91dE1hbmFnZXI6IE9Gb3JtTGF5b3V0TWFuYWdlckJhc2U7XG4gIHByb3RlY3RlZCBmb3JtTGF5b3V0TWFuYWdlclRhYkluZGV4OiBudW1iZXI7XG4gIHB1YmxpYyBvRm9ybUxheW91dERpYWxvZzogT0Zvcm1MYXlvdXREaWFsb2dDb21wb25lbnQ7XG5cbiAgcHJvdGVjdGVkIHRhYnNTdWJzY3JpcHRpb25zOiBhbnk7XG5cbiAgcHVibGljIHF1aWNrRmlsdGVyQ29tcG9uZW50OiBPU2VhcmNoSW5wdXRDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZCgoZm9yd2FyZFJlZigoKSA9PiBPU2VhcmNoSW5wdXRDb21wb25lbnQpKSlcbiAgcHVibGljIHNlYXJjaElucHV0Q29tcG9uZW50OiBPU2VhcmNoSW5wdXRDb21wb25lbnQ7XG5cbiAgcHJvdGVjdGVkIHF1aWNrRmlsdGVyQ29sQXJyYXk6IHN0cmluZ1tdO1xuXG4gIHByb3RlY3RlZCBkYXRhUmVzcG9uc2VBcnJheTogYW55W10gPSBbXTtcbiAgcHJvdGVjdGVkIHF1aWNrRmlsdGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIF9wYWdlU2l6ZU9wdGlvbnMgPSBDb2Rlcy5QQUdFX1NJWkVfT1BUSU9OUztcblxuICBwcm90ZWN0ZWQgY2xpY2tUaW1lcjtcbiAgcHJvdGVjdGVkIGNsaWNrRGVsYXkgPSAyMDA7XG4gIHByb3RlY3RlZCBjbGlja1ByZXZlbnQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF9xdWlja0ZpbHRlckFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgPSAnb3V0bGluZSc7XG5cbiAgcHJpdmF0ZSBtdXRhdGlvbk9ic2VydmVyczogTXV0YXRpb25PYnNlcnZlcltdID0gW107XG4gIHB1YmxpYyBlbmFibGVkSW5zZXJ0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGVuYWJsZWRSZWZyZXNoQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByb3RlY3RlZCBmb3JtOiBPRm9ybUNvbXBvbmVudFxuICApIHtcbiAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChQZXJtaXNzaW9uc1NlcnZpY2UpO1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9UcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoTmF2aWdhdGlvblNlcnZpY2UpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyID0gdGhpcy5pbmplY3Rvci5nZXQoT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBubyBwYXJlbnQgZm9ybSBsYXlvdXQgbWFuYWdlclxuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5vRm9ybUxheW91dERpYWxvZyA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9Gb3JtTGF5b3V0RGlhbG9nQ29tcG9uZW50KTtcbiAgICAgIHRoaXMuZm9ybUxheW91dE1hbmFnZXIgPSB0aGlzLm9Gb3JtTGF5b3V0RGlhbG9nLmZvcm1MYXlvdXRNYW5hZ2VyO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG5vIHBhcmVudCBmb3JtIGxheW91dCBtYW5hZ2VyXG4gICAgfVxuICAgIHRoaXMuZ2V0R2xvYmFsSW5qZWN0aW9uVG9rZW5Db25maWcoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0R2xvYmFsSW5qZWN0aW9uVG9rZW5Db25maWcoKSB7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgb0dsb2JhbENvbmZpZyA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9fR0xPQkFMX0NPTkZJRyk7XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQob0dsb2JhbENvbmZpZy5zdG9yZVN0YXRlKSkge1xuICAgICAgICB0aGlzLnN0b3JlU3RhdGUgPSBvR2xvYmFsQ29uZmlnLnN0b3JlU3RhdGU7XG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIERvIG5vdGhpbmcgYmVjYXVzZSBpcyBvcHRpb25hbFxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICBpZiAodGhpcy5kZXRhaWxCdXR0b25JblJvdyB8fCB0aGlzLmVkaXRCdXR0b25JblJvdykge1xuICAgICAgdGhpcy5kZXRhaWxNb2RlID0gQ29kZXMuREVUQUlMX01PREVfTk9ORTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2lzdGVyRm9ybUxheW91dE1hbmFnZXJTdGF0ZSgpO1xuICAgIHN1cGVyLmFmdGVyVmlld0luaXQoKTtcbiAgICBpZiAodGhpcy5lbFJlZikge1xuICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGl0bGUnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIgJiYgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5pc01haW5Db21wb25lbnQodGhpcykpIHtcbiAgICAgIHRoaXMub25UcmlnZ2VyVXBkYXRlU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5vblRyaWdnZXJVcGRhdGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgaWYgKHRoaXMub25UcmlnZ2VyVXBkYXRlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLm9uVHJpZ2dlclVwZGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50YWJzU3Vic2NyaXB0aW9ucykge1xuICAgICAgdGhpcy50YWJzU3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWlja0ZpbHRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5xdWlja0ZpbHRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc1Zpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3Zpc2libGU7XG4gIH1cblxuICBwdWJsaWMgaGFzQ29udHJvbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbHM7XG4gIH1cblxuICBwdWJsaWMgaGFzVGl0bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGUgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3RlZEl0ZW1zKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQ7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTZWxlY3RlZChpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoaXRlbSkpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLnRvZ2dsZShpdGVtKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmF2aWdhdGVUb0RldGFpbChyb3V0ZTogYW55W10sIHFQYXJhbXM6IGFueSwgcmVsYXRpdmVUbzogQWN0aXZhdGVkUm91dGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBleHRyYXMgPSB7XG4gICAgICByZWxhdGl2ZVRvOiByZWxhdGl2ZVRvXG4gICAgfTtcbiAgICBsZXQgaXNGb3JtTGF5b3V0QWN0aXZlID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIgJiYgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5pc01haW5Db21wb25lbnQodGhpcykpIHtcbiAgICAgIHFQYXJhbXNbQ29kZXMuSUdOT1JFX0NBTl9ERUFDVElWQVRFXSA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIuaWdub3JlQ2FuRGVhY3RpdmF0ZTtcbiAgICAgIGlzRm9ybUxheW91dEFjdGl2ZSA9IHRydWU7XG4gICAgICB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLnNldEFzQWN0aXZlRm9ybUxheW91dE1hbmFnZXIoKTtcbiAgICB9XG4gICAgZXh0cmFzW0NvZGVzLlFVRVJZX1BBUkFNU10gPSBxUGFyYW1zO1xuXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUocm91dGUsIGV4dHJhcykuXG4gICAgICB0aGVuKCgpID0+IHtcbiAgICAgICAgLy8gSGFuZGxlIHRoZSB2YXJpYWJsZSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmlzTmF2aWdhdGluZyBoZXJlIGlmIHRoZXJlJ3Mgbm8gRm9ybUxheW91dE1hbmFnZXJcbiAgICAgICAgaWYgKCFpc0Zvcm1MYXlvdXRBY3RpdmUpIHtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmlzTmF2aWdhdGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBtYXRjaCBhbnkgcm91dGVzLiBVUkwgU2VnbWVudDogJywgcm91dGUsZSk7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuaXNOYXZpZ2F0aW5nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpbnNlcnREZXRhaWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub0Zvcm1MYXlvdXREaWFsb2cpIHtcbiAgICAgIGNvbnNvbGUud2FybignTmF2aWdhdGlvbiBpcyBub3QgYXZhaWxhYmxlIHlldCBpbiBhIGZvcm0gbGF5b3V0IG1hbmFnZXIgd2l0aCBtb2RlPVwiZGlhbG9nXCInKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgcm91dGUgPSB0aGlzLmdldEluc2VydFJvdXRlKCk7XG4gICAgdGhpcy5hZGRGb3JtTGF5b3V0TWFuYWdlclJvdXRlKHJvdXRlKTtcbiAgICBpZiAocm91dGUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcmVsYXRpdmVUbyA9IHRoaXMucmVjdXJzaXZlSW5zZXJ0ID8gdGhpcy5hY3RSb3V0ZS5wYXJlbnQgOiB0aGlzLmFjdFJvdXRlO1xuICAgICAgY29uc3QgcVBhcmFtcyA9IHt9O1xuICAgICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIgJiYgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5pc1RhYk1vZGUoKSkge1xuICAgICAgICBxUGFyYW1zW0NvZGVzLklOU0VSVElPTl9NT0RFXSA9ICd0cnVlJztcbiAgICAgIH1cbiAgICAgIHRoaXMubmF2aWdhdGVUb0RldGFpbChyb3V0ZSwgcVBhcmFtcywgcmVsYXRpdmVUbyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHZpZXdEZXRhaWwoaXRlbTogYW55LCBjb250ZXh0PzogT0Zvcm1MYXlvdXRNYW5hZ2VyQ29udGV4dCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1MYXlvdXRNYW5hZ2VyU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9Gb3JtTGF5b3V0TWFuYWdlclNlcnZpY2UpO1xuICAgIGZvcm1MYXlvdXRNYW5hZ2VyU2VydmljZS5jb250ZXh0ID0gdm9pZCAwO1xuXG4gICAgaWYgKHRoaXMub0Zvcm1MYXlvdXREaWFsb2cpIHtcbiAgICAgIGNvbnNvbGUud2FybignTmF2aWdhdGlvbiBpcyBub3QgYXZhaWxhYmxlIHlldCBpbiBhIGZvcm0gbGF5b3V0IG1hbmFnZXIgd2l0aCBtb2RlPVwiZGlhbG9nXCInKTtcbiAgICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLm5hdmlnYXRpb25TZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuZm9ybUxheW91dE1hbmFnZXIubmF2aWdhdGlvblNlcnZpY2UuaXNOYXZpZ2F0aW5nID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB6b25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICB6b25lLnJ1bihhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByb3V0ZSA9IHRoaXMuZ2V0SXRlbU1vZGVSb3V0ZShpdGVtLCAnZGV0YWlsRm9ybVJvdXRlJyk7XG4gICAgICB0aGlzLmFkZEZvcm1MYXlvdXRNYW5hZ2VyUm91dGUocm91dGUpO1xuICAgICAgaWYgKHJvdXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcVBhcmFtcyA9IENvZGVzLmdldElzRGV0YWlsT2JqZWN0KCk7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlVG8gPSB0aGlzLnJlY3Vyc2l2ZURldGFpbCA/IHRoaXMuYWN0Um91dGUucGFyZW50IDogdGhpcy5hY3RSb3V0ZTtcblxuICAgICAgICBpZiAoIXRoaXMuZm9ybUxheW91dE1hbmFnZXI/LmlzU3BsaXRQYW5lTW9kZSgpKSB7XG4gICAgICAgICAgZm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0ZVRvRGV0YWlsKHJvdXRlLCBxUGFyYW1zLCByZWxhdGl2ZVRvKVxuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuICBwdWJsaWMgZWRpdERldGFpbChpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vRm9ybUxheW91dERpYWxvZykge1xuICAgICAgY29uc29sZS53YXJuKCdOYXZpZ2F0aW9uIGlzIG5vdCBhdmFpbGFibGUgeWV0IGluIGEgZm9ybSBsYXlvdXQgbWFuYWdlciB3aXRoIG1vZGU9XCJkaWFsb2dcIicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB6b25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICB6b25lLnJ1bihhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByb3V0ZSA9IHRoaXMuZ2V0SXRlbU1vZGVSb3V0ZShpdGVtLCAnZWRpdEZvcm1Sb3V0ZScpO1xuICAgICAgdGhpcy5hZGRGb3JtTGF5b3V0TWFuYWdlclJvdXRlKHJvdXRlKTtcbiAgICAgIGlmIChyb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHFQYXJhbXMgPSBDb2Rlcy5nZXRJc0RldGFpbE9iamVjdCgpO1xuICAgICAgICBjb25zdCByZWxhdGl2ZVRvID0gdGhpcy5yZWN1cnNpdmVFZGl0ID8gdGhpcy5hY3RSb3V0ZS5wYXJlbnQgOiB0aGlzLmFjdFJvdXRlO1xuXG4gICAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGVUb0RldGFpbChyb3V0ZSwgcVBhcmFtcywgcmVsYXRpdmVUbylcblxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZEZvcm1MYXlvdXRNYW5hZ2VyUm91dGUocm91dGVBcnI6IGFueVtdKTogYW55W10ge1xuICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyICYmIHJvdXRlQXJyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNvbXBSb3V0ZSA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIuZ2V0Um91dGVGb3JDb21wb25lbnQodGhpcyk7XG4gICAgICBpZiAoY29tcFJvdXRlICYmIGNvbXBSb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJvdXRlQXJyLnVuc2hpZnQoLi4uY29tcFJvdXRlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvdXRlQXJyO1xuICB9XG4gIHByb3RlY3RlZCBzZXRCdXR0b25QZXJtaXNzaW9ucyhhY3Rpb25zUGVybWlzc2lvbnMpOiB2b2lkIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoYWN0aW9uc1Blcm1pc3Npb25zKSkge1xuICAgICAgdGhpcy5zZXRQZXJtaXNzaW9uKCdpbnNlcnQnLCAnaW5zZXJ0QnV0dG9uJywgJ2VuYWJsZWRJbnNlcnRCdXR0b24nLCBhY3Rpb25zUGVybWlzc2lvbnMpO1xuICAgICAgdGhpcy5zZXRQZXJtaXNzaW9uKCdyZWZyZXNoJywgJ3JlZnJlc2hCdXR0b24nLCAnZW5hYmxlZFJlZnJlc2hCdXR0b24nLCBhY3Rpb25zUGVybWlzc2lvbnMpO1xuICAgICAgdGhpcy5zZXRQZXJtaXNzaW9uKCdkZWxldGUnLCAnZGVsZXRlQnV0dG9uJywgJ2VuYWJsZWREZWxldGVCdXR0b24nLCBhY3Rpb25zUGVybWlzc2lvbnMpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgc2V0UGVybWlzc2lvbihhdHRyOiBzdHJpbmcsIHZpc2libGVQcm9wOiBzdHJpbmcsIGVuYWJsZWRQcm9wOiBzdHJpbmcsIGFjdGlvbnNQZXJtaXNzaW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IHBlcm0gPSB0aGlzLmdldFBlcm1pc3Npb25CeUF0dHIoYXR0ciwgYWN0aW9uc1Blcm1pc3Npb25zKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocGVybSkpIHtcbiAgICAgIHRoaXNbdmlzaWJsZVByb3BdID0gcGVybS52aXNpYmxlO1xuICAgICAgdGhpc1tlbmFibGVkUHJvcF0gPSBwZXJtLmVuYWJsZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG1hbmFnZUN1c3RvbVBlcm1pc3Npb25zKGFjdGlvbnNQZXJtaXNzaW9ucywgc2VsZWN0b3IpOiB2b2lkIHtcbiAgICBjb25zdCBjdXN0b21QZXJtaXNzaW9ucyA9IGFjdGlvbnNQZXJtaXNzaW9ucy5maWx0ZXIocGVybSA9PiAhWydpbnNlcnQnLCAncmVmcmVzaCcsICdkZWxldGUnXS5pbmNsdWRlcyhwZXJtLmF0dHIpKTtcbiAgICBjdXN0b21QZXJtaXNzaW9ucy5mb3JFYWNoKHBlcm1pc3Npb24gPT4ge1xuICAgICAgdGhpcy5tYW5hZ2VQZXJtaXNzaW9uKHRoaXMuZWxSZWYsIHBlcm1pc3Npb24sIHRoaXMubXV0YXRpb25PYnNlcnZlcnMsIHNlbGVjdG9yKTtcbiAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0QWN0aW9uc1Blcm1pc3Npb25zKHBlcm1pc3Npb25zOiBhbnkpOiBPUGVybWlzc2lvbnNbXSB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHBlcm1pc3Npb25zKSA/IChwZXJtaXNzaW9ucy5hY3Rpb25zIHx8IFtdKSA6IFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBlcm1pc3Npb25CeUF0dHIoYXR0cjogc3RyaW5nLCBhY3Rpb25zUGVybWlzc2lvbnM6IE9QZXJtaXNzaW9uc1tdKTogT1Blcm1pc3Npb25zIHtcbiAgICByZXR1cm4gYWN0aW9uc1Blcm1pc3Npb25zLmZpbmQoKHBlcm06IE9QZXJtaXNzaW9ucykgPT4gcGVybS5hdHRyID09PSBhdHRyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYW5hZ2VQZXJtaXNzaW9uKGVsZW1lbnRSZWY6IGFueSwgcGVybWlzc2lvbjogT1Blcm1pc3Npb25zLCBtdXRhdGlvbk9ic2VydmVyczogYW55W10sIHNlbGVjdG9yOiBzdHJpbmcsIGF0dHI/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsZXQgZWxlbWVudEJ5QWN0aW9uO1xuICAgIGNvbnN0IGF0dHJBY3Rpb24gPSBVdGlsLmlzRGVmaW5lZChhdHRyKSA/IGF0dHIgOiBwZXJtaXNzaW9uLmF0dHI7XG4gICAgY29uc3QgYWxsRWxlbWVudHMgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cbiAgICBhbGxFbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhdHRyJykgPT09IGF0dHJBY3Rpb24pIHtcbiAgICAgICAgZWxlbWVudEJ5QWN0aW9uID0gZWxlbWVudDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChlbGVtZW50QnlBY3Rpb24pKSB7XG4gICAgICBpZiAoIXBlcm1pc3Npb24udmlzaWJsZSkge1xuICAgICAgICBlbGVtZW50QnlBY3Rpb24ucmVtb3ZlKCk7XG4gICAgICB9IGVsc2UgaWYgKCFwZXJtaXNzaW9uLmVuYWJsZWQpIHtcbiAgICAgICAgZWxlbWVudEJ5QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgbXV0YXRpb25PYnNlcnZlciA9IFBlcm1pc3Npb25zVXRpbHMucmVnaXN0ZXJEaXNhYmxlZENoYW5nZXNJbkRvbShlbGVtZW50QnlBY3Rpb24pO1xuICAgICAgICBtdXRhdGlvbk9ic2VydmVycy5wdXNoKG11dGF0aW9uT2JzZXJ2ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRFbmNvZGVkUGFyZW50S2V5cygpOiBzdHJpbmcge1xuICAgIGxldCBlbmNvZGVkOiBzdHJpbmc7XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX3BLZXlzRXF1aXYpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBLZXlzID0gdGhpcy5nZXRQYXJlbnRLZXlzVmFsdWVzKCk7XG4gICAgICBpZiAoT2JqZWN0LmtleXMocEtleXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZW5jb2RlZCA9IFV0aWwuZW5jb2RlUGFyZW50S2V5cyhwS2V5cyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbmNvZGVkO1xuICB9XG5cbiAgcHVibGljIGdldEluc2VydFJvdXRlKCk6IGFueVtdIHtcbiAgICBjb25zdCByb3V0ZSA9IFtdO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLmRldGFpbEZvcm1Sb3V0ZSkpIHtcbiAgICAgIHJvdXRlLnB1c2godGhpcy5kZXRhaWxGb3JtUm91dGUpO1xuICAgIH1cbiAgICBjb25zdCBpbnNlcnRSb3V0ZSA9IFV0aWwuaXNEZWZpbmVkKHRoaXMuaW5zZXJ0Rm9ybVJvdXRlKSA/IHRoaXMuaW5zZXJ0Rm9ybVJvdXRlIDogQ29kZXMuREVGQVVMVF9JTlNFUlRfUk9VVEU7XG4gICAgcm91dGUucHVzaChpbnNlcnRSb3V0ZSk7XG4gICAgLy8gYWRkaW5nIHBhcmVudC1rZXlzIGluZm8uLi5cbiAgICBjb25zdCBlbmNvZGVkUGFyZW50S2V5cyA9IHRoaXMuZ2V0RW5jb2RlZFBhcmVudEtleXMoKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoZW5jb2RlZFBhcmVudEtleXMpKSB7XG4gICAgICBjb25zdCByb3V0ZU9iaiA9IHt9O1xuICAgICAgcm91dGVPYmpbQ29kZXMuUEFSRU5UX0tFWVNfS0VZXSA9IGVuY29kZWRQYXJlbnRLZXlzO1xuICAgICAgcm91dGUucHVzaChyb3V0ZU9iaik7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnN0b3JlTmF2aWdhdGlvbkZvcm1Sb3V0ZXMoJ2luc2VydEZvcm1Sb3V0ZScpO1xuICAgIH1cbiAgICByZXR1cm4gcm91dGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0SXRlbU1vZGVSb3V0ZShpdGVtOiBhbnksIG1vZGVSb3V0ZTogc3RyaW5nKTogYW55W10ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0Um91dGVPZlNlbGVjdGVkUm93KGl0ZW0pO1xuICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuZGV0YWlsRm9ybVJvdXRlKSkge1xuICAgICAgICByZXN1bHQudW5zaGlmdCh0aGlzLmRldGFpbEZvcm1Sb3V0ZSk7XG4gICAgICB9XG4gICAgICBpZiAobW9kZVJvdXRlID09PSAnZWRpdEZvcm1Sb3V0ZScpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5lZGl0Rm9ybVJvdXRlIHx8IENvZGVzLkRFRkFVTFRfRURJVF9ST1VURSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCAmJiAhdGhpcy5vRm9ybUxheW91dERpYWxvZykge1xuICAgICAgdGhpcy5zdG9yZU5hdmlnYXRpb25Gb3JtUm91dGVzKG1vZGVSb3V0ZSwgdGhpcy5nZXRRdWVyeUNvbmZpZ3VyYXRpb24oKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UXVlcnlDb25maWd1cmF0aW9uKCk6IGFueSB7XG4gICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgIGtleXNWYWx1ZXM6IHRoaXMuZ2V0S2V5c1ZhbHVlcygpXG4gICAgfTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIHNlcnZpY2VUeXBlOiB0aGlzLnNlcnZpY2VUeXBlLFxuICAgICAgICBxdWVyeUFyZ3VtZW50czogdGhpcy5xdWVyeUFyZ3VtZW50cyxcbiAgICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSxcbiAgICAgICAgc2VydmljZTogdGhpcy5zZXJ2aWNlLFxuICAgICAgICBxdWVyeU1ldGhvZDogdGhpcy5wYWdlYWJsZSA/IHRoaXMucGFnaW5hdGVkUXVlcnlNZXRob2QgOiB0aGlzLnF1ZXJ5TWV0aG9kLFxuICAgICAgICB0b3RhbFJlY29yZHNOdW1iZXI6IHRoaXMuZ2V0VG90YWxSZWNvcmRzTnVtYmVyKCksXG4gICAgICAgIHF1ZXJ5Um93czogdGhpcy5xdWVyeVJvd3MsXG4gICAgICAgIHF1ZXJ5UmVjb3JkT2Zmc2V0OiBNYXRoLm1heCh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MsIHRoaXMuc3RhdGUucXVlcnlSZWNvcmRPZmZzZXQgLSB0aGlzLnF1ZXJ5Um93cylcbiAgICAgIH0sIHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0Um91dGVPZlNlbGVjdGVkUm93KGl0ZW06IGFueSk6IGFueVtdIHtcbiAgICBjb25zdCByb3V0ZSA9IFtdO1xuICAgIGlmIChVdGlsLmlzT2JqZWN0KGl0ZW0pKSB7XG4gICAgICB0aGlzLmtleXNBcnJheS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChpdGVtW2tleV0pKSB7XG4gICAgICAgICAgcm91dGUucHVzaChpdGVtW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdXRlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlbGV0ZUxvY2FsSXRlbXMoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtcygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRJdGVtcy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0ZWRJdGVtc1tpXTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbUt2ID0ge307XG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMua2V5c0FycmF5Lmxlbmd0aDsgKytrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMua2V5c0FycmF5W2tdO1xuICAgICAgICBzZWxlY3RlZEl0ZW1LdltrZXldID0gc2VsZWN0ZWRJdGVtW2tleV07XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBqID0gdGhpcy5kYXRhQXJyYXkubGVuZ3RoIC0gMTsgaiA+PSAwOyAtLWopIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZGF0YUFycmF5W2pdO1xuICAgICAgICBjb25zdCBpdGVtS3YgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLmtleXNBcnJheS5sZW5ndGg7ICsraykge1xuICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMua2V5c0FycmF5W2tdO1xuICAgICAgICAgIGl0ZW1LdltrZXldID0gaXRlbVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGsgaW4gc2VsZWN0ZWRJdGVtS3YpIHtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtS3YuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gaXRlbUt2Lmhhc093blByb3BlcnR5KGspICYmIChzZWxlY3RlZEl0ZW1LdltrXSA9PT0gaXRlbUt2W2tdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgdGhpcy5kYXRhQXJyYXkuc3BsaWNlKGosIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyByZWluaXRpYWxpemUob3B0aW9uczogT0xpc3RJbml0aWFsaXphdGlvbk9wdGlvbnMgfCBPVGFibGVJbml0aWFsaXphdGlvbk9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucyAmJiBPYmplY3Qua2V5cyhvcHRpb25zKS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNsb25lZE9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdlbnRpdHknKSkge1xuICAgICAgICB0aGlzLmVudGl0eSA9IGNsb25lZE9wdHMuZW50aXR5O1xuICAgICAgICBpZiAodGhpcy5vYXR0ckZyb21FbnRpdHkpIHtcbiAgICAgICAgICB0aGlzLm9hdHRyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBjbG9uZWRPcHRzLmVudGl0eTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBjbG9uZWRPcHRzKSB7XG4gICAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgICAgdGhpc1twcm9wXSA9IGNsb25lZE9wdHNbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGBvLWZpbHRlci1idWlsZGVyYCBjb21wb25lbnQgdGhhdCB0aGlzIGNvbXBvbmVudCB3aWxsIHVzZSB0byBmaWx0ZXIgaXRzIGRhdGEuXG4gICAqIEBwYXJhbSBmaWx0ZXJCdWlsZGVyIHRoZSBgby1maWx0ZXItYnVpbGRlcmAgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIHNldEZpbHRlckJ1aWxkZXIoZmlsdGVyQnVpbGRlcjogT0ZpbHRlckJ1aWxkZXJDb21wb25lbnQpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckJ1aWxkZXIgPSBmaWx0ZXJCdWlsZGVyO1xuICB9XG5cbiAgcHVibGljIGdldENvbXBvbmVudEZpbHRlcihleGlzdGluZ0ZpbHRlcjogYW55ID0ge30pOiBhbnkge1xuICAgIGNvbnN0IGZpbHRlciA9IHN1cGVyLmdldENvbXBvbmVudEZpbHRlcihleGlzdGluZ0ZpbHRlcik7XG5cbiAgICBjb25zdCBxdWlja0ZpbHRlckV4cHIgPSB0aGlzLmdldFF1aWNrRmlsdGVyRXhwcmVzc2lvbigpO1xuICAgIGNvbnN0IGZpbHRlckJ1aWxkZXJFeHByID0gdGhpcy5nZXRGaWx0ZXJCdWlsZGVyRXhwcmVzc2lvbigpO1xuICAgIGxldCBjb21wbGV4RXhwciA9IHF1aWNrRmlsdGVyRXhwciB8fCBmaWx0ZXJCdWlsZGVyRXhwcjtcbiAgICBpZiAocXVpY2tGaWx0ZXJFeHByICYmIGZpbHRlckJ1aWxkZXJFeHByKSB7XG4gICAgICBjb21wbGV4RXhwciA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZENvbXBsZXhFeHByZXNzaW9uKHF1aWNrRmlsdGVyRXhwciwgZmlsdGVyQnVpbGRlckV4cHIsIEZpbHRlckV4cHJlc3Npb25VdGlscy5PUF9BTkQpO1xuICAgIH1cblxuICAgIGlmIChjb21wbGV4RXhwciAmJiAhVXRpbC5pc0RlZmluZWQoZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5CQVNJQ19FWFBSRVNTSU9OX0tFWV0pKSB7XG4gICAgICBmaWx0ZXJbRmlsdGVyRXhwcmVzc2lvblV0aWxzLkJBU0lDX0VYUFJFU1NJT05fS0VZXSA9IGNvbXBsZXhFeHByO1xuICAgIH0gZWxzZSBpZiAoY29tcGxleEV4cHIpIHtcbiAgICAgIGZpbHRlcltGaWx0ZXJFeHByZXNzaW9uVXRpbHMuQkFTSUNfRVhQUkVTU0lPTl9LRVldID1cbiAgICAgICAgRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkQ29tcGxleEV4cHJlc3Npb24oZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5CQVNJQ19FWFBSRVNTSU9OX0tFWV0sIGNvbXBsZXhFeHByLCBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuT1BfQU5EKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFF1aWNrRmlsdGVyRXhwcmVzc2lvbigpOiBFeHByZXNzaW9uIHtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuIHRoaXMucXVpY2tGaWx0ZXJDb21wb25lbnQuZmlsdGVyRXhwcmVzc2lvbjtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRGaWx0ZXJCdWlsZGVyRXhwcmVzc2lvbigpOiBFeHByZXNzaW9uIHtcbiAgICAvLyBBZGQgZmlsdGVyIGZyb20gby1maWx0ZXItYnVpbGRlciBjb21wb25lbnRcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5maWx0ZXJCdWlsZGVyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyQnVpbGRlci5nZXRFeHByZXNzaW9uKCk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RvcmVOYXZpZ2F0aW9uRm9ybVJvdXRlcyhhY3RpdmVNb2RlOiBzdHJpbmcsIHF1ZXJ5Q29uZj86IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IG1haW5Gb3JtTGF5b3V0Q29tcCA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIgPyBVdGlsLmlzRGVmaW5lZCh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmlzTWFpbkNvbXBvbmVudCh0aGlzKSkgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5zdG9yZUZvcm1Sb3V0ZXMoe1xuICAgICAgbWFpbkZvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50OiBtYWluRm9ybUxheW91dENvbXAsXG4gICAgICBpc01haW5OYXZpZ2F0aW9uQ29tcG9uZW50OiB0cnVlLFxuICAgICAgZGV0YWlsRm9ybVJvdXRlOiB0aGlzLmRldGFpbEZvcm1Sb3V0ZSxcbiAgICAgIGVkaXRGb3JtUm91dGU6IHRoaXMuZWRpdEZvcm1Sb3V0ZSxcbiAgICAgIGluc2VydEZvcm1Sb3V0ZTogVXRpbC5pc0RlZmluZWQodGhpcy5pbnNlcnRGb3JtUm91dGUpID8gdGhpcy5pbnNlcnRGb3JtUm91dGUgOiBDb2Rlcy5ERUZBVUxUX0lOU0VSVF9ST1VURVxuICAgIH0sIGFjdGl2ZU1vZGUsIHF1ZXJ5Q29uZik7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2F2ZURhdGFOYXZpZ2F0aW9uSW5Mb2NhbFN0b3JhZ2UoKTogdm9pZCB7XG4gICAgLy8gU2F2ZSBkYXRhIG9mIHRoZSBsaXN0IGluIG5hdmlnYXRpb24tZGF0YSBpbiB0aGUgbG9jYWxzdG9yYWdlXG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0S2V5c1ZhbHVlcygpOiBhbnlbXSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YUFycmF5O1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHJldHVybiBkYXRhLm1hcCgocm93KSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIHNlbGYua2V5c0FycmF5LmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAocm93W2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9ialtrZXldID0gcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFJvdXRlS2V5KCk6IHN0cmluZyB7XG4gICAgbGV0IHJvdXRlID0gJyc7XG4gICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIgJiYgIXRoaXMuZm9ybUxheW91dE1hbmFnZXIuaXNNYWluQ29tcG9uZW50KHRoaXMpKSB7XG4gICAgICByb3V0ZSA9IHRoaXMucm91dGVyLnVybDtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIuZ2V0UGFyYW1zKCk7XG4gICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgIHJvdXRlICs9ICcvJyArIChPYmplY3Qua2V5cyhwYXJhbXMpLmpvaW4oJy8nKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvdXRlID0gc3VwZXIuZ2V0Um91dGVLZXkoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdXRlO1xuICB9XG5cbiAgZ2V0IGVsZW1lbnRSZWYoKTogRWxlbWVudFJlZiB7XG4gICAgcmV0dXJuIHRoaXMuZWxSZWY7XG4gIH1cblxuICBwdWJsaWMgc2hvd0Nhc2VTZW5zaXRpdmVDaGVja2JveCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMucGFnZWFibGU7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJRdWlja0ZpbHRlcihhcmc6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHF1aWNrRmlsdGVyID0gKGFyZyBhcyBPU2VhcmNoSW5wdXRDb21wb25lbnQpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50KSkge1xuICAgICAgLy8gYXZvaWRpbmcgdG8gcmVnaXN0ZXIgYSBxdWlja2ZpbHRlcmNvbXBvbmVudCBpZiBpdCBhbHJlYWR5IGV4aXN0cyBvbmVcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCA9IHF1aWNrRmlsdGVyO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50KSkge1xuICAgICAgdGhpcy5xdWlja0ZpbHRlclN1YnNjcmlwdGlvbiA9IHRoaXMucXVpY2tGaWx0ZXJDb21wb25lbnQub25TZWFyY2guc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICAgIHRoaXMub25TZWFyY2guZW1pdCh2YWwpO1xuICAgICAgICB0aGlzLmZpbHRlckRhdGEodmFsKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUpKSB7XG4gICAgICAgIGlmICgodGhpcy5zdGF0ZS5xdWlja0ZpbHRlclZhbHVlIHx8ICcnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudC5zZXRWYWx1ZSh0aGlzLnN0YXRlLnF1aWNrRmlsdGVyVmFsdWUsIHtcbiAgICAgICAgICAgIGVtaXRFdmVudDogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzRmlsdGVyQ2FzZVNlbnNpdGl2ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCB1c2VRdWlja0ZpbHRlclZhbHVlID0gVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCkgJiYgdGhpcy5zaG93Q2FzZVNlbnNpdGl2ZUNoZWNrYm94KCk7XG4gICAgaWYgKHVzZVF1aWNrRmlsdGVyVmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50LmZpbHRlckNhc2VTZW5zaXRpdmU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbHRlckNhc2VTZW5zaXRpdmU7XG4gIH1cblxuICBwdWJsaWMgY29uZmlndXJlRmlsdGVyVmFsdWUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHJldHVyblZhbCA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoJyonKSkge1xuICAgICAgICByZXR1cm5WYWwgPSAnKicgKyByZXR1cm5WYWw7XG4gICAgICB9XG4gICAgICBpZiAoIXZhbHVlLmVuZHNXaXRoKCcqJykpIHtcbiAgICAgICAgcmV0dXJuVmFsID0gcmV0dXJuVmFsICsgJyonO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuVmFsO1xuICB9XG5cbiAgcHVibGljIGdldFF1aWNrRmlsdGVyVmFsdWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCByZXN1bHQgPSAnJztcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50LmdldFZhbHVlKCkgfHwgJyc7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0UXVpY2tGaWx0ZXJDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5xdWlja0ZpbHRlckNvbEFycmF5O1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50KSkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudC5nZXRBY3RpdmVDb2x1bW5zKCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBkYXRhIGxvY2FsbHlcbiAgICogQHBhcmFtIHZhbHVlIHRoZSBmaWx0ZXJpbmcgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBmaWx0ZXJEYXRhKHZhbHVlPzogc3RyaW5nLCBsb2FkTW9yZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB2YWx1ZSA9IFV0aWwuaXNEZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCkgPyB0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50LmdldFZhbHVlKCkgOiB2b2lkIDA7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUpICYmIFV0aWwuaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5zdGF0ZS5xdWlja0ZpbHRlclZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBjb25zdCBxdWVyeUFyZ3M6IE9RdWVyeURhdGFBcmdzID0ge1xuICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgIGxlbmd0aDogdGhpcy5xdWVyeVJvd3MsXG4gICAgICAgIHJlcGxhY2U6IHRydWVcbiAgICAgIH07XG4gICAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFSZXNwb25zZUFycmF5ICYmIHRoaXMuZGF0YVJlc3BvbnNlQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGZpbHRlcmVkRGF0YSA9IHRoaXMuZGF0YVJlc3BvbnNlQXJyYXkuc2xpY2UoMCk7XG4gICAgICBmaWx0ZXJlZERhdGEgPSB0aGlzLmdldFF1aWNrRmlsdGVyRGF0YUZyb21BcnJheSh2YWx1ZSwgZmlsdGVyZWREYXRhKTtcbiAgICAgIGZpbHRlcmVkRGF0YSA9IHRoaXMuZ2V0U29ydGVkRGF0YUZyb21BcnJheShmaWx0ZXJlZERhdGEpO1xuICAgICAgZmlsdGVyZWREYXRhID0gdGhpcy5nZXRQYWdpbmF0aW9uRGF0YUZyb21BcnJheShmaWx0ZXJlZERhdGEpO1xuICAgICAgdGhpcy5zZXREYXRhQXJyYXkoZmlsdGVyZWREYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXREYXRhQXJyYXkodGhpcy5kYXRhUmVzcG9uc2VBcnJheSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldFF1aWNrRmlsdGVyRGF0YUZyb21BcnJheShxdWlja2ZpbHRlcjogc3RyaW5nLCBkYXRhQXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIGxldCByZXN1bHQgPSBkYXRhQXJyYXk7XG4gICAgaWYgKHF1aWNrZmlsdGVyICYmIHF1aWNrZmlsdGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNhc2VTZW5zaXRpdmUgPSB0aGlzLmlzRmlsdGVyQ2FzZVNlbnNpdGl2ZSgpO1xuICAgICAgY29uc3QgcXVpY2tGaWx0ZXJDb2x1bW5zID0gdGhpcy5nZXRRdWlja0ZpbHRlckNvbHVtbnMoKTtcbiAgICAgIGNvbnN0IHJlZ0V4cFN0ciA9IG5ldyBSZWdFeHAoVXRpbC5lc2NhcGVTcGVjaWFsQ2hhcmFjdGVyKFV0aWwubm9ybWFsaXplU3RyaW5nKHF1aWNrZmlsdGVyLCAhY2FzZVNlbnNpdGl2ZSkpKTtcbiAgICAgIHJlc3VsdCA9IGRhdGFBcnJheS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIHJldHVybiBxdWlja0ZpbHRlckNvbHVtbnMuc29tZShjb2wgPT4gcmVnRXhwU3RyLnRlc3QoVXRpbC5ub3JtYWxpemVTdHJpbmcoaXRlbVtjb2xdICsgJycsICFjYXNlU2Vuc2l0aXZlKSkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U29ydGVkRGF0YUZyb21BcnJheShkYXRhQXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBkYXRhQXJyYXk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RGF0YShkYXRhOiBhbnksIHNxbFR5cGVzPzogYW55LCByZXBsYWNlPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghVXRpbC5pc0FycmF5KGRhdGEpKSB7XG4gICAgICB0aGlzLnNldERhdGFBcnJheShbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YVJlc3BvbnNlQXJyYXkgPSB0aGlzLnBhcnNlUmVzcG9uc2VBcnJheShkYXRhLCByZXBsYWNlKTtcbiAgICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICAgIHRoaXMuc2V0RGF0YUFycmF5KHRoaXMuZGF0YVJlc3BvbnNlQXJyYXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWx0ZXJEYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLm9uUGFnaW5hdGVkRGF0YUxvYWRlZCwgZGF0YSk7XG4gICAgfVxuICAgIE9ic2VydmFibGVXcmFwcGVyLmNhbGxFbWl0KHRoaXMub25EYXRhTG9hZGVkLCB0aGlzLmRhdGFSZXNwb25zZUFycmF5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVJlc3BvbnNlQXJyYXkoZGF0YTogYW55W10sIHJlcGxhY2U/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJGb3JtTGF5b3V0TWFuYWdlclN0YXRlKCkge1xuICAgIGlmICh0aGlzLnN0b3JlU3RhdGUgJiYgdGhpcy5mb3JtTGF5b3V0TWFuYWdlciAmJiB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmlzVGFiTW9kZSgpICYmIHRoaXMuZm9ybUxheW91dE1hbmFnZXIub1RhYkdyb3VwKSB7XG4gICAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHRoaXMuZm9ybUxheW91dE1hbmFnZXJUYWJJbmRleCkpIHtcbiAgICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlclRhYkluZGV4ID0gdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5vVGFiR3JvdXAuZGF0YS5sZW5ndGg7XG4gICAgICB9XG4gICAgICBjb25zdCB1cGRhdGVDb21wb25lbnRTdGF0ZVN1YmplY3QgPSAodGhpcy5mb3JtTGF5b3V0TWFuYWdlci5vVGFiR3JvdXAgYXMgT0Zvcm1MYXlvdXRUYWJHcm91cENvbXBvbmVudCkudXBkYXRlVGFiQ29tcG9uZW50c1N0YXRlO1xuXG4gICAgICB0aGlzLnRhYnNTdWJzY3JpcHRpb25zID0gdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5vblNlbGVjdGVkVGFiQ2hhbmdlLnN1YnNjcmliZSgoYXJnKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyVGFiSW5kZXggPT09IGFyZy5wcmV2aW91c0luZGV4KSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZVN0b3JhZ2UoKTtcbiAgICAgICAgICAvLyBzZXR0aW5nIGFscmVhZHlTdG9yZWQgdG8gZmFsc2UgdG8gZm9yY2UgdHJpZ2dlcmluZyBhIG5ldyBzdG9yYWdlIHVwZGF0ZSBhZnRlciB0aGlzXG4gICAgICAgICAgdGhpcy5hbHJlYWR5U3RvcmVkID0gZmFsc2U7XG4gICAgICAgICAgaWYgKGFyZy5pbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgdXBkYXRlQ29tcG9uZW50U3RhdGVTdWJqZWN0Lm5leHQoYXJnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIubmF2aWdhdGlvblNlcnZpY2UuaXNOYXZpZ2F0aW5nKSB7XG4gICAgICAgICAgLyogaW4gdGhlIGZvcm0tbGF5b3V0IG1vZGU9dGFiLCB0aGUgb25seSB3YXkgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiByZW5kZXJlZCBpc1xuICAgICAgICAgICB3aGVuIG5hdmlnYXRpb25TZXJ2aWNlLmlzTmF2aWdhdGluZyAqL1xuICAgICAgICAgIGFyZy5kYXRhLnJlbmRlcmVyU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGVja1ZpZXdQb3J0U3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudGFic1N1YnNjcmlwdGlvbnMuYWRkKHVwZGF0ZUNvbXBvbmVudFN0YXRlU3ViamVjdC5zdWJzY3JpYmUoKGFyZykgPT4ge1xuICAgICAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlclRhYkluZGV4ID09PSBhcmcuaW5kZXgpIHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudFN0YXRlU2VydmljZS5pbml0aWFsaXplKHRoaXMpO1xuICAgICAgICAgIHRoaXMuYXBwbHlEZWZhdWx0Q29uZmlndXJhdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG5cbiAgICAgIHRoaXMudGFic1N1YnNjcmlwdGlvbnMuYWRkKHRoaXMuZm9ybUxheW91dE1hbmFnZXIub25DbG9zZVRhYi5zdWJzY3JpYmUoKGFyZykgPT4ge1xuICAgICAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlclRhYkluZGV4ID09PSBhcmcuaW5kZXgpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlU3RvcmFnZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgYXBwbHlEZWZhdWx0Q29uZmlndXJhdGlvbigpIHtcblxuICB9XG5cbiAgcHVibGljIG9uQ2hhbmdlUGFnZShlOiBQYWdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFTZXJ2aWNlPy5zZXRQYWdpbmF0aW9uQ29udGV4dCh7IHBhZ2VOdW1iZXI6IGUucGFnZUluZGV4LCBwYWdlU2l6ZTogZS5wYWdlU2l6ZSB9KTtcblxuICAgIGlmICghdGhpcy5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IGUucGFnZUluZGV4O1xuICAgICAgdGhpcy5xdWVyeVJvd3MgPSBlLnBhZ2VTaXplO1xuICAgICAgdGhpcy5maWx0ZXJEYXRhKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGdvaW5nQmFjayA9IGUucGFnZUluZGV4IDwgdGhpcy5jdXJyZW50UGFnZTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gZS5wYWdlSW5kZXg7XG4gICAgY29uc3QgcGFnZVNpemUgPSBlLnBhZ2VTaXplO1xuXG4gICAgY29uc3Qgb2xkUXVlcnlSb3dzID0gdGhpcy5xdWVyeVJvd3M7XG4gICAgY29uc3QgY2hhbmdpbmdQYWdlU2l6ZSA9IChvbGRRdWVyeVJvd3MgIT09IHBhZ2VTaXplKTtcbiAgICB0aGlzLnF1ZXJ5Um93cyA9IHBhZ2VTaXplO1xuXG4gICAgbGV0IG5ld1N0YXJ0UmVjb3JkO1xuICAgIGxldCBxdWVyeUxlbmd0aDtcblxuICAgIGlmIChnb2luZ0JhY2sgfHwgY2hhbmdpbmdQYWdlU2l6ZSkge1xuICAgICAgbmV3U3RhcnRSZWNvcmQgPSAodGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucXVlcnlSb3dzKTtcbiAgICAgIHF1ZXJ5TGVuZ3RoID0gdGhpcy5xdWVyeVJvd3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1N0YXJ0UmVjb3JkID0gTWF0aC5tYXgodGhpcy5zdGF0ZS5xdWVyeVJlY29yZE9mZnNldCwgKHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnF1ZXJ5Um93cykpO1xuICAgICAgY29uc3QgbmV3RW5kUmVjb3JkID0gTWF0aC5taW4obmV3U3RhcnRSZWNvcmQgKyB0aGlzLnF1ZXJ5Um93cywgdGhpcy5zdGF0ZS50b3RhbFF1ZXJ5UmVjb3Jkc051bWJlcik7XG4gICAgICBxdWVyeUxlbmd0aCA9IHRoaXMuZGlzYWJsZVBhZ2VTaXplQ2FsY3VsYXRpb24gPyB0aGlzLnF1ZXJ5Um93cyA6IE1hdGgubWluKHRoaXMucXVlcnlSb3dzLCBuZXdFbmRSZWNvcmQgLSBuZXdTdGFydFJlY29yZCk7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlBcmdzOiBPUXVlcnlEYXRhQXJncyA9IHtcbiAgICAgIG9mZnNldDogbmV3U3RhcnRSZWNvcmQsXG4gICAgICBsZW5ndGg6IHF1ZXJ5TGVuZ3RoLFxuICAgICAgcmVwbGFjZTogdHJ1ZVxuICAgIH07XG5cbiAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gIH1cblxuICBzZXQgY3VycmVudFBhZ2UodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLl9jdXJyZW50UGFnZSA9IHZhbDtcbiAgfVxuXG4gIGdldCBjdXJyZW50UGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50UGFnZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfY3VycmVudFBhZ2U6IG51bWJlciA9IDA7XG5cblxuICBnZXQgdG90YWxSZWNvcmRzKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFRvdGFsUmVjb3Jkc051bWJlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kYXRhUmVzcG9uc2VBcnJheS5sZW5ndGg7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UGFnaW5hdGlvbkRhdGFGcm9tQXJyYXkoZGF0YUFycmF5OiBhbnlbXSk6IGFueVtdIHtcbiAgICBsZXQgcmVzdWx0ID0gZGF0YUFycmF5O1xuICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db250cm9scykge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnNwbGljZSh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MsIHRoaXMucXVlcnlSb3dzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGhhbmRsZUl0ZW1DbGljayhpdGVtOiBJdGVtQ2xpY2spOiB2b2lkIHtcbiAgICB0aGlzLmNsaWNrVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5jbGlja1ByZXZlbnQpIHtcbiAgICAgICAgdGhpcy5pdGVtQ2xpY2tEb25lKGl0ZW0pO1xuICAgICAgfVxuICAgICAgdGhpcy5jbGlja1ByZXZlbnQgPSBmYWxzZTtcbiAgICB9LCB0aGlzLmNsaWNrRGVsYXkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGl0ZW1DbGlja0RvbmUoaXRlbTogSXRlbUNsaWNrKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBpdGVtLmdldEl0ZW1EYXRhKCk7XG4gICAgaWYgKHRoaXMuZGV0YWlsTW9kZSA9PT0gQ29kZXMuREVUQUlMX01PREVfQ0xJQ0spIHtcbiAgICAgIHRoaXMuc2F2ZURhdGFOYXZpZ2F0aW9uSW5Mb2NhbFN0b3JhZ2UoKTtcbiAgICAgIHRoaXMudmlld0RldGFpbChkYXRhKTtcbiAgICB9XG4gICAgdGhpcy5vbkNsaWNrLmVtaXQoZGF0YSk7XG4gIH1cblxuICBoYW5kbGVJdGVtRGJsQ2xpY2soaXRlbTogSXRlbUNsaWNrKTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xpY2tUaW1lcik7XG4gICAgdGhpcy5jbGlja1ByZXZlbnQgPSB0cnVlO1xuICAgIHRoaXMuaXRlbURibENsaWNrRG9uZShpdGVtKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpdGVtRGJsQ2xpY2tEb25lKGl0ZW06IEl0ZW1DbGljayk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gaXRlbS5nZXRJdGVtRGF0YSgpO1xuICAgIGlmIChDb2Rlcy5pc0RvdWJsZUNsaWNrTW9kZSh0aGlzLmRldGFpbE1vZGUpKSB7XG4gICAgICB0aGlzLnNhdmVEYXRhTmF2aWdhdGlvbkluTG9jYWxTdG9yYWdlKCk7XG4gICAgICB0aGlzLnZpZXdEZXRhaWwoZGF0YSk7XG4gICAgfVxuICAgIHRoaXMub25Eb3VibGVDbGljay5lbWl0KGRhdGEpO1xuICB9XG5cbiAgZ2V0IHF1aWNrRmlsdGVyQXBwZWFyYW5jZSgpOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlIHtcbiAgICByZXR1cm4gdGhpcy5fcXVpY2tGaWx0ZXJBcHBlYXJhbmNlO1xuICB9XG5cbiAgc2V0IHF1aWNrRmlsdGVyQXBwZWFyYW5jZSh2YWx1ZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSkge1xuICAgIGNvbnN0IHZhbHVlcyA9IFsnZmlsbCcsICdvdXRsaW5lJ107XG4gICAgaWYgKHZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHtcbiAgICAgIGNvbnNvbGUud2FybignVGhlIHF1aWNrLWZpbHRlci1hcHBlYXJhbmNlIGF0dHJpYnV0ZSBpcyB1bmRlZmluZWQgc28gdGhlIG91dGxpbmUgdmFsdWUgd2lsbCBiZSB1c2VkJyk7XG4gICAgICB2YWx1ZSA9ICdvdXRsaW5lJztcbiAgICB9XG4gICAgdGhpcy5fcXVpY2tGaWx0ZXJBcHBlYXJhbmNlID0gdmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3FsVHlwZXNPZktleXMoKSB7XG4gICAgY29uc3Qgc3FsVHlwZXMgPSB0aGlzLmdldFNxbFR5cGVzKCk7XG4gICAgY29uc3Qgc3FsVHlwZXNBcmcgPSB7fTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoc3FsVHlwZXMpKSB7XG4gICAgICB0aGlzLmtleXNBcnJheS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHNxbFR5cGVzQXJnW2tleV0gPSBzcWxUeXBlc1trZXldO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzcWxUeXBlc0FyZztcblxuICB9XG5cbiAgY29tcGFyZVJvdygpOiAoKG8xOiBhbnksIG8yOiBhbnkpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKG8xOiBhbnksIG8yOiBhbnkpID0+IHRoaXMua2V5c0FycmF5LmV2ZXJ5KGtleSA9PiBvMVtrZXldID09PSBvMltrZXldKTtcbiAgfVxufVxuXG4vKlRoaXMgY2xhc3MgaXMgZGVmaW5pZWQgdG8gbWFudGFpbiBiYWN3YXJkcyBjb21wYXRpYmlsaXR5ICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBPU2VydmljZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0T1NlcnZpY2VDb21wb25lbnQ8RGVmYXVsdFNlcnZpY2VDb21wb25lbnRTdGF0ZVNlcnZpY2U+IHtcblxufVxuIl19
@@ -1,21 +1,30 @@
1
- import { Directive, Injector } from "@angular/core";
2
- import { AppearanceService } from "../services/appearance.service";
1
+ import { ChangeDetectorRef, Directive, ElementRef, Injector } from '@angular/core';
2
+ import { of } from 'rxjs';
3
+ import { AppearanceService } from '../services/appearance.service';
3
4
  import * as i0 from "@angular/core";
4
5
  export class OSkeletonComponent {
5
- constructor(injector) {
6
+ constructor(injector, elRef) {
6
7
  this.injector = injector;
8
+ this.elRef = elRef;
9
+ this.rows$ = of([1]);
10
+ this.cd = injector.get(ChangeDetectorRef);
7
11
  this.appearanceService = this.injector.get(AppearanceService);
8
12
  this.isDarkMode = this.appearanceService.isDarkMode();
9
13
  this.subscription = this.appearanceService.isDarkMode$.subscribe(x => this.isDarkMode = x);
14
+ ;
15
+ }
16
+ ngAfterViewInit() {
17
+ this.rows$ = of(this.getRows());
18
+ this.cd.detectChanges();
10
19
  }
11
20
  ngOnDestroy() {
12
21
  this.subscription?.unsubscribe();
13
22
  }
14
23
  }
15
- OSkeletonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OSkeletonComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive });
24
+ OSkeletonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OSkeletonComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
16
25
  OSkeletonComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: OSkeletonComponent, ngImport: i0 });
17
26
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OSkeletonComponent, decorators: [{
18
27
  type: Directive,
19
28
  args: [{}]
20
- }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1za2VsZXRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy9vLXNrZWxldG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUUvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFHbkUsTUFBTSxPQUFPLGtCQUFrQjtJQUs3QixZQUFzQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3RDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBb0IsaUJBQWlCLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7K0dBYlUsa0JBQWtCO21HQUFsQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEOUIsU0FBUzttQkFBQyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3RvciwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBBcHBlYXJhbmNlU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9hcHBlYXJhbmNlLnNlcnZpY2VcIjtcblxuQERpcmVjdGl2ZSh7fSlcbmV4cG9ydCBjbGFzcyBPU2tlbGV0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBpc0RhcmtNb2RlOiBib29sZWFuO1xuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgYXBwZWFyYW5jZVNlcnZpY2U6IEFwcGVhcmFuY2VTZXJ2aWNlO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICB0aGlzLmFwcGVhcmFuY2VTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8QXBwZWFyYW5jZVNlcnZpY2U+KEFwcGVhcmFuY2VTZXJ2aWNlKTtcbiAgICB0aGlzLmlzRGFya01vZGUgPSB0aGlzLmFwcGVhcmFuY2VTZXJ2aWNlLmlzRGFya01vZGUoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuYXBwZWFyYW5jZVNlcnZpY2UuaXNEYXJrTW9kZSQuc3Vic2NyaWJlKHggPT4gdGhpcy5pc0RhcmtNb2RlID0geCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxufSJdfQ==
29
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ElementRef }]; } });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1za2VsZXRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy9vLXNrZWxldG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBYyxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRXBELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUduRSxNQUFNLE9BQWdCLGtCQUFrQjtJQU90QyxZQUFzQixRQUFrQixFQUFZLEtBQWlCO1FBQS9DLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBWSxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBSHJFLFVBQUssR0FBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUlwQyxJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQW9CLGlCQUFpQixDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFBQSxDQUFDO0lBQzlGLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7K0dBckJtQixrQkFBa0I7bUdBQWxCLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUR2QyxTQUFTO21CQUFDLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbmplY3RvciwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFwcGVhcmFuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXBwZWFyYW5jZS5zZXJ2aWNlJztcblxuQERpcmVjdGl2ZSh7fSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPU2tlbGV0b25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBpc0RhcmtNb2RlOiBib29sZWFuO1xuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgYXBwZWFyYW5jZVNlcnZpY2U6IEFwcGVhcmFuY2VTZXJ2aWNlO1xuICByb3dzJDogT2JzZXJ2YWJsZTxudW1iZXJbXT4gPSBvZihbMV0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGNkOiBDaGFuZ2VEZXRlY3RvclJlZjtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLCBwcm90ZWN0ZWQgZWxSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICB0aGlzLmNkID0gaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICB0aGlzLmFwcGVhcmFuY2VTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8QXBwZWFyYW5jZVNlcnZpY2U+KEFwcGVhcmFuY2VTZXJ2aWNlKTtcbiAgICB0aGlzLmlzRGFya01vZGUgPSB0aGlzLmFwcGVhcmFuY2VTZXJ2aWNlLmlzRGFya01vZGUoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuYXBwZWFyYW5jZVNlcnZpY2UuaXNEYXJrTW9kZSQuc3Vic2NyaWJlKHggPT4gdGhpcy5pc0RhcmtNb2RlID0geCk7O1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucm93cyQgPSBvZih0aGlzLmdldFJvd3MoKSk7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7Ly8gc3VyZSBkZXRlY3QgY2hhbmdlc1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbiAgLy8gT3ZlcnJpZGUgaW4gc3ViY2xhc3Nlc1xuICBhYnN0cmFjdCBnZXRSb3dzKCk6IG51bWJlcltdO1xufVxuIl19