@tiba-spark/client-shared-lib 25.2.0-4 → 25.2.0-40
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/esm2022/libraries/guards/sub-module-guard.mjs +2 -2
- package/esm2022/libraries/modules/auth/session.state.mjs +4 -3
- package/esm2022/libraries/service-proxy/cloud-service-proxies.mjs +3 -1
- package/esm2022/libraries/service-proxy/identity-service-proxies.mjs +3 -1
- package/fesm2022/tiba-spark-client-shared-lib.mjs +8 -3
- package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
- package/libraries/modules/auth/session.state.d.ts.map +1 -1
- package/libraries/service-proxy/cloud-service-proxies.d.ts +2 -0
- package/libraries/service-proxy/cloud-service-proxies.d.ts.map +1 -1
- package/libraries/service-proxy/identity-service-proxies.d.ts +2 -0
- package/libraries/service-proxy/identity-service-proxies.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1973,6 +1973,7 @@ export class AppConfigurationDto {
|
|
|
1973
1973
|
this.feedbackToken = _data["feedbackToken"];
|
|
1974
1974
|
this.pml = _data["pml"];
|
|
1975
1975
|
this.minimumSupportedSparkApiServiceVersion = _data["minimumSupportedSparkApiServiceVersion"];
|
|
1976
|
+
this.minimumCompatibleSparkApiServiceVersion = _data["minimumCompatibleSparkApiServiceVersion"];
|
|
1976
1977
|
}
|
|
1977
1978
|
}
|
|
1978
1979
|
static fromJS(data) {
|
|
@@ -1989,6 +1990,7 @@ export class AppConfigurationDto {
|
|
|
1989
1990
|
data["feedbackToken"] = this.feedbackToken;
|
|
1990
1991
|
data["pml"] = this.pml;
|
|
1991
1992
|
data["minimumSupportedSparkApiServiceVersion"] = this.minimumSupportedSparkApiServiceVersion;
|
|
1993
|
+
data["minimumCompatibleSparkApiServiceVersion"] = this.minimumCompatibleSparkApiServiceVersion;
|
|
1992
1994
|
return data;
|
|
1993
1995
|
}
|
|
1994
1996
|
clone() {
|
|
@@ -4583,4 +4585,4 @@ function blobToText(blob) {
|
|
|
4583
4585
|
}
|
|
4584
4586
|
});
|
|
4585
4587
|
}
|
|
4586
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktc2VydmljZS1wcm94aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9zZXJ2aWNlLXByb3h5L2lkZW50aXR5LXNlcnZpY2UtcHJveGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3QkFBd0I7QUFDeEIsbUJBQW1CO0FBQ25CLDJIQUEySDtBQUMzSCxvQkFBb0I7QUFDcEIsd0JBQXdCO0FBRXhCLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsdUNBQXVDO0FBRXZDLE9BQU8sRUFBRSxRQUFRLElBQUksbUJBQW1CLEVBQUUsVUFBVSxJQUFJLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakcsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLElBQUksZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9GLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQzs7O0FBRTVCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBUyxjQUFjLENBQUMsQ0FBQztBQUd2RSxNQUFNLE9BQU8seUJBQXlCO0lBS2xDLFlBQWdDLElBQWdCLEVBQW9DLE9BQWdCO1FBRjFGLHFCQUFnQixHQUFtRCxTQUFTLENBQUM7UUFHbkYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxPQUFP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SyxJQUFJLENBQUM7SUFDdkMsQ0FBQztDQUNKO0FBRUQsU0FBUyxjQUFjLENBQUMsT0FBZSxFQUFFLE1BQWMsRUFBRSxRQUFnQixFQUFFLE9BQWdDLEVBQUUsTUFBWTtJQUNySCxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLFNBQVM7UUFDdkMsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7UUFFaEMsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1RixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsSUFBUztJQUN6QixPQUFPLElBQUksVUFBVSxDQUFTLENBQUMsUUFBYSxFQUFFLEVBQUU7UUFDNUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3ZCO2FBQU07WUFDSCxJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEVBQUU7Z0JBQ3BCLFFBQVEsQ0FBQyxJQUFJLENBQUUsS0FBSyxDQUFDLE1BQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDM0I7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIDxhdXRvLWdlbmVyYXRlZD5cbi8vICAgICBHZW5lcmF0ZWQgdXNpbmcgdGhlIE5Td2FnIHRvb2xjaGFpbiB2MTQuMC43LjAgKE5Kc29uU2NoZW1hIHYxMS4wLjAuMCAoTmV3dG9uc29mdC5Kc29uIHYxMy4wLjAuMCkpIChodHRwOi8vTlN3YWcub3JnKVxuLy8gPC9hdXRvLWdlbmVyYXRlZD5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIFJlU2hhcnBlciBkaXNhYmxlIEluY29uc2lzdGVudE5hbWluZ1xuXG5pbXBvcnQgeyBtZXJnZU1hcCBhcyBfb2JzZXJ2YWJsZU1lcmdlTWFwLCBjYXRjaEVycm9yIGFzIF9vYnNlcnZhYmxlQ2F0Y2ggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIGFzIF9vYnNlcnZhYmxlVGhyb3csIG9mIGFzIF9vYnNlcnZhYmxlT2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgT3B0aW9uYWwsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlLCBIdHRwUmVzcG9uc2VCYXNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmV4cG9ydCBjb25zdCBBUElfQkFTRV9VUkwgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignQVBJX0JBU0VfVVJMJyk7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBc3NldFNlcnZpY2VQcm94eUlkZW50aXR5IHtcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGpzb25QYXJzZVJldml2ZXI6ICgoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgPz8gXCJcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gaWRlbnRpZmllciAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGdldExvZ28oaWRlbnRpZmllcjogc3RyaW5nIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy9hc3NldC9sb2dvP1wiO1xuICAgICAgICBpZiAoaWRlbnRpZmllciA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ2lkZW50aWZpZXInIGNhbm5vdCBiZSBudWxsLlwiKTtcbiAgICAgICAgZWxzZSBpZiAoaWRlbnRpZmllciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdXJsXyArPSBcIklkZW50aWZpZXI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIGlkZW50aWZpZXIpICsgXCImXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldExvZ28ocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldExvZ28ocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0dldExvZ28ocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvblNlcnZpY2VQcm94eUlkZW50aXR5IHtcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGpzb25QYXJzZVJldml2ZXI6ICgoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgPz8gXCJcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBnZXRIZWFsdGgoKTogT2JzZXJ2YWJsZTxIZWFsdGhEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb24vaGVhbHRoXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldEhlYWx0aChyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0SGVhbHRoKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8SGVhbHRoRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxIZWFsdGhEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzR2V0SGVhbHRoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxIZWFsdGhEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IEhlYWx0aER0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8SGVhbHRoRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGdldE9ubGluZVZhbGlkYXRvclZlcnNpb24oKTogT2JzZXJ2YWJsZTxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb24vb25saW5lLXZhbGlkYXRvci12ZXJzaW9uXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldE9ubGluZVZhbGlkYXRvclZlcnNpb24ocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldE9ubGluZVZhbGlkYXRvclZlcnNpb24ocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NHZXRPbmxpbmVWYWxpZGF0b3JWZXJzaW9uKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IE9iamVjdEh0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGdldEFwcENvbmZpZ3VyYXRpb24oKTogT2JzZXJ2YWJsZTxBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy9jb25maWd1cmF0aW9uXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldEFwcENvbmZpZ3VyYXRpb24ocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldEFwcENvbmZpZ3VyYXRpb24ocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0dldEFwcENvbmZpZ3VyYXRpb24ocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTG9jYWxpemF0aW9uU2VydmljZVByb3h5SWRlbnRpdHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBrZXlOYW1lIChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZ2V0UmVzb3VyY2Uoa2V5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxGaWxlUmVzcG9uc2U+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvbG9jYWxpemF0aW9uL2dldC1yZXNvdXJjZT9cIjtcbiAgICAgICAgaWYgKGtleU5hbWUgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICdrZXlOYW1lJyBjYW5ub3QgYmUgbnVsbC5cIik7XG4gICAgICAgIGVsc2UgaWYgKGtleU5hbWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHVybF8gKz0gXCJrZXlOYW1lPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBrZXlOYW1lKSArIFwiJlwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRSZXNvdXJjZShyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0UmVzb3VyY2UocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxGaWxlUmVzcG9uc2U+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8RmlsZVJlc3BvbnNlPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzR2V0UmVzb3VyY2UocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEZpbGVSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDYpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbiA9IHJlc3BvbnNlLmhlYWRlcnMgPyByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtZGlzcG9zaXRpb25cIikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgZmlsZU5hbWVNYXRjaCA9IGNvbnRlbnREaXNwb3NpdGlvbiA/IC9maWxlbmFtZVxcKj0oPzooXFxcXD9bJ1wiXSkoLio/KVxcMXwoPzpbXlxcc10rJy4qPycpPyhbXjtcXG5dKikpL2cuZXhlYyhjb250ZW50RGlzcG9zaXRpb24pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IGZpbGVOYW1lID0gZmlsZU5hbWVNYXRjaCAmJiBmaWxlTmFtZU1hdGNoLmxlbmd0aCA+IDEgPyBmaWxlTmFtZU1hdGNoWzNdIHx8IGZpbGVOYW1lTWF0Y2hbMl0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoZmlsZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpbGVOYW1lTWF0Y2ggPSBjb250ZW50RGlzcG9zaXRpb24gPyAvZmlsZW5hbWU9XCI/KFteXCJdKj8pXCI/KDt8JCkvZy5leGVjKGNvbnRlbnREaXNwb3NpdGlvbikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZU1hdGNoICYmIGZpbGVOYW1lTWF0Y2gubGVuZ3RoID4gMSA/IGZpbGVOYW1lTWF0Y2hbMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZih7IGZpbGVOYW1lOiBmaWxlTmFtZSwgZGF0YTogcmVzcG9uc2VCbG9iIGFzIGFueSwgc3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IF9oZWFkZXJzIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxGaWxlUmVzcG9uc2U+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2JpbGVTZXJ2aWNlUHJveHlJZGVudGl0eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGJvZHkgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBtb2JpbGVBdXRoZW50aWNhdGUodmVyc2lvbjogc3RyaW5nLCBib2R5OiBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3Z7dmVyc2lvbn0vbW9iaWxlL3VzZXJzL2F1dGhlbnRpY2F0ZVwiO1xuICAgICAgICBpZiAodmVyc2lvbiA9PT0gdW5kZWZpbmVkIHx8IHZlcnNpb24gPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICd2ZXJzaW9uJyBtdXN0IGJlIGRlZmluZWQuXCIpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKFwie3ZlcnNpb259XCIsIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgdmVyc2lvbikpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgYm9keTogY29udGVudF8sXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvblwiLFxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTW9iaWxlQXV0aGVudGljYXRlKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NNb2JpbGVBdXRoZW50aWNhdGUocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NNb2JpbGVBdXRoZW50aWNhdGUocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDE6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwMSA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDAxID0gQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gaWRlbnRpZmllciAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGdldE1vYmlsZUxvZ28oaWRlbnRpZmllcjogc3RyaW5nIHwgdW5kZWZpbmVkLCB2ZXJzaW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3Z7dmVyc2lvbn0vbW9iaWxlL2Fzc2V0L2xvZ28/XCI7XG4gICAgICAgIGlmICh2ZXJzaW9uID09PSB1bmRlZmluZWQgfHwgdmVyc2lvbiA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ3ZlcnNpb24nIG11c3QgYmUgZGVmaW5lZC5cIik7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoXCJ7dmVyc2lvbn1cIiwgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyB2ZXJzaW9uKSk7XG4gICAgICAgIGlmIChpZGVudGlmaWVyID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAnaWRlbnRpZmllcicgY2Fubm90IGJlIG51bGwuXCIpO1xuICAgICAgICBlbHNlIGlmIChpZGVudGlmaWVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB1cmxfICs9IFwiSWRlbnRpZmllcj1cIiArIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgaWRlbnRpZmllcikgKyBcIiZcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0TW9iaWxlTG9nbyhyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0TW9iaWxlTG9nbyhyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzR2V0TW9iaWxlTG9nbyhyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8TG9nb0R0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gTG9nb0R0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8TG9nb0R0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICB2ZXJzaW9ucyh2ZXJzaW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy92e3ZlcnNpb259L21vYmlsZS9zbWFydHBhcmsvdmVyc2lvbnNcIjtcbiAgICAgICAgaWYgKHZlcnNpb24gPT09IHVuZGVmaW5lZCB8fCB2ZXJzaW9uID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAndmVyc2lvbicgbXVzdCBiZSBkZWZpbmVkLlwiKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZShcInt2ZXJzaW9ufVwiLCBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIHZlcnNpb24pKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmVyc2lvbnMocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1ZlcnNpb25zKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8U3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1ZlcnNpb25zKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gU3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIG1vYmlsZUdldFNldHRpbmdzKGNhdGVnb3J5OiBTZXR0aW5nc0NhdGVnb3J5LCB2ZXJzaW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdnt2ZXJzaW9ufS9tb2JpbGUvY29uZmlndXJhdGlvbi9zZXR0aW5ncy97Y2F0ZWdvcnl9XCI7XG4gICAgICAgIGlmIChjYXRlZ29yeSA9PT0gdW5kZWZpbmVkIHx8IGNhdGVnb3J5ID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAnY2F0ZWdvcnknIG11c3QgYmUgZGVmaW5lZC5cIik7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoXCJ7Y2F0ZWdvcnl9XCIsIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgY2F0ZWdvcnkpKTtcbiAgICAgICAgaWYgKHZlcnNpb24gPT09IHVuZGVmaW5lZCB8fCB2ZXJzaW9uID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAndmVyc2lvbicgbXVzdCBiZSBkZWZpbmVkLlwiKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZShcInt2ZXJzaW9ufVwiLCBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIHZlcnNpb24pKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTW9iaWxlR2V0U2V0dGluZ3MocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc01vYmlsZUdldFNldHRpbmdzKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzTW9iaWxlR2V0U2V0dGluZ3MocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gT2JqZWN0SHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGFwcE1vZHVsZSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGZhY2lsaXR5QWxsTW9iaWxlKGFwcE1vZHVsZTogQXBwTW9kdWxlIHwgdW5kZWZpbmVkLCB2ZXJzaW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3Z7dmVyc2lvbn0vbW9iaWxlL2ZhY2lsaXR5L2Jhc2ljP1wiO1xuICAgICAgICBpZiAodmVyc2lvbiA9PT0gdW5kZWZpbmVkIHx8IHZlcnNpb24gPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICd2ZXJzaW9uJyBtdXN0IGJlIGRlZmluZWQuXCIpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKFwie3ZlcnNpb259XCIsIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgdmVyc2lvbikpO1xuICAgICAgICBpZiAoYXBwTW9kdWxlID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAnYXBwTW9kdWxlJyBjYW5ub3QgYmUgbnVsbC5cIik7XG4gICAgICAgIGVsc2UgaWYgKGFwcE1vZHVsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdXJsXyArPSBcImFwcE1vZHVsZT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgYXBwTW9kdWxlKSArIFwiJlwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NGYWNpbGl0eUFsbE1vYmlsZShyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRmFjaWxpdHlBbGxNb2JpbGUocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0ZhY2lsaXR5QWxsTW9iaWxlKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGdldEFwcENvbmZpZ3VyYXRpb25Nb2JpbGUodmVyc2lvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy92e3ZlcnNpb259L21vYmlsZS9jb25maWd1cmF0aW9uXCI7XG4gICAgICAgIGlmICh2ZXJzaW9uID09PSB1bmRlZmluZWQgfHwgdmVyc2lvbiA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ3ZlcnNpb24nIG11c3QgYmUgZGVmaW5lZC5cIik7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoXCJ7dmVyc2lvbn1cIiwgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyB2ZXJzaW9uKSk7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldEFwcENvbmZpZ3VyYXRpb25Nb2JpbGUocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldEFwcENvbmZpZ3VyYXRpb25Nb2JpbGUocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0dldEFwcENvbmZpZ3VyYXRpb25Nb2JpbGUocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHJlZnJlc2hUb2tlbiAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIG1vYmlsZVJlZnJlc2hUb2tlbihyZWZyZXNoVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCwgdmVyc2lvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3Z7dmVyc2lvbn0vbW9iaWxlL3VzZXJzL3JlZnJlc2gtdG9rZW5cIjtcbiAgICAgICAgaWYgKHZlcnNpb24gPT09IHVuZGVmaW5lZCB8fCB2ZXJzaW9uID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAndmVyc2lvbicgbXVzdCBiZSBkZWZpbmVkLlwiKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZShcInt2ZXJzaW9ufVwiLCBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIHZlcnNpb24pKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIlJlZnJlc2hUb2tlblwiOiByZWZyZXNoVG9rZW4gIT09IHVuZGVmaW5lZCAmJiByZWZyZXNoVG9rZW4gIT09IG51bGwgPyBcIlwiICsgcmVmcmVzaFRva2VuIDogXCJcIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc01vYmlsZVJlZnJlc2hUb2tlbihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTW9iaWxlUmVmcmVzaFRva2VuKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8UmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzTW9iaWxlUmVmcmVzaFRva2VuKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8UmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNtYXJ0cGFya1NlcnZpY2VQcm94eUlkZW50aXR5IHtcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGpzb25QYXJzZVJldml2ZXI6ICgoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgPz8gXCJcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICB2ZXJzaW9uczIoKTogT2JzZXJ2YWJsZTxTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvc21hcnRwYXJrL3ZlcnNpb25zXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1ZlcnNpb25zMihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmVyc2lvbnMyKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8U3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1ZlcnNpb25zMihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8U3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUZW5hbnRTZXJ2aWNlUHJveHlJZGVudGl0eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIG5hbWUgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBnZXRUZW5hbnREZXRhaWxzKG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8VGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdGVuYW50L2RldGFpbHM/XCI7XG4gICAgICAgIGlmIChuYW1lID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAnbmFtZScgY2Fubm90IGJlIG51bGwuXCIpO1xuICAgICAgICBlbHNlIGlmIChuYW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB1cmxfICs9IFwibmFtZT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgbmFtZSkgKyBcIiZcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0VGVuYW50RGV0YWlscyhyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0VGVuYW50RGV0YWlscyhyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzR2V0VGVuYW50RGV0YWlscyhyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8VGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8VGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUaGlyZFBhcnR5U2VydmljZVByb3h5SWRlbnRpdHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIG1lKCk6IE9ic2VydmFibGU8VGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdGhpcmRwYXJ0eS9tZVwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NNZShyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTWUocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc01lKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFVzZXJzU2VydmljZVByb3h5SWRlbnRpdHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBib2R5IChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgYXV0aGVudGljYXRlKGJvZHk6IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlcXVlc3REdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3VzZXJzL2F1dGhlbnRpY2F0ZVwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgYm9keTogY29udGVudF8sXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvblwiLFxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzQXV0aGVudGljYXRlKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBdXRoZW50aWNhdGUocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXF1ZXN0RHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXF1ZXN0RHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0F1dGhlbnRpY2F0ZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVxdWVzdER0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gQXV0aGVudGljYXRlUmVxdWVzdER0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDAxOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDEgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwMSA9IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhNDAxKTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIlVuYXV0aG9yaXplZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDEpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxBdXRoZW50aWNhdGVSZXF1ZXN0RHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSByZWZyZXNoVG9rZW4gKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICByZWZyZXNoVG9rZW4ocmVmcmVzaFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdXNlcnMvcmVmcmVzaHRva2VuXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJSZWZyZXNoVG9rZW5cIjogcmVmcmVzaFRva2VuICE9PSB1bmRlZmluZWQgJiYgcmVmcmVzaFRva2VuICE9PSBudWxsID8gXCJcIiArIHJlZnJlc2hUb2tlbiA6IFwiXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NSZWZyZXNoVG9rZW4ocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JlZnJlc2hUb2tlbihyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8UmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1JlZnJlc2hUb2tlbihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8UmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYWN0aXZhdGlvblRva2VuIChvcHRpb25hbCkgXG4gICAgICogQHBhcmFtIHBhc3N3b3JkQ2hhbmdlVHlwZSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIHZhbGlkYXRlQWN0aXZhdGlvbihhY3RpdmF0aW9uVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCwgcGFzc3dvcmRDaGFuZ2VUeXBlOiBQYXNzd29yZENoYW5nZVR5cGUgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3VzZXJzL3ZhbGlkYXRlLWFjdGl2YXRpb24/XCI7XG4gICAgICAgIGlmIChwYXNzd29yZENoYW5nZVR5cGUgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICdwYXNzd29yZENoYW5nZVR5cGUnIGNhbm5vdCBiZSBudWxsLlwiKTtcbiAgICAgICAgZWxzZSBpZiAocGFzc3dvcmRDaGFuZ2VUeXBlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB1cmxfICs9IFwicGFzc3dvcmRDaGFuZ2VUeXBlPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBwYXNzd29yZENoYW5nZVR5cGUpICsgXCImXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY3RpdmF0aW9uVG9rZW5cIjogYWN0aXZhdGlvblRva2VuICE9PSB1bmRlZmluZWQgJiYgYWN0aXZhdGlvblRva2VuICE9PSBudWxsID8gXCJcIiArIGFjdGl2YXRpb25Ub2tlbiA6IFwiXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NWYWxpZGF0ZUFjdGl2YXRpb24ocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1ZhbGlkYXRlQWN0aXZhdGlvbihyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzVmFsaWRhdGVBY3RpdmF0aW9uKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBib2R5IChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgbW9iaWxlQXV0aGVudGljYXRlMihib2R5OiBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3VzZXJzL2F1dGhlbnRpY2F0ZS1tb2JpbGVcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIGJvZHk6IGNvbnRlbnRfLFxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb25cIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc01vYmlsZUF1dGhlbnRpY2F0ZTIocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc01vYmlsZUF1dGhlbnRpY2F0ZTIocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NNb2JpbGVBdXRoZW50aWNhdGUyKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDAxOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDEgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwMSA9IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhNDAxKTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIlVuYXV0aG9yaXplZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDEpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGJvZHkgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBtdWx0aVRlbmFudHNBdXRoZW50aWNhdGUoYm9keTogQXV0aGVudGljYXRlUmVxdWVzdER0byB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy91c2Vycy9tdWx0aS10ZW5hbnRzLWF1dGhlbnRpY2F0ZVwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgYm9keTogY29udGVudF8sXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvblwiLFxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTXVsdGlUZW5hbnRzQXV0aGVudGljYXRlKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NNdWx0aVRlbmFudHNBdXRoZW50aWNhdGUocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NNdWx0aVRlbmFudHNBdXRoZW50aWNhdGUocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDE6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwMSA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDAxID0gQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYm9keSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIHZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkxvZ2luKGJvZHk6IFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3VzZXJzL3ZlcmlmeS0yZmEtYXV0aC1sb2dpblwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgYm9keTogY29udGVudF8sXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvblwiLFxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uTG9naW4ocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1ZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkxvZ2luKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1ZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkxvZ2luKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwMTogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDAxID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDEgPSBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBib2R5IChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgdmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uKGJvZHk6IFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3VzZXJzL3ZlcmlmeS0yZmEtYXV0aFwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgYm9keTogY29udGVudF8sXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvblwiLFxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb24ocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwMTogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDAxID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDEgPSBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGVuYWJsZTJGYWN0b3JBdXRoRm9yVXNlcih1c2VySWQ6IG51bWJlcik6IE9ic2VydmFibGU8VG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3VzZXJzL3t1c2VySWR9L2VuYWJsZS0yZmFcIjtcbiAgICAgICAgaWYgKHVzZXJJZCA9PT0gdW5kZWZpbmVkIHx8IHVzZXJJZCA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ3VzZXJJZCcgbXVzdCBiZSBkZWZpbmVkLlwiKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZShcInt1c2VySWR9XCIsIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgdXNlcklkKSk7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicHV0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0VuYWJsZTJGYWN0b3JBdXRoRm9yVXNlcihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRW5hYmxlMkZhY3RvckF1dGhGb3JVc2VyKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8VG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0VuYWJsZTJGYWN0b3JBdXRoRm9yVXNlcihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8VG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBkaXNhYmxlMkZhY3RvckF1dGhGb3JVc2VyKHVzZXJJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdXNlcnMve3VzZXJJZH0vZGlzYWJsZS0yZmFcIjtcbiAgICAgICAgaWYgKHVzZXJJZCA9PT0gdW5kZWZpbmVkIHx8IHVzZXJJZCA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ3VzZXJJZCcgbXVzdCBiZSBkZWZpbmVkLlwiKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZShcInt1c2VySWR9XCIsIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgdXNlcklkKSk7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicHV0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0Rpc2FibGUyRmFjdG9yQXV0aEZvclVzZXIocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0Rpc2FibGUyRmFjdG9yQXV0aEZvclVzZXIocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8VG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzRGlzYWJsZTJGYWN0b3JBdXRoRm9yVXNlcihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8VG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYm9keSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIHNtc0F1dGgoYm9keTogU21zQXV0aERUTyB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS92MS4wL3VzZXJzL3Ntcy1hdXRoXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgY29uc3QgY29udGVudF8gPSBKU09OLnN0cmluZ2lmeShib2R5KTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uXCIsXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU21zQXV0aChyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU21zQXV0aChyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPHZvaWQ+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8dm9pZD47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1Ntc0F1dGgocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPHZvaWQ+KG51bGwgYXMgYW55KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8dm9pZD4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBib2R5IChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgbW9iaWxlTG9naW4oYm9keTogTW9iaWxlTG9naW5EVE8gfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvdjEuMC91c2Vycy9tb2JpbGUtbG9naW5cIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIGJvZHk6IGNvbnRlbnRfLFxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb25cIixcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NNb2JpbGVMb2dpbihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTW9iaWxlTG9naW4ocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTx2b2lkPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPHZvaWQ+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NNb2JpbGVMb2dpbihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8dm9pZD4obnVsbCBhcyBhbnkpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjx2b2lkPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGNvZGUgKG9wdGlvbmFsKSBcbiAgICAgKiBAcGFyYW0gdGVuYW50TmFtZSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIG9wZW5JZEF1dGhlbnRpY2F0ZShjb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQsIHRlbmFudE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3VzZXJzL29pZGMtYXV0aD9cIjtcbiAgICAgICAgaWYgKGNvZGUgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICdjb2RlJyBjYW5ub3QgYmUgbnVsbC5cIik7XG4gICAgICAgIGVsc2UgaWYgKGNvZGUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHVybF8gKz0gXCJjb2RlPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBjb2RlKSArIFwiJlwiO1xuICAgICAgICBpZiAodGVuYW50TmFtZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ3RlbmFudE5hbWUnIGNhbm5vdCBiZSBudWxsLlwiKTtcbiAgICAgICAgZWxzZSBpZiAodGVuYW50TmFtZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdXJsXyArPSBcInRlbmFudE5hbWU9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIHRlbmFudE5hbWUpICsgXCImXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcGVuSWRBdXRoZW50aWNhdGUocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc09wZW5JZEF1dGhlbnRpY2F0ZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NPcGVuSWRBdXRoZW50aWNhdGUocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMikge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAyOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDIgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMiA9IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMik7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDIpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDE6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwMSA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDAxID0gQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25TZXJ2aWNlUHJveHlJZGVudGl0eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZ2V0T25saW5lVmFsaWRhdG9yQ29udGV4dCgpOiBPYnNlcnZhYmxlPE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3ZhbGlkYXRpb24vb25saW5lLXZhbGlkYXRvci1jb250ZXh0XCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldE9ubGluZVZhbGlkYXRvckNvbnRleHQocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldE9ubGluZVZhbGlkYXRvckNvbnRleHQocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0dldE9ubGluZVZhbGlkYXRvckNvbnRleHQocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5leHBvcnQgZW51bSBBY3Rpb25UeXBlIHtcbiAgICBOb25lID0gMCxcbiAgICBDcmVhdGUgPSAxLFxuICAgIFVwZGF0ZSA9IDIsXG4gICAgRGVsZXRlID0gMyxcbiAgICBSZW1vdGVDb21tYW5kID0gNCxcbiAgICBBdWRpdExvZ0luID0gNSxcbiAgICBVc2VyTWFpbEludml0YXRpb24gPSA2LFxuICAgIFNlbmQgPSA3LFxuICAgIFByaW50ID0gOCxcbiAgICBGYWNpbGl0eVJlbW90ZUNvbW1hbmQgPSA5LFxuICAgIFNldEFzSU8gPSAxMCxcbiAgICBBdWRpdExvZ091dCA9IDExLFxufVxuXG5leHBvcnQgY2xhc3MgQWN0aXZhdGVSZXNwb25zZUR0byBpbXBsZW1lbnRzIElBY3RpdmF0ZVJlc3BvbnNlRHRvIHtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdGZhU2V0dXA6IFRmYVNldHVwRHRvO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBY3RpdmF0ZVJlc3BvbnNlRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLnRmYVNldHVwID0gX2RhdGFbXCJ0ZmFTZXR1cFwiXSA/IFRmYVNldHVwRHRvLmZyb21KUyhfZGF0YVtcInRmYVNldHVwXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBY3RpdmF0ZVJlc3BvbnNlRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBY3RpdmF0ZVJlc3BvbnNlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1widGZhU2V0dXBcIl0gPSB0aGlzLnRmYVNldHVwID8gdGhpcy50ZmFTZXR1cC50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBY3RpdmF0ZVJlc3BvbnNlRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQWN0aXZhdGVSZXNwb25zZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGl2YXRlUmVzcG9uc2VEdG8ge1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZmFTZXR1cDogVGZhU2V0dXBEdG87XG59XG5cbmV4cG9ydCBjbGFzcyBBbGVydFByZWZlcmVuY2VzU2V0dGluZ3NEdG8gaW1wbGVtZW50cyBJQWxlcnRQcmVmZXJlbmNlc1NldHRpbmdzRHRvIHtcbiAgICBpc0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgcHJlZmVyZW5jZXM6IHsgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW47IH07IH07IH0gfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUFsZXJ0UHJlZmVyZW5jZXNTZXR0aW5nc0R0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuaXNFbmFibGVkID0gX2RhdGFbXCJpc0VuYWJsZWRcIl07XG4gICAgICAgICAgICBpZiAoX2RhdGFbXCJwcmVmZXJlbmNlc1wiXSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlZmVyZW5jZXMgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIF9kYXRhW1wicHJlZmVyZW5jZXNcIl0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhW1wicHJlZmVyZW5jZXNcIl0uaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMucHJlZmVyZW5jZXMpW2tleV0gPSBfZGF0YVtcInByZWZlcmVuY2VzXCJdW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBbGVydFByZWZlcmVuY2VzU2V0dGluZ3NEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEFsZXJ0UHJlZmVyZW5jZXNTZXR0aW5nc0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiaXNFbmFibGVkXCJdID0gdGhpcy5pc0VuYWJsZWQ7XG4gICAgICAgIGlmICh0aGlzLnByZWZlcmVuY2VzKSB7XG4gICAgICAgICAgICBkYXRhW1wicHJlZmVyZW5jZXNcIl0gPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLnByZWZlcmVuY2VzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJlZmVyZW5jZXMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+ZGF0YVtcInByZWZlcmVuY2VzXCJdKVtrZXldID0gKDxhbnk+dGhpcy5wcmVmZXJlbmNlcylba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBbGVydFByZWZlcmVuY2VzU2V0dGluZ3NEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBbGVydFByZWZlcmVuY2VzU2V0dGluZ3NEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBbGVydFByZWZlcmVuY2VzU2V0dGluZ3NEdG8ge1xuICAgIGlzRW5hYmxlZDogYm9vbGVhbjtcbiAgICBwcmVmZXJlbmNlczogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbjsgfTsgfTsgfSB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGVudW0gQWxlcnRzRGV2aWNlVHlwZSB7XG4gICAgTWFzdGVyID0gMSxcbiAgICBDYXNoUmVnaXN0ZXIgPSAyLFxuICAgIERpc3BlbnNlciA9IDMsXG4gICAgVmVyaWZpZXIgPSA0LFxuICAgIExvYmJ5U3RhdGlvbiA9IDUsXG4gICAgRW50cnlQaWwgPSA2LFxuICAgIEV4aXRQaWwgPSA3LFxuICAgIE1vbnRobHlWYWxpZGF0b3IgPSA4LFxuICAgIFZhbGlkYXRvciA9IDksXG59XG5cbmV4cG9ydCBjbGFzcyBBcHBDb25maWd1cmF0aW9uRHRvIGltcGxlbWVudHMgSUFwcENvbmZpZ3VyYXRpb25EdG8ge1xuICAgIG5ld0VkZ2VGbGFnOiBib29sZWFuO1xuICAgIGxhdGVzdEVkZ2VWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgYW5hbHl0aWNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBmZWVkYmFja1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcG1sOiBudW1iZXI7XG4gICAgbWluaW11bVN1cHBvcnRlZFNwYXJrQXBpU2VydmljZVZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXBwQ29uZmlndXJhdGlvbkR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubmV3RWRnZUZsYWcgPSBfZGF0YVtcIm5ld0VkZ2VGbGFnXCJdO1xuICAgICAgICAgICAgdGhpcy5sYXRlc3RFZGdlVmVyc2lvbiA9IF9kYXRhW1wibGF0ZXN0RWRnZVZlcnNpb25cIl07XG4gICAgICAgICAgICB0aGlzLmFuYWx5dGljc1Rva2VuID0gX2RhdGFbXCJhbmFseXRpY3NUb2tlblwiXTtcbiAgICAgICAgICAgIHRoaXMuZmVlZGJhY2tUb2tlbiA9IF9kYXRhW1wiZmVlZGJhY2tUb2tlblwiXTtcbiAgICAgICAgICAgIHRoaXMucG1sID0gX2RhdGFbXCJwbWxcIl07XG4gICAgICAgICAgICB0aGlzLm1pbmltdW1TdXBwb3J0ZWRTcGFya0FwaVNlcnZpY2VWZXJzaW9uID0gX2RhdGFbXCJtaW5pbXVtU3VwcG9ydGVkU3BhcmtBcGlTZXJ2aWNlVmVyc2lvblwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXBwQ29uZmlndXJhdGlvbkR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXBwQ29uZmlndXJhdGlvbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wibmV3RWRnZUZsYWdcIl0gPSB0aGlzLm5ld0VkZ2VGbGFnO1xuICAgICAgICBkYXRhW1wibGF0ZXN0RWRnZVZlcnNpb25cIl0gPSB0aGlzLmxhdGVzdEVkZ2VWZXJzaW9uO1xuICAgICAgICBkYXRhW1wiYW5hbHl0aWNzVG9rZW5cIl0gPSB0aGlzLmFuYWx5dGljc1Rva2VuO1xuICAgICAgICBkYXRhW1wiZmVlZGJhY2tUb2tlblwiXSA9IHRoaXMuZmVlZGJhY2tUb2tlbjtcbiAgICAgICAgZGF0YVtcInBtbFwiXSA9IHRoaXMucG1sO1xuICAgICAgICBkYXRhW1wibWluaW11bVN1cHBvcnRlZFNwYXJrQXBpU2VydmljZVZlcnNpb25cIl0gPSB0aGlzLm1pbmltdW1TdXBwb3J0ZWRTcGFya0FwaVNlcnZpY2VWZXJzaW9uO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBcHBDb25maWd1cmF0aW9uRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXBwQ29uZmlndXJhdGlvbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFwcENvbmZpZ3VyYXRpb25EdG8ge1xuICAgIG5ld0VkZ2VGbGFnOiBib29sZWFuO1xuICAgIGxhdGVzdEVkZ2VWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgYW5hbHl0aWNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBmZWVkYmFja1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcG1sOiBudW1iZXI7XG4gICAgbWluaW11bVN1cHBvcnRlZFNwYXJrQXBpU2VydmljZVZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSUFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogQXBwQ29uZmlndXJhdGlvbkR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gQXBwQ29uZmlndXJhdGlvbkR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEFwcENvbmZpZ3VyYXRpb25EdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGVudW0gQXBwTW9kdWxlIHtcbiAgICBDYyA9IDAsXG4gICAgTWFuYWdlbWVudCA9IDEsXG4gICAgU2V0dGluZ3MgPSAyLFxuICAgIFZhbGlkYXRpb24gPSAzLFxuICAgIEd1ZXN0cyA9IDQsXG4gICAgUmVwb3J0cyA9IDUsXG4gICAgTW9udGhsaWVzID0gNixcbiAgICBCYWNrb2ZmaWNlID0gNyxcbiAgICBQaSA9IDgsXG4gICAgQWNjb3VudHMgPSA5LFxuICAgIExvdENvbmZpZ3VyYXRpb24gPSAxMCxcbiAgICBFQ29tbWVyY2VCYWNrb2ZmaWNlID0gMTEsXG59XG5cbmV4cG9ydCBjbGFzcyBBdWRpdEZpbHRlciBpbXBsZW1lbnRzIElBdWRpdEZpbHRlciB7XG4gICAgc3RhcnREYXRlOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIGVuZERhdGU6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgdGFrZTogbnVtYmVyO1xuICAgIHNraXA6IG51bWJlcjtcbiAgICBzZWFyY2hWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGVudGl0eU5hbWVMaXN0OiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICBhY3Rpb25UeXBlOiBBY3Rpb25UeXBlW10gfCB1bmRlZmluZWQ7XG4gICAgZ3VpZFdpdGhGYWNpbGl0aWVzOiB7IFtrZXk6IHN0cmluZ106IG51bWJlcltdOyB9IHwgdW5kZWZpbmVkO1xuICAgIHNlYXJjaEJ5VXNlcklkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIHRlbmFudElkczogbnVtYmVyW10gfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1ZGl0RmlsdGVyKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSBfZGF0YVtcInN0YXJ0RGF0ZVwiXSA/IG1vbWVudChfZGF0YVtcInN0YXJ0RGF0ZVwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gX2RhdGFbXCJlbmREYXRlXCJdID8gbW9tZW50KF9kYXRhW1wiZW5kRGF0ZVwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy50YWtlID0gX2RhdGFbXCJ0YWtlXCJdO1xuICAgICAgICAgICAgdGhpcy5za2lwID0gX2RhdGFbXCJza2lwXCJdO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9IF9kYXRhW1wic2VhcmNoVmFsdWVcIl07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcImVudGl0eU5hbWVMaXN0XCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW50aXR5TmFtZUxpc3QgPSBbXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBfZGF0YVtcImVudGl0eU5hbWVMaXN0XCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGl0eU5hbWVMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcImFjdGlvblR5cGVcIl0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25UeXBlID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJhY3Rpb25UeXBlXCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGlvblR5cGUucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfZGF0YVtcImd1aWRXaXRoRmFjaWxpdGllc1wiXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3VpZFdpdGhGYWNpbGl0aWVzID0ge30gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfZGF0YVtcImd1aWRXaXRoRmFjaWxpdGllc1wiXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGFbXCJndWlkV2l0aEZhY2lsaXRpZXNcIl0uaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMuZ3VpZFdpdGhGYWNpbGl0aWVzKVtrZXldID0gX2RhdGFbXCJndWlkV2l0aEZhY2lsaXRpZXNcIl1ba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlYXJjaEJ5VXNlcklkID0gX2RhdGFbXCJzZWFyY2hCeVVzZXJJZFwiXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1widGVuYW50SWRzXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudGVuYW50SWRzID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJ0ZW5hbnRJZHNcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVuYW50SWRzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEF1ZGl0RmlsdGVyIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdWRpdEZpbHRlcigpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wic3RhcnREYXRlXCJdID0gdGhpcy5zdGFydERhdGUgPyB0aGlzLnN0YXJ0RGF0ZS50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJlbmREYXRlXCJdID0gdGhpcy5lbmREYXRlID8gdGhpcy5lbmREYXRlLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInRha2VcIl0gPSB0aGlzLnRha2U7XG4gICAgICAgIGRhdGFbXCJza2lwXCJdID0gdGhpcy5za2lwO1xuICAgICAgICBkYXRhW1wic2VhcmNoVmFsdWVcIl0gPSB0aGlzLnNlYXJjaFZhbHVlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmVudGl0eU5hbWVMaXN0KSkge1xuICAgICAgICAgICAgZGF0YVtcImVudGl0eU5hbWVMaXN0XCJdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuZW50aXR5TmFtZUxpc3QpXG4gICAgICAgICAgICAgICAgZGF0YVtcImVudGl0eU5hbWVMaXN0XCJdLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5hY3Rpb25UeXBlKSkge1xuICAgICAgICAgICAgZGF0YVtcImFjdGlvblR5cGVcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5hY3Rpb25UeXBlKVxuICAgICAgICAgICAgICAgIGRhdGFbXCJhY3Rpb25UeXBlXCJdLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3VpZFdpdGhGYWNpbGl0aWVzKSB7XG4gICAgICAgICAgICBkYXRhW1wiZ3VpZFdpdGhGYWNpbGl0aWVzXCJdID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5ndWlkV2l0aEZhY2lsaXRpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ndWlkV2l0aEZhY2lsaXRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+ZGF0YVtcImd1aWRXaXRoRmFjaWxpdGllc1wiXSlba2V5XSA9ICg8YW55PnRoaXMuZ3VpZFdpdGhGYWNpbGl0aWVzKVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJzZWFyY2hCeVVzZXJJZFwiXSA9IHRoaXMuc2VhcmNoQnlVc2VySWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudGVuYW50SWRzKSkge1xuICAgICAgICAgICAgZGF0YVtcInRlbmFudElkc1wiXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLnRlbmFudElkcylcbiAgICAgICAgICAgICAgICBkYXRhW1widGVuYW50SWRzXCJdLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQXVkaXRGaWx0ZXIge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdWRpdEZpbHRlcigpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1ZGl0RmlsdGVyIHtcbiAgICBzdGFydERhdGU6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgZW5kRGF0ZTogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICB0YWtlOiBudW1iZXI7XG4gICAgc2tpcDogbnVtYmVyO1xuICAgIHNlYXJjaFZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZW50aXR5TmFtZUxpc3Q6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGFjdGlvblR5cGU6IEFjdGlvblR5cGVbXSB8IHVuZGVmaW5lZDtcbiAgICBndWlkV2l0aEZhY2lsaXRpZXM6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyW107IH0gfCB1bmRlZmluZWQ7XG4gICAgc2VhcmNoQnlVc2VySWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgdGVuYW50SWRzOiBudW1iZXJbXSB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8gaW1wbGVtZW50cyBJQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0byB7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZW1wb3JhcnlCbG9ja2VkVGltZTogbnVtYmVyO1xuICAgIHRlbmFudDogVGVuYW50RHRvO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbiA9IF9kYXRhW1wiYWNjZXNzVG9rZW5cIl07XG4gICAgICAgICAgICB0aGlzLnRlbXBvcmFyeUJsb2NrZWRUaW1lID0gX2RhdGFbXCJ0ZW1wb3JhcnlCbG9ja2VkVGltZVwiXTtcbiAgICAgICAgICAgIHRoaXMudGVuYW50ID0gX2RhdGFbXCJ0ZW5hbnRcIl0gPyBUZW5hbnREdG8uZnJvbUpTKF9kYXRhW1widGVuYW50XCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJhY2Nlc3NUb2tlblwiXSA9IHRoaXMuYWNjZXNzVG9rZW47XG4gICAgICAgIGRhdGFbXCJ0ZW1wb3JhcnlCbG9ja2VkVGltZVwiXSA9IHRoaXMudGVtcG9yYXJ5QmxvY2tlZFRpbWU7XG4gICAgICAgIGRhdGFbXCJ0ZW5hbnRcIl0gPSB0aGlzLnRlbmFudCA/IHRoaXMudGVuYW50LnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0byB7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZW1wb3JhcnlCbG9ja2VkVGltZTogbnVtYmVyO1xuICAgIHRlbmFudDogVGVuYW50RHRvO1xufVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRlUmVxdWVzdER0byBpbXBsZW1lbnRzIElBdXRoZW50aWNhdGVSZXF1ZXN0RHRvIHtcbiAgICB1c2VybmFtZTogc3RyaW5nO1xuICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgdGVuYW50SWQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZVJlcXVlc3REdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJuYW1lID0gX2RhdGFbXCJ1c2VybmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMucGFzc3dvcmQgPSBfZGF0YVtcInBhc3N3b3JkXCJdO1xuICAgICAgICAgICAgdGhpcy50ZW5hbnRJZCA9IF9kYXRhW1widGVuYW50SWRcIl07XG4gICAgICAgICAgICB0aGlzLnRlbmFudE5hbWUgPSBfZGF0YVtcInRlbmFudE5hbWVcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcInVzZXJuYW1lXCJdID0gdGhpcy51c2VybmFtZTtcbiAgICAgICAgZGF0YVtcInBhc3N3b3JkXCJdID0gdGhpcy5wYXNzd29yZDtcbiAgICAgICAgZGF0YVtcInRlbmFudElkXCJdID0gdGhpcy50ZW5hbnRJZDtcbiAgICAgICAgZGF0YVtcInRlbmFudE5hbWVcIl0gPSB0aGlzLnRlbmFudE5hbWU7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlUmVxdWVzdER0byB7XG4gICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICBwYXNzd29yZDogc3RyaW5nO1xuICAgIHRlbmFudElkOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgdGVuYW50TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRlUmVxdWVzdER0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJQXV0aGVudGljYXRlUmVxdWVzdER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZVJlcXVlc3REdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXV0aGVudGljYXRlUmVxdWVzdER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQXV0aGVudGljYXRlUmVxdWVzdER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZVJlcXVlc3REdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogQXV0aGVudGljYXRlUmVxdWVzdER0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRlUmVzcG9uc2VEdG8gaW1wbGVtZW50cyBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG8ge1xuICAgIHVzZXJJZDogbnVtYmVyO1xuICAgIGZpcnN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxhc3ROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdXNlcm5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VyU3RhdHVzOiBVc2VyU3RhdHVzO1xuICAgIHBhc3N3b3JkRXhwaXJhdGlvbjogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBtb2R1bGVzOiBBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgZGVmYXVsdE1vZHVsZTogQXBwTW9kdWxlO1xuICAgIHRoaXJkUGFydHlUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVmcmVzaFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVmcmVzaEludGVydmFsOiBudW1iZXI7XG4gICAgZXhwaXJhdGlvbjogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzZXR0aW5nczogU3BhcmtTZXR0aW5nc0R0b1tdIHwgdW5kZWZpbmVkO1xuICAgIHRlbmFudDogVGVuYW50RHRvO1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIG1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VySXNUZW1wb3JhcnlCbG9ja2VkOiBib29sZWFuO1xuICAgIHBhc3N3b3JkRXhwaXJhdGlvblN0YXRlOiBQYXNzd29yZEV4cGlyYXRpb25TdGF0ZTtcbiAgICBkYXlzVG9FeHBpcmU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICB0d29GYWN0b3JBdXRoZW50aWNhdGlvbjogYm9vbGVhbjtcbiAgICB0d29GYWN0b3JBdXRoZW50aWNhdGlvbkR0bzogVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG87XG4gICAgc2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG86IFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBdXRoZW50aWNhdGVSZXNwb25zZUR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMudXNlcklkID0gX2RhdGFbXCJ1c2VySWRcIl07XG4gICAgICAgICAgICB0aGlzLmZpcnN0TmFtZSA9IF9kYXRhW1wiZmlyc3ROYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy5sYXN0TmFtZSA9IF9kYXRhW1wibGFzdE5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLnVzZXJuYW1lID0gX2RhdGFbXCJ1c2VybmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMudXNlclN0YXR1cyA9IF9kYXRhW1widXNlclN0YXR1c1wiXTtcbiAgICAgICAgICAgIHRoaXMucGFzc3dvcmRFeHBpcmF0aW9uID0gX2RhdGFbXCJwYXNzd29yZEV4cGlyYXRpb25cIl0gPyBtb21lbnQoX2RhdGFbXCJwYXNzd29yZEV4cGlyYXRpb25cIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wibW9kdWxlc1wiXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZXMgPSBbXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBfZGF0YVtcIm1vZHVsZXNcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlcy5wdXNoKEF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG8uZnJvbUpTKGl0ZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdE1vZHVsZSA9IF9kYXRhW1wiZGVmYXVsdE1vZHVsZVwiXTtcbiAgICAgICAgICAgIHRoaXMudGhpcmRQYXJ0eVRva2VuID0gX2RhdGFbXCJ0aGlyZFBhcnR5VG9rZW5cIl07XG4gICAgICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gX2RhdGFbXCJhY2Nlc3NUb2tlblwiXTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuID0gX2RhdGFbXCJyZWZyZXNoVG9rZW5cIl07XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hJbnRlcnZhbCA9IF9kYXRhW1wicmVmcmVzaEludGVydmFsXCJdO1xuICAgICAgICAgICAgdGhpcy5leHBpcmF0aW9uID0gX2RhdGFbXCJleHBpcmF0aW9uXCJdID8gbW9tZW50KF9kYXRhW1wiZXhwaXJhdGlvblwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX2RhdGFbXCJzZXR0aW5nc1wiXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJzZXR0aW5nc1wiXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5wdXNoKFNwYXJrU2V0dGluZ3NEdG8uZnJvbUpTKGl0ZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGVuYW50ID0gX2RhdGFbXCJ0ZW5hbnRcIl0gPyBUZW5hbnREdG8uZnJvbUpTKF9kYXRhW1widGVuYW50XCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IF9kYXRhW1wibWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMudXNlcklzVGVtcG9yYXJ5QmxvY2tlZCA9IF9kYXRhW1widXNlcklzVGVtcG9yYXJ5QmxvY2tlZFwiXTtcbiAgICAgICAgICAgIHRoaXMucGFzc3dvcmRFeHBpcmF0aW9uU3RhdGUgPSBfZGF0YVtcInBhc3N3b3JkRXhwaXJhdGlvblN0YXRlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXlzVG9FeHBpcmUgPSBfZGF0YVtcImRheXNUb0V4cGlyZVwiXTtcbiAgICAgICAgICAgIHRoaXMudHdvRmFjdG9yQXV0aGVudGljYXRpb24gPSBfZGF0YVtcInR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uXCJdO1xuICAgICAgICAgICAgdGhpcy50d29GYWN0b3JBdXRoZW50aWNhdGlvbkR0byA9IF9kYXRhW1widHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG9cIl0gPyBUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0by5mcm9tSlMoX2RhdGFbXCJ0d29GYWN0b3JBdXRoZW50aWNhdGlvbkR0b1wiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8gPSBfZGF0YVtcInNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvXCJdID8gU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8uZnJvbUpTKF9kYXRhW1wic2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG9cIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVSZXNwb25zZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1widXNlcklkXCJdID0gdGhpcy51c2VySWQ7XG4gICAgICAgIGRhdGFbXCJmaXJzdE5hbWVcIl0gPSB0aGlzLmZpcnN0TmFtZTtcbiAgICAgICAgZGF0YVtcImxhc3ROYW1lXCJdID0gdGhpcy5sYXN0TmFtZTtcbiAgICAgICAgZGF0YVtcInVzZXJuYW1lXCJdID0gdGhpcy51c2VybmFtZTtcbiAgICAgICAgZGF0YVtcInVzZXJTdGF0dXNcIl0gPSB0aGlzLnVzZXJTdGF0dXM7XG4gICAgICAgIGRhdGFbXCJwYXNzd29yZEV4cGlyYXRpb25cIl0gPSB0aGlzLnBhc3N3b3JkRXhwaXJhdGlvbiA/IHRoaXMucGFzc3dvcmRFeHBpcmF0aW9uLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5tb2R1bGVzKSkge1xuICAgICAgICAgICAgZGF0YVtcIm1vZHVsZXNcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5tb2R1bGVzKVxuICAgICAgICAgICAgICAgIGRhdGFbXCJtb2R1bGVzXCJdLnB1c2goaXRlbS50b0pTT04oKSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcImRlZmF1bHRNb2R1bGVcIl0gPSB0aGlzLmRlZmF1bHRNb2R1bGU7XG4gICAgICAgIGRhdGFbXCJ0aGlyZFBhcnR5VG9rZW5cIl0gPSB0aGlzLnRoaXJkUGFydHlUb2tlbjtcbiAgICAgICAgZGF0YVtcImFjY2Vzc1Rva2VuXCJdID0gdGhpcy5hY2Nlc3NUb2tlbjtcbiAgICAgICAgZGF0YVtcInJlZnJlc2hUb2tlblwiXSA9IHRoaXMucmVmcmVzaFRva2VuO1xuICAgICAgICBkYXRhW1wicmVmcmVzaEludGVydmFsXCJdID0gdGhpcy5yZWZyZXNoSW50ZXJ2YWw7XG4gICAgICAgIGRhdGFbXCJleHBpcmF0aW9uXCJdID0gdGhpcy5leHBpcmF0aW9uID8gdGhpcy5leHBpcmF0aW9uLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5zZXR0aW5ncykpIHtcbiAgICAgICAgICAgIGRhdGFbXCJzZXR0aW5nc1wiXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLnNldHRpbmdzKVxuICAgICAgICAgICAgICAgIGRhdGFbXCJzZXR0aW5nc1wiXS5wdXNoKGl0ZW0udG9KU09OKCkpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJ0ZW5hbnRcIl0gPSB0aGlzLnRlbmFudCA/IHRoaXMudGVuYW50LnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcIm1lc3NhZ2VcIl0gPSB0aGlzLm1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJ1c2VySXNUZW1wb3JhcnlCbG9ja2VkXCJdID0gdGhpcy51c2VySXNUZW1wb3JhcnlCbG9ja2VkO1xuICAgICAgICBkYXRhW1wicGFzc3dvcmRFeHBpcmF0aW9uU3RhdGVcIl0gPSB0aGlzLnBhc3N3b3JkRXhwaXJhdGlvblN0YXRlO1xuICAgICAgICBkYXRhW1wiZGF5c1RvRXhwaXJlXCJdID0gdGhpcy5kYXlzVG9FeHBpcmU7XG4gICAgICAgIGRhdGFbXCJ0d29GYWN0b3JBdXRoZW50aWNhdGlvblwiXSA9IHRoaXMudHdvRmFjdG9yQXV0aGVudGljYXRpb247XG4gICAgICAgIGRhdGFbXCJ0d29GYWN0b3JBdXRoZW50aWNhdGlvbkR0b1wiXSA9IHRoaXMudHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8gPyB0aGlzLnR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0b1wiXSA9IHRoaXMuc2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8gPyB0aGlzLnNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlUmVzcG9uc2VEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBdXRoZW50aWNhdGVSZXNwb25zZUR0byB7XG4gICAgdXNlcklkOiBudW1iZXI7XG4gICAgZmlyc3ROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGFzdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VybmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHVzZXJTdGF0dXM6IFVzZXJTdGF0dXM7XG4gICAgcGFzc3dvcmRFeHBpcmF0aW9uOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIG1vZHVsZXM6IEF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICBkZWZhdWx0TW9kdWxlOiBBcHBNb2R1bGU7XG4gICAgdGhpcmRQYXJ0eVRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWZyZXNoSW50ZXJ2YWw6IG51bWJlcjtcbiAgICBleHBpcmF0aW9uOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNldHRpbmdzOiBTcGFya1NldHRpbmdzRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgdGVuYW50OiBUZW5hbnREdG87XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHVzZXJJc1RlbXBvcmFyeUJsb2NrZWQ6IGJvb2xlYW47XG4gICAgcGFzc3dvcmRFeHBpcmF0aW9uU3RhdGU6IFBhc3N3b3JkRXhwaXJhdGlvblN0YXRlO1xuICAgIGRheXNUb0V4cGlyZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIHR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uOiBib29sZWFuO1xuICAgIHR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvOiBUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0bztcbiAgICBzaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bzogU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG87XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBBdXRoZW50aWNhdGVSZXNwb25zZUR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX2RhdGFbXCJkYXRhXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IFtdIGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIF9kYXRhW1wiZGF0YVwiXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLnB1c2goQXV0aGVudGljYXRlUmVzcG9uc2VEdG8uZnJvbUpTKGl0ZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5kYXRhKSkge1xuICAgICAgICAgICAgZGF0YVtcImRhdGFcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5kYXRhKVxuICAgICAgICAgICAgICAgIGRhdGFbXCJkYXRhXCJdLnB1c2goaXRlbS50b0pTT04oKSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRlVXNlck1vZHVsZUR0byBpbXBsZW1lbnRzIElBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvIHtcbiAgICBtb2R1bGU6IEFwcE1vZHVsZTtcbiAgICBzdWJNb2R1bGU6IFN1Yk1vZHVsZVtdIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5tb2R1bGUgPSBfZGF0YVtcIm1vZHVsZVwiXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wic3ViTW9kdWxlXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3ViTW9kdWxlID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJzdWJNb2R1bGVcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3ViTW9kdWxlLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcIm1vZHVsZVwiXSA9IHRoaXMubW9kdWxlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnN1Yk1vZHVsZSkpIHtcbiAgICAgICAgICAgIGRhdGFbXCJzdWJNb2R1bGVcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5zdWJNb2R1bGUpXG4gICAgICAgICAgICAgICAgZGF0YVtcInN1Yk1vZHVsZVwiXS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlVXNlck1vZHVsZUR0byB7XG4gICAgbW9kdWxlOiBBcHBNb2R1bGU7XG4gICAgc3ViTW9kdWxlOiBTdWJNb2R1bGVbXSB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIEF6dXJlU2V0dGluZ3MgaW1wbGVtZW50cyBJQXp1cmVTZXR0aW5ncyB7XG4gICAgY2xpZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBenVyZVNldHRpbmdzKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5jbGllbnRJZCA9IF9kYXRhW1wiY2xpZW50SWRcIl07XG4gICAgICAgICAgICB0aGlzLnRlbmFudElkID0gX2RhdGFbXCJ0ZW5hbnRJZFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXp1cmVTZXR0aW5ncyB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXp1cmVTZXR0aW5ncygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiY2xpZW50SWRcIl0gPSB0aGlzLmNsaWVudElkO1xuICAgICAgICBkYXRhW1widGVuYW50SWRcIl0gPSB0aGlzLnRlbmFudElkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBenVyZVNldHRpbmdzIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXp1cmVTZXR0aW5ncygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF6dXJlU2V0dGluZ3Mge1xuICAgIGNsaWVudElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdGVuYW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGVudW0gRGF0ZVRpbWVGaWVsZCB7XG4gICAgVmFsaWRUbyA9IDAsXG4gICAgVmFsaWRGcm9tID0gMSxcbiAgICBGcm9tRGF0ZVRpbWUgPSAyLFxuICAgIFRvRGF0ZVRpbWUgPSAzLFxuICAgIENyZWF0aW9uID0gNCxcbiAgICBNb2RpZmllZCA9IDUsXG4gICAgUHJvZHVjZWREYXRlVGltZSA9IDYsXG4gICAgUHJpbnRlZERhdGVUaW1lID0gNyxcbiAgICBMYXN0VHJhbnNEYXRlVGltZSA9IDgsXG4gICAgTGFzdElORGF0ZVRpbWUgPSA5LFxuICAgIExhc3RBY3Rpdml0eSA9IDEwLFxuICAgIENyZWF0ZWRBdCA9IDExLFxuICAgIFBhc3N3b3JkRXhwaXJhdGlvbiA9IDEyLFxuICAgIFRlcm1zQXBwcm92YWxEYXRlID0gMTMsXG4gICAgVXBkYXRlZEF0ID0gMTQsXG4gICAgTGFzdENvbm5lY3Rpb24gPSAxNSxcbiAgICBEYXRlVGltZSA9IDE2LFxuICAgIFVwZGF0ZURhdGUgPSAxNyxcbiAgICBWYWxpZFRpbWUgPSAxOCxcbn1cblxuZXhwb3J0IGVudW0gRW52aXJvbm1lbnRNb2RlIHtcbiAgICBEZXZlbG9wbWVudCA9IDEsXG4gICAgUHJvZHVjdGlvbiA9IDIsXG4gICAgU3RhZ2luZyA9IDMsXG4gICAgU2FuZGJveCA9IDQsXG4gICAgTG9jYWwgPSA1LFxuICAgIEF1dG9tYXRpb24gPSA2LFxufVxuXG5leHBvcnQgY2xhc3MgRmFjaWxpdHlCYXNpY0R0byBpbXBsZW1lbnRzIElGYWNpbGl0eUJhc2ljRHRvIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGNsb3VkSWQ6IG51bWJlcjtcbiAgICBjbG91ZFBhcmVudElkOiBudW1iZXI7XG4gICAgaXNCYXNpYzogYm9vbGVhbjtcbiAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVtYmVyO1xuICAgIHNpdGVDb2RlOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHBhcmVudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGlzTXVsdGlQYXJrOiBudW1iZXI7XG4gICAgdGltZURyaWZ0OiBudW1iZXI7XG4gICAgc2VydmVyRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgc3BUaW1lWm9uZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRvdGFsU3BhY2U6IG51bWJlcjtcbiAgICBpc01haW5Db250cm9sbGVyQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzQ3JlZGl0U2VydmVyRW5hYmxlZDogYm9vbGVhbjtcbiAgICBpc0xQUkNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc0xQUkVuYWJsZWQ6IGJvb2xlYW47XG4gICAgaXNUaWNrZXRMZXNzRW5hYmxlZDogYm9vbGVhbjtcbiAgICBscHJEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIG1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIGFjdGl2ZTogbnVtYmVyO1xuICAgIHBlcm1pc3Npb25zOiB7IFtrZXk6IHN0cmluZ106IFBlcm1pc3Npb25EdG87IH0gfCB1bmRlZmluZWQ7XG4gICAgZmVhdHVyZVBlcm1pc3Npb25zOiBQZXJtaXNzaW9uVHlwZVtdIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElGYWNpbGl0eUJhc2ljRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IF9kYXRhW1wiaWRcIl07XG4gICAgICAgICAgICB0aGlzLmNsb3VkSWQgPSBfZGF0YVtcImNsb3VkSWRcIl07XG4gICAgICAgICAgICB0aGlzLmNsb3VkUGFyZW50SWQgPSBfZGF0YVtcImNsb3VkUGFyZW50SWRcIl07XG4gICAgICAgICAgICB0aGlzLmlzQmFzaWMgPSBfZGF0YVtcImlzQmFzaWNcIl07XG4gICAgICAgICAgICB0aGlzLm11bHRpUGFya1BhcmVudElEID0gX2RhdGFbXCJtdWx0aVBhcmtQYXJlbnRJRFwiXTtcbiAgICAgICAgICAgIHRoaXMuc2l0ZUNvZGUgPSBfZGF0YVtcInNpdGVDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gX2RhdGFbXCJuYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQgPSBfZGF0YVtcInBhcmVudFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNNdWx0aVBhcmsgPSBfZGF0YVtcImlzTXVsdGlQYXJrXCJdO1xuICAgICAgICAgICAgdGhpcy50aW1lRHJpZnQgPSBfZGF0YVtcInRpbWVEcmlmdFwiXTtcbiAgICAgICAgICAgIHRoaXMuc2VydmVyRGF0ZVRpbWUgPSBfZGF0YVtcInNlcnZlckRhdGVUaW1lXCJdID8gbW9tZW50KF9kYXRhW1wic2VydmVyRGF0ZVRpbWVcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3BUaW1lWm9uZSA9IF9kYXRhW1wic3BUaW1lWm9uZVwiXTtcbiAgICAgICAgICAgIHRoaXMudG90YWxTcGFjZSA9IF9kYXRhW1widG90YWxTcGFjZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA9IF9kYXRhW1wiaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQgPSBfZGF0YVtcImlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc0NyZWRpdFNlcnZlckVuYWJsZWQgPSBfZGF0YVtcImlzQ3JlZGl0U2VydmVyRW5hYmxlZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNMUFJDb25uZWN0ZWQgPSBfZGF0YVtcImlzTFBSQ29ubmVjdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc0xQUkVuYWJsZWQgPSBfZGF0YVtcImlzTFBSRW5hYmxlZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNUaWNrZXRMZXNzRW5hYmxlZCA9IF9kYXRhW1wiaXNUaWNrZXRMZXNzRW5hYmxlZFwiXTtcbiAgICAgICAgICAgIHRoaXMubHByRGlzY29ubmVjdGVkVGltZXN0YW1wID0gX2RhdGFbXCJscHJEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPyBtb21lbnQoX2RhdGFbXCJscHJEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gX2RhdGFbXCJjcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPyBtb21lbnQoX2RhdGFbXCJjcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMubWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBfZGF0YVtcIm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID8gbW9tZW50KF9kYXRhW1wibWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gX2RhdGFbXCJhY3RpdmVcIl07XG4gICAgICAgICAgICBpZiAoX2RhdGFbXCJwZXJtaXNzaW9uc1wiXSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIF9kYXRhW1wicGVybWlzc2lvbnNcIl0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhW1wicGVybWlzc2lvbnNcIl0uaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMucGVybWlzc2lvbnMpW2tleV0gPSBfZGF0YVtcInBlcm1pc3Npb25zXCJdW2tleV0gPyBQZXJtaXNzaW9uRHRvLmZyb21KUyhfZGF0YVtcInBlcm1pc3Npb25zXCJdW2tleV0pIDogbmV3IFBlcm1pc3Npb25EdG8oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcImZlYXR1cmVQZXJtaXNzaW9uc1wiXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVQZXJtaXNzaW9ucyA9IFtdIGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIF9kYXRhW1wiZmVhdHVyZVBlcm1pc3Npb25zXCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVQZXJtaXNzaW9ucy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBGYWNpbGl0eUJhc2ljRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBGYWNpbGl0eUJhc2ljRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpZFwiXSA9IHRoaXMuaWQ7XG4gICAgICAgIGRhdGFbXCJjbG91ZElkXCJdID0gdGhpcy5jbG91ZElkO1xuICAgICAgICBkYXRhW1wiY2xvdWRQYXJlbnRJZFwiXSA9IHRoaXMuY2xvdWRQYXJlbnRJZDtcbiAgICAgICAgZGF0YVtcImlzQmFzaWNcIl0gPSB0aGlzLmlzQmFzaWM7XG4gICAgICAgIGRhdGFbXCJtdWx0aVBhcmtQYXJlbnRJRFwiXSA9IHRoaXMubXVsdGlQYXJrUGFyZW50SUQ7XG4gICAgICAgIGRhdGFbXCJzaXRlQ29kZVwiXSA9IHRoaXMuc2l0ZUNvZGU7XG4gICAgICAgIGRhdGFbXCJuYW1lXCJdID0gdGhpcy5uYW1lO1xuICAgICAgICBkYXRhW1wicGFyZW50XCJdID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGRhdGFbXCJpc011bHRpUGFya1wiXSA9IHRoaXMuaXNNdWx0aVBhcms7XG4gICAgICAgIGRhdGFbXCJ0aW1lRHJpZnRcIl0gPSB0aGlzLnRpbWVEcmlmdDtcbiAgICAgICAgZGF0YVtcInNlcnZlckRhdGVUaW1lXCJdID0gdGhpcy5zZXJ2ZXJEYXRlVGltZSA/IHRoaXMuc2VydmVyRGF0ZVRpbWUudG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3BUaW1lWm9uZVwiXSA9IHRoaXMuc3BUaW1lWm9uZTtcbiAgICAgICAgZGF0YVtcInRvdGFsU3BhY2VcIl0gPSB0aGlzLnRvdGFsU3BhY2U7XG4gICAgICAgIGRhdGFbXCJpc01haW5Db250cm9sbGVyQ29ubmVjdGVkXCJdID0gdGhpcy5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkO1xuICAgICAgICBkYXRhW1wiaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWRcIl0gPSB0aGlzLmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkO1xuICAgICAgICBkYXRhW1wiaXNDcmVkaXRTZXJ2ZXJFbmFibGVkXCJdID0gdGhpcy5pc0NyZWRpdFNlcnZlckVuYWJsZWQ7XG4gICAgICAgIGRhdGFbXCJpc0xQUkNvbm5lY3RlZFwiXSA9IHRoaXMuaXNMUFJDb25uZWN0ZWQ7XG4gICAgICAgIGRhdGFbXCJpc0xQUkVuYWJsZWRcIl0gPSB0aGlzLmlzTFBSRW5hYmxlZDtcbiAgICAgICAgZGF0YVtcImlzVGlja2V0TGVzc0VuYWJsZWRcIl0gPSB0aGlzLmlzVGlja2V0TGVzc0VuYWJsZWQ7XG4gICAgICAgIGRhdGFbXCJscHJEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPSB0aGlzLmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/IHRoaXMubHByRGlzY29ubmVjdGVkVGltZXN0YW1wLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcImNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA9IHRoaXMuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8gdGhpcy5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAudG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wibWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPSB0aGlzLm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8gdGhpcy5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcC50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJhY3RpdmVcIl0gPSB0aGlzLmFjdGl2ZTtcbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGRhdGFbXCJwZXJtaXNzaW9uc1wiXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wicGVybWlzc2lvbnNcIl0pW2tleV0gPSB0aGlzLnBlcm1pc3Npb25zW2tleV0gPyB0aGlzLnBlcm1pc3Npb25zW2tleV0udG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZlYXR1cmVQZXJtaXNzaW9ucykpIHtcbiAgICAgICAgICAgIGRhdGFbXCJmZWF0dXJlUGVybWlzc2lvbnNcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5mZWF0dXJlUGVybWlzc2lvbnMpXG4gICAgICAgICAgICAgICAgZGF0YVtcImZlYXR1cmVQZXJtaXNzaW9uc1wiXS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEZhY2lsaXR5QmFzaWNEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBGYWNpbGl0eUJhc2ljRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRmFjaWxpdHlCYXNpY0R0byB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBjbG91ZElkOiBudW1iZXI7XG4gICAgY2xvdWRQYXJlbnRJZDogbnVtYmVyO1xuICAgIGlzQmFzaWM6IGJvb2xlYW47XG4gICAgbXVsdGlQYXJrUGFyZW50SUQ6IG51bWJlcjtcbiAgICBzaXRlQ29kZTogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwYXJlbnQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBpc011bHRpUGFyazogbnVtYmVyO1xuICAgIHRpbWVEcmlmdDogbnVtYmVyO1xuICAgIHNlcnZlckRhdGVUaW1lOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNwVGltZVpvbmU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0b3RhbFNwYWNlOiBudW1iZXI7XG4gICAgaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc0NyZWRpdFNlcnZlckNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc0NyZWRpdFNlcnZlckVuYWJsZWQ6IGJvb2xlYW47XG4gICAgaXNMUFJDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNMUFJFbmFibGVkOiBib29sZWFuO1xuICAgIGlzVGlja2V0TGVzc0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgbHByRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIGNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBtYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBhY3RpdmU6IG51bWJlcjtcbiAgICBwZXJtaXNzaW9uczogeyBba2V5OiBzdHJpbmddOiBQZXJtaXNzaW9uRHRvOyB9IHwgdW5kZWZpbmVkO1xuICAgIGZlYXR1cmVQZXJtaXNzaW9uczogUGVybWlzc2lvblR5cGVbXSB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGVudW0gRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMge1xuICAgIE1hbnVhbGx5UnVuWiA9IDEsXG4gICAgVXBkYXRlU2V0dGluZ3MgPSAyLFxuICAgIFNldEFjdGl2ZVJhdGUgPSAzLFxuICAgIFVwZGF0ZU1DRGF0ZVRpbWUgPSA0LFxuICAgIFJ1bk1hY3JvID0gNSxcbiAgICBUcmFuc21pdFNwZWNpYWxEYXlzID0gNixcbn1cblxuZXhwb3J0IGVudW0gRmlsZVR5cGUge1xuICAgIFhMU1ggPSAxLFxuICAgIENTViA9IDIsXG4gICAgUERGID0gMyxcbn1cblxuZXhwb3J0IGVudW0gR2VuZXJhbEFjdGlvblR5cGUge1xuICAgIERpc2Nvbm5lY3RGcm9tU2Vzc2lvbnMgPSAxLFxufVxuXG5leHBvcnQgY2xhc3MgR2V0TG9nb0R0byBpbXBsZW1lbnRzIElHZXRMb2dvRHRvIHtcbiAgICBpZGVudGlmaWVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUdldExvZ29EdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlkZW50aWZpZXIgPSBfZGF0YVtcImlkZW50aWZpZXJcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEdldExvZ29EdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEdldExvZ29EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImlkZW50aWZpZXJcIl0gPSB0aGlzLmlkZW50aWZpZXI7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEdldExvZ29EdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBHZXRMb2dvRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJR2V0TG9nb0R0byB7XG4gICAgaWRlbnRpZmllcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgSGVhbHRoQmFzZSBpbXBsZW1lbnRzIElIZWFsdGhCYXNlIHtcbiAgICBsaW5rOiBIZWFsdGhTdGF0dXM7XG4gICAgc3RhdHVzOiBIZWFsdGhTdGF0dXM7XG4gICAgdmVyc2lvbjogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElIZWFsdGhCYXNlKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5saW5rID0gX2RhdGFbXCJsaW5rXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBfZGF0YVtcInN0YXR1c1wiXTtcbiAgICAgICAgICAgIHRoaXMudmVyc2lvbiA9IF9kYXRhW1widmVyc2lvblwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogSGVhbHRoQmFzZSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgSGVhbHRoQmFzZSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wibGlua1wiXSA9IHRoaXMubGluaztcbiAgICAgICAgZGF0YVtcInN0YXR1c1wiXSA9IHRoaXMuc3RhdHVzO1xuICAgICAgICBkYXRhW1widmVyc2lvblwiXSA9IHRoaXMudmVyc2lvbjtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogSGVhbHRoQmFzZSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEhlYWx0aEJhc2UoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElIZWFsdGhCYXNlIHtcbiAgICBsaW5rOiBIZWFsdGhTdGF0dXM7XG4gICAgc3RhdHVzOiBIZWFsdGhTdGF0dXM7XG4gICAgdmVyc2lvbjogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgSGVhbHRoRHRvIGltcGxlbWVudHMgSUhlYWx0aER0byB7XG4gICAgZW52aXJvbm1lbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBzcGFya0FwaVNlcnZpY2VWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHNlcnZpY2VzOiB7IFtrZXk6IHN0cmluZ106IEhlYWx0aEJhc2U7IH0gfCB1bmRlZmluZWQ7XG4gICAgcnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElIZWFsdGhEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gX2RhdGFbXCJlbnZpcm9ubWVudFwiXTtcbiAgICAgICAgICAgIHRoaXMuc3BhcmtBcGlTZXJ2aWNlVmVyc2lvbiA9IF9kYXRhW1wic3BhcmtBcGlTZXJ2aWNlVmVyc2lvblwiXTtcbiAgICAgICAgICAgIHRoaXMudmVyc2lvbiA9IF9kYXRhW1widmVyc2lvblwiXTtcbiAgICAgICAgICAgIGlmIChfZGF0YVtcInNlcnZpY2VzXCJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcyA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gX2RhdGFbXCJzZXJ2aWNlc1wiXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGFbXCJzZXJ2aWNlc1wiXS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5zZXJ2aWNlcylba2V5XSA9IF9kYXRhW1wic2VydmljZXNcIl1ba2V5XSA/IEhlYWx0aEJhc2UuZnJvbUpTKF9kYXRhW1wic2VydmljZXNcIl1ba2V5XSkgOiBuZXcgSGVhbHRoQmFzZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucnVubmluZ1N0YXR1cyA9IF9kYXRhW1wicnVubmluZ1N0YXR1c1wiXSA/IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0by5mcm9tSlMoX2RhdGFbXCJydW5uaW5nU3RhdHVzXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBIZWFsdGhEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEhlYWx0aER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZW52aXJvbm1lbnRcIl0gPSB0aGlzLmVudmlyb25tZW50O1xuICAgICAgICBkYXRhW1wic3BhcmtBcGlTZXJ2aWNlVmVyc2lvblwiXSA9IHRoaXMuc3BhcmtBcGlTZXJ2aWNlVmVyc2lvbjtcbiAgICAgICAgZGF0YVtcInZlcnNpb25cIl0gPSB0aGlzLnZlcnNpb247XG4gICAgICAgIGlmICh0aGlzLnNlcnZpY2VzKSB7XG4gICAgICAgICAgICBkYXRhW1wic2VydmljZXNcIl0gPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLnNlcnZpY2VzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VydmljZXMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+ZGF0YVtcInNlcnZpY2VzXCJdKVtrZXldID0gdGhpcy5zZXJ2aWNlc1trZXldID8gdGhpcy5zZXJ2aWNlc1trZXldLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcInJ1bm5pbmdTdGF0dXNcIl0gPSB0aGlzLnJ1bm5pbmdTdGF0dXMgPyB0aGlzLnJ1bm5pbmdTdGF0dXMudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogSGVhbHRoRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgSGVhbHRoRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSGVhbHRoRHRvIHtcbiAgICBlbnZpcm9ubWVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHNwYXJrQXBpU2VydmljZVZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB2ZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgc2VydmljZXM6IHsgW2tleTogc3RyaW5nXTogSGVhbHRoQmFzZTsgfSB8IHVuZGVmaW5lZDtcbiAgICBydW5uaW5nU3RhdHVzOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG87XG59XG5cbmV4cG9ydCBjbGFzcyBIZWFsdGhEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSUhlYWx0aER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBIZWFsdGhEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJSGVhbHRoRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gSGVhbHRoRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogSGVhbHRoRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgSGVhbHRoRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEhlYWx0aER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBIZWFsdGhEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSGVhbHRoRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEhlYWx0aER0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBIZWFsdGhTdGF0dXMge1xuICAgIERvd24gPSAwLFxuICAgIFVwID0gMSxcbn1cblxuZXhwb3J0IGVudW0gSHR0cFN0YXR1c0NvZGUge1xuICAgIENvbnRpbnVlID0gMTAwLFxuICAgIFN3aXRjaGluZ1Byb3RvY29scyA9IDEwMSxcbiAgICBQcm9jZXNzaW5nID0gMTAyLFxuICAgIEVhcmx5SGludHMgPSAxMDMsXG4gICAgT0sgPSAyMDAsXG4gICAgQ3JlYXRlZCA9IDIwMSxcbiAgICBBY2NlcHRlZCA9IDIwMixcbiAgICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24gPSAyMDMsXG4gICAgTm9Db250ZW50ID0gMjA0LFxuICAgIFJlc2V0Q29udGVudCA9IDIwNSxcbiAgICBQYXJ0aWFsQ29udGVudCA9IDIwNixcbiAgICBNdWx0aVN0YXR1cyA9IDIwNyxcbiAgICBBbHJlYWR5UmVwb3J0ZWQgPSAyMDgsXG4gICAgSU1Vc2VkID0gMjI2LFxuICAgIE11bHRpcGxlQ2hvaWNlcyA9IDMwMCxcbiAgICBBbWJpZ3VvdXMgPSAzMDEsXG4gICAgTW92ZWRQZXJtYW5lbnRseSA9IDMwMixcbiAgICBNb3ZlZCA9IDMwMyxcbiAgICBGb3VuZCA9IDMwNCxcbiAgICBSZWRpcmVjdCA9IDMwNSxcbiAgICBTZWVPdGhlciA9IDMwNixcbiAgICBSZWRpcmVjdE1ldGhvZCA9IDMwNyxcbiAgICBOb3RNb2RpZmllZCA9IDMwOCxcbiAgICBVc2VQcm94eSA9IDQwMCxcbiAgICBVbnVzZWQgPSA0MDEsXG4gICAgVGVtcG9yYXJ5UmVkaXJlY3QgPSA0MDIsXG4gICAgUmVkaXJlY3RLZWVwVmVyYiA9IDQwMyxcbiAgICBQZXJtYW5lbnRSZWRpcmVjdCA9IDQwNCxcbiAgICBCYWRSZXF1ZXN0ID0gNDA1LFxuICAgIFVuYXV0aG9yaXplZCA9IDQwNixcbiAgICBQYXltZW50UmVxdWlyZWQgPSA0MDcsXG4gICAgRm9yYmlkZGVuID0gNDA4LFxuICAgIE5vdEZvdW5kID0gNDA5LFxuICAgIE1ldGhvZE5vdEFsbG93ZWQgPSA0MTAsXG4gICAgTm90QWNjZXB0YWJsZSA9IDQxMSxcbiAgICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQgPSA0MTIsXG4gICAgUmVxdWVzdFRpbWVvdXQgPSA0MTMsXG4gICAgQ29uZmxpY3QgPSA0MTQsXG4gICAgR29uZSA9IDQxNSxcbiAgICBMZW5ndGhSZXF1aXJlZCA9IDQxNixcbiAgICBQcmVjb25kaXRpb25GYWlsZWQgPSA0MTcsXG4gICAgUmVxdWVzdEVudGl0eVRvb0xhcmdlID0gNDIxLFxuICAgIFJlcXVlc3RVcmlUb29Mb25nID0gNDIyLFxuICAgIFVuc3VwcG9ydGVkTWVkaWFUeXBlID0gNDIzLFxuICAgIFJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGUgPSA0MjQsXG4gICAgRXhwZWN0YXRpb25GYWlsZWQgPSA0MjYsXG4gICAgTWlzZGlyZWN0ZWRSZXF1ZXN0ID0gNDI4LFxuICAgIFVucHJvY2Vzc2FibGVFbnRpdHkgPSA0MjksXG4gICAgVW5wcm9jZXNzYWJsZUNvbnRlbnQgPSA0MzEsXG4gICAgTG9ja2VkID0gNDUxLFxuICAgIEZhaWxlZERlcGVuZGVuY3kgPSA1MDAsXG4gICAgVXBncmFkZVJlcXVpcmVkID0gNTAxLFxuICAgIFByZWNvbmRpdGlvblJlcXVpcmVkID0gNTAyLFxuICAgIFRvb01hbnlSZXF1ZXN0cyA9IDUwMyxcbiAgICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2UgPSA1MDQsXG4gICAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnMgPSA1MDUsXG4gICAgSW50ZXJuYWxTZXJ2ZXJFcnJvciA9IDUwNixcbiAgICBOb3RJbXBsZW1lbnRlZCA9IDUwNyxcbiAgICBCYWRHYXRld2F5ID0gNTA4LFxuICAgIFNlcnZpY2VVbmF2YWlsYWJsZSA9IDUxMCxcbiAgICBHYXRld2F5VGltZW91dCA9IDUxMSxcbn1cblxuZXhwb3J0IGNsYXNzIEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IHsgW2tleTogc3RyaW5nXTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG87IH0gfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgaWYgKF9kYXRhW1wiZGF0YVwiXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gX2RhdGFbXCJkYXRhXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YVtcImRhdGFcIl0uaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMuZGF0YSlba2V5XSA9IF9kYXRhW1wiZGF0YVwiXVtrZXldID8gQXV0aGVudGljYXRlUmVzcG9uc2VEdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXVtrZXldKSA6IG5ldyBBdXRoZW50aWNhdGVSZXNwb25zZUR0bygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PmRhdGFbXCJkYXRhXCJdKVtrZXldID0gdGhpcy5kYXRhW2tleV0gPyB0aGlzLmRhdGFba2V5XS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IHsgW2tleTogc3RyaW5nXTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG87IH0gfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ29EdG8gaW1wbGVtZW50cyBJTG9nb0R0byB7XG4gICAgaW1hZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJTG9nb0R0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2UgPSBfZGF0YVtcImltYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBMb2dvRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBMb2dvRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpbWFnZVwiXSA9IHRoaXMuaW1hZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IExvZ29EdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBMb2dvRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTG9nb0R0byB7XG4gICAgaW1hZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSUxvZ29EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogTG9nb0R0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gTG9nb0R0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgTG9nb0R0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IExvZ29EdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIE1vYmlsZUxvZ2luRFRPIGltcGxlbWVudHMgSU1vYmlsZUxvZ2luRFRPIHtcbiAgICB0ZW5hbnRfaWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwaG9uZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHNtc0NvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1bmlxdWVJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwbGF0Zm9ybTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGJyYW5kOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZGV2aWNlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRldmljZU1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSU1vYmlsZUxvZ2luRFRPKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy50ZW5hbnRfaWQgPSBfZGF0YVtcInRlbmFudF9pZFwiXTtcbiAgICAgICAgICAgIHRoaXMucGhvbmUgPSBfZGF0YVtcInBob25lXCJdO1xuICAgICAgICAgICAgdGhpcy5zbXNDb2RlID0gX2RhdGFbXCJzbXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy51bmlxdWVJZCA9IF9kYXRhW1widW5pcXVlSWRcIl07XG4gICAgICAgICAgICB0aGlzLnZlcnNpb24gPSBfZGF0YVtcInZlcnNpb25cIl07XG4gICAgICAgICAgICB0aGlzLnBsYXRmb3JtID0gX2RhdGFbXCJwbGF0Zm9ybVwiXTtcbiAgICAgICAgICAgIHRoaXMuYnJhbmQgPSBfZGF0YVtcImJyYW5kXCJdO1xuICAgICAgICAgICAgdGhpcy5kZXZpY2VOYW1lID0gX2RhdGFbXCJkZXZpY2VOYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy5kZXZpY2VNb2RlbCA9IF9kYXRhW1wiZGV2aWNlTW9kZWxcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IE1vYmlsZUxvZ2luRFRPIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBNb2JpbGVMb2dpbkRUTygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1widGVuYW50X2lkXCJdID0gdGhpcy50ZW5hbnRfaWQ7XG4gICAgICAgIGRhdGFbXCJwaG9uZVwiXSA9IHRoaXMucGhvbmU7XG4gICAgICAgIGRhdGFbXCJzbXNDb2RlXCJdID0gdGhpcy5zbXNDb2RlO1xuICAgICAgICBkYXRhW1widW5pcXVlSWRcIl0gPSB0aGlzLnVuaXF1ZUlkO1xuICAgICAgICBkYXRhW1widmVyc2lvblwiXSA9IHRoaXMudmVyc2lvbjtcbiAgICAgICAgZGF0YVtcInBsYXRmb3JtXCJdID0gdGhpcy5wbGF0Zm9ybTtcbiAgICAgICAgZGF0YVtcImJyYW5kXCJdID0gdGhpcy5icmFuZDtcbiAgICAgICAgZGF0YVtcImRldmljZU5hbWVcIl0gPSB0aGlzLmRldmljZU5hbWU7XG4gICAgICAgIGRhdGFbXCJkZXZpY2VNb2RlbFwiXSA9IHRoaXMuZGV2aWNlTW9kZWw7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IE1vYmlsZUxvZ2luRFRPIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgTW9iaWxlTG9naW5EVE8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNb2JpbGVMb2dpbkRUTyB7XG4gICAgdGVuYW50X2lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcGhvbmU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBzbXNDb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdW5pcXVlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB2ZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcGxhdGZvcm06IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBicmFuZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRldmljZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBkZXZpY2VNb2RlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgT2JqZWN0SHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElPYmplY3RIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogYW55IHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSU9iamVjdEh0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXTtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBPYmplY3RIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBPYmplY3RIdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGE7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IE9iamVjdEh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBPYmplY3RIdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJT2JqZWN0SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IGFueSB8IHVuZGVmaW5lZDtcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgT25saW5lVmFsaWRhdG9yQ29udGV4dER0byBpbXBsZW1lbnRzIElPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvIHtcbiAgICBndWlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcGFya0lkOiBudW1iZXI7XG4gICAgcGFya05hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjb21wYW55SWQ6IG51bWJlcjtcbiAgICBzdWJDb21wYW55SWQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICB2YWxpZGF0aW9uVHlwZUlkOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSU9ubGluZVZhbGlkYXRvckNvbnRleHREdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmd1aWQgPSBfZGF0YVtcImd1aWRcIl07XG4gICAgICAgICAgICB0aGlzLnBhcmtJZCA9IF9kYXRhW1wicGFya0lkXCJdO1xuICAgICAgICAgICAgdGhpcy5wYXJrTmFtZSA9IF9kYXRhW1wicGFya05hbWVcIl07XG4gICAgICAgICAgICB0aGlzLmNvbXBhbnlJZCA9IF9kYXRhW1wiY29tcGFueUlkXCJdO1xuICAgICAgICAgICAgdGhpcy5zdWJDb21wYW55SWQgPSBfZGF0YVtcInN1YkNvbXBhbnlJZFwiXTtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblR5cGVJZCA9IF9kYXRhW1widmFsaWRhdGlvblR5cGVJZFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogT25saW5lVmFsaWRhdG9yQ29udGV4dER0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgT25saW5lVmFsaWRhdG9yQ29udGV4dER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZ3VpZFwiXSA9IHRoaXMuZ3VpZDtcbiAgICAgICAgZGF0YVtcInBhcmtJZFwiXSA9IHRoaXMucGFya0lkO1xuICAgICAgICBkYXRhW1wicGFya05hbWVcIl0gPSB0aGlzLnBhcmtOYW1lO1xuICAgICAgICBkYXRhW1wiY29tcGFueUlkXCJdID0gdGhpcy5jb21wYW55SWQ7XG4gICAgICAgIGRhdGFbXCJzdWJDb21wYW55SWRcIl0gPSB0aGlzLnN1YkNvbXBhbnlJZDtcbiAgICAgICAgZGF0YVtcInZhbGlkYXRpb25UeXBlSWRcIl0gPSB0aGlzLnZhbGlkYXRpb25UeXBlSWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJT25saW5lVmFsaWRhdG9yQ29udGV4dER0byB7XG4gICAgZ3VpZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHBhcmtJZDogbnVtYmVyO1xuICAgIHBhcmtOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY29tcGFueUlkOiBudW1iZXI7XG4gICAgc3ViQ29tcGFueUlkOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgdmFsaWRhdGlvblR5cGVJZDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgT25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJT25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSU9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogT25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogT25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogT25saW5lVmFsaWRhdG9yQ29udGV4dER0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBQYXNzd29yZENoYW5nZVR5cGUge1xuICAgIFJlZ2lzdHJhdGlvbiA9IDAsXG4gICAgRm9yZ290ID0gMSxcbiAgICBFeHBpcmF0aW9uID0gMixcbn1cblxuZXhwb3J0IGVudW0gUGFzc3dvcmRFeHBpcmF0aW9uU3RhdGUge1xuICAgIE5vdEV4cGlyZWQgPSAxLFxuICAgIEFib3V0VG9FeHBpcmUgPSAyLFxuICAgIEV4cGlyZWQgPSAzLFxufVxuXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbkR0byBpbXBsZW1lbnRzIElQZXJtaXNzaW9uRHRvIHtcbiAgICB0eXBlOiBQZXJtaXNzaW9uVHlwZTtcbiAgICBncm91cDogUGVybWlzc2lvbkdyb3VwO1xuICAgIHNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlO1xuICAgIG1vZHVsZTogQXBwTW9kdWxlO1xuICAgIHN1Yk1vZHVsZTogU3ViTW9kdWxlO1xuICAgIG1haW46IGJvb2xlYW47XG4gICAgZGlzcGxheTogYm9vbGVhbjtcbiAgICBjb21tYW5kOiBSZW1vdGVDb21tYW5kVHlwZXM7XG4gICAgZmFjaWxpdHlDb21tYW5kOiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcztcbiAgICBhY3Rpb246IFJlbW90ZUFjdGlvblR5cGVzO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElQZXJtaXNzaW9uRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gX2RhdGFbXCJ0eXBlXCJdO1xuICAgICAgICAgICAgdGhpcy5ncm91cCA9IF9kYXRhW1wiZ3JvdXBcIl07XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UgPSBfZGF0YVtcInNlcnZpY2VcIl07XG4gICAgICAgICAgICB0aGlzLm1vZHVsZSA9IF9kYXRhW1wibW9kdWxlXCJdO1xuICAgICAgICAgICAgdGhpcy5zdWJNb2R1bGUgPSBfZGF0YVtcInN1Yk1vZHVsZVwiXTtcbiAgICAgICAgICAgIHRoaXMubWFpbiA9IF9kYXRhW1wibWFpblwiXTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheSA9IF9kYXRhW1wiZGlzcGxheVwiXTtcbiAgICAgICAgICAgIHRoaXMuY29tbWFuZCA9IF9kYXRhW1wiY29tbWFuZFwiXTtcbiAgICAgICAgICAgIHRoaXMuZmFjaWxpdHlDb21tYW5kID0gX2RhdGFbXCJmYWNpbGl0eUNvbW1hbmRcIl07XG4gICAgICAgICAgICB0aGlzLmFjdGlvbiA9IF9kYXRhW1wiYWN0aW9uXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBQZXJtaXNzaW9uRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBQZXJtaXNzaW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJ0eXBlXCJdID0gdGhpcy50eXBlO1xuICAgICAgICBkYXRhW1wiZ3JvdXBcIl0gPSB0aGlzLmdyb3VwO1xuICAgICAgICBkYXRhW1wic2VydmljZVwiXSA9IHRoaXMuc2VydmljZTtcbiAgICAgICAgZGF0YVtcIm1vZHVsZVwiXSA9IHRoaXMubW9kdWxlO1xuICAgICAgICBkYXRhW1wic3ViTW9kdWxlXCJdID0gdGhpcy5zdWJNb2R1bGU7XG4gICAgICAgIGRhdGFbXCJtYWluXCJdID0gdGhpcy5tYWluO1xuICAgICAgICBkYXRhW1wiZGlzcGxheVwiXSA9IHRoaXMuZGlzcGxheTtcbiAgICAgICAgZGF0YVtcImNvbW1hbmRcIl0gPSB0aGlzLmNvbW1hbmQ7XG4gICAgICAgIGRhdGFbXCJmYWNpbGl0eUNvbW1hbmRcIl0gPSB0aGlzLmZhY2lsaXR5Q29tbWFuZDtcbiAgICAgICAgZGF0YVtcImFjdGlvblwiXSA9IHRoaXMuYWN0aW9uO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBQZXJtaXNzaW9uRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgUGVybWlzc2lvbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlcm1pc3Npb25EdG8ge1xuICAgIHR5cGU6IFBlcm1pc3Npb25UeXBlO1xuICAgIGdyb3VwOiBQZXJtaXNzaW9uR3JvdXA7XG4gICAgc2VydmljZTogUGVybWlzc2lvblNlcnZpY2U7XG4gICAgbW9kdWxlOiBBcHBNb2R1bGU7XG4gICAgc3ViTW9kdWxlOiBTdWJNb2R1bGU7XG4gICAgbWFpbjogYm9vbGVhbjtcbiAgICBkaXNwbGF5OiBib29sZWFuO1xuICAgIGNvbW1hbmQ6IFJlbW90ZUNvbW1hbmRUeXBlcztcbiAgICBmYWNpbGl0eUNvbW1hbmQ6IEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzO1xuICAgIGFjdGlvbjogUmVtb3RlQWN0aW9uVHlwZXM7XG59XG5cbmV4cG9ydCBlbnVtIFBlcm1pc3Npb25Hcm91cCB7XG4gICAgTm9uZSA9IDAsXG4gICAgR2VuZXJhbFBlcm1pc3Npb25zID0gMSxcbiAgICBBZHZhbmNlZE9wdGlvbnMgPSAyLFxuICAgIFRpY2tldFBlcm1pc3Npb25zID0gMyxcbiAgICBQYXJraW5nTG90UGVybWlzc2lvbnMgPSA0LFxufVxuXG5leHBvcnQgZW51bSBQZXJtaXNzaW9uU2VydmljZSB7XG4gICAgQ2xvdWQgPSAwLFxuICAgIFNwYXJrQ29yZSA9IDEsXG4gICAgQ2xvdWRTcGFya0NvcmUgPSAyLFxuICAgIFNtYXJ0UGFyayA9IDMsXG59XG5cbmV4cG9ydCBlbnVtIFBlcm1pc3Npb25UeXBlIHtcbiAgICBDY01haW4gPSAwLFxuICAgIERlcHJlY2F0ZWRBZG1pbk1haW4gPSAxLFxuICAgIFVubG9ja0Rvb3IgPSAyLFxuICAgIFZlbmRHYXRlID0gMyxcbiAgICBWYWxpZGF0ZSA9IDQsXG4gICAgU2V0UHJpY2UgPSA1LFxuICAgIFJlc3RvcmVUaWNrZXQgPSA2LFxuICAgIENoYW5nZURldmljZUFjY2Vzc01vZGUgPSA3LFxuICAgIFJlc2V0RGV2aWNlQWNjZXNzTW9kZSA9IDgsXG4gICAgUmVzdGFydERldmljZSA9IDksXG4gICAgUmVzZXRCaWxsRGlzcGVuc2VyID0gMTAsXG4gICAgQ2xvc2VHYXRlID0gMTEsXG4gICAgRWplY3RKYW1tZWRUaWNrZXQgPSAxMixcbiAgICBTd2FsbG93SmFtbWVkVGlja2V0ID0gMTMsXG4gICAgRGVsaXZlckJ1bmRsZUJpbGxzID0gMTQsXG4gICAgTG9ja0Nhc2hSZWdpc3RlciA9IDE1LFxuICAgIFNldFJhdGUgPSAxNixcbiAgICBJbnNlcnRWaXJ0dWFsVGlja2V0ID0gMTcsXG4gICAgSG9sZFJlbGF5ID0gMTgsXG4gICAgT3BlblJlbGF5ID0gMTksXG4gICAgUHJpbnRUaWNrZXQgPSAyMCxcbiAgICBUcmlnZ2VyTFBSTW9kdWxlID0gMjEsXG4gICAgRW5hYmxlUmVwcmludFJlY2VpcHQgPSAyMixcbiAgICBPcGVuR2F0ZUNvbnRpbnVvdXNseSA9IDIzLFxuICAgIENsb3NlR2F0ZUNvbnRpbnVvdXNseSA9IDI0LFxuICAgIE1hbnVhbGx5Q2xvc2VUaWNrZXQgPSAyNSxcbiAgICBVcGRhdGVMb2NhdGlvbiA9IDI2LFxuICAgIFVwZGF0ZU9jY3VwYW5jeSA9IDI3LFxuICAgIEF0dGFjaFRpY2tldCA9IDI4LFxuICAgIFVwZGF0ZUxpY2Vuc2VQbGF0ZSA9IDI5LFxuICAgIExvc3RUaWNrZXQgPSAzMCxcbiAgICBJbnNlcnRSZW1vdGVWYWxpZGF0aW9uID0gMzEsXG4gICAgVXBkYXRlUGF5bWVudCA9IDMyLFxuICAgIFVwZGF0ZVpvbmVPY2N1cGFuY3kgPSAzMyxcbiAgICBVcGRhdGVSZW1vdGVWYWxpZGF0aW9uID0gMzQsXG4gICAgVmFsaWRhdGlvbk1haW4gPSAzNSxcbiAgICBWYWxpZGF0aW9uRVZhbGlkYXRpb25WaWV3ID0gMzYsXG4gICAgVmFsaWRhdGlvblN0aWNrZXJWaWV3ID0gMzcsXG4gICAgVmFsaWRhdGlvbkNvdXBvblZpZXcgPSAzOCxcbiAgICBSZXBvcnRzTWFpbiA9IDM5LFxuICAgIEd1ZXN0TWFpbiA9IDQwLFxuICAgIFVwZGF0ZURvY3VtZW50ID0gNDEsXG4gICAgVmlld1JldmVudWUgPSA0MixcbiAgICBQcmludFJlY2VpcHQgPSA0MyxcbiAgICBNb250aGxpZXNNYWluID0gNDQsXG4gICAgUGlNYWluID0gNDUsXG4gICAgR3Vlc3RHcm91cFZpZXcgPSA0NixcbiAgICBTaW5nbGVHdWVzdCA9IDQ3LFxuICAgIENsb3NlVGlja2V0Rm9ySVNGID0gNDgsXG4gICAgUGF5bWVudEZvcklTRiA9IDQ5LFxuICAgIE1hbnVhbGx5UnVuWiA9IDUwLFxuICAgIFVwZGF0ZVNldHRpbmdzID0gNTEsXG4gICAgU2V0QWN0aXZlUmF0ZSA9IDUyLFxuICAgIFVwZGF0ZU1DRGF0ZVRpbWUgPSA1MyxcbiAgICBHdWVzdEhvdGVsR3Vlc3RWaWV3ID0gNTQsXG4gICAgR3Vlc3RWaWV3ID0gNTUsXG4gICAgQWNjb3VudE1hbmFnZW1lbnRNYWluID0gNTYsXG4gICAgQWNjb3VudE1hbmFnZW1lbnRBY2NvdW50VmlldyA9IDU3LFxuICAgIE1vbnRobGllc1ZpZXcgPSA1OCxcbiAgICBNb250aGx5U2VyaWVzQ3JlYXRlID0gNTksXG4gICAgUnVuTWFjcm8gPSA2MCxcbiAgICBUZW5hbnRTZXR0aW5nc01haW4gPSA2MSxcbiAgICBNYW5hZ2VtZW50QWRtaW4gPSA2MixcbiAgICBCbGFja0xpc3QgPSA2MyxcbiAgICBTeXN0ZW1BZG1pbiA9IDY0LFxuICAgIE9wZXJhdGlvbmFsQWRtaW4gPSA2NSxcbiAgICBGYWNpbGl0aWVzQW5kU21hcnRwYXJrcyA9IDY2LFxuICAgIExvZ28gPSA2NyxcbiAgICBTbXRwU2V0dGluZ3MgPSA2OCxcbiAgICBEZWZhdWx0VXNlclNldHRpbmdzID0gNjksXG4gICAgQXVkaXQgPSA3MCxcbiAgICBCYWNrb2ZmaWNlTWFpbiA9IDcxLFxuICAgIExvdENvbmZpZ3VyYXRpb25NYWluID0gNzIsXG4gICAgTG90Q29uZmlndXJhdGlvblJhdGVzID0gNzMsXG4gICAgTG90Q29uZmlndXJhdGlvblNjaGVkdWxlciA9IDc0LFxuICAgIExvdENvbmZpZ3VyYXRpb25WYWxpZGF0aW9uUHJvZmlsZSA9IDc1LFxuICAgIEhvdGVsR3Vlc3RJT0NyZWF0ZSA9IDc2LFxuICAgIEVDb21tZXJjZUJhY2tvZmZpY2VNYWluID0gNzcsXG4gICAgVmFsaWRhdGlvbkVWYWxpZGF0aW9uQ3JlYXRlID0gNzgsXG4gICAgVmFsaWRhdGlvbkVWYWxpZGF0aW9uVXBkYXRlID0gNzksXG4gICAgVmFsaWRhdGlvbkVWYWxpZGF0aW9uRGVsZXRlID0gODAsXG4gICAgVmFsaWRhdGlvblN0aWNrZXJDcmVhdGUgPSA4MSxcbiAgICBWYWxpZGF0aW9uU3RpY2tlclVwZGF0ZSA9IDgyLFxuICAgIFZhbGlkYXRpb25TdGlja2VyRGVsZXRlID0gODMsXG4gICAgVmFsaWRhdGlvbkNvdXBvbkNyZWF0ZSA9IDg0LFxuICAgIFZhbGlkYXRpb25Db3Vwb25VcGRhdGUgPSA4NSxcbiAgICBWYWxpZGF0aW9uQ291cG9uRGVsZXRlID0gODYsXG4gICAgR3Vlc3RHcm91cENyZWF0ZSA9IDg3LFxuICAgIEFjY291bnRNYW5hZ2VtZW50QWNjb3VudENyZWF0ZSA9IDg4LFxuICAgIEFjY291bnRNYW5hZ2VtZW50QWNjb3VudFVwZGF0ZSA9IDg5LFxuICAgIEFjY291bnRNYW5hZ2VtZW50QWNjb3VudERlbGV0ZSA9IDkwLFxuICAgIE1vbnRobGllc0NyZWF0ZSA9IDkxLFxuICAgIE1vbnRobGllc1VwZGF0ZSA9IDkyLFxuICAgIE1vbnRobGllc0RlbGV0ZSA9IDkzLFxuICAgIEd1ZXN0Q3JlYXRlID0gOTQsXG4gICAgR3Vlc3RVcGRhdGUgPSA5NSxcbiAgICBHdWVzdERlbGV0ZSA9IDk2LFxuICAgIENsb3NlUGF5bWVudFNjcmVlbiA9IDk3LFxuICAgIEVDb21tZXJjZUFkbWluID0gOTgsXG4gICAgRUNvbW1lcmNlUmVndWxhciA9IDk5LFxuICAgIExvdENvbmZpZ3VyYXRpb25BY2Nlc3NQcm9maWxlID0gMTAwLFxuICAgIENhbmNlbFJlY2VpcHQgPSAxMDEsXG4gICAgR3Vlc3RBZHZhbmNlZCA9IDEwMixcbiAgICBHdWVzdEdyb3VwQWR2YW5jZWQgPSAxMDMsXG4gICAgR3Vlc3RIb3RlbEd1ZXN0Q3JlYXRlID0gMTA0LFxuICAgIEd1ZXN0SG90ZWxHdWVzdFVwZGF0ZSA9IDEwNSxcbiAgICBHdWVzdEhvdGVsR3Vlc3REZWxldGUgPSAxMDYsXG4gICAgSW1wb3J0ZXJUb29sVmlldyA9IDEwNyxcbiAgICBHdWVzdEVWb3VjaGVyVmlldyA9IDEwOCxcbiAgICBMb3RDb25maWd1cmF0aW9uRHluYW1pY1ByaWNpbmcgPSAxMDksXG4gICAgRGlnaXRhbFJlY2VwaXQgPSAxMTAsXG59XG5cbmV4cG9ydCBjbGFzcyBSZWZyZXNoVG9rZW5EdG8gaW1wbGVtZW50cyBJUmVmcmVzaFRva2VuRHRvIHtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGV4cGlyYXRpb246IG1vbWVudC5Nb21lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVJlZnJlc2hUb2tlbkR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzVG9rZW4gPSBfZGF0YVtcImFjY2Vzc1Rva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4gPSBfZGF0YVtcInJlZnJlc2hUb2tlblwiXTtcbiAgICAgICAgICAgIHRoaXMuZXhwaXJhdGlvbiA9IF9kYXRhW1wiZXhwaXJhdGlvblwiXSA/IG1vbWVudChfZGF0YVtcImV4cGlyYXRpb25cIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogUmVmcmVzaFRva2VuRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBSZWZyZXNoVG9rZW5EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImFjY2Vzc1Rva2VuXCJdID0gdGhpcy5hY2Nlc3NUb2tlbjtcbiAgICAgICAgZGF0YVtcInJlZnJlc2hUb2tlblwiXSA9IHRoaXMucmVmcmVzaFRva2VuO1xuICAgICAgICBkYXRhW1wiZXhwaXJhdGlvblwiXSA9IHRoaXMuZXhwaXJhdGlvbiA/IHRoaXMuZXhwaXJhdGlvbi50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlZnJlc2hUb2tlbkR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlZnJlc2hUb2tlbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlZnJlc2hUb2tlbkR0byB7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBleHBpcmF0aW9uOiBtb21lbnQuTW9tZW50O1xufVxuXG5leHBvcnQgY2xhc3MgUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogUmVmcmVzaFRva2VuRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXSA/IFJlZnJlc2hUb2tlbkR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YSA/IHRoaXMuZGF0YS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBSZWZyZXNoVG9rZW5EdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGVudW0gUmVtb3RlQWN0aW9uVHlwZXMge1xuICAgIFVwZGF0ZUxpY2Vuc2VQbGF0ZSA9IDEsXG4gICAgVXBkYXRlRG9jdW1lbnQgPSAyLFxuICAgIFZpZXdSZXZlbnVlID0gMyxcbiAgICBQcmludFJlY2VpcHQgPSA0LFxufVxuXG5leHBvcnQgZW51bSBSZW1vdGVDb21tYW5kVHlwZXMge1xuICAgIFVubG9ja0Rvb3IgPSAwLFxuICAgIFZlbmRHYXRlID0gMSxcbiAgICBWYWxpZGF0ZSA9IDIsXG4gICAgU2V0UHJpY2UgPSAzLFxuICAgIFJlc3RvcmVUaWNrZXQgPSA0LFxuICAgIENoYW5nZURldmljZUFjY2Vzc01vZGUgPSA1LFxuICAgIFJlc2V0RGV2aWNlQWNjZXNzTW9kZSA9IDYsXG4gICAgUmVzdGFydERldmljZSA9IDcsXG4gICAgUmVzZXRCaWxsRGlzcGVuc2VyID0gOCxcbiAgICBDbG9zZUdhdGUgPSA5LFxuICAgIEVqZWN0SmFtbWVkVGlja2V0ID0gMTAsXG4gICAgU3dhbGxvd0phbW1lZFRpY2tldCA9IDExLFxuICAgIERlbGl2ZXJCdW5kbGVCaWxscyA9IDEyLFxuICAgIExvY2tDYXNoUmVnaXN0ZXIgPSAxMyxcbiAgICBTZXRSYXRlID0gMTQsXG4gICAgSW5zZXJ0VmlydHVhbFRpY2tldCA9IDE1LFxuICAgIEhvbGRSZWxheSA9IDE2LFxuICAgIE9wZW5SZWxheSA9IDE3LFxuICAgIFByaW50VGlja2V0ID0gMTgsXG4gICAgVHJpZ2dlckxQUk1vZHVsZSA9IDE5LFxuICAgIEVuYWJsZVJlcHJpbnRSZWNlaXB0ID0gMjAsXG4gICAgT3BlbkdhdGVDb250aW51b3VzbHkgPSAyMSxcbiAgICBDbG9zZUdhdGVDb250aW51b3VzbHkgPSAyMixcbiAgICBTZW5kUGFyYW1ldGVycyA9IDIzLFxuICAgIFNlbmRLZXlPcHRpb25zID0gMjQsXG4gICAgTWFudWFsbHlDbG9zZVRpY2tldCA9IDMwLFxuICAgIFVwZGF0ZUxvY2F0aW9uID0gMzEsXG4gICAgVXBkYXRlT2NjdXBhbmN5ID0gMzIsXG4gICAgQXR0YWNoVGlja2V0ID0gMzMsXG4gICAgSW5zZXJ0UmVtb3RlVmFsaWRhdGlvbiA9IDM2LFxuICAgIFVwZGF0ZVJlbW90ZVZhbGlkYXRpb24gPSAzNyxcbiAgICBEZWxldGVSZW1vdGVWYWxpZGF0aW9uID0gMzksXG4gICAgUmVzdG9yZVJlbW90ZVZhbGlkYXRpb24gPSA0MCxcbiAgICBVcGRhdGVUb3RhbE9jY3VwYW5jeSA9IDQxLFxuICAgIFVwZGF0ZVpvbmVPY2N1cGFuY3kgPSA0MixcbiAgICBDbG9zZVRpY2tldEZvcklTRiA9IDQzLFxuICAgIFBheW1lbnRGb3JJU0YgPSA0NCxcbiAgICBEZWxldGVUaWNrZXQgPSA0NSxcbiAgICBDbG9zZVBheW1lbnRTY3JlZW4gPSA0NixcbiAgICBVcGRhdGVBbGxWYWxpZGF0aW9uID0gNDcsXG4gICAgQ2FuY2VsUmVjZWlwdCA9IDQ4LFxuICAgIFJlc3RhcnRTbWFydHBhcmsgPSA0OSxcbiAgICBTZW5kRGlnaXRhbFJlY2VpcHRQYXJhbXMgPSA1MCxcbiAgICBHZXRUaWNrZXRGZWUgPSAxMDAwLFxuICAgIFVwZGF0ZVRpY2tldFBheW1lbnQgPSAxMDAxLFxufVxuXG5leHBvcnQgY2xhc3MgU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIGltcGxlbWVudHMgSVNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBpc1NtYXJ0UGFya0Nvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc1NtYXJ0UGFya0NvcmVDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNTcGFya0NvcmVDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNTcGFya0Nsb3VkQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIHNtYXJ0UGFya0Rpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzbWFydFBhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gX2RhdGFbXCJpZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTbWFydFBhcmtDb25uZWN0ZWQgPSBfZGF0YVtcImlzU21hcnRQYXJrQ29ubmVjdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1NtYXJ0UGFya0NvcmVDb25uZWN0ZWQgPSBfZGF0YVtcImlzU21hcnRQYXJrQ29yZUNvbm5lY3RlZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTcGFya0NvcmVDb25uZWN0ZWQgPSBfZGF0YVtcImlzU3BhcmtDb3JlQ29ubmVjdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1NwYXJrQ2xvdWRDb25uZWN0ZWQgPSBfZGF0YVtcImlzU3BhcmtDbG91ZENvbm5lY3RlZFwiXTtcbiAgICAgICAgICAgIHRoaXMuc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wID0gX2RhdGFbXCJzbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPyBtb21lbnQoX2RhdGFbXCJzbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IF9kYXRhW1wic21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcInNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID0gX2RhdGFbXCJzcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPyBtb21lbnQoX2RhdGFbXCJzcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IF9kYXRhW1wic3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcInNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImlkXCJdID0gdGhpcy5pZDtcbiAgICAgICAgZGF0YVtcImlzU21hcnRQYXJrQ29ubmVjdGVkXCJdID0gdGhpcy5pc1NtYXJ0UGFya0Nvbm5lY3RlZDtcbiAgICAgICAgZGF0YVtcImlzU21hcnRQYXJrQ29yZUNvbm5lY3RlZFwiXSA9IHRoaXMuaXNTbWFydFBhcmtDb3JlQ29ubmVjdGVkO1xuICAgICAgICBkYXRhW1wiaXNTcGFya0NvcmVDb25uZWN0ZWRcIl0gPSB0aGlzLmlzU3BhcmtDb3JlQ29ubmVjdGVkO1xuICAgICAgICBkYXRhW1wiaXNTcGFya0Nsb3VkQ29ubmVjdGVkXCJdID0gdGhpcy5pc1NwYXJrQ2xvdWRDb25uZWN0ZWQ7XG4gICAgICAgIGRhdGFbXCJzbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPSB0aGlzLnNtYXJ0UGFya0Rpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/IHRoaXMuc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPSB0aGlzLnNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPyB0aGlzLnNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAudG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID0gdGhpcy5zcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPyB0aGlzLnNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcC50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID0gdGhpcy5zcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wID8gdGhpcy5zcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGlzU21hcnRQYXJrQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzU21hcnRQYXJrQ29yZUNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc1NwYXJrQ29yZUNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc1NwYXJrQ2xvdWRDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBlbnVtIFNldHRpbmdzQ2F0ZWdvcnkge1xuICAgIERhdGVGb3JtYXRzID0gMCxcbiAgICBBbGVydHMgPSAxLFxuICAgIFRpY2tldHNTcGVjaWZpY2F0aW9ucyA9IDIsXG4gICAgTG9jYWxpemF0aW9uID0gMyxcbiAgICBBbGVydHNQcmVmZXJlbmNlcyA9IDQsXG4gICAgVHdvRmFjdG9yQXV0aGVudGljYXRpb24gPSA1LFxuICAgIEVDb21tZXJjZUJhY2tvZmZpY2VVUkwgPSA2LFxuICAgIFNTTyA9IDcsXG4gICAgUGFzc3dvcmRQb2xpY3kgPSA4LFxuICAgIERpZ2l0YWxSZWNlaXB0UHJvdmlkZXJzU2V0dGluZ3MgPSA5LFxufVxuXG5leHBvcnQgY2xhc3MgU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8gaW1wbGVtZW50cyBJU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8ge1xuICAgIHVzZXJTdGF0dXM6IFVzZXJTdGF0dXM7XG4gICAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xuICAgIHNpbmdsZVNpZ25PblByb3ZpZGVyOiBTaW5nbGVTaWduT25Qcm92aWRlcjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJTdGF0dXMgPSBfZGF0YVtcInVzZXJTdGF0dXNcIl07XG4gICAgICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IF9kYXRhW1wiaXNBdXRoZW50aWNhdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5zaW5nbGVTaWduT25Qcm92aWRlciA9IF9kYXRhW1wic2luZ2xlU2lnbk9uUHJvdmlkZXJcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1widXNlclN0YXR1c1wiXSA9IHRoaXMudXNlclN0YXR1cztcbiAgICAgICAgZGF0YVtcImlzQXV0aGVudGljYXRlZFwiXSA9IHRoaXMuaXNBdXRoZW50aWNhdGVkO1xuICAgICAgICBkYXRhW1wic2luZ2xlU2lnbk9uUHJvdmlkZXJcIl0gPSB0aGlzLnNpbmdsZVNpZ25PblByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8ge1xuICAgIHVzZXJTdGF0dXM6IFVzZXJTdGF0dXM7XG4gICAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xuICAgIHNpbmdsZVNpZ25PblByb3ZpZGVyOiBTaW5nbGVTaWduT25Qcm92aWRlcjtcbn1cblxuZXhwb3J0IGVudW0gU2luZ2xlU2lnbk9uUHJvdmlkZXIge1xuICAgIE1pY3Jvc29mdCA9IDEsXG4gICAgUGluZ0ZlZGVyYXRlID0gMixcbn1cblxuZXhwb3J0IGNsYXNzIFNpbmdsZVNpZ25PblNldHRpbmdzIGltcGxlbWVudHMgSVNpbmdsZVNpZ25PblNldHRpbmdzIHtcbiAgICBpc0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgcHJvdmlkZXI6IFNpbmdsZVNpZ25PblByb3ZpZGVyO1xuICAgIGNvbmZpZ3VyYXRpb25zOiBhbnkgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVNpbmdsZVNpZ25PblNldHRpbmdzKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pc0VuYWJsZWQgPSBfZGF0YVtcImlzRW5hYmxlZFwiXTtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXIgPSBfZGF0YVtcInByb3ZpZGVyXCJdO1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucyA9IF9kYXRhW1wiY29uZmlndXJhdGlvbnNcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFNpbmdsZVNpZ25PblNldHRpbmdzIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTaW5nbGVTaWduT25TZXR0aW5ncygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiaXNFbmFibGVkXCJdID0gdGhpcy5pc0VuYWJsZWQ7XG4gICAgICAgIGRhdGFbXCJwcm92aWRlclwiXSA9IHRoaXMucHJvdmlkZXI7XG4gICAgICAgIGRhdGFbXCJjb25maWd1cmF0aW9uc1wiXSA9IHRoaXMuY29uZmlndXJhdGlvbnM7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFNpbmdsZVNpZ25PblNldHRpbmdzIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU2luZ2xlU2lnbk9uU2V0dGluZ3MoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTaW5nbGVTaWduT25TZXR0aW5ncyB7XG4gICAgaXNFbmFibGVkOiBib29sZWFuO1xuICAgIHByb3ZpZGVyOiBTaW5nbGVTaWduT25Qcm92aWRlcjtcbiAgICBjb25maWd1cmF0aW9uczogYW55IHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBTbWFydFBhcmtUeXBlIHtcbiAgICBTaW5nbGVQYXJrID0gMCxcbiAgICBNdWx0aVBhcmsgPSAxLFxuICAgIFN1cGVyUGFyayA9IDIsXG59XG5cbmV4cG9ydCBjbGFzcyBTbWFydFBhcmtXcmFwcGVyRHRvIGltcGxlbWVudHMgSVNtYXJ0UGFya1dyYXBwZXJEdG8ge1xuICAgIHNtYXJ0UGFya3M6IHsgW2tleTogc3RyaW5nXTogU21hcnRwYXJrQmFzaWNEdG87IH0gfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVNtYXJ0UGFya1dyYXBwZXJEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICBpZiAoX2RhdGFbXCJzbWFydFBhcmtzXCJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zbWFydFBhcmtzID0ge30gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfZGF0YVtcInNtYXJ0UGFya3NcIl0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhW1wic21hcnRQYXJrc1wiXS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5zbWFydFBhcmtzKVtrZXldID0gX2RhdGFbXCJzbWFydFBhcmtzXCJdW2tleV0gPyBTbWFydHBhcmtCYXNpY0R0by5mcm9tSlMoX2RhdGFbXCJzbWFydFBhcmtzXCJdW2tleV0pIDogbmV3IFNtYXJ0cGFya0Jhc2ljRHRvKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBTbWFydFBhcmtXcmFwcGVyRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTbWFydFBhcmtXcmFwcGVyRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGlmICh0aGlzLnNtYXJ0UGFya3MpIHtcbiAgICAgICAgICAgIGRhdGFbXCJzbWFydFBhcmtzXCJdID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5zbWFydFBhcmtzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc21hcnRQYXJrcy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wic21hcnRQYXJrc1wiXSlba2V5XSA9IHRoaXMuc21hcnRQYXJrc1trZXldID8gdGhpcy5zbWFydFBhcmtzW2tleV0udG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTbWFydFBhcmtXcmFwcGVyRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU21hcnRQYXJrV3JhcHBlckR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNtYXJ0UGFya1dyYXBwZXJEdG8ge1xuICAgIHNtYXJ0UGFya3M6IHsgW2tleTogc3RyaW5nXTogU21hcnRwYXJrQmFzaWNEdG87IH0gfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFNtYXJ0UGFya1dyYXBwZXJEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJU21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXSA/IFNtYXJ0UGFya1dyYXBwZXJEdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YSA/IHRoaXMuZGF0YS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBTbWFydFBhcmtXcmFwcGVyRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBTbWFydHBhcmtCYXNpY0R0byBpbXBsZW1lbnRzIElTbWFydHBhcmtCYXNpY0R0byB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGd1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0eXBlOiBTbWFydFBhcmtUeXBlO1xuICAgIHNlcnZpY2VzUnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvO1xuICAgIGZhY2lsaXRpZXM6IEZhY2lsaXR5QmFzaWNEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICBzcGFya1ZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBzbWFydFBhcmtWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY3VycmVuY3k6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJU21hcnRwYXJrQmFzaWNEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBfZGF0YVtcIm5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLmd1aWQgPSBfZGF0YVtcImd1aWRcIl07XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBfZGF0YVtcInR5cGVcIl07XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VzUnVubmluZ1N0YXR1cyA9IF9kYXRhW1wic2VydmljZXNSdW5uaW5nU3RhdHVzXCJdID8gU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvLmZyb21KUyhfZGF0YVtcInNlcnZpY2VzUnVubmluZ1N0YXR1c1wiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wiZmFjaWxpdGllc1wiXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZhY2lsaXRpZXMgPSBbXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBfZGF0YVtcImZhY2lsaXRpZXNcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFjaWxpdGllcy5wdXNoKEZhY2lsaXR5QmFzaWNEdG8uZnJvbUpTKGl0ZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3BhcmtWZXJzaW9uID0gX2RhdGFbXCJzcGFya1ZlcnNpb25cIl07XG4gICAgICAgICAgICB0aGlzLnNtYXJ0UGFya1ZlcnNpb24gPSBfZGF0YVtcInNtYXJ0UGFya1ZlcnNpb25cIl07XG4gICAgICAgICAgICB0aGlzLmN1cnJlbmN5ID0gX2RhdGFbXCJjdXJyZW5jeVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogU21hcnRwYXJrQmFzaWNEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNtYXJ0cGFya0Jhc2ljRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJuYW1lXCJdID0gdGhpcy5uYW1lO1xuICAgICAgICBkYXRhW1wiZ3VpZFwiXSA9IHRoaXMuZ3VpZDtcbiAgICAgICAgZGF0YVtcInR5cGVcIl0gPSB0aGlzLnR5cGU7XG4gICAgICAgIGRhdGFbXCJzZXJ2aWNlc1J1bm5pbmdTdGF0dXNcIl0gPSB0aGlzLnNlcnZpY2VzUnVubmluZ1N0YXR1cyA/IHRoaXMuc2VydmljZXNSdW5uaW5nU3RhdHVzLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmFjaWxpdGllcykpIHtcbiAgICAgICAgICAgIGRhdGFbXCJmYWNpbGl0aWVzXCJdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuZmFjaWxpdGllcylcbiAgICAgICAgICAgICAgICBkYXRhW1wiZmFjaWxpdGllc1wiXS5wdXNoKGl0ZW0udG9KU09OKCkpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJzcGFya1ZlcnNpb25cIl0gPSB0aGlzLnNwYXJrVmVyc2lvbjtcbiAgICAgICAgZGF0YVtcInNtYXJ0UGFya1ZlcnNpb25cIl0gPSB0aGlzLnNtYXJ0UGFya1ZlcnNpb247XG4gICAgICAgIGRhdGFbXCJjdXJyZW5jeVwiXSA9IHRoaXMuY3VycmVuY3k7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFNtYXJ0cGFya0Jhc2ljRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU21hcnRwYXJrQmFzaWNEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTbWFydHBhcmtCYXNpY0R0byB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGd1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0eXBlOiBTbWFydFBhcmtUeXBlO1xuICAgIHNlcnZpY2VzUnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvO1xuICAgIGZhY2lsaXRpZXM6IEZhY2lsaXR5QmFzaWNEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICBzcGFya1ZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBzbWFydFBhcmtWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY3VycmVuY3k6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFNtc0F1dGhEVE8gaW1wbGVtZW50cyBJU21zQXV0aERUTyB7XG4gICAgdGVuYW50X2lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcGhvbmU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBhcHBOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVNtc0F1dGhEVE8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnRlbmFudF9pZCA9IF9kYXRhW1widGVuYW50X2lkXCJdO1xuICAgICAgICAgICAgdGhpcy5waG9uZSA9IF9kYXRhW1wicGhvbmVcIl07XG4gICAgICAgICAgICB0aGlzLmFwcE5hbWUgPSBfZGF0YVtcImFwcE5hbWVcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFNtc0F1dGhEVE8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNtc0F1dGhEVE8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcInRlbmFudF9pZFwiXSA9IHRoaXMudGVuYW50X2lkO1xuICAgICAgICBkYXRhW1wicGhvbmVcIl0gPSB0aGlzLnBob25lO1xuICAgICAgICBkYXRhW1wiYXBwTmFtZVwiXSA9IHRoaXMuYXBwTmFtZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU21zQXV0aERUTyB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNtc0F1dGhEVE8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTbXNBdXRoRFRPIHtcbiAgICB0ZW5hbnRfaWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwaG9uZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGFwcE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFNwYXJrU2V0dGluZ3NEdG8gaW1wbGVtZW50cyBJU3BhcmtTZXR0aW5nc0R0byB7XG4gICAgY2F0ZWdvcnk6IFNldHRpbmdzQ2F0ZWdvcnk7XG4gICAgc2V0dGluZ3NKc29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVNwYXJrU2V0dGluZ3NEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNhdGVnb3J5ID0gX2RhdGFbXCJjYXRlZ29yeVwiXTtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NKc29uID0gX2RhdGFbXCJzZXR0aW5nc0pzb25cIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFNwYXJrU2V0dGluZ3NEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNwYXJrU2V0dGluZ3NEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImNhdGVnb3J5XCJdID0gdGhpcy5jYXRlZ29yeTtcbiAgICAgICAgZGF0YVtcInNldHRpbmdzSnNvblwiXSA9IHRoaXMuc2V0dGluZ3NKc29uO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTcGFya1NldHRpbmdzRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU3BhcmtTZXR0aW5nc0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNwYXJrU2V0dGluZ3NEdG8ge1xuICAgIGNhdGVnb3J5OiBTZXR0aW5nc0NhdGVnb3J5O1xuICAgIHNldHRpbmdzSnNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgU3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nOyB9IHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgaWYgKF9kYXRhW1wiZGF0YVwiXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gX2RhdGFbXCJkYXRhXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YVtcImRhdGFcIl0uaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMuZGF0YSlba2V5XSA9IF9kYXRhW1wiZGF0YVwiXVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGRhdGFbXCJkYXRhXCJdID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wiZGF0YVwiXSlba2V5XSA9ICg8YW55PnRoaXMuZGF0YSlba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZzsgfSB8IHVuZGVmaW5lZDtcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBTdWJNb2R1bGUge1xuICAgIEVWYWxpZGF0aW9uID0gMCxcbiAgICBTdGlja2VycyA9IDEsXG4gICAgQ291cG9ucyA9IDIsXG4gICAgR3Vlc3RzID0gMyxcbiAgICBIb3RlbEd1ZXN0cyA9IDQsXG4gICAgTW9udGhsaWVzID0gNSxcbiAgICBBY2NvdW50cyA9IDYsXG4gICAgVXNlck1hbmFnZW1lbnQgPSA3LFxuICAgIEZhY2lsaXRpZXNBbmRTbWFydHBhcmtzID0gOCxcbiAgICBMb2dvID0gOSxcbiAgICBTbXRwU2V0dGluZ3MgPSAxMCxcbiAgICBEZWZhdWx0VXNlclNldHRpbmdzID0gMTEsXG4gICAgQXVkaXQgPSAxMixcbiAgICBSYXRlcyA9IDEzLFxuICAgIFNjaGVkdWxlciA9IDE0LFxuICAgIFZhbGlkYXRpb25Qcm9maWxlcyA9IDE1LFxuICAgIEhvdGVsR3Vlc3RzSU8gPSAxNixcbiAgICBBY2Nlc3NQcm9maWxlcyA9IDE3LFxuICAgIEltcG9ydGVyVG9vbCA9IDE4LFxuICAgIEVWb3VjaGVyID0gMTksXG4gICAgRHluYW1pY1ByaWNpbmcgPSAyMCxcbiAgICBEaWdpdGFsUmVjZWlwdCA9IDIxLFxufVxuXG5leHBvcnQgY2xhc3MgVGVuYW50RGV0YWlsc0R0byBpbXBsZW1lbnRzIElUZW5hbnREZXRhaWxzRHRvIHtcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZGlzcGxheU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwcm9wczogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0gfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVRlbmFudERldGFpbHNEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBfZGF0YVtcIm5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlOYW1lID0gX2RhdGFbXCJkaXNwbGF5TmFtZVwiXTtcbiAgICAgICAgICAgIGlmIChfZGF0YVtcInByb3BzXCJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcyA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gX2RhdGFbXCJwcm9wc1wiXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGFbXCJwcm9wc1wiXS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5wcm9wcylba2V5XSA9IF9kYXRhW1wicHJvcHNcIl1ba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFRlbmFudERldGFpbHNEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRlbmFudERldGFpbHNEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcIm5hbWVcIl0gPSB0aGlzLm5hbWU7XG4gICAgICAgIGRhdGFbXCJkaXNwbGF5TmFtZVwiXSA9IHRoaXMuZGlzcGxheU5hbWU7XG4gICAgICAgIGlmICh0aGlzLnByb3BzKSB7XG4gICAgICAgICAgICBkYXRhW1wicHJvcHNcIl0gPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLnByb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+ZGF0YVtcInByb3BzXCJdKVtrZXldID0gKDxhbnk+dGhpcy5wcm9wcylba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBUZW5hbnREZXRhaWxzRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGVuYW50RGV0YWlsc0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRlbmFudERldGFpbHNEdG8ge1xuICAgIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHByb3BzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVGVuYW50RGV0YWlsc0R0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gVGVuYW50RGV0YWlsc0R0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFRlbmFudERldGFpbHNEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFRlbmFudER0byBpbXBsZW1lbnRzIElUZW5hbnREdG8ge1xuICAgIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHByb3BzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSB8IHVuZGVmaW5lZDtcbiAgICBpZDogbnVtYmVyO1xuICAgIHRyZWVJZDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElUZW5hbnREdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBfZGF0YVtcIm5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlOYW1lID0gX2RhdGFbXCJkaXNwbGF5TmFtZVwiXTtcbiAgICAgICAgICAgIGlmIChfZGF0YVtcInByb3BzXCJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcyA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gX2RhdGFbXCJwcm9wc1wiXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGFbXCJwcm9wc1wiXS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5wcm9wcylba2V5XSA9IF9kYXRhW1wicHJvcHNcIl1ba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmlkID0gX2RhdGFbXCJpZFwiXTtcbiAgICAgICAgICAgIHRoaXMudHJlZUlkID0gX2RhdGFbXCJ0cmVlSWRcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFRlbmFudER0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGVuYW50RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJuYW1lXCJdID0gdGhpcy5uYW1lO1xuICAgICAgICBkYXRhW1wiZGlzcGxheU5hbWVcIl0gPSB0aGlzLmRpc3BsYXlOYW1lO1xuICAgICAgICBpZiAodGhpcy5wcm9wcykge1xuICAgICAgICAgICAgZGF0YVtcInByb3BzXCJdID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5wcm9wcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PmRhdGFbXCJwcm9wc1wiXSlba2V5XSA9ICg8YW55PnRoaXMucHJvcHMpW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcImlkXCJdID0gdGhpcy5pZDtcbiAgICAgICAgZGF0YVtcInRyZWVJZFwiXSA9IHRoaXMudHJlZUlkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBUZW5hbnREdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUZW5hbnREdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUZW5hbnREdG8ge1xuICAgIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHByb3BzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSB8IHVuZGVmaW5lZDtcbiAgICBpZDogbnVtYmVyO1xuICAgIHRyZWVJZDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgVGZhU2V0dXBEdG8gaW1wbGVtZW50cyBJVGZhU2V0dXBEdG8ge1xuICAgIGVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNUZmFFbmFibGVkOiBib29sZWFuO1xuICAgIGF1dGhlbnRpY2F0b3JLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBxckNvZGVJbWFnZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZ2lzdGVyZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVRmYVNldHVwRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lbWFpbCA9IF9kYXRhW1wiZW1haWxcIl07XG4gICAgICAgICAgICB0aGlzLmlzVGZhRW5hYmxlZCA9IF9kYXRhW1wiaXNUZmFFbmFibGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5hdXRoZW50aWNhdG9yS2V5ID0gX2RhdGFbXCJhdXRoZW50aWNhdG9yS2V5XCJdO1xuICAgICAgICAgICAgdGhpcy5xckNvZGVJbWFnZVVybCA9IF9kYXRhW1wicXJDb2RlSW1hZ2VVcmxcIl07XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyZWQgPSBfZGF0YVtcInJlZ2lzdGVyZWRcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFRmYVNldHVwRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUZmFTZXR1cER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZW1haWxcIl0gPSB0aGlzLmVtYWlsO1xuICAgICAgICBkYXRhW1wiaXNUZmFFbmFibGVkXCJdID0gdGhpcy5pc1RmYUVuYWJsZWQ7XG4gICAgICAgIGRhdGFbXCJhdXRoZW50aWNhdG9yS2V5XCJdID0gdGhpcy5hdXRoZW50aWNhdG9yS2V5O1xuICAgICAgICBkYXRhW1wicXJDb2RlSW1hZ2VVcmxcIl0gPSB0aGlzLnFyQ29kZUltYWdlVXJsO1xuICAgICAgICBkYXRhW1wicmVnaXN0ZXJlZFwiXSA9IHRoaXMucmVnaXN0ZXJlZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVGZhU2V0dXBEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUZmFTZXR1cER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRmYVNldHVwRHRvIHtcbiAgICBlbWFpbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzVGZhRW5hYmxlZDogYm9vbGVhbjtcbiAgICBhdXRoZW50aWNhdG9yS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcXJDb2RlSW1hZ2VVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWdpc3RlcmVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgVGhpcmRQYXJ0eVZlbmRvckR0byBpbXBsZW1lbnRzIElUaGlyZFBhcnR5VmVuZG9yRHRvIHtcbiAgICBhY2NvdW50SWQ6IG51bWJlcjtcbiAgICBwZXJtaXNzaW9uVHlwZXM6IFBlcm1pc3Npb25UeXBlW10gfCB1bmRlZmluZWQ7XG4gICAgcGFya0Nsb3VkSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVGhpcmRQYXJ0eVZlbmRvckR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuYWNjb3VudElkID0gX2RhdGFbXCJhY2NvdW50SWRcIl07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcInBlcm1pc3Npb25UeXBlc1wiXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlcyA9IFtdIGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIF9kYXRhW1wicGVybWlzc2lvblR5cGVzXCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYXJrQ2xvdWRJZCA9IF9kYXRhW1wicGFya0Nsb3VkSWRcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFRoaXJkUGFydHlWZW5kb3JEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRoaXJkUGFydHlWZW5kb3JEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImFjY291bnRJZFwiXSA9IHRoaXMuYWNjb3VudElkO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnBlcm1pc3Npb25UeXBlcykpIHtcbiAgICAgICAgICAgIGRhdGFbXCJwZXJtaXNzaW9uVHlwZXNcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5wZXJtaXNzaW9uVHlwZXMpXG4gICAgICAgICAgICAgICAgZGF0YVtcInBlcm1pc3Npb25UeXBlc1wiXS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJwYXJrQ2xvdWRJZFwiXSA9IHRoaXMucGFya0Nsb3VkSWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRoaXJkUGFydHlWZW5kb3JEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUaGlyZFBhcnR5VmVuZG9yRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGhpcmRQYXJ0eVZlbmRvckR0byB7XG4gICAgYWNjb3VudElkOiBudW1iZXI7XG4gICAgcGVybWlzc2lvblR5cGVzOiBQZXJtaXNzaW9uVHlwZVtdIHwgdW5kZWZpbmVkO1xuICAgIHBhcmtDbG91ZElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFRoaXJkUGFydHlWZW5kb3JEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXSA/IFRoaXJkUGFydHlWZW5kb3JEdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YSA/IHRoaXMuZGF0YS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBUaGlyZFBhcnR5VmVuZG9yRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0byBpbXBsZW1lbnRzIElUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0byB7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0byB7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0byBpbXBsZW1lbnRzIElUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0byB7XG4gICAgaXNFbmFibGVkRm9yVXNlcjogYm9vbGVhbjtcbiAgICBpc1JlcXVpZXJkMkZBU2V0dXA6IGJvb2xlYW47XG4gICAgYWN0aXZhdGVSZXNwb25zZUR0bzogQWN0aXZhdGVSZXNwb25zZUR0bztcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlzRW5hYmxlZEZvclVzZXIgPSBfZGF0YVtcImlzRW5hYmxlZEZvclVzZXJcIl07XG4gICAgICAgICAgICB0aGlzLmlzUmVxdWllcmQyRkFTZXR1cCA9IF9kYXRhW1wiaXNSZXF1aWVyZDJGQVNldHVwXCJdO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVJlc3BvbnNlRHRvID0gX2RhdGFbXCJhY3RpdmF0ZVJlc3BvbnNlRHRvXCJdID8gQWN0aXZhdGVSZXNwb25zZUR0by5mcm9tSlMoX2RhdGFbXCJhY3RpdmF0ZVJlc3BvbnNlRHRvXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImlzRW5hYmxlZEZvclVzZXJcIl0gPSB0aGlzLmlzRW5hYmxlZEZvclVzZXI7XG4gICAgICAgIGRhdGFbXCJpc1JlcXVpZXJkMkZBU2V0dXBcIl0gPSB0aGlzLmlzUmVxdWllcmQyRkFTZXR1cDtcbiAgICAgICAgZGF0YVtcImFjdGl2YXRlUmVzcG9uc2VEdG9cIl0gPSB0aGlzLmFjdGl2YXRlUmVzcG9uc2VEdG8gPyB0aGlzLmFjdGl2YXRlUmVzcG9uc2VEdG8udG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvIHtcbiAgICBpc0VuYWJsZWRGb3JVc2VyOiBib29sZWFuO1xuICAgIGlzUmVxdWllcmQyRkFTZXR1cDogYm9vbGVhbjtcbiAgICBhY3RpdmF0ZVJlc3BvbnNlRHRvOiBBY3RpdmF0ZVJlc3BvbnNlRHRvO1xufVxuXG5leHBvcnQgZW51bSBVc2VyU3RhdHVzIHtcbiAgICBBY3RpdmUgPSAwLFxuICAgIEJsb2NrZWQgPSAxLFxuICAgIEludml0ZWQgPSAyLFxuICAgIElnbm9yZSA9IDMsXG4gICAgUGFzc3dvcmRFeHBpcmVkID0gNCxcbiAgICBSZXZva2VkID0gNSxcbiAgICBUZW1wb3JhcnlCbG9ja2VkID0gNixcbiAgICBBd2FpdGluZ0FjY2VzcyA9IDcsXG4gICAgVXNlckV4cGlyZWQgPSA4LFxufVxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0byBpbXBsZW1lbnRzIElWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbGFzdE5hbWU6IHN0cmluZztcbiAgICB1TmFtZTogc3RyaW5nO1xuICAgIHN0YXR1czogVXNlclN0YXR1cztcbiAgICBpZDogbnVtYmVyO1xuICAgIHBtbDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gX2RhdGFbXCJuYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy5sYXN0TmFtZSA9IF9kYXRhW1wibGFzdE5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLnVOYW1lID0gX2RhdGFbXCJ1TmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gX2RhdGFbXCJzdGF0dXNcIl07XG4gICAgICAgICAgICB0aGlzLmlkID0gX2RhdGFbXCJpZFwiXTtcbiAgICAgICAgICAgIHRoaXMucG1sID0gX2RhdGFbXCJwbWxcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcIm5hbWVcIl0gPSB0aGlzLm5hbWU7XG4gICAgICAgIGRhdGFbXCJsYXN0TmFtZVwiXSA9IHRoaXMubGFzdE5hbWU7XG4gICAgICAgIGRhdGFbXCJ1TmFtZVwiXSA9IHRoaXMudU5hbWU7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNcIl0gPSB0aGlzLnN0YXR1cztcbiAgICAgICAgZGF0YVtcImlkXCJdID0gdGhpcy5pZDtcbiAgICAgICAgZGF0YVtcInBtbFwiXSA9IHRoaXMucG1sO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG8ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBsYXN0TmFtZTogc3RyaW5nO1xuICAgIHVOYW1lOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBVc2VyU3RhdHVzO1xuICAgIGlkOiBudW1iZXI7XG4gICAgcG1sOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXSA/IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YSA/IHRoaXMuZGF0YS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8gaW1wbGVtZW50cyBJVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvIHtcbiAgICBjb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdXNlck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5jb2RlID0gX2RhdGFbXCJjb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy51c2VyTmFtZSA9IF9kYXRhW1widXNlck5hbWVcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJjb2RlXCJdID0gdGhpcy5jb2RlO1xuICAgICAgICBkYXRhW1widXNlck5hbWVcIl0gPSB0aGlzLnVzZXJOYW1lO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8ge1xuICAgIGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VyTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8gaW1wbGVtZW50cyBJVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8ge1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gX2RhdGFbXCJhY2Nlc3NUb2tlblwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcImFjY2Vzc1Rva2VuXCJdID0gdGhpcy5hY2Nlc3NUb2tlbjtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvIHtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXSA/IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YSA/IHRoaXMuZGF0YS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVSZXNwb25zZSB7XG4gICAgZGF0YTogQmxvYjtcbiAgICBzdGF0dXM6IG51bWJlcjtcbiAgICBmaWxlTmFtZT86IHN0cmluZztcbiAgICBoZWFkZXJzPzogeyBbbmFtZTogc3RyaW5nXTogYW55IH07XG59XG5cbmV4cG9ydCBjbGFzcyBBcGlFeGNlcHRpb24gZXh0ZW5kcyBFcnJvciB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIHN0YXR1czogbnVtYmVyO1xuICAgIHJlc3BvbnNlOiBzdHJpbmc7XG4gICAgaGVhZGVyczogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgcmVzdWx0OiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YXR1czogbnVtYmVyLCByZXNwb25zZTogc3RyaW5nLCBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgcmVzdWx0OiBhbnkpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgICAgICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaXNBcGlFeGNlcHRpb24gPSB0cnVlO1xuXG4gICAgc3RhdGljIGlzQXBpRXhjZXB0aW9uKG9iajogYW55KTogb2JqIGlzIEFwaUV4Y2VwdGlvbiB7XG4gICAgICAgIHJldHVybiBvYmouaXNBcGlFeGNlcHRpb24gPT09IHRydWU7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0V4Y2VwdGlvbihtZXNzYWdlOiBzdHJpbmcsIHN0YXR1czogbnVtYmVyLCByZXNwb25zZTogc3RyaW5nLCBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgcmVzdWx0PzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXN1bHQpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cobmV3IEFwaUV4Y2VwdGlvbihtZXNzYWdlLCBzdGF0dXMsIHJlc3BvbnNlLCBoZWFkZXJzLCBudWxsKSk7XG59XG5cbmZ1bmN0aW9uIGJsb2JUb1RleHQoYmxvYjogYW55KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8c3RyaW5nPigob2JzZXJ2ZXI6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIWJsb2IpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoXCJcIik7XG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoKGV2ZW50LnRhcmdldCBhcyBhbnkpLnJlc3VsdCk7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZWFkZXIucmVhZEFzVGV4dChibG9iKTtcbiAgICAgICAgfVxuICAgIH0pO1xufSJdfQ==
|
|
4588
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktc2VydmljZS1wcm94aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9zZXJ2aWNlLXByb3h5L2lkZW50aXR5LXNlcnZpY2UtcHJveGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3QkFBd0I7QUFDeEIsbUJBQW1CO0FBQ25CLDJIQUEySDtBQUMzSCxvQkFBb0I7QUFDcEIsd0JBQXdCO0FBRXhCLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsdUNBQXVDO0FBRXZDLE9BQU8sRUFBRSxRQUFRLElBQUksbUJBQW1CLEVBQUUsVUFBVSxJQUFJLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakcsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLElBQUksZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9GLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQzs7O0FBRTVCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBUyxjQUFjLENBQUMsQ0FBQztBQUd2RSxNQUFNLE9BQU8seUJBQXlCO0lBS2xDLFlBQWdDLElBQWdCLEVBQW9DLE9BQWdCO1FBRjFGLHFCQUFnQixHQUFtRCxTQUFTLENBQUM7UUFHbkYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxPQUFP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Z2VuZXJhdGVkPlxuLy8gICAgIEdlbmVyYXRlZCB1c2luZyB0aGUgTlN3YWcgdG9vbGNoYWluIHYxNC4wLjcuMCAoTkpzb25TY2hlbWEgdjExLjAuMC4wIChOZXd0b25zb2Z0Lkpzb24gdjEzLjAuMC4wKSkgKGh0dHA6Ly9OU3dhZy5vcmcpXG4vLyA8L2F1dG8tZ2VuZXJhdGVkPlxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qIHRzbGludDpkaXNhYmxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gUmVTaGFycGVyIGRpc2FibGUgSW5jb25zaXN0ZW50TmFtaW5nXG5cbmltcG9ydCB7IG1lcmdlTWFwIGFzIF9vYnNlcnZhYmxlTWVyZ2VNYXAsIGNhdGNoRXJyb3IgYXMgX29ic2VydmFibGVDYXRjaCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgYXMgX29ic2VydmFibGVUaHJvdywgb2YgYXMgX29ic2VydmFibGVPZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBPcHRpb25hbCwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUmVzcG9uc2UsIEh0dHBSZXNwb25zZUJhc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuZXhwb3J0IGNvbnN0IEFQSV9CQVNFX1VSTCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdBUElfQkFTRV9VUkwnKTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFzc2V0U2VydmljZVByb3h5SWRlbnRpdHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBpZGVudGlmaWVyIChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZ2V0TG9nbyhpZGVudGlmaWVyOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL2Fzc2V0L2xvZ28/XCI7XG4gICAgICAgIGlmIChpZGVudGlmaWVyID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAnaWRlbnRpZmllcicgY2Fubm90IGJlIG51bGwuXCIpO1xuICAgICAgICBlbHNlIGlmIChpZGVudGlmaWVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB1cmxfICs9IFwiSWRlbnRpZmllcj1cIiArIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgaWRlbnRpZmllcikgKyBcIiZcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0TG9nbyhyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0TG9nbyhyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzR2V0TG9nbyhyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8TG9nb0R0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gTG9nb0R0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8TG9nb0R0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uU2VydmljZVByb3h5SWRlbnRpdHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGdldEhlYWx0aCgpOiBPYnNlcnZhYmxlPEhlYWx0aER0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvY29uZmlndXJhdGlvbi9oZWFsdGhcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0SGVhbHRoKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRIZWFsdGgocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxIZWFsdGhEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPEhlYWx0aER0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NHZXRIZWFsdGgocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEhlYWx0aER0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gSGVhbHRoRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxIZWFsdGhEdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZ2V0T25saW5lVmFsaWRhdG9yVmVyc2lvbigpOiBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvY29uZmlndXJhdGlvbi9vbmxpbmUtdmFsaWRhdG9yLXZlcnNpb25cIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0T25saW5lVmFsaWRhdG9yVmVyc2lvbihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0T25saW5lVmFsaWRhdG9yVmVyc2lvbihyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0dldE9ubGluZVZhbGlkYXRvclZlcnNpb24ocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gT2JqZWN0SHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZ2V0QXBwQ29uZmlndXJhdGlvbigpOiBPYnNlcnZhYmxlPEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb25cIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0QXBwQ29uZmlndXJhdGlvbihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0QXBwQ29uZmlndXJhdGlvbihyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzR2V0QXBwQ29uZmlndXJhdGlvbihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8QXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8QXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMb2NhbGl6YXRpb25TZXJ2aWNlUHJveHlJZGVudGl0eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGtleU5hbWUgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBnZXRSZXNvdXJjZShrZXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPEZpbGVSZXNwb25zZT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy9sb2NhbGl6YXRpb24vZ2V0LXJlc291cmNlP1wiO1xuICAgICAgICBpZiAoa2V5TmFtZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ2tleU5hbWUnIGNhbm5vdCBiZSBudWxsLlwiKTtcbiAgICAgICAgZWxzZSBpZiAoa2V5TmFtZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdXJsXyArPSBcImtleU5hbWU9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIGtleU5hbWUpICsgXCImXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldFJlc291cmNlKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRSZXNvdXJjZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEZpbGVSZXNwb25zZT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxGaWxlUmVzcG9uc2U+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NHZXRSZXNvdXJjZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8RmlsZVJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCB8fCBzdGF0dXMgPT09IDIwNikge1xuICAgICAgICAgICAgY29uc3QgY29udGVudERpc3Bvc2l0aW9uID0gcmVzcG9uc2UuaGVhZGVycyA/IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiY29udGVudC1kaXNwb3NpdGlvblwiKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBmaWxlTmFtZU1hdGNoID0gY29udGVudERpc3Bvc2l0aW9uID8gL2ZpbGVuYW1lXFwqPSg/OihcXFxcP1snXCJdKSguKj8pXFwxfCg/OlteXFxzXSsnLio/Jyk/KFteO1xcbl0qKSkvZy5leGVjKGNvbnRlbnREaXNwb3NpdGlvbikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgZmlsZU5hbWUgPSBmaWxlTmFtZU1hdGNoICYmIGZpbGVOYW1lTWF0Y2gubGVuZ3RoID4gMSA/IGZpbGVOYW1lTWF0Y2hbM10gfHwgZmlsZU5hbWVNYXRjaFsyXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChmaWxlTmFtZSkge1xuICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmlsZU5hbWVNYXRjaCA9IGNvbnRlbnREaXNwb3NpdGlvbiA/IC9maWxlbmFtZT1cIj8oW15cIl0qPylcIj8oO3wkKS9nLmV4ZWMoY29udGVudERpc3Bvc2l0aW9uKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lTWF0Y2ggJiYgZmlsZU5hbWVNYXRjaC5sZW5ndGggPiAxID8gZmlsZU5hbWVNYXRjaFsxXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHsgZmlsZU5hbWU6IGZpbGVOYW1lLCBkYXRhOiByZXNwb25zZUJsb2IgYXMgYW55LCBzdGF0dXM6IHN0YXR1cywgaGVhZGVyczogX2hlYWRlcnMgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEZpbGVSZXNwb25zZT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1vYmlsZVNlcnZpY2VQcm94eUlkZW50aXR5IHtcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGpzb25QYXJzZVJldml2ZXI6ICgoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgPz8gXCJcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYm9keSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIG1vYmlsZUF1dGhlbnRpY2F0ZSh2ZXJzaW9uOiBzdHJpbmcsIGJvZHk6IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdnt2ZXJzaW9ufS9tb2JpbGUvdXNlcnMvYXV0aGVudGljYXRlXCI7XG4gICAgICAgIGlmICh2ZXJzaW9uID09PSB1bmRlZmluZWQgfHwgdmVyc2lvbiA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ3ZlcnNpb24nIG11c3QgYmUgZGVmaW5lZC5cIik7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoXCJ7dmVyc2lvbn1cIiwgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyB2ZXJzaW9uKSk7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgY29uc3QgY29udGVudF8gPSBKU09OLnN0cmluZ2lmeShib2R5KTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NNb2JpbGVBdXRoZW50aWNhdGUocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc01vYmlsZUF1dGhlbnRpY2F0ZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8SW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc01vYmlsZUF1dGhlbnRpY2F0ZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8SW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwMTogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDAxID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDEgPSBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTQwMSk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJVbmF1dGhvcml6ZWRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDAxKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8SW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBpZGVudGlmaWVyIChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZ2V0TW9iaWxlTG9nbyhpZGVudGlmaWVyOiBzdHJpbmcgfCB1bmRlZmluZWQsIHZlcnNpb246IHN0cmluZyk6IE9ic2VydmFibGU8TG9nb0R0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdnt2ZXJzaW9ufS9tb2JpbGUvYXNzZXQvbG9nbz9cIjtcbiAgICAgICAgaWYgKHZlcnNpb24gPT09IHVuZGVmaW5lZCB8fCB2ZXJzaW9uID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAndmVyc2lvbicgbXVzdCBiZSBkZWZpbmVkLlwiKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZShcInt2ZXJzaW9ufVwiLCBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIHZlcnNpb24pKTtcbiAgICAgICAgaWYgKGlkZW50aWZpZXIgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICdpZGVudGlmaWVyJyBjYW5ub3QgYmUgbnVsbC5cIik7XG4gICAgICAgIGVsc2UgaWYgKGlkZW50aWZpZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHVybF8gKz0gXCJJZGVudGlmaWVyPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBpZGVudGlmaWVyKSArIFwiJlwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRNb2JpbGVMb2dvKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRNb2JpbGVMb2dvKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8TG9nb0R0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8TG9nb0R0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NHZXRNb2JpbGVMb2dvKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIHZlcnNpb25zKHZlcnNpb246IHN0cmluZyk6IE9ic2VydmFibGU8U3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3Z7dmVyc2lvbn0vbW9iaWxlL3NtYXJ0cGFyay92ZXJzaW9uc1wiO1xuICAgICAgICBpZiAodmVyc2lvbiA9PT0gdW5kZWZpbmVkIHx8IHZlcnNpb24gPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICd2ZXJzaW9uJyBtdXN0IGJlIGRlZmluZWQuXCIpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKFwie3ZlcnNpb259XCIsIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgdmVyc2lvbikpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NWZXJzaW9ucyhyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmVyc2lvbnMocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8U3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzVmVyc2lvbnMocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8U3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgbW9iaWxlR2V0U2V0dGluZ3MoY2F0ZWdvcnk6IFNldHRpbmdzQ2F0ZWdvcnksIHZlcnNpb246IHN0cmluZyk6IE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy92e3ZlcnNpb259L21vYmlsZS9jb25maWd1cmF0aW9uL3NldHRpbmdzL3tjYXRlZ29yeX1cIjtcbiAgICAgICAgaWYgKGNhdGVnb3J5ID09PSB1bmRlZmluZWQgfHwgY2F0ZWdvcnkgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICdjYXRlZ29yeScgbXVzdCBiZSBkZWZpbmVkLlwiKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZShcIntjYXRlZ29yeX1cIiwgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBjYXRlZ29yeSkpO1xuICAgICAgICBpZiAodmVyc2lvbiA9PT0gdW5kZWZpbmVkIHx8IHZlcnNpb24gPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICd2ZXJzaW9uJyBtdXN0IGJlIGRlZmluZWQuXCIpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKFwie3ZlcnNpb259XCIsIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgdmVyc2lvbikpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NNb2JpbGVHZXRTZXR0aW5ncyhyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTW9iaWxlR2V0U2V0dGluZ3MocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NNb2JpbGVHZXRTZXR0aW5ncyhyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBPYmplY3RIdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPE9iamVjdEh0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYXBwTW9kdWxlIChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZmFjaWxpdHlBbGxNb2JpbGUoYXBwTW9kdWxlOiBBcHBNb2R1bGUgfCB1bmRlZmluZWQsIHZlcnNpb246IHN0cmluZyk6IE9ic2VydmFibGU8U21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdnt2ZXJzaW9ufS9tb2JpbGUvZmFjaWxpdHkvYmFzaWM/XCI7XG4gICAgICAgIGlmICh2ZXJzaW9uID09PSB1bmRlZmluZWQgfHwgdmVyc2lvbiA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ3ZlcnNpb24nIG11c3QgYmUgZGVmaW5lZC5cIik7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoXCJ7dmVyc2lvbn1cIiwgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyB2ZXJzaW9uKSk7XG4gICAgICAgIGlmIChhcHBNb2R1bGUgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICdhcHBNb2R1bGUnIGNhbm5vdCBiZSBudWxsLlwiKTtcbiAgICAgICAgZWxzZSBpZiAoYXBwTW9kdWxlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB1cmxfICs9IFwiYXBwTW9kdWxlPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBhcHBNb2R1bGUpICsgXCImXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ZhY2lsaXR5QWxsTW9iaWxlKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NGYWNpbGl0eUFsbE1vYmlsZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzRmFjaWxpdHlBbGxNb2JpbGUocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZ2V0QXBwQ29uZmlndXJhdGlvbk1vYmlsZSh2ZXJzaW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3Z7dmVyc2lvbn0vbW9iaWxlL2NvbmZpZ3VyYXRpb25cIjtcbiAgICAgICAgaWYgKHZlcnNpb24gPT09IHVuZGVmaW5lZCB8fCB2ZXJzaW9uID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAndmVyc2lvbicgbXVzdCBiZSBkZWZpbmVkLlwiKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZShcInt2ZXJzaW9ufVwiLCBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIHZlcnNpb24pKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0QXBwQ29uZmlndXJhdGlvbk1vYmlsZShyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0QXBwQ29uZmlndXJhdGlvbk1vYmlsZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzR2V0QXBwQ29uZmlndXJhdGlvbk1vYmlsZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8QXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8QXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcmVmcmVzaFRva2VuIChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgbW9iaWxlUmVmcmVzaFRva2VuKHJlZnJlc2hUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkLCB2ZXJzaW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdnt2ZXJzaW9ufS9tb2JpbGUvdXNlcnMvcmVmcmVzaC10b2tlblwiO1xuICAgICAgICBpZiAodmVyc2lvbiA9PT0gdW5kZWZpbmVkIHx8IHZlcnNpb24gPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICd2ZXJzaW9uJyBtdXN0IGJlIGRlZmluZWQuXCIpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKFwie3ZlcnNpb259XCIsIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgdmVyc2lvbikpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiUmVmcmVzaFRva2VuXCI6IHJlZnJlc2hUb2tlbiAhPT0gdW5kZWZpbmVkICYmIHJlZnJlc2hUb2tlbiAhPT0gbnVsbCA/IFwiXCIgKyByZWZyZXNoVG9rZW4gOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTW9iaWxlUmVmcmVzaFRva2VuKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NNb2JpbGVSZWZyZXNoVG9rZW4ocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NNb2JpbGVSZWZyZXNoVG9rZW4ocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU21hcnRwYXJrU2VydmljZVByb3h5SWRlbnRpdHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIHZlcnNpb25zMigpOiBPYnNlcnZhYmxlPFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy9zbWFydHBhcmsvdmVyc2lvbnNcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmVyc2lvbnMyKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NWZXJzaW9uczIocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8U3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzVmVyc2lvbnMyKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gU3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRlbmFudFNlcnZpY2VQcm94eUlkZW50aXR5IHtcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGpzb25QYXJzZVJldml2ZXI6ICgoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgPz8gXCJcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gbmFtZSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGdldFRlbmFudERldGFpbHMobmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy90ZW5hbnQvZGV0YWlscz9cIjtcbiAgICAgICAgaWYgKG5hbWUgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICduYW1lJyBjYW5ub3QgYmUgbnVsbC5cIik7XG4gICAgICAgIGVsc2UgaWYgKG5hbWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHVybF8gKz0gXCJuYW1lPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBuYW1lKSArIFwiJlwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRUZW5hbnREZXRhaWxzKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRUZW5hbnREZXRhaWxzKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8VGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8VGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NHZXRUZW5hbnREZXRhaWxzKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRoaXJkUGFydHlTZXJ2aWNlUHJveHlJZGVudGl0eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgbWUoKTogT2JzZXJ2YWJsZTxUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy90aGlyZHBhcnR5L21lXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc01lKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NNZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzTWUocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVXNlcnNTZXJ2aWNlUHJveHlJZGVudGl0eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGJvZHkgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBhdXRoZW50aWNhdGUoYm9keTogQXV0aGVudGljYXRlUmVxdWVzdER0byB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVxdWVzdER0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdXNlcnMvYXV0aGVudGljYXRlXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgY29uc3QgY29udGVudF8gPSBKU09OLnN0cmluZ2lmeShib2R5KTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBdXRoZW50aWNhdGUocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0F1dGhlbnRpY2F0ZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlcXVlc3REdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlcXVlc3REdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzQXV0aGVudGljYXRlKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXF1ZXN0RHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDE6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwMSA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDAxID0gQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEF1dGhlbnRpY2F0ZVJlcXVlc3REdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHJlZnJlc2hUb2tlbiAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIHJlZnJlc2hUb2tlbihyZWZyZXNoVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8UmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy91c2Vycy9yZWZyZXNodG9rZW5cIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIlJlZnJlc2hUb2tlblwiOiByZWZyZXNoVG9rZW4gIT09IHVuZGVmaW5lZCAmJiByZWZyZXNoVG9rZW4gIT09IG51bGwgPyBcIlwiICsgcmVmcmVzaFRva2VuIDogXCJcIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JlZnJlc2hUb2tlbihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUmVmcmVzaFRva2VuKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8UmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzUmVmcmVzaFRva2VuKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8UmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBhY3RpdmF0aW9uVG9rZW4gKG9wdGlvbmFsKSBcbiAgICAgKiBAcGFyYW0gcGFzc3dvcmRDaGFuZ2VUeXBlIChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgdmFsaWRhdGVBY3RpdmF0aW9uKGFjdGl2YXRpb25Ub2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkLCBwYXNzd29yZENoYW5nZVR5cGU6IFBhc3N3b3JkQ2hhbmdlVHlwZSB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8VmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdXNlcnMvdmFsaWRhdGUtYWN0aXZhdGlvbj9cIjtcbiAgICAgICAgaWYgKHBhc3N3b3JkQ2hhbmdlVHlwZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ3Bhc3N3b3JkQ2hhbmdlVHlwZScgY2Fubm90IGJlIG51bGwuXCIpO1xuICAgICAgICBlbHNlIGlmIChwYXNzd29yZENoYW5nZVR5cGUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHVybF8gKz0gXCJwYXNzd29yZENoYW5nZVR5cGU9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIHBhc3N3b3JkQ2hhbmdlVHlwZSkgKyBcIiZcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjdGl2YXRpb25Ub2tlblwiOiBhY3RpdmF0aW9uVG9rZW4gIT09IHVuZGVmaW5lZCAmJiBhY3RpdmF0aW9uVG9rZW4gIT09IG51bGwgPyBcIlwiICsgYWN0aXZhdGlvblRva2VuIDogXCJcIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1ZhbGlkYXRlQWN0aXZhdGlvbihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmFsaWRhdGVBY3RpdmF0aW9uKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8VmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8VmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NWYWxpZGF0ZUFjdGl2YXRpb24ocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGJvZHkgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBtb2JpbGVBdXRoZW50aWNhdGUyKGJvZHk6IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdXNlcnMvYXV0aGVudGljYXRlLW1vYmlsZVwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgYm9keTogY29udGVudF8sXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvblwiLFxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTW9iaWxlQXV0aGVudGljYXRlMihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTW9iaWxlQXV0aGVudGljYXRlMihyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8SW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc01vYmlsZUF1dGhlbnRpY2F0ZTIocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDE6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwMSA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDAxID0gQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYm9keSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIG11bHRpVGVuYW50c0F1dGhlbnRpY2F0ZShib2R5OiBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3VzZXJzL211bHRpLXRlbmFudHMtYXV0aGVudGljYXRlXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgY29uc3QgY29udGVudF8gPSBKU09OLnN0cmluZ2lmeShib2R5KTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NNdWx0aVRlbmFudHNBdXRoZW50aWNhdGUocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc011bHRpVGVuYW50c0F1dGhlbnRpY2F0ZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc011bHRpVGVuYW50c0F1dGhlbnRpY2F0ZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwMTogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDAxID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDEgPSBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTQwMSk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJVbmF1dGhvcml6ZWRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDAxKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBib2R5IChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgdmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uTG9naW4oYm9keTogVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdXNlcnMvdmVyaWZ5LTJmYS1hdXRoLWxvZ2luXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgY29uc3QgY29udGVudF8gPSBKU09OLnN0cmluZ2lmeShib2R5KTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25Mb2dpbihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uTG9naW4ocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uTG9naW4ocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDAxOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDEgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwMSA9IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTQwMSk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJVbmF1dGhvcml6ZWRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDAxKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGJvZHkgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICB2ZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb24oYm9keTogVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdXNlcnMvdmVyaWZ5LTJmYS1hdXRoXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgY29uc3QgY29udGVudF8gPSBKU09OLnN0cmluZ2lmeShib2R5KTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb24ocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1ZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbihyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb24ocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDAxOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDEgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwMSA9IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTQwMSk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJVbmF1dGhvcml6ZWRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDAxKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZW5hYmxlMkZhY3RvckF1dGhGb3JVc2VyKHVzZXJJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdXNlcnMve3VzZXJJZH0vZW5hYmxlLTJmYVwiO1xuICAgICAgICBpZiAodXNlcklkID09PSB1bmRlZmluZWQgfHwgdXNlcklkID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAndXNlcklkJyBtdXN0IGJlIGRlZmluZWQuXCIpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKFwie3VzZXJJZH1cIiwgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyB1c2VySWQpKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwdXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRW5hYmxlMkZhY3RvckF1dGhGb3JVc2VyKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NFbmFibGUyRmFjdG9yQXV0aEZvclVzZXIocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8VG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzRW5hYmxlMkZhY3RvckF1dGhGb3JVc2VyKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGRpc2FibGUyRmFjdG9yQXV0aEZvclVzZXIodXNlcklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy91c2Vycy97dXNlcklkfS9kaXNhYmxlLTJmYVwiO1xuICAgICAgICBpZiAodXNlcklkID09PSB1bmRlZmluZWQgfHwgdXNlcklkID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAndXNlcklkJyBtdXN0IGJlIGRlZmluZWQuXCIpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKFwie3VzZXJJZH1cIiwgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyB1c2VySWQpKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwdXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGlzYWJsZTJGYWN0b3JBdXRoRm9yVXNlcihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGlzYWJsZTJGYWN0b3JBdXRoRm9yVXNlcihyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NEaXNhYmxlMkZhY3RvckF1dGhGb3JVc2VyKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBib2R5IChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgc21zQXV0aChib2R5OiBTbXNBdXRoRFRPIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3YxLjAvdXNlcnMvc21zLWF1dGhcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIGJvZHk6IGNvbnRlbnRfLFxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb25cIixcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTbXNBdXRoKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTbXNBdXRoKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8dm9pZD47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTx2b2lkPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzU21zQXV0aChyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8dm9pZD4obnVsbCBhcyBhbnkpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjx2b2lkPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGJvZHkgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBtb2JpbGVMb2dpbihib2R5OiBNb2JpbGVMb2dpbkRUTyB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS92MS4wL3VzZXJzL21vYmlsZS1sb2dpblwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgYm9keTogY29udGVudF8sXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvblwiLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc01vYmlsZUxvZ2luKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NNb2JpbGVMb2dpbihyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPHZvaWQ+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8dm9pZD47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc01vYmlsZUxvZ2luKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjx2b2lkPihudWxsIGFzIGFueSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPHZvaWQ+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gY29kZSAob3B0aW9uYWwpIFxuICAgICAqIEBwYXJhbSB0ZW5hbnROYW1lIChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgb3BlbklkQXV0aGVudGljYXRlKGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZCwgdGVuYW50TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdXNlcnMvb2lkYy1hdXRoP1wiO1xuICAgICAgICBpZiAoY29kZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ2NvZGUnIGNhbm5vdCBiZSBudWxsLlwiKTtcbiAgICAgICAgZWxzZSBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdXJsXyArPSBcImNvZGU9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIGNvZGUpICsgXCImXCI7XG4gICAgICAgIGlmICh0ZW5hbnROYW1lID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAndGVuYW50TmFtZScgY2Fubm90IGJlIG51bGwuXCIpO1xuICAgICAgICBlbHNlIGlmICh0ZW5hbnROYW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB1cmxfICs9IFwidGVuYW50TmFtZT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgdGVuYW50TmFtZSkgKyBcIiZcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc09wZW5JZEF1dGhlbnRpY2F0ZShyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzT3BlbklkQXV0aGVudGljYXRlKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc09wZW5JZEF1dGhlbnRpY2F0ZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAyKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDI6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMiA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAyID0gQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAyKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwMTogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDAxID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDEgPSBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTQwMSk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJVbmF1dGhvcml6ZWRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDAxKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvblNlcnZpY2VQcm94eUlkZW50aXR5IHtcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGpzb25QYXJzZVJldml2ZXI6ICgoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgPz8gXCJcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBnZXRPbmxpbmVWYWxpZGF0b3JDb250ZXh0KCk6IE9ic2VydmFibGU8T25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdmFsaWRhdGlvbi9vbmxpbmUtdmFsaWRhdG9yLWNvbnRleHRcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0T25saW5lVmFsaWRhdG9yQ29udGV4dChyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0T25saW5lVmFsaWRhdG9yQ29udGV4dChyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzR2V0T25saW5lVmFsaWRhdG9yQ29udGV4dChyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8T25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gT25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8T25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbmV4cG9ydCBlbnVtIEFjdGlvblR5cGUge1xuICAgIE5vbmUgPSAwLFxuICAgIENyZWF0ZSA9IDEsXG4gICAgVXBkYXRlID0gMixcbiAgICBEZWxldGUgPSAzLFxuICAgIFJlbW90ZUNvbW1hbmQgPSA0LFxuICAgIEF1ZGl0TG9nSW4gPSA1LFxuICAgIFVzZXJNYWlsSW52aXRhdGlvbiA9IDYsXG4gICAgU2VuZCA9IDcsXG4gICAgUHJpbnQgPSA4LFxuICAgIEZhY2lsaXR5UmVtb3RlQ29tbWFuZCA9IDksXG4gICAgU2V0QXNJTyA9IDEwLFxuICAgIEF1ZGl0TG9nT3V0ID0gMTEsXG59XG5cbmV4cG9ydCBjbGFzcyBBY3RpdmF0ZVJlc3BvbnNlRHRvIGltcGxlbWVudHMgSUFjdGl2YXRlUmVzcG9uc2VEdG8ge1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZmFTZXR1cDogVGZhU2V0dXBEdG87XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUFjdGl2YXRlUmVzcG9uc2VEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMudGZhU2V0dXAgPSBfZGF0YVtcInRmYVNldHVwXCJdID8gVGZhU2V0dXBEdG8uZnJvbUpTKF9kYXRhW1widGZhU2V0dXBcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEFjdGl2YXRlUmVzcG9uc2VEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEFjdGl2YXRlUmVzcG9uc2VEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJ0ZmFTZXR1cFwiXSA9IHRoaXMudGZhU2V0dXAgPyB0aGlzLnRmYVNldHVwLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEFjdGl2YXRlUmVzcG9uc2VEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBY3RpdmF0ZVJlc3BvbnNlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQWN0aXZhdGVSZXNwb25zZUR0byB7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRmYVNldHVwOiBUZmFTZXR1cER0bztcbn1cblxuZXhwb3J0IGNsYXNzIEFsZXJ0UHJlZmVyZW5jZXNTZXR0aW5nc0R0byBpbXBsZW1lbnRzIElBbGVydFByZWZlcmVuY2VzU2V0dGluZ3NEdG8ge1xuICAgIGlzRW5hYmxlZDogYm9vbGVhbjtcbiAgICBwcmVmZXJlbmNlczogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbjsgfTsgfTsgfSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQWxlcnRQcmVmZXJlbmNlc1NldHRpbmdzRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pc0VuYWJsZWQgPSBfZGF0YVtcImlzRW5hYmxlZFwiXTtcbiAgICAgICAgICAgIGlmIChfZGF0YVtcInByZWZlcmVuY2VzXCJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVmZXJlbmNlcyA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gX2RhdGFbXCJwcmVmZXJlbmNlc1wiXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGFbXCJwcmVmZXJlbmNlc1wiXS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5wcmVmZXJlbmNlcylba2V5XSA9IF9kYXRhW1wicHJlZmVyZW5jZXNcIl1ba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEFsZXJ0UHJlZmVyZW5jZXNTZXR0aW5nc0R0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQWxlcnRQcmVmZXJlbmNlc1NldHRpbmdzRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpc0VuYWJsZWRcIl0gPSB0aGlzLmlzRW5hYmxlZDtcbiAgICAgICAgaWYgKHRoaXMucHJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgIGRhdGFbXCJwcmVmZXJlbmNlc1wiXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMucHJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVmZXJlbmNlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wicHJlZmVyZW5jZXNcIl0pW2tleV0gPSAoPGFueT50aGlzLnByZWZlcmVuY2VzKVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEFsZXJ0UHJlZmVyZW5jZXNTZXR0aW5nc0R0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEFsZXJ0UHJlZmVyZW5jZXNTZXR0aW5nc0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFsZXJ0UHJlZmVyZW5jZXNTZXR0aW5nc0R0byB7XG4gICAgaXNFbmFibGVkOiBib29sZWFuO1xuICAgIHByZWZlcmVuY2VzOiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuOyB9OyB9OyB9IHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBBbGVydHNEZXZpY2VUeXBlIHtcbiAgICBNYXN0ZXIgPSAxLFxuICAgIENhc2hSZWdpc3RlciA9IDIsXG4gICAgRGlzcGVuc2VyID0gMyxcbiAgICBWZXJpZmllciA9IDQsXG4gICAgTG9iYnlTdGF0aW9uID0gNSxcbiAgICBFbnRyeVBpbCA9IDYsXG4gICAgRXhpdFBpbCA9IDcsXG4gICAgTW9udGhseVZhbGlkYXRvciA9IDgsXG4gICAgVmFsaWRhdG9yID0gOSxcbn1cblxuZXhwb3J0IGNsYXNzIEFwcENvbmZpZ3VyYXRpb25EdG8gaW1wbGVtZW50cyBJQXBwQ29uZmlndXJhdGlvbkR0byB7XG4gICAgbmV3RWRnZUZsYWc6IGJvb2xlYW47XG4gICAgbGF0ZXN0RWRnZVZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBhbmFseXRpY3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGZlZWRiYWNrVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwbWw6IG51bWJlcjtcbiAgICBtaW5pbXVtU3VwcG9ydGVkU3BhcmtBcGlTZXJ2aWNlVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIG1pbmltdW1Db21wYXRpYmxlU3BhcmtBcGlTZXJ2aWNlVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBcHBDb25maWd1cmF0aW9uRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5uZXdFZGdlRmxhZyA9IF9kYXRhW1wibmV3RWRnZUZsYWdcIl07XG4gICAgICAgICAgICB0aGlzLmxhdGVzdEVkZ2VWZXJzaW9uID0gX2RhdGFbXCJsYXRlc3RFZGdlVmVyc2lvblwiXTtcbiAgICAgICAgICAgIHRoaXMuYW5hbHl0aWNzVG9rZW4gPSBfZGF0YVtcImFuYWx5dGljc1Rva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5mZWVkYmFja1Rva2VuID0gX2RhdGFbXCJmZWVkYmFja1Rva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5wbWwgPSBfZGF0YVtcInBtbFwiXTtcbiAgICAgICAgICAgIHRoaXMubWluaW11bVN1cHBvcnRlZFNwYXJrQXBpU2VydmljZVZlcnNpb24gPSBfZGF0YVtcIm1pbmltdW1TdXBwb3J0ZWRTcGFya0FwaVNlcnZpY2VWZXJzaW9uXCJdO1xuICAgICAgICAgICAgdGhpcy5taW5pbXVtQ29tcGF0aWJsZVNwYXJrQXBpU2VydmljZVZlcnNpb24gPSBfZGF0YVtcIm1pbmltdW1Db21wYXRpYmxlU3BhcmtBcGlTZXJ2aWNlVmVyc2lvblwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXBwQ29uZmlndXJhdGlvbkR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXBwQ29uZmlndXJhdGlvbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wibmV3RWRnZUZsYWdcIl0gPSB0aGlzLm5ld0VkZ2VGbGFnO1xuICAgICAgICBkYXRhW1wibGF0ZXN0RWRnZVZlcnNpb25cIl0gPSB0aGlzLmxhdGVzdEVkZ2VWZXJzaW9uO1xuICAgICAgICBkYXRhW1wiYW5hbHl0aWNzVG9rZW5cIl0gPSB0aGlzLmFuYWx5dGljc1Rva2VuO1xuICAgICAgICBkYXRhW1wiZmVlZGJhY2tUb2tlblwiXSA9IHRoaXMuZmVlZGJhY2tUb2tlbjtcbiAgICAgICAgZGF0YVtcInBtbFwiXSA9IHRoaXMucG1sO1xuICAgICAgICBkYXRhW1wibWluaW11bVN1cHBvcnRlZFNwYXJrQXBpU2VydmljZVZlcnNpb25cIl0gPSB0aGlzLm1pbmltdW1TdXBwb3J0ZWRTcGFya0FwaVNlcnZpY2VWZXJzaW9uO1xuICAgICAgICBkYXRhW1wibWluaW11bUNvbXBhdGlibGVTcGFya0FwaVNlcnZpY2VWZXJzaW9uXCJdID0gdGhpcy5taW5pbXVtQ29tcGF0aWJsZVNwYXJrQXBpU2VydmljZVZlcnNpb247XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEFwcENvbmZpZ3VyYXRpb25EdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBcHBDb25maWd1cmF0aW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXBwQ29uZmlndXJhdGlvbkR0byB7XG4gICAgbmV3RWRnZUZsYWc6IGJvb2xlYW47XG4gICAgbGF0ZXN0RWRnZVZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBhbmFseXRpY3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGZlZWRiYWNrVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwbWw6IG51bWJlcjtcbiAgICBtaW5pbXVtU3VwcG9ydGVkU3BhcmtBcGlTZXJ2aWNlVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIG1pbmltdW1Db21wYXRpYmxlU3BhcmtBcGlTZXJ2aWNlVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBBcHBDb25maWd1cmF0aW9uRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBBcHBDb25maWd1cmF0aW9uRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogQXBwQ29uZmlndXJhdGlvbkR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBBcHBNb2R1bGUge1xuICAgIENjID0gMCxcbiAgICBNYW5hZ2VtZW50ID0gMSxcbiAgICBTZXR0aW5ncyA9IDIsXG4gICAgVmFsaWRhdGlvbiA9IDMsXG4gICAgR3Vlc3RzID0gNCxcbiAgICBSZXBvcnRzID0gNSxcbiAgICBNb250aGxpZXMgPSA2LFxuICAgIEJhY2tvZmZpY2UgPSA3LFxuICAgIFBpID0gOCxcbiAgICBBY2NvdW50cyA9IDksXG4gICAgTG90Q29uZmlndXJhdGlvbiA9IDEwLFxuICAgIEVDb21tZXJjZUJhY2tvZmZpY2UgPSAxMSxcbn1cblxuZXhwb3J0IGNsYXNzIEF1ZGl0RmlsdGVyIGltcGxlbWVudHMgSUF1ZGl0RmlsdGVyIHtcbiAgICBzdGFydERhdGU6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgZW5kRGF0ZTogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICB0YWtlOiBudW1iZXI7XG4gICAgc2tpcDogbnVtYmVyO1xuICAgIHNlYXJjaFZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZW50aXR5TmFtZUxpc3Q6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGFjdGlvblR5cGU6IEFjdGlvblR5cGVbXSB8IHVuZGVmaW5lZDtcbiAgICBndWlkV2l0aEZhY2lsaXRpZXM6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyW107IH0gfCB1bmRlZmluZWQ7XG4gICAgc2VhcmNoQnlVc2VySWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgdGVuYW50SWRzOiBudW1iZXJbXSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXVkaXRGaWx0ZXIpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IF9kYXRhW1wic3RhcnREYXRlXCJdID8gbW9tZW50KF9kYXRhW1wic3RhcnREYXRlXCJdLnRvU3RyaW5nKCkpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmVuZERhdGUgPSBfZGF0YVtcImVuZERhdGVcIl0gPyBtb21lbnQoX2RhdGFbXCJlbmREYXRlXCJdLnRvU3RyaW5nKCkpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnRha2UgPSBfZGF0YVtcInRha2VcIl07XG4gICAgICAgICAgICB0aGlzLnNraXAgPSBfZGF0YVtcInNraXBcIl07XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gX2RhdGFbXCJzZWFyY2hWYWx1ZVwiXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wiZW50aXR5TmFtZUxpc3RcIl0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRpdHlOYW1lTGlzdCA9IFtdIGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIF9kYXRhW1wiZW50aXR5TmFtZUxpc3RcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW50aXR5TmFtZUxpc3QucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wiYWN0aW9uVHlwZVwiXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvblR5cGUgPSBbXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBfZGF0YVtcImFjdGlvblR5cGVcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uVHlwZS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF9kYXRhW1wiZ3VpZFdpdGhGYWNpbGl0aWVzXCJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ndWlkV2l0aEZhY2lsaXRpZXMgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIF9kYXRhW1wiZ3VpZFdpdGhGYWNpbGl0aWVzXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YVtcImd1aWRXaXRoRmFjaWxpdGllc1wiXS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5ndWlkV2l0aEZhY2lsaXRpZXMpW2tleV0gPSBfZGF0YVtcImd1aWRXaXRoRmFjaWxpdGllc1wiXVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQnlVc2VySWQgPSBfZGF0YVtcInNlYXJjaEJ5VXNlcklkXCJdO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX2RhdGFbXCJ0ZW5hbnRJZHNcIl0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZW5hbnRJZHMgPSBbXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBfZGF0YVtcInRlbmFudElkc1wiXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZW5hbnRJZHMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXVkaXRGaWx0ZXIge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1ZGl0RmlsdGVyKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJzdGFydERhdGVcIl0gPSB0aGlzLnN0YXJ0RGF0ZSA/IHRoaXMuc3RhcnREYXRlLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcImVuZERhdGVcIl0gPSB0aGlzLmVuZERhdGUgPyB0aGlzLmVuZERhdGUudG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1widGFrZVwiXSA9IHRoaXMudGFrZTtcbiAgICAgICAgZGF0YVtcInNraXBcIl0gPSB0aGlzLnNraXA7XG4gICAgICAgIGRhdGFbXCJzZWFyY2hWYWx1ZVwiXSA9IHRoaXMuc2VhcmNoVmFsdWU7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZW50aXR5TmFtZUxpc3QpKSB7XG4gICAgICAgICAgICBkYXRhW1wiZW50aXR5TmFtZUxpc3RcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5lbnRpdHlOYW1lTGlzdClcbiAgICAgICAgICAgICAgICBkYXRhW1wiZW50aXR5TmFtZUxpc3RcIl0ucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmFjdGlvblR5cGUpKSB7XG4gICAgICAgICAgICBkYXRhW1wiYWN0aW9uVHlwZVwiXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLmFjdGlvblR5cGUpXG4gICAgICAgICAgICAgICAgZGF0YVtcImFjdGlvblR5cGVcIl0ucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ndWlkV2l0aEZhY2lsaXRpZXMpIHtcbiAgICAgICAgICAgIGRhdGFbXCJndWlkV2l0aEZhY2lsaXRpZXNcIl0gPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmd1aWRXaXRoRmFjaWxpdGllcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmd1aWRXaXRoRmFjaWxpdGllcy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wiZ3VpZFdpdGhGYWNpbGl0aWVzXCJdKVtrZXldID0gKDxhbnk+dGhpcy5ndWlkV2l0aEZhY2lsaXRpZXMpW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcInNlYXJjaEJ5VXNlcklkXCJdID0gdGhpcy5zZWFyY2hCeVVzZXJJZDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy50ZW5hbnRJZHMpKSB7XG4gICAgICAgICAgICBkYXRhW1widGVuYW50SWRzXCJdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMudGVuYW50SWRzKVxuICAgICAgICAgICAgICAgIGRhdGFbXCJ0ZW5hbnRJZHNcIl0ucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdWRpdEZpbHRlciB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1ZGl0RmlsdGVyKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXVkaXRGaWx0ZXIge1xuICAgIHN0YXJ0RGF0ZTogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBlbmREYXRlOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHRha2U6IG51bWJlcjtcbiAgICBza2lwOiBudW1iZXI7XG4gICAgc2VhcmNoVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBlbnRpdHlOYW1lTGlzdDogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgYWN0aW9uVHlwZTogQWN0aW9uVHlwZVtdIHwgdW5kZWZpbmVkO1xuICAgIGd1aWRXaXRoRmFjaWxpdGllczogeyBba2V5OiBzdHJpbmddOiBudW1iZXJbXTsgfSB8IHVuZGVmaW5lZDtcbiAgICBzZWFyY2hCeVVzZXJJZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnRJZHM6IG51bWJlcltdIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0byBpbXBsZW1lbnRzIElBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvIHtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRlbXBvcmFyeUJsb2NrZWRUaW1lOiBudW1iZXI7XG4gICAgdGVuYW50OiBUZW5hbnREdG87XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gX2RhdGFbXCJhY2Nlc3NUb2tlblwiXTtcbiAgICAgICAgICAgIHRoaXMudGVtcG9yYXJ5QmxvY2tlZFRpbWUgPSBfZGF0YVtcInRlbXBvcmFyeUJsb2NrZWRUaW1lXCJdO1xuICAgICAgICAgICAgdGhpcy50ZW5hbnQgPSBfZGF0YVtcInRlbmFudFwiXSA/IFRlbmFudER0by5mcm9tSlMoX2RhdGFbXCJ0ZW5hbnRcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImFjY2Vzc1Rva2VuXCJdID0gdGhpcy5hY2Nlc3NUb2tlbjtcbiAgICAgICAgZGF0YVtcInRlbXBvcmFyeUJsb2NrZWRUaW1lXCJdID0gdGhpcy50ZW1wb3JhcnlCbG9ja2VkVGltZTtcbiAgICAgICAgZGF0YVtcInRlbmFudFwiXSA9IHRoaXMudGVuYW50ID8gdGhpcy50ZW5hbnQudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvIHtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRlbXBvcmFyeUJsb2NrZWRUaW1lOiBudW1iZXI7XG4gICAgdGVuYW50OiBUZW5hbnREdG87XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXSA/IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YSA/IHRoaXMuZGF0YS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZVJlcXVlc3REdG8ge1xuICAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICB0ZW5hbnRJZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIHRlbmFudE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXV0aGVudGljYXRlUmVxdWVzdER0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMudXNlcm5hbWUgPSBfZGF0YVtcInVzZXJuYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy5wYXNzd29yZCA9IF9kYXRhW1wicGFzc3dvcmRcIl07XG4gICAgICAgICAgICB0aGlzLnRlbmFudElkID0gX2RhdGFbXCJ0ZW5hbnRJZFwiXTtcbiAgICAgICAgICAgIHRoaXMudGVuYW50TmFtZSA9IF9kYXRhW1widGVuYW50TmFtZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXV0aGVudGljYXRlUmVxdWVzdER0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlUmVxdWVzdER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1widXNlcm5hbWVcIl0gPSB0aGlzLnVzZXJuYW1lO1xuICAgICAgICBkYXRhW1wicGFzc3dvcmRcIl0gPSB0aGlzLnBhc3N3b3JkO1xuICAgICAgICBkYXRhW1widGVuYW50SWRcIl0gPSB0aGlzLnRlbmFudElkO1xuICAgICAgICBkYXRhW1widGVuYW50TmFtZVwiXSA9IHRoaXMudGVuYW50TmFtZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQXV0aGVudGljYXRlUmVxdWVzdER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBdXRoZW50aWNhdGVSZXF1ZXN0RHRvIHtcbiAgICB1c2VybmFtZTogc3RyaW5nO1xuICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgdGVuYW50SWQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElBdXRoZW50aWNhdGVSZXF1ZXN0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXV0aGVudGljYXRlUmVxdWVzdER0b0h0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXSA/IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlUmVxdWVzdER0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YSA/IHRoaXMuZGF0YS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlUmVxdWVzdER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGVSZXNwb25zZUR0byBpbXBsZW1lbnRzIElBdXRoZW50aWNhdGVSZXNwb25zZUR0byB7XG4gICAgdXNlcklkOiBudW1iZXI7XG4gICAgZmlyc3ROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGFzdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VybmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHVzZXJTdGF0dXM6IFVzZXJTdGF0dXM7XG4gICAgcGFzc3dvcmRFeHBpcmF0aW9uOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIG1vZHVsZXM6IEF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICBkZWZhdWx0TW9kdWxlOiBBcHBNb2R1bGU7XG4gICAgdGhpcmRQYXJ0eVRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWZyZXNoSW50ZXJ2YWw6IG51bWJlcjtcbiAgICBleHBpcmF0aW9uOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNldHRpbmdzOiBTcGFya1NldHRpbmdzRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgdGVuYW50OiBUZW5hbnREdG87XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHVzZXJJc1RlbXBvcmFyeUJsb2NrZWQ6IGJvb2xlYW47XG4gICAgcGFzc3dvcmRFeHBpcmF0aW9uU3RhdGU6IFBhc3N3b3JkRXhwaXJhdGlvblN0YXRlO1xuICAgIGRheXNUb0V4cGlyZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIHR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uOiBib29sZWFuO1xuICAgIHR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvOiBUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0bztcbiAgICBzaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bzogU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG87XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy51c2VySWQgPSBfZGF0YVtcInVzZXJJZFwiXTtcbiAgICAgICAgICAgIHRoaXMuZmlyc3ROYW1lID0gX2RhdGFbXCJmaXJzdE5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLmxhc3ROYW1lID0gX2RhdGFbXCJsYXN0TmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMudXNlcm5hbWUgPSBfZGF0YVtcInVzZXJuYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy51c2VyU3RhdHVzID0gX2RhdGFbXCJ1c2VyU3RhdHVzXCJdO1xuICAgICAgICAgICAgdGhpcy5wYXNzd29yZEV4cGlyYXRpb24gPSBfZGF0YVtcInBhc3N3b3JkRXhwaXJhdGlvblwiXSA/IG1vbWVudChfZGF0YVtcInBhc3N3b3JkRXhwaXJhdGlvblwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX2RhdGFbXCJtb2R1bGVzXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlcyA9IFtdIGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIF9kYXRhW1wibW9kdWxlc1wiXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzLnB1c2goQXV0aGVudGljYXRlVXNlck1vZHVsZUR0by5mcm9tSlMoaXRlbSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kdWxlID0gX2RhdGFbXCJkZWZhdWx0TW9kdWxlXCJdO1xuICAgICAgICAgICAgdGhpcy50aGlyZFBhcnR5VG9rZW4gPSBfZGF0YVtcInRoaXJkUGFydHlUb2tlblwiXTtcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzVG9rZW4gPSBfZGF0YVtcImFjY2Vzc1Rva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4gPSBfZGF0YVtcInJlZnJlc2hUb2tlblwiXTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaEludGVydmFsID0gX2RhdGFbXCJyZWZyZXNoSW50ZXJ2YWxcIl07XG4gICAgICAgICAgICB0aGlzLmV4cGlyYXRpb24gPSBfZGF0YVtcImV4cGlyYXRpb25cIl0gPyBtb21lbnQoX2RhdGFbXCJleHBpcmF0aW9uXCJdLnRvU3RyaW5nKCkpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcInNldHRpbmdzXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MgPSBbXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBfZGF0YVtcInNldHRpbmdzXCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzLnB1c2goU3BhcmtTZXR0aW5nc0R0by5mcm9tSlMoaXRlbSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50ZW5hbnQgPSBfZGF0YVtcInRlbmFudFwiXSA/IFRlbmFudER0by5mcm9tSlMoX2RhdGFbXCJ0ZW5hbnRcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gX2RhdGFbXCJtZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy51c2VySXNUZW1wb3JhcnlCbG9ja2VkID0gX2RhdGFbXCJ1c2VySXNUZW1wb3JhcnlCbG9ja2VkXCJdO1xuICAgICAgICAgICAgdGhpcy5wYXNzd29yZEV4cGlyYXRpb25TdGF0ZSA9IF9kYXRhW1wicGFzc3dvcmRFeHBpcmF0aW9uU3RhdGVcIl07XG4gICAgICAgICAgICB0aGlzLmRheXNUb0V4cGlyZSA9IF9kYXRhW1wiZGF5c1RvRXhwaXJlXCJdO1xuICAgICAgICAgICAgdGhpcy50d29GYWN0b3JBdXRoZW50aWNhdGlvbiA9IF9kYXRhW1widHdvRmFjdG9yQXV0aGVudGljYXRpb25cIl07XG4gICAgICAgICAgICB0aGlzLnR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvID0gX2RhdGFbXCJ0d29GYWN0b3JBdXRoZW50aWNhdGlvbkR0b1wiXSA/IFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvLmZyb21KUyhfZGF0YVtcInR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0byA9IF9kYXRhW1wic2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG9cIl0gPyBTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0by5mcm9tSlMoX2RhdGFbXCJzaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0b1wiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJ1c2VySWRcIl0gPSB0aGlzLnVzZXJJZDtcbiAgICAgICAgZGF0YVtcImZpcnN0TmFtZVwiXSA9IHRoaXMuZmlyc3ROYW1lO1xuICAgICAgICBkYXRhW1wibGFzdE5hbWVcIl0gPSB0aGlzLmxhc3ROYW1lO1xuICAgICAgICBkYXRhW1widXNlcm5hbWVcIl0gPSB0aGlzLnVzZXJuYW1lO1xuICAgICAgICBkYXRhW1widXNlclN0YXR1c1wiXSA9IHRoaXMudXNlclN0YXR1cztcbiAgICAgICAgZGF0YVtcInBhc3N3b3JkRXhwaXJhdGlvblwiXSA9IHRoaXMucGFzc3dvcmRFeHBpcmF0aW9uID8gdGhpcy5wYXNzd29yZEV4cGlyYXRpb24udG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm1vZHVsZXMpKSB7XG4gICAgICAgICAgICBkYXRhW1wibW9kdWxlc1wiXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLm1vZHVsZXMpXG4gICAgICAgICAgICAgICAgZGF0YVtcIm1vZHVsZXNcIl0ucHVzaChpdGVtLnRvSlNPTigpKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW1wiZGVmYXVsdE1vZHVsZVwiXSA9IHRoaXMuZGVmYXVsdE1vZHVsZTtcbiAgICAgICAgZGF0YVtcInRoaXJkUGFydHlUb2tlblwiXSA9IHRoaXMudGhpcmRQYXJ0eVRva2VuO1xuICAgICAgICBkYXRhW1wiYWNjZXNzVG9rZW5cIl0gPSB0aGlzLmFjY2Vzc1Rva2VuO1xuICAgICAgICBkYXRhW1wicmVmcmVzaFRva2VuXCJdID0gdGhpcy5yZWZyZXNoVG9rZW47XG4gICAgICAgIGRhdGFbXCJyZWZyZXNoSW50ZXJ2YWxcIl0gPSB0aGlzLnJlZnJlc2hJbnRlcnZhbDtcbiAgICAgICAgZGF0YVtcImV4cGlyYXRpb25cIl0gPSB0aGlzLmV4cGlyYXRpb24gPyB0aGlzLmV4cGlyYXRpb24udG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnNldHRpbmdzKSkge1xuICAgICAgICAgICAgZGF0YVtcInNldHRpbmdzXCJdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuc2V0dGluZ3MpXG4gICAgICAgICAgICAgICAgZGF0YVtcInNldHRpbmdzXCJdLnB1c2goaXRlbS50b0pTT04oKSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcInRlbmFudFwiXSA9IHRoaXMudGVuYW50ID8gdGhpcy50ZW5hbnQudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wibWVzc2FnZVwiXSA9IHRoaXMubWVzc2FnZTtcbiAgICAgICAgZGF0YVtcInVzZXJJc1RlbXBvcmFyeUJsb2NrZWRcIl0gPSB0aGlzLnVzZXJJc1RlbXBvcmFyeUJsb2NrZWQ7XG4gICAgICAgIGRhdGFbXCJwYXNzd29yZEV4cGlyYXRpb25TdGF0ZVwiXSA9IHRoaXMucGFzc3dvcmRFeHBpcmF0aW9uU3RhdGU7XG4gICAgICAgIGRhdGFbXCJkYXlzVG9FeHBpcmVcIl0gPSB0aGlzLmRheXNUb0V4cGlyZTtcbiAgICAgICAgZGF0YVtcInR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uXCJdID0gdGhpcy50d29GYWN0b3JBdXRoZW50aWNhdGlvbjtcbiAgICAgICAgZGF0YVtcInR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvXCJdID0gdGhpcy50d29GYWN0b3JBdXRoZW50aWNhdGlvbkR0byA/IHRoaXMudHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8udG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvXCJdID0gdGhpcy5zaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0byA/IHRoaXMuc2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8udG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVSZXNwb25zZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvIHtcbiAgICB1c2VySWQ6IG51bWJlcjtcbiAgICBmaXJzdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsYXN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHVzZXJuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdXNlclN0YXR1czogVXNlclN0YXR1cztcbiAgICBwYXNzd29yZEV4cGlyYXRpb246IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgbW9kdWxlczogQXV0aGVudGljYXRlVXNlck1vZHVsZUR0b1tdIHwgdW5kZWZpbmVkO1xuICAgIGRlZmF1bHRNb2R1bGU6IEFwcE1vZHVsZTtcbiAgICB0aGlyZFBhcnR5VG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZnJlc2hJbnRlcnZhbDogbnVtYmVyO1xuICAgIGV4cGlyYXRpb246IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgc2V0dGluZ3M6IFNwYXJrU2V0dGluZ3NEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnQ6IFRlbmFudER0bztcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBtZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdXNlcklzVGVtcG9yYXJ5QmxvY2tlZDogYm9vbGVhbjtcbiAgICBwYXNzd29yZEV4cGlyYXRpb25TdGF0ZTogUGFzc3dvcmRFeHBpcmF0aW9uU3RhdGU7XG4gICAgZGF5c1RvRXhwaXJlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgdHdvRmFjdG9yQXV0aGVudGljYXRpb246IGJvb2xlYW47XG4gICAgdHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG86IFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvO1xuICAgIHNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvOiBTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bztcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXSA/IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YSA/IHRoaXMuZGF0YS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcImRhdGFcIl0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJkYXRhXCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEucHVzaChBdXRoZW50aWNhdGVSZXNwb25zZUR0by5mcm9tSlMoaXRlbSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEpKSB7XG4gICAgICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLmRhdGEpXG4gICAgICAgICAgICAgICAgZGF0YVtcImRhdGFcIl0ucHVzaChpdGVtLnRvSlNPTigpKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b1tdIHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG8ge1xuICAgIG1vZHVsZTogQXBwTW9kdWxlO1xuICAgIHN1Yk1vZHVsZTogU3ViTW9kdWxlW10gfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLm1vZHVsZSA9IF9kYXRhW1wibW9kdWxlXCJdO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX2RhdGFbXCJzdWJNb2R1bGVcIl0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJNb2R1bGUgPSBbXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBfZGF0YVtcInN1Yk1vZHVsZVwiXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJNb2R1bGUucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXV0aGVudGljYXRlVXNlck1vZHVsZUR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlVXNlck1vZHVsZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wibW9kdWxlXCJdID0gdGhpcy5tb2R1bGU7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuc3ViTW9kdWxlKSkge1xuICAgICAgICAgICAgZGF0YVtcInN1Yk1vZHVsZVwiXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLnN1Yk1vZHVsZSlcbiAgICAgICAgICAgICAgICBkYXRhW1wic3ViTW9kdWxlXCJdLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQXV0aGVudGljYXRlVXNlck1vZHVsZUR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvIHtcbiAgICBtb2R1bGU6IEFwcE1vZHVsZTtcbiAgICBzdWJNb2R1bGU6IFN1Yk1vZHVsZVtdIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgQXp1cmVTZXR0aW5ncyBpbXBsZW1lbnRzIElBenVyZVNldHRpbmdzIHtcbiAgICBjbGllbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRlbmFudElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF6dXJlU2V0dGluZ3MpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNsaWVudElkID0gX2RhdGFbXCJjbGllbnRJZFwiXTtcbiAgICAgICAgICAgIHRoaXMudGVuYW50SWQgPSBfZGF0YVtcInRlbmFudElkXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBenVyZVNldHRpbmdzIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBenVyZVNldHRpbmdzKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJjbGllbnRJZFwiXSA9IHRoaXMuY2xpZW50SWQ7XG4gICAgICAgIGRhdGFbXCJ0ZW5hbnRJZFwiXSA9IHRoaXMudGVuYW50SWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF6dXJlU2V0dGluZ3Mge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBenVyZVNldHRpbmdzKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXp1cmVTZXR0aW5ncyB7XG4gICAgY2xpZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBEYXRlVGltZUZpZWxkIHtcbiAgICBWYWxpZFRvID0gMCxcbiAgICBWYWxpZEZyb20gPSAxLFxuICAgIEZyb21EYXRlVGltZSA9IDIsXG4gICAgVG9EYXRlVGltZSA9IDMsXG4gICAgQ3JlYXRpb24gPSA0LFxuICAgIE1vZGlmaWVkID0gNSxcbiAgICBQcm9kdWNlZERhdGVUaW1lID0gNixcbiAgICBQcmludGVkRGF0ZVRpbWUgPSA3LFxuICAgIExhc3RUcmFuc0RhdGVUaW1lID0gOCxcbiAgICBMYXN0SU5EYXRlVGltZSA9IDksXG4gICAgTGFzdEFjdGl2aXR5ID0gMTAsXG4gICAgQ3JlYXRlZEF0ID0gMTEsXG4gICAgUGFzc3dvcmRFeHBpcmF0aW9uID0gMTIsXG4gICAgVGVybXNBcHByb3ZhbERhdGUgPSAxMyxcbiAgICBVcGRhdGVkQXQgPSAxNCxcbiAgICBMYXN0Q29ubmVjdGlvbiA9IDE1LFxuICAgIERhdGVUaW1lID0gMTYsXG4gICAgVXBkYXRlRGF0ZSA9IDE3LFxuICAgIFZhbGlkVGltZSA9IDE4LFxufVxuXG5leHBvcnQgZW51bSBFbnZpcm9ubWVudE1vZGUge1xuICAgIERldmVsb3BtZW50ID0gMSxcbiAgICBQcm9kdWN0aW9uID0gMixcbiAgICBTdGFnaW5nID0gMyxcbiAgICBTYW5kYm94ID0gNCxcbiAgICBMb2NhbCA9IDUsXG4gICAgQXV0b21hdGlvbiA9IDYsXG59XG5cbmV4cG9ydCBjbGFzcyBGYWNpbGl0eUJhc2ljRHRvIGltcGxlbWVudHMgSUZhY2lsaXR5QmFzaWNEdG8ge1xuICAgIGlkOiBudW1iZXI7XG4gICAgY2xvdWRJZDogbnVtYmVyO1xuICAgIGNsb3VkUGFyZW50SWQ6IG51bWJlcjtcbiAgICBpc0Jhc2ljOiBib29sZWFuO1xuICAgIG11bHRpUGFya1BhcmVudElEOiBudW1iZXI7XG4gICAgc2l0ZUNvZGU6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcGFyZW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgaXNNdWx0aVBhcms6IG51bWJlcjtcbiAgICB0aW1lRHJpZnQ6IG51bWJlcjtcbiAgICBzZXJ2ZXJEYXRlVGltZTogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzcFRpbWVab25lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdG90YWxTcGFjZTogbnVtYmVyO1xuICAgIGlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNDcmVkaXRTZXJ2ZXJFbmFibGVkOiBib29sZWFuO1xuICAgIGlzTFBSQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzTFBSRW5hYmxlZDogYm9vbGVhbjtcbiAgICBpc1RpY2tldExlc3NFbmFibGVkOiBib29sZWFuO1xuICAgIGxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBjcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgbWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgYWN0aXZlOiBudW1iZXI7XG4gICAgcGVybWlzc2lvbnM6IHsgW2tleTogc3RyaW5nXTogUGVybWlzc2lvbkR0bzsgfSB8IHVuZGVmaW5lZDtcbiAgICBmZWF0dXJlUGVybWlzc2lvbnM6IFBlcm1pc3Npb25UeXBlW10gfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUZhY2lsaXR5QmFzaWNEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gX2RhdGFbXCJpZFwiXTtcbiAgICAgICAgICAgIHRoaXMuY2xvdWRJZCA9IF9kYXRhW1wiY2xvdWRJZFwiXTtcbiAgICAgICAgICAgIHRoaXMuY2xvdWRQYXJlbnRJZCA9IF9kYXRhW1wiY2xvdWRQYXJlbnRJZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNCYXNpYyA9IF9kYXRhW1wiaXNCYXNpY1wiXTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlQYXJrUGFyZW50SUQgPSBfZGF0YVtcIm11bHRpUGFya1BhcmVudElEXCJdO1xuICAgICAgICAgICAgdGhpcy5zaXRlQ29kZSA9IF9kYXRhW1wic2l0ZUNvZGVcIl07XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBfZGF0YVtcIm5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLnBhcmVudCA9IF9kYXRhW1wicGFyZW50XCJdO1xuICAgICAgICAgICAgdGhpcy5pc011bHRpUGFyayA9IF9kYXRhW1wiaXNNdWx0aVBhcmtcIl07XG4gICAgICAgICAgICB0aGlzLnRpbWVEcmlmdCA9IF9kYXRhW1widGltZURyaWZ0XCJdO1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJEYXRlVGltZSA9IF9kYXRhW1wic2VydmVyRGF0ZVRpbWVcIl0gPyBtb21lbnQoX2RhdGFbXCJzZXJ2ZXJEYXRlVGltZVwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zcFRpbWVab25lID0gX2RhdGFbXCJzcFRpbWVab25lXCJdO1xuICAgICAgICAgICAgdGhpcy50b3RhbFNwYWNlID0gX2RhdGFbXCJ0b3RhbFNwYWNlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkID0gX2RhdGFbXCJpc01haW5Db250cm9sbGVyQ29ubmVjdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZCA9IF9kYXRhW1wiaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWRcIl07XG4gICAgICAgICAgICB0aGlzLmlzQ3JlZGl0U2VydmVyRW5hYmxlZCA9IF9kYXRhW1wiaXNDcmVkaXRTZXJ2ZXJFbmFibGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc0xQUkNvbm5lY3RlZCA9IF9kYXRhW1wiaXNMUFJDb25uZWN0ZWRcIl07XG4gICAgICAgICAgICB0aGlzLmlzTFBSRW5hYmxlZCA9IF9kYXRhW1wiaXNMUFJFbmFibGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1RpY2tldExlc3NFbmFibGVkID0gX2RhdGFbXCJpc1RpY2tldExlc3NFbmFibGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBfZGF0YVtcImxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcImxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBfZGF0YVtcImNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcImNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IF9kYXRhW1wibWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPyBtb21lbnQoX2RhdGFbXCJtYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBfZGF0YVtcImFjdGl2ZVwiXTtcbiAgICAgICAgICAgIGlmIChfZGF0YVtcInBlcm1pc3Npb25zXCJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gX2RhdGFbXCJwZXJtaXNzaW9uc1wiXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGFbXCJwZXJtaXNzaW9uc1wiXS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5wZXJtaXNzaW9ucylba2V5XSA9IF9kYXRhW1wicGVybWlzc2lvbnNcIl1ba2V5XSA/IFBlcm1pc3Npb25EdG8uZnJvbUpTKF9kYXRhW1wicGVybWlzc2lvbnNcIl1ba2V5XSkgOiBuZXcgUGVybWlzc2lvbkR0bygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wiZmVhdHVyZVBlcm1pc3Npb25zXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZVBlcm1pc3Npb25zID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJmZWF0dXJlUGVybWlzc2lvbnNcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZVBlcm1pc3Npb25zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEZhY2lsaXR5QmFzaWNEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEZhY2lsaXR5QmFzaWNEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImlkXCJdID0gdGhpcy5pZDtcbiAgICAgICAgZGF0YVtcImNsb3VkSWRcIl0gPSB0aGlzLmNsb3VkSWQ7XG4gICAgICAgIGRhdGFbXCJjbG91ZFBhcmVudElkXCJdID0gdGhpcy5jbG91ZFBhcmVudElkO1xuICAgICAgICBkYXRhW1wiaXNCYXNpY1wiXSA9IHRoaXMuaXNCYXNpYztcbiAgICAgICAgZGF0YVtcIm11bHRpUGFya1BhcmVudElEXCJdID0gdGhpcy5tdWx0aVBhcmtQYXJlbnRJRDtcbiAgICAgICAgZGF0YVtcInNpdGVDb2RlXCJdID0gdGhpcy5zaXRlQ29kZTtcbiAgICAgICAgZGF0YVtcIm5hbWVcIl0gPSB0aGlzLm5hbWU7XG4gICAgICAgIGRhdGFbXCJwYXJlbnRcIl0gPSB0aGlzLnBhcmVudDtcbiAgICAgICAgZGF0YVtcImlzTXVsdGlQYXJrXCJdID0gdGhpcy5pc011bHRpUGFyaztcbiAgICAgICAgZGF0YVtcInRpbWVEcmlmdFwiXSA9IHRoaXMudGltZURyaWZ0O1xuICAgICAgICBkYXRhW1wic2VydmVyRGF0ZVRpbWVcIl0gPSB0aGlzLnNlcnZlckRhdGVUaW1lID8gdGhpcy5zZXJ2ZXJEYXRlVGltZS50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzcFRpbWVab25lXCJdID0gdGhpcy5zcFRpbWVab25lO1xuICAgICAgICBkYXRhW1widG90YWxTcGFjZVwiXSA9IHRoaXMudG90YWxTcGFjZTtcbiAgICAgICAgZGF0YVtcImlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWRcIl0gPSB0aGlzLmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQ7XG4gICAgICAgIGRhdGFbXCJpc0NyZWRpdFNlcnZlckNvbm5lY3RlZFwiXSA9IHRoaXMuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQ7XG4gICAgICAgIGRhdGFbXCJpc0NyZWRpdFNlcnZlckVuYWJsZWRcIl0gPSB0aGlzLmlzQ3JlZGl0U2VydmVyRW5hYmxlZDtcbiAgICAgICAgZGF0YVtcImlzTFBSQ29ubmVjdGVkXCJdID0gdGhpcy5pc0xQUkNvbm5lY3RlZDtcbiAgICAgICAgZGF0YVtcImlzTFBSRW5hYmxlZFwiXSA9IHRoaXMuaXNMUFJFbmFibGVkO1xuICAgICAgICBkYXRhW1wiaXNUaWNrZXRMZXNzRW5hYmxlZFwiXSA9IHRoaXMuaXNUaWNrZXRMZXNzRW5hYmxlZDtcbiAgICAgICAgZGF0YVtcImxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA9IHRoaXMubHByRGlzY29ubmVjdGVkVGltZXN0YW1wID8gdGhpcy5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAudG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wiY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID0gdGhpcy5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPyB0aGlzLmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcC50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJtYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA9IHRoaXMubWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPyB0aGlzLm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcImFjdGl2ZVwiXSA9IHRoaXMuYWN0aXZlO1xuICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgZGF0YVtcInBlcm1pc3Npb25zXCJdID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25zLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PmRhdGFbXCJwZXJtaXNzaW9uc1wiXSlba2V5XSA9IHRoaXMucGVybWlzc2lvbnNba2V5XSA/IHRoaXMucGVybWlzc2lvbnNba2V5XS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmVhdHVyZVBlcm1pc3Npb25zKSkge1xuICAgICAgICAgICAgZGF0YVtcImZlYXR1cmVQZXJtaXNzaW9uc1wiXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLmZlYXR1cmVQZXJtaXNzaW9ucylcbiAgICAgICAgICAgICAgICBkYXRhW1wiZmVhdHVyZVBlcm1pc3Npb25zXCJdLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogRmFjaWxpdHlCYXNpY0R0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEZhY2lsaXR5QmFzaWNEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGYWNpbGl0eUJhc2ljRHRvIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGNsb3VkSWQ6IG51bWJlcjtcbiAgICBjbG91ZFBhcmVudElkOiBudW1iZXI7XG4gICAgaXNCYXNpYzogYm9vbGVhbjtcbiAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVtYmVyO1xuICAgIHNpdGVDb2RlOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHBhcmVudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGlzTXVsdGlQYXJrOiBudW1iZXI7XG4gICAgdGltZURyaWZ0OiBudW1iZXI7XG4gICAgc2VydmVyRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgc3BUaW1lWm9uZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRvdGFsU3BhY2U6IG51bWJlcjtcbiAgICBpc01haW5Db250cm9sbGVyQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzQ3JlZGl0U2VydmVyRW5hYmxlZDogYm9vbGVhbjtcbiAgICBpc0xQUkNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc0xQUkVuYWJsZWQ6IGJvb2xlYW47XG4gICAgaXNUaWNrZXRMZXNzRW5hYmxlZDogYm9vbGVhbjtcbiAgICBscHJEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIG1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIGFjdGl2ZTogbnVtYmVyO1xuICAgIHBlcm1pc3Npb25zOiB7IFtrZXk6IHN0cmluZ106IFBlcm1pc3Npb25EdG87IH0gfCB1bmRlZmluZWQ7XG4gICAgZmVhdHVyZVBlcm1pc3Npb25zOiBQZXJtaXNzaW9uVHlwZVtdIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcyB7XG4gICAgTWFudWFsbHlSdW5aID0gMSxcbiAgICBVcGRhdGVTZXR0aW5ncyA9IDIsXG4gICAgU2V0QWN0aXZlUmF0ZSA9IDMsXG4gICAgVXBkYXRlTUNEYXRlVGltZSA9IDQsXG4gICAgUnVuTWFjcm8gPSA1LFxuICAgIFRyYW5zbWl0U3BlY2lhbERheXMgPSA2LFxufVxuXG5leHBvcnQgZW51bSBGaWxlVHlwZSB7XG4gICAgWExTWCA9IDEsXG4gICAgQ1NWID0gMixcbiAgICBQREYgPSAzLFxufVxuXG5leHBvcnQgZW51bSBHZW5lcmFsQWN0aW9uVHlwZSB7XG4gICAgRGlzY29ubmVjdEZyb21TZXNzaW9ucyA9IDEsXG59XG5cbmV4cG9ydCBjbGFzcyBHZXRMb2dvRHRvIGltcGxlbWVudHMgSUdldExvZ29EdG8ge1xuICAgIGlkZW50aWZpZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJR2V0TG9nb0R0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuaWRlbnRpZmllciA9IF9kYXRhW1wiaWRlbnRpZmllclwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogR2V0TG9nb0R0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgR2V0TG9nb0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiaWRlbnRpZmllclwiXSA9IHRoaXMuaWRlbnRpZmllcjtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogR2V0TG9nb0R0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEdldExvZ29EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHZXRMb2dvRHRvIHtcbiAgICBpZGVudGlmaWVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBIZWFsdGhCYXNlIGltcGxlbWVudHMgSUhlYWx0aEJhc2Uge1xuICAgIGxpbms6IEhlYWx0aFN0YXR1cztcbiAgICBzdGF0dXM6IEhlYWx0aFN0YXR1cztcbiAgICB2ZXJzaW9uOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUhlYWx0aEJhc2UpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmsgPSBfZGF0YVtcImxpbmtcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IF9kYXRhW1wic3RhdHVzXCJdO1xuICAgICAgICAgICAgdGhpcy52ZXJzaW9uID0gX2RhdGFbXCJ2ZXJzaW9uXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBIZWFsdGhCYXNlIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBIZWFsdGhCYXNlKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJsaW5rXCJdID0gdGhpcy5saW5rO1xuICAgICAgICBkYXRhW1wic3RhdHVzXCJdID0gdGhpcy5zdGF0dXM7XG4gICAgICAgIGRhdGFbXCJ2ZXJzaW9uXCJdID0gdGhpcy52ZXJzaW9uO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBIZWFsdGhCYXNlIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgSGVhbHRoQmFzZSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUhlYWx0aEJhc2Uge1xuICAgIGxpbms6IEhlYWx0aFN0YXR1cztcbiAgICBzdGF0dXM6IEhlYWx0aFN0YXR1cztcbiAgICB2ZXJzaW9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBIZWFsdGhEdG8gaW1wbGVtZW50cyBJSGVhbHRoRHRvIHtcbiAgICBlbnZpcm9ubWVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHNwYXJrQXBpU2VydmljZVZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB2ZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgc2VydmljZXM6IHsgW2tleTogc3RyaW5nXTogSGVhbHRoQmFzZTsgfSB8IHVuZGVmaW5lZDtcbiAgICBydW5uaW5nU3RhdHVzOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG87XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUhlYWx0aER0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBfZGF0YVtcImVudmlyb25tZW50XCJdO1xuICAgICAgICAgICAgdGhpcy5zcGFya0FwaVNlcnZpY2VWZXJzaW9uID0gX2RhdGFbXCJzcGFya0FwaVNlcnZpY2VWZXJzaW9uXCJdO1xuICAgICAgICAgICAgdGhpcy52ZXJzaW9uID0gX2RhdGFbXCJ2ZXJzaW9uXCJdO1xuICAgICAgICAgICAgaWYgKF9kYXRhW1wic2VydmljZXNcIl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzID0ge30gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfZGF0YVtcInNlcnZpY2VzXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YVtcInNlcnZpY2VzXCJdLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLnNlcnZpY2VzKVtrZXldID0gX2RhdGFbXCJzZXJ2aWNlc1wiXVtrZXldID8gSGVhbHRoQmFzZS5mcm9tSlMoX2RhdGFbXCJzZXJ2aWNlc1wiXVtrZXldKSA6IG5ldyBIZWFsdGhCYXNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ydW5uaW5nU3RhdHVzID0gX2RhdGFbXCJydW5uaW5nU3RhdHVzXCJdID8gU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvLmZyb21KUyhfZGF0YVtcInJ1bm5pbmdTdGF0dXNcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEhlYWx0aER0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgSGVhbHRoRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlbnZpcm9ubWVudFwiXSA9IHRoaXMuZW52aXJvbm1lbnQ7XG4gICAgICAgIGRhdGFbXCJzcGFya0FwaVNlcnZpY2VWZXJzaW9uXCJdID0gdGhpcy5zcGFya0FwaVNlcnZpY2VWZXJzaW9uO1xuICAgICAgICBkYXRhW1widmVyc2lvblwiXSA9IHRoaXMudmVyc2lvbjtcbiAgICAgICAgaWYgKHRoaXMuc2VydmljZXMpIHtcbiAgICAgICAgICAgIGRhdGFbXCJzZXJ2aWNlc1wiXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuc2VydmljZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXJ2aWNlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wic2VydmljZXNcIl0pW2tleV0gPSB0aGlzLnNlcnZpY2VzW2tleV0gPyB0aGlzLnNlcnZpY2VzW2tleV0udG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkYXRhW1wicnVubmluZ1N0YXR1c1wiXSA9IHRoaXMucnVubmluZ1N0YXR1cyA/IHRoaXMucnVubmluZ1N0YXR1cy50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBIZWFsdGhEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBIZWFsdGhEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElIZWFsdGhEdG8ge1xuICAgIGVudmlyb25tZW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgc3BhcmtBcGlTZXJ2aWNlVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBzZXJ2aWNlczogeyBba2V5OiBzdHJpbmddOiBIZWFsdGhCYXNlOyB9IHwgdW5kZWZpbmVkO1xuICAgIHJ1bm5pbmdTdGF0dXM6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bztcbn1cblxuZXhwb3J0IGNsYXNzIEhlYWx0aER0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJSGVhbHRoRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEhlYWx0aER0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElIZWFsdGhEdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBIZWFsdGhEdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBIZWFsdGhEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBIZWFsdGhEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogSGVhbHRoRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEhlYWx0aER0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElIZWFsdGhEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogSGVhbHRoRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBlbnVtIEhlYWx0aFN0YXR1cyB7XG4gICAgRG93biA9IDAsXG4gICAgVXAgPSAxLFxufVxuXG5leHBvcnQgZW51bSBIdHRwU3RhdHVzQ29kZSB7XG4gICAgQ29udGludWUgPSAxMDAsXG4gICAgU3dpdGNoaW5nUHJvdG9jb2xzID0gMTAxLFxuICAgIFByb2Nlc3NpbmcgPSAxMDIsXG4gICAgRWFybHlIaW50cyA9IDEwMyxcbiAgICBPSyA9IDIwMCxcbiAgICBDcmVhdGVkID0gMjAxLFxuICAgIEFjY2VwdGVkID0gMjAyLFxuICAgIE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbiA9IDIwMyxcbiAgICBOb0NvbnRlbnQgPSAyMDQsXG4gICAgUmVzZXRDb250ZW50ID0gMjA1LFxuICAgIFBhcnRpYWxDb250ZW50ID0gMjA2LFxuICAgIE11bHRpU3RhdHVzID0gMjA3LFxuICAgIEFscmVhZHlSZXBvcnRlZCA9IDIwOCxcbiAgICBJTVVzZWQgPSAyMjYsXG4gICAgTXVsdGlwbGVDaG9pY2VzID0gMzAwLFxuICAgIEFtYmlndW91cyA9IDMwMSxcbiAgICBNb3ZlZFBlcm1hbmVudGx5ID0gMzAyLFxuICAgIE1vdmVkID0gMzAzLFxuICAgIEZvdW5kID0gMzA0LFxuICAgIFJlZGlyZWN0ID0gMzA1LFxuICAgIFNlZU90aGVyID0gMzA2LFxuICAgIFJlZGlyZWN0TWV0aG9kID0gMzA3LFxuICAgIE5vdE1vZGlmaWVkID0gMzA4LFxuICAgIFVzZVByb3h5ID0gNDAwLFxuICAgIFVudXNlZCA9IDQwMSxcbiAgICBUZW1wb3JhcnlSZWRpcmVjdCA9IDQwMixcbiAgICBSZWRpcmVjdEtlZXBWZXJiID0gNDAzLFxuICAgIFBlcm1hbmVudFJlZGlyZWN0ID0gNDA0LFxuICAgIEJhZFJlcXVlc3QgPSA0MDUsXG4gICAgVW5hdXRob3JpemVkID0gNDA2LFxuICAgIFBheW1lbnRSZXF1aXJlZCA9IDQwNyxcbiAgICBGb3JiaWRkZW4gPSA0MDgsXG4gICAgTm90Rm91bmQgPSA0MDksXG4gICAgTWV0aG9kTm90QWxsb3dlZCA9IDQxMCxcbiAgICBOb3RBY2NlcHRhYmxlID0gNDExLFxuICAgIFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCA9IDQxMixcbiAgICBSZXF1ZXN0VGltZW91dCA9IDQxMyxcbiAgICBDb25mbGljdCA9IDQxNCxcbiAgICBHb25lID0gNDE1LFxuICAgIExlbmd0aFJlcXVpcmVkID0gNDE2LFxuICAgIFByZWNvbmRpdGlvbkZhaWxlZCA9IDQxNyxcbiAgICBSZXF1ZXN0RW50aXR5VG9vTGFyZ2UgPSA0MjEsXG4gICAgUmVxdWVzdFVyaVRvb0xvbmcgPSA0MjIsXG4gICAgVW5zdXBwb3J0ZWRNZWRpYVR5cGUgPSA0MjMsXG4gICAgUmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZSA9IDQyNCxcbiAgICBFeHBlY3RhdGlvbkZhaWxlZCA9IDQyNixcbiAgICBNaXNkaXJlY3RlZFJlcXVlc3QgPSA0MjgsXG4gICAgVW5wcm9jZXNzYWJsZUVudGl0eSA9IDQyOSxcbiAgICBVbnByb2Nlc3NhYmxlQ29udGVudCA9IDQzMSxcbiAgICBMb2NrZWQgPSA0NTEsXG4gICAgRmFpbGVkRGVwZW5kZW5jeSA9IDUwMCxcbiAgICBVcGdyYWRlUmVxdWlyZWQgPSA1MDEsXG4gICAgUHJlY29uZGl0aW9uUmVxdWlyZWQgPSA1MDIsXG4gICAgVG9vTWFueVJlcXVlc3RzID0gNTAzLFxuICAgIFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSA9IDUwNCxcbiAgICBVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucyA9IDUwNSxcbiAgICBJbnRlcm5hbFNlcnZlckVycm9yID0gNTA2LFxuICAgIE5vdEltcGxlbWVudGVkID0gNTA3LFxuICAgIEJhZEdhdGV3YXkgPSA1MDgsXG4gICAgU2VydmljZVVuYXZhaWxhYmxlID0gNTEwLFxuICAgIEdhdGV3YXlUaW1lb3V0ID0gNTExLFxufVxuXG5leHBvcnQgY2xhc3MgSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogeyBba2V5OiBzdHJpbmddOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0bzsgfSB8IHVuZGVmaW5lZDtcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICBpZiAoX2RhdGFbXCJkYXRhXCJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0ge30gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfZGF0YVtcImRhdGFcIl0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhW1wiZGF0YVwiXS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5kYXRhKVtrZXldID0gX2RhdGFbXCJkYXRhXCJdW2tleV0gPyBBdXRoZW50aWNhdGVSZXNwb25zZUR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdW2tleV0pIDogbmV3IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+ZGF0YVtcImRhdGFcIl0pW2tleV0gPSB0aGlzLmRhdGFba2V5XSA/IHRoaXMuZGF0YVtrZXldLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogeyBba2V5OiBzdHJpbmddOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0bzsgfSB8IHVuZGVmaW5lZDtcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgTG9nb0R0byBpbXBsZW1lbnRzIElMb2dvRHRvIHtcbiAgICBpbWFnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElMb2dvRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pbWFnZSA9IF9kYXRhW1wiaW1hZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IExvZ29EdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IExvZ29EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImltYWdlXCJdID0gdGhpcy5pbWFnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogTG9nb0R0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IExvZ29EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMb2dvRHRvIHtcbiAgICBpbWFnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgTG9nb0R0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJTG9nb0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBMb2dvRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUxvZ29EdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBMb2dvRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogTG9nb0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogTG9nb0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ29EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogTG9nb0R0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgTW9iaWxlTG9naW5EVE8gaW1wbGVtZW50cyBJTW9iaWxlTG9naW5EVE8ge1xuICAgIHRlbmFudF9pZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHBob25lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgc21zQ29kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHVuaXF1ZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHBsYXRmb3JtOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgYnJhbmQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBkZXZpY2VOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZGV2aWNlTW9kZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJTW9iaWxlTG9naW5EVE8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnRlbmFudF9pZCA9IF9kYXRhW1widGVuYW50X2lkXCJdO1xuICAgICAgICAgICAgdGhpcy5waG9uZSA9IF9kYXRhW1wicGhvbmVcIl07XG4gICAgICAgICAgICB0aGlzLnNtc0NvZGUgPSBfZGF0YVtcInNtc0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZUlkID0gX2RhdGFbXCJ1bmlxdWVJZFwiXTtcbiAgICAgICAgICAgIHRoaXMudmVyc2lvbiA9IF9kYXRhW1widmVyc2lvblwiXTtcbiAgICAgICAgICAgIHRoaXMucGxhdGZvcm0gPSBfZGF0YVtcInBsYXRmb3JtXCJdO1xuICAgICAgICAgICAgdGhpcy5icmFuZCA9IF9kYXRhW1wiYnJhbmRcIl07XG4gICAgICAgICAgICB0aGlzLmRldmljZU5hbWUgPSBfZGF0YVtcImRldmljZU5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLmRldmljZU1vZGVsID0gX2RhdGFbXCJkZXZpY2VNb2RlbFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogTW9iaWxlTG9naW5EVE8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE1vYmlsZUxvZ2luRFRPKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJ0ZW5hbnRfaWRcIl0gPSB0aGlzLnRlbmFudF9pZDtcbiAgICAgICAgZGF0YVtcInBob25lXCJdID0gdGhpcy5waG9uZTtcbiAgICAgICAgZGF0YVtcInNtc0NvZGVcIl0gPSB0aGlzLnNtc0NvZGU7XG4gICAgICAgIGRhdGFbXCJ1bmlxdWVJZFwiXSA9IHRoaXMudW5pcXVlSWQ7XG4gICAgICAgIGRhdGFbXCJ2ZXJzaW9uXCJdID0gdGhpcy52ZXJzaW9uO1xuICAgICAgICBkYXRhW1wicGxhdGZvcm1cIl0gPSB0aGlzLnBsYXRmb3JtO1xuICAgICAgICBkYXRhW1wiYnJhbmRcIl0gPSB0aGlzLmJyYW5kO1xuICAgICAgICBkYXRhW1wiZGV2aWNlTmFtZVwiXSA9IHRoaXMuZGV2aWNlTmFtZTtcbiAgICAgICAgZGF0YVtcImRldmljZU1vZGVsXCJdID0gdGhpcy5kZXZpY2VNb2RlbDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogTW9iaWxlTG9naW5EVE8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBNb2JpbGVMb2dpbkRUTygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1vYmlsZUxvZ2luRFRPIHtcbiAgICB0ZW5hbnRfaWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwaG9uZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHNtc0NvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1bmlxdWVJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwbGF0Zm9ybTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGJyYW5kOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZGV2aWNlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRldmljZU1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBPYmplY3RIdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSU9iamVjdEh0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBhbnkgfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJT2JqZWN0SHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IE9iamVjdEh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE9iamVjdEh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YTtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogT2JqZWN0SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE9iamVjdEh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElPYmplY3RIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogYW55IHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvIGltcGxlbWVudHMgSU9ubGluZVZhbGlkYXRvckNvbnRleHREdG8ge1xuICAgIGd1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwYXJrSWQ6IG51bWJlcjtcbiAgICBwYXJrTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbXBhbnlJZDogbnVtYmVyO1xuICAgIHN1YkNvbXBhbnlJZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIHZhbGlkYXRpb25UeXBlSWQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJT25saW5lVmFsaWRhdG9yQ29udGV4dER0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZ3VpZCA9IF9kYXRhW1wiZ3VpZFwiXTtcbiAgICAgICAgICAgIHRoaXMucGFya0lkID0gX2RhdGFbXCJwYXJrSWRcIl07XG4gICAgICAgICAgICB0aGlzLnBhcmtOYW1lID0gX2RhdGFbXCJwYXJrTmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMuY29tcGFueUlkID0gX2RhdGFbXCJjb21wYW55SWRcIl07XG4gICAgICAgICAgICB0aGlzLnN1YkNvbXBhbnlJZCA9IF9kYXRhW1wic3ViQ29tcGFueUlkXCJdO1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uVHlwZUlkID0gX2RhdGFbXCJ2YWxpZGF0aW9uVHlwZUlkXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJndWlkXCJdID0gdGhpcy5ndWlkO1xuICAgICAgICBkYXRhW1wicGFya0lkXCJdID0gdGhpcy5wYXJrSWQ7XG4gICAgICAgIGRhdGFbXCJwYXJrTmFtZVwiXSA9IHRoaXMucGFya05hbWU7XG4gICAgICAgIGRhdGFbXCJjb21wYW55SWRcIl0gPSB0aGlzLmNvbXBhbnlJZDtcbiAgICAgICAgZGF0YVtcInN1YkNvbXBhbnlJZFwiXSA9IHRoaXMuc3ViQ29tcGFueUlkO1xuICAgICAgICBkYXRhW1widmFsaWRhdGlvblR5cGVJZFwiXSA9IHRoaXMudmFsaWRhdGlvblR5cGVJZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogT25saW5lVmFsaWRhdG9yQ29udGV4dER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvIHtcbiAgICBndWlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcGFya0lkOiBudW1iZXI7XG4gICAgcGFya05hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjb21wYW55SWQ6IG51bWJlcjtcbiAgICBzdWJDb21wYW55SWQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICB2YWxpZGF0aW9uVHlwZUlkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJT25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXSA/IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgT25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YSA/IHRoaXMuZGF0YS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJT25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBlbnVtIFBhc3N3b3JkQ2hhbmdlVHlwZSB7XG4gICAgUmVnaXN0cmF0aW9uID0gMCxcbiAgICBGb3Jnb3QgPSAxLFxuICAgIEV4cGlyYXRpb24gPSAyLFxufVxuXG5leHBvcnQgZW51bSBQYXNzd29yZEV4cGlyYXRpb25TdGF0ZSB7XG4gICAgTm90RXhwaXJlZCA9IDEsXG4gICAgQWJvdXRUb0V4cGlyZSA9IDIsXG4gICAgRXhwaXJlZCA9IDMsXG59XG5cbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uRHRvIGltcGxlbWVudHMgSVBlcm1pc3Npb25EdG8ge1xuICAgIHR5cGU6IFBlcm1pc3Npb25UeXBlO1xuICAgIGdyb3VwOiBQZXJtaXNzaW9uR3JvdXA7XG4gICAgc2VydmljZTogUGVybWlzc2lvblNlcnZpY2U7XG4gICAgbW9kdWxlOiBBcHBNb2R1bGU7XG4gICAgc3ViTW9kdWxlOiBTdWJNb2R1bGU7XG4gICAgbWFpbjogYm9vbGVhbjtcbiAgICBkaXNwbGF5OiBib29sZWFuO1xuICAgIGNvbW1hbmQ6IFJlbW90ZUNvbW1hbmRUeXBlcztcbiAgICBmYWNpbGl0eUNvbW1hbmQ6IEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzO1xuICAgIGFjdGlvbjogUmVtb3RlQWN0aW9uVHlwZXM7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVBlcm1pc3Npb25EdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBfZGF0YVtcInR5cGVcIl07XG4gICAgICAgICAgICB0aGlzLmdyb3VwID0gX2RhdGFbXCJncm91cFwiXTtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZSA9IF9kYXRhW1wic2VydmljZVwiXTtcbiAgICAgICAgICAgIHRoaXMubW9kdWxlID0gX2RhdGFbXCJtb2R1bGVcIl07XG4gICAgICAgICAgICB0aGlzLnN1Yk1vZHVsZSA9IF9kYXRhW1wic3ViTW9kdWxlXCJdO1xuICAgICAgICAgICAgdGhpcy5tYWluID0gX2RhdGFbXCJtYWluXCJdO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ID0gX2RhdGFbXCJkaXNwbGF5XCJdO1xuICAgICAgICAgICAgdGhpcy5jb21tYW5kID0gX2RhdGFbXCJjb21tYW5kXCJdO1xuICAgICAgICAgICAgdGhpcy5mYWNpbGl0eUNvbW1hbmQgPSBfZGF0YVtcImZhY2lsaXR5Q29tbWFuZFwiXTtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uID0gX2RhdGFbXCJhY3Rpb25cIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFBlcm1pc3Npb25EdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFBlcm1pc3Npb25EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcInR5cGVcIl0gPSB0aGlzLnR5cGU7XG4gICAgICAgIGRhdGFbXCJncm91cFwiXSA9IHRoaXMuZ3JvdXA7XG4gICAgICAgIGRhdGFbXCJzZXJ2aWNlXCJdID0gdGhpcy5zZXJ2aWNlO1xuICAgICAgICBkYXRhW1wibW9kdWxlXCJdID0gdGhpcy5tb2R1bGU7XG4gICAgICAgIGRhdGFbXCJzdWJNb2R1bGVcIl0gPSB0aGlzLnN1Yk1vZHVsZTtcbiAgICAgICAgZGF0YVtcIm1haW5cIl0gPSB0aGlzLm1haW47XG4gICAgICAgIGRhdGFbXCJkaXNwbGF5XCJdID0gdGhpcy5kaXNwbGF5O1xuICAgICAgICBkYXRhW1wiY29tbWFuZFwiXSA9IHRoaXMuY29tbWFuZDtcbiAgICAgICAgZGF0YVtcImZhY2lsaXR5Q29tbWFuZFwiXSA9IHRoaXMuZmFjaWxpdHlDb21tYW5kO1xuICAgICAgICBkYXRhW1wiYWN0aW9uXCJdID0gdGhpcy5hY3Rpb247XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFBlcm1pc3Npb25EdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBQZXJtaXNzaW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUGVybWlzc2lvbkR0byB7XG4gICAgdHlwZTogUGVybWlzc2lvblR5cGU7XG4gICAgZ3JvdXA6IFBlcm1pc3Npb25Hcm91cDtcbiAgICBzZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZTtcbiAgICBtb2R1bGU6IEFwcE1vZHVsZTtcbiAgICBzdWJNb2R1bGU6IFN1Yk1vZHVsZTtcbiAgICBtYWluOiBib29sZWFuO1xuICAgIGRpc3BsYXk6IGJvb2xlYW47XG4gICAgY29tbWFuZDogUmVtb3RlQ29tbWFuZFR5cGVzO1xuICAgIGZhY2lsaXR5Q29tbWFuZDogRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXM7XG4gICAgYWN0aW9uOiBSZW1vdGVBY3Rpb25UeXBlcztcbn1cblxuZXhwb3J0IGVudW0gUGVybWlzc2lvbkdyb3VwIHtcbiAgICBOb25lID0gMCxcbiAgICBHZW5lcmFsUGVybWlzc2lvbnMgPSAxLFxuICAgIEFkdmFuY2VkT3B0aW9ucyA9IDIsXG4gICAgVGlja2V0UGVybWlzc2lvbnMgPSAzLFxuICAgIFBhcmtpbmdMb3RQZXJtaXNzaW9ucyA9IDQsXG59XG5cbmV4cG9ydCBlbnVtIFBlcm1pc3Npb25TZXJ2aWNlIHtcbiAgICBDbG91ZCA9IDAsXG4gICAgU3BhcmtDb3JlID0gMSxcbiAgICBDbG91ZFNwYXJrQ29yZSA9IDIsXG4gICAgU21hcnRQYXJrID0gMyxcbn1cblxuZXhwb3J0IGVudW0gUGVybWlzc2lvblR5cGUge1xuICAgIENjTWFpbiA9IDAsXG4gICAgRGVwcmVjYXRlZEFkbWluTWFpbiA9IDEsXG4gICAgVW5sb2NrRG9vciA9IDIsXG4gICAgVmVuZEdhdGUgPSAzLFxuICAgIFZhbGlkYXRlID0gNCxcbiAgICBTZXRQcmljZSA9IDUsXG4gICAgUmVzdG9yZVRpY2tldCA9IDYsXG4gICAgQ2hhbmdlRGV2aWNlQWNjZXNzTW9kZSA9IDcsXG4gICAgUmVzZXREZXZpY2VBY2Nlc3NNb2RlID0gOCxcbiAgICBSZXN0YXJ0RGV2aWNlID0gOSxcbiAgICBSZXNldEJpbGxEaXNwZW5zZXIgPSAxMCxcbiAgICBDbG9zZUdhdGUgPSAxMSxcbiAgICBFamVjdEphbW1lZFRpY2tldCA9IDEyLFxuICAgIFN3YWxsb3dKYW1tZWRUaWNrZXQgPSAxMyxcbiAgICBEZWxpdmVyQnVuZGxlQmlsbHMgPSAxNCxcbiAgICBMb2NrQ2FzaFJlZ2lzdGVyID0gMTUsXG4gICAgU2V0UmF0ZSA9IDE2LFxuICAgIEluc2VydFZpcnR1YWxUaWNrZXQgPSAxNyxcbiAgICBIb2xkUmVsYXkgPSAxOCxcbiAgICBPcGVuUmVsYXkgPSAxOSxcbiAgICBQcmludFRpY2tldCA9IDIwLFxuICAgIFRyaWdnZXJMUFJNb2R1bGUgPSAyMSxcbiAgICBFbmFibGVSZXByaW50UmVjZWlwdCA9IDIyLFxuICAgIE9wZW5HYXRlQ29udGludW91c2x5ID0gMjMsXG4gICAgQ2xvc2VHYXRlQ29udGludW91c2x5ID0gMjQsXG4gICAgTWFudWFsbHlDbG9zZVRpY2tldCA9IDI1LFxuICAgIFVwZGF0ZUxvY2F0aW9uID0gMjYsXG4gICAgVXBkYXRlT2NjdXBhbmN5ID0gMjcsXG4gICAgQXR0YWNoVGlja2V0ID0gMjgsXG4gICAgVXBkYXRlTGljZW5zZVBsYXRlID0gMjksXG4gICAgTG9zdFRpY2tldCA9IDMwLFxuICAgIEluc2VydFJlbW90ZVZhbGlkYXRpb24gPSAzMSxcbiAgICBVcGRhdGVQYXltZW50ID0gMzIsXG4gICAgVXBkYXRlWm9uZU9jY3VwYW5jeSA9IDMzLFxuICAgIFVwZGF0ZVJlbW90ZVZhbGlkYXRpb24gPSAzNCxcbiAgICBWYWxpZGF0aW9uTWFpbiA9IDM1LFxuICAgIFZhbGlkYXRpb25FVmFsaWRhdGlvblZpZXcgPSAzNixcbiAgICBWYWxpZGF0aW9uU3RpY2tlclZpZXcgPSAzNyxcbiAgICBWYWxpZGF0aW9uQ291cG9uVmlldyA9IDM4LFxuICAgIFJlcG9ydHNNYWluID0gMzksXG4gICAgR3Vlc3RNYWluID0gNDAsXG4gICAgVXBkYXRlRG9jdW1lbnQgPSA0MSxcbiAgICBWaWV3UmV2ZW51ZSA9IDQyLFxuICAgIFByaW50UmVjZWlwdCA9IDQzLFxuICAgIE1vbnRobGllc01haW4gPSA0NCxcbiAgICBQaU1haW4gPSA0NSxcbiAgICBHdWVzdEdyb3VwVmlldyA9IDQ2LFxuICAgIFNpbmdsZUd1ZXN0ID0gNDcsXG4gICAgQ2xvc2VUaWNrZXRGb3JJU0YgPSA0OCxcbiAgICBQYXltZW50Rm9ySVNGID0gNDksXG4gICAgTWFudWFsbHlSdW5aID0gNTAsXG4gICAgVXBkYXRlU2V0dGluZ3MgPSA1MSxcbiAgICBTZXRBY3RpdmVSYXRlID0gNTIsXG4gICAgVXBkYXRlTUNEYXRlVGltZSA9IDUzLFxuICAgIEd1ZXN0SG90ZWxHdWVzdFZpZXcgPSA1NCxcbiAgICBHdWVzdFZpZXcgPSA1NSxcbiAgICBBY2NvdW50TWFuYWdlbWVudE1haW4gPSA1NixcbiAgICBBY2NvdW50TWFuYWdlbWVudEFjY291bnRWaWV3ID0gNTcsXG4gICAgTW9udGhsaWVzVmlldyA9IDU4LFxuICAgIE1vbnRobHlTZXJpZXNDcmVhdGUgPSA1OSxcbiAgICBSdW5NYWNybyA9IDYwLFxuICAgIFRlbmFudFNldHRpbmdzTWFpbiA9IDYxLFxuICAgIE1hbmFnZW1lbnRBZG1pbiA9IDYyLFxuICAgIEJsYWNrTGlzdCA9IDYzLFxuICAgIFN5c3RlbUFkbWluID0gNjQsXG4gICAgT3BlcmF0aW9uYWxBZG1pbiA9IDY1LFxuICAgIEZhY2lsaXRpZXNBbmRTbWFydHBhcmtzID0gNjYsXG4gICAgTG9nbyA9IDY3LFxuICAgIFNtdHBTZXR0aW5ncyA9IDY4LFxuICAgIERlZmF1bHRVc2VyU2V0dGluZ3MgPSA2OSxcbiAgICBBdWRpdCA9IDcwLFxuICAgIEJhY2tvZmZpY2VNYWluID0gNzEsXG4gICAgTG90Q29uZmlndXJhdGlvbk1haW4gPSA3MixcbiAgICBMb3RDb25maWd1cmF0aW9uUmF0ZXMgPSA3MyxcbiAgICBMb3RDb25maWd1cmF0aW9uU2NoZWR1bGVyID0gNzQsXG4gICAgTG90Q29uZmlndXJhdGlvblZhbGlkYXRpb25Qcm9maWxlID0gNzUsXG4gICAgSG90ZWxHdWVzdElPQ3JlYXRlID0gNzYsXG4gICAgRUNvbW1lcmNlQmFja29mZmljZU1haW4gPSA3NyxcbiAgICBWYWxpZGF0aW9uRVZhbGlkYXRpb25DcmVhdGUgPSA3OCxcbiAgICBWYWxpZGF0aW9uRVZhbGlkYXRpb25VcGRhdGUgPSA3OSxcbiAgICBWYWxpZGF0aW9uRVZhbGlkYXRpb25EZWxldGUgPSA4MCxcbiAgICBWYWxpZGF0aW9uU3RpY2tlckNyZWF0ZSA9IDgxLFxuICAgIFZhbGlkYXRpb25TdGlja2VyVXBkYXRlID0gODIsXG4gICAgVmFsaWRhdGlvblN0aWNrZXJEZWxldGUgPSA4MyxcbiAgICBWYWxpZGF0aW9uQ291cG9uQ3JlYXRlID0gODQsXG4gICAgVmFsaWRhdGlvbkNvdXBvblVwZGF0ZSA9IDg1LFxuICAgIFZhbGlkYXRpb25Db3Vwb25EZWxldGUgPSA4NixcbiAgICBHdWVzdEdyb3VwQ3JlYXRlID0gODcsXG4gICAgQWNjb3VudE1hbmFnZW1lbnRBY2NvdW50Q3JlYXRlID0gODgsXG4gICAgQWNjb3VudE1hbmFnZW1lbnRBY2NvdW50VXBkYXRlID0gODksXG4gICAgQWNjb3VudE1hbmFnZW1lbnRBY2NvdW50RGVsZXRlID0gOTAsXG4gICAgTW9udGhsaWVzQ3JlYXRlID0gOTEsXG4gICAgTW9udGhsaWVzVXBkYXRlID0gOTIsXG4gICAgTW9udGhsaWVzRGVsZXRlID0gOTMsXG4gICAgR3Vlc3RDcmVhdGUgPSA5NCxcbiAgICBHdWVzdFVwZGF0ZSA9IDk1LFxuICAgIEd1ZXN0RGVsZXRlID0gOTYsXG4gICAgQ2xvc2VQYXltZW50U2NyZWVuID0gOTcsXG4gICAgRUNvbW1lcmNlQWRtaW4gPSA5OCxcbiAgICBFQ29tbWVyY2VSZWd1bGFyID0gOTksXG4gICAgTG90Q29uZmlndXJhdGlvbkFjY2Vzc1Byb2ZpbGUgPSAxMDAsXG4gICAgQ2FuY2VsUmVjZWlwdCA9IDEwMSxcbiAgICBHdWVzdEFkdmFuY2VkID0gMTAyLFxuICAgIEd1ZXN0R3JvdXBBZHZhbmNlZCA9IDEwMyxcbiAgICBHdWVzdEhvdGVsR3Vlc3RDcmVhdGUgPSAxMDQsXG4gICAgR3Vlc3RIb3RlbEd1ZXN0VXBkYXRlID0gMTA1LFxuICAgIEd1ZXN0SG90ZWxHdWVzdERlbGV0ZSA9IDEwNixcbiAgICBJbXBvcnRlclRvb2xWaWV3ID0gMTA3LFxuICAgIEd1ZXN0RVZvdWNoZXJWaWV3ID0gMTA4LFxuICAgIExvdENvbmZpZ3VyYXRpb25EeW5hbWljUHJpY2luZyA9IDEwOSxcbiAgICBEaWdpdGFsUmVjZXBpdCA9IDExMCxcbn1cblxuZXhwb3J0IGNsYXNzIFJlZnJlc2hUb2tlbkR0byBpbXBsZW1lbnRzIElSZWZyZXNoVG9rZW5EdG8ge1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVmcmVzaFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZXhwaXJhdGlvbjogbW9tZW50Lk1vbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJUmVmcmVzaFRva2VuRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbiA9IF9kYXRhW1wiYWNjZXNzVG9rZW5cIl07XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IF9kYXRhW1wicmVmcmVzaFRva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5leHBpcmF0aW9uID0gX2RhdGFbXCJleHBpcmF0aW9uXCJdID8gbW9tZW50KF9kYXRhW1wiZXhwaXJhdGlvblwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBSZWZyZXNoVG9rZW5EdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlZnJlc2hUb2tlbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiYWNjZXNzVG9rZW5cIl0gPSB0aGlzLmFjY2Vzc1Rva2VuO1xuICAgICAgICBkYXRhW1wicmVmcmVzaFRva2VuXCJdID0gdGhpcy5yZWZyZXNoVG9rZW47XG4gICAgICAgIGRhdGFbXCJleHBpcmF0aW9uXCJdID0gdGhpcy5leHBpcmF0aW9uID8gdGhpcy5leHBpcmF0aW9uLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVmcmVzaFRva2VuRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgUmVmcmVzaFRva2VuRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVmcmVzaFRva2VuRHRvIHtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGV4cGlyYXRpb246IG1vbWVudC5Nb21lbnQ7XG59XG5cbmV4cG9ydCBjbGFzcyBSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBSZWZyZXNoVG9rZW5EdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gUmVmcmVzaFRva2VuRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFJlZnJlc2hUb2tlbkR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBSZW1vdGVBY3Rpb25UeXBlcyB7XG4gICAgVXBkYXRlTGljZW5zZVBsYXRlID0gMSxcbiAgICBVcGRhdGVEb2N1bWVudCA9IDIsXG4gICAgVmlld1JldmVudWUgPSAzLFxuICAgIFByaW50UmVjZWlwdCA9IDQsXG59XG5cbmV4cG9ydCBlbnVtIFJlbW90ZUNvbW1hbmRUeXBlcyB7XG4gICAgVW5sb2NrRG9vciA9IDAsXG4gICAgVmVuZEdhdGUgPSAxLFxuICAgIFZhbGlkYXRlID0gMixcbiAgICBTZXRQcmljZSA9IDMsXG4gICAgUmVzdG9yZVRpY2tldCA9IDQsXG4gICAgQ2hhbmdlRGV2aWNlQWNjZXNzTW9kZSA9IDUsXG4gICAgUmVzZXREZXZpY2VBY2Nlc3NNb2RlID0gNixcbiAgICBSZXN0YXJ0RGV2aWNlID0gNyxcbiAgICBSZXNldEJpbGxEaXNwZW5zZXIgPSA4LFxuICAgIENsb3NlR2F0ZSA9IDksXG4gICAgRWplY3RKYW1tZWRUaWNrZXQgPSAxMCxcbiAgICBTd2FsbG93SmFtbWVkVGlja2V0ID0gMTEsXG4gICAgRGVsaXZlckJ1bmRsZUJpbGxzID0gMTIsXG4gICAgTG9ja0Nhc2hSZWdpc3RlciA9IDEzLFxuICAgIFNldFJhdGUgPSAxNCxcbiAgICBJbnNlcnRWaXJ0dWFsVGlja2V0ID0gMTUsXG4gICAgSG9sZFJlbGF5ID0gMTYsXG4gICAgT3BlblJlbGF5ID0gMTcsXG4gICAgUHJpbnRUaWNrZXQgPSAxOCxcbiAgICBUcmlnZ2VyTFBSTW9kdWxlID0gMTksXG4gICAgRW5hYmxlUmVwcmludFJlY2VpcHQgPSAyMCxcbiAgICBPcGVuR2F0ZUNvbnRpbnVvdXNseSA9IDIxLFxuICAgIENsb3NlR2F0ZUNvbnRpbnVvdXNseSA9IDIyLFxuICAgIFNlbmRQYXJhbWV0ZXJzID0gMjMsXG4gICAgU2VuZEtleU9wdGlvbnMgPSAyNCxcbiAgICBNYW51YWxseUNsb3NlVGlja2V0ID0gMzAsXG4gICAgVXBkYXRlTG9jYXRpb24gPSAzMSxcbiAgICBVcGRhdGVPY2N1cGFuY3kgPSAzMixcbiAgICBBdHRhY2hUaWNrZXQgPSAzMyxcbiAgICBJbnNlcnRSZW1vdGVWYWxpZGF0aW9uID0gMzYsXG4gICAgVXBkYXRlUmVtb3RlVmFsaWRhdGlvbiA9IDM3LFxuICAgIERlbGV0ZVJlbW90ZVZhbGlkYXRpb24gPSAzOSxcbiAgICBSZXN0b3JlUmVtb3RlVmFsaWRhdGlvbiA9IDQwLFxuICAgIFVwZGF0ZVRvdGFsT2NjdXBhbmN5ID0gNDEsXG4gICAgVXBkYXRlWm9uZU9jY3VwYW5jeSA9IDQyLFxuICAgIENsb3NlVGlja2V0Rm9ySVNGID0gNDMsXG4gICAgUGF5bWVudEZvcklTRiA9IDQ0LFxuICAgIERlbGV0ZVRpY2tldCA9IDQ1LFxuICAgIENsb3NlUGF5bWVudFNjcmVlbiA9IDQ2LFxuICAgIFVwZGF0ZUFsbFZhbGlkYXRpb24gPSA0NyxcbiAgICBDYW5jZWxSZWNlaXB0ID0gNDgsXG4gICAgUmVzdGFydFNtYXJ0cGFyayA9IDQ5LFxuICAgIFNlbmREaWdpdGFsUmVjZWlwdFBhcmFtcyA9IDUwLFxuICAgIEdldFRpY2tldEZlZSA9IDEwMDAsXG4gICAgVXBkYXRlVGlja2V0UGF5bWVudCA9IDEwMDEsXG59XG5cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8gaW1wbGVtZW50cyBJU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGlzU21hcnRQYXJrQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzU21hcnRQYXJrQ29yZUNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc1NwYXJrQ29yZUNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc1NwYXJrQ2xvdWRDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBfZGF0YVtcImlkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1NtYXJ0UGFya0Nvbm5lY3RlZCA9IF9kYXRhW1wiaXNTbWFydFBhcmtDb25uZWN0ZWRcIl07XG4gICAgICAgICAgICB0aGlzLmlzU21hcnRQYXJrQ29yZUNvbm5lY3RlZCA9IF9kYXRhW1wiaXNTbWFydFBhcmtDb3JlQ29ubmVjdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1NwYXJrQ29yZUNvbm5lY3RlZCA9IF9kYXRhW1wiaXNTcGFya0NvcmVDb25uZWN0ZWRcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3BhcmtDbG91ZENvbm5lY3RlZCA9IF9kYXRhW1wiaXNTcGFya0Nsb3VkQ29ubmVjdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5zbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBfZGF0YVtcInNtYXJ0UGFya0Rpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcInNtYXJ0UGFya0Rpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zbWFydFBhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID0gX2RhdGFbXCJzbWFydFBhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID8gbW9tZW50KF9kYXRhW1wic21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBfZGF0YVtcInNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcInNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wID0gX2RhdGFbXCJzcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID8gbW9tZW50KF9kYXRhW1wic3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiaWRcIl0gPSB0aGlzLmlkO1xuICAgICAgICBkYXRhW1wiaXNTbWFydFBhcmtDb25uZWN0ZWRcIl0gPSB0aGlzLmlzU21hcnRQYXJrQ29ubmVjdGVkO1xuICAgICAgICBkYXRhW1wiaXNTbWFydFBhcmtDb3JlQ29ubmVjdGVkXCJdID0gdGhpcy5pc1NtYXJ0UGFya0NvcmVDb25uZWN0ZWQ7XG4gICAgICAgIGRhdGFbXCJpc1NwYXJrQ29yZUNvbm5lY3RlZFwiXSA9IHRoaXMuaXNTcGFya0NvcmVDb25uZWN0ZWQ7XG4gICAgICAgIGRhdGFbXCJpc1NwYXJrQ2xvdWRDb25uZWN0ZWRcIl0gPSB0aGlzLmlzU3BhcmtDbG91ZENvbm5lY3RlZDtcbiAgICAgICAgZGF0YVtcInNtYXJ0UGFya0Rpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA9IHRoaXMuc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wID8gdGhpcy5zbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXAudG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA9IHRoaXMuc21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/IHRoaXMuc21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcC50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPSB0aGlzLnNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/IHRoaXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPSB0aGlzLnNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXAgPyB0aGlzLnNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXAudG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8ge1xuICAgIGlkOiBudW1iZXI7XG4gICAgaXNTbWFydFBhcmtDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNTbWFydFBhcmtDb3JlQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzU3BhcmtDb3JlQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzU3BhcmtDbG91ZENvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBzbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgc21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgc3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGVudW0gU2V0dGluZ3NDYXRlZ29yeSB7XG4gICAgRGF0ZUZvcm1hdHMgPSAwLFxuICAgIEFsZXJ0cyA9IDEsXG4gICAgVGlja2V0c1NwZWNpZmljYXRpb25zID0gMixcbiAgICBMb2NhbGl6YXRpb24gPSAzLFxuICAgIEFsZXJ0c1ByZWZlcmVuY2VzID0gNCxcbiAgICBUd29GYWN0b3JBdXRoZW50aWNhdGlvbiA9IDUsXG4gICAgRUNvbW1lcmNlQmFja29mZmljZVVSTCA9IDYsXG4gICAgU1NPID0gNyxcbiAgICBQYXNzd29yZFBvbGljeSA9IDgsXG4gICAgRGlnaXRhbFJlY2VpcHRQcm92aWRlcnNTZXR0aW5ncyA9IDksXG59XG5cbmV4cG9ydCBjbGFzcyBTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0byBpbXBsZW1lbnRzIElTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0byB7XG4gICAgdXNlclN0YXR1czogVXNlclN0YXR1cztcbiAgICBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XG4gICAgc2luZ2xlU2lnbk9uUHJvdmlkZXI6IFNpbmdsZVNpZ25PblByb3ZpZGVyO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMudXNlclN0YXR1cyA9IF9kYXRhW1widXNlclN0YXR1c1wiXTtcbiAgICAgICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gX2RhdGFbXCJpc0F1dGhlbnRpY2F0ZWRcIl07XG4gICAgICAgICAgICB0aGlzLnNpbmdsZVNpZ25PblByb3ZpZGVyID0gX2RhdGFbXCJzaW5nbGVTaWduT25Qcm92aWRlclwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJ1c2VyU3RhdHVzXCJdID0gdGhpcy51c2VyU3RhdHVzO1xuICAgICAgICBkYXRhW1wiaXNBdXRoZW50aWNhdGVkXCJdID0gdGhpcy5pc0F1dGhlbnRpY2F0ZWQ7XG4gICAgICAgIGRhdGFbXCJzaW5nbGVTaWduT25Qcm92aWRlclwiXSA9IHRoaXMuc2luZ2xlU2lnbk9uUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0byB7XG4gICAgdXNlclN0YXR1czogVXNlclN0YXR1cztcbiAgICBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XG4gICAgc2luZ2xlU2lnbk9uUHJvdmlkZXI6IFNpbmdsZVNpZ25PblByb3ZpZGVyO1xufVxuXG5leHBvcnQgZW51bSBTaW5nbGVTaWduT25Qcm92aWRlciB7XG4gICAgTWljcm9zb2Z0ID0gMSxcbiAgICBQaW5nRmVkZXJhdGUgPSAyLFxufVxuXG5leHBvcnQgY2xhc3MgU2luZ2xlU2lnbk9uU2V0dGluZ3MgaW1wbGVtZW50cyBJU2luZ2xlU2lnbk9uU2V0dGluZ3Mge1xuICAgIGlzRW5hYmxlZDogYm9vbGVhbjtcbiAgICBwcm92aWRlcjogU2luZ2xlU2lnbk9uUHJvdmlkZXI7XG4gICAgY29uZmlndXJhdGlvbnM6IGFueSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJU2luZ2xlU2lnbk9uU2V0dGluZ3MpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlzRW5hYmxlZCA9IF9kYXRhW1wiaXNFbmFibGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlciA9IF9kYXRhW1wicHJvdmlkZXJcIl07XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zID0gX2RhdGFbXCJjb25maWd1cmF0aW9uc1wiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogU2luZ2xlU2lnbk9uU2V0dGluZ3Mge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNpbmdsZVNpZ25PblNldHRpbmdzKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpc0VuYWJsZWRcIl0gPSB0aGlzLmlzRW5hYmxlZDtcbiAgICAgICAgZGF0YVtcInByb3ZpZGVyXCJdID0gdGhpcy5wcm92aWRlcjtcbiAgICAgICAgZGF0YVtcImNvbmZpZ3VyYXRpb25zXCJdID0gdGhpcy5jb25maWd1cmF0aW9ucztcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU2luZ2xlU2lnbk9uU2V0dGluZ3Mge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTaW5nbGVTaWduT25TZXR0aW5ncygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNpbmdsZVNpZ25PblNldHRpbmdzIHtcbiAgICBpc0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgcHJvdmlkZXI6IFNpbmdsZVNpZ25PblByb3ZpZGVyO1xuICAgIGNvbmZpZ3VyYXRpb25zOiBhbnkgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBlbnVtIFNtYXJ0UGFya1R5cGUge1xuICAgIFNpbmdsZVBhcmsgPSAwLFxuICAgIE11bHRpUGFyayA9IDEsXG4gICAgU3VwZXJQYXJrID0gMixcbn1cblxuZXhwb3J0IGNsYXNzIFNtYXJ0UGFya1dyYXBwZXJEdG8gaW1wbGVtZW50cyBJU21hcnRQYXJrV3JhcHBlckR0byB7XG4gICAgc21hcnRQYXJrczogeyBba2V5OiBzdHJpbmddOiBTbWFydHBhcmtCYXNpY0R0bzsgfSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJU21hcnRQYXJrV3JhcHBlckR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIGlmIChfZGF0YVtcInNtYXJ0UGFya3NcIl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNtYXJ0UGFya3MgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIF9kYXRhW1wic21hcnRQYXJrc1wiXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGFbXCJzbWFydFBhcmtzXCJdLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLnNtYXJ0UGFya3MpW2tleV0gPSBfZGF0YVtcInNtYXJ0UGFya3NcIl1ba2V5XSA/IFNtYXJ0cGFya0Jhc2ljRHRvLmZyb21KUyhfZGF0YVtcInNtYXJ0UGFya3NcIl1ba2V5XSkgOiBuZXcgU21hcnRwYXJrQmFzaWNEdG8oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFNtYXJ0UGFya1dyYXBwZXJEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNtYXJ0UGFya1dyYXBwZXJEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgaWYgKHRoaXMuc21hcnRQYXJrcykge1xuICAgICAgICAgICAgZGF0YVtcInNtYXJ0UGFya3NcIl0gPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLnNtYXJ0UGFya3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zbWFydFBhcmtzLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PmRhdGFbXCJzbWFydFBhcmtzXCJdKVtrZXldID0gdGhpcy5zbWFydFBhcmtzW2tleV0gPyB0aGlzLnNtYXJ0UGFya3Nba2V5XS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFNtYXJ0UGFya1dyYXBwZXJEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTbWFydFBhcmtXcmFwcGVyRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU21hcnRQYXJrV3JhcHBlckR0byB7XG4gICAgc21hcnRQYXJrczogeyBba2V5OiBzdHJpbmddOiBTbWFydHBhcmtCYXNpY0R0bzsgfSB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogU21hcnRQYXJrV3JhcHBlckR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gU21hcnRQYXJrV3JhcHBlckR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFNtYXJ0UGFya1dyYXBwZXJEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFNtYXJ0cGFya0Jhc2ljRHRvIGltcGxlbWVudHMgSVNtYXJ0cGFya0Jhc2ljRHRvIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZ3VpZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHR5cGU6IFNtYXJ0UGFya1R5cGU7XG4gICAgc2VydmljZXNSdW5uaW5nU3RhdHVzOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG87XG4gICAgZmFjaWxpdGllczogRmFjaWxpdHlCYXNpY0R0b1tdIHwgdW5kZWZpbmVkO1xuICAgIHNwYXJrVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHNtYXJ0UGFya1ZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjdXJyZW5jeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElTbWFydHBhcmtCYXNpY0R0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IF9kYXRhW1wibmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZ3VpZCA9IF9kYXRhW1wiZ3VpZFwiXTtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IF9kYXRhW1widHlwZVwiXTtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZXNSdW5uaW5nU3RhdHVzID0gX2RhdGFbXCJzZXJ2aWNlc1J1bm5pbmdTdGF0dXNcIl0gPyBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8uZnJvbUpTKF9kYXRhW1wic2VydmljZXNSdW5uaW5nU3RhdHVzXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX2RhdGFbXCJmYWNpbGl0aWVzXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmFjaWxpdGllcyA9IFtdIGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIF9kYXRhW1wiZmFjaWxpdGllc1wiXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWNpbGl0aWVzLnB1c2goRmFjaWxpdHlCYXNpY0R0by5mcm9tSlMoaXRlbSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zcGFya1ZlcnNpb24gPSBfZGF0YVtcInNwYXJrVmVyc2lvblwiXTtcbiAgICAgICAgICAgIHRoaXMuc21hcnRQYXJrVmVyc2lvbiA9IF9kYXRhW1wic21hcnRQYXJrVmVyc2lvblwiXTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVuY3kgPSBfZGF0YVtcImN1cnJlbmN5XCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBTbWFydHBhcmtCYXNpY0R0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU21hcnRwYXJrQmFzaWNEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcIm5hbWVcIl0gPSB0aGlzLm5hbWU7XG4gICAgICAgIGRhdGFbXCJndWlkXCJdID0gdGhpcy5ndWlkO1xuICAgICAgICBkYXRhW1widHlwZVwiXSA9IHRoaXMudHlwZTtcbiAgICAgICAgZGF0YVtcInNlcnZpY2VzUnVubmluZ1N0YXR1c1wiXSA9IHRoaXMuc2VydmljZXNSdW5uaW5nU3RhdHVzID8gdGhpcy5zZXJ2aWNlc1J1bm5pbmdTdGF0dXMudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5mYWNpbGl0aWVzKSkge1xuICAgICAgICAgICAgZGF0YVtcImZhY2lsaXRpZXNcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5mYWNpbGl0aWVzKVxuICAgICAgICAgICAgICAgIGRhdGFbXCJmYWNpbGl0aWVzXCJdLnB1c2goaXRlbS50b0pTT04oKSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcInNwYXJrVmVyc2lvblwiXSA9IHRoaXMuc3BhcmtWZXJzaW9uO1xuICAgICAgICBkYXRhW1wic21hcnRQYXJrVmVyc2lvblwiXSA9IHRoaXMuc21hcnRQYXJrVmVyc2lvbjtcbiAgICAgICAgZGF0YVtcImN1cnJlbmN5XCJdID0gdGhpcy5jdXJyZW5jeTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU21hcnRwYXJrQmFzaWNEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTbWFydHBhcmtCYXNpY0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNtYXJ0cGFya0Jhc2ljRHRvIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZ3VpZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHR5cGU6IFNtYXJ0UGFya1R5cGU7XG4gICAgc2VydmljZXNSdW5uaW5nU3RhdHVzOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG87XG4gICAgZmFjaWxpdGllczogRmFjaWxpdHlCYXNpY0R0b1tdIHwgdW5kZWZpbmVkO1xuICAgIHNwYXJrVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHNtYXJ0UGFya1ZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjdXJyZW5jeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgU21zQXV0aERUTyBpbXBsZW1lbnRzIElTbXNBdXRoRFRPIHtcbiAgICB0ZW5hbnRfaWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwaG9uZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGFwcE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJU21zQXV0aERUTykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMudGVuYW50X2lkID0gX2RhdGFbXCJ0ZW5hbnRfaWRcIl07XG4gICAgICAgICAgICB0aGlzLnBob25lID0gX2RhdGFbXCJwaG9uZVwiXTtcbiAgICAgICAgICAgIHRoaXMuYXBwTmFtZSA9IF9kYXRhW1wiYXBwTmFtZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogU21zQXV0aERUTyB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU21zQXV0aERUTygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1widGVuYW50X2lkXCJdID0gdGhpcy50ZW5hbnRfaWQ7XG4gICAgICAgIGRhdGFbXCJwaG9uZVwiXSA9IHRoaXMucGhvbmU7XG4gICAgICAgIGRhdGFbXCJhcHBOYW1lXCJdID0gdGhpcy5hcHBOYW1lO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTbXNBdXRoRFRPIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU21zQXV0aERUTygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNtc0F1dGhEVE8ge1xuICAgIHRlbmFudF9pZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHBob25lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgYXBwTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgU3BhcmtTZXR0aW5nc0R0byBpbXBsZW1lbnRzIElTcGFya1NldHRpbmdzRHRvIHtcbiAgICBjYXRlZ29yeTogU2V0dGluZ3NDYXRlZ29yeTtcbiAgICBzZXR0aW5nc0pzb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJU3BhcmtTZXR0aW5nc0R0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnkgPSBfZGF0YVtcImNhdGVnb3J5XCJdO1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nc0pzb24gPSBfZGF0YVtcInNldHRpbmdzSnNvblwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogU3BhcmtTZXR0aW5nc0R0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU3BhcmtTZXR0aW5nc0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiY2F0ZWdvcnlcIl0gPSB0aGlzLmNhdGVnb3J5O1xuICAgICAgICBkYXRhW1wic2V0dGluZ3NKc29uXCJdID0gdGhpcy5zZXR0aW5nc0pzb247XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFNwYXJrU2V0dGluZ3NEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTcGFya1NldHRpbmdzRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3BhcmtTZXR0aW5nc0R0byB7XG4gICAgY2F0ZWdvcnk6IFNldHRpbmdzQ2F0ZWdvcnk7XG4gICAgc2V0dGluZ3NKc29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJU3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmc7IH0gfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJU3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICBpZiAoX2RhdGFbXCJkYXRhXCJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0ge30gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfZGF0YVtcImRhdGFcIl0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhW1wiZGF0YVwiXS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5kYXRhKVtrZXldID0gX2RhdGFbXCJkYXRhXCJdW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PmRhdGFbXCJkYXRhXCJdKVtrZXldID0gKDxhbnk+dGhpcy5kYXRhKVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nOyB9IHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBlbnVtIFN1Yk1vZHVsZSB7XG4gICAgRVZhbGlkYXRpb24gPSAwLFxuICAgIFN0aWNrZXJzID0gMSxcbiAgICBDb3Vwb25zID0gMixcbiAgICBHdWVzdHMgPSAzLFxuICAgIEhvdGVsR3Vlc3RzID0gNCxcbiAgICBNb250aGxpZXMgPSA1LFxuICAgIEFjY291bnRzID0gNixcbiAgICBVc2VyTWFuYWdlbWVudCA9IDcsXG4gICAgRmFjaWxpdGllc0FuZFNtYXJ0cGFya3MgPSA4LFxuICAgIExvZ28gPSA5LFxuICAgIFNtdHBTZXR0aW5ncyA9IDEwLFxuICAgIERlZmF1bHRVc2VyU2V0dGluZ3MgPSAxMSxcbiAgICBBdWRpdCA9IDEyLFxuICAgIFJhdGVzID0gMTMsXG4gICAgU2NoZWR1bGVyID0gMTQsXG4gICAgVmFsaWRhdGlvblByb2ZpbGVzID0gMTUsXG4gICAgSG90ZWxHdWVzdHNJTyA9IDE2LFxuICAgIEFjY2Vzc1Byb2ZpbGVzID0gMTcsXG4gICAgSW1wb3J0ZXJUb29sID0gMTgsXG4gICAgRVZvdWNoZXIgPSAxOSxcbiAgICBEeW5hbWljUHJpY2luZyA9IDIwLFxuICAgIERpZ2l0YWxSZWNlaXB0ID0gMjEsXG59XG5cbmV4cG9ydCBjbGFzcyBUZW5hbnREZXRhaWxzRHRvIGltcGxlbWVudHMgSVRlbmFudERldGFpbHNEdG8ge1xuICAgIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHByb3BzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVGVuYW50RGV0YWlsc0R0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IF9kYXRhW1wibmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU5hbWUgPSBfZGF0YVtcImRpc3BsYXlOYW1lXCJdO1xuICAgICAgICAgICAgaWYgKF9kYXRhW1wicHJvcHNcIl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzID0ge30gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfZGF0YVtcInByb3BzXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YVtcInByb3BzXCJdLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLnByb3BzKVtrZXldID0gX2RhdGFbXCJwcm9wc1wiXVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGVuYW50RGV0YWlsc0R0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGVuYW50RGV0YWlsc0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wibmFtZVwiXSA9IHRoaXMubmFtZTtcbiAgICAgICAgZGF0YVtcImRpc3BsYXlOYW1lXCJdID0gdGhpcy5kaXNwbGF5TmFtZTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMpIHtcbiAgICAgICAgICAgIGRhdGFbXCJwcm9wc1wiXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMucHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wicHJvcHNcIl0pW2tleV0gPSAoPGFueT50aGlzLnByb3BzKVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRlbmFudERldGFpbHNEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUZW5hbnREZXRhaWxzRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGVuYW50RGV0YWlsc0R0byB7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9IHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBUZW5hbnREZXRhaWxzRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBUZW5hbnREZXRhaWxzRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVGVuYW50RGV0YWlsc0R0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVGVuYW50RHRvIGltcGxlbWVudHMgSVRlbmFudER0byB7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9IHwgdW5kZWZpbmVkO1xuICAgIGlkOiBudW1iZXI7XG4gICAgdHJlZUlkOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVRlbmFudER0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IF9kYXRhW1wibmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU5hbWUgPSBfZGF0YVtcImRpc3BsYXlOYW1lXCJdO1xuICAgICAgICAgICAgaWYgKF9kYXRhW1wicHJvcHNcIl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzID0ge30gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfZGF0YVtcInByb3BzXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YVtcInByb3BzXCJdLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLnByb3BzKVtrZXldID0gX2RhdGFbXCJwcm9wc1wiXVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaWQgPSBfZGF0YVtcImlkXCJdO1xuICAgICAgICAgICAgdGhpcy50cmVlSWQgPSBfZGF0YVtcInRyZWVJZFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGVuYW50RHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUZW5hbnREdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcIm5hbWVcIl0gPSB0aGlzLm5hbWU7XG4gICAgICAgIGRhdGFbXCJkaXNwbGF5TmFtZVwiXSA9IHRoaXMuZGlzcGxheU5hbWU7XG4gICAgICAgIGlmICh0aGlzLnByb3BzKSB7XG4gICAgICAgICAgICBkYXRhW1wicHJvcHNcIl0gPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLnByb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+ZGF0YVtcInByb3BzXCJdKVtrZXldID0gKDxhbnk+dGhpcy5wcm9wcylba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkYXRhW1wiaWRcIl0gPSB0aGlzLmlkO1xuICAgICAgICBkYXRhW1widHJlZUlkXCJdID0gdGhpcy50cmVlSWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRlbmFudER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRlbmFudER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRlbmFudER0byB7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9IHwgdW5kZWZpbmVkO1xuICAgIGlkOiBudW1iZXI7XG4gICAgdHJlZUlkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBUZmFTZXR1cER0byBpbXBsZW1lbnRzIElUZmFTZXR1cER0byB7XG4gICAgZW1haWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1RmYUVuYWJsZWQ6IGJvb2xlYW47XG4gICAgYXV0aGVudGljYXRvcktleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHFyQ29kZUltYWdlVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVnaXN0ZXJlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVGZhU2V0dXBEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVtYWlsID0gX2RhdGFbXCJlbWFpbFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNUZmFFbmFibGVkID0gX2RhdGFbXCJpc1RmYUVuYWJsZWRcIl07XG4gICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0b3JLZXkgPSBfZGF0YVtcImF1dGhlbnRpY2F0b3JLZXlcIl07XG4gICAgICAgICAgICB0aGlzLnFyQ29kZUltYWdlVXJsID0gX2RhdGFbXCJxckNvZGVJbWFnZVVybFwiXTtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZCA9IF9kYXRhW1wicmVnaXN0ZXJlZFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGZhU2V0dXBEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRmYVNldHVwRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlbWFpbFwiXSA9IHRoaXMuZW1haWw7XG4gICAgICAgIGRhdGFbXCJpc1RmYUVuYWJsZWRcIl0gPSB0aGlzLmlzVGZhRW5hYmxlZDtcbiAgICAgICAgZGF0YVtcImF1dGhlbnRpY2F0b3JLZXlcIl0gPSB0aGlzLmF1dGhlbnRpY2F0b3JLZXk7XG4gICAgICAgIGRhdGFbXCJxckNvZGVJbWFnZVVybFwiXSA9IHRoaXMucXJDb2RlSW1hZ2VVcmw7XG4gICAgICAgIGRhdGFbXCJyZWdpc3RlcmVkXCJdID0gdGhpcy5yZWdpc3RlcmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBUZmFTZXR1cER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRmYVNldHVwRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGZhU2V0dXBEdG8ge1xuICAgIGVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNUZmFFbmFibGVkOiBib29sZWFuO1xuICAgIGF1dGhlbnRpY2F0b3JLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBxckNvZGVJbWFnZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZ2lzdGVyZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBUaGlyZFBhcnR5VmVuZG9yRHRvIGltcGxlbWVudHMgSVRoaXJkUGFydHlWZW5kb3JEdG8ge1xuICAgIGFjY291bnRJZDogbnVtYmVyO1xuICAgIHBlcm1pc3Npb25UeXBlczogUGVybWlzc2lvblR5cGVbXSB8IHVuZGVmaW5lZDtcbiAgICBwYXJrQ2xvdWRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElUaGlyZFBhcnR5VmVuZG9yRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5hY2NvdW50SWQgPSBfZGF0YVtcImFjY291bnRJZFwiXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wicGVybWlzc2lvblR5cGVzXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGVzID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJwZXJtaXNzaW9uVHlwZXNcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGVzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcmtDbG91ZElkID0gX2RhdGFbXCJwYXJrQ2xvdWRJZFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGhpcmRQYXJ0eVZlbmRvckR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGhpcmRQYXJ0eVZlbmRvckR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiYWNjb3VudElkXCJdID0gdGhpcy5hY2NvdW50SWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMucGVybWlzc2lvblR5cGVzKSkge1xuICAgICAgICAgICAgZGF0YVtcInBlcm1pc3Npb25UeXBlc1wiXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLnBlcm1pc3Npb25UeXBlcylcbiAgICAgICAgICAgICAgICBkYXRhW1wicGVybWlzc2lvblR5cGVzXCJdLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcInBhcmtDbG91ZElkXCJdID0gdGhpcy5wYXJrQ2xvdWRJZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVGhpcmRQYXJ0eVZlbmRvckR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRoaXJkUGFydHlWZW5kb3JEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUaGlyZFBhcnR5VmVuZG9yRHRvIHtcbiAgICBhY2NvdW50SWQ6IG51bWJlcjtcbiAgICBwZXJtaXNzaW9uVHlwZXM6IFBlcm1pc3Npb25UeXBlW10gfCB1bmRlZmluZWQ7XG4gICAgcGFya0Nsb3VkSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVGhpcmRQYXJ0eVZlbmRvckR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gVGhpcmRQYXJ0eVZlbmRvckR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFRoaXJkUGFydHlWZW5kb3JEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvIGltcGxlbWVudHMgSVRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvIHtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvIHtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvIGltcGxlbWVudHMgSVR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvIHtcbiAgICBpc0VuYWJsZWRGb3JVc2VyOiBib29sZWFuO1xuICAgIGlzUmVxdWllcmQyRkFTZXR1cDogYm9vbGVhbjtcbiAgICBhY3RpdmF0ZVJlc3BvbnNlRHRvOiBBY3RpdmF0ZVJlc3BvbnNlRHRvO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuaXNFbmFibGVkRm9yVXNlciA9IF9kYXRhW1wiaXNFbmFibGVkRm9yVXNlclwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNSZXF1aWVyZDJGQVNldHVwID0gX2RhdGFbXCJpc1JlcXVpZXJkMkZBU2V0dXBcIl07XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlUmVzcG9uc2VEdG8gPSBfZGF0YVtcImFjdGl2YXRlUmVzcG9uc2VEdG9cIl0gPyBBY3RpdmF0ZVJlc3BvbnNlRHRvLmZyb21KUyhfZGF0YVtcImFjdGl2YXRlUmVzcG9uc2VEdG9cIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiaXNFbmFibGVkRm9yVXNlclwiXSA9IHRoaXMuaXNFbmFibGVkRm9yVXNlcjtcbiAgICAgICAgZGF0YVtcImlzUmVxdWllcmQyRkFTZXR1cFwiXSA9IHRoaXMuaXNSZXF1aWVyZDJGQVNldHVwO1xuICAgICAgICBkYXRhW1wiYWN0aXZhdGVSZXNwb25zZUR0b1wiXSA9IHRoaXMuYWN0aXZhdGVSZXNwb25zZUR0byA/IHRoaXMuYWN0aXZhdGVSZXNwb25zZUR0by50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8ge1xuICAgIGlzRW5hYmxlZEZvclVzZXI6IGJvb2xlYW47XG4gICAgaXNSZXF1aWVyZDJGQVNldHVwOiBib29sZWFuO1xuICAgIGFjdGl2YXRlUmVzcG9uc2VEdG86IEFjdGl2YXRlUmVzcG9uc2VEdG87XG59XG5cbmV4cG9ydCBlbnVtIFVzZXJTdGF0dXMge1xuICAgIEFjdGl2ZSA9IDAsXG4gICAgQmxvY2tlZCA9IDEsXG4gICAgSW52aXRlZCA9IDIsXG4gICAgSWdub3JlID0gMyxcbiAgICBQYXNzd29yZEV4cGlyZWQgPSA0LFxuICAgIFJldm9rZWQgPSA1LFxuICAgIFRlbXBvcmFyeUJsb2NrZWQgPSA2LFxuICAgIEF3YWl0aW5nQWNjZXNzID0gNyxcbiAgICBVc2VyRXhwaXJlZCA9IDgsXG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvIGltcGxlbWVudHMgSVZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG8ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBsYXN0TmFtZTogc3RyaW5nO1xuICAgIHVOYW1lOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBVc2VyU3RhdHVzO1xuICAgIGlkOiBudW1iZXI7XG4gICAgcG1sOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBfZGF0YVtcIm5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLmxhc3ROYW1lID0gX2RhdGFbXCJsYXN0TmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMudU5hbWUgPSBfZGF0YVtcInVOYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBfZGF0YVtcInN0YXR1c1wiXTtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBfZGF0YVtcImlkXCJdO1xuICAgICAgICAgICAgdGhpcy5wbWwgPSBfZGF0YVtcInBtbFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wibmFtZVwiXSA9IHRoaXMubmFtZTtcbiAgICAgICAgZGF0YVtcImxhc3ROYW1lXCJdID0gdGhpcy5sYXN0TmFtZTtcbiAgICAgICAgZGF0YVtcInVOYW1lXCJdID0gdGhpcy51TmFtZTtcbiAgICAgICAgZGF0YVtcInN0YXR1c1wiXSA9IHRoaXMuc3RhdHVzO1xuICAgICAgICBkYXRhW1wiaWRcIl0gPSB0aGlzLmlkO1xuICAgICAgICBkYXRhW1wicG1sXCJdID0gdGhpcy5wbWw7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0byB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGxhc3ROYW1lOiBzdHJpbmc7XG4gICAgdU5hbWU6IHN0cmluZztcbiAgICBzdGF0dXM6IFVzZXJTdGF0dXM7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBwbWw6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byBpbXBsZW1lbnRzIElWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8ge1xuICAgIGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VyTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNvZGUgPSBfZGF0YVtcImNvZGVcIl07XG4gICAgICAgICAgICB0aGlzLnVzZXJOYW1lID0gX2RhdGFbXCJ1c2VyTmFtZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImNvZGVcIl0gPSB0aGlzLmNvZGU7XG4gICAgICAgIGRhdGFbXCJ1c2VyTmFtZVwiXSA9IHRoaXMudXNlck5hbWU7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byB7XG4gICAgY29kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHVzZXJOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0byBpbXBsZW1lbnRzIElWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0byB7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzVG9rZW4gPSBfZGF0YVtcImFjY2Vzc1Rva2VuXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wiYWNjZXNzVG9rZW5cIl0gPSB0aGlzLmFjY2Vzc1Rva2VuO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8ge1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVJlc3BvbnNlIHtcbiAgICBkYXRhOiBCbG9iO1xuICAgIHN0YXR1czogbnVtYmVyO1xuICAgIGZpbGVOYW1lPzogc3RyaW5nO1xuICAgIGhlYWRlcnM/OiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEFwaUV4Y2VwdGlvbiBleHRlbmRzIEVycm9yIHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBudW1iZXI7XG4gICAgcmVzcG9uc2U6IHN0cmluZztcbiAgICBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICByZXN1bHQ6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzOiBudW1iZXIsIHJlc3BvbnNlOiBzdHJpbmcsIGhlYWRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCByZXN1bHQ6IGFueSkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpc0FwaUV4Y2VwdGlvbiA9IHRydWU7XG5cbiAgICBzdGF0aWMgaXNBcGlFeGNlcHRpb24ob2JqOiBhbnkpOiBvYmogaXMgQXBpRXhjZXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIG9iai5pc0FwaUV4Y2VwdGlvbiA9PT0gdHJ1ZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXhjZXB0aW9uKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzOiBudW1iZXIsIHJlc3BvbnNlOiBzdHJpbmcsIGhlYWRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCByZXN1bHQ/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmIChyZXN1bHQgIT09IG51bGwgJiYgcmVzdWx0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3VsdCk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhuZXcgQXBpRXhjZXB0aW9uKG1lc3NhZ2UsIHN0YXR1cywgcmVzcG9uc2UsIGhlYWRlcnMsIG51bGwpKTtcbn1cblxuZnVuY3Rpb24gYmxvYlRvVGV4dChibG9iOiBhbnkpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChvYnNlcnZlcjogYW55KSA9PiB7XG4gICAgICAgIGlmICghYmxvYikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChcIlwiKTtcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgoZXZlbnQudGFyZ2V0IGFzIGFueSkucmVzdWx0KTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpO1xuICAgICAgICB9XG4gICAgfSk7XG59Il19
|