@mediusinc/mng-commons 3.0.0-rc.3 → 3.0.0-rc.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/assets/i18n/en.json +5 -1
  2. package/assets/i18n/sl.json +5 -1
  3. package/esm2022/index.mjs +3 -1
  4. package/esm2022/lib/api/utils/object-serializer.util.mjs +11 -4
  5. package/esm2022/lib/components/action/action.component.mjs +16 -4
  6. package/esm2022/lib/components/action/editor/action-editor.component.mjs +83 -18
  7. package/esm2022/lib/components/action/models/action-execution.model.mjs +14 -37
  8. package/esm2022/lib/components/action/route/action-route.component.mjs +9 -2
  9. package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +7 -5
  10. package/esm2022/lib/components/form/dropdown/dropdown.component.mjs +7 -5
  11. package/esm2022/lib/components/form/editor/form-editor.component.mjs +9 -8
  12. package/esm2022/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +43 -15
  13. package/esm2022/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +3 -3
  14. package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +6 -6
  15. package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +3 -3
  16. package/esm2022/lib/descriptors/action/action.descriptor.mjs +19 -8
  17. package/esm2022/lib/descriptors/editor/editor.descriptor.mjs +3 -3
  18. package/esm2022/lib/descriptors/filter/filter.descriptor.mjs +7 -6
  19. package/esm2022/lib/descriptors/table/column.descriptor.mjs +3 -3
  20. package/esm2022/lib/descriptors/tableview/tableview.descriptor.mjs +3 -3
  21. package/esm2022/lib/error/error.handler.mjs +23 -0
  22. package/esm2022/lib/error/index.mjs +2 -0
  23. package/esm2022/lib/guards/index.mjs +2 -0
  24. package/esm2022/lib/guards/unsaved-changes.guard.mjs +4 -0
  25. package/esm2022/lib/models/action-editor.model.mjs +2 -0
  26. package/esm2022/lib/models/can-component-deactivate.model.mjs +2 -0
  27. package/esm2022/lib/models/config.model.mjs +1 -1
  28. package/esm2022/lib/models/error.model.mjs +1 -1
  29. package/esm2022/lib/models/index.mjs +5 -2
  30. package/esm2022/lib/models/internal-error.model.mjs +30 -0
  31. package/esm2022/lib/models/log.model.mjs +10 -0
  32. package/esm2022/lib/pipes/json-path.pipe.mjs +8 -4
  33. package/esm2022/lib/provide-commons.mjs +16 -15
  34. package/esm2022/lib/router/route-builder.mjs +4 -4
  35. package/esm2022/lib/router/routes-builder.mjs +3 -3
  36. package/esm2022/lib/router/tableview-route-builder.mjs +4 -1
  37. package/esm2022/lib/security/authorization.service.mjs +5 -4
  38. package/esm2022/lib/security/authorization.util.mjs +3 -3
  39. package/esm2022/lib/services/action-error-mapper.service.mjs +19 -0
  40. package/esm2022/lib/services/action-executor.service.mjs +43 -28
  41. package/esm2022/lib/services/commons.service.mjs +16 -25
  42. package/esm2022/lib/services/configuration.service.mjs +60 -30
  43. package/esm2022/lib/services/index.mjs +3 -2
  44. package/esm2022/lib/services/internal/commons-init.service.mjs +48 -23
  45. package/esm2022/lib/services/logger.service.mjs +123 -0
  46. package/esm2022/lib/services/providers/index.mjs +1 -2
  47. package/esm2022/lib/utils/action-data-provider.util.mjs +7 -7
  48. package/esm2022/lib/utils/notification.util.mjs +3 -2
  49. package/esm2022/lib/utils/object.util.mjs +32 -5
  50. package/esm2022/lib/utils/route.util.mjs +3 -3
  51. package/esm2022/lib/utils/string.util.mjs +2 -2
  52. package/esm2022/lib/utils/tableview.util.mjs +3 -3
  53. package/esm2022/lib/utils/type.util.mjs +5 -5
  54. package/fesm2022/mediusinc-mng-commons.mjs +2587 -2258
  55. package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
  56. package/index.d.ts +1 -0
  57. package/lib/api/utils/object-serializer.util.d.ts +1 -0
  58. package/lib/components/action/action.component.d.ts +1 -0
  59. package/lib/components/action/editor/action-editor.component.d.ts +17 -6
  60. package/lib/components/action/models/action-execution.model.d.ts +5 -3
  61. package/lib/components/action/route/action-route.component.d.ts +4 -1
  62. package/lib/components/form/autocomplete/autocomplete.component.d.ts +1 -0
  63. package/lib/components/form/dropdown/dropdown.component.d.ts +1 -0
  64. package/lib/components/form/editor/form-editor.component.d.ts +1 -0
  65. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +2 -0
  66. package/lib/descriptors/action/action.descriptor.d.ts +3 -0
  67. package/lib/descriptors/editor/field.descriptor.d.ts +2 -2
  68. package/lib/error/error.handler.d.ts +6 -0
  69. package/lib/error/index.d.ts +1 -0
  70. package/lib/guards/index.d.ts +1 -0
  71. package/lib/guards/unsaved-changes.guard.d.ts +3 -0
  72. package/lib/models/action-editor.model.d.ts +4 -0
  73. package/lib/models/can-component-deactivate.model.d.ts +4 -0
  74. package/lib/models/config.model.d.ts +2 -1
  75. package/lib/models/error.model.d.ts +2 -1
  76. package/lib/models/index.d.ts +4 -1
  77. package/lib/models/{error-internal.model.d.ts → internal-error.model.d.ts} +3 -6
  78. package/lib/models/log.model.d.ts +34 -0
  79. package/lib/pipes/json-path.pipe.d.ts +1 -0
  80. package/lib/security/authorization.service.d.ts +1 -0
  81. package/lib/services/action-error-mapper.service.d.ts +11 -0
  82. package/lib/services/action-executor.service.d.ts +10 -5
  83. package/lib/services/commons.service.d.ts +9 -14
  84. package/lib/services/configuration.service.d.ts +13 -5
  85. package/lib/services/index.d.ts +2 -1
  86. package/lib/services/internal/commons-init.service.d.ts +7 -8
  87. package/lib/services/logger.service.d.ts +30 -0
  88. package/lib/services/providers/index.d.ts +0 -1
  89. package/lib/utils/object.util.d.ts +6 -4
  90. package/package.json +1 -1
  91. package/esm2022/lib/models/error-internal.model.mjs +0 -27
  92. package/esm2022/lib/services/error-mapper.service.mjs +0 -14
  93. package/esm2022/lib/services/providers/config-service.provider.mjs +0 -31
  94. package/lib/services/error-mapper.service.d.ts +0 -7
  95. package/lib/services/providers/config-service.provider.d.ts +0 -6
@@ -83,7 +83,11 @@
83
83
  },
84
84
  "imageUrlPlaceholder": "Insert image URL ...",
85
85
  "imageUrlAdd": "Add image URL",
86
- "imageLoadError": "An error occurred while loading the image"
86
+ "imageLoadError": "An error occurred while loading the image",
87
+ "unsavedChangesConfirmation": {
88
+ "header": "Are you sure you want to exit?",
89
+ "message": "You have unsaved changes. Press No to go back and save these changes, or Yes to lose these changes."
90
+ }
87
91
  },
88
92
  "mngAutocomplete": {
89
93
  "noMatches": "No mathces"
@@ -82,7 +82,11 @@
82
82
  },
83
83
  "imageUrlPlaceholder": "Vnesi URL do slike ...",
84
84
  "imageUrlAdd": "Dodaj URL slike",
85
- "imageLoadError": "Prišlo je do napake med nalaganjem slike"
85
+ "imageLoadError": "Prišlo je do napake med nalaganjem slike",
86
+ "unsavedChangesConfirmation": {
87
+ "header": "Ali res želite zapreti okno?",
88
+ "message": "Imate neshranjene spremembe v formi. Če kliknite Ne, bo okno ostalo odprto, če Da, pa se bo okno zaprlo in spremembe bodo izbrisane."
89
+ }
86
90
  },
87
91
  "mngAutocomplete": {
88
92
  "noMatches": "Ni zadetkov"
package/esm2022/index.mjs CHANGED
@@ -59,4 +59,6 @@ export * from './lib/types';
59
59
  // styles
60
60
  export * from './lib/styles';
61
61
  export * from './lib/styles/models';
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxTQUFTO0FBQ1QsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHVCQUF1QixDQUFDO0FBRXRDLFdBQVc7QUFDWCxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDBCQUEwQixDQUFDO0FBRXpDLG1CQUFtQjtBQUNuQixjQUFjLHVCQUF1QixDQUFDO0FBRXRDLFFBQVE7QUFDUixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsYUFBYSxDQUFDO0FBRTVCLGFBQWE7QUFDYixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHdCQUF3QixDQUFDO0FBRXZDLGFBQWE7QUFDYixjQUFjLGtCQUFrQixDQUFDO0FBRWpDLFFBQVE7QUFDUixjQUFjLGFBQWEsQ0FBQztBQUU1QixhQUFhO0FBQ2IsY0FBYyxrQkFBa0IsQ0FBQztBQUVqQyxtQkFBbUI7QUFDbkIsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFFbEQsU0FBUztBQUNULGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyw4QkFBOEIsQ0FBQztBQUU3QyxpQkFBaUI7QUFDakIsY0FBYyxzQkFBc0IsQ0FBQztBQUVyQyxjQUFjO0FBQ2QsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHlCQUF5QixDQUFDO0FBRXhDLGlCQUFpQjtBQUNqQixjQUFjLGNBQWMsQ0FBQztBQUU3QixTQUFTO0FBQ1QsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQztBQUVwQyxXQUFXO0FBQ1gsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHNCQUFzQixDQUFDO0FBRXJDLFFBQVE7QUFDUixjQUFjLGFBQWEsQ0FBQztBQUU1QixTQUFTO0FBQ1QsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgbW5nLWNvbW1vbnNcbiAqL1xuXG4vLyBtb2R1bGVcbmV4cG9ydCAqIGZyb20gJy4vbGliL21uZy1jb21tb25zLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcm92aWRlLWNvbW1vbnMnO1xuXG4vLyBzZXJ2aWNlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXBpL3NlcnZpY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbGF5b3V0L3NlcnZpY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3Byb3ZpZGVycyc7XG5cbi8vIGluamVjdGlvbiB0b2tlbnNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3Rva2Vucyc7XG5cbi8vIHV0aWxzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hcGkvdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMnO1xuXG4vLyBjb21wb25lbnRzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2FjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm0nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm1seS9maWVsZHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm1seS93cmFwcGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2xheW91dCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3RhYmxldmlldyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3BhZ2VzJztcblxuLy8gZGlyZWN0aXZlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcyc7XG5cbi8vIHBpcGVzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcyc7XG5cbi8vIGFwaSBtb2RlbHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FwaS9tb2RlbHMnO1xuXG4vLyBjb21wb25lbnQgbW9kZWxzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2FjdGlvbi9tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3JtL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3RhYmxldmlldy9tb2RlbHMnO1xuXG4vLyBmb3JtbHlcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtbHknO1xuXG4vLyBkYXRhIHByb3ZpZGVyc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0YS1wcm92aWRlcnMnO1xuXG4vLyBkZXNjcmlwdG9yc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMvYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzL2VkaXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycy9maWx0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMvaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycy90YWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycy90YWJsZXZpZXcnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMvdHlwZXMnO1xuXG4vLyBnZW5lcmFsIG1vZGVsc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzJztcblxuLy8gcm91dGVyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yb3V0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcm91dGVyL21vZGVscyc7XG5cbi8vIHNlY3VyaXR5XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWN1cml0eSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWN1cml0eS9tb2RlbCc7XG5cbi8vIHR5cGVzXG5leHBvcnQgKiBmcm9tICcuL2xpYi90eXBlcyc7XG5cbi8vIHN0eWxlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3R5bGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N0eWxlcy9tb2RlbHMnO1xuIl19
62
+ // error
63
+ export * from './lib/error';
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxTQUFTO0FBQ1QsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHVCQUF1QixDQUFDO0FBRXRDLFdBQVc7QUFDWCxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDBCQUEwQixDQUFDO0FBRXpDLG1CQUFtQjtBQUNuQixjQUFjLHVCQUF1QixDQUFDO0FBRXRDLFFBQVE7QUFDUixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsYUFBYSxDQUFDO0FBRTVCLGFBQWE7QUFDYixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHdCQUF3QixDQUFDO0FBRXZDLGFBQWE7QUFDYixjQUFjLGtCQUFrQixDQUFDO0FBRWpDLFFBQVE7QUFDUixjQUFjLGFBQWEsQ0FBQztBQUU1QixhQUFhO0FBQ2IsY0FBYyxrQkFBa0IsQ0FBQztBQUVqQyxtQkFBbUI7QUFDbkIsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFFbEQsU0FBUztBQUNULGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyw4QkFBOEIsQ0FBQztBQUU3QyxpQkFBaUI7QUFDakIsY0FBYyxzQkFBc0IsQ0FBQztBQUVyQyxjQUFjO0FBQ2QsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHlCQUF5QixDQUFDO0FBRXhDLGlCQUFpQjtBQUNqQixjQUFjLGNBQWMsQ0FBQztBQUU3QixTQUFTO0FBQ1QsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQztBQUVwQyxXQUFXO0FBQ1gsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHNCQUFzQixDQUFDO0FBRXJDLFFBQVE7QUFDUixjQUFjLGFBQWEsQ0FBQztBQUU1QixTQUFTO0FBQ1QsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQztBQUVwQyxRQUFRO0FBQ1IsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG1uZy1jb21tb25zXG4gKi9cblxuLy8gbW9kdWxlXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tbmctY29tbW9ucy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJvdmlkZS1jb21tb25zJztcblxuLy8gc2VydmljZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FwaS9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2xheW91dC9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9wcm92aWRlcnMnO1xuXG4vLyBpbmplY3Rpb24gdG9rZW5zXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy90b2tlbnMnO1xuXG4vLyB1dGlsc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXBpL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzJztcblxuLy8gY29tcG9uZW50c1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3JtJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvZmllbGRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvd3JhcHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9sYXlvdXQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90YWJsZXZpZXcnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wYWdlcyc7XG5cbi8vIGRpcmVjdGl2ZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMnO1xuXG4vLyBwaXBlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMnO1xuXG4vLyBhcGkgbW9kZWxzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hcGkvbW9kZWxzJztcblxuLy8gY29tcG9uZW50IG1vZGVsc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hY3Rpb24vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybS9tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90YWJsZXZpZXcvbW9kZWxzJztcblxuLy8gZm9ybWx5XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm0vZm9ybWx5L21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm0vZm9ybWx5JztcblxuLy8gZGF0YSBwcm92aWRlcnNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGEtcHJvdmlkZXJzJztcblxuLy8gZGVzY3JpcHRvcnNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzL2FjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycy9lZGl0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMvZmlsdGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzL2ludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMvdGFibGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMvdGFibGV2aWV3JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzL3R5cGVzJztcblxuLy8gZ2VuZXJhbCBtb2RlbHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscyc7XG5cbi8vIHJvdXRlclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcm91dGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JvdXRlci9tb2RlbHMnO1xuXG4vLyBzZWN1cml0eVxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VjdXJpdHknO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VjdXJpdHkvbW9kZWwnO1xuXG4vLyB0eXBlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdHlwZXMnO1xuXG4vLyBzdHlsZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N0eWxlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zdHlsZXMvbW9kZWxzJztcblxuLy8gZXJyb3JcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Vycm9yJztcbiJdfQ==
@@ -1,7 +1,10 @@
1
+ import { LogLevelEnum } from '../../models';
2
+ import { MngLoggerService } from '../../services';
1
3
  import { DateUtil, TypeUtil } from '../../utils';
2
4
  import { enumsMapBase, typeMapBase } from '../models';
3
5
  export class ObjectSerializer {
4
6
  constructor() {
7
+ this._logCategory = 'ObjectSerializer';
5
8
  this._primitives = ['string', 'boolean', 'double', 'integer', 'long', 'float', 'number', 'any'];
6
9
  this._typeMap = {
7
10
  ...typeMapBase
@@ -9,6 +12,7 @@ export class ObjectSerializer {
9
12
  this._enumMap = {
10
13
  ...enumsMapBase
11
14
  };
15
+ // private readonly _logger = MngLoggerService.get().create('ObjectSerializer');
12
16
  this.dateTimeInUtc = true;
13
17
  this.dateTimeWithTimezone = true;
14
18
  this.dateTimeWithMillis = true;
@@ -92,11 +96,13 @@ export class ObjectSerializer {
92
96
  TypeUtil.defineReflectTypeName(type, typeName);
93
97
  }
94
98
  if (!typeName) {
95
- console.warn(`Registering type ${type} failed, because typeName could not be determined and optional name was not provided.`);
99
+ // this._logger.debug(`WARNING: registering type ${type} failed, because typeName could not be determined and optional name was not provided.`);
100
+ MngLoggerService.get().log(`WARNING: registering type ${type} failed, because typeName could not be determined and optional name was not provided.`, LogLevelEnum.Debug, this._logCategory);
96
101
  return;
97
102
  }
98
103
  if (typeof this._typeMap[typeName] !== 'undefined') {
99
- console.warn(`Registering type ${type} under key ${typeName} skipped, because type already exists for this key.`);
104
+ // this._logger.debug(`WARNING: registering type ${type} under key ${typeName} skipped, because type already exists for this key.`);
105
+ MngLoggerService.get().log(`WARNING: registering type ${type} under key ${typeName} skipped, because type already exists for this key.`, LogLevelEnum.Debug, this._logCategory);
100
106
  }
101
107
  else {
102
108
  this._typeMap[typeName] = type;
@@ -110,7 +116,8 @@ export class ObjectSerializer {
110
116
  registerEnum(enumType, enumName) {
111
117
  // try to find name from decorator
112
118
  if (typeof this._enumMap[enumName] !== 'undefined') {
113
- console.warn(`Registering enum ${enumName} skipped, because enum already exists.`);
119
+ // this._logger.debug(`Registering enum ${enumName} skipped, because enum already exists.`);
120
+ MngLoggerService.get().log(`Registering enum ${enumName} skipped, because enum already exists.`, LogLevelEnum.Debug, this._logCategory);
114
121
  }
115
122
  else {
116
123
  TypeUtil.defineReflectEnumName(enumType, enumName);
@@ -255,4 +262,4 @@ export class ObjectSerializer {
255
262
  }
256
263
  }
257
264
  }
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXNlcmlhbGl6ZXIudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXBpL3V0aWxzL29iamVjdC1zZXJpYWxpemVyLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFvQyxZQUFZLEVBQUUsV0FBVyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRXZGLE1BQU0sT0FBTyxnQkFBZ0I7SUFBN0I7UUFFcUIsZ0JBQVcsR0FBYSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRyxhQUFRLEdBQXdCO1lBQzdDLEdBQUcsV0FBVztTQUNqQixDQUFDO1FBQ2UsYUFBUSxHQUF3QjtZQUM3QyxHQUFHLFlBQVk7U0FDbEIsQ0FBQztRQUVNLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLHlCQUFvQixHQUFHLElBQUksQ0FBQztRQUM1Qix1QkFBa0IsR0FBRyxJQUFJLENBQUM7SUE2UHRDLENBQUM7YUF4UWtCLGNBQVMsR0FBcUIsSUFBSSxnQkFBZ0IsRUFBRSxBQUEzQyxDQUE0QztJQWFwRSxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsR0FBRztRQUNiLE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDO0lBQ3RDLENBQUM7SUFFTSxrQ0FBa0MsQ0FBQyxJQUFvQixFQUFFLGFB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LE1BQU0sRUFBRTtZQUN4QixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pCO2FBQU07WUFDSCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3JCLFVBQVU7Z0JBQ1YsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN0QixxQkFBcUI7Z0JBQ3JCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMzQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLG1CQUFtQixFQUF5QixDQUFDO1lBQ3hGLHlDQUF5QztZQUN6QyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDeEQsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckc7WUFDRCxPQUFPLFFBQVEsQ0FBQztTQUNuQjtJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NsYXNzVHlwZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtEYXRlVXRpbCwgVHlwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7QXR0cmlidXRlRGVmLCBTZXJpYWxpemFibGVUeXBlTWFwLCBlbnVtc01hcEJhc2UsIHR5cGVNYXBCYXNlfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgT2JqZWN0U2VyaWFsaXplciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBPYmplY3RTZXJpYWxpemVyID0gbmV3IE9iamVjdFNlcmlhbGl6ZXIoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcmltaXRpdmVzOiBzdHJpbmdbXSA9IFsnc3RyaW5nJywgJ2Jvb2xlYW4nLCAnZG91YmxlJywgJ2ludGVnZXInLCAnbG9uZycsICdmbG9hdCcsICdudW1iZXInLCAnYW55J107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdHlwZU1hcDogU2VyaWFsaXphYmxlVHlwZU1hcCA9IHtcbiAgICAgICAgLi4udHlwZU1hcEJhc2VcbiAgICB9O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VudW1NYXA6IFNlcmlhbGl6YWJsZVR5cGVNYXAgPSB7XG4gICAgICAgIC4uLmVudW1zTWFwQmFzZVxuICAgIH07XG5cbiAgICBwcml2YXRlIGRhdGVUaW1lSW5VdGMgPSB0cnVlO1xuICAgIHByaXZhdGUgZGF0ZVRpbWVXaXRoVGltZXpvbmUgPSB0cnVlO1xuICAgIHByaXZhdGUgZGF0ZVRpbWVXaXRoTWlsbGlzID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBnZXQgcHJpbWl0aXZlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByaW1pdGl2ZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0eXBlTWFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZU1hcDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVudW1NYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnVtTWFwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9ubHkgdXNlIG9uZSBpbnN0YW5jZSBvZiBvYmplY3QgKG91dCBvZiBBbmd1bGFyIGNvbnRleHQpXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXQoKTogT2JqZWN0U2VyaWFsaXplciB7XG4gICAgICAgIHJldHVybiBPYmplY3RTZXJpYWxpemVyLl9pbnN0YW5jZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZEF0dHJpYnV0ZURlZmluaXRpb25CeUNsYXNzVHlwZSh0eXBlOiBDbGFzc1R5cGU8YW55PiwgYXR0cmlidXRlTmFtZTogc3RyaW5nKTogQXR0cmlidXRlRGVmIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRBdHRyaWJ1dGVEZWZpbml0aW9uKFR5cGVVdGlsLmZpbmRUeXBlTmFtZSh0eXBlKSwgYXR0cmlidXRlTmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRBdHRyaWJ1dGVEZWZpbml0aW9uKHR5cGVOYW1lOiBzdHJpbmcsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IEF0dHJpYnV0ZURlZiB8IG51bGwge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVEZWZzID0gdGhpcy5maW5kQXR0cmlidXRlc0RlZmluaXRpb24odHlwZU5hbWUpO1xuICAgICAgICBpZiAoIWF0dHJpYnV0ZURlZnMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZURlZnMpIHtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUubmFtZSA9PT0gYXR0cmlidXRlTmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRBdHRyaWJ1dGVzRGVmaW5pdGlvbkJ5Q2xhc3NUeXBlKHR5cGU6IENsYXNzVHlwZTxhbnk+KTogQXJyYXk8QXR0cmlidXRlRGVmPiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kQXR0cmlidXRlc0RlZmluaXRpb24oVHlwZVV0aWwuZmluZFR5cGVOYW1lKHR5cGUpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZEF0dHJpYnV0ZXNEZWZpbml0aW9uKHR5cGVOYW1lOiBzdHJpbmcpOiBBcnJheTxBdHRyaWJ1dGVEZWY+IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHR5cGVEZWYgPSB0aGlzLmZpbmRUeXBlKHR5cGVOYW1lKTtcbiAgICAgICAgaWYgKCF0eXBlRGVmIHx8IHR5cGVvZiB0eXBlRGVmLmdldEF0dHJpYnV0ZVR5cGVNYXAgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0eXBlRGVmLmdldEF0dHJpYnV0ZVR5cGVNYXAoKSBhcyBBcnJheTxBdHRyaWJ1dGVEZWY+O1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kQnlDbGFzc1R5cGUodHlwZTogQ2xhc3NUeXBlPGFueT4pOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kVHlwZShUeXBlVXRpbC5maW5kVHlwZU5hbWUodHlwZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kVHlwZSh0eXBlTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGVNYXBbdHlwZU5hbWVdO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kRW51bShlbnVtTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW1NYXBbZW51bU5hbWVdO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25maWd1cmUoY29uZmlnOiB7ZGF0ZVRpbWVJblV0Yz86IGJvb2xlYW47IGRhdGVUaW1lV2l0aFRpbWV6b25lPzogYm9vbGVhbjsgZGF0ZVRpbWVXaXRoTWlsbGlzPzogYm9vbGVhbn0pOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbmZpZy5kYXRlVGltZUluVXRjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJblV0YyA9IGNvbmZpZy5kYXRlVGltZUluVXRjO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuZGF0ZVRpbWVXaXRoVGltZXpvbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZVdpdGhUaW1lem9uZSA9IGNvbmZpZy5kYXRlVGltZVdpdGhUaW1lem9uZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLmRhdGVUaW1lV2l0aE1pbGxpcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lV2l0aE1pbGxpcyA9IGNvbmZpZy5kYXRlVGltZVdpdGhNaWxsaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJUeXBlcyh0eXBlczogU2VyaWFsaXphYmxlVHlwZU1hcCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0eXBlcykge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlclR5cGUodHlwZXNba2V5XSwga2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclR5cGUodHlwZTogQ2xhc3NUeXBlPGFueT4sIG9wdFR5cGVOYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIC8vIHRyeSB0byBmaW5kIG5hbWUgZnJvbSBtZXRhZGF0YVxuICAgICAgICBsZXQgdHlwZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKFR5cGVVdGlsLnR5cGVOYW1lRXhpc3RzKHR5cGUpKSB7XG4gICAgICAgICAgICAvLyBkZWZpbmVkIG5hbWUgZnJvbSBvcHRpb25hbCB0eXBlIG5hbWVcbiAgICAgICAgICAgIHR5cGVOYW1lID0gVHlwZVV0aWwuZmluZFR5cGVOYW1lKHR5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdFR5cGVOYW1lKSB7XG4gICAgICAgICAgICB0eXBlTmFtZSA9IG9wdFR5cGVOYW1lO1xuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgbWV0YWRhdGFcbiAgICAgICAgICAgIFR5cGVVdGlsLmRlZmluZVJlZmxlY3RUeXBlTmFtZSh0eXBlLCB0eXBlTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXR5cGVOYW1lKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFJlZ2lzdGVyaW5nIHR5cGUgJHt0eXBlfSBmYWlsZWQsIGJlY2F1c2UgdHlwZU5hbWUgY291bGQgbm90IGJlIGRldGVybWluZWQgYW5kIG9wdGlvbmFsIG5hbWUgd2FzIG5vdCBwcm92aWRlZC5gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3R5cGVNYXBbdHlwZU5hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBSZWdpc3RlcmluZyB0eXBlICR7dHlwZX0gdW5kZXIga2V5ICR7dHlwZU5hbWV9IHNraXBwZWQsIGJlY2F1c2UgdHlwZSBhbHJlYWR5IGV4aXN0cyBmb3IgdGhpcyBrZXkuYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl90eXBlTWFwW3R5cGVOYW1lXSA9IHR5cGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJFbnVtcyhlbnVtczogU2VyaWFsaXphYmxlVHlwZU1hcCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBlbnVtcykge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckVudW0oZW51bXNba2V5XSwga2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlckVudW0oZW51bVR5cGU6IGFueSwgZW51bU5hbWU6IHN0cmluZykge1xuICAgICAgICAvLyB0cnkgdG8gZmluZCBuYW1lIGZyb20gZGVjb3JhdG9yXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fZW51bU1hcFtlbnVtTmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFJlZ2lzdGVyaW5nIGVudW0gJHtlbnVtTmFtZX0gc2tpcHBlZCwgYmVjYXVzZSBlbnVtIGFscmVhZHkgZXhpc3RzLmApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgVHlwZVV0aWwuZGVmaW5lUmVmbGVjdEVudW1OYW1lKGVudW1UeXBlLCBlbnVtTmFtZSk7XG4gICAgICAgICAgICB0aGlzLl9lbnVtTWFwW2VudW1OYW1lXSA9IGVudW1UeXBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRDb3JyZWN0VHlwZShkYXRhOiBhbnksIGV4cGVjdGVkVHlwZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChkYXRhID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9wcmltaXRpdmVzLmluZGV4T2YoZXhwZWN0ZWRUeXBlLnRvTG93ZXJDYXNlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZTtcbiAgICAgICAgfSBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09ICdEYXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9lbnVtTWFwW2V4cGVjdGVkVHlwZV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3R5cGVNYXBbZXhwZWN0ZWRUeXBlXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGU7IC8vIHcvZSB3ZSBkb24ndCBrbm93IHRoZSB0eXBlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIHRoZSBkaXNjcmltaW5hdG9yXG4gICAgICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yUHJvcGVydHkgPSB0aGlzLl90eXBlTWFwW2V4cGVjdGVkVHlwZV0uZGlzY3JpbWluYXRvcjtcbiAgICAgICAgICAgIGlmIChkaXNjcmltaW5hdG9yUHJvcGVydHkgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGU7IC8vIHRoZSB0eXBlIGRvZXMgbm90IGhhdmUgYSBkaXNjcmltaW5hdG9yLiB1c2UgaXQuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhW2Rpc2NyaW1pbmF0b3JQcm9wZXJ0eV0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzY3JpbWluYXRvclR5cGUgPSBkYXRhW2Rpc2NyaW1pbmF0b3JQcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90eXBlTWFwW2Rpc2NyaW1pbmF0b3JUeXBlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpc2NyaW1pbmF0b3JUeXBlOyAvLyB1c2UgdGhlIHR5cGUgZ2l2ZW4gaW4gdGhlIGRpc2NyaW1pbmF0b3JcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGU7IC8vIGRpc2NyaW1pbmF0b3IgZGlkIG5vdCBtYXAgdG8gYSB0eXBlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlOyAvLyBkaXNjcmltaW5hdG9yIHdhcyBub3QgcHJlc2VudCAob3IgYW4gZW1wdHkgc3RyaW5nKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXJpYWxpemVDbGFzczxUPihkYXRhOiBULCB0eXBlOiBDbGFzc1R5cGU8VD4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplKGRhdGEsIFR5cGVVdGlsLmZpbmRUeXBlTmFtZSh0eXBlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlcmlhbGl6ZUNsYXNzQXJyYXk8VD4oZGF0YTogQXJyYXk8VD4sIHR5cGU6IENsYXNzVHlwZTxUPikge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoZGF0YSwgYEFycmF5PCR7VHlwZVV0aWwuZmluZFR5cGVOYW1lKHR5cGUpfT5gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VyaWFsaXplKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCBzdWJ0eXBlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGRhdGEgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9wcmltaXRpdmVzLmluZGV4T2YodHlwZS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUubGFzdEluZGV4T2YoJ0FycmF5PCcsIDApID09PSAwKSB7XG4gICAgICAgICAgICAvLyBzdHJpbmcuc3RhcnRzV2l0aCBwcmUgZXM2XG4gICAgICAgICAgICBsZXQgc3ViVHlwZTogc3RyaW5nID0gdHlwZS5yZXBsYWNlKCdBcnJheTwnLCAnJyk7IC8vIEFycmF5PFR5cGU+ID0+IFR5cGU+XG4gICAgICAgICAgICBzdWJUeXBlID0gc3ViVHlwZS5zdWJzdHJpbmcoMCwgc3ViVHlwZS5sZW5ndGggLSAxKTsgLy8gVHlwZT4gPT4gVHlwZVxuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWREYXRhOiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkYXRhLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdHVtID0gZGF0YVtpbmRleF07XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWREYXRhLnB1c2godGhpcy5zZXJpYWxpemUoZGF0dW0sIHN1YlR5cGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZERhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0RhdGUnKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlT25seSA9IHN1YnR5cGUgPT09ICdkYXRlJztcbiAgICAgICAgICAgIHJldHVybiBEYXRlVXRpbC50b0lzb1N0cmluZyhkYXRhLCB0aGlzLmRhdGVUaW1lSW5VdGMsIHRoaXMuZGF0ZVRpbWVXaXRoVGltZXpvbmUsIHRoaXMuZGF0ZVRpbWVXaXRoTWlsbGlzLCBkYXRlT25seSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZW51bU1hcFt0eXBlXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl90eXBlTWFwW3R5cGVdKSB7XG4gICAgICAgICAgICAgICAgLy8gaW4gY2FzZSB3ZSBkb250IGtub3cgdGhlIHR5cGVcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IHRoZSBhY3R1YWwgdHlwZSBvZiB0aGlzIG9iamVjdFxuICAgICAgICAgICAgdHlwZSA9IHRoaXMuZmluZENvcnJlY3RUeXBlKGRhdGEsIHR5cGUpO1xuXG4gICAgICAgICAgICAvLyBnZXQgdGhlIG1hcCBmb3IgdGhlIGNvcnJlY3QgdHlwZS5cbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZVR5cGVzID0gdGhpcy5fdHlwZU1hcFt0eXBlXS5nZXRBdHRyaWJ1dGVUeXBlTWFwKCkgYXMgQXJyYXk8QXR0cmlidXRlRGVmPjtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlOiB7W2luZGV4OiBzdHJpbmddOiBhbnl9ID0ge307XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGF0dHJpYnV0ZVR5cGVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZVR5cGUgPSBhdHRyaWJ1dGVUeXBlc1tpbmRleF07XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VbYXR0cmlidXRlVHlwZS5iYXNlTmFtZV0gPSB0aGlzLnNlcmlhbGl6ZShkYXRhW2F0dHJpYnV0ZVR5cGUubmFtZV0sIGF0dHJpYnV0ZVR5cGUudHlwZSwgYXR0cmlidXRlVHlwZS5zdWJ0eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZXNlcmlhbGl6ZUNsYXNzPFQ+KGRhdGE6IGFueSwgdHlwZTogQ2xhc3NUeXBlPFQ+KTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlc2VyaWFsaXplKGRhdGEsIFR5cGVVdGlsLmZpbmRUeXBlTmFtZSh0eXBlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc2VyaWFsaXplQ2xhc3NBcnJheTxUPihkYXRhOiBhbnksIHR5cGU6IENsYXNzVHlwZTxUPik6IEFycmF5PFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVzZXJpYWxpemUoZGF0YSwgYEFycmF5PCR7VHlwZVV0aWwuZmluZFR5cGVOYW1lKHR5cGUpfT5gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzZXJpYWxpemUoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gcG9seW1vcnBoaXNtIG1heSBjaGFuZ2UgdGhlIGFjdHVhbCB0eXBlLlxuICAgICAgICB0eXBlID0gdGhpcy5maW5kQ29ycmVjdFR5cGUoZGF0YSwgdHlwZSk7XG4gICAgICAgIGlmIChkYXRhID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcHJpbWl0aXZlcy5pbmRleE9mKHR5cGUudG9Mb3dlckNhc2UoKSkgIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlLmxhc3RJbmRleE9mKCdBcnJheTwnLCAwKSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gc3RyaW5nLnN0YXJ0c1dpdGggcHJlIGVzNlxuICAgICAgICAgICAgbGV0IHN1YlR5cGU6IHN0cmluZyA9IHR5cGUucmVwbGFjZSgnQXJyYXk8JywgJycpOyAvLyBBcnJheTxUeXBlPiA9PiBUeXBlPlxuICAgICAgICAgICAgc3ViVHlwZSA9IHN1YlR5cGUuc3Vic3RyaW5nKDAsIHN1YlR5cGUubGVuZ3RoIC0gMSk7IC8vIFR5cGU+ID0+IFR5cGVcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YTogYW55W10gPSBbXTtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXR1bSA9IGRhdGFbaW5kZXhdO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkRGF0YS5wdXNoKHRoaXMuZGVzZXJpYWxpemUoZGF0dW0sIHN1YlR5cGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZERhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0RhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZW51bU1hcFt0eXBlXSkge1xuICAgICAgICAgICAgICAgIC8vIGlzIEVudW1cbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLl90eXBlTWFwW3R5cGVdKSB7XG4gICAgICAgICAgICAgICAgLy8gZG9udCBrbm93IHRoZSB0eXBlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyB0aGlzLl90eXBlTWFwW3R5cGVdKCk7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVUeXBlcyA9IHRoaXMuX3R5cGVNYXBbdHlwZV0uZ2V0QXR0cmlidXRlVHlwZU1hcCgpIGFzIEFycmF5PEF0dHJpYnV0ZURlZj47XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGF0dHJpYnV0ZVR5cGVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZVR5cGUgPSBhdHRyaWJ1dGVUeXBlc1tpbmRleF07XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VbYXR0cmlidXRlVHlwZS5uYW1lXSA9IHRoaXMuZGVzZXJpYWxpemUoZGF0YVthdHRyaWJ1dGVUeXBlLmJhc2VOYW1lXSwgYXR0cmlidXRlVHlwZS50eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXNlcmlhbGl6ZXIudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXBpL3V0aWxzL29iamVjdC1zZXJpYWxpemVyLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQW9DLFlBQVksRUFBRSxXQUFXLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFdkYsTUFBTSxPQUFPLGdCQUFnQjtJQUE3QjtRQUVxQixpQkFBWSxHQUFHLGtCQUFrQixDQUFDO1FBQ2xDLGdCQUFXLEdBQWEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckcsYUFBUSxHQUF3QjtZQUM3QyxHQUFHLFdBQVc7U0FDakIsQ0FBQztRQUNlLGFBQVEsR0FBd0I7WUFDN0MsR0FBRyxZQUFZO1NBQ2xCLENBQUM7UUFDRixnRkFBZ0Y7UUFFeEUsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQzVCLHVCQUFrQixHQUFHLElBQUksQ0FBQztJQXdRdEMsQ0FBQzthQXJSa0IsY0FBUyxHQUFxQixJQUFJLGdCQUFnQixFQUFFLEFBQTNDLENBQTRDO0lBZXBFLElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENB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QUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyRztZQUNELE9BQU8sUUFBUSxDQUFDO1NBQ25CO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TG9nTGV2ZWxFbnVtfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0NsYXNzVHlwZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtEYXRlVXRpbCwgVHlwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7QXR0cmlidXRlRGVmLCBTZXJpYWxpemFibGVUeXBlTWFwLCBlbnVtc01hcEJhc2UsIHR5cGVNYXBCYXNlfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgT2JqZWN0U2VyaWFsaXplciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBPYmplY3RTZXJpYWxpemVyID0gbmV3IE9iamVjdFNlcmlhbGl6ZXIoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9sb2dDYXRlZ29yeSA9ICdPYmplY3RTZXJpYWxpemVyJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcmltaXRpdmVzOiBzdHJpbmdbXSA9IFsnc3RyaW5nJywgJ2Jvb2xlYW4nLCAnZG91YmxlJywgJ2ludGVnZXInLCAnbG9uZycsICdmbG9hdCcsICdudW1iZXInLCAnYW55J107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdHlwZU1hcDogU2VyaWFsaXphYmxlVHlwZU1hcCA9IHtcbiAgICAgICAgLi4udHlwZU1hcEJhc2VcbiAgICB9O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VudW1NYXA6IFNlcmlhbGl6YWJsZVR5cGVNYXAgPSB7XG4gICAgICAgIC4uLmVudW1zTWFwQmFzZVxuICAgIH07XG4gICAgLy8gcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyID0gTW5nTG9nZ2VyU2VydmljZS5nZXQoKS5jcmVhdGUoJ09iamVjdFNlcmlhbGl6ZXInKTtcblxuICAgIHByaXZhdGUgZGF0ZVRpbWVJblV0YyA9IHRydWU7XG4gICAgcHJpdmF0ZSBkYXRlVGltZVdpdGhUaW1lem9uZSA9IHRydWU7XG4gICAgcHJpdmF0ZSBkYXRlVGltZVdpdGhNaWxsaXMgPSB0cnVlO1xuXG4gICAgcHVibGljIGdldCBwcmltaXRpdmVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJpbWl0aXZlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHR5cGVNYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlTWFwO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZW51bU1hcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW1NYXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT25seSB1c2Ugb25lIGluc3RhbmNlIG9mIG9iamVjdCAob3V0IG9mIEFuZ3VsYXIgY29udGV4dClcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldCgpOiBPYmplY3RTZXJpYWxpemVyIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdFNlcmlhbGl6ZXIuX2luc3RhbmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kQXR0cmlidXRlRGVmaW5pdGlvbkJ5Q2xhc3NUeXBlKHR5cGU6IENsYXNzVHlwZTxhbnk+LCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBBdHRyaWJ1dGVEZWYgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZEF0dHJpYnV0ZURlZmluaXRpb24oVHlwZVV0aWwuZmluZFR5cGVOYW1lKHR5cGUpLCBhdHRyaWJ1dGVOYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZEF0dHJpYnV0ZURlZmluaXRpb24odHlwZU5hbWU6IHN0cmluZywgYXR0cmlidXRlTmFtZTogc3RyaW5nKTogQXR0cmlidXRlRGVmIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZURlZnMgPSB0aGlzLmZpbmRBdHRyaWJ1dGVzRGVmaW5pdGlvbih0eXBlTmFtZSk7XG4gICAgICAgIGlmICghYXR0cmlidXRlRGVmcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlRGVmcykge1xuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS5uYW1lID09PSBhdHRyaWJ1dGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZEF0dHJpYnV0ZXNEZWZpbml0aW9uQnlDbGFzc1R5cGUodHlwZTogQ2xhc3NUeXBlPGFueT4pOiBBcnJheTxBdHRyaWJ1dGVEZWY+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRBdHRyaWJ1dGVzRGVmaW5pdGlvbihUeXBlVXRpbC5maW5kVHlwZU5hbWUodHlwZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kQXR0cmlidXRlc0RlZmluaXRpb24odHlwZU5hbWU6IHN0cmluZyk6IEFycmF5PEF0dHJpYnV0ZURlZj4gfCBudWxsIHtcbiAgICAgICAgY29uc3QgdHlwZURlZiA9IHRoaXMuZmluZFR5cGUodHlwZU5hbWUpO1xuICAgICAgICBpZiAoIXR5cGVEZWYgfHwgdHlwZW9mIHR5cGVEZWYuZ2V0QXR0cmlidXRlVHlwZU1hcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGVEZWYuZ2V0QXR0cmlidXRlVHlwZU1hcCgpIGFzIEFycmF5PEF0dHJpYnV0ZURlZj47XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRCeUNsYXNzVHlwZSh0eXBlOiBDbGFzc1R5cGU8YW55Pik6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRUeXBlKFR5cGVVdGlsLmZpbmRUeXBlTmFtZSh0eXBlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRUeXBlKHR5cGVOYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZU1hcFt0eXBlTmFtZV07XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRFbnVtKGVudW1OYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW51bU1hcFtlbnVtTmFtZV07XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmZpZ3VyZShjb25maWc6IHtkYXRlVGltZUluVXRjPzogYm9vbGVhbjsgZGF0ZVRpbWVXaXRoVGltZXpvbmU/OiBib29sZWFuOyBkYXRlVGltZVdpdGhNaWxsaXM/OiBib29sZWFufSk6IHZvaWQge1xuICAgICAgICBpZiAoY29uZmlnLmRhdGVUaW1lSW5VdGMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUluVXRjID0gY29uZmlnLmRhdGVUaW1lSW5VdGM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5kYXRlVGltZVdpdGhUaW1lem9uZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lV2l0aFRpbWV6b25lID0gY29uZmlnLmRhdGVUaW1lV2l0aFRpbWV6b25lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuZGF0ZVRpbWVXaXRoTWlsbGlzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVXaXRoTWlsbGlzID0gY29uZmlnLmRhdGVUaW1lV2l0aE1pbGxpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclR5cGVzKHR5cGVzOiBTZXJpYWxpemFibGVUeXBlTWFwKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHR5cGVzKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyVHlwZSh0eXBlc1trZXldLCBrZXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyVHlwZSh0eXBlOiBDbGFzc1R5cGU8YW55Piwgb3B0VHlwZU5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgLy8gdHJ5IHRvIGZpbmQgbmFtZSBmcm9tIG1ldGFkYXRhXG4gICAgICAgIGxldCB0eXBlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoVHlwZVV0aWwudHlwZU5hbWVFeGlzdHModHlwZSkpIHtcbiAgICAgICAgICAgIC8vIGRlZmluZWQgbmFtZSBmcm9tIG9wdGlvbmFsIHR5cGUgbmFtZVxuICAgICAgICAgICAgdHlwZU5hbWUgPSBUeXBlVXRpbC5maW5kVHlwZU5hbWUodHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0VHlwZU5hbWUpIHtcbiAgICAgICAgICAgIHR5cGVOYW1lID0gb3B0VHlwZU5hbWU7XG4gICAgICAgICAgICAvLyByZWdpc3RlciBtZXRhZGF0YVxuICAgICAgICAgICAgVHlwZVV0aWwuZGVmaW5lUmVmbGVjdFR5cGVOYW1lKHR5cGUsIHR5cGVOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdHlwZU5hbWUpIHtcbiAgICAgICAgICAgIC8vIHRoaXMuX2xvZ2dlci5kZWJ1ZyhgV0FSTklORzogcmVnaXN0ZXJpbmcgdHlwZSAke3R5cGV9IGZhaWxlZCwgYmVjYXVzZSB0eXBlTmFtZSBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZCBhbmQgb3B0aW9uYWwgbmFtZSB3YXMgbm90IHByb3ZpZGVkLmApO1xuICAgICAgICAgICAgTW5nTG9nZ2VyU2VydmljZS5nZXQoKS5sb2coXG4gICAgICAgICAgICAgICAgYFdBUk5JTkc6IHJlZ2lzdGVyaW5nIHR5cGUgJHt0eXBlfSBmYWlsZWQsIGJlY2F1c2UgdHlwZU5hbWUgY291bGQgbm90IGJlIGRldGVybWluZWQgYW5kIG9wdGlvbmFsIG5hbWUgd2FzIG5vdCBwcm92aWRlZC5gLFxuICAgICAgICAgICAgICAgIExvZ0xldmVsRW51bS5EZWJ1ZyxcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dDYXRlZ29yeVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3R5cGVNYXBbdHlwZU5hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gdGhpcy5fbG9nZ2VyLmRlYnVnKGBXQVJOSU5HOiByZWdpc3RlcmluZyB0eXBlICR7dHlwZX0gdW5kZXIga2V5ICR7dHlwZU5hbWV9IHNraXBwZWQsIGJlY2F1c2UgdHlwZSBhbHJlYWR5IGV4aXN0cyBmb3IgdGhpcyBrZXkuYCk7XG4gICAgICAgICAgICBNbmdMb2dnZXJTZXJ2aWNlLmdldCgpLmxvZyhcbiAgICAgICAgICAgICAgICBgV0FSTklORzogcmVnaXN0ZXJpbmcgdHlwZSAke3R5cGV9IHVuZGVyIGtleSAke3R5cGVOYW1lfSBza2lwcGVkLCBiZWNhdXNlIHR5cGUgYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMga2V5LmAsXG4gICAgICAgICAgICAgICAgTG9nTGV2ZWxFbnVtLkRlYnVnLFxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ0NhdGVnb3J5XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdHlwZU1hcFt0eXBlTmFtZV0gPSB0eXBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyRW51bXMoZW51bXM6IFNlcmlhbGl6YWJsZVR5cGVNYXApIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZW51bXMpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJFbnVtKGVudW1zW2tleV0sIGtleSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJFbnVtKGVudW1UeXBlOiBhbnksIGVudW1OYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gdHJ5IHRvIGZpbmQgbmFtZSBmcm9tIGRlY29yYXRvclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2VudW1NYXBbZW51bU5hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gdGhpcy5fbG9nZ2VyLmRlYnVnKGBSZWdpc3RlcmluZyBlbnVtICR7ZW51bU5hbWV9IHNraXBwZWQsIGJlY2F1c2UgZW51bSBhbHJlYWR5IGV4aXN0cy5gKTtcbiAgICAgICAgICAgIE1uZ0xvZ2dlclNlcnZpY2UuZ2V0KCkubG9nKGBSZWdpc3RlcmluZyBlbnVtICR7ZW51bU5hbWV9IHNraXBwZWQsIGJlY2F1c2UgZW51bSBhbHJlYWR5IGV4aXN0cy5gLCBMb2dMZXZlbEVudW0uRGVidWcsIHRoaXMuX2xvZ0NhdGVnb3J5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFR5cGVVdGlsLmRlZmluZVJlZmxlY3RFbnVtTmFtZShlbnVtVHlwZSwgZW51bU5hbWUpO1xuICAgICAgICAgICAgdGhpcy5fZW51bU1hcFtlbnVtTmFtZV0gPSBlbnVtVHlwZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kQ29ycmVjdFR5cGUoZGF0YTogYW55LCBleHBlY3RlZFR5cGU6IHN0cmluZykge1xuICAgICAgICBpZiAoZGF0YSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcHJpbWl0aXZlcy5pbmRleE9mKGV4cGVjdGVkVHlwZS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGU7XG4gICAgICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnRGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZW51bU1hcFtleHBlY3RlZFR5cGVdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLl90eXBlTWFwW2V4cGVjdGVkVHlwZV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlOyAvLyB3L2Ugd2UgZG9uJ3Qga25vdyB0aGUgdHlwZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDaGVjayB0aGUgZGlzY3JpbWluYXRvclxuICAgICAgICAgICAgY29uc3QgZGlzY3JpbWluYXRvclByb3BlcnR5ID0gdGhpcy5fdHlwZU1hcFtleHBlY3RlZFR5cGVdLmRpc2NyaW1pbmF0b3I7XG4gICAgICAgICAgICBpZiAoZGlzY3JpbWluYXRvclByb3BlcnR5ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlOyAvLyB0aGUgdHlwZSBkb2VzIG5vdCBoYXZlIGEgZGlzY3JpbWluYXRvci4gdXNlIGl0LlxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVtkaXNjcmltaW5hdG9yUHJvcGVydHldKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc2NyaW1pbmF0b3JUeXBlID0gZGF0YVtkaXNjcmltaW5hdG9yUHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHlwZU1hcFtkaXNjcmltaW5hdG9yVHlwZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaXNjcmltaW5hdG9yVHlwZTsgLy8gdXNlIHRoZSB0eXBlIGdpdmVuIGluIHRoZSBkaXNjcmltaW5hdG9yXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlOyAvLyBkaXNjcmltaW5hdG9yIGRpZCBub3QgbWFwIHRvIGEgdHlwZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZTsgLy8gZGlzY3JpbWluYXRvciB3YXMgbm90IHByZXNlbnQgKG9yIGFuIGVtcHR5IHN0cmluZylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2VyaWFsaXplQ2xhc3M8VD4oZGF0YTogVCwgdHlwZTogQ2xhc3NUeXBlPFQ+KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZShkYXRhLCBUeXBlVXRpbC5maW5kVHlwZU5hbWUodHlwZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXJpYWxpemVDbGFzc0FycmF5PFQ+KGRhdGE6IEFycmF5PFQ+LCB0eXBlOiBDbGFzc1R5cGU8VD4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplKGRhdGEsIGBBcnJheTwke1R5cGVVdGlsLmZpbmRUeXBlTmFtZSh0eXBlKX0+YCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlcmlhbGl6ZShkYXRhOiBhbnksIHR5cGU6IHN0cmluZywgc3VidHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChkYXRhID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcHJpbWl0aXZlcy5pbmRleE9mKHR5cGUudG9Mb3dlckNhc2UoKSkgIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlLmxhc3RJbmRleE9mKCdBcnJheTwnLCAwKSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gc3RyaW5nLnN0YXJ0c1dpdGggcHJlIGVzNlxuICAgICAgICAgICAgbGV0IHN1YlR5cGU6IHN0cmluZyA9IHR5cGUucmVwbGFjZSgnQXJyYXk8JywgJycpOyAvLyBBcnJheTxUeXBlPiA9PiBUeXBlPlxuICAgICAgICAgICAgc3ViVHlwZSA9IHN1YlR5cGUuc3Vic3RyaW5nKDAsIHN1YlR5cGUubGVuZ3RoIC0gMSk7IC8vIFR5cGU+ID0+IFR5cGVcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YTogYW55W10gPSBbXTtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXR1bSA9IGRhdGFbaW5kZXhdO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkRGF0YS5wdXNoKHRoaXMuc2VyaWFsaXplKGRhdHVtLCBzdWJUeXBlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWREYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdEYXRlJykge1xuICAgICAgICAgICAgY29uc3QgZGF0ZU9ubHkgPSBzdWJ0eXBlID09PSAnZGF0ZSc7XG4gICAgICAgICAgICByZXR1cm4gRGF0ZVV0aWwudG9Jc29TdHJpbmcoZGF0YSwgdGhpcy5kYXRlVGltZUluVXRjLCB0aGlzLmRhdGVUaW1lV2l0aFRpbWV6b25lLCB0aGlzLmRhdGVUaW1lV2l0aE1pbGxpcywgZGF0ZU9ubHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2VudW1NYXBbdHlwZV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fdHlwZU1hcFt0eXBlXSkge1xuICAgICAgICAgICAgICAgIC8vIGluIGNhc2Ugd2UgZG9udCBrbm93IHRoZSB0eXBlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCB0aGUgYWN0dWFsIHR5cGUgb2YgdGhpcyBvYmplY3RcbiAgICAgICAgICAgIHR5cGUgPSB0aGlzLmZpbmRDb3JyZWN0VHlwZShkYXRhLCB0eXBlKTtcblxuICAgICAgICAgICAgLy8gZ2V0IHRoZSBtYXAgZm9yIHRoZSBjb3JyZWN0IHR5cGUuXG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVUeXBlcyA9IHRoaXMuX3R5cGVNYXBbdHlwZV0uZ2V0QXR0cmlidXRlVHlwZU1hcCgpIGFzIEFycmF5PEF0dHJpYnV0ZURlZj47XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZToge1tpbmRleDogc3RyaW5nXTogYW55fSA9IHt9O1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhdHRyaWJ1dGVUeXBlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVUeXBlID0gYXR0cmlidXRlVHlwZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlW2F0dHJpYnV0ZVR5cGUuYmFzZU5hbWVdID0gdGhpcy5zZXJpYWxpemUoZGF0YVthdHRyaWJ1dGVUeXBlLm5hbWVdLCBhdHRyaWJ1dGVUeXBlLnR5cGUsIGF0dHJpYnV0ZVR5cGUuc3VidHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzZXJpYWxpemVDbGFzczxUPihkYXRhOiBhbnksIHR5cGU6IENsYXNzVHlwZTxUPik6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXNlcmlhbGl6ZShkYXRhLCBUeXBlVXRpbC5maW5kVHlwZU5hbWUodHlwZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZXNlcmlhbGl6ZUNsYXNzQXJyYXk8VD4oZGF0YTogYW55LCB0eXBlOiBDbGFzc1R5cGU8VD4pOiBBcnJheTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlc2VyaWFsaXplKGRhdGEsIGBBcnJheTwke1R5cGVVdGlsLmZpbmRUeXBlTmFtZSh0eXBlKX0+YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc2VyaWFsaXplKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nKSB7XG4gICAgICAgIC8vIHBvbHltb3JwaGlzbSBtYXkgY2hhbmdlIHRoZSBhY3R1YWwgdHlwZS5cbiAgICAgICAgdHlwZSA9IHRoaXMuZmluZENvcnJlY3RUeXBlKGRhdGEsIHR5cGUpO1xuICAgICAgICBpZiAoZGF0YSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3ByaW1pdGl2ZXMuaW5kZXhPZih0eXBlLnRvTG93ZXJDYXNlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZS5sYXN0SW5kZXhPZignQXJyYXk8JywgMCkgPT09IDApIHtcbiAgICAgICAgICAgIC8vIHN0cmluZy5zdGFydHNXaXRoIHByZSBlczZcbiAgICAgICAgICAgIGxldCBzdWJUeXBlOiBzdHJpbmcgPSB0eXBlLnJlcGxhY2UoJ0FycmF5PCcsICcnKTsgLy8gQXJyYXk8VHlwZT4gPT4gVHlwZT5cbiAgICAgICAgICAgIHN1YlR5cGUgPSBzdWJUeXBlLnN1YnN0cmluZygwLCBzdWJUeXBlLmxlbmd0aCAtIDEpOyAvLyBUeXBlPiA9PiBUeXBlXG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGE6IGFueVtdID0gW107XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0dW0gPSBkYXRhW2luZGV4XTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZERhdGEucHVzaCh0aGlzLmRlc2VyaWFsaXplKGRhdHVtLCBzdWJUeXBlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWREYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdEYXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2VudW1NYXBbdHlwZV0pIHtcbiAgICAgICAgICAgICAgICAvLyBpcyBFbnVtXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fdHlwZU1hcFt0eXBlXSkge1xuICAgICAgICAgICAgICAgIC8vIGRvbnQga25vdyB0aGUgdHlwZVxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgdGhpcy5fdHlwZU1hcFt0eXBlXSgpO1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlVHlwZXMgPSB0aGlzLl90eXBlTWFwW3R5cGVdLmdldEF0dHJpYnV0ZVR5cGVNYXAoKSBhcyBBcnJheTxBdHRyaWJ1dGVEZWY+O1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhdHRyaWJ1dGVUeXBlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVUeXBlID0gYXR0cmlidXRlVHlwZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlW2F0dHJpYnV0ZVR5cGUubmFtZV0gPSB0aGlzLmRlc2VyaWFsaXplKGRhdGFbYXR0cmlidXRlVHlwZS5iYXNlTmFtZV0sIGF0dHJpYnV0ZVR5cGUudHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -108,6 +108,7 @@ export class MngActionComponent {
108
108
  }
109
109
  }
110
110
  ngOnDestroy() {
111
+ this.actionExecutor.onActionDestroy(this.instance);
111
112
  this.isVisibleSubscription?.unsubscribe();
112
113
  this.isPermittedSubscription?.unsubscribe();
113
114
  this.isEnabledSubscription?.unsubscribe();
@@ -132,6 +133,7 @@ export class MngActionComponent {
132
133
  .withHostComponent(this.hostComponent)
133
134
  .withSelectedItems(this.selectedItems);
134
135
  const instance = this.actionExecutor.triggerAction(action, parameters);
136
+ this.instance = instance;
135
137
  const context = instance.context;
136
138
  if (!context) {
137
139
  // no context is provided if routing is triggered or editor is opened via dialog
@@ -194,11 +196,21 @@ export class MngActionComponent {
194
196
  next: res => (menuItem.disabled = !res)
195
197
  }));
196
198
  }
199
+ const visibilityObservables = [];
197
200
  if (typeof subaction.isVisibleFunction === 'function') {
198
- this.subactionSubscriptions.push(subaction.isVisibleFunction(context).subscribe({
199
- next: res => (menuItem.visible = res)
200
- }));
201
+ visibilityObservables.push(subaction.isVisibleFunction(context));
202
+ }
203
+ if (typeof subaction.permissions !== 'undefined') {
204
+ visibilityObservables.push(this.authorization.isPermitted(subaction.permissions, this.route.snapshot, context));
201
205
  }
206
+ const routeData = this.route.snapshot.data;
207
+ if (subaction.tableviewCategory && routeData.tableviewPermissions && routeData.tableviewPermissions[subaction.tableviewCategory]) {
208
+ const routePermissions = routeData.tableviewPermissions[subaction.tableviewCategory];
209
+ visibilityObservables.push(this.authorization.isPermitted(routePermissions, this.route.snapshot, context));
210
+ }
211
+ this.subactionSubscriptions.push(combineLatest(visibilityObservables).subscribe(visibilities => {
212
+ menuItem.visible = visibilities.every(value => value);
213
+ }));
202
214
  menuItem.command = () => this.triggerAction(subaction);
203
215
  menuItems.push(menuItem);
204
216
  }
@@ -301,4 +313,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
301
313
  type: ViewChild,
302
314
  args: ['subactionsMenu']
303
315
  }] } });
304
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vYWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vYWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBZ0MsUUFBUSxFQUFFLE1BQU0sRUFBaUIsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdLLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsbUJBQW1CLEVBQVcsTUFBTSxhQUFhLENBQUM7QUFDMUQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFVBQVUsRUFBRSxhQUFhLEVBQWdCLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFdEcsT0FBTyxFQUFDLGdCQUFnQixFQUFD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YSxpWEFBRSxrQkFBa0Isb0RBQUUscUJBQXFCLDRJQUFFLG1CQUFtQixrbEJBQUUsaUJBQWlCLDhrQkFBRSxVQUFVOzsyRkFHMUosa0JBQWtCO2tCQVQ5QixTQUFTO2lDQUNNLElBQUksWUFDTixZQUFZLG1CQUdMLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxhQUN6SixDQUFDLG1CQUFtQixDQUFDOzswQkFpRTNCLFFBQVE7NENBOURTLFNBQVM7c0JBQTlCLFdBQVc7dUJBQUMsT0FBTztnQkFDTSxZQUFZO3NCQUFyQyxXQUFXO3VCQUFDLFdBQVc7Z0JBR1EsTUFBTTtzQkFBckMsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBQ1AsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxNQUFNO3NCQUFyQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxZQUFZO3NCQUEzQixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ2lCLFNBQVM7c0JBQS9CLEtBQUs7dUJBQUMsT0FBTztnQkFDWSxhQUFhO3NCQUF0QyxLQUFLO3VCQUFDLFVBQVU7Z0JBQ1EsWUFBWTtzQkFBcEMsS0FBSzt1QkFBQyxTQUFTO2dCQUNlLGlCQUFpQjtzQkFBL0MsS0FBSzt1QkFBQyxlQUFlO2dCQUNOLGFBQWE7c0JBQTVCLEtBQUs7Z0JBRW1CLGtCQUFrQjtzQkFBMUMsTUFBTTt1QkFBQyxRQUFRO2dCQUVvQixjQUFjO3NCQUFqRCxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXN5bmNQaXBlLCBOZ0lmfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NvbmZpcm1hdGlvblNlcnZpY2UsIE1lbnVJdGVtfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0J1dHRvbk1vZHVsZX0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHtDb25maXJtRGlhbG9nTW9kdWxlfSBmcm9tICdwcmltZW5nL2NvbmZpcm1kaWFsb2cnO1xuaW1wb3J0IHtNZW51LCBNZW51TW9kdWxlfSBmcm9tICdwcmltZW5nL21lbnUnO1xuaW1wb3J0IHtSaXBwbGVNb2R1bGV9IGZyb20gJ3ByaW1lbmcvcmlwcGxlJztcbmltcG9ydCB7U3BsaXRCdXR0b25Nb2R1bGV9IGZyb20gJ3ByaW1lbmcvc3BsaXRidXR0b24nO1xuaW1wb3J0IHtUb29sdGlwTW9kdWxlfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBvZn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7TWVkaXVzUXVlcnlQYXJhbX0gZnJvbSAnLi4vLi4vYXBpL21vZGVscyc7XG5pbXBvcnQge0lEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uTGlua0Rlc2NyaXB0b3J9IGZyb20gJy4uLy4uL2Rlc2NyaXB0b3JzL2FjdGlvbic7XG5pbXBvcnQge01uZ0NvbXBvbmVudERpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge0lWaWV3Q29udGFpbmVyLCBJVmlld0NvbnRhaW5lclRhYmxlfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdQYXJhbWV0cml6ZVBpcGV9IGZyb20gJy4uLy4uL3BpcGVzJztcbmltcG9ydCB7TW5nUm91dGVyRGF0YX0gZnJvbSAnLi4vLi4vcm91dGVyL21vZGVscyc7XG5pbXBvcnQge01uZ0F1dGhvcml6YXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9zZWN1cml0eSc7XG5pbXBvcnQge0FQZXJtaXNzaW9ucywgUGVybWlzc2lvbnN9IGZyb20gJy4uLy4uL3NlY3VyaXR5L21vZGVsJztcbmltcG9ydCB7TW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlLCBNbmdWaWV3Q29udGFpbmVyQ29tcG9uZW50U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtJZFR5cGV9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7STE4blV0aWxzfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQge0FjdGlvbkNvbnRleHRWYWxpZGF0aW9uLCBBY3Rpb25EYXRhLCBBY3Rpb25JbnN0YW5jZSwgQWN0aW9uUGFyYW1ldGVycywgSUFjdGlvbkNvbXBvbmVudCwgSUFjdGlvbkNvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJy4vbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ21uZy1hY3Rpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hY3Rpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2FjdGlvbi5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtBc3luY1BpcGUsIE5nSWYsIEJ1dHRvbk1vZHVsZSwgUmlwcGxlTW9kdWxlLCBUb29sdGlwTW9kdWxlLCBNbmdQYXJhbWV0cml6ZVBpcGUsIE1uZ0NvbXBvbmVudERpcmVjdGl2ZSwgQ29uZmlybURpYWxvZ01vZHVsZSwgU3BsaXRCdXR0b25Nb2R1bGUsIE1lbnVNb2R1bGVdLFxuICAgIHByb3ZpZGVyczogW0NvbmZpcm1hdGlvblNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIE1uZ0FjdGlvbkNvbXBvbmVudDxULCBTPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIElBY3Rpb25Db25maXJtYXRpb25TZXJ2aWNlIHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgaG9zdENsYXNzID0gJ21uZy1hY3Rpb24tYnV0dG9uJztcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm0tMCcpIGlzSG9zdEhpZGRlbiA9IGZhbHNlO1xuXG4gICAgLy8gbWV0YWRhdGEgYW5kIGVkaXRvciBtb2RlIGlucHV0XG4gICAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pIHB1YmxpYyBhY3Rpb24hOiBBY3Rpb25EZXNjcmlwdG9yPFQ+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpdGVtPzogVDtcbiAgICBASW5wdXQoKSBwdWJsaWMgaXRlbUlkPzogSWRUeXBlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YTtcbiAgICBASW5wdXQoKSBwdWJsaWMgcXVlcnlQYXJhbT86IE1lZGl1c1F1ZXJ5UGFyYW07XG4gICAgQElucHV0KCkgcHVibGljIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz47XG4gICAgQElucHV0KCkgcHVibGljIGhvc3RDb21wb25lbnQ/OiB1bmtub3duO1xuICAgIEBJbnB1dCgncm91dGUnKSBwdWJsaWMgcm91dGVJbml0PzogQWN0aXZhdGVkUm91dGU7XG4gICAgQElucHV0KCdkaXNhYmxlZCcpIHB1YmxpYyBpbnB1dERpc2FibGVkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gb2YoZmFsc2UpO1xuICAgIEBJbnB1dCgnbG9hZGluZycpIHB1YmxpYyBpbnB1dExvYWRpbmc6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBvZihmYWxzZSk7XG4gICAgQElucHV0KCd2aWV3Q29udGFpbmVyJykgcHVibGljIHZpZXdDb250YWluZXJJbml0PzogSVZpZXdDb250YWluZXI8VCwgUz47XG4gICAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkSXRlbXM6IEFycmF5PFQ+ID0gW107XG5cbiAgICBAT3V0cHV0KCdmaW5pc2gnKSBwdWJsaWMgZmluaXNoRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxBY3Rpb25JbnN0YW5jZTxULCBTPj4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ3N1YmFjdGlvbnNNZW51JykgcHVibGljIHN1YmFjdGlvbnNNZW51PzogTWVudTtcblxuICAgIHByaXZhdGUgbG9hZGluZ1N1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcbiAgICBwdWJsaWMgJGxvYWRpbmc6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgcHVibGljIGNtcElkOiBzdHJpbmcgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XG4gICAgcHJpdmF0ZSBpc1Zpc2libGVTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgcHJpdmF0ZSBpc1Zpc2libGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljICRpc1Zpc2libGUgPSB0aGlzLmlzVmlzaWJsZVN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICBwcml2YXRlIGlzUGVybWl0dGVkU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgIHByaXZhdGUgaXNQZXJtaXR0ZWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljICRpc1Blcm1pdHRlZCA9IHRoaXMuaXNQZXJtaXR0ZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgcHJpdmF0ZSBpc0VuYWJsZWRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgcHJpdmF0ZSBpc0VuYWJsZWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljICRpc0VuYWJsZWQgPSB0aGlzLmlzRW5hYmxlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICBwcml2YXRlIGxhYmVsU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PHN0cmluZyB8IG51bGw+KDEpO1xuICAgIHByaXZhdGUgbGFiZWxTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljICRsYWJlbCA9IHRoaXMubGFiZWxTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgcHJpdmF0ZSB0b29sdGlwU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PHN0cmluZyB8IG51bGw+KDEpO1xuICAgIHByaXZhdGUgdG9vbHRpcFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgJHRvb2x0aXAgPSB0aGlzLnRvb2x0aXBTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG5cbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+O1xuXG4gICAgcHVibGljIGFjdGlvbkxpbms/OiBBY3Rpb25MaW5rRGVzY3JpcHRvcjxUPjtcbiAgICBwdWJsaWMgaGFzTm9UaXRsZSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgcHVibGljIHJvdXRlITogQWN0aXZhdGVkUm91dGU7IC8vIHZhbHVlIHdpbGwgYmUgZGV0ZXJtaW5lZCBpbiBuZ09uSW5pdFxuICAgIHByaXZhdGUgcm91dGVQZXJtaXNzaW9ucz86IEFQZXJtaXNzaW9ucztcblxuICAgIHB1YmxpYyBidXR0b25DbGFzcyA9ICdwLWJ1dHRvbi1wcmltYXJ5JztcbiAgICBwdWJsaWMgc3ViYWN0aW9uczogTWVudUl0ZW1bXSA9IFtdO1xuICAgIHByaXZhdGUgc3ViYWN0aW9uU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgICBwdWJsaWMgYWN0aW9uT3JTdWJhY3Rpb25IYXNSdW5Db25maXJtYXRpb24gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJvdXRlU2VydmljZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGF1dGhvcml6YXRpb246IE1uZ0F1dGhvcml6YXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFjdGlvbkV4ZWN1dG9yOiBNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB2aWV3Q29udGFpbmVyU2VydmljZTogTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2U8VCwgUz4gfCBudWxsXG4gICAgKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVWaWV3Q29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMucm91dGUgPSB0aGlzLnJvdXRlSW5pdCA/PyB0aGlzLnJvdXRlU2VydmljZTtcblxuICAgICAgICB0aGlzLmhhc05vVGl0bGUgPSB0aGlzLmFjdGlvbi5idXR0b24ubGFiZWwgPT09IG51bGw7XG4gICAgICAgIHRoaXMuaXNFbmFibGVkU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmlzVmlzaWJsZVN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5pc1Blcm1pdHRlZFN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5sYWJlbFN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgdGhpcy50b29sdGlwU3ViamVjdC5uZXh0KG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHJvdXRlRGF0YSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YSBhcyBNbmdSb3V0ZXJEYXRhO1xuICAgICAgICBpZiAodGhpcy5hY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25MaW5rRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgdGhpcy5hY3Rpb25MaW5rID0gdGhpcy5hY3Rpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnkgJiYgcm91dGVEYXRhLnRhYmxldmlld1Blcm1pc3Npb25zKSB7XG4gICAgICAgICAgICBpZiAocm91dGVEYXRhLnRhYmxldmlld1Blcm1pc3Npb25zW3RoaXMuYWN0aW9uLnRhYmxldmlld0NhdGVnb3J5XSkge1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVQZXJtaXNzaW9ucyA9IHJvdXRlRGF0YS50YWJsZXZpZXdQZXJtaXNzaW9uc1t0aGlzLmFjdGlvbi50YWJsZXZpZXdDYXRlZ29yeV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzU3Vic2NyaXB0aW9ucygpO1xuXG4gICAgICAgIGlmICh0aGlzLmFjdGlvbi5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuaG9zdENsYXNzID0gdGhpcy5hY3Rpb24uY2xhc3NOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhvc3RWaXNpYmlsaXR5U3Vic2NyaXB0aW9uID0gY29tYmluZUxhdGVzdChbdGhpcy4kaXNWaXNpYmxlLCB0aGlzLiRpc1Blcm1pdHRlZF0pLnN1YnNjcmliZSgoW2lzVmlzaWJsZSwgaXNQZXJtaXR0ZWRdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzSG9zdEhpZGRlbiA9ICFpc1Zpc2libGUgfHwgIWlzUGVybWl0dGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaG9zdFZpc2liaWxpdHlTdWJzY3JpcHRpb24pO1xuXG4gICAgICAgIHRoaXMuYnV0dG9uQ2xhc3MgPSB0aGlzLmFjdGlvbi5idXR0b24uc3R5bGVDbGFzcy5idWlsZCh0aGlzLmhhc05vVGl0bGUpO1xuXG4gICAgICAgIC8vIEhlcmUgd2UgY2hlY2sgaWYgYW4gYWN0aW9uIG9yIGFueSBzdWJhY3Rpb24gaGFzIGNvbmZpcm1hdGlvbiBkaWFsb2dcbiAgICAgICAgdGhpcy5hY3Rpb25PclN1YmFjdGlvbkhhc1J1bkNvbmZpcm1hdGlvbiA9IHRoaXMuYWN0aW9uLnN1YmFjdGlvbnMuc29tZShzdWIgPT4gc3ViLmhhc1J1bkNvbmZpcm1hdGlvbikgfHwgdGhpcy5hY3Rpb24uaGFzUnVuQ29uZmlybWF0aW9uO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShjaGFuZ2VzWydpdGVtJ10/LmZpcnN0Q2hhbmdlID8/IHRydWUpIHx8XG4gICAgICAgICAgICAhKGNoYW5nZXNbJ2l0ZW1JZCddPy5maXJzdENoYW5nZSA/PyB0cnVlKSB8fFxuICAgICAgICAgICAgIShjaGFuZ2VzWydhY3Rpb25EYXRhJ10/LmZpcnN0Q2hhbmdlID8/IHRydWUpIHx8XG4gICAgICAgICAgICAodGhpcy5hY3Rpb24uaGFzSXRlbXNTZWxlY3Rpb24gJiYgIShjaGFuZ2VzWydzZWxlY3RlZEl0ZW1zJ10/LmZpcnN0Q2hhbmdlID8/IHRydWUpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1YnNjcmlwdGlvbnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWyd2aWV3Q29udGFpbmVySW5pdCddICYmICFjaGFuZ2VzWyd2aWV3Q29udGFpbmVySW5pdCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVWaWV3Q29udGFpbmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1Zpc2libGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuaXNQZXJtaXR0ZWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuaXNFbmFibGVkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmxhYmVsU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnRvb2x0aXBTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmlnZ2VyQWN0aW9uKGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPiwgcGFyYW1ldGVycz86IEFjdGlvblBhcmFtZXRlcnM8VD4sIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKGFjdGlvbi5zdWJhY3Rpb25zQXNNZW51KSB7XG4gICAgICAgICAgICB0aGlzLnN1YmFjdGlvbnNNZW51Py50b2dnbGUoZXZlbnQgPz8gbmV3IEV2ZW50KCd0cmlnZ2VyJykpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWN0aW9uRGF0YSA9IHRoaXMuYWN0aW9uRGF0YSA/IHRoaXMuYWN0aW9uRGF0YSA6IHt9O1xuICAgICAgICBhY3Rpb25EYXRhWydjbXBJZCddID0gdGhpcy5jbXBJZDtcblxuICAgICAgICBwYXJhbWV0ZXJzID8/PSBuZXcgQWN0aW9uUGFyYW1ldGVycyh0aGlzLml0ZW1JZCwgdGhpcy5pdGVtKVxuICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKGFjdGlvbkRhdGEpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW0odGhpcy5xdWVyeVBhcmFtKVxuICAgICAgICAgICAgLndpdGhSb3V0ZSh0aGlzLnJvdXRlKVxuICAgICAgICAgICAgLndpdGhWaWV3Q29udGFpbmVyKHRoaXMudmlld0NvbnRhaW5lcilcbiAgICAgICAgICAgIC53aXRoU291cmNlQ29tcG9uZW50KHRoaXMpXG4gICAgICAgICAgICAud2l0aEhvc3RDb21wb25lbnQodGhpcy5ob3N0Q29tcG9uZW50KVxuICAgICAgICAgICAgLndpdGhTZWxlY3RlZEl0ZW1zKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG5cbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnRyaWdnZXJBY3Rpb248VCwgUz4oYWN0aW9uLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGluc3RhbmNlLmNvbnRleHQ7XG4gICAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICAgICAgLy8gbm8gY29udGV4dCBpcyBwcm92aWRlZCBpZiByb3V0aW5nIGlzIHRyaWdnZXJlZCBvciBlZGl0b3IgaXMgb3BlbmVkIHZpYSBkaWFsb2dcbiAgICAgICAgICAgIC8vIGl0IGlzIGluIGFub3RoZXIgY29tcG9uZW50IGp1cmlzZGljdGlvbiB0byBoYW5kbGUgY29udGV4dHNcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgaW5zdGFuY2UucmVzdWx0JC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2hFdmVudEVtaXR0ZXIubmV4dChpbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzSXRlbXNTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLnZpZXdDb250YWluZXIgYXMgSVZpZXdDb250YWluZXJUYWJsZTxULCBTPik/LnJlbG9hZFRhYmxlPy4oe2RhdGE6IHtldmVudDogZXZlbnR9fSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIGluc3RhbmNlLmVycm9yJC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2hFdmVudEVtaXR0ZXIubmV4dChpbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICBpbnN0YW5jZS5pc1J1bkxvYWRpbmckLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHJlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLnJ1bihjb250ZXh0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29uZmlybWF0aW9uU2VydmljZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlybWF0aW9uU2VydmljZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29uZmlybWF0aW9uU2VydmljZUluc3RhbmNlS2V5KCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5hY3Rpb24uYWN0aW9uTmFtZX1fJHt0aGlzLmNtcElkfWA7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ3VzdG9tQWN0aW9uQ21wSW5zdChpbnN0YW5jZTogSUFjdGlvbkNvbXBvbmVudDxUPikge1xuICAgICAgICBjb25zdCBjbXBJbnN0U3Vic2NyaXB0aW9uID0gaW5zdGFuY2UudHJpZ2dlckFjdGlvbkV2ZW50RW1pdHRlci5zdWJzY3JpYmUocGFyYW1zID0+IHRoaXMudHJpZ2dlckFjdGlvbih0aGlzLmFjdGlvbiwgcGFyYW1zKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGNtcEluc3RTdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1N1YmFjdGlvbnMoKTogTWVudUl0ZW1bXSB7XG4gICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zID0gW107XG5cbiAgICAgICAgY29uc3QgbWVudUl0ZW1zOiBNZW51SXRlbVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgc3ViYWN0aW9uIG9mIHRoaXMuYWN0aW9uLnN1YmFjdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lbnVJdGVtID0ge30gYXMgTWVudUl0ZW07XG5cbiAgICAgICAgICAgIG1lbnVJdGVtLmljb24gPSBzdWJhY3Rpb24uYnV0dG9uLmljb24gPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgSTE4blV0aWxzLkFjdGlvbi5nZXRBc3luYyh0aGlzLnRyYW5zbGF0ZSwgc3ViYWN0aW9uLCAndGl0bGUnLCBzdWJhY3Rpb24uYnV0dG9uLmxhYmVsID8/IHVuZGVmaW5lZCwgdGhpcy5pdGVtKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4gKG1lbnVJdGVtLmxhYmVsID0gcmVzISlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIEkxOG5VdGlscy5BY3Rpb24uZ2V0QXN5bmModGhpcy50cmFuc2xhdGUsIHN1YmFjdGlvbiwgJ3Rvb2x0aXAnLCB0aGlzLmFjdGlvbi5idXR0b24udG9vbHRpcCwgdGhpcy5pdGVtKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4gKG1lbnVJdGVtLnRvb2x0aXAgPSByZXMhKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0gbmV3IEFjdGlvblBhcmFtZXRlcnModGhpcy5pdGVtSWQsIHRoaXMuaXRlbSlcbiAgICAgICAgICAgICAgICAud2l0aEFjdGlvbkRhdGEodGhpcy5hY3Rpb25EYXRhKVxuICAgICAgICAgICAgICAgIC53aXRoVmlld0NvbnRhaW5lcih0aGlzLnZpZXdDb250YWluZXIgPz8gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIC53aXRoU291cmNlQ29tcG9uZW50KHRoaXMpO1xuXG4gICAgICAgICAgICBpZiAoc3ViYWN0aW9uLmhhc0l0ZW1zU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycy53aXRoU2VsZWN0ZWRJdGVtcyh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5hY3Rpb25FeGVjdXRvci5wcmVwYXJlQWN0aW9uQ29udGV4dFZhbGlkYXRpb24oc3ViYWN0aW9uLCBwYXJhbWV0ZXJzLCB0aGlzLmRhdGFQcm92aWRlcik7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3ViYWN0aW9uLmlzRW5hYmxlZEZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHN1YmFjdGlvbi5pc0VuYWJsZWRGdW5jdGlvbihjb250ZXh0KS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IChtZW51SXRlbS5kaXNhYmxlZCA9ICFyZXMpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3ViYWN0aW9uLmlzVmlzaWJsZUZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHN1YmFjdGlvbi5pc1Zpc2libGVGdW5jdGlvbihjb250ZXh0KS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IChtZW51SXRlbS52aXNpYmxlID0gcmVzKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1lbnVJdGVtLmNvbW1hbmQgPSAoKSA9PiB0aGlzLnRyaWdnZXJBY3Rpb24oc3ViYWN0aW9uKTtcblxuICAgICAgICAgICAgbWVudUl0ZW1zLnB1c2gobWVudUl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZW51SXRlbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzU3Vic2NyaXB0aW9ucygpIHtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IG5ldyBBY3Rpb25QYXJhbWV0ZXJzKHRoaXMuaXRlbUlkLCB0aGlzLml0ZW0pXG4gICAgICAgICAgICAud2l0aEFjdGlvbkRhdGEodGhpcy5hY3Rpb25EYXRhKVxuICAgICAgICAgICAgLndpdGhWaWV3Q29udGFpbmVyKHRoaXMudmlld0NvbnRhaW5lciA/PyB1bmRlZmluZWQpXG4gICAgICAgICAgICAud2l0aFNvdXJjZUNvbXBvbmVudCh0aGlzKTtcblxuICAgICAgICBpZiAodGhpcy5hY3Rpb24uaGFzSXRlbXNTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHBhcmFtZXRlcnMud2l0aFNlbGVjdGVkSXRlbXModGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnByZXBhcmVBY3Rpb25Db250ZXh0VmFsaWRhdGlvbih0aGlzLmFjdGlvbiwgcGFyYW1ldGVycywgdGhpcy5kYXRhUHJvdmlkZXIpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3Rpb24uaXNWaXNpYmxlRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5pc1Zpc2libGVTdWJzY3JpcHRpb24gPSB0aGlzLmFjdGlvbi5pc1Zpc2libGVGdW5jdGlvbihjb250ZXh0KS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB0aGlzLmlzVmlzaWJsZVN1YmplY3QubmV4dChyZXMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWN0aW9uLnBlcm1pc3Npb25zICE9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgdGhpcy5yb3V0ZVBlcm1pc3Npb25zICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5pc1Blcm1pdHRlZFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25zID1cbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbi5wZXJtaXNzaW9ucyAmJiB0aGlzLnJvdXRlUGVybWlzc2lvbnNcbiAgICAgICAgICAgICAgICAgICAgPyBQZXJtaXNzaW9ucy5BbGwub2YodGhpcy5yb3V0ZVBlcm1pc3Npb25zLCB0aGlzLmFjdGlvbi5wZXJtaXNzaW9ucylcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnJvdXRlUGVybWlzc2lvbnMgPz8gdGhpcy5hY3Rpb24ucGVybWlzc2lvbnMhO1xuICAgICAgICAgICAgdGhpcy5pc1Zpc2libGVTdWJzY3JpcHRpb24gPSB0aGlzLmF1dGhvcml6YXRpb24uaXNQZXJtaXR0ZWQocGVybWlzc2lvbnMsIHRoaXMucm91dGUuc25hcHNob3QsIGNvbnRleHQgYXMgQWN0aW9uQ29udGV4dFZhbGlkYXRpb248dW5rbm93biwgdW5rbm93bj4pLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IHRoaXMuaXNQZXJtaXR0ZWRTdWJqZWN0Lm5leHQocmVzKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjdGlvbi5pc0VuYWJsZWRGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5pc0VuYWJsZWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmlzRW5hYmxlZFN1YnNjcmlwdGlvbiA9IHRoaXMuYWN0aW9uLmlzRW5hYmxlZEZ1bmN0aW9uKGNvbnRleHQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IHRoaXMuaXNFbmFibGVkU3ViamVjdC5uZXh0KHJlcylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmhhc05vVGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMubGFiZWxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmxhYmVsU3Vic2NyaXB0aW9uID0gSTE4blV0aWxzLkFjdGlvbi5nZXRBc3luYyh0aGlzLnRyYW5zbGF0ZSwgdGhpcy5hY3Rpb24sICd0aXRsZScsIHRoaXMuYWN0aW9uLmJ1dHRvbi5sYWJlbCA/PyB1bmRlZmluZWQsIHRoaXMuaXRlbSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBpMThuID0+IHRoaXMubGFiZWxTdWJqZWN0Lm5leHQoaTE4bilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b29sdGlwU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy5hY3Rpb24uYnV0dG9uLnRvb2x0aXApIHtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcFN1YnNjcmlwdGlvbiA9IEkxOG5VdGlscy5BY3Rpb24uZ2V0QXN5bmModGhpcy50cmFuc2xhdGUsIHRoaXMuYWN0aW9uLCAndG9vbHRpcCcsIHRoaXMuYWN0aW9uLmJ1dHRvbi50b29sdGlwLCB0aGlzLml0ZW0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGkxOG4gPT4gdGhpcy50b29sdGlwU3ViamVjdC5uZXh0KGkxOG4pXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3ViYWN0aW9ucyA9IHRoaXMucHJvY2Vzc1N1YmFjdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVWaWV3Q29udGFpbmVyKCkge1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXIgPSB0aGlzLnZpZXdDb250YWluZXJJbml0ID8/IHRoaXMudmlld0NvbnRhaW5lclNlcnZpY2UgPz8gdW5kZWZpbmVkO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIoJGlzVmlzaWJsZSB8IGFzeW5jKSAmJiAoJGlzUGVybWl0dGVkIHwgYXN5bmMpXCI+XG4gICAgPGFcbiAgICAgICAgKm5nSWY9XCJhY3Rpb25MaW5rICYmIGFjdGlvbkxpbmsudXJsICE9PSAnJzsgZWxzZSByb3V0ZXJMaW5rXCJcbiAgICAgICAgcEJ1dHRvblxuICAgICAgICBwUmlwcGxlXG4gICAgICAgIFtsYWJlbF09XCIoJGxhYmVsIHwgYXN5bmMpID8/ICcnXCJcbiAgICAgICAgW2ljb25dPVwiJGFueShhY3Rpb24uYnV0dG9uLmljb24pXCJcbiAgICAgICAgW2ljb25Qb3NdPVwiYWN0aW9uLmJ1dHRvbi5pY29uUG9zaXRpb25cIlxuICAgICAgICBbaHJlZl09XCIoJGlzRW5hYmxlZCB8IGFzeW5jKSA9PT0gZmFsc2UgfHwgKChpbnB1dERpc2FibGVkIHwgYXN5bmMpID8/IGZhbHNlKSA/IG51bGwgOiAoYWN0aW9uTGluay51cmwgfCBwYXJhbWV0cml6ZSA6IGl0ZW1JZCA6IGl0ZW0gOiBhY3Rpb25EYXRhKVwiXG4gICAgICAgIFt0YXJnZXRdPVwiYWN0aW9uTGluay50YXJnZXRcIlxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiKCRpc0VuYWJsZWQgfCBhc3luYykgPT09IGZhbHNlIHx8ICgoaW5wdXREaXNhYmxlZCB8IGFzeW5jKSA/PyBmYWxzZSlcIlxuICAgICAgICBbcFRvb2x0aXBdPVwiKCR0b29sdGlwIHwgYXN5bmMpID8/IHVuZGVmaW5lZFwiXG4gICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiYWN0aW9uLmJ1dHRvbi50b29sdGlwUG9zaXRpb24gPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzXCI+PC9hPlxuICAgIDxuZy10ZW1wbGF0ZSAjcm91dGVyTGluaz5cbiAgICAgICAgPGFcbiAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uTGluazsgZWxzZSBjdXN0b21Db21wb25lbnRcIlxuICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgW2ljb25dPVwiJGFueShhY3Rpb24uYnV0dG9uLmljb24pXCJcbiAgICAgICAgICAgIFtpY29uUG9zXT1cImFjdGlvbi5idXR0b24uaWNvblBvc2l0aW9uXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCIoJGxhYmVsIHwgYXN5bmMpID8/ICcnXCJcbiAgICAgICAgICAgIFt0YXJnZXRdPVwiYWN0aW9uTGluay50YXJnZXRcIlxuICAgICAgICAgICAgW3JlcGxhY2VVcmxdPVwiYWN0aW9uTGluay5yZXBsYWNlVXJsXCJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIigkaXNFbmFibGVkIHwgYXN5bmMpID09PSBmYWxzZSB8fCAoKGlucHV0RGlzYWJsZWQgfCBhc3luYykgPz8gZmFsc2UpID8gbnVsbCA6IChhY3Rpb25MaW5rLnBhdGhTZWdtZW50cyB8IHBhcmFtZXRyaXplIDogaXRlbUlkIDogaXRlbSA6IGFjdGlvbkRhdGEpXCJcbiAgICAgICAgICAgIFtyZWxhdGl2ZVRvXT1cInJvdXRlXCJcbiAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJhY3Rpb25MaW5rLnF1ZXJ5UGFyYW1zIHwgcGFyYW1ldHJpemUgOiBpdGVtSWQgOiBpdGVtIDogYWN0aW9uRGF0YVwiXG4gICAgICAgICAgICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJhY3Rpb25MaW5rLnF1ZXJ5UGFyYW1zSGFuZGxpbmdcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIigkaXNFbmFibGVkIHwgYXN5bmMpID09PSBmYWxzZSB8fCAoKGlucHV0RGlzYWJsZWQgfCBhc3luYykgPz8gZmFsc2UpXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCIoJHRvb2x0aXAgfCBhc3luYykgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiYWN0aW9uLmJ1dHRvbi50b29sdGlwUG9zaXRpb24gPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc1wiPjwvYT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjY3VzdG9tQ29tcG9uZW50PlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cImFjdGlvbi5jb21wb25lbnQ7IGVsc2Ugc3BsaXRCdXR0b25cIlxuICAgICAgICAgICAgW21uZ0NvbXBvbmVudF09XCJhY3Rpb24uY29tcG9uZW50XCJcbiAgICAgICAgICAgIFtpbnB1dHNdPVwie1xuICAgICAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgaXRlbUlkOiBpdGVtSWQsXG4gICAgICAgICAgICAgICAgYWN0aW9uRGF0YTogYWN0aW9uRGF0YSxcbiAgICAgICAgICAgICAgICBlbmFibGVkOiAkaXNFbmFibGVkLFxuICAgICAgICAgICAgICAgIGxvYWRpbmc6ICRsb2FkaW5nLFxuICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXI6IHZpZXdDb250YWluZXJcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKGluc3RhbmNlQ3JlYXRlZCk9XCJvbkN1c3RvbUFjdGlvbkNtcEluc3QoJGV2ZW50KVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjc3BsaXRCdXR0b24+XG4gICAgICAgIDxwLXNwbGl0QnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImFjdGlvbi5zdWJhY3Rpb25zLmxlbmd0aCA+IDAgJiYgIWFjdGlvbi5zdWJhY3Rpb25zQXNNZW51OyBlbHNlIGJ1dHRvblwiXG4gICAgICAgICAgICBbaWNvbl09XCJhY3Rpb24uYnV0dG9uLmljb24gPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIFtpY29uUG9zXT1cImFjdGlvbi5idXR0b24uaWNvblBvc2l0aW9uXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCIoJGxhYmVsIHwgYXN5bmMpID8/ICcnXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCIoJHRvb2x0aXAgfCBhc3luYykgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiYWN0aW9uLmJ1dHRvbi50b29sdGlwUG9zaXRpb24gPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoJGlzRW5hYmxlZCB8IGFzeW5jKSA9PT0gZmFsc2UgfHwgKChpbnB1dERpc2FibGVkIHwgYXN5bmMpID8/IGZhbHNlKVwiXG4gICAgICAgICAgICAob25DbGljayk9XCJ0cmlnZ2VyQWN0aW9uKGFjdGlvbilcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzXCJcbiAgICAgICAgICAgIFttb2RlbF09XCJzdWJhY3Rpb25zXCI+XG4gICAgICAgIDwvcC1zcGxpdEJ1dHRvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtpY29uXT1cIiRhbnkoYWN0aW9uLmJ1dHRvbi5pY29uKVwiXG4gICAgICAgICAgICBbaWNvblBvc109XCJhY3Rpb24uYnV0dG9uLmljb25Qb3NpdGlvblwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiKCRsYWJlbCB8IGFzeW5jKSA/PyAnJ1wiXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiKCR0b29sdGlwIHwgYXN5bmMpID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cImFjdGlvbi5idXR0b24udG9vbHRpcFBvc2l0aW9uID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCIoKCRsb2FkaW5nIHwgYXN5bmMpID8/IGZhbHNlKSB8fCAoKGlucHV0TG9hZGluZyB8IGFzeW5jKSA/PyBmYWxzZSlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIigkaXNFbmFibGVkIHwgYXN5bmMpID09PSBmYWxzZSB8fCAoKGlucHV0RGlzYWJsZWQgfCBhc3luYykgPz8gZmFsc2UpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0cmlnZ2VyQWN0aW9uKGFjdGlvbiwgdW5kZWZpbmVkLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc1wiPjwvYnV0dG9uPlxuICAgICAgICA8cC1tZW51ICNzdWJhY3Rpb25zTWVudSBbbW9kZWxdPVwic3ViYWN0aW9uc1wiIFtwb3B1cF09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cIm1uZy1hY3Rpb24tbWVudVwiPjwvcC1tZW51PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPHAtY29uZmlybURpYWxvZ1xuICAgICAgICAqbmdJZj1cImFjdGlvbk9yU3ViYWN0aW9uSGFzUnVuQ29uZmlybWF0aW9uXCJcbiAgICAgICAgW2tleV09XCJhY3Rpb24uYWN0aW9uTmFtZSArICdfJyArIGNtcElkXCJcbiAgICAgICAgW2Jhc2VaSW5kZXhdPVwiNTBcIlxuICAgICAgICBhcHBlbmRUbz1cImJvZHlcIlxuICAgICAgICBbY2xvc2FibGVdPVwiYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3I/LmNsb3NhYmxlID8/IHRydWVcIj48L3AtY29uZmlybURpYWxvZz5cbjwvbmctY29udGFpbmVyPlxuIl19
316
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vYWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vYWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBZ0MsUUFBUSxFQUFFLE1BQU0sRUFBaUIsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdLLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsbUJBQW1CLEVBQVcsTUFBTSxhQUFhLENBQUM7QUFDMUQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFVBQVUsRUFBRSxhQUFhLEVBQWdCLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFdEcsT0FBTyxFQUFDLGdCQUFnQixFQUFD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TUFBTSxXQUN0QyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLGFBQ3pKLENBQUMsbUJBQW1CLENBQUM7OzBCQW1FM0IsUUFBUTs0Q0FoRVMsU0FBUztzQkFBOUIsV0FBVzt1QkFBQyxPQUFPO2dCQUNNLFlBQVk7c0JBQXJDLFdBQVc7dUJBQUMsV0FBVztnQkFHUSxNQUFNO3NCQUFyQyxLQUFLO3VCQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQztnQkFDUCxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFDaUIsU0FBUztzQkFBL0IsS0FBSzt1QkFBQyxPQUFPO2dCQUNZLGFBQWE7c0JBQXRDLEtBQUs7dUJBQUMsVUFBVTtnQkFDUSxZQUFZO3NCQUFwQyxLQUFLO3VCQUFDLFNBQVM7Z0JBQ2UsaUJBQWlCO3NCQUEvQyxLQUFLO3VCQUFDLGVBQWU7Z0JBQ04sYUFBYTtzQkFBNUIsS0FBSztnQkFFbUIsa0JBQWtCO3NCQUExQyxNQUFNO3VCQUFDLFFBQVE7Z0JBRW9CLGNBQWM7c0JBQWpELFNBQVM7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBc3luY1BpcGUsIE5nSWZ9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q29uZmlybWF0aW9uU2VydmljZSwgTWVudUl0ZW19IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7QnV0dG9uTW9kdWxlfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQge0NvbmZpcm1EaWFsb2dNb2R1bGV9IGZyb20gJ3ByaW1lbmcvY29uZmlybWRpYWxvZyc7XG5pbXBvcnQge01lbnUsIE1lbnVNb2R1bGV9IGZyb20gJ3ByaW1lbmcvbWVudSc7XG5pbXBvcnQge1JpcHBsZU1vZHVsZX0gZnJvbSAncHJpbWVuZy9yaXBwbGUnO1xuaW1wb3J0IHtTcGxpdEJ1dHRvbk1vZHVsZX0gZnJvbSAncHJpbWVuZy9zcGxpdGJ1dHRvbic7XG5pbXBvcnQge1Rvb2x0aXBNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XG5pbXBvcnQge09ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiwgY29tYmluZUxhdGVzdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG9mfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtNZWRpdXNRdWVyeVBhcmFtfSBmcm9tICcuLi8uLi9hcGkvbW9kZWxzJztcbmltcG9ydCB7SURhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9yLCBBY3Rpb25MaW5rRGVzY3JpcHRvcn0gZnJvbSAnLi4vLi4vZGVzY3JpcHRvcnMvYWN0aW9uJztcbmltcG9ydCB7TW5nQ29tcG9uZW50RGlyZWN0aXZlfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7SVZpZXdDb250YWluZXIsIElWaWV3Q29udGFpbmVyVGFibGV9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge01uZ1BhcmFtZXRyaXplUGlwZX0gZnJvbSAnLi4vLi4vcGlwZXMnO1xuaW1wb3J0IHtNbmdSb3V0ZXJEYXRhfSBmcm9tICcuLi8uLi9yb3V0ZXIvbW9kZWxzJztcbmltcG9ydCB7TW5nQXV0aG9yaXphdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uL3NlY3VyaXR5JztcbmltcG9ydCB7QVBlcm1pc3Npb25zLCBQZXJtaXNzaW9uc30gZnJvbSAnLi4vLi4vc2VjdXJpdHkvbW9kZWwnO1xuaW1wb3J0IHtNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UsIE1uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0lkVHlwZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtJMThuVXRpbHN9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7QWN0aW9uQ29udGV4dFZhbGlkYXRpb24sIEFjdGlvbkRhdGEsIEFjdGlvbkluc3RhbmNlLCBBY3Rpb25QYXJhbWV0ZXJzLCBJQWN0aW9uQ29tcG9uZW50LCBJQWN0aW9uQ29uZmlybWF0aW9uU2VydmljZX0gZnJvbSAnLi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWFjdGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYWN0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW0FzeW5jUGlwZSwgTmdJZiwgQnV0dG9uTW9kdWxlLCBSaXBwbGVNb2R1bGUsIFRvb2x0aXBNb2R1bGUsIE1uZ1BhcmFtZXRyaXplUGlwZSwgTW5nQ29tcG9uZW50RGlyZWN0aXZlLCBDb25maXJtRGlhbG9nTW9kdWxlLCBTcGxpdEJ1dHRvbk1vZHVsZSwgTWVudU1vZHVsZV0sXG4gICAgcHJvdmlkZXJzOiBbQ29uZmlybWF0aW9uU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgTW5nQWN0aW9uQ29tcG9uZW50PFQsIFM+IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgSUFjdGlvbkNvbmZpcm1hdGlvblNlcnZpY2Uge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKSBob3N0Q2xhc3MgPSAnbW5nLWFjdGlvbi1idXR0b24nO1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MubS0wJykgaXNIb3N0SGlkZGVuID0gZmFsc2U7XG5cbiAgICAvLyBtZXRhZGF0YSBhbmQgZWRpdG9yIG1vZGUgaW5wdXRcbiAgICBASW5wdXQoe3JlcXVpcmVkOiB0cnVlfSkgcHVibGljIGFjdGlvbiE6IEFjdGlvbkRlc2NyaXB0b3I8VD47XG4gICAgQElucHV0KCkgcHVibGljIGl0ZW0/OiBUO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpdGVtSWQ/OiBJZFR5cGU7XG4gICAgQElucHV0KCkgcHVibGljIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBxdWVyeVBhcmFtPzogTWVkaXVzUXVlcnlQYXJhbTtcbiAgICBASW5wdXQoKSBwdWJsaWMgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPjtcbiAgICBASW5wdXQoKSBwdWJsaWMgaG9zdENvbXBvbmVudD86IHVua25vd247XG4gICAgQElucHV0KCdyb3V0ZScpIHB1YmxpYyByb3V0ZUluaXQ/OiBBY3RpdmF0ZWRSb3V0ZTtcbiAgICBASW5wdXQoJ2Rpc2FibGVkJykgcHVibGljIGlucHV0RGlzYWJsZWQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBvZihmYWxzZSk7XG4gICAgQElucHV0KCdsb2FkaW5nJykgcHVibGljIGlucHV0TG9hZGluZzogT2JzZXJ2YWJsZTxib29sZWFuPiA9IG9mKGZhbHNlKTtcbiAgICBASW5wdXQoJ3ZpZXdDb250YWluZXInKSBwdWJsaWMgdmlld0NvbnRhaW5lckluaXQ/OiBJVmlld0NvbnRhaW5lcjxULCBTPjtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWRJdGVtczogQXJyYXk8VD4gPSBbXTtcblxuICAgIEBPdXRwdXQoJ2ZpbmlzaCcpIHB1YmxpYyBmaW5pc2hFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEFjdGlvbkluc3RhbmNlPFQsIFM+PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnc3ViYWN0aW9uc01lbnUnKSBwdWJsaWMgc3ViYWN0aW9uc01lbnU/OiBNZW51O1xuXG4gICAgcHJpdmF0ZSBsb2FkaW5nU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgIHB1YmxpYyAkbG9hZGluZzogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMubG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBwdWJsaWMgY21wSWQ6IHN0cmluZyA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKTtcbiAgICBwcml2YXRlIGlzVmlzaWJsZVN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcbiAgICBwcml2YXRlIGlzVmlzaWJsZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgJGlzVmlzaWJsZSA9IHRoaXMuaXNWaXNpYmxlU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIHByaXZhdGUgaXNQZXJtaXR0ZWRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgcHJpdmF0ZSBpc1Blcm1pdHRlZFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgJGlzUGVybWl0dGVkID0gdGhpcy5pc1Blcm1pdHRlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICBwcml2YXRlIGlzRW5hYmxlZFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcbiAgICBwcml2YXRlIGlzRW5hYmxlZFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgJGlzRW5hYmxlZCA9IHRoaXMuaXNFbmFibGVkU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIHByaXZhdGUgbGFiZWxTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nIHwgbnVsbD4oMSk7XG4gICAgcHJpdmF0ZSBsYWJlbFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgJGxhYmVsID0gdGhpcy5sYWJlbFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICBwcml2YXRlIHRvb2x0aXBTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nIHwgbnVsbD4oMSk7XG4gICAgcHJpdmF0ZSB0b29sdGlwU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyAkdG9vbHRpcCA9IHRoaXMudG9vbHRpcFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcblxuICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz47XG5cbiAgICBwdWJsaWMgYWN0aW9uTGluaz86IEFjdGlvbkxpbmtEZXNjcmlwdG9yPFQ+O1xuICAgIHB1YmxpYyBoYXNOb1RpdGxlID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICBwdWJsaWMgcm91dGUhOiBBY3RpdmF0ZWRSb3V0ZTsgLy8gdmFsdWUgd2lsbCBiZSBkZXRlcm1pbmVkIGluIG5nT25Jbml0XG4gICAgcHJpdmF0ZSByb3V0ZVBlcm1pc3Npb25zPzogQVBlcm1pc3Npb25zO1xuXG4gICAgcHVibGljIGJ1dHRvbkNsYXNzID0gJ3AtYnV0dG9uLXByaW1hcnknO1xuICAgIHB1YmxpYyBzdWJhY3Rpb25zOiBNZW51SXRlbVtdID0gW107XG4gICAgcHJpdmF0ZSBzdWJhY3Rpb25TdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICAgIHB1YmxpYyBhY3Rpb25PclN1YmFjdGlvbkhhc1J1bkNvbmZpcm1hdGlvbiA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcm91dGVTZXJ2aWNlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYXV0aG9yaXphdGlvbjogTW5nQXV0aG9yaXphdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWN0aW9uRXhlY3V0b3I6IE1uZ0FjdGlvbkV4ZWN1dG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHZpZXdDb250YWluZXJTZXJ2aWNlOiBNbmdWaWV3Q29udGFpbmVyQ29tcG9uZW50U2VydmljZTxULCBTPiB8IG51bGxcbiAgICApIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVZpZXdDb250YWluZXIoKTtcbiAgICAgICAgdGhpcy5yb3V0ZSA9IHRoaXMucm91dGVJbml0ID8/IHRoaXMucm91dGVTZXJ2aWNlO1xuXG4gICAgICAgIHRoaXMuaGFzTm9UaXRsZSA9IHRoaXMuYWN0aW9uLmJ1dHRvbi5sYWJlbCA9PT0gbnVsbDtcbiAgICAgICAgdGhpcy5pc0VuYWJsZWRTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuaXNWaXNpYmxlU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmlzUGVybWl0dGVkU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmxhYmVsU3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLnRvb2x0aXBTdWJqZWN0Lm5leHQobnVsbCk7XG5cbiAgICAgICAgY29uc3Qgcm91dGVEYXRhID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhIGFzIE1uZ1JvdXRlckRhdGE7XG4gICAgICAgIGlmICh0aGlzLmFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkxpbmtEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbkxpbmsgPSB0aGlzLmFjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGlvbi50YWJsZXZpZXdDYXRlZ29yeSAmJiByb3V0ZURhdGEudGFibGV2aWV3UGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGlmIChyb3V0ZURhdGEudGFibGV2aWV3UGVybWlzc2lvbnNbdGhpcy5hY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZVBlcm1pc3Npb25zID0gcm91dGVEYXRhLnRhYmxldmlld1Blcm1pc3Npb25zW3RoaXMuYWN0aW9uLnRhYmxldmlld0NhdGVnb3J5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2Nlc3NTdWJzY3JpcHRpb25zKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5ob3N0Q2xhc3MgPSB0aGlzLmFjdGlvbi5jbGFzc05hbWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaG9zdFZpc2liaWxpdHlTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLiRpc1Zpc2libGUsIHRoaXMuJGlzUGVybWl0dGVkXSkuc3Vic2NyaWJlKChbaXNWaXNpYmxlLCBpc1Blcm1pdHRlZF0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNIb3N0SGlkZGVuID0gIWlzVmlzaWJsZSB8fCAhaXNQZXJtaXR0ZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChob3N0VmlzaWJpbGl0eVN1YnNjcmlwdGlvbik7XG5cbiAgICAgICAgdGhpcy5idXR0b25DbGFzcyA9IHRoaXMuYWN0aW9uLmJ1dHRvbi5zdHlsZUNsYXNzLmJ1aWxkKHRoaXMuaGFzTm9UaXRsZSk7XG5cbiAgICAgICAgLy8gSGVyZSB3ZSBjaGVjayBpZiBhbiBhY3Rpb24gb3IgYW55IHN1YmFjdGlvbiBoYXMgY29uZmlybWF0aW9uIGRpYWxvZ1xuICAgICAgICB0aGlzLmFjdGlvbk9yU3ViYWN0aW9uSGFzUnVuQ29uZmlybWF0aW9uID0gdGhpcy5hY3Rpb24uc3ViYWN0aW9ucy5zb21lKHN1YiA9PiBzdWIuaGFzUnVuQ29uZmlybWF0aW9uKSB8fCB0aGlzLmFjdGlvbi5oYXNSdW5Db25maXJtYXRpb247XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKGNoYW5nZXNbJ2l0ZW0nXT8uZmlyc3RDaGFuZ2UgPz8gdHJ1ZSkgfHxcbiAgICAgICAgICAgICEoY2hhbmdlc1snaXRlbUlkJ10/LmZpcnN0Q2hhbmdlID8/IHRydWUpIHx8XG4gICAgICAgICAgICAhKGNoYW5nZXNbJ2FjdGlvbkRhdGEnXT8uZmlyc3RDaGFuZ2UgPz8gdHJ1ZSkgfHxcbiAgICAgICAgICAgICh0aGlzLmFjdGlvbi5oYXNJdGVtc1NlbGVjdGlvbiAmJiAhKGNoYW5nZXNbJ3NlbGVjdGVkSXRlbXMnXT8uZmlyc3RDaGFuZ2UgPz8gdHJ1ZSkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXNbJ3ZpZXdDb250YWluZXJJbml0J10gJiYgIWNoYW5nZXNbJ3ZpZXdDb250YWluZXJJbml0J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVZpZXdDb250YWluZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLm9uQWN0aW9uRGVzdHJveSh0aGlzLmluc3RhbmNlKTtcbiAgICAgICAgdGhpcy5pc1Zpc2libGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuaXNQZXJtaXR0ZWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuaXNFbmFibGVkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmxhYmVsU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnRvb2x0aXBTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmlnZ2VyQWN0aW9uKGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPiwgcGFyYW1ldGVycz86IEFjdGlvblBhcmFtZXRlcnM8VD4sIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKGFjdGlvbi5zdWJhY3Rpb25zQXNNZW51KSB7XG4gICAgICAgICAgICB0aGlzLnN1YmFjdGlvbnNNZW51Py50b2dnbGUoZXZlbnQgPz8gbmV3IEV2ZW50KCd0cmlnZ2VyJykpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWN0aW9uRGF0YSA9IHRoaXMuYWN0aW9uRGF0YSA/IHRoaXMuYWN0aW9uRGF0YSA6IHt9O1xuICAgICAgICBhY3Rpb25EYXRhWydjbXBJZCddID0gdGhpcy5jbXBJZDtcblxuICAgICAgICBwYXJhbWV0ZXJzID8/PSBuZXcgQWN0aW9uUGFyYW1ldGVycyh0aGlzLml0ZW1JZCwgdGhpcy5pdGVtKVxuICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKGFjdGlvbkRhdGEpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW0odGhpcy5xdWVyeVBhcmFtKVxuICAgICAgICAgICAgLndpdGhSb3V0ZSh0aGlzLnJvdXRlKVxuICAgICAgICAgICAgLndpdGhWaWV3Q29udGFpbmVyKHRoaXMudmlld0NvbnRhaW5lcilcbiAgICAgICAgICAgIC53aXRoU291cmNlQ29tcG9uZW50KHRoaXMpXG4gICAgICAgICAgICAud2l0aEhvc3RDb21wb25lbnQodGhpcy5ob3N0Q29tcG9uZW50KVxuICAgICAgICAgICAgLndpdGhTZWxlY3RlZEl0ZW1zKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG5cbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnRyaWdnZXJBY3Rpb248VCwgUz4oYWN0aW9uLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gaW5zdGFuY2UuY29udGV4dDtcbiAgICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgICAgICAvLyBubyBjb250ZXh0IGlzIHByb3ZpZGVkIGlmIHJvdXRpbmcgaXMgdHJpZ2dlcmVkIG9yIGVkaXRvciBpcyBvcGVuZWQgdmlhIGRpYWxvZ1xuICAgICAgICAgICAgLy8gaXQgaXMgaW4gYW5vdGhlciBjb21wb25lbnQganVyaXNkaWN0aW9uIHRvIGhhbmRsZSBjb250ZXh0c1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICBpbnN0YW5jZS5yZXN1bHQkLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaEV2ZW50RW1pdHRlci5uZXh0KGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNJdGVtc1NlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMudmlld0NvbnRhaW5lciBhcyBJVmlld0NvbnRhaW5lclRhYmxlPFQsIFM+KT8ucmVsb2FkVGFibGU/Lih7ZGF0YToge2V2ZW50OiBldmVudH19KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgaW5zdGFuY2UuZXJyb3IkLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaEV2ZW50RW1pdHRlci5uZXh0KGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIGluc3RhbmNlLmlzUnVuTG9hZGluZyQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQocmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuYWN0aW9uRXhlY3V0b3IucnVuKGNvbnRleHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb25maXJtYXRpb25TZXJ2aWNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb25maXJtYXRpb25TZXJ2aWNlSW5zdGFuY2VLZXkoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmFjdGlvbi5hY3Rpb25OYW1lfV8ke3RoaXMuY21wSWR9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DdXN0b21BY3Rpb25DbXBJbnN0KGluc3RhbmNlOiBJQWN0aW9uQ29tcG9uZW50PFQ+KSB7XG4gICAgICAgIGNvbnN0IGNtcEluc3RTdWJzY3JpcHRpb24gPSBpbnN0YW5jZS50cmlnZ2VyQWN0aW9uRXZlbnRFbWl0dGVyLnN1YnNjcmliZShwYXJhbXMgPT4gdGhpcy50cmlnZ2VyQWN0aW9uKHRoaXMuYWN0aW9uLCBwYXJhbXMpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goY21wSW5zdFN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzU3ViYWN0aW9ucygpOiBNZW51SXRlbVtdIHtcbiAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLnN1YmFjdGlvblN1YnNjcmlwdGlvbnMgPSBbXTtcblxuICAgICAgICBjb25zdCBtZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBzdWJhY3Rpb24gb2YgdGhpcy5hY3Rpb24uc3ViYWN0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgbWVudUl0ZW0gPSB7fSBhcyBNZW51SXRlbTtcblxuICAgICAgICAgICAgbWVudUl0ZW0uaWNvbiA9IHN1YmFjdGlvbi5idXR0b24uaWNvbiA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1YmFjdGlvblN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICBJMThuVXRpbHMuQWN0aW9uLmdldEFzeW5jKHRoaXMudHJhbnNsYXRlLCBzdWJhY3Rpb24sICd0aXRsZScsIHN1YmFjdGlvbi5idXR0b24ubGFiZWwgPz8gdW5kZWZpbmVkLCB0aGlzLml0ZW0pLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiAobWVudUl0ZW0ubGFiZWwgPSByZXMhKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgSTE4blV0aWxzLkFjdGlvbi5nZXRBc3luYyh0aGlzLnRyYW5zbGF0ZSwgc3ViYWN0aW9uLCAndG9vbHRpcCcsIHRoaXMuYWN0aW9uLmJ1dHRvbi50b29sdGlwLCB0aGlzLml0ZW0pLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiAobWVudUl0ZW0udG9vbHRpcCA9IHJlcyEpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgQWN0aW9uUGFyYW1ldGVycyh0aGlzLml0ZW1JZCwgdGhpcy5pdGVtKVxuICAgICAgICAgICAgICAgIC53aXRoQWN0aW9uRGF0YSh0aGlzLmFjdGlvbkRhdGEpXG4gICAgICAgICAgICAgICAgLndpdGhWaWV3Q29udGFpbmVyKHRoaXMudmlld0NvbnRhaW5lciA/PyB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgLndpdGhTb3VyY2VDb21wb25lbnQodGhpcyk7XG5cbiAgICAgICAgICAgIGlmIChzdWJhY3Rpb24uaGFzSXRlbXNTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLndpdGhTZWxlY3RlZEl0ZW1zKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnByZXBhcmVBY3Rpb25Db250ZXh0VmFsaWRhdGlvbihzdWJhY3Rpb24sIHBhcmFtZXRlcnMsIHRoaXMuZGF0YVByb3ZpZGVyKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdWJhY3Rpb24uaXNFbmFibGVkRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YmFjdGlvblN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgc3ViYWN0aW9uLmlzRW5hYmxlZEZ1bmN0aW9uKGNvbnRleHQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4gKG1lbnVJdGVtLmRpc2FibGVkID0gIXJlcylcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2aXNpYmlsaXR5T2JzZXJ2YWJsZXM6IE9ic2VydmFibGU8Ym9vbGVhbj5bXSA9IFtdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdWJhY3Rpb24uaXNWaXNpYmxlRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5T2JzZXJ2YWJsZXMucHVzaChzdWJhY3Rpb24uaXNWaXNpYmxlRnVuY3Rpb24oY29udGV4dCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdWJhY3Rpb24ucGVybWlzc2lvbnMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eU9ic2VydmFibGVzLnB1c2godGhpcy5hdXRob3JpemF0aW9uLmlzUGVybWl0dGVkKHN1YmFjdGlvbi5wZXJtaXNzaW9ucywgdGhpcy5yb3V0ZS5zbmFwc2hvdCwgY29udGV4dCBhcyBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjx1bmtub3duLCB1bmtub3duPikpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByb3V0ZURhdGEgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEgYXMgTW5nUm91dGVyRGF0YTtcbiAgICAgICAgICAgIGlmIChzdWJhY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnkgJiYgcm91dGVEYXRhLnRhYmxldmlld1Blcm1pc3Npb25zICYmIHJvdXRlRGF0YS50YWJsZXZpZXdQZXJtaXNzaW9uc1tzdWJhY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnldKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm91dGVQZXJtaXNzaW9ucyA9IHJvdXRlRGF0YS50YWJsZXZpZXdQZXJtaXNzaW9uc1tzdWJhY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnldO1xuICAgICAgICAgICAgICAgIHZpc2liaWxpdHlPYnNlcnZhYmxlcy5wdXNoKHRoaXMuYXV0aG9yaXphdGlvbi5pc1Blcm1pdHRlZChyb3V0ZVBlcm1pc3Npb25zLCB0aGlzLnJvdXRlLnNuYXBzaG90LCBjb250ZXh0IGFzIEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPHVua25vd24sIHVua25vd24+KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QodmlzaWJpbGl0eU9ic2VydmFibGVzKS5zdWJzY3JpYmUodmlzaWJpbGl0aWVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbWVudUl0ZW0udmlzaWJsZSA9IHZpc2liaWxpdGllcy5ldmVyeSh2YWx1ZSA9PiB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIG1lbnVJdGVtLmNvbW1hbmQgPSAoKSA9PiB0aGlzLnRyaWdnZXJBY3Rpb24oc3ViYWN0aW9uKTtcblxuICAgICAgICAgICAgbWVudUl0ZW1zLnB1c2gobWVudUl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZW51SXRlbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzU3Vic2NyaXB0aW9ucygpIHtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IG5ldyBBY3Rpb25QYXJhbWV0ZXJzKHRoaXMuaXRlbUlkLCB0aGlzLml0ZW0pXG4gICAgICAgICAgICAud2l0aEFjdGlvbkRhdGEodGhpcy5hY3Rpb25EYXRhKVxuICAgICAgICAgICAgLndpdGhWaWV3Q29udGFpbmVyKHRoaXMudmlld0NvbnRhaW5lciA/PyB1bmRlZmluZWQpXG4gICAgICAgICAgICAud2l0aFNvdXJjZUNvbXBvbmVudCh0aGlzKTtcblxuICAgICAgICBpZiAodGhpcy5hY3Rpb24uaGFzSXRlbXNTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHBhcmFtZXRlcnMud2l0aFNlbGVjdGVkSXRlbXModGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnByZXBhcmVBY3Rpb25Db250ZXh0VmFsaWRhdGlvbih0aGlzLmFjdGlvbiwgcGFyYW1ldGVycywgdGhpcy5kYXRhUHJvdmlkZXIpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3Rpb24uaXNWaXNpYmxlRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5pc1Zpc2libGVTdWJzY3JpcHRpb24gPSB0aGlzLmFjdGlvbi5pc1Zpc2libGVGdW5jdGlvbihjb250ZXh0KS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB0aGlzLmlzVmlzaWJsZVN1YmplY3QubmV4dChyZXMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWN0aW9uLnBlcm1pc3Npb25zICE9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgdGhpcy5yb3V0ZVBlcm1pc3Npb25zICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5pc1Blcm1pdHRlZFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25zID1cbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbi5wZXJtaXNzaW9ucyAmJiB0aGlzLnJvdXRlUGVybWlzc2lvbnNcbiAgICAgICAgICAgICAgICAgICAgPyBQZXJtaXNzaW9ucy5BbGwub2YodGhpcy5yb3V0ZVBlcm1pc3Npb25zLCB0aGlzLmFjdGlvbi5wZXJtaXNzaW9ucylcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnJvdXRlUGVybWlzc2lvbnMgPz8gdGhpcy5hY3Rpb24ucGVybWlzc2lvbnMhO1xuICAgICAgICAgICAgdGhpcy5pc1Zpc2libGVTdWJzY3JpcHRpb24gPSB0aGlzLmF1dGhvcml6YXRpb24uaXNQZXJtaXR0ZWQocGVybWlzc2lvbnMsIHRoaXMucm91dGUuc25hcHNob3QsIGNvbnRleHQgYXMgQWN0aW9uQ29udGV4dFZhbGlkYXRpb248dW5rbm93biwgdW5rbm93bj4pLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IHRoaXMuaXNQZXJtaXR0ZWRTdWJqZWN0Lm5leHQocmVzKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjdGlvbi5pc0VuYWJsZWRGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5pc0VuYWJsZWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmlzRW5hYmxlZFN1YnNjcmlwdGlvbiA9IHRoaXMuYWN0aW9uLmlzRW5hYmxlZEZ1bmN0aW9uKGNvbnRleHQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IHRoaXMuaXNFbmFibGVkU3ViamVjdC5uZXh0KHJlcylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmhhc05vVGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMubGFiZWxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmxhYmVsU3Vic2NyaXB0aW9uID0gSTE4blV0aWxzLkFjdGlvbi5nZXRBc3luYyh0aGlzLnRyYW5zbGF0ZSwgdGhpcy5hY3Rpb24sICd0aXRsZScsIHRoaXMuYWN0aW9uLmJ1dHRvbi5sYWJlbCA/PyB1bmRlZmluZWQsIHRoaXMuaXRlbSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBpMThuID0+IHRoaXMubGFiZWxTdWJqZWN0Lm5leHQoaTE4bilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b29sdGlwU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy5hY3Rpb24uYnV0dG9uLnRvb2x0aXApIHtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcFN1YnNjcmlwdGlvbiA9IEkxOG5VdGlscy5BY3Rpb24uZ2V0QXN5bmModGhpcy50cmFuc2xhdGUsIHRoaXMuYWN0aW9uLCAndG9vbHRpcCcsIHRoaXMuYWN0aW9uLmJ1dHRvbi50b29sdGlwLCB0aGlzLml0ZW0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGkxOG4gPT4gdGhpcy50b29sdGlwU3ViamVjdC5uZXh0KGkxOG4pXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3ViYWN0aW9ucyA9IHRoaXMucHJvY2Vzc1N1YmFjdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVWaWV3Q29udGFpbmVyKCkge1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXIgPSB0aGlzLnZpZXdDb250YWluZXJJbml0ID8/IHRoaXMudmlld0NvbnRhaW5lclNlcnZpY2UgPz8gdW5kZWZpbmVkO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIoJGlzVmlzaWJsZSB8IGFzeW5jKSAmJiAoJGlzUGVybWl0dGVkIHwgYXN5bmMpXCI+XG4gICAgPGFcbiAgICAgICAgKm5nSWY9XCJhY3Rpb25MaW5rICYmIGFjdGlvbkxpbmsudXJsICE9PSAnJzsgZWxzZSByb3V0ZXJMaW5rXCJcbiAgICAgICAgcEJ1dHRvblxuICAgICAgICBwUmlwcGxlXG4gICAgICAgIFtsYWJlbF09XCIoJGxhYmVsIHwgYXN5bmMpID8/ICcnXCJcbiAgICAgICAgW2ljb25dPVwiJGFueShhY3Rpb24uYnV0dG9uLmljb24pXCJcbiAgICAgICAgW2ljb25Qb3NdPVwiYWN0aW9uLmJ1dHRvbi5pY29uUG9zaXRpb25cIlxuICAgICAgICBbaHJlZl09XCIoJGlzRW5hYmxlZCB8IGFzeW5jKSA9PT0gZmFsc2UgfHwgKChpbnB1dERpc2FibGVkIHwgYXN5bmMpID8/IGZhbHNlKSA/IG51bGwgOiAoYWN0aW9uTGluay51cmwgfCBwYXJhbWV0cml6ZSA6IGl0ZW1JZCA6IGl0ZW0gOiBhY3Rpb25EYXRhKVwiXG4gICAgICAgIFt0YXJnZXRdPVwiYWN0aW9uTGluay50YXJnZXRcIlxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiKCRpc0VuYWJsZWQgfCBhc3luYykgPT09IGZhbHNlIHx8ICgoaW5wdXREaXNhYmxlZCB8IGFzeW5jKSA/PyBmYWxzZSlcIlxuICAgICAgICBbcFRvb2x0aXBdPVwiKCR0b29sdGlwIHwgYXN5bmMpID8/IHVuZGVmaW5lZFwiXG4gICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiYWN0aW9uLmJ1dHRvbi50b29sdGlwUG9zaXRpb24gPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzXCI+PC9hPlxuICAgIDxuZy10ZW1wbGF0ZSAjcm91dGVyTGluaz5cbiAgICAgICAgPGFcbiAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uTGluazsgZWxzZSBjdXN0b21Db21wb25lbnRcIlxuICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgW2ljb25dPVwiJGFueShhY3Rpb24uYnV0dG9uLmljb24pXCJcbiAgICAgICAgICAgIFtpY29uUG9zXT1cImFjdGlvbi5idXR0b24uaWNvblBvc2l0aW9uXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCIoJGxhYmVsIHwgYXN5bmMpID8/ICcnXCJcbiAgICAgICAgICAgIFt0YXJnZXRdPVwiYWN0aW9uTGluay50YXJnZXRcIlxuICAgICAgICAgICAgW3JlcGxhY2VVcmxdPVwiYWN0aW9uTGluay5yZXBsYWNlVXJsXCJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIigkaXNFbmFibGVkIHwgYXN5bmMpID09PSBmYWxzZSB8fCAoKGlucHV0RGlzYWJsZWQgfCBhc3luYykgPz8gZmFsc2UpID8gbnVsbCA6IChhY3Rpb25MaW5rLnBhdGhTZWdtZW50cyB8IHBhcmFtZXRyaXplIDogaXRlbUlkIDogaXRlbSA6IGFjdGlvbkRhdGEpXCJcbiAgICAgICAgICAgIFtyZWxhdGl2ZVRvXT1cInJvdXRlXCJcbiAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJhY3Rpb25MaW5rLnF1ZXJ5UGFyYW1zIHwgcGFyYW1ldHJpemUgOiBpdGVtSWQgOiBpdGVtIDogYWN0aW9uRGF0YVwiXG4gICAgICAgICAgICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJhY3Rpb25MaW5rLnF1ZXJ5UGFyYW1zSGFuZGxpbmdcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIigkaXNFbmFibGVkIHwgYXN5bmMpID09PSBmYWxzZSB8fCAoKGlucHV0RGlzYWJsZWQgfCBhc3luYykgPz8gZmFsc2UpXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCIoJHRvb2x0aXAgfCBhc3luYykgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiYWN0aW9uLmJ1dHRvbi50b29sdGlwUG9zaXRpb24gPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc1wiPjwvYT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjY3VzdG9tQ29tcG9uZW50PlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cImFjdGlvbi5jb21wb25lbnQ7IGVsc2Ugc3BsaXRCdXR0b25cIlxuICAgICAgICAgICAgW21uZ0NvbXBvbmVudF09XCJhY3Rpb24uY29tcG9uZW50XCJcbiAgICAgICAgICAgIFtpbnB1dHNdPVwie1xuICAgICAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgaXRlbUlkOiBpdGVtSWQsXG4gICAgICAgICAgICAgICAgYWN0aW9uRGF0YTogYWN0aW9uRGF0YSxcbiAgICAgICAgICAgICAgICBlbmFibGVkOiAkaXNFbmFibGVkLFxuICAgICAgICAgICAgICAgIGxvYWRpbmc6ICRsb2FkaW5nLFxuICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXI6IHZpZXdDb250YWluZXJcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKGluc3RhbmNlQ3JlYXRlZCk9XCJvbkN1c3RvbUFjdGlvbkNtcEluc3QoJGV2ZW50KVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjc3BsaXRCdXR0b24+XG4gICAgICAgIDxwLXNwbGl0QnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImFjdGlvbi5zdWJhY3Rpb25zLmxlbmd0aCA+IDAgJiYgIWFjdGlvbi5zdWJhY3Rpb25zQXNNZW51OyBlbHNlIGJ1dHRvblwiXG4gICAgICAgICAgICBbaWNvbl09XCJhY3Rpb24uYnV0dG9uLmljb24gPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIFtpY29uUG9zXT1cImFjdGlvbi5idXR0b24uaWNvblBvc2l0aW9uXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCIoJGxhYmVsIHwgYXN5bmMpID8/ICcnXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCIoJHRvb2x0aXAgfCBhc3luYykgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiYWN0aW9uLmJ1dHRvbi50b29sdGlwUG9zaXRpb24gPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoJGlzRW5hYmxlZCB8IGFzeW5jKSA9PT0gZmFsc2UgfHwgKChpbnB1dERpc2FibGVkIHwgYXN5bmMpID8/IGZhbHNlKVwiXG4gICAgICAgICAgICAob25DbGljayk9XCJ0cmlnZ2VyQWN0aW9uKGFjdGlvbilcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzXCJcbiAgICAgICAgICAgIFttb2RlbF09XCJzdWJhY3Rpb25zXCI+XG4gICAgICAgIDwvcC1zcGxpdEJ1dHRvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtpY29uXT1cIiRhbnkoYWN0aW9uLmJ1dHRvbi5pY29uKVwiXG4gICAgICAgICAgICBbaWNvblBvc109XCJhY3Rpb24uYnV0dG9uLmljb25Qb3NpdGlvblwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiKCRsYWJlbCB8IGFzeW5jKSA/PyAnJ1wiXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiKCR0b29sdGlwIHwgYXN5bmMpID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cImFjdGlvbi5idXR0b24udG9vbHRpcFBvc2l0aW9uID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCIoKCRsb2FkaW5nIHwgYXN5bmMpID8/IGZhbHNlKSB8fCAoKGlucHV0TG9hZGluZyB8IGFzeW5jKSA/PyBmYWxzZSlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIigkaXNFbmFibGVkIHwgYXN5bmMpID09PSBmYWxzZSB8fCAoKGlucHV0RGlzYWJsZWQgfCBhc3luYykgPz8gZmFsc2UpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0cmlnZ2VyQWN0aW9uKGFjdGlvbiwgdW5kZWZpbmVkLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc1wiPjwvYnV0dG9uPlxuICAgICAgICA8cC1tZW51ICNzdWJhY3Rpb25zTWVudSBbbW9kZWxdPVwic3ViYWN0aW9uc1wiIFtwb3B1cF09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cIm1uZy1hY3Rpb24tbWVudVwiPjwvcC1tZW51PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPHAtY29uZmlybURpYWxvZ1xuICAgICAgICAqbmdJZj1cImFjdGlvbk9yU3ViYWN0aW9uSGFzUnVuQ29uZmlybWF0aW9uXCJcbiAgICAgICAgW2tleV09XCJhY3Rpb24uYWN0aW9uTmFtZSArICdfJyArIGNtcElkXCJcbiAgICAgICAgW2Jhc2VaSW5kZXhdPVwiNTBcIlxuICAgICAgICBhcHBlbmRUbz1cImJvZHlcIlxuICAgICAgICBbY2xvc2FibGVdPVwiYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3I/LmNsb3NhYmxlID8/IHRydWVcIj48L3AtY29uZmlybURpYWxvZz5cbjwvbmctY29udGFpbmVyPlxuIl19