@fundamental-ngx/platform 0.43.16 → 0.43.18

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 (95) hide show
  1. package/esm2020/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +1 -1
  2. package/esm2020/approval-flow/approval-flow-team-list/approval-flow-team-list.component.mjs +1 -1
  3. package/esm2020/approval-flow/approval-flow-user-list/approval-flow-user-list.component.mjs +1 -1
  4. package/esm2020/form/combobox/combobox/combobox.component.mjs +7 -7
  5. package/esm2020/form/combobox/commons/base-combobox.mjs +33 -6
  6. package/esm2020/form/multi-combobox/commons/base-multi-combobox.mjs +5 -2
  7. package/esm2020/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +33 -34
  8. package/esm2020/form/multi-combobox/multi-combobox.module.mjs +3 -2
  9. package/esm2020/form/multi-input/base-multi-input.mjs +5 -1
  10. package/esm2020/form/multi-input/multi-input.component.mjs +9 -8
  11. package/esm2020/form/multi-input/multi-input.module.mjs +3 -2
  12. package/esm2020/form/select/commons/base-select.mjs +16 -7
  13. package/esm2020/form/select/select/select.component.mjs +3 -3
  14. package/esm2020/list/list.component.mjs +11 -3
  15. package/esm2020/search-field/search-field.component.mjs +3 -3
  16. package/esm2020/shared/domain/data-source.mjs +3 -2
  17. package/esm2020/shared/form/base.input.mjs +13 -9
  18. package/esm2020/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +1 -1
  19. package/esm2020/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +1 -1
  20. package/esm2020/table/components/table-header-cell-content/table-header-cell-content.component.mjs +3 -3
  21. package/esm2020/table/components/table-header-row/table-header-row.component.mjs +7 -4
  22. package/esm2020/table/components/table-p13-dialog/columns/columns.component.mjs +3 -3
  23. package/esm2020/table/components/table-p13-dialog/filtering/filter-rule.component.mjs +1 -1
  24. package/esm2020/table/components/table-p13-dialog/grouping/grouping.component.mjs +1 -1
  25. package/esm2020/table/components/table-p13-dialog/sorting/sorting.component.mjs +2 -2
  26. package/esm2020/table/components/table-row/table-row.component.mjs +13 -21
  27. package/esm2020/table/table.component.mjs +36 -13
  28. package/esm2020/table-helpers/pipes/column-sorting-direction.pipe.mjs +27 -0
  29. package/esm2020/table-helpers/pipes/index.mjs +2 -1
  30. package/esm2020/table-helpers/table-helpers.module.mjs +9 -6
  31. package/esm2020/upload-collection/upload-collection/upload-collection.component.mjs +1 -1
  32. package/esm2020/value-help-dialog/components/define-tab/define-tab.component.mjs +1 -1
  33. package/esm2020/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +1 -1
  34. package/fesm2015/fundamental-ngx-platform-approval-flow.mjs +3 -3
  35. package/fesm2015/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  36. package/fesm2015/fundamental-ngx-platform-form.mjs +172 -131
  37. package/fesm2015/fundamental-ngx-platform-form.mjs.map +1 -1
  38. package/fesm2015/fundamental-ngx-platform-list.mjs +9 -2
  39. package/fesm2015/fundamental-ngx-platform-list.mjs.map +1 -1
  40. package/fesm2015/fundamental-ngx-platform-search-field.mjs +2 -2
  41. package/fesm2015/fundamental-ngx-platform-search-field.mjs.map +1 -1
  42. package/fesm2015/fundamental-ngx-platform-shared.mjs +12 -7
  43. package/fesm2015/fundamental-ngx-platform-shared.mjs.map +1 -1
  44. package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs +1 -1
  45. package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  46. package/fesm2015/fundamental-ngx-platform-table-helpers.mjs +32 -4
  47. package/fesm2015/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  48. package/fesm2015/fundamental-ngx-platform-table.mjs +59 -41
  49. package/fesm2015/fundamental-ngx-platform-table.mjs.map +1 -1
  50. package/fesm2015/fundamental-ngx-platform-upload-collection.mjs +1 -1
  51. package/fesm2015/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
  52. package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs +1 -1
  53. package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  54. package/fesm2015/fundamental-ngx-platform-variant-management.mjs +1 -1
  55. package/fesm2015/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  56. package/fesm2020/fundamental-ngx-platform-approval-flow.mjs +3 -3
  57. package/fesm2020/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  58. package/fesm2020/fundamental-ngx-platform-form.mjs +177 -134
  59. package/fesm2020/fundamental-ngx-platform-form.mjs.map +1 -1
  60. package/fesm2020/fundamental-ngx-platform-list.mjs +10 -2
  61. package/fesm2020/fundamental-ngx-platform-list.mjs.map +1 -1
  62. package/fesm2020/fundamental-ngx-platform-search-field.mjs +2 -2
  63. package/fesm2020/fundamental-ngx-platform-search-field.mjs.map +1 -1
  64. package/fesm2020/fundamental-ngx-platform-shared.mjs +12 -7
  65. package/fesm2020/fundamental-ngx-platform-shared.mjs.map +1 -1
  66. package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs +1 -1
  67. package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  68. package/fesm2020/fundamental-ngx-platform-table-helpers.mjs +32 -4
  69. package/fesm2020/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  70. package/fesm2020/fundamental-ngx-platform-table.mjs +59 -41
  71. package/fesm2020/fundamental-ngx-platform-table.mjs.map +1 -1
  72. package/fesm2020/fundamental-ngx-platform-upload-collection.mjs +1 -1
  73. package/fesm2020/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
  74. package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs +1 -1
  75. package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  76. package/fesm2020/fundamental-ngx-platform-variant-management.mjs +1 -1
  77. package/fesm2020/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  78. package/form/combobox/combobox/combobox.component.d.ts +2 -2
  79. package/form/combobox/commons/base-combobox.d.ts +12 -3
  80. package/form/multi-combobox/multi-combobox/multi-combobox.component.d.ts +7 -7
  81. package/form/multi-combobox/multi-combobox.module.d.ts +2 -1
  82. package/form/multi-input/multi-input.module.d.ts +2 -1
  83. package/form/select/commons/base-select.d.ts +14 -7
  84. package/fundamental-ngx-platform-v0.43.18.tgz +0 -0
  85. package/list/list.component.d.ts +3 -1
  86. package/package.json +4 -4
  87. package/schematics/ng-add/index.js +1 -1
  88. package/shared/form/base.input.d.ts +5 -4
  89. package/table/components/table-header-row/table-header-row.component.d.ts +3 -1
  90. package/table/components/table-row/table-row.component.d.ts +2 -2
  91. package/table/table.component.d.ts +11 -4
  92. package/table-helpers/pipes/column-sorting-direction.pipe.d.ts +12 -0
  93. package/table-helpers/pipes/index.d.ts +1 -0
  94. package/table-helpers/table-helpers.module.d.ts +2 -1
  95. package/fundamental-ngx-platform-v0.43.16.tgz +0 -0
@@ -3,7 +3,8 @@ import { CommonModule } from '@angular/common';
3
3
  import { FormsModule } from '@angular/forms';
4
4
  import { ButtonModule } from '@fundamental-ngx/core/button';
5
5
  import { CheckboxModule } from '@fundamental-ngx/core/checkbox';
6
- import { DynamicComponentService, TemplateModule, PipeModule, MultiAnnouncerModule } from '@fundamental-ngx/cdk/utils';
6
+ import { DynamicComponentService, TemplateModule, PipeModule } from '@fundamental-ngx/cdk/utils';
7
+ import { MultiAnnouncerModule } from '@fundamental-ngx/core/multi-combobox';
7
8
  import { FormModule } from '@fundamental-ngx/core/form';
8
9
  import { InputGroupModule } from '@fundamental-ngx/core/input-group';
9
10
  import { ListModule } from '@fundamental-ngx/core/list';
@@ -80,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
80
81
  exports: [MultiComboboxComponent, TemplateModule, PlatformContentDensityDeprecationsModule, ContentDensityModule]
81
82
  }]
82
83
  }] });
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktY29tYm9ib3gubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vbXVsdGktY29tYm9ib3gvbXVsdGktY29tYm9ib3gubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7QUEwQjdFLE1BQU0sT0FBTywyQkFBMkI7O3dIQUEzQiwyQkFBMkI7eUhBQTNCLDJCQUEyQixpQkF2QnJCLHNCQUFzQixhQUVqQyxZQUFZO1FBQ1osV0FBVztRQUNYLGNBQWM7UUFDZCxnQkFBZ0I7UUFDaEIsVUFBVTtRQUNWLFdBQVc7UUFDWCxVQUFVO1FBQ1YsWUFBWTtRQUNaLFVBQVU7UUFDVixhQUFhO1FBQ2Isa0JBQWtCO1FBQ2xCLHNCQUFzQjtRQUN0QiwwQkFBMEI7UUFDMUIsVUFBVTtRQUNWLHdDQUF3QztRQUN4QyxvQkFBb0I7UUFDcEIsb0JBQW9CLGFBR2Qsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLHdDQUF3QyxFQUFFLG9CQUFvQjt5SEFFdkcsMkJBQTJCLGFBSHpCLENBQUMsdUJBQXVCLENBQUMsWUFsQmhDLFlBQVk7UUFDWixXQUFXO1FBQ1gsY0FBYztRQUNkLGdCQUFnQjtRQUNoQixVQUFVO1FBQ1YsV0FBVztRQUNYLFVBQVU7UUFDVixZQUFZO1FBQ1osVUFBVTtRQUNWLGFBQWE7UUFDYixrQkFBa0I7UUFDbEIsc0JBQXNCO1FBQ3RCLDBCQUEwQjtRQUMxQixVQUFVO1FBQ1Ysd0NBQXdDO1FBQ3hDLG9CQUFvQjtRQUNwQixvQkFBb0IsRUFHVSxjQUFjLEVBQUUsd0NBQXdDLEVBQUUsb0JBQW9COzJGQUV2RywyQkFBMkI7a0JBeEJ2QyxRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUN0QyxPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixVQUFVO3dCQUNWLFdBQVc7d0JBQ1gsVUFBVTt3QkFDVixZQUFZO3dCQUNaLFVBQVU7d0JBQ1YsYUFBYTt3QkFDYixrQkFBa0I7d0JBQ2xCLHNCQUFzQjt3QkFDdEIsMEJBQTBCO3dCQUMxQixVQUFVO3dCQUNWLHdDQUF3Qzt3QkFDeEMsb0JBQW9CO3dCQUNwQixvQkFBb0I7cUJBQ3ZCO29CQUNELFNBQVMsRUFBRSxDQUFDLHVCQUF1QixDQUFDO29CQUNwQyxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsd0NBQXdDLEVBQUUsb0JBQW9CLENBQUM7aUJBQ3BIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQgeyBDaGVja2JveE1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jaGVja2JveCc7XG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50U2VydmljZSwgVGVtcGxhdGVNb2R1bGUsIFBpcGVNb2R1bGUsIE11bHRpQW5ub3VuY2VyTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgRm9ybU1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9mb3JtJztcbmltcG9ydCB7IElucHV0R3JvdXBNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaW5wdXQtZ3JvdXAnO1xuaW1wb3J0IHsgTGlzdE1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9saXN0JztcbmltcG9ydCB7IFBvcG92ZXJNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBUb2tlbk1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS90b2tlbic7XG5pbXBvcnQgeyBJMThuTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IFBsYXRmb3JtTGlzdE1vZHVsZSwgU3RhbmRhcmRMaXN0SXRlbU1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vbGlzdCc7XG5pbXBvcnQgeyBNdWx0aUNvbWJvYm94Q29tcG9uZW50IH0gZnJvbSAnLi9tdWx0aS1jb21ib2JveC9tdWx0aS1jb21ib2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGxhdGZvcm1BdXRvQ29tcGxldGVNb2R1bGUgfSBmcm9tICcuLi9hdXRvLWNvbXBsZXRlL2F1dG8tY29tcGxldGUubW9kdWxlJztcbmltcG9ydCB7IFBsYXRmb3JtQ29udGVudERlbnNpdHlEZXByZWNhdGlvbnNNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW011bHRpQ29tYm9ib3hDb21wb25lbnRdLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgQ2hlY2tib3hNb2R1bGUsXG4gICAgICAgIElucHV0R3JvdXBNb2R1bGUsXG4gICAgICAgIFBpcGVNb2R1bGUsXG4gICAgICAgIFRva2VuTW9kdWxlLFxuICAgICAgICBMaXN0TW9kdWxlLFxuICAgICAgICBCdXR0b25Nb2R1bGUsXG4gICAgICAgIEZvcm1Nb2R1bGUsXG4gICAgICAgIFBvcG92ZXJNb2R1bGUsXG4gICAgICAgIFBsYXRmb3JtTGlzdE1vZHVsZSxcbiAgICAgICAgU3RhbmRhcmRMaXN0SXRlbU1vZHVsZSxcbiAgICAgICAgUGxhdGZvcm1BdXRvQ29tcGxldGVNb2R1bGUsXG4gICAgICAgIEkxOG5Nb2R1bGUsXG4gICAgICAgIFBsYXRmb3JtQ29udGVudERlbnNpdHlEZXByZWNhdGlvbnNNb2R1bGUsXG4gICAgICAgIENvbnRlbnREZW5zaXR5TW9kdWxlLFxuICAgICAgICBNdWx0aUFubm91bmNlck1vZHVsZVxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbRHluYW1pY0NvbXBvbmVudFNlcnZpY2VdLFxuICAgIGV4cG9ydHM6IFtNdWx0aUNvbWJvYm94Q29tcG9uZW50LCBUZW1wbGF0ZU1vZHVsZSwgUGxhdGZvcm1Db250ZW50RGVuc2l0eURlcHJlY2F0aW9uc01vZHVsZSwgQ29udGVudERlbnNpdHlNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIFBsYXRmb3JtTXVsdGlDb21ib2JveE1vZHVsZSB7fVxuIl19
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktY29tYm9ib3gubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vbXVsdGktY29tYm9ib3gvbXVsdGktY29tYm9ib3gubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7QUEwQjdFLE1BQU0sT0FBTywyQkFBMkI7O3dIQUEzQiwyQkFBMkI7eUhBQTNCLDJCQUEyQixpQkF2QnJCLHNCQUFzQixhQUVqQyxZQUFZO1FBQ1osV0FBVztRQUNYLGNBQWM7UUFDZCxnQkFBZ0I7UUFDaEIsVUFBVTtRQUNWLFdBQVc7UUFDWCxVQUFVO1FBQ1YsWUFBWTtRQUNaLFVBQVU7UUFDVixhQUFhO1FBQ2Isa0JBQWtCO1FBQ2xCLHNCQUFzQjtRQUN0QiwwQkFBMEI7UUFDMUIsVUFBVTtRQUNWLHdDQUF3QztRQUN4QyxvQkFBb0I7UUFDcEIsb0JBQW9CLGFBR2Qsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLHdDQUF3QyxFQUFFLG9CQUFvQjt5SEFFdkcsMkJBQTJCLGFBSHpCLENBQUMsdUJBQXVCLENBQUMsWUFsQmhDLFlBQVk7UUFDWixXQUFXO1FBQ1gsY0FBYztRQUNkLGdCQUFnQjtRQUNoQixVQUFVO1FBQ1YsV0FBVztRQUNYLFVBQVU7UUFDVixZQUFZO1FBQ1osVUFBVTtRQUNWLGFBQWE7UUFDYixrQkFBa0I7UUFDbEIsc0JBQXNCO1FBQ3RCLDBCQUEwQjtRQUMxQixVQUFVO1FBQ1Ysd0NBQXdDO1FBQ3hDLG9CQUFvQjtRQUNwQixvQkFBb0IsRUFHVSxjQUFjLEVBQUUsd0NBQXdDLEVBQUUsb0JBQW9COzJGQUV2RywyQkFBMkI7a0JBeEJ2QyxRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUN0QyxPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixVQUFVO3dCQUNWLFdBQVc7d0JBQ1gsVUFBVTt3QkFDVixZQUFZO3dCQUNaLFVBQVU7d0JBQ1YsYUFBYTt3QkFDYixrQkFBa0I7d0JBQ2xCLHNCQUFzQjt3QkFDdEIsMEJBQTBCO3dCQUMxQixVQUFVO3dCQUNWLHdDQUF3Qzt3QkFDeEMsb0JBQW9CO3dCQUNwQixvQkFBb0I7cUJBQ3ZCO29CQUNELFNBQVMsRUFBRSxDQUFDLHVCQUF1QixDQUFDO29CQUNwQyxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsd0NBQXdDLEVBQUUsb0JBQW9CLENBQUM7aUJBQ3BIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQgeyBDaGVja2JveE1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jaGVja2JveCc7XG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50U2VydmljZSwgVGVtcGxhdGVNb2R1bGUsIFBpcGVNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBNdWx0aUFubm91bmNlck1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tdWx0aS1jb21ib2JveCc7XG5pbXBvcnQgeyBGb3JtTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgSW5wdXRHcm91cE1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pbnB1dC1ncm91cCc7XG5pbXBvcnQgeyBMaXN0TW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xpc3QnO1xuaW1wb3J0IHsgUG9wb3Zlck1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9wb3BvdmVyJztcbmltcG9ydCB7IFRva2VuTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Rva2VuJztcbmltcG9ydCB7IEkxOG5Nb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgUGxhdGZvcm1MaXN0TW9kdWxlLCBTdGFuZGFyZExpc3RJdGVtTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9saXN0JztcbmltcG9ydCB7IE11bHRpQ29tYm9ib3hDb21wb25lbnQgfSBmcm9tICcuL211bHRpLWNvbWJvYm94L211bHRpLWNvbWJvYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQbGF0Zm9ybUF1dG9Db21wbGV0ZU1vZHVsZSB9IGZyb20gJy4uL2F1dG8tY29tcGxldGUvYXV0by1jb21wbGV0ZS5tb2R1bGUnO1xuaW1wb3J0IHsgUGxhdGZvcm1Db250ZW50RGVuc2l0eURlcHJlY2F0aW9uc01vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5TW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbTXVsdGlDb21ib2JveENvbXBvbmVudF0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBDaGVja2JveE1vZHVsZSxcbiAgICAgICAgSW5wdXRHcm91cE1vZHVsZSxcbiAgICAgICAgUGlwZU1vZHVsZSxcbiAgICAgICAgVG9rZW5Nb2R1bGUsXG4gICAgICAgIExpc3RNb2R1bGUsXG4gICAgICAgIEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgRm9ybU1vZHVsZSxcbiAgICAgICAgUG9wb3Zlck1vZHVsZSxcbiAgICAgICAgUGxhdGZvcm1MaXN0TW9kdWxlLFxuICAgICAgICBTdGFuZGFyZExpc3RJdGVtTW9kdWxlLFxuICAgICAgICBQbGF0Zm9ybUF1dG9Db21wbGV0ZU1vZHVsZSxcbiAgICAgICAgSTE4bk1vZHVsZSxcbiAgICAgICAgUGxhdGZvcm1Db250ZW50RGVuc2l0eURlcHJlY2F0aW9uc01vZHVsZSxcbiAgICAgICAgQ29udGVudERlbnNpdHlNb2R1bGUsXG4gICAgICAgIE11bHRpQW5ub3VuY2VyTW9kdWxlXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtEeW5hbWljQ29tcG9uZW50U2VydmljZV0sXG4gICAgZXhwb3J0czogW011bHRpQ29tYm9ib3hDb21wb25lbnQsIFRlbXBsYXRlTW9kdWxlLCBQbGF0Zm9ybUNvbnRlbnREZW5zaXR5RGVwcmVjYXRpb25zTW9kdWxlLCBDb250ZW50RGVuc2l0eU1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgUGxhdGZvcm1NdWx0aUNvbWJvYm94TW9kdWxlIHt9XG4iXX0=
@@ -231,6 +231,10 @@ export class BaseMultiInput extends CollectionBaseInput {
231
231
  if (this.readonly) {
232
232
  return;
233
233
  }
234
+ if (KeyUtil.isKeyCode(event, TAB) && this.isOpen) {
235
+ this.close();
236
+ return;
237
+ }
234
238
  if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {
235
239
  event.preventDefault();
236
240
  if (event.altKey) {
@@ -579,4 +583,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
579
583
  type: ViewChild,
580
584
  args: ['searchInputElement', { read: ElementRef }]
581
585
  }] } });
582
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tdWx0aS1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9mb3JtL211bHRpLWlucHV0L2Jhc2UtbXVsdGktaW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osSUFBSSxFQUNKLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsSUFBSSxFQUVKLFFBQVEsRUFFUixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBQ0gsR0FBRyxFQUNILFNBQVMsRUFDVCxPQUFPLEVBQ1AsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBQ0wsR0FBRyxFQUNILFFBQVEsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBRS9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBd0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpGLE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIsd0JBQXdCLEVBQ3hCLFlBQVksRUFDWixVQUFVLEVB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QUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQUtOLDBCQUEwQjtzQkFEekIsS0FBSztnQkFLRixLQUFLO3NCQURSLEtBQUs7Z0JBWUcsWUFBWTtzQkFEcEIsTUFBTTtnQkFNRSxlQUFlO3NCQUZ2QixNQUFNO2dCQU9FLGNBQWM7c0JBRnRCLE1BQU07Z0JBTUUsZ0JBQWdCO3NCQUR4QixNQUFNO2dCQUtFLGtCQUFrQjtzQkFEMUIsTUFBTTtnQkFLUCxhQUFhO3NCQURaLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUszQixlQUFlO3NCQURkLGVBQWU7dUJBQUMsaUJBQWlCO2dCQXlCbEMsa0JBQWtCO3NCQURqQixTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTZWxmLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgU2tpcFNlbGYsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdDb250cm9sLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIEFMVCxcbiAgICBCQUNLU1BBQ0UsXG4gICAgQ09OVFJPTCxcbiAgICBET1dOX0FSUk9XLFxuICAgIEVOVEVSLFxuICAgIEVTQ0FQRSxcbiAgICBMRUZUX0FSUk9XLFxuICAgIFJJR0hUX0FSUk9XLFxuICAgIFNISUZULFxuICAgIFRBQixcbiAgICBVUF9BUlJPV1xufSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRGlhbG9nQ29uZmlnIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RpYWxvZyc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eSwgRm9jdXNFc2NhcGVEaXJlY3Rpb24sIEtleVV0aWwsIFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgRmRwTGlzdENvbXBvbmVudCwgTGlzdENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vbGlzdCc7XG5pbXBvcnQgeyBNb2JpbGVNb2RlQ29uZmlnIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21vYmlsZS1tb2RlJztcbmltcG9ydCB7XG4gICAgQ29sbGVjdGlvbkJhc2VJbnB1dCxcbiAgICBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsXG4gICAgaXNEYXRhU291cmNlLFxuICAgIGlzRnVuY3Rpb24sXG4gICAgaXNKc09iamVjdCxcbiAgICBpc09wdGlvbkl0ZW0sXG4gICAgaXNTdHJpbmcsXG4gICAgTWF0Y2hpbmdCeSxcbiAgICBNYXRjaGluZ1N0cmF0ZWd5LFxuICAgIE11bHRpSW5wdXRPcHRpb24sXG4gICAgQXJyYXlNdWx0aUlucHV0RGF0YVNvdXJjZSxcbiAgICBPYnNlcnZhYmxlTXVsdGlJbnB1dERhdGFTb3VyY2UsXG4gICAgTXVsdGlJbnB1dERhdGFTb3VyY2UsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgVGV4dEFsaWdubWVudCB9IGZyb20gJy4uL2NvbWJvYm94JztcbmltcG9ydCB7IE11bHRpSW5wdXRDb25maWcgfSBmcm9tICcuL211bHRpLWlucHV0LmNvbmZpZyc7XG5pbXBvcnQgeyBGRF9GT1JNX0ZJRUxELCBGRF9GT1JNX0ZJRUxEX0NPTlRST0wgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5cbmV4cG9ydCB0eXBlIEZkcE11bHRpSW5wdXREYXRhU291cmNlPFQ+ID0gTXVsdGlJbnB1dERhdGFTb3VyY2U8VD4gfCBPYnNlcnZhYmxlPFRbXT4gfCBUW107XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VNdWx0aUlucHV0IGV4dGVuZHMgQ29sbGVjdGlvbkJhc2VJbnB1dCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICAvKiogUHJvdmlkZXMgbWF4aW11bSBoZWlnaHQgZm9yIHRoZSBvcHRpb25QYW5lbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4SGVpZ2h0ID0gJzI1MHB4JztcblxuICAgIC8qKiBEYXRhc291cmNlIGZvciBzdWdnZXN0aW9uIGxpc3QgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBkYXRhU291cmNlKHZhbHVlOiBGZHBNdWx0aUlucHV0RGF0YVNvdXJjZTxhbnk+KSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURhdGFTb3VyY2UodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBkYXRhU291cmNlKCk6IEZkcE11bHRpSW5wdXREYXRhU291cmNlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgYXV0b2NvbXBsZXRlIHNob3VsZCBiZSBlbmFibGVkOyBFbmFibGVkIGJ5IGRlZmF1bHQgKi9cbiAgICBASW5wdXQoKVxuICAgIGF1dG9Db21wbGV0ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUb2RvOiBOYW1lIG9mIHRoZSBlbnRpdHkgZm9yIHdoaWNoIERhdGFQcm92aWRlciB3aWxsIGJlIGxvYWRlZC4gWW91IGNhbiBlaXRoZXIgcGFzcyBsaXN0IG9mXG4gICAgICogaXRlbXMgb3IgdXNlIHRoaXMgZW50aXR5Q2xhc3MgYW5kIGludGVybmFsbHkgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gbG9va3VwIHRvIHNvbWUgcmVnaXN0cnlcbiAgICAgKiBhbmQgcmV0cmlldmUgdGhlIGJlc3QgbWF0Y2hpbmcgRGF0YVByb3ZpZGVyIHRoYXQgaXMgc2V0IG9uIGFwcGxpY2F0aW9uIGxldmVsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBlbnRpdHlDbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIE11bHRpIElucHV0IHNob3VsZCBiZSBidWlsdCBvbiBtb2JpbGUgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlID0gZmFsc2U7XG5cbiAgICAvKiogTXVsdGkgSW5wdXQgTW9iaWxlIENvbmZpZ3VyYXRpb24sIGl0J3MgYXBwbGllZCBvbmx5LCB3aGVuIG1vYmlsZSBpcyBlbmFibGVkICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVDb25maWc6IE1vYmlsZU1vZGVDb25maWc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIEFkZE9uIEJ1dHRvbiBzaG91bGQgYmUgZm9jdXNhYmxlXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJ1dHRvbkZvY3VzYWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqIFRlbGxzIHRoZSBtdWx0aSBpbnB1dCBpZiB3ZSBuZWVkIHRvIGdyb3VwIGl0ZW1zICovXG4gICAgQElucHV0KClcbiAgICBncm91cCA9IGZhbHNlO1xuXG4gICAgLyoqIEEgZmllbGQgbmFtZSB0byB1c2UgdG8gZ3JvdXAgZGF0YSBieSAoc3VwcG9ydCBkb3R0ZWQgbm90YXRpb24pICovXG4gICAgQElucHV0KClcbiAgICBncm91cEtleT86IHN0cmluZztcblxuICAgIC8qKiBUaGUgZmllbGQgdG8gc2hvdyBkYXRhIGluIHNlY29uZGFyeSBjb2x1bW4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqIFRoZSBmaWVsZCB0byBzaG93IGF2YXRhciBpbWFnZSBkYXRhIGluIHNlY29uZGFyeSBjb2x1bW4gKi9cbiAgICBASW5wdXQoKVxuICAgIGF2YXRhcnNyYz86IHN0cmluZztcblxuICAgIC8qKiBTaG93IHRoZSBzZWNvbmQgY29sdW1uIChBcHBsaWNhYmxlIGZvciB0d28gY29sdW1ucyBsYXlvdXQpICovXG4gICAgQElucHV0KClcbiAgICBzaG93U2Vjb25kYXJ5VGV4dCA9IGZhbHNlO1xuXG4gICAgLyoqIEhvcml6b250YWxseSBhbGlnbiB0ZXh0IGluc2lkZSB0aGUgc2Vjb25kIGNvbHVtbiAoQXBwbGljYWJsZSBmb3IgdHdvIGNvbHVtbnMgbGF5b3V0KSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2Vjb25kYXJ5VGV4dEFsaWdubWVudDogVGV4dEFsaWdubWVudCA9ICdyaWdodCc7XG5cbiAgICAvKiogVHVybnMgb24vb2ZmIEFkanVzdGFibGUgV2lkdGggZmVhdHVyZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gb3BlbiB0aGUgZHJvcGRvd24gd2hlbiB0aGUgYWRkb24gYnV0dG9uIGlzIGNsaWNrZWQuICovXG4gICAgQElucHV0KClcbiAgICBvcGVuRHJvcGRvd25PbkFkZE9uQ2xpY2tlZCA9IHRydWU7XG5cbiAgICAvKiogVmFsdWUgb2YgdGhlIG11bHRpIGlucHV0ICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICAgIHRoaXMuc2V0QXNTZWxlY3RlZCh0aGlzLl9jb252ZXJ0VG9PcHRpb25JdGVtcyhzZWxlY3RlZEl0ZW1zKSk7XG4gICAgICAgIHN1cGVyLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEVtaXRzIGV2ZW50IHdoZW4gdGhlIG1lbnUgaXMgb3BlbmVkL2Nsb3NlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGlzT3BlbkNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkYXRhIGxvYWRpbmcgaXMgc3RhcnRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICByZWFkb25seSBvbkRhdGFSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBmaW5pc2hlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICByZWFkb25seSBvbkRhdGFSZWNlaXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHNlYXJjaCB0ZXJtIGNoYW5nZXMuIFVzZSAqJGV2ZW50KiB0byBhY2Nlc3MgdGhlIG5ldyB0ZXJtLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNlYXJjaFRlcm1DaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICAvKiogRW1pdHMgZXZlbnQgd2hlbiB0aGUgYWRkb24gYnV0dG9uIGlzIGNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgYWRkT25CdXR0b25DbGlja2VkOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChGZHBMaXN0Q29tcG9uZW50KVxuICAgIGxpc3RDb21wb25lbnQ6IExpc3RDb21wb25lbnQ8TXVsdGlJbnB1dE9wdGlvbj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgY3VzdG9tVGVtcGxhdGVzOiBRdWVyeUxpc3Q8VGVtcGxhdGVEaXJlY3RpdmU+O1xuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBDdXN0b20gT3B0aW9uIGl0ZW0gVGVtcGxhdGVcbiAgICAgKiAqL1xuICAgIG9wdGlvbkl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogQ3VzdG9tIEdyb3VwIEhlYWRlciBpdGVtIFRlbXBsYXRlXG4gICAgICogKi9cbiAgICBncm91cEl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogQ3VzdG9tIFNlY29uZGFyeSBpdGVtIFRlbXBsYXRlXG4gICAgICogKi9cbiAgICBzZWNvbmRhcnlJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIEN1c3RvbSBTZWxlY3RlZCBvcHRpb24gaXRlbSBUZW1wbGF0ZVxuICAgICAqICovXG4gICAgc2VsZWN0ZWRJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0RWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHNlYXJjaElucHV0RWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NvbnRlbnREZW5zaXR5OiBDb250ZW50RGVuc2l0eSA9IHRoaXMubXVsdGlJbnB1dENvbmZpZy5jb250ZW50RGVuc2l0eTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgYWJzdHJhY3QgY29udHJvbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBhYnN0cmFjdCBsaXN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogaW5wdXQgdGV4dCBvZiB0aGUgaW5wdXQuICovXG4gICAgaW5wdXRUZXh0OiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgTXVsdGkgSW5wdXQgaXMgb3BlbmVkLiAqL1xuICAgIGlzT3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgY2FuQ2xvc2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhKHRoaXMubW9iaWxlICYmIHRoaXMubW9iaWxlQ29uZmlnLmFwcHJvdmVCdXR0b25UZXh0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIExpc3Qgb2YgbWF0Y2hlZCBzdWdnZXN0aW9uc1xuICAgICAqICovXG4gICAgX3N1Z2dlc3Rpb25zOiBNdWx0aUlucHV0T3B0aW9uW107XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIExpc3Qgb2YgbWF0Y2hlZCBzdWdnZXN0aW9uc1xuICAgICAqICovXG4gICAgX25ld1N1Z2dlc3Rpb25zOiBNdWx0aUlucHV0T3B0aW9uW107XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIE1heCB3aWR0aCBvZiBsaXN0IGNvbnRhaW5lclxuICAgICAqICovXG4gICAgbWF4V2lkdGg/OiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIE1pbiB3aWR0aCBvZiBsaXN0IGNvbnRhaW5lclxuICAgICAqICovXG4gICAgbWluV2lkdGg/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBOZWVkIGZvciBvcGVuaW5nIG1vYmlsZSB2ZXJzaW9uXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb3BlbkNoYW5nZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBlbWl0cyB3aGVuZXZlciB0aGVyZSdyZSBjaGFuZ2VzIHRvIHRoZSBpbnB1dHMsIHRoYXQgYWZmZWN0IHRoZSBkYXRhIGNyZWF0aW9uIGZyb20gZGF0YSBzb3VyY2UgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF91cGRhdGVEYXRhU291cmNlVmFsdWVzJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZGF0YVNvdXJjZTogRmRwTXVsdGlJbnB1dERhdGFTb3VyY2U8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbWF0Y2hpbmdTdHJhdGVneTogTWF0Y2hpbmdTdHJhdGVneSA9IHRoaXMubXVsdGlJbnB1dENvbmZpZy5tYXRjaGluZ1N0cmF0ZWd5O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZHNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9lbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIC8qKiBLZXlzLCB0aGF0IHdvbid0IHRyaWdnZXIgdGhlIHBvcG92ZXIncyBvcGVuIHN0YXRlLCB3aGVuIGRpc3BhdGNoZWQgb24gc2VhcmNoIGlucHV0ICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbm9uT3BlbmluZ0tleXM6IG51bWJlcltdID0gW1xuICAgICAgICBFU0NBUEUsXG4gICAgICAgIEVOVEVSLFxuICAgICAgICBDT05UUk9MLFxuICAgICAgICBUQUIsXG4gICAgICAgIFNISUZULFxuICAgICAgICBVUF9BUlJPVyxcbiAgICAgICAgUklHSFRfQVJST1csXG4gICAgICAgIERPV05fQVJST1csXG4gICAgICAgIExFRlRfQVJST1csXG4gICAgICAgIEFMVCxcbiAgICAgICAgQkFDS1NQQUNFXG4gICAgXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGlzcGxheUZuID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4gdGhpcy5kaXNwbGF5VmFsdWUodmFsdWUpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWNvbmRhcnlGbiA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IHtcbiAgICAgICAgaWYgKGlzT3B0aW9uSXRlbSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5zZWNvbmRhcnlUZXh0ID8/ICcnO1xuICAgICAgICB9IGVsc2UgaWYgKGlzSnNPYmplY3QodmFsdWUpICYmIHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gdGhpcy5vYmplY3RHZXQodmFsdWUsIHRoaXMuZGVzY3JpcHRpb24pO1xuXG4gICAgICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihjdXJyZW50SXRlbSkgPyBjdXJyZW50SXRlbSgpIDogY3VycmVudEl0ZW07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgICAgIHJlYWRvbmx5IGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSByZWFkb25seSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcmVhZG9ubHkgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSByZWFkb25seSBuZ0Zvcm06IE5nRm9ybSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcmVhZG9ubHkgZGlhbG9nQ29uZmlnOiBEaWFsb2dDb25maWcsXG4gICAgICAgIHByb3RlY3RlZCBtdWx0aUlucHV0Q29uZmlnOiBNdWx0aUlucHV0Q29uZmlnLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBASG9zdCgpIEBJbmplY3QoRkRfRk9STV9GSUVMRCkgZm9ybUZpZWxkOiBQbGF0Zm9ybUZvcm1GaWVsZCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTERfQ09OVFJPTCkgZm9ybUNvbnRyb2w6IFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbFxuICAgICkge1xuICAgICAgICBzdXBlcihjZCwgZWxlbWVudFJlZiwgbmdDb250cm9sLCBjb250cm9sQ29udGFpbmVyLCBuZ0Zvcm0sIGZvcm1GaWVsZCwgZm9ybUNvbnRyb2wpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0V2luZG93UmVzaXplKCk7XG4gICAgICAgIHRoaXMuX2Fzc2lnbkN1c3RvbVRlbXBsYXRlcygpO1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCdncm91cCcgaW4gY2hhbmdlcyB8fCAnZ3JvdXBLZXknIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZURhdGFTb3VyY2VWYWx1ZXMkLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG5cbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZSh0aGlzLmRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICAodGhpcy5kYXRhU291cmNlIGFzIE11bHRpSW5wdXREYXRhU291cmNlPGFueT4pLmNsb3NlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZHNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIERlZmluZSBpcyB0aGlzIGl0ZW0gc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBhYnN0cmFjdCBpc1NlbGVjdGVkT3B0aW9uSXRlbShzZWxlY3RlZEl0ZW06IE11bHRpSW5wdXRPcHRpb24pOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEVtaXQgc2VsZWN0IE9wdGlvbkl0ZW1cbiAgICAgKiAqL1xuICAgIGFic3RyYWN0IHNlbGVjdE9wdGlvbkl0ZW0oaXRlbTogTXVsdGlJbnB1dE9wdGlvbik6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRGVmaW5lIHZhbHVlIGFzIHNlbGVjdGVkXG4gICAgICogKi9cbiAgICBhYnN0cmFjdCBzZXRBc1NlbGVjdGVkKGl0ZW06IE11bHRpSW5wdXRPcHRpb25bXSk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWF0aG9kIGZvciBtYXJraW5nIGxpc3Qgb3B0aW9uIGFzIHNlbGVjdGVkLlxuICAgICAqL1xuICAgIGFic3RyYWN0IF9tYXJrTGlzdEl0ZW1zQXNTZWxlY3RlZCgpOiB2b2lkO1xuXG4gICAgLyoqIHdyaXRlIHZhbHVlIGZvciBDb250cm9sVmFsdWVBY2Nlc3NvciAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICAgIHRoaXMuc2V0QXNTZWxlY3RlZCh0aGlzLl9jb252ZXJ0VG9PcHRpb25JdGVtcyhzZWxlY3RlZEl0ZW1zKSk7XG4gICAgICAgIHN1cGVyLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3BvcG92ZXJPcGVuQ2hhbmdlSGFuZGxlKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoIWlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE9wZW5zIHRoZSBzZWxlY3QgcG9wb3ZlciBib2R5LiAqL1xuICAgIG9wZW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdCh0aGlzLmlzT3Blbik7XG4gICAgICAgIHRoaXMub3BlbkNoYW5nZS5uZXh0KHRoaXMuaXNPcGVuKTtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbWFya0xpc3RJdGVtc0FzU2VsZWN0ZWQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0VGV4dCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKiBDbG9zZXMgdGhlIHNlbGVjdCBwb3BvdmVyIGJvZHkuICovXG4gICAgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuc2VhcmNoVGVybUNoYW5nZWQoKTtcbiAgICAgICAgaWYgKCF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICAgICAgICB0aGlzLm9wZW5DaGFuZ2UubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29udmVydE9iamVjdFRvTXVsdGlJbnB1dE9wdGlvbihpdGVtczogYW55W10pOiBNdWx0aUlucHV0T3B0aW9uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydE9iamVjdHNUb09wdGlvbkl0ZW1zKGl0ZW1zKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNlYXJjaFRlcm1DaGFuZ2VkKHRleHQ6IHN0cmluZyA9IHRoaXMuaW5wdXRUZXh0KTogdm9pZCB7XG4gICAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIG1hcC5zZXQoJ3F1ZXJ5JywgdGV4dCk7XG4gICAgICAgIG1hcC5zZXQoJ2xpbWl0JywgMTIpO1xuICAgICAgICB0aGlzLmRzPy5tYXRjaChtYXApO1xuXG4gICAgICAgIHRoaXMuc2VhcmNoVGVybUNoYW5nZS5lbWl0KHRleHQpO1xuXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2hvd0xpc3QoaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzT3BlbiAhPT0gaXNPcGVuKSB7XG4gICAgICAgICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVGVybUNoYW5nZWQoJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlT3B0aW9uSXRlbSh2YWx1ZTogTXVsdGlJbnB1dE9wdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0T3B0aW9uSXRlbSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZVByZXNzRW50ZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHZhbHVlOiBNdWx0aUlucHV0T3B0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmICghS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVOVEVSKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVPcHRpb25JdGVtKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgS2V5ZG93biBvbiBJbnB1dFxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbklucHV0S2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dMaXN0KHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQ/Ll9zZXRDdXJyZW50QWN0aXZlSXRlbUluZGV4KDApO1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudD8ubGlzdEl0ZW1zLmZpcnN0LmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nob29zZU90aGVySXRlbSgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICB0aGlzLl9jaG9vc2VPdGhlckl0ZW0oLTEpO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFU0NBUEUpKSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgdGhpcy5zaG93TGlzdChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWV2ZW50LmN0cmxLZXkgJiYgIUtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCB0aGlzLl9ub25PcGVuaW5nS2V5cykpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0xpc3QodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHBhc3NlZCB0byBsaXN0IGNvbXBvbmVudCAqL1xuICAgIGhhbmRsZUxpc3RGb2N1c0VzY2FwZShkaXJlY3Rpb246IEZvY3VzRXNjYXBlRGlyZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICd1cCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIGdldCBkcygpOiBNdWx0aUlucHV0RGF0YVNvdXJjZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZSBhcyBNdWx0aUlucHV0RGF0YVNvdXJjZTxhbnk+O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgcGlja3Mgb3RoZXIgdmFsdWUgbW92ZWQgZnJvbSBjdXJyZW50IG9uZSBieSBvZmZzZXQsIGNhbGxlZCBvbmx5IHdoZW4gTXVsdGkgSW5wdXQgaXMgY2xvc2VkICovXG4gICAgcHJpdmF0ZSBfY2hvb3NlT3RoZXJJdGVtKG9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSB0aGlzLl9zdWdnZXN0aW9ucy5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZS5sYWJlbCA9PT0gdGhpcy5pbnB1dFRleHQpO1xuXG4gICAgICAgIGlmICh0aGlzLl9zdWdnZXN0aW9uc1tpbmRleCArIG9mZnNldF0pIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlT3B0aW9uSXRlbSh0aGlzLl9zdWdnZXN0aW9uc1tpbmRleCArIG9mZnNldF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXplRGF0YVNvdXJjZShkczogRmRwTXVsdGlJbnB1dERhdGFTb3VyY2U8YW55Pik6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWdnZXN0aW9ucyA9IFtdO1xuXG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2UodGhpcy5kYXRhU291cmNlKSkge1xuICAgICAgICAgICAgKHRoaXMuZGF0YVNvdXJjZSBhcyBNdWx0aUlucHV0RGF0YVNvdXJjZTxhbnk+KS5jbG9zZSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fZHNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENvbnZlcnQgd2hhdGV2ZXIgY29tZXMgaW4gYXMgRGF0YVNvdXJjZSBzbyB3ZSBjYW4gd29yayB3aXRoIGl0IGlkZW50aWNhbGx5XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSB0aGlzLl9vcGVuRGF0YVN0cmVhbShkcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9vcGVuRGF0YVN0cmVhbShkczogRmRwTXVsdGlJbnB1dERhdGFTb3VyY2U8YW55Pik6IE11bHRpSW5wdXREYXRhU291cmNlPGFueT4ge1xuICAgICAgICBjb25zdCBpbml0RGF0YVNvdXJjZSA9IHRoaXMuX3RvRGF0YVN0cmVhbShkcyk7XG5cbiAgICAgICAgaWYgKGluaXREYXRhU291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgW2RhdGFTb3VyY2VdIHNvdXJjZSBkaWQgbm90IG1hdGNoIGFuIGFycmF5LCBPYnNlcnZhYmxlLCBvciBEYXRhU291cmNlYCk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgaXMgc2luZ2xlIHBvaW50IG9mIGRhdGEgZW50cnkgdG8gdGhlIGNvbXBvbmVudC4gV2UgZG9udCB3YW50IHRvIHNldCBkYXRhIG9uIGRpZmZlcmVudFxuICAgICAgICAgKiBwbGFjZXMuIElmIGFueSBuZXcgZGF0YSBjb21lcyBpbiBlaXRoZXIgeW91IGRvIGEgc2VhcmNoIGFuZCB5b3Ugd2FudCB0byBwYXNzIGluaXRpYWwgZGF0YVxuICAgICAgICAgKiBpdHMgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBjb25zdCBkc1N1YiA9IGNvbWJpbmVMYXRlc3QoW2luaXREYXRhU291cmNlLm9wZW4oKSwgdGhpcy5fdXBkYXRlRGF0YVNvdXJjZVZhbHVlcyQucGlwZShzdGFydFdpdGgobnVsbCkpXSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoW2RhdGFdKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnMgPSB0aGlzLl9jb252ZXJ0VG9PcHRpb25JdGVtcyhkYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCdpbml0RGF0YVNvdXJjZS5vcGVuKCkuJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLmFkZChkc1N1Yik7XG5cbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKGluaXREYXRhU291cmNlLm9uRGF0YVJlcXVlc3RlZCgpLnN1YnNjcmliZSh0aGlzLm9uRGF0YVJlcXVlc3RlZCkpO1xuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoaW5pdERhdGFTb3VyY2Uub25EYXRhUmVjZWl2ZWQoKS5zdWJzY3JpYmUodGhpcy5vbkRhdGFSZWNlaXZlZCkpO1xuXG4gICAgICAgIGluaXREYXRhU291cmNlLmRhdGFQcm92aWRlci5zZXRMb29rdXBLZXkodGhpcy5sb29rdXBLZXkpO1xuICAgICAgICBjb25zdCBtYXRjaGluZ0J5OiBNYXRjaGluZ0J5ID0ge1xuICAgICAgICAgICAgZmlyc3RCeTogdGhpcy5fZGlzcGxheUZuXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIG1hdGNoaW5nQnkuc2Vjb25kYXJ5QnkgPSB0aGlzLl9zZWNvbmRhcnlGbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGluaXREYXRhU291cmNlLmRhdGFQcm92aWRlci5zZXRNYXRjaGluZ0J5KG1hdGNoaW5nQnkpO1xuICAgICAgICBpbml0RGF0YVNvdXJjZS5kYXRhUHJvdmlkZXIuc2V0TWF0Y2hpbmdTdHJhdGVneSh0aGlzLl9tYXRjaGluZ1N0cmF0ZWd5KTtcblxuICAgICAgICAvLyBpbml0aWFsIGRhdGEgZmV0Y2hcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBtYXAuc2V0KCdxdWVyeScsICcqJyk7XG4gICAgICAgIG1hcC5zZXQoJ2xpbWl0JywgMTIpO1xuICAgICAgICBpbml0RGF0YVNvdXJjZS5tYXRjaChtYXApO1xuXG4gICAgICAgIHJldHVybiBpbml0RGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RvRGF0YVN0cmVhbShzb3VyY2U6IEZkcE11bHRpSW5wdXREYXRhU291cmNlPGFueT4pOiBNdWx0aUlucHV0RGF0YVNvdXJjZTxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZShzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlIGFzIE11bHRpSW5wdXREYXRhU291cmNlPGFueT47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgICAgICAvLyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRvIHdvcmsgb24gdG9wIG9mIGFycmF5c1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheU11bHRpSW5wdXREYXRhU291cmNlPGFueT4oc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc09ic2VydmFibGUoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlTXVsdGlJbnB1dERhdGFTb3VyY2U8YW55Pihzb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRXaW5kb3dSZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2dldE9wdGlvbnNMaXN0V2lkdGgoKTtcblxuICAgICAgICBpZiAoIXRoaXMuYXV0b1Jlc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fZ2V0T3B0aW9uc0xpc3RXaWR0aCgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE9wdGlvbnNMaXN0V2lkdGgoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICBjb25zdCByZWN0ID0gKHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcignZmQtaW5wdXQtZ3JvdXAnKSBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbEJhcldpZHRoID0gYm9keS5vZmZzZXRXaWR0aCAtIGJvZHkuY2xpZW50V2lkdGg7XG4gICAgICAgIHRoaXMubWF4V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCAtIHNjcm9sbEJhcldpZHRoIC0gcmVjdC5sZWZ0O1xuICAgICAgICB0aGlzLm1pbldpZHRoID0gcmVjdC53aWR0aCAtIDI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBvcmlnaW5hbCBkYXRhIHRvIE9wdGlvbkl0ZW1zIEludGVyZmFjZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb252ZXJ0VG9PcHRpb25JdGVtcyhpdGVtczogYW55W10pOiBNdWx0aUlucHV0T3B0aW9uW10ge1xuICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbMF07XG5cbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGVJc09wdGlvbkl0ZW0gPSBpc09wdGlvbkl0ZW0oaXRlbSk7XG4gICAgICAgIGlmIChlbGVtZW50VHlwZUlzT3B0aW9uSXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zIGFzIE11bHRpSW5wdXRPcHRpb25bXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlSXNPYmplY3QgPSBpc0pzT2JqZWN0KGl0ZW0pO1xuICAgICAgICBpZiAoZWxlbWVudFR5cGVJc09iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRPYmplY3RzVG9PcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50VHlwZUlzU3RyaW5nID0gaXNTdHJpbmcoaXRlbSk7XG4gICAgICAgIGlmIChlbGVtZW50VHlwZUlzU3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydFByaW1pdGl2ZVRvT3B0aW9uSXRlbXMoaXRlbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgZGF0YSB0byBPcHRpb25JdGVtcyBJbnRlcmZhY2VcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29udmVydE9iamVjdHNUb09wdGlvbkl0ZW1zKGl0ZW1zOiBhbnlbXSk6IE11bHRpSW5wdXRPcHRpb25bXSB7XG4gICAgICAgIGlmICh0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXBLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvR3JvdXBPcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93U2Vjb25kYXJ5VGV4dCAmJiB0aGlzLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydE9iamVjdHNUb1NlY29uZGFyeU9wdGlvbkl0ZW1zKGl0ZW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvRGVmYXVsdE9wdGlvbkl0ZW1zKGl0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgb2JqZWN0W10gZGF0YSB0byBHcm91cCBPcHRpb25JdGVtcyBJbnRlcmZhY2VcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29udmVydE9iamVjdHNUb0dyb3VwT3B0aW9uSXRlbXM8Sz4oaXRlbXM6IEtbXSk6IE11bHRpSW5wdXRPcHRpb25bXSB7XG4gICAgICAgIGNvbnN0IGdyb3VwOiB7IFtrZXk6IHN0cmluZ106IEtbXSB9ID0ge307XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgY29uc3Qga2V5VmFsdWUgPSB0aGlzLmdyb3VwS2V5ICYmIGl0ZW1bdGhpcy5ncm91cEtleV07XG4gICAgICAgICAgICBpZiAoIWtleVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZ3JvdXBba2V5VmFsdWVdKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBba2V5VmFsdWVdID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdyb3VwW2tleVZhbHVlXS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGdyb3VwKS5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0SXRlbTogTXVsdGlJbnB1dE9wdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBsYWJlbDoga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICAgIGlzR3JvdXA6IHRydWVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IGdyb3VwW2tleV07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dTZWNvbmRhcnlUZXh0ICYmIHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RJdGVtLmNoaWxkcmVuID0gdGhpcy5fY29udmVydE9iamVjdHNUb1NlY29uZGFyeU9wdGlvbkl0ZW1zKGN1cnJlbnRHcm91cCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0uY2hpbGRyZW4gPSB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvRGVmYXVsdE9wdGlvbkl0ZW1zKGN1cnJlbnRHcm91cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0SXRlbTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBvYmplY3RbXSBkYXRhIHRvIFNlY29uZGFyeSBPcHRpb25JdGVtcyBJbnRlcmZhY2VcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29udmVydE9iamVjdHNUb1NlY29uZGFyeU9wdGlvbkl0ZW1zPEs+KGl0ZW1zOiBLW10pOiBNdWx0aUlucHV0T3B0aW9uW10ge1xuICAgICAgICBjb25zdCBzZWxlY3RJdGVtczogTXVsdGlJbnB1dE9wdGlvbltdID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIHNlbGVjdEl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmRpc3BsYXlWYWx1ZSh2YWx1ZSksXG4gICAgICAgICAgICAgICAgYXZhdGFyU3JjOiB0aGlzLmF2YXRhcnNyYyA/IHRoaXMub2JqZWN0R2V0KHZhbHVlLCB0aGlzLmF2YXRhcnNyYykgOiBudWxsLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uID8gdGhpcy5vYmplY3RHZXQodmFsdWUsIHRoaXMuZGVzY3JpcHRpb24pIDogbnVsbCxcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0SXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBQcmltaXRpdmUgZGF0YShCb29sZWFuLCBTdHJpbmcsIE51bWJlcikgdG8gT3B0aW9uSXRlbXMgSW50ZXJmYWNlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2NvbnZlcnRQcmltaXRpdmVUb09wdGlvbkl0ZW1zKGl0ZW1zOiBhbnlbXSk6IE11bHRpSW5wdXRPcHRpb25bXSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdEl0ZW1zOiBNdWx0aUlucHV0T3B0aW9uW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIHNlbGVjdEl0ZW1zLnB1c2goeyBsYWJlbDogdmFsdWUsIHZhbHVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdEl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgb2JqZWN0W10gdG8gT3B0aW9uSXRlbXMgSW50ZXJmYWNlIChEZWZhdWx0KVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb252ZXJ0T2JqZWN0c1RvRGVmYXVsdE9wdGlvbkl0ZW1zKGl0ZW1zOiBhbnlbXSk6IE11bHRpSW5wdXRPcHRpb25bXSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdEl0ZW1zOiBNdWx0aUlucHV0T3B0aW9uW10gPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgc2VsZWN0SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZGlzcGxheVZhbHVlKHZhbHVlKSxcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0SXRlbXM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBBc3NpZ24gY3VzdG9tIHRlbXBsYXRlc1xuICAgICAqICovXG4gICAgcHJpdmF0ZSBfYXNzaWduQ3VzdG9tVGVtcGxhdGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlcy5mb3JFYWNoKCh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoICh0ZW1wbGF0ZS5nZXROYW1lKCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdvcHRpb25JdGVtVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbkl0ZW1UZW1wbGF0ZSA9IHRlbXBsYXRlLnRlbXBsYXRlUmVmO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdncm91cEl0ZW1UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBJdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc2Vjb25kYXJ5SXRlbVRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWNvbmRhcnlJdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc2VsZWN0ZWRJdGVtVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbVRlbXBsYXRlID0gdGVtcGxhdGUudGVtcGxhdGVSZWY7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
586
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tdWx0aS1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9mb3JtL211bHRpLWlucHV0L2Jhc2UtbXVsdGktaW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osSUFBSSxFQUNKLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsSUFBSSxFQUVKLFFBQVEsRUFFUixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBQ0gsR0FBRyxFQUNILFNBQVMsRUFDVCxPQUFPLEVBQ1AsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBQ0wsR0FBRyxFQUNILFFBQVEsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBRS9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBd0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpGLE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIsd0JBQXdCLEVBQ3hCLFlBQVksRUFDWixVQUFVLEVB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REosS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sV0FBVztzQkFEVixLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBS04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLTiwwQkFBMEI7c0JBRHpCLEtBQUs7Z0JBS0YsS0FBSztzQkFEUixLQUFLO2dCQVlHLFlBQVk7c0JBRHBCLE1BQU07Z0JBTUUsZUFBZTtzQkFGdkIsTUFBTTtnQkFPRSxjQUFjO3NCQUZ0QixNQUFNO2dCQU1FLGdCQUFnQjtzQkFEeEIsTUFBTTtnQkFLRSxrQkFBa0I7c0JBRDFCLE1BQU07Z0JBS1AsYUFBYTtzQkFEWixTQUFTO3VCQUFDLGdCQUFnQjtnQkFLM0IsZUFBZTtzQkFEZCxlQUFlO3VCQUFDLGlCQUFpQjtnQkF5QmxDLGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0LFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2VsZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFNraXBTZWxmLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBBTFQsXG4gICAgQkFDS1NQQUNFLFxuICAgIENPTlRST0wsXG4gICAgRE9XTl9BUlJPVyxcbiAgICBFTlRFUixcbiAgICBFU0NBUEUsXG4gICAgTEVGVF9BUlJPVyxcbiAgICBSSUdIVF9BUlJPVyxcbiAgICBTSElGVCxcbiAgICBUQUIsXG4gICAgVVBfQVJST1dcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcblxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZnJvbUV2ZW50LCBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IERpYWxvZ0NvbmZpZyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kaWFsb2cnO1xuaW1wb3J0IHsgQ29udGVudERlbnNpdHksIEZvY3VzRXNjYXBlRGlyZWN0aW9uLCBLZXlVdGlsLCBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEZkcExpc3RDb21wb25lbnQsIExpc3RDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL2xpc3QnO1xuaW1wb3J0IHsgTW9iaWxlTW9kZUNvbmZpZyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tb2JpbGUtbW9kZSc7XG5pbXBvcnQge1xuICAgIENvbGxlY3Rpb25CYXNlSW5wdXQsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgIGlzRGF0YVNvdXJjZSxcbiAgICBpc0Z1bmN0aW9uLFxuICAgIGlzSnNPYmplY3QsXG4gICAgaXNPcHRpb25JdGVtLFxuICAgIGlzU3RyaW5nLFxuICAgIE1hdGNoaW5nQnksXG4gICAgTWF0Y2hpbmdTdHJhdGVneSxcbiAgICBNdWx0aUlucHV0T3B0aW9uLFxuICAgIEFycmF5TXVsdGlJbnB1dERhdGFTb3VyY2UsXG4gICAgT2JzZXJ2YWJsZU11bHRpSW5wdXREYXRhU291cmNlLFxuICAgIE11bHRpSW5wdXREYXRhU291cmNlLFxuICAgIFBsYXRmb3JtRm9ybUZpZWxkXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7IFRleHRBbGlnbm1lbnQgfSBmcm9tICcuLi9jb21ib2JveCc7XG5pbXBvcnQgeyBNdWx0aUlucHV0Q29uZmlnIH0gZnJvbSAnLi9tdWx0aS1pbnB1dC5jb25maWcnO1xuaW1wb3J0IHsgRkRfRk9STV9GSUVMRCwgRkRfRk9STV9GSUVMRF9DT05UUk9MIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuXG5leHBvcnQgdHlwZSBGZHBNdWx0aUlucHV0RGF0YVNvdXJjZTxUPiA9IE11bHRpSW5wdXREYXRhU291cmNlPFQ+IHwgT2JzZXJ2YWJsZTxUW10+IHwgVFtdO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlTXVsdGlJbnB1dCBleHRlbmRzIENvbGxlY3Rpb25CYXNlSW5wdXQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgLyoqIFByb3ZpZGVzIG1heGltdW0gaGVpZ2h0IGZvciB0aGUgb3B0aW9uUGFuZWwgKi9cbiAgICBASW5wdXQoKVxuICAgIG1heEhlaWdodCA9ICcyNTBweCc7XG5cbiAgICAvKiogRGF0YXNvdXJjZSBmb3Igc3VnZ2VzdGlvbiBsaXN0ICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogRmRwTXVsdGlJbnB1dERhdGFTb3VyY2U8YW55Pikge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVEYXRhU291cmNlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZGF0YVNvdXJjZSgpOiBGZHBNdWx0aUlucHV0RGF0YVNvdXJjZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGF1dG9jb21wbGV0ZSBzaG91bGQgYmUgZW5hYmxlZDsgRW5hYmxlZCBieSBkZWZhdWx0ICovXG4gICAgQElucHV0KClcbiAgICBhdXRvQ29tcGxldGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVG9kbzogTmFtZSBvZiB0aGUgZW50aXR5IGZvciB3aGljaCBEYXRhUHJvdmlkZXIgd2lsbCBiZSBsb2FkZWQuIFlvdSBjYW4gZWl0aGVyIHBhc3MgbGlzdCBvZlxuICAgICAqIGl0ZW1zIG9yIHVzZSB0aGlzIGVudGl0eUNsYXNzIGFuZCBpbnRlcm5hbGx5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIGxvb2t1cCB0byBzb21lIHJlZ2lzdHJ5XG4gICAgICogYW5kIHJldHJpZXZlIHRoZSBiZXN0IG1hdGNoaW5nIERhdGFQcm92aWRlciB0aGF0IGlzIHNldCBvbiBhcHBsaWNhdGlvbiBsZXZlbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZW50aXR5Q2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBNdWx0aSBJbnB1dCBzaG91bGQgYmUgYnVpbHQgb24gbW9iaWxlIG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZSA9IGZhbHNlO1xuXG4gICAgLyoqIE11bHRpIElucHV0IE1vYmlsZSBDb25maWd1cmF0aW9uLCBpdCdzIGFwcGxpZWQgb25seSwgd2hlbiBtb2JpbGUgaXMgZW5hYmxlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlQ29uZmlnOiBNb2JpbGVNb2RlQ29uZmlnO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBBZGRPbiBCdXR0b24gc2hvdWxkIGJlIGZvY3VzYWJsZVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBidXR0b25Gb2N1c2FibGUgPSBmYWxzZTtcblxuICAgIC8qKiBUZWxscyB0aGUgbXVsdGkgaW5wdXQgaWYgd2UgbmVlZCB0byBncm91cCBpdGVtcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ3JvdXAgPSBmYWxzZTtcblxuICAgIC8qKiBBIGZpZWxkIG5hbWUgdG8gdXNlIHRvIGdyb3VwIGRhdGEgYnkgKHN1cHBvcnQgZG90dGVkIG5vdGF0aW9uKSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ3JvdXBLZXk/OiBzdHJpbmc7XG5cbiAgICAvKiogVGhlIGZpZWxkIHRvIHNob3cgZGF0YSBpbiBzZWNvbmRhcnkgY29sdW1uICovXG4gICAgQElucHV0KClcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAgIC8qKiBUaGUgZmllbGQgdG8gc2hvdyBhdmF0YXIgaW1hZ2UgZGF0YSBpbiBzZWNvbmRhcnkgY29sdW1uICovXG4gICAgQElucHV0KClcbiAgICBhdmF0YXJzcmM/OiBzdHJpbmc7XG5cbiAgICAvKiogU2hvdyB0aGUgc2Vjb25kIGNvbHVtbiAoQXBwbGljYWJsZSBmb3IgdHdvIGNvbHVtbnMgbGF5b3V0KSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1NlY29uZGFyeVRleHQgPSBmYWxzZTtcblxuICAgIC8qKiBIb3Jpem9udGFsbHkgYWxpZ24gdGV4dCBpbnNpZGUgdGhlIHNlY29uZCBjb2x1bW4gKEFwcGxpY2FibGUgZm9yIHR3byBjb2x1bW5zIGxheW91dCkgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlY29uZGFyeVRleHRBbGlnbm1lbnQ6IFRleHRBbGlnbm1lbnQgPSAncmlnaHQnO1xuXG4gICAgLyoqIFR1cm5zIG9uL29mZiBBZGp1c3RhYmxlIFdpZHRoIGZlYXR1cmUgKi9cbiAgICBASW5wdXQoKVxuICAgIGF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRvIG9wZW4gdGhlIGRyb3Bkb3duIHdoZW4gdGhlIGFkZG9uIGJ1dHRvbiBpcyBjbGlja2VkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgb3BlbkRyb3Bkb3duT25BZGRPbkNsaWNrZWQgPSB0cnVlO1xuXG4gICAgLyoqIFZhbHVlIG9mIHRoZSBtdWx0aSBpbnB1dCAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICB0aGlzLnNldEFzU2VsZWN0ZWQodGhpcy5fY29udmVydFRvT3B0aW9uSXRlbXMoc2VsZWN0ZWRJdGVtcykpO1xuICAgICAgICBzdXBlci5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBFbWl0cyBldmVudCB3aGVuIHRoZSBtZW51IGlzIG9wZW5lZC9jbG9zZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBpc09wZW5DaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0YSBsb2FkaW5nIGlzIHN0YXJ0ZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgcmVhZG9ubHkgb25EYXRhUmVxdWVzdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkYXRhIGxvYWRpbmcgaXMgZmluaXNoZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgcmVhZG9ubHkgb25EYXRhUmVjZWl2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBzZWFyY2ggdGVybSBjaGFuZ2VzLiBVc2UgKiRldmVudCogdG8gYWNjZXNzIHRoZSBuZXcgdGVybS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWFyY2hUZXJtQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgLyoqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIGFkZG9uIGJ1dHRvbiBpcyBjbGlja2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGFkZE9uQnV0dG9uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoRmRwTGlzdENvbXBvbmVudClcbiAgICBsaXN0Q29tcG9uZW50OiBMaXN0Q29tcG9uZW50PE11bHRpSW5wdXRPcHRpb24+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlRGlyZWN0aXZlKVxuICAgIGN1c3RvbVRlbXBsYXRlczogUXVlcnlMaXN0PFRlbXBsYXRlRGlyZWN0aXZlPjtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogQ3VzdG9tIE9wdGlvbiBpdGVtIFRlbXBsYXRlXG4gICAgICogKi9cbiAgICBvcHRpb25JdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIEN1c3RvbSBHcm91cCBIZWFkZXIgaXRlbSBUZW1wbGF0ZVxuICAgICAqICovXG4gICAgZ3JvdXBJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIEN1c3RvbSBTZWNvbmRhcnkgaXRlbSBUZW1wbGF0ZVxuICAgICAqICovXG4gICAgc2Vjb25kYXJ5SXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBDdXN0b20gU2VsZWN0ZWQgb3B0aW9uIGl0ZW0gVGVtcGxhdGVcbiAgICAgKiAqL1xuICAgIHNlbGVjdGVkSXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dEVsZW1lbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBzZWFyY2hJbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jb250ZW50RGVuc2l0eTogQ29udGVudERlbnNpdHkgPSB0aGlzLm11bHRpSW5wdXRDb25maWcuY29udGVudERlbnNpdHk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGFic3RyYWN0IGNvbnRyb2xUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgYWJzdHJhY3QgbGlzdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIGlucHV0IHRleHQgb2YgdGhlIGlucHV0LiAqL1xuICAgIGlucHV0VGV4dDogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIE11bHRpIElucHV0IGlzIG9wZW5lZC4gKi9cbiAgICBpc09wZW4gPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGNhbkNsb3NlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISh0aGlzLm1vYmlsZSAmJiB0aGlzLm1vYmlsZUNvbmZpZy5hcHByb3ZlQnV0dG9uVGV4dCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBMaXN0IG9mIG1hdGNoZWQgc3VnZ2VzdGlvbnNcbiAgICAgKiAqL1xuICAgIF9zdWdnZXN0aW9uczogTXVsdGlJbnB1dE9wdGlvbltdO1xuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBMaXN0IG9mIG1hdGNoZWQgc3VnZ2VzdGlvbnNcbiAgICAgKiAqL1xuICAgIF9uZXdTdWdnZXN0aW9uczogTXVsdGlJbnB1dE9wdGlvbltdO1xuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBNYXggd2lkdGggb2YgbGlzdCBjb250YWluZXJcbiAgICAgKiAqL1xuICAgIG1heFdpZHRoPzogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBNaW4gd2lkdGggb2YgbGlzdCBjb250YWluZXJcbiAgICAgKiAqL1xuICAgIG1pbldpZHRoPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogTmVlZCBmb3Igb3BlbmluZyBtb2JpbGUgdmVyc2lvblxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9wZW5DaGFuZ2UgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gZW1pdHMgd2hlbmV2ZXIgdGhlcmUncmUgY2hhbmdlcyB0byB0aGUgaW5wdXRzLCB0aGF0IGFmZmVjdCB0aGUgZGF0YSBjcmVhdGlvbiBmcm9tIGRhdGEgc291cmNlICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdXBkYXRlRGF0YVNvdXJjZVZhbHVlcyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2RhdGFTb3VyY2U6IEZkcE11bHRpSW5wdXREYXRhU291cmNlPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21hdGNoaW5nU3RyYXRlZ3k6IE1hdGNoaW5nU3RyYXRlZ3kgPSB0aGlzLm11bHRpSW5wdXRDb25maWcubWF0Y2hpbmdTdHJhdGVneTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RzU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAvKiogS2V5cywgdGhhdCB3b24ndCB0cmlnZ2VyIHRoZSBwb3BvdmVyJ3Mgb3BlbiBzdGF0ZSwgd2hlbiBkaXNwYXRjaGVkIG9uIHNlYXJjaCBpbnB1dCAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX25vbk9wZW5pbmdLZXlzOiBudW1iZXJbXSA9IFtcbiAgICAgICAgRVNDQVBFLFxuICAgICAgICBFTlRFUixcbiAgICAgICAgQ09OVFJPTCxcbiAgICAgICAgVEFCLFxuICAgICAgICBTSElGVCxcbiAgICAgICAgVVBfQVJST1csXG4gICAgICAgIFJJR0hUX0FSUk9XLFxuICAgICAgICBET1dOX0FSUk9XLFxuICAgICAgICBMRUZUX0FSUk9XLFxuICAgICAgICBBTFQsXG4gICAgICAgIEJBQ0tTUEFDRVxuICAgIF07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Rpc3BsYXlGbiA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IHRoaXMuZGlzcGxheVZhbHVlKHZhbHVlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2Vjb25kYXJ5Rm4gPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XG4gICAgICAgIGlmIChpc09wdGlvbkl0ZW0odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc2Vjb25kYXJ5VGV4dCA/PyAnJztcbiAgICAgICAgfSBlbHNlIGlmIChpc0pzT2JqZWN0KHZhbHVlKSAmJiB0aGlzLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SXRlbSA9IHRoaXMub2JqZWN0R2V0KHZhbHVlLCB0aGlzLmRlc2NyaXB0aW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oY3VycmVudEl0ZW0pID8gY3VycmVudEl0ZW0oKSA6IGN1cnJlbnRJdGVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgICAgICByZWFkb25seSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcmVhZG9ubHkgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHJlYWRvbmx5IGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcmVhZG9ubHkgbmdGb3JtOiBOZ0Zvcm0sXG4gICAgICAgIEBPcHRpb25hbCgpIHJlYWRvbmx5IGRpYWxvZ0NvbmZpZzogRGlhbG9nQ29uZmlnLFxuICAgICAgICBwcm90ZWN0ZWQgbXVsdGlJbnB1dENvbmZpZzogTXVsdGlJbnB1dENvbmZpZyxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTEQpIGZvcm1GaWVsZDogUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBIb3N0KCkgQEluamVjdChGRF9GT1JNX0ZJRUxEX0NPTlRST0wpIGZvcm1Db250cm9sOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2xcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY2QsIGVsZW1lbnRSZWYsIG5nQ29udHJvbCwgY29udHJvbENvbnRhaW5lciwgbmdGb3JtLCBmb3JtRmllbGQsIGZvcm1Db250cm9sKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdFdpbmRvd1Jlc2l6ZSgpO1xuICAgICAgICB0aGlzLl9hc3NpZ25DdXN0b21UZW1wbGF0ZXMoKTtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICgnZ3JvdXAnIGluIGNoYW5nZXMgfHwgJ2dyb3VwS2V5JyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVEYXRhU291cmNlVmFsdWVzJC5uZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuXG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2UodGhpcy5kYXRhU291cmNlKSkge1xuICAgICAgICAgICAgKHRoaXMuZGF0YVNvdXJjZSBhcyBNdWx0aUlucHV0RGF0YVNvdXJjZTxhbnk+KS5jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2RzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBEZWZpbmUgaXMgdGhpcyBpdGVtIHNlbGVjdGVkXG4gICAgICovXG4gICAgYWJzdHJhY3QgaXNTZWxlY3RlZE9wdGlvbkl0ZW0oc2VsZWN0ZWRJdGVtOiBNdWx0aUlucHV0T3B0aW9uKTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBFbWl0IHNlbGVjdCBPcHRpb25JdGVtXG4gICAgICogKi9cbiAgICBhYnN0cmFjdCBzZWxlY3RPcHRpb25JdGVtKGl0ZW06IE11bHRpSW5wdXRPcHRpb24pOiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIERlZmluZSB2YWx1ZSBhcyBzZWxlY3RlZFxuICAgICAqICovXG4gICAgYWJzdHJhY3Qgc2V0QXNTZWxlY3RlZChpdGVtOiBNdWx0aUlucHV0T3B0aW9uW10pOiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1hdGhvZCBmb3IgbWFya2luZyBsaXN0IG9wdGlvbiBhcyBzZWxlY3RlZC5cbiAgICAgKi9cbiAgICBhYnN0cmFjdCBfbWFya0xpc3RJdGVtc0FzU2VsZWN0ZWQoKTogdm9pZDtcblxuICAgIC8qKiB3cml0ZSB2YWx1ZSBmb3IgQ29udHJvbFZhbHVlQWNjZXNzb3IgKi9cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICB0aGlzLnNldEFzU2VsZWN0ZWQodGhpcy5fY29udmVydFRvT3B0aW9uSXRlbXMoc2VsZWN0ZWRJdGVtcykpO1xuICAgICAgICBzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wb3BvdmVyT3BlbkNoYW5nZUhhbmRsZShpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBPcGVucyB0aGUgc2VsZWN0IHBvcG92ZXIgYm9keS4gKi9cbiAgICBvcGVuKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQodGhpcy5pc09wZW4pO1xuICAgICAgICB0aGlzLm9wZW5DaGFuZ2UubmV4dCh0aGlzLmlzT3Blbik7XG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21hcmtMaXN0SXRlbXNBc1NlbGVjdGVkKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dFRleHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKiogQ2xvc2VzIHRoZSBzZWxlY3QgcG9wb3ZlciBib2R5LiAqL1xuICAgIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlucHV0VGV4dCA9ICcnO1xuICAgICAgICB0aGlzLnNlYXJjaFRlcm1DaGFuZ2VkKCk7XG4gICAgICAgIGlmICghdGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5vcGVuQ2hhbmdlLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnZlcnRPYmplY3RUb011bHRpSW5wdXRPcHRpb24oaXRlbXM6IGFueVtdKTogTXVsdGlJbnB1dE9wdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRPYmplY3RzVG9PcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZWFyY2hUZXJtQ2hhbmdlZCh0ZXh0OiBzdHJpbmcgPSB0aGlzLmlucHV0VGV4dCk6IHZvaWQge1xuICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBtYXAuc2V0KCdxdWVyeScsIHRleHQpO1xuICAgICAgICBtYXAuc2V0KCdsaW1pdCcsIDEyKTtcbiAgICAgICAgdGhpcy5kcz8ubWF0Y2gobWFwKTtcblxuICAgICAgICB0aGlzLnNlYXJjaFRlcm1DaGFuZ2UuZW1pdCh0ZXh0KTtcblxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNob3dMaXN0KGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4gIT09IGlzT3Blbikge1xuICAgICAgICAgICAgaWYgKGlzT3Blbikge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFRlcm1DaGFuZ2VkKCcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZU9wdGlvbkl0ZW0odmFsdWU6IE11bHRpSW5wdXRPcHRpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbkl0ZW0odmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVQcmVzc0VudGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCB2YWx1ZTogTXVsdGlJbnB1dE9wdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoIUtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFTlRFUikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlT3B0aW9uSXRlbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIEtleWRvd24gb24gSW5wdXRcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25JbnB1dEtleWRvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFRBQikgJiYgdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dMaXN0KHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQ/Ll9zZXRDdXJyZW50QWN0aXZlSXRlbUluZGV4KDApO1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudD8ubGlzdEl0ZW1zLmZpcnN0LmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nob29zZU90aGVySXRlbSgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICB0aGlzLl9jaG9vc2VPdGhlckl0ZW0oLTEpO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFU0NBUEUpKSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgdGhpcy5zaG93TGlzdChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWV2ZW50LmN0cmxLZXkgJiYgIUtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCB0aGlzLl9ub25PcGVuaW5nS2V5cykpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0xpc3QodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHBhc3NlZCB0byBsaXN0IGNvbXBvbmVudCAqL1xuICAgIGhhbmRsZUxpc3RGb2N1c0VzY2FwZShkaXJlY3Rpb246IEZvY3VzRXNjYXBlRGlyZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICd1cCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIGdldCBkcygpOiBNdWx0aUlucHV0RGF0YVNvdXJjZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZSBhcyBNdWx0aUlucHV0RGF0YVNvdXJjZTxhbnk+O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgcGlja3Mgb3RoZXIgdmFsdWUgbW92ZWQgZnJvbSBjdXJyZW50IG9uZSBieSBvZmZzZXQsIGNhbGxlZCBvbmx5IHdoZW4gTXVsdGkgSW5wdXQgaXMgY2xvc2VkICovXG4gICAgcHJpdmF0ZSBfY2hvb3NlT3RoZXJJdGVtKG9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSB0aGlzLl9zdWdnZXN0aW9ucy5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZS5sYWJlbCA9PT0gdGhpcy5pbnB1dFRleHQpO1xuXG4gICAgICAgIGlmICh0aGlzLl9zdWdnZXN0aW9uc1tpbmRleCArIG9mZnNldF0pIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlT3B0aW9uSXRlbSh0aGlzLl9zdWdnZXN0aW9uc1tpbmRleCArIG9mZnNldF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXplRGF0YVNvdXJjZShkczogRmRwTXVsdGlJbnB1dERhdGFTb3VyY2U8YW55Pik6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWdnZXN0aW9ucyA9IFtdO1xuXG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2UodGhpcy5kYXRhU291cmNlKSkge1xuICAgICAgICAgICAgKHRoaXMuZGF0YVNvdXJjZSBhcyBNdWx0aUlucHV0RGF0YVNvdXJjZTxhbnk+KS5jbG9zZSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fZHNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENvbnZlcnQgd2hhdGV2ZXIgY29tZXMgaW4gYXMgRGF0YVNvdXJjZSBzbyB3ZSBjYW4gd29yayB3aXRoIGl0IGlkZW50aWNhbGx5XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSB0aGlzLl9vcGVuRGF0YVN0cmVhbShkcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9vcGVuRGF0YVN0cmVhbShkczogRmRwTXVsdGlJbnB1dERhdGFTb3VyY2U8YW55Pik6IE11bHRpSW5wdXREYXRhU291cmNlPGFueT4ge1xuICAgICAgICBjb25zdCBpbml0RGF0YVNvdXJjZSA9IHRoaXMuX3RvRGF0YVN0cmVhbShkcyk7XG5cbiAgICAgICAgaWYgKGluaXREYXRhU291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgW2RhdGFTb3VyY2VdIHNvdXJjZSBkaWQgbm90IG1hdGNoIGFuIGFycmF5LCBPYnNlcnZhYmxlLCBvciBEYXRhU291cmNlYCk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgaXMgc2luZ2xlIHBvaW50IG9mIGRhdGEgZW50cnkgdG8gdGhlIGNvbXBvbmVudC4gV2UgZG9udCB3YW50IHRvIHNldCBkYXRhIG9uIGRpZmZlcmVudFxuICAgICAgICAgKiBwbGFjZXMuIElmIGFueSBuZXcgZGF0YSBjb21lcyBpbiBlaXRoZXIgeW91IGRvIGEgc2VhcmNoIGFuZCB5b3Ugd2FudCB0byBwYXNzIGluaXRpYWwgZGF0YVxuICAgICAgICAgKiBpdHMgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBjb25zdCBkc1N1YiA9IGNvbWJpbmVMYXRlc3QoW2luaXREYXRhU291cmNlLm9wZW4oKSwgdGhpcy5fdXBkYXRlRGF0YVNvdXJjZVZhbHVlcyQucGlwZShzdGFydFdpdGgobnVsbCkpXSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoW2RhdGFdKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnMgPSB0aGlzLl9jb252ZXJ0VG9PcHRpb25JdGVtcyhkYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCdpbml0RGF0YVNvdXJjZS5vcGVuKCkuJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLmFkZChkc1N1Yik7XG5cbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKGluaXREYXRhU291cmNlLm9uRGF0YVJlcXVlc3RlZCgpLnN1YnNjcmliZSh0aGlzLm9uRGF0YVJlcXVlc3RlZCkpO1xuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoaW5pdERhdGFTb3VyY2Uub25EYXRhUmVjZWl2ZWQoKS5zdWJzY3JpYmUodGhpcy5vbkRhdGFSZWNlaXZlZCkpO1xuXG4gICAgICAgIGluaXREYXRhU291cmNlLmRhdGFQcm92aWRlci5zZXRMb29rdXBLZXkodGhpcy5sb29rdXBLZXkpO1xuICAgICAgICBjb25zdCBtYXRjaGluZ0J5OiBNYXRjaGluZ0J5ID0ge1xuICAgICAgICAgICAgZmlyc3RCeTogdGhpcy5fZGlzcGxheUZuXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIG1hdGNoaW5nQnkuc2Vjb25kYXJ5QnkgPSB0aGlzLl9zZWNvbmRhcnlGbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGluaXREYXRhU291cmNlLmRhdGFQcm92aWRlci5zZXRNYXRjaGluZ0J5KG1hdGNoaW5nQnkpO1xuICAgICAgICBpbml0RGF0YVNvdXJjZS5kYXRhUHJvdmlkZXIuc2V0TWF0Y2hpbmdTdHJhdGVneSh0aGlzLl9tYXRjaGluZ1N0cmF0ZWd5KTtcblxuICAgICAgICAvLyBpbml0aWFsIGRhdGEgZmV0Y2hcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBtYXAuc2V0KCdxdWVyeScsICcqJyk7XG4gICAgICAgIG1hcC5zZXQoJ2xpbWl0JywgMTIpO1xuICAgICAgICBpbml0RGF0YVNvdXJjZS5tYXRjaChtYXApO1xuXG4gICAgICAgIHJldHVybiBpbml0RGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RvRGF0YVN0cmVhbShzb3VyY2U6IEZkcE11bHRpSW5wdXREYXRhU291cmNlPGFueT4pOiBNdWx0aUlucHV0RGF0YVNvdXJjZTxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZShzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlIGFzIE11bHRpSW5wdXREYXRhU291cmNlPGFueT47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgICAgICAvLyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRvIHdvcmsgb24gdG9wIG9mIGFycmF5c1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheU11bHRpSW5wdXREYXRhU291cmNlPGFueT4oc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc09ic2VydmFibGUoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlTXVsdGlJbnB1dERhdGFTb3VyY2U8YW55Pihzb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRXaW5kb3dSZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2dldE9wdGlvbnNMaXN0V2lkdGgoKTtcblxuICAgICAgICBpZiAoIXRoaXMuYXV0b1Jlc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fZ2V0T3B0aW9uc0xpc3RXaWR0aCgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE9wdGlvbnNMaXN0V2lkdGgoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICBjb25zdCByZWN0ID0gKHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcignZmQtaW5wdXQtZ3JvdXAnKSBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbEJhcldpZHRoID0gYm9keS5vZmZzZXRXaWR0aCAtIGJvZHkuY2xpZW50V2lkdGg7XG4gICAgICAgIHRoaXMubWF4V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCAtIHNjcm9sbEJhcldpZHRoIC0gcmVjdC5sZWZ0O1xuICAgICAgICB0aGlzLm1pbldpZHRoID0gcmVjdC53aWR0aCAtIDI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBvcmlnaW5hbCBkYXRhIHRvIE9wdGlvbkl0ZW1zIEludGVyZmFjZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb252ZXJ0VG9PcHRpb25JdGVtcyhpdGVtczogYW55W10pOiBNdWx0aUlucHV0T3B0aW9uW10ge1xuICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbMF07XG5cbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGVJc09wdGlvbkl0ZW0gPSBpc09wdGlvbkl0ZW0oaXRlbSk7XG4gICAgICAgIGlmIChlbGVtZW50VHlwZUlzT3B0aW9uSXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zIGFzIE11bHRpSW5wdXRPcHRpb25bXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlSXNPYmplY3QgPSBpc0pzT2JqZWN0KGl0ZW0pO1xuICAgICAgICBpZiAoZWxlbWVudFR5cGVJc09iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRPYmplY3RzVG9PcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50VHlwZUlzU3RyaW5nID0gaXNTdHJpbmcoaXRlbSk7XG4gICAgICAgIGlmIChlbGVtZW50VHlwZUlzU3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydFByaW1pdGl2ZVRvT3B0aW9uSXRlbXMoaXRlbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgZGF0YSB0byBPcHRpb25JdGVtcyBJbnRlcmZhY2VcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29udmVydE9iamVjdHNUb09wdGlvbkl0ZW1zKGl0ZW1zOiBhbnlbXSk6IE11bHRpSW5wdXRPcHRpb25bXSB7XG4gICAgICAgIGlmICh0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXBLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvR3JvdXBPcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93U2Vjb25kYXJ5VGV4dCAmJiB0aGlzLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydE9iamVjdHNUb1NlY29uZGFyeU9wdGlvbkl0ZW1zKGl0ZW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvRGVmYXVsdE9wdGlvbkl0ZW1zKGl0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgb2JqZWN0W10gZGF0YSB0byBHcm91cCBPcHRpb25JdGVtcyBJbnRlcmZhY2VcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29udmVydE9iamVjdHNUb0dyb3VwT3B0aW9uSXRlbXM8Sz4oaXRlbXM6IEtbXSk6IE11bHRpSW5wdXRPcHRpb25bXSB7XG4gICAgICAgIGNvbnN0IGdyb3VwOiB7IFtrZXk6IHN0cmluZ106IEtbXSB9ID0ge307XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgY29uc3Qga2V5VmFsdWUgPSB0aGlzLmdyb3VwS2V5ICYmIGl0ZW1bdGhpcy5ncm91cEtleV07XG4gICAgICAgICAgICBpZiAoIWtleVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZ3JvdXBba2V5VmFsdWVdKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBba2V5VmFsdWVdID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdyb3VwW2tleVZhbHVlXS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGdyb3VwKS5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0SXRlbTogTXVsdGlJbnB1dE9wdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBsYWJlbDoga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICAgIGlzR3JvdXA6IHRydWVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IGdyb3VwW2tleV07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dTZWNvbmRhcnlUZXh0ICYmIHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RJdGVtLmNoaWxkcmVuID0gdGhpcy5fY29udmVydE9iamVjdHNUb1NlY29uZGFyeU9wdGlvbkl0ZW1zKGN1cnJlbnRHcm91cCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0uY2hpbGRyZW4gPSB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvRGVmYXVsdE9wdGlvbkl0ZW1zKGN1cnJlbnRHcm91cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0SXRlbTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBvYmplY3RbXSBkYXRhIHRvIFNlY29uZGFyeSBPcHRpb25JdGVtcyBJbnRlcmZhY2VcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29udmVydE9iamVjdHNUb1NlY29uZGFyeU9wdGlvbkl0ZW1zPEs+KGl0ZW1zOiBLW10pOiBNdWx0aUlucHV0T3B0aW9uW10ge1xuICAgICAgICBjb25zdCBzZWxlY3RJdGVtczogTXVsdGlJbnB1dE9wdGlvbltdID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIHNlbGVjdEl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmRpc3BsYXlWYWx1ZSh2YWx1ZSksXG4gICAgICAgICAgICAgICAgYXZhdGFyU3JjOiB0aGlzLmF2YXRhcnNyYyA/IHRoaXMub2JqZWN0R2V0KHZhbHVlLCB0aGlzLmF2YXRhcnNyYykgOiBudWxsLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uID8gdGhpcy5vYmplY3RHZXQodmFsdWUsIHRoaXMuZGVzY3JpcHRpb24pIDogbnVsbCxcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0SXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBQcmltaXRpdmUgZGF0YShCb29sZWFuLCBTdHJpbmcsIE51bWJlcikgdG8gT3B0aW9uSXRlbXMgSW50ZXJmYWNlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2NvbnZlcnRQcmltaXRpdmVUb09wdGlvbkl0ZW1zKGl0ZW1zOiBhbnlbXSk6IE11bHRpSW5wdXRPcHRpb25bXSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdEl0ZW1zOiBNdWx0aUlucHV0T3B0aW9uW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIHNlbGVjdEl0ZW1zLnB1c2goeyBsYWJlbDogdmFsdWUsIHZhbHVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdEl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgb2JqZWN0W10gdG8gT3B0aW9uSXRlbXMgSW50ZXJmYWNlIChEZWZhdWx0KVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb252ZXJ0T2JqZWN0c1RvRGVmYXVsdE9wdGlvbkl0ZW1zKGl0ZW1zOiBhbnlbXSk6IE11bHRpSW5wdXRPcHRpb25bXSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdEl0ZW1zOiBNdWx0aUlucHV0T3B0aW9uW10gPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgc2VsZWN0SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZGlzcGxheVZhbHVlKHZhbHVlKSxcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0SXRlbXM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBBc3NpZ24gY3VzdG9tIHRlbXBsYXRlc1xuICAgICAqICovXG4gICAgcHJpdmF0ZSBfYXNzaWduQ3VzdG9tVGVtcGxhdGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlcy5mb3JFYWNoKCh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoICh0ZW1wbGF0ZS5nZXROYW1lKCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdvcHRpb25JdGVtVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbkl0ZW1UZW1wbGF0ZSA9IHRlbXBsYXRlLnRlbXBsYXRlUmVmO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdncm91cEl0ZW1UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBJdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc2Vjb25kYXJ5SXRlbVRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWNvbmRhcnlJdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc2VsZWN0ZWRJdGVtVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbVRlbXBsYXRlID0gdGVtcGxhdGUudGVtcGxhdGVSZWY7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=