@mediusinc/mng-commons 5.0.0-rc.1 → 5.0.0-rc.2

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 (123) hide show
  1. package/core/router/route-builder.d.ts +149 -26
  2. package/core/router/routes-builder.d.ts +28 -13
  3. package/esm2022/core/components/notification/notification-wrapper.component.mjs +3 -3
  4. package/esm2022/core/components/pages/error/error.page.component.mjs +3 -3
  5. package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +3 -3
  6. package/esm2022/core/directives/component.directive.mjs +3 -3
  7. package/esm2022/core/directives/dialog-keydown-handler.directive.mjs +3 -3
  8. package/esm2022/core/directives/template.directive.mjs +3 -3
  9. package/esm2022/core/pipes/boolean.pipe.mjs +3 -3
  10. package/esm2022/core/pipes/class-map.pipe.mjs +3 -3
  11. package/esm2022/core/pipes/enum.pipe.mjs +3 -3
  12. package/esm2022/core/pipes/enumerate-async.pipe.mjs +3 -3
  13. package/esm2022/core/pipes/enumerate.pipe.mjs +3 -3
  14. package/esm2022/core/pipes/getter.pipe.mjs +3 -3
  15. package/esm2022/core/pipes/i18n-property.pipe.mjs +3 -3
  16. package/esm2022/core/pipes/json-path.pipe.mjs +3 -3
  17. package/esm2022/core/pipes/parametrize.pipe.mjs +3 -3
  18. package/esm2022/core/pipes/template.pipe.mjs +3 -3
  19. package/esm2022/core/router/route-builder.mjs +211 -84
  20. package/esm2022/core/router/routes-builder.mjs +41 -43
  21. package/esm2022/core/security/permission.service.mjs +3 -3
  22. package/esm2022/core/services/commons-init.service.mjs +3 -3
  23. package/esm2022/core/services/commons-router.service.mjs +3 -3
  24. package/esm2022/core/services/commons.service.mjs +3 -3
  25. package/esm2022/core/services/local-storage-config.service.mjs +3 -3
  26. package/esm2022/form/components/autocomplete/autocomplete.component.mjs +36 -42
  27. package/esm2022/form/components/date-range/date-range.component.mjs +3 -3
  28. package/esm2022/form/components/dropdown/dropdown.component.mjs +3 -3
  29. package/esm2022/form/directives/input-trim.directive.mjs +3 -3
  30. package/esm2022/table/components/column-filter-full/column-filter-full.component.mjs +3 -3
  31. package/esm2022/table/components/column-value/column-value.component.mjs +3 -3
  32. package/esm2022/table/components/table/table.component.mjs +3 -3
  33. package/esm2022/table/pipes/locale-default-row-class.pipe.mjs +3 -3
  34. package/esm2022/table/pipes/table-column-filter-class.pipe.mjs +3 -3
  35. package/esm2022/table/services/data-list.service.mjs +3 -3
  36. package/esm2022/tableview/action/components/action/action.component.mjs +3 -3
  37. package/esm2022/tableview/action/components/editor/action-editor.component.mjs +3 -3
  38. package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +20 -19
  39. package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +3 -3
  40. package/esm2022/tableview/action/components/route/action-route.component.mjs +6 -5
  41. package/esm2022/tableview/action/components/table/action-table.component.mjs +3 -3
  42. package/esm2022/tableview/action/models/execution/action-instance.model.mjs +1 -1
  43. package/esm2022/tableview/action/services/action-executor.service.mjs +2 -2
  44. package/esm2022/tableview/action/services/component-action-executor.service.mjs +3 -3
  45. package/esm2022/tableview/action/services/data-provider-executor.service.mjs +3 -3
  46. package/esm2022/tableview/action/services/navigation.service.mjs +3 -3
  47. package/esm2022/tableview/action/services/root-action-executor.service.mjs +3 -3
  48. package/esm2022/tableview/action/services/view-container.service.mjs +3 -3
  49. package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +9 -1
  50. package/esm2022/tableview/api/action/models/execution/action-instance.model.mjs +1 -1
  51. package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +18 -29
  52. package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +1 -1
  53. package/esm2022/tableview/api/editor/descriptors/field-group.descriptor.mjs +3 -3
  54. package/esm2022/tableview/api/editor/descriptors/field-validation.descriptor.mjs +1 -1
  55. package/esm2022/tableview/api/editor/descriptors/field.descriptor.mjs +36 -7
  56. package/esm2022/tableview/api/editor/helpers/field-validators.mjs +15 -25
  57. package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +1 -1
  58. package/esm2022/tableview/api/editor/models/field.model.mjs +1 -1
  59. package/esm2022/tableview/api/editor/models/form-editor.event.mjs +1 -1
  60. package/esm2022/tableview/api/editor/models/form-editor.interface.mjs +1 -1
  61. package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +3 -3
  62. package/esm2022/tableview/api/editor/models/formly-field.model.mjs +1 -1
  63. package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +12 -19
  64. package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +157 -137
  65. package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +3 -3
  66. package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +5 -7
  67. package/esm2022/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.mjs +3 -3
  68. package/esm2022/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.mjs +103 -0
  69. package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +5 -7
  70. package/esm2022/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +3 -3
  71. package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +33 -50
  72. package/esm2022/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.mjs +3 -3
  73. package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +5 -7
  74. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +6 -8
  75. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +14 -13
  76. package/esm2022/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +3 -3
  77. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +3 -3
  78. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +3 -3
  79. package/esm2022/tableview/editor/helpers/editor-formly.mjs +62 -54
  80. package/esm2022/tableview/editor/helpers/formly-config.mjs +5 -3
  81. package/esm2022/tableview/editor/models/formly-config.model.mjs +1 -1
  82. package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +10 -10
  83. package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +26 -43
  84. package/esm2022/tableview/tableview/router/tableview-route-builder.mjs +17 -43
  85. package/fesm2022/mediusinc-mng-commons-core.mjs +311 -186
  86. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
  87. package/fesm2022/mediusinc-mng-commons-form.mjs +46 -51
  88. package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
  89. package/fesm2022/mediusinc-mng-commons-table.mjs +18 -18
  90. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +89 -80
  91. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
  92. package/fesm2022/mediusinc-mng-commons-tableview.mjs +497 -435
  93. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
  94. package/form/components/autocomplete/autocomplete.component.d.ts +8 -7
  95. package/package.json +1 -1
  96. package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +1 -3
  97. package/tableview/action/components/route/action-route.component.d.ts +1 -1
  98. package/tableview/action/models/execution/action-instance.model.d.ts +2 -1
  99. package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +8 -0
  100. package/tableview/api/action/models/execution/action-instance.model.d.ts +2 -1
  101. package/tableview/api/editor/descriptors/editor.descriptor.d.ts +14 -19
  102. package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +24 -24
  103. package/tableview/api/editor/descriptors/field-group.descriptor.d.ts +5 -5
  104. package/tableview/api/editor/descriptors/field-validation.descriptor.d.ts +10 -13
  105. package/tableview/api/editor/descriptors/field.descriptor.d.ts +15 -0
  106. package/tableview/api/editor/helpers/field-validators.d.ts +6 -2
  107. package/tableview/api/editor/models/editor-fields.model.d.ts +6 -4
  108. package/tableview/api/editor/models/field.model.d.ts +16 -7
  109. package/tableview/api/editor/models/form-editor.event.d.ts +6 -4
  110. package/tableview/api/editor/models/form-editor.interface.d.ts +37 -8
  111. package/tableview/api/editor/models/formly-custom-field.model.d.ts +1 -1
  112. package/tableview/api/editor/models/formly-field.model.d.ts +9 -7
  113. package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +6 -7
  114. package/tableview/editor/components/editor/form-editor.component.d.ts +51 -35
  115. package/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.d.ts +22 -0
  116. package/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.d.ts +5 -7
  117. package/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +0 -1
  118. package/tableview/editor/helpers/editor-formly.d.ts +11 -10
  119. package/tableview/editor/models/formly-config.model.d.ts +1 -1
  120. package/tableview/tableview/components/route/tableview-route.component.d.ts +2 -2
  121. package/tableview/tableview/components/tableview/tableview.component.d.ts +11 -10
  122. package/tableview/tableview/router/tableview-route-builder.d.ts +7 -13
  123. package/version-info.json +11 -0
@@ -167,4 +167,4 @@ export class ActionInstance {
167
167
  this.contexts.every(c => c.isClosed()));
168
168
  }
169
169
  }
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWluc3RhbmNlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9hY3Rpb24vbW9kZWxzL2V4ZWN1dGlvbi9hY3Rpb24taW5zdGFuY2UubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLGVBQWUsRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFnQixvQkFBb0IsRUFBRSxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbkgsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQW1CLGFBQWEsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzVFLE9BQU8sRUFDSCwyQkFBMkIsRUFHM0IsY0FBYyxFQUdqQixNQUFNLHNDQUFzQyxDQUFDO0FBRzlDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRXRFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFvQ3ZCLFlBQVksTUFBa0MsRUFBRSxLQUFLLEdBQUcsdUJBQXVCLENBQUMsWUFBWTtRQWhDNUUsZ0JBQVcsR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzlCLFdBQU0sR0FBRyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFdkUscUJBQXFCO1FBQ0wsd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFLaEQsYUFBUSxHQUF3QyxFQUFFLENBQUM7UUFDbkQscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUM7UUFDMUQsOEJBQXlCLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBMEIsQ0FBQyxDQUFDLENBQUM7UUFDL0Qsa0JBQWEsR0FBRyxJQUFJLGFBQWEs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QUFFLENBQUMsQ0FDekMsQ0FBQztJQUNOLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RHluYW1pY0RpYWxvZ1JlZn0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtBY3Rpb25QYXJhbWV0ZXJzLCBMb2dnZXJTZXJ2aWNlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0sXG4gICAgQWN0aW9uRGVzY3JpcHRvckluc3QsXG4gICAgQWN0aW9uRXhlY3V0aW9uRXJyb3IsXG4gICAgQWN0aW9uVHlwZUVudW0sXG4gICAgSUFjdGlvbkVkaXRvckNvbXBvbmVudCxcbiAgICBJQWN0aW9uSW5zdGFuY2Vcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZXZpZXcvYXBpJztcblxuaW1wb3J0IHtBY3Rpb25Db250ZXh0fSBmcm9tICcuL2FjdGlvbi1jb250ZXh0Lm1vZGVsJztcbmltcG9ydCB7QWN0aW9uSW5zdGFuY2VTdGF0ZUVudW19IGZyb20gJy4vYWN0aW9uLWluc3RhbmNlLXN0YXRlLm1vZGVsJztcblxuLyoqXG4gKiBBY3Rpb24gZXhlY3V0aW9uIGluc3RhbmNlIGNvbnRhaW5pbmcgZGF0YSBhYm91dCBleGVjdXRpb24gc3RhdGUgb2YgYWN0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlID0gdW5kZWZpbmVkPiBpbXBsZW1lbnRzIElBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlSWQ6IHN0cmluZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2VMb25nTmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0+O1xuICAgIHB1YmxpYyByZWFkb25seSBjcmVhdGVkRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBMb2dnZXJTZXJ2aWNlLmdldCgpLmNyZWF0ZSgnQWN0aW9uSW5zdGFuY2UnKTtcblxuICAgIC8vIGZ1bmN0aW9uIGV4ZWN1dGlvblxuICAgIHB1YmxpYyByZWFkb25seSBpc1J1bkxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvLyBwYXJhbWV0ZXJzLCBjb250ZXh0cywgc3RhdGVzXG4gICAgcHVibGljIHRyaWdnZXJQYXJhbWV0ZXJzPzogQWN0aW9uUGFyYW1ldGVyczxJdGVtPjtcbiAgICBwdWJsaWMgYWN0aXZhdGlvblBhcmFtZXRlcnM/OiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dHM6IEFycmF5PEFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4+ID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBleGVjdXRpb25TdWJqZWN0ID0gbmV3IFN1YmplY3Q8SXRlbSB8IG51bGwgfCB1bmRlZmluZWQ+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBleGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtPigxKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3VsdFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxJdGVtIHwgbnVsbD4oMSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlcnJvclN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxBY3Rpb25FeGVjdXRpb25FcnJvcj4oMSk7XG5cbiAgICBwcml2YXRlIGNvbnRleHRFeGVjdXRpb25TdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG5cbiAgICAvLyByZXN1bHQgb3IgZXJyb3JcbiAgICBwcml2YXRlIF9yZXN1bHQ/OiBJdGVtIHwgbnVsbDtcbiAgICBwcml2YXRlIF9lcnJvcj86IEFjdGlvbkV4ZWN1dGlvbkVycm9yO1xuXG4gICAgLy8gYWRkaXRpb25hbCBkYXRhIGZyb20gdHJpZ2dlci9hY3RpdmF0aW9uXG4gICAgcHVibGljIGFjdGl2YXRpb25EaWFsb2dSZWY/OiBEeW5hbWljRGlhbG9nUmVmO1xuICAgIHB1YmxpYyBhY3RpdmF0aW9uRWRpdG9yQ29tcG9uZW50UmVmPzogSUFjdGlvbkVkaXRvckNvbXBvbmVudDtcblxuICAgIC8vIGxpbmtlZCBhY3Rpb25zXG4gICAgcHJpdmF0ZSBfcmVhY3RpdmF0aW9uSW5zdGFuY2VTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7IC8vIGVkaXRvciBhY3Rpb24gd2l0aCByZXN1Ym1pdCBlbmFibGVkXG4gICAgcHVibGljIHByZXZpb3VzSW5zdGFuY2U/OiBJQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT47XG4gICAgcHVibGljIG5leHRBY3Rpb25JbnN0YW5jZT86IElBY3Rpb25JbnN0YW5jZTxhbnksIGFueT47IC8vIGFzIGRlZmluZWQgaW4gYWN0aW9uIGRlc2NyaXB0b3JcbiAgICBwdWJsaWMgZXJyb3JBY3Rpb25JbnN0YW5jZT86IElBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPjsgLy8gZXJyb3IgYWN0aW9uIG11c3QgcmVseSBvbiBzYW1lIHR5cGUsIGFzIGRlZmluZWQgaW4gYWN0aW9uIGRlc2NyaXB0b3JcblxuICAgIGNvbnN0cnVjdG9yKGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8SXRlbT4sIHN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uVHJpZ2dlclN0YXJ0KSB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VJZCA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZUxvbmdOYW1lID0gYCR7YWN0aW9uLmFjdGlvbk5hbWVMb25nfV8ke3RoaXMuaW5zdGFuY2VJZH1gO1xuICAgICAgICB0aGlzLmFjdGlvbiA9IGFjdGlvbjtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNSdW5Mb2FkaW5nJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSdW5Mb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHRzLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IHRoaXMuY29udGV4dHNbdGhpcy5jb250ZXh0cy5sZW5ndGggLSAxXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGV4ZWN1dGlvbiQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGlvblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBleGVjdXRpb25Jc1J1bm5pbmckKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc3RhdGUoc3RhdGU6IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtKSB7XG4gICAgICAgIGlmIChzdGF0ZSA+IHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlIHx8ICh0aGlzLnN0YXRlU3ViamVjdC52YWx1ZSA9PT0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuRXJyb3IgJiYgc3RhdGUgPT09IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1blN0YXJ0KSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYEluc3RhbmNlICR7dGhpcy5pbnN0YW5jZUxvbmdOYW1lfSAtIHN0YXRlICMke3N0YXRlfTogJHtBY3Rpb25JbnN0YW5jZVN0YXRlRW51bVtzdGF0ZV19YCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHN0YXRlKTtcbiAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbDpcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaEVycm9yRmluYWw6XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hEaXNtaXNzZWRGaW5hbDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyID09PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25DbGljaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWw6XG4gICAgICAgICAgICAgICAgICAgIC8vIHBhcnRpYWxseSBmaW5pc2ggcmVhY3RpdmF0aW9uIGJlY2F1c2UgbmV3IGluc3RhbmNlIGV2ZW50IG11c3Qgc3RpbGwgYmUgZW1pdHRlZFxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaENvbXBvbmVudERlc3Ryb3lGaW5hbDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hSb3V0ZVVudHJpZ2dlckVuZEZpbmFsOlxuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoUm91dGVVbnRyaWdnZXJUaW1lb3V0RmluYWw6XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHN0YXRlJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXN1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCByZXN1bHQocmVzdWx0OiBJdGVtIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBJbnN0YW5jZSAke3RoaXMuaW5zdGFuY2VMb25nTmFtZX0gLSByZXN1bHRgLCByZXN1bHQpO1xuXG4gICAgICAgIHRoaXMuX3Jlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgdGhpcy5yZXN1bHRTdWJqZWN0Lm5leHQocmVzdWx0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlc3VsdCQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZXJyb3IoZXJyb3I6IEFjdGlvbkV4ZWN1dGlvbkVycm9yIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShgSW5zdGFuY2UgJHt0aGlzLmluc3RhbmNlTG9uZ05hbWV9IC0gZXJyb3JgLCBlcnJvcik7XG5cbiAgICAgICAgdGhpcy5fZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dChlcnJvcik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlcnJvciQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHJlYWN0aXZhdGlvbkluc3RhbmNlKGluc3RhbmNlOiBJQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gdGhpcyBpcyBhbGxvd2VkIHRvIG9ubHkgYmUgZXhlY3V0ZWQgb25jZSBmb3Igc3ViamVjdCBhbmQgbXVzdCBiZSBpbiBjb3JyZWN0IHN0YXR1cyFcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWFjdGl2YXRpb25JbnN0YW5jZVN1YmplY3QubmV4dChpbnN0YW5jZSk7XG4gICAgICAgIHRoaXMuX3JlYWN0aXZhdGlvbkluc3RhbmNlU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVhY3RpdmF0aW9uSW5zdGFuY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWFjdGl2YXRpb25JbnN0YW5jZVN1YmplY3QudmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZWFjdGl2YXRpb25JbnN0YW5jZSQoKTogT2JzZXJ2YWJsZTxJQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWN0aXZhdGlvbkluc3RhbmNlU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKGkgPT4gISFpKSwgLy8gaWdub3JlIHVuZGVmaW5lZCBldmVudHMgKHVzdWFsbHkgaW5pdGlhbClcbiAgICAgICAgICAgIG1hcChpID0+IGkhKSxcbiAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29udGV4dEF0KGlkeDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBpZHggPCB0aGlzLmNvbnRleHRzLmxlbmd0aCA/IHRoaXMuY29udGV4dHNbaWR4XSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIG5ld0NvbnRleHQoY29udGV4dDogQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPiwgZmluaXNoUHJldmlvdXMgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBJbnN0YW5jZSAke3RoaXMuaW5zdGFuY2VMb25nTmFtZX0gLSBuZXcgY29udGV4dCAke2NvbnRleHQuY29udGV4dExvbmdOYW1lfWApO1xuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBpZiAoY3VycmVudENvbnRleHQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmV4ZWN1dGlvbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250ZXh0RXhlY3V0aW9uU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5jb250ZXh0RXhlY3V0aW9uU3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmNvbnRleHRFeGVjdXRpb25TdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICBjb250ZXh0LmV4ZWN1dGlvbiQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBuZXh0ID0+IHRoaXMuZXhlY3V0aW9uU3ViamVjdC5uZXh0KG5leHQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB0aGlzLmV4ZWN1dGlvblN1YmplY3QuZXJyb3IoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHRFeGVjdXRpb25TdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICBjb250ZXh0LmV4ZWN1dGlvbklzUnVubmluZyQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBuZXh0ID0+IHRoaXMuZXhlY3V0aW9uSXNSdW5uaW5nU3ViamVjdC5uZXh0KG5leHQpXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHRzLnB1c2goY29udGV4dCk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvcmNlRmluaXNoKCkge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBGb3JjZSBmaW5pc2hpbmcgaW5zdGFuY2UgJyR7dGhpcy5pbnN0YW5jZUxvbmdOYW1lfScuIFRyeSBjb21wbGV0aW5nIGluc3RhbmNlIHdpdGggc3RhdGVzIGluc3RlYWQuYCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hEaXNtaXNzZWRGaW5hbDtcbiAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmlzaChyZWFjdGl2YXRlID0gZmFsc2UpIHtcbiAgICAgICAgLy8gY29tcGxldGUgYWxsIHN1YmplY3RzXG4gICAgICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaChjID0+IGMuZmluaXNoKCkpO1xuICAgICAgICB0aGlzLmV4ZWN1dGlvblN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuc3RhdGVTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMucmVzdWx0U3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICBpZiAoIXJlYWN0aXZhdGUpIHtcbiAgICAgICAgICAgIC8vIGFsbG93IHJlYWN0aXZhdGlvbiBpbnN0YW5jZSB0byBiZSBlbWl0dGVkIHNlcGFyYXRlbHlcbiAgICAgICAgICAgIHRoaXMuX3JlYWN0aXZhdGlvbkluc3RhbmNlU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ2xvc2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5leGVjdXRpb25TdWJqZWN0LmlzU3RvcHBlZCAmJlxuICAgICAgICAgICAgdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0LmlzU3RvcHBlZCAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QuaXNTdG9wcGVkICYmXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFN1YmplY3QuaXNTdG9wcGVkICYmXG4gICAgICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5pc1N0b3BwZWQgJiZcbiAgICAgICAgICAgIHRoaXMuX3JlYWN0aXZhdGlvbkluc3RhbmNlU3ViamVjdC5pc1N0b3BwZWQgJiZcbiAgICAgICAgICAgIHRoaXMuY29udGV4dEV4ZWN1dGlvblN1YnNjcmlwdGlvbnMuZXZlcnkocyA9PiBzLmNsb3NlZCkgJiZcbiAgICAgICAgICAgIHRoaXMuY29udGV4dHMuZXZlcnkoYyA9PiBjLmlzQ2xvc2VkKCkpXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWluc3RhbmNlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9hY3Rpb24vbW9kZWxzL2V4ZWN1dGlvbi9hY3Rpb24taW5zdGFuY2UubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLGVBQWUsRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFnQixvQkFBb0IsRUFBRSxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbkgsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQW1CLGFBQWEsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzVFLE9BQU8sRUFDSCwyQkFBMkIsRUFHM0IsY0FBYyxFQUdqQixNQUFNLHNDQUFzQyxDQUFDO0FBRzlDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRXRFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFxQ3ZCLFlBQVksTUFBa0MsRUFBRSxLQUFLLEdBQUcsdUJBQXVCLENBQUMsWUFBWTtRQWpDNUUsZ0JBQVcsR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzlCLFdBQU0sR0FBRyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFdkUscUJBQXFCO1FBQ0wsd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFLaEQsYUFBUSxHQUF3QyxFQUFFLENBQUM7UUFDbkQscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUM7UUFDMUQsOEJBQXlCLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBMEIsQ0FBQyxDQUFDLENBQUM7UUFDL0Qsa0JBQWEsR0FBRyxJQUFJLGFBQWEs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QUFFLENBQUMsQ0FDekMsQ0FBQztJQUNOLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RHluYW1pY0RpYWxvZ1JlZn0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtBY3Rpb25QYXJhbWV0ZXJzLCBMb2dnZXJTZXJ2aWNlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0sXG4gICAgQWN0aW9uRGVzY3JpcHRvckluc3QsXG4gICAgQWN0aW9uRXhlY3V0aW9uRXJyb3IsXG4gICAgQWN0aW9uVHlwZUVudW0sXG4gICAgSUFjdGlvbkVkaXRvckNvbXBvbmVudCxcbiAgICBJQWN0aW9uSW5zdGFuY2Vcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZXZpZXcvYXBpJztcblxuaW1wb3J0IHtBY3Rpb25Db250ZXh0fSBmcm9tICcuL2FjdGlvbi1jb250ZXh0Lm1vZGVsJztcbmltcG9ydCB7QWN0aW9uSW5zdGFuY2VTdGF0ZUVudW19IGZyb20gJy4vYWN0aW9uLWluc3RhbmNlLXN0YXRlLm1vZGVsJztcblxuLyoqXG4gKiBBY3Rpb24gZXhlY3V0aW9uIGluc3RhbmNlIGNvbnRhaW5pbmcgZGF0YSBhYm91dCBleGVjdXRpb24gc3RhdGUgb2YgYWN0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlID0gdW5kZWZpbmVkPiBpbXBsZW1lbnRzIElBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlSWQ6IHN0cmluZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2VMb25nTmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0+O1xuICAgIHB1YmxpYyByZWFkb25seSBjcmVhdGVkRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBMb2dnZXJTZXJ2aWNlLmdldCgpLmNyZWF0ZSgnQWN0aW9uSW5zdGFuY2UnKTtcblxuICAgIC8vIGZ1bmN0aW9uIGV4ZWN1dGlvblxuICAgIHB1YmxpYyByZWFkb25seSBpc1J1bkxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvLyBwYXJhbWV0ZXJzLCBjb250ZXh0cywgc3RhdGVzXG4gICAgcHVibGljIHRyaWdnZXJQYXJhbWV0ZXJzPzogQWN0aW9uUGFyYW1ldGVyczxJdGVtPjtcbiAgICBwdWJsaWMgYWN0aXZhdGlvblBhcmFtZXRlcnM/OiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dHM6IEFycmF5PEFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4+ID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBleGVjdXRpb25TdWJqZWN0ID0gbmV3IFN1YmplY3Q8SXRlbSB8IG51bGwgfCB1bmRlZmluZWQ+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBleGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtPigxKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3VsdFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxJdGVtIHwgbnVsbD4oMSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlcnJvclN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxBY3Rpb25FeGVjdXRpb25FcnJvcj4oMSk7XG5cbiAgICBwcml2YXRlIGNvbnRleHRFeGVjdXRpb25TdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG5cbiAgICAvLyByZXN1bHQgb3IgZXJyb3JcbiAgICBwcml2YXRlIF9yZXN1bHQ/OiBJdGVtIHwgbnVsbDtcbiAgICBwcml2YXRlIF9lcnJvcj86IEFjdGlvbkV4ZWN1dGlvbkVycm9yO1xuXG4gICAgLy8gYWRkaXRpb25hbCBkYXRhIGZyb20gdHJpZ2dlci9hY3RpdmF0aW9uXG4gICAgcHVibGljIGFjdGl2YXRpb25EaWFsb2dSZWY/OiBEeW5hbWljRGlhbG9nUmVmO1xuICAgIHB1YmxpYyBhY3RpdmF0aW9uRWRpdG9yQ29tcG9uZW50UmVmPzogSUFjdGlvbkVkaXRvckNvbXBvbmVudDtcblxuICAgIC8vIGxpbmtlZCBhY3Rpb25zXG4gICAgcHJpdmF0ZSBfcmVhY3RpdmF0aW9uSW5zdGFuY2VTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7IC8vIGVkaXRvciBhY3Rpb24gd2l0aCByZXN1Ym1pdCBlbmFibGVkXG4gICAgcHVibGljIHJlYWN0aXZhdGlvblByZXZpb3VzSW5zdGFuY2U/OiBJQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT47IC8vIHVzZWQgd2hlbiBsaW5raW5nIHRvIHByZXZpb3VzIGluc3RhbmNlIGluIGNhc2Ugb2YgYWN0aW9uIHJlYWN0aXZhdGlvbiAod2l0aGluIHNhbWUgZWRpdG9yKVxuICAgIHB1YmxpYyBwcmV2aW91c0luc3RhbmNlPzogSUFjdGlvbkluc3RhbmNlPGFueSwgYW55PjsgLy8gbGlua2luZyB0byBwcmV2aW91cyBhY3Rpb24gd2hlbiB1c2luZyBuZXh0IGFjdGlvbiBmZWF0dXJlXG4gICAgcHVibGljIG5leHRBY3Rpb25JbnN0YW5jZT86IElBY3Rpb25JbnN0YW5jZTxhbnksIGFueT47IC8vIGFzIGRlZmluZWQgaW4gYWN0aW9uIGRlc2NyaXB0b3JcbiAgICBwdWJsaWMgZXJyb3JBY3Rpb25JbnN0YW5jZT86IElBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPjsgLy8gZXJyb3IgYWN0aW9uIG11c3QgcmVseSBvbiBzYW1lIHR5cGUsIGFzIGRlZmluZWQgaW4gYWN0aW9uIGRlc2NyaXB0b3JcblxuICAgIGNvbnN0cnVjdG9yKGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8SXRlbT4sIHN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uVHJpZ2dlclN0YXJ0KSB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VJZCA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZUxvbmdOYW1lID0gYCR7YWN0aW9uLmFjdGlvbk5hbWVMb25nfV8ke3RoaXMuaW5zdGFuY2VJZH1gO1xuICAgICAgICB0aGlzLmFjdGlvbiA9IGFjdGlvbjtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNSdW5Mb2FkaW5nJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSdW5Mb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHRzLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IHRoaXMuY29udGV4dHNbdGhpcy5jb250ZXh0cy5sZW5ndGggLSAxXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGV4ZWN1dGlvbiQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGlvblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBleGVjdXRpb25Jc1J1bm5pbmckKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc3RhdGUoc3RhdGU6IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtKSB7XG4gICAgICAgIGlmIChzdGF0ZSA+IHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlIHx8ICh0aGlzLnN0YXRlU3ViamVjdC52YWx1ZSA9PT0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuRXJyb3IgJiYgc3RhdGUgPT09IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1blN0YXJ0KSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYEluc3RhbmNlICR7dGhpcy5pbnN0YW5jZUxvbmdOYW1lfSAtIHN0YXRlICMke3N0YXRlfTogJHtBY3Rpb25JbnN0YW5jZVN0YXRlRW51bVtzdGF0ZV19YCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHN0YXRlKTtcbiAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbDpcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaEVycm9yRmluYWw6XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hEaXNtaXNzZWRGaW5hbDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyID09PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25DbGljaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWw6XG4gICAgICAgICAgICAgICAgICAgIC8vIHBhcnRpYWxseSBmaW5pc2ggcmVhY3RpdmF0aW9uIGJlY2F1c2UgbmV3IGluc3RhbmNlIGV2ZW50IG11c3Qgc3RpbGwgYmUgZW1pdHRlZFxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaENvbXBvbmVudERlc3Ryb3lGaW5hbDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hSb3V0ZVVudHJpZ2dlckVuZEZpbmFsOlxuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoUm91dGVVbnRyaWdnZXJUaW1lb3V0RmluYWw6XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHN0YXRlJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXN1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCByZXN1bHQocmVzdWx0OiBJdGVtIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBJbnN0YW5jZSAke3RoaXMuaW5zdGFuY2VMb25nTmFtZX0gLSByZXN1bHRgLCByZXN1bHQpO1xuXG4gICAgICAgIHRoaXMuX3Jlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgdGhpcy5yZXN1bHRTdWJqZWN0Lm5leHQocmVzdWx0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlc3VsdCQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZXJyb3IoZXJyb3I6IEFjdGlvbkV4ZWN1dGlvbkVycm9yIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShgSW5zdGFuY2UgJHt0aGlzLmluc3RhbmNlTG9uZ05hbWV9IC0gZXJyb3JgLCBlcnJvcik7XG5cbiAgICAgICAgdGhpcy5fZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dChlcnJvcik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlcnJvciQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHJlYWN0aXZhdGlvbkluc3RhbmNlKGluc3RhbmNlOiBJQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gdGhpcyBpcyBhbGxvd2VkIHRvIG9ubHkgYmUgZXhlY3V0ZWQgb25jZSBmb3Igc3ViamVjdCBhbmQgbXVzdCBiZSBpbiBjb3JyZWN0IHN0YXR1cyFcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWFjdGl2YXRpb25JbnN0YW5jZVN1YmplY3QubmV4dChpbnN0YW5jZSk7XG4gICAgICAgIHRoaXMuX3JlYWN0aXZhdGlvbkluc3RhbmNlU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVhY3RpdmF0aW9uSW5zdGFuY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWFjdGl2YXRpb25JbnN0YW5jZVN1YmplY3QudmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZWFjdGl2YXRpb25JbnN0YW5jZSQoKTogT2JzZXJ2YWJsZTxJQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWN0aXZhdGlvbkluc3RhbmNlU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKGkgPT4gISFpKSwgLy8gaWdub3JlIHVuZGVmaW5lZCBldmVudHMgKHVzdWFsbHkgaW5pdGlhbClcbiAgICAgICAgICAgIG1hcChpID0+IGkhKSxcbiAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29udGV4dEF0KGlkeDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBpZHggPCB0aGlzLmNvbnRleHRzLmxlbmd0aCA/IHRoaXMuY29udGV4dHNbaWR4XSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIG5ld0NvbnRleHQoY29udGV4dDogQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPiwgZmluaXNoUHJldmlvdXMgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBJbnN0YW5jZSAke3RoaXMuaW5zdGFuY2VMb25nTmFtZX0gLSBuZXcgY29udGV4dCAke2NvbnRleHQuY29udGV4dExvbmdOYW1lfWApO1xuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBpZiAoY3VycmVudENvbnRleHQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmV4ZWN1dGlvbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250ZXh0RXhlY3V0aW9uU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5jb250ZXh0RXhlY3V0aW9uU3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmNvbnRleHRFeGVjdXRpb25TdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICBjb250ZXh0LmV4ZWN1dGlvbiQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBuZXh0ID0+IHRoaXMuZXhlY3V0aW9uU3ViamVjdC5uZXh0KG5leHQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB0aGlzLmV4ZWN1dGlvblN1YmplY3QuZXJyb3IoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHRFeGVjdXRpb25TdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICBjb250ZXh0LmV4ZWN1dGlvbklzUnVubmluZyQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBuZXh0ID0+IHRoaXMuZXhlY3V0aW9uSXNSdW5uaW5nU3ViamVjdC5uZXh0KG5leHQpXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHRzLnB1c2goY29udGV4dCk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvcmNlRmluaXNoKCkge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBGb3JjZSBmaW5pc2hpbmcgaW5zdGFuY2UgJyR7dGhpcy5pbnN0YW5jZUxvbmdOYW1lfScuIFRyeSBjb21wbGV0aW5nIGluc3RhbmNlIHdpdGggc3RhdGVzIGluc3RlYWQuYCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hEaXNtaXNzZWRGaW5hbDtcbiAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmlzaChyZWFjdGl2YXRlID0gZmFsc2UpIHtcbiAgICAgICAgLy8gY29tcGxldGUgYWxsIHN1YmplY3RzXG4gICAgICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaChjID0+IGMuZmluaXNoKCkpO1xuICAgICAgICB0aGlzLmV4ZWN1dGlvblN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuc3RhdGVTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMucmVzdWx0U3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICBpZiAoIXJlYWN0aXZhdGUpIHtcbiAgICAgICAgICAgIC8vIGFsbG93IHJlYWN0aXZhdGlvbiBpbnN0YW5jZSB0byBiZSBlbWl0dGVkIHNlcGFyYXRlbHlcbiAgICAgICAgICAgIHRoaXMuX3JlYWN0aXZhdGlvbkluc3RhbmNlU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ2xvc2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5leGVjdXRpb25TdWJqZWN0LmlzU3RvcHBlZCAmJlxuICAgICAgICAgICAgdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0LmlzU3RvcHBlZCAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QuaXNTdG9wcGVkICYmXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFN1YmplY3QuaXNTdG9wcGVkICYmXG4gICAgICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5pc1N0b3BwZWQgJiZcbiAgICAgICAgICAgIHRoaXMuX3JlYWN0aXZhdGlvbkluc3RhbmNlU3ViamVjdC5pc1N0b3BwZWQgJiZcbiAgICAgICAgICAgIHRoaXMuY29udGV4dEV4ZWN1dGlvblN1YnNjcmlwdGlvbnMuZXZlcnkocyA9PiBzLmNsb3NlZCkgJiZcbiAgICAgICAgICAgIHRoaXMuY29udGV4dHMuZXZlcnkoYyA9PiBjLmlzQ2xvc2VkKCkpXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
@@ -593,7 +593,7 @@ export class ActionExecutorService {
593
593
  // must skip initialization from view container, because it would only get old instance.
594
594
  // we need new instance before we can set new one on the view container.
595
595
  const newInstance = this.getOrCreateInstance(undefined, instance.action, undefined, newInstanceStatus, true);
596
- newInstance.previousInstance = instance;
596
+ newInstance.reactivationPreviousInstance = instance;
597
597
  // copy some additional settings
598
598
  newInstance.activationDialogRef = instance.activationDialogRef;
599
599
  newInstance.triggerParameters = instance.triggerParameters;
@@ -764,4 +764,4 @@ export class ActionExecutorService {
764
764
  return instance;
765
765
  }
766
766
  }
767
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvc3JjL2FjdGlvbi9zZXJ2aWNlcy9hY3Rpb24tZXhlY3V0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUMsTUFBTSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFlLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM5RSxPQUFPLEVBQUMsYUFBYSxFQUFzQixNQUFNLHVCQUF1QixDQUFDO0FBQ3pFLE9BQU8sRUFBYSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGNBQWMsRUFHZCxhQUFhLEVBQ2IsZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLEVBQ2IsWUFBWSxFQUNmLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUNILDJCQUEyQixFQUczQiwwQkFBMEIsRUFFMUIsNkJBQTZCLEVBQzdCLDBCQUEwQixFQUMxQiw4QkFBOEIsRUFFOUIsY0FBYyxFQUNkLGtCQUFrQixFQUVsQixvQkFBb0IsRUFHdkIsTUFBTSxzQ0FBc0MsQ0FBQztBQUU5QyxPQUFPLEVBQUMsbUNB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QUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQ3ZILElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ25ELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBRTVDLElBQUksWUFBYSxDQUFDLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUNuRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw2REFBNkQsUUFBUSxDQUFDLGdCQUFnQixrQkFBa0IsQ0FBQyxDQUFDO29CQUM1SCxZQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2hDLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7SW5qZWN0b3IsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlciwgVXJsVHJlZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q29uZmlybWF0aW9uLCBDb25maXJtYXRpb25TZXJ2aWNlLCBNZXNzYWdlU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29uZmlnfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBmcm9tLCBtZXJnZU1hcCwgb2YsIHN3aXRjaE1hcCwgdGFrZSwgdGltZW91dH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpbHRlciwgZmlyc3QsIG1hcCwgc3RhcnRXaXRofSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gICAgQWN0aW9uUGFyYW1ldGVycyxcbiAgICBDb21tb25zSHR0cEVycm9yLFxuICAgIENvbW1vbnNJbnRlcm5hbEVycm9yLFxuICAgIENvbW1vbnNTZXJ2aWNlLFxuICAgIElDb21tb25zRXJyb3IsXG4gICAgSURhdGFQcm92aWRlcixcbiAgICBMb2dnZXJTZXJ2aWNlLFxuICAgIFBhcmFtZXRyaXplUGlwZSxcbiAgICBTdHlsZVNpemVFbnVtLFxuICAgIGVzY2FwZUh0bWxBbnksXG4gICAgdG9PYnNlcnZhYmxlXG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge1xuICAgIEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSxcbiAgICBBY3Rpb25Db25maXJtYXRpb25EZXNjcmlwdG9yLFxuICAgIEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uLFxuICAgIEFjdGlvbkRlbGV0ZURlc2NyaXB0b3JJbnN0LFxuICAgIEFjdGlvbkRlc2NyaXB0b3JJbnN0LFxuICAgIEFjdGlvbkVkaXRvckFkZERlc2NyaXB0b3JJbnN0LFxuICAgIEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0LFxuICAgIEFjdGlvbkVkaXRvckVkaXREZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25SdW5GblR5cGUsXG4gICAgQWN0aW9uVHlwZUVudW0sXG4gICAgQ29tbW9uc0FjdGlvbkVycm9yLFxuICAgIENvbW1vbnNBY3Rpb25FcnJvck9wdGlvbnMsXG4gICAgRGF0YVByb3ZpZGVyRXhlY3V0b3IsXG4gICAgSUFjdGlvbkVkaXRvckNvbXBvbmVudCxcbiAgICBJQWN0aW9uSW5zdGFuY2Vcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZXZpZXcvYXBpJztcblxuaW1wb3J0IHtDT01NT05TX1RBQkxFVklFV19GRUFUVVJFX0NPTkZJR19JVH0gZnJvbSAnLi4vLi4vdGFibGV2aWV3L3NlcnZpY2VzL3RhYmxldmlldy1mZWF0dXJlLWNvbmZpZy50b2tlbic7XG5pbXBvcnQge2dldEkxOG5Gb3JBY3Rpb259IGZyb20gJy4uL2hlbHBlcnMvaTE4bic7XG5pbXBvcnQge2FjdGlvbk5vdGlmaWNhdGlvbkVycm9yLCBhY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzfSBmcm9tICcuLi9oZWxwZXJzL25vdGlmaWNhdGlvbic7XG5pbXBvcnQge0FjdGlvbkVkaXRvckRpYWxvZ0RhdGF9IGZyb20gJy4uL21vZGVscy9hY3Rpb24tZWRpdG9yLWRpYWxvZy1kYXRhLm1vZGVsJztcbmltcG9ydCB7QWN0aW9uQ29udGV4dH0gZnJvbSAnLi4vbW9kZWxzL2V4ZWN1dGlvbi9hY3Rpb24tY29udGV4dC5tb2RlbCc7XG5pbXBvcnQge0FjdGlvbkluc3RhbmNlU3RhdGVFbnVtfSBmcm9tICcuLi9tb2RlbHMvZXhlY3V0aW9uL2FjdGlvbi1pbnN0YW5jZS1zdGF0ZS5tb2RlbCc7XG5pbXBvcnQge0FjdGlvbkluc3RhbmNlfSBmcm9tICcuLi9tb2RlbHMvZXhlY3V0aW9uL2FjdGlvbi1pbnN0YW5jZS5tb2RlbCc7XG5pbXBvcnQge0FjdGlvbkVycm9yTWFwcGVyU2VydmljZX0gZnJvbSAnLi9hY3Rpb24tZXJyb3ItbWFwcGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSAnLi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtBQ1RJT05fRURJVE9SX0NPTVBPTkVOVF9JVH0gZnJvbSAnLi90b2tlbnMvYWN0aW9uLWVkaXRvci50b2tlbic7XG5pbXBvcnQge1ZpZXdDb250YWluZXJ9IGZyb20gJy4vdmlldy1jb250YWluZXIuc2VydmljZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBY3Rpb25FeGVjdXRvclNlcnZpY2Uge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbW1vbnMgPSBpbmplY3QoQ29tbW9uc1NlcnZpY2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkYXRhUHJvdmlkZXJFeGVjdXRvciA9IGluamVjdChEYXRhUHJvdmlkZXJFeGVjdXRvcik7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5hdmlnYXRpb25TZXJ2aWNlID0gaW5qZWN0KE5hdmlnYXRpb25TZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZXJyb3JNYXBwZXIgPSBpbmplY3QoQWN0aW9uRXJyb3JNYXBwZXJTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KENPTU1PTlNfVEFCTEVWSUVXX0ZFQVRVUkVfQ09ORklHX0lULCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVmYXVsdEVkaXRvckRpYWxvZ0NvbXBvbmVudCA9IGluamVjdChBQ1RJT05fRURJVE9SX0NPTVBPTkVOVF9JVCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG1lc3NhZ2VTZXJ2aWNlID0gaW5qZWN0KE1lc3NhZ2VTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlybWF0aW9uU2VydmljZSA9IGluamVjdChDb25maXJtYXRpb25TZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmlld0NvbnRhaW5lciA9IGluamVjdChWaWV3Q29udGFpbmVyLCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGFyYW1ldHJpemUgPSBuZXcgUGFyYW1ldHJpemVQaXBlKCk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5zdGFuY2VzQnVmZmVyTWF4ID0gMTAwO1xuICAgIHByb3RlY3RlZCBsb2dnZXIgPSBpbmplY3QoTG9nZ2VyU2VydmljZSkuY3JlYXRlKCdBY3Rpb25FeGVjdXRvclNlcnZpY2UnKTtcblxuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXQgaW5zdGFuY2VzKCk6IEFjdGlvbkluc3RhbmNlPGFueSwgYW55PltdO1xuXG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgYWN0aW9uIGNvbnRleHQgZm9yIHVzYWdlIGluIHZhbGlkYXRpb24uXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycy5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIuXG4gICAgICovXG4gICAgcHVibGljIHByZXBhcmVBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxJdGVtPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPlxuICAgICk6IEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgY29uc3QgY3R4RGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyID8/IGFjdGlvbi5kYXRhUHJvdmlkZXIgPz8gdGhpcy52aWV3Q29udGFpbmVyPy5kYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiA8QWN0aW9uQ29udGV4dFZhbGlkYXRpb248SXRlbSwgU2VydmljZT4+e1xuICAgICAgICAgICAgZGVzY3JpcHRvcjogYWN0aW9uLFxuICAgICAgICAgICAgcGFyYW1ldGVyczogcGFyYW1ldGVycyxcbiAgICAgICAgICAgIHNlcnZpY2VJbnN0YW5jZTogdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlKHRoaXMuaW5qZWN0b3IsIGN0eERhdGFQcm92aWRlcikgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiBjdHhEYXRhUHJvdmlkZXJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGFjdGlvbiBjb250ZXh0IGJ5IHN1Ym1pdHRpbmcgZXhlY3V0aW9uIHJlc3VsdHMvZXJyb3JzIHRvIGNvbnRleHQsIHdhdGNoaW5nIG92ZXIgaW5zdGFuY2UgcmVzdWx0cy9lcnJvcnMsIGRpc3BsYXlpbmcgbm90aWZpY2F0aW9ucyxcbiAgICAgKiBydW5uaW5nIG5leHQvZXJyb3IgYWN0aW9uIGFuZCB0cmlnZ2VyaW5nIGRpc21pc3Mgb2YgYWN0aW9uLiBDb25maXJtYXRpb24gaXMgYWxzbyBwcm9jZXNzZWQgaGVyZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjdHggQWN0aW9uIGNvbnRleHQgdG8gcnVuLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW48SXRlbSwgU2VydmljZSA9IHVuZGVmaW5lZD4oY3R4OiBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+KSB7XG4gICAgICAgIGNvbnN0IGlzTWFpblJ1bkZuID0gY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3N1Ym1pdCcgfHwgY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3J1bic7XG5cbiAgICAgICAgLy8gaWYgKGN0eC5pbnN0YW5jZS5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0ICYmIGN0eC5pbnN0YW5jZS5hY3Rpb24uaGFzUnVuQ29uZmlybWF0aW9uKSB7XG4gICAgICAgIGlmIChpc01haW5SdW5GbiAmJiBjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bkNvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgLy8gb25seSBkaXJlY3QgYWN0aW9uIGNhbiBiZSBjb25maWd1cmVkIHdpdGggcnVuIGNvbmZpcm1hdGlvblxuICAgICAgICAgICAgLy8gaWYgZWRpdG9yLCB0aGVuIHJ1biBjb25maXJtYXRpb24gaXMgbWFwcGVkIHRvIHN1Ym1pdCBhY3Rpb24gYW5kIGlnbm9yZWQgYXMgZWRpdG9yIHJ1blxuICAgICAgICAgICAgY29uc3QgY29uZmlybWF0aW9uRGVzY3JpcHRvciA9IGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvciBhcyBBY3Rpb25Db25maXJtYXRpb25EZXNjcmlwdG9yPEl0ZW0+O1xuXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LnBhcmFtZXRlcnMuaXRlbTtcbiAgICAgICAgICAgIGxldCBjb25maXJtUGFyYW1zOiBDb25maXJtYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgaWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5pY29uLFxuICAgICAgICAgICAgICAgIGFjY2VwdFZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgYWNjZXB0SWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uaWNvbiA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgYWNjZXB0QnV0dG9uU3R5bGVDbGFzczogY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uc3R5bGVDbGFzcy5idWlsZCgpLFxuICAgICAgICAgICAgICAgIHJlamVjdFZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVqZWN0SWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/Lmljb24gPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHJlamVjdEJ1dHRvblN0eWxlQ2xhc3M6IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5zdHlsZUNsYXNzLmJ1aWxkKCksXG4gICAgICAgICAgICAgICAgY2xvc2VPbkVzY2FwZTogY29uZmlybWF0aW9uRGVzY3JpcHRvci5jbG9zZU9uRXNjYXBlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci50aXRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuaGVhZGVyID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0STE4bkZvckFjdGlvbih0aGlzLnRyYW5zbGF0ZSwgY3R4Lmluc3RhbmNlLmFjdGlvbiwgJ2NvbmZpcm0udGl0bGUnLCBjb25maXJtYXRpb25EZXNjcmlwdG9yLnRpdGxlLCBpdGVtLCAnZ2VuZXJhbC5jb25maXJtYXRpb24nKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLm1lc3NhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLm1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICBnZXRJMThuRm9yQWN0aW9uKHRoaXMudHJhbnNsYXRlLCBjdHguaW5zdGFuY2UuYWN0aW9uLCAnY29uZmlybS5tZXNzYWdlJywgY29uZmlybWF0aW9uRGVzY3JpcHRvci5tZXNzYWdlLCBlc2NhcGVIdG1sQW55KGl0ZW0pLCAnZ2VuZXJhbC5jb25maXJtYXRpb24nKSA/P1xuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEJ1dHRvbi5sYWJlbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0TGFiZWwgPVxuICAgICAgICAgICAgICAgICAgICBnZXRJMThuRm9yQWN0aW9uKHRoaXMudHJhbnNsYXRlLCBjdHguaW5zdGFuY2UuYWN0aW9uLCAnY29uZmlybS5hY2NlcHQnLCBjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEJ1dHRvbi5sYWJlbCwgaXRlbSwgJ2dlbmVyYWwueWVzJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uaWNvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0SWNvbiA9IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IuYWNjZXB0QnV0dG9uLmljb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbj8uaWNvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0SWNvbiA9IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5pY29uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/LmxhYmVsICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5yZWplY3RMYWJlbCA9XG4gICAgICAgICAgICAgICAgICAgIGdldEkxOG5Gb3JBY3Rpb24odGhpcy50cmFuc2xhdGUsIGN0eC5pbnN0YW5jZS5hY3Rpb24sICdjb25maXJtLnJlamVjdCcsIGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5sYWJlbCwgaXRlbSwgJ2dlbmVyYWwubm8nKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbiA9PSBudWxsIHx8IChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbi5sYWJlbCA9PT0gbnVsbCAmJiBjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbi5pY29uID09PSBudWxsKSkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0VmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5Db25maXJtYXRpb25FbmRBY2NlcHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5ydW5XaXRob3V0Q29uZmlybWF0aW9uKGN0eCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5Db25maXJtYXRpb25FbmRSZWplY3Q7XG4gICAgICAgICAgICAgICAgaWYgKGN0eC5pbnN0YW5jZS5hY3Rpb24udHlwZSAhPT0gQWN0aW9uVHlwZUVudW0uRWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIG5vdCBlZGl0b3IsIHRoZSBpdCBjYW4gYmUgY2xvc2VkXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGN0eC5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucnVuQ29uZmlybWF0aW9uQ29uZmlnTWFwRm4pIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zID0gY29uZmlybWF0aW9uRGVzY3JpcHRvci5ydW5Db25maXJtYXRpb25Db25maWdNYXBGbihjdHgsIGNvbmZpcm1QYXJhbXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdHguY29uZmlybWF0aW9uID0gY29uZmlybVBhcmFtcztcbiAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkNvbmZpcm1hdGlvblN0YXJ0O1xuXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShjb25maXJtUGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucnVuV2l0aG91dENvbmZpcm1hdGlvbihjdHgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBhY3Rpb24gY29udGV4dCBieSBzdWJtaXR0aW5nIGV4ZWN1dGlvbiByZXN1bHRzL2Vycm9ycyB0byBjb250ZXh0LCB3YXRjaGluZyBvdmVyIGluc3RhbmNlIHJlc3VsdHMvZXJyb3JzLCBkaXNwbGF5aW5nIG5vdGlmaWNhdGlvbnMsXG4gICAgICogcnVubmluZyBuZXh0L2Vycm9yIGFjdGlvbiBhbmQgdHJpZ2dlcmluZyBkaXNtaXNzIG9mIGFjdGlvbi4gQ29uZmlybWF0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY3R4IEFjdGlvbiBjb250ZXh0IHRvIHJ1bi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFjdGlvbiBjb250ZXh0IGZvciBzdWJtaXQgKD1ydW4pIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgcnVuV2l0aG91dENvbmZpcm1hdGlvbjxJdGVtLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihjdHg6IEFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4pOiBPYnNlcnZhYmxlPEl0ZW0gfCBudWxsIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IGlzTWFpblJ1bkZuID0gY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3N1Ym1pdCcgfHwgY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3J1bic7XG4gICAgICAgIGNvbnN0IGlzRXJyb3JDcml0aWNhbFJ1bkZuID0gY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3J1bic7XG4gICAgICAgIGxldCBhY3Rpb25FZGl0b3I6IEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0+O1xuXG4gICAgICAgIGxldCBmbk9iczogQWN0aW9uUnVuRm5UeXBlPEl0ZW0sIFNlcnZpY2U+O1xuICAgICAgICBzd2l0Y2ggKGN0eC5mdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N1Ym1pdCc6XG4gICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yID0gY3R4Lmluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbkVkaXRvci5zdWJtaXRGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uRWRpdG9yIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yQWRkRGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuT2JzID0gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5DcmVhdGVPckZhaWwuYmluZCh0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb25FZGl0b3IgaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JFZGl0RGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuT2JzID0gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5VcGRhdGVPckZhaWwuYmluZCh0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byBndWVzcyB0aGlzIG9uZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdFN1Ym1pdCA9IG9mKGN0eC5wYXJhbWV0ZXJzPy5pdGVtID8gY3R4LnBhcmFtZXRlcnMuaXRlbSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbk9icyA9IGN0eCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wYXJhbWV0ZXJzLml0ZW1JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5VcGRhdGUoY3R4LCBkZWZhdWx0U3VibWl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5DcmVhdGUoY3R4LCBkZWZhdWx0U3VibWl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm5PYnMgPSBhY3Rpb25FZGl0b3Iuc3VibWl0RnVuY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZmV0Y2gnOlxuICAgICAgICAgICAgICAgIGFjdGlvbkVkaXRvciA9IGN0eC5pbnN0YW5jZS5hY3Rpb24gYXMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbT47XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb25FZGl0b3IuZmV0Y2hGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uRWRpdG9yIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yRWRpdERlc2NyaXB0b3JJbnN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbk9icyA9IHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IucnVuRmV0Y2hPckZhaWwuYmluZCh0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRGZXRjaCA9IG9mKGN0eC5wYXJhbWV0ZXJzPy5pdGVtID8gY3R4LnBhcmFtZXRlcnMuaXRlbSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbk9icyA9IGN0eCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wYXJhbWV0ZXJzLml0ZW1JZCB8fCB0eXBlb2YgY3R4LnBhcmFtZXRlcnMuaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IucnVuRmV0Y2goY3R4LCBkZWZhdWx0RmV0Y2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZldGNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZuT2JzID0gYWN0aW9uRWRpdG9yLmZldGNoRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncnVuJzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKCFjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bkZ1bmN0aW9uICYmIGN0eC5pbnN0YW5jZS5hY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25EZWxldGVEZXNjcmlwdG9ySW5zdCkge1xuICAgICAgICAgICAgICAgICAgICBmbk9icyA9IHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IucnVuRGVsZXRlT3JGYWlsLmJpbmQodGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm5PYnMgPSBjdHguaW5zdGFuY2UuYWN0aW9uLnJ1bkZ1bmN0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJldE9icyA9IG9mKHZvaWQgMCkucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc01haW5SdW5Gbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBtYWluIHJ1biBmdW5jdGlvbiwgYWxzbyBzZXQgbG9hZGluZyB0byB0cnVlXG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1blN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuaXNSdW5Mb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoU3RhcnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGNvbnRleHQgZXhlY3V0aW9uIHRvIG1hcmsgZXhlY3V0aW9uIGxvYWRpbmdcbiAgICAgICAgICAgICAgICBjdHguZXhlY3V0aW9uU3RhcnQoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0b09ic2VydmFibGUoZm5PYnMoY3R4KSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1lcmdlTWFwKHJ1blJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IG5leHQgc3RhdGUgZGVwZW5kaW5nIG9uIHJ1blxuICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IGlzTWFpblJ1bkZuID8gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuRW5kIDogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFbmQ7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGV4ZWN1dGlvbiByZXN1bHRcbiAgICAgICAgICAgICAgICBjdHguZXhlY3V0aW9uTmV4dChydW5SZXN1bHQsIGlzTWFpblJ1bkZuKTtcblxuICAgICAgICAgICAgICAgIGlmIChpc01haW5SdW5Gbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBzZXQgaW5zdGFuY2UgZmluYWwgcmVzdWx0IG9uIG1haW4gcnVuIGV4ZWN1dGlvblxuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UucmVzdWx0ID0gcnVuUmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuaXNSdW5Mb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgbm90aWZpY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5ub3RpZmljYXRpb24gPSBhY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdHgucGFyYW1ldGVycz8uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucnVuUmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBwb3NzaWJsZSBhZnRlciBydW4gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHguaW5zdGFuY2UuYWN0aW9uLmFmdGVyUnVuQWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXJrIG5ldyBzdGF0ZSBmb3IgbmV4dCBhY3Rpb24gc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyUnVuQWN0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY3R4Lmluc3RhbmNlLmFjdGlvbi5hZnRlclJ1bkFjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IGN0eC5pbnN0YW5jZS5hY3Rpb24uYWZ0ZXJSdW5BY3Rpb24oY3R4KSA6IGN0eC5pbnN0YW5jZS5hY3Rpb24uYWZ0ZXJSdW5BY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0QWN0aW9uSW5zdGFuY2UgPSB0aGlzLmFjdGl2YXRlQWN0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyUnVuQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBY3Rpb25QYXJhbWV0ZXJzPHVua25vd24+PntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUlkOiBjdHgucGFyYW1ldGVycy5pdGVtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IHJ1blJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRGF0YTogY3R4LnBhcmFtZXRlcnMuYWN0aW9uRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGU6IGN0eC5wYXJhbWV0ZXJzLnJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VDb21wb25lbnQ6IGN0eC5wYXJhbWV0ZXJzLnNvdXJjZUNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZSBhcyBBY3Rpb25JbnN0YW5jZTx1bmtub3duLCB1bmtub3duPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLm5leHRBY3Rpb25JbnN0YW5jZSA9IG5leHRBY3Rpb25JbnN0YW5jZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uTmV4dEFjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5pc2ggY3VycmVudCBhY3Rpb24gd2hlbiBuZXh0IGFjdGlvbiBmaW5pc2hlc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRBY3Rpb25JbnN0YW5jZS5zdGF0ZSQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgobmV4dEFjdGlvbkluc3RhbmNlLnN0YXRlKSwgLy8gcHJvdmlkZSBmaXJzdCBzdGF0ZSBjYXVzZSBpdCBtaWdodCBiZSBmaW5pc2hlZCBhbHJlYWR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHN0YXRlID0+IHN0YXRlID49IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5OZXh0QWN0aW9uRW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVuUmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbkVkaXRvci5oYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbk5vdGlmaWNhdGlvblN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmZXRjaCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25FZGl0b3IuZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yLmZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnBhcmFtZXRlcnMuaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBvZihydW5SZXN1bHQpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAocnVuUmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVhY3RpdmF0ZSBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oY3R4Lmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1blJlc3VsdDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybSBlcnJvciB0byBhY3Rpb24gZXJyb3JcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25FcnJvciA9IHRoaXMudG9BY3Rpb25FcnJvcihlcnIsIGN0eCk7XG5cbiAgICAgICAgICAgICAgICAvLyBzZXQgaW5zdGFuY2Ugc3RhdGUgdG8gZXJyb3JcbiAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBpc01haW5SdW5GbiA/IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkVycm9yIDogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFcnJvcjtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGV4ZWN1dGlvbiBlcnJvciBvbiBjb250ZXh0XG4gICAgICAgICAgICAgICAgY3R4LmV4ZWN1dGlvbkVycm9yKGFjdGlvbkVycm9yKTtcblxuICAgICAgICAgICAgICAgIGlmIChjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCBjdHguaW5zdGFuY2UuYWN0aW9uLCBhY3Rpb25FcnJvciwgJ2ZldGNoJywgdGhpcy5tZXNzYWdlU2VydmljZSwgY3R4LnBhcmFtZXRlcnMuaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yT2JzID0gb2Yodm9pZCAwKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuaXNSdW5Mb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgcG9zc2libGUgZXJyb3IgYWN0aW9uIGlmIHJ1blxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4gJiYgY3R4Lmluc3RhbmNlLmFjdGlvbi5vblJ1bkVycm9yQWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvblJ1bkVycm9yQWN0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY3R4Lmluc3RhbmNlLmFjdGlvbi5vblJ1bkVycm9yQWN0aW9uID09PSAnZnVuY3Rpb24nID8gY3R4Lmluc3RhbmNlLmFjdGlvbi5vblJ1bkVycm9yQWN0aW9uKGN0eCkgOiBjdHguaW5zdGFuY2UuYWN0aW9uLm9uUnVuRXJyb3JBY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW5ub3Qgc3RhcnQgd2l0aCB0cmlnZ2VyLCBiZWNhdXNlIHJvdXRpbmcgbWlnaHQgYmUgcHJvYmxlbWF0aWMgKGxvdXNpbmcgcHJldmlvdXMgcmVzdWx0cyBldGMuKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JBY3Rpb25JbnN0YW5jZSA9IHRoaXMuYWN0aXZhdGVBY3Rpb248SXRlbSwgU2VydmljZT4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25SdW5FcnJvckFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWN0aW9uUGFyYW1ldGVyczxJdGVtPj57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JZDogY3R4LnBhcmFtZXRlcnMuaXRlbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtOiBjdHgucGFyYW1ldGVycy5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25EYXRhOiBjdHgucGFyYW1ldGVycy5hY3Rpb25EYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZTogY3R4LnBhcmFtZXRlcnMucm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUNvbXBvbmVudDogY3R4LnBhcmFtZXRlcnMuc291cmNlQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuZXJyb3JBY3Rpb25JbnN0YW5jZSA9IGVycm9yQWN0aW9uSW5zdGFuY2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkVycm9yQWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yT2JzID0gZXJyb3JBY3Rpb25JbnN0YW5jZS5zdGF0ZSQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoZXJyb3JBY3Rpb25JbnN0YW5jZS5zdGF0ZSksIC8vIHByb3ZpZGUgZmlyc3Qgc3RhdGUgY2F1c2UgaXQgbWlnaHQgYmUgZmluaXNoZWQgYWxyZWFkeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzdGF0ZSA9PiBzdGF0ZSA+PSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzRmluYWwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRXJyb3JBY3Rpb25FbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBsaXN0IGFuZCBtYXAgb25seSB0byBtYXJrIGluc3RhbmNlIHN0YXRlIGFzIGZpbmlzaGVkIGVycm9yIHN0YXRlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yT2JzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWFjdGl2YXRlIGFjdGlvbiBvbmx5IGlmIGNyaXRpY2FsIChmZXRjaCBvbiBlZGl0b3Igb3IgcnVuIG9uIGJ1dHRvbiBhY3Rpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRXJyb3JDcml0aWNhbFJ1bkZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oY3R4Lmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldGhyb3cgZXJyb3IgdG8gcHJvcGFnYXRlIGZ1cnRoZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGFjdGlvbkVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGN0eC5ydW5TdWJzY3JpcHRpb24gPSByZXRPYnMuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEFjdGlvbkNvbnRleHQgJHtjdHguY29udGV4dExvbmdOYW1lfSBleGVjdXRpb24gbmV4dCBldmVudGAsIHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKChlcnIgYXMgSUNvbW1vbnNFcnJvciB8IHVuZGVmaW5lZCk/LnR5cGUgIT09ICdDb21tb25zQWN0aW9uRXJyb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBOb24gYWN0aW9uIGVycm9yIG9jY3VycmVkYCwgZXJyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQWN0aW9uIGNvbnRleHQgJHtjdHguY29udGV4dExvbmdOYW1lfSBleGVjdXRpb24gZXJyb3IgZXZlbnRgLCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJldE9icztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlcyBlZGl0b3IgYWN0aW9uJ3MgZmV0Y2ggZnVuY3Rpb24gYnkgY3JlYXRpbmcgbmV3IGFjdGlvbiBjb250ZXh0IGZvciBhY3Rpb24gaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRWRpdG9yIGRhdGEgcHJvdmlkZXIgZm9yIGNvbnRleHQuXG4gICAgICogQHBhcmFtIGluc3RhbmNlIE9wdGlvbmFsIGV4aXN0aW5nIGFjdGlvbiBpbnN0YW5jZSAoaWYgbm9uIHByb3ZpZGVkLCBuZXcgd2lsbCBiZSBjcmVhdGVkKS5cbiAgICAgKiBAcGFyYW0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZSBPcHRpb25hbCBwcmV2aW91cyBhY3Rpb24gaW5zdGFuY2UgdG8gbGluayBpbiBuZXh0IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQWN0aW9uIGNvbnRleHQgZm9yIGZldGNoIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBwcmVwYXJlQ29udGV4dEZvckVkaXRvckZldGNoPEl0ZW0sIFNlcnZpY2U+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+LFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogSUFjdGlvbkluc3RhbmNlPGFueSwgYW55PlxuICAgICk6IEFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4ge1xuICAgICAgICBpbnN0YW5jZSA9IHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShpbnN0YW5jZSwgYWN0aW9uLCBwYXJhbWV0ZXJzLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZUNvbnRleHRGb3JFZGl0b3IoaW5zdGFuY2UsIHBhcmFtZXRlcnMsICdmZXRjaCcsIGRhdGFQcm92aWRlciwgcHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBlZGl0b3IgYWN0aW9uJ3Mgc3VibWl0ICg9bWFpbiBydW4pIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIG5ldyBhY3Rpb24gY29udGV4dCBmb3IgYWN0aW9uIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIEVkaXRvciBkYXRhIHByb3ZpZGVyIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBPcHRpb25hbCBleGlzdGluZyBhY3Rpb24gaW5zdGFuY2UgKGlmIG5vbiBwcm92aWRlZCwgbmV3IHdpbGwgYmUgY3JlYXRlZCkuXG4gICAgICogQHBhcmFtIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UgT3B0aW9uYWwgcHJldmlvdXMgYWN0aW9uIGluc3RhbmNlIHRvIGxpbmsgaW4gbmV4dCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFjdGlvbiBjb250ZXh0IGZvciBzdWJtaXQgKD1ydW4pIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBwcmVwYXJlQ29udGV4dEZvckVkaXRvclN1Ym1pdDxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IElBY3Rpb25JbnN0YW5jZTxhbnksIGFueT5cbiAgICApOiBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2UoaW5zdGFuY2UsIGFjdGlvbiwgcGFyYW1ldGVycywgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvbkVuZCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXBhcmVDb250ZXh0Rm9yRWRpdG9yKGluc3RhbmNlLCBwYXJhbWV0ZXJzLCAnc3VibWl0JywgZGF0YVByb3ZpZGVyLCBwcmV2aW91c0FjdGlvbkluc3RhbmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlcyBhY3Rpb24gZXhlYyBjb250ZXh0IGZvciBhY3Rpb24gb2YgdHlwZSBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgQWN0aW9uIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgQWN0aW9uIGZ1bmN0aW9uIG5hbWUgcGFyYW1ldGVyLlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgT3B0aW9uYWwgZGF0YSBwcm92aWRlci4gSWYgbm90IHByb3ZpZGVkIGRhdGEgcHJvdmlkZXIgZnJvbSBlaXRoZXIgdGhlIGFjdGlvbiBlZGl0b3Igb3IgdmlldyBjb250YWluZXIgd2lsbCBiZSB1c2VkLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcmVwYXJlQ29udGV4dEZvckVkaXRvcjxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgaW5zdGFuY2U6IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+LFxuICAgICAgICBmdW5jdGlvbk5hbWU6ICdzdWJtaXQnIHwgJ2ZldGNoJyxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IElBY3Rpb25JbnN0YW5jZTxhbnksIGFueT5cbiAgICApOiBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi50eXBlICE9PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgQ2Fubm90IGNyZWF0ZSBlZGl0b3IgY29udGV4dCBmb3IgYWN0aW9uICR7aW5zdGFuY2UuYWN0aW9uLmFjdGlvbk5hbWVMb25nfSBvZiB0eXBlICR7aW5zdGFuY2UuYWN0aW9uLnR5cGV9LmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVkaXRvckFjdGlvbiA9IGluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPjtcbiAgICAgICAgbGV0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgaWYgKCFjdHhEYXRhUHJvdmlkZXIgJiYgZWRpdG9yQWN0aW9uLmRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyID0gZWRpdG9yQWN0aW9uLmRhdGFQcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN0eERhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3Qgdmlld0NvbnRhaW5lckRhdGFQcm92aWRlciA9IHRoaXMudmlld0NvbnRhaW5lcj8uZGF0YVByb3ZpZGVyO1xuICAgICAgICAgICAgaWYgKHZpZXdDb250YWluZXJEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIgPSB2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN0eCA9IG5ldyBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+KFxuICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IuZ2V0RGF0YVByb3ZpZGVyU2VydmljZSh0aGlzLmluamVjdG9yLCBjdHhEYXRhUHJvdmlkZXIpID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGN0eERhdGFQcm92aWRlcixcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lciA/PyB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgICAgY3R4LnByZXZpb3VzQWN0aW9uSW5zdGFuY2UgPSBwcmV2aW91c0FjdGlvbkluc3RhbmNlO1xuICAgICAgICBpbnN0YW5jZS5uZXdDb250ZXh0KGN0eCk7XG4gICAgICAgIHJldHVybiBjdHg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBhY3Rpb24ncyBtYWluIHJ1biBmdW5jdGlvbiBieSBjcmVhdGluZyBuZXcgYWN0aW9uIGNvbnRleHQgZm9yIGFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGNvbnRleHQgcnVuLlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRGF0YSBwcm92aWRlciBmb3IgY29udGV4dCBydW4uXG4gICAgICogQHBhcmFtIGluc3RhbmNlIE9wdGlvbmFsIGV4aXN0aW5nIGFjdGlvbiBpbnN0YW5jZSAoaWYgbm9uIHByb3ZpZGVkLCBuZXcgd2lsbCBiZSBjcmVhdGVkKS5cbiAgICAgKiBAcGFyYW0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZSBPcHRpb25hbCBwcmV2aW91cyBhY3Rpb24gaW5zdGFuY2UgdG8gbGluayBpbiBuZXh0IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQWN0aW9uIGNvbnRleHQgZm9yIHJ1biBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHByZXBhcmVDb250ZXh0PEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+LFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8YW55LCBhbnk+XG4gICAgKTogQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+KGluc3RhbmNlLCBhY3Rpb24sIHBhcmFtZXRlcnMsIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmQpO1xuXG4gICAgICAgIGNvbnN0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlciA/PyBpbnN0YW5jZS5hY3Rpb24uZGF0YVByb3ZpZGVyID8/IHRoaXMudmlld0NvbnRhaW5lcj8uZGF0YVByb3ZpZGVyO1xuICAgICAgICBsZXQgc2VydmljZTogU2VydmljZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGN0eERhdGFQcm92aWRlciAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXJTZXJ2aWNlID0gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlPEl0ZW0sIFNlcnZpY2U+KHRoaXMuaW5qZWN0b3IsIGN0eERhdGFQcm92aWRlcik7XG4gICAgICAgICAgICBpZiAoIWRhdGFQcm92aWRlclNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VydmljZSA9IGRhdGFQcm92aWRlclNlcnZpY2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3R4ID0gbmV3IEFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4odGhpcy5pbmplY3RvciwgaW5zdGFuY2UsIHBhcmFtZXRlcnMsICdydW4nLCBzZXJ2aWNlIGFzIFNlcnZpY2UsIGN0eERhdGFQcm92aWRlciwgdGhpcy52aWV3Q29udGFpbmVyID8/IHVuZGVmaW5lZCk7XG4gICAgICAgIGN0eC5wcmV2aW91c0FjdGlvbkluc3RhbmNlID0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZTtcbiAgICAgICAgaW5zdGFuY2UubmV3Q29udGV4dChjdHgpO1xuXG4gICAgICAgIHJldHVybiBjdHg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWN0aXZhdGVzIGFjdGlvbiAoaW4gY2FzZSBvZiBkaWFsb2csIGRpYWxvZyB3aWxsIGJlIG9wZW5lZCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBhY3RpdmF0aW9uIG9mIGFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgT3B0aW9uYWwgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlIChpZiBub24gcHJvdmlkZWQsIG5ldyB3aWxsIGJlIGNyZWF0ZWQpLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHJ1bkNvbnRleHQgTWFya3MgaWYgY29udGV4dCBzaG91bGQgYmUgcnVuLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQWN0aW9uIGluc3RhbmNlIC0gaWYgbm9uIHByb3ZpZGVkIGluIHBhcmFtZXRlcnMsIHRoZSBuZXdseSBjcmVhdGVkIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAgICovXG4gICAgcHVibGljIGFjdGl2YXRlQWN0aW9uPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8YW55LCBhbnk+LFxuICAgICAgICBydW5Db250ZXh0ID0gZmFsc2VcbiAgICApOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+KGluc3RhbmNlLCBhY3Rpb24sIHBhcmFtZXRlcnMsIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25TdGFydCk7XG4gICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvblN0YXJ0O1xuICAgICAgICBpbnN0YW5jZS5hY3RpdmF0aW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG4gICAgICAgIC8vIHN0YXJ0IGFjdGl2YXRpb24gaW5zdGFuY2VcbiAgICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIGxldCBkaWFsb2dDb21wb25lbnQgPSB0aGlzLmRlZmF1bHRFZGl0b3JEaWFsb2dDb21wb25lbnQ7XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dDbGFzc05hbWVzID0gWydtbmctZGlhbG9nJ107XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dDb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgZHVwbGljYXRlOiB0cnVlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoYWN0aW9uIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDbGFzc05hbWVzLnB1c2goYWN0aW9uLmRpYWxvZ0NsYXNzTmFtZSA/PyAnbW5nLWFjdGlvbi1lZGl0b3ItZGlhbG9nJyk7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChhY3Rpb24uZGlhbG9nU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFN0eWxlU2l6ZUVudW0uRXh0cmFTbWFsbDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NsYXNzTmFtZXMucHVzaCgnbW5nLWRpYWxvZy14cycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3R5bGVTaXplRW51bS5TbWFsbDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NsYXNzTmFtZXMucHVzaCgnbW5nLWRpYWxvZy1zbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3R5bGVTaXplRW51bS5MYXJnZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NsYXNzTmFtZXMucHVzaCgnbW5nLWRpYWxvZy1sZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3R5bGVTaXplRW51bS5FeHRyYUxhcmdlOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lcy5wdXNoKCdtbmctZGlhbG9nLXhsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTdHlsZVNpemVFbnVtLk5vcm1hbDpcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmVkaXRvckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQgPSBhY3Rpb24uZWRpdG9yQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuZGF0YSA9IDxBY3Rpb25FZGl0b3JEaWFsb2dEYXRhPEl0ZW0sIFNlcnZpY2U+PntcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yOiBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0luc3RhbmNlOiBwcmV2aW91c0FjdGlvbkluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGluamVjdG9yOiB0aGlzLmluamVjdG9yXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLnN0eWxlQ2xhc3MgPSBkaWFsb2dDbGFzc05hbWVzLmpvaW4oJyAnKTtcblxuICAgICAgICAgICAgaWYgKGFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuY2xvc2FibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuY2xvc2VPbkVzY2FwZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihkaWFsb2dDb21wb25lbnQsIGRpYWxvZ0NvbmZpZyk7XG4gICAgICAgICAgICBkaWFsb2dSZWYub25DbG9zZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gdG8gY2xvc2UgZGlhbG9nIG9uICdYJyBjbGljayBvciBlc2MgYnV0dG9uXG4gICAgICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oaW5zdGFuY2UhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW5zdGFuY2UuYWN0aXZhdGlvbkRpYWxvZ1JlZiA9IGRpYWxvZ1JlZjtcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRpcmVjdGx5IGV4ZWN1dGUgYWN0aW9uXG4gICAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmQ7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wcmVwYXJlQ29udGV4dDxJdGVtLCBTZXJ2aWNlPihhY3Rpb24sIHBhcmFtZXRlcnMsIHVuZGVmaW5lZCwgaW5zdGFuY2UsIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UpO1xuXG4gICAgICAgICAgICBpZiAocnVuQ29udGV4dCkge1xuICAgICAgICAgICAgICAgIHRoaXMucnVuKGNvbnRleHQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5pbnN0YW5jZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvIGJlIGNhbGxlZCB3aGVuIGFjdGlvbiBlZGl0b3IgaXMgaW5pdGlhbGl6ZWQgdG8gY29ycmVjdGx5IGFjdGl2YXRlIGFjdGlvbi5cbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UgKGlmIGF2YWlsYWJsZSkuXG4gICAgICogQHBhcmFtIGNvbXBvbmVudFJlZiBPcHRpb25hbCBhY3Rpb24gZWRpdG9yIGNvbXBvbmVudCByZWZlcmVuY2UuXG4gICAgICovXG4gICAgcHVibGljIG9uQWN0aW9uRWRpdG9ySW5pdDxULCBTPihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PFQ+LCBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+LCBjb21wb25lbnRSZWY/OiBJQWN0aW9uRWRpdG9yQ29tcG9uZW50KTogQWN0aW9uSW5zdGFuY2U8VCwgUz4ge1xuICAgICAgICBpZiAoYWN0aW9uLnR5cGUgIT09IEFjdGlvblR5cGVFbnVtLkVkaXRvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBY3Rpb24gJHthY3Rpb24uYWN0aW9uTmFtZX0gaXMgbm90IG9mIHR5cGUgZWRpdG9yLCBjYW5ub3QgYmUgYWN0aXZhdGVkIHRocm91Z2ggXCJvbkFjdGlvbkVkaXRvck9uSW5pdFwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluc3RhbmNlICYmIGFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyaWdnZXJlZEluc3RhbmNlID0gdGhpcy52aWV3Q29udGFpbmVyPy5yb3V0ZVRyaWdnZXJlZEFjdGlvbkluc3RhbmNlO1xuICAgICAgICAgICAgaWYgKHRyaWdnZXJlZEluc3RhbmNlICYmIHRyaWdnZXJlZEluc3RhbmNlLmluc3RhbmNlTG9uZ05hbWUgIT09IGluc3RhbmNlLmluc3RhbmNlTG9uZ05hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgICAgICAgICAgYFdBUk5JTkc6IEZvdW5kIHRyaWdnZXJlZCBwYXJhbWV0ZXJzIHZpZXcgY29udGFpbmVyIGluc3RhbmNlICR7dHJpZ2dlcmVkSW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX0gYW5kIGl0IGRvZXMgbm90IG1hdGNoIGluc3RhbmNlICR7aW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX0gcmV0cmlldmVkIG9uIGVkaXRvciBpbml0LmBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlLCBhY3Rpb24sIHVuZGVmaW5lZCwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvblN0YXJ0KTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kO1xuICAgICAgICBpbnN0YW5jZS5hY3RpdmF0aW9uRWRpdG9yQ29tcG9uZW50UmVmID0gY29tcG9uZW50UmVmO1xuXG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUbyBiZSBjYWxsZWQgd2hlbiBhY3Rpb24gZWRpdG9yIGNtcCBpcyBiZWluZyBkZXN0cm95ZWQgdG8gY29ycmVjdGx5IGZpbmlzaCBhY3Rpb24uXG4gICAgICogQHBhcmFtIGluc3RhbmNlIEFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25BY3Rpb25EZXN0cm95PFQsIFM+KGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciAhPT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uQ2xpY2spIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbmlzaEFjdGlvbihpbnN0YW5jZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG8gYmUgY2FsbGVkIHdoZW4gYWN0aW9uIGVkaXRvciBjbXAgaXMgYmVpbmcgZGVzdHJveWVkIHRvIGNvcnJlY3RseSBmaW5pc2ggYWN0aW9uLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIG9uQWN0aW9uRWRpdG9yRGVzdHJveTxULCBTPihpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+KTogdm9pZCB7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpbnN0YW5jZSA9IHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShpbnN0YW5jZSk7XG4gICAgICAgIGlmIChpbnN0YW5jZS5hY3Rpb24udHlwZSAhPT0gQWN0aW9uVHlwZUVudW0uRWRpdG9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFjdGlvbiBpbnN0YW5jZSAke2luc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9IGlzIG5vdCBvZiB0eXBlIGVkaXRvciwgY2Fubm90IGJlIGRlYWN0aXZhdGVkIHRocm91Z2ggXCJvbkFjdGlvbkVkaXRvck9uRGVzdHJveVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciAhPT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGluc3RhbmNlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvIGJlIGNhbGxlZCB3aGVuIGFjdGlvbiByb3V0ZSBjbXAgaXMgYmVpbmcgZGVzdHJveWVkIHRvIGNvcnJlY3RseSBmaW5pc2ggYWN0aW9uLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIG9uQWN0aW9uUm91dGVEZXN0cm95PFQsIFM+KGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciAhPT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQWN0aW9uIGluc3RhbmNlICR7aW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX0gaXMgbm90IHRyaWdnZXJlZCBvbiByb3V0ZSwgY2Fubm90IGJlIGRlYWN0aXZhdGVkIHRocm91Z2ggXCJvbkFjdGlvblJvdXRlT25EZXN0cm95XCJgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbmlzaEFjdGlvbihpbnN0YW5jZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVhY3RpdmF0ZXMgYWN0aW9uIGJ5IGNob29zaW5nIGZpbmFsIHN0YXRlLCBjbG9zaW5nIGRpYWxvZyBhbmQgY29tcGxldGluZyBhbGwgc3ViamVjdHMgaW4gaW5zdGFuY2UgYW5kIGNvbnRleHRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluc3RhbmNlIEFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gb25EZXN0cm95IE1hcmtzIGlmIGZpbmlzaCBpcyBjYWxsZWQgb24gY29tcG9uZW50IGRlc3Ryb3kgbGlmZWN5Y2xlIGhvb2suXG4gICAgICovXG4gICAgcHVibGljIGZpbmlzaEFjdGlvbjxJdGVtLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihpbnN0YW5jZTogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4sIG9uRGVzdHJveSA9IGZhbHNlKSB7XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlID49IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbCkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYEFjdGlvbkluc3RhbmNlICR7aW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX0gYWxyZWFkeSBmaW5pc2hlZGApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZpbmFsU3RhdGU6IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtO1xuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLnJlc3VsdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGZpbmFsU3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzRmluYWw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLmVycm9yICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZmluYWxTdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaEVycm9yRmluYWw7XG4gICAgICAgIH0gZWxzZSBpZiAob25EZXN0cm95KSB7XG4gICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoQ29tcG9uZW50RGVzdHJveUZpbmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmluYWxTdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaERpc21pc3NlZEZpbmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0RpYWxvZyA9IHR5cGVvZiBpbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VibWl0RW5hYmxlZCA9IChpbnN0YW5jZS5hY3Rpb24gYXMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbT4pLnJlc3VibWl0RW5hYmxlZDtcblxuICAgICAgICAgICAgaWYgKGZpbmFsU3RhdGUgPT09IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbCkge1xuICAgICAgICAgICAgICAgIGlmICgoaGFzRGlhbG9nICYmIHJlc3VibWl0RW5hYmxlZCA9PT0gdHJ1ZSkgfHwgKCFoYXNEaWFsb2cgJiYgcmVzdWJtaXRFbmFibGVkICE9PSBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmluYWxTdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzRGlhbG9nICYmIGZpbmFsU3RhdGUgIT09IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWwpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBzdGF0ZSBpcyBmaW5pc2ggYW5kIG5vdCBjYWxsZWQgZnJvbSBkaWFsb2cgbGlzdGVuZXIsIGNsb3NlIHRoZSBkaWFsb2cgZmlyc3Qgd2hpY2ggd2lsbCByZXRyaWdnZXIgdGhpcyBmdW5jdGlvbiwgdGhlbiBmaW5pc2ggaXRcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmIS5jbG9zZShpbnN0YW5jZS5yZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdW5zZXQgaW5zdGFuY2UgaW4gdmlldyBjb250YWluZXJcbiAgICAgICAgaWYgKHRoaXMudmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLnJvdXRlVHJpZ2dlcmVkQWN0aW9uSW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgZmluYWwgc3RhdGUgb24gaW5zdGFuY2VcbiAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBmaW5hbFN0YXRlO1xuXG4gICAgICAgIGlmIChmaW5hbFN0YXRlID09PSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzUmVhY3RpdmF0ZUZpbmFsKSB7XG4gICAgICAgICAgICAvLyBwcmVwYXJlIHJlYWN0aXZhdGlvbiBpbnN0YW5jZVxuICAgICAgICAgICAgY29uc3QgbmV3SW5zdGFuY2VTdGF0dXMgPSAoaW5zdGFuY2UuYWN0aW9uIGFzIEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0+KS5yZXN1Ym1pdFJlZmV0Y2hcbiAgICAgICAgICAgICAgICA/IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmRcbiAgICAgICAgICAgICAgICA6IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoRW5kO1xuICAgICAgICAgICAgLy8gbXVzdCBza2lwIGluaXRpYWxpemF0aW9uIGZyb20gdmlldyBjb250YWluZXIsIGJlY2F1c2UgaXQgd291bGQgb25seSBnZXQgb2xkIGluc3RhbmNlLlxuICAgICAgICAgICAgLy8gd2UgbmVlZCBuZXcgaW5zdGFuY2UgYmVmb3JlIHdlIGNhbiBzZXQgbmV3IG9uZSBvbiB0aGUgdmlldyBjb250YWluZXIuXG4gICAgICAgICAgICBjb25zdCBuZXdJbnN0YW5jZSA9IHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPih1bmRlZmluZWQsIGluc3RhbmNlLmFjdGlvbiwgdW5kZWZpbmVkLCBuZXdJbnN0YW5jZVN0YXR1cywgdHJ1ZSk7XG4gICAgICAgICAgICBuZXdJbnN0YW5jZS5wcmV2aW91c0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICAvLyBjb3B5IHNvbWUgYWRkaXRpb25hbCBzZXR0aW5nc1xuICAgICAgICAgICAgbmV3SW5zdGFuY2UuYWN0aXZhdGlvbkRpYWxvZ1JlZiA9IGluc3RhbmNlLmFjdGl2YXRpb25EaWFsb2dSZWY7XG4gICAgICAgICAgICBuZXdJbnN0YW5jZS50cmlnZ2VyUGFyYW1ldGVycyA9IGluc3RhbmNlLnRyaWdnZXJQYXJhbWV0ZXJzO1xuICAgICAgICAgICAgbmV3SW5zdGFuY2UuYWN0aXZhdGlvblBhcmFtZXRlcnMgPSBpbnN0YW5jZS5hY3RpdmF0aW9uUGFyYW1ldGVycztcblxuICAgICAgICAgICAgaWYgKHRoaXMudmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lci5yb3V0ZVRyaWdnZXJlZEFjdGlvbkluc3RhbmNlID0gbmV3SW5zdGFuY2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGluc3RhbmNlLnJlYWN0aXZhdGlvbkluc3RhbmNlID0gbmV3SW5zdGFuY2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmaW5pc2ggcmVsYXRlZCBhY3Rpb25zXG4gICAgICAgIGlmIChpbnN0YW5jZS5uZXh0QWN0aW9uSW5zdGFuY2UgJiYgaW5zdGFuY2UubmV4dEFjdGlvbkluc3RhbmNlIGluc3RhbmNlb2YgQWN0aW9uSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBGaW5pc2hpbmcgaW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSByZWxhdGVkIG5leHQgYWN0aW9uIGluc3RhbmNlOiAke2luc3RhbmNlLm5leHRBY3Rpb25JbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfWApO1xuICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oaW5zdGFuY2UubmV4dEFjdGlvbkluc3RhbmNlLCBvbkRlc3Ryb3kpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnN0YW5jZS5lcnJvckFjdGlvbkluc3RhbmNlICYmIGluc3RhbmNlLmVycm9yQWN0aW9uSW5zdGFuY2UgaW5zdGFuY2VvZiBBY3Rpb25JbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEZpbmlzaGluZyBpbnN0YW5jZSAke2luc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9IHJlbGF0ZWQgZXJyb3IgYWN0aW9uIGluc3RhbmNlOiAke2luc3RhbmNlLmVycm9yQWN0aW9uSW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX1gKTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGluc3RhbmNlLmVycm9yQWN0aW9uSW5zdGFuY2UsIG9uRGVzdHJveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhY3Rpb24gd2l0aCBwYXJhbWV0ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgYWN0aW9uIGV4ZWN1dGlvbiB0byBjb25zdHJ1Y3QgbmV3IHJvdXRlLlxuICAgICAqIEBwYXJhbSBydW5Db250ZXh0IE1hcmtzIGlmIGNvbnRleHQgc2hvdWxkIGJlIHJ1bi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFjdGlvbiBpbnN0YW5jZSAtIGlmIG5vbiBwcm92aWRlZCBpbiBwYXJhbWV0ZXJzLCB0aGUgbmV3bHkgY3JlYXRlZCB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyB0cmlnZ2VyQWN0aW9uPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8SXRlbT4sIHBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4sIHJ1bkNvbnRleHQgPSBmYWxzZSk6IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2U8SXRlbSwgU2VydmljZT4odW5kZWZpbmVkLCBhY3Rpb24sIHBhcmFtZXRlcnMpO1xuICAgICAgICBpbnN0YW5jZS50cmlnZ2VyUGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG4gICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uVHJpZ2dlclN0YXJ0O1xuICAgICAgICBpZiAoYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyID09PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgY29uc3QgYmFzZVVybCA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgnPycpWzBdO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsOiBVcmxUcmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yb3V0ZXIudXJsKTtcbiAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBhY3Rpb24ucm91dGVVcmwgPz8gJyc7XG4gICAgICAgICAgICBpZiAoYWN0aW9uVXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvblVybCA9IGFjdGlvblVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdGlvblVybFNlZ21lbnRzID0gdGhpcy5wYXJhbWV0cml6ZS50cmFuc2Zvcm0oYWN0aW9uVXJsLCBwYXJhbWV0ZXJzLml0ZW1JZCwgcGFyYW1ldGVycy5pdGVtLCBwYXJhbWV0ZXJzLmFjdGlvbkRhdGEpLnNwbGl0KCcvJyk7XG5cbiAgICAgICAgICAgIC8vIHNldCBpbnN0YW5jZSBpbiB2aWV3IGNvbnRhaW5lclxuICAgICAgICAgICAgaWYgKHRoaXMudmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lci5yb3V0ZVRyaWdnZXJlZEFjdGlvbkluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZyb20odGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Jhc2VVcmwsIC4uLmFjdGlvblVybFNlZ21lbnRzXSwge3JlbGF0aXZlVG86IHBhcmFtZXRlcnMucm91dGUsIHF1ZXJ5UGFyYW1zOiBwYXJzZWRVcmwucXVlcnlQYXJhbXN9KSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gKGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uVHJpZ2dlckVuZCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlRyaWdnZXJFbmQ7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlQWN0aW9uKGFjdGlvbiwgcGFyYW1ldGVycywgaW5zdGFuY2UpO1xuXG4gICAgICAgICAgICBpZiAocnVuQ29udGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucnVuKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVhY3RpdmF0ZXMgb24gcm91dGUgdHJpZ2dlcmVkIGFjdGlvbiBieSB0cnlpbmcgdG8gcmVyb3V0ZSBiYWNrIHRvIGxvY2F0aW9uIHdoZXJlIGFjdGlvbiB3YXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGZpbmlzaEFjdGlvblJvdXRlVW50cmlnZ2VyPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPikge1xuICAgICAgICBpZiAoaW5zdGFuY2UuYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyICE9PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2U8SXRlbSwgU2VydmljZT4oaW5zdGFuY2UpO1xuXG4gICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoUm91dGVVbnRyaWdnZXJTdGFydDtcblxuICAgICAgICBsZXQgdXJsID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRDdXJyZW50TG9jYXRpb25Gcm9tSGlzdG9yeSgpID8/IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0Q3VycmVudExvY2F0aW9uRnJvbVVybCgpO1xuICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5iYWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNwbGl0VXJsUXVlcnlQYXJhbSA9IHVybC5zcGxpdCgnPycpO1xuICAgICAgICAgICAgY29uc3QgdXJsUGF0aFNlZ21lbnRzID0gc3BsaXRVcmxRdWVyeVBhcmFtWzBdLnNwbGl0KCcjJylbMF0uc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW0gPSBzcGxpdFVybFF1ZXJ5UGFyYW1bMV0/LnNwbGl0KCcjJylbMF07XG5cbiAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBpbnN0YW5jZS5hY3Rpb24/LnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgaWYgKGFjdGlvblVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25VcmwgPSBhY3Rpb25Vcmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWN0aW9uVXJsU2VnbWVudHMgPSBhY3Rpb25Vcmwuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGxldCByZWRpcmVjdFVybCA9ICcvJyArIHVybFBhdGhTZWdtZW50cy5zbGljZSgwLCB1cmxQYXRoU2VnbWVudHMubGVuZ3RoIC0gYWN0aW9uVXJsU2VnbWVudHMubGVuZ3RoKS5qb2luKCcvJyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHF1ZXJ5UGFyYW0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVcmwgPSBgJHtyZWRpcmVjdFVybH0/JHtxdWVyeVBhcmFtfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vIFVSTCByZXBsYWNlcywgcHJvYmFibHkgb2ssIHRvIGFsbG93IGdvaW5nIGJhY2tcbiAgICAgICAgICAgIGZyb20odGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChyZWRpcmVjdFVybCkpXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSwgdGltZW91dCgxMDAwKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogKCkgPT4gKGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoUm91dGVVbnRyaWdnZXJFbmRGaW5hbCksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiAoaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hSb3V0ZVVudHJpZ2dlclRpbWVvdXRGaW5hbClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybSBlcnJvciBvZiBhbnkgdHlwZSB0byBlcnJvciBieSB1c2luZyBlcnJvciBtYXBwZXIgdGhhdCBjb3VsZCBiZSBwcm92aWRlZCBieSBmaW5hbCBwcm9qZWN0LlxuICAgICAqIEBwYXJhbSBlcnJvciBlcnJvciBvZiBhbnkgdHlwZS5cbiAgICAgKiBAcGFyYW0gY29udGV4dCBBY3Rpb24gY29udGV4dC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIG1hcHBlZCBJQ29tbW9uc0Vycm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b0FjdGlvbkVycm9yKGVycm9yPzogYW55LCBjb250ZXh0PzogQWN0aW9uQ29udGV4dDxhbnksIGFueT4pOiBJQ29tbW9uc0Vycm9yIHtcbiAgICAgICAgbGV0IGNvbW1vbnNFcnJvcjogSUNvbW1vbnNFcnJvcjtcbiAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnM6IENvbW1vbnNBY3Rpb25FcnJvck9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY2F1c2U6IGVycm9yLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB0aGlzLnJvdXRlci51cmxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuaHR0cEVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbW1vbnNFcnJvciA9IG5ldyBDb21tb25zQWN0aW9uRXJyb3IoZXJyb3I/Lm1lc3NhZ2UgPz8gJ1Vua25vd24gZXJyb3InLCBjb250ZXh0LmNvbnRleHRMb25nTmFtZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgLy8gc2hvdWxkIG5vdCByZWFsbHkgaGFwcGVuIChzaG91bGQgYWx3YXlzIGJlIHdyYXBwZWQgaW4gTW5nQWN0aW9uRXJyb3IpLCBqdXN0IGluIGNhc2VcbiAgICAgICAgICAgIGNvbW1vbnNFcnJvciA9IG5ldyBDb21tb25zSHR0cEVycm9yKGBIdHRwIEVycm9yIG9jY3VycmVkIGluIGFjdGlvbmAsIGVycm9yLCB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHRoaXMucm91dGVyLnVybFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBub3QgZnJvbSBhY3Rpb24sIHNvIHVua25vd24gc291cmNlIG9mIGVycm9yXG4gICAgICAgICAgICBjb21tb25zRXJyb3IgPSBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoZXJyb3I/Lm1lc3NhZ2UgPz8gJ1Vua25vd24gZXJyb3InLCB7XG4gICAgICAgICAgICAgICAgbmFtZTogZXJyb3I/Lm5hbWUgPz8gJ1Vua25vd25FcnJvcicsXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHRoaXMucm91dGVyLnVybCxcbiAgICAgICAgICAgICAgICBjYXVzZTogZXJyb3JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8ganVzdCB0cmFjZSBpdCwgYWxsb3cgdXNlciB0byBzZXQgaWYgdGhpcyBpcyBlcnJvciBvciBub3RcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoY29tbW9uc0Vycm9yKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvck1hcHBlci50b0NvbW1vbnNFcnJvcihlcnJvciwgY29tbW9uc0Vycm9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIG9yIGdldHMgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycy5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2VJbml0aWFsU3RhdHVzIEFjdGlvbiBpbnN0YW5jZSBpbml0aWFsIHN0YXR1cy5cbiAgICAgKiBAcGFyYW0gc2tpcEluaXRpYWxpemF0aW9uRnJvbVZpZXdDb250YWluZXIgSWYgaW5pdGlhbGl6YXRpb24gb2YgaW5zdGFuY2UgZnJvbSB2aWV3IGNvbnRhaW5lciBzaG91bGQgYmUgc2tpcHBlZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRPckNyZWF0ZUluc3RhbmNlPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgICAgICBpbnN0YW5jZTogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4gfCB1bmRlZmluZWQsXG4gICAgICAgIGFjdGlvbj86IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwYXJhbWV0ZXJzPzogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgaW5zdGFuY2VJbml0aWFsU3RhdHVzPzogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0sXG4gICAgICAgIHNraXBJbml0aWFsaXphdGlvbkZyb21WaWV3Q29udGFpbmVyID0gZmFsc2VcbiAgICApOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgICAgIGlmICghc2tpcEluaXRpYWxpemF0aW9uRnJvbVZpZXdDb250YWluZXIgJiYgIWluc3RhbmNlICYmIGFjdGlvbj8uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlICYmIHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcy52aWV3Q29udGFpbmVyPy5yb3V0ZVRyaWdnZXJlZEFjdGlvbkluc3RhbmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGlmICghYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdBY3Rpb24gZGVzY3JpcHRvciBpcyBub3QgcHJvdmlkZWQsIGluc3RhbmNlIGNhbm5vdCBiZSBjcmVhdGVkLicsIHtuYW1lOiAnQWN0aW9uRXhlY3V0b3JTZXJ2aWNlRXJyb3InfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjcmVhdGUgbmV3IGluc3RhbmNlIGlmIG5vbiBwcm92aWRlZFxuICAgICAgICAgICAgaW5zdGFuY2UgPSBuZXcgQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4oYWN0aW9uLCBpbnN0YW5jZUluaXRpYWxTdGF0dXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnPy5hY3Rpb25zPy5kZWJ1Z0luc3RhbmNlcyAmJiAhdGhpcy5pbnN0YW5jZXMuc29tZShpID0+IGkuaW5zdGFuY2VMb25nTmFtZSA9PT0gaW5zdGFuY2UhLmluc3RhbmNlTG9uZ05hbWUpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZXMubGVuZ3RoID49IHRoaXMuaW5zdGFuY2VzQnVmZmVyTWF4KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgIGlmIChsYXN0SW5zdGFuY2UhLnN0YXRlIDwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc0ZpbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBFUlJPUjogTm90IGFsbCBpbnN0YW5jZXMgYXJlIGZpbmlzaGVkISBGaW5pc2hpbmcgaW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSB3aXRoIGRpc21pc3NhbC5gKTtcbiAgICAgICAgICAgICAgICAgICAgbGFzdEluc3RhbmNlIS5mb3JjZUZpbmlzaCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxufVxuIl19
767
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvc3JjL2FjdGlvbi9zZXJ2aWNlcy9hY3Rpb24tZXhlY3V0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUMsTUFBTSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFlLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM5RSxPQUFPLEVBQUMsYUFBYSxFQUFzQixNQUFNLHVCQUF1QixDQUFDO0FBQ3pFLE9BQU8sRUFBYSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGNBQWMsRUFHZCxhQUFhLEVBQ2IsZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLEVBQ2IsWUFBWSxFQUNmLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUNILDJCQUEyQixFQUczQiwwQkFBMEIsRUFFMUIsNkJBQTZCLEVBQzdCLDBCQUEwQixFQUMxQiw4QkFBOEIsRUFFOUIsY0FBYyxFQUNkLGtCQUFrQixFQUVsQixvQkFBb0IsRUFHdkIsTUFBTSxzQ0FBc0MsQ0FBQztBQUU5QyxPQUFPLEVBQUMsbUNB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QUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQ3ZILElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ25ELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBRTVDLElBQUksWUFBYSxDQUFDLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUNuRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw2REFBNkQsUUFBUSxDQUFDLGdCQUFnQixrQkFBa0IsQ0FBQyxDQUFDO29CQUM1SCxZQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2hDLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7SW5qZWN0b3IsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlciwgVXJsVHJlZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q29uZmlybWF0aW9uLCBDb25maXJtYXRpb25TZXJ2aWNlLCBNZXNzYWdlU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29uZmlnfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBmcm9tLCBtZXJnZU1hcCwgb2YsIHN3aXRjaE1hcCwgdGFrZSwgdGltZW91dH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpbHRlciwgZmlyc3QsIG1hcCwgc3RhcnRXaXRofSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gICAgQWN0aW9uUGFyYW1ldGVycyxcbiAgICBDb21tb25zSHR0cEVycm9yLFxuICAgIENvbW1vbnNJbnRlcm5hbEVycm9yLFxuICAgIENvbW1vbnNTZXJ2aWNlLFxuICAgIElDb21tb25zRXJyb3IsXG4gICAgSURhdGFQcm92aWRlcixcbiAgICBMb2dnZXJTZXJ2aWNlLFxuICAgIFBhcmFtZXRyaXplUGlwZSxcbiAgICBTdHlsZVNpemVFbnVtLFxuICAgIGVzY2FwZUh0bWxBbnksXG4gICAgdG9PYnNlcnZhYmxlXG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge1xuICAgIEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSxcbiAgICBBY3Rpb25Db25maXJtYXRpb25EZXNjcmlwdG9yLFxuICAgIEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uLFxuICAgIEFjdGlvbkRlbGV0ZURlc2NyaXB0b3JJbnN0LFxuICAgIEFjdGlvbkRlc2NyaXB0b3JJbnN0LFxuICAgIEFjdGlvbkVkaXRvckFkZERlc2NyaXB0b3JJbnN0LFxuICAgIEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0LFxuICAgIEFjdGlvbkVkaXRvckVkaXREZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25SdW5GblR5cGUsXG4gICAgQWN0aW9uVHlwZUVudW0sXG4gICAgQ29tbW9uc0FjdGlvbkVycm9yLFxuICAgIENvbW1vbnNBY3Rpb25FcnJvck9wdGlvbnMsXG4gICAgRGF0YVByb3ZpZGVyRXhlY3V0b3IsXG4gICAgSUFjdGlvbkVkaXRvckNvbXBvbmVudCxcbiAgICBJQWN0aW9uSW5zdGFuY2Vcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZXZpZXcvYXBpJztcblxuaW1wb3J0IHtDT01NT05TX1RBQkxFVklFV19GRUFUVVJFX0NPTkZJR19JVH0gZnJvbSAnLi4vLi4vdGFibGV2aWV3L3NlcnZpY2VzL3RhYmxldmlldy1mZWF0dXJlLWNvbmZpZy50b2tlbic7XG5pbXBvcnQge2dldEkxOG5Gb3JBY3Rpb259IGZyb20gJy4uL2hlbHBlcnMvaTE4bic7XG5pbXBvcnQge2FjdGlvbk5vdGlmaWNhdGlvbkVycm9yLCBhY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzfSBmcm9tICcuLi9oZWxwZXJzL25vdGlmaWNhdGlvbic7XG5pbXBvcnQge0FjdGlvbkVkaXRvckRpYWxvZ0RhdGF9IGZyb20gJy4uL21vZGVscy9hY3Rpb24tZWRpdG9yLWRpYWxvZy1kYXRhLm1vZGVsJztcbmltcG9ydCB7QWN0aW9uQ29udGV4dH0gZnJvbSAnLi4vbW9kZWxzL2V4ZWN1dGlvbi9hY3Rpb24tY29udGV4dC5tb2RlbCc7XG5pbXBvcnQge0FjdGlvbkluc3RhbmNlU3RhdGVFbnVtfSBmcm9tICcuLi9tb2RlbHMvZXhlY3V0aW9uL2FjdGlvbi1pbnN0YW5jZS1zdGF0ZS5tb2RlbCc7XG5pbXBvcnQge0FjdGlvbkluc3RhbmNlfSBmcm9tICcuLi9tb2RlbHMvZXhlY3V0aW9uL2FjdGlvbi1pbnN0YW5jZS5tb2RlbCc7XG5pbXBvcnQge0FjdGlvbkVycm9yTWFwcGVyU2VydmljZX0gZnJvbSAnLi9hY3Rpb24tZXJyb3ItbWFwcGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSAnLi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtBQ1RJT05fRURJVE9SX0NPTVBPTkVOVF9JVH0gZnJvbSAnLi90b2tlbnMvYWN0aW9uLWVkaXRvci50b2tlbic7XG5pbXBvcnQge1ZpZXdDb250YWluZXJ9IGZyb20gJy4vdmlldy1jb250YWluZXIuc2VydmljZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBY3Rpb25FeGVjdXRvclNlcnZpY2Uge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbW1vbnMgPSBpbmplY3QoQ29tbW9uc1NlcnZpY2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkYXRhUHJvdmlkZXJFeGVjdXRvciA9IGluamVjdChEYXRhUHJvdmlkZXJFeGVjdXRvcik7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5hdmlnYXRpb25TZXJ2aWNlID0gaW5qZWN0KE5hdmlnYXRpb25TZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZXJyb3JNYXBwZXIgPSBpbmplY3QoQWN0aW9uRXJyb3JNYXBwZXJTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KENPTU1PTlNfVEFCTEVWSUVXX0ZFQVRVUkVfQ09ORklHX0lULCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVmYXVsdEVkaXRvckRpYWxvZ0NvbXBvbmVudCA9IGluamVjdChBQ1RJT05fRURJVE9SX0NPTVBPTkVOVF9JVCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG1lc3NhZ2VTZXJ2aWNlID0gaW5qZWN0KE1lc3NhZ2VTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlybWF0aW9uU2VydmljZSA9IGluamVjdChDb25maXJtYXRpb25TZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmlld0NvbnRhaW5lciA9IGluamVjdChWaWV3Q29udGFpbmVyLCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGFyYW1ldHJpemUgPSBuZXcgUGFyYW1ldHJpemVQaXBlKCk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5zdGFuY2VzQnVmZmVyTWF4ID0gMTAwO1xuICAgIHByb3RlY3RlZCBsb2dnZXIgPSBpbmplY3QoTG9nZ2VyU2VydmljZSkuY3JlYXRlKCdBY3Rpb25FeGVjdXRvclNlcnZpY2UnKTtcblxuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXQgaW5zdGFuY2VzKCk6IEFjdGlvbkluc3RhbmNlPGFueSwgYW55PltdO1xuXG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgYWN0aW9uIGNvbnRleHQgZm9yIHVzYWdlIGluIHZhbGlkYXRpb24uXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycy5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIuXG4gICAgICovXG4gICAgcHVibGljIHByZXBhcmVBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxJdGVtPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPlxuICAgICk6IEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgY29uc3QgY3R4RGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyID8/IGFjdGlvbi5kYXRhUHJvdmlkZXIgPz8gdGhpcy52aWV3Q29udGFpbmVyPy5kYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiA8QWN0aW9uQ29udGV4dFZhbGlkYXRpb248SXRlbSwgU2VydmljZT4+e1xuICAgICAgICAgICAgZGVzY3JpcHRvcjogYWN0aW9uLFxuICAgICAgICAgICAgcGFyYW1ldGVyczogcGFyYW1ldGVycyxcbiAgICAgICAgICAgIHNlcnZpY2VJbnN0YW5jZTogdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlKHRoaXMuaW5qZWN0b3IsIGN0eERhdGFQcm92aWRlcikgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiBjdHhEYXRhUHJvdmlkZXJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGFjdGlvbiBjb250ZXh0IGJ5IHN1Ym1pdHRpbmcgZXhlY3V0aW9uIHJlc3VsdHMvZXJyb3JzIHRvIGNvbnRleHQsIHdhdGNoaW5nIG92ZXIgaW5zdGFuY2UgcmVzdWx0cy9lcnJvcnMsIGRpc3BsYXlpbmcgbm90aWZpY2F0aW9ucyxcbiAgICAgKiBydW5uaW5nIG5leHQvZXJyb3IgYWN0aW9uIGFuZCB0cmlnZ2VyaW5nIGRpc21pc3Mgb2YgYWN0aW9uLiBDb25maXJtYXRpb24gaXMgYWxzbyBwcm9jZXNzZWQgaGVyZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjdHggQWN0aW9uIGNvbnRleHQgdG8gcnVuLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW48SXRlbSwgU2VydmljZSA9IHVuZGVmaW5lZD4oY3R4OiBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+KSB7XG4gICAgICAgIGNvbnN0IGlzTWFpblJ1bkZuID0gY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3N1Ym1pdCcgfHwgY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3J1bic7XG5cbiAgICAgICAgLy8gaWYgKGN0eC5pbnN0YW5jZS5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0ICYmIGN0eC5pbnN0YW5jZS5hY3Rpb24uaGFzUnVuQ29uZmlybWF0aW9uKSB7XG4gICAgICAgIGlmIChpc01haW5SdW5GbiAmJiBjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bkNvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgLy8gb25seSBkaXJlY3QgYWN0aW9uIGNhbiBiZSBjb25maWd1cmVkIHdpdGggcnVuIGNvbmZpcm1hdGlvblxuICAgICAgICAgICAgLy8gaWYgZWRpdG9yLCB0aGVuIHJ1biBjb25maXJtYXRpb24gaXMgbWFwcGVkIHRvIHN1Ym1pdCBhY3Rpb24gYW5kIGlnbm9yZWQgYXMgZWRpdG9yIHJ1blxuICAgICAgICAgICAgY29uc3QgY29uZmlybWF0aW9uRGVzY3JpcHRvciA9IGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvciBhcyBBY3Rpb25Db25maXJtYXRpb25EZXNjcmlwdG9yPEl0ZW0+O1xuXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LnBhcmFtZXRlcnMuaXRlbTtcbiAgICAgICAgICAgIGxldCBjb25maXJtUGFyYW1zOiBDb25maXJtYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgaWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5pY29uLFxuICAgICAgICAgICAgICAgIGFjY2VwdFZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgYWNjZXB0SWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uaWNvbiA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgYWNjZXB0QnV0dG9uU3R5bGVDbGFzczogY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uc3R5bGVDbGFzcy5idWlsZCgpLFxuICAgICAgICAgICAgICAgIHJlamVjdFZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVqZWN0SWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/Lmljb24gPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHJlamVjdEJ1dHRvblN0eWxlQ2xhc3M6IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5zdHlsZUNsYXNzLmJ1aWxkKCksXG4gICAgICAgICAgICAgICAgY2xvc2VPbkVzY2FwZTogY29uZmlybWF0aW9uRGVzY3JpcHRvci5jbG9zZU9uRXNjYXBlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci50aXRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuaGVhZGVyID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0STE4bkZvckFjdGlvbih0aGlzLnRyYW5zbGF0ZSwgY3R4Lmluc3RhbmNlLmFjdGlvbiwgJ2NvbmZpcm0udGl0bGUnLCBjb25maXJtYXRpb25EZXNjcmlwdG9yLnRpdGxlLCBpdGVtLCAnZ2VuZXJhbC5jb25maXJtYXRpb24nKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLm1lc3NhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLm1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICBnZXRJMThuRm9yQWN0aW9uKHRoaXMudHJhbnNsYXRlLCBjdHguaW5zdGFuY2UuYWN0aW9uLCAnY29uZmlybS5tZXNzYWdlJywgY29uZmlybWF0aW9uRGVzY3JpcHRvci5tZXNzYWdlLCBlc2NhcGVIdG1sQW55KGl0ZW0pLCAnZ2VuZXJhbC5jb25maXJtYXRpb24nKSA/P1xuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEJ1dHRvbi5sYWJlbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0TGFiZWwgPVxuICAgICAgICAgICAgICAgICAgICBnZXRJMThuRm9yQWN0aW9uKHRoaXMudHJhbnNsYXRlLCBjdHguaW5zdGFuY2UuYWN0aW9uLCAnY29uZmlybS5hY2NlcHQnLCBjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEJ1dHRvbi5sYWJlbCwgaXRlbSwgJ2dlbmVyYWwueWVzJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uaWNvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0SWNvbiA9IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IuYWNjZXB0QnV0dG9uLmljb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbj8uaWNvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0SWNvbiA9IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5pY29uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/LmxhYmVsICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5yZWplY3RMYWJlbCA9XG4gICAgICAgICAgICAgICAgICAgIGdldEkxOG5Gb3JBY3Rpb24odGhpcy50cmFuc2xhdGUsIGN0eC5pbnN0YW5jZS5hY3Rpb24sICdjb25maXJtLnJlamVjdCcsIGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5sYWJlbCwgaXRlbSwgJ2dlbmVyYWwubm8nKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbiA9PSBudWxsIHx8IChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbi5sYWJlbCA9PT0gbnVsbCAmJiBjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbi5pY29uID09PSBudWxsKSkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0VmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5Db25maXJtYXRpb25FbmRBY2NlcHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5ydW5XaXRob3V0Q29uZmlybWF0aW9uKGN0eCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5Db25maXJtYXRpb25FbmRSZWplY3Q7XG4gICAgICAgICAgICAgICAgaWYgKGN0eC5pbnN0YW5jZS5hY3Rpb24udHlwZSAhPT0gQWN0aW9uVHlwZUVudW0uRWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIG5vdCBlZGl0b3IsIHRoZSBpdCBjYW4gYmUgY2xvc2VkXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGN0eC5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucnVuQ29uZmlybWF0aW9uQ29uZmlnTWFwRm4pIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zID0gY29uZmlybWF0aW9uRGVzY3JpcHRvci5ydW5Db25maXJtYXRpb25Db25maWdNYXBGbihjdHgsIGNvbmZpcm1QYXJhbXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdHguY29uZmlybWF0aW9uID0gY29uZmlybVBhcmFtcztcbiAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkNvbmZpcm1hdGlvblN0YXJ0O1xuXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShjb25maXJtUGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucnVuV2l0aG91dENvbmZpcm1hdGlvbihjdHgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBhY3Rpb24gY29udGV4dCBieSBzdWJtaXR0aW5nIGV4ZWN1dGlvbiByZXN1bHRzL2Vycm9ycyB0byBjb250ZXh0LCB3YXRjaGluZyBvdmVyIGluc3RhbmNlIHJlc3VsdHMvZXJyb3JzLCBkaXNwbGF5aW5nIG5vdGlmaWNhdGlvbnMsXG4gICAgICogcnVubmluZyBuZXh0L2Vycm9yIGFjdGlvbiBhbmQgdHJpZ2dlcmluZyBkaXNtaXNzIG9mIGFjdGlvbi4gQ29uZmlybWF0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY3R4IEFjdGlvbiBjb250ZXh0IHRvIHJ1bi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFjdGlvbiBjb250ZXh0IGZvciBzdWJtaXQgKD1ydW4pIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgcnVuV2l0aG91dENvbmZpcm1hdGlvbjxJdGVtLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihjdHg6IEFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4pOiBPYnNlcnZhYmxlPEl0ZW0gfCBudWxsIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IGlzTWFpblJ1bkZuID0gY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3N1Ym1pdCcgfHwgY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3J1bic7XG4gICAgICAgIGNvbnN0IGlzRXJyb3JDcml0aWNhbFJ1bkZuID0gY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3J1bic7XG4gICAgICAgIGxldCBhY3Rpb25FZGl0b3I6IEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0+O1xuXG4gICAgICAgIGxldCBmbk9iczogQWN0aW9uUnVuRm5UeXBlPEl0ZW0sIFNlcnZpY2U+O1xuICAgICAgICBzd2l0Y2ggKGN0eC5mdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N1Ym1pdCc6XG4gICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yID0gY3R4Lmluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbkVkaXRvci5zdWJtaXRGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uRWRpdG9yIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yQWRkRGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuT2JzID0gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5DcmVhdGVPckZhaWwuYmluZCh0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb25FZGl0b3IgaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JFZGl0RGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuT2JzID0gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5VcGRhdGVPckZhaWwuYmluZCh0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byBndWVzcyB0aGlzIG9uZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdFN1Ym1pdCA9IG9mKGN0eC5wYXJhbWV0ZXJzPy5pdGVtID8gY3R4LnBhcmFtZXRlcnMuaXRlbSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbk9icyA9IGN0eCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wYXJhbWV0ZXJzLml0ZW1JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5VcGRhdGUoY3R4LCBkZWZhdWx0U3VibWl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5DcmVhdGUoY3R4LCBkZWZhdWx0U3VibWl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm5PYnMgPSBhY3Rpb25FZGl0b3Iuc3VibWl0RnVuY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZmV0Y2gnOlxuICAgICAgICAgICAgICAgIGFjdGlvbkVkaXRvciA9IGN0eC5pbnN0YW5jZS5hY3Rpb24gYXMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbT47XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb25FZGl0b3IuZmV0Y2hGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uRWRpdG9yIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yRWRpdERlc2NyaXB0b3JJbnN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbk9icyA9IHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IucnVuRmV0Y2hPckZhaWwuYmluZCh0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRGZXRjaCA9IG9mKGN0eC5wYXJhbWV0ZXJzPy5pdGVtID8gY3R4LnBhcmFtZXRlcnMuaXRlbSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbk9icyA9IGN0eCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wYXJhbWV0ZXJzLml0ZW1JZCB8fCB0eXBlb2YgY3R4LnBhcmFtZXRlcnMuaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IucnVuRmV0Y2goY3R4LCBkZWZhdWx0RmV0Y2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZldGNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZuT2JzID0gYWN0aW9uRWRpdG9yLmZldGNoRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncnVuJzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKCFjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bkZ1bmN0aW9uICYmIGN0eC5pbnN0YW5jZS5hY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25EZWxldGVEZXNjcmlwdG9ySW5zdCkge1xuICAgICAgICAgICAgICAgICAgICBmbk9icyA9IHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IucnVuRGVsZXRlT3JGYWlsLmJpbmQodGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm5PYnMgPSBjdHguaW5zdGFuY2UuYWN0aW9uLnJ1bkZ1bmN0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJldE9icyA9IG9mKHZvaWQgMCkucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc01haW5SdW5Gbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBtYWluIHJ1biBmdW5jdGlvbiwgYWxzbyBzZXQgbG9hZGluZyB0byB0cnVlXG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1blN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuaXNSdW5Mb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoU3RhcnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGNvbnRleHQgZXhlY3V0aW9uIHRvIG1hcmsgZXhlY3V0aW9uIGxvYWRpbmdcbiAgICAgICAgICAgICAgICBjdHguZXhlY3V0aW9uU3RhcnQoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0b09ic2VydmFibGUoZm5PYnMoY3R4KSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1lcmdlTWFwKHJ1blJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IG5leHQgc3RhdGUgZGVwZW5kaW5nIG9uIHJ1blxuICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IGlzTWFpblJ1bkZuID8gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuRW5kIDogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFbmQ7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGV4ZWN1dGlvbiByZXN1bHRcbiAgICAgICAgICAgICAgICBjdHguZXhlY3V0aW9uTmV4dChydW5SZXN1bHQsIGlzTWFpblJ1bkZuKTtcblxuICAgICAgICAgICAgICAgIGlmIChpc01haW5SdW5Gbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBzZXQgaW5zdGFuY2UgZmluYWwgcmVzdWx0IG9uIG1haW4gcnVuIGV4ZWN1dGlvblxuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UucmVzdWx0ID0gcnVuUmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuaXNSdW5Mb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgbm90aWZpY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5ub3RpZmljYXRpb24gPSBhY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdHgucGFyYW1ldGVycz8uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucnVuUmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBwb3NzaWJsZSBhZnRlciBydW4gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHguaW5zdGFuY2UuYWN0aW9uLmFmdGVyUnVuQWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXJrIG5ldyBzdGF0ZSBmb3IgbmV4dCBhY3Rpb24gc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyUnVuQWN0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY3R4Lmluc3RhbmNlLmFjdGlvbi5hZnRlclJ1bkFjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IGN0eC5pbnN0YW5jZS5hY3Rpb24uYWZ0ZXJSdW5BY3Rpb24oY3R4KSA6IGN0eC5pbnN0YW5jZS5hY3Rpb24uYWZ0ZXJSdW5BY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0QWN0aW9uSW5zdGFuY2UgPSB0aGlzLmFjdGl2YXRlQWN0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyUnVuQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBY3Rpb25QYXJhbWV0ZXJzPHVua25vd24+PntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUlkOiBjdHgucGFyYW1ldGVycy5pdGVtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IHJ1blJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRGF0YTogY3R4LnBhcmFtZXRlcnMuYWN0aW9uRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGU6IGN0eC5wYXJhbWV0ZXJzLnJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VDb21wb25lbnQ6IGN0eC5wYXJhbWV0ZXJzLnNvdXJjZUNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZSBhcyBBY3Rpb25JbnN0YW5jZTx1bmtub3duLCB1bmtub3duPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLm5leHRBY3Rpb25JbnN0YW5jZSA9IG5leHRBY3Rpb25JbnN0YW5jZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uTmV4dEFjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5pc2ggY3VycmVudCBhY3Rpb24gd2hlbiBuZXh0IGFjdGlvbiBmaW5pc2hlc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRBY3Rpb25JbnN0YW5jZS5zdGF0ZSQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgobmV4dEFjdGlvbkluc3RhbmNlLnN0YXRlKSwgLy8gcHJvdmlkZSBmaXJzdCBzdGF0ZSBjYXVzZSBpdCBtaWdodCBiZSBmaW5pc2hlZCBhbHJlYWR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHN0YXRlID0+IHN0YXRlID49IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5OZXh0QWN0aW9uRW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVuUmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbkVkaXRvci5oYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbk5vdGlmaWNhdGlvblN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmZXRjaCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25FZGl0b3IuZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yLmZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnBhcmFtZXRlcnMuaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBvZihydW5SZXN1bHQpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAocnVuUmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVhY3RpdmF0ZSBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oY3R4Lmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1blJlc3VsdDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybSBlcnJvciB0byBhY3Rpb24gZXJyb3JcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25FcnJvciA9IHRoaXMudG9BY3Rpb25FcnJvcihlcnIsIGN0eCk7XG5cbiAgICAgICAgICAgICAgICAvLyBzZXQgaW5zdGFuY2Ugc3RhdGUgdG8gZXJyb3JcbiAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBpc01haW5SdW5GbiA/IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkVycm9yIDogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFcnJvcjtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGV4ZWN1dGlvbiBlcnJvciBvbiBjb250ZXh0XG4gICAgICAgICAgICAgICAgY3R4LmV4ZWN1dGlvbkVycm9yKGFjdGlvbkVycm9yKTtcblxuICAgICAgICAgICAgICAgIGlmIChjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCBjdHguaW5zdGFuY2UuYWN0aW9uLCBhY3Rpb25FcnJvciwgJ2ZldGNoJywgdGhpcy5tZXNzYWdlU2VydmljZSwgY3R4LnBhcmFtZXRlcnMuaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yT2JzID0gb2Yodm9pZCAwKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuaXNSdW5Mb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgcG9zc2libGUgZXJyb3IgYWN0aW9uIGlmIHJ1blxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4gJiYgY3R4Lmluc3RhbmNlLmFjdGlvbi5vblJ1bkVycm9yQWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvblJ1bkVycm9yQWN0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY3R4Lmluc3RhbmNlLmFjdGlvbi5vblJ1bkVycm9yQWN0aW9uID09PSAnZnVuY3Rpb24nID8gY3R4Lmluc3RhbmNlLmFjdGlvbi5vblJ1bkVycm9yQWN0aW9uKGN0eCkgOiBjdHguaW5zdGFuY2UuYWN0aW9uLm9uUnVuRXJyb3JBY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW5ub3Qgc3RhcnQgd2l0aCB0cmlnZ2VyLCBiZWNhdXNlIHJvdXRpbmcgbWlnaHQgYmUgcHJvYmxlbWF0aWMgKGxvdXNpbmcgcHJldmlvdXMgcmVzdWx0cyBldGMuKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JBY3Rpb25JbnN0YW5jZSA9IHRoaXMuYWN0aXZhdGVBY3Rpb248SXRlbSwgU2VydmljZT4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25SdW5FcnJvckFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWN0aW9uUGFyYW1ldGVyczxJdGVtPj57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JZDogY3R4LnBhcmFtZXRlcnMuaXRlbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtOiBjdHgucGFyYW1ldGVycy5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25EYXRhOiBjdHgucGFyYW1ldGVycy5hY3Rpb25EYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZTogY3R4LnBhcmFtZXRlcnMucm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUNvbXBvbmVudDogY3R4LnBhcmFtZXRlcnMuc291cmNlQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuZXJyb3JBY3Rpb25JbnN0YW5jZSA9IGVycm9yQWN0aW9uSW5zdGFuY2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkVycm9yQWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yT2JzID0gZXJyb3JBY3Rpb25JbnN0YW5jZS5zdGF0ZSQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoZXJyb3JBY3Rpb25JbnN0YW5jZS5zdGF0ZSksIC8vIHByb3ZpZGUgZmlyc3Qgc3RhdGUgY2F1c2UgaXQgbWlnaHQgYmUgZmluaXNoZWQgYWxyZWFkeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzdGF0ZSA9PiBzdGF0ZSA+PSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzRmluYWwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRXJyb3JBY3Rpb25FbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBsaXN0IGFuZCBtYXAgb25seSB0byBtYXJrIGluc3RhbmNlIHN0YXRlIGFzIGZpbmlzaGVkIGVycm9yIHN0YXRlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yT2JzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWFjdGl2YXRlIGFjdGlvbiBvbmx5IGlmIGNyaXRpY2FsIChmZXRjaCBvbiBlZGl0b3Igb3IgcnVuIG9uIGJ1dHRvbiBhY3Rpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRXJyb3JDcml0aWNhbFJ1bkZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oY3R4Lmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldGhyb3cgZXJyb3IgdG8gcHJvcGFnYXRlIGZ1cnRoZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGFjdGlvbkVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGN0eC5ydW5TdWJzY3JpcHRpb24gPSByZXRPYnMuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEFjdGlvbkNvbnRleHQgJHtjdHguY29udGV4dExvbmdOYW1lfSBleGVjdXRpb24gbmV4dCBldmVudGAsIHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKChlcnIgYXMgSUNvbW1vbnNFcnJvciB8IHVuZGVmaW5lZCk/LnR5cGUgIT09ICdDb21tb25zQWN0aW9uRXJyb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBOb24gYWN0aW9uIGVycm9yIG9jY3VycmVkYCwgZXJyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQWN0aW9uIGNvbnRleHQgJHtjdHguY29udGV4dExvbmdOYW1lfSBleGVjdXRpb24gZXJyb3IgZXZlbnRgLCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJldE9icztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlcyBlZGl0b3IgYWN0aW9uJ3MgZmV0Y2ggZnVuY3Rpb24gYnkgY3JlYXRpbmcgbmV3IGFjdGlvbiBjb250ZXh0IGZvciBhY3Rpb24gaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRWRpdG9yIGRhdGEgcHJvdmlkZXIgZm9yIGNvbnRleHQuXG4gICAgICogQHBhcmFtIGluc3RhbmNlIE9wdGlvbmFsIGV4aXN0aW5nIGFjdGlvbiBpbnN0YW5jZSAoaWYgbm9uIHByb3ZpZGVkLCBuZXcgd2lsbCBiZSBjcmVhdGVkKS5cbiAgICAgKiBAcGFyYW0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZSBPcHRpb25hbCBwcmV2aW91cyBhY3Rpb24gaW5zdGFuY2UgdG8gbGluayBpbiBuZXh0IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQWN0aW9uIGNvbnRleHQgZm9yIGZldGNoIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBwcmVwYXJlQ29udGV4dEZvckVkaXRvckZldGNoPEl0ZW0sIFNlcnZpY2U+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+LFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogSUFjdGlvbkluc3RhbmNlPGFueSwgYW55PlxuICAgICk6IEFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4ge1xuICAgICAgICBpbnN0YW5jZSA9IHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShpbnN0YW5jZSwgYWN0aW9uLCBwYXJhbWV0ZXJzLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZUNvbnRleHRGb3JFZGl0b3IoaW5zdGFuY2UsIHBhcmFtZXRlcnMsICdmZXRjaCcsIGRhdGFQcm92aWRlciwgcHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBlZGl0b3IgYWN0aW9uJ3Mgc3VibWl0ICg9bWFpbiBydW4pIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIG5ldyBhY3Rpb24gY29udGV4dCBmb3IgYWN0aW9uIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIEVkaXRvciBkYXRhIHByb3ZpZGVyIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBPcHRpb25hbCBleGlzdGluZyBhY3Rpb24gaW5zdGFuY2UgKGlmIG5vbiBwcm92aWRlZCwgbmV3IHdpbGwgYmUgY3JlYXRlZCkuXG4gICAgICogQHBhcmFtIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UgT3B0aW9uYWwgcHJldmlvdXMgYWN0aW9uIGluc3RhbmNlIHRvIGxpbmsgaW4gbmV4dCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFjdGlvbiBjb250ZXh0IGZvciBzdWJtaXQgKD1ydW4pIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBwcmVwYXJlQ29udGV4dEZvckVkaXRvclN1Ym1pdDxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IElBY3Rpb25JbnN0YW5jZTxhbnksIGFueT5cbiAgICApOiBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2UoaW5zdGFuY2UsIGFjdGlvbiwgcGFyYW1ldGVycywgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvbkVuZCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXBhcmVDb250ZXh0Rm9yRWRpdG9yKGluc3RhbmNlLCBwYXJhbWV0ZXJzLCAnc3VibWl0JywgZGF0YVByb3ZpZGVyLCBwcmV2aW91c0FjdGlvbkluc3RhbmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlcyBhY3Rpb24gZXhlYyBjb250ZXh0IGZvciBhY3Rpb24gb2YgdHlwZSBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgQWN0aW9uIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgQWN0aW9uIGZ1bmN0aW9uIG5hbWUgcGFyYW1ldGVyLlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgT3B0aW9uYWwgZGF0YSBwcm92aWRlci4gSWYgbm90IHByb3ZpZGVkIGRhdGEgcHJvdmlkZXIgZnJvbSBlaXRoZXIgdGhlIGFjdGlvbiBlZGl0b3Igb3IgdmlldyBjb250YWluZXIgd2lsbCBiZSB1c2VkLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcmVwYXJlQ29udGV4dEZvckVkaXRvcjxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgaW5zdGFuY2U6IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+LFxuICAgICAgICBmdW5jdGlvbk5hbWU6ICdzdWJtaXQnIHwgJ2ZldGNoJyxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IElBY3Rpb25JbnN0YW5jZTxhbnksIGFueT5cbiAgICApOiBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi50eXBlICE9PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgQ2Fubm90IGNyZWF0ZSBlZGl0b3IgY29udGV4dCBmb3IgYWN0aW9uICR7aW5zdGFuY2UuYWN0aW9uLmFjdGlvbk5hbWVMb25nfSBvZiB0eXBlICR7aW5zdGFuY2UuYWN0aW9uLnR5cGV9LmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVkaXRvckFjdGlvbiA9IGluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPjtcbiAgICAgICAgbGV0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgaWYgKCFjdHhEYXRhUHJvdmlkZXIgJiYgZWRpdG9yQWN0aW9uLmRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyID0gZWRpdG9yQWN0aW9uLmRhdGFQcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN0eERhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3Qgdmlld0NvbnRhaW5lckRhdGFQcm92aWRlciA9IHRoaXMudmlld0NvbnRhaW5lcj8uZGF0YVByb3ZpZGVyO1xuICAgICAgICAgICAgaWYgKHZpZXdDb250YWluZXJEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIgPSB2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN0eCA9IG5ldyBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+KFxuICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IuZ2V0RGF0YVByb3ZpZGVyU2VydmljZSh0aGlzLmluamVjdG9yLCBjdHhEYXRhUHJvdmlkZXIpID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGN0eERhdGFQcm92aWRlcixcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lciA/PyB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgICAgY3R4LnByZXZpb3VzQWN0aW9uSW5zdGFuY2UgPSBwcmV2aW91c0FjdGlvbkluc3RhbmNlO1xuICAgICAgICBpbnN0YW5jZS5uZXdDb250ZXh0KGN0eCk7XG4gICAgICAgIHJldHVybiBjdHg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBhY3Rpb24ncyBtYWluIHJ1biBmdW5jdGlvbiBieSBjcmVhdGluZyBuZXcgYWN0aW9uIGNvbnRleHQgZm9yIGFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGNvbnRleHQgcnVuLlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRGF0YSBwcm92aWRlciBmb3IgY29udGV4dCBydW4uXG4gICAgICogQHBhcmFtIGluc3RhbmNlIE9wdGlvbmFsIGV4aXN0aW5nIGFjdGlvbiBpbnN0YW5jZSAoaWYgbm9uIHByb3ZpZGVkLCBuZXcgd2lsbCBiZSBjcmVhdGVkKS5cbiAgICAgKiBAcGFyYW0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZSBPcHRpb25hbCBwcmV2aW91cyBhY3Rpb24gaW5zdGFuY2UgdG8gbGluayBpbiBuZXh0IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQWN0aW9uIGNvbnRleHQgZm9yIHJ1biBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHByZXBhcmVDb250ZXh0PEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+LFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8YW55LCBhbnk+XG4gICAgKTogQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+KGluc3RhbmNlLCBhY3Rpb24sIHBhcmFtZXRlcnMsIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmQpO1xuXG4gICAgICAgIGNvbnN0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlciA/PyBpbnN0YW5jZS5hY3Rpb24uZGF0YVByb3ZpZGVyID8/IHRoaXMudmlld0NvbnRhaW5lcj8uZGF0YVByb3ZpZGVyO1xuICAgICAgICBsZXQgc2VydmljZTogU2VydmljZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGN0eERhdGFQcm92aWRlciAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXJTZXJ2aWNlID0gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlPEl0ZW0sIFNlcnZpY2U+KHRoaXMuaW5qZWN0b3IsIGN0eERhdGFQcm92aWRlcik7XG4gICAgICAgICAgICBpZiAoIWRhdGFQcm92aWRlclNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VydmljZSA9IGRhdGFQcm92aWRlclNlcnZpY2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3R4ID0gbmV3IEFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4odGhpcy5pbmplY3RvciwgaW5zdGFuY2UsIHBhcmFtZXRlcnMsICdydW4nLCBzZXJ2aWNlIGFzIFNlcnZpY2UsIGN0eERhdGFQcm92aWRlciwgdGhpcy52aWV3Q29udGFpbmVyID8/IHVuZGVmaW5lZCk7XG4gICAgICAgIGN0eC5wcmV2aW91c0FjdGlvbkluc3RhbmNlID0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZTtcbiAgICAgICAgaW5zdGFuY2UubmV3Q29udGV4dChjdHgpO1xuXG4gICAgICAgIHJldHVybiBjdHg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWN0aXZhdGVzIGFjdGlvbiAoaW4gY2FzZSBvZiBkaWFsb2csIGRpYWxvZyB3aWxsIGJlIG9wZW5lZCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBhY3RpdmF0aW9uIG9mIGFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgT3B0aW9uYWwgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlIChpZiBub24gcHJvdmlkZWQsIG5ldyB3aWxsIGJlIGNyZWF0ZWQpLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHJ1bkNvbnRleHQgTWFya3MgaWYgY29udGV4dCBzaG91bGQgYmUgcnVuLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQWN0aW9uIGluc3RhbmNlIC0gaWYgbm9uIHByb3ZpZGVkIGluIHBhcmFtZXRlcnMsIHRoZSBuZXdseSBjcmVhdGVkIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAgICovXG4gICAgcHVibGljIGFjdGl2YXRlQWN0aW9uPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8YW55LCBhbnk+LFxuICAgICAgICBydW5Db250ZXh0ID0gZmFsc2VcbiAgICApOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+KGluc3RhbmNlLCBhY3Rpb24sIHBhcmFtZXRlcnMsIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25TdGFydCk7XG4gICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvblN0YXJ0O1xuICAgICAgICBpbnN0YW5jZS5hY3RpdmF0aW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG4gICAgICAgIC8vIHN0YXJ0IGFjdGl2YXRpb24gaW5zdGFuY2VcbiAgICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIGxldCBkaWFsb2dDb21wb25lbnQgPSB0aGlzLmRlZmF1bHRFZGl0b3JEaWFsb2dDb21wb25lbnQ7XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dDbGFzc05hbWVzID0gWydtbmctZGlhbG9nJ107XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dDb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgZHVwbGljYXRlOiB0cnVlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoYWN0aW9uIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDbGFzc05hbWVzLnB1c2goYWN0aW9uLmRpYWxvZ0NsYXNzTmFtZSA/PyAnbW5nLWFjdGlvbi1lZGl0b3ItZGlhbG9nJyk7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChhY3Rpb24uZGlhbG9nU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFN0eWxlU2l6ZUVudW0uRXh0cmFTbWFsbDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NsYXNzTmFtZXMucHVzaCgnbW5nLWRpYWxvZy14cycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3R5bGVTaXplRW51bS5TbWFsbDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NsYXNzTmFtZXMucHVzaCgnbW5nLWRpYWxvZy1zbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3R5bGVTaXplRW51bS5MYXJnZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NsYXNzTmFtZXMucHVzaCgnbW5nLWRpYWxvZy1sZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3R5bGVTaXplRW51bS5FeHRyYUxhcmdlOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lcy5wdXNoKCdtbmctZGlhbG9nLXhsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTdHlsZVNpemVFbnVtLk5vcm1hbDpcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmVkaXRvckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQgPSBhY3Rpb24uZWRpdG9yQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuZGF0YSA9IDxBY3Rpb25FZGl0b3JEaWFsb2dEYXRhPEl0ZW0sIFNlcnZpY2U+PntcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yOiBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0luc3RhbmNlOiBwcmV2aW91c0FjdGlvbkluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGluamVjdG9yOiB0aGlzLmluamVjdG9yXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLnN0eWxlQ2xhc3MgPSBkaWFsb2dDbGFzc05hbWVzLmpvaW4oJyAnKTtcblxuICAgICAgICAgICAgaWYgKGFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuY2xvc2FibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuY2xvc2VPbkVzY2FwZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihkaWFsb2dDb21wb25lbnQsIGRpYWxvZ0NvbmZpZyk7XG4gICAgICAgICAgICBkaWFsb2dSZWYub25DbG9zZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gdG8gY2xvc2UgZGlhbG9nIG9uICdYJyBjbGljayBvciBlc2MgYnV0dG9uXG4gICAgICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oaW5zdGFuY2UhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW5zdGFuY2UuYWN0aXZhdGlvbkRpYWxvZ1JlZiA9IGRpYWxvZ1JlZjtcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRpcmVjdGx5IGV4ZWN1dGUgYWN0aW9uXG4gICAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmQ7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wcmVwYXJlQ29udGV4dDxJdGVtLCBTZXJ2aWNlPihhY3Rpb24sIHBhcmFtZXRlcnMsIHVuZGVmaW5lZCwgaW5zdGFuY2UsIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UpO1xuXG4gICAgICAgICAgICBpZiAocnVuQ29udGV4dCkge1xuICAgICAgICAgICAgICAgIHRoaXMucnVuKGNvbnRleHQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5pbnN0YW5jZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvIGJlIGNhbGxlZCB3aGVuIGFjdGlvbiBlZGl0b3IgaXMgaW5pdGlhbGl6ZWQgdG8gY29ycmVjdGx5IGFjdGl2YXRlIGFjdGlvbi5cbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UgKGlmIGF2YWlsYWJsZSkuXG4gICAgICogQHBhcmFtIGNvbXBvbmVudFJlZiBPcHRpb25hbCBhY3Rpb24gZWRpdG9yIGNvbXBvbmVudCByZWZlcmVuY2UuXG4gICAgICovXG4gICAgcHVibGljIG9uQWN0aW9uRWRpdG9ySW5pdDxULCBTPihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PFQ+LCBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+LCBjb21wb25lbnRSZWY/OiBJQWN0aW9uRWRpdG9yQ29tcG9uZW50KTogQWN0aW9uSW5zdGFuY2U8VCwgUz4ge1xuICAgICAgICBpZiAoYWN0aW9uLnR5cGUgIT09IEFjdGlvblR5cGVFbnVtLkVkaXRvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBY3Rpb24gJHthY3Rpb24uYWN0aW9uTmFtZX0gaXMgbm90IG9mIHR5cGUgZWRpdG9yLCBjYW5ub3QgYmUgYWN0aXZhdGVkIHRocm91Z2ggXCJvbkFjdGlvbkVkaXRvck9uSW5pdFwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluc3RhbmNlICYmIGFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyaWdnZXJlZEluc3RhbmNlID0gdGhpcy52aWV3Q29udGFpbmVyPy5yb3V0ZVRyaWdnZXJlZEFjdGlvbkluc3RhbmNlO1xuICAgICAgICAgICAgaWYgKHRyaWdnZXJlZEluc3RhbmNlICYmIHRyaWdnZXJlZEluc3RhbmNlLmluc3RhbmNlTG9uZ05hbWUgIT09IGluc3RhbmNlLmluc3RhbmNlTG9uZ05hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgICAgICAgICAgYFdBUk5JTkc6IEZvdW5kIHRyaWdnZXJlZCBwYXJhbWV0ZXJzIHZpZXcgY29udGFpbmVyIGluc3RhbmNlICR7dHJpZ2dlcmVkSW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX0gYW5kIGl0IGRvZXMgbm90IG1hdGNoIGluc3RhbmNlICR7aW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX0gcmV0cmlldmVkIG9uIGVkaXRvciBpbml0LmBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlLCBhY3Rpb24sIHVuZGVmaW5lZCwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvblN0YXJ0KTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kO1xuICAgICAgICBpbnN0YW5jZS5hY3RpdmF0aW9uRWRpdG9yQ29tcG9uZW50UmVmID0gY29tcG9uZW50UmVmO1xuXG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUbyBiZSBjYWxsZWQgd2hlbiBhY3Rpb24gZWRpdG9yIGNtcCBpcyBiZWluZyBkZXN0cm95ZWQgdG8gY29ycmVjdGx5IGZpbmlzaCBhY3Rpb24uXG4gICAgICogQHBhcmFtIGluc3RhbmNlIEFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25BY3Rpb25EZXN0cm95PFQsIFM+KGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciAhPT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uQ2xpY2spIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbmlzaEFjdGlvbihpbnN0YW5jZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG8gYmUgY2FsbGVkIHdoZW4gYWN0aW9uIGVkaXRvciBjbXAgaXMgYmVpbmcgZGVzdHJveWVkIHRvIGNvcnJlY3RseSBmaW5pc2ggYWN0aW9uLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIG9uQWN0aW9uRWRpdG9yRGVzdHJveTxULCBTPihpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+KTogdm9pZCB7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpbnN0YW5jZSA9IHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShpbnN0YW5jZSk7XG4gICAgICAgIGlmIChpbnN0YW5jZS5hY3Rpb24udHlwZSAhPT0gQWN0aW9uVHlwZUVudW0uRWRpdG9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFjdGlvbiBpbnN0YW5jZSAke2luc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9IGlzIG5vdCBvZiB0eXBlIGVkaXRvciwgY2Fubm90IGJlIGRlYWN0aXZhdGVkIHRocm91Z2ggXCJvbkFjdGlvbkVkaXRvck9uRGVzdHJveVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciAhPT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGluc3RhbmNlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvIGJlIGNhbGxlZCB3aGVuIGFjdGlvbiByb3V0ZSBjbXAgaXMgYmVpbmcgZGVzdHJveWVkIHRvIGNvcnJlY3RseSBmaW5pc2ggYWN0aW9uLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIG9uQWN0aW9uUm91dGVEZXN0cm95PFQsIFM+KGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciAhPT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQWN0aW9uIGluc3RhbmNlICR7aW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX0gaXMgbm90IHRyaWdnZXJlZCBvbiByb3V0ZSwgY2Fubm90IGJlIGRlYWN0aXZhdGVkIHRocm91Z2ggXCJvbkFjdGlvblJvdXRlT25EZXN0cm95XCJgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbmlzaEFjdGlvbihpbnN0YW5jZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVhY3RpdmF0ZXMgYWN0aW9uIGJ5IGNob29zaW5nIGZpbmFsIHN0YXRlLCBjbG9zaW5nIGRpYWxvZyBhbmQgY29tcGxldGluZyBhbGwgc3ViamVjdHMgaW4gaW5zdGFuY2UgYW5kIGNvbnRleHRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluc3RhbmNlIEFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gb25EZXN0cm95IE1hcmtzIGlmIGZpbmlzaCBpcyBjYWxsZWQgb24gY29tcG9uZW50IGRlc3Ryb3kgbGlmZWN5Y2xlIGhvb2suXG4gICAgICovXG4gICAgcHVibGljIGZpbmlzaEFjdGlvbjxJdGVtLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihpbnN0YW5jZTogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4sIG9uRGVzdHJveSA9IGZhbHNlKSB7XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlID49IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbCkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYEFjdGlvbkluc3RhbmNlICR7aW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX0gYWxyZWFkeSBmaW5pc2hlZGApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZpbmFsU3RhdGU6IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtO1xuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLnJlc3VsdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGZpbmFsU3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzRmluYWw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLmVycm9yICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZmluYWxTdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaEVycm9yRmluYWw7XG4gICAgICAgIH0gZWxzZSBpZiAob25EZXN0cm95KSB7XG4gICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoQ29tcG9uZW50RGVzdHJveUZpbmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmluYWxTdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaERpc21pc3NlZEZpbmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0RpYWxvZyA9IHR5cGVvZiBpbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VibWl0RW5hYmxlZCA9IChpbnN0YW5jZS5hY3Rpb24gYXMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbT4pLnJlc3VibWl0RW5hYmxlZDtcblxuICAgICAgICAgICAgaWYgKGZpbmFsU3RhdGUgPT09IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbCkge1xuICAgICAgICAgICAgICAgIGlmICgoaGFzRGlhbG9nICYmIHJlc3VibWl0RW5hYmxlZCA9PT0gdHJ1ZSkgfHwgKCFoYXNEaWFsb2cgJiYgcmVzdWJtaXRFbmFibGVkICE9PSBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmluYWxTdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzRGlhbG9nICYmIGZpbmFsU3RhdGUgIT09IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWwpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBzdGF0ZSBpcyBmaW5pc2ggYW5kIG5vdCBjYWxsZWQgZnJvbSBkaWFsb2cgbGlzdGVuZXIsIGNsb3NlIHRoZSBkaWFsb2cgZmlyc3Qgd2hpY2ggd2lsbCByZXRyaWdnZXIgdGhpcyBmdW5jdGlvbiwgdGhlbiBmaW5pc2ggaXRcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmIS5jbG9zZShpbnN0YW5jZS5yZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdW5zZXQgaW5zdGFuY2UgaW4gdmlldyBjb250YWluZXJcbiAgICAgICAgaWYgKHRoaXMudmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLnJvdXRlVHJpZ2dlcmVkQWN0aW9uSW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgZmluYWwgc3RhdGUgb24gaW5zdGFuY2VcbiAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBmaW5hbFN0YXRlO1xuXG4gICAgICAgIGlmIChmaW5hbFN0YXRlID09PSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzUmVhY3RpdmF0ZUZpbmFsKSB7XG4gICAgICAgICAgICAvLyBwcmVwYXJlIHJlYWN0aXZhdGlvbiBpbnN0YW5jZVxuICAgICAgICAgICAgY29uc3QgbmV3SW5zdGFuY2VTdGF0dXMgPSAoaW5zdGFuY2UuYWN0aW9uIGFzIEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0+KS5yZXN1Ym1pdFJlZmV0Y2hcbiAgICAgICAgICAgICAgICA/IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmRcbiAgICAgICAgICAgICAgICA6IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoRW5kO1xuICAgICAgICAgICAgLy8gbXVzdCBza2lwIGluaXRpYWxpemF0aW9uIGZyb20gdmlldyBjb250YWluZXIsIGJlY2F1c2UgaXQgd291bGQgb25seSBnZXQgb2xkIGluc3RhbmNlLlxuICAgICAgICAgICAgLy8gd2UgbmVlZCBuZXcgaW5zdGFuY2UgYmVmb3JlIHdlIGNhbiBzZXQgbmV3IG9uZSBvbiB0aGUgdmlldyBjb250YWluZXIuXG4gICAgICAgICAgICBjb25zdCBuZXdJbnN0YW5jZSA9IHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPih1bmRlZmluZWQsIGluc3RhbmNlLmFjdGlvbiwgdW5kZWZpbmVkLCBuZXdJbnN0YW5jZVN0YXR1cywgdHJ1ZSk7XG4gICAgICAgICAgICBuZXdJbnN0YW5jZS5yZWFjdGl2YXRpb25QcmV2aW91c0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICAvLyBjb3B5IHNvbWUgYWRkaXRpb25hbCBzZXR0aW5nc1xuICAgICAgICAgICAgbmV3SW5zdGFuY2UuYWN0aXZhdGlvbkRpYWxvZ1JlZiA9IGluc3RhbmNlLmFjdGl2YXRpb25EaWFsb2dSZWY7XG4gICAgICAgICAgICBuZXdJbnN0YW5jZS50cmlnZ2VyUGFyYW1ldGVycyA9IGluc3RhbmNlLnRyaWdnZXJQYXJhbWV0ZXJzO1xuICAgICAgICAgICAgbmV3SW5zdGFuY2UuYWN0aXZhdGlvblBhcmFtZXRlcnMgPSBpbnN0YW5jZS5hY3RpdmF0aW9uUGFyYW1ldGVycztcblxuICAgICAgICAgICAgaWYgKHRoaXMudmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lci5yb3V0ZVRyaWdnZXJlZEFjdGlvbkluc3RhbmNlID0gbmV3SW5zdGFuY2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGluc3RhbmNlLnJlYWN0aXZhdGlvbkluc3RhbmNlID0gbmV3SW5zdGFuY2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmaW5pc2ggcmVsYXRlZCBhY3Rpb25zXG4gICAgICAgIGlmIChpbnN0YW5jZS5uZXh0QWN0aW9uSW5zdGFuY2UgJiYgaW5zdGFuY2UubmV4dEFjdGlvbkluc3RhbmNlIGluc3RhbmNlb2YgQWN0aW9uSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBGaW5pc2hpbmcgaW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSByZWxhdGVkIG5leHQgYWN0aW9uIGluc3RhbmNlOiAke2luc3RhbmNlLm5leHRBY3Rpb25JbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfWApO1xuICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oaW5zdGFuY2UubmV4dEFjdGlvbkluc3RhbmNlLCBvbkRlc3Ryb3kpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnN0YW5jZS5lcnJvckFjdGlvbkluc3RhbmNlICYmIGluc3RhbmNlLmVycm9yQWN0aW9uSW5zdGFuY2UgaW5zdGFuY2VvZiBBY3Rpb25JbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEZpbmlzaGluZyBpbnN0YW5jZSAke2luc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9IHJlbGF0ZWQgZXJyb3IgYWN0aW9uIGluc3RhbmNlOiAke2luc3RhbmNlLmVycm9yQWN0aW9uSW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX1gKTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGluc3RhbmNlLmVycm9yQWN0aW9uSW5zdGFuY2UsIG9uRGVzdHJveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhY3Rpb24gd2l0aCBwYXJhbWV0ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgYWN0aW9uIGV4ZWN1dGlvbiB0byBjb25zdHJ1Y3QgbmV3IHJvdXRlLlxuICAgICAqIEBwYXJhbSBydW5Db250ZXh0IE1hcmtzIGlmIGNvbnRleHQgc2hvdWxkIGJlIHJ1bi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFjdGlvbiBpbnN0YW5jZSAtIGlmIG5vbiBwcm92aWRlZCBpbiBwYXJhbWV0ZXJzLCB0aGUgbmV3bHkgY3JlYXRlZCB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyB0cmlnZ2VyQWN0aW9uPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8SXRlbT4sIHBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4sIHJ1bkNvbnRleHQgPSBmYWxzZSk6IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2U8SXRlbSwgU2VydmljZT4odW5kZWZpbmVkLCBhY3Rpb24sIHBhcmFtZXRlcnMpO1xuICAgICAgICBpbnN0YW5jZS50cmlnZ2VyUGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG4gICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uVHJpZ2dlclN0YXJ0O1xuICAgICAgICBpZiAoYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyID09PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgY29uc3QgYmFzZVVybCA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgnPycpWzBdO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsOiBVcmxUcmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yb3V0ZXIudXJsKTtcbiAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBhY3Rpb24ucm91dGVVcmwgPz8gJyc7XG4gICAgICAgICAgICBpZiAoYWN0aW9uVXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvblVybCA9IGFjdGlvblVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdGlvblVybFNlZ21lbnRzID0gdGhpcy5wYXJhbWV0cml6ZS50cmFuc2Zvcm0oYWN0aW9uVXJsLCBwYXJhbWV0ZXJzLml0ZW1JZCwgcGFyYW1ldGVycy5pdGVtLCBwYXJhbWV0ZXJzLmFjdGlvbkRhdGEpLnNwbGl0KCcvJyk7XG5cbiAgICAgICAgICAgIC8vIHNldCBpbnN0YW5jZSBpbiB2aWV3IGNvbnRhaW5lclxuICAgICAgICAgICAgaWYgKHRoaXMudmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lci5yb3V0ZVRyaWdnZXJlZEFjdGlvbkluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZyb20odGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Jhc2VVcmwsIC4uLmFjdGlvblVybFNlZ21lbnRzXSwge3JlbGF0aXZlVG86IHBhcmFtZXRlcnMucm91dGUsIHF1ZXJ5UGFyYW1zOiBwYXJzZWRVcmwucXVlcnlQYXJhbXN9KSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gKGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uVHJpZ2dlckVuZCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlRyaWdnZXJFbmQ7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlQWN0aW9uKGFjdGlvbiwgcGFyYW1ldGVycywgaW5zdGFuY2UpO1xuXG4gICAgICAgICAgICBpZiAocnVuQ29udGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucnVuKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVhY3RpdmF0ZXMgb24gcm91dGUgdHJpZ2dlcmVkIGFjdGlvbiBieSB0cnlpbmcgdG8gcmVyb3V0ZSBiYWNrIHRvIGxvY2F0aW9uIHdoZXJlIGFjdGlvbiB3YXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGZpbmlzaEFjdGlvblJvdXRlVW50cmlnZ2VyPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPikge1xuICAgICAgICBpZiAoaW5zdGFuY2UuYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyICE9PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2U8SXRlbSwgU2VydmljZT4oaW5zdGFuY2UpO1xuXG4gICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoUm91dGVVbnRyaWdnZXJTdGFydDtcblxuICAgICAgICBsZXQgdXJsID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRDdXJyZW50TG9jYXRpb25Gcm9tSGlzdG9yeSgpID8/IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0Q3VycmVudExvY2F0aW9uRnJvbVVybCgpO1xuICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5iYWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNwbGl0VXJsUXVlcnlQYXJhbSA9IHVybC5zcGxpdCgnPycpO1xuICAgICAgICAgICAgY29uc3QgdXJsUGF0aFNlZ21lbnRzID0gc3BsaXRVcmxRdWVyeVBhcmFtWzBdLnNwbGl0KCcjJylbMF0uc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW0gPSBzcGxpdFVybFF1ZXJ5UGFyYW1bMV0/LnNwbGl0KCcjJylbMF07XG5cbiAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBpbnN0YW5jZS5hY3Rpb24/LnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgaWYgKGFjdGlvblVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25VcmwgPSBhY3Rpb25Vcmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWN0aW9uVXJsU2VnbWVudHMgPSBhY3Rpb25Vcmwuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGxldCByZWRpcmVjdFVybCA9ICcvJyArIHVybFBhdGhTZWdtZW50cy5zbGljZSgwLCB1cmxQYXRoU2VnbWVudHMubGVuZ3RoIC0gYWN0aW9uVXJsU2VnbWVudHMubGVuZ3RoKS5qb2luKCcvJyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHF1ZXJ5UGFyYW0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVcmwgPSBgJHtyZWRpcmVjdFVybH0/JHtxdWVyeVBhcmFtfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vIFVSTCByZXBsYWNlcywgcHJvYmFibHkgb2ssIHRvIGFsbG93IGdvaW5nIGJhY2tcbiAgICAgICAgICAgIGZyb20odGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChyZWRpcmVjdFVybCkpXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSwgdGltZW91dCgxMDAwKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogKCkgPT4gKGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoUm91dGVVbnRyaWdnZXJFbmRGaW5hbCksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiAoaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hSb3V0ZVVudHJpZ2dlclRpbWVvdXRGaW5hbClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybSBlcnJvciBvZiBhbnkgdHlwZSB0byBlcnJvciBieSB1c2luZyBlcnJvciBtYXBwZXIgdGhhdCBjb3VsZCBiZSBwcm92aWRlZCBieSBmaW5hbCBwcm9qZWN0LlxuICAgICAqIEBwYXJhbSBlcnJvciBlcnJvciBvZiBhbnkgdHlwZS5cbiAgICAgKiBAcGFyYW0gY29udGV4dCBBY3Rpb24gY29udGV4dC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIG1hcHBlZCBJQ29tbW9uc0Vycm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b0FjdGlvbkVycm9yKGVycm9yPzogYW55LCBjb250ZXh0PzogQWN0aW9uQ29udGV4dDxhbnksIGFueT4pOiBJQ29tbW9uc0Vycm9yIHtcbiAgICAgICAgbGV0IGNvbW1vbnNFcnJvcjogSUNvbW1vbnNFcnJvcjtcbiAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnM6IENvbW1vbnNBY3Rpb25FcnJvck9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY2F1c2U6IGVycm9yLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB0aGlzLnJvdXRlci51cmxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuaHR0cEVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbW1vbnNFcnJvciA9IG5ldyBDb21tb25zQWN0aW9uRXJyb3IoZXJyb3I/Lm1lc3NhZ2UgPz8gJ1Vua25vd24gZXJyb3InLCBjb250ZXh0LmNvbnRleHRMb25nTmFtZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgLy8gc2hvdWxkIG5vdCByZWFsbHkgaGFwcGVuIChzaG91bGQgYWx3YXlzIGJlIHdyYXBwZWQgaW4gTW5nQWN0aW9uRXJyb3IpLCBqdXN0IGluIGNhc2VcbiAgICAgICAgICAgIGNvbW1vbnNFcnJvciA9IG5ldyBDb21tb25zSHR0cEVycm9yKGBIdHRwIEVycm9yIG9jY3VycmVkIGluIGFjdGlvbmAsIGVycm9yLCB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHRoaXMucm91dGVyLnVybFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBub3QgZnJvbSBhY3Rpb24sIHNvIHVua25vd24gc291cmNlIG9mIGVycm9yXG4gICAgICAgICAgICBjb21tb25zRXJyb3IgPSBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoZXJyb3I/Lm1lc3NhZ2UgPz8gJ1Vua25vd24gZXJyb3InLCB7XG4gICAgICAgICAgICAgICAgbmFtZTogZXJyb3I/Lm5hbWUgPz8gJ1Vua25vd25FcnJvcicsXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHRoaXMucm91dGVyLnVybCxcbiAgICAgICAgICAgICAgICBjYXVzZTogZXJyb3JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8ganVzdCB0cmFjZSBpdCwgYWxsb3cgdXNlciB0byBzZXQgaWYgdGhpcyBpcyBlcnJvciBvciBub3RcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoY29tbW9uc0Vycm9yKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvck1hcHBlci50b0NvbW1vbnNFcnJvcihlcnJvciwgY29tbW9uc0Vycm9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIG9yIGdldHMgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycy5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2VJbml0aWFsU3RhdHVzIEFjdGlvbiBpbnN0YW5jZSBpbml0aWFsIHN0YXR1cy5cbiAgICAgKiBAcGFyYW0gc2tpcEluaXRpYWxpemF0aW9uRnJvbVZpZXdDb250YWluZXIgSWYgaW5pdGlhbGl6YXRpb24gb2YgaW5zdGFuY2UgZnJvbSB2aWV3IGNvbnRhaW5lciBzaG91bGQgYmUgc2tpcHBlZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRPckNyZWF0ZUluc3RhbmNlPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgICAgICBpbnN0YW5jZTogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4gfCB1bmRlZmluZWQsXG4gICAgICAgIGFjdGlvbj86IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwYXJhbWV0ZXJzPzogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgaW5zdGFuY2VJbml0aWFsU3RhdHVzPzogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0sXG4gICAgICAgIHNraXBJbml0aWFsaXphdGlvbkZyb21WaWV3Q29udGFpbmVyID0gZmFsc2VcbiAgICApOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgICAgIGlmICghc2tpcEluaXRpYWxpemF0aW9uRnJvbVZpZXdDb250YWluZXIgJiYgIWluc3RhbmNlICYmIGFjdGlvbj8uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlICYmIHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcy52aWV3Q29udGFpbmVyPy5yb3V0ZVRyaWdnZXJlZEFjdGlvbkluc3RhbmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGlmICghYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdBY3Rpb24gZGVzY3JpcHRvciBpcyBub3QgcHJvdmlkZWQsIGluc3RhbmNlIGNhbm5vdCBiZSBjcmVhdGVkLicsIHtuYW1lOiAnQWN0aW9uRXhlY3V0b3JTZXJ2aWNlRXJyb3InfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjcmVhdGUgbmV3IGluc3RhbmNlIGlmIG5vbiBwcm92aWRlZFxuICAgICAgICAgICAgaW5zdGFuY2UgPSBuZXcgQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4oYWN0aW9uLCBpbnN0YW5jZUluaXRpYWxTdGF0dXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnPy5hY3Rpb25zPy5kZWJ1Z0luc3RhbmNlcyAmJiAhdGhpcy5pbnN0YW5jZXMuc29tZShpID0+IGkuaW5zdGFuY2VMb25nTmFtZSA9PT0gaW5zdGFuY2UhLmluc3RhbmNlTG9uZ05hbWUpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZXMubGVuZ3RoID49IHRoaXMuaW5zdGFuY2VzQnVmZmVyTWF4KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgIGlmIChsYXN0SW5zdGFuY2UhLnN0YXRlIDwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc0ZpbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBFUlJPUjogTm90IGFsbCBpbnN0YW5jZXMgYXJlIGZpbmlzaGVkISBGaW5pc2hpbmcgaW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSB3aXRoIGRpc21pc3NhbC5gKTtcbiAgICAgICAgICAgICAgICAgICAgbGFzdEluc3RhbmNlIS5mb3JjZUZpbmlzaCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxufVxuIl19
@@ -10,10 +10,10 @@ export class ComponentActionExecutorService extends ActionExecutorService {
10
10
  get instances() {
11
11
  return this.rootActionExecutorService.instances;
12
12
  }
13
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: ComponentActionExecutorService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
14
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: ComponentActionExecutorService }); }
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ComponentActionExecutorService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
14
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ComponentActionExecutorService }); }
15
15
  }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: ComponentActionExecutorService, decorators: [{
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ComponentActionExecutorService, decorators: [{
17
17
  type: Injectable
18
18
  }] });
19
19
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWFjdGlvbi1leGVjdXRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9hY3Rpb24vc2VydmljZXMvY29tcG9uZW50LWFjdGlvbi1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR2pELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDOztBQUd6RSxNQUFNLE9BQU8sOEJBQStCLFNBQVEscUJBQXFCO0lBRHpFOztRQUVxQiw4QkFBeUIsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztLQUtsRjtJQUhHLElBQVcsU0FBUztRQUNoQixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLENBQUM7SUFDcEQsQ0FBQzs4R0FMUSw4QkFBOEI7a0hBQTlCLDhCQUE4Qjs7MkZBQTlCLDhCQUE4QjtrQkFEMUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtBY3Rpb25JbnN0YW5jZX0gZnJvbSAnLi4vbW9kZWxzL2V4ZWN1dGlvbi9hY3Rpb24taW5zdGFuY2UubW9kZWwnO1xuaW1wb3J0IHtBY3Rpb25FeGVjdXRvclNlcnZpY2V9IGZyb20gJy4vYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtSb290QWN0aW9uRXhlY3V0b3JTZXJ2aWNlfSBmcm9tICcuL3Jvb3QtYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50QWN0aW9uRXhlY3V0b3JTZXJ2aWNlIGV4dGVuZHMgQWN0aW9uRXhlY3V0b3JTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvb3RBY3Rpb25FeGVjdXRvclNlcnZpY2UgPSBpbmplY3QoUm9vdEFjdGlvbkV4ZWN1dG9yU2VydmljZSk7XG5cbiAgICBwdWJsaWMgZ2V0IGluc3RhbmNlcygpOiBBY3Rpb25JbnN0YW5jZTxhbnksIGFueT5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3RBY3Rpb25FeGVjdXRvclNlcnZpY2UuaW5zdGFuY2VzO1xuICAgIH1cbn1cbiJdfQ==