@sumaris-net/ngx-components 2.6.4 → 2.6.6-rc1

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 (232) hide show
  1. package/doc/changelog.md +6 -0
  2. package/esm2020/public_api.mjs +12 -2
  3. package/esm2020/src/app/admin/services/filter/person.filter.mjs +1 -1
  4. package/esm2020/src/app/admin/services/person.service.mjs +9 -1
  5. package/esm2020/src/app/admin/users/users.mjs +73 -67
  6. package/esm2020/src/app/core/account/account.page.mjs +1 -1
  7. package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +44 -8
  8. package/esm2020/src/app/core/form/entity/editor.class.mjs +7 -7
  9. package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +4 -3
  10. package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +6 -3
  11. package/esm2020/src/app/core/form/form.class.mjs +7 -2
  12. package/esm2020/src/app/core/form/form.utils.mjs +4 -1
  13. package/esm2020/src/app/core/form/properties/properties.table.mjs +1 -1
  14. package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +2 -2
  15. package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +2 -2
  16. package/esm2020/src/app/core/graphql/graphql.service.mjs +6 -2
  17. package/esm2020/src/app/core/graphql/graphql.utils.mjs +1 -1
  18. package/esm2020/src/app/core/home/home.mjs +12 -10
  19. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +3 -2
  20. package/esm2020/src/app/core/menu/menu.component.mjs +80 -171
  21. package/esm2020/src/app/core/menu/menu.model.mjs +219 -7
  22. package/esm2020/src/app/core/menu/menu.module.mjs +27 -14
  23. package/esm2020/src/app/core/menu/menu.service.mjs +610 -11
  24. package/esm2020/src/app/core/menu/sub-menu-tab.directive.mjs +98 -0
  25. package/esm2020/src/app/core/menu/testing/menu-other.testing.mjs +48 -0
  26. package/esm2020/src/app/core/menu/testing/menu.testing.mjs +121 -0
  27. package/esm2020/src/app/core/menu/testing/menu.testing.module.mjs +79 -0
  28. package/esm2020/src/app/core/peer/select-peer.modal.mjs +3 -2
  29. package/esm2020/src/app/core/register/register-confirm.page.mjs +3 -3
  30. package/esm2020/src/app/core/register/register.form.mjs +21 -19
  31. package/esm2020/src/app/core/services/account.service.mjs +9 -15
  32. package/esm2020/src/app/core/services/base-entity-service.class.mjs +1 -1
  33. package/esm2020/src/app/core/services/base-graphql-service.class.mjs +2 -4
  34. package/esm2020/src/app/core/services/config.service.mjs +23 -22
  35. package/esm2020/src/app/core/services/crypto.service.mjs +14 -21
  36. package/esm2020/src/app/core/services/local-settings.service.mjs +12 -1
  37. package/esm2020/src/app/core/services/model/account.model.mjs +27 -2
  38. package/esm2020/src/app/core/services/model/config.model.mjs +1 -1
  39. package/esm2020/src/app/core/services/model/department.model.mjs +1 -1
  40. package/esm2020/src/app/core/services/model/entity.decorators.mjs +1 -1
  41. package/esm2020/src/app/core/services/model/entity.model.mjs +20 -35
  42. package/esm2020/src/app/core/services/model/filter.model.mjs +3 -1
  43. package/esm2020/src/app/core/services/model/peer.model.mjs +1 -1
  44. package/esm2020/src/app/core/services/model/person.model.mjs +5 -1
  45. package/esm2020/src/app/core/services/model/referential.model.mjs +3 -3
  46. package/esm2020/src/app/core/services/model/token.model.mjs +1 -1
  47. package/esm2020/src/app/core/services/model/tree-item-entity.model.mjs +199 -0
  48. package/esm2020/src/app/core/services/network.service.mjs +12 -8
  49. package/esm2020/src/app/core/services/network.utils.mjs +1 -1
  50. package/esm2020/src/app/core/services/platform.service.mjs +15 -16
  51. package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +10 -10
  52. package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +1 -1
  53. package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +3 -3
  54. package/esm2020/src/app/core/settings/settings.page.mjs +2 -2
  55. package/esm2020/src/app/core/table/async-table.class.mjs +4 -3
  56. package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +1 -1
  57. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +1 -1
  58. package/esm2020/src/app/core/table/table-select-columns.component.mjs +1 -1
  59. package/esm2020/src/app/core/table/table.class.mjs +19 -14
  60. package/esm2020/src/app/core/table/table.utils.mjs +6 -3
  61. package/esm2020/src/app/core/table/testing/table.testing.mjs +3 -2
  62. package/esm2020/src/app/shared/audio/audio.mjs +5 -5
  63. package/esm2020/src/app/shared/capacitor/plugins.mjs +1 -1
  64. package/esm2020/src/app/shared/dates.mjs +3 -1
  65. package/esm2020/src/app/shared/debug/debug.component.mjs +1 -1
  66. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +5 -4
  67. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +1 -1
  68. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +1 -1
  69. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +1 -1
  70. package/esm2020/src/app/shared/events.mjs +2 -1
  71. package/esm2020/src/app/shared/file/csv.utils.mjs +12 -14
  72. package/esm2020/src/app/shared/file/file.utils.mjs +2 -2
  73. package/esm2020/src/app/shared/file/images.utils.mjs +2 -2
  74. package/esm2020/src/app/shared/file/json.utils.mjs +3 -3
  75. package/esm2020/src/app/shared/file/uri.utils.mjs +2 -1
  76. package/esm2020/src/app/shared/form/field.component.mjs +28 -3
  77. package/esm2020/src/app/shared/forms.mjs +48 -30
  78. package/esm2020/src/app/shared/functions.mjs +7 -2
  79. package/esm2020/src/app/shared/geolocation/geolocation.utils.mjs +1 -1
  80. package/esm2020/src/app/shared/help/help.modal.mjs +1 -1
  81. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +9 -6
  82. package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +1 -1
  83. package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +1 -1
  84. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +2 -2
  85. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +1 -1
  86. package/esm2020/src/app/shared/interceptors/progess.interceptor.mjs +1 -1
  87. package/esm2020/src/app/shared/logging/logger.model.mjs +1 -1
  88. package/esm2020/src/app/shared/logging/logging-service.class.mjs +2 -2
  89. package/esm2020/src/app/shared/logging/logging-service.config.mjs +1 -1
  90. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +10 -10
  91. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +4 -6
  92. package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +1 -1
  93. package/esm2020/src/app/shared/material/badge/badge.directive.mjs +8 -3
  94. package/esm2020/src/app/shared/material/badge/badge.test.mjs +2 -2
  95. package/esm2020/src/app/shared/material/chips/material.chips.mjs +9 -10
  96. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +3 -3
  97. package/esm2020/src/app/shared/material/datetime/material.date.mjs +2 -2
  98. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +3 -3
  99. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +3 -3
  100. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +1 -1
  101. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +1 -1
  102. package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +1 -1
  103. package/esm2020/src/app/shared/material/duration/material.duration.mjs +3 -3
  104. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +5 -4
  105. package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +1 -1
  106. package/esm2020/src/app/shared/material/material.animations.mjs +41 -2
  107. package/esm2020/src/app/shared/material/material.testing.module.mjs +2 -2
  108. package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +1 -1
  109. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +1 -1
  110. package/esm2020/src/app/shared/modules.mjs +2 -1
  111. package/esm2020/src/app/shared/named-filter/named-filter.model.mjs +1 -1
  112. package/esm2020/src/app/shared/observables.mjs +3 -2
  113. package/esm2020/src/app/shared/pipes/colors.pipe.mjs +3 -1
  114. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +1 -1
  115. package/esm2020/src/app/shared/pipes/form.pipes.mjs +1 -1
  116. package/esm2020/src/app/shared/pipes/property.pipes.mjs +1 -1
  117. package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +1 -1
  118. package/esm2020/src/app/shared/platforms.mjs +1 -1
  119. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +3 -1
  120. package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +5 -6
  121. package/esm2020/src/app/shared/services/startable-service.class.mjs +1 -1
  122. package/esm2020/src/app/shared/services/translate-context.service.mjs +11 -13
  123. package/esm2020/src/app/shared/services/validator-service.class.mjs +1 -1
  124. package/esm2020/src/app/shared/shared-routing.module.mjs +2 -1
  125. package/esm2020/src/app/shared/shared.testing.module.mjs +16 -8
  126. package/esm2020/src/app/shared/storage/storage-explorer.component.mjs +3 -3
  127. package/esm2020/src/app/shared/storage/storage-explorer.module.mjs +5 -18
  128. package/esm2020/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +35 -0
  129. package/esm2020/src/app/shared/storage/storage-explorer.testing.module.mjs +33 -0
  130. package/esm2020/src/app/shared/storage/storage.service.mjs +3 -3
  131. package/esm2020/src/app/shared/storage/storage.utils.mjs +1 -1
  132. package/esm2020/src/app/shared/testing/observable.test.mjs +2 -2
  133. package/esm2020/src/app/shared/testing/tests.page.mjs +1 -1
  134. package/esm2020/src/app/shared/toast/toast.testing.mjs +1 -1
  135. package/esm2020/src/app/shared/toast/toasts.mjs +2 -2
  136. package/esm2020/src/app/shared/toolbar/toolbar.mjs +1 -1
  137. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +2 -1
  138. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +1 -1
  139. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +5 -5
  140. package/esm2020/src/app/shared/validator/validators.mjs +10 -3
  141. package/esm2020/src/app/shared/version/versions.mjs +2 -2
  142. package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +2 -2
  143. package/esm2020/src/app/social/job/progression/job-progression.model.mjs +1 -1
  144. package/esm2020/src/app/social/job/progression/job-progression.service.mjs +1 -1
  145. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +1 -1
  146. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +3 -3
  147. package/esm2020/src/app/social/message/message.form.mjs +11 -8
  148. package/esm2020/src/app/social/message/message.modal.mjs +1 -1
  149. package/esm2020/src/app/social/message/message.model.mjs +1 -1
  150. package/esm2020/src/app/social/message/message.service.mjs +2 -2
  151. package/esm2020/src/app/social/social.module.mjs +2 -2
  152. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +5 -5
  153. package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +1 -1
  154. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +1 -1
  155. package/esm2020/src/app/social/user-event/user-event.model.mjs +1 -1
  156. package/esm2020/src/app/social/user-event/user-event.service.mjs +4 -3
  157. package/fesm2015/sumaris-net.ngx-components.mjs +2758 -1263
  158. package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
  159. package/fesm2020/sumaris-net.ngx-components.mjs +2687 -1223
  160. package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
  161. package/package.json +8 -9
  162. package/public_api.d.ts +11 -1
  163. package/src/app/admin/services/person.service.d.ts +5 -0
  164. package/src/app/admin/users/users.d.ts +4 -2
  165. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +14 -2
  166. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +1 -0
  167. package/src/app/core/form/form.class.d.ts +2 -0
  168. package/src/app/core/form/form.utils.d.ts +4 -1
  169. package/src/app/core/form/text-popover/text-popover.component.d.ts +2 -1
  170. package/src/app/core/graphql/graphql.service.d.ts +5 -4
  171. package/src/app/core/graphql/graphql.utils.d.ts +2 -2
  172. package/src/app/core/home/home.d.ts +11 -10
  173. package/src/app/core/install/install-upgrade-card.component.d.ts +3 -2
  174. package/src/app/core/menu/menu.component.d.ts +29 -26
  175. package/src/app/core/menu/menu.model.d.ts +123 -6
  176. package/src/app/core/menu/menu.module.d.ts +8 -4
  177. package/src/app/core/menu/menu.service.d.ts +76 -5
  178. package/src/app/core/menu/sub-menu-tab.directive.d.ts +29 -0
  179. package/src/app/core/menu/testing/menu-other.testing.d.ts +15 -0
  180. package/src/app/core/menu/testing/menu.testing.d.ts +43 -0
  181. package/src/app/core/menu/testing/menu.testing.module.d.ts +12 -0
  182. package/src/app/core/peer/select-peer.modal.d.ts +4 -3
  183. package/src/app/core/register/register.form.d.ts +3 -2
  184. package/src/app/core/services/account.service.d.ts +4 -3
  185. package/src/app/core/services/config.service.d.ts +5 -3
  186. package/src/app/core/services/crypto.service.d.ts +7 -7
  187. package/src/app/core/services/local-settings.service.d.ts +1 -0
  188. package/src/app/core/services/model/account.model.d.ts +7 -1
  189. package/src/app/core/services/model/entity.model.d.ts +5 -8
  190. package/src/app/core/services/model/filter.model.d.ts +2 -0
  191. package/src/app/core/services/model/person.model.d.ts +1 -0
  192. package/src/app/core/services/model/tree-item-entity.model.d.ts +53 -0
  193. package/src/app/core/services/network.service.d.ts +4 -3
  194. package/src/app/core/services/platform.service.d.ts +4 -5
  195. package/src/app/core/services/storage/entities-storage.service.d.ts +3 -3
  196. package/src/app/core/settings/settings.page.d.ts +5 -5
  197. package/src/app/core/table/async-table.class.d.ts +1 -0
  198. package/src/app/core/table/table.class.d.ts +5 -1
  199. package/src/app/core/table/testing/table.testing.d.ts +1 -0
  200. package/src/app/shared/dates.d.ts +2 -0
  201. package/src/app/shared/events.d.ts +1 -0
  202. package/src/app/shared/file/uri.utils.d.ts +1 -0
  203. package/src/app/shared/form/field.component.d.ts +1 -0
  204. package/src/app/shared/forms.d.ts +4 -1
  205. package/src/app/shared/functions.d.ts +1 -0
  206. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +1 -0
  207. package/src/app/shared/material/badge/badge.directive.d.ts +1 -1
  208. package/src/app/shared/material/datetime/material.dateshort.d.ts +1 -1
  209. package/src/app/shared/material/latlong/material.latlong.d.ts +1 -0
  210. package/src/app/shared/material/material.animations.d.ts +2 -0
  211. package/src/app/shared/modules.d.ts +1 -0
  212. package/src/app/shared/observables.d.ts +1 -0
  213. package/src/app/shared/pipes/translate-context.pipe.d.ts +1 -1
  214. package/src/app/shared/services/memory-entity-service.class.d.ts +2 -0
  215. package/src/app/shared/services/startable-observable-service.class.d.ts +1 -1
  216. package/src/app/shared/services/translate-context.service.d.ts +2 -2
  217. package/src/app/shared/services/validator-service.class.d.ts +1 -0
  218. package/src/app/shared/shared-routing.module.d.ts +1 -0
  219. package/src/app/shared/shared.testing.module.d.ts +3 -2
  220. package/src/app/shared/storage/storage-explorer.component.d.ts +2 -2
  221. package/src/app/shared/storage/storage-explorer.module.d.ts +5 -8
  222. package/src/app/shared/storage/storage-explorer.testing-routing.module.d.ts +9 -0
  223. package/src/app/shared/storage/storage-explorer.testing.module.d.ts +10 -0
  224. package/src/app/shared/storage/storage.service.d.ts +0 -1
  225. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +1 -0
  226. package/src/app/shared/validator/validators.d.ts +4 -0
  227. package/src/app/social/user-event/user-event.model.d.ts +1 -2
  228. package/src/assets/i18n/en-US.json +1 -0
  229. package/src/assets/i18n/en.json +1 -0
  230. package/src/assets/i18n/fr.json +10 -1
  231. package/src/assets/manifest.json +1 -1
  232. package/src/theme/_ngx-components.scss +2 -1
@@ -18,11 +18,12 @@ import * as i4 from "./network.service";
18
18
  import * as i5 from "../../shared/file/file.service";
19
19
  import * as i6 from "@ngx-translate/core";
20
20
  import * as i7 from "./account.service";
21
+ import * as i8 from "../../../environments/environment.class";
21
22
  const CONFIGURATION_STORAGE_KEY = 'configuration';
22
23
  /* ------------------------------------
23
24
  * GraphQL queries
24
25
  * ------------------------------------*/
25
- export const Fragments = {
26
+ export const ConfigFragments = {
26
27
  config: gql `
27
28
  fragment ConfigFragment on ConfigurationVO {
28
29
  id
@@ -49,23 +50,23 @@ export const Fragments = {
49
50
  }
50
51
  `
51
52
  };
52
- const LoadQuery = gql `
53
- query Configuration{
54
- data: configuration{
55
- ...ConfigFragment
56
- }
57
- }
58
- ${Fragments.config}
59
- `;
53
+ const ConfigQueries = {
54
+ load: gql `query Configuration {
55
+ data: configuration {
56
+ ...ConfigFragment
57
+ }
58
+ }
59
+ ${ConfigFragments.config}`
60
+ };
60
61
  // Save (create or update) account mutation
61
- const SaveMutation = gql `
62
- mutation SaveConfiguration($data: ConfigurationVOInput){
63
- data: saveConfiguration(config: $data){
64
- ...ConfigFragment
62
+ const ConfigMutations = {
63
+ save: gql `mutation SaveConfiguration($data: ConfigurationVOInput) {
64
+ data: saveConfiguration(config: $data){
65
+ ...ConfigFragment
66
+ }
65
67
  }
66
- }
67
- ${Fragments.config}
68
- `;
68
+ ${ConfigFragments.config}`
69
+ };
69
70
  const ClearCache = gql `
70
71
  query ClearCache($name: String) {
71
72
  clearCache(name: $name)
@@ -112,7 +113,7 @@ export class ConfigService extends BaseGraphqlService {
112
113
  async loadDefault(opts) {
113
114
  const now = Date.now();
114
115
  console.debug('[config] Loading Pod configuration...');
115
- const query = opts && opts.query || LoadQuery;
116
+ const query = opts && opts.query || ConfigQueries.load;
116
117
  const variables = opts && opts.variables || undefined;
117
118
  const res = await this.graphql.query({
118
119
  query,
@@ -126,7 +127,7 @@ export class ConfigService extends BaseGraphqlService {
126
127
  }
127
128
  async load(id, opts) {
128
129
  console.warn('[config] Invalid call of configService.load(id). Please use loadDefault() instead');
129
- return this.loadDefault();
130
+ return this.loadDefault(opts);
130
131
  }
131
132
  canUserWrite(data, opts) {
132
133
  return this.accountService.isAdmin();
@@ -141,7 +142,7 @@ export class ConfigService extends BaseGraphqlService {
141
142
  const json = config.asObject();
142
143
  // Execute mutation
143
144
  const res = await this.graphql.mutate({
144
- mutation: SaveMutation,
145
+ mutation: ConfigMutations.save,
145
146
  variables: {
146
147
  data: json
147
148
  },
@@ -214,7 +215,7 @@ export class ConfigService extends BaseGraphqlService {
214
215
  }
215
216
  // Save it into local storage, for next startup
216
217
  if (data) {
217
- setTimeout(() => this.storeLocally(data), 1000);
218
+ setTimeout(() => this.storeLocally(data), 2000);
218
219
  }
219
220
  // If not loaded remotely: try to restore it
220
221
  else {
@@ -342,7 +343,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
342
343
  providedIn: 'root',
343
344
  deps: [APP_CONFIG_OPTIONS]
344
345
  }]
345
- }], ctorParameters: function () { return [{ type: i1.Platform }, { type: i2.GraphqlService }, { type: i3.Storage }, { type: i4.NetworkService }, { type: i5.FileService }, { type: i1.ToastController }, { type: i6.TranslateService }, { type: i7.AccountService }, { type: undefined, decorators: [{
346
+ }], ctorParameters: function () { return [{ type: i1.Platform }, { type: i2.GraphqlService }, { type: i3.Storage }, { type: i4.NetworkService }, { type: i5.FileService }, { type: i1.ToastController }, { type: i6.TranslateService }, { type: i7.AccountService }, { type: i8.Environment, decorators: [{
346
347
  type: Inject,
347
348
  args: [ENVIRONMENT]
348
349
  }] }, { type: undefined, decorators: [{
@@ -351,4 +352,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
351
352
  type: Inject,
352
353
  args: [APP_CONFIG_OPTIONS]
353
354
  }] }]; } });
354
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxlQUFlLEVBQWMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzFELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHcEMsT0FBTyxFQUFDLGVBQWUsRUFBRSxRQUFRLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUdqRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQW1CLE1BQU0sRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRW5FLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDcEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFHaEUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7QUFHaEQsTUFBTSx5QkFBeUIsR0FBRyxlQUFlLENBQUM7QUFFbEQ7O3lDQUV5QztBQUN6QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUc7SUFDdkIsTUFBTSxFQUFFLEdBQUcsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JWO0NBQ0YsQ0FBQztBQUVGLE1BQU0sU0FBUyxHQUFRLEdBQUcsQ0FBQTs7Ozs7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QUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxJQUFJLENBQUMsTUFBTTtvQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLHFEQUFxRCxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQzthQUMzRztTQUNGO0lBQ0gsQ0FBQztJQUVTLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBc0I7UUFDOUMsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRSxDQUFDOzswR0E5VFUsYUFBYSxxUEFzQmQsV0FBVyxhQUNDLGtCQUFrQjs4R0F2QjdCLGFBQWEsY0FIWixNQUFNOzJGQUdQLGFBQWE7a0JBSnpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07b0JBQ2xCLElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDO2lCQUMzQjs7MEJBdUJJLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2dxbH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gJy4vbW9kZWwvY29uZmlnLm1vZGVsJztcbmltcG9ydCB7U3RvcmFnZX0gZnJvbSAnQGlvbmljL3N0b3JhZ2UtYW5ndWxhcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0Vycm9yQ29kZXN9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7R3JhcGhxbFNlcnZpY2V9IGZyb20gJy4uL2dyYXBocWwvZ3JhcGhxbC5zZXJ2aWNlJztcbmltcG9ydCB7Rm9ybUZpZWxkRGVmaW5pdGlvbiwgRm9ybUZpZWxkRGVmaW5pdGlvbk1hcH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHtpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7RmlsZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NoYXJlZC9maWxlL2ZpbGUuc2VydmljZSc7XG5pbXBvcnQge05ldHdvcmtTZXJ2aWNlfSBmcm9tICcuL25ldHdvcmsuc2VydmljZSc7XG5pbXBvcnQge0NPUkVfQ09ORklHX09QVElPTlN9IGZyb20gJy4vY29uZmlnL2NvcmUuY29uZmlnJztcbmltcG9ydCB7UGxhdGZvcm0sIFRvYXN0Q29udHJvbGxlcn0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtTaG93VG9hc3RPcHRpb25zLCBUb2FzdHN9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdC90b2FzdHMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7ZmlsdGVyfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0VudGl0eVNlcnZpY2VMb2FkT3B0aW9ucywgSUVudGl0eVNlcnZpY2V9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge0VOVklST05NRU5UfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHtCYXNlR3JhcGhxbFNlcnZpY2V9IGZyb20gJy4vYmFzZS1ncmFwaHFsLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtJU3RhcnRhYmxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7QWNjb3VudFNlcnZpY2V9IGZyb20gJy4vYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7aXNNb2JpbGV9IGZyb20gJy4uLy4uL3NoYXJlZC9wbGF0Zm9ybXMnO1xuXG5cbmNvbnN0IENPTkZJR1VSQVRJT05fU1RPUkFHRV9LRVkgPSAnY29uZmlndXJhdGlvbic7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogR3JhcGhRTCBxdWVyaWVzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGNvbnN0IEZyYWdtZW50cyA9IHtcbiAgY29uZmlnOiBncWxgXG4gICAgZnJhZ21lbnQgQ29uZmlnRnJhZ21lbnQgb24gQ29uZmlndXJhdGlvblZPIHtcbiAgICAgIGlkXG4gICAgICBsYWJlbFxuICAgICAgbmFtZVxuICAgICAgZGVzY3JpcHRpb25cbiAgICAgIGNvbW1lbnRzXG4gICAgICBwcm9wZXJ0aWVzXG4gICAgICBzbWFsbExvZ29cbiAgICAgIGxhcmdlTG9nb1xuICAgICAgYmFja2dyb3VuZEltYWdlc1xuICAgICAgcGFydG5lcnMge1xuICAgICAgICBpZFxuICAgICAgICBsYWJlbFxuICAgICAgICBuYW1lXG4gICAgICAgIGxvZ29cbiAgICAgICAgc2l0ZVVybFxuICAgICAgICBfX3R5cGVuYW1lXG4gICAgICB9XG4gICAgICB1cGRhdGVEYXRlXG4gICAgICBjcmVhdGlvbkRhdGVcbiAgICAgIHN0YXR1c0lkXG4gICAgICBfX3R5cGVuYW1lXG4gICAgfVxuICBgXG59O1xuXG5jb25zdCBMb2FkUXVlcnk6IGFueSA9IGdxbGBcbnF1ZXJ5IENvbmZpZ3VyYXRpb257XG4gIGRhdGE6IGNvbmZpZ3VyYXRpb257XG4gICAgLi4uQ29uZmlnRnJhZ21lbnRcbiAgfVxufVxuICAke0ZyYWdtZW50cy5jb25maWd9XG5gO1xuXG4vLyBTYXZlIChjcmVhdGUgb3IgdXBkYXRlKSBhY2NvdW50IG11dGF0aW9uXG5jb25zdCBTYXZlTXV0YXRpb246IGFueSA9IGdxbGBcbiAgbXV0YXRpb24gU2F2ZUNvbmZpZ3VyYXRpb24oJGRhdGE6IENvbmZpZ3VyYXRpb25WT0lucHV0KXtcbiAgICBkYXRhOiBzYXZlQ29uZmlndXJhdGlvbihjb25maWc6ICRkYXRhKXtcbiAgICAgICAuLi5Db25maWdGcmFnbWVudFxuICAgIH1cbiAgfVxuICAke0ZyYWdtZW50cy5jb25maWd9XG5gO1xuXG5jb25zdCBDbGVhckNhY2hlOiBhbnkgPSBncWxgXG4gIHF1ZXJ5IENsZWFyQ2FjaGUoJG5hbWU6IFN0cmluZykge1xuICAgIGNsZWFyQ2FjaGUobmFtZTogJG5hbWUpXG4gIH1cbmA7XG5cbmNvbnN0IENhY2hlU3RhdGlzdGljczogYW55ID0gZ3FsYFxuICBxdWVyeSBDYWNoZVN0YXRpc3RpY3Mge1xuICAgIGNhY2hlU3RhdGlzdGljc1xuICB9XG5gO1xuXG5leHBvcnQgY29uc3QgQVBQX0NPTkZJR19PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPEZvcm1GaWVsZERlZmluaXRpb25NYXA+KCdkZWZhdWx0T3B0aW9ucycpO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZGVwczogW0FQUF9DT05GSUdfT1BUSU9OU11cbn0pXG5leHBvcnQgY2xhc3MgQ29uZmlnU2VydmljZVxuICBleHRlbmRzIEJhc2VHcmFwaHFsU2VydmljZTxDb25maWd1cmF0aW9uLCBhbnksIG51bWJlciwgQ29uZmlndXJhdGlvbj5cbiAgaW1wbGVtZW50cyBJRW50aXR5U2VydmljZTxDb25maWd1cmF0aW9uPiwgSVN0YXJ0YWJsZVNlcnZpY2U8Q29uZmlndXJhdGlvbj4ge1xuXG4gIHByaXZhdGUgX29wdGlvbkRlZnM6IEZvcm1GaWVsZERlZmluaXRpb25bXTtcbiAgcHJpdmF0ZSAkZGF0YSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29uZmlndXJhdGlvbj4obnVsbCk7XG5cbiAgZ2V0IGNvbmZpZygpOiBPYnNlcnZhYmxlPENvbmZpZ3VyYXRpb24+IHtcbiAgICAvLyBJZiBmaXJzdCBjYWxsOiBzdGFydCBsb2FkaW5nXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHRoaXMuc3RhcnQoKTtcbiAgICByZXR1cm4gdGhpcy4kZGF0YS5waXBlKGZpbHRlcihpc05vdE5pbCkpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcm90ZWN0ZWQgZ3JhcGhxbDogR3JhcGhxbFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgcHJvdGVjdGVkIG5ldHdvcms6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBmaWxlOiBGaWxlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9DT05GSUdfT1BUSU9OUykgZGVmYXVsdE9wdGlvbnNNYXA6IEZvcm1GaWVsZERlZmluaXRpb25NYXBcbiAgKSB7XG4gICAgc3VwZXIoZ3JhcGhxbCwgZW52aXJvbm1lbnQpO1xuXG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tjb25maWddIENyZWF0aW5nIHNlcnZpY2UnKTtcblxuICAgIHRoaXMuX29wdGlvbkRlZnMgPSBPYmplY3QudmFsdWVzKHsuLi5DT1JFX0NPTkZJR19PUFRJT05TLCAuLi5kZWZhdWx0T3B0aW9uc01hcH0pO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KCk6IFByb21pc2U8Q29uZmlndXJhdGlvbj4ge1xuICAgIGNvbnNvbGUuaW5mbygnW2NvbmZpZ10gU3RhcnRpbmcgY29uZmlndXJhdGlvbi4uLicpO1xuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubG9hZE9yUmVzdG9yZUxvY2FsbHkoKTtcbiAgICB0aGlzLiRkYXRhLm5leHQoZGF0YSk7XG5cbiAgICAvLyBSZXN0YXJ0IGlmIGdyYXBocWwgc2VydmljZSByZXN0YXJ0XG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuZ3JhcGhxbC5zdG9wU3ViamVjdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZXN0YXJ0KCkpXG4gICAgKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbG9hZERlZmF1bHQoXG4gICAgb3B0cz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyk6IFByb21pc2U8Q29uZmlndXJhdGlvbj4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gTG9hZGluZyBQb2QgY29uZmlndXJhdGlvbi4uLicpO1xuXG4gICAgY29uc3QgcXVlcnkgPSBvcHRzICYmIG9wdHMucXVlcnkgfHwgTG9hZFF1ZXJ5O1xuICAgIGNvbnN0IHZhcmlhYmxlcyA9IG9wdHMgJiYgb3B0cy52YXJpYWJsZXMgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTx7IGRhdGE6IGFueSB9Pih7XG4gICAgICBxdWVyeSxcbiAgICAgIHZhcmlhYmxlcyxcbiAgICAgIGVycm9yOiB7Y29kZTogRXJyb3JDb2Rlcy5MT0FEX0NPTkZJR19FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLkxPQURfQ09ORklHX0VSUk9SJ30sXG4gICAgICBmZXRjaFBvbGljeTogb3B0cyAmJiBvcHRzLmZldGNoUG9saWN5IHx8IHVuZGVmaW5lZC8qZGVmYXVsdCovXG4gICAgfSk7XG5cbiAgICBjb25zdCBkYXRhID0gcmVzICYmIHJlcy5kYXRhID8gQ29uZmlndXJhdGlvbi5mcm9tT2JqZWN0KHJlcy5kYXRhKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zb2xlLmluZm8oYFtjb25maWddIFBvZCBjb25maWd1cmF0aW9uIGxvYWRlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXM6YCwgZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsb2FkKFxuICAgIGlkOiBudW1iZXIsXG4gICAgb3B0cz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyAmIHsgcXVlcnk/OiBhbnkgfSk6IFByb21pc2U8Q29uZmlndXJhdGlvbj4ge1xuICAgIGNvbnNvbGUud2FybignW2NvbmZpZ10gSW52YWxpZCBjYWxsIG9mIGNvbmZpZ1NlcnZpY2UubG9hZChpZCkuIFBsZWFzZSB1c2UgbG9hZERlZmF1bHQoKSBpbnN0ZWFkJyk7XG5cbiAgICByZXR1cm4gdGhpcy5sb2FkRGVmYXVsdCgpO1xuICB9XG5cbiAgY2FuVXNlcldyaXRlKGRhdGE6IENvbmZpZ3VyYXRpb24sIG9wdHM/OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvdW50U2VydmljZS5pc0FkbWluKCk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBhIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZ1xuICAgKi9cbiAgYXN5bmMgc2F2ZShjb25maWc6IENvbmZpZ3VyYXRpb24pOiBQcm9taXNlPENvbmZpZ3VyYXRpb24+IHtcblxuICAgIGNvbnNvbGUuZGVidWcoJ1tjb25maWddIFNhdmluZyBQb2QgY29uZmlndXJhdGlvbi4uLicsIGNvbmZpZyk7XG5cbiAgICBjb25zdCBqc29uID0gY29uZmlnLmFzT2JqZWN0KCk7XG5cbiAgICAvLyBFeGVjdXRlIG11dGF0aW9uXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7IGRhdGE6IGFueSB9Pih7XG4gICAgICBtdXRhdGlvbjogU2F2ZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGRhdGE6IGpzb25cbiAgICAgIH0sXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBFcnJvckNvZGVzLlNBVkVfQ09ORklHX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnRVJST1IuU0FWRV9DT05GSUdfRVJST1InXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzYXZlZENvbmZpZyA9IHJlcyAmJiByZXMuZGF0YTtcblxuICAgIC8vIENvcHkgdXBkYXRlIHByb3BlcnRpZXNcbiAgICBjb25maWcuaWQgPSBzYXZlZENvbmZpZyAmJiBzYXZlZENvbmZpZy5pZCB8fCBjb25maWcuaWQ7XG4gICAgY29uZmlnLnVwZGF0ZURhdGUgPSBzYXZlZENvbmZpZyAmJiBzYXZlZENvbmZpZy51cGRhdGVEYXRlIHx8IGNvbmZpZy51cGRhdGVEYXRlO1xuXG4gICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gUG9kIGNvbmZpZ3VyYXRpb24gc2F2ZWQhJyk7XG5cbiAgICBjb25zdCByZWxvYWRlZENvbmZpZyA9IGF3YWl0IHRoaXMubG9hZERlZmF1bHQoe2ZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5J30pO1xuXG4gICAgLy8gSWYgdGhpcyBpcyB0aGUgZGVmYXVsdCBjb25maWdcbiAgICBjb25zdCBkZWZhdWx0Q29uZmlnID0gdGhpcy4kZGF0YS52YWx1ZTtcbiAgICBpZiAoaXNOb3ROaWwoZGVmYXVsdENvbmZpZykgJiYgcmVsb2FkZWRDb25maWcubGFiZWwgPT09IGRlZmF1bHRDb25maWcubGFiZWwpIHtcblxuICAgICAgLy8gRW1pdCB1cGRhdGUgZXZlbnQgd2hlbiBpcyBkZWZhdWx0IGNvbmZpZ1xuICAgICAgdGhpcy4kZGF0YS5uZXh0KHJlbG9hZGVkQ29uZmlnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVsb2FkZWRDb25maWc7XG4gIH1cblxuICBhc3luYyBnZXRDYWNoZVN0YXRpc3RpY3MoKTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gTG9hZGluZyBzZXJ2ZXIgY2FjaGUgc3RhdGlzdGljcy4uLicpO1xuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ncmFwaHFsLnF1ZXJ5PHsgY2FjaGVTdGF0aXN0aWNzOiBhbnkgfT4oe1xuICAgICAgcXVlcnk6IENhY2hlU3RhdGlzdGljcyxcbiAgICAgIHZhcmlhYmxlczogbnVsbCxcbiAgICAgIGVycm9yOiB7Y29kZTogRXJyb3JDb2Rlcy5MT0FEX0NPTkZJR19FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLkxPQURfQ09ORklHX0VSUk9SJ30sXG4gICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seSdcbiAgICB9KTtcblxuICAgIGNvbnN0IGRhdGEgPSByZXMgJiYgcmVzLmNhY2hlU3RhdGlzdGljcyB8fCB1bmRlZmluZWQ7XG4gICAgY29uc29sZS5pbmZvKGBbY29uZmlnXSBTZXJ2ZXIgY2FjaGUgc3RhdGlzdGljcyBsb2FkZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zOmAsIGRhdGEpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJDYWNoZShvcHRzPzoge2NhY2hlTmFtZT86IHN0cmluZ30pIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnNvbGUuZGVidWcoJ1tjb25maWddIENsZWFyIHNlcnZlciBjYWNoZS4uLicpO1xuXG4gICAgY29uc3QgdmFyaWFibGVzID0gb3B0cyAmJiBvcHRzLmNhY2hlTmFtZSAmJiB7bmFtZTogb3B0cy5jYWNoZU5hbWV9IHx8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTx7IGNsZWFyQ2FjaGU6IGJvb2xlYW4gfT4oe1xuICAgICAgcXVlcnk6IENsZWFyQ2FjaGUsXG4gICAgICB2YXJpYWJsZXMsXG4gICAgICBlcnJvcjoge2NvZGU6IEVycm9yQ29kZXMuTE9BRF9DT05GSUdfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5MT0FEX0NPTkZJR19FUlJPUid9LFxuICAgICAgZmV0Y2hQb2xpY3k6ICduby1jYWNoZSdcbiAgICB9KTtcblxuICAgIGNvbnN0IGRhdGEgPSByZXMgJiYgcmVzLmNsZWFyQ2FjaGUgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnNvbGUuaW5mbyhgW2NvbmZpZ10gQ2xlYXIgc2VydmVyIGNhY2hlIGluICR7RGF0ZS5ub3coKSAtIG5vd31tczpgLCBkYXRhKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGRlbGV0ZShkYXRhOiBDb25maWd1cmF0aW9uLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCB5ZXQhJyk7XG4gIH1cblxuICBsaXN0ZW5DaGFuZ2VzKGlkOiBudW1iZXIsIG9wdGlvbnM/OiBhbnkpOiBPYnNlcnZhYmxlPENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gbmV3IFN1YmplY3QoKTsgLy8gVE9ET1xuICB9XG5cbiAgZ2V0IG9wdGlvbkRlZnMoKTogRm9ybUZpZWxkRGVmaW5pdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uRGVmcztcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2QgLS0gKi9cblxuICBwcml2YXRlIGFzeW5jIGxvYWRPclJlc3RvcmVMb2NhbGx5KCk6IFByb21pc2U8Q29uZmlndXJhdGlvbj4ge1xuICAgIGxldCBkYXRhO1xuICAgIGxldCB3YXNKdXN0TG9hZGVkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLmxvYWREZWZhdWx0KHsgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknIH0pO1xuICAgICAgd2FzSnVzdExvYWRlZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBMb2csIHRoZW4gY29udGludWVcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVyciwgZXJyKTtcbiAgICB9XG5cbiAgICAvLyBTYXZlIGl0IGludG8gbG9jYWwgc3RvcmFnZSwgZm9yIG5leHQgc3RhcnR1cFxuICAgIGlmIChkYXRhKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3RvcmVMb2NhbGx5KGRhdGEpLCAxMDAwKTtcbiAgICB9XG5cbiAgICAvLyBJZiBub3QgbG9hZGVkIHJlbW90ZWx5OiB0cnkgdG8gcmVzdG9yZSBpdFxuICAgIGVsc2Uge1xuICAgICAgZGF0YSA9IGF3YWl0IHRoaXMucmVzdG9yZUxvY2FsbHkoKTtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgbGFiZWwgaGFzIGJlZW4gZmlsbGVkXG4gICAgZGF0YS5sYWJlbCA9IGRhdGEubGFiZWwgfHwgdGhpcy5lbnZpcm9ubWVudC5uYW1lO1xuXG4gICAgLy8gUmVzZXQgbmFtZSAoaWYgc2FtZSBhcyBsYWJlbClcbiAgICBkYXRhLm5hbWUgPSAoZGF0YS5uYW1lICE9PSBkYXRhLmxhYmVsKSA/IGRhdGEubmFtZSA6IHVuZGVmaW5lZDtcblxuICAgIC8vIENoZWNrIGNvbXBhdGlibGUgdmVyc2lvblxuICAgIGlmICh3YXNKdXN0TG9hZGVkKSB7XG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCk6IFByb21pc2U8Q29uZmlndXJhdGlvbj4ge1xuICAgIGxldCBkYXRhOiBDb25maWd1cmF0aW9uO1xuXG4gICAgLy8gVHJ5IHRvIGxvYWQgZnJvbSBsb2NhbCBzdG9yYWdlXG4gICAgY29uc3QgdmFsdWU6IGFueSA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoQ09ORklHVVJBVElPTl9TVE9SQUdFX0tFWSk7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbY29uZmlnXSBSZXN0b3JpbmcgY29uZmlndXJhdGlvbiBmcm9tIGxvY2FsIHN0b3JhZ2UuLi4nKTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZGF0YSA9IENvbmZpZ3VyYXRpb24uZnJvbU9iamVjdChKU09OLnBhcnNlKHZhbHVlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBwYXJzZSBjb25maWcgZm91bmQgaW4gbG9jYWwgc3RvcmFnZTogJHtlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyfWAsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZGF0YSA9IENvbmZpZ3VyYXRpb24uZnJvbU9iamVjdCh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tjb25maWddIFJlc3RvcmluZyBjb25maWd1cmF0aW9uIFtPS10nKTtcbiAgICB9XG5cbiAgICAvLyBPciBsb2FkIGRlZmF1bHQgdmFsdWUsIGZyb20gdGhlIGVudmlyb25tZW50XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbY29uZmlnXSBObyBjb25maWd1cmF0aW9uIGZvdW5kLiBVc2luZyBlbnZpcm9ubWVudC4uLicpO1xuICAgICAgZGF0YSA9IENvbmZpZ3VyYXRpb24uZnJvbU9iamVjdCh0aGlzLmVudmlyb25tZW50IGFzIGFueSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN0b3JlTG9jYWxseShkYXRhPzogQ29uZmlndXJhdGlvbikge1xuICAgIC8vIE5vdGhpbmcgdG8gc3RvcmUgOiByZXNldFxuICAgIGlmICghZGF0YSkge1xuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnJlbW92ZShDT05GSUdVUkFUSU9OX1NUT1JBR0VfS0VZKTtcbiAgICB9XG4gICAgLy8gQ29uZmlnIGV4aXN0czogc3RvcmUgaXQgaW4gdGhlIGxvY2FsIHN0b3JhZ2VcbiAgICBlbHNlIHtcbiAgICAgIGxldCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuXG4gICAgICAvLyBDb252ZXJ0IGltYWdlcywgZm9yIG9mZmxpbmUgdXNhZ2VcbiAgICAgIGlmICh0aGlzLm5ldHdvcmsub25saW5lICYmIGlzTW9iaWxlKHdpbmRvdykpIHtcbiAgICAgICAgY29uc3Qgam9icyA9IFtdO1xuXG4gICAgICAgIC8vIERvd25sb2FkIGxvZ29zXG4gICAgICAgIGlmIChkYXRhLmxhcmdlTG9nbyAmJiBkYXRhLmxhcmdlTG9nby5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgICBqb2JzLnB1c2godGhpcy5maWxlLmdldEltYWdlKGRhdGEubGFyZ2VMb2dvKVxuICAgICAgICAgICAgLnRoZW4oaW1nVXJsID0+IGRhdGEubGFyZ2VMb2dvID0gaW1nVXJsKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuc21hbGxMb2dvICYmIGRhdGEuc21hbGxMb2dvLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgIGpvYnMucHVzaCh0aGlzLmZpbGUuZ2V0SW1hZ2UoZGF0YS5zbWFsbExvZ28pXG4gICAgICAgICAgICAudGhlbihpbWdVcmwgPT4gZGF0YS5zbWFsbExvZ28gPSBpbWdVcmwpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJhY2tncm91bmQgaW1hZ2VzXG4gICAgICAgIGlmIChpc05vdEVtcHR5QXJyYXkoZGF0YS5iYWNrZ3JvdW5kSW1hZ2VzKSkge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBtYXhXaWR0aDogdGhpcy5wbGF0Zm9ybS53aWR0aCgpLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiB0aGlzLnBsYXRmb3JtLmhlaWdodCgpXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIC8vIENvbnZlcnQgdGhlIEZJUlNUIGltYWdlIGZvdW5kXG4gICAgICAgICAgLy8gV0FSTjogaXQncyBOT1QgbmVjZXNzYXJ5IHRvIGNvbnZlcnQgQUwgaW1hZ2UsIGJ1dCBvbmx5IG9uZSwgZm9yIHNtYWxsZXIgbWVtb3J5IGZvb3RwcmludFxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YS5iYWNrZ3JvdW5kSW1hZ2VzLmZpbmRJbmRleCgoaW1nKSA9PiBpbWcgJiYgaW1nLnN0YXJ0c1dpdGgoJ2h0dHAnKSk7XG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgZGF0YS5iYWNrZ3JvdW5kSW1hZ2VzID0gZGF0YS5iYWNrZ3JvdW5kSW1hZ2VzLnNsaWNlKCk7IC8vIENvcHlcbiAgICAgICAgICAgIGpvYnMucHVzaChcbiAgICAgICAgICAgICAgdGhpcy5maWxlLmdldEltYWdlKGRhdGEuYmFja2dyb3VuZEltYWdlc1tpbmRleF0sIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgLnRoZW4oZGF0YVVybCA9PiBkYXRhLmJhY2tncm91bmRJbWFnZXNbaW5kZXhdID0gZGF0YVVybCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFydG5lcnNcbiAgICAgICAgaWYgKGlzTm90RW1wdHlBcnJheShkYXRhLnBhcnRuZXJzKSkge1xuICAgICAgICAgIGRhdGEucGFydG5lcnMuZm9yRWFjaCgoZGVwLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRlcCAmJiBkZXAubG9nbyAmJiBkZXAubG9nby5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgICAgICAgam9icy5wdXNoKHRoaXMuZmlsZS5nZXRJbWFnZShkZXAubG9nbywge1xuICAgICAgICAgICAgICAgIG1heEhlaWdodDogNTAvKnNlZSBob21lIHBhZ2UgQ1NTICovXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC50aGVuKGltZyA9PiBkZXAubG9nbyA9IGltZylcbiAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGVwLmxvZ287XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqb2JzLmxlbmd0aCkge1xuICAgICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2NvbmZpZ10gRmV0Y2hpbmcgJHtqb2JzLmxlbmd0aH0gaW1hZ2VzLi4uYCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGpvYnMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbY29uZmlnXSBGZXRjaGluZyAke2pvYnMubGVuZ3RofSBpbWFnZXMgW09LXSBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgW2NvbmZpZ10gRmFpbGVkIHRvIGZldGNoIGltYWdlKHMpOiAke2VyciAmJiBlcnIubWVzc2FnZSB8fCBlcnJ9YCwgZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2F2aW5nIGNvbmZpZyB0byBzdG9yYWdlXG4gICAgICB7XG4gICAgICAgIG5vdyA9IHRoaXMuX2RlYnVnICYmIERhdGUubm93KCk7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gU2F2aW5nIGNvbmZpZyBpbnRvIGxvY2FsIHN0b3JhZ2UuLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldChDT05GSUdVUkFUSU9OX1NUT1JBR0VfS0VZLCBkYXRhLmFzT2JqZWN0KCkpO1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtjb25maWddIFNhdmluZyBjb25maWcgaW50byBsb2NhbCBzdG9yYWdlIFtPS10gaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNob3dUb2FzdChvcHRzOiBTaG93VG9hc3RPcHRpb25zKSB7XG4gICAgYXdhaXQgVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCBvcHRzKTtcbiAgfVxufVxuIl19
355
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHdEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUduRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRCxPQUFPLEVBQW9CLE1BQU0sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQWUsV0FBVyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7O0FBR2xELE1BQU0seUJBQXlCLEdBQUcsZUFBZSxDQUFDO0FBRWxEOzt5Q0FFeUM7QUFDekMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLE1BQU0sRUFBRSxHQUFHLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCVjtDQUNGLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBa0I7SUFDbkMsSUFBSSxF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Qyw4Q0FBOEMsQ0FBQyxDQUFDO2dCQUMvRSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLElBQUksQ0FBQyxNQUFNO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMscURBQXFELElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO2FBQzNHO1NBQ0Y7SUFDSCxDQUFDO0lBRVMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFzQjtRQUM5QyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hFLENBQUM7OzBHQTlUVSxhQUFhLHFQQXNCZCxXQUFXLGFBQ0Msa0JBQWtCOzhHQXZCN0IsYUFBYSxjQUhaLE1BQU07MkZBR1AsYUFBYTtrQkFKekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtvQkFDbEIsSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUM7aUJBQzNCOzswQkF1QkksTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ3FsIH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9tb2RlbC9jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgU3RvcmFnZSB9IGZyb20gJ0Bpb25pYy9zdG9yYWdlLWFuZ3VsYXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFcnJvckNvZGVzIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgR3JhcGhxbFNlcnZpY2UgfSBmcm9tICcuLi9ncmFwaHFsL2dyYXBocWwuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtRmllbGREZWZpbml0aW9uLCBGb3JtRmllbGREZWZpbml0aW9uTWFwIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRmlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvZmlsZS9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmV0d29ya1NlcnZpY2UgfSBmcm9tICcuL25ldHdvcmsuc2VydmljZSc7XG5pbXBvcnQgeyBDT1JFX0NPTkZJR19PUFRJT05TIH0gZnJvbSAnLi9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHsgUGxhdGZvcm0sIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFNob3dUb2FzdE9wdGlvbnMsIFRvYXN0cyB9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdC90b2FzdHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRW50aXR5U2VydmljZUxvYWRPcHRpb25zLCBJRW50aXR5U2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgQmFzZUdyYXBocWxTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlLWdyYXBocWwtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBJU3RhcnRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4vYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3BsYXRmb3Jtcyc7XG5pbXBvcnQgeyBCYXNlRW50aXR5R3JhcGhxbE11dGF0aW9ucyB9IGZyb20gJy4vYmFzZS1lbnRpdHktc2VydmljZS5jbGFzcyc7XG5cbmNvbnN0IENPTkZJR1VSQVRJT05fU1RPUkFHRV9LRVkgPSAnY29uZmlndXJhdGlvbic7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogR3JhcGhRTCBxdWVyaWVzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGNvbnN0IENvbmZpZ0ZyYWdtZW50cyA9IHtcbiAgY29uZmlnOiBncWxgXG4gICAgZnJhZ21lbnQgQ29uZmlnRnJhZ21lbnQgb24gQ29uZmlndXJhdGlvblZPIHtcbiAgICAgIGlkXG4gICAgICBsYWJlbFxuICAgICAgbmFtZVxuICAgICAgZGVzY3JpcHRpb25cbiAgICAgIGNvbW1lbnRzXG4gICAgICBwcm9wZXJ0aWVzXG4gICAgICBzbWFsbExvZ29cbiAgICAgIGxhcmdlTG9nb1xuICAgICAgYmFja2dyb3VuZEltYWdlc1xuICAgICAgcGFydG5lcnMge1xuICAgICAgICBpZFxuICAgICAgICBsYWJlbFxuICAgICAgICBuYW1lXG4gICAgICAgIGxvZ29cbiAgICAgICAgc2l0ZVVybFxuICAgICAgICBfX3R5cGVuYW1lXG4gICAgICB9XG4gICAgICB1cGRhdGVEYXRlXG4gICAgICBjcmVhdGlvbkRhdGVcbiAgICAgIHN0YXR1c0lkXG4gICAgICBfX3R5cGVuYW1lXG4gICAgfVxuICBgXG59O1xuXG5jb25zdCBDb25maWdRdWVyaWVzOiB7IGxvYWQ6IGFueSB9ID0ge1xuICBsb2FkOiBncWxgcXVlcnkgQ29uZmlndXJhdGlvbiB7XG4gICAgICAgIGRhdGE6IGNvbmZpZ3VyYXRpb24ge1xuICAgICAgICAgICAgLi4uQ29uZmlnRnJhZ21lbnRcbiAgICAgICAgfVxuICAgIH1cbiAgICAke0NvbmZpZ0ZyYWdtZW50cy5jb25maWd9YFxufTtcblxuLy8gU2F2ZSAoY3JlYXRlIG9yIHVwZGF0ZSkgYWNjb3VudCBtdXRhdGlvblxuY29uc3QgQ29uZmlnTXV0YXRpb25zOiBCYXNlRW50aXR5R3JhcGhxbE11dGF0aW9ucyA9IHtcbiAgc2F2ZTogZ3FsYG11dGF0aW9uIFNhdmVDb25maWd1cmF0aW9uKCRkYXRhOiBDb25maWd1cmF0aW9uVk9JbnB1dCkge1xuICAgICAgZGF0YTogc2F2ZUNvbmZpZ3VyYXRpb24oY29uZmlnOiAkZGF0YSl7XG4gICAgICAgICAgLi4uQ29uZmlnRnJhZ21lbnRcbiAgICAgIH1cbiAgICB9XG4gICAgJHtDb25maWdGcmFnbWVudHMuY29uZmlnfWBcbn07XG5cbmNvbnN0IENsZWFyQ2FjaGU6IGFueSA9IGdxbGBcbiAgcXVlcnkgQ2xlYXJDYWNoZSgkbmFtZTogU3RyaW5nKSB7XG4gICAgY2xlYXJDYWNoZShuYW1lOiAkbmFtZSlcbiAgfVxuYDtcblxuY29uc3QgQ2FjaGVTdGF0aXN0aWNzOiBhbnkgPSBncWxgXG4gIHF1ZXJ5IENhY2hlU3RhdGlzdGljcyB7XG4gICAgY2FjaGVTdGF0aXN0aWNzXG4gIH1cbmA7XG5cbmV4cG9ydCBjb25zdCBBUFBfQ09ORklHX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48Rm9ybUZpZWxkRGVmaW5pdGlvbk1hcD4oJ2RlZmF1bHRPcHRpb25zJyk7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBkZXBzOiBbQVBQX0NPTkZJR19PUFRJT05TXVxufSlcbmV4cG9ydCBjbGFzcyBDb25maWdTZXJ2aWNlXG4gIGV4dGVuZHMgQmFzZUdyYXBocWxTZXJ2aWNlPENvbmZpZ3VyYXRpb24sIGFueSwgbnVtYmVyLCBDb25maWd1cmF0aW9uPlxuICBpbXBsZW1lbnRzIElFbnRpdHlTZXJ2aWNlPENvbmZpZ3VyYXRpb24+LCBJU3RhcnRhYmxlU2VydmljZTxDb25maWd1cmF0aW9uPiB7XG5cbiAgcHJpdmF0ZSBfb3B0aW9uRGVmczogRm9ybUZpZWxkRGVmaW5pdGlvbltdO1xuICBwcml2YXRlICRkYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb25maWd1cmF0aW9uPihudWxsKTtcblxuICBnZXQgY29uZmlnKCk6IE9ic2VydmFibGU8Q29uZmlndXJhdGlvbj4ge1xuICAgIC8vIElmIGZpcnN0IGNhbGw6IHN0YXJ0IGxvYWRpbmdcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgdGhpcy5zdGFydCgpO1xuICAgIHJldHVybiB0aGlzLiRkYXRhLnBpcGUoZmlsdGVyKGlzTm90TmlsKSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHByb3RlY3RlZCBncmFwaHFsOiBHcmFwaHFsU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBwcm90ZWN0ZWQgbmV0d29yazogTmV0d29ya1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGZpbGU6IEZpbGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9DT05GSUdfT1BUSU9OUykgZGVmYXVsdE9wdGlvbnNNYXA6IEZvcm1GaWVsZERlZmluaXRpb25NYXBcbiAgKSB7XG4gICAgc3VwZXIoZ3JhcGhxbCwgZW52aXJvbm1lbnQpO1xuXG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tjb25maWddIENyZWF0aW5nIHNlcnZpY2UnKTtcblxuICAgIHRoaXMuX29wdGlvbkRlZnMgPSBPYmplY3QudmFsdWVzKHsuLi5DT1JFX0NPTkZJR19PUFRJT05TLCAuLi5kZWZhdWx0T3B0aW9uc01hcH0pO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KCk6IFByb21pc2U8Q29uZmlndXJhdGlvbj4ge1xuICAgIGNvbnNvbGUuaW5mbygnW2NvbmZpZ10gU3RhcnRpbmcgY29uZmlndXJhdGlvbi4uLicpO1xuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubG9hZE9yUmVzdG9yZUxvY2FsbHkoKTtcbiAgICB0aGlzLiRkYXRhLm5leHQoZGF0YSk7XG5cbiAgICAvLyBSZXN0YXJ0IGlmIGdyYXBocWwgc2VydmljZSByZXN0YXJ0XG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuZ3JhcGhxbC5zdG9wU3ViamVjdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZXN0YXJ0KCkpXG4gICAgKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbG9hZERlZmF1bHQoXG4gICAgb3B0cz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyk6IFByb21pc2U8Q29uZmlndXJhdGlvbj4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gTG9hZGluZyBQb2QgY29uZmlndXJhdGlvbi4uLicpO1xuXG4gICAgY29uc3QgcXVlcnkgPSBvcHRzICYmIG9wdHMucXVlcnkgfHwgQ29uZmlnUXVlcmllcy5sb2FkO1xuICAgIGNvbnN0IHZhcmlhYmxlcyA9IG9wdHMgJiYgb3B0cy52YXJpYWJsZXMgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTx7IGRhdGE6IGFueSB9Pih7XG4gICAgICBxdWVyeSxcbiAgICAgIHZhcmlhYmxlcyxcbiAgICAgIGVycm9yOiB7Y29kZTogRXJyb3JDb2Rlcy5MT0FEX0NPTkZJR19FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLkxPQURfQ09ORklHX0VSUk9SJ30sXG4gICAgICBmZXRjaFBvbGljeTogb3B0cyAmJiBvcHRzLmZldGNoUG9saWN5IHx8IHVuZGVmaW5lZC8qZGVmYXVsdCovXG4gICAgfSk7XG5cbiAgICBjb25zdCBkYXRhID0gcmVzICYmIHJlcy5kYXRhID8gQ29uZmlndXJhdGlvbi5mcm9tT2JqZWN0KHJlcy5kYXRhKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zb2xlLmluZm8oYFtjb25maWddIFBvZCBjb25maWd1cmF0aW9uIGxvYWRlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXM6YCwgZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsb2FkKFxuICAgIGlkOiBudW1iZXIsXG4gICAgb3B0cz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyAmIHsgcXVlcnk/OiBhbnk7IHZhcmlhYmxlcz86IGFueSB9KTogUHJvbWlzZTxDb25maWd1cmF0aW9uPiB7XG4gICAgY29uc29sZS53YXJuKCdbY29uZmlnXSBJbnZhbGlkIGNhbGwgb2YgY29uZmlnU2VydmljZS5sb2FkKGlkKS4gUGxlYXNlIHVzZSBsb2FkRGVmYXVsdCgpIGluc3RlYWQnKTtcblxuICAgIHJldHVybiB0aGlzLmxvYWREZWZhdWx0KG9wdHMpO1xuICB9XG5cbiAgY2FuVXNlcldyaXRlKGRhdGE6IENvbmZpZ3VyYXRpb24sIG9wdHM/OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvdW50U2VydmljZS5pc0FkbWluKCk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBhIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZ1xuICAgKi9cbiAgYXN5bmMgc2F2ZShjb25maWc6IENvbmZpZ3VyYXRpb24pOiBQcm9taXNlPENvbmZpZ3VyYXRpb24+IHtcblxuICAgIGNvbnNvbGUuZGVidWcoJ1tjb25maWddIFNhdmluZyBQb2QgY29uZmlndXJhdGlvbi4uLicsIGNvbmZpZyk7XG5cbiAgICBjb25zdCBqc29uID0gY29uZmlnLmFzT2JqZWN0KCk7XG5cbiAgICAvLyBFeGVjdXRlIG11dGF0aW9uXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7IGRhdGE6IGFueSB9Pih7XG4gICAgICBtdXRhdGlvbjogQ29uZmlnTXV0YXRpb25zLnNhdmUsXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgZGF0YToganNvblxuICAgICAgfSxcbiAgICAgIGVycm9yOiB7XG4gICAgICAgIGNvZGU6IEVycm9yQ29kZXMuU0FWRV9DT05GSUdfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdFUlJPUi5TQVZFX0NPTkZJR19FUlJPUidcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNhdmVkQ29uZmlnID0gcmVzICYmIHJlcy5kYXRhO1xuXG4gICAgLy8gQ29weSB1cGRhdGUgcHJvcGVydGllc1xuICAgIGNvbmZpZy5pZCA9IHNhdmVkQ29uZmlnICYmIHNhdmVkQ29uZmlnLmlkIHx8IGNvbmZpZy5pZDtcbiAgICBjb25maWcudXBkYXRlRGF0ZSA9IHNhdmVkQ29uZmlnICYmIHNhdmVkQ29uZmlnLnVwZGF0ZURhdGUgfHwgY29uZmlnLnVwZGF0ZURhdGU7XG5cbiAgICBjb25zb2xlLmRlYnVnKCdbY29uZmlnXSBQb2QgY29uZmlndXJhdGlvbiBzYXZlZCEnKTtcblxuICAgIGNvbnN0IHJlbG9hZGVkQ29uZmlnID0gYXdhaXQgdGhpcy5sb2FkRGVmYXVsdCh7ZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknfSk7XG5cbiAgICAvLyBJZiB0aGlzIGlzIHRoZSBkZWZhdWx0IGNvbmZpZ1xuICAgIGNvbnN0IGRlZmF1bHRDb25maWcgPSB0aGlzLiRkYXRhLnZhbHVlO1xuICAgIGlmIChpc05vdE5pbChkZWZhdWx0Q29uZmlnKSAmJiByZWxvYWRlZENvbmZpZy5sYWJlbCA9PT0gZGVmYXVsdENvbmZpZy5sYWJlbCkge1xuXG4gICAgICAvLyBFbWl0IHVwZGF0ZSBldmVudCB3aGVuIGlzIGRlZmF1bHQgY29uZmlnXG4gICAgICB0aGlzLiRkYXRhLm5leHQocmVsb2FkZWRDb25maWcpO1xuICAgIH1cblxuICAgIHJldHVybiByZWxvYWRlZENvbmZpZztcbiAgfVxuXG4gIGFzeW5jIGdldENhY2hlU3RhdGlzdGljcygpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zb2xlLmRlYnVnKCdbY29uZmlnXSBMb2FkaW5nIHNlcnZlciBjYWNoZSBzdGF0aXN0aWNzLi4uJyk7XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8eyBjYWNoZVN0YXRpc3RpY3M6IGFueSB9Pih7XG4gICAgICBxdWVyeTogQ2FjaGVTdGF0aXN0aWNzLFxuICAgICAgdmFyaWFibGVzOiBudWxsLFxuICAgICAgZXJyb3I6IHtjb2RlOiBFcnJvckNvZGVzLkxPQURfQ09ORklHX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuTE9BRF9DT05GSUdfRVJST1InfSxcbiAgICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5J1xuICAgIH0pO1xuXG4gICAgY29uc3QgZGF0YSA9IHJlcyAmJiByZXMuY2FjaGVTdGF0aXN0aWNzIHx8IHVuZGVmaW5lZDtcbiAgICBjb25zb2xlLmluZm8oYFtjb25maWddIFNlcnZlciBjYWNoZSBzdGF0aXN0aWNzIGxvYWRlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXM6YCwgZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBjbGVhckNhY2hlKG9wdHM/OiB7Y2FjaGVOYW1lPzogc3RyaW5nfSkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gQ2xlYXIgc2VydmVyIGNhY2hlLi4uJyk7XG5cbiAgICBjb25zdCB2YXJpYWJsZXMgPSBvcHRzICYmIG9wdHMuY2FjaGVOYW1lICYmIHtuYW1lOiBvcHRzLmNhY2hlTmFtZX0gfHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ncmFwaHFsLnF1ZXJ5PHsgY2xlYXJDYWNoZTogYm9vbGVhbiB9Pih7XG4gICAgICBxdWVyeTogQ2xlYXJDYWNoZSxcbiAgICAgIHZhcmlhYmxlcyxcbiAgICAgIGVycm9yOiB7Y29kZTogRXJyb3JDb2Rlcy5MT0FEX0NPTkZJR19FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLkxPQURfQ09ORklHX0VSUk9SJ30sXG4gICAgICBmZXRjaFBvbGljeTogJ25vLWNhY2hlJ1xuICAgIH0pO1xuXG4gICAgY29uc3QgZGF0YSA9IHJlcyAmJiByZXMuY2xlYXJDYWNoZSB8fCB1bmRlZmluZWQ7XG4gICAgY29uc29sZS5pbmZvKGBbY29uZmlnXSBDbGVhciBzZXJ2ZXIgY2FjaGUgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zOmAsIGRhdGEpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZGVsZXRlKGRhdGE6IENvbmZpZ3VyYXRpb24sIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkIHlldCEnKTtcbiAgfVxuXG4gIGxpc3RlbkNoYW5nZXMoaWQ6IG51bWJlciwgb3B0aW9ucz86IGFueSk6IE9ic2VydmFibGU8Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBuZXcgU3ViamVjdCgpOyAvLyBUT0RPXG4gIH1cblxuICBnZXQgb3B0aW9uRGVmcygpOiBGb3JtRmllbGREZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25EZWZzO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZCAtLSAqL1xuXG4gIHByaXZhdGUgYXN5bmMgbG9hZE9yUmVzdG9yZUxvY2FsbHkoKTogUHJvbWlzZTxDb25maWd1cmF0aW9uPiB7XG4gICAgbGV0IGRhdGE6IENvbmZpZ3VyYXRpb247XG4gICAgbGV0IHdhc0p1c3RMb2FkZWQgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgZGF0YSA9IGF3YWl0IHRoaXMubG9hZERlZmF1bHQoeyBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScgfSk7XG4gICAgICB3YXNKdXN0TG9hZGVkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIExvZywgdGhlbiBjb250aW51ZVxuICAgICAgY29uc29sZS5lcnJvcihlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyLCBlcnIpO1xuICAgIH1cblxuICAgIC8vIFNhdmUgaXQgaW50byBsb2NhbCBzdG9yYWdlLCBmb3IgbmV4dCBzdGFydHVwXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zdG9yZUxvY2FsbHkoZGF0YSksIDIwMDApO1xuICAgIH1cblxuICAgIC8vIElmIG5vdCBsb2FkZWQgcmVtb3RlbHk6IHRyeSB0byByZXN0b3JlIGl0XG4gICAgZWxzZSB7XG4gICAgICBkYXRhID0gYXdhaXQgdGhpcy5yZXN0b3JlTG9jYWxseSgpO1xuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSBsYWJlbCBoYXMgYmVlbiBmaWxsZWRcbiAgICBkYXRhLmxhYmVsID0gZGF0YS5sYWJlbCB8fCB0aGlzLmVudmlyb25tZW50Lm5hbWU7XG5cbiAgICAvLyBSZXNldCBuYW1lIChpZiBzYW1lIGFzIGxhYmVsKVxuICAgIGRhdGEubmFtZSA9IChkYXRhLm5hbWUgIT09IGRhdGEubGFiZWwpID8gZGF0YS5uYW1lIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gQ2hlY2sgY29tcGF0aWJsZSB2ZXJzaW9uXG4gICAgaWYgKHdhc0p1c3RMb2FkZWQpIHtcbiAgICAgIC8vIFRPRE9cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzdG9yZUxvY2FsbHkoKTogUHJvbWlzZTxDb25maWd1cmF0aW9uPiB7XG4gICAgbGV0IGRhdGE6IENvbmZpZ3VyYXRpb247XG5cbiAgICAvLyBUcnkgdG8gbG9hZCBmcm9tIGxvY2FsIHN0b3JhZ2VcbiAgICBjb25zdCB2YWx1ZTogYW55ID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldChDT05GSUdVUkFUSU9OX1NUT1JBR0VfS0VZKTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tjb25maWddIFJlc3RvcmluZyBjb25maWd1cmF0aW9uIGZyb20gbG9jYWwgc3RvcmFnZS4uLicpO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkYXRhID0gQ29uZmlndXJhdGlvbi5mcm9tT2JqZWN0KEpTT04ucGFyc2UodmFsdWUpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHBhcnNlIGNvbmZpZyBmb3VuZCBpbiBsb2NhbCBzdG9yYWdlOiAke2VyciAmJiBlcnIubWVzc2FnZSB8fCBlcnJ9YCwgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBkYXRhID0gQ29uZmlndXJhdGlvbi5mcm9tT2JqZWN0KHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gUmVzdG9yaW5nIGNvbmZpZ3VyYXRpb24gW09LXScpO1xuICAgIH1cblxuICAgIC8vIE9yIGxvYWQgZGVmYXVsdCB2YWx1ZSwgZnJvbSB0aGUgZW52aXJvbm1lbnRcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tjb25maWddIE5vIGNvbmZpZ3VyYXRpb24gZm91bmQuIFVzaW5nIGVudmlyb25tZW50Li4uJyk7XG4gICAgICBkYXRhID0gQ29uZmlndXJhdGlvbi5mcm9tT2JqZWN0KHRoaXMuZW52aXJvbm1lbnQgYXMgYW55KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3RvcmVMb2NhbGx5KGRhdGE/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgLy8gTm90aGluZyB0byBzdG9yZSA6IHJlc2V0XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2UucmVtb3ZlKENPTkZJR1VSQVRJT05fU1RPUkFHRV9LRVkpO1xuICAgIH1cbiAgICAvLyBDb25maWcgZXhpc3RzOiBzdG9yZSBpdCBpbiB0aGUgbG9jYWwgc3RvcmFnZVxuICAgIGVsc2Uge1xuICAgICAgbGV0IG5vdyA9IHRoaXMuX2RlYnVnICYmIERhdGUubm93KCk7XG5cbiAgICAgIC8vIENvbnZlcnQgaW1hZ2VzLCBmb3Igb2ZmbGluZSB1c2FnZVxuICAgICAgaWYgKHRoaXMubmV0d29yay5vbmxpbmUgJiYgaXNNb2JpbGUod2luZG93KSkge1xuICAgICAgICBjb25zdCBqb2JzID0gW107XG5cbiAgICAgICAgLy8gRG93bmxvYWQgbG9nb3NcbiAgICAgICAgaWYgKGRhdGEubGFyZ2VMb2dvICYmIGRhdGEubGFyZ2VMb2dvLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgIGpvYnMucHVzaCh0aGlzLmZpbGUuZ2V0SW1hZ2UoZGF0YS5sYXJnZUxvZ28pXG4gICAgICAgICAgICAudGhlbihpbWdVcmwgPT4gZGF0YS5sYXJnZUxvZ28gPSBpbWdVcmwpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5zbWFsbExvZ28gJiYgZGF0YS5zbWFsbExvZ28uc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgICAgam9icy5wdXNoKHRoaXMuZmlsZS5nZXRJbWFnZShkYXRhLnNtYWxsTG9nbylcbiAgICAgICAgICAgIC50aGVuKGltZ1VybCA9PiBkYXRhLnNtYWxsTG9nbyA9IGltZ1VybCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmFja2dyb3VuZCBpbWFnZXNcbiAgICAgICAgaWYgKGlzTm90RW1wdHlBcnJheShkYXRhLmJhY2tncm91bmRJbWFnZXMpKSB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG1heFdpZHRoOiB0aGlzLnBsYXRmb3JtLndpZHRoKCksXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IHRoaXMucGxhdGZvcm0uaGVpZ2h0KClcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gQ29udmVydCB0aGUgRklSU1QgaW1hZ2UgZm91bmRcbiAgICAgICAgICAvLyBXQVJOOiBpdCdzIE5PVCBuZWNlc3NhcnkgdG8gY29udmVydCBBTCBpbWFnZSwgYnV0IG9ubHkgb25lLCBmb3Igc21hbGxlciBtZW1vcnkgZm9vdHByaW50XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhLmJhY2tncm91bmRJbWFnZXMuZmluZEluZGV4KChpbWcpID0+IGltZyAmJiBpbWcuc3RhcnRzV2l0aCgnaHR0cCcpKTtcbiAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBkYXRhLmJhY2tncm91bmRJbWFnZXMgPSBkYXRhLmJhY2tncm91bmRJbWFnZXMuc2xpY2UoKTsgLy8gQ29weVxuICAgICAgICAgICAgam9icy5wdXNoKFxuICAgICAgICAgICAgICB0aGlzLmZpbGUuZ2V0SW1hZ2UoZGF0YS5iYWNrZ3JvdW5kSW1hZ2VzW2luZGV4XSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICAudGhlbihkYXRhVXJsID0+IGRhdGEuYmFja2dyb3VuZEltYWdlc1tpbmRleF0gPSBkYXRhVXJsKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQYXJ0bmVyc1xuICAgICAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGRhdGEucGFydG5lcnMpKSB7XG4gICAgICAgICAgZGF0YS5wYXJ0bmVycy5mb3JFYWNoKChkZXAsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoZGVwICYmIGRlcC5sb2dvICYmIGRlcC5sb2dvLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgICAgICBqb2JzLnB1c2godGhpcy5maWxlLmdldEltYWdlKGRlcC5sb2dvLCB7XG4gICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiA1MC8qc2VlIGhvbWUgcGFnZSBDU1MgKi9cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLnRoZW4oaW1nID0+IGRlcC5sb2dvID0gaW1nKVxuICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBkZXAubG9nbztcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGpvYnMubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbY29uZmlnXSBGZXRjaGluZyAke2pvYnMubGVuZ3RofSBpbWFnZXMuLi5gKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoam9icyk7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtjb25maWddIEZldGNoaW5nICR7am9icy5sZW5ndGh9IGltYWdlcyBbT0tdIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBbY29uZmlnXSBGYWlsZWQgdG8gZmV0Y2ggaW1hZ2Uocyk6ICR7ZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycn1gLCBlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTYXZpbmcgY29uZmlnIHRvIHN0b3JhZ2VcbiAgICAgIHtcbiAgICAgICAgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbY29uZmlnXSBTYXZpbmcgY29uZmlnIGludG8gbG9jYWwgc3RvcmFnZS4uLicpO1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KENPTkZJR1VSQVRJT05fU1RPUkFHRV9LRVksIGRhdGEuYXNPYmplY3QoKSk7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2NvbmZpZ10gU2F2aW5nIGNvbmZpZyBpbnRvIGxvY2FsIHN0b3JhZ2UgW09LXSBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2hvd1RvYXN0KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpIHtcbiAgICBhd2FpdCBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG59XG4iXX0=
@@ -1,12 +1,8 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { Base58 } from './base58';
3
2
  import { scryptEncode } from '@polkadot/util-crypto/scrypt/encode';
4
- import { cryptoWaitReady, ed25519PairFromSeed, ed25519Sign, ed25519Verify } from '@polkadot/util-crypto';
5
- import { sha512 } from '@noble/hashes/sha512';
6
- import { sha256 } from '@noble/hashes/sha256';
7
- import { utils } from '@noble/ed25519';
3
+ import { base58Decode, base64Decode, base64Encode, cryptoWaitReady, ed25519PairFromSeed, ed25519Sign, ed25519Verify, sha256AsU8a, sha512AsU8a } from '@polkadot/util-crypto';
8
4
  import { bytesToHex as toHex } from '@noble/hashes/utils';
9
- import { decodeUTF8, decodeBase64, encodeBase64 } from 'tweetnacl-util';
5
+ import { stringToU8a } from '@polkadot/util';
10
6
  import * as i0 from "@angular/core";
11
7
  export const ED25519_SEED_LENGTH = 32; // Length of a ED25519 seed
12
8
  export const SCRYPT_PARAMS = {
@@ -56,9 +52,8 @@ export class CryptoService {
56
52
  static async scryptKeypair(salt, password, scryptParams) {
57
53
  if (!this.started)
58
54
  await this.ready();
59
- const passwordU8a = decodeUTF8(password);
60
- const saltU8a = decodeUTF8(salt);
61
- const result = scryptEncode(passwordU8a, saltU8a, scryptParams || SCRYPT_PARAMS.DEFAULT);
55
+ const saltU8a = stringToU8a(salt);
56
+ const result = scryptEncode(password, saltU8a, scryptParams || SCRYPT_PARAMS.DEFAULT);
62
57
  const seed = result.password.slice(0, ED25519_SEED_LENGTH);
63
58
  return ed25519PairFromSeed(seed);
64
59
  }
@@ -68,9 +63,9 @@ export class CryptoService {
68
63
  static async sign(message, keypair) {
69
64
  if (!this.started)
70
65
  await this.ready();
71
- const m = decodeUTF8(message);
66
+ const m = stringToU8a(message);
72
67
  const sig = ed25519Sign(m, keypair);
73
- return encodeBase64(sig);
68
+ return base64Encode(sig);
74
69
  }
75
70
  /**
76
71
  * Sign a message, from a key pair
@@ -78,30 +73,28 @@ export class CryptoService {
78
73
  static async verify(message, signature, publicKey) {
79
74
  if (!this.started)
80
75
  await this.ready();
81
- const m = decodeUTF8(message);
82
- const sig = decodeBase64(signature);
83
- const pub = Base58.decode(publicKey);
76
+ const m = stringToU8a(message);
77
+ const sig = base64Decode(signature);
78
+ const pub = base58Decode(publicKey);
84
79
  return ed25519Verify(m, sig, pub);
85
80
  }
86
81
  /**
87
82
  * Hash (using SHA256) a message, as Hex
88
83
  */
89
84
  static sha256(message) {
90
- const m = decodeUTF8(message);
91
- const bytes = sha256(utils.concatBytes(m));
85
+ const bytes = sha256AsU8a(message);
92
86
  return toHex(bytes);
93
87
  }
94
88
  /**
95
89
  * Hash (using SHA512) a message, as Hex
96
90
  */
97
91
  static sha512(message) {
98
- const m = decodeUTF8(message);
99
- const bytes = sha512(utils.concatBytes(m));
92
+ const bytes = sha512AsU8a(message);
100
93
  return toHex(bytes);
101
94
  }
102
95
  static encodeBase64(message) {
103
- const m = decodeUTF8(message);
104
- return encodeBase64(m);
96
+ const m = stringToU8a(message);
97
+ return base64Encode(m);
105
98
  }
106
99
  }
107
100
  CryptoService._ready = false;
@@ -111,4 +104,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
111
104
  type: Injectable,
112
105
  args: [{ providedIn: 'root' }]
113
106
  }] });
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvY3J5cHRvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRWhDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUVqRSxPQUFPLEVBQUMsZUFBZSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUMsVUFBVSxJQUFJLEtBQUssRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXhELE9BQU8sRUFBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDOztBQUV0RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUMsQ0FBQywyQkFBMkI7QUFFbEUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHO0lBQzNCLE1BQU0sRUFBVTtRQUNkLENBQUMsRUFBRSxJQUFJO1FBQ1AsQ0FBQyxFQUFFLENBQUM7UUFDSixDQUFDLEVBQUUsQ0FBQztLQUNMO0lBQ0QsT0FBTyxFQUFVO1FBQ2YsQ0FBQyxFQUFFLElBQUk7UUFDUCxDQUFDLEVBQUUsRUFBRTtRQUNMLENBQUMsRUFBRSxDQUFDO0tBQ0w7SUFDRCxNQUFNLEVBQVU7UUFDZCxDQUFDLEVBQUUsS0FBSztRQUNSLENBQUMsRUFBRSxFQUFFO1FBQ0wsQ0FBQyxFQUFFLENBQUM7S0FDTDtJQUNELE9BQU8sRUFBVTtRQUNmLENBQUMsRUFBRSxLQUFLO1FBQ1IsQ0FBQyxFQUFFLEVBQUU7UUFDTCxDQUFDLEVBQUUsQ0FBQztLQUNMO0lBQ0QsT0FBTyxFQUFVO1FBQ2YsQ0FBQyxFQUFFLE1BQU07UUFDVCxDQUFDLEVBQUUsRUFBRTtRQUNMLENBQUMsRUFBRSxDQUFDO0tBQ0w7Q0FDRixDQUFDO0FBTUYsTUFBTSxPQUFPLGFBQWE7SUFJaEIsTUFBTSxLQUFLLE9BQU87UUFDeEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFTyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUs7UUFDeEIsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sQ0FBQyxLQUFLO1FBRTlCLE1BQU0sZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQVksRUFBRSxRQUFnQixFQUFFLFlBQXFCO1FBQzlFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsWUFBWSxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6RixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUMzRCxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQWUsRUFBRSxPQUFnQjtRQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUV0QyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUIsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwQyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFlLEVBQUUsU0FBaUIsRUFBRSxTQUFpQjtRQUN2RSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUV0QyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUIsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsT0FBTyxhQUFhLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQWU7UUFDM0IsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBZSxDQUFDO1FBQzVDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFlO1FBQzNCLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQWU7UUFDakMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7O0FBekVjLG9CQUFNLEdBQUcsS0FBTSxDQUFBOzBHQUZuQixhQUFhOzhHQUFiLGFBQWEsY0FERCxNQUFNOzJGQUNsQixhQUFhO2tCQUR6QixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Jhc2U1OH0gZnJvbSAnLi9iYXNlNTgnO1xuXG5pbXBvcnQge3NjcnlwdEVuY29kZX0gZnJvbSAnQHBvbGthZG90L3V0aWwtY3J5cHRvL3NjcnlwdC9lbmNvZGUnO1xuaW1wb3J0IHtQYXJhbXN9IGZyb20gJ0Bwb2xrYWRvdC91dGlsLWNyeXB0by9zY3J5cHQvdHlwZXMnO1xuaW1wb3J0IHtjcnlwdG9XYWl0UmVhZHksIGVkMjU1MTlQYWlyRnJvbVNlZWQsIGVkMjU1MTlTaWduLCBlZDI1NTE5VmVyaWZ5fSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuXG5pbXBvcnQge3NoYTUxMn0gZnJvbSAnQG5vYmxlL2hhc2hlcy9zaGE1MTInO1xuaW1wb3J0IHtzaGEyNTZ9IGZyb20gJ0Bub2JsZS9oYXNoZXMvc2hhMjU2JztcbmltcG9ydCB7dXRpbHN9IGZyb20gJ0Bub2JsZS9lZDI1NTE5JztcblxuaW1wb3J0IHtieXRlc1RvSGV4IGFzIHRvSGV4fSBmcm9tICdAbm9ibGUvaGFzaGVzL3V0aWxzJztcbmltcG9ydCB7S2V5cGFpcn0gZnJvbSAnQHBvbGthZG90L3V0aWwtY3J5cHRvL3R5cGVzJztcbmltcG9ydCB7ZGVjb2RlVVRGOCwgZGVjb2RlQmFzZTY0LCBlbmNvZGVCYXNlNjR9IGZyb20gJ3R3ZWV0bmFjbC11dGlsJztcblxuZXhwb3J0IGNvbnN0IEVEMjU1MTlfU0VFRF9MRU5HVEggPSAzMjsgLy8gTGVuZ3RoIG9mIGEgRUQyNTUxOSBzZWVkXG5cbmV4cG9ydCBjb25zdCBTQ1JZUFRfUEFSQU1TID0ge1xuICBTSU1QTEU6IDxQYXJhbXM+e1xuICAgIE46IDIwNDgsXG4gICAgcjogOCxcbiAgICBwOiAxXG4gIH0sXG4gIERFRkFVTFQ6IDxQYXJhbXM+e1xuICAgIE46IDQwOTYsXG4gICAgcjogMTYsXG4gICAgcDogMVxuICB9LFxuICBTRUNVUkU6IDxQYXJhbXM+e1xuICAgIE46IDE2Mzg0LFxuICAgIHI6IDMyLFxuICAgIHA6IDJcbiAgfSxcbiAgSEFSREVTVDogPFBhcmFtcz57XG4gICAgTjogNjU1MzYsXG4gICAgcjogMzIsXG4gICAgcDogNFxuICB9LFxuICBFWFRSRU1FOiA8UGFyYW1zPntcbiAgICBOOiAyNjIxNDQsXG4gICAgcjogNjQsXG4gICAgcDogOFxuICB9XG59O1xuXG5cbmV4cG9ydCB7S2V5cGFpcn07XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIENyeXB0b1NlcnZpY2Uge1xuXG4gIHByaXZhdGUgc3RhdGljIF9yZWFkeSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgc3RhdGljIGdldCBzdGFydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkeTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHJlYWR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9yZWFkeSkgcmV0dXJuOyAvLyBPS1xuXG4gICAgYXdhaXQgY3J5cHRvV2FpdFJlYWR5KCk7XG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgc2lnbiBrZXlwYWlyLCB1c2luZyBzY3J5cHQsIGZyb20gYSBzYWx0IGFuZCBhIHBhc3N3b3JkXG4gICAqXG4gICAqIEBwYXJhbSBzYWx0XG4gICAqIEBwYXJhbSBwYXNzd29yZFxuICAgKiBAcGFyYW0gc2NyeXB0UGFyYW1zXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgc2NyeXB0S2V5cGFpcihzYWx0OiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIHNjcnlwdFBhcmFtcz86IFBhcmFtcyk6IFByb21pc2U8S2V5cGFpcj4ge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgY29uc3QgcGFzc3dvcmRVOGEgPSBkZWNvZGVVVEY4KHBhc3N3b3JkKTtcbiAgICBjb25zdCBzYWx0VThhID0gZGVjb2RlVVRGOChzYWx0KTtcbiAgICBjb25zdCByZXN1bHQgPSBzY3J5cHRFbmNvZGUocGFzc3dvcmRVOGEsIHNhbHRVOGEsIHNjcnlwdFBhcmFtcyB8fCBTQ1JZUFRfUEFSQU1TLkRFRkFVTFQpO1xuICAgIGNvbnN0IHNlZWQgPSByZXN1bHQucGFzc3dvcmQuc2xpY2UoMCwgRUQyNTUxOV9TRUVEX0xFTkdUSCk7XG4gICAgcmV0dXJuIGVkMjU1MTlQYWlyRnJvbVNlZWQoc2VlZCk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBhIG1lc3NhZ2UsIGZyb20gYSBrZXkgcGFpclxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHNpZ24obWVzc2FnZTogc3RyaW5nLCBrZXlwYWlyOiBLZXlwYWlyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgY29uc3QgbSA9IGRlY29kZVVURjgobWVzc2FnZSk7XG4gICAgY29uc3Qgc2lnID0gZWQyNTUxOVNpZ24obSwga2V5cGFpcik7XG4gICAgcmV0dXJuIGVuY29kZUJhc2U2NChzaWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gYSBtZXNzYWdlLCBmcm9tIGEga2V5IHBhaXJcbiAgICovXG4gIHN0YXRpYyBhc3luYyB2ZXJpZnkobWVzc2FnZTogc3RyaW5nLCBzaWduYXR1cmU6IHN0cmluZywgcHVibGljS2V5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgY29uc3QgbSA9IGRlY29kZVVURjgobWVzc2FnZSk7XG4gICAgY29uc3Qgc2lnID0gZGVjb2RlQmFzZTY0KHNpZ25hdHVyZSk7XG4gICAgY29uc3QgcHViID0gQmFzZTU4LmRlY29kZShwdWJsaWNLZXkpO1xuICAgIHJldHVybiBlZDI1NTE5VmVyaWZ5KG0sIHNpZywgcHViKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXNoICh1c2luZyBTSEEyNTYpIGEgbWVzc2FnZSwgYXMgSGV4XG4gICAqL1xuICBzdGF0aWMgc2hhMjU2KG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbSA9IGRlY29kZVVURjgobWVzc2FnZSkgYXMgVWludDhBcnJheTtcbiAgICBjb25zdCBieXRlcyA9IHNoYTI1Nih1dGlscy5jb25jYXRCeXRlcyhtKSk7XG4gICAgcmV0dXJuIHRvSGV4KGJ5dGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXNoICh1c2luZyBTSEE1MTIpIGEgbWVzc2FnZSwgYXMgSGV4XG4gICAqL1xuICBzdGF0aWMgc2hhNTEyKG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbSA9IGRlY29kZVVURjgobWVzc2FnZSk7XG4gICAgY29uc3QgYnl0ZXMgPSBzaGE1MTIodXRpbHMuY29uY2F0Qnl0ZXMobSkpO1xuICAgIHJldHVybiB0b0hleChieXRlcyk7XG4gIH1cblxuICBzdGF0aWMgZW5jb2RlQmFzZTY0KG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbSA9IGRlY29kZVVURjgobWVzc2FnZSk7XG4gICAgcmV0dXJuIGVuY29kZUJhc2U2NChtKTtcbiAgfVxufVxuIl19
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvY3J5cHRvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFFakUsT0FBTyxFQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUczSyxPQUFPLEVBQUMsVUFBVSxJQUFJLEtBQUssRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXhELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFM0MsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDLENBQUMsMkJBQTJCO0FBRWxFLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRztJQUMzQixNQUFNLEVBQWdCO1FBQ3BCLENBQUMsRUFBRSxJQUFJO1FBQ1AsQ0FBQyxFQUFFLENBQUM7UUFDSixDQUFDLEVBQUUsQ0FBQztLQUNMO0lBQ0QsT0FBTyxFQUFnQjtRQUNyQixDQUFDLEVBQUUsSUFBSTtRQUNQLENBQUMsRUFBRSxFQUFFO1FBQ0wsQ0FBQyxFQUFFLENBQUM7S0FDTDtJQUNELE1BQU0sRUFBZ0I7UUFDcEIsQ0FBQyxFQUFFLEtBQUs7UUFDUixDQUFDLEVBQUUsRUFBRTtRQUNMLENBQUMsRUFBRSxDQUFDO0tBQ0w7SUFDRCxPQUFPLEVBQWdCO1FBQ3JCLENBQUMsRUFBRSxLQUFLO1FBQ1IsQ0FBQyxFQUFFLEVBQUU7UUFDTCxDQUFDLEVBQUUsQ0FBQztLQUNMO0lBQ0QsT0FBTyxFQUFnQjtRQUNyQixDQUFDLEVB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RUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtzY3J5cHRFbmNvZGV9IGZyb20gJ0Bwb2xrYWRvdC91dGlsLWNyeXB0by9zY3J5cHQvZW5jb2RlJztcbmltcG9ydCB7U2NyeXB0UGFyYW1zfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8vc2NyeXB0L3R5cGVzJztcbmltcG9ydCB7YmFzZTU4RGVjb2RlLCBiYXNlNjREZWNvZGUsIGJhc2U2NEVuY29kZSwgY3J5cHRvV2FpdFJlYWR5LCBlZDI1NTE5UGFpckZyb21TZWVkLCBlZDI1NTE5U2lnbiwgZWQyNTUxOVZlcmlmeSwgc2hhMjU2QXNVOGEsIHNoYTUxMkFzVThhfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuXG5cbmltcG9ydCB7Ynl0ZXNUb0hleCBhcyB0b0hleH0gZnJvbSAnQG5vYmxlL2hhc2hlcy91dGlscyc7XG5pbXBvcnQge0tleXBhaXJ9IGZyb20gJ0Bwb2xrYWRvdC91dGlsLWNyeXB0by90eXBlcyc7XG5pbXBvcnQge3N0cmluZ1RvVThhfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5cbmV4cG9ydCBjb25zdCBFRDI1NTE5X1NFRURfTEVOR1RIID0gMzI7IC8vIExlbmd0aCBvZiBhIEVEMjU1MTkgc2VlZFxuXG5leHBvcnQgY29uc3QgU0NSWVBUX1BBUkFNUyA9IHtcbiAgU0lNUExFOiA8U2NyeXB0UGFyYW1zPntcbiAgICBOOiAyMDQ4LFxuICAgIHI6IDgsXG4gICAgcDogMVxuICB9LFxuICBERUZBVUxUOiA8U2NyeXB0UGFyYW1zPntcbiAgICBOOiA0MDk2LFxuICAgIHI6IDE2LFxuICAgIHA6IDFcbiAgfSxcbiAgU0VDVVJFOiA8U2NyeXB0UGFyYW1zPntcbiAgICBOOiAxNjM4NCxcbiAgICByOiAzMixcbiAgICBwOiAyXG4gIH0sXG4gIEhBUkRFU1Q6IDxTY3J5cHRQYXJhbXM+e1xuICAgIE46IDY1NTM2LFxuICAgIHI6IDMyLFxuICAgIHA6IDRcbiAgfSxcbiAgRVhUUkVNRTogPFNjcnlwdFBhcmFtcz57XG4gICAgTjogMjYyMTQ0LFxuICAgIHI6IDY0LFxuICAgIHA6IDhcbiAgfVxufTtcblxuXG5leHBvcnQge0tleXBhaXJ9O1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBDcnlwdG9TZXJ2aWNlIHtcblxuICBwcml2YXRlIHN0YXRpYyBfcmVhZHkgPSBmYWxzZTtcblxuICBwcml2YXRlIHN0YXRpYyBnZXQgc3RhcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZHk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhc3luYyByZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcmVhZHkpIHJldHVybjsgLy8gT0tcblxuICAgIGF3YWl0IGNyeXB0b1dhaXRSZWFkeSgpO1xuICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHNpZ24ga2V5cGFpciwgdXNpbmcgc2NyeXB0LCBmcm9tIGEgc2FsdCBhbmQgYSBwYXNzd29yZFxuICAgKlxuICAgKiBAcGFyYW0gc2FsdFxuICAgKiBAcGFyYW0gcGFzc3dvcmRcbiAgICogQHBhcmFtIHNjcnlwdFBhcmFtc1xuICAgKi9cbiAgc3RhdGljIGFzeW5jIHNjcnlwdEtleXBhaXIoc2FsdDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBzY3J5cHRQYXJhbXM/OiBTY3J5cHRQYXJhbXMpOiBQcm9taXNlPEtleXBhaXI+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIGNvbnN0IHNhbHRVOGEgPSBzdHJpbmdUb1U4YShzYWx0KTtcbiAgICBjb25zdCByZXN1bHQgPSBzY3J5cHRFbmNvZGUocGFzc3dvcmQsIHNhbHRVOGEsIHNjcnlwdFBhcmFtcyB8fCBTQ1JZUFRfUEFSQU1TLkRFRkFVTFQpO1xuICAgIGNvbnN0IHNlZWQgPSByZXN1bHQucGFzc3dvcmQuc2xpY2UoMCwgRUQyNTUxOV9TRUVEX0xFTkdUSCk7XG4gICAgcmV0dXJuIGVkMjU1MTlQYWlyRnJvbVNlZWQoc2VlZCk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBhIG1lc3NhZ2UsIGZyb20gYSBrZXkgcGFpclxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHNpZ24obWVzc2FnZTogc3RyaW5nLCBrZXlwYWlyOiBLZXlwYWlyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgY29uc3QgbSA9IHN0cmluZ1RvVThhKG1lc3NhZ2UpO1xuICAgIGNvbnN0IHNpZyA9IGVkMjU1MTlTaWduKG0sIGtleXBhaXIpO1xuICAgIHJldHVybiBiYXNlNjRFbmNvZGUoc2lnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGEgbWVzc2FnZSwgZnJvbSBhIGtleSBwYWlyXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgdmVyaWZ5KG1lc3NhZ2U6IHN0cmluZywgc2lnbmF0dXJlOiBzdHJpbmcsIHB1YmxpY0tleTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGNvbnN0IG0gPSBzdHJpbmdUb1U4YShtZXNzYWdlKTtcbiAgICBjb25zdCBzaWcgPSBiYXNlNjREZWNvZGUoc2lnbmF0dXJlKTtcbiAgICBjb25zdCBwdWIgPSBiYXNlNThEZWNvZGUocHVibGljS2V5KTtcbiAgICByZXR1cm4gZWQyNTUxOVZlcmlmeShtLCBzaWcsIHB1Yik7XG4gIH1cblxuICAvKipcbiAgICogSGFzaCAodXNpbmcgU0hBMjU2KSBhIG1lc3NhZ2UsIGFzIEhleFxuICAgKi9cbiAgc3RhdGljIHNoYTI1NihtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJ5dGVzID0gc2hhMjU2QXNVOGEobWVzc2FnZSk7XG4gICAgcmV0dXJuIHRvSGV4KGJ5dGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXNoICh1c2luZyBTSEE1MTIpIGEgbWVzc2FnZSwgYXMgSGV4XG4gICAqL1xuICBzdGF0aWMgc2hhNTEyKG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgYnl0ZXMgPSBzaGE1MTJBc1U4YShtZXNzYWdlKTtcbiAgICByZXR1cm4gdG9IZXgoYnl0ZXMpO1xuICB9XG5cbiAgc3RhdGljIGVuY29kZUJhc2U2NChtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG0gPSBzdHJpbmdUb1U4YShtZXNzYWdlKTtcbiAgICByZXR1cm4gYmFzZTY0RW5jb2RlKG0pO1xuICB9XG59XG4iXX0=
@@ -134,6 +134,17 @@ export class LocalSettingsService extends StartableService {
134
134
  const value = this.getProperty(definition, defaultValue);
135
135
  return value && value.split(',') || undefined;
136
136
  }
137
+ getPropertyAsObjects(definition, defaultValue) {
138
+ let value = this.getProperty(definition, defaultValue);
139
+ // Parse array
140
+ if (value && typeof value === 'string') {
141
+ value = JSON.parse(value);
142
+ }
143
+ if (value && !Array.isArray(value)) {
144
+ return [value];
145
+ }
146
+ return value;
147
+ }
137
148
  async apply(settings, opts) {
138
149
  if (!this.started)
139
150
  await this.ready();
@@ -446,4 +457,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
446
457
  type: Inject,
447
458
  args: [APP_LOCAL_SETTINGS_OPTIONS]
448
459
  }] }]; } });
449
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc2V0dGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUkxQyxPQUFPLEVBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDbkosT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRELE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQUUvRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUM7QUFDL0MsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFBLGNBQWMsQ0FBQyxDQUFDO0FBRWpGLG9EQUFvRDtBQUNwRCxNQUFNLGdCQUFnQixHQUFrQjtJQUN0QyxrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLE1BQU0sRUFBRSxXQUFXLENBQUMsYUFBYTtJQUNqQyxhQUFhLEVBQUUsV0FBVyxDQUFDLG9CQUFvQixJQUFJLE1BQU07SUFDekQsa0JBQWtCLEVBQUUsQ0FBQztDQUN0QixDQUFDO0FBWUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQXlCLHNCQUFzQixDQUFDLENBQUM7QUFDckcsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxjQUFjLENBQXVCLHNCQUFzQixDQUFDLENBQUM7QUFPM0csTUFBTSxPQUFPLG9CQUFxQixTQUFRLGdCQUErQjtJQW9DdkUsWUFDVSxTQUEyQixFQUMzQixRQUFrQixFQUNsQixPQUFnQixFQUNnQixXQUF3QixFQUNQLGVBQThCLEVBQ3ZDLE9BQTZCO1FBRTdFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQVBSLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNnQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNQLG9CQUFlLEdBQWYsZUFBZSxDQUFlO1FBdkN6RixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQWlCLENBQUM7UUEyQ3RDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBQyxHQUFHLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBQyxDQUFDO1FBRXRFLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLEVBQUUsaUJBQWlCLElBQUksS0FBSyxDQUFDO1FBRTlELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVqQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUE5Q0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztJQUNyRyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5SCxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsS0FBYztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxL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QXdEO2lCQUN6RDs7MEJBeUNJLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsa0JBQWtCOzswQkFDckMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzLCBPZmZsaW5lRmVhdHVyZSwgVXNhZ2VNb2RlIH0gZnJvbSAnLi9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBQZWVyIH0gZnJvbSAnLi9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN0b3JhZ2UgfSBmcm9tICdAaW9uaWMvc3RvcmFnZS1hbmd1bGFyJztcblxuaW1wb3J0IHtlcXVhbHMsIGdldFByb3BlcnR5QnlQYXRoLCBpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIHVuZGVmaW5lZElmTnVsbH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEZvcm1GaWVsZERlZmluaXRpb24sIEZvcm1GaWVsZERlZmluaXRpb25NYXAgfSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMYXRMb25nUGF0dGVybiB9IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9sYXRsb25nL2xhdGxvbmcudXRpbHMnO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlQsIEVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7IERhdGVVdGlscywgZnJvbURhdGVJU09TdHJpbmcgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgSGlzdG9yeVBhZ2VSZWZlcmVuY2UgfSBmcm9tICcuL21vZGVsL2hpc3RvcnkubW9kZWwnO1xuaW1wb3J0IHsgU3RhcnRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBpc0NhcGFjaXRvciwgaXNNb2JpbGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvcGxhdGZvcm1zJztcblxuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX1NUT1JBR0VfS0VZID0gJ3NldHRpbmdzJztcbmV4cG9ydCBjb25zdCBTRVRUSU5HU19UUkFOU0lFTlRfUFJPUEVSVElFUyA9IFsnbW9iaWxlJywgJ3RvdWNoVWknLypkZXByZWNhdGVkKi9dO1xuXG4vLyBmaXhtZTogdGhpcyBjb25zdGFudCBwb2ludHMgdG8gc3RhdGljIGVudmlyb25tZW50XG5jb25zdCBERUZBVUxUX1NFVFRJTkdTOiBMb2NhbFNldHRpbmdzID0ge1xuICBhY2NvdW50SW5oZXJpdGFuY2U6IHRydWUsXG4gIGxvY2FsZTogZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSxcbiAgbGF0TG9uZ0Zvcm1hdDogZW52aXJvbm1lbnQuZGVmYXVsdExhdExvbmdGb3JtYXQgfHwgJ0RETU0nLFxuICBwYWdlSGlzdG9yeU1heFNpemU6IDNcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxTZXR0aW5nc09wdGlvbnMge1xuICBzZXJpYWxpemVBc1N0cmluZz86IGJvb2xlYW47IC8vIGZhbHNlIGJ5IGRlZmF1bHRcbiAgb3B0aW9uczogRm9ybUZpZWxkRGVmaW5pdGlvbk1hcDtcbn1cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBBZGRUb1BhZ2VIaXN0b3J5T3B0aW9ucyB7XG4gIHJlbW92ZVBhdGhRdWVyeVBhcmFtcz86IGJvb2xlYW47XG4gIHJlbW92ZVRpdGxlU21hbGxUYWc/OiBib29sZWFuO1xuICBlbWl0RXZlbnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQVBQX0xPQ0FMX1NFVFRJTkdTID0gbmV3IEluamVjdGlvblRva2VuPFBhcnRpYWw8TG9jYWxTZXR0aW5ncz4+KCdEZWZhdWx0TG9jYWxTZXR0aW5ncycpO1xuZXhwb3J0IGNvbnN0IEFQUF9MT0NBTF9TRVRUSU5HU19PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPExvY2FsU2V0dGluZ3NPcHRpb25zPignTG9jYWxTZXR0aW5nc09wdGlvbnMnKTtcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xuICAvL2RlcHM6IFtBUFBfTE9DQUxfU0VUVElOR1MsIEFQUF9MT0NBTF9TRVRUSU5HU19PUFRJT05TXVxufSlcbmV4cG9ydCBjbGFzcyBMb2NhbFNldHRpbmdzU2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZVNlcnZpY2U8TG9jYWxTZXR0aW5ncz4ge1xuXG4gIG9uQ2hhbmdlID0gbmV3IFN1YmplY3Q8TG9jYWxTZXR0aW5ncz4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25EZWZzOiBGb3JtRmllbGREZWZpbml0aW9uW107XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlcmlhbGl6ZUFzU3RyaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF8kcGVyc2lzdDogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgZ2V0IHNldHRpbmdzKCk6IExvY2FsU2V0dGluZ3Mge1xuICAgIHJldHVybiB0aGlzLl9kYXRhIHx8IHRoaXMuZGVmYXVsdFNldHRpbmdzO1xuICB9XG5cbiAgZ2V0IGxvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEubG9jYWxlIHx8IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nIHx8IHRoaXMudHJhbnNsYXRlLmRlZmF1bHRMYW5nO1xuICB9XG5cbiAgZ2V0IGxhdExvbmdGb3JtYXQoKTogTGF0TG9uZ1BhdHRlcm4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEubGF0TG9uZ0Zvcm1hdCB8fCAnRERNTSc7XG4gIH1cblxuICBnZXQgdXNhZ2VNb2RlKCk6IFVzYWdlTW9kZSB7XG4gICAgcmV0dXJuIGlzTm90TmlsKHRoaXMuX2RhdGEudXNhZ2VNb2RlKSA/IHRoaXMuX2RhdGEudXNhZ2VNb2RlIDogKGlzQ2FwYWNpdG9yKHdpbmRvdykgfHwgaXNNb2JpbGUod2luZG93KSA/ICdGSUVMRCcgOiAnREVTSycpO1xuICB9XG5cbiAgZ2V0IG1vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOb3ROaWwodGhpcy5fZGF0YS5tb2JpbGUpID8gdGhpcy5fZGF0YS5tb2JpbGUgOiBpc01vYmlsZSh3aW5kb3cpO1xuICB9XG5cbiAgc2V0IG1vYmlsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2RhdGEubW9iaWxlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcGFnZUhpc3RvcnkoKTogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSB7XG4gICAgcmV0dXJuICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEucGFnZUhpc3RvcnkgfHwgW10pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCByZWFkb25seSBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9DQUxfU0VUVElOR1MpIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFNldHRpbmdzOiBMb2NhbFNldHRpbmdzLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPQ0FMX1NFVFRJTkdTX09QVElPTlMpIG9wdGlvbnM6IExvY2FsU2V0dGluZ3NPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKHBsYXRmb3JtKTtcbiAgICB0aGlzLmRlZmF1bHRTZXR0aW5ncyA9IHsuLi5ERUZBVUxUX1NFVFRJTkdTLCAuLi50aGlzLmRlZmF1bHRTZXR0aW5nc307XG5cbiAgICB0aGlzLl9vcHRpb25EZWZzID0gT2JqZWN0LnZhbHVlcyhvcHRpb25zPy5vcHRpb25zIHx8IHt9KTtcbiAgICB0aGlzLl9zZXJpYWxpemVBc1N0cmluZyA9IG9wdGlvbnM/LnNlcmlhbGl6ZUFzU3RyaW5nIHx8IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNldERhdGEoKTtcblxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIENyZWF0aW5nIHNlcnZpY2UnKTtcbiAgfVxuXG4gIG5nT25TdGFydCgpOiBQcm9taXNlPExvY2FsU2V0dGluZ3M+IHtcblxuICAgIGNvbnNvbGUuaW5mbygnW3NldHRpbmdzXSBTdGFydGluZyBzZXJ2aWNlLi4uJyk7XG5cbiAgICAvLyBEZWZhdWx0IHZhbHVlXG4gICAgdGhpcy5fZGF0YS5tb2JpbGUgPSB0aGlzLm1vYmlsZTtcbiAgICB0aGlzLl9kYXRhLnVzYWdlTW9kZSA9IHRoaXMudXNhZ2VNb2RlO1xuXG4gICAgLy8gUmVzdG9yaW5nIGxvY2FsIHNldHRpbmdzXG4gICAgcmV0dXJuIHRoaXMucmVzdG9yZUxvY2FsbHkoKTtcbiAgfVxuXG5cbiAgaXNVc2FnZU1vZGUobW9kZTogVXNhZ2VNb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudXNhZ2VNb2RlID09PSBtb2RlO1xuICB9XG5cbiAgaXNPbkZpZWxkTW9kZSh2YWx1ZT86IFVzYWdlTW9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodmFsdWUgfHwgdGhpcy51c2FnZU1vZGUpID09PSAnRklFTEQnO1xuICB9XG5cbiAgYXN5bmMgcmVzdG9yZUxvY2FsbHkoKTogUHJvbWlzZTxMb2NhbFNldHRpbmdzIHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLl9kYXRhIHx8IDxMb2NhbFNldHRpbmdzPnt9O1xuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBjb25zdCBzZXR0aW5ncyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoU0VUVElOR1NfU1RPUkFHRV9LRVkpO1xuXG4gICAgLy8gUmVzdG9yZSBsb2NhbCBzZXR0aW5ncyAob3Iga2VlcCBvbGQgc2V0dGluZ3MpXG4gICAgaWYgKGlzTm90TmlsKHNldHRpbmdzKSkge1xuICAgICAgY29uc29sZS5pbmZvKCdbc2V0dGluZ3NdIFJlc3RvcmluZyBwcmV2aW91cyBzZXR0aW5ncy4uLicpO1xuXG4gICAgICBjb25zdCByZXN0b3JlZERhdGEgPSAodHlwZW9mIHNldHRpbmdzID09PSAnc3RyaW5nJykgPyBKU09OLnBhcnNlKHNldHRpbmdzKSA6IHNldHRpbmdzO1xuXG4gICAgICAvLyBBdm9pZCB0byBvdmVycmlkZSB0cmFuc2llbnQgcHJvcGVydGllc1xuICAgICAgU0VUVElOR1NfVFJBTlNJRU5UX1BST1BFUlRJRVMuZm9yRWFjaCh0cmFuc2llbnRLZXkgPT4ge1xuICAgICAgICBkZWxldGUgcmVzdG9yZWREYXRhW3RyYW5zaWVudEtleV07XG4gICAgICB9KTtcblxuICAgICAgLy8gTWVyZ2UgaW50byBleGlzdGluZyBkYXRhXG4gICAgICBkYXRhID0gT2JqZWN0LmFzc2lnbihkYXRhLCByZXN0b3JlZERhdGEpO1xuICAgIH1cblxuICAgIC8vIEVtaXQgZXZlbnRcbiAgICB0aGlzLm9uQ2hhbmdlLm5leHQoZGF0YSk7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHNldFByb3BlcnR5PFQgPSBzdHJpbmc+KGtleU9yRGVmOiBzdHJpbmd8Rm9ybUZpZWxkRGVmaW5pdGlvbiwgdmFsdWU6IFQsIG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbjsgaW1tZWRpYXRlPzogYm9vbGVhbn0pe1xuICAgIGlmICghdGhpcy5fZGF0YSB8fCAha2V5T3JEZWYpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIGtleU9yRGVmID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5zZXRQcm9wZXJ0eShrZXlPckRlZi5rZXksIHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzID0gdGhpcy5fZGF0YS5wcm9wZXJ0aWVzIHx8IHt9O1xuICAgIHRoaXMuX2RhdGEucHJvcGVydGllc1trZXlPckRlZl0gPSBpc05pbCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZS50b1N0cmluZygpO1xuXG4gICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5wZXJzaXN0TG9jYWxseShvcHRzPy5pbW1lZGlhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGdldFByb3BlcnR5KGtleU9yRGVmOiBzdHJpbmd8Rm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogYW55KTogYW55IHtcbiAgICBpZiAodHlwZW9mIGtleU9yRGVmID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoa2V5T3JEZWYua2V5LCBpc05vdE5pbChkZWZhdWx0VmFsdWUpID8gZGVmYXVsdFZhbHVlIDoga2V5T3JEZWYuZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEucHJvcGVydGllcyAmJiB0aGlzLl9kYXRhLnByb3BlcnRpZXNba2V5T3JEZWZdO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZElmTnVsbChkZWZhdWx0VmFsdWUpO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc0Jvb2xlYW4oZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyAodmFsdWUgJiYgdmFsdWUgIT09ICdmYWxzZScpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc0ludChkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyBwYXJzZUludCh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzTnVtYmVycyhkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJykubWFwKHBhcnNlRmxvYXQpIHx8IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gW3BhcnNlRmxvYXQodmFsdWUpXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNTdHJpbmdzKGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5zcGxpdCgnLCcpIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGFwcGx5KHNldHRpbmdzOiBQYXJ0aWFsPExvY2FsU2V0dGluZ3M+LCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBwZXJzaXN0SW1tZWRpYXRlPzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGNvbnN0IGRhdGEgPSB7IC4uLnRoaXMuX2RhdGEsIC4uLnNldHRpbmdzfTtcblxuICAgIGlmIChlcXVhbHMoZGF0YSwgdGhpcy5fZGF0YSkpIHJldHVybjsgLy8gU2tpcCBpZiBubyBjaGFuZ2VzXG5cbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcblxuICAgIC8vIFNhdmUgbG9jYWxseVxuICAgIGlmIChvcHRzICYmIG9wdHMucGVyc2lzdEltbWVkaWF0ZSkge1xuICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0TG9jYWxseSh0cnVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7IC8vIE5vIEFXQUlUXG4gICAgfVxuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UubmV4dCh0aGlzLl9kYXRhKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhcHBseVByb3BlcnR5KGtleToga2V5b2YgTG9jYWxTZXR0aW5ncywgdmFsdWU6IGFueSwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcGVyc2lzdEltbWVkaWF0ZT86IGJvb2xlYW4gfSkge1xuICAgIGNvbnN0IGNoYW5nZXMgPSB7fTtcbiAgICBjaGFuZ2VzW2tleV0gPSB2YWx1ZTtcbiAgICBhd2FpdCB0aGlzLmFwcGx5KGNoYW5nZXMsIG9wdHMpO1xuICB9XG5cbiAgZ2V0UGFnZVNldHRpbmdzPFQgPSBhbnk+KHBhZ2VJZDogc3RyaW5nLCBwcm9wZXJ0eU5hbWU/OiBzdHJpbmcpOiBUIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucGFnZXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3Qga2V5ID0gcGFnZUlkLnJlcGxhY2UoL1svXS9nLCAnX18nKTtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKHByb3BlcnR5TmFtZSkpIHtcbiAgICAgIHJldHVybiBnZXRQcm9wZXJ0eUJ5UGF0aCh0aGlzLl9kYXRhLnBhZ2VzLCBrZXkgKyAnLicgKyBwcm9wZXJ0eU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGF0YS5wYWdlc1trZXldO1xuICB9XG5cbiAgYXN5bmMgc2F2ZVBhZ2VTZXR0aW5nKHBhZ2VJZDogc3RyaW5nLCB2YWx1ZTogYW55LCBwcm9wZXJ0eU5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kYXRhID0gdGhpcy5fZGF0YSB8fCB0aGlzLmRlZmF1bHRTZXR0aW5ncztcbiAgICB0aGlzLl9kYXRhLnBhZ2VzID0gdGhpcy5fZGF0YS5wYWdlcyB8fCB7fTtcblxuICAgIGNvbnN0IGtleSA9IHBhZ2VJZC5yZXBsYWNlKC9bL10vZywgJ19fJyk7XG4gICAgaWYgKHByb3BlcnR5TmFtZSkge1xuICAgICAgdGhpcy5fZGF0YS5wYWdlc1trZXldID0gdGhpcy5fZGF0YS5wYWdlc1trZXldIHx8IHt9O1xuICAgICAgdGhpcy5fZGF0YS5wYWdlc1trZXldW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhLnBhZ2VzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbG9jYWwgc2V0dGluZ3NcbiAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7XG4gIH1cblxuXG4gIGdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lOiBzdHJpbmcpOiBPZmZsaW5lRmVhdHVyZSB7XG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyB8fCBpc0VtcHR5QXJyYXkodGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMpKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoIWZlYXR1cmVOYW1lKSB0aHJvdyBFcnJvcignTWlzc2luZyBcXCdmZWF0dXJlTmFtZVxcJyBhcmd1bWVudCcpO1xuXG4gICAgZmVhdHVyZU5hbWUgPSBmZWF0dXJlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGZlYXR1cmVQcmVmaXggPSBmZWF0dXJlTmFtZSArICcjJztcbiAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMuZmluZChmID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZiA9PT0gJ3N0cmluZycpIHJldHVybiBmLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChmZWF0dXJlUHJlZml4KTtcbiAgICAgIGlmIChmICYmIHR5cGVvZiBmID09PSAnb2JqZWN0JyAmJiBmLm5hbWUpIHJldHVybiBmLm5hbWUgPT09IGZlYXR1cmVOYW1lO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGlmICghZmVhdHVyZSkgcmV0dXJuOyAvLyBOb3QgZm91bmRcbiAgICBpZiAodHlwZW9mIGZlYXR1cmUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBsYXN0U3luY0RhdGUgPSBmZWF0dXJlLnN1YnN0cmluZyhmZWF0dXJlUHJlZml4Lmxlbmd0aCk7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbJHtmZWF0dXJlTmFtZX1dIExhc3Qgc3luY2hyb25pemF0aW9uIGRhdGU6ICR7bGFzdFN5bmNEYXRlfWApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZmVhdHVyZU5hbWUsXG4gICAgICAgIGxhc3RTeW5jRGF0ZVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZlYXR1cmU7XG4gIH1cblxuICBnZXRPZmZsaW5lRmVhdHVyZUxhc3RTeW5jRGF0ZShmZWF0dXJlTmFtZTogc3RyaW5nKTogTW9tZW50IHtcbiAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5nZXRPZmZsaW5lRmVhdHVyZShmZWF0dXJlTmFtZSk7XG4gICAgcmV0dXJuIGZlYXR1cmUgJiYgZnJvbURhdGVJU09TdHJpbmcoZmVhdHVyZS5sYXN0U3luY0RhdGUpO1xuICB9XG5cbiAgaGFzT2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoZmVhdHVyZU5hbWUpIHJldHVybiBpc05vdE5pbCh0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEgJiYgaXNOb3RFbXB0eUFycmF5KHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzKTtcbiAgfVxuXG4gIHNhdmVPZmZsaW5lRmVhdHVyZShmZWF0dXJlOiBPZmZsaW5lRmVhdHVyZSkge1xuICAgIHRoaXMuX2RhdGEgPSB0aGlzLl9kYXRhIHx8IHRoaXMuZGVmYXVsdFNldHRpbmdzO1xuICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgfHwgW107XG5cbiAgICBmZWF0dXJlLm5hbWUgPSBmZWF0dXJlLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IGZlYXR1cmVQcmVmaXggPSBmZWF0dXJlLm5hbWUgKyAnIyc7XG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzLmZpbmRJbmRleChmID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZiA9PT0gJ3N0cmluZycpIHJldHVybiBmLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChmZWF0dXJlUHJlZml4KTtcbiAgICAgIGlmIChmICYmIHR5cGVvZiBmID09PSAnb2JqZWN0JyAmJiBmLm5hbWUpIHJldHVybiBmLm5hbWUgPT09IGZlYXR1cmUubmFtZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzW2V4aXN0aW5nSW5kZXhdID0gZmVhdHVyZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5nc1xuICAgIHRoaXMucGVyc2lzdExvY2FsbHkoKTtcbiAgfVxuXG4gIG1hcmtPZmZsaW5lRmVhdHVyZUFzU3luYyhmZWF0dXJlTmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IGZlYXR1cmUgPSB0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKTtcblxuICAgIGlmICghZmVhdHVyZSkge1xuICAgICAgZmVhdHVyZSA9IDxPZmZsaW5lRmVhdHVyZT57XG4gICAgICAgIG5hbWU6IGZlYXR1cmVOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGxhc3RTeW5jRGF0ZTogRGF0ZVV0aWxzLm1vbWVudCgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZmVhdHVyZS5sYXN0U3luY0RhdGUgPSBEYXRlVXRpbHMubW9tZW50KCkudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNhdmVPZmZsaW5lRmVhdHVyZShmZWF0dXJlKTtcbiAgfVxuXG4gIHJlbW92ZU9mZmxpbmVGZWF0dXJlcygpIHtcbiAgICBpZiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcykge1xuICAgICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgPSBbXTtcblxuICAgICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmllbGREaXNwbGF5QXR0cmlidXRlcyhmaWVsZE5hbWU6IHN0cmluZywgZGVmYXVsdEF0dHJpYnV0ZXM/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzICYmICB0aGlzLl9kYXRhLnByb3BlcnRpZXNbYHN1bWFyaXMuZmllbGQuJHtmaWVsZE5hbWV9LmF0dHJpYnV0ZXNgXTtcbiAgICAvLyBOb3RoaW5nIGZvdW5kIGluIHNldHRpbmdzOiByZXR1cm4gZGVmYXVsdHNcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gZGVmYXVsdEF0dHJpYnV0ZXMgfHwgWydsYWJlbCcsICduYW1lJ107XG5cbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoJywnKTtcbiAgfVxuXG4gIGdldFBhZ2VGaWVsZERlZmF1bHRWYWx1ZShwYWdlSWQ6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2VTZXR0aW5ncyhwYWdlSWQsIGBmaWVsZC4ke2ZpZWxkTmFtZX0uZGVmYXVsdFZhbHVlYCk7XG4gIH1cblxuICBnZXQgb3B0aW9uRGVmcygpOiBGb3JtRmllbGREZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25EZWZzO1xuICB9XG5cbiAgcmVnaXN0ZXJPcHRpb24oZGVmOiBGb3JtRmllbGREZWZpbml0aW9uKSB7XG4gICAgaWYgKHRoaXMuX29wdGlvbkRlZnMuZmluZEluZGV4KGYgPT4gZi5rZXkgPT09IGRlZi5rZXkpICE9PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZGRpdGlvbmFsIGFkZGl0aW9uYWwgcHJvcGVydHkgeyR7ZGVmLmtleX19IGFscmVhZHkgZGVmaW5lLmApO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtzZXR0aW5nc10gQWRkaW5nIGFkZGl0aW9uYWwgcHJvcGVydHkgeyR7ZGVmLmtleX19YCwgZGVmKTtcbiAgICB0aGlzLl9vcHRpb25EZWZzLnB1c2goZGVmKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT3B0aW9ucyhkZWZzOiBGb3JtRmllbGREZWZpbml0aW9uW10pIHtcbiAgICAoZGVmcyB8fCBbXSkuZm9yRWFjaChkZWYgPT4gdGhpcy5yZWdpc3Rlck9wdGlvbihkZWYpKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFRvUGFnZUhpc3RvcnkocGFnZTogSGlzdG9yeVBhZ2VSZWZlcmVuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IEFkZFRvUGFnZUhpc3RvcnlPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VIaXN0b3J5PzogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSAvLyB1c2VkIGZvciByZWN1cnNpdmUgY2FsbCB0byBjaGlsZHJlblxuICApIHtcbiAgICAvLyBJZiBub3QgaW5zaWRlIHJlY3Vyc2l2ZSBjYWxsOiBmaWxsIHBhZ2UgaGlzdG9yeSBkZWZhdWx0c1xuICAgIGlmICghcGFnZUhpc3RvcnkpIHRoaXMuZmlsbFBhZ2VIaXN0b3J5RGVmYXVsdHMocGFnZSwgb3B0cyk7XG5cbiAgICBwYWdlSGlzdG9yeSA9IHBhZ2VIaXN0b3J5IHx8IHRoaXMuX2RhdGEucGFnZUhpc3Rvcnk7XG5cbiAgICBjb25zdCBpbmRleCA9IHBhZ2VIaXN0b3J5LmZpbmRJbmRleChwID0+IChcbiAgICAgIC8vIHNhbWUgcGF0aFxuICAgICAgcC5wYXRoID09PSBwYWdlLnBhdGhcbiAgICAgIC8vIG9yIHN1Yi1wYXRoXG4gICAgICB8fCBwYWdlLnBhdGguc3RhcnRzV2l0aChwLnBhdGggKyAnLycpKVxuICAgICk7XG5cbiAgICAvLyBOZXcgcGFnZTogaW5zZXJ0IGl0XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgLy9pZiAodGhpcy5fZGVidWcpXG4gICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIEFkZGluZyBwYWdlIHRvIGhpc3Rvcnk6ICcsIHBhZ2UpO1xuXG4gICAgICAvLyBQcmVwZW5kIHRvIGxpc3RcbiAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZSgwLCAwLCBwYWdlKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nUGFnZSA9IHBhZ2VIaXN0b3J5W2luZGV4XTtcblxuICAgICAgLy8gU2FtZSBwYXRoOiByZXBsYWNlIGV4aXN0aW5nIHBhZ2VcbiAgICAgIGlmIChwYWdlSGlzdG9yeVtpbmRleF0ucGF0aCA9PT0gcGFnZS5wYXRoKSB7XG4gICAgICAgIC8vaWYgKHRoaXMuX2RlYnVnKVxuICAgICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFVwZGF0aW5nIGV4aXN0aW5nIHBhZ2UgaW4gaGlzdG9yeTogJywgcGFnZSk7XG4gICAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gQ29weSBleGl0aW5nIGNoaWxkcmVuXG4gICAgICAgIHBhZ2UuY2hpbGRyZW4gPSBleGlzdGluZ1BhZ2UuY2hpbGRyZW4gfHwgW107XG5cbiAgICAgICAgLy8gUHJlcGVuZCB0byBsaXN0XG4gICAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZSgwLCAwLCBwYWdlKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm90IHNhbWUgcGF0aCAoc2hvdWxkIGJlIGEgcGFyZW50IHBhZ2UpXG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gQ3JlYXRlIHBhcmVudCdzIGNoaWxkcmVuIGFycmF5LCBpZiBub3QgZXhpc3RzXG4gICAgICAgIGV4aXN0aW5nUGFnZS5jaGlsZHJlbiA9IGV4aXN0aW5nUGFnZS5jaGlsZHJlbiB8fCBbXTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIHBhcmVudCB0aW1lXG4gICAgICAgIGV4aXN0aW5nUGFnZS50aW1lID0gcGFnZS50aW1lO1xuXG4gICAgICAgIC8vIEFkZCBwYWdlIGFzIHBhcmVudCdzIGNoaWxkcmVuIChyZWN1cnNpdmUgY2FsbClcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRUb1BhZ2VIaXN0b3J5KHBhZ2UsIG9wdHMsIGV4aXN0aW5nUGFnZS5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2NhbGx5IChvbmx5IGlmIG5vdCBhIHJlY3Vyc2l2ZSBleGVjdXRpb24pXG4gICAgaWYgKHBhZ2VIaXN0b3J5ID09PSB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSB7XG5cbiAgICAgIC8vIElmIG1heCBoYXMgYmVlbiByZWFjaGVkLCByZW1vdmUgb2xkIHBhZ2VzXG4gICAgICBpZiAodGhpcy5fZGF0YS5wYWdlSGlzdG9yeS5sZW5ndGggPiB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5TWF4U2l6ZSkge1xuICAgICAgICBjb25zdCByZW1vdmVkUGFnZXMgPSBwYWdlSGlzdG9yeS5zcGxpY2UodGhpcy5fZGF0YS5wYWdlSGlzdG9yeU1heFNpemUsIHBhZ2VIaXN0b3J5Lmxlbmd0aCAtIHRoaXMuX2RhdGEucGFnZUhpc3RvcnlNYXhTaXplKTtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBQYWdlcyByZW1vdmVkIGZyb20gaGlzdG9yeTogJywgcmVtb3ZlZFBhZ2VzKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgbmV3IHZhbHVlXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgcGFnZUhpc3RvcnkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVBhZ2VIaXN0b3J5KHBhdGg6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFuIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VIaXN0b3J5PzogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSAvLyB1c2VkIGZvciByZWN1cnNpdmUgY2FsbCB0byBjaGlsZHJlbilcbiAgKSB7XG4gICAgcGFnZUhpc3RvcnkgPSBwYWdlSGlzdG9yeSB8fCB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5O1xuXG4gICAgY29uc3QgaW5kZXggPSBwYWdlSGlzdG9yeS5maW5kSW5kZXgocCA9PiBwLnBhdGggPT09IHBhdGgpO1xuICAgIGxldCBmb3VuZCA9IGluZGV4ICE9PSAtMTtcbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gUmVtb3ZlIHBhZ2UgaGlzdG9yeTogJywgcGF0aCk7XG4gICAgICAvLyBSZW1vdmUgdmFsdWVcbiAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gU2VhcmNoIHBhdGggb24gY2hpbGRyZW4gKHN0b3Agd2hlbiBmb3VuZClcbiAgICAgIGZvdW5kID0gcGFnZUhpc3RvcnlcbiAgICAgICAgLm1hcChwID0+IHAuY2hpbGRyZW4pXG4gICAgICAgIC5maWx0ZXIoaXNOb3RFbXB0eUFycmF5KVxuICAgICAgICAuZmluZEluZGV4KGNoaWxkcmVuID0+IHRoaXMucmVtb3ZlUGFnZUhpc3RvcnkocGF0aCwgb3B0cywgY2hpbGRyZW4pKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2NhbGx5IChvbmx5IGlmIG5vdCBhIHJlY3Vyc2l2ZSBleGVjdXRpb24pXG4gICAgaWYgKGZvdW5kICYmIHBhZ2VIaXN0b3J5ID09PSB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSB7XG4gICAgICAvLyBBcHBseSBjaGFuZ2VzXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgdGhpcy5fZGF0YS5wYWdlSGlzdG9yeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJQYWdlSGlzdG9yeSgpIHtcbiAgICAvLyBSZXNldCBhbGwgcGFnZSBoaXN0b3J5XG4gICAgYXdhaXQgdGhpcy5hcHBseVByb3BlcnR5KCdwYWdlSGlzdG9yeScsIFtdLCB7cGVyc2lzdEltbWVkaWF0ZTogdHJ1ZX0pO1xuICB9XG5cbiAgLyogLS0gUHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZXNldERhdGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXREYXRhKCkge1xuICAgIHRoaXMuX2RhdGEgPSB7Li4udGhpcy5fZGF0YSwgLi4udGhpcy5kZWZhdWx0U2V0dGluZ3N9O1xuXG4gICAgdGhpcy5fZGF0YS5sb2NhbGUgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0aGlzLnRyYW5zbGF0ZS5kZWZhdWx0TGFuZztcbiAgICB0aGlzLl9kYXRhLm1vYmlsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kYXRhLnVzYWdlTW9kZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5ID0gW107XG5cbiAgICBjb25zdCBkZWZhdWx0UGVlciA9IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIgJiYgUGVlci5mcm9tT2JqZWN0KHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIpO1xuICAgIHRoaXMuX2RhdGEucGVlclVybCA9IGRlZmF1bHRQZWVyICYmIGRlZmF1bHRQZWVyLnVybCB8fCB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5zdGFydGVkKSB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIHBlcnNpc3RMb2NhbGx5KGltbWVkaWF0ZT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuXG4gICAgLy8gRXhlY3V0ZSBpbW1lZGlhdGVcbiAgICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICBpZiAoIXRoaXMuX2RhdGEpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBSZW1vdmluZyBsb2NhbCBzZXR0aW5ncyBmcm9tIHN0b3JhZ2UnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VUVElOR1NfU1RPUkFHRV9LRVkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gU3RvcmUgbG9jYWwgc2V0dGluZ3MnLCB0aGlzLl9kYXRhKTtcbiAgICAgICAgaWYgKHRoaXMuX3NlcmlhbGl6ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgLy8gRml4IHNlcmlhbGl6YXRpb24gZXJyb3IsIGluIFN1bWFyaXMtQXBwXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5zZXQoU0VUVElOR1NfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMuX2RhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLnNldChTRVRUSU5HU19TVE9SQUdFX0tFWSwgdGhpcy5fZGF0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSB3aXRoIGRlbGF5XG4gICAgZWxzZSB7XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgZXZlbnQgZW1pdHRlclxuICAgICAgaWYgKCF0aGlzLl8kcGVyc2lzdCkge1xuICAgICAgICB0aGlzLl8kcGVyc2lzdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55Pih0cnVlKTtcbiAgICAgICAgdGhpcy5fJHBlcnNpc3RcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDAwKSwgLy8gYWRkIGEgZGVsYXkgb2YgMnNcbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnN0YXJ0ZWQpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wZXJzaXN0TG9jYWxseSh0cnVlKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuXyRwZXJzaXN0LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbGxQYWdlSGlzdG9yeURlZmF1bHRzKHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLCBvcHRzPzoge1xuICAgICAgcmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zPzogYm9vbGVhbjtcbiAgICByZW1vdmVUaXRsZVNtYWxsVGFnPzogYm9vbGVhbjtcbiAgfSk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlIHtcbiAgICBpZiAoIXBhZ2UgfHwgIXBhZ2UudGl0bGUgfHwgIXBhZ2UucGF0aCkgdGhyb3cgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgXFwncGFnZVxcJywgXFwncGFnZS5wYXRoXFwnIG9yIFxcJ3BhZ2UudGl0bGVcXCcnKTtcblxuICAgIC8vIFNldCB0aW1lXG4gICAgcGFnZS50aW1lID0gcGFnZS50aW1lIHx8IERhdGVVdGlscy5tb21lbnQoKTtcblxuICAgIC8vIENsZWFuIHRoZSB0aXRsZSAocmVtb3ZlIDxzbWFsbD4gdGFncylcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5yZW1vdmVUaXRsZVNtYWxsVGFnICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgdGFnSW5kZXggPSBwYWdlLnRpdGxlLmluZGV4T2YoJzwvc21hbGw+Jyk7XG4gICAgICBpZiAodGFnSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHBhZ2UudGl0bGUgPSBwYWdlLnRpdGxlLnN1YnN0cmluZyh0YWdJbmRleCArICc8L3NtYWxsPicubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHBhZ2UudGl0bGUgPSBwYWdlLnRpdGxlLnJlcGxhY2UoL1sgXSpjbGFzcz0naGlkZGVuLXhzIGhpZGRlbi1zbScvZywgJycpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBxdWVyeSBwYXJhbXNcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5yZW1vdmVQYXRoUXVlcnlQYXJhbXMgIT09IGZhbHNlKSB7XG4gICAgICBwYWdlLnBhdGggPSBwYWdlLnBhdGgucmVwbGFjZSgvWz9dLiokLywgJycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWdlO1xuICB9XG59XG4iXX0=
460
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc2V0dGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUkxQyxPQUFPLEVBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDbkosT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRELE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQUUvRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUM7QUFDL0MsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFBLGNBQWMsQ0FBQyxDQUFDO0FBRWpGLG9EQUFvRDtBQUNwRCxNQUFNLGdCQUFnQixHQUFrQjtJQUN0QyxrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLE1BQU0sRUFBRSxXQUFXLENBQUMsYUFBYTtJQUNqQyxhQUFhLEVBQUUsV0FBVyxDQUFDLG9CQUFvQixJQUFJLE1BQU07SUFDekQsa0JBQWtCLEVBQUUsQ0FBQztDQUN0QixDQUFDO0FBWUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQXlCLHNCQUFzQixDQUFDLENBQUM7QUFDckcsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxjQUFjLENBQXVCLHNCQUFzQixDQUFDLENBQUM7QUFPM0csTUFBTSxPQUFPLG9CQUFxQixTQUFRLGdCQUErQjtJQW9DdkUsWUFDVSxTQUEyQixFQUMzQixRQUFrQixFQUNsQixPQUFnQixFQUNnQixXQUF3QixFQUNQLGVBQThCLEVBQ3ZDLE9BQTZCO1FBRTdFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQVBSLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNnQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNQLG9CQUFlLEdBQWYsZUFBZSxDQUFlO1FBdkN6RixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQWlCLENBQUM7UUEyQ3RDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBQyxHQUFHLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBQyxDQUFDO1FBRXRFLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLEVBQUUsaUJBQWlCLElBQUksS0FBSyxDQUFDO1FBRTlELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVqQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUE5Q0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztJQUNyRyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5SCxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsS0FBYztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxL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Q0FBQztTQUN6RTtRQUVELHNCQUFzQjtRQUN0QixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxLQUFLLEVBQUU7WUFDakQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDN0M7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O2lIQTdmVSxvQkFBb0IsaUdBd0NyQixXQUFXLGFBQ0Msa0JBQWtCLDZCQUNsQiwwQkFBMEI7cUhBMUNyQyxvQkFBb0IsY0FIbkIsTUFBTTsyRkFHUCxvQkFBb0I7a0JBSmhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07b0JBQ2xCLHdEQUF3RDtpQkFDekQ7OzBCQXlDSSxNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQ3JDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYWxTZXR0aW5ncywgT2ZmbGluZUZlYXR1cmUsIFVzYWdlTW9kZSB9IGZyb20gJy4vbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHsgUGVlciB9IGZyb20gJy4vbW9kZWwvcGVlci5tb2RlbCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdG9yYWdlIH0gZnJvbSAnQGlvbmljL3N0b3JhZ2UtYW5ndWxhcic7XG5cbmltcG9ydCB7ZXF1YWxzLCBnZXRQcm9wZXJ0eUJ5UGF0aCwgaXNFbXB0eUFycmF5LCBpc05pbCwgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCB1bmRlZmluZWRJZk51bGx9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBGb3JtRmllbGREZWZpbml0aW9uLCBGb3JtRmllbGREZWZpbml0aW9uTWFwIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTGF0TG9uZ1BhdHRlcm4gfSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvbGF0bG9uZy9sYXRsb25nLnV0aWxzJztcbmltcG9ydCB7IEVOVklST05NRU5ULCBFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBEYXRlVXRpbHMsIGZyb21EYXRlSVNPU3RyaW5nIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2RhdGVzJztcbmltcG9ydCB7IEhpc3RvcnlQYWdlUmVmZXJlbmNlIH0gZnJvbSAnLi9tb2RlbC9oaXN0b3J5Lm1vZGVsJztcbmltcG9ydCB7IFN0YXJ0YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgaXNDYXBhY2l0b3IsIGlzTW9iaWxlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3BsYXRmb3Jtcyc7XG5cbmV4cG9ydCBjb25zdCBTRVRUSU5HU19TVE9SQUdFX0tFWSA9ICdzZXR0aW5ncyc7XG5leHBvcnQgY29uc3QgU0VUVElOR1NfVFJBTlNJRU5UX1BST1BFUlRJRVMgPSBbJ21vYmlsZScsICd0b3VjaFVpJy8qZGVwcmVjYXRlZCovXTtcblxuLy8gZml4bWU6IHRoaXMgY29uc3RhbnQgcG9pbnRzIHRvIHN0YXRpYyBlbnZpcm9ubWVudFxuY29uc3QgREVGQVVMVF9TRVRUSU5HUzogTG9jYWxTZXR0aW5ncyA9IHtcbiAgYWNjb3VudEluaGVyaXRhbmNlOiB0cnVlLFxuICBsb2NhbGU6IGVudmlyb25tZW50LmRlZmF1bHRMb2NhbGUsXG4gIGxhdExvbmdGb3JtYXQ6IGVudmlyb25tZW50LmRlZmF1bHRMYXRMb25nRm9ybWF0IHx8ICdERE1NJyxcbiAgcGFnZUhpc3RvcnlNYXhTaXplOiAzXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsU2V0dGluZ3NPcHRpb25zIHtcbiAgc2VyaWFsaXplQXNTdHJpbmc/OiBib29sZWFuOyAvLyBmYWxzZSBieSBkZWZhdWx0XG4gIG9wdGlvbnM6IEZvcm1GaWVsZERlZmluaXRpb25NYXA7XG59XG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQWRkVG9QYWdlSGlzdG9yeU9wdGlvbnMge1xuICByZW1vdmVQYXRoUXVlcnlQYXJhbXM/OiBib29sZWFuO1xuICByZW1vdmVUaXRsZVNtYWxsVGFnPzogYm9vbGVhbjtcbiAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IEFQUF9MT0NBTF9TRVRUSU5HUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxQYXJ0aWFsPExvY2FsU2V0dGluZ3M+PignRGVmYXVsdExvY2FsU2V0dGluZ3MnKTtcbmV4cG9ydCBjb25zdCBBUFBfTE9DQUxfU0VUVElOR1NfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxMb2NhbFNldHRpbmdzT3B0aW9ucz4oJ0xvY2FsU2V0dGluZ3NPcHRpb25zJyk7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbiAgLy9kZXBzOiBbQVBQX0xPQ0FMX1NFVFRJTkdTLCBBUFBfTE9DQUxfU0VUVElOR1NfT1BUSU9OU11cbn0pXG5leHBvcnQgY2xhc3MgTG9jYWxTZXR0aW5nc1NlcnZpY2UgZXh0ZW5kcyBTdGFydGFibGVTZXJ2aWNlPExvY2FsU2V0dGluZ3M+IHtcblxuICBvbkNoYW5nZSA9IG5ldyBTdWJqZWN0PExvY2FsU2V0dGluZ3M+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uRGVmczogRm9ybUZpZWxkRGVmaW5pdGlvbltdO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXJpYWxpemVBc1N0cmluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfJHBlcnNpc3Q6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gIGdldCBzZXR0aW5ncygpOiBMb2NhbFNldHRpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSB8fCB0aGlzLmRlZmF1bHRTZXR0aW5ncztcbiAgfVxuXG4gIGdldCBsb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLmxvY2FsZSB8fCB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0aGlzLnRyYW5zbGF0ZS5kZWZhdWx0TGFuZztcbiAgfVxuXG4gIGdldCBsYXRMb25nRm9ybWF0KCk6IExhdExvbmdQYXR0ZXJuIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLmxhdExvbmdGb3JtYXQgfHwgJ0RETU0nO1xuICB9XG5cbiAgZ2V0IHVzYWdlTW9kZSgpOiBVc2FnZU1vZGUge1xuICAgIHJldHVybiBpc05vdE5pbCh0aGlzLl9kYXRhLnVzYWdlTW9kZSkgPyB0aGlzLl9kYXRhLnVzYWdlTW9kZSA6IChpc0NhcGFjaXRvcih3aW5kb3cpIHx8IGlzTW9iaWxlKHdpbmRvdykgPyAnRklFTEQnIDogJ0RFU0snKTtcbiAgfVxuXG4gIGdldCBtb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTm90TmlsKHRoaXMuX2RhdGEubW9iaWxlKSA/IHRoaXMuX2RhdGEubW9iaWxlIDogaXNNb2JpbGUod2luZG93KTtcbiAgfVxuXG4gIHNldCBtb2JpbGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kYXRhLm1vYmlsZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHBhZ2VIaXN0b3J5KCk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlW10ge1xuICAgIHJldHVybiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5IHx8IFtdKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPQ0FMX1NFVFRJTkdTKSBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRTZXR0aW5nczogTG9jYWxTZXR0aW5ncyxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9MT0NBTF9TRVRUSU5HU19PUFRJT05TKSBvcHRpb25zOiBMb2NhbFNldHRpbmdzT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcihwbGF0Zm9ybSk7XG4gICAgdGhpcy5kZWZhdWx0U2V0dGluZ3MgPSB7Li4uREVGQVVMVF9TRVRUSU5HUywgLi4udGhpcy5kZWZhdWx0U2V0dGluZ3N9O1xuXG4gICAgdGhpcy5fb3B0aW9uRGVmcyA9IE9iamVjdC52YWx1ZXMob3B0aW9ucz8ub3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5fc2VyaWFsaXplQXNTdHJpbmcgPSBvcHRpb25zPy5zZXJpYWxpemVBc1N0cmluZyB8fCBmYWxzZTtcblxuICAgIHRoaXMucmVzZXREYXRhKCk7XG5cbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBDcmVhdGluZyBzZXJ2aWNlJyk7XG4gIH1cblxuICBuZ09uU3RhcnQoKTogUHJvbWlzZTxMb2NhbFNldHRpbmdzPiB7XG5cbiAgICBjb25zb2xlLmluZm8oJ1tzZXR0aW5nc10gU3RhcnRpbmcgc2VydmljZS4uLicpO1xuXG4gICAgLy8gRGVmYXVsdCB2YWx1ZVxuICAgIHRoaXMuX2RhdGEubW9iaWxlID0gdGhpcy5tb2JpbGU7XG4gICAgdGhpcy5fZGF0YS51c2FnZU1vZGUgPSB0aGlzLnVzYWdlTW9kZTtcblxuICAgIC8vIFJlc3RvcmluZyBsb2NhbCBzZXR0aW5nc1xuICAgIHJldHVybiB0aGlzLnJlc3RvcmVMb2NhbGx5KCk7XG4gIH1cblxuXG4gIGlzVXNhZ2VNb2RlKG1vZGU6IFVzYWdlTW9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnVzYWdlTW9kZSA9PT0gbW9kZTtcbiAgfVxuXG4gIGlzT25GaWVsZE1vZGUodmFsdWU/OiBVc2FnZU1vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHZhbHVlIHx8IHRoaXMudXNhZ2VNb2RlKSA9PT0gJ0ZJRUxEJztcbiAgfVxuXG4gIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCk6IFByb21pc2U8TG9jYWxTZXR0aW5ncyB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBkYXRhID0gdGhpcy5fZGF0YSB8fCA8TG9jYWxTZXR0aW5ncz57fTtcblxuICAgIC8vIFJlc3RvcmUgZnJvbSBzdG9yYWdlXG4gICAgY29uc3Qgc2V0dGluZ3MgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZKTtcblxuICAgIC8vIFJlc3RvcmUgbG9jYWwgc2V0dGluZ3MgKG9yIGtlZXAgb2xkIHNldHRpbmdzKVxuICAgIGlmIChpc05vdE5pbChzZXR0aW5ncykpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW3NldHRpbmdzXSBSZXN0b3JpbmcgcHJldmlvdXMgc2V0dGluZ3MuLi4nKTtcblxuICAgICAgY29uc3QgcmVzdG9yZWREYXRhID0gKHR5cGVvZiBzZXR0aW5ncyA9PT0gJ3N0cmluZycpID8gSlNPTi5wYXJzZShzZXR0aW5ncykgOiBzZXR0aW5ncztcblxuICAgICAgLy8gQXZvaWQgdG8gb3ZlcnJpZGUgdHJhbnNpZW50IHByb3BlcnRpZXNcbiAgICAgIFNFVFRJTkdTX1RSQU5TSUVOVF9QUk9QRVJUSUVTLmZvckVhY2godHJhbnNpZW50S2V5ID0+IHtcbiAgICAgICAgZGVsZXRlIHJlc3RvcmVkRGF0YVt0cmFuc2llbnRLZXldO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIE1lcmdlIGludG8gZXhpc3RpbmcgZGF0YVxuICAgICAgZGF0YSA9IE9iamVjdC5hc3NpZ24oZGF0YSwgcmVzdG9yZWREYXRhKTtcbiAgICB9XG5cbiAgICAvLyBFbWl0IGV2ZW50XG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KGRhdGEpO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBzZXRQcm9wZXJ0eTxUID0gc3RyaW5nPihrZXlPckRlZjogc3RyaW5nfEZvcm1GaWVsZERlZmluaXRpb24sIHZhbHVlOiBULCBvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW47IGltbWVkaWF0ZT86IGJvb2xlYW59KXtcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIWtleU9yRGVmKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBrZXlPckRlZiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMuc2V0UHJvcGVydHkoa2V5T3JEZWYua2V5LCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2RhdGEucHJvcGVydGllcyA9IHRoaXMuX2RhdGEucHJvcGVydGllcyB8fCB7fTtcbiAgICB0aGlzLl9kYXRhLnByb3BlcnRpZXNba2V5T3JEZWZdID0gaXNOaWwodmFsdWUpID8gdW5kZWZpbmVkIDogdmFsdWUudG9TdHJpbmcoKTtcblxuICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5nc1xuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMucGVyc2lzdExvY2FsbHkob3B0cz8uaW1tZWRpYXRlKTtcbiAgICB9XG4gIH1cblxuICBnZXRQcm9wZXJ0eShrZXlPckRlZjogc3RyaW5nfEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IGFueSk6IGFueSB7XG4gICAgaWYgKHR5cGVvZiBrZXlPckRlZiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5KGtleU9yRGVmLmtleSwgaXNOb3ROaWwoZGVmYXVsdFZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IGtleU9yRGVmLmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLnByb3BlcnRpZXMgJiYgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzW2tleU9yRGVmXTtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWRJZk51bGwoZGVmYXVsdFZhbHVlKTtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNCb29sZWFuKGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gKHZhbHVlICYmIHZhbHVlICE9PSAnZmFsc2UnKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNJbnQoZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gcGFyc2VJbnQodmFsdWUpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc051bWJlcnMoZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiB2YWx1ZS5zcGxpdCgnLCcpLm1hcChwYXJzZUZsb2F0KSB8fCB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/IFtwYXJzZUZsb2F0KHZhbHVlKV0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzU3RyaW5ncyhkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUuc3BsaXQoJywnKSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzT2JqZWN0cyhkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBhbnlbXSk6IGFueVtdIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgLy8gUGFyc2UgYXJyYXlcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIFt2YWx1ZV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGFzeW5jIGFwcGx5KHNldHRpbmdzOiBQYXJ0aWFsPExvY2FsU2V0dGluZ3M+LCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBwZXJzaXN0SW1tZWRpYXRlPzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGNvbnN0IGRhdGEgPSB7IC4uLnRoaXMuX2RhdGEsIC4uLnNldHRpbmdzfTtcblxuICAgIGlmIChlcXVhbHMoZGF0YSwgdGhpcy5fZGF0YSkpIHJldHVybjsgLy8gU2tpcCBpZiBubyBjaGFuZ2VzXG5cbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcblxuICAgIC8vIFNhdmUgbG9jYWxseVxuICAgIGlmIChvcHRzICYmIG9wdHMucGVyc2lzdEltbWVkaWF0ZSkge1xuICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0TG9jYWxseSh0cnVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7IC8vIE5vIEFXQUlUXG4gICAgfVxuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UubmV4dCh0aGlzLl9kYXRhKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhcHBseVByb3BlcnR5KGtleToga2V5b2YgTG9jYWxTZXR0aW5ncywgdmFsdWU6IGFueSwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcGVyc2lzdEltbWVkaWF0ZT86IGJvb2xlYW4gfSkge1xuICAgIGNvbnN0IGNoYW5nZXMgPSB7fTtcbiAgICBjaGFuZ2VzW2tleV0gPSB2YWx1ZTtcbiAgICBhd2FpdCB0aGlzLmFwcGx5KGNoYW5nZXMsIG9wdHMpO1xuICB9XG5cbiAgZ2V0UGFnZVNldHRpbmdzPFQgPSBhbnk+KHBhZ2VJZDogc3RyaW5nLCBwcm9wZXJ0eU5hbWU/OiBzdHJpbmcpOiBUIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucGFnZXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3Qga2V5ID0gcGFnZUlkLnJlcGxhY2UoL1svXS9nLCAnX18nKTtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKHByb3BlcnR5TmFtZSkpIHtcbiAgICAgIHJldHVybiBnZXRQcm9wZXJ0eUJ5UGF0aCh0aGlzLl9kYXRhLnBhZ2VzLCBrZXkgKyAnLicgKyBwcm9wZXJ0eU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGF0YS5wYWdlc1trZXldO1xuICB9XG5cbiAgYXN5bmMgc2F2ZVBhZ2VTZXR0aW5nKHBhZ2VJZDogc3RyaW5nLCB2YWx1ZTogYW55LCBwcm9wZXJ0eU5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kYXRhID0gdGhpcy5fZGF0YSB8fCB0aGlzLmRlZmF1bHRTZXR0aW5ncztcbiAgICB0aGlzLl9kYXRhLnBhZ2VzID0gdGhpcy5fZGF0YS5wYWdlcyB8fCB7fTtcblxuICAgIGNvbnN0IGtleSA9IHBhZ2VJZC5yZXBsYWNlKC9bL10vZywgJ19fJyk7XG4gICAgaWYgKHByb3BlcnR5TmFtZSkge1xuICAgICAgdGhpcy5fZGF0YS5wYWdlc1trZXldID0gdGhpcy5fZGF0YS5wYWdlc1trZXldIHx8IHt9O1xuICAgICAgdGhpcy5fZGF0YS5wYWdlc1trZXldW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhLnBhZ2VzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbG9jYWwgc2V0dGluZ3NcbiAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7XG4gIH1cblxuXG4gIGdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lOiBzdHJpbmcpOiBPZmZsaW5lRmVhdHVyZSB7XG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyB8fCBpc0VtcHR5QXJyYXkodGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMpKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoIWZlYXR1cmVOYW1lKSB0aHJvdyBFcnJvcignTWlzc2luZyBcXCdmZWF0dXJlTmFtZVxcJyBhcmd1bWVudCcpO1xuXG4gICAgZmVhdHVyZU5hbWUgPSBmZWF0dXJlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGZlYXR1cmVQcmVmaXggPSBmZWF0dXJlTmFtZSArICcjJztcbiAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMuZmluZChmID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZiA9PT0gJ3N0cmluZycpIHJldHVybiBmLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChmZWF0dXJlUHJlZml4KTtcbiAgICAgIGlmIChmICYmIHR5cGVvZiBmID09PSAnb2JqZWN0JyAmJiBmLm5hbWUpIHJldHVybiBmLm5hbWUgPT09IGZlYXR1cmVOYW1lO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGlmICghZmVhdHVyZSkgcmV0dXJuOyAvLyBOb3QgZm91bmRcbiAgICBpZiAodHlwZW9mIGZlYXR1cmUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBsYXN0U3luY0RhdGUgPSBmZWF0dXJlLnN1YnN0cmluZyhmZWF0dXJlUHJlZml4Lmxlbmd0aCk7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbJHtmZWF0dXJlTmFtZX1dIExhc3Qgc3luY2hyb25pemF0aW9uIGRhdGU6ICR7bGFzdFN5bmNEYXRlfWApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZmVhdHVyZU5hbWUsXG4gICAgICAgIGxhc3RTeW5jRGF0ZVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZlYXR1cmU7XG4gIH1cblxuICBnZXRPZmZsaW5lRmVhdHVyZUxhc3RTeW5jRGF0ZShmZWF0dXJlTmFtZTogc3RyaW5nKTogTW9tZW50IHtcbiAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5nZXRPZmZsaW5lRmVhdHVyZShmZWF0dXJlTmFtZSk7XG4gICAgcmV0dXJuIGZlYXR1cmUgJiYgZnJvbURhdGVJU09TdHJpbmcoZmVhdHVyZS5sYXN0U3luY0RhdGUpO1xuICB9XG5cbiAgaGFzT2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoZmVhdHVyZU5hbWUpIHJldHVybiBpc05vdE5pbCh0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEgJiYgaXNOb3RFbXB0eUFycmF5KHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzKTtcbiAgfVxuXG4gIHNhdmVPZmZsaW5lRmVhdHVyZShmZWF0dXJlOiBPZmZsaW5lRmVhdHVyZSkge1xuICAgIHRoaXMuX2RhdGEgPSB0aGlzLl9kYXRhIHx8IHRoaXMuZGVmYXVsdFNldHRpbmdzO1xuICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgfHwgW107XG5cbiAgICBmZWF0dXJlLm5hbWUgPSBmZWF0dXJlLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IGZlYXR1cmVQcmVmaXggPSBmZWF0dXJlLm5hbWUgKyAnIyc7XG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzLmZpbmRJbmRleChmID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZiA9PT0gJ3N0cmluZycpIHJldHVybiBmLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChmZWF0dXJlUHJlZml4KTtcbiAgICAgIGlmIChmICYmIHR5cGVvZiBmID09PSAnb2JqZWN0JyAmJiBmLm5hbWUpIHJldHVybiBmLm5hbWUgPT09IGZlYXR1cmUubmFtZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzW2V4aXN0aW5nSW5kZXhdID0gZmVhdHVyZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5nc1xuICAgIHRoaXMucGVyc2lzdExvY2FsbHkoKTtcbiAgfVxuXG4gIG1hcmtPZmZsaW5lRmVhdHVyZUFzU3luYyhmZWF0dXJlTmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IGZlYXR1cmUgPSB0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKTtcblxuICAgIGlmICghZmVhdHVyZSkge1xuICAgICAgZmVhdHVyZSA9IDxPZmZsaW5lRmVhdHVyZT57XG4gICAgICAgIG5hbWU6IGZlYXR1cmVOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGxhc3RTeW5jRGF0ZTogRGF0ZVV0aWxzLm1vbWVudCgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZmVhdHVyZS5sYXN0U3luY0RhdGUgPSBEYXRlVXRpbHMubW9tZW50KCkudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNhdmVPZmZsaW5lRmVhdHVyZShmZWF0dXJlKTtcbiAgfVxuXG4gIHJlbW92ZU9mZmxpbmVGZWF0dXJlcygpIHtcbiAgICBpZiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcykge1xuICAgICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgPSBbXTtcblxuICAgICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmllbGREaXNwbGF5QXR0cmlidXRlcyhmaWVsZE5hbWU6IHN0cmluZywgZGVmYXVsdEF0dHJpYnV0ZXM/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzICYmICB0aGlzLl9kYXRhLnByb3BlcnRpZXNbYHN1bWFyaXMuZmllbGQuJHtmaWVsZE5hbWV9LmF0dHJpYnV0ZXNgXTtcbiAgICAvLyBOb3RoaW5nIGZvdW5kIGluIHNldHRpbmdzOiByZXR1cm4gZGVmYXVsdHNcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gZGVmYXVsdEF0dHJpYnV0ZXMgfHwgWydsYWJlbCcsICduYW1lJ107XG5cbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoJywnKTtcbiAgfVxuXG4gIGdldFBhZ2VGaWVsZERlZmF1bHRWYWx1ZShwYWdlSWQ6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2VTZXR0aW5ncyhwYWdlSWQsIGBmaWVsZC4ke2ZpZWxkTmFtZX0uZGVmYXVsdFZhbHVlYCk7XG4gIH1cblxuICBnZXQgb3B0aW9uRGVmcygpOiBGb3JtRmllbGREZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25EZWZzO1xuICB9XG5cbiAgcmVnaXN0ZXJPcHRpb24oZGVmOiBGb3JtRmllbGREZWZpbml0aW9uKSB7XG4gICAgaWYgKHRoaXMuX29wdGlvbkRlZnMuZmluZEluZGV4KGYgPT4gZi5rZXkgPT09IGRlZi5rZXkpICE9PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZGRpdGlvbmFsIGFkZGl0aW9uYWwgcHJvcGVydHkgeyR7ZGVmLmtleX19IGFscmVhZHkgZGVmaW5lLmApO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtzZXR0aW5nc10gQWRkaW5nIGFkZGl0aW9uYWwgcHJvcGVydHkgeyR7ZGVmLmtleX19YCwgZGVmKTtcbiAgICB0aGlzLl9vcHRpb25EZWZzLnB1c2goZGVmKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT3B0aW9ucyhkZWZzOiBGb3JtRmllbGREZWZpbml0aW9uW10pIHtcbiAgICAoZGVmcyB8fCBbXSkuZm9yRWFjaChkZWYgPT4gdGhpcy5yZWdpc3Rlck9wdGlvbihkZWYpKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFRvUGFnZUhpc3RvcnkocGFnZTogSGlzdG9yeVBhZ2VSZWZlcmVuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IEFkZFRvUGFnZUhpc3RvcnlPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VIaXN0b3J5PzogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSAvLyB1c2VkIGZvciByZWN1cnNpdmUgY2FsbCB0byBjaGlsZHJlblxuICApIHtcbiAgICAvLyBJZiBub3QgaW5zaWRlIHJlY3Vyc2l2ZSBjYWxsOiBmaWxsIHBhZ2UgaGlzdG9yeSBkZWZhdWx0c1xuICAgIGlmICghcGFnZUhpc3RvcnkpIHRoaXMuZmlsbFBhZ2VIaXN0b3J5RGVmYXVsdHMocGFnZSwgb3B0cyk7XG5cbiAgICBwYWdlSGlzdG9yeSA9IHBhZ2VIaXN0b3J5IHx8IHRoaXMuX2RhdGEucGFnZUhpc3Rvcnk7XG5cbiAgICBjb25zdCBpbmRleCA9IHBhZ2VIaXN0b3J5LmZpbmRJbmRleChwID0+IChcbiAgICAgIC8vIHNhbWUgcGF0aFxuICAgICAgcC5wYXRoID09PSBwYWdlLnBhdGhcbiAgICAgIC8vIG9yIHN1Yi1wYXRoXG4gICAgICB8fCBwYWdlLnBhdGguc3RhcnRzV2l0aChwLnBhdGggKyAnLycpKVxuICAgICk7XG5cbiAgICAvLyBOZXcgcGFnZTogaW5zZXJ0IGl0XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgLy9pZiAodGhpcy5fZGVidWcpXG4gICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIEFkZGluZyBwYWdlIHRvIGhpc3Rvcnk6ICcsIHBhZ2UpO1xuXG4gICAgICAvLyBQcmVwZW5kIHRvIGxpc3RcbiAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZSgwLCAwLCBwYWdlKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nUGFnZSA9IHBhZ2VIaXN0b3J5W2luZGV4XTtcblxuICAgICAgLy8gU2FtZSBwYXRoOiByZXBsYWNlIGV4aXN0aW5nIHBhZ2VcbiAgICAgIGlmIChwYWdlSGlzdG9yeVtpbmRleF0ucGF0aCA9PT0gcGFnZS5wYXRoKSB7XG4gICAgICAgIC8vaWYgKHRoaXMuX2RlYnVnKVxuICAgICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFVwZGF0aW5nIGV4aXN0aW5nIHBhZ2UgaW4gaGlzdG9yeTogJywgcGFnZSk7XG4gICAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gQ29weSBleGl0aW5nIGNoaWxkcmVuXG4gICAgICAgIHBhZ2UuY2hpbGRyZW4gPSBleGlzdGluZ1BhZ2UuY2hpbGRyZW4gfHwgW107XG5cbiAgICAgICAgLy8gUHJlcGVuZCB0byBsaXN0XG4gICAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZSgwLCAwLCBwYWdlKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm90IHNhbWUgcGF0aCAoc2hvdWxkIGJlIGEgcGFyZW50IHBhZ2UpXG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gQ3JlYXRlIHBhcmVudCdzIGNoaWxkcmVuIGFycmF5LCBpZiBub3QgZXhpc3RzXG4gICAgICAgIGV4aXN0aW5nUGFnZS5jaGlsZHJlbiA9IGV4aXN0aW5nUGFnZS5jaGlsZHJlbiB8fCBbXTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIHBhcmVudCB0aW1lXG4gICAgICAgIGV4aXN0aW5nUGFnZS50aW1lID0gcGFnZS50aW1lO1xuXG4gICAgICAgIC8vIEFkZCBwYWdlIGFzIHBhcmVudCdzIGNoaWxkcmVuIChyZWN1cnNpdmUgY2FsbClcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRUb1BhZ2VIaXN0b3J5KHBhZ2UsIG9wdHMsIGV4aXN0aW5nUGFnZS5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2NhbGx5IChvbmx5IGlmIG5vdCBhIHJlY3Vyc2l2ZSBleGVjdXRpb24pXG4gICAgaWYgKHBhZ2VIaXN0b3J5ID09PSB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSB7XG5cbiAgICAgIC8vIElmIG1heCBoYXMgYmVlbiByZWFjaGVkLCByZW1vdmUgb2xkIHBhZ2VzXG4gICAgICBpZiAodGhpcy5fZGF0YS5wYWdlSGlzdG9yeS5sZW5ndGggPiB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5TWF4U2l6ZSkge1xuICAgICAgICBjb25zdCByZW1vdmVkUGFnZXMgPSBwYWdlSGlzdG9yeS5zcGxpY2UodGhpcy5fZGF0YS5wYWdlSGlzdG9yeU1heFNpemUsIHBhZ2VIaXN0b3J5Lmxlbmd0aCAtIHRoaXMuX2RhdGEucGFnZUhpc3RvcnlNYXhTaXplKTtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBQYWdlcyByZW1vdmVkIGZyb20gaGlzdG9yeTogJywgcmVtb3ZlZFBhZ2VzKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgbmV3IHZhbHVlXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgcGFnZUhpc3RvcnkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVBhZ2VIaXN0b3J5KHBhdGg6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFuIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VIaXN0b3J5PzogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSAvLyB1c2VkIGZvciByZWN1cnNpdmUgY2FsbCB0byBjaGlsZHJlbilcbiAgKSB7XG4gICAgcGFnZUhpc3RvcnkgPSBwYWdlSGlzdG9yeSB8fCB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5O1xuXG4gICAgY29uc3QgaW5kZXggPSBwYWdlSGlzdG9yeS5maW5kSW5kZXgocCA9PiBwLnBhdGggPT09IHBhdGgpO1xuICAgIGxldCBmb3VuZCA9IGluZGV4ICE9PSAtMTtcbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gUmVtb3ZlIHBhZ2UgaGlzdG9yeTogJywgcGF0aCk7XG4gICAgICAvLyBSZW1vdmUgdmFsdWVcbiAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gU2VhcmNoIHBhdGggb24gY2hpbGRyZW4gKHN0b3Agd2hlbiBmb3VuZClcbiAgICAgIGZvdW5kID0gcGFnZUhpc3RvcnlcbiAgICAgICAgLm1hcChwID0+IHAuY2hpbGRyZW4pXG4gICAgICAgIC5maWx0ZXIoaXNOb3RFbXB0eUFycmF5KVxuICAgICAgICAuZmluZEluZGV4KGNoaWxkcmVuID0+IHRoaXMucmVtb3ZlUGFnZUhpc3RvcnkocGF0aCwgb3B0cywgY2hpbGRyZW4pKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2NhbGx5IChvbmx5IGlmIG5vdCBhIHJlY3Vyc2l2ZSBleGVjdXRpb24pXG4gICAgaWYgKGZvdW5kICYmIHBhZ2VIaXN0b3J5ID09PSB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSB7XG4gICAgICAvLyBBcHBseSBjaGFuZ2VzXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgdGhpcy5fZGF0YS5wYWdlSGlzdG9yeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJQYWdlSGlzdG9yeSgpIHtcbiAgICAvLyBSZXNldCBhbGwgcGFnZSBoaXN0b3J5XG4gICAgYXdhaXQgdGhpcy5hcHBseVByb3BlcnR5KCdwYWdlSGlzdG9yeScsIFtdLCB7cGVyc2lzdEltbWVkaWF0ZTogdHJ1ZX0pO1xuICB9XG5cbiAgLyogLS0gUHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZXNldERhdGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXREYXRhKCkge1xuICAgIHRoaXMuX2RhdGEgPSB7Li4udGhpcy5fZGF0YSwgLi4udGhpcy5kZWZhdWx0U2V0dGluZ3N9O1xuXG4gICAgdGhpcy5fZGF0YS5sb2NhbGUgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0aGlzLnRyYW5zbGF0ZS5kZWZhdWx0TGFuZztcbiAgICB0aGlzLl9kYXRhLm1vYmlsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kYXRhLnVzYWdlTW9kZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5ID0gW107XG5cbiAgICBjb25zdCBkZWZhdWx0UGVlciA9IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIgJiYgUGVlci5mcm9tT2JqZWN0KHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIpO1xuICAgIHRoaXMuX2RhdGEucGVlclVybCA9IGRlZmF1bHRQZWVyICYmIGRlZmF1bHRQZWVyLnVybCB8fCB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5zdGFydGVkKSB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIHBlcnNpc3RMb2NhbGx5KGltbWVkaWF0ZT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuXG4gICAgLy8gRXhlY3V0ZSBpbW1lZGlhdGVcbiAgICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICBpZiAoIXRoaXMuX2RhdGEpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBSZW1vdmluZyBsb2NhbCBzZXR0aW5ncyBmcm9tIHN0b3JhZ2UnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VUVElOR1NfU1RPUkFHRV9LRVkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gU3RvcmUgbG9jYWwgc2V0dGluZ3MnLCB0aGlzLl9kYXRhKTtcbiAgICAgICAgaWYgKHRoaXMuX3NlcmlhbGl6ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgLy8gRml4IHNlcmlhbGl6YXRpb24gZXJyb3IsIGluIFN1bWFyaXMtQXBwXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5zZXQoU0VUVElOR1NfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMuX2RhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLnNldChTRVRUSU5HU19TVE9SQUdFX0tFWSwgdGhpcy5fZGF0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSB3aXRoIGRlbGF5XG4gICAgZWxzZSB7XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgZXZlbnQgZW1pdHRlclxuICAgICAgaWYgKCF0aGlzLl8kcGVyc2lzdCkge1xuICAgICAgICB0aGlzLl8kcGVyc2lzdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55Pih0cnVlKTtcbiAgICAgICAgdGhpcy5fJHBlcnNpc3RcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDAwKSwgLy8gYWRkIGEgZGVsYXkgb2YgMnNcbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnN0YXJ0ZWQpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wZXJzaXN0TG9jYWxseSh0cnVlKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuXyRwZXJzaXN0LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbGxQYWdlSGlzdG9yeURlZmF1bHRzKHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLCBvcHRzPzoge1xuICAgICAgcmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zPzogYm9vbGVhbjtcbiAgICByZW1vdmVUaXRsZVNtYWxsVGFnPzogYm9vbGVhbjtcbiAgfSk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlIHtcbiAgICBpZiAoIXBhZ2UgfHwgIXBhZ2UudGl0bGUgfHwgIXBhZ2UucGF0aCkgdGhyb3cgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgXFwncGFnZVxcJywgXFwncGFnZS5wYXRoXFwnIG9yIFxcJ3BhZ2UudGl0bGVcXCcnKTtcblxuICAgIC8vIFNldCB0aW1lXG4gICAgcGFnZS50aW1lID0gcGFnZS50aW1lIHx8IERhdGVVdGlscy5tb21lbnQoKTtcblxuICAgIC8vIENsZWFuIHRoZSB0aXRsZSAocmVtb3ZlIDxzbWFsbD4gdGFncylcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5yZW1vdmVUaXRsZVNtYWxsVGFnICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgdGFnSW5kZXggPSBwYWdlLnRpdGxlLmluZGV4T2YoJzwvc21hbGw+Jyk7XG4gICAgICBpZiAodGFnSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHBhZ2UudGl0bGUgPSBwYWdlLnRpdGxlLnN1YnN0cmluZyh0YWdJbmRleCArICc8L3NtYWxsPicubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHBhZ2UudGl0bGUgPSBwYWdlLnRpdGxlLnJlcGxhY2UoL1sgXSpjbGFzcz0naGlkZGVuLXhzIGhpZGRlbi1zbScvZywgJycpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBxdWVyeSBwYXJhbXNcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5yZW1vdmVQYXRoUXVlcnlQYXJhbXMgIT09IGZhbHNlKSB7XG4gICAgICBwYWdlLnBhdGggPSBwYWdlLnBhdGgucmVwbGFjZSgvWz9dLiokLywgJycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWdlO1xuICB9XG59XG4iXX0=