@tricoteuses/assemblee 1.5.5 → 1.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/loaders.mjs CHANGED
@@ -320,7 +320,7 @@ export function* iterLoadAssembleeComptesRendus(dataDir, legislature, {
320
320
  if (legislature !== Legislature.All && dataset.legislature !== Legislature.All && legislature !== dataset.legislature) {
321
321
  continue;
322
322
  }
323
- const datasetDir = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
323
+ const datasetDir = path.join(dataDir, dataset.filename.replace(/\.xml$/, "_nettoye"));
324
324
  for (const compteRenduSplitPath of walkDir(datasetDir)) {
325
325
  const compteRenduFilename = compteRenduSplitPath[compteRenduSplitPath.length - 1];
326
326
  if (!compteRenduFilename.endsWith(".json")) {
@@ -1070,4 +1070,4 @@ export function pathFromUid(dataDir, uid, dataRegexp) {
1070
1070
  fs.ensureDirSync(numeroMilliersDir);
1071
1071
  return path.join(numeroMilliersDir, uid);
1072
1072
  }
1073
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJmcyIsInBhdGgiLCJFbmFibGVkRGF0YXNldHMiLCJkYXRhc2V0cyIsIndhbGtEaXIiLCJDb252ZXJ0IiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJBZ2VuZGFzQ29udmVydCIsIkFtZW5kZW1lbnRzQ29udmVydCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwiTGVnaXNsYXR1cmUiLCJTY3J1dGluc0NvbnZlcnQiLCJRdWVzdGlvbnNDb252ZXJ0IiwiQ29tcHRlc1JlbmR1c0NvbnZlcnQiLCJkb2N1bWVudFVpZFJlZ2V4IiwiZG9zc2llclVpZFJlZ2V4IiwicmV1bmlvblVpZFJlZ2V4Iiwic2NydXRpblVpZFJlZ2V4IiwiaXRlckxvYWRBc3NlbWJsZWVBY3RldXJzIiwiZGF0YURpciIsImxlZ2lzbGF0dXJlIiwibG9nIiwiYWN0ZXVyc1VpZCIsIlNldCIsImRhdGFzZXQiLCJhY3RldXJzRXRPcmdhbmVzIiwiaWdub3JlRm9yV2ViIiwiQWxsIiwiZGF0YXNldERpciIsImpvaW4iLCJmaWxlbmFtZSIsInJlcGxhY2UiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyRmlsZVBhdGgiLCJjb25zb2xlIiwiYWN0ZXVySnNvbiIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiYWN0ZXVyIiwidG9BY3RldXIiLCJoYXMiLCJ1aWQiLCJhZGQiLCJkYXRhc2V0TGVnaXNsYXR1cmUiLCJpdGVyTG9hZEFzc2VtYmxlZUFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHNVaWQiLCJhbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50RmlsZVBhdGgiLCJhbWVuZGVtZW50SnNvbiIsImFtZW5kZW1lbnQiLCJ0b0FtZW5kZW1lbnQiLCJpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyIsImRvY3VtZW50c1VpZCIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudEZpbGVQYXRoIiwiZG9jdW1lbnRKc29uIiwiZG9jdW1lbnQiLCJ0b0RvY3VtZW50IiwiaXRlckxvYWRBc3NlbWJsZWVEb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwiZG9zc2llcnNQYXJsZW1lbnRhaXJlc1VpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZVBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZUpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJpdGVyTG9hZEFzc2VtYmxlZU9yZ2FuZXMiLCJvcmdhbmVzVWlkIiwib3JnYW5lU3BsaXRQYXRoIiwib3JnYW5lRmlsZW5hbWUiLCJvcmdhbmVGaWxlUGF0aCIsIm9yZ2FuZUpzb24iLCJvcmdhbmUiLCJ0b09yZ2FuZSIsIml0ZXJMb2FkQXNzZW1ibGVlUmV1bmlvbnMiLCJyZXVuaW9uc1VpZCIsImFnZW5kYXMiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbkZpbGVQYXRoIiwicmV1bmlvbkpzb24iLCJyZXVuaW9uIiwidG9SZXVuaW9uIiwiaXRlckxvYWRBc3NlbWJsZWVTY3J1dGlucyIsInNjcnV0aW5zVWlkIiwic2NydXRpbnMiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbkZpbGVQYXRoIiwic2NydXRpbkpzb24iLCJzY3J1dGluIiwidG9TY3J1dGluIiwiaXRlckxvYWRBc3NlbWJsZWVRdWVzdGlvbnMiLCJxdWVzdGlvbnNVaWQiLCJxdWVzdGlvbnMiLCJxdWVzdGlvblNwbGl0UGF0aCIsInF1ZXN0aW9uRmlsZW5hbWUiLCJxdWVzdGlvbkZpbGVQYXRoIiwicXVlc3Rpb25Kc29uIiwicXVlc3Rpb24iLCJ0b1F1ZXN0aW9uIiwiaXRlckxvYWRBc3NlbWJsZWVDb21wdGVzUmVuZHVzIiwiY29tcHRlc1JlbmR1c1VpZCIsImNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiY29tcHRlUmVuZHVTcGxpdFBhdGgiLCJjb21wdGVSZW5kdUZpbGVuYW1lIiwiY29tcHRlUmVuZHVGaWxlUGF0aCIsImNvbXB0ZVJlbmR1SnNvbiIsImNvbXB0ZVJlbmR1IiwidG9Db21wdGVSZW5kdSIsImxvYWRBc3NlbWJsZWVEYXRhIiwiZW5hYmxlZERhdGFzZXRzIiwiYWN0ZXVyQnlVaWQiLCJvcmdhbmVCeVVpZCIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJ1bmRlZmluZWQiLCJyZXVuaW9uQnlVaWQiLCJyZXVuaW9uc0J5RGF5IiwicmV1bmlvbnNCeURvc3NpZXJVaWQiLCJBZ2VuZGFzIiwiZGF5IiwidGltZXN0YW1wRGVidXQiLCJ0b0lTT1N0cmluZyIsInNwbGl0IiwicmV1bmlvbnNBdERheSIsInB1c2giLCJvZGoiLCJwb2ludE9kaiIsInBvaW50c09kaiIsImRvc3NpZXJMZWdpc2xhdGlmUmVmIiwiZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMiLCJyZXVuaW9uc0F0RG9zc2llclVpZCIsImFtZW5kZW1lbnRCeVVpZCIsIkFtZW5kZW1lbnRzIiwiZG9jdW1lbnRCeVVpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llclNwbGl0UGF0aCIsImRvc3NpZXJGaWxlbmFtZSIsImRvc3NpZXJGaWxlUGF0aCIsImRvc3NpZXJKc29uIiwiZG9zc2llciIsInRpdHJlRG9zc2llciIsInNlbmF0Q2hlbWluIiwidGl0cmVDaGVtaW4iLCJwaG90b0J5VWlkIiwiUGhvdG9zIiwianNvbkZpbGVQYXRoIiwiU2VpemUiLCJleGlzdHNTeW5jIiwianNvbiIsIk9iamVjdCIsImFzc2lnbiIsIkpTT04iLCJwYXJzZSIsInNjcnV0aW5CeVVpZCIsIlNjcnV0aW5zIiwicXVlc3Rpb25CeVVpZCIsIlF1ZXN0aW9ucyIsImNvbXB0ZVJlbmR1QnlVaWQiLCJDb21wdGVzUmVuZHVzU2VhbmNlcyIsImNvbXB0ZVJlbmR1UGF0aCIsImxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiYWN0ZXVycyIsIm9yZ2FuZXMiLCJ0b0FnZW5kYXMiLCJyZXVuaW9ucyIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzUGFybGVtZW50YWlyZXMiLCJ0b1NjcnV0aW5zIiwidG9RdWVzdGlvbnMiLCJjb21wdGVzUmVuZHVzIiwidG9Db21wdGVzUmVuZHVzIiwibG9hZEFzc2VtYmxlZURvY3VtZW50RmlsZSIsImZvcm1hdHMiLCJkb2N1bWVudHNEaXIiLCJkb2N1bWVudERpciIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJpbmRleFBhdGgiLCJwYXRoRXhpc3RzU3luYyIsImluZGV4IiwicmVhZEpzb25TeW5jIiwiZm9ybWF0IiwidXJsIiwibG9hZEFzc2VtYmxlZVBob3Rvc0RlcHV0ZXMiLCJsb2FkQXNzZW1ibGVlUGhvdG9zU2VuYXRldXJzIiwibWF0Y2giLCJub3RTdHJpY3RFcXVhbCIsImdyb3VwcyIsImRvY3VtZW50VHlwZSIsImRvY3VtZW50VHlwZTIiLCJjaGFtYnJlRGlyIiwiY2hhbWJyZSIsImNoYW1icmUyIiwicmVwdWJsaXF1ZURpciIsInJlcHVibGlxdWUiLCJyZXB1YmxpcXVlMiIsImxlZ2lzbGF0dXJlRGlyIiwibGVnaXNsYXR1cmUyIiwiZXRhdCIsImVuc3VyZURpclN5bmMiLCJldGF0RGlyIiwibnVtZXJvIiwibnVtZXJvMiIsInN1YnN0cmluZyIsIm51bWVyb01pbGxpZXJzRGlyIiwicGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCIsImRvc3NpZXJzRGlyIiwiZXhlYyIsInBhdGhGcm9tUmV1bmlvblVpZCIsInJldW5pb25zRGlyIiwic2Vzc2lvbkRpciIsImlkRGlyIiwibnVtZXJvTWlsbGlvbnNEaXIiLCJwYXRoRnJvbVNjcnV0aW5VaWQiLCJzY3J1dGluc0RpciIsInBhdGhGcm9tVWlkIiwiZGF0YVJlZ2V4cCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vLyBMb2FkIGRhdGEgZnJvbSBmaWxlc1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi9kYXRhc2V0c1wiXG5pbXBvcnQgdHlwZSB7IERvY3VtZW50RmlsZXNJbmRleCB9IGZyb20gXCIuL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmV4cG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBBY3RldXIsXG4gIENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQsXG4gIE9yZ2FuZSxcbiAgUGhvdG8sXG59IGZyb20gXCIuL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNDb252ZXJ0LCBSZXVuaW9uIH0gZnJvbSBcIi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50LCBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCB9IGZyb20gXCIuL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc0NvbnZlcnQsIFNjcnV0aW4gfSBmcm9tIFwiLi90eXBlcy9zY3J1dGluc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFF1ZXN0aW9uc0NvbnZlcnQsIFF1ZXN0aW9uIH0gZnJvbSBcIi4vdHlwZXMvcXVlc3Rpb25zXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQ29tcHRlc1JlbmR1c0NvbnZlcnQsIENvbXB0ZVJlbmR1IH0gZnJvbSBcIi4vdHlwZXMvZGViYXRzXCJcbmltcG9ydCB7IERvY3VtZW50VXJsRm9ybWF0IH0gZnJvbSBcIi4vdXJsc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YSB7XG4gIHJlYWRvbmx5IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9XG4gIHJlYWRvbmx5IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH1cbiAgcmVhZG9ubHkgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH1cbiAgcmVhZG9ubHkgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH1cbiAgcmVhZG9ubHkgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG4gIHJlYWRvbmx5IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfVxuICByZWFkb25seSByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfVxuICByZWFkb25seSBxdWVzdGlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFF1ZXN0aW9uIH1cbiAgcmVhZG9ubHkgY29tcHRlUmVuZHVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBDb21wdGVSZW5kdSB9XG59XG5cbmNvbnN0IGRvY3VtZW50VWlkUmVnZXggPVxuICAvXigoPzxkb2N1bWVudFR5cGU+QUNJTnxBTENOfEFWQ0V8QVZJU3xERUNMfEVUREl8TEVUVHxNRVNTfE1JT058UElPTnxQTlJFfFBSSkx8UkFQUHxSSU5GfFJJT04pKD88Y2hhbWJyZT5BTnxTTikoPzxyZXB1YmxpcXVlPlJcXGQrKVtMU10oPzxsZWdpc2xhdHVyZT5cXGQrKSg/PGV0YXQ+QnxCVEF8QlRDfFRBUCkoPzxudW1lcm8+XFxkKykoLS4qKT8pfCgoPzxkb2N1bWVudFR5cGUyPk1JT04pKD88Y2hhbWJyZTI+QU58U04pKD88cmVwdWJsaXF1ZTI+UlxcZCspW0xTXSg/PGxlZ2lzbGF0dXJlMj5cXGQrKS1OKD88bnVtZXJvMj5cXGQrKSkkL1xuY29uc3QgZG9zc2llclVpZFJlZ2V4ID0gL15ETChSXFxkKykoTFxcZCspTihcXGQrKSQvXG5jb25zdCByZXVuaW9uVWlkUmVnZXggPVxuICAvXlJVKEFOfENHfFNOKShSXFxkKykoTFxcZCspKFtBU11cXGR7NH0pKElEQ3xJREZMP3xJRFMpKFxcZCspJC9cbmNvbnN0IHNjcnV0aW5VaWRSZWdleCA9IC9eVlRBTihSXFxkKykoTFxcZCspVihcXGQrKSQvXG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVBY3RldXJzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgYWN0ZXVyOiBBY3RldXI7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGFjdGV1cnNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgYWN0ZXVyRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYWN0ZXVyU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FjdGV1ckZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgaWYgKGFjdGV1cnNVaWQuaGFzKGFjdGV1ci51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBhY3RldXJzVWlkLmFkZChhY3RldXIudWlkKVxuICAgICAgeWllbGQgeyBhY3RldXIsIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVBbWVuZGVtZW50cyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGFtZW5kZW1lbnQ6IEFtZW5kZW1lbnQ7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGFtZW5kZW1lbnRzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hbWVuZGVtZW50U3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FtZW5kZW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgYW1lbmRlbWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhbWVuZGVtZW50RmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50KGFtZW5kZW1lbnRKc29uKVxuICAgICAgaWYgKGFtZW5kZW1lbnRzVWlkLmhhcyhhbWVuZGVtZW50LnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGFtZW5kZW1lbnRzVWlkLmFkZChhbWVuZGVtZW50LnVpZClcbiAgICAgIHlpZWxkIHsgYW1lbmRlbWVudCwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGRvY3VtZW50OiBEb2N1bWVudDsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgY29uc3QgZG9jdW1lbnRzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvY3VtZW50c1wiXSkpIHtcbiAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPSBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvY3VtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9jdW1lbnRTcGxpdFBhdGgpXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7ZG9jdW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgZG9jdW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9jdW1lbnRGaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuICAgICAgY29uc3QgZG9jdW1lbnQgPSBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0RvY3VtZW50KGRvY3VtZW50SnNvbilcbiAgICAgIGlmIChkb2N1bWVudHNVaWQuaGFzKGRvY3VtZW50LnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50c1VpZC5hZGQoZG9jdW1lbnQudWlkKVxuICAgICAgeWllbGQgeyBkb2N1bWVudCwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZURvc3NpZXJzUGFybGVtZW50YWlyZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAge1xuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICAgIGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmVcbiAgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGRvc3NpZXJzUGFybGVtZW50YWlyZXNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1xuICAgICAgXCJkb3NzaWVyc1wiLFxuICAgIF0pKSB7XG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lID1cbiAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGhbZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhc2V0RGlyLFxuICAgICAgICAuLi5kb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVGaWxlUGF0aCxcbiAgICAgICAge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlID1cbiAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUpzb24sXG4gICAgICAgIClcbiAgICAgIGlmIChkb3NzaWVyc1BhcmxlbWVudGFpcmVzVWlkLmhhcyhkb3NzaWVyUGFybGVtZW50YWlyZS51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBkb3NzaWVyc1BhcmxlbWVudGFpcmVzVWlkLmFkZChkb3NzaWVyUGFybGVtZW50YWlyZS51aWQpXG4gICAgICB5aWVsZCB7IGRvc3NpZXJQYXJsZW1lbnRhaXJlLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlT3JnYW5lcyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IG9yZ2FuZTogT3JnYW5lOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBvcmdhbmVzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJvcmdhbmVzXCJdKSkge1xuICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9yZ2FuZUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtvcmdhbmVGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3Qgb3JnYW5lSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKG9yZ2FuZUZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBjb25zdCBvcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgIGlmIChvcmdhbmVzVWlkLmhhcyhvcmdhbmUudWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgb3JnYW5lc1VpZC5hZGQob3JnYW5lLnVpZClcbiAgICAgIHlpZWxkIHsgb3JnYW5lLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlUmV1bmlvbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyByZXVuaW9uOiBSZXVuaW9uOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCByZXVuaW9uc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPSByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJldW5pb25GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5yZXVuaW9uU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3JldW5pb25GaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgcmV1bmlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyZXVuaW9uRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJldW5pb24gPSBBZ2VuZGFzQ29udmVydC50b1JldW5pb24ocmV1bmlvbkpzb24pXG4gICAgICBpZiAocmV1bmlvbnNVaWQuaGFzKHJldW5pb24udWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV1bmlvbnNVaWQuYWRkKHJldW5pb24udWlkKVxuICAgICAgeWllbGQgeyByZXVuaW9uLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlU2NydXRpbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBzY3J1dGluOiBTY3J1dGluOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBzY3J1dGluc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBzY3J1dGluRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uc2NydXRpblNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtzY3J1dGluRmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNjcnV0aW5Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoc2NydXRpbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBjb25zdCBzY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgIGlmIChzY3J1dGluc1VpZC5oYXMoc2NydXRpbi51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBzY3J1dGluc1VpZC5hZGQoc2NydXRpbi51aWQpXG4gICAgICB5aWVsZCB7IHNjcnV0aW4sIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVRdWVzdGlvbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBxdWVzdGlvbjogUXVlc3Rpb247IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IHF1ZXN0aW9uc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBxdWVzdGlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCBxdWVzdGlvbkZpbGVuYW1lID0gcXVlc3Rpb25TcGxpdFBhdGhbcXVlc3Rpb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghcXVlc3Rpb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBxdWVzdGlvbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnF1ZXN0aW9uU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3F1ZXN0aW9uRmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHF1ZXN0aW9uSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHF1ZXN0aW9uRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHF1ZXN0aW9uID0gUXVlc3Rpb25zQ29udmVydC50b1F1ZXN0aW9uKHF1ZXN0aW9uSnNvbilcbiAgICAgIGlmIChxdWVzdGlvbnNVaWQuaGFzKHF1ZXN0aW9uLnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIHF1ZXN0aW9uc1VpZC5hZGQocXVlc3Rpb24udWlkKVxuICAgICAgeWllbGQgeyBxdWVzdGlvbiwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZUNvbXB0ZXNSZW5kdXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBjb21wdGVSZW5kdTogQ29tcHRlUmVuZHU7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGNvbXB0ZXNSZW5kdXNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBjb21wdGVSZW5kdVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCBjb21wdGVSZW5kdUZpbGVuYW1lID1cbiAgICAgICAgY29tcHRlUmVuZHVTcGxpdFBhdGhbY29tcHRlUmVuZHVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghY29tcHRlUmVuZHVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBjb21wdGVSZW5kdUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmNvbXB0ZVJlbmR1U3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2NvbXB0ZVJlbmR1RmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGNvbXB0ZVJlbmR1RmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1ID0gQ29tcHRlc1JlbmR1c0NvbnZlcnQudG9Db21wdGVSZW5kdShjb21wdGVSZW5kdUpzb24pXG4gICAgICBpZiAoY29tcHRlc1JlbmR1c1VpZC5oYXMoY29tcHRlUmVuZHUudWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29tcHRlc1JlbmR1c1VpZC5hZGQoY29tcHRlUmVuZHUudWlkKVxuICAgICAgeWllbGQgeyBjb21wdGVSZW5kdSwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuLy8vIExvYWQgZGF0YSBmcm9tIHNwbGl0IGZpbGVzLlxuLy8vIERlcHJlY2F0ZWQ6IFVzZSBpdGVyTG9hZC4uLiBpdGVyYXRvcnMgaW5zdGVhZC5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlRGF0YShcbiAgZGF0YURpcjogc3RyaW5nLFxuICBlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IERhdGEge1xuICBjb25zdCBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfSA9IHt9XG4gIGNvbnN0IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBhY3RldXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJhY3RldXJzXCJdKSkge1xuICAgICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFhY3RldXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hY3RldXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FjdGV1ckZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVySnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFjdGV1ckZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBhY3RldXIgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cihhY3RldXJKc29uKVxuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAoYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID0gYWN0ZXVyXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJvcmdhbmVzXCJdKSkge1xuICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5vcmdhbmVTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke29yZ2FuZUZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JnYW5lSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKG9yZ2FuZUZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBvcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcIm9yZ2FuZVwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAob3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID0gb3JnYW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEb3NzaWVyVWlkOiB7IFtkb3NzaWVyVWlkOiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPSByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnJldW5pb25TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3JldW5pb25GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmV1bmlvbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXVuaW9uID0gQWdlbmRhc0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25Kc29uKVxuICAgICAgICBpZiAocmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9IHJldW5pb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRheSA9IHJldW5pb24udGltZXN0YW1wRGVidXQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF1cbiAgICAgICAgbGV0IHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV1cbiAgICAgICAgaWYgKHJldW5pb25zQXREYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV0gPSBbXVxuICAgICAgICB9XG4gICAgICAgIHJldW5pb25zQXREYXkucHVzaChyZXVuaW9uKVxuXG4gICAgICAgIGNvbnN0IG9kaiA9IHJldW5pb24ub2RqXG4gICAgICAgIGlmIChvZGogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcG9pbnRPZGogb2Ygb2RqLnBvaW50c09kaiB8fCBbXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyTGVnaXNsYXRpZlJlZiBvZiBwb2ludE9kai5kb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyB8fFxuICAgICAgICAgICAgICBbXSkge1xuICAgICAgICAgICAgICBsZXQgcmV1bmlvbnNBdERvc3NpZXJVaWQgPVxuICAgICAgICAgICAgICAgIHJldW5pb25zQnlEb3NzaWVyVWlkW2Rvc3NpZXJMZWdpc2xhdGlmUmVmXVxuICAgICAgICAgICAgICBpZiAocmV1bmlvbnNBdERvc3NpZXJVaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkID0gcmV1bmlvbnNCeURvc3NpZXJVaWRbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyTGVnaXNsYXRpZlJlZlxuICAgICAgICAgICAgICAgIF0gPSBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkLnB1c2gocmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYW1lbmRlbWVudFNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YW1lbmRlbWVudEZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhbWVuZGVtZW50RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50KGFtZW5kZW1lbnRKc29uKVxuICAgICAgICBpZiAoYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9IGFtZW5kZW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvY3VtZW50c1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlbmFtZSA9IGRvY3VtZW50U3BsaXRQYXRoW2RvY3VtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9jdW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmRvY3VtZW50U3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb2N1bWVudEZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9jdW1lbnRGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0RvY3VtZW50KGRvY3VtZW50SnNvbilcbiAgICAgICAgaWYgKGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID0gZG9jdW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJkb3NzaWVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVuYW1lID0gZG9zc2llclNwbGl0UGF0aFtkb3NzaWVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9zc2llckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5kb3NzaWVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb3NzaWVyRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3NzaWVySnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvc3NpZXJGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9zc2llciA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVySnNvbilcbiAgICAgICAgY29uc3QgdGl0cmVEb3NzaWVyID0gZG9zc2llci50aXRyZURvc3NpZXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci5zZW5hdENoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIudGl0cmVDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUGhvdG9zKSB7XG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLlNlaXplIDogbGVnaXNsYXR1cmVcbiAgICAgICAgfWAsXG4gICAgICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIFwicGhvdG9zX3NlbmF0ZXVyc1wiLFxuICAgICAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5zY3J1dGluU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtzY3J1dGluRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNjcnV0aW5GaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgc2NydXRpbiA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW4oc2NydXRpbkpzb24pXG4gICAgICAgIGlmIChzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID0gc2NydXRpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcXVlc3Rpb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBRdWVzdGlvbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5RdWVzdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMucXVlc3Rpb25zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgcXVlc3Rpb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBxdWVzdGlvbkZpbGVuYW1lID0gcXVlc3Rpb25TcGxpdFBhdGhbcXVlc3Rpb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFxdWVzdGlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ucXVlc3Rpb25TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3F1ZXN0aW9uRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWVzdGlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhxdWVzdGlvbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBxdWVzdGlvbiA9IFF1ZXN0aW9uc0NvbnZlcnQudG9RdWVzdGlvbihxdWVzdGlvbkpzb24pXG4gICAgICAgIGlmIChxdWVzdGlvbkJ5VWlkW3F1ZXN0aW9uLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHF1ZXN0aW9uQnlVaWRbcXVlc3Rpb24udWlkXSA9IHF1ZXN0aW9uXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBjb21wdGVSZW5kdUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IENvbXB0ZVJlbmR1IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgY29tcHRlUmVuZHVQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHVGaWxlbmFtZSA9IGNvbXB0ZVJlbmR1UGF0aFtjb21wdGVSZW5kdVBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFjb21wdGVSZW5kdUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uY29tcHRlUmVuZHVQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtjb21wdGVSZW5kdUZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHVKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoY29tcHRlUmVuZHVGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHUgPSBDb21wdGVzUmVuZHVzQ29udmVydC50b0NvbXB0ZVJlbmR1KGNvbXB0ZVJlbmR1SnNvbilcbiAgICAgICAgaWYgKGNvbXB0ZVJlbmR1QnlVaWRbY29tcHRlUmVuZHUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29tcHRlUmVuZHVCeVVpZFtjb21wdGVSZW5kdS51aWRdID0gY29tcHRlUmVuZHVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWN0ZXVyQnlVaWQsXG4gICAgYW1lbmRlbWVudEJ5VWlkLFxuICAgIGRvY3VtZW50QnlVaWQsXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkLFxuICAgIG9yZ2FuZUJ5VWlkLFxuICAgIHBob3RvQnlVaWQsXG4gICAgcmV1bmlvbkJ5VWlkLFxuICAgIHJldW5pb25zQnlEYXksXG4gICAgcmV1bmlvbnNCeURvc3NpZXJVaWQsXG4gICAgc2NydXRpbkJ5VWlkLFxuICAgIHF1ZXN0aW9uQnlVaWQsXG4gICAgY29tcHRlUmVuZHVCeVVpZCxcbiAgfVxufVxuXG4vLy8gTG9hZCBkYXRhIGZyb20gYmlnIG1vbm9seXRpYyBmaWxlcy5cbi8vLyBEZXByZWNhdGVkOiBBc3NlbWJsw6llIG5hdGlvbmFsZSBvcGVuIGRhdGEgbm8gbW9yZSB1c2VzIG1vbm9seXRpYyBmaWxlcy5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlRGF0YUZyb21CaWdGaWxlcyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IERhdGEge1xuICBjb25zdCBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfSA9IHt9XG4gIGNvbnN0IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhY3RldXJzRXRPcmdhbmVzID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1ciBvZiBhY3RldXJzRXRPcmdhbmVzLmFjdGV1cnMpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJhY3RldXJcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RldXJCeVVpZFthY3RldXIudWlkXSA9IGFjdGV1clxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBhY3RldXJzRXRPcmdhbmVzLm9yZ2FuZXMpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9IG9yZ2FuZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmV1bmlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFnZW5kYXMgPSBBZ2VuZGFzQ29udmVydC50b0FnZW5kYXMoanNvbilcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvbiBvZiBhZ2VuZGFzLnJldW5pb25zKSB7XG4gICAgICAgIGlmIChyZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID0gcmV1bmlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5ID0gcmV1bmlvbi50aW1lc3RhbXBEZWJ1dC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXVxuICAgICAgICBsZXQgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XVxuICAgICAgICBpZiAocmV1bmlvbnNBdERheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XSA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV1bmlvbnNBdERheS5wdXNoKHJldW5pb24pXG5cbiAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgaWYgKG9kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwb2ludE9kaiBvZiBvZGoucG9pbnRzT2RqIHx8IFtdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJMZWdpc2xhdGlmUmVmIG9mIHBvaW50T2RqLmRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIHx8XG4gICAgICAgICAgICAgIFtdKSB7XG4gICAgICAgICAgICAgIGxldCByZXVuaW9uc0F0RG9zc2llclVpZCA9XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNCeURvc3NpZXJVaWRbZG9zc2llckxlZ2lzbGF0aWZSZWZdXG4gICAgICAgICAgICAgIGlmIChyZXVuaW9uc0F0RG9zc2llclVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQgPSByZXVuaW9uc0J5RG9zc2llclVpZFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJMZWdpc2xhdGlmUmVmXG4gICAgICAgICAgICAgICAgXSA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQucHVzaChyZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYW1lbmRlbWVudHMgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50cyhqc29uKVxuICAgICAgZm9yIChjb25zdCB0ZXh0ZUxlZ2lzbGF0aWYgb2YgYW1lbmRlbWVudHMudGV4dGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50IG9mIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cykge1xuICAgICAgICAgIGlmIChhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPSBhbWVuZGVtZW50XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGRvc3NpZXJzTGVnaXNsYXRpZnMgPVxuICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMoanNvbilcbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBpZiAoZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPSBkb2N1bWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXIgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy5kb3NzaWVyc1BhcmxlbWVudGFpcmVzKSB7XG4gICAgICAgIGNvbnN0IHRpdHJlRG9zc2llciA9IGRvc3NpZXIudGl0cmVEb3NzaWVyXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUGhvdG9zKSB7XG4gICAgY29uc3QgcGhvdG9CeVVpZCA9IHt9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuU2VpemUgOiBsZWdpc2xhdHVyZVxuICAgICAgICB9YCxcbiAgICAgICAgXCJkZXB1dGVzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgICAgIFwic2VuYXRldXJzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzY3J1dGluQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogU2NydXRpbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IHNjcnV0aW5zID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbnMoanNvbilcbiAgICAgIGZvciAoY29uc3Qgc2NydXRpbiBvZiBzY3J1dGlucy5zY3J1dGlucykge1xuICAgICAgICBpZiAoc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9IHNjcnV0aW5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHF1ZXN0aW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUXVlc3Rpb24gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUXVlc3Rpb25zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnF1ZXN0aW9ucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IHF1ZXN0aW9ucyA9IFF1ZXN0aW9uc0NvbnZlcnQudG9RdWVzdGlvbnMoanNvbilcbiAgICAgIGZvciAoY29uc3QgcXVlc3Rpb24gb2YgcXVlc3Rpb25zLnF1ZXN0aW9ucykge1xuICAgICAgICBpZiAocXVlc3Rpb25CeVVpZFtxdWVzdGlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBxdWVzdGlvbkJ5VWlkW3F1ZXN0aW9uLnVpZF0gPSBxdWVzdGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY29tcHRlUmVuZHVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBDb21wdGVSZW5kdSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Db21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5jb21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGNvbXB0ZXNSZW5kdXMgPSBDb21wdGVzUmVuZHVzQ29udmVydC50b0NvbXB0ZXNSZW5kdXMoanNvbilcbiAgICAgIGZvciAoY29uc3QgY29tcHRlUmVuZHUgb2YgY29tcHRlc1JlbmR1cy5jb21wdGVzUmVuZHVzKSB7XG4gICAgICAgIGlmIChjb21wdGVSZW5kdUJ5VWlkW2NvbXB0ZVJlbmR1LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbXB0ZVJlbmR1QnlVaWRbY29tcHRlUmVuZHUudWlkXSA9IGNvbXB0ZVJlbmR1XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGV1ckJ5VWlkLFxuICAgIGFtZW5kZW1lbnRCeVVpZCxcbiAgICBkb2N1bWVudEJ5VWlkLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZCxcbiAgICBvcmdhbmVCeVVpZCxcbiAgICBwaG90b0J5VWlkLFxuICAgIHJldW5pb25CeVVpZCxcbiAgICByZXVuaW9uc0J5RGF5LFxuICAgIHJldW5pb25zQnlEb3NzaWVyVWlkLFxuICAgIHNjcnV0aW5CeVVpZCxcbiAgICBxdWVzdGlvbkJ5VWlkLFxuICAgIGNvbXB0ZVJlbmR1QnlVaWQsXG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkIGluZm9zIG9mIGEgZG9jdW1lbnQgb3IgYSBkaXZpc2lvbiBvZiBhIGRvY3VtZW50IGZyb20gZmlsZSBzeXN0ZW1cbiAqXG4gKiBAcGFyYW0gZGF0YURpclxuICogQHBhcmFtIHVpZCBVSUQgb2YgYSBkb2N1bWVudCBvciBhIGRpdmlzaW9uXG4gKiBAcGFyYW0gZm9ybWF0cyByZXF1ZXN0ZWQgZm9ybWF0cyBvZiB0aGUgZG9jdW1lbnQgaW4gZGVjcmVhc2luZyBwcmVmZXJlbmNlIG9yZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlRG9jdW1lbnRGaWxlKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIHVpZDogc3RyaW5nLFxuICBmb3JtYXRzOiBEb2N1bWVudFVybEZvcm1hdFtdLFxuKTpcbiAgfCB7XG4gICAgICBmb3JtYXQ6IERvY3VtZW50VXJsRm9ybWF0XG4gICAgICBwYXRoOiBzdHJpbmdcbiAgICAgIHVybDogc3RyaW5nXG4gICAgfVxuICB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRvY3VtZW50c0RpciA9IHBhdGguam9pbihkYXRhRGlyLCBcIkRvY3VtZW50c1wiKVxuICBjb25zdCBkb2N1bWVudERpciA9IHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyLCB1aWQpXG4gIGNvbnN0IGluZGV4UGF0aCA9IHBhdGguam9pbihkb2N1bWVudERpciwgXCJpbmRleC5qc29uXCIpXG4gIGlmICghZnMucGF0aEV4aXN0c1N5bmMoaW5kZXhQYXRoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuICBjb25zdCBpbmRleCA9IGZzLnJlYWRKc29uU3luYyhpbmRleFBhdGgpIGFzIERvY3VtZW50RmlsZXNJbmRleFxuICBmb3IgKGNvbnN0IGZvcm1hdCBvZiBmb3JtYXRzKSB7XG4gICAgZm9yIChjb25zdCB7IGZpbGVuYW1lLCB1cmwgfSBvZiBpbmRleFtmb3JtYXRdID8/IFtdKSB7XG4gICAgICBpZiAoZmlsZW5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZm9ybWF0LCBwYXRoOiBwYXRoLmpvaW4oZG9jdW1lbnREaXIsIGZpbGVuYW1lKSwgdXJsIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZVBob3Rvc0RlcHV0ZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSB7XG4gIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgIGRhdGFEaXIsXG4gICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAvLyBUT0RPOiBIYW5kbGUgTGVnaXNsYXR1cmUuQWxsLlxuICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLlNlaXplIDogbGVnaXNsYXR1cmVcbiAgICB9YCxcbiAgICBcImRlcHV0ZXMuanNvblwiLFxuICApXG4gIGlmIChsb2cpIHtcbiAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICB9XG4gIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gIHJldHVybiBKU09OLnBhcnNlKGpzb24pIGFzIHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZVBob3Rvc1NlbmF0ZXVycyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSB7XG4gIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgIGRhdGFEaXIsXG4gICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICApXG4gIGlmIChsb2cpIHtcbiAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICB9XG4gIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gIHJldHVybiBKU09OLnBhcnNlKGpzb24pIGFzIHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21Eb2N1bWVudFVpZChkb2N1bWVudHNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHVpZC5tYXRjaChkb2N1bWVudFVpZFJlZ2V4KVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIGRvY3VtZW50IFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCBncm91cHMgPSBtYXRjaCEuZ3JvdXBzIGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cbiAgY29uc3QgZG9jdW1lbnRUeXBlID0gcGF0aC5qb2luKFxuICAgIGRvY3VtZW50c0RpcixcbiAgICBncm91cHMuZG9jdW1lbnRUeXBlID8/IGdyb3Vwcy5kb2N1bWVudFR5cGUyLFxuICApXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4oZG9jdW1lbnRUeXBlLCBncm91cHMuY2hhbWJyZSA/PyBncm91cHMuY2hhbWJyZTIpXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oXG4gICAgY2hhbWJyZURpcixcbiAgICBncm91cHMucmVwdWJsaXF1ZSA/PyBncm91cHMucmVwdWJsaXF1ZTIsXG4gIClcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4oXG4gICAgcmVwdWJsaXF1ZURpcixcbiAgICBncm91cHMubGVnaXNsYXR1cmUgPz8gZ3JvdXBzLmxlZ2lzbGF0dXJlMixcbiAgKVxuICBjb25zdCBldGF0ID0gZ3JvdXBzLmV0YXRcbiAgaWYgKGV0YXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGZzLmVuc3VyZURpclN5bmMobGVnaXNsYXR1cmVEaXIpXG4gICAgcmV0dXJuIHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgdWlkKVxuICB9XG4gIGNvbnN0IGV0YXREaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIGV0YXQpXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgKGdyb3Vwcy5udW1lcm8gPz8gZ3JvdXBzLm51bWVybzIpXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHJpbmcobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGV0YXREaXIsIG51bWVyby5zdWJzdHJpbmcoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQoXG4gIGRvc3NpZXJzRGlyOiBzdHJpbmcsXG4gIHVpZDogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBkb3NzaWVyVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgZG9zc2llciBwYXJsZW1lbnRhaXJlIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGRvc3NpZXJzRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cmluZyhudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHJpbmcoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tUmV1bmlvblVpZChyZXVuaW9uc0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gcmV1bmlvblVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIHJldW5pb24gVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4ocmV1bmlvbnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihjaGFtYnJlRGlyLCBtYXRjaCFbMl0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVszXSlcbiAgY29uc3Qgc2Vzc2lvbkRpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbWF0Y2ghWzRdKVxuICBjb25zdCBpZERpciA9IHBhdGguam9pbihzZXNzaW9uRGlyLCBtYXRjaCFbNV0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMDAwMFwiICsgbWF0Y2ghWzZdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHJpbmcobnVtZXJvLmxlbmd0aCAtIDkpXG4gIGNvbnN0IG51bWVyb01pbGxpb25zRGlyID0gcGF0aC5qb2luKGlkRGlyLCBudW1lcm8uc3Vic3RyaW5nKDAsIDMpKVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihudW1lcm9NaWxsaW9uc0RpciwgbnVtZXJvLnN1YnN0cmluZygzLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21TY3J1dGluVWlkKHNjcnV0aW5zRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBzY3J1dGluVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3Igc2NydXRpbiBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihzY3J1dGluc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbMl0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgbWF0Y2ghWzNdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHJpbmcobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBudW1lcm8uc3Vic3RyaW5nKDAsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbi8vIEdldCBzdGFuZGFyZCBwYXRoIGZvciBvYmplY3Qgd2l0aCB1aWQgOiByZXB1YmxpcXVlID4gbGVnaXNsYXR1cmUgPiBncm91cCBvYmplY3RzIGJ5IHRob3VzYW5kc1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tVWlkKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIHVpZDogc3RyaW5nLFxuICBkYXRhUmVnZXhwOiBSZWdFeHAsXG4pOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IGRhdGFSZWdleHAuZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3Igb2JqZWN0IHdpdGggVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgbWF0Y2ghWzFdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbMl0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgbWF0Y2ghWzNdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHJpbmcobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBudW1lcm8uc3Vic3RyaW5nKDAsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLE9BQU9BLE1BQU0sTUFBTSxRQUFRO0FBQzNCLE9BQU9DLEVBQUUsTUFBTSxVQUFVO0FBQ3pCLE9BQU9DLElBQUksTUFBTSxNQUFNO0FBQUEsU0FFZEMsZUFBZTtBQUFBLFNBQ2ZDLFFBQVEsRUFBRUQsZUFBZTtBQUFBLFNBRXpCRSxPQUFPO0FBQUEsU0FDUEEsT0FBTztBQUFBLFNBR2RDLE9BQU8sSUFBSUMsdUJBQXVCO0FBQUEsU0FJM0JELE9BQU8sSUFBSUUsY0FBYztBQUFBLFNBQ2JGLE9BQU8sSUFBSUcsa0JBQWtCO0FBQUEsU0FFaERILE9BQU8sSUFBSUksMEJBQTBCO0FBQUEsU0FJOUJDLFdBQVc7QUFBQSxTQUNYTCxPQUFPLElBQUlNLGVBQWU7QUFBQSxTQUMxQk4sT0FBTyxJQUFJTyxnQkFBZ0I7QUFBQSxTQUMzQlAsT0FBTyxJ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
1073
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJmcyIsInBhdGgiLCJFbmFibGVkRGF0YXNldHMiLCJkYXRhc2V0cyIsIndhbGtEaXIiLCJDb252ZXJ0IiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJBZ2VuZGFzQ29udmVydCIsIkFtZW5kZW1lbnRzQ29udmVydCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwiTGVnaXNsYXR1cmUiLCJTY3J1dGluc0NvbnZlcnQiLCJRdWVzdGlvbnNDb252ZXJ0IiwiQ29tcHRlc1JlbmR1c0NvbnZlcnQiLCJkb2N1bWVudFVpZFJlZ2V4IiwiZG9zc2llclVpZFJlZ2V4IiwicmV1bmlvblVpZFJlZ2V4Iiwic2NydXRpblVpZFJlZ2V4IiwiaXRlckxvYWRBc3NlbWJsZWVBY3RldXJzIiwiZGF0YURpciIsImxlZ2lzbGF0dXJlIiwibG9nIiwiYWN0ZXVyc1VpZCIsIlNldCIsImRhdGFzZXQiLCJhY3RldXJzRXRPcmdhbmVzIiwiaWdub3JlRm9yV2ViIiwiQWxsIiwiZGF0YXNldERpciIsImpvaW4iLCJmaWxlbmFtZSIsInJlcGxhY2UiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyRmlsZVBhdGgiLCJjb25zb2xlIiwiYWN0ZXVySnNvbiIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiYWN0ZXVyIiwidG9BY3RldXIiLCJoYXMiLCJ1aWQiLCJhZGQiLCJkYXRhc2V0TGVnaXNsYXR1cmUiLCJpdGVyTG9hZEFzc2VtYmxlZUFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHNVaWQiLCJhbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50RmlsZVBhdGgiLCJhbWVuZGVtZW50SnNvbiIsImFtZW5kZW1lbnQiLCJ0b0FtZW5kZW1lbnQiLCJpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyIsImRvY3VtZW50c1VpZCIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudEZpbGVQYXRoIiwiZG9jdW1lbnRKc29uIiwiZG9jdW1lbnQiLCJ0b0RvY3VtZW50IiwiaXRlckxvYWRBc3NlbWJsZWVEb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwiZG9zc2llcnNQYXJsZW1lbnRhaXJlc1VpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZVBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZUpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJpdGVyTG9hZEFzc2VtYmxlZU9yZ2FuZXMiLCJvcmdhbmVzVWlkIiwib3JnYW5lU3BsaXRQYXRoIiwib3JnYW5lRmlsZW5hbWUiLCJvcmdhbmVGaWxlUGF0aCIsIm9yZ2FuZUpzb24iLCJvcmdhbmUiLCJ0b09yZ2FuZSIsIml0ZXJMb2FkQXNzZW1ibGVlUmV1bmlvbnMiLCJyZXVuaW9uc1VpZCIsImFnZW5kYXMiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbkZpbGVQYXRoIiwicmV1bmlvbkpzb24iLCJyZXVuaW9uIiwidG9SZXVuaW9uIiwiaXRlckxvYWRBc3NlbWJsZWVTY3J1dGlucyIsInNjcnV0aW5zVWlkIiwic2NydXRpbnMiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbkZpbGVQYXRoIiwic2NydXRpbkpzb24iLCJzY3J1dGluIiwidG9TY3J1dGluIiwiaXRlckxvYWRBc3NlbWJsZWVRdWVzdGlvbnMiLCJxdWVzdGlvbnNVaWQiLCJxdWVzdGlvbnMiLCJxdWVzdGlvblNwbGl0UGF0aCIsInF1ZXN0aW9uRmlsZW5hbWUiLCJxdWVzdGlvbkZpbGVQYXRoIiwicXVlc3Rpb25Kc29uIiwicXVlc3Rpb24iLCJ0b1F1ZXN0aW9uIiwiaXRlckxvYWRBc3NlbWJsZWVDb21wdGVzUmVuZHVzIiwiY29tcHRlc1JlbmR1c1VpZCIsImNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiY29tcHRlUmVuZHVTcGxpdFBhdGgiLCJjb21wdGVSZW5kdUZpbGVuYW1lIiwiY29tcHRlUmVuZHVGaWxlUGF0aCIsImNvbXB0ZVJlbmR1SnNvbiIsImNvbXB0ZVJlbmR1IiwidG9Db21wdGVSZW5kdSIsImxvYWRBc3NlbWJsZWVEYXRhIiwiZW5hYmxlZERhdGFzZXRzIiwiYWN0ZXVyQnlVaWQiLCJvcmdhbmVCeVVpZCIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJ1bmRlZmluZWQiLCJyZXVuaW9uQnlVaWQiLCJyZXVuaW9uc0J5RGF5IiwicmV1bmlvbnNCeURvc3NpZXJVaWQiLCJBZ2VuZGFzIiwiZGF5IiwidGltZXN0YW1wRGVidXQiLCJ0b0lTT1N0cmluZyIsInNwbGl0IiwicmV1bmlvbnNBdERheSIsInB1c2giLCJvZGoiLCJwb2ludE9kaiIsInBvaW50c09kaiIsImRvc3NpZXJMZWdpc2xhdGlmUmVmIiwiZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMiLCJyZXVuaW9uc0F0RG9zc2llclVpZCIsImFtZW5kZW1lbnRCeVVpZCIsIkFtZW5kZW1lbnRzIiwiZG9jdW1lbnRCeVVpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llclNwbGl0UGF0aCIsImRvc3NpZXJGaWxlbmFtZSIsImRvc3NpZXJGaWxlUGF0aCIsImRvc3NpZXJKc29uIiwiZG9zc2llciIsInRpdHJlRG9zc2llciIsInNlbmF0Q2hlbWluIiwidGl0cmVDaGVtaW4iLCJwaG90b0J5VWlkIiwiUGhvdG9zIiwianNvbkZpbGVQYXRoIiwiU2VpemUiLCJleGlzdHNTeW5jIiwianNvbiIsIk9iamVjdCIsImFzc2lnbiIsIkpTT04iLCJwYXJzZSIsInNjcnV0aW5CeVVpZCIsIlNjcnV0aW5zIiwicXVlc3Rpb25CeVVpZCIsIlF1ZXN0aW9ucyIsImNvbXB0ZVJlbmR1QnlVaWQiLCJDb21wdGVzUmVuZHVzU2VhbmNlcyIsImNvbXB0ZVJlbmR1UGF0aCIsImxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiYWN0ZXVycyIsIm9yZ2FuZXMiLCJ0b0FnZW5kYXMiLCJyZXVuaW9ucyIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzUGFybGVtZW50YWlyZXMiLCJ0b1NjcnV0aW5zIiwidG9RdWVzdGlvbnMiLCJjb21wdGVzUmVuZHVzIiwidG9Db21wdGVzUmVuZHVzIiwibG9hZEFzc2VtYmxlZURvY3VtZW50RmlsZSIsImZvcm1hdHMiLCJkb2N1bWVudHNEaXIiLCJkb2N1bWVudERpciIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJpbmRleFBhdGgiLCJwYXRoRXhpc3RzU3luYyIsImluZGV4IiwicmVhZEpzb25TeW5jIiwiZm9ybWF0IiwidXJsIiwibG9hZEFzc2VtYmxlZVBob3Rvc0RlcHV0ZXMiLCJsb2FkQXNzZW1ibGVlUGhvdG9zU2VuYXRldXJzIiwibWF0Y2giLCJub3RTdHJpY3RFcXVhbCIsImdyb3VwcyIsImRvY3VtZW50VHlwZSIsImRvY3VtZW50VHlwZTIiLCJjaGFtYnJlRGlyIiwiY2hhbWJyZSIsImNoYW1icmUyIiwicmVwdWJsaXF1ZURpciIsInJlcHVibGlxdWUiLCJyZXB1YmxpcXVlMiIsImxlZ2lzbGF0dXJlRGlyIiwibGVnaXNsYXR1cmUyIiwiZXRhdCIsImVuc3VyZURpclN5bmMiLCJldGF0RGlyIiwibnVtZXJvIiwibnVtZXJvMiIsInN1YnN0cmluZyIsIm51bWVyb01pbGxpZXJzRGlyIiwicGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCIsImRvc3NpZXJzRGlyIiwiZXhlYyIsInBhdGhGcm9tUmV1bmlvblVpZCIsInJldW5pb25zRGlyIiwic2Vzc2lvbkRpciIsImlkRGlyIiwibnVtZXJvTWlsbGlvbnNEaXIiLCJwYXRoRnJvbVNjcnV0aW5VaWQiLCJzY3J1dGluc0RpciIsInBhdGhGcm9tVWlkIiwiZGF0YVJlZ2V4cCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vLyBMb2FkIGRhdGEgZnJvbSBmaWxlc1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi9kYXRhc2V0c1wiXG5pbXBvcnQgdHlwZSB7IERvY3VtZW50RmlsZXNJbmRleCB9IGZyb20gXCIuL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmV4cG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBBY3RldXIsXG4gIENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQsXG4gIE9yZ2FuZSxcbiAgUGhvdG8sXG59IGZyb20gXCIuL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNDb252ZXJ0LCBSZXVuaW9uIH0gZnJvbSBcIi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50LCBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCB9IGZyb20gXCIuL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc0NvbnZlcnQsIFNjcnV0aW4gfSBmcm9tIFwiLi90eXBlcy9zY3J1dGluc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFF1ZXN0aW9uc0NvbnZlcnQsIFF1ZXN0aW9uIH0gZnJvbSBcIi4vdHlwZXMvcXVlc3Rpb25zXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQ29tcHRlc1JlbmR1c0NvbnZlcnQsIENvbXB0ZVJlbmR1IH0gZnJvbSBcIi4vdHlwZXMvZGViYXRzXCJcbmltcG9ydCB7IERvY3VtZW50VXJsRm9ybWF0IH0gZnJvbSBcIi4vdXJsc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YSB7XG4gIHJlYWRvbmx5IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9XG4gIHJlYWRvbmx5IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH1cbiAgcmVhZG9ubHkgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH1cbiAgcmVhZG9ubHkgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH1cbiAgcmVhZG9ubHkgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG4gIHJlYWRvbmx5IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfVxuICByZWFkb25seSByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfVxuICByZWFkb25seSBxdWVzdGlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFF1ZXN0aW9uIH1cbiAgcmVhZG9ubHkgY29tcHRlUmVuZHVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBDb21wdGVSZW5kdSB9XG59XG5cbmNvbnN0IGRvY3VtZW50VWlkUmVnZXggPVxuICAvXigoPzxkb2N1bWVudFR5cGU+QUNJTnxBTENOfEFWQ0V8QVZJU3xERUNMfEVUREl8TEVUVHxNRVNTfE1JT058UElPTnxQTlJFfFBSSkx8UkFQUHxSSU5GfFJJT04pKD88Y2hhbWJyZT5BTnxTTikoPzxyZXB1YmxpcXVlPlJcXGQrKVtMU10oPzxsZWdpc2xhdHVyZT5cXGQrKSg/PGV0YXQ+QnxCVEF8QlRDfFRBUCkoPzxudW1lcm8+XFxkKykoLS4qKT8pfCgoPzxkb2N1bWVudFR5cGUyPk1JT04pKD88Y2hhbWJyZTI+QU58U04pKD88cmVwdWJsaXF1ZTI+UlxcZCspW0xTXSg/PGxlZ2lzbGF0dXJlMj5cXGQrKS1OKD88bnVtZXJvMj5cXGQrKSkkL1xuY29uc3QgZG9zc2llclVpZFJlZ2V4ID0gL15ETChSXFxkKykoTFxcZCspTihcXGQrKSQvXG5jb25zdCByZXVuaW9uVWlkUmVnZXggPVxuICAvXlJVKEFOfENHfFNOKShSXFxkKykoTFxcZCspKFtBU11cXGR7NH0pKElEQ3xJREZMP3xJRFMpKFxcZCspJC9cbmNvbnN0IHNjcnV0aW5VaWRSZWdleCA9IC9eVlRBTihSXFxkKykoTFxcZCspVihcXGQrKSQvXG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVBY3RldXJzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgYWN0ZXVyOiBBY3RldXI7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGFjdGV1cnNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgYWN0ZXVyRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYWN0ZXVyU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FjdGV1ckZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgaWYgKGFjdGV1cnNVaWQuaGFzKGFjdGV1ci51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBhY3RldXJzVWlkLmFkZChhY3RldXIudWlkKVxuICAgICAgeWllbGQgeyBhY3RldXIsIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVBbWVuZGVtZW50cyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGFtZW5kZW1lbnQ6IEFtZW5kZW1lbnQ7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGFtZW5kZW1lbnRzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hbWVuZGVtZW50U3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FtZW5kZW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgYW1lbmRlbWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhbWVuZGVtZW50RmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50KGFtZW5kZW1lbnRKc29uKVxuICAgICAgaWYgKGFtZW5kZW1lbnRzVWlkLmhhcyhhbWVuZGVtZW50LnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGFtZW5kZW1lbnRzVWlkLmFkZChhbWVuZGVtZW50LnVpZClcbiAgICAgIHlpZWxkIHsgYW1lbmRlbWVudCwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGRvY3VtZW50OiBEb2N1bWVudDsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgY29uc3QgZG9jdW1lbnRzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvY3VtZW50c1wiXSkpIHtcbiAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPSBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvY3VtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9jdW1lbnRTcGxpdFBhdGgpXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7ZG9jdW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgZG9jdW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9jdW1lbnRGaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuICAgICAgY29uc3QgZG9jdW1lbnQgPSBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0RvY3VtZW50KGRvY3VtZW50SnNvbilcbiAgICAgIGlmIChkb2N1bWVudHNVaWQuaGFzKGRvY3VtZW50LnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50c1VpZC5hZGQoZG9jdW1lbnQudWlkKVxuICAgICAgeWllbGQgeyBkb2N1bWVudCwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZURvc3NpZXJzUGFybGVtZW50YWlyZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAge1xuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICAgIGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmVcbiAgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGRvc3NpZXJzUGFybGVtZW50YWlyZXNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1xuICAgICAgXCJkb3NzaWVyc1wiLFxuICAgIF0pKSB7XG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lID1cbiAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGhbZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhc2V0RGlyLFxuICAgICAgICAuLi5kb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVGaWxlUGF0aCxcbiAgICAgICAge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlID1cbiAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUpzb24sXG4gICAgICAgIClcbiAgICAgIGlmIChkb3NzaWVyc1BhcmxlbWVudGFpcmVzVWlkLmhhcyhkb3NzaWVyUGFybGVtZW50YWlyZS51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBkb3NzaWVyc1BhcmxlbWVudGFpcmVzVWlkLmFkZChkb3NzaWVyUGFybGVtZW50YWlyZS51aWQpXG4gICAgICB5aWVsZCB7IGRvc3NpZXJQYXJsZW1lbnRhaXJlLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlT3JnYW5lcyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IG9yZ2FuZTogT3JnYW5lOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBvcmdhbmVzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJvcmdhbmVzXCJdKSkge1xuICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9yZ2FuZUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtvcmdhbmVGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3Qgb3JnYW5lSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKG9yZ2FuZUZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBjb25zdCBvcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgIGlmIChvcmdhbmVzVWlkLmhhcyhvcmdhbmUudWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgb3JnYW5lc1VpZC5hZGQob3JnYW5lLnVpZClcbiAgICAgIHlpZWxkIHsgb3JnYW5lLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlUmV1bmlvbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyByZXVuaW9uOiBSZXVuaW9uOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCByZXVuaW9uc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPSByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJldW5pb25GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5yZXVuaW9uU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3JldW5pb25GaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgcmV1bmlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyZXVuaW9uRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJldW5pb24gPSBBZ2VuZGFzQ29udmVydC50b1JldW5pb24ocmV1bmlvbkpzb24pXG4gICAgICBpZiAocmV1bmlvbnNVaWQuaGFzKHJldW5pb24udWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV1bmlvbnNVaWQuYWRkKHJldW5pb24udWlkKVxuICAgICAgeWllbGQgeyByZXVuaW9uLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlU2NydXRpbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBzY3J1dGluOiBTY3J1dGluOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBzY3J1dGluc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBzY3J1dGluRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uc2NydXRpblNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtzY3J1dGluRmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNjcnV0aW5Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoc2NydXRpbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBjb25zdCBzY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgIGlmIChzY3J1dGluc1VpZC5oYXMoc2NydXRpbi51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBzY3J1dGluc1VpZC5hZGQoc2NydXRpbi51aWQpXG4gICAgICB5aWVsZCB7IHNjcnV0aW4sIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVRdWVzdGlvbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBxdWVzdGlvbjogUXVlc3Rpb247IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IHF1ZXN0aW9uc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBxdWVzdGlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCBxdWVzdGlvbkZpbGVuYW1lID0gcXVlc3Rpb25TcGxpdFBhdGhbcXVlc3Rpb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghcXVlc3Rpb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBxdWVzdGlvbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnF1ZXN0aW9uU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3F1ZXN0aW9uRmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHF1ZXN0aW9uSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHF1ZXN0aW9uRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHF1ZXN0aW9uID0gUXVlc3Rpb25zQ29udmVydC50b1F1ZXN0aW9uKHF1ZXN0aW9uSnNvbilcbiAgICAgIGlmIChxdWVzdGlvbnNVaWQuaGFzKHF1ZXN0aW9uLnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIHF1ZXN0aW9uc1VpZC5hZGQocXVlc3Rpb24udWlkKVxuICAgICAgeWllbGQgeyBxdWVzdGlvbiwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZUNvbXB0ZXNSZW5kdXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBjb21wdGVSZW5kdTogQ29tcHRlUmVuZHU7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGNvbXB0ZXNSZW5kdXNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC54bWwkLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGNvbXB0ZVJlbmR1U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1RmlsZW5hbWUgPVxuICAgICAgICBjb21wdGVSZW5kdVNwbGl0UGF0aFtjb21wdGVSZW5kdVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgaWYgKCFjb21wdGVSZW5kdUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uY29tcHRlUmVuZHVTcGxpdFBhdGgpXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7Y29tcHRlUmVuZHVGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgY29tcHRlUmVuZHVKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoY29tcHRlUmVuZHVGaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuICAgICAgY29uc3QgY29tcHRlUmVuZHUgPSBDb21wdGVzUmVuZHVzQ29udmVydC50b0NvbXB0ZVJlbmR1KGNvbXB0ZVJlbmR1SnNvbilcbiAgICAgIGlmIChjb21wdGVzUmVuZHVzVWlkLmhhcyhjb21wdGVSZW5kdS51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb21wdGVzUmVuZHVzVWlkLmFkZChjb21wdGVSZW5kdS51aWQpXG4gICAgICB5aWVsZCB7IGNvbXB0ZVJlbmR1LCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gTG9hZCBkYXRhIGZyb20gc3BsaXQgZmlsZXMuXG4vLy8gRGVwcmVjYXRlZDogVXNlIGl0ZXJMb2FkLi4uIGl0ZXJhdG9ycyBpbnN0ZWFkLlxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEYXRhKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogRGF0YSB7XG4gIGNvbnN0IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9ID0ge31cbiAgY29uc3Qgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFjdGV1clNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YWN0ZXVyRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChhY3RldXJCeVVpZFthY3RldXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPSBhY3RldXJcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcIm9yZ2FuZXNcIl0pKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7b3JnYW5lRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMob3JnYW5lRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZUpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPSBvcmdhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHJldW5pb25GaWxlbmFtZSA9IHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ucmV1bmlvblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmV1bmlvbkZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyZXVuaW9uRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJldW5pb24gPSBBZ2VuZGFzQ29udmVydC50b1JldW5pb24ocmV1bmlvbkpzb24pXG4gICAgICAgIGlmIChyZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID0gcmV1bmlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5ID0gcmV1bmlvbi50aW1lc3RhbXBEZWJ1dC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXVxuICAgICAgICBsZXQgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XVxuICAgICAgICBpZiAocmV1bmlvbnNBdERheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XSA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV1bmlvbnNBdERheS5wdXNoKHJldW5pb24pXG5cbiAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgaWYgKG9kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwb2ludE9kaiBvZiBvZGoucG9pbnRzT2RqIHx8IFtdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJMZWdpc2xhdGlmUmVmIG9mIHBvaW50T2RqLmRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIHx8XG4gICAgICAgICAgICAgIFtdKSB7XG4gICAgICAgICAgICAgIGxldCByZXVuaW9uc0F0RG9zc2llclVpZCA9XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNCeURvc3NpZXJVaWRbZG9zc2llckxlZ2lzbGF0aWZSZWZdXG4gICAgICAgICAgICAgIGlmIChyZXVuaW9uc0F0RG9zc2llclVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQgPSByZXVuaW9uc0J5RG9zc2llclVpZFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJMZWdpc2xhdGlmUmVmXG4gICAgICAgICAgICAgICAgXSA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQucHVzaChyZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hbWVuZGVtZW50U3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthbWVuZGVtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFtZW5kZW1lbnRGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnQoYW1lbmRlbWVudEpzb24pXG4gICAgICAgIGlmIChhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID0gYW1lbmRlbWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiZG9jdW1lbnRzXCJdKSkge1xuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID0gZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9jdW1lbnRTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2RvY3VtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudEZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb2N1bWVudCA9IERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRKc29uKVxuICAgICAgICBpZiAoZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPSBkb2N1bWVudFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZG9zc2llclNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvc3NpZXJzXCJdKSkge1xuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZW5hbWUgPSBkb3NzaWVyU3BsaXRQYXRoW2Rvc3NpZXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb3NzaWVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmRvc3NpZXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2Rvc3NpZXJGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9zc2llckZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb3NzaWVyID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKGRvc3NpZXJKc29uKVxuICAgICAgICBjb25zdCB0aXRyZURvc3NpZXIgPSBkb3NzaWVyLnRpdHJlRG9zc2llclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci50aXRyZUNoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5QaG90b3MpIHtcbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuU2VpemUgOiBsZWdpc2xhdHVyZVxuICAgICAgICB9YCxcbiAgICAgICAgXCJkZXB1dGVzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgICAgIFwic2VuYXRldXJzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzY3J1dGluQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogU2NydXRpbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPSBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnNjcnV0aW5TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3NjcnV0aW5GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoc2NydXRpbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBzY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgICAgaWYgKHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPSBzY3J1dGluXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBxdWVzdGlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFF1ZXN0aW9uIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlF1ZXN0aW9ucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBxdWVzdGlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uRmlsZW5hbWUgPSBxdWVzdGlvblNwbGl0UGF0aFtxdWVzdGlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXF1ZXN0aW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlc3Rpb25GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5xdWVzdGlvblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cXVlc3Rpb25GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHF1ZXN0aW9uRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gUXVlc3Rpb25zQ29udmVydC50b1F1ZXN0aW9uKHF1ZXN0aW9uSnNvbilcbiAgICAgICAgaWYgKHF1ZXN0aW9uQnlVaWRbcXVlc3Rpb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcXVlc3Rpb25CeVVpZFtxdWVzdGlvbi51aWRdID0gcXVlc3Rpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbXB0ZVJlbmR1QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQ29tcHRlUmVuZHUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQ29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBjb21wdGVSZW5kdVBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBjb21wdGVSZW5kdUZpbGVuYW1lID0gY29tcHRlUmVuZHVQYXRoW2NvbXB0ZVJlbmR1UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWNvbXB0ZVJlbmR1RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHVGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5jb21wdGVSZW5kdVBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2NvbXB0ZVJlbmR1RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wdGVSZW5kdUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhjb21wdGVSZW5kdUZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBjb21wdGVSZW5kdSA9IENvbXB0ZXNSZW5kdXNDb252ZXJ0LnRvQ29tcHRlUmVuZHUoY29tcHRlUmVuZHVKc29uKVxuICAgICAgICBpZiAoY29tcHRlUmVuZHVCeVVpZFtjb21wdGVSZW5kdS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb21wdGVSZW5kdUJ5VWlkW2NvbXB0ZVJlbmR1LnVpZF0gPSBjb21wdGVSZW5kdVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gICAgcXVlc3Rpb25CeVVpZCxcbiAgICBjb21wdGVSZW5kdUJ5VWlkLFxuICB9XG59XG5cbi8vLyBMb2FkIGRhdGEgZnJvbSBiaWcgbW9ub2x5dGljIGZpbGVzLlxuLy8vIERlcHJlY2F0ZWQ6IEFzc2VtYmzDqWUgbmF0aW9uYWxlIG9wZW4gZGF0YSBubyBtb3JlIHVzZXMgbW9ub2x5dGljIGZpbGVzLlxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogRGF0YSB7XG4gIGNvbnN0IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9ID0ge31cbiAgY29uc3Qgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFjdGV1cnNFdE9yZ2FuZXMgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cnNFdE9yZ2FuZXMoanNvbilcbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIGFjdGV1cnNFdE9yZ2FuZXMuYWN0ZXVycykge1xuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAoYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID0gYWN0ZXVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIGFjdGV1cnNFdE9yZ2FuZXMub3JnYW5lcykge1xuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcIm9yZ2FuZVwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAob3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID0gb3JnYW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEb3NzaWVyVWlkOiB7IFtkb3NzaWVyVWlkOiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYWdlbmRhcyA9IEFnZW5kYXNDb252ZXJ0LnRvQWdlbmRhcyhqc29uKVxuICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIGFnZW5kYXMucmV1bmlvbnMpIHtcbiAgICAgICAgaWYgKHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPSByZXVuaW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXkgPSByZXVuaW9uLnRpbWVzdGFtcERlYnV0LnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdXG4gICAgICAgIGxldCByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldXG4gICAgICAgIGlmIChyZXVuaW9uc0F0RGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldID0gW11cbiAgICAgICAgfVxuICAgICAgICByZXVuaW9uc0F0RGF5LnB1c2gocmV1bmlvbilcblxuICAgICAgICBjb25zdCBvZGogPSByZXVuaW9uLm9kalxuICAgICAgICBpZiAob2RqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50T2RqIG9mIG9kai5wb2ludHNPZGogfHwgW10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9zc2llckxlZ2lzbGF0aWZSZWYgb2YgcG9pbnRPZGouZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMgfHxcbiAgICAgICAgICAgICAgW10pIHtcbiAgICAgICAgICAgICAgbGV0IHJldW5pb25zQXREb3NzaWVyVWlkID1cbiAgICAgICAgICAgICAgICByZXVuaW9uc0J5RG9zc2llclVpZFtkb3NzaWVyTGVnaXNsYXRpZlJlZl1cbiAgICAgICAgICAgICAgaWYgKHJldW5pb25zQXREb3NzaWVyVWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZCA9IHJldW5pb25zQnlEb3NzaWVyVWlkW1xuICAgICAgICAgICAgICAgICAgZG9zc2llckxlZ2lzbGF0aWZSZWZcbiAgICAgICAgICAgICAgICBdID0gW11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZC5wdXNoKHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW1lbmRlbWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFtZW5kZW1lbnQgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhbWVuZGVtZW50cyA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnRzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHRleHRlTGVnaXNsYXRpZiBvZiBhbWVuZGVtZW50cy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnQgb2YgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzKSB7XG4gICAgICAgICAgaWYgKGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9IGFtZW5kZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBkb2N1bWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgZG9zc2llcnNMZWdpc2xhdGlmcyA9XG4gICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llcnNMZWdpc2xhdGlmcyhqc29uKVxuICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBkb3NzaWVyc0xlZ2lzbGF0aWZzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGlmIChkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9IGRvY3VtZW50XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZG9zc2llciBvZiBkb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXJzUGFybGVtZW50YWlyZXMpIHtcbiAgICAgICAgY29uc3QgdGl0cmVEb3NzaWVyID0gZG9zc2llci50aXRyZURvc3NpZXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci5zZW5hdENoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIudGl0cmVDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5QaG90b3MpIHtcbiAgICBjb25zdCBwaG90b0J5VWlkID0ge31cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBgcGhvdG9zX2RlcHV0ZXNfJHtcbiAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgTGVnaXNsYXR1cmUuQWxsLlxuICAgICAgICAgIGxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgPyBMZWdpc2xhdHVyZS5TZWl6ZSA6IGxlZ2lzbGF0dXJlXG4gICAgICAgIH1gLFxuICAgICAgICBcImRlcHV0ZXMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBcInBob3Rvc19zZW5hdGV1cnNcIixcbiAgICAgICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3Qgc2NydXRpbnMgPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGlucyhqc29uKVxuICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIHNjcnV0aW5zLnNjcnV0aW5zKSB7XG4gICAgICAgIGlmIChzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID0gc2NydXRpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcXVlc3Rpb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBRdWVzdGlvbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5RdWVzdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMucXVlc3Rpb25zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgcXVlc3Rpb25zID0gUXVlc3Rpb25zQ29udmVydC50b1F1ZXN0aW9ucyhqc29uKVxuICAgICAgZm9yIChjb25zdCBxdWVzdGlvbiBvZiBxdWVzdGlvbnMucXVlc3Rpb25zKSB7XG4gICAgICAgIGlmIChxdWVzdGlvbkJ5VWlkW3F1ZXN0aW9uLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHF1ZXN0aW9uQnlVaWRbcXVlc3Rpb24udWlkXSA9IHF1ZXN0aW9uXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBjb21wdGVSZW5kdUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IENvbXB0ZVJlbmR1IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgY29tcHRlc1JlbmR1cyA9IENvbXB0ZXNSZW5kdXNDb252ZXJ0LnRvQ29tcHRlc1JlbmR1cyhqc29uKVxuICAgICAgZm9yIChjb25zdCBjb21wdGVSZW5kdSBvZiBjb21wdGVzUmVuZHVzLmNvbXB0ZXNSZW5kdXMpIHtcbiAgICAgICAgaWYgKGNvbXB0ZVJlbmR1QnlVaWRbY29tcHRlUmVuZHUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29tcHRlUmVuZHVCeVVpZFtjb21wdGVSZW5kdS51aWRdID0gY29tcHRlUmVuZHVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWN0ZXVyQnlVaWQsXG4gICAgYW1lbmRlbWVudEJ5VWlkLFxuICAgIGRvY3VtZW50QnlVaWQsXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkLFxuICAgIG9yZ2FuZUJ5VWlkLFxuICAgIHBob3RvQnlVaWQsXG4gICAgcmV1bmlvbkJ5VWlkLFxuICAgIHJldW5pb25zQnlEYXksXG4gICAgcmV1bmlvbnNCeURvc3NpZXJVaWQsXG4gICAgc2NydXRpbkJ5VWlkLFxuICAgIHF1ZXN0aW9uQnlVaWQsXG4gICAgY29tcHRlUmVuZHVCeVVpZCxcbiAgfVxufVxuXG4vKipcbiAqIFJlYWQgaW5mb3Mgb2YgYSBkb2N1bWVudCBvciBhIGRpdmlzaW9uIG9mIGEgZG9jdW1lbnQgZnJvbSBmaWxlIHN5c3RlbVxuICpcbiAqIEBwYXJhbSBkYXRhRGlyXG4gKiBAcGFyYW0gdWlkIFVJRCBvZiBhIGRvY3VtZW50IG9yIGEgZGl2aXNpb25cbiAqIEBwYXJhbSBmb3JtYXRzIHJlcXVlc3RlZCBmb3JtYXRzIG9mIHRoZSBkb2N1bWVudCBpbiBkZWNyZWFzaW5nIHByZWZlcmVuY2Ugb3JkZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEb2N1bWVudEZpbGUoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgdWlkOiBzdHJpbmcsXG4gIGZvcm1hdHM6IERvY3VtZW50VXJsRm9ybWF0W10sXG4pOlxuICB8IHtcbiAgICAgIGZvcm1hdDogRG9jdW1lbnRVcmxGb3JtYXRcbiAgICAgIHBhdGg6IHN0cmluZ1xuICAgICAgdXJsOiBzdHJpbmdcbiAgICB9XG4gIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZG9jdW1lbnRzRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIFwiRG9jdW1lbnRzXCIpXG4gIGNvbnN0IGRvY3VtZW50RGlyID0gcGF0aEZyb21Eb2N1bWVudFVpZChkb2N1bWVudHNEaXIsIHVpZClcbiAgY29uc3QgaW5kZXhQYXRoID0gcGF0aC5qb2luKGRvY3VtZW50RGlyLCBcImluZGV4Lmpzb25cIilcbiAgaWYgKCFmcy5wYXRoRXhpc3RzU3luYyhpbmRleFBhdGgpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIGNvbnN0IGluZGV4ID0gZnMucmVhZEpzb25TeW5jKGluZGV4UGF0aCkgYXMgRG9jdW1lbnRGaWxlc0luZGV4XG4gIGZvciAoY29uc3QgZm9ybWF0IG9mIGZvcm1hdHMpIHtcbiAgICBmb3IgKGNvbnN0IHsgZmlsZW5hbWUsIHVybCB9IG9mIGluZGV4W2Zvcm1hdF0gPz8gW10pIHtcbiAgICAgIGlmIChmaWxlbmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICByZXR1cm4geyBmb3JtYXQsIHBhdGg6IHBhdGguam9pbihkb2N1bWVudERpciwgZmlsZW5hbWUpLCB1cmwgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlUGhvdG9zRGVwdXRlcyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9IHtcbiAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgZGF0YURpcixcbiAgICBgcGhvdG9zX2RlcHV0ZXNfJHtcbiAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuU2VpemUgOiBsZWdpc2xhdHVyZVxuICAgIH1gLFxuICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gIClcbiAgaWYgKGxvZykge1xuICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gIH1cbiAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgcmV0dXJuIEpTT04ucGFyc2UoanNvbikgYXMgeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlUGhvdG9zU2VuYXRldXJzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9IHtcbiAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgZGF0YURpcixcbiAgICBcInBob3Rvc19zZW5hdGV1cnNcIixcbiAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gIClcbiAgaWYgKGxvZykge1xuICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gIH1cbiAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgcmV0dXJuIEpTT04ucGFyc2UoanNvbikgYXMgeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbURvY3VtZW50VWlkKGRvY3VtZW50c0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gdWlkLm1hdGNoKGRvY3VtZW50VWlkUmVnZXgpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgZG9jdW1lbnQgVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IGdyb3VwcyA9IG1hdGNoIS5ncm91cHMgYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuICBjb25zdCBkb2N1bWVudFR5cGUgPSBwYXRoLmpvaW4oXG4gICAgZG9jdW1lbnRzRGlyLFxuICAgIGdyb3Vwcy5kb2N1bWVudFR5cGUgPz8gZ3JvdXBzLmRvY3VtZW50VHlwZTIsXG4gIClcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihkb2N1bWVudFR5cGUsIGdyb3Vwcy5jaGFtYnJlID8/IGdyb3Vwcy5jaGFtYnJlMilcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihcbiAgICBjaGFtYnJlRGlyLFxuICAgIGdyb3Vwcy5yZXB1YmxpcXVlID8/IGdyb3Vwcy5yZXB1YmxpcXVlMixcbiAgKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihcbiAgICByZXB1YmxpcXVlRGlyLFxuICAgIGdyb3Vwcy5sZWdpc2xhdHVyZSA/PyBncm91cHMubGVnaXNsYXR1cmUyLFxuICApXG4gIGNvbnN0IGV0YXQgPSBncm91cHMuZXRhdFxuICBpZiAoZXRhdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZnMuZW5zdXJlRGlyU3luYyhsZWdpc2xhdHVyZURpcilcbiAgICByZXR1cm4gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCB1aWQpXG4gIH1cbiAgY29uc3QgZXRhdERpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgZXRhdClcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyAoZ3JvdXBzLm51bWVybyA/PyBncm91cHMubnVtZXJvMilcbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cmluZyhudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4oZXRhdERpciwgbnVtZXJvLnN1YnN0cmluZygwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZChcbiAgZG9zc2llcnNEaXI6IHN0cmluZyxcbiAgdWlkOiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IGRvc3NpZXJVaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBkb3NzaWVyIHBhcmxlbWVudGFpcmUgVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oZG9zc2llcnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzJdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVszXVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyaW5nKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cmluZygwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21SZXVuaW9uVWlkKHJldW5pb25zRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSByZXVuaW9uVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgcmV1bmlvbiBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihyZXVuaW9uc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGNoYW1icmVEaXIsIG1hdGNoIVsyXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzNdKVxuICBjb25zdCBzZXNzaW9uRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBtYXRjaCFbNF0pXG4gIGNvbnN0IGlkRGlyID0gcGF0aC5qb2luKHNlc3Npb25EaXIsIG1hdGNoIVs1XSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwMDAwXCIgKyBtYXRjaCFbNl1cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cmluZyhudW1lcm8ubGVuZ3RoIC0gOSlcbiAgY29uc3QgbnVtZXJvTWlsbGlvbnNEaXIgPSBwYXRoLmpvaW4oaWREaXIsIG51bWVyby5zdWJzdHJpbmcoMCwgMykpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKG51bWVyb01pbGxpb25zRGlyLCBudW1lcm8uc3Vic3RyaW5nKDMsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbVNjcnV0aW5VaWQoc2NydXRpbnNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHNjcnV0aW5VaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBzY3J1dGluIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKHNjcnV0aW5zRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cmluZyhudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHJpbmcoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuLy8gR2V0IHN0YW5kYXJkIHBhdGggZm9yIG9iamVjdCB3aXRoIHVpZCA6IHJlcHVibGlxdWUgPiBsZWdpc2xhdHVyZSA+IGdyb3VwIG9iamVjdHMgYnkgdGhvdXNhbmRzXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21VaWQoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgdWlkOiBzdHJpbmcsXG4gIGRhdGFSZWdleHA6IFJlZ0V4cCxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gZGF0YVJlZ2V4cC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBvYmplY3Qgd2l0aCBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihkYXRhRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cmluZyhudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHJpbmcoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsT0FBT0EsTUFBTSxNQUFNLFFBQVE7QUFDM0IsT0FBT0MsRUFBRSxNQUFNLFVBQVU7QUFDekIsT0FBT0MsSUFBSSxNQUFNLE1BQU07QUFBQSxTQUVkQyxlQUFlO0FBQUEsU0FDZkMsUUFBUSxFQUFFRCxlQUFlO0FBQUEsU0FFekJFLE9BQU87QUFBQSxTQUNQQSxPQUFPO0FBQUEsU0FHZEMsT0FBTyxJQUFJQyx1QkFBdUI7QUFBQSxTQUkzQkQsT0FBTyxJQUFJRSxjQUFjO0FBQUEsU0FDYkYsT0FBTyxJQUFJRyxrQkFBa0I7QUFBQSxTQUVoREgsT0FBTyxJQUFJSSwwQkFBMEI7QUFBQSxTQUk5QkMsV0FBVztBQUFBLFNBQ1hMLE9BQU8sSUFBSU0sZUFBZTtBQUFBLFNBQzFCTixPQUFPLElBQUlPLGdCQUFnQjtBQUFBLFNBQzNCUCxPQUFPLElB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tricoteuses/assemblee",
3
- "version": "1.5.5",
3
+ "version": "1.5.6",
4
4
  "description": "Retrieve, clean up & handle French Assemblée nationale's open data",
5
5
  "keywords": [
6
6
  "Assemblée nationale",