@angular-architects/ngrx-toolkit 0.4.0 → 18.0.0

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 (33) hide show
  1. package/README.md +47 -2
  2. package/esm2022/index.mjs +2 -2
  3. package/esm2022/lib/assertions/assertions.mjs +1 -1
  4. package/esm2022/lib/redux-connector/create-redux.mjs +1 -1
  5. package/esm2022/lib/redux-connector/model.mjs +1 -1
  6. package/esm2022/lib/redux-connector/rxjs-interop/redux-method.mjs +1 -1
  7. package/esm2022/lib/redux-connector/signal-redux-store.mjs +4 -4
  8. package/esm2022/lib/shared/prettify.mjs +2 -0
  9. package/esm2022/lib/shared/signal-store-models.mjs +2 -0
  10. package/esm2022/lib/with-call-state.mjs +6 -4
  11. package/esm2022/lib/with-data-service.mjs +73 -32
  12. package/esm2022/lib/with-devtools.mjs +5 -5
  13. package/esm2022/lib/with-pagination.mjs +70 -13
  14. package/esm2022/lib/with-redux.mjs +1 -1
  15. package/esm2022/lib/with-storage-sync.mjs +1 -1
  16. package/esm2022/lib/with-undo-redo.mjs +25 -11
  17. package/fesm2022/angular-architects-ngrx-toolkit.mjs +274 -160
  18. package/fesm2022/angular-architects-ngrx-toolkit.mjs.map +1 -1
  19. package/index.d.ts +1 -1
  20. package/lib/redux-connector/model.d.ts +6 -7
  21. package/lib/redux-connector/signal-redux-store.d.ts +2 -2
  22. package/lib/shared/prettify.d.ts +3 -0
  23. package/lib/shared/signal-store-models.d.ts +26 -0
  24. package/lib/with-call-state.d.ts +5 -16
  25. package/lib/with-data-service.d.ts +14 -20
  26. package/lib/with-devtools.d.ts +5 -10
  27. package/lib/with-pagination.d.ts +50 -27
  28. package/lib/with-redux.d.ts +2 -4
  29. package/lib/with-storage-sync.d.ts +4 -10
  30. package/lib/with-undo-redo.d.ts +13 -27
  31. package/package.json +2 -2
  32. package/esm2022/lib/shared/empty.mjs +0 -2
  33. package/lib/shared/empty.d.ts +0 -1
@@ -1,27 +1,57 @@
1
- import { computed, inject } from "@angular/core";
2
- import { patchState, signalStoreFeature, withComputed, withMethods, withState } from "@ngrx/signals";
3
- import { getCallStateKeys, setError, setLoaded, setLoading } from "./with-call-state";
4
- import { setAllEntities, addEntity, updateEntity, removeEntity } from "@ngrx/signals/entities";
1
+ import { computed, inject } from '@angular/core';
2
+ import { patchState, signalStoreFeature, withComputed, withMethods, withState, } from '@ngrx/signals';
3
+ import { getCallStateKeys, setError, setLoaded, setLoading, } from './with-call-state';
4
+ import { setAllEntities, addEntity, updateEntity, removeEntity, } from '@ngrx/signals/entities';
5
5
  export function capitalize(str) {
6
6
  return str ? str[0].toUpperCase() + str.substring(1) : str;
7
7
  }
8
8
  export function getDataServiceKeys(options) {
9
- const filterKey = options.collection ? `${options.collection}Filter` : 'filter';
10
- const selectedIdsKey = options.collection ? `selected${capitalize(options.collection)}Ids` : 'selectedIds';
11
- const selectedEntitiesKey = options.collection ? `selected${capitalize(options.collection)}Entities` : 'selectedEntities';
12
- const updateFilterKey = options.collection ? `update${capitalize(options.collection)}Filter` : 'updateFilter';
13
- const updateSelectedKey = options.collection ? `updateSelected${capitalize(options.collection)}Entities` : 'updateSelected';
14
- const loadKey = options.collection ? `load${capitalize(options.collection)}Entities` : 'load';
15
- const currentKey = options.collection ? `current${capitalize(options.collection)}` : 'current';
16
- const loadByIdKey = options.collection ? `load${capitalize(options.collection)}ById` : 'loadById';
17
- const setCurrentKey = options.collection ? `setCurrent${capitalize(options.collection)}` : 'setCurrent';
18
- const createKey = options.collection ? `create${capitalize(options.collection)}` : 'create';
19
- const updateKey = options.collection ? `update${capitalize(options.collection)}` : 'update';
20
- const updateAllKey = options.collection ? `updateAll${capitalize(options.collection)}` : 'updateAll';
21
- const deleteKey = options.collection ? `delete${capitalize(options.collection)}` : 'delete';
9
+ const filterKey = options.collection
10
+ ? `${options.collection}Filter`
11
+ : 'filter';
12
+ const selectedIdsKey = options.collection
13
+ ? `selected${capitalize(options.collection)}Ids`
14
+ : 'selectedIds';
15
+ const selectedEntitiesKey = options.collection
16
+ ? `selected${capitalize(options.collection)}Entities`
17
+ : 'selectedEntities';
18
+ const updateFilterKey = options.collection
19
+ ? `update${capitalize(options.collection)}Filter`
20
+ : 'updateFilter';
21
+ const updateSelectedKey = options.collection
22
+ ? `updateSelected${capitalize(options.collection)}Entities`
23
+ : 'updateSelected';
24
+ const loadKey = options.collection
25
+ ? `load${capitalize(options.collection)}Entities`
26
+ : 'load';
27
+ const currentKey = options.collection
28
+ ? `current${capitalize(options.collection)}`
29
+ : 'current';
30
+ const loadByIdKey = options.collection
31
+ ? `load${capitalize(options.collection)}ById`
32
+ : 'loadById';
33
+ const setCurrentKey = options.collection
34
+ ? `setCurrent${capitalize(options.collection)}`
35
+ : 'setCurrent';
36
+ const createKey = options.collection
37
+ ? `create${capitalize(options.collection)}`
38
+ : 'create';
39
+ const updateKey = options.collection
40
+ ? `update${capitalize(options.collection)}`
41
+ : 'update';
42
+ const updateAllKey = options.collection
43
+ ? `updateAll${capitalize(options.collection)}`
44
+ : 'updateAll';
45
+ const deleteKey = options.collection
46
+ ? `delete${capitalize(options.collection)}`
47
+ : 'delete';
22
48
  // TODO: Take these from @ngrx/signals/entities, when they are exported
23
- const entitiesKey = options.collection ? `${options.collection}Entities` : 'entities';
24
- const entityMapKey = options.collection ? `${options.collection}EntityMap` : 'entityMap';
49
+ const entitiesKey = options.collection
50
+ ? `${options.collection}Entities`
51
+ : 'entities';
52
+ const entityMapKey = options.collection
53
+ ? `${options.collection}EntityMap`
54
+ : 'entityMap';
25
55
  const idsKey = options.collection ? `${options.collection}Ids` : 'ids';
26
56
  return {
27
57
  filterKey,
@@ -39,23 +69,23 @@ export function getDataServiceKeys(options) {
39
69
  createKey,
40
70
  updateKey,
41
71
  updateAllKey,
42
- deleteKey
72
+ deleteKey,
43
73
  };
44
74
  }
45
75
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
76
  export function withDataService(options) {
47
77
  const { dataServiceType, filter, collection: prefix } = options;
48
- const { entitiesKey, filterKey, loadKey, selectedEntitiesKey, selectedIdsKey, updateFilterKey, updateSelectedKey, currentKey, createKey, updateKey, updateAllKey, deleteKey, loadByIdKey, setCurrentKey } = getDataServiceKeys(options);
78
+ const { entitiesKey, filterKey, loadKey, selectedEntitiesKey, selectedIdsKey, updateFilterKey, updateSelectedKey, currentKey, createKey, updateKey, updateAllKey, deleteKey, loadByIdKey, setCurrentKey, } = getDataServiceKeys(options);
49
79
  const { callStateKey } = getCallStateKeys({ collection: prefix });
50
80
  return signalStoreFeature(withState(() => ({
51
81
  [filterKey]: filter,
52
82
  [selectedIdsKey]: {},
53
- [currentKey]: undefined
83
+ [currentKey]: undefined,
54
84
  })), withComputed((store) => {
55
85
  const entities = store[entitiesKey];
56
86
  const selectedIds = store[selectedIdsKey];
57
87
  return {
58
- [selectedEntitiesKey]: computed(() => entities().filter(e => selectedIds()[e.id]))
88
+ [selectedEntitiesKey]: computed(() => entities().filter((e) => selectedIds()[e.id])),
59
89
  };
60
90
  }), withMethods((store) => {
61
91
  const dataService = inject(dataServiceType);
@@ -68,7 +98,7 @@ export function withDataService(options) {
68
98
  [selectedIdsKey]: {
69
99
  ...state[selectedIdsKey],
70
100
  [id]: selected,
71
- }
101
+ },
72
102
  }));
73
103
  },
74
104
  [loadKey]: async () => {
@@ -76,7 +106,9 @@ export function withDataService(options) {
76
106
  store[callStateKey] && patchState(store, setLoading(prefix));
77
107
  try {
78
108
  const result = await dataService.load(filter());
79
- patchState(store, prefix ? setAllEntities(result, { collection: prefix }) : setAllEntities(result));
109
+ patchState(store, prefix
110
+ ? setAllEntities(result, { collection: prefix })
111
+ : setAllEntities(result));
80
112
  store[callStateKey] && patchState(store, setLoaded(prefix));
81
113
  }
82
114
  catch (e) {
@@ -105,7 +137,9 @@ export function withDataService(options) {
105
137
  try {
106
138
  const created = await dataService.create(entity);
107
139
  patchState(store, { [currentKey]: created });
108
- patchState(store, prefix ? addEntity(created, { collection: prefix }) : addEntity(created));
140
+ patchState(store, prefix
141
+ ? addEntity(created, { collection: prefix })
142
+ : addEntity(created));
109
143
  store[callStateKey] && patchState(store, setLoaded(prefix));
110
144
  }
111
145
  catch (e) {
@@ -119,9 +153,12 @@ export function withDataService(options) {
119
153
  try {
120
154
  const updated = await dataService.update(entity);
121
155
  patchState(store, { [currentKey]: updated });
122
- // Why do we need this cast to Partial<Entity>?
123
- const updateArg = { id: updated.id, changes: updated };
124
- patchState(store, prefix ? updateEntity(updateArg, { collection: prefix }) : updateEntity(updateArg));
156
+ const updateArg = {
157
+ id: updated.id,
158
+ changes: updated,
159
+ };
160
+ const updater = (collection) => updateEntity(updateArg, { collection });
161
+ patchState(store, prefix ? updater(prefix) : updateEntity(updateArg));
125
162
  store[callStateKey] && patchState(store, setLoaded(prefix));
126
163
  }
127
164
  catch (e) {
@@ -133,7 +170,9 @@ export function withDataService(options) {
133
170
  store[callStateKey] && patchState(store, setLoading(prefix));
134
171
  try {
135
172
  const result = await dataService.updateAll(entities);
136
- patchState(store, prefix ? setAllEntities(result, { collection: prefix }) : setAllEntities(result));
173
+ patchState(store, prefix
174
+ ? setAllEntities(result, { collection: prefix })
175
+ : setAllEntities(result));
137
176
  store[callStateKey] && patchState(store, setLoaded(prefix));
138
177
  }
139
178
  catch (e) {
@@ -147,7 +186,9 @@ export function withDataService(options) {
147
186
  try {
148
187
  await dataService.delete(entity);
149
188
  patchState(store, { [currentKey]: undefined });
150
- patchState(store, prefix ? removeEntity(entity.id, { collection: prefix }) : removeEntity(entity.id));
189
+ patchState(store, prefix
190
+ ? removeEntity(entity.id, { collection: prefix })
191
+ : removeEntity(entity.id));
151
192
  store[callStateKey] && patchState(store, setLoaded(prefix));
152
193
  }
153
194
  catch (e) {
@@ -158,4 +199,4 @@ export function withDataService(options) {
158
199
  };
159
200
  }));
160
201
  }
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kYXRhLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3dpdGgtZGF0YS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBeUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQXNCLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SCxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsY0FBYyxFQUFZLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFpQnpHLE1BQU0sVUFBVSxVQUFVLENBQUMsR0FBVztJQUNsQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BQWdDO0lBQy9ELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFVBQVUsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDaEYsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztJQUMzRyxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxVQUFVLENB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LENBQUM7b0JBQzlELE1BQU0sQ0FBQyxDQUFDO2lCQUNYO1lBQ0wsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDLENBQUMsQ0FDTCxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3ZpZGVyVG9rZW4sIFNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBTaWduYWxTdG9yZUZlYXR1cmUsIHBhdGNoU3RhdGUsIHNpZ25hbFN0b3JlRmVhdHVyZSwgd2l0aENvbXB1dGVkLCB3aXRoTWV0aG9kcywgd2l0aFN0YXRlIH0gZnJvbSBcIkBuZ3J4L3NpZ25hbHNcIjtcbmltcG9ydCB7IENhbGxTdGF0ZSwgZ2V0Q2FsbFN0YXRlS2V5cywgc2V0RXJyb3IsIHNldExvYWRlZCwgc2V0TG9hZGluZyB9IGZyb20gXCIuL3dpdGgtY2FsbC1zdGF0ZVwiO1xuaW1wb3J0IHsgc2V0QWxsRW50aXRpZXMsIEVudGl0eUlkLCBhZGRFbnRpdHksIHVwZGF0ZUVudGl0eSwgcmVtb3ZlRW50aXR5IH0gZnJvbSBcIkBuZ3J4L3NpZ25hbHMvZW50aXRpZXNcIjtcbmltcG9ydCB7IEVudGl0eVN0YXRlLCBOYW1lZEVudGl0eVNpZ25hbHMgfSBmcm9tIFwiQG5ncngvc2lnbmFscy9lbnRpdGllcy9zcmMvbW9kZWxzXCI7XG5pbXBvcnQgeyBTdGF0ZVNpZ25hbCB9IGZyb20gXCJAbmdyeC9zaWduYWxzL3NyYy9zdGF0ZS1zaWduYWxcIjtcbmltcG9ydCB7IEVtdHB5IH0gZnJvbSBcIi4vc2hhcmVkL2VtcHR5XCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlciA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuZXhwb3J0IHR5cGUgRW50aXR5ID0geyBpZDogRW50aXR5SWQgfTtcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhU2VydmljZTxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyPiB7XG4gICAgbG9hZChmaWx0ZXI6IEYpOiBQcm9taXNlPEVbXT47XG4gICAgbG9hZEJ5SWQoaWQ6IEVudGl0eUlkKTogUHJvbWlzZTxFPjtcbiAgICBjcmVhdGUoZW50aXR5OiBFKTogUHJvbWlzZTxFPjtcbiAgICB1cGRhdGUoZW50aXR5OiBFKTogUHJvbWlzZTxFPjtcbiAgICB1cGRhdGVBbGwoZW50aXR5OiBFW10pOiBQcm9taXNlPEVbXT47XG4gICAgZGVsZXRlKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXBpdGFsaXplKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyID8gc3RyWzBdLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpIDogc3RyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YVNlcnZpY2VLZXlzKG9wdGlvbnM6IHsgY29sbGVjdGlvbj86IHN0cmluZyB9KSB7XG4gICAgY29uc3QgZmlsdGVyS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufUZpbHRlcmAgOiAnZmlsdGVyJztcbiAgICBjb25zdCBzZWxlY3RlZElkc0tleSA9IG9wdGlvbnMuY29sbGVjdGlvbiA/IGBzZWxlY3RlZCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfUlkc2AgOiAnc2VsZWN0ZWRJZHMnO1xuICAgIGNvbnN0IHNlbGVjdGVkRW50aXRpZXNLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgc2VsZWN0ZWQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1FbnRpdGllc2AgOiAnc2VsZWN0ZWRFbnRpdGllcyc7XG5cbiAgICBjb25zdCB1cGRhdGVGaWx0ZXJLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgdXBkYXRlJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9RmlsdGVyYCA6ICd1cGRhdGVGaWx0ZXInO1xuICAgIGNvbnN0IHVwZGF0ZVNlbGVjdGVkS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYHVwZGF0ZVNlbGVjdGVkJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9RW50aXRpZXNgIDogJ3VwZGF0ZVNlbGVjdGVkJztcbiAgICBjb25zdCBsb2FkS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYGxvYWQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1FbnRpdGllc2AgOiAnbG9hZCc7XG5cbiAgICBjb25zdCBjdXJyZW50S2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYGN1cnJlbnQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1gIDogJ2N1cnJlbnQnO1xuICAgIGNvbnN0IGxvYWRCeUlkS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYGxvYWQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1CeUlkYCA6ICdsb2FkQnlJZCc7XG4gICAgY29uc3Qgc2V0Q3VycmVudEtleSA9IG9wdGlvbnMuY29sbGVjdGlvbiA/IGBzZXRDdXJyZW50JHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9YCA6ICdzZXRDdXJyZW50JztcbiAgICBjb25zdCBjcmVhdGVLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgY3JlYXRlJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9YCA6ICdjcmVhdGUnO1xuICAgIGNvbnN0IHVwZGF0ZUtleSA9IG9wdGlvbnMuY29sbGVjdGlvbiA/IGB1cGRhdGUke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1gIDogJ3VwZGF0ZSc7XG4gICAgY29uc3QgdXBkYXRlQWxsS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYHVwZGF0ZUFsbCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfWAgOiAndXBkYXRlQWxsJztcbiAgICBjb25zdCBkZWxldGVLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgZGVsZXRlJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9YCA6ICdkZWxldGUnO1xuXG4gICAgLy8gVE9ETzogVGFrZSB0aGVzZSBmcm9tIEBuZ3J4L3NpZ25hbHMvZW50aXRpZXMsIHdoZW4gdGhleSBhcmUgZXhwb3J0ZWRcbiAgICBjb25zdCBlbnRpdGllc0tleSA9IG9wdGlvbnMuY29sbGVjdGlvbiA/IGAke29wdGlvbnMuY29sbGVjdGlvbn1FbnRpdGllc2AgOiAnZW50aXRpZXMnO1xuICAgIGNvbnN0IGVudGl0eU1hcEtleSA9IG9wdGlvbnMuY29sbGVjdGlvbiA/IGAke29wdGlvbnMuY29sbGVjdGlvbn1FbnRpdHlNYXBgIDogJ2VudGl0eU1hcCc7XG4gICAgY29uc3QgaWRzS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufUlkc2AgOiAnaWRzJztcblxuICAgIHJldHVybiB7XG4gICAgICAgIGZpbHRlcktleSxcbiAgICAgICAgc2VsZWN0ZWRJZHNLZXksXG4gICAgICAgIHNlbGVjdGVkRW50aXRpZXNLZXksXG4gICAgICAgIHVwZGF0ZUZpbHRlcktleSxcbiAgICAgICAgdXBkYXRlU2VsZWN0ZWRLZXksXG4gICAgICAgIGxvYWRLZXksXG4gICAgICAgIGVudGl0aWVzS2V5LFxuICAgICAgICBlbnRpdHlNYXBLZXksXG4gICAgICAgIGlkc0tleSxcblxuICAgICAgICBjdXJyZW50S2V5LFxuICAgICAgICBsb2FkQnlJZEtleSxcbiAgICAgICAgc2V0Q3VycmVudEtleSxcbiAgICAgICAgY3JlYXRlS2V5LFxuICAgICAgICB1cGRhdGVLZXksXG4gICAgICAgIHVwZGF0ZUFsbEtleSxcbiAgICAgICAgZGVsZXRlS2V5XG4gICAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTmFtZWREYXRhU2VydmljZVN0YXRlPEUgZXh0ZW5kcyBFbnRpdHksIEYgZXh0ZW5kcyBGaWx0ZXIsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+ID1cbiAgICB7XG4gICAgICAgIFtLIGluIENvbGxlY3Rpb24gYXMgYCR7S31GaWx0ZXJgXTogRjtcbiAgICB9ICYge1xuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBzZWxlY3RlZCR7Q2FwaXRhbGl6ZTxLPn1JZHNgXTogUmVjb3JkPEVudGl0eUlkLCBib29sZWFuPjtcbiAgICB9ICYge1xuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBjdXJyZW50JHtDYXBpdGFsaXplPEs+fWBdOiBFO1xuICAgIH1cblxuZXhwb3J0IHR5cGUgRGF0YVNlcnZpY2VTdGF0ZTxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyPiA9IHtcbiAgICBmaWx0ZXI6IEY7XG4gICAgc2VsZWN0ZWRJZHM6IFJlY29yZDxFbnRpdHlJZCwgYm9vbGVhbj47XG4gICAgY3VycmVudDogRTtcbn1cblxuZXhwb3J0IHR5cGUgTmFtZWREYXRhU2VydmljZVNpZ25hbHM8RSBleHRlbmRzIEVudGl0eSwgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4gPVxuICAgIHtcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgc2VsZWN0ZWQke0NhcGl0YWxpemU8Sz59RW50aXRpZXNgXTogU2lnbmFsPEVbXT47XG4gICAgfVxuXG5leHBvcnQgdHlwZSBEYXRhU2VydmljZVNpZ25hbHM8RSBleHRlbmRzIEVudGl0eT4gPVxuICAgIHtcbiAgICAgICAgc2VsZWN0ZWRFbnRpdGllczogU2lnbmFsPEVbXT47XG4gICAgfVxuXG5leHBvcnQgdHlwZSBOYW1lZERhdGFTZXJ2aWNlTWV0aG9kczxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyLCBDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPiA9XG4gICAge1xuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGB1cGRhdGUke0NhcGl0YWxpemU8Sz59RmlsdGVyYF06IChmaWx0ZXI6IEYpID0+IHZvaWQ7XG4gICAgfSAmXG4gICAge1xuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGB1cGRhdGVTZWxlY3RlZCR7Q2FwaXRhbGl6ZTxLPn1FbnRpdGllc2BdOiAoaWQ6IEVudGl0eUlkLCBzZWxlY3RlZDogYm9vbGVhbikgPT4gdm9pZDtcbiAgICB9ICZcbiAgICB7XG4gICAgICAgIFtLIGluIENvbGxlY3Rpb24gYXMgYGxvYWQke0NhcGl0YWxpemU8Sz59RW50aXRpZXNgXTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICB9ICZcblxuICAgIHtcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgc2V0Q3VycmVudCR7Q2FwaXRhbGl6ZTxLPn1gXTogKGVudGl0eTogRSkgPT4gdm9pZDtcbiAgICB9ICZcbiAgICB7XG4gICAgICAgIFtLIGluIENvbGxlY3Rpb24gYXMgYGxvYWQke0NhcGl0YWxpemU8Sz59QnlJZGBdOiAoaWQ6IEVudGl0eUlkKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIH0gJlxuICAgIHtcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgY3JlYXRlJHtDYXBpdGFsaXplPEs+fWBdOiAoZW50aXR5OiBFKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIH0gJlxuICAgIHtcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgdXBkYXRlJHtDYXBpdGFsaXplPEs+fWBdOiAoZW50aXR5OiBFKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIH0gJlxuICAgIHtcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgdXBkYXRlQWxsJHtDYXBpdGFsaXplPEs+fWBdOiAoZW50aXR5OiBFW10pID0+IFByb21pc2U8dm9pZD47XG4gICAgfSAmXG4gICAge1xuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBkZWxldGUke0NhcGl0YWxpemU8Sz59YF06IChlbnRpdHk6IEUpID0+IFByb21pc2U8dm9pZD47XG4gICAgfTtcblxuXG5leHBvcnQgdHlwZSBEYXRhU2VydmljZU1ldGhvZHM8RSBleHRlbmRzIEVudGl0eSwgRiBleHRlbmRzIEZpbHRlcj4gPVxuICAgIHtcbiAgICAgICAgdXBkYXRlRmlsdGVyOiAoZmlsdGVyOiBGKSA9PiB2b2lkO1xuICAgICAgICB1cGRhdGVTZWxlY3RlZDogKGlkOiBFbnRpdHlJZCwgc2VsZWN0ZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gICAgICAgIGxvYWQ6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgICAgICAgc2V0Q3VycmVudChlbnRpdHk6IEUpOiB2b2lkO1xuICAgICAgICBsb2FkQnlJZChpZDogRW50aXR5SWQpOiBQcm9taXNlPHZvaWQ+O1xuICAgICAgICBjcmVhdGUoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgdXBkYXRlKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD47XG4gICAgICAgIHVwZGF0ZUFsbChlbnRpdGllczogRVtdKTogUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgZGVsZXRlKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD47XG4gICAgfVxuXG5leHBvcnQgdHlwZSBFbXB0eSA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPlxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aERhdGFTZXJ2aWNlPEUgZXh0ZW5kcyBFbnRpdHksIEYgZXh0ZW5kcyBGaWx0ZXIsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KG9wdGlvbnM6IHsgZGF0YVNlcnZpY2VUeXBlOiBQcm92aWRlclRva2VuPERhdGFTZXJ2aWNlPEUsIEY+PiwgZmlsdGVyOiBGLCBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uIH0pOiBTaWduYWxTdG9yZUZlYXR1cmU8XG4gICAge1xuICAgICAgICBzdGF0ZTogRW10cHksXG4gICAgICAgIC8vIFRoZXNlIGFsdGVybmF0aXZlcyBicmVhayB0eXBlIGluZmVyZW5jZTpcbiAgICAgICAgLy8gc3RhdGU6IHsgY2FsbFN0YXRlOiBDYWxsU3RhdGUgfSAmIE5hbWVkRW50aXR5U3RhdGU8RSwgQ29sbGVjdGlvbj4sXG4gICAgICAgIC8vIHN0YXRlOiBOYW1lZEVudGl0eVN0YXRlPEUsIENvbGxlY3Rpb24+LFxuXG4gICAgICAgIHNpZ25hbHM6IE5hbWVkRW50aXR5U2lnbmFsczxFLCBDb2xsZWN0aW9uPixcbiAgICAgICAgbWV0aG9kczogRW10cHksXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHN0YXRlOiBOYW1lZERhdGFTZXJ2aWNlU3RhdGU8RSwgRiwgQ29sbGVjdGlvbj5cbiAgICAgICAgc2lnbmFsczogTmFtZWREYXRhU2VydmljZVNpZ25hbHM8RSwgQ29sbGVjdGlvbj5cbiAgICAgICAgbWV0aG9kczogTmFtZWREYXRhU2VydmljZU1ldGhvZHM8RSwgRiwgQ29sbGVjdGlvbj5cbiAgICB9XG4+O1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhEYXRhU2VydmljZTxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyPihvcHRpb25zOiB7IGRhdGFTZXJ2aWNlVHlwZTogUHJvdmlkZXJUb2tlbjxEYXRhU2VydmljZTxFLCBGPj4sIGZpbHRlcjogRiB9KTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICAgIHtcbiAgICAgICAgc3RhdGU6IHsgY2FsbFN0YXRlOiBDYWxsU3RhdGUgfSAmIEVudGl0eVN0YXRlPEU+XG4gICAgICAgIHNpZ25hbHM6IEVtdHB5LFxuICAgICAgICBtZXRob2RzOiBFbXRweSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgc3RhdGU6IERhdGFTZXJ2aWNlU3RhdGU8RSwgRj5cbiAgICAgICAgc2lnbmFsczogRGF0YVNlcnZpY2VTaWduYWxzPEU+XG4gICAgICAgIG1ldGhvZHM6IERhdGFTZXJ2aWNlTWV0aG9kczxFLCBGPlxuICAgIH0+O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhEYXRhU2VydmljZTxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyLCBDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPihvcHRpb25zOiB7IGRhdGFTZXJ2aWNlVHlwZTogUHJvdmlkZXJUb2tlbjxEYXRhU2VydmljZTxFLCBGPj4sIGZpbHRlcjogRiwgY29sbGVjdGlvbj86IENvbGxlY3Rpb24gfSk6IFNpZ25hbFN0b3JlRmVhdHVyZTxhbnksIGFueT4ge1xuICAgIGNvbnN0IHsgZGF0YVNlcnZpY2VUeXBlLCBmaWx0ZXIsIGNvbGxlY3Rpb246IHByZWZpeCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB7XG4gICAgICAgIGVudGl0aWVzS2V5LFxuICAgICAgICBmaWx0ZXJLZXksXG4gICAgICAgIGxvYWRLZXksXG4gICAgICAgIHNlbGVjdGVkRW50aXRpZXNLZXksXG4gICAgICAgIHNlbGVjdGVkSWRzS2V5LFxuICAgICAgICB1cGRhdGVGaWx0ZXJLZXksXG4gICAgICAgIHVwZGF0ZVNlbGVjdGVkS2V5LFxuXG4gICAgICAgIGN1cnJlbnRLZXksXG4gICAgICAgIGNyZWF0ZUtleSxcbiAgICAgICAgdXBkYXRlS2V5LFxuICAgICAgICB1cGRhdGVBbGxLZXksXG4gICAgICAgIGRlbGV0ZUtleSxcbiAgICAgICAgbG9hZEJ5SWRLZXksXG4gICAgICAgIHNldEN1cnJlbnRLZXlcbiAgICB9ID0gZ2V0RGF0YVNlcnZpY2VLZXlzKG9wdGlvbnMpO1xuXG4gICAgY29uc3QgeyBjYWxsU3RhdGVLZXkgfSA9IGdldENhbGxTdGF0ZUtleXMoeyBjb2xsZWN0aW9uOiBwcmVmaXggfSk7XG5cbiAgICByZXR1cm4gc2lnbmFsU3RvcmVGZWF0dXJlKFxuICAgICAgICB3aXRoU3RhdGUoKCkgPT4gKHtcbiAgICAgICAgICAgIFtmaWx0ZXJLZXldOiBmaWx0ZXIsXG4gICAgICAgICAgICBbc2VsZWN0ZWRJZHNLZXldOiB7fSBhcyBSZWNvcmQ8RW50aXR5SWQsIGJvb2xlYW4+LFxuICAgICAgICAgICAgW2N1cnJlbnRLZXldOiB1bmRlZmluZWQgYXMgRSB8IHVuZGVmaW5lZFxuICAgICAgICB9KSksXG4gICAgICAgIHdpdGhDb21wdXRlZCgoc3RvcmU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdGllcyA9IHN0b3JlW2VudGl0aWVzS2V5XSBhcyBTaWduYWw8RVtdPjtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gc3RvcmVbc2VsZWN0ZWRJZHNLZXldIGFzIFNpZ25hbDxSZWNvcmQ8RW50aXR5SWQsIGJvb2xlYW4+PjtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRFbnRpdGllc0tleV06IGNvbXB1dGVkKCgpID0+IGVudGl0aWVzKCkuZmlsdGVyKGUgPT4gc2VsZWN0ZWRJZHMoKVtlLmlkXSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB3aXRoTWV0aG9kcygoc3RvcmU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgU3RhdGVTaWduYWw8b2JqZWN0PikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNlcnZpY2UgPSBpbmplY3QoZGF0YVNlcnZpY2VUeXBlKVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBbdXBkYXRlRmlsdGVyS2V5XTogKGZpbHRlcjogRik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtmaWx0ZXJLZXldOiBmaWx0ZXIgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbdXBkYXRlU2VsZWN0ZWRLZXldOiAoaWQ6IEVudGl0eUlkLCBzZWxlY3RlZDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCAoc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkSWRzS2V5XToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlW3NlbGVjdGVkSWRzS2V5XSBhcyBSZWNvcmQ8RW50aXR5SWQsIGJvb2xlYW4+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF06IHNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbbG9hZEtleV06IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gc3RvcmVbZmlsdGVyS2V5XSBhcyBTaWduYWw8Rj47XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGluZyhwcmVmaXgpKTtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGF0YVNlcnZpY2UubG9hZChmaWx0ZXIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBwcmVmaXggPyBzZXRBbGxFbnRpdGllcyhyZXN1bHQsIHsgY29sbGVjdGlvbjogcHJlZml4IH0pIDogc2V0QWxsRW50aXRpZXMocmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRlZChwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtsb2FkQnlJZEtleV06IGFzeW5jIChpZDogRW50aXR5SWQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkaW5nKHByZWZpeCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgZGF0YVNlcnZpY2UubG9hZEJ5SWQoaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkZWQocHJlZml4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogY3VycmVudCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtzZXRDdXJyZW50S2V5XTogKGN1cnJlbnQ6IEUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGN1cnJlbnQgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbY3JlYXRlS2V5XTogYXN5bmMgKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogZW50aXR5IH0pO1xuICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRpbmcocHJlZml4KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBkYXRhU2VydmljZS5jcmVhdGUoZW50aXR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgW2N1cnJlbnRLZXldOiBjcmVhdGVkIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgcHJlZml4ID8gYWRkRW50aXR5KGNyZWF0ZWQsIHsgY29sbGVjdGlvbjogcHJlZml4IH0pIDogYWRkRW50aXR5KGNyZWF0ZWQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGVkKHByZWZpeCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldEVycm9yKGUsIHByZWZpeCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW3VwZGF0ZUtleV06IGFzeW5jIChlbnRpdHk6IEUpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGVudGl0eSB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkaW5nKHByZWZpeCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgZGF0YVNlcnZpY2UudXBkYXRlKGVudGl0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogdXBkYXRlZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoeSBkbyB3ZSBuZWVkIHRoaXMgY2FzdCB0byBQYXJ0aWFsPEVudGl0eT4/XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVBcmcgPSB7IGlkOiB1cGRhdGVkLmlkLCBjaGFuZ2VzOiB1cGRhdGVkIGFzIFBhcnRpYWw8RW50aXR5PiB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgcHJlZml4ID8gdXBkYXRlRW50aXR5KHVwZGF0ZUFyZywgeyBjb2xsZWN0aW9uOiBwcmVmaXggfSkgOiB1cGRhdGVFbnRpdHkodXBkYXRlQXJnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRlZChwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFt1cGRhdGVBbGxLZXldOiBhc3luYyAoZW50aXRpZXM6IEVbXSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkaW5nKHByZWZpeCkpO1xuXG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkYXRhU2VydmljZS51cGRhdGVBbGwoZW50aXRpZXMpO1xuICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBwcmVmaXggPyBzZXRBbGxFbnRpdGllcyhyZXN1bHQsIHsgY29sbGVjdGlvbjogcHJlZml4IH0pIDogc2V0QWxsRW50aXRpZXMocmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGVkKHByZWZpeCkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtkZWxldGVLZXldOiBhc3luYyAoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgW2N1cnJlbnRLZXldOiBlbnRpdHkgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGluZyhwcmVmaXgpKTtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZGF0YVNlcnZpY2UuZGVsZXRlKGVudGl0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogdW5kZWZpbmVkIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgcHJlZml4ID8gcmVtb3ZlRW50aXR5KGVudGl0eS5pZCwgeyBjb2xsZWN0aW9uOiBwcmVmaXggfSkgOiByZW1vdmVFbnRpdHkoZW50aXR5LmlkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRlZChwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICApO1xufVxuIl19
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kYXRhLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3dpdGgtZGF0YS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBeUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBRUwsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osV0FBVyxFQUNYLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixTQUFTLEVBQ1QsVUFBVSxHQUNYLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUNMLGNBQWMsRUFFZCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksR0FDYixNQUFNLHdCQUF3QixDQUFDO0FBb0JoQyxNQUFNLFVBQVUsVUFBVSxDQUFDLEdBQVc7SUFDcEMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDN0QsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxPQUFnQztJQUNqRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVTtRQUNsQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBVSxRQUFRO1FBQy9CLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDYixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsVUFBVTtRQUN2QyxDQUFDLENBQUMsV0FBVyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLO1FBQ2hELENBQUMsQ0FBQyxhQUFhLENBQUM7SUFDbEIsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsVUFB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O29CQUNGLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxDQUFDO2dCQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ1gsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUM5RCxNQUFNLENBQUMsQ0FBQztnQkFDVixDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDLENBQ0YsQ0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3ZpZGVyVG9rZW4sIFNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgU2lnbmFsU3RvcmVGZWF0dXJlLFxuICBwYXRjaFN0YXRlLFxuICBzaWduYWxTdG9yZUZlYXR1cmUsXG4gIHdpdGhDb21wdXRlZCxcbiAgd2l0aE1ldGhvZHMsXG4gIHdpdGhTdGF0ZSxcbiAgRW1wdHlGZWF0dXJlUmVzdWx0LFxuICBXcml0YWJsZVN0YXRlU291cmNlLFxufSBmcm9tICdAbmdyeC9zaWduYWxzJztcbmltcG9ydCB7XG4gIENhbGxTdGF0ZSxcbiAgZ2V0Q2FsbFN0YXRlS2V5cyxcbiAgc2V0RXJyb3IsXG4gIHNldExvYWRlZCxcbiAgc2V0TG9hZGluZyxcbn0gZnJvbSAnLi93aXRoLWNhbGwtc3RhdGUnO1xuaW1wb3J0IHtcbiAgc2V0QWxsRW50aXRpZXMsXG4gIEVudGl0eUlkLFxuICBhZGRFbnRpdHksXG4gIHVwZGF0ZUVudGl0eSxcbiAgcmVtb3ZlRW50aXR5LFxufSBmcm9tICdAbmdyeC9zaWduYWxzL2VudGl0aWVzJztcbmltcG9ydCB7IEVudGl0eVN0YXRlLCBOYW1lZEVudGl0eUNvbXB1dGVkIH0gZnJvbSAnLi9zaGFyZWQvc2lnbmFsLXN0b3JlLW1vZGVscyc7XG5cbmV4cG9ydCB0eXBlIEZpbHRlciA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuZXhwb3J0IHR5cGUgRW50aXR5ID0geyBpZDogRW50aXR5SWQgfTtcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhU2VydmljZTxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyPiB7XG4gIGxvYWQoZmlsdGVyOiBGKTogUHJvbWlzZTxFW10+O1xuXG4gIGxvYWRCeUlkKGlkOiBFbnRpdHlJZCk6IFByb21pc2U8RT47XG5cbiAgY3JlYXRlKGVudGl0eTogRSk6IFByb21pc2U8RT47XG5cbiAgdXBkYXRlKGVudGl0eTogRSk6IFByb21pc2U8RT47XG5cbiAgdXBkYXRlQWxsKGVudGl0eTogRVtdKTogUHJvbWlzZTxFW10+O1xuXG4gIGRlbGV0ZShlbnRpdHk6IEUpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIgPyBzdHJbMF0udG9VcHBlckNhc2UoKSArIHN0ci5zdWJzdHJpbmcoMSkgOiBzdHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhU2VydmljZUtleXMob3B0aW9uczogeyBjb2xsZWN0aW9uPzogc3RyaW5nIH0pIHtcbiAgY29uc3QgZmlsdGVyS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uXG4gICAgPyBgJHtvcHRpb25zLmNvbGxlY3Rpb259RmlsdGVyYFxuICAgIDogJ2ZpbHRlcic7XG4gIGNvbnN0IHNlbGVjdGVkSWRzS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uXG4gICAgPyBgc2VsZWN0ZWQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1JZHNgXG4gICAgOiAnc2VsZWN0ZWRJZHMnO1xuICBjb25zdCBzZWxlY3RlZEVudGl0aWVzS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uXG4gICAgPyBgc2VsZWN0ZWQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1FbnRpdGllc2BcbiAgICA6ICdzZWxlY3RlZEVudGl0aWVzJztcblxuICBjb25zdCB1cGRhdGVGaWx0ZXJLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb25cbiAgICA/IGB1cGRhdGUke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1GaWx0ZXJgXG4gICAgOiAndXBkYXRlRmlsdGVyJztcbiAgY29uc3QgdXBkYXRlU2VsZWN0ZWRLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb25cbiAgICA/IGB1cGRhdGVTZWxlY3RlZCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfUVudGl0aWVzYFxuICAgIDogJ3VwZGF0ZVNlbGVjdGVkJztcbiAgY29uc3QgbG9hZEtleSA9IG9wdGlvbnMuY29sbGVjdGlvblxuICAgID8gYGxvYWQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1FbnRpdGllc2BcbiAgICA6ICdsb2FkJztcblxuICBjb25zdCBjdXJyZW50S2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uXG4gICAgPyBgY3VycmVudCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfWBcbiAgICA6ICdjdXJyZW50JztcbiAgY29uc3QgbG9hZEJ5SWRLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb25cbiAgICA/IGBsb2FkJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9QnlJZGBcbiAgICA6ICdsb2FkQnlJZCc7XG4gIGNvbnN0IHNldEN1cnJlbnRLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb25cbiAgICA/IGBzZXRDdXJyZW50JHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9YFxuICAgIDogJ3NldEN1cnJlbnQnO1xuICBjb25zdCBjcmVhdGVLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb25cbiAgICA/IGBjcmVhdGUke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1gXG4gICAgOiAnY3JlYXRlJztcbiAgY29uc3QgdXBkYXRlS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uXG4gICAgPyBgdXBkYXRlJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9YFxuICAgIDogJ3VwZGF0ZSc7XG4gIGNvbnN0IHVwZGF0ZUFsbEtleSA9IG9wdGlvbnMuY29sbGVjdGlvblxuICAgID8gYHVwZGF0ZUFsbCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfWBcbiAgICA6ICd1cGRhdGVBbGwnO1xuICBjb25zdCBkZWxldGVLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb25cbiAgICA/IGBkZWxldGUke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1gXG4gICAgOiAnZGVsZXRlJztcblxuICAvLyBUT0RPOiBUYWtlIHRoZXNlIGZyb20gQG5ncngvc2lnbmFscy9lbnRpdGllcywgd2hlbiB0aGV5IGFyZSBleHBvcnRlZFxuICBjb25zdCBlbnRpdGllc0tleSA9IG9wdGlvbnMuY29sbGVjdGlvblxuICAgID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufUVudGl0aWVzYFxuICAgIDogJ2VudGl0aWVzJztcbiAgY29uc3QgZW50aXR5TWFwS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uXG4gICAgPyBgJHtvcHRpb25zLmNvbGxlY3Rpb259RW50aXR5TWFwYFxuICAgIDogJ2VudGl0eU1hcCc7XG4gIGNvbnN0IGlkc0tleSA9IG9wdGlvbnMuY29sbGVjdGlvbiA/IGAke29wdGlvbnMuY29sbGVjdGlvbn1JZHNgIDogJ2lkcyc7XG5cbiAgcmV0dXJuIHtcbiAgICBmaWx0ZXJLZXksXG4gICAgc2VsZWN0ZWRJZHNLZXksXG4gICAgc2VsZWN0ZWRFbnRpdGllc0tleSxcbiAgICB1cGRhdGVGaWx0ZXJLZXksXG4gICAgdXBkYXRlU2VsZWN0ZWRLZXksXG4gICAgbG9hZEtleSxcbiAgICBlbnRpdGllc0tleSxcbiAgICBlbnRpdHlNYXBLZXksXG4gICAgaWRzS2V5LFxuXG4gICAgY3VycmVudEtleSxcbiAgICBsb2FkQnlJZEtleSxcbiAgICBzZXRDdXJyZW50S2V5LFxuICAgIGNyZWF0ZUtleSxcbiAgICB1cGRhdGVLZXksXG4gICAgdXBkYXRlQWxsS2V5LFxuICAgIGRlbGV0ZUtleSxcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTmFtZWREYXRhU2VydmljZVN0YXRlPFxuICBFIGV4dGVuZHMgRW50aXR5LFxuICBGIGV4dGVuZHMgRmlsdGVyLFxuICBDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nXG4+ID0ge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0t9RmlsdGVyYF06IEY7XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBzZWxlY3RlZCR7Q2FwaXRhbGl6ZTxLPn1JZHNgXTogUmVjb3JkPEVudGl0eUlkLCBib29sZWFuPjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYGN1cnJlbnQke0NhcGl0YWxpemU8Sz59YF06IEU7XG59O1xuXG5leHBvcnQgdHlwZSBEYXRhU2VydmljZVN0YXRlPEUgZXh0ZW5kcyBFbnRpdHksIEYgZXh0ZW5kcyBGaWx0ZXI+ID0ge1xuICBmaWx0ZXI6IEY7XG4gIHNlbGVjdGVkSWRzOiBSZWNvcmQ8RW50aXR5SWQsIGJvb2xlYW4+O1xuICBjdXJyZW50OiBFO1xufTtcblxuZXhwb3J0IHR5cGUgRGF0YVNlcnZpY2VDb21wdXRlZDxFIGV4dGVuZHMgRW50aXR5PiA9IHtcbiAgc2VsZWN0ZWRFbnRpdGllczogU2lnbmFsPEVbXT47XG59O1xuXG5leHBvcnQgdHlwZSBOYW1lZERhdGFTZXJ2aWNlQ29tcHV0ZWQ8XG4gIEUgZXh0ZW5kcyBFbnRpdHksXG4gIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmdcbj4gPSB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYHNlbGVjdGVkJHtDYXBpdGFsaXplPEs+fUVudGl0aWVzYF06IFNpZ25hbDxFW10+O1xufTtcblxuZXhwb3J0IHR5cGUgTmFtZWREYXRhU2VydmljZU1ldGhvZHM8XG4gIEUgZXh0ZW5kcyBFbnRpdHksXG4gIEYgZXh0ZW5kcyBGaWx0ZXIsXG4gIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmdcbj4gPSB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYHVwZGF0ZSR7Q2FwaXRhbGl6ZTxLPn1GaWx0ZXJgXTogKGZpbHRlcjogRikgPT4gdm9pZDtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYHVwZGF0ZVNlbGVjdGVkJHtDYXBpdGFsaXplPEs+fUVudGl0aWVzYF06IChcbiAgICBpZDogRW50aXR5SWQsXG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW5cbiAgKSA9PiB2b2lkO1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgbG9hZCR7Q2FwaXRhbGl6ZTxLPn1FbnRpdGllc2BdOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgc2V0Q3VycmVudCR7Q2FwaXRhbGl6ZTxLPn1gXTogKGVudGl0eTogRSkgPT4gdm9pZDtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYGxvYWQke0NhcGl0YWxpemU8Sz59QnlJZGBdOiAoXG4gICAgaWQ6IEVudGl0eUlkXG4gICkgPT4gUHJvbWlzZTx2b2lkPjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYGNyZWF0ZSR7Q2FwaXRhbGl6ZTxLPn1gXTogKGVudGl0eTogRSkgPT4gUHJvbWlzZTx2b2lkPjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYHVwZGF0ZSR7Q2FwaXRhbGl6ZTxLPn1gXTogKGVudGl0eTogRSkgPT4gUHJvbWlzZTx2b2lkPjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYHVwZGF0ZUFsbCR7Q2FwaXRhbGl6ZTxLPn1gXTogKFxuICAgIGVudGl0eTogRVtdXG4gICkgPT4gUHJvbWlzZTx2b2lkPjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYGRlbGV0ZSR7Q2FwaXRhbGl6ZTxLPn1gXTogKGVudGl0eTogRSkgPT4gUHJvbWlzZTx2b2lkPjtcbn07XG5cbmV4cG9ydCB0eXBlIERhdGFTZXJ2aWNlTWV0aG9kczxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyPiA9IHtcbiAgdXBkYXRlRmlsdGVyOiAoZmlsdGVyOiBGKSA9PiB2b2lkO1xuICB1cGRhdGVTZWxlY3RlZDogKGlkOiBFbnRpdHlJZCwgc2VsZWN0ZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIGxvYWQ6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgc2V0Q3VycmVudChlbnRpdHk6IEUpOiB2b2lkO1xuICBsb2FkQnlJZChpZDogRW50aXR5SWQpOiBQcm9taXNlPHZvaWQ+O1xuICBjcmVhdGUoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPjtcbiAgdXBkYXRlKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD47XG4gIHVwZGF0ZUFsbChlbnRpdGllczogRVtdKTogUHJvbWlzZTx2b2lkPjtcbiAgZGVsZXRlKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aERhdGFTZXJ2aWNlPFxuICBFIGV4dGVuZHMgRW50aXR5LFxuICBGIGV4dGVuZHMgRmlsdGVyLFxuICBDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nXG4+KG9wdGlvbnM6IHtcbiAgZGF0YVNlcnZpY2VUeXBlOiBQcm92aWRlclRva2VuPERhdGFTZXJ2aWNlPEUsIEY+PjtcbiAgZmlsdGVyOiBGO1xuICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xufSk6IFNpZ25hbFN0b3JlRmVhdHVyZTxcbiAgLy8gVGhlc2UgYWx0ZXJuYXRpdmVzIGJyZWFrIHR5cGUgaW5mZXJlbmNlOlxuICAvLyBzdGF0ZTogeyBjYWxsU3RhdGU6IENhbGxTdGF0ZSB9ICYgTmFtZWRFbnRpdHlTdGF0ZTxFLCBDb2xsZWN0aW9uPixcbiAgLy8gc3RhdGU6IE5hbWVkRW50aXR5U3RhdGU8RSwgQ29sbGVjdGlvbj4sXG4gIEVtcHR5RmVhdHVyZVJlc3VsdCAmIHsgY29tcHV0ZWQ6IE5hbWVkRW50aXR5Q29tcHV0ZWQ8RSwgQ29sbGVjdGlvbj4gfSxcbiAge1xuICAgIHN0YXRlOiBOYW1lZERhdGFTZXJ2aWNlU3RhdGU8RSwgRiwgQ29sbGVjdGlvbj47XG4gICAgY29tcHV0ZWQ6IE5hbWVkRGF0YVNlcnZpY2VDb21wdXRlZDxFLCBDb2xsZWN0aW9uPjtcbiAgICBtZXRob2RzOiBOYW1lZERhdGFTZXJ2aWNlTWV0aG9kczxFLCBGLCBDb2xsZWN0aW9uPjtcbiAgfVxuPjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoRGF0YVNlcnZpY2U8RSBleHRlbmRzIEVudGl0eSwgRiBleHRlbmRzIEZpbHRlcj4ob3B0aW9uczoge1xuICBkYXRhU2VydmljZVR5cGU6IFByb3ZpZGVyVG9rZW48RGF0YVNlcnZpY2U8RSwgRj4+O1xuICBmaWx0ZXI6IEY7XG59KTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICBFbXB0eUZlYXR1cmVSZXN1bHQgJiB7IHN0YXRlOiB7IGNhbGxTdGF0ZTogQ2FsbFN0YXRlIH0gJiBFbnRpdHlTdGF0ZTxFPiB9LFxuICB7XG4gICAgc3RhdGU6IERhdGFTZXJ2aWNlU3RhdGU8RSwgRj47XG4gICAgY29tcHV0ZWQ6IERhdGFTZXJ2aWNlQ29tcHV0ZWQ8RT47XG4gICAgbWV0aG9kczogRGF0YVNlcnZpY2VNZXRob2RzPEUsIEY+O1xuICB9XG4+O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhEYXRhU2VydmljZTxcbiAgRSBleHRlbmRzIEVudGl0eSxcbiAgRiBleHRlbmRzIEZpbHRlcixcbiAgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZ1xuPihvcHRpb25zOiB7XG4gIGRhdGFTZXJ2aWNlVHlwZTogUHJvdmlkZXJUb2tlbjxEYXRhU2VydmljZTxFLCBGPj47XG4gIGZpbHRlcjogRjtcbiAgY29sbGVjdGlvbj86IENvbGxlY3Rpb247XG59KTogU2lnbmFsU3RvcmVGZWF0dXJlPGFueSwgYW55PiB7XG4gIGNvbnN0IHsgZGF0YVNlcnZpY2VUeXBlLCBmaWx0ZXIsIGNvbGxlY3Rpb246IHByZWZpeCB9ID0gb3B0aW9ucztcbiAgY29uc3Qge1xuICAgIGVudGl0aWVzS2V5LFxuICAgIGZpbHRlcktleSxcbiAgICBsb2FkS2V5LFxuICAgIHNlbGVjdGVkRW50aXRpZXNLZXksXG4gICAgc2VsZWN0ZWRJZHNLZXksXG4gICAgdXBkYXRlRmlsdGVyS2V5LFxuICAgIHVwZGF0ZVNlbGVjdGVkS2V5LFxuXG4gICAgY3VycmVudEtleSxcbiAgICBjcmVhdGVLZXksXG4gICAgdXBkYXRlS2V5LFxuICAgIHVwZGF0ZUFsbEtleSxcbiAgICBkZWxldGVLZXksXG4gICAgbG9hZEJ5SWRLZXksXG4gICAgc2V0Q3VycmVudEtleSxcbiAgfSA9IGdldERhdGFTZXJ2aWNlS2V5cyhvcHRpb25zKTtcblxuICBjb25zdCB7IGNhbGxTdGF0ZUtleSB9ID0gZ2V0Q2FsbFN0YXRlS2V5cyh7IGNvbGxlY3Rpb246IHByZWZpeCB9KTtcblxuICByZXR1cm4gc2lnbmFsU3RvcmVGZWF0dXJlKFxuICAgIHdpdGhTdGF0ZSgoKSA9PiAoe1xuICAgICAgW2ZpbHRlcktleV06IGZpbHRlcixcbiAgICAgIFtzZWxlY3RlZElkc0tleV06IHt9IGFzIFJlY29yZDxFbnRpdHlJZCwgYm9vbGVhbj4sXG4gICAgICBbY3VycmVudEtleV06IHVuZGVmaW5lZCBhcyBFIHwgdW5kZWZpbmVkLFxuICAgIH0pKSxcbiAgICB3aXRoQ29tcHV0ZWQoKHN0b3JlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgY29uc3QgZW50aXRpZXMgPSBzdG9yZVtlbnRpdGllc0tleV0gYXMgU2lnbmFsPEVbXT47XG4gICAgICBjb25zdCBzZWxlY3RlZElkcyA9IHN0b3JlW3NlbGVjdGVkSWRzS2V5XSBhcyBTaWduYWw8XG4gICAgICAgIFJlY29yZDxFbnRpdHlJZCwgYm9vbGVhbj5cbiAgICAgID47XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtzZWxlY3RlZEVudGl0aWVzS2V5XTogY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgICBlbnRpdGllcygpLmZpbHRlcigoZSkgPT4gc2VsZWN0ZWRJZHMoKVtlLmlkXSlcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfSksXG4gICAgd2l0aE1ldGhvZHMoXG4gICAgICAoc3RvcmU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgV3JpdGFibGVTdGF0ZVNvdXJjZTxvYmplY3Q+KSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGFTZXJ2aWNlID0gaW5qZWN0KGRhdGFTZXJ2aWNlVHlwZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgW3VwZGF0ZUZpbHRlcktleV06IChmaWx0ZXI6IEYpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgW2ZpbHRlcktleV06IGZpbHRlciB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFt1cGRhdGVTZWxlY3RlZEtleV06IChpZDogRW50aXR5SWQsIHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCAoc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiAoe1xuICAgICAgICAgICAgICBbc2VsZWN0ZWRJZHNLZXldOiB7XG4gICAgICAgICAgICAgICAgLi4uKHN0YXRlW3NlbGVjdGVkSWRzS2V5XSBhcyBSZWNvcmQ8RW50aXR5SWQsIGJvb2xlYW4+KSxcbiAgICAgICAgICAgICAgICBbaWRdOiBzZWxlY3RlZCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFtsb2FkS2V5XTogYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gc3RvcmVbZmlsdGVyS2V5XSBhcyBTaWduYWw8Rj47XG4gICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRpbmcocHJlZml4KSk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFTZXJ2aWNlLmxvYWQoZmlsdGVyKCkpO1xuICAgICAgICAgICAgICBwYXRjaFN0YXRlKFxuICAgICAgICAgICAgICAgIHN0b3JlLFxuICAgICAgICAgICAgICAgIHByZWZpeFxuICAgICAgICAgICAgICAgICAgPyBzZXRBbGxFbnRpdGllcyhyZXN1bHQsIHsgY29sbGVjdGlvbjogcHJlZml4IH0pXG4gICAgICAgICAgICAgICAgICA6IHNldEFsbEVudGl0aWVzKHJlc3VsdClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkZWQocHJlZml4KSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0RXJyb3IoZSwgcHJlZml4KSk7XG4gICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbbG9hZEJ5SWRLZXldOiBhc3luYyAoaWQ6IEVudGl0eUlkKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRpbmcocHJlZml4KSk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCBkYXRhU2VydmljZS5sb2FkQnlJZChpZCk7XG4gICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGVkKHByZWZpeCkpO1xuICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogY3VycmVudCB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtzZXRDdXJyZW50S2V5XTogKGN1cnJlbnQ6IEUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgW2N1cnJlbnRLZXldOiBjdXJyZW50IH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgW2NyZWF0ZUtleV06IGFzeW5jIChlbnRpdHk6IEUpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgW2N1cnJlbnRLZXldOiBlbnRpdHkgfSk7XG4gICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRpbmcocHJlZml4KSk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBkYXRhU2VydmljZS5jcmVhdGUoZW50aXR5KTtcbiAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGNyZWF0ZWQgfSk7XG4gICAgICAgICAgICAgIHBhdGNoU3RhdGUoXG4gICAgICAgICAgICAgICAgc3RvcmUsXG4gICAgICAgICAgICAgICAgcHJlZml4XG4gICAgICAgICAgICAgICAgICA/IGFkZEVudGl0eShjcmVhdGVkLCB7IGNvbGxlY3Rpb246IHByZWZpeCB9KVxuICAgICAgICAgICAgICAgICAgOiBhZGRFbnRpdHkoY3JlYXRlZClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkZWQocHJlZml4KSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0RXJyb3IoZSwgcHJlZml4KSk7XG4gICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbdXBkYXRlS2V5XTogYXN5bmMgKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGVudGl0eSB9KTtcbiAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGluZyhwcmVmaXgpKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IGRhdGFTZXJ2aWNlLnVwZGF0ZShlbnRpdHkpO1xuICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogdXBkYXRlZCB9KTtcblxuICAgICAgICAgICAgICBjb25zdCB1cGRhdGVBcmcgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHVwZGF0ZWQuaWQsXG4gICAgICAgICAgICAgICAgY2hhbmdlczogdXBkYXRlZCxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBjb25zdCB1cGRhdGVyID0gKGNvbGxlY3Rpb246IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICB1cGRhdGVFbnRpdHkodXBkYXRlQXJnLCB7IGNvbGxlY3Rpb24gfSk7XG5cbiAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShcbiAgICAgICAgICAgICAgICBzdG9yZSxcbiAgICAgICAgICAgICAgICBwcmVmaXggPyB1cGRhdGVyKHByZWZpeCkgOiB1cGRhdGVFbnRpdHkodXBkYXRlQXJnKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRlZChwcmVmaXgpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFt1cGRhdGVBbGxLZXldOiBhc3luYyAoZW50aXRpZXM6IEVbXSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkaW5nKHByZWZpeCkpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkYXRhU2VydmljZS51cGRhdGVBbGwoZW50aXRpZXMpO1xuICAgICAgICAgICAgICBwYXRjaFN0YXRlKFxuICAgICAgICAgICAgICAgIHN0b3JlLFxuICAgICAgICAgICAgICAgIHByZWZpeFxuICAgICAgICAgICAgICAgICAgPyBzZXRBbGxFbnRpdGllcyhyZXN1bHQsIHsgY29sbGVjdGlvbjogcHJlZml4IH0pXG4gICAgICAgICAgICAgICAgICA6IHNldEFsbEVudGl0aWVzKHJlc3VsdClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkZWQocHJlZml4KSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0RXJyb3IoZSwgcHJlZml4KSk7XG4gICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbZGVsZXRlS2V5XTogYXN5bmMgKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGVudGl0eSB9KTtcbiAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGluZyhwcmVmaXgpKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgZGF0YVNlcnZpY2UuZGVsZXRlKGVudGl0eSk7XG4gICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgW2N1cnJlbnRLZXldOiB1bmRlZmluZWQgfSk7XG4gICAgICAgICAgICAgIHBhdGNoU3RhdGUoXG4gICAgICAgICAgICAgICAgc3RvcmUsXG4gICAgICAgICAgICAgICAgcHJlZml4XG4gICAgICAgICAgICAgICAgICA/IHJlbW92ZUVudGl0eShlbnRpdHkuaWQsIHsgY29sbGVjdGlvbjogcHJlZml4IH0pXG4gICAgICAgICAgICAgICAgICA6IHJlbW92ZUVudGl0eShlbnRpdHkuaWQpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGVkKHByZWZpeCkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldEVycm9yKGUsIHByZWZpeCkpO1xuICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgKVxuICApO1xufVxuIl19
@@ -81,12 +81,12 @@ export const patchState = (state, action, ...rest) => {
81
81
  /**
82
82
  * Wrapper of `patchState` for DevTools integration. Next to updating the state,
83
83
  * it also sends the action to the DevTools.
84
- * @param state state of Signal Store
84
+ * @param stateSource state of Signal Store
85
85
  * @param action name of action how it will show in DevTools
86
86
  * @param updaters updater functions or objects
87
87
  */
88
- export const updateState = (state, action, ...updaters) => {
88
+ export function updateState(stateSource, action, ...updaters) {
89
89
  currentActionNames.add(action);
90
- return originalPatchState(state, ...updaters);
91
- };
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kZXZ0b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvd2l0aC1kZXZ0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxJQUFJLGtCQUFrQixHQUVqQyxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBaUJuRCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQWtDLEVBQUUsQ0FBQyxDQUFDO0FBRWxFLElBQUksa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztBQUUzQyxJQUFJLDBCQUEwQixHQUFHLEtBQUssQ0FBQztBQUV2QyxTQUFTLG1CQUFtQjtJQUMxQixNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ1YsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLE9BQU87U0FDUjtRQUVELE1BQU0sTUFBTSxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sU0FBUyxHQUE0QixFQUFFLENBQUM7UUFDOUMsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLEVBQUU7WUFDekIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztTQUMzQjtRQUVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM3QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDOUQsa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUV2QyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxHQUFZLEVBQUUsTUFBYztJQUN0RCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRTtRQUNuRCxPQUFRLEdBQThCLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDaEQ7QUFDSCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsS0FBYztJQUNwQyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQyxjQUFjLEVBQUU7UUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0tBQzdDO0lBRUQsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUtELElBQUksVUFBdUMsQ0FBQztBQUU1Qzs7R0FFRztBQUNILE1BQU0sVUFBVSxLQUFLO0lBQ25CLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDdkIsMEJBQTBCLEdBQUcsS0FBSyxDQUFDO0lBQ25DLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsSUFBWTtJQUVaLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNmLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksUUFBUSxFQUFFO1lBQ1osT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQztRQUN2RCxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDOUIsSUFBSSxFQUFFLG1CQUFtQjthQUMxQixDQUFDLENBQUM7U0FDSjtRQUVELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLEdBQUcsS0FBSztZQUNSLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVztTQUNwQixDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksQ0FBQywwQkFBMEIsRUFBRTtZQUMvQixtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLDBCQUEwQixHQUFHLElBQUksQ0FBQztTQUNuQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQVNEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFO0lBQzVELFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDdEMsQ0FBQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLFFBQVEsRUFBRSxFQUFFO0lBQ2pFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixPQUFPLGtCQUFrQixDQUFDLEtBQUssRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO0FBQ2hELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHBhdGNoU3RhdGUgYXMgb3JpZ2luYWxQYXRjaFN0YXRlLFxuICBTaWduYWxTdG9yZUZlYXR1cmUsXG59IGZyb20gJ0BuZ3J4L3NpZ25hbHMnO1xuaW1wb3J0IHsgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0IH0gZnJvbSAnQG5ncngvc2lnbmFscy9zcmMvc2lnbmFsLXN0b3JlLW1vZGVscyc7XG5pbXBvcnQgeyBlZmZlY3QsIGluamVjdCwgUExBVEZPUk1fSUQsIHNpZ25hbCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtU2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fOlxuICAgICAgfCB7XG4gICAgICAgICAgY29ubmVjdDogKG9wdGlvbnM6IHsgbmFtZTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgIHNlbmQ6IChhY3Rpb246IEFjdGlvbiwgc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG59XG5cbnR5cGUgRW1wdHlGZWF0dXJlUmVzdWx0ID0geyBzdGF0ZToge307IHNpZ25hbHM6IHt9OyBtZXRob2RzOiB7fSB9O1xuZXhwb3J0IHR5cGUgQWN0aW9uID0geyB0eXBlOiBzdHJpbmcgfTtcblxuY29uc3Qgc3RvcmVSZWdpc3RyeSA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+Pih7fSk7XG5cbmxldCBjdXJyZW50QWN0aW9uTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxubGV0IHN5bmNocm9uaXphdGlvbkluaXRpYWxpemVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGluaXRTeW5jaHJvbml6YXRpb24oKSB7XG4gIGVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcmVzID0gc3RvcmVSZWdpc3RyeSgpO1xuICAgIGNvbnN0IHJvb3RTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gc3RvcmVzKSB7XG4gICAgICBjb25zdCBzdG9yZSA9IHN0b3Jlc1tuYW1lXTtcbiAgICAgIHJvb3RTdGF0ZVtuYW1lXSA9IHN0b3JlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZXMgPSBBcnJheS5mcm9tKGN1cnJlbnRBY3Rpb25OYW1lcyk7XG4gICAgY29uc3QgdHlwZSA9IG5hbWVzLmxlbmd0aCA/IG5hbWVzLmpvaW4oJywgJykgOiAnU3RvcmUgVXBkYXRlJztcbiAgICBjdXJyZW50QWN0aW9uTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGNvbm5lY3Rpb24uc2VuZCh7IHR5cGUgfSwgcm9vdFN0YXRlKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlRnJvbVN5bWJvbChvYmo6IHVua25vd24sIHN5bWJvbDogc3ltYm9sKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogJiYgc3ltYm9sIGluIG9iaikge1xuICAgIHJldHVybiAob2JqIGFzIHsgW2tleTogc3ltYm9sXTogYW55IH0pW3N5bWJvbF07XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U3RvcmVTaWduYWwoc3RvcmU6IHVua25vd24pOiBTaWduYWw8dW5rbm93bj4ge1xuICBjb25zdCBbc2lnbmFsU3RhdGVLZXldID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzdG9yZSk7XG4gIGlmICghc2lnbmFsU3RhdGVLZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIFN0YXRlIFNpZ25hbCcpO1xuICB9XG5cbiAgcmV0dXJuIGdldFZhbHVlRnJvbVN5bWJvbChzdG9yZSwgc2lnbmFsU3RhdGVLZXkpO1xufVxuXG50eXBlIENvbm5lY3RSZXNwb25zZSA9IHtcbiAgc2VuZDogKGFjdGlvbjogQWN0aW9uLCBzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHZvaWQ7XG59O1xubGV0IGNvbm5lY3Rpb246IENvbm5lY3RSZXNwb25zZSB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiByZXF1aXJlZCBmb3IgdGVzdGluZy4gaXMgbm90IGV4cG9ydGVkIGR1cmluZyBidWlsZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXQoKSB7XG4gIGNvbm5lY3Rpb24gPSB1bmRlZmluZWQ7XG4gIHN5bmNocm9uaXphdGlvbkluaXRpYWxpemVkID0gZmFsc2U7XG4gIHN0b3JlUmVnaXN0cnkuc2V0KHt9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gbmFtZSBzdG9yZSdzIG5hbWUgYXMgaXQgc2hvdWxkIGFwcGVhciBpbiB0aGUgRGV2VG9vbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhEZXZ0b29sczxJbnB1dCBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdD4oXG4gIG5hbWU6IHN0cmluZ1xuKTogU2lnbmFsU3RvcmVGZWF0dXJlPElucHV0LCBFbXB0eUZlYXR1cmVSZXN1bHQ+IHtcbiAgcmV0dXJuIChzdG9yZSkgPT4ge1xuICAgIGNvbnN0IGlzU2VydmVyID0gaXNQbGF0Zm9ybVNlcnZlcihpbmplY3QoUExBVEZPUk1fSUQpKTtcbiAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybiBzdG9yZTtcbiAgICB9XG5cbiAgICBjb25zdCBleHRlbnNpb25zID0gd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX187XG4gICAgaWYgKCFleHRlbnNpb25zKSB7XG4gICAgICByZXR1cm4gc3RvcmU7XG4gICAgfVxuXG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICBjb25uZWN0aW9uID0gZXh0ZW5zaW9ucy5jb25uZWN0KHtcbiAgICAgICAgbmFtZTogJ05nUnggU2lnbmFsIFN0b3JlJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3JlU2lnbmFsID0gZ2V0U3RvcmVTaWduYWwoc3RvcmUpO1xuICAgIHN0b3JlUmVnaXN0cnkudXBkYXRlKCh2YWx1ZSkgPT4gKHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgW25hbWVdOiBzdG9yZVNpZ25hbCxcbiAgICB9KSk7XG5cbiAgICBpZiAoIXN5bmNocm9uaXphdGlvbkluaXRpYWxpemVkKSB7XG4gICAgICBpbml0U3luY2hyb25pemF0aW9uKCk7XG4gICAgICBzeW5jaHJvbml6YXRpb25Jbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3JlO1xuICB9O1xufVxuXG50eXBlIFBhdGNoRm4gPSB0eXBlb2Ygb3JpZ2luYWxQYXRjaFN0YXRlIGV4dGVuZHMgKFxuICBhcmcxOiBpbmZlciBGaXJzdCxcbiAgLi4uYXJnczogaW5mZXIgUmVzdFxuKSA9PiBpbmZlciBSZXR1cm5lclxuICA/IChzdGF0ZTogRmlyc3QsIGFjdGlvbjogc3RyaW5nLCAuLi5yZXN0OiBSZXN0KSA9PiBSZXR1cm5lclxuICA6IG5ldmVyO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIEhhcyBiZWVuIHJlbmFtZWQgdG8gYHVwZGF0ZVN0YXRlYFxuICovXG5leHBvcnQgY29uc3QgcGF0Y2hTdGF0ZTogUGF0Y2hGbiA9IChzdGF0ZSwgYWN0aW9uLCAuLi5yZXN0KSA9PiB7XG4gIHVwZGF0ZVN0YXRlKHN0YXRlLCBhY3Rpb24sIC4uLnJlc3QpO1xufTtcblxuLyoqXG4gKiBXcmFwcGVyIG9mIGBwYXRjaFN0YXRlYCBmb3IgRGV2VG9vbHMgaW50ZWdyYXRpb24uIE5leHQgdG8gdXBkYXRpbmcgdGhlIHN0YXRlLFxuICogaXQgYWxzbyBzZW5kcyB0aGUgYWN0aW9uIHRvIHRoZSBEZXZUb29scy5cbiAqIEBwYXJhbSBzdGF0ZSBzdGF0ZSBvZiBTaWduYWwgU3RvcmVcbiAqIEBwYXJhbSBhY3Rpb24gbmFtZSBvZiBhY3Rpb24gaG93IGl0IHdpbGwgc2hvdyBpbiBEZXZUb29sc1xuICogQHBhcmFtIHVwZGF0ZXJzIHVwZGF0ZXIgZnVuY3Rpb25zIG9yIG9iamVjdHNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZVN0YXRlOiBQYXRjaEZuID0gKHN0YXRlLCBhY3Rpb24sIC4uLnVwZGF0ZXJzKSA9PiB7XG4gIGN1cnJlbnRBY3Rpb25OYW1lcy5hZGQoYWN0aW9uKTtcbiAgcmV0dXJuIG9yaWdpbmFsUGF0Y2hTdGF0ZShzdGF0ZSwgLi4udXBkYXRlcnMpO1xufTtcbiJdfQ==
90
+ return originalPatchState(stateSource, ...updaters);
91
+ }
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kZXZ0b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvd2l0aC1kZXZ0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsVUFBVSxJQUFJLGtCQUFrQixHQUdqQyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBaUJuRCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQWtDLEVBQUUsQ0FBQyxDQUFDO0FBRWxFLElBQUksa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztBQUUzQyxJQUFJLDBCQUEwQixHQUFHLEtBQUssQ0FBQztBQUV2QyxTQUFTLG1CQUFtQjtJQUMxQixNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ1YsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFDL0IsTUFBTSxTQUFTLEdBQTRCLEVBQUUsQ0FBQztRQUM5QyxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzFCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM3QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FB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ZVJlc3VsdCxcbiAgUGFydGlhbFN0YXRlVXBkYXRlcixcbiAgcGF0Y2hTdGF0ZSBhcyBvcmlnaW5hbFBhdGNoU3RhdGUsXG4gIFNpZ25hbFN0b3JlRmVhdHVyZSxcbiAgV3JpdGFibGVTdGF0ZVNvdXJjZSxcbn0gZnJvbSAnQG5ncngvc2lnbmFscyc7XG5pbXBvcnQgeyBlZmZlY3QsIGluamVjdCwgUExBVEZPUk1fSUQsIHNpZ25hbCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtU2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFByZXR0aWZ5IH0gZnJvbSAnLi9zaGFyZWQvcHJldHRpZnknO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIF9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX186XG4gICAgICB8IHtcbiAgICAgICAgICBjb25uZWN0OiAob3B0aW9uczogeyBuYW1lOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgICAgc2VuZDogKGFjdGlvbjogQWN0aW9uLCBzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHZvaWQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgQWN0aW9uID0geyB0eXBlOiBzdHJpbmcgfTtcblxuY29uc3Qgc3RvcmVSZWdpc3RyeSA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+Pih7fSk7XG5cbmxldCBjdXJyZW50QWN0aW9uTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxubGV0IHN5bmNocm9uaXphdGlvbkluaXRpYWxpemVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGluaXRTeW5jaHJvbml6YXRpb24oKSB7XG4gIGVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcmVzID0gc3RvcmVSZWdpc3RyeSgpO1xuICAgIGNvbnN0IHJvb3RTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gc3RvcmVzKSB7XG4gICAgICBjb25zdCBzdG9yZSA9IHN0b3Jlc1tuYW1lXTtcbiAgICAgIHJvb3RTdGF0ZVtuYW1lXSA9IHN0b3JlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZXMgPSBBcnJheS5mcm9tKGN1cnJlbnRBY3Rpb25OYW1lcyk7XG4gICAgY29uc3QgdHlwZSA9IG5hbWVzLmxlbmd0aCA/IG5hbWVzLmpvaW4oJywgJykgOiAnU3RvcmUgVXBkYXRlJztcbiAgICBjdXJyZW50QWN0aW9uTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGNvbm5lY3Rpb24uc2VuZCh7IHR5cGUgfSwgcm9vdFN0YXRlKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlRnJvbVN5bWJvbChvYmo6IHVua25vd24sIHN5bWJvbDogc3ltYm9sKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogJiYgc3ltYm9sIGluIG9iaikge1xuICAgIHJldHVybiAob2JqIGFzIHsgW2tleTogc3ltYm9sXTogYW55IH0pW3N5bWJvbF07XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U3RvcmVTaWduYWwoc3RvcmU6IHVua25vd24pOiBTaWduYWw8dW5rbm93bj4ge1xuICBjb25zdCBbc2lnbmFsU3RhdGVLZXldID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzdG9yZSk7XG4gIGlmICghc2lnbmFsU3RhdGVLZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIFN0YXRlIFNpZ25hbCcpO1xuICB9XG5cbiAgcmV0dXJuIGdldFZhbHVlRnJvbVN5bWJvbChzdG9yZSwgc2lnbmFsU3RhdGVLZXkpO1xufVxuXG50eXBlIENvbm5lY3RSZXNwb25zZSA9IHtcbiAgc2VuZDogKGFjdGlvbjogQWN0aW9uLCBzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHZvaWQ7XG59O1xubGV0IGNvbm5lY3Rpb246IENvbm5lY3RSZXNwb25zZSB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiByZXF1aXJlZCBmb3IgdGVzdGluZy4gaXMgbm90IGV4cG9ydGVkIGR1cmluZyBidWlsZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXQoKSB7XG4gIGNvbm5lY3Rpb24gPSB1bmRlZmluZWQ7XG4gIHN5bmNocm9uaXphdGlvbkluaXRpYWxpemVkID0gZmFsc2U7XG4gIHN0b3JlUmVnaXN0cnkuc2V0KHt9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gbmFtZSBzdG9yZSdzIG5hbWUgYXMgaXQgc2hvdWxkIGFwcGVhciBpbiB0aGUgRGV2VG9vbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhEZXZ0b29sczxJbnB1dCBleHRlbmRzIEVtcHR5RmVhdHVyZVJlc3VsdD4oXG4gIG5hbWU6IHN0cmluZ1xuKTogU2lnbmFsU3RvcmVGZWF0dXJlPElucHV0LCBFbXB0eUZlYXR1cmVSZXN1bHQ+IHtcbiAgcmV0dXJuIChzdG9yZSkgPT4ge1xuICAgIGNvbnN0IGlzU2VydmVyID0gaXNQbGF0Zm9ybVNlcnZlcihpbmplY3QoUExBVEZPUk1fSUQpKTtcbiAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybiBzdG9yZTtcbiAgICB9XG5cbiAgICBjb25zdCBleHRlbnNpb25zID0gd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX187XG4gICAgaWYgKCFleHRlbnNpb25zKSB7XG4gICAgICByZXR1cm4gc3RvcmU7XG4gICAgfVxuXG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICBjb25uZWN0aW9uID0gZXh0ZW5zaW9ucy5jb25uZWN0KHtcbiAgICAgICAgbmFtZTogJ05nUnggU2lnbmFsIFN0b3JlJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3JlU2lnbmFsID0gZ2V0U3RvcmVTaWduYWwoc3RvcmUpO1xuICAgIHN0b3JlUmVnaXN0cnkudXBkYXRlKCh2YWx1ZSkgPT4gKHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgW25hbWVdOiBzdG9yZVNpZ25hbCxcbiAgICB9KSk7XG5cbiAgICBpZiAoIXN5bmNocm9uaXphdGlvbkluaXRpYWxpemVkKSB7XG4gICAgICBpbml0U3luY2hyb25pemF0aW9uKCk7XG4gICAgICBzeW5jaHJvbml6YXRpb25Jbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3JlO1xuICB9O1xufVxuXG50eXBlIFBhdGNoRm4gPSB0eXBlb2Ygb3JpZ2luYWxQYXRjaFN0YXRlIGV4dGVuZHMgKFxuICBhcmcxOiBpbmZlciBGaXJzdCxcbiAgLi4uYXJnczogaW5mZXIgUmVzdFxuKSA9PiBpbmZlciBSZXR1cm5lclxuICA/IChzdGF0ZTogRmlyc3QsIGFjdGlvbjogc3RyaW5nLCAuLi5yZXN0OiBSZXN0KSA9PiBSZXR1cm5lclxuICA6IG5ldmVyO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIEhhcyBiZWVuIHJlbmFtZWQgdG8gYHVwZGF0ZVN0YXRlYFxuICovXG5leHBvcnQgY29uc3QgcGF0Y2hTdGF0ZTogUGF0Y2hGbiA9IChzdGF0ZSwgYWN0aW9uLCAuLi5yZXN0KSA9PiB7XG4gIHVwZGF0ZVN0YXRlKHN0YXRlLCBhY3Rpb24sIC4uLnJlc3QpO1xufTtcblxuLyoqXG4gKiBXcmFwcGVyIG9mIGBwYXRjaFN0YXRlYCBmb3IgRGV2VG9vbHMgaW50ZWdyYXRpb24uIE5leHQgdG8gdXBkYXRpbmcgdGhlIHN0YXRlLFxuICogaXQgYWxzbyBzZW5kcyB0aGUgYWN0aW9uIHRvIHRoZSBEZXZUb29scy5cbiAqIEBwYXJhbSBzdGF0ZVNvdXJjZSBzdGF0ZSBvZiBTaWduYWwgU3RvcmVcbiAqIEBwYXJhbSBhY3Rpb24gbmFtZSBvZiBhY3Rpb24gaG93IGl0IHdpbGwgc2hvdyBpbiBEZXZUb29sc1xuICogQHBhcmFtIHVwZGF0ZXJzIHVwZGF0ZXIgZnVuY3Rpb25zIG9yIG9iamVjdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlPFN0YXRlIGV4dGVuZHMgb2JqZWN0PihcbiAgc3RhdGVTb3VyY2U6IFdyaXRhYmxlU3RhdGVTb3VyY2U8U3RhdGU+LFxuICBhY3Rpb246IHN0cmluZyxcbiAgLi4udXBkYXRlcnM6IEFycmF5PFxuICAgIFBhcnRpYWw8UHJldHRpZnk8U3RhdGU+PiB8IFBhcnRpYWxTdGF0ZVVwZGF0ZXI8UHJldHRpZnk8U3RhdGU+PlxuICA+XG4pOiB2b2lkIHtcbiAgY3VycmVudEFjdGlvbk5hbWVzLmFkZChhY3Rpb24pO1xuICByZXR1cm4gb3JpZ2luYWxQYXRjaFN0YXRlKHN0YXRlU291cmNlLCAuLi51cGRhdGVycyk7XG59XG4iXX0=
@@ -6,12 +6,12 @@
6
6
  * This feature implements the local pagination.
7
7
  */
8
8
  import { computed } from '@angular/core';
9
- import { signalStoreFeature, withComputed, withState, } from '@ngrx/signals';
9
+ import { patchState, signalStoreFeature, withComputed, withMethods, withState, } from '@ngrx/signals';
10
10
  import { capitalize } from './with-data-service';
11
11
  export function withPagination(options) {
12
- const { pageKey, pageSizeKey, entitiesKey, selectedPageEntitiesKey, totalCountKey, pageCountKey, pageNavigationArrayMaxKey, pageNavigationArrayKey, } = createPaginationKeys(options);
12
+ const { pageKey, pageSizeKey, entitiesKey, selectedPageEntitiesKey, totalCountKey, pageCountKey, pageNavigationArrayMaxKey, pageNavigationArrayKey, setPageSizeKey, nextPageKey, previousPageKey, lastPageKey, firstPageKey, gotoPageKey, hasNextPageKey, hasPreviousPageKey, } = createPaginationKeys(options);
13
13
  return signalStoreFeature(withState({
14
- [pageKey]: 1,
14
+ [pageKey]: 0,
15
15
  [pageSizeKey]: 10,
16
16
  [pageNavigationArrayMaxKey]: 7,
17
17
  }), withComputed((store) => {
@@ -24,14 +24,7 @@ export function withPagination(options) {
24
24
  [selectedPageEntitiesKey]: computed(() => {
25
25
  const pageSizeValue = pageSize();
26
26
  const pageValue = page();
27
- // If the page is greater than the total number of pages
28
- // we should return an empty array
29
- if (pageValue < 0 ||
30
- pageSizeValue === 0 ||
31
- pageValue > Math.ceil(entities().length / pageSizeValue)) {
32
- return [];
33
- }
34
- return entities().slice((pageValue - 1) * pageSizeValue, pageValue * pageSizeValue);
27
+ return entities().slice(pageValue * pageSizeValue, (pageValue + 1) * pageSizeValue);
35
28
  }),
36
29
  [totalCountKey]: computed(() => entities().length),
37
30
  [pageCountKey]: computed(() => {
@@ -43,6 +36,36 @@ export function withPagination(options) {
43
36
  return Math.ceil(totalCountValue / pageSizeValue);
44
37
  }),
45
38
  [pageNavigationArrayKey]: computed(() => createPageArray(page(), pageSize(), entities().length, pageNavigationArrayMax())),
39
+ [hasNextPageKey]: computed(() => {
40
+ return page() < pageSize();
41
+ }),
42
+ [hasPreviousPageKey]: computed(() => {
43
+ return page() > 1;
44
+ }),
45
+ };
46
+ }), withMethods((store) => {
47
+ return {
48
+ [setPageSizeKey]: (size) => {
49
+ patchState(store, setPageSize(size, options));
50
+ },
51
+ [nextPageKey]: () => {
52
+ patchState(store, nextPage(options));
53
+ },
54
+ [previousPageKey]: () => {
55
+ patchState(store, previousPage(options));
56
+ },
57
+ [lastPageKey]: () => {
58
+ const lastPage = store[pageCountKey]();
59
+ if (lastPage === 0)
60
+ return;
61
+ patchState(store, gotoPage(lastPage - 1, options));
62
+ },
63
+ [firstPageKey]: () => {
64
+ patchState(store, firstPage());
65
+ },
66
+ [gotoPageKey]: (page) => {
67
+ patchState(store, gotoPage(page, options));
68
+ },
46
69
  };
47
70
  }));
48
71
  }
@@ -89,7 +112,9 @@ function createPaginationKeys(options) {
89
112
  const selectedPageEntitiesKey = options?.collection
90
113
  ? `selectedPage${capitalize(options?.collection)}Entities`
91
114
  : 'selectedPageEntities';
92
- const pageKey = options?.collection ? `${options.collection}CurrentPage` : 'currentPage';
115
+ const pageKey = options?.collection
116
+ ? `${options.collection}CurrentPage`
117
+ : 'currentPage';
93
118
  const pageSizeKey = options?.collection
94
119
  ? `${options.collection}PageSize`
95
120
  : 'pageSize';
@@ -105,6 +130,30 @@ function createPaginationKeys(options) {
105
130
  const pageNavigationArrayKey = options?.collection
106
131
  ? `${options.collection}PageNavigationArray`
107
132
  : 'pageNavigationArray';
133
+ const setPageSizeKey = options?.collection
134
+ ? `set${capitalize(options.collection)}PageSize`
135
+ : 'setPageSize';
136
+ const nextPageKey = options?.collection
137
+ ? `next${capitalize(options.collection)}Page`
138
+ : 'nextPage';
139
+ const previousPageKey = options?.collection
140
+ ? `previous${capitalize(options.collection)}Page`
141
+ : 'previousPage';
142
+ const lastPageKey = options?.collection
143
+ ? `last${capitalize(options.collection)}Page`
144
+ : 'lastPage';
145
+ const firstPageKey = options?.collection
146
+ ? `first${capitalize(options.collection)}Page`
147
+ : 'firstPage';
148
+ const gotoPageKey = options?.collection
149
+ ? `goto${capitalize(options.collection)}Page`
150
+ : 'gotoPage';
151
+ const hasNextPageKey = options?.collection
152
+ ? `hasNext${capitalize(options.collection)}Page`
153
+ : 'hasNextPage';
154
+ const hasPreviousPageKey = options?.collection
155
+ ? `hasPrevious${capitalize(options.collection)}Page`
156
+ : 'hasPreviousPage';
108
157
  return {
109
158
  pageKey,
110
159
  pageSizeKey,
@@ -114,6 +163,14 @@ function createPaginationKeys(options) {
114
163
  pageCountKey,
115
164
  pageNavigationArrayKey,
116
165
  pageNavigationArrayMaxKey,
166
+ setPageSizeKey,
167
+ nextPageKey,
168
+ previousPageKey,
169
+ lastPageKey,
170
+ firstPageKey,
171
+ gotoPageKey,
172
+ hasNextPageKey,
173
+ hasPreviousPageKey,
117
174
  };
118
175
  }
119
176
  export function createPageArray(currentPage, itemsPerPage, totalItems, paginationRange) {
@@ -149,4 +206,4 @@ export function createPageArray(currentPage, itemsPerPage, totalItems, paginatio
149
206
  }
150
207
  return pages;
151
208
  }
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1wYWdpbmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRvb2xraXQvc3JjL2xpYi93aXRoLXBhZ2luYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBRUwsa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFPdkIsT0FBTyxFQUFVLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBcUd6RCxNQUFNLFVBQVUsY0FBYyxDQUc1QixPQUFvQztJQUNwQyxNQUFNLEVBQ0osT0FBTyxFQUNQLFdBQVcsRUFDWCxXQUFXLEVBQ1gsdUJBQXVCLEVBQ3ZCLGFBQWEsRUFDYixZQUFZLEVBQ1oseUJBQXlCLEVBQ3pCLHNCQUFzQixHQUN2QixHQUFHLG9CQUFvQixDQUFhLE9BQU8sQ0FBQyxDQUFDO0lBRTlDLE9BQU8sa0JBQWtCLENBQ3ZCLFNBQVMsQ0FBQztRQUNSLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNaLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRTtRQUNqQixDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQztLQUMvQixDQUFDLEVBQ0YsWUFBWSxDQUFDLENBQUMsS0FBOEIsRUFBRSxFQUFFO1FBQzlDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQWdCLENBQUM7UUFDbkQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBbUIsQ0FBQztRQUM5QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFtQixDQUFDO1FBQ3RELE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxDQUNsQyx5QkFBeUIsQ0FDUixDQUFDO1FBRXBCLE9BQU87WUFDTCwrREFBK0Q7WUFDL0QsQ0FBQyx1QkFBdUIsQ0FBQyxF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QyxDQUFDO1FBRW5CLElBQUksQ0FBQyxLQUFLLGVBQWUsRUFBRTtZQUN6QixVQUFVLEdBQUcsVUFBVSxDQUFDO1NBQ3pCO2FBQU0sSUFBSSxjQUFjLEVBQUU7WUFDekIsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsVUFBVSxHQUFHLFVBQVUsR0FBRyxlQUFlLEdBQUcsQ0FBQyxDQUFDO2FBQy9DO2lCQUFNLElBQUksUUFBUSxFQUFFO2dCQUNuQixVQUFVLEdBQUcsV0FBVyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7YUFDeEM7U0FDRjtRQUVELE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQztRQUM3RCxNQUFNLHFCQUFxQixHQUN6QixDQUFDLEtBQUssZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQztRQUVyRCxNQUFNLEtBQUssR0FDVCxjQUFjLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxxQkFBcUIsQ0FBQztZQUNoRSxDQUFDLENBQUMsS0FBSztZQUNQLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFFakIsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztLQUMxQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBXaXRoIHBhZ2luYXRpb24gY29tZXMgaW4gdHdvIGZsYXZvcnMgdGhlIGZpcnN0IG9uZSBpcyBsb2NhbCBwYWdpbmF0aW9uIG9yIGluIG1lbW9yeSBwYWdpbmF0aW9uLiBGb3IgZXhhbXBsZSB3ZSBoYXZlIDIwMDAgaXRlbXMgd2hpY2ggd2Ugd2FudFxuICogdG8gZGlzcGxheSBpbiBhIHRhYmxlIGFuZCB0aGUgcmVzcG9uc2UgcGF5bG9hZCBpcyBzbWFsbCBlbm91Z2ggdG8gYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkuIEJ1dCB3ZSBjYW4gbm90IGRpc3BsYXkgYWxsIDIwMDAgaXRlbXMgYXQgb25jZVxuICogc28gd2UgbmVlZCB0byBwYWdpbmF0ZSB0aGUgZGF0YS4gVGhlIHNlY29uZCBmbGF2b3IgaXMgc2VydmVyIHNpZGUgcGFnaW5hdGlvbiB3aGVyZSB0aGUgcmVzcG9uc2UgcGF5bG9hZCBpcyB0b28gbGFyZ2UgdG8gYmUgc3RvcmVkIGluIHRoZSBtZW1vcnlcbiAqIGFuZCB3ZSBuZWVkIHRvIGZldGNoIHRoZSBkYXRhIGZyb20gdGhlIHNlcnZlciBpbiBjaHVua3MuIEluIHRoZSBzZWNvbmQgY2FzZSB3ZSAnY291bGQnIGFsc28gY2FjaGUgdGhlIGRhdGEgaW4gdGhlIG1lbW9yeSBidXQgdGhhdCBjb3VsZCBsZWFkIHRvXG4gKiBvdGhlciBwcm9ibGVtcyBsaWtlIG1lbW9yeSBsZWFrcyBhbmQgc3RhbGUgZGF0YS4gU28gd2Ugd2lsbCBub3QgY2FjaGUgdGhlIGRhdGEgaW4gdGhlIG1lbW9yeSBpbiB0aGUgc2Vjb25kIGNhc2UuXG4gKiBUaGlzIGZlYXR1cmUgaW1wbGVtZW50cyB0aGUgbG9jYWwgcGFnaW5hdGlvbi5cbiAqL1xuXG5pbXBvcnQgeyBTaWduYWwsIGNvbXB1dGVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTaWduYWxTdG9yZUZlYXR1cmUsXG4gIHNpZ25hbFN0b3JlRmVhdHVyZSxcbiAgd2l0aENvbXB1dGVkLFxuICB3aXRoU3RhdGUsXG59IGZyb20gJ0BuZ3J4L3NpZ25hbHMnO1xuaW1wb3J0IHsgRW10cHkgfSBmcm9tICcuL3NoYXJlZC9lbXB0eSc7XG5pbXBvcnQge1xuICBFbnRpdHlTaWduYWxzLFxuICBFbnRpdHlTdGF0ZSxcbiAgTmFtZWRFbnRpdHlTaWduYWxzLFxufSBmcm9tICdAbmdyeC9zaWduYWxzL2VudGl0aWVzL3NyYy9tb2RlbHMnO1xuaW1wb3J0IHsgRW50aXR5LCBjYXBpdGFsaXplIH0gZnJvbSAnLi93aXRoLWRhdGEtc2VydmljZSc7XG5cbi8vIFRoaXMgaXMgYSB2aXJ0dWFsIHBhZ2Ugd2hpY2ggaXMgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgcGFnaW5hdGlvbiBjb250cm9sXG5leHBvcnQgdHlwZSBQYWdlID0geyBsYWJlbDogc3RyaW5nIHwgbnVtYmVyOyB2YWx1ZTogbnVtYmVyIH07XG5cbmV4cG9ydCB0eXBlIE5hbWVkUGFnaW5hdGlvblNlcnZpY2VTdGF0ZTxcbiAgRSBleHRlbmRzIEVudGl0eSxcbiAgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZ1xuPiA9IHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgc2VsZWN0ZWRQYWdlJHtDYXBpdGFsaXplPEs+fUVudGl0aWVzYF06IEFycmF5PEU+O1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgJHtMb3dlcmNhc2U8Sz59Q3VycmVudFBhZ2VgXTogbnVtYmVyO1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgJHtMb3dlcmNhc2U8Sz59UGFnZVNpemVgXTogbnVtYmVyO1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgJHtMb3dlcmNhc2U8Sz59VG90YWxDb3VudGBdOiBudW1iZXI7XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0xvd2VyY2FzZTxLPn1QYWdlQ291bnRgXTogbnVtYmVyO1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgJHtMb3dlcmNhc2U8Sz59UGFnZU5hdmlnYXRpb25BcnJheWBdOiBudW1iZXI7XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0xvd2VyY2FzZTxLPn1QYWdlTmF2aWdhdGlvbkFycmF5TWF4YF06IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIE5hbWVkUGFnaW5hdGlvblNlcnZpY2VTaWduYWxzPFxuICBFIGV4dGVuZHMgRW50aXR5LFxuICBDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nXG4+ID0ge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBzZWxlY3RlZFBhZ2Uke0NhcGl0YWxpemU8Sz59RW50aXRpZXNgXTogU2lnbmFsPEVbXT47XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0xvd2VyY2FzZTxLPn1DdXJyZW50UGFnZWBdOiBTaWduYWw8bnVtYmVyPjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYCR7TG93ZXJjYXNlPEs+fVBhZ2VTaXplYF06IFNpZ25hbDxudW1iZXI+O1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgJHtMb3dlcmNhc2U8Sz59VG90YWxDb3VudGBdOiBTaWduYWw8bnVtYmVyPjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYCR7TG93ZXJjYXNlPEs+fVBhZ2VDb3VudGBdOiBTaWduYWw8bnVtYmVyPjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYCR7TG93ZXJjYXNlPEs+fVBhZ2VOYXZpZ2F0aW9uQXJyYXlgXTogU2lnbmFsPFBhZ2VbXT47XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0xvd2VyY2FzZTxLPn1QYWdlTmF2aWdhdGlvbkFycmF5TWF4YF06IFNpZ25hbDxudW1iZXI+O1xufTtcblxuZXhwb3J0IHR5cGUgUGFnaW5hdGlvblNlcnZpY2VTdGF0ZTxFIGV4dGVuZHMgRW50aXR5PiA9IHtcbiAgc2VsZWN0ZWRQYWdlRW50aXRpZXM6IEFycmF5PEU+O1xuICBjdXJyZW50UGFnZTogbnVtYmVyO1xuICBwYWdlU2l6ZTogbnVtYmVyO1xuICB0b3RhbENvdW50OiBudW1iZXI7XG4gIHBhZ2VDb3VudDogbnVtYmVyO1xuICBwYWdlTmF2aWdhdGlvbkFycmF5OiBQYWdlW107XG4gIHBhZ2VOYXZpZ2F0aW9uQXJyYXlNYXg6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFBhZ2luYXRpb25TZXJ2aWNlU2lnbmFsczxFIGV4dGVuZHMgRW50aXR5PiA9IHtcbiAgc2VsZWN0ZWRQYWdlRW50aXRpZXM6IFNpZ25hbDxFW10+O1xuICBjdXJyZW50UGFnZTogU2lnbmFsPG51bWJlcj47XG4gIHBhZ2VTaXplOiBTaWduYWw8bnVtYmVyPjtcbiAgdG90YWxDb3VudDogU2lnbmFsPG51bWJlcj47XG4gIHBhZ2VDb3VudDogU2lnbmFsPG51bWJlcj47XG4gIHBhZ2VOYXZpZ2F0aW9uQXJyYXk6IFNpZ25hbDxQYWdlW10+O1xuICBwYWdlTmF2aWdhdGlvbkFycmF5TWF4OiBTaWduYWw8bnVtYmVyPjtcbn07XG5cbmV4cG9ydCB0eXBlIFNldFBhZ2luYXRpb25TdGF0ZTxcbiAgRSBleHRlbmRzIEVudGl0eSxcbiAgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZyB8IHVuZGVmaW5lZFxuPiA9IENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmdcbiAgPyBOYW1lZFBhZ2luYXRpb25TZXJ2aWNlU3RhdGU8RSwgQ29sbGVjdGlvbj5cbiAgOiBQYWdpbmF0aW9uU2VydmljZVN0YXRlPEU+O1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFBhZ2luYXRpb248XG4gIEUgZXh0ZW5kcyBFbnRpdHksXG4gIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmdcbj4ob3B0aW9uczoge1xuICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xufSk6IFNpZ25hbFN0b3JlRmVhdHVyZTxcbiAge1xuICAgIHN0YXRlOiBFbXRweTtcbiAgICBzaWduYWxzOiBOYW1lZEVudGl0eVNpZ25hbHM8RSwgQ29sbGVjdGlvbj47XG4gICAgbWV0aG9kczogRW10cHk7XG4gIH0sXG4gIHtcbiAgICBzdGF0ZTogTmFtZWRQYWdpbmF0aW9uU2VydmljZVN0YXRlPEUsIENvbGxlY3Rpb24+O1xuICAgIHNpZ25hbHM6IE5hbWVkUGFnaW5hdGlvblNlcnZpY2VTaWduYWxzPEUsIENvbGxlY3Rpb24+O1xuICAgIG1ldGhvZHM6IEVtdHB5O1xuICB9XG4+O1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFBhZ2luYXRpb248RSBleHRlbmRzIEVudGl0eT4oKTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICB7XG4gICAgc3RhdGU6IEVudGl0eVN0YXRlPEU+O1xuICAgIHNpZ25hbHM6IEVudGl0eVNpZ25hbHM8RT47XG4gICAgbWV0aG9kczogRW10cHk7XG4gIH0sXG4gIHtcbiAgICBzdGF0ZTogUGFnaW5hdGlvblNlcnZpY2VTdGF0ZTxFPjtcbiAgICBzaWduYWxzOiBQYWdpbmF0aW9uU2VydmljZVNpZ25hbHM8RT47XG4gICAgbWV0aG9kczogRW10cHk7XG4gIH1cbj47XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUGFnaW5hdGlvbjxcbiAgRSBleHRlbmRzIEVudGl0eSxcbiAgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZ1xuPihvcHRpb25zPzogeyBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uIH0pOiBTaWduYWxTdG9yZUZlYXR1cmU8YW55LCBhbnk+IHtcbiAgY29uc3Qge1xuICAgIHBhZ2VLZXksXG4gICAgcGFnZVNpemVLZXksXG4gICAgZW50aXRpZXNLZXksXG4gICAgc2VsZWN0ZWRQYWdlRW50aXRpZXNLZXksXG4gICAgdG90YWxDb3VudEtleSxcbiAgICBwYWdlQ291bnRLZXksXG4gICAgcGFnZU5hdmlnYXRpb25BcnJheU1heEtleSxcbiAgICBwYWdlTmF2aWdhdGlvbkFycmF5S2V5LFxuICB9ID0gY3JlYXRlUGFnaW5hdGlvbktleXM8Q29sbGVjdGlvbj4ob3B0aW9ucyk7XG5cbiAgcmV0dXJuIHNpZ25hbFN0b3JlRmVhdHVyZShcbiAgICB3aXRoU3RhdGUoe1xuICAgICAgW3BhZ2VLZXldOiAxLFxuICAgICAgW3BhZ2VTaXplS2V5XTogMTAsXG4gICAgICBbcGFnZU5hdmlnYXRpb25BcnJheU1heEtleV06IDcsXG4gICAgfSksXG4gICAgd2l0aENvbXB1dGVkKChzdG9yZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgIGNvbnN0IGVudGl0aWVzID0gc3RvcmVbZW50aXRpZXNLZXldIGFzIFNpZ25hbDxFW10+O1xuICAgICAgY29uc3QgcGFnZSA9IHN0b3JlW3BhZ2VLZXldIGFzIFNpZ25hbDxudW1iZXI+O1xuICAgICAgY29uc3QgcGFnZVNpemUgPSBzdG9yZVtwYWdlU2l6ZUtleV0gYXMgU2lnbmFsPG51bWJlcj47XG4gICAgICBjb25zdCBwYWdlTmF2aWdhdGlvbkFycmF5TWF4ID0gc3RvcmVbXG4gICAgICAgIHBhZ2VOYXZpZ2F0aW9uQXJyYXlNYXhLZXlcbiAgICAgIF0gYXMgU2lnbmFsPG51bWJlcj47XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC8vIFRoZSBkZXJpdmVkIGVuaXRpdGVzIHdoaWNoIGFyZSBkaXNwbGF5ZWQgb24gdGhlIGN1cnJlbnQgcGFnZVxuICAgICAgICBbc2VsZWN0ZWRQYWdlRW50aXRpZXNLZXldOiBjb21wdXRlZDxFW10+KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYWdlU2l6ZVZhbHVlID0gcGFnZVNpemUoKTtcbiAgICAgICAgICBjb25zdCBwYWdlVmFsdWUgPSBwYWdlKCk7XG5cbiAgICAgICAgICAvLyBJZiB0aGUgcGFnZSBpcyBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBwYWdlc1xuICAgICAgICAgIC8vIHdlIHNob3VsZCByZXR1cm4gYW4gZW1wdHkgYXJyYXlcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYWdlVmFsdWUgPCAwIHx8XG4gICAgICAgICAgICBwYWdlU2l6ZVZhbHVlID09PSAwIHx8XG4gICAgICAgICAgICBwYWdlVmFsdWUgPiBNYXRoLmNlaWwoZW50aXRpZXMoKS5sZW5ndGggLyBwYWdlU2l6ZVZhbHVlKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIFtdIGFzIEVbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZW50aXRpZXMoKS5zbGljZShcbiAgICAgICAgICAgIChwYWdlVmFsdWUgLSAxKSAqIHBhZ2VTaXplVmFsdWUsXG4gICAgICAgICAgICBwYWdlVmFsdWUgKiBwYWdlU2l6ZVZhbHVlXG4gICAgICAgICAgKSBhcyBFW107XG4gICAgICAgIH0pLFxuICAgICAgICBbdG90YWxDb3VudEtleV06IGNvbXB1dGVkKCgpID0+IGVudGl0aWVzKCkubGVuZ3RoKSxcbiAgICAgICAgW3BhZ2VDb3VudEtleV06IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgICBjb25zdCB0b3RhbENvdW50VmFsdWUgPSBlbnRpdGllcygpLmxlbmd0aDtcbiAgICAgICAgICBjb25zdCBwYWdlU2l6ZVZhbHVlID0gcGFnZVNpemUoKTtcblxuICAgICAgICAgIGlmICh0b3RhbENvdW50VmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwodG90YWxDb3VudFZhbHVlIC8gcGFnZVNpemVWYWx1ZSk7XG4gICAgICAgIH0pLFxuICAgICAgICBbcGFnZU5hdmlnYXRpb25BcnJheUtleV06IGNvbXB1dGVkKCgpID0+XG4gICAgICAgICAgY3JlYXRlUGFnZUFycmF5KFxuICAgICAgICAgICAgcGFnZSgpLFxuICAgICAgICAgICAgcGFnZVNpemUoKSxcbiAgICAgICAgICAgIGVudGl0aWVzKCkubGVuZ3RoLFxuICAgICAgICAgICAgcGFnZU5hdmlnYXRpb25BcnJheU1heCgpXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgfTtcbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ290b1BhZ2U8RSBleHRlbmRzIEVudGl0eSwgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4oXG4gIHBhZ2U6IG51bWJlcixcbiAgb3B0aW9ucz86IHtcbiAgICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xuICB9XG4pOiBQYXJ0aWFsPFNldFBhZ2luYXRpb25TdGF0ZTxFLCBDb2xsZWN0aW9uPj4ge1xuICBjb25zdCB7IHBhZ2VLZXkgfSA9IGNyZWF0ZVBhZ2luYXRpb25LZXlzPENvbGxlY3Rpb24+KG9wdGlvbnMpO1xuXG4gIHJldHVybiB7XG4gICAgW3BhZ2VLZXldOiBwYWdlLFxuICB9IGFzIFBhcnRpYWw8U2V0UGFnaW5hdGlvblN0YXRlPEUsIENvbGxlY3Rpb24+Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFBhZ2VTaXplPEUgZXh0ZW5kcyBFbnRpdHksIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KFxuICBwYWdlU2l6ZTogbnVtYmVyLFxuICBvcHRpb25zPzoge1xuICAgIGNvbGxlY3Rpb246IENvbGxlY3Rpb247XG4gIH1cbik6IFBhcnRpYWw8U2V0UGFnaW5hdGlvblN0YXRlPEUsIENvbGxlY3Rpb24+PiB7XG4gIGNvbnN0IHsgcGFnZVNpemVLZXkgfSA9IGNyZWF0ZVBhZ2luYXRpb25LZXlzPENvbGxlY3Rpb24+KG9wdGlvbnMpO1xuXG4gIHJldHVybiB7XG4gICAgW3BhZ2VTaXplS2V5XTogcGFnZVNpemUsXG4gIH0gYXMgUGFydGlhbDxTZXRQYWdpbmF0aW9uU3RhdGU8RSwgQ29sbGVjdGlvbj4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV4dFBhZ2U8XG4gIEUgZXh0ZW5kcyBFbnRpdHksXG4gIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmdcbj4ob3B0aW9ucz86IHtcbiAgY29sbGVjdGlvbjogQ29sbGVjdGlvbjtcbn0pOiBQYXJ0aWFsPFNldFBhZ2luYXRpb25TdGF0ZTxFLCBDb2xsZWN0aW9uPj4ge1xuICBjb25zdCB7IHBhZ2VLZXkgfSA9IGNyZWF0ZVBhZ2luYXRpb25LZXlzPENvbGxlY3Rpb24+KG9wdGlvbnMpO1xuXG4gIHJldHVybiB7XG4gICAgW3BhZ2VLZXldOiAoY3VycmVudFBhZ2U6IG51bWJlcikgPT4gY3VycmVudFBhZ2UgKyAxLFxuICB9IGFzIFBhcnRpYWw8U2V0UGFnaW5hdGlvblN0YXRlPEUsIENvbGxlY3Rpb24+Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXZpb3VzUGFnZTxcbiAgRSBleHRlbmRzIEVudGl0eSxcbiAgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZ1xuPihvcHRpb25zPzoge1xuICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xufSk6IFBhcnRpYWw8U2V0UGFnaW5hdGlvblN0YXRlPEUsIENvbGxlY3Rpb24+PiB7XG4gIGNvbnN0IHsgcGFnZUtleSB9ID0gY3JlYXRlUGFnaW5hdGlvbktleXM8Q29sbGVjdGlvbj4ob3B0aW9ucyk7XG5cbiAgcmV0dXJuIHtcbiAgICBbcGFnZUtleV06IChjdXJyZW50UGFnZTogbnVtYmVyKSA9PiBNYXRoLm1heChjdXJyZW50UGFnZSAtIDEsIDEpLFxuICB9IGFzIFBhcnRpYWw8U2V0UGFnaW5hdGlvblN0YXRlPEUsIENvbGxlY3Rpb24+Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0UGFnZTxcbiAgRSBleHRlbmRzIEVudGl0eSxcbiAgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZ1xuPihvcHRpb25zPzoge1xuICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xufSk6IFBhcnRpYWw8U2V0UGFnaW5hdGlvblN0YXRlPEUsIENvbGxlY3Rpb24+PiB7XG4gIGNvbnN0IHsgcGFnZUtleSB9ID0gY3JlYXRlUGFnaW5hdGlvbktleXM8Q29sbGVjdGlvbj4ob3B0aW9ucyk7XG5cbiAgcmV0dXJuIHtcbiAgICBbcGFnZUtleV06IDEsXG4gIH0gYXMgUGFydGlhbDxTZXRQYWdpbmF0aW9uU3RhdGU8RSwgQ29sbGVjdGlvbj4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0TWF4UGFnZU5hdmlnYXRpb25BcnJheUl0ZW1zPFxuICBFIGV4dGVuZHMgRW50aXR5LFxuICBDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nXG4+KFxuICBtYXhQYWdlTmF2aWdhdGlvbkFycmF5SXRlbXM6IG51bWJlcixcbiAgb3B0aW9ucz86IHtcbiAgICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xuICB9XG4pOiBQYXJ0aWFsPFNldFBhZ2luYXRpb25TdGF0ZTxFLCBDb2xsZWN0aW9uPj4ge1xuICBjb25zdCB7IHBhZ2VOYXZpZ2F0aW9uQXJyYXlNYXhLZXkgfSA9XG4gICAgY3JlYXRlUGFnaW5hdGlvbktleXM8Q29sbGVjdGlvbj4ob3B0aW9ucyk7XG5cbiAgcmV0dXJuIHtcbiAgICBbcGFnZU5hdmlnYXRpb25BcnJheU1heEtleV06IG1heFBhZ2VOYXZpZ2F0aW9uQXJyYXlJdGVtcyxcbiAgfSBhcyBQYXJ0aWFsPFNldFBhZ2luYXRpb25TdGF0ZTxFLCBDb2xsZWN0aW9uPj47XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBhZ2luYXRpb25LZXlzPENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KFxuICBvcHRpb25zOiB7IGNvbGxlY3Rpb246IENvbGxlY3Rpb24gfSB8IHVuZGVmaW5lZFxuKSB7XG4gIGNvbnN0IGVudGl0aWVzS2V5ID0gb3B0aW9ucz8uY29sbGVjdGlvblxuICAgID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufUVudGl0aWVzYFxuICAgIDogJ2VudGl0aWVzJztcbiAgY29uc3Qgc2VsZWN0ZWRQYWdlRW50aXRpZXNLZXkgPSBvcHRpb25zPy5jb2xsZWN0aW9uXG4gICAgPyBgc2VsZWN0ZWRQYWdlJHtjYXBpdGFsaXplKG9wdGlvbnM/LmNvbGxlY3Rpb24pfUVudGl0aWVzYFxuICAgIDogJ3NlbGVjdGVkUGFnZUVudGl0aWVzJztcbiAgY29uc3QgcGFnZUtleSA9IG9wdGlvbnM/LmNvbGxlY3Rpb24gPyBgJHtvcHRpb25zLmNvbGxlY3Rpb259Q3VycmVudFBhZ2VgIDogJ2N1cnJlbnRQYWdlJztcbiAgY29uc3QgcGFnZVNpemVLZXkgPSBvcHRpb25zPy5jb2xsZWN0aW9uXG4gICAgPyBgJHtvcHRpb25zLmNvbGxlY3Rpb259UGFnZVNpemVgXG4gICAgOiAncGFnZVNpemUnO1xuICBjb25zdCB0b3RhbENvdW50S2V5ID0gb3B0aW9ucz8uY29sbGVjdGlvblxuICAgID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufVRvdGFsQ291bnRgXG4gICAgOiAndG90YWxDb3VudCc7XG4gIGNvbnN0IHBhZ2VDb3VudEtleSA9IG9wdGlvbnM/LmNvbGxlY3Rpb25cbiAgICA/IGAke29wdGlvbnMuY29sbGVjdGlvbn1QYWdlQ291bnRgXG4gICAgOiAncGFnZUNvdW50JztcbiAgY29uc3QgcGFnZU5hdmlnYXRpb25BcnJheU1heEtleSA9IG9wdGlvbnM/LmNvbGxlY3Rpb25cbiAgICA/IGAke29wdGlvbnMuY29sbGVjdGlvbn1QYWdlTmF2aWdhdGlvbkFycmF5TWF4YFxuICAgIDogJ3BhZ2VOYXZpZ2F0aW9uQXJyYXlNYXgnO1xuICBjb25zdCBwYWdlTmF2aWdhdGlvbkFycmF5S2V5ID0gb3B0aW9ucz8uY29sbGVjdGlvblxuICAgID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufVBhZ2VOYXZpZ2F0aW9uQXJyYXlgXG4gICAgOiAncGFnZU5hdmlnYXRpb25BcnJheSc7XG4gIHJldHVybiB7XG4gICAgcGFnZUtleSxcbiAgICBwYWdlU2l6ZUtleSxcbiAgICBlbnRpdGllc0tleSxcbiAgICBzZWxlY3RlZFBhZ2VFbnRpdGllc0tleSxcbiAgICB0b3RhbENvdW50S2V5LFxuICAgIHBhZ2VDb3VudEtleSxcbiAgICBwYWdlTmF2aWdhdGlvbkFycmF5S2V5LFxuICAgIHBhZ2VOYXZpZ2F0aW9uQXJyYXlNYXhLZXksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYWdlQXJyYXkoXG4gIGN1cnJlbnRQYWdlOiBudW1iZXIsXG4gIGl0ZW1zUGVyUGFnZTogbnVtYmVyLFxuICB0b3RhbEl0ZW1zOiBudW1iZXIsXG4gIHBhZ2luYXRpb25SYW5nZTogbnVtYmVyXG4pOiBQYWdlW10ge1xuICAvLyBDb252ZXJ0IHBhZ2luYXRpb25SYW5nZSB0byBudW1iZXIgaW4gY2FzZSBpdCdzIGEgc3RyaW5nXG4gIHBhZ2luYXRpb25SYW5nZSA9ICtwYWdpbmF0aW9uUmFuZ2U7XG5cbiAgLy8gQ2FsY3VsYXRlIHRvdGFsIG51bWJlciBvZiBwYWdlc1xuICBjb25zdCB0b3RhbFBhZ2VzID0gTWF0aC5tYXgoTWF0aC5jZWlsKHRvdGFsSXRlbXMgLyBpdGVtc1BlclBhZ2UpLCAxKTtcbiAgY29uc3QgaGFsZldheSA9IE1hdGguY2VpbChwYWdpbmF0aW9uUmFuZ2UgLyAyKTtcblxuICBjb25zdCBpc1N0YXJ0ID0gY3VycmVudFBhZ2UgPD0gaGFsZldheTtcbiAgY29uc3QgaXNFbmQgPSB0b3RhbFBhZ2VzIC0gaGFsZldheSA8IGN1cnJlbnRQYWdlO1xuICBjb25zdCBpc01pZGRsZSA9ICFpc1N0YXJ0ICYmICFpc0VuZDtcblxuICBjb25zdCBlbGxpcHNlc05lZWRlZCA9IHBhZ2luYXRpb25SYW5nZSA8IHRvdGFsUGFnZXM7XG4gIGNvbnN0IHBhZ2VzOiBQYWdlW10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMTsgaSA8PSB0b3RhbFBhZ2VzICYmIGkgPD0gcGFnaW5hdGlvblJhbmdlOyBpKyspIHtcbiAgICBsZXQgcGFnZU51bWJlciA9IGk7XG5cbiAgICBpZiAoaSA9PT0gcGFnaW5hdGlvblJhbmdlKSB7XG4gICAgICBwYWdlTnVtYmVyID0gdG90YWxQYWdlcztcbiAgICB9IGVsc2UgaWYgKGVsbGlwc2VzTmVlZGVkKSB7XG4gICAgICBpZiAoaXNFbmQpIHtcbiAgICAgICAgcGFnZU51bWJlciA9IHRvdGFsUGFnZXMgLSBwYWdpbmF0aW9uUmFuZ2UgKyBpO1xuICAgICAgfSBlbHNlIGlmIChpc01pZGRsZSkge1xuICAgICAgICBwYWdlTnVtYmVyID0gY3VycmVudFBhZ2UgLSBoYWxmV2F5ICsgaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvcGVuaW5nRWxsaXBzZXNOZWVkZWQgPSBpID09PSAyICYmIChpc01pZGRsZSB8fCBpc0VuZCk7XG4gICAgY29uc3QgY2xvc2luZ0VsbGlwc2VzTmVlZGVkID1cbiAgICAgIGkgPT09IHBhZ2luYXRpb25SYW5nZSAtIDEgJiYgKGlzTWlkZGxlIHx8IGlzU3RhcnQpO1xuXG4gICAgY29uc3QgbGFiZWwgPVxuICAgICAgZWxsaXBzZXNOZWVkZWQgJiYgKG9wZW5pbmdFbGxpcHNlc05lZWRlZCB8fCBjbG9zaW5nRWxsaXBzZXNOZWVkZWQpXG4gICAgICAgID8gJy4uLidcbiAgICAgICAgOiBwYWdlTnVtYmVyO1xuXG4gICAgcGFnZXMucHVzaCh7IGxhYmVsLCB2YWx1ZTogcGFnZU51bWJlciB9KTtcbiAgfVxuXG4gIHJldHVybiBwYWdlcztcbn1cbiJdfQ==
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1wYWdpbmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRvb2xraXQvc3JjL2xpYi93aXRoLXBhZ2luYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBRUwsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osV0FBVyxFQUNYLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUEwSGpELE1BQU0sVUFBVSxjQUFjLENBQStCLE9BRzVEO0lBQ0MsTUFBTSxFQUNKLE9BQU8sRUFDUCxXQUFXLEVBQ1gsV0FBVyxFQUNYLHVCQUF1QixFQUN2QixhQUFhLEVBQ2IsWUFBWSxFQUNaLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsY0FBYyxFQUNkLFdBQVcsRUFDWCxlQUFlLEVBQ2YsV0FBVyxFQUNYLFlBQVksRUFDWixXQUFXLEVBQ1gsY0FBYyxFQUNkLGtCQUFrQixHQUNuQixHQUFHLG9CQUFvQixDQUFhLE9BQU8sQ0FBQyxDQUFDO0lBRTlDLE9BQU8sa0JBQWtCLENBQ3ZCLFNBQVMsQ0FBQztRQUNSLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNaLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRTtRQUNqQixDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQztLQUMvQixDQUFDLEVBQ0YsWUFBWSxDQUFDLENBQUMsS0FBOEIsRUFBRSxFQUFFO1FBQzlDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQWdCLENBQUM7UUFDbkQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBbUIsQ0FBQztRQUM5QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFtQixD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b21lcyBpbiB0d28gZmxhdm9ycyB0aGUgZmlyc3Qgb25lIGlzIGxvY2FsIHBhZ2luYXRpb24gb3IgaW4gbWVtb3J5IHBhZ2luYXRpb24uIEZvciBleGFtcGxlIHdlIGhhdmUgMjAwMCBpdGVtcyB3aGljaCB3ZSB3YW50XG4gKiB0byBkaXNwbGF5IGluIGEgdGFibGUgYW5kIHRoZSByZXNwb25zZSBwYXlsb2FkIGlzIHNtYWxsIGVub3VnaCB0byBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeS4gQnV0IHdlIGNhbiBub3QgZGlzcGxheSBhbGwgMjAwMCBpdGVtcyBhdCBvbmNlXG4gKiBzbyB3ZSBuZWVkIHRvIHBhZ2luYXRlIHRoZSBkYXRhLiBUaGUgc2Vjb25kIGZsYXZvciBpcyBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uIHdoZXJlIHRoZSByZXNwb25zZSBwYXlsb2FkIGlzIHRvbyBsYXJnZSB0byBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeVxuICogYW5kIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIGRhdGEgZnJvbSB0aGUgc2VydmVyIGluIGNodW5rcy4gSW4gdGhlIHNlY29uZCBjYXNlIHdlICdjb3VsZCcgYWxzbyBjYWNoZSB0aGUgZGF0YSBpbiB0aGUgbWVtb3J5IGJ1dCB0aGF0IGNvdWxkIGxlYWQgdG9cbiAqIG90aGVyIHByb2JsZW1zIGxpa2UgbWVtb3J5IGxlYWtzIGFuZCBzdGFsZSBkYXRhLiBTbyB3ZSB3aWxsIG5vdCBjYWNoZSB0aGUgZGF0YSBpbiB0aGUgbWVtb3J5IGluIHRoZSBzZWNvbmQgY2FzZS5cbiAqIFRoaXMgZmVhdHVyZSBpbXBsZW1lbnRzIHRoZSBsb2NhbCBwYWdpbmF0aW9uLlxuICovXG5cbmltcG9ydCB7IFNpZ25hbCwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFNpZ25hbFN0b3JlRmVhdHVyZSxcbiAgcGF0Y2hTdGF0ZSxcbiAgc2lnbmFsU3RvcmVGZWF0dXJlLFxuICB3aXRoQ29tcHV0ZWQsXG4gIHdpdGhNZXRob2RzLFxuICB3aXRoU3RhdGUsXG4gIFdyaXRhYmxlU3RhdGVTb3VyY2UsXG4gIEVtcHR5RmVhdHVyZVJlc3VsdCxcbn0gZnJvbSAnQG5ncngvc2lnbmFscyc7XG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSAnLi93aXRoLWRhdGEtc2VydmljZSc7XG5pbXBvcnQge1xuICBFbnRpdHlDb21wdXRlZCxcbiAgRW50aXR5U3RhdGUsXG4gIE5hbWVkRW50aXR5Q29tcHV0ZWQsXG59IGZyb20gJy4vc2hhcmVkL3NpZ25hbC1zdG9yZS1tb2RlbHMnO1xuXG4vLyBUaGlzIGlzIGEgdmlydHVhbCBwYWdlIHdoaWNoIGlzIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHBhZ2luYXRpb24gY29udHJvbFxuZXhwb3J0IHR5cGUgUGFnZSA9IHsgbGFiZWw6IHN0cmluZyB8IG51bWJlcjsgdmFsdWU6IG51bWJlciB9O1xuXG5leHBvcnQgdHlwZSBOYW1lZFBhZ2luYXRpb25TZXJ2aWNlU3RhdGU8RSwgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4gPSB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYHNlbGVjdGVkUGFnZSR7Q2FwaXRhbGl6ZTxLPn1FbnRpdGllc2BdOiBBcnJheTxFPjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYCR7TG93ZXJjYXNlPEs+fUN1cnJlbnRQYWdlYF06IG51bWJlcjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYCR7TG93ZXJjYXNlPEs+fVBhZ2VTaXplYF06IG51bWJlcjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYCR7TG93ZXJjYXNlPEs+fVRvdGFsQ291bnRgXTogbnVtYmVyO1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgJHtMb3dlcmNhc2U8Sz59UGFnZUNvdW50YF06IG51bWJlcjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYCR7TG93ZXJjYXNlPEs+fVBhZ2VOYXZpZ2F0aW9uQXJyYXlgXTogbnVtYmVyO1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgJHtMb3dlcmNhc2U8Sz59UGFnZU5hdmlnYXRpb25BcnJheU1heGBdOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBOYW1lZFBhZ2luYXRpb25TZXJ2aWNlU2lnbmFsczxFLCBDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgc2VsZWN0ZWRQYWdlJHtDYXBpdGFsaXplPEs+fUVudGl0aWVzYF06IFNpZ25hbDxFW10+O1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgJHtMb3dlcmNhc2U8Sz59Q3VycmVudFBhZ2VgXTogU2lnbmFsPG51bWJlcj47XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0xvd2VyY2FzZTxLPn1QYWdlU2l6ZWBdOiBTaWduYWw8bnVtYmVyPjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYCR7TG93ZXJjYXNlPEs+fVRvdGFsQ291bnRgXTogU2lnbmFsPG51bWJlcj47XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0xvd2VyY2FzZTxLPn1QYWdlQ291bnRgXTogU2lnbmFsPG51bWJlcj47XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0xvd2VyY2FzZTxLPn1QYWdlTmF2aWdhdGlvbkFycmF5YF06IFNpZ25hbDxQYWdlW10+O1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgJHtMb3dlcmNhc2U8Sz59UGFnZU5hdmlnYXRpb25BcnJheU1heGBdOiBTaWduYWw8bnVtYmVyPjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYGhhc05leHQke0NhcGl0YWxpemU8Sz59UGFnZWBdOiBTaWduYWw8Ym9vbGVhbj47XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBoYXNQcmV2aW91cyR7Q2FwaXRhbGl6ZTxLPn1QYWdlYF06IFNpZ25hbDxib29sZWFuPjtcbn07XG5cbmV4cG9ydCB0eXBlIE5hbWVkUGFnaW5hdGlvblNlcnZpY2VNZXRob2RzPENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+ID0ge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBzZXQke0NhcGl0YWxpemU8Sz59UGFnZVNpemVgXTogKHNpemU6IG51bWJlcikgPT4gdm9pZDtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYG5leHQke0NhcGl0YWxpemU8Sz59UGFnZWBdOiAoKSA9PiB2b2lkO1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgcHJldmlvdXMke0NhcGl0YWxpemU8Sz59UGFnZWBdOiAoKSA9PiB2b2lkO1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgbGFzdCR7Q2FwaXRhbGl6ZTxLPn1QYWdlYF06ICgpID0+IHZvaWQ7XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBmaXJzdCR7Q2FwaXRhbGl6ZTxLPn1QYWdlYF06ICgpID0+IHZvaWQ7XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBnb3RvJHtDYXBpdGFsaXplPEs+fVBhZ2VgXTogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIFBhZ2luYXRpb25TZXJ2aWNlU3RhdGU8RT4gPSB7XG4gIHNlbGVjdGVkUGFnZUVudGl0aWVzOiBBcnJheTxFPjtcbiAgY3VycmVudFBhZ2U6IG51bWJlcjtcbiAgcGFnZVNpemU6IG51bWJlcjtcbiAgdG90YWxDb3VudDogbnVtYmVyO1xuICBwYWdlQ291bnQ6IG51bWJlcjtcbiAgcGFnZU5hdmlnYXRpb25BcnJheTogUGFnZVtdO1xuICBwYWdlTmF2aWdhdGlvbkFycmF5TWF4OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBQYWdpbmF0aW9uU2VydmljZVNpZ25hbHM8RT4gPSB7XG4gIHNlbGVjdGVkUGFnZUVudGl0aWVzOiBTaWduYWw8RVtdPjtcbiAgY3VycmVudFBhZ2U6IFNpZ25hbDxudW1iZXI+O1xuICBwYWdlU2l6ZTogU2lnbmFsPG51bWJlcj47XG4gIHRvdGFsQ291bnQ6IFNpZ25hbDxudW1iZXI+O1xuICBwYWdlQ291bnQ6IFNpZ25hbDxudW1iZXI+O1xuICBwYWdlTmF2aWdhdGlvbkFycmF5OiBTaWduYWw8UGFnZVtdPjtcbiAgcGFnZU5hdmlnYXRpb25BcnJheU1heDogU2lnbmFsPG51bWJlcj47XG4gIGhhc05leHRQYWdlOiBTaWduYWw8Ym9vbGVhbj47XG4gIGhhc1ByZXZpb3VzUGFnZTogU2lnbmFsPGJvb2xlYW4+O1xufTtcblxuZXhwb3J0IHR5cGUgUGFnaW5hdGlvblNlcnZpY2VNZXRob2RzID0ge1xuICBzZXRQYWdlU2l6ZTogKHNpemU6IG51bWJlcikgPT4gdm9pZDtcbiAgbmV4dFBhZ2VLZXk6ICgpID0+IHZvaWQ7XG4gIHByZXZpb3VzUGFnZTogKCkgPT4gdm9pZDtcbiAgbGFzdFBhZ2U6ICgpID0+IHZvaWQ7XG4gIGZpcnN0UGFnZTogKCkgPT4gdm9pZDtcbiAgZ290b1BhZ2U6IChwYWdlOiBudW1iZXIpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBTZXRQYWdpbmF0aW9uU3RhdGU8XG4gIEUsXG4gIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmcgfCB1bmRlZmluZWRcbj4gPSBDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nXG4gID8gTmFtZWRQYWdpbmF0aW9uU2VydmljZVN0YXRlPEUsIENvbGxlY3Rpb24+XG4gIDogUGFnaW5hdGlvblNlcnZpY2VTdGF0ZTxFPjtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhQYWdpbmF0aW9uPEUsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KG9wdGlvbnM6IHtcbiAgZW50aXR5OiBFO1xuICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xufSk6IFNpZ25hbFN0b3JlRmVhdHVyZTxcbiAgRW1wdHlGZWF0dXJlUmVzdWx0ICYgeyBjb21wdXRlZDogTmFtZWRFbnRpdHlDb21wdXRlZDxFLCBDb2xsZWN0aW9uPiB9LFxuICB7XG4gICAgc3RhdGU6IE5hbWVkUGFnaW5hdGlvblNlcnZpY2VTdGF0ZTxFLCBDb2xsZWN0aW9uPjtcbiAgICBjb21wdXRlZDogTmFtZWRQYWdpbmF0aW9uU2VydmljZVNpZ25hbHM8RSwgQ29sbGVjdGlvbj47XG4gICAgbWV0aG9kczogTmFtZWRQYWdpbmF0aW9uU2VydmljZU1ldGhvZHM8Q29sbGVjdGlvbj47XG4gIH1cbj47XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUGFnaW5hdGlvbjxFPigpOiBTaWduYWxTdG9yZUZlYXR1cmU8XG4gIEVtcHR5RmVhdHVyZVJlc3VsdCAmIHtcbiAgICBzdGF0ZTogRW50aXR5U3RhdGU8RT47XG4gICAgY29tcHV0ZWQ6IEVudGl0eUNvbXB1dGVkPEU+O1xuICB9LFxuICB7XG4gICAgc3RhdGU6IFBhZ2luYXRpb25TZXJ2aWNlU3RhdGU8RT47XG4gICAgY29tcHV0ZWQ6IFBhZ2luYXRpb25TZXJ2aWNlU2lnbmFsczxFPjtcbiAgICBtZXRob2RzOiBQYWdpbmF0aW9uU2VydmljZU1ldGhvZHM7XG4gIH1cbj47XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUGFnaW5hdGlvbjxFLCBDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPihvcHRpb25zPzoge1xuICBlbnRpdHk6IEU7XG4gIGNvbGxlY3Rpb246IENvbGxlY3Rpb247XG59KTogU2lnbmFsU3RvcmVGZWF0dXJlPGFueSwgYW55PiB7XG4gIGNvbnN0IHtcbiAgICBwYWdlS2V5LFxuICAgIHBhZ2VTaXplS2V5LFxuICAgIGVudGl0aWVzS2V5LFxuICAgIHNlbGVjdGVkUGFnZUVudGl0aWVzS2V5LFxuICAgIHRvdGFsQ291bnRLZXksXG4gICAgcGFnZUNvdW50S2V5LFxuICAgIHBhZ2VOYXZpZ2F0aW9uQXJyYXlNYXhLZXksXG4gICAgcGFnZU5hdmlnYXRpb25BcnJheUtleSxcbiAgICBzZXRQYWdlU2l6ZUtleSxcbiAgICBuZXh0UGFnZUtleSxcbiAgICBwcmV2aW91c1BhZ2VLZXksXG4gICAgbGFzdFBhZ2VLZXksXG4gICAgZmlyc3RQYWdlS2V5LFxuICAgIGdvdG9QYWdlS2V5LFxuICAgIGhhc05leHRQYWdlS2V5LFxuICAgIGhhc1ByZXZpb3VzUGFnZUtleSxcbiAgfSA9IGNyZWF0ZVBhZ2luYXRpb25LZXlzPENvbGxlY3Rpb24+KG9wdGlvbnMpO1xuXG4gIHJldHVybiBzaWduYWxTdG9yZUZlYXR1cmUoXG4gICAgd2l0aFN0YXRlKHtcbiAgICAgIFtwYWdlS2V5XTogMCxcbiAgICAgIFtwYWdlU2l6ZUtleV06IDEwLFxuICAgICAgW3BhZ2VOYXZpZ2F0aW9uQXJyYXlNYXhLZXldOiA3LFxuICAgIH0pLFxuICAgIHdpdGhDb21wdXRlZCgoc3RvcmU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgICBjb25zdCBlbnRpdGllcyA9IHN0b3JlW2VudGl0aWVzS2V5XSBhcyBTaWduYWw8RVtdPjtcbiAgICAgIGNvbnN0IHBhZ2UgPSBzdG9yZVtwYWdlS2V5XSBhcyBTaWduYWw8bnVtYmVyPjtcbiAgICAgIGNvbnN0IHBhZ2VTaXplID0gc3RvcmVbcGFnZVNpemVLZXldIGFzIFNpZ25hbDxudW1iZXI+O1xuICAgICAgY29uc3QgcGFnZU5hdmlnYXRpb25BcnJheU1heCA9IHN0b3JlW1xuICAgICAgICBwYWdlTmF2aWdhdGlvbkFycmF5TWF4S2V5XG4gICAgICBdIGFzIFNpZ25hbDxudW1iZXI+O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAvLyBUaGUgZGVyaXZlZCBlbml0aXRlcyB3aGljaCBhcmUgZGlzcGxheWVkIG9uIHRoZSBjdXJyZW50IHBhZ2VcbiAgICAgICAgW3NlbGVjdGVkUGFnZUVudGl0aWVzS2V5XTogY29tcHV0ZWQ8RVtdPigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFnZVNpemVWYWx1ZSA9IHBhZ2VTaXplKCk7XG4gICAgICAgICAgY29uc3QgcGFnZVZhbHVlID0gcGFnZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIGVudGl0aWVzKCkuc2xpY2UoXG4gICAgICAgICAgICBwYWdlVmFsdWUgKiBwYWdlU2l6ZVZhbHVlLFxuICAgICAgICAgICAgKHBhZ2VWYWx1ZSArIDEpICogcGFnZVNpemVWYWx1ZVxuICAgICAgICAgICkgYXMgRVtdO1xuICAgICAgICB9KSxcbiAgICAgICAgW3RvdGFsQ291bnRLZXldOiBjb21wdXRlZCgoKSA9PiBlbnRpdGllcygpLmxlbmd0aCksXG4gICAgICAgIFtwYWdlQ291bnRLZXldOiBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdG90YWxDb3VudFZhbHVlID0gZW50aXRpZXMoKS5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgcGFnZVNpemVWYWx1ZSA9IHBhZ2VTaXplKCk7XG5cbiAgICAgICAgICBpZiAodG90YWxDb3VudFZhbHVlID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHRvdGFsQ291bnRWYWx1ZSAvIHBhZ2VTaXplVmFsdWUpO1xuICAgICAgICB9KSxcbiAgICAgICAgW3BhZ2VOYXZpZ2F0aW9uQXJyYXlLZXldOiBjb21wdXRlZCgoKSA9PlxuICAgICAgICAgIGNyZWF0ZVBhZ2VBcnJheShcbiAgICAgICAgICAgIHBhZ2UoKSxcbiAgICAgICAgICAgIHBhZ2VTaXplKCksXG4gICAgICAgICAgICBlbnRpdGllcygpLmxlbmd0aCxcbiAgICAgICAgICAgIHBhZ2VOYXZpZ2F0aW9uQXJyYXlNYXgoKVxuICAgICAgICAgIClcbiAgICAgICAgKSxcblxuICAgICAgICBbaGFzTmV4dFBhZ2VLZXldOiBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBhZ2UoKSA8IHBhZ2VTaXplKCk7XG4gICAgICAgIH0pLFxuXG4gICAgICAgIFtoYXNQcmV2aW91c1BhZ2VLZXldOiBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBhZ2UoKSA+IDE7XG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9KSxcbiAgICB3aXRoTWV0aG9kcyhcbiAgICAgIChzdG9yZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiBXcml0YWJsZVN0YXRlU291cmNlPG9iamVjdD4pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBbc2V0UGFnZVNpemVLZXldOiAoc2l6ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBzZXRQYWdlU2l6ZShzaXplLCBvcHRpb25zKSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbbmV4dFBhZ2VLZXldOiAoKSA9PiB7XG4gICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBuZXh0UGFnZShvcHRpb25zKSk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIFtwcmV2aW91c1BhZ2VLZXldOiAoKSA9PiB7XG4gICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBwcmV2aW91c1BhZ2Uob3B0aW9ucykpO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBbbGFzdFBhZ2VLZXldOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYXN0UGFnZSA9IChzdG9yZVtwYWdlQ291bnRLZXldIGFzIFNpZ25hbDxudW1iZXI+KSgpO1xuICAgICAgICAgICAgaWYgKGxhc3RQYWdlID09PSAwKSByZXR1cm47XG4gICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBnb3RvUGFnZShsYXN0UGFnZSAtIDEsIG9wdGlvbnMpKTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgW2ZpcnN0UGFnZUtleV06ICgpID0+IHtcbiAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIGZpcnN0UGFnZSgpKTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgW2dvdG9QYWdlS2V5XTogKHBhZ2U6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgZ290b1BhZ2UocGFnZSwgb3B0aW9ucykpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ290b1BhZ2U8RSwgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4oXG4gIHBhZ2U6IG51bWJlcixcbiAgb3B0aW9ucz86IHtcbiAgICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xuICB9XG4pOiBQYXJ0aWFsPFNldFBhZ2luYXRpb25TdGF0ZTxFLCBDb2xsZWN0aW9uPj4ge1xuICBjb25zdCB7IHBhZ2VLZXkgfSA9IGNyZWF0ZVBhZ2luYXRpb25LZXlzPENvbGxlY3Rpb24+KG9wdGlvbnMpO1xuXG4gIHJldHVybiB7XG4gICAgW3BhZ2VLZXldOiBwYWdlLFxuICB9IGFzIFBhcnRpYWw8U2V0UGFnaW5hdGlvblN0YXRlPEUsIENvbGxlY3Rpb24+Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFBhZ2VTaXplPEUsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KFxuICBwYWdlU2l6ZTogbnVtYmVyLFxuICBvcHRpb25zPzoge1xuICAgIGNvbGxlY3Rpb246IENvbGxlY3Rpb247XG4gIH1cbik6IFBhcnRpYWw8U2V0UGFnaW5hdGlvblN0YXRlPEUsIENvbGxlY3Rpb24+PiB7XG4gIGNvbnN0IHsgcGFnZVNpemVLZXkgfSA9IGNyZWF0ZVBhZ2luYXRpb25LZXlzPENvbGxlY3Rpb24+KG9wdGlvbnMpO1xuXG4gIHJldHVybiB7XG4gICAgW3BhZ2VTaXplS2V5XTogcGFnZVNpemUsXG4gIH0gYXMgUGFydGlhbDxTZXRQYWdpbmF0aW9uU3RhdGU8RSwgQ29sbGVjdGlvbj4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV4dFBhZ2U8RSwgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4ob3B0aW9ucz86IHtcbiAgY29sbGVjdGlvbjogQ29sbGVjdGlvbjtcbn0pOiBQYXJ0aWFsPFNldFBhZ2luYXRpb25TdGF0ZTxFLCBDb2xsZWN0aW9uPj4ge1xuICBjb25zdCB7IHBhZ2VLZXkgfSA9IGNyZWF0ZVBhZ2luYXRpb25LZXlzPENvbGxlY3Rpb24+KG9wdGlvbnMpO1xuXG4gIHJldHVybiB7XG4gICAgW3BhZ2VLZXldOiAoY3VycmVudFBhZ2U6IG51bWJlcikgPT4gY3VycmVudFBhZ2UgKyAxLFxuICB9IGFzIFBhcnRpYWw8U2V0UGFnaW5hdGlvblN0YXRlPEUsIENvbGxlY3Rpb24+Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXZpb3VzUGFnZTxFLCBDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPihvcHRpb25zPzoge1xuICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xufSk6IFBhcnRpYWw8U2V0UGFnaW5hdGlvblN0YXRlPEUsIENvbGxlY3Rpb24+PiB7XG4gIGNvbnN0IHsgcGFnZUtleSB9ID0gY3JlYXRlUGFnaW5hdGlvbktleXM8Q29sbGVjdGlvbj4ob3B0aW9ucyk7XG5cbiAgcmV0dXJuIHtcbiAgICBbcGFnZUtleV06IChjdXJyZW50UGFnZTogbnVtYmVyKSA9PiBNYXRoLm1heChjdXJyZW50UGFnZSAtIDEsIDEpLFxuICB9IGFzIFBhcnRpYWw8U2V0UGFnaW5hdGlvblN0YXRlPEUsIENvbGxlY3Rpb24+Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0UGFnZTxFLCBDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPihvcHRpb25zPzoge1xuICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xufSk6IFBhcnRpYWw8U2V0UGFnaW5hdGlvblN0YXRlPEUsIENvbGxlY3Rpb24+PiB7XG4gIGNvbnN0IHsgcGFnZUtleSB9ID0gY3JlYXRlUGFnaW5hdGlvbktleXM8Q29sbGVjdGlvbj4ob3B0aW9ucyk7XG5cbiAgcmV0dXJuIHtcbiAgICBbcGFnZUtleV06IDEsXG4gIH0gYXMgUGFydGlhbDxTZXRQYWdpbmF0aW9uU3RhdGU8RSwgQ29sbGVjdGlvbj4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0TWF4UGFnZU5hdmlnYXRpb25BcnJheUl0ZW1zPEUsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KFxuICBtYXhQYWdlTmF2aWdhdGlvbkFycmF5SXRlbXM6IG51bWJlcixcbiAgb3B0aW9ucz86IHtcbiAgICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xuICB9XG4pOiBQYXJ0aWFsPFNldFBhZ2luYXRpb25TdGF0ZTxFLCBDb2xsZWN0aW9uPj4ge1xuICBjb25zdCB7IHBhZ2VOYXZpZ2F0aW9uQXJyYXlNYXhLZXkgfSA9XG4gICAgY3JlYXRlUGFnaW5hdGlvbktleXM8Q29sbGVjdGlvbj4ob3B0aW9ucyk7XG5cbiAgcmV0dXJuIHtcbiAgICBbcGFnZU5hdmlnYXRpb25BcnJheU1heEtleV06IG1heFBhZ2VOYXZpZ2F0aW9uQXJyYXlJdGVtcyxcbiAgfSBhcyBQYXJ0aWFsPFNldFBhZ2luYXRpb25TdGF0ZTxFLCBDb2xsZWN0aW9uPj47XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBhZ2luYXRpb25LZXlzPENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KFxuICBvcHRpb25zOiB7IGNvbGxlY3Rpb246IENvbGxlY3Rpb24gfSB8IHVuZGVmaW5lZFxuKSB7XG4gIGNvbnN0IGVudGl0aWVzS2V5ID0gb3B0aW9ucz8uY29sbGVjdGlvblxuICAgID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufUVudGl0aWVzYFxuICAgIDogJ2VudGl0aWVzJztcblxuICBjb25zdCBzZWxlY3RlZFBhZ2VFbnRpdGllc0tleSA9IG9wdGlvbnM/LmNvbGxlY3Rpb25cbiAgICA/IGBzZWxlY3RlZFBhZ2Uke2NhcGl0YWxpemUob3B0aW9ucz8uY29sbGVjdGlvbil9RW50aXRpZXNgXG4gICAgOiAnc2VsZWN0ZWRQYWdlRW50aXRpZXMnO1xuICBjb25zdCBwYWdlS2V5ID0gb3B0aW9ucz8uY29sbGVjdGlvblxuICAgID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufUN1cnJlbnRQYWdlYFxuICAgIDogJ2N1cnJlbnRQYWdlJztcbiAgY29uc3QgcGFnZVNpemVLZXkgPSBvcHRpb25zPy5jb2xsZWN0aW9uXG4gICAgPyBgJHtvcHRpb25zLmNvbGxlY3Rpb259UGFnZVNpemVgXG4gICAgOiAncGFnZVNpemUnO1xuICBjb25zdCB0b3RhbENvdW50S2V5ID0gb3B0aW9ucz8uY29sbGVjdGlvblxuICAgID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufVRvdGFsQ291bnRgXG4gICAgOiAndG90YWxDb3VudCc7XG4gIGNvbnN0IHBhZ2VDb3VudEtleSA9IG9wdGlvbnM/LmNvbGxlY3Rpb25cbiAgICA/IGAke29wdGlvbnMuY29sbGVjdGlvbn1QYWdlQ291bnRgXG4gICAgOiAncGFnZUNvdW50JztcbiAgY29uc3QgcGFnZU5hdmlnYXRpb25BcnJheU1heEtleSA9IG9wdGlvbnM/LmNvbGxlY3Rpb25cbiAgICA/IGAke29wdGlvbnMuY29sbGVjdGlvbn1QYWdlTmF2aWdhdGlvbkFycmF5TWF4YFxuICAgIDogJ3BhZ2VOYXZpZ2F0aW9uQXJyYXlNYXgnO1xuICBjb25zdCBwYWdlTmF2aWdhdGlvbkFycmF5S2V5ID0gb3B0aW9ucz8uY29sbGVjdGlvblxuICAgID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufVBhZ2VOYXZpZ2F0aW9uQXJyYXlgXG4gICAgOiAncGFnZU5hdmlnYXRpb25BcnJheSc7XG5cbiAgY29uc3Qgc2V0UGFnZVNpemVLZXkgPSBvcHRpb25zPy5jb2xsZWN0aW9uXG4gICAgPyBgc2V0JHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9UGFnZVNpemVgXG4gICAgOiAnc2V0UGFnZVNpemUnO1xuXG4gIGNvbnN0IG5leHRQYWdlS2V5ID0gb3B0aW9ucz8uY29sbGVjdGlvblxuICAgID8gYG5leHQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1QYWdlYFxuICAgIDogJ25leHRQYWdlJztcblxuICBjb25zdCBwcmV2aW91c1BhZ2VLZXkgPSBvcHRpb25zPy5jb2xsZWN0aW9uXG4gICAgPyBgcHJldmlvdXMke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1QYWdlYFxuICAgIDogJ3ByZXZpb3VzUGFnZSc7XG5cbiAgY29uc3QgbGFzdFBhZ2VLZXkgPSBvcHRpb25zPy5jb2xsZWN0aW9uXG4gICAgPyBgbGFzdCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfVBhZ2VgXG4gICAgOiAnbGFzdFBhZ2UnO1xuXG4gIGNvbnN0IGZpcnN0UGFnZUtleSA9IG9wdGlvbnM/LmNvbGxlY3Rpb25cbiAgICA/IGBmaXJzdCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfVBhZ2VgXG4gICAgOiAnZmlyc3RQYWdlJztcblxuICBjb25zdCBnb3RvUGFnZUtleSA9IG9wdGlvbnM/LmNvbGxlY3Rpb25cbiAgICA/IGBnb3RvJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9UGFnZWBcbiAgICA6ICdnb3RvUGFnZSc7XG5cbiAgY29uc3QgaGFzTmV4dFBhZ2VLZXkgPSBvcHRpb25zPy5jb2xsZWN0aW9uXG4gICAgPyBgaGFzTmV4dCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfVBhZ2VgXG4gICAgOiAnaGFzTmV4dFBhZ2UnO1xuXG4gIGNvbnN0IGhhc1ByZXZpb3VzUGFnZUtleSA9IG9wdGlvbnM/LmNvbGxlY3Rpb25cbiAgICA/IGBoYXNQcmV2aW91cyR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfVBhZ2VgXG4gICAgOiAnaGFzUHJldmlvdXNQYWdlJztcblxuICByZXR1cm4ge1xuICAgIHBhZ2VLZXksXG4gICAgcGFnZVNpemVLZXksXG4gICAgZW50aXRpZXNLZXksXG4gICAgc2VsZWN0ZWRQYWdlRW50aXRpZXNLZXksXG4gICAgdG90YWxDb3VudEtleSxcbiAgICBwYWdlQ291bnRLZXksXG4gICAgcGFnZU5hdmlnYXRpb25BcnJheUtleSxcbiAgICBwYWdlTmF2aWdhdGlvbkFycmF5TWF4S2V5LFxuICAgIHNldFBhZ2VTaXplS2V5LFxuICAgIG5leHRQYWdlS2V5LFxuICAgIHByZXZpb3VzUGFnZUtleSxcbiAgICBsYXN0UGFnZUtleSxcbiAgICBmaXJzdFBhZ2VLZXksXG4gICAgZ290b1BhZ2VLZXksXG4gICAgaGFzTmV4dFBhZ2VLZXksXG4gICAgaGFzUHJldmlvdXNQYWdlS2V5LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFnZUFycmF5KFxuICBjdXJyZW50UGFnZTogbnVtYmVyLFxuICBpdGVtc1BlclBhZ2U6IG51bWJlcixcbiAgdG90YWxJdGVtczogbnVtYmVyLFxuICBwYWdpbmF0aW9uUmFuZ2U6IG51bWJlclxuKTogUGFnZVtdIHtcbiAgLy8gQ29udmVydCBwYWdpbmF0aW9uUmFuZ2UgdG8gbnVtYmVyIGluIGNhc2UgaXQncyBhIHN0cmluZ1xuICBwYWdpbmF0aW9uUmFuZ2UgPSArcGFnaW5hdGlvblJhbmdlO1xuXG4gIC8vIENhbGN1bGF0ZSB0b3RhbCBudW1iZXIgb2YgcGFnZXNcbiAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGgubWF4KE1hdGguY2VpbCh0b3RhbEl0ZW1zIC8gaXRlbXNQZXJQYWdlKSwgMSk7XG4gIGNvbnN0IGhhbGZXYXkgPSBNYXRoLmNlaWwocGFnaW5hdGlvblJhbmdlIC8gMik7XG5cbiAgY29uc3QgaXNTdGFydCA9IGN1cnJlbnRQYWdlIDw9IGhhbGZXYXk7XG4gIGNvbnN0IGlzRW5kID0gdG90YWxQYWdlcyAtIGhhbGZXYXkgPCBjdXJyZW50UGFnZTtcbiAgY29uc3QgaXNNaWRkbGUgPSAhaXNTdGFydCAmJiAhaXNFbmQ7XG5cbiAgY29uc3QgZWxsaXBzZXNOZWVkZWQgPSBwYWdpbmF0aW9uUmFuZ2UgPCB0b3RhbFBhZ2VzO1xuICBjb25zdCBwYWdlczogUGFnZVtdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdG90YWxQYWdlcyAmJiBpIDw9IHBhZ2luYXRpb25SYW5nZTsgaSsrKSB7XG4gICAgbGV0IHBhZ2VOdW1iZXIgPSBpO1xuXG4gICAgaWYgKGkgPT09IHBhZ2luYXRpb25SYW5nZSkge1xuICAgICAgcGFnZU51bWJlciA9IHRvdGFsUGFnZXM7XG4gICAgfSBlbHNlIGlmIChlbGxpcHNlc05lZWRlZCkge1xuICAgICAgaWYgKGlzRW5kKSB7XG4gICAgICAgIHBhZ2VOdW1iZXIgPSB0b3RhbFBhZ2VzIC0gcGFnaW5hdGlvblJhbmdlICsgaTtcbiAgICAgIH0gZWxzZSBpZiAoaXNNaWRkbGUpIHtcbiAgICAgICAgcGFnZU51bWJlciA9IGN1cnJlbnRQYWdlIC0gaGFsZldheSArIGk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlbmluZ0VsbGlwc2VzTmVlZGVkID0gaSA9PT0gMiAmJiAoaXNNaWRkbGUgfHwgaXNFbmQpO1xuICAgIGNvbnN0IGNsb3NpbmdFbGxpcHNlc05lZWRlZCA9XG4gICAgICBpID09PSBwYWdpbmF0aW9uUmFuZ2UgLSAxICYmIChpc01pZGRsZSB8fCBpc1N0YXJ0KTtcblxuICAgIGNvbnN0IGxhYmVsID1cbiAgICAgIGVsbGlwc2VzTmVlZGVkICYmIChvcGVuaW5nRWxsaXBzZXNOZWVkZWQgfHwgY2xvc2luZ0VsbGlwc2VzTmVlZGVkKVxuICAgICAgICA/ICcuLi4nXG4gICAgICAgIDogcGFnZU51bWJlcjtcblxuICAgIHBhZ2VzLnB1c2goeyBsYWJlbCwgdmFsdWU6IHBhZ2VOdW1iZXIgfSk7XG4gIH1cblxuICByZXR1cm4gcGFnZXM7XG59XG4iXX0=