occam-nominal 1.0.643 → 1.0.645

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.
@@ -487,6 +487,7 @@ class NominalFileContext extends _occamlanguages.FileContext {
487
487
  const fileContext = this; ///
488
488
  this.types = [];
489
489
  (0, _json.typesFromJSON)(json, this.types, fileContext);
490
+ (0, _json.typePropertiesFromJSON)(json, this.types, fileContext);
490
491
  this.lemmas = (0, _json.lemmasFromJSON)(json, fileContext);
491
492
  this.typeAliases = (0, _json.typeAliasesFromJSON)(json, fileContext);
492
493
  this.typePrefixes = (0, _json.typePrefixesFromJSON)(json, fileContext);
@@ -534,4 +535,4 @@ class NominalFileContext extends _occamlanguages.FileContext {
534
535
  }
535
536
  }
536
537
 
537
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0L2ZpbGUvbm9taW5hbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBGaWxlQ29udGV4dCwgbm9taW5hbFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IE5vbWluYWxMZXhlciBmcm9tIFwiLi4vLi4vbm9taW5hbC9sZXhlclwiO1xuaW1wb3J0IE5vbWluYWxQYXJzZXIgZnJvbSBcIi4uLy4uL25vbWluYWwvcGFyc2VyXCI7XG5cbmltcG9ydCB7IGlzb2xhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHZlcmlmeUZpbGUgfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy92ZXJpZnlcIjtcbmltcG9ydCB7IGZpbmRUeXBlLCBmaW5kVHlwZXMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3R5cGVcIjtcbmltcG9ydCB7IGZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIH0gZnJvbSBcIi4uLy4uL21ldGFUeXBlc1wiO1xuaW1wb3J0IHsgdHlwZXNGcm9tSlNPTixcbiAgICAgICAgIHJ1bGVzRnJvbUpTT04sXG4gICAgICAgICBsZW1tYXNGcm9tSlNPTixcbiAgICAgICAgIGF4aW9tc0Zyb21KU09OLFxuICAgICAgICAgc2NoZW1hc0Zyb21KU09OLFxuICAgICAgICAgdHlwZXNUb1R5cGVzSlNPTixcbiAgICAgICAgIHRoZW9yZW1zRnJvbUpTT04sXG4gICAgICAgICBydWxlc1RvUnVsZXNKU09OLFxuICAgICAgICAgbGVtbWFzVG9MZW1tYXNKU09OLFxuICAgICAgICAgYXhpb21zVG9BeGlvbXNKU09OLFxuICAgICAgICAgZ2VuZXJhdG9yc0Zyb21KU09OLFxuICAgICAgICAgY29uamVjdHVyZXNGcm9tSlNPTixcbiAgICAgICAgIGNvbWJpbmF0b3JzRnJvbUpTT04sXG4gICAgICAgICB0eXBlQWxpYXNlc0Zyb21KU09OLFxuICAgICAgICAgdHlwZVByZWZpeGVzRnJvbUpTT04sXG4gICAgICAgICBjb25zdHJ1Y3RvcnNGcm9tSlNPTixcbiAgICAgICAgIHNjaGVtYXNUb1NjaGVtYXNKU09OLFxuICAgICAgICAgdGhlb3JlbXNUb1RoZW9yZW1zSlNPTixcbiAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzRnJvbUpTT04sXG4gICAgICAgICBnZW5lcmF0b3JzVG9HZW5lcmF0b3JzSlNPTixcbiAgICAgICAgIGNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04sXG4gICAgICAgICBjb21iaW5hdG9yc1RvQ29tYmluYXRvcnNKU09OLFxuICAgICAgICAgdHlwZUFsaWFzZXNUb1R5cGVBbGlhc2VzSlNPTixcbiAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlc0Zyb21KU09OLFxuICAgICAgICAgdHlwZVByZWZpeGVzVG9UeXBlUHJlZml4ZXNKU09OLFxuICAgICAgICAgY29uc3RydWN0b3JzVG9Db25zdHJ1Y3RvcnNKU09OLFxuICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXNUb0RlY2xhcmVkVmFyaWFibGVzSlNPTixcbiAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlc1RvRGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvanNvblwiO1xuXG5jb25zdCB7IHB1c2ggfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBub21pbmFsTGV4ZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyLCBub21pbmFsUGFyc2VyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hciB9ID0gbm9taW5hbFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9taW5hbEZpbGVDb250ZXh0IGV4dGVuZHMgRmlsZUNvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBmaWxlQ29udGVudCwgZmlsZVBhdGgsIHRva2Vucywgbm9kZSwganNvbiwgbGV4ZXIsIHBhcnNlciwgdHlwZXMsIHJ1bGVzLCBheGlvbXMsIGxlbW1hcywgc2NoZW1hcywgdGhlb3JlbXMsIGdlbmVyYXRvcnMsIGNvbmplY3R1cmVzLCBjb21iaW5hdG9ycywgdHlwZUFsaWFzZXMsIHR5cGVQcmVmaXhlcywgY29uc3RydWN0b3JzLCBkZWNsYXJlZFZhcmlhYmxlcywgZGVjbGFyZWRNZXRhdmFyaWFibGVzKSB7XG4gICAgc3VwZXIoY29udGV4dCwgZmlsZUNvbnRlbnQsIGZpbGVQYXRoLCB0b2tlbnMsIG5vZGUsIGpzb24pO1xuXG4gICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5maWxlUGF0aCA9IGZpbGVQYXRoO1xuICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgdGhpcy50eXBlcyA9IHR5cGVzO1xuICAgIHRoaXMucnVsZXMgPSBydWxlcztcbiAgICB0aGlzLmF4aW9tcyA9IGF4aW9tcztcbiAgICB0aGlzLmxlbW1hcyA9IGxlbW1hcztcbiAgICB0aGlzLnNjaGVtYXMgPSBzY2hlbWFzO1xuICAgIHRoaXMudGhlb3JlbXMgPSB0aGVvcmVtcztcbiAgICB0aGlzLmdlbmVyYXRvcnMgPSBnZW5lcmF0b3JzO1xuICAgIHRoaXMuY29uamVjdHVyZXMgPSBjb25qZWN0dXJlcztcbiAgICB0aGlzLmNvbWJpbmF0b3JzID0gY29tYmluYXRvcnM7XG4gICAgdGhpcy50eXBlQWxpYXNlcyA9IHR5cGVBbGlhc2VzO1xuICAgIHRoaXMudHlwZVByZWZpeGVzID0gdHlwZVByZWZpeGVzO1xuICAgIHRoaXMuY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzO1xuICAgIHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMgPSBkZWNsYXJlZFZhcmlhYmxlcztcbiAgICB0aGlzLmRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldExleGVyKCkge1xuICAgIHJldHVybiB0aGlzLmxleGVyO1xuICB9XG5cbiAgZ2V0UGFyc2VyKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlcjtcbiAgfVxuXG4gIGdldExhYmVscyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBsYWJlbHMgPSBbXTtcblxuICAgIGlmIChpbmNsdWRlUmVsZWFzZSkge1xuICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRMYWJlbHMgPSB0aGlzLmNvbnRleHQuZ2V0TGFiZWxzKCk7XG5cbiAgICAgIHB1c2gobGFiZWxzLCByZWxlYXNlQ29udGV4dExhYmVscyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucnVsZXMuZm9yRWFjaCgocnVsZSkgPT4ge1xuICAgICAgICBjb25zdCBydWxlTGFiZWxzID0gcnVsZS5nZXRMYWJlbHMoKTtcblxuICAgICAgICBwdXNoKGxhYmVscywgcnVsZUxhYmVscyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5heGlvbXMuZm9yRWFjaCgoYXhpb20pID0+IHtcbiAgICAgICAgY29uc3QgYXhpb21MYWJlbHMgPSBheGlvbS5nZXRMYWJlbHMoKTtcblxuICAgICAgICBwdXNoKGxhYmVscywgYXhpb21MYWJlbHMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubGVtbWFzLmZvckVhY2goKGxlbW1hKSA9PiB7XG4gICAgICAgIGNvbnN0IGxlbW1hTGFiZWxzID0gbGVtbWEuZ2V0TGFiZWxzKCk7XG5cbiAgICAgICAgcHVzaChsYWJlbHMsIGxlbW1hTGFiZWxzKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnRoZW9yZW1zLmZvckVhY2goKHRoZW9yZW0pID0+IHtcbiAgICAgICAgY29uc3QgdGhlb3JlbUxhYmVscyA9IHRoZW9yZW0uZ2V0TGFiZWxzKCk7XG5cbiAgICAgICAgcHVzaChsYWJlbHMsIHRoZW9yZW1MYWJlbHMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY29uamVjdHVyZXMuZm9yRWFjaCgoY29uamVjdHVyZSkgPT4ge1xuICAgICAgICBjb25zdCBjb25qZWN0dXJlTGFiZWxzID0gY29uamVjdHVyZS5nZXRMYWJlbHMoKTtcblxuICAgICAgICBwdXNoKGxhYmVscywgY29uamVjdHVyZUxhYmVscyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zY2hlbWFzLmZvckVhY2goKHNjaGVtYSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWFMYWJlbCA9IHNjaGVtYS5nZXRMYWJlbCgpO1xuXG4gICAgICAgIGxhYmVscy5wdXNoKHNjaGVtYUxhYmVsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsYWJlbHM7XG4gIH1cblxuICBnZXRUeXBlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUsIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRUeXBlcyhpbmNsdWRlRGVwZW5kZW5jaWVzKSA6XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlcztcblxuICAgIHJldHVybiB0eXBlcztcbiAgfVxuXG4gIGdldFJ1bGVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHJ1bGVzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0UnVsZXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5ydWxlcztcblxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIGdldEF4aW9tcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBheGlvbXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0QXhpb21zKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF4aW9tcztcblxuICAgIHJldHVybiBheGlvbXM7XG4gIH1cblxuICBnZXRMZW1tYXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgbGVtbWFzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldExlbW1hcygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW1tYXM7XG5cbiAgICByZXR1cm4gbGVtbWFzO1xuICB9XG5cbiAgZ2V0U2NoZW1hcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBzY2hlbWFzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRTY2hlbWFzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2hlbWFzO1xuXG4gICAgcmV0dXJuIHNjaGVtYXM7XG4gIH1cblxuICBnZXRUaGVvcmVtcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCB0aGVvcmVtcyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldFRoZW9yZW1zKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhlb3JlbXM7XG5cbiAgICByZXR1cm4gdGhlb3JlbXM7XG4gIH1cblxuICBnZXRHZW5lcmF0b3JzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGdlbmVyYXRvcnMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldEdlbmVyYXRvcnMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRvcnM7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9ycztcbiAgfVxuXG4gIGdldENvbmplY3R1cmVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbmplY3R1cmVzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0Q29uamVjdHVyZXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25qZWN0dXJlcztcblxuICAgIHJldHVybiBjb25qZWN0dXJlcztcbiAgfVxuXG4gIGdldENvbWJpbmF0b3JzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbWJpbmF0b3JzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0Q29tYmluYXRvcnMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21iaW5hdG9ycztcblxuICAgIHJldHVybiBjb21iaW5hdG9ycztcbiAgfVxuXG4gIGdldFR5cGVBbGlhc2VzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVBbGlhc2VzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0VHlwZUFsaWFzZXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlQWxpYXNlcztcblxuICAgIHJldHVybiB0eXBlQWxpYXNlcztcbiAgfVxuXG4gIGdldFR5cGVQcmVmaXhlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUsIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZVByZWZpeGVzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldFR5cGVQcmVmaXhlcyhpbmNsdWRlRGVwZW5kZW5jaWVzKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZVByZWZpeGVzO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXhlcztcbiAgfVxuXG4gIGdldENvbnN0cnVjdG9ycyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9ycztcblxuICAgIHJldHVybiBjb25zdHJ1Y3RvcnM7XG4gIH1cblxuICBnZXRQcm9jZWR1cmVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHByb2NlZHVyZXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRQcm9jZWR1cmVzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7ICAvLy9cblxuICAgIHJldHVybiBwcm9jZWR1cmVzO1xuICB9XG5cbiAgZ2V0Q2xhaW1zKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGxlbW1hcyA9IHRoaXMuZ2V0TGVtbWFzKGluY2x1ZGVSZWxlYXNlKSxcbiAgICAgICAgICBheGlvbXMgPSB0aGlzLmdldEF4aW9tcyhpbmNsdWRlUmVsZWFzZSksXG4gICAgICAgICAgdGhlb3JlbXMgPSB0aGlzLmdldFRoZW9yZW1zKGluY2x1ZGVSZWxlYXNlKSxcbiAgICAgICAgICBjb25qZWN0dXJlcyA9IHRoaXMuZ2V0Q29uamVjdHVyZXMoaW5jbHVkZVJlbGVhc2UpLFxuICAgICAgICAgIGNsYWltcyA9IFtcbiAgICAgICAgICAgIC4uLmxlbW1hcyxcbiAgICAgICAgICAgIC4uLmF4aW9tcyxcbiAgICAgICAgICAgIC4uLnRoZW9yZW1zLFxuICAgICAgICAgICAgLi4uY29uamVjdHVyZXNcbiAgICAgICAgICBdO1xuXG4gICAgcmV0dXJuIGNsYWltcztcbiAgfVxuXG4gIGdldERlY2xhcmVkVmFyaWFibGVzKGRlY2xhcmVkVmFyaWFibGVzID0gW10pIHtcbiAgICBwdXNoKGRlY2xhcmVkVmFyaWFibGVzLCB0aGlzLmRlY2xhcmVkVmFyaWFibGVzKTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlcztcbiAgfVxuXG4gIGdldERlY2xhcmVkTWV0YXZhcmlhYmxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJlZE1ldGF2YXJpYWJsZXM7XG4gIH1cblxuICBnZXRUZXJtcyh0ZXJtcyA9IFtdKSB7XG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0TGlua3MobGlua3MgPSBbXSkge1xuICAgIHJldHVybiBsaW5rcztcbiAgfVxuXG4gIGdldEZyYW1lcyhmcmFtZXMgPSBbXSkge1xuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zID0gW10pIHtcbiAgICByZXR1cm4gYXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldFN0YXRlbWVudHMoc3RhdGVtZW50cyA9IFtdKSB7XG4gICAgcmV0dXJuIHN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMgPSBbXSkge1xuICAgIHJldHVybiBwYXJhbWV0ZXJzO1xuICB9XG5cbiAgZ2V0U2lnbmF0dXJlcyhzaWduYXR1cmVzID0gW10pIHtcbiAgICByZXR1cm4gc2lnbmF0dXJlcztcbiAgfVxuXG4gIGdldFJlZmVyZW5jZXMocmVmZXJlbmNlcyA9IFtdKSB7XG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyA9IFtdKSB7XG4gICAgcmV0dXJuIGFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzID0gW10pIHtcbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRQcm9jZWR1cmVSZWZlcmVuY2VzKHByb2NlZHVyZVJlZmVyZW5jZXMgPSBbXSkge1xuICAgIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2VzO1xuICB9XG5cbiAgZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldEVxdWl2YWxlbmNlcygpIHtcbiAgICBjb25zdCBlcXVpdmFsZW5jZXMgPSBbXTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBnZXRGYWN0T3JTdWJwcm9vZnMoKSB7XG4gICAgY29uc3QgZmFjdE9yU3VicHJvb2ZzID0gW107XG5cbiAgICByZXR1cm4gZmFjdE9yU3VicHJvb2ZzO1xuICB9XG5cbiAgYWRkVHlwZSh0eXBlKSB7XG4gICAgdGhpcy50eXBlcy5wdXNoKHR5cGUpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRSdWxlKHJ1bGUpIHtcbiAgICB0aGlzLnJ1bGVzLnB1c2gocnVsZSk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBydWxlU3RyaW5nID0gcnVsZS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZEF4aW9tKGF4aW9tKSB7XG4gICAgdGhpcy5heGlvbXMucHVzaChheGlvbSk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBheGlvbVN0cmluZyA9IGF4aW9tLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20gdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRMZW1tYShsZW1tYSkge1xuICAgIHRoaXMubGVtbWFzLnB1c2gobGVtbWEpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICBsZW1tYVN0cmluZyA9IGxlbW1hLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke2xlbW1hU3RyaW5nfScgbGVtbWEgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRTY2hlbWEoc2NoZW1hKSB7XG4gICAgdGhpcy5zY2hlbWFzLnB1c2goc2NoZW1hKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIHNjaGVtYVN0cmluZyA9IHNjaGVtYS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRUaGVvcmVtKHRoZW9yZW0pIHtcbiAgICB0aGlzLnRoZW9yZW1zLnB1c2godGhlb3JlbSk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICB0aGVvcmVtU3RyaW5nID0gdGhlb3JlbS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHt0aGVvcmVtU3RyaW5nfScgdGhlb3JlbSB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZEdlbmVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICB0aGlzLmdlbmVyYXRvcnMucHVzaChnZW5lcmF0b3IpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgZ2VuZXJhdG9yU3RyaW5nID0gZ2VuZXJhdG9yLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke2dlbmVyYXRvclN0cmluZ30nIGdlbmVyYXRvciB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZENvbmplY3R1cmUoY29uamVjdHVyZSkge1xuICAgIHRoaXMuY29uamVjdHVyZXMucHVzaChjb25qZWN0dXJlKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIG9jbmplY3R1cmVTdHJpbmcgPSBjb25qZWN0dXJlLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke29jbmplY3R1cmVTdHJpbmd9JyBvY25qZWN0dXJlIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkQ29tYmluYXRvcihjb21iaW5hdG9yKSB7XG4gICAgdGhpcy5jb21iaW5hdG9ycy5wdXNoKGNvbWJpbmF0b3IpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgY29tYmluYXRvclN0cmluZyA9IGNvbWJpbmF0b3IuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7Y29tYmluYXRvclN0cmluZ30nIGNvbWJpbmF0b3IgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRUeXBlQWxpYXModHlwZUFsaWFzKSB7XG4gICAgdGhpcy50eXBlQWxpYXNlcy5wdXNoKHR5cGVBbGlhcyk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICB0eXBlQWxpYXNTdHJpbmcgPSB0eXBlQWxpYXMuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7dHlwZUFsaWFzU3RyaW5nfScgdHlwZSBhbGlhcyB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZFR5cGVQcmVmaXgodHlwZVByZWZpeCkge1xuICAgIHRoaXMudHlwZVByZWZpeGVzLnB1c2godHlwZVByZWZpeCk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICB0eXBlUHJlZml4U3RyaW5nID0gdHlwZVByZWZpeC5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHt0eXBlUHJlZml4U3RyaW5nfScgdHlwZSBwcmVmaXggdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvcikge1xuICAgIHRoaXMuY29uc3RydWN0b3JzLnB1c2goY29uc3RydWN0b3IpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSBjb25zdHJ1Y3Rvci5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkRGVjbGFyZWRWYXJpYWJsZShkZWNsYXJlZFZhcmlhYmxlKSB7XG4gICAgdGhpcy5kZWNsYXJlZFZhcmlhYmxlcy5wdXNoKGRlY2xhcmVkVmFyaWFibGUpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZVN0cmluZyA9IGRlY2xhcmVkVmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7ZGVjbGFyZWRWYXJpYWJsZVN0cmluZ30nIGRlY2xhcmVkIHZhcmlhYmxlIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkRGVjbGFyZWRNZXRhdmFyaWFibGUoZGVjbGFyZWRNZXRhdmFyaWFibGUpIHtcbiAgICB0aGlzLmRlY2xhcmVkTWV0YXZhcmlhYmxlcy5wdXNoKGRlY2xhcmVkTWV0YXZhcmlhYmxlKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlU3RyaW5nID0gZGVjbGFyZWRNZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7ZGVjbGFyZWRNZXRhdmFyaWFibGVTdHJpbmd9JyBkZWNsYXJlZCBtZXRhdmFyaWFibGUgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBmaW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5nZXRSdWxlcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlcy5maW5kKChydWxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHJ1bGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgZmluZEF4aW9tQnlMaW5rKGxpbmspIHtcbiAgICBjb25zdCBheGlvbXMgPSB0aGlzLmdldEF4aW9tcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBsaW5rLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgICBheGlvbSA9IGF4aW9tcy5maW5kKChheGlvbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBheGlvbS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGF4aW9tO1xuICB9XG5cbiAgZmluZENsYWltQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY2xhaW1zID0gdGhpcy5nZXRDbGFpbXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgICBjbGFpbSA9IGNsYWltcy5maW5kKChjbGFpbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBjbGFpbS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGNsYWltO1xuICB9XG5cbiAgZmluZGFsaWFzZWRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgbGV0IGFsaWFzZWRUeXBlID0gbnVsbDtcblxuICAgIGNvbnN0IHR5cGVBbGlhc2VzID0gdGhpcy5nZXRUeXBlQWxpYXNlcyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICB0eXBlQWxpYXNlcy5zb21lKCh0eXBlQWxpYXMpID0+IHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lQ29tcGFyZXMgPSB0eXBlQWxpYXMuY29tcGFyZVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgICAgaWYgKHR5cGVOYW1lQ29tcGFyZXMpIHtcbiAgICAgICAgYWxpYXNlZFR5cGUgPSB0eXBlQWxpYXMuZ2V0QWxpYXNlZFR5cGUoKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGFsaWFzZWRUeXBlO1xuICB9XG5cbiAgZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUsIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0aGlzLmdldFR5cGVzKGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKSxcbiAgICAgICAgICB0eXBlID0gZmluZFR5cGUodHlwZXMsICh0eXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlQ29tcGFyZXNUb1R5cGVOYW1lID0gdHlwZS5jb21wYXJlVHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICAgICAgICBpZiAodHlwZUNvbXBhcmVzVG9UeXBlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZmluZFR5cGVzQnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGxldCB0eXBlcztcblxuICAgIHR5cGVzID0gdGhpcy5nZXRUeXBlcyhpbmNsdWRlUmVsZWFzZSwgaW5jbHVkZURlcGVuZGVuY2llcyk7XG5cbiAgICB0eXBlcyA9IGZpbmRUeXBlcyh0eXBlcywgKHR5cGUpID0+IHsgIC8vL1xuICAgICAgY29uc3QgdHlwZUNvbXBhcmVzVG9UeXBlTmFtZSA9IHR5cGUuY29tcGFyZVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgICAgaWYgKHR5cGVDb21wYXJlc1RvVHlwZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cblxuICBmaW5kVHlwZUFsaWFzQnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZUFsaWFzZXMgPSB0aGlzLmdldFR5cGVBbGlhc2VzKGluY2x1ZGVSZWxlYXNlKSxcbiAgICAgICAgICB0eXBlQWxpYXMgPSB0eXBlQWxpYXNlcy5maW5kKCh0eXBlQWxpYXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVBbGlhc0NvbXBhcmVzVG9UeXBlTmFtZSA9IHR5cGVBbGlhcy5jb21wYXJlVHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICAgICAgICBpZiAodHlwZUFsaWFzQ29tcGFyZXNUb1R5cGVOYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdHlwZUFsaWFzO1xuICB9XG5cbiAgZmluZFR5cGVCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5nZXRUeXBlcyhpbmNsdWRlUmVsZWFzZSwgaW5jbHVkZURlcGVuZGVuY2llcyksXG4gICAgICAgICAgdHlwZSA9IGZpbmRUeXBlKHR5cGVzLCAodHlwZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHlwZUNvbXBhcmVzVG9QcmVmaXhlZFR5cGVOYW1lID0gdHlwZS5jb21wYXJlUHJlZml4ZWRUeXBlTmFtZShwcmVmaXhlZFR5cGVOYW1lKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVDb21wYXJlc1RvUHJlZml4ZWRUeXBlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBmaW5kVHlwZXNCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGxldCB0eXBlcztcblxuICAgIHR5cGVzID0gdGhpcy5nZXRUeXBlcyhpbmNsdWRlUmVsZWFzZSwgaW5jbHVkZURlcGVuZGVuY2llcyk7XG5cbiAgICB0eXBlcyA9IGZpbmRUeXBlcyh0eXBlcywgKHR5cGUpID0+IHsgIC8vL1xuICAgICAgY29uc3QgdHlwZUNvbXBhcmVzVG9UeXBlTmFtZSA9IHR5cGUuY29tcGFyZVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSk7XG5cbiAgICAgIGlmICh0eXBlQ29tcGFyZXNUb1R5cGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHR5cGVzO1xuICB9XG5cbiAgZmluZFR5cGVQcmVmaXhCeVR5cGVQcmVmaXhOYW1lKHR5cGVQcmVmaXhOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUsIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZVByZWZpeGVzID0gdGhpcy5nZXRUeXBlUHJlZml4ZXMoaW5jbHVkZVJlbGVhc2UsIGluY2x1ZGVEZXBlbmRlbmNpZXMpLFxuICAgICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4ZXMuZmluZCgodHlwZVByZWZpeCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHlwZVByZWZpeENvbXBhcmVzVG9UeXBlUHJlZml4TmFtZSA9IHR5cGVQcmVmaXguY29tcGFyZVR5cGVQcmVmaXhOYW1lKHR5cGVQcmVmaXhOYW1lKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVQcmVmaXhDb21wYXJlc1RvVHlwZVByZWZpeE5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB0eXBlUHJlZml4O1xuICB9XG5cbiAgZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcihWYXJpYWJsZUlkZW50aXRpZmVyKSB7XG4gICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZXMgPSB0aGlzLmdldERlY2xhcmVkVmFyaWFibGVzKCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZSA9IGRlY2xhcmVkVmFyaWFibGVzLmZpbmQoKGRlY2xhcmVkVmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGl0aWZlciA9IGRlY2xhcmVkVmFyaWFibGUuY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllcihWYXJpYWJsZUlkZW50aXRpZmVyKTtcblxuICAgICAgICAgICAgaWYgKGRlY2xhcmVkVmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGl0aWZlcikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGU7XG4gIH1cblxuICBmaW5kRGVjbGFyZWRWYXJpYWJsZXNCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICBsZXQgZGVjbGFyZWRWYXJpYWJsZXM7XG5cbiAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IHRoaXMuZ2V0RGVjbGFyZWRWYXJpYWJsZXMoKTtcblxuICAgIGRlY2xhcmVkVmFyaWFibGVzID0gZGVjbGFyZWRWYXJpYWJsZXMuZmlsdGVyKChkZWNsYXJlZFZhcmlhYmxlKSA9PiB7XG4gICAgICBjb25zdCB2YXJpYWJsZUNvbXBhcmVzVG9WYXJpYWJsZUlkZW50aWZpZXIgPSBkZWNsYXJlZFZhcmlhYmxlLmNvbXBhcmVWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlcztcbiAgfVxuXG4gIGZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gdGhpcy5nZXREZWNsYXJlZE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZSA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlcy5maW5kKChkZWNsYXJlZE1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVjbGFyZWRNZXRhdmFyaWFibGVDb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlLmNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoZGVjbGFyZWRNZXRhdmFyaWFibGVDb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkTWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZmluZFByb2NlZHVyZUJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKSB7XG4gICAgY29uc3QgcHJvY2VkdXJlcyA9IHRoaXMuZ2V0UHJvY2VkdXJlcygpLFxuICAgICAgICAgIHByb2NlZHVyZSA9IHByb2NlZHVyZXMuZmluZCgocHJvY2VkdXJlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9jZWR1cmVDb21wYXJlc1RvUHJvY2VkdXJlTmFtZSA9IHByb2NlZHVyZS5jb21wYXJlUHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKTtcblxuICAgICAgICAgICAgaWYgKHByb2NlZHVyZUNvbXBhcmVzVG9Qcm9jZWR1cmVOYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlO1xuICB9XG5cbiAgZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKSB7IHJldHVybiBmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpOyB9XG5cbiAgaXNMYWJlbFByZXNlbnRCeUxhYmVsTm9kZShsYWJlbE5vZGUpIHtcbiAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmdldExhYmVscygpLFxuICAgICAgICAgIGxhYmVsUHJlc2VudCA9IGxhYmVscy5zb21lKChsYWJlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFiZWxOb2RlTWF0Y2hlcyA9IGxhYmVsLm1hdGNoTGFiZWxOb2RlKGxhYmVsTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChsYWJlbE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGxhYmVsUHJlc2VudDtcbiAgfVxuXG4gIGlzVHlwZVByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUsIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSwgaW5jbHVkZURlcGVuZGVuY2llcyksXG4gICAgICAgICAgdHlwZVByZXNlbnQgPSAodHlwZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdHlwZVByZXNlbnQ7XG4gIH1cblxuICBpc1R5cGVBbGlhc1ByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlQWxpYXMgPSB0aGlzLmZpbmRUeXBlQWxpYXNCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSksXG4gICAgICAgICAgdHlwZUFsaXNQcmVzZW50ID0gKHR5cGVBbGlhcyAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdHlwZUFsaXNQcmVzZW50O1xuICB9XG5cbiAgaXNUeXBlUHJlc2VudEJ5UHJlZml4ZWRUeXBlTmFtZShwcmVmaXhlZFR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUsIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZmluZFR5cGVCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UsIGluY2x1ZGVEZXBlbmRlbmNpZXMpLFxuICAgICAgICAgIHR5cGVQcmVzZW50ID0gKHR5cGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVzZW50O1xuICB9XG5cbiAgaXNUeXBlUHJlZml4UHJlc2VudEJ5VHlwZVByZWZpeE5hbWUodHlwZVByZWZpeE5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVQcmVmaXggPSB0aGlzLmZpbmRUeXBlUHJlZml4QnlUeXBlUHJlZml4TmFtZSh0eXBlUHJlZml4TmFtZSwgaW5jbHVkZVJlbGVhc2UpLFxuICAgICAgICAgIHR5cGVQcmVmaXhQcmVzZW50ID0gKHR5cGVQcmVmaXggIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXhQcmVzZW50O1xuICB9XG5cbiAgaXNEZWNsYXJlZFZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGUgPSB0aGlzLmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlUHJlc2VudCA9IChkZWNsYXJlZFZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGlzRGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBkZWNsYXJlZE1ldGF2YXJpYWJsZSA9IHRoaXMuZmluZERlY2xhcmVkTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlUHJlc2VudCA9IChkZWNsYXJlZE1ldGF2YXJpYWJsZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgaXNQcm9jZWR1cmVQcmVzZW50QnlQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpIHtcbiAgICBjb25zdCBwcm9jZWR1cmUgPSB0aGlzLmZpbmRQcm9jZWR1cmVCeVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSksXG4gICAgICAgICAgcHJvY2VkdXJlUHJlc2VudCA9IChwcm9jZWR1cmUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHByb2NlZHVyZVByZXNlbnQ7XG4gIH1cblxuICBpc01ldGFMZXZlbCgpIHtcbiAgICBjb25zdCBtZXRhTEV2ZWwgPSBmYWxzZTtcblxuICAgIHJldHVybiBtZXRhTEV2ZWw7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLnR5cGVzID0gW107XG4gICAgdGhpcy5ydWxlcyA9IFtdO1xuICAgIHRoaXMuYXhpb21zID0gW107XG4gICAgdGhpcy5sZW1tYXMgPSBbXTtcbiAgICB0aGlzLnNjaGVtYXMgPSBbXTtcbiAgICB0aGlzLnRoZW9yZW1zID0gW107XG4gICAgdGhpcy5nZW5lcmF0b3JzID0gW107XG4gICAgdGhpcy5jb25qZWN0dXJlcyA9IFtdO1xuICAgIHRoaXMuY29tYmluYXRvcnMgPSBbXTtcbiAgICB0aGlzLnR5cGVBbGlhc2VzID0gW107XG4gICAgdGhpcy50eXBlUHJlZml4ZXMgPSBbXTtcbiAgICB0aGlzLmNvbnN0cnVjdG9ycyA9IFtdO1xuICAgIHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMgPSBbXTtcbiAgICB0aGlzLmRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IFtdO1xuICB9XG5cbiAgY29tcGxldGUoKSB7XG4gICAgLy8vXG4gIH1cblxuICB2ZXJpZnlGaWxlKGZvcndhcmQsIGJhY2spIHtcbiAgICByZXR1cm4gaXNvbGF0ZSgoZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgICAgZmlsZU5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICAgIHJldHVybiB2ZXJpZnlGaWxlKGZpbGVOb2RlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKTtcbiAgICB9LCBmb3J3YXJkLCBiYWNrKTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgY29uc3QganNvbiA9IHRoaXMuZ2V0SlNPTigpO1xuXG4gICAgaWYgKGpzb24gPT09IG51bGwpIHtcbiAgICAgIHN1cGVyLmluaXRpYWxpc2UoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVDb250ZXh0ID0gdGhpczsgLy8vXG5cbiAgICB0aGlzLnR5cGVzID0gW107XG5cbiAgICB0eXBlc0Zyb21KU09OKGpzb24sIHRoaXMudHlwZXMsIGZpbGVDb250ZXh0KTtcblxuICAgIHRoaXMubGVtbWFzID0gbGVtbWFzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICAgIHRoaXMudHlwZUFsaWFzZXMgPSB0eXBlQWxpYXNlc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLnR5cGVQcmVmaXhlcyA9IHR5cGVQcmVmaXhlc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcblxuICAgIHRoaXMuZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gZGVjbGFyZWRNZXRhdmFyaWFibGVzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICAgIHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMgPSBkZWNsYXJlZFZhcmlhYmxlc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLmdlbmVyYXRvcnMgPSBnZW5lcmF0b3JzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICAgIHRoaXMuY29tYmluYXRvcnMgPSBjb21iaW5hdG9yc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLmNvbnN0cnVjdG9ycyA9IGNvbnN0cnVjdG9yc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcblxuICAgIHRoaXMucnVsZXMgPSBydWxlc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLmF4aW9tcyA9IGF4aW9tc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLnNjaGVtYXMgPSBzY2hlbWFzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICAgIHRoaXMudGhlb3JlbXMgPSB0aGVvcmVtc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLmNvbmplY3R1cmVzID0gY29uamVjdHVyZXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCB0eXBlc0pTT04gPSB0eXBlc1RvVHlwZXNKU09OKHRoaXMudHlwZXMpLFxuICAgICAgICAgIHJ1bGVzSlNPTiA9IHJ1bGVzVG9SdWxlc0pTT04odGhpcy5ydWxlcyksXG4gICAgICAgICAgbGVtbWFzSlNPTiA9IGxlbW1hc1RvTGVtbWFzSlNPTih0aGlzLmxlbW1hcyksXG4gICAgICAgICAgYXhpb21zSlNPTiA9IGF4aW9tc1RvQXhpb21zSlNPTih0aGlzLmF4aW9tcyksXG4gICAgICAgICAgc2NoZW1hc0pTT04gPSBzY2hlbWFzVG9TY2hlbWFzSlNPTih0aGlzLnNjaGVtYXMpLFxuICAgICAgICAgIHRoZW9yZW1zSlNPTiA9IHRoZW9yZW1zVG9UaGVvcmVtc0pTT04odGhpcy50aGVvcmVtcyksXG4gICAgICAgICAgZ2VuZXJhdG9yc0pTT04gPSBnZW5lcmF0b3JzVG9HZW5lcmF0b3JzSlNPTih0aGlzLmdlbmVyYXRvcnMpLFxuICAgICAgICAgIGNvbmplY3R1cmVzSlNPTiA9IGNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04odGhpcy5jb25qZWN0dXJlcyksXG4gICAgICAgICAgY29tYmluYXRvcnNKU09OID0gY29tYmluYXRvcnNUb0NvbWJpbmF0b3JzSlNPTih0aGlzLmNvbWJpbmF0b3JzKSxcbiAgICAgICAgICB0eXBlQWxpYXNlc0pTT04gPSB0eXBlQWxpYXNlc1RvVHlwZUFsaWFzZXNKU09OKHRoaXMudHlwZUFsaWFzZXMpLFxuICAgICAgICAgIHR5cGVQcmVmaXhlc0pTT04gPSB0eXBlUHJlZml4ZXNUb1R5cGVQcmVmaXhlc0pTT04odGhpcy50eXBlUHJlZml4ZXMpLFxuICAgICAgICAgIGNvbnN0cnVjdG9yc0pTT04gPSBjb25zdHJ1Y3RvcnNUb0NvbnN0cnVjdG9yc0pTT04odGhpcy5jb25zdHJ1Y3RvcnMpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzSlNPTiA9IGRlY2xhcmVkVmFyaWFibGVzVG9EZWNsYXJlZFZhcmlhYmxlc0pTT04odGhpcy5kZWNsYXJlZFZhcmlhYmxlcyksXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlc1RvRGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTih0aGlzLmRlY2xhcmVkTWV0YXZhcmlhYmxlcyksXG4gICAgICAgICAgZmlsZUNvbnRlbnQgPSB0aGlzLmdldEZpbGVDb250ZW50KCksXG4gICAgICAgICAgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgdHlwZXMgPSB0eXBlc0pTT04sICAvLy9cbiAgICAgICAgICBydWxlcyA9IHJ1bGVzSlNPTiwgIC8vL1xuICAgICAgICAgIGxlbW1hcyA9IGxlbW1hc0pTT04sICAvLy9cbiAgICAgICAgICBheGlvbXMgPSBheGlvbXNKU09OLCAgLy8vXG4gICAgICAgICAgc2NoZW1hcyA9IHNjaGVtYXNKU09OLCAgLy8vXG4gICAgICAgICAgdGhlb3JlbXMgPSB0aGVvcmVtc0pTT04sICAvLy9cbiAgICAgICAgICBnZW5lcmF0b3JzID0gZ2VuZXJhdG9yc0pTT04sICAvLy9cbiAgICAgICAgICBjb25qZWN0dXJlcyA9IGNvbmplY3R1cmVzSlNPTiwgIC8vL1xuICAgICAgICAgIGNvbWJpbmF0b3JzID0gY29tYmluYXRvcnNKU09OLCAgLy8vXG4gICAgICAgICAgdHlwZUFsaWFzZXMgPSB0eXBlQWxpYXNlc0pTT04sICAvLy9cbiAgICAgICAgICB0eXBlUHJlZml4ZXMgPSB0eXBlUHJlZml4ZXNKU09OLCAgLy8vXG4gICAgICAgICAgY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzSlNPTiwgIC8vL1xuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzID0gZGVjbGFyZWRWYXJpYWJsZXNKU09OLCAgLy8vXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTjsgIC8vL1xuXG4gICAganNvbiA9IHtcbiAgICAgIGZpbGVDb250ZW50LFxuICAgICAgZmlsZVBhdGgsXG4gICAgICB0eXBlcyxcbiAgICAgIHJ1bGVzLFxuICAgICAgbGVtbWFzLFxuICAgICAgYXhpb21zLFxuICAgICAgc2NoZW1hcyxcbiAgICAgIHRoZW9yZW1zLFxuICAgICAgZ2VuZXJhdG9ycyxcbiAgICAgIGNvbmplY3R1cmVzLFxuICAgICAgY29tYmluYXRvcnMsXG4gICAgICB0eXBlQWxpYXNlcyxcbiAgICAgIHR5cGVQcmVmaXhlcyxcbiAgICAgIGNvbnN0cnVjdG9ycyxcbiAgICAgIGRlY2xhcmVkVmFyaWFibGVzLFxuICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21GaWxlKGZpbGUsIGNvbnRleHQpIHtcbiAgICBjb25zdCByZWxlYXNlQ29udGV4dCA9IGNvbnRleHQsIC8vL1xuICAgICAgICAgIGNvbWJpbmVkQ3VzdG9tR3JhbW1hciA9IHJlbGVhc2VDb250ZXh0LmdldENvbWJpbmVkQ3VzdG9tR3JhbW1hcigpLFxuICAgICAgICAgIG5vbWluYWxMZXhlciA9IG5vbWluYWxMZXhlckZyb21Db21iaW5lZEN1c3RvbUdyYW1tYXIoTm9taW5hbExleGVyLCBjb21iaW5lZEN1c3RvbUdyYW1tYXIpLFxuICAgICAgICAgIG5vbWluYWxQYXJzZXIgPSBub21pbmFsUGFyc2VyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hcihOb21pbmFsUGFyc2VyLCBjb21iaW5lZEN1c3RvbUdyYW1tYXIpLFxuICAgICAgICAgIGxleGVyID0gbm9taW5hbExleGVyLCAvLy9cbiAgICAgICAgICBwYXJzZXIgPSBub21pbmFsUGFyc2VyLCAvLy9cbiAgICAgICAgICB0eXBlcyA9IFtdLFxuICAgICAgICAgIHJ1bGVzID0gW10sXG4gICAgICAgICAgYXhpb21zID0gW10sXG4gICAgICAgICAgbGVtbWFzID0gW10sXG4gICAgICAgICAgc2NoZW1hcyA9IFtdLFxuICAgICAgICAgIHRoZW9yZW1zID0gW10sXG4gICAgICAgICAgZ2VuZXJhdG9ycyA9IFtdLFxuICAgICAgICAgIGNvbmplY3R1cmVzID0gW10sXG4gICAgICAgICAgY29tYmluYXRvcnMgPSBbXSxcbiAgICAgICAgICB0eXBlQWxpYXNlcyA9IFtdLFxuICAgICAgICAgIHR5cGVQcmVmaXhlcyA9IFtdLFxuICAgICAgICAgIGNvbnN0cnVjdG9ycyA9IFtdLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzID0gW10sXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgbm9taW5hbEZpbGVDb250ZXh0ID0gRmlsZUNvbnRleHQuZnJvbUZpbGUoTm9taW5hbEZpbGVDb250ZXh0LCBmaWxlLCBsZXhlciwgcGFyc2VyLCB0eXBlcywgcnVsZXMsIGF4aW9tcywgbGVtbWFzLCBzY2hlbWFzLCB0aGVvcmVtcywgZ2VuZXJhdG9ycywgY29uamVjdHVyZXMsIGNvbWJpbmF0b3JzLCB0eXBlQWxpYXNlcywgdHlwZVByZWZpeGVzLCBjb25zdHJ1Y3RvcnMsIGRlY2xhcmVkVmFyaWFibGVzLCBkZWNsYXJlZE1ldGF2YXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG5vbWluYWxGaWxlQ29udGV4dDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgcmVsZWFzZUNvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICBjb21iaW5lZEN1c3RvbUdyYW1tYXIgPSByZWxlYXNlQ29udGV4dC5nZXRDb21iaW5lZEN1c3RvbUdyYW1tYXIoKSxcbiAgICAgICAgICBub21pbmFsTGV4ZXIgPSBub21pbmFsTGV4ZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyKE5vbWluYWxMZXhlciwgY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgICBub21pbmFsUGFyc2VyID0gbm9taW5hbFBhcnNlckZyb21Db21iaW5lZEN1c3RvbUdyYW1tYXIoTm9taW5hbFBhcnNlciwgY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgICBsZXhlciA9IG5vbWluYWxMZXhlciwgLy8vXG4gICAgICAgICAgcGFyc2VyID0gbm9taW5hbFBhcnNlciwgLy8vXG4gICAgICAgICAgdHlwZXMgPSBudWxsLFxuICAgICAgICAgIHJ1bGVzID0gbnVsbCxcbiAgICAgICAgICBheGlvbXMgPSBudWxsLFxuICAgICAgICAgIGxlbW1hcyA9IG51bGwsXG4gICAgICAgICAgc2NoZW1hcyA9IG51bGwsXG4gICAgICAgICAgdGhlb3JlbXMgPSBudWxsLFxuICAgICAgICAgIGdlbmVyYXRvcnMgPSBudWxsLFxuICAgICAgICAgIGNvbmplY3R1cmVzID0gbnVsbCxcbiAgICAgICAgICBjb21iaW5hdG9ycyA9IG51bGwsXG4gICAgICAgICAgdHlwZUFsaWFzZXMgPSBudWxsLFxuICAgICAgICAgIHR5cGVQcmVmaXhlcyA9IG51bGwsXG4gICAgICAgICAgY29uc3RydWN0b3JzID0gbnVsbCxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IG51bGwsXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gbnVsbCxcbiAgICAgICAgICBub21pbmFsRmlsZUNvbnRleHQgPSBGaWxlQ29udGV4dC5mcm9tSlNPTihOb21pbmFsRmlsZUNvbnRleHQsIGpzb24sIGxleGVyLCBwYXJzZXIsIHR5cGVzLCBydWxlcywgYXhpb21zLCBsZW1tYXMsIHNjaGVtYXMsIHRoZW9yZW1zLCBnZW5lcmF0b3JzLCBjb25qZWN0dXJlcywgY29tYmluYXRvcnMsIHR5cGVBbGlhc2VzLCB0eXBlUHJlZml4ZXMsIGNvbnN0cnVjdG9ycywgZGVjbGFyZWRWYXJpYWJsZXMsIGRlY2xhcmVkTWV0YXZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbm9taW5hbEZpbGVDb250ZXh0O1xuICB9XG59XG4iXSwibmFtZXMiOlsiTm9taW5hbEZpbGVDb250ZXh0IiwicHVzaCIsImFycmF5VXRpbGl0aWVzIiwibm9taW5hbExleGVyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hciIsIm5vbWluYWxQYXJzZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyIiwibm9taW5hbFV0aWxpdGllcyIsIkZpbGVDb250ZXh0IiwiY29udGV4dCIsImZpbGVDb250ZW50IiwiZmlsZVBhdGgiLCJ0b2tlbnMiLCJub2RlIiwianNvbiIsImxleGVyIiwicGFyc2VyIiwidHlwZXMiLCJydWxlcyIsImF4aW9tcyIsImxlbW1hcyIsInNjaGVtYXMiLCJ0aGVvcmVtcyIsImdlbmVyYXRvcnMiLCJjb25qZWN0dXJlcyIsImNvbWJpbmF0b3JzIiwidHlwZUFsaWFzZXMiLCJ0eXBlUHJlZml4ZXMiLCJjb25zdHJ1Y3RvcnMiLCJkZWNsYXJlZFZhcmlhYmxlcyIsImRlY2xhcmVkTWV0YXZhcmlhYmxlcyIsImdldExleGVyIiwiZ2V0UGFyc2VyIiwiZ2V0TGFiZWxzIiwiaW5jbHVkZVJlbGVhc2UiLCJsYWJlbHMiLCJyZWxlYXNlQ29udGV4dExhYmVscyIsImZvckVhY2giLCJydWxlIiwicnVsZUxhYmVscyIsImF4aW9tIiwiYXhpb21MYWJlbHMiLCJsZW1tYSIsImxlbW1hTGFiZWxzIiwidGhlb3JlbSIsInRoZW9yZW1MYWJlbHMiLCJjb25qZWN0dXJlIiwiY29uamVjdHVyZUxhYmVscyIsInNjaGVtYSIsInNjaGVtYUxhYmVsIiwiZ2V0TGFiZWwiLCJnZXRUeXBlcyIsImluY2x1ZGVEZXBlbmRlbmNpZXMiLCJnZXRSdWxlcyIsImdldEF4aW9tcyIsImdldExlbW1hcyIsImdldFNjaGVtYXMiLCJnZXRUaGVvcmVtcyIsImdldEdlbmVyYXRvcnMiLCJnZXRDb25qZWN0dXJlcyIsImdldENvbWJpbmF0b3JzIiwiZ2V0VHlwZUFsaWFzZXMiLCJnZXRUeXBlUHJlZml4ZXMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJnZXRQcm9jZWR1cmVzIiwicHJvY2VkdXJlcyIsImdldENsYWltcyIsImNsYWltcyIsImdldERlY2xhcmVkVmFyaWFibGVzIiwiZ2V0RGVjbGFyZWRNZXRhdmFyaWFibGVzIiwiZ2V0VGVybXMiLCJ0ZXJtcyIsImdldExpbmtzIiwibGlua3MiLCJnZXRGcmFtZXMiLCJmcmFtZXMiLCJnZXRFcXVhbGl0aWVzIiwiZXF1YWxpdGllcyIsImdldEFzc2VydGlvbnMiLCJhc3NlcnRpb25zIiwiZ2V0U3RhdGVtZW50cyIsInN0YXRlbWVudHMiLCJnZXRQYXJhbWV0ZXJzIiwicGFyYW1ldGVycyIsImdldFNpZ25hdHVyZXMiLCJzaWduYXR1cmVzIiwiZ2V0UmVmZXJlbmNlcyIsInJlZmVyZW5jZXMiLCJnZXRBc3N1bXB0aW9ucyIsImFzc3VtcHRpb25zIiwiZ2V0TWV0YXZhcmlhYmxlcyIsIm1ldGF2YXJpYWJsZXMiLCJnZXRTdWJzdGl0dXRpb25zIiwic3Vic3RpdHV0aW9ucyIsImdldFByb2NlZHVyZVJlZmVyZW5jZXMiLCJwcm9jZWR1cmVSZWZlcmVuY2VzIiwiZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJkZXJpdmVkU3Vic3RpdHV0aW9ucyIsImdldEVxdWl2YWxlbmNlcyIsImVxdWl2YWxlbmNlcyIsImdldEZhY3RPclN1YnByb29mcyIsImZhY3RPclN1YnByb29mcyIsImFkZFR5cGUiLCJ0eXBlIiwiZ2V0RmlsZVBhdGgiLCJ0eXBlU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJhZGRSdWxlIiwicnVsZVN0cmluZyIsImFkZEF4aW9tIiwiYXhpb21TdHJpbmciLCJhZGRMZW1tYSIsImxlbW1hU3RyaW5nIiwiYWRkU2NoZW1hIiwic2NoZW1hU3RyaW5nIiwiYWRkVGhlb3JlbSIsInRoZW9yZW1TdHJpbmciLCJhZGRHZW5lcmF0b3IiLCJnZW5lcmF0b3IiLCJnZW5lcmF0b3JTdHJpbmciLCJhZGRDb25qZWN0dXJlIiwib2NuamVjdHVyZVN0cmluZyIsImFkZENvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiY29tYmluYXRvclN0cmluZyIsImFkZFR5cGVBbGlhcyIsInR5cGVBbGlhcyIsInR5cGVBbGlhc1N0cmluZyIsImFkZFR5cGVQcmVmaXgiLCJ0eXBlUHJlZml4IiwidHlwZVByZWZpeFN0cmluZyIsImFkZENvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvclN0cmluZyIsImFkZERlY2xhcmVkVmFyaWFibGUiLCJkZWNsYXJlZFZhcmlhYmxlIiwiZGVjbGFyZWRWYXJpYWJsZVN0cmluZyIsImFkZERlY2xhcmVkTWV0YXZhcmlhYmxlIiwiZGVjbGFyZWRNZXRhdmFyaWFibGUiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZVN0cmluZyIsImZpbmRSdWxlQnlSZWZlcmVuY2UiLCJyZWZlcmVuY2UiLCJtZXRhdmFyaWFibGVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImZpbmQiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImZpbmRBeGlvbUJ5TGluayIsImxpbmsiLCJmaW5kQ2xhaW1CeVJlZmVyZW5jZSIsImNsYWltIiwiZmluZGFsaWFzZWRUeXBlQnlUeXBlTmFtZSIsInR5cGVOYW1lIiwiYWxpYXNlZFR5cGUiLCJzb21lIiwidHlwZU5hbWVDb21wYXJlcyIsImNvbXBhcmVUeXBlTmFtZSIsImdldEFsaWFzZWRUeXBlIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwiZmluZFR5cGUiLCJ0eXBlQ29tcGFyZXNUb1R5cGVOYW1lIiwiZmluZFR5cGVzQnlUeXBlTmFtZSIsImZpbmRUeXBlcyIsImZpbmRUeXBlQWxpYXNCeVR5cGVOYW1lIiwidHlwZUFsaWFzQ29tcGFyZXNUb1R5cGVOYW1lIiwiZmluZFR5cGVCeVByZWZpeGVkVHlwZU5hbWUiLCJwcmVmaXhlZFR5cGVOYW1lIiwidHlwZUNvbXBhcmVzVG9QcmVmaXhlZFR5cGVOYW1lIiwiY29tcGFyZVByZWZpeGVkVHlwZU5hbWUiLCJmaW5kVHlwZXNCeVByZWZpeGVkVHlwZU5hbWUiLCJmaW5kVHlwZVByZWZpeEJ5VHlwZVByZWZpeE5hbWUiLCJ0eXBlUHJlZml4TmFtZSIsInR5cGVQcmVmaXhDb21wYXJlc1RvVHlwZVByZWZpeE5hbWUiLCJjb21wYXJlVHlwZVByZWZpeE5hbWUiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwiVmFyaWFibGVJZGVudGl0aWZlciIsImRlY2xhcmVkVmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGl0aWZlciIsImNvbXBhcmVWYXJpYWJsZUlkZW50aWZpZXIiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZXNCeVZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlSWRlbnRpZmllciIsImZpbHRlciIsInZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllciIsImZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZUNvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lIiwiY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUiLCJmaW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlTmFtZSIsInByb2NlZHVyZSIsInByb2NlZHVyZUNvbXBhcmVzVG9Qcm9jZWR1cmVOYW1lIiwiY29tcGFyZVByb2NlZHVyZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlTmFtZSIsImlzTGFiZWxQcmVzZW50QnlMYWJlbE5vZGUiLCJsYWJlbE5vZGUiLCJsYWJlbFByZXNlbnQiLCJsYWJlbCIsImxhYmVsTm9kZU1hdGNoZXMiLCJtYXRjaExhYmVsTm9kZSIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwidHlwZVByZXNlbnQiLCJpc1R5cGVBbGlhc1ByZXNlbnRCeVR5cGVOYW1lIiwidHlwZUFsaXNQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5UHJlZml4ZWRUeXBlTmFtZSIsImlzVHlwZVByZWZpeFByZXNlbnRCeVR5cGVQcmVmaXhOYW1lIiwidHlwZVByZWZpeFByZXNlbnQiLCJpc0RlY2xhcmVkVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZUlkZW50aWZpZXIiLCJkZWNsYXJlZFZhcmlhYmxlUHJlc2VudCIsImlzRGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50IiwiaXNQcm9jZWR1cmVQcmVzZW50QnlQcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlUHJlc2VudCIsImlzTWV0YUxldmVsIiwibWV0YUxFdmVsIiwiY2xlYXIiLCJjb21wbGV0ZSIsInZlcmlmeUZpbGUiLCJmb3J3YXJkIiwiYmFjayIsImlzb2xhdGUiLCJnZXROb2RlIiwiZmlsZU5vZGUiLCJpbml0aWFsaXNlIiwiZ2V0SlNPTiIsImZpbGVDb250ZXh0IiwidHlwZXNGcm9tSlNPTiIsImxlbW1hc0Zyb21KU09OIiwidHlwZUFsaWFzZXNGcm9tSlNPTiIsInR5cGVQcmVmaXhlc0Zyb21KU09OIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVzRnJvbUpTT04iLCJkZWNsYXJlZFZhcmlhYmxlc0Zyb21KU09OIiwiZ2VuZXJhdG9yc0Zyb21KU09OIiwiY29tYmluYXRvcnNGcm9tSlNPTiIsImNvbnN0cnVjdG9yc0Zyb21KU09OIiwicnVsZXNGcm9tSlNPTiIsImF4aW9tc0Zyb21KU09OIiwic2NoZW1hc0Zyb21KU09OIiwidGhlb3JlbXNGcm9tSlNPTiIsImNvbmplY3R1cmVzRnJvbUpTT04iLCJ0b0pTT04iLCJ0eXBlc0pTT04iLCJ0eXBlc1RvVHlwZXNKU09OIiwicnVsZXNKU09OIiwicnVsZXNUb1J1bGVzSlNPTiIsImxlbW1hc0pTT04iLCJsZW1tYXNUb0xlbW1hc0pTT04iLCJheGlvbXNKU09OIiwiYXhpb21zVG9BeGlvbXNKU09OIiwic2NoZW1hc0pTT04iLCJzY2hlbWFzVG9TY2hlbWFzSlNPTiIsInRoZW9yZW1zSlNPTiIsInRoZW9yZW1zVG9UaGVvcmVtc0pTT04iLCJnZW5lcmF0b3JzSlNPTiIsImdlbmVyYXRvcnNUb0dlbmVyYXRvcnNKU09OIiwiY29uamVjdHVyZXNKU09OIiwiY29uamVjdHVyZXNUb0NvbmplY3R1cmVzSlNPTiIsImNvbWJpbmF0b3JzSlNPTiIsImNvbWJpbmF0b3JzVG9Db21iaW5hdG9yc0pTT04iLCJ0eXBlQWxpYXNlc0pTT04iLCJ0eXBlQWxpYXNlc1RvVHlwZUFsaWFzZXNKU09OIiwidHlwZVByZWZpeGVzSlNPTiIsInR5cGVQcmVmaXhlc1RvVHlwZVByZWZpeGVzSlNPTiIsImNvbnN0cnVjdG9yc0pTT04iLCJjb25zdHJ1Y3RvcnNUb0NvbnN0cnVjdG9yc0pTT04iLCJkZWNsYXJlZFZhcmlhYmxlc0pTT04iLCJkZWNsYXJlZFZhcmlhYmxlc1RvRGVjbGFyZWRWYXJpYWJsZXNKU09OIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiIsImRlY2xhcmVkTWV0YXZhcmlhYmxlc1RvRGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiIsImdldEZpbGVDb250ZW50IiwiZnJvbUZpbGUiLCJmaWxlIiwicmVsZWFzZUNvbnRleHQiLCJjb21iaW5lZEN1c3RvbUdyYW1tYXIiLCJnZXRDb21iaW5lZEN1c3RvbUdyYW1tYXIiLCJub21pbmFsTGV4ZXIiLCJOb21pbmFsTGV4ZXIiLCJub21pbmFsUGFyc2VyIiwiTm9taW5hbFBhcnNlciIsIm5vbWluYWxGaWxlQ29udGV4dCIsImZyb21KU09OIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkE0Q0E7OztlQUFxQkE7OzsyQkExQ1U7Z0NBQ2U7OERBRXJCOytEQUNDO3lCQUVGO3dCQUNHO3NCQUNTOzJCQUNPO3NCQTRCc0I7Ozs7OztBQUVqRSxNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHQyx5QkFBYyxFQUN6QixFQUFFQyxxQ0FBcUMsRUFBRUMsc0NBQXNDLEVBQUUsR0FB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
538
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0L2ZpbGUvbm9taW5hbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBGaWxlQ29udGV4dCwgbm9taW5hbFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IE5vbWluYWxMZXhlciBmcm9tIFwiLi4vLi4vbm9taW5hbC9sZXhlclwiO1xuaW1wb3J0IE5vbWluYWxQYXJzZXIgZnJvbSBcIi4uLy4uL25vbWluYWwvcGFyc2VyXCI7XG5cbmltcG9ydCB7IGlzb2xhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHZlcmlmeUZpbGUgfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy92ZXJpZnlcIjtcbmltcG9ydCB7IGZpbmRUeXBlLCBmaW5kVHlwZXMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3R5cGVcIjtcbmltcG9ydCB7IGZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIH0gZnJvbSBcIi4uLy4uL21ldGFUeXBlc1wiO1xuaW1wb3J0IHsgdHlwZXNGcm9tSlNPTixcbiAgICAgICAgIHJ1bGVzRnJvbUpTT04sXG4gICAgICAgICBsZW1tYXNGcm9tSlNPTixcbiAgICAgICAgIGF4aW9tc0Zyb21KU09OLFxuICAgICAgICAgc2NoZW1hc0Zyb21KU09OLFxuICAgICAgICAgdHlwZXNUb1R5cGVzSlNPTixcbiAgICAgICAgIHRoZW9yZW1zRnJvbUpTT04sXG4gICAgICAgICBydWxlc1RvUnVsZXNKU09OLFxuICAgICAgICAgbGVtbWFzVG9MZW1tYXNKU09OLFxuICAgICAgICAgYXhpb21zVG9BeGlvbXNKU09OLFxuICAgICAgICAgZ2VuZXJhdG9yc0Zyb21KU09OLFxuICAgICAgICAgY29uamVjdHVyZXNGcm9tSlNPTixcbiAgICAgICAgIGNvbWJpbmF0b3JzRnJvbUpTT04sXG4gICAgICAgICB0eXBlQWxpYXNlc0Zyb21KU09OLFxuICAgICAgICAgdHlwZVByZWZpeGVzRnJvbUpTT04sXG4gICAgICAgICBjb25zdHJ1Y3RvcnNGcm9tSlNPTixcbiAgICAgICAgIHNjaGVtYXNUb1NjaGVtYXNKU09OLFxuICAgICAgICAgdGhlb3JlbXNUb1RoZW9yZW1zSlNPTixcbiAgICAgICAgIHR5cGVQcm9wZXJ0aWVzRnJvbUpTT04sXG4gICAgICAgICBkZWNsYXJlZFZhcmlhYmxlc0Zyb21KU09OLFxuICAgICAgICAgZ2VuZXJhdG9yc1RvR2VuZXJhdG9yc0pTT04sXG4gICAgICAgICBjb25qZWN0dXJlc1RvQ29uamVjdHVyZXNKU09OLFxuICAgICAgICAgY29tYmluYXRvcnNUb0NvbWJpbmF0b3JzSlNPTixcbiAgICAgICAgIHR5cGVBbGlhc2VzVG9UeXBlQWxpYXNlc0pTT04sXG4gICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZXNGcm9tSlNPTixcbiAgICAgICAgIHR5cGVQcmVmaXhlc1RvVHlwZVByZWZpeGVzSlNPTixcbiAgICAgICAgIGNvbnN0cnVjdG9yc1RvQ29uc3RydWN0b3JzSlNPTixcbiAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzVG9EZWNsYXJlZFZhcmlhYmxlc0pTT04sXG4gICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZXNUb0RlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04gfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuY29uc3QgeyBwdXNoIH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgbm9taW5hbExleGVyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hciwgbm9taW5hbFBhcnNlckZyb21Db21iaW5lZEN1c3RvbUdyYW1tYXIgfSA9IG5vbWluYWxVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vbWluYWxGaWxlQ29udGV4dCBleHRlbmRzIEZpbGVDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgZmlsZUNvbnRlbnQsIGZpbGVQYXRoLCB0b2tlbnMsIG5vZGUsIGpzb24sIGxleGVyLCBwYXJzZXIsIHR5cGVzLCBydWxlcywgYXhpb21zLCBsZW1tYXMsIHNjaGVtYXMsIHRoZW9yZW1zLCBnZW5lcmF0b3JzLCBjb25qZWN0dXJlcywgY29tYmluYXRvcnMsIHR5cGVBbGlhc2VzLCB0eXBlUHJlZml4ZXMsIGNvbnN0cnVjdG9ycywgZGVjbGFyZWRWYXJpYWJsZXMsIGRlY2xhcmVkTWV0YXZhcmlhYmxlcykge1xuICAgIHN1cGVyKGNvbnRleHQsIGZpbGVDb250ZW50LCBmaWxlUGF0aCwgdG9rZW5zLCBub2RlLCBqc29uKTtcblxuICAgIHRoaXMubGV4ZXIgPSBsZXhlcjtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMuZmlsZVBhdGggPSBmaWxlUGF0aDtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgIHRoaXMudHlwZXMgPSB0eXBlcztcbiAgICB0aGlzLnJ1bGVzID0gcnVsZXM7XG4gICAgdGhpcy5heGlvbXMgPSBheGlvbXM7XG4gICAgdGhpcy5sZW1tYXMgPSBsZW1tYXM7XG4gICAgdGhpcy5zY2hlbWFzID0gc2NoZW1hcztcbiAgICB0aGlzLnRoZW9yZW1zID0gdGhlb3JlbXM7XG4gICAgdGhpcy5nZW5lcmF0b3JzID0gZ2VuZXJhdG9ycztcbiAgICB0aGlzLmNvbmplY3R1cmVzID0gY29uamVjdHVyZXM7XG4gICAgdGhpcy5jb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzO1xuICAgIHRoaXMudHlwZUFsaWFzZXMgPSB0eXBlQWxpYXNlcztcbiAgICB0aGlzLnR5cGVQcmVmaXhlcyA9IHR5cGVQcmVmaXhlcztcbiAgICB0aGlzLmNvbnN0cnVjdG9ycyA9IGNvbnN0cnVjdG9ycztcbiAgICB0aGlzLmRlY2xhcmVkVmFyaWFibGVzID0gZGVjbGFyZWRWYXJpYWJsZXM7XG4gICAgdGhpcy5kZWNsYXJlZE1ldGF2YXJpYWJsZXMgPSBkZWNsYXJlZE1ldGF2YXJpYWJsZXM7XG4gIH1cblxuICBnZXRMZXhlcigpIHtcbiAgICByZXR1cm4gdGhpcy5sZXhlcjtcbiAgfVxuXG4gIGdldFBhcnNlcigpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZXI7XG4gIH1cblxuICBnZXRMYWJlbHMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgbGFiZWxzID0gW107XG5cbiAgICBpZiAoaW5jbHVkZVJlbGVhc2UpIHtcbiAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0TGFiZWxzID0gdGhpcy5jb250ZXh0LmdldExhYmVscygpO1xuXG4gICAgICBwdXNoKGxhYmVscywgcmVsZWFzZUNvbnRleHRMYWJlbHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJ1bGVzLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICAgICAgY29uc3QgcnVsZUxhYmVscyA9IHJ1bGUuZ2V0TGFiZWxzKCk7XG5cbiAgICAgICAgcHVzaChsYWJlbHMsIHJ1bGVMYWJlbHMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYXhpb21zLmZvckVhY2goKGF4aW9tKSA9PiB7XG4gICAgICAgIGNvbnN0IGF4aW9tTGFiZWxzID0gYXhpb20uZ2V0TGFiZWxzKCk7XG5cbiAgICAgICAgcHVzaChsYWJlbHMsIGF4aW9tTGFiZWxzKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmxlbW1hcy5mb3JFYWNoKChsZW1tYSkgPT4ge1xuICAgICAgICBjb25zdCBsZW1tYUxhYmVscyA9IGxlbW1hLmdldExhYmVscygpO1xuXG4gICAgICAgIHB1c2gobGFiZWxzLCBsZW1tYUxhYmVscyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy50aGVvcmVtcy5mb3JFYWNoKCh0aGVvcmVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHRoZW9yZW1MYWJlbHMgPSB0aGVvcmVtLmdldExhYmVscygpO1xuXG4gICAgICAgIHB1c2gobGFiZWxzLCB0aGVvcmVtTGFiZWxzKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmNvbmplY3R1cmVzLmZvckVhY2goKGNvbmplY3R1cmUpID0+IHtcbiAgICAgICAgY29uc3QgY29uamVjdHVyZUxhYmVscyA9IGNvbmplY3R1cmUuZ2V0TGFiZWxzKCk7XG5cbiAgICAgICAgcHVzaChsYWJlbHMsIGNvbmplY3R1cmVMYWJlbHMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc2NoZW1hcy5mb3JFYWNoKChzY2hlbWEpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hTGFiZWwgPSBzY2hlbWEuZ2V0TGFiZWwoKTtcblxuICAgICAgICBsYWJlbHMucHVzaChzY2hlbWFMYWJlbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFiZWxzO1xuICB9XG5cbiAgZ2V0VHlwZXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlLCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0VHlwZXMoaW5jbHVkZURlcGVuZGVuY2llcykgOlxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZXM7XG5cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cblxuICBnZXRSdWxlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBydWxlcyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldFJ1bGVzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnVsZXM7XG5cbiAgICByZXR1cm4gcnVsZXM7XG4gIH1cblxuICBnZXRBeGlvbXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgYXhpb21zID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldEF4aW9tcygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5heGlvbXM7XG5cbiAgICByZXR1cm4gYXhpb21zO1xuICB9XG5cbiAgZ2V0TGVtbWFzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGxlbW1hcyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRMZW1tYXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVtbWFzO1xuXG4gICAgcmV0dXJuIGxlbW1hcztcbiAgfVxuXG4gIGdldFNjaGVtYXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3Qgc2NoZW1hcyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0U2NoZW1hcygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NoZW1hcztcblxuICAgIHJldHVybiBzY2hlbWFzO1xuICB9XG5cbiAgZ2V0VGhlb3JlbXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgdGhlb3JlbXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRUaGVvcmVtcygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRoZW9yZW1zO1xuXG4gICAgcmV0dXJuIHRoZW9yZW1zO1xuICB9XG5cbiAgZ2V0R2VuZXJhdG9ycyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBnZW5lcmF0b3JzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRHZW5lcmF0b3JzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0b3JzO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcnM7XG4gIH1cblxuICBnZXRDb25qZWN0dXJlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb25qZWN0dXJlcyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldENvbmplY3R1cmVzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uamVjdHVyZXM7XG5cbiAgICByZXR1cm4gY29uamVjdHVyZXM7XG4gIH1cblxuICBnZXRDb21iaW5hdG9ycyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb21iaW5hdG9ycyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldENvbWJpbmF0b3JzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tYmluYXRvcnM7XG5cbiAgICByZXR1cm4gY29tYmluYXRvcnM7XG4gIH1cblxuICBnZXRUeXBlQWxpYXNlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlQWxpYXNlcyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldFR5cGVBbGlhc2VzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZUFsaWFzZXM7XG5cbiAgICByZXR1cm4gdHlwZUFsaWFzZXM7XG4gIH1cblxuICBnZXRUeXBlUHJlZml4ZXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlLCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVQcmVmaXhlcyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRUeXBlUHJlZml4ZXMoaW5jbHVkZURlcGVuZGVuY2llcykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGVQcmVmaXhlcztcblxuICAgIHJldHVybiB0eXBlUHJlZml4ZXM7XG4gIH1cblxuICBnZXRDb25zdHJ1Y3RvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29uc3RydWN0b3JzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldENvbnN0cnVjdG9ycygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3RvcnM7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3JzO1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBwcm9jZWR1cmVzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0UHJvY2VkdXJlcygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsOyAgLy8vXG5cbiAgICByZXR1cm4gcHJvY2VkdXJlcztcbiAgfVxuXG4gIGdldENsYWltcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBsZW1tYXMgPSB0aGlzLmdldExlbW1hcyhpbmNsdWRlUmVsZWFzZSksXG4gICAgICAgICAgYXhpb21zID0gdGhpcy5nZXRBeGlvbXMoaW5jbHVkZVJlbGVhc2UpLFxuICAgICAgICAgIHRoZW9yZW1zID0gdGhpcy5nZXRUaGVvcmVtcyhpbmNsdWRlUmVsZWFzZSksXG4gICAgICAgICAgY29uamVjdHVyZXMgPSB0aGlzLmdldENvbmplY3R1cmVzKGluY2x1ZGVSZWxlYXNlKSxcbiAgICAgICAgICBjbGFpbXMgPSBbXG4gICAgICAgICAgICAuLi5sZW1tYXMsXG4gICAgICAgICAgICAuLi5heGlvbXMsXG4gICAgICAgICAgICAuLi50aGVvcmVtcyxcbiAgICAgICAgICAgIC4uLmNvbmplY3R1cmVzXG4gICAgICAgICAgXTtcblxuICAgIHJldHVybiBjbGFpbXM7XG4gIH1cblxuICBnZXREZWNsYXJlZFZhcmlhYmxlcyhkZWNsYXJlZFZhcmlhYmxlcyA9IFtdKSB7XG4gICAgcHVzaChkZWNsYXJlZFZhcmlhYmxlcywgdGhpcy5kZWNsYXJlZFZhcmlhYmxlcyk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZXM7XG4gIH1cblxuICBnZXREZWNsYXJlZE1ldGF2YXJpYWJsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjbGFyZWRNZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0VGVybXModGVybXMgPSBbXSkge1xuICAgIHJldHVybiB0ZXJtcztcbiAgfVxuXG4gIGdldExpbmtzKGxpbmtzID0gW10pIHtcbiAgICByZXR1cm4gbGlua3M7XG4gIH1cblxuICBnZXRGcmFtZXMoZnJhbWVzID0gW10pIHtcbiAgICByZXR1cm4gZnJhbWVzO1xuICB9XG5cbiAgZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzID0gW10pIHtcbiAgICByZXR1cm4gZXF1YWxpdGllcztcbiAgfVxuXG4gIGdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyA9IFtdKSB7XG4gICAgcmV0dXJuIGFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMgPSBbXSkge1xuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0UGFyYW1ldGVycyhwYXJhbWV0ZXJzID0gW10pIHtcbiAgICByZXR1cm4gcGFyYW1ldGVycztcbiAgfVxuXG4gIGdldFNpZ25hdHVyZXMoc2lnbmF0dXJlcyA9IFtdKSB7XG4gICAgcmV0dXJuIHNpZ25hdHVyZXM7XG4gIH1cblxuICBnZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMgPSBbXSkge1xuICAgIHJldHVybiByZWZlcmVuY2VzO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMgPSBbXSkge1xuICAgIHJldHVybiBhc3N1bXB0aW9ucztcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyA9IFtdKSB7XG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZXM7XG4gIH1cblxuICBnZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIHJldHVybiBzdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlUmVmZXJlbmNlcyhwcm9jZWR1cmVSZWZlcmVuY2VzID0gW10pIHtcbiAgICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlcztcbiAgfVxuXG4gIGdldERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRFcXVpdmFsZW5jZXMoKSB7XG4gICAgY29uc3QgZXF1aXZhbGVuY2VzID0gW107XG5cbiAgICByZXR1cm4gZXF1aXZhbGVuY2VzO1xuICB9XG5cbiAgZ2V0RmFjdE9yU3VicHJvb2ZzKCkge1xuICAgIGNvbnN0IGZhY3RPclN1YnByb29mcyA9IFtdO1xuXG4gICAgcmV0dXJuIGZhY3RPclN1YnByb29mcztcbiAgfVxuXG4gIGFkZFR5cGUodHlwZSkge1xuICAgIHRoaXMudHlwZXMucHVzaCh0eXBlKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke3R5cGVTdHJpbmd9JyB0eXBlIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkUnVsZShydWxlKSB7XG4gICAgdGhpcy5ydWxlcy5wdXNoKHJ1bGUpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgcnVsZVN0cmluZyA9IHJ1bGUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRBeGlvbShheGlvbSkge1xuICAgIHRoaXMuYXhpb21zLnB1c2goYXhpb20pO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgYXhpb21TdHJpbmcgPSBheGlvbS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkTGVtbWEobGVtbWEpIHtcbiAgICB0aGlzLmxlbW1hcy5wdXNoKGxlbW1hKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgbGVtbWFTdHJpbmcgPSBsZW1tYS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtsZW1tYVN0cmluZ30nIGxlbW1hIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkU2NoZW1hKHNjaGVtYSkge1xuICAgIHRoaXMuc2NoZW1hcy5wdXNoKHNjaGVtYSk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBzY2hlbWFTdHJpbmcgPSBzY2hlbWEuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkVGhlb3JlbSh0aGVvcmVtKSB7XG4gICAgdGhpcy50aGVvcmVtcy5wdXNoKHRoZW9yZW0pO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgdGhlb3JlbVN0cmluZyA9IHRoZW9yZW0uZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7dGhlb3JlbVN0cmluZ30nIHRoZW9yZW0gdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRHZW5lcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgdGhpcy5nZW5lcmF0b3JzLnB1c2goZ2VuZXJhdG9yKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIGdlbmVyYXRvclN0cmluZyA9IGdlbmVyYXRvci5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtnZW5lcmF0b3JTdHJpbmd9JyBnZW5lcmF0b3IgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRDb25qZWN0dXJlKGNvbmplY3R1cmUpIHtcbiAgICB0aGlzLmNvbmplY3R1cmVzLnB1c2goY29uamVjdHVyZSk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBvY25qZWN0dXJlU3RyaW5nID0gY29uamVjdHVyZS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtvY25qZWN0dXJlU3RyaW5nfScgb2NuamVjdHVyZSB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZENvbWJpbmF0b3IoY29tYmluYXRvcikge1xuICAgIHRoaXMuY29tYmluYXRvcnMucHVzaChjb21iaW5hdG9yKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIGNvbWJpbmF0b3JTdHJpbmcgPSBjb21iaW5hdG9yLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke2NvbWJpbmF0b3JTdHJpbmd9JyBjb21iaW5hdG9yIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkVHlwZUFsaWFzKHR5cGVBbGlhcykge1xuICAgIHRoaXMudHlwZUFsaWFzZXMucHVzaCh0eXBlQWxpYXMpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgdHlwZUFsaWFzU3RyaW5nID0gdHlwZUFsaWFzLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke3R5cGVBbGlhc1N0cmluZ30nIHR5cGUgYWxpYXMgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRUeXBlUHJlZml4KHR5cGVQcmVmaXgpIHtcbiAgICB0aGlzLnR5cGVQcmVmaXhlcy5wdXNoKHR5cGVQcmVmaXgpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgdHlwZVByZWZpeFN0cmluZyA9IHR5cGVQcmVmaXguZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7dHlwZVByZWZpeFN0cmluZ30nIHR5cGUgcHJlZml4IHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkQ29uc3RydWN0b3IoY29uc3RydWN0b3IpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9ycy5wdXNoKGNvbnN0cnVjdG9yKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIGNvbnN0cnVjdG9yU3RyaW5nID0gY29uc3RydWN0b3IuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3RvciB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZERlY2xhcmVkVmFyaWFibGUoZGVjbGFyZWRWYXJpYWJsZSkge1xuICAgIHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMucHVzaChkZWNsYXJlZFZhcmlhYmxlKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVTdHJpbmcgPSBkZWNsYXJlZFZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke2RlY2xhcmVkVmFyaWFibGVTdHJpbmd9JyBkZWNsYXJlZCB2YXJpYWJsZSB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZERlY2xhcmVkTWV0YXZhcmlhYmxlKGRlY2xhcmVkTWV0YXZhcmlhYmxlKSB7XG4gICAgdGhpcy5kZWNsYXJlZE1ldGF2YXJpYWJsZXMucHVzaChkZWNsYXJlZE1ldGF2YXJpYWJsZSk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZVN0cmluZyA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke2RlY2xhcmVkTWV0YXZhcmlhYmxlU3RyaW5nfScgZGVjbGFyZWQgbWV0YXZhcmlhYmxlIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgZmluZFJ1bGVCeVJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBydWxlcyA9IHRoaXMuZ2V0UnVsZXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgICBydWxlID0gcnVsZXMuZmluZCgocnVsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBydWxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIGZpbmRBeGlvbUJ5TGluayhsaW5rKSB7XG4gICAgY29uc3QgYXhpb21zID0gdGhpcy5nZXRBeGlvbXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gbGluay5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgYXhpb20gPSBheGlvbXMuZmluZCgoYXhpb20pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gYXhpb20ubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBheGlvbTtcbiAgfVxuXG4gIGZpbmRDbGFpbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNsYWltcyA9IHRoaXMuZ2V0Q2xhaW1zKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgY2xhaW0gPSBjbGFpbXMuZmluZCgoY2xhaW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gY2xhaW0ubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBjbGFpbTtcbiAgfVxuXG4gIGZpbmRhbGlhc2VkVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGxldCBhbGlhc2VkVHlwZSA9IG51bGw7XG5cbiAgICBjb25zdCB0eXBlQWxpYXNlcyA9IHRoaXMuZ2V0VHlwZUFsaWFzZXMoaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgdHlwZUFsaWFzZXMuc29tZSgodHlwZUFsaWFzKSA9PiB7XG4gICAgICBjb25zdCB0eXBlTmFtZUNvbXBhcmVzID0gdHlwZUFsaWFzLmNvbXBhcmVUeXBlTmFtZSh0eXBlTmFtZSk7XG5cbiAgICAgIGlmICh0eXBlTmFtZUNvbXBhcmVzKSB7XG4gICAgICAgIGFsaWFzZWRUeXBlID0gdHlwZUFsaWFzLmdldEFsaWFzZWRUeXBlKCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBhbGlhc2VkVHlwZTtcbiAgfVxuXG4gIGZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5nZXRUeXBlcyhpbmNsdWRlUmVsZWFzZSwgaW5jbHVkZURlcGVuZGVuY2llcyksXG4gICAgICAgICAgdHlwZSA9IGZpbmRUeXBlKHR5cGVzLCAodHlwZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHlwZUNvbXBhcmVzVG9UeXBlTmFtZSA9IHR5cGUuY29tcGFyZVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVDb21wYXJlc1RvVHlwZU5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGZpbmRUeXBlc0J5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSwgaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBsZXQgdHlwZXM7XG5cbiAgICB0eXBlcyA9IHRoaXMuZ2V0VHlwZXMoaW5jbHVkZVJlbGVhc2UsIGluY2x1ZGVEZXBlbmRlbmNpZXMpO1xuXG4gICAgdHlwZXMgPSBmaW5kVHlwZXModHlwZXMsICh0eXBlKSA9PiB7ICAvLy9cbiAgICAgIGNvbnN0IHR5cGVDb21wYXJlc1RvVHlwZU5hbWUgPSB0eXBlLmNvbXBhcmVUeXBlTmFtZSh0eXBlTmFtZSk7XG5cbiAgICAgIGlmICh0eXBlQ29tcGFyZXNUb1R5cGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHR5cGVzO1xuICB9XG5cbiAgZmluZFR5cGVBbGlhc0J5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVBbGlhc2VzID0gdGhpcy5nZXRUeXBlQWxpYXNlcyhpbmNsdWRlUmVsZWFzZSksXG4gICAgICAgICAgdHlwZUFsaWFzID0gdHlwZUFsaWFzZXMuZmluZCgodHlwZUFsaWFzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlQWxpYXNDb21wYXJlc1RvVHlwZU5hbWUgPSB0eXBlQWxpYXMuY29tcGFyZVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVBbGlhc0NvbXBhcmVzVG9UeXBlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHR5cGVBbGlhcztcbiAgfVxuXG4gIGZpbmRUeXBlQnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSwgaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlcyA9IHRoaXMuZ2V0VHlwZXMoaW5jbHVkZVJlbGVhc2UsIGluY2x1ZGVEZXBlbmRlbmNpZXMpLFxuICAgICAgICAgIHR5cGUgPSBmaW5kVHlwZSh0eXBlcywgKHR5cGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVDb21wYXJlc1RvUHJlZml4ZWRUeXBlTmFtZSA9IHR5cGUuY29tcGFyZVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlQ29tcGFyZXNUb1ByZWZpeGVkVHlwZU5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZmluZFR5cGVzQnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSwgaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBsZXQgdHlwZXM7XG5cbiAgICB0eXBlcyA9IHRoaXMuZ2V0VHlwZXMoaW5jbHVkZVJlbGVhc2UsIGluY2x1ZGVEZXBlbmRlbmNpZXMpO1xuXG4gICAgdHlwZXMgPSBmaW5kVHlwZXModHlwZXMsICh0eXBlKSA9PiB7ICAvLy9cbiAgICAgIGNvbnN0IHR5cGVDb21wYXJlc1RvVHlwZU5hbWUgPSB0eXBlLmNvbXBhcmVQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUpO1xuXG4gICAgICBpZiAodHlwZUNvbXBhcmVzVG9UeXBlTmFtZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0eXBlcztcbiAgfVxuXG4gIGZpbmRUeXBlUHJlZml4QnlUeXBlUHJlZml4TmFtZSh0eXBlUHJlZml4TmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVQcmVmaXhlcyA9IHRoaXMuZ2V0VHlwZVByZWZpeGVzKGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKSxcbiAgICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeGVzLmZpbmQoKHR5cGVQcmVmaXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVQcmVmaXhDb21wYXJlc1RvVHlwZVByZWZpeE5hbWUgPSB0eXBlUHJlZml4LmNvbXBhcmVUeXBlUHJlZml4TmFtZSh0eXBlUHJlZml4TmFtZSk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlUHJlZml4Q29tcGFyZXNUb1R5cGVQcmVmaXhOYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdHlwZVByZWZpeDtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIoVmFyaWFibGVJZGVudGl0aWZlcikge1xuICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGVzID0gdGhpcy5nZXREZWNsYXJlZFZhcmlhYmxlcygpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGUgPSBkZWNsYXJlZFZhcmlhYmxlcy5maW5kKChkZWNsYXJlZFZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWNsYXJlZFZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpdGlmZXIgPSBkZWNsYXJlZFZhcmlhYmxlLmNvbXBhcmVWYXJpYWJsZUlkZW50aWZpZXIoVmFyaWFibGVJZGVudGl0aWZlcik7XG5cbiAgICAgICAgICAgIGlmIChkZWNsYXJlZFZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpdGlmZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlO1xuICB9XG5cbiAgZmluZERlY2xhcmVkVmFyaWFibGVzQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgbGV0IGRlY2xhcmVkVmFyaWFibGVzO1xuXG4gICAgZGVjbGFyZWRWYXJpYWJsZXMgPSB0aGlzLmdldERlY2xhcmVkVmFyaWFibGVzKCk7XG5cbiAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IGRlY2xhcmVkVmFyaWFibGVzLmZpbHRlcigoZGVjbGFyZWRWYXJpYWJsZSkgPT4ge1xuICAgICAgY29uc3QgdmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyID0gZGVjbGFyZWRWYXJpYWJsZS5jb21wYXJlVmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcik7XG5cbiAgICAgIGlmICh2YXJpYWJsZUNvbXBhcmVzVG9WYXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZXM7XG4gIH1cblxuICBmaW5kRGVjbGFyZWRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IGRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IHRoaXMuZ2V0RGVjbGFyZWRNZXRhdmFyaWFibGVzKCksXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGUgPSBkZWNsYXJlZE1ldGF2YXJpYWJsZXMuZmluZCgoZGVjbGFyZWRNZXRhdmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlY2xhcmVkTWV0YXZhcmlhYmxlQ29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUgPSBkZWNsYXJlZE1ldGF2YXJpYWJsZS5jb21wYXJlTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgICAgICAgICAgaWYgKGRlY2xhcmVkTWV0YXZhcmlhYmxlQ29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBkZWNsYXJlZE1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRQcm9jZWR1cmVCeVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSkge1xuICAgIGNvbnN0IHByb2NlZHVyZXMgPSB0aGlzLmdldFByb2NlZHVyZXMoKSxcbiAgICAgICAgICBwcm9jZWR1cmUgPSBwcm9jZWR1cmVzLmZpbmQoKHByb2NlZHVyZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvY2VkdXJlQ29tcGFyZXNUb1Byb2NlZHVyZU5hbWUgPSBwcm9jZWR1cmUuY29tcGFyZVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSk7XG5cbiAgICAgICAgICAgIGlmIChwcm9jZWR1cmVDb21wYXJlc1RvUHJvY2VkdXJlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHByb2NlZHVyZTtcbiAgfVxuXG4gIGZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSkgeyByZXR1cm4gZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKTsgfVxuXG4gIGlzTGFiZWxQcmVzZW50QnlMYWJlbE5vZGUobGFiZWxOb2RlKSB7XG4gICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKSxcbiAgICAgICAgICBsYWJlbFByZXNlbnQgPSBsYWJlbHMuc29tZSgobGFiZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsTm9kZU1hdGNoZXMgPSBsYWJlbC5tYXRjaExhYmVsTm9kZShsYWJlbE5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobGFiZWxOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBsYWJlbFByZXNlbnQ7XG4gIH1cblxuICBpc1R5cGVQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UsIGluY2x1ZGVEZXBlbmRlbmNpZXMpLFxuICAgICAgICAgIHR5cGVQcmVzZW50ID0gKHR5cGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVzZW50O1xuICB9XG5cbiAgaXNUeXBlQWxpYXNQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZUFsaWFzID0gdGhpcy5maW5kVHlwZUFsaWFzQnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UpLFxuICAgICAgICAgIHR5cGVBbGlzUHJlc2VudCA9ICh0eXBlQWxpYXMgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHR5cGVBbGlzUHJlc2VudDtcbiAgfVxuXG4gIGlzVHlwZVByZXNlbnRCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpbmRUeXBlQnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKSxcbiAgICAgICAgICB0eXBlUHJlc2VudCA9ICh0eXBlICE9PSBudWxsKTtcblxuICAgIHJldHVybiB0eXBlUHJlc2VudDtcbiAgfVxuXG4gIGlzVHlwZVByZWZpeFByZXNlbnRCeVR5cGVQcmVmaXhOYW1lKHR5cGVQcmVmaXhOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlUHJlZml4ID0gdGhpcy5maW5kVHlwZVByZWZpeEJ5VHlwZVByZWZpeE5hbWUodHlwZVByZWZpeE5hbWUsIGluY2x1ZGVSZWxlYXNlKSxcbiAgICAgICAgICB0eXBlUHJlZml4UHJlc2VudCA9ICh0eXBlUHJlZml4ICE9PSBudWxsKTtcblxuICAgIHJldHVybiB0eXBlUHJlZml4UHJlc2VudDtcbiAgfVxuXG4gIGlzRGVjbGFyZWRWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICBjb25zdCBkZWNsYXJlZFZhcmlhYmxlID0gdGhpcy5maW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllciksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZVByZXNlbnQgPSAoZGVjbGFyZWRWYXJpYWJsZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZVByZXNlbnQ7XG4gIH1cblxuICBpc0RlY2xhcmVkTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgZGVjbGFyZWRNZXRhdmFyaWFibGUgPSB0aGlzLmZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSxcbiAgICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZVByZXNlbnQgPSAoZGVjbGFyZWRNZXRhdmFyaWFibGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkTWV0YXZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGlzUHJvY2VkdXJlUHJlc2VudEJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKSB7XG4gICAgY29uc3QgcHJvY2VkdXJlID0gdGhpcy5maW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpLFxuICAgICAgICAgIHByb2NlZHVyZVByZXNlbnQgPSAocHJvY2VkdXJlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVQcmVzZW50O1xuICB9XG5cbiAgaXNNZXRhTGV2ZWwoKSB7XG4gICAgY29uc3QgbWV0YUxFdmVsID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbWV0YUxFdmVsO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy50eXBlcyA9IFtdO1xuICAgIHRoaXMucnVsZXMgPSBbXTtcbiAgICB0aGlzLmF4aW9tcyA9IFtdO1xuICAgIHRoaXMubGVtbWFzID0gW107XG4gICAgdGhpcy5zY2hlbWFzID0gW107XG4gICAgdGhpcy50aGVvcmVtcyA9IFtdO1xuICAgIHRoaXMuZ2VuZXJhdG9ycyA9IFtdO1xuICAgIHRoaXMuY29uamVjdHVyZXMgPSBbXTtcbiAgICB0aGlzLmNvbWJpbmF0b3JzID0gW107XG4gICAgdGhpcy50eXBlQWxpYXNlcyA9IFtdO1xuICAgIHRoaXMudHlwZVByZWZpeGVzID0gW107XG4gICAgdGhpcy5jb25zdHJ1Y3RvcnMgPSBbXTtcbiAgICB0aGlzLmRlY2xhcmVkVmFyaWFibGVzID0gW107XG4gICAgdGhpcy5kZWNsYXJlZE1ldGF2YXJpYWJsZXMgPSBbXTtcbiAgfVxuXG4gIGNvbXBsZXRlKCkge1xuICAgIC8vL1xuICB9XG5cbiAgdmVyaWZ5RmlsZShmb3J3YXJkLCBiYWNrKSB7XG4gICAgcmV0dXJuIGlzb2xhdGUoKGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICAgIGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICAgIGZpbGVOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgICByZXR1cm4gdmVyaWZ5RmlsZShmaWxlTm9kZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gICAgfSwgZm9yd2FyZCwgYmFjayk7XG4gIH1cblxuICBpbml0aWFsaXNlKCkge1xuICAgIGNvbnN0IGpzb24gPSB0aGlzLmdldEpTT04oKTtcblxuICAgIGlmIChqc29uID09PSBudWxsKSB7XG4gICAgICBzdXBlci5pbml0aWFsaXNlKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlQ29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgdGhpcy50eXBlcyA9IFtdO1xuXG4gICAgdHlwZXNGcm9tSlNPTihqc29uLCB0aGlzLnR5cGVzLCBmaWxlQ29udGV4dCk7XG5cbiAgICB0eXBlUHJvcGVydGllc0Zyb21KU09OKGpzb24sIHRoaXMudHlwZXMsIGZpbGVDb250ZXh0KTtcblxuICAgIHRoaXMubGVtbWFzID0gbGVtbWFzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICAgIHRoaXMudHlwZUFsaWFzZXMgPSB0eXBlQWxpYXNlc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLnR5cGVQcmVmaXhlcyA9IHR5cGVQcmVmaXhlc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcblxuICAgIHRoaXMuZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gZGVjbGFyZWRNZXRhdmFyaWFibGVzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICAgIHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMgPSBkZWNsYXJlZFZhcmlhYmxlc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLmdlbmVyYXRvcnMgPSBnZW5lcmF0b3JzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICAgIHRoaXMuY29tYmluYXRvcnMgPSBjb21iaW5hdG9yc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLmNvbnN0cnVjdG9ycyA9IGNvbnN0cnVjdG9yc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcblxuICAgIHRoaXMucnVsZXMgPSBydWxlc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLmF4aW9tcyA9IGF4aW9tc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLnNjaGVtYXMgPSBzY2hlbWFzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICAgIHRoaXMudGhlb3JlbXMgPSB0aGVvcmVtc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLmNvbmplY3R1cmVzID0gY29uamVjdHVyZXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCB0eXBlc0pTT04gPSB0eXBlc1RvVHlwZXNKU09OKHRoaXMudHlwZXMpLFxuICAgICAgICAgIHJ1bGVzSlNPTiA9IHJ1bGVzVG9SdWxlc0pTT04odGhpcy5ydWxlcyksXG4gICAgICAgICAgbGVtbWFzSlNPTiA9IGxlbW1hc1RvTGVtbWFzSlNPTih0aGlzLmxlbW1hcyksXG4gICAgICAgICAgYXhpb21zSlNPTiA9IGF4aW9tc1RvQXhpb21zSlNPTih0aGlzLmF4aW9tcyksXG4gICAgICAgICAgc2NoZW1hc0pTT04gPSBzY2hlbWFzVG9TY2hlbWFzSlNPTih0aGlzLnNjaGVtYXMpLFxuICAgICAgICAgIHRoZW9yZW1zSlNPTiA9IHRoZW9yZW1zVG9UaGVvcmVtc0pTT04odGhpcy50aGVvcmVtcyksXG4gICAgICAgICAgZ2VuZXJhdG9yc0pTT04gPSBnZW5lcmF0b3JzVG9HZW5lcmF0b3JzSlNPTih0aGlzLmdlbmVyYXRvcnMpLFxuICAgICAgICAgIGNvbmplY3R1cmVzSlNPTiA9IGNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04odGhpcy5jb25qZWN0dXJlcyksXG4gICAgICAgICAgY29tYmluYXRvcnNKU09OID0gY29tYmluYXRvcnNUb0NvbWJpbmF0b3JzSlNPTih0aGlzLmNvbWJpbmF0b3JzKSxcbiAgICAgICAgICB0eXBlQWxpYXNlc0pTT04gPSB0eXBlQWxpYXNlc1RvVHlwZUFsaWFzZXNKU09OKHRoaXMudHlwZUFsaWFzZXMpLFxuICAgICAgICAgIHR5cGVQcmVmaXhlc0pTT04gPSB0eXBlUHJlZml4ZXNUb1R5cGVQcmVmaXhlc0pTT04odGhpcy50eXBlUHJlZml4ZXMpLFxuICAgICAgICAgIGNvbnN0cnVjdG9yc0pTT04gPSBjb25zdHJ1Y3RvcnNUb0NvbnN0cnVjdG9yc0pTT04odGhpcy5jb25zdHJ1Y3RvcnMpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzSlNPTiA9IGRlY2xhcmVkVmFyaWFibGVzVG9EZWNsYXJlZFZhcmlhYmxlc0pTT04odGhpcy5kZWNsYXJlZFZhcmlhYmxlcyksXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlc1RvRGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTih0aGlzLmRlY2xhcmVkTWV0YXZhcmlhYmxlcyksXG4gICAgICAgICAgZmlsZUNvbnRlbnQgPSB0aGlzLmdldEZpbGVDb250ZW50KCksXG4gICAgICAgICAgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgdHlwZXMgPSB0eXBlc0pTT04sICAvLy9cbiAgICAgICAgICBydWxlcyA9IHJ1bGVzSlNPTiwgIC8vL1xuICAgICAgICAgIGxlbW1hcyA9IGxlbW1hc0pTT04sICAvLy9cbiAgICAgICAgICBheGlvbXMgPSBheGlvbXNKU09OLCAgLy8vXG4gICAgICAgICAgc2NoZW1hcyA9IHNjaGVtYXNKU09OLCAgLy8vXG4gICAgICAgICAgdGhlb3JlbXMgPSB0aGVvcmVtc0pTT04sICAvLy9cbiAgICAgICAgICBnZW5lcmF0b3JzID0gZ2VuZXJhdG9yc0pTT04sICAvLy9cbiAgICAgICAgICBjb25qZWN0dXJlcyA9IGNvbmplY3R1cmVzSlNPTiwgIC8vL1xuICAgICAgICAgIGNvbWJpbmF0b3JzID0gY29tYmluYXRvcnNKU09OLCAgLy8vXG4gICAgICAgICAgdHlwZUFsaWFzZXMgPSB0eXBlQWxpYXNlc0pTT04sICAvLy9cbiAgICAgICAgICB0eXBlUHJlZml4ZXMgPSB0eXBlUHJlZml4ZXNKU09OLCAgLy8vXG4gICAgICAgICAgY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzSlNPTiwgIC8vL1xuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzID0gZGVjbGFyZWRWYXJpYWJsZXNKU09OLCAgLy8vXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTjsgIC8vL1xuXG4gICAganNvbiA9IHtcbiAgICAgIGZpbGVDb250ZW50LFxuICAgICAgZmlsZVBhdGgsXG4gICAgICB0eXBlcyxcbiAgICAgIHJ1bGVzLFxuICAgICAgbGVtbWFzLFxuICAgICAgYXhpb21zLFxuICAgICAgc2NoZW1hcyxcbiAgICAgIHRoZW9yZW1zLFxuICAgICAgZ2VuZXJhdG9ycyxcbiAgICAgIGNvbmplY3R1cmVzLFxuICAgICAgY29tYmluYXRvcnMsXG4gICAgICB0eXBlQWxpYXNlcyxcbiAgICAgIHR5cGVQcmVmaXhlcyxcbiAgICAgIGNvbnN0cnVjdG9ycyxcbiAgICAgIGRlY2xhcmVkVmFyaWFibGVzLFxuICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21GaWxlKGZpbGUsIGNvbnRleHQpIHtcbiAgICBjb25zdCByZWxlYXNlQ29udGV4dCA9IGNvbnRleHQsIC8vL1xuICAgICAgICAgIGNvbWJpbmVkQ3VzdG9tR3JhbW1hciA9IHJlbGVhc2VDb250ZXh0LmdldENvbWJpbmVkQ3VzdG9tR3JhbW1hcigpLFxuICAgICAgICAgIG5vbWluYWxMZXhlciA9IG5vbWluYWxMZXhlckZyb21Db21iaW5lZEN1c3RvbUdyYW1tYXIoTm9taW5hbExleGVyLCBjb21iaW5lZEN1c3RvbUdyYW1tYXIpLFxuICAgICAgICAgIG5vbWluYWxQYXJzZXIgPSBub21pbmFsUGFyc2VyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hcihOb21pbmFsUGFyc2VyLCBjb21iaW5lZEN1c3RvbUdyYW1tYXIpLFxuICAgICAgICAgIGxleGVyID0gbm9taW5hbExleGVyLCAvLy9cbiAgICAgICAgICBwYXJzZXIgPSBub21pbmFsUGFyc2VyLCAvLy9cbiAgICAgICAgICB0eXBlcyA9IFtdLFxuICAgICAgICAgIHJ1bGVzID0gW10sXG4gICAgICAgICAgYXhpb21zID0gW10sXG4gICAgICAgICAgbGVtbWFzID0gW10sXG4gICAgICAgICAgc2NoZW1hcyA9IFtdLFxuICAgICAgICAgIHRoZW9yZW1zID0gW10sXG4gICAgICAgICAgZ2VuZXJhdG9ycyA9IFtdLFxuICAgICAgICAgIGNvbmplY3R1cmVzID0gW10sXG4gICAgICAgICAgY29tYmluYXRvcnMgPSBbXSxcbiAgICAgICAgICB0eXBlQWxpYXNlcyA9IFtdLFxuICAgICAgICAgIHR5cGVQcmVmaXhlcyA9IFtdLFxuICAgICAgICAgIGNvbnN0cnVjdG9ycyA9IFtdLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzID0gW10sXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgbm9taW5hbEZpbGVDb250ZXh0ID0gRmlsZUNvbnRleHQuZnJvbUZpbGUoTm9taW5hbEZpbGVDb250ZXh0LCBmaWxlLCBsZXhlciwgcGFyc2VyLCB0eXBlcywgcnVsZXMsIGF4aW9tcywgbGVtbWFzLCBzY2hlbWFzLCB0aGVvcmVtcywgZ2VuZXJhdG9ycywgY29uamVjdHVyZXMsIGNvbWJpbmF0b3JzLCB0eXBlQWxpYXNlcywgdHlwZVByZWZpeGVzLCBjb25zdHJ1Y3RvcnMsIGRlY2xhcmVkVmFyaWFibGVzLCBkZWNsYXJlZE1ldGF2YXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG5vbWluYWxGaWxlQ29udGV4dDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgcmVsZWFzZUNvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICBjb21iaW5lZEN1c3RvbUdyYW1tYXIgPSByZWxlYXNlQ29udGV4dC5nZXRDb21iaW5lZEN1c3RvbUdyYW1tYXIoKSxcbiAgICAgICAgICBub21pbmFsTGV4ZXIgPSBub21pbmFsTGV4ZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyKE5vbWluYWxMZXhlciwgY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgICBub21pbmFsUGFyc2VyID0gbm9taW5hbFBhcnNlckZyb21Db21iaW5lZEN1c3RvbUdyYW1tYXIoTm9taW5hbFBhcnNlciwgY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgICBsZXhlciA9IG5vbWluYWxMZXhlciwgLy8vXG4gICAgICAgICAgcGFyc2VyID0gbm9taW5hbFBhcnNlciwgLy8vXG4gICAgICAgICAgdHlwZXMgPSBudWxsLFxuICAgICAgICAgIHJ1bGVzID0gbnVsbCxcbiAgICAgICAgICBheGlvbXMgPSBudWxsLFxuICAgICAgICAgIGxlbW1hcyA9IG51bGwsXG4gICAgICAgICAgc2NoZW1hcyA9IG51bGwsXG4gICAgICAgICAgdGhlb3JlbXMgPSBudWxsLFxuICAgICAgICAgIGdlbmVyYXRvcnMgPSBudWxsLFxuICAgICAgICAgIGNvbmplY3R1cmVzID0gbnVsbCxcbiAgICAgICAgICBjb21iaW5hdG9ycyA9IG51bGwsXG4gICAgICAgICAgdHlwZUFsaWFzZXMgPSBudWxsLFxuICAgICAgICAgIHR5cGVQcmVmaXhlcyA9IG51bGwsXG4gICAgICAgICAgY29uc3RydWN0b3JzID0gbnVsbCxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IG51bGwsXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gbnVsbCxcbiAgICAgICAgICBub21pbmFsRmlsZUNvbnRleHQgPSBGaWxlQ29udGV4dC5mcm9tSlNPTihOb21pbmFsRmlsZUNvbnRleHQsIGpzb24sIGxleGVyLCBwYXJzZXIsIHR5cGVzLCBydWxlcywgYXhpb21zLCBsZW1tYXMsIHNjaGVtYXMsIHRoZW9yZW1zLCBnZW5lcmF0b3JzLCBjb25qZWN0dXJlcywgY29tYmluYXRvcnMsIHR5cGVBbGlhc2VzLCB0eXBlUHJlZml4ZXMsIGNvbnN0cnVjdG9ycywgZGVjbGFyZWRWYXJpYWJsZXMsIGRlY2xhcmVkTWV0YXZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbm9taW5hbEZpbGVDb250ZXh0O1xuICB9XG59XG4iXSwibmFtZXMiOlsiTm9taW5hbEZpbGVDb250ZXh0IiwicHVzaCIsImFycmF5VXRpbGl0aWVzIiwibm9taW5hbExleGVyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hciIsIm5vbWluYWxQYXJzZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyIiwibm9taW5hbFV0aWxpdGllcyIsIkZpbGVDb250ZXh0IiwiY29udGV4dCIsImZpbGVDb250ZW50IiwiZmlsZVBhdGgiLCJ0b2tlbnMiLCJub2RlIiwianNvbiIsImxleGVyIiwicGFyc2VyIiwidHlwZXMiLCJydWxlcyIsImF4aW9tcyIsImxlbW1hcyIsInNjaGVtYXMiLCJ0aGVvcmVtcyIsImdlbmVyYXRvcnMiLCJjb25qZWN0dXJlcyIsImNvbWJpbmF0b3JzIiwidHlwZUFsaWFzZXMiLCJ0eXBlUHJlZml4ZXMiLCJjb25zdHJ1Y3RvcnMiLCJkZWNsYXJlZFZhcmlhYmxlcyIsImRlY2xhcmVkTWV0YXZhcmlhYmxlcyIsImdldExleGVyIiwiZ2V0UGFyc2VyIiwiZ2V0TGFiZWxzIiwiaW5jbHVkZVJlbGVhc2UiLCJsYWJlbHMiLCJyZWxlYXNlQ29udGV4dExhYmVscyIsImZvckVhY2giLCJydWxlIiwicnVsZUxhYmVscyIsImF4aW9tIiwiYXhpb21MYWJlbHMiLCJsZW1tYSIsImxlbW1hTGFiZWxzIiwidGhlb3JlbSIsInRoZW9yZW1MYWJlbHMiLCJjb25qZWN0dXJlIiwiY29uamVjdHVyZUxhYmVscyIsInNjaGVtYSIsInNjaGVtYUxhYmVsIiwiZ2V0TGFiZWwiLCJnZXRUeXBlcyIsImluY2x1ZGVEZXBlbmRlbmNpZXMiLCJnZXRSdWxlcyIsImdldEF4aW9tcyIsImdldExlbW1hcyIsImdldFNjaGVtYXMiLCJnZXRUaGVvcmVtcyIsImdldEdlbmVyYXRvcnMiLCJnZXRDb25qZWN0dXJlcyIsImdldENvbWJpbmF0b3JzIiwiZ2V0VHlwZUFsaWFzZXMiLCJnZXRUeXBlUHJlZml4ZXMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJnZXRQcm9jZWR1cmVzIiwicHJvY2VkdXJlcyIsImdldENsYWltcyIsImNsYWltcyIsImdldERlY2xhcmVkVmFyaWFibGVzIiwiZ2V0RGVjbGFyZWRNZXRhdmFyaWFibGVzIiwiZ2V0VGVybXMiLCJ0ZXJtcyIsImdldExpbmtzIiwibGlua3MiLCJnZXRGcmFtZXMiLCJmcmFtZXMiLCJnZXRFcXVhbGl0aWVzIiwiZXF1YWxpdGllcyIsImdldEFzc2VydGlvbnMiLCJhc3NlcnRpb25zIiwiZ2V0U3RhdGVtZW50cyIsInN0YXRlbWVudHMiLCJnZXRQYXJhbWV0ZXJzIiwicGFyYW1ldGVycyIsImdldFNpZ25hdHVyZXMiLCJzaWduYXR1cmVzIiwiZ2V0UmVmZXJlbmNlcyIsInJlZmVyZW5jZXMiLCJnZXRBc3N1bXB0aW9ucyIsImFzc3VtcHRpb25zIiwiZ2V0TWV0YXZhcmlhYmxlcyIsIm1ldGF2YXJpYWJsZXMiLCJnZXRTdWJzdGl0dXRpb25zIiwic3Vic3RpdHV0aW9ucyIsImdldFByb2NlZHVyZVJlZmVyZW5jZXMiLCJwcm9jZWR1cmVSZWZlcmVuY2VzIiwiZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJkZXJpdmVkU3Vic3RpdHV0aW9ucyIsImdldEVxdWl2YWxlbmNlcyIsImVxdWl2YWxlbmNlcyIsImdldEZhY3RPclN1YnByb29mcyIsImZhY3RPclN1YnByb29mcyIsImFkZFR5cGUiLCJ0eXBlIiwiZ2V0RmlsZVBhdGgiLCJ0eXBlU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJhZGRSdWxlIiwicnVsZVN0cmluZyIsImFkZEF4aW9tIiwiYXhpb21TdHJpbmciLCJhZGRMZW1tYSIsImxlbW1hU3RyaW5nIiwiYWRkU2NoZW1hIiwic2NoZW1hU3RyaW5nIiwiYWRkVGhlb3JlbSIsInRoZW9yZW1TdHJpbmciLCJhZGRHZW5lcmF0b3IiLCJnZW5lcmF0b3IiLCJnZW5lcmF0b3JTdHJpbmciLCJhZGRDb25qZWN0dXJlIiwib2NuamVjdHVyZVN0cmluZyIsImFkZENvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiY29tYmluYXRvclN0cmluZyIsImFkZFR5cGVBbGlhcyIsInR5cGVBbGlhcyIsInR5cGVBbGlhc1N0cmluZyIsImFkZFR5cGVQcmVmaXgiLCJ0eXBlUHJlZml4IiwidHlwZVByZWZpeFN0cmluZyIsImFkZENvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvclN0cmluZyIsImFkZERlY2xhcmVkVmFyaWFibGUiLCJkZWNsYXJlZFZhcmlhYmxlIiwiZGVjbGFyZWRWYXJpYWJsZVN0cmluZyIsImFkZERlY2xhcmVkTWV0YXZhcmlhYmxlIiwiZGVjbGFyZWRNZXRhdmFyaWFibGUiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZVN0cmluZyIsImZpbmRSdWxlQnlSZWZlcmVuY2UiLCJyZWZlcmVuY2UiLCJtZXRhdmFyaWFibGVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImZpbmQiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImZpbmRBeGlvbUJ5TGluayIsImxpbmsiLCJmaW5kQ2xhaW1CeVJlZmVyZW5jZSIsImNsYWltIiwiZmluZGFsaWFzZWRUeXBlQnlUeXBlTmFtZSIsInR5cGVOYW1lIiwiYWxpYXNlZFR5cGUiLCJzb21lIiwidHlwZU5hbWVDb21wYXJlcyIsImNvbXBhcmVUeXBlTmFtZSIsImdldEFsaWFzZWRUeXBlIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwiZmluZFR5cGUiLCJ0eXBlQ29tcGFyZXNUb1R5cGVOYW1lIiwiZmluZFR5cGVzQnlUeXBlTmFtZSIsImZpbmRUeXBlcyIsImZpbmRUeXBlQWxpYXNCeVR5cGVOYW1lIiwidHlwZUFsaWFzQ29tcGFyZXNUb1R5cGVOYW1lIiwiZmluZFR5cGVCeVByZWZpeGVkVHlwZU5hbWUiLCJwcmVmaXhlZFR5cGVOYW1lIiwidHlwZUNvbXBhcmVzVG9QcmVmaXhlZFR5cGVOYW1lIiwiY29tcGFyZVByZWZpeGVkVHlwZU5hbWUiLCJmaW5kVHlwZXNCeVByZWZpeGVkVHlwZU5hbWUiLCJmaW5kVHlwZVByZWZpeEJ5VHlwZVByZWZpeE5hbWUiLCJ0eXBlUHJlZml4TmFtZSIsInR5cGVQcmVmaXhDb21wYXJlc1RvVHlwZVByZWZpeE5hbWUiLCJjb21wYXJlVHlwZVByZWZpeE5hbWUiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwiVmFyaWFibGVJZGVudGl0aWZlciIsImRlY2xhcmVkVmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGl0aWZlciIsImNvbXBhcmVWYXJpYWJsZUlkZW50aWZpZXIiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZXNCeVZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlSWRlbnRpZmllciIsImZpbHRlciIsInZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllciIsImZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZUNvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lIiwiY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUiLCJmaW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlTmFtZSIsInByb2NlZHVyZSIsInByb2NlZHVyZUNvbXBhcmVzVG9Qcm9jZWR1cmVOYW1lIiwiY29tcGFyZVByb2NlZHVyZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlTmFtZSIsImlzTGFiZWxQcmVzZW50QnlMYWJlbE5vZGUiLCJsYWJlbE5vZGUiLCJsYWJlbFByZXNlbnQiLCJsYWJlbCIsImxhYmVsTm9kZU1hdGNoZXMiLCJtYXRjaExhYmVsTm9kZSIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwidHlwZVByZXNlbnQiLCJpc1R5cGVBbGlhc1ByZXNlbnRCeVR5cGVOYW1lIiwidHlwZUFsaXNQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5UHJlZml4ZWRUeXBlTmFtZSIsImlzVHlwZVByZWZpeFByZXNlbnRCeVR5cGVQcmVmaXhOYW1lIiwidHlwZVByZWZpeFByZXNlbnQiLCJpc0RlY2xhcmVkVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZUlkZW50aWZpZXIiLCJkZWNsYXJlZFZhcmlhYmxlUHJlc2VudCIsImlzRGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50IiwiaXNQcm9jZWR1cmVQcmVzZW50QnlQcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlUHJlc2VudCIsImlzTWV0YUxldmVsIiwibWV0YUxFdmVsIiwiY2xlYXIiLCJjb21wbGV0ZSIsInZlcmlmeUZpbGUiLCJmb3J3YXJkIiwiYmFjayIsImlzb2xhdGUiLCJnZXROb2RlIiwiZmlsZU5vZGUiLCJpbml0aWFsaXNlIiwiZ2V0SlNPTiIsImZpbGVDb250ZXh0IiwidHlwZXNGcm9tSlNPTiIsInR5cGVQcm9wZXJ0aWVzRnJvbUpTT04iLCJsZW1tYXNGcm9tSlNPTiIsInR5cGVBbGlhc2VzRnJvbUpTT04iLCJ0eXBlUHJlZml4ZXNGcm9tSlNPTiIsImRlY2xhcmVkTWV0YXZhcmlhYmxlc0Zyb21KU09OIiwiZGVjbGFyZWRWYXJpYWJsZXNGcm9tSlNPTiIsImdlbmVyYXRvcnNGcm9tSlNPTiIsImNvbWJpbmF0b3JzRnJvbUpTT04iLCJjb25zdHJ1Y3RvcnNGcm9tSlNPTiIsInJ1bGVzRnJvbUpTT04iLCJheGlvbXNGcm9tSlNPTiIsInNjaGVtYXNGcm9tSlNPTiIsInRoZW9yZW1zRnJvbUpTT04iLCJjb25qZWN0dXJlc0Zyb21KU09OIiwidG9KU09OIiwidHlwZXNKU09OIiwidHlwZXNUb1R5cGVzSlNPTiIsInJ1bGVzSlNPTiIsInJ1bGVzVG9SdWxlc0pTT04iLCJsZW1tYXNKU09OIiwibGVtbWFzVG9MZW1tYXNKU09OIiwiYXhpb21zSlNPTiIsImF4aW9tc1RvQXhpb21zSlNPTiIsInNjaGVtYXNKU09OIiwic2NoZW1hc1RvU2NoZW1hc0pTT04iLCJ0aGVvcmVtc0pTT04iLCJ0aGVvcmVtc1RvVGhlb3JlbXNKU09OIiwiZ2VuZXJhdG9yc0pTT04iLCJnZW5lcmF0b3JzVG9HZW5lcmF0b3JzSlNPTiIsImNvbmplY3R1cmVzSlNPTiIsImNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04iLCJjb21iaW5hdG9yc0pTT04iLCJjb21iaW5hdG9yc1RvQ29tYmluYXRvcnNKU09OIiwidHlwZUFsaWFzZXNKU09OIiwidHlwZUFsaWFzZXNUb1R5cGVBbGlhc2VzSlNPTiIsInR5cGVQcmVmaXhlc0pTT04iLCJ0eXBlUHJlZml4ZXNUb1R5cGVQcmVmaXhlc0pTT04iLCJjb25zdHJ1Y3RvcnNKU09OIiwiY29uc3RydWN0b3JzVG9Db25zdHJ1Y3RvcnNKU09OIiwiZGVjbGFyZWRWYXJpYWJsZXNKU09OIiwiZGVjbGFyZWRWYXJpYWJsZXNUb0RlY2xhcmVkVmFyaWFibGVzSlNPTiIsImRlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04iLCJkZWNsYXJlZE1ldGF2YXJpYWJsZXNUb0RlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04iLCJnZXRGaWxlQ29udGVudCIsImZyb21GaWxlIiwiZmlsZSIsInJlbGVhc2VDb250ZXh0IiwiY29tYmluZWRDdXN0b21HcmFtbWFyIiwiZ2V0Q29tYmluZWRDdXN0b21HcmFtbWFyIiwibm9taW5hbExleGVyIiwiTm9taW5hbExleGVyIiwibm9taW5hbFBhcnNlciIsIk5vbWluYWxQYXJzZXIiLCJub21pbmFsRmlsZUNvbnRleHQiLCJmcm9tSlNPTiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBNkNBOzs7ZUFBcUJBOzs7MkJBM0NVO2dDQUNlOzhEQUVyQjsr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
@@ -282,9 +282,9 @@ const _default = (0, _elements.define)(class Type extends _occamlanguages.Elemen
282
282
  prefixName
283
283
  };
284
284
  if (!abridged) {
285
- const closedJSON = (0, _json.closedToClosedJSON)(this.closed), superTypesJSON = (0, _json.superTypesToSuperTypesJSON)(this.superTypes), propertiesJSON = (0, _json.propertiesToPropertiesJSON)(this.properties), provisinoalJSOM = (0, _json.provisionalToProvisionalJSON)(this.provisional), superTypes = superTypesJSON, properties = propertiesJSON, provisional = provisinoalJSOM; ///
285
+ const closedJSON = (0, _json.closedToClosedJSON)(this.closed), superTypesJSON = (0, _json.superTypesToSuperTypesJSON)(this.superTypes), propertiesJSON = (0, _json.propertiesToPropertiesJSON)(this.properties), provisinoalJSOM = (0, _json.provisionalToProvisionalJSON)(this.provisional), closed = closedJSON, superTypes = superTypesJSON, properties = propertiesJSON, provisional = provisinoalJSOM; ///
286
286
  Object.assign(json, {
287
- closedJSON,
287
+ closed,
288
288
  superTypes,
289
289
  properties,
290
290
  provisional
@@ -299,12 +299,6 @@ const _default = (0, _elements.define)(class Type extends _occamlanguages.Elemen
299
299
  const { string } = json, typeNode = (0, _instantiate.instantiateType)(string, context), node = typeNode, breakPoint = null, name = (0, _element.nameFromTypeNode)(typeNode, context), closed = (0, _json.closedFromJSON)(json, context), prefixName = (0, _json.prefixNameFromJSON)(json, context), superTypes = (0, _json.superTypesFromJSON)(json, context), properties = (0, _json.propertiesFromJSON)(json, context), provisional = (0, _json.provisionalFromJSON)(json);
300
300
  context = null; ///
301
301
  type = new Type(context, string, node, breakPoint, name, closed, prefixName, superTypes, properties, provisional);
302
- properties.forEach((property)=>{
303
- const propertyType = property.getType();
304
- if (propertyType === null) {
305
- property.setType(type);
306
- }
307
- });
308
302
  }, context);
309
303
  return type;
310
304
  }
@@ -316,4 +310,4 @@ const _default = (0, _elements.define)(class Type extends _occamlanguages.Elemen
316
310
  }
317
311
  });
318
312
 
319
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3R5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVR5cGUgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgQkFTRV9UWVBFX1NZTUJPTCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG5hbWVGcm9tVHlwZU5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IGJhc2VUeXBlRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3R5cGVcIjtcbmltcG9ydCB7IGNsb3NlZEZyb21KU09OLFxuICAgICAgICAgbmFtZVRvTmFtZUpTT04sXG4gICAgICAgICBjbG9zZWRUb0Nsb3NlZEpTT04sXG4gICAgICAgICBwcm9wZXJ0aWVzRnJvbUpTT04sXG4gICAgICAgICBwcmVmaXhOYW1lRnJvbUpTT04sXG4gICAgICAgICBzdXBlclR5cGVzRnJvbUpTT04sXG4gICAgICAgICBwcm92aXNpb25hbEZyb21KU09OLFxuICAgICAgICAgcHJlZml4TmFtZVRvUHJldml4TmFtZUpTT04sXG4gICAgICAgICBzdXBlclR5cGVzVG9TdXBlclR5cGVzSlNPTixcbiAgICAgICAgIHByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OLFxuICAgICAgICAgcHJvdmlzaW9uYWxUb1Byb3Zpc2lvbmFsSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5jb25zdCB7IGFsbCB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyB1bmJyZWFrYWJsZSB9ID0gYnJlYWtQb2ludFV0aWxpdGllcyxcbiAgICAgIHsgcHVzaCwgaW50ZXJzZWN0aW9uIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFR5cGUgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lLCBjbG9zZWQsIHByZWZpeE5hbWUsIHN1cGVyVHlwZXMsIHByb3BlcnRpZXMsIHByb3Zpc2lvbmFsKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5jbG9zZWQgPSBjbG9zZWQ7XG4gICAgdGhpcy5wcmVmaXhOYW1lID0gcHJlZml4TmFtZTtcbiAgICB0aGlzLnN1cGVyVHlwZXMgPSBzdXBlclR5cGVzO1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgdGhpcy5wcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgaXNDbG9zZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VkO1xuICB9XG5cbiAgZ2V0UHJlZml4TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVmaXhOYW1lO1xuICB9XG5cbiAgZ2V0U3VwZXJUeXBlcygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXBlclR5cGVzO1xuICB9XG5cbiAgZ2V0VHlwZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHR5cGVOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGVOb2RlO1xuICB9XG5cbiAgZ2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzID0gW10pIHtcbiAgICBwdXNoKHByb3BlcnRpZXMsIHRoaXMucHJvcGVydGllcyk7XG5cbiAgICB0aGlzLnN1cGVyVHlwZXMuZm9yRWFjaCgoc3VwZXJUeXBlKSA9PiB7XG4gICAgICBjb25zdCBzdXBlclR5cGVQcm9wZXJ0aWVzID0gc3VwZXJUeXBlLmdldFByb3BlcnRpZXMoKTtcblxuICAgICAgcHVzaChwcm9wZXJ0aWVzLCBzdXBlclR5cGVQcm9wZXJ0aWVzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgaXNQcm92aXNpb25hbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aXNpb25hbDtcbiAgfVxuXG4gIHNldE5hbWUobmFtZSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBzZXRDbG9zZWQoY2xvc2VkKSB7XG4gICAgdGhpcy5jbG9zZWQgPSBjbG9zZWQ7XG4gIH1cblxuICBzZXRQcmVmaXhOYW1lKHByZWZpeE5hbWUpIHtcbiAgICB0aGlzLnByZWZpeE5hbWUgPSBwcmVmaXhOYW1lO1xuICB9XG5cbiAgc2V0U3VwZXJUeXBlcyhzdXBlclR5cGVzKSB7XG4gICAgdGhpcy5zdXBlclR5cGVzID0gc3VwZXJUeXBlcztcbiAgfVxuXG4gIHNldFByb3BlcnRpZXMocHJvcGVydGllcykge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBzZXRQcm92aXNpb25hbChwcm92aXNpb25hbCkge1xuICAgIHRoaXMucHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbDtcbiAgfVxuXG4gIHNldFN1cGVyVHlwZShzdXBlclR5cGUpIHtcbiAgICB0aGlzLnN1cGVyVHlwZXMgPSBbXG4gICAgICBzdXBlclR5cGVcbiAgICBdO1xuICB9XG5cbiAgaXNPcGVuKCkge1xuICAgIGNvbnN0IG9wZW4gPSAhdGhpcy5jbG9zZWQ7XG5cbiAgICByZXR1cm4gb3BlbjtcbiAgfVxuXG4gIGlzQmFzZVR5cGUoKSB7XG4gICAgbGV0IGJhc2VUeXBlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5uYW1lID09PSBCQVNFX1RZUEVfU1lNQk9MKSB7XG4gICAgICBiYXNlVHlwZSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUeXBlO1xuICB9XG5cbiAgaXNFc3RhYmxpc2hlZCgpIHtcbiAgICBjb25zdCBwcm92aXNpb25hbCA9IHRoaXMuaXNQcm92aXNpb25hbCgpLFxuICAgICAgICAgIGVzdGFibGlzaGVkID0gIXByb3Zpc2lvbmFsO1xuXG4gICAgcmV0dXJuIGVzdGFibGlzaGVkO1xuICB9XG5cbiAgcmV0cmlldmVBbmNlc3RvclR5cGVzKGFuY2VzdG9yVHlwZXMgPSBbXSkge1xuICAgIGNvbnN0IGJhc2VUeXBlID0gdGhpcy5pc0Jhc2VUeXBlKCk7XG5cbiAgICBpZiAoIWJhc2VUeXBlKSB7XG4gICAgICBjb25zdCBhbmNlc3RvclR5cGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgICBhbmNlc3RvclR5cGVzSW5jbHVkZUFuY2VzdG9yVHlwZSA9IGFuY2VzdG9yVHlwZXMuaW5jbHVkZXMoYW5jZXN0b3JUeXBlKTtcblxuICAgICAgaWYgKCFhbmNlc3RvclR5cGVzSW5jbHVkZUFuY2VzdG9yVHlwZSkge1xuICAgICAgICBhbmNlc3RvclR5cGVzLnB1c2goYW5jZXN0b3JUeXBlKTtcblxuICAgICAgICB0aGlzLnN1cGVyVHlwZXMuZm9yRWFjaCgoc3VwZXJUeXBlKSA9PiB7XG4gICAgICAgICAgc3VwZXJUeXBlLnJldHJpZXZlQW5jZXN0b3JUeXBlcyhhbmNlc3RvclR5cGVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9yVHlwZXM7XG4gIH1cblxuICBpc1N0cmljdCgpIHtcbiAgICBjb25zdCBwcmVmaXhlZCA9IHRoaXMuaXNQcmVmaXhlZCgpLFxuICAgICAgICAgIHN0cmljdCA9ICFwcmVmaXhlZDtcblxuICAgIHJldHVybiBzdHJpY3Q7XG4gIH1cblxuICBpc0NvdHlwZSgpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKCksXG4gICAgICAgICAgcHJvcGVydGllc0xlbmd0aCA9IHByb3BlcnRpZXMubGVuZ3RoLFxuICAgICAgICAgIGNvdHlwZSA9IChwcm9wZXJ0aWVzTGVuZ3RoID4gMCk7XG5cbiAgICByZXR1cm4gY290eXBlO1xuICB9XG5cbiAgaXNQcmVmaXhlZCgpIHtcbiAgICBjb25zdCBwcmVmaXhlZCA9ICh0aGlzLnByZWZpeE5hbWUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHByZWZpeGVkO1xuICB9XG5cbiAgZ2V0UHJlZml4ZWRUeXBlTmFtZSgpIHtcbiAgICBsZXQgcHJlZml4ZWRUeXBlTmFtZSA9IG51bGw7XG5cbiAgICBjb25zdCBwcmVmaXhlZCA9IHRoaXMuaXNQcmVmaXhlZCgpO1xuXG4gICAgaWYgKHByZWZpeGVkKSB7XG4gICAgICBwcmVmaXhlZFR5cGVOYW1lID0gYCR7dGhpcy5wcmVmaXhOYW1lfSR7dGhpcy5uYW1lfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZWZpeGVkVHlwZU5hbWU7XG4gIH1cblxuICBpc0pvaW5lZFRvKHR5cGUpIHtcbiAgICBsZXQgam9pbmVkVG8gPSBmYWxzZTtcblxuICAgIGNvbnN0IGFuY2VzdG9yVHlwZXMgPSB0aGlzLnJldHJpZXZlQW5jZXN0b3JUeXBlcygpLFxuICAgICAgICAgIHR5cGVBbmNlc3RvclR5cGVzID0gdHlwZS5yZXRyaWV2ZUFuY2VzdG9yVHlwZXMoKSxcbiAgICAgICAgICBpbnRlcnNlY3RpbmdBbmNlc3RvclR5cGVzID0gaW50ZXJzZWN0aW9uKGFuY2VzdG9yVHlwZXMsIHR5cGVBbmNlc3RvclR5cGVzLCAoYW5jZXN0b3JUeXBlLCB0eXBlQW5jZXN0b3JUeXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhbmNlc3RvclR5cGVFcXVhbFRvQVR5cGVuY2VzdG9yVHlwZSA9IGFuY2VzdG9yVHlwZS5pc0VxdWFsVG8odHlwZUFuY2VzdG9yVHlwZSk7XG5cbiAgICAgICAgICAgIGlmIChhbmNlc3RvclR5cGVFcXVhbFRvQVR5cGVuY2VzdG9yVHlwZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBpbnRlcnNlY3RpbmdBbmNlc3RvclR5cGVzTGVuZ3RoID0gaW50ZXJzZWN0aW5nQW5jZXN0b3JUeXBlcy5sZW5ndGg7XG5cbiAgICBpZiAoaW50ZXJzZWN0aW5nQW5jZXN0b3JUeXBlc0xlbmd0aCA+IDApIHtcbiAgICAgIGpvaW5lZFRvID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gam9pbmVkVG87XG4gIH1cblxuICBpc0VxdWFsVG8odHlwZSkge1xuICAgIGNvbnN0IGVxdWFsVG8gPSAodGhpcyA9PT0gdHlwZSk7XG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGlzU3ViVHlwZU9mKHR5cGUpIHtcbiAgICBsZXQgc3ViVHlwZU9mO1xuXG4gICAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCk7XG5cbiAgICBpZiAodGhpcyA9PT0gYmFzZVR5cGUpIHtcbiAgICAgIHN1YlR5cGVPZiA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdWJUeXBlT2YgPSB0aGlzLnN1cGVyVHlwZXMuc29tZSgoc3VwZXJUeXBlKSA9PiB7IC8vL1xuICAgICAgICBpZiAoc3VwZXJUeXBlID09PSB0eXBlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdXBlclR5cGVTdWJUeXBlT2ZUeXBlID0gc3VwZXJUeXBlLmlzU3ViVHlwZU9mKHR5cGUpO1xuXG4gICAgICAgIGlmIChzdXBlclR5cGVTdWJUeXBlT2ZUeXBlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YlR5cGVPZjtcbiAgfVxuXG4gIGlzU3VwZXJUeXBlT2YodHlwZSkge1xuICAgIGNvbnN0IHN1YlR5cGVPZiA9IHR5cGUuaXNTdWJUeXBlT2YodGhpcyksXG4gICAgICAgICAgc3VwZXJUeXBlT2YgPSBzdWJUeXBlT2Y7ICAvLy9cblxuICAgIHJldHVybiBzdXBlclR5cGVPZjtcbiAgfVxuXG4gIGlzRXF1YWxUb09yU3ViVHlwZU9mKHR5cGUpIHtcbiAgICBjb25zdCBlcXVhbFRvID0gdGhpcy5pc0VxdWFsVG8odHlwZSksXG4gICAgICAgICAgc3ViVHlwZU9mID0gdGhpcy5pc1N1YlR5cGVPZih0eXBlKSxcbiAgICAgICAgICBlcXVhbFRvT3JTdWJUeXBlT2YgPSAoZXF1YWxUbyB8fCBzdWJUeXBlT2YpO1xuXG4gICAgcmV0dXJuIGVxdWFsVG9PclN1YlR5cGVPZjtcbiAgfVxuXG4gIGlzRXF1YWxUb09yU3VwZXJUeXBlT2YodHlwZSkge1xuICAgIGNvbnN0IGVxdWFsVG8gPSB0aGlzLmlzRXF1YWxUbyh0eXBlKSxcbiAgICAgICAgICBzdXBlclR5cGVPZiA9IHRoaXMuaXNTdXBlclR5cGVPZih0eXBlKSxcbiAgICAgICAgICBlcXVhbFRvT3JTdXBlclR5cGVPZiA9IChlcXVhbFRvIHx8IHN1cGVyVHlwZU9mKTtcblxuICAgIHJldHVybiBlcXVhbFRvT3JTdXBlclR5cGVPZjtcbiAgfVxuXG4gIGlzRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mKHR5cGUpIHtcbiAgICBjb25zdCBlcXVhbFRvID0gdGhpcy5pc0VxdWFsVG8odHlwZSksXG4gICAgICAgICAgc3ViVHlwZU9mID0gdGhpcy5pc1N1YlR5cGVPZih0eXBlKSxcbiAgICAgICAgICBzdXBlclR5cGVPZiA9IHRoaXMuaXNTdXBlclR5cGVPZih0eXBlKSxcbiAgICAgICAgICBlcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2YgPSAoZXF1YWxUbyB8fCBzdWJUeXBlT2YgfHwgc3VwZXJUeXBlT2YpO1xuXG4gICAgcmV0dXJuIGVxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZjtcbiAgfVxuXG4gIGNvbXBhcmVUeXBlTmFtZSh0eXBlTmFtZSkge1xuICAgIGNvbnN0IG5hbWVUeXBlTmFtZSA9ICh0aGlzLm5hbWUgPT09IHR5cGVOYW1lKSxcbiAgICAgICAgICBjb21wYXJlc1RvVHlwZU5hbWUgPSBuYW1lVHlwZU5hbWU7ICAvLy9cblxuICAgIHJldHVybiBjb21wYXJlc1RvVHlwZU5hbWU7XG4gIH1cblxuICBjb21wYXJlUHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpIHtcbiAgICBjb25zdCBjb21wYXJlc1RvUHJvdmlzaW9uYWwgPSAocHJvdmlzaW9uYWwgPT09IHRoaXMucHJvdmlzaW9uYWwpO1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9Qcm92aXNpb25hbDtcbiAgfVxuXG4gIGNvbXBhcmVQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUpIHtcbiAgICBsZXQgY29tcGFyZXNUb1ByZWZpeGVkVHlwZU5hbWUgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByZWZpeGVkID0gdGhpcy5pc1ByZWZpeGVkKCk7XG5cbiAgICBpZiAocHJlZml4ZWQpIHtcbiAgICAgIGNvbnN0IHByZWZpeGVkVHlwZU5hbWVBID0gcHJlZml4ZWRUeXBlTmFtZTsgLy8vXG5cbiAgICAgIHByZWZpeGVkVHlwZU5hbWUgPSB0aGlzLmdldFByZWZpeGVkVHlwZU5hbWUoKTtcblxuICAgICAgY29uc3QgcHJlZml4ZWRUeXBlTmFtZUIgPSBwcmVmaXhlZFR5cGVOYW1lOyAvLy9cblxuICAgICAgaWYgKHByZWZpeGVkVHlwZU5hbWVBID09PSBwcmVmaXhlZFR5cGVOYW1lQikge1xuICAgICAgICBjb21wYXJlc1RvUHJlZml4ZWRUeXBlTmFtZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QcmVmaXhlZFR5cGVOYW1lO1xuICB9XG5cbiAgdmVyaWZ5ID0gdW5icmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCB0eXBlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZVN0cmluZ30nIHR5cGUuLi5gKTtcblxuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlKGNvbnRleHQsICh0eXBlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dHlwZVN0cmluZ30nIHR5cGUuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHR5cGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9KTtcblxuICB2YWxpZGF0ZShjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgdHlwZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlhZGluZyB0aGUgJyR7dHlwZVN0cmluZ30nIHR5cGUuLi5gKTtcblxuICAgIGNvbnN0IHR5cGUgPSBudWxsLFxuICAgICAgICAgIHZhbGlkYXRlV2hlblN0cmljdCA9IHRoaXMudmFsaWRhdGVXaGVuU3RyaWN0LmJpbmQodGhpcyksXG4gICAgICAgICAgdmFsaWRhdGVXaGVuUHJlZml4ZWQgPSB0aGlzLnZhbGlkYXRlV2hlblByZWZpeGVkLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlV2hlblN0cmljdCxcbiAgICAgIHZhbGlkYXRlV2hlblByZWZpeGVkXG4gICAgXSwgdHlwZSwgY29udGV4dCwgKHR5cGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dHlwZVN0cmluZ30nIHR5cGUuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHR5cGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIChleGNlcHRpb24pID0+IHtcbiAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC50cmFjZShgVW5hYmxlIHRvIHZhbGlkYXRlIHRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZS5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlblN0cmljdCh0eXBlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc3RyaWN0ID0gdGhpcy5pc1N0cmljdCgpO1xuXG4gICAgaWYgKCFzdHJpY3QpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKHR5cGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dHlwZVN0cmluZ30nIHN0cmljdCB0eXBlLi4uYCk7XG5cbiAgICBjb25zdCB0eXBlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgYmFzZVR5cGVDb21wYXJlVHlwZU5hbWVUeXBlTmFtZSA9IGJhc2VUeXBlLmNvbXBhcmVUeXBlTmFtZSh0eXBlTmFtZSk7XG5cbiAgICBpZiAoYmFzZVR5cGVDb21wYXJlVHlwZU5hbWVUeXBlTmFtZSkge1xuICAgICAgdHlwZSA9IGJhc2VUeXBlOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFsaXNlZFR5cGUgPSBjb250ZXh0LmZpbmRhbGlhc2VkVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICBpZiAoYWxpc2VkVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICB0eXBlID0gYWxpc2VkVHlwZTsgIC8vL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLFxuICAgICAgICAgICAgICBpbmNsdWRlRGVwZW5kZW5jaWVzID0gZmFsc2U7XG5cbiAgICAgICAgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSwgaW5jbHVkZURlcGVuZGVuY2llcyk7IC8vL1xuXG4gICAgICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICAgICAgY29udGV4dC50cmFjZShgVGhlICcke3R5cGVTdHJpbmd9JyBzdHJpY3QgdHlwZSBpcyBub3QgcHJlc2VudCBsb2NhbGx5LmApO1xuXG4gICAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dHlwZVN0cmluZ30nIHN0cmljdCB0eXBlLmApO1xuXG4gICAgcmV0dXJuIGZvcndhcmQodHlwZSwgY29udGV4dCwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5QcmVmaXhlZCh0eXBlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgcHJlZml4ZWQgPSB0aGlzLmlzUHJlZml4ZWQoKTtcblxuICAgIGlmICghcHJlZml4ZWQpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKHR5cGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dHlwZVN0cmluZ30nIHByZWZpeGVkIHR5cGUuLi5gKTtcblxuICAgIGNvbnN0IHByZWZpeGVkVHlwZU5hbWUgPSB0aGlzLmdldFByZWZpeGVkVHlwZU5hbWUoKSxcbiAgICAgICAgICBpbmNsdWRlUmVsZWFzZSA9IHRydWU7XG5cbiAgICBsZXQgaW5jbHVkZURlcGVuZGVuY2llcztcblxuICAgIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKTtcblxuICAgIGlmICh0eXBlUHJlc2VudCkge1xuICAgICAgY29udGV4dC50cmFjZShgVGhlICcke3R5cGVTdHJpbmd9JyBwcmVmaXhlZCB0eXBlIGlzIHByZXNlbnQgbG9jYWxseS5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZTtcblxuICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKTtcblxuICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGBUaGUgJyR7dHlwZVN0cmluZ30nIHByZWZpeGVkIHR5cGUgaXMgbm90IHByZXNlbnQgZ2xvYmFsbHkuYCk7XG5cbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHt0eXBlU3RyaW5nfScgcHJlZml4ZWQgdHlwZS5gKTtcblxuICAgIHJldHVybiBmb3J3YXJkKHR5cGUsIGNvbnRleHQsIGJhY2spO1xuICB9XG5cbiAgdG9KU09OKGFicmlkZ2VkID0gZmFsc2UpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLFxuICAgICAgICAgIG5hbWVKU09OID0gbmFtZVRvTmFtZUpTT04odGhpcy5uYW1lKSxcbiAgICAgICAgICBwcmVmaXhOYW1lSlNPTiA9IHByZWZpeE5hbWVUb1ByZXZpeE5hbWVKU09OKHRoaXMucHJlZml4TmFtZSksXG4gICAgICAgICAgbmFtZSA9IG5hbWVKU09OLCAgLy8vXG4gICAgICAgICAgcHJlZml4TmFtZSA9IHByZWZpeE5hbWVKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgbmFtZSxcbiAgICAgIHByZWZpeE5hbWVcbiAgICB9O1xuXG4gICAgaWYgKCFhYnJpZGdlZCkge1xuICAgICAgY29uc3QgY2xvc2VkSlNPTiA9IGNsb3NlZFRvQ2xvc2VkSlNPTih0aGlzLmNsb3NlZCksXG4gICAgICAgICAgICBzdXBlclR5cGVzSlNPTiA9IHN1cGVyVHlwZXNUb1N1cGVyVHlwZXNKU09OKHRoaXMuc3VwZXJUeXBlcyksXG4gICAgICAgICAgICBwcm9wZXJ0aWVzSlNPTiA9IHByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OKHRoaXMucHJvcGVydGllcyksXG4gICAgICAgICAgICBwcm92aXNpbm9hbEpTT00gPSBwcm92aXNpb25hbFRvUHJvdmlzaW9uYWxKU09OKHRoaXMucHJvdmlzaW9uYWwpLFxuICAgICAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNKU09OLCAgLy8vXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllc0pTT04sICAvLy9cbiAgICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW5vYWxKU09NOyAgLy8vXG5cbiAgICAgIE9iamVjdC5hc3NpZ24oanNvbiwge1xuICAgICAgICBjbG9zZWRKU09OLFxuICAgICAgICBzdXBlclR5cGVzLFxuICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICBwcm92aXNpb25hbFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiVHlwZVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IHR5cGU7XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICB0eXBlTm9kZSA9IGluc3RhbnRpYXRlVHlwZShzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgY2xvc2VkID0gY2xvc2VkRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgICBwcmVmaXhOYW1lID0gcHJlZml4TmFtZUZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUpTT04oanNvbik7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsOyAvLy9cblxuICAgICAgdHlwZSA9IG5ldyBUeXBlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgY2xvc2VkLCBwcmVmaXhOYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCk7XG5cbiAgICAgIHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlUeXBlID0gcHJvcGVydHkuZ2V0VHlwZSgpO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0eVR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgICBwcm9wZXJ0eS5zZXRUeXBlKHR5cGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3RhdGljIGZyb21OYW1lKG5hbWUsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBuYW1lLCAgLy8vXG4gICAgICAgICAgbm9kZSA9IG51bGwsXG4gICAgICAgICAgY2xvc2VkID0gbnVsbCxcbiAgICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgICBwcmVmaXhOYW1lID0gbnVsbCxcbiAgICAgICAgICBzdXBlclR5cGVzID0gW10sXG4gICAgICAgICAgcHJvcGVydGllcyA9IFtdLFxuICAgICAgICAgIHByb3Zpc2lvbmFsID0gZmFsc2U7XG5cbiAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgIGNvbnN0IHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGNsb3NlZCwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImFsbCIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsInVuYnJlYWthYmxlIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsInB1c2giLCJpbnRlcnNlY3Rpb24iLCJhcnJheVV0aWxpdGllcyIsImRlZmluZSIsIlR5cGUiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibmFtZSIsImNsb3NlZCIsInByZWZpeE5hbWUiLCJzdXBlclR5cGVzIiwicHJvcGVydGllcyIsInByb3Zpc2lvbmFsIiwiZ2V0TmFtZSIsImlzQ2xvc2VkIiwiZ2V0UHJlZml4TmFtZSIsImdldFN1cGVyVHlwZXMiLCJnZXRUeXBlTm9kZSIsImdldE5vZGUiLCJ0eXBlTm9kZSIsImdldFByb3BlcnRpZXMiLCJmb3JFYWNoIiwic3VwZXJUeXBlIiwic3VwZXJUeXBlUHJvcGVydGllcyIsImlzUHJvdmlzaW9uYWwiLCJzZXROYW1lIiwic2V0Q2xvc2VkIiwic2V0UHJlZml4TmFtZSIsInNldFN1cGVyVHlwZXMiLCJzZXRQcm9wZXJ0aWVzIiwic2V0UHJvdmlzaW9uYWwiLCJzZXRTdXBlclR5cGUiLCJpc09wZW4iLCJvcGVuIiwiaXNCYXNlVHlwZSIsImJhc2VUeXBlIiwiQkFTRV9UWVBFX1NZTUJPTCIsImlzRXN0YWJsaXNoZWQiLCJlc3RhYmxpc2hlZCIsInJldHJpZXZlQW5jZXN0b3JUeXBlcyIsImFuY2VzdG9yVHlwZXMiLCJhbmNlc3RvclR5cGUiLCJhbmNlc3RvclR5cGVzSW5jbHVkZUFuY2VzdG9yVHlwZSIsImluY2x1ZGVzIiwiaXNTdHJpY3QiLCJwcmVmaXhlZCIsImlzUHJlZml4ZWQiLCJzdHJpY3QiLCJpc0NvdHlwZSIsInByb3BlcnRpZXNMZW5ndGgiLCJsZW5ndGgiLCJjb3R5cGUiLCJnZXRQcmVmaXhlZFR5cGVOYW1lIiwicHJlZml4ZWRUeXBlTmFtZSIsImlzSm9pbmVkVG8iLCJ0eXBlIiwiam9pbmVkVG8iLCJ0eXBlQW5jZXN0b3JUeXBlcyIsImludGVyc2VjdGluZ0FuY2VzdG9yVHlwZXMiLCJ0eXBlQW5jZXN0b3JUeXBlIiwiYW5jZXN0b3JUeXBlRXF1YWxUb0FUeXBlbmNlc3RvclR5cGUiLCJpc0VxdWFsVG8iLCJpbnRlcnNlY3RpbmdBbmNlc3RvclR5cGVzTGVuZ3RoIiwiZXF1YWxUbyIsImlzU3ViVHlwZU9mIiwic3ViVHlwZU9mIiwiYmFzZVR5cGVGcm9tTm90aGluZyIsInNvbWUiLCJzdXBlclR5cGVTdWJUeXBlT2ZUeXBlIiwiaXNTdXBlclR5cGVPZiIsInN1cGVyVHlwZU9mIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiLCJlcXVhbFRvT3JTdWJUeXBlT2YiLCJpc0VxdWFsVG9PclN1cGVyVHlwZU9mIiwiZXF1YWxUb09yU3VwZXJUeXBlT2YiLCJpc0VxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZiIsImVxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZiIsImNvbXBhcmVUeXBlTmFtZSIsInR5cGVOYW1lIiwibmFtZVR5cGVOYW1lIiwiY29tcGFyZXNUb1R5cGVOYW1lIiwiY29tcGFyZVByb3Zpc2lvbmFsIiwiY29tcGFyZXNUb1Byb3Zpc2lvbmFsIiwiY29tcGFyZVByZWZpeGVkVHlwZU5hbWUiLCJjb21wYXJlc1RvUHJlZml4ZWRUeXBlTmFtZSIsInByZWZpeGVkVHlwZU5hbWVBIiwicHJlZml4ZWRUeXBlTmFtZUIiLCJ2ZXJpZnkiLCJmb3J3YXJkIiwiYmFjayIsInR5cGVTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZhbGlkYXRlIiwiZGVidWciLCJ2YWxpZGF0ZVdoZW5TdHJpY3QiLCJiaW5kIiwidmFsaWRhdGVXaGVuUHJlZml4ZWQiLCJleGNlcHRpb24iLCJiYXNlVHlwZUNvbXBhcmVUeXBlTmFtZVR5cGVOYW1lIiwiYWxpc2VkVHlwZSIsImZpbmRhbGlhc2VkVHlwZUJ5VHlwZU5hbWUiLCJpbmNsdWRlUmVsZWFzZSIsImluY2x1ZGVEZXBlbmRlbmNpZXMiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJ0eXBlUHJlc2VudCIsImlzVHlwZVByZXNlbnRCeVByZWZpeGVkVHlwZU5hbWUiLCJmaW5kVHlwZUJ5UHJlZml4ZWRUeXBlTmFtZSIsInRvSlNPTiIsImFicmlkZ2VkIiwibmFtZUpTT04iLCJuYW1lVG9OYW1lSlNPTiIsInByZWZpeE5hbWVKU09OIiwicHJlZml4TmFtZVRvUHJldml4TmFtZUpTT04iLCJqc29uIiwiY2xvc2VkSlNPTiIsImNsb3NlZFRvQ2xvc2VkSlNPTiIsInN1cGVyVHlwZXNKU09OIiwic3VwZXJUeXBlc1RvU3VwZXJUeXBlc0pTT04iLCJwcm9wZXJ0aWVzSlNPTiIsInByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OIiwicHJvdmlzaW5vYWxKU09NIiwicHJvdmlzaW9uYWxUb1Byb3Zpc2lvbmFsSlNPTiIsIk9iamVjdCIsImFzc2lnbiIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZVR5cGUiLCJuYW1lRnJvbVR5cGVOb2RlIiwiY2xvc2VkRnJvbUpTT04iLCJwcmVmaXhOYW1lRnJvbUpTT04iLCJzdXBlclR5cGVzRnJvbUpTT04iLCJwcm9wZXJ0aWVzRnJvbUpTT04iLCJwcm92aXNpb25hbEZyb21KU09OIiwicHJvcGVydHkiLCJwcm9wZXJ0eVR5cGUiLCJnZXRU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
313
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3R5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVR5cGUgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgQkFTRV9UWVBFX1NZTUJPTCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG5hbWVGcm9tVHlwZU5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IGJhc2VUeXBlRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3R5cGVcIjtcbmltcG9ydCB7IGNsb3NlZEZyb21KU09OLFxuICAgICAgICAgbmFtZVRvTmFtZUpTT04sXG4gICAgICAgICBjbG9zZWRUb0Nsb3NlZEpTT04sXG4gICAgICAgICBwcm9wZXJ0aWVzRnJvbUpTT04sXG4gICAgICAgICBwcmVmaXhOYW1lRnJvbUpTT04sXG4gICAgICAgICBzdXBlclR5cGVzRnJvbUpTT04sXG4gICAgICAgICBwcm92aXNpb25hbEZyb21KU09OLFxuICAgICAgICAgcHJlZml4TmFtZVRvUHJldml4TmFtZUpTT04sXG4gICAgICAgICBzdXBlclR5cGVzVG9TdXBlclR5cGVzSlNPTixcbiAgICAgICAgIHByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OLFxuICAgICAgICAgcHJvdmlzaW9uYWxUb1Byb3Zpc2lvbmFsSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5jb25zdCB7IGFsbCB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyB1bmJyZWFrYWJsZSB9ID0gYnJlYWtQb2ludFV0aWxpdGllcyxcbiAgICAgIHsgcHVzaCwgaW50ZXJzZWN0aW9uIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFR5cGUgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lLCBjbG9zZWQsIHByZWZpeE5hbWUsIHN1cGVyVHlwZXMsIHByb3BlcnRpZXMsIHByb3Zpc2lvbmFsKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5jbG9zZWQgPSBjbG9zZWQ7XG4gICAgdGhpcy5wcmVmaXhOYW1lID0gcHJlZml4TmFtZTtcbiAgICB0aGlzLnN1cGVyVHlwZXMgPSBzdXBlclR5cGVzO1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgdGhpcy5wcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgaXNDbG9zZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VkO1xuICB9XG5cbiAgZ2V0UHJlZml4TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVmaXhOYW1lO1xuICB9XG5cbiAgZ2V0U3VwZXJUeXBlcygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXBlclR5cGVzO1xuICB9XG5cbiAgZ2V0VHlwZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHR5cGVOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGVOb2RlO1xuICB9XG5cbiAgZ2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzID0gW10pIHtcbiAgICBwdXNoKHByb3BlcnRpZXMsIHRoaXMucHJvcGVydGllcyk7XG5cbiAgICB0aGlzLnN1cGVyVHlwZXMuZm9yRWFjaCgoc3VwZXJUeXBlKSA9PiB7XG4gICAgICBjb25zdCBzdXBlclR5cGVQcm9wZXJ0aWVzID0gc3VwZXJUeXBlLmdldFByb3BlcnRpZXMoKTtcblxuICAgICAgcHVzaChwcm9wZXJ0aWVzLCBzdXBlclR5cGVQcm9wZXJ0aWVzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgaXNQcm92aXNpb25hbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aXNpb25hbDtcbiAgfVxuXG4gIHNldE5hbWUobmFtZSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBzZXRDbG9zZWQoY2xvc2VkKSB7XG4gICAgdGhpcy5jbG9zZWQgPSBjbG9zZWQ7XG4gIH1cblxuICBzZXRQcmVmaXhOYW1lKHByZWZpeE5hbWUpIHtcbiAgICB0aGlzLnByZWZpeE5hbWUgPSBwcmVmaXhOYW1lO1xuICB9XG5cbiAgc2V0U3VwZXJUeXBlcyhzdXBlclR5cGVzKSB7XG4gICAgdGhpcy5zdXBlclR5cGVzID0gc3VwZXJUeXBlcztcbiAgfVxuXG4gIHNldFByb3BlcnRpZXMocHJvcGVydGllcykge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBzZXRQcm92aXNpb25hbChwcm92aXNpb25hbCkge1xuICAgIHRoaXMucHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbDtcbiAgfVxuXG4gIHNldFN1cGVyVHlwZShzdXBlclR5cGUpIHtcbiAgICB0aGlzLnN1cGVyVHlwZXMgPSBbXG4gICAgICBzdXBlclR5cGVcbiAgICBdO1xuICB9XG5cbiAgaXNPcGVuKCkge1xuICAgIGNvbnN0IG9wZW4gPSAhdGhpcy5jbG9zZWQ7XG5cbiAgICByZXR1cm4gb3BlbjtcbiAgfVxuXG4gIGlzQmFzZVR5cGUoKSB7XG4gICAgbGV0IGJhc2VUeXBlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5uYW1lID09PSBCQVNFX1RZUEVfU1lNQk9MKSB7XG4gICAgICBiYXNlVHlwZSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUeXBlO1xuICB9XG5cbiAgaXNFc3RhYmxpc2hlZCgpIHtcbiAgICBjb25zdCBwcm92aXNpb25hbCA9IHRoaXMuaXNQcm92aXNpb25hbCgpLFxuICAgICAgICAgIGVzdGFibGlzaGVkID0gIXByb3Zpc2lvbmFsO1xuXG4gICAgcmV0dXJuIGVzdGFibGlzaGVkO1xuICB9XG5cbiAgcmV0cmlldmVBbmNlc3RvclR5cGVzKGFuY2VzdG9yVHlwZXMgPSBbXSkge1xuICAgIGNvbnN0IGJhc2VUeXBlID0gdGhpcy5pc0Jhc2VUeXBlKCk7XG5cbiAgICBpZiAoIWJhc2VUeXBlKSB7XG4gICAgICBjb25zdCBhbmNlc3RvclR5cGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgICBhbmNlc3RvclR5cGVzSW5jbHVkZUFuY2VzdG9yVHlwZSA9IGFuY2VzdG9yVHlwZXMuaW5jbHVkZXMoYW5jZXN0b3JUeXBlKTtcblxuICAgICAgaWYgKCFhbmNlc3RvclR5cGVzSW5jbHVkZUFuY2VzdG9yVHlwZSkge1xuICAgICAgICBhbmNlc3RvclR5cGVzLnB1c2goYW5jZXN0b3JUeXBlKTtcblxuICAgICAgICB0aGlzLnN1cGVyVHlwZXMuZm9yRWFjaCgoc3VwZXJUeXBlKSA9PiB7XG4gICAgICAgICAgc3VwZXJUeXBlLnJldHJpZXZlQW5jZXN0b3JUeXBlcyhhbmNlc3RvclR5cGVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9yVHlwZXM7XG4gIH1cblxuICBpc1N0cmljdCgpIHtcbiAgICBjb25zdCBwcmVmaXhlZCA9IHRoaXMuaXNQcmVmaXhlZCgpLFxuICAgICAgICAgIHN0cmljdCA9ICFwcmVmaXhlZDtcblxuICAgIHJldHVybiBzdHJpY3Q7XG4gIH1cblxuICBpc0NvdHlwZSgpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKCksXG4gICAgICAgICAgcHJvcGVydGllc0xlbmd0aCA9IHByb3BlcnRpZXMubGVuZ3RoLFxuICAgICAgICAgIGNvdHlwZSA9IChwcm9wZXJ0aWVzTGVuZ3RoID4gMCk7XG5cbiAgICByZXR1cm4gY290eXBlO1xuICB9XG5cbiAgaXNQcmVmaXhlZCgpIHtcbiAgICBjb25zdCBwcmVmaXhlZCA9ICh0aGlzLnByZWZpeE5hbWUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHByZWZpeGVkO1xuICB9XG5cbiAgZ2V0UHJlZml4ZWRUeXBlTmFtZSgpIHtcbiAgICBsZXQgcHJlZml4ZWRUeXBlTmFtZSA9IG51bGw7XG5cbiAgICBjb25zdCBwcmVmaXhlZCA9IHRoaXMuaXNQcmVmaXhlZCgpO1xuXG4gICAgaWYgKHByZWZpeGVkKSB7XG4gICAgICBwcmVmaXhlZFR5cGVOYW1lID0gYCR7dGhpcy5wcmVmaXhOYW1lfSR7dGhpcy5uYW1lfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZWZpeGVkVHlwZU5hbWU7XG4gIH1cblxuICBpc0pvaW5lZFRvKHR5cGUpIHtcbiAgICBsZXQgam9pbmVkVG8gPSBmYWxzZTtcblxuICAgIGNvbnN0IGFuY2VzdG9yVHlwZXMgPSB0aGlzLnJldHJpZXZlQW5jZXN0b3JUeXBlcygpLFxuICAgICAgICAgIHR5cGVBbmNlc3RvclR5cGVzID0gdHlwZS5yZXRyaWV2ZUFuY2VzdG9yVHlwZXMoKSxcbiAgICAgICAgICBpbnRlcnNlY3RpbmdBbmNlc3RvclR5cGVzID0gaW50ZXJzZWN0aW9uKGFuY2VzdG9yVHlwZXMsIHR5cGVBbmNlc3RvclR5cGVzLCAoYW5jZXN0b3JUeXBlLCB0eXBlQW5jZXN0b3JUeXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhbmNlc3RvclR5cGVFcXVhbFRvQVR5cGVuY2VzdG9yVHlwZSA9IGFuY2VzdG9yVHlwZS5pc0VxdWFsVG8odHlwZUFuY2VzdG9yVHlwZSk7XG5cbiAgICAgICAgICAgIGlmIChhbmNlc3RvclR5cGVFcXVhbFRvQVR5cGVuY2VzdG9yVHlwZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBpbnRlcnNlY3RpbmdBbmNlc3RvclR5cGVzTGVuZ3RoID0gaW50ZXJzZWN0aW5nQW5jZXN0b3JUeXBlcy5sZW5ndGg7XG5cbiAgICBpZiAoaW50ZXJzZWN0aW5nQW5jZXN0b3JUeXBlc0xlbmd0aCA+IDApIHtcbiAgICAgIGpvaW5lZFRvID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gam9pbmVkVG87XG4gIH1cblxuICBpc0VxdWFsVG8odHlwZSkge1xuICAgIGNvbnN0IGVxdWFsVG8gPSAodGhpcyA9PT0gdHlwZSk7XG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGlzU3ViVHlwZU9mKHR5cGUpIHtcbiAgICBsZXQgc3ViVHlwZU9mO1xuXG4gICAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCk7XG5cbiAgICBpZiAodGhpcyA9PT0gYmFzZVR5cGUpIHtcbiAgICAgIHN1YlR5cGVPZiA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdWJUeXBlT2YgPSB0aGlzLnN1cGVyVHlwZXMuc29tZSgoc3VwZXJUeXBlKSA9PiB7IC8vL1xuICAgICAgICBpZiAoc3VwZXJUeXBlID09PSB0eXBlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdXBlclR5cGVTdWJUeXBlT2ZUeXBlID0gc3VwZXJUeXBlLmlzU3ViVHlwZU9mKHR5cGUpO1xuXG4gICAgICAgIGlmIChzdXBlclR5cGVTdWJUeXBlT2ZUeXBlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YlR5cGVPZjtcbiAgfVxuXG4gIGlzU3VwZXJUeXBlT2YodHlwZSkge1xuICAgIGNvbnN0IHN1YlR5cGVPZiA9IHR5cGUuaXNTdWJUeXBlT2YodGhpcyksXG4gICAgICAgICAgc3VwZXJUeXBlT2YgPSBzdWJUeXBlT2Y7ICAvLy9cblxuICAgIHJldHVybiBzdXBlclR5cGVPZjtcbiAgfVxuXG4gIGlzRXF1YWxUb09yU3ViVHlwZU9mKHR5cGUpIHtcbiAgICBjb25zdCBlcXVhbFRvID0gdGhpcy5pc0VxdWFsVG8odHlwZSksXG4gICAgICAgICAgc3ViVHlwZU9mID0gdGhpcy5pc1N1YlR5cGVPZih0eXBlKSxcbiAgICAgICAgICBlcXVhbFRvT3JTdWJUeXBlT2YgPSAoZXF1YWxUbyB8fCBzdWJUeXBlT2YpO1xuXG4gICAgcmV0dXJuIGVxdWFsVG9PclN1YlR5cGVPZjtcbiAgfVxuXG4gIGlzRXF1YWxUb09yU3VwZXJUeXBlT2YodHlwZSkge1xuICAgIGNvbnN0IGVxdWFsVG8gPSB0aGlzLmlzRXF1YWxUbyh0eXBlKSxcbiAgICAgICAgICBzdXBlclR5cGVPZiA9IHRoaXMuaXNTdXBlclR5cGVPZih0eXBlKSxcbiAgICAgICAgICBlcXVhbFRvT3JTdXBlclR5cGVPZiA9IChlcXVhbFRvIHx8IHN1cGVyVHlwZU9mKTtcblxuICAgIHJldHVybiBlcXVhbFRvT3JTdXBlclR5cGVPZjtcbiAgfVxuXG4gIGlzRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mKHR5cGUpIHtcbiAgICBjb25zdCBlcXVhbFRvID0gdGhpcy5pc0VxdWFsVG8odHlwZSksXG4gICAgICAgICAgc3ViVHlwZU9mID0gdGhpcy5pc1N1YlR5cGVPZih0eXBlKSxcbiAgICAgICAgICBzdXBlclR5cGVPZiA9IHRoaXMuaXNTdXBlclR5cGVPZih0eXBlKSxcbiAgICAgICAgICBlcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2YgPSAoZXF1YWxUbyB8fCBzdWJUeXBlT2YgfHwgc3VwZXJUeXBlT2YpO1xuXG4gICAgcmV0dXJuIGVxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZjtcbiAgfVxuXG4gIGNvbXBhcmVUeXBlTmFtZSh0eXBlTmFtZSkge1xuICAgIGNvbnN0IG5hbWVUeXBlTmFtZSA9ICh0aGlzLm5hbWUgPT09IHR5cGVOYW1lKSxcbiAgICAgICAgICBjb21wYXJlc1RvVHlwZU5hbWUgPSBuYW1lVHlwZU5hbWU7ICAvLy9cblxuICAgIHJldHVybiBjb21wYXJlc1RvVHlwZU5hbWU7XG4gIH1cblxuICBjb21wYXJlUHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpIHtcbiAgICBjb25zdCBjb21wYXJlc1RvUHJvdmlzaW9uYWwgPSAocHJvdmlzaW9uYWwgPT09IHRoaXMucHJvdmlzaW9uYWwpO1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9Qcm92aXNpb25hbDtcbiAgfVxuXG4gIGNvbXBhcmVQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUpIHtcbiAgICBsZXQgY29tcGFyZXNUb1ByZWZpeGVkVHlwZU5hbWUgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByZWZpeGVkID0gdGhpcy5pc1ByZWZpeGVkKCk7XG5cbiAgICBpZiAocHJlZml4ZWQpIHtcbiAgICAgIGNvbnN0IHByZWZpeGVkVHlwZU5hbWVBID0gcHJlZml4ZWRUeXBlTmFtZTsgLy8vXG5cbiAgICAgIHByZWZpeGVkVHlwZU5hbWUgPSB0aGlzLmdldFByZWZpeGVkVHlwZU5hbWUoKTtcblxuICAgICAgY29uc3QgcHJlZml4ZWRUeXBlTmFtZUIgPSBwcmVmaXhlZFR5cGVOYW1lOyAvLy9cblxuICAgICAgaWYgKHByZWZpeGVkVHlwZU5hbWVBID09PSBwcmVmaXhlZFR5cGVOYW1lQikge1xuICAgICAgICBjb21wYXJlc1RvUHJlZml4ZWRUeXBlTmFtZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QcmVmaXhlZFR5cGVOYW1lO1xuICB9XG5cbiAgdmVyaWZ5ID0gdW5icmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCB0eXBlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZVN0cmluZ30nIHR5cGUuLi5gKTtcblxuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlKGNvbnRleHQsICh0eXBlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dHlwZVN0cmluZ30nIHR5cGUuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHR5cGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9KTtcblxuICB2YWxpZGF0ZShjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgdHlwZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlhZGluZyB0aGUgJyR7dHlwZVN0cmluZ30nIHR5cGUuLi5gKTtcblxuICAgIGNvbnN0IHR5cGUgPSBudWxsLFxuICAgICAgICAgIHZhbGlkYXRlV2hlblN0cmljdCA9IHRoaXMudmFsaWRhdGVXaGVuU3RyaWN0LmJpbmQodGhpcyksXG4gICAgICAgICAgdmFsaWRhdGVXaGVuUHJlZml4ZWQgPSB0aGlzLnZhbGlkYXRlV2hlblByZWZpeGVkLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlV2hlblN0cmljdCxcbiAgICAgIHZhbGlkYXRlV2hlblByZWZpeGVkXG4gICAgXSwgdHlwZSwgY29udGV4dCwgKHR5cGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dHlwZVN0cmluZ30nIHR5cGUuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHR5cGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIChleGNlcHRpb24pID0+IHtcbiAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC50cmFjZShgVW5hYmxlIHRvIHZhbGlkYXRlIHRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZS5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlblN0cmljdCh0eXBlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc3RyaWN0ID0gdGhpcy5pc1N0cmljdCgpO1xuXG4gICAgaWYgKCFzdHJpY3QpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKHR5cGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dHlwZVN0cmluZ30nIHN0cmljdCB0eXBlLi4uYCk7XG5cbiAgICBjb25zdCB0eXBlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgYmFzZVR5cGVDb21wYXJlVHlwZU5hbWVUeXBlTmFtZSA9IGJhc2VUeXBlLmNvbXBhcmVUeXBlTmFtZSh0eXBlTmFtZSk7XG5cbiAgICBpZiAoYmFzZVR5cGVDb21wYXJlVHlwZU5hbWVUeXBlTmFtZSkge1xuICAgICAgdHlwZSA9IGJhc2VUeXBlOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFsaXNlZFR5cGUgPSBjb250ZXh0LmZpbmRhbGlhc2VkVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICBpZiAoYWxpc2VkVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICB0eXBlID0gYWxpc2VkVHlwZTsgIC8vL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLFxuICAgICAgICAgICAgICBpbmNsdWRlRGVwZW5kZW5jaWVzID0gZmFsc2U7XG5cbiAgICAgICAgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSwgaW5jbHVkZURlcGVuZGVuY2llcyk7IC8vL1xuXG4gICAgICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICAgICAgY29udGV4dC50cmFjZShgVGhlICcke3R5cGVTdHJpbmd9JyBzdHJpY3QgdHlwZSBpcyBub3QgcHJlc2VudCBsb2NhbGx5LmApO1xuXG4gICAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dHlwZVN0cmluZ30nIHN0cmljdCB0eXBlLmApO1xuXG4gICAgcmV0dXJuIGZvcndhcmQodHlwZSwgY29udGV4dCwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5QcmVmaXhlZCh0eXBlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgcHJlZml4ZWQgPSB0aGlzLmlzUHJlZml4ZWQoKTtcblxuICAgIGlmICghcHJlZml4ZWQpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKHR5cGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dHlwZVN0cmluZ30nIHByZWZpeGVkIHR5cGUuLi5gKTtcblxuICAgIGNvbnN0IHByZWZpeGVkVHlwZU5hbWUgPSB0aGlzLmdldFByZWZpeGVkVHlwZU5hbWUoKSxcbiAgICAgICAgICBpbmNsdWRlUmVsZWFzZSA9IHRydWU7XG5cbiAgICBsZXQgaW5jbHVkZURlcGVuZGVuY2llcztcblxuICAgIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKTtcblxuICAgIGlmICh0eXBlUHJlc2VudCkge1xuICAgICAgY29udGV4dC50cmFjZShgVGhlICcke3R5cGVTdHJpbmd9JyBwcmVmaXhlZCB0eXBlIGlzIHByZXNlbnQgbG9jYWxseS5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZTtcblxuICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKTtcblxuICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGBUaGUgJyR7dHlwZVN0cmluZ30nIHByZWZpeGVkIHR5cGUgaXMgbm90IHByZXNlbnQgZ2xvYmFsbHkuYCk7XG5cbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHt0eXBlU3RyaW5nfScgcHJlZml4ZWQgdHlwZS5gKTtcblxuICAgIHJldHVybiBmb3J3YXJkKHR5cGUsIGNvbnRleHQsIGJhY2spO1xuICB9XG5cbiAgdG9KU09OKGFicmlkZ2VkID0gZmFsc2UpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLFxuICAgICAgICAgIG5hbWVKU09OID0gbmFtZVRvTmFtZUpTT04odGhpcy5uYW1lKSxcbiAgICAgICAgICBwcmVmaXhOYW1lSlNPTiA9IHByZWZpeE5hbWVUb1ByZXZpeE5hbWVKU09OKHRoaXMucHJlZml4TmFtZSksXG4gICAgICAgICAgbmFtZSA9IG5hbWVKU09OLCAgLy8vXG4gICAgICAgICAgcHJlZml4TmFtZSA9IHByZWZpeE5hbWVKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgbmFtZSxcbiAgICAgIHByZWZpeE5hbWVcbiAgICB9O1xuXG4gICAgaWYgKCFhYnJpZGdlZCkge1xuICAgICAgY29uc3QgY2xvc2VkSlNPTiA9IGNsb3NlZFRvQ2xvc2VkSlNPTih0aGlzLmNsb3NlZCksXG4gICAgICAgICAgICBzdXBlclR5cGVzSlNPTiA9IHN1cGVyVHlwZXNUb1N1cGVyVHlwZXNKU09OKHRoaXMuc3VwZXJUeXBlcyksXG4gICAgICAgICAgICBwcm9wZXJ0aWVzSlNPTiA9IHByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OKHRoaXMucHJvcGVydGllcyksXG4gICAgICAgICAgICBwcm92aXNpbm9hbEpTT00gPSBwcm92aXNpb25hbFRvUHJvdmlzaW9uYWxKU09OKHRoaXMucHJvdmlzaW9uYWwpLFxuICAgICAgICAgICAgY2xvc2VkID0gY2xvc2VkSlNPTiwgIC8vL1xuICAgICAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNKU09OLCAgLy8vXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllc0pTT04sICAvLy9cbiAgICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW5vYWxKU09NOyAgLy8vXG5cbiAgICAgIE9iamVjdC5hc3NpZ24oanNvbiwge1xuICAgICAgICBjbG9zZWQsXG4gICAgICAgIHN1cGVyVHlwZXMsXG4gICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgIHByb3Zpc2lvbmFsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJUeXBlXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgdHlwZTtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIHR5cGVOb2RlID0gaW5zdGFudGlhdGVUeXBlKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gdHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBjbG9zZWQgPSBjbG9zZWRGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHByZWZpeE5hbWUgPSBwcmVmaXhOYW1lRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tSlNPTihqc29uKTtcblxuICAgICAgY29udGV4dCA9IG51bGw7IC8vL1xuXG4gICAgICB0eXBlID0gbmV3IFR5cGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lLCBjbG9zZWQsIHByZWZpeE5hbWUsIHN1cGVyVHlwZXMsIHByb3BlcnRpZXMsIHByb3Zpc2lvbmFsKTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3RhdGljIGZyb21OYW1lKG5hbWUsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBuYW1lLCAgLy8vXG4gICAgICAgICAgbm9kZSA9IG51bGwsXG4gICAgICAgICAgY2xvc2VkID0gbnVsbCxcbiAgICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgICBwcmVmaXhOYW1lID0gbnVsbCxcbiAgICAgICAgICBzdXBlclR5cGVzID0gW10sXG4gICAgICAgICAgcHJvcGVydGllcyA9IFtdLFxuICAgICAgICAgIHByb3Zpc2lvbmFsID0gZmFsc2U7XG5cbiAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgIGNvbnN0IHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGNsb3NlZCwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImFsbCIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsInVuYnJlYWthYmxlIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsInB1c2giLCJpbnRlcnNlY3Rpb24iLCJhcnJheVV0aWxpdGllcyIsImRlZmluZSIsIlR5cGUiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibmFtZSIsImNsb3NlZCIsInByZWZpeE5hbWUiLCJzdXBlclR5cGVzIiwicHJvcGVydGllcyIsInByb3Zpc2lvbmFsIiwiZ2V0TmFtZSIsImlzQ2xvc2VkIiwiZ2V0UHJlZml4TmFtZSIsImdldFN1cGVyVHlwZXMiLCJnZXRUeXBlTm9kZSIsImdldE5vZGUiLCJ0eXBlTm9kZSIsImdldFByb3BlcnRpZXMiLCJmb3JFYWNoIiwic3VwZXJUeXBlIiwic3VwZXJUeXBlUHJvcGVydGllcyIsImlzUHJvdmlzaW9uYWwiLCJzZXROYW1lIiwic2V0Q2xvc2VkIiwic2V0UHJlZml4TmFtZSIsInNldFN1cGVyVHlwZXMiLCJzZXRQcm9wZXJ0aWVzIiwic2V0UHJvdmlzaW9uYWwiLCJzZXRTdXBlclR5cGUiLCJpc09wZW4iLCJvcGVuIiwiaXNCYXNlVHlwZSIsImJhc2VUeXBlIiwiQkFTRV9UWVBFX1NZTUJPTCIsImlzRXN0YWJsaXNoZWQiLCJlc3RhYmxpc2hlZCIsInJldHJpZXZlQW5jZXN0b3JUeXBlcyIsImFuY2VzdG9yVHlwZXMiLCJhbmNlc3RvclR5cGUiLCJhbmNlc3RvclR5cGVzSW5jbHVkZUFuY2VzdG9yVHlwZSIsImluY2x1ZGVzIiwiaXNTdHJpY3QiLCJwcmVmaXhlZCIsImlzUHJlZml4ZWQiLCJzdHJpY3QiLCJpc0NvdHlwZSIsInByb3BlcnRpZXNMZW5ndGgiLCJsZW5ndGgiLCJjb3R5cGUiLCJnZXRQcmVmaXhlZFR5cGVOYW1lIiwicHJlZml4ZWRUeXBlTmFtZSIsImlzSm9pbmVkVG8iLCJ0eXBlIiwiam9pbmVkVG8iLCJ0eXBlQW5jZXN0b3JUeXBlcyIsImludGVyc2VjdGluZ0FuY2VzdG9yVHlwZXMiLCJ0eXBlQW5jZXN0b3JUeXBlIiwiYW5jZXN0b3JUeXBlRXF1YWxUb0FUeXBlbmNlc3RvclR5cGUiLCJpc0VxdWFsVG8iLCJpbnRlcnNlY3RpbmdBbmNlc3RvclR5cGVzTGVuZ3RoIiwiZXF1YWxUbyIsImlzU3ViVHlwZU9mIiwic3ViVHlwZU9mIiwiYmFzZVR5cGVGcm9tTm90aGluZyIsInNvbWUiLCJzdXBlclR5cGVTdWJUeXBlT2ZUeXBlIiwiaXNTdXBlclR5cGVPZiIsInN1cGVyVHlwZU9mIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiLCJlcXVhbFRvT3JTdWJUeXBlT2YiLCJpc0VxdWFsVG9PclN1cGVyVHlwZU9mIiwiZXF1YWxUb09yU3VwZXJUeXBlT2YiLCJpc0VxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZiIsImVxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZiIsImNvbXBhcmVUeXBlTmFtZSIsInR5cGVOYW1lIiwibmFtZVR5cGVOYW1lIiwiY29tcGFyZXNUb1R5cGVOYW1lIiwiY29tcGFyZVByb3Zpc2lvbmFsIiwiY29tcGFyZXNUb1Byb3Zpc2lvbmFsIiwiY29tcGFyZVByZWZpeGVkVHlwZU5hbWUiLCJjb21wYXJlc1RvUHJlZml4ZWRUeXBlTmFtZSIsInByZWZpeGVkVHlwZU5hbWVBIiwicHJlZml4ZWRUeXBlTmFtZUIiLCJ2ZXJpZnkiLCJmb3J3YXJkIiwiYmFjayIsInR5cGVTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZhbGlkYXRlIiwiZGVidWciLCJ2YWxpZGF0ZVdoZW5TdHJpY3QiLCJiaW5kIiwidmFsaWRhdGVXaGVuUHJlZml4ZWQiLCJleGNlcHRpb24iLCJiYXNlVHlwZUNvbXBhcmVUeXBlTmFtZVR5cGVOYW1lIiwiYWxpc2VkVHlwZSIsImZpbmRhbGlhc2VkVHlwZUJ5VHlwZU5hbWUiLCJpbmNsdWRlUmVsZWFzZSIsImluY2x1ZGVEZXBlbmRlbmNpZXMiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJ0eXBlUHJlc2VudCIsImlzVHlwZVByZXNlbnRCeVByZWZpeGVkVHlwZU5hbWUiLCJmaW5kVHlwZUJ5UHJlZml4ZWRUeXBlTmFtZSIsInRvSlNPTiIsImFicmlkZ2VkIiwibmFtZUpTT04iLCJuYW1lVG9OYW1lSlNPTiIsInByZWZpeE5hbWVKU09OIiwicHJlZml4TmFtZVRvUHJldml4TmFtZUpTT04iLCJqc29uIiwiY2xvc2VkSlNPTiIsImNsb3NlZFRvQ2xvc2VkSlNPTiIsInN1cGVyVHlwZXNKU09OIiwic3VwZXJUeXBlc1RvU3VwZXJUeXBlc0pTT04iLCJwcm9wZXJ0aWVzSlNPTiIsInByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OIiwicHJvdmlzaW5vYWxKU09NIiwicHJvdmlzaW9uYWxUb1Byb3Zpc2lvbmFsSlNPTiIsIk9iamVjdCIsImFzc2lnbiIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZVR5cGUiLCJuYW1lRnJvbVR5cGVOb2RlIiwiY2xvc2VkRnJvbUpTT04iLCJwcmVmaXhOYW1lRnJvbUpTT04iLCJzdXBlclR5cGVzRnJvbUpTT04iLCJwcm9wZXJ0aWVzRnJvbUpTT04iLCJwcm92aXNpb25hbEZyb21KU09OIiwiZnJvbU5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQTJCQTs7O2VBQUE7OzsyQkF6QitCO2dDQUNxQzswQkFFN0M7eUJBQ0s7NkJBQ0k7MkJBQ0M7eUJBQ0E7c0JBQ0c7c0JBV1M7QUFFN0MsTUFBTSxFQUFFQSxHQUFHLEVBQUUsR0FBR0MscUNBQXFCLEVBQy9CLEVBQUVDLFdBQVcsRUFBRSxHQUFHQyxtQ0FBbUIsRUFDckMs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
package/lib/node/type.js CHANGED
@@ -9,8 +9,31 @@ Object.defineProperty(exports, "default", {
9
9
  }
10
10
  });
11
11
  const _occamlanguages = require("occam-languages");
12
+ const _constants = require("../constants");
12
13
  const _tokenTypes = require("../tokenTypes");
13
14
  class TypeNode extends _occamlanguages.NonTerminalNode {
15
+ getString() {
16
+ let string;
17
+ const baseType = this.isBaseType();
18
+ if (baseType) {
19
+ string = `${_constants.BASE_TYPE_SYMBOL}`;
20
+ } else {
21
+ const prefixed = this.isPrefixed(), typeName = this.getTypeName();
22
+ if (prefixed) {
23
+ const typePrefixName = this.getTypePrefixName();
24
+ string = `${typePrefixName}${typeName}`;
25
+ } else {
26
+ string = `${typeName}`;
27
+ }
28
+ }
29
+ return string;
30
+ }
31
+ isBaseType() {
32
+ const tokenType = _tokenTypes.PRIMITIVE_TOKEN_TYPE, baseType = this.someTerminalNode((terminalNode)=>{
33
+ return true;
34
+ }, tokenType);
35
+ return baseType;
36
+ }
14
37
  isPrefixed() {
15
38
  const multiplicity = this.getMultiplicity(), prefixed = multiplicity > 1;
16
39
  return prefixed;
@@ -45,4 +68,4 @@ class TypeNode extends _occamlanguages.NonTerminalNode {
45
68
  }
46
69
  }
47
70
 
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL3R5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IE5vblRlcm1pbmFsTm9kZSB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgVFlQRV9UT0tFTl9UWVBFIH0gZnJvbSBcIi4uL3Rva2VuVHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVHlwZU5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBpc1ByZWZpeGVkKCkge1xuICAgIGNvbnN0IG11bHRpcGxpY2l0eSA9IHRoaXMuZ2V0TXVsdGlwbGljaXR5KCksXG4gICAgICAgICAgcHJlZml4ZWQgPSAobXVsdGlwbGljaXR5ID4gMSk7XG5cbiAgICByZXR1cm4gcHJlZml4ZWQ7XG4gIH1cblxuICBnZXRUeXBlTmFtZSgpIHtcbiAgICBsZXQgdHlwZU5hbWU7XG5cbiAgICBjb25zdCBwcmVmaXhlZCA9IHRoaXMuaXNQcmVmaXhlZCgpLFxuICAgICAgICAgIHRva2VuVHlwZSA9IFRZUEVfVE9LRU5fVFlQRSxcbiAgICAgICAgICB0eXBlTmFtZUluZGV4ID0gcHJlZml4ZWQgPyAxIDogMDtcblxuICAgIHRoaXMuc29tZVRlcm1pbmFsTm9kZSgodGVybWluYWxOb2RlLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSB0eXBlTmFtZUluZGV4KSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gICAgICAgIHR5cGVOYW1lID0gY29udGVudDsgLy8vXG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSwgdG9rZW5UeXBlKTtcblxuICAgIHJldHVybiB0eXBlTmFtZTtcbiAgfVxuXG4gIGdldFR5cGVQcmVmaXhOYW1lKCkge1xuICAgIGxldCB0eXBlUHJlZml4TmFtZSA9IG51bGw7XG5cbiAgICBjb25zdCBwcmVmaXhlZCA9IHRoaXMuaXNQcmVmaXhlZCgpO1xuXG4gICAgaWYgKHByZWZpeGVkKSB7XG4gICAgICBjb25zdCB0b2tlblR5cGUgPSBUWVBFX1RPS0VOX1RZUEU7XG5cbiAgICAgIHRoaXMuc29tZVRlcm1pbmFsTm9kZSgodGVybWluYWxOb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gICAgICAgIHR5cGVQcmVmaXhOYW1lID0gY29udGVudDsgLy8vXG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LCB0b2tlblR5cGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlUHJlZml4TmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzT3BhY2l0eUFuZFByZWNlZGVuY2UocnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzT3BhY2l0eUFuZFByZWNlZGVuY2UoVHlwZU5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5LCBwcmVjZWRlbmNlKTsgfVxufVxuIl0sIm5hbWVzIjpbIlR5cGVOb2RlIiwiTm9uVGVybWluYWxOb2RlIiwiaXNQcmVmaXhlZCIsIm11bHRpcGxpY2l0eSIsImdldE11bHRpcGxpY2l0eSIsInByZWZpeGVkIiwiZ2V0VHlwZU5hbWUiLCJ0eXBlTmFtZSIsInRva2VuVHlwZSIsIlRZUEVfVE9LRU5fVFlQRSIsInR5cGVOYW1lSW5kZXgiLCJzb21lVGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlIiwiaW5kZXgiLCJjb250ZW50IiwiZ2V0Q29udGVudCIsImdldFR5cGVQcmVmaXhOYW1lIiwidHlwZVByZWZpeE5hbWUiLCJmcm9tUnVsZU5hbWVDaGlsZE5vZGVzT3BhY2l0eUFuZFByZWNlZGVuY2UiLCJydWxlTmFtZSIsImNoaWxkTm9kZXMiLCJvcGFjaXR5IiwicHJlY2VkZW5jZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBTUE7OztlQUFxQkE7OztnQ0FKVzs0QkFFQTtBQUVqQixNQUFNQSxpQkFBaUJDLCtCQUFlO0lBQ25EQyxhQUFhO1FBQ1gsTUFBTUMsZUFBZSxJQUFJLENBQUNDLGVBQWUsSUFDbkNDLFdBQVlGLGVBQWU7UUFFakMsT0FBT0U7SUFDVDtJQUVBQyxjQUFjO1FBQ1osSUFBSUM7UUFFSixNQUFNRixXQUFXLElBQUksQ0FBQ0gsVUFBVSxJQUMxQk0sWUFBWUMsMkJBQWUsRUFDM0JDLGdCQUFnQkwsV0FBVyxJQUFJO1FBRXJDLElBQUksQ0FBQ00sZ0JBQWdCLENBQUMsQ0FBQ0MsY0FBY0M7WUFDbkMsSUFBSUEsVUFBVUgsZUFBZTtnQkFDM0IsTUFBTUksVUFBVUYsYUFBYUcsVUFBVTtnQkFFdkNSLFdBQVdPLFNBQVMsR0FBRztnQkFFdkIsT0FBTztZQUNUO1FBQ0YsR0FBR047UUFFSCxPQUFPRDtJQUNUO0lBRUFTLG9CQUFvQjtRQUNsQixJQUFJQyxpQkFBaUI7UUFFckIsTUFBTVosV0FBVyxJQUFJLENBQUNILFVBQVU7UUFFaEMsSUFBSUcsVUFBVTtZQUNaLE1BQU1HLFlBQVlDLDJCQUFlO1lBRWpDLElBQUksQ0FBQ0UsZ0JBQWdCLENBQUMsQ0FBQ0M7Z0JBQ3JCLE1BQU1FLFVBQVVGLGFBQWFHLFVBQVU7Z0JBRXZDRSxpQkFBaUJILFNBQVMsR0FBRztnQkFFN0IsT0FBTztZQUNULEdBQUdOO1FBQ0w7UUFFQSxPQUFPUztJQUNUO0lBRUEsT0FBT0MsMkNBQTJDQyxRQUFRLEVBQUVDLFVBQVUsRUFBRUMsT0FBTyxFQUFFQyxVQUFVLEVBQUU7UUFBRSxPQUFPckIsK0JBQWUsQ0FBQ2lCLDBDQUEwQyxDQUFDbEIsVUFBVW1CLFVBQVVDLFlBQVlDLFNBQVNDO0lBQWE7QUFDek4ifQ==
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL3R5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IE5vblRlcm1pbmFsTm9kZSB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgQkFTRV9UWVBFX1NZTUJPTCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFRZUEVfVE9LRU5fVFlQRSwgUFJJTUlUSVZFX1RPS0VOX1RZUEUgfSBmcm9tIFwiLi4vdG9rZW5UeXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUeXBlTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdldFN0cmluZygpIHtcbiAgICBsZXQgc3RyaW5nO1xuXG4gICAgY29uc3QgYmFzZVR5cGUgPSB0aGlzLmlzQmFzZVR5cGUoKTtcblxuICAgIGlmIChiYXNlVHlwZSkge1xuICAgICAgc3RyaW5nID0gYCR7QkFTRV9UWVBFX1NZTUJPTH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwcmVmaXhlZCA9IHRoaXMuaXNQcmVmaXhlZCgpLFxuICAgICAgICAgICAgdHlwZU5hbWUgPSB0aGlzLmdldFR5cGVOYW1lKCk7XG5cbiAgICAgIGlmIChwcmVmaXhlZCkge1xuICAgICAgICBjb25zdCB0eXBlUHJlZml4TmFtZSA9IHRoaXMuZ2V0VHlwZVByZWZpeE5hbWUoKTtcblxuICAgICAgICBzdHJpbmcgPSBgJHt0eXBlUHJlZml4TmFtZX0ke3R5cGVOYW1lfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJpbmcgPSBgJHt0eXBlTmFtZX1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBpc0Jhc2VUeXBlKCkge1xuICAgIGNvbnN0IHRva2VuVHlwZSA9IFBSSU1JVElWRV9UT0tFTl9UWVBFLFxuICAgICAgICAgIGJhc2VUeXBlID0gdGhpcy5zb21lVGVybWluYWxOb2RlKCh0ZXJtaW5hbE5vZGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0sIHRva2VuVHlwZSk7XG5cbiAgICByZXR1cm4gYmFzZVR5cGU7XG4gIH1cblxuICBpc1ByZWZpeGVkKCkge1xuICAgIGNvbnN0IG11bHRpcGxpY2l0eSA9IHRoaXMuZ2V0TXVsdGlwbGljaXR5KCksXG4gICAgICAgICAgcHJlZml4ZWQgPSAobXVsdGlwbGljaXR5ID4gMSk7XG5cbiAgICByZXR1cm4gcHJlZml4ZWQ7XG4gIH1cblxuICBnZXRUeXBlTmFtZSgpIHtcbiAgICBsZXQgdHlwZU5hbWU7XG5cbiAgICBjb25zdCBwcmVmaXhlZCA9IHRoaXMuaXNQcmVmaXhlZCgpLFxuICAgICAgICAgIHRva2VuVHlwZSA9IFRZUEVfVE9LRU5fVFlQRSxcbiAgICAgICAgICB0eXBlTmFtZUluZGV4ID0gcHJlZml4ZWQgPyAxIDogMDtcblxuICAgIHRoaXMuc29tZVRlcm1pbmFsTm9kZSgodGVybWluYWxOb2RlLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSB0eXBlTmFtZUluZGV4KSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gICAgICAgIHR5cGVOYW1lID0gY29udGVudDsgLy8vXG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSwgdG9rZW5UeXBlKTtcblxuICAgIHJldHVybiB0eXBlTmFtZTtcbiAgfVxuXG4gIGdldFR5cGVQcmVmaXhOYW1lKCkge1xuICAgIGxldCB0eXBlUHJlZml4TmFtZSA9IG51bGw7XG5cbiAgICBjb25zdCBwcmVmaXhlZCA9IHRoaXMuaXNQcmVmaXhlZCgpO1xuXG4gICAgaWYgKHByZWZpeGVkKSB7XG4gICAgICBjb25zdCB0b2tlblR5cGUgPSBUWVBFX1RPS0VOX1RZUEU7XG5cbiAgICAgIHRoaXMuc29tZVRlcm1pbmFsTm9kZSgodGVybWluYWxOb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gICAgICAgIHR5cGVQcmVmaXhOYW1lID0gY29udGVudDsgLy8vXG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LCB0b2tlblR5cGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlUHJlZml4TmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzT3BhY2l0eUFuZFByZWNlZGVuY2UocnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzT3BhY2l0eUFuZFByZWNlZGVuY2UoVHlwZU5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5LCBwcmVjZWRlbmNlKTsgfVxufVxuIl0sIm5hbWVzIjpbIlR5cGVOb2RlIiwiTm9uVGVybWluYWxOb2RlIiwiZ2V0U3RyaW5nIiwic3RyaW5nIiwiYmFzZVR5cGUiLCJpc0Jhc2VUeXBlIiwiQkFTRV9UWVBFX1NZTUJPTCIsInByZWZpeGVkIiwiaXNQcmVmaXhlZCIsInR5cGVOYW1lIiwiZ2V0VHlwZU5hbWUiLCJ0eXBlUHJlZml4TmFtZSIsImdldFR5cGVQcmVmaXhOYW1lIiwidG9rZW5UeXBlIiwiUFJJTUlUSVZFX1RPS0VOX1RZUEUiLCJzb21lVGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlIiwibXVsdGlwbGljaXR5IiwiZ2V0TXVsdGlwbGljaXR5IiwiVFlQRV9UT0tFTl9UWVBFIiwidHlwZU5hbWVJbmRleCIsImluZGV4IiwiY29udGVudCIsImdldENvbnRlbnQiLCJmcm9tUnVsZU5hbWVDaGlsZE5vZGVzT3BhY2l0eUFuZFByZWNlZGVuY2UiLCJydWxlTmFtZSIsImNoaWxkTm9kZXMiLCJvcGFjaXR5IiwicHJlY2VkZW5jZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBT0E7OztlQUFxQkE7OztnQ0FMVzsyQkFFQzs0QkFDcUI7QUFFdkMsTUFBTUEsaUJBQWlCQywrQkFBZTtJQUNuREMsWUFBWTtRQUNWLElBQUlDO1FBRUosTUFBTUMsV0FBVyxJQUFJLENBQUNDLFVBQVU7UUFFaEMsSUFBSUQsVUFBVTtZQUNaRCxTQUFTLEdBQUdHLDJCQUFnQixFQUFFO1FBQ2hDLE9BQU87WUFDTCxNQUFNQyxXQUFXLElBQUksQ0FBQ0MsVUFBVSxJQUMxQkMsV0FBVyxJQUFJLENBQUNDLFdBQVc7WUFFakMsSUFBSUgsVUFBVTtnQkFDWixNQUFNSSxpQkFBaUIsSUFBSSxDQUFDQyxpQkFBaUI7Z0JBRTdDVCxTQUFTLEdBQUdRLGlCQUFpQkYsVUFBVTtZQUN6QyxPQUFPO2dCQUNMTixTQUFTLEdBQUdNLFVBQVU7WUFDeEI7UUFDRjtRQUVBLE9BQU9OO0lBQ1Q7SUFFQUUsYUFBYTtRQUNYLE1BQU1RLFlBQVlDLGdDQUFvQixFQUNoQ1YsV0FBVyxJQUFJLENBQUNXLGdCQUFnQixDQUFDLENBQUNDO1lBQ2hDLE9BQU87UUFDVCxHQUFHSDtRQUVULE9BQU9UO0lBQ1Q7SUFFQUksYUFBYTtRQUNYLE1BQU1TLGVBQWUsSUFBSSxDQUFDQyxlQUFlLElBQ25DWCxXQUFZVSxlQUFlO1FBRWpDLE9BQU9WO0lBQ1Q7SUFFQUcsY0FBYztRQUNaLElBQUlEO1FBRUosTUFBTUYsV0FBVyxJQUFJLENBQUNDLFVBQVUsSUFDMUJLLFlBQVlNLDJCQUFlLEVBQzNCQyxnQkFBZ0JiLFdBQVcsSUFBSTtRQUVyQyxJQUFJLENBQUNRLGdCQUFnQixDQUFDLENBQUNDLGNBQWNLO1lBQ25DLElBQUlBLFVBQVVELGVBQWU7Z0JBQzNCLE1BQU1FLFVBQVVOLGFBQWFPLFVBQVU7Z0JBRXZDZCxXQUFXYSxTQUFTLEdBQUc7Z0JBRXZCLE9BQU87WUFDVDtRQUNGLEdBQUdUO1FBRUgsT0FBT0o7SUFDVDtJQUVBRyxvQkFBb0I7UUFDbEIsSUFBSUQsaUJBQWlCO1FBRXJCLE1BQU1KLFdBQVcsSUFBSSxDQUFDQyxVQUFVO1FBRWhDLElBQUlELFVBQVU7WUFDWixNQUFNTSxZQUFZTSwyQkFBZTtZQUVqQyxJQUFJLENBQUNKLGdCQUFnQixDQUFDLENBQUNDO2dCQUNyQixNQUFNTSxVQUFVTixhQUFhTyxVQUFVO2dCQUV2Q1osaUJBQWlCVyxTQUFTLEdBQUc7Z0JBRTdCLE9BQU87WUFDVCxHQUFHVDtRQUNMO1FBRUEsT0FBT0Y7SUFDVDtJQUVBLE9BQU9hLDJDQUEyQ0MsUUFBUSxFQUFFQyxVQUFVLEVBQUVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFO1FBQUUsT0FBTzNCLCtCQUFlLENBQUN1QiwwQ0FBMEMsQ0FBQ3hCLFVBQVV5QixVQUFVQyxZQUFZQyxTQUFTQztJQUFhO0FBQ3pOIn0=
package/lib/tokenTypes.js CHANGED
@@ -15,12 +15,16 @@ _export(exports, {
15
15
  get NAME_TOKEN_TYPE () {
16
16
  return NAME_TOKEN_TYPE;
17
17
  },
18
+ get PRIMITIVE_TOKEN_TYPE () {
19
+ return PRIMITIVE_TOKEN_TYPE;
20
+ },
18
21
  get TYPE_TOKEN_TYPE () {
19
22
  return TYPE_TOKEN_TYPE;
20
23
  }
21
24
  });
22
25
  const NAME_TOKEN_TYPE = "name";
23
26
  const TYPE_TOKEN_TYPE = "type";
27
+ const PRIMITIVE_TOKEN_TYPE = "primitive";
24
28
  const IDENTIFIER_TOKEN_TYPE = "identifier";
25
29
 
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90b2tlblR5cGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgTkFNRV9UT0tFTl9UWVBFID0gXCJuYW1lXCI7XG5leHBvcnQgY29uc3QgVFlQRV9UT0tFTl9UWVBFID0gXCJ0eXBlXCI7XG5leHBvcnQgY29uc3QgSURFTlRJRklFUl9UT0tFTl9UWVBFID0gXCJpZGVudGlmaWVyXCI7XG4iXSwibmFtZXMiOlsiSURFTlRJRklFUl9UT0tFTl9UWVBFIiwiTkFNRV9UT0tFTl9UWVBFIiwiVFlQRV9UT0tFTl9UWVBFIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFJYUE7ZUFBQUE7O1FBRkFDO2VBQUFBOztRQUNBQztlQUFBQTs7O0FBRE4sTUFBTUQsa0JBQWtCO0FBQ3hCLE1BQU1DLGtCQUFrQjtBQUN4QixNQUFNRix3QkFBd0IifQ==
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90b2tlblR5cGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgTkFNRV9UT0tFTl9UWVBFID0gXCJuYW1lXCI7XG5leHBvcnQgY29uc3QgVFlQRV9UT0tFTl9UWVBFID0gXCJ0eXBlXCI7XG5leHBvcnQgY29uc3QgUFJJTUlUSVZFX1RPS0VOX1RZUEUgPSBcInByaW1pdGl2ZVwiO1xuZXhwb3J0IGNvbnN0IElERU5USUZJRVJfVE9LRU5fVFlQRSA9IFwiaWRlbnRpZmllclwiO1xuIl0sIm5hbWVzIjpbIklERU5USUZJRVJfVE9LRU5fVFlQRSIsIk5BTUVfVE9LRU5fVFlQRSIsIlBSSU1JVElWRV9UT0tFTl9UWVBFIiwiVFlQRV9UT0tFTl9UWVBFIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFLYUE7ZUFBQUE7O1FBSEFDO2VBQUFBOztRQUVBQztlQUFBQTs7UUFEQUM7ZUFBQUE7OztBQUROLE1BQU1GLGtCQUFrQjtBQUN4QixNQUFNRSxrQkFBa0I7QUFDeEIsTUFBTUQsdUJBQXVCO0FBQzdCLE1BQU1GLHdCQUF3QiJ9