geonetwork-ui 2.6.0-dev.600519f47 → 2.6.0-dev.6e0b3d33d

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 (101) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +4 -1
  2. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +45 -15
  3. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +7 -1
  4. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +2 -1
  5. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  6. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  7. package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +4 -3
  8. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +13 -10
  9. package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +19 -34
  10. package/esm2022/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.mjs +59 -0
  11. package/esm2022/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.mjs +50 -29
  12. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +7 -3
  13. package/esm2022/libs/ui/layout/src/index.mjs +2 -1
  14. package/esm2022/libs/ui/layout/src/lib/cell-popin/cell-popin.component.mjs +110 -0
  15. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +20 -10
  16. package/esm2022/libs/ui/layout/src/lib/truncated-text/truncated-text.component.mjs +15 -49
  17. package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +2 -2
  18. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +5 -3
  19. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +16 -8
  20. package/esm2022/translations/de.json +15 -6
  21. package/esm2022/translations/en.json +15 -6
  22. package/esm2022/translations/es.json +14 -5
  23. package/esm2022/translations/fr.json +15 -6
  24. package/esm2022/translations/it.json +14 -5
  25. package/esm2022/translations/nl.json +14 -5
  26. package/esm2022/translations/pt.json +14 -5
  27. package/fesm2022/geonetwork-ui.mjs +867 -624
  28. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  29. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  30. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +8 -2
  31. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  32. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +2 -0
  33. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  34. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts +1 -0
  35. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts.map +1 -1
  36. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +20 -17
  37. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  38. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +3 -0
  39. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  40. package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts.map +1 -1
  41. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +6 -5
  42. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  43. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts +3 -6
  44. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts.map +1 -1
  45. package/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.d.ts +14 -0
  46. package/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.d.ts.map +1 -0
  47. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts +20 -9
  48. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts.map +1 -1
  49. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
  50. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  51. package/libs/ui/layout/src/index.d.ts +1 -0
  52. package/libs/ui/layout/src/index.d.ts.map +1 -1
  53. package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts +28 -0
  54. package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts.map +1 -0
  55. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +4 -2
  56. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -1
  57. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts +5 -10
  58. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts.map +1 -1
  59. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +2 -1
  60. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
  61. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +5 -3
  62. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  63. package/package.json +1 -1
  64. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +7 -0
  65. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +57 -14
  66. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +11 -0
  67. package/src/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.ts +3 -0
  68. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +20 -14
  69. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +3 -0
  70. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +63 -0
  71. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.html +1 -1
  72. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.ts +1 -0
  73. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +1 -0
  74. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +13 -3
  75. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +7 -75
  76. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +20 -51
  77. package/src/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.html +69 -0
  78. package/src/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.ts +61 -0
  79. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.html +96 -37
  80. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.ts +60 -29
  81. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +2 -0
  82. package/src/libs/ui/layout/src/index.ts +1 -0
  83. package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.html +40 -0
  84. package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.ts +141 -0
  85. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +2 -2
  86. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +13 -6
  87. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.html +25 -42
  88. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.ts +10 -49
  89. package/src/libs/ui/layout/src/lib/ui-layout.module.ts +1 -1
  90. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +6 -4
  91. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +1 -0
  92. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +14 -20
  93. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +13 -5
  94. package/translations/de.json +15 -6
  95. package/translations/en.json +15 -6
  96. package/translations/es.json +14 -5
  97. package/translations/fr.json +15 -6
  98. package/translations/it.json +14 -5
  99. package/translations/nl.json +14 -5
  100. package/translations/pt.json +14 -5
  101. package/translations/sk.json +14 -5
@@ -202,6 +202,9 @@ export class Gn4FieldMapper {
202
202
  isPublishedToAll: (output, source) => this.addExtra({
203
203
  isPublishedToAll: selectField(source, 'isPublishedToAll'),
204
204
  }, output),
205
+ isHarvested: (output, source) => this.addExtra({
206
+ isHarvested: selectField(source, 'isHarvested') !== 'false',
207
+ }, output),
205
208
  edit: (output, source) => this.addExtra({
206
209
  edit: selectField(source, 'edit'),
207
210
  }, output),
@@ -375,4 +378,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
375
378
  providedIn: 'root',
376
379
  }]
377
380
  }], ctorParameters: () => [{ type: i1.MetadataUrlService }, { type: i2.LangService }] });
378
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ240LmZpZWxkLm1hcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL21ldGFkYXRhLWNvbnZlcnRlci9zcmMvbGliL2duNC9nbjQuZmllbGQubWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxZQUFZLEVBQ1osVUFBVSxFQUNWLFFBQVEsRUFDUixhQUFhLEVBQ2IsVUFBVSxFQUNWLFdBQVcsRUFDWCxjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLFdBQVcsRUFDWCxxQkFBcUIsRUFDckIscUJBQXFCLEVBRXJCLE1BQU0sR0FDUCxNQUFNLHFCQUFxQixDQUFBO0FBQzVCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDekUsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sMkNBQTJDLENBQUE7QUFRL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBRTdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQTtBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFBOzs7O0FBWXhFLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQ1Usa0JBQXNDLEVBQ3RDLFdBQXdCO1FBRHhCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFHMUIsVUFBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFBO1FBRTdCLFdBQU0sR0FBb0M7WUFDbEQsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQ3JCLElBQUks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QUFHLENBQUMsQ0FBQztZQUMxRCxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN6QixVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN6QixXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNyQix1QkFBdUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3RDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxxREFBcUQ7VUFDcEgsQ0FBQztZQUNELE9BQU8sU0FBUyxDQUFBO1FBQ2xCLENBQUM7UUFDRCxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPLFVBQVUsQ0FBQTtRQUNuQixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDOytHQW5jVSxjQUFjO21IQUFkLGNBQWMsY0FGYixNQUFNOzs0RkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGdldEFycmF5SXRlbSxcbiAgZ2V0QXNBcnJheSxcbiAgZ2V0QXNVcmwsXG4gIGdldEZpcnN0VmFsdWUsXG4gIG1hcENvbnRhY3QsXG4gIG1hcEtleXdvcmRzLFxuICBzZWxlY3RGYWxsYmFjayxcbiAgc2VsZWN0RmFsbGJhY2tGaWVsZHMsXG4gIHNlbGVjdEZpZWxkLFxuICBzZWxlY3RUcmFuc2xhdGVkRmllbGQsXG4gIHNlbGVjdFRyYW5zbGF0ZWRWYWx1ZSxcbiAgU291cmNlV2l0aFVua25vd25Qcm9wcyxcbiAgdG9EYXRlLFxufSBmcm9tICcuL2F0b21pYy1vcGVyYXRpb25zJ1xuaW1wb3J0IHsgTWV0YWRhdGFVcmxTZXJ2aWNlIH0gZnJvbSAnLi9tZXRhZGF0YS11cmwuc2VydmljZSdcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgZ2V0U3RhdHVzRnJvbVN0YXR1c0NvZGUgfSBmcm9tICcuLi9pc28xOTEzOS91dGlscy9zdGF0dXMubWFwcGVyJ1xuaW1wb3J0IHsgZ2V0VXBkYXRlRnJlcXVlbmN5RnJvbUZyZXF1ZW5jeUNvZGUgfSBmcm9tICcuLi9pc28xOTEzOS91dGlscy91cGRhdGUtZnJlcXVlbmN5Lm1hcHBlcidcbmltcG9ydCB7XG4gIENhdGFsb2dSZWNvcmQsXG4gIENvbnN0cmFpbnQsXG4gIERhdGFzZXRTcGF0aWFsRXh0ZW50LFxuICBPbmxpbmVSZXNvdXJjZSxcbiAgT25saW5lUmVzb3VyY2VUeXBlLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9yZWNvcmQnXG5pbXBvcnQgeyBtYXRjaFByb3RvY29sIH0gZnJvbSAnLi4vY29tbW9uL2Rpc3RyaWJ1dGlvbi5tYXBwZXInXG5pbXBvcnQgeyBUaGVzYXVydXMgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgTEFOR18zX1RPXzJfTUFQUEVSLCBMYW5nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdXRpbC9pMThuL3NyYydcbmltcG9ydCB7IGdldFJlc291cmNlVHlwZSwgZ2V0UmV1c2VUeXBlIH0gZnJvbSAnLi4vY29tbW9uL3Jlc291cmNlLXR5cGVzJ1xuXG50eXBlIEVTUmVzcG9uc2VTb3VyY2UgPSBTb3VyY2VXaXRoVW5rbm93blByb3BzXG5cbnR5cGUgRXNGaWVsZE1hcHBlckZuID0gKFxuICBvdXRwdXQ6IFBhcnRpYWw8Q2F0YWxvZ1JlY29yZD4sXG4gIHNvdXJjZTogRVNSZXNwb25zZVNvdXJjZVxuKSA9PiBQYXJ0aWFsPENhdGFsb2dSZWNvcmQ+XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHbjRGaWVsZE1hcHBlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWV0YWRhdGFVcmxTZXJ2aWNlOiBNZXRhZGF0YVVybFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5nU2VydmljZTogTGFuZ1NlcnZpY2VcbiAgKSB7fVxuXG4gIHByaXZhdGUgbGFuZzMgPSB0aGlzLmxhbmdTZXJ2aWNlLmduTGFuZ1xuXG4gIHByb3RlY3RlZCBmaWVsZHM6IFJlY29yZDxzdHJpbmcsIEVzRmllbGRNYXBwZXJGbj4gPSB7XG4gICAgaWQ6IChvdXRwdXQsIHNvdXJjZSkgPT5cbiAgICAgIHRoaXMuYWRkRXh0cmEoeyBpZDogc2VsZWN0RmllbGQoc291cmNlLCAnaWQnKSB9LCBvdXRwdXQpLFxuICAgIHV1aWQ6IChvdXRwdXQsIHNvdXJjZSkgPT4ge1xuICAgICAgY29uc3QgdXVpZCA9IHNlbGVjdEZpZWxkPHN0cmluZz4oc291cmNlLCAndXVpZCcpXG4gICAgICBjb25zdCBsYW5kaW5nUGFnZSA9IGdldEFzVXJsKHRoaXMubWV0YWRhdGFVcmxTZXJ2aWNlLmdldFVybCh1dWlkKSlcbiAgICAgIHJldHVybiB7IC4uLm91dHB1dCwgdW5pcXVlSWRlbnRpZmllcjogdXVpZCwgbGFuZGluZ1BhZ2UgfVxuICAgIH0sXG4gICAgcXVhbGl0eVNjb3JlOiAob3V0cHV0LCBzb3VyY2UpID0+XG4gICAgICB0aGlzLmFkZEV4dHJhKFxuICAgICAgICB7IHF1YWxpdHlTY29yZTogc2VsZWN0RmllbGQoc291cmNlLCAncXVhbGl0eVNjb3JlJykgfSxcbiAgICAgICAgb3V0cHV0XG4gICAgICApLFxuICAgIHJlc291cmNlVGl0bGVPYmplY3Q6IChvdXRwdXQsIHNvdXJjZSkgPT4gKHtcbiAgICAgIC4uLm91dHB1dCxcbiAgICAgIHRpdGxlOiBzZWxlY3RGYWxsYmFjayhcbiAgICAgICAgc2VsZWN0VHJhbnNsYXRlZEZpZWxkKHNvdXJjZSwgJ3Jlc291cmNlVGl0bGVPYmplY3QnLCB0aGlzLmxhbmczKSxcbiAgICAgICAgJ25vIHRpdGxlJ1xuICAgICAgKSxcbiAgICB9KSxcbiAgICByZXNvdXJjZUFic3RyYWN0T2JqZWN0OiAob3V0cHV0LCBzb3VyY2UpID0+ICh7XG4gICAgICAuLi5vdXRwdXQsXG4gICAgICBhYnN0cmFjdDogc2VsZWN0RmFsbGJhY2soXG4gICAgICAgIHNlbGVjdFRyYW5zbGF0ZWRGaWVsZChzb3VyY2UsICdyZXNvdXJjZUFic3RyYWN0T2JqZWN0JywgdGhpcy5sYW5nMyksXG4gICAgICAgICdubyB0aXRsZSdcbiAgICAgICksXG4gICAgfSksXG4gICAgb3ZlcnZpZXc6IChvdXRwdXQsIHNvdXJjZSkgPT4ge1xuICAgICAgY29uc3QgZmlyc3RPdmVydmlldyA9IGdldEZpcnN0VmFsdWUoc2VsZWN0RmllbGQoc291cmNlLCAnb3ZlcnZpZXcnKSlcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gc2VsZWN0VHJhbnNsYXRlZFZhbHVlPHN0cmluZz4oXG4gICAgICAgIHNlbGVjdEZpZWxkKGZpcnN0T3ZlcnZpZXcsICd0ZXh0JyksXG4gICAgICAgIHRoaXMubGFuZzNcbiAgICAgIClcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgb3ZlcnZpZXdzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdXJsOiBnZXRBc1VybChzZWxlY3RGYWxsYmFja0ZpZWxkcyhmaXJzdE92ZXJ2aWV3LCAndXJsJywgJ2RhdGEnKSksXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gPyB7IGRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH1cbiAgICB9LFxuICAgIGNsX3RvcGljOiAob3V0cHV0LCBzb3VyY2UpID0+ICh7XG4gICAgICAuLi5vdXRwdXQsXG4gICAgICB0b3BpY3M6IFtcbiAgICAgICAgLi4uKG91dHB1dC50b3BpY3MgfHwgW10pLFxuICAgICAgICAuLi5nZXRBc0FycmF5KFxuICAgICAgICAgIHNlbGVjdEZpZWxkPFNvdXJjZVdpdGhVbmtub3duUHJvcHNbXT4oc291cmNlLCAnY2xfdG9waWMnKVxuICAgICAgICApLm1hcCgodG9waWMpID0+IHNlbGVjdFRyYW5zbGF0ZWRWYWx1ZTxzdHJpbmc+KHRvcGljLCB0aGlzLmxhbmczKSksXG4gICAgICBdLFxuICAgIH0pLFxuICAgIGNsX3N0YXR1czogKG91dHB1dCwgc291cmNlKSA9PiAoe1xuICAgICAgLi4ub3V0cHV0LFxuICAgICAgc3RhdHVzOiBnZXRTdGF0dXNGcm9tU3RhdHVzQ29kZShcbiAgICAgICAgc2VsZWN0RmllbGQoZ2V0Rmlyc3RWYWx1ZShzZWxlY3RGaWVsZChzb3VyY2UsICdjbF9zdGF0dXMnKSksICdrZXknKVxuICAgICAgKSxcbiAgICB9KSxcbiAgICBjbF9tYWludGVuYW5jZUFuZFVwZGF0ZUZyZXF1ZW5jeTogKG91dHB1dCwgc291cmNlKSA9PiAoe1xuICAgICAgLi4ub3V0cHV0LFxuICAgICAgdXBkYXRlRnJlcXVlbmN5OiBnZXRVcGRhdGVGcmVxdWVuY3lGcm9tRnJlcXVlbmN5Q29kZShcbiAgICAgICAgc2VsZWN0RmllbGQoXG4gICAgICAgICAgZ2V0Rmlyc3RWYWx1ZShcbiAgICAgICAgICAgIHNlbGVjdEZpZWxkKHNvdXJjZSwgJ2NsX21haW50ZW5hbmNlQW5kVXBkYXRlRnJlcXVlbmN5JylcbiAgICAgICAgICApLFxuICAgICAgICAgICdrZXknXG4gICAgICAgIClcbiAgICAgICksXG4gICAgfSksXG4gICAgY3JlYXRpb25EYXRlRm9yUmVzb3VyY2U6IChvdXRwdXQsIHNvdXJjZSkgPT4gKHtcbiAgICAgIC4uLm91dHB1dCxcbiAgICAgIHJlc291cmNlQ3JlYXRlZDogdG9EYXRlKFxuICAgICAgICBnZXRGaXJzdFZhbHVlKHNlbGVjdEZpZWxkPHN0cmluZz4oc291cmNlLCAnY3JlYXRpb25EYXRlRm9yUmVzb3VyY2UnKSlcbiAgICAgICksXG4gICAgfSksXG4gICAgcmV2aXNpb25EYXRlRm9yUmVzb3VyY2U6IChvdXRwdXQsIHNvdXJjZSkgPT4gKHtcbiAgICAgIC4uLm91dHB1dCxcbiAgICAgIHJlc291cmNlVXBkYXRlZDogdG9EYXRlKFxuICAgICAgICBnZXRGaXJzdFZhbHVlKHNlbGVjdEZpZWxkPHN0cmluZz4oc291cmNlLCAncmV2aXNpb25EYXRlRm9yUmVzb3VyY2UnKSlcbiAgICAgICksXG4gICAgfSksXG4gICAgcHVibGljYXRpb25EYXRlRm9yUmVzb3VyY2U6IChvdXRwdXQsIHNvdXJjZSkgPT4gKHtcbiAgICAgIC4uLm91dHB1dCxcbiAgICAgIHJlc291cmNlUHVibGlzaGVkOiB0b0RhdGUoXG4gICAgICAgIHNlbGVjdEZpZWxkPHN0cmluZz4oc291cmNlLCAncHVibGljYXRpb25EYXRlRm9yUmVzb3VyY2UnKVxuICAgICAgKSxcbiAgICB9KSxcbiAgICBjcmVhdGVEYXRlOiAob3V0cHV0LCBzb3VyY2UpID0+ICh7XG4gICAgICAuLi5vdXRwdXQsXG4gICAgICByZWNvcmRDcmVhdGVkOiB0b0RhdGUoc2VsZWN0RmllbGQ8c3RyaW5nPihzb3VyY2UsICdjcmVhdGVEYXRlJykpLFxuICAgIH0pLFxuICAgIGNoYW5nZURhdGU6IChvdXRwdXQsIHNvdXJjZSkgPT4gKHtcbiAgICAgIC4uLm91dHB1dCxcbiAgICAgIHJlY29yZFVwZGF0ZWQ6IHRvRGF0ZShzZWxlY3RGaWVsZDxzdHJpbmc+KHNvdXJjZSwgJ2NoYW5nZURhdGUnKSksXG4gICAgfSksXG4gICAgcHVibGljYXRpb25EYXRlOiAob3V0cHV0LCBzb3VyY2UpID0+ICh7XG4gICAgICAuLi5vdXRwdXQsXG4gICAgICByZWNvcmRQdWJsaXNoZWQ6IHRvRGF0ZShzZWxlY3RGaWVsZDxzdHJpbmc+KHNvdXJjZSwgJ3B1YmxpY2F0aW9uRGF0ZScpKSxcbiAgICB9KSxcbiAgICByZXNvdXJjZUxhbmd1YWdlOiAob3V0cHV0LCBzb3VyY2UpID0+IHtcbiAgICAgIGNvbnN0IGxhbmdMaXN0ID0gZ2V0QXNBcnJheShcbiAgICAgICAgc2VsZWN0RmllbGQ8c3RyaW5nPihzb3VyY2UsICdyZXNvdXJjZUxhbmd1YWdlJylcbiAgICAgIClcbiAgICAgIGNvbnN0IGxhbmd1YWdlcyA9IGxhbmdMaXN0Lm1hcCgobGFuZykgPT4gTEFOR18zX1RPXzJfTUFQUEVSW2xhbmddKVxuICAgICAgY29uc3QgZGVmYXVsdExhbmd1YWdlID0gb3V0cHV0LmRlZmF1bHRMYW5ndWFnZSA/PyBsYW5ndWFnZXNbMF0gPz8gbnVsbCAvLyBzZXQgdGhlIGZpcnN0IGxhbmd1YWdlIGFzIG1haW4gb25lIGFzIGZhbGxiYWNrXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgZGVmYXVsdExhbmd1YWdlLFxuICAgICAgfVxuICAgIH0sXG4gICAgb3RoZXJMYW5ndWFnZTogKG91dHB1dCwgc291cmNlKSA9PiB7XG4gICAgICBjb25zdCBsYW5nTGlzdCA9IGdldEFzQXJyYXkoc2VsZWN0RmllbGQ8c3RyaW5nPihzb3VyY2UsICdvdGhlckxhbmd1YWdlJykpXG4gICAgICBjb25zdCBsYW5ndWFnZXMgPSBsYW5nTGlzdC5tYXAoKGxhbmcpID0+IExBTkdfM19UT18yX01BUFBFUltsYW5nXSlcbiAgICAgIGNvbnN0IGRlZmF1bHRMYW5ndWFnZSA9IG91dHB1dC5kZWZhdWx0TGFuZ3VhZ2UgPz8gbGFuZ3VhZ2VzWzBdID8/IG51bGxcbiAgICAgIGNvbnN0IG90aGVyTGFuZ3VhZ2VzID0gbGFuZ3VhZ2VzLmZpbHRlcihcbiAgICAgICAgKGxhbmcpID0+IGxhbmcgIT09IGRlZmF1bHRMYW5ndWFnZVxuICAgICAgKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIG90aGVyTGFuZ3VhZ2VzLFxuICAgICAgfVxuICAgIH0sXG4gICAgbWFpbkxhbmd1YWdlOiAob3V0cHV0LCBzb3VyY2UpID0+IHtcbiAgICAgIGNvbnN0IGxhbmd1YWdlID0gc2VsZWN0RmllbGQ8c3RyaW5nPihzb3VyY2UsICdtYWluTGFuZ3VhZ2UnKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBkZWZhdWx0TGFuZ3VhZ2U6IGxhbmd1YWdlID8gTEFOR18zX1RPXzJfTUFQUEVSW2xhbmd1YWdlXSA6IG51bGwsXG4gICAgICB9XG4gICAgfSxcbiAgICBsaW5rOiAob3V0cHV0LCBzb3VyY2UpID0+IHtcbiAgICAgIGNvbnN0IHJhd0xpbmtzID0gZ2V0QXNBcnJheShcbiAgICAgICAgc2VsZWN0RmllbGQ8U291cmNlV2l0aFVua25vd25Qcm9wc1tdPihzb3VyY2UsICdsaW5rJylcbiAgICAgIClcbiAgICAgIGNvbnN0IG9ubGluZVJlc291cmNlcyA9IHJhd0xpbmtzXG4gICAgICAgIC5tYXAoKGxpbmspID0+IHRoaXMubWFwTGluayhsaW5rKSlcbiAgICAgICAgLmZpbHRlcigodikgPT4gdiAhPT0gbnVsbClcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgb25saW5lUmVzb3VyY2VzLFxuICAgICAgfSBhcyBDYXRhbG9nUmVjb3JkXG4gICAgfSxcbiAgICBjb250YWN0OiAob3V0cHV0LCBzb3VyY2UpID0+ICh7XG4gICAgICAuLi5vdXRwdXQsXG4gICAgICBjb250YWN0czogW1xuICAgICAgICBtYXBDb250YWN0KGdldEZpcnN0VmFsdWUoc2VsZWN0RmllbGQoc291cmNlLCAnY29udGFjdCcpKSwgdGhpcy5sYW5nMyksXG4gICAgICBdLFxuICAgIH0pLFxuICAgIGNvbnRhY3RGb3JSZXNvdXJjZTogKG91dHB1dCwgc291cmNlKSA9PiAoe1xuICAgICAgLi4ub3V0cHV0LFxuICAgICAgY29udGFjdHNGb3JSZXNvdXJjZTogW1xuICAgICAgICAuLi4oJ2NvbnRhY3RzRm9yUmVzb3VyY2UnIGluIG91dHB1dCAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KG91dHB1dC5jb250YWN0c0ZvclJlc291cmNlKVxuICAgICAgICAgID8gb3V0cHV0LmNvbnRhY3RzRm9yUmVzb3VyY2VcbiAgICAgICAgICA6IFtdKSxcbiAgICAgICAgLi4uZ2V0QXNBcnJheShzZWxlY3RGaWVsZChzb3VyY2UsICdjb250YWN0Rm9yUmVzb3VyY2UnKSkubWFwKFxuICAgICAgICAgIChjb250YWN0KSA9PiBtYXBDb250YWN0KGNvbnRhY3QsIHRoaXMubGFuZzMpXG4gICAgICAgICksXG4gICAgICBdLFxuICAgIH0pLFxuICAgIHNvdXJjZUNhdGFsb2d1ZTogKG91dHB1dCwgc291cmNlKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRFeHRyYShcbiAgICAgICAge1xuICAgICAgICAgIGNhdGFsb2dVdWlkOiBzZWxlY3RGYWxsYmFjayhcbiAgICAgICAgICAgIHNlbGVjdEZpZWxkKHNvdXJjZSwgJ3NvdXJjZUNhdGFsb2d1ZScpLFxuICAgICAgICAgICAgJ25vIHRpdGxlJ1xuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIG91dHB1dFxuICAgICAgKVxuICAgIH0sXG4gICAgYWxsS2V5d29yZHM6IChvdXRwdXQsIHNvdXJjZSkgPT4gKHtcbiAgICAgIC4uLm91dHB1dCxcbiAgICAgIGtleXdvcmRzOiBtYXBLZXl3b3JkcyhcbiAgICAgICAgc2VsZWN0RmllbGQ8VGhlc2F1cnVzW10+KHNvdXJjZSwgJ2FsbEtleXdvcmRzJyksXG4gICAgICAgIHRoaXMubGFuZzNcbiAgICAgICksXG4gICAgfSksXG4gICAgaW5zcGlyZVRoZW1lOiAob3V0cHV0LCBzb3VyY2UpID0+ICh7XG4gICAgICAuLi5vdXRwdXQsXG4gICAgICB0b3BpY3M6IFtcbiAgICAgICAgLi4uKG91dHB1dC50b3BpY3MgfHwgW10pLFxuICAgICAgICAuLi5nZXRBc0FycmF5KHNlbGVjdEZpZWxkKHNvdXJjZSwgJ2luc3BpcmVUaGVtZV9zeW4nKSksXG4gICAgICBdLFxuICAgIH0pLFxuICAgIE1EX0NvbnN0cmFpbnRzVXNlTGltaXRhdGlvbk9iamVjdDogKG91dHB1dCwgc291cmNlKSA9PlxuICAgICAgdGhpcy5jb25zdHJhaW50RmllbGQoXG4gICAgICAgICdvdGhlcicsXG4gICAgICAgIG91dHB1dCxcbiAgICAgICAgZ2V0QXNBcnJheShzZWxlY3RGaWVsZChzb3VyY2UsICdNRF9Db25zdHJhaW50c1VzZUxpbWl0YXRpb25PYmplY3QnKSlcbiAgICAgICksXG4gICAgTURfTGVnYWxDb25zdHJhaW50c1VzZUxpbWl0YXRpb25PYmplY3Q6IChvdXRwdXQsIHNvdXJjZSkgPT5cbiAgICAgIHRoaXMuY29uc3RyYWludEZpZWxkKFxuICAgICAgICAnbGVnYWwnLFxuICAgICAgICBvdXRwdXQsXG4gICAgICAgIGdldEFzQXJyYXkoXG4gICAgICAgICAgc2VsZWN0RmllbGQoc291cmNlLCAnTURfTGVnYWxDb25zdHJhaW50c1VzZUxpbWl0YXRpb25PYmplY3QnKVxuICAgICAgICApXG4gICAgICApLFxuICAgIE1EX0xlZ2FsQ29uc3RyYWludHNPdGhlckNvbnN0cmFpbnRzT2JqZWN0OiAob3V0cHV0LCBzb3VyY2UpID0+XG4gICAgICB0aGlzLmNvbnN0cmFpbnRGaWVsZChcbiAgICAgICAgJ2xlZ2FsJyxcbiAgICAgICAgb3V0cHV0LFxuICAgICAgICBnZXRBc0FycmF5KFxuICAgICAgICAgIHNlbGVjdEZpZWxkKHNvdXJjZSwgJ01EX0xlZ2FsQ29uc3RyYWludHNPdGhlckNvbnN0cmFpbnRzT2JqZWN0JylcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICBNRF9TZWN1cml0eUNvbnN0cmFpbnRzVXNlTGltaXRhdGlvbk9iamVjdDogKG91dHB1dCwgc291cmNlKSA9PlxuICAgICAgdGhpcy5jb25zdHJhaW50RmllbGQoXG4gICAgICAgICdzZWN1cml0eScsXG4gICAgICAgIG91dHB1dCxcbiAgICAgICAgZ2V0QXNBcnJheShcbiAgICAgICAgICBzZWxlY3RGaWVsZChzb3VyY2UsICdNRF9TZWN1cml0eUNvbnN0cmFpbnRzVXNlTGltaXRhdGlvbk9iamVjdCcpXG4gICAgICAgIClcbiAgICAgICksXG4gICAgbGljZW5zZU9iamVjdDogKG91dHB1dCwgc291cmNlKSA9PlxuICAgICAgdGhpcy5jb25zdHJhaW50RmllbGQoXG4gICAgICAgICdsaWNlbnNlJyxcbiAgICAgICAgb3V0cHV0LFxuICAgICAgICBnZXRBc0FycmF5KHNlbGVjdEZpZWxkKHNvdXJjZSwgJ2xpY2Vuc2VPYmplY3QnKSlcbiAgICAgICksXG4gICAgbGluZWFnZU9iamVjdDogKG91dHB1dCwgc291cmNlKSA9PiAoe1xuICAgICAgLi4ub3V0cHV0LFxuICAgICAgbGluZWFnZTogc2VsZWN0VHJhbnNsYXRlZEZpZWxkKHNvdXJjZSwgJ2xpbmVhZ2VPYmplY3QnLCB0aGlzLmxhbmczKSxcbiAgICB9KSxcbiAgICB1c2VyU2F2ZWRDb3VudDogKG91dHB1dCwgc291cmNlKSA9PlxuICAgICAgdGhpcy5hZGRFeHRyYShcbiAgICAgICAge1xuICAgICAgICAgIGZhdm9yaXRlQ291bnQ6IHBhcnNlSW50KHNlbGVjdEZpZWxkKHNvdXJjZSwgJ3VzZXJTYXZlZENvdW50JykpLFxuICAgICAgICB9LFxuICAgICAgICBvdXRwdXRcbiAgICAgICksXG4gICAgaXNPcGVuRGF0YTogKG91dHB1dCwgc291cmNlKSA9PlxuICAgICAgdGhpcy5hZGRFeHRyYShcbiAgICAgICAge1xuICAgICAgICAgIGlzT3BlbkRhdGE6IHNlbGVjdEZpZWxkKHNvdXJjZSwgJ2lzT3BlbkRhdGEnKSAhPT0gJ2ZhbHNlJyxcbiAgICAgICAgfSxcbiAgICAgICAgb3V0cHV0XG4gICAgICApLFxuICAgIGZlYXR1cmVUeXBlczogKG91dHB1dCwgc291cmNlKSA9PlxuICAgICAgdGhpcy5hZGRFeHRyYShcbiAgICAgICAge1xuICAgICAgICAgIGZlYXR1cmVUeXBlczogc2VsZWN0RmllbGQoc291cmNlLCAnZmVhdHVyZVR5cGVzJyksXG4gICAgICAgIH0sXG4gICAgICAgIG91dHB1dFxuICAgICAgKSxcbiAgICByZWxhdGVkOiAob3V0cHV0LCBzb3VyY2UpID0+IHtcbiAgICAgIGNvbnN0IGZjYXRTb3VyY2UgPSBzZWxlY3RGaWVsZChcbiAgICAgICAgZ2V0Rmlyc3RWYWx1ZShcbiAgICAgICAgICBzZWxlY3RGaWVsZChcbiAgICAgICAgICAgIDxTb3VyY2VXaXRoVW5rbm93blByb3BzPnNlbGVjdEZpZWxkKHNvdXJjZSwgJ3JlbGF0ZWQnKSxcbiAgICAgICAgICAgICdmY2F0cydcbiAgICAgICAgICApXG4gICAgICAgICkgPz8ge30sXG4gICAgICAgICdfc291cmNlJ1xuICAgICAgKVxuICAgICAgY29uc3QgZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyOiBzdHJpbmcgPSBzZWxlY3RGaWVsZChcbiAgICAgICAgPFNvdXJjZVdpdGhVbmtub3duUHJvcHM+ZmNhdFNvdXJjZSxcbiAgICAgICAgJ3V1aWQnXG4gICAgICApXG4gICAgICBjb25zdCBzb3VyY2VPZkxpbmtzID0gZ2V0QXNBcnJheShcbiAgICAgICAgc2VsZWN0RmllbGQoXG4gICAgICAgICAgPFNvdXJjZVdpdGhVbmtub3duUHJvcHM+c2VsZWN0RmllbGQoc291cmNlLCAncmVsYXRlZCcpLFxuICAgICAgICAgICdoYXNzb3VyY2VzJ1xuICAgICAgICApXG4gICAgICApXG4gICAgICBjb25zdCBzb3VyY2VPZklkZW50aWZpZXJzOiBzdHJpbmdbXSA9IHNvdXJjZU9mTGlua3NcbiAgICAgICAgLmZpbHRlcigobGluaykgPT4gbGlua1snb3JpZ2luJ10gPT09ICdjYXRhbG9nJylcbiAgICAgICAgLm1hcCgobGluaykgPT4ge1xuICAgICAgICAgIHJldHVybiBzZWxlY3RGaWVsZChcbiAgICAgICAgICAgIHNlbGVjdEZpZWxkKDxTb3VyY2VXaXRoVW5rbm93blByb3BzPmxpbmssICdfc291cmNlJyksXG4gICAgICAgICAgICAndXVpZCdcbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICBjb25zdCBleHRyYVZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+ID0ge31cbiAgICAgIGlmIChmZWF0dXJlQ2F0YWxvZ0lkZW50aWZpZXIpIHtcbiAgICAgICAgZXh0cmFWYWx1ZXMuZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyID0gZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyXG4gICAgICB9XG4gICAgICBpZiAoc291cmNlT2ZJZGVudGlmaWVycyAmJiBzb3VyY2VPZklkZW50aWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXh0cmFWYWx1ZXMuc291cmNlT2ZJZGVudGlmaWVycyA9IHNvdXJjZU9mSWRlbnRpZmllcnNcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhleHRyYVZhbHVlcykubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuYWRkRXh0cmEoZXh0cmFWYWx1ZXMsIG91dHB1dClcbiAgICAgICAgOiBvdXRwdXRcbiAgICB9LFxuICAgIHJlY29yZExpbms6IChvdXRwdXQsIHNvdXJjZSkgPT4ge1xuICAgICAgY29uc3QgcmVjb3JkTGlua3MgPSBnZXRBc0FycmF5KFxuICAgICAgICBzZWxlY3RGaWVsZDxTb3VyY2VXaXRoVW5rbm93blByb3BzW10+KHNvdXJjZSwgJ3JlY29yZExpbmsnKVxuICAgICAgKVxuICAgICAgY29uc3Qgc291cmNlc0lkZW50aWZpZXJzOiBzdHJpbmdbXSA9IHJlY29yZExpbmtzXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGxpbmspID0+IGxpbmtbJ29yaWdpbiddID09PSAnY2F0YWxvZycgJiYgbGlua1sndHlwZSddID09PSAnc291cmNlcydcbiAgICAgICAgKVxuICAgICAgICAubWFwKChsaW5rKSA9PiBzZWxlY3RGaWVsZCg8U291cmNlV2l0aFVua25vd25Qcm9wcz5saW5rLCAndG8nKSlcblxuICAgICAgcmV0dXJuIHNvdXJjZXNJZGVudGlmaWVycyAmJiBzb3VyY2VzSWRlbnRpZmllcnMubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuYWRkRXh0cmEoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNvdXJjZXNJZGVudGlmaWVycyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvdXRwdXRcbiAgICAgICAgICApXG4gICAgICAgIDogb3V0cHV0XG4gICAgfSxcbiAgICBpc1B1Ymxpc2hlZFRvQWxsOiAob3V0cHV0LCBzb3VyY2UpID0+XG4gICAgICB0aGlzLmFkZEV4dHJhKFxuICAgICAgICB7XG4gICAgICAgICAgaXNQdWJsaXNoZWRUb0FsbDogc2VsZWN0RmllbGQoc291cmNlLCAnaXNQdWJsaXNoZWRUb0FsbCcpLFxuICAgICAgICB9LFxuICAgICAgICBvdXRwdXRcbiAgICAgICksXG4gICAgZWRpdDogKG91dHB1dCwgc291cmNlKSA9PlxuICAgICAgdGhpcy5hZGRFeHRyYShcbiAgICAgICAge1xuICAgICAgICAgIGVkaXQ6IHNlbGVjdEZpZWxkKHNvdXJjZSwgJ2VkaXQnKSxcbiAgICAgICAgfSxcbiAgICAgICAgb3V0cHV0XG4gICAgICApLFxuICAgIHVzZXJpbmZvOiAob3V0cHV0LCBzb3VyY2UpID0+XG4gICAgICB0aGlzLmFkZEV4dHJhKFxuICAgICAgICB7XG4gICAgICAgICAgb3duZXJJbmZvOiBzZWxlY3RGaWVsZChzb3VyY2UsICd1c2VyaW5mbycpLFxuICAgICAgICB9LFxuICAgICAgICBvdXRwdXRcbiAgICAgICksXG4gICAgcmVzb3VyY2VUeXBlOiAob3V0cHV0LCBzb3VyY2UpID0+IHtcbiAgICAgIGNvbnN0IHJlc291cmNlVHlwZSA9IGdldEZpcnN0VmFsdWUoc2VsZWN0RmllbGQoc291cmNlLCAncmVzb3VyY2VUeXBlJykpXG4gICAgICBjb25zdCBraW5kID0gZ2V0UmVzb3VyY2VUeXBlKHJlc291cmNlVHlwZSlcbiAgICAgIGNvbnN0IHJldXNlVHlwZSA9IGdldFJldXNlVHlwZShyZXNvdXJjZVR5cGUpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGtpbmQsXG4gICAgICAgIC4uLihyZXVzZVR5cGUgJiYgeyByZXVzZVR5cGUgfSksXG4gICAgICB9IGFzIENhdGFsb2dSZWNvcmRcbiAgICB9LFxuICAgIGdlb206IChvdXRwdXQsIHNvdXJjZSkgPT4ge1xuICAgICAgY29uc3QgZ2VvbXMgPSBnZXRBc0FycmF5KHNlbGVjdEZpZWxkKHNvdXJjZSwgJ2dlb20nKSlcbiAgICAgIGNvbnN0IHNoYXBlcyA9IGdldEFzQXJyYXkoc2VsZWN0RmllbGQoc291cmNlLCAnc2hhcGUnKSlcbiAgICAgIGNvbnN0IGV4dGVudERlc2NyaXB0aW9ucyA9IGdldEFzQXJyYXkoXG4gICAgICAgIHNlbGVjdEZpZWxkKHNvdXJjZSwgJ2V4dGVudERlc2NyaXB0aW9uT2JqZWN0JylcbiAgICAgIClcbiAgICAgIGNvbnN0IHNwYXRpYWxFeHRlbnRzID0gZ2V0QXNBcnJheShzZWxlY3RGaWVsZChzb3VyY2UsICdzcGF0aWFsRXh0ZW50cycpKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBzcGF0aWFsRXh0ZW50czogW1xuICAgICAgICAgIC4uLnNwYXRpYWxFeHRlbnRzLFxuICAgICAgICAgIC4uLmdlb21zLm1hcCgoZ2VvbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gc2VsZWN0VHJhbnNsYXRlZFZhbHVlKFxuICAgICAgICAgICAgICBnZXRBcnJheUl0ZW0oZXh0ZW50RGVzY3JpcHRpb25zLCBpbmRleCksXG4gICAgICAgICAgICAgIHRoaXMubGFuZzNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gc2hhcGVzW2luZGV4XSA/PyBnZW9tXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gIT09IG51bGwgPyB7IGRlc2NyaXB0aW9uIH0gOiBudWxsKSxcbiAgICAgICAgICAgICAgZ2VvbWV0cnksXG4gICAgICAgICAgICB9IGFzIERhdGFzZXRTcGF0aWFsRXh0ZW50XG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9XG4gICAgfSxcbiAgICByZXNvdXJjZVRlbXBvcmFsRXh0ZW50RGF0ZVJhbmdlOiAob3V0cHV0LCBzb3VyY2UpID0+IHtcbiAgICAgIGNvbnN0IHJhbmdlcyA9IGdldEFzQXJyYXkoXG4gICAgICAgIHNlbGVjdEZpZWxkKHNvdXJjZSwgJ3Jlc291cmNlVGVtcG9yYWxFeHRlbnREYXRlUmFuZ2UnKVxuICAgICAgKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICB0ZW1wb3JhbEV4dGVudHM6IHJhbmdlcy5tYXAoKHJhbmdlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhcnQgPSBzZWxlY3RGaWVsZChyYW5nZSwgJ2d0ZScpXG4gICAgICAgICAgY29uc3QgZW5kID0gc2VsZWN0RmllbGQocmFuZ2UsICdsdGUnKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi4oc3RhcnQgIT09IG51bGwgPyB7IHN0YXJ0OiB0b0RhdGUoc3RhcnQpIH0gOiBudWxsKSxcbiAgICAgICAgICAgIC4uLihlbmQgIT09IG51bGwgPyB7IGVuZDogdG9EYXRlKGVuZCkgfSA6IG51bGwpLFxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICB9XG4gICAgfSxcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJpY0ZpZWxkID0gKG91dHB1dCkgPT4gb3V0cHV0XG5cbiAgcHJpdmF0ZSBjb25zdHJhaW50RmllbGQgPSAoXG4gICAgdHlwZTogJ2xpY2Vuc2UnIHwgJ2xlZ2FsJyB8ICdzZWN1cml0eScgfCAnb3RoZXInLFxuICAgIG91dHB1dDogUGFydGlhbDxDYXRhbG9nUmVjb3JkPixcbiAgICBjb25zdHJhaW50QXJyYXk6IFNvdXJjZVdpdGhVbmtub3duUHJvcHNbXVxuICApID0+IHtcbiAgICBsZXQgb3V0cHV0RmllbGQ6IHN0cmluZ1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnbGljZW5zZSc6XG4gICAgICAgIG91dHB1dEZpZWxkID0gJ2xpY2Vuc2VzJ1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnbGVnYWwnOlxuICAgICAgICBvdXRwdXRGaWVsZCA9ICdsZWdhbENvbnN0cmFpbnRzJ1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnc2VjdXJpdHknOlxuICAgICAgICBvdXRwdXRGaWVsZCA9ICdzZWN1cml0eUNvbnN0cmFpbnRzJ1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnb3RoZXInOlxuICAgICAgICBvdXRwdXRGaWVsZCA9ICdvdGhlckNvbnN0cmFpbnRzJ1xuICAgICAgICBicmVha1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXRBcnJheTogQ29uc3RyYWludFtdID1cbiAgICAgIG91dHB1dEZpZWxkIGluIG91dHB1dCA/IG91dHB1dFtvdXRwdXRGaWVsZF0gOiBbXVxuICAgIG91dHB1dEFycmF5LnB1c2goXG4gICAgICAuLi5jb25zdHJhaW50QXJyYXkubWFwKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBzZWxlY3RUcmFuc2xhdGVkVmFsdWUoaXRlbSwgdGhpcy5sYW5nMykgYXMgc3RyaW5nXG4gICAgICAgIGNvbnN0IHVybCA9IGdldEFzVXJsKHNlbGVjdEZpZWxkKGl0ZW0sICdsaW5rJykpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGV4dCxcbiAgICAgICAgICAuLi4odXJsID8geyB1cmwgfSA6IHt9KSxcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApXG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgLi4ub3V0cHV0LFxuICAgICAgW291dHB1dEZpZWxkXTogb3V0cHV0QXJyYXksXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGdldE1hcHBpbmdGbihmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBmaWVsZE5hbWUgaW4gdGhpcy5maWVsZHMgPyB0aGlzLmZpZWxkc1tmaWVsZE5hbWVdIDogdGhpcy5nZW5lcmljRmllbGRcbiAgfVxuXG4gIGdldExpbmtUeXBlKHVybDogc3RyaW5nLCBwcm90b2NvbD86IHN0cmluZyk6IE9ubGluZVJlc291cmNlVHlwZSB7XG4gICAgaWYgKCFwcm90b2NvbCkge1xuICAgICAgcmV0dXJuICdsaW5rJ1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAoL15FU1JJOlJFU1QvLnRlc3QocHJvdG9jb2wpICYmIC9GZWF0dXJlU2VydmVyLy50ZXN0KHVybCkpIHx8XG4gICAgICAvXk9HQzpXTVMvLnRlc3QocHJvdG9jb2wpIHx8XG4gICAgICAvXk9HQzpXRlMvLnRlc3QocHJvdG9jb2wpIHx8XG4gICAgICAvXk9HQzpXTVRTLy50ZXN0KHByb3RvY29sKSB8fFxuICAgICAgL1RNUy9pLnRlc3QocHJvdG9jb2wpIHx8XG4gICAgICAvb2djXFxXKmFwaVxcVypmZWF0dXJlcy9pLnRlc3QocHJvdG9jb2wpIHx8XG4gICAgICAoL15XV1c6RE9XTkxPQUQtLy50ZXN0KHByb3RvY29sKSAmJiAvZGF0YS5nZW9wZi5mci8udGVzdCh1cmwpKSAvLyBUTyBETyA6IGNoYW5nZSB3aXRoIHRoZSBnb29kIHByb3RvY29sIHdoZW4gZGVjaWRlZFxuICAgICkge1xuICAgICAgcmV0dXJuICdzZXJ2aWNlJ1xuICAgIH1cbiAgICBpZiAoL15XV1c6RE9XTkxPQUQvLnRlc3QocHJvdG9jb2wpKSB7XG4gICAgICByZXR1cm4gJ2Rvd25sb2FkJ1xuICAgIH1cbiAgICByZXR1cm4gJ2xpbmsnXG4gIH1cblxuICBtYXBMaW5rID0gKHNvdXJjZUxpbms6IFNvdXJjZVdpdGhVbmtub3duUHJvcHMpOiBPbmxpbmVSZXNvdXJjZSB8IG51bGwgPT4ge1xuICAgIGNvbnN0IHVybCA9IGdldEFzVXJsKFxuICAgICAgc2VsZWN0RmFsbGJhY2soXG4gICAgICAgIHNlbGVjdFRyYW5zbGF0ZWRGaWVsZDxzdHJpbmc+KHNvdXJjZUxpbmssICd1cmxPYmplY3QnLCB0aGlzLmxhbmczKSxcbiAgICAgICAgc2VsZWN0RmllbGQ8c3RyaW5nPihzb3VyY2VMaW5rLCAndXJsJylcbiAgICAgIClcbiAgICApXG4gICAgY29uc3QgbmFtZSA9IHNlbGVjdEZhbGxiYWNrKFxuICAgICAgc2VsZWN0VHJhbnNsYXRlZEZpZWxkPHN0cmluZz4oc291cmNlTGluaywgJ25hbWVPYmplY3QnLCB0aGlzLmxhbmczKSxcbiAgICAgIHNlbGVjdEZpZWxkPHN0cmluZz4oc291cmNlTGluaywgJ25hbWUnKVxuICAgIClcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHNlbGVjdEZhbGxiYWNrKFxuICAgICAgc2VsZWN0VHJhbnNsYXRlZEZpZWxkPHN0cmluZz4oXG4gICAgICAgIHNvdXJjZUxpbmssXG4gICAgICAgICdkZXNjcmlwdGlvbk9iamVjdCcsXG4gICAgICAgIHRoaXMubGFuZzNcbiAgICAgICksXG4gICAgICBzZWxlY3RGaWVsZDxzdHJpbmc+KHNvdXJjZUxpbmssICdkZXNjcmlwdGlvbicpXG4gICAgKVxuICAgIGNvbnN0IGRlc2NyaXB0aW9uTGluayA9IHNlbGVjdEZpZWxkPG9iamVjdD4oc291cmNlTGluaywgJ2Rlc2NyaXB0aW9uT2JqZWN0JylcbiAgICBjb25zdCBhY2Nlc3NSZXN0cmljdGVkID1cbiAgICAgIGRlc2NyaXB0aW9uTGluayAmJlxuICAgICAgJ2xpbmsnIGluIGRlc2NyaXB0aW9uTGluayAmJlxuICAgICAgZGVzY3JpcHRpb25MaW5rLmxpbmsudG9TdHJpbmcoKS5pbmNsdWRlcygnI01EX1Jlc3RyaWN0aW9uQ29kZV9yZXN0cmljdGVkJylcbiAgICAvLyBubyB1cmw6IGZhaWwgZWFybHlcbiAgICBpZiAodXJsID09PSBudWxsKSB7XG4gICAgICAvLyBUT0RPOiBjb2xsZWN0IGVycm9ycyBhdCB0aGUgcmVjb3JkIGxldmVsP1xuICAgICAgY29uc29sZS53YXJuKCdBIGxpbmsgd2l0aG91dCB2YWxpZCBVUkwgd2FzIGZvdW5kJywgc291cmNlTGluaylcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG9jb2wgPSBzZWxlY3RGaWVsZDxzdHJpbmc+KHNvdXJjZUxpbmssICdwcm90b2NvbCcpXG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0TGlua1R5cGUodXJsLnRvU3RyaW5nKCksIHByb3RvY29sKVxuICAgIGNvbnN0IGFjY2Vzc1NlcnZpY2VQcm90b2NvbCA9IG1hdGNoUHJvdG9jb2wocHJvdG9jb2wpXG4gICAgY29uc3QgbWltZVR5cGVNYXRjaGVzID1cbiAgICAgIHByb3RvY29sICYmIHByb3RvY29sLm1hdGNoKC9eV1dXOkRPV05MT0FEOiguK1xcLy4rKSQvKVxuICAgIGNvbnN0IG1pbWVUeXBlID0gbWltZVR5cGVNYXRjaGVzICYmIG1pbWVUeXBlTWF0Y2hlc1sxXVxuXG4gICAgY29uc3QgZGlzdHJpYnV0aW9uID0ge1xuICAgICAgLi4uKG5hbWUgJiYgeyBuYW1lIH0pLFxuICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgfVxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnc2VydmljZSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZGlzdHJpYnV0aW9uLFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgYWNjZXNzU2VydmljZVByb3RvY29sLFxuICAgICAgICAgIGFjY2Vzc1Jlc3RyaWN0ZWQ6IGFjY2Vzc1Jlc3RyaWN0ZWQsXG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmRpc3RyaWJ1dGlvbixcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICB9XG4gICAgICBjYXNlICdkb3dubG9hZCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZGlzdHJpYnV0aW9uLFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgLi4uKG1pbWVUeXBlICYmIHsgbWltZVR5cGUgfSksXG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2VuZHBvaW50JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5kaXN0cmlidXRpb24sXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICBhY2Nlc3NTZXJ2aWNlUHJvdG9jb2w6IGFjY2Vzc1NlcnZpY2VQcm90b2NvbCxcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkRXh0cmEgPSAodmFsdWU6IG9iamVjdCwgb3V0cHV0OiBQYXJ0aWFsPENhdGFsb2dSZWNvcmQ+KSA9PiAoe1xuICAgIC4uLm91dHB1dCxcbiAgICBleHRyYXM6IHsgLi4uKG91dHB1dC5leHRyYXMgfHwge30pLCAuLi52YWx1ZSB9LFxuICB9KVxufVxuIl19
381
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ240LmZpZWxkLm1hcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL21ldGFkYXRhLWNvbnZlcnRlci9zcmMvbGliL2duNC9nbjQuZmllbGQubWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxZQUFZLEVBQ1osVUFBVSxFQUNWLFFBQVEsRUFDUixhQUFhLEVBQ2IsVUFBVSxFQUNWLFdBQVcsRUFDWCxjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLFdBQVcsRUFDWCxxQkFBcUIsRUFDckIscUJBQXFCLEVBRXJCLE1BQU0sR0FDUCxNQUFNLHFCQUFxQixDQUFBO0FBQzVCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDekUsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sMkNBQTJDLENBQUE7QUFRL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBRTdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQTtBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFBOzs7O0FBWXhFLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQ1Usa0JBQXNDLEVBQ3RDLFdBQXdCO1FBRHhCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFHMUIsVUFBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFBO1FBRTdCLFdBQU0sR0FBb0M7WUFDbEQsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQ3JCLElBQUks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R0FBVyxFQUFFLFFBQWlCO1FBQ3hDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE9BQU8sTUFBTSxDQUFBO1FBQ2YsQ0FBQztRQUNELElBQ0UsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUQsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDekIsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDekIsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDckIsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN0QyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMscURBQXFEO1VBQ3BILENBQUM7WUFDRCxPQUFPLFNBQVMsQ0FBQTtRQUNsQixDQUFDO1FBQ0QsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDbkMsT0FBTyxVQUFVLENBQUE7UUFDbkIsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQzsrR0ExY1UsY0FBYzttSEFBZCxjQUFjLGNBRmIsTUFBTTs7NEZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBnZXRBcnJheUl0ZW0sXG4gIGdldEFzQXJyYXksXG4gIGdldEFzVXJsLFxuICBnZXRGaXJzdFZhbHVlLFxuICBtYXBDb250YWN0LFxuICBtYXBLZXl3b3JkcyxcbiAgc2VsZWN0RmFsbGJhY2ssXG4gIHNlbGVjdEZhbGxiYWNrRmllbGRzLFxuICBzZWxlY3RGaWVsZCxcbiAgc2VsZWN0VHJhbnNsYXRlZEZpZWxkLFxuICBzZWxlY3RUcmFuc2xhdGVkVmFsdWUsXG4gIFNvdXJjZVdpdGhVbmtub3duUHJvcHMsXG4gIHRvRGF0ZSxcbn0gZnJvbSAnLi9hdG9taWMtb3BlcmF0aW9ucydcbmltcG9ydCB7IE1ldGFkYXRhVXJsU2VydmljZSB9IGZyb20gJy4vbWV0YWRhdGEtdXJsLnNlcnZpY2UnXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IGdldFN0YXR1c0Zyb21TdGF0dXNDb2RlIH0gZnJvbSAnLi4vaXNvMTkxMzkvdXRpbHMvc3RhdHVzLm1hcHBlcidcbmltcG9ydCB7IGdldFVwZGF0ZUZyZXF1ZW5jeUZyb21GcmVxdWVuY3lDb2RlIH0gZnJvbSAnLi4vaXNvMTkxMzkvdXRpbHMvdXBkYXRlLWZyZXF1ZW5jeS5tYXBwZXInXG5pbXBvcnQge1xuICBDYXRhbG9nUmVjb3JkLFxuICBDb25zdHJhaW50LFxuICBEYXRhc2V0U3BhdGlhbEV4dGVudCxcbiAgT25saW5lUmVzb3VyY2UsXG4gIE9ubGluZVJlc291cmNlVHlwZSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvcmVjb3JkJ1xuaW1wb3J0IHsgbWF0Y2hQcm90b2NvbCB9IGZyb20gJy4uL2NvbW1vbi9kaXN0cmlidXRpb24ubWFwcGVyJ1xuaW1wb3J0IHsgVGhlc2F1cnVzIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IExBTkdfM19UT18yX01BUFBFUiwgTGFuZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvaTE4bi9zcmMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZVR5cGUsIGdldFJldXNlVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9yZXNvdXJjZS10eXBlcydcblxudHlwZSBFU1Jlc3BvbnNlU291cmNlID0gU291cmNlV2l0aFVua25vd25Qcm9wc1xuXG50eXBlIEVzRmllbGRNYXBwZXJGbiA9IChcbiAgb3V0cHV0OiBQYXJ0aWFsPENhdGFsb2dSZWNvcmQ+LFxuICBzb3VyY2U6IEVTUmVzcG9uc2VTb3VyY2VcbikgPT4gUGFydGlhbDxDYXRhbG9nUmVjb3JkPlxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgR240RmllbGRNYXBwZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1ldGFkYXRhVXJsU2VydmljZTogTWV0YWRhdGFVcmxTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGFuZ1NlcnZpY2U6IExhbmdTZXJ2aWNlXG4gICkge31cblxuICBwcml2YXRlIGxhbmczID0gdGhpcy5sYW5nU2VydmljZS5nbkxhbmdcblxuICBwcm90ZWN0ZWQgZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBFc0ZpZWxkTWFwcGVyRm4+ID0ge1xuICAgIGlkOiAob3V0cHV0LCBzb3VyY2UpID0+XG4gICAgICB0aGlzLmFkZEV4dHJhKHsgaWQ6IHNlbGVjdEZpZWxkKHNvdXJjZSwgJ2lkJykgfSwgb3V0cHV0KSxcbiAgICB1dWlkOiAob3V0cHV0LCBzb3VyY2UpID0+IHtcbiAgICAgIGNvbnN0IHV1aWQgPSBzZWxlY3RGaWVsZDxzdHJpbmc+KHNvdXJjZSwgJ3V1aWQnKVxuICAgICAgY29uc3QgbGFuZGluZ1BhZ2UgPSBnZXRBc1VybCh0aGlzLm1ldGFkYXRhVXJsU2VydmljZS5nZXRVcmwodXVpZCkpXG4gICAgICByZXR1cm4geyAuLi5vdXRwdXQsIHVuaXF1ZUlkZW50aWZpZXI6IHV1aWQsIGxhbmRpbmdQYWdlIH1cbiAgICB9LFxuICAgIHF1YWxpdHlTY29yZTogKG91dHB1dCwgc291cmNlKSA9PlxuICAgICAgdGhpcy5hZGRFeHRyYShcbiAgICAgICAgeyBxdWFsaXR5U2NvcmU6IHNlbGVjdEZpZWxkKHNvdXJjZSwgJ3F1YWxpdHlTY29yZScpIH0sXG4gICAgICAgIG91dHB1dFxuICAgICAgKSxcbiAgICByZXNvdXJjZVRpdGxlT2JqZWN0OiAob3V0cHV0LCBzb3VyY2UpID0+ICh7XG4gICAgICAuLi5vdXRwdXQsXG4gICAgICB0aXRsZTogc2VsZWN0RmFsbGJhY2soXG4gICAgICAgIHNlbGVjdFRyYW5zbGF0ZWRGaWVsZChzb3VyY2UsICdyZXNvdXJjZVRpdGxlT2JqZWN0JywgdGhpcy5sYW5nMyksXG4gICAgICAgICdubyB0aXRsZSdcbiAgICAgICksXG4gICAgfSksXG4gICAgcmVzb3VyY2VBYnN0cmFjdE9iamVjdDogKG91dHB1dCwgc291cmNlKSA9PiAoe1xuICAgICAgLi4ub3V0cHV0LFxuICAgICAgYWJzdHJhY3Q6IHNlbGVjdEZhbGxiYWNrKFxuICAgICAgICBzZWxlY3RUcmFuc2xhdGVkRmllbGQoc291cmNlLCAncmVzb3VyY2VBYnN0cmFjdE9iamVjdCcsIHRoaXMubGFuZzMpLFxuICAgICAgICAnbm8gdGl0bGUnXG4gICAgICApLFxuICAgIH0pLFxuICAgIG92ZXJ2aWV3OiAob3V0cHV0LCBzb3VyY2UpID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0T3ZlcnZpZXcgPSBnZXRGaXJzdFZhbHVlKHNlbGVjdEZpZWxkKHNvdXJjZSwgJ292ZXJ2aWV3JykpXG4gICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHNlbGVjdFRyYW5zbGF0ZWRWYWx1ZTxzdHJpbmc+KFxuICAgICAgICBzZWxlY3RGaWVsZChmaXJzdE92ZXJ2aWV3LCAndGV4dCcpLFxuICAgICAgICB0aGlzLmxhbmczXG4gICAgICApXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIG92ZXJ2aWV3czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVybDogZ2V0QXNVcmwoc2VsZWN0RmFsbGJhY2tGaWVsZHMoZmlyc3RPdmVydmlldywgJ3VybCcsICdkYXRhJykpLFxuICAgICAgICAgICAgLi4uKGRlc2NyaXB0aW9uID8geyBkZXNjcmlwdGlvbiB9IDoge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9XG4gICAgfSxcbiAgICBjbF90b3BpYzogKG91dHB1dCwgc291cmNlKSA9PiAoe1xuICAgICAgLi4ub3V0cHV0LFxuICAgICAgdG9waWNzOiBbXG4gICAgICAgIC4uLihvdXRwdXQudG9waWNzIHx8IFtdKSxcbiAgICAgICAgLi4uZ2V0QXNBcnJheShcbiAgICAgICAgICBzZWxlY3RGaWVsZDxTb3VyY2VXaXRoVW5rbm93blByb3BzW10+KHNvdXJjZSwgJ2NsX3RvcGljJylcbiAgICAgICAgKS5tYXAoKHRvcGljKSA9PiBzZWxlY3RUcmFuc2xhdGVkVmFsdWU8c3RyaW5nPih0b3BpYywgdGhpcy5sYW5nMykpLFxuICAgICAgXSxcbiAgICB9KSxcbiAgICBjbF9zdGF0dXM6IChvdXRwdXQsIHNvdXJjZSkgPT4gKHtcbiAgICAgIC4uLm91dHB1dCxcbiAgICAgIHN0YXR1czogZ2V0U3RhdHVzRnJvbVN0YXR1c0NvZGUoXG4gICAgICAgIHNlbGVjdEZpZWxkKGdldEZpcnN0VmFsdWUoc2VsZWN0RmllbGQoc291cmNlLCAnY2xfc3RhdHVzJykpLCAna2V5JylcbiAgICAgICksXG4gICAgfSksXG4gICAgY2xfbWFpbnRlbmFuY2VBbmRVcGRhdGVGcmVxdWVuY3k6IChvdXRwdXQsIHNvdXJjZSkgPT4gKHtcbiAgICAgIC4uLm91dHB1dCxcbiAgICAgIHVwZGF0ZUZyZXF1ZW5jeTogZ2V0VXBkYXRlRnJlcXVlbmN5RnJvbUZyZXF1ZW5jeUNvZGUoXG4gICAgICAgIHNlbGVjdEZpZWxkKFxuICAgICAgICAgIGdldEZpcnN0VmFsdWUoXG4gICAgICAgICAgICBzZWxlY3RGaWVsZChzb3VyY2UsICdjbF9tYWludGVuYW5jZUFuZFVwZGF0ZUZyZXF1ZW5jeScpXG4gICAgICAgICAgKSxcbiAgICAgICAgICAna2V5J1xuICAgICAgICApXG4gICAgICApLFxuICAgIH0pLFxuICAgIGNyZWF0aW9uRGF0ZUZvclJlc291cmNlOiAob3V0cHV0LCBzb3VyY2UpID0+ICh7XG4gICAgICAuLi5vdXRwdXQsXG4gICAgICByZXNvdXJjZUNyZWF0ZWQ6IHRvRGF0ZShcbiAgICAgICAgZ2V0Rmlyc3RWYWx1ZShzZWxlY3RGaWVsZDxzdHJpbmc+KHNvdXJjZSwgJ2NyZWF0aW9uRGF0ZUZvclJlc291cmNlJykpXG4gICAgICApLFxuICAgIH0pLFxuICAgIHJldmlzaW9uRGF0ZUZvclJlc291cmNlOiAob3V0cHV0LCBzb3VyY2UpID0+ICh7XG4gICAgICAuLi5vdXRwdXQsXG4gICAgICByZXNvdXJjZVVwZGF0ZWQ6IHRvRGF0ZShcbiAgICAgICAgZ2V0Rmlyc3RWYWx1ZShzZWxlY3RGaWVsZDxzdHJpbmc+KHNvdXJjZSwgJ3JldmlzaW9uRGF0ZUZvclJlc291cmNlJykpXG4gICAgICApLFxuICAgIH0pLFxuICAgIHB1YmxpY2F0aW9uRGF0ZUZvclJlc291cmNlOiAob3V0cHV0LCBzb3VyY2UpID0+ICh7XG4gICAgICAuLi5vdXRwdXQsXG4gICAgICByZXNvdXJjZVB1Ymxpc2hlZDogdG9EYXRlKFxuICAgICAgICBzZWxlY3RGaWVsZDxzdHJpbmc+KHNvdXJjZSwgJ3B1YmxpY2F0aW9uRGF0ZUZvclJlc291cmNlJylcbiAgICAgICksXG4gICAgfSksXG4gICAgY3JlYXRlRGF0ZTogKG91dHB1dCwgc291cmNlKSA9PiAoe1xuICAgICAgLi4ub3V0cHV0LFxuICAgICAgcmVjb3JkQ3JlYXRlZDogdG9EYXRlKHNlbGVjdEZpZWxkPHN0cmluZz4oc291cmNlLCAnY3JlYXRlRGF0ZScpKSxcbiAgICB9KSxcbiAgICBjaGFuZ2VEYXRlOiAob3V0cHV0LCBzb3VyY2UpID0+ICh7XG4gICAgICAuLi5vdXRwdXQsXG4gICAgICByZWNvcmRVcGRhdGVkOiB0b0RhdGUoc2VsZWN0RmllbGQ8c3RyaW5nPihzb3VyY2UsICdjaGFuZ2VEYXRlJykpLFxuICAgIH0pLFxuICAgIHB1YmxpY2F0aW9uRGF0ZTogKG91dHB1dCwgc291cmNlKSA9PiAoe1xuICAgICAgLi4ub3V0cHV0LFxuICAgICAgcmVjb3JkUHVibGlzaGVkOiB0b0RhdGUoc2VsZWN0RmllbGQ8c3RyaW5nPihzb3VyY2UsICdwdWJsaWNhdGlvbkRhdGUnKSksXG4gICAgfSksXG4gICAgcmVzb3VyY2VMYW5ndWFnZTogKG91dHB1dCwgc291cmNlKSA9PiB7XG4gICAgICBjb25zdCBsYW5nTGlzdCA9IGdldEFzQXJyYXkoXG4gICAgICAgIHNlbGVjdEZpZWxkPHN0cmluZz4oc291cmNlLCAncmVzb3VyY2VMYW5ndWFnZScpXG4gICAgICApXG4gICAgICBjb25zdCBsYW5ndWFnZXMgPSBsYW5nTGlzdC5tYXAoKGxhbmcpID0+IExBTkdfM19UT18yX01BUFBFUltsYW5nXSlcbiAgICAgIGNvbnN0IGRlZmF1bHRMYW5ndWFnZSA9IG91dHB1dC5kZWZhdWx0TGFuZ3VhZ2UgPz8gbGFuZ3VhZ2VzWzBdID8/IG51bGwgLy8gc2V0IHRoZSBmaXJzdCBsYW5ndWFnZSBhcyBtYWluIG9uZSBhcyBmYWxsYmFja1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIGRlZmF1bHRMYW5ndWFnZSxcbiAgICAgIH1cbiAgICB9LFxuICAgIG90aGVyTGFuZ3VhZ2U6IChvdXRwdXQsIHNvdXJjZSkgPT4ge1xuICAgICAgY29uc3QgbGFuZ0xpc3QgPSBnZXRBc0FycmF5KHNlbGVjdEZpZWxkPHN0cmluZz4oc291cmNlLCAnb3RoZXJMYW5ndWFnZScpKVxuICAgICAgY29uc3QgbGFuZ3VhZ2VzID0gbGFuZ0xpc3QubWFwKChsYW5nKSA9PiBMQU5HXzNfVE9fMl9NQVBQRVJbbGFuZ10pXG4gICAgICBjb25zdCBkZWZhdWx0TGFuZ3VhZ2UgPSBvdXRwdXQuZGVmYXVsdExhbmd1YWdlID8/IGxhbmd1YWdlc1swXSA/PyBudWxsXG4gICAgICBjb25zdCBvdGhlckxhbmd1YWdlcyA9IGxhbmd1YWdlcy5maWx0ZXIoXG4gICAgICAgIChsYW5nKSA9PiBsYW5nICE9PSBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgIClcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICBvdGhlckxhbmd1YWdlcyxcbiAgICAgIH1cbiAgICB9LFxuICAgIG1haW5MYW5ndWFnZTogKG91dHB1dCwgc291cmNlKSA9PiB7XG4gICAgICBjb25zdCBsYW5ndWFnZSA9IHNlbGVjdEZpZWxkPHN0cmluZz4oc291cmNlLCAnbWFpbkxhbmd1YWdlJylcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgZGVmYXVsdExhbmd1YWdlOiBsYW5ndWFnZSA/IExBTkdfM19UT18yX01BUFBFUltsYW5ndWFnZV0gOiBudWxsLFxuICAgICAgfVxuICAgIH0sXG4gICAgbGluazogKG91dHB1dCwgc291cmNlKSA9PiB7XG4gICAgICBjb25zdCByYXdMaW5rcyA9IGdldEFzQXJyYXkoXG4gICAgICAgIHNlbGVjdEZpZWxkPFNvdXJjZVdpdGhVbmtub3duUHJvcHNbXT4oc291cmNlLCAnbGluaycpXG4gICAgICApXG4gICAgICBjb25zdCBvbmxpbmVSZXNvdXJjZXMgPSByYXdMaW5rc1xuICAgICAgICAubWFwKChsaW5rKSA9PiB0aGlzLm1hcExpbmsobGluaykpXG4gICAgICAgIC5maWx0ZXIoKHYpID0+IHYgIT09IG51bGwpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIG9ubGluZVJlc291cmNlcyxcbiAgICAgIH0gYXMgQ2F0YWxvZ1JlY29yZFxuICAgIH0sXG4gICAgY29udGFjdDogKG91dHB1dCwgc291cmNlKSA9PiAoe1xuICAgICAgLi4ub3V0cHV0LFxuICAgICAgY29udGFjdHM6IFtcbiAgICAgICAgbWFwQ29udGFjdChnZXRGaXJzdFZhbHVlKHNlbGVjdEZpZWxkKHNvdXJjZSwgJ2NvbnRhY3QnKSksIHRoaXMubGFuZzMpLFxuICAgICAgXSxcbiAgICB9KSxcbiAgICBjb250YWN0Rm9yUmVzb3VyY2U6IChvdXRwdXQsIHNvdXJjZSkgPT4gKHtcbiAgICAgIC4uLm91dHB1dCxcbiAgICAgIGNvbnRhY3RzRm9yUmVzb3VyY2U6IFtcbiAgICAgICAgLi4uKCdjb250YWN0c0ZvclJlc291cmNlJyBpbiBvdXRwdXQgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheShvdXRwdXQuY29udGFjdHNGb3JSZXNvdXJjZSlcbiAgICAgICAgICA/IG91dHB1dC5jb250YWN0c0ZvclJlc291cmNlXG4gICAgICAgICAgOiBbXSksXG4gICAgICAgIC4uLmdldEFzQXJyYXkoc2VsZWN0RmllbGQoc291cmNlLCAnY29udGFjdEZvclJlc291cmNlJykpLm1hcChcbiAgICAgICAgICAoY29udGFjdCkgPT4gbWFwQ29udGFjdChjb250YWN0LCB0aGlzLmxhbmczKVxuICAgICAgICApLFxuICAgICAgXSxcbiAgICB9KSxcbiAgICBzb3VyY2VDYXRhbG9ndWU6IChvdXRwdXQsIHNvdXJjZSkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkRXh0cmEoXG4gICAgICAgIHtcbiAgICAgICAgICBjYXRhbG9nVXVpZDogc2VsZWN0RmFsbGJhY2soXG4gICAgICAgICAgICBzZWxlY3RGaWVsZChzb3VyY2UsICdzb3VyY2VDYXRhbG9ndWUnKSxcbiAgICAgICAgICAgICdubyB0aXRsZSdcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBvdXRwdXRcbiAgICAgIClcbiAgICB9LFxuICAgIGFsbEtleXdvcmRzOiAob3V0cHV0LCBzb3VyY2UpID0+ICh7XG4gICAgICAuLi5vdXRwdXQsXG4gICAgICBrZXl3b3JkczogbWFwS2V5d29yZHMoXG4gICAgICAgIHNlbGVjdEZpZWxkPFRoZXNhdXJ1c1tdPihzb3VyY2UsICdhbGxLZXl3b3JkcycpLFxuICAgICAgICB0aGlzLmxhbmczXG4gICAgICApLFxuICAgIH0pLFxuICAgIGluc3BpcmVUaGVtZTogKG91dHB1dCwgc291cmNlKSA9PiAoe1xuICAgICAgLi4ub3V0cHV0LFxuICAgICAgdG9waWNzOiBbXG4gICAgICAgIC4uLihvdXRwdXQudG9waWNzIHx8IFtdKSxcbiAgICAgICAgLi4uZ2V0QXNBcnJheShzZWxlY3RGaWVsZChzb3VyY2UsICdpbnNwaXJlVGhlbWVfc3luJykpLFxuICAgICAgXSxcbiAgICB9KSxcbiAgICBNRF9Db25zdHJhaW50c1VzZUxpbWl0YXRpb25PYmplY3Q6IChvdXRwdXQsIHNvdXJjZSkgPT5cbiAgICAgIHRoaXMuY29uc3RyYWludEZpZWxkKFxuICAgICAgICAnb3RoZXInLFxuICAgICAgICBvdXRwdXQsXG4gICAgICAgIGdldEFzQXJyYXkoc2VsZWN0RmllbGQoc291cmNlLCAnTURfQ29uc3RyYWludHNVc2VMaW1pdGF0aW9uT2JqZWN0JykpXG4gICAgICApLFxuICAgIE1EX0xlZ2FsQ29uc3RyYWludHNVc2VMaW1pdGF0aW9uT2JqZWN0OiAob3V0cHV0LCBzb3VyY2UpID0+XG4gICAgICB0aGlzLmNvbnN0cmFpbnRGaWVsZChcbiAgICAgICAgJ2xlZ2FsJyxcbiAgICAgICAgb3V0cHV0LFxuICAgICAgICBnZXRBc0FycmF5KFxuICAgICAgICAgIHNlbGVjdEZpZWxkKHNvdXJjZSwgJ01EX0xlZ2FsQ29uc3RyYWludHNVc2VMaW1pdGF0aW9uT2JqZWN0JylcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICBNRF9MZWdhbENvbnN0cmFpbnRzT3RoZXJDb25zdHJhaW50c09iamVjdDogKG91dHB1dCwgc291cmNlKSA9PlxuICAgICAgdGhpcy5jb25zdHJhaW50RmllbGQoXG4gICAgICAgICdsZWdhbCcsXG4gICAgICAgIG91dHB1dCxcbiAgICAgICAgZ2V0QXNBcnJheShcbiAgICAgICAgICBzZWxlY3RGaWVsZChzb3VyY2UsICdNRF9MZWdhbENvbnN0cmFpbnRzT3RoZXJDb25zdHJhaW50c09iamVjdCcpXG4gICAgICAgIClcbiAgICAgICksXG4gICAgTURfU2VjdXJpdHlDb25zdHJhaW50c1VzZUxpbWl0YXRpb25PYmplY3Q6IChvdXRwdXQsIHNvdXJjZSkgPT5cbiAgICAgIHRoaXMuY29uc3RyYWludEZpZWxkKFxuICAgICAgICAnc2VjdXJpdHknLFxuICAgICAgICBvdXRwdXQsXG4gICAgICAgIGdldEFzQXJyYXkoXG4gICAgICAgICAgc2VsZWN0RmllbGQoc291cmNlLCAnTURfU2VjdXJpdHlDb25zdHJhaW50c1VzZUxpbWl0YXRpb25PYmplY3QnKVxuICAgICAgICApXG4gICAgICApLFxuICAgIGxpY2Vuc2VPYmplY3Q6IChvdXRwdXQsIHNvdXJjZSkgPT5cbiAgICAgIHRoaXMuY29uc3RyYWludEZpZWxkKFxuICAgICAgICAnbGljZW5zZScsXG4gICAgICAgIG91dHB1dCxcbiAgICAgICAgZ2V0QXNBcnJheShzZWxlY3RGaWVsZChzb3VyY2UsICdsaWNlbnNlT2JqZWN0JykpXG4gICAgICApLFxuICAgIGxpbmVhZ2VPYmplY3Q6IChvdXRwdXQsIHNvdXJjZSkgPT4gKHtcbiAgICAgIC4uLm91dHB1dCxcbiAgICAgIGxpbmVhZ2U6IHNlbGVjdFRyYW5zbGF0ZWRGaWVsZChzb3VyY2UsICdsaW5lYWdlT2JqZWN0JywgdGhpcy5sYW5nMyksXG4gICAgfSksXG4gICAgdXNlclNhdmVkQ291bnQ6IChvdXRwdXQsIHNvdXJjZSkgPT5cbiAgICAgIHRoaXMuYWRkRXh0cmEoXG4gICAgICAgIHtcbiAgICAgICAgICBmYXZvcml0ZUNvdW50OiBwYXJzZUludChzZWxlY3RGaWVsZChzb3VyY2UsICd1c2VyU2F2ZWRDb3VudCcpKSxcbiAgICAgICAgfSxcbiAgICAgICAgb3V0cHV0XG4gICAgICApLFxuICAgIGlzT3BlbkRhdGE6IChvdXRwdXQsIHNvdXJjZSkgPT5cbiAgICAgIHRoaXMuYWRkRXh0cmEoXG4gICAgICAgIHtcbiAgICAgICAgICBpc09wZW5EYXRhOiBzZWxlY3RGaWVsZChzb3VyY2UsICdpc09wZW5EYXRhJykgIT09ICdmYWxzZScsXG4gICAgICAgIH0sXG4gICAgICAgIG91dHB1dFxuICAgICAgKSxcbiAgICBmZWF0dXJlVHlwZXM6IChvdXRwdXQsIHNvdXJjZSkgPT5cbiAgICAgIHRoaXMuYWRkRXh0cmEoXG4gICAgICAgIHtcbiAgICAgICAgICBmZWF0dXJlVHlwZXM6IHNlbGVjdEZpZWxkKHNvdXJjZSwgJ2ZlYXR1cmVUeXBlcycpLFxuICAgICAgICB9LFxuICAgICAgICBvdXRwdXRcbiAgICAgICksXG4gICAgcmVsYXRlZDogKG91dHB1dCwgc291cmNlKSA9PiB7XG4gICAgICBjb25zdCBmY2F0U291cmNlID0gc2VsZWN0RmllbGQoXG4gICAgICAgIGdldEZpcnN0VmFsdWUoXG4gICAgICAgICAgc2VsZWN0RmllbGQoXG4gICAgICAgICAgICA8U291cmNlV2l0aFVua25vd25Qcm9wcz5zZWxlY3RGaWVsZChzb3VyY2UsICdyZWxhdGVkJyksXG4gICAgICAgICAgICAnZmNhdHMnXG4gICAgICAgICAgKVxuICAgICAgICApID8/IHt9LFxuICAgICAgICAnX3NvdXJjZSdcbiAgICAgIClcbiAgICAgIGNvbnN0IGZlYXR1cmVDYXRhbG9nSWRlbnRpZmllcjogc3RyaW5nID0gc2VsZWN0RmllbGQoXG4gICAgICAgIDxTb3VyY2VXaXRoVW5rbm93blByb3BzPmZjYXRTb3VyY2UsXG4gICAgICAgICd1dWlkJ1xuICAgICAgKVxuICAgICAgY29uc3Qgc291cmNlT2ZMaW5rcyA9IGdldEFzQXJyYXkoXG4gICAgICAgIHNlbGVjdEZpZWxkKFxuICAgICAgICAgIDxTb3VyY2VXaXRoVW5rbm93blByb3BzPnNlbGVjdEZpZWxkKHNvdXJjZSwgJ3JlbGF0ZWQnKSxcbiAgICAgICAgICAnaGFzc291cmNlcydcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgY29uc3Qgc291cmNlT2ZJZGVudGlmaWVyczogc3RyaW5nW10gPSBzb3VyY2VPZkxpbmtzXG4gICAgICAgIC5maWx0ZXIoKGxpbmspID0+IGxpbmtbJ29yaWdpbiddID09PSAnY2F0YWxvZycpXG4gICAgICAgIC5tYXAoKGxpbmspID0+IHtcbiAgICAgICAgICByZXR1cm4gc2VsZWN0RmllbGQoXG4gICAgICAgICAgICBzZWxlY3RGaWVsZCg8U291cmNlV2l0aFVua25vd25Qcm9wcz5saW5rLCAnX3NvdXJjZScpLFxuICAgICAgICAgICAgJ3V1aWQnXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgY29uc3QgZXh0cmFWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdPiA9IHt9XG4gICAgICBpZiAoZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyKSB7XG4gICAgICAgIGV4dHJhVmFsdWVzLmZlYXR1cmVDYXRhbG9nSWRlbnRpZmllciA9IGZlYXR1cmVDYXRhbG9nSWRlbnRpZmllclxuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZU9mSWRlbnRpZmllcnMgJiYgc291cmNlT2ZJZGVudGlmaWVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGV4dHJhVmFsdWVzLnNvdXJjZU9mSWRlbnRpZmllcnMgPSBzb3VyY2VPZklkZW50aWZpZXJzXG4gICAgICB9XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoZXh0cmFWYWx1ZXMpLmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLmFkZEV4dHJhKGV4dHJhVmFsdWVzLCBvdXRwdXQpXG4gICAgICAgIDogb3V0cHV0XG4gICAgfSxcbiAgICByZWNvcmRMaW5rOiAob3V0cHV0LCBzb3VyY2UpID0+IHtcbiAgICAgIGNvbnN0IHJlY29yZExpbmtzID0gZ2V0QXNBcnJheShcbiAgICAgICAgc2VsZWN0RmllbGQ8U291cmNlV2l0aFVua25vd25Qcm9wc1tdPihzb3VyY2UsICdyZWNvcmRMaW5rJylcbiAgICAgIClcbiAgICAgIGNvbnN0IHNvdXJjZXNJZGVudGlmaWVyczogc3RyaW5nW10gPSByZWNvcmRMaW5rc1xuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChsaW5rKSA9PiBsaW5rWydvcmlnaW4nXSA9PT0gJ2NhdGFsb2cnICYmIGxpbmtbJ3R5cGUnXSA9PT0gJ3NvdXJjZXMnXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgobGluaykgPT4gc2VsZWN0RmllbGQoPFNvdXJjZVdpdGhVbmtub3duUHJvcHM+bGluaywgJ3RvJykpXG5cbiAgICAgIHJldHVybiBzb3VyY2VzSWRlbnRpZmllcnMgJiYgc291cmNlc0lkZW50aWZpZXJzLmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLmFkZEV4dHJhKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzb3VyY2VzSWRlbnRpZmllcnMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3V0cHV0XG4gICAgICAgICAgKVxuICAgICAgICA6IG91dHB1dFxuICAgIH0sXG4gICAgaXNQdWJsaXNoZWRUb0FsbDogKG91dHB1dCwgc291cmNlKSA9PlxuICAgICAgdGhpcy5hZGRFeHRyYShcbiAgICAgICAge1xuICAgICAgICAgIGlzUHVibGlzaGVkVG9BbGw6IHNlbGVjdEZpZWxkKHNvdXJjZSwgJ2lzUHVibGlzaGVkVG9BbGwnKSxcbiAgICAgICAgfSxcbiAgICAgICAgb3V0cHV0XG4gICAgICApLFxuICAgIGlzSGFydmVzdGVkOiAob3V0cHV0LCBzb3VyY2UpID0+XG4gICAgICB0aGlzLmFkZEV4dHJhKFxuICAgICAgICB7XG4gICAgICAgICAgaXNIYXJ2ZXN0ZWQ6IHNlbGVjdEZpZWxkKHNvdXJjZSwgJ2lzSGFydmVzdGVkJykgIT09ICdmYWxzZScsXG4gICAgICAgIH0sXG4gICAgICAgIG91dHB1dFxuICAgICAgKSxcbiAgICBlZGl0OiAob3V0cHV0LCBzb3VyY2UpID0+XG4gICAgICB0aGlzLmFkZEV4dHJhKFxuICAgICAgICB7XG4gICAgICAgICAgZWRpdDogc2VsZWN0RmllbGQoc291cmNlLCAnZWRpdCcpLFxuICAgICAgICB9LFxuICAgICAgICBvdXRwdXRcbiAgICAgICksXG4gICAgdXNlcmluZm86IChvdXRwdXQsIHNvdXJjZSkgPT5cbiAgICAgIHRoaXMuYWRkRXh0cmEoXG4gICAgICAgIHtcbiAgICAgICAgICBvd25lckluZm86IHNlbGVjdEZpZWxkKHNvdXJjZSwgJ3VzZXJpbmZvJyksXG4gICAgICAgIH0sXG4gICAgICAgIG91dHB1dFxuICAgICAgKSxcbiAgICByZXNvdXJjZVR5cGU6IChvdXRwdXQsIHNvdXJjZSkgPT4ge1xuICAgICAgY29uc3QgcmVzb3VyY2VUeXBlID0gZ2V0Rmlyc3RWYWx1ZShzZWxlY3RGaWVsZChzb3VyY2UsICdyZXNvdXJjZVR5cGUnKSlcbiAgICAgIGNvbnN0IGtpbmQgPSBnZXRSZXNvdXJjZVR5cGUocmVzb3VyY2VUeXBlKVxuICAgICAgY29uc3QgcmV1c2VUeXBlID0gZ2V0UmV1c2VUeXBlKHJlc291cmNlVHlwZSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAga2luZCxcbiAgICAgICAgLi4uKHJldXNlVHlwZSAmJiB7IHJldXNlVHlwZSB9KSxcbiAgICAgIH0gYXMgQ2F0YWxvZ1JlY29yZFxuICAgIH0sXG4gICAgZ2VvbTogKG91dHB1dCwgc291cmNlKSA9PiB7XG4gICAgICBjb25zdCBnZW9tcyA9IGdldEFzQXJyYXkoc2VsZWN0RmllbGQoc291cmNlLCAnZ2VvbScpKVxuICAgICAgY29uc3Qgc2hhcGVzID0gZ2V0QXNBcnJheShzZWxlY3RGaWVsZChzb3VyY2UsICdzaGFwZScpKVxuICAgICAgY29uc3QgZXh0ZW50RGVzY3JpcHRpb25zID0gZ2V0QXNBcnJheShcbiAgICAgICAgc2VsZWN0RmllbGQoc291cmNlLCAnZXh0ZW50RGVzY3JpcHRpb25PYmplY3QnKVxuICAgICAgKVxuICAgICAgY29uc3Qgc3BhdGlhbEV4dGVudHMgPSBnZXRBc0FycmF5KHNlbGVjdEZpZWxkKHNvdXJjZSwgJ3NwYXRpYWxFeHRlbnRzJykpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIHNwYXRpYWxFeHRlbnRzOiBbXG4gICAgICAgICAgLi4uc3BhdGlhbEV4dGVudHMsXG4gICAgICAgICAgLi4uZ2VvbXMubWFwKChnZW9tLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBzZWxlY3RUcmFuc2xhdGVkVmFsdWUoXG4gICAgICAgICAgICAgIGdldEFycmF5SXRlbShleHRlbnREZXNjcmlwdGlvbnMsIGluZGV4KSxcbiAgICAgICAgICAgICAgdGhpcy5sYW5nM1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBzaGFwZXNbaW5kZXhdID8/IGdlb21cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAhPT0gbnVsbCA/IHsgZGVzY3JpcHRpb24gfSA6IG51bGwpLFxuICAgICAgICAgICAgICBnZW9tZXRyeSxcbiAgICAgICAgICAgIH0gYXMgRGF0YXNldFNwYXRpYWxFeHRlbnRcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlc291cmNlVGVtcG9yYWxFeHRlbnREYXRlUmFuZ2U6IChvdXRwdXQsIHNvdXJjZSkgPT4ge1xuICAgICAgY29uc3QgcmFuZ2VzID0gZ2V0QXNBcnJheShcbiAgICAgICAgc2VsZWN0RmllbGQoc291cmNlLCAncmVzb3VyY2VUZW1wb3JhbEV4dGVudERhdGVSYW5nZScpXG4gICAgICApXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vdXRwdXQsXG4gICAgICAgIHRlbXBvcmFsRXh0ZW50czogcmFuZ2VzLm1hcCgocmFuZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGFydCA9IHNlbGVjdEZpZWxkKHJhbmdlLCAnZ3RlJylcbiAgICAgICAgICBjb25zdCBlbmQgPSBzZWxlY3RGaWVsZChyYW5nZSwgJ2x0ZScpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLihzdGFydCAhPT0gbnVsbCA/IHsgc3RhcnQ6IHRvRGF0ZShzdGFydCkgfSA6IG51bGwpLFxuICAgICAgICAgICAgLi4uKGVuZCAhPT0gbnVsbCA/IHsgZW5kOiB0b0RhdGUoZW5kKSB9IDogbnVsbCksXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIH1cbiAgICB9LFxuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmljRmllbGQgPSAob3V0cHV0KSA9PiBvdXRwdXRcblxuICBwcml2YXRlIGNvbnN0cmFpbnRGaWVsZCA9IChcbiAgICB0eXBlOiAnbGljZW5zZScgfCAnbGVnYWwnIHwgJ3NlY3VyaXR5JyB8ICdvdGhlcicsXG4gICAgb3V0cHV0OiBQYXJ0aWFsPENhdGFsb2dSZWNvcmQ+LFxuICAgIGNvbnN0cmFpbnRBcnJheTogU291cmNlV2l0aFVua25vd25Qcm9wc1tdXG4gICkgPT4ge1xuICAgIGxldCBvdXRwdXRGaWVsZDogc3RyaW5nXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdsaWNlbnNlJzpcbiAgICAgICAgb3V0cHV0RmllbGQgPSAnbGljZW5zZXMnXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdsZWdhbCc6XG4gICAgICAgIG91dHB1dEZpZWxkID0gJ2xlZ2FsQ29uc3RyYWludHMnXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzZWN1cml0eSc6XG4gICAgICAgIG91dHB1dEZpZWxkID0gJ3NlY3VyaXR5Q29uc3RyYWludHMnXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdvdGhlcic6XG4gICAgICAgIG91dHB1dEZpZWxkID0gJ290aGVyQ29uc3RyYWludHMnXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNvbnN0IG91dHB1dEFycmF5OiBDb25zdHJhaW50W10gPVxuICAgICAgb3V0cHV0RmllbGQgaW4gb3V0cHV0ID8gb3V0cHV0W291dHB1dEZpZWxkXSA6IFtdXG4gICAgb3V0cHV0QXJyYXkucHVzaChcbiAgICAgIC4uLmNvbnN0cmFpbnRBcnJheS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgdGV4dCA9IHNlbGVjdFRyYW5zbGF0ZWRWYWx1ZShpdGVtLCB0aGlzLmxhbmczKSBhcyBzdHJpbmdcbiAgICAgICAgY29uc3QgdXJsID0gZ2V0QXNVcmwoc2VsZWN0RmllbGQoaXRlbSwgJ2xpbmsnKSlcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0ZXh0LFxuICAgICAgICAgIC4uLih1cmwgPyB7IHVybCB9IDoge30pLFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIClcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAuLi5vdXRwdXQsXG4gICAgICBbb3V0cHV0RmllbGRdOiBvdXRwdXRBcnJheSxcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZ2V0TWFwcGluZ0ZuKGZpZWxkTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGZpZWxkTmFtZSBpbiB0aGlzLmZpZWxkcyA/IHRoaXMuZmllbGRzW2ZpZWxkTmFtZV0gOiB0aGlzLmdlbmVyaWNGaWVsZFxuICB9XG5cbiAgZ2V0TGlua1R5cGUodXJsOiBzdHJpbmcsIHByb3RvY29sPzogc3RyaW5nKTogT25saW5lUmVzb3VyY2VUeXBlIHtcbiAgICBpZiAoIXByb3RvY29sKSB7XG4gICAgICByZXR1cm4gJ2xpbmsnXG4gICAgfVxuICAgIGlmIChcbiAgICAgICgvXkVTUkk6UkVTVC8udGVzdChwcm90b2NvbCkgJiYgL0ZlYXR1cmVTZXJ2ZXIvLnRlc3QodXJsKSkgfHxcbiAgICAgIC9eT0dDOldNUy8udGVzdChwcm90b2NvbCkgfHxcbiAgICAgIC9eT0dDOldGUy8udGVzdChwcm90b2NvbCkgfHxcbiAgICAgIC9eT0dDOldNVFMvLnRlc3QocHJvdG9jb2wpIHx8XG4gICAgICAvVE1TL2kudGVzdChwcm90b2NvbCkgfHxcbiAgICAgIC9vZ2NcXFcqYXBpXFxXKmZlYXR1cmVzL2kudGVzdChwcm90b2NvbCkgfHxcbiAgICAgICgvXldXVzpET1dOTE9BRC0vLnRlc3QocHJvdG9jb2wpICYmIC9kYXRhLmdlb3BmLmZyLy50ZXN0KHVybCkpIC8vIFRPIERPIDogY2hhbmdlIHdpdGggdGhlIGdvb2QgcHJvdG9jb2wgd2hlbiBkZWNpZGVkXG4gICAgKSB7XG4gICAgICByZXR1cm4gJ3NlcnZpY2UnXG4gICAgfVxuICAgIGlmICgvXldXVzpET1dOTE9BRC8udGVzdChwcm90b2NvbCkpIHtcbiAgICAgIHJldHVybiAnZG93bmxvYWQnXG4gICAgfVxuICAgIHJldHVybiAnbGluaydcbiAgfVxuXG4gIG1hcExpbmsgPSAoc291cmNlTGluazogU291cmNlV2l0aFVua25vd25Qcm9wcyk6IE9ubGluZVJlc291cmNlIHwgbnVsbCA9PiB7XG4gICAgY29uc3QgdXJsID0gZ2V0QXNVcmwoXG4gICAgICBzZWxlY3RGYWxsYmFjayhcbiAgICAgICAgc2VsZWN0VHJhbnNsYXRlZEZpZWxkPHN0cmluZz4oc291cmNlTGluaywgJ3VybE9iamVjdCcsIHRoaXMubGFuZzMpLFxuICAgICAgICBzZWxlY3RGaWVsZDxzdHJpbmc+KHNvdXJjZUxpbmssICd1cmwnKVxuICAgICAgKVxuICAgIClcbiAgICBjb25zdCBuYW1lID0gc2VsZWN0RmFsbGJhY2soXG4gICAgICBzZWxlY3RUcmFuc2xhdGVkRmllbGQ8c3RyaW5nPihzb3VyY2VMaW5rLCAnbmFtZU9iamVjdCcsIHRoaXMubGFuZzMpLFxuICAgICAgc2VsZWN0RmllbGQ8c3RyaW5nPihzb3VyY2VMaW5rLCAnbmFtZScpXG4gICAgKVxuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gc2VsZWN0RmFsbGJhY2soXG4gICAgICBzZWxlY3RUcmFuc2xhdGVkRmllbGQ8c3RyaW5nPihcbiAgICAgICAgc291cmNlTGluayxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uT2JqZWN0JyxcbiAgICAgICAgdGhpcy5sYW5nM1xuICAgICAgKSxcbiAgICAgIHNlbGVjdEZpZWxkPHN0cmluZz4oc291cmNlTGluaywgJ2Rlc2NyaXB0aW9uJylcbiAgICApXG4gICAgY29uc3QgZGVzY3JpcHRpb25MaW5rID0gc2VsZWN0RmllbGQ8b2JqZWN0Pihzb3VyY2VMaW5rLCAnZGVzY3JpcHRpb25PYmplY3QnKVxuICAgIGNvbnN0IGFjY2Vzc1Jlc3RyaWN0ZWQgPVxuICAgICAgZGVzY3JpcHRpb25MaW5rICYmXG4gICAgICAnbGluaycgaW4gZGVzY3JpcHRpb25MaW5rICYmXG4gICAgICBkZXNjcmlwdGlvbkxpbmsubGluay50b1N0cmluZygpLmluY2x1ZGVzKCcjTURfUmVzdHJpY3Rpb25Db2RlX3Jlc3RyaWN0ZWQnKVxuICAgIC8vIG5vIHVybDogZmFpbCBlYXJseVxuICAgIGlmICh1cmwgPT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE86IGNvbGxlY3QgZXJyb3JzIGF0IHRoZSByZWNvcmQgbGV2ZWw/XG4gICAgICBjb25zb2xlLndhcm4oJ0EgbGluayB3aXRob3V0IHZhbGlkIFVSTCB3YXMgZm91bmQnLCBzb3VyY2VMaW5rKVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBwcm90b2NvbCA9IHNlbGVjdEZpZWxkPHN0cmluZz4oc291cmNlTGluaywgJ3Byb3RvY29sJylcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRMaW5rVHlwZSh1cmwudG9TdHJpbmcoKSwgcHJvdG9jb2wpXG4gICAgY29uc3QgYWNjZXNzU2VydmljZVByb3RvY29sID0gbWF0Y2hQcm90b2NvbChwcm90b2NvbClcbiAgICBjb25zdCBtaW1lVHlwZU1hdGNoZXMgPVxuICAgICAgcHJvdG9jb2wgJiYgcHJvdG9jb2wubWF0Y2goL15XV1c6RE9XTkxPQUQ6KC4rXFwvLispJC8pXG4gICAgY29uc3QgbWltZVR5cGUgPSBtaW1lVHlwZU1hdGNoZXMgJiYgbWltZVR5cGVNYXRjaGVzWzFdXG5cbiAgICBjb25zdCBkaXN0cmlidXRpb24gPSB7XG4gICAgICAuLi4obmFtZSAmJiB7IG5hbWUgfSksXG4gICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzZXJ2aWNlJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5kaXN0cmlidXRpb24sXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICBhY2Nlc3NTZXJ2aWNlUHJvdG9jb2wsXG4gICAgICAgICAgYWNjZXNzUmVzdHJpY3RlZDogYWNjZXNzUmVzdHJpY3RlZCxcbiAgICAgICAgfVxuICAgICAgY2FzZSAnbGluayc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZGlzdHJpYnV0aW9uLFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2Rvd25sb2FkJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5kaXN0cmlidXRpb24sXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAuLi4obWltZVR5cGUgJiYgeyBtaW1lVHlwZSB9KSxcbiAgICAgICAgfVxuICAgICAgY2FzZSAnZW5kcG9pbnQnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmRpc3RyaWJ1dGlvbixcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgIGFjY2Vzc1NlcnZpY2VQcm90b2NvbDogYWNjZXNzU2VydmljZVByb3RvY29sLFxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRFeHRyYSA9ICh2YWx1ZTogb2JqZWN0LCBvdXRwdXQ6IFBhcnRpYWw8Q2F0YWxvZ1JlY29yZD4pID0+ICh7XG4gICAgLi4ub3V0cHV0LFxuICAgIGV4dHJhczogeyAuLi4ob3V0cHV0LmV4dHJhcyB8fCB7fSksIC4uLnZhbHVlIH0sXG4gIH0pXG59XG4iXX0=
@@ -3,22 +3,24 @@ import { Injectable } from '@angular/core';
3
3
  import { assertValidXml, findConverterForDocument, Gn4Converter, Iso19139Converter, } from '../../../../../../libs/api/metadata-converter/src';
4
4
  import { PublicationVersionError } from '../../../../../../libs/common/domain/src/lib/model/error';
5
5
  import { PlatformServiceInterface } from '../../../../../../libs/common/domain/src/lib/platform.service.interface';
6
- import { RecordsApiService, SearchApiService, LanguagesApiService, } from '../../../../../../libs/data-access/gn4/src';
6
+ import { LanguagesApiService, RecordsApiService, SearchApiService, } from '../../../../../../libs/data-access/gn4/src';
7
+ import { LANG_3_TO_2_MAPPER } from '../../../../../../libs/util/i18n/src';
7
8
  import { combineLatest, exhaustMap, forkJoin, from, of, Subject, switchMap, throwError, } from 'rxjs';
8
9
  import { catchError, map, tap } from 'rxjs/operators';
9
10
  import { lt } from 'semver';
10
11
  import { ElasticsearchService } from './elasticsearch';
11
- import { LANG_3_TO_2_MAPPER } from '../../../../../../libs/util/i18n/src';
12
+ import { Gn4SettingsService } from './settings/gn4-settings.service';
12
13
  import * as i0 from "@angular/core";
13
14
  import * as i1 from "@angular/common/http";
14
15
  import * as i2 from "../../../../../../libs/data-access/gn4/src";
15
16
  import * as i3 from "./elasticsearch";
16
17
  import * as i4 from "../../../../../../libs/api/metadata-converter/src";
17
18
  import * as i5 from "../../../../../../libs/common/domain/src/lib/platform.service.interface";
19
+ import * as i6 from "./settings/gn4-settings.service";
18
20
  const minPublicationApiVersion = '4.2.5';
19
21
  const TEMPORARY_ID_PREFIX = 'TEMP-ID-';
20
22
  export class Gn4Repository {
21
- constructor(httpClient, gn4SearchApi, gn4SearchHelper, gn4Mapper, gn4RecordsApi, platformService, gn4LanguagesApi) {
23
+ constructor(httpClient, gn4SearchApi, gn4SearchHelper, gn4Mapper, gn4RecordsApi, platformService, gn4LanguagesApi, settingsService) {
22
24
  this.httpClient = httpClient;
23
25
  this.gn4SearchApi = gn4SearchApi;
24
26
  this.gn4SearchHelper = gn4SearchHelper;
@@ -26,6 +28,7 @@ export class Gn4Repository {
26
28
  this.gn4RecordsApi = gn4RecordsApi;
27
29
  this.platformService = platformService;
28
30
  this.gn4LanguagesApi = gn4LanguagesApi;
31
+ this.settingsService = settingsService;
29
32
  this._draftsChanged = new Subject();
30
33
  this.draftsChanged$ = this._draftsChanged.asObservable();
31
34
  }
@@ -63,12 +66,21 @@ export class Gn4Repository {
63
66
  name: featureType.typeName || '',
64
67
  definition: featureType.definition || '',
65
68
  attributes: Array.isArray(featureType.attributeTable)
66
- ? featureType.attributeTable.map((attr) => ({
67
- name: attr.name,
68
- code: attr.code,
69
- title: attr.definition,
70
- type: attr.type,
71
- }))
69
+ ? featureType.attributeTable.map((attr) => {
70
+ const values = attr.values
71
+ ?.filter((v) => v.code || v.label)
72
+ .map((v) => ({
73
+ code: v.code,
74
+ label: v.label,
75
+ }));
76
+ return {
77
+ name: attr.name,
78
+ code: attr.code,
79
+ definition: attr.definition,
80
+ type: attr.type,
81
+ ...(values?.length > 0 ? { values } : {}),
82
+ };
83
+ })
72
84
  : [],
73
85
  })),
74
86
  };
@@ -131,11 +143,29 @@ export class Gn4Repository {
131
143
  ? this.getRecord(uniqueIdentifier).pipe(map((record) => record.extras['isPublishedToAll']))
132
144
  : of(true);
133
145
  }
134
- canEditRecord(uniqueIdentifier) {
135
- return this.getRecord(uniqueIdentifier).pipe(map((record) => {
136
- return record.extras['edit'];
146
+ canDuplicate(record) {
147
+ return record.kind === 'dataset';
148
+ }
149
+ canDelete(record) {
150
+ return this.settingsService.allowEditHarvested$.pipe(map((allowEditHarvested) => {
151
+ return (record.extras['edit'] &&
152
+ (!record.extras['isHarvested'] || allowEditHarvested));
137
153
  }));
138
154
  }
155
+ canEdit(record, allowEditHarvested) {
156
+ return (record.kind === 'dataset' &&
157
+ record.extras['edit'] &&
158
+ (!record.extras['isHarvested'] || allowEditHarvested));
159
+ }
160
+ canEditRecord(uniqueIdentifier) {
161
+ return combineLatest([
162
+ this.getRecord(uniqueIdentifier),
163
+ this.settingsService.allowEditHarvested$,
164
+ ]).pipe(map(([record, allowEditHarvested]) => record ? this.canEdit(record, allowEditHarvested) : false));
165
+ }
166
+ canEditIndexedRecord(record) {
167
+ return this.settingsService.allowEditHarvested$.pipe(map((allowEditHarvested) => this.canEdit(record, allowEditHarvested)));
168
+ }
139
169
  openRecordForEdition(uniqueIdentifier) {
140
170
  const draft$ = of(this.getRecordFromLocalStorage(uniqueIdentifier));
141
171
  const recordAsXml$ = this.getRecordAsXml(uniqueIdentifier);
@@ -297,10 +327,10 @@ export class Gn4Repository {
297
327
  removeRecordFromLocalStorage(recordId) {
298
328
  window.localStorage.removeItem(this.getLocalStorageKeyForRecord(recordId));
299
329
  }
300
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Gn4Repository, deps: [{ token: i1.HttpClient }, { token: i2.SearchApiService }, { token: i3.ElasticsearchService }, { token: i4.Gn4Converter }, { token: i2.RecordsApiService }, { token: i5.PlatformServiceInterface }, { token: i2.LanguagesApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
330
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Gn4Repository, deps: [{ token: i1.HttpClient }, { token: i2.SearchApiService }, { token: i3.ElasticsearchService }, { token: i4.Gn4Converter }, { token: i2.RecordsApiService }, { token: i5.PlatformServiceInterface }, { token: i2.LanguagesApiService }, { token: i6.Gn4SettingsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
301
331
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Gn4Repository }); }
302
332
  }
303
333
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Gn4Repository, decorators: [{
304
334
  type: Injectable
305
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.SearchApiService }, { type: i3.ElasticsearchService }, { type: i4.Gn4Converter }, { type: i2.RecordsApiService }, { type: i5.PlatformServiceInterface }, { type: i2.LanguagesApiService }] });
306
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ240LXJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9yZXBvc2l0b3J5L3NyYy9saWIvZ240L2duNC1yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBRVYsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUE7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixZQUFZLEVBRVosaUJBQWlCLEdBQ2xCLE1BQU0sbURBQW1ELENBQUE7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUE7QUFlbEcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUVBQXlFLENBQUE7QUFFbEgsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsbUJBQW1CLEdBQ3BCLE1BQU0sNENBQTRDLENBQUE7QUFDbkQsT0FBTyxFQUNMLGFBQWEsRUFDYixVQUFVLEVBQ1YsUUFBUSxFQUNSLElBQUksRUFFSixFQUFFLEVBQ0YsT0FBTyxFQUNQLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSxNQUFNLENBQUE7QUFDYixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzNCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFBOzs7Ozs7O0FBRXpFLE1BQU0sd0JBQXdCLEdBQUcsT0FBTyxDQUFBO0FBRXhDLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFBO0FBS3RDLE1BQU0sT0FBTyxhQUFhO0lB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dUIsUUFBUSxFQUFFLENBQUEsQ0FBQyxzREFBc0Q7SUFDakcsQ0FBQztJQUVPLHdCQUF3QixDQUFDLFdBQXdCLEVBQUUsUUFBZ0I7UUFDekUsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ3pCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsRUFDMUMsV0FBVyxDQUNaLENBQUE7SUFDSCxDQUFDO0lBRU8seUJBQXlCLENBQUMsUUFBZ0I7UUFDaEQsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDaEMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUMzQyxDQUFBO0lBQ0gsQ0FBQztJQUVPLDRCQUE0QixDQUFDLFFBQWdCO1FBQ25ELE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBQzVFLENBQUM7K0dBOWhCVSxhQUFhO21IQUFiLGFBQWE7OzRGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBIdHRwQ2xpZW50LFxuICBIdHRwRXJyb3JSZXNwb25zZSxcbiAgSHR0cEhlYWRlcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQge1xuICBhc3NlcnRWYWxpZFhtbCxcbiAgZmluZENvbnZlcnRlckZvckRvY3VtZW50LFxuICBHbjRDb252ZXJ0ZXIsXG4gIEduNFNlYXJjaFJlc3VsdHMsXG4gIElzbzE5MTM5Q29udmVydGVyLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjJ1xuaW1wb3J0IHsgUHVibGljYXRpb25WZXJzaW9uRXJyb3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9lcnJvcidcbmltcG9ydCB7XG4gIENhdGFsb2dSZWNvcmQsXG4gIERhdGFzZXRGZWF0dXJlVHlwZSxcbiAgRGF0YXNldEZlYXR1cmVDYXRhbG9nLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9yZWNvcmQnXG5pbXBvcnQge1xuICBBZ2dyZWdhdGlvbnMsXG4gIEFnZ3JlZ2F0aW9uc1BhcmFtcyxcbiAgRmllbGRGaWx0ZXJzLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9zZWFyY2gnXG5pbXBvcnQge1xuICBTZWFyY2hQYXJhbXMsXG4gIFNlYXJjaFJlc3VsdHMsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3NlYXJjaC9zZWFyY2gubW9kZWwnXG5pbXBvcnQgeyBQbGF0Zm9ybVNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9wbGF0Zm9ybS5zZXJ2aWNlLmludGVyZmFjZSdcbmltcG9ydCB7IFJlY29yZHNSZXBvc2l0b3J5SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvcmVwb3NpdG9yeS9yZWNvcmRzLXJlcG9zaXRvcnkuaW50ZXJmYWNlJ1xuaW1wb3J0IHtcbiAgUmVjb3Jkc0FwaVNlcnZpY2UsXG4gIFNlYXJjaEFwaVNlcnZpY2UsXG4gIExhbmd1YWdlc0FwaVNlcnZpY2UsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGF0YS1hY2Nlc3MvZ240L3NyYydcbmltcG9ydCB7XG4gIGNvbWJpbmVMYXRlc3QsXG4gIGV4aGF1c3RNYXAsXG4gIGZvcmtKb2luLFxuICBmcm9tLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgU3ViamVjdCxcbiAgc3dpdGNoTWFwLFxuICB0aHJvd0Vycm9yLFxufSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IGx0IH0gZnJvbSAnc2VtdmVyJ1xuaW1wb3J0IHsgRWxhc3RpY3NlYXJjaFNlcnZpY2UgfSBmcm9tICcuL2VsYXN0aWNzZWFyY2gnXG5pbXBvcnQgeyBMQU5HXzNfVE9fMl9NQVBQRVIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvaTE4bi9zcmMnXG5cbmNvbnN0IG1pblB1YmxpY2F0aW9uQXBpVmVyc2lvbiA9ICc0LjIuNSdcblxuY29uc3QgVEVNUE9SQVJZX0lEX1BSRUZJWCA9ICdURU1QLUlELSdcblxuZXhwb3J0IHR5cGUgUmVjb3JkQXNYbWwgPSBzdHJpbmdcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEduNFJlcG9zaXRvcnkgaW1wbGVtZW50cyBSZWNvcmRzUmVwb3NpdG9yeUludGVyZmFjZSB7XG4gIF9kcmFmdHNDaGFuZ2VkID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxuICBkcmFmdHNDaGFuZ2VkJCA9IHRoaXMuX2RyYWZ0c0NoYW5nZWQuYXNPYnNlcnZhYmxlKClcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBnbjRTZWFyY2hBcGk6IFNlYXJjaEFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnbjRTZWFyY2hIZWxwZXI6IEVsYXN0aWNzZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ240TWFwcGVyOiBHbjRDb252ZXJ0ZXIsXG4gICAgcHJpdmF0ZSBnbjRSZWNvcmRzQXBpOiBSZWNvcmRzQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHBsYXRmb3JtU2VydmljZTogUGxhdGZvcm1TZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgZ240TGFuZ3VhZ2VzQXBpOiBMYW5ndWFnZXNBcGlTZXJ2aWNlXG4gICkge31cblxuICBzZWFyY2goe1xuICAgIGZpbHRlcnMsXG4gICAgZmllbGRzLFxuICAgIG9mZnNldCxcbiAgICBsaW1pdCxcbiAgICBzb3J0LFxuICAgIGZpbHRlcklkcyxcbiAgICBmaWx0ZXJHZW9tZXRyeSxcbiAgfTogU2VhcmNoUGFyYW1zKTogT2JzZXJ2YWJsZTxTZWFyY2hSZXN1bHRzPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240U2VhcmNoQXBpXG4gICAgICAuc2VhcmNoKFxuICAgICAgICAnYnVja2V0JyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdGhpcy5nbjRTZWFyY2hIZWxwZXIuZ2V0U2VhcmNoUmVxdWVzdEJvZHkoXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICAgICAgb2Zmc2V0LFxuICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBmaWx0ZXJJZHMsXG4gICAgICAgICAgICBmaWx0ZXJHZW9tZXRyeVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVzdWx0czogR240U2VhcmNoUmVzdWx0cykgPT5cbiAgICAgICAgICB0aGlzLmduNE1hcHBlci5yZWFkUmVjb3JkcyhyZXN1bHRzLmhpdHMuaGl0cykudGhlbigocmVjb3JkcykgPT4gKHtcbiAgICAgICAgICAgIGNvdW50OiByZXN1bHRzLmhpdHMudG90YWw/LnZhbHVlIHx8IDAsXG4gICAgICAgICAgICByZWNvcmRzLFxuICAgICAgICAgIH0pKVxuICAgICAgICApXG4gICAgICApXG4gIH1cblxuICBnZXRNYXRjaGVzQ291bnQoZmlsdGVyczogRmllbGRGaWx0ZXJzKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdyZWNvcmRzLWNvdW50JyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIC4uLnRoaXMuZ240U2VhcmNoSGVscGVyLmdldFNlYXJjaFJlcXVlc3RCb2R5KFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGZpbHRlcnNcbiAgICAgICAgICApLFxuICAgICAgICAgIHRyYWNrX3RvdGFsX2hpdHM6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAucGlwZShtYXAoKHJlc3VsdHM6IEduNFNlYXJjaFJlc3VsdHMpID0+IHJlc3VsdHMuaGl0cy50b3RhbD8udmFsdWUgfHwgMCkpXG4gIH1cblxuICBnZXRSZWNvcmQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ2J1Y2tldCcsXG4gICAgICAgIFsnZmNhdHMnLCAnaGFzc291cmNlcyddLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB0aGlzLmduNFNlYXJjaEhlbHBlci5nZXRNZXRhZGF0YUJ5SWRzUGF5bG9hZChbdW5pcXVlSWRlbnRpZmllcl0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3VsdHM6IEduNFNlYXJjaFJlc3VsdHMpID0+IHJlc3VsdHMuaGl0cy5oaXRzWzBdKSxcbiAgICAgICAgc3dpdGNoTWFwKChyZWNvcmQpID0+XG4gICAgICAgICAgcmVjb3JkID8gdGhpcy5nbjRNYXBwZXIucmVhZFJlY29yZChyZWNvcmQpIDogb2YobnVsbClcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgZ2V0TXVsdGlwbGVSZWNvcmRzKFxuICAgIHVuaXF1ZUlkZW50aWZpZXJzOiBzdHJpbmdbXVxuICApOiBPYnNlcnZhYmxlPENhdGFsb2dSZWNvcmRbXSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdidWNrZXQnLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHRoaXMuZ240U2VhcmNoSGVscGVyLmdldE1ldGFkYXRhQnlJZHNQYXlsb2FkKHVuaXF1ZUlkZW50aWZpZXJzKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXN1bHRzOiBHbjRTZWFyY2hSZXN1bHRzKSA9PiByZXN1bHRzLmhpdHMuaGl0cyksXG4gICAgICAgIHN3aXRjaE1hcCgocmVjb3JkcykgPT5cbiAgICAgICAgICByZWNvcmRzICYmIHJlY29yZHMubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyB0aGlzLmduNE1hcHBlci5yZWFkUmVjb3JkcyhyZWNvcmRzKVxuICAgICAgICAgICAgOiBvZihudWxsKVxuICAgICAgICApXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIG1hcEVtYmVkZGVkRmVhdHVyZUNhdGFsb2coXG4gICAgZmVhdHVyZVR5cGVzOiBBcnJheTxEYXRhc2V0RmVhdHVyZVR5cGU+XG4gICk6IERhdGFzZXRGZWF0dXJlQ2F0YWxvZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZlYXR1cmVUeXBlczogZmVhdHVyZVR5cGVzLm1hcCgoZmVhdHVyZVR5cGUpID0+ICh7XG4gICAgICAgIG5hbWU6IGZlYXR1cmVUeXBlLnR5cGVOYW1lIHx8ICcnLFxuICAgICAgICBkZWZpbml0aW9uOiBmZWF0dXJlVHlwZS5kZWZpbml0aW9uIHx8ICcnLFxuICAgICAgICBhdHRyaWJ1dGVzOiBBcnJheS5pc0FycmF5KGZlYXR1cmVUeXBlLmF0dHJpYnV0ZVRhYmxlKVxuICAgICAgICAgID8gZmVhdHVyZVR5cGUuYXR0cmlidXRlVGFibGUubWFwKChhdHRyKSA9PiAoe1xuICAgICAgICAgICAgICBuYW1lOiBhdHRyLm5hbWUsXG4gICAgICAgICAgICAgIGNvZGU6IGF0dHIuY29kZSxcbiAgICAgICAgICAgICAgdGl0bGU6IGF0dHIuZGVmaW5pdGlvbixcbiAgICAgICAgICAgICAgdHlwZTogYXR0ci50eXBlLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgOiBbXSxcbiAgICAgIH0pKSxcbiAgICB9XG4gIH1cbiAgZ2V0RmVhdHVyZUNhdGFsb2coXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHZpc2l0ZWQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpIC8vIHByZXZlbnQgbG9vcGluZ1xuICApOiBPYnNlcnZhYmxlPERhdGFzZXRGZWF0dXJlQ2F0YWxvZyB8IG51bGw+IHtcbiAgICBpZiAoXG4gICAgICByZWNvcmQuZXh0cmFzPy5bJ2ZlYXR1cmVUeXBlcyddICYmXG4gICAgICBBcnJheS5pc0FycmF5KHJlY29yZC5leHRyYXNbJ2ZlYXR1cmVUeXBlcyddKSAmJlxuICAgICAgcmVjb3JkLmV4dHJhc1snZmVhdHVyZVR5cGVzJ10ubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMubWFwRW1iZWRkZWRGZWF0dXJlQ2F0YWxvZyhyZWNvcmQuZXh0cmFzWydmZWF0dXJlVHlwZXMnXSkpXG4gICAgfVxuXG4gICAgY29uc3QgZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyID0gcmVjb3JkLmV4dHJhc1tcbiAgICAgICdmZWF0dXJlQ2F0YWxvZ0lkZW50aWZpZXInXG4gICAgXSBhcyBzdHJpbmdcbiAgICBpZiAoZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyICYmICF2aXNpdGVkLmhhcyhmZWF0dXJlQ2F0YWxvZ0lkZW50aWZpZXIpKSB7XG4gICAgICB2aXNpdGVkLmFkZChmZWF0dXJlQ2F0YWxvZ0lkZW50aWZpZXIpXG4gICAgICByZXR1cm4gdGhpcy5nZXRSZWNvcmQoZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHJlY29yZCkgPT5cbiAgICAgICAgICByZWNvcmQgPyB0aGlzLmdldEZlYXR1cmVDYXRhbG9nKHJlY29yZCwgdmlzaXRlZCkgOiBvZihudWxsKVxuICAgICAgICApXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKG51bGwpXG4gIH1cblxuICBnZXRTaW1pbGFyUmVjb3JkcyhzaW1pbGFyVG86IENhdGFsb2dSZWNvcmQpOiBPYnNlcnZhYmxlPENhdGFsb2dSZWNvcmRbXT4ge1xuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ2J1Y2tldCcsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHRoaXMuZ240U2VhcmNoSGVscGVyLmdldFJlbGF0ZWRSZWNvcmRQYXlsb2FkKHNpbWlsYXJUbywgMylcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVzdWx0czogR240U2VhcmNoUmVzdWx0cykgPT5cbiAgICAgICAgICB0aGlzLmduNE1hcHBlci5yZWFkUmVjb3JkcyhyZXN1bHRzLmhpdHMuaGl0cylcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgZ2V0U291cmNlcyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQpOiBPYnNlcnZhYmxlPENhdGFsb2dSZWNvcmRbXT4ge1xuICAgIGNvbnN0IHNvdXJjZXNJZGVudGlmaWVycyA9IHJlY29yZC5leHRyYXM/Llsnc291cmNlc0lkZW50aWZpZXJzJ10gYXMgc3RyaW5nW11cbiAgICBpZiAoc291cmNlc0lkZW50aWZpZXJzICYmIHNvdXJjZXNJZGVudGlmaWVycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRNdWx0aXBsZVJlY29yZHMoc291cmNlc0lkZW50aWZpZXJzKVxuICAgIH1cbiAgICByZXR1cm4gb2YobnVsbClcbiAgfVxuXG4gIGdldFNvdXJjZU9mKHJlY29yZDogQ2F0YWxvZ1JlY29yZCk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZFtdPiB7XG4gICAgY29uc3Qgc291cmNlT2ZJZGVudGlmaWVycyA9IHJlY29yZC5leHRyYXM/LltcbiAgICAgICdzb3VyY2VPZklkZW50aWZpZXJzJ1xuICAgIF0gYXMgc3RyaW5nW11cbiAgICBpZiAoc291cmNlT2ZJZGVudGlmaWVycyAmJiBzb3VyY2VPZklkZW50aWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE11bHRpcGxlUmVjb3Jkcyhzb3VyY2VPZklkZW50aWZpZXJzKVxuICAgIH1cbiAgICByZXR1cm4gb2YobnVsbClcbiAgfVxuXG4gIGFnZ3JlZ2F0ZShwYXJhbXM6IEFnZ3JlZ2F0aW9uc1BhcmFtcyk6IE9ic2VydmFibGU8QWdncmVnYXRpb25zPiB7XG4gICAgLy8gaWYgYWdncmVnYXRpb25zIGFyZSBlbXB0eSwgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCByaWdodCBhd2F5XG4gICAgaWYgKE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoID09PSAwKSByZXR1cm4gb2Yoe30pXG5cbiAgICBjb25zdCBhZ2dyZWdhdGlvbnMgPSB0aGlzLmduNFNlYXJjaEhlbHBlci5idWlsZEFnZ3JlZ2F0aW9uc1BheWxvYWQocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ2J1Y2tldCcsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZ240U2VhcmNoSGVscGVyLmdldFNlYXJjaFJlcXVlc3RCb2R5KGFnZ3JlZ2F0aW9ucykpXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogR240U2VhcmNoUmVzdWx0cykgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyhyZXNwb25zZS5hZ2dyZWdhdGlvbnMpLnJlZHVjZShcbiAgICAgICAgICAgIChwcmV2LCBjdXJyKSA9PiAoe1xuICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICBbY3Vycl06IHRoaXMuZ240U2VhcmNoSGVscGVyLnBhcnNlQWdncmVnYXRpb25SZXN1bHQoXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuYWdncmVnYXRpb25zW2N1cnJdLFxuICAgICAgICAgICAgICAgIHBhcmFtc1tjdXJyXVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgZnV6enlTZWFyY2gocXVlcnk6IHN0cmluZyk6IE9ic2VydmFibGU8U2VhcmNoUmVzdWx0cz4ge1xuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ2J1Y2tldCcsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZ240U2VhcmNoSGVscGVyLmJ1aWxkQXV0b2NvbXBsZXRlUGF5bG9hZChxdWVyeSkpXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChyZXN1bHRzOiBHbjRTZWFyY2hSZXN1bHRzKSA9PlxuICAgICAgICAgIHRoaXMuZ240TWFwcGVyLnJlYWRSZWNvcmRzKHJlc3VsdHMuaGl0cy5oaXRzKS50aGVuKChyZWNvcmRzKSA9PiAoe1xuICAgICAgICAgICAgY291bnQ6IHJlc3VsdHMuaGl0cy50b3RhbD8udmFsdWUgfHwgMCxcbiAgICAgICAgICAgIHJlY29yZHMsXG4gICAgICAgICAgfSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgfVxuXG4gIGdldFJlY29yZFB1YmxpY2F0aW9uU3RhdHVzKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB1bmlxdWVJZGVudGlmaWVyXG4gICAgICA/IHRoaXMuZ2V0UmVjb3JkKHVuaXF1ZUlkZW50aWZpZXIpLnBpcGUoXG4gICAgICAgICAgbWFwKChyZWNvcmQpID0+IHJlY29yZC5leHRyYXNbJ2lzUHVibGlzaGVkVG9BbGwnXSBhcyBib29sZWFuKVxuICAgICAgICApXG4gICAgICA6IG9mKHRydWUpXG4gIH1cblxuICBjYW5FZGl0UmVjb3JkKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmdldFJlY29yZCh1bmlxdWVJZGVudGlmaWVyKS5waXBlKFxuICAgICAgbWFwKChyZWNvcmQpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlY29yZC5leHRyYXNbJ2VkaXQnXSBhcyBib29sZWFuXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIG9wZW5SZWNvcmRGb3JFZGl0aW9uKFxuICAgIHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFtDYXRhbG9nUmVjb3JkLCBzdHJpbmcsIGJvb2xlYW5dIHwgbnVsbD4ge1xuICAgIGNvbnN0IGRyYWZ0JCA9IG9mKHRoaXMuZ2V0UmVjb3JkRnJvbUxvY2FsU3RvcmFnZSh1bmlxdWVJZGVudGlmaWVyKSlcbiAgICBjb25zdCByZWNvcmRBc1htbCQgPSB0aGlzLmdldFJlY29yZEFzWG1sKHVuaXF1ZUlkZW50aWZpZXIpXG5cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbZHJhZnQkLCByZWNvcmRBc1htbCRdKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChbZHJhZnQsIHJlY29yZEFzWG1sXSkgPT4ge1xuICAgICAgICBjb25zdCB4bWwgPSBkcmFmdCA/PyByZWNvcmRBc1htbFxuICAgICAgICBjb25zdCBpc1NhdmVkQWxyZWFkeSA9IHJlY29yZEFzWG1sICE9PSBudWxsXG4gICAgICAgIHJldHVybiBmaW5kQ29udmVydGVyRm9yRG9jdW1lbnQoeG1sKVxuICAgICAgICAgIC5yZWFkUmVjb3JkKHhtbClcbiAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgIChyZWNvcmQpID0+XG4gICAgICAgICAgICAgIFtyZWNvcmQsIHhtbCwgaXNTYXZlZEFscmVhZHldIGFzIFtDYXRhbG9nUmVjb3JkLCBzdHJpbmcsIGJvb2xlYW5dXG4gICAgICAgICAgKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBvcGVuUmVjb3JkRm9yRHVwbGljYXRpb24oXG4gICAgdW5pcXVlSWRlbnRpZmllcjogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8W0NhdGFsb2dSZWNvcmQsIHN0cmluZywgdHJ1ZV0gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240UmVjb3Jkc0FwaVxuICAgICAgLmNyZWF0ZShcbiAgICAgICAgdW5pcXVlSWRlbnRpZmllcixcbiAgICAgICAgJzInLFxuICAgICAgICAnTUVUQURBVEEnLFxuICAgICAgICAnJyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgJ2JvZHknLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAge1xuICAgICAgICAgIGh0dHBIZWFkZXJBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCcsXG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHVuaXF1ZUlkZW50aWZpZXIpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWNvcmRBc1htbCh1bmlxdWVJZGVudGlmaWVyKVxuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCh4bWwpID0+IHtcbiAgICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICAgIGZpbmRDb252ZXJ0ZXJGb3JEb2N1bWVudCh4bWwpXG4gICAgICAgICAgICAgIC5yZWFkUmVjb3JkKHhtbClcbiAgICAgICAgICAgICAgLnRoZW4oKHJlY29yZCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBbcmVjb3JkLCB4bWwsIHRydWVdIGFzIFtDYXRhbG9nUmVjb3JkLCBzdHJpbmcsIHRydWVdXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgKVxuICB9XG5cbiAgc2F2ZVJlY29yZChcbiAgICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gICAgcmVmZXJlbmNlUmVjb3JkU291cmNlPzogc3RyaW5nLFxuICAgIHB1Ymxpc2hUb0FsbCA9IHRydWVcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybVNlcnZpY2UuZ2V0QXBpVmVyc2lvbigpLnBpcGUoXG4gICAgICBtYXAoKHZlcnNpb24pID0+IHtcbiAgICAgICAgaWYgKGx0KHZlcnNpb24sIG1pblB1YmxpY2F0aW9uQXBpVmVyc2lvbikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUHVibGljYXRpb25WZXJzaW9uRXJyb3IodmVyc2lvbilcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5zZXJpYWxpemVSZWNvcmRUb1htbChyZWNvcmQsIHJlZmVyZW5jZVJlY29yZFNvdXJjZSkpLFxuICAgICAgc3dpdGNoTWFwKChyZWNvcmRYbWwpID0+XG4gICAgICAgIHRoaXMuZ240UmVjb3Jkc0FwaS5pbnNlcnQoXG4gICAgICAgICAgJ01FVEFEQVRBJyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBwdWJsaXNoVG9BbGwsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICdPVkVSV1JJVEUnLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICdfbm9uZV8nLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHJlY29yZFhtbFxuICAgICAgICApXG4gICAgICApLFxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zdCBtZXRhZGF0YUlkID0gT2JqZWN0LmtleXMocmVzcG9uc2UubWV0YWRhdGFJbmZvcylbMF1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLm1ldGFkYXRhSW5mb3NbbWV0YWRhdGFJZF1bMF0udXVpZFxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBkdXBsaWNhdGVFeHRlcm5hbFJlY29yZChyZWNvcmREb3dubG9hZFVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRFeHRlcm5hbFJlY29yZEFzWG1sKHJlY29yZERvd25sb2FkVXJsKS5waXBlKFxuICAgICAgZXhoYXVzdE1hcChhc3luYyAoZmV0Y2hlZFJlY29yZEFzWG1sOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgY29udmVydGVyID0gZmluZENvbnZlcnRlckZvckRvY3VtZW50KGZldGNoZWRSZWNvcmRBc1htbClcbiAgICAgICAgY29uc3QgcmVjb3JkID0gYXdhaXQgY29udmVydGVyLnJlYWRSZWNvcmQoZmV0Y2hlZFJlY29yZEFzWG1sKVxuXG4gICAgICAgIHJlY29yZC50aXRsZSA9IGAke3JlY29yZC50aXRsZX0gKENvcHkpYFxuICAgICAgICBjb25zdCByZWNvcmRBc1htbCA9IGF3YWl0IGNvbnZlcnRlci53cml0ZVJlY29yZChcbiAgICAgICAgICByZWNvcmQsXG4gICAgICAgICAgZmV0Y2hlZFJlY29yZEFzWG1sXG4gICAgICAgIClcblxuICAgICAgICByZXR1cm4gdGhpcy5zYXZlUmVjb3JkKHJlY29yZCwgcmVjb3JkQXNYbWwsIGZhbHNlKVxuICAgICAgfSksXG4gICAgICBleGhhdXN0TWFwKCh1dWlkT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxzdHJpbmc+KSA9PiB1dWlkT2JzZXJ2YWJsZSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIGRlbGV0ZVJlY29yZCh1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRSZWNvcmRzQXBpLmRlbGV0ZVJlY29yZCh1bmlxdWVJZGVudGlmaWVyKVxuICB9XG5cbiAgZ2VuZXJhdGVUZW1wb3JhcnlJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtURU1QT1JBUllfSURfUFJFRklYfSR7RGF0ZS5ub3coKX1gXG4gIH1cblxuICBzYXZlUmVjb3JkQXNEcmFmdChcbiAgICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gICAgcmVmZXJlbmNlUmVjb3JkU291cmNlPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplUmVjb3JkVG9YbWwocmVjb3JkLCByZWZlcmVuY2VSZWNvcmRTb3VyY2UpLnBpcGUoXG4gICAgICB0YXAoKHJlY29yZFhtbCkgPT4ge1xuICAgICAgICB0aGlzLnNhdmVSZWNvcmRUb0xvY2FsU3RvcmFnZShyZWNvcmRYbWwsIHJlY29yZC51bmlxdWVJZGVudGlmaWVyKVxuICAgICAgICB0aGlzLl9kcmFmdHNDaGFuZ2VkLm5leHQoKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBjbGVhclJlY29yZERyYWZ0KHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZlUmVjb3JkRnJvbUxvY2FsU3RvcmFnZSh1bmlxdWVJZGVudGlmaWVyKVxuICAgIHRoaXMuX2RyYWZ0c0NoYW5nZWQubmV4dCgpXG4gIH1cblxuICByZWNvcmRIYXNEcmFmdCh1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZWNvcmRGcm9tTG9jYWxTdG9yYWdlKHVuaXF1ZUlkZW50aWZpZXIpICE9PSBudWxsXG4gIH1cblxuICAvLyBnZW5lcmF0ZWQgYnkgY29waWxvdFxuICBnZXRBbGxEcmFmdHMoKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkW10+IHtcbiAgICBjb25zdCBpdGVtcyA9IHsgLi4ud2luZG93LmxvY2FsU3RvcmFnZSB9XG4gICAgY29uc3QgZHJhZnRzID0gT2JqZWN0LmtleXMoaXRlbXMpXG4gICAgICAuZmlsdGVyKChrZXkpID0+IGtleS5zdGFydHNXaXRoKCdnZW9uZXR3b3JrLXVpLWRyYWZ0LScpKVxuICAgICAgLm1hcCgoa2V5KSA9PiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSlcbiAgICAgIC5maWx0ZXIoKGRyYWZ0KSA9PiBkcmFmdCAhPT0gbnVsbClcbiAgICByZXR1cm4gZnJvbShcbiAgICAgIFByb21pc2UuYWxsKFxuICAgICAgICBkcmFmdHMubWFwKChkcmFmdCkgPT4ge1xuICAgICAgICAgIHJldHVybiBmaW5kQ29udmVydGVyRm9yRG9jdW1lbnQoZHJhZnQpLnJlYWRSZWNvcmQoZHJhZnQpXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgZ2V0RHJhZnRzQ291bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICBjb25zdCBpdGVtcyA9IHsgLi4ud2luZG93LmxvY2FsU3RvcmFnZSB9XG4gICAgY29uc3QgZHJhZnRDb3VudCA9IE9iamVjdC5rZXlzKGl0ZW1zKVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkuc3RhcnRzV2l0aCgnZ2VvbmV0d29yay11aS1kcmFmdC0nKSlcbiAgICAgIC5tYXAoKGtleSkgPT4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkpXG4gICAgICAuZmlsdGVyKChkcmFmdCkgPT4gZHJhZnQgIT09IG51bGwpLmxlbmd0aFxuICAgIHJldHVybiBvZihkcmFmdENvdW50KVxuICB9XG5cbiAgaGFzUmVjb3JkQ2hhbmdlZFNpbmNlRHJhZnQobG9jYWxSZWNvcmQ6IENhdGFsb2dSZWNvcmQpIHtcbiAgICByZXR1cm4gb2Yoe1xuICAgICAgaXNVbnNhdmVkOiAhbG9jYWxSZWNvcmQudW5pcXVlSWRlbnRpZmllcixcbiAgICAgIGhhc0RyYWZ0OiB0aGlzLnJlY29yZEhhc0RyYWZ0KGxvY2FsUmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIpLFxuICAgIH0pLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHsgaXNVbnNhdmVkLCBoYXNEcmFmdCB9KSA9PiB7XG4gICAgICAgIGlmIChpc1Vuc2F2ZWQgfHwgIWhhc0RyYWZ0KSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHsgdXNlcjogdW5kZWZpbmVkLCBkYXRlOiB1bmRlZmluZWQgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ya0pvaW4oW1xuICAgICAgICAgIHRoaXMuZ2V0QWxsRHJhZnRzKCkucGlwZShcbiAgICAgICAgICAgIG1hcCgoZHJhZnRzKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nUmVjb3JkID0gZHJhZnRzLmZpbmQoXG4gICAgICAgICAgICAgICAgKGRyYWZ0KSA9PlxuICAgICAgICAgICAgICAgICAgZHJhZnQudW5pcXVlSWRlbnRpZmllciA9PT0gbG9jYWxSZWNvcmQudW5pcXVlSWRlbnRpZmllclxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldHVybiBtYXRjaGluZ1JlY29yZD8ucmVjb3JkVXBkYXRlZCB8fCBudWxsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICksXG4gICAgICAgICAgdGhpcy5nZXRSZWNvcmQobG9jYWxSZWNvcmQudW5pcXVlSWRlbnRpZmllciksXG4gICAgICAgIF0pLnBpcGUoXG4gICAgICAgICAgbWFwKChbZHJhZnRSZWNvcmRVcGRhdGVkLCByZWNlbnRSZWNvcmRdKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVjZW50UmVjb3JkPy5yZWNvcmRVcGRhdGVkID4gZHJhZnRSZWNvcmRVcGRhdGVkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHVzZXIgPSByZWNlbnRSZWNvcmQuZXh0cmFzPy5bJ293bmVySW5mbyddXG4gICAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgPy5zcGxpdCgnfCcpXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdXNlcjogYCR7dXNlclsyXX0gJHt1c2VyWzFdfWAsXG4gICAgICAgICAgICAgICAgZGF0ZTogcmVjZW50UmVjb3JkLnJlY29yZFVwZGF0ZWQsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHVzZXI6IHVuZGVmaW5lZCwgZGF0ZTogdW5kZWZpbmVkIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIGdldEFwcGxpY2F0aW9uTGFuZ3VhZ2VzKCk6IE9ic2VydmFibGU8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRMYW5ndWFnZXNBcGlcbiAgICAgIC5nZXRBcHBsaWNhdGlvbkxhbmd1YWdlcygpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsYW5ndWFnZXMpID0+XG4gICAgICAgICAgbGFuZ3VhZ2VzXG4gICAgICAgICAgICAubWFwKChsYW5nKSA9PiBMQU5HXzNfVE9fMl9NQVBQRVJbbGFuZy5pZCA/PyAnJ10pXG4gICAgICAgICAgICAuZmlsdGVyKChjb2RlKTogY29kZSBpcyBzdHJpbmcgPT4gISFjb2RlKVxuICAgICAgICApXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFJlY29yZEFzWG1sKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmduNFJlY29yZHNBcGlcbiAgICAgIC5nZXRSZWNvcmRBcyhcbiAgICAgICAgdW5pcXVlSWRlbnRpZmllcixcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgJ2FwcGxpY2F0aW9uL3htbCcsXG4gICAgICAgICdyZXNwb25zZScsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgeyBodHRwSGVhZGVyQWNjZXB0OiAndGV4dC94bWwsYXBwbGljYXRpb24veG1sJyBhcyAnYXBwbGljYXRpb24veG1sJyB9IC8vIHRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHJlc3BvbnNlIGlzIHBhcnNlZCBhcyB0ZXh0XG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT5cbiAgICAgICAgICBlcnJvci5zdGF0dXMgPT09IDQwNCA/IG9mKG51bGwpIDogdGhyb3dFcnJvcigoKSA9PiBlcnJvcilcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBzZXJpYWxpemVSZWNvcmRUb1htbChcbiAgICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gICAgcmVmZXJlbmNlUmVjb3JkU291cmNlPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgLy8gaWYgdGhlcmUncyBhIHJlZmVyZW5jZSByZWNvcmQsIHVzZSB0aGF0IHN0YW5kYXJkOyBvdGhlcndpc2UsIHVzZSBpc28xOTEzOVxuICAgIGNvbnN0IGNvbnZlcnRlciA9IHJlZmVyZW5jZVJlY29yZFNvdXJjZVxuICAgICAgPyBmaW5kQ29udmVydGVyRm9yRG9jdW1lbnQocmVmZXJlbmNlUmVjb3JkU291cmNlKVxuICAgICAgOiBuZXcgSXNvMTkxMzlDb252ZXJ0ZXIoKVxuICAgIHJldHVybiBmcm9tKGNvbnZlcnRlci53cml0ZVJlY29yZChyZWNvcmQsIHJlZmVyZW5jZVJlY29yZFNvdXJjZSkpXG4gIH1cblxuICBwcml2YXRlIGdldEV4dGVybmFsUmVjb3JkQXNYbWwoXG4gICAgcmVjb3JkRG93bmxvYWRVcmw6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKClcbiAgICBjb25zdCByZXNwb25zZVR5cGVfID0gJ3RleHQnXG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCAndGV4dC94bWwsYXBwbGljYXRpb24veG1sJylcblxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5nZXQ8c3RyaW5nPihyZWNvcmREb3dubG9hZFVybCwge1xuICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlY29yZEFzWG1sRmlsZSkgPT4ge1xuICAgICAgICAgIGFzc2VydFZhbGlkWG1sKHJlY29yZEFzWG1sRmlsZSlcblxuICAgICAgICAgIHJldHVybiByZWNvcmRBc1htbEZpbGVcbiAgICAgICAgfSlcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxTdG9yYWdlS2V5Rm9yUmVjb3JkKHJlY29yZElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgZ2VvbmV0d29yay11aS1kcmFmdC0ke3JlY29yZElkfWAgLy8gTmV2ZXIgY2hhbmdlIHRoaXMgcHJlZml4IGFzIGl0IGlzIGEgYnJlYWtpbmcgY2hhbmdlXG4gIH1cblxuICBwcml2YXRlIHNhdmVSZWNvcmRUb0xvY2FsU3RvcmFnZShyZWNvcmRBc1htbDogUmVjb3JkQXNYbWwsIHJlY29yZElkOiBzdHJpbmcpIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICB0aGlzLmdldExvY2FsU3RvcmFnZUtleUZvclJlY29yZChyZWNvcmRJZCksXG4gICAgICByZWNvcmRBc1htbFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVjb3JkRnJvbUxvY2FsU3RvcmFnZShyZWNvcmRJZDogc3RyaW5nKTogUmVjb3JkQXNYbWwge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oXG4gICAgICB0aGlzLmdldExvY2FsU3RvcmFnZUtleUZvclJlY29yZChyZWNvcmRJZClcbiAgICApXG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlY29yZEZyb21Mb2NhbFN0b3JhZ2UocmVjb3JkSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmdldExvY2FsU3RvcmFnZUtleUZvclJlY29yZChyZWNvcmRJZCkpXG4gIH1cbn1cbiJdfQ==
335
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.SearchApiService }, { type: i3.ElasticsearchService }, { type: i4.Gn4Converter }, { type: i2.RecordsApiService }, { type: i5.PlatformServiceInterface }, { type: i2.LanguagesApiService }, { type: i6.Gn4SettingsService }] });
336
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ240LXJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9yZXBvc2l0b3J5L3NyYy9saWIvZ240L2duNC1yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBRVYsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUE7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixZQUFZLEVBRVosaUJBQWlCLEdBQ2xCLE1BQU0sbURBQW1ELENBQUE7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUE7QUFlbEcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUVBQXlFLENBQUE7QUFFbEgsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsZ0JBQWdCLEdBQ2pCLE1BQU0sNENBQTRDLENBQUE7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUE7QUFDekUsT0FBTyxFQUNMLGFBQWEsRUFDYixVQUFVLEVBQ1YsUUFBUSxFQUNSLElBQUksRUFFSixFQUFFLEVBQ0YsT0FBTyxFQUNQLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSxNQUFNLENBQUE7QUFDYixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzNCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFBOzs7Ozs7OztBQUVwRSxNQUFNLHdCQUF3QixHQUFHLE9BQU8sQ0FBQTtBQUV4QyxNQUFNLG1CQUFtQixHQUFHLFVBQVUsQ0FBQTtBQUt0QyxNQUFNLE9BQU8sYUFBYTtJQUl4QixZQUNVLFVBQXNCLEVBQ3RCLFlBQThCLEVBQzlCLGVBQXFDLEVBQ3JDLFNBQXVCLEVBQ3ZCLGFBQWdDLEVBQ2hDLGVBQXlDLEVBQ3pDLGVBQW9DLEVBQ3BDLGVBQW1DO1FBUG5DLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWtCO1FBQzlCLG9CQUFlLEdBQWYsZUFBZSxDQUFzQjtRQUNyQyxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLGtCQUFhLEdBQWIsYUFBYSxDQUFtQjtRQUNoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBMEI7UUFDekMsb0JBQWUsR0FBZixlQUFlLENBQXFCO1FBQ3BDLG9CQUFlLEdBQWYsZUFBZSxDQUFvQjtRQVg3QyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUE7UUFDcEMsbUJBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFBO0lBV2hELENBQUM7SUFFSixNQUFNLENBQUMsRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsSUFBSSxFQUNKLFNBQVMsRUFDVCxjQUFjLEdBQ0Q7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZO2FBQ3JCLE1BQU0sQ0FDTCxRQUFRLEVBQ1IsSUFBSSxFQUNKLElBQUksQ0FBQyxTQUFTLENBQ1osSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FDdkMsRUFBRSxFQUNGLEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxFQUNKLE1BQU0sRUFDTixPQUFPLEVBQ1AsU0FBUyxFQUNULFNBQVMsRUFDVCxjQUFjLENBQ2YsQ0FDRixDQUNGO2FBQ0EsSUFBSSxDQUNILFNBQVMsQ0FBQyxDQUFDLE9BQXlCLEVBQUUsRUFBRSxDQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvRCxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUM7WUFDckMsT0FBTztTQUNSLENBQUMsQ0FBQyxDQUNKLENBQ0YsQ0FBQTtJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsT0FBcUI7UUFDbkMsT0FBTyxJQUFJLENBQUMsWUFBWTthQUNyQixNQUFNLENBQ0wsZUFBZSxFQUNmLElBQUksRUFDSixJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLG9CQUFvQixDQUMxQyxFQUFFLEVBQ0YsQ0FBQyxFQUNELENBQUMsRUFDRCxTQUFTLEVBQ1QsU0FBUyxFQUNULE9BQU8sQ0FDUjtZQUNELGdCQUFnQixFQUFFLElBQUk7U0FDdkIsQ0FBQyxDQUNIO2FBQ0EsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQXlCLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzdFLENBQUM7SUFFRCxTQUFTLENBQUMsZ0JBQXdCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFlBQVk7YUFDckIsTUFBTSxDQUNMLFFBQVEsRUFDUixDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsRUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FDWixJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUNqRSxDQUNGO2FBQ0EsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLE9BQXlCLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3hELFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ25CLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FDdEQsQ0FDRixDQUFBO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUNoQixpQkFBMkI7UUFFM0IsT0FBTyxJQUFJLENBQUMsWUFBWTthQUNyQixNQUFNLENBQ0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxJQUFJLENBQUMsU0FBUyxDQUNaLElBQUksQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQUMsaUJBQWlCLENBQUMsQ0FDaEUsQ0FDRjthQUNBLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxPQUF5QixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUNyRCxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNwQixPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7WUFDckMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FDYixDQUNGLENBQUE7SUFDTCxDQUFDO0lBRU8seUJBQXlCLENBQy9CLFlBQXVDO1FBRXZDLE9BQU87WUFDTCxZQUFZLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxFQUFFLFdBQVcsQ0FBQyxRQUFRLElBQUksRUFBRTtnQkFDaEMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxVQUFVLElBQUksRUFBRTtnQkFDeEMsVUFBVSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQztvQkFDbkQsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7d0JBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNOzRCQUN4QixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDOzZCQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7NEJBQ1gsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJOzRCQUNaLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSzt5QkFDZixDQUFDLENBQUMsQ0FBQTt3QkFDTCxPQUFPOzRCQUNMLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTs0QkFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7NEJBQ2YsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVOzRCQUMzQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7NEJBQ2YsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7eUJBQzFDLENBQUE7b0JBQ0gsQ0FBQyxDQUFDO29CQUNKLENBQUMsQ0FBQyxFQUFFO2FBQ1AsQ0FBQyxDQUFDO1NBQ0osQ0FBQTtJQUNILENBQUM7SUFDRCxpQkFBaUIsQ0FDZixNQUFxQixFQUNyQixVQUF1QixJQUFJLEdBQUcsRUFBRSxDQUFDLGtCQUFrQjs7UUFFbkQsSUFDRSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsY0FBYyxDQUFDO1lBQy9CLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ3hDLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDMUUsQ0FBQztRQUVELE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDNUMsMEJBQTBCLENBQ2pCLENBQUE7UUFDWCxJQUFJLHdCQUF3QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUM7WUFDdkUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1lBQ3JDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FDbEQsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDbkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQzVELENBQ0YsQ0FBQTtRQUNILENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNqQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBd0I7UUFDeEMsT0FBTyxJQUFJLENBQUMsWUFBWTthQUNyQixNQUFNLENBQ0wsUUFBUSxFQUNSLElBQUksRUFDSixJQUFJLENBQUMsU0FBUyxDQUNaLElBQUksQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUMzRCxDQUNGO2FBQ0EsSUFBSSxDQUNILFNBQVMsQ0FBQyxDQUFDLE9BQXlCLEVBQUUsRUFBRSxDQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUM5QyxDQUNGLENBQUE7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQXFCO1FBQzlCLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLG9CQUFvQixDQUFhLENBQUE7UUFDNUUsSUFBSSxrQkFBa0IsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUNwRCxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDakIsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFxQjtRQUMvQixNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FDekMscUJBQXFCLENBQ1YsQ0FBQTtRQUNiLElBQUksbUJBQW1CLElBQUksbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLENBQUE7UUFDckQsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ2pCLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBMEI7UUFDbEMsK0RBQStEO1FBQy9ELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRW5ELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDMUUsT0FBTyxJQUFJLENBQUMsWUFBWTthQUNyQixNQUFNLENBQ0wsUUFBUSxFQUNSLElBQUksRUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDeEU7YUFDQSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBMEIsRUFBRSxFQUFFLENBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FDdkMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2YsR0FBRyxJQUFJO1lBQ1AsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLHNCQUFzQixDQUNqRCxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQ2I7U0FDRixDQUFDLEVBQ0YsRUFBRSxDQUNILENBQ0YsQ0FDRixDQUFBO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVk7YUFDckIsTUFBTSxDQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3JFO2FBQ0EsSUFBSSxDQUNILFNBQVMsQ0FBQyxDQUFDLE9BQXlCLEVBQUUsRUFBRSxDQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvRCxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUM7WUFDckMsT0FBTztTQUNSLENBQUMsQ0FBQyxDQUNKLENBQ0YsQ0FBQTtJQUNMLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxnQkFBd0I7UUFDakQsT0FBTyxnQkFBZ0I7WUFDckIsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQ25DLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBWSxDQUFDLENBQzlEO1lBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNkLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBcUI7UUFDaEMsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQXFCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ2xELEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLEVBQUU7WUFDekIsT0FBTyxDQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUNyQixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxDQUN0RCxDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFTyxPQUFPLENBQUMsTUFBcUIsRUFBRSxrQkFBMkI7UUFDaEUsT0FBTyxDQUNMLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUztZQUN6QixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNyQixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxDQUN0RCxDQUFBO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxnQkFBd0I7UUFDcEMsT0FBTyxhQUFhLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLG1CQUFtQjtTQUN6QyxDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUNuQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FDMUQsQ0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUFDLE1BQXFCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ2xELEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQ3RFLENBQUE7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQ2xCLGdCQUF3QjtRQUV4QixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtRQUNuRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFFMUQsT0FBTyxhQUFhLENBQUMsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQy9DLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUU7WUFDakMsTUFBTSxHQUFHLEdBQUcsS0FBSyxJQUFJLFdBQVcsQ0FBQTtZQUNoQyxNQUFNLGNBQWMsR0FBRyxXQUFXLEtBQUssSUFBSSxDQUFBO1lBQzNDLE9BQU8sd0JBQXdCLENBQUMsR0FBRyxDQUFDO2lCQUNqQyxVQUFVLENBQUMsR0FBRyxDQUFDO2lCQUNmLElBQUksQ0FDSCxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ1QsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLGNBQWMsQ0FBcUMsQ0FDcEUsQ0FBQTtRQUNMLENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0lBRUQsd0JBQXdCLENBQ3RCLGdCQUF3QjtRQUV4QixPQUFPLElBQUksQ0FBQyxhQUFhO2FBQ3RCLE1BQU0sQ0FDTCxnQkFBZ0IsRUFDaEIsR0FBRyxFQUNILFVBQVUsRUFDVixFQUFFLEVBQ0YsS0FBSyxFQUNMLFNBQVMsRUFDVCxJQUFJLEVBQ0osS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUNMO1lBQ0UsZ0JBQWdCLEVBQUUsa0JBQWtCO1lBQ3BDLHVCQUF1QixFQUFFLGdDQUFnQztTQUMxRCxDQUNGO2FBQ0EsSUFBSSxDQUNILFNBQVMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDN0IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFDOUMsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQ1Qsd0JBQXdCLENBQUMsR0FBRyxDQUFDO2lCQUMxQixVQUFVLENBQUMsR0FBRyxDQUFDO2lCQUNmLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNmLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBa0MsQ0FBQTtZQUM3RCxDQUFDLENBQUMsQ0FDTCxDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNMLENBQUM7SUFFRCxVQUFVLENBQ1IsTUFBcUIsRUFDckIscUJBQThCLEVBQzlCLFlBQVksR0FBRyxJQUFJO1FBRW5CLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQzlDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2QsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztnQkFDMUMsTUFBTSxJQUFJLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQzVDLENBQUM7UUFDSCxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLEVBQ3pFLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUN2QixVQUFVLEVBQ1YsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsQ0FDVixDQUNGLEVBQ0QsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDZixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUN6RCxPQUFPLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO1FBQ25ELENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsaUJBQXlCO1FBQy9DLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUN4RCxVQUFVLENBQUMsS0FBSyxFQUFFLGtCQUEwQixFQUFFLEVBQUU7WUFDOUMsTUFBTSxTQUFTLEdBQUcsd0JBQXdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtZQUM5RCxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtZQUU3RCxNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssU0FBUyxDQUFBO1lBQ3ZDLE1BQU0sV0FBVyxHQUFHLE1BQU0sU0FBUyxDQUFDLFdBQVcsQ0FDN0MsTUFBTSxFQUNOLGtCQUFrQixDQUNuQixDQUFBO1lBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDcEQsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsY0FBa0MsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQ2xFLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRTtZQUN0QyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNoQyxDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxnQkFBd0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQzFELENBQUM7SUFFRCxtQkFBbUI7UUFDakIsT0FBTyxHQUFHLG1CQUFtQixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFBO0lBQzlDLENBQUM7SUFFRCxpQkFBaUIsQ0FDZixNQUFxQixFQUNyQixxQkFBOEI7UUFFOUIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUNsRSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNoQixJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1lBQ2pFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDNUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxnQkFBd0I7UUFDdkMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFDbkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUM1QixDQUFDO0lBRUQsY0FBYyxDQUFDLGdCQUF3QjtRQUNyQyxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksQ0FBQTtJQUNsRSxDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLFlBQVk7UUFDVixNQUFNLEtBQUssR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQzlCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2FBQ3ZELEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDOUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUE7UUFDcEMsT0FBTyxJQUFJLENBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FDVCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsT0FBTyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDMUQsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVELGNBQWM7UUFDWixNQUFNLEtBQUssR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ2xDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2FBQ3ZELEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDOUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFBO1FBQzNDLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3ZCLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxXQUEwQjtRQUNuRCxPQUFPLEVBQUUsQ0FBQztZQUNSLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0I7WUFDeEMsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDO1NBQzVELENBQUMsQ0FBQyxJQUFJLENBQ0wsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtZQUNwQyxJQUFJLFNBQVMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMzQixPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUE7WUFDakQsQ0FBQztZQUNELE9BQU8sUUFBUSxDQUFDO2dCQUNkLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQ3RCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUNiLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ2hDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixLQUFLLENBQUMsZ0JBQWdCLEtBQUssV0FBVyxDQUFDLGdCQUFnQixDQUMxRCxDQUFBO29CQUNELE9BQU8sY0FBYyxFQUFFLGFBQWEsSUFBSSxJQUFJLENBQUE7Z0JBQzlDLENBQUMsQ0FBQyxDQUNIO2dCQUNELElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDO2FBQzdDLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFO2dCQUN6QyxJQUFJLFlBQVksRUFBRSxhQUFhLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztvQkFDckQsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQzt3QkFDN0MsRUFBRSxRQUFRLEVBQUU7d0JBQ1osRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7b0JBQ2QsT0FBTzt3QkFDTCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUM3QixJQUFJLEVBQUUsWUFBWSxDQUFDLGFBQWE7cUJBQ2pDLENBQUE7Z0JBQ0gsQ0FBQztnQkFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUE7WUFDN0MsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGVBQWU7YUFDeEIsdUJBQXVCLEVBQUU7YUFDekIsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQ2hCLFNBQVM7YUFDTixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7YUFDaEQsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUM1QyxDQUNGLENBQUE7SUFDTCxDQUFDO0lBRU8sY0FBYyxDQUFDLGdCQUF3QjtRQUM3QyxPQUFPLElBQUksQ0FBQyxhQUFhO2FBQ3RCLFdBQVcsQ0FDVixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULEtBQUssRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFNBQVMsRUFDVCxFQUFFLGdCQUFnQixFQUFFLDBCQUErQyxFQUFFLENBQUMsMkRBQTJEO1NBQ2xJO2FBQ0EsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUNoQyxVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUUsQ0FDdEMsS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUMxRCxDQUNGLENBQUE7SUFDTCxDQUFDO0lBRU8sb0JBQW9CLENBQzFCLE1BQXFCLEVBQ3JCLHFCQUE4QjtRQUU5Qiw0RUFBNEU7UUFDNUUsTUFBTSxTQUFTLEdBQUcscUJBQXFCO1lBQ3JDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxxQkFBcUIsQ0FBQztZQUNqRCxDQUFDLENBQUMsSUFBSSxpQkFBaUIsRUFBRSxDQUFBO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQTtJQUNuRSxDQUFDO0lBRU8sc0JBQXNCLENBQzVCLGlCQUF5QjtRQUV6QixJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFBO1FBQy9CLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQTtRQUM1QixPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsMEJBQTBCLENBQUMsQ0FBQTtRQUUzRCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLEdBQUcsQ0FBUyxpQkFBaUIsRUFBRTtZQUM5QixZQUFZLEVBQU8sYUFBYTtZQUNoQyxPQUFPLEVBQUUsT0FBTztZQUNoQixPQUFPLEVBQUUsTUFBTTtTQUNoQixDQUFDO2FBQ0QsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFO1lBQ3RCLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUUvQixPQUFPLGVBQWUsQ0FBQTtRQUN4QixDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0wsQ0FBQztJQUVPLDJCQUEyQixDQUFDLFFBQWdCO1FBQ2xELE9BQU8sdUJBQXVCLFFBQVEsRUFBRSxDQUFBLENBQUMsc0RBQXNEO0lBQ2pHLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxXQUF3QixFQUFFLFFBQWdCO1FBQ3pFLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUN6QixJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLEVBQzFDLFdBQVcsQ0FDWixDQUFBO0lBQ0gsQ0FBQztJQUVPLHlCQUF5QixDQUFDLFFBQWdCO1FBQ2hELE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ2hDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FDM0MsQ0FBQTtJQUNILENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxRQUFnQjtRQUNuRCxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUM1RSxDQUFDOytHQXhrQlUsYUFBYTttSEFBYixhQUFhOzs0RkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSHR0cENsaWVudCxcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG4gIEh0dHBIZWFkZXJzLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgYXNzZXJ0VmFsaWRYbWwsXG4gIGZpbmRDb252ZXJ0ZXJGb3JEb2N1bWVudCxcbiAgR240Q29udmVydGVyLFxuICBHbjRTZWFyY2hSZXN1bHRzLFxuICBJc28xOTEzOUNvbnZlcnRlcixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcGkvbWV0YWRhdGEtY29udmVydGVyL3NyYydcbmltcG9ydCB7IFB1YmxpY2F0aW9uVmVyc2lvbkVycm9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvZXJyb3InXG5pbXBvcnQge1xuICBDYXRhbG9nUmVjb3JkLFxuICBEYXRhc2V0RmVhdHVyZUNhdGFsb2csXG4gIERhdGFzZXRGZWF0dXJlVHlwZSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvcmVjb3JkJ1xuaW1wb3J0IHtcbiAgQWdncmVnYXRpb25zLFxuICBBZ2dyZWdhdGlvbnNQYXJhbXMsXG4gIEZpZWxkRmlsdGVycyxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvc2VhcmNoJ1xuaW1wb3J0IHtcbiAgU2VhcmNoUGFyYW1zLFxuICBTZWFyY2hSZXN1bHRzLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9zZWFyY2gvc2VhcmNoLm1vZGVsJ1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvcGxhdGZvcm0uc2VydmljZS5pbnRlcmZhY2UnXG5pbXBvcnQgeyBSZWNvcmRzUmVwb3NpdG9yeUludGVyZmFjZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL3JlcG9zaXRvcnkvcmVjb3Jkcy1yZXBvc2l0b3J5LmludGVyZmFjZSdcbmltcG9ydCB7XG4gIExhbmd1YWdlc0FwaVNlcnZpY2UsXG4gIFJlY29yZHNBcGlTZXJ2aWNlLFxuICBTZWFyY2hBcGlTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2RhdGEtYWNjZXNzL2duNC9zcmMnXG5pbXBvcnQgeyBMQU5HXzNfVE9fMl9NQVBQRVIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvaTE4bi9zcmMnXG5pbXBvcnQge1xuICBjb21iaW5lTGF0ZXN0LFxuICBleGhhdXN0TWFwLFxuICBmb3JrSm9pbixcbiAgZnJvbSxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgdGhyb3dFcnJvcixcbn0gZnJvbSAncnhqcydcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBsdCB9IGZyb20gJ3NlbXZlcidcbmltcG9ydCB7IEVsYXN0aWNzZWFyY2hTZXJ2aWNlIH0gZnJvbSAnLi9lbGFzdGljc2VhcmNoJ1xuaW1wb3J0IHsgR240U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi9zZXR0aW5ncy9nbjQtc2V0dGluZ3Muc2VydmljZSdcblxuY29uc3QgbWluUHVibGljYXRpb25BcGlWZXJzaW9uID0gJzQuMi41J1xuXG5jb25zdCBURU1QT1JBUllfSURfUFJFRklYID0gJ1RFTVAtSUQtJ1xuXG5leHBvcnQgdHlwZSBSZWNvcmRBc1htbCA9IHN0cmluZ1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR240UmVwb3NpdG9yeSBpbXBsZW1lbnRzIFJlY29yZHNSZXBvc2l0b3J5SW50ZXJmYWNlIHtcbiAgX2RyYWZ0c0NoYW5nZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpXG4gIGRyYWZ0c0NoYW5nZWQkID0gdGhpcy5fZHJhZnRzQ2hhbmdlZC5hc09ic2VydmFibGUoKVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGduNFNlYXJjaEFwaTogU2VhcmNoQXBpU2VydmljZSxcbiAgICBwcml2YXRlIGduNFNlYXJjaEhlbHBlcjogRWxhc3RpY3NlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnbjRNYXBwZXI6IEduNENvbnZlcnRlcixcbiAgICBwcml2YXRlIGduNFJlY29yZHNBcGk6IFJlY29yZHNBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGxhdGZvcm1TZXJ2aWNlOiBQbGF0Zm9ybVNlcnZpY2VJbnRlcmZhY2UsXG4gICAgcHJpdmF0ZSBnbjRMYW5ndWFnZXNBcGk6IExhbmd1YWdlc0FwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2U6IEduNFNldHRpbmdzU2VydmljZVxuICApIHt9XG5cbiAgc2VhcmNoKHtcbiAgICBmaWx0ZXJzLFxuICAgIGZpZWxkcyxcbiAgICBvZmZzZXQsXG4gICAgbGltaXQsXG4gICAgc29ydCxcbiAgICBmaWx0ZXJJZHMsXG4gICAgZmlsdGVyR2VvbWV0cnksXG4gIH06IFNlYXJjaFBhcmFtcyk6IE9ic2VydmFibGU8U2VhcmNoUmVzdWx0cz4ge1xuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ2J1Y2tldCcsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHRoaXMuZ240U2VhcmNoSGVscGVyLmdldFNlYXJjaFJlcXVlc3RCb2R5KFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgIHNvcnQsXG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgZmlsdGVySWRzLFxuICAgICAgICAgICAgZmlsdGVyR2VvbWV0cnlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHJlc3VsdHM6IEduNFNlYXJjaFJlc3VsdHMpID0+XG4gICAgICAgICAgdGhpcy5nbjRNYXBwZXIucmVhZFJlY29yZHMocmVzdWx0cy5oaXRzLmhpdHMpLnRoZW4oKHJlY29yZHMpID0+ICh7XG4gICAgICAgICAgICBjb3VudDogcmVzdWx0cy5oaXRzLnRvdGFsPy52YWx1ZSB8fCAwLFxuICAgICAgICAgICAgcmVjb3JkcyxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgZ2V0TWF0Y2hlc0NvdW50KGZpbHRlcnM6IEZpZWxkRmlsdGVycyk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240U2VhcmNoQXBpXG4gICAgICAuc2VhcmNoKFxuICAgICAgICAncmVjb3Jkcy1jb3VudCcsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAuLi50aGlzLmduNFNlYXJjaEhlbHBlci5nZXRTZWFyY2hSZXF1ZXN0Qm9keShcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBmaWx0ZXJzXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0cmFja190b3RhbF9oaXRzOiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnBpcGUobWFwKChyZXN1bHRzOiBHbjRTZWFyY2hSZXN1bHRzKSA9PiByZXN1bHRzLmhpdHMudG90YWw/LnZhbHVlIHx8IDApKVxuICB9XG5cbiAgZ2V0UmVjb3JkKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdidWNrZXQnLFxuICAgICAgICBbJ2ZjYXRzJywgJ2hhc3NvdXJjZXMnXSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdGhpcy5nbjRTZWFyY2hIZWxwZXIuZ2V0TWV0YWRhdGFCeUlkc1BheWxvYWQoW3VuaXF1ZUlkZW50aWZpZXJdKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXN1bHRzOiBHbjRTZWFyY2hSZXN1bHRzKSA9PiByZXN1bHRzLmhpdHMuaGl0c1swXSksXG4gICAgICAgIHN3aXRjaE1hcCgocmVjb3JkKSA9PlxuICAgICAgICAgIHJlY29yZCA/IHRoaXMuZ240TWFwcGVyLnJlYWRSZWNvcmQocmVjb3JkKSA6IG9mKG51bGwpXG4gICAgICAgIClcbiAgICAgIClcbiAgfVxuXG4gIGdldE11bHRpcGxlUmVjb3JkcyhcbiAgICB1bmlxdWVJZGVudGlmaWVyczogc3RyaW5nW11cbiAgKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkW10gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240U2VhcmNoQXBpXG4gICAgICAuc2VhcmNoKFxuICAgICAgICAnYnVja2V0JyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB0aGlzLmduNFNlYXJjaEhlbHBlci5nZXRNZXRhZGF0YUJ5SWRzUGF5bG9hZCh1bmlxdWVJZGVudGlmaWVycylcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzdWx0czogR240U2VhcmNoUmVzdWx0cykgPT4gcmVzdWx0cy5oaXRzLmhpdHMpLFxuICAgICAgICBzd2l0Y2hNYXAoKHJlY29yZHMpID0+XG4gICAgICAgICAgcmVjb3JkcyAmJiByZWNvcmRzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGhpcy5nbjRNYXBwZXIucmVhZFJlY29yZHMocmVjb3JkcylcbiAgICAgICAgICAgIDogb2YobnVsbClcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBFbWJlZGRlZEZlYXR1cmVDYXRhbG9nKFxuICAgIGZlYXR1cmVUeXBlczogQXJyYXk8RGF0YXNldEZlYXR1cmVUeXBlPlxuICApOiBEYXRhc2V0RmVhdHVyZUNhdGFsb2cge1xuICAgIHJldHVybiB7XG4gICAgICBmZWF0dXJlVHlwZXM6IGZlYXR1cmVUeXBlcy5tYXAoKGZlYXR1cmVUeXBlKSA9PiAoe1xuICAgICAgICBuYW1lOiBmZWF0dXJlVHlwZS50eXBlTmFtZSB8fCAnJyxcbiAgICAgICAgZGVmaW5pdGlvbjogZmVhdHVyZVR5cGUuZGVmaW5pdGlvbiB8fCAnJyxcbiAgICAgICAgYXR0cmlidXRlczogQXJyYXkuaXNBcnJheShmZWF0dXJlVHlwZS5hdHRyaWJ1dGVUYWJsZSlcbiAgICAgICAgICA/IGZlYXR1cmVUeXBlLmF0dHJpYnV0ZVRhYmxlLm1hcCgoYXR0cikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBhdHRyLnZhbHVlc1xuICAgICAgICAgICAgICAgID8uZmlsdGVyKCh2KSA9PiB2LmNvZGUgfHwgdi5sYWJlbClcbiAgICAgICAgICAgICAgICAubWFwKCh2KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgY29kZTogdi5jb2RlLFxuICAgICAgICAgICAgICAgICAgbGFiZWw6IHYubGFiZWwsXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZTogYXR0ci5uYW1lLFxuICAgICAgICAgICAgICAgIGNvZGU6IGF0dHIuY29kZSxcbiAgICAgICAgICAgICAgICBkZWZpbml0aW9uOiBhdHRyLmRlZmluaXRpb24sXG4gICAgICAgICAgICAgICAgdHlwZTogYXR0ci50eXBlLFxuICAgICAgICAgICAgICAgIC4uLih2YWx1ZXM/Lmxlbmd0aCA+IDAgPyB7IHZhbHVlcyB9IDoge30pLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogW10sXG4gICAgICB9KSksXG4gICAgfVxuICB9XG4gIGdldEZlYXR1cmVDYXRhbG9nKFxuICAgIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgICB2aXNpdGVkOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKSAvLyBwcmV2ZW50IGxvb3BpbmdcbiAgKTogT2JzZXJ2YWJsZTxEYXRhc2V0RmVhdHVyZUNhdGFsb2cgfCBudWxsPiB7XG4gICAgaWYgKFxuICAgICAgcmVjb3JkLmV4dHJhcz8uWydmZWF0dXJlVHlwZXMnXSAmJlxuICAgICAgQXJyYXkuaXNBcnJheShyZWNvcmQuZXh0cmFzWydmZWF0dXJlVHlwZXMnXSkgJiZcbiAgICAgIHJlY29yZC5leHRyYXNbJ2ZlYXR1cmVUeXBlcyddLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHJldHVybiBvZih0aGlzLm1hcEVtYmVkZGVkRmVhdHVyZUNhdGFsb2cocmVjb3JkLmV4dHJhc1snZmVhdHVyZVR5cGVzJ10pKVxuICAgIH1cblxuICAgIGNvbnN0IGZlYXR1cmVDYXRhbG9nSWRlbnRpZmllciA9IHJlY29yZC5leHRyYXNbXG4gICAgICAnZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyJ1xuICAgIF0gYXMgc3RyaW5nXG4gICAgaWYgKGZlYXR1cmVDYXRhbG9nSWRlbnRpZmllciAmJiAhdmlzaXRlZC5oYXMoZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyKSkge1xuICAgICAgdmlzaXRlZC5hZGQoZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjb3JkKGZlYXR1cmVDYXRhbG9nSWRlbnRpZmllcikucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChyZWNvcmQpID0+XG4gICAgICAgICAgcmVjb3JkID8gdGhpcy5nZXRGZWF0dXJlQ2F0YWxvZyhyZWNvcmQsIHZpc2l0ZWQpIDogb2YobnVsbClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBvZihudWxsKVxuICB9XG5cbiAgZ2V0U2ltaWxhclJlY29yZHMoc2ltaWxhclRvOiBDYXRhbG9nUmVjb3JkKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkW10+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdidWNrZXQnLFxuICAgICAgICBudWxsLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB0aGlzLmduNFNlYXJjaEhlbHBlci5nZXRSZWxhdGVkUmVjb3JkUGF5bG9hZChzaW1pbGFyVG8sIDMpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHJlc3VsdHM6IEduNFNlYXJjaFJlc3VsdHMpID0+XG4gICAgICAgICAgdGhpcy5nbjRNYXBwZXIucmVhZFJlY29yZHMocmVzdWx0cy5oaXRzLmhpdHMpXG4gICAgICAgIClcbiAgICAgIClcbiAgfVxuXG4gIGdldFNvdXJjZXMocmVjb3JkOiBDYXRhbG9nUmVjb3JkKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkW10+IHtcbiAgICBjb25zdCBzb3VyY2VzSWRlbnRpZmllcnMgPSByZWNvcmQuZXh0cmFzPy5bJ3NvdXJjZXNJZGVudGlmaWVycyddIGFzIHN0cmluZ1tdXG4gICAgaWYgKHNvdXJjZXNJZGVudGlmaWVycyAmJiBzb3VyY2VzSWRlbnRpZmllcnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TXVsdGlwbGVSZWNvcmRzKHNvdXJjZXNJZGVudGlmaWVycylcbiAgICB9XG4gICAgcmV0dXJuIG9mKG51bGwpXG4gIH1cblxuICBnZXRTb3VyY2VPZihyZWNvcmQ6IENhdGFsb2dSZWNvcmQpOiBPYnNlcnZhYmxlPENhdGFsb2dSZWNvcmRbXT4ge1xuICAgIGNvbnN0IHNvdXJjZU9mSWRlbnRpZmllcnMgPSByZWNvcmQuZXh0cmFzPy5bXG4gICAgICAnc291cmNlT2ZJZGVudGlmaWVycydcbiAgICBdIGFzIHN0cmluZ1tdXG4gICAgaWYgKHNvdXJjZU9mSWRlbnRpZmllcnMgJiYgc291cmNlT2ZJZGVudGlmaWVycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRNdWx0aXBsZVJlY29yZHMoc291cmNlT2ZJZGVudGlmaWVycylcbiAgICB9XG4gICAgcmV0dXJuIG9mKG51bGwpXG4gIH1cblxuICBhZ2dyZWdhdGUocGFyYW1zOiBBZ2dyZWdhdGlvbnNQYXJhbXMpOiBPYnNlcnZhYmxlPEFnZ3JlZ2F0aW9ucz4ge1xuICAgIC8vIGlmIGFnZ3JlZ2F0aW9ucyBhcmUgZW1wdHksIHJldHVybiBhbiBlbXB0eSBvYmplY3QgcmlnaHQgYXdheVxuICAgIGlmIChPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG9mKHt9KVxuXG4gICAgY29uc3QgYWdncmVnYXRpb25zID0gdGhpcy5nbjRTZWFyY2hIZWxwZXIuYnVpbGRBZ2dyZWdhdGlvbnNQYXlsb2FkKHBhcmFtcylcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdidWNrZXQnLFxuICAgICAgICBudWxsLFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmduNFNlYXJjaEhlbHBlci5nZXRTZWFyY2hSZXF1ZXN0Qm9keShhZ2dyZWdhdGlvbnMpKVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IEduNFNlYXJjaFJlc3VsdHMpID0+XG4gICAgICAgICAgT2JqZWN0LmtleXMocmVzcG9uc2UuYWdncmVnYXRpb25zKS5yZWR1Y2UoXG4gICAgICAgICAgICAocHJldiwgY3VycikgPT4gKHtcbiAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgW2N1cnJdOiB0aGlzLmduNFNlYXJjaEhlbHBlci5wYXJzZUFnZ3JlZ2F0aW9uUmVzdWx0KFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmFnZ3JlZ2F0aW9uc1tjdXJyXSxcbiAgICAgICAgICAgICAgICBwYXJhbXNbY3Vycl1cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgfVxuXG4gIGZ1enp5U2VhcmNoKHF1ZXJ5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlYXJjaFJlc3VsdHM+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdidWNrZXQnLFxuICAgICAgICBudWxsLFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmduNFNlYXJjaEhlbHBlci5idWlsZEF1dG9jb21wbGV0ZVBheWxvYWQocXVlcnkpKVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVzdWx0czogR240U2VhcmNoUmVzdWx0cykgPT5cbiAgICAgICAgICB0aGlzLmduNE1hcHBlci5yZWFkUmVjb3JkcyhyZXN1bHRzLmhpdHMuaGl0cykudGhlbigocmVjb3JkcykgPT4gKHtcbiAgICAgICAgICAgIGNvdW50OiByZXN1bHRzLmhpdHMudG90YWw/LnZhbHVlIHx8IDAsXG4gICAgICAgICAgICByZWNvcmRzLFxuICAgICAgICAgIH0pKVxuICAgICAgICApXG4gICAgICApXG4gIH1cblxuICBnZXRSZWNvcmRQdWJsaWNhdGlvblN0YXR1cyh1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdW5pcXVlSWRlbnRpZmllclxuICAgICAgPyB0aGlzLmdldFJlY29yZCh1bmlxdWVJZGVudGlmaWVyKS5waXBlKFxuICAgICAgICAgIG1hcCgocmVjb3JkKSA9PiByZWNvcmQuZXh0cmFzWydpc1B1Ymxpc2hlZFRvQWxsJ10gYXMgYm9vbGVhbilcbiAgICAgICAgKVxuICAgICAgOiBvZih0cnVlKVxuICB9XG5cbiAgY2FuRHVwbGljYXRlKHJlY29yZDogQ2F0YWxvZ1JlY29yZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWNvcmQua2luZCA9PT0gJ2RhdGFzZXQnXG4gIH1cblxuICBjYW5EZWxldGUocmVjb3JkOiBDYXRhbG9nUmVjb3JkKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmFsbG93RWRpdEhhcnZlc3RlZCQucGlwZShcbiAgICAgIG1hcCgoYWxsb3dFZGl0SGFydmVzdGVkKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgcmVjb3JkLmV4dHJhc1snZWRpdCddICYmXG4gICAgICAgICAgKCFyZWNvcmQuZXh0cmFzWydpc0hhcnZlc3RlZCddIHx8IGFsbG93RWRpdEhhcnZlc3RlZClcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGNhbkVkaXQocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCBhbGxvd0VkaXRIYXJ2ZXN0ZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgcmVjb3JkLmtpbmQgPT09ICdkYXRhc2V0JyAmJlxuICAgICAgcmVjb3JkLmV4dHJhc1snZWRpdCddICYmXG4gICAgICAoIXJlY29yZC5leHRyYXNbJ2lzSGFydmVzdGVkJ10gfHwgYWxsb3dFZGl0SGFydmVzdGVkKVxuICAgIClcbiAgfVxuXG4gIGNhbkVkaXRSZWNvcmQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5nZXRSZWNvcmQodW5pcXVlSWRlbnRpZmllciksXG4gICAgICB0aGlzLnNldHRpbmdzU2VydmljZS5hbGxvd0VkaXRIYXJ2ZXN0ZWQkLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtyZWNvcmQsIGFsbG93RWRpdEhhcnZlc3RlZF0pID0+XG4gICAgICAgIHJlY29yZCA/IHRoaXMuY2FuRWRpdChyZWNvcmQsIGFsbG93RWRpdEhhcnZlc3RlZCkgOiBmYWxzZVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIGNhbkVkaXRJbmRleGVkUmVjb3JkKHJlY29yZDogQ2F0YWxvZ1JlY29yZCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzU2VydmljZS5hbGxvd0VkaXRIYXJ2ZXN0ZWQkLnBpcGUoXG4gICAgICBtYXAoKGFsbG93RWRpdEhhcnZlc3RlZCkgPT4gdGhpcy5jYW5FZGl0KHJlY29yZCwgYWxsb3dFZGl0SGFydmVzdGVkKSlcbiAgICApXG4gIH1cblxuICBvcGVuUmVjb3JkRm9yRWRpdGlvbihcbiAgICB1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxbQ2F0YWxvZ1JlY29yZCwgc3RyaW5nLCBib29sZWFuXSB8IG51bGw+IHtcbiAgICBjb25zdCBkcmFmdCQgPSBvZih0aGlzLmdldFJlY29yZEZyb21Mb2NhbFN0b3JhZ2UodW5pcXVlSWRlbnRpZmllcikpXG4gICAgY29uc3QgcmVjb3JkQXNYbWwkID0gdGhpcy5nZXRSZWNvcmRBc1htbCh1bmlxdWVJZGVudGlmaWVyKVxuXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW2RyYWZ0JCwgcmVjb3JkQXNYbWwkXSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoW2RyYWZ0LCByZWNvcmRBc1htbF0pID0+IHtcbiAgICAgICAgY29uc3QgeG1sID0gZHJhZnQgPz8gcmVjb3JkQXNYbWxcbiAgICAgICAgY29uc3QgaXNTYXZlZEFscmVhZHkgPSByZWNvcmRBc1htbCAhPT0gbnVsbFxuICAgICAgICByZXR1cm4gZmluZENvbnZlcnRlckZvckRvY3VtZW50KHhtbClcbiAgICAgICAgICAucmVhZFJlY29yZCh4bWwpXG4gICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAocmVjb3JkKSA9PlxuICAgICAgICAgICAgICBbcmVjb3JkLCB4bWwsIGlzU2F2ZWRBbHJlYWR5XSBhcyBbQ2F0YWxvZ1JlY29yZCwgc3RyaW5nLCBib29sZWFuXVxuICAgICAgICAgIClcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgb3BlblJlY29yZEZvckR1cGxpY2F0aW9uKFxuICAgIHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFtDYXRhbG9nUmVjb3JkLCBzdHJpbmcsIHRydWVdIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmduNFJlY29yZHNBcGlcbiAgICAgIC5jcmVhdGUoXG4gICAgICAgIHVuaXF1ZUlkZW50aWZpZXIsXG4gICAgICAgICcyJyxcbiAgICAgICAgJ01FVEFEQVRBJyxcbiAgICAgICAgJycsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRydWUsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICdib2R5JyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHtcbiAgICAgICAgICBodHRwSGVhZGVyQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6ICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9VVRGLTgnLFxuICAgICAgICB9XG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh1bmlxdWVJZGVudGlmaWVyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjb3JkQXNYbWwodW5pcXVlSWRlbnRpZmllcilcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoeG1sKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgICAgICBmaW5kQ29udmVydGVyRm9yRG9jdW1lbnQoeG1sKVxuICAgICAgICAgICAgICAucmVhZFJlY29yZCh4bWwpXG4gICAgICAgICAgICAgIC50aGVuKChyZWNvcmQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3JlY29yZCwgeG1sLCB0cnVlXSBhcyBbQ2F0YWxvZ1JlY29yZCwgc3RyaW5nLCB0cnVlXVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfSlcbiAgICAgIClcbiAgfVxuXG4gIHNhdmVSZWNvcmQoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHJlZmVyZW5jZVJlY29yZFNvdXJjZT86IHN0cmluZyxcbiAgICBwdWJsaXNoVG9BbGwgPSB0cnVlXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMucGxhdGZvcm1TZXJ2aWNlLmdldEFwaVZlcnNpb24oKS5waXBlKFxuICAgICAgbWFwKCh2ZXJzaW9uKSA9PiB7XG4gICAgICAgIGlmIChsdCh2ZXJzaW9uLCBtaW5QdWJsaWNhdGlvbkFwaVZlcnNpb24pKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFB1YmxpY2F0aW9uVmVyc2lvbkVycm9yKHZlcnNpb24pXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuc2VyaWFsaXplUmVjb3JkVG9YbWwocmVjb3JkLCByZWZlcmVuY2VSZWNvcmRTb3VyY2UpKSxcbiAgICAgIHN3aXRjaE1hcCgocmVjb3JkWG1sKSA9PlxuICAgICAgICB0aGlzLmduNFJlY29yZHNBcGkuaW5zZXJ0KFxuICAgICAgICAgICdNRVRBREFUQScsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgcHVibGlzaFRvQWxsLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAnT1ZFUldSSVRFJyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAnX25vbmVfJyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICByZWNvcmRYbWxcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgY29uc3QgbWV0YWRhdGFJZCA9IE9iamVjdC5rZXlzKHJlc3BvbnNlLm1ldGFkYXRhSW5mb3MpWzBdXG4gICAgICAgIHJldHVybiByZXNwb25zZS5tZXRhZGF0YUluZm9zW21ldGFkYXRhSWRdWzBdLnV1aWRcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZHVwbGljYXRlRXh0ZXJuYWxSZWNvcmQocmVjb3JkRG93bmxvYWRVcmw6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RXh0ZXJuYWxSZWNvcmRBc1htbChyZWNvcmREb3dubG9hZFVybCkucGlwZShcbiAgICAgIGV4aGF1c3RNYXAoYXN5bmMgKGZldGNoZWRSZWNvcmRBc1htbDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRlciA9IGZpbmRDb252ZXJ0ZXJGb3JEb2N1bWVudChmZXRjaGVkUmVjb3JkQXNYbWwpXG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IGNvbnZlcnRlci5yZWFkUmVjb3JkKGZldGNoZWRSZWNvcmRBc1htbClcblxuICAgICAgICByZWNvcmQudGl0bGUgPSBgJHtyZWNvcmQudGl0bGV9IChDb3B5KWBcbiAgICAgICAgY29uc3QgcmVjb3JkQXNYbWwgPSBhd2FpdCBjb252ZXJ0ZXIud3JpdGVSZWNvcmQoXG4gICAgICAgICAgcmVjb3JkLFxuICAgICAgICAgIGZldGNoZWRSZWNvcmRBc1htbFxuICAgICAgICApXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2F2ZVJlY29yZChyZWNvcmQsIHJlY29yZEFzWG1sLCBmYWxzZSlcbiAgICAgIH0pLFxuICAgICAgZXhoYXVzdE1hcCgodXVpZE9ic2VydmFibGU6IE9ic2VydmFibGU8c3RyaW5nPikgPT4gdXVpZE9ic2VydmFibGUpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBkZWxldGVSZWNvcmQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240UmVjb3Jkc0FwaS5kZWxldGVSZWNvcmQodW5pcXVlSWRlbnRpZmllcilcbiAgfVxuXG4gIGdlbmVyYXRlVGVtcG9yYXJ5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7VEVNUE9SQVJZX0lEX1BSRUZJWH0ke0RhdGUubm93KCl9YFxuICB9XG5cbiAgc2F2ZVJlY29yZEFzRHJhZnQoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHJlZmVyZW5jZVJlY29yZFNvdXJjZT86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZVJlY29yZFRvWG1sKHJlY29yZCwgcmVmZXJlbmNlUmVjb3JkU291cmNlKS5waXBlKFxuICAgICAgdGFwKChyZWNvcmRYbWwpID0+IHtcbiAgICAgICAgdGhpcy5zYXZlUmVjb3JkVG9Mb2NhbFN0b3JhZ2UocmVjb3JkWG1sLCByZWNvcmQudW5pcXVlSWRlbnRpZmllcilcbiAgICAgICAgdGhpcy5fZHJhZnRzQ2hhbmdlZC5uZXh0KClcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgY2xlYXJSZWNvcmREcmFmdCh1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZVJlY29yZEZyb21Mb2NhbFN0b3JhZ2UodW5pcXVlSWRlbnRpZmllcilcbiAgICB0aGlzLl9kcmFmdHNDaGFuZ2VkLm5leHQoKVxuICB9XG5cbiAgcmVjb3JkSGFzRHJhZnQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVjb3JkRnJvbUxvY2FsU3RvcmFnZSh1bmlxdWVJZGVudGlmaWVyKSAhPT0gbnVsbFxuICB9XG5cbiAgLy8gZ2VuZXJhdGVkIGJ5IGNvcGlsb3RcbiAgZ2V0QWxsRHJhZnRzKCk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZFtdPiB7XG4gICAgY29uc3QgaXRlbXMgPSB7IC4uLndpbmRvdy5sb2NhbFN0b3JhZ2UgfVxuICAgIGNvbnN0IGRyYWZ0cyA9IE9iamVjdC5rZXlzKGl0ZW1zKVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkuc3RhcnRzV2l0aCgnZ2VvbmV0d29yay11aS1kcmFmdC0nKSlcbiAgICAgIC5tYXAoKGtleSkgPT4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkpXG4gICAgICAuZmlsdGVyKChkcmFmdCkgPT4gZHJhZnQgIT09IG51bGwpXG4gICAgcmV0dXJuIGZyb20oXG4gICAgICBQcm9taXNlLmFsbChcbiAgICAgICAgZHJhZnRzLm1hcCgoZHJhZnQpID0+IHtcbiAgICAgICAgICByZXR1cm4gZmluZENvbnZlcnRlckZvckRvY3VtZW50KGRyYWZ0KS5yZWFkUmVjb3JkKGRyYWZ0KVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIGdldERyYWZ0c0NvdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgY29uc3QgaXRlbXMgPSB7IC4uLndpbmRvdy5sb2NhbFN0b3JhZ2UgfVxuICAgIGNvbnN0IGRyYWZ0Q291bnQgPSBPYmplY3Qua2V5cyhpdGVtcylcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5LnN0YXJ0c1dpdGgoJ2dlb25ldHdvcmstdWktZHJhZnQtJykpXG4gICAgICAubWFwKChrZXkpID0+IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpKVxuICAgICAgLmZpbHRlcigoZHJhZnQpID0+IGRyYWZ0ICE9PSBudWxsKS5sZW5ndGhcbiAgICByZXR1cm4gb2YoZHJhZnRDb3VudClcbiAgfVxuXG4gIGhhc1JlY29yZENoYW5nZWRTaW5jZURyYWZ0KGxvY2FsUmVjb3JkOiBDYXRhbG9nUmVjb3JkKSB7XG4gICAgcmV0dXJuIG9mKHtcbiAgICAgIGlzVW5zYXZlZDogIWxvY2FsUmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIsXG4gICAgICBoYXNEcmFmdDogdGhpcy5yZWNvcmRIYXNEcmFmdChsb2NhbFJlY29yZC51bmlxdWVJZGVudGlmaWVyKSxcbiAgICB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh7IGlzVW5zYXZlZCwgaGFzRHJhZnQgfSkgPT4ge1xuICAgICAgICBpZiAoaXNVbnNhdmVkIHx8ICFoYXNEcmFmdCkge1xuICAgICAgICAgIHJldHVybiBvZih7IHVzZXI6IHVuZGVmaW5lZCwgZGF0ZTogdW5kZWZpbmVkIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKFtcbiAgICAgICAgICB0aGlzLmdldEFsbERyYWZ0cygpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGRyYWZ0cykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1JlY29yZCA9IGRyYWZ0cy5maW5kKFxuICAgICAgICAgICAgICAgIChkcmFmdCkgPT5cbiAgICAgICAgICAgICAgICAgIGRyYWZ0LnVuaXF1ZUlkZW50aWZpZXIgPT09IGxvY2FsUmVjb3JkLnVuaXF1ZUlkZW50aWZpZXJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hpbmdSZWNvcmQ/LnJlY29yZFVwZGF0ZWQgfHwgbnVsbFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApLFxuICAgICAgICAgIHRoaXMuZ2V0UmVjb3JkKGxvY2FsUmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIpLFxuICAgICAgICBdKS5waXBlKFxuICAgICAgICAgIG1hcCgoW2RyYWZ0UmVjb3JkVXBkYXRlZCwgcmVjZW50UmVjb3JkXSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlY2VudFJlY29yZD8ucmVjb3JkVXBkYXRlZCA+IGRyYWZ0UmVjb3JkVXBkYXRlZCkge1xuICAgICAgICAgICAgICBjb25zdCB1c2VyID0gcmVjZW50UmVjb3JkLmV4dHJhcz8uWydvd25lckluZm8nXVxuICAgICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgID8uc3BsaXQoJ3wnKVxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVzZXI6IGAke3VzZXJbMl19ICR7dXNlclsxXX1gLFxuICAgICAgICAgICAgICAgIGRhdGU6IHJlY2VudFJlY29yZC5yZWNvcmRVcGRhdGVkLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyB1c2VyOiB1bmRlZmluZWQsIGRhdGU6IHVuZGVmaW5lZCB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBnZXRBcHBsaWNhdGlvbkxhbmd1YWdlcygpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240TGFuZ3VhZ2VzQXBpXG4gICAgICAuZ2V0QXBwbGljYXRpb25MYW5ndWFnZXMoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobGFuZ3VhZ2VzKSA9PlxuICAgICAgICAgIGxhbmd1YWdlc1xuICAgICAgICAgICAgLm1hcCgobGFuZykgPT4gTEFOR18zX1RPXzJfTUFQUEVSW2xhbmcuaWQgPz8gJyddKVxuICAgICAgICAgICAgLmZpbHRlcigoY29kZSk6IGNvZGUgaXMgc3RyaW5nID0+ICEhY29kZSlcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWNvcmRBc1htbCh1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRSZWNvcmRzQXBpXG4gICAgICAuZ2V0UmVjb3JkQXMoXG4gICAgICAgIHVuaXF1ZUlkZW50aWZpZXIsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICdhcHBsaWNhdGlvbi94bWwnLFxuICAgICAgICAncmVzcG9uc2UnLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHsgaHR0cEhlYWRlckFjY2VwdDogJ3RleHQveG1sLGFwcGxpY2F0aW9uL3htbCcgYXMgJ2FwcGxpY2F0aW9uL3htbCcgfSAvLyB0aGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZXNwb25zZSBpcyBwYXJzZWQgYXMgdGV4dFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+XG4gICAgICAgICAgZXJyb3Iuc3RhdHVzID09PSA0MDQgPyBvZihudWxsKSA6IHRocm93RXJyb3IoKCkgPT4gZXJyb3IpXG4gICAgICAgIClcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgc2VyaWFsaXplUmVjb3JkVG9YbWwoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHJlZmVyZW5jZVJlY29yZFNvdXJjZT86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIC8vIGlmIHRoZXJlJ3MgYSByZWZlcmVuY2UgcmVjb3JkLCB1c2UgdGhhdCBzdGFuZGFyZDsgb3RoZXJ3aXNlLCB1c2UgaXNvMTkxMzlcbiAgICBjb25zdCBjb252ZXJ0ZXIgPSByZWZlcmVuY2VSZWNvcmRTb3VyY2VcbiAgICAgID8gZmluZENvbnZlcnRlckZvckRvY3VtZW50KHJlZmVyZW5jZVJlY29yZFNvdXJjZSlcbiAgICAgIDogbmV3IElzbzE5MTM5Q29udmVydGVyKClcbiAgICByZXR1cm4gZnJvbShjb252ZXJ0ZXIud3JpdGVSZWNvcmQocmVjb3JkLCByZWZlcmVuY2VSZWNvcmRTb3VyY2UpKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRFeHRlcm5hbFJlY29yZEFzWG1sKFxuICAgIHJlY29yZERvd25sb2FkVXJsOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpXG4gICAgY29uc3QgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0J1xuICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0JywgJ3RleHQveG1sLGFwcGxpY2F0aW9uL3htbCcpXG5cbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0PHN0cmluZz4ocmVjb3JkRG93bmxvYWRVcmwsIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgIG9ic2VydmU6ICdib2R5JyxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZWNvcmRBc1htbEZpbGUpID0+IHtcbiAgICAgICAgICBhc3NlcnRWYWxpZFhtbChyZWNvcmRBc1htbEZpbGUpXG5cbiAgICAgICAgICByZXR1cm4gcmVjb3JkQXNYbWxGaWxlXG4gICAgICAgIH0pXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsU3RvcmFnZUtleUZvclJlY29yZChyZWNvcmRJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGdlb25ldHdvcmstdWktZHJhZnQtJHtyZWNvcmRJZH1gIC8vIE5ldmVyIGNoYW5nZSB0aGlzIHByZWZpeCBhcyBpdCBpcyBhIGJyZWFraW5nIGNoYW5nZVxuICB9XG5cbiAgcHJpdmF0ZSBzYXZlUmVjb3JkVG9Mb2NhbFN0b3JhZ2UocmVjb3JkQXNYbWw6IFJlY29yZEFzWG1sLCByZWNvcmRJZDogc3RyaW5nKSB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgdGhpcy5nZXRMb2NhbFN0b3JhZ2VLZXlGb3JSZWNvcmQocmVjb3JkSWQpLFxuICAgICAgcmVjb3JkQXNYbWxcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFJlY29yZEZyb21Mb2NhbFN0b3JhZ2UocmVjb3JkSWQ6IHN0cmluZyk6IFJlY29yZEFzWG1sIHtcbiAgICByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFxuICAgICAgdGhpcy5nZXRMb2NhbFN0b3JhZ2VLZXlGb3JSZWNvcmQocmVjb3JkSWQpXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVSZWNvcmRGcm9tTG9jYWxTdG9yYWdlKHJlY29yZElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5nZXRMb2NhbFN0b3JhZ2VLZXlGb3JSZWNvcmQocmVjb3JkSWQpKVxuICB9XG59XG4iXX0=