@k8slens/hotbar-contracts 1.0.1

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/dist/index.d.ts +19 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +308 -0
  4. package/dist/src/add-to-hotbar.d.ts +54 -0
  5. package/dist/src/add-to-hotbar.d.ts.map +1 -0
  6. package/dist/src/eject-hotbar-item.d.ts +18 -0
  7. package/dist/src/eject-hotbar-item.d.ts.map +1 -0
  8. package/dist/src/get-hotbar-item-kind-injectable-bunch.d.ts +60 -0
  9. package/dist/src/get-hotbar-item-kind-injectable-bunch.d.ts.map +1 -0
  10. package/dist/src/has-hotbar-item.d.ts +27 -0
  11. package/dist/src/has-hotbar-item.d.ts.map +1 -0
  12. package/dist/src/hotbar-item-component.d.ts +44 -0
  13. package/dist/src/hotbar-item-component.d.ts.map +1 -0
  14. package/dist/src/hotbar-item-context-menu-item.d.ts +48 -0
  15. package/dist/src/hotbar-item-context-menu-item.d.ts.map +1 -0
  16. package/dist/src/hotbar-item-frame.d.ts +18 -0
  17. package/dist/src/hotbar-item-frame.d.ts.map +1 -0
  18. package/dist/src/hotbar-item-id.d.ts +6 -0
  19. package/dist/src/hotbar-item-id.d.ts.map +1 -0
  20. package/dist/src/hotbar-item-kind.d.ts +69 -0
  21. package/dist/src/hotbar-item-kind.d.ts.map +1 -0
  22. package/dist/src/hotbar-item-persisted-data.d.ts +33 -0
  23. package/dist/src/hotbar-item-persisted-data.d.ts.map +1 -0
  24. package/dist/src/hotbar-item.d.ts +12 -0
  25. package/dist/src/hotbar-item.d.ts.map +1 -0
  26. package/dist/src/insert-hotbar-item.d.ts +17 -0
  27. package/dist/src/insert-hotbar-item.d.ts.map +1 -0
  28. package/dist/src/is-in-hotbar.d.ts +89 -0
  29. package/dist/src/is-in-hotbar.d.ts.map +1 -0
  30. package/dist/src/remove-from-hotbar.d.ts +47 -0
  31. package/dist/src/remove-from-hotbar.d.ts.map +1 -0
  32. package/dist/tsconfig.tsbuildinfo +1 -0
  33. package/package.json +63 -0
@@ -0,0 +1,19 @@
1
+ export type { HotbarItemId } from "./src/hotbar-item-id";
2
+ export { getHotbarItemKind, getHotbarItemKindId, type HotbarItemKind, type HotbarItemKindId, type HotbarItemPersistedData, parseHotbarItemKindId, } from "./src/hotbar-item-kind";
3
+ export type { HotbarItem } from "./src/hotbar-item";
4
+ export { getHotbarItemKindInjectableBunch, type HotbarItemKindBunchParams, type HotbarItemProps, } from "./src/get-hotbar-item-kind-injectable-bunch";
5
+ export { addToHotbarInjectionToken, type AddToHotbar, type AddToHotbarTokenFor, type AddToHotbarTokenForKind, } from "./src/add-to-hotbar";
6
+ export { removeFromHotbarInjectionToken, type RemoveFromHotbar, type RemoveFromHotbarTokenFor, type RemoveFromHotbarTokenForKind, } from "./src/remove-from-hotbar";
7
+ export { isInHotbarInjectionToken, isInHotbarReactiveInjectionToken, type IsInHotbar, type IsInHotbarReactive, type IsInHotbarReactiveTokenFor, type IsInHotbarReactiveTokenForKind, type IsInHotbarTokenFor, type IsInHotbarTokenForKind, } from "./src/is-in-hotbar";
8
+ export { hotbarItemContextMenuItemInjectionToken, type HotbarItemContextMenuItemFor, type HotbarItemContextMenuItemTokenFor, type HotbarItemContextMenuItemTokenForKind, } from "./src/hotbar-item-context-menu-item";
9
+ /**
10
+ * The hotbar's side of the contract: implemented by the hotbar, built on by
11
+ * `getHotbarItemKindInjectableBunch`. A kind has no reason to touch these directly.
12
+ */
13
+ export { hotbarItemComponentInjectionToken, type HotbarItemComponent, type HotbarItemComponentFactory, type HotbarItemComponentProps, type HotbarItemComponentTokenFor, type HotbarItemComponentTokenForKind, } from "./src/hotbar-item-component";
14
+ export { HotbarItemFrame, type HotbarItemFrameProps } from "./src/hotbar-item-frame";
15
+ export { hotbarItemPersistedDataInjectionToken, type HotbarItemPersistedDataEntry, type HotbarItemPersistedDataStore, type HotbarItemPersistedDataStoreFor, } from "./src/hotbar-item-persisted-data";
16
+ export { insertHotbarItemInjectionToken, type InsertHotbarItem } from "./src/insert-hotbar-item";
17
+ export { ejectHotbarItemInjectionToken, type EjectHotbarItem } from "./src/eject-hotbar-item";
18
+ export { hasHotbarItemInjectionToken, hasHotbarItemReactiveInjectionToken, type HasHotbarItem, type HasHotbarItemReactive, } from "./src/has-hotbar-item";
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EACL,gCAAgC,EAChC,KAAK,yBAAyB,EAC9B,KAAK,eAAe,GACrB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACL,yBAAyB,EACzB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,8BAA8B,EAC9B,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,GAClC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,wBAAwB,EACxB,gCAAgC,EAChC,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EACnC,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,uCAAuC,EACvC,KAAK,4BAA4B,EACjC,KAAK,iCAAiC,EACtC,KAAK,qCAAqC,GAC3C,MAAM,qCAAqC,CAAC;AAE7C;;;GAGG;AACH,OAAO,EACL,iCAAiC,EACjC,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,EAChC,KAAK,+BAA+B,GACrC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EACL,qCAAqC,EACrC,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,KAAK,+BAA+B,GACrC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,8BAA8B,EAAE,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjG,OAAO,EAAE,6BAA6B,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EACL,2BAA2B,EAC3B,mCAAmC,EACnC,KAAK,aAAa,EAClB,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,308 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ HotbarItemFrame: () => HotbarItemFrame,
24
+ addToHotbarInjectionToken: () => addToHotbarInjectionToken,
25
+ ejectHotbarItemInjectionToken: () => ejectHotbarItemInjectionToken,
26
+ getHotbarItemKind: () => getHotbarItemKind,
27
+ getHotbarItemKindId: () => getHotbarItemKindId,
28
+ getHotbarItemKindInjectableBunch: () => getHotbarItemKindInjectableBunch,
29
+ hasHotbarItemInjectionToken: () => hasHotbarItemInjectionToken,
30
+ hasHotbarItemReactiveInjectionToken: () => hasHotbarItemReactiveInjectionToken,
31
+ hotbarItemComponentInjectionToken: () => hotbarItemComponentInjectionToken,
32
+ hotbarItemContextMenuItemInjectionToken: () => hotbarItemContextMenuItemInjectionToken,
33
+ hotbarItemPersistedDataInjectionToken: () => hotbarItemPersistedDataInjectionToken,
34
+ insertHotbarItemInjectionToken: () => insertHotbarItemInjectionToken,
35
+ isInHotbarInjectionToken: () => isInHotbarInjectionToken,
36
+ isInHotbarReactiveInjectionToken: () => isInHotbarReactiveInjectionToken,
37
+ parseHotbarItemKindId: () => parseHotbarItemKindId,
38
+ removeFromHotbarInjectionToken: () => removeFromHotbarInjectionToken
39
+ });
40
+ module.exports = __toCommonJS(index_exports);
41
+
42
+ // src/hotbar-item-kind.ts
43
+ var import_injectable = require("@k8slens/injectable");
44
+ var getHotbarItemKindId = (kind, scopeIds) => [...scopeIds, kind].join(":");
45
+ var parseHotbarItemKindId = (kindId) => {
46
+ const segments = String(kindId).split(":");
47
+ return {
48
+ kind: segments[segments.length - 1],
49
+ scopeIds: segments.slice(0, -1)
50
+ };
51
+ };
52
+ var getHotbarItemKind = () => (specifier) => {
53
+ if (specifier.includes(":")) {
54
+ throw new Error(
55
+ `Tried to create hotbar item kind "${specifier}", but ":" is reserved for scoping the kind to its registration.`
56
+ );
57
+ }
58
+ return (0, import_injectable.getTypedSpecifier)()(specifier);
59
+ };
60
+
61
+ // src/get-hotbar-item-kind-injectable-bunch.tsx
62
+ var import_injectable10 = require("@k8slens/injectable");
63
+ var import_injectable_react2 = require("@k8slens/injectable-react");
64
+ var import_mobx_react = require("mobx-react");
65
+ var import_react = require("react");
66
+
67
+ // src/add-to-hotbar.ts
68
+ var import_injectable2 = require("@k8slens/injectable");
69
+ var addToHotbarTokenForKind = (kind) => (0, import_injectable2.getInjectionToken2)({
70
+ id: `add-to-hotbar-${kind}`,
71
+ speciality: kind,
72
+ cardinality: "zero-or-many"
73
+ })(
74
+ (scopeIds) => (0, import_injectable2.getInjectionToken2)({
75
+ id: `add-to-hotbar-${getHotbarItemKindId(kind, scopeIds)}`,
76
+ speciality: getHotbarItemKindId(kind, scopeIds),
77
+ cardinality: "one"
78
+ })()
79
+ );
80
+ var addToHotbarInjectionToken = (0, import_injectable2.getInjectionToken2)({
81
+ id: "add-to-hotbar",
82
+ cardinality: "zero-or-many"
83
+ })(addToHotbarTokenForKind);
84
+
85
+ // src/eject-hotbar-item.ts
86
+ var import_injectable3 = require("@k8slens/injectable");
87
+ var ejectHotbarItemInjectionToken = (0, import_injectable3.getInjectionToken2)({
88
+ id: "eject-hotbar-item",
89
+ cardinality: "one"
90
+ })();
91
+
92
+ // src/has-hotbar-item.ts
93
+ var import_injectable4 = require("@k8slens/injectable");
94
+ var hasHotbarItemInjectionToken = (0, import_injectable4.getInjectionToken2)({
95
+ id: "has-hotbar-item",
96
+ cardinality: "one"
97
+ })();
98
+ var hasHotbarItemReactiveInjectionToken = (0, import_injectable4.getInjectionToken2)({
99
+ id: "has-hotbar-item-reactive",
100
+ cardinality: "one"
101
+ })();
102
+
103
+ // src/hotbar-item-component.ts
104
+ var import_injectable5 = require("@k8slens/injectable");
105
+ var hotbarItemComponentTokenForKind = (kind) => (0, import_injectable5.getInjectionToken2)({
106
+ id: `hotbar-item-component-${kind}`,
107
+ speciality: kind,
108
+ cardinality: "zero-or-many"
109
+ })(
110
+ (scopeIds) => (0, import_injectable5.getInjectionToken2)({
111
+ id: `hotbar-item-component-${getHotbarItemKindId(kind, scopeIds)}`,
112
+ speciality: getHotbarItemKindId(kind, scopeIds),
113
+ cardinality: "zero-or-one"
114
+ })()
115
+ );
116
+ var hotbarItemComponentInjectionToken = (0, import_injectable5.getInjectionToken2)({
117
+ id: "hotbar-item-component",
118
+ cardinality: "zero-or-many"
119
+ })(hotbarItemComponentTokenForKind);
120
+
121
+ // src/hotbar-item-frame.ts
122
+ var import_injectable_react = require("@k8slens/injectable-react");
123
+ var HotbarItemFrame = (0, import_injectable_react.getInjectionTokenComponent2)({
124
+ id: "hotbar-item-frame"
125
+ })();
126
+
127
+ // src/hotbar-item-persisted-data.ts
128
+ var import_injectable6 = require("@k8slens/injectable");
129
+ var hotbarItemPersistedDataInjectionToken = (0, import_injectable6.getInjectionToken2)({
130
+ id: "hotbar-item-persisted-data",
131
+ cardinality: "one"
132
+ })();
133
+
134
+ // src/insert-hotbar-item.ts
135
+ var import_injectable7 = require("@k8slens/injectable");
136
+ var insertHotbarItemInjectionToken = (0, import_injectable7.getInjectionToken2)({
137
+ id: "insert-hotbar-item",
138
+ cardinality: "one"
139
+ })();
140
+
141
+ // src/is-in-hotbar.ts
142
+ var import_injectable8 = require("@k8slens/injectable");
143
+ var isInHotbarTokenForKind = (kind) => (0, import_injectable8.getInjectionToken2)({
144
+ id: `is-in-hotbar-${kind}`,
145
+ speciality: kind,
146
+ cardinality: "zero-or-many"
147
+ })(
148
+ (scopeIds) => (0, import_injectable8.getInjectionToken2)({
149
+ id: `is-in-hotbar-${getHotbarItemKindId(kind, scopeIds)}`,
150
+ speciality: getHotbarItemKindId(kind, scopeIds),
151
+ cardinality: "one"
152
+ })()
153
+ );
154
+ var isInHotbarInjectionToken = (0, import_injectable8.getInjectionToken2)({
155
+ id: "is-in-hotbar",
156
+ cardinality: "zero-or-many"
157
+ })(isInHotbarTokenForKind);
158
+ var isInHotbarReactiveTokenForKind = (kind) => (0, import_injectable8.getInjectionToken2)({
159
+ id: `is-in-hotbar-reactive-${kind}`,
160
+ speciality: kind,
161
+ cardinality: "zero-or-many"
162
+ })(
163
+ (scopeIds) => (0, import_injectable8.getInjectionToken2)({
164
+ id: `is-in-hotbar-reactive-${getHotbarItemKindId(kind, scopeIds)}`,
165
+ speciality: getHotbarItemKindId(kind, scopeIds),
166
+ cardinality: "one"
167
+ })()
168
+ );
169
+ var isInHotbarReactiveInjectionToken = (0, import_injectable8.getInjectionToken2)({
170
+ id: "is-in-hotbar-reactive",
171
+ cardinality: "zero-or-many"
172
+ })(isInHotbarReactiveTokenForKind);
173
+
174
+ // src/remove-from-hotbar.ts
175
+ var import_injectable9 = require("@k8slens/injectable");
176
+ var removeFromHotbarTokenForKind = (kind) => (0, import_injectable9.getInjectionToken2)({
177
+ id: `remove-from-hotbar-${kind}`,
178
+ speciality: kind,
179
+ cardinality: "zero-or-many"
180
+ })(
181
+ (scopeIds) => (0, import_injectable9.getInjectionToken2)({
182
+ id: `remove-from-hotbar-${getHotbarItemKindId(kind, scopeIds)}`,
183
+ speciality: getHotbarItemKindId(kind, scopeIds),
184
+ cardinality: "one"
185
+ })()
186
+ );
187
+ var removeFromHotbarInjectionToken = (0, import_injectable9.getInjectionToken2)({
188
+ id: "remove-from-hotbar",
189
+ cardinality: "zero-or-many"
190
+ })(removeFromHotbarTokenForKind);
191
+
192
+ // src/get-hotbar-item-kind-injectable-bunch.tsx
193
+ var import_jsx_runtime = require("react/jsx-runtime");
194
+ var getHotbarItemKindInjectableBunch = ({
195
+ kind,
196
+ Component
197
+ }) => {
198
+ const HotbarItemOfKind = (0, import_mobx_react.observer)(({ item }) => {
199
+ const di = (0, import_injectable_react2.useDi)();
200
+ const persistedData = (0, import_react.useMemo)(() => di.inject(hotbarItemPersistedDataInjectionToken, item.kind), [di, item.kind]);
201
+ const entry = persistedData.get(item.id).get();
202
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(HotbarItemFrame, { item, children: entry ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { id: item.id, persistedData: entry.persistedData }) : null });
203
+ });
204
+ return (0, import_injectable10.getInjectableBunch)({
205
+ component: (0, import_injectable_react2.getInjectableComponent2)({
206
+ id: `hotbar-item-component-${kind}`,
207
+ Component: HotbarItemOfKind,
208
+ injectionToken: ({ scopeIds }) => hotbarItemComponentInjectionToken.for(kind).for(scopeIds)
209
+ }),
210
+ addToHotbar: (0, import_injectable10.getInjectable2)({
211
+ id: `add-to-hotbar-${kind}`,
212
+ consumptions: [
213
+ hotbarItemPersistedDataInjectionToken,
214
+ insertHotbarItemInjectionToken,
215
+ hasHotbarItemInjectionToken
216
+ ],
217
+ instantiate: (di) => {
218
+ const kindId = getHotbarItemKindId(kind, di.scopeIds);
219
+ const persistedData = di.inject(hotbarItemPersistedDataInjectionToken)(kindId);
220
+ const insertHotbarItem = di.inject(insertHotbarItemInjectionToken)();
221
+ const hasHotbarItem = di.inject(hasHotbarItemInjectionToken)();
222
+ const addToHotbar = async ({ id, persistedData: data }) => {
223
+ if (await hasHotbarItem({ id, kind: kindId })) {
224
+ throw new Error(`Tried to add hotbar item "${id}" of kind "${kindId}", but it is already in the hotbar.`);
225
+ }
226
+ await persistedData.set(id, data);
227
+ await insertHotbarItem({ id, kind: kindId });
228
+ };
229
+ return () => addToHotbar;
230
+ },
231
+ injectionToken: ({ scopeIds }) => addToHotbarInjectionToken.for(kind).for(scopeIds)
232
+ }),
233
+ // The hotbar answers for every kind at once, given the whole { id, kind }; these bind the
234
+ // kind, so a consumer addresses items by kind first and id second, never by id alone.
235
+ isInHotbar: (0, import_injectable10.getInjectable2)({
236
+ id: `is-in-hotbar-${kind}`,
237
+ consumptions: [hasHotbarItemInjectionToken],
238
+ instantiate: (di) => {
239
+ const kindId = getHotbarItemKindId(kind, di.scopeIds);
240
+ const hasHotbarItem = di.inject(hasHotbarItemInjectionToken)();
241
+ const isInHotbar = (id) => hasHotbarItem({ id, kind: kindId });
242
+ return () => isInHotbar;
243
+ },
244
+ injectionToken: ({ scopeIds }) => isInHotbarInjectionToken.for(kind).for(scopeIds)
245
+ }),
246
+ isInHotbarReactive: (0, import_injectable10.getInjectable2)({
247
+ id: `is-in-hotbar-reactive-${kind}`,
248
+ consumptions: [hasHotbarItemReactiveInjectionToken],
249
+ instantiate: (di) => {
250
+ const kindId = getHotbarItemKindId(kind, di.scopeIds);
251
+ const hasHotbarItemReactive = di.inject(hasHotbarItemReactiveInjectionToken);
252
+ const isInHotbarReactive = (id) => hasHotbarItemReactive({ id, kind: kindId });
253
+ return isInHotbarReactive;
254
+ },
255
+ injectionToken: ({ scopeIds }) => isInHotbarReactiveInjectionToken.for(kind).for(scopeIds)
256
+ }),
257
+ removeFromHotbar: (0, import_injectable10.getInjectable2)({
258
+ id: `remove-from-hotbar-${kind}`,
259
+ consumptions: [ejectHotbarItemInjectionToken],
260
+ instantiate: (di) => {
261
+ const kindId = getHotbarItemKindId(kind, di.scopeIds);
262
+ const ejectHotbarItem = di.inject(ejectHotbarItemInjectionToken)();
263
+ const removeFromHotbar = (id) => ejectHotbarItem({ id, kind: kindId });
264
+ return () => removeFromHotbar;
265
+ },
266
+ injectionToken: ({ scopeIds }) => removeFromHotbarInjectionToken.for(kind).for(scopeIds)
267
+ })
268
+ });
269
+ };
270
+
271
+ // src/hotbar-item-context-menu-item.ts
272
+ var import_injectable11 = require("@k8slens/injectable");
273
+ var hotbarItemContextMenuItemInjectionToken = (0, import_injectable11.getInjectionToken2)({
274
+ id: "hotbar-item-context-menu-item",
275
+ cardinality: "zero-or-many"
276
+ })(
277
+ (kind) => (0, import_injectable11.getInjectionToken2)({
278
+ id: `hotbar-item-context-menu-item-${kind}`,
279
+ speciality: kind,
280
+ cardinality: "zero-or-many"
281
+ })(
282
+ (scopeIds) => (0, import_injectable11.getInjectionToken2)({
283
+ id: `hotbar-item-context-menu-item-${getHotbarItemKindId(kind, scopeIds)}`,
284
+ speciality: getHotbarItemKindId(kind, scopeIds),
285
+ cardinality: "zero-or-many"
286
+ })()
287
+ )
288
+ );
289
+ // Annotate the CommonJS export names for ESM import in node:
290
+ 0 && (module.exports = {
291
+ HotbarItemFrame,
292
+ addToHotbarInjectionToken,
293
+ ejectHotbarItemInjectionToken,
294
+ getHotbarItemKind,
295
+ getHotbarItemKindId,
296
+ getHotbarItemKindInjectableBunch,
297
+ hasHotbarItemInjectionToken,
298
+ hasHotbarItemReactiveInjectionToken,
299
+ hotbarItemComponentInjectionToken,
300
+ hotbarItemContextMenuItemInjectionToken,
301
+ hotbarItemPersistedDataInjectionToken,
302
+ insertHotbarItemInjectionToken,
303
+ isInHotbarInjectionToken,
304
+ isInHotbarReactiveInjectionToken,
305
+ parseHotbarItemKindId,
306
+ removeFromHotbarInjectionToken
307
+ });
308
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vaW5kZXgudHMiLCAiLi4vc3JjL2hvdGJhci1pdGVtLWtpbmQudHMiLCAiLi4vc3JjL2dldC1ob3RiYXItaXRlbS1raW5kLWluamVjdGFibGUtYnVuY2gudHN4IiwgIi4uL3NyYy9hZGQtdG8taG90YmFyLnRzIiwgIi4uL3NyYy9lamVjdC1ob3RiYXItaXRlbS50cyIsICIuLi9zcmMvaGFzLWhvdGJhci1pdGVtLnRzIiwgIi4uL3NyYy9ob3RiYXItaXRlbS1jb21wb25lbnQudHMiLCAiLi4vc3JjL2hvdGJhci1pdGVtLWZyYW1lLnRzIiwgIi4uL3NyYy9ob3RiYXItaXRlbS1wZXJzaXN0ZWQtZGF0YS50cyIsICIuLi9zcmMvaW5zZXJ0LWhvdGJhci1pdGVtLnRzIiwgIi4uL3NyYy9pcy1pbi1ob3RiYXIudHMiLCAiLi4vc3JjL3JlbW92ZS1mcm9tLWhvdGJhci50cyIsICIuLi9zcmMvaG90YmFyLWl0ZW0tY29udGV4dC1tZW51LWl0ZW0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCB0eXBlIHsgSG90YmFySXRlbUlkIH0gZnJvbSBcIi4vc3JjL2hvdGJhci1pdGVtLWlkXCI7XG5leHBvcnQge1xuICBnZXRIb3RiYXJJdGVtS2luZCxcbiAgZ2V0SG90YmFySXRlbUtpbmRJZCxcbiAgdHlwZSBIb3RiYXJJdGVtS2luZCxcbiAgdHlwZSBIb3RiYXJJdGVtS2luZElkLFxuICB0eXBlIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhLFxuICBwYXJzZUhvdGJhckl0ZW1LaW5kSWQsXG59IGZyb20gXCIuL3NyYy9ob3RiYXItaXRlbS1raW5kXCI7XG5leHBvcnQgdHlwZSB7IEhvdGJhckl0ZW0gfSBmcm9tIFwiLi9zcmMvaG90YmFyLWl0ZW1cIjtcblxuZXhwb3J0IHtcbiAgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2gsXG4gIHR5cGUgSG90YmFySXRlbUtpbmRCdW5jaFBhcmFtcyxcbiAgdHlwZSBIb3RiYXJJdGVtUHJvcHMsXG59IGZyb20gXCIuL3NyYy9nZXQtaG90YmFyLWl0ZW0ta2luZC1pbmplY3RhYmxlLWJ1bmNoXCI7XG5leHBvcnQge1xuICBhZGRUb0hvdGJhckluamVjdGlvblRva2VuLFxuICB0eXBlIEFkZFRvSG90YmFyLFxuICB0eXBlIEFkZFRvSG90YmFyVG9rZW5Gb3IsXG4gIHR5cGUgQWRkVG9Ib3RiYXJUb2tlbkZvcktpbmQsXG59IGZyb20gXCIuL3NyYy9hZGQtdG8taG90YmFyXCI7XG5leHBvcnQge1xuICByZW1vdmVGcm9tSG90YmFySW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgUmVtb3ZlRnJvbUhvdGJhcixcbiAgdHlwZSBSZW1vdmVGcm9tSG90YmFyVG9rZW5Gb3IsXG4gIHR5cGUgUmVtb3ZlRnJvbUhvdGJhclRva2VuRm9yS2luZCxcbn0gZnJvbSBcIi4vc3JjL3JlbW92ZS1mcm9tLWhvdGJhclwiO1xuZXhwb3J0IHtcbiAgaXNJbkhvdGJhckluamVjdGlvblRva2VuLFxuICBpc0luSG90YmFyUmVhY3RpdmVJbmplY3Rpb25Ub2tlbixcbiAgdHlwZSBJc0luSG90YmFyLFxuICB0eXBlIElzSW5Ib3RiYXJSZWFjdGl2ZSxcbiAgdHlwZSBJc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvcixcbiAgdHlwZSBJc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvcktpbmQsXG4gIHR5cGUgSXNJbkhvdGJhclRva2VuRm9yLFxuICB0eXBlIElzSW5Ib3RiYXJUb2tlbkZvcktpbmQsXG59IGZyb20gXCIuL3NyYy9pcy1pbi1ob3RiYXJcIjtcbmV4cG9ydCB7XG4gIGhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1JbmplY3Rpb25Ub2tlbixcbiAgdHlwZSBIb3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtRm9yLFxuICB0eXBlIEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Ub2tlbkZvcixcbiAgdHlwZSBIb3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtVG9rZW5Gb3JLaW5kLFxufSBmcm9tIFwiLi9zcmMvaG90YmFyLWl0ZW0tY29udGV4dC1tZW51LWl0ZW1cIjtcblxuLyoqXG4gKiBUaGUgaG90YmFyJ3Mgc2lkZSBvZiB0aGUgY29udHJhY3Q6IGltcGxlbWVudGVkIGJ5IHRoZSBob3RiYXIsIGJ1aWx0IG9uIGJ5XG4gKiBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgLiBBIGtpbmQgaGFzIG5vIHJlYXNvbiB0byB0b3VjaCB0aGVzZSBkaXJlY3RseS5cbiAqL1xuZXhwb3J0IHtcbiAgaG90YmFySXRlbUNvbXBvbmVudEluamVjdGlvblRva2VuLFxuICB0eXBlIEhvdGJhckl0ZW1Db21wb25lbnQsXG4gIHR5cGUgSG90YmFySXRlbUNvbXBvbmVudEZhY3RvcnksXG4gIHR5cGUgSG90YmFySXRlbUNvbXBvbmVudFByb3BzLFxuICB0eXBlIEhvdGJhckl0ZW1Db21wb25lbnRUb2tlbkZvcixcbiAgdHlwZSBIb3RiYXJJdGVtQ29tcG9uZW50VG9rZW5Gb3JLaW5kLFxufSBmcm9tIFwiLi9zcmMvaG90YmFyLWl0ZW0tY29tcG9uZW50XCI7XG5leHBvcnQgeyBIb3RiYXJJdGVtRnJhbWUsIHR5cGUgSG90YmFySXRlbUZyYW1lUHJvcHMgfSBmcm9tIFwiLi9zcmMvaG90YmFyLWl0ZW0tZnJhbWVcIjtcbmV4cG9ydCB7XG4gIGhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhSW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgSG90YmFySXRlbVBlcnNpc3RlZERhdGFFbnRyeSxcbiAgdHlwZSBIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YVN0b3JlLFxuICB0eXBlIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhU3RvcmVGb3IsXG59IGZyb20gXCIuL3NyYy9ob3RiYXItaXRlbS1wZXJzaXN0ZWQtZGF0YVwiO1xuZXhwb3J0IHsgaW5zZXJ0SG90YmFySXRlbUluamVjdGlvblRva2VuLCB0eXBlIEluc2VydEhvdGJhckl0ZW0gfSBmcm9tIFwiLi9zcmMvaW5zZXJ0LWhvdGJhci1pdGVtXCI7XG5leHBvcnQgeyBlamVjdEhvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbiwgdHlwZSBFamVjdEhvdGJhckl0ZW0gfSBmcm9tIFwiLi9zcmMvZWplY3QtaG90YmFyLWl0ZW1cIjtcbmV4cG9ydCB7XG4gIGhhc0hvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbixcbiAgaGFzSG90YmFySXRlbVJlYWN0aXZlSW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgSGFzSG90YmFySXRlbSxcbiAgdHlwZSBIYXNIb3RiYXJJdGVtUmVhY3RpdmUsXG59IGZyb20gXCIuL3NyYy9oYXMtaG90YmFyLWl0ZW1cIjtcbiIsICJpbXBvcnQgeyBnZXRUeXBlZFNwZWNpZmllciwgdHlwZSBUeXBlZFNwZWNpZmllciwgdHlwZSBUeXBlZFNwZWNpZmllclR5cGUgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuXG4vKipcbiAqIElkZW50aWZpZXMgb25lIGtpbmQgb2YgaG90YmFyIGl0ZW06IHdoYXQgYW4gaXRlbSBpcywgYXMgb3Bwb3NlZCB0byB3aGljaCBpdGVtIGl0IGlzLlxuICogRXZlcnkgaXRlbSBpbiB0aGUgaG90YmFyIGlzIHBlcnNpc3RlZCBhcyBgeyBpZCwga2luZCB9YCwgYW5kIHRoZSBraW5kIGRlY2lkZXMgaG93IHRoZVxuICogaXRlbSByZW5kZXJzLlxuICpcbiAqIGBQZXJzaXN0ZWREYXRhYCBpcyB3aGF0IHRoZSBob3RiYXIgcGVyc2lzdHMgbmV4dCB0byB0aGUgaXRlbSdzIGlkIHdoZW4gdGhlIGl0ZW0gaXNcbiAqIGFkZGVkLCBhbmQgaGFuZHMgYmFjayB0byB0aGUga2luZCdzIGNvbXBvbmVudCB3aGVuZXZlciB0aGUgaXRlbSByZW5kZXJzLiBBIGtpbmRcbiAqIGNyZWF0ZWQgd2l0aG91dCBgUGVyc2lzdGVkRGF0YWAgcGVyc2lzdHMgbm90aGluZyBiZXlvbmQgdGhlIGlkLlxuICpcbiAqIEF0IHJ1bnRpbWUgYSBraW5kIGlzIGEgYnJhbmRlZCBzdHJpbmcsIHNvIGl0IGlzIHVzYWJsZSBhcyBhIGAuZm9yKClgIGtleS5cbiAqL1xuZXhwb3J0IHR5cGUgSG90YmFySXRlbUtpbmQ8UGVyc2lzdGVkRGF0YSA9IHVua25vd24+ID0gVHlwZWRTcGVjaWZpZXI8c3RyaW5nLCB7IHBlcnNpc3RlZERhdGE6IFBlcnNpc3RlZERhdGEgfT47XG5cbi8qKlxuICogUmVjb3ZlcnMgdGhlIHBlcnNpc3RlZCBkYXRhIHR5cGUgYm91bmQgdG8gYSB7QGxpbmsgSG90YmFySXRlbUtpbmR9IG9yIGEge0BsaW5rIEhvdGJhckl0ZW1LaW5kSWR9LlxuICovXG5leHBvcnQgdHlwZSBIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YTxLIGV4dGVuZHMgSG90YmFySXRlbUtpbmQ8YW55PiB8IEhvdGJhckl0ZW1LaW5kSWQ8YW55Pj4gPSBUeXBlZFNwZWNpZmllclR5cGU8XG4gIFwicGVyc2lzdGVkRGF0YVwiLFxuICBLXG4+O1xuXG4vKipcbiAqIFdoYXQgdGhlIGhvdGJhciBrbm93cyBhIGtpbmQgYnk6IHRoZSBraW5kJ3Mgc3BlY2lmaWVyLCBzY29wZWQgdG8gd2hvZXZlciByZWdpc3RlcmVkIGl0LCBhc1xuICogb25lIHN0cmluZy4gSXQgaXMgd2hhdCB0aGUgaG90YmFyIHBlcnNpc3RzIGFzIGFuIGl0ZW0ncyBga2luZGAgYW5kIHdoYXQga2V5cyB0aGUga2luZCdzXG4gKiBwZXJzaXN0ZWQgZGF0YS4gVHdvIGV4dGVuc2lvbnMgZGVjbGFyaW5nIGEga2luZCB3aXRoIHRoZSBzYW1lIHNwZWNpZmllciBnZXQgdHdvIGlkcywgYmVjYXVzZVxuICogdGhlaXIgc2NvcGVzIGRpZmZlcjsgdGhlIHNwZWNpZmllciBhbG9uZSBpcyBuZXZlciBhbiBpZGVudGl0eS5cbiAqXG4gKiBUaGUgdG9rZW5zIHRha2UgdGhlIHR3byBwYXJ0cyBzZXBhcmF0ZWx5LCBgdG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcylgOyB0aGUgaWQgaXMgdGhlXG4gKiBob3RiYXIncyBzaWRlIG9mIHRoZSBzYW1lIGlkZW50aXR5LiBNYWRlIGJ5IHtAbGluayBnZXRIb3RiYXJJdGVtS2luZElkfSwgdGFrZW4gYXBhcnQgYnlcbiAqIHtAbGluayBwYXJzZUhvdGJhckl0ZW1LaW5kSWR9LiBUeXBlZCBieSB0aGUga2luZCdzIHBlcnNpc3RlZCBkYXRhLCBsaWtlIHRoZSBraW5kIGl0c2VsZi5cbiAqL1xuZXhwb3J0IHR5cGUgSG90YmFySXRlbUtpbmRJZDxQZXJzaXN0ZWREYXRhID0gdW5rbm93bj4gPSBUeXBlZFNwZWNpZmllcjxcbiAgc3RyaW5nLFxuICB7IHBlcnNpc3RlZERhdGE6IFBlcnNpc3RlZERhdGE7IHNjb3BlZEhvdGJhckl0ZW1LaW5kOiB0cnVlIH1cbj47XG5cbi8qKlxuICogVGhlIGlkIG9mIGEga2luZCBhcyByZWdpc3RlcmVkIHVuZGVyIHRoZSBnaXZlbiBzY29wZXM6IHRoZSBzY29wZSBpZHMsIHRoZW4gdGhlIHNwZWNpZmllcixcbiAqIGpvaW5lZCB3aXRoIFwiOlwiLCB3aGljaCBpcyB3aHkgYSBzcGVjaWZpZXIgbWF5IG5vdCBjb250YWluIG9uZS4gVGhlIHNhbWUga2luZCB1bmRlciB0aGUgc2FtZVxuICogc2NvcGVzIGFsd2F5cyB5aWVsZHMgdGhlIHNhbWUgaWQuIFRoZSBob3RiYXIgY29tcHV0ZXMgaXQgZnJvbSBhbiBpdGVtJ3Mga2luZCBhbmQgc2NvcGVzO1xuICogYSBraW5kJ3Mgb3duIGNvZGUgaGFzIG5vIG5lZWQgZm9yIGl0LCB0aGUgdG9rZW5zIHRha2UgdGhlIHBhcnRzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0SG90YmFySXRlbUtpbmRJZCA9IDxLIGV4dGVuZHMgSG90YmFySXRlbUtpbmQ8YW55Pj4oXG4gIGtpbmQ6IEssXG4gIHNjb3BlSWRzOiByZWFkb25seSBzdHJpbmdbXSxcbik6IEhvdGJhckl0ZW1LaW5kSWQ8SG90YmFySXRlbVBlcnNpc3RlZERhdGE8Sz4+ID0+XG4gIFsuLi5zY29wZUlkcywga2luZF0uam9pbihcIjpcIikgYXMgSG90YmFySXRlbUtpbmRJZDxIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YTxLPj47XG5cbi8qKlxuICogVGhlIHR3byBwYXJ0cyBvZiBhIGtpbmQgaWQ6IHRoZSBzY29wZXMgdGhlIGtpbmQgd2FzIHJlZ2lzdGVyZWQgdW5kZXIgYW5kIHRoZSBraW5kIGl0c2VsZixcbiAqIGFzIHRoZSB0b2tlbnMgdGFrZSB0aGVtOiBgdG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcylgLiBUaGUgaW52ZXJzZSBvZlxuICoge0BsaW5rIGdldEhvdGJhckl0ZW1LaW5kSWR9LiBBIGtpbmQgcmVnaXN0ZXJlZCBhdCBjb250YWluZXIgbGV2ZWwsIG9yIHBlcnNpc3RlZCBiZWZvcmUga2luZHNcbiAqIHdlcmUgc2NvcGVkLCBwYXJzZXMgdG8gbm8gc2NvcGVzLlxuICovXG5leHBvcnQgY29uc3QgcGFyc2VIb3RiYXJJdGVtS2luZElkID0gPERhdGE+KFxuICBraW5kSWQ6IEhvdGJhckl0ZW1LaW5kSWQ8RGF0YT4sXG4pOiB7IHJlYWRvbmx5IGtpbmQ6IEhvdGJhckl0ZW1LaW5kPERhdGE+OyByZWFkb25seSBzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10gfSA9PiB7XG4gIGNvbnN0IHNlZ21lbnRzID0gU3RyaW5nKGtpbmRJZCkuc3BsaXQoXCI6XCIpO1xuXG4gIHJldHVybiB7XG4gICAga2luZDogc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0gYXMgSG90YmFySXRlbUtpbmQ8RGF0YT4sXG4gICAgc2NvcGVJZHM6IHNlZ21lbnRzLnNsaWNlKDAsIC0xKSxcbiAgfTtcbn07XG5cbi8qKlxuICogQ3VycmllZCBjcmVhdG9yIGZvciBhIHtAbGluayBIb3RiYXJJdGVtS2luZH0uIFRoZSBmaXJzdCBjYWxsIGJpbmRzIHRoZSBwZXJzaXN0ZWQgZGF0YVxuICogdHlwZTsgdGhlIHNlY29uZCB0aGUgZ2xvYmFsbHkgdW5pcXVlIHNwZWNpZmllciBzdHJpbmcuIFJlZ2lzdGVyIHRoZSBraW5kIHdpdGhcbiAqIGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGAsIHRoZW4gYWRkIGl0ZW1zIG9mIGl0IHdpdGhcbiAqIGBhZGRUb0hvdGJhckluamVjdGlvblRva2VuLmZvcihraW5kKWAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBBIGtpbmQgd2hvc2UgaXRlbXMgY2FycnkgYSBVUkw6XG4gKiBleHBvcnQgY29uc3QgYm9va21hcmtIb3RiYXJJdGVtS2luZCA9IGdldEhvdGJhckl0ZW1LaW5kPHsgdXJsOiBzdHJpbmcgfT4oKShcIm15LWV4dGVuc2lvbi1ib29rbWFya1wiKTtcbiAqXG4gKiAvLyBBIGtpbmQgd2hvc2UgaXRlbXMgbmVlZCBub3RoaW5nIGJleW9uZCB0aGVpciBpZDpcbiAqIGV4cG9ydCBjb25zdCBkYXNoYm9hcmRIb3RiYXJJdGVtS2luZCA9IGdldEhvdGJhckl0ZW1LaW5kKCkoXCJteS1leHRlbnNpb24tZGFzaGJvYXJkXCIpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRIb3RiYXJJdGVtS2luZCA9XG4gIDxQZXJzaXN0ZWREYXRhID0gdm9pZD4oKSA9PlxuICA8UyBleHRlbmRzIHN0cmluZz4oc3BlY2lmaWVyOiBTKSA9PiB7XG4gICAgaWYgKHNwZWNpZmllci5pbmNsdWRlcyhcIjpcIikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRyaWVkIHRvIGNyZWF0ZSBob3RiYXIgaXRlbSBraW5kIFwiJHtzcGVjaWZpZXJ9XCIsIGJ1dCBcIjpcIiBpcyByZXNlcnZlZCBmb3Igc2NvcGluZyB0aGUga2luZCB0byBpdHMgcmVnaXN0cmF0aW9uLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRUeXBlZFNwZWNpZmllcjx7IHBlcnNpc3RlZERhdGE6IFBlcnNpc3RlZERhdGEgfT4oKShzcGVjaWZpZXIpO1xuICB9O1xuIiwgImltcG9ydCB7IGdldEluamVjdGFibGUyLCBnZXRJbmplY3RhYmxlQnVuY2ggfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHsgZ2V0SW5qZWN0YWJsZUNvbXBvbmVudDIsIHVzZURpIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGUtcmVhY3RcIjtcbmltcG9ydCB7IG9ic2VydmVyIH0gZnJvbSBcIm1vYngtcmVhY3RcIjtcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdHlwZSBBZGRUb0hvdGJhciwgYWRkVG9Ib3RiYXJJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2FkZC10by1ob3RiYXJcIjtcbmltcG9ydCB7IGVqZWN0SG90YmFySXRlbUluamVjdGlvblRva2VuIH0gZnJvbSBcIi4vZWplY3QtaG90YmFyLWl0ZW1cIjtcbmltcG9ydCB7IGhhc0hvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbiwgaGFzSG90YmFySXRlbVJlYWN0aXZlSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9oYXMtaG90YmFyLWl0ZW1cIjtcbmltcG9ydCB7IHR5cGUgSG90YmFySXRlbUNvbXBvbmVudFByb3BzLCBob3RiYXJJdGVtQ29tcG9uZW50SW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1jb21wb25lbnRcIjtcbmltcG9ydCB7IEhvdGJhckl0ZW1GcmFtZSB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWZyYW1lXCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW1JZCB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWlkXCI7XG5pbXBvcnQgeyBnZXRIb3RiYXJJdGVtS2luZElkLCB0eXBlIEhvdGJhckl0ZW1LaW5kLCB0eXBlIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0ta2luZFwiO1xuaW1wb3J0IHsgaG90YmFySXRlbVBlcnNpc3RlZERhdGFJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2hvdGJhci1pdGVtLXBlcnNpc3RlZC1kYXRhXCI7XG5pbXBvcnQgeyBpbnNlcnRIb3RiYXJJdGVtSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9pbnNlcnQtaG90YmFyLWl0ZW1cIjtcbmltcG9ydCB7XG4gIHR5cGUgSXNJbkhvdGJhcixcbiAgdHlwZSBJc0luSG90YmFyUmVhY3RpdmUsXG4gIGlzSW5Ib3RiYXJJbmplY3Rpb25Ub2tlbixcbiAgaXNJbkhvdGJhclJlYWN0aXZlSW5qZWN0aW9uVG9rZW4sXG59IGZyb20gXCIuL2lzLWluLWhvdGJhclwiO1xuaW1wb3J0IHsgdHlwZSBSZW1vdmVGcm9tSG90YmFyLCByZW1vdmVGcm9tSG90YmFySW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9yZW1vdmUtZnJvbS1ob3RiYXJcIjtcblxuLyoqXG4gKiBXaGF0IGEga2luZCdzIGNvbXBvbmVudCByZWNlaXZlczogd2hpY2ggaXRlbSBpdCByZW5kZXJzLCBhbmQgdGhlIGRhdGEgdGhhdCB3YXNcbiAqIHBlcnNpc3RlZCB3aGVuIHRoZSBpdGVtIHdhcyBhZGRlZC4gVHlwZWQgYnkgdGhlIGtpbmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG90YmFySXRlbVByb3BzPEsgZXh0ZW5kcyBIb3RiYXJJdGVtS2luZDxhbnk+PiB7XG4gIHJlYWRvbmx5IGlkOiBIb3RiYXJJdGVtSWQ7XG4gIHJlYWRvbmx5IHBlcnNpc3RlZERhdGE6IEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEs+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvdGJhckl0ZW1LaW5kQnVuY2hQYXJhbXM8SyBleHRlbmRzIEhvdGJhckl0ZW1LaW5kPGFueT4+IHtcbiAgLyoqIFRoZSBraW5kIGJlaW5nIHJlZ2lzdGVyZWQsIGZyb20gYGdldEhvdGJhckl0ZW1LaW5kYC4gKi9cbiAgcmVhZG9ubHkga2luZDogSztcbiAgLyoqXG4gICAqIFJlbmRlcnMgYW4gaXRlbSBvZiB0aGUga2luZCwgaW5zaWRlIHRoZSBzbG90J3MgZnJhbWUuIFJlY2VpdmVzIHRoZSBpdGVtJ3MgaWQgYW5kIGl0c1xuICAgKiBwZXJzaXN0ZWQgZGF0YSwgYW5kIGRlY2lkZXMgZXZlcnl0aGluZyBlbHNlOiB3aGF0IHRoZSBpdGVtIGxvb2tzIGxpa2UsIGFuZCB3aGF0XG4gICAqIGNsaWNraW5nIGl0IGRvZXMuIE11c3QgYmUgZGVmaW5lZCBhdCBtb2R1bGUgc2NvcGUuXG4gICAqL1xuICByZWFkb25seSBDb21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGU8SG90YmFySXRlbVByb3BzPEs+Pjtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIGtpbmQgb2YgaG90YmFyIGl0ZW0uIE9uZSBjYWxsIGRlY2xhcmVzIGhvdyBpdGVtcyBvZiB0aGUga2luZCByZW5kZXIsIHdpcmVzXG4gKiB0aGVpciBwZXJzaXN0ZWQgZGF0YSwgYW5kIGdpdmVzIHRoZSBraW5kIGl0cyB0eXBlZCBhZGRlciwgYGFkZFRvSG90YmFySW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcylgLFxuICogYWxvbmcgd2l0aCBpdHMgb3duIG1lbWJlcnNoaXAgcXVlcmllcyBhbmQgcmVtb3ZlciwgYGlzSW5Ib3RiYXJJbmplY3Rpb25Ub2tlbi5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKWAsXG4gKiBgaXNJbkhvdGJhclJlYWN0aXZlSW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcylgIGFuZCBgcmVtb3ZlRnJvbUhvdGJhckluamVjdGlvblRva2VuLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYC5cbiAqXG4gKiBUaGUgbGFzdCBgLmZvcigpYCBpcyB0aGUgc2NvcGUgb2YgdGhlIHJlZ2lzdHJhdGlvbjogZXZlcnkgdG9rZW4gaGVyZSBpcyByZWdpc3RlcmVkIHVuZGVyXG4gKiB0aGUgc2NvcGVzIG9mIHdob2V2ZXIgcmVnaXN0ZXJzIHRoZSBidW5jaCwgc28gdHdvIGV4dGVuc2lvbnMgZGVjbGFyaW5nIGEga2luZCB3aXRoIHRoZSBzYW1lXG4gKiBzcGVjaWZpZXIgbmV2ZXIgbWVldC4gSXRlbXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlaXIga2luZCwgaXRzIHNjb3BlcywgYW5kIHRoZW4gdGhlaXIgb3duXG4gKiBpZCwgbmV2ZXIgYnkgdGhlIGlkIGFsb25lLlxuICpcbiAqIFRoZSBob3RiYXIgZnJhbWVzIGVhY2ggaXRlbSwgcGVyc2lzdHMgaXRzIGB7IGlkLCBraW5kIH1gIGFuZCBkYXRhLCBwYWdlcyBhbmQgZHJhZ3MgaXQsXG4gKiBhbmQgZ2l2ZXMgaXRzIHJpZ2h0LWNsaWNrIG1lbnUgYSB3YXkgdG8gcmVtb3ZlIGl0LiBUaGUgY29tcG9uZW50IG93bnMgdGhlIHJlc3QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogZXhwb3J0IGNvbnN0IGJvb2ttYXJrSG90YmFySXRlbUtpbmQgPSBnZXRIb3RiYXJJdGVtS2luZDx7IHVybDogc3RyaW5nIH0+KCkoXCJteS1leHRlbnNpb24tYm9va21hcmtcIik7XG4gKlxuICogY29uc3QgQm9va21hcmsgPSAoeyBwZXJzaXN0ZWREYXRhIH06IEhvdGJhckl0ZW1Qcm9wczx0eXBlb2YgYm9va21hcmtIb3RiYXJJdGVtS2luZD4pID0+IChcbiAqICAgPEJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBvcGVuKHBlcnNpc3RlZERhdGEudXJsKX0+e25ldyBVUkwocGVyc2lzdGVkRGF0YS51cmwpLmhvc3R9PC9CdXR0b24+XG4gKiApO1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGdldEhvdGJhckl0ZW1LaW5kSW5qZWN0YWJsZUJ1bmNoKHtcbiAqICAga2luZDogYm9va21hcmtIb3RiYXJJdGVtS2luZCxcbiAqICAgQ29tcG9uZW50OiBCb29rbWFyayxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaCA9IDxLIGV4dGVuZHMgSG90YmFySXRlbUtpbmQ8YW55Pj4oe1xuICBraW5kLFxuICBDb21wb25lbnQsXG59OiBIb3RiYXJJdGVtS2luZEJ1bmNoUGFyYW1zPEs+KSA9PiB7XG4gIC8vIEJ1aWx0IG9uY2UgcGVyIGtpbmQgc28gdGhlIGNvbXBvbmVudCByZWZlcmVuY2UgaXMgc3RhYmxlIGFjcm9zcyBpbmplY3Rpb25zOyBhIGZyZXNoXG4gIC8vIHJlZmVyZW5jZSBvbiBlYWNoIGluamVjdGlvbiB3b3VsZCByZW1vdW50IHRoZSBpdGVtIGFuZCBsb3NlIGl0cyBzdGF0ZS5cbiAgY29uc3QgSG90YmFySXRlbU9mS2luZCA9IG9ic2VydmVyKCh7IGl0ZW0gfTogSG90YmFySXRlbUNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgY29uc3QgZGkgPSB1c2VEaSgpO1xuICAgIC8vIFJlc29sdmVkIHN0cmFpZ2h0IGZyb20gdGhlIGNvbnRhaW5lcjogdGhlIHN0b3JlIGlzIGEgc2luZ2xldG9uIHBlciBraW5kLCBhbmQgYVxuICAgIC8vIHN1c3BlbmRpbmcgaG9vayBoYXMgbm8gcGxhY2UgYXJvdW5kIGFuIGl0ZW0gdGhhdCBpcyBhbHJlYWR5IG9uIHNjcmVlbi4gVGhlIGl0ZW0gY2Fycmllc1xuICAgIC8vIHRoZSBraW5kJ3MgaWQsIHdoaWNoIGlzIHdoYXQgdGhlIHN0b3JlIGlzIGtleWVkIGJ5LlxuICAgIGNvbnN0IHBlcnNpc3RlZERhdGEgPSB1c2VNZW1vKCgpID0+IGRpLmluamVjdChob3RiYXJJdGVtUGVyc2lzdGVkRGF0YUluamVjdGlvblRva2VuLCBpdGVtLmtpbmQpLCBbZGksIGl0ZW0ua2luZF0pO1xuICAgIGNvbnN0IGVudHJ5ID0gcGVyc2lzdGVkRGF0YS5nZXQoaXRlbS5pZCkuZ2V0KCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEhvdGJhckl0ZW1GcmFtZSBpdGVtPXtpdGVtfT5cbiAgICAgICAge2VudHJ5ID8gPENvbXBvbmVudCBpZD17aXRlbS5pZH0gcGVyc2lzdGVkRGF0YT17ZW50cnkucGVyc2lzdGVkRGF0YSBhcyBIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YTxLPn0gLz4gOiBudWxsfVxuICAgICAgPC9Ib3RiYXJJdGVtRnJhbWU+XG4gICAgKTtcbiAgfSk7XG5cbiAgLy8gVGhlIHRva2VucyBhcmUga2V5ZWQgYnkgdGhlIHNjb3BlcyBvZiB3aG9ldmVyIHJlZ2lzdGVycyB0aGlzIGJ1bmNoICh0aGUgYGluamVjdGlvblRva2VuYFxuICAvLyBmdW5jdGlvbnMpLCBhbmQgdGhlIGluc3RhbmNlcyBjb21wdXRlIHRoZSBob3RiYXIncyBpZCBvZiB0aGUga2luZCBmcm9tIHRoZWlyIG93blxuICAvLyBgZGkuc2NvcGVJZHNgLCBzbyB0aGUgdHdvIGFsd2F5cyBhZ3JlZS5cbiAgcmV0dXJuIGdldEluamVjdGFibGVCdW5jaCh7XG4gICAgY29tcG9uZW50OiBnZXRJbmplY3RhYmxlQ29tcG9uZW50Mih7XG4gICAgICBpZDogYGhvdGJhci1pdGVtLWNvbXBvbmVudC0ke2tpbmR9YCxcbiAgICAgIENvbXBvbmVudDogSG90YmFySXRlbU9mS2luZCxcbiAgICAgIGluamVjdGlvblRva2VuOiAoeyBzY29wZUlkcyB9KSA9PiBob3RiYXJJdGVtQ29tcG9uZW50SW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcyksXG4gICAgfSksXG5cbiAgICBhZGRUb0hvdGJhcjogZ2V0SW5qZWN0YWJsZTIoe1xuICAgICAgaWQ6IGBhZGQtdG8taG90YmFyLSR7a2luZH1gLFxuICAgICAgY29uc3VtcHRpb25zOiBbXG4gICAgICAgIGhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhSW5qZWN0aW9uVG9rZW4sXG4gICAgICAgIGluc2VydEhvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbixcbiAgICAgICAgaGFzSG90YmFySXRlbUluamVjdGlvblRva2VuLFxuICAgICAgXSxcblxuICAgICAgaW5zdGFudGlhdGU6IChkaSkgPT4ge1xuICAgICAgICBjb25zdCBraW5kSWQgPSBnZXRIb3RiYXJJdGVtS2luZElkKGtpbmQsIGRpLnNjb3BlSWRzKTtcbiAgICAgICAgY29uc3QgcGVyc2lzdGVkRGF0YSA9IGRpLmluamVjdChob3RiYXJJdGVtUGVyc2lzdGVkRGF0YUluamVjdGlvblRva2VuKShraW5kSWQpO1xuICAgICAgICBjb25zdCBpbnNlcnRIb3RiYXJJdGVtID0gZGkuaW5qZWN0KGluc2VydEhvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbikoKTtcbiAgICAgICAgY29uc3QgaGFzSG90YmFySXRlbSA9IGRpLmluamVjdChoYXNIb3RiYXJJdGVtSW5qZWN0aW9uVG9rZW4pKCk7XG5cbiAgICAgICAgY29uc3QgYWRkVG9Ib3RiYXI6IEFkZFRvSG90YmFyPEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEs+PiA9IGFzeW5jICh7IGlkLCBwZXJzaXN0ZWREYXRhOiBkYXRhIH0pID0+IHtcbiAgICAgICAgICAvLyBDaGVja2VkIGJlZm9yZSBwZXJzaXN0aW5nLCBzbyBhIHJlamVjdGVkIGFkZCBsZWF2ZXMgdGhlIGl0ZW0ncyBkYXRhIGFzIGl0IHdhcy5cbiAgICAgICAgICBpZiAoYXdhaXQgaGFzSG90YmFySXRlbSh7IGlkLCBraW5kOiBraW5kSWQgfSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVHJpZWQgdG8gYWRkIGhvdGJhciBpdGVtIFwiJHtpZH1cIiBvZiBraW5kIFwiJHtraW5kSWR9XCIsIGJ1dCBpdCBpcyBhbHJlYWR5IGluIHRoZSBob3RiYXIuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXdhaXQgcGVyc2lzdGVkRGF0YS5zZXQoaWQsIGRhdGEpO1xuICAgICAgICAgIGF3YWl0IGluc2VydEhvdGJhckl0ZW0oeyBpZCwga2luZDoga2luZElkIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAoKSA9PiBhZGRUb0hvdGJhcjtcbiAgICAgIH0sXG5cbiAgICAgIGluamVjdGlvblRva2VuOiAoeyBzY29wZUlkcyB9KSA9PiBhZGRUb0hvdGJhckluamVjdGlvblRva2VuLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpLFxuICAgIH0pLFxuXG4gICAgLy8gVGhlIGhvdGJhciBhbnN3ZXJzIGZvciBldmVyeSBraW5kIGF0IG9uY2UsIGdpdmVuIHRoZSB3aG9sZSB7IGlkLCBraW5kIH07IHRoZXNlIGJpbmQgdGhlXG4gICAgLy8ga2luZCwgc28gYSBjb25zdW1lciBhZGRyZXNzZXMgaXRlbXMgYnkga2luZCBmaXJzdCBhbmQgaWQgc2Vjb25kLCBuZXZlciBieSBpZCBhbG9uZS5cbiAgICBpc0luSG90YmFyOiBnZXRJbmplY3RhYmxlMih7XG4gICAgICBpZDogYGlzLWluLWhvdGJhci0ke2tpbmR9YCxcbiAgICAgIGNvbnN1bXB0aW9uczogW2hhc0hvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbl0sXG5cbiAgICAgIGluc3RhbnRpYXRlOiAoZGkpID0+IHtcbiAgICAgICAgY29uc3Qga2luZElkID0gZ2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBkaS5zY29wZUlkcyk7XG4gICAgICAgIGNvbnN0IGhhc0hvdGJhckl0ZW0gPSBkaS5pbmplY3QoaGFzSG90YmFySXRlbUluamVjdGlvblRva2VuKSgpO1xuICAgICAgICBjb25zdCBpc0luSG90YmFyOiBJc0luSG90YmFyID0gKGlkKSA9PiBoYXNIb3RiYXJJdGVtKHsgaWQsIGtpbmQ6IGtpbmRJZCB9KTtcblxuICAgICAgICByZXR1cm4gKCkgPT4gaXNJbkhvdGJhcjtcbiAgICAgIH0sXG5cbiAgICAgIGluamVjdGlvblRva2VuOiAoeyBzY29wZUlkcyB9KSA9PiBpc0luSG90YmFySW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcyksXG4gICAgfSksXG5cbiAgICBpc0luSG90YmFyUmVhY3RpdmU6IGdldEluamVjdGFibGUyKHtcbiAgICAgIGlkOiBgaXMtaW4taG90YmFyLXJlYWN0aXZlLSR7a2luZH1gLFxuICAgICAgY29uc3VtcHRpb25zOiBbaGFzSG90YmFySXRlbVJlYWN0aXZlSW5qZWN0aW9uVG9rZW5dLFxuXG4gICAgICBpbnN0YW50aWF0ZTogKGRpKSA9PiB7XG4gICAgICAgIGNvbnN0IGtpbmRJZCA9IGdldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgZGkuc2NvcGVJZHMpO1xuICAgICAgICBjb25zdCBoYXNIb3RiYXJJdGVtUmVhY3RpdmUgPSBkaS5pbmplY3QoaGFzSG90YmFySXRlbVJlYWN0aXZlSW5qZWN0aW9uVG9rZW4pO1xuICAgICAgICBjb25zdCBpc0luSG90YmFyUmVhY3RpdmU6IElzSW5Ib3RiYXJSZWFjdGl2ZSA9IChpZCkgPT4gaGFzSG90YmFySXRlbVJlYWN0aXZlKHsgaWQsIGtpbmQ6IGtpbmRJZCB9KTtcblxuICAgICAgICByZXR1cm4gaXNJbkhvdGJhclJlYWN0aXZlO1xuICAgICAgfSxcblxuICAgICAgaW5qZWN0aW9uVG9rZW46ICh7IHNjb3BlSWRzIH0pID0+IGlzSW5Ib3RiYXJSZWFjdGl2ZUluamVjdGlvblRva2VuLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpLFxuICAgIH0pLFxuXG4gICAgcmVtb3ZlRnJvbUhvdGJhcjogZ2V0SW5qZWN0YWJsZTIoe1xuICAgICAgaWQ6IGByZW1vdmUtZnJvbS1ob3RiYXItJHtraW5kfWAsXG4gICAgICBjb25zdW1wdGlvbnM6IFtlamVjdEhvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbl0sXG5cbiAgICAgIGluc3RhbnRpYXRlOiAoZGkpID0+IHtcbiAgICAgICAgY29uc3Qga2luZElkID0gZ2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBkaS5zY29wZUlkcyk7XG4gICAgICAgIGNvbnN0IGVqZWN0SG90YmFySXRlbSA9IGRpLmluamVjdChlamVjdEhvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbikoKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlRnJvbUhvdGJhcjogUmVtb3ZlRnJvbUhvdGJhciA9IChpZCkgPT4gZWplY3RIb3RiYXJJdGVtKHsgaWQsIGtpbmQ6IGtpbmRJZCB9KTtcblxuICAgICAgICByZXR1cm4gKCkgPT4gcmVtb3ZlRnJvbUhvdGJhcjtcbiAgICAgIH0sXG5cbiAgICAgIGluamVjdGlvblRva2VuOiAoeyBzY29wZUlkcyB9KSA9PiByZW1vdmVGcm9tSG90YmFySW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcyksXG4gICAgfSksXG4gIH0pO1xufTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIsIHR5cGUgTWFueUZhY3RvcnksIHR5cGUgU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBIb3RiYXJJdGVtSWQgfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1pZFwiO1xuaW1wb3J0IHR5cGUgeyBIb3RiYXJJdGVtS2luZCwgSG90YmFySXRlbVBlcnNpc3RlZERhdGEgfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1raW5kXCI7XG5pbXBvcnQgeyBnZXRIb3RiYXJJdGVtS2luZElkIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0ta2luZFwiO1xuaW1wb3J0IHR5cGUgeyBpc0luSG90YmFySW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9pcy1pbi1ob3RiYXJcIjtcblxuLyoqXG4gKiBBZGRzIGFuIGl0ZW0gb2Ygb25lIGtpbmQgdG8gdGhlIGhvdGJhcjogcGVyc2lzdHMgaXRzIGRhdGEgdW5kZXIgaXRzIGlkLCB0aGVuIHB1dHMgaXRcbiAqIGludG8gdGhlIGZpcnN0IGZyZWUgc2xvdCBvZiB0aGUgY3VycmVudCBwYWdlLiBUZWxscyB0aGUgdXNlciB3aGVuIHRoZXJlIGlzIG5vIGZyZWUgc2xvdC5cbiAqXG4gKiBBbiBpdGVtIGlzIGlkZW50aWZpZWQgYnkgaXRzIGtpbmQgYW5kIHRoZW4gaXRzIGlkLCBzbyB0aGUgaWQgbmVlZHMgdG8gYmUgdW5pcXVlIG9ubHkgYW1vbmdcbiAqIGl0ZW1zIG9mIHRoZSBraW5kLiBUaHJvd3Mgd2hlbiBhbiBpdGVtIG9mIHRoZSBraW5kIHdpdGggdGhlIGlkIGlzIGFscmVhZHkgb24gdGhlIGN1cnJlbnRcbiAqIHBhZ2UsIGxlYXZpbmcgdGhlIGhvdGJhciBhbmQgdGhlIGl0ZW0ncyBwZXJzaXN0ZWQgZGF0YSBhcyB0aGV5IHdlcmUuIEEgdG9nZ2xlIGFza3NcbiAqIHtAbGluayBpc0luSG90YmFySW5qZWN0aW9uVG9rZW59IGZpcnN0LlxuICovXG5leHBvcnQgdHlwZSBBZGRUb0hvdGJhcjxQZXJzaXN0ZWREYXRhPiA9IChpdGVtOiB7XG4gIHJlYWRvbmx5IGlkOiBIb3RiYXJJdGVtSWQ7XG4gIHJlYWRvbmx5IHBlcnNpc3RlZERhdGE6IFBlcnNpc3RlZERhdGE7XG59KSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHM6IGV4YWN0bHkgb25lIGFkZGVyIHBlciBraW5kIHBlciBzY29wZSwgdHlwZWQgYnkgaXRzIHBlcnNpc3RlZCBkYXRhLiAqL1xuZXhwb3J0IHR5cGUgQWRkVG9Ib3RiYXJUb2tlbkZvcjxQZXJzaXN0ZWREYXRhPiA9IFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogKCkgPT4gQWRkVG9Ib3RiYXI8UGVyc2lzdGVkRGF0YT47XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiB1bmRlZmluZWQ7XG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiO1xufT47XG5cbi8qKiBXaGF0IGAuZm9yKGtpbmQpYCB5aWVsZHM6IHRoZSBraW5kJ3MgYWRkZXJzLCBvbmUgcGVyIHNjb3BlLCByZWFjaGVkIHdpdGggYC5mb3Ioc2NvcGVJZHMpYC4gKi9cbmV4cG9ydCB0eXBlIEFkZFRvSG90YmFyVG9rZW5Gb3JLaW5kPFBlcnNpc3RlZERhdGE+ID0gU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBBZGRUb0hvdGJhcjxQZXJzaXN0ZWREYXRhPjtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PCgpID0+IEFkZFRvSG90YmFyPFBlcnNpc3RlZERhdGE+PjtcbiAgc3BlY2lmaWNUb2tlbkZhY3Rvcnk6IChzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10pID0+IEFkZFRvSG90YmFyVG9rZW5Gb3I8UGVyc2lzdGVkRGF0YT47XG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiO1xufT47XG5cbi8qKlxuICogVGhlIGAuZm9yKClgIGZhY3RvcmllcywgYW5ub3RhdGVkIHNvIGEga2luZCdzIG93biBwZXJzaXN0ZWQgZGF0YSB0eXBlIHN1cnZpdmVzIGJvdGggbGV2ZWxzLlxuICogSW5mZXJlbmNlIGZyb20gdGhlIHZhbHVlIGFsb25lIGNhbm5vdCByZWNvbnN0cnVjdCBhIHJldHVybiB0eXBlIHRoYXQgbWVudGlvbnMgdGhlXG4gKiBzcGVjaWZpZXIncyBvd24gdHlwZSBwYXJhbWV0ZXIuXG4gKi9cbmNvbnN0IGFkZFRvSG90YmFyVG9rZW5Gb3JLaW5kID0gPEsgZXh0ZW5kcyBIb3RiYXJJdGVtS2luZDxhbnk+PihcbiAga2luZDogSyxcbik6IEFkZFRvSG90YmFyVG9rZW5Gb3JLaW5kPEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEs+PiA9PlxuICBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICAgIHNpbmdsZUZhY3Rvcnk6ICgpID0+IEFkZFRvSG90YmFyPEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEs+PjtcbiAgICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8KCkgPT4gQWRkVG9Ib3RiYXI8SG90YmFySXRlbVBlcnNpc3RlZERhdGE8Sz4+PjtcbiAgfT4oe1xuICAgIGlkOiBgYWRkLXRvLWhvdGJhci0ke2tpbmR9YCxcbiAgICBzcGVjaWFsaXR5OiBraW5kLFxuICAgIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxuICB9KShcbiAgICAoc2NvcGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogQWRkVG9Ib3RiYXJUb2tlbkZvcjxIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YTxLPj4gPT5cbiAgICAgIGdldEluamVjdGlvblRva2VuMjx7IHNpbmdsZUZhY3Rvcnk6ICgpID0+IEFkZFRvSG90YmFyPEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEs+PiB9Pih7XG4gICAgICAgIGlkOiBgYWRkLXRvLWhvdGJhci0ke2dldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpfWAsXG4gICAgICAgIHNwZWNpYWxpdHk6IGdldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpLFxuICAgICAgICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbiAgICAgIH0pKCksXG4gICk7XG5cbi8qKlxuICogQWRkIGFuIGl0ZW0gdG8gdGhlIGhvdGJhciwgdHlwZWQgYnkgaXRzIGtpbmQ6IGAuZm9yKGtpbmQpYCBuYXJyb3dzIHRvIHRoZSBraW5kLCB3aG9zZVxuICogYHBlcnNpc3RlZERhdGFgIGlzIHdoYXQgdGhlIGtpbmQgd2FzIGNyZWF0ZWQgZm9yLCBhbmQgYC5mb3Ioc2NvcGVJZHMpYCB0byB0aGUgcmVnaXN0cmF0aW9uXG4gKiBvZiBpdCwgd2l0aCB0aGUgYGRpLnNjb3BlSWRzYCBvZiB0aGUgaW5qZWN0YWJsZSBhc2tpbmcuIFJlZ2lzdGVyZWQgYnlcbiAqIGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGAsIHNvIGV2ZXJ5IHJlZ2lzdGVyZWQga2luZCBoYXMgb25lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgYWRkQm9va21hcmtUb0hvdGJhciA9IGRpLmluamVjdChhZGRUb0hvdGJhckluamVjdGlvblRva2VuLmZvcihib29rbWFya0hvdGJhckl0ZW1LaW5kKS5mb3IoZGkuc2NvcGVJZHMpKSgpO1xuICpcbiAqIGF3YWl0IGFkZEJvb2ttYXJrVG9Ib3RiYXIoeyBpZDogYGJvb2ttYXJrKCR7dXJsfSlgLCBwZXJzaXN0ZWREYXRhOiB7IHVybCB9IH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRUb0hvdGJhckluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogKCkgPT4gQWRkVG9Ib3RiYXI8YW55PjtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PCgpID0+IEFkZFRvSG90YmFyPGFueT4+O1xufT4oe1xuICBpZDogXCJhZGQtdG8taG90YmFyXCIsXG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxufSkoYWRkVG9Ib3RiYXJUb2tlbkZvcktpbmQpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW0gfSBmcm9tIFwiLi9ob3RiYXItaXRlbVwiO1xuXG4vKipcbiAqIFRha2VzIHRoZSBpdGVtLCBhcyBgeyBpZCwga2luZCB9YCwgb3V0IG9mIHRoZSBjdXJyZW50IGhvdGJhciBwYWdlLiBUaHJvd3Mgd2hlbiBubyBzdWNoIGl0ZW1cbiAqIGlzIHRoZXJlLlxuICovXG5leHBvcnQgdHlwZSBFamVjdEhvdGJhckl0ZW0gPSAoaXRlbTogSG90YmFySXRlbSkgPT4gUHJvbWlzZTx2b2lkPjtcblxuLyoqXG4gKiBUaGUgaG90YmFyJ3Mgb3duIHJlbW92YWwsIHRoZSBjb3VudGVycGFydCBvZiBgaW5zZXJ0SG90YmFySXRlbUluamVjdGlvblRva2VuYDogb25lXG4gKiBpbXBsZW1lbnRhdGlvbiBmb3IgZXZlcnkga2luZCwgZ2l2ZW4gdGhlIHdob2xlIGB7IGlkLCBraW5kIH1gLlxuICogYGdldEhvdGJhckl0ZW1LaW5kSW5qZWN0YWJsZUJ1bmNoYCBidWlsZHMgYHJlbW92ZUZyb21Ib3RiYXJJbmplY3Rpb25Ub2tlbi5mb3Ioa2luZClgIG9uIGl0LFxuICogc28gcmVhY2ggZm9yIHRoYXQgb25lIGluc3RlYWQuXG4gKlxuICogSW1wbGVtZW50ZWQgYnkgdGhlIGhvdGJhci5cbiAqL1xuZXhwb3J0IGNvbnN0IGVqZWN0SG90YmFySXRlbUluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogKCkgPT4gRWplY3RIb3RiYXJJdGVtIH0+KHtcbiAgaWQ6IFwiZWplY3QtaG90YmFyLWl0ZW1cIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IElDb21wdXRlZFZhbHVlIH0gZnJvbSBcIm1vYnhcIjtcbmltcG9ydCB0eXBlIHsgSG90YmFySXRlbSB9IGZyb20gXCIuL2hvdGJhci1pdGVtXCI7XG5cbi8qKiBXaGV0aGVyIHRoZSBpdGVtLCBhcyBgeyBpZCwga2luZCB9YCwgaXMgb24gdGhlIGN1cnJlbnQgaG90YmFyIHBhZ2UsIGFzIG9mIG5vdy4gKi9cbmV4cG9ydCB0eXBlIEhhc0hvdGJhckl0ZW0gPSAoaXRlbTogSG90YmFySXRlbSkgPT4gUHJvbWlzZTxib29sZWFuPjtcblxuLyoqXG4gKiBUaGUgaG90YmFyJ3Mgb3duIG1lbWJlcnNoaXAgcXVlcnk6IG9uZSBpbXBsZW1lbnRhdGlvbiBmb3IgZXZlcnkga2luZCwgYXNrZWQgd2l0aCB0aGUgd2hvbGVcbiAqIGB7IGlkLCBraW5kIH1gLiBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgIGJ1aWxkcyBgaXNJbkhvdGJhckluamVjdGlvblRva2VuLmZvcihraW5kKWBcbiAqIG9uIGl0LCBzbyByZWFjaCBmb3IgdGhhdCBvbmUgaW5zdGVhZC5cbiAqXG4gKiBJbXBsZW1lbnRlZCBieSB0aGUgaG90YmFyLlxuICovXG5leHBvcnQgY29uc3QgaGFzSG90YmFySXRlbUluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogKCkgPT4gSGFzSG90YmFySXRlbSB9Pih7XG4gIGlkOiBcImhhcy1ob3RiYXItaXRlbVwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG5cbi8qKiBXaGV0aGVyIHRoZSBpdGVtLCBhcyBgeyBpZCwga2luZCB9YCwgaXMgb24gdGhlIGN1cnJlbnQgaG90YmFyIHBhZ2UsIHJlYWN0aXZlbHkuICovXG5leHBvcnQgdHlwZSBIYXNIb3RiYXJJdGVtUmVhY3RpdmUgPSAoaXRlbTogSG90YmFySXRlbSkgPT4gSUNvbXB1dGVkVmFsdWU8Ym9vbGVhbj47XG5cbi8qKlxuICogVGhlIGhvdGJhcidzIG93biByZWFjdGl2ZSBtZW1iZXJzaGlwIHF1ZXJ5LCBhc2tlZCB3aXRoIHRoZSB3aG9sZSBgeyBpZCwga2luZCB9YC5cbiAqIGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGAgYnVpbGRzIGBpc0luSG90YmFyUmVhY3RpdmVJbmplY3Rpb25Ub2tlbi5mb3Ioa2luZClgIG9uIGl0LFxuICogc28gcmVhY2ggZm9yIHRoYXQgb25lIGluc3RlYWQuXG4gKlxuICogSW1wbGVtZW50ZWQgYnkgdGhlIGhvdGJhci5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0hvdGJhckl0ZW1SZWFjdGl2ZUluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogSGFzSG90YmFySXRlbVJlYWN0aXZlIH0+KHtcbiAgaWQ6IFwiaGFzLWhvdGJhci1pdGVtLXJlYWN0aXZlXCIsXG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxufSkoKTtcbiIsICJpbXBvcnQge1xuICBnZXRJbmplY3Rpb25Ub2tlbjIsXG4gIHR5cGUgTWFueUZhY3RvcnksXG4gIHR5cGUgTWF5YmVSZXN1bHRGYWN0b3J5LFxuICB0eXBlIFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yLFxufSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW0gfSBmcm9tIFwiLi9ob3RiYXItaXRlbVwiO1xuaW1wb3J0IHsgZ2V0SG90YmFySXRlbUtpbmRJZCwgdHlwZSBIb3RiYXJJdGVtS2luZCB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWtpbmRcIjtcblxuLyoqIFdoYXQgdGhlIGhvdGJhciBoYW5kcyBhIGtpbmQncyBjb21wb25lbnQ6IHRoZSBpdGVtLCBhcyBgeyBpZCwga2luZCB9YC4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1Db21wb25lbnRQcm9wcyA9IHsgaXRlbTogSG90YmFySXRlbSB9O1xuXG4vKipcbiAqIFJlbmRlcnMgb25lIGl0ZW0gb2YgYSBraW5kIGluc2lkZSBpdHMgaG90YmFyIHNsb3QuIFRoZSBob3RiYXIgaGFuZHMgaXQgdGhlIGl0ZW0gb25seTtcbiAqIHRoZSBjb21wb25lbnQgcmVzb2x2ZXMgd2hhdGV2ZXIgZWxzZSBpdCBuZWVkcyBmcm9tIHRoZSBpdGVtJ3MgaWQgYW5kIGtpbmQuXG4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1Db21wb25lbnQgPSBSZWFjdC5Db21wb25lbnRUeXBlPEhvdGJhckl0ZW1Db21wb25lbnRQcm9wcz47XG5cbi8qKiBIb3cgdGhlIGNvbXBvbmVudCBpcyByZWdpc3RlcmVkOiBhIHYyIHRva2VuIG1vZGVscyBhIGZhY3RvcnksIHNvIGEgY29tcG9uZW50IGlzIHdyYXBwZWQgaW4gb25lLiAqL1xuZXhwb3J0IHR5cGUgSG90YmFySXRlbUNvbXBvbmVudEZhY3RvcnkgPSAoKSA9PiBIb3RiYXJJdGVtQ29tcG9uZW50O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHM6IGF0IG1vc3Qgb25lIGNvbXBvbmVudCBwZXIga2luZCBwZXIgc2NvcGUuICovXG5leHBvcnQgdHlwZSBIb3RiYXJJdGVtQ29tcG9uZW50VG9rZW5Gb3IgPSBTcGVjaWZpY0luamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6IEhvdGJhckl0ZW1Db21wb25lbnRGYWN0b3J5O1xuICBtYXliZUZhY3Rvcnk6IE1heWJlUmVzdWx0RmFjdG9yeTxIb3RiYXJJdGVtQ29tcG9uZW50RmFjdG9yeT47XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiB1bmRlZmluZWQ7XG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3Itb25lXCI7XG59PjtcblxuLyoqIFdoYXQgYC5mb3Ioa2luZClgIHlpZWxkczogdGhlIGtpbmQncyBjb21wb25lbnRzLCBvbmUgcGVyIHNjb3BlLCByZWFjaGVkIHdpdGggYC5mb3Ioc2NvcGVJZHMpYC4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1Db21wb25lbnRUb2tlbkZvcktpbmQgPSBTcGVjaWZpY0luamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6IEhvdGJhckl0ZW1Db21wb25lbnRGYWN0b3J5O1xuICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8SG90YmFySXRlbUNvbXBvbmVudEZhY3Rvcnk+O1xuICBzcGVjaWZpY1Rva2VuRmFjdG9yeTogKHNjb3BlSWRzOiByZWFkb25seSBzdHJpbmdbXSkgPT4gSG90YmFySXRlbUNvbXBvbmVudFRva2VuRm9yO1xuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIjtcbn0+O1xuXG5jb25zdCBob3RiYXJJdGVtQ29tcG9uZW50VG9rZW5Gb3JLaW5kID0gKGtpbmQ6IEhvdGJhckl0ZW1LaW5kPGFueT4pOiBIb3RiYXJJdGVtQ29tcG9uZW50VG9rZW5Gb3JLaW5kID0+XG4gIGdldEluamVjdGlvblRva2VuMjx7XG4gICAgc2luZ2xlRmFjdG9yeTogSG90YmFySXRlbUNvbXBvbmVudEZhY3Rvcnk7XG4gICAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PEhvdGJhckl0ZW1Db21wb25lbnRGYWN0b3J5PjtcbiAgfT4oe1xuICAgIGlkOiBgaG90YmFyLWl0ZW0tY29tcG9uZW50LSR7a2luZH1gLFxuICAgIHNwZWNpYWxpdHk6IGtpbmQsXG4gICAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG4gIH0pKFxuICAgIChzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10pOiBIb3RiYXJJdGVtQ29tcG9uZW50VG9rZW5Gb3IgPT5cbiAgICAgIGdldEluamVjdGlvblRva2VuMjx7XG4gICAgICAgIHNpbmdsZUZhY3Rvcnk6IEhvdGJhckl0ZW1Db21wb25lbnRGYWN0b3J5O1xuICAgICAgICBtYXliZUZhY3Rvcnk6IE1heWJlUmVzdWx0RmFjdG9yeTxIb3RiYXJJdGVtQ29tcG9uZW50RmFjdG9yeT47XG4gICAgICB9Pih7XG4gICAgICAgIGlkOiBgaG90YmFyLWl0ZW0tY29tcG9uZW50LSR7Z2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBzY29wZUlkcyl9YCxcbiAgICAgICAgc3BlY2lhbGl0eTogZ2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBzY29wZUlkcyksXG4gICAgICAgIGNhcmRpbmFsaXR5OiBcInplcm8tb3Itb25lXCIsXG4gICAgICB9KSgpLFxuICApO1xuXG4vKipcbiAqIEhvdyB0aGUgaG90YmFyIHJlbmRlcnMgYW4gaXRlbTogdGhlIGNvbXBvbmVudCByZWdpc3RlcmVkIGZvciB0aGUgaXRlbSdzIGtpbmQsIHZpYVxuICogYC5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKWAuIEEga2luZCB3aXRoIG5vIGNvbXBvbmVudCBpcyB1bmtub3duIHRvIHRoZSBob3RiYXIsIGFuZCBpdHMgaXRlbXNcbiAqIHJlbmRlciBhcyB1bmF2YWlsYWJsZS5cbiAqXG4gKiBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgIHJlZ2lzdGVycyB0aGlzIGZvciBhIGtpbmQ7IHByZWZlciBpdCBvdmVyIGJpbmRpbmdcbiAqIHRvIHRoZSB0b2tlbiBieSBoYW5kLCBzaW5jZSBpdCBhbHNvIHdpcmVzIHRoZSBwZXJzaXN0ZWQgZGF0YSBhbmQgdGhlIGFkZGVyLlxuICovXG5leHBvcnQgY29uc3QgaG90YmFySXRlbUNvbXBvbmVudEluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogSG90YmFySXRlbUNvbXBvbmVudEZhY3Rvcnk7XG4gIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTxIb3RiYXJJdGVtQ29tcG9uZW50RmFjdG9yeT47XG59Pih7XG4gIGlkOiBcImhvdGJhci1pdGVtLWNvbXBvbmVudFwiLFxuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbn0pKGhvdGJhckl0ZW1Db21wb25lbnRUb2tlbkZvcktpbmQpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuQ29tcG9uZW50MiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlLXJlYWN0XCI7XG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgSG90YmFySXRlbSB9IGZyb20gXCIuL2hvdGJhci1pdGVtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG90YmFySXRlbUZyYW1lUHJvcHMge1xuICByZWFkb25seSBpdGVtOiBIb3RiYXJJdGVtO1xuICByZWFkb25seSBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbn1cblxuLyoqXG4gKiBXaGF0IGV2ZXJ5IGhvdGJhciBpdGVtIHNpdHMgaW46IHRoZSBzbG90J3MgY2hyb21lLCBwbHVzIHRoZSBpdGVtJ3MgcmlnaHQtY2xpY2sgbWVudSxcbiAqIHdoaWNoIGlzIHdoZXJlIHRoZSBob3RiYXIgb2ZmZXJzIHRvIHJlbW92ZSB0aGUgaXRlbS4gV2hhdGV2ZXIgaXMgcmVuZGVyZWQgaW5zaWRlIGRlY2lkZXNcbiAqIHdoYXQgY2xpY2tpbmcgdGhlIGl0ZW0gZG9lcy5cbiAqXG4gKiBJbXBsZW1lbnRlZCBieSB0aGUgaG90YmFyLiBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgIHdyYXBzIGEga2luZCdzIGNvbXBvbmVudFxuICogaW4gaXQsIHNvIGEga2luZCBuZWVkcyB0byByZW5kZXIgb25seSBpdHMgb3duIGNvbnRlbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBIb3RiYXJJdGVtRnJhbWUgPSBnZXRJbmplY3Rpb25Ub2tlbkNvbXBvbmVudDI8UmVhY3QuQ29tcG9uZW50VHlwZTxIb3RiYXJJdGVtRnJhbWVQcm9wcz4+KHtcbiAgaWQ6IFwiaG90YmFyLWl0ZW0tZnJhbWVcIixcbn0pKCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgSUNvbXB1dGVkVmFsdWUgfSBmcm9tIFwibW9ieFwiO1xuaW1wb3J0IHR5cGUgeyBIb3RiYXJJdGVtSWQgfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1pZFwiO1xuaW1wb3J0IHR5cGUgeyBIb3RiYXJJdGVtS2luZElkIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0ta2luZFwiO1xuXG4vKipcbiAqIFRoZSBwZXJzaXN0ZWQgZGF0YSBvZiBvbmUgaXRlbSwgd3JhcHBlZCBzbyB0aGF0IFwibm8gZGF0YSBwZXJzaXN0ZWRcIiBhbmQgXCJwZXJzaXN0ZWRcbiAqIGB1bmRlZmluZWRgXCIgKGEga2luZCB3aXRob3V0IGRhdGEpIHN0YXkgZGlzdGluZ3Vpc2hhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhRW50cnk8UGVyc2lzdGVkRGF0YSA9IHVua25vd24+IHtcbiAgcmVhZG9ubHkgcGVyc2lzdGVkRGF0YTogUGVyc2lzdGVkRGF0YTtcbn1cblxuLyoqXG4gKiBUaGUgcGVyc2lzdGVkIGRhdGEgb2YgZXZlcnkgaXRlbSBvZiBvbmUga2luZCwga2V5ZWQgYnkgaXRlbSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YVN0b3JlPFBlcnNpc3RlZERhdGEgPSB1bmtub3duPiB7XG4gIC8qKiBUaGUgaXRlbSdzIGVudHJ5LCBgdW5kZWZpbmVkYCB1bnRpbCB0aGUgc3RvcmUgaGFzIGxvYWRlZCBhbmQgd2hpbGUgdGhlIGl0ZW0gaGFzIG5vbmUuICovXG4gIHJlYWRvbmx5IGdldDogKGlkOiBIb3RiYXJJdGVtSWQpID0+IElDb21wdXRlZFZhbHVlPEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhRW50cnk8UGVyc2lzdGVkRGF0YT4gfCB1bmRlZmluZWQ+O1xuICAvKiogUGVyc2lzdHMgdGhlIGl0ZW0ncyBkYXRhLCByZXNvbHZpbmcgb25jZSB0aGUgc3RvcmUgaGFzIGxvYWRlZCBhbmQgdGFrZW4gaXQuICovXG4gIHJlYWRvbmx5IHNldDogKGlkOiBIb3RiYXJJdGVtSWQsIHBlcnNpc3RlZERhdGE6IFBlcnNpc3RlZERhdGEpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKiBXaGF0IHtAbGluayBob3RiYXJJdGVtUGVyc2lzdGVkRGF0YUluamVjdGlvblRva2VufSB5aWVsZHM6IHRoZSBzdG9yZSBvZiBvbmUga2luZCwgYnkgdGhlIGtpbmQncyBpZC4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhU3RvcmVGb3IgPSAoa2luZElkOiBIb3RiYXJJdGVtS2luZElkPGFueT4pID0+IEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhU3RvcmU7XG5cbi8qKlxuICogV2hlcmUgdGhlIGhvdGJhciBrZWVwcyB0aGUgcGVyc2lzdGVkIGRhdGEgb2YgaXRlbXMsIG9uZSBzdG9yZSBwZXIga2luZC4gVGhlIGRhdGEgaXNcbiAqIHR5cGVkIGJ5IHRoZSBraW5kLCB3aGljaCBpcyB3aHkgdGhlIHN0b3JlIGl0c2VsZiBpcyB1bnR5cGVkOiBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgXG4gKiBiaW5kcyB0aGUgdHlwZSBvbiBib3RoIHRoZSB3YXkgaW4gKHRoZSBhZGRlcikgYW5kIHRoZSB3YXkgb3V0ICh0aGUgY29tcG9uZW50KSwgc28gYSBraW5kXG4gKiBuZXZlciB0b3VjaGVzIHRoaXMgZGlyZWN0bHkuXG4gKlxuICogSW1wbGVtZW50ZWQgYnkgdGhlIGhvdGJhci5cbiAqL1xuZXhwb3J0IGNvbnN0IGhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiBIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YVN0b3JlRm9yO1xufT4oe1xuICBpZDogXCJob3RiYXItaXRlbS1wZXJzaXN0ZWQtZGF0YVwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgSG90YmFySXRlbSB9IGZyb20gXCIuL2hvdGJhci1pdGVtXCI7XG5cbi8qKlxuICogUHV0cyBhbiBpdGVtIGludG8gdGhlIGZpcnN0IGZyZWUgc2xvdCBvZiB0aGUgY3VycmVudCBob3RiYXIgcGFnZS4gVGVsbHMgdGhlIHVzZXIgd2hlblxuICogdGhlcmUgaXMgbm9uZSwgb3Igd2hlbiB0aGUgaXRlbSdzIGtpbmQgaXMgdW5rbm93biwgaW5zdGVhZCBvZiB0aHJvd2luZy5cbiAqL1xuZXhwb3J0IHR5cGUgSW5zZXJ0SG90YmFySXRlbSA9IChpdGVtOiBIb3RiYXJJdGVtKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4vKipcbiAqIFRoZSBob3RiYXIncyBvd24gaW5zZXJ0aW9uOiBpZCBhbmQga2luZCBvbmx5LCBubyBwZXJzaXN0ZWQgZGF0YS4gVGhlIHR5cGVkIGFkZGVyIGEga2luZFxuICogZ2V0cyBmcm9tIGBhZGRUb0hvdGJhckluamVjdGlvblRva2VuLmZvcihraW5kKWAgcGVyc2lzdHMgdGhlIGRhdGEgZmlyc3QgYW5kIHRoZW4gY29tZXNcbiAqIGhlcmUsIHNvIHJlYWNoIGZvciB0aGF0IG9uZSBpbnN0ZWFkLlxuICpcbiAqIEltcGxlbWVudGVkIGJ5IHRoZSBob3RiYXIuXG4gKi9cbmV4cG9ydCBjb25zdCBpbnNlcnRIb3RiYXJJdGVtSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiAoKSA9PiBJbnNlcnRIb3RiYXJJdGVtIH0+KHtcbiAgaWQ6IFwiaW5zZXJ0LWhvdGJhci1pdGVtXCIsXG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxufSkoKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIsIHR5cGUgTWFueUZhY3RvcnksIHR5cGUgU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBJQ29tcHV0ZWRWYWx1ZSB9IGZyb20gXCJtb2J4XCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW1JZCB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWlkXCI7XG5pbXBvcnQgeyBnZXRIb3RiYXJJdGVtS2luZElkLCB0eXBlIEhvdGJhckl0ZW1LaW5kIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0ta2luZFwiO1xuXG4vKiogV2hldGhlciB0aGUgaXRlbSBvZiB0aGUga2luZCB3aXRoIHRoZSBpZCBpcyBvbiB0aGUgY3VycmVudCBob3RiYXIgcGFnZSwgYXMgb2Ygbm93LiAqL1xuZXhwb3J0IHR5cGUgSXNJbkhvdGJhciA9IChpZDogSG90YmFySXRlbUlkKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHM6IGV4YWN0bHkgb25lIG1lbWJlcnNoaXAgcXVlcnkgcGVyIGtpbmQgcGVyIHNjb3BlLiAqL1xuZXhwb3J0IHR5cGUgSXNJbkhvdGJhclRva2VuRm9yID0gU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBJc0luSG90YmFyO1xuICBzcGVjaWZpY1Rva2VuRmFjdG9yeTogdW5kZWZpbmVkO1xuICBjYXJkaW5hbGl0eTogXCJvbmVcIjtcbn0+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKWAgeWllbGRzOiB0aGUga2luZCdzIG1lbWJlcnNoaXAgcXVlcmllcywgb25lIHBlciBzY29wZSwgcmVhY2hlZCB3aXRoIGAuZm9yKHNjb3BlSWRzKWAuICovXG5leHBvcnQgdHlwZSBJc0luSG90YmFyVG9rZW5Gb3JLaW5kID0gU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBJc0luSG90YmFyO1xuICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8KCkgPT4gSXNJbkhvdGJhcj47XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiAoc2NvcGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiBJc0luSG90YmFyVG9rZW5Gb3I7XG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiO1xufT47XG5cbmNvbnN0IGlzSW5Ib3RiYXJUb2tlbkZvcktpbmQgPSAoa2luZDogSG90YmFySXRlbUtpbmQ8YW55Pik6IElzSW5Ib3RiYXJUb2tlbkZvcktpbmQgPT5cbiAgZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogKCkgPT4gSXNJbkhvdGJhcjsgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PCgpID0+IElzSW5Ib3RiYXI+IH0+KHtcbiAgICBpZDogYGlzLWluLWhvdGJhci0ke2tpbmR9YCxcbiAgICBzcGVjaWFsaXR5OiBraW5kLFxuICAgIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxuICB9KShcbiAgICAoc2NvcGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogSXNJbkhvdGJhclRva2VuRm9yID0+XG4gICAgICBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiAoKSA9PiBJc0luSG90YmFyIH0+KHtcbiAgICAgICAgaWQ6IGBpcy1pbi1ob3RiYXItJHtnZXRIb3RiYXJJdGVtS2luZElkKGtpbmQsIHNjb3BlSWRzKX1gLFxuICAgICAgICBzcGVjaWFsaXR5OiBnZXRIb3RiYXJJdGVtS2luZElkKGtpbmQsIHNjb3BlSWRzKSxcbiAgICAgICAgY2FyZGluYWxpdHk6IFwib25lXCIsXG4gICAgICB9KSgpLFxuICApO1xuXG4vKipcbiAqIFdoZXRoZXIgYW4gaXRlbSBpcyBpbiB0aGUgaG90YmFyLCBhc2tlZCBvbmNlOiBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHMgdGhlIHF1ZXJ5XG4gKiBvZiB0aGF0IGtpbmQgYXMgcmVnaXN0ZXJlZCB1bmRlciB0aG9zZSBzY29wZXMsIHdoaWNoIHRha2VzIHRoZSBpZC4gQW4gaXRlbSBpcyBpZGVudGlmaWVkIGJ5XG4gKiBpdHMga2luZCBhbmQgdGhlbiBpdHMgaWQsIG5ldmVyIGJ5IHRoZSBpZCBhbG9uZSwgc28gdHdvIGtpbmRzIHVzaW5nIHRoZSBzYW1lIGlkIG5ldmVyIGFuc3dlclxuICogZm9yIGVhY2ggb3RoZXI7IHRoZSBzY29wZXMgY29tZSBmcm9tIHRoZSBgZGkuc2NvcGVJZHNgIG9mIHRoZSBpbmplY3RhYmxlIGFza2luZy4gRm9yXG4gKiBkZWNpZGluZyBpbiBhIGhhbmRsZXIsIHNheSB3aGV0aGVyIGEgY2xpY2sgc2hvdWxkIGFkZCB0aGUgaXRlbSBvciByZW1vdmUgaXQuXG4gKlxuICogQSBwcm9taXNlIHJhdGhlciB0aGFuIGEgYm9vbGVhbiBiZWNhdXNlIHRoZSBob3RiYXIgbG9hZHMgd2hhdCBpdCBwZXJzaXN0ZWQgbGF6aWx5OiBhc2tlZFxuICogYmVmb3JlIHRoYXQsIGEgYm9vbGVhbiBjb3VsZCBvbmx5IGJlIGEgZ3Vlc3MuIEZvciBmb2xsb3dpbmcgdGhlIGFuc3dlciBhcyBpdCBjaGFuZ2VzLCBzZWVcbiAqIHtAbGluayBpc0luSG90YmFyUmVhY3RpdmVJbmplY3Rpb25Ub2tlbn0uXG4gKlxuICogUmVnaXN0ZXJlZCBieSBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgLCBzbyBldmVyeSByZWdpc3RlcmVkIGtpbmQgaGFzIG9uZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGlzQm9va21hcmtJbkhvdGJhciA9IGRpLmluamVjdChpc0luSG90YmFySW5qZWN0aW9uVG9rZW4uZm9yKGJvb2ttYXJrSG90YmFySXRlbUtpbmQpLmZvcihkaS5zY29wZUlkcykpKCk7XG4gKlxuICogaWYgKGF3YWl0IGlzQm9va21hcmtJbkhvdGJhcihpZCkpIHtcbiAqICAgYXdhaXQgcmVtb3ZlQm9va21hcmtGcm9tSG90YmFyKGlkKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGF3YWl0IGFkZEJvb2ttYXJrVG9Ib3RiYXIoeyBpZCwgcGVyc2lzdGVkRGF0YTogeyB1cmwgfSB9KTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgaXNJbkhvdGJhckluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogKCkgPT4gSXNJbkhvdGJhcjtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PCgpID0+IElzSW5Ib3RiYXI+O1xufT4oe1xuICBpZDogXCJpcy1pbi1ob3RiYXJcIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG59KShpc0luSG90YmFyVG9rZW5Gb3JLaW5kKTtcblxuLyoqIFdoZXRoZXIgdGhlIGl0ZW0gb2YgdGhlIGtpbmQgd2l0aCB0aGUgaWQgaXMgb24gdGhlIGN1cnJlbnQgaG90YmFyIHBhZ2UsIHJlYWN0aXZlbHkuICovXG5leHBvcnQgdHlwZSBJc0luSG90YmFyUmVhY3RpdmUgPSAoaWQ6IEhvdGJhckl0ZW1JZCkgPT4gSUNvbXB1dGVkVmFsdWU8Ym9vbGVhbj47XG5cbi8qKiBXaGF0IGAuZm9yKGtpbmQpLmZvcihzY29wZUlkcylgIHlpZWxkczogZXhhY3RseSBvbmUgcmVhY3RpdmUgbWVtYmVyc2hpcCBxdWVyeSBwZXIga2luZCBwZXIgc2NvcGUuICovXG5leHBvcnQgdHlwZSBJc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvciA9IFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogSXNJbkhvdGJhclJlYWN0aXZlO1xuICBzcGVjaWZpY1Rva2VuRmFjdG9yeTogdW5kZWZpbmVkO1xuICBjYXJkaW5hbGl0eTogXCJvbmVcIjtcbn0+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKWAgeWllbGRzOiB0aGUga2luZCdzIHJlYWN0aXZlIG1lbWJlcnNoaXAgcXVlcmllcywgb25lIHBlciBzY29wZSwgcmVhY2hlZCB3aXRoIGAuZm9yKHNjb3BlSWRzKWAuICovXG5leHBvcnQgdHlwZSBJc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvcktpbmQgPSBTcGVjaWZpY0luamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6IElzSW5Ib3RiYXJSZWFjdGl2ZTtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PElzSW5Ib3RiYXJSZWFjdGl2ZT47XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiAoc2NvcGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiBJc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvcjtcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCI7XG59PjtcblxuY29uc3QgaXNJbkhvdGJhclJlYWN0aXZlVG9rZW5Gb3JLaW5kID0gKGtpbmQ6IEhvdGJhckl0ZW1LaW5kPGFueT4pOiBJc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvcktpbmQgPT5cbiAgZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogSXNJbkhvdGJhclJlYWN0aXZlOyBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8SXNJbkhvdGJhclJlYWN0aXZlPiB9Pih7XG4gICAgaWQ6IGBpcy1pbi1ob3RiYXItcmVhY3RpdmUtJHtraW5kfWAsXG4gICAgc3BlY2lhbGl0eToga2luZCxcbiAgICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbiAgfSkoXG4gICAgKHNjb3BlSWRzOiByZWFkb25seSBzdHJpbmdbXSk6IElzSW5Ib3RiYXJSZWFjdGl2ZVRva2VuRm9yID0+XG4gICAgICBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBJc0luSG90YmFyUmVhY3RpdmUgfT4oe1xuICAgICAgICBpZDogYGlzLWluLWhvdGJhci1yZWFjdGl2ZS0ke2dldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpfWAsXG4gICAgICAgIHNwZWNpYWxpdHk6IGdldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpLFxuICAgICAgICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbiAgICAgIH0pKCksXG4gICk7XG5cbi8qKlxuICogV2hldGhlciBhbiBpdGVtIGlzIGluIHRoZSBob3RiYXIsIGFzIGEgTW9iWCBjb21wdXRlZDogYC5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKWAgeWllbGRzIHRoZVxuICogcXVlcnkgb2YgdGhhdCBraW5kIGFzIHJlZ2lzdGVyZWQgdW5kZXIgdGhvc2Ugc2NvcGVzLCB3aGljaCB0YWtlcyB0aGUgaWQuIFJlYWQgaXQgdW5kZXIgYW5cbiAqIG9ic2VydmVyIChvciBhIHJlYWN0aW9uKSB0byBmb2xsb3cgdGhlIHVzZXIgcGlubmluZyBhbmQgdW5waW5uaW5nLiBgZmFsc2VgIHVudGlsIHRoZSBob3RiYXJcbiAqIGhhcyBsb2FkZWQgd2hhdCBpdCBwZXJzaXN0ZWQuIEZvciBhIG9uZS1vZmYgYW5zd2VyLCBzZWUge0BsaW5rIGlzSW5Ib3RiYXJJbmplY3Rpb25Ub2tlbn0uXG4gKlxuICogUmVnaXN0ZXJlZCBieSBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgLCBzbyBldmVyeSByZWdpc3RlcmVkIGtpbmQgaGFzIG9uZS4gQVxuICogY29tcG9uZW50IGhhcyBubyBzY29wZSBvZiBpdHMgb3duLCBzbyBpdCB0YWtlcyB0aGUgcXVlcnkgZnJvbSBhbiBpbmplY3RhYmxlIHRoYXQgcmVhY2hlZCBpdFxuICogd2l0aCBpdHMgYGRpLnNjb3BlSWRzYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCBQaW5TdGF0ZSA9IG9ic2VydmVyKCh7IHVybCB9OiB7IHVybDogc3RyaW5nIH0pID0+IHtcbiAqICAgY29uc3QgaXNJbkhvdGJhciA9IHVzZUluamVjdChpc0Jvb2ttYXJrSW5Ib3RiYXJSZWFjdGl2ZUluamVjdGFibGUpKGlkT2YodXJsKSkuZ2V0KCk7XG4gKlxuICogICByZXR1cm4gPHNwYW4+e2lzSW5Ib3RiYXIgPyBcIlBpbm5lZFwiIDogXCJOb3QgcGlubmVkXCJ9PC9zcGFuPjtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBpc0luSG90YmFyUmVhY3RpdmVJbmplY3Rpb25Ub2tlbiA9IGdldEluamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6IElzSW5Ib3RiYXJSZWFjdGl2ZTtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PElzSW5Ib3RiYXJSZWFjdGl2ZT47XG59Pih7XG4gIGlkOiBcImlzLWluLWhvdGJhci1yZWFjdGl2ZVwiLFxuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbn0pKGlzSW5Ib3RiYXJSZWFjdGl2ZVRva2VuRm9yS2luZCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yLCB0eXBlIE1hbnlGYWN0b3J5LCB0eXBlIFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgSG90YmFySXRlbUlkIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0taWRcIjtcbmltcG9ydCB7IGdldEhvdGJhckl0ZW1LaW5kSWQsIHR5cGUgSG90YmFySXRlbUtpbmQgfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1raW5kXCI7XG5pbXBvcnQgdHlwZSB7IGlzSW5Ib3RiYXJJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2lzLWluLWhvdGJhclwiO1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGl0ZW0gb2YgdGhlIGtpbmQgd2l0aCB0aGUgaWQgZnJvbSB0aGUgY3VycmVudCBob3RiYXIgcGFnZS4gVGhyb3dzIHdoZW4gbm9cbiAqIHN1Y2ggaXRlbSBpcyB0aGVyZS5cbiAqL1xuZXhwb3J0IHR5cGUgUmVtb3ZlRnJvbUhvdGJhciA9IChpZDogSG90YmFySXRlbUlkKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHM6IGV4YWN0bHkgb25lIHJlbW92ZXIgcGVyIGtpbmQgcGVyIHNjb3BlLiAqL1xuZXhwb3J0IHR5cGUgUmVtb3ZlRnJvbUhvdGJhclRva2VuRm9yID0gU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBSZW1vdmVGcm9tSG90YmFyO1xuICBzcGVjaWZpY1Rva2VuRmFjdG9yeTogdW5kZWZpbmVkO1xuICBjYXJkaW5hbGl0eTogXCJvbmVcIjtcbn0+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKWAgeWllbGRzOiB0aGUga2luZCdzIHJlbW92ZXJzLCBvbmUgcGVyIHNjb3BlLCByZWFjaGVkIHdpdGggYC5mb3Ioc2NvcGVJZHMpYC4gKi9cbmV4cG9ydCB0eXBlIFJlbW92ZUZyb21Ib3RiYXJUb2tlbkZvcktpbmQgPSBTcGVjaWZpY0luamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6ICgpID0+IFJlbW92ZUZyb21Ib3RiYXI7XG4gIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTwoKSA9PiBSZW1vdmVGcm9tSG90YmFyPjtcbiAgc3BlY2lmaWNUb2tlbkZhY3Rvcnk6IChzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10pID0+IFJlbW92ZUZyb21Ib3RiYXJUb2tlbkZvcjtcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCI7XG59PjtcblxuY29uc3QgcmVtb3ZlRnJvbUhvdGJhclRva2VuRm9yS2luZCA9IChraW5kOiBIb3RiYXJJdGVtS2luZDxhbnk+KTogUmVtb3ZlRnJvbUhvdGJhclRva2VuRm9yS2luZCA9PlxuICBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiAoKSA9PiBSZW1vdmVGcm9tSG90YmFyOyBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8KCkgPT4gUmVtb3ZlRnJvbUhvdGJhcj4gfT4oe1xuICAgIGlkOiBgcmVtb3ZlLWZyb20taG90YmFyLSR7a2luZH1gLFxuICAgIHNwZWNpYWxpdHk6IGtpbmQsXG4gICAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG4gIH0pKFxuICAgIChzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10pOiBSZW1vdmVGcm9tSG90YmFyVG9rZW5Gb3IgPT5cbiAgICAgIGdldEluamVjdGlvblRva2VuMjx7IHNpbmdsZUZhY3Rvcnk6ICgpID0+IFJlbW92ZUZyb21Ib3RiYXIgfT4oe1xuICAgICAgICBpZDogYHJlbW92ZS1mcm9tLWhvdGJhci0ke2dldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpfWAsXG4gICAgICAgIHNwZWNpYWxpdHk6IGdldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpLFxuICAgICAgICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbiAgICAgIH0pKCksXG4gICk7XG5cbi8qKlxuICogUmVtb3ZlIGFuIGl0ZW0gZnJvbSB0aGUgaG90YmFyOiBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHMgdGhlIHJlbW92ZXIgb2YgdGhhdCBraW5kXG4gKiBhcyByZWdpc3RlcmVkIHVuZGVyIHRob3NlIHNjb3Blcywgd2hpY2ggdGFrZXMgdGhlIGlkLiBBbiBpdGVtIGlzIGlkZW50aWZpZWQgYnkgaXRzIGtpbmQgYW5kXG4gKiB0aGVuIGl0cyBpZCwgc28gcmVtb3Zpbmcgb25lIGtpbmQncyBpdGVtIGxlYXZlcyBhbm90aGVyIGtpbmQncyBpdGVtIHdpdGggdGhlIHNhbWUgaWQgYWxvbmUuXG4gKiBUaGUgcGVyc2lzdGVkIGRhdGEgb2YgdGhlIGl0ZW0gaXMgbGVmdCBpbiBwbGFjZSwgc28gYWRkaW5nIHRoZSBzYW1lIGlkIGJhY2sgZmluZHMgaXQgYWdhaW4uXG4gKiBUaGUgc2NvcGVzIGNvbWUgZnJvbSB0aGUgYGRpLnNjb3BlSWRzYCBvZiB0aGUgaW5qZWN0YWJsZSBhc2tpbmcuXG4gKlxuICogVGhyb3dzIHdoZW4gbm8gaXRlbSBvZiB0aGUga2luZCB3aXRoIHRoZSBpZCBpcyBvbiB0aGUgY3VycmVudCBwYWdlOiByZW1vdmluZyBpcyBzb21ldGhpbmdcbiAqIGRvbmUgdG8gYW4gaXRlbSBrbm93biB0byBiZSB0aGVyZSwgc28gYSB0b2dnbGUgYXNrcyB7QGxpbmsgaXNJbkhvdGJhckluamVjdGlvblRva2VufSBmaXJzdC5cbiAqXG4gKiBSZWdpc3RlcmVkIGJ5IGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGAsIHNvIGV2ZXJ5IHJlZ2lzdGVyZWQga2luZCBoYXMgb25lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgcmVtb3ZlQm9va21hcmtGcm9tSG90YmFyID0gZGkuaW5qZWN0KHJlbW92ZUZyb21Ib3RiYXJJbmplY3Rpb25Ub2tlbi5mb3IoYm9va21hcmtIb3RiYXJJdGVtS2luZCkuZm9yKGRpLnNjb3BlSWRzKSkoKTtcbiAqXG4gKiBhd2FpdCByZW1vdmVCb29rbWFya0Zyb21Ib3RiYXIoYG15LWV4dGVuc2lvbi1ib29rbWFyaygke3VybH0pYCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUZyb21Ib3RiYXJJbmplY3Rpb25Ub2tlbiA9IGdldEluamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6ICgpID0+IFJlbW92ZUZyb21Ib3RiYXI7XG4gIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTwoKSA9PiBSZW1vdmVGcm9tSG90YmFyPjtcbn0+KHtcbiAgaWQ6IFwicmVtb3ZlLWZyb20taG90YmFyXCIsXG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxufSkocmVtb3ZlRnJvbUhvdGJhclRva2VuRm9yS2luZCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yLCB0eXBlIE1hbnlGYWN0b3J5LCB0eXBlIFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgTWVudUl0ZW0gfSBmcm9tIFwiQGs4c2xlbnMvZHJvcC1kb3duLW1lbnUtY29udHJhY3RzXCI7XG5pbXBvcnQgdHlwZSB7IE1heWJlUHJvbWlzZSB9IGZyb20gXCJAazhzbGVucy9wdWJsaWMtdXRpbGl0aWVzXCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW1JZCB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWlkXCI7XG5pbXBvcnQgeyBnZXRIb3RiYXJJdGVtS2luZElkLCB0eXBlIEhvdGJhckl0ZW1LaW5kIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0ta2luZFwiO1xuXG4vKiogUHJvZHVjZXMgdGhlIG1lbnUgaXRlbSBmb3Igb25lIGhvdGJhciBpdGVtLCBwb3NzaWJseSBsYXRlci4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Gb3IgPSAoaWQ6IEhvdGJhckl0ZW1JZCkgPT4gTWF5YmVQcm9taXNlPE1lbnVJdGVtPjtcblxuLyoqIFdoYXQgYC5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKWAgeWllbGRzOiB0aGUgbWVudSBpdGVtcyBjb250cmlidXRlZCB0byBvbmUga2luZCBhcyByZWdpc3RlcmVkIHVuZGVyIHRob3NlIHNjb3Blcy4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Ub2tlbkZvciA9IFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogSG90YmFySXRlbUNvbnRleHRNZW51SXRlbUZvcjtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Gb3I+O1xuICBzcGVjaWZpY1Rva2VuRmFjdG9yeTogdW5kZWZpbmVkO1xuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIjtcbn0+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKWAgeWllbGRzOiB0aGUga2luZCdzIG1lbnUgaXRlbXMsIHBlciBzY29wZSwgcmVhY2hlZCB3aXRoIGAuZm9yKHNjb3BlSWRzKWAuICovXG5leHBvcnQgdHlwZSBIb3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtVG9rZW5Gb3JLaW5kID0gU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiBIb3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtRm9yO1xuICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8SG90YmFySXRlbUNvbnRleHRNZW51SXRlbUZvcj47XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiAoc2NvcGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiBIb3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtVG9rZW5Gb3I7XG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiO1xufT47XG5cbi8qKlxuICogVGhlIHJpZ2h0LWNsaWNrIG1lbnUgb2YgYSBob3RiYXIgaXRlbTogb25lIGVudHJ5IHBlciBjb250cmlidXRpb24sIHJlZ2lzdGVyZWQgYWdhaW5zdCB0aGVcbiAqIGl0ZW0ncyBraW5kIHZpYSBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYC4gVGhlIHNjb3BlcyBhcmUgdGhvc2Ugb2YgdGhlIHJlZ2lzdHJhdGlvbiwgc28gdGhlXG4gKiBgaW5qZWN0aW9uVG9rZW5gIGlzIGdpdmVuIGFzIGEgZnVuY3Rpb24gb2YgdGhlbS4gVGhlIGhvdGJhciBjb250cmlidXRlcyB0aGUgd2F5IHRvIHJlbW92ZVxuICogdGhlIGl0ZW0gdG8gZXZlcnkga2luZCBpdHNlbGYuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBleHBvcnQgY29uc3Qgb3BlbkJvb2ttYXJrSW5Ccm93c2VySW5qZWN0YWJsZSA9IGdldEluamVjdGFibGUyKHtcbiAqICAgaWQ6IFwib3Blbi1ib29rbWFyay1pbi1icm93c2VyXCIsXG4gKiAgIGluc3RhbnRpYXRlOiAoKSA9PiAoaWQpOiBNZW51SXRlbSA9PiAoe1xuICogICAgIGlkOiBcIm9wZW4taW4tYnJvd3NlclwiLFxuICogICAgIGtpbmQ6IFwiYWN0aW9uXCIsXG4gKiAgICAgbGFiZWxUZXh0OiBcIk9wZW4gaW4gYnJvd3NlclwiLFxuICogICAgIG9uQ2xpY2s6ICgpID0+IG9wZW5JbkJyb3dzZXIodXJsT2YoaWQpKSxcbiAqICAgICBvcmRlck51bWJlcjogMTAsXG4gKiAgICAgcGFyZW50SWQ6IHVuZGVmaW5lZCxcbiAqICAgfSksXG4gKiAgIGluamVjdGlvblRva2VuOiAoeyBzY29wZUlkcyB9KSA9PiBob3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtSW5qZWN0aW9uVG9rZW4uZm9yKGJvb2ttYXJrSG90YmFySXRlbUtpbmQpLmZvcihzY29wZUlkcyksXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgaG90YmFySXRlbUNvbnRleHRNZW51SXRlbUluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogSG90YmFySXRlbUNvbnRleHRNZW51SXRlbUZvcjtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Gb3I+O1xufT4oe1xuICBpZDogXCJob3RiYXItaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiLFxuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbn0pKFxuICAoa2luZDogSG90YmFySXRlbUtpbmQ8YW55Pik6IEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Ub2tlbkZvcktpbmQgPT5cbiAgICBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICAgICAgc2luZ2xlRmFjdG9yeTogSG90YmFySXRlbUNvbnRleHRNZW51SXRlbUZvcjtcbiAgICAgIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTxIb3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtRm9yPjtcbiAgICB9Pih7XG4gICAgICBpZDogYGhvdGJhci1pdGVtLWNvbnRleHQtbWVudS1pdGVtLSR7a2luZH1gLFxuICAgICAgc3BlY2lhbGl0eToga2luZCxcbiAgICAgIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxuICAgIH0pKFxuICAgICAgKHNjb3BlSWRzOiByZWFkb25seSBzdHJpbmdbXSk6IEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Ub2tlbkZvciA9PlxuICAgICAgICBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICAgICAgICAgIHNpbmdsZUZhY3Rvcnk6IEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Gb3I7XG4gICAgICAgICAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Gb3I+O1xuICAgICAgICB9Pih7XG4gICAgICAgICAgaWQ6IGBob3RiYXItaXRlbS1jb250ZXh0LW1lbnUtaXRlbS0ke2dldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpfWAsXG4gICAgICAgICAgc3BlY2lhbGl0eTogZ2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBzY29wZUlkcyksXG4gICAgICAgICAgY2FyZGluYWxpdHk6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QSxNQUNqQyxjQUFjLENBQUMsbUNBQW1DO0FBQUEsTUFFbEQsYUFBYSxDQUFDLE9BQU87QUFDbkIsY0FBTSxTQUFTLG9CQUFvQixNQUFNLEdBQUcsUUFBUTtBQUNwRCxjQUFNLHdCQUF3QixHQUFHLE9BQU8sbUNBQW1DO0FBQzNFLGNBQU0scUJBQXlDLENBQUMsT0FBTyxzQkFBc0IsRUFBRSxJQUFJLE1BQU0sT0FBTyxDQUFDO0FBRWpHLGVBQU87QUFBQSxNQUNUO0FBQUEsTUFFQSxnQkFBZ0IsQ0FBQyxFQUFFLFNBQVMsTUFBTSxpQ0FBaUMsSUFBSSxJQUFJLEVBQUUsSUFBSSxRQUFRO0FBQUEsSUFDM0YsQ0FBQztBQUFBLElBRUQsc0JBQWtCLG9DQUFlO0FBQUEsTUFDL0IsSUFBSSxzQkFBc0IsSUFBSTtBQUFBLE1BQzlCLGNBQWMsQ0FBQyw2QkFBNkI7QUFBQSxNQUU1QyxhQUFhLENBQUMsT0FBTztBQUNuQixjQUFNLFNBQVMsb0JBQW9CLE1BQU0sR0FBRyxRQUFRO0FBQ3BELGNBQU0sa0JBQWtCLEdBQUcsT0FBTyw2QkFBNkIsRUFBRTtBQUNqRSxjQUFNLG1CQUFxQyxDQUFDLE9BQU8sZ0JBQWdCLEVBQUUsSUFBSSxNQUFNLE9BQU8sQ0FBQztBQUV2RixlQUFPLE1BQU07QUFBQSxNQUNmO0FBQUEsTUFFQSxnQkFBZ0IsQ0FBQyxFQUFFLFNBQVMsTUFBTSwrQkFBK0IsSUFBSSxJQUFJLEVBQUUsSUFBSSxRQUFRO0FBQUEsSUFDekYsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIOzs7QVVsTEEsSUFBQUMsc0JBQW1GO0FBK0M1RSxJQUFNLDhDQUEwQyx3Q0FHcEQ7QUFBQSxFQUNELElBQUk7QUFBQSxFQUNKLGFBQWE7QUFDZixDQUFDO0FBQUEsRUFDQyxDQUFDLGFBQ0Msd0NBR0c7QUFBQSxJQUNELElBQUksaUNBQWlDLElBQUk7QUFBQSxJQUN6QyxZQUFZO0FBQUEsSUFDWixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQUEsSUFDQyxDQUFDLGlCQUNDLHdDQUdHO0FBQUEsTUFDRCxJQUFJLGlDQUFpQyxvQkFBb0IsTUFBTSxRQUFRLENBQUM7QUFBQSxNQUN4RSxZQUFZLG9CQUFvQixNQUFNLFFBQVE7QUFBQSxNQUM5QyxhQUFhO0FBQUEsSUFDZixDQUFDLEVBQUU7QUFBQSxFQUNQO0FBQ0o7IiwKICAibmFtZXMiOiBbImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlX3JlYWN0IiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIl0KfQo=
@@ -0,0 +1,54 @@
1
+ import { type ManyFactory, type SpecificInjectionToken2 } from "@k8slens/injectable";
2
+ import type { HotbarItemId } from "./hotbar-item-id";
3
+ import type { HotbarItemKind, HotbarItemPersistedData } from "./hotbar-item-kind";
4
+ /**
5
+ * Adds an item of one kind to the hotbar: persists its data under its id, then puts it
6
+ * into the first free slot of the current page. Tells the user when there is no free slot.
7
+ *
8
+ * An item is identified by its kind and then its id, so the id needs to be unique only among
9
+ * items of the kind. Throws when an item of the kind with the id is already on the current
10
+ * page, leaving the hotbar and the item's persisted data as they were. A toggle asks
11
+ * {@link isInHotbarInjectionToken} first.
12
+ */
13
+ export type AddToHotbar<PersistedData> = (item: {
14
+ readonly id: HotbarItemId;
15
+ readonly persistedData: PersistedData;
16
+ }) => Promise<void>;
17
+ /** What `.for(kind).for(scopeIds)` yields: exactly one adder per kind per scope, typed by its persisted data. */
18
+ export type AddToHotbarTokenFor<PersistedData> = SpecificInjectionToken2<{
19
+ singleFactory: () => AddToHotbar<PersistedData>;
20
+ specificTokenFactory: undefined;
21
+ cardinality: "one";
22
+ }>;
23
+ /** What `.for(kind)` yields: the kind's adders, one per scope, reached with `.for(scopeIds)`. */
24
+ export type AddToHotbarTokenForKind<PersistedData> = SpecificInjectionToken2<{
25
+ singleFactory: () => AddToHotbar<PersistedData>;
26
+ manyFactory: ManyFactory<() => AddToHotbar<PersistedData>>;
27
+ specificTokenFactory: (scopeIds: readonly string[]) => AddToHotbarTokenFor<PersistedData>;
28
+ cardinality: "zero-or-many";
29
+ }>;
30
+ /**
31
+ * The `.for()` factories, annotated so a kind's own persisted data type survives both levels.
32
+ * Inference from the value alone cannot reconstruct a return type that mentions the
33
+ * specifier's own type parameter.
34
+ */
35
+ declare const addToHotbarTokenForKind: <K extends HotbarItemKind<any>>(kind: K) => AddToHotbarTokenForKind<HotbarItemPersistedData<K>>;
36
+ /**
37
+ * Add an item to the hotbar, typed by its kind: `.for(kind)` narrows to the kind, whose
38
+ * `persistedData` is what the kind was created for, and `.for(scopeIds)` to the registration
39
+ * of it, with the `di.scopeIds` of the injectable asking. Registered by
40
+ * `getHotbarItemKindInjectableBunch`, so every registered kind has one.
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * const addBookmarkToHotbar = di.inject(addToHotbarInjectionToken.for(bookmarkHotbarItemKind).for(di.scopeIds))();
45
+ *
46
+ * await addBookmarkToHotbar({ id: `bookmark(${url})`, persistedData: { url } });
47
+ * ```
48
+ */
49
+ export declare const addToHotbarInjectionToken: import("@k8slens/injectable").InjectionToken2Base<() => AddToHotbar<any>, () => AddToHotbar<any>[], "zero-or-many", () => import("@k8slens/injectable").InjectionInstanceWithMeta<AddToHotbar<any>>, () => import("@k8slens/injectable").InjectionInstanceWithMeta<AddToHotbar<any>>[]> & {
50
+ readonly __abstract: true;
51
+ for: typeof addToHotbarTokenForKind;
52
+ };
53
+ export {};
54
+ //# sourceMappingURL=add-to-hotbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-to-hotbar.d.ts","sourceRoot":"","sources":["../../src/add-to-hotbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,WAAW,EAAE,KAAK,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACzG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAIlF;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,CAAC,aAAa,IAAI,CAAC,IAAI,EAAE;IAC9C,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;CACvC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpB,iHAAiH;AACjH,MAAM,MAAM,mBAAmB,CAAC,aAAa,IAAI,uBAAuB,CAAC;IACvE,aAAa,EAAE,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;IAChD,oBAAoB,EAAE,SAAS,CAAC;IAChC,WAAW,EAAE,KAAK,CAAC;CACpB,CAAC,CAAC;AAEH,iGAAiG;AACjG,MAAM,MAAM,uBAAuB,CAAC,aAAa,IAAI,uBAAuB,CAAC;IAC3E,aAAa,EAAE,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;IAChD,WAAW,EAAE,WAAW,CAAC,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3D,oBAAoB,EAAE,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,KAAK,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAC1F,WAAW,EAAE,cAAc,CAAC;CAC7B,CAAC,CAAC;AAEH;;;;GAIG;AACH,QAAA,MAAM,uBAAuB,GAAI,CAAC,SAAS,cAAc,CAAC,GAAG,CAAC,QACtD,CAAC,KACN,uBAAuB,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAelD,CAAC;AAEJ;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,yBAAyB,0DACf,WAAW,CAAC,GAAG,CAAC;;;CAKZ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { HotbarItem } from "./hotbar-item";
2
+ /**
3
+ * Takes the item, as `{ id, kind }`, out of the current hotbar page. Throws when no such item
4
+ * is there.
5
+ */
6
+ export type EjectHotbarItem = (item: HotbarItem) => Promise<void>;
7
+ /**
8
+ * The hotbar's own removal, the counterpart of `insertHotbarItemInjectionToken`: one
9
+ * implementation for every kind, given the whole `{ id, kind }`.
10
+ * `getHotbarItemKindInjectableBunch` builds `removeFromHotbarInjectionToken.for(kind)` on it,
11
+ * so reach for that one instead.
12
+ *
13
+ * Implemented by the hotbar.
14
+ */
15
+ export declare const ejectHotbarItemInjectionToken: import("@k8slens/injectable").InjectionToken2Base<() => EjectHotbarItem, () => EjectHotbarItem[], "one", () => import("@k8slens/injectable").InjectionInstanceWithMeta<EjectHotbarItem>, () => import("@k8slens/injectable").InjectionInstanceWithMeta<EjectHotbarItem>[]> & {
16
+ readonly __abstract?: never;
17
+ };
18
+ //# sourceMappingURL=eject-hotbar-item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eject-hotbar-item.d.ts","sourceRoot":"","sources":["../../src/eject-hotbar-item.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAElE;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B,0DAA6C,eAAe;;CAGlG,CAAC"}
@@ -0,0 +1,60 @@
1
+ import type React from "react";
2
+ import { type AddToHotbar } from "./add-to-hotbar";
3
+ import type { HotbarItemId } from "./hotbar-item-id";
4
+ import { type HotbarItemKind, type HotbarItemPersistedData } from "./hotbar-item-kind";
5
+ import { type IsInHotbar, type IsInHotbarReactive } from "./is-in-hotbar";
6
+ import { type RemoveFromHotbar } from "./remove-from-hotbar";
7
+ /**
8
+ * What a kind's component receives: which item it renders, and the data that was
9
+ * persisted when the item was added. Typed by the kind.
10
+ */
11
+ export interface HotbarItemProps<K extends HotbarItemKind<any>> {
12
+ readonly id: HotbarItemId;
13
+ readonly persistedData: HotbarItemPersistedData<K>;
14
+ }
15
+ export interface HotbarItemKindBunchParams<K extends HotbarItemKind<any>> {
16
+ /** The kind being registered, from `getHotbarItemKind`. */
17
+ readonly kind: K;
18
+ /**
19
+ * Renders an item of the kind, inside the slot's frame. Receives the item's id and its
20
+ * persisted data, and decides everything else: what the item looks like, and what
21
+ * clicking it does. Must be defined at module scope.
22
+ */
23
+ readonly Component: React.ComponentType<HotbarItemProps<K>>;
24
+ }
25
+ /**
26
+ * Register a kind of hotbar item. One call declares how items of the kind render, wires
27
+ * their persisted data, and gives the kind its typed adder, `addToHotbarInjectionToken.for(kind).for(scopeIds)`,
28
+ * along with its own membership queries and remover, `isInHotbarInjectionToken.for(kind).for(scopeIds)`,
29
+ * `isInHotbarReactiveInjectionToken.for(kind).for(scopeIds)` and `removeFromHotbarInjectionToken.for(kind).for(scopeIds)`.
30
+ *
31
+ * The last `.for()` is the scope of the registration: every token here is registered under
32
+ * the scopes of whoever registers the bunch, so two extensions declaring a kind with the same
33
+ * specifier never meet. Items are identified by their kind, its scopes, and then their own
34
+ * id, never by the id alone.
35
+ *
36
+ * The hotbar frames each item, persists its `{ id, kind }` and data, pages and drags it,
37
+ * and gives its right-click menu a way to remove it. The component owns the rest.
38
+ *
39
+ * @example
40
+ * ```tsx
41
+ * export const bookmarkHotbarItemKind = getHotbarItemKind<{ url: string }>()("my-extension-bookmark");
42
+ *
43
+ * const Bookmark = ({ persistedData }: HotbarItemProps<typeof bookmarkHotbarItemKind>) => (
44
+ * <Button onClick={() => open(persistedData.url)}>{new URL(persistedData.url).host}</Button>
45
+ * );
46
+ *
47
+ * export default getHotbarItemKindInjectableBunch({
48
+ * kind: bookmarkHotbarItemKind,
49
+ * Component: Bookmark,
50
+ * });
51
+ * ```
52
+ */
53
+ export declare const getHotbarItemKindInjectableBunch: <K extends HotbarItemKind<any>>({ kind, Component, }: HotbarItemKindBunchParams<K>) => {
54
+ component: import("@k8slens/injectable-react").InjectableComponent2<import("./hotbar-item-component").HotbarItemComponent>;
55
+ addToHotbar: import("@k8slens/injectable").Injectable2<() => AddToHotbar<HotbarItemPersistedData<K>>>;
56
+ isInHotbar: import("@k8slens/injectable").Injectable2<() => IsInHotbar>;
57
+ isInHotbarReactive: import("@k8slens/injectable").Injectable2<IsInHotbarReactive>;
58
+ removeFromHotbar: import("@k8slens/injectable").Injectable2<() => RemoveFromHotbar>;
59
+ };
60
+ //# sourceMappingURL=get-hotbar-item-kind-injectable-bunch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-hotbar-item-kind-injectable-bunch.d.ts","sourceRoot":"","sources":["../../src/get-hotbar-item-kind-injectable-bunch.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,KAAK,WAAW,EAA6B,MAAM,iBAAiB,CAAC;AAK9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAuB,KAAK,cAAc,EAAE,KAAK,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAG5G,OAAO,EACL,KAAK,UAAU,EACf,KAAK,kBAAkB,EAGxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,gBAAgB,EAAkC,MAAM,sBAAsB,CAAC;AAE7F;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,cAAc,CAAC,GAAG,CAAC;IAC5D,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,yBAAyB,CAAC,CAAC,SAAS,cAAc,CAAC,GAAG,CAAC;IACtE,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,gCAAgC,GAAI,CAAC,SAAS,cAAc,CAAC,GAAG,CAAC,wBAG3E,yBAAyB,CAAC,CAAC,CAAC;;;;;;CAyG9B,CAAC"}