tnx-shared 5.3.215 → 5.3.216
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/tnx-shared.umd.js +3 -0
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/validators.d.ts.map +1 -1
- package/esm2015/classes/base/validators.js +4 -1
- package/fesm2015/tnx-shared.js +3 -0
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/tnx-shared.metadata.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/classes/base/validators.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AACtF,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAqD,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGxG,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACvD,QAAQ,IAAI,MAAM,CAAC;CACtB;AAqDD,qBAAa,iBAAkB,YAAW,UAAU;IAChD,OAAO,CAAC,MAAM,CAAC;IAEf,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/classes/base/validators.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,6 +58,9 @@ export class RequiredValidator {
|
|
|
58
58
|
validate(event) {
|
|
59
59
|
var _a;
|
|
60
60
|
this._label = (_a = event.control.errorLabel) !== null && _a !== void 0 ? _a : event.control.label;
|
|
61
|
+
if (event.control.isHtmlLabel) {
|
|
62
|
+
this._label = event.control.fullLabel;
|
|
63
|
+
}
|
|
61
64
|
return isNotEmpty(event.value, event.control);
|
|
62
65
|
}
|
|
63
66
|
getError() {
|
|
@@ -818,4 +821,4 @@ export class PasswordValidator {
|
|
|
818
821
|
return this._message;
|
|
819
822
|
}
|
|
820
823
|
}
|
|
821
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jbGFzc2VzL2Jhc2UvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBSzVCLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFhLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hHLE9BQU8sRUFBRSxvQkFBb0IsRUFBbUIsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFPdEYsU0FBUyxVQUFVLENBQUMsS0FBVSxFQUFFLE9BQXdCO0lBQ3BELElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFO1FBQ3ZDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDeEI7SUFDRCxJQUFJLE9BQU8sWUFBWSx1QkFBdUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7UUFDaEUsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCxJQUFJLE9BQU8sWUFBWSxvQkFBb0IsRUFBRTtRQUN6QyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUVoRCxNQUFNLGNBQWMsR0FBeUIsT0FBTyxDQUFDO1FBQ3JELElBQUksY0FBYyxDQUFDLGdCQUFnQixFQUFFO1lBQ2pDLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxFQUFFO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1NBQ3pFO1FBRUQsSUFBSSxjQUFjLENBQUMsZ0JBQWdCLEVBQUU7WUFDakMsSUFBSSxL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WUFDM0IsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDMUIsSUFBSSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsTUFBTSxFQUFFO2dCQUNmLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7b0JBQ2pCLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO2lCQUM1QjthQUNKO1lBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7WUFDeEIsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNwQixDQUFDO0tBQUE7SUFFRCxRQUFRO1FBQ0osT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7Q0FFSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IENvbnRyb2xUcmVlTm9kZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3J1ZC9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBpc0FycmF5LCBpc0xpdGVyYWxPYmplY3QgfSBmcm9tICcuLi9lbnZpcm9ubWVudC1zY2hlbWEnO1xuaW1wb3J0IHsgRXZlbnREYXRhLCBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEsIEZpbGVVcGxvYWRDb250cm9sU2NoZW1hLCBPcGVyYXRvciB9IGZyb20gJy4uL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IEFkZHJlc3NDb250cm9sU2NoZW1hLCBGb3JtQ29udHJvbEJhc2UsIFRhYmxlU2NoZW1hIH0gZnJvbSAnLi8uLi9mb3JtLXNjaGVtYSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IFByb21pc2U8Ym9vbGVhbj4gfCBib29sZWFuO1xuICAgIGdldEVycm9yKCk6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gaXNOb3RFbXB0eSh2YWx1ZTogYW55LCBjb250cm9sOiBGb3JtQ29udHJvbEJhc2UpOiBib29sZWFuIHtcbiAgICBpZiAoISF2YWx1ZSAmJiB0eXBlb2YgKHZhbHVlKSA9PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcbiAgICB9XG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGaWxlVXBsb2FkQ29udHJvbFNjaGVtYSAmJiAhY29udHJvbC5oYXNGaWxlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEFkZHJlc3NDb250cm9sU2NoZW1hKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGFkZHJlc3NDb250cm9sID0gPEFkZHJlc3NDb250cm9sU2NoZW1hPmNvbnRyb2w7XG4gICAgICAgIGlmIChhZGRyZXNzQ29udHJvbC5yZXF1aXJlZFByb3ZpbmNlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUuaWRQcm92aW5jZSA9PSBudWxsIHx8IHZhbHVlLmlkUHJvdmluY2UgPT09ICcnKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWRkcmVzc0NvbnRyb2wucmVxdWlyZWREaXN0cmljdCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLmlkRGlzdHJpY3QgPT0gbnVsbCB8fCB2YWx1ZS5pZERpc3RyaWN0ID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFkZHJlc3NDb250cm9sLnJlcXVpcmVkV2FyZCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLmlkV2FyZCA9PSBudWxsIHx8IHZhbHVlLmlkV2FyZCA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRyZXNzQ29udHJvbC5yZXF1aXJlZFN0cmVldCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLnN0cmVldCA9PSBudWxsIHx8IHZhbHVlLnN0cmVldCA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRyZXNzQ29udHJvbC5yZXF1aXJlZE5vKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUubm8gPT0gbnVsbCB8fCB2YWx1ZS5ubyA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hKSB7XG4gICAgICAgIGlmICghY29udHJvbC5fY29tcG9uZW50Ll92YWx1ZSB8fCBjb250cm9sLl9jb21wb25lbnQuX3ZhbHVlLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIFJlcXVpcmVkVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSBfbGFiZWw7XG5cbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIHRoaXMuX2xhYmVsID0gZXZlbnQuY29udHJvbC5lcnJvckxhYmVsID8/IGV2ZW50LmNvbnRyb2wubGFiZWw7XG4gICAgICAgIHJldHVybiBpc05vdEVtcHR5KGV2ZW50LnZhbHVlLCBldmVudC5jb250cm9sKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5fbGFiZWx9IGLhuq90IGJ14buZYyBuaOG6rXBgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICdUcsaw4budbmcgdGjDtG5nIHRpbiBi4bqvdCBideG7mWMgbmjhuq1wJztcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlcXVpcmVkRmllbGRzVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgX3JlcXVpcmVkRmllbGRzOiBzdHJpbmdbXTtcbiAgICBfbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocmVxdWlyZWRGaWVsZHM6IHN0cmluZ1tdLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fcmVxdWlyZWRGaWVsZHMgPSByZXF1aXJlZEZpZWxkcztcbiAgICAgICAgaWYgKHRoaXMuX3JlcXVpcmVkRmllbGRzLmxlbmd0aCA9PSAwKSBhbGVydCgnQ+G6pXUgaMOsbmggUmVxdWlyZWRGaWVsZHNWYWxpZGF0b3Igc2FpJyk7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIGdldFJlcXVpcmVkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWRGaWVsZHM7XG4gICAgfVxuXG4gICAgZ2V0TWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2U7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSkge1xuICAgICAgICBjb25zdCBhbGxSZXF1aXJlZEZpZWxkcyA9IFsuLi50aGlzLl9yZXF1aXJlZEZpZWxkcywgZXZlbnQuY29udHJvbC5maWVsZF07XG4gICAgICAgIGxldCBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgIGNvbnN0IHBhcmVudE1vZGVsID0gZXZlbnQuY3VycmVudE5vZGUucGFyZW50Tm9kZS5tb2RlbDtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBhbGxSZXF1aXJlZEZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5pbmRleE9mKHRoaXMuX21lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IGV2ZW50LmN1cnJlbnROb2RlLmdldE5vZGVCeVBhdGgoZmllbGQpO1xuICAgICAgICAgICAgaWYgKGlzTm90RW1wdHkoY3VycmVudE5vZGUubW9kZWwsIGN1cnJlbnROb2RlLmNvbnRyb2wpKSB7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fcmVxdWlyZWRGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWwuX2Vycm9yc1tmaWVsZF0ucHVzaCh0aGlzLl9tZXNzYWdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICFoYXNFcnJvcjtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRW1haWxWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSAvXigoW148PigpXFxbXFxdXFxcXC4sOzpcXHNAXCJdKyhcXC5bXjw+KClcXFtcXF1cXFxcLiw7Olxcc0BcIl0rKSopfChcIi4rXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXF0pfCgoW2EtekEtWlxcLTAtOV0rXFwuKStbYS16QS1aXXsyLH0pKSQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdChTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgdGjGsCDEkWnhu4duIHThu60nO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBMc3RFbWFpbFZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKCFpc0FycmF5KHZhbHVlKSB8fCAhdmFsdWU/Lmxlbmd0aCkgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSAvXigoW148PigpXFxbXFxdXFxcXC4sOzpcXHNAXCJdKyhcXC5bXjw+KClcXFtcXF1cXFxcLiw7Olxcc0BcIl0rKSopfChcIi4rXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXF0pfCgoW2EtekEtWlxcLTAtOV0rXFwuKStbYS16QS1aXXsyLH0pKSQvO1xuICAgICAgICByZXR1cm4gIXZhbHVlLnNvbWUoeCA9PiAhcmUudGVzdChTdHJpbmcoeCkudG9Mb3dlckNhc2UoKSkpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0PDsyBwaOG6p24gdOG7rSBraMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIHRoxrAgxJFp4buHbiB04butJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOYW1lVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIC8vIGNvbnN0IHJlID0gL15bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdW2EtesOgw6HhuqHhuqPDo8Oi4bqn4bql4bqt4bqp4bqrxIPhurHhuq/hurfhurPhurXDqMOp4bq54bq74bq9w6rhu4Hhur/hu4fhu4Phu4XDrMOt4buL4buJxKnDssOz4buN4buPw7XDtOG7k+G7keG7meG7leG7l8ah4bud4bub4buj4buf4buhw7nDuuG7peG7p8WpxrDhu6vhu6nhu7Hhu63hu6/hu7PDveG7teG7t+G7ucSRXSooPzpbIF1bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdW2EtesOgw6HhuqHhuqPDo8Oi4bqn4bql4bqt4bqp4bqrxIPhurHhuq/hurfhurPhurXDqMOp4bq54bq74bq9w6rhu4Hhur/hu4fhu4Phu4XDrMOt4buL4buJxKnDssOz4buN4buPw7XDtOG7k+G7keG7meG7leG7l8ah4bud4bub4buj4buf4buhw7nDuuG7peG7p8WpxrDhu6vhu6nhu7Hhu63hu6/hu7PDveG7teG7t+G7ucSRXSopKiR8XltBLVrDgMOB4bqg4bqiw4PDguG6puG6pOG6rOG6qOG6qsSC4bqw4bqu4bq24bqy4bq0w4jDieG6uOG6uuG6vMOK4buA4bq+4buG4buC4buEw4zDjeG7iuG7iMSow5LDk+G7jOG7jsOVw5Thu5Lhu5Dhu5jhu5Thu5bGoOG7nOG7muG7ouG7nuG7oMOZw5rhu6Thu6bFqMav4buq4buo4buw4bus4buu4buyw53hu7Thu7bhu7jEkF0qKD86WyBdW0EtWsOAw4HhuqDhuqLDg8OC4bqm4bqk4bqs4bqo4bqqxILhurDhuq7hurbhurLhurTDiMOJ4bq44bq64bq8w4rhu4Dhur7hu4bhu4Lhu4TDjMON4buK4buIxKjDksOT4buM4buOw5XDlOG7kuG7kOG7mOG7lOG7lsag4buc4bua4bui4bue4bugw5nDmuG7pOG7psWoxq/hu6rhu6jhu7Dhu6zhu67hu7LDneG7tOG7tuG7uMSQXSopKiR8XihbYS16QS1aXXsyLH1cXHNbYS16QS1aXXsxLH0nPy0/W2EtekEtWl17Mix9XFxzPyhbYS16QS1aXXsxLH0pPykvO1xuICAgICAgICBjb25zdCByZSA9IC9bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdW2EtesOgw6HhuqHhuqPDo8Oi4bqn4bql4bqt4bqp4bqrxIPhurHhuq/hurfhurPhurXDqMOp4bq54bq74bq9w6rhu4Hhur/hu4fhu4Phu4XDrMOt4buL4buJxKnDssOz4buN4buPw7XDtOG7k+G7keG7meG7leG7l8ah4bud4bub4buj4buf4buhw7nDuuG7peG7p8WpxrDhu6vhu6nhu7Hhu63hu6/hu7PDveG7teG7t+G7ucSRXSooPzpbIF1bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdW2EtesOgw6HhuqHhuqPDo8Oi4bqn4bql4bqt4bqp4bqrxIPhurHhuq/hurfhurPhurXDqMOp4bq54bq74bq9w6rhu4Hhur/hu4fhu4Phu4XDrMOt4buL4buJxKnDssOz4buN4buPw7XDtOG7k+G7keG7meG7leG7l8ah4bud4bub4buj4buf4buhw7nDuuG7peG7p8WpxrDhu6vhu6nhu7Hhu63hu6/hu7PDveG7teG7t+G7ucSRXSopKiR8XltBLVrDgMOB4bqg4bqiw4PDguG6puG6pOG6rOG6qOG6qsSC4bqw4bqu4bq24bqy4bq0w4jDieG6uOG6uuG6vMOK4buA4bq+4buG4buC4buEw4zDjeG7iuG7iMSow5LDk+G7jOG7jsOVw5Thu5Lhu5Dhu5jhu5Thu5bGoOG7nOG7muG7ouG7nuG7oMOZw5rhu6Thu6bFqMav4buq4buo4buw4bus4buu4buyw53hu7Thu7bhu7jEkF0qKD86WyBdW0EtWsOAw4HhuqDhuqLDg8OC4bqm4bqk4bqs4bqo4bqqxILhurDhuq7hurbhurLhurTDiMOJ4bq44bq64bq8w4rhu4Dhur7hu4bhu4Lhu4TDjMON4buK4buIxKjDksOT4buM4buOw5XDlOG7kuG7kOG7mOG7lOG7lsag4buc4bua4bui4bue4bugw5nDmuG7pOG7psWoxq/hu6rhu6jhu7Dhu6zhu67hu7LDneG7tOG7tuG7uMSQXSopKiR8WyBdfF4oW2EtekEtWl17Mix9XFxzW2EtekEtWl17MSx9Jz8tP1thLXpBLVpdezIsfVxccz8oW2EtekEtWl17MSx9KT8pLztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiAnS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyB0w6puJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQaG9uZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eMFsxLTldWzAtOV17OCw5fSQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiAnS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyBz4buRIMSRaeG7h24gdGhv4bqhaSc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2NjZFZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eXFxkezl9JHxeXFxkezEyfSQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiAnS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyBDQ0NEL0NNTkQnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBhc3Nwb3J0VmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgbWVzc2FnZSA9ICdLaMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIFPhu5EgaOG7mSBjaGnhur91IGhv4bq3YyBT4buRIENDQ0QgaG/hurdjIGNo4bupbmcgbWluaCBuaMOibiBkw6JuJztcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eXFxkezAsMTJ9JC87XG4gICAgICAgIHJldHVybiByZS50ZXN0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMZW5ndGhWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9lcnJvcjogYW55ID0gJyc7XG4gICAgcHJpdmF0ZSBfbWluID0gMDtcbiAgICBwcml2YXRlIF9tYXggPSAxMDA7XG5cbiAgICBjb25zdHJ1Y3RvcihtYXgsIG1pbiA9IDApIHtcbiAgICAgICAgdGhpcy5fbWF4ID0gbWF4O1xuICAgICAgICB0aGlzLl9taW4gPSBtaW47XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWluID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yID0gYMSQ4buZIGTDoGkgdOG7kWkgdGhp4buDdSAke3RoaXMuX21pbn0ga8O9IHThu7FgO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgPSB2YWx1ZSArICcnO1xuICAgICAgICBjb25zdCBsZW4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIGlmIChsZW4gPCB0aGlzLl9taW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yID0gYMSQ4buZIGTDoGkgdOG7kWkgdGhp4buDdSAke3RoaXMuX21pbn0ga8O9IHThu7FgO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZW4gPiB0aGlzLl9tYXgpIHtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yID0gYMSQ4buZIGTDoGkgdOG7kWkgxJFhICR7dGhpcy5fbWF4fSBrw70gdOG7sWA7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBob25lTnVtYmVyVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHJlID0gL14oWyBdfFsrKF0qWzAtOV17MSw0fVspXXswLDF9Wy1cXHNcXC4vMC05XSopJC9nO1xuICAgICAgICByZXR1cm4gcmUudGVzdChTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgc+G7kSDEkWnhu4duIHRob+G6oWknO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE51bWJlck9ubHlWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSAvXlxcLT8oWzAtOV0pKiQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdChTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgc+G7kSc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXRMZWFzdE9uZVJvd1RhYmxlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZXZlbnQuY3VycmVudE5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0LhuqNuZyBi4bqvdCBideG7mWMgbmjhuq1wJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYXhDb2RlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHJlID0gL14oWzAtOV0pezEwfSR8XihbMC05XSl7MTB9KC0pKFswLTldKXszfSQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdChTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgbcOjIHPhu5EgdGh14bq/JztcbiAgICB9XG59XG5cbmNvbnN0IHZhbGlkRnVuY3Rpb24gPSB7XG4gICAgW09wZXJhdG9yLmdyZWF0ZXJdOiAodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSA9PiB2YWx1ZTEgPiB2YWx1ZTIsXG4gICAgW09wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWxdOiAodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSA9PiB2YWx1ZTEgPj0gdmFsdWUyLFxuICAgIFtPcGVyYXRvci5sb3dlcl06ICh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpID0+IHZhbHVlMSA8IHZhbHVlMixcbiAgICBbT3BlcmF0b3IubG93ZXJUaGFuRXF1YWxdOiAodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSA9PiB2YWx1ZTEgPD0gdmFsdWUyLFxuICAgIFtPcGVyYXRvci5lcXVhbF06ICh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpID0+IHZhbHVlMSA9PSB2YWx1ZTJcbn07XG5cbmNvbnN0IG9wZXJhdG9yTWVhbmluZyA9IHtcbiAgICBbT3BlcmF0b3IuZ3JlYXRlcl06ICds4bubbiBoxqFuJyxcbiAgICBbT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbF06ICds4bubbiBoxqFuIGhv4bq3YyBi4bqxbmcnLFxuICAgIFtPcGVyYXRvci5sb3dlcl06ICduaOG7jyBoxqFuJyxcbiAgICBbT3BlcmF0b3IubG93ZXJUaGFuRXF1YWxdOiAnbmjhu48gaMahbiBob+G6t2MgYuG6sW5nJyxcbiAgICBbT3BlcmF0b3IuZXF1YWxdOiAnYuG6sW5nJ1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJQ29tcGFyZVZhbGlkYXRvciB7XG4gICAgY29tcGFyZVVuaXF1ZUZpZWxkOiBzdHJpbmc7XG4gICAgZ2V0T3BlcmF0b3JDb21wYXJlKCk6IE9wZXJhdG9yO1xufVxuXG4vKipcbiAqIFNvIHNhbmggMiB0aHXhu5ljIHTDrW5oIHRyb25nIGZvcm0uXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wYXJlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciwgSUNvbXBhcmVWYWxpZGF0b3Ige1xuICAgIHByaXZhdGUgX29wZXJhdG9yOiBPcGVyYXRvcjtcbiAgICBwcml2YXRlIF9jb21wYXJlQ29udHJvbDogRm9ybUNvbnRyb2xCYXNlO1xuICAgIGNvbXBhcmVVbmlxdWVGaWVsZDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3Iob3BlcmF0b3I6IE9wZXJhdG9yLCBjb21wYXJlVW5pcXVlRmllbGQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICB0aGlzLmNvbXBhcmVVbmlxdWVGaWVsZCA9IGNvbXBhcmVVbmlxdWVGaWVsZDtcbiAgICB9XG5cbiAgICBnZXRPcGVyYXRvckNvbXBhcmUoKTogT3BlcmF0b3Ige1xuICAgICAgICByZXR1cm4gdGhpcy5fb3BlcmF0b3I7XG4gICAgfVxuXG4gICAgZ2V0RmllbGRPcGVyYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdG9yO1xuICAgIH1cblxuICAgIGdldFZhbHVlQ29tcGFyZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjb21wYXJlTm9kZSA9IGV2ZW50LmN1cnJlbnROb2RlLmdldE5vZGVCeVBhdGgodGhpcy5jb21wYXJlVW5pcXVlRmllbGQpO1xuICAgICAgICB0aGlzLl9jb21wYXJlQ29udHJvbCA9IGNvbXBhcmVOb2RlLmNvbnRyb2w7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVGaWVsZCA9IHRoaXMuX2NvbXBhcmVDb250cm9sLmZpZWxkO1xuICAgICAgICBjb25zdCBjb21wYXJlVmFsdWUgPSBjb21wYXJlTm9kZS5tb2RlbDtcbiAgICAgICAgY29uc3QgY29tcGFyZVBhcmVudE1vZGVsID0gY29tcGFyZU5vZGUucGFyZW50Tm9kZS5tb2RlbDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgbGV0IGVycm9yTWVzO1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHRoaXMuX2NvbXBhcmVDb250cm9sLnZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0b3IgaW5zdGFuY2VvZiBDb21wYXJlVmFsaWRhdG9yICYmIHZhbGlkYXRvci5jb21wYXJlVW5pcXVlRmllbGQgPT0gZXZlbnQuY3VycmVudE5vZGUuY29udHJvbC51bmlxdWVGaWVsZCkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzID0gdmFsaWRhdG9yLmdldEVycm9yKGV2ZW50LmN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGNvbXBhcmVQYXJlbnRNb2RlbC5fZXJyb3JzW2NvbXBhcmVGaWVsZF0uaW5kZXhPZihlcnJvck1lcyk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyZVBhcmVudE1vZGVsLl9lcnJvcnNbY29tcGFyZUZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICB8fCB2YWx1ZSA9PT0gJydcbiAgICAgICAgICAgIHx8IGNvbXBhcmVWYWx1ZSA9PSBudWxsXG4gICAgICAgICAgICB8fCBjb21wYXJlVmFsdWUgPT0gJydcbiAgICAgICAgKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IHZhbGlkRnVuY3Rpb25bdGhpcy5fb3BlcmF0b3JdICYmIHZhbGlkRnVuY3Rpb25bdGhpcy5fb3BlcmF0b3JdKFxuICAgICAgICAgICAgdGhpcy5nZXRWYWx1ZUNvbXBhcmUodmFsdWUpLCB0aGlzLmdldFZhbHVlQ29tcGFyZShjb21wYXJlVmFsdWUpXG4gICAgICAgICk7XG5cblxuICAgICAgICBpZiAoIXJlICYmIGVycm9yTWVzKSB7XG4gICAgICAgICAgICBjb21wYXJlUGFyZW50TW9kZWwuX2Vycm9yc1tjb21wYXJlRmllbGRdLnB1c2goZXJyb3JNZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlO1xuICAgIH1cblxuICAgIGdldEVycm9yKGNvbnRyb2xUcmVlTm9kZT86IENvbnRyb2xUcmVlTm9kZSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NvbXBhcmVDb250cm9sICYmIGNvbnRyb2xUcmVlTm9kZSkge1xuICAgICAgICAgICAgdGhpcy5fY29tcGFyZUNvbnRyb2wgPSBjb250cm9sVHJlZU5vZGUuZ2V0Tm9kZUJ5UGF0aCh0aGlzLmNvbXBhcmVVbmlxdWVGaWVsZCkuY29udHJvbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYFBo4bqjaSAke29wZXJhdG9yTWVhbmluZ1t0aGlzLl9vcGVyYXRvcl19ICR7dGhpcy5fY29tcGFyZUNvbnRyb2w/LmZ1bGxMYWJlbH1gO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVDb21wYXJlVmFsaWRhdG9yIGV4dGVuZHMgQ29tcGFyZVZhbGlkYXRvciB7XG4gICAgY29uc3RydWN0b3Iob3BlcmF0b3I6IE9wZXJhdG9yLCBmaWVsZDogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG9wZXJhdG9yLCBmaWVsZCk7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWVDb21wYXJlKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE51bWJlckNvbXBhcmVWYWxpZGF0b3IgZXh0ZW5kcyBDb21wYXJlVmFsaWRhdG9yIHtcbiAgICBjb25zdHJ1Y3RvcihvcGVyYXRvcjogT3BlcmF0b3IsIGZpZWxkOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIob3BlcmF0b3IsIGZpZWxkKTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZUNvbXBhcmUodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgICB9XG59XG5cbi8qKlxuICogS2nhu4NtIHRyYSBnacOhIHRy4buLIG3hu5l0IGPhu5l0IMSRw6MgdOG7k24gdOG6oWkgdHJvbmcgZGIuXG4gKi9cbmV4cG9ydCBjbGFzcyBDaGVja0R1cGxpY2F0ZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHByaXZhdGUgX2xhYmVsOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZztcbiAgICBwcml2YXRlIF9iYXNlU2VydmljZTogQmFzZVNlcnZpY2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdEZpbHRlcnM6IEZpbHRlcltdO1xuXG4gICAgY29uc3RydWN0b3IoZGVmYXVsdEZpbHRlcnM/OiBGaWx0ZXJbXSkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0RmlsdGVycyA9IGRlZmF1bHRGaWx0ZXJzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRCYXNlU2VydmljZShiYXNlU2VydmljZTogQmFzZVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5fYmFzZVNlcnZpY2UgPSBiYXNlU2VydmljZTtcbiAgICB9XG5cbiAgICBhc3luYyB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGxldCB2YWx1ZUZpbHRlcjogYW55O1xuICAgICAgICBpZiAoZXZlbnQuY3VycmVudE5vZGUuY29udHJvbC5mdWxsTGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuX2xhYmVsID0gZXZlbnQuY3VycmVudE5vZGUuY29udHJvbC5mdWxsTGFiZWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9sYWJlbCA9IGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wubGFiZWw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBldmVudC5jdXJyZW50Tm9kZS52YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQuY3VycmVudE5vZGUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBldmVudC5jdXJyZW50Tm9kZS52YWx1ZS5tYXAoeCA9PiB4W2V2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2xbJ2Rpc3BsYXlGaWVsZCddXSkuam9pbignLCAnKTtcbiAgICAgICAgICAgICAgICB2YWx1ZUZpbHRlciA9IGV2ZW50LmN1cnJlbnROb2RlLnZhbHVlLm1hcCh4ID0+IHhbZXZlbnQuY3VycmVudE5vZGUuY29udHJvbFsndmFsdWVGaWVsZCddXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IGV2ZW50LmN1cnJlbnROb2RlLnZhbHVlW2V2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2xbJ2Rpc3BsYXlGaWVsZCddXS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gZXZlbnQuY3VycmVudE5vZGUudmFsdWVbZXZlbnQuY3VycmVudE5vZGUuY29udHJvbFsndmFsdWVGaWVsZCddXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gZXZlbnQuY3VycmVudE5vZGUudmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gZXZlbnQuY3VycmVudE5vZGUudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbe1xuICAgICAgICAgICAgZmllbGQ6IGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wuZmllbGQsXG4gICAgICAgICAgICBvcGVyYXRvcjogQXJyYXkuaXNBcnJheSh2YWx1ZUZpbHRlcikgPyBPcGVyYXRvci5pbiA6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlRmlsdGVyKVxuICAgICAgICB9XTtcbiAgICAgICAgaWYgKGV2ZW50LnJvb3RNb2RlbC5pZCkge1xuICAgICAgICAgICAgZmlsdGVycy51bnNoaWZ0KHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3Iubm90RXF1YWwsXG4gICAgICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KGV2ZW50LnJvb3RNb2RlbC5pZClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kZWZhdWx0RmlsdGVycykge1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKC4uLnRoaXMuX2RlZmF1bHRGaWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRDaGVja0V4aXN0ID0gYXdhaXQgdGhpcy5fYmFzZVNlcnZpY2UuY2hlY2tFeGlzdEJ5RmlsdGVyKGZpbHRlcnMpO1xuICAgICAgICBpZiAoIXJlc3VsdENoZWNrRXhpc3Quc3VjY2VzcyB8fCByZXN1bHRDaGVja0V4aXN0LmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIGBUcsaw4budbmcgJHt0aGlzLl9sYWJlbH0gY8OzIGdpw6EgdHLhu4sgJHt0aGlzLl92YWx1ZX0gxJHDoyB04buTbiB04bqhaWA7XG4gICAgfVxufVxuXG4vKipcbiAqIEtp4buDbSB0cmEgYuG7mSBnw6FpIHRy4buLIGPhu6dhIG5oaeG7gXUgY+G7mXQgxJHDoyB04buTbiB04bqhaSB0cm9uZyBkYi5cbiAqL1xuZXhwb3J0IGNsYXNzIENoZWNrRHVwbGljYXRlRmllbGRzVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgX2R1cGxpY2F0ZUZpZWxkczogc3RyaW5nW107XG4gICAgX21lc3NhZ2U6IHN0cmluZztcbiAgICBfb2xkTWVzc2FnZTogc3RyaW5nO1xuICAgIF9iYXNlU2VydmljZTogQmFzZVNlcnZpY2U7XG4gICAgX2RpY1ZhbHVlOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0RmlsdGVyczogRmlsdGVyW107XG5cbiAgICBjb25zdHJ1Y3RvcihkdXBsaWNhdGVGaWVsZHM6IHN0cmluZ1tdLCBtZXNzYWdlOiBzdHJpbmcsIGRlZmF1bHRGaWx0ZXJzPzogRmlsdGVyW10pIHtcbiAgICAgICAgdGhpcy5fZHVwbGljYXRlRmllbGRzID0gZHVwbGljYXRlRmllbGRzO1xuICAgICAgICBpZiAodGhpcy5fZHVwbGljYXRlRmllbGRzLmxlbmd0aCA9PSAwKSBhbGVydCgnQ+G6pXUgaMOsbmggQ2hlY2tEdXBsaWNhdGVGaWVsZHNWYWxpZGF0b3Igc2FpJyk7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICB0aGlzLl9kZWZhdWx0RmlsdGVycyA9IGRlZmF1bHRGaWx0ZXJzO1xuICAgIH1cblxuICAgIHNldEJhc2VTZXJ2aWNlKGJhc2VTZXJ2aWNlOiBCYXNlU2VydmljZSkge1xuICAgICAgICB0aGlzLl9iYXNlU2VydmljZSA9IGJhc2VTZXJ2aWNlO1xuICAgIH1cblxuICAgIGdldER1cGxpY2F0ZUZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2R1cGxpY2F0ZUZpZWxkcztcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0RmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRGaWx0ZXJzO1xuICAgIH1cblxuICAgIGdldE1lc3NhZ2UoKSB7XG4gICAgICAgIC8vIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoJyg/PD17eylbXn1dKyg/PX0pJywgJ2cnKTtcbiAgICAgICAgY29uc3QgcmVnID0gL3t7KFtefV0rKX19L2c7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX21lc3NhZ2UubWF0Y2gocmVnKTtcbiAgICAgICAgbGV0IG5ld01lc3NhZ2UgPSB0aGlzLl9tZXNzYWdlO1xuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgIGNvbnN0IGRpY1ZhbHVlID0gdGhpcy5fZGljVmFsdWU7XG4gICAgICAgICAgICByZXN1bHQuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXZhbChgdmFsdWUgPSBkaWNWYWx1ZS4ke2ZpZWxkfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXgpIHtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBuZXdNZXNzYWdlID0gbmV3TWVzc2FnZS5yZXBsYWNlKGB7eyR7ZmllbGR9fX1gLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgbmV3TWVzc2FnZSA9IG5ld01lc3NhZ2UucmVwbGFjZShmaWVsZCwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb2xkTWVzc2FnZSA9IG5ld01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBuZXdNZXNzYWdlO1xuICAgIH1cblxuICAgIGFzeW5jIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpIHtcbiAgICAgICAgY29uc3QgYWxsRHVwbGljYXRlRmllbGRzID0gWy4uLnRoaXMuX2R1cGxpY2F0ZUZpZWxkcywgZXZlbnQuY29udHJvbC5maWVsZF07XG4gICAgICAgIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XG4gICAgICAgIGxldCBoYXNOdWxsVmFsdWUgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBwYXJlbnRNb2RlbCA9IGV2ZW50LmN1cnJlbnROb2RlLnBhcmVudE5vZGUubW9kZWw7XG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgYWxsRHVwbGljYXRlRmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudE1vZGVsLl9lcnJvcnNbZmllbGRdLmluZGV4T2YodGhpcy5fb2xkTWVzc2FnZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsLl9lcnJvcnNbZmllbGRdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gZXZlbnQuY3VycmVudE5vZGUuZ2V0Tm9kZUJ5UGF0aChmaWVsZCk7XG4gICAgICAgICAgICBpZiAoY3VycmVudE5vZGUudmFsdWUgIT0gbnVsbCAmJiBjdXJyZW50Tm9kZS52YWx1ZSAhPSAnJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RpY1ZhbHVlW2ZpZWxkXSA9IGN1cnJlbnROb2RlLnZhbHVlO1xuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZXF1YWwsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh0aGlzLmdldFZhbHVlKHRoaXMuX2RpY1ZhbHVlW2ZpZWxkXSkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGhhc051bGxWYWx1ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBO4bq/dSBjw7MgMSB0csaw4budbmcgYuG7iyB0cuG7kW5nIChraMO0bmcgY8OzIGThu68gbGnhu4d1KSB0aMOsIHRy4bqjIHbhu4EgdHJ1ZVxuICAgICAgICBpZiAoaGFzTnVsbFZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGV2ZW50LnJvb3RNb2RlbC5pZCkge1xuICAgICAgICAgICAgZmlsdGVycy51bnNoaWZ0KHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3Iubm90RXF1YWwsXG4gICAgICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KGV2ZW50LnJvb3RNb2RlbC5pZClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kZWZhdWx0RmlsdGVycykge1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKC4uLnRoaXMuX2RlZmF1bHRGaWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRDaGVja0V4aXN0ID0gYXdhaXQgdGhpcy5fYmFzZVNlcnZpY2UuY2hlY2tFeGlzdEJ5RmlsdGVyKGZpbHRlcnMpO1xuICAgICAgICBpZiAoIXJlc3VsdENoZWNrRXhpc3Quc3VjY2VzcyB8fCByZXN1bHRDaGVja0V4aXN0LmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuX2R1cGxpY2F0ZUZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5wdXNoKHRoaXMuZ2V0TWVzc2FnZSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZShyYXdWYWx1ZSkge1xuICAgICAgICBpZiAoaXNMaXRlcmFsT2JqZWN0KHJhd1ZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHJhd1ZhbHVlLl9kcm9wZG93bnZhbHVlICE9IG51bGwgJiYgcmF3VmFsdWUuX2Ryb3Bkb3dudmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhd1ZhbHVlW3Jhd1ZhbHVlLl9kcm9wZG93bnZhbHVlXSB8fCByYXdWYWx1ZVsndmFsdWUnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByYXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0FycmF5KHJhd1ZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcmF3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaCh0aGlzLmdldFZhbHVlKGl0ZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhd1ZhbHVlO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2xkTWVzc2FnZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmlxdWVGaWVsZEluVGFibGVWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9maWVsZDtcblxuICAgIGNvbnN0cnVjdG9yKGZpZWxkKSB7XG4gICAgICAgIHRoaXMuX2ZpZWxkID0gZmllbGQ7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIShldmVudC5jdXJyZW50Tm9kZS5jb250cm9sIGluc3RhbmNlb2YgVGFibGVTY2hlbWEpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc3QgZGljID0ge307XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBldmVudC5jdXJyZW50Tm9kZS5jb250cm9sLnJvd1RlbXBsYXRlLmZpbmQoaXRlbSA9PiBpdGVtLmZpZWxkID09IHRoaXMuX2ZpZWxkKTtcbiAgICAgICAgaWYgKCFjb250cm9sKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCBlcnJvck1lcyA9ICdUcsaw4budbmcgJyArIGNvbnRyb2wubGFiZWwgKyAnIGtow7RuZyDEkcaw4bujYyB0csO5bmcgbmhhdSc7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBldmVudC52YWx1ZSkge1xuICAgICAgICAgICAgaWYgKGl0ZW1bdGhpcy5fZmllbGRdICE9IG51bGwgJiYgaXRlbVt0aGlzLl9maWVsZF0gIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtLl9lcnJvcnNbdGhpcy5fZmllbGRdLmluZGV4T2YoZXJyb3JNZXMpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSBpdGVtLl9lcnJvcnNbdGhpcy5fZmllbGRdLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBpdGVtW3RoaXMuX2ZpZWxkXTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ19kcm9wZG93bnZhbHVlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVt2YWx1ZVsnX2Ryb3Bkb3dudmFsdWUnXV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFkaWNbdmFsdWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpY1t2YWx1ZV0gPSBbaXRlbV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkaWNbdmFsdWVdLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRpYykge1xuICAgICAgICAgICAgaWYgKGRpY1trZXldLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRpY1trZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uX2Vycm9yc1t0aGlzLl9maWVsZF0ucHVzaChlcnJvck1lcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaGFzRXJyb3I7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgRXhhY3RPbmVWYWx1ZUluVGFibGVWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9maWVsZDtcbiAgICBwcml2YXRlIF92YWx1ZTtcbiAgICBwcml2YXRlIF9sYWJlbDtcblxuICAgIGNvbnN0cnVjdG9yKGZpZWxkLCB2YWx1ZSwgbGFiZWw/KSB7XG4gICAgICAgIHRoaXMuX2ZpZWxkID0gZmllbGQ7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX2xhYmVsID0gbGFiZWwgPyBsYWJlbCA6IHZhbHVlO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCEoZXZlbnQuY3VycmVudE5vZGUuY29udHJvbCBpbnN0YW5jZW9mIFRhYmxlU2NoZW1hKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IGRpYyA9IHt9O1xuICAgICAgICBjb25zdCBjb250cm9sID0gZXZlbnQuY3VycmVudE5vZGUuY29udHJvbC5yb3dUZW1wbGF0ZS5maW5kKGl0ZW0gPT4gaXRlbS5maWVsZCA9PSB0aGlzLl9maWVsZCk7XG4gICAgICAgIGlmICghY29udHJvbCkgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgZXJyb3JNZXMgPSAnQ2jhu4kgxJHGsOG7o2Mgbmjhuq1wIG3hu5l0IGdpw6EgdHLhu4sgJyArIHRoaXMuX2xhYmVsO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZXZlbnQudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbS5fZXJyb3JzW3RoaXMuX2ZpZWxkXS5pbmRleE9mKGVycm9yTWVzKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSBpdGVtLl9lcnJvcnNbdGhpcy5fZmllbGRdLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGl0ZW1bdGhpcy5fZmllbGRdO1xuICAgICAgICAgICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdfZHJvcGRvd252YWx1ZScpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVt2YWx1ZVsnX2Ryb3Bkb3dudmFsdWUnXV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PSB0aGlzLl92YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICghZGljW3ZhbHVlXSkge1xuICAgICAgICAgICAgICAgICAgICBkaWNbdmFsdWVdID0gW2l0ZW1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGljW3ZhbHVlXS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWMpIHtcbiAgICAgICAgICAgIGlmIChkaWNba2V5XS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkaWNba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLl9lcnJvcnNbdGhpcy5fZmllbGRdLnB1c2goZXJyb3JNZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIWhhc0Vycm9yO1xuICAgIH1cblxuICAgIGdldEVycm9yKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIFNhbWVWYWx1ZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIF9zYW1lRmllbGRzOiBzdHJpbmdbXTtcbiAgICBfbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoZHVwbGljYXRlRmllbGRzOiBzdHJpbmdbXSwgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3NhbWVGaWVsZHMgPSBkdXBsaWNhdGVGaWVsZHM7XG4gICAgICAgIGlmICh0aGlzLl9zYW1lRmllbGRzLmxlbmd0aCA9PSAwKSBhbGVydCgnQ+G6pXUgaMOsbmggU2FtZVZhbGlkYXRvciBzYWknKTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgZ2V0U2FtZUZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NhbWVGaWVsZHM7XG4gICAgfVxuXG4gICAgZ2V0TWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2U7XG4gICAgfVxuXG4gICAgYXN5bmMgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSkge1xuICAgICAgICBjb25zdCBhbGxEdXBsaWNhdGVGaWVsZHMgPSBbLi4udGhpcy5fc2FtZUZpZWxkcywgZXZlbnQuY29udHJvbC5maWVsZF07XG5cbiAgICAgICAgY29uc3QgcGFyZW50TW9kZWwgPSBldmVudC5jdXJyZW50Tm9kZS5wYXJlbnROb2RlLm1vZGVsO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGFsbER1cGxpY2F0ZUZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5pbmRleE9mKHRoaXMuX21lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBlcnJvciA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbER1cGxpY2F0ZUZpZWxkcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gYWxsRHVwbGljYXRlRmllbGRzW2ldO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudE5vZGUgPSBldmVudC5jdXJyZW50Tm9kZS5nZXROb2RlQnlQYXRoKGZpZWxkKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS52YWx1ZSAhPSBldmVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX3NhbWVGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWwuX2Vycm9yc1tmaWVsZF0ucHVzaCh0aGlzLl9tZXNzYWdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gVmFsdWVUeXBlIHtcbiAgICBkYXRlID0gJ2RhdGUnLFxuICAgIGRhdGV0aW1lID0gJ2RhdGV0aW1lJyxcbiAgICBpbnQgPSAnaW50JyxcbiAgICBkZWNpbWFsID0gJ2RlY2ltYWwnLFxuICAgIGJvb2xlYW4gPSAnYm9vbGVhbicsXG4gICAgc3RyaW5nID0gJ3N0cmluZycsXG59XG5cbmV4cG9ydCBjbGFzcyBDb2RlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHJlID0gL15bXFx3Ji5cXC1dKyQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdChTdHJpbmcodmFsdWUpKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuICdLaMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIG3Doyc7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBTY2FsYXJWYWx1ZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHByaXZhdGUgX29wZXJhdG9yVGV4dDogc3RyaW5nID0gJyc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfb3BlcmF0b3I6IE9wZXJhdG9yLFxuICAgICAgICBwcml2YXRlIF9zY2FsYXJWYWx1ZTogYW55LFxuICAgICAgICBwcml2YXRlIF90eXBlOiBWYWx1ZVR5cGUgPSBWYWx1ZVR5cGUuc3RyaW5nLFxuICAgICkge1xuICAgIH1cblxuICAgIGdldEVycm9yKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgUGjhuqNpICR7dGhpcy5fb3BlcmF0b3JUZXh0fSAke3RoaXMuX3NjYWxhclZhbHVlfWA7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IFByb21pc2U8Ym9vbGVhbj4gfCBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMuZ2V0VmFsdWUoZXZlbnQudmFsdWUpO1xuICAgICAgICBjb25zdCByaWdodCA9IHRoaXMuZ2V0VmFsdWUodGhpcy5fc2NhbGFyVmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlVmFsdWUobGVmdCwgcmlnaHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcGFyZVZhbHVlKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX29wZXJhdG9yKSB7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmVxdWFsOlxuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ID09IHJpZ2h0O1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ub3RFcXVhbDpcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAna2jDtG5nIGLhurFuZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgIT0gcmlnaHQ7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmdyZWF0ZXI6XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2zhu5tuIGjGoW4nO1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ID4gcmlnaHQ7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWw6XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2zhu5tuIGjGoW4gaG/hurdjIGLhurFuZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgPj0gcmlnaHQ7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmxvd2VyOlxuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICduaOG7jyBoxqFuJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCA8IHJpZ2h0O1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5sb3dlclRoYW5FcXVhbDpcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAnbmjhu48gaMahbiBob+G6t2MgYuG6sW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCA8PSByaWdodDtcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaW46IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0OiBhbnlbXSA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ27hurFtIHRyb25nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbGlzdC5zb21lKHggPT4geCA9PSBsZWZ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iubm90SW46IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0OiBhbnlbXSA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ27hurFtIG5nb8OgaSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpc3QuZXZlcnkoeCA9PiB4ICE9IGxlZnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5zdGFydFdpdGg6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHI6IHN0cmluZyA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2Lhuq90IMSR4bqndSBi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHIuc3RhcnRzV2l0aChyaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdFN0YXJ0V2l0aDoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cjogc3RyaW5nID0gbGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAna2jDtG5nIGLhuq90IMSR4bqndSBi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHIuc3RhcnRzV2l0aChyaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmVuZFdpdGg6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHI6IHN0cmluZyA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2vhur90IHRow7pjIGLhurFuZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5lbmRzV2l0aChyaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEVuZFdpdGg6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHI6IHN0cmluZyA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2tow7RuZyBr4bq/dCB0aMO6YyBi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHIuZW5kc1dpdGgocmlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5jb250YWluOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdjw7MgY2jhu6lhJztcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLmluY2x1ZGVzKHJpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iubm90Q29udGFpbjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cjogc3RyaW5nID0gbGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAna2jDtG5nIGNo4bupYSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFzdHIuaW5jbHVkZXMocmlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5pc051bGw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAnxJHhu4MgdHLhu5FuZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgPT0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaXNOb3ROdWxsOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2tow7RuZyDEkeG7gyB0cuG7kW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCAhPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5pblJvbGU6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEluUm9sZTpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaW5DYXRlZ29yeTpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iubm90SW5DYXRlZ29yeTpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaW5Qb3NpdGlvbjpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iubm90SW5Qb3NpdGlvbjpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaW5MaXN0VXNlcjpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iubm90SW5MaXN0VXNlcjpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaW5MaXN0R3JvdXA6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEluTGlzdEdyb3VwOlxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5pc0N1cnJlbnRVc2VyOlxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5pc0N1cnJlbnRDYW5CbzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLl90eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFZhbHVlVHlwZS5kYXRlOlxuICAgICAgICAgICAgY2FzZSBWYWx1ZVR5cGUuZGF0ZXRpbWU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbWVudCh2YWx1ZSwgJ0REL01NL1lZWVkgaGg6bW06c3MnKTtcbiAgICAgICAgICAgIGNhc2UgVmFsdWVUeXBlLmludDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xuICAgICAgICAgICAgY2FzZSBWYWx1ZVR5cGUuZGVjaW1hbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgICAgICBjYXNlIFZhbHVlVHlwZS5ib29sZWFuOlxuICAgICAgICAgICAgICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgVmFsdWVUeXBlLnN0cmluZzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgY2xhc3MgUGFzc3dvcmRWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9tZXNzYWdlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlXG4gICAgY29uc3RydWN0b3IoKSB7XG5cbiAgICB9XG4gICAgc2V0QmFzZVNlcnZpY2UodXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuX3VzZXJTZXJ2aWNlID0gdXNlclNlcnZpY2U7XG4gICAgfVxuXG4gICAgYXN5bmMgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBsZXQgbWVzc2FnZSA9ICcnO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWU/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UudmFsaWRhdGVQYXNzd29yZCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHJlc3VsdC5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICByZXR1cm4gIW1lc3NhZ2U7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlO1xuICAgIH1cblxufVxuXG4iXX0=
|
|
824
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jbGFzc2VzL2Jhc2UvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBSzVCLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFhLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hHLE9BQU8sRUFBRSxvQkFBb0IsRUFBbUIsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFPdEYsU0FBUyxVQUFVLENBQUMsS0FBVSxFQUFFLE9BQXdCO0lBQ3BELElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFO1FBQ3ZDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDeEI7SUFDRCxJQUFJLE9BQU8sWUFBWSx1QkFBdUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7UUFDaEUsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCxJQUFJLE9BQU8sWUFBWSxvQkFBb0IsRUFBRTtRQUN6QyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUVoRCxNQUFNLGNBQWMsR0FBeUIsT0FBTyxDQUFDO1FBQ3JELElBQUksY0FBYyxDQUFDLGdCQUFnQixFQUFFO1lBQ2pDLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxFQUFFO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1NBQ3pFO1FBRUQsSUFBSSxjQUFjLENBQUMsZ0JBQWdCLEVBQUU7WUFDakMsSUFBSSxL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QjtJQUVBLENBQUM7SUFDRCxjQUFjLENBQUMsV0FBd0I7UUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDcEMsQ0FBQztJQUVLLFFBQVEsQ0FBQyxLQUFnQjs7WUFDM0IsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDMUIsSUFBSSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsTUFBTSxFQUFFO2dCQUNmLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7b0JBQ2pCLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO2lCQUM1QjthQUNKO1lBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7WUFDeEIsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNwQixDQUFDO0tBQUE7SUFFRCxRQUFRO1FBQ0osT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7Q0FFSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IENvbnRyb2xUcmVlTm9kZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3J1ZC9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBpc0FycmF5LCBpc0xpdGVyYWxPYmplY3QgfSBmcm9tICcuLi9lbnZpcm9ubWVudC1zY2hlbWEnO1xuaW1wb3J0IHsgRXZlbnREYXRhLCBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEsIEZpbGVVcGxvYWRDb250cm9sU2NoZW1hLCBPcGVyYXRvciB9IGZyb20gJy4uL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IEFkZHJlc3NDb250cm9sU2NoZW1hLCBGb3JtQ29udHJvbEJhc2UsIFRhYmxlU2NoZW1hIH0gZnJvbSAnLi8uLi9mb3JtLXNjaGVtYSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IFByb21pc2U8Ym9vbGVhbj4gfCBib29sZWFuO1xuICAgIGdldEVycm9yKCk6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gaXNOb3RFbXB0eSh2YWx1ZTogYW55LCBjb250cm9sOiBGb3JtQ29udHJvbEJhc2UpOiBib29sZWFuIHtcbiAgICBpZiAoISF2YWx1ZSAmJiB0eXBlb2YgKHZhbHVlKSA9PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcbiAgICB9XG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGaWxlVXBsb2FkQ29udHJvbFNjaGVtYSAmJiAhY29udHJvbC5oYXNGaWxlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEFkZHJlc3NDb250cm9sU2NoZW1hKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGFkZHJlc3NDb250cm9sID0gPEFkZHJlc3NDb250cm9sU2NoZW1hPmNvbnRyb2w7XG4gICAgICAgIGlmIChhZGRyZXNzQ29udHJvbC5yZXF1aXJlZFByb3ZpbmNlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUuaWRQcm92aW5jZSA9PSBudWxsIHx8IHZhbHVlLmlkUHJvdmluY2UgPT09ICcnKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWRkcmVzc0NvbnRyb2wucmVxdWlyZWREaXN0cmljdCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLmlkRGlzdHJpY3QgPT0gbnVsbCB8fCB2YWx1ZS5pZERpc3RyaWN0ID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFkZHJlc3NDb250cm9sLnJlcXVpcmVkV2FyZCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLmlkV2FyZCA9PSBudWxsIHx8IHZhbHVlLmlkV2FyZCA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRyZXNzQ29udHJvbC5yZXF1aXJlZFN0cmVldCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLnN0cmVldCA9PSBudWxsIHx8IHZhbHVlLnN0cmVldCA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRyZXNzQ29udHJvbC5yZXF1aXJlZE5vKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUubm8gPT0gbnVsbCB8fCB2YWx1ZS5ubyA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hKSB7XG4gICAgICAgIGlmICghY29udHJvbC5fY29tcG9uZW50Ll92YWx1ZSB8fCBjb250cm9sLl9jb21wb25lbnQuX3ZhbHVlLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIFJlcXVpcmVkVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSBfbGFiZWw7XG5cbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIHRoaXMuX2xhYmVsID0gZXZlbnQuY29udHJvbC5lcnJvckxhYmVsID8/IGV2ZW50LmNvbnRyb2wubGFiZWw7XG4gICAgICAgIGlmIChldmVudC5jb250cm9sLmlzSHRtbExhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLl9sYWJlbCA9IGV2ZW50LmNvbnRyb2wuZnVsbExhYmVsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc05vdEVtcHR5KGV2ZW50LnZhbHVlLCBldmVudC5jb250cm9sKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5fbGFiZWx9IGLhuq90IGJ14buZYyBuaOG6rXBgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICdUcsaw4budbmcgdGjDtG5nIHRpbiBi4bqvdCBideG7mWMgbmjhuq1wJztcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlcXVpcmVkRmllbGRzVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgX3JlcXVpcmVkRmllbGRzOiBzdHJpbmdbXTtcbiAgICBfbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocmVxdWlyZWRGaWVsZHM6IHN0cmluZ1tdLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fcmVxdWlyZWRGaWVsZHMgPSByZXF1aXJlZEZpZWxkcztcbiAgICAgICAgaWYgKHRoaXMuX3JlcXVpcmVkRmllbGRzLmxlbmd0aCA9PSAwKSBhbGVydCgnQ+G6pXUgaMOsbmggUmVxdWlyZWRGaWVsZHNWYWxpZGF0b3Igc2FpJyk7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIGdldFJlcXVpcmVkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWRGaWVsZHM7XG4gICAgfVxuXG4gICAgZ2V0TWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2U7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSkge1xuICAgICAgICBjb25zdCBhbGxSZXF1aXJlZEZpZWxkcyA9IFsuLi50aGlzLl9yZXF1aXJlZEZpZWxkcywgZXZlbnQuY29udHJvbC5maWVsZF07XG4gICAgICAgIGxldCBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgIGNvbnN0IHBhcmVudE1vZGVsID0gZXZlbnQuY3VycmVudE5vZGUucGFyZW50Tm9kZS5tb2RlbDtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBhbGxSZXF1aXJlZEZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5pbmRleE9mKHRoaXMuX21lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IGV2ZW50LmN1cnJlbnROb2RlLmdldE5vZGVCeVBhdGgoZmllbGQpO1xuICAgICAgICAgICAgaWYgKGlzTm90RW1wdHkoY3VycmVudE5vZGUubW9kZWwsIGN1cnJlbnROb2RlLmNvbnRyb2wpKSB7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fcmVxdWlyZWRGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWwuX2Vycm9yc1tmaWVsZF0ucHVzaCh0aGlzLl9tZXNzYWdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICFoYXNFcnJvcjtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRW1haWxWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSAvXigoW148PigpXFxbXFxdXFxcXC4sOzpcXHNAXCJdKyhcXC5bXjw+KClcXFtcXF1cXFxcLiw7Olxcc0BcIl0rKSopfChcIi4rXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXF0pfCgoW2EtekEtWlxcLTAtOV0rXFwuKStbYS16QS1aXXsyLH0pKSQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdChTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgdGjGsCDEkWnhu4duIHThu60nO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBMc3RFbWFpbFZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKCFpc0FycmF5KHZhbHVlKSB8fCAhdmFsdWU/Lmxlbmd0aCkgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSAvXigoW148PigpXFxbXFxdXFxcXC4sOzpcXHNAXCJdKyhcXC5bXjw+KClcXFtcXF1cXFxcLiw7Olxcc0BcIl0rKSopfChcIi4rXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXF0pfCgoW2EtekEtWlxcLTAtOV0rXFwuKStbYS16QS1aXXsyLH0pKSQvO1xuICAgICAgICByZXR1cm4gIXZhbHVlLnNvbWUoeCA9PiAhcmUudGVzdChTdHJpbmcoeCkudG9Mb3dlckNhc2UoKSkpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0PDsyBwaOG6p24gdOG7rSBraMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIHRoxrAgxJFp4buHbiB04butJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOYW1lVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIC8vIGNvbnN0IHJlID0gL15bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdW2EtesOgw6HhuqHhuqPDo8Oi4bqn4bql4bqt4bqp4bqrxIPhurHhuq/hurfhurPhurXDqMOp4bq54bq74bq9w6rhu4Hhur/hu4fhu4Phu4XDrMOt4buL4buJxKnDssOz4buN4buPw7XDtOG7k+G7keG7meG7leG7l8ah4bud4bub4buj4buf4buhw7nDuuG7peG7p8WpxrDhu6vhu6nhu7Hhu63hu6/hu7PDveG7teG7t+G7ucSRXSooPzpbIF1bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdW2EtesOgw6HhuqHhuqPDo8Oi4bqn4bql4bqt4bqp4bqrxIPhurHhuq/hurfhurPhurXDqMOp4bq54bq74bq9w6rhu4Hhur/hu4fhu4Phu4XDrMOt4buL4buJxKnDssOz4buN4buPw7XDtOG7k+G7keG7meG7leG7l8ah4bud4bub4buj4buf4buhw7nDuuG7peG7p8WpxrDhu6vhu6nhu7Hhu63hu6/hu7PDveG7teG7t+G7ucSRXSopKiR8XltBLVrDgMOB4bqg4bqiw4PDguG6puG6pOG6rOG6qOG6qsSC4bqw4bqu4bq24bqy4bq0w4jDieG6uOG6uuG6vMOK4buA4bq+4buG4buC4buEw4zDjeG7iuG7iMSow5LDk+G7jOG7jsOVw5Thu5Lhu5Dhu5jhu5Thu5bGoOG7nOG7muG7ouG7nuG7oMOZw5rhu6Thu6bFqMav4buq4buo4buw4bus4buu4buyw53hu7Thu7bhu7jEkF0qKD86WyBdW0EtWsOAw4HhuqDhuqLDg8OC4bqm4bqk4bqs4bqo4bqqxILhurDhuq7hurbhurLhurTDiMOJ4bq44bq64bq8w4rhu4Dhur7hu4bhu4Lhu4TDjMON4buK4buIxKjDksOT4buM4buOw5XDlOG7kuG7kOG7mOG7lOG7lsag4buc4bua4bui4bue4bugw5nDmuG7pOG7psWoxq/hu6rhu6jhu7Dhu6zhu67hu7LDneG7tOG7tuG7uMSQXSopKiR8XihbYS16QS1aXXsyLH1cXHNbYS16QS1aXXsxLH0nPy0/W2EtekEtWl17Mix9XFxzPyhbYS16QS1aXXsxLH0pPykvO1xuICAgICAgICBjb25zdCByZSA9IC9bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdW2EtesOgw6HhuqHhuqPDo8Oi4bqn4bql4bqt4bqp4bqrxIPhurHhuq/hurfhurPhurXDqMOp4bq54bq74bq9w6rhu4Hhur/hu4fhu4Phu4XDrMOt4buL4buJxKnDssOz4buN4buPw7XDtOG7k+G7keG7meG7leG7l8ah4bud4bub4buj4buf4buhw7nDuuG7peG7p8WpxrDhu6vhu6nhu7Hhu63hu6/hu7PDveG7teG7t+G7ucSRXSooPzpbIF1bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdW2EtesOgw6HhuqHhuqPDo8Oi4bqn4bql4bqt4bqp4bqrxIPhurHhuq/hurfhurPhurXDqMOp4bq54bq74bq9w6rhu4Hhur/hu4fhu4Phu4XDrMOt4buL4buJxKnDssOz4buN4buPw7XDtOG7k+G7keG7meG7leG7l8ah4bud4bub4buj4buf4buhw7nDuuG7peG7p8WpxrDhu6vhu6nhu7Hhu63hu6/hu7PDveG7teG7t+G7ucSRXSopKiR8XltBLVrDgMOB4bqg4bqiw4PDguG6puG6pOG6rOG6qOG6qsSC4bqw4bqu4bq24bqy4bq0w4jDieG6uOG6uuG6vMOK4buA4bq+4buG4buC4buEw4zDjeG7iuG7iMSow5LDk+G7jOG7jsOVw5Thu5Lhu5Dhu5jhu5Thu5bGoOG7nOG7muG7ouG7nuG7oMOZw5rhu6Thu6bFqMav4buq4buo4buw4bus4buu4buyw53hu7Thu7bhu7jEkF0qKD86WyBdW0EtWsOAw4HhuqDhuqLDg8OC4bqm4bqk4bqs4bqo4bqqxILhurDhuq7hurbhurLhurTDiMOJ4bq44bq64bq8w4rhu4Dhur7hu4bhu4Lhu4TDjMON4buK4buIxKjDksOT4buM4buOw5XDlOG7kuG7kOG7mOG7lOG7lsag4buc4bua4bui4bue4bugw5nDmuG7pOG7psWoxq/hu6rhu6jhu7Dhu6zhu67hu7LDneG7tOG7tuG7uMSQXSopKiR8WyBdfF4oW2EtekEtWl17Mix9XFxzW2EtekEtWl17MSx9Jz8tP1thLXpBLVpdezIsfVxccz8oW2EtekEtWl17MSx9KT8pLztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiAnS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyB0w6puJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQaG9uZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eMFsxLTldWzAtOV17OCw5fSQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiAnS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyBz4buRIMSRaeG7h24gdGhv4bqhaSc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2NjZFZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eXFxkezl9JHxeXFxkezEyfSQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiAnS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyBDQ0NEL0NNTkQnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBhc3Nwb3J0VmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgbWVzc2FnZSA9ICdLaMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIFPhu5EgaOG7mSBjaGnhur91IGhv4bq3YyBT4buRIENDQ0QgaG/hurdjIGNo4bupbmcgbWluaCBuaMOibiBkw6JuJztcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eXFxkezAsMTJ9JC87XG4gICAgICAgIHJldHVybiByZS50ZXN0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMZW5ndGhWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9lcnJvcjogYW55ID0gJyc7XG4gICAgcHJpdmF0ZSBfbWluID0gMDtcbiAgICBwcml2YXRlIF9tYXggPSAxMDA7XG5cbiAgICBjb25zdHJ1Y3RvcihtYXgsIG1pbiA9IDApIHtcbiAgICAgICAgdGhpcy5fbWF4ID0gbWF4O1xuICAgICAgICB0aGlzLl9taW4gPSBtaW47XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWluID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yID0gYMSQ4buZIGTDoGkgdOG7kWkgdGhp4buDdSAke3RoaXMuX21pbn0ga8O9IHThu7FgO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgPSB2YWx1ZSArICcnO1xuICAgICAgICBjb25zdCBsZW4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIGlmIChsZW4gPCB0aGlzLl9taW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yID0gYMSQ4buZIGTDoGkgdOG7kWkgdGhp4buDdSAke3RoaXMuX21pbn0ga8O9IHThu7FgO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZW4gPiB0aGlzLl9tYXgpIHtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yID0gYMSQ4buZIGTDoGkgdOG7kWkgxJFhICR7dGhpcy5fbWF4fSBrw70gdOG7sWA7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBob25lTnVtYmVyVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHJlID0gL14oWyBdfFsrKF0qWzAtOV17MSw0fVspXXswLDF9Wy1cXHNcXC4vMC05XSopJC9nO1xuICAgICAgICByZXR1cm4gcmUudGVzdChTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgc+G7kSDEkWnhu4duIHRob+G6oWknO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE51bWJlck9ubHlWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSAvXlxcLT8oWzAtOV0pKiQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdChTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgc+G7kSc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXRMZWFzdE9uZVJvd1RhYmxlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZXZlbnQuY3VycmVudE5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0LhuqNuZyBi4bqvdCBideG7mWMgbmjhuq1wJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYXhDb2RlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHJlID0gL14oWzAtOV0pezEwfSR8XihbMC05XSl7MTB9KC0pKFswLTldKXszfSQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdChTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgbcOjIHPhu5EgdGh14bq/JztcbiAgICB9XG59XG5cbmNvbnN0IHZhbGlkRnVuY3Rpb24gPSB7XG4gICAgW09wZXJhdG9yLmdyZWF0ZXJdOiAodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSA9PiB2YWx1ZTEgPiB2YWx1ZTIsXG4gICAgW09wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWxdOiAodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSA9PiB2YWx1ZTEgPj0gdmFsdWUyLFxuICAgIFtPcGVyYXRvci5sb3dlcl06ICh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpID0+IHZhbHVlMSA8IHZhbHVlMixcbiAgICBbT3BlcmF0b3IubG93ZXJUaGFuRXF1YWxdOiAodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSA9PiB2YWx1ZTEgPD0gdmFsdWUyLFxuICAgIFtPcGVyYXRvci5lcXVhbF06ICh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpID0+IHZhbHVlMSA9PSB2YWx1ZTJcbn07XG5cbmNvbnN0IG9wZXJhdG9yTWVhbmluZyA9IHtcbiAgICBbT3BlcmF0b3IuZ3JlYXRlcl06ICds4bubbiBoxqFuJyxcbiAgICBbT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbF06ICds4bubbiBoxqFuIGhv4bq3YyBi4bqxbmcnLFxuICAgIFtPcGVyYXRvci5sb3dlcl06ICduaOG7jyBoxqFuJyxcbiAgICBbT3BlcmF0b3IubG93ZXJUaGFuRXF1YWxdOiAnbmjhu48gaMahbiBob+G6t2MgYuG6sW5nJyxcbiAgICBbT3BlcmF0b3IuZXF1YWxdOiAnYuG6sW5nJ1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJQ29tcGFyZVZhbGlkYXRvciB7XG4gICAgY29tcGFyZVVuaXF1ZUZpZWxkOiBzdHJpbmc7XG4gICAgZ2V0T3BlcmF0b3JDb21wYXJlKCk6IE9wZXJhdG9yO1xufVxuXG4vKipcbiAqIFNvIHNhbmggMiB0aHXhu5ljIHTDrW5oIHRyb25nIGZvcm0uXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wYXJlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciwgSUNvbXBhcmVWYWxpZGF0b3Ige1xuICAgIHByaXZhdGUgX29wZXJhdG9yOiBPcGVyYXRvcjtcbiAgICBwcml2YXRlIF9jb21wYXJlQ29udHJvbDogRm9ybUNvbnRyb2xCYXNlO1xuICAgIGNvbXBhcmVVbmlxdWVGaWVsZDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3Iob3BlcmF0b3I6IE9wZXJhdG9yLCBjb21wYXJlVW5pcXVlRmllbGQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICB0aGlzLmNvbXBhcmVVbmlxdWVGaWVsZCA9IGNvbXBhcmVVbmlxdWVGaWVsZDtcbiAgICB9XG5cbiAgICBnZXRPcGVyYXRvckNvbXBhcmUoKTogT3BlcmF0b3Ige1xuICAgICAgICByZXR1cm4gdGhpcy5fb3BlcmF0b3I7XG4gICAgfVxuXG4gICAgZ2V0RmllbGRPcGVyYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdG9yO1xuICAgIH1cblxuICAgIGdldFZhbHVlQ29tcGFyZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjb21wYXJlTm9kZSA9IGV2ZW50LmN1cnJlbnROb2RlLmdldE5vZGVCeVBhdGgodGhpcy5jb21wYXJlVW5pcXVlRmllbGQpO1xuICAgICAgICB0aGlzLl9jb21wYXJlQ29udHJvbCA9IGNvbXBhcmVOb2RlLmNvbnRyb2w7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVGaWVsZCA9IHRoaXMuX2NvbXBhcmVDb250cm9sLmZpZWxkO1xuICAgICAgICBjb25zdCBjb21wYXJlVmFsdWUgPSBjb21wYXJlTm9kZS5tb2RlbDtcbiAgICAgICAgY29uc3QgY29tcGFyZVBhcmVudE1vZGVsID0gY29tcGFyZU5vZGUucGFyZW50Tm9kZS5tb2RlbDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgbGV0IGVycm9yTWVzO1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHRoaXMuX2NvbXBhcmVDb250cm9sLnZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0b3IgaW5zdGFuY2VvZiBDb21wYXJlVmFsaWRhdG9yICYmIHZhbGlkYXRvci5jb21wYXJlVW5pcXVlRmllbGQgPT0gZXZlbnQuY3VycmVudE5vZGUuY29udHJvbC51bmlxdWVGaWVsZCkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzID0gdmFsaWRhdG9yLmdldEVycm9yKGV2ZW50LmN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGNvbXBhcmVQYXJlbnRNb2RlbC5fZXJyb3JzW2NvbXBhcmVGaWVsZF0uaW5kZXhPZihlcnJvck1lcyk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyZVBhcmVudE1vZGVsLl9lcnJvcnNbY29tcGFyZUZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICB8fCB2YWx1ZSA9PT0gJydcbiAgICAgICAgICAgIHx8IGNvbXBhcmVWYWx1ZSA9PSBudWxsXG4gICAgICAgICAgICB8fCBjb21wYXJlVmFsdWUgPT0gJydcbiAgICAgICAgKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IHZhbGlkRnVuY3Rpb25bdGhpcy5fb3BlcmF0b3JdICYmIHZhbGlkRnVuY3Rpb25bdGhpcy5fb3BlcmF0b3JdKFxuICAgICAgICAgICAgdGhpcy5nZXRWYWx1ZUNvbXBhcmUodmFsdWUpLCB0aGlzLmdldFZhbHVlQ29tcGFyZShjb21wYXJlVmFsdWUpXG4gICAgICAgICk7XG5cblxuICAgICAgICBpZiAoIXJlICYmIGVycm9yTWVzKSB7XG4gICAgICAgICAgICBjb21wYXJlUGFyZW50TW9kZWwuX2Vycm9yc1tjb21wYXJlRmllbGRdLnB1c2goZXJyb3JNZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlO1xuICAgIH1cblxuICAgIGdldEVycm9yKGNvbnRyb2xUcmVlTm9kZT86IENvbnRyb2xUcmVlTm9kZSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NvbXBhcmVDb250cm9sICYmIGNvbnRyb2xUcmVlTm9kZSkge1xuICAgICAgICAgICAgdGhpcy5fY29tcGFyZUNvbnRyb2wgPSBjb250cm9sVHJlZU5vZGUuZ2V0Tm9kZUJ5UGF0aCh0aGlzLmNvbXBhcmVVbmlxdWVGaWVsZCkuY29udHJvbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYFBo4bqjaSAke29wZXJhdG9yTWVhbmluZ1t0aGlzLl9vcGVyYXRvcl19ICR7dGhpcy5fY29tcGFyZUNvbnRyb2w/LmZ1bGxMYWJlbH1gO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVDb21wYXJlVmFsaWRhdG9yIGV4dGVuZHMgQ29tcGFyZVZhbGlkYXRvciB7XG4gICAgY29uc3RydWN0b3Iob3BlcmF0b3I6IE9wZXJhdG9yLCBmaWVsZDogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG9wZXJhdG9yLCBmaWVsZCk7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWVDb21wYXJlKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE51bWJlckNvbXBhcmVWYWxpZGF0b3IgZXh0ZW5kcyBDb21wYXJlVmFsaWRhdG9yIHtcbiAgICBjb25zdHJ1Y3RvcihvcGVyYXRvcjogT3BlcmF0b3IsIGZpZWxkOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIob3BlcmF0b3IsIGZpZWxkKTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZUNvbXBhcmUodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgICB9XG59XG5cbi8qKlxuICogS2nhu4NtIHRyYSBnacOhIHRy4buLIG3hu5l0IGPhu5l0IMSRw6MgdOG7k24gdOG6oWkgdHJvbmcgZGIuXG4gKi9cbmV4cG9ydCBjbGFzcyBDaGVja0R1cGxpY2F0ZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHByaXZhdGUgX2xhYmVsOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZztcbiAgICBwcml2YXRlIF9iYXNlU2VydmljZTogQmFzZVNlcnZpY2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdEZpbHRlcnM6IEZpbHRlcltdO1xuXG4gICAgY29uc3RydWN0b3IoZGVmYXVsdEZpbHRlcnM/OiBGaWx0ZXJbXSkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0RmlsdGVycyA9IGRlZmF1bHRGaWx0ZXJzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRCYXNlU2VydmljZShiYXNlU2VydmljZTogQmFzZVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5fYmFzZVNlcnZpY2UgPSBiYXNlU2VydmljZTtcbiAgICB9XG5cbiAgICBhc3luYyB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGxldCB2YWx1ZUZpbHRlcjogYW55O1xuICAgICAgICBpZiAoZXZlbnQuY3VycmVudE5vZGUuY29udHJvbC5mdWxsTGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuX2xhYmVsID0gZXZlbnQuY3VycmVudE5vZGUuY29udHJvbC5mdWxsTGFiZWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9sYWJlbCA9IGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wubGFiZWw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBldmVudC5jdXJyZW50Tm9kZS52YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQuY3VycmVudE5vZGUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBldmVudC5jdXJyZW50Tm9kZS52YWx1ZS5tYXAoeCA9PiB4W2V2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2xbJ2Rpc3BsYXlGaWVsZCddXSkuam9pbignLCAnKTtcbiAgICAgICAgICAgICAgICB2YWx1ZUZpbHRlciA9IGV2ZW50LmN1cnJlbnROb2RlLnZhbHVlLm1hcCh4ID0+IHhbZXZlbnQuY3VycmVudE5vZGUuY29udHJvbFsndmFsdWVGaWVsZCddXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IGV2ZW50LmN1cnJlbnROb2RlLnZhbHVlW2V2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2xbJ2Rpc3BsYXlGaWVsZCddXS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gZXZlbnQuY3VycmVudE5vZGUudmFsdWVbZXZlbnQuY3VycmVudE5vZGUuY29udHJvbFsndmFsdWVGaWVsZCddXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gZXZlbnQuY3VycmVudE5vZGUudmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gZXZlbnQuY3VycmVudE5vZGUudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbe1xuICAgICAgICAgICAgZmllbGQ6IGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wuZmllbGQsXG4gICAgICAgICAgICBvcGVyYXRvcjogQXJyYXkuaXNBcnJheSh2YWx1ZUZpbHRlcikgPyBPcGVyYXRvci5pbiA6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlRmlsdGVyKVxuICAgICAgICB9XTtcbiAgICAgICAgaWYgKGV2ZW50LnJvb3RNb2RlbC5pZCkge1xuICAgICAgICAgICAgZmlsdGVycy51bnNoaWZ0KHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3Iubm90RXF1YWwsXG4gICAgICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KGV2ZW50LnJvb3RNb2RlbC5pZClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kZWZhdWx0RmlsdGVycykge1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKC4uLnRoaXMuX2RlZmF1bHRGaWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRDaGVja0V4aXN0ID0gYXdhaXQgdGhpcy5fYmFzZVNlcnZpY2UuY2hlY2tFeGlzdEJ5RmlsdGVyKGZpbHRlcnMpO1xuICAgICAgICBpZiAoIXJlc3VsdENoZWNrRXhpc3Quc3VjY2VzcyB8fCByZXN1bHRDaGVja0V4aXN0LmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIGBUcsaw4budbmcgJHt0aGlzLl9sYWJlbH0gY8OzIGdpw6EgdHLhu4sgJHt0aGlzLl92YWx1ZX0gxJHDoyB04buTbiB04bqhaWA7XG4gICAgfVxufVxuXG4vKipcbiAqIEtp4buDbSB0cmEgYuG7mSBnw6FpIHRy4buLIGPhu6dhIG5oaeG7gXUgY+G7mXQgxJHDoyB04buTbiB04bqhaSB0cm9uZyBkYi5cbiAqL1xuZXhwb3J0IGNsYXNzIENoZWNrRHVwbGljYXRlRmllbGRzVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgX2R1cGxpY2F0ZUZpZWxkczogc3RyaW5nW107XG4gICAgX21lc3NhZ2U6IHN0cmluZztcbiAgICBfb2xkTWVzc2FnZTogc3RyaW5nO1xuICAgIF9iYXNlU2VydmljZTogQmFzZVNlcnZpY2U7XG4gICAgX2RpY1ZhbHVlOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0RmlsdGVyczogRmlsdGVyW107XG5cbiAgICBjb25zdHJ1Y3RvcihkdXBsaWNhdGVGaWVsZHM6IHN0cmluZ1tdLCBtZXNzYWdlOiBzdHJpbmcsIGRlZmF1bHRGaWx0ZXJzPzogRmlsdGVyW10pIHtcbiAgICAgICAgdGhpcy5fZHVwbGljYXRlRmllbGRzID0gZHVwbGljYXRlRmllbGRzO1xuICAgICAgICBpZiAodGhpcy5fZHVwbGljYXRlRmllbGRzLmxlbmd0aCA9PSAwKSBhbGVydCgnQ+G6pXUgaMOsbmggQ2hlY2tEdXBsaWNhdGVGaWVsZHNWYWxpZGF0b3Igc2FpJyk7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICB0aGlzLl9kZWZhdWx0RmlsdGVycyA9IGRlZmF1bHRGaWx0ZXJzO1xuICAgIH1cblxuICAgIHNldEJhc2VTZXJ2aWNlKGJhc2VTZXJ2aWNlOiBCYXNlU2VydmljZSkge1xuICAgICAgICB0aGlzLl9iYXNlU2VydmljZSA9IGJhc2VTZXJ2aWNlO1xuICAgIH1cblxuICAgIGdldER1cGxpY2F0ZUZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2R1cGxpY2F0ZUZpZWxkcztcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0RmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRGaWx0ZXJzO1xuICAgIH1cblxuICAgIGdldE1lc3NhZ2UoKSB7XG4gICAgICAgIC8vIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoJyg/PD17eylbXn1dKyg/PX0pJywgJ2cnKTtcbiAgICAgICAgY29uc3QgcmVnID0gL3t7KFtefV0rKX19L2c7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX21lc3NhZ2UubWF0Y2gocmVnKTtcbiAgICAgICAgbGV0IG5ld01lc3NhZ2UgPSB0aGlzLl9tZXNzYWdlO1xuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgIGNvbnN0IGRpY1ZhbHVlID0gdGhpcy5fZGljVmFsdWU7XG4gICAgICAgICAgICByZXN1bHQuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXZhbChgdmFsdWUgPSBkaWNWYWx1ZS4ke2ZpZWxkfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXgpIHtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBuZXdNZXNzYWdlID0gbmV3TWVzc2FnZS5yZXBsYWNlKGB7eyR7ZmllbGR9fX1gLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgbmV3TWVzc2FnZSA9IG5ld01lc3NhZ2UucmVwbGFjZShmaWVsZCwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb2xkTWVzc2FnZSA9IG5ld01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBuZXdNZXNzYWdlO1xuICAgIH1cblxuICAgIGFzeW5jIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpIHtcbiAgICAgICAgY29uc3QgYWxsRHVwbGljYXRlRmllbGRzID0gWy4uLnRoaXMuX2R1cGxpY2F0ZUZpZWxkcywgZXZlbnQuY29udHJvbC5maWVsZF07XG4gICAgICAgIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XG4gICAgICAgIGxldCBoYXNOdWxsVmFsdWUgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBwYXJlbnRNb2RlbCA9IGV2ZW50LmN1cnJlbnROb2RlLnBhcmVudE5vZGUubW9kZWw7XG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgYWxsRHVwbGljYXRlRmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudE1vZGVsLl9lcnJvcnNbZmllbGRdLmluZGV4T2YodGhpcy5fb2xkTWVzc2FnZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsLl9lcnJvcnNbZmllbGRdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gZXZlbnQuY3VycmVudE5vZGUuZ2V0Tm9kZUJ5UGF0aChmaWVsZCk7XG4gICAgICAgICAgICBpZiAoY3VycmVudE5vZGUudmFsdWUgIT0gbnVsbCAmJiBjdXJyZW50Tm9kZS52YWx1ZSAhPSAnJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RpY1ZhbHVlW2ZpZWxkXSA9IGN1cnJlbnROb2RlLnZhbHVlO1xuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZXF1YWwsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh0aGlzLmdldFZhbHVlKHRoaXMuX2RpY1ZhbHVlW2ZpZWxkXSkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGhhc051bGxWYWx1ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBO4bq/dSBjw7MgMSB0csaw4budbmcgYuG7iyB0cuG7kW5nIChraMO0bmcgY8OzIGThu68gbGnhu4d1KSB0aMOsIHRy4bqjIHbhu4EgdHJ1ZVxuICAgICAgICBpZiAoaGFzTnVsbFZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGV2ZW50LnJvb3RNb2RlbC5pZCkge1xuICAgICAgICAgICAgZmlsdGVycy51bnNoaWZ0KHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3Iubm90RXF1YWwsXG4gICAgICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KGV2ZW50LnJvb3RNb2RlbC5pZClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kZWZhdWx0RmlsdGVycykge1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKC4uLnRoaXMuX2RlZmF1bHRGaWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRDaGVja0V4aXN0ID0gYXdhaXQgdGhpcy5fYmFzZVNlcnZpY2UuY2hlY2tFeGlzdEJ5RmlsdGVyKGZpbHRlcnMpO1xuICAgICAgICBpZiAoIXJlc3VsdENoZWNrRXhpc3Quc3VjY2VzcyB8fCByZXN1bHRDaGVja0V4aXN0LmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuX2R1cGxpY2F0ZUZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5wdXNoKHRoaXMuZ2V0TWVzc2FnZSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZShyYXdWYWx1ZSkge1xuICAgICAgICBpZiAoaXNMaXRlcmFsT2JqZWN0KHJhd1ZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHJhd1ZhbHVlLl9kcm9wZG93bnZhbHVlICE9IG51bGwgJiYgcmF3VmFsdWUuX2Ryb3Bkb3dudmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhd1ZhbHVlW3Jhd1ZhbHVlLl9kcm9wZG93bnZhbHVlXSB8fCByYXdWYWx1ZVsndmFsdWUnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByYXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0FycmF5KHJhd1ZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcmF3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaCh0aGlzLmdldFZhbHVlKGl0ZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhd1ZhbHVlO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2xkTWVzc2FnZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmlxdWVGaWVsZEluVGFibGVWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9maWVsZDtcblxuICAgIGNvbnN0cnVjdG9yKGZpZWxkKSB7XG4gICAgICAgIHRoaXMuX2ZpZWxkID0gZmllbGQ7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIShldmVudC5jdXJyZW50Tm9kZS5jb250cm9sIGluc3RhbmNlb2YgVGFibGVTY2hlbWEpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc3QgZGljID0ge307XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBldmVudC5jdXJyZW50Tm9kZS5jb250cm9sLnJvd1RlbXBsYXRlLmZpbmQoaXRlbSA9PiBpdGVtLmZpZWxkID09IHRoaXMuX2ZpZWxkKTtcbiAgICAgICAgaWYgKCFjb250cm9sKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCBlcnJvck1lcyA9ICdUcsaw4budbmcgJyArIGNvbnRyb2wubGFiZWwgKyAnIGtow7RuZyDEkcaw4bujYyB0csO5bmcgbmhhdSc7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBldmVudC52YWx1ZSkge1xuICAgICAgICAgICAgaWYgKGl0ZW1bdGhpcy5fZmllbGRdICE9IG51bGwgJiYgaXRlbVt0aGlzLl9maWVsZF0gIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtLl9lcnJvcnNbdGhpcy5fZmllbGRdLmluZGV4T2YoZXJyb3JNZXMpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSBpdGVtLl9lcnJvcnNbdGhpcy5fZmllbGRdLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBpdGVtW3RoaXMuX2ZpZWxkXTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ19kcm9wZG93bnZhbHVlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVt2YWx1ZVsnX2Ryb3Bkb3dudmFsdWUnXV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFkaWNbdmFsdWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpY1t2YWx1ZV0gPSBbaXRlbV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkaWNbdmFsdWVdLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRpYykge1xuICAgICAgICAgICAgaWYgKGRpY1trZXldLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRpY1trZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uX2Vycm9yc1t0aGlzLl9maWVsZF0ucHVzaChlcnJvck1lcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaGFzRXJyb3I7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgRXhhY3RPbmVWYWx1ZUluVGFibGVWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9maWVsZDtcbiAgICBwcml2YXRlIF92YWx1ZTtcbiAgICBwcml2YXRlIF9sYWJlbDtcblxuICAgIGNvbnN0cnVjdG9yKGZpZWxkLCB2YWx1ZSwgbGFiZWw/KSB7XG4gICAgICAgIHRoaXMuX2ZpZWxkID0gZmllbGQ7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX2xhYmVsID0gbGFiZWwgPyBsYWJlbCA6IHZhbHVlO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCEoZXZlbnQuY3VycmVudE5vZGUuY29udHJvbCBpbnN0YW5jZW9mIFRhYmxlU2NoZW1hKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IGRpYyA9IHt9O1xuICAgICAgICBjb25zdCBjb250cm9sID0gZXZlbnQuY3VycmVudE5vZGUuY29udHJvbC5yb3dUZW1wbGF0ZS5maW5kKGl0ZW0gPT4gaXRlbS5maWVsZCA9PSB0aGlzLl9maWVsZCk7XG4gICAgICAgIGlmICghY29udHJvbCkgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgZXJyb3JNZXMgPSAnQ2jhu4kgxJHGsOG7o2Mgbmjhuq1wIG3hu5l0IGdpw6EgdHLhu4sgJyArIHRoaXMuX2xhYmVsO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZXZlbnQudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbS5fZXJyb3JzW3RoaXMuX2ZpZWxkXS5pbmRleE9mKGVycm9yTWVzKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSBpdGVtLl9lcnJvcnNbdGhpcy5fZmllbGRdLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGl0ZW1bdGhpcy5fZmllbGRdO1xuICAgICAgICAgICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdfZHJvcGRvd252YWx1ZScpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVt2YWx1ZVsnX2Ryb3Bkb3dudmFsdWUnXV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PSB0aGlzLl92YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICghZGljW3ZhbHVlXSkge1xuICAgICAgICAgICAgICAgICAgICBkaWNbdmFsdWVdID0gW2l0ZW1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGljW3ZhbHVlXS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWMpIHtcbiAgICAgICAgICAgIGlmIChkaWNba2V5XS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkaWNba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLl9lcnJvcnNbdGhpcy5fZmllbGRdLnB1c2goZXJyb3JNZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIWhhc0Vycm9yO1xuICAgIH1cblxuICAgIGdldEVycm9yKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIFNhbWVWYWx1ZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIF9zYW1lRmllbGRzOiBzdHJpbmdbXTtcbiAgICBfbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoZHVwbGljYXRlRmllbGRzOiBzdHJpbmdbXSwgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3NhbWVGaWVsZHMgPSBkdXBsaWNhdGVGaWVsZHM7XG4gICAgICAgIGlmICh0aGlzLl9zYW1lRmllbGRzLmxlbmd0aCA9PSAwKSBhbGVydCgnQ+G6pXUgaMOsbmggU2FtZVZhbGlkYXRvciBzYWknKTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgZ2V0U2FtZUZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NhbWVGaWVsZHM7XG4gICAgfVxuXG4gICAgZ2V0TWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2U7XG4gICAgfVxuXG4gICAgYXN5bmMgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSkge1xuICAgICAgICBjb25zdCBhbGxEdXBsaWNhdGVGaWVsZHMgPSBbLi4udGhpcy5fc2FtZUZpZWxkcywgZXZlbnQuY29udHJvbC5maWVsZF07XG5cbiAgICAgICAgY29uc3QgcGFyZW50TW9kZWwgPSBldmVudC5jdXJyZW50Tm9kZS5wYXJlbnROb2RlLm1vZGVsO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGFsbER1cGxpY2F0ZUZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5pbmRleE9mKHRoaXMuX21lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBlcnJvciA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbER1cGxpY2F0ZUZpZWxkcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gYWxsRHVwbGljYXRlRmllbGRzW2ldO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudE5vZGUgPSBldmVudC5jdXJyZW50Tm9kZS5nZXROb2RlQnlQYXRoKGZpZWxkKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS52YWx1ZSAhPSBldmVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX3NhbWVGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWwuX2Vycm9yc1tmaWVsZF0ucHVzaCh0aGlzLl9tZXNzYWdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gVmFsdWVUeXBlIHtcbiAgICBkYXRlID0gJ2RhdGUnLFxuICAgIGRhdGV0aW1lID0gJ2RhdGV0aW1lJyxcbiAgICBpbnQgPSAnaW50JyxcbiAgICBkZWNpbWFsID0gJ2RlY2ltYWwnLFxuICAgIGJvb2xlYW4gPSAnYm9vbGVhbicsXG4gICAgc3RyaW5nID0gJ3N0cmluZycsXG59XG5cbmV4cG9ydCBjbGFzcyBDb2RlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHJlID0gL15bXFx3Ji5cXC1dKyQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdChTdHJpbmcodmFsdWUpKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuICdLaMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIG3Doyc7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBTY2FsYXJWYWx1ZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHByaXZhdGUgX29wZXJhdG9yVGV4dDogc3RyaW5nID0gJyc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfb3BlcmF0b3I6IE9wZXJhdG9yLFxuICAgICAgICBwcml2YXRlIF9zY2FsYXJWYWx1ZTogYW55LFxuICAgICAgICBwcml2YXRlIF90eXBlOiBWYWx1ZVR5cGUgPSBWYWx1ZVR5cGUuc3RyaW5nLFxuICAgICkge1xuICAgIH1cblxuICAgIGdldEVycm9yKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgUGjhuqNpICR7dGhpcy5fb3BlcmF0b3JUZXh0fSAke3RoaXMuX3NjYWxhclZhbHVlfWA7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IFByb21pc2U8Ym9vbGVhbj4gfCBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMuZ2V0VmFsdWUoZXZlbnQudmFsdWUpO1xuICAgICAgICBjb25zdCByaWdodCA9IHRoaXMuZ2V0VmFsdWUodGhpcy5fc2NhbGFyVmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlVmFsdWUobGVmdCwgcmlnaHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcGFyZVZhbHVlKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX29wZXJhdG9yKSB7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmVxdWFsOlxuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ID09IHJpZ2h0O1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ub3RFcXVhbDpcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAna2jDtG5nIGLhurFuZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgIT0gcmlnaHQ7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmdyZWF0ZXI6XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2zhu5tuIGjGoW4nO1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ID4gcmlnaHQ7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWw6XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2zhu5tuIGjGoW4gaG/hurdjIGLhurFuZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgPj0gcmlnaHQ7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmxvd2VyOlxuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICduaOG7jyBoxqFuJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCA8IHJpZ2h0O1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5sb3dlclRoYW5FcXVhbDpcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAnbmjhu48gaMahbiBob+G6t2MgYuG6sW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCA8PSByaWdodDtcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaW46IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0OiBhbnlbXSA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ27hurFtIHRyb25nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbGlzdC5zb21lKHggPT4geCA9PSBsZWZ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iubm90SW46IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0OiBhbnlbXSA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ27hurFtIG5nb8OgaSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpc3QuZXZlcnkoeCA9PiB4ICE9IGxlZnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5zdGFydFdpdGg6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHI6IHN0cmluZyA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2Lhuq90IMSR4bqndSBi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHIuc3RhcnRzV2l0aChyaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdFN0YXJ0V2l0aDoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cjogc3RyaW5nID0gbGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAna2jDtG5nIGLhuq90IMSR4bqndSBi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHIuc3RhcnRzV2l0aChyaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmVuZFdpdGg6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHI6IHN0cmluZyA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2vhur90IHRow7pjIGLhurFuZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5lbmRzV2l0aChyaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEVuZFdpdGg6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHI6IHN0cmluZyA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2tow7RuZyBr4bq/dCB0aMO6YyBi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHIuZW5kc1dpdGgocmlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5jb250YWluOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdjw7MgY2jhu6lhJztcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLmluY2x1ZGVzKHJpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iubm90Q29udGFpbjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cjogc3RyaW5nID0gbGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAna2jDtG5nIGNo4bupYSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFzdHIuaW5jbHVkZXMocmlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5pc051bGw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAnxJHhu4MgdHLhu5FuZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgPT0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaXNOb3ROdWxsOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2tow7RuZyDEkeG7gyB0cuG7kW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCAhPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5pblJvbGU6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEluUm9sZTpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaW5DYXRlZ29yeTpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iubm90SW5DYXRlZ29yeTpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaW5Qb3NpdGlvbjpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iubm90SW5Qb3NpdGlvbjpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaW5MaXN0VXNlcjpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iubm90SW5MaXN0VXNlcjpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaW5MaXN0R3JvdXA6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEluTGlzdEdyb3VwOlxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5pc0N1cnJlbnRVc2VyOlxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5pc0N1cnJlbnRDYW5CbzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLl90eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFZhbHVlVHlwZS5kYXRlOlxuICAgICAgICAgICAgY2FzZSBWYWx1ZVR5cGUuZGF0ZXRpbWU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbWVudCh2YWx1ZSwgJ0REL01NL1lZWVkgaGg6bW06c3MnKTtcbiAgICAgICAgICAgIGNhc2UgVmFsdWVUeXBlLmludDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xuICAgICAgICAgICAgY2FzZSBWYWx1ZVR5cGUuZGVjaW1hbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgICAgICBjYXNlIFZhbHVlVHlwZS5ib29sZWFuOlxuICAgICAgICAgICAgICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgVmFsdWVUeXBlLnN0cmluZzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgY2xhc3MgUGFzc3dvcmRWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9tZXNzYWdlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlXG4gICAgY29uc3RydWN0b3IoKSB7XG5cbiAgICB9XG4gICAgc2V0QmFzZVNlcnZpY2UodXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuX3VzZXJTZXJ2aWNlID0gdXNlclNlcnZpY2U7XG4gICAgfVxuXG4gICAgYXN5bmMgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBsZXQgbWVzc2FnZSA9ICcnO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWU/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UudmFsaWRhdGVQYXNzd29yZCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHJlc3VsdC5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICByZXR1cm4gIW1lc3NhZ2U7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlO1xuICAgIH1cblxufVxuXG4iXX0=
|
package/fesm2015/tnx-shared.js
CHANGED
|
@@ -11544,6 +11544,9 @@ class RequiredValidator {
|
|
|
11544
11544
|
validate(event) {
|
|
11545
11545
|
var _a;
|
|
11546
11546
|
this._label = (_a = event.control.errorLabel) !== null && _a !== void 0 ? _a : event.control.label;
|
|
11547
|
+
if (event.control.isHtmlLabel) {
|
|
11548
|
+
this._label = event.control.fullLabel;
|
|
11549
|
+
}
|
|
11547
11550
|
return isNotEmpty(event.value, event.control);
|
|
11548
11551
|
}
|
|
11549
11552
|
getError() {
|