@hestia-earth/ui-components 0.2.12 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/bundles/hestia-earth-ui-components.umd.js +474 -473
  2. package/bundles/hestia-earth-ui-components.umd.js.map +1 -1
  3. package/common/clipboard/clipboard.component.d.ts +1 -0
  4. package/cycles/cycles-activity/cycles-activity.component.d.ts +1 -3
  5. package/cycles/cycles-activity-logs/cycles-activity-logs.component.d.ts +42 -10
  6. package/cycles/cycles-completeness/cycles-completeness.component.d.ts +1 -3
  7. package/cycles/cycles-emissions/cycles-emissions.component.d.ts +1 -3
  8. package/cycles/cycles-emissions-chart/cycles-emissions-chart.component.d.ts +1 -2
  9. package/cycles/cycles-emissions-logs/cycles-emissions-logs.component.d.ts +42 -6
  10. package/cycles/cycles-practices/cycles-practices.component.d.ts +1 -3
  11. package/cycles/cycles-practices-logs/cycles-practices-logs.component.d.ts +42 -10
  12. package/cycles/cycles-result/cycles-result.component.d.ts +1 -3
  13. package/cycles/cycles.model.d.ts +3 -4
  14. package/esm2015/common/clipboard/clipboard.component.js +5 -3
  15. package/esm2015/cycles/cycles-activity/cycles-activity.component.js +2 -8
  16. package/esm2015/cycles/cycles-activity-logs/cycles-activity-logs.component.js +11 -21
  17. package/esm2015/cycles/cycles-completeness/cycles-completeness.component.js +2 -8
  18. package/esm2015/cycles/cycles-emissions/cycles-emissions.component.js +2 -8
  19. package/esm2015/cycles/cycles-emissions-chart/cycles-emissions-chart.component.js +4 -9
  20. package/esm2015/cycles/cycles-emissions-logs/cycles-emissions-logs.component.js +12 -14
  21. package/esm2015/cycles/cycles-practices/cycles-practices.component.js +2 -8
  22. package/esm2015/cycles/cycles-practices-logs/cycles-practices-logs.component.js +10 -21
  23. package/esm2015/cycles/cycles-result/cycles-result.component.js +4 -12
  24. package/esm2015/cycles/cycles.model.js +4 -5
  25. package/esm2015/files/files-form/files-form.component.js +1 -1
  26. package/esm2015/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.js +4 -9
  27. package/esm2015/impact-assessments/impact-assessments-products/impact-assessments-products.component.js +2 -8
  28. package/esm2015/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.js +8 -12
  29. package/esm2015/node/index.js +2 -1
  30. package/esm2015/node/node-link/node-link.component.js +2 -2
  31. package/esm2015/node/node-logs-models/node-logs-models.component.js +56 -326
  32. package/esm2015/node/node-logs-models/node-logs-models.model.js +370 -0
  33. package/esm2015/node/node-missing-lookup-factors/node-missing-lookup-factors.component.js +1 -1
  34. package/esm2015/node/node-value-details/node-value-details.component.js +3 -3
  35. package/esm2015/node/node.service.js +1 -1
  36. package/esm2015/sites/sites-maps/sites-maps.component.js +3 -9
  37. package/esm2015/sites/sites-measurements/sites-measurements.component.js +2 -8
  38. package/esm2015/sites/sites-measurements-logs/sites-measurements-logs.component.js +8 -12
  39. package/fesm2015/hestia-earth-ui-components.js +339 -328
  40. package/fesm2015/hestia-earth-ui-components.js.map +1 -1
  41. package/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.d.ts +1 -2
  42. package/impact-assessments/impact-assessments-products/impact-assessments-products.component.d.ts +1 -3
  43. package/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.d.ts +37 -6
  44. package/node/index.d.ts +1 -0
  45. package/node/node-logs-models/node-logs-models.component.d.ts +24 -88
  46. package/node/node-logs-models/node-logs-models.model.d.ts +88 -0
  47. package/node/node-missing-lookup-factors/node-missing-lookup-factors.component.d.ts +2 -1
  48. package/node/node.service.d.ts +1 -31
  49. package/package.json +2 -2
  50. package/sites/sites-maps/sites-maps.component.d.ts +1 -3
  51. package/sites/sites-measurements/sites-measurements.component.d.ts +1 -3
  52. package/sites/sites-measurements-logs/sites-measurements-logs.component.d.ts +39 -6
@@ -0,0 +1,370 @@
1
+ import { __rest } from "tslib";
2
+ /* eslint-disable complexity */
3
+ import { from } from 'rxjs';
4
+ import { distinct, toArray, map } from 'rxjs/operators';
5
+ import { fileToExt, SupportedExtensions } from '@hestia-earth/api';
6
+ import { EmissionMethodTier, TermTermType, SchemaType, isTypeNode } from '@hestia-earth/schema';
7
+ import { unique, isUndefined } from '@hestia-earth/utils';
8
+ import { propertyValue } from '@hestia-earth/utils/dist/term';
9
+ const get = require('lodash.get');
10
+ const set = require('lodash.set');
11
+ const orderBy = require('lodash.orderby');
12
+ import { findConfigModels, findModels, findMatchingModel, modelParams, modelKeyParams } from '../../engine/engine.service';
13
+ const termTypes = Object.values(TermTermType);
14
+ const blankNodeTypes = Object.values(SchemaType).filter(t => !isTypeNode(t));
15
+ const schemaTypesLowerCase = Object.values(SchemaType).map(v => v.toLowerCase());
16
+ const blankNodeTypesLowerCase = blankNodeTypes.map(v => v.toLowerCase());
17
+ const missingLookupPrefix = 'Missing lookup';
18
+ const parseFilename = (filepath) => {
19
+ const [filename] = filepath.split('.');
20
+ const ext = termTypes.includes(filename) ? SupportedExtensions.xlsx : SupportedExtensions.csv;
21
+ return fileToExt(filename, ext);
22
+ };
23
+ const parseLookup = ({ column, termid, [missingLookupPrefix]: missingLookup }) => ({
24
+ filename: parseFilename(missingLookup), termId: termid, column
25
+ });
26
+ const csvValue = (value) => (value || '').replace('[', '').replace(']', '');
27
+ const parseMessage = (message) => {
28
+ try {
29
+ const data = JSON.parse(message);
30
+ return data.message.split(',').reduce((prev, parts) => {
31
+ const [key, value] = parts.split('=');
32
+ const val = csvValue(value);
33
+ return Object.assign(Object.assign({}, prev), (key && val ? { [key.trim()]: val } : {}));
34
+ }, { logger: data.logger });
35
+ }
36
+ catch (err) {
37
+ // make sure it works even if one log is malformed
38
+ return {};
39
+ }
40
+ };
41
+ const omitLogKeys = (log) => Object.fromEntries(Object.entries(log).filter(([key]) => !schemaTypesLowerCase.includes(key)));
42
+ const includeBlankNodes = (logs, log) => Object
43
+ .keys(log)
44
+ .filter(key => blankNodeTypesLowerCase.includes(key))
45
+ .reduce((prev, key) => (Object.assign(Object.assign({}, prev), { [key]: unique([
46
+ ...((typeof prev[key] === 'string' ? [prev[key]] : prev[key]) || []),
47
+ log[key]
48
+ ]) })), logs);
49
+ const groupLog = (group, _a) => {
50
+ var { logger, term, model, key, should_run, run_required, property } = _a, log = __rest(_a, ["logger", "term", "model", "key", "should_run", "run_required", "property"]);
51
+ const isOrchestrator = logger.includes('orchestrator');
52
+ const isKey = !isOrchestrator && !!key;
53
+ const parentLogKey = [`["${term}"]`, !isOrchestrator && key || property].filter(Boolean).join('.');
54
+ const logModelKey = [parentLogKey, model].filter(Boolean).join('.');
55
+ set(group, `${parentLogKey}.models`, unique([
56
+ ...get(group, `${parentLogKey}.models`, []),
57
+ model
58
+ ]));
59
+ set(group, `${parentLogKey}.isKey`, isKey);
60
+ let data = get(group, logModelKey, {});
61
+ data = includeBlankNodes(data, log);
62
+ if (typeof should_run !== 'undefined') {
63
+ const shouldRun = should_run === 'True';
64
+ data = isOrchestrator ? Object.assign(Object.assign({}, data), { shouldRunOrchestrator: shouldRun }) : Object.assign(Object.assign(Object.assign({}, data), omitLogKeys(log)), { shouldRun });
65
+ }
66
+ else if (typeof run_required !== 'undefined') {
67
+ const runRequired = run_required === 'True';
68
+ data = Object.assign(Object.assign(Object.assign({}, data), (runRequired ? {} : omitLogKeys(log))), { // no need to save logs if we need to run the model
69
+ runRequired });
70
+ }
71
+ else if ('requirements' in log) {
72
+ const { requirements } = log, logData = __rest(log, ["requirements"]);
73
+ data.requirements = Object.assign(Object.assign({}, (data.requirements || {})), logData);
74
+ }
75
+ else if (missingLookupPrefix in log) {
76
+ data.missingLookups = unique([
77
+ ...(data.missingLookups || []),
78
+ parseLookup(log)
79
+ ]);
80
+ }
81
+ else if (!isOrchestrator) {
82
+ data.logs = Object.assign(Object.assign({}, (data.logs || {})), omitLogKeys(log));
83
+ }
84
+ set(group, logModelKey, data);
85
+ return group;
86
+ };
87
+ const groupLogSubValue = (group, log, key) => {
88
+ const id = log[key];
89
+ const data = groupLog(group[id] || {}, log);
90
+ group[id] = data;
91
+ if (key === 'transformation') {
92
+ // add value to the same term/model on parent group
93
+ Object.entries(group[id]).map(([term, models]) => Object.keys(models).map(model => {
94
+ var _a;
95
+ if ((_a = group === null || group === void 0 ? void 0 : group[term]) === null || _a === void 0 ? void 0 : _a[model]) {
96
+ group[term][model][key] = unique([
97
+ ...(group[term][model][key] || []),
98
+ id
99
+ ]);
100
+ }
101
+ }));
102
+ }
103
+ return group;
104
+ };
105
+ const subValueKeys = [
106
+ 'transformation'
107
+ ];
108
+ export const groupLogsByModel = (data) => data.split('\n')
109
+ .map(parseMessage)
110
+ .filter(v => !!(v === null || v === void 0 ? void 0 : v.term) && (v === null || v === void 0 ? void 0 : v.term) !== 'None' && !!(v === null || v === void 0 ? void 0 : v.model))
111
+ .reduce((group, log) => {
112
+ const subValue = subValueKeys.find(v => !!log[v]);
113
+ return subValue ?
114
+ subValue === 'transformation' ?
115
+ // for transformation, do not add to top-level model
116
+ groupLogSubValue(group, log, subValue) :
117
+ groupLog(groupLogSubValue(group, log, subValue), log)
118
+ : groupLog(group, log);
119
+ });
120
+ export const computeTerms = (originalValues, recalculatedValues, terms, filterTermTypes) => from((terms === null || terms === void 0 ? void 0 : terms.length) ?
121
+ terms :
122
+ [
123
+ ...(originalValues || []).map(({ term }) => term),
124
+ ...(recalculatedValues || []).map(({ term }) => term)
125
+ ].filter(node => !(filterTermTypes === null || filterTermTypes === void 0 ? void 0 : filterTermTypes.length) || filterTermTypes.includes(node.termType))).pipe(distinct(v => v['@id']), toArray(), map(v => orderBy(v, ['name'], ['asc']))).toPromise();
126
+ export var LogStatus;
127
+ (function (LogStatus) {
128
+ LogStatus["success"] = "successful";
129
+ LogStatus["error"] = "failed";
130
+ LogStatus["skipHierarchy"] = "not run (model higher up hierarchy run instead)";
131
+ LogStatus["dataProvided"] = "not run (user provided data retained)";
132
+ LogStatus["notRequired"] = "not relevant";
133
+ })(LogStatus || (LogStatus = {}));
134
+ const hasLogDetails = (data, logs) => {
135
+ var _a;
136
+ return [
137
+ LogStatus.success,
138
+ LogStatus.error
139
+ ].includes(logStatus(data, logs)) && ((logs === null || logs === void 0 ? void 0 : logs.requirements) || (logs === null || logs === void 0 ? void 0 : logs.logs) || ((_a = logs === null || logs === void 0 ? void 0 : logs.missingLookups) === null || _a === void 0 ? void 0 : _a.length));
140
+ };
141
+ const logStatus = (data, logs) => hasLog(logs)
142
+ ? (!data.isRequired
143
+ ? LogStatus.notRequired
144
+ : isRunOrchestrator(logs)
145
+ ? ('shouldRun' in logs
146
+ ? logs.shouldRun
147
+ ? data.isRecalculated
148
+ ? LogStatus.success
149
+ : LogStatus.dataProvided
150
+ : LogStatus.error
151
+ : LogStatus.dataProvided)
152
+ : data.isRecalculated
153
+ ? LogStatus.skipHierarchy
154
+ : LogStatus.dataProvided)
155
+ : ([
156
+ typeof data.originalValue === 'undefined',
157
+ data.isRecalculated // is recalculated
158
+ ].every(Boolean)
159
+ ? LogStatus.skipHierarchy
160
+ : LogStatus.dataProvided);
161
+ const reduceValues = (values, termId) => {
162
+ const propertyValues = values
163
+ .map(({ value }) => propertyValue(value, termId))
164
+ // propertyValue may return null if the value is null or undefined, therefore remove them from total
165
+ .filter(v => v !== null);
166
+ return propertyValues.length ? propertyValues.reduce((p, v) => p + v, 0) : undefined;
167
+ };
168
+ const isRunOrchestrator = (log) => !('shouldRunOrchestrator' in log) || log.shouldRunOrchestrator;
169
+ const isBackground = (log) => (log === null || log === void 0 ? void 0 : log.methodTier) === EmissionMethodTier.background;
170
+ const hasLog = (log, withOrchestrator = true) => !!log && ('shouldRun' in log ||
171
+ 'runRequired' in log ||
172
+ (withOrchestrator && 'shouldRunOrchestrator' in log));
173
+ const isRecalculated = (values, key = 'value') => values.some(v => ([
174
+ ...(v.added || []),
175
+ ...(v.updated || [])
176
+ ]).includes(key));
177
+ const blankNodeValueByKey = {
178
+ property: (values, _k, id) => {
179
+ var _a;
180
+ return !!id && (values === null || values === void 0 ? void 0 : values.length)
181
+ ? ((_a = (values[0].properties || []).find(p => p.term['@id'] === id)) === null || _a === void 0 ? void 0 : _a.value) || ''
182
+ : '';
183
+ },
184
+ input: (values, _k, id) => {
185
+ var _a;
186
+ return !!id && (values === null || values === void 0 ? void 0 : values.length)
187
+ ? propertyValue((_a = values.find(({ inputs }) => (inputs || []).some(input => input['@id'] === id))) === null || _a === void 0 ? void 0 : _a.value, id)
188
+ : '';
189
+ },
190
+ default: (blankNodes, key) => {
191
+ const value = (blankNodes === null || blankNodes === void 0 ? void 0 : blankNodes.length) ? blankNodes[0][key] : null;
192
+ return ['string', 'number', 'boolean', 'undefined'].includes(typeof value)
193
+ ? isUndefined(value)
194
+ ? ''
195
+ : value
196
+ : null;
197
+ }
198
+ };
199
+ const blankNodeValue = (blankNodes, key, id) => blankNodeValueByKey[key in blankNodeValueByKey ? key : 'default'](blankNodes, key, id);
200
+ const logSubValue = (logs, key, prop) => logs[key][prop] ? (Array.isArray(logs[key][prop]) ?
201
+ logs[key][prop].map(id => ({ key: prop, id })) :
202
+ { key: prop, id: logs[key][prop] }) : undefined;
203
+ const logProperties = (nodes, models) => nodes.flatMap(node => (node.properties || []).map(({ term }) => term['@id'])).map(id => ({ key: 'property', id, configModels: findModels(models, id).map(({ model }) => model) }));
204
+ const logSubValues = (allLogs, logs, original, recalculated, models, { nodeType, type, termId }) => unique([
205
+ ...Object.keys(logs).flatMap(key => [
206
+ logSubValue(logs, key, 'input'),
207
+ logSubValue(logs, key, 'property')
208
+ ]
209
+ .flat()
210
+ .filter(Boolean)
211
+ .map(v => (Object.assign(Object.assign({}, v), { configModels: [key] })))),
212
+ ...logProperties(original, models),
213
+ ...logProperties(recalculated, models)
214
+ ])
215
+ .map(v => {
216
+ const originalValue = blankNodeValue(original, v.key, v.id);
217
+ const recalculatedValue = blankNodeValue(recalculated, v.key, v.id);
218
+ return Object.assign(Object.assign({}, v), { configModels: v.configModels.map(configModelWithDocs(models, { nodeType, type, termId }, v)), originalValue,
219
+ recalculatedValue, isRecalculated: !isUndefined(recalculatedValue) && recalculatedValue !== originalValue, isRequired: true });
220
+ })
221
+ .filter(v => v.configModels.length > 0)
222
+ .map(dataWithConfigModelLogs(allLogs));
223
+ // const hasKey = (blankNodes: blankNode[], key: string) => (blankNodes || []).some(n => key in n);
224
+ const logKeys = (logs, original, recalculated, models, { nodeType, type, termId }) => Object.keys(logs)
225
+ .filter(key => logs[key].isKey)
226
+ .map(key => ({
227
+ key,
228
+ configModels: (logs[key].models || [])
229
+ .map(configModelWithDocs(models, { nodeType, type, termId }, { key }))
230
+ // only take those we found a matching model (avoid matching key on wrong node type)
231
+ .filter(v => !!v.model),
232
+ originalValue: blankNodeValue(original, key),
233
+ recalculatedValue: blankNodeValue(recalculated, key),
234
+ isRecalculated: isRecalculated(recalculated, key),
235
+ isRequired: true
236
+ }))
237
+ .filter(v => v.configModels.length > 0)
238
+ .map(dataWithConfigModelLogs(logs));
239
+ const isBackgroundNoInput = (logs) => logs.methodTier === EmissionMethodTier.background && !logs.input;
240
+ const isModelLog = (logs) => [
241
+ !isBackgroundNoInput(logs),
242
+ !logs.isKey,
243
+ !logs.input,
244
+ !logs.property
245
+ ].every(Boolean) && [
246
+ 'shouldRun' in logs,
247
+ 'shouldRunOrchestrator' in logs,
248
+ 'runRequired' in logs
249
+ ].some(Boolean);
250
+ const modelConfigOrder = (models, termId, modelKey, model) => {
251
+ const indexes = models.map((m, index) => {
252
+ const arrayIndex = Array.isArray(m) ? modelConfigOrder(m, termId, modelKey, model) : '';
253
+ return Array.isArray(m)
254
+ ? arrayIndex
255
+ ? [index, arrayIndex].join('.')
256
+ : ''
257
+ : [termId === m.value, modelKey === m.key, model === m.model].every(Boolean)
258
+ ? `${index}`
259
+ : '';
260
+ }).filter(Boolean);
261
+ return indexes.length ? indexes[0] : '';
262
+ };
263
+ const configModelWithDocs = (models, { nodeType, type, termId }, subValue) => (methodId) => {
264
+ const node = {
265
+ '@type': nodeType,
266
+ term: { '@id': (subValue === null || subValue === void 0 ? void 0 : subValue.id) || termId },
267
+ methodModel: { '@id': methodId }
268
+ };
269
+ return {
270
+ methodId,
271
+ model: findMatchingModel(models, modelParams(node)) ||
272
+ findMatchingModel(models, modelKeyParams(node, `${subValue === null || subValue === void 0 ? void 0 : subValue.key}.${methodId}`)) ||
273
+ // handle "input.price"
274
+ findMatchingModel(models, modelKeyParams(node, `${type.toLowerCase()}.${subValue === null || subValue === void 0 ? void 0 : subValue.key}`)) ||
275
+ // handle "input.hestiaAggregatedData"
276
+ findMatchingModel(models, modelKeyParams(node, `${type.toLowerCase()}.${methodId}`))
277
+ };
278
+ };
279
+ const configModelWithLogs = (data, logs) => (model) => (Object.assign(Object.assign({}, model), { logs: logs === null || logs === void 0 ? void 0 : logs[model.methodId], status: logStatus(data, logs === null || logs === void 0 ? void 0 : logs[model.methodId]), showLogs: hasLogDetails(data, logs === null || logs === void 0 ? void 0 : logs[model.methodId]) }));
280
+ const dataWithConfigModelLogs = (logs) => (data) => {
281
+ const subLogKey = data.id || data.key ?
282
+ data.id || data.key : null;
283
+ const log = subLogKey ? logs[subLogKey] : logs;
284
+ return Object.assign(Object.assign({}, data), { configModels: data.configModels.map(model => Array.isArray(model) ? model.map(configModelWithLogs(data, log)) : configModelWithLogs(data, log)(model)) });
285
+ };
286
+ /**
287
+ * Group models running in parallel under the same array, as they should appear vertically.
288
+ *
289
+ * @param config The configuration.
290
+ * @param models The list of models
291
+ */
292
+ const groupParallelModels = (config, termId, modelKey, models) => {
293
+ const modelsWithOrder = models.map(model => ({
294
+ model,
295
+ order: modelConfigOrder(config.models, termId, modelKey, model.methodId)
296
+ }));
297
+ return modelsWithOrder
298
+ .reduce((prev, { model, order }) => {
299
+ const isArray = order.includes('.');
300
+ const arrayIndex = isArray ? order.split('.')[0] : prev.length;
301
+ prev[arrayIndex] = isArray ? [...(prev[arrayIndex] || []), model] : model;
302
+ return prev;
303
+ }, [])
304
+ .filter(Boolean)
305
+ .map(v => v.length === 1 ? v[0] : v);
306
+ };
307
+ const allParallel = (models) => models.length === 1 && Array.isArray(models[0]) && models[0].length > 1;
308
+ const valueByMethodId = (values, methodId, termId) => { var _a; return propertyValue((_a = values.find(v => { var _a; return ((_a = v.methodModel) === null || _a === void 0 ? void 0 : _a['@id']) === methodId; })) === null || _a === void 0 ? void 0 : _a.value, termId); };
309
+ const groupParallelValues = (values, models, termId) => Array.isArray(models)
310
+ ? Object.fromEntries(models.map(model => [model.methodId, valueByMethodId(values, model.methodId, termId)]))
311
+ : {};
312
+ export const groupLogsByTerm = (nodeType, logs, models, config, allOriginalValues, allRecalculatedValues, nodeKey) => {
313
+ const originalValues = (allOriginalValues || []).filter(value => !value.deleted);
314
+ const recalculatedValues = (allRecalculatedValues || []).filter(value => !value.deleted);
315
+ const type = originalValues.length ?
316
+ originalValues[0]['@type'] || originalValues[0].type :
317
+ recalculatedValues.length ?
318
+ recalculatedValues[0]['@type'] || recalculatedValues[0].type :
319
+ undefined;
320
+ return (term) => {
321
+ const termId = term['@id'];
322
+ const termLogs = get(logs, termId, {});
323
+ const original = originalValues.filter(v => termId === v.term['@id']);
324
+ const recalculated = recalculatedValues.filter(v => termId === v.term['@id']);
325
+ const hasData = !!original.length || !!recalculated.length || Object.keys(termLogs).length > 0;
326
+ const configModelsData = { nodeType, type, termId };
327
+ const configModels = groupParallelModels(config, termId, nodeKey, unique([
328
+ ...(termLogs.models || []).filter(key => isModelLog(termLogs[key])),
329
+ ...findConfigModels(config, termId, nodeKey, models).map(({ model }) => model)
330
+ ]).map(configModelWithDocs(models, configModelsData)));
331
+ const keys = logKeys(termLogs, original, recalculated, models, configModelsData);
332
+ const subValues = logSubValues(logs, termLogs, original, recalculated, models, configModelsData);
333
+ const isRequired = !Object.values(termLogs)
334
+ .filter(v => typeof v === 'object' && !Array.isArray(v))
335
+ // ignore models that were never going to run
336
+ .filter(isRunOrchestrator)
337
+ .every(v => v.runRequired === false);
338
+ return dataWithConfigModelLogs(termLogs)({
339
+ isOpen: true,
340
+ canOpen: keys.length > 0 || subValues.length > 0,
341
+ termId,
342
+ term,
343
+ type,
344
+ configModels,
345
+ original,
346
+ originalValue: reduceValues(original, termId),
347
+ recalculated,
348
+ recalculatedValue: reduceValues(recalculated, termId),
349
+ isOriginal: !!original.length,
350
+ isRecalculated: isRecalculated(recalculated),
351
+ hasData,
352
+ isRequired,
353
+ logs: termLogs,
354
+ keys,
355
+ subValues,
356
+ allParallel: allParallel(configModels),
357
+ originalValueByMethodId: groupParallelValues(original, configModels[0], termId),
358
+ recalculatedValueByMethodId: groupParallelValues(recalculated, configModels[0], termId)
359
+ });
360
+ };
361
+ };
362
+ export const modelCount = (blankNodeLogs) => Math.max.apply(Math.max, [
363
+ 0,
364
+ ...blankNodeLogs.flatMap(v => [
365
+ v.configModels.length,
366
+ ...v.subValues.map(s => { var _a, _b; return (_b = (_a = s.configModels) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0; }),
367
+ v.keys.length ? 1 : 0
368
+ ])
369
+ ]);
370
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLW1vZGVscy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtbG9ncy1tb2RlbHMvbm9kZS1sb2dzLW1vZGVscy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFDSyxrQkFBa0IsRUFDbEIsWUFBWSxFQUFZLFVBQVUsRUFBRSxVQUFVLEVBQ3pELE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNsQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUUxQyxPQUFPLEVBQzBDLGdCQUFnQixFQUFFLFVBQVUsRUFDM0UsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFDL0MsTUFBTSw2QkFBNkIsQ0FBQztBQW1DckMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUU5QyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENB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QyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztTQUN4RixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxhQUE4QixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQ3JGLENBQUM7SUFDRCxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU07UUFDckIsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFDLE9BQUEsTUFBQSxNQUFBLENBQUMsQ0FBQyxZQUFZLDBDQUFFLE1BQU0sbUNBQUksQ0FBQyxDQUFBLEVBQUEsQ0FBQztRQUNwRCxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3RCLENBQUM7Q0FDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdCwgdG9BcnJheSwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZmlsZVRvRXh0LCBTdXBwb3J0ZWRFeHRlbnNpb25zIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHtcbiAgRW1pc3Npb24sIEVtaXNzaW9uTWV0aG9kVGllciwgSVRlcm1KU09OTEQsIFByb2R1Y3QsIElucHV0IGFzIEhlc3RpYUlucHV0LFxuICBOb2RlVHlwZSwgVGVybVRlcm1UeXBlLCBQcm9wZXJ0eSwgU2NoZW1hVHlwZSwgaXNUeXBlTm9kZVxufSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyB1bmlxdWUsIGlzVW5kZWZpbmVkIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5pbXBvcnQgeyBwcm9wZXJ0eVZhbHVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscy9kaXN0L3Rlcm0nO1xuY29uc3QgZ2V0ID0gcmVxdWlyZSgnbG9kYXNoLmdldCcpO1xuY29uc3Qgc2V0ID0gcmVxdWlyZSgnbG9kYXNoLnNldCcpO1xuY29uc3Qgb3JkZXJCeSA9IHJlcXVpcmUoJ2xvZGFzaC5vcmRlcmJ5Jyk7XG5cbmltcG9ydCB7XG4gIElPcmNoZXN0cmF0b3JDb25maWcsIElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZywgZmluZENvbmZpZ01vZGVscywgZmluZE1vZGVscywgSU1vZGVsLFxuICBmaW5kTWF0Y2hpbmdNb2RlbCwgbW9kZWxQYXJhbXMsIG1vZGVsS2V5UGFyYW1zXG59IGZyb20gJy4uLy4uL2VuZ2luZS9lbmdpbmUuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGVNaXNzaW5nTG9va3VwTG9nIHtcbiAgZmlsZW5hbWU6IHN0cmluZztcbiAgdGVybUlkOiBzdHJpbmc7XG4gIGNvbHVtbjogc3RyaW5nO1xuICAvLyBhdHRyaWJ1dGVzIGxpbmtlZCB0byB0aGUgbW9kZWxzXG4gIG1vZGVsPzogc3RyaW5nO1xuICB0ZXJtPzogc3RyaW5nO1xuICBrZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGVUZXJtTG9nIHtcbiAgcnVuUmVxdWlyZWQ/OiBib29sZWFuO1xuICBzaG91bGRSdW4/OiBib29sZWFuO1xuICBzaG91bGRSdW5PcmNoZXN0cmF0b3I/OiBib29sZWFuO1xuICBtaXNzaW5nTG9va3Vwcz86IElOb2RlTWlzc2luZ0xvb2t1cExvZ1tdO1xuICByZXF1aXJlbWVudHM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICBsb2dzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICAvLyBwb3NzaWJsZSBzdWIgdmFsdWVzXG4gIGlucHV0Pzogc3RyaW5nIHwgc3RyaW5nW107XG4gIHByb3BlcnR5Pzogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGVUZXJtTG9ncyB7XG4gIFttb2RlbEtleTogc3RyaW5nXTogYW55IHwgSU5vZGVUZXJtTG9nO1xuICBtb2RlbHM6IHN0cmluZ1tdO1xuICBpc0tleTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTm9kZUxvZ3Mge1xuICBbdGVybTogc3RyaW5nXTogSU5vZGVUZXJtTG9ncztcbn1cblxuY29uc3QgdGVybVR5cGVzID0gT2JqZWN0LnZhbHVlcyhUZXJtVGVybVR5cGUpO1xuXG5jb25zdCBibGFua05vZGVUeXBlcyA9IE9iamVjdC52YWx1ZXMoU2NoZW1hVHlwZSkuZmlsdGVyKHQgPT4gIWlzVHlwZU5vZGUodCkpO1xuXG5jb25zdCBzY2hlbWFUeXBlc0xvd2VyQ2FzZSA9IE9iamVjdC52YWx1ZXMoU2NoZW1hVHlwZSkubWFwKHYgPT4gdi50b0xvd2VyQ2FzZSgpKTtcblxuY29uc3QgYmxhbmtOb2RlVHlwZXNMb3dlckNhc2UgPSBibGFua05vZGVUeXBlcy5tYXAodiA9PiB2LnRvTG93ZXJDYXNlKCkpO1xuXG5jb25zdCBtaXNzaW5nTG9va3VwUHJlZml4ID0gJ01pc3NpbmcgbG9va3VwJztcblxuY29uc3QgcGFyc2VGaWxlbmFtZSA9IChmaWxlcGF0aDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IFtmaWxlbmFtZV0gPSBmaWxlcGF0aC5zcGxpdCgnLicpO1xuICBjb25zdCBleHQgPSB0ZXJtVHlwZXMuaW5jbHVkZXMoZmlsZW5hbWUgYXMgYW55KSA/IFN1cHBvcnRlZEV4dGVuc2lvbnMueGxzeCA6IFN1cHBvcnRlZEV4dGVuc2lvbnMuY3N2O1xuICByZXR1cm4gZmlsZVRvRXh0KGZpbGVuYW1lLCBleHQpO1xufTtcblxuY29uc3QgcGFyc2VMb29rdXAgPSAoeyBjb2x1bW4sIHRlcm1pZCwgW21pc3NpbmdMb29rdXBQcmVmaXhdOiBtaXNzaW5nTG9va3VwIH0pID0+ICh7XG4gIGZpbGVuYW1lOiBwYXJzZUZpbGVuYW1lKG1pc3NpbmdMb29rdXApLCB0ZXJtSWQ6IHRlcm1pZCwgY29sdW1uXG59KTtcblxuY29uc3QgY3N2VmFsdWUgPSAodmFsdWU6IHN0cmluZykgPT4gKHZhbHVlIHx8ICcnKS5yZXBsYWNlKCdbJywgJycpLnJlcGxhY2UoJ10nLCAnJyk7XG5cbmNvbnN0IHBhcnNlTWVzc2FnZSA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShtZXNzYWdlKTtcbiAgICByZXR1cm4gZGF0YS5tZXNzYWdlLnNwbGl0KCcsJykucmVkdWNlKChwcmV2LCBwYXJ0cykgPT4ge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gcGFydHMuc3BsaXQoJz0nKTtcbiAgICAgIGNvbnN0IHZhbCA9IGNzdlZhbHVlKHZhbHVlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIC4uLihrZXkgJiYgdmFsID8geyBba2V5LnRyaW0oKV06IHZhbCB9IDoge30pXG4gICAgICB9O1xuICAgIH0sIHsgbG9nZ2VyOiBkYXRhLmxvZ2dlciB9KTtcbiAgfVxuICBjYXRjaCAoZXJyKSB7XG4gICAgLy8gbWFrZSBzdXJlIGl0IHdvcmtzIGV2ZW4gaWYgb25lIGxvZyBpcyBtYWxmb3JtZWRcbiAgICByZXR1cm4ge307XG4gIH1cbn07XG5cbmNvbnN0IG9taXRMb2dLZXlzID0gKGxvZzogYW55KSA9PlxuICBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMobG9nKS5maWx0ZXIoKFtrZXldKSA9PiAhc2NoZW1hVHlwZXNMb3dlckNhc2UuaW5jbHVkZXMoa2V5KSkpO1xuXG5jb25zdCBpbmNsdWRlQmxhbmtOb2RlcyA9IChsb2dzLCBsb2cpID0+XG4gIE9iamVjdFxuICAgIC5rZXlzKGxvZylcbiAgICAuZmlsdGVyKGtleSA9PiBibGFua05vZGVUeXBlc0xvd2VyQ2FzZS5pbmNsdWRlcyhrZXkpKVxuICAgIC5yZWR1Y2UoKHByZXYsIGtleSkgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBba2V5XTogdW5pcXVlKFtcbiAgICAgICAgLi4uKCh0eXBlb2YgcHJldltrZXldID09PSAnc3RyaW5nJyA/IFtwcmV2W2tleV1dIDogcHJldltrZXldKSB8fCBbXSksXG4gICAgICAgIGxvZ1trZXldXG4gICAgICBdKVxuICAgIH0pLCBsb2dzKTtcblxuY29uc3QgZ3JvdXBMb2cgPSAoZ3JvdXAsIHsgbG9nZ2VyLCB0ZXJtLCBtb2RlbCwga2V5LCBzaG91bGRfcnVuLCBydW5fcmVxdWlyZWQsIHByb3BlcnR5LCAuLi5sb2cgfTogYW55KSA9PiB7XG4gIGNvbnN0IGlzT3JjaGVzdHJhdG9yID0gbG9nZ2VyLmluY2x1ZGVzKCdvcmNoZXN0cmF0b3InKTtcbiAgY29uc3QgaXNLZXkgPSAhaXNPcmNoZXN0cmF0b3IgJiYgISFrZXk7XG4gIGNvbnN0IHBhcmVudExvZ0tleSA9IFtgW1wiJHt0ZXJtfVwiXWAsICFpc09yY2hlc3RyYXRvciAmJiBrZXkgfHwgcHJvcGVydHldLmZpbHRlcihCb29sZWFuKS5qb2luKCcuJyk7XG4gIGNvbnN0IGxvZ01vZGVsS2V5ID0gW3BhcmVudExvZ0tleSwgbW9kZWxdLmZpbHRlcihCb29sZWFuKS5qb2luKCcuJyk7XG5cbiAgc2V0KGdyb3VwLCBgJHtwYXJlbnRMb2dLZXl9Lm1vZGVsc2AsIHVuaXF1ZShbXG4gICAgLi4uZ2V0KGdyb3VwLCBgJHtwYXJlbnRMb2dLZXl9Lm1vZGVsc2AsIFtdKSxcbiAgICBtb2RlbFxuICBdKSk7XG4gIHNldChncm91cCwgYCR7cGFyZW50TG9nS2V5fS5pc0tleWAsIGlzS2V5KTtcblxuICBsZXQgZGF0YSA9IGdldChncm91cCwgbG9nTW9kZWxLZXksIHt9KTtcblxuICBkYXRhID0gaW5jbHVkZUJsYW5rTm9kZXMoZGF0YSwgbG9nKTtcblxuICBpZiAodHlwZW9mIHNob3VsZF9ydW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc3Qgc2hvdWxkUnVuID0gc2hvdWxkX3J1biA9PT0gJ1RydWUnO1xuXG4gICAgZGF0YSA9IGlzT3JjaGVzdHJhdG9yID9cbiAgICAgIHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgc2hvdWxkUnVuT3JjaGVzdHJhdG9yOiBzaG91bGRSdW5cbiAgICAgIH0gOlxuICAgICAge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICAuLi5vbWl0TG9nS2V5cyhsb2cpLFxuICAgICAgICBzaG91bGRSdW5cbiAgICAgIH07XG4gIH1cbiAgZWxzZSBpZiAodHlwZW9mIHJ1bl9yZXF1aXJlZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zdCBydW5SZXF1aXJlZCA9IHJ1bl9yZXF1aXJlZCA9PT0gJ1RydWUnO1xuXG4gICAgZGF0YSA9ICB7XG4gICAgICAuLi5kYXRhLFxuICAgICAgLi4uKHJ1blJlcXVpcmVkID8ge30gOiBvbWl0TG9nS2V5cyhsb2cpKSwgLy8gbm8gbmVlZCB0byBzYXZlIGxvZ3MgaWYgd2UgbmVlZCB0byBydW4gdGhlIG1vZGVsXG4gICAgICBydW5SZXF1aXJlZFxuICAgIH07XG4gIH1cbiAgZWxzZSBpZiAoJ3JlcXVpcmVtZW50cycgaW4gbG9nKSB7XG4gICAgY29uc3QgeyByZXF1aXJlbWVudHMsIC4uLmxvZ0RhdGEgfSA9IGxvZztcblxuICAgIGRhdGEucmVxdWlyZW1lbnRzID0ge1xuICAgICAgLi4uKGRhdGEucmVxdWlyZW1lbnRzIHx8IHt9KSxcbiAgICAgIC4uLmxvZ0RhdGFcbiAgICB9O1xuICB9XG4gIGVsc2UgaWYgKG1pc3NpbmdMb29rdXBQcmVmaXggaW4gbG9nKSB7XG4gICAgZGF0YS5taXNzaW5nTG9va3VwcyA9IHVuaXF1ZShbXG4gICAgICAuLi4oZGF0YS5taXNzaW5nTG9va3VwcyB8fCBbXSksXG4gICAgICBwYXJzZUxvb2t1cChsb2cpXG4gICAgXSk7XG4gIH1cbiAgZWxzZSBpZiAoIWlzT3JjaGVzdHJhdG9yKSB7XG4gICAgZGF0YS5sb2dzID0ge1xuICAgICAgLi4uKGRhdGEubG9ncyB8fCB7fSksXG4gICAgICAuLi5vbWl0TG9nS2V5cyhsb2cpXG4gICAgfTtcbiAgfVxuXG4gIHNldChncm91cCwgbG9nTW9kZWxLZXksIGRhdGEpO1xuICByZXR1cm4gZ3JvdXA7XG59O1xuXG5jb25zdCBncm91cExvZ1N1YlZhbHVlID0gKGdyb3VwLCBsb2csIGtleTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGlkID0gbG9nW2tleV07XG4gIGNvbnN0IGRhdGEgPSBncm91cExvZyhncm91cFtpZF0gfHwge30sIGxvZyk7XG4gIGdyb3VwW2lkXSA9IGRhdGE7XG5cbiAgaWYgKGtleSA9PT0gJ3RyYW5zZm9ybWF0aW9uJykge1xuICAgIC8vIGFkZCB2YWx1ZSB0byB0aGUgc2FtZSB0ZXJtL21vZGVsIG9uIHBhcmVudCBncm91cFxuICAgIE9iamVjdC5lbnRyaWVzKGdyb3VwW2lkXSkubWFwKChbdGVybSwgbW9kZWxzXSkgPT5cbiAgICAgIE9iamVjdC5rZXlzKG1vZGVscykubWFwKG1vZGVsID0+IHtcbiAgICAgICAgaWYgKGdyb3VwPy5bdGVybV0/Llttb2RlbF0pIHtcbiAgICAgICAgICBncm91cFt0ZXJtXVttb2RlbF1ba2V5XSA9IHVuaXF1ZShbXG4gICAgICAgICAgICAuLi4oZ3JvdXBbdGVybV1bbW9kZWxdW2tleV0gfHwgW10pLFxuICAgICAgICAgICAgaWRcbiAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGdyb3VwO1xufTtcblxuY29uc3Qgc3ViVmFsdWVLZXlzID0gW1xuICAndHJhbnNmb3JtYXRpb24nXG5dO1xuXG5leHBvcnQgY29uc3QgZ3JvdXBMb2dzQnlNb2RlbCA9IChkYXRhOiBzdHJpbmcpOiBJTm9kZUxvZ3MgPT5cbiAgZGF0YS5zcGxpdCgnXFxuJylcbiAgICAubWFwKHBhcnNlTWVzc2FnZSlcbiAgICAuZmlsdGVyKHYgPT4gISF2Py50ZXJtICYmIHY/LnRlcm0gIT09ICdOb25lJyAmJiAhIXY/Lm1vZGVsKVxuICAgIC5yZWR1Y2UoKGdyb3VwLCBsb2cpID0+IHtcbiAgICAgIGNvbnN0IHN1YlZhbHVlID0gc3ViVmFsdWVLZXlzLmZpbmQodiA9PiAhIWxvZ1t2XSk7XG4gICAgICByZXR1cm4gc3ViVmFsdWUgP1xuICAgICAgICBzdWJWYWx1ZSA9PT0gJ3RyYW5zZm9ybWF0aW9uJyA/XG4gICAgICAgICAgLy8gZm9yIHRyYW5zZm9ybWF0aW9uLCBkbyBub3QgYWRkIHRvIHRvcC1sZXZlbCBtb2RlbFxuICAgICAgICAgIGdyb3VwTG9nU3ViVmFsdWUoZ3JvdXAsIGxvZywgc3ViVmFsdWUpIDpcbiAgICAgICAgICBncm91cExvZyhncm91cExvZ1N1YlZhbHVlKGdyb3VwLCBsb2csIHN1YlZhbHVlKSwgbG9nKVxuICAgICAgICA6IGdyb3VwTG9nKGdyb3VwLCBsb2cpO1xuICAgIH0pO1xuXG5leHBvcnQgY29uc3QgY29tcHV0ZVRlcm1zID0gKFxuICBvcmlnaW5hbFZhbHVlczogYmxhbmtOb2RlW10sIHJlY2FsY3VsYXRlZFZhbHVlczogYmxhbmtOb2RlW10sIHRlcm1zPzogSVRlcm1KU09OTERbXSwgZmlsdGVyVGVybVR5cGVzPzogVGVybVRlcm1UeXBlW11cbikgPT4gZnJvbShcbiAgICB0ZXJtcz8ubGVuZ3RoID9cbiAgICAgIHRlcm1zIDpcbiAgICAgIFtcbiAgICAgICAgLi4uKG9yaWdpbmFsVmFsdWVzIHx8IFtdKS5tYXAoKHsgdGVybSB9KSA9PiB0ZXJtKSxcbiAgICAgICAgLi4uKHJlY2FsY3VsYXRlZFZhbHVlcyB8fCBbXSkubWFwKCh7IHRlcm0gfSkgPT4gdGVybSlcbiAgICAgIF0uZmlsdGVyKG5vZGUgPT4gIWZpbHRlclRlcm1UeXBlcz8ubGVuZ3RoIHx8IGZpbHRlclRlcm1UeXBlcy5pbmNsdWRlcyhub2RlLnRlcm1UeXBlKSlcbiAgKS5waXBlKFxuICAgIGRpc3RpbmN0KHYgPT4gdiFbJ0BpZCddKSxcbiAgICB0b0FycmF5KCksXG4gICAgbWFwKHYgPT4gb3JkZXJCeSh2LCBbJ25hbWUnXSwgWydhc2MnXSkpXG4gICkudG9Qcm9taXNlKCk7XG5cbmV4cG9ydCB0eXBlIGJsYW5rTm9kZSA9IEVtaXNzaW9uIHwgUHJvZHVjdCB8IEhlc3RpYUlucHV0IHwgUHJvcGVydHk7XG5cbmV4cG9ydCBlbnVtIExvZ1N0YXR1cyB7XG4gIHN1Y2Nlc3MgPSAnc3VjY2Vzc2Z1bCcsXG4gIGVycm9yID0gJ2ZhaWxlZCcsXG4gIHNraXBIaWVyYXJjaHkgPSAnbm90IHJ1biAobW9kZWwgaGlnaGVyIHVwIGhpZXJhcmNoeSBydW4gaW5zdGVhZCknLFxuICBkYXRhUHJvdmlkZWQgPSAnbm90IHJ1biAodXNlciBwcm92aWRlZCBkYXRhIHJldGFpbmVkKScsXG4gIG5vdFJlcXVpcmVkID0gJ25vdCByZWxldmFudCdcbn1cblxuY29uc3QgaGFzTG9nRGV0YWlscyA9IChkYXRhOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWUgfCBJQmxhbmtOb2RlTG9nLCBsb2dzPzogSU5vZGVUZXJtTG9nKSA9PlxuICBbXG4gICAgTG9nU3RhdHVzLnN1Y2Nlc3MsXG4gICAgTG9nU3RhdHVzLmVycm9yXG4gIF0uaW5jbHVkZXMobG9nU3RhdHVzKGRhdGEsIGxvZ3MpKSAmJiAoXG4gICAgbG9ncz8ucmVxdWlyZW1lbnRzIHx8IGxvZ3M/LmxvZ3MgfHwgbG9ncz8ubWlzc2luZ0xvb2t1cHM/Lmxlbmd0aFxuICApO1xuXG5jb25zdCBsb2dTdGF0dXMgPSAoZGF0YTogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlIHwgSUJsYW5rTm9kZUxvZywgbG9ncz86IElOb2RlVGVybUxvZykgPT5cbiAgaGFzTG9nKGxvZ3MpXG4gICAgPyAoXG4gICAgICAhZGF0YS5pc1JlcXVpcmVkXG4gICAgICAgID8gTG9nU3RhdHVzLm5vdFJlcXVpcmVkXG4gICAgICAgIDogaXNSdW5PcmNoZXN0cmF0b3IobG9ncylcbiAgICAgICAgICA/IChcbiAgICAgICAgICAgICdzaG91bGRSdW4nIGluIGxvZ3NcbiAgICAgICAgICAgICAgPyBsb2dzLnNob3VsZFJ1blxuICAgICAgICAgICAgICAgID8gZGF0YS5pc1JlY2FsY3VsYXRlZFxuICAgICAgICAgICAgICAgICAgPyBMb2dTdGF0dXMuc3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgOiBMb2dTdGF0dXMuZGF0YVByb3ZpZGVkXG4gICAgICAgICAgICAgICAgOiBMb2dTdGF0dXMuZXJyb3JcbiAgICAgICAgICAgICAgOiBMb2dTdGF0dXMuZGF0YVByb3ZpZGVkXG4gICAgICAgICAgKVxuICAgICAgICAgIDogZGF0YS5pc1JlY2FsY3VsYXRlZFxuICAgICAgICAgICAgPyBMb2dTdGF0dXMuc2tpcEhpZXJhcmNoeVxuICAgICAgICAgICAgOiBMb2dTdGF0dXMuZGF0YVByb3ZpZGVkXG4gICAgKVxuICAgIDogKFxuICAgICAgW1xuICAgICAgICB0eXBlb2YgZGF0YS5vcmlnaW5hbFZhbHVlID09PSAndW5kZWZpbmVkJywgLy8gbm8gb3JpZ2luYWwgdmFsdWVcbiAgICAgICAgZGF0YS5pc1JlY2FsY3VsYXRlZCAvLyBpcyByZWNhbGN1bGF0ZWRcbiAgICAgIF0uZXZlcnkoQm9vbGVhbilcbiAgICAgICAgPyBMb2dTdGF0dXMuc2tpcEhpZXJhcmNoeVxuICAgICAgICA6IExvZ1N0YXR1cy5kYXRhUHJvdmlkZWRcbiAgICApO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb25maWdNb2RlbCB7XG4gIG1ldGhvZElkOiBzdHJpbmc7XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2c7XG4gIGhhc0xvZ3M/OiBib29sZWFuO1xuICBzdGF0dXM/OiBMb2dTdGF0dXM7XG4gIG1vZGVsPzogSU1vZGVsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCbGFua05vZGVMb2dTdWJWYWx1ZSB7XG4gIGtleTogc3RyaW5nO1xuICBvcmlnaW5hbFZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuO1xuICByZWNhbGN1bGF0ZWRWYWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbjtcbiAgaXNSZWNhbGN1bGF0ZWQ6IGJvb2xlYW47XG4gIGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuICBpZD86IGFueTtcbiAgY29uZmlnTW9kZWxzPzogSUNvbmZpZ01vZGVsW107XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2dzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCbGFua05vZGVMb2cge1xuICBpc09wZW46IGJvb2xlYW47XG4gIGNhbk9wZW46IGJvb2xlYW47XG4gIHRlcm06IElUZXJtSlNPTkxEO1xuICB0ZXJtSWQ6IHN0cmluZztcbiAgdHlwZT86IFNjaGVtYVR5cGU7XG4gIGNvbmZpZ01vZGVsczogKElDb25maWdNb2RlbCB8IElDb25maWdNb2RlbFtdKVtdO1xuICBvcmlnaW5hbDogYmxhbmtOb2RlW107XG4gIG9yaWdpbmFsVmFsdWU6IG51bWJlcjtcbiAgLy8gd2hlbiBtdWx0aXBsZSBtb2RlbHMgYXJlIHJ1bm5pbmcgaW4gcGFyYWxsZWxcbiAgb3JpZ2luYWxWYWx1ZUJ5TWV0aG9kSWQ/OiB7XG4gICAgW21ldGhvZElkOiBzdHJpbmddOiBudW1iZXI7XG4gIH07XG4gIHJlY2FsY3VsYXRlZDogYmxhbmtOb2RlW107XG4gIHJlY2FsY3VsYXRlZFZhbHVlOiBudW1iZXI7XG4gIC8vIHdoZW4gbXVsdGlwbGUgbW9kZWxzIGFyZSBydW5uaW5nIGluIHBhcmFsbGVsXG4gIHJlY2FsY3VsYXRlZFZhbHVlQnlNZXRob2RJZD86IHtcbiAgICBbbWV0aG9kSWQ6IHN0cmluZ106IG51bWJlcjtcbiAgfTtcbiAgaXNPcmlnaW5hbDogYm9vbGVhbjtcbiAgaXNSZWNhbGN1bGF0ZWQ6IGJvb2xlYW47XG4gIGhhc0RhdGE6IGJvb2xlYW47XG4gIGlzUmVxdWlyZWQ6IGJvb2xlYW47XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2dzO1xuICBrZXlzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXTtcbiAgc3ViVmFsdWVzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXTtcbiAgLy8gY29udGFpbnMgbXVsdGlwbGUgbW9kZWxzIGFsbCBydW5uaW5nIGluIHBhcmFsbGVsXG4gIGFsbFBhcmFsbGVsPzogYm9vbGVhbjtcbn1cblxuY29uc3QgcmVkdWNlVmFsdWVzID0gKHZhbHVlczogYW55W10sIHRlcm1JZDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHByb3BlcnR5VmFsdWVzID0gdmFsdWVzXG4gICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiBwcm9wZXJ0eVZhbHVlKHZhbHVlLCB0ZXJtSWQpKVxuICAgIC8vIHByb3BlcnR5VmFsdWUgbWF5IHJldHVybiBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlcmVmb3JlIHJlbW92ZSB0aGVtIGZyb20gdG90YWxcbiAgICAuZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCk7XG4gIHJldHVybiBwcm9wZXJ0eVZhbHVlcy5sZW5ndGggPyBwcm9wZXJ0eVZhbHVlcy5yZWR1Y2UoKHAsIHYpID0+IHAgKyB2LCAwKSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGlzUnVuT3JjaGVzdHJhdG9yID0gKGxvZzogSU5vZGVUZXJtTG9nKSA9PiAhKCdzaG91bGRSdW5PcmNoZXN0cmF0b3InIGluIGxvZykgfHwgbG9nLnNob3VsZFJ1bk9yY2hlc3RyYXRvcjtcblxuY29uc3QgaXNCYWNrZ3JvdW5kID0gKGxvZzogSU5vZGVUZXJtTG9nKSA9PiBsb2c/Lm1ldGhvZFRpZXIgPT09IEVtaXNzaW9uTWV0aG9kVGllci5iYWNrZ3JvdW5kO1xuXG5jb25zdCBoYXNMb2cgPSAobG9nOiBJTm9kZVRlcm1Mb2csIHdpdGhPcmNoZXN0cmF0b3IgPSB0cnVlKSA9PlxuICAhIWxvZyAmJiAoXG4gICAgJ3Nob3VsZFJ1bicgaW4gbG9nIHx8XG4gICAgJ3J1blJlcXVpcmVkJyBpbiBsb2cgfHxcbiAgICAod2l0aE9yY2hlc3RyYXRvciAmJiAnc2hvdWxkUnVuT3JjaGVzdHJhdG9yJyBpbiBsb2cpXG4gICk7XG5cbmNvbnN0IGlzUmVjYWxjdWxhdGVkID0gKHZhbHVlczogYmxhbmtOb2RlW10sIGtleSA9ICd2YWx1ZScpID0+IHZhbHVlcy5zb21lKHYgPT4gKFtcbiAgLi4uKHYuYWRkZWQgfHwgW10pLFxuICAuLi4odi51cGRhdGVkIHx8IFtdKVxuXSkuaW5jbHVkZXMoa2V5KSk7XG5cbmNvbnN0IGJsYW5rTm9kZVZhbHVlQnlLZXk6IHtcbiAgW2tleTogc3RyaW5nXTogKHZhbHVlczogYmxhbmtOb2RlW10sIGtleT86IHN0cmluZywgaWQ/OiBzdHJpbmcpID0+IG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW47XG59ID0ge1xuICBwcm9wZXJ0eTogKHZhbHVlczogKEVtaXNzaW9uIHwgUHJvZHVjdCB8IEhlc3RpYUlucHV0KVtdLCBfaywgaWQpID0+ICEhaWQgJiYgdmFsdWVzPy5sZW5ndGhcbiAgICA/ICh2YWx1ZXNbMF0ucHJvcGVydGllcyB8fCBbXSkuZmluZChwID0+IHAudGVybVsnQGlkJ10gPT09IGlkKT8udmFsdWUgfHwgJydcbiAgICA6ICcnLFxuICBpbnB1dDogKHZhbHVlczogRW1pc3Npb25bXSwgX2ssIGlkKSA9PiAhIWlkICYmIHZhbHVlcz8ubGVuZ3RoXG4gICAgPyBwcm9wZXJ0eVZhbHVlKHZhbHVlcy5maW5kKCh7IGlucHV0cyB9KSA9PiAoaW5wdXRzIHx8IFtdKS5zb21lKGlucHV0ID0+IGlucHV0WydAaWQnXSA9PT0gaWQpKT8udmFsdWUsIGlkKVxuICAgIDogJycsXG4gIGRlZmF1bHQ6IChibGFua05vZGVzLCBrZXkpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGJsYW5rTm9kZXM/Lmxlbmd0aCA/IGJsYW5rTm9kZXNbMF1ba2V5XSA6IG51bGw7XG4gICAgcmV0dXJuIFsnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJywgJ3VuZGVmaW5lZCddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSlcbiAgICAgID8gaXNVbmRlZmluZWQodmFsdWUpXG4gICAgICA/ICcnXG4gICAgICA6IHZhbHVlXG4gICAgICA6IG51bGw7XG4gIH1cbn07XG5cbmNvbnN0IGJsYW5rTm9kZVZhbHVlID0gKGJsYW5rTm9kZXM6IGJsYW5rTm9kZVtdLCBrZXk6IHN0cmluZywgaWQ/OiBzdHJpbmcpID0+XG4gIGJsYW5rTm9kZVZhbHVlQnlLZXlba2V5IGluIGJsYW5rTm9kZVZhbHVlQnlLZXkgPyBrZXkgOiAnZGVmYXVsdCddKGJsYW5rTm9kZXMsIGtleSwgaWQpO1xuXG5jb25zdCBsb2dTdWJWYWx1ZSA9IChsb2dzOiBJTm9kZVRlcm1Mb2dzLCBrZXk6IHN0cmluZywgcHJvcDogc3RyaW5nKSA9PlxuICBsb2dzW2tleV1bcHJvcF0gPyAoXG4gICAgQXJyYXkuaXNBcnJheShsb2dzW2tleV1bcHJvcF0pID9cbiAgICAgIChsb2dzW2tleV1bcHJvcF0gYXMgc3RyaW5nW10pLm1hcChpZCA9PiAoeyBrZXk6IHByb3AsIGlkIH0gYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKSkgOlxuICAgICAgeyBrZXk6IHByb3AsIGlkOiBsb2dzW2tleV1bcHJvcF0gfSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWVcbiAgKSA6IHVuZGVmaW5lZDtcblxuY29uc3QgbG9nUHJvcGVydGllcyA9IChub2RlczogYmxhbmtOb2RlW10sIG1vZGVsczogSU1vZGVsW10pID0+XG4gIG5vZGVzLmZsYXRNYXAobm9kZSA9PlxuICAgICgobm9kZSBhcyBhbnkpLnByb3BlcnRpZXMgfHwgW10pLm1hcCgoeyB0ZXJtIH0pID0+IHRlcm1bJ0BpZCddKVxuICApLm1hcChpZCA9PiAoeyBrZXk6ICdwcm9wZXJ0eScsIGlkLCBjb25maWdNb2RlbHM6IGZpbmRNb2RlbHMobW9kZWxzLCBpZCkubWFwKCh7IG1vZGVsIH0pID0+IG1vZGVsKSB9KSk7XG5cbmNvbnN0IGxvZ1N1YlZhbHVlcyA9IChcbiAgYWxsTG9nczogSU5vZGVMb2dzLCBsb2dzOiBJTm9kZVRlcm1Mb2dzLCBvcmlnaW5hbDogYmxhbmtOb2RlW10sIHJlY2FsY3VsYXRlZDogYmxhbmtOb2RlW10sIG1vZGVsczogSU1vZGVsW10sIHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCB9XG4pOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXSA9PlxuICB1bmlxdWUoW1xuICAgIC4uLk9iamVjdC5rZXlzKGxvZ3MpLmZsYXRNYXAoa2V5ID0+XG4gICAgICBbXG4gICAgICAgIGxvZ1N1YlZhbHVlKGxvZ3MsIGtleSwgJ2lucHV0JyksXG4gICAgICAgIGxvZ1N1YlZhbHVlKGxvZ3MsIGtleSwgJ3Byb3BlcnR5JylcbiAgICAgIF1cbiAgICAgICAgLmZsYXQoKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5tYXAodiA9PiAoeyAuLi52LCBjb25maWdNb2RlbHM6IFtrZXldIH0pKVxuICAgICksXG4gICAgLi4ubG9nUHJvcGVydGllcyhvcmlnaW5hbCwgbW9kZWxzKSxcbiAgICAuLi5sb2dQcm9wZXJ0aWVzKHJlY2FsY3VsYXRlZCwgbW9kZWxzKVxuICBdKVxuICAgIC5tYXAodiA9PiB7XG4gICAgICBjb25zdCBvcmlnaW5hbFZhbHVlID0gYmxhbmtOb2RlVmFsdWUob3JpZ2luYWwsIHYua2V5LCB2LmlkKTtcbiAgICAgIGNvbnN0IHJlY2FsY3VsYXRlZFZhbHVlID0gYmxhbmtOb2RlVmFsdWUocmVjYWxjdWxhdGVkLCB2LmtleSwgdi5pZCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi52LFxuICAgICAgICBjb25maWdNb2RlbHM6IHYuY29uZmlnTW9kZWxzLm1hcChjb25maWdNb2RlbFdpdGhEb2NzKG1vZGVscywgeyBub2RlVHlwZSwgdHlwZSwgdGVybUlkIH0sIHYgYXMgYW55KSksXG4gICAgICAgIG9yaWdpbmFsVmFsdWUsXG4gICAgICAgIHJlY2FsY3VsYXRlZFZhbHVlLFxuICAgICAgICBpc1JlY2FsY3VsYXRlZDogIWlzVW5kZWZpbmVkKHJlY2FsY3VsYXRlZFZhbHVlKSAmJiByZWNhbGN1bGF0ZWRWYWx1ZSAhPT0gb3JpZ2luYWxWYWx1ZSxcbiAgICAgICAgaXNSZXF1aXJlZDogdHJ1ZVxuICAgICAgfTtcbiAgICB9KVxuICAgIC5maWx0ZXIodiA9PiB2LmNvbmZpZ01vZGVscy5sZW5ndGggPiAwKVxuICAgIC5tYXAoZGF0YVdpdGhDb25maWdNb2RlbExvZ3MoYWxsTG9ncykpO1xuXG4vLyBjb25zdCBoYXNLZXkgPSAoYmxhbmtOb2RlczogYmxhbmtOb2RlW10sIGtleTogc3RyaW5nKSA9PiAoYmxhbmtOb2RlcyB8fCBbXSkuc29tZShuID0+IGtleSBpbiBuKTtcblxuY29uc3QgbG9nS2V5cyA9IChcbiAgbG9nczogSU5vZGVUZXJtTG9ncywgb3JpZ2luYWw6IGJsYW5rTm9kZVtdLCByZWNhbGN1bGF0ZWQ6IGJsYW5rTm9kZVtdLCBtb2RlbHM6IElNb2RlbFtdLCB7IG5vZGVUeXBlLCB0eXBlLCB0ZXJtSWQgfVxuKTogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlW10gPT5cbiAgT2JqZWN0LmtleXMobG9ncylcbiAgICAuZmlsdGVyKGtleSA9PiBsb2dzW2tleV0uaXNLZXkpXG4gICAgLm1hcChrZXkgPT4gKHtcbiAgICAgIGtleSxcbiAgICAgIGNvbmZpZ01vZGVsczogKGxvZ3Nba2V5XS5tb2RlbHMgfHwgW10pXG4gICAgICAgIC5tYXAoY29uZmlnTW9kZWxXaXRoRG9jcyhtb2RlbHMsIHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCB9LCB7IGtleSB9IGFzIGFueSkpXG4gICAgICAgIC8vIG9ubHkgdGFrZSB0aG9zZSB3ZSBmb3VuZCBhIG1hdGNoaW5nIG1vZGVsIChhdm9pZCBtYXRjaGluZyBrZXkgb24gd3Jvbmcgbm9kZSB0eXBlKVxuICAgICAgICAuZmlsdGVyKHYgPT4gISF2Lm1vZGVsKSxcbiAgICAgIG9yaWdpbmFsVmFsdWU6IGJsYW5rTm9kZVZhbHVlKG9yaWdpbmFsLCBrZXkpLFxuICAgICAgcmVjYWxjdWxhdGVkVmFsdWU6IGJsYW5rTm9kZVZhbHVlKHJlY2FsY3VsYXRlZCwga2V5KSxcbiAgICAgIGlzUmVjYWxjdWxhdGVkOiBpc1JlY2FsY3VsYXRlZChyZWNhbGN1bGF0ZWQsIGtleSksXG4gICAgICBpc1JlcXVpcmVkOiB0cnVlXG4gICAgfSkpXG4gICAgLmZpbHRlcih2ID0+IHYuY29uZmlnTW9kZWxzLmxlbmd0aCA+IDApXG4gICAgLm1hcChkYXRhV2l0aENvbmZpZ01vZGVsTG9ncyhsb2dzKSk7XG5cbmNvbnN0IGlzQmFja2dyb3VuZE5vSW5wdXQgPSAobG9nczogSU5vZGVUZXJtTG9nKSA9PiBsb2dzLm1ldGhvZFRpZXIgPT09IEVtaXNzaW9uTWV0aG9kVGllci5iYWNrZ3JvdW5kICYmICFsb2dzLmlucHV0O1xuXG5jb25zdCBpc01vZGVsTG9nID0gKGxvZ3M6IElOb2RlVGVybUxvZykgPT5cbiAgW1xuICAgICFpc0JhY2tncm91bmROb0lucHV0KGxvZ3MpLFxuICAgICFsb2dzLmlzS2V5LFxuICAgICFsb2dzLmlucHV0LFxuICAgICFsb2dzLnByb3BlcnR5XG4gIF0uZXZlcnkoQm9vbGVhbikgJiYgW1xuICAgICdzaG91bGRSdW4nIGluIGxvZ3MsXG4gICAgJ3Nob3VsZFJ1bk9yY2hlc3RyYXRvcicgaW4gbG9ncyxcbiAgICAncnVuUmVxdWlyZWQnIGluIGxvZ3NcbiAgXS5zb21lKEJvb2xlYW4pO1xuXG5jb25zdCBtb2RlbENvbmZpZ09yZGVyID0gKFxuICBtb2RlbHM6IChJT3JjaGVzdHJhdG9yTW9kZWxDb25maWcgfCBJT3JjaGVzdHJhdG9yTW9kZWxDb25maWdbXSlbXSwgdGVybUlkOiBzdHJpbmcsIG1vZGVsS2V5OiBzdHJpbmcsIG1vZGVsOiBzdHJpbmdcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGluZGV4ZXMgPSBtb2RlbHMubWFwKChtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGFycmF5SW5kZXggPSBBcnJheS5pc0FycmF5KG0pID8gbW9kZWxDb25maWdPcmRlcihtLCB0ZXJtSWQsIG1vZGVsS2V5LCBtb2RlbCkgOiAnJztcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShtKVxuICAgICAgPyBhcnJheUluZGV4XG4gICAgICAgID8gW2luZGV4LCBhcnJheUluZGV4XS5qb2luKCcuJylcbiAgICAgICAgOiAnJ1xuICAgICAgOiBbdGVybUlkID09PSBtLnZhbHVlLCBtb2RlbEtleSA9PT0gbS5rZXksIG1vZGVsID09PSBtLm1vZGVsXS5ldmVyeShCb29sZWFuKVxuICAgICAgICA/IGAke2luZGV4fWBcbiAgICAgICAgOiAnJztcbiAgfSkuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gaW5kZXhlcy5sZW5ndGggPyBpbmRleGVzWzBdIDogJyc7XG59O1xuXG5jb25zdCBjb25maWdNb2RlbFdpdGhEb2NzID0gKFxuICBtb2RlbHM6IElNb2RlbFtdLCB7IG5vZGVUeXBlLCB0eXBlLCB0ZXJtSWQgfSwgc3ViVmFsdWU/OiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVcbikgPT4gKG1ldGhvZElkOiBzdHJpbmcpID0+IHtcbiAgY29uc3Qgbm9kZSA9IHtcbiAgICAnQHR5cGUnOiBub2RlVHlwZSxcbiAgICB0ZXJtOiB7ICdAaWQnOiBzdWJWYWx1ZT8uaWQgfHwgdGVybUlkIH0sXG4gICAgbWV0aG9kTW9kZWw6IHsgJ0BpZCc6IG1ldGhvZElkIH1cbiAgfSBhcyBhbnk7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kSWQsXG4gICAgbW9kZWw6IGZpbmRNYXRjaGluZ01vZGVsKG1vZGVscywgbW9kZWxQYXJhbXMobm9kZSkpIHx8XG4gICAgICBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsS2V5UGFyYW1zKG5vZGUsIGAke3N1YlZhbHVlPy5rZXl9LiR7bWV0aG9kSWR9YCkpIHx8XG4gICAgICAvLyBoYW5kbGUgXCJpbnB1dC5wcmljZVwiXG4gICAgICBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsS2V5UGFyYW1zKG5vZGUsIGAke3R5cGUudG9Mb3dlckNhc2UoKX0uJHtzdWJWYWx1ZT8ua2V5fWApKSB8fFxuICAgICAgLy8gaGFuZGxlIFwiaW5wdXQuaGVzdGlhQWdncmVnYXRlZERhdGFcIlxuICAgICAgZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCBtb2RlbEtleVBhcmFtcyhub2RlLCBgJHt0eXBlLnRvTG93ZXJDYXNlKCl9LiR7bWV0aG9kSWR9YCkpXG4gIH07XG59O1xuXG5jb25zdCBjb25maWdNb2RlbFdpdGhMb2dzID0gKGRhdGE6IElCbGFua05vZGVMb2cgfCBJQmxhbmtOb2RlTG9nU3ViVmFsdWUsIGxvZ3M6IElOb2RlVGVybUxvZ3MpID0+IChtb2RlbDogSUNvbmZpZ01vZGVsKSA9PiAoe1xuICAuLi5tb2RlbCxcbiAgbG9nczogbG9ncz8uW21vZGVsLm1ldGhvZElkXSxcbiAgc3RhdHVzOiBsb2dTdGF0dXMoZGF0YSwgbG9ncz8uW21vZGVsLm1ldGhvZElkXSksXG4gIHNob3dMb2dzOiBoYXNMb2dEZXRhaWxzKGRhdGEsIGxvZ3M/Llttb2RlbC5tZXRob2RJZF0pXG59IGFzIElDb25maWdNb2RlbCk7XG5cbmNvbnN0IGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzID0gKFxuICBsb2dzOiBJTm9kZUxvZ3MgfCBJTm9kZVRlcm1Mb2dzXG4pID0+IDxUIGV4dGVuZHMgKElCbGFua05vZGVMb2cgfCBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpPihkYXRhOiBUKSA9PiB7XG4gIGNvbnN0IHN1YkxvZ0tleSA9IChkYXRhIGFzIElCbGFua05vZGVMb2dTdWJWYWx1ZSkuaWQgfHwgKGRhdGEgYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKS5rZXkgP1xuICAgIChkYXRhIGFzIElCbGFua05vZGVMb2dTdWJWYWx1ZSkuaWQgfHwgKGRhdGEgYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKS5rZXkgOiBudWxsO1xuICBjb25zdCBsb2cgPSBzdWJMb2dLZXkgPyBsb2dzW3N1YkxvZ0tleV0gOiBsb2dzO1xuICByZXR1cm4ge1xuICAgIC4uLmRhdGEsXG4gICAgY29uZmlnTW9kZWxzOiBkYXRhLmNvbmZpZ01vZGVscy5tYXAobW9kZWwgPT5cbiAgICAgIEFycmF5LmlzQXJyYXkobW9kZWwpID8gbW9kZWwubWFwKGNvbmZpZ01vZGVsV2l0aExvZ3MoZGF0YSwgbG9nKSkgOiBjb25maWdNb2RlbFdpdGhMb2dzKGRhdGEsIGxvZykobW9kZWwpXG4gICAgKVxuICB9IGFzIFQ7XG59O1xuXG4vKipcbiAqIEdyb3VwIG1vZGVscyBydW5uaW5nIGluIHBhcmFsbGVsIHVuZGVyIHRoZSBzYW1lIGFycmF5LCBhcyB0aGV5IHNob3VsZCBhcHBlYXIgdmVydGljYWxseS5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIG1vZGVscyBUaGUgbGlzdCBvZiBtb2RlbHNcbiAqL1xuY29uc3QgZ3JvdXBQYXJhbGxlbE1vZGVscyA9IChjb25maWc6IElPcmNoZXN0cmF0b3JDb25maWcsIHRlcm1JZDogc3RyaW5nLCBtb2RlbEtleTogc3RyaW5nLCBtb2RlbHM6IElDb25maWdNb2RlbFtdKSA9PiB7XG4gIGNvbnN0IG1vZGVsc1dpdGhPcmRlciA9IG1vZGVscy5tYXAobW9kZWwgPT4gKHtcbiAgICBtb2RlbCxcbiAgICBvcmRlcjogbW9kZWxDb25maWdPcmRlcihjb25maWcubW9kZWxzLCB0ZXJtSWQsIG1vZGVsS2V5LCBtb2RlbC5tZXRob2RJZClcbiAgfSkpO1xuICByZXR1cm4gbW9kZWxzV2l0aE9yZGVyXG4gICAgLnJlZHVjZSgocHJldiwgeyBtb2RlbCwgb3JkZXIgfSkgPT4ge1xuICAgICAgY29uc3QgaXNBcnJheSA9IG9yZGVyLmluY2x1ZGVzKCcuJyk7XG4gICAgICBjb25zdCBhcnJheUluZGV4ID0gaXNBcnJheSA/IG9yZGVyLnNwbGl0KCcuJylbMF0gOiBwcmV2Lmxlbmd0aDtcbiAgICAgIHByZXZbYXJyYXlJbmRleF0gPSBpc0FycmF5ID8gWy4uLihwcmV2W2FycmF5SW5kZXhdIHx8IFtdKSwgbW9kZWxdIDogbW9kZWw7XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCBbXSBhcyBJQ29uZmlnTW9kZWxbXVtdKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAubWFwKHYgPT4gdi5sZW5ndGggPT09IDEgPyB2WzBdIDogdik7XG59O1xuXG5jb25zdCBhbGxQYXJhbGxlbCA9IChtb2RlbHM6IChJQ29uZmlnTW9kZWwgfCBJQ29uZmlnTW9kZWxbXSlbXSkgPT5cbiAgbW9kZWxzLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KG1vZGVsc1swXSkgJiYgbW9kZWxzWzBdLmxlbmd0aCA+IDE7XG5cbmNvbnN0IHZhbHVlQnlNZXRob2RJZCA9ICh2YWx1ZXM6IGJsYW5rTm9kZVtdLCBtZXRob2RJZDogc3RyaW5nLCB0ZXJtSWQ6IHN0cmluZykgPT5cbiAgcHJvcGVydHlWYWx1ZSh2YWx1ZXMuZmluZCh2ID0+IHYubWV0aG9kTW9kZWw/LlsnQGlkJ10gPT09IG1ldGhvZElkKT8udmFsdWUgYXMgbnVtYmVyW10sIHRlcm1JZCk7XG5cbmNvbnN0IGdyb3VwUGFyYWxsZWxWYWx1ZXMgPSAodmFsdWVzOiBibGFua05vZGVbXSwgbW9kZWxzOiBJQ29uZmlnTW9kZWwgfCBJQ29uZmlnTW9kZWxbXSwgdGVybUlkOiBzdHJpbmcpID0+XG4gIEFycmF5LmlzQXJyYXkobW9kZWxzKVxuICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKG1vZGVscy5tYXAobW9kZWwgPT4gW21vZGVsLm1ldGhvZElkLCB2YWx1ZUJ5TWV0aG9kSWQodmFsdWVzLCBtb2RlbC5tZXRob2RJZCwgdGVybUlkKV0pKVxuICAgIDoge307XG5cbmV4cG9ydCBjb25zdCBncm91cExvZ3NCeVRlcm0gPSAoXG4gIG5vZGVUeXBlOiBOb2RlVHlwZSwgbG9nczogSU5vZGVMb2dzLCBtb2RlbHM6IElNb2RlbFtdLCBjb25maWc6IElPcmNoZXN0cmF0b3JDb25maWcsXG4gIGFsbE9yaWdpbmFsVmFsdWVzOiBibGFua05vZGVbXSwgYWxsUmVjYWxjdWxhdGVkVmFsdWVzOiBibGFua05vZGVbXSxcbiAgbm9kZUtleT86IHN0cmluZ1xuKSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsVmFsdWVzID0gKGFsbE9yaWdpbmFsVmFsdWVzIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gISh2YWx1ZSBhcyBhbnkpLmRlbGV0ZWQpO1xuICBjb25zdCByZWNhbGN1bGF0ZWRWYWx1ZXMgPSAoYWxsUmVjYWxjdWxhdGVkVmFsdWVzIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gISh2YWx1ZSBhcyBhbnkpLmRlbGV0ZWQpO1xuICBjb25zdCB0eXBlOiBTY2hlbWFUeXBlID0gb3JpZ2luYWxWYWx1ZXMubGVuZ3RoID9cbiAgICBvcmlnaW5hbFZhbHVlc1swXVsnQHR5cGUnXSB8fCBvcmlnaW5hbFZhbHVlc1swXS50eXBlIDpcbiAgICByZWNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoID9cbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlc1swXVsnQHR5cGUnXSB8fCByZWNhbGN1bGF0ZWRWYWx1ZXNbMF0udHlwZSA6XG4gICAgICB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuICh0ZXJtOiBJVGVybUpTT05MRCk6IElCbGFua05vZGVMb2cgPT4ge1xuICAgIGNvbnN0IHRlcm1JZCA9IHRlcm1bJ0BpZCddO1xuICAgIGNvbnN0IHRlcm1Mb2dzID0gZ2V0KGxvZ3MsIHRlcm1JZCwge30pIGFzIElOb2RlVGVybUxvZ3M7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBvcmlnaW5hbFZhbHVlcy5maWx0ZXIodiA9PiB0ZXJtSWQgPT09IHYudGVybSFbJ0BpZCddKTtcbiAgICBjb25zdCByZWNhbGN1bGF0ZWQgPSByZWNhbGN1bGF0ZWRWYWx1ZXMuZmlsdGVyKHYgPT4gdGVybUlkID09PSB2LnRlcm0hWydAaWQnXSk7XG4gICAgY29uc3QgaGFzRGF0YSA9ICEhb3JpZ2luYWwubGVuZ3RoIHx8ICEhcmVjYWxjdWxhdGVkLmxlbmd0aCB8fCBPYmplY3Qua2V5cyh0ZXJtTG9ncykubGVuZ3RoID4gMDtcbiAgICBjb25zdCBjb25maWdNb2RlbHNEYXRhID0geyBub2RlVHlwZSwgdHlwZSwgdGVybUlkIH07XG4gICAgY29uc3QgY29uZmlnTW9kZWxzID0gZ3JvdXBQYXJhbGxlbE1vZGVscyhcbiAgICAgIGNvbmZpZywgdGVybUlkLCBub2RlS2V5ISxcbiAgICAgIHVuaXF1ZShbXG4gICAgICAgIC4uLih0ZXJtTG9ncy5tb2RlbHMgfHwgW10pLmZpbHRlcihrZXkgPT4gaXNNb2RlbExvZyh0ZXJtTG9nc1trZXldKSksXG4gICAgICAgIC4uLmZpbmRDb25maWdNb2RlbHMoY29uZmlnLCB0ZXJtSWQsIG5vZGVLZXkhLCBtb2RlbHMpLm1hcCgoeyBtb2RlbCB9KSA9PiBtb2RlbCBhcyBzdHJpbmcpXG4gICAgICBdKS5tYXAoY29uZmlnTW9kZWxXaXRoRG9jcyhtb2RlbHMsIGNvbmZpZ01vZGVsc0RhdGEpKVxuICAgICk7XG4gICAgY29uc3Qga2V5cyA9IGxvZ0tleXModGVybUxvZ3MsIG9yaWdpbmFsLCByZWNhbGN1bGF0ZWQsIG1vZGVscywgY29uZmlnTW9kZWxzRGF0YSk7XG4gICAgY29uc3Qgc3ViVmFsdWVzID0gbG9nU3ViVmFsdWVzKGxvZ3MsIHRlcm1Mb2dzLCBvcmlnaW5hbCwgcmVjYWxjdWxhdGVkLCBtb2RlbHMsIGNvbmZpZ01vZGVsc0RhdGEpO1xuICAgIGNvbnN0IGlzUmVxdWlyZWQgPSAhT2JqZWN0LnZhbHVlcyh0ZXJtTG9ncylcbiAgICAgIC5maWx0ZXIodiA9PiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodikpXG4gICAgICAvLyBpZ25vcmUgbW9kZWxzIHRoYXQgd2VyZSBuZXZlciBnb2luZyB0byBydW5cbiAgICAgIC5maWx0ZXIoaXNSdW5PcmNoZXN0cmF0b3IpXG4gICAgICAuZXZlcnkodiA9PiB2LnJ1blJlcXVpcmVkID09PSBmYWxzZSk7XG5cbiAgICByZXR1cm4gZGF0YVdpdGhDb25maWdNb2RlbExvZ3ModGVybUxvZ3MpKHtcbiAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgIGNhbk9wZW46IGtleXMubGVuZ3RoID4gMCB8fCBzdWJWYWx1ZXMubGVuZ3RoID4gMCxcbiAgICAgIHRlcm1JZCxcbiAgICAgIHRlcm0sXG4gICAgICB0eXBlLFxuICAgICAgY29uZmlnTW9kZWxzLFxuICAgICAgb3JpZ2luYWwsXG4gICAgICBvcmlnaW5hbFZhbHVlOiByZWR1Y2VWYWx1ZXMob3JpZ2luYWwsIHRlcm1JZCksXG4gICAgICByZWNhbGN1bGF0ZWQsXG4gICAgICByZWNhbGN1bGF0ZWRWYWx1ZTogcmVkdWNlVmFsdWVzKHJlY2FsY3VsYXRlZCwgdGVybUlkKSxcbiAgICAgIGlzT3JpZ2luYWw6ICEhb3JpZ2luYWwubGVuZ3RoLFxuICAgICAgaXNSZWNhbGN1bGF0ZWQ6IGlzUmVjYWxjdWxhdGVkKHJlY2FsY3VsYXRlZCksXG4gICAgICBoYXNEYXRhLFxuICAgICAgaXNSZXF1aXJlZCxcbiAgICAgIGxvZ3M6IHRlcm1Mb2dzLFxuICAgICAga2V5cyxcbiAgICAgIHN1YlZhbHVlcyxcbiAgICAgIGFsbFBhcmFsbGVsOiBhbGxQYXJhbGxlbChjb25maWdNb2RlbHMpLFxuICAgICAgb3JpZ2luYWxWYWx1ZUJ5TWV0aG9kSWQ6IGdyb3VwUGFyYWxsZWxWYWx1ZXMob3JpZ2luYWwsIGNvbmZpZ01vZGVsc1swXSwgdGVybUlkKSxcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlQnlNZXRob2RJZDogZ3JvdXBQYXJhbGxlbFZhbHVlcyhyZWNhbGN1bGF0ZWQsIGNvbmZpZ01vZGVsc1swXSwgdGVybUlkKVxuICAgIH0pO1xuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG1vZGVsQ291bnQgPSAoYmxhbmtOb2RlTG9nczogSUJsYW5rTm9kZUxvZ1tdKSA9PiBNYXRoLm1heC5hcHBseShNYXRoLm1heCwgW1xuICAwLFxuICAuLi5ibGFua05vZGVMb2dzLmZsYXRNYXAodiA9PiBbXG4gICAgdi5jb25maWdNb2RlbHMubGVuZ3RoLFxuICAgIC4uLnYuc3ViVmFsdWVzLm1hcChzID0+IHMuY29uZmlnTW9kZWxzPy5sZW5ndGggPz8gMCksXG4gICAgdi5rZXlzLmxlbmd0aCA/IDEgOiAwXG4gIF0pXG5dKTtcbiJdfQ==
@@ -32,4 +32,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
32
32
  }], ctorParameters: function () { return [{ type: i1.HeNodeService }]; }, propDecorators: { node: [{
33
33
  type: Input
34
34
  }] } });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1taXNzaW5nLWxvb2t1cC1mYWN0b3JzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtbWlzc2luZy1sb29rdXAtZmFjdG9ycy9ub2RlLW1pc3NpbmctbG9va3VwLWZhY3RvcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1taXNzaW5nLWxvb2t1cC1mYWN0b3JzL25vZGUtbWlzc2luZy1sb29rdXAtZmFjdG9ycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7OztBQVc5QyxNQUFNLE9BQU8saUNBQWlDO0lBTzVDLFlBQ1MsV0FBMEI7UUFBMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUFKNUIsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLFNBQUksR0FBNEIsRUFBRSxDQUFDO0lBSXRDLENBQUM7SUFFQyxRQUFROztZQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixpQ0FDbEQsSUFBSSxDQUFDLElBQUksS0FDWixTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksSUFDakMsQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUM7S0FBQTs7K0hBbEJVLGlDQUFpQzttSEFBakMsaUNBQWlDLGdHQ1o5Qyw4akRBcURBOzRGRHpDYSxpQ0FBaUM7a0JBTjdDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdDQUFnQztvQkFDMUMsV0FBVyxFQUFFLDhDQUE4QztvQkFDM0QsU0FBUyxFQUFFLENBQUMsOENBQThDLENBQUM7b0JBQzNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDtvR0FHUSxJQUFJO3NCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhU3RhdGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2FwaSc7XG5pbXBvcnQgeyBKU09OTEQsIE5vZGVUeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuXG5pbXBvcnQgeyBJTm9kZU1pc3NpbmdMb29rdXBMb2csIEhlTm9kZVNlcnZpY2UgfSBmcm9tICcuLi9ub2RlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1ub2RlLW1pc3NpbmctbG9va3VwLWZhY3RvcnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbm9kZS1taXNzaW5nLWxvb2t1cC1mYWN0b3JzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm9kZS1taXNzaW5nLWxvb2t1cC1mYWN0b3JzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVNaXNzaW5nTG9va3VwRmFjdG9yc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBub2RlPzogSlNPTkxEPE5vZGVUeXBlPjtcblxuICBwdWJsaWMgbG9hZGluZyA9IHRydWU7XG4gIHB1YmxpYyBsb2dzOiBJTm9kZU1pc3NpbmdMb29rdXBMb2dbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBub2RlU2VydmljZTogSGVOb2RlU2VydmljZVxuICApIHsgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5sb2dzID0gYXdhaXQgdGhpcy5ub2RlU2VydmljZS5nZXRNaXNzaW5nTG9va3Vwc0xvZyh7XG4gICAgICAuLi50aGlzLm5vZGUsXG4gICAgICBkYXRhU3RhdGU6IERhdGFTdGF0ZS5yZWNhbGN1bGF0ZWRcbiAgICB9KTtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cIiFsb2FkaW5nOyBlbHNlIGxvYWRlclwiIGNsYXNzPVwidGFibGUtY29udGFpbmVyIGRhdGEtdGFibGUtY29udGFpbmVyXCI+XG4gIDx0YWJsZSBjbGFzcz1cInRhYmxlIGlzLWZ1bGx3aWR0aCBpcy1ob3ZlcmFibGUgbWItMFwiPlxuICAgIDx0aGVhZCBjbGFzcz1cImhhcy1iYWNrZ3JvdW5kLWJsYWNrXCI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImhhcy10ZXh0LXdoaXRlXCI+RmlsZW5hbWU8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImhhcy10ZXh0LXdoaXRlXCI+Q29sdW1uIFRpdGxlPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGg+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJoYXMtdGV4dC13aGl0ZVwiPlJvdyAodGVybS5pZCk8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImhhcy10ZXh0LXdoaXRlXCI+TW9kZWw8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvdGhlYWQ+XG4gICAgPHRib2R5PlxuICAgICAgPHRyICpuZ0lmPVwiIWxvZ3MubGVuZ3RoXCI+XG4gICAgICAgIDx0ZCBjb2xzcGFuPVwiM1wiPlxuICAgICAgICAgIDxzcGFuPk5vIG1pc3NpbmcgbG9va3VwIGZhY3RvcnMuPC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciAqbmdGb3I9XCJsZXQgbG9nIG9mIGxvZ3NcIj5cbiAgICAgICAgPHRkPnt7bG9nLmZpbGVuYW1lfX08L3RkPlxuICAgICAgICA8dGQ+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJsb2cuY29sdW1uOyBlbHNlIG5hXCI+e3tsb2cuY29sdW1ufX08L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZD5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImxvZy50ZXJtSWQ7IGVsc2UgbmFcIj57e2xvZy50ZXJtSWR9fTwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2cubW9kZWw7IGVsc2UgbmFcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7bG9nLm1vZGVsfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTFcIiAqbmdJZj1cImxvZy5rZXlcIj4vIHt7bG9nLmtleX19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0xXCIgKm5nSWY9XCJsb2cudGVybSAmJiBsb2cudGVybSAhPT0gbG9nLnRlcm1JZFwiPi8ge3tsb2cudGVybX19PC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuICA8L3RhYmxlPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGVyPlxuICA8ZGl2IGNsYXNzPVwiaGFzLXRleHQtY2VudGVyIHB5LTNcIj5cbiAgICA8ZmEtaWNvbiBpY29uPVwic3Bpbm5lclwiIFtwdWxzZV09XCJ0cnVlXCIgc2l6ZT1cImxnXCI+PC9mYS1pY29uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbmE+XG4gIDxzcGFuPi08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuIl19
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1taXNzaW5nLWxvb2t1cC1mYWN0b3JzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtbWlzc2luZy1sb29rdXAtZmFjdG9ycy9ub2RlLW1pc3NpbmctbG9va3VwLWZhY3RvcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1taXNzaW5nLWxvb2t1cC1mYWN0b3JzL25vZGUtbWlzc2luZy1sb29rdXAtZmFjdG9ycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7OztBQVk5QyxNQUFNLE9BQU8saUNBQWlDO0lBTzVDLFlBQ1MsV0FBMEI7UUFBMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUFKNUIsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLFNBQUksR0FBNEIsRUFBRSxDQUFDO0lBSXRDLENBQUM7SUFFQyxRQUFROztZQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixpQ0FDbEQsSUFBSSxDQUFDLElBQUksS0FDWixTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksSUFDakMsQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUM7S0FBQTs7K0hBbEJVLGlDQUFpQzttSEFBakMsaUNBQWlDLGdHQ2I5Qyw4akRBcURBOzRGRHhDYSxpQ0FBaUM7a0JBTjdDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdDQUFnQztvQkFDMUMsV0FBVyxFQUFFLDhDQUE4QztvQkFDM0QsU0FBUyxFQUFFLENBQUMsOENBQThDLENBQUM7b0JBQzNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDtvR0FHUSxJQUFJO3NCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhU3RhdGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2FwaSc7XG5pbXBvcnQgeyBKU09OTEQsIE5vZGVUeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuXG5pbXBvcnQgeyBJTm9kZU1pc3NpbmdMb29rdXBMb2cgfSBmcm9tICcuLi9ub2RlLWxvZ3MtbW9kZWxzL25vZGUtbG9ncy1tb2RlbHMubW9kZWwnO1xuaW1wb3J0IHsgSGVOb2RlU2VydmljZSB9IGZyb20gJy4uL25vZGUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLW5vZGUtbWlzc2luZy1sb29rdXAtZmFjdG9ycycsXG4gIHRlbXBsYXRlVXJsOiAnLi9ub2RlLW1pc3NpbmctbG9va3VwLWZhY3RvcnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ub2RlLW1pc3NpbmctbG9va3VwLWZhY3RvcnMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTm9kZU1pc3NpbmdMb29rdXBGYWN0b3JzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgcHVibGljIG5vZGU/OiBKU09OTEQ8Tm9kZVR5cGU+O1xuXG4gIHB1YmxpYyBsb2FkaW5nID0gdHJ1ZTtcbiAgcHVibGljIGxvZ3M6IElOb2RlTWlzc2luZ0xvb2t1cExvZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5vZGVTZXJ2aWNlOiBIZU5vZGVTZXJ2aWNlXG4gICkgeyB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmxvZ3MgPSBhd2FpdCB0aGlzLm5vZGVTZXJ2aWNlLmdldE1pc3NpbmdMb29rdXBzTG9nKHtcbiAgICAgIC4uLnRoaXMubm9kZSxcbiAgICAgIGRhdGFTdGF0ZTogRGF0YVN0YXRlLnJlY2FsY3VsYXRlZFxuICAgIH0pO1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiIWxvYWRpbmc7IGVsc2UgbG9hZGVyXCIgY2xhc3M9XCJ0YWJsZS1jb250YWluZXIgZGF0YS10YWJsZS1jb250YWluZXJcIj5cbiAgPHRhYmxlIGNsYXNzPVwidGFibGUgaXMtZnVsbHdpZHRoIGlzLWhvdmVyYWJsZSBtYi0wXCI+XG4gICAgPHRoZWFkIGNsYXNzPVwiaGFzLWJhY2tncm91bmQtYmxhY2tcIj5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGFzLXRleHQtd2hpdGVcIj5GaWxlbmFtZTwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGFzLXRleHQtd2hpdGVcIj5Db2x1bW4gVGl0bGU8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImhhcy10ZXh0LXdoaXRlXCI+Um93ICh0ZXJtLmlkKTwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGFzLXRleHQtd2hpdGVcIj5Nb2RlbDwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHk+XG4gICAgICA8dHIgKm5nSWY9XCIhbG9ncy5sZW5ndGhcIj5cbiAgICAgICAgPHRkIGNvbHNwYW49XCIzXCI+XG4gICAgICAgICAgPHNwYW4+Tm8gbWlzc2luZyBsb29rdXAgZmFjdG9ycy48L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyICpuZ0Zvcj1cImxldCBsb2cgb2YgbG9nc1wiPlxuICAgICAgICA8dGQ+e3tsb2cuZmlsZW5hbWV9fTwvdGQ+XG4gICAgICAgIDx0ZD5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImxvZy5jb2x1bW47IGVsc2UgbmFcIj57e2xvZy5jb2x1bW59fTwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwibG9nLnRlcm1JZDsgZWxzZSBuYVwiPnt7bG9nLnRlcm1JZH19PC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQ+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvZy5tb2RlbDsgZWxzZSBuYVwiPlxuICAgICAgICAgICAgPHNwYW4+e3tsb2cubW9kZWx9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMVwiICpuZ0lmPVwibG9nLmtleVwiPi8ge3tsb2cua2V5fX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTFcIiAqbmdJZj1cImxvZy50ZXJtICYmIGxvZy50ZXJtICE9PSBsb2cudGVybUlkXCI+LyB7e2xvZy50ZXJtfX08L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvdGJvZHk+XG4gIDwvdGFibGU+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNsb2FkZXI+XG4gIDxkaXYgY2xhc3M9XCJoYXMtdGV4dC1jZW50ZXIgcHktM1wiPlxuICAgIDxmYS1pY29uIGljb249XCJzcGlubmVyXCIgW3B1bHNlXT1cInRydWVcIiBzaXplPVwibGdcIj48L2ZhLWljb24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNuYT5cbiAgPHNwYW4+LTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -9,10 +9,10 @@ const additionalKeys = [
9
9
  'methodModelDescription', 'description',
10
10
  'primary', 'emissionDuration', 'observations', 'statsDefinition',
11
11
  'term', 'source', 'variety', 'reliability', 'price', 'currency', 'cost', 'revenue', 'economicValueShare',
12
- 'impactAssessment', 'properties'
12
+ 'operation', 'impactAssessment', 'properties'
13
13
  ];
14
14
  const tableKeys = [
15
- 'inputs', 'transformation', 'value', 'dates', 'methodModel', 'methodTier', 'statsDefinition'
15
+ 'inputs', 'transformation', 'operation', 'value', 'dates', 'methodModel', 'methodTier', 'statsDefinition'
16
16
  ];
17
17
  export class NodeValueDetailsComponent {
18
18
  constructor() {
@@ -46,4 +46,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
46
46
  }], dataKey: [{
47
47
  type: Input
48
48
  }] } });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS12YWx1ZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtdmFsdWUtZGV0YWlscy9ub2RlLXZhbHVlLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS12YWx1ZS1kZXRhaWxzL25vZGUtdmFsdWUtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUdsRixPQUFPLEVBQUUsaUJBQWlCLEVBQWdCLE1BQU0seUJBQXlCLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUU3QyxNQUFNLGNBQWMsR0FBRztJQUNyQix3QkFBd0IsRUFBRSxhQUFhO0lBQ3ZDLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsaUJBQWlCO0lBQ2hFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsb0JBQW9CO0lBQ3hHLGtCQUFrQixFQUFFLFlBQVk7Q0FDakMsQ0FBQztBQUNGLE1BQU0sU0FBUyxHQUFHO0lBQ2hCLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsaUJBQWlCO0NBQzdGLENBQUM7QUFRRixNQUFNLE9BQU8seUJBQXlCO0lBTnRDO1FBY1MsWUFBTyxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLFNBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLGlCQUFpQixDQUFDLENBQUM7UUFDdkMsbUJBQWMsR0FBRyxjQUFjLENBQUM7UUFDaEMsY0FBUyxHQUFHLFNBQVMsQ0FBQztLQVM5QjtJQVBDLElBQVcsSUFBSTs7UUFDYixPQUFPLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFDLE9BQUEsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsS0FBSyxLQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQSxFQUFBLENBQUMsQ0FBQztJQUMvRixDQUFDOzt1SEFuQlUseUJBQXlCOzJHQUF6Qix5QkFBeUIsaUlDdEJ0QyxteUNBK0JBOzRGRFRhLHlCQUF5QjtrQkFOckMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxXQUFXLEVBQUUscUNBQXFDO29CQUNsRCxTQUFTLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQztvQkFDbEQsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzhCQUdRLElBQUk7c0JBRFYsS0FBSztnQkFHQyxRQUFRO3NCQURkLEtBQUs7Z0JBR0MsT0FBTztzQkFEYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm9kZVR5cGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5cbmltcG9ydCB7IGdyb3VwcGVkVmFsdWVLZXlzLCBJR3JvdXBlZE5vZGUgfSBmcm9tICcuLi8uLi9jb21tb24vbm9kZS11dGlscyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWxzJztcblxuY29uc3QgYWRkaXRpb25hbEtleXMgPSBbXG4gICdtZXRob2RNb2RlbERlc2NyaXB0aW9uJywgJ2Rlc2NyaXB0aW9uJyxcbiAgJ3ByaW1hcnknLCAnZW1pc3Npb25EdXJhdGlvbicsICdvYnNlcnZhdGlvbnMnLCAnc3RhdHNEZWZpbml0aW9uJyxcbiAgJ3Rlcm0nLCAnc291cmNlJywgJ3ZhcmlldHknLCAncmVsaWFiaWxpdHknLCAncHJpY2UnLCAnY3VycmVuY3knLCAnY29zdCcsICdyZXZlbnVlJywgJ2Vjb25vbWljVmFsdWVTaGFyZScsXG4gICdpbXBhY3RBc3Nlc3NtZW50JywgJ3Byb3BlcnRpZXMnXG5dO1xuY29uc3QgdGFibGVLZXlzID0gW1xuICAnaW5wdXRzJywgJ3RyYW5zZm9ybWF0aW9uJywgJ3ZhbHVlJywgJ2RhdGVzJywgJ21ldGhvZE1vZGVsJywgJ21ldGhvZFRpZXInLCAnc3RhdHNEZWZpbml0aW9uJ1xuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtbm9kZS12YWx1ZS1kZXRhaWxzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUtdmFsdWUtZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25vZGUtdmFsdWUtZGV0YWlscy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBOb2RlVmFsdWVEZXRhaWxzQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgcHVibGljIGRhdGE/OiBJR3JvdXBlZE5vZGU8VD47XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBub2RlVHlwZT86IE5vZGVUeXBlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0YUtleT86IHN0cmluZztcblxuICBwdWJsaWMgYmFzZVVybCA9IGJhc2VVcmwoKTtcbiAgcHVibGljIGtleXMgPSBbJ3ZhbHVlJywgLi4uZ3JvdXBwZWRWYWx1ZUtleXNdO1xuICBwdWJsaWMgYWRkaXRpb25hbEtleXMgPSBhZGRpdGlvbmFsS2V5cztcbiAgcHVibGljIHRhYmxlS2V5cyA9IHRhYmxlS2V5cztcblxuICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YT8ubm9kZXNbMF1bJ0B0eXBlJ107XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnRhYmxlS2V5cyA9IHRhYmxlS2V5cy5maWx0ZXIoa2V5ID0+ICh0aGlzLmRhdGE/Lm5vZGVzIHx8IFtdKS5zb21lKG5vZGUgPT4ga2V5IGluIG5vZGUpKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqYmluZE9uY2U9XCJkYXRhXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5ub2Rlcz8ubGVuZ3RoID09PSAxOyBlbHNlIHNob3dUYWJsZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlzXCI+XG4gICAgICA8aGUtbGluay1rZXktdmFsdWUgW25vZGVdPVwiZGF0YSEubm9kZXNbMF1cIiBbbm9kZVR5cGVdPVwibm9kZVR5cGVcIiBbZGF0YUtleV09XCJkYXRhS2V5XCIgW2tleV09XCJrZXlcIj48L2hlLWxpbmsta2V5LXZhbHVlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGtleSBvZiBhZGRpdGlvbmFsS2V5c1wiPlxuICAgICAgPGhlLWxpbmsta2V5LXZhbHVlIFtub2RlXT1cImRhdGEhLm5vZGVzWzBdXCIgW25vZGVUeXBlXT1cIm5vZGVUeXBlXCIgW2RhdGFLZXldPVwiZGF0YUtleVwiIFtrZXldPVwia2V5XCI+PC9oZS1saW5rLWtleS12YWx1ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNzaG93VGFibGU+XG4gIDxoZS1saW5rLWtleS12YWx1ZSBbbm9kZV09XCJkYXRhIS5ub2Rlc1swXVwiIFtub2RlVHlwZV09XCJub2RlVHlwZVwiIFtkYXRhS2V5XT1cImRhdGFLZXlcIiBrZXk9XCJ0ZXJtXCI+PC9oZS1saW5rLWtleS12YWx1ZT5cblxuICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyIG10LTJcIj5cbiAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1uYXJyb3dcIj5cbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBrZXkgb2YgdGFibGVLZXlzXCI+XG4gICAgICAgICAgPGEgW2hyZWZdPVwiYmFzZVVybCArICcvc2NoZW1hLycgKyB0eXBlICsgJyMnICsga2V5XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGI+e3trZXl9fTwvYj48L2E+XG4gICAgICAgIDwvdGg+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PlxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YSEubm9kZXNcIj5cbiAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGtleSBvZiB0YWJsZUtleXNcIj5cbiAgICAgICAgICAgIDxoZS1saW5rLWtleS12YWx1ZSBbbm9kZV09XCJub2RlXCIgW25vZGVUeXBlXT1cIm5vZGVUeXBlXCIgW2RhdGFLZXldPVwiZGF0YUtleVwiIFtrZXldPVwia2V5XCI+PC9oZS1saW5rLWtleS12YWx1ZT5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS12YWx1ZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtdmFsdWUtZGV0YWlscy9ub2RlLXZhbHVlLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS12YWx1ZS1kZXRhaWxzL25vZGUtdmFsdWUtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUdsRixPQUFPLEVBQUUsaUJBQWlCLEVBQWdCLE1BQU0seUJBQXlCLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUU3QyxNQUFNLGNBQWMsR0FBRztJQUNyQix3QkFBd0IsRUFBRSxhQUFhO0lBQ3ZDLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsaUJBQWlCO0lBQ2hFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsb0JBQW9CO0lBQ3hHLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxZQUFZO0NBQzlDLENBQUM7QUFDRixNQUFNLFNBQVMsR0FBRztJQUNoQixRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxpQkFBaUI7Q0FDMUcsQ0FBQztBQVFGLE1BQU0sT0FBTyx5QkFBeUI7SUFOdEM7UUFjUyxZQUFPLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDcEIsU0FBSSxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsaUJBQWlCLENBQUMsQ0FBQztRQUN2QyxtQkFBYyxHQUFHLGNBQWMsQ0FBQztRQUNoQyxjQUFTLEdBQUcsU0FBUyxDQUFDO0tBUzlCO0lBUEMsSUFBVyxJQUFJOztRQUNiLE9BQU8sTUFBQSxJQUFJLENBQUMsSUFBSSwwQ0FBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQUMsT0FBQSxDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsSUFBSSwwQ0FBRSxLQUFLLEtBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFBLEVBQUEsQ0FBQyxDQUFDO0lBQy9GLENBQUM7O3VIQW5CVSx5QkFBeUI7MkdBQXpCLHlCQUF5QixpSUN0QnRDLG15Q0ErQkE7NEZEVGEseUJBQXlCO2tCQU5yQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFdBQVcsRUFBRSxxQ0FBcUM7b0JBQ2xELFNBQVMsRUFBRSxDQUFDLHFDQUFxQyxDQUFDO29CQUNsRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OEJBR1EsSUFBSTtzQkFEVixLQUFLO2dCQUdDLFFBQVE7c0JBRGQsS0FBSztnQkFHQyxPQUFPO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb2RlVHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcblxuaW1wb3J0IHsgZ3JvdXBwZWRWYWx1ZUtleXMsIElHcm91cGVkTm9kZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9ub2RlLXV0aWxzJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuXG5jb25zdCBhZGRpdGlvbmFsS2V5cyA9IFtcbiAgJ21ldGhvZE1vZGVsRGVzY3JpcHRpb24nLCAnZGVzY3JpcHRpb24nLFxuICAncHJpbWFyeScsICdlbWlzc2lvbkR1cmF0aW9uJywgJ29ic2VydmF0aW9ucycsICdzdGF0c0RlZmluaXRpb24nLFxuICAndGVybScsICdzb3VyY2UnLCAndmFyaWV0eScsICdyZWxpYWJpbGl0eScsICdwcmljZScsICdjdXJyZW5jeScsICdjb3N0JywgJ3JldmVudWUnLCAnZWNvbm9taWNWYWx1ZVNoYXJlJyxcbiAgJ29wZXJhdGlvbicsICdpbXBhY3RBc3Nlc3NtZW50JywgJ3Byb3BlcnRpZXMnXG5dO1xuY29uc3QgdGFibGVLZXlzID0gW1xuICAnaW5wdXRzJywgJ3RyYW5zZm9ybWF0aW9uJywgJ29wZXJhdGlvbicsICd2YWx1ZScsICdkYXRlcycsICdtZXRob2RNb2RlbCcsICdtZXRob2RUaWVyJywgJ3N0YXRzRGVmaW5pdGlvbidcbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLW5vZGUtdmFsdWUtZGV0YWlscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9ub2RlLXZhbHVlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ub2RlLXZhbHVlLWRldGFpbHMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTm9kZVZhbHVlRGV0YWlsc0NvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkYXRhPzogSUdyb3VwZWROb2RlPFQ+O1xuICBASW5wdXQoKVxuICBwdWJsaWMgbm9kZVR5cGU/OiBOb2RlVHlwZTtcbiAgQElucHV0KClcbiAgcHVibGljIGRhdGFLZXk/OiBzdHJpbmc7XG5cbiAgcHVibGljIGJhc2VVcmwgPSBiYXNlVXJsKCk7XG4gIHB1YmxpYyBrZXlzID0gWyd2YWx1ZScsIC4uLmdyb3VwcGVkVmFsdWVLZXlzXTtcbiAgcHVibGljIGFkZGl0aW9uYWxLZXlzID0gYWRkaXRpb25hbEtleXM7XG4gIHB1YmxpYyB0YWJsZUtleXMgPSB0YWJsZUtleXM7XG5cbiAgcHVibGljIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGE/Lm5vZGVzWzBdWydAdHlwZSddO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy50YWJsZUtleXMgPSB0YWJsZUtleXMuZmlsdGVyKGtleSA9PiAodGhpcy5kYXRhPy5ub2RlcyB8fCBbXSkuc29tZShub2RlID0+IGtleSBpbiBub2RlKSk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKmJpbmRPbmNlPVwiZGF0YVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8ubm9kZXM/Lmxlbmd0aCA9PT0gMTsgZWxzZSBzaG93VGFibGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5c1wiPlxuICAgICAgPGhlLWxpbmsta2V5LXZhbHVlIFtub2RlXT1cImRhdGEhLm5vZGVzWzBdXCIgW25vZGVUeXBlXT1cIm5vZGVUeXBlXCIgW2RhdGFLZXldPVwiZGF0YUtleVwiIFtrZXldPVwia2V5XCI+PC9oZS1saW5rLWtleS12YWx1ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBrZXkgb2YgYWRkaXRpb25hbEtleXNcIj5cbiAgICAgIDxoZS1saW5rLWtleS12YWx1ZSBbbm9kZV09XCJkYXRhIS5ub2Rlc1swXVwiIFtub2RlVHlwZV09XCJub2RlVHlwZVwiIFtkYXRhS2V5XT1cImRhdGFLZXlcIiBba2V5XT1cImtleVwiPjwvaGUtbGluay1rZXktdmFsdWU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjc2hvd1RhYmxlPlxuICA8aGUtbGluay1rZXktdmFsdWUgW25vZGVdPVwiZGF0YSEubm9kZXNbMF1cIiBbbm9kZVR5cGVdPVwibm9kZVR5cGVcIiBbZGF0YUtleV09XCJkYXRhS2V5XCIga2V5PVwidGVybVwiPjwvaGUtbGluay1rZXktdmFsdWU+XG5cbiAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lciBtdC0yXCI+XG4gICAgPHRhYmxlIGNsYXNzPVwidGFibGUgaXMtbmFycm93XCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0aCAqbmdGb3I9XCJsZXQga2V5IG9mIHRhYmxlS2V5c1wiPlxuICAgICAgICAgIDxhIFtocmVmXT1cImJhc2VVcmwgKyAnL3NjaGVtYS8nICsgdHlwZSArICcjJyArIGtleVwiIHRhcmdldD1cIl9ibGFua1wiPjxiPnt7a2V5fX08L2I+PC9hPlxuICAgICAgICA8L3RoPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBub2RlIG9mIGRhdGEhLm5vZGVzXCI+XG4gICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBrZXkgb2YgdGFibGVLZXlzXCI+XG4gICAgICAgICAgICA8aGUtbGluay1rZXktdmFsdWUgW25vZGVdPVwibm9kZVwiIFtub2RlVHlwZV09XCJub2RlVHlwZVwiIFtkYXRhS2V5XT1cImRhdGFLZXlcIiBba2V5XT1cImtleVwiPjwvaGUtbGluay1rZXktdmFsdWU+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19