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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/core/data-list/data-list-params-helpers.d.ts +82 -0
  2. package/core/descriptors/action.descriptor.d.ts +3 -3
  3. package/core/descriptors/column.descriptor.d.ts +1 -1
  4. package/core/descriptors/editor.descriptor.d.ts +6 -6
  5. package/core/descriptors/enum.descriptor.d.ts +6 -0
  6. package/core/descriptors/filter.descriptor.d.ts +1 -1
  7. package/core/descriptors/model.descriptor.d.ts +1 -1
  8. package/core/descriptors/table.descriptor.d.ts +6 -6
  9. package/core/descriptors/tableview.descriptor.d.ts +10 -10
  10. package/core/enum/enum-helpers.d.ts +49 -0
  11. package/core/error/error-helpers.d.ts +114 -0
  12. package/core/helpers/date.d.ts +14 -0
  13. package/core/helpers/object.d.ts +27 -0
  14. package/core/helpers/route.d.ts +35 -0
  15. package/core/helpers/string.d.ts +7 -0
  16. package/core/helpers/templates.d.ts +3 -0
  17. package/core/i18n/i18n-common.d.ts +6 -0
  18. package/core/i18n/i18n-error.d.ts +4 -0
  19. package/core/i18n/i18n-type.d.ts +20 -0
  20. package/core/index.d.ts +15 -9
  21. package/{model → core}/pipes/enum.pipe.d.ts +2 -2
  22. package/core/pipes/enumerate.pipe.d.ts +3 -3
  23. package/{model → core}/pipes/i18n-property.pipe.d.ts +2 -2
  24. package/core/pipes/template.pipe.d.ts +0 -2
  25. package/core/router/route-builder.d.ts +151 -30
  26. package/core/router/routes-builder.d.ts +29 -15
  27. package/core/security/permission-helpers.d.ts +3 -0
  28. package/core/security/permissions.model.d.ts +2 -2
  29. package/esm2022/core/components/notification/notification-wrapper.component.mjs +4 -4
  30. package/esm2022/core/components/pages/error/error.page.component.mjs +3 -3
  31. package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +3 -3
  32. package/esm2022/core/data-list/data-list-params-helpers.mjs +415 -0
  33. package/esm2022/core/data-list/filter-match.model.mjs +1 -1
  34. package/esm2022/core/data-providers/base.data-provider.mjs +1 -1
  35. package/esm2022/core/descriptors/action.descriptor.mjs +1 -1
  36. package/esm2022/core/descriptors/column.descriptor.mjs +1 -1
  37. package/esm2022/core/descriptors/editor.descriptor.mjs +1 -1
  38. package/esm2022/core/descriptors/enum.descriptor.mjs +2 -0
  39. package/esm2022/core/descriptors/filter.descriptor.mjs +1 -1
  40. package/esm2022/core/descriptors/model.descriptor.mjs +1 -1
  41. package/esm2022/core/descriptors/table.descriptor.mjs +1 -1
  42. package/esm2022/core/descriptors/tableview.descriptor.mjs +1 -1
  43. package/esm2022/core/directives/component.directive.mjs +4 -4
  44. package/esm2022/core/directives/dialog-keydown-handler.directive.mjs +4 -4
  45. package/esm2022/core/directives/template.directive.mjs +3 -3
  46. package/esm2022/core/enum/enum-helpers.mjs +81 -0
  47. package/esm2022/core/error/error-handler.mjs +3 -3
  48. package/esm2022/core/error/error-helpers.mjs +247 -0
  49. package/esm2022/core/helpers/coercion.mjs +1 -1
  50. package/esm2022/core/helpers/date.mjs +119 -0
  51. package/esm2022/core/helpers/object.mjs +145 -0
  52. package/esm2022/core/helpers/route.mjs +58 -0
  53. package/esm2022/core/helpers/string.mjs +57 -0
  54. package/esm2022/core/helpers/templates.mjs +4 -0
  55. package/esm2022/core/i18n/i18n-common.mjs +24 -0
  56. package/esm2022/core/i18n/i18n-error.mjs +27 -0
  57. package/esm2022/core/i18n/i18n-type.mjs +79 -0
  58. package/esm2022/core/index.mjs +17 -11
  59. package/esm2022/core/log/log-publisher-console.service.mjs +3 -3
  60. package/esm2022/core/log/logger.service.mjs +3 -3
  61. package/esm2022/core/pipes/boolean.pipe.mjs +4 -4
  62. package/esm2022/core/pipes/class-map.pipe.mjs +4 -4
  63. package/esm2022/core/pipes/enum.pipe.mjs +27 -0
  64. package/esm2022/core/pipes/enumerate-async.pipe.mjs +8 -8
  65. package/esm2022/core/pipes/enumerate.pipe.mjs +10 -10
  66. package/esm2022/core/pipes/getter.pipe.mjs +4 -4
  67. package/esm2022/core/pipes/i18n-property.pipe.mjs +19 -0
  68. package/esm2022/core/pipes/json-path.pipe.mjs +6 -6
  69. package/esm2022/core/pipes/parametrize.pipe.mjs +6 -6
  70. package/esm2022/core/pipes/template.pipe.mjs +7 -8
  71. package/esm2022/core/provide.mjs +1 -21
  72. package/esm2022/core/reflect/type-enum-metadata.mjs +1 -1
  73. package/esm2022/core/registry/type-registry.mjs +1 -1
  74. package/esm2022/core/router/route-builder.mjs +218 -107
  75. package/esm2022/core/router/routes-builder.mjs +42 -43
  76. package/esm2022/core/security/permission-helpers.mjs +14 -0
  77. package/esm2022/core/security/permission.guard.mjs +1 -1
  78. package/esm2022/core/security/permission.service.mjs +6 -6
  79. package/esm2022/core/security/permissions.model.mjs +1 -1
  80. package/esm2022/core/services/commons-configuration.service.mjs +6 -6
  81. package/esm2022/core/services/commons-init.service.mjs +4 -4
  82. package/esm2022/core/services/commons-router.service.mjs +4 -4
  83. package/esm2022/core/services/commons.service.mjs +4 -4
  84. package/esm2022/core/services/local-storage-config.service.mjs +4 -4
  85. package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +9 -10
  86. package/esm2022/filter/descriptors/filter.descriptor.mjs +1 -1
  87. package/esm2022/form/api/data-providers/lookup.data-provider.mjs +1 -1
  88. package/esm2022/form/api/descriptors/button-style.builder.mjs +1 -1
  89. package/esm2022/form/components/autocomplete/autocomplete.component.mjs +39 -45
  90. package/esm2022/form/components/date-range/date-range.component.mjs +4 -4
  91. package/esm2022/form/components/dropdown/dropdown.component.mjs +7 -7
  92. package/esm2022/form/directives/input-trim.directive.mjs +4 -4
  93. package/esm2022/model/descriptors/enum.descriptor.mjs +1 -1
  94. package/esm2022/model/descriptors/model.descriptor.mjs +4 -4
  95. package/esm2022/model/helpers/i18n.mjs +45 -0
  96. package/esm2022/model/helpers/model.mjs +71 -0
  97. package/esm2022/model/index.mjs +4 -7
  98. package/esm2022/table/api/data-providers/table.data-provider.mjs +1 -1
  99. package/esm2022/table/api/descriptors/column.descriptor.mjs +1 -1
  100. package/esm2022/table/api/descriptors/table.descriptor.mjs +36 -8
  101. package/esm2022/table/api/helpers/class-attribute-converter.mjs +1 -1
  102. package/esm2022/table/components/column-filter-full/column-filter-full.component.mjs +9 -9
  103. package/esm2022/table/components/column-value/column-value.component.mjs +12 -14
  104. package/esm2022/table/components/table/table.component.mjs +20 -37
  105. package/esm2022/table/helpers/notification.mjs +4 -4
  106. package/esm2022/table/pipes/locale-default-row-class.pipe.mjs +4 -4
  107. package/esm2022/table/pipes/table-column-filter-class.pipe.mjs +4 -4
  108. package/esm2022/table/services/data-list.service.mjs +3 -3
  109. package/esm2022/tableview/action/components/action/action.component.mjs +9 -9
  110. package/esm2022/tableview/action/components/editor/action-editor.component.mjs +4 -4
  111. package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +22 -21
  112. package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +3 -3
  113. package/esm2022/tableview/action/components/route/action-route.component.mjs +6 -5
  114. package/esm2022/tableview/action/components/table/action-table.component.mjs +12 -24
  115. package/esm2022/tableview/action/helpers/i18n.mjs +82 -0
  116. package/esm2022/tableview/action/helpers/notification.mjs +8 -8
  117. package/esm2022/tableview/action/helpers/styles.mjs +1 -1
  118. package/esm2022/tableview/action/models/execution/action-context.model.mjs +1 -1
  119. package/esm2022/tableview/action/models/execution/action-instance.model.mjs +1 -1
  120. package/esm2022/tableview/action/services/action-error-mapper.service.mjs +1 -1
  121. package/esm2022/tableview/action/services/action-executor.service.mjs +10 -9
  122. package/esm2022/tableview/action/services/component-action-executor.service.mjs +3 -3
  123. package/esm2022/tableview/action/services/data-provider-executor.service.mjs +3 -3
  124. package/esm2022/tableview/action/services/navigation.service.mjs +4 -4
  125. package/esm2022/tableview/action/services/providers/provide-view-container.mjs +1 -1
  126. package/esm2022/tableview/action/services/root-action-executor.service.mjs +3 -3
  127. package/esm2022/tableview/action/services/view-container.service.mjs +3 -3
  128. package/esm2022/tableview/api/action/descriptors/action-confirmation.descriptor.mjs +1 -1
  129. package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +9 -1
  130. package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +1 -1
  131. package/esm2022/tableview/api/action/helpers/data-provider-executors.mjs +1 -1
  132. package/esm2022/tableview/api/action/models/execution/action-instance.model.mjs +1 -1
  133. package/esm2022/tableview/api/editor/data-providers/editor.data-provider.mjs +1 -1
  134. package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +21 -32
  135. package/esm2022/tableview/api/editor/descriptors/field-action.descriptor.mjs +1 -1
  136. package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +3 -3
  137. package/esm2022/tableview/api/editor/descriptors/field-group.descriptor.mjs +3 -3
  138. package/esm2022/tableview/api/editor/descriptors/field-lookup.descriptor.mjs +8 -8
  139. package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +1 -1
  140. package/esm2022/tableview/api/editor/descriptors/field-validation.descriptor.mjs +1 -1
  141. package/esm2022/tableview/api/editor/descriptors/field.descriptor.mjs +39 -10
  142. package/esm2022/tableview/api/editor/helpers/class-attribute-converter.mjs +1 -1
  143. package/esm2022/tableview/api/editor/helpers/field-validators.mjs +15 -25
  144. package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +1 -1
  145. package/esm2022/tableview/api/editor/models/field.model.mjs +1 -1
  146. package/esm2022/tableview/api/editor/models/form-editor.event.mjs +1 -1
  147. package/esm2022/tableview/api/editor/models/form-editor.interface.mjs +1 -1
  148. package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +3 -3
  149. package/esm2022/tableview/api/editor/models/formly-field.model.mjs +1 -1
  150. package/esm2022/tableview/api/tableview/data-providers/tableview.data-provider.mjs +1 -1
  151. package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +15 -22
  152. package/esm2022/tableview/api/tableview/helpers/class-attribute-converter.mjs +1 -1
  153. package/esm2022/tableview/api/tableview/helpers/files-export.mjs +1 -1
  154. package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +4 -4
  155. package/esm2022/tableview/api/tableview/helpers/tableview-input-builder.mjs +1 -1
  156. package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +158 -138
  157. package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +4 -4
  158. package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +5 -7
  159. package/esm2022/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.mjs +3 -3
  160. package/esm2022/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.mjs +103 -0
  161. package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +5 -7
  162. package/esm2022/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +3 -3
  163. package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +33 -50
  164. package/esm2022/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.mjs +3 -3
  165. package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +8 -10
  166. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +6 -8
  167. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +19 -18
  168. package/esm2022/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +3 -3
  169. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +4 -4
  170. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +4 -4
  171. package/esm2022/tableview/editor/helpers/editor-formly.mjs +343 -0
  172. package/esm2022/tableview/editor/helpers/formly-config.mjs +5 -3
  173. package/esm2022/tableview/editor/models/formly-config.model.mjs +1 -1
  174. package/esm2022/tableview/editor/services/formly-config.provider.mjs +1 -1
  175. package/esm2022/tableview/index.mjs +3 -5
  176. package/esm2022/tableview/provide.mjs +2 -1
  177. package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +10 -10
  178. package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +30 -56
  179. package/esm2022/tableview/tableview/router/tableview-route-builder.mjs +17 -43
  180. package/fesm2022/mediusinc-mng-commons-core.mjs +1599 -1496
  181. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
  182. package/fesm2022/mediusinc-mng-commons-filter.mjs +8 -9
  183. package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
  184. package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
  185. package/fesm2022/mediusinc-mng-commons-form.mjs +51 -56
  186. package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
  187. package/fesm2022/mediusinc-mng-commons-model.mjs +99 -148
  188. package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
  189. package/fesm2022/mediusinc-mng-commons-table-api.mjs +35 -7
  190. package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
  191. package/fesm2022/mediusinc-mng-commons-table.mjs +48 -65
  192. package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
  193. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +105 -96
  194. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
  195. package/fesm2022/mediusinc-mng-commons-tableview.mjs +865 -868
  196. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
  197. package/filter/descriptors/filter.descriptor.d.ts +2 -2
  198. package/form/components/autocomplete/autocomplete.component.d.ts +8 -7
  199. package/model/descriptors/model.descriptor.d.ts +2 -2
  200. package/model/helpers/i18n.d.ts +10 -0
  201. package/model/helpers/model.d.ts +5 -0
  202. package/model/index.d.ts +2 -4
  203. package/package.json +7 -7
  204. package/table/api/descriptors/table.descriptor.d.ts +10 -0
  205. package/table/components/column-value/column-value.component.d.ts +3 -4
  206. package/table/components/table/table.component.d.ts +13 -13
  207. package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +1 -3
  208. package/tableview/action/components/route/action-route.component.d.ts +1 -1
  209. package/tableview/action/components/table/action-table.component.d.ts +6 -6
  210. package/tableview/action/helpers/i18n.d.ts +22 -0
  211. package/tableview/action/models/execution/action-instance-state.model.d.ts +21 -21
  212. package/tableview/action/models/execution/action-instance.model.d.ts +2 -1
  213. package/tableview/action/services/action-executor.service.d.ts +1 -1
  214. package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +9 -1
  215. package/tableview/api/action/descriptors/action.descriptor.d.ts +3 -3
  216. package/tableview/api/action/models/action.type.d.ts +2 -2
  217. package/tableview/api/action/models/execution/action-instance-state.model.d.ts +21 -21
  218. package/tableview/api/action/models/execution/action-instance.model.d.ts +2 -1
  219. package/tableview/api/editor/descriptors/editor.descriptor.d.ts +16 -21
  220. package/tableview/api/editor/descriptors/field-action.descriptor.d.ts +2 -2
  221. package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +29 -29
  222. package/tableview/api/editor/descriptors/field-group.descriptor.d.ts +9 -9
  223. package/tableview/api/editor/descriptors/field-lookup.descriptor.d.ts +4 -4
  224. package/tableview/api/editor/descriptors/field-many.descriptor.d.ts +4 -4
  225. package/tableview/api/editor/descriptors/field-validation.descriptor.d.ts +10 -13
  226. package/tableview/api/editor/descriptors/field.descriptor.d.ts +17 -2
  227. package/tableview/api/editor/helpers/field-validators.d.ts +6 -2
  228. package/tableview/api/editor/models/editor-fields.model.d.ts +9 -7
  229. package/tableview/api/editor/models/field.model.d.ts +16 -7
  230. package/tableview/api/editor/models/form-editor.event.d.ts +6 -4
  231. package/tableview/api/editor/models/form-editor.interface.d.ts +37 -8
  232. package/tableview/api/editor/models/formly-custom-field.model.d.ts +1 -1
  233. package/tableview/api/editor/models/formly-field.model.d.ts +9 -7
  234. package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +8 -9
  235. package/tableview/editor/components/editor/form-editor.component.d.ts +51 -35
  236. package/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.d.ts +22 -0
  237. package/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.d.ts +5 -7
  238. package/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +0 -1
  239. package/tableview/editor/helpers/editor-formly.d.ts +11 -0
  240. package/tableview/editor/models/formly-config.model.d.ts +1 -1
  241. package/tableview/index.d.ts +2 -2
  242. package/tableview/tableview/components/route/tableview-route.component.d.ts +2 -2
  243. package/tableview/tableview/components/tableview/tableview.component.d.ts +16 -15
  244. package/tableview/tableview/router/tableview-route-builder.d.ts +7 -13
  245. package/version-info.json +11 -0
  246. package/core/data-list/data-list-params.util.d.ts +0 -84
  247. package/core/enum/enum.util.d.ts +0 -51
  248. package/core/error/error.util.d.ts +0 -116
  249. package/core/security/permission.util.d.ts +0 -5
  250. package/core/utils/date.util.d.ts +0 -20
  251. package/core/utils/i18n.util.d.ts +0 -36
  252. package/core/utils/object.util.d.ts +0 -31
  253. package/core/utils/route.util.d.ts +0 -37
  254. package/core/utils/string.util.d.ts +0 -9
  255. package/esm2022/core/data-list/data-list-params.util.mjs +0 -417
  256. package/esm2022/core/enum/enum.util.mjs +0 -83
  257. package/esm2022/core/error/error.util.mjs +0 -249
  258. package/esm2022/core/security/permission.util.mjs +0 -16
  259. package/esm2022/core/utils/date.util.mjs +0 -136
  260. package/esm2022/core/utils/i18n.util.mjs +0 -137
  261. package/esm2022/core/utils/object.util.mjs +0 -147
  262. package/esm2022/core/utils/route.util.mjs +0 -60
  263. package/esm2022/core/utils/string.util.mjs +0 -59
  264. package/esm2022/model/pipes/enum.pipe.mjs +0 -26
  265. package/esm2022/model/pipes/i18n-property.pipe.mjs +0 -19
  266. package/esm2022/model/utils/i18n.util.mjs +0 -51
  267. package/esm2022/model/utils/model.util.mjs +0 -73
  268. package/esm2022/tableview/action/utils/i18n.util.mjs +0 -126
  269. package/esm2022/tableview/editor/utils/editor-formly.util.mjs +0 -337
  270. package/model/utils/i18n.util.d.ts +0 -15
  271. package/model/utils/model.util.d.ts +0 -8
  272. package/tableview/action/utils/i18n.util.d.ts +0 -48
  273. package/tableview/editor/utils/editor-formly.util.d.ts +0 -12
@@ -102,4 +102,4 @@ export class DynamicTableviewDataProvider extends DynamicTableviewDataProviderIn
102
102
  return new DynamicTableviewDataProviderInst(serviceType);
103
103
  }
104
104
  }
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LmRhdGEtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvYXBpL3NyYy90YWJsZXZpZXcvZGF0YS1wcm92aWRlcnMvdGFibGV2aWV3LmRhdGEtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUEwQyxnQkFBZ0IsRUFBd0MsTUFBTSw2QkFBNkIsQ0FBQztBQUM3SSxPQUFPLEVBQXFCLGlCQUFpQixFQUEyRixNQUFNLGtDQUFrQyxDQUFDO0FBRWpMLE9BQU8sRUFDSCxrQkFBa0IsRUFPckIsTUFBTSxrREFBa0QsQ0FBQztBQVcxRCxNQUFNLE9BQU8seUJBUVQsU0FBUSxnQkFBMEQ7SUFNbEUsWUFBc0IsSUFBZ0IsRUFBRSxXQUF5QjtRQUM3RCxLQUFLLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQyxZQUFZLENBQTJDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN2SCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsWUFBWSxDQUEyRCxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDekksQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7SUFDekMsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENB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USx5QkFPakg7SUFDRyxZQUFzQixXQUF5QjtRQUMzQyxLQUFLLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyw0QkFBNkIsU0FBUSxnQ0FBZ0M7SUFDOUU7UUFDSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNO1FBQ2hCLE9BQU8sSUFBSSxnQ0FBZ0MsQ0FBWSxTQUFTLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU0sTUFBTSxDQUFDLFdBQVcsQ0FBVSxXQUFzQztRQUNyRSxPQUFPLElBQUksZ0NBQWdDLENBQXFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2xhc3NPcHRUeXBlLCBDbGFzc1R5cGUsIERhdGFMaXN0UGFyYW1zLCBEYXRhUHJvdmlkZXJJbnN0LCBTZXJ2aWNlQ2xhc3NPcHRUeXBlLCBTZXJ2aWNlQ2xhc3NUeXBlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtJVGFibGVEYXRhUHJvdmlkZXIsIFRhYmxlRGF0YVByb3ZpZGVyLCBUYWJsZURhdGFQcm92aWRlckdldEFsbEVhZ2VyRm5UeXBlLCBUYWJsZURhdGFQcm92aWRlckdldEFsbEZuVHlwZSwgVGFibGVEYXRhUHJvdmlkZXJJbnN0fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxlL2FwaSc7XG5cbmltcG9ydCB7XG4gICAgRWRpdG9yRGF0YVByb3ZpZGVyLFxuICAgIEVkaXRvckRhdGFQcm92aWRlckNyZWF0ZUZuVHlwZSxcbiAgICBFZGl0b3JEYXRhUHJvdmlkZXJEZWxldGVGblR5cGUsXG4gICAgRWRpdG9yRGF0YVByb3ZpZGVyRmV0Y2hGblR5cGUsXG4gICAgRWRpdG9yRGF0YVByb3ZpZGVySW5zdCxcbiAgICBFZGl0b3JEYXRhUHJvdmlkZXJVcGRhdGVGblR5cGUsXG4gICAgSUVkaXRvckRhdGFQcm92aWRlclxufSBmcm9tICcuLi8uLi9lZGl0b3IvZGF0YS1wcm92aWRlcnMvZWRpdG9yLmRhdGEtcHJvdmlkZXInO1xuXG5leHBvcnQgdHlwZSBJVGFibGV2aWV3RGF0YVByb3ZpZGVyPFxuICAgIE1vZGVsID0gYW55LFxuICAgIFNlcnZpY2UgPSBhbnksXG4gICAgU29ydHMgPSBrZXlvZiBNb2RlbCxcbiAgICBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWwsXG4gICAgTW9kZWxDbGFzcyA9IENsYXNzT3B0VHlwZTxNb2RlbD4sXG4gICAgU2VydmljZUNsYXNzID0gU2VydmljZUNsYXNzT3B0VHlwZTxTZXJ2aWNlPlxuPiA9IElFZGl0b3JEYXRhUHJvdmlkZXI8TW9kZWwsIFNlcnZpY2UsIE1vZGVsQ2xhc3MsIFNlcnZpY2VDbGFzcz4gJiBJVGFibGVEYXRhUHJvdmlkZXI8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCBNb2RlbENsYXNzLCBTZXJ2aWNlQ2xhc3M+O1xuXG5leHBvcnQgY2xhc3MgVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxcbiAgICAgICAgTW9kZWwsXG4gICAgICAgIFNlcnZpY2UgPSBhbnksXG4gICAgICAgIFNvcnRzID0ga2V5b2YgTW9kZWwsXG4gICAgICAgIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBNb2RlbCxcbiAgICAgICAgTW9kZWxDbGFzcyA9IENsYXNzT3B0VHlwZTxNb2RlbD4sXG4gICAgICAgIFNlcnZpY2VDbGFzcyA9IFNlcnZpY2VDbGFzc09wdFR5cGU8U2VydmljZT5cbiAgICA+XG4gICAgZXh0ZW5kcyBEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCBTZXJ2aWNlLCBNb2RlbENsYXNzLCBTZXJ2aWNlQ2xhc3M+XG4gICAgaW1wbGVtZW50cyBJVGFibGV2aWV3RGF0YVByb3ZpZGVyPE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycywgTW9kZWxDbGFzcywgU2VydmljZUNsYXNzPlxue1xuICAgIHByb3RlY3RlZCByZWFkb25seSBlZGl0b3JEYXRhUHJvdmlkZXI6IEVkaXRvckRhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIE1vZGVsQ2xhc3MsIFNlcnZpY2VDbGFzcz47XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRhYmxlRGF0YVByb3ZpZGVyOiBUYWJsZURhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCBNb2RlbENsYXNzLCBTZXJ2aWNlQ2xhc3M+O1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHR5cGU6IE1vZGVsQ2xhc3MsIHNlcnZpY2VUeXBlOiBTZXJ2aWNlQ2xhc3MpIHtcbiAgICAgICAgc3VwZXIodHlwZSwgc2VydmljZVR5cGUpO1xuICAgICAgICB0aGlzLmVkaXRvckRhdGFQcm92aWRlciA9IEVkaXRvckRhdGFQcm92aWRlci5mcm9tQW55UGFyYW08TW9kZWwsIFNlcnZpY2UsIE1vZGVsQ2xhc3MsIFNlcnZpY2VDbGFzcz4odHlwZSwgc2VydmljZVR5cGUpO1xuICAgICAgICB0aGlzLnRhYmxlRGF0YVByb3ZpZGVyID0gVGFibGVEYXRhUHJvdmlkZXIuZnJvbUFueVBhcmFtPE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycywgTW9kZWxDbGFzcywgU2VydmljZUNsYXNzPih0eXBlLCBzZXJ2aWNlVHlwZSk7XG4gICAgfVxuXG4gICAgZ2V0IGlzTGF6eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVEYXRhUHJvdmlkZXIuaXNMYXp5O1xuICAgIH1cblxuICAgIGdldCBnZXRBbGxSZWxvYWQkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZURhdGFQcm92aWRlci5nZXRBbGxSZWxvYWQkO1xuICAgIH1cblxuICAgIGdldCBnZXRBbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlRGF0YVByb3ZpZGVyLmdldEFsbDtcbiAgICB9XG5cbiAgICBnZXQgZmV0Y2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvckRhdGFQcm92aWRlci5mZXRjaDtcbiAgICB9XG5cbiAgICBnZXQgY3JlYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JEYXRhUHJvdmlkZXIuY3JlYXRlO1xuICAgIH1cblxuICAgIGdldCB1cGRhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvckRhdGFQcm92aWRlci51cGRhdGU7XG4gICAgfVxuXG4gICAgZ2V0IGRlbGV0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yRGF0YVByb3ZpZGVyLmRlbGV0ZTtcbiAgICB9XG5cbiAgICBnZXRBbGxSZWxvYWQocXVlcnlQYXJhbT86IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPik6IHZvaWQge1xuICAgICAgICB0aGlzLnRhYmxlRGF0YVByb3ZpZGVyLmdldEFsbFJlbG9hZChxdWVyeVBhcmFtKTtcbiAgICB9XG5cbiAgICB3aXRoR2V0QWxsKGZuOiBUYWJsZURhdGFQcm92aWRlckdldEFsbEZuVHlwZTxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnM+KTogdGhpcyB7XG4gICAgICAgIHRoaXMudGFibGVEYXRhUHJvdmlkZXIud2l0aEdldEFsbChmbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdpdGhHZXRBbGxFYWdlcmx5KGZuOiBUYWJsZURhdGFQcm92aWRlckdldEFsbEVhZ2VyRm5UeXBlPE1vZGVsLCBTZXJ2aWNlPik6IHRoaXMge1xuICAgICAgICB0aGlzLnRhYmxlRGF0YVByb3ZpZGVyLndpdGhHZXRBbGxFYWdlcmx5KGZuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aEZldGNoKGZuOiBFZGl0b3JEYXRhUHJvdmlkZXJGZXRjaEZuVHlwZTxNb2RlbCwgU2VydmljZT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5lZGl0b3JEYXRhUHJvdmlkZXIud2l0aEZldGNoKGZuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aENyZWF0ZShmbj86IEVkaXRvckRhdGFQcm92aWRlckNyZWF0ZUZuVHlwZTxNb2RlbCwgU2VydmljZT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5lZGl0b3JEYXRhUHJvdmlkZXIud2l0aENyZWF0ZShmbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdpdGhVcGRhdGUoZm4/OiBFZGl0b3JEYXRhUHJvdmlkZXJVcGRhdGVGblR5cGU8TW9kZWwsIFNlcnZpY2U+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuZWRpdG9yRGF0YVByb3ZpZGVyLndpdGhVcGRhdGUoZm4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoRGVsZXRlKGZuPzogRWRpdG9yRGF0YVByb3ZpZGVyRGVsZXRlRm5UeXBlPE1vZGVsLCBTZXJ2aWNlPik6IHRoaXMge1xuICAgICAgICB0aGlzLmVkaXRvckRhdGFQcm92aWRlci53aXRoRGVsZXRlKGZuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGV2aWV3RGF0YVByb3ZpZGVyIGV4dGVuZHMgVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxhbnk+IHtcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZTxNb2RlbCwgU29ydHMgPSBrZXlvZiBNb2RlbCwgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGtleW9mIE1vZGVsPigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCB1bmRlZmluZWQsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIHVuZGVmaW5lZD4odW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUNsYXNzPE1vZGVsLCBTb3J0cyA9IGtleW9mIE1vZGVsLCBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWw+KHR5cGU6IENsYXNzVHlwZTxNb2RlbD4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCB1bmRlZmluZWQsIFNvcnRzLCBGaWx0ZXJzLCBDbGFzc1R5cGU8TW9kZWw+LCB1bmRlZmluZWQ+KHR5cGUsIHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQ2xhc3NXaXRoU2VydmljZTxNb2RlbCwgU2VydmljZSwgU29ydHMgPSBrZXlvZiBNb2RlbCwgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGtleW9mIE1vZGVsPihcbiAgICAgICAgdHlwZTogQ2xhc3NUeXBlPE1vZGVsPixcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT5cbiAgICApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycywgQ2xhc3NUeXBlPE1vZGVsPiwgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPj4odHlwZSwgc2VydmljZVR5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbVNlcnZpY2U8U2VydmljZSwgTW9kZWwsIFNvcnRzID0ga2V5b2YgTW9kZWwsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBNb2RlbD4oXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+XG4gICAgKTogVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnMsIHVuZGVmaW5lZCwgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPj4ge1xuICAgICAgICByZXR1cm4gbmV3IFRhYmxldmlld0RhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4+KHVuZGVmaW5lZCwgc2VydmljZVR5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUFueVBhcmFtPE1vZGVsLCBTb3J0cyA9IGtleW9mIE1vZGVsLCBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWw+KCk6IFRhYmxldmlld0RhdGFQcm92aWRlckluc3Q8XG4gICAgICAgIE1vZGVsLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIFNvcnRzLFxuICAgICAgICBGaWx0ZXJzLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZFxuICAgID47XG4gICAgcHVibGljIHN0YXRpYyBmcm9tQW55UGFyYW08TW9kZWwsIFNvcnRzID0ga2V5b2YgTW9kZWwsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBNb2RlbD4oXG4gICAgICAgIHR5cGU6IENsYXNzVHlwZTxNb2RlbD5cbiAgICApOiBUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCB1bmRlZmluZWQsIFNvcnRzLCBGaWx0ZXJzLCBDbGFzc1R5cGU8TW9kZWw+LCB1bmRlZmluZWQ+O1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUFueVBhcmFtPE1vZGVsLCBTZXJ2aWNlID0gYW55LCBTb3J0cyA9IGtleW9mIE1vZGVsLCBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWw+KFxuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+XG4gICAgKTogVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnMsIHVuZGVmaW5lZCwgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPj47XG4gICAgcHVibGljIHN0YXRpYyBmcm9tQW55UGFyYW08TW9kZWwsIFNlcnZpY2UgPSBhbnksIFNvcnRzID0ga2V5b2YgTW9kZWwsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBNb2RlbD4oXG4gICAgICAgIHR5cGU6IENsYXNzVHlwZTxNb2RlbD4sXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+XG4gICAgKTogVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnMsIENsYXNzVHlwZTxNb2RlbD4sIFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4+O1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUFueVBhcmFtPFxuICAgICAgICBNb2RlbCxcbiAgICAgICAgU2VydmljZSxcbiAgICAgICAgU29ydHMgPSBrZXlvZiBNb2RlbCxcbiAgICAgICAgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGtleW9mIE1vZGVsLFxuICAgICAgICBNb2RlbENsYXNzID0gQ2xhc3NUeXBlPE1vZGVsPixcbiAgICAgICAgU2VydmljZUNsYXNzID0gU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPlxuICAgID4odHlwZT86IE1vZGVsQ2xhc3MsIHNlcnZpY2VUeXBlPzogU2VydmljZUNsYXNzKTogVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnMsIE1vZGVsQ2xhc3MsIFNlcnZpY2VDbGFzcz47XG4gICAgcHVibGljIHN0YXRpYyBmcm9tQW55UGFyYW08XG4gICAgICAgIE1vZGVsLFxuICAgICAgICBTZXJ2aWNlID0gYW55LFxuICAgICAgICBTb3J0cyA9IGtleW9mIE1vZGVsLFxuICAgICAgICBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWwsXG4gICAgICAgIE1vZGVsQ2xhc3MgPSBDbGFzc1R5cGU8TW9kZWw+LFxuICAgICAgICBTZXJ2aWNlQ2xhc3MgPSBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+XG4gICAgPih0eXBlPzogTW9kZWxDbGFzcywgc2VydmljZVR5cGU/OiBTZXJ2aWNlQ2xhc3MpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0eXBlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBzZXJ2aWNlVHlwZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICA/IFRhYmxldmlld0RhdGFQcm92aWRlci5mcm9tQ2xhc3NXaXRoU2VydmljZTxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnM+KHR5cGUgYXMgQ2xhc3NUeXBlPE1vZGVsPiwgc2VydmljZVR5cGUgYXMgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPilcbiAgICAgICAgICAgICAgICA6IFRhYmxldmlld0RhdGFQcm92aWRlci5mcm9tQ2xhc3M8TW9kZWwsIFNvcnRzLCBGaWx0ZXJzPih0eXBlIGFzIENsYXNzVHlwZTxNb2RlbD4pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZXJ2aWNlVHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBUYWJsZXZpZXdEYXRhUHJvdmlkZXIuZnJvbVNlcnZpY2U8U2VydmljZSwgTW9kZWwsIFNvcnRzLCBGaWx0ZXJzPihzZXJ2aWNlVHlwZSBhcyBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBUYWJsZXZpZXdEYXRhUHJvdmlkZXIuY3JlYXRlPE1vZGVsLCBTb3J0cywgRmlsdGVycz4oKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIER5bmFtaWNUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PFNlcnZpY2UgPSBhbnksIFNlcnZpY2VDbGFzcyA9IFNlcnZpY2VDbGFzc09wdFR5cGU8U2VydmljZT4+IGV4dGVuZHMgVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxcbiAgICBhbnksXG4gICAgU2VydmljZSxcbiAgICBhbnksXG4gICAgYW55LFxuICAgIHVuZGVmaW5lZCxcbiAgICBTZXJ2aWNlQ2xhc3Ncbj4ge1xuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihzZXJ2aWNlVHlwZTogU2VydmljZUNsYXNzKSB7XG4gICAgICAgIHN1cGVyKHVuZGVmaW5lZCwgc2VydmljZVR5cGUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIER5bmFtaWNUYWJsZXZpZXdEYXRhUHJvdmlkZXIgZXh0ZW5kcyBEeW5hbWljVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdCB7XG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlKCk6IER5bmFtaWNUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gbmV3IER5bmFtaWNUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21TZXJ2aWNlPFNlcnZpY2U+KHNlcnZpY2VUeXBlOiBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+KTogRHluYW1pY1RhYmxldmlld0RhdGFQcm92aWRlckluc3Q8U2VydmljZSwgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPj4ge1xuICAgICAgICByZXR1cm4gbmV3IER5bmFtaWNUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PFNlcnZpY2UsIFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4+KHNlcnZpY2VUeXBlKTtcbiAgICB9XG59XG4iXX0=
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LmRhdGEtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvYXBpL3NyYy90YWJsZXZpZXcvZGF0YS1wcm92aWRlcnMvdGFibGV2aWV3LmRhdGEtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUEwQyxnQkFBZ0IsRUFBd0MsTUFBTSw2QkFBNkIsQ0FBQztBQUM3SSxPQUFPLEVBQXFCLGlCQUFpQixFQUEyRixNQUFNLGtDQUFrQyxDQUFDO0FBRWpMLE9BQU8sRUFDSCxrQkFBa0IsRUFPckIsTUFBTSxrREFBa0QsQ0FBQztBQVcxRCxNQUFNLE9BQU8seUJBUVQsU0FBUSxnQkFBMEQ7SUFNbEUsWUFBc0IsSUFBZ0IsRUFBRSxXQUF5QjtRQUM3RCxLQUFLLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQyxZQUFZLENBQTJDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN2SCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsWUFBWSxDQUEyRCxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDekksQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7SUFDekMsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENB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Q0FDSjtBQUVELE1BQU0sT0FBTyxnQ0FBNkYsU0FBUSx5QkFPakg7SUFDRyxZQUFzQixXQUF5QjtRQUMzQyxLQUFLLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyw0QkFBNkIsU0FBUSxnQ0FBZ0M7SUFDOUU7UUFDSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNO1FBQ2hCLE9BQU8sSUFBSSxnQ0FBZ0MsQ0FBWSxTQUFTLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU0sTUFBTSxDQUFDLFdBQVcsQ0FBVSxXQUFzQztRQUNyRSxPQUFPLElBQUksZ0NBQWdDLENBQXFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2xhc3NPcHRUeXBlLCBDbGFzc1R5cGUsIERhdGFMaXN0UGFyYW1zLCBEYXRhUHJvdmlkZXJJbnN0LCBTZXJ2aWNlQ2xhc3NPcHRUeXBlLCBTZXJ2aWNlQ2xhc3NUeXBlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtJVGFibGVEYXRhUHJvdmlkZXIsIFRhYmxlRGF0YVByb3ZpZGVyLCBUYWJsZURhdGFQcm92aWRlckdldEFsbEVhZ2VyRm5UeXBlLCBUYWJsZURhdGFQcm92aWRlckdldEFsbEZuVHlwZSwgVGFibGVEYXRhUHJvdmlkZXJJbnN0fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxlL2FwaSc7XG5cbmltcG9ydCB7XG4gICAgRWRpdG9yRGF0YVByb3ZpZGVyLFxuICAgIEVkaXRvckRhdGFQcm92aWRlckNyZWF0ZUZuVHlwZSxcbiAgICBFZGl0b3JEYXRhUHJvdmlkZXJEZWxldGVGblR5cGUsXG4gICAgRWRpdG9yRGF0YVByb3ZpZGVyRmV0Y2hGblR5cGUsXG4gICAgRWRpdG9yRGF0YVByb3ZpZGVySW5zdCxcbiAgICBFZGl0b3JEYXRhUHJvdmlkZXJVcGRhdGVGblR5cGUsXG4gICAgSUVkaXRvckRhdGFQcm92aWRlclxufSBmcm9tICcuLi8uLi9lZGl0b3IvZGF0YS1wcm92aWRlcnMvZWRpdG9yLmRhdGEtcHJvdmlkZXInO1xuXG5leHBvcnQgdHlwZSBJVGFibGV2aWV3RGF0YVByb3ZpZGVyPFxuICAgIE1vZGVsID0gYW55LFxuICAgIFNlcnZpY2UgPSBhbnksXG4gICAgU29ydHMgPSBrZXlvZiBNb2RlbCxcbiAgICBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWwsXG4gICAgTW9kZWxDbGFzcyA9IENsYXNzT3B0VHlwZTxNb2RlbD4sXG4gICAgU2VydmljZUNsYXNzID0gU2VydmljZUNsYXNzT3B0VHlwZTxTZXJ2aWNlPlxuPiA9IElFZGl0b3JEYXRhUHJvdmlkZXI8TW9kZWwsIFNlcnZpY2UsIE1vZGVsQ2xhc3MsIFNlcnZpY2VDbGFzcz4gJiBJVGFibGVEYXRhUHJvdmlkZXI8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCBNb2RlbENsYXNzLCBTZXJ2aWNlQ2xhc3M+O1xuXG5leHBvcnQgY2xhc3MgVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxcbiAgICAgICAgTW9kZWwsXG4gICAgICAgIFNlcnZpY2UgPSBhbnksXG4gICAgICAgIFNvcnRzID0ga2V5b2YgTW9kZWwsXG4gICAgICAgIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBNb2RlbCxcbiAgICAgICAgTW9kZWxDbGFzcyA9IENsYXNzT3B0VHlwZTxNb2RlbD4sXG4gICAgICAgIFNlcnZpY2VDbGFzcyA9IFNlcnZpY2VDbGFzc09wdFR5cGU8U2VydmljZT5cbiAgICA+XG4gICAgZXh0ZW5kcyBEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCBTZXJ2aWNlLCBNb2RlbENsYXNzLCBTZXJ2aWNlQ2xhc3M+XG4gICAgaW1wbGVtZW50cyBJVGFibGV2aWV3RGF0YVByb3ZpZGVyPE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycywgTW9kZWxDbGFzcywgU2VydmljZUNsYXNzPlxue1xuICAgIHByb3RlY3RlZCByZWFkb25seSBlZGl0b3JEYXRhUHJvdmlkZXI6IEVkaXRvckRhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIE1vZGVsQ2xhc3MsIFNlcnZpY2VDbGFzcz47XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRhYmxlRGF0YVByb3ZpZGVyOiBUYWJsZURhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCBNb2RlbENsYXNzLCBTZXJ2aWNlQ2xhc3M+O1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHR5cGU6IE1vZGVsQ2xhc3MsIHNlcnZpY2VUeXBlOiBTZXJ2aWNlQ2xhc3MpIHtcbiAgICAgICAgc3VwZXIodHlwZSwgc2VydmljZVR5cGUpO1xuICAgICAgICB0aGlzLmVkaXRvckRhdGFQcm92aWRlciA9IEVkaXRvckRhdGFQcm92aWRlci5mcm9tQW55UGFyYW08TW9kZWwsIFNlcnZpY2UsIE1vZGVsQ2xhc3MsIFNlcnZpY2VDbGFzcz4odHlwZSwgc2VydmljZVR5cGUpO1xuICAgICAgICB0aGlzLnRhYmxlRGF0YVByb3ZpZGVyID0gVGFibGVEYXRhUHJvdmlkZXIuZnJvbUFueVBhcmFtPE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycywgTW9kZWxDbGFzcywgU2VydmljZUNsYXNzPih0eXBlLCBzZXJ2aWNlVHlwZSk7XG4gICAgfVxuXG4gICAgZ2V0IGlzTGF6eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVEYXRhUHJvdmlkZXIuaXNMYXp5O1xuICAgIH1cblxuICAgIGdldCBnZXRBbGxSZWxvYWQkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZURhdGFQcm92aWRlci5nZXRBbGxSZWxvYWQkO1xuICAgIH1cblxuICAgIGdldCBnZXRBbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlRGF0YVByb3ZpZGVyLmdldEFsbDtcbiAgICB9XG5cbiAgICBnZXQgZmV0Y2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvckRhdGFQcm92aWRlci5mZXRjaDtcbiAgICB9XG5cbiAgICBnZXQgY3JlYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JEYXRhUHJvdmlkZXIuY3JlYXRlO1xuICAgIH1cblxuICAgIGdldCB1cGRhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvckRhdGFQcm92aWRlci51cGRhdGU7XG4gICAgfVxuXG4gICAgZ2V0IGRlbGV0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yRGF0YVByb3ZpZGVyLmRlbGV0ZTtcbiAgICB9XG5cbiAgICBnZXRBbGxSZWxvYWQocXVlcnlQYXJhbT86IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPik6IHZvaWQge1xuICAgICAgICB0aGlzLnRhYmxlRGF0YVByb3ZpZGVyLmdldEFsbFJlbG9hZChxdWVyeVBhcmFtKTtcbiAgICB9XG5cbiAgICB3aXRoR2V0QWxsKGZuOiBUYWJsZURhdGFQcm92aWRlckdldEFsbEZuVHlwZTxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnM+KTogdGhpcyB7XG4gICAgICAgIHRoaXMudGFibGVEYXRhUHJvdmlkZXIud2l0aEdldEFsbChmbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdpdGhHZXRBbGxFYWdlcmx5KGZuOiBUYWJsZURhdGFQcm92aWRlckdldEFsbEVhZ2VyRm5UeXBlPE1vZGVsLCBTZXJ2aWNlPik6IHRoaXMge1xuICAgICAgICB0aGlzLnRhYmxlRGF0YVByb3ZpZGVyLndpdGhHZXRBbGxFYWdlcmx5KGZuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aEZldGNoKGZuOiBFZGl0b3JEYXRhUHJvdmlkZXJGZXRjaEZuVHlwZTxNb2RlbCwgU2VydmljZT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5lZGl0b3JEYXRhUHJvdmlkZXIud2l0aEZldGNoKGZuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aENyZWF0ZShmbj86IEVkaXRvckRhdGFQcm92aWRlckNyZWF0ZUZuVHlwZTxNb2RlbCwgU2VydmljZT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5lZGl0b3JEYXRhUHJvdmlkZXIud2l0aENyZWF0ZShmbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdpdGhVcGRhdGUoZm4/OiBFZGl0b3JEYXRhUHJvdmlkZXJVcGRhdGVGblR5cGU8TW9kZWwsIFNlcnZpY2U+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuZWRpdG9yRGF0YVByb3ZpZGVyLndpdGhVcGRhdGUoZm4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoRGVsZXRlKGZuPzogRWRpdG9yRGF0YVByb3ZpZGVyRGVsZXRlRm5UeXBlPE1vZGVsLCBTZXJ2aWNlPik6IHRoaXMge1xuICAgICAgICB0aGlzLmVkaXRvckRhdGFQcm92aWRlci53aXRoRGVsZXRlKGZuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGV2aWV3RGF0YVByb3ZpZGVyIGV4dGVuZHMgVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxhbnk+IHtcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZTxNb2RlbCwgU29ydHMgPSBrZXlvZiBNb2RlbCwgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGtleW9mIE1vZGVsPigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCB1bmRlZmluZWQsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIHVuZGVmaW5lZD4odW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUNsYXNzPE1vZGVsLCBTb3J0cyA9IGtleW9mIE1vZGVsLCBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWw+KHR5cGU6IENsYXNzVHlwZTxNb2RlbD4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCB1bmRlZmluZWQsIFNvcnRzLCBGaWx0ZXJzLCBDbGFzc1R5cGU8TW9kZWw+LCB1bmRlZmluZWQ+KHR5cGUsIHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQ2xhc3NXaXRoU2VydmljZTxNb2RlbCwgU2VydmljZSwgU29ydHMgPSBrZXlvZiBNb2RlbCwgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGtleW9mIE1vZGVsPihcbiAgICAgICAgdHlwZTogQ2xhc3NUeXBlPE1vZGVsPixcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT5cbiAgICApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycywgQ2xhc3NUeXBlPE1vZGVsPiwgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPj4odHlwZSwgc2VydmljZVR5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbVNlcnZpY2U8U2VydmljZSwgTW9kZWwsIFNvcnRzID0ga2V5b2YgTW9kZWwsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBNb2RlbD4oXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+XG4gICAgKTogVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnMsIHVuZGVmaW5lZCwgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPj4ge1xuICAgICAgICByZXR1cm4gbmV3IFRhYmxldmlld0RhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4+KHVuZGVmaW5lZCwgc2VydmljZVR5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUFueVBhcmFtPE1vZGVsLCBTb3J0cyA9IGtleW9mIE1vZGVsLCBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWw+KCk6IFRhYmxldmlld0RhdGFQcm92aWRlckluc3Q8XG4gICAgICAgIE1vZGVsLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIFNvcnRzLFxuICAgICAgICBGaWx0ZXJzLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZFxuICAgID47XG4gICAgcHVibGljIHN0YXRpYyBmcm9tQW55UGFyYW08TW9kZWwsIFNvcnRzID0ga2V5b2YgTW9kZWwsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBNb2RlbD4oXG4gICAgICAgIHR5cGU6IENsYXNzVHlwZTxNb2RlbD5cbiAgICApOiBUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCB1bmRlZmluZWQsIFNvcnRzLCBGaWx0ZXJzLCBDbGFzc1R5cGU8TW9kZWw+LCB1bmRlZmluZWQ+O1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUFueVBhcmFtPE1vZGVsLCBTZXJ2aWNlID0gYW55LCBTb3J0cyA9IGtleW9mIE1vZGVsLCBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWw+KFxuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+XG4gICAgKTogVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnMsIHVuZGVmaW5lZCwgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPj47XG4gICAgcHVibGljIHN0YXRpYyBmcm9tQW55UGFyYW08TW9kZWwsIFNlcnZpY2UgPSBhbnksIFNvcnRzID0ga2V5b2YgTW9kZWwsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBNb2RlbD4oXG4gICAgICAgIHR5cGU6IENsYXNzVHlwZTxNb2RlbD4sXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+XG4gICAgKTogVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnMsIENsYXNzVHlwZTxNb2RlbD4sIFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4+O1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUFueVBhcmFtPFxuICAgICAgICBNb2RlbCxcbiAgICAgICAgU2VydmljZSxcbiAgICAgICAgU29ydHMgPSBrZXlvZiBNb2RlbCxcbiAgICAgICAgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGtleW9mIE1vZGVsLFxuICAgICAgICBNb2RlbENsYXNzID0gQ2xhc3NUeXBlPE1vZGVsPixcbiAgICAgICAgU2VydmljZUNsYXNzID0gU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPlxuICAgID4odHlwZT86IE1vZGVsQ2xhc3MsIHNlcnZpY2VUeXBlPzogU2VydmljZUNsYXNzKTogVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnMsIE1vZGVsQ2xhc3MsIFNlcnZpY2VDbGFzcz47XG4gICAgcHVibGljIHN0YXRpYyBmcm9tQW55UGFyYW08XG4gICAgICAgIE1vZGVsLFxuICAgICAgICBTZXJ2aWNlID0gYW55LFxuICAgICAgICBTb3J0cyA9IGtleW9mIE1vZGVsLFxuICAgICAgICBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWwsXG4gICAgICAgIE1vZGVsQ2xhc3MgPSBDbGFzc1R5cGU8TW9kZWw+LFxuICAgICAgICBTZXJ2aWNlQ2xhc3MgPSBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+XG4gICAgPih0eXBlPzogTW9kZWxDbGFzcywgc2VydmljZVR5cGU/OiBTZXJ2aWNlQ2xhc3MpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0eXBlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBzZXJ2aWNlVHlwZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICA/IFRhYmxldmlld0RhdGFQcm92aWRlci5mcm9tQ2xhc3NXaXRoU2VydmljZTxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnM+KHR5cGUgYXMgQ2xhc3NUeXBlPE1vZGVsPiwgc2VydmljZVR5cGUgYXMgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPilcbiAgICAgICAgICAgICAgICA6IFRhYmxldmlld0RhdGFQcm92aWRlci5mcm9tQ2xhc3M8TW9kZWwsIFNvcnRzLCBGaWx0ZXJzPih0eXBlIGFzIENsYXNzVHlwZTxNb2RlbD4pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZXJ2aWNlVHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBUYWJsZXZpZXdEYXRhUHJvdmlkZXIuZnJvbVNlcnZpY2U8U2VydmljZSwgTW9kZWwsIFNvcnRzLCBGaWx0ZXJzPihzZXJ2aWNlVHlwZSBhcyBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBUYWJsZXZpZXdEYXRhUHJvdmlkZXIuY3JlYXRlPE1vZGVsLCBTb3J0cywgRmlsdGVycz4oKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIER5bmFtaWNUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PFNlcnZpY2UgPSBhbnksIFNlcnZpY2VDbGFzcyA9IFNlcnZpY2VDbGFzc09wdFR5cGU8U2VydmljZT4+IGV4dGVuZHMgVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxcbiAgICBhbnksXG4gICAgU2VydmljZSxcbiAgICBhbnksXG4gICAgYW55LFxuICAgIHVuZGVmaW5lZCxcbiAgICBTZXJ2aWNlQ2xhc3Ncbj4ge1xuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihzZXJ2aWNlVHlwZTogU2VydmljZUNsYXNzKSB7XG4gICAgICAgIHN1cGVyKHVuZGVmaW5lZCwgc2VydmljZVR5cGUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIER5bmFtaWNUYWJsZXZpZXdEYXRhUHJvdmlkZXIgZXh0ZW5kcyBEeW5hbWljVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdCB7XG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlKCk6IER5bmFtaWNUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gbmV3IER5bmFtaWNUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21TZXJ2aWNlPFNlcnZpY2U+KHNlcnZpY2VUeXBlOiBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+KTogRHluYW1pY1RhYmxldmlld0RhdGFQcm92aWRlckluc3Q8U2VydmljZSwgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPj4ge1xuICAgICAgICByZXR1cm4gbmV3IER5bmFtaWNUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PFNlcnZpY2UsIFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4+KHNlcnZpY2VUeXBlKTtcbiAgICB9XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import { CommonsInternalError, TypeRegistry } from '@mediusinc/mng-commons/core';
2
- import { ModelDescriptor, ModelUtil } from '@mediusinc/mng-commons/model';
2
+ import { ModelDescriptor, findClassTitleAttribute } from '@mediusinc/mng-commons/model';
3
3
  import { ColumnTypeEnum, TableDescriptor, TableDynamicDescriptor } from '@mediusinc/mng-commons/table/api';
4
4
  import { EditorDescriptor } from '../../editor/descriptors/editor.descriptor';
5
5
  import { getFieldInputTypeFromColumnType } from '../../editor/helpers/class-attribute-converter';
@@ -81,10 +81,13 @@ export class TableviewDescriptorInst {
81
81
  this._tableTitle = title;
82
82
  return this;
83
83
  }
84
- withValidator(name, expression) {
85
- this._detailsEditor.addValidation(name, expression);
86
- this._addEditor.addValidation(name, expression);
87
- this._editEditor.addValidation(name, expression);
84
+ withValidation(name, expression, message, opts) {
85
+ return this.withValidationUnsafe(name, expression, message, opts);
86
+ }
87
+ withValidationUnsafe(name, expression, message, opts) {
88
+ this._detailsEditor.withValidationUnsafe(name, expression, message, opts);
89
+ this._addEditor.withValidationUnsafe(name, expression, message, opts);
90
+ this._editEditor.withValidationUnsafe(name, expression, message, opts);
88
91
  return this;
89
92
  }
90
93
  getColumn(property) {
@@ -421,23 +424,13 @@ export class TableviewDescriptorInst {
421
424
  this.addFieldToEditAndAdd(field);
422
425
  return field;
423
426
  }
424
- addFieldManyToManyEditor(property, mainTableDescriptor, lookupTableDescriptor) {
425
- const field = this._detailsEditor.addFieldManyToManyEditor(property, mainTableDescriptor, lookupTableDescriptor);
426
- this.addFieldToEditAndAdd(field);
427
- return field;
428
- }
429
- addFieldManyToManyEditorUnsafe(property, mainTableDescriptor, lookupTableDescriptor) {
430
- const field = this._detailsEditor.addFieldManyToManyEditorUnsafe(property, mainTableDescriptor, lookupTableDescriptor);
431
- this.addFieldToEditAndAdd(field);
432
- return field;
433
- }
434
- addFieldManyToManyEditorWithProvider(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider) {
435
- const field = this._detailsEditor.addFieldManyToManyEditorWithProvider(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider);
427
+ addFieldManyToManyEditor(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider) {
428
+ const field = this._detailsEditor.addFieldManyToManyEditor(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider);
436
429
  this.addFieldToEditAndAdd(field);
437
430
  return field;
438
431
  }
439
- addFieldManyToManyEditorWithProviderUnsafe(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider) {
440
- const field = this._detailsEditor.addFieldManyToManyEditorWithProviderUnsafe(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider);
432
+ addFieldManyToManyEditorUnsafe(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider) {
433
+ const field = this._detailsEditor.addFieldManyToManyEditorUnsafe(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider);
441
434
  this.addFieldToEditAndAdd(field);
442
435
  return field;
443
436
  }
@@ -539,7 +532,7 @@ export class TableviewDescriptorInst {
539
532
  const attributeDef = getTableviewClassAttributeDef(this.model.type).find(attr => attr.name === property);
540
533
  if (attributeDef != null) {
541
534
  type ??= attributeDef.classType ?? TypeRegistry.get().findType(attributeDef.type);
542
- titleProperty ??= type ? ModelUtil.findTitleAttribute(type) ?? undefined : undefined;
535
+ titleProperty ??= type ? findClassTitleAttribute(type) ?? undefined : undefined;
543
536
  optionsLabelProperty ??= titleProperty;
544
537
  attributeDef.columnType = ColumnTypeEnum.String;
545
538
  attributeDef.fieldType = FieldInputTypeEnum.Text;
@@ -621,7 +614,7 @@ export class TableviewDynamicDescriptorInt extends TableviewDescriptorInst {
621
614
  constructor(model) {
622
615
  super(model);
623
616
  this._table = TableDynamicDescriptor.fromModel(this.model);
624
- super._tableTitle = undefined;
617
+ this._tableTitle = undefined;
625
618
  }
626
619
  get table() {
627
620
  return this._table;
@@ -669,4 +662,4 @@ export class TableviewDynamicDescriptor extends TableviewDynamicDescriptorInt {
669
662
  return new TableviewDynamicDescriptorInt(model);
670
663
  }
671
664
  }
672
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvYXBpL3NyYy90YWJsZXZpZXcvZGVzY3JpcHRvcnMvdGFibGV2aWV3LmRlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUdILG9CQUFvQixFQU9wQixZQUFZLEVBQ2YsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxPQUFPLEVBQWlCLGVBQWUsRUFBRSxTQUFTLEVBQWlCLE1BQU0sOEJBQThCLENBQUM7QUFDeEcsT0FBTyxFQUdILGNBQWMsRUFHZCxlQUFlLEVBRWYsc0JBQXNCLEVBRXpCLE1BQU0sa0NBQWtDLENBQUM7QUFFMUMsT0FBTyxFQUFDLGdCQUFnQixFQUF1QixNQUFNLDRDQUE0QyxDQUFDO0FBSWxHLE9BQU8sRUFBQywrQkFBK0IsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBRS9GLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBR25GLE1BQU0sT0FBTyx1QkFBdUI7SUFjaEMsWUFBc0IsS0FBc0M7UUFGbEQsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFHM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsT0FBTyxDQUFDO1FBQ3JELElBQUksQ0FBQyxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztR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QztDQUNKO0FBRUQsTUFBTSxPQUFPLDBCQUEyQixTQUFRLDZCQUE2QjtJQUN6RTtRQUNJLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFtQixFQUFFLGFBQXNCLEVBQUUsV0FBcUM7UUFDbkcsT0FBTyxJQUFJLDZCQUE2QixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQU0sVUFBVSxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFTSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQTJCO1FBQy9DLE9BQU8sSUFBSSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0ZpZWxkVmFsaWRhdG9yRm59IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUvbGliL21vZGVscy9jb25maWcnO1xuXG5pbXBvcnQge1xuICAgIEFycmF5SXRlbVR5cGUsXG4gICAgQ2xhc3NUeXBlLFxuICAgIENvbW1vbnNJbnRlcm5hbEVycm9yLFxuICAgIEVudW1Db25zdGFudFR5cGUsXG4gICAgSUxvb2t1cERhdGFQcm92aWRlcixcbiAgICBJVGFibGV2aWV3RGVzY3JpcHRvckludGVybmFsLFxuICAgIElkVHlwZSxcbiAgICBLZXlvZkFuZE9mVHlwZSxcbiAgICBOdWxsYWJsZSxcbiAgICBUeXBlUmVnaXN0cnlcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7RmlsdGVyRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9maWx0ZXInO1xuaW1wb3J0IHtFbnVtRGVzY3JpcHRvciwgTW9kZWxEZXNjcmlwdG9yLCBNb2RlbFV0aWwsIFR5cGVEZXNjcmlwdG9yfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL21vZGVsJztcbmltcG9ydCB7XG4gICAgQ29sdW1uRGVzY3JpcHRvcixcbiAgICBDb2x1bW5EaXNwbGF5VHlwZUVudW0sXG4gICAgQ29sdW1uVHlwZUVudW0sXG4gICAgSUNvbHVtbnNNYW5hZ2VJbnRlcmZhY2UsXG4gICAgSVRhYmxlRGF0YVByb3ZpZGVyLFxuICAgIFRhYmxlRGVzY3JpcHRvcixcbiAgICBUYWJsZURlc2NyaXB0b3JJbnN0LFxuICAgIFRhYmxlRHluYW1pY0Rlc2NyaXB0b3IsXG4gICAgVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3Rcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZS9hcGknO1xuXG5pbXBvcnQge0VkaXRvckRlc2NyaXB0b3IsIEVkaXRvckRlc2NyaXB0b3JJbnN0fSBmcm9tICcuLi8uLi9lZGl0b3IvZGVzY3JpcHRvcnMvZWRpdG9yLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtBRmllbGREZXNjcmlwdG9yfSBmcm9tICcuLi8uLi9lZGl0b3IvZGVzY3JpcHRvcnMvZmllbGQtYmFzZS5kZXNjcmlwdG9yJztcbmltcG9ydCB7RmllbGRMb29rdXBEZXNjcmlwdG9yLCBGaWVsZExvb2t1cFByb3ZpZGVyVHlwZX0gZnJvbSAnLi4vLi4vZWRpdG9yL2Rlc2NyaXB0b3JzL2ZpZWxkLWxvb2t1cC5kZXNjcmlwdG9yJztcbmltcG9ydCB7RmllbGRJbnB1dERlc2NyaXB0b3JUeXBlfSBmcm9tICcuLi8uLi9lZGl0b3IvZGVzY3JpcHRvcnMvZmllbGQuZGVzY3JpcHRvcic7XG5pbXBvcnQge2dldEZpZWxkSW5wdXRUeXBlRnJvbUNvbHVtblR5cGV9IGZyb20gJy4uLy4uL2VkaXRvci9oZWxwZXJzL2NsYXNzLWF0dHJpYnV0ZS1jb252ZXJ0ZXInO1xuaW1wb3J0IHtJRmllbGRzTWFuYWdlSW50ZXJmYWNlfSBmcm9tICcuLi8uLi9lZGl0b3IvbW9kZWxzL2VkaXRvci1maWVsZHMubW9kZWwnO1xuaW1wb3J0IHtUYWJsZXZpZXdFZGl0b3JUeXBlRW51bX0gZnJvbSAnLi4vLi4vZWRpdG9yL21vZGVscy9lZGl0b3IubW9kZWwnO1xuaW1wb3J0IHtGaWVsZElucHV0VHlwZUVudW19IGZyb20gJy4uLy4uL2VkaXRvci9tb2RlbHMvZmllbGQubW9kZWwnO1xuaW1wb3J0IHtnZXRUYWJsZXZpZXdDbGFzc0F0dHJpYnV0ZURlZn0gZnJvbSAnLi4vaGVscGVycy9jbGFzcy1hdHRyaWJ1dGUtY29udmVydGVyJztcbmltcG9ydCB7VGFibGV2aWV3Q2xhc3NBdHRyaWJ1dGVEZWZ9IGZyb20gJy4uL21vZGVscy9jbGFzcy10YWJsZXZpZXctYXR0cmlidXRlLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsLCBTb3J0cyA9IGtleW9mIFRhYmxldmlld01vZGVsLCBGaWx0ZXJzID0ga2V5b2YgVGFibGV2aWV3TW9kZWw+XG4gICAgaW1wbGVtZW50cyBJVGFibGV2aWV3RGVzY3JpcHRvckludGVybmFsPFRhYmxldmlld01vZGVsLCBTb3J0cywgRmlsdGVycz4sIElDb2x1bW5zTWFuYWdlSW50ZXJmYWNlPFRhYmxldmlld01vZGVsLCBTb3J0cywgRmlsdGVycz4sIElGaWVsZHNNYW5hZ2VJbnRlcmZhY2U8VGFibGV2aWV3TW9kZWw+XG57XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUYWJsZXZpZXdNb2RlbD47XG5cbiAgICBwcm90ZWN0ZWQgX3RhYmxlOiBUYWJsZURlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsLCBTb3J0cywgRmlsdGVycz47XG4gICAgcHJvdGVjdGVkIF9kZXRhaWxzRWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD47XG4gICAgcHJvdGVjdGVkIF9hZGRFZGl0b3I6IEVkaXRvckRlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsPjtcbiAgICBwcm90ZWN0ZWQgX2VkaXRFZGl0b3I6IEVkaXRvckRlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsPjtcblxuICAgIHByb3RlY3RlZCBfdGFibGVUaXRsZT86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBfaXNMb2NhbGl6ZWQgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPFRhYmxldmlld01vZGVsPikge1xuICAgICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgICAgICB0aGlzLl90YWJsZSA9IFRhYmxlRGVzY3JpcHRvci5mcm9tTW9kZWwobW9kZWwpO1xuICAgICAgICB0aGlzLl90YWJsZVRpdGxlID0gYCR7dGhpcy5fbW9kZWwuaTE4bkJhc2VLZXl9Lm5hbWVgO1xuICAgICAgICB0aGlzLl9kZXRhaWxzRWRpdG9yID0gRWRpdG9yRGVzY3JpcHRvci5mcm9tTW9kZWwobW9kZWwsIFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkRldGFpbHMpO1xuICAgICAgICB0aGlzLl9kZXRhaWxzRWRpdG9yLndpdGhEaXNhYmxlZCgpO1xuICAgICAgICB0aGlzLl9hZGRFZGl0b3IgPSBFZGl0b3JEZXNjcmlwdG9yLmZyb21Nb2RlbChtb2RlbCwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uQWRkKTtcbiAgICAgICAgdGhpcy5fZWRpdEVkaXRvciA9IEVkaXRvckRlc2NyaXB0b3IuZnJvbU1vZGVsKG1vZGVsLCBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5FZGl0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZXRhaWxzRWRpdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGV0YWlsc0VkaXRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFkZEVkaXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEVkaXRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRFZGl0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0RWRpdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFibGVUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlVGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0xvY2FsaXplZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTG9jYWxpemVkO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGFibGVEZXNjcmlwdG9yKGRlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWwsIFNvcnRzLCBGaWx0ZXJzPik6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZSA9IGRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRWRpdG9yRGVzY3JpcHRvcnMoZGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3IgPSBkZXNjcmlwdG9yO1xuICAgICAgICB0aGlzLl9lZGl0RWRpdG9yID0gZGVzY3JpcHRvcjtcbiAgICAgICAgdGhpcy5fYWRkRWRpdG9yID0gZGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEZXRhaWxzRGVzY3JpcHRvcihkZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvciA9IGRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWRkRGVzY3JpcHRvcihkZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYWRkRWRpdG9yID0gZGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhFZGl0RGVzY3JpcHRvcihkZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZWRpdEVkaXRvciA9IGRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNyZWF0ZXMgbmV3IGNvcHkgb2YgZWRpdG9yIGRlc2NyaXB0b3IgYW5kIG1ha2VzIGl0IGRpc2FibGVkXG4gICAgICogdXNhYmxlIGluIGNvbWJpbmF0aW9uIHdpdGggdGhpczo6d2l0aEVkaXRvckRlc2NyaXB0b3JzLCB3aGVyZSBkZXRhaWxzRGVzY3JpcHRvciBpcyBtYWRlIG5vbi1kaXNhYmxlZFxuICAgICAqIEBwYXJhbSB0eXBlIHdoaWNoIGVkaXRvciB0eXBlIHRvIHNldCB0byBkaXNhYmxlZFxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRGlzYWJsZWRFZGl0b3JEZXNjcmlwdG9yKHR5cGUgPSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5EZXRhaWxzKTogdGhpcyB7XG4gICAgICAgIGlmICh0eXBlID09PSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5FZGl0KSB7XG4gICAgICAgICAgICB0aGlzLl9lZGl0RWRpdG9yID0gdGhpcy5fZWRpdEVkaXRvci5jb3B5KCkud2l0aERpc2FibGVkKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRGV0YWlscykge1xuICAgICAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvciA9IHRoaXMuX2RldGFpbHNFZGl0b3IuY29weSgpLndpdGhEaXNhYmxlZCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkFkZCkge1xuICAgICAgICAgICAgdGhpcy5fYWRkRWRpdG9yID0gdGhpcy5fYWRkRWRpdG9yLmNvcHkoKS53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRhYmxlVGl0bGUodGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZVRpdGxlID0gdGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVmFsaWRhdG9yKG5hbWU6IHN0cmluZywgZXhwcmVzc2lvbjogRmllbGRWYWxpZGF0b3JGbik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZFZhbGlkYXRpb24obmFtZSwgZXhwcmVzc2lvbik7XG4gICAgICAgIHRoaXMuX2FkZEVkaXRvci5hZGRWYWxpZGF0aW9uKG5hbWUsIGV4cHJlc3Npb24pO1xuICAgICAgICB0aGlzLl9lZGl0RWRpdG9yLmFkZFZhbGlkYXRpb24obmFtZSwgZXhwcmVzc2lvbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb2x1bW4ocHJvcGVydHk6IGtleW9mIFRhYmxldmlld01vZGVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZS5nZXRDb2x1bW4ocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb2x1bW5VbnNhZmUocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGUuZ2V0Q29sdW1uVW5zYWZlKHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlQ29sdW1uKHByb3BlcnR5OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5yZW1vdmVDb2x1bW4ocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVDb2x1bW5VbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5yZW1vdmVDb2x1bW5VbnNhZmUocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ29sdW1uPENvbHVtbk1vZGVsLCBDb2x1bW5WYWx1ZSA9IENvbHVtbk1vZGVsPihjb2x1bW46IENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxldmlld01vZGVsLCBDb2x1bW5WYWx1ZT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGFibGUud2l0aENvbHVtbjxDb2x1bW5Nb2RlbCwgQ29sdW1uVmFsdWU+KGNvbHVtbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW48UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbD4ocHJvcGVydHk6IFByb3BlcnR5KTogQ29sdW1uRGVzY3JpcHRvcjxOb25OdWxsYWJsZTxUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+LCBUYWJsZXZpZXdNb2RlbCwgVGFibGV2aWV3TW9kZWxbUHJvcGVydHldPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZS5hZGRDb2x1bW4ocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5FbnVtPFByb3BlcnR5S2V5IGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWwsIEVudW0gZXh0ZW5kcyBOb25OdWxsYWJsZTxUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eUtleV0+Pihwcm9wZXJ0eTogUHJvcGVydHlLZXksIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPikge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGUuYWRkQ29sdW1uRW51bShwcm9wZXJ0eSwgZW51bURlc2MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5VbnNhZmU8Q29sdW1uTW9kZWwgPSBhbnk+KHByb3BlcnR5OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZXZpZXdNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGUuYWRkQ29sdW1uVW5zYWZlKHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvbHVtbnMoLi4ucHJvcGVydGllczogKGtleW9mIFRhYmxldmlld01vZGVsKVtdKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlLndpdGhDb2x1bW5zKC4uLnByb3BlcnRpZXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U29ydChwcm9wZXJ0eTogU29ydHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlLmdldFNvcnQocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlLmdldFNvcnRVbnNhZmUocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVTb3J0KHByb3BlcnR5OiBTb3J0cykge1xuICAgICAgICB0aGlzLl90YWJsZS5yZW1vdmVTb3J0KHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlU29ydFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3RhYmxlLnJlbW92ZVNvcnRVbnNhZmUocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRTb3J0KHByb3BlcnR5OiBTb3J0cywgaXNEZWZhdWx0ID0gZmFsc2UsIGFzY2VuZGluZz86IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlLmFkZFNvcnQocHJvcGVydHksIGlzRGVmYXVsdCwgYXNjZW5kaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkU29ydFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBpc0RlZmF1bHQgPSBmYWxzZSwgYXNjZW5kaW5nPzogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGUuYWRkU29ydFVuc2FmZShwcm9wZXJ0eSwgaXNEZWZhdWx0LCBhc2NlbmRpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU29ydChwcm9wZXJ0eTogU29ydHMsIGlzRGVmYXVsdCA9IGZhbHNlLCBhc2NlbmRpbmc/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlLndpdGhTb3J0KHByb3BlcnR5LCBpc0RlZmF1bHQsIGFzY2VuZGluZyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU29ydFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBpc0RlZmF1bHQgPSBmYWxzZSwgYXNjZW5kaW5nPzogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZS53aXRoU29ydFVuc2FmZShwcm9wZXJ0eSwgaXNEZWZhdWx0LCBhc2NlbmRpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRTb3J0KHByb3BlcnR5OiBTb3J0cywgYXNjZW5kaW5nPzogYm9vbGVhbiwgb3JkZXI/OiBudW1iZXIsIGVuYWJsZWQ/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlLndpdGhEZWZhdWx0U29ydChwcm9wZXJ0eSwgYXNjZW5kaW5nLCBvcmRlciwgZW5hYmxlZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFNvcnRVbnNhZmUocHJvcGVydHk6IHN0cmluZywgYXNjZW5kaW5nPzogYm9vbGVhbiwgb3JkZXI/OiBudW1iZXIsIGVuYWJsZWQ/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlLndpdGhEZWZhdWx0U29ydFVuc2FmZShwcm9wZXJ0eSwgYXNjZW5kaW5nLCBvcmRlciwgZW5hYmxlZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU29ydHMoLi4ucHJvcGVydGllczogU29ydHNbXSk6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZS53aXRoU29ydHMoLi4ucHJvcGVydGllcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU29ydHNVbnNhZmUoLi4ucHJvcGVydGllczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGFibGUud2l0aFNvcnRzVW5zYWZlKC4uLnByb3BlcnRpZXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmlsdGVyKHByb3BlcnR5OiBGaWx0ZXJzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZS5nZXRGaWx0ZXIocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWx0ZXJVbnNhZmUocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGUuZ2V0RmlsdGVyVW5zYWZlKHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlRmlsdGVyKHByb3BlcnR5OiBGaWx0ZXJzKSB7XG4gICAgICAgIHRoaXMuX3RhYmxlLnJlbW92ZUZpbHRlcihwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZpbHRlclVuc2FmZShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3RhYmxlLnJlbW92ZUZpbHRlclVuc2FmZShwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlcjxGaWx0ZXJNb2RlbCA9IEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCA/IFRhYmxldmlld01vZGVsW0ZpbHRlcnNdIDogbmV2ZXI+KHByb3BlcnR5OiBGaWx0ZXJzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZS5hZGRGaWx0ZXI8RmlsdGVyTW9kZWw+KHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmlsdGVyVW5zYWZlPEZpbHRlck1vZGVsPihwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZS5hZGRGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmlsdGVyTG9va3VwPEZpbHRlck1vZGVsID0gRmlsdGVycyBleHRlbmRzIGtleW9mIFRhYmxldmlld01vZGVsID8gTm9uTnVsbGFibGU8VGFibGV2aWV3TW9kZWxbRmlsdGVyc10+IDogbmV2ZXIsIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgICAgICBwcm9wZXJ0eTogRmlsdGVycyxcbiAgICAgICAgcHJvdmlkZXI/OiBJTG9va3VwRGF0YVByb3ZpZGVyPEZpbHRlck1vZGVsLCBTZXJ2aWNlPixcbiAgICAgICAgb3B0aW9uc1ZhbHVlUHJvcGVydHk/OiBrZXlvZiBGaWx0ZXJNb2RlbFxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGUuYWRkRmlsdGVyTG9va3VwPEZpbHRlck1vZGVsLCBTZXJ2aWNlPihwcm9wZXJ0eSwgcHJvdmlkZXIsIG9wdGlvbnNWYWx1ZVByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmlsdGVyTG9va3VwVW5zYWZlPEZpbHRlck1vZGVsLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihwcm9wZXJ0eTogc3RyaW5nLCBwcm92aWRlcj86IElMb29rdXBEYXRhUHJvdmlkZXI8RmlsdGVyTW9kZWwsIFNlcnZpY2U+LCBvcHRpb25zVmFsdWVQcm9wZXJ0eT86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGUuYWRkRmlsdGVyTG9va3VwVW5zYWZlPEZpbHRlck1vZGVsLCBTZXJ2aWNlPihwcm9wZXJ0eSwgcHJvdmlkZXIsIG9wdGlvbnNWYWx1ZVByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmlsdGVyTG9va3VwRW51bTxFbnVtPihwcm9wZXJ0eTogRmlsdGVycywgZW51bURlc2M6IEVudW1EZXNjcmlwdG9yPEVudW0+LCBvcHRpb25zPzogQXJyYXk8RW51bT4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlLmFkZEZpbHRlckxvb2t1cEVudW08RW51bT4ocHJvcGVydHksIGVudW1EZXNjLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmlsdGVyTG9va3VwRW51bVVuc2FmZTxFbnVtID0gRW51bUNvbnN0YW50VHlwZT4ocHJvcGVydHk6IHN0cmluZywgZW51bURlc2M6IEVudW1EZXNjcmlwdG9yPEVudW0+LCBvcHRpb25zPzogQXJyYXk8RW51bT4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlLmFkZEZpbHRlckxvb2t1cEVudW1VbnNhZmU8RW51bT4ocHJvcGVydHksIGVudW1EZXNjLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmlsdGVyRnJvbUNvbHVtbihwcm9wZXJ0eTogRXh0cmFjdDxGaWx0ZXJzLCBrZXlvZiBUYWJsZXZpZXdNb2RlbD4sIGZvcmNlU2ltcGxlID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlLmFkZEZpbHRlckZyb21Db2x1bW4ocHJvcGVydHksIGZvcmNlU2ltcGxlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbHRlcnNGcm9tQ29sdW1ucyguLi5wcm9wZXJ0aWVzOiBFeHRyYWN0PEZpbHRlcnMsIGtleW9mIFRhYmxldmlld01vZGVsPltdKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlLndpdGhGaWx0ZXJzRnJvbUNvbHVtbnMoLi4ucHJvcGVydGllcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmlsdGVyc0Zyb21Db2x1bW5zVW5zYWZlKC4uLnByb3BlcnRpZXM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlLndpdGhGaWx0ZXJzRnJvbUNvbHVtbnNVbnNhZmUoLi4ucHJvcGVydGllcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWx0ZXJGcm9tQ29sdW1uVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcsIGZvcmNlU2ltcGxlID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlLmFkZEZpbHRlckZyb21Db2x1bW5VbnNhZmUocHJvcGVydHksIGZvcmNlU2ltcGxlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbHRlcjxGaWx0ZXJNb2RlbD4ocHJvcGVydHk6IEZpbHRlcnMsIGZpbHRlcjogRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGV2aWV3TW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlLndpdGhGaWx0ZXI8RmlsdGVyTW9kZWw+KHByb3BlcnR5LCBmaWx0ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbHRlclVuc2FmZTxGaWx0ZXJNb2RlbD4oZmlsdGVyOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZXZpZXdNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGFibGUud2l0aEZpbHRlclVuc2FmZTxGaWx0ZXJNb2RlbD4oZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpZWxkKHByb3BlcnR5OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgZWRpdG9yVHlwZTogVGFibGV2aWV3RWRpdG9yVHlwZUVudW0pOiBBRmllbGREZXNjcmlwdG9yPGFueSwgVGFibGV2aWV3TW9kZWw+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZpZWxkVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgZWRpdG9yVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpZWxkVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcsIGVkaXRvclR5cGU6IFRhYmxldmlld0VkaXRvclR5cGVFbnVtKTogQUZpZWxkRGVzY3JpcHRvcjxhbnksIFRhYmxldmlld01vZGVsPiB8IG51bGwge1xuICAgICAgICBzd2l0Y2ggKGVkaXRvclR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRWRpdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZWRpdEVkaXRvci5nZXRGaWVsZFVuc2FmZShwcm9wZXJ0eSk7XG4gICAgICAgICAgICBjYXNlIFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkFkZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYWRkRWRpdG9yLmdldEZpZWxkVW5zYWZlKHByb3BlcnR5KTtcbiAgICAgICAgICAgIGNhc2UgVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRGV0YWlsczpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGV0YWlsc0VkaXRvci5nZXRGaWVsZFVuc2FmZShwcm9wZXJ0eSk7XG4gICAgICAgICAgICBjYXNlIFRhYmxldmlld0VkaXRvclR5cGVFbnVtLk5vbmU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlRmllbGQocHJvcGVydHk6IGtleW9mIFRhYmxldmlld01vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlRmllbGRVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlRmllbGRVbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lZGl0RWRpdG9yLnJlbW92ZUZpZWxkVW5zYWZlKHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fYWRkRWRpdG9yLnJlbW92ZUZpZWxkVW5zYWZlKHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvci5yZW1vdmVGaWVsZFVuc2FmZShwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkRGVzY3JpcHRvcjxGaWVsZE1vZGVsPihmaWVsZDogQUZpZWxkRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBUYWJsZXZpZXdNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICB0aGlzLl9hZGRFZGl0b3IuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgdGhpcy5fZWRpdEVkaXRvci5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGQ8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgRmllbGRNb2RlbCA9IE5vbk51bGxhYmxlPFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4sIEZpZWxkVmFsdWUgPSBUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+KHByb3BlcnR5OiBQcm9wZXJ0eSkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGQ8UHJvcGVydHksIEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRVbnNhZmU8RmllbGRNb2RlbCA9IEZpZWxkSW5wdXREZXNjcmlwdG9yVHlwZSwgRmllbGRWYWx1ZSA9IEZpZWxkTW9kZWw+KHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZEZpZWxkVW5zYWZlPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRzKC4uLnByb3BlcnRpZXM6IChrZXlvZiBUYWJsZXZpZXdNb2RlbClbXSk6IHRoaXMge1xuICAgICAgICBwcm9wZXJ0aWVzLmZvckVhY2gocCA9PiB0aGlzLmFkZEZpZWxkKHApKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRGaWVsZFRvRWRpdEFuZEFkZDxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlID0gRmllbGRNb2RlbD4oZmllbGQ6IEFGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgVGFibGV2aWV3TW9kZWwsIEZpZWxkVmFsdWU+KSB7XG4gICAgICAgIHRoaXMuX2FkZEVkaXRvci5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICB0aGlzLl9lZGl0RWRpdG9yLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBsb29rdXAgZmllbGQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge1R5cGVEZXNjcmlwdG9yPEZpZWxkTW9kZWw+fSB0eXBlIC0gVGhlIHR5cGUgZGVzY3JpcHRvciBmb3IgdGhlIGxvb2t1cCBtb2RlbC5cbiAgICAgKiBAdHlwZXBhcmFtIFByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgRWRpdG9yTW9kZWwuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBNb2RlbCAtIFRoZSBmaWVsZCBtb2RlbCB0eXBlLCBkZWZhdWx0cyB0byB0aGUgbm9uLW51bGxhYmxlIHR5cGUgb2YgdGhlIGVkaXRvcidzIHByb3BlcnR5LlxuICAgICAqIEB0eXBlcGFyYW0gRmllbGRWYWx1ZSAtIFRoZSB2YWx1ZSB0eXBlIG9mIGZpZWxkIG9uIGVkaXRvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIFRhYmxldmlld01vZGVsLCB1bmRlZmluZWQsIEZpZWxkVmFsdWU+fSAtIFRoZSBmaWVsZCBsb29rdXAgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXA8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgTG9va3VwTW9kZWwgPSBOb25OdWxsYWJsZTxUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+LCBGaWVsZFZhbHVlID0gVGFibGV2aWV3TW9kZWxbUHJvcGVydHldPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICB0eXBlPzogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZExvb2t1cDxQcm9wZXJ0eSwgTG9va3VwTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5LCB0eXBlKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbVU5TQUZFXSBBZGRzIGxvb2t1cCBmaWVsZC5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBVTlNBRkUgYmVjYXVzZSBwcm9wZXJ0eSBpcyBub3QgdHlwZS1jaGVja2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxGaWVsZE1vZGVsPn0gdHlwZSAtIFRoZSB0eXBlIGRlc2NyaXB0b3IgZm9yIHRoZSBsb29rdXAgbW9kZWwgKGRlZmluZXMgMm5kIGdlbmVyaWMpLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgdmFsdWUgdHlwZSBvZiBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBUYWJsZXZpZXdNb2RlbCwgdW5kZWZpbmVkLCBGaWVsZFZhbHVlPn0gLSBUaGUgZmllbGQgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwVW5zYWZlPExvb2t1cE1vZGVsLCBGaWVsZFZhbHVlID0gTG9va3VwTW9kZWw+KHByb3BlcnR5OiBzdHJpbmcsIHR5cGU/OiBUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD4pIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZEZpZWxkTG9va3VwVW5zYWZlPExvb2t1cE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSwgdHlwZSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZpZWxkIGxvb2t1cCB3aXRoIG9wdGlvbnMgdmFsdWUgcHJvcGVydHkgZm9yIGxvb2t1cCBtb2RlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8RmllbGRNb2RlbD59IHR5cGUgLSBUaGUgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgbG9va3VwIG1vZGVsLlxuICAgICAqIEBwYXJhbSB7TG9va3VwVmFsdWVQcm9wZXJ0eX0gbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHkgLSBUaGUgdmFsdWUgcHJvcGVydHkgdXNlZCBhcyB2YWx1ZSBpbiB0aGUgbG9va3VwIG9wdGlvbnMuXG4gICAgICogQHR5cGVwYXJhbSBQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIEVkaXRvck1vZGVsLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cFZhbHVlUHJvcGVydHkgLSBUaGUgcHJvcGVydHkgb2YgbG9va3VwIG1vZGVsIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUgb2YgZmllbGQgb24gZWRpdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgVGFibGV2aWV3TW9kZWwsIHVuZGVmaW5lZCwgRmllbGRWYWx1ZT59IC0gVGhlIGZpZWxkIGxvb2t1cCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cFdpdGhPcHRpb25zVmFsdWVQcm9wZXJ0eTxcbiAgICAgICAgUHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCxcbiAgICAgICAgTG9va3VwTW9kZWwsXG4gICAgICAgIExvb2t1cFZhbHVlUHJvcGVydHkgZXh0ZW5kcyBLZXlvZkFuZE9mVHlwZTxMb29rdXBNb2RlbCwgVGFibGV2aWV3TW9kZWxbUHJvcGVydHldPixcbiAgICAgICAgRmllbGRWYWx1ZSA9IFRhYmxldmlld01vZGVsW1Byb3BlcnR5XVxuICAgID4ocHJvcGVydHk6IFByb3BlcnR5LCB0eXBlOiBUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD4sIGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5OiBMb29rdXBWYWx1ZVByb3BlcnR5KSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZExvb2t1cFdpdGhPcHRpb25zVmFsdWVQcm9wZXJ0eTxQcm9wZXJ0eSwgTG9va3VwTW9kZWwsIExvb2t1cFZhbHVlUHJvcGVydHksIEZpZWxkVmFsdWU+KFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbVU5TQUZFXSBBZGRzIGEgZmllbGQgbG9va3VwIHdpdGggb3B0aW9ucyB2YWx1ZSBwcm9wZXJ0eSBmb3IgbG9va3VwIG1vZGVsLlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIFVOU0FGRSBiZWNhdXNlIHByb3BlcnR5IGlzIG5vdCB0eXBlLWNoZWNrZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge1R5cGVEZXNjcmlwdG9yPEZpZWxkTW9kZWw+fSB0eXBlIC0gVGhlIHR5cGUgZGVzY3JpcHRvciBmb3IgdGhlIGxvb2t1cCBtb2RlbC5cbiAgICAgKiBAcGFyYW0ge0xvb2t1cFZhbHVlUHJvcGVydHl9IGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5IC0gVGhlIHZhbHVlIHByb3BlcnR5IHVzZWQgYXMgdmFsdWUgaW4gdGhlIGxvb2t1cCBvcHRpb25zLlxuICAgICAqIEB0eXBlcGFyYW0gUHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBFZGl0b3JNb2RlbC5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cE1vZGVsIC0gVGhlIGZpZWxkIG1vZGVsIHR5cGUsIGRlZmF1bHRzIHRvIHRoZSBub24tbnVsbGFibGUgdHlwZSBvZiB0aGUgZWRpdG9yJ3MgcHJvcGVydHkuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBWYWx1ZVByb3BlcnR5IC0gVGhlIHByb3BlcnR5IG9mIGxvb2t1cCBtb2RlbCB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gRmllbGRWYWx1ZSAtIFRoZSB2YWx1ZSB0eXBlIG9mIGZpZWxkIG9uIGVkaXRvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIFRhYmxldmlld01vZGVsLCB1bmRlZmluZWQsIEZpZWxkVmFsdWU+fSAtIFRoZSBmaWVsZCBsb29rdXAgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBXaXRoT3B0aW9uc1ZhbHVlUHJvcGVydHlVbnNhZmU8TG9va3VwTW9kZWwsIEZpZWxkVmFsdWUgPSBOdWxsYWJsZTxJZFR5cGU+PihcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgdHlwZTogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+LFxuICAgICAgICBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eTogc3RyaW5nXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZExvb2t1cFdpdGhPcHRpb25zVmFsdWVQcm9wZXJ0eVVuc2FmZTxMb29rdXBNb2RlbCwgRmllbGRWYWx1ZT4ocHJvcGVydHksIHR5cGUsIGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgZmllbGQgbG9va3VwIHdpdGggYSBkYXRhIHByb3ZpZGVyIG9yIHNlcnZpY2UgdG8gdGhlIGVkaXRvciBtb2RlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7RmllbGRMb29rdXBQcm92aWRlclR5cGU8TG9va3VwTW9kZWwsIFNlcnZpY2U+fSBwcm92aWRlciAtIFRoZSBmaWVsZCBsb29rdXAgZGF0YSBwcm92aWRlciBvciBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+fSBbdHlwZV0gLSBUaGUgdHlwZSBvZiBsb29rdXAgLSBpZiBkYXRhIHByb3ZpZGVyIGlzIHBhc3NlZCBhcyBwcmV2aW91cyBwYXJhbWV0ZXIsIHR5cGUgY2FuIGJlIG9taXR0ZWQuIElmIHNlcnZpY2UgaXMgcHJvdmlkZXIsIHR5cGUgcGFyYW1ldGVyIGlzIHByb3Bvc2VkIGluIGZhdm91ciBvZiBjb3JyZWN0IHR5cGluZy5cbiAgICAgKiBAdHlwZXBhcmFtIFByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgRWRpdG9yTW9kZWwuXG4gICAgICogQHR5cGVwYXJhbSBTZXJ2aWNlIC0gVGhlIGxvb2t1cCBzZXJ2aWNlIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBNb2RlbCAtIFRoZSBmaWVsZCBtb2RlbCB0eXBlLCBkZWZhdWx0cyB0byB0aGUgbm9uLW51bGxhYmxlIHR5cGUgb2YgdGhlIGVkaXRvcidzIHByb3BlcnR5LlxuICAgICAqIEB0eXBlcGFyYW0gRmllbGRWYWx1ZSAtIFRoZSBmaWVsZCB2YWx1ZSB0eXBlLCBkZWZhdWx0cyB0byB0aGUgZWRpdG9yJ3MgcHJvcGVydHkgdHlwZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlPn0gQ3JlYXRlZCBmaWVsZCBsb29rdXAgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBXaXRoUHJvdmlkZXI8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgU2VydmljZSwgTG9va3VwTW9kZWwgPSBOb25OdWxsYWJsZTxUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+LCBGaWVsZFZhbHVlID0gVGFibGV2aWV3TW9kZWxbUHJvcGVydHldPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBwcm92aWRlcjogRmllbGRMb29rdXBQcm92aWRlclR5cGU8TG9va3VwTW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICB0eXBlPzogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlcjxQcm9wZXJ0eSwgU2VydmljZSwgTG9va3VwTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5LCBwcm92aWRlciwgdHlwZSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW1VOU0FGRV0gQWRkcyBhIGZpZWxkIGxvb2t1cCB3aXRoIGEgZGF0YSBwcm92aWRlciBvciBzZXJ2aWNlIHRvIHRoZSBlZGl0b3IgbW9kZWwuXG4gICAgICogVGhpcyBtZXRob2QgaXMgVU5TQUZFIGJlY2F1c2UgcHJvcGVydHkgaXMgbm90IHR5cGUtY2hlY2tlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge0ZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPExvb2t1cE1vZGVsLCBTZXJ2aWNlPn0gcHJvdmlkZXIgLSBUaGUgbG9va3VwIHByb3ZpZGVyIG9yIHNlcnZpY2UgZm9yIHRoZSBmaWVsZCBsb29rdXAuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD4/fSB0eXBlIC0gT3B0aW9uYWwgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgZmllbGQgbG9va3VwLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbG9va3VwIG1vZGVsIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBTZXJ2aWNlIC0gVGhlIGxvb2t1cCBzZXJ2aWNlIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUgb2YgZmllbGQgb24gZWRpdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgVGFibGV2aWV3TW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+fSAtIFRoZSBmaWVsZCBsb29rdXAgZGVzY3JpcHRvciBhZGRlZCB0byB0aGUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyVW5zYWZlPExvb2t1cE1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlID0gTG9va3VwTW9kZWw+KFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICBwcm92aWRlcjogRmllbGRMb29rdXBQcm92aWRlclR5cGU8TG9va3VwTW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICB0eXBlPzogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlclVuc2FmZTxMb29rdXBNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT4ocHJvcGVydHksIHByb3ZpZGVyLCB0eXBlKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgZmllbGQgbG9va3VwIHdpdGggZGF0YSBwcm92aWRlciBvciBzZXJ2aWNlIGFuZCBvcHRpb25zIHZhbHVlIHByb3BlcnR5IGZvciBsb29rdXAgbW9kZWwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge0ZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPEZpZWxkTW9kZWwsIFNlcnZpY2U+fSBwcm92aWRlciAtIFRoZSBsb29rdXAgcHJvdmlkZXIuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxGaWVsZE1vZGVsPn0gdHlwZSAtIFRoZSB0eXBlIGRlc2NyaXB0b3IgZm9yIHRoZSBsb29rdXAgbW9kZWwuXG4gICAgICogQHBhcmFtIHtMb29rdXBWYWx1ZVByb3BlcnR5fSBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eSAtIFRoZSB2YWx1ZSBwcm9wZXJ0eSB1c2VkIGFzIHZhbHVlIGluIHRoZSBsb29rdXAgb3B0aW9ucy5cbiAgICAgKiBAdHlwZXBhcmFtIFByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgRWRpdG9yTW9kZWwuXG4gICAgICogQHR5cGVwYXJhbSBTZXJ2aWNlIC0gVGhlIGxvb2t1cCBzZXJ2aWNlIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBNb2RlbCAtIFRoZSBmaWVsZCBtb2RlbCB0eXBlLCBkZWZhdWx0cyB0byB0aGUgbm9uLW51bGxhYmxlIHR5cGUgb2YgdGhlIGVkaXRvcidzIHByb3BlcnR5LlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwVmFsdWVQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBvZiBsb29rdXAgbW9kZWwgdHlwZS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgdmFsdWUgdHlwZSBvZiBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBUYWJsZXZpZXdNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT59IC0gVGhlIGZpZWxkIGxvb2t1cCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIGFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyQW5kT3B0aW9uc1ZhbHVlUHJvcGVydHk8XG4gICAgICAgIFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWwsXG4gICAgICAgIFNlcnZpY2UsXG4gICAgICAgIExvb2t1cE1vZGVsLFxuICAgICAgICBMb29rdXBWYWx1ZVByb3BlcnR5IGV4dGVuZHMgS2V5b2ZBbmRPZlR5cGU8TG9va3VwTW9kZWwsIFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4sXG4gICAgICAgIEZpZWxkVmFsdWUgPSBUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV1cbiAgICA+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIHByb3ZpZGVyOiBGaWVsZExvb2t1cFByb3ZpZGVyVHlwZTxMb29rdXBNb2RlbCwgU2VydmljZT4sXG4gICAgICAgIHR5cGU6IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPixcbiAgICAgICAgbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHk6IExvb2t1cFZhbHVlUHJvcGVydHlcbiAgICApOiBGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIFRhYmxldmlld01vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlckFuZE9wdGlvbnNWYWx1ZVByb3BlcnR5PFByb3BlcnR5LCBTZXJ2aWNlLCBMb29rdXBNb2RlbCwgTG9va3VwVmFsdWVQcm9wZXJ0eSwgRmllbGRWYWx1ZT4oXG4gICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW1VOU0FGRV0gQWRkcyBhIGZpZWxkIGxvb2t1cCB3aXRoIGRhdGEgcHJvdmlkZXIgb3Igc2VydmljZSBhbmQgb3B0aW9ucyB2YWx1ZSBwcm9wZXJ0eSBmb3IgbG9va3VwIG1vZGVsLlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIFVOU0FGRSBiZWNhdXNlIHByb3BlcnR5IGlzIG5vdCB0eXBlLWNoZWNrZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtGaWVsZExvb2t1cFByb3ZpZGVyVHlwZTxGaWVsZE1vZGVsLCBTZXJ2aWNlPn0gcHJvdmlkZXIgLSBUaGUgbG9va3VwIHByb3ZpZGVyLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8RmllbGRNb2RlbD59IHR5cGUgLSBUaGUgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgbG9va3VwIG1vZGVsLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eSAtIFRoZSB2YWx1ZSBwcm9wZXJ0eSB1c2VkIGluIHRoZSBsb29rdXAgb3B0aW9ucy5cbiAgICAgKiBAdHlwZXBhcmFtIFNlcnZpY2UgLSBUaGUgc2VydmljZSB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgdmFsdWUgdHlwZSBvZiBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT59IC0gVGhlIGZpZWxkIGxvb2t1cCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIGFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyQW5kT3B0aW9uc1ZhbHVlUHJvcGVydHlVbnNhZmU8U2VydmljZSwgTG9va3VwTW9kZWwsIEZpZWxkVmFsdWUgPSBMb29rdXBNb2RlbD4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIHByb3ZpZGVyOiBGaWVsZExvb2t1cFByb3ZpZGVyVHlwZTxMb29rdXBNb2RlbCwgU2VydmljZT4sXG4gICAgICAgIHR5cGU6IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPixcbiAgICAgICAgbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHk6IHN0cmluZ1xuICAgICk6IEZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgVGFibGV2aWV3TW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyQW5kT3B0aW9uc1ZhbHVlUHJvcGVydHlVbnNhZmU8U2VydmljZSwgTG9va3VwTW9kZWwsIEZpZWxkVmFsdWU+KFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmFkZEZpZWxkVG9FZGl0QW5kQWRkKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cEVudW08UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgRW51bSBleHRlbmRzIE5vbk51bGxhYmxlPFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPixcbiAgICAgICAgb3B0aW9ucz86IEFycmF5PEVudW0+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZExvb2t1cEVudW0ocHJvcGVydHksIGVudW1EZXNjLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBFbnVtVW5zYWZlPEVudW0gPSBFbnVtQ29uc3RhbnRUeXBlPihwcm9wZXJ0eTogc3RyaW5nLCBlbnVtRGVzYzogRW51bURlc2NyaXB0b3I8RW51bT4sIG9wdGlvbnM/OiBBcnJheTxFbnVtPikge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRMb29rdXBFbnVtVW5zYWZlPEVudW0+KHByb3BlcnR5LCBlbnVtRGVzYywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTWFueUVkaXRvcjxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIFRhYmxldmlld01vZGVsLCBGaWVsZE1vZGVsID0gQXJyYXlJdGVtVHlwZTxUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+LCBGaWVsZFZhbHVlID0gVGFibGV2aWV3TW9kZWxbUHJvcGVydHldPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICB0YWJsZXZpZXdEZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPlxuICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRNYW55RWRpdG9yPFByb3BlcnR5LCBGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSwgdGFibGV2aWV3RGVzY3JpcHRvcik7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTWFueUVkaXRvclVuc2FmZTxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlID0gRmllbGRNb2RlbFtdPihwcm9wZXJ0eTogc3RyaW5nLCB0YWJsZXZpZXdEZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPikge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRNYW55RWRpdG9yVW5zYWZlPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5LCB0YWJsZXZpZXdEZXNjcmlwdG9yKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55VG9NYW55RWRpdG9yPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWwsIEZpZWxkTW9kZWwgPSBBcnJheUl0ZW1UeXBlPFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4sIEZpZWxkVmFsdWUgPSBUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIG1haW5UYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4sXG4gICAgICAgIGxvb2t1cFRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPlxuICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRNYW55VG9NYW55RWRpdG9yPFByb3BlcnR5LCBGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSwgbWFpblRhYmxlRGVzY3JpcHRvciwgbG9va3VwVGFibGVEZXNjcmlwdG9yKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55VG9NYW55RWRpdG9yVW5zYWZlPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsW10+KFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+LFxuICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD5cbiAgICApIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZEZpZWxkTWFueVRvTWFueUVkaXRvclVuc2FmZTxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSwgbWFpblRhYmxlRGVzY3JpcHRvciwgbG9va3VwVGFibGVEZXNjcmlwdG9yKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55VG9NYW55RWRpdG9yV2l0aFByb3ZpZGVyPFxuICAgICAgICBQcm9wZXJ0eSBleHRlbmRzIGtleW9mIFRhYmxldmlld01vZGVsLFxuICAgICAgICBTZXJ2aWNlLFxuICAgICAgICBGaWVsZE1vZGVsID0gQXJyYXlJdGVtVHlwZTxUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+LFxuICAgICAgICBGaWVsZFZhbHVlID0gVGFibGV2aWV3TW9kZWxbUHJvcGVydHldXG4gICAgPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+LFxuICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4sXG4gICAgICAgIGxvb2t1cERhdGFQcm92aWRlcjogSVRhYmxlRGF0YVByb3ZpZGVyPEZpZWxkTW9kZWwsIFNlcnZpY2U+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZE1hbnlUb01hbnlFZGl0b3JXaXRoUHJvdmlkZXI8UHJvcGVydHksIFNlcnZpY2UsIEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yLFxuICAgICAgICAgICAgbG9va3VwVGFibGVEZXNjcmlwdG9yLFxuICAgICAgICAgICAgbG9va3VwRGF0YVByb3ZpZGVyXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTWFueVRvTWFueUVkaXRvcldpdGhQcm92aWRlclVuc2FmZTxGaWVsZE1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlID0gRmllbGRNb2RlbFtdPihcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgbWFpblRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPixcbiAgICAgICAgbG9va3VwVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+LFxuICAgICAgICBsb29rdXBEYXRhUHJvdmlkZXI6IElUYWJsZURhdGFQcm92aWRlcjxGaWVsZE1vZGVsLCBTZXJ2aWNlPlxuICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRNYW55VG9NYW55RWRpdG9yV2l0aFByb3ZpZGVyVW5zYWZlPEZpZWxkTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+KFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yLFxuICAgICAgICAgICAgbG9va3VwVGFibGVEZXNjcmlwdG9yLFxuICAgICAgICAgICAgbG9va3VwRGF0YVByb3ZpZGVyXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZVRhYkdyb3VwKG5hbWU6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvci5jcmVhdGVUYWJHcm91cChuYW1lLCB0aXRsZSk7XG4gICAgICAgIHRoaXMuX2FkZEVkaXRvci5jcmVhdGVUYWJHcm91cChuYW1lLCB0aXRsZSk7XG4gICAgICAgIHRoaXMuX2VkaXRFZGl0b3IuY3JlYXRlVGFiR3JvdXAobmFtZSwgdGl0bGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRmllbGRHcm91cChuYW1lOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3IuY3JlYXRlRmllbGRHcm91cChuYW1lLCB0aXRsZSk7XG4gICAgICAgIHRoaXMuX2FkZEVkaXRvci5jcmVhdGVGaWVsZEdyb3VwKG5hbWUsIHRpdGxlKTtcbiAgICAgICAgdGhpcy5fZWRpdEVkaXRvci5jcmVhdGVGaWVsZEdyb3VwKG5hbWUsIHRpdGxlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWwsIFNvcnRzLCBGaWx0ZXJzPiB7XG4gICAgICAgIGNvbnN0IHRhYmxldmlldyA9IG5ldyBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbCwgU29ydHMsIEZpbHRlcnM+KHRoaXMuX21vZGVsLmNvcHkoKSk7XG4gICAgICAgIHRhYmxldmlldy5fdGFibGUgPSB0aGlzLl90YWJsZS5jb3B5KCk7XG4gICAgICAgIHRhYmxldmlldy5fZGV0YWlsc0VkaXRvciA9IHRoaXMuX2RldGFpbHNFZGl0b3IuY29weSgpO1xuICAgICAgICB0YWJsZXZpZXcuX2FkZEVkaXRvciA9IHRoaXMuX2FkZEVkaXRvci5jb3B5KCk7XG4gICAgICAgIHRhYmxldmlldy5fZWRpdEVkaXRvciA9IHRoaXMuX2VkaXRFZGl0b3IuY29weSgpO1xuICAgICAgICB0YWJsZXZpZXcuX3RhYmxlVGl0bGUgPSB0aGlzLl90YWJsZVRpdGxlO1xuICAgICAgICB0YWJsZXZpZXcuX2lzTG9jYWxpemVkID0gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgICAgIHJldHVybiB0YWJsZXZpZXc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBjb2x1bW4gYW5kIGZpZWxkIHdpdGggY3VzdG9tIHR5cGUsIGZvciBleGFtcGxlIGN1cnJlbmN5XG4gICAgICogaWYgZmllbGQgZXhpc3RzLCBpdCBpcyByZXBsYWNlZFxuICAgICAqIERPIE5PVCBVU0UgV0lUSCBUWVBFUyBXSEVSRSBBUkdTIEFSRSBSRVFVSVJFRCAtIEVSUk9SIFdJTEwgQkUgVEhST1dOXG4gICAgICogZm9yIGVudW0gdXNlIHdpdGhFbnVtVHlwZVxuICAgICAqIGZvciBjdXN0b20gY2xhc3MgdXNlIHdpdGhDbGFzc1R5cGVcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgbmFtZSBvZiBmaWVsZFxuICAgICAqIEBwYXJhbSBjb2x1bW5UeXBlIHJlcXVpcmVkIGNvbHVtbiB0eXBlXG4gICAgICogQHBhcmFtIGZpZWxkVHlwZSBvcHRpb25hbCwgaWYgbm90IHByb3ZpZGVkIGl0IGlzIGNvbnZlcnRlZCBmcm9tIGNvbHVtbiB0eXBlXG4gICAgICogQHBhcmFtIGNvbHVtbkRpc3BsYXlUeXBlIG9wdGlvbmFsXG4gICAgICovXG4gICAgcHVibGljIHdpdGhNb2RpZmllZFR5cGUocHJvcGVydHk6IGtleW9mIFRhYmxldmlld01vZGVsLCBjb2x1bW5UeXBlOiBDb2x1bW5UeXBlRW51bSwgZmllbGRUeXBlPzogRmllbGRJbnB1dFR5cGVFbnVtLCBjb2x1bW5EaXNwbGF5VHlwZT86IENvbHVtbkRpc3BsYXlUeXBlRW51bSk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoTW9kaWZpZWRUeXBlVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgY29sdW1uVHlwZSwgZmllbGRUeXBlLCBjb2x1bW5EaXNwbGF5VHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhNb2RpZmllZFR5cGVVbnNhZmUocHJvcGVydHk6IHN0cmluZywgY29sdW1uVHlwZTogQ29sdW1uVHlwZUVudW0sIGZpZWxkVHlwZT86IEZpZWxkSW5wdXRUeXBlRW51bSwgY29sdW1uRGlzcGxheVR5cGU/OiBDb2x1bW5EaXNwbGF5VHlwZUVudW0pOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsLnR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgd2l0aE1vZGlmaWVkVHlwZSBjYW5ub3QgYmUgZXhlY3V0ZWQgZm9yIHByb3BlcnR5ICR7cHJvcGVydHl9OiBNb2RlbCB0eXBlIGlzIG5vdCBkZWZpbmVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2x1bW5UeXBlID09PSBDb2x1bW5UeXBlRW51bS5FbnVtKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoJ0RvIG5vdCB1c2Ugd2l0aCB0eXBlcyB3aGVyZSBhcmdzIGFyZSByZXF1aXJlZCcsIHtuYW1lOiAnVGFibGV2aWV3RGVzY3JpcHRvckVycm9yJ30pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlRGVmID0gZ2V0VGFibGV2aWV3Q2xhc3NBdHRyaWJ1dGVEZWYodGhpcy5tb2RlbC50eXBlKS5maW5kKGF0dHIgPT4gYXR0ci5uYW1lID09PSBwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZURlZiAhPSBudWxsKSB7XG4gICAgICAgICAgICBmaWVsZFR5cGUgPz89IGdldEZpZWxkSW5wdXRUeXBlRnJvbUNvbHVtblR5cGUoY29sdW1uVHlwZSwgY29sdW1uRGlzcGxheVR5cGUpO1xuICAgICAgICAgICAgYXR0cmlidXRlRGVmLmZpZWxkVHlwZSA9IGZpZWxkVHlwZTtcblxuICAgICAgICAgICAgdGhpcy5fdGFibGUud2l0aENvbHVtbk1vZGlmaWVkVHlwZVVuc2FmZShwcm9wZXJ0eSwgY29sdW1uVHlwZSwgY29sdW1uRGlzcGxheVR5cGUpO1xuICAgICAgICAgICAgdGhpcy5fZWRpdEVkaXRvci53aXRoRmllbGRNb2RpZmllZFR5cGVVbnNhZmUocHJvcGVydHksIGZpZWxkVHlwZSk7XG4gICAgICAgICAgICB0aGlzLl9hZGRFZGl0b3Iud2l0aEZpZWxkTW9kaWZpZWRUeXBlVW5zYWZlKHByb3BlcnR5LCBmaWVsZFR5cGUpO1xuICAgICAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvci53aXRoRmllbGRNb2RpZmllZFR5cGVVbnNhZmUocHJvcGVydHksIGZpZWxkVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGNvbHVtbiB3aXRoIGVudW0gdHlwZVxuICAgICAqIGlmIGZpZWxkcyBleGlzdHMsIGl0IGlzIHJlcGxhY2VkXG4gICAgICogQHBhcmFtIHByb3BlcnR5IHByb3BlcnR5IG5hbWVcbiAgICAgKiBAcGFyYW0gZW51bURlc2MgdHlwZSBvZiBlbnVtXG4gICAgICogQHBhcmFtIGZpZWxkVHlwZSB0eXBlIG9mIGZpZWxkLCBvcHRpb25hbCwgZGVmYXVsdCBpcyBUZXh0XG4gICAgICovXG4gICAgcHVibGljIHdpdGhNb2RpZmllZEVudW08UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgRW51bSBleHRlbmRzIE5vbk51bGxhYmxlPFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIGVudW1EZXNjPzogRW51bURlc2NyaXB0b3I8RW51bT4sXG4gICAgICAgIGZpZWxkVHlwZT86IEZpZWxkSW5wdXRUeXBlRW51bVxuICAgICk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoTW9kaWZpZWRFbnVtVW5zYWZlPEVudW0+KHByb3BlcnR5IGFzIHN0cmluZywgZW51bURlc2MsIGZpZWxkVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhNb2RpZmllZEVudW1VbnNhZmU8RW51bSA9IGFueT4ocHJvcGVydHk6IHN0cmluZywgZW51bURlc2M/OiBFbnVtRGVzY3JpcHRvcjxFbnVtPiwgZmllbGRUeXBlPzogRmllbGRJbnB1dFR5cGVFbnVtKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5tb2RlbC50eXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYHdpdGhNb2RpZmllZEVudW0gY2Fubm90IGJlIGV4ZWN1dGVkIGZvciBwcm9wZXJ0eSAke3Byb3BlcnR5fTogTW9kZWwgdHlwZSBpcyBub3QgZGVmaW5lZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVEZWYgPSBnZXRUYWJsZXZpZXdDbGFzc0F0dHJpYnV0ZURlZih0aGlzLm1vZGVsLnR5cGUpLmZpbmQoYXR0ciA9PiBhdHRyLm5hbWUgPT09IHByb3BlcnR5KTtcblxuICAgICAgICBpZiAoYXR0cmlidXRlRGVmICE9IG51bGwpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZURlZi5maWVsZFR5cGUgPSBmaWVsZFR5cGUgPz8gRmllbGRJbnB1dFR5cGVFbnVtLlRleHQ7XG5cbiAgICAgICAgICAgIHRoaXMuX3RhYmxlLndpdGhDb2x1bW5Nb2RpZmllZEVudW1VbnNhZmU8RW51bT4ocHJvcGVydHksIGVudW1EZXNjKTtcbiAgICAgICAgICAgIHRoaXMuX2VkaXRFZGl0b3Iud2l0aEZpZWxkTW9kaWZpZWRFbnVtVW5zYWZlPEVudW0+KHByb3BlcnR5LCBlbnVtRGVzYyk7XG4gICAgICAgICAgICB0aGlzLl9kZXRhaWxzRWRpdG9yLndpdGhGaWVsZE1vZGlmaWVkRW51bVVuc2FmZTxFbnVtPihwcm9wZXJ0eSwgZW51bURlc2MpO1xuICAgICAgICAgICAgdGhpcy5fYWRkRWRpdG9yLndpdGhGaWVsZE1vZGlmaWVkRW51bVVuc2FmZTxFbnVtPihwcm9wZXJ0eSwgZW51bURlc2MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVzIGNvbHVtbiB3aXRoIGN1c3RvbSBjbGFzcyB0eXBlXG4gICAgICogZmllbGQgaXMgZ2VuZXJhdGVkIG9ubHkgaWYgbG9va3VwUHJvdmlkZXIgaXMgcHJvdmlkZWRcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgcHJvcGVydHkgbmFtZVxuICAgICAqIEBwYXJhbSB0eXBlIGNsYXNzIHR5cGUgb2Ygb2JqZWN0XG4gICAgICogQHBhcmFtIHRpdGxlUHJvcGVydHlcbiAgICAgKiBAcGFyYW0gbG9va3VwUHJvdmlkZXJcbiAgICAgKiBAcGFyYW0gb3B0aW9uc0xhYmVsUHJvcGVydHlcbiAgICAgKiBAcGFyYW0gZmlsdGVyUHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aE1vZGlmaWVkTG9va3VwPExvb2t1cE1vZGVsPihcbiAgICAgICAgcHJvcGVydHk6IGtleW9mIFRhYmxldmlld01vZGVsLFxuICAgICAgICB0eXBlPzogQ2xhc3NUeXBlPExvb2t1cE1vZGVsPixcbiAgICAgICAgbG9va3VwUHJvdmlkZXI/OiBJTG9va3VwRGF0YVByb3ZpZGVyPExvb2t1cE1vZGVsPixcbiAgICAgICAgdGl0bGVQcm9wZXJ0eT86IHN0cmluZyxcbiAgICAgICAgb3B0aW9uc0xhYmVsUHJvcGVydHk/OiBzdHJpbmcsXG4gICAgICAgIGZpbHRlclByb3BlcnR5Pzogc3RyaW5nXG4gICAgKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhNb2RpZmllZExvb2t1cFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIHR5cGUsIGxvb2t1cFByb3ZpZGVyLCB0aXRsZVByb3BlcnR5LCBvcHRpb25zTGFiZWxQcm9wZXJ0eSwgZmlsdGVyUHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTW9kaWZpZWRMb29rdXBVbnNhZmU8TG9va3VwTW9kZWw+KFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICB0eXBlPzogQ2xhc3NUeXBlPExvb2t1cE1vZGVsPixcbiAgICAgICAgbG9va3VwUHJvdmlkZXI/OiBJTG9va3VwRGF0YVByb3ZpZGVyPExvb2t1cE1vZGVsPixcbiAgICAgICAgdGl0bGVQcm9wZXJ0eT86IHN0cmluZyxcbiAgICAgICAgb3B0aW9uc0xhYmVsUHJvcGVydHk/OiBzdHJpbmcsXG4gICAgICAgIGZpbHRlclByb3BlcnR5Pzogc3RyaW5nXG4gICAgKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5tb2RlbC50eXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYHdpdGhNb2RpZmllZExvb2t1cCBjYW5ub3QgYmUgZXhlY3V0ZWQgZm9yIHByb3BlcnR5ICR7cHJvcGVydHl9OiBNb2RlbCB0eXBlIGlzIG5vdCBkZWZpbmVkLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlRGVmID0gZ2V0VGFibGV2aWV3Q2xhc3NBdHRyaWJ1dGVEZWYodGhpcy5tb2RlbC50eXBlKS5maW5kKGF0dHIgPT4gYXR0ci5uYW1lID09PSBwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZURlZiAhPSBudWxsKSB7XG4gICAgICAgICAgICB0eXBlID8/PSBhdHRyaWJ1dGVEZWYuY2xhc3NUeXBlID8/IFR5cGVSZWdpc3RyeS5nZXQoKS5maW5kVHlwZShhdHRyaWJ1dGVEZWYudHlwZSk7XG4gICAgICAgICAgICB0aXRsZVByb3BlcnR5ID8/PSB0eXBlID8gTW9kZWxVdGlsLmZpbmRUaXRsZUF0dHJpYnV0ZSh0eXBlKSA/PyB1bmRlZmluZWQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBvcHRpb25zTGFiZWxQcm9wZXJ0eSA/Pz0gdGl0bGVQcm9wZXJ0eTtcbiAgICAgICAgICAgIGF0dHJpYnV0ZURlZi5jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uU3RyaW5nO1xuICAgICAgICAgICAgYXR0cmlidXRlRGVmLmZpZWxkVHlwZSA9IEZpZWxkSW5wdXRUeXBlRW51bS5UZXh0O1xuXG4gICAgICAgICAgICBpZiAobG9va3VwUHJvdmlkZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlLndpdGhDb2x1bW5Nb2RpZmllZExvb2t1cFVuc2FmZShwcm9wZXJ0eSwgbG9va3VwUHJvdmlkZXIsIG9wdGlvbnNMYWJlbFByb3BlcnR5LCBmaWx0ZXJQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkRWRpdG9yLndpdGhGaWVsZE1vZGlmaWVkTG9va3VwV2l0aFByb3ZpZGVyVW5zYWZlKHByb3BlcnR5LCBsb29rdXBQcm92aWRlciwgb3B0aW9uc0xhYmVsUHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3Iud2l0aEZpZWxkTW9kaWZpZWRMb29rdXBXaXRoUHJvdmlkZXJVbnNhZmUocHJvcGVydHksIGxvb2t1cFByb3ZpZGVyLCBvcHRpb25zTGFiZWxQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWRpdEVkaXRvci53aXRoRmllbGRNb2RpZmllZExvb2t1cFdpdGhQcm92aWRlclVuc2FmZShwcm9wZXJ0eSwgbG9va3VwUHJvdmlkZXIsIG9wdGlvbnNMYWJlbFByb3BlcnR5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5fdGFibGUuZ2V0Q29sdW1uVW5zYWZlKHByb3BlcnR5KSA/PyB0aGlzLmFkZENvbHVtblVuc2FmZShwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgaWYgKHRpdGxlUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLndpdGhHZXR0ZXIodmFsdWUgPT4gdmFsdWU/Llt0aXRsZVByb3BlcnR5IGFzIGtleW9mIG9iamVjdF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2NhbGl6ZWQ8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgTG9jYWxpemF0aW9uTW9kZWwgPSBBcnJheUl0ZW1UeXBlPFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TG9jYWxpemF0aW9uTW9kZWw+LFxuICAgICAgICBsb2NhbGVQcm9wZXJ0eToga2V5b2YgTG9jYWxpemF0aW9uTW9kZWxcbiAgICApOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemVkVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgbW9kZWwsIGxvY2FsZVByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvY2FsaXplZFVuc2FmZTxMb2NhbGl6YXRpb25Nb2RlbD4ocHJvcGVydHk6IHN0cmluZywgbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxMb2NhbGl6YXRpb25Nb2RlbD4sIGxvY2FsZVByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNMb2NhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl90YWJsZS53aXRoTG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkobG9jYWxlUHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICAgICAgdGhpcy5kZXRhaWxzRWRpdG9yLmxvY2FsaXplZFVuc2FmZShwcm9wZXJ0eSwgbW9kZWwsIGxvY2FsZVByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5hZGRFZGl0b3IubG9jYWxpemVkVW5zYWZlKHByb3BlcnR5LCBtb2RlbCwgbG9jYWxlUHJvcGVydHkpO1xuICAgICAgICB0aGlzLmVkaXRFZGl0b3IubG9jYWxpemVkVW5zYWZlKHByb3BlcnR5LCBtb2RlbCwgbG9jYWxlUHJvcGVydHkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxldmlld0Rlc2NyaXB0b3IgZXh0ZW5kcyBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxhbnk+IHtcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKE1vZGVsRGVzY3JpcHRvci5jcmVhdGUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGU8VGFibGV2aWV3TW9kZWwsIFNvcnRQcm9wZXJ0eSA9IGtleW9mIFRhYmxldmlld01vZGVsLCBGaWx0ZXJQcm9wZXJ0eSA9IGtleW9mIFRhYmxldmlld01vZGVsPihcbiAgICAgICAgaWRQcm9wZXJ0eT86IGtleW9mIFRhYmxldmlld01vZGVsLFxuICAgICAgICB0aXRsZVByb3BlcnR5Pzoga2V5b2YgVGFibGV2aWV3TW9kZWwsXG4gICAgICAgIGkxOG5CYXNlS2V5Pzogc3RyaW5nIHwgQ2xhc3NUeXBlPHVua25vd24+XG4gICAgKTogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWwsIFNvcnRQcm9wZXJ0eSwgRmlsdGVyUHJvcGVydHk+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbCwgU29ydFByb3BlcnR5LCBGaWx0ZXJQcm9wZXJ0eT4oTW9kZWxEZXNjcmlwdG9yLmNyZWF0ZTxUYWJsZXZpZXdNb2RlbD4oaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgaTE4bkJhc2VLZXkpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21DbGFzczxUYWJsZXZpZXdNb2RlbCwgU29ydFByb3BlcnR5ID0ga2V5b2YgVGFibGV2aWV3TW9kZWwsIEZpbHRlclByb3BlcnR5ID0ga2V5b2YgVGFibGV2aWV3TW9kZWw+KFxuICAgICAgICB0eXBlOiBDbGFzc1R5cGU8VGFibGV2aWV3TW9kZWw+LFxuICAgICAgICBpZFByb3BlcnR5Pzoga2V5b2YgVGFibGV2aWV3TW9kZWwsXG4gICAgICAgIHRpdGxlUHJvcGVydHk/OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCxcbiAgICAgICAgaTE4bkJhc2VLZXk/OiBDbGFzc1R5cGU8dW5rbm93bj4gfCBzdHJpbmdcbiAgICApOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbCwgU29ydFByb3BlcnR5LCBGaWx0ZXJQcm9wZXJ0eT4ge1xuICAgICAgICByZXR1cm4gbmV3IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsLCBTb3J0UHJvcGVydHksIEZpbHRlclByb3BlcnR5PihNb2RlbERlc2NyaXB0b3IuZnJvbUNsYXNzKHR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHksIGkxOG5CYXNlS2V5KSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tTW9kZWw8VGFibGV2aWV3TW9kZWwsIFNvcnRQcm9wZXJ0eSA9IGtleW9mIFRhYmxldmlld01vZGVsLCBGaWx0ZXJQcm9wZXJ0eSA9IGtleW9mIFRhYmxldmlld01vZGVsPihcbiAgICAgICAgbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUYWJsZXZpZXdNb2RlbD5cbiAgICApOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbCwgU29ydFByb3BlcnR5LCBGaWx0ZXJQcm9wZXJ0eT4ge1xuICAgICAgICByZXR1cm4gbmV3IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsLCBTb3J0UHJvcGVydHksIEZpbHRlclByb3BlcnR5Pihtb2RlbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVzIGRlc2NyaXB0b3IgZnJvbSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBvZiBvcGVuYXBpIG1vZGVsXG4gICAgICogQHBhcmFtIHR5cGUgY2xhc3MgdHlwZVxuICAgICAqIEBwYXJhbSBpZFByb3BlcnR5XG4gICAgICogQHBhcmFtIHRpdGxlUHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21DbGFzc1dpdGhBdXRvQXR0cnNEZWY8VGFibGV2aWV3TW9kZWw+KFxuICAgICAgICB0eXBlOiBDbGFzc1R5cGU8VGFibGV2aWV3TW9kZWw+LFxuICAgICAgICBpZFByb3BlcnR5Pzoga2V5b2YgVGFibGV2aWV3TW9kZWwsXG4gICAgICAgIHRpdGxlUHJvcGVydHk/OiBrZXlvZiBUYWJsZXZpZXdNb2RlbFxuICAgICk6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsPiB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gTW9kZWxEZXNjcmlwdG9yLmZyb21DbGFzcyh0eXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5KTtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IFRhYmxldmlld0Rlc2NyaXB0b3IuZnJvbU1vZGVsKG1vZGVsKTtcbiAgICAgICAgZGVzY3JpcHRvci53aXRoVGFibGVEZXNjcmlwdG9yKFRhYmxlRGVzY3JpcHRvci5mcm9tQ2xhc3NXaXRoQXV0b0F0dHJzRGVmKHR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHkpKTtcbiAgICAgICAgZGVzY3JpcHRvci53aXRoRWRpdERlc2NyaXB0b3IoRWRpdG9yRGVzY3JpcHRvci5mcm9tQ2xhc3NXaXRoQXV0b0F0dHJzRGVmKHR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHksIFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkVkaXQpKTtcbiAgICAgICAgZGVzY3JpcHRvci53aXRoRGV0YWlsc0Rlc2NyaXB0b3IoRWRpdG9yRGVzY3JpcHRvci5mcm9tQ2xhc3NXaXRoQXV0b0F0dHJzRGVmKHR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHksIFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkRldGFpbHMpLndpdGhEaXNhYmxlZCgpKTtcbiAgICAgICAgZGVzY3JpcHRvci53aXRoQWRkRGVzY3JpcHRvcihFZGl0b3JEZXNjcmlwdG9yLmZyb21DbGFzc1dpdGhBdXRvQXR0cnNEZWYodHlwZSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uQWRkKSk7XG5cbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVzIGRlc2NyaXB0b3IgZnJvbSBnaXZlbiBhdHRyaWJ1dGUgZGVmaW5pdGlvblxuICAgICAqIEBwYXJhbSB0eXBlIGNsYXNzIHR5cGVcbiAgICAgKiBAcGFyYW0gY29sdW1uQXR0cmlidXRlcyBhdHRyaWJ1dGUgZGVmaW5pdGlvbiB0byBnZW5lcmF0ZSBjb2x1bW5zXG4gICAgICogQHBhcmFtIGZpZWxkQXR0cmlidXRlcyBhdHRyaWJ1dGUgZGVmaW5pdGlvbiB0byBnZW5lcmF0ZSBmaWVsZHMsIGlmIHVuZGVmaW5lZCBjb2x1bW5EZWZpbml0aW9uIGlzIHVzZWQsIGlmIG51bGwgZWRpdG9ycyBhcmUgbm90IGdlbmVyYXRlZFxuICAgICAqIEBwYXJhbSBpZFByb3BlcnR5XG4gICAgICogQHBhcmFtIHRpdGxlUHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21DbGFzc1dpdGhDdXN0b21BdHRyc0RlZjxUYWJsZXZpZXdNb2RlbD4oXG4gICAgICAgIHR5cGU6IENsYXNzVHlwZTxUYWJsZXZpZXdNb2RlbD4sXG4gICAgICAgIGNvbHVtbkF0dHJpYnV0ZXM6IFRhYmxldmlld0NsYXNzQXR0cmlidXRlRGVmW10sXG4gICAgICAgIGZpZWxkQXR0cmlidXRlcz86IFRhYmxldmlld0NsYXNzQXR0cmlidXRlRGVmW10gfCBudWxsLFxuICAgICAgICBpZFByb3BlcnR5Pzoga2V5b2YgVGFibGV2aWV3TW9kZWwsXG4gICAgICAgIHRpdGxlUHJvcGVydHk/OiBrZXlvZiBUYWJsZXZpZXdNb2RlbFxuICAgICk6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBUYWJsZXZpZXdEZXNjcmlwdG9yLmZyb21Nb2RlbChNb2RlbERlc2NyaXB0b3IuZnJvbUNsYXNzKHR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHkpKTtcbiAgICAgICAgZGVzY3JpcHRvci53aXRoVGFibGVEZXNjcmlwdG9yKFRhYmxlRGVzY3JpcHRvci5mcm9tQ2xhc3NXaXRoQ3VzdG9tQXR0cnNEZWYodHlwZSwgY29sdW1uQXR0cmlidXRlcywgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSkpO1xuXG4gICAgICAgIGlmIChmaWVsZEF0dHJpYnV0ZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGRlc2NyaXB0b3Iud2l0aEVkaXREZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgIEVkaXRvckRlc2NyaXB0b3IuZnJvbUNsYXNzV2l0aEN1c3RvbUF0dHJzRGVmKHR5cGUsIGZpZWxkQXR0cmlidXRlcyA/PyBjb2x1bW5BdHRyaWJ1dGVzLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5FZGl0KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRlc2NyaXB0b3Iud2l0aERldGFpbHNEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgIEVkaXRvckRlc2NyaXB0b3IuZnJvbUNsYXNzV2l0aEN1c3RvbUF0dHJzRGVmKHR5cGUsIGZpZWxkQXR0cmlidXRlcyA/PyBjb2x1bW5BdHRyaWJ1dGVzLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5EZXRhaWxzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRlc2NyaXB0b3Iud2l0aEFkZERlc2NyaXB0b3IoXG4gICAgICAgICAgICAgICAgRWRpdG9yRGVzY3JpcHRvci5mcm9tQ2xhc3NXaXRoQ3VzdG9tQXR0cnNEZWYodHlwZSwgZmllbGRBdHRyaWJ1dGVzID8/IGNvbHVtbkF0dHJpYnV0ZXMsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHksIFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkFkZClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZXZpZXdEeW5hbWljRGVzY3JpcHRvckludCBleHRlbmRzIFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PGFueT4ge1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfdGFibGU6IFRhYmxlRHluYW1pY0Rlc2NyaXB0b3JJbnN0O1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8YW55Pikge1xuICAgICAgICBzdXBlcihtb2RlbCk7XG4gICAgICAgIHRoaXMuX3RhYmxlID0gVGFibGVEeW5hbWljRGVzY3JpcHRvci5mcm9tTW9kZWwodGhpcy5tb2RlbCk7XG4gICAgICAgIHN1cGVyLl90YWJsZVRpdGxlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIGN1c3RvbSB0YWJsZSBkZXNjcmlwdG9yXG4gICAgICogQHBhcmFtIGRlc2NyaXB0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aFRhYmxlRGVzY3JpcHRvcihkZXNjcmlwdG9yOiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9ySW5zdCk6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZSA9IGRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHMgdmlzaWJpbGl0eSBoaWRkZW4gc3RhdGUgdG8gY29sdW1uIHdpdGggZ2l2ZW4gcHJvcGVydHlcbiAgICAgKiBlcXVhbHMgdG8gYmUgcmVtb3ZpbmcgaW4gYXV0byBhbmQgYmFzZSB0YWJsZXZpZXcgZGVzY3JpcHRvclxuICAgICAqICogQHBhcmFtIHByb3BlcnR5IGNvbHVtbidzIHByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHJlbW92ZUNvbHVtbihwcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlLnJlbW92ZUNvbHVtbihwcm9wZXJ0eSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRW50aXR5Rm9yVHJhbnNsYXRpb25zKGkxOG5CYXNlS2V5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGFibGUubW9kZWwud2l0aEkxOG5CYXNlKGkxOG5CYXNlS2V5KTtcbiAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvci5tb2RlbC53aXRoSTE4bkJhc2UoaTE4bkJhc2VLZXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGRlZXAgY29weSBvZiB0YWJsZXZpZXcgb2JqZWN0IGFuZCBpdHMgY2hpbGRyZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29weSgpOiBUYWJsZXZpZXdEeW5hbWljRGVzY3JpcHRvckludCB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgVGFibGV2aWV3RHluYW1pY0Rlc2NyaXB0b3JJbnQodGhpcy5tb2RlbC5jb3B5KCkpO1xuICAgICAgICBkZXNjcmlwdG9yLl90YWJsZSA9IHRoaXMuX3RhYmxlLmNvcHkoKTtcbiAgICAgICAgZGVzY3JpcHRvci5fdGFibGVUaXRsZSA9IHRoaXMuX3RhYmxlVGl0bGU7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxldmlld0R5bmFtaWNEZXNjcmlwdG9yIGV4dGVuZHMgVGFibGV2aWV3RHluYW1pY0Rlc2NyaXB0b3JJbnQge1xuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoTW9kZWxEZXNjcmlwdG9yLmNyZWF0ZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZShpZFByb3BlcnR5Pzogc3RyaW5nLCB0aXRsZVByb3BlcnR5Pzogc3RyaW5nLCBpMThuQmFzZUtleT86IHN0cmluZyB8IENsYXNzVHlwZTxhbnk+KTogVGFibGV2aWV3RHluYW1pY0Rlc2NyaXB0b3JJbnQge1xuICAgICAgICByZXR1cm4gbmV3IFRhYmxldmlld0R5bmFtaWNEZXNjcmlwdG9ySW50KE1vZGVsRGVzY3JpcHRvci5jcmVhdGU8YW55PihpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBpMThuQmFzZUtleSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU1vZGVsKG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8YW55Pik6IFRhYmxldmlld0R5bmFtaWNEZXNjcmlwdG9ySW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZXZpZXdEeW5hbWljRGVzY3JpcHRvckludChtb2RlbCk7XG4gICAgfVxufVxuIl19
665
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvYXBpL3NyYy90YWJsZXZpZXcvZGVzY3JpcHRvcnMvdGFibGV2aWV3LmRlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILG9CQUFvQixFQU9wQixZQUFZLEVBQ2YsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxPQUFPLEVBQWlCLGVBQWUsRUFBa0IsdUJBQXVCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUN0SCxPQUFPLEVBR0gsY0FBYyxFQUdkLGVBQWUsRUFFZixzQkFBc0IsRUFFekIsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQXVCLE1BQU0sNENBQTRDLENBQUM7QUFLbEcsT0FBTyxFQUFDLCtCQUErQixFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFFL0YsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDekUsT0FBTyxFQUFDLGtCQUFrQixFQUF1QyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pHLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBR25GLE1BQU0sT0FBTyx1QkFBdUI7SUFjaEMsWUFBc0IsS0FBc0M7UUFGbEQsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFHM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsT0FBTyxDQUFDO1FBQ3JELElBQUksQ0FBQyxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FB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SyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQW1CLEVBQUUsYUFBc0IsRUFBRSxXQUFxQztRQUNuRyxPQUFPLElBQUksNkJBQTZCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBTSxVQUFVLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDbEgsQ0FBQztJQUVNLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBMkI7UUFDL0MsT0FBTyxJQUFJLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQXJyYXlJdGVtVHlwZSxcbiAgICBDbGFzc1R5cGUsXG4gICAgQ29tbW9uc0ludGVybmFsRXJyb3IsXG4gICAgRW51bUNvbnN0YW50VHlwZSxcbiAgICBJTG9va3VwRGF0YVByb3ZpZGVyLFxuICAgIElUYWJsZXZpZXdEZXNjcmlwdG9yLFxuICAgIElkVHlwZSxcbiAgICBLZXlvZkFuZE9mVHlwZSxcbiAgICBOdWxsYWJsZSxcbiAgICBUeXBlUmVnaXN0cnlcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7RmlsdGVyRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9maWx0ZXInO1xuaW1wb3J0IHtFbnVtRGVzY3JpcHRvciwgTW9kZWxEZXNjcmlwdG9yLCBUeXBlRGVzY3JpcHRvciwgZmluZENsYXNzVGl0bGVBdHRyaWJ1dGV9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuaW1wb3J0IHtcbiAgICBDb2x1bW5EZXNjcmlwdG9yLFxuICAgIENvbHVtbkRpc3BsYXlUeXBlRW51bSxcbiAgICBDb2x1bW5UeXBlRW51bSxcbiAgICBJQ29sdW1uc01hbmFnZUludGVyZmFjZSxcbiAgICBJVGFibGVEYXRhUHJvdmlkZXIsXG4gICAgVGFibGVEZXNjcmlwdG9yLFxuICAgIFRhYmxlRGVzY3JpcHRvckluc3QsXG4gICAgVGFibGVEeW5hbWljRGVzY3JpcHRvcixcbiAgICBUYWJsZUR5bmFtaWNEZXNjcmlwdG9ySW5zdFxufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxlL2FwaSc7XG5cbmltcG9ydCB7RWRpdG9yRGVzY3JpcHRvciwgRWRpdG9yRGVzY3JpcHRvckluc3R9IGZyb20gJy4uLy4uL2VkaXRvci9kZXNjcmlwdG9ycy9lZGl0b3IuZGVzY3JpcHRvcic7XG5pbXBvcnQge0FGaWVsZERlc2NyaXB0b3J9IGZyb20gJy4uLy4uL2VkaXRvci9kZXNjcmlwdG9ycy9maWVsZC1iYXNlLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtGaWVsZExvb2t1cERlc2NyaXB0b3IsIEZpZWxkTG9va3VwUHJvdmlkZXJUeXBlfSBmcm9tICcuLi8uLi9lZGl0b3IvZGVzY3JpcHRvcnMvZmllbGQtbG9va3VwLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yT3B0c1R5cGV9IGZyb20gJy4uLy4uL2VkaXRvci9kZXNjcmlwdG9ycy9maWVsZC12YWxpZGF0aW9uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtGaWVsZElucHV0RGVzY3JpcHRvclR5cGV9IGZyb20gJy4uLy4uL2VkaXRvci9kZXNjcmlwdG9ycy9maWVsZC5kZXNjcmlwdG9yJztcbmltcG9ydCB7Z2V0RmllbGRJbnB1dFR5cGVGcm9tQ29sdW1uVHlwZX0gZnJvbSAnLi4vLi4vZWRpdG9yL2hlbHBlcnMvY2xhc3MtYXR0cmlidXRlLWNvbnZlcnRlcic7XG5pbXBvcnQge0lGaWVsZHNNYW5hZ2VJbnRlcmZhY2V9IGZyb20gJy4uLy4uL2VkaXRvci9tb2RlbHMvZWRpdG9yLWZpZWxkcy5tb2RlbCc7XG5pbXBvcnQge1RhYmxldmlld0VkaXRvclR5cGVFbnVtfSBmcm9tICcuLi8uLi9lZGl0b3IvbW9kZWxzL2VkaXRvci5tb2RlbCc7XG5pbXBvcnQge0ZpZWxkSW5wdXRUeXBlRW51bSwgRm9ybVZhbGlkYXRpb25NZXNzYWdlLCBGb3JtVmFsaWRhdG9yfSBmcm9tICcuLi8uLi9lZGl0b3IvbW9kZWxzL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7Z2V0VGFibGV2aWV3Q2xhc3NBdHRyaWJ1dGVEZWZ9IGZyb20gJy4uL2hlbHBlcnMvY2xhc3MtYXR0cmlidXRlLWNvbnZlcnRlcic7XG5pbXBvcnQge1RhYmxldmlld0NsYXNzQXR0cmlidXRlRGVmfSBmcm9tICcuLi9tb2RlbHMvY2xhc3MtdGFibGV2aWV3LWF0dHJpYnV0ZS5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbCwgU29ydHMgPSBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgRmlsdGVycyA9IGtleW9mIFRhYmxldmlld01vZGVsPlxuICAgIGltcGxlbWVudHMgSVRhYmxldmlld0Rlc2NyaXB0b3I8VGFibGV2aWV3TW9kZWwsIFNvcnRzLCBGaWx0ZXJzPiwgSUNvbHVtbnNNYW5hZ2VJbnRlcmZhY2U8VGFibGV2aWV3TW9kZWwsIFNvcnRzLCBGaWx0ZXJzPiwgSUZpZWxkc01hbmFnZUludGVyZmFjZTxUYWJsZXZpZXdNb2RlbD5cbntcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tb2RlbDogTW9kZWxEZXNjcmlwdG9yPFRhYmxldmlld01vZGVsPjtcblxuICAgIHByb3RlY3RlZCBfdGFibGU6IFRhYmxlRGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWwsIFNvcnRzLCBGaWx0ZXJzPjtcbiAgICBwcm90ZWN0ZWQgX2RldGFpbHNFZGl0b3I6IEVkaXRvckRlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsPjtcbiAgICBwcm90ZWN0ZWQgX2FkZEVkaXRvcjogRWRpdG9yRGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWw+O1xuICAgIHByb3RlY3RlZCBfZWRpdEVkaXRvcjogRWRpdG9yRGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWw+O1xuXG4gICAgcHJvdGVjdGVkIF90YWJsZVRpdGxlPzogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIF9pc0xvY2FsaXplZCA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8VGFibGV2aWV3TW9kZWw+KSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG4gICAgICAgIHRoaXMuX3RhYmxlID0gVGFibGVEZXNjcmlwdG9yLmZyb21Nb2RlbChtb2RlbCk7XG4gICAgICAgIHRoaXMuX3RhYmxlVGl0bGUgPSBgJHt0aGlzLl9tb2RlbC5pMThuQmFzZUtleX0ubmFtZWA7XG4gICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3IgPSBFZGl0b3JEZXNjcmlwdG9yLmZyb21Nb2RlbChtb2RlbCwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRGV0YWlscyk7XG4gICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3Iud2l0aERpc2FibGVkKCk7XG4gICAgICAgIHRoaXMuX2FkZEVkaXRvciA9IEVkaXRvckRlc2NyaXB0b3IuZnJvbU1vZGVsKG1vZGVsLCBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5BZGQpO1xuICAgICAgICB0aGlzLl9lZGl0RWRpdG9yID0gRWRpdG9yRGVzY3JpcHRvci5mcm9tTW9kZWwobW9kZWwsIFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkVkaXQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRldGFpbHNFZGl0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZXRhaWxzRWRpdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWRkRWRpdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkRWRpdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdEVkaXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRFZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJsZVRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGVUaXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGlzTG9jYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUYWJsZURlc2NyaXB0b3IoZGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbCwgU29ydHMsIEZpbHRlcnM+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlID0gZGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhFZGl0b3JEZXNjcmlwdG9ycyhkZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvciA9IGRlc2NyaXB0b3I7XG4gICAgICAgIHRoaXMuX2VkaXRFZGl0b3IgPSBkZXNjcmlwdG9yO1xuICAgICAgICB0aGlzLl9hZGRFZGl0b3IgPSBkZXNjcmlwdG9yO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERldGFpbHNEZXNjcmlwdG9yKGRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kZXRhaWxzRWRpdG9yID0gZGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBZGREZXNjcmlwdG9yKGRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9hZGRFZGl0b3IgPSBkZXNjcmlwdG9yO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEVkaXREZXNjcmlwdG9yKGRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9lZGl0RWRpdG9yID0gZGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBuZXcgY29weSBvZiBlZGl0b3IgZGVzY3JpcHRvciBhbmQgbWFrZXMgaXQgZGlzYWJsZWRcbiAgICAgKiB1c2FibGUgaW4gY29tYmluYXRpb24gd2l0aCB0aGlzOjp3aXRoRWRpdG9yRGVzY3JpcHRvcnMsIHdoZXJlIGRldGFpbHNEZXNjcmlwdG9yIGlzIG1hZGUgbm9uLWRpc2FibGVkXG4gICAgICogQHBhcmFtIHR5cGUgd2hpY2ggZWRpdG9yIHR5cGUgdG8gc2V0IHRvIGRpc2FibGVkXG4gICAgICovXG4gICAgcHVibGljIHdpdGhEaXNhYmxlZEVkaXRvckRlc2NyaXB0b3IodHlwZSA9IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkRldGFpbHMpOiB0aGlzIHtcbiAgICAgICAgaWYgKHR5cGUgPT09IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkVkaXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2VkaXRFZGl0b3IgPSB0aGlzLl9lZGl0RWRpdG9yLmNvcHkoKS53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5EZXRhaWxzKSB7XG4gICAgICAgICAgICB0aGlzLl9kZXRhaWxzRWRpdG9yID0gdGhpcy5fZGV0YWlsc0VkaXRvci5jb3B5KCkud2l0aERpc2FibGVkKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uQWRkKSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRFZGl0b3IgPSB0aGlzLl9hZGRFZGl0b3IuY29weSgpLndpdGhEaXNhYmxlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGFibGVUaXRsZSh0aXRsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlVGl0bGUgPSB0aXRsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhWYWxpZGF0aW9uPFZhbHVlID0gVGFibGV2aWV3TW9kZWw+KFxuICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgIGV4cHJlc3Npb246IEZvcm1WYWxpZGF0b3I8VmFsdWU+LFxuICAgICAgICBtZXNzYWdlPzogRm9ybVZhbGlkYXRpb25NZXNzYWdlPFZhbHVlPixcbiAgICAgICAgb3B0cz86IEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3JPcHRzVHlwZTxrZXlvZiBUYWJsZXZpZXdNb2RlbD5cbiAgICApOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFZhbGlkYXRpb25VbnNhZmUobmFtZSwgZXhwcmVzc2lvbiwgbWVzc2FnZSwgb3B0cyBhcyBGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yT3B0c1R5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVmFsaWRhdGlvblVuc2FmZTxWYWx1ZSA9IFRhYmxldmlld01vZGVsPihcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICBleHByZXNzaW9uOiBGb3JtVmFsaWRhdG9yPFZhbHVlPixcbiAgICAgICAgbWVzc2FnZT86IEZvcm1WYWxpZGF0aW9uTWVzc2FnZTxWYWx1ZT4sXG4gICAgICAgIG9wdHM/OiBGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yT3B0c1R5cGVcbiAgICApOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvci53aXRoVmFsaWRhdGlvblVuc2FmZTxWYWx1ZT4obmFtZSwgZXhwcmVzc2lvbiwgbWVzc2FnZSwgb3B0cyk7XG4gICAgICAgIHRoaXMuX2FkZEVkaXRvci53aXRoVmFsaWRhdGlvblVuc2FmZTxWYWx1ZT4obmFtZSwgZXhwcmVzc2lvbiwgbWVzc2FnZSwgb3B0cyk7XG4gICAgICAgIHRoaXMuX2VkaXRFZGl0b3Iud2l0aFZhbGlkYXRpb25VbnNhZmU8VmFsdWU+KG5hbWUsIGV4cHJlc3Npb24sIG1lc3NhZ2UsIG9wdHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29sdW1uKHByb3BlcnR5OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGUuZ2V0Q29sdW1uKHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29sdW1uVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlLmdldENvbHVtblVuc2FmZShwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUNvbHVtbihwcm9wZXJ0eToga2V5b2YgVGFibGV2aWV3TW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUucmVtb3ZlQ29sdW1uKHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlQ29sdW1uVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUucmVtb3ZlQ29sdW1uVW5zYWZlKHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvbHVtbjxDb2x1bW5Nb2RlbCwgQ29sdW1uVmFsdWUgPSBDb2x1bW5Nb2RlbD4oY29sdW1uOiBDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZXZpZXdNb2RlbCwgQ29sdW1uVmFsdWU+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlLndpdGhDb2x1bW48Q29sdW1uTW9kZWwsIENvbHVtblZhbHVlPihjb2x1bW4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWw+KHByb3BlcnR5OiBQcm9wZXJ0eSk6IENvbHVtbkRlc2NyaXB0b3I8Tm9uTnVsbGFibGU8VGFibGV2aWV3TW9kZWxbUHJvcGVydHldPiwgVGFibGV2aWV3TW9kZWwsIFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGUuYWRkQ29sdW1uKHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uRW51bTxQcm9wZXJ0eUtleSBleHRlbmRzIGtleW9mIFRhYmxldmlld01vZGVsLCBFbnVtIGV4dGVuZHMgTm9uTnVsbGFibGU8VGFibGV2aWV3TW9kZWxbUHJvcGVydHlLZXldPj4ocHJvcGVydHk6IFByb3BlcnR5S2V5LCBlbnVtRGVzYzogRW51bURlc2NyaXB0b3I8RW51bT4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlLmFkZENvbHVtbkVudW0ocHJvcGVydHksIGVudW1EZXNjKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uVW5zYWZlPENvbHVtbk1vZGVsID0gYW55Pihwcm9wZXJ0eTogc3RyaW5nKTogQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGV2aWV3TW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlLmFkZENvbHVtblVuc2FmZShwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDb2x1bW5zKC4uLnByb3BlcnRpZXM6IChrZXlvZiBUYWJsZXZpZXdNb2RlbClbXSk6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZS53aXRoQ29sdW1ucyguLi5wcm9wZXJ0aWVzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNvcnQocHJvcGVydHk6IFNvcnRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZS5nZXRTb3J0KHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U29ydFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZS5nZXRTb3J0VW5zYWZlKHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlU29ydChwcm9wZXJ0eTogU29ydHMpIHtcbiAgICAgICAgdGhpcy5fdGFibGUucmVtb3ZlU29ydChwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZVNvcnRVbnNhZmUocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICB0aGlzLl90YWJsZS5yZW1vdmVTb3J0VW5zYWZlKHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkU29ydChwcm9wZXJ0eTogU29ydHMsIGlzRGVmYXVsdCA9IGZhbHNlLCBhc2NlbmRpbmc/OiBib29sZWFuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZS5hZGRTb3J0KHByb3BlcnR5LCBpc0RlZmF1bHQsIGFzY2VuZGluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFNvcnRVbnNhZmUocHJvcGVydHk6IHN0cmluZywgaXNEZWZhdWx0ID0gZmFsc2UsIGFzY2VuZGluZz86IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlLmFkZFNvcnRVbnNhZmUocHJvcGVydHksIGlzRGVmYXVsdCwgYXNjZW5kaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNvcnQocHJvcGVydHk6IFNvcnRzLCBpc0RlZmF1bHQgPSBmYWxzZSwgYXNjZW5kaW5nPzogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZS53aXRoU29ydChwcm9wZXJ0eSwgaXNEZWZhdWx0LCBhc2NlbmRpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNvcnRVbnNhZmUocHJvcGVydHk6IHN0cmluZywgaXNEZWZhdWx0ID0gZmFsc2UsIGFzY2VuZGluZz86IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGFibGUud2l0aFNvcnRVbnNhZmUocHJvcGVydHksIGlzRGVmYXVsdCwgYXNjZW5kaW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEZWZhdWx0U29ydChwcm9wZXJ0eTogU29ydHMsIGFzY2VuZGluZz86IGJvb2xlYW4sIG9yZGVyPzogbnVtYmVyLCBlbmFibGVkPzogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZS53aXRoRGVmYXVsdFNvcnQocHJvcGVydHksIGFzY2VuZGluZywgb3JkZXIsIGVuYWJsZWQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcsIGFzY2VuZGluZz86IGJvb2xlYW4sIG9yZGVyPzogbnVtYmVyLCBlbmFibGVkPzogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZS53aXRoRGVmYXVsdFNvcnRVbnNhZmUocHJvcGVydHksIGFzY2VuZGluZywgb3JkZXIsIGVuYWJsZWQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNvcnRzKC4uLnByb3BlcnRpZXM6IFNvcnRzW10pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGFibGUud2l0aFNvcnRzKC4uLnByb3BlcnRpZXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNvcnRzVW5zYWZlKC4uLnByb3BlcnRpZXM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlLndpdGhTb3J0c1Vuc2FmZSguLi5wcm9wZXJ0aWVzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpbHRlcihwcm9wZXJ0eTogRmlsdGVycykge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGUuZ2V0RmlsdGVyKHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmlsdGVyVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlLmdldEZpbHRlclVuc2FmZShwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZpbHRlcihwcm9wZXJ0eTogRmlsdGVycykge1xuICAgICAgICB0aGlzLl90YWJsZS5yZW1vdmVGaWx0ZXIocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVGaWx0ZXJVbnNhZmUocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICB0aGlzLl90YWJsZS5yZW1vdmVGaWx0ZXJVbnNhZmUocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWx0ZXI8RmlsdGVyTW9kZWwgPSBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWwgPyBUYWJsZXZpZXdNb2RlbFtGaWx0ZXJzXSA6IG5ldmVyPihwcm9wZXJ0eTogRmlsdGVycykge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGUuYWRkRmlsdGVyPEZpbHRlck1vZGVsPihwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlclVuc2FmZTxGaWx0ZXJNb2RlbD4ocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGUuYWRkRmlsdGVyVW5zYWZlPEZpbHRlck1vZGVsPihwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlckxvb2t1cDxGaWx0ZXJNb2RlbCA9IEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCA/IE5vbk51bGxhYmxlPFRhYmxldmlld01vZGVsW0ZpbHRlcnNdPiA6IG5ldmVyLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihcbiAgICAgICAgcHJvcGVydHk6IEZpbHRlcnMsXG4gICAgICAgIHByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxGaWx0ZXJNb2RlbCwgU2VydmljZT4sXG4gICAgICAgIG9wdGlvbnNWYWx1ZVByb3BlcnR5Pzoga2V5b2YgRmlsdGVyTW9kZWxcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlLmFkZEZpbHRlckxvb2t1cDxGaWx0ZXJNb2RlbCwgU2VydmljZT4ocHJvcGVydHksIHByb3ZpZGVyLCBvcHRpb25zVmFsdWVQcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlckxvb2t1cFVuc2FmZTxGaWx0ZXJNb2RlbCwgU2VydmljZSA9IHVuZGVmaW5lZD4ocHJvcGVydHk6IHN0cmluZywgcHJvdmlkZXI/OiBJTG9va3VwRGF0YVByb3ZpZGVyPEZpbHRlck1vZGVsLCBTZXJ2aWNlPiwgb3B0aW9uc1ZhbHVlUHJvcGVydHk/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlLmFkZEZpbHRlckxvb2t1cFVuc2FmZTxGaWx0ZXJNb2RlbCwgU2VydmljZT4ocHJvcGVydHksIHByb3ZpZGVyLCBvcHRpb25zVmFsdWVQcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlckxvb2t1cEVudW08RW51bT4ocHJvcGVydHk6IEZpbHRlcnMsIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPiwgb3B0aW9ucz86IEFycmF5PEVudW0+KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZS5hZGRGaWx0ZXJMb29rdXBFbnVtPEVudW0+KHByb3BlcnR5LCBlbnVtRGVzYywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlckxvb2t1cEVudW1VbnNhZmU8RW51bSA9IEVudW1Db25zdGFudFR5cGU+KHByb3BlcnR5OiBzdHJpbmcsIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPiwgb3B0aW9ucz86IEFycmF5PEVudW0+KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZS5hZGRGaWx0ZXJMb29rdXBFbnVtVW5zYWZlPEVudW0+KHByb3BlcnR5LCBlbnVtRGVzYywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlckZyb21Db2x1bW4ocHJvcGVydHk6IEV4dHJhY3Q8RmlsdGVycywga2V5b2YgVGFibGV2aWV3TW9kZWw+LCBmb3JjZVNpbXBsZSA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZS5hZGRGaWx0ZXJGcm9tQ29sdW1uKHByb3BlcnR5LCBmb3JjZVNpbXBsZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXJzRnJvbUNvbHVtbnMoLi4ucHJvcGVydGllczogRXh0cmFjdDxGaWx0ZXJzLCBrZXlvZiBUYWJsZXZpZXdNb2RlbD5bXSk6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZS53aXRoRmlsdGVyc0Zyb21Db2x1bW5zKC4uLnByb3BlcnRpZXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbHRlcnNGcm9tQ29sdW1uc1Vuc2FmZSguLi5wcm9wZXJ0aWVzOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZS53aXRoRmlsdGVyc0Zyb21Db2x1bW5zVW5zYWZlKC4uLnByb3BlcnRpZXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmlsdGVyRnJvbUNvbHVtblVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBmb3JjZVNpbXBsZSA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZS5hZGRGaWx0ZXJGcm9tQ29sdW1uVW5zYWZlKHByb3BlcnR5LCBmb3JjZVNpbXBsZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXI8RmlsdGVyTW9kZWw+KHByb3BlcnR5OiBGaWx0ZXJzLCBmaWx0ZXI6IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxldmlld01vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZS53aXRoRmlsdGVyPEZpbHRlck1vZGVsPihwcm9wZXJ0eSwgZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KGZpbHRlcjogRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGV2aWV3TW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlLndpdGhGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KGZpbHRlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWVsZChwcm9wZXJ0eToga2V5b2YgVGFibGV2aWV3TW9kZWwsIGVkaXRvclR5cGU6IFRhYmxldmlld0VkaXRvclR5cGVFbnVtKTogQUZpZWxkRGVzY3JpcHRvcjxhbnksIFRhYmxldmlld01vZGVsPiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGVkaXRvclR5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWVsZFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBlZGl0b3JUeXBlOiBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bSk6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBUYWJsZXZpZXdNb2RlbD4gfCBudWxsIHtcbiAgICAgICAgc3dpdGNoIChlZGl0b3JUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkVkaXQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRFZGl0b3IuZ2V0RmllbGRVbnNhZmUocHJvcGVydHkpO1xuICAgICAgICAgICAgY2FzZSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5BZGQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEVkaXRvci5nZXRGaWVsZFVuc2FmZShwcm9wZXJ0eSk7XG4gICAgICAgICAgICBjYXNlIFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkRldGFpbHM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RldGFpbHNFZGl0b3IuZ2V0RmllbGRVbnNhZmUocHJvcGVydHkpO1xuICAgICAgICAgICAgY2FzZSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5Ob25lOlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZpZWxkKHByb3BlcnR5OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZUZpZWxkVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZpZWxkVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZWRpdEVkaXRvci5yZW1vdmVGaWVsZFVuc2FmZShwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2FkZEVkaXRvci5yZW1vdmVGaWVsZFVuc2FmZShwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3IucmVtb3ZlRmllbGRVbnNhZmUocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbD4oZmllbGQ6IEFGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgVGFibGV2aWV3TW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgdGhpcy5fYWRkRWRpdG9yLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHRoaXMuX2VkaXRFZGl0b3IuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWwsIEZpZWxkTW9kZWwgPSBOb25OdWxsYWJsZTxUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+LCBGaWVsZFZhbHVlID0gVGFibGV2aWV3TW9kZWxbUHJvcGVydHldPihwcm9wZXJ0eTogUHJvcGVydHkpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZEZpZWxkPFByb3BlcnR5LCBGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkVW5zYWZlPEZpZWxkTW9kZWwgPSBGaWVsZElucHV0RGVzY3JpcHRvclR5cGUsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsPihwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZFVuc2FmZTxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkcyguLi5wcm9wZXJ0aWVzOiAoa2V5b2YgVGFibGV2aWV3TW9kZWwpW10pOiB0aGlzIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4gdGhpcy5hZGRGaWVsZChwKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRmllbGRUb0VkaXRBbmRBZGQ8RmllbGRNb2RlbCwgRmllbGRWYWx1ZSA9IEZpZWxkTW9kZWw+KGZpZWxkOiBBRmllbGREZXNjcmlwdG9yPEZpZWxkTW9kZWwsIFRhYmxldmlld01vZGVsLCBGaWVsZFZhbHVlPikge1xuICAgICAgICB0aGlzLl9hZGRFZGl0b3IuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgdGhpcy5fZWRpdEVkaXRvci5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgbG9va3VwIGZpZWxkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxGaWVsZE1vZGVsPn0gdHlwZSAtIFRoZSB0eXBlIGRlc2NyaXB0b3IgZm9yIHRoZSBsb29rdXAgbW9kZWwuXG4gICAgICogQHR5cGVwYXJhbSBQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIEVkaXRvck1vZGVsLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgdmFsdWUgdHlwZSBvZiBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBUYWJsZXZpZXdNb2RlbCwgdW5kZWZpbmVkLCBGaWVsZFZhbHVlPn0gLSBUaGUgZmllbGQgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWwsIExvb2t1cE1vZGVsID0gTm9uTnVsbGFibGU8VGFibGV2aWV3TW9kZWxbUHJvcGVydHldPiwgRmllbGRWYWx1ZSA9IFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4oXG4gICAgICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICAgICAgdHlwZT86IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPlxuICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRMb29rdXA8UHJvcGVydHksIExvb2t1cE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSwgdHlwZSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW1VOU0FGRV0gQWRkcyBsb29rdXAgZmllbGQuXG4gICAgICogVGhpcyBtZXRob2QgaXMgVU5TQUZFIGJlY2F1c2UgcHJvcGVydHkgaXMgbm90IHR5cGUtY2hlY2tlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBNb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8RmllbGRNb2RlbD59IHR5cGUgLSBUaGUgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgbG9va3VwIG1vZGVsIChkZWZpbmVzIDJuZCBnZW5lcmljKS5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cE1vZGVsIC0gVGhlIGZpZWxkIG1vZGVsIHR5cGUsIGRlZmF1bHRzIHRvIHRoZSBub24tbnVsbGFibGUgdHlwZSBvZiB0aGUgZWRpdG9yJ3MgcHJvcGVydHkuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUgb2YgZmllbGQgb24gZWRpdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgVGFibGV2aWV3TW9kZWwsIHVuZGVmaW5lZCwgRmllbGRWYWx1ZT59IC0gVGhlIGZpZWxkIGxvb2t1cCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cFVuc2FmZTxMb29rdXBNb2RlbCwgRmllbGRWYWx1ZSA9IExvb2t1cE1vZGVsPihwcm9wZXJ0eTogc3RyaW5nLCB0eXBlPzogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+KSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZExvb2t1cFVuc2FmZTxMb29rdXBNb2RlbCwgRmllbGRWYWx1ZT4ocHJvcGVydHksIHR5cGUpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkVG9FZGl0QW5kQWRkKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBmaWVsZCBsb29rdXAgd2l0aCBvcHRpb25zIHZhbHVlIHByb3BlcnR5IGZvciBsb29rdXAgbW9kZWwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge1R5cGVEZXNjcmlwdG9yPEZpZWxkTW9kZWw+fSB0eXBlIC0gVGhlIHR5cGUgZGVzY3JpcHRvciBmb3IgdGhlIGxvb2t1cCBtb2RlbC5cbiAgICAgKiBAcGFyYW0ge0xvb2t1cFZhbHVlUHJvcGVydHl9IGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5IC0gVGhlIHZhbHVlIHByb3BlcnR5IHVzZWQgYXMgdmFsdWUgaW4gdGhlIGxvb2t1cCBvcHRpb25zLlxuICAgICAqIEB0eXBlcGFyYW0gUHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBFZGl0b3JNb2RlbC5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cE1vZGVsIC0gVGhlIGZpZWxkIG1vZGVsIHR5cGUsIGRlZmF1bHRzIHRvIHRoZSBub24tbnVsbGFibGUgdHlwZSBvZiB0aGUgZWRpdG9yJ3MgcHJvcGVydHkuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBWYWx1ZVByb3BlcnR5IC0gVGhlIHByb3BlcnR5IG9mIGxvb2t1cCBtb2RlbCB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gRmllbGRWYWx1ZSAtIFRoZSB2YWx1ZSB0eXBlIG9mIGZpZWxkIG9uIGVkaXRvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIFRhYmxldmlld01vZGVsLCB1bmRlZmluZWQsIEZpZWxkVmFsdWU+fSAtIFRoZSBmaWVsZCBsb29rdXAgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBXaXRoT3B0aW9uc1ZhbHVlUHJvcGVydHk8XG4gICAgICAgIFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWwsXG4gICAgICAgIExvb2t1cE1vZGVsLFxuICAgICAgICBMb29rdXBWYWx1ZVByb3BlcnR5IGV4dGVuZHMgS2V5b2ZBbmRPZlR5cGU8TG9va3VwTW9kZWwsIFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4sXG4gICAgICAgIEZpZWxkVmFsdWUgPSBUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV1cbiAgICA+KHByb3BlcnR5OiBQcm9wZXJ0eSwgdHlwZTogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+LCBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eTogTG9va3VwVmFsdWVQcm9wZXJ0eSkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRMb29rdXBXaXRoT3B0aW9uc1ZhbHVlUHJvcGVydHk8UHJvcGVydHksIExvb2t1cE1vZGVsLCBMb29rdXBWYWx1ZVByb3BlcnR5LCBGaWVsZFZhbHVlPihcbiAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW1VOU0FGRV0gQWRkcyBhIGZpZWxkIGxvb2t1cCB3aXRoIG9wdGlvbnMgdmFsdWUgcHJvcGVydHkgZm9yIGxvb2t1cCBtb2RlbC5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBVTlNBRkUgYmVjYXVzZSBwcm9wZXJ0eSBpcyBub3QgdHlwZS1jaGVja2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxGaWVsZE1vZGVsPn0gdHlwZSAtIFRoZSB0eXBlIGRlc2NyaXB0b3IgZm9yIHRoZSBsb29rdXAgbW9kZWwuXG4gICAgICogQHBhcmFtIHtMb29rdXBWYWx1ZVByb3BlcnR5fSBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eSAtIFRoZSB2YWx1ZSBwcm9wZXJ0eSB1c2VkIGFzIHZhbHVlIGluIHRoZSBsb29rdXAgb3B0aW9ucy5cbiAgICAgKiBAdHlwZXBhcmFtIFByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgRWRpdG9yTW9kZWwuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBNb2RlbCAtIFRoZSBmaWVsZCBtb2RlbCB0eXBlLCBkZWZhdWx0cyB0byB0aGUgbm9uLW51bGxhYmxlIHR5cGUgb2YgdGhlIGVkaXRvcidzIHByb3BlcnR5LlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwVmFsdWVQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBvZiBsb29rdXAgbW9kZWwgdHlwZS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgdmFsdWUgdHlwZSBvZiBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBUYWJsZXZpZXdNb2RlbCwgdW5kZWZpbmVkLCBGaWVsZFZhbHVlPn0gLSBUaGUgZmllbGQgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwV2l0aE9wdGlvbnNWYWx1ZVByb3BlcnR5VW5zYWZlPExvb2t1cE1vZGVsLCBGaWVsZFZhbHVlID0gTnVsbGFibGU8SWRUeXBlPj4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIHR5cGU6IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPixcbiAgICAgICAgbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHk6IHN0cmluZ1xuICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRMb29rdXBXaXRoT3B0aW9uc1ZhbHVlUHJvcGVydHlVbnNhZmU8TG9va3VwTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5LCB0eXBlLCBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZpZWxkIGxvb2t1cCB3aXRoIGEgZGF0YSBwcm92aWRlciBvciBzZXJ2aWNlIHRvIHRoZSBlZGl0b3IgbW9kZWwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge0ZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPExvb2t1cE1vZGVsLCBTZXJ2aWNlPn0gcHJvdmlkZXIgLSBUaGUgZmllbGQgbG9va3VwIGRhdGEgcHJvdmlkZXIgb3Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0ge1R5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPn0gW3R5cGVdIC0gVGhlIHR5cGUgb2YgbG9va3VwIC0gaWYgZGF0YSBwcm92aWRlciBpcyBwYXNzZWQgYXMgcHJldmlvdXMgcGFyYW1ldGVyLCB0eXBlIGNhbiBiZSBvbWl0dGVkLiBJZiBzZXJ2aWNlIGlzIHByb3ZpZGVyLCB0eXBlIHBhcmFtZXRlciBpcyBwcm9wb3NlZCBpbiBmYXZvdXIgb2YgY29ycmVjdCB0eXBpbmcuXG4gICAgICogQHR5cGVwYXJhbSBQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIEVkaXRvck1vZGVsLlxuICAgICAqIEB0eXBlcGFyYW0gU2VydmljZSAtIFRoZSBsb29rdXAgc2VydmljZSB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgZmllbGQgdmFsdWUgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIGVkaXRvcidzIHByb3BlcnR5IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT59IENyZWF0ZWQgZmllbGQgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWwsIFNlcnZpY2UsIExvb2t1cE1vZGVsID0gTm9uTnVsbGFibGU8VGFibGV2aWV3TW9kZWxbUHJvcGVydHldPiwgRmllbGRWYWx1ZSA9IFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4oXG4gICAgICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICAgICAgcHJvdmlkZXI6IEZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPExvb2t1cE1vZGVsLCBTZXJ2aWNlPixcbiAgICAgICAgdHlwZT86IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPlxuICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRMb29rdXBXaXRoUHJvdmlkZXI8UHJvcGVydHksIFNlcnZpY2UsIExvb2t1cE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSwgcHJvdmlkZXIsIHR5cGUpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkVG9FZGl0QW5kQWRkKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtVTlNBRkVdIEFkZHMgYSBmaWVsZCBsb29rdXAgd2l0aCBhIGRhdGEgcHJvdmlkZXIgb3Igc2VydmljZSB0byB0aGUgZWRpdG9yIG1vZGVsLlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIFVOU0FGRSBiZWNhdXNlIHByb3BlcnR5IGlzIG5vdCB0eXBlLWNoZWNrZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtGaWVsZExvb2t1cFByb3ZpZGVyVHlwZTxMb29rdXBNb2RlbCwgU2VydmljZT59IHByb3ZpZGVyIC0gVGhlIGxvb2t1cCBwcm92aWRlciBvciBzZXJ2aWNlIGZvciB0aGUgZmllbGQgbG9va3VwLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+P30gdHlwZSAtIE9wdGlvbmFsIHR5cGUgZGVzY3JpcHRvciBmb3IgdGhlIGZpZWxkIGxvb2t1cC5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cE1vZGVsIC0gVGhlIGZpZWxkIGxvb2t1cCBtb2RlbCB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gU2VydmljZSAtIFRoZSBsb29rdXAgc2VydmljZSB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gRmllbGRWYWx1ZSAtIFRoZSB2YWx1ZSB0eXBlIG9mIGZpZWxkIG9uIGVkaXRvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIFRhYmxldmlld01vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlPn0gLSBUaGUgZmllbGQgbG9va3VwIGRlc2NyaXB0b3IgYWRkZWQgdG8gdGhlIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlclVuc2FmZTxMb29rdXBNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZSA9IExvb2t1cE1vZGVsPihcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgcHJvdmlkZXI6IEZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPExvb2t1cE1vZGVsLCBTZXJ2aWNlPixcbiAgICAgICAgdHlwZT86IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPlxuICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRMb29rdXBXaXRoUHJvdmlkZXJVbnNhZmU8TG9va3VwTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+KHByb3BlcnR5LCBwcm92aWRlciwgdHlwZSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZpZWxkIGxvb2t1cCB3aXRoIGRhdGEgcHJvdmlkZXIgb3Igc2VydmljZSBhbmQgb3B0aW9ucyB2YWx1ZSBwcm9wZXJ0eSBmb3IgbG9va3VwIG1vZGVsLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtGaWVsZExvb2t1cFByb3ZpZGVyVHlwZTxGaWVsZE1vZGVsLCBTZXJ2aWNlPn0gcHJvdmlkZXIgLSBUaGUgbG9va3VwIHByb3ZpZGVyLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8RmllbGRNb2RlbD59IHR5cGUgLSBUaGUgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgbG9va3VwIG1vZGVsLlxuICAgICAqIEBwYXJhbSB7TG9va3VwVmFsdWVQcm9wZXJ0eX0gbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHkgLSBUaGUgdmFsdWUgcHJvcGVydHkgdXNlZCBhcyB2YWx1ZSBpbiB0aGUgbG9va3VwIG9wdGlvbnMuXG4gICAgICogQHR5cGVwYXJhbSBQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIEVkaXRvck1vZGVsLlxuICAgICAqIEB0eXBlcGFyYW0gU2VydmljZSAtIFRoZSBsb29rdXAgc2VydmljZSB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cFZhbHVlUHJvcGVydHkgLSBUaGUgcHJvcGVydHkgb2YgbG9va3VwIG1vZGVsIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUgb2YgZmllbGQgb24gZWRpdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgVGFibGV2aWV3TW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+fSAtIFRoZSBmaWVsZCBsb29rdXAgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBhZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlckFuZE9wdGlvbnNWYWx1ZVByb3BlcnR5PFxuICAgICAgICBQcm9wZXJ0eSBleHRlbmRzIGtleW9mIFRhYmxldmlld01vZGVsLFxuICAgICAgICBTZXJ2aWNlLFxuICAgICAgICBMb29rdXBNb2RlbCxcbiAgICAgICAgTG9va3VwVmFsdWVQcm9wZXJ0eSBleHRlbmRzIEtleW9mQW5kT2ZUeXBlPExvb2t1cE1vZGVsLCBUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+LFxuICAgICAgICBGaWVsZFZhbHVlID0gVGFibGV2aWV3TW9kZWxbUHJvcGVydHldXG4gICAgPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBwcm92aWRlcjogRmllbGRMb29rdXBQcm92aWRlclR5cGU8TG9va3VwTW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICB0eXBlOiBUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD4sXG4gICAgICAgIGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5OiBMb29rdXBWYWx1ZVByb3BlcnR5XG4gICAgKTogRmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBUYWJsZXZpZXdNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRMb29rdXBXaXRoUHJvdmlkZXJBbmRPcHRpb25zVmFsdWVQcm9wZXJ0eTxQcm9wZXJ0eSwgU2VydmljZSwgTG9va3VwTW9kZWwsIExvb2t1cFZhbHVlUHJvcGVydHksIEZpZWxkVmFsdWU+KFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmFkZEZpZWxkVG9FZGl0QW5kQWRkKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtVTlNBRkVdIEFkZHMgYSBmaWVsZCBsb29rdXAgd2l0aCBkYXRhIHByb3ZpZGVyIG9yIHNlcnZpY2UgYW5kIG9wdGlvbnMgdmFsdWUgcHJvcGVydHkgZm9yIGxvb2t1cCBtb2RlbC5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBVTlNBRkUgYmVjYXVzZSBwcm9wZXJ0eSBpcyBub3QgdHlwZS1jaGVja2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7RmllbGRMb29rdXBQcm92aWRlclR5cGU8RmllbGRNb2RlbCwgU2VydmljZT59IHByb3ZpZGVyIC0gVGhlIGxvb2t1cCBwcm92aWRlci5cbiAgICAgKiBAcGFyYW0ge1R5cGVEZXNjcmlwdG9yPEZpZWxkTW9kZWw+fSB0eXBlIC0gVGhlIHR5cGUgZGVzY3JpcHRvciBmb3IgdGhlIGxvb2t1cCBtb2RlbC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHkgLSBUaGUgdmFsdWUgcHJvcGVydHkgdXNlZCBpbiB0aGUgbG9va3VwIG9wdGlvbnMuXG4gICAgICogQHR5cGVwYXJhbSBTZXJ2aWNlIC0gVGhlIHNlcnZpY2UgdHlwZS5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cE1vZGVsIC0gVGhlIGZpZWxkIG1vZGVsIHR5cGUsIGRlZmF1bHRzIHRvIHRoZSBub24tbnVsbGFibGUgdHlwZSBvZiB0aGUgZWRpdG9yJ3MgcHJvcGVydHkuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUgb2YgZmllbGQgb24gZWRpdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+fSAtIFRoZSBmaWVsZCBsb29rdXAgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBhZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlckFuZE9wdGlvbnNWYWx1ZVByb3BlcnR5VW5zYWZlPFNlcnZpY2UsIExvb2t1cE1vZGVsLCBGaWVsZFZhbHVlID0gTG9va3VwTW9kZWw+KFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICBwcm92aWRlcjogRmllbGRMb29rdXBQcm92aWRlclR5cGU8TG9va3VwTW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICB0eXBlOiBUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD4sXG4gICAgICAgIGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5OiBzdHJpbmdcbiAgICApOiBGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIFRhYmxldmlld01vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlckFuZE9wdGlvbnNWYWx1ZVByb3BlcnR5VW5zYWZlPFNlcnZpY2UsIExvb2t1cE1vZGVsLCBGaWVsZFZhbHVlPihcbiAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBFbnVtPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWwsIEVudW0gZXh0ZW5kcyBOb25OdWxsYWJsZTxUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+PihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBlbnVtRGVzYzogRW51bURlc2NyaXB0b3I8RW51bT4sXG4gICAgICAgIG9wdGlvbnM/OiBBcnJheTxFbnVtPlxuICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRMb29rdXBFbnVtKHByb3BlcnR5LCBlbnVtRGVzYywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwRW51bVVuc2FmZTxFbnVtID0gRW51bUNvbnN0YW50VHlwZT4ocHJvcGVydHk6IHN0cmluZywgZW51bURlc2M6IEVudW1EZXNjcmlwdG9yPEVudW0+LCBvcHRpb25zPzogQXJyYXk8RW51bT4pIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZEZpZWxkTG9va3VwRW51bVVuc2FmZTxFbnVtPihwcm9wZXJ0eSwgZW51bURlc2MsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkVG9FZGl0QW5kQWRkKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlFZGl0b3I8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgRmllbGRNb2RlbCA9IEFycmF5SXRlbVR5cGU8VGFibGV2aWV3TW9kZWxbUHJvcGVydHldPiwgRmllbGRWYWx1ZSA9IFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4oXG4gICAgICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICAgICAgdGFibGV2aWV3RGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD5cbiAgICApIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZEZpZWxkTWFueUVkaXRvcjxQcm9wZXJ0eSwgRmllbGRNb2RlbCwgRmllbGRWYWx1ZT4ocHJvcGVydHksIHRhYmxldmlld0Rlc2NyaXB0b3IpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkVG9FZGl0QW5kQWRkKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlFZGl0b3JVbnNhZmU8RmllbGRNb2RlbCwgRmllbGRWYWx1ZSA9IEZpZWxkTW9kZWxbXT4ocHJvcGVydHk6IHN0cmluZywgdGFibGV2aWV3RGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4pIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZEZpZWxkTWFueUVkaXRvclVuc2FmZTxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSwgdGFibGV2aWV3RGVzY3JpcHRvcik7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTWFueVRvTWFueUVkaXRvcjxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIFRhYmxldmlld01vZGVsLCBTZXJ2aWNlLCBGaWVsZE1vZGVsID0gQXJyYXlJdGVtVHlwZTxUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+LCBGaWVsZFZhbHVlID0gVGFibGV2aWV3TW9kZWxbUHJvcGVydHldPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+LFxuICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4sXG4gICAgICAgIGxvb2t1cERhdGFQcm92aWRlcjogSVRhYmxlRGF0YVByb3ZpZGVyPEZpZWxkTW9kZWwsIFNlcnZpY2U+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZE1hbnlUb01hbnlFZGl0b3I8UHJvcGVydHksIFNlcnZpY2UsIEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yLFxuICAgICAgICAgICAgbG9va3VwVGFibGVEZXNjcmlwdG9yLFxuICAgICAgICAgICAgbG9va3VwRGF0YVByb3ZpZGVyXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTWFueVRvTWFueUVkaXRvclVuc2FmZTxGaWVsZE1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlID0gRmllbGRNb2RlbFtdPihcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgbWFpblRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPixcbiAgICAgICAgbG9va3VwVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+LFxuICAgICAgICBsb29rdXBEYXRhUHJvdmlkZXI6IElUYWJsZURhdGFQcm92aWRlcjxGaWVsZE1vZGVsLCBTZXJ2aWNlPlxuICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRNYW55VG9NYW55RWRpdG9yVW5zYWZlPEZpZWxkTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+KHByb3BlcnR5LCBtYWluVGFibGVEZXNjcmlwdG9yLCBsb29rdXBUYWJsZURlc2NyaXB0b3IsIGxvb2t1cERhdGFQcm92aWRlcik7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZVRhYkdyb3VwKG5hbWU6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvci5jcmVhdGVUYWJHcm91cChuYW1lLCB0aXRsZSk7XG4gICAgICAgIHRoaXMuX2FkZEVkaXRvci5jcmVhdGVUYWJHcm91cChuYW1lLCB0aXRsZSk7XG4gICAgICAgIHRoaXMuX2VkaXRFZGl0b3IuY3JlYXRlVGFiR3JvdXAobmFtZSwgdGl0bGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRmllbGRHcm91cChuYW1lOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3IuY3JlYXRlRmllbGRHcm91cChuYW1lLCB0aXRsZSk7XG4gICAgICAgIHRoaXMuX2FkZEVkaXRvci5jcmVhdGVGaWVsZEdyb3VwKG5hbWUsIHRpdGxlKTtcbiAgICAgICAgdGhpcy5fZWRpdEVkaXRvci5jcmVhdGVGaWVsZEdyb3VwKG5hbWUsIHRpdGxlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWwsIFNvcnRzLCBGaWx0ZXJzPiB7XG4gICAgICAgIGNvbnN0IHRhYmxldmlldyA9IG5ldyBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbCwgU29ydHMsIEZpbHRlcnM+KHRoaXMuX21vZGVsLmNvcHkoKSk7XG4gICAgICAgIHRhYmxldmlldy5fdGFibGUgPSB0aGlzLl90YWJsZS5jb3B5KCk7XG4gICAgICAgIHRhYmxldmlldy5fZGV0YWlsc0VkaXRvciA9IHRoaXMuX2RldGFpbHNFZGl0b3IuY29weSgpO1xuICAgICAgICB0YWJsZXZpZXcuX2FkZEVkaXRvciA9IHRoaXMuX2FkZEVkaXRvci5jb3B5KCk7XG4gICAgICAgIHRhYmxldmlldy5fZWRpdEVkaXRvciA9IHRoaXMuX2VkaXRFZGl0b3IuY29weSgpO1xuICAgICAgICB0YWJsZXZpZXcuX3RhYmxlVGl0bGUgPSB0aGlzLl90YWJsZVRpdGxlO1xuICAgICAgICB0YWJsZXZpZXcuX2lzTG9jYWxpemVkID0gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgICAgIHJldHVybiB0YWJsZXZpZXc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBjb2x1bW4gYW5kIGZpZWxkIHdpdGggY3VzdG9tIHR5cGUsIGZvciBleGFtcGxlIGN1cnJlbmN5XG4gICAgICogaWYgZmllbGQgZXhpc3RzLCBpdCBpcyByZXBsYWNlZFxuICAgICAqIERPIE5PVCBVU0UgV0lUSCBUWVBFUyBXSEVSRSBBUkdTIEFSRSBSRVFVSVJFRCAtIEVSUk9SIFdJTEwgQkUgVEhST1dOXG4gICAgICogZm9yIGVudW0gdXNlIHdpdGhFbnVtVHlwZVxuICAgICAqIGZvciBjdXN0b20gY2xhc3MgdXNlIHdpdGhDbGFzc1R5cGVcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgbmFtZSBvZiBmaWVsZFxuICAgICAqIEBwYXJhbSBjb2x1bW5UeXBlIHJlcXVpcmVkIGNvbHVtbiB0eXBlXG4gICAgICogQHBhcmFtIGZpZWxkVHlwZSBvcHRpb25hbCwgaWYgbm90IHByb3ZpZGVkIGl0IGlzIGNvbnZlcnRlZCBmcm9tIGNvbHVtbiB0eXBlXG4gICAgICogQHBhcmFtIGNvbHVtbkRpc3BsYXlUeXBlIG9wdGlvbmFsXG4gICAgICovXG4gICAgcHVibGljIHdpdGhNb2RpZmllZFR5cGUocHJvcGVydHk6IGtleW9mIFRhYmxldmlld01vZGVsLCBjb2x1bW5UeXBlOiBDb2x1bW5UeXBlRW51bSwgZmllbGRUeXBlPzogRmllbGRJbnB1dFR5cGVFbnVtLCBjb2x1bW5EaXNwbGF5VHlwZT86IENvbHVtbkRpc3BsYXlUeXBlRW51bSk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoTW9kaWZpZWRUeXBlVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgY29sdW1uVHlwZSwgZmllbGRUeXBlLCBjb2x1bW5EaXNwbGF5VHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhNb2RpZmllZFR5cGVVbnNhZmUocHJvcGVydHk6IHN0cmluZywgY29sdW1uVHlwZTogQ29sdW1uVHlwZUVudW0sIGZpZWxkVHlwZT86IEZpZWxkSW5wdXRUeXBlRW51bSwgY29sdW1uRGlzcGxheVR5cGU/OiBDb2x1bW5EaXNwbGF5VHlwZUVudW0pOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsLnR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgd2l0aE1vZGlmaWVkVHlwZSBjYW5ub3QgYmUgZXhlY3V0ZWQgZm9yIHByb3BlcnR5ICR7cHJvcGVydHl9OiBNb2RlbCB0eXBlIGlzIG5vdCBkZWZpbmVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2x1bW5UeXBlID09PSBDb2x1bW5UeXBlRW51bS5FbnVtKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoJ0RvIG5vdCB1c2Ugd2l0aCB0eXBlcyB3aGVyZSBhcmdzIGFyZSByZXF1aXJlZCcsIHtuYW1lOiAnVGFibGV2aWV3RGVzY3JpcHRvckVycm9yJ30pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlRGVmID0gZ2V0VGFibGV2aWV3Q2xhc3NBdHRyaWJ1dGVEZWYodGhpcy5tb2RlbC50eXBlKS5maW5kKGF0dHIgPT4gYXR0ci5uYW1lID09PSBwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZURlZiAhPSBudWxsKSB7XG4gICAgICAgICAgICBmaWVsZFR5cGUgPz89IGdldEZpZWxkSW5wdXRUeXBlRnJvbUNvbHVtblR5cGUoY29sdW1uVHlwZSwgY29sdW1uRGlzcGxheVR5cGUpO1xuICAgICAgICAgICAgYXR0cmlidXRlRGVmLmZpZWxkVHlwZSA9IGZpZWxkVHlwZTtcblxuICAgICAgICAgICAgdGhpcy5fdGFibGUud2l0aENvbHVtbk1vZGlmaWVkVHlwZVVuc2FmZShwcm9wZXJ0eSwgY29sdW1uVHlwZSwgY29sdW1uRGlzcGxheVR5cGUpO1xuICAgICAgICAgICAgdGhpcy5fZWRpdEVkaXRvci53aXRoRmllbGRNb2RpZmllZFR5cGVVbnNhZmUocHJvcGVydHksIGZpZWxkVHlwZSk7XG4gICAgICAgICAgICB0aGlzLl9hZGRFZGl0b3Iud2l0aEZpZWxkTW9kaWZpZWRUeXBlVW5zYWZlKHByb3BlcnR5LCBmaWVsZFR5cGUpO1xuICAgICAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvci53aXRoRmllbGRNb2RpZmllZFR5cGVVbnNhZmUocHJvcGVydHksIGZpZWxkVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGNvbHVtbiB3aXRoIGVudW0gdHlwZVxuICAgICAqIGlmIGZpZWxkcyBleGlzdHMsIGl0IGlzIHJlcGxhY2VkXG4gICAgICogQHBhcmFtIHByb3BlcnR5IHByb3BlcnR5IG5hbWVcbiAgICAgKiBAcGFyYW0gZW51bURlc2MgdHlwZSBvZiBlbnVtXG4gICAgICogQHBhcmFtIGZpZWxkVHlwZSB0eXBlIG9mIGZpZWxkLCBvcHRpb25hbCwgZGVmYXVsdCBpcyBUZXh0XG4gICAgICovXG4gICAgcHVibGljIHdpdGhNb2RpZmllZEVudW08UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgRW51bSBleHRlbmRzIE5vbk51bGxhYmxlPFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIGVudW1EZXNjPzogRW51bURlc2NyaXB0b3I8RW51bT4sXG4gICAgICAgIGZpZWxkVHlwZT86IEZpZWxkSW5wdXRUeXBlRW51bVxuICAgICk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoTW9kaWZpZWRFbnVtVW5zYWZlPEVudW0+KHByb3BlcnR5IGFzIHN0cmluZywgZW51bURlc2MsIGZpZWxkVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhNb2RpZmllZEVudW1VbnNhZmU8RW51bSA9IGFueT4ocHJvcGVydHk6IHN0cmluZywgZW51bURlc2M/OiBFbnVtRGVzY3JpcHRvcjxFbnVtPiwgZmllbGRUeXBlPzogRmllbGRJbnB1dFR5cGVFbnVtKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5tb2RlbC50eXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYHdpdGhNb2RpZmllZEVudW0gY2Fubm90IGJlIGV4ZWN1dGVkIGZvciBwcm9wZXJ0eSAke3Byb3BlcnR5fTogTW9kZWwgdHlwZSBpcyBub3QgZGVmaW5lZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVEZWYgPSBnZXRUYWJsZXZpZXdDbGFzc0F0dHJpYnV0ZURlZih0aGlzLm1vZGVsLnR5cGUpLmZpbmQoYXR0ciA9PiBhdHRyLm5hbWUgPT09IHByb3BlcnR5KTtcblxuICAgICAgICBpZiAoYXR0cmlidXRlRGVmICE9IG51bGwpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZURlZi5maWVsZFR5cGUgPSBmaWVsZFR5cGUgPz8gRmllbGRJbnB1dFR5cGVFbnVtLlRleHQ7XG5cbiAgICAgICAgICAgIHRoaXMuX3RhYmxlLndpdGhDb2x1bW5Nb2RpZmllZEVudW1VbnNhZmU8RW51bT4ocHJvcGVydHksIGVudW1EZXNjKTtcbiAgICAgICAgICAgIHRoaXMuX2VkaXRFZGl0b3Iud2l0aEZpZWxkTW9kaWZpZWRFbnVtVW5zYWZlPEVudW0+KHByb3BlcnR5LCBlbnVtRGVzYyk7XG4gICAgICAgICAgICB0aGlzLl9kZXRhaWxzRWRpdG9yLndpdGhGaWVsZE1vZGlmaWVkRW51bVVuc2FmZTxFbnVtPihwcm9wZXJ0eSwgZW51bURlc2MpO1xuICAgICAgICAgICAgdGhpcy5fYWRkRWRpdG9yLndpdGhGaWVsZE1vZGlmaWVkRW51bVVuc2FmZTxFbnVtPihwcm9wZXJ0eSwgZW51bURlc2MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVzIGNvbHVtbiB3aXRoIGN1c3RvbSBjbGFzcyB0eXBlXG4gICAgICogZmllbGQgaXMgZ2VuZXJhdGVkIG9ubHkgaWYgbG9va3VwUHJvdmlkZXIgaXMgcHJvdmlkZWRcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgcHJvcGVydHkgbmFtZVxuICAgICAqIEBwYXJhbSB0eXBlIGNsYXNzIHR5cGUgb2Ygb2JqZWN0XG4gICAgICogQHBhcmFtIHRpdGxlUHJvcGVydHlcbiAgICAgKiBAcGFyYW0gbG9va3VwUHJvdmlkZXJcbiAgICAgKiBAcGFyYW0gb3B0aW9uc0xhYmVsUHJvcGVydHlcbiAgICAgKiBAcGFyYW0gZmlsdGVyUHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aE1vZGlmaWVkTG9va3VwPExvb2t1cE1vZGVsPihcbiAgICAgICAgcHJvcGVydHk6IGtleW9mIFRhYmxldmlld01vZGVsLFxuICAgICAgICB0eXBlPzogQ2xhc3NUeXBlPExvb2t1cE1vZGVsPixcbiAgICAgICAgbG9va3VwUHJvdmlkZXI/OiBJTG9va3VwRGF0YVByb3ZpZGVyPExvb2t1cE1vZGVsPixcbiAgICAgICAgdGl0bGVQcm9wZXJ0eT86IHN0cmluZyxcbiAgICAgICAgb3B0aW9uc0xhYmVsUHJvcGVydHk/OiBzdHJpbmcsXG4gICAgICAgIGZpbHRlclByb3BlcnR5Pzogc3RyaW5nXG4gICAgKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhNb2RpZmllZExvb2t1cFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIHR5cGUsIGxvb2t1cFByb3ZpZGVyLCB0aXRsZVByb3BlcnR5LCBvcHRpb25zTGFiZWxQcm9wZXJ0eSwgZmlsdGVyUHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTW9kaWZpZWRMb29rdXBVbnNhZmU8TG9va3VwTW9kZWw+KFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICB0eXBlPzogQ2xhc3NUeXBlPExvb2t1cE1vZGVsPixcbiAgICAgICAgbG9va3VwUHJvdmlkZXI/OiBJTG9va3VwRGF0YVByb3ZpZGVyPExvb2t1cE1vZGVsPixcbiAgICAgICAgdGl0bGVQcm9wZXJ0eT86IHN0cmluZyxcbiAgICAgICAgb3B0aW9uc0xhYmVsUHJvcGVydHk/OiBzdHJpbmcsXG4gICAgICAgIGZpbHRlclByb3BlcnR5Pzogc3RyaW5nXG4gICAgKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5tb2RlbC50eXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYHdpdGhNb2RpZmllZExvb2t1cCBjYW5ub3QgYmUgZXhlY3V0ZWQgZm9yIHByb3BlcnR5ICR7cHJvcGVydHl9OiBNb2RlbCB0eXBlIGlzIG5vdCBkZWZpbmVkLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlRGVmID0gZ2V0VGFibGV2aWV3Q2xhc3NBdHRyaWJ1dGVEZWYodGhpcy5tb2RlbC50eXBlKS5maW5kKGF0dHIgPT4gYXR0ci5uYW1lID09PSBwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZURlZiAhPSBudWxsKSB7XG4gICAgICAgICAgICB0eXBlID8/PSBhdHRyaWJ1dGVEZWYuY2xhc3NUeXBlID8/IFR5cGVSZWdpc3RyeS5nZXQoKS5maW5kVHlwZShhdHRyaWJ1dGVEZWYudHlwZSk7XG4gICAgICAgICAgICB0aXRsZVByb3BlcnR5ID8/PSB0eXBlID8gZmluZENsYXNzVGl0bGVBdHRyaWJ1dGUodHlwZSkgPz8gdW5kZWZpbmVkIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgb3B0aW9uc0xhYmVsUHJvcGVydHkgPz89IHRpdGxlUHJvcGVydHk7XG4gICAgICAgICAgICBhdHRyaWJ1dGVEZWYuY29sdW1uVHlwZSA9IENvbHVtblR5cGVFbnVtLlN0cmluZztcbiAgICAgICAgICAgIGF0dHJpYnV0ZURlZi5maWVsZFR5cGUgPSBGaWVsZElucHV0VHlwZUVudW0uVGV4dDtcblxuICAgICAgICAgICAgaWYgKGxvb2t1cFByb3ZpZGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90YWJsZS53aXRoQ29sdW1uTW9kaWZpZWRMb29rdXBVbnNhZmUocHJvcGVydHksIGxvb2t1cFByb3ZpZGVyLCBvcHRpb25zTGFiZWxQcm9wZXJ0eSwgZmlsdGVyUHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkZEVkaXRvci53aXRoRmllbGRNb2RpZmllZExvb2t1cFdpdGhQcm92aWRlclVuc2FmZShwcm9wZXJ0eSwgbG9va3VwUHJvdmlkZXIsIG9wdGlvbnNMYWJlbFByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZXRhaWxzRWRpdG9yLndpdGhGaWVsZE1vZGlmaWVkTG9va3VwV2l0aFByb3ZpZGVyVW5zYWZlKHByb3BlcnR5LCBsb29rdXBQcm92aWRlciwgb3B0aW9uc0xhYmVsUHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRFZGl0b3Iud2l0aEZpZWxkTW9kaWZpZWRMb29rdXBXaXRoUHJvdmlkZXJVbnNhZmUocHJvcGVydHksIGxvb2t1cFByb3ZpZGVyLCBvcHRpb25zTGFiZWxQcm9wZXJ0eSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuX3RhYmxlLmdldENvbHVtblVuc2FmZShwcm9wZXJ0eSkgPz8gdGhpcy5hZGRDb2x1bW5VbnNhZmUocHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIGlmICh0aXRsZVByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi53aXRoR2V0dGVyKHZhbHVlID0+IHZhbHVlPy5bdGl0bGVQcm9wZXJ0eSBhcyBrZXlvZiBvYmplY3RdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9jYWxpemVkPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWwsIExvY2FsaXphdGlvbk1vZGVsID0gQXJyYXlJdGVtVHlwZTxUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+PihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBtb2RlbDogTW9kZWxEZXNjcmlwdG9yPExvY2FsaXphdGlvbk1vZGVsPixcbiAgICAgICAgbG9jYWxlUHJvcGVydHk6IGtleW9mIExvY2FsaXphdGlvbk1vZGVsXG4gICAgKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXplZFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIG1vZGVsLCBsb2NhbGVQcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2NhbGl6ZWRVbnNhZmU8TG9jYWxpemF0aW9uTW9kZWw+KHByb3BlcnR5OiBzdHJpbmcsIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TG9jYWxpemF0aW9uTW9kZWw+LCBsb2NhbGVQcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lzTG9jYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fdGFibGUud2l0aExvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5KGxvY2FsZVByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgICAgIHRoaXMuZGV0YWlsc0VkaXRvci5sb2NhbGl6ZWRVbnNhZmUocHJvcGVydHksIG1vZGVsLCBsb2NhbGVQcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuYWRkRWRpdG9yLmxvY2FsaXplZFVuc2FmZShwcm9wZXJ0eSwgbW9kZWwsIGxvY2FsZVByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5lZGl0RWRpdG9yLmxvY2FsaXplZFVuc2FmZShwcm9wZXJ0eSwgbW9kZWwsIGxvY2FsZVByb3BlcnR5KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZXZpZXdEZXNjcmlwdG9yIGV4dGVuZHMgVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8YW55PiB7XG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihNb2RlbERlc2NyaXB0b3IuY3JlYXRlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlPFRhYmxldmlld01vZGVsLCBTb3J0UHJvcGVydHkgPSBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgRmlsdGVyUHJvcGVydHkgPSBrZXlvZiBUYWJsZXZpZXdNb2RlbD4oXG4gICAgICAgIGlkUHJvcGVydHk/OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCxcbiAgICAgICAgdGl0bGVQcm9wZXJ0eT86IGtleW9mIFRhYmxldmlld01vZGVsLFxuICAgICAgICBpMThuQmFzZUtleT86IHN0cmluZyB8IENsYXNzVHlwZTx1bmtub3duPlxuICAgICk6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsLCBTb3J0UHJvcGVydHksIEZpbHRlclByb3BlcnR5PiB7XG4gICAgICAgIHJldHVybiBuZXcgVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWwsIFNvcnRQcm9wZXJ0eSwgRmlsdGVyUHJvcGVydHk+KE1vZGVsRGVzY3JpcHRvci5jcmVhdGU8VGFibGV2aWV3TW9kZWw+KGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHksIGkxOG5CYXNlS2V5KSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQ2xhc3M8VGFibGV2aWV3TW9kZWwsIFNvcnRQcm9wZXJ0eSA9IGtleW9mIFRhYmxldmlld01vZGVsLCBGaWx0ZXJQcm9wZXJ0eSA9IGtleW9mIFRhYmxldmlld01vZGVsPihcbiAgICAgICAgdHlwZTogQ2xhc3NUeXBlPFRhYmxldmlld01vZGVsPixcbiAgICAgICAgaWRQcm9wZXJ0eT86IGtleW9mIFRhYmxldmlld01vZGVsLFxuICAgICAgICB0aXRsZVByb3BlcnR5Pzoga2V5b2YgVGFibGV2aWV3TW9kZWwsXG4gICAgICAgIGkxOG5CYXNlS2V5PzogQ2xhc3NUeXBlPHVua25vd24+IHwgc3RyaW5nXG4gICAgKTogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWwsIFNvcnRQcm9wZXJ0eSwgRmlsdGVyUHJvcGVydHk+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbCwgU29ydFByb3BlcnR5LCBGaWx0ZXJQcm9wZXJ0eT4oTW9kZWxEZXNjcmlwdG9yLmZyb21DbGFzcyh0eXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBpMThuQmFzZUtleSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU1vZGVsPFRhYmxldmlld01vZGVsLCBTb3J0UHJvcGVydHkgPSBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgRmlsdGVyUHJvcGVydHkgPSBrZXlvZiBUYWJsZXZpZXdNb2RlbD4oXG4gICAgICAgIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8VGFibGV2aWV3TW9kZWw+XG4gICAgKTogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWwsIFNvcnRQcm9wZXJ0eSwgRmlsdGVyUHJvcGVydHk+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbCwgU29ydFByb3BlcnR5LCBGaWx0ZXJQcm9wZXJ0eT4obW9kZWwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdlbmVyYXRlcyBkZXNjcmlwdG9yIGZyb20gYXR0cmlidXRlIGRlZmluaXRpb24gb2Ygb3BlbmFwaSBtb2RlbFxuICAgICAqIEBwYXJhbSB0eXBlIGNsYXNzIHR5cGVcbiAgICAgKiBAcGFyYW0gaWRQcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0aXRsZVByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQ2xhc3NXaXRoQXV0b0F0dHJzRGVmPFRhYmxldmlld01vZGVsPihcbiAgICAgICAgdHlwZTogQ2xhc3NUeXBlPFRhYmxldmlld01vZGVsPixcbiAgICAgICAgaWRQcm9wZXJ0eT86IGtleW9mIFRhYmxldmlld01vZGVsLFxuICAgICAgICB0aXRsZVByb3BlcnR5Pzoga2V5b2YgVGFibGV2aWV3TW9kZWxcbiAgICApOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4ge1xuICAgICAgICBjb25zdCBtb2RlbCA9IE1vZGVsRGVzY3JpcHRvci5mcm9tQ2xhc3ModHlwZSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSk7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBUYWJsZXZpZXdEZXNjcmlwdG9yLmZyb21Nb2RlbChtb2RlbCk7XG4gICAgICAgIGRlc2NyaXB0b3Iud2l0aFRhYmxlRGVzY3JpcHRvcihUYWJsZURlc2NyaXB0b3IuZnJvbUNsYXNzV2l0aEF1dG9BdHRyc0RlZih0eXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5KSk7XG4gICAgICAgIGRlc2NyaXB0b3Iud2l0aEVkaXREZXNjcmlwdG9yKEVkaXRvckRlc2NyaXB0b3IuZnJvbUNsYXNzV2l0aEF1dG9BdHRyc0RlZih0eXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5FZGl0KSk7XG4gICAgICAgIGRlc2NyaXB0b3Iud2l0aERldGFpbHNEZXNjcmlwdG9yKEVkaXRvckRlc2NyaXB0b3IuZnJvbUNsYXNzV2l0aEF1dG9BdHRyc0RlZih0eXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5EZXRhaWxzKS53aXRoRGlzYWJsZWQoKSk7XG4gICAgICAgIGRlc2NyaXB0b3Iud2l0aEFkZERlc2NyaXB0b3IoRWRpdG9yRGVzY3JpcHRvci5mcm9tQ2xhc3NXaXRoQXV0b0F0dHJzRGVmKHR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHksIFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkFkZCkpO1xuXG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdlbmVyYXRlcyBkZXNjcmlwdG9yIGZyb20gZ2l2ZW4gYXR0cmlidXRlIGRlZmluaXRpb25cbiAgICAgKiBAcGFyYW0gdHlwZSBjbGFzcyB0eXBlXG4gICAgICogQHBhcmFtIGNvbHVtbkF0dHJpYnV0ZXMgYXR0cmlidXRlIGRlZmluaXRpb24gdG8gZ2VuZXJhdGUgY29sdW1uc1xuICAgICAqIEBwYXJhbSBmaWVsZEF0dHJpYnV0ZXMgYXR0cmlidXRlIGRlZmluaXRpb24gdG8gZ2VuZXJhdGUgZmllbGRzLCBpZiB1bmRlZmluZWQgY29sdW1uRGVmaW5pdGlvbiBpcyB1c2VkLCBpZiBudWxsIGVkaXRvcnMgYXJlIG5vdCBnZW5lcmF0ZWRcbiAgICAgKiBAcGFyYW0gaWRQcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0aXRsZVByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQ2xhc3NXaXRoQ3VzdG9tQXR0cnNEZWY8VGFibGV2aWV3TW9kZWw+KFxuICAgICAgICB0eXBlOiBDbGFzc1R5cGU8VGFibGV2aWV3TW9kZWw+LFxuICAgICAgICBjb2x1bW5BdHRyaWJ1dGVzOiBUYWJsZXZpZXdDbGFzc0F0dHJpYnV0ZURlZltdLFxuICAgICAgICBmaWVsZEF0dHJpYnV0ZXM/OiBUYWJsZXZpZXdDbGFzc0F0dHJpYnV0ZURlZltdIHwgbnVsbCxcbiAgICAgICAgaWRQcm9wZXJ0eT86IGtleW9mIFRhYmxldmlld01vZGVsLFxuICAgICAgICB0aXRsZVByb3BlcnR5Pzoga2V5b2YgVGFibGV2aWV3TW9kZWxcbiAgICApOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gVGFibGV2aWV3RGVzY3JpcHRvci5mcm9tTW9kZWwoTW9kZWxEZXNjcmlwdG9yLmZyb21DbGFzcyh0eXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5KSk7XG4gICAgICAgIGRlc2NyaXB0b3Iud2l0aFRhYmxlRGVzY3JpcHRvcihUYWJsZURlc2NyaXB0b3IuZnJvbUNsYXNzV2l0aEN1c3RvbUF0dHJzRGVmKHR5cGUsIGNvbHVtbkF0dHJpYnV0ZXMsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHkpKTtcblxuICAgICAgICBpZiAoZmllbGRBdHRyaWJ1dGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLndpdGhFZGl0RGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICBFZGl0b3JEZXNjcmlwdG9yLmZyb21DbGFzc1dpdGhDdXN0b21BdHRyc0RlZih0eXBlLCBmaWVsZEF0dHJpYnV0ZXMgPz8gY29sdW1uQXR0cmlidXRlcywgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRWRpdClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLndpdGhEZXRhaWxzRGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICBFZGl0b3JEZXNjcmlwdG9yLmZyb21DbGFzc1dpdGhDdXN0b21BdHRyc0RlZih0eXBlLCBmaWVsZEF0dHJpYnV0ZXMgPz8gY29sdW1uQXR0cmlidXRlcywgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRGV0YWlscylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLndpdGhBZGREZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgIEVkaXRvckRlc2NyaXB0b3IuZnJvbUNsYXNzV2l0aEN1c3RvbUF0dHJzRGVmKHR5cGUsIGZpZWxkQXR0cmlidXRlcyA/PyBjb2x1bW5BdHRyaWJ1dGVzLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5BZGQpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGV2aWV3RHluYW1pY0Rlc2NyaXB0b3JJbnQgZXh0ZW5kcyBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxhbnk+IHtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX3RhYmxlOiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9ySW5zdDtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPGFueT4pIHtcbiAgICAgICAgc3VwZXIobW9kZWwpO1xuICAgICAgICB0aGlzLl90YWJsZSA9IFRhYmxlRHluYW1pY0Rlc2NyaXB0b3IuZnJvbU1vZGVsKHRoaXMubW9kZWwpO1xuICAgICAgICB0aGlzLl90YWJsZVRpdGxlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIGN1c3RvbSB0YWJsZSBkZXNjcmlwdG9yXG4gICAgICogQHBhcmFtIGRlc2NyaXB0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aFRhYmxlRGVzY3JpcHRvcihkZXNjcmlwdG9yOiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9ySW5zdCk6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZSA9IGRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHMgdmlzaWJpbGl0eSBoaWRkZW4gc3RhdGUgdG8gY29sdW1uIHdpdGggZ2l2ZW4gcHJvcGVydHlcbiAgICAgKiBlcXVhbHMgdG8gYmUgcmVtb3ZpbmcgaW4gYXV0byBhbmQgYmFzZSB0YWJsZXZpZXcgZGVzY3JpcHRvclxuICAgICAqICogQHBhcmFtIHByb3BlcnR5IGNvbHVtbidzIHByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHJlbW92ZUNvbHVtbihwcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlLnJlbW92ZUNvbHVtbihwcm9wZXJ0eSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRW50aXR5Rm9yVHJhbnNsYXRpb25zKGkxOG5CYXNlS2V5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGFibGUubW9kZWwud2l0aEkxOG5CYXNlKGkxOG5CYXNlS2V5KTtcbiAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvci5tb2RlbC53aXRoSTE4bkJhc2UoaTE4bkJhc2VLZXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGRlZXAgY29weSBvZiB0YWJsZXZpZXcgb2JqZWN0IGFuZCBpdHMgY2hpbGRyZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29weSgpOiBUYWJsZXZpZXdEeW5hbWljRGVzY3JpcHRvckludCB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgVGFibGV2aWV3RHluYW1pY0Rlc2NyaXB0b3JJbnQodGhpcy5tb2RlbC5jb3B5KCkpO1xuICAgICAgICBkZXNjcmlwdG9yLl90YWJsZSA9IHRoaXMuX3RhYmxlLmNvcHkoKTtcbiAgICAgICAgZGVzY3JpcHRvci5fdGFibGVUaXRsZSA9IHRoaXMuX3RhYmxlVGl0bGU7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxldmlld0R5bmFtaWNEZXNjcmlwdG9yIGV4dGVuZHMgVGFibGV2aWV3RHluYW1pY0Rlc2NyaXB0b3JJbnQge1xuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoTW9kZWxEZXNjcmlwdG9yLmNyZWF0ZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZShpZFByb3BlcnR5Pzogc3RyaW5nLCB0aXRsZVByb3BlcnR5Pzogc3RyaW5nLCBpMThuQmFzZUtleT86IHN0cmluZyB8IENsYXNzVHlwZTxhbnk+KTogVGFibGV2aWV3RHluYW1pY0Rlc2NyaXB0b3JJbnQge1xuICAgICAgICByZXR1cm4gbmV3IFRhYmxldmlld0R5bmFtaWNEZXNjcmlwdG9ySW50KE1vZGVsRGVzY3JpcHRvci5jcmVhdGU8YW55PihpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBpMThuQmFzZUtleSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU1vZGVsKG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8YW55Pik6IFRhYmxldmlld0R5bmFtaWNEZXNjcmlwdG9ySW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZXZpZXdEeW5hbWljRGVzY3JpcHRvckludChtb2RlbCk7XG4gICAgfVxufVxuIl19
@@ -31,4 +31,4 @@ export function expandClassAttributeDefWithTableviewDef(attributes) {
31
31
  export function getTableviewClassAttributeDef(type) {
32
32
  return expandClassAttributeDefWithTableviewDef(TypeRegistry.get().findAttributesDefinitionByClassType(type));
33
33
  }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MtYXR0cmlidXRlLWNvbnZlcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9hcGkvc3JjL3RhYmxldmlldy9oZWxwZXJzL2NsYXNzLWF0dHJpYnV0ZS1jb252ZXJ0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUErQixvQkFBb0IsRUFBWSxZQUFZLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUN2SCxPQUFPLEVBQUMsY0FBYyxFQUFFLGtDQUFrQyxFQUFFLHNDQUFzQyxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFFNUksT0FBTyxFQUFDLDBDQUEwQyxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFHMUcsTUFBTSxVQUFVLHVDQUF1QyxDQUFDLFVBQTRDO0lBQ2hHLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDYixNQUFNLElBQUksb0JBQW9CLENBQUMscUdBQXFHLEVBQUUsRUFBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUMsQ0FBQyxDQUFDO0tBQ3hLO0lBRUQsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3hDLE1BQU0sc0JBQXNCLEdBQWlDLEVBQUUsQ0FBQztJQUNoRSxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRTtRQUNoQyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHNDQUFzQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7WUFDeEIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1lBQ3BCLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUTtZQUM1QixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7WUFDcEIsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPO1lBQzFCLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHNDQUFzQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDbkcsaUJBQWlCLEVBQUUsa0NBQWtDLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDakYsU0FBUyxFQUFFLDBDQUEwQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDckUsUUFBUSxFQUFFLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBYTtZQUMzRCxTQUFTLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFtQjtTQUNyRSxDQUFDLENBQUM7S0FDTjtJQUVELE9BQU8sc0JBQXNCLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSw2QkFBNkIsQ0FBSSxJQUFrQjtJQUMvRCxPQUFPLHVDQUF1QyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NsYXNzQXR0cmlidXRlRGVmLCBDbGFzc1R5cGUsIENvbW1vbnNJbnRlcm5hbEVycm9yLCBFbnVtVHlwZSwgVHlwZVJlZ2lzdHJ5fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtDb2x1bW5UeXBlRW51bSwgZ2V0Q29sdW1uRGlzcGxheVR5cGVGcm9tQ29sdW1uVHlwZSwgZ2V0Q29sdW1uVHlwZUZyb21DbGFzc0F0dHJpYnV0ZURlZlR5cGV9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGUvYXBpJztcblxuaW1wb3J0IHtnZXRGaWVsZElucHV0VHlwZUZyb21DbGFzc0F0dHJpYnV0ZURlZlR5cGV9IGZyb20gJy4uLy4uL2VkaXRvci9oZWxwZXJzL2NsYXNzLWF0dHJpYnV0ZS1jb252ZXJ0ZXInO1xuaW1wb3J0IHtUYWJsZXZpZXdDbGFzc0F0dHJpYnV0ZURlZn0gZnJvbSAnLi4vbW9kZWxzL2NsYXNzLXRhYmxldmlldy1hdHRyaWJ1dGUubW9kZWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kQ2xhc3NBdHRyaWJ1dGVEZWZXaXRoVGFibGV2aWV3RGVmKGF0dHJpYnV0ZXM/OiBBcnJheTxDbGFzc0F0dHJpYnV0ZURlZj4gfCBudWxsKTogVGFibGV2aWV3Q2xhc3NBdHRyaWJ1dGVEZWZbXSB7XG4gICAgaWYgKCFhdHRyaWJ1dGVzKSB7XG4gICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcignQ2xhc3MgYXR0cmlidXRlIGRlZmluaXRpb24gaXMgbnVsbCwgcHJvYmxlbSB3aXRoIFR5cGVSZWdpc3RyeTo6ZmluZEF0dHJpYnV0ZXNEZWZpbml0aW9uQnlDbGFzc1R5cGU/Jywge25hbWU6ICdUYWJsZXZpZXdVdGlsc0Vycm9yJ30pO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVSZWdpc3RyeSA9IFR5cGVSZWdpc3RyeS5nZXQoKTtcbiAgICBjb25zdCB0YWJsZUNsYXNzQXR0cmlidXRlRGVmOiBUYWJsZXZpZXdDbGFzc0F0dHJpYnV0ZURlZltdID0gW107XG4gICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlcykge1xuICAgICAgICBjb25zdCBlbnVtVHlwZSA9IHR5cGVSZWdpc3RyeS5maW5kRW51bShhdHRyaWJ1dGUudHlwZSk7XG4gICAgICAgIGNvbnN0IGNvbHVtblR5cGUgPSBlbnVtVHlwZSA/IENvbHVtblR5cGVFbnVtLkVudW0gOiBnZXRDb2x1bW5UeXBlRnJvbUNsYXNzQXR0cmlidXRlRGVmVHlwZShhdHRyaWJ1dGUudHlwZSk7XG4gICAgICAgIHRhYmxlQ2xhc3NBdHRyaWJ1dGVEZWYucHVzaCh7XG4gICAgICAgICAgICBuYW1lOiBhdHRyaWJ1dGUubmFtZSxcbiAgICAgICAgICAgIGJhc2VOYW1lOiBhdHRyaWJ1dGUuYmFzZU5hbWUsXG4gICAgICAgICAgICB0eXBlOiBhdHRyaWJ1dGUudHlwZSxcbiAgICAgICAgICAgIHN1YnR5cGU6IGF0dHJpYnV0ZS5zdWJ0eXBlLFxuICAgICAgICAgICAgY29sdW1uVHlwZTogZW51bVR5cGUgPyBDb2x1bW5UeXBlRW51bS5FbnVtIDogZ2V0Q29sdW1uVHlwZUZyb21DbGFzc0F0dHJpYnV0ZURlZlR5cGUoYXR0cmlidXRlLnR5cGUpLFxuICAgICAgICAgICAgY29sdW1uRGlzcGxheVR5cGU6IGdldENvbHVtbkRpc3BsYXlUeXBlRnJvbUNvbHVtblR5cGUoY29sdW1uVHlwZSwgYXR0cmlidXRlLnR5cGUpLFxuICAgICAgICAgICAgZmllbGRUeXBlOiBnZXRGaWVsZElucHV0VHlwZUZyb21DbGFzc0F0dHJpYnV0ZURlZlR5cGUoYXR0cmlidXRlLnR5cGUpLFxuICAgICAgICAgICAgZW51bVR5cGU6IHR5cGVSZWdpc3RyeS5maW5kRW51bShhdHRyaWJ1dGUudHlwZSkgYXMgRW51bVR5cGUsXG4gICAgICAgICAgICBjbGFzc1R5cGU6IHR5cGVSZWdpc3RyeS5maW5kVHlwZShhdHRyaWJ1dGUudHlwZSkgYXMgQ2xhc3NUeXBlPGFueT5cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhYmxlQ2xhc3NBdHRyaWJ1dGVEZWY7XG59XG5cbi8qKlxuICogcmV0dXJucyBhdHRyaWJ1dGVzIGZyb20gY2xhc3MgdHlwZSBhbmQgZXh0ZW5kcyB0byB0eXBlZCBkZWYgd2l0aCBjb2x1bW4gYW5kIGZpZWxkIGVudW0gdHlwZVxuICogQHBhcmFtIHR5cGUgY2xhc3MgdHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGV2aWV3Q2xhc3NBdHRyaWJ1dGVEZWY8VD4odHlwZTogQ2xhc3NUeXBlPFQ+KTogVGFibGV2aWV3Q2xhc3NBdHRyaWJ1dGVEZWZbXSB7XG4gICAgcmV0dXJuIGV4cGFuZENsYXNzQXR0cmlidXRlRGVmV2l0aFRhYmxldmlld0RlZihUeXBlUmVnaXN0cnkuZ2V0KCkuZmluZEF0dHJpYnV0ZXNEZWZpbml0aW9uQnlDbGFzc1R5cGUodHlwZSkpO1xufVxuIl19
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MtYXR0cmlidXRlLWNvbnZlcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9hcGkvc3JjL3RhYmxldmlldy9oZWxwZXJzL2NsYXNzLWF0dHJpYnV0ZS1jb252ZXJ0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUErQixvQkFBb0IsRUFBWSxZQUFZLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUN2SCxPQUFPLEVBQUMsY0FBYyxFQUFFLGtDQUFrQyxFQUFFLHNDQUFzQyxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFFNUksT0FBTyxFQUFDLDBDQUEwQyxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFHMUcsTUFBTSxVQUFVLHVDQUF1QyxDQUFDLFVBQTRDO0lBQ2hHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxxR0FBcUcsRUFBRSxFQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBQyxDQUFDLENBQUM7SUFDekssQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN4QyxNQUFNLHNCQUFzQixHQUFpQyxFQUFFLENBQUM7SUFDaEUsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHNDQUFzQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7WUFDeEIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1lBQ3BCLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUTtZQUM1QixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7WUFDcEIsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPO1lBQzFCLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHNDQUFzQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDbkcsaUJBQWlCLEVBQUUsa0NBQWtDLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDakYsU0FBUyxFQUFFLDBDQUEwQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDckUsUUFBUSxFQUFFLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBYTtZQUMzRCxTQUFTLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFtQjtTQUNyRSxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsT0FBTyxzQkFBc0IsQ0FBQztBQUNsQyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUFJLElBQWtCO0lBQy9ELE9BQU8sdUNBQXVDLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1DQUFtQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2xhc3NBdHRyaWJ1dGVEZWYsIENsYXNzVHlwZSwgQ29tbW9uc0ludGVybmFsRXJyb3IsIEVudW1UeXBlLCBUeXBlUmVnaXN0cnl9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0NvbHVtblR5cGVFbnVtLCBnZXRDb2x1bW5EaXNwbGF5VHlwZUZyb21Db2x1bW5UeXBlLCBnZXRDb2x1bW5UeXBlRnJvbUNsYXNzQXR0cmlidXRlRGVmVHlwZX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZS9hcGknO1xuXG5pbXBvcnQge2dldEZpZWxkSW5wdXRUeXBlRnJvbUNsYXNzQXR0cmlidXRlRGVmVHlwZX0gZnJvbSAnLi4vLi4vZWRpdG9yL2hlbHBlcnMvY2xhc3MtYXR0cmlidXRlLWNvbnZlcnRlcic7XG5pbXBvcnQge1RhYmxldmlld0NsYXNzQXR0cmlidXRlRGVmfSBmcm9tICcuLi9tb2RlbHMvY2xhc3MtdGFibGV2aWV3LWF0dHJpYnV0ZS5tb2RlbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBhbmRDbGFzc0F0dHJpYnV0ZURlZldpdGhUYWJsZXZpZXdEZWYoYXR0cmlidXRlcz86IEFycmF5PENsYXNzQXR0cmlidXRlRGVmPiB8IG51bGwpOiBUYWJsZXZpZXdDbGFzc0F0dHJpYnV0ZURlZltdIHtcbiAgICBpZiAoIWF0dHJpYnV0ZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdDbGFzcyBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBpcyBudWxsLCBwcm9ibGVtIHdpdGggVHlwZVJlZ2lzdHJ5OjpmaW5kQXR0cmlidXRlc0RlZmluaXRpb25CeUNsYXNzVHlwZT8nLCB7bmFtZTogJ1RhYmxldmlld1V0aWxzRXJyb3InfSk7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZVJlZ2lzdHJ5ID0gVHlwZVJlZ2lzdHJ5LmdldCgpO1xuICAgIGNvbnN0IHRhYmxlQ2xhc3NBdHRyaWJ1dGVEZWY6IFRhYmxldmlld0NsYXNzQXR0cmlidXRlRGVmW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGNvbnN0IGVudW1UeXBlID0gdHlwZVJlZ2lzdHJ5LmZpbmRFbnVtKGF0dHJpYnV0ZS50eXBlKTtcbiAgICAgICAgY29uc3QgY29sdW1uVHlwZSA9IGVudW1UeXBlID8gQ29sdW1uVHlwZUVudW0uRW51bSA6IGdldENvbHVtblR5cGVGcm9tQ2xhc3NBdHRyaWJ1dGVEZWZUeXBlKGF0dHJpYnV0ZS50eXBlKTtcbiAgICAgICAgdGFibGVDbGFzc0F0dHJpYnV0ZURlZi5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IGF0dHJpYnV0ZS5uYW1lLFxuICAgICAgICAgICAgYmFzZU5hbWU6IGF0dHJpYnV0ZS5iYXNlTmFtZSxcbiAgICAgICAgICAgIHR5cGU6IGF0dHJpYnV0ZS50eXBlLFxuICAgICAgICAgICAgc3VidHlwZTogYXR0cmlidXRlLnN1YnR5cGUsXG4gICAgICAgICAgICBjb2x1bW5UeXBlOiBlbnVtVHlwZSA/IENvbHVtblR5cGVFbnVtLkVudW0gOiBnZXRDb2x1bW5UeXBlRnJvbUNsYXNzQXR0cmlidXRlRGVmVHlwZShhdHRyaWJ1dGUudHlwZSksXG4gICAgICAgICAgICBjb2x1bW5EaXNwbGF5VHlwZTogZ2V0Q29sdW1uRGlzcGxheVR5cGVGcm9tQ29sdW1uVHlwZShjb2x1bW5UeXBlLCBhdHRyaWJ1dGUudHlwZSksXG4gICAgICAgICAgICBmaWVsZFR5cGU6IGdldEZpZWxkSW5wdXRUeXBlRnJvbUNsYXNzQXR0cmlidXRlRGVmVHlwZShhdHRyaWJ1dGUudHlwZSksXG4gICAgICAgICAgICBlbnVtVHlwZTogdHlwZVJlZ2lzdHJ5LmZpbmRFbnVtKGF0dHJpYnV0ZS50eXBlKSBhcyBFbnVtVHlwZSxcbiAgICAgICAgICAgIGNsYXNzVHlwZTogdHlwZVJlZ2lzdHJ5LmZpbmRUeXBlKGF0dHJpYnV0ZS50eXBlKSBhcyBDbGFzc1R5cGU8YW55PlxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFibGVDbGFzc0F0dHJpYnV0ZURlZjtcbn1cblxuLyoqXG4gKiByZXR1cm5zIGF0dHJpYnV0ZXMgZnJvbSBjbGFzcyB0eXBlIGFuZCBleHRlbmRzIHRvIHR5cGVkIGRlZiB3aXRoIGNvbHVtbiBhbmQgZmllbGQgZW51bSB0eXBlXG4gKiBAcGFyYW0gdHlwZSBjbGFzcyB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZXZpZXdDbGFzc0F0dHJpYnV0ZURlZjxUPih0eXBlOiBDbGFzc1R5cGU8VD4pOiBUYWJsZXZpZXdDbGFzc0F0dHJpYnV0ZURlZltdIHtcbiAgICByZXR1cm4gZXhwYW5kQ2xhc3NBdHRyaWJ1dGVEZWZXaXRoVGFibGV2aWV3RGVmKFR5cGVSZWdpc3RyeS5nZXQoKS5maW5kQXR0cmlidXRlc0RlZmluaXRpb25CeUNsYXNzVHlwZSh0eXBlKSk7XG59XG4iXX0=