@stemy/ngx-dynamic-form 10.2.30 → 10.2.31

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.
@@ -94,4 +94,4 @@ export function createFormFile(id, data) {
94
94
  data.url = ObjectUtils.isString(data.url) ? data.url : "assets";
95
95
  return control;
96
96
  }
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25neC1keW5hbWljLWZvcm0vY29tbW9uLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE9BQU8sRUFLSCxXQUFXLEVBQ1gsWUFBWSxFQUNmLE1BQU0sa0JBQWtCLENBQUM7QUF3RjFCLDhCQUE4QjtBQUM5QixNQUFNLFVBQVUsaUJBQWlCLENBQUMsRUFBVSxFQUFFLE1BQWlCO0lBQzNELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzFDLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsVUFBb0Q7SUFDakYsT0FBTyxDQUFDLE1BQVcsRUFBRSxXQUFtQixFQUFRLEVBQUU7UUFDOUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsRUFBRSxVQUFVLElBQUksaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQy9HLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQThCO0lBQ3BELE9BQU8sQ0FBQyxNQUFXLEVBQUUsV0FBbUIsRUFBUSxFQUFFO1FBQzlDLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM3RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxJQUFJLFNBQVMsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FB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RSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRCxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzVCLE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLEVBQVUsRUFBRSxJQUFrQztJQUN6RSxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BELElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztJQUN2QyxJQUFJLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDaEUsT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRFbWl0dGVyLCBUZW1wbGF0ZVJlZn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheX0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7XHJcbiAgICBEeW5hbWljRmlsZVVwbG9hZE1vZGVsQ29uZmlnLFxyXG4gICAgRHluYW1pY0Zvcm1Db250cm9sLFxyXG4gICAgRHluYW1pY0Zvcm1Db250cm9sTW9kZWwsXHJcbiAgICBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNGb3JtR3JvdXBNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNGb3JtVmFsdWVDb250cm9sTW9kZWwsXHJcbiAgICBEeW5hbWljSW5wdXRNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNTZWxlY3RNb2RlbENvbmZpZ1xyXG59IGZyb20gXCJAbmctZHluYW1pYy1mb3Jtcy9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBJQXN5bmNNZXNzYWdlLFxyXG4gICAgSU9wZW5BcGlTY2hlbWEsXHJcbiAgICBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LFxyXG4gICAgSVJlc29sdmVGYWN0b3J5LFxyXG4gICAgT2JqZWN0VXRpbHMsXHJcbiAgICBSZWZsZWN0VXRpbHNcclxufSBmcm9tIFwiQHN0ZW15L25neC11dGlsc1wiO1xyXG5cclxuLy8gLS0tIEJhc2ljIGZvcm0gY29udHJvbCBpbnRlcmZhY2VzIC0tLVxyXG5cclxuZXhwb3J0IHR5cGUgRHluYW1pY0Zvcm1TdGF0ZSA9IFwiVkFMSURcIiB8IFwiSU5WQUxJRFwiIHwgXCJQRU5ESU5HXCIgfCBcIkRJU0FCTEVEXCIgfCBcIkxPQURJTkdcIjtcclxuZXhwb3J0IHR5cGUgRHluYW1pY0Zvcm1VcGRhdGVPbiA9IFwiY2hhbmdlXCIgfCBcImJsdXJcIiB8IFwic3VibWl0XCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElEeW5hbWljRm9ybUJhc2Uge1xyXG5cclxuICAgIHN0YXR1czogRHluYW1pY0Zvcm1TdGF0ZTtcclxuXHJcbiAgICBvblN0YXR1c0NoYW5nZTogRXZlbnRFbWl0dGVyPElEeW5hbWljRm9ybUJhc2U+O1xyXG4gICAgb25WYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPElEeW5hbWljRm9ybUJhc2U+O1xyXG4gICAgb25TdWJtaXQ6IEV2ZW50RW1pdHRlcjxJRHluYW1pY0Zvcm1CYXNlPjtcclxuXHJcbiAgICB2YWxpZGF0ZSgpOiBQcm9taXNlPGFueT47XHJcbiAgICBzZXJpYWxpemUodmFsaWRhdGU/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElEeW5hbWljRm9ybSBleHRlbmRzIElEeW5hbWljRm9ybUJhc2Uge1xyXG5cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBPbkNyZWF0ZWRGb3JtQ29udHJvbCBleHRlbmRzIER5bmFtaWNGb3JtQ29udHJvbCB7XHJcbiAgICBvbkNyZWF0ZWQoKTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgTW9kZWxUeXBlIGV4dGVuZHMgRnVuY3Rpb24ge1xyXG4gICAgbmV3IChjb25maWc6IER5bmFtaWNGb3JtQ29udHJvbE1vZGVsQ29uZmlnKTogRHluYW1pY0Zvcm1Db250cm9sTW9kZWw7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEZvcm1Db250cm9sU2VyaWFsaXplciA9IChtb2RlbDogRHluYW1pY0Zvcm1WYWx1ZUNvbnRyb2xNb2RlbDxhbnk+LCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IFByb21pc2U8YW55PjtcclxuZXhwb3J0IHR5cGUgRm9ybU1vZGVsQ3VzdG9taXplciA9IChcclxuICAgIHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hLFxyXG4gICAgbW9kZWw6IER5bmFtaWNGb3JtQ29udHJvbE1vZGVsLCBjb25maWc6IER5bmFtaWNGb3JtQ29udHJvbE1vZGVsQ29uZmlnXHJcbikgPT4gRHluYW1pY0Zvcm1Db250cm9sTW9kZWwgfCBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbFtdO1xyXG5leHBvcnQgdHlwZSBGb3JtTW9kZWxDdXN0b21pemVyV3JhcCA9IChcclxuICAgIHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hLFxyXG4gICAgbW9kZWxUeXBlOiBNb2RlbFR5cGUsIGNvbmZpZzogRHluYW1pY0Zvcm1Db250cm9sTW9kZWxDb25maWdcclxuKSA9PiBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbFtdO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRm9ybUNvbnRyb2wge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIHR5cGU6IHN0cmluZztcclxuICAgIGNvbmZpZz86IER5bmFtaWNGb3JtQ29udHJvbE1vZGVsQ29uZmlnO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGb3JtQ29udHJvbE9wdGlvbiB7XHJcbiAgICBpZDogYW55O1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuICAgIHNlbGVjdGFibGU/OiBib29sZWFuO1xyXG59XHJcblxyXG4vLyAtLS0gQmFzaWMgZm9ybSBpbnRlcmZhY2VzIC0tLVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRHluYW1pY0Zvcm1UZW1wbGF0ZXMge1xyXG4gICAgW2lkOiBzdHJpbmddOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElEeW5hbWljRm9ybUNvbmZpZyB7XHJcbiAgICBwYXRoPzogc3RyaW5nIHwgbnVtYmVyIHwgQXJyYXk8c3RyaW5nIHwgbnVtYmVyPjtcclxuICAgIG5hbWU/OiBzdHJpbmc7XHJcbiAgICBjbGFzc2VzPzogc3RyaW5nO1xyXG4gICAgZm9ybUNsYXNzZXM/OiBzdHJpbmc7XHJcbiAgICBpbm5lckZvcm1DbGFzc2VzPzogc3RyaW5nO1xyXG4gICAgaWQ6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRHluYW1pY1NpbmdsZUZvcm1Db25maWcgZXh0ZW5kcyBJRHluYW1pY0Zvcm1Db25maWcsIElEeW5hbWljRm9ybUluZm8ge1xyXG4gICAgZGF0YTogYW55O1xyXG4gICAgY29udHJvbERhdGE/OiBEeW5hbWljRm9ybUdyb3VwTW9kZWxDb25maWc7XHJcbiAgICBtdWx0aT86IGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElEeW5hbWljTXVsdGlGb3JtQ29uZmlnIGV4dGVuZHMgSUR5bmFtaWNGb3JtQ29uZmlnIHtcclxuICAgIGRhdGE6IElEeW5hbWljRm9ybXNDb25maWdzO1xyXG4gICAgbXVsdGk6IHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIElEeW5hbWljRm9ybXNDb25maWdzID0gQXJyYXk8SUR5bmFtaWNTaW5nbGVGb3JtQ29uZmlnIHwgSUR5bmFtaWNNdWx0aUZvcm1Db25maWc+O1xyXG5cclxuZXhwb3J0IGRlY2xhcmUgdHlwZSBBc3luY1N1Ym1pdE1ldGhvZCA9IChmb3JtOiBJRHluYW1pY0Zvcm1CYXNlLCBjb250ZXh0PzogYW55KSA9PiBQcm9taXNlPElBc3luY01lc3NhZ2U+O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRHluYW1pY0Zvcm1JbmZvIHtcclxuICAgIG5hbWU/OiBzdHJpbmc7XHJcbiAgICBjb250cm9scz86IElGb3JtQ29udHJvbFtdO1xyXG59XHJcblxyXG4vLyAtLS0gRGVjb3JhdG9yIGZ1bmN0aW9ucyAtLS1cclxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRTZXJpYWxpemVyKGlkOiBzdHJpbmcsIHBhcmVudDogRm9ybUFycmF5KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSBwYXJlbnQuZ2V0KGlkKTtcclxuICAgIHJldHVybiAhY29udHJvbCA/IG51bGw6IGNvbnRyb2wudmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBGb3JtU2VyaWFsaXphYmxlKHNlcmlhbGl6ZXI/OiBGb3JtQ29udHJvbFNlcmlhbGl6ZXIgfCBJUmVzb2x2ZUZhY3RvcnkpOiBQcm9wZXJ0eURlY29yYXRvciB7XHJcbiAgICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICAgICAgUmVmbGVjdFV0aWxzLmRlZmluZU1ldGFkYXRhKFwiZHluYW1pY0Zvcm1TZXJpYWxpemVyXCIsIHNlcmlhbGl6ZXIgfHwgZGVmYXVsdFNlcmlhbGl6ZXIsIHRhcmdldCwgcHJvcGVydHlLZXkpO1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEZvcm1JbnB1dChkYXRhPzogRHluYW1pY0lucHV0TW9kZWxDb25maWcpOiBQcm9wZXJ0eURlY29yYXRvciB7XHJcbiAgICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICAgICAgY29uc3QgbWV0YSA9IFJlZmxlY3RVdGlscy5nZXRPd25NZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIHRhcmdldCwgcHJvcGVydHlLZXkpO1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSBtZXRhID8gbWV0YS5uYW1lIDogXCJcIjtcclxuICAgICAgICBsZXQgaW5wdXRUeXBlID0gcHJvcGVydHlLZXkuaW5kZXhPZihcInBhc3N3b3JkXCIpIDwgMCA/IFwidGV4dFwiIDogXCJwYXNzd29yZFwiO1xyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiTnVtYmVyXCI6XHJcbiAgICAgICAgICAgICAgICBpbnB1dFR5cGUgPSBcIm51bWJlclwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJCb29sZWFuXCI6XHJcbiAgICAgICAgICAgICAgICBpbnB1dFR5cGUgPSBcImNoZWNrYm94XCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVmaW5lRm9ybUNvbnRyb2wodGFyZ2V0LCBwcm9wZXJ0eUtleSwgY3JlYXRlRm9ybUlucHV0KHByb3BlcnR5S2V5LCBkYXRhLCBpbnB1dFR5cGUpKTtcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBGb3JtU2VsZWN0KGRhdGE/OiBEeW5hbWljU2VsZWN0TW9kZWxDb25maWc8YW55Pik6IFByb3BlcnR5RGVjb3JhdG9yIHtcclxuICAgIHJldHVybiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpOiB2b2lkID0+IHtcclxuICAgICAgICBkZWZpbmVGb3JtQ29udHJvbCh0YXJnZXQsIHByb3BlcnR5S2V5LCBjcmVhdGVGb3JtU2VsZWN0KHByb3BlcnR5S2V5LCBkYXRhKSk7XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRm9ybVN0YXRpYyhkYXRhPzogRHluYW1pY0Zvcm1Db250cm9sTW9kZWxDb25maWcpOiBQcm9wZXJ0eURlY29yYXRvciB7XHJcbiAgICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICAgICAgZGVmaW5lRm9ybUNvbnRyb2wodGFyZ2V0LCBwcm9wZXJ0eUtleSwgY3JlYXRlRm9ybVN0YXRpYyhwcm9wZXJ0eUtleSwgZGF0YSkpO1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEZvcm1Nb2RlbChkYXRhPzogRHluYW1pY0Zvcm1Hcm91cE1vZGVsQ29uZmlnKTogUHJvcGVydHlEZWNvcmF0b3Ige1xyXG4gICAgcmV0dXJuICh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZyk6IHZvaWQgPT4ge1xyXG4gICAgICAgIGRlZmluZUZvcm1Db250cm9sKHRhcmdldCwgcHJvcGVydHlLZXksIGNyZWF0ZUZvcm1Nb2RlbChwcm9wZXJ0eUtleSwgZGF0YSkpO1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEZvcm1GaWxlKGRhdGE/OiBEeW5hbWljRmlsZVVwbG9hZE1vZGVsQ29uZmlnKTogUHJvcGVydHlEZWNvcmF0b3Ige1xyXG4gICAgcmV0dXJuICh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZyk6IHZvaWQgPT4ge1xyXG4gICAgICAgIGRlZmluZUZvcm1Db250cm9sKHRhcmdldCwgcHJvcGVydHlLZXksIGNyZWF0ZUZvcm1GaWxlKHByb3BlcnR5S2V5LCBkYXRhKSk7XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lRm9ybUNvbnRyb2wodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIGNvbnRyb2w6IElGb3JtQ29udHJvbCk6IHZvaWQge1xyXG4gICAgUmVmbGVjdFV0aWxzLmRlZmluZU1ldGFkYXRhKFwiZHluYW1pY0Zvcm1Db250cm9sXCIsIGNvbnRyb2wsIHRhcmdldCwgcHJvcGVydHlLZXkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUNvbnRyb2wodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpOiBJRm9ybUNvbnRyb2wge1xyXG4gICAgcmV0dXJuIFJlZmxlY3RVdGlscy5nZXRNZXRhZGF0YShcImR5bmFtaWNGb3JtQ29udHJvbFwiLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1TZXJpYWxpemVyKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKTogRm9ybUNvbnRyb2xTZXJpYWxpemVyIHwgSVJlc29sdmVGYWN0b3J5IHtcclxuICAgIHJldHVybiBSZWZsZWN0VXRpbHMuZ2V0TWV0YWRhdGEoXCJkeW5hbWljRm9ybVNlcmlhbGl6ZXJcIiwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtQ29udHJvbChpZDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIGNvbmZpZz86IER5bmFtaWNGb3JtQ29udHJvbE1vZGVsQ29uZmlnKTogSUZvcm1Db250cm9sIHtcclxuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7aWR9O1xyXG4gICAgY29uZmlnLmlkID0gaWQ7XHJcbiAgICBjb25maWcubGFiZWwgPSBPYmplY3RVdGlscy5pc051bGxPclVuZGVmaW5lZChjb25maWcubGFiZWwpID8gaWQgOiBjb25maWcubGFiZWw7XHJcbiAgICBjb25maWcuZGlzYWJsZWQgPSBjb25maWcuZGlzYWJsZWQgfHwgZmFsc2U7XHJcbiAgICBjb25maWcuaGlkZGVuID0gY29uZmlnLmhpZGRlbiB8fCBmYWxzZTtcclxuICAgIHJldHVybiB7aWQsIHR5cGUsIGNvbmZpZ307XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtSW5wdXQoaWQ6IHN0cmluZywgY29uZmlnOiBEeW5hbWljSW5wdXRNb2RlbENvbmZpZywgdHlwZTogc3RyaW5nID0gXCJ0ZXh0XCIpOiBJRm9ybUNvbnRyb2wge1xyXG4gICAgY29uc3QgY29udHJvbCA9IGNyZWF0ZUZvcm1Db250cm9sKGlkLCBcImlucHV0XCIsIGNvbmZpZyk7XHJcbiAgICBjb25maWcgPSBjb250cm9sLmNvbmZpZztcclxuICAgIGNvbmZpZy5pbnB1dFR5cGUgPSBjb25maWcuaW5wdXRUeXBlIHx8IHR5cGU7XHJcbiAgICBjb25maWcucGxhY2Vob2xkZXIgPSBjb25maWcucGxhY2Vob2xkZXIgfHwgKGNvbmZpZy5pbnB1dFR5cGUgPT0gXCJtYXNrXCIgPyBcIl9cIiA6IFwiXCIpO1xyXG4gICAgY29uZmlnLnN0ZXAgPSBjb25maWcuc3RlcCB8fCAxO1xyXG4gICAgY29uZmlnLm1hc2sgPSBjb25maWcubWFzayB8fCBbL1xcdyovZ2ldO1xyXG4gICAgcmV0dXJuIGNvbnRyb2w7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtU2VsZWN0KGlkOiBzdHJpbmcsIGRhdGE6IER5bmFtaWNTZWxlY3RNb2RlbENvbmZpZzxhbnk+KTogSUZvcm1Db250cm9sIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSBjcmVhdGVGb3JtQ29udHJvbChpZCwgXCJzZWxlY3RcIiwgZGF0YSk7XHJcbiAgICBkYXRhID0gY29udHJvbC5jb25maWc7XHJcbiAgICBkYXRhLm9wdGlvbnMgPSBkYXRhLm9wdGlvbnMgfHwgW107XHJcbiAgICByZXR1cm4gY29udHJvbDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZvcm1TdGF0aWMoaWQ6IHN0cmluZywgY29uZmlnOiBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbENvbmZpZyk6IElGb3JtQ29udHJvbCB7XHJcbiAgICByZXR1cm4gY3JlYXRlRm9ybUNvbnRyb2woaWQsIFwic3RhdGljXCIsIGNvbmZpZyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtTW9kZWwoaWQ6IHN0cmluZywgZGF0YTogRHluYW1pY0Zvcm1Hcm91cE1vZGVsQ29uZmlnKTogSUZvcm1Db250cm9sIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSBjcmVhdGVGb3JtQ29udHJvbChpZCwgXCJncm91cFwiLCBkYXRhKTtcclxuICAgIGRhdGEgPSBjb250cm9sLmNvbmZpZztcclxuICAgIGRhdGEubmFtZSA9IGRhdGEubmFtZSB8fCBcIlwiO1xyXG4gICAgcmV0dXJuIGNvbnRyb2w7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtRmlsZShpZDogc3RyaW5nLCBkYXRhOiBEeW5hbWljRmlsZVVwbG9hZE1vZGVsQ29uZmlnKTogSUZvcm1Db250cm9sIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSBjcmVhdGVGb3JtQ29udHJvbChpZCwgXCJmaWxlXCIsIGRhdGEpO1xyXG4gICAgZGF0YSA9IGNvbnRyb2wuY29uZmlnO1xyXG4gICAgZGF0YS5hY2NlcHQgPSBkYXRhLmFjY2VwdCB8fCBbXCJqcGdcIiwgXCJqcGVnXCIsIFwicG5nXCJdO1xyXG4gICAgZGF0YS5tdWx0aXBsZSA9IGRhdGEubXVsdGlwbGUgfHwgZmFsc2U7XHJcbiAgICBkYXRhLnVybCA9IE9iamVjdFV0aWxzLmlzU3RyaW5nKGRhdGEudXJsKSA/IGRhdGEudXJsIDogXCJhc3NldHNcIjtcclxuICAgIHJldHVybiBjb250cm9sO1xyXG59XHJcbiJdfQ==
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25neC1keW5hbWljLWZvcm0vY29tbW9uLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE9BQU8sRUFLSCxXQUFXLEVBQ1gsWUFBWSxFQUNmLE1BQU0sa0JBQWtCLENBQUM7QUF3RjFCLDhCQUE4QjtBQUM5QixNQUFNLFVBQVUsaUJBQWlCLENBQUMsRUFBVSxFQUFFLE1BQWlCO0lBQzNELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzFDLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsVUFBb0Q7SUFDakYsT0FBTyxDQUFDLE1BQVcsRUFBRSxXQUFtQixFQUFRLEVBQUU7UUFDOUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsRUFBRSxVQUFVLElBQUksaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQy9HLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQThCO0lBQ3BELE9BQU8sQ0FBQyxNQUFXLEVBQUUsV0FBbUIsRUFBUSxFQUFFO1FBQzlDLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM3RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxJQUFJLFNBQVMsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FB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RSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRCxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzVCLE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLEVBQVUsRUFBRSxJQUFrQztJQUN6RSxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BELElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztJQUN2QyxJQUFJLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDaEUsT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3RvciwgVGVtcGxhdGVSZWZ9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXl9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgRHluYW1pY0ZpbGVVcGxvYWRNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNGb3JtQ29udHJvbCxcclxuICAgIER5bmFtaWNGb3JtQ29udHJvbE1vZGVsLFxyXG4gICAgRHluYW1pY0Zvcm1Db250cm9sTW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljRm9ybUdyb3VwTW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljRm9ybVZhbHVlQ29udHJvbE1vZGVsLFxyXG4gICAgRHluYW1pY0lucHV0TW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljU2VsZWN0TW9kZWxDb25maWdcclxufSBmcm9tIFwiQG5nLWR5bmFtaWMtZm9ybXMvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgSUFzeW5jTWVzc2FnZSxcclxuICAgIElPcGVuQXBpU2NoZW1hLFxyXG4gICAgSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSxcclxuICAgIElSZXNvbHZlRmFjdG9yeSxcclxuICAgIE9iamVjdFV0aWxzLFxyXG4gICAgUmVmbGVjdFV0aWxzXHJcbn0gZnJvbSBcIkBzdGVteS9uZ3gtdXRpbHNcIjtcclxuXHJcbi8vIC0tLSBCYXNpYyBmb3JtIGNvbnRyb2wgaW50ZXJmYWNlcyAtLS1cclxuXHJcbmV4cG9ydCB0eXBlIER5bmFtaWNGb3JtU3RhdGUgPSBcIlZBTElEXCIgfCBcIklOVkFMSURcIiB8IFwiUEVORElOR1wiIHwgXCJESVNBQkxFRFwiIHwgXCJMT0FESU5HXCI7XHJcbmV4cG9ydCB0eXBlIER5bmFtaWNGb3JtVXBkYXRlT24gPSBcImNoYW5nZVwiIHwgXCJibHVyXCIgfCBcInN1Ym1pdFwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRHluYW1pY0Zvcm1CYXNlIHtcclxuXHJcbiAgICBzdGF0dXM6IER5bmFtaWNGb3JtU3RhdGU7XHJcblxyXG4gICAgb25TdGF0dXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJRHluYW1pY0Zvcm1CYXNlPjtcclxuICAgIG9uVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJRHluYW1pY0Zvcm1CYXNlPjtcclxuICAgIG9uU3VibWl0OiBFdmVudEVtaXR0ZXI8SUR5bmFtaWNGb3JtQmFzZT47XHJcblxyXG4gICAgdmFsaWRhdGUoKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgc2VyaWFsaXplKHZhbGlkYXRlPzogYm9vbGVhbik6IFByb21pc2U8YW55PjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRHluYW1pY0Zvcm0gZXh0ZW5kcyBJRHluYW1pY0Zvcm1CYXNlIHtcclxuXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgT25DcmVhdGVkRm9ybUNvbnRyb2wgZXh0ZW5kcyBEeW5hbWljRm9ybUNvbnRyb2wge1xyXG4gICAgb25DcmVhdGVkKCk6IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIE1vZGVsVHlwZSBleHRlbmRzIEZ1bmN0aW9uIHtcclxuICAgIG5ldyAoY29uZmlnOiBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbENvbmZpZyk6IER5bmFtaWNGb3JtQ29udHJvbE1vZGVsO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBGb3JtQ29udHJvbFNlcmlhbGl6ZXIgPSAobW9kZWw6IER5bmFtaWNGb3JtVmFsdWVDb250cm9sTW9kZWw8YW55PiwgY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBQcm9taXNlPGFueT47XHJcbmV4cG9ydCB0eXBlIEZvcm1Nb2RlbEN1c3RvbWl6ZXIgPSAoXHJcbiAgICBwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSwgc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSxcclxuICAgIG1vZGVsOiBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbCwgY29uZmlnOiBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbENvbmZpZywgaW5qZWN0b3I6IEluamVjdG9yXHJcbikgPT4gRHluYW1pY0Zvcm1Db250cm9sTW9kZWwgfCBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbFtdO1xyXG5leHBvcnQgdHlwZSBGb3JtTW9kZWxDdXN0b21pemVyV3JhcCA9IChcclxuICAgIHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hLFxyXG4gICAgbW9kZWxUeXBlOiBNb2RlbFR5cGUsIGNvbmZpZzogRHluYW1pY0Zvcm1Db250cm9sTW9kZWxDb25maWdcclxuKSA9PiBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbFtdO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRm9ybUNvbnRyb2wge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIHR5cGU6IHN0cmluZztcclxuICAgIGNvbmZpZz86IER5bmFtaWNGb3JtQ29udHJvbE1vZGVsQ29uZmlnO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGb3JtQ29udHJvbE9wdGlvbiB7XHJcbiAgICBpZDogYW55O1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuICAgIHNlbGVjdGFibGU/OiBib29sZWFuO1xyXG59XHJcblxyXG4vLyAtLS0gQmFzaWMgZm9ybSBpbnRlcmZhY2VzIC0tLVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRHluYW1pY0Zvcm1UZW1wbGF0ZXMge1xyXG4gICAgW2lkOiBzdHJpbmddOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElEeW5hbWljRm9ybUNvbmZpZyB7XHJcbiAgICBwYXRoPzogc3RyaW5nIHwgbnVtYmVyIHwgQXJyYXk8c3RyaW5nIHwgbnVtYmVyPjtcclxuICAgIG5hbWU/OiBzdHJpbmc7XHJcbiAgICBjbGFzc2VzPzogc3RyaW5nO1xyXG4gICAgZm9ybUNsYXNzZXM/OiBzdHJpbmc7XHJcbiAgICBpbm5lckZvcm1DbGFzc2VzPzogc3RyaW5nO1xyXG4gICAgaWQ6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRHluYW1pY1NpbmdsZUZvcm1Db25maWcgZXh0ZW5kcyBJRHluYW1pY0Zvcm1Db25maWcsIElEeW5hbWljRm9ybUluZm8ge1xyXG4gICAgZGF0YTogYW55O1xyXG4gICAgY29udHJvbERhdGE/OiBEeW5hbWljRm9ybUdyb3VwTW9kZWxDb25maWc7XHJcbiAgICBtdWx0aT86IGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElEeW5hbWljTXVsdGlGb3JtQ29uZmlnIGV4dGVuZHMgSUR5bmFtaWNGb3JtQ29uZmlnIHtcclxuICAgIGRhdGE6IElEeW5hbWljRm9ybXNDb25maWdzO1xyXG4gICAgbXVsdGk6IHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIElEeW5hbWljRm9ybXNDb25maWdzID0gQXJyYXk8SUR5bmFtaWNTaW5nbGVGb3JtQ29uZmlnIHwgSUR5bmFtaWNNdWx0aUZvcm1Db25maWc+O1xyXG5cclxuZXhwb3J0IGRlY2xhcmUgdHlwZSBBc3luY1N1Ym1pdE1ldGhvZCA9IChmb3JtOiBJRHluYW1pY0Zvcm1CYXNlLCBjb250ZXh0PzogYW55KSA9PiBQcm9taXNlPElBc3luY01lc3NhZ2U+O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRHluYW1pY0Zvcm1JbmZvIHtcclxuICAgIG5hbWU/OiBzdHJpbmc7XHJcbiAgICBjb250cm9scz86IElGb3JtQ29udHJvbFtdO1xyXG59XHJcblxyXG4vLyAtLS0gRGVjb3JhdG9yIGZ1bmN0aW9ucyAtLS1cclxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRTZXJpYWxpemVyKGlkOiBzdHJpbmcsIHBhcmVudDogRm9ybUFycmF5KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSBwYXJlbnQuZ2V0KGlkKTtcclxuICAgIHJldHVybiAhY29udHJvbCA/IG51bGw6IGNvbnRyb2wudmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBGb3JtU2VyaWFsaXphYmxlKHNlcmlhbGl6ZXI/OiBGb3JtQ29udHJvbFNlcmlhbGl6ZXIgfCBJUmVzb2x2ZUZhY3RvcnkpOiBQcm9wZXJ0eURlY29yYXRvciB7XHJcbiAgICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICAgICAgUmVmbGVjdFV0aWxzLmRlZmluZU1ldGFkYXRhKFwiZHluYW1pY0Zvcm1TZXJpYWxpemVyXCIsIHNlcmlhbGl6ZXIgfHwgZGVmYXVsdFNlcmlhbGl6ZXIsIHRhcmdldCwgcHJvcGVydHlLZXkpO1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEZvcm1JbnB1dChkYXRhPzogRHluYW1pY0lucHV0TW9kZWxDb25maWcpOiBQcm9wZXJ0eURlY29yYXRvciB7XHJcbiAgICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICAgICAgY29uc3QgbWV0YSA9IFJlZmxlY3RVdGlscy5nZXRPd25NZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIHRhcmdldCwgcHJvcGVydHlLZXkpO1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSBtZXRhID8gbWV0YS5uYW1lIDogXCJcIjtcclxuICAgICAgICBsZXQgaW5wdXRUeXBlID0gcHJvcGVydHlLZXkuaW5kZXhPZihcInBhc3N3b3JkXCIpIDwgMCA/IFwidGV4dFwiIDogXCJwYXNzd29yZFwiO1xyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiTnVtYmVyXCI6XHJcbiAgICAgICAgICAgICAgICBpbnB1dFR5cGUgPSBcIm51bWJlclwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJCb29sZWFuXCI6XHJcbiAgICAgICAgICAgICAgICBpbnB1dFR5cGUgPSBcImNoZWNrYm94XCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVmaW5lRm9ybUNvbnRyb2wodGFyZ2V0LCBwcm9wZXJ0eUtleSwgY3JlYXRlRm9ybUlucHV0KHByb3BlcnR5S2V5LCBkYXRhLCBpbnB1dFR5cGUpKTtcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBGb3JtU2VsZWN0KGRhdGE/OiBEeW5hbWljU2VsZWN0TW9kZWxDb25maWc8YW55Pik6IFByb3BlcnR5RGVjb3JhdG9yIHtcclxuICAgIHJldHVybiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpOiB2b2lkID0+IHtcclxuICAgICAgICBkZWZpbmVGb3JtQ29udHJvbCh0YXJnZXQsIHByb3BlcnR5S2V5LCBjcmVhdGVGb3JtU2VsZWN0KHByb3BlcnR5S2V5LCBkYXRhKSk7XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRm9ybVN0YXRpYyhkYXRhPzogRHluYW1pY0Zvcm1Db250cm9sTW9kZWxDb25maWcpOiBQcm9wZXJ0eURlY29yYXRvciB7XHJcbiAgICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICAgICAgZGVmaW5lRm9ybUNvbnRyb2wodGFyZ2V0LCBwcm9wZXJ0eUtleSwgY3JlYXRlRm9ybVN0YXRpYyhwcm9wZXJ0eUtleSwgZGF0YSkpO1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEZvcm1Nb2RlbChkYXRhPzogRHluYW1pY0Zvcm1Hcm91cE1vZGVsQ29uZmlnKTogUHJvcGVydHlEZWNvcmF0b3Ige1xyXG4gICAgcmV0dXJuICh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZyk6IHZvaWQgPT4ge1xyXG4gICAgICAgIGRlZmluZUZvcm1Db250cm9sKHRhcmdldCwgcHJvcGVydHlLZXksIGNyZWF0ZUZvcm1Nb2RlbChwcm9wZXJ0eUtleSwgZGF0YSkpO1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEZvcm1GaWxlKGRhdGE/OiBEeW5hbWljRmlsZVVwbG9hZE1vZGVsQ29uZmlnKTogUHJvcGVydHlEZWNvcmF0b3Ige1xyXG4gICAgcmV0dXJuICh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZyk6IHZvaWQgPT4ge1xyXG4gICAgICAgIGRlZmluZUZvcm1Db250cm9sKHRhcmdldCwgcHJvcGVydHlLZXksIGNyZWF0ZUZvcm1GaWxlKHByb3BlcnR5S2V5LCBkYXRhKSk7XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lRm9ybUNvbnRyb2wodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIGNvbnRyb2w6IElGb3JtQ29udHJvbCk6IHZvaWQge1xyXG4gICAgUmVmbGVjdFV0aWxzLmRlZmluZU1ldGFkYXRhKFwiZHluYW1pY0Zvcm1Db250cm9sXCIsIGNvbnRyb2wsIHRhcmdldCwgcHJvcGVydHlLZXkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUNvbnRyb2wodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpOiBJRm9ybUNvbnRyb2wge1xyXG4gICAgcmV0dXJuIFJlZmxlY3RVdGlscy5nZXRNZXRhZGF0YShcImR5bmFtaWNGb3JtQ29udHJvbFwiLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1TZXJpYWxpemVyKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKTogRm9ybUNvbnRyb2xTZXJpYWxpemVyIHwgSVJlc29sdmVGYWN0b3J5IHtcclxuICAgIHJldHVybiBSZWZsZWN0VXRpbHMuZ2V0TWV0YWRhdGEoXCJkeW5hbWljRm9ybVNlcmlhbGl6ZXJcIiwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtQ29udHJvbChpZDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIGNvbmZpZz86IER5bmFtaWNGb3JtQ29udHJvbE1vZGVsQ29uZmlnKTogSUZvcm1Db250cm9sIHtcclxuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7aWR9O1xyXG4gICAgY29uZmlnLmlkID0gaWQ7XHJcbiAgICBjb25maWcubGFiZWwgPSBPYmplY3RVdGlscy5pc051bGxPclVuZGVmaW5lZChjb25maWcubGFiZWwpID8gaWQgOiBjb25maWcubGFiZWw7XHJcbiAgICBjb25maWcuZGlzYWJsZWQgPSBjb25maWcuZGlzYWJsZWQgfHwgZmFsc2U7XHJcbiAgICBjb25maWcuaGlkZGVuID0gY29uZmlnLmhpZGRlbiB8fCBmYWxzZTtcclxuICAgIHJldHVybiB7aWQsIHR5cGUsIGNvbmZpZ307XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtSW5wdXQoaWQ6IHN0cmluZywgY29uZmlnOiBEeW5hbWljSW5wdXRNb2RlbENvbmZpZywgdHlwZTogc3RyaW5nID0gXCJ0ZXh0XCIpOiBJRm9ybUNvbnRyb2wge1xyXG4gICAgY29uc3QgY29udHJvbCA9IGNyZWF0ZUZvcm1Db250cm9sKGlkLCBcImlucHV0XCIsIGNvbmZpZyk7XHJcbiAgICBjb25maWcgPSBjb250cm9sLmNvbmZpZztcclxuICAgIGNvbmZpZy5pbnB1dFR5cGUgPSBjb25maWcuaW5wdXRUeXBlIHx8IHR5cGU7XHJcbiAgICBjb25maWcucGxhY2Vob2xkZXIgPSBjb25maWcucGxhY2Vob2xkZXIgfHwgKGNvbmZpZy5pbnB1dFR5cGUgPT0gXCJtYXNrXCIgPyBcIl9cIiA6IFwiXCIpO1xyXG4gICAgY29uZmlnLnN0ZXAgPSBjb25maWcuc3RlcCB8fCAxO1xyXG4gICAgY29uZmlnLm1hc2sgPSBjb25maWcubWFzayB8fCBbL1xcdyovZ2ldO1xyXG4gICAgcmV0dXJuIGNvbnRyb2w7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtU2VsZWN0KGlkOiBzdHJpbmcsIGRhdGE6IER5bmFtaWNTZWxlY3RNb2RlbENvbmZpZzxhbnk+KTogSUZvcm1Db250cm9sIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSBjcmVhdGVGb3JtQ29udHJvbChpZCwgXCJzZWxlY3RcIiwgZGF0YSk7XHJcbiAgICBkYXRhID0gY29udHJvbC5jb25maWc7XHJcbiAgICBkYXRhLm9wdGlvbnMgPSBkYXRhLm9wdGlvbnMgfHwgW107XHJcbiAgICByZXR1cm4gY29udHJvbDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZvcm1TdGF0aWMoaWQ6IHN0cmluZywgY29uZmlnOiBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbENvbmZpZyk6IElGb3JtQ29udHJvbCB7XHJcbiAgICByZXR1cm4gY3JlYXRlRm9ybUNvbnRyb2woaWQsIFwic3RhdGljXCIsIGNvbmZpZyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtTW9kZWwoaWQ6IHN0cmluZywgZGF0YTogRHluYW1pY0Zvcm1Hcm91cE1vZGVsQ29uZmlnKTogSUZvcm1Db250cm9sIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSBjcmVhdGVGb3JtQ29udHJvbChpZCwgXCJncm91cFwiLCBkYXRhKTtcclxuICAgIGRhdGEgPSBjb250cm9sLmNvbmZpZztcclxuICAgIGRhdGEubmFtZSA9IGRhdGEubmFtZSB8fCBcIlwiO1xyXG4gICAgcmV0dXJuIGNvbnRyb2w7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtRmlsZShpZDogc3RyaW5nLCBkYXRhOiBEeW5hbWljRmlsZVVwbG9hZE1vZGVsQ29uZmlnKTogSUZvcm1Db250cm9sIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSBjcmVhdGVGb3JtQ29udHJvbChpZCwgXCJmaWxlXCIsIGRhdGEpO1xyXG4gICAgZGF0YSA9IGNvbnRyb2wuY29uZmlnO1xyXG4gICAgZGF0YS5hY2NlcHQgPSBkYXRhLmFjY2VwdCB8fCBbXCJqcGdcIiwgXCJqcGVnXCIsIFwicG5nXCJdO1xyXG4gICAgZGF0YS5tdWx0aXBsZSA9IGRhdGEubXVsdGlwbGUgfHwgZmFsc2U7XHJcbiAgICBkYXRhLnVybCA9IE9iamVjdFV0aWxzLmlzU3RyaW5nKGRhdGEudXJsKSA/IGRhdGEudXJsIDogXCJhc3NldHNcIjtcclxuICAgIHJldHVybiBjb250cm9sO1xyXG59XHJcbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { __awaiter } from "tslib";
2
- import { EventEmitter, Injectable } from "@angular/core";
2
+ import { EventEmitter, Inject, Injectable, Injector } from "@angular/core";
3
3
  import { FormArray, FormGroup } from "@angular/forms";
4
4
  import { Subject } from "rxjs";
5
5
  import { DynamicCheckboxModel, DynamicFileUploadModel, DynamicFormArrayModel as DynamicFormArrayModelBase, DynamicFormComponentService, DynamicFormGroupModel, DynamicFormService as Base, DynamicFormValidationService, DynamicInputModel, DynamicSelectModel, DynamicTextAreaModel } from "@ng-dynamic-forms/core";
@@ -9,9 +9,10 @@ import { FormSelectSubject } from "../utils/form-select-subject";
9
9
  import { FormSubject } from "../utils/form-subject";
10
10
  import { DynamicFormArrayModel } from "../utils/dynamic-form-array.model";
11
11
  export class DynamicFormService extends Base {
12
- constructor(cs, vs, openApi) {
12
+ constructor(cs, vs, openApi, injector) {
13
13
  super(cs, vs);
14
14
  this.openApi = openApi;
15
+ this.injector = injector;
15
16
  this.onDetectChanges = new EventEmitter();
16
17
  }
17
18
  get api() {
@@ -178,7 +179,7 @@ export class DynamicFormService extends Base {
178
179
  const model = new modelType(config);
179
180
  if (!ObjectUtils.isFunction(customizeModel))
180
181
  return [model];
181
- const res = customizeModel(property, schema, model, config);
182
+ const res = customizeModel(property, schema, model, config, this.injector);
182
183
  return Array.isArray(res) ? res : [res];
183
184
  };
184
185
  return this.getFormModelForSchemaDef(this.schemas[name], customizeModels);
@@ -420,6 +421,7 @@ DynamicFormService.decorators = [
420
421
  DynamicFormService.ctorParameters = () => [
421
422
  { type: DynamicFormComponentService },
422
423
  { type: DynamicFormValidationService },
423
- { type: OpenApiService }
424
+ { type: OpenApiService, decorators: [{ type: Inject, args: [OpenApiService,] }] },
425
+ { type: Injector, decorators: [{ type: Inject, args: [Injector,] }] }
424
426
  ];
425
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LWR5bmFtaWMtZm9ybS9zZXJ2aWNlcy9keW5hbWljLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFrQixTQUFTLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQ0gsb0JBQW9CLEVBRXBCLHNCQUFzQixFQUV0QixxQkFBcUIsSUFBSSx5QkFBeUIsRUFFbEQsMkJBQTJCLEVBRzNCLHFCQUFxQixFQUlyQixrQkFBa0IsSUFBSSxJQUFJLEVBQzFCLDRCQUE0QixFQUc1QixpQkFBaUIsRUFFakIsa0JBQWtCLEVBRWxCLG9CQUFvQixFQUd2QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFNSCxXQUFXLEVBQ1gsY0FBYyxFQUNkLFdBQVcsRUFDZCxNQUFNLGtCQUFrQixDQUFDO0FBSTFCLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxxQkFBcUIsRUFBOEIsTUFBTSxtQ0FBbUMsQ0FBQztBQUdyRyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsSUFBSTtJQWF4QyxZQUFZLEVBQStCLEVBQUUsRUFBZ0MsRUFBVyxPQUF1QjtRQUMzRyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRHNFLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBRTNHLElBQUksQ0FBQyxlQUFlLEdBQUcs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QUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3pCLFVBQVUsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztTQUMvQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3ZCLFVBQVUsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUM1QztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3ZCLFVBQVUsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUM1QztJQUNMLENBQUM7OztZQW5iSixVQUFVOzs7WUFyQ1AsMkJBQTJCO1lBUTNCLDRCQUE0QjtZQWtCNUIsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtR3JvdXB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge1N1YmplY3R9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7XHJcbiAgICBEeW5hbWljQ2hlY2tib3hNb2RlbCxcclxuICAgIER5bmFtaWNDaGVja2JveE1vZGVsQ29uZmlnLFxyXG4gICAgRHluYW1pY0ZpbGVVcGxvYWRNb2RlbCxcclxuICAgIER5bmFtaWNGaWxlVXBsb2FkTW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljRm9ybUFycmF5TW9kZWwgYXMgRHluYW1pY0Zvcm1BcnJheU1vZGVsQmFzZSxcclxuICAgIER5bmFtaWNGb3JtQ29tcG9uZW50LFxyXG4gICAgRHluYW1pY0Zvcm1Db21wb25lbnRTZXJ2aWNlLFxyXG4gICAgRHluYW1pY0Zvcm1Db250cm9sTW9kZWwsXHJcbiAgICBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNGb3JtR3JvdXBNb2RlbCxcclxuICAgIER5bmFtaWNGb3JtR3JvdXBNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNGb3JtTW9kZWwsXHJcbiAgICBEeW5hbWljRm9ybU9wdGlvbkNvbmZpZyxcclxuICAgIER5bmFtaWNGb3JtU2VydmljZSBhcyBCYXNlLFxyXG4gICAgRHluYW1pY0Zvcm1WYWxpZGF0aW9uU2VydmljZSxcclxuICAgIER5bmFtaWNGb3JtVmFsdWVDb250cm9sTW9kZWwsXHJcbiAgICBEeW5hbWljRm9ybVZhbHVlQ29udHJvbE1vZGVsQ29uZmlnLFxyXG4gICAgRHluYW1pY0lucHV0TW9kZWwsXHJcbiAgICBEeW5hbWljSW5wdXRNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNTZWxlY3RNb2RlbCxcclxuICAgIER5bmFtaWNTZWxlY3RNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNUZXh0QXJlYU1vZGVsLFxyXG4gICAgRHluYW1pY1RleHRBcmVhTW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljVmFsaWRhdG9yc0NvbmZpZ1xyXG59IGZyb20gXCJAbmctZHluYW1pYy1mb3Jtcy9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBJQXBpU2VydmljZSxcclxuICAgIElMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBJT3BlbkFwaVNjaGVtYSxcclxuICAgIElPcGVuQXBpU2NoZW1hUHJvcGVydHksXHJcbiAgICBJT3BlbkFwaVNjaGVtYXMsXHJcbiAgICBPYmplY3RVdGlscyxcclxuICAgIE9wZW5BcGlTZXJ2aWNlLFxyXG4gICAgU3RyaW5nVXRpbHNcclxufSBmcm9tIFwiQHN0ZW15L25neC11dGlsc1wiO1xyXG5cclxuaW1wb3J0IHtGb3JtQ29udHJvbFNlcmlhbGl6ZXIsIEZvcm1Nb2RlbEN1c3RvbWl6ZXIsIEZvcm1Nb2RlbEN1c3RvbWl6ZXJXcmFwLCBNb2RlbFR5cGV9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbmltcG9ydCB7aXNTdHJpbmdXaXRoVmFsfSBmcm9tIFwiLi4vdXRpbHMvbWlzY1wiO1xyXG5pbXBvcnQge0Zvcm1TZWxlY3RTdWJqZWN0fSBmcm9tIFwiLi4vdXRpbHMvZm9ybS1zZWxlY3Qtc3ViamVjdFwiO1xyXG5pbXBvcnQge0Zvcm1TdWJqZWN0fSBmcm9tIFwiLi4vdXRpbHMvZm9ybS1zdWJqZWN0XCI7XHJcbmltcG9ydCB7RHluYW1pY0Zvcm1BcnJheU1vZGVsLCBEeW5hbWljRm9ybUFycmF5TW9kZWxDb25maWd9IGZyb20gXCIuLi91dGlscy9keW5hbWljLWZvcm0tYXJyYXkubW9kZWxcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNGb3JtU2VydmljZSBleHRlbmRzIEJhc2Uge1xyXG5cclxuICAgIGdldCBhcGkoKTogSUFwaVNlcnZpY2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5BcGkuYXBpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsYW5ndWFnZSgpOiBJTGFuZ3VhZ2VTZXJ2aWNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hcGkubGFuZ3VhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmVhZG9ubHkgb25EZXRlY3RDaGFuZ2VzOiBFdmVudEVtaXR0ZXI8RHluYW1pY0Zvcm1Db21wb25lbnQ+O1xyXG4gICAgcHJvdGVjdGVkIHNjaGVtYXM6IElPcGVuQXBpU2NoZW1hcztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihjczogRHluYW1pY0Zvcm1Db21wb25lbnRTZXJ2aWNlLCB2czogRHluYW1pY0Zvcm1WYWxpZGF0aW9uU2VydmljZSwgcmVhZG9ubHkgb3BlbkFwaTogT3BlbkFwaVNlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcihjcywgdnMpO1xyXG4gICAgICAgIHRoaXMub25EZXRlY3RDaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcjxEeW5hbWljRm9ybUNvbXBvbmVudD4oKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaEdyb3VwKHZhbHVlOiBhbnksIGZvcm1Nb2RlbDogRHluYW1pY0Zvcm1Nb2RlbCwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhdGNoVmFsdWVSZWN1cnNpdmUodmFsdWUsIGZvcm1Nb2RlbCwgZm9ybUdyb3VwKTtcclxuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBmb3JtR3JvdXAucGF0Y2hWYWx1ZShPYmplY3RVdGlscy5jb3B5KHZhbHVlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hGb3JtKHZhbHVlOiBhbnksIGNvbXBvbmVudDogRHluYW1pY0Zvcm1Db21wb25lbnQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhdGNoVmFsdWVSZWN1cnNpdmUodmFsdWUsIGNvbXBvbmVudC5tb2RlbCwgY29tcG9uZW50Lmdyb3VwKTtcclxuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoY29tcG9uZW50KTtcclxuICAgICAgICBjb21wb25lbnQuZ3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VyaWFsaXplKGZvcm1Nb2RlbDogRHluYW1pY0Zvcm1Nb2RlbCwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZVJlY3Vyc2l2ZShmb3JtTW9kZWwsIGZvcm1Hcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgbm90aWZ5Q2hhbmdlcyhmb3JtTW9kZWw6IER5bmFtaWNGb3JtTW9kZWwsIGZvcm1Hcm91cDogRm9ybUdyb3VwKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzUmVjdXJzaXZlKGZvcm1Nb2RlbCwgZm9ybUdyb3VwKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTZWxlY3RPcHRpb25zKGZvcm1Db250cm9sTW9kZWw6IER5bmFtaWNGb3JtQ29udHJvbE1vZGVsLCBmb3JtQ29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGZvcm1Db250cm9sTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljU2VsZWN0TW9kZWwpIHtcclxuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBmb3JtQ29udHJvbE1vZGVsLm9wdGlvbnMkO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEZvcm1TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLm5vdGlmeShmb3JtQ29udHJvbE1vZGVsLCBmb3JtQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2hpbGUgKG9wdGlvbnMgaW5zdGFuY2VvZiBTdWJqZWN0ICYmIG9wdGlvbnMuc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5zb3VyY2U7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEZvcm1TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ub3RpZnkoZm9ybUNvbnRyb2xNb2RlbCwgZm9ybUNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNob3dFcnJvcnMoZm9ybTogRHluYW1pY0Zvcm1Db21wb25lbnQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3dFcnJvcnNGb3JHcm91cChmb3JtLmdyb3VwKTtcclxuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoZm9ybSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGV0ZWN0Q2hhbmdlcyhmb3JtQ29tcG9uZW50PzogRHluYW1pY0Zvcm1Db21wb25lbnQpIHtcclxuICAgICAgICBzdXBlci5kZXRlY3RDaGFuZ2VzKGZvcm1Db21wb25lbnQpO1xyXG4gICAgICAgIHRoaXMub25EZXRlY3RDaGFuZ2VzLmVtaXQoZm9ybUNvbXBvbmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHBhdGNoVmFsdWVSZWN1cnNpdmUodmFsdWU6IGFueSwgZm9ybU1vZGVsOiBEeW5hbWljRm9ybU1vZGVsLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IHZvaWQge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1Yk1vZGVsID0gdGhpcy5maW5kTW9kZWxCeUlkKGtleSwgZm9ybU1vZGVsKTtcclxuICAgICAgICAgICAgY29uc3Qgc3ViVmFsdWUgPSB2YWx1ZVtrZXldO1xyXG4gICAgICAgICAgICBpZiAoIXN1Yk1vZGVsKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHN1YkNvbnRyb2wgPSB0aGlzLmZpbmRDb250cm9sQnlNb2RlbChzdWJNb2RlbCwgZm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgaWYgKHN1Yk1vZGVsIGluc3RhbmNlb2YgRHluYW1pY1NlbGVjdE1vZGVsICYmIE9iamVjdFV0aWxzLmlzT2JqZWN0KHN1YlZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVba2V5XSA9IHN1YlZhbHVlLmlkIHx8IHN1YlZhbHVlLl9pZCB8fCBzdWJWYWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3ViTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUFycmF5TW9kZWxCYXNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBBcnJheS5pc0FycmF5KHN1YlZhbHVlKSA/IHN1YlZhbHVlLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJBcnJheSA9IHN1YkNvbnRyb2wgYXMgRm9ybUFycmF5O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHN1Yk1vZGVsLnNpemUgPiBsZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZvcm1BcnJheUdyb3VwKDAsIHN1YkFycmF5LCBzdWJNb2RlbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoc3ViTW9kZWwuc2l6ZSA8IGxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0Rm9ybUFycmF5R3JvdXAoc3ViTW9kZWwuc2l6ZSwgc3ViQXJyYXksIHN1Yk1vZGVsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtTW9kZWwgPSBzdWJNb2RlbC5nZXQoaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXRjaFZhbHVlUmVjdXJzaXZlKHN1YlZhbHVlW2ldLCBpdGVtTW9kZWwuZ3JvdXAsIHN1YkFycmF5LmF0KGkpIGFzIEZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN1Yk1vZGVsIGluc3RhbmNlb2YgRHluYW1pY0Zvcm1Hcm91cE1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGNoVmFsdWVSZWN1cnNpdmUoc3ViVmFsdWUsIHN1Yk1vZGVsLmdyb3VwLCBzdWJDb250cm9sIGFzIEZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgc2VyaWFsaXplUmVjdXJzaXZlKGZvcm1Nb2RlbDogRHluYW1pY0Zvcm1Nb2RlbCwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xyXG4gICAgICAgIGlmICghZm9ybU1vZGVsIHx8ICFmb3JtR3JvdXAgfHwgIWZvcm1Hcm91cC52YWx1ZSkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICBmb3IgKGNvbnN0IGkgaW4gZm9ybU1vZGVsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1Yk1vZGVsID0gZm9ybU1vZGVsW2ldIGFzIER5bmFtaWNGb3JtVmFsdWVDb250cm9sTW9kZWw8YW55PjtcclxuICAgICAgICAgICAgY29uc3Qgc3ViQ29udHJvbCA9IHRoaXMuZmluZENvbnRyb2xCeU1vZGVsKHN1Yk1vZGVsLCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICBjb25zdCBzZXJpYWxpemVyID0gc3ViTW9kZWwuYWRkaXRpb25hbD8uc2VyaWFsaXplciBhcyBGb3JtQ29udHJvbFNlcmlhbGl6ZXI7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3RVdGlscy5pc0Z1bmN0aW9uKHNlcmlhbGl6ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbc3ViTW9kZWwuaWRdID0gYXdhaXQgc2VyaWFsaXplcihzdWJNb2RlbCwgc3ViQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3ViTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUFycmF5TW9kZWxCYXNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBBcnJheS5pc0FycmF5KHN1YkNvbnRyb2wudmFsdWUpID8gc3ViQ29udHJvbC52YWx1ZS5sZW5ndGggOiAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViQXJyYXkgPSBzdWJDb250cm9sIGFzIEZvcm1BcnJheTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc0FycmF5ID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbU1vZGVsID0gc3ViTW9kZWwuZ2V0KGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc0FycmF5LnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2VyaWFsaXplUmVjdXJzaXZlKGl0ZW1Nb2RlbC5ncm91cCwgc3ViQXJyYXkuYXQoaSkgYXMgRm9ybUdyb3VwKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbc3ViTW9kZWwuaWRdID0gcmVzQXJyYXk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3ViTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUdyb3VwTW9kZWwpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtzdWJNb2RlbC5pZF0gPSBhd2FpdCB0aGlzLnNlcmlhbGl6ZVJlY3Vyc2l2ZShzdWJNb2RlbC5ncm91cCwgc3ViQ29udHJvbCBhcyBGb3JtR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN1Yk1vZGVsIGluc3RhbmNlb2YgRHluYW1pY0lucHV0TW9kZWwgJiYgIU9iamVjdFV0aWxzLmlzTnVsbE9yVW5kZWZpbmVkKHN1YkNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbc3ViTW9kZWwuaWRdID0gc3ViTW9kZWwuaW5wdXRUeXBlID09IFwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICA/IHBhcnNlRmxvYXQoKGAke3N1YkNvbnRyb2wudmFsdWV9YCB8fCBcIjBcIikucmVwbGFjZSgvLC9naSwgXCIuXCIpKSA/PyBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgOiBzdWJDb250cm9sLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzdWx0W3N1Yk1vZGVsLmlkXSA9IHN1YkNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG5vdGlmeUNoYW5nZXNSZWN1cnNpdmUoZm9ybU1vZGVsOiBEeW5hbWljRm9ybU1vZGVsLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghZm9ybU1vZGVsIHx8ICFmb3JtR3JvdXApIHJldHVybjtcclxuICAgICAgICBmb3IgKGNvbnN0IGkgaW4gZm9ybU1vZGVsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1Yk1vZGVsID0gZm9ybU1vZGVsW2ldIGFzIER5bmFtaWNGb3JtVmFsdWVDb250cm9sTW9kZWw8YW55PjtcclxuICAgICAgICAgICAgY29uc3Qgc3ViQ29udHJvbCA9IHRoaXMuZmluZENvbnRyb2xCeU1vZGVsKHN1Yk1vZGVsLCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICBpZiAoc3ViTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUFycmF5TW9kZWxCYXNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBBcnJheS5pc0FycmF5KHN1YkNvbnRyb2wudmFsdWUpID8gc3ViQ29udHJvbC52YWx1ZS5sZW5ndGggOiAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViQXJyYXkgPSBzdWJDb250cm9sIGFzIEZvcm1BcnJheTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtTW9kZWwgPSBzdWJNb2RlbC5nZXQoaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzUmVjdXJzaXZlKGl0ZW1Nb2RlbC5ncm91cCwgc3ViQXJyYXkuYXQoaSkgYXMgRm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdWJNb2RlbCBpbnN0YW5jZW9mIER5bmFtaWNGb3JtR3JvdXBNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzUmVjdXJzaXZlKHN1Yk1vZGVsLmdyb3VwLCBzdWJDb250cm9sIGFzIEZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdE9wdGlvbnMoc3ViTW9kZWwsIHN1YkNvbnRyb2wpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2hvd0Vycm9yc0Zvckdyb3VwKGZvcm1Hcm91cDogRm9ybUdyb3VwKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFmb3JtR3JvdXApIHJldHVybjtcclxuICAgICAgICBmb3JtR3JvdXAubWFya0FzVG91Y2hlZCh7b25seVNlbGY6IHRydWV9KTtcclxuICAgICAgICBjb25zdCBjb250cm9scyA9IE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykubWFwKGlkID0+IGZvcm1Hcm91cC5jb250cm9sc1tpZF0pO1xyXG4gICAgICAgIHRoaXMuc2hvd0Vycm9yc0ZvckNvbnRyb2xzKGNvbnRyb2xzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2hvd0Vycm9yc0ZvckNvbnRyb2xzKGNvbnRyb2xzOiBBYnN0cmFjdENvbnRyb2xbXSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnRyb2xzLmZvckVhY2goY29udHJvbCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcnNGb3JHcm91cChjb250cm9sKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiB0cnVlfSk7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcnNGb3JDb250cm9scyhjb250cm9sLmNvbnRyb2xzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEZvcm1Nb2RlbEZvclNjaGVtYShuYW1lOiBzdHJpbmcsIGN1c3RvbWl6ZU1vZGVsPzogRm9ybU1vZGVsQ3VzdG9taXplcik6IFByb21pc2U8RHluYW1pY0Zvcm1Nb2RlbD4ge1xyXG4gICAgICAgIHRoaXMuYXBpLmNhY2hlID0ge307XHJcbiAgICAgICAgdGhpcy5zY2hlbWFzID0gYXdhaXQgdGhpcy5vcGVuQXBpLmdldFNjaGVtYXMoKTtcclxuICAgICAgICBjb25zdCBjdXN0b21pemVNb2RlbHM6IEZvcm1Nb2RlbEN1c3RvbWl6ZXJXcmFwID0gKFxyXG4gICAgICAgICAgICBwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSwgc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSxcclxuICAgICAgICAgICAgbW9kZWxUeXBlOiBNb2RlbFR5cGUsIGNvbmZpZzogRHluYW1pY0Zvcm1Db250cm9sTW9kZWxDb25maWcpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSBuZXcgbW9kZWxUeXBlKGNvbmZpZyk7XHJcbiAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNGdW5jdGlvbihjdXN0b21pemVNb2RlbCkpIHJldHVybiBbbW9kZWxdO1xyXG4gICAgICAgICAgICBjb25zdCByZXMgPSBjdXN0b21pemVNb2RlbChwcm9wZXJ0eSwgc2NoZW1hLCBtb2RlbCwgY29uZmlnKTtcclxuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmVzKSA/IHJlcyA6IFtyZXNdO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybU1vZGVsRm9yU2NoZW1hRGVmKHRoaXMuc2NoZW1hc1tuYW1lXSwgY3VzdG9taXplTW9kZWxzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0Rm9ybU1vZGVsRm9yU2NoZW1hRGVmKHNjaGVtYTogSU9wZW5BcGlTY2hlbWEsIGN1c3RvbWl6ZU1vZGVsczogRm9ybU1vZGVsQ3VzdG9taXplcldyYXApOiBEeW5hbWljRm9ybU1vZGVsIHtcclxuICAgICAgICBpZiAoIXNjaGVtYSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEucHJvcGVydGllcyB8fCB7fSk7XHJcbiAgICAgICAgY29uc3QgY29udHJvbHM6IER5bmFtaWNGb3JtTW9kZWwgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHAgb2Yga2V5cykge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHNjaGVtYS5wcm9wZXJ0aWVzW3BdO1xyXG4gICAgICAgICAgICBjb250cm9scy5wdXNoKC4uLnRoaXMuZ2V0Rm9ybUNvbnRyb2xNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgY3VzdG9taXplTW9kZWxzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb250cm9scy5maWx0ZXIodCA9PiBudWxsICE9PSB0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0Rm9ybUNvbnRyb2xNb2RlbHMocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHksIHNjaGVtYTogSU9wZW5BcGlTY2hlbWEsIGN1c3RvbWl6ZU1vZGVsczogRm9ybU1vZGVsQ3VzdG9taXplcldyYXApOiBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbFtdIHtcclxuICAgICAgICBjb25zdCAkZW51bSA9IHByb3BlcnR5Lml0ZW1zPy5lbnVtIHx8IHByb3BlcnR5LmVudW07XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoJGVudW0pIHx8IGlzU3RyaW5nV2l0aFZhbChwcm9wZXJ0eS5vcHRpb25zUGF0aCkgfHwgaXNTdHJpbmdXaXRoVmFsKHByb3BlcnR5LmVuZHBvaW50KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY3VzdG9taXplTW9kZWxzKHByb3BlcnR5LCBzY2hlbWEsIER5bmFtaWNTZWxlY3RNb2RlbCwgdGhpcy5nZXRGb3JtU2VsZWN0Q29uZmlnKHByb3BlcnR5LCBzY2hlbWEpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3dpdGNoIChwcm9wZXJ0eS50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcclxuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICAgICAgICBjYXNlIFwiaW50ZWdlclwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbWl6ZU1vZGVscyhwcm9wZXJ0eSwgc2NoZW1hLCBEeW5hbWljSW5wdXRNb2RlbCwgdGhpcy5nZXRGb3JtSW5wdXRDb25maWcocHJvcGVydHksIHNjaGVtYSkpO1xyXG4gICAgICAgICAgICBjYXNlIFwidGV4dGFyZWFcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdXN0b21pemVNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgRHluYW1pY1RleHRBcmVhTW9kZWwsIHRoaXMuZ2V0Rm9ybVRleHRhcmVhQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpKTtcclxuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdXN0b21pemVNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgRHluYW1pY0NoZWNrYm94TW9kZWwsIHRoaXMuZ2V0Rm9ybUNoZWNrYm94Q29uZmlnKHByb3BlcnR5LCBzY2hlbWEpKTtcclxuICAgICAgICAgICAgY2FzZSBcImFycmF5XCI6XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkuaXRlbXM/LiRyZWYgfHwgcHJvcGVydHkuJHJlZikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXN0b21pemVNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgRHluYW1pY0Zvcm1BcnJheU1vZGVsLCB0aGlzLmdldEZvcm1BcnJheUNvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hLCBjdXN0b21pemVNb2RlbHMpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbWl6ZU1vZGVscyhwcm9wZXJ0eSwgc2NoZW1hLCBEeW5hbWljSW5wdXRNb2RlbCwgdGhpcy5nZXRGb3JtSW5wdXRDb25maWcocHJvcGVydHksIHNjaGVtYSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiZmlsZVwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbWl6ZU1vZGVscyhwcm9wZXJ0eSwgc2NoZW1hLCBEeW5hbWljRmlsZVVwbG9hZE1vZGVsLCB0aGlzLmdldEZvcm1VcGxvYWRDb25maWcocHJvcGVydHksIHNjaGVtYSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJvcGVydHkuJHJlZikge1xyXG4gICAgICAgICAgICByZXR1cm4gY3VzdG9taXplTW9kZWxzKHByb3BlcnR5LCBzY2hlbWEsIER5bmFtaWNGb3JtR3JvdXBNb2RlbCwgdGhpcy5nZXRGb3JtR3JvdXBDb25maWcocHJvcGVydHksIHNjaGVtYSwgY3VzdG9taXplTW9kZWxzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0Rm9ybUNvbnRyb2xDb25maWcocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHksIHNjaGVtYTogSU9wZW5BcGlTY2hlbWEpOiBEeW5hbWljRm9ybVZhbHVlQ29udHJvbE1vZGVsQ29uZmlnPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB0aGlzLmdldFZhbGlkYXRvcnMocHJvcGVydHksIHNjaGVtYSk7XHJcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IE9iamVjdC5rZXlzKHZhbGlkYXRvcnMpLnJlZHVjZSgocmVzLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgcmVzW2tleV0gPSBgZXJyb3IuJHtrZXl9YDtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9LCB7fSk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHByb3BlcnR5LmlkLFxyXG4gICAgICAgICAgICBsYWJlbDogT2JqZWN0VXRpbHMuaXNTdHJpbmcocHJvcGVydHkubGFiZWwpID8gcHJvcGVydHkubGFiZWwgOiBwcm9wZXJ0eS5pZCxcclxuICAgICAgICAgICAgaGlkZGVuOiBwcm9wZXJ0eS5oaWRkZW4sXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiBwcm9wZXJ0eS5kaXNhYmxlZCxcclxuICAgICAgICAgICAgdmFsaWRhdG9ycyxcclxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlcyxcclxuICAgICAgICAgICAgYWRkaXRpb25hbDogT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydHkpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0Rm9ybUFycmF5Q29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hLCBjdXN0b21pemVNb2RlbHM6IEZvcm1Nb2RlbEN1c3RvbWl6ZXJXcmFwKTogRHluYW1pY0Zvcm1BcnJheU1vZGVsQ29uZmlnIHtcclxuICAgICAgICBjb25zdCByZWYgPSBwcm9wZXJ0eS5pdGVtcz8uJHJlZiB8fCBwcm9wZXJ0eS4kcmVmIHx8IFwiXCI7XHJcbiAgICAgICAgY29uc3Qgc3ViU2NoZW1hID0gdGhpcy5zY2hlbWFzW3JlZi5zcGxpdChcIi9cIikucG9wKCldO1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHRoaXMuZ2V0Rm9ybUNvbnRyb2xDb25maWcocHJvcGVydHksIHNjaGVtYSksIHtncm91cEZhY3Rvcnk6ICgpID0+IHRoaXMuZ2V0Rm9ybU1vZGVsRm9yU2NoZW1hRGVmKHN1YlNjaGVtYSwgY3VzdG9taXplTW9kZWxzKX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRGb3JtR3JvdXBDb25maWcocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHksIHNjaGVtYTogSU9wZW5BcGlTY2hlbWEsIGN1c3RvbWl6ZU1vZGVsczogRm9ybU1vZGVsQ3VzdG9taXplcldyYXApOiBEeW5hbWljRm9ybUdyb3VwTW9kZWxDb25maWcge1xyXG4gICAgICAgIGNvbnN0IHJlZiA9IHByb3BlcnR5LiRyZWYgfHwgXCJcIjtcclxuICAgICAgICBjb25zdCBzdWJTY2hlbWEgPSB0aGlzLnNjaGVtYXNbcmVmLnNwbGl0KFwiL1wiKS5wb3AoKV07XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24odGhpcy5nZXRGb3JtQ29udHJvbENvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hKSwge2dyb3VwOiB0aGlzLmdldEZvcm1Nb2RlbEZvclNjaGVtYURlZihzdWJTY2hlbWEsIGN1c3RvbWl6ZU1vZGVscyl9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0Rm9ybUlucHV0Q29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKTogRHluYW1pY0lucHV0TW9kZWxDb25maWcge1xyXG4gICAgICAgIGxldCBpbnB1dFR5cGUgPSBTdHJpbmdVdGlscy5oYXMocHJvcGVydHkuaWQsIFwicGFzc3dvcmRcIiwgXCJQYXNzd29yZFwiKSA/IFwicGFzc3dvcmRcIiA6IChwcm9wZXJ0eS5pdGVtcz8udHlwZSB8fCBwcm9wZXJ0eS50eXBlKTtcclxuICAgICAgICBzd2l0Y2ggKGlucHV0VHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxyXG4gICAgICAgICAgICAgICAgaW5wdXRUeXBlID0gXCJjaGVja2JveFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxyXG4gICAgICAgICAgICAgICAgaW5wdXRUeXBlID0gXCJ0ZXh0YXJlYVwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6XHJcbiAgICAgICAgICAgICAgICBpbnB1dFR5cGUgPSBcIm51bWJlclwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHN1YiA9IHByb3BlcnR5LnR5cGUgPT0gXCJhcnJheVwiID8gcHJvcGVydHkuaXRlbXMgfHwgcHJvcGVydHkgOiBwcm9wZXJ0eTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtQ29udHJvbENvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hKSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaW5wdXRUeXBlLFxyXG4gICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlOiBwcm9wZXJ0eS5hdXRvQ29tcGxldGUgfHwgXCJvZmZcIixcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBwcm9wZXJ0eS50eXBlID09IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgICAgIGFjY2VwdDogT2JqZWN0VXRpbHMuaXNTdHJpbmcocHJvcGVydHkuYWNjZXB0KSA/IHByb3BlcnR5LmFjY2VwdCA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBtYXNrOiBPYmplY3RVdGlscy5pc1N0cmluZyhwcm9wZXJ0eS5tYXNrKSA/IHByb3BlcnR5Lm1hc2sgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgcGF0dGVybjogT2JqZWN0VXRpbHMuaXNTdHJpbmcocHJvcGVydHkucGF0dGVybikgPyBwcm9wZXJ0eS5wYXR0ZXJuIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHN0ZXA6IGlzTmFOKHN1Yi5zdGVwKSA/IChpc05hTihwcm9wZXJ0eS5zdGVwKSA/IDEgOiBwcm9wZXJ0eS5zdGVwKSA6IHN1Yi5zdGVwLFxyXG4gICAgICAgICAgICAgICAgbWluOiBpc05hTihzdWIubWluaW11bSkgPyBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiA6IHN1Yi5taW5pbXVtLFxyXG4gICAgICAgICAgICAgICAgbWF4OiBpc05hTihzdWIubWF4aW11bSkgPyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiA6IHN1Yi5tYXhpbXVtLFxyXG4gICAgICAgICAgICAgICAgbWluTGVuZ3RoOiBpc05hTihzdWIubWluTGVuZ3RoKSA/IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSIDogc3ViLm1pbkxlbmd0aCxcclxuICAgICAgICAgICAgICAgIG1heExlbmd0aDogaXNOYU4oc3ViLm1heExlbmd0aCkgPyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiA6IHN1Yi5tYXhMZW5ndGgsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRGb3JtVGV4dGFyZWFDb25maWcocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHksIHNjaGVtYTogSU9wZW5BcGlTY2hlbWEpOiBEeW5hbWljVGV4dEFyZWFNb2RlbENvbmZpZyB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUNvbnRyb2xDb25maWcocHJvcGVydHksIHNjaGVtYSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbHM6IHByb3BlcnR5LmNvbHMgfHwgbnVsbCxcclxuICAgICAgICAgICAgICAgIHJvd3M6IHByb3BlcnR5LnJvd3MgfHwgMTAsXHJcbiAgICAgICAgICAgICAgICB3cmFwOiBwcm9wZXJ0eS53cmFwIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlOiBwcm9wZXJ0eS5hdXRvQ29tcGxldGUgfHwgXCJvZmZcIixcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBwcm9wZXJ0eS50eXBlID09IFwiYXJyYXlcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0Rm9ybVNlbGVjdENvbmZpZyhwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSwgc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSk6IER5bmFtaWNTZWxlY3RNb2RlbENvbmZpZzxhbnk+IHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtQ29udHJvbENvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hKSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5nZXRGb3JtU2VsZWN0T3B0aW9ucyhwcm9wZXJ0eSwgc2NoZW1hKSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBwcm9wZXJ0eS50eXBlID09IFwiYXJyYXlcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0Rm9ybUNoZWNrYm94Q29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKTogRHluYW1pY0NoZWNrYm94TW9kZWxDb25maWcge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1Db250cm9sQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlOiBwcm9wZXJ0eS5pbmRldGVybWluYXRlID09PSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyB0cmFuc2xhdGVPcHRpb25zKG9wdGlvbnM6IER5bmFtaWNGb3JtT3B0aW9uQ29uZmlnPGFueT5bXSk6IFByb21pc2U8RHluYW1pY0Zvcm1PcHRpb25Db25maWc8YW55PltdPiB7XHJcbiAgICAgICAgaWYgKCFvcHRpb25zKSByZXR1cm4gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xyXG4gICAgICAgICAgICBvcHRpb24ubGFiZWwgPSBhd2FpdCB0aGlzLmxhbmd1YWdlLmdldFRyYW5zbGF0aW9uKG9wdGlvbi5sYWJlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRGb3JtU2VsZWN0T3B0aW9ucyhwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSwgc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSkge1xyXG4gICAgICAgIGNvbnN0ICRlbnVtID0gcHJvcGVydHkuaXRlbXM/LmVudW0gfHwgcHJvcGVydHkuZW51bTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkZW51bSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb3JtU2VsZWN0U3ViamVjdCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gJGVudW0ubWFwKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHByb3BlcnR5LnRyYW5zbGF0YWJsZSA/IGAke3Byb3BlcnR5LmlkfS4ke3ZhbHVlfWAgOiBgJHt2YWx1ZX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWUsIGxhYmVsfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlT3B0aW9ucyhvcHRpb25zKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1N0cmluZ1dpdGhWYWwocHJvcGVydHkub3B0aW9uc1BhdGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRm9ybVNlbGVjdFN1YmplY3QoKGZvcm1Nb2RlbCwgY29udHJvbCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gcHJvcGVydHkub3B0aW9uc1BhdGg7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gY29udHJvbDtcclxuICAgICAgICAgICAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIkcm9vdFwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cig1KTtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGFyZ2V0LnBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdoaWxlIChwYXRoLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQucGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBPYmplY3RVdGlscy5nZXRWYWx1ZSh0YXJnZXQudmFsdWUsIHBhdGgucmVwbGFjZSgvXFwkaXgvZ2ksIGluZGV4KSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKCFPYmplY3RVdGlscy5pc0FycmF5KHZhbHVlKSA/IFtdIDogdmFsdWUpLm1hcCh2YWx1ZSA9PiAoe3ZhbHVlLCBsYWJlbDogdmFsdWV9KSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVPcHRpb25zKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGb3JtU2VsZWN0U3ViamVjdChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBpLmNhY2hlW3Byb3BlcnR5LmVuZHBvaW50XSA9IHRoaXMuYXBpLmNhY2hlW3Byb3BlcnR5LmVuZHBvaW50XSB8fCB0aGlzLmFwaS5saXN0KHByb3BlcnR5LmVuZHBvaW50LCB0aGlzLmFwaS5tYWtlTGlzdFBhcmFtcygxLCAtMSkpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXRlbXMubWFwKGkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IGkuaWQgfHwgaS5faWQsIGxhYmVsOiBpW3Byb3BlcnR5LmxhYmVsRmllbGRdIHx8IGkubGFiZWwgfHwgaS5pZCB8fCBpLl9pZH07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoYXdhaXQgdGhpcy5hcGkuY2FjaGVbcHJvcGVydHkuZW5kcG9pbnRdKS5tYXAodCA9PiBPYmplY3QuYXNzaWduKHt9LCB0KSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZU9wdGlvbnMob3B0aW9ucyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldEZvcm1VcGxvYWRDb25maWcocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHksIHNjaGVtYTogSU9wZW5BcGlTY2hlbWEpOiBEeW5hbWljRmlsZVVwbG9hZE1vZGVsQ29uZmlnIHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmFwaS51cmwocHJvcGVydHkudXJsIHx8IFwiYXNzZXRzXCIpO1xyXG4gICAgICAgIGNvbnN0IHthY2NlcHQsIGF1dG9VcGxvYWQsIG1heFNpemUsIG1pblNpemUsIHJlbW92ZVVybCwgc2hvd0ZpbGVMaXN0fSA9IHByb3BlcnR5O1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHRoaXMuZ2V0Rm9ybUNvbnRyb2xDb25maWcocHJvcGVydHksIHNjaGVtYSksIHtcclxuICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICBhY2NlcHQsXHJcbiAgICAgICAgICAgIGF1dG9VcGxvYWQsXHJcbiAgICAgICAgICAgIG1heFNpemUsXHJcbiAgICAgICAgICAgIG1pblNpemUsXHJcbiAgICAgICAgICAgIHJlbW92ZVVybCxcclxuICAgICAgICAgICAgc2hvd0ZpbGVMaXN0XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldFZhbGlkYXRvcnMocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHksIHNjaGVtYTogSU9wZW5BcGlTY2hlbWEpOiBEeW5hbWljVmFsaWRhdG9yc0NvbmZpZyB7XHJcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yczogRHluYW1pY1ZhbGlkYXRvcnNDb25maWcgPSB7fTtcclxuICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNBcnJheShzY2hlbWEucmVxdWlyZWQpICYmIHNjaGVtYS5yZXF1aXJlZC5pbmRleE9mKHByb3BlcnR5LmlkKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucmVxdWlyZWQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFkZFByb3BlcnR5VmFsaWRhdG9ycyh2YWxpZGF0b3JzLCBwcm9wZXJ0eSk7XHJcbiAgICAgICAgdGhpcy5hZGRJdGVtc1ZhbGlkYXRvcnModmFsaWRhdG9ycywgcHJvcGVydHkuaXRlbXMpO1xyXG4gICAgICAgIHJldHVybiB2YWxpZGF0b3JzO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhZGRQcm9wZXJ0eVZhbGlkYXRvcnModmFsaWRhdG9yczogRHluYW1pY1ZhbGlkYXRvcnNDb25maWcsIHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFwcm9wZXJ0eSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghaXNOYU4ocHJvcGVydHkubWluTGVuZ3RoKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLm1pbkxlbmd0aCA9IHByb3BlcnR5Lm1pbkxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc05hTihwcm9wZXJ0eS5tYXhMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMubWF4TGVuZ3RoID0gcHJvcGVydHkubWF4TGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzTmFOKHByb3BlcnR5Lm1pbmltdW0pKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMubWluID0gcHJvcGVydHkubWluaW11bTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc05hTihwcm9wZXJ0eS5tYXhpbXVtKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLm1heCA9IHByb3BlcnR5Lm1heGltdW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN3aXRjaCAocHJvcGVydHkuZm9ybWF0KSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJlbWFpbFwiOlxyXG4gICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5lbWFpbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFkZEl0ZW1zVmFsaWRhdG9ycyh2YWxpZGF0b3JzOiBEeW5hbWljVmFsaWRhdG9yc0NvbmZpZywgaXRlbXM6IElPcGVuQXBpU2NoZW1hUHJvcGVydHkpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWl0ZW1zKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFpc05hTihpdGVtcy5taW5MZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMuaXRlbXNNaW5MZW5ndGggPSBpdGVtcy5taW5MZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNOYU4oaXRlbXMubWF4TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLml0ZW1zTWF4TGVuZ3RoID0gaXRlbXMubWF4TGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzTmFOKGl0ZW1zLm1pbmltdW0pKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMuaXRlbXNNaW5WYWx1ZSA9IGl0ZW1zLm1pbmltdW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNOYU4oaXRlbXMubWF4aW11bSkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5pdGVtc01heFZhbHVlID0gaXRlbXMubWF4aW11bTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
427
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LWR5bmFtaWMtZm9ybS9zZXJ2aWNlcy9keW5hbWljLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQWtCLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFDSCxvQkFBb0IsRUFFcEIsc0JBQXNCLEVBRXRCLHFCQUFxQixJQUFJLHlCQUF5QixFQUVsRCwyQkFBMkIsRUFHM0IscUJBQXFCLEVBSXJCLGtCQUFrQixJQUFJLElBQUksRUFDMUIsNEJBQTRCLEVBRzVCLGlCQUFpQixFQUVqQixrQkFBa0IsRUFFbEIsb0JBQW9CLEVBR3ZCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQU1ILFdBQVcsRUFDWCxjQUFjLEVBQ2QsV0FBVyxFQUNkLE1BQU0sa0JBQWtCLENBQUM7QUFJMUIsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFDLHFCQUFxQixFQUE4QixNQUFNLG1DQUFtQyxDQUFDO0FBR3JHLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxJQUFJO0lBYXhDLFlBQVksRUFBK0IsRUFDL0IsRUFBZ0MsRUFDQyxPQUF1QixFQUM3QixRQUFrQjtRQUNyRCxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRjJCLFlBQU8sR0FBUCxPQUFP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LEVBQUU7WUFDekIsVUFBVSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1NBQy9DO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDekIsVUFBVSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1NBQy9DO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDdkIsVUFBVSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1NBQzVDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDdkIsVUFBVSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1NBQzVDO0lBQ0wsQ0FBQzs7O1lBdGJKLFVBQVU7OztZQXJDUCwyQkFBMkI7WUFRM0IsNEJBQTRCO1lBa0I1QixjQUFjLHVCQTJCRCxNQUFNLFNBQUMsY0FBYztZQS9ESSxRQUFRLHVCQWdFakMsTUFBTSxTQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0V2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rvcn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUdyb3VwfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHtTdWJqZWN0fSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgRHluYW1pY0NoZWNrYm94TW9kZWwsXHJcbiAgICBEeW5hbWljQ2hlY2tib3hNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNGaWxlVXBsb2FkTW9kZWwsXHJcbiAgICBEeW5hbWljRmlsZVVwbG9hZE1vZGVsQ29uZmlnLFxyXG4gICAgRHluYW1pY0Zvcm1BcnJheU1vZGVsIGFzIER5bmFtaWNGb3JtQXJyYXlNb2RlbEJhc2UsXHJcbiAgICBEeW5hbWljRm9ybUNvbXBvbmVudCxcclxuICAgIER5bmFtaWNGb3JtQ29tcG9uZW50U2VydmljZSxcclxuICAgIER5bmFtaWNGb3JtQ29udHJvbE1vZGVsLFxyXG4gICAgRHluYW1pY0Zvcm1Db250cm9sTW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljRm9ybUdyb3VwTW9kZWwsXHJcbiAgICBEeW5hbWljRm9ybUdyb3VwTW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljRm9ybU1vZGVsLFxyXG4gICAgRHluYW1pY0Zvcm1PcHRpb25Db25maWcsXHJcbiAgICBEeW5hbWljRm9ybVNlcnZpY2UgYXMgQmFzZSxcclxuICAgIER5bmFtaWNGb3JtVmFsaWRhdGlvblNlcnZpY2UsXHJcbiAgICBEeW5hbWljRm9ybVZhbHVlQ29udHJvbE1vZGVsLFxyXG4gICAgRHluYW1pY0Zvcm1WYWx1ZUNvbnRyb2xNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNJbnB1dE1vZGVsLFxyXG4gICAgRHluYW1pY0lucHV0TW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljU2VsZWN0TW9kZWwsXHJcbiAgICBEeW5hbWljU2VsZWN0TW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljVGV4dEFyZWFNb2RlbCxcclxuICAgIER5bmFtaWNUZXh0QXJlYU1vZGVsQ29uZmlnLFxyXG4gICAgRHluYW1pY1ZhbGlkYXRvcnNDb25maWdcclxufSBmcm9tIFwiQG5nLWR5bmFtaWMtZm9ybXMvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgSUFwaVNlcnZpY2UsXHJcbiAgICBJTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgSU9wZW5BcGlTY2hlbWEsXHJcbiAgICBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LFxyXG4gICAgSU9wZW5BcGlTY2hlbWFzLFxyXG4gICAgT2JqZWN0VXRpbHMsXHJcbiAgICBPcGVuQXBpU2VydmljZSxcclxuICAgIFN0cmluZ1V0aWxzXHJcbn0gZnJvbSBcIkBzdGVteS9uZ3gtdXRpbHNcIjtcclxuXHJcbmltcG9ydCB7Rm9ybUNvbnRyb2xTZXJpYWxpemVyLCBGb3JtTW9kZWxDdXN0b21pemVyLCBGb3JtTW9kZWxDdXN0b21pemVyV3JhcCwgTW9kZWxUeXBlfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5pbXBvcnQge2lzU3RyaW5nV2l0aFZhbH0gZnJvbSBcIi4uL3V0aWxzL21pc2NcIjtcclxuaW1wb3J0IHtGb3JtU2VsZWN0U3ViamVjdH0gZnJvbSBcIi4uL3V0aWxzL2Zvcm0tc2VsZWN0LXN1YmplY3RcIjtcclxuaW1wb3J0IHtGb3JtU3ViamVjdH0gZnJvbSBcIi4uL3V0aWxzL2Zvcm0tc3ViamVjdFwiO1xyXG5pbXBvcnQge0R5bmFtaWNGb3JtQXJyYXlNb2RlbCwgRHluYW1pY0Zvcm1BcnJheU1vZGVsQ29uZmlnfSBmcm9tIFwiLi4vdXRpbHMvZHluYW1pYy1mb3JtLWFycmF5Lm1vZGVsXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljRm9ybVNlcnZpY2UgZXh0ZW5kcyBCYXNlIHtcclxuXHJcbiAgICBnZXQgYXBpKCk6IElBcGlTZXJ2aWNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcGVuQXBpLmFwaTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGFuZ3VhZ2UoKTogSUxhbmd1YWdlU2VydmljZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmxhbmd1YWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlYWRvbmx5IG9uRGV0ZWN0Q2hhbmdlczogRXZlbnRFbWl0dGVyPER5bmFtaWNGb3JtQ29tcG9uZW50PjtcclxuICAgIHByb3RlY3RlZCBzY2hlbWFzOiBJT3BlbkFwaVNjaGVtYXM7XHJcblxyXG4gICAgY29uc3RydWN0b3IoY3M6IER5bmFtaWNGb3JtQ29tcG9uZW50U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHZzOiBEeW5hbWljRm9ybVZhbGlkYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgQEluamVjdChPcGVuQXBpU2VydmljZSkgcmVhZG9ubHkgb3BlbkFwaTogT3BlbkFwaVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBASW5qZWN0KEluamVjdG9yKSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBzdXBlcihjcywgdnMpO1xyXG4gICAgICAgIHRoaXMub25EZXRlY3RDaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcjxEeW5hbWljRm9ybUNvbXBvbmVudD4oKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaEdyb3VwKHZhbHVlOiBhbnksIGZvcm1Nb2RlbDogRHluYW1pY0Zvcm1Nb2RlbCwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhdGNoVmFsdWVSZWN1cnNpdmUodmFsdWUsIGZvcm1Nb2RlbCwgZm9ybUdyb3VwKTtcclxuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBmb3JtR3JvdXAucGF0Y2hWYWx1ZShPYmplY3RVdGlscy5jb3B5KHZhbHVlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hGb3JtKHZhbHVlOiBhbnksIGNvbXBvbmVudDogRHluYW1pY0Zvcm1Db21wb25lbnQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhdGNoVmFsdWVSZWN1cnNpdmUodmFsdWUsIGNvbXBvbmVudC5tb2RlbCwgY29tcG9uZW50Lmdyb3VwKTtcclxuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoY29tcG9uZW50KTtcclxuICAgICAgICBjb21wb25lbnQuZ3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VyaWFsaXplKGZvcm1Nb2RlbDogRHluYW1pY0Zvcm1Nb2RlbCwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZVJlY3Vyc2l2ZShmb3JtTW9kZWwsIGZvcm1Hcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgbm90aWZ5Q2hhbmdlcyhmb3JtTW9kZWw6IER5bmFtaWNGb3JtTW9kZWwsIGZvcm1Hcm91cDogRm9ybUdyb3VwKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzUmVjdXJzaXZlKGZvcm1Nb2RlbCwgZm9ybUdyb3VwKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTZWxlY3RPcHRpb25zKGZvcm1Db250cm9sTW9kZWw6IER5bmFtaWNGb3JtQ29udHJvbE1vZGVsLCBmb3JtQ29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGZvcm1Db250cm9sTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljU2VsZWN0TW9kZWwpIHtcclxuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBmb3JtQ29udHJvbE1vZGVsLm9wdGlvbnMkO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEZvcm1TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLm5vdGlmeShmb3JtQ29udHJvbE1vZGVsLCBmb3JtQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2hpbGUgKG9wdGlvbnMgaW5zdGFuY2VvZiBTdWJqZWN0ICYmIG9wdGlvbnMuc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5zb3VyY2U7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEZvcm1TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ub3RpZnkoZm9ybUNvbnRyb2xNb2RlbCwgZm9ybUNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNob3dFcnJvcnMoZm9ybTogRHluYW1pY0Zvcm1Db21wb25lbnQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3dFcnJvcnNGb3JHcm91cChmb3JtLmdyb3VwKTtcclxuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoZm9ybSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGV0ZWN0Q2hhbmdlcyhmb3JtQ29tcG9uZW50PzogRHluYW1pY0Zvcm1Db21wb25lbnQpIHtcclxuICAgICAgICBzdXBlci5kZXRlY3RDaGFuZ2VzKGZvcm1Db21wb25lbnQpO1xyXG4gICAgICAgIHRoaXMub25EZXRlY3RDaGFuZ2VzLmVtaXQoZm9ybUNvbXBvbmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHBhdGNoVmFsdWVSZWN1cnNpdmUodmFsdWU6IGFueSwgZm9ybU1vZGVsOiBEeW5hbWljRm9ybU1vZGVsLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IHZvaWQge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1Yk1vZGVsID0gdGhpcy5maW5kTW9kZWxCeUlkKGtleSwgZm9ybU1vZGVsKTtcclxuICAgICAgICAgICAgY29uc3Qgc3ViVmFsdWUgPSB2YWx1ZVtrZXldO1xyXG4gICAgICAgICAgICBpZiAoIXN1Yk1vZGVsKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHN1YkNvbnRyb2wgPSB0aGlzLmZpbmRDb250cm9sQnlNb2RlbChzdWJNb2RlbCwgZm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgaWYgKHN1Yk1vZGVsIGluc3RhbmNlb2YgRHluYW1pY1NlbGVjdE1vZGVsICYmIE9iamVjdFV0aWxzLmlzT2JqZWN0KHN1YlZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVba2V5XSA9IHN1YlZhbHVlLmlkIHx8IHN1YlZhbHVlLl9pZCB8fCBzdWJWYWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3ViTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUFycmF5TW9kZWxCYXNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBBcnJheS5pc0FycmF5KHN1YlZhbHVlKSA/IHN1YlZhbHVlLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJBcnJheSA9IHN1YkNvbnRyb2wgYXMgRm9ybUFycmF5O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHN1Yk1vZGVsLnNpemUgPiBsZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZvcm1BcnJheUdyb3VwKDAsIHN1YkFycmF5LCBzdWJNb2RlbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoc3ViTW9kZWwuc2l6ZSA8IGxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0Rm9ybUFycmF5R3JvdXAoc3ViTW9kZWwuc2l6ZSwgc3ViQXJyYXksIHN1Yk1vZGVsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtTW9kZWwgPSBzdWJNb2RlbC5nZXQoaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXRjaFZhbHVlUmVjdXJzaXZlKHN1YlZhbHVlW2ldLCBpdGVtTW9kZWwuZ3JvdXAsIHN1YkFycmF5LmF0KGkpIGFzIEZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN1Yk1vZGVsIGluc3RhbmNlb2YgRHluYW1pY0Zvcm1Hcm91cE1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGNoVmFsdWVSZWN1cnNpdmUoc3ViVmFsdWUsIHN1Yk1vZGVsLmdyb3VwLCBzdWJDb250cm9sIGFzIEZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgc2VyaWFsaXplUmVjdXJzaXZlKGZvcm1Nb2RlbDogRHluYW1pY0Zvcm1Nb2RlbCwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xyXG4gICAgICAgIGlmICghZm9ybU1vZGVsIHx8ICFmb3JtR3JvdXAgfHwgIWZvcm1Hcm91cC52YWx1ZSkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICBmb3IgKGNvbnN0IGkgaW4gZm9ybU1vZGVsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1Yk1vZGVsID0gZm9ybU1vZGVsW2ldIGFzIER5bmFtaWNGb3JtVmFsdWVDb250cm9sTW9kZWw8YW55PjtcclxuICAgICAgICAgICAgY29uc3Qgc3ViQ29udHJvbCA9IHRoaXMuZmluZENvbnRyb2xCeU1vZGVsKHN1Yk1vZGVsLCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICBjb25zdCBzZXJpYWxpemVyID0gc3ViTW9kZWwuYWRkaXRpb25hbD8uc2VyaWFsaXplciBhcyBGb3JtQ29udHJvbFNlcmlhbGl6ZXI7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3RVdGlscy5pc0Z1bmN0aW9uKHNlcmlhbGl6ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbc3ViTW9kZWwuaWRdID0gYXdhaXQgc2VyaWFsaXplcihzdWJNb2RlbCwgc3ViQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3ViTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUFycmF5TW9kZWxCYXNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBBcnJheS5pc0FycmF5KHN1YkNvbnRyb2wudmFsdWUpID8gc3ViQ29udHJvbC52YWx1ZS5sZW5ndGggOiAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViQXJyYXkgPSBzdWJDb250cm9sIGFzIEZvcm1BcnJheTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc0FycmF5ID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbU1vZGVsID0gc3ViTW9kZWwuZ2V0KGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc0FycmF5LnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2VyaWFsaXplUmVjdXJzaXZlKGl0ZW1Nb2RlbC5ncm91cCwgc3ViQXJyYXkuYXQoaSkgYXMgRm9ybUdyb3VwKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbc3ViTW9kZWwuaWRdID0gcmVzQXJyYXk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3ViTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUdyb3VwTW9kZWwpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtzdWJNb2RlbC5pZF0gPSBhd2FpdCB0aGlzLnNlcmlhbGl6ZVJlY3Vyc2l2ZShzdWJNb2RlbC5ncm91cCwgc3ViQ29udHJvbCBhcyBGb3JtR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN1Yk1vZGVsIGluc3RhbmNlb2YgRHluYW1pY0lucHV0TW9kZWwgJiYgIU9iamVjdFV0aWxzLmlzTnVsbE9yVW5kZWZpbmVkKHN1YkNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbc3ViTW9kZWwuaWRdID0gc3ViTW9kZWwuaW5wdXRUeXBlID09IFwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICA/IHBhcnNlRmxvYXQoKGAke3N1YkNvbnRyb2wudmFsdWV9YCB8fCBcIjBcIikucmVwbGFjZSgvLC9naSwgXCIuXCIpKSA/PyBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgOiBzdWJDb250cm9sLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzdWx0W3N1Yk1vZGVsLmlkXSA9IHN1YkNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG5vdGlmeUNoYW5nZXNSZWN1cnNpdmUoZm9ybU1vZGVsOiBEeW5hbWljRm9ybU1vZGVsLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghZm9ybU1vZGVsIHx8ICFmb3JtR3JvdXApIHJldHVybjtcclxuICAgICAgICBmb3IgKGNvbnN0IGkgaW4gZm9ybU1vZGVsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1Yk1vZGVsID0gZm9ybU1vZGVsW2ldIGFzIER5bmFtaWNGb3JtVmFsdWVDb250cm9sTW9kZWw8YW55PjtcclxuICAgICAgICAgICAgY29uc3Qgc3ViQ29udHJvbCA9IHRoaXMuZmluZENvbnRyb2xCeU1vZGVsKHN1Yk1vZGVsLCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICBpZiAoc3ViTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUFycmF5TW9kZWxCYXNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBBcnJheS5pc0FycmF5KHN1YkNvbnRyb2wudmFsdWUpID8gc3ViQ29udHJvbC52YWx1ZS5sZW5ndGggOiAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViQXJyYXkgPSBzdWJDb250cm9sIGFzIEZvcm1BcnJheTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtTW9kZWwgPSBzdWJNb2RlbC5nZXQoaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzUmVjdXJzaXZlKGl0ZW1Nb2RlbC5ncm91cCwgc3ViQXJyYXkuYXQoaSkgYXMgRm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdWJNb2RlbCBpbnN0YW5jZW9mIER5bmFtaWNGb3JtR3JvdXBNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzUmVjdXJzaXZlKHN1Yk1vZGVsLmdyb3VwLCBzdWJDb250cm9sIGFzIEZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdE9wdGlvbnMoc3ViTW9kZWwsIHN1YkNvbnRyb2wpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2hvd0Vycm9yc0Zvckdyb3VwKGZvcm1Hcm91cDogRm9ybUdyb3VwKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFmb3JtR3JvdXApIHJldHVybjtcclxuICAgICAgICBmb3JtR3JvdXAubWFya0FzVG91Y2hlZCh7b25seVNlbGY6IHRydWV9KTtcclxuICAgICAgICBjb25zdCBjb250cm9scyA9IE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykubWFwKGlkID0+IGZvcm1Hcm91cC5jb250cm9sc1tpZF0pO1xyXG4gICAgICAgIHRoaXMuc2hvd0Vycm9yc0ZvckNvbnRyb2xzKGNvbnRyb2xzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2hvd0Vycm9yc0ZvckNvbnRyb2xzKGNvbnRyb2xzOiBBYnN0cmFjdENvbnRyb2xbXSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnRyb2xzLmZvckVhY2goY29udHJvbCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcnNGb3JHcm91cChjb250cm9sKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiB0cnVlfSk7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcnNGb3JDb250cm9scyhjb250cm9sLmNvbnRyb2xzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEZvcm1Nb2RlbEZvclNjaGVtYShuYW1lOiBzdHJpbmcsIGN1c3RvbWl6ZU1vZGVsPzogRm9ybU1vZGVsQ3VzdG9taXplcik6IFByb21pc2U8RHluYW1pY0Zvcm1Nb2RlbD4ge1xyXG4gICAgICAgIHRoaXMuYXBpLmNhY2hlID0ge307XHJcbiAgICAgICAgdGhpcy5zY2hlbWFzID0gYXdhaXQgdGhpcy5vcGVuQXBpLmdldFNjaGVtYXMoKTtcclxuICAgICAgICBjb25zdCBjdXN0b21pemVNb2RlbHM6IEZvcm1Nb2RlbEN1c3RvbWl6ZXJXcmFwID0gKFxyXG4gICAgICAgICAgICBwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSwgc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSxcclxuICAgICAgICAgICAgbW9kZWxUeXBlOiBNb2RlbFR5cGUsIGNvbmZpZzogRHluYW1pY0Zvcm1Db250cm9sTW9kZWxDb25maWcpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSBuZXcgbW9kZWxUeXBlKGNvbmZpZyk7XHJcbiAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNGdW5jdGlvbihjdXN0b21pemVNb2RlbCkpIHJldHVybiBbbW9kZWxdO1xyXG4gICAgICAgICAgICBjb25zdCByZXMgPSBjdXN0b21pemVNb2RlbChwcm9wZXJ0eSwgc2NoZW1hLCBtb2RlbCwgY29uZmlnLCB0aGlzLmluamVjdG9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmVzKSA/IHJlcyA6IFtyZXNdO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybU1vZGVsRm9yU2NoZW1hRGVmKHRoaXMuc2NoZW1hc1tuYW1lXSwgY3VzdG9taXplTW9kZWxzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0Rm9ybU1vZGVsRm9yU2NoZW1hRGVmKHNjaGVtYTogSU9wZW5BcGlTY2hlbWEsIGN1c3RvbWl6ZU1vZGVsczogRm9ybU1vZGVsQ3VzdG9taXplcldyYXApOiBEeW5hbWljRm9ybU1vZGVsIHtcclxuICAgICAgICBpZiAoIXNjaGVtYSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEucHJvcGVydGllcyB8fCB7fSk7XHJcbiAgICAgICAgY29uc3QgY29udHJvbHM6IER5bmFtaWNGb3JtTW9kZWwgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHAgb2Yga2V5cykge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHNjaGVtYS5wcm9wZXJ0aWVzW3BdO1xyXG4gICAgICAgICAgICBjb250cm9scy5wdXNoKC4uLnRoaXMuZ2V0Rm9ybUNvbnRyb2xNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgY3VzdG9taXplTW9kZWxzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb250cm9scy5maWx0ZXIodCA9PiBudWxsICE9PSB0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0Rm9ybUNvbnRyb2xNb2RlbHMocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHksIHNjaGVtYTogSU9wZW5BcGlTY2hlbWEsIGN1c3RvbWl6ZU1vZGVsczogRm9ybU1vZGVsQ3VzdG9taXplcldyYXApOiBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbFtdIHtcclxuICAgICAgICBjb25zdCAkZW51bSA9IHByb3BlcnR5Lml0ZW1zPy5lbnVtIHx8IHByb3BlcnR5LmVudW07XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoJGVudW0pIHx8IGlzU3RyaW5nV2l0aFZhbChwcm9wZXJ0eS5vcHRpb25zUGF0aCkgfHwgaXNTdHJpbmdXaXRoVmFsKHByb3BlcnR5LmVuZHBvaW50KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY3VzdG9taXplTW9kZWxzKHByb3BlcnR5LCBzY2hlbWEsIER5bmFtaWNTZWxlY3RNb2RlbCwgdGhpcy5nZXRGb3JtU2VsZWN0Q29uZmlnKHByb3BlcnR5LCBzY2hlbWEpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3dpdGNoIChwcm9wZXJ0eS50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcclxuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICAgICAgICBjYXNlIFwiaW50ZWdlclwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbWl6ZU1vZGVscyhwcm9wZXJ0eSwgc2NoZW1hLCBEeW5hbWljSW5wdXRNb2RlbCwgdGhpcy5nZXRGb3JtSW5wdXRDb25maWcocHJvcGVydHksIHNjaGVtYSkpO1xyXG4gICAgICAgICAgICBjYXNlIFwidGV4dGFyZWFcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdXN0b21pemVNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgRHluYW1pY1RleHRBcmVhTW9kZWwsIHRoaXMuZ2V0Rm9ybVRleHRhcmVhQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpKTtcclxuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdXN0b21pemVNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgRHluYW1pY0NoZWNrYm94TW9kZWwsIHRoaXMuZ2V0Rm9ybUNoZWNrYm94Q29uZmlnKHByb3BlcnR5LCBzY2hlbWEpKTtcclxuICAgICAgICAgICAgY2FzZSBcImFycmF5XCI6XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkuaXRlbXM/LiRyZWYgfHwgcHJvcGVydHkuJHJlZikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXN0b21pemVNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgRHluYW1pY0Zvcm1BcnJheU1vZGVsLCB0aGlzLmdldEZvcm1BcnJheUNvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hLCBjdXN0b21pemVNb2RlbHMpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbWl6ZU1vZGVscyhwcm9wZXJ0eSwgc2NoZW1hLCBEeW5hbWljSW5wdXRNb2RlbCwgdGhpcy5nZXRGb3JtSW5wdXRDb25maWcocHJvcGVydHksIHNjaGVtYSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiZmlsZVwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbWl6ZU1vZGVscyhwcm9wZXJ0eSwgc2NoZW1hLCBEeW5hbWljRmlsZVVwbG9hZE1vZGVsLCB0aGlzLmdldEZvcm1VcGxvYWRDb25maWcocHJvcGVydHksIHNjaGVtYSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJvcGVydHkuJHJlZikge1xyXG4gICAgICAgICAgICByZXR1cm4gY3VzdG9taXplTW9kZWxzKHByb3BlcnR5LCBzY2hlbWEsIER5bmFtaWNGb3JtR3JvdXBNb2RlbCwgdGhpcy5nZXRGb3JtR3JvdXBDb25maWcocHJvcGVydHksIHNjaGVtYSwgY3VzdG9taXplTW9kZWxzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGb3JtQ29udHJvbENvbmZpZyhwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSwgc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSk6IER5bmFtaWNGb3JtVmFsdWVDb250cm9sTW9kZWxDb25maWc8YW55PiB7XHJcbiAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMuZ2V0VmFsaWRhdG9ycyhwcm9wZXJ0eSwgc2NoZW1hKTtcclxuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2VzID0gT2JqZWN0LmtleXModmFsaWRhdG9ycykucmVkdWNlKChyZXMsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICByZXNba2V5XSA9IGBlcnJvci4ke2tleX1gO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0sIHt9KTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpZDogcHJvcGVydHkuaWQsXHJcbiAgICAgICAgICAgIGxhYmVsOiBPYmplY3RVdGlscy5pc1N0cmluZyhwcm9wZXJ0eS5sYWJlbCkgPyBwcm9wZXJ0eS5sYWJlbCA6IHByb3BlcnR5LmlkLFxyXG4gICAgICAgICAgICBoaWRkZW46IHByb3BlcnR5LmhpZGRlbixcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IHByb3BlcnR5LmRpc2FibGVkLFxyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLFxyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2VzLFxyXG4gICAgICAgICAgICBhZGRpdGlvbmFsOiBPYmplY3QuYXNzaWduKHt9LCBwcm9wZXJ0eSlcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZvcm1BcnJheUNvbmZpZyhwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSwgc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSwgY3VzdG9taXplTW9kZWxzOiBGb3JtTW9kZWxDdXN0b21pemVyV3JhcCk6IER5bmFtaWNGb3JtQXJyYXlNb2RlbENvbmZpZyB7XHJcbiAgICAgICAgY29uc3QgcmVmID0gcHJvcGVydHkuaXRlbXM/LiRyZWYgfHwgcHJvcGVydHkuJHJlZiB8fCBcIlwiO1xyXG4gICAgICAgIGNvbnN0IHN1YlNjaGVtYSA9IHRoaXMuc2NoZW1hc1tyZWYuc3BsaXQoXCIvXCIpLnBvcCgpXTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih0aGlzLmdldEZvcm1Db250cm9sQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpLCB7Z3JvdXBGYWN0b3J5OiAoKSA9PiB0aGlzLmdldEZvcm1Nb2RlbEZvclNjaGVtYURlZihzdWJTY2hlbWEsIGN1c3RvbWl6ZU1vZGVscyl9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGb3JtR3JvdXBDb25maWcocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHksIHNjaGVtYTogSU9wZW5BcGlTY2hlbWEsIGN1c3RvbWl6ZU1vZGVsczogRm9ybU1vZGVsQ3VzdG9taXplcldyYXApOiBEeW5hbWljRm9ybUdyb3VwTW9kZWxDb25maWcge1xyXG4gICAgICAgIGNvbnN0IHJlZiA9IHByb3BlcnR5LiRyZWYgfHwgXCJcIjtcclxuICAgICAgICBjb25zdCBzdWJTY2hlbWEgPSB0aGlzLnNjaGVtYXNbcmVmLnNwbGl0KFwiL1wiKS5wb3AoKV07XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24odGhpcy5nZXRGb3JtQ29udHJvbENvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hKSwge2dyb3VwOiB0aGlzLmdldEZvcm1Nb2RlbEZvclNjaGVtYURlZihzdWJTY2hlbWEsIGN1c3RvbWl6ZU1vZGVscyl9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGb3JtSW5wdXRDb25maWcocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHksIHNjaGVtYTogSU9wZW5BcGlTY2hlbWEpOiBEeW5hbWljSW5wdXRNb2RlbENvbmZpZyB7XHJcbiAgICAgICAgbGV0IGlucHV0VHlwZSA9IFN0cmluZ1V0aWxzLmhhcyhwcm9wZXJ0eS5pZCwgXCJwYXNzd29yZFwiLCBcIlBhc3N3b3JkXCIpID8gXCJwYXNzd29yZFwiIDogKHByb3BlcnR5Lml0ZW1zPy50eXBlIHx8IHByb3BlcnR5LnR5cGUpO1xyXG4gICAgICAgIHN3aXRjaCAoaW5wdXRUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XHJcbiAgICAgICAgICAgICAgICBpbnB1dFR5cGUgPSBcImNoZWNrYm94XCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInRleHRhcmVhXCI6XHJcbiAgICAgICAgICAgICAgICBpbnB1dFR5cGUgPSBcInRleHRhcmVhXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImludGVnZXJcIjpcclxuICAgICAgICAgICAgICAgIGlucHV0VHlwZSA9IFwibnVtYmVyXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3ViID0gcHJvcGVydHkudHlwZSA9PSBcImFycmF5XCIgPyBwcm9wZXJ0eS5pdGVtcyB8fCBwcm9wZXJ0eSA6IHByb3BlcnR5O1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1Db250cm9sQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dFR5cGUsXHJcbiAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU6IHByb3BlcnR5LmF1dG9Db21wbGV0ZSB8fCBcIm9mZlwiLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IHByb3BlcnR5LnR5cGUgPT0gXCJhcnJheVwiLFxyXG4gICAgICAgICAgICAgICAgYWNjZXB0OiBPYmplY3RVdGlscy5pc1N0cmluZyhwcm9wZXJ0eS5hY2NlcHQpID8gcHJvcGVydHkuYWNjZXB0IDogbnVsbCxcclxuICAgICAgICAgICAgICAgIG1hc2s6IE9iamVjdFV0aWxzLmlzU3RyaW5nKHByb3BlcnR5Lm1hc2spID8gcHJvcGVydHkubWFzayA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiBPYmplY3RVdGlscy5pc1N0cmluZyhwcm9wZXJ0eS5wYXR0ZXJuKSA/IHByb3BlcnR5LnBhdHRlcm4gOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3RlcDogaXNOYU4oc3ViLnN0ZXApID8gKGlzTmFOKHByb3BlcnR5LnN0ZXApID8gMSA6IHByb3BlcnR5LnN0ZXApIDogc3ViLnN0ZXAsXHJcbiAgICAgICAgICAgICAgICBtaW46IGlzTmFOKHN1Yi5taW5pbXVtKSA/IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSIDogc3ViLm1pbmltdW0sXHJcbiAgICAgICAgICAgICAgICBtYXg6IGlzTmFOKHN1Yi5tYXhpbXVtKSA/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIDogc3ViLm1heGltdW0sXHJcbiAgICAgICAgICAgICAgICBtaW5MZW5ndGg6IGlzTmFOKHN1Yi5taW5MZW5ndGgpID8gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIgOiBzdWIubWluTGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoOiBpc05hTihzdWIubWF4TGVuZ3RoKSA/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIDogc3ViLm1heExlbmd0aCxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Rm9ybVRleHRhcmVhQ29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKTogRHluYW1pY1RleHRBcmVhTW9kZWxDb25maWcge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1Db250cm9sQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb2xzOiBwcm9wZXJ0eS5jb2xzIHx8IG51bGwsXHJcbiAgICAgICAgICAgICAgICByb3dzOiBwcm9wZXJ0eS5yb3dzIHx8IDEwLFxyXG4gICAgICAgICAgICAgICAgd3JhcDogcHJvcGVydHkud3JhcCB8fCBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZTogcHJvcGVydHkuYXV0b0NvbXBsZXRlIHx8IFwib2ZmXCIsXHJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogcHJvcGVydHkudHlwZSA9PSBcImFycmF5XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Rm9ybVNlbGVjdENvbmZpZyhwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSwgc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSk6IER5bmFtaWNTZWxlY3RNb2RlbENvbmZpZzxhbnk+IHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtQ29udHJvbENvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hKSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5nZXRGb3JtU2VsZWN0T3B0aW9ucyhwcm9wZXJ0eSwgc2NoZW1hKSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBwcm9wZXJ0eS50eXBlID09IFwiYXJyYXlcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGb3JtQ2hlY2tib3hDb25maWcocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHksIHNjaGVtYTogSU9wZW5BcGlTY2hlbWEpOiBEeW5hbWljQ2hlY2tib3hNb2RlbENvbmZpZyB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUNvbnRyb2xDb25maWcocHJvcGVydHksIHNjaGVtYSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU6IHByb3BlcnR5LmluZGV0ZXJtaW5hdGUgPT09IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIHRyYW5zbGF0ZU9wdGlvbnMob3B0aW9uczogRHluYW1pY0Zvcm1PcHRpb25Db25maWc8YW55PltdKTogUHJvbWlzZTxEeW5hbWljRm9ybU9wdGlvbkNvbmZpZzxhbnk+W10+IHtcclxuICAgICAgICBpZiAoIW9wdGlvbnMpIHJldHVybiBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbi5sYWJlbCA9IGF3YWl0IHRoaXMubGFuZ3VhZ2UuZ2V0VHJhbnNsYXRpb24ob3B0aW9uLmxhYmVsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldEZvcm1TZWxlY3RPcHRpb25zKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKSB7XHJcbiAgICAgICAgY29uc3QgJGVudW0gPSBwcm9wZXJ0eS5pdGVtcz8uZW51bSB8fCBwcm9wZXJ0eS5lbnVtO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KCRlbnVtKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZvcm1TZWxlY3RTdWJqZWN0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAkZW51bS5tYXAodmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gcHJvcGVydHkudHJhbnNsYXRhYmxlID8gYCR7cHJvcGVydHkuaWR9LiR7dmFsdWV9YCA6IGAke3ZhbHVlfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZSwgbGFiZWx9O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVPcHRpb25zKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nV2l0aFZhbChwcm9wZXJ0eS5vcHRpb25zUGF0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb3JtU2VsZWN0U3ViamVjdCgoZm9ybU1vZGVsLCBjb250cm9sLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBhdGggPSBwcm9wZXJ0eS5vcHRpb25zUGF0aDtcclxuICAgICAgICAgICAgICAgIGxldCB0YXJnZXQgPSBjb250cm9sO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIiRyb290XCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKDUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICh0YXJnZXQucGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHBhdGguc3RhcnRzV2l0aChcIi5cIikpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHIoMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC5wYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IE9iamVjdFV0aWxzLmdldFZhbHVlKHRhcmdldC52YWx1ZSwgcGF0aC5yZXBsYWNlKC9cXCRpeC9naSwgaW5kZXgpKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoIU9iamVjdFV0aWxzLmlzQXJyYXkodmFsdWUpID8gW10gOiB2YWx1ZSkubWFwKHZhbHVlID0+ICh7dmFsdWUsIGxhYmVsOiB2YWx1ZX0pKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZU9wdGlvbnMob3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IEZvcm1TZWxlY3RTdWJqZWN0KGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hcGkuY2FjaGVbcHJvcGVydHkuZW5kcG9pbnRdID0gdGhpcy5hcGkuY2FjaGVbcHJvcGVydHkuZW5kcG9pbnRdIHx8IHRoaXMuYXBpLmxpc3QocHJvcGVydHkuZW5kcG9pbnQsIHRoaXMuYXBpLm1ha2VMaXN0UGFyYW1zKDEsIC0xKSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVtcy5tYXAoaSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogaS5pZCB8fCBpLl9pZCwgbGFiZWw6IGlbcHJvcGVydHkubGFiZWxGaWVsZF0gfHwgaS5sYWJlbCB8fCBpLmlkIHx8IGkuX2lkfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChhd2FpdCB0aGlzLmFwaS5jYWNoZVtwcm9wZXJ0eS5lbmRwb2ludF0pLm1hcCh0ID0+IE9iamVjdC5hc3NpZ24oe30sIHQpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlT3B0aW9ucyhvcHRpb25zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0Rm9ybVVwbG9hZENvbmZpZyhwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSwgc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSk6IER5bmFtaWNGaWxlVXBsb2FkTW9kZWxDb25maWcge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuYXBpLnVybChwcm9wZXJ0eS51cmwgfHwgXCJhc3NldHNcIik7XHJcbiAgICAgICAgY29uc3Qge2FjY2VwdCwgYXV0b1VwbG9hZCwgbWF4U2l6ZSwgbWluU2l6ZSwgcmVtb3ZlVXJsLCBzaG93RmlsZUxpc3R9ID0gcHJvcGVydHk7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24odGhpcy5nZXRGb3JtQ29udHJvbENvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hKSwge1xyXG4gICAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICAgIGFjY2VwdCxcclxuICAgICAgICAgICAgYXV0b1VwbG9hZCxcclxuICAgICAgICAgICAgbWF4U2l6ZSxcclxuICAgICAgICAgICAgbWluU2l6ZSxcclxuICAgICAgICAgICAgcmVtb3ZlVXJsLFxyXG4gICAgICAgICAgICBzaG93RmlsZUxpc3RcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0VmFsaWRhdG9ycyhwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSwgc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSk6IER5bmFtaWNWYWxpZGF0b3JzQ29uZmlnIHtcclxuICAgICAgICBjb25zdCB2YWxpZGF0b3JzOiBEeW5hbWljVmFsaWRhdG9yc0NvbmZpZyA9IHt9O1xyXG4gICAgICAgIGlmIChPYmplY3RVdGlscy5pc0FycmF5KHNjaGVtYS5yZXF1aXJlZCkgJiYgc2NoZW1hLnJlcXVpcmVkLmluZGV4T2YocHJvcGVydHkuaWQpID49IDApIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5yZXF1aXJlZCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWRkUHJvcGVydHlWYWxpZGF0b3JzKHZhbGlkYXRvcnMsIHByb3BlcnR5KTtcclxuICAgICAgICB0aGlzLmFkZEl0ZW1zVmFsaWRhdG9ycyh2YWxpZGF0b3JzLCBwcm9wZXJ0eS5pdGVtcyk7XHJcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFkZFByb3BlcnR5VmFsaWRhdG9ycyh2YWxpZGF0b3JzOiBEeW5hbWljVmFsaWRhdG9yc0NvbmZpZywgcHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHkpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXByb3BlcnR5KSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFpc05hTihwcm9wZXJ0eS5taW5MZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMubWluTGVuZ3RoID0gcHJvcGVydHkubWluTGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzTmFOKHByb3BlcnR5Lm1heExlbmd0aCkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5tYXhMZW5ndGggPSBwcm9wZXJ0eS5tYXhMZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNOYU4ocHJvcGVydHkubWluaW11bSkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5taW4gPSBwcm9wZXJ0eS5taW5pbXVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzTmFOKHByb3BlcnR5Lm1heGltdW0pKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMubWF4ID0gcHJvcGVydHkubWF4aW11bTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3dpdGNoIChwcm9wZXJ0eS5mb3JtYXQpIHtcclxuICAgICAgICAgICAgY2FzZSBcImVtYWlsXCI6XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLmVtYWlsID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYWRkSXRlbXNWYWxpZGF0b3JzKHZhbGlkYXRvcnM6IER5bmFtaWNWYWxpZGF0b3JzQ29uZmlnLCBpdGVtczogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghaXRlbXMpIHJldHVybjtcclxuICAgICAgICBpZiAoIWlzTmFOKGl0ZW1zLm1pbkxlbmd0aCkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5pdGVtc01pbkxlbmd0aCA9IGl0ZW1zLm1pbkxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc05hTihpdGVtcy5tYXhMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMuaXRlbXNNYXhMZW5ndGggPSBpdGVtcy5tYXhMZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNOYU4oaXRlbXMubWluaW11bSkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5pdGVtc01pblZhbHVlID0gaXRlbXMubWluaW11bTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc05hTihpdGVtcy5tYXhpbXVtKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLml0ZW1zTWF4VmFsdWUgPSBpdGVtcy5tYXhpbXVtO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import { ReflectUtils, ObjectUtils, StringUtils, OpenApiService, TOASTER_SERVICE, ObservableUtils, EventsService, NgxUtilsModule } from '@stemy/ngx-utils';
2
2
  import { Subject, Subscription } from 'rxjs';
3
3
  import { __awaiter } from 'tslib';
4
- import { EventEmitter, Injectable, Directive, Inject, ChangeDetectorRef, ElementRef, Renderer2, Input, Output, HostBinding, HostListener, QueryList, Component, ChangeDetectionStrategy, ContentChildren, ViewChildren, ViewChild, forwardRef, ComponentFactoryResolver, ViewContainerRef, NgModule } from '@angular/core';
4
+ import { EventEmitter, Injectable, Inject, Injector, Directive, ChangeDetectorRef, ElementRef, Renderer2, Input, Output, HostBinding, HostListener, QueryList, Component, ChangeDetectionStrategy, ContentChildren, ViewChildren, ViewChild, forwardRef, ComponentFactoryResolver, ViewContainerRef, NgModule } from '@angular/core';
5
5
  import { FormGroup, FormArray, NgForm, FormsModule, ReactiveFormsModule, NG_VALIDATORS } from '@angular/forms';
6
6
  import { DynamicFormArrayModel as DynamicFormArrayModel$1, DynamicFormService as DynamicFormService$1, DynamicSelectModel, DynamicFormGroupModel, DynamicInputModel, DynamicFileUploadModel, DynamicCheckboxModel, DynamicTextAreaModel, DynamicFormComponentService, DynamicFormValidationService, DynamicFormComponent, DynamicTemplateDirective, DynamicFormArrayComponent, DynamicFormLayoutService, DynamicFormControlContainerComponent, DYNAMIC_FORM_CONTROL_TYPE_ARRAY, DynamicFormRelationService, DynamicFormGroupComponent, DYNAMIC_VALIDATORS } from '@ng-dynamic-forms/core';
7
7
  import { first } from 'rxjs/operators';
@@ -229,9 +229,10 @@ class DynamicFormArrayModel extends DynamicFormArrayModel$1 {
229
229
  }
230
230
 
231
231
  class DynamicFormService extends DynamicFormService$1 {
232
- constructor(cs, vs, openApi) {
232
+ constructor(cs, vs, openApi, injector) {
233
233
  super(cs, vs);
234
234
  this.openApi = openApi;
235
+ this.injector = injector;
235
236
  this.onDetectChanges = new EventEmitter();
236
237
  }
237
238
  get api() {
@@ -398,7 +399,7 @@ class DynamicFormService extends DynamicFormService$1 {
398
399
  const model = new modelType(config);
399
400
  if (!ObjectUtils.isFunction(customizeModel))
400
401
  return [model];
401
- const res = customizeModel(property, schema, model, config);
402
+ const res = customizeModel(property, schema, model, config, this.injector);
402
403
  return Array.isArray(res) ? res : [res];
403
404
  };
404
405
  return this.getFormModelForSchemaDef(this.schemas[name], customizeModels);
@@ -640,7 +641,8 @@ DynamicFormService.decorators = [
640
641
  DynamicFormService.ctorParameters = () => [
641
642
  { type: DynamicFormComponentService },
642
643
  { type: DynamicFormValidationService },
643
- { type: OpenApiService }
644
+ { type: OpenApiService, decorators: [{ type: Inject, args: [OpenApiService,] }] },
645
+ { type: Injector, decorators: [{ type: Inject, args: [Injector,] }] }
644
646
  ];
645
647
 
646
648
  class AsyncSubmitDirective {