@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.
- package/bundles/hestia-earth-ui-components.umd.js +474 -473
- package/bundles/hestia-earth-ui-components.umd.js.map +1 -1
- package/common/clipboard/clipboard.component.d.ts +1 -0
- package/cycles/cycles-activity/cycles-activity.component.d.ts +1 -3
- package/cycles/cycles-activity-logs/cycles-activity-logs.component.d.ts +42 -10
- package/cycles/cycles-completeness/cycles-completeness.component.d.ts +1 -3
- package/cycles/cycles-emissions/cycles-emissions.component.d.ts +1 -3
- package/cycles/cycles-emissions-chart/cycles-emissions-chart.component.d.ts +1 -2
- package/cycles/cycles-emissions-logs/cycles-emissions-logs.component.d.ts +42 -6
- package/cycles/cycles-practices/cycles-practices.component.d.ts +1 -3
- package/cycles/cycles-practices-logs/cycles-practices-logs.component.d.ts +42 -10
- package/cycles/cycles-result/cycles-result.component.d.ts +1 -3
- package/cycles/cycles.model.d.ts +3 -4
- package/esm2015/common/clipboard/clipboard.component.js +5 -3
- package/esm2015/cycles/cycles-activity/cycles-activity.component.js +2 -8
- package/esm2015/cycles/cycles-activity-logs/cycles-activity-logs.component.js +11 -21
- package/esm2015/cycles/cycles-completeness/cycles-completeness.component.js +2 -8
- package/esm2015/cycles/cycles-emissions/cycles-emissions.component.js +2 -8
- package/esm2015/cycles/cycles-emissions-chart/cycles-emissions-chart.component.js +4 -9
- package/esm2015/cycles/cycles-emissions-logs/cycles-emissions-logs.component.js +12 -14
- package/esm2015/cycles/cycles-practices/cycles-practices.component.js +2 -8
- package/esm2015/cycles/cycles-practices-logs/cycles-practices-logs.component.js +10 -21
- package/esm2015/cycles/cycles-result/cycles-result.component.js +4 -12
- package/esm2015/cycles/cycles.model.js +4 -5
- package/esm2015/files/files-form/files-form.component.js +1 -1
- package/esm2015/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.js +4 -9
- package/esm2015/impact-assessments/impact-assessments-products/impact-assessments-products.component.js +2 -8
- package/esm2015/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.js +8 -12
- package/esm2015/node/index.js +2 -1
- package/esm2015/node/node-link/node-link.component.js +2 -2
- package/esm2015/node/node-logs-models/node-logs-models.component.js +56 -326
- package/esm2015/node/node-logs-models/node-logs-models.model.js +370 -0
- package/esm2015/node/node-missing-lookup-factors/node-missing-lookup-factors.component.js +1 -1
- package/esm2015/node/node-value-details/node-value-details.component.js +3 -3
- package/esm2015/node/node.service.js +1 -1
- package/esm2015/sites/sites-maps/sites-maps.component.js +3 -9
- package/esm2015/sites/sites-measurements/sites-measurements.component.js +2 -8
- package/esm2015/sites/sites-measurements-logs/sites-measurements-logs.component.js +8 -12
- package/fesm2015/hestia-earth-ui-components.js +339 -328
- package/fesm2015/hestia-earth-ui-components.js.map +1 -1
- package/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.d.ts +1 -2
- package/impact-assessments/impact-assessments-products/impact-assessments-products.component.d.ts +1 -3
- package/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.d.ts +37 -6
- package/node/index.d.ts +1 -0
- package/node/node-logs-models/node-logs-models.component.d.ts +24 -88
- package/node/node-logs-models/node-logs-models.model.d.ts +88 -0
- package/node/node-missing-lookup-factors/node-missing-lookup-factors.component.d.ts +2 -1
- package/node/node.service.d.ts +1 -31
- package/package.json +2 -2
- package/sites/sites-maps/sites-maps.component.d.ts +1 -3
- package/sites/sites-measurements/sites-measurements.component.d.ts +1 -3
- 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,
|
|
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,
|
|
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
|