@hestia-earth/ui-components 0.8.1 → 0.8.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.
@@ -436,11 +436,10 @@ export const groupLogsByTerm = (nodeType, logs, models, config, allOriginalValue
436
436
  ]).map(configModelWithDocs(models, configModelsData)));
437
437
  const keys = logKeys(termLogs, original, recalculated, models, configModelsData);
438
438
  const subValues = logSubValues(logs, termLogs, original, recalculated, models, configModelsData);
439
- const isRequired = !Object.values(termLogs)
439
+ const isRequired = !(Object
440
+ .values(termLogs)
440
441
  .filter(v => typeof v === 'object' && !Array.isArray(v) && !v.isKey)
441
- // ignore models that were never going to run
442
- .filter(isRunOrchestrator)
443
- .every(v => v.runRequired === false);
442
+ .every(v => v.runRequired === false));
444
443
  const nodeLog = dataWithConfigModelLogs(termLogs)({
445
444
  isOpen: true,
446
445
  canOpen: keys.length > 0 || subValues.length > 0,
@@ -485,4 +484,4 @@ export const logValueArray = (value) => [';', ':'].some(v => value.includes(v))
485
484
  return res.length <= 1 ? res.flat() : Object.fromEntries(res);
486
485
  }) :
487
486
  null;
488
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLW1vZGVscy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtbG9ncy1tb2RlbHMvbm9kZS1sb2dzLW1vZGVscy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFDSyxrQkFBa0IsRUFDbEIsWUFBWSxFQUFZLFVBQVUsRUFBRSxVQUFVLEVBQ3pELE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBRTFDLE9BQU8sRUFDNEQsVUFBVSxFQUMzRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUMvQyxNQUFNLDZCQUE2QixDQUFDO0FBb0NyQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBRTlDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFV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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzNCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ0osSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3QsIHRvQXJyYXksIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZpbGVUb0V4dCwgU3VwcG9ydGVkRXh0ZW5zaW9ucyB9IGZyb20gJ0BoZXN0aWEtZWFydGgvYXBpJztcbmltcG9ydCB7XG4gIEVtaXNzaW9uLCBFbWlzc2lvbk1ldGhvZFRpZXIsIElUZXJtSlNPTkxELCBQcm9kdWN0LCBJbnB1dCBhcyBIZXN0aWFJbnB1dCxcbiAgTm9kZVR5cGUsIFRlcm1UZXJtVHlwZSwgUHJvcGVydHksIFNjaGVtYVR5cGUsIGlzVHlwZU5vZGUsIEluZGljYXRvclxufSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyB1bmlxdWUsIGlzVW5kZWZpbmVkLCBpc0VtcHR5LCBpc051bWJlciB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuaW1wb3J0IHsgcHJvcGVydHlWYWx1ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMvZGlzdC90ZXJtJztcbmNvbnN0IGdldCA9IHJlcXVpcmUoJ2xvZGFzaC5nZXQnKTtcbmNvbnN0IHNldCA9IHJlcXVpcmUoJ2xvZGFzaC5zZXQnKTtcbmNvbnN0IG9yZGVyQnkgPSByZXF1aXJlKCdsb2Rhc2gub3JkZXJieScpO1xuXG5pbXBvcnQge1xuICBJT3JjaGVzdHJhdG9yQ29uZmlnLCBJT3JjaGVzdHJhdG9yTW9kZWxDb25maWcsIGZpbmRDb25maWdNb2RlbHMsIGZpbmRNb2RlbHMsIElNb2RlbCxcbiAgZmluZE1hdGNoaW5nTW9kZWwsIG1vZGVsUGFyYW1zLCBtb2RlbEtleVBhcmFtc1xufSBmcm9tICcuLi8uLi9lbmdpbmUvZW5naW5lLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlTWlzc2luZ0xvb2t1cExvZyB7XG4gIGZpbGVuYW1lOiBzdHJpbmc7XG4gIHRlcm1JZDogc3RyaW5nO1xuICBjb2x1bW46IHN0cmluZztcbiAgLy8gYXR0cmlidXRlcyBsaW5rZWQgdG8gdGhlIG1vZGVsc1xuICBtb2RlbD86IHN0cmluZztcbiAgdGVybT86IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlVGVybUxvZyB7XG4gIHJ1blJlcXVpcmVkPzogYm9vbGVhbjtcbiAgc2hvdWxkUnVuPzogYm9vbGVhbjtcbiAgc2hvdWxkUnVuT3JjaGVzdHJhdG9yPzogYm9vbGVhbjtcbiAgbWlzc2luZ0xvb2t1cHM/OiBJTm9kZU1pc3NpbmdMb29rdXBMb2dbXTtcbiAgcmVxdWlyZW1lbnRzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgbG9ncz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbiAgLy8gcG9zc2libGUgc3ViIHZhbHVlc1xuICBpbnB1dD86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBwcm9wZXJ0eT86IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlVGVybUxvZ3Mge1xuICBbbW9kZWxLZXk6IHN0cmluZ106IGFueSB8IElOb2RlVGVybUxvZztcbiAgbW9kZWxzOiBzdHJpbmdbXTtcbiAgaXNLZXk/OiBib29sZWFuO1xuICBpc1Byb3BlcnR5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTm9kZUxvZ3Mge1xuICBbdGVybTogc3RyaW5nXTogSU5vZGVUZXJtTG9ncztcbn1cblxuY29uc3QgdGVybVR5cGVzID0gT2JqZWN0LnZhbHVlcyhUZXJtVGVybVR5cGUpO1xuXG5jb25zdCBibGFua05vZGVUeXBlcyA9IE9iamVjdC52YWx1ZXMoU2NoZW1hVHlwZSkuZmlsdGVyKHQgPT4gIWlzVHlwZU5vZGUodCkpO1xuXG5jb25zdCBzY2hlbWFUeXBlc0xvd2VyQ2FzZSA9IE9iamVjdC52YWx1ZXMoU2NoZW1hVHlwZSkubWFwKHYgPT4gdi50b0xvd2VyQ2FzZSgpKTtcblxuY29uc3QgYmxhbmtOb2RlVHlwZXNMb3dlckNhc2UgPSBibGFua05vZGVUeXBlcy5tYXAodiA9PiB2LnRvTG93ZXJDYXNlKCkpO1xuXG5jb25zdCBtaXNzaW5nTG9va3VwUHJlZml4ID0gJ01pc3NpbmcgbG9va3VwJztcblxuY29uc3QgcGFyc2VGaWxlbmFtZSA9IChmaWxlcGF0aDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IFtmaWxlbmFtZV0gPSBmaWxlcGF0aC5zcGxpdCgnLicpO1xuICBjb25zdCBleHQgPSB0ZXJtVHlwZXMuaW5jbHVkZXMoZmlsZW5hbWUgYXMgYW55KSA/IFN1cHBvcnRlZEV4dGVuc2lvbnMueGxzeCA6IFN1cHBvcnRlZEV4dGVuc2lvbnMuY3N2O1xuICByZXR1cm4gZmlsZVRvRXh0KGZpbGVuYW1lLCBleHQpO1xufTtcblxuY29uc3QgcGFyc2VMb29rdXAgPSAoeyBjb2x1bW4sIHRlcm1pZCwgW21pc3NpbmdMb29rdXBQcmVmaXhdOiBtaXNzaW5nTG9va3VwIH0pID0+ICh7XG4gIGZpbGVuYW1lOiBwYXJzZUZpbGVuYW1lKG1pc3NpbmdMb29rdXApLCB0ZXJtSWQ6IHRlcm1pZCwgY29sdW1uXG59KTtcblxuY29uc3QgY3N2VmFsdWUgPSAodmFsdWU6IHN0cmluZykgPT4gKHZhbHVlIHx8ICcnKS5yZXBsYWNlKCdbJywgJycpLnJlcGxhY2UoJ10nLCAnJyk7XG5cbmNvbnN0IHBhcnNlTWVzc2FnZSA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShtZXNzYWdlKTtcbiAgICByZXR1cm4gZGF0YS5tZXNzYWdlLnNwbGl0KCcsJykucmVkdWNlKChwcmV2LCBwYXJ0cykgPT4ge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gcGFydHMuc3BsaXQoJz0nKTtcbiAgICAgIGNvbnN0IHZhbCA9IGNzdlZhbHVlKHZhbHVlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIC4uLihrZXkgJiYgdmFsID8geyBba2V5LnRyaW0oKV06IHZhbCB9IDoge30pXG4gICAgICB9O1xuICAgIH0sIHsgbG9nZ2VyOiBkYXRhLmxvZ2dlciB9KTtcbiAgfVxuICBjYXRjaCAoZXJyKSB7XG4gICAgLy8gbWFrZSBzdXJlIGl0IHdvcmtzIGV2ZW4gaWYgb25lIGxvZyBpcyBtYWxmb3JtZWRcbiAgICByZXR1cm4ge307XG4gIH1cbn07XG5cbmNvbnN0IG9taXRMb2dLZXlzID0gKGxvZzogYW55KSA9PlxuICBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMobG9nKS5maWx0ZXIoKFtrZXldKSA9PiAhc2NoZW1hVHlwZXNMb3dlckNhc2UuaW5jbHVkZXMoa2V5KSkpO1xuXG5jb25zdCBpbmNsdWRlQmxhbmtOb2RlcyA9IChsb2dzLCBsb2cpID0+XG4gIE9iamVjdFxuICAgIC5rZXlzKGxvZylcbiAgICAuZmlsdGVyKGtleSA9PiBibGFua05vZGVUeXBlc0xvd2VyQ2FzZS5pbmNsdWRlcyhrZXkpKVxuICAgIC5yZWR1Y2UoKHByZXYsIGtleSkgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBba2V5XTogdW5pcXVlKFtcbiAgICAgICAgLi4uKCh0eXBlb2YgcHJldltrZXldID09PSAnc3RyaW5nJyA/IFtwcmV2W2tleV1dIDogcHJldltrZXldKSB8fCBbXSksXG4gICAgICAgIGxvZ1trZXldXG4gICAgICBdKVxuICAgIH0pLCBsb2dzKTtcblxuY29uc3QgZ3JvdXBMb2cgPSAoZ3JvdXAsIHsgbG9nZ2VyLCB0ZXJtLCBtb2RlbCwga2V5LCBzaG91bGRfcnVuLCBydW5fcmVxdWlyZWQsIHByb3BlcnR5LCAuLi5sb2cgfTogYW55KSA9PiB7XG4gIGNvbnN0IGlzT3JjaGVzdHJhdG9yID0gbG9nZ2VyLmluY2x1ZGVzKCdvcmNoZXN0cmF0b3InKTtcbiAgY29uc3QgaXNLZXkgPSAhaXNPcmNoZXN0cmF0b3IgJiYgISFrZXk7XG4gIGNvbnN0IGlzUHJvcGVydHkgPSAhaXNPcmNoZXN0cmF0b3IgJiYgISFwcm9wZXJ0eTtcbiAgY29uc3QgcGFyZW50TG9nS2V5ID0gW2BbXCIke3Rlcm19XCJdYCwgIWlzT3JjaGVzdHJhdG9yICYmIGtleSB8fCBwcm9wZXJ0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy4nKTtcbiAgY29uc3QgbG9nTW9kZWxLZXkgPSBbcGFyZW50TG9nS2V5LCBtb2RlbF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy4nKTtcblxuICBzZXQoZ3JvdXAsIGAke3BhcmVudExvZ0tleX0ubW9kZWxzYCwgdW5pcXVlKFtcbiAgICAuLi5nZXQoZ3JvdXAsIGAke3BhcmVudExvZ0tleX0ubW9kZWxzYCwgW10pLFxuICAgIG1vZGVsXG4gIF0pKTtcbiAgc2V0KGdyb3VwLCBgJHtwYXJlbnRMb2dLZXl9LmlzS2V5YCwgaXNLZXkpO1xuICBzZXQoZ3JvdXAsIGAke3BhcmVudExvZ0tleX0uaXNQcm9wZXJ0eWAsIGlzUHJvcGVydHkpO1xuXG4gIGxldCBkYXRhID0gZ2V0KGdyb3VwLCBsb2dNb2RlbEtleSwge30pO1xuXG4gIGRhdGEgPSBpbmNsdWRlQmxhbmtOb2RlcyhkYXRhLCBsb2cpO1xuXG4gIGlmICh0eXBlb2Ygc2hvdWxkX3J1biAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zdCBzaG91bGRSdW4gPSBzaG91bGRfcnVuID09PSAnVHJ1ZSc7XG5cbiAgICBkYXRhID0gaXNPcmNoZXN0cmF0b3IgP1xuICAgICAge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBzaG91bGRSdW5PcmNoZXN0cmF0b3I6IHNob3VsZFJ1blxuICAgICAgfSA6XG4gICAgICB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIC4uLm9taXRMb2dLZXlzKGxvZyksXG4gICAgICAgIHNob3VsZFJ1blxuICAgICAgfTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgcnVuX3JlcXVpcmVkICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IHJ1blJlcXVpcmVkID0gcnVuX3JlcXVpcmVkID09PSAnVHJ1ZSc7XG5cbiAgICBkYXRhID0gIHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICAuLi4ocnVuUmVxdWlyZWQgPyB7fSA6IG9taXRMb2dLZXlzKGxvZykpLCAvLyBubyBuZWVkIHRvIHNhdmUgbG9ncyBpZiB3ZSBuZWVkIHRvIHJ1biB0aGUgbW9kZWxcbiAgICAgIHJ1blJlcXVpcmVkXG4gICAgfTtcbiAgfVxuICBlbHNlIGlmICgncmVxdWlyZW1lbnRzJyBpbiBsb2cpIHtcbiAgICBjb25zdCB7IHJlcXVpcmVtZW50cywgLi4ubG9nRGF0YSB9ID0gbG9nO1xuXG4gICAgZGF0YS5yZXF1aXJlbWVudHMgPSB7XG4gICAgICAuLi4oZGF0YS5yZXF1aXJlbWVudHMgfHwge30pLFxuICAgICAgLi4ubG9nRGF0YVxuICAgIH07XG4gIH1cbiAgZWxzZSBpZiAobWlzc2luZ0xvb2t1cFByZWZpeCBpbiBsb2cpIHtcbiAgICBkYXRhLm1pc3NpbmdMb29rdXBzID0gdW5pcXVlKFtcbiAgICAgIC4uLihkYXRhLm1pc3NpbmdMb29rdXBzIHx8IFtdKSxcbiAgICAgIHBhcnNlTG9va3VwKGxvZylcbiAgICBdKTtcbiAgfVxuICBlbHNlIGlmICghaXNPcmNoZXN0cmF0b3IpIHtcbiAgICBkYXRhLmxvZ3MgPSB7XG4gICAgICAuLi4oZGF0YS5sb2dzIHx8IHt9KSxcbiAgICAgIC4uLm9taXRMb2dLZXlzKGxvZylcbiAgICB9O1xuICB9XG5cbiAgc2V0KGdyb3VwLCBsb2dNb2RlbEtleSwgZGF0YSk7XG4gIHJldHVybiBncm91cDtcbn07XG5cbmNvbnN0IGdyb3VwTG9nU3ViVmFsdWUgPSAoZ3JvdXAsIGxvZywga2V5OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgaWQgPSBsb2dba2V5XTtcbiAgY29uc3QgZGF0YSA9IGdyb3VwTG9nKGdyb3VwW2lkXSB8fCB7fSwgbG9nKTtcbiAgZ3JvdXBbaWRdID0gZGF0YTtcblxuICBpZiAoa2V5ID09PSAndHJhbnNmb3JtYXRpb24nKSB7XG4gICAgLy8gYWRkIHZhbHVlIHRvIHRoZSBzYW1lIHRlcm0vbW9kZWwgb24gcGFyZW50IGdyb3VwXG4gICAgT2JqZWN0LmVudHJpZXMoZ3JvdXBbaWRdKS5tYXAoKFt0ZXJtLCBtb2RlbHNdKSA9PlxuICAgICAgT2JqZWN0LmtleXMobW9kZWxzKS5tYXAobW9kZWwgPT4ge1xuICAgICAgICBpZiAoZ3JvdXA/Llt0ZXJtXT8uW21vZGVsXSkge1xuICAgICAgICAgIGdyb3VwW3Rlcm1dW21vZGVsXVtrZXldID0gdW5pcXVlKFtcbiAgICAgICAgICAgIC4uLihncm91cFt0ZXJtXVttb2RlbF1ba2V5XSB8fCBbXSksXG4gICAgICAgICAgICBpZFxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZ3JvdXA7XG59O1xuXG5jb25zdCBzdWJWYWx1ZUtleXMgPSBbXG4gICd0cmFuc2Zvcm1hdGlvbidcbl07XG5cbmV4cG9ydCBjb25zdCBncm91cExvZ3NCeU1vZGVsID0gKGRhdGE6IHN0cmluZyk6IElOb2RlTG9ncyA9PlxuICBkYXRhLnRyaW0oKS5zcGxpdCgnXFxuJylcbiAgICAubWFwKHBhcnNlTWVzc2FnZSlcbiAgICAuZmlsdGVyKHYgPT4gISF2Py50ZXJtICYmIHY/LnRlcm0gIT09ICdOb25lJyAmJiAhIXY/Lm1vZGVsKVxuICAgIC5yZWR1Y2UoKGdyb3VwLCBsb2cpID0+IHtcbiAgICAgIGNvbnN0IHN1YlZhbHVlID0gc3ViVmFsdWVLZXlzLmZpbmQodiA9PiAhIWxvZ1t2XSk7XG4gICAgICByZXR1cm4gc3ViVmFsdWUgP1xuICAgICAgICBzdWJWYWx1ZSA9PT0gJ3RyYW5zZm9ybWF0aW9uJyA/XG4gICAgICAgICAgLy8gZm9yIHRyYW5zZm9ybWF0aW9uLCBkbyBub3QgYWRkIHRvIHRvcC1sZXZlbCBtb2RlbFxuICAgICAgICAgIGdyb3VwTG9nU3ViVmFsdWUoZ3JvdXAsIGxvZywgc3ViVmFsdWUpIDpcbiAgICAgICAgICBncm91cExvZyhncm91cExvZ1N1YlZhbHVlKGdyb3VwLCBsb2csIHN1YlZhbHVlKSwgbG9nKVxuICAgICAgICA6IGdyb3VwTG9nKGdyb3VwLCBsb2cpO1xuICAgIH0sIHt9KTtcblxuZXhwb3J0IGNvbnN0IGNvbXB1dGVUZXJtcyA9IChcbiAgb3JpZ2luYWxWYWx1ZXM6IGJsYW5rTm9kZVtdLCByZWNhbGN1bGF0ZWRWYWx1ZXM6IGJsYW5rTm9kZVtdLCB0ZXJtcz86IElUZXJtSlNPTkxEW10sIGZpbHRlclRlcm1UeXBlcz86IFRlcm1UZXJtVHlwZVtdXG4pID0+IGZyb20oXG4gICAgdGVybXM/Lmxlbmd0aCA/XG4gICAgICB0ZXJtcyA6XG4gICAgICBbXG4gICAgICAgIC4uLihvcmlnaW5hbFZhbHVlcyB8fCBbXSkubWFwKCh7IHRlcm0gfSkgPT4gdGVybSksXG4gICAgICAgIC4uLihyZWNhbGN1bGF0ZWRWYWx1ZXMgfHwgW10pLm1hcCgoeyB0ZXJtIH0pID0+IHRlcm0pXG4gICAgICBdLmZpbHRlcihub2RlID0+ICFmaWx0ZXJUZXJtVHlwZXM/Lmxlbmd0aCB8fCBmaWx0ZXJUZXJtVHlwZXMuaW5jbHVkZXMobm9kZS50ZXJtVHlwZSkpXG4gICkucGlwZShcbiAgICBkaXN0aW5jdCh2ID0+IHYhWydAaWQnXSksXG4gICAgdG9BcnJheSgpLFxuICAgIG1hcCh2ID0+IG9yZGVyQnkodiwgWyduYW1lJ10sIFsnYXNjJ10pKVxuICApLnRvUHJvbWlzZSgpO1xuXG5leHBvcnQgdHlwZSBibGFua05vZGUgPSBFbWlzc2lvbiB8IFByb2R1Y3QgfCBIZXN0aWFJbnB1dCB8IFByb3BlcnR5IHwgSW5kaWNhdG9yO1xuXG5leHBvcnQgZW51bSBMb2dTdGF0dXMge1xuICBzdWNjZXNzID0gJ3N1Y2Nlc3NmdWwnLFxuICBlcnJvciA9ICdmYWlsZWQnLFxuICBza2lwSGllcmFyY2h5ID0gJ25vdCBydW4gKG1vZGVsIGhpZ2hlciB1cCBoaWVyYXJjaHkgcnVuIGluc3RlYWQpJyxcbiAgZGF0YVByb3ZpZGVkID0gJ25vdCBydW4gKHVzZXIgcHJvdmlkZWQgZGF0YSByZXRhaW5lZCknLFxuICBub3RSZXF1aXJlZCA9ICdub3QgcmVsZXZhbnQnXG59XG5cbmNvbnN0IGhhc0xvZ3MgPSAobG9ncz86IElOb2RlVGVybUxvZykgPT4gISFsb2dzPy5yZXF1aXJlbWVudHMgfHwgISFsb2dzPy5sb2dzIHx8IGxvZ3M/Lm1pc3NpbmdMb29rdXBzPy5sZW5ndGggPiAwO1xuXG5jb25zdCBoYXNMb2dEZXRhaWxzID0gKHN0YXR1czogTG9nU3RhdHVzLCBsb2dzPzogSU5vZGVUZXJtTG9nKSA9PlxuICBbXG4gICAgTG9nU3RhdHVzLnN1Y2Nlc3MsXG4gICAgTG9nU3RhdHVzLmVycm9yXG4gIF0uaW5jbHVkZXMoc3RhdHVzKSAmJiBoYXNMb2dzKGxvZ3MpO1xuXG5jb25zdCBsb2dTdGF0dXMgPSAoZGF0YTogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlIHwgSUJsYW5rTm9kZUxvZywgbG9ncz86IElOb2RlVGVybUxvZywgaW5kZXg/OiBudW1iZXIpID0+IHtcbiAgY29uc3Qgd2l0aExvZ3MgPSBoYXNMb2cobG9ncyk7XG4gIGNvbnN0IGlzQ2FsY3VsYXRlZCA9IFtcbiAgICB0eXBlb2YgZGF0YS5vcmlnaW5hbFZhbHVlID09PSAndW5kZWZpbmVkJywgLy8gbm8gb3JpZ2luYWwgdmFsdWVcbiAgICBkYXRhLmlzUmVjYWxjdWxhdGVkIC8vIGlzIHJlY2FsY3VsYXRlZFxuICBdLmV2ZXJ5KEJvb2xlYW4pO1xuICAvLyBjYW4gYmUgbm90IHJlcXVpcmVkIGZvciBhIHNwZWNpZmljIG1vZGVsXG4gIGNvbnN0IGlzUmVxdWlyZWQgPSAhIWxvZ3MgJiYgJ3J1blJlcXVpcmVkJyBpbiBsb2dzID8gbG9ncy5ydW5SZXF1aXJlZCA6IGRhdGEuaXNSZXF1aXJlZDtcbiAgcmV0dXJuIHdpdGhMb2dzXG4gICAgPyAoXG4gICAgICAhaXNSZXF1aXJlZFxuICAgICAgICA/IExvZ1N0YXR1cy5ub3RSZXF1aXJlZFxuICAgICAgICA6IGlzUnVuT3JjaGVzdHJhdG9yKGxvZ3MpXG4gICAgICAgICAgPyAoXG4gICAgICAgICAgICAnc2hvdWxkUnVuJyBpbiBsb2dzXG4gICAgICAgICAgICAgID8gbG9ncy5zaG91bGRSdW5cbiAgICAgICAgICAgICAgICA/IGRhdGEuaXNSZWNhbGN1bGF0ZWRcbiAgICAgICAgICAgICAgICAgID8gTG9nU3RhdHVzLnN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgIDogTG9nU3RhdHVzLmRhdGFQcm92aWRlZFxuICAgICAgICAgICAgICAgIDogZGF0YS5pc1JlY2FsY3VsYXRlZCAmJiBpbmRleCA+IDBcbiAgICAgICAgICAgICAgICAgID8gTG9nU3RhdHVzLnNraXBIaWVyYXJjaHlcbiAgICAgICAgICAgICAgICAgIDogTG9nU3RhdHVzLmVycm9yXG4gICAgICAgICAgICAgIDogTG9nU3RhdHVzLmRhdGFQcm92aWRlZFxuICAgICAgICAgIClcbiAgICAgICAgICA6IGRhdGEuaXNSZWNhbGN1bGF0ZWRcbiAgICAgICAgICAgID8gTG9nU3RhdHVzLnNraXBIaWVyYXJjaHlcbiAgICAgICAgICAgIDogTG9nU3RhdHVzLmRhdGFQcm92aWRlZFxuICAgIClcbiAgICA6IChcbiAgICAgIGlzQ2FsY3VsYXRlZFxuICAgICAgICA/IExvZ1N0YXR1cy5za2lwSGllcmFyY2h5XG4gICAgICAgIDogTG9nU3RhdHVzLmRhdGFQcm92aWRlZFxuICAgICk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb25maWdNb2RlbCB7XG4gIG1ldGhvZElkOiBzdHJpbmc7XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2c7XG4gIHNob3dMb2dzPzogYm9vbGVhbjtcbiAgc3RhdHVzPzogTG9nU3RhdHVzO1xuICBtb2RlbD86IElNb2RlbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQmxhbmtOb2RlTG9nU3ViVmFsdWUge1xuICBrZXk6IHN0cmluZztcbiAgc2hvd1VuaXRzOiBib29sZWFuO1xuICBvcmlnaW5hbFZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuO1xuICByZWNhbGN1bGF0ZWRWYWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbjtcbiAgaXNSZWNhbGN1bGF0ZWQ6IGJvb2xlYW47XG4gIGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuICBpZD86IGFueTtcbiAgY29uZmlnTW9kZWxzPzogSUNvbmZpZ01vZGVsW107XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2dzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCbGFua05vZGVMb2cge1xuICBpc09wZW46IGJvb2xlYW47XG4gIGNhbk9wZW46IGJvb2xlYW47XG4gIHRlcm06IElUZXJtSlNPTkxEO1xuICB0ZXJtSWQ6IHN0cmluZztcbiAgdHlwZT86IFNjaGVtYVR5cGU7XG4gIGNvbmZpZ01vZGVsczogKElDb25maWdNb2RlbCB8IElDb25maWdNb2RlbFtdKVtdO1xuICBvcmlnaW5hbDogYmxhbmtOb2RlW107XG4gIG9yaWdpbmFsVmFsdWU6IG51bWJlcjtcbiAgLy8gd2hlbiBtdWx0aXBsZSBtb2RlbHMgYXJlIHJ1bm5pbmcgaW4gcGFyYWxsZWxcbiAgb3JpZ2luYWxWYWx1ZUJ5TWV0aG9kSWQ/OiB7XG4gICAgW21ldGhvZElkOiBzdHJpbmddOiBudW1iZXI7XG4gIH07XG4gIHJlY2FsY3VsYXRlZDogYmxhbmtOb2RlW107XG4gIHJlY2FsY3VsYXRlZFZhbHVlOiBudW1iZXI7XG4gIC8vIHdoZW4gbXVsdGlwbGUgbW9kZWxzIGFyZSBydW5uaW5nIGluIHBhcmFsbGVsXG4gIHJlY2FsY3VsYXRlZFZhbHVlQnlNZXRob2RJZD86IHtcbiAgICBbbWV0aG9kSWQ6IHN0cmluZ106IG51bWJlcjtcbiAgfTtcbiAgaXNPcmlnaW5hbDogYm9vbGVhbjtcbiAgaXNSZWNhbGN1bGF0ZWQ6IGJvb2xlYW47XG4gIGhhc0RhdGE6IGJvb2xlYW47XG4gIGlzUmVxdWlyZWQ6IGJvb2xlYW47XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2dzO1xuICBrZXlzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXTtcbiAgc3ViVmFsdWVzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXTtcbiAgLy8gbW9kZWxzIGFyZSBwcmVzZW50IGFzIHdlbGwgaW4gb25lIG9mIHRoZSBTdWJWYWx1ZXMsIGRvIG5vdCBzaG93IHR3aWNlXG4gIG1vZGVsc0luU3ViVmFsdWVzPzogYm9vbGVhbjtcbiAgLy8gY29udGFpbnMgbXVsdGlwbGUgbW9kZWxzIGFsbCBydW5uaW5nIGluIHBhcmFsbGVsXG4gIGFsbFBhcmFsbGVsPzogYm9vbGVhbjtcbn1cblxuY29uc3QgZmlsdGVyUmVxdWlyZWRDb25maWdNb2RlbCA9ICh7IHN0YXR1cyB9OiBJQ29uZmlnTW9kZWwpID0+IHN0YXR1cyAhPT0gTG9nU3RhdHVzLm5vdFJlcXVpcmVkO1xuXG5jb25zdCBmaWx0ZXJSZXF1aXJlZENvbmZpZ01vZGVscyA9IChtb2RlbHM6IChJQ29uZmlnTW9kZWwgfCBJQ29uZmlnTW9kZWxbXSlbXSkgPT5cbiAgbW9kZWxzXG4gICAgLmZpbHRlcih2ID0+IEFycmF5LmlzQXJyYXkodikgfHwgZmlsdGVyUmVxdWlyZWRDb25maWdNb2RlbCh2KSlcbiAgICAubWFwKHYgPT4gQXJyYXkuaXNBcnJheSh2KSA/IHYuZmlsdGVyKGZpbHRlclJlcXVpcmVkQ29uZmlnTW9kZWwpIDogdik7XG5cbmNvbnN0IG1lcmdlU3ViVmFsdWVzID0gKHZhbHVlczogYW55W10pOiBhbnlbXSA9PlxuICBPYmplY3QudmFsdWVzKFxuICAgIHZhbHVlcy5yZWR1Y2UoKHByZXYsIHsgaWQsIGtleSwgY29uZmlnTW9kZWxzLCAuLi5kYXRhIH0pID0+IHtcbiAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IFtrZXksIGlkXS5maWx0ZXIoQm9vbGVhbikuam9pbignLicpO1xuICAgICAgcHJldlt1bmlxdWVLZXldID0ge1xuICAgICAgICAuLi5PYmplY3QuYXNzaWduKHt9LCBwcmV2W3VuaXF1ZUtleV0sIGRhdGEpLFxuICAgICAgICBpZCxcbiAgICAgICAga2V5LFxuICAgICAgICBjb25maWdNb2RlbHM6IHVuaXF1ZShbLi4uKChwcmV2W3VuaXF1ZUtleV0gfHwge30pLmNvbmZpZ01vZGVscyB8fCBbXSksIC4uLihjb25maWdNb2RlbHMgfHwgW10pXSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCB7fSlcbiAgKTtcblxuY29uc3QgcmVkdWNlVmFsdWVzID0gKHZhbHVlczogYW55W10sIHRlcm1JZDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHByb3BlcnR5VmFsdWVzID0gdmFsdWVzXG4gICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiBwcm9wZXJ0eVZhbHVlKHZhbHVlLCB0ZXJtSWQpKVxuICAgIC8vIHByb3BlcnR5VmFsdWUgbWF5IHJldHVybiBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlcmVmb3JlIHJlbW92ZSB0aGVtIGZyb20gdG90YWxcbiAgICAuZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCk7XG4gIHJldHVybiBwcm9wZXJ0eVZhbHVlcy5sZW5ndGggPyBwcm9wZXJ0eVZhbHVlcy5yZWR1Y2UoKHAsIHYpID0+IHAgKyB2LCAwKSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGlzUnVuT3JjaGVzdHJhdG9yID0gKGxvZzogSU5vZGVUZXJtTG9nKSA9PiAhKCdzaG91bGRSdW5PcmNoZXN0cmF0b3InIGluIGxvZykgfHwgbG9nLnNob3VsZFJ1bk9yY2hlc3RyYXRvcjtcblxuY29uc3QgaGFzTG9nID0gKGxvZzogSU5vZGVUZXJtTG9nLCB3aXRoT3JjaGVzdHJhdG9yID0gdHJ1ZSkgPT5cbiAgISFsb2cgJiYgKFxuICAgICdzaG91bGRSdW4nIGluIGxvZyB8fFxuICAgICdydW5SZXF1aXJlZCcgaW4gbG9nIHx8XG4gICAgKHdpdGhPcmNoZXN0cmF0b3IgJiYgJ3Nob3VsZFJ1bk9yY2hlc3RyYXRvcicgaW4gbG9nKVxuICApO1xuXG5jb25zdCBpc1JlY2FsY3VsYXRlZCA9ICh2YWx1ZXM6IGJsYW5rTm9kZVtdLCBrZXkgPSAndmFsdWUnKSA9PiB2YWx1ZXMuc29tZSh2ID0+IChbXG4gIC4uLih2LmFkZGVkIHx8IFtdKSxcbiAgLi4uKHYudXBkYXRlZCB8fCBbXSlcbl0pLmluY2x1ZGVzKGtleSkpO1xuXG5jb25zdCBibGFua05vZGVWYWx1ZUJ5S2V5OiB7XG4gIFtrZXk6IHN0cmluZ106ICh2YWx1ZXM6IGJsYW5rTm9kZVtdLCBrZXk/OiBzdHJpbmcsIGlkPzogc3RyaW5nKSA9PiBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuO1xufSA9IHtcbiAgcHJvcGVydHk6ICh2YWx1ZXM6IChFbWlzc2lvbiB8IFByb2R1Y3QgfCBIZXN0aWFJbnB1dClbXSwgX2ssIGlkKSA9PiAhIWlkICYmIHZhbHVlcz8ubGVuZ3RoXG4gICAgPyAodmFsdWVzWzBdLnByb3BlcnRpZXMgfHwgW10pLmZpbmQocCA9PiBwLnRlcm1bJ0BpZCddID09PSBpZCk/LnZhbHVlIHx8ICcnXG4gICAgOiAnJyxcbiAgaW5wdXQ6ICh2YWx1ZXM6IEVtaXNzaW9uW10sIF9rLCBpZCkgPT4gISFpZCAmJiAodmFsdWVzIHx8IFtdKS5maWx0ZXIodiA9PiB2WydAdHlwZSddID09PSBTY2hlbWFUeXBlLkVtaXNzaW9uKS5sZW5ndGhcbiAgICA/IHByb3BlcnR5VmFsdWUodmFsdWVzLmZpbmQoKHsgaW5wdXRzIH0pID0+IChpbnB1dHMgfHwgW10pLnNvbWUoaW5wdXQgPT4gaW5wdXRbJ0BpZCddID09PSBpZCkpPy52YWx1ZSwgaWQpXG4gICAgOiAnJyxcbiAgdHJhbnNmb3JtYXRpb246ICh2YWx1ZXM6IEVtaXNzaW9uW10sIF9rLCBpZCkgPT4gdmFsdWVzLmxlbmd0aFxuICAgID8gcHJvcGVydHlWYWx1ZSh2YWx1ZXMuZmluZCgoeyB0cmFuc2Zvcm1hdGlvbiB9KSA9PiB0cmFuc2Zvcm1hdGlvbj8uWydAaWQnXSA9PT0gaWQpPy52YWx1ZSwgaWQpXG4gICAgOiAnJyxcbiAgZGVmYXVsdDogKGJsYW5rTm9kZXMsIGtleSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gYmxhbmtOb2Rlcz8ubGVuZ3RoID8gYmxhbmtOb2Rlc1swXVtrZXldIDogbnVsbDtcbiAgICByZXR1cm4gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nLCAndW5kZWZpbmVkJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKVxuICAgICAgPyBpc1VuZGVmaW5lZCh2YWx1ZSlcbiAgICAgID8gJydcbiAgICAgIDogdmFsdWVcbiAgICAgIDogbnVsbDtcbiAgfVxufTtcblxuY29uc3QgYmxhbmtOb2RlVmFsdWUgPSAoYmxhbmtOb2RlczogYmxhbmtOb2RlW10sIGtleTogc3RyaW5nLCBpZD86IHN0cmluZykgPT5cbiAgYmxhbmtOb2RlVmFsdWVCeUtleVtrZXkgaW4gYmxhbmtOb2RlVmFsdWVCeUtleSA/IGtleSA6ICdkZWZhdWx0J10oYmxhbmtOb2Rlcywga2V5LCBpZCk7XG5cbmNvbnN0IHN1YlZhbHVlTG9nS2V5ID0gKHsga2V5LCBpZCB9OiBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpOiBzdHJpbmcgPT5cbiAga2V5ID09PSAndHJhbnNmb3JtYXRpb24nID8ga2V5IDogKGlkIHx8IGtleSB8fCBudWxsKTtcblxuY29uc3QgaW5wdXRWYWx1ZSA9ICh7IHZhbHVlLCBjb2VmZmljaWVudCB9OiBhbnkgPSB7fSkgPT5cbiAgW3ZhbHVlLCBjb2VmZmljaWVudF0uZXZlcnkoaXNOdW1iZXIpID8gK3ZhbHVlICogK2NvZWZmaWNpZW50IDogdW5kZWZpbmVkO1xuXG5jb25zdCBsb2dTdWJWYWx1ZSA9IChsb2dzOiBJTm9kZVRlcm1Mb2dzLCBrZXk6IHN0cmluZywgcHJvcDogc3RyaW5nLCBzaG93VW5pdHMgPSBmYWxzZSkgPT4ge1xuICBjb25zdCBsb2cgPSBsb2dzW2tleV0/Lltwcm9wXTtcbiAgcmV0dXJuIGxvZyA/IChcbiAgICBBcnJheS5pc0FycmF5KGxvZykgP1xuICAgICAgKGxvZyBhcyBzdHJpbmdbXSkubWFwKGlkID0+ICh7XG4gICAgICAgIGtleTogcHJvcCwgaWQsIHNob3dVbml0cyxcbiAgICAgICAgLy8gcmVjYWxjdWxhdGVkVmFsdWU6IGlucHV0VmFsdWUobG9nc1trZXldPy5sb2dzPy5baWRdKVxuICAgICAgfSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpKSA6XG4gICAgICB7XG4gICAgICAgIGtleTogcHJvcCwgaWQ6IGxvZywgc2hvd1VuaXRzLFxuICAgICAgICAvLyByZWNhbGN1bGF0ZWRWYWx1ZTogaW5wdXRWYWx1ZShsb2dzW2tleV0/LmxvZ3M/Lltsb2ddKVxuICAgICAgfSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWVcbiAgKSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGxvZ1Byb3BlcnRpZXMgPSAobm9kZXM6IGJsYW5rTm9kZVtdLCBtb2RlbHM6IElNb2RlbFtdKSA9PlxuICBub2Rlcy5mbGF0TWFwKG5vZGUgPT5cbiAgICAoKG5vZGUgYXMgYW55KS5wcm9wZXJ0aWVzIHx8IFtdKS5tYXAoKHsgdGVybSB9KSA9PiB0ZXJtWydAaWQnXSlcbiAgKS5tYXAoaWQgPT4gKHsga2V5OiAncHJvcGVydHknLCBpZCwgc2hvd1VuaXRzOiBmYWxzZSwgY29uZmlnTW9kZWxzOiBmaW5kTW9kZWxzKG1vZGVscywgaWQpLm1hcCgoeyBtb2RlbCB9KSA9PiBtb2RlbCkgfSkpO1xuXG4vKipcbiAqIEluY2x1ZGUgdHJhbnNmb3JtYXRpb24gbW9kZWwgKGNvcHkgRW1pc3Npb25zIGZyb20gVHJhbnNmb3JtYXRpb24gdG8gQ3ljbGUpIGFzIHN1YlZhbHVlLlxuICpcbiAqIEBwYXJhbSBlbWlzc2lvbnNcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IGxvZ0VtaXNzaW9uVHJhbnNmb3JtYXRpb25zID0gKGVtaXNzaW9uczogRW1pc3Npb25bXSkgPT5cbiAgZW1pc3Npb25zLmZpbHRlcigoeyB0cmFuc2Zvcm1hdGlvbiB9KSA9PiAhIXRyYW5zZm9ybWF0aW9uPy5bJ0BpZCddKS5tYXAoKHsgdHJhbnNmb3JtYXRpb24gfSkgPT4gKHtcbiAgICBpZDogdHJhbnNmb3JtYXRpb24/LlsnQGlkJ10sXG4gICAga2V5OiAndHJhbnNmb3JtYXRpb24nLFxuICAgIHNob3dVbml0czogdHJ1ZSxcbiAgICBjb25maWdNb2RlbHM6IFsnY3ljbGUvdHJhbnNmb3JtYXRpb24nXVxuICB9KSk7XG5cbmNvbnN0IGluY2x1ZGVDeWNsZVN1YlZhbHVlID0gKHN1YlZhbHVlczogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlW10pID0+XG4gIHN1YlZhbHVlcy5zb21lKHYgPT4gdi5rZXkgIT09ICdwcm9wZXJ0eScpO1xuXG5jb25zdCBjeWNsZVN1YlZhbHVlID0gKHtcbiAgdGVybUlkLCBjb25maWdNb2RlbHMsIGlzUmVxdWlyZWQsIHN1YlZhbHVlcywgb3JpZ2luYWwsIHJlY2FsY3VsYXRlZFxufTogSUJsYW5rTm9kZUxvZykgPT4ge1xuICBjb25zdCBvcmlnaW5hbFZhbHVlID0gcmVkdWNlVmFsdWVzKG9yaWdpbmFsLmZpbHRlcigodjogYW55KSA9PiAhdi5pbnB1dHM/Lmxlbmd0aCAmJiAhdi50cmFuc2Zvcm1hdGlvbiksIHRlcm1JZCk7XG4gIGNvbnN0IHJlY2FsY3VsYXRlZFZhbHVlcyA9IHJlY2FsY3VsYXRlZC5maWx0ZXIoKHY6IGFueSkgPT4gIXYuaW5wdXRzPy5sZW5ndGggJiYgIXYudHJhbnNmb3JtYXRpb24pO1xuICBjb25zdCByZWNhbGN1bGF0ZWRWYWx1ZSA9IHJlZHVjZVZhbHVlcyhyZWNhbGN1bGF0ZWRWYWx1ZXMsIHRlcm1JZCk7XG4gIHJldHVybiBpbmNsdWRlQ3ljbGVTdWJWYWx1ZShzdWJWYWx1ZXMpICYmICFpc0VtcHR5KHJlY2FsY3VsYXRlZFZhbHVlKSA/IHtcbiAgICBrZXk6ICdjeWNsZScsXG4gICAgc2hvd1VuaXRzOiB0cnVlLFxuICAgIGNvbmZpZ01vZGVscyxcbiAgICBpc1JlcXVpcmVkLFxuICAgIG9yaWdpbmFsVmFsdWUsXG4gICAgcmVjYWxjdWxhdGVkVmFsdWUsXG4gICAgaXNSZWNhbGN1bGF0ZWQ6IGlzUmVjYWxjdWxhdGVkKHJlY2FsY3VsYXRlZFZhbHVlcylcbiAgfSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWUgOiBudWxsO1xufTtcblxuY29uc3QgbG9nU3ViVmFsdWVzID0gKFxuICBhbGxMb2dzOiBJTm9kZUxvZ3MsIGxvZ3M6IElOb2RlVGVybUxvZ3MsIG9yaWdpbmFsOiBibGFua05vZGVbXSwgcmVjYWxjdWxhdGVkOiBibGFua05vZGVbXSwgbW9kZWxzOiBJTW9kZWxbXSxcbiAgeyBub2RlVHlwZSwgdHlwZSwgdGVybUlkIH06IElDb25maWdNb2RlbERvY3NEYXRhXG4pID0+XG4gIG1lcmdlU3ViVmFsdWVzKFtcbiAgICAvLyBpbmNsdWRlIHByb3BlcnRpZXNcbiAgICAuLi5PYmplY3Qua2V5cyhsb2dzKVxuICAgICAgLmZpbHRlcihpZCA9PiBsb2dzW2lkXS5pc1Byb3BlcnR5KVxuICAgICAgLm1hcChpZCA9PiAoe1xuICAgICAgICBpZCxcbiAgICAgICAga2V5OiAncHJvcGVydHknLFxuICAgICAgICBzaG93VW5pdHM6IGZhbHNlLFxuICAgICAgICBjb25maWdNb2RlbHM6IChsb2dzW2lkXS5tb2RlbHMgfHwgW10pLmZpbHRlcih2ID0+IGhhc0xvZyhsb2dzW2lkXVt2XSkpXG4gICAgICB9KSksXG4gICAgLi4uKHR5cGUgPT09IFNjaGVtYVR5cGUuRW1pc3Npb24gPyBsb2dFbWlzc2lvblRyYW5zZm9ybWF0aW9ucyhyZWNhbGN1bGF0ZWQgYXMgRW1pc3Npb25bXSkgOiBbXSksXG4gICAgLi4uT2JqZWN0LmtleXMobG9ncykuZmxhdE1hcChrZXkgPT5cbiAgICAgIFtcbiAgICAgICAgbG9nU3ViVmFsdWUobG9ncywga2V5LCAnaW5wdXQnLCB0cnVlKSxcbiAgICAgICAgbG9nU3ViVmFsdWUobG9ncywga2V5LCAncHJvcGVydHknKVxuICAgICAgXVxuICAgICAgICAuZmxhdCgpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLm1hcCh2ID0+ICh7IC4uLnYsIGNvbmZpZ01vZGVsczogKHYuY29uZmlnTW9kZWxzIGFzIGFueVtdKSB8fCBba2V5XSB9KSlcbiAgICApLFxuICAgIC4uLmxvZ1Byb3BlcnRpZXMob3JpZ2luYWwsIG1vZGVscyksXG4gICAgLi4ubG9nUHJvcGVydGllcyhyZWNhbGN1bGF0ZWQsIG1vZGVscylcbiAgXSlcbiAgICAubWFwKCh7IGtleSwgaWQsIHNob3dVbml0cywgY29uZmlnTW9kZWxzLCBvcmlnaW5hbFZhbHVlLCByZWNhbGN1bGF0ZWRWYWx1ZSB9KSA9PiB7XG4gICAgICBvcmlnaW5hbFZhbHVlID0gb3JpZ2luYWxWYWx1ZSB8fCBibGFua05vZGVWYWx1ZShvcmlnaW5hbCwga2V5LCBpZCk7XG4gICAgICByZWNhbGN1bGF0ZWRWYWx1ZSA9IHJlY2FsY3VsYXRlZFZhbHVlIHx8IGJsYW5rTm9kZVZhbHVlKHJlY2FsY3VsYXRlZCwga2V5LCBpZCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXksXG4gICAgICAgIGlkLFxuICAgICAgICBzaG93VW5pdHMsXG4gICAgICAgIGNvbmZpZ01vZGVsczogY29uZmlnTW9kZWxzLm1hcChjb25maWdNb2RlbFdpdGhEb2NzKG1vZGVscywgeyBub2RlVHlwZSwgdHlwZSwgdGVybUlkIH0sIHsga2V5LCBpZCB9IGFzIGFueSkpLFxuICAgICAgICBvcmlnaW5hbFZhbHVlLFxuICAgICAgICByZWNhbGN1bGF0ZWRWYWx1ZSxcbiAgICAgICAgaXNSZWNhbGN1bGF0ZWQ6ICFpc1VuZGVmaW5lZChyZWNhbGN1bGF0ZWRWYWx1ZSkgJiYgcmVjYWxjdWxhdGVkVmFsdWUgIT09IG9yaWdpbmFsVmFsdWUsXG4gICAgICAgIGlzUmVxdWlyZWQ6IHRydWVcbiAgICAgIH0gYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlO1xuICAgIH0pXG4gICAgLmZpbHRlcigoeyBjb25maWdNb2RlbHMsIG9yaWdpbmFsVmFsdWUsIHJlY2FsY3VsYXRlZFZhbHVlIH0pID0+IFtcbiAgICAgIGNvbmZpZ01vZGVscy5sZW5ndGggPiAwLFxuICAgICAgb3JpZ2luYWxWYWx1ZSAhPT0gJycgfHwgcmVjYWxjdWxhdGVkVmFsdWUgIT09ICcnXG4gICAgXS5ldmVyeShCb29sZWFuKSlcbiAgICAubWFwKHYgPT4gdi5rZXkgPT09ICdpbnB1dCcgPyBkYXRhV2l0aENvbmZpZ01vZGVsTG9ncyhhbGxMb2dzKSh2KSA6IGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzKGxvZ3MpKHYpKTtcblxuY29uc3QgbG9nS2V5cyA9IChcbiAgbG9nczogSU5vZGVUZXJtTG9ncywgb3JpZ2luYWw6IGJsYW5rTm9kZVtdLCByZWNhbGN1bGF0ZWQ6IGJsYW5rTm9kZVtdLCBtb2RlbHM6IElNb2RlbFtdLCB7IG5vZGVUeXBlLCB0eXBlLCB0ZXJtSWQgfVxuKSA9PlxuICBPYmplY3Qua2V5cyhsb2dzKVxuICAgIC5maWx0ZXIoa2V5ID0+IGxvZ3Nba2V5XS5pc0tleSAmJiBrZXkgIT09ICd0cmFuc2Zvcm1hdGlvbicpXG4gICAgLm1hcChrZXkgPT4gKHtcbiAgICAgIGtleSxcbiAgICAgIHNob3dVbml0czogZmFsc2UsXG4gICAgICBjb25maWdNb2RlbHM6IChsb2dzW2tleV0ubW9kZWxzIHx8IFtdKVxuICAgICAgICAubWFwKGNvbmZpZ01vZGVsV2l0aERvY3MobW9kZWxzLCB7IG5vZGVUeXBlLCB0eXBlLCB0ZXJtSWQgfSwgeyBrZXkgfSBhcyBhbnkpKVxuICAgICAgICAvLyBvbmx5IHRha2UgdGhvc2Ugd2UgZm91bmQgYSBtYXRjaGluZyBtb2RlbCAoYXZvaWQgbWF0Y2hpbmcga2V5IG9uIHdyb25nIG5vZGUgdHlwZSlcbiAgICAgICAgLmZpbHRlcih2ID0+ICEhdi5tb2RlbCksXG4gICAgICBvcmlnaW5hbFZhbHVlOiBibGFua05vZGVWYWx1ZShvcmlnaW5hbCwga2V5KSxcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlOiBibGFua05vZGVWYWx1ZShyZWNhbGN1bGF0ZWQsIGtleSksXG4gICAgICBpc1JlY2FsY3VsYXRlZDogaXNSZWNhbGN1bGF0ZWQocmVjYWxjdWxhdGVkLCBrZXkpLFxuICAgICAgaXNSZXF1aXJlZDogdHJ1ZVxuICAgIH0gYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKSlcbiAgICAuZmlsdGVyKHYgPT4gdi5jb25maWdNb2RlbHMubGVuZ3RoID4gMClcbiAgICAubWFwKGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzKGxvZ3MpKTtcblxuY29uc3QgaXNNb2RlbEZvcklucHV0UHJvZHVjdCA9ICh0eXBlOiBTY2hlbWFUeXBlLCBrZXk6IHN0cmluZykgPT4gW1xuICBrZXkgIT09ICdoZXN0aWFBZ2dyZWdhdGVkRGF0YScsXG4gICFrZXkuaW5jbHVkZXMoJy9pbnB1dC8nKSB8fCB0eXBlID09PSBTY2hlbWFUeXBlLklucHV0LFxuICAha2V5LmluY2x1ZGVzKCcvcHJvZHVjdC8nKSB8fCB0eXBlID09PSBTY2hlbWFUeXBlLlByb2R1Y3QsXG5dLmV2ZXJ5KEJvb2xlYW4pO1xuXG5jb25zdCBpc0JhY2tncm91bmRJbnB1dCA9IChsb2c6IElOb2RlVGVybUxvZykgPT5cbiAgbG9nLm1ldGhvZFRpZXIgPT09IEVtaXNzaW9uTWV0aG9kVGllci5iYWNrZ3JvdW5kICYmICEhbG9nLmlucHV0ICYmIGxvZy5zaG91bGRSdW47XG5cbmNvbnN0IGlzTW9kZWxMb2cgPSAobG9nczogSU5vZGVUZXJtTG9ncywgdHlwZTogU2NoZW1hVHlwZSkgPT4gKGtleTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGxvZyA9IGxvZ3Nba2V5XTtcbiAgcmV0dXJuIFtcbiAgICAvLyBoYW5kbGUgUHJvZHVjdCBzYW1lIGFzIElucHV0XG4gICAgaXNNb2RlbEZvcklucHV0UHJvZHVjdCh0eXBlLCBrZXkpLFxuICAgIGxvZy5tZXRob2RUaWVyICE9PSBFbWlzc2lvbk1ldGhvZFRpZXIuYmFja2dyb3VuZCxcbiAgICAhbG9nLmlzS2V5LFxuICAgIC8vICFsb2cuaW5wdXQsXG4gICAgIWxvZy5wcm9wZXJ0eVxuICBdLmV2ZXJ5KEJvb2xlYW4pICYmIFtcbiAgICAnc2hvdWxkUnVuJyBpbiBsb2csXG4gICAgJ3Nob3VsZFJ1bk9yY2hlc3RyYXRvcicgaW4gbG9nLFxuICAgICdydW5SZXF1aXJlZCcgaW4gbG9nXG4gIF0uc29tZShCb29sZWFuKTtcbn07XG5cbmNvbnN0IG1vZGVsQ29uZmlnT3JkZXIgPSAoXG4gIG1vZGVsczogKElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZyB8IElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZ1tdKVtdLCB0ZXJtSWQ6IHN0cmluZywgbW9kZWxLZXk6IHN0cmluZywgbW9kZWw6IHN0cmluZ1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgaW5kZXhlcyA9IG1vZGVscy5tYXAoKG0sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgYXJyYXlJbmRleCA9IEFycmF5LmlzQXJyYXkobSkgPyBtb2RlbENvbmZpZ09yZGVyKG0sIHRlcm1JZCwgbW9kZWxLZXksIG1vZGVsKSA6ICcnO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KG0pXG4gICAgICA/IGFycmF5SW5kZXhcbiAgICAgICAgPyBbaW5kZXgsIGFycmF5SW5kZXhdLmpvaW4oJy4nKVxuICAgICAgICA6ICcnXG4gICAgICA6IFt0ZXJtSWQgPT09IG0udmFsdWUsIG1vZGVsS2V5ID09PSBtLmtleSwgbW9kZWwgPT09IG0ubW9kZWxdLmV2ZXJ5KEJvb2xlYW4pXG4gICAgICAgID8gYCR7aW5kZXh9YFxuICAgICAgICA6ICcnO1xuICB9KS5maWx0ZXIoQm9vbGVhbik7XG4gIHJldHVybiBpbmRleGVzLmxlbmd0aCA/IGluZGV4ZXNbMF0gOiAnJztcbn07XG5cbmludGVyZmFjZSBJQ29uZmlnTW9kZWxEb2NzRGF0YSB7XG4gIG5vZGVUeXBlOiBOb2RlVHlwZTtcbiAgdHlwZTogU2NoZW1hVHlwZTtcbiAgdGVybUlkOiBzdHJpbmc7XG4gIHRlcm1UeXBlPzogVGVybVRlcm1UeXBlO1xufVxuXG5jb25zdCBjb25maWdNb2RlbFdpdGhEb2NzID0gKFxuICBtb2RlbHM6IElNb2RlbFtdLCB7IG5vZGVUeXBlLCB0eXBlLCB0ZXJtSWQsIHRlcm1UeXBlIH06IElDb25maWdNb2RlbERvY3NEYXRhLCBzdWJWYWx1ZT86IElCbGFua05vZGVMb2dTdWJWYWx1ZVxuKSA9PiAobWV0aG9kSWQ6IHN0cmluZykgPT4ge1xuICBjb25zdCBub2RlID0ge1xuICAgICdAdHlwZSc6IG5vZGVUeXBlLFxuICAgIHRlcm06IHsgJ0BpZCc6IHN1YlZhbHVlPy5pZCB8fCB0ZXJtSWQgfSxcbiAgICBtZXRob2RNb2RlbDogeyAnQGlkJzogbWV0aG9kSWQgfVxuICB9IGFzIGFueTtcbiAgcmV0dXJuIHtcbiAgICBtZXRob2RJZCxcbiAgICBtb2RlbDogZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCBtb2RlbFBhcmFtcyhub2RlKSkgfHxcbiAgICAgIC8vIGhhbmRsZSBcImxpdmVBbmltYWxcIlxuICAgICAgKHRlcm1UeXBlICYmIGZpbmRNYXRjaGluZ01vZGVsKG1vZGVscywgbW9kZWxLZXlQYXJhbXMobm9kZSwgdGVybVR5cGUpKSkgfHxcbiAgICAgIGZpbmRNYXRjaGluZ01vZGVsKG1vZGVscywgbW9kZWxLZXlQYXJhbXMobm9kZSwgYCR7c3ViVmFsdWU/LmtleX0uJHttZXRob2RJZH1gKSkgfHxcbiAgICAgIC8vIGhhbmRsZSBcImlucHV0LnByaWNlXCJcbiAgICAgIGZpbmRNYXRjaGluZ01vZGVsKG1vZGVscywgbW9kZWxLZXlQYXJhbXMobm9kZSwgYCR7dHlwZT8udG9Mb3dlckNhc2UoKX0uJHtzdWJWYWx1ZT8ua2V5fWApKSB8fFxuICAgICAgLy8gaGFuZGxlIFwiaW5wdXQuaGVzdGlhQWdncmVnYXRlZERhdGFcIlxuICAgICAgZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCBtb2RlbEtleVBhcmFtcyhub2RlLCBgJHt0eXBlPy50b0xvd2VyQ2FzZSgpfS4ke21ldGhvZElkfWApKSB8fFxuICAgICAgLy8gaGFuZGxlIFwidHJhbnNmb3JtYXRpb25cIlxuICAgICAgKHN1YlZhbHVlPy5rZXkgPyBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsS2V5UGFyYW1zKG5vZGUsIHN1YlZhbHVlPy5rZXkpKSA6IHVuZGVmaW5lZCkgfHxcbiAgICAgIC8vIGhhbmRsZSBcInRyYW5zZm9ybWF0aW9uL2lucHV0L2V4Y3JldGFcIiBhbmQgb3RoZXIgbW9kZWxzIHdpdGggXCIvXCJcbiAgICAgIChtZXRob2RJZC5pbmNsdWRlcygnLycpID8gZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCB7XG4gICAgICAgIG1vZGVsOiBtZXRob2RJZC5zcGxpdCgnLycpWzBdLFxuICAgICAgICBtb2RlbEtleTogbWV0aG9kSWQuc3BsaXQoJy8nKS5zbGljZSgxKS5qb2luKCcuJylcbiAgICAgIH0pIDogdW5kZWZpbmVkKVxuICB9O1xufTtcblxuY29uc3QgY29uZmlnTW9kZWxXaXRoTG9ncyA9IChkYXRhOiBJQmxhbmtOb2RlTG9nIHwgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlLCBsb2dzOiBJTm9kZVRlcm1Mb2dzKSA9PiAoXG4gIG1vZGVsOiBJQ29uZmlnTW9kZWwsIGluZGV4ID0gMFxuKSA9PiB7XG4gIGNvbnN0IHN0YXR1cyA9IGxvZ1N0YXR1cyhkYXRhLCBsb2dzPy5bbW9kZWwubWV0aG9kSWRdLCBpbmRleCk7XG4gIHJldHVybiB7XG4gICAgLi4ubW9kZWwsXG4gICAgbG9nczogbG9ncz8uW21vZGVsLm1ldGhvZElkXSxcbiAgICBzdGF0dXMsXG4gICAgc2hvd0xvZ3M6IGhhc0xvZ0RldGFpbHMoc3RhdHVzLCBsb2dzPy5bbW9kZWwubWV0aG9kSWRdKVxuICB9IGFzIElDb25maWdNb2RlbDtcbn07XG5cbmNvbnN0IGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzID0gKFxuICBsb2dzOiBJTm9kZUxvZ3MgfCBJTm9kZVRlcm1Mb2dzXG4pID0+IDxUIGV4dGVuZHMgKElCbGFua05vZGVMb2cgfCBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpPihkYXRhOiBUKSA9PiB7XG4gIGNvbnN0IHN1YkxvZ0tleSA9IHN1YlZhbHVlTG9nS2V5KGRhdGEgYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKTtcbiAgY29uc3QgbG9nID0gc3ViTG9nS2V5ID8gbG9nc1tzdWJMb2dLZXldIDogbG9ncztcbiAgcmV0dXJuIHtcbiAgICAuLi5kYXRhLFxuICAgIGNvbmZpZ01vZGVsczogZmlsdGVyUmVxdWlyZWRDb25maWdNb2RlbHMoXG4gICAgICBkYXRhLmNvbmZpZ01vZGVscy5tYXAoKG1vZGVsLCBpbmRleCkgPT5cbiAgICAgICAgQXJyYXkuaXNBcnJheShtb2RlbCkgPyBtb2RlbC5tYXAoY29uZmlnTW9kZWxXaXRoTG9ncyhkYXRhLCBsb2cpKSA6IGNvbmZpZ01vZGVsV2l0aExvZ3MoZGF0YSwgbG9nKShtb2RlbCwgaW5kZXgpXG4gICAgICApXG4gICAgKVxuICB9IGFzIFQ7XG59O1xuXG4vKipcbiAqIEdyb3VwIG1vZGVscyBydW5uaW5nIGluIHBhcmFsbGVsIHVuZGVyIHRoZSBzYW1lIGFycmF5LCBhcyB0aGV5IHNob3VsZCBhcHBlYXIgdmVydGljYWxseS5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIG1vZGVscyBUaGUgbGlzdCBvZiBtb2RlbHNcbiAqL1xuY29uc3QgZ3JvdXBQYXJhbGxlbE1vZGVscyA9IChjb25maWc6IElPcmNoZXN0cmF0b3JDb25maWcsIHRlcm1JZDogc3RyaW5nLCBtb2RlbEtleTogc3RyaW5nLCBtb2RlbHM6IElDb25maWdNb2RlbFtdKSA9PiB7XG4gIGNvbnN0IG1vZGVsc1dpdGhPcmRlciA9IG1vZGVscy5tYXAobW9kZWwgPT4gKHtcbiAgICBtb2RlbCxcbiAgICBvcmRlcjogbW9kZWxDb25maWdPcmRlcihjb25maWcubW9kZWxzLCB0ZXJtSWQsIG1vZGVsS2V5LCBtb2RlbC5tZXRob2RJZClcbiAgfSkpO1xuICByZXR1cm4gbW9kZWxzV2l0aE9yZGVyXG4gICAgLnJlZHVjZSgocHJldiwgeyBtb2RlbCwgb3JkZXIgfSkgPT4ge1xuICAgICAgY29uc3QgaXNBcnJheSA9IG9yZGVyLmluY2x1ZGVzKCcuJyk7XG4gICAgICBjb25zdCBhcnJheUluZGV4ID0gaXNBcnJheSA/IG9yZGVyLnNwbGl0KCcuJylbMF0gOiBwcmV2Lmxlbmd0aDtcbiAgICAgIHByZXZbYXJyYXlJbmRleF0gPSBpc0FycmF5ID8gWy4uLihwcmV2W2FycmF5SW5kZXhdIHx8IFtdKSwgbW9kZWxdIDogbW9kZWw7XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCBbXSBhcyBJQ29uZmlnTW9kZWxbXVtdKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAubWFwKHYgPT4gdi5sZW5ndGggPT09IDEgPyB2WzBdIDogdik7XG59O1xuXG5jb25zdCBhbGxQYXJhbGxlbCA9IChtb2RlbHM6IChJQ29uZmlnTW9kZWwgfCBJQ29uZmlnTW9kZWxbXSlbXSkgPT5cbiAgbW9kZWxzLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KG1vZGVsc1swXSkgJiYgbW9kZWxzWzBdLmxlbmd0aCA+IDE7XG5cbmNvbnN0IHZhbHVlQnlNZXRob2RJZCA9ICh2YWx1ZXM6IGJsYW5rTm9kZVtdLCBtZXRob2RJZDogc3RyaW5nLCB0ZXJtSWQ6IHN0cmluZykgPT5cbiAgcHJvcGVydHlWYWx1ZSh2YWx1ZXMuZmluZCh2ID0+IHYubWV0aG9kTW9kZWw/LlsnQGlkJ10gPT09IG1ldGhvZElkKT8udmFsdWUgYXMgbnVtYmVyW10sIHRlcm1JZCk7XG5cbmNvbnN0IGdyb3VwUGFyYWxsZWxWYWx1ZXMgPSAodmFsdWVzOiBibGFua05vZGVbXSwgbW9kZWxzOiBJQ29uZmlnTW9kZWwgfCBJQ29uZmlnTW9kZWxbXSwgdGVybUlkOiBzdHJpbmcpID0+XG4gIEFycmF5LmlzQXJyYXkobW9kZWxzKVxuICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKG1vZGVscy5tYXAobW9kZWwgPT4gW21vZGVsLm1ldGhvZElkLCB2YWx1ZUJ5TWV0aG9kSWQodmFsdWVzLCBtb2RlbC5tZXRob2RJZCwgdGVybUlkKV0pKVxuICAgIDoge307XG5cbmV4cG9ydCBjb25zdCBncm91cExvZ3NCeVRlcm0gPSAoXG4gIG5vZGVUeXBlOiBOb2RlVHlwZSwgbG9nczogSU5vZGVMb2dzLCBtb2RlbHM6IElNb2RlbFtdLCBjb25maWc6IElPcmNoZXN0cmF0b3JDb25maWcsXG4gIGFsbE9yaWdpbmFsVmFsdWVzOiBibGFua05vZGVbXSwgYWxsUmVjYWxjdWxhdGVkVmFsdWVzOiBibGFua05vZGVbXSxcbiAgbm9kZUtleT86IHN0cmluZ1xuKSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsVmFsdWVzID0gKGFsbE9yaWdpbmFsVmFsdWVzIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gISh2YWx1ZSBhcyBhbnkpLmRlbGV0ZWQpO1xuICBjb25zdCByZWNhbGN1bGF0ZWRWYWx1ZXMgPSAoYWxsUmVjYWxjdWxhdGVkVmFsdWVzIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gISh2YWx1ZSBhcyBhbnkpLmRlbGV0ZWQpO1xuICBjb25zdCB0eXBlOiBTY2hlbWFUeXBlID0gb3JpZ2luYWxWYWx1ZXMubGVuZ3RoID9cbiAgICBvcmlnaW5hbFZhbHVlc1swXVsnQHR5cGUnXSB8fCBvcmlnaW5hbFZhbHVlc1swXS50eXBlIDpcbiAgICByZWNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoID9cbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlc1swXVsnQHR5cGUnXSB8fCByZWNhbGN1bGF0ZWRWYWx1ZXNbMF0udHlwZSA6XG4gICAgICB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuICh0ZXJtOiBJVGVybUpTT05MRCk6IElCbGFua05vZGVMb2cgPT4ge1xuICAgIGNvbnN0IHRlcm1JZCA9IHRlcm1bJ0BpZCddO1xuICAgIGNvbnN0IHRlcm1UeXBlID0gdGVybS50ZXJtVHlwZTtcbiAgICBjb25zdCB0ZXJtTG9ncyA9IGdldChsb2dzLCB0ZXJtSWQsIHt9KSBhcyBJTm9kZVRlcm1Mb2dzO1xuICAgIGNvbnN0IG9yaWdpbmFsID0gb3JpZ2luYWxWYWx1ZXMuZmlsdGVyKHYgPT4gdGVybUlkID09PSB2LnRlcm0hWydAaWQnXSk7XG4gICAgY29uc3QgcmVjYWxjdWxhdGVkID0gcmVjYWxjdWxhdGVkVmFsdWVzLmZpbHRlcih2ID0+IHRlcm1JZCA9PT0gdi50ZXJtIVsnQGlkJ10pO1xuICAgIGNvbnN0IGhhc0RhdGEgPSAhIW9yaWdpbmFsLmxlbmd0aCB8fCAhIXJlY2FsY3VsYXRlZC5sZW5ndGggfHwgT2JqZWN0LmtleXModGVybUxvZ3MpLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgY29uZmlnTW9kZWxzRGF0YSA9IHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCwgdGVybVR5cGUgfTtcbiAgICBjb25zdCBjb25maWdNb2RlbHMgPSBncm91cFBhcmFsbGVsTW9kZWxzKFxuICAgICAgY29uZmlnLCB0ZXJtSWQsIG5vZGVLZXkhLFxuICAgICAgdW5pcXVlKFtcbiAgICAgICAgLi4uKHRlcm1Mb2dzLm1vZGVscyB8fCBbXSkuZmlsdGVyKGlzTW9kZWxMb2codGVybUxvZ3MsIHR5cGUpKSxcbiAgICAgICAgLy8gLi4uZmluZENvbmZpZ01vZGVscyhjb25maWcsIHRlcm1JZCwgbm9kZUtleSEsIG1vZGVscykubWFwKCh7IG1vZGVsIH0pID0+IG1vZGVsIGFzIHN0cmluZylcbiAgICAgIF0pLm1hcChjb25maWdNb2RlbFdpdGhEb2NzKG1vZGVscywgY29uZmlnTW9kZWxzRGF0YSkpXG4gICAgKTtcbiAgICBjb25zdCBrZXlzID0gbG9nS2V5cyh0ZXJtTG9ncywgb3JpZ2luYWwsIHJlY2FsY3VsYXRlZCwgbW9kZWxzLCBjb25maWdNb2RlbHNEYXRhKTtcbiAgICBjb25zdCBzdWJWYWx1ZXMgPSBsb2dTdWJWYWx1ZXMobG9ncywgdGVybUxvZ3MsIG9yaWdpbmFsLCByZWNhbGN1bGF0ZWQsIG1vZGVscywgY29uZmlnTW9kZWxzRGF0YSk7XG4gICAgY29uc3QgaXNSZXF1aXJlZCA9ICFPYmplY3QudmFsdWVzKHRlcm1Mb2dzKVxuICAgICAgLmZpbHRlcih2ID0+IHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2KSAmJiAhdi5pc0tleSlcbiAgICAgIC8vIGlnbm9yZSBtb2RlbHMgdGhhdCB3ZXJlIG5ldmVyIGdvaW5nIHRvIHJ1blxuICAgICAgLmZpbHRlcihpc1J1bk9yY2hlc3RyYXRvcilcbiAgICAgIC5ldmVyeSh2ID0+IHYucnVuUmVxdWlyZWQgPT09IGZhbHNlKTtcblxuICAgIGNvbnN0IG5vZGVMb2c6IElCbGFua05vZGVMb2cgPSBkYXRhV2l0aENvbmZpZ01vZGVsTG9ncyh0ZXJtTG9ncykoe1xuICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgY2FuT3Blbjoga2V5cy5sZW5ndGggPiAwIHx8IHN1YlZhbHVlcy5sZW5ndGggPiAwLFxuICAgICAgdGVybUlkLFxuICAgICAgdGVybSxcbiAgICAgIHR5cGUsXG4gICAgICBjb25maWdNb2RlbHMsXG4gICAgICBvcmlnaW5hbCxcbiAgICAgIG9yaWdpbmFsVmFsdWU6IHJlZHVjZVZhbHVlcyhvcmlnaW5hbCwgdGVybUlkKSxcbiAgICAgIHJlY2FsY3VsYXRlZCxcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlOiByZWR1Y2VWYWx1ZXMocmVjYWxjdWxhdGVkLCB0ZXJtSWQpLFxuICAgICAgaXNPcmlnaW5hbDogISFvcmlnaW5hbC5sZW5ndGgsXG4gICAgICBpc1JlY2FsY3VsYXRlZDogaXNSZWNhbGN1bGF0ZWQocmVjYWxjdWxhdGVkKSxcbiAgICAgIGhhc0RhdGEsXG4gICAgICBpc1JlcXVpcmVkLFxuICAgICAgbG9nczogdGVybUxvZ3MsXG4gICAgICBrZXlzLFxuICAgICAgc3ViVmFsdWVzLFxuICAgICAgYWxsUGFyYWxsZWw6IGFsbFBhcmFsbGVsKGNvbmZpZ01vZGVscyksXG4gICAgICBvcmlnaW5hbFZhbHVlQnlNZXRob2RJZDogZ3JvdXBQYXJhbGxlbFZhbHVlcyhvcmlnaW5hbCwgY29uZmlnTW9kZWxzWzBdLCB0ZXJtSWQpLFxuICAgICAgcmVjYWxjdWxhdGVkVmFsdWVCeU1ldGhvZElkOiBncm91cFBhcmFsbGVsVmFsdWVzKHJlY2FsY3VsYXRlZCwgY29uZmlnTW9kZWxzWzBdLCB0ZXJtSWQpXG4gICAgfSk7XG4gICAgY29uc3Qgc3ViVmFsdWUgPSBjeWNsZVN1YlZhbHVlKG5vZGVMb2cpO1xuXG4gICAgcmV0dXJuIHN1YlZhbHVlICYmIHN1YlZhbHVlcz8ubGVuZ3RoXG4gICAgICA/IHtcbiAgICAgICAgLi4ubm9kZUxvZyxcbiAgICAgICAgbW9kZWxzSW5TdWJWYWx1ZXM6IHRydWUsXG4gICAgICAgIHN1YlZhbHVlczogW1xuICAgICAgICAgIHN1YlZhbHVlLFxuICAgICAgICAgIC4uLnN1YlZhbHVlc1xuICAgICAgICBdXG4gICAgICB9IC8vIGlmIHdlIGluY2x1ZGUgdGhlIEN5Y2xlIHZhbHVlLCBpdCBiZWNvbWVzIHRoZSBtYWluIHJlZmVyZW5jZSBvZiB0aGUgbW9kZWxzXG4gICAgICA6IG5vZGVMb2c7XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgbW9kZWxDb3VudCA9IChibGFua05vZGVMb2dzOiBJQmxhbmtOb2RlTG9nW10pID0+IE1hdGgubWF4LmFwcGx5KE1hdGgubWF4LCBbXG4gIDAsXG4gIC4uLmJsYW5rTm9kZUxvZ3MuZmxhdE1hcCh2ID0+IFtcbiAgICB2LmNvbmZpZ01vZGVscy5sZW5ndGgsXG4gICAgLi4uKHYuc3ViVmFsdWVzLm1hcChzID0+IHMuY29uZmlnTW9kZWxzPy5sZW5ndGggfHwgMCkpLFxuICAgIC4uLih2LmtleXMubWFwKHMgPT4gcy5jb25maWdNb2RlbHM/Lmxlbmd0aCB8fCAwKSlcbiAgXSlcbl0pO1xuXG5leHBvcnQgY29uc3QgbG9nVmFsdWVBcnJheSA9ICh2YWx1ZTogc3RyaW5nKTogYW55W10gPT5cbiAgWyc7JywgJzonXS5zb21lKHYgPT4gdmFsdWUuaW5jbHVkZXModikpID9cbiAgICB2YWx1ZS5zcGxpdCgnOycpLmZsYXRNYXAodiA9PiB7XG4gICAgICBjb25zdCByZXMgPSB2LnNwbGl0KCdfJykubWFwKHZ2ID0+IHZ2LnNwbGl0KCc6JykpO1xuICAgICAgcmV0dXJuIHJlcy5sZW5ndGggPD0gMSA/IHJlcy5mbGF0KCkgOiBPYmplY3QuZnJvbUVudHJpZXMocmVzKTtcbiAgICB9KSA6XG4gICAgbnVsbDtcbiJdfQ==
487
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLW1vZGVscy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtbG9ncy1tb2RlbHMvbm9kZS1sb2dzLW1vZGVscy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFDSyxrQkFBa0IsRUFDbEIsWUFBWSxFQUFZLFVBQVUsRUFBRSxVQUFVLEVBQ3pELE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBRTFDLE9BQU8sRUFDNEQsVUFBVSxFQUMzRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUMvQyxNQUFNLDZCQUE2QixDQUFDO0FBb0NyQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBRTlDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFV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O0lBQ3ZDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzNCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ0osSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3QsIHRvQXJyYXksIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZpbGVUb0V4dCwgU3VwcG9ydGVkRXh0ZW5zaW9ucyB9IGZyb20gJ0BoZXN0aWEtZWFydGgvYXBpJztcbmltcG9ydCB7XG4gIEVtaXNzaW9uLCBFbWlzc2lvbk1ldGhvZFRpZXIsIElUZXJtSlNPTkxELCBQcm9kdWN0LCBJbnB1dCBhcyBIZXN0aWFJbnB1dCxcbiAgTm9kZVR5cGUsIFRlcm1UZXJtVHlwZSwgUHJvcGVydHksIFNjaGVtYVR5cGUsIGlzVHlwZU5vZGUsIEluZGljYXRvclxufSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyB1bmlxdWUsIGlzVW5kZWZpbmVkLCBpc0VtcHR5LCBpc051bWJlciB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuaW1wb3J0IHsgcHJvcGVydHlWYWx1ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMvZGlzdC90ZXJtJztcbmNvbnN0IGdldCA9IHJlcXVpcmUoJ2xvZGFzaC5nZXQnKTtcbmNvbnN0IHNldCA9IHJlcXVpcmUoJ2xvZGFzaC5zZXQnKTtcbmNvbnN0IG9yZGVyQnkgPSByZXF1aXJlKCdsb2Rhc2gub3JkZXJieScpO1xuXG5pbXBvcnQge1xuICBJT3JjaGVzdHJhdG9yQ29uZmlnLCBJT3JjaGVzdHJhdG9yTW9kZWxDb25maWcsIGZpbmRDb25maWdNb2RlbHMsIGZpbmRNb2RlbHMsIElNb2RlbCxcbiAgZmluZE1hdGNoaW5nTW9kZWwsIG1vZGVsUGFyYW1zLCBtb2RlbEtleVBhcmFtc1xufSBmcm9tICcuLi8uLi9lbmdpbmUvZW5naW5lLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlTWlzc2luZ0xvb2t1cExvZyB7XG4gIGZpbGVuYW1lOiBzdHJpbmc7XG4gIHRlcm1JZDogc3RyaW5nO1xuICBjb2x1bW46IHN0cmluZztcbiAgLy8gYXR0cmlidXRlcyBsaW5rZWQgdG8gdGhlIG1vZGVsc1xuICBtb2RlbD86IHN0cmluZztcbiAgdGVybT86IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlVGVybUxvZyB7XG4gIHJ1blJlcXVpcmVkPzogYm9vbGVhbjtcbiAgc2hvdWxkUnVuPzogYm9vbGVhbjtcbiAgc2hvdWxkUnVuT3JjaGVzdHJhdG9yPzogYm9vbGVhbjtcbiAgbWlzc2luZ0xvb2t1cHM/OiBJTm9kZU1pc3NpbmdMb29rdXBMb2dbXTtcbiAgcmVxdWlyZW1lbnRzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgbG9ncz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbiAgLy8gcG9zc2libGUgc3ViIHZhbHVlc1xuICBpbnB1dD86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBwcm9wZXJ0eT86IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlVGVybUxvZ3Mge1xuICBbbW9kZWxLZXk6IHN0cmluZ106IGFueSB8IElOb2RlVGVybUxvZztcbiAgbW9kZWxzOiBzdHJpbmdbXTtcbiAgaXNLZXk/OiBib29sZWFuO1xuICBpc1Byb3BlcnR5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTm9kZUxvZ3Mge1xuICBbdGVybTogc3RyaW5nXTogSU5vZGVUZXJtTG9ncztcbn1cblxuY29uc3QgdGVybVR5cGVzID0gT2JqZWN0LnZhbHVlcyhUZXJtVGVybVR5cGUpO1xuXG5jb25zdCBibGFua05vZGVUeXBlcyA9IE9iamVjdC52YWx1ZXMoU2NoZW1hVHlwZSkuZmlsdGVyKHQgPT4gIWlzVHlwZU5vZGUodCkpO1xuXG5jb25zdCBzY2hlbWFUeXBlc0xvd2VyQ2FzZSA9IE9iamVjdC52YWx1ZXMoU2NoZW1hVHlwZSkubWFwKHYgPT4gdi50b0xvd2VyQ2FzZSgpKTtcblxuY29uc3QgYmxhbmtOb2RlVHlwZXNMb3dlckNhc2UgPSBibGFua05vZGVUeXBlcy5tYXAodiA9PiB2LnRvTG93ZXJDYXNlKCkpO1xuXG5jb25zdCBtaXNzaW5nTG9va3VwUHJlZml4ID0gJ01pc3NpbmcgbG9va3VwJztcblxuY29uc3QgcGFyc2VGaWxlbmFtZSA9IChmaWxlcGF0aDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IFtmaWxlbmFtZV0gPSBmaWxlcGF0aC5zcGxpdCgnLicpO1xuICBjb25zdCBleHQgPSB0ZXJtVHlwZXMuaW5jbHVkZXMoZmlsZW5hbWUgYXMgYW55KSA/IFN1cHBvcnRlZEV4dGVuc2lvbnMueGxzeCA6IFN1cHBvcnRlZEV4dGVuc2lvbnMuY3N2O1xuICByZXR1cm4gZmlsZVRvRXh0KGZpbGVuYW1lLCBleHQpO1xufTtcblxuY29uc3QgcGFyc2VMb29rdXAgPSAoeyBjb2x1bW4sIHRlcm1pZCwgW21pc3NpbmdMb29rdXBQcmVmaXhdOiBtaXNzaW5nTG9va3VwIH0pID0+ICh7XG4gIGZpbGVuYW1lOiBwYXJzZUZpbGVuYW1lKG1pc3NpbmdMb29rdXApLCB0ZXJtSWQ6IHRlcm1pZCwgY29sdW1uXG59KTtcblxuY29uc3QgY3N2VmFsdWUgPSAodmFsdWU6IHN0cmluZykgPT4gKHZhbHVlIHx8ICcnKS5yZXBsYWNlKCdbJywgJycpLnJlcGxhY2UoJ10nLCAnJyk7XG5cbmNvbnN0IHBhcnNlTWVzc2FnZSA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShtZXNzYWdlKTtcbiAgICByZXR1cm4gZGF0YS5tZXNzYWdlLnNwbGl0KCcsJykucmVkdWNlKChwcmV2LCBwYXJ0cykgPT4ge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gcGFydHMuc3BsaXQoJz0nKTtcbiAgICAgIGNvbnN0IHZhbCA9IGNzdlZhbHVlKHZhbHVlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIC4uLihrZXkgJiYgdmFsID8geyBba2V5LnRyaW0oKV06IHZhbCB9IDoge30pXG4gICAgICB9O1xuICAgIH0sIHsgbG9nZ2VyOiBkYXRhLmxvZ2dlciB9KTtcbiAgfVxuICBjYXRjaCAoZXJyKSB7XG4gICAgLy8gbWFrZSBzdXJlIGl0IHdvcmtzIGV2ZW4gaWYgb25lIGxvZyBpcyBtYWxmb3JtZWRcbiAgICByZXR1cm4ge307XG4gIH1cbn07XG5cbmNvbnN0IG9taXRMb2dLZXlzID0gKGxvZzogYW55KSA9PlxuICBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMobG9nKS5maWx0ZXIoKFtrZXldKSA9PiAhc2NoZW1hVHlwZXNMb3dlckNhc2UuaW5jbHVkZXMoa2V5KSkpO1xuXG5jb25zdCBpbmNsdWRlQmxhbmtOb2RlcyA9IChsb2dzLCBsb2cpID0+XG4gIE9iamVjdFxuICAgIC5rZXlzKGxvZylcbiAgICAuZmlsdGVyKGtleSA9PiBibGFua05vZGVUeXBlc0xvd2VyQ2FzZS5pbmNsdWRlcyhrZXkpKVxuICAgIC5yZWR1Y2UoKHByZXYsIGtleSkgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBba2V5XTogdW5pcXVlKFtcbiAgICAgICAgLi4uKCh0eXBlb2YgcHJldltrZXldID09PSAnc3RyaW5nJyA/IFtwcmV2W2tleV1dIDogcHJldltrZXldKSB8fCBbXSksXG4gICAgICAgIGxvZ1trZXldXG4gICAgICBdKVxuICAgIH0pLCBsb2dzKTtcblxuY29uc3QgZ3JvdXBMb2cgPSAoZ3JvdXAsIHsgbG9nZ2VyLCB0ZXJtLCBtb2RlbCwga2V5LCBzaG91bGRfcnVuLCBydW5fcmVxdWlyZWQsIHByb3BlcnR5LCAuLi5sb2cgfTogYW55KSA9PiB7XG4gIGNvbnN0IGlzT3JjaGVzdHJhdG9yID0gbG9nZ2VyLmluY2x1ZGVzKCdvcmNoZXN0cmF0b3InKTtcbiAgY29uc3QgaXNLZXkgPSAhaXNPcmNoZXN0cmF0b3IgJiYgISFrZXk7XG4gIGNvbnN0IGlzUHJvcGVydHkgPSAhaXNPcmNoZXN0cmF0b3IgJiYgISFwcm9wZXJ0eTtcbiAgY29uc3QgcGFyZW50TG9nS2V5ID0gW2BbXCIke3Rlcm19XCJdYCwgIWlzT3JjaGVzdHJhdG9yICYmIGtleSB8fCBwcm9wZXJ0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy4nKTtcbiAgY29uc3QgbG9nTW9kZWxLZXkgPSBbcGFyZW50TG9nS2V5LCBtb2RlbF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy4nKTtcblxuICBzZXQoZ3JvdXAsIGAke3BhcmVudExvZ0tleX0ubW9kZWxzYCwgdW5pcXVlKFtcbiAgICAuLi5nZXQoZ3JvdXAsIGAke3BhcmVudExvZ0tleX0ubW9kZWxzYCwgW10pLFxuICAgIG1vZGVsXG4gIF0pKTtcbiAgc2V0KGdyb3VwLCBgJHtwYXJlbnRMb2dLZXl9LmlzS2V5YCwgaXNLZXkpO1xuICBzZXQoZ3JvdXAsIGAke3BhcmVudExvZ0tleX0uaXNQcm9wZXJ0eWAsIGlzUHJvcGVydHkpO1xuXG4gIGxldCBkYXRhID0gZ2V0KGdyb3VwLCBsb2dNb2RlbEtleSwge30pO1xuXG4gIGRhdGEgPSBpbmNsdWRlQmxhbmtOb2RlcyhkYXRhLCBsb2cpO1xuXG4gIGlmICh0eXBlb2Ygc2hvdWxkX3J1biAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zdCBzaG91bGRSdW4gPSBzaG91bGRfcnVuID09PSAnVHJ1ZSc7XG5cbiAgICBkYXRhID0gaXNPcmNoZXN0cmF0b3IgP1xuICAgICAge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBzaG91bGRSdW5PcmNoZXN0cmF0b3I6IHNob3VsZFJ1blxuICAgICAgfSA6XG4gICAgICB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIC4uLm9taXRMb2dLZXlzKGxvZyksXG4gICAgICAgIHNob3VsZFJ1blxuICAgICAgfTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgcnVuX3JlcXVpcmVkICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IHJ1blJlcXVpcmVkID0gcnVuX3JlcXVpcmVkID09PSAnVHJ1ZSc7XG5cbiAgICBkYXRhID0gIHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICAuLi4ocnVuUmVxdWlyZWQgPyB7fSA6IG9taXRMb2dLZXlzKGxvZykpLCAvLyBubyBuZWVkIHRvIHNhdmUgbG9ncyBpZiB3ZSBuZWVkIHRvIHJ1biB0aGUgbW9kZWxcbiAgICAgIHJ1blJlcXVpcmVkXG4gICAgfTtcbiAgfVxuICBlbHNlIGlmICgncmVxdWlyZW1lbnRzJyBpbiBsb2cpIHtcbiAgICBjb25zdCB7IHJlcXVpcmVtZW50cywgLi4ubG9nRGF0YSB9ID0gbG9nO1xuXG4gICAgZGF0YS5yZXF1aXJlbWVudHMgPSB7XG4gICAgICAuLi4oZGF0YS5yZXF1aXJlbWVudHMgfHwge30pLFxuICAgICAgLi4ubG9nRGF0YVxuICAgIH07XG4gIH1cbiAgZWxzZSBpZiAobWlzc2luZ0xvb2t1cFByZWZpeCBpbiBsb2cpIHtcbiAgICBkYXRhLm1pc3NpbmdMb29rdXBzID0gdW5pcXVlKFtcbiAgICAgIC4uLihkYXRhLm1pc3NpbmdMb29rdXBzIHx8IFtdKSxcbiAgICAgIHBhcnNlTG9va3VwKGxvZylcbiAgICBdKTtcbiAgfVxuICBlbHNlIGlmICghaXNPcmNoZXN0cmF0b3IpIHtcbiAgICBkYXRhLmxvZ3MgPSB7XG4gICAgICAuLi4oZGF0YS5sb2dzIHx8IHt9KSxcbiAgICAgIC4uLm9taXRMb2dLZXlzKGxvZylcbiAgICB9O1xuICB9XG5cbiAgc2V0KGdyb3VwLCBsb2dNb2RlbEtleSwgZGF0YSk7XG4gIHJldHVybiBncm91cDtcbn07XG5cbmNvbnN0IGdyb3VwTG9nU3ViVmFsdWUgPSAoZ3JvdXAsIGxvZywga2V5OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgaWQgPSBsb2dba2V5XTtcbiAgY29uc3QgZGF0YSA9IGdyb3VwTG9nKGdyb3VwW2lkXSB8fCB7fSwgbG9nKTtcbiAgZ3JvdXBbaWRdID0gZGF0YTtcblxuICBpZiAoa2V5ID09PSAndHJhbnNmb3JtYXRpb24nKSB7XG4gICAgLy8gYWRkIHZhbHVlIHRvIHRoZSBzYW1lIHRlcm0vbW9kZWwgb24gcGFyZW50IGdyb3VwXG4gICAgT2JqZWN0LmVudHJpZXMoZ3JvdXBbaWRdKS5tYXAoKFt0ZXJtLCBtb2RlbHNdKSA9PlxuICAgICAgT2JqZWN0LmtleXMobW9kZWxzKS5tYXAobW9kZWwgPT4ge1xuICAgICAgICBpZiAoZ3JvdXA/Llt0ZXJtXT8uW21vZGVsXSkge1xuICAgICAgICAgIGdyb3VwW3Rlcm1dW21vZGVsXVtrZXldID0gdW5pcXVlKFtcbiAgICAgICAgICAgIC4uLihncm91cFt0ZXJtXVttb2RlbF1ba2V5XSB8fCBbXSksXG4gICAgICAgICAgICBpZFxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZ3JvdXA7XG59O1xuXG5jb25zdCBzdWJWYWx1ZUtleXMgPSBbXG4gICd0cmFuc2Zvcm1hdGlvbidcbl07XG5cbmV4cG9ydCBjb25zdCBncm91cExvZ3NCeU1vZGVsID0gKGRhdGE6IHN0cmluZyk6IElOb2RlTG9ncyA9PlxuICBkYXRhLnRyaW0oKS5zcGxpdCgnXFxuJylcbiAgICAubWFwKHBhcnNlTWVzc2FnZSlcbiAgICAuZmlsdGVyKHYgPT4gISF2Py50ZXJtICYmIHY/LnRlcm0gIT09ICdOb25lJyAmJiAhIXY/Lm1vZGVsKVxuICAgIC5yZWR1Y2UoKGdyb3VwLCBsb2cpID0+IHtcbiAgICAgIGNvbnN0IHN1YlZhbHVlID0gc3ViVmFsdWVLZXlzLmZpbmQodiA9PiAhIWxvZ1t2XSk7XG4gICAgICByZXR1cm4gc3ViVmFsdWUgP1xuICAgICAgICBzdWJWYWx1ZSA9PT0gJ3RyYW5zZm9ybWF0aW9uJyA/XG4gICAgICAgICAgLy8gZm9yIHRyYW5zZm9ybWF0aW9uLCBkbyBub3QgYWRkIHRvIHRvcC1sZXZlbCBtb2RlbFxuICAgICAgICAgIGdyb3VwTG9nU3ViVmFsdWUoZ3JvdXAsIGxvZywgc3ViVmFsdWUpIDpcbiAgICAgICAgICBncm91cExvZyhncm91cExvZ1N1YlZhbHVlKGdyb3VwLCBsb2csIHN1YlZhbHVlKSwgbG9nKVxuICAgICAgICA6IGdyb3VwTG9nKGdyb3VwLCBsb2cpO1xuICAgIH0sIHt9KTtcblxuZXhwb3J0IGNvbnN0IGNvbXB1dGVUZXJtcyA9IChcbiAgb3JpZ2luYWxWYWx1ZXM6IGJsYW5rTm9kZVtdLCByZWNhbGN1bGF0ZWRWYWx1ZXM6IGJsYW5rTm9kZVtdLCB0ZXJtcz86IElUZXJtSlNPTkxEW10sIGZpbHRlclRlcm1UeXBlcz86IFRlcm1UZXJtVHlwZVtdXG4pID0+IGZyb20oXG4gICAgdGVybXM/Lmxlbmd0aCA/XG4gICAgICB0ZXJtcyA6XG4gICAgICBbXG4gICAgICAgIC4uLihvcmlnaW5hbFZhbHVlcyB8fCBbXSkubWFwKCh7IHRlcm0gfSkgPT4gdGVybSksXG4gICAgICAgIC4uLihyZWNhbGN1bGF0ZWRWYWx1ZXMgfHwgW10pLm1hcCgoeyB0ZXJtIH0pID0+IHRlcm0pXG4gICAgICBdLmZpbHRlcihub2RlID0+ICFmaWx0ZXJUZXJtVHlwZXM/Lmxlbmd0aCB8fCBmaWx0ZXJUZXJtVHlwZXMuaW5jbHVkZXMobm9kZS50ZXJtVHlwZSkpXG4gICkucGlwZShcbiAgICBkaXN0aW5jdCh2ID0+IHYhWydAaWQnXSksXG4gICAgdG9BcnJheSgpLFxuICAgIG1hcCh2ID0+IG9yZGVyQnkodiwgWyduYW1lJ10sIFsnYXNjJ10pKVxuICApLnRvUHJvbWlzZSgpO1xuXG5leHBvcnQgdHlwZSBibGFua05vZGUgPSBFbWlzc2lvbiB8IFByb2R1Y3QgfCBIZXN0aWFJbnB1dCB8IFByb3BlcnR5IHwgSW5kaWNhdG9yO1xuXG5leHBvcnQgZW51bSBMb2dTdGF0dXMge1xuICBzdWNjZXNzID0gJ3N1Y2Nlc3NmdWwnLFxuICBlcnJvciA9ICdmYWlsZWQnLFxuICBza2lwSGllcmFyY2h5ID0gJ25vdCBydW4gKG1vZGVsIGhpZ2hlciB1cCBoaWVyYXJjaHkgcnVuIGluc3RlYWQpJyxcbiAgZGF0YVByb3ZpZGVkID0gJ25vdCBydW4gKHVzZXIgcHJvdmlkZWQgZGF0YSByZXRhaW5lZCknLFxuICBub3RSZXF1aXJlZCA9ICdub3QgcmVsZXZhbnQnXG59XG5cbmNvbnN0IGhhc0xvZ3MgPSAobG9ncz86IElOb2RlVGVybUxvZykgPT4gISFsb2dzPy5yZXF1aXJlbWVudHMgfHwgISFsb2dzPy5sb2dzIHx8IGxvZ3M/Lm1pc3NpbmdMb29rdXBzPy5sZW5ndGggPiAwO1xuXG5jb25zdCBoYXNMb2dEZXRhaWxzID0gKHN0YXR1czogTG9nU3RhdHVzLCBsb2dzPzogSU5vZGVUZXJtTG9nKSA9PlxuICBbXG4gICAgTG9nU3RhdHVzLnN1Y2Nlc3MsXG4gICAgTG9nU3RhdHVzLmVycm9yXG4gIF0uaW5jbHVkZXMoc3RhdHVzKSAmJiBoYXNMb2dzKGxvZ3MpO1xuXG5jb25zdCBsb2dTdGF0dXMgPSAoZGF0YTogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlIHwgSUJsYW5rTm9kZUxvZywgbG9ncz86IElOb2RlVGVybUxvZywgaW5kZXg/OiBudW1iZXIpID0+IHtcbiAgY29uc3Qgd2l0aExvZ3MgPSBoYXNMb2cobG9ncyk7XG4gIGNvbnN0IGlzQ2FsY3VsYXRlZCA9IFtcbiAgICB0eXBlb2YgZGF0YS5vcmlnaW5hbFZhbHVlID09PSAndW5kZWZpbmVkJywgLy8gbm8gb3JpZ2luYWwgdmFsdWVcbiAgICBkYXRhLmlzUmVjYWxjdWxhdGVkIC8vIGlzIHJlY2FsY3VsYXRlZFxuICBdLmV2ZXJ5KEJvb2xlYW4pO1xuICAvLyBjYW4gYmUgbm90IHJlcXVpcmVkIGZvciBhIHNwZWNpZmljIG1vZGVsXG4gIGNvbnN0IGlzUmVxdWlyZWQgPSAhIWxvZ3MgJiYgJ3J1blJlcXVpcmVkJyBpbiBsb2dzID8gbG9ncy5ydW5SZXF1aXJlZCA6IGRhdGEuaXNSZXF1aXJlZDtcbiAgcmV0dXJuIHdpdGhMb2dzXG4gICAgPyAoXG4gICAgICAhaXNSZXF1aXJlZFxuICAgICAgICA/IExvZ1N0YXR1cy5ub3RSZXF1aXJlZFxuICAgICAgICA6IGlzUnVuT3JjaGVzdHJhdG9yKGxvZ3MpXG4gICAgICAgICAgPyAoXG4gICAgICAgICAgICAnc2hvdWxkUnVuJyBpbiBsb2dzXG4gICAgICAgICAgICAgID8gbG9ncy5zaG91bGRSdW5cbiAgICAgICAgICAgICAgICA/IGRhdGEuaXNSZWNhbGN1bGF0ZWRcbiAgICAgICAgICAgICAgICAgID8gTG9nU3RhdHVzLnN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgIDogTG9nU3RhdHVzLmRhdGFQcm92aWRlZFxuICAgICAgICAgICAgICAgIDogZGF0YS5pc1JlY2FsY3VsYXRlZCAmJiBpbmRleCA+IDBcbiAgICAgICAgICAgICAgICAgID8gTG9nU3RhdHVzLnNraXBIaWVyYXJjaHlcbiAgICAgICAgICAgICAgICAgIDogTG9nU3RhdHVzLmVycm9yXG4gICAgICAgICAgICAgIDogTG9nU3RhdHVzLmRhdGFQcm92aWRlZFxuICAgICAgICAgIClcbiAgICAgICAgICA6IGRhdGEuaXNSZWNhbGN1bGF0ZWRcbiAgICAgICAgICAgID8gTG9nU3RhdHVzLnNraXBIaWVyYXJjaHlcbiAgICAgICAgICAgIDogTG9nU3RhdHVzLmRhdGFQcm92aWRlZFxuICAgIClcbiAgICA6IChcbiAgICAgIGlzQ2FsY3VsYXRlZFxuICAgICAgICA/IExvZ1N0YXR1cy5za2lwSGllcmFyY2h5XG4gICAgICAgIDogTG9nU3RhdHVzLmRhdGFQcm92aWRlZFxuICAgICk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb25maWdNb2RlbCB7XG4gIG1ldGhvZElkOiBzdHJpbmc7XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2c7XG4gIHNob3dMb2dzPzogYm9vbGVhbjtcbiAgc3RhdHVzPzogTG9nU3RhdHVzO1xuICBtb2RlbD86IElNb2RlbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQmxhbmtOb2RlTG9nU3ViVmFsdWUge1xuICBrZXk6IHN0cmluZztcbiAgc2hvd1VuaXRzOiBib29sZWFuO1xuICBvcmlnaW5hbFZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuO1xuICByZWNhbGN1bGF0ZWRWYWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbjtcbiAgaXNSZWNhbGN1bGF0ZWQ6IGJvb2xlYW47XG4gIGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuICBpZD86IGFueTtcbiAgY29uZmlnTW9kZWxzPzogSUNvbmZpZ01vZGVsW107XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2dzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCbGFua05vZGVMb2cge1xuICBpc09wZW46IGJvb2xlYW47XG4gIGNhbk9wZW46IGJvb2xlYW47XG4gIHRlcm06IElUZXJtSlNPTkxEO1xuICB0ZXJtSWQ6IHN0cmluZztcbiAgdHlwZT86IFNjaGVtYVR5cGU7XG4gIGNvbmZpZ01vZGVsczogKElDb25maWdNb2RlbCB8IElDb25maWdNb2RlbFtdKVtdO1xuICBvcmlnaW5hbDogYmxhbmtOb2RlW107XG4gIG9yaWdpbmFsVmFsdWU6IG51bWJlcjtcbiAgLy8gd2hlbiBtdWx0aXBsZSBtb2RlbHMgYXJlIHJ1bm5pbmcgaW4gcGFyYWxsZWxcbiAgb3JpZ2luYWxWYWx1ZUJ5TWV0aG9kSWQ/OiB7XG4gICAgW21ldGhvZElkOiBzdHJpbmddOiBudW1iZXI7XG4gIH07XG4gIHJlY2FsY3VsYXRlZDogYmxhbmtOb2RlW107XG4gIHJlY2FsY3VsYXRlZFZhbHVlOiBudW1iZXI7XG4gIC8vIHdoZW4gbXVsdGlwbGUgbW9kZWxzIGFyZSBydW5uaW5nIGluIHBhcmFsbGVsXG4gIHJlY2FsY3VsYXRlZFZhbHVlQnlNZXRob2RJZD86IHtcbiAgICBbbWV0aG9kSWQ6IHN0cmluZ106IG51bWJlcjtcbiAgfTtcbiAgaXNPcmlnaW5hbDogYm9vbGVhbjtcbiAgaXNSZWNhbGN1bGF0ZWQ6IGJvb2xlYW47XG4gIGhhc0RhdGE6IGJvb2xlYW47XG4gIGlzUmVxdWlyZWQ6IGJvb2xlYW47XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2dzO1xuICBrZXlzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXTtcbiAgc3ViVmFsdWVzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXTtcbiAgLy8gbW9kZWxzIGFyZSBwcmVzZW50IGFzIHdlbGwgaW4gb25lIG9mIHRoZSBTdWJWYWx1ZXMsIGRvIG5vdCBzaG93IHR3aWNlXG4gIG1vZGVsc0luU3ViVmFsdWVzPzogYm9vbGVhbjtcbiAgLy8gY29udGFpbnMgbXVsdGlwbGUgbW9kZWxzIGFsbCBydW5uaW5nIGluIHBhcmFsbGVsXG4gIGFsbFBhcmFsbGVsPzogYm9vbGVhbjtcbn1cblxuY29uc3QgZmlsdGVyUmVxdWlyZWRDb25maWdNb2RlbCA9ICh7IHN0YXR1cyB9OiBJQ29uZmlnTW9kZWwpID0+IHN0YXR1cyAhPT0gTG9nU3RhdHVzLm5vdFJlcXVpcmVkO1xuXG5jb25zdCBmaWx0ZXJSZXF1aXJlZENvbmZpZ01vZGVscyA9IChtb2RlbHM6IChJQ29uZmlnTW9kZWwgfCBJQ29uZmlnTW9kZWxbXSlbXSkgPT5cbiAgbW9kZWxzXG4gICAgLmZpbHRlcih2ID0+IEFycmF5LmlzQXJyYXkodikgfHwgZmlsdGVyUmVxdWlyZWRDb25maWdNb2RlbCh2KSlcbiAgICAubWFwKHYgPT4gQXJyYXkuaXNBcnJheSh2KSA/IHYuZmlsdGVyKGZpbHRlclJlcXVpcmVkQ29uZmlnTW9kZWwpIDogdik7XG5cbmNvbnN0IG1lcmdlU3ViVmFsdWVzID0gKHZhbHVlczogYW55W10pOiBhbnlbXSA9PlxuICBPYmplY3QudmFsdWVzKFxuICAgIHZhbHVlcy5yZWR1Y2UoKHByZXYsIHsgaWQsIGtleSwgY29uZmlnTW9kZWxzLCAuLi5kYXRhIH0pID0+IHtcbiAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IFtrZXksIGlkXS5maWx0ZXIoQm9vbGVhbikuam9pbignLicpO1xuICAgICAgcHJldlt1bmlxdWVLZXldID0ge1xuICAgICAgICAuLi5PYmplY3QuYXNzaWduKHt9LCBwcmV2W3VuaXF1ZUtleV0sIGRhdGEpLFxuICAgICAgICBpZCxcbiAgICAgICAga2V5LFxuICAgICAgICBjb25maWdNb2RlbHM6IHVuaXF1ZShbLi4uKChwcmV2W3VuaXF1ZUtleV0gfHwge30pLmNvbmZpZ01vZGVscyB8fCBbXSksIC4uLihjb25maWdNb2RlbHMgfHwgW10pXSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCB7fSlcbiAgKTtcblxuY29uc3QgcmVkdWNlVmFsdWVzID0gKHZhbHVlczogYW55W10sIHRlcm1JZDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHByb3BlcnR5VmFsdWVzID0gdmFsdWVzXG4gICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiBwcm9wZXJ0eVZhbHVlKHZhbHVlLCB0ZXJtSWQpKVxuICAgIC8vIHByb3BlcnR5VmFsdWUgbWF5IHJldHVybiBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlcmVmb3JlIHJlbW92ZSB0aGVtIGZyb20gdG90YWxcbiAgICAuZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCk7XG4gIHJldHVybiBwcm9wZXJ0eVZhbHVlcy5sZW5ndGggPyBwcm9wZXJ0eVZhbHVlcy5yZWR1Y2UoKHAsIHYpID0+IHAgKyB2LCAwKSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGlzUnVuT3JjaGVzdHJhdG9yID0gKGxvZzogSU5vZGVUZXJtTG9nKSA9PiAhKCdzaG91bGRSdW5PcmNoZXN0cmF0b3InIGluIGxvZykgfHwgbG9nLnNob3VsZFJ1bk9yY2hlc3RyYXRvcjtcblxuY29uc3QgaGFzTG9nID0gKGxvZzogSU5vZGVUZXJtTG9nLCB3aXRoT3JjaGVzdHJhdG9yID0gdHJ1ZSkgPT5cbiAgISFsb2cgJiYgKFxuICAgICdzaG91bGRSdW4nIGluIGxvZyB8fFxuICAgICdydW5SZXF1aXJlZCcgaW4gbG9nIHx8XG4gICAgKHdpdGhPcmNoZXN0cmF0b3IgJiYgJ3Nob3VsZFJ1bk9yY2hlc3RyYXRvcicgaW4gbG9nKVxuICApO1xuXG5jb25zdCBpc1JlY2FsY3VsYXRlZCA9ICh2YWx1ZXM6IGJsYW5rTm9kZVtdLCBrZXkgPSAndmFsdWUnKSA9PiB2YWx1ZXMuc29tZSh2ID0+IChbXG4gIC4uLih2LmFkZGVkIHx8IFtdKSxcbiAgLi4uKHYudXBkYXRlZCB8fCBbXSlcbl0pLmluY2x1ZGVzKGtleSkpO1xuXG5jb25zdCBibGFua05vZGVWYWx1ZUJ5S2V5OiB7XG4gIFtrZXk6IHN0cmluZ106ICh2YWx1ZXM6IGJsYW5rTm9kZVtdLCBrZXk/OiBzdHJpbmcsIGlkPzogc3RyaW5nKSA9PiBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuO1xufSA9IHtcbiAgcHJvcGVydHk6ICh2YWx1ZXM6IChFbWlzc2lvbiB8IFByb2R1Y3QgfCBIZXN0aWFJbnB1dClbXSwgX2ssIGlkKSA9PiAhIWlkICYmIHZhbHVlcz8ubGVuZ3RoXG4gICAgPyAodmFsdWVzWzBdLnByb3BlcnRpZXMgfHwgW10pLmZpbmQocCA9PiBwLnRlcm1bJ0BpZCddID09PSBpZCk/LnZhbHVlIHx8ICcnXG4gICAgOiAnJyxcbiAgaW5wdXQ6ICh2YWx1ZXM6IEVtaXNzaW9uW10sIF9rLCBpZCkgPT4gISFpZCAmJiAodmFsdWVzIHx8IFtdKS5maWx0ZXIodiA9PiB2WydAdHlwZSddID09PSBTY2hlbWFUeXBlLkVtaXNzaW9uKS5sZW5ndGhcbiAgICA/IHByb3BlcnR5VmFsdWUodmFsdWVzLmZpbmQoKHsgaW5wdXRzIH0pID0+IChpbnB1dHMgfHwgW10pLnNvbWUoaW5wdXQgPT4gaW5wdXRbJ0BpZCddID09PSBpZCkpPy52YWx1ZSwgaWQpXG4gICAgOiAnJyxcbiAgdHJhbnNmb3JtYXRpb246ICh2YWx1ZXM6IEVtaXNzaW9uW10sIF9rLCBpZCkgPT4gdmFsdWVzLmxlbmd0aFxuICAgID8gcHJvcGVydHlWYWx1ZSh2YWx1ZXMuZmluZCgoeyB0cmFuc2Zvcm1hdGlvbiB9KSA9PiB0cmFuc2Zvcm1hdGlvbj8uWydAaWQnXSA9PT0gaWQpPy52YWx1ZSwgaWQpXG4gICAgOiAnJyxcbiAgZGVmYXVsdDogKGJsYW5rTm9kZXMsIGtleSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gYmxhbmtOb2Rlcz8ubGVuZ3RoID8gYmxhbmtOb2Rlc1swXVtrZXldIDogbnVsbDtcbiAgICByZXR1cm4gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nLCAndW5kZWZpbmVkJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKVxuICAgICAgPyBpc1VuZGVmaW5lZCh2YWx1ZSlcbiAgICAgID8gJydcbiAgICAgIDogdmFsdWVcbiAgICAgIDogbnVsbDtcbiAgfVxufTtcblxuY29uc3QgYmxhbmtOb2RlVmFsdWUgPSAoYmxhbmtOb2RlczogYmxhbmtOb2RlW10sIGtleTogc3RyaW5nLCBpZD86IHN0cmluZykgPT5cbiAgYmxhbmtOb2RlVmFsdWVCeUtleVtrZXkgaW4gYmxhbmtOb2RlVmFsdWVCeUtleSA/IGtleSA6ICdkZWZhdWx0J10oYmxhbmtOb2Rlcywga2V5LCBpZCk7XG5cbmNvbnN0IHN1YlZhbHVlTG9nS2V5ID0gKHsga2V5LCBpZCB9OiBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpOiBzdHJpbmcgPT5cbiAga2V5ID09PSAndHJhbnNmb3JtYXRpb24nID8ga2V5IDogKGlkIHx8IGtleSB8fCBudWxsKTtcblxuY29uc3QgaW5wdXRWYWx1ZSA9ICh7IHZhbHVlLCBjb2VmZmljaWVudCB9OiBhbnkgPSB7fSkgPT5cbiAgW3ZhbHVlLCBjb2VmZmljaWVudF0uZXZlcnkoaXNOdW1iZXIpID8gK3ZhbHVlICogK2NvZWZmaWNpZW50IDogdW5kZWZpbmVkO1xuXG5jb25zdCBsb2dTdWJWYWx1ZSA9IChsb2dzOiBJTm9kZVRlcm1Mb2dzLCBrZXk6IHN0cmluZywgcHJvcDogc3RyaW5nLCBzaG93VW5pdHMgPSBmYWxzZSkgPT4ge1xuICBjb25zdCBsb2cgPSBsb2dzW2tleV0/Lltwcm9wXTtcbiAgcmV0dXJuIGxvZyA/IChcbiAgICBBcnJheS5pc0FycmF5KGxvZykgP1xuICAgICAgKGxvZyBhcyBzdHJpbmdbXSkubWFwKGlkID0+ICh7XG4gICAgICAgIGtleTogcHJvcCwgaWQsIHNob3dVbml0cyxcbiAgICAgICAgLy8gcmVjYWxjdWxhdGVkVmFsdWU6IGlucHV0VmFsdWUobG9nc1trZXldPy5sb2dzPy5baWRdKVxuICAgICAgfSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpKSA6XG4gICAgICB7XG4gICAgICAgIGtleTogcHJvcCwgaWQ6IGxvZywgc2hvd1VuaXRzLFxuICAgICAgICAvLyByZWNhbGN1bGF0ZWRWYWx1ZTogaW5wdXRWYWx1ZShsb2dzW2tleV0/LmxvZ3M/Lltsb2ddKVxuICAgICAgfSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWVcbiAgKSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGxvZ1Byb3BlcnRpZXMgPSAobm9kZXM6IGJsYW5rTm9kZVtdLCBtb2RlbHM6IElNb2RlbFtdKSA9PlxuICBub2Rlcy5mbGF0TWFwKG5vZGUgPT5cbiAgICAoKG5vZGUgYXMgYW55KS5wcm9wZXJ0aWVzIHx8IFtdKS5tYXAoKHsgdGVybSB9KSA9PiB0ZXJtWydAaWQnXSlcbiAgKS5tYXAoaWQgPT4gKHsga2V5OiAncHJvcGVydHknLCBpZCwgc2hvd1VuaXRzOiBmYWxzZSwgY29uZmlnTW9kZWxzOiBmaW5kTW9kZWxzKG1vZGVscywgaWQpLm1hcCgoeyBtb2RlbCB9KSA9PiBtb2RlbCkgfSkpO1xuXG4vKipcbiAqIEluY2x1ZGUgdHJhbnNmb3JtYXRpb24gbW9kZWwgKGNvcHkgRW1pc3Npb25zIGZyb20gVHJhbnNmb3JtYXRpb24gdG8gQ3ljbGUpIGFzIHN1YlZhbHVlLlxuICpcbiAqIEBwYXJhbSBlbWlzc2lvbnNcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IGxvZ0VtaXNzaW9uVHJhbnNmb3JtYXRpb25zID0gKGVtaXNzaW9uczogRW1pc3Npb25bXSkgPT5cbiAgZW1pc3Npb25zLmZpbHRlcigoeyB0cmFuc2Zvcm1hdGlvbiB9KSA9PiAhIXRyYW5zZm9ybWF0aW9uPy5bJ0BpZCddKS5tYXAoKHsgdHJhbnNmb3JtYXRpb24gfSkgPT4gKHtcbiAgICBpZDogdHJhbnNmb3JtYXRpb24/LlsnQGlkJ10sXG4gICAga2V5OiAndHJhbnNmb3JtYXRpb24nLFxuICAgIHNob3dVbml0czogdHJ1ZSxcbiAgICBjb25maWdNb2RlbHM6IFsnY3ljbGUvdHJhbnNmb3JtYXRpb24nXVxuICB9KSk7XG5cbmNvbnN0IGluY2x1ZGVDeWNsZVN1YlZhbHVlID0gKHN1YlZhbHVlczogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlW10pID0+XG4gIHN1YlZhbHVlcy5zb21lKHYgPT4gdi5rZXkgIT09ICdwcm9wZXJ0eScpO1xuXG5jb25zdCBjeWNsZVN1YlZhbHVlID0gKHtcbiAgdGVybUlkLCBjb25maWdNb2RlbHMsIGlzUmVxdWlyZWQsIHN1YlZhbHVlcywgb3JpZ2luYWwsIHJlY2FsY3VsYXRlZFxufTogSUJsYW5rTm9kZUxvZykgPT4ge1xuICBjb25zdCBvcmlnaW5hbFZhbHVlID0gcmVkdWNlVmFsdWVzKG9yaWdpbmFsLmZpbHRlcigodjogYW55KSA9PiAhdi5pbnB1dHM/Lmxlbmd0aCAmJiAhdi50cmFuc2Zvcm1hdGlvbiksIHRlcm1JZCk7XG4gIGNvbnN0IHJlY2FsY3VsYXRlZFZhbHVlcyA9IHJlY2FsY3VsYXRlZC5maWx0ZXIoKHY6IGFueSkgPT4gIXYuaW5wdXRzPy5sZW5ndGggJiYgIXYudHJhbnNmb3JtYXRpb24pO1xuICBjb25zdCByZWNhbGN1bGF0ZWRWYWx1ZSA9IHJlZHVjZVZhbHVlcyhyZWNhbGN1bGF0ZWRWYWx1ZXMsIHRlcm1JZCk7XG4gIHJldHVybiBpbmNsdWRlQ3ljbGVTdWJWYWx1ZShzdWJWYWx1ZXMpICYmICFpc0VtcHR5KHJlY2FsY3VsYXRlZFZhbHVlKSA/IHtcbiAgICBrZXk6ICdjeWNsZScsXG4gICAgc2hvd1VuaXRzOiB0cnVlLFxuICAgIGNvbmZpZ01vZGVscyxcbiAgICBpc1JlcXVpcmVkLFxuICAgIG9yaWdpbmFsVmFsdWUsXG4gICAgcmVjYWxjdWxhdGVkVmFsdWUsXG4gICAgaXNSZWNhbGN1bGF0ZWQ6IGlzUmVjYWxjdWxhdGVkKHJlY2FsY3VsYXRlZFZhbHVlcylcbiAgfSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWUgOiBudWxsO1xufTtcblxuY29uc3QgbG9nU3ViVmFsdWVzID0gKFxuICBhbGxMb2dzOiBJTm9kZUxvZ3MsIGxvZ3M6IElOb2RlVGVybUxvZ3MsIG9yaWdpbmFsOiBibGFua05vZGVbXSwgcmVjYWxjdWxhdGVkOiBibGFua05vZGVbXSwgbW9kZWxzOiBJTW9kZWxbXSxcbiAgeyBub2RlVHlwZSwgdHlwZSwgdGVybUlkIH06IElDb25maWdNb2RlbERvY3NEYXRhXG4pID0+XG4gIG1lcmdlU3ViVmFsdWVzKFtcbiAgICAvLyBpbmNsdWRlIHByb3BlcnRpZXNcbiAgICAuLi5PYmplY3Qua2V5cyhsb2dzKVxuICAgICAgLmZpbHRlcihpZCA9PiBsb2dzW2lkXS5pc1Byb3BlcnR5KVxuICAgICAgLm1hcChpZCA9PiAoe1xuICAgICAgICBpZCxcbiAgICAgICAga2V5OiAncHJvcGVydHknLFxuICAgICAgICBzaG93VW5pdHM6IGZhbHNlLFxuICAgICAgICBjb25maWdNb2RlbHM6IChsb2dzW2lkXS5tb2RlbHMgfHwgW10pLmZpbHRlcih2ID0+IGhhc0xvZyhsb2dzW2lkXVt2XSkpXG4gICAgICB9KSksXG4gICAgLi4uKHR5cGUgPT09IFNjaGVtYVR5cGUuRW1pc3Npb24gPyBsb2dFbWlzc2lvblRyYW5zZm9ybWF0aW9ucyhyZWNhbGN1bGF0ZWQgYXMgRW1pc3Npb25bXSkgOiBbXSksXG4gICAgLi4uT2JqZWN0LmtleXMobG9ncykuZmxhdE1hcChrZXkgPT5cbiAgICAgIFtcbiAgICAgICAgbG9nU3ViVmFsdWUobG9ncywga2V5LCAnaW5wdXQnLCB0cnVlKSxcbiAgICAgICAgbG9nU3ViVmFsdWUobG9ncywga2V5LCAncHJvcGVydHknKVxuICAgICAgXVxuICAgICAgICAuZmxhdCgpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLm1hcCh2ID0+ICh7IC4uLnYsIGNvbmZpZ01vZGVsczogKHYuY29uZmlnTW9kZWxzIGFzIGFueVtdKSB8fCBba2V5XSB9KSlcbiAgICApLFxuICAgIC4uLmxvZ1Byb3BlcnRpZXMob3JpZ2luYWwsIG1vZGVscyksXG4gICAgLi4ubG9nUHJvcGVydGllcyhyZWNhbGN1bGF0ZWQsIG1vZGVscylcbiAgXSlcbiAgICAubWFwKCh7IGtleSwgaWQsIHNob3dVbml0cywgY29uZmlnTW9kZWxzLCBvcmlnaW5hbFZhbHVlLCByZWNhbGN1bGF0ZWRWYWx1ZSB9KSA9PiB7XG4gICAgICBvcmlnaW5hbFZhbHVlID0gb3JpZ2luYWxWYWx1ZSB8fCBibGFua05vZGVWYWx1ZShvcmlnaW5hbCwga2V5LCBpZCk7XG4gICAgICByZWNhbGN1bGF0ZWRWYWx1ZSA9IHJlY2FsY3VsYXRlZFZhbHVlIHx8IGJsYW5rTm9kZVZhbHVlKHJlY2FsY3VsYXRlZCwga2V5LCBpZCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXksXG4gICAgICAgIGlkLFxuICAgICAgICBzaG93VW5pdHMsXG4gICAgICAgIGNvbmZpZ01vZGVsczogY29uZmlnTW9kZWxzLm1hcChjb25maWdNb2RlbFdpdGhEb2NzKG1vZGVscywgeyBub2RlVHlwZSwgdHlwZSwgdGVybUlkIH0sIHsga2V5LCBpZCB9IGFzIGFueSkpLFxuICAgICAgICBvcmlnaW5hbFZhbHVlLFxuICAgICAgICByZWNhbGN1bGF0ZWRWYWx1ZSxcbiAgICAgICAgaXNSZWNhbGN1bGF0ZWQ6ICFpc1VuZGVmaW5lZChyZWNhbGN1bGF0ZWRWYWx1ZSkgJiYgcmVjYWxjdWxhdGVkVmFsdWUgIT09IG9yaWdpbmFsVmFsdWUsXG4gICAgICAgIGlzUmVxdWlyZWQ6IHRydWVcbiAgICAgIH0gYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlO1xuICAgIH0pXG4gICAgLmZpbHRlcigoeyBjb25maWdNb2RlbHMsIG9yaWdpbmFsVmFsdWUsIHJlY2FsY3VsYXRlZFZhbHVlIH0pID0+IFtcbiAgICAgIGNvbmZpZ01vZGVscy5sZW5ndGggPiAwLFxuICAgICAgb3JpZ2luYWxWYWx1ZSAhPT0gJycgfHwgcmVjYWxjdWxhdGVkVmFsdWUgIT09ICcnXG4gICAgXS5ldmVyeShCb29sZWFuKSlcbiAgICAubWFwKHYgPT4gdi5rZXkgPT09ICdpbnB1dCcgPyBkYXRhV2l0aENvbmZpZ01vZGVsTG9ncyhhbGxMb2dzKSh2KSA6IGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzKGxvZ3MpKHYpKTtcblxuY29uc3QgbG9nS2V5cyA9IChcbiAgbG9nczogSU5vZGVUZXJtTG9ncywgb3JpZ2luYWw6IGJsYW5rTm9kZVtdLCByZWNhbGN1bGF0ZWQ6IGJsYW5rTm9kZVtdLCBtb2RlbHM6IElNb2RlbFtdLCB7IG5vZGVUeXBlLCB0eXBlLCB0ZXJtSWQgfVxuKSA9PlxuICBPYmplY3Qua2V5cyhsb2dzKVxuICAgIC5maWx0ZXIoa2V5ID0+IGxvZ3Nba2V5XS5pc0tleSAmJiBrZXkgIT09ICd0cmFuc2Zvcm1hdGlvbicpXG4gICAgLm1hcChrZXkgPT4gKHtcbiAgICAgIGtleSxcbiAgICAgIHNob3dVbml0czogZmFsc2UsXG4gICAgICBjb25maWdNb2RlbHM6IChsb2dzW2tleV0ubW9kZWxzIHx8IFtdKVxuICAgICAgICAubWFwKGNvbmZpZ01vZGVsV2l0aERvY3MobW9kZWxzLCB7IG5vZGVUeXBlLCB0eXBlLCB0ZXJtSWQgfSwgeyBrZXkgfSBhcyBhbnkpKVxuICAgICAgICAvLyBvbmx5IHRha2UgdGhvc2Ugd2UgZm91bmQgYSBtYXRjaGluZyBtb2RlbCAoYXZvaWQgbWF0Y2hpbmcga2V5IG9uIHdyb25nIG5vZGUgdHlwZSlcbiAgICAgICAgLmZpbHRlcih2ID0+ICEhdi5tb2RlbCksXG4gICAgICBvcmlnaW5hbFZhbHVlOiBibGFua05vZGVWYWx1ZShvcmlnaW5hbCwga2V5KSxcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlOiBibGFua05vZGVWYWx1ZShyZWNhbGN1bGF0ZWQsIGtleSksXG4gICAgICBpc1JlY2FsY3VsYXRlZDogaXNSZWNhbGN1bGF0ZWQocmVjYWxjdWxhdGVkLCBrZXkpLFxuICAgICAgaXNSZXF1aXJlZDogdHJ1ZVxuICAgIH0gYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKSlcbiAgICAuZmlsdGVyKHYgPT4gdi5jb25maWdNb2RlbHMubGVuZ3RoID4gMClcbiAgICAubWFwKGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzKGxvZ3MpKTtcblxuY29uc3QgaXNNb2RlbEZvcklucHV0UHJvZHVjdCA9ICh0eXBlOiBTY2hlbWFUeXBlLCBrZXk6IHN0cmluZykgPT4gW1xuICBrZXkgIT09ICdoZXN0aWFBZ2dyZWdhdGVkRGF0YScsXG4gICFrZXkuaW5jbHVkZXMoJy9pbnB1dC8nKSB8fCB0eXBlID09PSBTY2hlbWFUeXBlLklucHV0LFxuICAha2V5LmluY2x1ZGVzKCcvcHJvZHVjdC8nKSB8fCB0eXBlID09PSBTY2hlbWFUeXBlLlByb2R1Y3QsXG5dLmV2ZXJ5KEJvb2xlYW4pO1xuXG5jb25zdCBpc0JhY2tncm91bmRJbnB1dCA9IChsb2c6IElOb2RlVGVybUxvZykgPT5cbiAgbG9nLm1ldGhvZFRpZXIgPT09IEVtaXNzaW9uTWV0aG9kVGllci5iYWNrZ3JvdW5kICYmICEhbG9nLmlucHV0ICYmIGxvZy5zaG91bGRSdW47XG5cbmNvbnN0IGlzTW9kZWxMb2cgPSAobG9nczogSU5vZGVUZXJtTG9ncywgdHlwZTogU2NoZW1hVHlwZSkgPT4gKGtleTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGxvZyA9IGxvZ3Nba2V5XTtcbiAgcmV0dXJuIFtcbiAgICAvLyBoYW5kbGUgUHJvZHVjdCBzYW1lIGFzIElucHV0XG4gICAgaXNNb2RlbEZvcklucHV0UHJvZHVjdCh0eXBlLCBrZXkpLFxuICAgIGxvZy5tZXRob2RUaWVyICE9PSBFbWlzc2lvbk1ldGhvZFRpZXIuYmFja2dyb3VuZCxcbiAgICAhbG9nLmlzS2V5LFxuICAgIC8vICFsb2cuaW5wdXQsXG4gICAgIWxvZy5wcm9wZXJ0eVxuICBdLmV2ZXJ5KEJvb2xlYW4pICYmIFtcbiAgICAnc2hvdWxkUnVuJyBpbiBsb2csXG4gICAgJ3Nob3VsZFJ1bk9yY2hlc3RyYXRvcicgaW4gbG9nLFxuICAgICdydW5SZXF1aXJlZCcgaW4gbG9nXG4gIF0uc29tZShCb29sZWFuKTtcbn07XG5cbmNvbnN0IG1vZGVsQ29uZmlnT3JkZXIgPSAoXG4gIG1vZGVsczogKElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZyB8IElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZ1tdKVtdLCB0ZXJtSWQ6IHN0cmluZywgbW9kZWxLZXk6IHN0cmluZywgbW9kZWw6IHN0cmluZ1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgaW5kZXhlcyA9IG1vZGVscy5tYXAoKG0sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgYXJyYXlJbmRleCA9IEFycmF5LmlzQXJyYXkobSkgPyBtb2RlbENvbmZpZ09yZGVyKG0sIHRlcm1JZCwgbW9kZWxLZXksIG1vZGVsKSA6ICcnO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KG0pXG4gICAgICA/IGFycmF5SW5kZXhcbiAgICAgICAgPyBbaW5kZXgsIGFycmF5SW5kZXhdLmpvaW4oJy4nKVxuICAgICAgICA6ICcnXG4gICAgICA6IFt0ZXJtSWQgPT09IG0udmFsdWUsIG1vZGVsS2V5ID09PSBtLmtleSwgbW9kZWwgPT09IG0ubW9kZWxdLmV2ZXJ5KEJvb2xlYW4pXG4gICAgICAgID8gYCR7aW5kZXh9YFxuICAgICAgICA6ICcnO1xuICB9KS5maWx0ZXIoQm9vbGVhbik7XG4gIHJldHVybiBpbmRleGVzLmxlbmd0aCA/IGluZGV4ZXNbMF0gOiAnJztcbn07XG5cbmludGVyZmFjZSBJQ29uZmlnTW9kZWxEb2NzRGF0YSB7XG4gIG5vZGVUeXBlOiBOb2RlVHlwZTtcbiAgdHlwZTogU2NoZW1hVHlwZTtcbiAgdGVybUlkOiBzdHJpbmc7XG4gIHRlcm1UeXBlPzogVGVybVRlcm1UeXBlO1xufVxuXG5jb25zdCBjb25maWdNb2RlbFdpdGhEb2NzID0gKFxuICBtb2RlbHM6IElNb2RlbFtdLCB7IG5vZGVUeXBlLCB0eXBlLCB0ZXJtSWQsIHRlcm1UeXBlIH06IElDb25maWdNb2RlbERvY3NEYXRhLCBzdWJWYWx1ZT86IElCbGFua05vZGVMb2dTdWJWYWx1ZVxuKSA9PiAobWV0aG9kSWQ6IHN0cmluZykgPT4ge1xuICBjb25zdCBub2RlID0ge1xuICAgICdAdHlwZSc6IG5vZGVUeXBlLFxuICAgIHRlcm06IHsgJ0BpZCc6IHN1YlZhbHVlPy5pZCB8fCB0ZXJtSWQgfSxcbiAgICBtZXRob2RNb2RlbDogeyAnQGlkJzogbWV0aG9kSWQgfVxuICB9IGFzIGFueTtcbiAgcmV0dXJuIHtcbiAgICBtZXRob2RJZCxcbiAgICBtb2RlbDogZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCBtb2RlbFBhcmFtcyhub2RlKSkgfHxcbiAgICAgIC8vIGhhbmRsZSBcImxpdmVBbmltYWxcIlxuICAgICAgKHRlcm1UeXBlICYmIGZpbmRNYXRjaGluZ01vZGVsKG1vZGVscywgbW9kZWxLZXlQYXJhbXMobm9kZSwgdGVybVR5cGUpKSkgfHxcbiAgICAgIGZpbmRNYXRjaGluZ01vZGVsKG1vZGVscywgbW9kZWxLZXlQYXJhbXMobm9kZSwgYCR7c3ViVmFsdWU/LmtleX0uJHttZXRob2RJZH1gKSkgfHxcbiAgICAgIC8vIGhhbmRsZSBcImlucHV0LnByaWNlXCJcbiAgICAgIGZpbmRNYXRjaGluZ01vZGVsKG1vZGVscywgbW9kZWxLZXlQYXJhbXMobm9kZSwgYCR7dHlwZT8udG9Mb3dlckNhc2UoKX0uJHtzdWJWYWx1ZT8ua2V5fWApKSB8fFxuICAgICAgLy8gaGFuZGxlIFwiaW5wdXQuaGVzdGlhQWdncmVnYXRlZERhdGFcIlxuICAgICAgZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCBtb2RlbEtleVBhcmFtcyhub2RlLCBgJHt0eXBlPy50b0xvd2VyQ2FzZSgpfS4ke21ldGhvZElkfWApKSB8fFxuICAgICAgLy8gaGFuZGxlIFwidHJhbnNmb3JtYXRpb25cIlxuICAgICAgKHN1YlZhbHVlPy5rZXkgPyBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsS2V5UGFyYW1zKG5vZGUsIHN1YlZhbHVlPy5rZXkpKSA6IHVuZGVmaW5lZCkgfHxcbiAgICAgIC8vIGhhbmRsZSBcInRyYW5zZm9ybWF0aW9uL2lucHV0L2V4Y3JldGFcIiBhbmQgb3RoZXIgbW9kZWxzIHdpdGggXCIvXCJcbiAgICAgIChtZXRob2RJZC5pbmNsdWRlcygnLycpID8gZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCB7XG4gICAgICAgIG1vZGVsOiBtZXRob2RJZC5zcGxpdCgnLycpWzBdLFxuICAgICAgICBtb2RlbEtleTogbWV0aG9kSWQuc3BsaXQoJy8nKS5zbGljZSgxKS5qb2luKCcuJylcbiAgICAgIH0pIDogdW5kZWZpbmVkKVxuICB9O1xufTtcblxuY29uc3QgY29uZmlnTW9kZWxXaXRoTG9ncyA9IChkYXRhOiBJQmxhbmtOb2RlTG9nIHwgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlLCBsb2dzOiBJTm9kZVRlcm1Mb2dzKSA9PiAoXG4gIG1vZGVsOiBJQ29uZmlnTW9kZWwsIGluZGV4ID0gMFxuKSA9PiB7XG4gIGNvbnN0IHN0YXR1cyA9IGxvZ1N0YXR1cyhkYXRhLCBsb2dzPy5bbW9kZWwubWV0aG9kSWRdLCBpbmRleCk7XG4gIHJldHVybiB7XG4gICAgLi4ubW9kZWwsXG4gICAgbG9nczogbG9ncz8uW21vZGVsLm1ldGhvZElkXSxcbiAgICBzdGF0dXMsXG4gICAgc2hvd0xvZ3M6IGhhc0xvZ0RldGFpbHMoc3RhdHVzLCBsb2dzPy5bbW9kZWwubWV0aG9kSWRdKVxuICB9IGFzIElDb25maWdNb2RlbDtcbn07XG5cbmNvbnN0IGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzID0gKFxuICBsb2dzOiBJTm9kZUxvZ3MgfCBJTm9kZVRlcm1Mb2dzXG4pID0+IDxUIGV4dGVuZHMgKElCbGFua05vZGVMb2cgfCBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpPihkYXRhOiBUKSA9PiB7XG4gIGNvbnN0IHN1YkxvZ0tleSA9IHN1YlZhbHVlTG9nS2V5KGRhdGEgYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKTtcbiAgY29uc3QgbG9nID0gc3ViTG9nS2V5ID8gbG9nc1tzdWJMb2dLZXldIDogbG9ncztcbiAgcmV0dXJuIHtcbiAgICAuLi5kYXRhLFxuICAgIGNvbmZpZ01vZGVsczogZmlsdGVyUmVxdWlyZWRDb25maWdNb2RlbHMoXG4gICAgICBkYXRhLmNvbmZpZ01vZGVscy5tYXAoKG1vZGVsLCBpbmRleCkgPT5cbiAgICAgICAgQXJyYXkuaXNBcnJheShtb2RlbCkgPyBtb2RlbC5tYXAoY29uZmlnTW9kZWxXaXRoTG9ncyhkYXRhLCBsb2cpKSA6IGNvbmZpZ01vZGVsV2l0aExvZ3MoZGF0YSwgbG9nKShtb2RlbCwgaW5kZXgpXG4gICAgICApXG4gICAgKVxuICB9IGFzIFQ7XG59O1xuXG4vKipcbiAqIEdyb3VwIG1vZGVscyBydW5uaW5nIGluIHBhcmFsbGVsIHVuZGVyIHRoZSBzYW1lIGFycmF5LCBhcyB0aGV5IHNob3VsZCBhcHBlYXIgdmVydGljYWxseS5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIG1vZGVscyBUaGUgbGlzdCBvZiBtb2RlbHNcbiAqL1xuY29uc3QgZ3JvdXBQYXJhbGxlbE1vZGVscyA9IChjb25maWc6IElPcmNoZXN0cmF0b3JDb25maWcsIHRlcm1JZDogc3RyaW5nLCBtb2RlbEtleTogc3RyaW5nLCBtb2RlbHM6IElDb25maWdNb2RlbFtdKSA9PiB7XG4gIGNvbnN0IG1vZGVsc1dpdGhPcmRlciA9IG1vZGVscy5tYXAobW9kZWwgPT4gKHtcbiAgICBtb2RlbCxcbiAgICBvcmRlcjogbW9kZWxDb25maWdPcmRlcihjb25maWcubW9kZWxzLCB0ZXJtSWQsIG1vZGVsS2V5LCBtb2RlbC5tZXRob2RJZClcbiAgfSkpO1xuICByZXR1cm4gbW9kZWxzV2l0aE9yZGVyXG4gICAgLnJlZHVjZSgocHJldiwgeyBtb2RlbCwgb3JkZXIgfSkgPT4ge1xuICAgICAgY29uc3QgaXNBcnJheSA9IG9yZGVyLmluY2x1ZGVzKCcuJyk7XG4gICAgICBjb25zdCBhcnJheUluZGV4ID0gaXNBcnJheSA/IG9yZGVyLnNwbGl0KCcuJylbMF0gOiBwcmV2Lmxlbmd0aDtcbiAgICAgIHByZXZbYXJyYXlJbmRleF0gPSBpc0FycmF5ID8gWy4uLihwcmV2W2FycmF5SW5kZXhdIHx8IFtdKSwgbW9kZWxdIDogbW9kZWw7XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCBbXSBhcyBJQ29uZmlnTW9kZWxbXVtdKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAubWFwKHYgPT4gdi5sZW5ndGggPT09IDEgPyB2WzBdIDogdik7XG59O1xuXG5jb25zdCBhbGxQYXJhbGxlbCA9IChtb2RlbHM6IChJQ29uZmlnTW9kZWwgfCBJQ29uZmlnTW9kZWxbXSlbXSkgPT5cbiAgbW9kZWxzLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KG1vZGVsc1swXSkgJiYgbW9kZWxzWzBdLmxlbmd0aCA+IDE7XG5cbmNvbnN0IHZhbHVlQnlNZXRob2RJZCA9ICh2YWx1ZXM6IGJsYW5rTm9kZVtdLCBtZXRob2RJZDogc3RyaW5nLCB0ZXJtSWQ6IHN0cmluZykgPT5cbiAgcHJvcGVydHlWYWx1ZSh2YWx1ZXMuZmluZCh2ID0+IHYubWV0aG9kTW9kZWw/LlsnQGlkJ10gPT09IG1ldGhvZElkKT8udmFsdWUgYXMgbnVtYmVyW10sIHRlcm1JZCk7XG5cbmNvbnN0IGdyb3VwUGFyYWxsZWxWYWx1ZXMgPSAodmFsdWVzOiBibGFua05vZGVbXSwgbW9kZWxzOiBJQ29uZmlnTW9kZWwgfCBJQ29uZmlnTW9kZWxbXSwgdGVybUlkOiBzdHJpbmcpID0+XG4gIEFycmF5LmlzQXJyYXkobW9kZWxzKVxuICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKG1vZGVscy5tYXAobW9kZWwgPT4gW21vZGVsLm1ldGhvZElkLCB2YWx1ZUJ5TWV0aG9kSWQodmFsdWVzLCBtb2RlbC5tZXRob2RJZCwgdGVybUlkKV0pKVxuICAgIDoge307XG5cbmV4cG9ydCBjb25zdCBncm91cExvZ3NCeVRlcm0gPSAoXG4gIG5vZGVUeXBlOiBOb2RlVHlwZSwgbG9nczogSU5vZGVMb2dzLCBtb2RlbHM6IElNb2RlbFtdLCBjb25maWc6IElPcmNoZXN0cmF0b3JDb25maWcsXG4gIGFsbE9yaWdpbmFsVmFsdWVzOiBibGFua05vZGVbXSwgYWxsUmVjYWxjdWxhdGVkVmFsdWVzOiBibGFua05vZGVbXSxcbiAgbm9kZUtleT86IHN0cmluZ1xuKSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsVmFsdWVzID0gKGFsbE9yaWdpbmFsVmFsdWVzIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gISh2YWx1ZSBhcyBhbnkpLmRlbGV0ZWQpO1xuICBjb25zdCByZWNhbGN1bGF0ZWRWYWx1ZXMgPSAoYWxsUmVjYWxjdWxhdGVkVmFsdWVzIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gISh2YWx1ZSBhcyBhbnkpLmRlbGV0ZWQpO1xuICBjb25zdCB0eXBlOiBTY2hlbWFUeXBlID0gb3JpZ2luYWxWYWx1ZXMubGVuZ3RoID9cbiAgICBvcmlnaW5hbFZhbHVlc1swXVsnQHR5cGUnXSB8fCBvcmlnaW5hbFZhbHVlc1swXS50eXBlIDpcbiAgICByZWNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoID9cbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlc1swXVsnQHR5cGUnXSB8fCByZWNhbGN1bGF0ZWRWYWx1ZXNbMF0udHlwZSA6XG4gICAgICB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuICh0ZXJtOiBJVGVybUpTT05MRCk6IElCbGFua05vZGVMb2cgPT4ge1xuICAgIGNvbnN0IHRlcm1JZCA9IHRlcm1bJ0BpZCddO1xuICAgIGNvbnN0IHRlcm1UeXBlID0gdGVybS50ZXJtVHlwZTtcbiAgICBjb25zdCB0ZXJtTG9ncyA9IGdldChsb2dzLCB0ZXJtSWQsIHt9KSBhcyBJTm9kZVRlcm1Mb2dzO1xuICAgIGNvbnN0IG9yaWdpbmFsID0gb3JpZ2luYWxWYWx1ZXMuZmlsdGVyKHYgPT4gdGVybUlkID09PSB2LnRlcm0hWydAaWQnXSk7XG4gICAgY29uc3QgcmVjYWxjdWxhdGVkID0gcmVjYWxjdWxhdGVkVmFsdWVzLmZpbHRlcih2ID0+IHRlcm1JZCA9PT0gdi50ZXJtIVsnQGlkJ10pO1xuICAgIGNvbnN0IGhhc0RhdGEgPSAhIW9yaWdpbmFsLmxlbmd0aCB8fCAhIXJlY2FsY3VsYXRlZC5sZW5ndGggfHwgT2JqZWN0LmtleXModGVybUxvZ3MpLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgY29uZmlnTW9kZWxzRGF0YSA9IHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCwgdGVybVR5cGUgfTtcbiAgICBjb25zdCBjb25maWdNb2RlbHMgPSBncm91cFBhcmFsbGVsTW9kZWxzKFxuICAgICAgY29uZmlnLCB0ZXJtSWQsIG5vZGVLZXkhLFxuICAgICAgdW5pcXVlKFtcbiAgICAgICAgLi4uKHRlcm1Mb2dzLm1vZGVscyB8fCBbXSkuZmlsdGVyKGlzTW9kZWxMb2codGVybUxvZ3MsIHR5cGUpKSxcbiAgICAgICAgLy8gLi4uZmluZENvbmZpZ01vZGVscyhjb25maWcsIHRlcm1JZCwgbm9kZUtleSEsIG1vZGVscykubWFwKCh7IG1vZGVsIH0pID0+IG1vZGVsIGFzIHN0cmluZylcbiAgICAgIF0pLm1hcChjb25maWdNb2RlbFdpdGhEb2NzKG1vZGVscywgY29uZmlnTW9kZWxzRGF0YSkpXG4gICAgKTtcbiAgICBjb25zdCBrZXlzID0gbG9nS2V5cyh0ZXJtTG9ncywgb3JpZ2luYWwsIHJlY2FsY3VsYXRlZCwgbW9kZWxzLCBjb25maWdNb2RlbHNEYXRhKTtcbiAgICBjb25zdCBzdWJWYWx1ZXMgPSBsb2dTdWJWYWx1ZXMobG9ncywgdGVybUxvZ3MsIG9yaWdpbmFsLCByZWNhbGN1bGF0ZWQsIG1vZGVscywgY29uZmlnTW9kZWxzRGF0YSk7XG4gICAgY29uc3QgaXNSZXF1aXJlZCA9ICEoXG4gICAgICBPYmplY3RcbiAgICAgICAgLnZhbHVlcyh0ZXJtTG9ncylcbiAgICAgICAgLmZpbHRlcih2ID0+IHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2KSAmJiAhdi5pc0tleSlcbiAgICAgICAgLmV2ZXJ5KHYgPT4gdi5ydW5SZXF1aXJlZCA9PT0gZmFsc2UpXG4gICAgKTtcblxuICAgIGNvbnN0IG5vZGVMb2c6IElCbGFua05vZGVMb2cgPSBkYXRhV2l0aENvbmZpZ01vZGVsTG9ncyh0ZXJtTG9ncykoe1xuICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgY2FuT3Blbjoga2V5cy5sZW5ndGggPiAwIHx8IHN1YlZhbHVlcy5sZW5ndGggPiAwLFxuICAgICAgdGVybUlkLFxuICAgICAgdGVybSxcbiAgICAgIHR5cGUsXG4gICAgICBjb25maWdNb2RlbHMsXG4gICAgICBvcmlnaW5hbCxcbiAgICAgIG9yaWdpbmFsVmFsdWU6IHJlZHVjZVZhbHVlcyhvcmlnaW5hbCwgdGVybUlkKSxcbiAgICAgIHJlY2FsY3VsYXRlZCxcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlOiByZWR1Y2VWYWx1ZXMocmVjYWxjdWxhdGVkLCB0ZXJtSWQpLFxuICAgICAgaXNPcmlnaW5hbDogISFvcmlnaW5hbC5sZW5ndGgsXG4gICAgICBpc1JlY2FsY3VsYXRlZDogaXNSZWNhbGN1bGF0ZWQocmVjYWxjdWxhdGVkKSxcbiAgICAgIGhhc0RhdGEsXG4gICAgICBpc1JlcXVpcmVkLFxuICAgICAgbG9nczogdGVybUxvZ3MsXG4gICAgICBrZXlzLFxuICAgICAgc3ViVmFsdWVzLFxuICAgICAgYWxsUGFyYWxsZWw6IGFsbFBhcmFsbGVsKGNvbmZpZ01vZGVscyksXG4gICAgICBvcmlnaW5hbFZhbHVlQnlNZXRob2RJZDogZ3JvdXBQYXJhbGxlbFZhbHVlcyhvcmlnaW5hbCwgY29uZmlnTW9kZWxzWzBdLCB0ZXJtSWQpLFxuICAgICAgcmVjYWxjdWxhdGVkVmFsdWVCeU1ldGhvZElkOiBncm91cFBhcmFsbGVsVmFsdWVzKHJlY2FsY3VsYXRlZCwgY29uZmlnTW9kZWxzWzBdLCB0ZXJtSWQpXG4gICAgfSk7XG4gICAgY29uc3Qgc3ViVmFsdWUgPSBjeWNsZVN1YlZhbHVlKG5vZGVMb2cpO1xuXG4gICAgcmV0dXJuIHN1YlZhbHVlICYmIHN1YlZhbHVlcz8ubGVuZ3RoXG4gICAgICA/IHtcbiAgICAgICAgLi4ubm9kZUxvZyxcbiAgICAgICAgbW9kZWxzSW5TdWJWYWx1ZXM6IHRydWUsXG4gICAgICAgIHN1YlZhbHVlczogW1xuICAgICAgICAgIHN1YlZhbHVlLFxuICAgICAgICAgIC4uLnN1YlZhbHVlc1xuICAgICAgICBdXG4gICAgICB9IC8vIGlmIHdlIGluY2x1ZGUgdGhlIEN5Y2xlIHZhbHVlLCBpdCBiZWNvbWVzIHRoZSBtYWluIHJlZmVyZW5jZSBvZiB0aGUgbW9kZWxzXG4gICAgICA6IG5vZGVMb2c7XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgbW9kZWxDb3VudCA9IChibGFua05vZGVMb2dzOiBJQmxhbmtOb2RlTG9nW10pID0+IE1hdGgubWF4LmFwcGx5KE1hdGgubWF4LCBbXG4gIDAsXG4gIC4uLmJsYW5rTm9kZUxvZ3MuZmxhdE1hcCh2ID0+IFtcbiAgICB2LmNvbmZpZ01vZGVscy5sZW5ndGgsXG4gICAgLi4uKHYuc3ViVmFsdWVzLm1hcChzID0+IHMuY29uZmlnTW9kZWxzPy5sZW5ndGggfHwgMCkpLFxuICAgIC4uLih2LmtleXMubWFwKHMgPT4gcy5jb25maWdNb2RlbHM/Lmxlbmd0aCB8fCAwKSlcbiAgXSlcbl0pO1xuXG5leHBvcnQgY29uc3QgbG9nVmFsdWVBcnJheSA9ICh2YWx1ZTogc3RyaW5nKTogYW55W10gPT5cbiAgWyc7JywgJzonXS5zb21lKHYgPT4gdmFsdWUuaW5jbHVkZXModikpID9cbiAgICB2YWx1ZS5zcGxpdCgnOycpLmZsYXRNYXAodiA9PiB7XG4gICAgICBjb25zdCByZXMgPSB2LnNwbGl0KCdfJykubWFwKHZ2ID0+IHZ2LnNwbGl0KCc6JykpO1xuICAgICAgcmV0dXJuIHJlcy5sZW5ndGggPD0gMSA/IHJlcy5mbGF0KCkgOiBPYmplY3QuZnJvbUVudHJpZXMocmVzKTtcbiAgICB9KSA6XG4gICAgbnVsbDtcbiJdfQ==
@@ -5021,11 +5021,10 @@ const groupLogsByTerm = (nodeType, logs, models, config, allOriginalValues, allR
5021
5021
  ]).map(configModelWithDocs(models, configModelsData)));
5022
5022
  const keys = logKeys(termLogs, original, recalculated, models, configModelsData);
5023
5023
  const subValues = logSubValues(logs, termLogs, original, recalculated, models, configModelsData);
5024
- const isRequired = !Object.values(termLogs)
5024
+ const isRequired = !(Object
5025
+ .values(termLogs)
5025
5026
  .filter(v => typeof v === 'object' && !Array.isArray(v) && !v.isKey)
5026
- // ignore models that were never going to run
5027
- .filter(isRunOrchestrator)
5028
- .every(v => v.runRequired === false);
5027
+ .every(v => v.runRequired === false));
5029
5028
  const nodeLog = dataWithConfigModelLogs(termLogs)({
5030
5029
  isOpen: true,
5031
5030
  canOpen: keys.length > 0 || subValues.length > 0,
@@ -5093,6 +5092,13 @@ const methodIdLabel = (methodId, model) => (methodId
5093
5092
  const getModelsAt = (log, index) => ('modelsInSubValues' in log ? !log.modelsInSubValues || !log.isOpen : true) && log.configModels[index];
5094
5093
  const requirementKeys = (requirements) => Object.keys(requirements).filter(k => !nodeTypesLowerCase.includes(k));
5095
5094
  const requirementColor = (value) => !value || ['None', 'False', '0', '0.0'].includes(value) ? 'danger' : 'white';
5095
+ const requirementLinkedNodeByKey = {
5096
+ cycle_id: v => ({ '@type': NodeType.Cycle, '@id': v }),
5097
+ impact_assessment_id: v => ({ '@type': NodeType.ImpactAssessment, '@id': v }),
5098
+ site_id: v => ({ '@type': NodeType.Site, '@id': v }),
5099
+ source_id: v => ({ '@type': NodeType.Source, '@id': v })
5100
+ };
5101
+ const requirementLinkedNode = (key, value) => requirementLinkedNodeByKey[key](value);
5096
5102
  class NodeLogsModelsComponent {
5097
5103
  constructor(nodeService, searchService, engineService) {
5098
5104
  this.nodeService = nodeService;
@@ -5113,6 +5119,7 @@ class NodeLogsModelsComponent {
5113
5119
  this.requirementKeys = requirementKeys;
5114
5120
  this.requirementColor = requirementColor;
5115
5121
  this.logValueArray = logValueArray;
5122
+ this.requirementLinkedNode = requirementLinkedNode;
5116
5123
  this.loading = true;
5117
5124
  this.blankNodes = [];
5118
5125
  this.methodModelsCount = 0;
@@ -5182,7 +5189,7 @@ class NodeLogsModelsComponent {
5182
5189
  }
5183
5190
  }
5184
5191
  NodeLogsModelsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeLogsModelsComponent, deps: [{ token: HeNodeService }, { token: HeSearchService }, { token: HeEngineService }], target: i0.ɵɵFactoryTarget.Component });
5185
- NodeLogsModelsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: { node: "node", nodeKey: "nodeKey", originalValues: "originalValues", recalculatedValues: "recalculatedValues", terms: "terms", filterTermTypes: "filterTermTypes", logsKey: "logsKey" }, ngImport: i0, template: "<div class=\"px-3 pb-3\">\n <div class=\"has-text-right mb-2\" *ngIf=\"!isExternal\">\n <a class=\"is-size-7\" *ngIf=\"logsUrl\" [href]=\"logsUrl\" target=\"_blank\">\n <fa-icon icon=\"external-link-alt\"></fa-icon>\n <span class=\"pl-2\">Open Full Logs</span>\n </a>\n </div>\n\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" [nbRows]=\"rowsCount\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr>\n <th class=\"width-auto\">\n <div class=\"field\">\n <div class=\"control is-expanded has-icons-right\">\n <input class=\"input search-input is-small\"\n [(ngModel)]=\"term\" name=\"term\"\n placeholder=\"Filter by name\"\n [ngbTypeahead]=\"suggestTerm\"\n [focusFirst]=\"false\"\n (selectItem)=\"filterResults()\"\n >\n <a class=\"icon is-small is-right\"\n [class.is-hidden]=\"!term\"\n (click)=\"term = ''; filterResults();\"\n >\n <fa-icon icon=\"times\"></fa-icon>\n </a>\n </div>\n </div>\n </th>\n <th class=\"has-border-right\">Units</th>\n <th>Original</th>\n <th>Recalculated</th>\n <th>Difference</th>\n <th *ngFor=\"let c of methodModelsCount | times; let i = index\">({{i + 1}})</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngIf=\"loading\">\n <td class=\"has-text-centered\" colspan=\"6\">\n <div class=\"has-text-center py-3\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n </td>\n </tr>\n <tr *ngIf=\"!loading && blankNodes.length === 0\">\n <td class=\"has-text-centered\" colspan=\"6\">\n <span>No data</span>\n </td>\n </tr>\n <ng-container *ngFor=\"let blankNode of blankNodes; trackBy: trackByBlankNode\">\n <tr [class.has-sub-rows]=\"blankNode.canOpen\">\n <td class=\"width-auto\" [attr.title]=\"blankNode.term.name\">\n <a class=\"is-inline-block is-align-top pr-2 open-node\"\n (click)=\"blankNode.isOpen = !blankNode.isOpen\"\n *ngIf=\"blankNode.canOpen\"\n >\n <fa-icon icon=\"angle-down\" [class.is-hidden]=\"!blankNode.isOpen\"></fa-icon>\n <fa-icon icon=\"angle-right\" [class.is-hidden]=\"blankNode.isOpen\"></fa-icon>\n </a>\n <he-node-link class=\"is-inline-block\" [node]=\"blankNode.term\">\n <span class=\"is-nowrap has-text-ellipsis\">{{blankNode.term.name}}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\">\n <span>{{blankNode.term?.units}}</span>\n </td>\n <td>\n <ng-template #defaultOriginalValue>\n <span>{{blankNode.originalValue | precision:3 | default:'-'}}</span>\n </ng-template>\n <ng-container *ngIf=\"blankNode.allParallel; else defaultOriginalValue\">\n <div *ngFor=\"let model of blankNode.configModels[0]\">{{blankNode.originalValueByMethodId[model.methodId] | precision:3 | default:'-'}}</div>\n </ng-container>\n </td>\n <td>\n <ng-container *ngIf=\"!blankNode.isOriginal || blankNode.isRecalculated; else notRecalculated\">\n <ng-template #defaultRecalculatedValue>\n <span>{{blankNode.recalculatedValue | precision:3 | default:'-'}}</span>\n </ng-template>\n <ng-container *ngIf=\"blankNode.allParallel; else defaultRecalculatedValue\">\n <div *ngFor=\"let model of blankNode.configModels[0]\">{{blankNode.recalculatedValueByMethodId[model.methodId] | precision:3 | default:'-'}}</div>\n </ng-container>\n </ng-container>\n </td>\n <td class=\"is-nowrap\">\n <ng-template #defaultDeltaValue>\n <he-blank-node-value-delta *ngIf=\"blankNode.original.length && blankNode.isRecalculated; else noValue\"\n [value]=\"blankNode.recalculatedValue\"\n [originalValue]=\"blankNode.originalValue\"\n ></he-blank-node-value-delta>\n </ng-template>\n <ng-container *ngIf=\"blankNode.allParallel; else defaultDeltaValue\">\n <div *ngFor=\"let model of blankNode.configModels[0]\">\n <he-blank-node-value-delta *ngIf=\"blankNode.originalValueByMethodId[model.methodId] !== null && blankNode.recalculatedValueByMethodId[model.methodId] !== null; else noValue\"\n [value]=\"blankNode.recalculatedValueByMethodId[model.methodId]\"\n [originalValue]=\"blankNode.originalValueByMethodId[model.methodId]\"\n ></he-blank-node-value-delta>\n </div>\n </ng-container>\n </td>\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: {data: blankNode}\"></ng-container>\n </tr>\n\n <tr\n *ngFor=\"let subValue of blankNode.keys\"\n [class.is-hidden]=\"!blankNode.isOpen\"\n [class.has-sub-rows]=\"blankNode.subValues?.length\"\n >\n <td class=\"width-auto has-text-left\">\n <span class=\"is-inline-block is-align-top pl-3 pr-1 field-node\">Field:</span>\n\n <a class=\"is-inline-block\" *ngIf=\"blankNode.type\"\n [href]=\"baseUrl + '/schema/' + blankNode.type + '#' + subValue.key\" target=\"_blank\" [title]=\"subValue.key\"\n >\n <span class=\"is-nowrap has-text-ellipsis\">{{subValue.key}}</span>\n </a>\n <span class=\"is-inline-block is-align-top\" *ngIf=\"!blankNode.type\">{{subValue.key}}</span>\n </td>\n <td class=\"has-border-right\"></td>\n <td>\n <span *ngIf=\"subValue.originalValue !== null; else noValue\">{{subValue.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"subValue.isRecalculated || subValue.key === 'impactAssessment'; else notRecalculated\">\n {{subValue.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td>-</td>\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: {data: subValue}\"></ng-container>\n </tr>\n\n <tr\n *ngFor=\"let subValue of blankNode.subValues\"\n [class.is-hidden]=\"!blankNode.isOpen\"\n >\n <td class=\"width-auto has-text-left\">\n <span class=\"is-inline-block is-align-top pl-3\">{{subValue.key | keyToLabel}}</span>\n\n <ng-container *ngIf=\"subValue.id\">\n <span class=\"is-inline-block\" class=\"is-inline-block is-align-top pr-1\">:</span>\n\n <ng-container [ngSwitch]=\"subValue.key\">\n <span class=\"is-inline-block\" *ngSwitchCase=\"'backgroundData'\">{{subValue.id | keyToLabel}}</span>\n <he-node-link *ngSwitchDefault class=\"is-block pl-4\" [node]=\"{'@type':'Term','@id':subValue.id}\" [attr.title]=\"subValue.id | keyToLabel\">\n <span class=\"is-nowrap has-text-ellipsis\">{{subValue.id | keyToLabel}}</span>\n </he-node-link>\n </ng-container>\n </ng-container>\n </td>\n <td class=\"has-border-right\">\n <span *ngIf=\"subValue.showUnits\">{{blankNode.term?.units}}</span>\n </td>\n <td>\n <span *ngIf=\"subValue.originalValue !== null; else noValue\">{{subValue.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"subValue.isRecalculated; else notRecalculated\">\n {{subValue.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td>-</td>\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: {data: subValue}\"></ng-container>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <div class=\"is-size-7 is-italic\">\n <div class=\"columns is-variable is-1 my-0\">\n <div class=\"column is-narrow\">\n <p>\n <a class=\"is-inline-block pr-2\"\n (click)=\"showLegend = !showLegend\"\n >\n <fa-icon icon=\"angle-down\" [class.is-hidden]=\"!showLegend\"></fa-icon>\n <fa-icon icon=\"angle-right\" [class.is-hidden]=\"showLegend\"></fa-icon>\n </a>\n <span class=\"is-inline-block\">Legend:</span>\n </p>\n <ul class=\"content pl-2\" [class.is-hidden]=\"!showLegend\">\n <ng-container *ngFor=\"let status of LogStatus | keys\">\n <li *ngIf=\"logIcon[status.value]\" class=\"has-text-{{logColor[status.value]}}\">\n <fa-icon [icon]=\"logIcon[status.value]\"></fa-icon>\n <span class=\"pl-1\">{{status.value}}</span>\n </li>\n </ng-container>\n </ul>\n </div>\n <div class=\"column has-text-right\" *ngIf=\"filteredType\">\n <label class=\"is-inline-block checkbox\">\n <input type=\"checkbox\" class=\"selector\"\n [(ngModel)]=\"onlyRequired\"\n (change)=\"filterResults()\"\n [disabled]=\"!!term\"\n >\n <span class=\"ml-2\">Show only {{filteredType | pluralize}} included in the default HESTIA system boundary</span>\n </label>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #blankNodeModels let-data=\"data\">\n <td class=\"blank-node-index-{{i}}\" *ngFor=\"let c of methodModelsCount | times; let i = index\">\n <ng-container *ngIf=\"getModelsAt(data, i); let models; else noValue\">\n <ng-template #modelSerie>\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {model:models}\"></ng-container>\n </ng-template>\n <div *ngIf=\"models | isArray; else modelSerie\">\n <p *ngFor=\"let model of models\">\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {model}\"></ng-container>\n </p>\n </div>\n </ng-container>\n </td>\n</ng-template>\n\n<ng-template #blankNodeModel let-model=\"model\">\n <span\n [class.trigger-popover]=\"model.showLogs\"\n [ngbPopover]=\"logDetails\" [autoClose]=\"'outside'\"\n triggers=\"manual\" #p=\"ngbPopover\" placement=\"left\" container=\"body\"\n (click)=\"p.isOpen() ? p.close() : (model.showLogs ? p.open({ logs: model.logs }) : null)\"\n >\n <span class=\"is-capitalized\">{{methodName(model)}}</span>\n <span class=\"pl-1\" *ngIf=\"model.logs?.methodTier\">[{{model.logs.methodTier}}]</span>\n <span class=\"pl-1 has-text-{{logColor[model.status]}}\">\n <fa-icon [icon]=\"logIcon[model.status]\"></fa-icon>\n </span>\n <span class=\"pl-1\" *ngIf=\"model.model\">\n (<ng-container *ngTemplateOutlet=\"docsLink; context: {$implicit: model.model}\"></ng-container>)\n </span>\n </span>\n</ng-template>\n\n<ng-template #noValue>-</ng-template>\n\n<ng-template #notRecalculated>not recalculated</ng-template>\n\n<ng-template #logDetails let-logs=\"logs\">\n <ng-container *ngIf=\"logs?.requirements\">\n <div class=\"is-requirement\" *ngFor=\"let key of requirementKeys(logs.requirements)\">\n <ng-container *ngTemplateOutlet=\"logLine; context:{key, value:logs.requirements[key]}\"></ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"logs?.logs\">\n <div class=\"is-log\" *ngFor=\"let key of logs.logs | keys\">\n <ng-container *ngTemplateOutlet=\"logLine; context:key\"></ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"logs?.missingLookups?.length\">\n <p class=\"mt-2\">Optional data missing:</p>\n\n <div class=\"table-container data-table-container\">\n <table class=\"table is-fullwidth mb-0\">\n <thead class=\"has-background-black\">\n <tr>\n <th>\n <span class=\"has-text-white\">Filename</span>\n </th>\n <th>\n <span class=\"has-text-white\">Column Title</span>\n </th>\n <th>\n <span class=\"has-text-white\">Row (term.id)</span>\n </th>\n </tr>\n </thead>\n <tbody class=\"has-background-black has-text-white\">\n <tr *ngFor=\"let data of logs.missingLookups\">\n <td>{{data.filename}}</td>\n <td>{{data.column}}</td>\n <td>{{data.termId}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #logLine let-key=\"key\" let-value=\"value\">\n <ng-container *bindOnce=\"value\">\n <span class=\"pr-1 is-inline-block is-align-middle\">{{key}}:</span>\n <ng-template #singleValue>\n <span class=\"is-inline-block is-align-middle\">{{value}}</span>\n </ng-template>\n <div class=\"is-inline-block is-align-middle\" *ngIf=\"logValueArray(value); let valueArray; else singleValue\">\n <table class=\"table is-bordered has-background-black has-text-white\">\n <thead *ngIf=\"valueArray[0] | isObject\">\n <tr>\n <th class=\"has-text-white\" *ngFor=\"let v of valueArray[0] | keys\">{{v.key}}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let v of valueArray\">\n <ng-template #singleArrayValue>\n <td>{{v}}</td>\n </ng-template>\n <ng-container *ngIf=\"v | isObject; else singleArrayValue\">\n <td *ngFor=\"let vv of v | keys\">{{vv.value}}</td>\n </ng-container>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #docsLink let-model>\n <a [href]=\"model.apiDocsPath || model.docPath || model.path\" target=\"_blank\"\n (click)=\"$event.stopPropagation()\"\n >\n <span>Docs</span>\n <fa-icon class=\"ml-1\" icon=\"external-link-alt\" size=\"sm\"></fa-icon>\n </a>\n</ng-template>\n", styles: [":host{display:block}::ng-deep tr.has-sub-rows td{border-bottom-style:dotted}::ng-deep td he-node-link{width:190px}::ng-deep td .open-node+he-node-link{width:170px}\n"], components: [{ type: i1.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "nbRows", "small", "height", "width"] }, { type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink"] }, { type: BlankNodeValueDeltaComponent, selector: "he-blank-node-value-delta", inputs: ["value", "originalValue", "displayType"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i12.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "placement", "container", "editable", "focusFirst", "showHint", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i12.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disablePopover", "popoverClass", "openDelay", "closeDelay", "ngbPopover", "popoverTitle"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { type: BindOnceDirective, selector: "[bindOnce]", inputs: ["bindOnce"] }], pipes: { "times": TimesPipe, "default": DefaultPipe, "precision": PrecisionPipe, "keyToLabel": KeyToLabelPipe, "keys": KeysPipe, "pluralize": PluralizePipe, "isArray": IsArrayPipe, "isObject": IsObjectPipe } });
5192
+ NodeLogsModelsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: { node: "node", nodeKey: "nodeKey", originalValues: "originalValues", recalculatedValues: "recalculatedValues", terms: "terms", filterTermTypes: "filterTermTypes", logsKey: "logsKey" }, ngImport: i0, template: "<div class=\"px-3 pb-3\">\n <div class=\"has-text-right mb-2\" *ngIf=\"!isExternal\">\n <a class=\"is-size-7\" *ngIf=\"logsUrl\" [href]=\"logsUrl\" target=\"_blank\">\n <fa-icon icon=\"external-link-alt\"></fa-icon>\n <span class=\"pl-2\">Open Full Logs</span>\n </a>\n </div>\n\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" [nbRows]=\"rowsCount\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr>\n <th class=\"width-auto\">\n <div class=\"field\">\n <div class=\"control is-expanded has-icons-right\">\n <input class=\"input search-input is-small\"\n [(ngModel)]=\"term\" name=\"term\"\n placeholder=\"Filter by name\"\n [ngbTypeahead]=\"suggestTerm\"\n [focusFirst]=\"false\"\n (selectItem)=\"filterResults()\"\n >\n <a class=\"icon is-small is-right\"\n [class.is-hidden]=\"!term\"\n (click)=\"term = ''; filterResults();\"\n >\n <fa-icon icon=\"times\"></fa-icon>\n </a>\n </div>\n </div>\n </th>\n <th class=\"has-border-right\">Units</th>\n <th>Original</th>\n <th>Recalculated</th>\n <th>Difference</th>\n <th *ngFor=\"let c of methodModelsCount | times; let i = index\">({{i + 1}})</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngIf=\"loading\">\n <td class=\"has-text-centered\" colspan=\"6\">\n <div class=\"has-text-center py-3\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n </td>\n </tr>\n <tr *ngIf=\"!loading && blankNodes.length === 0\">\n <td class=\"has-text-centered\" colspan=\"6\">\n <span>No data</span>\n </td>\n </tr>\n <ng-container *ngFor=\"let blankNode of blankNodes; trackBy: trackByBlankNode\">\n <tr [class.has-sub-rows]=\"blankNode.canOpen\">\n <td class=\"width-auto\" [attr.title]=\"blankNode.term.name\">\n <a class=\"is-inline-block is-align-top pr-2 open-node\"\n (click)=\"blankNode.isOpen = !blankNode.isOpen\"\n *ngIf=\"blankNode.canOpen\"\n >\n <fa-icon icon=\"angle-down\" [class.is-hidden]=\"!blankNode.isOpen\"></fa-icon>\n <fa-icon icon=\"angle-right\" [class.is-hidden]=\"blankNode.isOpen\"></fa-icon>\n </a>\n <he-node-link class=\"is-inline-block\" [node]=\"blankNode.term\">\n <span class=\"is-nowrap has-text-ellipsis\">{{blankNode.term.name}}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\">\n <span>{{blankNode.term?.units}}</span>\n </td>\n <td>\n <ng-template #defaultOriginalValue>\n <span>{{blankNode.originalValue | precision:3 | default:'-'}}</span>\n </ng-template>\n <ng-container *ngIf=\"blankNode.allParallel; else defaultOriginalValue\">\n <div *ngFor=\"let model of blankNode.configModels[0]\">{{blankNode.originalValueByMethodId[model.methodId] | precision:3 | default:'-'}}</div>\n </ng-container>\n </td>\n <td>\n <ng-container *ngIf=\"!blankNode.isOriginal || blankNode.isRecalculated; else notRecalculated\">\n <ng-template #defaultRecalculatedValue>\n <span>{{blankNode.recalculatedValue | precision:3 | default:'-'}}</span>\n </ng-template>\n <ng-container *ngIf=\"blankNode.allParallel; else defaultRecalculatedValue\">\n <div *ngFor=\"let model of blankNode.configModels[0]\">{{blankNode.recalculatedValueByMethodId[model.methodId] | precision:3 | default:'-'}}</div>\n </ng-container>\n </ng-container>\n </td>\n <td class=\"is-nowrap\">\n <ng-template #defaultDeltaValue>\n <he-blank-node-value-delta *ngIf=\"blankNode.original.length && blankNode.isRecalculated; else noValue\"\n [value]=\"blankNode.recalculatedValue\"\n [originalValue]=\"blankNode.originalValue\"\n ></he-blank-node-value-delta>\n </ng-template>\n <ng-container *ngIf=\"blankNode.allParallel; else defaultDeltaValue\">\n <div *ngFor=\"let model of blankNode.configModels[0]\">\n <he-blank-node-value-delta *ngIf=\"blankNode.originalValueByMethodId[model.methodId] !== null && blankNode.recalculatedValueByMethodId[model.methodId] !== null; else noValue\"\n [value]=\"blankNode.recalculatedValueByMethodId[model.methodId]\"\n [originalValue]=\"blankNode.originalValueByMethodId[model.methodId]\"\n ></he-blank-node-value-delta>\n </div>\n </ng-container>\n </td>\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: {data: blankNode}\"></ng-container>\n </tr>\n\n <tr\n *ngFor=\"let subValue of blankNode.keys\"\n [class.is-hidden]=\"!blankNode.isOpen\"\n [class.has-sub-rows]=\"blankNode.subValues?.length\"\n >\n <td class=\"width-auto has-text-left\">\n <span class=\"is-inline-block is-align-top pl-3 pr-1 field-node\">Field:</span>\n\n <a class=\"is-inline-block\" *ngIf=\"blankNode.type\"\n [href]=\"baseUrl + '/schema/' + blankNode.type + '#' + subValue.key\" target=\"_blank\" [title]=\"subValue.key\"\n >\n <span class=\"is-nowrap has-text-ellipsis\">{{subValue.key}}</span>\n </a>\n <span class=\"is-inline-block is-align-top\" *ngIf=\"!blankNode.type\">{{subValue.key}}</span>\n </td>\n <td class=\"has-border-right\"></td>\n <td>\n <span *ngIf=\"subValue.originalValue !== null; else noValue\">{{subValue.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"subValue.isRecalculated || subValue.key === 'impactAssessment'; else notRecalculated\">\n {{subValue.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td>-</td>\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: {data: subValue}\"></ng-container>\n </tr>\n\n <tr\n *ngFor=\"let subValue of blankNode.subValues\"\n [class.is-hidden]=\"!blankNode.isOpen\"\n >\n <td class=\"width-auto has-text-left\">\n <span class=\"is-inline-block is-align-top pl-3\">{{subValue.key | keyToLabel}}</span>\n\n <ng-container *ngIf=\"subValue.id\">\n <span class=\"is-inline-block\" class=\"is-inline-block is-align-top pr-1\">:</span>\n\n <ng-container [ngSwitch]=\"subValue.key\">\n <span class=\"is-inline-block\" *ngSwitchCase=\"'backgroundData'\">{{subValue.id | keyToLabel}}</span>\n <he-node-link *ngSwitchDefault class=\"is-block pl-4\" [node]=\"{'@type':'Term','@id':subValue.id}\" [attr.title]=\"subValue.id | keyToLabel\">\n <span class=\"is-nowrap has-text-ellipsis\">{{subValue.id | keyToLabel}}</span>\n </he-node-link>\n </ng-container>\n </ng-container>\n </td>\n <td class=\"has-border-right\">\n <span *ngIf=\"subValue.showUnits\">{{blankNode.term?.units}}</span>\n </td>\n <td>\n <span *ngIf=\"subValue.originalValue !== null; else noValue\">{{subValue.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"subValue.isRecalculated; else notRecalculated\">\n {{subValue.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td>-</td>\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: {data: subValue}\"></ng-container>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <div class=\"is-size-7 is-italic\">\n <div class=\"columns is-variable is-1 my-0\">\n <div class=\"column is-narrow\">\n <p>\n <a class=\"is-inline-block pr-2\"\n (click)=\"showLegend = !showLegend\"\n >\n <fa-icon icon=\"angle-down\" [class.is-hidden]=\"!showLegend\"></fa-icon>\n <fa-icon icon=\"angle-right\" [class.is-hidden]=\"showLegend\"></fa-icon>\n </a>\n <span class=\"is-inline-block\">Legend:</span>\n </p>\n <ul class=\"content pl-2\" [class.is-hidden]=\"!showLegend\">\n <ng-container *ngFor=\"let status of LogStatus | keys\">\n <li *ngIf=\"logIcon[status.value]\" class=\"has-text-{{logColor[status.value]}}\">\n <fa-icon [icon]=\"logIcon[status.value]\"></fa-icon>\n <span class=\"pl-1\">{{status.value}}</span>\n </li>\n </ng-container>\n </ul>\n </div>\n <div class=\"column has-text-right\" *ngIf=\"filteredType\">\n <label class=\"is-inline-block checkbox\">\n <input type=\"checkbox\" class=\"selector\"\n [(ngModel)]=\"onlyRequired\"\n (change)=\"filterResults()\"\n [disabled]=\"!!term\"\n >\n <span class=\"ml-2\">Show only {{filteredType | pluralize}} included in the default HESTIA system boundary</span>\n </label>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #blankNodeModels let-data=\"data\">\n <td class=\"blank-node-index-{{i}}\" *ngFor=\"let c of methodModelsCount | times; let i = index\">\n <ng-container *ngIf=\"getModelsAt(data, i); let models; else noValue\">\n <ng-template #modelSerie>\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {model:models}\"></ng-container>\n </ng-template>\n <div *ngIf=\"models | isArray; else modelSerie\">\n <p *ngFor=\"let model of models\">\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {model}\"></ng-container>\n </p>\n </div>\n </ng-container>\n </td>\n</ng-template>\n\n<ng-template #blankNodeModel let-model=\"model\">\n <span\n [class.trigger-popover]=\"model.showLogs\"\n [ngbPopover]=\"logDetails\" [autoClose]=\"'outside'\"\n triggers=\"manual\" #p=\"ngbPopover\" placement=\"left\" container=\"body\"\n (click)=\"p.isOpen() ? p.close() : (model.showLogs ? p.open({ logs: model.logs }) : null)\"\n >\n <span class=\"is-capitalized\">{{methodName(model)}}</span>\n <span class=\"pl-1\" *ngIf=\"model.logs?.methodTier || model.model?.methodTier\">[{{model.logs?.methodTier || model.model?.methodTier}}]</span>\n <span class=\"pl-1 has-text-{{logColor[model.status]}}\">\n <fa-icon [icon]=\"logIcon[model.status]\"></fa-icon>\n </span>\n <span class=\"pl-1\" *ngIf=\"model.model\">\n (<ng-container *ngTemplateOutlet=\"docsLink; context: {$implicit: model.model}\"></ng-container>)\n </span>\n </span>\n</ng-template>\n\n<ng-template #noValue>-</ng-template>\n\n<ng-template #notRecalculated>not recalculated</ng-template>\n\n<ng-template #logDetails let-logs=\"logs\">\n <ng-container *ngIf=\"logs?.requirements\">\n <div class=\"is-requirement\" *ngFor=\"let key of requirementKeys(logs.requirements)\">\n <ng-container *ngTemplateOutlet=\"logLine; context:{key, value:logs.requirements[key]}\"></ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"logs?.logs\">\n <div class=\"is-log\" *ngFor=\"let key of logs.logs | keys\">\n <ng-container *ngTemplateOutlet=\"logLine; context:key\"></ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"logs?.missingLookups?.length\">\n <p class=\"mt-2\">Optional data missing:</p>\n\n <div class=\"table-container data-table-container\">\n <table class=\"table is-fullwidth mb-0\">\n <thead class=\"has-background-black\">\n <tr>\n <th>\n <span class=\"has-text-white\">Filename</span>\n </th>\n <th>\n <span class=\"has-text-white\">Column Title</span>\n </th>\n <th>\n <span class=\"has-text-white\">Row (term.id)</span>\n </th>\n </tr>\n </thead>\n <tbody class=\"has-background-black has-text-white\">\n <tr *ngFor=\"let data of logs.missingLookups\">\n <td>{{data.filename}}</td>\n <td>{{data.column}}</td>\n <td>{{data.termId}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #logLineValue let-key=\"key\" let-value=\"value\">\n <ng-template #defaultValue>\n <span class=\"is-inline-block is-align-middle\">{{value}}</span>\n </ng-template>\n <ng-container *ngIf=\"requirementLinkedNode(key, value); let linkedNode; else defaultValue\">\n <he-node-link class=\"is-inline-block is-align-middle\" [node]=\"linkedNode\" [showExternalLink]=\"true\"></he-node-link>\n </ng-container>\n</ng-template>\n\n<ng-template #logLine let-key=\"key\" let-value=\"value\">\n <ng-container *bindOnce=\"value\">\n <span class=\"pr-1 is-inline-block is-align-middle\">{{key}}:</span>\n <ng-template #singleValue>\n <ng-container *ngTemplateOutlet=\"logLineValue; context:{key,value}\"></ng-container>\n </ng-template>\n <div class=\"is-inline-block is-align-middle\" *ngIf=\"logValueArray(value); let valueArray; else singleValue\">\n <table class=\"table is-bordered has-background-black has-text-white\">\n <thead *ngIf=\"valueArray[0] | isObject\">\n <tr>\n <th class=\"has-text-white\" *ngFor=\"let v of valueArray[0] | keys\">{{v.key}}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let v of valueArray\">\n <ng-template #singleArrayValue>\n <td>{{v}}</td>\n </ng-template>\n <ng-container *ngIf=\"v | isObject; else singleArrayValue\">\n <td *ngFor=\"let vv of v | keys\">{{vv.value}}</td>\n </ng-container>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #docsLink let-model>\n <a [href]=\"model.apiDocsPath || model.docPath || model.path\" target=\"_blank\"\n (click)=\"$event.stopPropagation()\"\n >\n <span>Docs</span>\n <fa-icon class=\"ml-1\" icon=\"external-link-alt\" size=\"sm\"></fa-icon>\n </a>\n</ng-template>\n", styles: [":host{display:block}::ng-deep tr.has-sub-rows td{border-bottom-style:dotted}::ng-deep td he-node-link{width:190px}::ng-deep td .open-node+he-node-link{width:170px}\n"], components: [{ type: i1.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "nbRows", "small", "height", "width"] }, { type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink"] }, { type: BlankNodeValueDeltaComponent, selector: "he-blank-node-value-delta", inputs: ["value", "originalValue", "displayType"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i12.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "placement", "container", "editable", "focusFirst", "showHint", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i12.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disablePopover", "popoverClass", "openDelay", "closeDelay", "ngbPopover", "popoverTitle"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { type: BindOnceDirective, selector: "[bindOnce]", inputs: ["bindOnce"] }], pipes: { "times": TimesPipe, "default": DefaultPipe, "precision": PrecisionPipe, "keyToLabel": KeyToLabelPipe, "keys": KeysPipe, "pluralize": PluralizePipe, "isArray": IsArrayPipe, "isObject": IsObjectPipe } });
5186
5193
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeLogsModelsComponent, decorators: [{
5187
5194
  type: Component$1,
5188
5195
  args: [{