@churchillliving/se-ui-toolkit 6.54.616 → 6.54.617
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.
|
@@ -716,7 +716,7 @@ function setLabelHyperlink(item, record, keys, allData = [], matchedKey = '') {
|
|
|
716
716
|
item.label.labelControl.hyperlink &&
|
|
717
717
|
item.label.labelControl.hyperlink.params) {
|
|
718
718
|
const paramKeys = Object.keys(item.label.labelControl.hyperlink.params);
|
|
719
|
-
const link = item.label.labelControl.
|
|
719
|
+
const link = item.label.labelControl.orignalLink;
|
|
720
720
|
if (item.label.labelControl.hyperlink.link) {
|
|
721
721
|
item.label.labelControl.hyperlink.link = setHyperlink(keys, record, link, paramKeys, item.label.labelControl.hyperlink.params, allData);
|
|
722
722
|
}
|
|
@@ -724,6 +724,7 @@ function setLabelHyperlink(item, record, keys, allData = [], matchedKey = '') {
|
|
|
724
724
|
}
|
|
725
725
|
export function setHyperlink(keys, record, link, paramKeys, params, allData = []) {
|
|
726
726
|
let newLink = link;
|
|
727
|
+
let originalLink = link;
|
|
727
728
|
record = objConvertToLower(record);
|
|
728
729
|
paramKeys.forEach((paramkey) => {
|
|
729
730
|
const param = '{{' + paramkey.toLowerCase() + '}}';
|
|
@@ -753,7 +754,9 @@ export function setHyperlink(keys, record, link, paramKeys, params, allData = []
|
|
|
753
754
|
});
|
|
754
755
|
});
|
|
755
756
|
}
|
|
756
|
-
|
|
757
|
+
if (newLink.includes(paramValue)) {
|
|
758
|
+
newLink = originalLink.replace(paramValue, String(propValue));
|
|
759
|
+
}
|
|
757
760
|
}
|
|
758
761
|
else {
|
|
759
762
|
// get param value from api response, if param key exists in it
|
|
@@ -1119,4 +1122,4 @@ export function calendarMinMaxValue(item, value, index) {
|
|
|
1119
1122
|
return validation;
|
|
1120
1123
|
}
|
|
1121
1124
|
/* #endregion */
|
|
1122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzdDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxHQU1WLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQiw0QkFBNEI7QUFFNUI7Ozs7Ozs7R0FPRztBQUNGLElBQUksV0FBVyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDckMsSUFBSSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNuQyxJQUFJLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBQ3RDLElBQUksU0FBUyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDbkMsSUFBSSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNyQyxJQUFJLGVBQWUsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBRTFDLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxXQUFnQjtJQUNqRCxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3JDLENBQUM7QUFDRCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BDLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBUTtJQUN4QyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUMs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LGFBQWEsQ0FBQztLQUNuQztBQUNILENBQUM7QUFDTCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFBUyxFQUFDLEtBQVUsRUFBRSxLQUFLO0lBQzdELElBQUksVUFBVSxHQUFXLE9BQU8sQ0FBQztJQUNqQyxJQUFJLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdELElBQUksV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBQztRQUM5QyxVQUFVLEdBQUcsU0FBUyxDQUFDO0tBQ3hCO1NBQ0ksSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFDO1FBQ25ELFVBQVUsR0FBRyxTQUFTLENBQUM7S0FDeEI7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBQ0QsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IElEaWN0aW9uYXJ5LCBJRmlsdGVyRGljdGlvbmFyeSB9IGZyb20gJy4uL21vZGVscy9jb21tb24ubW9kZWwnO1xuaW1wb3J0IHtcbiAgRUZvcm1hdFR5cGUsXG4gIEVGb3JtQ29udHJvbCxcbiAgRUh5cGVybGluayxcbiAgRU1hdGNoTW9kZSxcbiAgRU9wZXJhdG9yLFxuICBJRHluYW1pY0NhcmQsXG4gIElEeW5hbWljRm9ybSxcbiAgSUZvcm1hdCxcbiAgSUZvcm1GaWVsZCxcbiAgSUZvcm1TZWN0aW9uLFxufSBmcm9tICcuLi9tb2RlbHMvZm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBhZGRHbG9iYWxGaWx0ZXIsIEVHcmlkQ29sdW1uVHlwZSwgSUdsb2JhbEZpbHRlciwgSUdyaWRDb2x1bW4sIElHcmlkRmlsdGVyIH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQubW9kZWwnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKiAjcmVnaW9uIHB1YmxpYyBtZXRob2RzICovXG5cbi8qKlxuICpcbiAqIEBwYXJhbSB2YWx1ZSA6IGFueVxuICogRnVuY3Rpb24gcmVjZWl2ZXMgdGhlIHZhbHVlIGFuZCBleHBlY3RzIHRoZSB2YWx1ZSB0byBiZSBmb3JtYXRlZC5cbiAqIERvIG5vdCB1c2UgZmF0IGFycm93IGZ1bmN0aW9uIGFzIHRoZXkgZG8gbm90IHByZXNlcnZlIHRoZSBjb250ZXh0LlxuICogdGhpcy52YWx1ZSByZWZlcnMgdG8gdGhlIHZhbHVlIG9mIElGb3JtRmllbGQgT2JqZWN0XG4gKiBNb2RpZnkgdGhpcy52YWx1ZSBkaXJlY3RseSB0byByZWNlaXZlIGVmZmVjdFxuICovXG4gdmFyIHNwbGl0U2NyZWVuID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciBmb3Jtc3RhdGUgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIGNvbHVtbnNTdGF0ZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgY2FyZFN0YXRlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciByb3V0ZUNoYW5nZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgZmlsdGVyQnRuQ2hhbmdlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlQ29sdW1uc1N0YXRlKHBhZ2VTZXR0aW5nOiBhbnkpIHtcbiAgY29sdW1uc1N0YXRlLm5leHQocGFnZVNldHRpbmcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25Db2x1bW5zU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBjb2x1bW5zU3RhdGUuYXNPYnNlcnZhYmxlKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gb25TY3JlZW5TcGxpdENoYW5nZSAoKXtcbiAgcmV0dXJuIHNwbGl0U2NyZWVuLmFzT2JzZXJ2YWJsZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZVNwbGl0U2NyZWVuKG1lbnVJdGVtKXtcbiAgc3BsaXRTY3JlZW4ubmV4dCh7b3JpZ0NvbXBvbmVudDogbWVudUl0ZW0ub3JpZ0NvbXBvbmVudCwgcGFuZWxDb21wb25lbnQ6IG1lbnVJdGVtPy5jb21wb25lbnQsIGNvbmZpZ0RhdGE6bWVudUl0ZW0/LmRhdGE/LmRhdGF9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUR5bmFtaWNGb3JtU3RhdGUoaWQ6IGFueSwgZGF0YTogYW55LCBsb2FkQ29tcG9uZW50PzogYW55KSB7XG4gIGZvcm1zdGF0ZS5uZXh0KHsgaWQsIGRhdGEsIGxvYWRDb21wb25lbnQgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkR5bmFtaWNGb3JtU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBmb3Jtc3RhdGUuYXNPYnNlcnZhYmxlKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gb25HbG9iYWxGaWx0ZXJDb250cm9sUmlnaHRCdG4oc3RhdGVWYWx1ZSkge1xuICBmaWx0ZXJCdG5DaGFuZ2UubmV4dChzdGF0ZVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uR2xvYmFsRmlsdGVyQ29udHJvbFJpZ2h0QnRuU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBmaWx0ZXJCdG5DaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvblJvdXRlQ2hhbmdlRXZlbnQoKSB7XG4gIHJldHVybiByb3V0ZUNoYW5nZS5hc09ic2VydmFibGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdXRlQ2hhbmdlRXZlbnQoKSB7XG4gIHJvdXRlQ2hhbmdlLm5leHQoKTtcbn1cblxuIGV4cG9ydCBmdW5jdGlvbiBvbkR5bmFtaWNDYXJkU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBjYXJkU3RhdGUuYXNPYnNlcnZhYmxlKCk7XG4gfVxuXG4gZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUR5bmFtaWNDYXJkU3RhdGUoZGF0YTogYW55KSB7XG4gIGNhcmRTdGF0ZS5uZXh0KHsgZGF0YSB9KTtcbn1cblxuIGV4cG9ydCBmdW5jdGlvbiBjbG9zZUlGcmFtZSgpe1xuICBsZXQgY2xvc2UgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLWRpYWxvZy1oZWFkZXItaWNvbicpYXMgSFRNTEVsZW1lbnRcbiAgaWYoY2xvc2UpIHtcbiAgICBjbG9zZS5jbGljaygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0RlY2ltYWwodmFsdWU6IGFueSk6IGFueSB7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlLnRvU3RyaW5nKCkpLnRvRml4ZWQoMik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQm9vbGVhbih2YWx1ZTogYW55KSB7XG4gIHJldHVybiB2YWx1ZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3knID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TaG9ydERhdGUodmFsdWU6IGFueSwgZm9ybWF0PzogSUZvcm1hdCkge1xuICBpZiAodmFsdWUgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgaWYgKFxuICAgICAgZm9ybWF0ICYmXG4gICAgICAoZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLkxPTkdEQVRFIHx8XG4gICAgICAgIGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5NRURJVU1EQVRFKVxuICAgICkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSwgJ01NL2RkL3l5eXknLCAnZW4tVVMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU2hvcnREYXRlVGltZSh2YWx1ZTogYW55LCBmb3JtYXQ/OiBJRm9ybWF0KSB7XG4gIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJycgJiYgdmFsdWU/LnRvU3RyaW5nKCkgIT0gXCJJbnZhbGlkIERhdGVcIikge1xuICAgIGlmIChcbiAgICAgIGZvcm1hdCAmJlxuICAgICAgKGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5MT05HREFURSB8fFxuICAgICAgICBmb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuTUVESVVNREFURSlcbiAgICApIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZvcm1hdERhdGUodmFsdWUsICdNTS9kZC95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERpYWxvZ0RhdGEoY29sdW1uczpJR3JpZENvbHVtbltdLCBmaWVsZE5hbWU6c3RyaW5nLCB2YWx1ZTphbnkpe1xuICBjb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pPT57XG4gICAgICBpZihjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSAmJiBjb2x1bW4uY29tcG9uZW50KXtcbiAgICAgICAgbGV0IGtleXM9T2JqZWN0LmtleXModmFsdWUpO1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleSk9PntcbiAgICAgICAgICBjb2x1bW4uZGF0YS5kYXRhPXsuLi5jb2x1bW4uZGF0YT8uZGF0YSwgW2tleV06dmFsdWVba2V5XX07XG4gICAgICAgIH0pXG4gICAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1RyaW0odGV4dDogYW55KSB7XG4gIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGV4dC50cmltKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1hdGNoS2V5KG9iajogYW55LCBwcm9wTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFvYmogfHwgIXByb3BOYW1lKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgbGV0IG1hdGNoZWRLZXkgPSAnJztcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIG9iai5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IGFueVtdID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgIGlmICghbWF0Y2hlZEtleSB8fCBtYXRjaGVkS2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBtYXRjaGVkS2V5ID0ga2V5cy5maW5kKFxuICAgICAgICAgICh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHByb3BOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBrZXlzOiBhbnlbXSA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgbWF0Y2hlZEtleSA9IGtleXMuZmluZCgoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVkS2V5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Rm9ybUZpZWxkVmFsdWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkLCB2YWx1ZTogYW55KTogYW55IHtcbiAgbGV0IGZvcm1hdHRlZFZhbHVlOiBhbnkgPSB2YWx1ZTtcbiAgaWYgKGZvcm1GaWVsZC5mb3JtYXQpIHtcbiAgICBzd2l0Y2ggKGZvcm1GaWVsZC5mb3JtYXQudHlwZSkge1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5ERUNJTUFMOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvRGVjaW1hbCh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5CT09MRUFOX1lOOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5TSE9SVERBVEU6XG4gICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdG9TaG9ydERhdGUodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZvcm1hdFR5cGUuQ1VTVE9NOlxuICAgICAgICBpZiAoZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0dGVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0dGVkVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGb3JtRmllbGQgKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZvcm1GaWVsZE9iajogSUZvcm1GaWVsZFxuKSB7XG4gIHJldHVybiBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIHJldHVybiAoc2VjdGlvbi5maWVsZHMgPSBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZvcm1GaWVsZE9iai5maWVsZD8udG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAoZm9ybUZpZWxkLmxhYmVsICYmIGZvcm1GaWVsZC5sYWJlbCA9PT0gZm9ybUZpZWxkT2JqLmxhYmVsKVxuICAgICAgKSB7XG4gICAgICAgIGZvcm1GaWVsZCA9IGZvcm1GaWVsZE9iajtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtRmllbGQ7XG4gICAgfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGlua0NvbXBvbmVudERhdGEgKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGxhYmVsOiBzdHJpbmcsXG4gIGRhdGE6IGFueVxuKXtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgY29uc3QgZmllbGQgPSBzZWN0aW9uLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQubGFiZWwgJiYgKHR5cGVvZiAoZmllbGQubGFiZWwpID09IFwib2JqZWN0XCIgPyBmaWVsZC5sYWJlbD8ubmFtZSA9PSBsYWJlbCA6IGZpZWxkLmxhYmVsID09PSBsYWJlbCkpXG4gICAgaWYgKGZpZWxkICYmIHR5cGVvZiAoZmllbGQubGFiZWwpID09IFwib2JqZWN0XCIgJiYgZmllbGQubGFiZWwubGFiZWxDb250cm9sPy5oeXBlcmxpbmspIHtcbiAgICAgIGZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zID0gZGF0YTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkICYmIGZpZWxkLmh5cGVybGluaykge1xuICAgICAgZmllbGQuaHlwZXJsaW5rLnBhcmFtcyA9IGRhdGE7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEF1dG9Db21wbGV0ZURhdGEoXG4gIHZhbHVlczogYW55W10sXG4gIHVuaXF1ZUlkOiBhbnksXG4gIGxhYmVsS2V5OiBzdHJpbmcsXG4gIFZhbHVlS2V5OiBzdHJpbmcsXG4pe1xuICBpZih2YWx1ZXM/Lmxlbmd0aCA+IDApe1xuICAgIHZhbHVlcyA9IHZhbHVlcz8ubWFwKChyb3dWYWx1ZSkgPT4gKHtbbGFiZWxLZXldOiByb3dWYWx1ZSwgW1ZhbHVlS2V5XTogdW5pcXVlSWR9KSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldExvb2t1cERhdGEoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgZGF0YTogYW55XG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb246IElGb3JtU2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLm1hcCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGEgJiZcbiAgICAgICAgICBkYXRhXG4gICAgICAgICkge1xuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtRmllbGQubG9va3VwQ29udHJvbCAmJiBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhICYmIGRhdGEpIHtcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybVNlY3Rpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2lkZWJhckxpbmtQYXJhbVZhbHVlcyhsaW5rOiBzdHJpbmcsIHBhcmFtczogYW55W10pOiBzdHJpbmcge1xuICBsZXQgbmV3TGluazogc3RyaW5nID0gbGluaztcbiAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoID4gMCkge1xuICAgIHBhcmFtcy5tYXAoKHBhcmFtKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSBwYXJhbS5uYW1lID8gJ3t7JyArIHBhcmFtLm5hbWUgKyAnfX0nIDogJyc7XG4gICAgICBpZiAobmV3TGluay5sb2NhbGVDb21wYXJlKHVybCkpIHtcbiAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHVybCwgJ2lnJyksIHRvVHJpbShwYXJhbS52YWx1ZSkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdMaW5rO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTmV3RmllbGRJbkZvcm0oZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSwgc2VjdGlvbk5hbWU6c3RyaW5nLCBmb3JtRmllbGQ6SUZvcm1GaWVsZCl7XG4gIGNvbnN0IHNlY3Rpb24gPSBkeW5hbWljRm9ybT8uZm9ybVNlY3Rpb25zPy5maW5kKChzZWN0aW9uKT0+IHNlY3Rpb24ubmFtZSA9PT0gc2VjdGlvbk5hbWUpO1xuICBpZihzZWN0aW9uKXtcbiAgICBzZWN0aW9uLmZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gIH1cbiAgcmV0dXJuIGR5bmFtaWNGb3JtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Rm9ybUZpZWxkcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmb3JtRmllbGRzOiBJRm9ybUZpZWxkW11cbikge1xuICByZXR1cm4gZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICByZXR1cm4gKHNlY3Rpb24uZmllbGRzID0gc2VjdGlvbi5maWVsZHMubWFwKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGxldCBtYXRjaGVkRmllbGQgPSBmb3JtRmllbGRzLmZpbmQoXG4gICAgICAgICh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGVkRmllbGQpIHtcbiAgICAgICAgZm9ybUZpZWxkID0gbWF0Y2hlZEZpZWxkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1GaWVsZDtcbiAgICB9KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsRmlsdGVycyhcbiAgZ2xvYmFsRmlsdGVyczogYWRkR2xvYmFsRmlsdGVyW10sXG4gIGZpZWxkOiBzdHJpbmcsXG4pIHtcbiAgbGV0IGZvcm1GaWVsZE9iajogYW55O1xuICBnbG9iYWxGaWx0ZXJzLm1hcCgoZmlsdGVyKT0+e1xuICAgIGlmIChmaWx0ZXIuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBmb3JtRmllbGRPYmogPSBmaWx0ZXI7XG4gICAgICB9XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkT2JqO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmb3JtQ29udHJvbDogRUZvcm1Db250cm9sXG4pOiBJRm9ybUZpZWxkW10ge1xuICBsZXQgZm9ybUZpZWxkczogSUZvcm1GaWVsZFtdID0gW107XG4gIGZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBmb3JtQ29udHJvbCkge1xuICAgICAgICBpZiAodHlwZW9mKGZvcm1GaWVsZC52YWx1ZSkgPT09ICdvYmplY3QnICYmIGZvcm1GaWVsZC52YWx1ZT8udGV4dCAmJiB0eXBlb2YoZm9ybUZpZWxkLnZhbHVlLnRleHQpID09PSAnc3RyaW5nJylcbiAgICAgICAge1xuICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtRmllbGQudmFsdWUudGV4dC50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIHR5cGVvZihmb3JtRmllbGQudmFsdWUpID09PSAnc3RyaW5nJylcbiAgICAgICAge1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1GaWVsZC52YWx1ZS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybUZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZChcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmaWVsZDogc3RyaW5nXG4pOiBJRm9ybUZpZWxkIHtcbiAgbGV0IGZvcm1GaWVsZE9iajogYW55O1xuICBmb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGZvcm1GaWVsZE9iaiA9IGZvcm1GaWVsZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBmb3JtRmllbGRPYmo7XG59XG5cbi8vIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIHJldHVybiBhIHZhbHVlIG9mIHRoZSBmaWVsZC4gSWYgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWUgaXMgdHJ1ZSBhbmQgZGlzcGxheUZpZWxkXG4vLyBleGlzdCBpbiB0aGUgZmllbGQgdGhlbiBhbHdheXMgcmV0dXJuIGEgZGlzcGxheUZpZWxkIHZhbHVlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZFZhbHVlKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlOmJvb2xlYW4gPSBmYWxzZVxuKSB7XG4gIGxldCB2YWx1ZTtcbiAgZm9yIChjb25zdCBzZWN0aW9uIG9mIGZvcm1TZWN0aW9ucyBhcyBhbnkpIHtcbiAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgbGV0IGlzVmFsaWQgPSB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0JyAmJiBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTE9PS1VQX0lOUFVUIHx8IGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQpICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZFxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSA9IGlzVmFsaWQgPyBmb3JtRmllbGQudmFsdWU/LnRleHQgOiBmb3JtRmllbGQudmFsdWU/LnZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gaXNWYWxpZFxuICAgICAgICAgICAgPyBmb3JtRmllbGQudmFsdWU/LnRleHRcbiAgICAgICAgICAgIDogdHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCcgJiYgZm9ybUZpZWxkLmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJiBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLk1VTFRJU0VMRUNUXG4gICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZT8udmFsdWVcbiAgICAgICAgICAgIDogZm9ybUZpZWxkLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkVmFsdWVBc1N0cmluZyhkeW5hbWljRm9ybTpJRHluYW1pY0Zvcm0sZmllbGQ6c3RyaW5nKTpzdHJpbmd7XG4gIGxldCB2YWx1ZTphbnkgPSBnZXRGb3JtRmllbGRWYWx1ZShkeW5hbWljRm9ybSxmaWVsZCwgdHJ1ZSk7XG4gIGlmICh2YWx1ZSl7XG4gICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgfVxuICAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VjdGlvbkZpZWxkVmFsdWUoXG4gIGZvcm1TZWN0aW9uczogSUZvcm1TZWN0aW9uW10sXG4gIGZpZWxkOiBzdHJpbmdcbikge1xuICBsZXQgZm9ybTogSUR5bmFtaWNGb3JtID0geyBmb3JtU2VjdGlvbnMgfTtcbiAgcmV0dXJuIGdldEZvcm1GaWVsZFZhbHVlKGZvcm0sIGZpZWxkLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNhdmVGb3JtVmFsdWVzKFxuICBmb3JtU2VjdGlvbnM6IElGb3JtU2VjdGlvbltdLFxuICB0YWJsZXM/OiBzdHJpbmdbXSxcbikge1xuICBsZXQgc2VjdGlvbkZpZWxkczogYW55O1xuICBsZXQgcmVzcG9uc2U6IGFueSA9IHt9O1xuICBpZiAodGFibGVzICYmIHRhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgdGFibGVzLmZvckVhY2goKHRhYmxlTmFtZSkgPT4ge1xuICAgICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzZWN0aW9uRmllbGRzID0gZm9ybVNlY3Rpb24uZmllbGRzPy5maWx0ZXIoeCA9PiB4LmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQVJEKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uaGVhZGVyRmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2VjdGlvbkZpZWxkcyA9IGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcz8uZmlsdGVyKHggPT4geC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICAgIH1cbiAgICAgICAgICBzZWN0aW9uRmllbGRzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhYmxlID0gZmllbGQudGFibGVzPy5tYXAoKHRhYmxlKSA9PiB0YWJsZS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgIGlmICh0YWJsZSAmJiB0YWJsZS5pbmNsdWRlcyh0YWJsZU5hbWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2VbdGFibGVOYW1lXSkge1xuICAgICAgICAgICAgICByZXNwb25zZVt0YWJsZU5hbWVdID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5maWVsZCAmJiBmaWVsZC5maWVsZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlW3RhYmxlTmFtZV1bZmllbGQuZmllbGRdID0gZm9ybWF0Rm9ybUZpZWxkQ1ZhbHVlKGZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlY3Rpb25GaWVsZHMgPSBmb3JtU2VjdGlvbi5maWVsZHM/LmZpbHRlcih4ID0+IHguY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBUkQpO1xuICAgICAgfVxuICAgICAgaWYgKGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWN0aW9uRmllbGRzID0gZm9ybVNlY3Rpb24uaGVhZGVyRmllbGRzPy5maWx0ZXIoeCA9PiB4LmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQVJEKTtcbiAgICAgIH1cbiAgICAgIHNlY3Rpb25GaWVsZHM/LmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIGlmIChmaWVsZC5maWVsZCAmJiBmaWVsZC5maWVsZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzcG9uc2VbZmllbGQuZmllbGRdID0gZm9ybWF0Rm9ybUZpZWxkQ1ZhbHVlKGZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTYXZlQ2FyZFZhbHVlcyhcbiAgZm9ybVNlY3Rpb25zOiBJRm9ybVNlY3Rpb25bXSxcbiAgdGFibGVzPzogc3RyaW5nW11cbikge1xuICBsZXQgdmFsdWVzOiBJRm9ybUZpZWxkW10gPSBbXTtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgc2VjdGlvbi5maWVsZHM/LmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCAmJiBmaWVsZC5jYXJkLmRhdGEpIHtcbiAgICAgICAgZmllbGQuY2FyZC5kYXRhLmZvckVhY2goKGNhcmREYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY2FyZERhdGEuZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChcbiAgICAgICAgICAgICAgc2V0U2F2ZUZvcm1WYWx1ZXMoY2FyZERhdGEuZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zLCB0YWJsZXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHMoZGF0YTogYW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtKSB7XG4gIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCAmJiBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgZGF0YS5mb3JFYWNoKChkYXRhUm93KSA9PiB7XG4gICAgICBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YVJvdywgZHluYW1pY0Zvcm0sIGRhdGEpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHNldEVkaXRGb3JtRmllbGRzSW5mbyhkYXRhLCBkeW5hbWljRm9ybSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlcihcbiAgZmllbGQ6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgbWF0Y2hNb2RlOiBFTWF0Y2hNb2RlID0gRU1hdGNoTW9kZS5FUVVBTFMsXG4gIG9wZXJhdG9yOiBFT3BlcmF0b3IgPSBFT3BlcmF0b3IuQU5ELFxuKSB7XG4gIGNvbnN0IGZpbHRlcjogYW55ID0ge1xuICAgIGZpZWxkOiBmaWVsZCxcbiAgICBtYXRjaE1vZGU6IG1hdGNoTW9kZSxcbiAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgdmFsdWU6IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgKHZhbHVlPy52YWx1ZSB8fCB2YWx1ZT8udGV4dCkgPyB2YWx1ZT8udmFsdWUgOiAodmFsdWUgfHwgdmFsdWUgPT0gJycpID8gdmFsdWUgOiBudWxsLFxuICB9O1xuICByZXR1cm4gZmlsdGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5kRmlsdGVyKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHNldEZpbHRlcihmaWVsZCwgdmFsdWUsIEVNYXRjaE1vZGUuRVFVQUxTLCBFT3BlcmF0b3IuQU5EKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JpZ0RhdGFGaWVsZFZhbHVlKGRhdGE6IGFueSwgcHJvcE5hbWU6IHN0cmluZyk6IGFueSB7XG4gIGxldCB2YWx1ZTogYW55O1xuICBpZiAoZGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBnZXRQcm9wZXJ0eVZhbHVlKGRhdGFbaV0sIHByb3BOYW1lKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gZ2V0UHJvcGVydHlWYWx1ZShkYXRhLCBwcm9wTmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9yaWdEYXRhRmllbGRWYWx1ZUFzU3RyaW5nKFxuICBkYXRhOiBhbnksXG4gIHByb3BOYW1lOiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGxldCB2YWx1ZSA9IGdldE9yaWdEYXRhRmllbGRWYWx1ZShkYXRhLCBwcm9wTmFtZSk7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2VjdGlvblByb3BWYWx1ZXMoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgc2VjdGlvbk5hbWU6IHN0cmluZyxcbiAgcHJvcHM6IElEaWN0aW9uYXJ5W11cbikge1xuICBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIGlmIChzZWN0aW9uLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHNlY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICByZXR1cm4gc2V0UHJvcFZhbHVlKHNlY3Rpb24sIHByb3ApO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyogI2VuZHJlZ2lvbiAqL1xuXG4vKiAjcmVnaW9uIHByaXZhdGUgbWV0aG9kcyAqL1xuXG5mdW5jdGlvbiBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YTogYW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtIHwgSUR5bmFtaWNDYXJkLCBhbGxEYXRhOiBhbnlbXSA9IFtdKSB7XG4gIGlmIChkYXRhLnJlY29yZHMgJiYgZGF0YS5yZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICBkYXRhLnJlY29yZHMuZm9yRWFjaCgocmVjb3JkOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVjb3JkKTtcbiAgICAgIGR5bmFtaWNGb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgICBzZXRFZGl0Rm9ybUZpZWxkc1ZhbHVlKGRhdGEsIGZvcm1TZWN0aW9uPy5maWVsZHMsIGtleXMsIHJlY29yZCwgYWxsRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcykge1xuICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzVmFsdWUoZGF0YSwgZm9ybVNlY3Rpb24/LmhlYWRlckZpZWxkcywga2V5cywgcmVjb3JkLCBhbGxEYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHNWYWx1ZShkYXRhOiBhbnksIGZvcm1GaWVsZHM6IGFueSwga2V5czogYW55LCByZWNvcmQ6IGFueSwgYWxsRGF0YTogYW55KXtcbiAgZm9ybUZpZWxkcz8uZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICBjb25zdCBtYXRjaGVkS2V5OiBhbnkgPSBrZXlzLmZpbmQoXG4gICAgICAoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICApO1xuXG4gICAgaWYgKG1hdGNoZWRLZXkpIHtcbiAgICAgIC8vIHNldCBsYWJlbCBoeXBlcmxpbmtcbiAgICAgIHNldExhYmVsSHlwZXJsaW5rKGZvcm1GaWVsZCwgcmVjb3JkLCBrZXlzLCBhbGxEYXRhLCBtYXRjaGVkS2V5KTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkhZUEVSTElOSyAmJlxuICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgKChmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmtJZCAmJiBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcykgfHxcbiAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rKVxuICAgICkge1xuICAgICAgbGV0IHBhcmFtcyA9IGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zO1xuICAgICAgbGV0IHBhcmFtS2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgICAgaWYgKFxuICAgICAgICAhcGFyYW1zICYmXG4gICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluayAmJlxuICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsuaW5jbHVkZXMoJ319JylcbiAgICAgICkge1xuICAgICAgICBwYXJhbUtleXMgPSBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsuc3BsaXQoJ319Jyk7XG4gICAgICAgIHBhcmFtS2V5cyA9IHBhcmFtS2V5cy5tYXAoKHBhcmFtS2V5KSA9PiB7XG4gICAgICAgICAgcGFyYW1LZXkgPSBwYXJhbUtleS5yZXBsYWNlKCd7eycsICcnKS50cmltKCk7XG4gICAgICAgICAgcmV0dXJuIHBhcmFtS2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLmZpbHRlcigoeCkgPT4geC5sZW5ndGggPiAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKHBhcmFtcyl7XG4gICAgICAgICAgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoXG4gICAgICAgIGtleXMsXG4gICAgICAgIHJlY29yZCxcbiAgICAgICAgZm9ybUZpZWxkLm9yaWduYWxMaW5rLFxuICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zLFxuICAgICAgICBhbGxEYXRhXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rICYmXG4gICAgICAoKGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LmxpbmtJZCAmJiBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5wYXJhbXMpIHx8XG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LmxpbmspXG4gICAgKSB7XG4gICAgICBsZXQgcGFyYW1zID0gZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ucGFyYW1zO1xuICAgICAgbGV0IHBhcmFtS2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgIGlmICghcGFyYW1zICYmXG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbmsubGluayAmJlxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rLmluY2x1ZGVzKCd9fScpXG4gICAgICApIHtcbiAgICAgICAgcGFyYW1LZXlzID0gZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ubGluay5zcGxpdCgnfX0nKTtcbiAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLm1hcCgocGFyYW1LZXkpID0+IHtcbiAgICAgICAgICBwYXJhbUtleSA9IHBhcmFtS2V5LnJlcGxhY2UoJ3t7JywgJycpLnRyaW0oKTtcbiAgICAgICAgICByZXR1cm4gcGFyYW1LZXk7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJhbUtleXMgPSBwYXJhbUtleXMuZmlsdGVyKCh4KSA9PiB4Lmxlbmd0aCA+IDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgIHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluayA9IHNldEh5cGVybGluayhcbiAgICAgICAga2V5cyxcbiAgICAgICAgcmVjb3JkLFxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rLFxuICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgYWxsRGF0YVxuICAgICAgKTtcbiAgICB9XG4gICAgXG4gICAgZWxzZSB7XG4gICAgICBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJiBtYXRjaGVkS2V5KSB7XG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1GaWVsZC50aW1lT25seSA/IHJlY29yZFttYXRjaGVkS2V5XSA6IHJlY29yZFttYXRjaGVkS2V5XVxuICAgICAgICAgID8gbmV3IERhdGUocmVjb3JkW21hdGNoZWRLZXldIGFzIHN0cmluZylcbiAgICAgICAgICA6ICcnO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCkge1xuICAgICAgICAgIGlmIChmb3JtRmllbGQuY2FyZCAmJiBmb3JtRmllbGQuY2FyZC5mb3JtU2VjdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghZm9ybUZpZWxkLmNhcmQuZGF0YSkge1xuICAgICAgICAgICAgICBmb3JtRmllbGQuY2FyZC5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0RWRpdEZvcm1GaWVsZHNJbmZvKGRhdGEsIGZvcm1GaWVsZC5jYXJkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgIG1hdGNoZWRLZXlcbiAgICAgICkge1xuICAgICAgICBsZXQgYXJyYXlWYWx1ZSA9IFtdO1xuICAgICAgICBpZiAocmVjb3JkW21hdGNoZWRLZXldICYmIGZvcm1GaWVsZC5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICBhcnJheVZhbHVlLnB1c2goe1tmb3JtRmllbGQuZGlzcGxheUZpZWxkXSA6IHJlY29yZFttYXRjaGVkS2V5XX0pO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGFycmF5VmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTE9PS1VQX0lOUFVUIHx8IGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBvYmogPSBhdXRvU2V0TG9va3VwRGF0YShcbiAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhLmRhdGEsXG4gICAgICAgICAgICByZWNvcmRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBvYmo7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YSAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEuZGF0YVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBvYmogPSBhdXRvU2V0TG9va3VwRGF0YShcbiAgICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSxcbiAgICAgICAgICAgIHJlY29yZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gb2JqO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZihyZWNvcmRbbWF0Y2hlZEtleV0pe1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHRvVHJpbShyZWNvcmRbbWF0Y2hlZEtleV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQuZGlzcGxheUZpZWxkICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZC5sZW5ndGggPiAwXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoRGlzcGxheUZpZWxkID0gZ2V0TWF0Y2hLZXkoXG4gICAgICAgICAgICByZWNvcmQsXG4gICAgICAgICAgICBmb3JtRmllbGQuZGlzcGxheUZpZWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobWF0Y2hEaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHtcbiAgICAgICAgICAgICAgdGV4dDogdG9UcmltKHJlY29yZFttYXRjaERpc3BsYXlGaWVsZF0pLFxuICAgICAgICAgICAgICB2YWx1ZTogZm9ybUZpZWxkLnZhbHVlPy52YWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbWF0Y2hWYWx1ZUZpZWxkID0gZ2V0TWF0Y2hLZXkocmVjb3JkLCBmb3JtRmllbGQuZmllbGQpO1xuICAgICAgICAgIGlmIChtYXRjaFZhbHVlRmllbGQpIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHtcbiAgICAgICAgICAgICAgdGV4dDogZm9ybUZpZWxkLnZhbHVlPy50ZXh0LFxuICAgICAgICAgICAgICB2YWx1ZTogdG9UcmltKHJlY29yZFttYXRjaFZhbHVlRmllbGRdKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNPTVBPTkVOVCAmJlxuICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbD8uZGF0YVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHNldERhdGFGcm9tUmVjb3JkID0gZmluZEtleXNBbmRWYWx1ZShcbiAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbC5kYXRhLFxuICAgICAgICAgIHJlY29yZFxuICAgICAgICApO1xuICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbC5kYXRhID0gc2V0RGF0YUZyb21SZWNvcmQ/LmRhdGE7XG4gICAgICAgIGlmKHNldERhdGFGcm9tUmVjb3JkPy5tYXRjaERhdGEpe1xuICAgICAgICAgIGNoYW5nZUR5bmFtaWNGb3JtU3RhdGUoXG4gICAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbC5pZCxcbiAgICAgICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnRDb250cm9sPy5kYXRhLFxuICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLk5VTUVSSUMgJiZcbiAgICAgICAgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGFcbiAgICAgICkge1xuICAgICAgICBsZXQgc2V0RGF0YSA9IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbDtcbiAgICAgICAgc2V0RGF0YS5kYXRhLmRhdGEgPSBmaW5kS2V5c0FuZFZhbHVlKHNldERhdGEuZGF0YS5kYXRhLCByZWNvcmQpPy5kYXRhO1xuICAgICAgICBjaGFuZ2VEeW5hbWljRm9ybVN0YXRlKHNldERhdGEuaWQsIHNldERhdGEuZGF0YS5kYXRhLCBmYWxzZSk7XG4gICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSFlQRVJMSU5LIFxuICAgICAgICAmJiAgZm9ybUZpZWxkLmh5cGVybGluaz8udGFyZ2V0ID09PSBFSHlwZXJsaW5rLkRJQUxPRyBcbiAgICAgICAgJiYgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXNcbiAgICAgICkge1xuICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcyA9IGZpbmRLZXlzQW5kVmFsdWUoZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMsIHJlY29yZCk/LmRhdGE7XG4gICAgICB9IGVsc2UgaWYgKG1hdGNoZWRLZXkpIHtcbiAgICAgICAgaWYgKGZvcm1GaWVsZC5mb3JtYXQpIHtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtYXRGb3JtRmllbGRWYWx1ZShcbiAgICAgICAgICAgIGZvcm1GaWVsZCxcbiAgICAgICAgICAgIHJlY29yZFttYXRjaGVkS2V5XVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DSEVDS0JPWCkge1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9XG4gICAgICAgICAgICByZWNvcmRbbWF0Y2hlZEtleV0gJiZcbiAgICAgICAgICAgIChyZWNvcmRbbWF0Y2hlZEtleV0udG9TdHJpbmcoKSA9PT0gJzEnIHx8XG4gICAgICAgICAgICAgIHJlY29yZFttYXRjaGVkS2V5XS50b1N0cmluZygpID09PSAndHJ1ZScpXG4gICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICB9ZWxzZSBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5EUk9QRE9XTikge1xuICAgICAgICAgIGxldCBkcm9wVmFsdWUgPSByZWNvcmRbbWF0Y2hlZEtleV07XG4gICAgICAgICAgaWYgKGRyb3BWYWx1ZSAmJiBkcm9wVmFsdWU/LnRvU3RyaW5nKCkgIT09ICcwJykge1xuICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZHJvcFZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYoZm9ybUZpZWxkLmNvbnRyb2w9PT1FRm9ybUNvbnRyb2wuU0VMRUNUQlVUVE9OKXtcbiAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlPXRvVHJpbShyZWNvcmRbbWF0Y2hlZEtleV0pIHx8IGZvcm1GaWVsZC52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHRvVHJpbShyZWNvcmRbbWF0Y2hlZEtleV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cbi8vc2V0IGh5cGVybGluayBwYXJhbSB2YWx1ZSBhcyBmaWVsZCB2YWx1ZVxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGlua1BhcmFtVmFsdWUocmVjb3JkOmFueSwgZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSkge1xuICBsZXQga2V5czogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGxpbms6IHN0cmluZyA9Jyc7XG4gIGxldCBwYXJhbUtleXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBwYXJhbTogYW55O1xuICBsZXQgZmllbGRJbmZvOiBhbnk7XG4gICAgZHluYW1pY0Zvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XG4gICAgICBzZWN0aW9uPy5maWVsZHM/LmZvckVhY2goKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICAgIGlmKGZvcm1GaWVsZC5sYWJlbCAmJiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rPy5saW5rKXtcbiAgICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMocmVjb3JkKTtcbiAgICAgICAgICBpZihmb3JtRmllbGQ/LmxhYmVsPy5sYWJlbENvbnRyb2w/Lm9yaWduYWxMaW5rKXtcbiAgICAgICAgICAgbGluayA9IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wub3JpZ25hbExpbms7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYoZm9ybUZpZWxkPy5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LnBhcmFtcyl7XG4gICAgICAgICAgIHBhcmFtID0gZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zO1xuICAgICAgICAgICBwYXJhbUtleXMgPSBPYmplY3Qua2V5cyhwYXJhbSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpZWxkSW5mbyA9IGZvcm1GaWVsZDtcbiAgICAgICAgICBpZihyZWNvcmQgJiYga2V5cyAmJiBsaW5rICYmIHBhcmFtS2V5cyAmJiBwYXJhbSAmJiBmaWVsZEluZm8pe1xuICAgICAgICAgICAgZmllbGRJbmZvLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluayA9IHNldEh5cGVybGluayhrZXlzLCByZWNvcmQsIGxpbmssIHBhcmFtS2V5cywgcGFyYW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmpDb252ZXJ0VG9Mb3dlcihvYmo6IGFueSwgaWdub3JlQ2FzaW5nOiBib29sZWFuID0gZmFsc2UpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikucmVkdWNlKChhY2N1bXVsYXRvcjogYW55LCBrZXkpID0+IHtcbiAgICBhY2N1bXVsYXRvcltpZ25vcmVDYXNpbmcgPyBrZXkgOiBrZXkudG9Mb3dlckNhc2UoKV0gPSBvYmpba2V5XTtcbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH0sIHt9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsaWNrU2VjdGlvbkhpZ2hsaWdodCh2YWx1ZTogYW55KSB7XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sZWZ0LXNpZGVCYXIgLnAtcGFuZWxtZW51IC5wLXBhbmVsbWVudS1wYW5lbCcpO1xuICAgICAgIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvcignW3RpdGxlID0gXCInKyB2YWx1ZT8ubmFtZSArJ1wiXScpO1xuICAgICAgIGNvbnN0IGFsbE1lbnVJdGVtcyA9IGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sZWZ0LXNpZGVCYXIgLnAtcGFuZWxtZW51LXBhbmVsJyk7XG4gICAgICAgYWxsTWVudUl0ZW1zPy5mb3JFYWNoKChtZW5hdUl0ZW06IGFueSkgPT4ge1xuICAgICAgICBtZW5hdUl0ZW0/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1wYW5lbG1lbnUtcGFuZWwnKTtcbiAgICAgICB9KVxuICAgICAgICB0aXRsZT8ucGFyZW50RWxlbWVudD8ucGFyZW50RWxlbWVudD8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLXBhbmVsbWVudS1wYW5lbCBhY3RpdmUnKTtcbiAgICAgICAgdGl0bGU/LnBhcmVudEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1lbGVtZW50IHAtY29tcG9uZW50IHAtcGFuZWxtZW51LWhlYWRlciBwLWhpZ2hsaWdodCcpO1xuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUljb24gPSBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yQWxsKCcuYWN0aXZlLWljb24nKTtcbiAgYWN0aXZlSWNvbj8uZm9yRWFjaCgoaWNvbjogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICBpY29uPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVBY3RpdmVJY29uQ2xhc3MoKSB7XG4gIGNvbnN0IGFjdGl2ZUljb24gPSBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yQWxsKCcuYWN0aXZlLWljb24nKTtcbiAgaWYgKGFjdGl2ZUljb24gJiYgYWN0aXZlSWNvbi5sZW5ndGggPiAwKSB7XG4gICAgYWN0aXZlSWNvbj8uZm9yRWFjaCgoaWNvbjogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICBpY29uPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywncC1lbGVtZW50IHAtY29tcG9uZW50IHAtcGFuZWxtZW51LWhlYWRlciBwLWhpZ2hsaWdodCcpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoaWdobGlnaHRMZWZ0U2lkZWJhcigpe1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmZvcm0tY29udGFpbmVyXCIpPy5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgKCkgPT57XG4gIGNvbnN0IHNjcm9sbFRvcFBvc2l0aW9uOiBhbnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmZvcm0tY29udGFpbmVyXCIpPy5zY3JvbGxUb3A7XG4gIGNvbnN0IGFsbEljb25FbGVtZW50czogYW55ID0gZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKFwiLmxlZnQtc2lkZUJhciAucC1wYW5lbG1lbnUgLnAtcGFuZWxtZW51LXBhbmVsXCIpO1xuXG4gIGFsbEljb25FbGVtZW50cz8uZm9yRWFjaCgoaWNvbjogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgaWNvbj8uc2V0QXR0cmlidXRlKCd0YWJJbmRleCcsICdzZWN0aW9uJyArIGluZGV4KTtcbiAgfSk7XG4gICAgIHJlbW92ZUFjdGl2ZUljb25DbGFzcygpO1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5mb3JtLWNvbnRhaW5lciAuY2FyZCcpPy5mb3JFYWNoKChjYXJkOiBhbnksIGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudElkID0gXCJzZWN0aW9uXCIgKyBpbmRleDtcbiAgICAgICAgaWYgKHNjcm9sbFRvcFBvc2l0aW9uID49IGNhcmQub2Zmc2V0VG9wICYmIHNjcm9sbFRvcFBvc2l0aW9uIDw9IGNhcmQub2Zmc2V0VG9wICsgY2FyZC5vZmZzZXRIZWlnaHQpe1xuICAgICAgICAgIHJldHVybiAgZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvcignW3RhYkluZGV4PScrIGN1cnJlbnRJZCArICddJyk/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1wYW5lbG1lbnUtcGFuZWwgYWN0aXZlJyk7XG4gICAgICAgIH0gZWxzZXtcbiAgICAgICAgICByZXR1cm4gIGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJJbmRleD0nKyBjdXJyZW50SWQgKyAnXScpPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsJyk7ICAgIFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgfSk7XG4gICAgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZEtleXNBbmRWYWx1ZShkYXRhOiBhbnksIHJlY29yZDogYW55KSB7XG4gIGxldCB2YWx1ZUtleTogc3RyaW5nID0gJyc7XG4gIGxldCBzZXREYXRhRnJvbVJlY29yZCA9IGZhbHNlO1xuICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChkYXRhS2V5KSA9PiB7XG4gICAgbGV0IHZhbHVlQ29udGFpbnNLZXk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZihkYXRhW2RhdGFLZXldICYmIGRhdGFbZGF0YUtleV0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCd7Jykpe1xuICAgICAgdmFsdWVDb250YWluc0tleSA9IHRydWU7XG4gICAgICB2YWx1ZUtleSA9IGRhdGFbZGF0YUtleV0/LnRvU3RyaW5nKCk/LnJlcGxhY2UoXCJ7XCIsIFwiXCIpPy5yZXBsYWNlKFwifVwiLCBcIlwiKVxuICAgIH1cbiAgICBsZXQga2V5ID0gT2JqZWN0LmtleXMocmVjb3JkKS5maW5kKChrZXkpID0+IHZhbHVlQ29udGFpbnNLZXkgPyAodmFsdWVLZXkudG9Mb3dlckNhc2UoKSA9PT0ga2V5LnRvTG93ZXJDYXNlKCkpIDogKGRhdGFLZXkudG9Mb3dlckNhc2UoKSA9PT0ga2V5LnRvTG93ZXJDYXNlKCkpKTtcbiAgICBpZiAoKGtleSAmJiBrZXkubGVuZ3RoID4gMCAmJiByZWNvcmRba2V5XSl8fCByZWNvcmRba2V5XSA9PT0gZmFsc2UpIHtcbiAgICAgIHNldERhdGFGcm9tUmVjb3JkID0gdHJ1ZVxuICAgICAgZGF0YSA9IHsgLi4uZGF0YSwgW2RhdGFLZXldOiByZWNvcmRba2V5XSB9O1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7bWF0Y2hEYXRhOiBzZXREYXRhRnJvbVJlY29yZCwgZGF0YTogZGF0YX07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wVmFsdWUob2JqOiBhbnksIHByb3A6IElEaWN0aW9uYXJ5KSB7XG4gIGNvbnN0IG1hdGNoZWRLZXk6IHN0cmluZyA9IGdldE1hdGNoS2V5KG9iaiwgcHJvcC5uYW1lKTtcbiAgaWYgKG1hdGNoZWRLZXkpIHtcbiAgICByZXR1cm4gKG9ialttYXRjaGVkS2V5XSA9IHByb3AudmFsdWUpO1xuICB9XG4gIGVsc2V7XG4gICByZXR1cm4oIG9ialtwcm9wLm5hbWVdPXByb3AudmFsdWUpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1JvbGUocm9sZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGxldCBzdG9yYWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0N1cnJlbnRVc2VySW5mbycpO1xuICBpZiAoc3RvcmFnZSkge1xuICAgIGxldCBjdXJyZW50VXNlciA9IEpTT04ucGFyc2Uoc3RvcmFnZSk7XG4gICAgaWYgKGN1cnJlbnRVc2VyICYmIGN1cnJlbnRVc2VyLnJvbGVzICYmIGN1cnJlbnRVc2VyLnJvbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBjdXJyZW50VXNlci5yb2xlcy5zb21lKChpdGVtOiBhbnkpID0+IGl0ZW0uY29kZS50b1N0cmluZygpPy50cmltKCk/LnRvTG93ZXJDYXNlKCkgPT09IHJvbGU/LnRyaW0oKT8udG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2V0TGFiZWxIeXBlcmxpbmsoaXRlbTogYW55LCByZWNvcmQ6IGFueSwga2V5czogc3RyaW5nW10sIGFsbERhdGE6IGFueVtdID0gW10sIG1hdGNoZWRLZXk6IGFueSA9ICcnKSB7XG4gIGlmIChpdGVtLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5JTlBVVCAmJiBpdGVtPy5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbmsgJiYgbWF0Y2hlZEtleSkge1xuICAgIGl0ZW0udmFsdWUgPSB0b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKTtcbiAgfVxuICBpZiAoXG4gICAgaXRlbS5sYWJlbCAmJlxuICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rICYmXG4gICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtc1xuICApIHtcbiAgICBjb25zdCBwYXJhbUtleXMgPSBPYmplY3Qua2V5cyhpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zKTtcbiAgICBjb25zdCBsaW5rID0gaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbms7XG4gICAgaWYgKGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rKSB7XG4gICAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluayA9IHNldEh5cGVybGluayhcbiAgICAgICAga2V5cyxcbiAgICAgICAgcmVjb3JkLFxuICAgICAgICBsaW5rLFxuICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXMsXG4gICAgICAgIGFsbERhdGFcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRIeXBlcmxpbmsoXG4gIGtleXM6IHN0cmluZ1tdLFxuICByZWNvcmQ6IGFueSxcbiAgbGluazogc3RyaW5nLFxuICBwYXJhbUtleXM6IHN0cmluZ1tdLFxuICBwYXJhbXM6IGFueSxcbiAgYWxsRGF0YTogYW55W10gPSBbXVxuKTogc3RyaW5nIHtcbiAgbGV0IG5ld0xpbms6IHN0cmluZyA9IGxpbms7XG4gIHJlY29yZCA9IG9iakNvbnZlcnRUb0xvd2VyKHJlY29yZCk7XG4gIHBhcmFtS2V5cy5mb3JFYWNoKChwYXJhbWtleSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtOiBzdHJpbmcgPSAne3snICsgcGFyYW1rZXkudG9Mb3dlckNhc2UoKSArICd9fSc7XG4gICAgY29uc3QgaXNQYXJhbU1hdGNoZWQgPSBuZXdMaW5rLmxvY2FsZUNvbXBhcmUocGFyYW0pO1xuICAgIGNvbnN0IHBhcmFtSW5SZWNvcmQgPSBzZXRQYXJhbUtleVZhbHVlKHJlY29yZCwgYWxsRGF0YSwgcGFyYW1rZXkpO1xuXG4gICAgaWYgKGlzUGFyYW1NYXRjaGVkKSB7XG4gICAgICBsZXQgcGFyYW1WYWx1ZSA9IHBhcmFtcyA/IHBhcmFtc1twYXJhbWtleV0gOiBudWxsO1xuICAgICAgaWYocGFyYW1WYWx1ZSA9PT0gJycgJiYgcGFyYW1JblJlY29yZCl7XG4gICAgICAgIHBhcmFtVmFsdWUgPSAneycrcGFyYW1rZXkrJ30nO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtVmFsdWUpIHtcbiAgICAgICAgY29uc3QgcHJvcE5hbWUgPSBwYXJhbVZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xuICAgICAgICBsZXQgcHJvcFZhbHVlID0gcmVjb3JkW3Byb3BOYW1lLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3N0cmluZycgICYmIHByb3BWYWx1ZSAhPSBudWxsICYmIHByb3BWYWx1ZS5pbmNsdWRlcyhcIiZcIikpIHtcbiAgICAgICAgICBwcm9wVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQocHJvcFZhbHVlKTtcbiAgICAgICAgfSBcbiAgICAgICAgXG4gICAgICAgIC8vIGluIGNhc2Ugb2YgcHJvcCBub3QgZm91bmQgaW4gcmVjb3JkIHRoZW4gdHJ5IHRvIGZpbmQgcHJvcCBpbiBhbGwgZGF0YSBhcnJheSwgdG8gZ2V0IGl0cyB2YWx1ZSBcbiAgICAgICAgaWYgKCFwcm9wVmFsdWUgJiYgYWxsRGF0YSAmJiBhbGxEYXRhLmxlbmd0aCA+IDApXG4gICAgICAgIHtcbiAgICAgICAgICBhbGxEYXRhLmZvckVhY2goKGRhdGEpPT57XG4gICAgICAgICAgICAvL2NvbnN0IHZhbHVlID0gZGF0YS5yZWNvcmRzLmZpbmQoKHgpPT4geFtwcm9wTmFtZV0pO1xuICAgICAgICAgICAgZGF0YS5yZWNvcmRzLmZvckVhY2goKGFsbFJlY29yZDogYW55KT0+e1xuICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGFsbFJlY29yZCk7XG4gICAgICAgICAgICAgIGxldCBtYXRjaEtleSA9IGtleXMuZmluZCgoeCk9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHByb3BOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICBpZiAobWF0Y2hLZXkpe1xuICAgICAgICAgICAgICAgICBwcm9wVmFsdWUgPSBhbGxSZWNvcmRbbWF0Y2hLZXldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKG5ldyBSZWdFeHAocGFyYW0sICdpZycpLCB0b1RyaW0ocGFyYW1WYWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCd7JykgPyBwcm9wVmFsdWUgOiBwYXJhbVZhbHVlKSk7XG4gICAgICBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGdldCBwYXJhbSB2YWx1ZSBmcm9tIGFwaSByZXNwb25zZSwgaWYgcGFyYW0ga2V5IGV4aXN0cyBpbiBpdFxuICAgICAgICBjb25zdCBtYXRjaGVkS2V5OiBhbnkgPSBrZXlzLmZpbmQoXG4gICAgICAgICAgKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gcGFyYW1rZXkudG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgICAgICAgcGFyYW1WYWx1ZSA9IHJlY29yZFttYXRjaGVkS2V5XTtcbiAgICAgICAgICBpZiAocGFyYW1WYWx1ZSkge1xuICAgICAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShcbiAgICAgICAgICAgICAgbmV3IFJlZ0V4cChwYXJhbSwgJ2lnJyksXG4gICAgICAgICAgICAgIHRvVHJpbShwYXJhbVZhbHVlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHBhcmFtLCAnaWcnKSwgdG9UcmltKCcnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLy8gcmVwbGFjZSB0aGUge3twYXJhbX19IHdpdGggZW1wdHlcbiAgaWYobmV3TGluayAmJiBuZXdMaW5rLmluY2x1ZGVzKFwie3tcIikgJiYgbmV3TGluay5pbmNsdWRlcyhcIn19XCIpKXtcbiAgICBuZXdMaW5rID0gbmV3TGluaz8ucmVwbGFjZSgveysuKj99Ky9nLCBcIlwiKTtcbiAgfVxuICByZXR1cm4gbmV3TGluaztcbn1cblxuLy8gaXRzIGNoZWNraW5nIGlmIHRoZXJlIGlzIG5vIHZhbHVlIGluIGh5cGVybGluayBwYXJhbSB0aGVuIGl0IHNldCBrZXkgYXMgYSBwYXJhbVZhbHVlXG5mdW5jdGlvbiBzZXRQYXJhbUtleVZhbHVlKHJlY29yZDogYW55LCBhbGxEYXRhOiBhbnlbXSA9IFtdLCBwYXJhbWtleTogYW55KXtcbiAgbGV0IHBhcmFtVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaWYoYWxsRGF0YSAmJiBhbGxEYXRhLmxlbmd0aCA+IDApe1xuICAgIGFsbERhdGEuZm9yRWFjaCgoZGF0YTogYW55KT0+e1xuICAgICAgaWYoZGF0YS5yZWNvcmRzICYmIGRhdGEucmVjb3Jkcy5sZW5ndGggPiAwKXtcbiAgICAgICAgZGF0YS5yZWNvcmRzLmZvckVhY2goKGFsbFJlY29yZDogYW55KSA9PntcbiAgICAgICAgICAgaWYocGFyYW1WYWx1ZSA9PT0gZmFsc2Upe1xuICAgICAgICAgICAgcGFyYW1WYWx1ZSA9IE9iamVjdC5rZXlzKGFsbFJlY29yZCkuc29tZSgocmVjb3JkKT0+IHJlY29yZC50b0xvd2VyQ2FzZSgpID09PSBwYXJhbWtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9ZWxzZXtcbiAgICAgICBwYXJhbVZhbHVlID0gT2JqZWN0LmtleXMocmVjb3JkKS5zb21lKCh4KT0+IHggPT09IHBhcmFta2V5LnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIHJldHVybiBwYXJhbVZhbHVlO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eVZhbHVlKGRhdGE6IGFueSwgcHJvcE5hbWU6IHN0cmluZykge1xuICBsZXQgcHJvcFZhbHVlOiBhbnk7XG4gIGRhdGEucmVjb3Jkcz8uZm9yRWFjaCgocmVjb3JkOiBhbnkpID0+IHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZWNvcmQpKSB7XG4gICAgICBpZiAoa2V5ICYmIHByb3BOYW1lICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHByb3BWYWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBwcm9wVmFsdWU7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZvcm1GaWVsZENWYWx1ZShmaWVsZDogYW55KSB7XG4gIGlmIChcbiAgICBmaWVsZC5mb3JtYXQ/LnR5cGUgPT09IEVGb3JtYXRUeXBlLkJPT0xFQU5fWU4gfHxcbiAgICBmaWVsZC5mb3JtYXQ/LmZvcm1hdHRlcj8ubmFtZSA9PT0gJ3RvQm9vbGVhbidcbiAgKSB7XG4gICAgcmV0dXJuIChmaWVsZC52YWx1ZSA9PT0gMSB8fCBmaWVsZC52YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ3RydWUnIHx8IGZpZWxkLnZhbHVlPy50b1N0cmluZygpID09PSAnWScpID8gJ1knIDogJ04nO1xuICB9IGVsc2UgaWYgKFxuICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJlxuICAgIChmaWVsZC52YWx1ZSB8fCBmaWVsZC52YWx1ZSA9PT0gJycpXG4gICkge1xuICAgIGlmKGZpZWxkLnRpbWVPbmx5IHx8IGZpZWxkLnNob3d0aW1lKXtcbiAgICAgIC8vIGNvbnN0IGRhdGVUaW1lUmVnZXggPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9IChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0pJC87IC8vIFJlZ2V4IGZvciBkYXRldGltZSBmb3JtYXRcbiAgICAgIC8vIGNvbnN0IG1hdGNoID0gZmllbGQudmFsdWUubWF0Y2goZGF0ZVRpbWVSZWdleCk7XG4gICAgICAvLyBpZiAobWF0Y2gpIHtcbiAgICAgIC8vICAgZmllbGQudmFsdWUgPSBmb3JtYXREYXRlKGZpZWxkLnZhbHVlLCAnaGg6bW0gYScsICdlbi1VUycpO1xuICAgICAgLy8gfWVsc2Uge1xuICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlO1xuICAgICAgLy8gfVxuICAgIH1lbHNle1xuICAgICAgZmllbGQudmFsdWUgPVxuICAgICAgZmllbGQuc2hvd1RpbWUgPT09IHRydWVcbiAgICAgICAgPyB0b1Nob3J0RGF0ZVRpbWUoZmllbGQudmFsdWUsIGZpZWxkLmZvcm1hdClcbiAgICAgICAgOiB0b1Nob3J0RGF0ZShmaWVsZC52YWx1ZSwgZmllbGQuZm9ybWF0KVxuICAgIH1cbiAgICByZXR1cm4gZmllbGQudmFsdWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgfHwgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSAmJlxuICAgIGZpZWxkLnZhbHVlICYmXG4gICAgdHlwZW9mIGZpZWxkLnZhbHVlID09PSAnb2JqZWN0J1xuICApIHtcbiAgICByZXR1cm4gZmllbGQudmFsdWUudmFsdWUgPT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpZWxkLnZhbHVlLnZhbHVlO1xuICB9IGVsc2UgaWYgKFxuICAgIGZpZWxkLmxhYmVsICYmXG4gICAgZmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgZmllbGQubGFiZWwubGFiZWxDb250cm9sLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgJiZcbiAgICBmaWVsZC52YWx1ZSAmJlxuICAgIHR5cGVvZiBmaWVsZC52YWx1ZSA9PT0gJ29iamVjdCdcbiAgKSB7XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlLnZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgPT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpZWxkLnZhbHVlO1xuICAgIHJldHVybiBmaWVsZC52YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXV0b1NldExvb2t1cERhdGEoXG4gIGZpZWxkRGF0YTogYW55LFxuICByZXNwb25zZTogYW55XG4gICkge1xuICBsZXQgb2JqID0ge307XG4gIGxldCByZWNvcmQgPSBzZXREYXRhRmllbGRzKFtyZXNwb25zZV0pO1xuICBpZiAocmVjb3JkICYmIHJlY29yZC5sZW5ndGggPiAwKSB7XG4gICAgcmVjb3JkLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgcmVjb3JkID0geDtcbiAgICB9KTtcbiAgfVxuICBpZiAoZmllbGREYXRhICYmIHJlY29yZCkge1xuICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkRGF0YSkuZm9yRWFjaCgoW2RhdGFLZXksIGRhdGFWYWx1ZV06IGFueSkgPT4ge1xuICAgICAgbGV0IHJvd0tleXMgPSBPYmplY3Qua2V5cyhyZWNvcmQpO1xuICAgICAgbGV0IGtleSA9IHJvd0tleXM/LmZpbmQoKHgpID0+IHg/LnRvTG93ZXJDYXNlKCkgPT09IGRhdGFLZXk/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgbGV0IHZhbHVlID0gcm93S2V5cz8uZmluZChcbiAgICAgICAgKHgpID0+IGRhdGFWYWx1ZSAmJiBkYXRhVmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSAmJiB4Py50b0xvd2VyQ2FzZSgpID09PSBkYXRhVmFsdWU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCk/LnJlcGxhY2UoXCJ7XCIsIFwiXCIpPy5yZXBsYWNlKFwifVwiLCBcIlwiKVxuICAgICAgKT8udG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IHJlY29yZFt2YWx1ZSsnX29iaiddPy5vcHRpb25WYWx1ZSA/IHJlY29yZFt2YWx1ZSsnX29iaiddPy5vcHRpb25WYWx1ZSA6IHJlY29yZFt2YWx1ZV0gfTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ICYmIGtleS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IHJlY29yZFtrZXkudG9Mb3dlckNhc2UoKV0gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IGRhdGFWYWx1ZSB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvYmo7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEdyaWRMb29rdXBEYXRhKGNvbHVtbjogSUdyaWRDb2x1bW5bXSwgZmllbGQ6IHN0cmluZywgZGF0YTogYW55KXtcbiAgbGV0IG9iaiA9IGNvbHVtbi5maW5kKCh4KT0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkpO1xuICBpZihvYmogJiYgb2JqLmxvb2t1cENvbnRyb2w/LmRhdGEpe1xuICAgIG9iai5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IGRhdGE7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERhdGFGaWVsZHMocmVzcG9uc2U6IGFueVtdKSB7XG4gIGxldCBkYXRhOiBhbnkgPSBbXTtcbiAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmxlbmd0aCA+IDApIHtcbiAgICByZXNwb25zZS5tYXAoKHg6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmtleXMoeCkucmVkdWNlKFxuICAgICAgICAocHJldiwgY3VycmVudCkgPT4gKHsgLi4ucHJldiwgW2N1cnJlbnQudG9Mb3dlckNhc2UoKV06IHhbY3VycmVudF0gfSksXG4gICAgICAgIHt9XG4gICAgICApO1xuXG4gICAgICBkYXRhLnB1c2gocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERpYWxvZ1Jlc3BvbnNlKFxuICBmb3JtRmllbGQ6IGFueSxcbiAgZm9ybURhdGE6IGFueSxcbiAgcmVzcG9uc2U6IGFueVxuKSB7XG4gIGxldCB2YWx1ZTogYW55O1xuICBpZiAocmVzcG9uc2UpIHtcbiAgICAvLyBpZiBzZWxlY3RlZFZhbHVlIGRvZXMgbm90IGV4aXN0IHRoZW4gY29uc2lkZXIgdmFsdWVGaWVsZCBhcyBzZWxlY3RlZFZhbHVlXG4gICAgaWYgKFxuICAgICAgZm9ybURhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEubGFiZWxQcm9wICYmXG4gICAgICAhZm9ybURhdGEuZGF0YS52YWx1ZVByb3BcbiAgICApIHtcbiAgICAgIGZvcm1EYXRhLmRhdGEudmFsdWVQcm9wID0gZm9ybURhdGEuZGF0YS5sYWJlbFByb3A7XG4gICAgfVxuICAgIGVsc2UgaWYgKFxuICAgICAgZm9ybURhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEudmFsdWVQcm9wICYmXG4gICAgICAhZm9ybURhdGEuZGF0YS5sYWJlbFByb3BcbiAgICApIHtcbiAgICAgIGZvcm1EYXRhLmRhdGEubGFiZWxQcm9wID0gZm9ybURhdGEuZGF0YS52YWx1ZVByb3A7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hWYWx1ZUtleTogc3RyaW5nID0gZ2V0TWF0Y2hLZXkoXG4gICAgICByZXNwb25zZSxcbiAgICAgIGZvcm1EYXRhPy5kYXRhPy52YWx1ZVByb3BcbiAgICApO1xuICAgIGNvbnN0IG1hdGNoRmllbGRLZXk6IHN0cmluZyA9IGdldE1hdGNoS2V5KFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBmb3JtRGF0YT8uZGF0YT8ubGFiZWxQcm9wXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIGZvcm1EYXRhPy5kYXRhICYmXG4gICAgICBmb3JtRGF0YT8uZGF0YS52YWx1ZVByb3AgJiZcbiAgICAgIGZvcm1EYXRhPy5kYXRhLmxhYmVsUHJvcFxuICAgICkge1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IHJlc3BvbnNlW21hdGNoVmFsdWVLZXldO1xuICAgICAgbGV0IG1hdGNoVGV4dCA9IHJlc3BvbnNlW21hdGNoRmllbGRLZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZVByb3AgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBtYXRjaFRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbHVlUHJvcCA9IHZhbHVlUHJvcC50cmltKCk7XG4gICAgICAgIG1hdGNoVGV4dCA9IG1hdGNoVGV4dC50cmltKCk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHsgdGV4dDogbWF0Y2hUZXh0LCB2YWx1ZTogdmFsdWVQcm9wIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IEZpZWxkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShyZXNwb25zZSwgZm9ybUZpZWxkLmZpZWxkKTtcbiAgICAgIGxldCB2YWx1ZSA9IHJlc3BvbnNlW0ZpZWxkS2V5XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlPy50b1N0cmluZygpPy50cmltKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRVcmwoKTpzdHJpbmd7XG4gIGxldCBjdXJyZW50Um91dGU6IHN0cmluZyA9ICcnO1xuICBsZXQgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gIGlmKHVybCl7XG4gICAgbGV0IGFyciA9IHVybC5zcGxpdCgnLycpO1xuICAgIGN1cnJlbnRSb3V0ZSA9IGFyclthcnIubGVuZ3RoLTFdXG4gIH0gICAgXG4gIHJldHVybiBjdXJyZW50Um91dGU7XG59XG5cbmV4cG9ydCAgZnVuY3Rpb24gZ2V0R3JpZEZpbHRlcnMoKXtcbiAgbGV0IGZpbHRlcnM6IGFueSA9IFtdO1xuICBsZXQgZ3JpZEZpbHRlcnMgPSBjdXJyZW50VXJsKCk7XG4gICAgaWYoZ3JpZEZpbHRlcnMgJiYgZ3JpZEZpbHRlcnMubGVuZ3RoID4gMCl7XG4gICAgICBjb25zdCBsb2NhbEZpbHRlciA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJytncmlkRmlsdGVycykgYXMgYW55KTtcbiAgICAgIGZpbHRlcnMgPSBsb2NhbEZpbHRlcj8uZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcnM7XG59XG5cbi8vdXBkYXRlIHRoZSBoaWRkZW4gb3IgZGlzYWJsZWQgYW5kIHZhbHVlIGJhc2VkIG9mZiBvdGhlciBnbG9iYWwgZmlsdGVycy5cbmV4cG9ydCBmdW5jdGlvbiBzZXRHbG9iYWxGaWx0ZXJQcm9wVmFsdWVzKFxuICBnbG9iYWxGaWx0ZXI6IElHbG9iYWxGaWx0ZXJbXSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgcHJvcHM6IElGaWx0ZXJEaWN0aW9uYXJ5W10sXG4pIHtcbiAgcmV0dXJuIGdsb2JhbEZpbHRlci5tYXAoKGZpbHRlcjogYW55KSA9PiB7XG4gICAgaWYgKFxuICAgICAgKGZpbHRlci5maWVsZCAmJiBmaWx0ZXIuZmllbGQudG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAoZmlsdGVyLmRpc3BsYXlUZXh0ICYmXG4gICAgICAgIGZpbHRlci5kaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIHByb3BzPy5tYXAoKHByb3A6IElGaWx0ZXJEaWN0aW9uYXJ5KSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXIuaGFzT3duUHJvcGVydHkocHJvcC5wcm9wTmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gKGZpbHRlcltwcm9wLnByb3BOYW1lXSA9IHByb3AucHJvcFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wLnByb3BWYWx1ZSAmJiBwcm9wLnByb3BWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIChmaWx0ZXIudmFsdWUgPSBwcm9wLnByb3BWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDYXJkRmllbGRzRGF0YShmb3JtOiBhbnkpIHtcbiAgaWYgKGZvcm0gJiYgZm9ybS5keW5hbWljZm9ybSkge1xuICAgIGNvbnN0IHsgZHluYW1pY2Zvcm0sIC4uLm5ld0RhdGEgfSA9IGZvcm07XG4gICAgZHluYW1pY2Zvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XG4gICAgICBzZWN0aW9uLmZpZWxkcz8uZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAobmV3RGF0YSkge1xuICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzKHsgcmVjb3JkczogW25ld0RhdGFdIH0sIGR5bmFtaWNmb3JtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLy8gZGlzYWJsZSBHcmlkIEVkaXRhYmxlUm93IENvbHVtblxuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVFZGl0Um93Q29sdW1uKGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIGZpZWxkOiBzdHJpbmcpOiBJR3JpZENvbHVtbltdIHtcbiAgaWYgKGZpZWxkICYmIGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgbGV0IG9iaiA9IGNvbHVtbnMuZmluZCgoeCkgPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgbGV0IGRpc2FibGVPYmogPSB7IC4uLm9iaiwgZGlzYWJsZWQ6IHRydWUgfTtcbiAgICBjb25zdCBpbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChpOiBhbnkpID0+IGkuZmllbGQudG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkgY29sdW1uc1tpbmRleF0gPSBkaXNhYmxlT2JqO1xuICB9XG4gIHJldHVybiBjb2x1bW5zO1xufVxuXG4vLyBlbmFibGVkIEdyaWQgRWRpdGFibGVSb3cgQ29sdW1uXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlZEVkaXRSb3dDb2x1bW4oY29sdW1uczogSUdyaWRDb2x1bW5bXSwgZmllbGQ6IHN0cmluZyk6IElHcmlkQ29sdW1uW10ge1xuICBpZiAoZmllbGQgJiYgY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgb2JqID0gY29sdW1ucy5maW5kKCh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgbGV0IGVuYWJsZU9iaiA9IHsgLi4ub2JqLCBkaXNhYmxlZDogZmFsc2UgfTtcbiAgICBjb25zdCBpbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChpOiBhbnkpID0+IGkuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSBjb2x1bW5zW2luZGV4XSA9IGVuYWJsZU9iajtcbiAgfVxuICByZXR1cm4gY29sdW1ucztcbn1cblxuIC8vIGNoZWNrIHRoZSBNaW51dGVzIEludGVydmFsXG4gZXhwb3J0IGZ1bmN0aW9uIHNldE1pbnV0ZXNJbnRlcnZhbCh2YWx1ZTogYW55KXtcbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbWluID0gdmFsdWUuZ2V0TWludXRlcygpLnRvU3RyaW5nKCk7XG4gICAgaWYgKG1pbikge1xuICAgICB2YWx1ZSA9IHZhbHVlLnNldE1pbnV0ZXMoMCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuIC8vIHVwZGF0ZSB0aGUgcmVzcG9uc2UgcmVjb3Jkc1xuIGV4cG9ydCBmdW5jdGlvbiBzZXRVcGRhdGVkUmVjb3JkKHJlY29yZHM6IGFueVtdLCByb3dEYXRhOiBhbnksIGRhdGFLZXk6IHN0cmluZyk6IGFueVtde1xuICBjb25zdCBpbmRleCA9IHJlY29yZHM/LmZpbmRJbmRleCgocmVjb3JkKT0+IHJlY29yZFtkYXRhS2V5Py50b0xvd2VyQ2FzZSgpXSA9PSByb3dEYXRhW2RhdGFLZXk/LnRvTG93ZXJDYXNlKCldKTtcbiAgaWYoaW5kZXggPiAtMSl7XG4gICAgcmVjb3Jkc1tpbmRleF0gPSByb3dEYXRhO1xuICB9ZWxzZXtcbiAgICByZWNvcmRzLnB1c2gocm93RGF0YSk7XG4gIH1cbiAgcmV0dXJuIHJlY29yZHM7XG59XG5cbi8vY29udmVydCB0aGUgdGltZSBpbnRvIGRhdGVcbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lSW5EYXRlKHRpbWU6IGFueSkge1xuICBjb25zdCBjb252ZXJ0VGltZTEydG8yNCA9ICh0aW1lMTJoOiBhbnkpID0+IHtcbiAgICBjb25zdCBbdGltZSwgbW9kaWZpZXJdID0gdGltZTEyaD8udG9TdHJpbmcoKT8uc3BsaXQoJyAnKTtcbiAgICBsZXQgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWU/LnNwbGl0KCc6Jyk7XG4gICAgaWYgKGhvdXJzID09PSAnMTInKSB7XG4gICAgICBob3VycyA9ICcwMCc7XG4gICAgfVxuICAgIGlmIChtb2RpZmllciA9PT0gJ1BNJykge1xuICAgICAgaG91cnMgPSBwYXJzZUludChob3VycywgMTApICsgMTI7XG4gICAgfVxuICAgIHJldHVybiBgJHtob3Vyc306JHttaW51dGVzfWA7XG4gIH07XG4gIGNvbnN0IGRhdGUgPSBjb252ZXJ0VGltZTEydG8yNCh0aW1lKTtcbiAgY29uc3QgdGVtcERhdGUgPSBuZXcgRGF0ZSgnSnVseSAxLCAxOTk5LCAnICsgZGF0ZSArICc6MDAnKTtcbiAgY29uc3QgZnV0dXJlRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGZ1dHVyZURhdGUuc2V0VGltZSh0ZW1wRGF0ZS5nZXRUaW1lKCkpO1xuICByZXR1cm4gZnV0dXJlRGF0ZTtcbn1cblxuLy8gcmV0dXJuIHRoZSBkYXRhIG9mIHRoZSBmaWVsZCBcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZERhdGEoeyBmb3JtU2VjdGlvbnMgfTogYW55LCBmaWVsZDogc3RyaW5nKXtcbiAgbGV0IGRhdGE6IGFueSA9IFtdXG4gIGlmKGZvcm1TZWN0aW9ucz8ubGVuZ3RoID4gMCAmJiBmaWVsZCl7XG4gICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb246IGFueSk9PntcbiAgICAgIGlmKHNlY3Rpb24uZmllbGRzLnNvbWUoKGZvcm1GaWVsZDphbnkpPT4gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZpZWxkLnRvTG93ZXJDYXNlKCkpKXtcbiAgICAgICAgZGF0YT1zZWN0aW9uLmZpZWxkcy5maW5kKChmb3JtRmllbGQ6YW55KT0+IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PSBmaWVsZC50b0xvd2VyQ2FzZSgpKT8uZGF0YVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbGxGb3JtRmllbGRzVmFsdWVzKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIHByb3BzOiBJRmlsdGVyRGljdGlvbmFyeVtdXG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb246IElGb3JtU2VjdGlvbikgPT4ge1xuICAgIGlmIChzZWN0aW9uKSB7XG4gICAgICBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBwcm9wcy5tYXAoKHByb3A6IElGaWx0ZXJEaWN0aW9uYXJ5KSA9PiB7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIChmb3JtRmllbGRbcHJvcC5wcm9wTmFtZV0gPSBwcm9wLnByb3BWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8vIHJldHVybnMgdGhlIHJlc3BvbnNlIGhlYWRlciBmaWxlTmFtZVxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3BvbnNlSGVhZGVyRmlsZU5hbWUocmVzcG9uc2Upe1xuICBjb25zdCBoZWFkZXIgPSByZXNwb25zZT8uaGVhZGVycz8uZ2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJyk7XG4gIHJldHVybiBoZWFkZXI/LnNwbGl0KCdmaWxlbmFtZT0nKT8uWzFdPy5zcGxpdChcIjtcIilbMF0/LnJlcGxhY2VBbGwoL1xcXCIvZywgJycpO1xufVxuXG4gZXhwb3J0IGZ1bmN0aW9uIGRyYWdnYWJsZURpYWxvZyhpZDphbnkpe1xuICAgIGNvbnN0IGRpYWxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nJylcbiAgICBkaWFsb2dbMF0/LnNldEF0dHJpYnV0ZSgnaWQnLCdteWRpdicgKyBpZClcbiAgICBjb25zdCBkaWFsb2doZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwLWRpYWxvZy1oZWFkZXInKVxuICAgIGRpYWxvZ2hlYWRlclswXT8uc2V0QXR0cmlidXRlKCdpZCcsJ215ZGl2aGVhZGVyJyArIGlkKVxuICAgIGNvbnN0IGVsbW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215ZGl2JyArIGlkKTtcblxuICAgICAgbGV0IHBvczEgPSAwLFxuICAgICAgICBwb3MyID0gMCxcbiAgICAgICAgcG9zMyA9IDAsXG4gICAgICAgIHBvczQgPSAwO1xuICBcbiAgICAgIGNvbnN0IGRyYWdNb3VzZURvd24gPSAoZSkgPT4ge1xuICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgICAgIHBvczMgPSBlLmNsaWVudFg7XG4gICAgICAgIHBvczQgPSBlLmNsaWVudFk7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IGNsb3NlRHJhZ0VsZW1lbnQ7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZWxlbWVudERyYWc7XG4gICAgICB9O1xuICBcbiAgICAgIGNvbnN0IGVsZW1lbnREcmFnID0gKGUpID0+IHtcbiAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuICAgICAgICBwb3MxID0gcG9zMyAtIGUuY2xpZW50WDtcbiAgICAgICAgcG9zMiA9IHBvczQgLSBlLmNsaWVudFk7XG4gICAgICAgIHBvczMgPSBlLmNsaWVudFg7XG4gICAgICAgIHBvczQgPSBlLmNsaWVudFk7XG4gICAgICAgIGVsbW50LnN0eWxlLnRvcCA9IGVsbW50Py5vZmZzZXRUb3AgLSBwb3MyICsgJ3B4JztcbiAgICAgICAgZWxtbnQuc3R5bGUubGVmdCA9IGVsbW50Py5vZmZzZXRMZWZ0IC0gcG9zMSArICdweCc7XG4gICAgICB9O1xuICBcbiAgICAgIGNvbnN0IGNsb3NlRHJhZ0VsZW1lbnQgPSAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gbnVsbDtcbiAgICAgIH07XG4gIFxuICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWRpdmhlYWRlcicgKyBpZCkpIHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215ZGl2aGVhZGVyJyArIGlkKS5vbm1vdXNlZG93biA9IGRyYWdNb3VzZURvd247XG4gICAgICB9IGVsc2UgaWYoZWxtbnQpIHtcbiAgICAgICAgZWxtbnQub25tb3VzZWRvd24gPSBkcmFnTW91c2VEb3duO1xuICAgICAgfVxuICAgIH0gIFxuZXhwb3J0IGZ1bmN0aW9uIGNhbGVuZGFyTWluTWF4VmFsdWUoaXRlbTogYW55LHZhbHVlOiBhbnksIGluZGV4KXtcbiAgbGV0IHZhbGlkYXRpb246IHN0cmluZyA9ICdlcXVhbCc7XG4gIHZhciB2YWxpZERhdGUgPSBuZXcgRGF0ZShpdGVtLnZhbGlkYXRpb25zW2luZGV4XS5leHByZXNzaW9uKTtcbiAgdmFyIGN1cnJlbnREYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICBpZiAodmFsaWREYXRlLmdldFRpbWUoKSA8IGN1cnJlbnREYXRlLmdldFRpbWUoKSl7XG4gICAgdmFsaWRhdGlvbiA9ICdncmVhdGVyJztcbiAgfVxuICBlbHNlIGlmICh2YWxpZERhdGUuZ2V0VGltZSgpID4gY3VycmVudERhdGUuZ2V0VGltZSgpKXtcbiAgICB2YWxpZGF0aW9uID0gJ21pbmltdW0nO1xuICB9XG4gIHJldHVybiB2YWxpZGF0aW9uO1xufVxuLyogI2VuZHJlZ2lvbiAqL1xuIl19
|
|
1125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzdDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxHQU1WLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQiw0QkFBNEI7QUFFNUI7Ozs7Ozs7R0FPRztBQUNGLElBQUksV0FBVyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDckMsSUFBSSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNuQyxJQUFJLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBQ3RDLElBQUksU0FBUyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDbkMsSUFBSSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNyQyxJQUFJLGVBQWUsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBRTFDLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxXQUFnQjtJQUNqRCxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3JDLENBQUM7QUFDRCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BDLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBUTtJQUN4QyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUMs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LFVBQVUsbUJBQW1CLENBQUMsSUFBUyxFQUFDLEtBQVUsRUFBRSxLQUFLO0lBQzdELElBQUksVUFBVSxHQUFXLE9BQU8sQ0FBQztJQUNqQyxJQUFJLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdELElBQUksV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBQztRQUM5QyxVQUFVLEdBQUcsU0FBUyxDQUFDO0tBQ3hCO1NBQ0ksSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFDO1FBQ25ELFVBQVUsR0FBRyxTQUFTLENBQUM7S0FDeEI7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBQ0QsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IElEaWN0aW9uYXJ5LCBJRmlsdGVyRGljdGlvbmFyeSB9IGZyb20gJy4uL21vZGVscy9jb21tb24ubW9kZWwnO1xuaW1wb3J0IHtcbiAgRUZvcm1hdFR5cGUsXG4gIEVGb3JtQ29udHJvbCxcbiAgRUh5cGVybGluayxcbiAgRU1hdGNoTW9kZSxcbiAgRU9wZXJhdG9yLFxuICBJRHluYW1pY0NhcmQsXG4gIElEeW5hbWljRm9ybSxcbiAgSUZvcm1hdCxcbiAgSUZvcm1GaWVsZCxcbiAgSUZvcm1TZWN0aW9uLFxufSBmcm9tICcuLi9tb2RlbHMvZm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBhZGRHbG9iYWxGaWx0ZXIsIEVHcmlkQ29sdW1uVHlwZSwgSUdsb2JhbEZpbHRlciwgSUdyaWRDb2x1bW4sIElHcmlkRmlsdGVyIH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQubW9kZWwnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKiAjcmVnaW9uIHB1YmxpYyBtZXRob2RzICovXG5cbi8qKlxuICpcbiAqIEBwYXJhbSB2YWx1ZSA6IGFueVxuICogRnVuY3Rpb24gcmVjZWl2ZXMgdGhlIHZhbHVlIGFuZCBleHBlY3RzIHRoZSB2YWx1ZSB0byBiZSBmb3JtYXRlZC5cbiAqIERvIG5vdCB1c2UgZmF0IGFycm93IGZ1bmN0aW9uIGFzIHRoZXkgZG8gbm90IHByZXNlcnZlIHRoZSBjb250ZXh0LlxuICogdGhpcy52YWx1ZSByZWZlcnMgdG8gdGhlIHZhbHVlIG9mIElGb3JtRmllbGQgT2JqZWN0XG4gKiBNb2RpZnkgdGhpcy52YWx1ZSBkaXJlY3RseSB0byByZWNlaXZlIGVmZmVjdFxuICovXG4gdmFyIHNwbGl0U2NyZWVuID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciBmb3Jtc3RhdGUgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIGNvbHVtbnNTdGF0ZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgY2FyZFN0YXRlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciByb3V0ZUNoYW5nZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgZmlsdGVyQnRuQ2hhbmdlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlQ29sdW1uc1N0YXRlKHBhZ2VTZXR0aW5nOiBhbnkpIHtcbiAgY29sdW1uc1N0YXRlLm5leHQocGFnZVNldHRpbmcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25Db2x1bW5zU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBjb2x1bW5zU3RhdGUuYXNPYnNlcnZhYmxlKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gb25TY3JlZW5TcGxpdENoYW5nZSAoKXtcbiAgcmV0dXJuIHNwbGl0U2NyZWVuLmFzT2JzZXJ2YWJsZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZVNwbGl0U2NyZWVuKG1lbnVJdGVtKXtcbiAgc3BsaXRTY3JlZW4ubmV4dCh7b3JpZ0NvbXBvbmVudDogbWVudUl0ZW0ub3JpZ0NvbXBvbmVudCwgcGFuZWxDb21wb25lbnQ6IG1lbnVJdGVtPy5jb21wb25lbnQsIGNvbmZpZ0RhdGE6bWVudUl0ZW0/LmRhdGE/LmRhdGF9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUR5bmFtaWNGb3JtU3RhdGUoaWQ6IGFueSwgZGF0YTogYW55LCBsb2FkQ29tcG9uZW50PzogYW55KSB7XG4gIGZvcm1zdGF0ZS5uZXh0KHsgaWQsIGRhdGEsIGxvYWRDb21wb25lbnQgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkR5bmFtaWNGb3JtU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBmb3Jtc3RhdGUuYXNPYnNlcnZhYmxlKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gb25HbG9iYWxGaWx0ZXJDb250cm9sUmlnaHRCdG4oc3RhdGVWYWx1ZSkge1xuICBmaWx0ZXJCdG5DaGFuZ2UubmV4dChzdGF0ZVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uR2xvYmFsRmlsdGVyQ29udHJvbFJpZ2h0QnRuU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBmaWx0ZXJCdG5DaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvblJvdXRlQ2hhbmdlRXZlbnQoKSB7XG4gIHJldHVybiByb3V0ZUNoYW5nZS5hc09ic2VydmFibGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdXRlQ2hhbmdlRXZlbnQoKSB7XG4gIHJvdXRlQ2hhbmdlLm5leHQoKTtcbn1cblxuIGV4cG9ydCBmdW5jdGlvbiBvbkR5bmFtaWNDYXJkU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBjYXJkU3RhdGUuYXNPYnNlcnZhYmxlKCk7XG4gfVxuXG4gZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUR5bmFtaWNDYXJkU3RhdGUoZGF0YTogYW55KSB7XG4gIGNhcmRTdGF0ZS5uZXh0KHsgZGF0YSB9KTtcbn1cblxuIGV4cG9ydCBmdW5jdGlvbiBjbG9zZUlGcmFtZSgpe1xuICBsZXQgY2xvc2UgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLWRpYWxvZy1oZWFkZXItaWNvbicpYXMgSFRNTEVsZW1lbnRcbiAgaWYoY2xvc2UpIHtcbiAgICBjbG9zZS5jbGljaygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0RlY2ltYWwodmFsdWU6IGFueSk6IGFueSB7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlLnRvU3RyaW5nKCkpLnRvRml4ZWQoMik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQm9vbGVhbih2YWx1ZTogYW55KSB7XG4gIHJldHVybiB2YWx1ZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3knID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TaG9ydERhdGUodmFsdWU6IGFueSwgZm9ybWF0PzogSUZvcm1hdCkge1xuICBpZiAodmFsdWUgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgaWYgKFxuICAgICAgZm9ybWF0ICYmXG4gICAgICAoZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLkxPTkdEQVRFIHx8XG4gICAgICAgIGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5NRURJVU1EQVRFKVxuICAgICkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSwgJ01NL2RkL3l5eXknLCAnZW4tVVMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU2hvcnREYXRlVGltZSh2YWx1ZTogYW55LCBmb3JtYXQ/OiBJRm9ybWF0KSB7XG4gIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJycgJiYgdmFsdWU/LnRvU3RyaW5nKCkgIT0gXCJJbnZhbGlkIERhdGVcIikge1xuICAgIGlmIChcbiAgICAgIGZvcm1hdCAmJlxuICAgICAgKGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5MT05HREFURSB8fFxuICAgICAgICBmb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuTUVESVVNREFURSlcbiAgICApIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZvcm1hdERhdGUodmFsdWUsICdNTS9kZC95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERpYWxvZ0RhdGEoY29sdW1uczpJR3JpZENvbHVtbltdLCBmaWVsZE5hbWU6c3RyaW5nLCB2YWx1ZTphbnkpe1xuICBjb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pPT57XG4gICAgICBpZihjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSAmJiBjb2x1bW4uY29tcG9uZW50KXtcbiAgICAgICAgbGV0IGtleXM9T2JqZWN0LmtleXModmFsdWUpO1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleSk9PntcbiAgICAgICAgICBjb2x1bW4uZGF0YS5kYXRhPXsuLi5jb2x1bW4uZGF0YT8uZGF0YSwgW2tleV06dmFsdWVba2V5XX07XG4gICAgICAgIH0pXG4gICAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1RyaW0odGV4dDogYW55KSB7XG4gIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGV4dC50cmltKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1hdGNoS2V5KG9iajogYW55LCBwcm9wTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFvYmogfHwgIXByb3BOYW1lKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgbGV0IG1hdGNoZWRLZXkgPSAnJztcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIG9iai5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IGFueVtdID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgIGlmICghbWF0Y2hlZEtleSB8fCBtYXRjaGVkS2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBtYXRjaGVkS2V5ID0ga2V5cy5maW5kKFxuICAgICAgICAgICh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHByb3BOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBrZXlzOiBhbnlbXSA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgbWF0Y2hlZEtleSA9IGtleXMuZmluZCgoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVkS2V5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Rm9ybUZpZWxkVmFsdWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkLCB2YWx1ZTogYW55KTogYW55IHtcbiAgbGV0IGZvcm1hdHRlZFZhbHVlOiBhbnkgPSB2YWx1ZTtcbiAgaWYgKGZvcm1GaWVsZC5mb3JtYXQpIHtcbiAgICBzd2l0Y2ggKGZvcm1GaWVsZC5mb3JtYXQudHlwZSkge1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5ERUNJTUFMOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvRGVjaW1hbCh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5CT09MRUFOX1lOOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5TSE9SVERBVEU6XG4gICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdG9TaG9ydERhdGUodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZvcm1hdFR5cGUuQ1VTVE9NOlxuICAgICAgICBpZiAoZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0dGVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0dGVkVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGb3JtRmllbGQgKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZvcm1GaWVsZE9iajogSUZvcm1GaWVsZFxuKSB7XG4gIHJldHVybiBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIHJldHVybiAoc2VjdGlvbi5maWVsZHMgPSBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZvcm1GaWVsZE9iai5maWVsZD8udG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAoZm9ybUZpZWxkLmxhYmVsICYmIGZvcm1GaWVsZC5sYWJlbCA9PT0gZm9ybUZpZWxkT2JqLmxhYmVsKVxuICAgICAgKSB7XG4gICAgICAgIGZvcm1GaWVsZCA9IGZvcm1GaWVsZE9iajtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtRmllbGQ7XG4gICAgfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGlua0NvbXBvbmVudERhdGEgKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGxhYmVsOiBzdHJpbmcsXG4gIGRhdGE6IGFueVxuKXtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgY29uc3QgZmllbGQgPSBzZWN0aW9uLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQubGFiZWwgJiYgKHR5cGVvZiAoZmllbGQubGFiZWwpID09IFwib2JqZWN0XCIgPyBmaWVsZC5sYWJlbD8ubmFtZSA9PSBsYWJlbCA6IGZpZWxkLmxhYmVsID09PSBsYWJlbCkpXG4gICAgaWYgKGZpZWxkICYmIHR5cGVvZiAoZmllbGQubGFiZWwpID09IFwib2JqZWN0XCIgJiYgZmllbGQubGFiZWwubGFiZWxDb250cm9sPy5oeXBlcmxpbmspIHtcbiAgICAgIGZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zID0gZGF0YTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkICYmIGZpZWxkLmh5cGVybGluaykge1xuICAgICAgZmllbGQuaHlwZXJsaW5rLnBhcmFtcyA9IGRhdGE7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEF1dG9Db21wbGV0ZURhdGEoXG4gIHZhbHVlczogYW55W10sXG4gIHVuaXF1ZUlkOiBhbnksXG4gIGxhYmVsS2V5OiBzdHJpbmcsXG4gIFZhbHVlS2V5OiBzdHJpbmcsXG4pe1xuICBpZih2YWx1ZXM/Lmxlbmd0aCA+IDApe1xuICAgIHZhbHVlcyA9IHZhbHVlcz8ubWFwKChyb3dWYWx1ZSkgPT4gKHtbbGFiZWxLZXldOiByb3dWYWx1ZSwgW1ZhbHVlS2V5XTogdW5pcXVlSWR9KSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldExvb2t1cERhdGEoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgZGF0YTogYW55XG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb246IElGb3JtU2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLm1hcCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGEgJiZcbiAgICAgICAgICBkYXRhXG4gICAgICAgICkge1xuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtRmllbGQubG9va3VwQ29udHJvbCAmJiBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhICYmIGRhdGEpIHtcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybVNlY3Rpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2lkZWJhckxpbmtQYXJhbVZhbHVlcyhsaW5rOiBzdHJpbmcsIHBhcmFtczogYW55W10pOiBzdHJpbmcge1xuICBsZXQgbmV3TGluazogc3RyaW5nID0gbGluaztcbiAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoID4gMCkge1xuICAgIHBhcmFtcy5tYXAoKHBhcmFtKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSBwYXJhbS5uYW1lID8gJ3t7JyArIHBhcmFtLm5hbWUgKyAnfX0nIDogJyc7XG4gICAgICBpZiAobmV3TGluay5sb2NhbGVDb21wYXJlKHVybCkpIHtcbiAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHVybCwgJ2lnJyksIHRvVHJpbShwYXJhbS52YWx1ZSkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdMaW5rO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTmV3RmllbGRJbkZvcm0oZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSwgc2VjdGlvbk5hbWU6c3RyaW5nLCBmb3JtRmllbGQ6SUZvcm1GaWVsZCl7XG4gIGNvbnN0IHNlY3Rpb24gPSBkeW5hbWljRm9ybT8uZm9ybVNlY3Rpb25zPy5maW5kKChzZWN0aW9uKT0+IHNlY3Rpb24ubmFtZSA9PT0gc2VjdGlvbk5hbWUpO1xuICBpZihzZWN0aW9uKXtcbiAgICBzZWN0aW9uLmZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gIH1cbiAgcmV0dXJuIGR5bmFtaWNGb3JtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Rm9ybUZpZWxkcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmb3JtRmllbGRzOiBJRm9ybUZpZWxkW11cbikge1xuICByZXR1cm4gZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICByZXR1cm4gKHNlY3Rpb24uZmllbGRzID0gc2VjdGlvbi5maWVsZHMubWFwKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGxldCBtYXRjaGVkRmllbGQgPSBmb3JtRmllbGRzLmZpbmQoXG4gICAgICAgICh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGVkRmllbGQpIHtcbiAgICAgICAgZm9ybUZpZWxkID0gbWF0Y2hlZEZpZWxkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1GaWVsZDtcbiAgICB9KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsRmlsdGVycyhcbiAgZ2xvYmFsRmlsdGVyczogYWRkR2xvYmFsRmlsdGVyW10sXG4gIGZpZWxkOiBzdHJpbmcsXG4pIHtcbiAgbGV0IGZvcm1GaWVsZE9iajogYW55O1xuICBnbG9iYWxGaWx0ZXJzLm1hcCgoZmlsdGVyKT0+e1xuICAgIGlmIChmaWx0ZXIuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBmb3JtRmllbGRPYmogPSBmaWx0ZXI7XG4gICAgICB9XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkT2JqO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmb3JtQ29udHJvbDogRUZvcm1Db250cm9sXG4pOiBJRm9ybUZpZWxkW10ge1xuICBsZXQgZm9ybUZpZWxkczogSUZvcm1GaWVsZFtdID0gW107XG4gIGZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBmb3JtQ29udHJvbCkge1xuICAgICAgICBpZiAodHlwZW9mKGZvcm1GaWVsZC52YWx1ZSkgPT09ICdvYmplY3QnICYmIGZvcm1GaWVsZC52YWx1ZT8udGV4dCAmJiB0eXBlb2YoZm9ybUZpZWxkLnZhbHVlLnRleHQpID09PSAnc3RyaW5nJylcbiAgICAgICAge1xuICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtRmllbGQudmFsdWUudGV4dC50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIHR5cGVvZihmb3JtRmllbGQudmFsdWUpID09PSAnc3RyaW5nJylcbiAgICAgICAge1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1GaWVsZC52YWx1ZS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybUZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZChcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmaWVsZDogc3RyaW5nXG4pOiBJRm9ybUZpZWxkIHtcbiAgbGV0IGZvcm1GaWVsZE9iajogYW55O1xuICBmb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGZvcm1GaWVsZE9iaiA9IGZvcm1GaWVsZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBmb3JtRmllbGRPYmo7XG59XG5cbi8vIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIHJldHVybiBhIHZhbHVlIG9mIHRoZSBmaWVsZC4gSWYgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWUgaXMgdHJ1ZSBhbmQgZGlzcGxheUZpZWxkXG4vLyBleGlzdCBpbiB0aGUgZmllbGQgdGhlbiBhbHdheXMgcmV0dXJuIGEgZGlzcGxheUZpZWxkIHZhbHVlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZFZhbHVlKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlOmJvb2xlYW4gPSBmYWxzZVxuKSB7XG4gIGxldCB2YWx1ZTtcbiAgZm9yIChjb25zdCBzZWN0aW9uIG9mIGZvcm1TZWN0aW9ucyBhcyBhbnkpIHtcbiAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgbGV0IGlzVmFsaWQgPSB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0JyAmJiBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTE9PS1VQX0lOUFVUIHx8IGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQpICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZFxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSA9IGlzVmFsaWQgPyBmb3JtRmllbGQudmFsdWU/LnRleHQgOiBmb3JtRmllbGQudmFsdWU/LnZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gaXNWYWxpZFxuICAgICAgICAgICAgPyBmb3JtRmllbGQudmFsdWU/LnRleHRcbiAgICAgICAgICAgIDogdHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCcgJiYgZm9ybUZpZWxkLmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJiBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLk1VTFRJU0VMRUNUXG4gICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZT8udmFsdWVcbiAgICAgICAgICAgIDogZm9ybUZpZWxkLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkVmFsdWVBc1N0cmluZyhkeW5hbWljRm9ybTpJRHluYW1pY0Zvcm0sZmllbGQ6c3RyaW5nKTpzdHJpbmd7XG4gIGxldCB2YWx1ZTphbnkgPSBnZXRGb3JtRmllbGRWYWx1ZShkeW5hbWljRm9ybSxmaWVsZCwgdHJ1ZSk7XG4gIGlmICh2YWx1ZSl7XG4gICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgfVxuICAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VjdGlvbkZpZWxkVmFsdWUoXG4gIGZvcm1TZWN0aW9uczogSUZvcm1TZWN0aW9uW10sXG4gIGZpZWxkOiBzdHJpbmdcbikge1xuICBsZXQgZm9ybTogSUR5bmFtaWNGb3JtID0geyBmb3JtU2VjdGlvbnMgfTtcbiAgcmV0dXJuIGdldEZvcm1GaWVsZFZhbHVlKGZvcm0sIGZpZWxkLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNhdmVGb3JtVmFsdWVzKFxuICBmb3JtU2VjdGlvbnM6IElGb3JtU2VjdGlvbltdLFxuICB0YWJsZXM/OiBzdHJpbmdbXSxcbikge1xuICBsZXQgc2VjdGlvbkZpZWxkczogYW55O1xuICBsZXQgcmVzcG9uc2U6IGFueSA9IHt9O1xuICBpZiAodGFibGVzICYmIHRhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgdGFibGVzLmZvckVhY2goKHRhYmxlTmFtZSkgPT4ge1xuICAgICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzZWN0aW9uRmllbGRzID0gZm9ybVNlY3Rpb24uZmllbGRzPy5maWx0ZXIoeCA9PiB4LmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQVJEKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uaGVhZGVyRmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2VjdGlvbkZpZWxkcyA9IGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcz8uZmlsdGVyKHggPT4geC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICAgIH1cbiAgICAgICAgICBzZWN0aW9uRmllbGRzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhYmxlID0gZmllbGQudGFibGVzPy5tYXAoKHRhYmxlKSA9PiB0YWJsZS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgIGlmICh0YWJsZSAmJiB0YWJsZS5pbmNsdWRlcyh0YWJsZU5hbWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2VbdGFibGVOYW1lXSkge1xuICAgICAgICAgICAgICByZXNwb25zZVt0YWJsZU5hbWVdID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5maWVsZCAmJiBmaWVsZC5maWVsZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlW3RhYmxlTmFtZV1bZmllbGQuZmllbGRdID0gZm9ybWF0Rm9ybUZpZWxkQ1ZhbHVlKGZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlY3Rpb25GaWVsZHMgPSBmb3JtU2VjdGlvbi5maWVsZHM/LmZpbHRlcih4ID0+IHguY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBUkQpO1xuICAgICAgfVxuICAgICAgaWYgKGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWN0aW9uRmllbGRzID0gZm9ybVNlY3Rpb24uaGVhZGVyRmllbGRzPy5maWx0ZXIoeCA9PiB4LmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQVJEKTtcbiAgICAgIH1cbiAgICAgIHNlY3Rpb25GaWVsZHM/LmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIGlmIChmaWVsZC5maWVsZCAmJiBmaWVsZC5maWVsZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzcG9uc2VbZmllbGQuZmllbGRdID0gZm9ybWF0Rm9ybUZpZWxkQ1ZhbHVlKGZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTYXZlQ2FyZFZhbHVlcyhcbiAgZm9ybVNlY3Rpb25zOiBJRm9ybVNlY3Rpb25bXSxcbiAgdGFibGVzPzogc3RyaW5nW11cbikge1xuICBsZXQgdmFsdWVzOiBJRm9ybUZpZWxkW10gPSBbXTtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgc2VjdGlvbi5maWVsZHM/LmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCAmJiBmaWVsZC5jYXJkLmRhdGEpIHtcbiAgICAgICAgZmllbGQuY2FyZC5kYXRhLmZvckVhY2goKGNhcmREYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY2FyZERhdGEuZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChcbiAgICAgICAgICAgICAgc2V0U2F2ZUZvcm1WYWx1ZXMoY2FyZERhdGEuZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zLCB0YWJsZXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHMoZGF0YTogYW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtKSB7XG4gIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCAmJiBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgZGF0YS5mb3JFYWNoKChkYXRhUm93KSA9PiB7XG4gICAgICBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YVJvdywgZHluYW1pY0Zvcm0sIGRhdGEpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHNldEVkaXRGb3JtRmllbGRzSW5mbyhkYXRhLCBkeW5hbWljRm9ybSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlcihcbiAgZmllbGQ6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgbWF0Y2hNb2RlOiBFTWF0Y2hNb2RlID0gRU1hdGNoTW9kZS5FUVVBTFMsXG4gIG9wZXJhdG9yOiBFT3BlcmF0b3IgPSBFT3BlcmF0b3IuQU5ELFxuKSB7XG4gIGNvbnN0IGZpbHRlcjogYW55ID0ge1xuICAgIGZpZWxkOiBmaWVsZCxcbiAgICBtYXRjaE1vZGU6IG1hdGNoTW9kZSxcbiAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgdmFsdWU6IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgKHZhbHVlPy52YWx1ZSB8fCB2YWx1ZT8udGV4dCkgPyB2YWx1ZT8udmFsdWUgOiAodmFsdWUgfHwgdmFsdWUgPT0gJycpID8gdmFsdWUgOiBudWxsLFxuICB9O1xuICByZXR1cm4gZmlsdGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5kRmlsdGVyKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHNldEZpbHRlcihmaWVsZCwgdmFsdWUsIEVNYXRjaE1vZGUuRVFVQUxTLCBFT3BlcmF0b3IuQU5EKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JpZ0RhdGFGaWVsZFZhbHVlKGRhdGE6IGFueSwgcHJvcE5hbWU6IHN0cmluZyk6IGFueSB7XG4gIGxldCB2YWx1ZTogYW55O1xuICBpZiAoZGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBnZXRQcm9wZXJ0eVZhbHVlKGRhdGFbaV0sIHByb3BOYW1lKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gZ2V0UHJvcGVydHlWYWx1ZShkYXRhLCBwcm9wTmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9yaWdEYXRhRmllbGRWYWx1ZUFzU3RyaW5nKFxuICBkYXRhOiBhbnksXG4gIHByb3BOYW1lOiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGxldCB2YWx1ZSA9IGdldE9yaWdEYXRhRmllbGRWYWx1ZShkYXRhLCBwcm9wTmFtZSk7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2VjdGlvblByb3BWYWx1ZXMoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgc2VjdGlvbk5hbWU6IHN0cmluZyxcbiAgcHJvcHM6IElEaWN0aW9uYXJ5W11cbikge1xuICBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIGlmIChzZWN0aW9uLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHNlY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICByZXR1cm4gc2V0UHJvcFZhbHVlKHNlY3Rpb24sIHByb3ApO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyogI2VuZHJlZ2lvbiAqL1xuXG4vKiAjcmVnaW9uIHByaXZhdGUgbWV0aG9kcyAqL1xuXG5mdW5jdGlvbiBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YTogYW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtIHwgSUR5bmFtaWNDYXJkLCBhbGxEYXRhOiBhbnlbXSA9IFtdKSB7XG4gIGlmIChkYXRhLnJlY29yZHMgJiYgZGF0YS5yZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICBkYXRhLnJlY29yZHMuZm9yRWFjaCgocmVjb3JkOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVjb3JkKTtcbiAgICAgIGR5bmFtaWNGb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgICBzZXRFZGl0Rm9ybUZpZWxkc1ZhbHVlKGRhdGEsIGZvcm1TZWN0aW9uPy5maWVsZHMsIGtleXMsIHJlY29yZCwgYWxsRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcykge1xuICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzVmFsdWUoZGF0YSwgZm9ybVNlY3Rpb24/LmhlYWRlckZpZWxkcywga2V5cywgcmVjb3JkLCBhbGxEYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHNWYWx1ZShkYXRhOiBhbnksIGZvcm1GaWVsZHM6IGFueSwga2V5czogYW55LCByZWNvcmQ6IGFueSwgYWxsRGF0YTogYW55KXtcbiAgZm9ybUZpZWxkcz8uZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICBjb25zdCBtYXRjaGVkS2V5OiBhbnkgPSBrZXlzLmZpbmQoXG4gICAgICAoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICApO1xuXG4gICAgaWYgKG1hdGNoZWRLZXkpIHtcbiAgICAgIC8vIHNldCBsYWJlbCBoeXBlcmxpbmtcbiAgICAgIHNldExhYmVsSHlwZXJsaW5rKGZvcm1GaWVsZCwgcmVjb3JkLCBrZXlzLCBhbGxEYXRhLCBtYXRjaGVkS2V5KTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkhZUEVSTElOSyAmJlxuICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgKChmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmtJZCAmJiBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcykgfHxcbiAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rKVxuICAgICkge1xuICAgICAgbGV0IHBhcmFtcyA9IGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zO1xuICAgICAgbGV0IHBhcmFtS2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgICAgaWYgKFxuICAgICAgICAhcGFyYW1zICYmXG4gICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluayAmJlxuICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsuaW5jbHVkZXMoJ319JylcbiAgICAgICkge1xuICAgICAgICBwYXJhbUtleXMgPSBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsuc3BsaXQoJ319Jyk7XG4gICAgICAgIHBhcmFtS2V5cyA9IHBhcmFtS2V5cy5tYXAoKHBhcmFtS2V5KSA9PiB7XG4gICAgICAgICAgcGFyYW1LZXkgPSBwYXJhbUtleS5yZXBsYWNlKCd7eycsICcnKS50cmltKCk7XG4gICAgICAgICAgcmV0dXJuIHBhcmFtS2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLmZpbHRlcigoeCkgPT4geC5sZW5ndGggPiAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKHBhcmFtcyl7XG4gICAgICAgICAgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoXG4gICAgICAgIGtleXMsXG4gICAgICAgIHJlY29yZCxcbiAgICAgICAgZm9ybUZpZWxkLm9yaWduYWxMaW5rLFxuICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zLFxuICAgICAgICBhbGxEYXRhXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rICYmXG4gICAgICAoKGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LmxpbmtJZCAmJiBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5wYXJhbXMpIHx8XG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LmxpbmspXG4gICAgKSB7XG4gICAgICBsZXQgcGFyYW1zID0gZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ucGFyYW1zO1xuICAgICAgbGV0IHBhcmFtS2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgIGlmICghcGFyYW1zICYmXG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbmsubGluayAmJlxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rLmluY2x1ZGVzKCd9fScpXG4gICAgICApIHtcbiAgICAgICAgcGFyYW1LZXlzID0gZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ubGluay5zcGxpdCgnfX0nKTtcbiAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLm1hcCgocGFyYW1LZXkpID0+IHtcbiAgICAgICAgICBwYXJhbUtleSA9IHBhcmFtS2V5LnJlcGxhY2UoJ3t7JywgJycpLnRyaW0oKTtcbiAgICAgICAgICByZXR1cm4gcGFyYW1LZXk7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJhbUtleXMgPSBwYXJhbUtleXMuZmlsdGVyKCh4KSA9PiB4Lmxlbmd0aCA+IDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgIHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluayA9IHNldEh5cGVybGluayhcbiAgICAgICAga2V5cyxcbiAgICAgICAgcmVjb3JkLFxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rLFxuICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgYWxsRGF0YVxuICAgICAgKTtcbiAgICB9XG4gICAgXG4gICAgZWxzZSB7XG4gICAgICBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJiBtYXRjaGVkS2V5KSB7XG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1GaWVsZC50aW1lT25seSA/IHJlY29yZFttYXRjaGVkS2V5XSA6IHJlY29yZFttYXRjaGVkS2V5XVxuICAgICAgICAgID8gbmV3IERhdGUocmVjb3JkW21hdGNoZWRLZXldIGFzIHN0cmluZylcbiAgICAgICAgICA6ICcnO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCkge1xuICAgICAgICAgIGlmIChmb3JtRmllbGQuY2FyZCAmJiBmb3JtRmllbGQuY2FyZC5mb3JtU2VjdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghZm9ybUZpZWxkLmNhcmQuZGF0YSkge1xuICAgICAgICAgICAgICBmb3JtRmllbGQuY2FyZC5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0RWRpdEZvcm1GaWVsZHNJbmZvKGRhdGEsIGZvcm1GaWVsZC5jYXJkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgIG1hdGNoZWRLZXlcbiAgICAgICkge1xuICAgICAgICBsZXQgYXJyYXlWYWx1ZSA9IFtdO1xuICAgICAgICBpZiAocmVjb3JkW21hdGNoZWRLZXldICYmIGZvcm1GaWVsZC5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICBhcnJheVZhbHVlLnB1c2goe1tmb3JtRmllbGQuZGlzcGxheUZpZWxkXSA6IHJlY29yZFttYXRjaGVkS2V5XX0pO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGFycmF5VmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTE9PS1VQX0lOUFVUIHx8IGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBvYmogPSBhdXRvU2V0TG9va3VwRGF0YShcbiAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhLmRhdGEsXG4gICAgICAgICAgICByZWNvcmRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBvYmo7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YSAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEuZGF0YVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBvYmogPSBhdXRvU2V0TG9va3VwRGF0YShcbiAgICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSxcbiAgICAgICAgICAgIHJlY29yZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gb2JqO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZihyZWNvcmRbbWF0Y2hlZEtleV0pe1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHRvVHJpbShyZWNvcmRbbWF0Y2hlZEtleV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQuZGlzcGxheUZpZWxkICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZC5sZW5ndGggPiAwXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoRGlzcGxheUZpZWxkID0gZ2V0TWF0Y2hLZXkoXG4gICAgICAgICAgICByZWNvcmQsXG4gICAgICAgICAgICBmb3JtRmllbGQuZGlzcGxheUZpZWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobWF0Y2hEaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHtcbiAgICAgICAgICAgICAgdGV4dDogdG9UcmltKHJlY29yZFttYXRjaERpc3BsYXlGaWVsZF0pLFxuICAgICAgICAgICAgICB2YWx1ZTogZm9ybUZpZWxkLnZhbHVlPy52YWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbWF0Y2hWYWx1ZUZpZWxkID0gZ2V0TWF0Y2hLZXkocmVjb3JkLCBmb3JtRmllbGQuZmllbGQpO1xuICAgICAgICAgIGlmIChtYXRjaFZhbHVlRmllbGQpIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHtcbiAgICAgICAgICAgICAgdGV4dDogZm9ybUZpZWxkLnZhbHVlPy50ZXh0LFxuICAgICAgICAgICAgICB2YWx1ZTogdG9UcmltKHJlY29yZFttYXRjaFZhbHVlRmllbGRdKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNPTVBPTkVOVCAmJlxuICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbD8uZGF0YVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHNldERhdGFGcm9tUmVjb3JkID0gZmluZEtleXNBbmRWYWx1ZShcbiAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbC5kYXRhLFxuICAgICAgICAgIHJlY29yZFxuICAgICAgICApO1xuICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbC5kYXRhID0gc2V0RGF0YUZyb21SZWNvcmQ/LmRhdGE7XG4gICAgICAgIGlmKHNldERhdGFGcm9tUmVjb3JkPy5tYXRjaERhdGEpe1xuICAgICAgICAgIGNoYW5nZUR5bmFtaWNGb3JtU3RhdGUoXG4gICAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbC5pZCxcbiAgICAgICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnRDb250cm9sPy5kYXRhLFxuICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLk5VTUVSSUMgJiZcbiAgICAgICAgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGFcbiAgICAgICkge1xuICAgICAgICBsZXQgc2V0RGF0YSA9IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbDtcbiAgICAgICAgc2V0RGF0YS5kYXRhLmRhdGEgPSBmaW5kS2V5c0FuZFZhbHVlKHNldERhdGEuZGF0YS5kYXRhLCByZWNvcmQpPy5kYXRhO1xuICAgICAgICBjaGFuZ2VEeW5hbWljRm9ybVN0YXRlKHNldERhdGEuaWQsIHNldERhdGEuZGF0YS5kYXRhLCBmYWxzZSk7XG4gICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSFlQRVJMSU5LIFxuICAgICAgICAmJiAgZm9ybUZpZWxkLmh5cGVybGluaz8udGFyZ2V0ID09PSBFSHlwZXJsaW5rLkRJQUxPRyBcbiAgICAgICAgJiYgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXNcbiAgICAgICkge1xuICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcyA9IGZpbmRLZXlzQW5kVmFsdWUoZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMsIHJlY29yZCk/LmRhdGE7XG4gICAgICB9IGVsc2UgaWYgKG1hdGNoZWRLZXkpIHtcbiAgICAgICAgaWYgKGZvcm1GaWVsZC5mb3JtYXQpIHtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtYXRGb3JtRmllbGRWYWx1ZShcbiAgICAgICAgICAgIGZvcm1GaWVsZCxcbiAgICAgICAgICAgIHJlY29yZFttYXRjaGVkS2V5XVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DSEVDS0JPWCkge1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9XG4gICAgICAgICAgICByZWNvcmRbbWF0Y2hlZEtleV0gJiZcbiAgICAgICAgICAgIChyZWNvcmRbbWF0Y2hlZEtleV0udG9TdHJpbmcoKSA9PT0gJzEnIHx8XG4gICAgICAgICAgICAgIHJlY29yZFttYXRjaGVkS2V5XS50b1N0cmluZygpID09PSAndHJ1ZScpXG4gICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICB9ZWxzZSBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5EUk9QRE9XTikge1xuICAgICAgICAgIGxldCBkcm9wVmFsdWUgPSByZWNvcmRbbWF0Y2hlZEtleV07XG4gICAgICAgICAgaWYgKGRyb3BWYWx1ZSAmJiBkcm9wVmFsdWU/LnRvU3RyaW5nKCkgIT09ICcwJykge1xuICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZHJvcFZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYoZm9ybUZpZWxkLmNvbnRyb2w9PT1FRm9ybUNvbnRyb2wuU0VMRUNUQlVUVE9OKXtcbiAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlPXRvVHJpbShyZWNvcmRbbWF0Y2hlZEtleV0pIHx8IGZvcm1GaWVsZC52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHRvVHJpbShyZWNvcmRbbWF0Y2hlZEtleV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cbi8vc2V0IGh5cGVybGluayBwYXJhbSB2YWx1ZSBhcyBmaWVsZCB2YWx1ZVxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGlua1BhcmFtVmFsdWUocmVjb3JkOmFueSwgZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSkge1xuICBsZXQga2V5czogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGxpbms6IHN0cmluZyA9Jyc7XG4gIGxldCBwYXJhbUtleXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBwYXJhbTogYW55O1xuICBsZXQgZmllbGRJbmZvOiBhbnk7XG4gICAgZHluYW1pY0Zvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XG4gICAgICBzZWN0aW9uPy5maWVsZHM/LmZvckVhY2goKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICAgIGlmKGZvcm1GaWVsZC5sYWJlbCAmJiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rPy5saW5rKXtcbiAgICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMocmVjb3JkKTtcbiAgICAgICAgICBpZihmb3JtRmllbGQ/LmxhYmVsPy5sYWJlbENvbnRyb2w/Lm9yaWduYWxMaW5rKXtcbiAgICAgICAgICAgbGluayA9IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wub3JpZ25hbExpbms7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYoZm9ybUZpZWxkPy5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LnBhcmFtcyl7XG4gICAgICAgICAgIHBhcmFtID0gZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zO1xuICAgICAgICAgICBwYXJhbUtleXMgPSBPYmplY3Qua2V5cyhwYXJhbSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpZWxkSW5mbyA9IGZvcm1GaWVsZDtcbiAgICAgICAgICBpZihyZWNvcmQgJiYga2V5cyAmJiBsaW5rICYmIHBhcmFtS2V5cyAmJiBwYXJhbSAmJiBmaWVsZEluZm8pe1xuICAgICAgICAgICAgZmllbGRJbmZvLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluayA9IHNldEh5cGVybGluayhrZXlzLCByZWNvcmQsIGxpbmssIHBhcmFtS2V5cywgcGFyYW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmpDb252ZXJ0VG9Mb3dlcihvYmo6IGFueSwgaWdub3JlQ2FzaW5nOiBib29sZWFuID0gZmFsc2UpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikucmVkdWNlKChhY2N1bXVsYXRvcjogYW55LCBrZXkpID0+IHtcbiAgICBhY2N1bXVsYXRvcltpZ25vcmVDYXNpbmcgPyBrZXkgOiBrZXkudG9Mb3dlckNhc2UoKV0gPSBvYmpba2V5XTtcbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH0sIHt9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsaWNrU2VjdGlvbkhpZ2hsaWdodCh2YWx1ZTogYW55KSB7XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sZWZ0LXNpZGVCYXIgLnAtcGFuZWxtZW51IC5wLXBhbmVsbWVudS1wYW5lbCcpO1xuICAgICAgIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvcignW3RpdGxlID0gXCInKyB2YWx1ZT8ubmFtZSArJ1wiXScpO1xuICAgICAgIGNvbnN0IGFsbE1lbnVJdGVtcyA9IGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sZWZ0LXNpZGVCYXIgLnAtcGFuZWxtZW51LXBhbmVsJyk7XG4gICAgICAgYWxsTWVudUl0ZW1zPy5mb3JFYWNoKChtZW5hdUl0ZW06IGFueSkgPT4ge1xuICAgICAgICBtZW5hdUl0ZW0/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1wYW5lbG1lbnUtcGFuZWwnKTtcbiAgICAgICB9KVxuICAgICAgICB0aXRsZT8ucGFyZW50RWxlbWVudD8ucGFyZW50RWxlbWVudD8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLXBhbmVsbWVudS1wYW5lbCBhY3RpdmUnKTtcbiAgICAgICAgdGl0bGU/LnBhcmVudEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1lbGVtZW50IHAtY29tcG9uZW50IHAtcGFuZWxtZW51LWhlYWRlciBwLWhpZ2hsaWdodCcpO1xuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUljb24gPSBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yQWxsKCcuYWN0aXZlLWljb24nKTtcbiAgYWN0aXZlSWNvbj8uZm9yRWFjaCgoaWNvbjogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICBpY29uPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVBY3RpdmVJY29uQ2xhc3MoKSB7XG4gIGNvbnN0IGFjdGl2ZUljb24gPSBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yQWxsKCcuYWN0aXZlLWljb24nKTtcbiAgaWYgKGFjdGl2ZUljb24gJiYgYWN0aXZlSWNvbi5sZW5ndGggPiAwKSB7XG4gICAgYWN0aXZlSWNvbj8uZm9yRWFjaCgoaWNvbjogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICBpY29uPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywncC1lbGVtZW50IHAtY29tcG9uZW50IHAtcGFuZWxtZW51LWhlYWRlciBwLWhpZ2hsaWdodCcpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoaWdobGlnaHRMZWZ0U2lkZWJhcigpe1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmZvcm0tY29udGFpbmVyXCIpPy5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgKCkgPT57XG4gIGNvbnN0IHNjcm9sbFRvcFBvc2l0aW9uOiBhbnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmZvcm0tY29udGFpbmVyXCIpPy5zY3JvbGxUb3A7XG4gIGNvbnN0IGFsbEljb25FbGVtZW50czogYW55ID0gZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKFwiLmxlZnQtc2lkZUJhciAucC1wYW5lbG1lbnUgLnAtcGFuZWxtZW51LXBhbmVsXCIpO1xuXG4gIGFsbEljb25FbGVtZW50cz8uZm9yRWFjaCgoaWNvbjogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgaWNvbj8uc2V0QXR0cmlidXRlKCd0YWJJbmRleCcsICdzZWN0aW9uJyArIGluZGV4KTtcbiAgfSk7XG4gICAgIHJlbW92ZUFjdGl2ZUljb25DbGFzcygpO1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5mb3JtLWNvbnRhaW5lciAuY2FyZCcpPy5mb3JFYWNoKChjYXJkOiBhbnksIGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudElkID0gXCJzZWN0aW9uXCIgKyBpbmRleDtcbiAgICAgICAgaWYgKHNjcm9sbFRvcFBvc2l0aW9uID49IGNhcmQub2Zmc2V0VG9wICYmIHNjcm9sbFRvcFBvc2l0aW9uIDw9IGNhcmQub2Zmc2V0VG9wICsgY2FyZC5vZmZzZXRIZWlnaHQpe1xuICAgICAgICAgIHJldHVybiAgZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvcignW3RhYkluZGV4PScrIGN1cnJlbnRJZCArICddJyk/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1wYW5lbG1lbnUtcGFuZWwgYWN0aXZlJyk7XG4gICAgICAgIH0gZWxzZXtcbiAgICAgICAgICByZXR1cm4gIGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJJbmRleD0nKyBjdXJyZW50SWQgKyAnXScpPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsJyk7ICAgIFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgfSk7XG4gICAgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZEtleXNBbmRWYWx1ZShkYXRhOiBhbnksIHJlY29yZDogYW55KSB7XG4gIGxldCB2YWx1ZUtleTogc3RyaW5nID0gJyc7XG4gIGxldCBzZXREYXRhRnJvbVJlY29yZCA9IGZhbHNlO1xuICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChkYXRhS2V5KSA9PiB7XG4gICAgbGV0IHZhbHVlQ29udGFpbnNLZXk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZihkYXRhW2RhdGFLZXldICYmIGRhdGFbZGF0YUtleV0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCd7Jykpe1xuICAgICAgdmFsdWVDb250YWluc0tleSA9IHRydWU7XG4gICAgICB2YWx1ZUtleSA9IGRhdGFbZGF0YUtleV0/LnRvU3RyaW5nKCk/LnJlcGxhY2UoXCJ7XCIsIFwiXCIpPy5yZXBsYWNlKFwifVwiLCBcIlwiKVxuICAgIH1cbiAgICBsZXQga2V5ID0gT2JqZWN0LmtleXMocmVjb3JkKS5maW5kKChrZXkpID0+IHZhbHVlQ29udGFpbnNLZXkgPyAodmFsdWVLZXkudG9Mb3dlckNhc2UoKSA9PT0ga2V5LnRvTG93ZXJDYXNlKCkpIDogKGRhdGFLZXkudG9Mb3dlckNhc2UoKSA9PT0ga2V5LnRvTG93ZXJDYXNlKCkpKTtcbiAgICBpZiAoKGtleSAmJiBrZXkubGVuZ3RoID4gMCAmJiByZWNvcmRba2V5XSl8fCByZWNvcmRba2V5XSA9PT0gZmFsc2UpIHtcbiAgICAgIHNldERhdGFGcm9tUmVjb3JkID0gdHJ1ZVxuICAgICAgZGF0YSA9IHsgLi4uZGF0YSwgW2RhdGFLZXldOiByZWNvcmRba2V5XSB9O1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7bWF0Y2hEYXRhOiBzZXREYXRhRnJvbVJlY29yZCwgZGF0YTogZGF0YX07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wVmFsdWUob2JqOiBhbnksIHByb3A6IElEaWN0aW9uYXJ5KSB7XG4gIGNvbnN0IG1hdGNoZWRLZXk6IHN0cmluZyA9IGdldE1hdGNoS2V5KG9iaiwgcHJvcC5uYW1lKTtcbiAgaWYgKG1hdGNoZWRLZXkpIHtcbiAgICByZXR1cm4gKG9ialttYXRjaGVkS2V5XSA9IHByb3AudmFsdWUpO1xuICB9XG4gIGVsc2V7XG4gICByZXR1cm4oIG9ialtwcm9wLm5hbWVdPXByb3AudmFsdWUpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1JvbGUocm9sZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGxldCBzdG9yYWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0N1cnJlbnRVc2VySW5mbycpO1xuICBpZiAoc3RvcmFnZSkge1xuICAgIGxldCBjdXJyZW50VXNlciA9IEpTT04ucGFyc2Uoc3RvcmFnZSk7XG4gICAgaWYgKGN1cnJlbnRVc2VyICYmIGN1cnJlbnRVc2VyLnJvbGVzICYmIGN1cnJlbnRVc2VyLnJvbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBjdXJyZW50VXNlci5yb2xlcy5zb21lKChpdGVtOiBhbnkpID0+IGl0ZW0uY29kZS50b1N0cmluZygpPy50cmltKCk/LnRvTG93ZXJDYXNlKCkgPT09IHJvbGU/LnRyaW0oKT8udG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2V0TGFiZWxIeXBlcmxpbmsoaXRlbTogYW55LCByZWNvcmQ6IGFueSwga2V5czogc3RyaW5nW10sIGFsbERhdGE6IGFueVtdID0gW10sIG1hdGNoZWRLZXk6IGFueSA9ICcnKSB7XG4gIGlmIChpdGVtLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5JTlBVVCAmJiBpdGVtPy5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbmsgJiYgbWF0Y2hlZEtleSkge1xuICAgIGl0ZW0udmFsdWUgPSB0b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKTtcbiAgfVxuICBpZiAoXG4gICAgaXRlbS5sYWJlbCAmJlxuICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rICYmXG4gICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtc1xuICApIHtcbiAgICBjb25zdCBwYXJhbUtleXMgPSBPYmplY3Qua2V5cyhpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zKTtcbiAgICBjb25zdCBsaW5rID0gaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wub3JpZ25hbExpbms7XG4gICAgaWYgKGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rKSB7XG4gICAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluayA9IHNldEh5cGVybGluayhcbiAgICAgICAga2V5cyxcbiAgICAgICAgcmVjb3JkLFxuICAgICAgICBsaW5rLFxuICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXMsXG4gICAgICAgIGFsbERhdGFcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRIeXBlcmxpbmsoXG4gIGtleXM6IHN0cmluZ1tdLFxuICByZWNvcmQ6IGFueSxcbiAgbGluazogc3RyaW5nLFxuICBwYXJhbUtleXM6IHN0cmluZ1tdLFxuICBwYXJhbXM6IGFueSxcbiAgYWxsRGF0YTogYW55W10gPSBbXVxuKTogc3RyaW5nIHtcbiAgbGV0IG5ld0xpbms6IHN0cmluZyA9IGxpbms7XG4gIGxldCBvcmlnaW5hbExpbms6IHN0cmluZyA9IGxpbms7XG4gIHJlY29yZCA9IG9iakNvbnZlcnRUb0xvd2VyKHJlY29yZCk7XG4gIHBhcmFtS2V5cy5mb3JFYWNoKChwYXJhbWtleSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtOiBzdHJpbmcgPSAne3snICsgcGFyYW1rZXkudG9Mb3dlckNhc2UoKSArICd9fSc7XG4gICAgY29uc3QgaXNQYXJhbU1hdGNoZWQgPSBuZXdMaW5rLmxvY2FsZUNvbXBhcmUocGFyYW0pO1xuICAgIGNvbnN0IHBhcmFtSW5SZWNvcmQgPSBzZXRQYXJhbUtleVZhbHVlKHJlY29yZCwgYWxsRGF0YSwgcGFyYW1rZXkpO1xuXG4gICAgaWYgKGlzUGFyYW1NYXRjaGVkKSB7XG4gICAgICBsZXQgcGFyYW1WYWx1ZSA9IHBhcmFtcyA/IHBhcmFtc1twYXJhbWtleV0gOiBudWxsO1xuICAgICAgaWYocGFyYW1WYWx1ZSA9PT0gJycgJiYgcGFyYW1JblJlY29yZCl7XG4gICAgICAgIHBhcmFtVmFsdWUgPSAneycrcGFyYW1rZXkrJ30nO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtVmFsdWUpIHtcbiAgICAgICAgY29uc3QgcHJvcE5hbWUgPSBwYXJhbVZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xuICAgICAgICBsZXQgcHJvcFZhbHVlID0gcmVjb3JkW3Byb3BOYW1lLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3N0cmluZycgICYmIHByb3BWYWx1ZSAhPSBudWxsICYmIHByb3BWYWx1ZS5pbmNsdWRlcyhcIiZcIikpIHtcbiAgICAgICAgICBwcm9wVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQocHJvcFZhbHVlKTtcbiAgICAgICAgfSBcbiAgICAgICAgXG4gICAgICAgIC8vIGluIGNhc2Ugb2YgcHJvcCBub3QgZm91bmQgaW4gcmVjb3JkIHRoZW4gdHJ5IHRvIGZpbmQgcHJvcCBpbiBhbGwgZGF0YSBhcnJheSwgdG8gZ2V0IGl0cyB2YWx1ZSBcbiAgICAgICAgaWYgKCFwcm9wVmFsdWUgJiYgYWxsRGF0YSAmJiBhbGxEYXRhLmxlbmd0aCA+IDApXG4gICAgICAgIHtcbiAgICAgICAgICBhbGxEYXRhLmZvckVhY2goKGRhdGEpPT57XG4gICAgICAgICAgICAvL2NvbnN0IHZhbHVlID0gZGF0YS5yZWNvcmRzLmZpbmQoKHgpPT4geFtwcm9wTmFtZV0pO1xuICAgICAgICAgICAgZGF0YS5yZWNvcmRzLmZvckVhY2goKGFsbFJlY29yZDogYW55KT0+e1xuICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGFsbFJlY29yZCk7XG4gICAgICAgICAgICAgIGxldCBtYXRjaEtleSA9IGtleXMuZmluZCgoeCk9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHByb3BOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICBpZiAobWF0Y2hLZXkpe1xuICAgICAgICAgICAgICAgICBwcm9wVmFsdWUgPSBhbGxSZWNvcmRbbWF0Y2hLZXldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3TGluay5pbmNsdWRlcyhwYXJhbVZhbHVlKSkge1xuICAgICAgICAgIG5ld0xpbmsgPSBvcmlnaW5hbExpbmsucmVwbGFjZShwYXJhbVZhbHVlLCBTdHJpbmcocHJvcFZhbHVlKSk7XG4gICAgICAgIH0gICAgICBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGdldCBwYXJhbSB2YWx1ZSBmcm9tIGFwaSByZXNwb25zZSwgaWYgcGFyYW0ga2V5IGV4aXN0cyBpbiBpdFxuICAgICAgICBjb25zdCBtYXRjaGVkS2V5OiBhbnkgPSBrZXlzLmZpbmQoXG4gICAgICAgICAgKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gcGFyYW1rZXkudG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgICAgICAgcGFyYW1WYWx1ZSA9IHJlY29yZFttYXRjaGVkS2V5XTtcbiAgICAgICAgICBpZiAocGFyYW1WYWx1ZSkge1xuICAgICAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShcbiAgICAgICAgICAgICAgbmV3IFJlZ0V4cChwYXJhbSwgJ2lnJyksXG4gICAgICAgICAgICAgIHRvVHJpbShwYXJhbVZhbHVlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHBhcmFtLCAnaWcnKSwgdG9UcmltKCcnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLy8gcmVwbGFjZSB0aGUge3twYXJhbX19IHdpdGggZW1wdHlcbiAgaWYobmV3TGluayAmJiBuZXdMaW5rLmluY2x1ZGVzKFwie3tcIikgJiYgbmV3TGluay5pbmNsdWRlcyhcIn19XCIpKXtcbiAgICBuZXdMaW5rID0gbmV3TGluaz8ucmVwbGFjZSgveysuKj99Ky9nLCBcIlwiKTtcbiAgfVxuICByZXR1cm4gbmV3TGluaztcbn1cblxuLy8gaXRzIGNoZWNraW5nIGlmIHRoZXJlIGlzIG5vIHZhbHVlIGluIGh5cGVybGluayBwYXJhbSB0aGVuIGl0IHNldCBrZXkgYXMgYSBwYXJhbVZhbHVlXG5mdW5jdGlvbiBzZXRQYXJhbUtleVZhbHVlKHJlY29yZDogYW55LCBhbGxEYXRhOiBhbnlbXSA9IFtdLCBwYXJhbWtleTogYW55KXtcbiAgbGV0IHBhcmFtVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaWYoYWxsRGF0YSAmJiBhbGxEYXRhLmxlbmd0aCA+IDApe1xuICAgIGFsbERhdGEuZm9yRWFjaCgoZGF0YTogYW55KT0+e1xuICAgICAgaWYoZGF0YS5yZWNvcmRzICYmIGRhdGEucmVjb3Jkcy5sZW5ndGggPiAwKXtcbiAgICAgICAgZGF0YS5yZWNvcmRzLmZvckVhY2goKGFsbFJlY29yZDogYW55KSA9PntcbiAgICAgICAgICAgaWYocGFyYW1WYWx1ZSA9PT0gZmFsc2Upe1xuICAgICAgICAgICAgcGFyYW1WYWx1ZSA9IE9iamVjdC5rZXlzKGFsbFJlY29yZCkuc29tZSgocmVjb3JkKT0+IHJlY29yZC50b0xvd2VyQ2FzZSgpID09PSBwYXJhbWtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9ZWxzZXtcbiAgICAgICBwYXJhbVZhbHVlID0gT2JqZWN0LmtleXMocmVjb3JkKS5zb21lKCh4KT0+IHggPT09IHBhcmFta2V5LnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIHJldHVybiBwYXJhbVZhbHVlO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eVZhbHVlKGRhdGE6IGFueSwgcHJvcE5hbWU6IHN0cmluZykge1xuICBsZXQgcHJvcFZhbHVlOiBhbnk7XG4gIGRhdGEucmVjb3Jkcz8uZm9yRWFjaCgocmVjb3JkOiBhbnkpID0+IHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZWNvcmQpKSB7XG4gICAgICBpZiAoa2V5ICYmIHByb3BOYW1lICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHByb3BWYWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBwcm9wVmFsdWU7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZvcm1GaWVsZENWYWx1ZShmaWVsZDogYW55KSB7XG4gIGlmIChcbiAgICBmaWVsZC5mb3JtYXQ/LnR5cGUgPT09IEVGb3JtYXRUeXBlLkJPT0xFQU5fWU4gfHxcbiAgICBmaWVsZC5mb3JtYXQ/LmZvcm1hdHRlcj8ubmFtZSA9PT0gJ3RvQm9vbGVhbidcbiAgKSB7XG4gICAgcmV0dXJuIChmaWVsZC52YWx1ZSA9PT0gMSB8fCBmaWVsZC52YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ3RydWUnIHx8IGZpZWxkLnZhbHVlPy50b1N0cmluZygpID09PSAnWScpID8gJ1knIDogJ04nO1xuICB9IGVsc2UgaWYgKFxuICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJlxuICAgIChmaWVsZC52YWx1ZSB8fCBmaWVsZC52YWx1ZSA9PT0gJycpXG4gICkge1xuICAgIGlmKGZpZWxkLnRpbWVPbmx5IHx8IGZpZWxkLnNob3d0aW1lKXtcbiAgICAgIC8vIGNvbnN0IGRhdGVUaW1lUmVnZXggPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9IChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0pJC87IC8vIFJlZ2V4IGZvciBkYXRldGltZSBmb3JtYXRcbiAgICAgIC8vIGNvbnN0IG1hdGNoID0gZmllbGQudmFsdWUubWF0Y2goZGF0ZVRpbWVSZWdleCk7XG4gICAgICAvLyBpZiAobWF0Y2gpIHtcbiAgICAgIC8vICAgZmllbGQudmFsdWUgPSBmb3JtYXREYXRlKGZpZWxkLnZhbHVlLCAnaGg6bW0gYScsICdlbi1VUycpO1xuICAgICAgLy8gfWVsc2Uge1xuICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlO1xuICAgICAgLy8gfVxuICAgIH1lbHNle1xuICAgICAgZmllbGQudmFsdWUgPVxuICAgICAgZmllbGQuc2hvd1RpbWUgPT09IHRydWVcbiAgICAgICAgPyB0b1Nob3J0RGF0ZVRpbWUoZmllbGQudmFsdWUsIGZpZWxkLmZvcm1hdClcbiAgICAgICAgOiB0b1Nob3J0RGF0ZShmaWVsZC52YWx1ZSwgZmllbGQuZm9ybWF0KVxuICAgIH1cbiAgICByZXR1cm4gZmllbGQudmFsdWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgfHwgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSAmJlxuICAgIGZpZWxkLnZhbHVlICYmXG4gICAgdHlwZW9mIGZpZWxkLnZhbHVlID09PSAnb2JqZWN0J1xuICApIHtcbiAgICByZXR1cm4gZmllbGQudmFsdWUudmFsdWUgPT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpZWxkLnZhbHVlLnZhbHVlO1xuICB9IGVsc2UgaWYgKFxuICAgIGZpZWxkLmxhYmVsICYmXG4gICAgZmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgZmllbGQubGFiZWwubGFiZWxDb250cm9sLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgJiZcbiAgICBmaWVsZC52YWx1ZSAmJlxuICAgIHR5cGVvZiBmaWVsZC52YWx1ZSA9PT0gJ29iamVjdCdcbiAgKSB7XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlLnZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgPT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpZWxkLnZhbHVlO1xuICAgIHJldHVybiBmaWVsZC52YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXV0b1NldExvb2t1cERhdGEoXG4gIGZpZWxkRGF0YTogYW55LFxuICByZXNwb25zZTogYW55XG4gICkge1xuICBsZXQgb2JqID0ge307XG4gIGxldCByZWNvcmQgPSBzZXREYXRhRmllbGRzKFtyZXNwb25zZV0pO1xuICBpZiAocmVjb3JkICYmIHJlY29yZC5sZW5ndGggPiAwKSB7XG4gICAgcmVjb3JkLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgcmVjb3JkID0geDtcbiAgICB9KTtcbiAgfVxuICBpZiAoZmllbGREYXRhICYmIHJlY29yZCkge1xuICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkRGF0YSkuZm9yRWFjaCgoW2RhdGFLZXksIGRhdGFWYWx1ZV06IGFueSkgPT4ge1xuICAgICAgbGV0IHJvd0tleXMgPSBPYmplY3Qua2V5cyhyZWNvcmQpO1xuICAgICAgbGV0IGtleSA9IHJvd0tleXM/LmZpbmQoKHgpID0+IHg/LnRvTG93ZXJDYXNlKCkgPT09IGRhdGFLZXk/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgbGV0IHZhbHVlID0gcm93S2V5cz8uZmluZChcbiAgICAgICAgKHgpID0+IGRhdGFWYWx1ZSAmJiBkYXRhVmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSAmJiB4Py50b0xvd2VyQ2FzZSgpID09PSBkYXRhVmFsdWU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCk/LnJlcGxhY2UoXCJ7XCIsIFwiXCIpPy5yZXBsYWNlKFwifVwiLCBcIlwiKVxuICAgICAgKT8udG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IHJlY29yZFt2YWx1ZSsnX29iaiddPy5vcHRpb25WYWx1ZSA/IHJlY29yZFt2YWx1ZSsnX29iaiddPy5vcHRpb25WYWx1ZSA6IHJlY29yZFt2YWx1ZV0gfTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ICYmIGtleS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IHJlY29yZFtrZXkudG9Mb3dlckNhc2UoKV0gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IGRhdGFWYWx1ZSB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvYmo7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEdyaWRMb29rdXBEYXRhKGNvbHVtbjogSUdyaWRDb2x1bW5bXSwgZmllbGQ6IHN0cmluZywgZGF0YTogYW55KXtcbiAgbGV0IG9iaiA9IGNvbHVtbi5maW5kKCh4KT0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkpO1xuICBpZihvYmogJiYgb2JqLmxvb2t1cENvbnRyb2w/LmRhdGEpe1xuICAgIG9iai5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IGRhdGE7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERhdGFGaWVsZHMocmVzcG9uc2U6IGFueVtdKSB7XG4gIGxldCBkYXRhOiBhbnkgPSBbXTtcbiAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmxlbmd0aCA+IDApIHtcbiAgICByZXNwb25zZS5tYXAoKHg6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmtleXMoeCkucmVkdWNlKFxuICAgICAgICAocHJldiwgY3VycmVudCkgPT4gKHsgLi4ucHJldiwgW2N1cnJlbnQudG9Mb3dlckNhc2UoKV06IHhbY3VycmVudF0gfSksXG4gICAgICAgIHt9XG4gICAgICApO1xuXG4gICAgICBkYXRhLnB1c2gocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERpYWxvZ1Jlc3BvbnNlKFxuICBmb3JtRmllbGQ6IGFueSxcbiAgZm9ybURhdGE6IGFueSxcbiAgcmVzcG9uc2U6IGFueVxuKSB7XG4gIGxldCB2YWx1ZTogYW55O1xuICBpZiAocmVzcG9uc2UpIHtcbiAgICAvLyBpZiBzZWxlY3RlZFZhbHVlIGRvZXMgbm90IGV4aXN0IHRoZW4gY29uc2lkZXIgdmFsdWVGaWVsZCBhcyBzZWxlY3RlZFZhbHVlXG4gICAgaWYgKFxuICAgICAgZm9ybURhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEubGFiZWxQcm9wICYmXG4gICAgICAhZm9ybURhdGEuZGF0YS52YWx1ZVByb3BcbiAgICApIHtcbiAgICAgIGZvcm1EYXRhLmRhdGEudmFsdWVQcm9wID0gZm9ybURhdGEuZGF0YS5sYWJlbFByb3A7XG4gICAgfVxuICAgIGVsc2UgaWYgKFxuICAgICAgZm9ybURhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEudmFsdWVQcm9wICYmXG4gICAgICAhZm9ybURhdGEuZGF0YS5sYWJlbFByb3BcbiAgICApIHtcbiAgICAgIGZvcm1EYXRhLmRhdGEubGFiZWxQcm9wID0gZm9ybURhdGEuZGF0YS52YWx1ZVByb3A7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hWYWx1ZUtleTogc3RyaW5nID0gZ2V0TWF0Y2hLZXkoXG4gICAgICByZXNwb25zZSxcbiAgICAgIGZvcm1EYXRhPy5kYXRhPy52YWx1ZVByb3BcbiAgICApO1xuICAgIGNvbnN0IG1hdGNoRmllbGRLZXk6IHN0cmluZyA9IGdldE1hdGNoS2V5KFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBmb3JtRGF0YT8uZGF0YT8ubGFiZWxQcm9wXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIGZvcm1EYXRhPy5kYXRhICYmXG4gICAgICBmb3JtRGF0YT8uZGF0YS52YWx1ZVByb3AgJiZcbiAgICAgIGZvcm1EYXRhPy5kYXRhLmxhYmVsUHJvcFxuICAgICkge1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IHJlc3BvbnNlW21hdGNoVmFsdWVLZXldO1xuICAgICAgbGV0IG1hdGNoVGV4dCA9IHJlc3BvbnNlW21hdGNoRmllbGRLZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZVByb3AgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBtYXRjaFRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbHVlUHJvcCA9IHZhbHVlUHJvcC50cmltKCk7XG4gICAgICAgIG1hdGNoVGV4dCA9IG1hdGNoVGV4dC50cmltKCk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHsgdGV4dDogbWF0Y2hUZXh0LCB2YWx1ZTogdmFsdWVQcm9wIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IEZpZWxkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShyZXNwb25zZSwgZm9ybUZpZWxkLmZpZWxkKTtcbiAgICAgIGxldCB2YWx1ZSA9IHJlc3BvbnNlW0ZpZWxkS2V5XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlPy50b1N0cmluZygpPy50cmltKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRVcmwoKTpzdHJpbmd7XG4gIGxldCBjdXJyZW50Um91dGU6IHN0cmluZyA9ICcnO1xuICBsZXQgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gIGlmKHVybCl7XG4gICAgbGV0IGFyciA9IHVybC5zcGxpdCgnLycpO1xuICAgIGN1cnJlbnRSb3V0ZSA9IGFyclthcnIubGVuZ3RoLTFdXG4gIH0gICAgXG4gIHJldHVybiBjdXJyZW50Um91dGU7XG59XG5cbmV4cG9ydCAgZnVuY3Rpb24gZ2V0R3JpZEZpbHRlcnMoKXtcbiAgbGV0IGZpbHRlcnM6IGFueSA9IFtdO1xuICBsZXQgZ3JpZEZpbHRlcnMgPSBjdXJyZW50VXJsKCk7XG4gICAgaWYoZ3JpZEZpbHRlcnMgJiYgZ3JpZEZpbHRlcnMubGVuZ3RoID4gMCl7XG4gICAgICBjb25zdCBsb2NhbEZpbHRlciA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJytncmlkRmlsdGVycykgYXMgYW55KTtcbiAgICAgIGZpbHRlcnMgPSBsb2NhbEZpbHRlcj8uZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcnM7XG59XG5cbi8vdXBkYXRlIHRoZSBoaWRkZW4gb3IgZGlzYWJsZWQgYW5kIHZhbHVlIGJhc2VkIG9mZiBvdGhlciBnbG9iYWwgZmlsdGVycy5cbmV4cG9ydCBmdW5jdGlvbiBzZXRHbG9iYWxGaWx0ZXJQcm9wVmFsdWVzKFxuICBnbG9iYWxGaWx0ZXI6IElHbG9iYWxGaWx0ZXJbXSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgcHJvcHM6IElGaWx0ZXJEaWN0aW9uYXJ5W10sXG4pIHtcbiAgcmV0dXJuIGdsb2JhbEZpbHRlci5tYXAoKGZpbHRlcjogYW55KSA9PiB7XG4gICAgaWYgKFxuICAgICAgKGZpbHRlci5maWVsZCAmJiBmaWx0ZXIuZmllbGQudG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAoZmlsdGVyLmRpc3BsYXlUZXh0ICYmXG4gICAgICAgIGZpbHRlci5kaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIHByb3BzPy5tYXAoKHByb3A6IElGaWx0ZXJEaWN0aW9uYXJ5KSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXIuaGFzT3duUHJvcGVydHkocHJvcC5wcm9wTmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gKGZpbHRlcltwcm9wLnByb3BOYW1lXSA9IHByb3AucHJvcFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wLnByb3BWYWx1ZSAmJiBwcm9wLnByb3BWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIChmaWx0ZXIudmFsdWUgPSBwcm9wLnByb3BWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDYXJkRmllbGRzRGF0YShmb3JtOiBhbnkpIHtcbiAgaWYgKGZvcm0gJiYgZm9ybS5keW5hbWljZm9ybSkge1xuICAgIGNvbnN0IHsgZHluYW1pY2Zvcm0sIC4uLm5ld0RhdGEgfSA9IGZvcm07XG4gICAgZHluYW1pY2Zvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XG4gICAgICBzZWN0aW9uLmZpZWxkcz8uZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAobmV3RGF0YSkge1xuICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzKHsgcmVjb3JkczogW25ld0RhdGFdIH0sIGR5bmFtaWNmb3JtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLy8gZGlzYWJsZSBHcmlkIEVkaXRhYmxlUm93IENvbHVtblxuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVFZGl0Um93Q29sdW1uKGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIGZpZWxkOiBzdHJpbmcpOiBJR3JpZENvbHVtbltdIHtcbiAgaWYgKGZpZWxkICYmIGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgbGV0IG9iaiA9IGNvbHVtbnMuZmluZCgoeCkgPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgbGV0IGRpc2FibGVPYmogPSB7IC4uLm9iaiwgZGlzYWJsZWQ6IHRydWUgfTtcbiAgICBjb25zdCBpbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChpOiBhbnkpID0+IGkuZmllbGQudG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkgY29sdW1uc1tpbmRleF0gPSBkaXNhYmxlT2JqO1xuICB9XG4gIHJldHVybiBjb2x1bW5zO1xufVxuXG4vLyBlbmFibGVkIEdyaWQgRWRpdGFibGVSb3cgQ29sdW1uXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlZEVkaXRSb3dDb2x1bW4oY29sdW1uczogSUdyaWRDb2x1bW5bXSwgZmllbGQ6IHN0cmluZyk6IElHcmlkQ29sdW1uW10ge1xuICBpZiAoZmllbGQgJiYgY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgb2JqID0gY29sdW1ucy5maW5kKCh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgbGV0IGVuYWJsZU9iaiA9IHsgLi4ub2JqLCBkaXNhYmxlZDogZmFsc2UgfTtcbiAgICBjb25zdCBpbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChpOiBhbnkpID0+IGkuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSBjb2x1bW5zW2luZGV4XSA9IGVuYWJsZU9iajtcbiAgfVxuICByZXR1cm4gY29sdW1ucztcbn1cblxuIC8vIGNoZWNrIHRoZSBNaW51dGVzIEludGVydmFsXG4gZXhwb3J0IGZ1bmN0aW9uIHNldE1pbnV0ZXNJbnRlcnZhbCh2YWx1ZTogYW55KXtcbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbWluID0gdmFsdWUuZ2V0TWludXRlcygpLnRvU3RyaW5nKCk7XG4gICAgaWYgKG1pbikge1xuICAgICB2YWx1ZSA9IHZhbHVlLnNldE1pbnV0ZXMoMCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuIC8vIHVwZGF0ZSB0aGUgcmVzcG9uc2UgcmVjb3Jkc1xuIGV4cG9ydCBmdW5jdGlvbiBzZXRVcGRhdGVkUmVjb3JkKHJlY29yZHM6IGFueVtdLCByb3dEYXRhOiBhbnksIGRhdGFLZXk6IHN0cmluZyk6IGFueVtde1xuICBjb25zdCBpbmRleCA9IHJlY29yZHM/LmZpbmRJbmRleCgocmVjb3JkKT0+IHJlY29yZFtkYXRhS2V5Py50b0xvd2VyQ2FzZSgpXSA9PSByb3dEYXRhW2RhdGFLZXk/LnRvTG93ZXJDYXNlKCldKTtcbiAgaWYoaW5kZXggPiAtMSl7XG4gICAgcmVjb3Jkc1tpbmRleF0gPSByb3dEYXRhO1xuICB9ZWxzZXtcbiAgICByZWNvcmRzLnB1c2gocm93RGF0YSk7XG4gIH1cbiAgcmV0dXJuIHJlY29yZHM7XG59XG5cbi8vY29udmVydCB0aGUgdGltZSBpbnRvIGRhdGVcbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lSW5EYXRlKHRpbWU6IGFueSkge1xuICBjb25zdCBjb252ZXJ0VGltZTEydG8yNCA9ICh0aW1lMTJoOiBhbnkpID0+IHtcbiAgICBjb25zdCBbdGltZSwgbW9kaWZpZXJdID0gdGltZTEyaD8udG9TdHJpbmcoKT8uc3BsaXQoJyAnKTtcbiAgICBsZXQgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWU/LnNwbGl0KCc6Jyk7XG4gICAgaWYgKGhvdXJzID09PSAnMTInKSB7XG4gICAgICBob3VycyA9ICcwMCc7XG4gICAgfVxuICAgIGlmIChtb2RpZmllciA9PT0gJ1BNJykge1xuICAgICAgaG91cnMgPSBwYXJzZUludChob3VycywgMTApICsgMTI7XG4gICAgfVxuICAgIHJldHVybiBgJHtob3Vyc306JHttaW51dGVzfWA7XG4gIH07XG4gIGNvbnN0IGRhdGUgPSBjb252ZXJ0VGltZTEydG8yNCh0aW1lKTtcbiAgY29uc3QgdGVtcERhdGUgPSBuZXcgRGF0ZSgnSnVseSAxLCAxOTk5LCAnICsgZGF0ZSArICc6MDAnKTtcbiAgY29uc3QgZnV0dXJlRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGZ1dHVyZURhdGUuc2V0VGltZSh0ZW1wRGF0ZS5nZXRUaW1lKCkpO1xuICByZXR1cm4gZnV0dXJlRGF0ZTtcbn1cblxuLy8gcmV0dXJuIHRoZSBkYXRhIG9mIHRoZSBmaWVsZCBcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZERhdGEoeyBmb3JtU2VjdGlvbnMgfTogYW55LCBmaWVsZDogc3RyaW5nKXtcbiAgbGV0IGRhdGE6IGFueSA9IFtdXG4gIGlmKGZvcm1TZWN0aW9ucz8ubGVuZ3RoID4gMCAmJiBmaWVsZCl7XG4gICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb246IGFueSk9PntcbiAgICAgIGlmKHNlY3Rpb24uZmllbGRzLnNvbWUoKGZvcm1GaWVsZDphbnkpPT4gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZpZWxkLnRvTG93ZXJDYXNlKCkpKXtcbiAgICAgICAgZGF0YT1zZWN0aW9uLmZpZWxkcy5maW5kKChmb3JtRmllbGQ6YW55KT0+IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PSBmaWVsZC50b0xvd2VyQ2FzZSgpKT8uZGF0YVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbGxGb3JtRmllbGRzVmFsdWVzKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIHByb3BzOiBJRmlsdGVyRGljdGlvbmFyeVtdXG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb246IElGb3JtU2VjdGlvbikgPT4ge1xuICAgIGlmIChzZWN0aW9uKSB7XG4gICAgICBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBwcm9wcy5tYXAoKHByb3A6IElGaWx0ZXJEaWN0aW9uYXJ5KSA9PiB7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIChmb3JtRmllbGRbcHJvcC5wcm9wTmFtZV0gPSBwcm9wLnByb3BWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8vIHJldHVybnMgdGhlIHJlc3BvbnNlIGhlYWRlciBmaWxlTmFtZVxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3BvbnNlSGVhZGVyRmlsZU5hbWUocmVzcG9uc2Upe1xuICBjb25zdCBoZWFkZXIgPSByZXNwb25zZT8uaGVhZGVycz8uZ2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJyk7XG4gIHJldHVybiBoZWFkZXI/LnNwbGl0KCdmaWxlbmFtZT0nKT8uWzFdPy5zcGxpdChcIjtcIilbMF0/LnJlcGxhY2VBbGwoL1xcXCIvZywgJycpO1xufVxuXG4gZXhwb3J0IGZ1bmN0aW9uIGRyYWdnYWJsZURpYWxvZyhpZDphbnkpe1xuICAgIGNvbnN0IGRpYWxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nJylcbiAgICBkaWFsb2dbMF0/LnNldEF0dHJpYnV0ZSgnaWQnLCdteWRpdicgKyBpZClcbiAgICBjb25zdCBkaWFsb2doZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwLWRpYWxvZy1oZWFkZXInKVxuICAgIGRpYWxvZ2hlYWRlclswXT8uc2V0QXR0cmlidXRlKCdpZCcsJ215ZGl2aGVhZGVyJyArIGlkKVxuICAgIGNvbnN0IGVsbW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215ZGl2JyArIGlkKTtcblxuICAgICAgbGV0IHBvczEgPSAwLFxuICAgICAgICBwb3MyID0gMCxcbiAgICAgICAgcG9zMyA9IDAsXG4gICAgICAgIHBvczQgPSAwO1xuICBcbiAgICAgIGNvbnN0IGRyYWdNb3VzZURvd24gPSAoZSkgPT4ge1xuICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgICAgIHBvczMgPSBlLmNsaWVudFg7XG4gICAgICAgIHBvczQgPSBlLmNsaWVudFk7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IGNsb3NlRHJhZ0VsZW1lbnQ7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZWxlbWVudERyYWc7XG4gICAgICB9O1xuICBcbiAgICAgIGNvbnN0IGVsZW1lbnREcmFnID0gKGUpID0+IHtcbiAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuICAgICAgICBwb3MxID0gcG9zMyAtIGUuY2xpZW50WDtcbiAgICAgICAgcG9zMiA9IHBvczQgLSBlLmNsaWVudFk7XG4gICAgICAgIHBvczMgPSBlLmNsaWVudFg7XG4gICAgICAgIHBvczQgPSBlLmNsaWVudFk7XG4gICAgICAgIGVsbW50LnN0eWxlLnRvcCA9IGVsbW50Py5vZmZzZXRUb3AgLSBwb3MyICsgJ3B4JztcbiAgICAgICAgZWxtbnQuc3R5bGUubGVmdCA9IGVsbW50Py5vZmZzZXRMZWZ0IC0gcG9zMSArICdweCc7XG4gICAgICB9O1xuICBcbiAgICAgIGNvbnN0IGNsb3NlRHJhZ0VsZW1lbnQgPSAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gbnVsbDtcbiAgICAgIH07XG4gIFxuICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWRpdmhlYWRlcicgKyBpZCkpIHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215ZGl2aGVhZGVyJyArIGlkKS5vbm1vdXNlZG93biA9IGRyYWdNb3VzZURvd247XG4gICAgICB9IGVsc2UgaWYoZWxtbnQpIHtcbiAgICAgICAgZWxtbnQub25tb3VzZWRvd24gPSBkcmFnTW91c2VEb3duO1xuICAgICAgfVxuICAgIH0gIFxuZXhwb3J0IGZ1bmN0aW9uIGNhbGVuZGFyTWluTWF4VmFsdWUoaXRlbTogYW55LHZhbHVlOiBhbnksIGluZGV4KXtcbiAgbGV0IHZhbGlkYXRpb246IHN0cmluZyA9ICdlcXVhbCc7XG4gIHZhciB2YWxpZERhdGUgPSBuZXcgRGF0ZShpdGVtLnZhbGlkYXRpb25zW2luZGV4XS5leHByZXNzaW9uKTtcbiAgdmFyIGN1cnJlbnREYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICBpZiAodmFsaWREYXRlLmdldFRpbWUoKSA8IGN1cnJlbnREYXRlLmdldFRpbWUoKSl7XG4gICAgdmFsaWRhdGlvbiA9ICdncmVhdGVyJztcbiAgfVxuICBlbHNlIGlmICh2YWxpZERhdGUuZ2V0VGltZSgpID4gY3VycmVudERhdGUuZ2V0VGltZSgpKXtcbiAgICB2YWxpZGF0aW9uID0gJ21pbmltdW0nO1xuICB9XG4gIHJldHVybiB2YWxpZGF0aW9uO1xufVxuLyogI2VuZHJlZ2lvbiAqL1xuIl19
|
|
@@ -1090,7 +1090,7 @@ function setLabelHyperlink(item, record, keys, allData = [], matchedKey = '') {
|
|
|
1090
1090
|
item.label.labelControl.hyperlink &&
|
|
1091
1091
|
item.label.labelControl.hyperlink.params) {
|
|
1092
1092
|
const paramKeys = Object.keys(item.label.labelControl.hyperlink.params);
|
|
1093
|
-
const link = item.label.labelControl.
|
|
1093
|
+
const link = item.label.labelControl.orignalLink;
|
|
1094
1094
|
if (item.label.labelControl.hyperlink.link) {
|
|
1095
1095
|
item.label.labelControl.hyperlink.link = setHyperlink(keys, record, link, paramKeys, item.label.labelControl.hyperlink.params, allData);
|
|
1096
1096
|
}
|
|
@@ -1098,6 +1098,7 @@ function setLabelHyperlink(item, record, keys, allData = [], matchedKey = '') {
|
|
|
1098
1098
|
}
|
|
1099
1099
|
function setHyperlink(keys, record, link, paramKeys, params, allData = []) {
|
|
1100
1100
|
let newLink = link;
|
|
1101
|
+
let originalLink = link;
|
|
1101
1102
|
record = objConvertToLower(record);
|
|
1102
1103
|
paramKeys.forEach((paramkey) => {
|
|
1103
1104
|
const param = '{{' + paramkey.toLowerCase() + '}}';
|
|
@@ -1127,7 +1128,9 @@ function setHyperlink(keys, record, link, paramKeys, params, allData = []) {
|
|
|
1127
1128
|
});
|
|
1128
1129
|
});
|
|
1129
1130
|
}
|
|
1130
|
-
|
|
1131
|
+
if (newLink.includes(paramValue)) {
|
|
1132
|
+
newLink = originalLink.replace(paramValue, String(propValue));
|
|
1133
|
+
}
|
|
1131
1134
|
}
|
|
1132
1135
|
else {
|
|
1133
1136
|
// get param value from api response, if param key exists in it
|