occam-nominal 1.0.244 → 1.0.245

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.
@@ -79,7 +79,7 @@ const _default = (0, _elements.define)(class Constructor extends _occamlanguages
79
79
  }
80
80
  unifyTerm(term, context, validateForwards) {
81
81
  let termUnifies = false;
82
- const termString = term.getString(), includeType = false, constructorString = this.getString(includeType); ///
82
+ const termString = term.getString(), includeType = true, constructorString = this.getString(includeType); ///
83
83
  context.trace(`Unifying the '${termString}' term with the '${constructorString}' constructor...`);
84
84
  const constructor = this, constructorContext = constructor.getContext(), generalContext = constructorContext, specifiContext = context, termUnifiesWithConstructor = (0, _unify.unifyTermWithConstructor)(term, constructor, generalContext, specifiContext);
85
85
  if (termUnifiesWithConstructor) {
@@ -126,4 +126,4 @@ const _default = (0, _elements.define)(class Constructor extends _occamlanguages
126
126
  }
127
127
  });
128
128
 
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbnN0cnVjdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlQ29uc3RydWN0b3IgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvciB9IGZyb20gXCIuLi9wcm9jZXNzL3VuaWZ5XCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVRlcm1Bc0NvbnN0cnVjdG9yIH0gZnJvbSBcIi4uL3Byb2Nlc3MvdmFsaWRhdGVcIjtcbmltcG9ydCB7IHR5cGVGcm9tSlNPTiwgdHlwZVRvVHlwZUpTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcbmltcG9ydCB7IGF0dGVtcHQsIHNlcmlhbGlzZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9icmVha1BvaW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBDb25zdHJ1Y3RvciBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0Q29uc3RydWN0b3JOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBjb25zdHJ1Y3Rvck5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gY29uc3RydWN0b3JOb2RlO1xuICB9XG5cbiAgZ2V0U3RyaW5nKGluY2x1ZGVUeXBlID0gdHJ1ZSkge1xuICAgIGxldCBzdHJpbmc7XG5cbiAgICBpZiAoaW5jbHVkZVR5cGUpIHtcbiAgICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0aGlzLnRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICB0eXBlU3RyaW5nID0gdGhpcy50eXBlLmdldFN0cmluZygpO1xuXG4gICAgICBzdHJpbmcgPSBgJHt0ZXJtU3RyaW5nfS4ke3R5cGVTdHJpbmd9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyaW5nID0gc3VwZXIuZ2V0U3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHNldFR5cGUodHlwZSkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gIH1cblxuICB2ZXJpZnkoY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgaW5jbHVkZVR5cGUgPSBmYWxzZSxcbiAgICAgICAgICBjb25zdHJ1Y3RvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKGluY2x1ZGVUeXBlKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci4uLmApO1xuXG4gICAgYXR0ZW1wdCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgdGVybVZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVUZXJtKGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybVZhbGlkYXRlcykge1xuICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgICB0aGlzLmNvbW1pdChjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVzO1xuICB9XG5cbiAgdmFsaWRhdGVUZXJtKGNvbnRleHQpIHtcbiAgICBsZXQgdGVybVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgaW5jbHVkZVR5cGUgPSBmYWxzZSxcbiAgICAgICAgICBjb25zdHJ1Y3RvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKGluY2x1ZGVUeXBlKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyB0ZXJtLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtVmFsaWRhdGVzQXNDb25zdHJ1Y3RvciA9IHZhbGlkYXRlVGVybUFzQ29uc3RydWN0b3IodGhpcy50ZXJtLCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVmFsaWRhdGVzQXNDb25zdHJ1Y3Rvcikge1xuICAgICAgdGVybVZhbGlkYXRlcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3RvcidzIHRlcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1WYWxpZGF0ZXM7XG4gIH1cblxuICB1bmlmeVRlcm0odGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICAgIGxldCB0ZXJtVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgaW5jbHVkZVR5cGUgPSBmYWxzZSxcbiAgICAgICAgICBjb25zdHJ1Y3RvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKGluY2x1ZGVUeXBlKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHdpdGggdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IuLi5gKTtcblxuICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gdGhpcywgLy8vXG4gICAgICAgICAgY29uc3RydWN0b3JDb250ZXh0ID0gY29uc3RydWN0b3IuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gY29uc3RydWN0b3JDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3BlY2lmaUNvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciA9IHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3Rvcih0ZXJtLCBjb25zdHJ1Y3RvciwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmlDb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3Rvcikge1xuICAgICAgY29uc3QgcHJvdmlzaW9uYWwgPSB0aGlzLnR5cGUuaXNQcm92aXNpb25hbCgpO1xuXG4gICAgICB0ZXJtLnNldFR5cGUodGhpcy50eXBlKTtcblxuICAgICAgdGVybS5zZXRQcm92aXNpb25hbChwcm92aXNpb25hbCk7XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlc0ZvcndhcmRzID0gdmFsaWRhdGVGb3J3YXJkcyh0ZXJtLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHZhbGlkYXRlc0ZvcndhcmRzKSB7XG4gICAgICAgIHRlcm1VbmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHdpdGggdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1VbmlmaWVzO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHJldHVybiBzZXJpYWxpc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgICB0eXBlSlNPTiA9IHR5cGVUb1R5cGVKU09OKHRoaXMudHlwZSksXG4gICAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7XG5cbiAgICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgICBjb25zdCB0eXBlID0gdHlwZUpTT04sICAvLy9cbiAgICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgICAgYnJlYWtQb2ludCxcbiAgICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICAgfTtcblxuICAgICAgcmV0dXJuIGpzb247XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiQ29uc3RydWN0b3JcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBjb25zdHJ1Y3RvcjtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICB1bnNlcmlhbGlzZSgoanNvbiwgY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgY29uc3RydWN0b3JOb2RlID0gaW5zdGFudGlhdGVDb25zdHJ1Y3RvcihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gY29uc3RydWN0b3JOb2RlLCAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICAgICAgY29uc3RydWN0b3IgPSBuZXcgQ29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCB0eXBlKTtcbiAgICAgIH0sIGpzb24sIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJkZWZpbmUiLCJDb25zdHJ1Y3RvciIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0ZXJtIiwidHlwZSIsImdldFRlcm0iLCJnZXRUeXBlIiwiZ2V0Q29uc3RydWN0b3JOb2RlIiwiZ2V0Tm9kZSIsImNvbnN0cnVjdG9yTm9kZSIsImdldFN0cmluZyIsImluY2x1ZGVUeXBlIiwidGVybVN0cmluZyIsInR5cGVTdHJpbmciLCJzZXRUeXBlIiwidmVyaWZ5IiwidmVyaWZpZXMiLCJjb25zdHJ1Y3RvclN0cmluZyIsInRyYWNlIiwiYXR0ZW1wdCIsInRlcm1WYWxpZGF0ZXMiLCJ2YWxpZGF0ZVRlcm0iLCJjb21taXQiLCJkZWJ1ZyIsInRlcm1WYWxpZGF0ZXNBc0NvbnN0cnVjdG9yIiwidmFsaWRhdGVUZXJtQXNDb25zdHJ1Y3RvciIsInVuaWZ5VGVybSIsInZhbGlkYXRlRm9yd2FyZHMiLCJ0ZXJtVW5pZmllcyIsImNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3JDb250ZXh0IiwiZ2V0Q29udGV4dCIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaUNvbnRleHQiLCJ0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciIsInVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvciIsInByb3Zpc2lvbmFsIiwiaXNQcm92aXNpb25hbCIsInNldFByb3Zpc2lvbmFsIiwidmFsaWRhdGVzRm9yd2FyZHMiLCJ0b0pTT04iLCJzZXJpYWxpc2UiLCJ0eXBlSlNPTiIsInR5cGVUb1R5cGVKU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZSIsImluc3RhbnRpYXRlQ29uc3RydWN0b3IiLCJicmVha1BvaW50RnJvbUpTT04iLCJ0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tSlNPTiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBYUE7OztlQUFBOzs7Z0NBWHdCOzBCQUVEOzZCQUNnQjt5QkFDQzt1QkFDQzswQkFDQztzQkFDRzt5QkFDZ0I7NEJBQ0U7TUFFL0QsV0FBZUEsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxvQkFBb0JDLHVCQUFPO0lBQ3JELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsSUFBSSxFQUFFQyxJQUFJLENBQUU7UUFDekQsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLElBQUksR0FBR0E7SUFDZDtJQUVB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
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbnN0cnVjdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlQ29uc3RydWN0b3IgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvciB9IGZyb20gXCIuLi9wcm9jZXNzL3VuaWZ5XCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVRlcm1Bc0NvbnN0cnVjdG9yIH0gZnJvbSBcIi4uL3Byb2Nlc3MvdmFsaWRhdGVcIjtcbmltcG9ydCB7IHR5cGVGcm9tSlNPTiwgdHlwZVRvVHlwZUpTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcbmltcG9ydCB7IGF0dGVtcHQsIHNlcmlhbGlzZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9icmVha1BvaW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBDb25zdHJ1Y3RvciBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0Q29uc3RydWN0b3JOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBjb25zdHJ1Y3Rvck5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gY29uc3RydWN0b3JOb2RlO1xuICB9XG5cbiAgZ2V0U3RyaW5nKGluY2x1ZGVUeXBlID0gdHJ1ZSkge1xuICAgIGxldCBzdHJpbmc7XG5cbiAgICBpZiAoaW5jbHVkZVR5cGUpIHtcbiAgICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0aGlzLnRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICB0eXBlU3RyaW5nID0gdGhpcy50eXBlLmdldFN0cmluZygpO1xuXG4gICAgICBzdHJpbmcgPSBgJHt0ZXJtU3RyaW5nfS4ke3R5cGVTdHJpbmd9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyaW5nID0gc3VwZXIuZ2V0U3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHNldFR5cGUodHlwZSkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gIH1cblxuICB2ZXJpZnkoY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgaW5jbHVkZVR5cGUgPSBmYWxzZSxcbiAgICAgICAgICBjb25zdHJ1Y3RvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKGluY2x1ZGVUeXBlKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci4uLmApO1xuXG4gICAgYXR0ZW1wdCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgdGVybVZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVUZXJtKGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybVZhbGlkYXRlcykge1xuICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgICB0aGlzLmNvbW1pdChjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVzO1xuICB9XG5cbiAgdmFsaWRhdGVUZXJtKGNvbnRleHQpIHtcbiAgICBsZXQgdGVybVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgaW5jbHVkZVR5cGUgPSBmYWxzZSxcbiAgICAgICAgICBjb25zdHJ1Y3RvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKGluY2x1ZGVUeXBlKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyB0ZXJtLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtVmFsaWRhdGVzQXNDb25zdHJ1Y3RvciA9IHZhbGlkYXRlVGVybUFzQ29uc3RydWN0b3IodGhpcy50ZXJtLCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVmFsaWRhdGVzQXNDb25zdHJ1Y3Rvcikge1xuICAgICAgdGVybVZhbGlkYXRlcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3RvcidzIHRlcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1WYWxpZGF0ZXM7XG4gIH1cblxuICB1bmlmeVRlcm0odGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICAgIGxldCB0ZXJtVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgaW5jbHVkZVR5cGUgPSB0cnVlLFxuICAgICAgICAgIGNvbnN0cnVjdG9yU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoaW5jbHVkZVR5cGUpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci4uLmApO1xuXG4gICAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLCAvLy9cbiAgICAgICAgICBjb25zdHJ1Y3RvckNvbnRleHQgPSBjb25zdHJ1Y3Rvci5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBjb25zdHJ1Y3RvckNvbnRleHQsICAvLy9cbiAgICAgICAgICBzcGVjaWZpQ29udGV4dCA9IGNvbnRleHQsIC8vL1xuICAgICAgICAgIHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yID0gdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yKHRlcm0sIGNvbnN0cnVjdG9yLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaUNvbnRleHQpO1xuXG4gICAgaWYgKHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yKSB7XG4gICAgICBjb25zdCBwcm92aXNpb25hbCA9IHRoaXMudHlwZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgICAgIHRlcm0uc2V0VHlwZSh0aGlzLnR5cGUpO1xuXG4gICAgICB0ZXJtLnNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKTtcblxuICAgICAgY29uc3QgdmFsaWRhdGVzRm9yd2FyZHMgPSB2YWxpZGF0ZUZvcndhcmRzKHRlcm0sIGNvbnRleHQpO1xuXG4gICAgICBpZiAodmFsaWRhdGVzRm9yd2FyZHMpIHtcbiAgICAgICAgdGVybVVuaWZpZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybVVuaWZpZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcmV0dXJuIHNlcmlhbGlzZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZVR5cGUgPSBmYWxzZSxcbiAgICAgICAgICAgIHR5cGVKU09OID0gdHlwZVRvVHlwZUpTT04odGhpcy50eXBlKSxcbiAgICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKGluY2x1ZGVUeXBlKTtcblxuICAgICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlSlNPTiwgIC8vL1xuICAgICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgICBicmVha1BvaW50LFxuICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICB9O1xuXG4gICAgICByZXR1cm4ganNvbjtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb25zdHJ1Y3RvclwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbnN0cnVjdG9yO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHVuc2VyaWFsaXNlKChqc29uLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBjb25zdHJ1Y3Rvck5vZGUgPSBpbnN0YW50aWF0ZUNvbnN0cnVjdG9yKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBjb25zdHJ1Y3Rvck5vZGUsIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICB0ZXJtID0gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgdHlwZSA9IHR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgICAgICBjb25zdHJ1Y3RvciA9IG5ldyBDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpO1xuICAgICAgfSwganNvbiwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3I7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImRlZmluZSIsIkNvbnN0cnVjdG9yIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInRlcm0iLCJ0eXBlIiwiZ2V0VGVybSIsImdldFR5cGUiLCJnZXRDb25zdHJ1Y3Rvck5vZGUiLCJnZXROb2RlIiwiY29uc3RydWN0b3JOb2RlIiwiZ2V0U3RyaW5nIiwiaW5jbHVkZVR5cGUiLCJ0ZXJtU3RyaW5nIiwidHlwZVN0cmluZyIsInNldFR5cGUiLCJ2ZXJpZnkiLCJ2ZXJpZmllcyIsImNvbnN0cnVjdG9yU3RyaW5nIiwidHJhY2UiLCJhdHRlbXB0IiwidGVybVZhbGlkYXRlcyIsInZhbGlkYXRlVGVybSIsImNvbW1pdCIsImRlYnVnIiwidGVybVZhbGlkYXRlc0FzQ29uc3RydWN0b3IiLCJ2YWxpZGF0ZVRlcm1Bc0NvbnN0cnVjdG9yIiwidW5pZnlUZXJtIiwidmFsaWRhdGVGb3J3YXJkcyIsInRlcm1VbmlmaWVzIiwiY29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvckNvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpQ29udGV4dCIsInRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yIiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yIiwicHJvdmlzaW9uYWwiLCJpc1Byb3Zpc2lvbmFsIiwic2V0UHJvdmlzaW9uYWwiLCJ2YWxpZGF0ZXNGb3J3YXJkcyIsInRvSlNPTiIsInNlcmlhbGlzZSIsInR5cGVKU09OIiwidHlwZVRvVHlwZUpTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsInVuc2VyaWFsaXNlIiwiaW5zdGFudGlhdGVDb25zdHJ1Y3RvciIsImJyZWFrUG9pbnRGcm9tSlNPTiIsInRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlIiwidHlwZUZyb21KU09OIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFhQTs7O2VBQUE7OztnQ0FYd0I7MEJBRUQ7NkJBQ2dCO3lCQUNDO3VCQUNDOzBCQUNDO3NCQUNHO3lCQUNnQjs0QkFDRTtNQUUvRCxXQUFlQSxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLG9CQUFvQkMsdUJBQU87SUFDckQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLElBQUksQ0FBRTtRQUN6RCxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTtRQUNaLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTtJQUNkO0lBRUFDLFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQ0YsSUFBSTtJQUNsQjtJQUVBRyxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUNGLElBQUk7SUFDbEI7SUFFQUcscUJBQXFCO1FBQ25CLE1BQU1OLE9BQU8sSUFBSSxDQUFDTyxPQUFPLElBQ25CQyxrQkFBa0JSLE1BQU8sR0FBRztRQUVsQyxPQUFPUTtJQUNUO0lBRUFDLFVBQVVDLGNBQWMsSUFBSSxFQUFFO1FBQzVCLElBQUlYO1FBRUosSUFBSVcsYUFBYTtZQUNmLE1BQU1DLGFBQWEsSUFBSSxDQUFDVCxJQUFJLENBQUNPLFNBQVMsSUFDaENHLGFBQWEsSUFBSSxDQUFDVCxJQUFJLENBQUNNLFNBQVM7WUFFdENWLFNBQVMsR0FBR1ksV0FBVyxDQUFDLEVBQUVDLFlBQVk7UUFDeEMsT0FBTztZQUNMYixTQUFTLEtBQUssQ0FBQ1U7UUFDakI7UUFFQSxPQUFPVjtJQUNUO0lBRUFjLFFBQVFWLElBQUksRUFBRTtRQUNaLElBQUksQ0FBQ0EsSUFBSSxHQUFHQTtJQUNkO0lBRUFXLE9BQU9oQixPQUFPLEVBQUU7UUFDZCxJQUFJaUIsV0FBVztRQUVmLE1BQU1MLGNBQWMsT0FDZE0sb0JBQW9CLElBQUksQ0FBQ1AsU0FBUyxDQUFDQztRQUV6Q1osUUFBUW1CLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUQsa0JBQWtCLGdCQUFnQixDQUFDO1FBRW5FRSxJQUFBQSxnQkFBTyxFQUFDLENBQUNwQjtZQUNQLE1BQU1xQixnQkFBZ0IsSUFBSSxDQUFDQyxZQUFZLENBQUN0QjtZQUV4QyxJQUFJcUIsZUFBZTtnQkFDakJKLFdBQVc7WUFDYjtZQUVBLElBQUlBLFVBQVU7Z0JBQ1osSUFBSSxDQUFDTSxNQUFNLENBQUN2QjtZQUNkO1FBQ0YsR0FBR0E7UUFFSCxJQUFJaUIsVUFBVTtZQUNaakIsUUFBUXdCLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFTixrQkFBa0IsY0FBYyxDQUFDO1FBQ3JFO1FBRUEsT0FBT0Q7SUFDVDtJQUVBSyxhQUFhdEIsT0FBTyxFQUFFO1FBQ3BCLElBQUlxQixnQkFBZ0I7UUFFcEIsTUFBTVQsY0FBYyxPQUNkTSxvQkFBb0IsSUFBSSxDQUFDUCxTQUFTLENBQUNDO1FBRXpDWixRQUFRbUIsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVELGtCQUFrQix1QkFBdUIsQ0FBQztRQUUzRSxNQUFNTyw2QkFBNkJDLElBQUFBLG1DQUF5QixFQUFDLElBQUksQ0FBQ3RCLElBQUksRUFBRUo7UUFFeEUsSUFBSXlCLDRCQUE0QjtZQUM5QkosZ0JBQWdCO1FBQ2xCO1FBRUEsSUFBSUEsZUFBZTtZQUNqQnJCLFFBQVF3QixLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRU4sa0JBQWtCLHFCQUFxQixDQUFDO1FBQzdFO1FBRUEsT0FBT0c7SUFDVDtJQUVBTSxVQUFVdkIsSUFBSSxFQUFFSixPQUFPLEVBQUU0QixnQkFBZ0IsRUFBRTtRQUN6QyxJQUFJQyxjQUFjO1FBRWxCLE1BQU1oQixhQUFhVCxLQUFLTyxTQUFTLElBQzNCQyxjQUFjLE1BQ2RNLG9CQUFvQixJQUFJLENBQUNQLFNBQVMsQ0FBQ0MsY0FBZSxHQUFHO1FBRTNEWixRQUFRbUIsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFTixXQUFXLGlCQUFpQixFQUFFSyxrQkFBa0IsZ0JBQWdCLENBQUM7UUFFaEcsTUFBTVksY0FBYyxJQUFJLEVBQ2xCQyxxQkFBcUJELFlBQVlFLFVBQVUsSUFDM0NDLGlCQUFpQkYsb0JBQ2pCRyxpQkFBaUJsQyxTQUNqQm1DLDZCQUE2QkMsSUFBQUEsK0JBQXdCLEVBQUNoQyxNQUFNMEIsYUFBYUcsZ0JBQWdCQztRQUUvRixJQUFJQyw0QkFBNEI7WUFDOUIsTUFBTUUsY0FBYyxJQUFJLENBQUNoQyxJQUFJLENBQUNpQyxhQUFhO1lBRTNDbEMsS0FBS1csT0FBTyxDQUFDLElBQUksQ0FBQ1YsSUFBSTtZQUV0QkQsS0FBS21DLGNBQWMsQ0FBQ0Y7WUFFcEIsTUFBTUcsb0JBQW9CWixpQkFBaUJ4QixNQUFNSjtZQUVqRCxJQUFJd0MsbUJBQW1CO2dCQUNyQlgsY0FBYztZQUNoQjtRQUNGO1FBRUEsSUFBSUEsYUFBYTtZQUNmN0IsUUFBUXdCLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFWCxXQUFXLGlCQUFpQixFQUFFSyxrQkFBa0IsY0FBYyxDQUFDO1FBQ2xHO1FBRUEsT0FBT1c7SUFDVDtJQUVBWSxTQUFTO1FBQ1AsTUFBTXpDLFVBQVUsSUFBSSxDQUFDZ0MsVUFBVTtRQUUvQixPQUFPVSxJQUFBQSxrQkFBUyxFQUFDLENBQUMxQztZQUNoQixNQUFNWSxjQUFjLE9BQ2QrQixXQUFXQyxJQUFBQSxvQkFBYyxFQUFDLElBQUksQ0FBQ3ZDLElBQUksR0FDbkNKLFNBQVMsSUFBSSxDQUFDVSxTQUFTLENBQUNDO1lBRTlCLElBQUlUO1lBRUpBLGFBQWEsSUFBSSxDQUFDMEMsYUFBYTtZQUUvQixNQUFNQyxpQkFBaUJDLElBQUFBLHNDQUEwQixFQUFDNUM7WUFFbERBLGFBQWEyQyxnQkFBaUIsR0FBRztZQUVqQyxNQUFNekMsT0FBT3NDLFVBQ1BLLE9BQU87Z0JBQ0xoRDtnQkFDQUM7Z0JBQ0FFO2dCQUNBRTtZQUNGO1lBRU4sT0FBTzJDO1FBQ1QsR0FBR2hEO0lBQ0w7SUFFQSxPQUFPaUQsT0FBTyxjQUFjO0lBRTVCLE9BQU9DLFNBQVNGLElBQUksRUFBRWhELE9BQU8sRUFBRTtRQUM3QixJQUFJOEI7UUFFSnFCLElBQUFBLG9CQUFXLEVBQUMsQ0FBQ25EO1lBQ1hvRCxJQUFBQSxvQkFBVyxFQUFDLENBQUNKLE1BQU1oRDtnQkFDakIsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBRytDLE1BQ2J0QyxrQkFBa0IyQyxJQUFBQSxtQ0FBc0IsRUFBQ3BELFFBQVFELFVBQ2pERSxPQUFPUSxpQkFDUFAsYUFBYW1ELElBQUFBLDhCQUFrQixFQUFDTixPQUNoQzVDLE9BQU9tRCxJQUFBQSxnQ0FBdUIsRUFBQzdDLGlCQUFpQlYsVUFDaERLLE9BQU9tRCxJQUFBQSxrQkFBWSxFQUFDUixNQUFNaEQ7Z0JBRWhDOEIsY0FBYyxJQUFJaEMsWUFBWUUsU0FBU0MsUUFBUUMsTUFBTUMsWUFBWUMsTUFBTUM7WUFDekUsR0FBRzJDLE1BQU1oRDtRQUNYLEdBQUdBO1FBRUgsT0FBTzhCO0lBQ1Q7QUFDRiJ9
@@ -1554,6 +1554,10 @@ function typeFromVariableDeclarationNode(variableDeclarationNode, context) {
1554
1554
  const typeNode = variableDeclarationNode.getTypeNode(), type = typeFromTypeNode(typeNode, context);
1555
1555
  return type;
1556
1556
  }
1557
+ function topLevelAssertionFromSectionNode(sectionNode, context) {
1558
+ const axiom = axiomFromSectionNode(sectionNode, context), lemma = lemmaFromSectionNode(sectionNode, context), theorem = theoremFromSectionNode(sectionNode, context), conjecture = conjectureFromSectionNode(sectionNode, context), topLevelAssertion = axiom || lemma || theorem || conjecture;
1559
+ return topLevelAssertion;
1560
+ }
1557
1561
  function procedureCallFromSuppositionNode(suppositionNode, context) {
1558
1562
  let procedureCall = null;
1559
1563
  const procedureCallNode = suppositionNode.getProcedureCallNode();
@@ -1562,10 +1566,6 @@ function procedureCallFromSuppositionNode(suppositionNode, context) {
1562
1566
  }
1563
1567
  return procedureCall;
1564
1568
  }
1565
- function topLevelAssertionFromSectionNode(sectionNode, context) {
1566
- const axiom = axiomFromSectionNode(sectionNode, context), lemma = lemmaFromSectionNode(sectionNode, context), theorem = theoremFromSectionNode(sectionNode, context), conjecture = conjectureFromSectionNode(sectionNode, context), topLevelAssertion = axiom || lemma || theorem || conjecture;
1567
- return topLevelAssertion;
1568
- }
1569
1569
  function negatedFromJDefinedAssertionNode(definedAssertionNode, context) {
1570
1570
  const negated = definedAssertionNode.isNegated();
1571
1571
  return negated;
@@ -1742,14 +1742,14 @@ function provisionalFromVariableDeclarationNode(variableDeclarationNode, context
1742
1742
  const provisional = variableDeclarationNode.isProvisional();
1743
1743
  return provisional;
1744
1744
  }
1745
- function replacementTermFromTermSubstitutionNode(termSubstitutionNode, context) {
1746
- const replacementTermNode = termSubstitutionNode.getReplacementTermNode(), replacementTerm = termFromTermNode(replacementTermNode, context);
1747
- return replacementTerm;
1748
- }
1749
1745
  function procedureReferenceFromProcedureCallNode(procedureCallNode, context) {
1750
1746
  const procedureReferenceNode = procedureCallNode.getProcedureReferenceNode(), procedureReference = procedureReferenceFromProcedureReferenceNode(procedureReferenceNode, context);
1751
1747
  return procedureReference;
1752
1748
  }
1749
+ function replacementTermFromTermSubstitutionNode(termSubstitutionNode, context) {
1750
+ const replacementTermNode = termSubstitutionNode.getReplacementTermNode(), replacementTerm = termFromTermNode(replacementTermNode, context);
1751
+ return replacementTerm;
1752
+ }
1753
1753
  function provisionalFromGeneratorDeclarationNode(generatorDeclarationNode, context) {
1754
1754
  const provisional = generatorDeclarationNode.isProvisional();
1755
1755
  return provisional;
@@ -1907,4 +1907,4 @@ function propertyDeclarationsFromPropertyDeclarationNodes(propertyDeclarationnNo
1907
1907
  return propertyDeclrations;
1908
1908
  }
1909
1909
 
1910
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyxcbiAgICAgICAgIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBzY2hlbWFTdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uLFxuICAgICAgICAgc2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzQW5kVG9wTGV2ZWxBc3NlcnRpb24sXG4gICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMsXG4gICAgICAgICBjb3R5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsLFxuICAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGU7XG5cbiAgaWYgKHR5cGVOb2RlID09PSBudWxsKSB7XG4gICAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCk7XG5cbiAgICB0eXBlID0gYmFzZVR5cGU7ICAvLy9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIG5vZGUgPSB0eXBlTm9kZSwgIC8vL1xuICAgICAgICAgIG5hbWUgPSBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBwcmVmaXhOYW1lID0gcHJlZml4TmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSBub21pbmFsVHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpLFxuICAgICAgICAgIHN0cmluZyA9IHR5cGVTdHJpbmcsICAvLy9cbiAgICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgdHlwZSA9IG5ldyBUeXBlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdGVybSA9IG5ldyBUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0ZXAgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RlcE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcCA9IG5ldyBTdGVwKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCByZWZlcmVuY2UsIHNpZ25hdHVyZUFzc2VydGlvbik7XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUnVsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBydWxlU3RyaW5nID0gcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24obGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbiksXG4gICAgICAgIG5vZGUgPSBydWxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBydWxlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJ1bGUgPSBuZXcgUnVsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHByb29mLCBsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKTtcblxuICByZXR1cm4gcnVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdvYWxGcm9tR29hbE5vZGUoZ29hbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBHb2FsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGdvYWxOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZ29hbCA9IG5ldyBHb2FsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBnb2FsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxhYmVsTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JGcm9tRXJyb3JOb2RlKGVycm9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVycm9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVycm9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMZW1tYSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSBsZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBsZW1tYU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsZW1tYSA9IG5ldyBMZW1tYShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBsZW1tYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBmcmFtZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBmcmFtZSA9IG5ldyBGcmFtZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9vZk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2YgPSBuZXcgUHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBkZXJpdmF0aW9uKTtcblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbUZyb21BeGlvbU5vZGUoYXhpb21Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXhpb20gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gYXhpb21Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gYXhpb21Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYXhpb20gPSBuZXcgQXhpb20oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlbWFGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2NoZW1hIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RyYWludHMgPSBjb25zdHJhaW50c0Zyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzY2hlbWFTdHJpbmcgPSBzY2hlbWFTdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IHNjaGVtYU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzY2hlbWFTdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc2NoZW1hID0gbmV3IFNjaGVtYShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIGNvbnN0cmFpbnRzKTtcblxuICByZXR1cm4gc2NoZW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VjdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNlY3Rpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBoeXBvdGhlc2lzTm9kZXMgPSBzZWN0aW9uTm9kZS5nZXRIeXBvdGhlc2lzTm9kZXMoKSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzZXJ0aW9uID0gdG9wTGV2ZWxBc3NlcnRpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzZWN0aW9uU3RyaW5nID0gc2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzQW5kVG9wTGV2ZWxBc3NlcnRpb24oaHlwb3RoZXNlcywgdG9wTGV2ZWxBc3NlcnRpb24pLFxuICAgICAgICBub2RlID0gc2VjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzZWN0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2VjdGlvbiA9IG5ldyBTZWN0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgaHlwb3RoZXNlcywgdG9wTGV2ZWxBc3NlcnRpb24pO1xuXG4gIHJldHVybiBzZWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByZW1pc2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJlbWlzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJlbWlzZSA9IG5ldyBQcmVtaXNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gcHJlbWlzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gdGhlb3JlbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSB0aGVvcmVtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsQXNzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRoZW9yZW0gPSBuZXcgVGhlb3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHkgPSBudWxsO1xuXG4gIGlmIChwcm9wZXJ0eU5vZGUgIT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUHJvcGVydHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIG5vZGUgPSBwcm9wZXJ0eU5vZGUsIC8vL1xuICAgICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuXG4gICAgY29udGV4dCA9IG51bGw7XG5cbiAgICBwcm9wZXJ0eSA9IG5ldyBQcm9wZXJ0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGlkZW50aWZpZXIsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZOb2RlLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YkRlcml2YXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24oc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gc3VicHJvb2ZTdHJpbmc7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZiA9IG5ldyBTdWJwcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWFsaXR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWR1Y3Rpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gbmV3IERlZHVjdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybXMpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSBuZXcgUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganVkZ2VtZW50RnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEp1ZGdlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBqdWRnZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGdvYWwgPSBnb2FsRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QganVkZ2VtZW50ID0gbmV3IEp1ZGdlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGZyYW1lLCBnb2FsKTtcblxuICByZXR1cm4ganVkZ2VtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCksXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwYXJhbWV0ZXIgPSBuZXcgUGFyYW1ldGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgaWRlbnRpZmllcik7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvckZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBHZW5lcmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZ2VuZXJhdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgR2VuZXJhdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIGdlbmVyYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEh5cG90aGVzaXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gaHlwb3RoZXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGh5cG9odGVzaXMgPSBuZXcgSHlwb3RoZXNpcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGh5cG9odGVzaXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJhaW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RyYWludCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJhaW50Tm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnN0cmFpbnQgPSBuZXcgQ29uc3RyYWludChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29uc3RyYWludDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUoY29uamVjdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25qZWN0dXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSA9IGNvbmplY3R1cmVOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gY29uamVjdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb25qZWN0dXJlID0gbmV3IENvbmplY3R1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gY29uamVjdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21iaW5hdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbWJpbmF0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbWJpbmF0b3IgPSBuZXcgQ29tYmluYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uY2x1c2lvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25jbHVzaW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uY2x1c2lvbiA9IG5ldyBDb25jbHVzaW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZXJpdmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlcml2YXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZGVyaXZhdGlvbiA9IG5ldyBEZXJpdmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZVByZWZpeCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlUHJlZml4Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVQcmVmaXggPSBuZXcgVHlwZVByZWZpeChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUpO1xuXG4gIHJldHVybiB0eXBlUHJlZml4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhc3N1bXB0aW9uID0gbmV3IEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgIG5vZGUgPSBjb25zdHJ1Y3Rvck5vZGUsIC8vL1xuICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgIHRlcm0gPSB0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgIHR5cGUgPSB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gbmV3IENvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1cHBvc2l0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1cHBvc2l0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb24gPSBuZXcgU3VwcG9zaXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHByb2NlZHVyZUNhbGwpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1aXZhbGVuY2VGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWl2YWxlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVxdWl2YWxlbmNlTm9kZSwgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXF1aXZhbGVuY2VTdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIHN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nOyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVpdmFsZW5jZSA9IG5ldyBFcXVpdmFsZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHRlcm1zKTtcblxuICByZXR1cm4gZXF1aXZhbGVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhVHlwZSA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlID0gbmV3IE1ldGF2YXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIHRlcm0sIHR5cGUsIG1ldGFUeXBlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZUNhbGwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGxTdHJpbmcgPSBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMocHJvY2VkdXJlUmVmZXJlbmNlLCBwYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlQ2FsbFN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBuZXcgUHJvY2VkdXJlQ2FsbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHBhcmFtZXRlcnMsIHByb2NlZHVyZVJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3ViRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJEZXJpdmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3ViRGVyaXZhdGlvbiA9IG5ldyBTdWJEZXJpdmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIHN1YkRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbiA9IG5ldyBUeXBlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXAgPSBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGVwT3JTdWJwcm9vZiA9IChzdGVwIHx8IHN1YnByb29mKTtcblxuICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRGVjbGFyYXRpb25Gcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlRGVjbGFyYXRpb24gPSBuZXcgVHlwZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB0eXBlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVmaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5lZ2F0ZWQgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5pc05lZ2F0ZWQoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uID0gbmV3IERlZmluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCk7XG5cbiAgcmV0dXJuIGRlZmluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRhcmdldFRlcm0gPSB0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IG5ldyBUZXJtU3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRhcmdldFRlcm0sIHJlcGxhY2VtZW50VGVybSk7XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgRnJhbWVTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0RnJhbWUgPSB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gbmV3IEZyYW1lU3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRhcmdldEZyYW1lLCByZXBsYWNlbWVudEZyYW1lKTtcblxuICByZXR1cm4gZnJhbWVTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3ViamVjdFRlcm0gPSBzdWJqZWN0VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlUZXJtID0gcHJvcGVydHlUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uID0gbmV3IFByb3BlcnR5QXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3ViamVjdFRlcm0sIHByb3BlcnR5VGVybSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YnByb29mQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBuZXcgU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnRzKTtcblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3R5cGVEZWNsYXJhdGlvbkZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ290eXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5RGVjbGFyYXRpb25zID0gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gY290eXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCh0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCksXG4gICAgICAgIHN0cmluZyA9IGNvdHlwZURlY2xhcmF0aW9uU3RyaW5nOyAgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY290eXBlRGVjbGFyYXRpb24gPSBuZXcgQ290eXBlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCwgcHJvcGVydHlEZWNsYXJhdGlvbnMpO1xuXG4gIHJldHVybiBjb3R5cGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb250YWluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gbmV3IENvbnRhaW5lZEFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIGZyYW1lLCBuZWdhdGVkLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2lnbmF0dXJlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uID0gbmV3IFNpZ25hdHVyZUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHNpZ25hdHVyZSwgcmVmZXJlbmNlKTtcblxuICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZVJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVlbmNlID0gbmV3IFByb2NlZHVyZVJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVSZWZlcmVlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW1wbGljaXRBc3N1bXB0aW9uRnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEltcGxpY2l0QXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbiA9IG5ldyBJbXBsaWNpdEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlEZWNsYXJhdGlvbiA9IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvcGVydHkpO1xuXG4gIHJldHVybiBwcm9wZXJ0eURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCB2YXJpYWJsZSwgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB2YXJpYWJsZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkQ29tYmluYXRvckZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZShicmFja2V0ZWRDb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJyYWNrZXRlZENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZShicmFja2V0ZWRDb21iaW5hdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyYWNrZXRlZENvbWJpbmF0b3IgPSBuZXcgQnJhY2tldGVkQ29tYmluYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZENvbWJpbmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQnJhY2tldGVkQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyYWNrZXRlZENvbnN0cnVjdG9yID0gbmV3IEJyYWNrZXRlZENvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZENvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEdlbmVyYXRvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGdlbmVyYXRvciA9IGdlbmVyYXRvckZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBnZW5lcmF0b3JEZWNsYXJhdGlvbiA9IG5ldyBHZW5lcmF0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3Zpc2lvbmFsLCBnZW5lcmF0b3IpO1xuXG4gIHJldHVybiBnZW5lcmF0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4RGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVQcmVmaXhEZWNsYXJhdGlvbiA9IG5ldyBUeXBlUHJlZml4RGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlUHJlZml4KTtcblxuICByZXR1cm4gdHlwZVByZWZpeERlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbWJpbmF0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb21iaW5hdG9yRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBjb21iaW5hdG9yKTtcblxuICByZXR1cm4gY29tYmluYXRvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlID0gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlID0gcmVwbGFjZW1lbnRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uID0gbmV3IFJlZmVyZW5jZVN1YnN0aXR1dGlvbihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0YXJnZXRSZWZlcmVuY2UsIHJlcGxhY2VtZW50UmVmZXJlbmNlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcmVzb2x2ZWQgPSByZXNvbHZlZEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgdGFyZ2V0U3RhdGVtZW50ID0gdGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gcmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uID0gbmV3IFN0YXRlbWVudFN1YnN0aXR1dGlvbihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZXNvbHZlZCwgc3Vic3RpdHV0aW9uLCB0YXJnZXRTdGF0ZW1lbnQsIHJlcGxhY2VtZW50U3RhdGVtZW50KTtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cnVjdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29uc3RydWN0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3Zpc2lvbmFsLCBjb25zdHJ1Y3Rvcik7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YVR5cGUsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTmFtZSA9IHR5cGVOb2RlLmdldFR5cGVOYW1lKCksXG4gICAgICAgIG5hbWUgPSB0eXBlTmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gcnVsZU5vZGUuZ2V0UHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlcyA9IHJ1bGVOb2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9vZk5vZGUgPSBzY2hlbWFOb2RlLmdldFByb29mTm9kZSgpLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbGFiZWxOb2RlID0gc2NoZW1hTm9kZS5nZXRMYWJlbE5vZGUoKSxcbiAgICAgICAgbGFiZWxTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhsYWJlbE5vZGUpLFxuICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21MYWJlbFN0cmluZyhsYWJlbFN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VOb2RlcyA9IHJ1bGVOb2RlLmdldFByZW1pc2VOb2RlcygpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBheGlvbSA9IG51bGw7XG5cbiAgY29uc3QgYXhpb21Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0QXhpb21Ob2RlKCk7XG5cbiAgaWYgKGF4aW9tTm9kZSAhPT0gbnVsbCkge1xuICAgIGF4aW9tID0gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGVtbWEgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hTm9kZSA9IHNlY3Rpb25Ob2RlLmdldExlbW1hTm9kZSgpO1xuXG4gIGlmIChsZW1tYU5vZGUgIT09IG51bGwpIHtcbiAgICBsZW1tYSA9IGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gcHJvcGVydHlOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tR29hbE5vZGUoZ29hbE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGdvYWxOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Hb2FsTm9kZShnb2FsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZXNtZW50Tm9kZSA9IGdvYWxOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVzbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0ZXBOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCByZWZlcmVuY2VOb2RlID0gc3RlcE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpO1xuXG4gIGlmIChyZWZlcmVuY2VOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlZmVyZW5jZU5vZGUpO1xuXG4gICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnb2FsRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBnb2FsTm9kZSA9IGp1ZGdlbWVudE5vZGUuZ2V0R29hbE5vZGUoKSxcbiAgICAgICAgZ29hbCA9IGdvYWxGcm9tR29hbE5vZGUoZ29hbE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBnb2FsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBnZW5lcmF0b3JOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBlclR5cGVzID0gbnVsbDtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgcHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIHByZWZpeE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbmNsdXNpb25Ob2RlID0gcnVsZU5vZGUuZ2V0Q29uY2x1c2lvbk5vZGUoKSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGhlb3JlbSA9IG51bGw7XG5cbiAgY29uc3QgdGhlb3JlbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRUaGVvcmVtTm9kZSgpO1xuXG4gIGlmICh0aGVvcmVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRoZW9yZW0gPSB0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlKHRoZW9yZW1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGZyYW1lTm9kZSA9IGp1ZGdlbWVudE5vZGUuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IHNpZ25hdHVyZU5vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOb2RlLmdldFR5cGVQcmVmaXhOYW1lKCksXG4gICAgICAgIG5hbWUgPSB0eXBlUHJlZml4TmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gc2NoZW1hTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZXJpdmF0aW9uTm9kZSA9IHByb29mTm9kZS5nZXREZXJpdmF0aW9uTm9kZSgpLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBvY25zdHJ1Y3Rvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUob2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9uTm9kZXMgPSBmcmFtZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBwcmVtaXNlTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBlcXVpdmFsZW5jZU5vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YW1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IG1ldGFtZXRhdmFyaWFibGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZW1Ob2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlbU5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gZnJhbWVOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBsYWJlbE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RyYWludHNGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnN0cmFpbnRzID0gW107XG5cbiAgcmV0dXJuIGNvbnN0cmFpbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29uamVjdHVyZSA9IG51bGw7XG5cbiAgY29uc3QgY29uamVjdHVyZU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRDb25qZWN0dXJlTm9kZSgpO1xuXG4gIGlmIChjb25qZWN0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRSaWdodFRlcm1Ob2RlKCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmlnaHRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJpZ2h0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZXF1YWxpdHkgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RXF1YWxpdHlOb2RlKCk7XG5cbiAgaWYgKGVxdWFsaXR5Tm9kZSAhPT0gbnVsbCkge1xuICAgIGVxdWFsaXR5ID0gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZXF1YWxpdHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IHNjaGVtYU5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICBpZGVudGlmaWVyID0gdmFyaWFibGVJZGVudGlmaWVyOyAgLy8vXG5cbiAgcmV0dXJuIGlkZW50aWZpZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGlkZW50aWZpZXIgPSBwYXJhbWV0ZXJOb2RlLmdldElkZW50aWZpZXIoKTtcblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGRlZHVjdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQganVkZ2VtZW50ID0gbnVsbDtcblxuICBjb25zdCBqdWRnZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRKdWRnZW1lbnROb2RlKCk7XG5cbiAgaWYgKGp1ZGdlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBqdWRnZW1lbnQgPSBqdWRnZW1lbnRGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBqdWRnZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXAgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlLmlzU3RlcE5vZGUoKTtcblxuICBpZiAoc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUpIHtcbiAgICBjb25zdCBzdGVwTm9kZSA9IHN0ZXBPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3RlcCA9IHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub21pbmFsVHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCk7XG5cbiAgcmV0dXJuIG5vbWluYWxUeXBlTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGlkZW50aWZpZXIgPSBwYXJhbWV0ZXJOb2RlLmdldElkZW50aWZpZXIoKTtcblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlc21lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZXNtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29tYmluYXRvck5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpbm9Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb25jbHVzaW5vTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlZmVyZW5jZU5vZGUgPSBjb25zdHJhaW50Tm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbnN0cmFpbnROb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IHByZW1pc2VOb2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gc3VicHJvb2ZOb2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdXBwb3NpdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50OyAvLy9cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdWJEZXJpdmF0aW9uTm9kZSA9IHN1YnByb29mTm9kZS5nZXRTdWJEZXJpdmF0aW9uTm9kZSgpLFxuICAgICAgICBzdWJEZXJ2aWF0aW9uID0gc3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1YkRlcnZpYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSBtZXRhdmFyaWFibGVTdHJpbmcsIC8vL1xuICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25Ob2RlID0gc3RlcE5vZGUuZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRUeXBlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGUuaXNTdWJwcm9vZk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSkge1xuICAgIGNvbnN0IHN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGU7ICAvLy9cblxuICAgIHN1YnByb29mID0gc3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UGFyYW1ldGVyTm9kZXMoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KVxuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZXMgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IHN1cHBvc2l0aW9uTm9kZS5nZXRQcm9jZWR1cmVDYWxsTm9kZSgpO1xuXG4gIGlmIChwcm9jZWR1cmVDYWxsTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wTGV2ZWxBc3NlcnRpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXhpb20gPSBheGlvbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlbW1hID0gbGVtbWFGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0aGVvcmVtID0gdGhlb3JlbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb24gPSAoYXhpb20gfHwgbGVtbWEgfHwgdGhlb3JlbSB8fCBjb25qZWN0dXJlKTtcblxuICByZXR1cm4gdG9wTGV2ZWxBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCksXG4gICAgICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gdHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0YXJnZXRUZXJtTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRhcmdldFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRhcmdldFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZSA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHNpZ25hdHVyZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHNpZ25hdHVyZU5vZGUpO1xuXG4gICAgc2lnbmF0dXJlID0gU2lnbmF0dXJlLmZyb21TaWduYXR1cmVTdHJpbmcoc2lnbmF0dXJlU3RyaW5nLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IHR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7MFxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VwZXJUeXBlcyA9IFtdO1xuXG4gIGNvbnN0IHR5cGVzTm9kZSA9IGNvdHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlc21lbnROb2RlID0gaW1wbGljaXRBc3N1bXB0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlc21lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2lnbmF0dXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgc2lnbmF0dXJlTm9kZSA9IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpLFxuICAgICAgICBzaWduYXR1cmVTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhzaWduYXR1cmVOb2RlKSxcbiAgICAgICAgc2lnbmF0dXJlID0gU2lnbmF0dXJlLmZyb21TaWduYXR1cmVTdHJpbmcoc2lnbmF0dXJlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiB5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHkgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5Tm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLmdldFByb3BlcnR5Tm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eU5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViamVjdFRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdWJqZWN0VGVybU5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0U3ViamVjdFRlcm1Ob2RlKCksXG4gICAgICAgIHN1YmplY3RUZXJtID0gdGVybUZyb21UZXJtTm9kZShzdWJqZWN0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdWJqZWN0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0RnJhbWVOb2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldEZyYW1lTm9kZSgpLFxuICAgICAgICB0YXJnZXRGcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZSh0YXJnZXRGcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRGcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZShicmFja2V0ZWRDb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gYnJhY2tldGVkQ29tYmluYXRvck5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlUZXJtTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRQcm9wZXJ0eVRlcm1Ob2RlKCksXG4gICAgICAgIHByb3BlcnR5VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocHJvcGVydHlUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBnZW5lcmF0b3JOb2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLmdldEdlbmVyYXRvck5vZGUoKSxcbiAgICAgICAgZ2VuZXJhdG9yID0gZ2VuZXJhdG9yRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGdlbmVyYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXNvbHZlZCA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuaXNSZXNvbHZlZCgpO1xuXG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXBsYWNlbWVudFRlcm1Ob2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJlcGxhY2VtZW50VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOb2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZS5nZXRUeXBlUHJlZml4Tm9kZSgpLFxuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb21iaW5hdG9yTm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29tYmluYXRvck5vZGUoKSxcbiAgICAgICAgY29tYmluYXRvciA9IGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhVHlwZU5hbWUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXBsYWNlbWVudEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudEZyYW1lTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHJlcGxhY2VtZW50RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRGcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250eHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnR4dCwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IHRlcm1TdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udHh0LCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSAoZnJhbWVTdWJzdGl0dXRpb24gfHwgdGVybVN1YnN0aXR1dGlvbik7XG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmdldENvbnN0cnVjdG9yTm9kZSgpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcodGFyZ2V0UmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHRhcmdldFJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICB0YXJnZXRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSh0YXJnZXRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0U3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLmdldFByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcygpLFxuICAgICAgICBwcm9wZXJ0eURlY2xhcmF0aW9ucyA9IHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlcyhwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNsYXJhdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBsZXQgdGVybVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgdGVybVN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFRlcm1TdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgaWYgKHRlcm1TdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybVN1YnN0aXR1dGlvbiA9IHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgbGV0IGZyYW1lU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmIChmcmFtZVN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhyZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUpLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShyZXBsYWNlbWVudFN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybXMgPSB0ZXJtTm9kZXMubWFwKCh0ZXJtTm9kZSkgPT4ge1xuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlcyA9IHR5cGVzTm9kZS5nZXRUeXBlTm9kZXMoKSxcbiAgICAgICAgdHlwZXMgPSB0eXBlTm9kZXMubWFwKCh0eXBlTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVscyA9IGxhYmVsTm9kZXMubWFwKChsYWJlbE5vZGUpID0+IHtcbiAgICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBsYWJlbFN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKGxhYmVsTm9kZSksXG4gICAgICAgICAgbGFiZWwgPSBMYWJlbC5mcm9tTGFiZWxTdHJpbmcobGFiZWxTdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGxhYmVsO1xuICB9KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzKHByZW1pc2VOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlcyA9IHByZW1pc2VOb2Rlcy5tYXAoKHByZW1pc2VOb2RlKSA9PiB7XG4gICAgY29uc3QgcHJlbWlzZSA9IHByZW1pc2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByZW1pc2U7XG4gIH0pO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50cyA9IHN0YXRlbWVudE5vZGVzLm1hcCgoc3RhdGVtZW50Tm9kZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzKHBhcmFtZXRlck5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlck5vZGUpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMoaHlwb3RoZXNpc05vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzZXMgPSBoeXBvdGhlc2lzTm9kZXMubWFwKChoeXBvdGhlc2VOb2RlKSA9PiB7XG4gICAgY29uc3QgaHlwb3RoZXNpcyA9IGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXNpcztcbiAgfSk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbk5vZGVzLm1hcCgoYXNzdW1wdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbk5vZGVzLm1hcCgoc3VwcG9zaXRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb24gPSBzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlcyA9IGRlcml2YXRpb25Ob2RlLmdldFN0ZXBPclN1YnByb29mTm9kZXMoKSxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBPclN1YnByb29mTm9kZXMubWFwKChzdGVwT3JTdWJwcm9vZk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZiA9IHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RlcHNPclN1YnByb29mcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlcyA9IHN1YkRlcml2YXRpb25Ob2RlLmdldFN0ZXBPclN1YnByb29mTm9kZXMoKSxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBPclN1YnByb29mTm9kZXMubWFwKChzdGVwT3JTdWJwcm9vZk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZiA9IHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RlcHNPclN1YnByb29mcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlcyhwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5RGVjbHJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzLm1hcCgocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eURlY2xjYXJhdGlvbiA9IHByb3BlcnR5RGVjbGFyYXRpb25Gcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5RGVjbGNhcmF0aW9uO1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNscmF0aW9ucztcbn1cbiJdLCJuYW1lcyI6WyJhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzIiwiYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlIiwiYXhpb21Gcm9tQXhpb21Ob2RlIiwiYXhpb21Gcm9tU2VjdGlvbk5vZGUiLCJicmFja2V0ZWRDb21iaW5hdG9yRnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwiYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwiY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlIiwiY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZSIsImNvbmNsdXNpb25Gcm9tUnVsZU5vZGUiLCJjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlIiwiY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZSIsImNvbnN0cmFpbnRGcm9tQ29uc3RyYWludE5vZGUiLCJjb25zdHJhaW50c0Zyb21TY2hlbWFOb2RlIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImNvdHlwZURlY2xhcmF0aW9uRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsImRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbVNjaGVtYU5vZGUiLCJkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUiLCJkZXJpdmF0aW9uRnJvbVByb29mTm9kZSIsImVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUiLCJlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUiLCJlcnJvckZyb21FcnJvck5vZGUiLCJmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21GcmFtZU5vZGUiLCJmcmFtZUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21KdWRnZW1lbnROb2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsImdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsImdlbmVyYXRvckZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJnZW5lcmF0b3JGcm9tR2VuZXJhdG9yTm9kZSIsImdvYWxGcm9tR29hbE5vZGUiLCJnb2FsRnJvbUp1ZGdlbWVudE5vZGUiLCJoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyIsImh5cG90aGVzZXNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwiaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZSIsImlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZSIsImlkZW50aWZpZXJGcm9tUGFyYW10ZXJOb2RlIiwiaWRlbnRpZmllckZyb21WYXJpYWJsZU5vZGUiLCJpbXBsaWNpdEFzc3VtcHRpb25Gcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsImp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlIiwianVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJsYWJlbEZyb21MYWJlbE5vZGUiLCJsYWJlbEZyb21TY2hlbWFOb2RlIiwibGFiZWxzRnJvbUxhYmVsTm9kZXMiLCJsYWJlbHNGcm9tUnVsZU5vZGUiLCJsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwibGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwibGVtbWFGcm9tTGVtbWFOb2RlIiwibGVtbWFGcm9tU2VjdGlvbk5vZGUiLCJtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUiLCJuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJuYW1lRnJvbVBhcmFtdGVyTm9kZSIsIm5hbWVGcm9tUGFyYW5ldGVyTm9kZSIsIm5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIm5hbWVGcm9tVHlwZU5vZGUiLCJuYW1lRnJvbVR5cGVQcmVmaXhOb2RlIiwibmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwibmVnYXRlZEZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJub21pbmFsVHlwZU5hbWVGcm9tVHlwZU5vZGUiLCJwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJlZml4TmFtZUZyb21UeXBlTm9kZSIsInByZW1pc2VGcm9tUHJlbWlzZU5vZGUiLCJwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMiLCJwcmVtaXNlc0Zyb21SdWxlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21TdXBwb3NpdGlvbk5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInByb29mRnJvbVByb29mTm9kZSIsInByb29mRnJvbVJ1bGVOb2RlIiwicHJvb2ZGcm9tU2NoZW1hTm9kZSIsInByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsInByb3BlcnRpZXNGcm9tVHlwZU5vZGUiLCJwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbkZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25zRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25zRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsInByb3BlcnR5RnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlGcm9tUHJvcGVydHlOb2RlIiwicHJvcGVydHlUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVGVybU5vZGUiLCJwcm92aXNpb25hbEZyb21UeXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUiLCJwcm92aXNpb25hbEZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21Db25zdHJhaW50Tm9kZSIsInJlZmVyZW5jZUZyb21Hb2FsTm9kZSIsInJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TdGVwTm9kZSIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJyaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwicnVsZUZyb21SdWxlTm9kZSIsInNjaGVtYUZyb21TY2hlbWFOb2RlIiwic2VjdGlvbkZyb21TZWN0aW9uTm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzaWduYXR1cmVGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZSIsInN0YXRlbWVudEZyb21Db25zdHJhaW50Tm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tR29hbE5vZGUiLCJzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUiLCJzdGF0ZW1lbnRGcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21QcmVtaXNlTm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50RnJvbVN0ZXBOb2RlIiwic3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUiLCJzdWJqZWN0VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlIiwic3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZU5vZGUiLCJzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU2NoZW1hTm9kZSIsInN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyIsInN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJ0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwidGVybUZyb21Db25zdHJ1Y3Rvck5vZGUiLCJ0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21HZW5lcmF0b3JOb2RlIiwidGVybUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJ0ZXJtRnJvbVByb3BlcnR5Tm9kZSIsInRlcm1Gcm9tVGVybU5vZGUiLCJ0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1zRnJvbUVxdWl2YWxlbmNlTm9kZSIsInRlcm1zRnJvbVNpZ25hdHVyZU5vZGUiLCJ0ZXJtc0Zyb21UZXJtTm9kZXMiLCJ0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlIiwidGhlb3JlbUZyb21UaGVvcmVtTm9kZSIsInRvcExldmVsQXNzZXJ0aW9uRnJvbVNlY3Rpb25Ob2RlIiwidHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVEZWNsYXJhdGlvbkZyb21UeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUiLCJ0eXBlRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tRXF1aXZhbGVuY2VOb2RlIiwidHlwZUZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUdlbmVyYXRvck5vZGUiLCJ0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJ0eXBlRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21Qcm9wZXJ0eU5vZGUiLCJ0eXBlRnJvbVRlcm1Ob2RlIiwidHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVHlwZU5vZGUiLCJ0eXBlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21WYXJpYWJsZU5vZGUiLCJ0eXBlUHJlZml4RGVjbGFyYXRpb25Gcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsInR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsInR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUiLCJ0eXBlc0Zyb21UeXBlc05vZGUiLCJ2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVGcm9tVGVybU5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSIsInR5cGVOb2RlIiwiY29udGV4dCIsInR5cGUiLCJiYXNlVHlwZSIsImJhc2VUeXBlRnJvbU5vdGhpbmciLCJUeXBlIiwiZWxlbWVudHMiLCJub2RlIiwibmFtZSIsInByZWZpeE5hbWUiLCJzdXBlclR5cGVzIiwicHJvcGVydGllcyIsInByb3Zpc2lvbmFsIiwibm9taW5hbFR5cGVOYW1lIiwidHlwZVN0cmluZyIsInR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lIiwic3RyaW5nIiwiYnJlYWtQb2ludCIsInRlcm1Ob2RlIiwiVGVybSIsIm5vZGVBc1N0cmluZyIsInRlcm0iLCJzdGVwTm9kZSIsIlN0ZXAiLCJzdGF0ZW1lbnQiLCJyZWZlcmVuY2UiLCJzaWduYXR1cmVBc3NlcnRpb24iLCJzdGVwIiwicnVsZU5vZGUiLCJSdWxlIiwicHJvb2YiLCJsYWJlbHMiLCJwcmVtaXNlcyIsImNvbmNsdXNpb24iLCJydWxlU3RyaW5nIiwicnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24iLCJydWxlIiwiZ29hbE5vZGUiLCJHb2FsIiwiZ29hbCIsImxhYmVsTm9kZSIsIkxhYmVsIiwibWV0YXZhcmlhYmxlIiwibGFiZWwiLCJlcnJvck5vZGUiLCJFcnJvciIsImVycm9yIiwibGVtbWFOb2RlIiwiTGVtbWEiLCJ0b3BMZXZlbEFzc3NlcnRpb25Ob2RlIiwiZGVkdWN0aW9uIiwic3VwcG9zaXRpb25zIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsInRvcExldmVsQXNzc2VydGlvblN0cmluZyIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsImxlbW1hIiwiZnJhbWVOb2RlIiwiRnJhbWUiLCJhc3N1bXB0aW9ucyIsImZyYW1lIiwicHJvb2ZOb2RlIiwiUHJvb2YiLCJkZXJpdmF0aW9uIiwiYXhpb21Ob2RlIiwiQXhpb20iLCJheGlvbSIsInNjaGVtYU5vZGUiLCJTY2hlbWEiLCJjb25zdHJhaW50cyIsInNjaGVtYVN0cmluZyIsInNjaGVtYVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInNjaGVtYSIsInNlY3Rpb25Ob2RlIiwiU2VjdGlvbiIsImh5cG90aGVzaXNOb2RlcyIsImdldEh5cG90aGVzaXNOb2RlcyIsInRvcExldmVsQXNzZXJ0aW9uIiwic2VjdGlvblN0cmluZyIsInNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc0FuZFRvcExldmVsQXNzZXJ0aW9uIiwic2VjdGlvbiIsInByZW1pc2VOb2RlIiwiUHJlbWlzZSIsInByb2NlZHVyZUNhbGwiLCJwcmVtaXNlIiwidGhlb3JlbU5vZGUiLCJUaGVvcmVtIiwidGhlb3JlbSIsInByb3BlcnR5Tm9kZSIsInByb3BlcnR5IiwiUHJvcGVydHkiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsInN1YnByb29mTm9kZSIsIlN1YnByb29mIiwic3ViRGVyaXZhdGlvbiIsInN1YnByb29mU3RyaW5nIiwic3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbiIsInN1YnByb29mIiwiZXF1YWxpdHlOb2RlIiwiRXF1YWxpdHkiLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsImVxdWFsaXR5IiwiZGVkdWN0aW9uTm9kZSIsIkRlZHVjdGlvbiIsInN0YXRlbWVudE5vZGUiLCJTdGF0ZW1lbnQiLCJzaWduYXR1cmVOb2RlIiwiU2lnbmF0dXJlIiwidGVybXMiLCJyZWZlcmVuY2VOb2RlIiwiUmVmZXJlbmNlIiwianVkZ2VtZW50Tm9kZSIsIkp1ZGdlbWVudCIsImp1ZGdlbWVudCIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJnZW5lcmF0b3JOb2RlIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiaHlwb3RoZXNlTm9kZSIsIkh5cG90aGVzaXMiLCJoeXBvaHRlc2lzIiwiY29uc3RyYWludE5vZGUiLCJDb25zdHJhaW50IiwiY29uc3RyYWludCIsImNvbmplY3R1cmVOb2RlIiwiQ29uamVjdHVyZSIsImNvbmplY3R1cmUiLCJjb21iaW5hdG9yTm9kZSIsIkNvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiY29uY2x1c2lvbk5vZGUiLCJDb25jbHVzaW9uIiwiZGVyaXZhdGlvbk5vZGUiLCJEZXJpdmF0aW9uIiwic3RlcHNPclN1YnByb29mcyIsInR5cGVQcmVmaXhOb2RlIiwiVHlwZVByZWZpeCIsInR5cGVQcmVmaXgiLCJhc3N1bXB0aW9uTm9kZSIsIkFzc3VtcHRpb24iLCJhc3N1bXB0aW9uIiwiY29uc3RydWN0b3JOb2RlIiwiQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIsInN1cHBvc2l0aW9uTm9kZSIsIlN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb24iLCJlcXVpdmFsZW5jZU5vZGUiLCJFcXVpdmFsZW5jZSIsImVxdWl2YWxlbmNlU3RyaW5nIiwiZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXMiLCJlcXVpdmFsZW5jZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJNZXRhdmFyaWFibGUiLCJtZXRhVHlwZSIsInByb2NlZHVyZUNhbGxOb2RlIiwiUHJvY2VkdXJlQ2FsbCIsInBhcmFtZXRlcnMiLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVDYWxsU3RyaW5nIiwicHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzIiwic3ViRGVyaXZhdGlvbk5vZGUiLCJTdWJEZXJpdmF0aW9uIiwidHlwZUFzc2VydGlvbk5vZGUiLCJUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mIiwidHlwZURlY2xhcmF0aW9uTm9kZSIsIlR5cGVEZWNsYXJhdGlvbiIsInR5cGVEZWNsYXJhdGlvbiIsImRlZmluZWRBc3NlcnRpb25Ob2RlIiwiRGVmaW5lZEFzc2VydGlvbiIsIm5lZ2F0ZWQiLCJpc05lZ2F0ZWQiLCJkZWZpbmVkQXNzZXJ0aW9uIiwidGVybVN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsIlRlcm1TdWJzdGl0dXRpb24iLCJjb250ZXh0cyIsInRhcmdldFRlcm0iLCJyZXBsYWNlbWVudFRlcm0iLCJ0ZXJtU3Vic3RpdHV0aW9uIiwiZnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJ0YXJnZXRGcmFtZSIsInJlcGxhY2VtZW50RnJhbWUiLCJmcmFtZVN1YnN0aXR1dGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsIlByb3BlcnR5QXNzZXJ0aW9uIiwic3ViamVjdFRlcm0iLCJwcm9wZXJ0eVRlcm0iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50cyIsInN1YnByb29mQXNzZXJ0aW9uIiwiY290eXBlRGVjbGFyYXRpb25Ob2RlIiwiQ290eXBlRGVjbGFyYXRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9ucyIsImNvdHlwZURlY2xhcmF0aW9uU3RyaW5nIiwiY290eXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCIsImNvdHlwZURlY2xhcmF0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIkNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJTaWduYXR1cmVBc3NlcnRpb24iLCJwcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwiUHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlZW5jZSIsImltcGxpY2l0QXNzdW1wdGlvbk5vZGUiLCJJbXBsaWNpdEFzc3VtcHRpb24iLCJpbXBsaWNpdEFzc3VtcHRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsIlByb3BlcnR5RGVjbGFyYXRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJWYXJpYWJsZURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbiIsImJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwiQnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yIiwiZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlIiwiR2VuZXJhdG9yRGVjbGFyYXRpb24iLCJnZW5lcmF0b3JEZWNsYXJhdGlvbiIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJUeXBlUHJlZml4RGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb24iLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29tYmluYXRvckRlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsIlJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsInRhcmdldFJlZmVyZW5jZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInJlc29sdmVkIiwic3Vic3RpdHV0aW9uIiwidGFyZ2V0U3RhdGVtZW50IiwicmVwbGFjZW1lbnRTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsIkNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsInR5cGVOYW1lIiwiZ2V0VHlwZU5hbWUiLCJnZXRQcm9vZk5vZGUiLCJsYWJlbE5vZGVzIiwiZ2V0TGFiZWxOb2RlcyIsImdldExhYmVsTm9kZSIsImxhYmVsU3RyaW5nIiwiZnJvbUxhYmVsU3RyaW5nIiwiZ2V0VmFyaWFibGVOb2RlIiwicHJlbWlzZU5vZGVzIiwiZ2V0UHJlbWlzZU5vZGVzIiwiZ2V0QXhpb21Ob2RlIiwiZ2V0TGVtbWFOb2RlIiwiZ2V0VGVybU5vZGUiLCJnZXROYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsInN0YXRlc21lbnROb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldFJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VTdHJpbmciLCJmcm9tUmVmZXJlbmNlU3RyaW5nIiwiZ2V0R29hbE5vZGUiLCJ0eXBlUHJlZml4TmFtZSIsImdldFR5cGVQcmVmaXhOYW1lIiwiZ2V0Q29uY2x1c2lvbk5vZGUiLCJnZXRUaGVvcmVtTm9kZSIsImdldEZyYW1lTm9kZSIsInRlcm1Ob2RlcyIsImdldFRlcm1Ob2RlcyIsImdldERlZHVjdGlvbk5vZGUiLCJnZXREZXJpdmF0aW9uTm9kZSIsIm9jbnN0cnVjdG9yTm9kZSIsImFzc3VtcHRpb25Ob2RlcyIsImdldEFzc3VtcHRpb25Ob2RlcyIsImxlZnRUZXJtTm9kZSIsImdldExlZnRUZXJtTm9kZSIsIm1ldGFtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsInR5cGVtTm9kZSIsImdldFR5cGVOb2RlIiwiZ2V0Q29uamVjdHVyZU5vZGUiLCJyaWdodFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsImdldEVxdWFsaXR5Tm9kZSIsInN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdXBwb3NpdGlvbk5vZGVzIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0VmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0SWRlbnRpZmllciIsImdldEp1ZGdlbWVudE5vZGUiLCJzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSIsImlzU3RlcE5vZGUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJjb25jbHVzaW5vTm9kZSIsImh5cG90aGVzaXNOb2RlIiwiZ2V0UHJvY2VkdXJlQ2FsbE5vZGUiLCJnZXRTdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcnZpYXRpb24iLCJtZXRhdmFyaWFibGVTdHJpbmciLCJnZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZ2V0VHlwZUFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSIsImlzU3VicHJvb2ZOb2RlIiwicGFyYW1ldGVyTm9kZXMiLCJnZXRQYXJhbWV0ZXJOb2RlcyIsImJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSIsImdldERlZmluZWRBc3NlcnRpb25Ob2RlIiwidHlwZXNOb2RlIiwiZ2V0VHlwZXNOb2RlIiwidHlwZXMiLCJ0YXJnZXRUZXJtTm9kZSIsImdldFRhcmdldFRlcm1Ob2RlIiwiZ2V0U2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZVN0cmluZyIsImZyb21TaWduYXR1cmVTdHJpbmciLCJnZXRQcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJpc1Byb3Zpc2lvbmFsIiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudE5vZGVzIiwiZ2V0U3RhdGVtZW50Tm9kZXMiLCJ5cG90aGVzZXMiLCJnZXRQcm9wZXJ0eU5vZGUiLCJzdWJqZWN0VGVybU5vZGUiLCJnZXRTdWJqZWN0VGVybU5vZGUiLCJ0YXJnZXRGcmFtZU5vZGUiLCJnZXRUYXJnZXRGcmFtZU5vZGUiLCJwcm9wZXJ0eVRlcm1Ob2RlIiwiZ2V0UHJvcGVydHlUZXJtTm9kZSIsImdldEdlbmVyYXRvck5vZGUiLCJpc1Jlc29sdmVkIiwicmVwbGFjZW1lbnRUZXJtTm9kZSIsImdldFJlcGxhY2VtZW50VGVybU5vZGUiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwiZ2V0VHlwZVByZWZpeE5vZGUiLCJnZXRDb21iaW5hdG9yTm9kZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwicmVwbGFjZW1lbnRGcmFtZU5vZGUiLCJnZXRSZXBsYWNlbWVudEZyYW1lTm9kZSIsImdlbmVyYWxDb250eHQiLCJnZXRDb25zdHJ1Y3Rvck5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VOb2RlIiwiZ2V0VGFyZ2V0UmVmZXJlbmNlTm9kZSIsInRhcmdldFJlZmVyZW5jZVN0cmluZyIsInRhcmdldFN0YXRlbWVudE5vZGUiLCJnZXRUYXJnZXRTdGF0ZW1lbnROb2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcyIsImdldFByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsImdldFRlcm1TdWJzdGl0dXRpb25Ob2RlIiwiZ2V0RnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlIiwiZ2V0UmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2VTdHJpbmciLCJyZXBsYWNlbWVudFN0YXRlbWVudE5vZGUiLCJnZXRSZXBsYWNlbWVudFN0YXRlbWVudE5vZGUiLCJtYXAiLCJ0eXBlTm9kZXMiLCJnZXRUeXBlTm9kZXMiLCJoeXBvdGhlc2lzIiwic3RlcE9yU3VicHJvb2ZOb2RlcyIsImdldFN0ZXBPclN1YnByb29mTm9k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
1910
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyxcbiAgICAgICAgIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBzY2hlbWFTdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uLFxuICAgICAgICAgc2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzQW5kVG9wTGV2ZWxBc3NlcnRpb24sXG4gICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMsXG4gICAgICAgICBjb3R5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsLFxuICAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGU7XG5cbiAgaWYgKHR5cGVOb2RlID09PSBudWxsKSB7XG4gICAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCk7XG5cbiAgICB0eXBlID0gYmFzZVR5cGU7ICAvLy9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIG5vZGUgPSB0eXBlTm9kZSwgIC8vL1xuICAgICAgICAgIG5hbWUgPSBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBwcmVmaXhOYW1lID0gcHJlZml4TmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSBub21pbmFsVHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpLFxuICAgICAgICAgIHN0cmluZyA9IHR5cGVTdHJpbmcsICAvLy9cbiAgICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgdHlwZSA9IG5ldyBUeXBlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdGVybSA9IG5ldyBUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0ZXAgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RlcE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcCA9IG5ldyBTdGVwKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCByZWZlcmVuY2UsIHNpZ25hdHVyZUFzc2VydGlvbik7XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUnVsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBydWxlU3RyaW5nID0gcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24obGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbiksXG4gICAgICAgIG5vZGUgPSBydWxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBydWxlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJ1bGUgPSBuZXcgUnVsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHByb29mLCBsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKTtcblxuICByZXR1cm4gcnVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdvYWxGcm9tR29hbE5vZGUoZ29hbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBHb2FsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGdvYWxOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZ29hbCA9IG5ldyBHb2FsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBnb2FsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxhYmVsTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JGcm9tRXJyb3JOb2RlKGVycm9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVycm9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVycm9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMZW1tYSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSBsZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBsZW1tYU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsZW1tYSA9IG5ldyBMZW1tYShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBsZW1tYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBmcmFtZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBmcmFtZSA9IG5ldyBGcmFtZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9vZk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2YgPSBuZXcgUHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBkZXJpdmF0aW9uKTtcblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbUZyb21BeGlvbU5vZGUoYXhpb21Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXhpb20gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gYXhpb21Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gYXhpb21Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYXhpb20gPSBuZXcgQXhpb20oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlbWFGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2NoZW1hIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RyYWludHMgPSBjb25zdHJhaW50c0Zyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzY2hlbWFTdHJpbmcgPSBzY2hlbWFTdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IHNjaGVtYU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzY2hlbWFTdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc2NoZW1hID0gbmV3IFNjaGVtYShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIGNvbnN0cmFpbnRzKTtcblxuICByZXR1cm4gc2NoZW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VjdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNlY3Rpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBoeXBvdGhlc2lzTm9kZXMgPSBzZWN0aW9uTm9kZS5nZXRIeXBvdGhlc2lzTm9kZXMoKSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzZXJ0aW9uID0gdG9wTGV2ZWxBc3NlcnRpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzZWN0aW9uU3RyaW5nID0gc2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzQW5kVG9wTGV2ZWxBc3NlcnRpb24oaHlwb3RoZXNlcywgdG9wTGV2ZWxBc3NlcnRpb24pLFxuICAgICAgICBub2RlID0gc2VjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzZWN0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2VjdGlvbiA9IG5ldyBTZWN0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgaHlwb3RoZXNlcywgdG9wTGV2ZWxBc3NlcnRpb24pO1xuXG4gIHJldHVybiBzZWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByZW1pc2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJlbWlzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJlbWlzZSA9IG5ldyBQcmVtaXNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gcHJlbWlzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gdGhlb3JlbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSB0aGVvcmVtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsQXNzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRoZW9yZW0gPSBuZXcgVGhlb3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHkgPSBudWxsO1xuXG4gIGlmIChwcm9wZXJ0eU5vZGUgIT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUHJvcGVydHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIG5vZGUgPSBwcm9wZXJ0eU5vZGUsIC8vL1xuICAgICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuXG4gICAgY29udGV4dCA9IG51bGw7XG5cbiAgICBwcm9wZXJ0eSA9IG5ldyBQcm9wZXJ0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGlkZW50aWZpZXIsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZOb2RlLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YkRlcml2YXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24oc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gc3VicHJvb2ZTdHJpbmc7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZiA9IG5ldyBTdWJwcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWFsaXR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWR1Y3Rpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gbmV3IERlZHVjdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybXMpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSBuZXcgUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganVkZ2VtZW50RnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEp1ZGdlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBqdWRnZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGdvYWwgPSBnb2FsRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QganVkZ2VtZW50ID0gbmV3IEp1ZGdlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGZyYW1lLCBnb2FsKTtcblxuICByZXR1cm4ganVkZ2VtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCksXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwYXJhbWV0ZXIgPSBuZXcgUGFyYW1ldGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgaWRlbnRpZmllcik7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvckZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBHZW5lcmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZ2VuZXJhdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgR2VuZXJhdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIGdlbmVyYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEh5cG90aGVzaXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gaHlwb3RoZXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGh5cG9odGVzaXMgPSBuZXcgSHlwb3RoZXNpcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGh5cG9odGVzaXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJhaW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RyYWludCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJhaW50Tm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnN0cmFpbnQgPSBuZXcgQ29uc3RyYWludChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29uc3RyYWludDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUoY29uamVjdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25qZWN0dXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSA9IGNvbmplY3R1cmVOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gY29uamVjdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb25qZWN0dXJlID0gbmV3IENvbmplY3R1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gY29uamVjdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21iaW5hdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbWJpbmF0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbWJpbmF0b3IgPSBuZXcgQ29tYmluYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uY2x1c2lvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25jbHVzaW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uY2x1c2lvbiA9IG5ldyBDb25jbHVzaW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZXJpdmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlcml2YXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZGVyaXZhdGlvbiA9IG5ldyBEZXJpdmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZVByZWZpeCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlUHJlZml4Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVQcmVmaXggPSBuZXcgVHlwZVByZWZpeChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUpO1xuXG4gIHJldHVybiB0eXBlUHJlZml4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhc3N1bXB0aW9uID0gbmV3IEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uc3RydWN0b3IgPSBuZXcgQ29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gY29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VwcG9zaXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VwcG9zaXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbiA9IG5ldyBTdXBwb3NpdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcHJvY2VkdXJlQ2FsbCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXF1aXZhbGVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXF1aXZhbGVuY2VOb2RlLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlcXVpdmFsZW5jZVN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSxcbiAgICAgICAgc3RyaW5nID0gZXF1aXZhbGVuY2VTdHJpbmc7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWl2YWxlbmNlID0gbmV3IEVxdWl2YWxlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgdGVybXMpO1xuXG4gIHJldHVybiBlcXVpdmFsZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGFUeXBlID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGUgPSBuZXcgTWV0YXZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgdGVybSwgdHlwZSwgbWV0YVR5cGUpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IHByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyhwcm9jZWR1cmVSZWZlcmVuY2UsIHBhcmFtZXRlcnMpLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVDYWxsU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlQ2FsbCA9IG5ldyBQcm9jZWR1cmVDYWxsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcGFyYW1ldGVycywgcHJvY2VkdXJlUmVmZXJlbmNlKTtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJEZXJpdmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YkRlcml2YXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJEZXJpdmF0aW9uID0gbmV3IFN1YkRlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gc3ViRGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uID0gbmV3IFR5cGVBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcCA9IHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnByb29mID0gc3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0ZXBPclN1YnByb29mID0gKHN0ZXAgfHwgc3VicHJvb2YpO1xuXG4gIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVEZWNsYXJhdGlvbkZyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZURlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVEZWNsYXJhdGlvbiA9IG5ldyBUeXBlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHR5cGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWZpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmVnYXRlZCA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb24gPSBuZXcgRGVmaW5lZEFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIGZyYW1lLCBuZWdhdGVkKTtcblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0VGVybSA9IHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFRlcm0gPSByZXBsYWNlbWVudFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gbmV3IFRlcm1TdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGFyZ2V0VGVybSwgcmVwbGFjZW1lbnRUZXJtKTtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBjb250ZXh0cyA9IFtcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgXSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0YXJnZXRGcmFtZSA9IHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gcmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBuZXcgRnJhbWVTdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGFyZ2V0RnJhbWUsIHJlcGxhY2VtZW50RnJhbWUpO1xuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdWJqZWN0VGVybSA9IHN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVRlcm0gPSBwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb24gPSBuZXcgUHJvcGVydHlBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdWJqZWN0VGVybSwgcHJvcGVydHlUZXJtKTtcblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMpO1xuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvdHlwZURlY2xhcmF0aW9uRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb3R5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlEZWNsYXJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY290eXBlRGVjbGFyYXRpb25TdHJpbmcgPSBjb3R5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsKHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKSxcbiAgICAgICAgc3RyaW5nID0gY290eXBlRGVjbGFyYXRpb25TdHJpbmc7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb3R5cGVEZWNsYXJhdGlvbiA9IG5ldyBDb3R5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsLCBwcm9wZXJ0eURlY2xhcmF0aW9ucyk7XG5cbiAgcmV0dXJuIGNvdHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnRhaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb24gPSBuZXcgQ29udGFpbmVkQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb24gPSBuZXcgU2lnbmF0dXJlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc2lnbmF0dXJlLCByZWZlcmVuY2UpO1xuXG4gIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZWVuY2UgPSBuZXcgUHJvY2VkdXJlUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZWVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbXBsaWNpdEFzc3VtcHRpb25Gcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSW1wbGljaXRBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uID0gbmV3IEltcGxpY2l0QXNzdW1wdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGltcGxpY2l0QXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RGVjbGFyYXRpb25Gcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eURlY2xhcmF0aW9uID0gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm9wZXJ0eSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5RGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHZhcmlhYmxlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmFja2V0ZWRDb21iaW5hdG9yRnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQnJhY2tldGVkQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBicmFja2V0ZWRDb21iaW5hdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkQ29tYmluYXRvciA9IG5ldyBCcmFja2V0ZWRDb21iaW5hdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gYnJhY2tldGVkQ29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRDb25zdHJ1Y3RvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkQ29uc3RydWN0b3IgPSBuZXcgQnJhY2tldGVkQ29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gYnJhY2tldGVkQ29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgR2VuZXJhdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZ2VuZXJhdG9yID0gZ2VuZXJhdG9yRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGdlbmVyYXRvckRlY2xhcmF0aW9uID0gbmV3IEdlbmVyYXRvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwsIGdlbmVyYXRvcik7XG5cbiAgcmV0dXJuIGdlbmVyYXRvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXhEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeERlY2xhcmF0aW9uID0gbmV3IFR5cGVQcmVmaXhEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGVQcmVmaXgpO1xuXG4gIHJldHVybiB0eXBlUHJlZml4RGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvckRlY2xhcmF0aW9uID0gbmV3IENvbWJpbmF0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGNvbWJpbmF0b3IpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VTdWJzdGl0dXRpb25Gcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBjb250ZXh0cyA9IFtcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgXSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2UgPSB0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2UgPSByZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb24gPSBuZXcgUmVmZXJlbmNlU3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRhcmdldFJlZmVyZW5jZSwgcmVwbGFjZW1lbnRSZWZlcmVuY2UpO1xuXG4gIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50U3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBjb250ZXh0cyA9IFtcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgXSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZXNvbHZlZCA9IHJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICB0YXJnZXRTdGF0ZW1lbnQgPSB0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb24gPSBuZXcgU3RhdGVtZW50U3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlc29sdmVkLCBzdWJzdGl0dXRpb24sIHRhcmdldFN0YXRlbWVudCwgcmVwbGFjZW1lbnRTdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwsIGNvbnN0cnVjdG9yKTtcblxuICByZXR1cm4gY29uc3RydWN0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhVHlwZSA9IG1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhVHlwZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBydWxlTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gcnVsZU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb29mTm9kZSA9IHNjaGVtYU5vZGUuZ2V0UHJvb2ZOb2RlKCksXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBsYWJlbE5vZGUgPSBzY2hlbWFOb2RlLmdldExhYmVsTm9kZSgpLFxuICAgICAgICBsYWJlbFN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKGxhYmVsTm9kZSksXG4gICAgICAgIGxhYmVsID0gTGFiZWwuZnJvbUxhYmVsU3RyaW5nKGxhYmVsU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlbWlzZU5vZGVzID0gcnVsZU5vZGUuZ2V0UHJlbWlzZU5vZGVzKCksXG4gICAgICAgIHByZW1pc2VzID0gcHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzKHByZW1pc2VOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByZW1pc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGF4aW9tID0gbnVsbDtcblxuICBjb25zdCBheGlvbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRBeGlvbU5vZGUoKTtcblxuICBpZiAoYXhpb21Ob2RlICE9PSBudWxsKSB7XG4gICAgYXhpb20gPSBheGlvbUZyb21BeGlvbU5vZGUoYXhpb21Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsZW1tYSA9IG51bGw7XG5cbiAgY29uc3QgbGVtbWFOb2RlID0gc2VjdGlvbk5vZGUuZ2V0TGVtbWFOb2RlKCk7XG5cbiAgaWYgKGxlbW1hTm9kZSAhPT0gbnVsbCkge1xuICAgIGxlbW1hID0gbGVtbWFGcm9tTGVtbWFOb2RlKGxlbW1hTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Hb2FsTm9kZShnb2FsTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gZ29hbE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlc21lbnROb2RlID0gZ29hbE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZXNtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RlcE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBzdGVwTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVmZXJlbmNlTm9kZSk7XG5cbiAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdvYWxGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGdvYWxOb2RlID0ganVkZ2VtZW50Tm9kZS5nZXRHb2FsTm9kZSgpLFxuICAgICAgICBnb2FsID0gZ29hbEZyb21Hb2FsTm9kZShnb2FsTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGdvYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGdlbmVyYXRvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cGVyVHlwZXMgPSBudWxsO1xuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gbnVsbDtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeE5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5hbWUgPSB0eXBlTm9kZS5nZXRUeXBlUHJlZml4TmFtZSgpLFxuICAgICAgICBwcmVmaXhOYW1lID0gdHlwZVByZWZpeE5hbWU7ICAvLy9cblxuICByZXR1cm4gcHJlZml4TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uY2x1c2lvbk5vZGUgPSBydWxlTm9kZS5nZXRDb25jbHVzaW9uTm9kZSgpLFxuICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0aGVvcmVtID0gbnVsbDtcblxuICBjb25zdCB0aGVvcmVtTm9kZSA9IHNlY3Rpb25Ob2RlLmdldFRoZW9yZW1Ob2RlKCk7XG5cbiAgaWYgKHRoZW9yZW1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZnJhbWVOb2RlID0ganVkZ2VtZW50Tm9kZS5nZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGVzID0gc2lnbmF0dXJlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZVByZWZpeE5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSBzY2hlbWFOb2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlcml2YXRpb25Ob2RlID0gcHJvb2ZOb2RlLmdldERlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlKG9jbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IG9jbnN0cnVjdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25Ob2RlcyA9IGZyYW1lTm9kZS5nZXRBc3N1bXB0aW9uTm9kZXMoKSxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHByZW1pc2VOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IGVxdWl2YWxlbmNlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICBuYW1lID0gbWV0YW1ldGF2YXJpYWJsZU5hbWU7ICAvLy9cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlbU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGxhYmVsTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJhaW50c0Zyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RyYWludHMgPSBbXTtcblxuICByZXR1cm4gY29uc3RyYWludHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25qZWN0dXJlID0gbnVsbDtcblxuICBjb25zdCBjb25qZWN0dXJlTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbmplY3R1cmVOb2RlKCk7XG5cbiAgaWYgKGNvbmplY3R1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUoY29uamVjdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBlcXVhbGl0eSA9IG51bGw7XG5cbiAgY29uc3QgZXF1YWxpdHlOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRFcXVhbGl0eU5vZGUoKTtcblxuICBpZiAoZXF1YWxpdHlOb2RlICE9PSBudWxsKSB7XG4gICAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gc2NoZW1hTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGVOb2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpLFxuICAgIGlkZW50aWZpZXIgPSB2YXJpYWJsZUlkZW50aWZpZXI7ICAvLy9cblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW10ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZGVkdWN0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBqdWRnZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEp1ZGdlbWVudE5vZGUoKTtcblxuICBpZiAoanVkZ2VtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RlcCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGUuaXNTdGVwTm9kZSgpO1xuXG4gIGlmIChzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSkge1xuICAgIGNvbnN0IHN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdGVwID0gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICByZXR1cm4gbm9taW5hbFR5cGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVzbWVudE5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlc21lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2lzTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gaHlwb3RoZXNpc05vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcmVmZXJlbmNlTm9kZSA9IGNvbnN0cmFpbnROb2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29uc3RyYWludE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB0eXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gcHJlbWlzZU5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBzdWJwcm9vZk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN1cHBvc2l0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7IC8vL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1YkRlcml2YXRpb25Ob2RlID0gc3VicHJvb2ZOb2RlLmdldFN1YkRlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIHN1YkRlcnZpYXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViRGVydmlhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IG1ldGF2YXJpYWJsZVN0cmluZywgLy8vXG4gICAgICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBzdGVwTm9kZS5nZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFR5cGVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldFByb29mTm9kZSgpO1xuXG4gIGlmIChwcm9vZk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN1YnByb29mT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZS5pc1N1YnByb29mTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlKSB7XG4gICAgY29uc3Qgc3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3VicHJvb2YgPSBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyTm9kZXMgPSBwcm9jZWR1cmVDYWxsTm9kZS5nZXRQYXJhbWV0ZXJOb2RlcygpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpXG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlcyA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3BMZXZlbEFzc2VydGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBheGlvbSA9IGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVtbWEgPSBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRoZW9yZW0gPSB0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbEFzc2VydGlvbiA9IChheGlvbSB8fCBsZW1tYSB8fCB0aGVvcmVtIHx8IGNvbmplY3R1cmUpO1xuXG4gIHJldHVybiB0b3BMZXZlbEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvY2VkdXJlQ2FsbCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlQ2FsbE5vZGUgPSBzdXBwb3NpdGlvbk5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gYnJhY2tldGVkQ2Nuc3RydWN0b3JOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKSxcbiAgICAgICAgdHlwZSA9IGJhc2VUeXBlOyAgLy8vXG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGRlZmluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1cGVyVHlwZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc05vZGUgPSB0eXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVzTm9kZSgpO1xuXG4gIGlmICh0eXBlc05vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlcyA9IHR5cGVzRnJvbVR5cGVzTm9kZSh0eXBlc05vZGUsIGNvbnRleHQpO1xuXG4gICAgc3VwZXJUeXBlcyA9IHR5cGVzOyAvLy9cbiAgfVxuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRhcmdldFRlcm1Ob2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGFyZ2V0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVOb2RlID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRTaWduYXR1cmVOb2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgc2lnbmF0dXJlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcoc2lnbmF0dXJlTm9kZSk7XG5cbiAgICBzaWduYXR1cmUgPSBTaWduYXR1cmUuZnJvbVNpZ25hdHVyZVN0cmluZyhzaWduYXR1cmVTdHJpbmcsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHlBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gdHlwZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHswXG4gIGxldCBjb250YWluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVzTm9kZSgpO1xuXG4gIGlmICh0eXBlc05vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlcyA9IHR5cGVzRnJvbVR5cGVzTm9kZSh0eXBlc05vZGUsIGNvbnRleHQpO1xuXG4gICAgc3VwZXJUeXBlcyA9IHR5cGVzOyAvLy9cbiAgfVxuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVzbWVudE5vZGUgPSBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVzbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBzaWduYXR1cmVOb2RlID0gc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZS5nZXRTaWduYXR1cmVOb2RlKCksXG4gICAgICAgIHNpZ25hdHVyZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHNpZ25hdHVyZU5vZGUpLFxuICAgICAgICBzaWduYXR1cmUgPSBTaWduYXR1cmUuZnJvbVNpZ25hdHVyZVN0cmluZyhzaWduYXR1cmVTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBzaWduYXR1cmVBc3NlcnRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eSA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlOb2RlID0gcHJvcGVydHlEZWNsYXJhdGlvbk5vZGUuZ2V0UHJvcGVydHlOb2RlKCk7XG5cbiAgaWYgKHByb3BlcnR5Tm9kZSAhPT0gbnVsbCkge1xuICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJqZWN0VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1YmplY3RUZXJtTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRTdWJqZWN0VGVybU5vZGUoKSxcbiAgICAgICAgc3ViamVjdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHN1YmplY3RUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1YmplY3RUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0YXJnZXRGcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIHRhcmdldEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHRhcmdldEZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldEZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IGNvdHlwZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBicmFja2V0ZWRDb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eVRlcm1Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFByb3BlcnR5VGVybU5vZGUoKSxcbiAgICAgICAgcHJvcGVydHlUZXJtID0gdGVybUZyb21UZXJtTm9kZShwcm9wZXJ0eVRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydHlUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvckZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGdlbmVyYXRvck5vZGUgPSBnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0R2VuZXJhdG9yTm9kZSgpLFxuICAgICAgICBnZW5lcmF0b3IgPSBnZW5lcmF0b3JGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZ2VuZXJhdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlc29sdmVkID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5pc1Jlc29sdmVkKCk7XG5cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZS5nZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVwbGFjZW1lbnRUZXJtTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50VGVybU5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyZXBsYWNlbWVudFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5vZGUgPSB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLmdldFR5cGVQcmVmaXhOb2RlKCksXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbWJpbmF0b3JOb2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRDb21iaW5hdG9yTm9kZSgpLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFUeXBlTmFtZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgbWV0YVR5cGUgPSBjb250ZXh0LmZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSk7XG5cbiAgcmV0dXJuIG1ldGFUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50RnJhbWVOb2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50RnJhbWVOb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50RnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUocmVwbGFjZW1lbnRGcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudEZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnR4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IGZyYW1lU3Vic3RpdHV0aW9uID0gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udHh0LCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gdGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250eHQsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IChmcmFtZVN1YnN0aXR1dGlvbiB8fCB0ZXJtU3Vic3RpdHV0aW9uKTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RydWN0b3JOb2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29uc3RydWN0b3JOb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyh0YXJnZXRSZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcodGFyZ2V0UmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0UmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0YXJnZXRTdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHRhcmdldFN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHRhcmdldFN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0UHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKCksXG4gICAgICAgIHByb3BlcnR5RGVjbGFyYXRpb25zID0gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eURlY2xhcmF0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGxldCB0ZXJtU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICBjb25zdCB0ZXJtU3Vic3RpdHV0aW9uTm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAodGVybVN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtU3Vic3RpdHV0aW9uID0gdGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBsZXQgZnJhbWVTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lU3Vic3RpdHV0aW9uTm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0RnJhbWVTdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgaWYgKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWVTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVwbGFjZW1lbnRSZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXBsYWNlbWVudFN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50U3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCB0ZXJtcyA9IHRlcm1Ob2Rlcy5tYXAoKHRlcm1Ob2RlKSA9PiB7XG4gICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVzRnJvbVR5cGVzTm9kZSh0eXBlc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGVzID0gdHlwZXNOb2RlLmdldFR5cGVOb2RlcygpLFxuICAgICAgICB0eXBlcyA9IHR5cGVOb2Rlcy5tYXAoKHR5cGVOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiB0eXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxzID0gbGFiZWxOb2Rlcy5tYXAoKGxhYmVsTm9kZSkgPT4ge1xuICAgIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIGxhYmVsU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobGFiZWxOb2RlKSxcbiAgICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21MYWJlbFN0cmluZyhsYWJlbFN0cmluZywgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH0pO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMocHJlbWlzZU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VzID0gcHJlbWlzZU5vZGVzLm1hcCgocHJlbWlzZU5vZGUpID0+IHtcbiAgICBjb25zdCBwcmVtaXNlID0gcHJlbWlzZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByZW1pc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnRzID0gc3RhdGVtZW50Tm9kZXMubWFwKChzdGF0ZW1lbnROb2RlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyTm9kZSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyhoeXBvdGhlc2lzTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IGh5cG90aGVzaXNOb2Rlcy5tYXAoKGh5cG90aGVzZU5vZGUpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzID0gaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBoeXBvdGhlc2lzO1xuICB9KTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uTm9kZXMubWFwKChhc3N1bXB0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uTm9kZXMubWFwKChzdXBwb3NpdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbiA9IHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVzID0gZGVyaXZhdGlvbk5vZGUuZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcygpLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcE9yU3VicHJvb2ZOb2Rlcy5tYXAoKHN0ZXBPclN1YnByb29mTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBPclN1YnByb29mID0gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVzID0gc3ViRGVyaXZhdGlvbk5vZGUuZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcygpLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcE9yU3VicHJvb2ZOb2Rlcy5tYXAoKHN0ZXBPclN1YnByb29mTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBPclN1YnByb29mID0gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlEZWNscmF0aW9ucyA9IHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMubWFwKChwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IHByb3BlcnR5RGVjbGNhcmF0aW9uID0gcHJvcGVydHlEZWNsYXJhdGlvbkZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHlEZWNsY2FyYXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBwcm9wZXJ0eURlY2xyYXRpb25zO1xufVxuIl0sIm5hbWVzIjpbImFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMiLCJhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUiLCJheGlvbUZyb21BeGlvbU5vZGUiLCJheGlvbUZyb21TZWN0aW9uTm9kZSIsImJyYWNrZXRlZENvbWJpbmF0b3JGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUiLCJicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUiLCJjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlIiwiY29uY2x1c2lvbkZyb21SdWxlTm9kZSIsImNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUiLCJjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlIiwiY29uc3RyYWludEZyb21Db25zdHJhaW50Tm9kZSIsImNvbnN0cmFpbnRzRnJvbVNjaGVtYU5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiY290eXBlRGVjbGFyYXRpb25Gcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUiLCJkZWR1Y3Rpb25Gcm9tU2NoZW1hTm9kZSIsImRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZSIsImRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlIiwiZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZSIsImVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZSIsImVycm9yRnJvbUVycm9yTm9kZSIsImZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImZyYW1lRnJvbUZyYW1lTm9kZSIsImZyYW1lRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImZyYW1lRnJvbUp1ZGdlbWVudE5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwiZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlIiwiZ2VuZXJhdG9yRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsImdlbmVyYXRvckZyb21HZW5lcmF0b3JOb2RlIiwiZ29hbEZyb21Hb2FsTm9kZSIsImdvYWxGcm9tSnVkZ2VtZW50Tm9kZSIsImh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzIiwiaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlIiwiaWRlbnRpZmllckZyb21QYXJhbWV0ZXJOb2RlIiwiaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUiLCJpZGVudGlmaWVyRnJvbVZhcmlhYmxlTm9kZSIsImltcGxpY2l0QXNzdW1wdGlvbkZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwianVkZ2VtZW50RnJvbUp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsImxhYmVsRnJvbUxhYmVsTm9kZSIsImxhYmVsRnJvbVNjaGVtYU5vZGUiLCJsYWJlbHNGcm9tTGFiZWxOb2RlcyIsImxhYmVsc0Zyb21SdWxlTm9kZSIsImxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJsZW1tYUZyb21MZW1tYU5vZGUiLCJsZW1tYUZyb21TZWN0aW9uTm9kZSIsIm1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50Tm9kZSIsIm5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsIm5hbWVGcm9tUGFyYW10ZXJOb2RlIiwibmFtZUZyb21QYXJhbmV0ZXJOb2RlIiwibmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwibmFtZUZyb21UeXBlTm9kZSIsIm5hbWVGcm9tVHlwZVByZWZpeE5vZGUiLCJuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsIm5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSIsInBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlIiwicGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyIsInBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcmVmaXhOYW1lRnJvbVR5cGVOb2RlIiwicHJlbWlzZUZyb21QcmVtaXNlTm9kZSIsInByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyIsInByZW1pc2VzRnJvbVJ1bGVOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicHJvb2ZGcm9tUHJvb2ZOb2RlIiwicHJvb2ZGcm9tUnVsZU5vZGUiLCJwcm9vZkZyb21TY2hlbWFOb2RlIiwicHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwicHJvcGVydGllc0Zyb21UeXBlTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzIiwicHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUiLCJwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UZXJtTm9kZSIsInByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UeXBlTm9kZSIsInByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVmFyaWFibGVOb2RlIiwicmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlIiwicmVmZXJlbmNlRnJvbUdvYWxOb2RlIiwicmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbVN0ZXBOb2RlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwicmVzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJydWxlRnJvbVJ1bGVOb2RlIiwic2NoZW1hRnJvbVNjaGVtYU5vZGUiLCJzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGVwTm9kZSIsInNpZ25hdHVyZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwic2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUiLCJzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlIiwic3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwic3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlIiwic3RhdGVtZW50RnJvbUNvbmNsdXNpb25Ob2RlIiwic3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlIiwic3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Hb2FsTm9kZSIsInN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZSIsInN0YXRlbWVudEZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwic3RhdGVtZW50RnJvbVByZW1pc2VOb2RlIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RlcE5vZGUiLCJzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzIiwic3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJzdGVwRnJvbVN0ZXBOb2RlIiwic3RlcEZyb21TdGVwT3JTdWJwcm9vZk5vZGUiLCJzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlIiwic3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZSIsInN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUiLCJzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUiLCJzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21UeXBlRGVjbGFyYXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21UeXBlTm9kZSIsInN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZSIsInN1cHBvc2l0aW9uc0Zyb21TY2hlbWFOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZSIsInN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzIiwic3VwcG9zaXRpb25zRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsInRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGVybUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJ0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZSIsInRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbUdlbmVyYXRvck5vZGUiLCJ0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZSIsInRlcm1Gcm9tUHJvcGVydHlOb2RlIiwidGVybUZyb21UZXJtTm9kZSIsInRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlIiwidGVybXNGcm9tU2lnbmF0dXJlTm9kZSIsInRlcm1zRnJvbVRlcm1Ob2RlcyIsInRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUiLCJ0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlIiwidG9wTGV2ZWxBc3NlcnRpb25Gcm9tU2VjdGlvbk5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZURlY2xhcmF0aW9uRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21FcXVpdmFsZW5jZU5vZGUiLCJ0eXBlRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tR2VuZXJhdG9yTm9kZSIsInR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsInR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbVByb3BlcnR5Tm9kZSIsInR5cGVGcm9tVGVybU5vZGUiLCJ0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21UeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21UeXBlTm9kZSIsInR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbVZhcmlhYmxlTm9kZSIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwidHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwidHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVzRnJvbVR5cGVzTm9kZSIsInZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21UZXJtTm9kZSIsInZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZU5vZGUiLCJjb250ZXh0IiwidHlwZSIsImJhc2VUeXBlIiwiYmFzZVR5cGVGcm9tTm90aGluZyIsIlR5cGUiLCJlbGVtZW50cyIsIm5vZGUiLCJuYW1lIiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJub21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwidHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUiLCJzdHJpbmciLCJicmVha1BvaW50IiwidGVybU5vZGUiLCJUZXJtIiwibm9kZUFzU3RyaW5nIiwidGVybSIsInN0ZXBOb2RlIiwiU3RlcCIsInN0YXRlbWVudCIsInJlZmVyZW5jZSIsInNpZ25hdHVyZUFzc2VydGlvbiIsInN0ZXAiLCJydWxlTm9kZSIsIlJ1bGUiLCJwcm9vZiIsImxhYmVscyIsInByZW1pc2VzIiwiY29uY2x1c2lvbiIsInJ1bGVTdHJpbmciLCJydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbiIsInJ1bGUiLCJnb2FsTm9kZSIsIkdvYWwiLCJnb2FsIiwibGFiZWxOb2RlIiwiTGFiZWwiLCJtZXRhdmFyaWFibGUiLCJsYWJlbCIsImVycm9yTm9kZSIsIkVycm9yIiwiZXJyb3IiLCJsZW1tYU5vZGUiLCJMZW1tYSIsInRvcExldmVsQXNzc2VydGlvbk5vZGUiLCJkZWR1Y3Rpb24iLCJzdXBwb3NpdGlvbnMiLCJzaWduYXR1cmUiLCJoeXBvdGhlc2VzIiwidG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwibGVtbWEiLCJmcmFtZU5vZGUiLCJGcmFtZSIsImFzc3VtcHRpb25zIiwiZnJhbWUiLCJwcm9vZk5vZGUiLCJQcm9vZiIsImRlcml2YXRpb24iLCJheGlvbU5vZGUiLCJBeGlvbSIsImF4aW9tIiwic2NoZW1hTm9kZSIsIlNjaGVtYSIsImNvbnN0cmFpbnRzIiwic2NoZW1hU3RyaW5nIiwic2NoZW1hU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwic2NoZW1hIiwic2VjdGlvbk5vZGUiLCJTZWN0aW9uIiwiaHlwb3RoZXNpc05vZGVzIiwiZ2V0SHlwb3RoZXNpc05vZGVzIiwidG9wTGV2ZWxBc3NlcnRpb24iLCJzZWN0aW9uU3RyaW5nIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzQW5kVG9wTGV2ZWxBc3NlcnRpb24iLCJzZWN0aW9uIiwicHJlbWlzZU5vZGUiLCJQcmVtaXNlIiwicHJvY2VkdXJlQ2FsbCIsInByZW1pc2UiLCJ0aGVvcmVtTm9kZSIsIlRoZW9yZW0iLCJ0aGVvcmVtIiwicHJvcGVydHlOb2RlIiwicHJvcGVydHkiLCJQcm9wZXJ0eSIsInZhcmlhYmxlTm9kZSIsIlZhcmlhYmxlIiwiaWRlbnRpZmllciIsInZhcmlhYmxlIiwic3VicHJvb2ZOb2RlIiwiU3VicHJvb2YiLCJzdWJEZXJpdmF0aW9uIiwic3VicHJvb2ZTdHJpbmciLCJzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uIiwic3VicHJvb2YiLCJlcXVhbGl0eU5vZGUiLCJFcXVhbGl0eSIsImxlZnRUZXJtIiwicmlnaHRUZXJtIiwiZXF1YWxpdHkiLCJkZWR1Y3Rpb25Ob2RlIiwiRGVkdWN0aW9uIiwic3RhdGVtZW50Tm9kZSIsIlN0YXRlbWVudCIsInNpZ25hdHVyZU5vZGUiLCJTaWduYXR1cmUiLCJ0ZXJtcyIsInJlZmVyZW5jZU5vZGUiLCJSZWZlcmVuY2UiLCJqdWRnZW1lbnROb2RlIiwiSnVkZ2VtZW50IiwianVkZ2VtZW50IiwicGFyYW1ldGVyTm9kZSIsIlBhcmFtZXRlciIsInBhcmFtZXRlciIsImdlbmVyYXRvck5vZGUiLCJHZW5lcmF0b3IiLCJnZW5lcmF0b3IiLCJoeXBvdGhlc2VOb2RlIiwiSHlwb3RoZXNpcyIsImh5cG9odGVzaXMiLCJjb25zdHJhaW50Tm9kZSIsIkNvbnN0cmFpbnQiLCJjb25zdHJhaW50IiwiY29uamVjdHVyZU5vZGUiLCJDb25qZWN0dXJlIiwiY29uamVjdHVyZSIsImNvbWJpbmF0b3JOb2RlIiwiQ29tYmluYXRvciIsImNvbWJpbmF0b3IiLCJjb25jbHVzaW9uTm9kZSIsIkNvbmNsdXNpb24iLCJkZXJpdmF0aW9uTm9kZSIsIkRlcml2YXRpb24iLCJzdGVwc09yU3VicHJvb2ZzIiwidHlwZVByZWZpeE5vZGUiLCJUeXBlUHJlZml4IiwidHlwZVByZWZpeCIsImFzc3VtcHRpb25Ob2RlIiwiQXNzdW1wdGlvbiIsImFzc3VtcHRpb24iLCJjb25zdHJ1Y3Rvck5vZGUiLCJDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwic3VwcG9zaXRpb25Ob2RlIiwiU3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsImVxdWl2YWxlbmNlTm9kZSIsIkVxdWl2YWxlbmNlIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyIsImVxdWl2YWxlbmNlIiwibWV0YXZhcmlhYmxlTm9kZSIsIk1ldGF2YXJpYWJsZSIsIm1ldGFUeXBlIiwicHJvY2VkdXJlQ2FsbE5vZGUiLCJQcm9jZWR1cmVDYWxsIiwicGFyYW1ldGVycyIsInByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZUNhbGxTdHJpbmciLCJwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMiLCJzdWJEZXJpdmF0aW9uTm9kZSIsIlN1YkRlcml2YXRpb24iLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsIlR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwic3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcE9yU3VicHJvb2YiLCJ0eXBlRGVjbGFyYXRpb25Ob2RlIiwiVHlwZURlY2xhcmF0aW9uIiwidHlwZURlY2xhcmF0aW9uIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJEZWZpbmVkQXNzZXJ0aW9uIiwibmVnYXRlZCIsImlzTmVnYXRlZCIsImRlZmluZWRBc3NlcnRpb24iLCJ0ZXJtU3Vic3RpdHV0aW9uTm9kZSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwiVGVybVN1YnN0aXR1dGlvbiIsImNvbnRleHRzIiwidGFyZ2V0VGVybSIsInJlcGxhY2VtZW50VGVybSIsInRlcm1TdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJGcmFtZVN1YnN0aXR1dGlvbiIsInRhcmdldEZyYW1lIiwicmVwbGFjZW1lbnRGcmFtZSIsImZyYW1lU3Vic3RpdHV0aW9uIiwicHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiUHJvcGVydHlBc3NlcnRpb24iLCJzdWJqZWN0VGVybSIsInByb3BlcnR5VGVybSIsInByb3BlcnR5QXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJzdGF0ZW1lbnRzIiwic3VicHJvb2ZBc3NlcnRpb24iLCJjb3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJDb3R5cGVEZWNsYXJhdGlvbiIsInByb3BlcnR5RGVjbGFyYXRpb25zIiwiY290eXBlRGVjbGFyYXRpb25TdHJpbmciLCJjb3R5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsIiwiY290eXBlRGVjbGFyYXRpb24iLCJjb250YWluZWRBc3NlcnRpb25Ob2RlIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uIiwic2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsIlNpZ25hdHVyZUFzc2VydGlvbiIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJQcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVSZWZlcmVlbmNlIiwiaW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsIkltcGxpY2l0QXNzdW1wdGlvbiIsImltcGxpY2l0QXNzdW1wdGlvbiIsInByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwiUHJvcGVydHlEZWNsYXJhdGlvbiIsInByb3BlcnR5RGVjbGFyYXRpb24iLCJ2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIlZhcmlhYmxlRGVjbGFyYXRpb24iLCJ2YXJpYWJsZURlY2xhcmF0aW9uIiwiYnJhY2tldGVkQ29tYmluYXRvck5vZGUiLCJCcmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsIkJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3IiLCJnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJHZW5lcmF0b3JEZWNsYXJhdGlvbiIsImdlbmVyYXRvckRlY2xhcmF0aW9uIiwidHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsIlR5cGVQcmVmaXhEZWNsYXJhdGlvbiIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb21iaW5hdG9yRGVjbGFyYXRpb24iLCJjb21iaW5hdG9yRGVjbGFyYXRpb24iLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwiUmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwidGFyZ2V0UmVmZXJlbmNlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2UiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb24iLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwiU3RhdGVtZW50U3Vic3RpdHV0aW9uIiwicmVzb2x2ZWQiLCJzdWJzdGl0dXRpb24iLCJ0YXJnZXRTdGF0ZW1lbnQiLCJyZXBsYWNlbWVudFN0YXRlbWVudCIsInN0YXRlbWVudFN1YnN0aXR1dGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29uc3RydWN0b3JEZWNsYXJhdGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwidHlwZU5hbWUiLCJnZXRUeXBlTmFtZSIsImdldFByb29mTm9kZSIsImxhYmVsTm9kZXMiLCJnZXRMYWJlbE5vZGVzIiwiZ2V0TGFiZWxOb2RlIiwibGFiZWxTdHJpbmciLCJmcm9tTGFiZWxTdHJpbmciLCJnZXRWYXJpYWJsZU5vZGUiLCJwcmVtaXNlTm9kZXMiLCJnZXRQcmVtaXNlTm9kZXMiLCJnZXRBeGlvbU5vZGUiLCJnZXRMZW1tYU5vZGUiLCJnZXRUZXJtTm9kZSIsImdldE5hbWUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwic3RhdGVzbWVudE5vZGUiLCJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0UmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZVN0cmluZyIsImZyb21SZWZlcmVuY2VTdHJpbmciLCJnZXRHb2FsTm9kZSIsInR5cGVQcmVmaXhOYW1lIiwiZ2V0VHlwZVByZWZpeE5hbWUiLCJnZXRDb25jbHVzaW9uTm9kZSIsImdldFRoZW9yZW1Ob2RlIiwiZ2V0RnJhbWVOb2RlIiwidGVybU5vZGVzIiwiZ2V0VGVybU5vZGVzIiwiZ2V0RGVkdWN0aW9uTm9kZSIsImdldERlcml2YXRpb25Ob2RlIiwib2Nuc3RydWN0b3JOb2RlIiwiYXNzdW1wdGlvbk5vZGVzIiwiZ2V0QXNzdW1wdGlvbk5vZGVzIiwibGVmdFRlcm1Ob2RlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwibWV0YW1ldGF2YXJpYWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwidHlwZW1Ob2RlIiwiZ2V0VHlwZU5vZGUiLCJnZXRDb25qZWN0dXJlTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwiZ2V0RXF1YWxpdHlOb2RlIiwic3VwcG9zaXRpb25Ob2RlcyIsImdldFN1cHBvc2l0aW9uTm9kZXMiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJnZXRJZGVudGlmaWVyIiwiZ2V0SnVkZ2VtZW50Tm9kZSIsInN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlIiwiaXNTdGVwTm9kZSIsImdldE5vbWluYWxUeXBlTmFtZSIsImNvbmNsdXNpbm9Ob2RlIiwiaHlwb3RoZXNpc05vZGUiLCJnZXRQcm9jZWR1cmVDYWxsTm9kZSIsImdldFN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVydmlhdGlvbiIsIm1ldGF2YXJpYWJsZVN0cmluZyIsImdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJnZXRUeXBlQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlIiwiaXNTdWJwcm9vZk5vZGUiLCJwYXJhbWV0ZXJOb2RlcyIsImdldFBhcmFtZXRlck5vZGVzIiwiYnJhY2tldGVkQ2Nuc3RydWN0b3JOb2RlIiwiZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0eXBlc05vZGUiLCJnZXRUeXBlc05vZGUiLCJ0eXBlcyIsInRhcmdldFRlcm1Ob2RlIiwiZ2V0VGFyZ2V0VGVybU5vZGUiLCJnZXRTaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlU3RyaW5nIiwiZnJvbVNpZ25hdHVyZVN0cmluZyIsImdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImlzUHJvdmlzaW9uYWwiLCJnZXRDb250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsInlwb3RoZXNlcyIsImdldFByb3BlcnR5Tm9kZSIsInN1YmplY3RUZXJtTm9kZSIsImdldFN1YmplY3RUZXJtTm9kZSIsInRhcmdldEZyYW1lTm9kZSIsImdldFRhcmdldEZyYW1lTm9kZSIsInByb3BlcnR5VGVybU5vZGUiLCJnZXRQcm9wZXJ0eVRlcm1Ob2RlIiwiZ2V0R2VuZXJhdG9yTm9kZSIsImlzUmVzb2x2ZWQiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicmVwbGFjZW1lbnRUZXJtTm9kZSIsImdldFJlcGxhY2VtZW50VGVybU5vZGUiLCJnZXRUeXBlUHJlZml4Tm9kZSIsImdldENvbWJpbmF0b3JOb2RlIiwibWV0YVR5cGVOYW1lIiwiZ2V0TWV0YVR5cGVOYW1lIiwiZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUiLCJyZXBsYWNlbWVudEZyYW1lTm9kZSIsImdldFJlcGxhY2VtZW50RnJhbWVOb2RlIiwiZ2VuZXJhbENvbnR4dCIsImdldENvbnN0cnVjdG9yTm9kZSIsInRhcmdldFJlZmVyZW5jZU5vZGUiLCJnZXRUYXJnZXRSZWZlcmVuY2VOb2RlIiwidGFyZ2V0UmVmZXJlbmNlU3RyaW5nIiwidGFyZ2V0U3RhdGVtZW50Tm9kZSIsImdldFRhcmdldFN0YXRlbWVudE5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzIiwiZ2V0UHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzIiwiZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUiLCJnZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUiLCJnZXRSZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZVN0cmluZyIsInJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSIsImdldFJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSIsIm1hcCIsInR5cGVOb2RlcyIsImdldFR5cGVOb2RlcyIsImh5cG90aGVzaXMiLCJzdGVwT3JTdWJwcm9vZk5vZGVzIiwiZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcyIsInByb3BlcnR5RGVjbHJhdGlvbnMiLCJwcm9wZXJ0eURlY2xjYXJhdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBMGdCZ0JBO2VBQUFBOztRQXV2REFDO2VBQUFBOztRQXZnQ0FDO2VBQUFBOztRQXhrQ0FDO2VBQUFBOztRQXUyQkFDO2VBQUFBOztRQXpNQUM7ZUFBQUE7O1FBV0FDO2VBQUFBOztRQTBDQUM7ZUFBQUE7O1FBbXNDQUM7ZUFBQUE7O1FBbm5EQUM7ZUFBQUE7O1FBY0FDO2VBQUFBOztRQWtzQkFDO2VBQUFBOztRQXJ1QkFDO2VBQUFBOztRQW01QkFDO2VBQUFBOztRQS81QkFDO2VBQUFBOztRQXk1QkFDO2VBQUFBOztRQXRaQUM7ZUFBQUE7O1FBOHFDQUM7ZUFBQUE7O1FBL2tEQUM7ZUFBQUE7O1FBa09BQztlQUFBQTs7UUFxcENBQztlQUFBQTs7UUF2cUNBQztlQUFBQTs7UUEzWkFDO2VBQUFBOztRQWs0QkFDO2VBQUFBOztRQXFvQkFDO2VBQUFBOztRQTNyQ0FDO2VBQUFBOztRQW9wQ0FDO2VBQUFBOztRQTd6Q0FDO2VBQUFBOztRQWt2QkFDO2VBQUFBOztRQXA2QkFDO2VBQUFBOztRQTBpQ0FDO2VBQUFBOztRQXJ6QkFDO2VBQUFBOztRQTliQUM7ZUFBQUE7O1FBc21EQUM7ZUFBQUE7O1FBMUdBQztlQUFBQTs7UUExOUNBQztlQUFBQTs7UUFxZ0RBQztlQUFBQTs7UUFsZUFDO2VBQUFBOztRQWhnQkFDO2VBQUFBOztRQW8rQ0FDO2VBQUFBOztRQXJ6Q0FDO2VBQUFBOztRQW1yQ0FDO2VBQUFBOztRQW5vREFDO2VBQUFBOztRQTNUQUM7ZUFBQUE7O1FBa2lDQUM7ZUFBQUE7O1FBeW5DQUM7ZUFBQUE7O1FBL1JBQztlQUFBQTs7UUFsakRBQztlQUFBQTs7UUFnaUNBQztlQUFBQTs7UUF4REFDO2VBQUFBOztRQVBBQztlQUFBQTs7UUFqbUJBQztlQUFBQTs7UUE3YUFDO2VBQUFBOztRQXVpQ0FDO2VBQUFBOztRQXh6Q0FDO2VB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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-nominal",
3
3
  "author": "James Smith",
4
- "version": "1.0.244",
4
+ "version": "1.0.245",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-nominal",
7
7
  "description": "Occam's Nominal language.",
@@ -11,8 +11,8 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "necessary": "^17.5.0",
14
- "occam-furtle": "^3.0.322",
15
- "occam-languages": "^0.0.287",
14
+ "occam-furtle": "^3.0.323",
15
+ "occam-languages": "^0.0.288",
16
16
  "occam-lexers": "^23.1.67",
17
17
  "occam-parsers": "^23.1.80",
18
18
  "occam-query": "^4.1.183"
@@ -105,7 +105,7 @@ export default define(class Constructor extends Element {
105
105
  let termUnifies = false;
106
106
 
107
107
  const termString = term.getString(),
108
- includeType = false,
108
+ includeType = true,
109
109
  constructorString = this.getString(includeType); ///
110
110
 
111
111
  context.trace(`Unifying the '${termString}' term with the '${constructorString}' constructor...`);
@@ -534,11 +534,11 @@ export function assumptionFromAssumptionNode(assumptionNode, context) {
534
534
 
535
535
  export function constructorFromConstructorNode(constructorNode, context) {
536
536
  const { Constructor } = elements,
537
- node = constructorNode, ///
538
- string = context.nodeAsString(node),
539
- breakPoint = null,
540
- term = termFromConstructorNode(constructorNode, context),
541
- type = typeFromConstructorNode(constructorNode, context);
537
+ node = constructorNode, ///
538
+ string = context.nodeAsString(node),
539
+ breakPoint = null,
540
+ term = termFromConstructorNode(constructorNode, context),
541
+ type = typeFromConstructorNode(constructorNode, context);
542
542
 
543
543
  context = null;
544
544
 
@@ -1784,6 +1784,16 @@ export function typeFromVariableDeclarationNode(variableDeclarationNode, context
1784
1784
  return type;
1785
1785
  }
1786
1786
 
1787
+ export function topLevelAssertionFromSectionNode(sectionNode, context) {
1788
+ const axiom = axiomFromSectionNode(sectionNode, context),
1789
+ lemma = lemmaFromSectionNode(sectionNode, context),
1790
+ theorem = theoremFromSectionNode(sectionNode, context),
1791
+ conjecture = conjectureFromSectionNode(sectionNode, context),
1792
+ topLevelAssertion = (axiom || lemma || theorem || conjecture);
1793
+
1794
+ return topLevelAssertion;
1795
+ }
1796
+
1787
1797
  export function procedureCallFromSuppositionNode(suppositionNode, context) {
1788
1798
  let procedureCall = null;
1789
1799
 
@@ -1796,16 +1806,6 @@ export function procedureCallFromSuppositionNode(suppositionNode, context) {
1796
1806
  return procedureCall;
1797
1807
  }
1798
1808
 
1799
- export function topLevelAssertionFromSectionNode(sectionNode, context) {
1800
- const axiom = axiomFromSectionNode(sectionNode, context),
1801
- lemma = lemmaFromSectionNode(sectionNode, context),
1802
- theorem = theoremFromSectionNode(sectionNode, context),
1803
- conjecture = conjectureFromSectionNode(sectionNode, context),
1804
- topLevelAssertion = (axiom || lemma || theorem || conjecture);
1805
-
1806
- return topLevelAssertion;
1807
- }
1808
-
1809
1809
  export function negatedFromJDefinedAssertionNode(definedAssertionNode, context) {
1810
1810
  const negated = definedAssertionNode.isNegated();
1811
1811
 
@@ -2091,13 +2091,6 @@ export function provisionalFromVariableDeclarationNode(variableDeclarationNode,
2091
2091
  return provisional;
2092
2092
  }
2093
2093
 
2094
- export function replacementTermFromTermSubstitutionNode(termSubstitutionNode, context) {
2095
- const replacementTermNode = termSubstitutionNode.getReplacementTermNode(),
2096
- replacementTerm = termFromTermNode(replacementTermNode, context);
2097
-
2098
- return replacementTerm;
2099
- }
2100
-
2101
2094
  export function procedureReferenceFromProcedureCallNode(procedureCallNode, context) {
2102
2095
  const procedureReferenceNode = procedureCallNode.getProcedureReferenceNode(),
2103
2096
  procedureReference = procedureReferenceFromProcedureReferenceNode(procedureReferenceNode, context);
@@ -2105,6 +2098,13 @@ export function procedureReferenceFromProcedureCallNode(procedureCallNode, conte
2105
2098
  return procedureReference;
2106
2099
  }
2107
2100
 
2101
+ export function replacementTermFromTermSubstitutionNode(termSubstitutionNode, context) {
2102
+ const replacementTermNode = termSubstitutionNode.getReplacementTermNode(),
2103
+ replacementTerm = termFromTermNode(replacementTermNode, context);
2104
+
2105
+ return replacementTerm;
2106
+ }
2107
+
2108
2108
  export function provisionalFromGeneratorDeclarationNode(generatorDeclarationNode, context) {
2109
2109
  const provisional = generatorDeclarationNode.isProvisional();
2110
2110