bpm-core 0.0.33 → 0.0.34
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/lib/components/app-component-sections/previous-requests/previous-requests.component.mjs +67 -0
- package/esm2022/lib/components/app-component-sections/service-header/service-header.component.mjs +8 -4
- package/esm2022/lib/i18n/ar.mjs +3 -2
- package/esm2022/lib/i18n/en.mjs +3 -2
- package/esm2022/lib/pipes/status-style.pipe.mjs +57 -0
- package/esm2022/lib/services/core.service.ts.mjs +20 -7
- package/fesm2022/bpm-core.mjs +176 -48
- package/fesm2022/bpm-core.mjs.map +1 -1
- package/lib/components/app-component-sections/previous-requests/previous-requests.component.d.ts +22 -0
- package/lib/components/app-component-sections/service-header/service-header.component.d.ts +1 -0
- package/lib/i18n/ar.d.ts +1 -0
- package/lib/i18n/en.d.ts +1 -0
- package/lib/pipes/status-style.pipe.d.ts +7 -0
- package/lib/services/core.service.ts.d.ts +1 -0
- package/package.json +2 -2
|
@@ -454,14 +454,27 @@ export class CoreService {
|
|
|
454
454
|
let options = this.getRequestOptions();
|
|
455
455
|
return this.generalCallApi(body, constants.STATE_MACHINE_ACTION_SUCCESS_RESPONSE, options);
|
|
456
456
|
}
|
|
457
|
+
myRequests(details) {
|
|
458
|
+
let body = {
|
|
459
|
+
method: constants.HTTP_METHOD_GET,
|
|
460
|
+
destination: constants.TARGET_SERVER_WM,
|
|
461
|
+
serviceName: "form" //, //this.getServiceName(),
|
|
462
|
+
,
|
|
463
|
+
formName: "history",
|
|
464
|
+
queryParameters: {
|
|
465
|
+
formName: this.config.formName,
|
|
466
|
+
year: details.year,
|
|
467
|
+
month: details.month,
|
|
468
|
+
email: this.loggedInUserId()
|
|
469
|
+
}
|
|
470
|
+
};
|
|
471
|
+
let options = this.getRequestOptions();
|
|
472
|
+
return this.generalCallApi(body, constants.STATE_MACHINE_ACTION_SUCCESS_RESPONSE, options);
|
|
473
|
+
}
|
|
457
474
|
generalCallApi(body, type, options) {
|
|
458
475
|
let apiUrl = this.config.proxyServiceBaseUrl + this.language + this.config.proxyFullAddress + this.config.proxyServiceExecute;
|
|
459
476
|
return this.http.post(apiUrl, encodeURIComponent(JSON.stringify(body)), options).pipe(map((responseObject) => {
|
|
460
477
|
return responseObject;
|
|
461
|
-
/*switch (type) {
|
|
462
|
-
case constants.STATE_MACHINE_ACTION_LOAD_HISTORY:
|
|
463
|
-
return responseObject
|
|
464
|
-
}*/
|
|
465
478
|
}), catchError((httpError) => {
|
|
466
479
|
return throwError(httpError);
|
|
467
480
|
}));
|
|
@@ -505,15 +518,15 @@ export class CoreService {
|
|
|
505
518
|
return window.wmConfig.outlook;
|
|
506
519
|
}
|
|
507
520
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CoreService, deps: [{ token: i1.HttpClient }, { token: MY_LIB_CONFIG_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
508
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CoreService, providedIn: "
|
|
521
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CoreService, providedIn: "root" });
|
|
509
522
|
}
|
|
510
523
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CoreService, decorators: [{
|
|
511
524
|
type: Injectable,
|
|
512
525
|
args: [{
|
|
513
|
-
providedIn: "
|
|
526
|
+
providedIn: "root"
|
|
514
527
|
}]
|
|
515
528
|
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
|
|
516
529
|
type: Inject,
|
|
517
530
|
args: [MY_LIB_CONFIG_TOKEN]
|
|
518
531
|
}] }] });
|
|
519
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5zZXJ2aWNlLnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9jb3JlLnNlcnZpY2UudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFhLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDL0ksT0FBTyxLQUFLLFNBQVMsTUFBTSxjQUFjLENBQUE7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDakUsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25DLE9BQU8sYUFBYSxNQUFNLG9CQUFvQixDQUFDOzs7QUFLL0MsTUFBTSxPQUFPLFdBQVc7SUFnQkY7SUFDNkI7SUFoQmpELE1BQU0sR0FBVyxFQUFFLENBQUE7SUFDWCxTQUFTLENBQVM7SUFDbEIsWUFBWSxDQUFTO0lBQ1osYUFBYSxDQUFTO0lBQ2hDLFFBQVEsQ0FBUztJQUNQLFNBQVMsQ0FBSztJQUN4QixnQkFBZ0IsQ0FBSztJQUM1QixZQUFZLENBQVE7SUFDWixlQUFlLENBQVU7SUFDekIsY0FBYyxDQUFVO0lBQ3hCLGdCQUFnQixDQUFNO0lBQzlCLFFBQVEsQ0FBUTtJQUNoQixVQUFVLEdBQUcsRUFBRSxDQUFBO0lBQ2YsU0FBUyxDQUFLO0lBRWQsWUFBb0IsSUFBZ0IsRUFDYSxNQUFtQjtRQURoRCxTQUFJLEdBQUosSUFB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QUFVLEVBQUUsS0FBSztpQkFDbEI7OzBCQWtCYyxNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cENsaWVudCwgSHR0cEhlYWRlcnN9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHR5cGUge015TGliQ29uZmlnfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9zaGFyZWQuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7Q29tbWVudHNEcm9wLCBGb3JtLCBIZWFkZXIsIEluYm94SXRlbSwgTWVzc2FnZXMsIE1ZX0xJQl9DT05GSUdfVE9LRU4sIFByb2ZpbGVJbmZvRHJvcCwgU2VjdGlvbiwgU2VjdGlvbkhlYWRlcn0gZnJvbSBcIi4uLy4uL3B1YmxpYy1hcGlcIjtcclxuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4uL2NvbnN0YW50cydcclxuaW1wb3J0IHtjYXRjaEVycm9yLCBmcm9tLCBvZiwgc3dpdGNoTWFwLCB0aHJvd0Vycm9yfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge21hcH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCBzYXZlRm9ybUhvb2tzIGZyb20gJy4uL2hvb2tzL3NhdmUtZm9ybSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogXCJhbnlcIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZVNlcnZpY2Uge1xyXG4gIGFwaVVybDogc3RyaW5nID0gJydcclxuICBwcml2YXRlIGF1dGhUb2tlbjogc3RyaW5nO1xyXG4gIHByaXZhdGUgcmVmcmVzaFRva2VuOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9qZWN0Q29uZmlnOiBzdHJpbmc7XHJcbiAgcHVibGljIHVzZXJEYXRhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbFVzZXI6IHt9O1xyXG4gIHB1YmxpYyBsb2dnZWRJblVzZXJEYXRhOiB7fTtcclxuICBjdXJyZW50QWN0b3I6IHN0cmluZ1xyXG4gIHByaXZhdGUgYXV0aG9yaXplZEVtYWlsITogc3RyaW5nO1xyXG4gIHByaXZhdGUgcmVxdWVzdGVyRW1haWwhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBjdXJyZW50U3VibWl0dGVyOiBhbnk7XHJcbiAgbGFuZ3VhZ2U6IHN0cmluZ1xyXG4gIGFjdGl2aXRpZXMgPSBbXVxyXG4gIGFwcHJvdmFsczogYW55XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICAgICAgICBASW5qZWN0KE1ZX0xJQl9DT05GSUdfVE9LRU4pIHByaXZhdGUgY29uZmlnOiBNeUxpYkNvbmZpZykge1xyXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSAod2luZG93IGFzIGFueSk/LndtQ29uZmlnPy5sYW5ndWFnZSA/ICh3aW5kb3cgYXMgYW55KS53bUNvbmZpZy5sYW5ndWFnZSA6ICdlbic7XHJcbiAgICB0aGlzLmFwaVVybCA9IHRoaXMuY29uZmlnLnByb3h5U2VydmljZUJhc2VVcmwgKyBsYW5ndWFnZSArIHRoaXMuY29uZmlnLnByb3h5RnVsbEFkZHJlc3MgKyB0aGlzLmNvbmZpZy5wcm94eVNlcnZpY2VFeGVjdXRlO1xyXG4gICAgY29uc29sZS5sb2coJ0NvbmZpZzogJywgdGhpcy5jb25maWcpO1xyXG4gICAgdGhpcy5sb2NhbFVzZXIgPSB7XHJcbiAgICAgIFwiZm9ybVByZWZpeFwiOiBcIkNFUFwiLFxyXG4gICAgICBcImZvcm1JZFwiOiBcIkNFUDU1OTU0MzJcIixcclxuICAgICAgXCJpbmJveFVyaVwiOiBcIlxcL2dyb3VwXFwvaHViXFwvaW5ib3hcIixcclxuICAgICAgXCJiYXNlVXJsXCI6IFwiXFwvZ3JvdXBcXC9pLWdhdGVcXC93bS1icG1cXC9mb3Jtc1xcLy1cXC9wcm94eVwiLFxyXG4gICAgICBcInNob3dQcmludFwiOiB0cnVlLFxyXG4gICAgICBcImxhbmd1YWdlXCI6IFwiZW5cIixcclxuICAgICAgXCJpc01vYmlsZVwiOiB0cnVlLFxyXG4gICAgICBcIm91dGxvb2tcIjogZmFsc2UsXHJcbiAgICAgIFwibG9nZ2VkSW5Vc2VyRW1haWxcIjogXCJpYnJhaGltbWFhLmNAc3RjLmNvbS5zYVwiXHJcbiAgICB9XHJcbiAgICB0aGlzLnByb2plY3RDb25maWcgPSAodGhpcy5jb25maWcucHJvZHVjdGlvbikgPyAod2luZG93IGFzIGFueSlbJ3dtQ29uZmlnJ10gOiBidG9hKEpTT04uc3RyaW5naWZ5KHRoaXMubG9jYWxVc2VyKSk7XHJcbiAgICB0aGlzLnVzZXJEYXRhID0gSlNPTi5wYXJzZShhdG9iKHRoaXMucHJvamVjdENvbmZpZykpO1xyXG4gICAgdGhpcy5sYW5ndWFnZSA9ICh3aW5kb3cgYXMgYW55KT8ud21Db25maWc/Lmxhbmd1YWdlID8gKHdpbmRvdyBhcyBhbnkpLndtQ29uZmlnLmxhbmd1YWdlIDogXCJlblwiO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldExvZ2dlZEluVXNlckRhdGEoKSB7XHJcbiAgICBsZXQgbG9nZ2VkSW5FbWFpbCA9IHRoaXMubG9nZ2VkSW5Vc2VySWQoKVxyXG4gICAgdGhpcy5lbXBsb3llZVByb2ZpbGUobG9nZ2VkSW5FbWFpbCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubG9nZ2VkSW5Vc2VyRGF0YSA9IHJlc3BvbnNlPy5bXCJVc2Vyc1wiXT8uWzBdXHJcbiAgICAgIGNvbnNvbGUubG9nKCdnZXRMb2dnZWRJblVzZXJEYXRhJywgcmVzcG9uc2UpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvYWRGb3JtKCkge1xyXG4gICAgY29uc3QgYXV0aFVybCA9IHRoaXMuYnVpbGRBdXRoVXJsKCk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhdXRoVXJsLCB7b2JzZXJ2ZTogJ3Jlc3BvbnNlJ30pLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB0b2tlbkluZm9ybWF0aW9uID0gcmVzLmJvZHk7XHJcbiAgICAgICAgdGhpcy5hdXRoVG9rZW4gPSB0b2tlbkluZm9ybWF0aW9uLnRva2VuO1xyXG4gICAgICAgIHRoaXMuZ2V0TG9nZ2VkSW5Vc2VyRGF0YSgpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaFRva2VuID0gdG9rZW5JbmZvcm1hdGlvbi5yZWZyZXNoVG9rZW47XHJcbiAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuYnVpbGRCb2R5KCk7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0UmVxdWVzdE9wdGlvbnMoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsUG9zdChib2R5LCBvcHRpb25zKTtcclxuICAgICAgfSksXHJcbiAgICAgIHN3aXRjaE1hcChwb3N0T2JzZXJ2YWJsZSA9PiBwb3N0T2JzZXJ2YWJsZSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGh0dHBFcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRocm93RXJyb3IoaHR0cEVycm9yKSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEF1dGhVcmwoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmNvbmZpZy5wcm94eVNlcnZpY2VCYXNlVXJsO1xyXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSAod2luZG93IGFzIGFueSk/LndtQ29uZmlnPy5sYW5ndWFnZSA/ICh3aW5kb3cgYXMgYW55KS53bUNvbmZpZy5sYW5ndWFnZSA6ICdlbic7XHJcbiAgICBjb25zdCBmdWxsQWRkcmVzcyA9IHRoaXMuY29uZmlnLnByb3h5RnVsbEFkZHJlc3M7XHJcbiAgICBjb25zdCBhdXRoUGFydCA9IHRoaXMuY29uZmlnLnByb3h5U2VydmljZUF1dGhvcml6YXRpb247XHJcbiAgICByZXR1cm4gYCR7YmFzZVVybH0ke2xhbmd1YWdlfSR7ZnVsbEFkZHJlc3N9JHthdXRoUGFydH0/dHM9JHsobmV3IERhdGUoKSkudmFsdWVPZigpfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkQm9keSgpOiBvYmplY3Qge1xyXG4gICAgY29uc3QgYmFzZUJvZHkgPSB7XHJcbiAgICAgIG1ldGhvZDogY29uc3RhbnRzLkhUVFBfTUVUSE9EX0dFVCxcclxuICAgICAgZGVzdGluYXRpb246IGNvbnN0YW50cy5UQVJHRVRfU0VSVkVSX1dNLFxyXG4gICAgICBzZXJ2aWNlTmFtZTogY29uc3RhbnRzLlNFUlZJQ0VfTkFNRV9XTV9GT1JNLFxyXG4gICAgICBmb3JtTmFtZTogdGhpcy5jb25maWcuZm9ybU5hbWUsXHJcbiAgICAgIGZvcm1JZDogXCJcIixcclxuICAgICAgcXVlcnlQYXJhbWV0ZXJzOiBudWxsXHJcbiAgICB9O1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5mb3JtSWQpIHtcclxuICAgICAgZGVsZXRlIGJhc2VCb2R5LmZvcm1JZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJhc2VCb2R5LmZvcm1JZCA9IHRoaXMuY29uZmlnLmZvcm1JZDtcclxuICAgIH1cclxuICAgIHJldHVybiBiYXNlQm9keTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlbXBsb3llZVByb2ZpbGUoZW1wbG95ZWVFbWFpbDogYW55KSB7XHJcbiAgICBsZXQgYm9keSA9IHtcclxuICAgICAgbWV0aG9kOiBjb25zdGFudHMuSFRUUF9NRVRIT0RfR0VULFxyXG4gICAgICBmb3JtTmFtZTogdGhpcy5jb25maWcuZm9ybU5hbWUsXHJcbiAgICAgIGRlc3RpbmF0aW9uOiBjb25zdGFudHMuVEFSR0VUX1NFUlZFUl9EUCxcclxuICAgICAgc2VydmljZU5hbWU6IGNvbnN0YW50cy5TRVJWSUNFX05BTUVfRFBfU0VBUkNIX0VNUExPWUVFLFxyXG4gICAgICBwYXJhbWV0ZXJzOiB7XHJcbiAgICAgICAgcTogZW1wbG95ZWVFbWFpbFxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuYXBpVXJsLCBib2R5LCB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgYXV0aFRva2VuOiB0aGlzLmF1dGhUb2tlbixcclxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiXHJcbiAgICAgIH0pLFxyXG4gICAgICBvYnNlcnZlOiBcImJvZHlcIlxyXG4gICAgfSkucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXHJcbiAgICAgIH0pXHJcbiAgICAgICwgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnIpXHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UmVxdWVzdE9wdGlvbnMoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgIGF1dGhUb2tlbjogdGhpcy5hdXRoVG9rZW4sXHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IGNvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFX0ZPUk1cclxuICAgICAgfSksXHJcbiAgICAgIG9ic2VydmU6ICdib2R5J1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREcmFmdElkKHZhbCkge1xyXG4gICAgcmV0dXJuIHZhbC50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgoJ0RSQUZUJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3VibWl0Rm9ybSguLi5hcmdzKSB7XHJcbiAgICBjb25zdCBbc2VjdGlvbiwgYWN0aW9uXSA9IGFyZ3M7XHJcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLmdldEh0dHBNZXRob2QoKTtcclxuICAgIGxldCBzZWN0aW9uSWQgPSB0aGlzLmJlZm9yZVRyYW5zcGlsZVNlY3Rpb25XcmFwcGVyKHNlY3Rpb24pLmlkO1xyXG4gICAgbGV0IHNlcnZpY2VOYW1lID0gdGhpcy5nZXRTZXJ2aWNlTmFtZShhY3Rpb24pO1xyXG4gICAgbGV0IGZvcm1OYW1lID0gdGhpcy5nZXRGb3JtTmFtZShhY3Rpb24pO1xyXG4gICAgbGV0IGJvZHkgPSB0aGlzLmdldEJvZHlPYmplY3QobWV0aG9kLCBzZXJ2aWNlTmFtZSwgYWN0aW9uLCBmb3JtTmFtZSwgdGhpcy5wb3B1bGF0ZWRQYXlsb2FkKHNlY3Rpb25JZCwgc2VjdGlvbiksIHRoaXMuY29uZmlnLmZvcm1JZCk7XHJcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRSZXF1ZXN0T3B0aW9ucygpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnN1Ym1pdChib2R5LCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SHR0cE1ldGhvZCgpIHtcclxuICAgIHJldHVybiAodGhpcy5jb25maWcuZm9ybUlkICYmICF0aGlzLmdldERyYWZ0SWQodGhpcy5jb25maWcuZm9ybUlkKSkgPyBjb25zdGFudHMuSFRUUF9NRVRIT0RfUFVUIDogY29uc3RhbnRzLkhUVFBfTUVUSE9EX1BPU1Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJlZm9yZVRyYW5zcGlsZVNlY3Rpb25XcmFwcGVyKHNlY3Rpb24pIHtcclxuICAgIHJldHVybiBzYXZlRm9ybUhvb2tzLmJlZm9yZVRyYW5zcGlsZVNlY3Rpb24gPyBzYXZlRm9ybUhvb2tzLmJlZm9yZVRyYW5zcGlsZVNlY3Rpb24oc2VjdGlvbikgOiBzZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZXJ2aWNlTmFtZShhY3Rpb24pIHtcclxuICAgIGlmIChhY3Rpb24gPT09IGNvbnN0YW50cy5XTV9BQ1RJT05fU0FWRV9DSEFOR0VTKSB7XHJcbiAgICAgIHJldHVybiBjb25zdGFudHMuU0VSVklDRV9OQU1FX1dNX0RSQUZUX0ZPUk1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBjb25zdGFudHMuU0VSVklDRV9OQU1FX1dNX0ZPUk1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Rm9ybU5hbWUoYWN0aW9uKSB7XHJcbiAgICBpZiAoYWN0aW9uID09PSBjb25zdGFudHMuV01fQUNUSU9OX1NBVkVfQ0hBTkdFUykge1xyXG4gICAgICByZXR1cm4gJ2NvbW1vbic7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZm9ybU5hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBvcHVsYXRlZFBheWxvYWQoc2VjdGlvbklkLCBzZWN0aW9uKSB7XHJcbiAgICBsZXQgcGF5bG9hZDtcclxuICAgIGlmIChzZWN0aW9uSWQgPT09IGNvbnN0YW50cy5TRUNUSU9OX0lEX1JFUVVFU1RfREVUQUlMUykge1xyXG4gICAgICBwYXlsb2FkID0ge3JlcXVlc3Q6IHtkZXRhaWxzOiBzZWN0aW9uLmJvZHkuZGV0YWlsc319O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGF5bG9hZCA9IHt3b3JrZmxvd1N0ZXBzOiB7fX07XHJcbiAgICAgIHBheWxvYWQud29ya2Zsb3dTdGVwcy5kZXRhaWxzID0gc2VjdGlvbi5ib2R5LmRldGFpbHM7XHJcbiAgICAgIHBheWxvYWQud29ya2Zsb3dTdGVwcy5hY3RvciA9IHRoaXMuY3VycmVudFN1Ym1pdHRlci5hY3RvcjtcclxuICAgICAgcGF5bG9hZC53b3JrZmxvd1N0ZXBzLmFjdG9yLmVtYWlsID0gdGhpcy5jdXJyZW50QWN0b3I7XHJcbiAgICAgIHBheWxvYWQud29ya2Zsb3dTdGVwcy5zdGF0dXMgPSBjb25zdGFudHMuU0VDVElPTl9TVEFUVVNfUEVORElORztcclxuICAgIH1cclxuICAgIHJldHVybiBwYXlsb2FkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCb2R5T2JqZWN0KG1ldGhvZCwgc2VydmljZU5hbWUsIGFjdGlvbiwgZm9ybU5hbWUsIHBheWxvYWQsIGZvcm1JZCkge1xyXG4gICAgbGV0IGJvZHkgPSB7XHJcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxyXG4gICAgICBkZXN0aW5hdGlvbjogY29uc3RhbnRzLlRBUkdFVF9TRVJWRVJfV00sXHJcbiAgICAgIHNlcnZpY2VOYW1lOiBzZXJ2aWNlTmFtZSxcclxuICAgICAgcGFyYW1ldGVyczoge1xyXG4gICAgICAgIGFjdGlvbjogYWN0aW9uXHJcbiAgICAgIH0sXHJcbiAgICAgIGZvcm1OYW1lOiBmb3JtTmFtZSxcclxuICAgICAgYm9keTogcGF5bG9hZCxcclxuICAgICAgZm9ybUlkOiBmb3JtSWQsXHJcbiAgICAgIHF1ZXJ5UGFyYW1ldGVyczoge30sXHJcbiAgICAgIHBheWxvYWRcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb25maWcuZm9ybUlkKSB7XHJcbiAgICAgIGJvZHkuZm9ybUlkID0gdGhpcy5jb25maWcuZm9ybUlkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5hdXRob3JpemVkRW1haWwgfHwgIXRoaXMuYXV0aG9yaXplZEVtYWlsLmxlbmd0aCB8fCB0aGlzLmF1dGhvcml6ZWRFbWFpbCA9PT0gdGhpcy5yZXF1ZXN0ZXJFbWFpbCkge1xyXG4gICAgICBkZWxldGUgYm9keS5xdWVyeVBhcmFtZXRlcnM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNhdmVGb3JtSG9va3MuYmVmb3JlU2VuZFBheWxvYWQpIHtcclxuICAgICAgYm9keS5wYXlsb2FkID0gc2F2ZUZvcm1Ib29rcy5iZWZvcmVTZW5kUGF5bG9hZChib2R5LnBheWxvYWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBib2R5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxsUG9zdChib2R5LCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCBsYW5ndWFnZSA9ICh3aW5kb3cgYXMgYW55KT8ud21Db25maWc/Lmxhbmd1YWdlID8gKHdpbmRvdyBhcyBhbnkpLndtQ29uZmlnLmxhbmd1YWdlIDogXCJlblwiO1xyXG4gICAgbGV0IGFwaVVybCA9IHRoaXMuY29uZmlnLnByb3h5U2VydmljZUJhc2VVcmwgKyBsYW5ndWFnZSArIHRoaXMuY29uZmlnLnByb3h5RnVsbEFkZHJlc3MgKyB0aGlzLmNvbmZpZy5wcm94eVNlcnZpY2VFeGVjdXRlO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGFwaVVybCwgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGJvZHkpKSwgb3B0aW9ucykudG9Qcm9taXNlKClcclxuICAgICAgLnRoZW4oXHJcbiAgICAgICAgKHJlc3BvbnNlT2JqZWN0OiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnN1Y2Nlc3NXbShyZXNwb25zZU9iamVjdClcclxuICAgICAgICB9LFxyXG4gICAgICApLmNhdGNoKFxyXG4gICAgICAgIChodHRwRXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoaHR0cEVycm9yKVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3VibWl0KGJvZHk6IGFueSwgb3B0aW9uczogYW55KSB7XHJcbiAgICBjb25zdCBsYW5ndWFnZSA9ICh3aW5kb3cgYXMgYW55KT8ud21Db25maWc/Lmxhbmd1YWdlID8gKHdpbmRvdyBhcyBhbnkpLndtQ29uZmlnLmxhbmd1YWdlIDogXCJlblwiO1xyXG4gICAgY29uc3QgYXBpVXJsID0gdGhpcy5jb25maWcucHJveHlTZXJ2aWNlQmFzZVVybCArIGxhbmd1YWdlICsgdGhpcy5jb25maWcucHJveHlGdWxsQWRkcmVzcyArIHRoaXMuY29uZmlnLnByb3h5U2VydmljZUV4ZWN1dGU7XHJcblxyXG4gICAgLy8gQ29udmVydCB0aGUgcHJvbWlzZSB0byBhbiBvYnNlcnZhYmxlXHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgdGhpcy5odHRwLnBvc3QoYXBpVXJsLCBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoYm9keSkpLCBvcHRpb25zKS50b1Byb21pc2UoKS50aGVuKFxyXG4gICAgICAgIChyZXNwb25zZU9iamVjdDogYW55KSA9PiB7XHJcbiAgICAgICAgICBsZXQgZm9ybVJlc3BvbnNlID0gcmVzcG9uc2VPYmplY3QuZGF0YS5mb3JtO1xyXG4gICAgICAgICAgaWYgKHNhdmVGb3JtSG9va3MuYWZ0ZXJTZW5kUGF5bG9hZCkge1xyXG4gICAgICAgICAgICBmb3JtUmVzcG9uc2UgPSBzYXZlRm9ybUhvb2tzLmFmdGVyU2VuZFBheWxvYWQoZm9ybVJlc3BvbnNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgIGlkOiBudWxsLFxyXG4gICAgICAgICAgICBzdGF0dXM6IG51bGwsXHJcbiAgICAgICAgICAgIG5leHRBcHByb3Zlcjoge1xyXG4gICAgICAgICAgICAgIG5hbWU6IG51bGwsXHJcbiAgICAgICAgICAgICAgZW1haWw6IG51bGwsXHJcbiAgICAgICAgICAgICAgcm9sZTogbnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjcmVhdGlvbkRhdGU6IG51bGxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXN1bHQuaWQgPSBmb3JtUmVzcG9uc2UuZm9ybUlkO1xyXG4gICAgICAgICAgcmVzdWx0LnN0YXR1cyA9IGZvcm1SZXNwb25zZVsnZm9ybVN0YXR1cyddO1xyXG4gICAgICAgICAgaWYgKGZvcm1SZXNwb25zZS5jdXJyZW50QWN0b3IpIHtcclxuICAgICAgICAgICAgcmVzdWx0Lm5leHRBcHByb3ZlciA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBmb3JtUmVzcG9uc2UuY3VycmVudEFjdG9yLm5hbWUsXHJcbiAgICAgICAgICAgICAgZW1haWw6IGZvcm1SZXNwb25zZS5jdXJyZW50QWN0b3IuZW1haWwsXHJcbiAgICAgICAgICAgICAgcm9sZTogZm9ybVJlc3BvbnNlWydmb3JtU3RlcCddXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc3VsdC5jcmVhdGlvbkRhdGUgPSBmb3JtUmVzcG9uc2UuY3JlYXRpb25EYXRlO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LCAoaHR0cEVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRocm93IGh0dHBFcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1Y2Nlc3NXbSguLi5hcmdzKSB7XHJcbiAgICBsZXQgW3BheWxvYWRdID0gYXJncztcclxuICAgIGxldCB3YXNTZW5kQmFjayA9IGZhbHNlO1xyXG4gICAgLyogQ29udmVydCBpbnRvIEZvcm0gT2JqZWN0ICovXHJcbiAgICBsZXQgcmVzdWx0ID0gbmV3IEZvcm0oXHJcbiAgICAgIGNvbnN0YW50cy5OT19WQUxVRSxcclxuICAgICAgY29uc3RhbnRzLk5PX1ZBTFVFLFxyXG4gICAgICBjb25zdGFudHMuTk9fVkFMVUUsXHJcbiAgICAgIGNvbnN0YW50cy5OT19WQUxVRSxcclxuICAgICAgY29uc3RhbnRzLk5PX1ZBTFVFLFxyXG4gICAgICBjb25zdGFudHMuTk9fVkFMVUUsXHJcbiAgICAgIGNvbnN0YW50cy5OT19WQUxVRVxyXG4gICAgKTtcclxuICAgIHRoaXMucmVxdWVzdGVyRW1haWwgPSBwYXlsb2FkLmRhdGFbJ3JlcXVlc3RlciddLmVtcGxveWVlRW1haWw7XHJcbiAgICB0aGlzLmF1dGhvcml6ZWRFbWFpbCA9IHBheWxvYWQuZGF0YVsncmVxdWVzdGVyJ10uYXV0aG9yaXplZEVtYWlsO1xyXG4gICAgLyogR2VuZXJhdGUgSGVhZGVyIE9iamVjdCAqL1xyXG4gICAgbGV0IHBheWxvYWRGb3JtRGV0YWlscyA9IHBheWxvYWQuZGF0YS5mb3JtO1xyXG4gICAgbGV0IGlzUmVhZE9ubHkgPSAocGF5bG9hZEZvcm1EZXRhaWxzLnJlYWRPbmx5LnRvVXBwZXJDYXNlKCkgPT09IGNvbnN0YW50cy5UUlVFX1NUUklORyA/IGNvbnN0YW50cy5UUlVFX0JPT0wgOiAocGF5bG9hZEZvcm1EZXRhaWxzLnJlYWRPbmx5LnRvVXBwZXJDYXNlKCkgPT09IGNvbnN0YW50cy5GQUxTRV9TVFJJTkcgPyBjb25zdGFudHMuRkFMU0VfQk9PTCA6IGNvbnN0YW50cy5OT19WQUxVRSkpXHJcbiAgICByZXN1bHQuaGVhZGVyID0gbmV3IEhlYWRlcihcclxuICAgICAgcGF5bG9hZC5kYXRhWydyZXF1ZXN0ZXInXS5mdWxsTmFtZSxcclxuICAgICAgY29uc3RhbnRzLklHQVRFX1NUQVRJQ19BU1NFVF9QUk9GSUxFX1BIT1RPX1VSTCArIHBheWxvYWQuZGF0YVsncmVxdWVzdGVyJ10uZW1wbG95ZWVFbWFpbCxcclxuICAgICAgKHBheWxvYWRGb3JtRGV0YWlscy5mb3JtSWQgPyBwYXlsb2FkRm9ybURldGFpbHMuZm9ybUlkIDogY29uc3RhbnRzLkRPTlRfU0hPVyksXHJcbiAgICAgIChwYXlsb2FkRm9ybURldGFpbHMuY3JlYXRpb25EYXRlID8gcGF5bG9hZEZvcm1EZXRhaWxzLmNyZWF0aW9uRGF0ZSA6IGNvbnN0YW50cy5ET05UX1NIT1cpLFxyXG4gICAgICBwYXlsb2FkRm9ybURldGFpbHNbJ2Zvcm1TdGF0dXMnXSxcclxuICAgICAgcGF5bG9hZEZvcm1EZXRhaWxzLmRldGFpbHNcclxuICAgICk7XHJcbiAgICAvKiBHZW5lcmF0ZSBQcm9maWxlIEluZm9ybWF0aW9uIE9iamVjdCAqL1xyXG4gICAgbGV0IHBheWxvYWRQcm9maWxlSW5mbyA9IHBheWxvYWQuZGF0YVsncmVxdWVzdGVyJ107XHJcbiAgICByZXN1bHQucHJvZmlsZUluZm9Ecm9wID0gbmV3IFByb2ZpbGVJbmZvRHJvcChcclxuICAgICAgKHBheWxvYWRQcm9maWxlSW5mb1snb25CZWhhbGZBdXRob3JpemVkJ10gPyBKU09OLnBhcnNlKHBheWxvYWRQcm9maWxlSW5mb1snb25CZWhhbGZBdXRob3JpemVkJ10pIDogbnVsbCksXHJcbiAgICAgIHBheWxvYWRQcm9maWxlSW5mb1snZW1wbG95ZWVJZCddLFxyXG4gICAgICBwYXlsb2FkUHJvZmlsZUluZm8uZW1wbG95ZWVFbWFpbCxcclxuICAgICAgcGF5bG9hZFByb2ZpbGVJbmZvLmZ1bGxOYW1lLFxyXG4gICAgICBwYXlsb2FkUHJvZmlsZUluZm8uZ2VuZXJhbERlcGFydG1lbnROYW1lLFxyXG4gICAgICBwYXlsb2FkUHJvZmlsZUluZm8uam9iUG9zaXRpb24sXHJcbiAgICAgIHBheWxvYWRQcm9maWxlSW5mb1snc2VjdG9yTmFtZSddLFxyXG4gICAgICBwYXlsb2FkUHJvZmlsZUluZm8uZGVwYXJ0bWVudE5hbWUsXHJcbiAgICAgIHBheWxvYWRQcm9maWxlSW5mby5nZW5lcmFsRGVwYXJ0bWVudENvZGUsXHJcbiAgICAgIHBheWxvYWRQcm9maWxlSW5mb1snaHVtYW5SZXNvdXJjZUxvY2F0aW9uJ10sXHJcbiAgICAgIHBheWxvYWRQcm9maWxlSW5mby5uYXRpb25hbGl0eSxcclxuICAgICAgcGF5bG9hZFByb2ZpbGVJbmZvLmJ1c2luZXNzUGhvbmUsXHJcbiAgICAgIHBheWxvYWRQcm9maWxlSW5mb1snZGlyZWN0TWFuYWdlck5hbWUnXSxcclxuICAgICAgcGF5bG9hZFByb2ZpbGVJbmZvLnNlbmlvclNlY3Rvck5hbWVcclxuICAgICk7XHJcbiAgICByZXN1bHQuc2VjdGlvbnMgPSBbXTtcclxuICAgIGxldCByZXF1ZXN0RGV0YWlsc0hhc0NvbW1lbnQgPSBmYWxzZTtcclxuICAgIGlmIChwYXlsb2FkLmRhdGEucmVxdWVzdC5kZXRhaWxzLmNvbW1lbnQpIHtcclxuICAgICAgcmVxdWVzdERldGFpbHNIYXNDb21tZW50ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJlc3VsdC5zZWN0aW9ucy5wdXNoKFxyXG4gICAgICBuZXcgU2VjdGlvbihcclxuICAgICAgICBjb25zdGFudHMuU0VDVElPTl9JRF9SRVFVRVNUX0RFVEFJTFMsXHJcbiAgICAgICAgbmV3IFNlY3Rpb25IZWFkZXIoY29uc3RhbnRzLkRPTlRfU0hPVywgY29uc3RhbnRzLkRPTlRfU0hPVywgY29uc3RhbnRzLkRPTlRfU0hPVywgY29uc3RhbnRzLkRPTlRfU0hPVywgY29uc3RhbnRzLkRPTlRfU0hPVywgY29uc3RhbnRzLkRPTlRfU0hPVywgY29uc3RhbnRzLkRPTlRfU0hPVywgcmVxdWVzdERldGFpbHNIYXNDb21tZW50LCAocGF5bG9hZC5kYXRhWyd3b3JrZmxvd1N0ZXBzJ10gPyBjb25zdGFudHMuUkVBRF9PTkxZIDogaXNSZWFkT25seSkpLFxyXG4gICAgICAgIHBheWxvYWQuZGF0YS5yZXF1ZXN0XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHJlc3VsdC5oZWFkZXIuZm9ybUlkKSB7XHJcbiAgICAgIHJlc3VsdC5jb21tZW50c0Ryb3AgPSAoIXJlc3VsdC5jb21tZW50c0Ryb3AgPyBbXSA6IHJlc3VsdC5jb21tZW50c0Ryb3ApO1xyXG4gICAgICB0aGlzLmxvYWRIaXN0b3J5KHJlc3VsdC5oZWFkZXIuZm9ybUlkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICByZXNwb25zZS5pdGVtcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaXRlbS5zZXF1ZW5jZU51bWJlciAhPT0gJzAnICYmIGl0ZW0ucHJvY2Vzc2VkQnkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBpdGVtLnByb2Nlc3NlZEJ5WydmaXJzdE5hbWUnXSArICcgJyArIGl0ZW0ucHJvY2Vzc2VkQnlbJ3NlY29uZE1pZGRsZU5hbWUnXSArICcgJyArIGl0ZW0ucHJvY2Vzc2VkQnlbJ2ZhbWlseU5hbWUnXTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5jb21tZW50c0Ryb3AucHVzaChuZXcgQ29tbWVudHNEcm9wKFxyXG4gICAgICAgICAgICAgICAgICBjb25zdGFudHMuSUdBVEVfU1RBVElDX0FTU0VUX1BST0ZJTEVfUEhPVE9fVVJMICsgaXRlbS5wcm9jZXNzZWRCeS5lbWFpbCxcclxuICAgICAgICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgICAgICAgaXRlbS5jb21tZW50cyxcclxuICAgICAgICAgICAgICAgICAgaXRlbVsnbW9kaWZpZWREYXRlJ10sXHJcbiAgICAgICAgICAgICAgICAgIGl0ZW0uYXR0YWNobWVudHMsXHJcbiAgICAgICAgICAgICAgICAgIGl0ZW0ucHJvY2Vzc2VkQnkuam9iXHJcbiAgICAgICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNvbnN0IGluYm94VHlwZSA9IHRoaXMuZ2V0SW5ib3hUeXBlKHJlc3VsdCk7XHJcbiAgICBpZiAocmVzdWx0LmhlYWRlci5mb3JtSWQgJiYgKCF0aGlzLmlzT3Blbk9uSW5ib3goKSkpIHtcclxuICAgICAgdGhpcy5nZXRJbmJveEl0ZW0ocmVzdWx0LmhlYWRlci5mb3JtSWQsIGluYm94VHlwZSkuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHJlc3BvbnNlLml0ZW07XHJcbiAgICAgICAgICAgIHJlc3VsdC5pbmJveEl0ZW0gPSBuZXcgSW5ib3hJdGVtKFxyXG4gICAgICAgICAgICAgIGl0ZW1bJ2ZsYWdnaW5nJ10uZmxhZ1ByaW9yaXR5LFxyXG4gICAgICAgICAgICAgIGl0ZW1bJ2ZsYWdnaW5nJ11bJ2lzRmxhZ2dlZCddLFxyXG4gICAgICAgICAgICAgIGl0ZW0uZmVlZGJhY2tbJ2NhblJlcXVlc3RGZWVkYmFjayddLFxyXG4gICAgICAgICAgICAgIGl0ZW0uZmVlZGJhY2tbJ2hhc0ZlZWRiYWNrJ10sXHJcbiAgICAgICAgICAgICAgaXRlbS5mZWVkYmFja1snaXNQZW5kaW5nJ10sXHJcbiAgICAgICAgICAgICAgaXRlbS5mZWVkYmFja1snaXNSZXF1ZXN0ZWQnXSxcclxuICAgICAgICAgICAgICBpdGVtLmZlZWRiYWNrWydpc1Jlc3BvbmRlZCddXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGF5bG9hZFdvcmtmbG93U3RlcHMgPSBwYXlsb2FkLmRhdGEud29ya2Zsb3dTdGVwcztcclxuICAgIGlmIChwYXlsb2FkV29ya2Zsb3dTdGVwcyAmJiBwYXlsb2FkV29ya2Zsb3dTdGVwcy5jb25zdHJ1Y3RvciA9PT0gQXJyYXkgJiYgcGF5bG9hZFdvcmtmbG93U3RlcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBwYXlsb2FkV29ya2Zsb3dTdGVwcy5mb3JFYWNoKChzdGVwLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGxldCBjdXJyZW50SXNSZXF1ZXN0ZXJTZW5kQmFjayA9IEpTT04uc3RyaW5naWZ5KHN0ZXAuZGV0YWlscykgPT09IEpTT04uc3RyaW5naWZ5KHt9KTtcclxuICAgICAgICBsZXQgaGFzQ29tbWVudHMgPSAoIWN1cnJlbnRJc1JlcXVlc3RlclNlbmRCYWNrICYmIChzdGVwLmRldGFpbHMuY29tbWVudCB8fCBzdGVwLmNvbW1lbnQpID8gY29uc3RhbnRzLkhBU19DT01NRU5UUyA6IGNvbnN0YW50cy5OT19DT01NRU5UUyk7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRBY3RvciA9IChzdGVwLmFjdG9yLmVtYWlsID09PSBzdGVwLmFjdG9yLnJlY2lwaWVudC5lbWFpbCA/IHN0ZXAuYWN0b3IucmVjaXBpZW50IDogKHN0ZXAuYWN0b3IuZGVsZWdhdGUgPyBzdGVwLmFjdG9yLmRlbGVnYXRlIDogbnVsbCkpXHJcbiAgICAgICAgLyogaWYgKGhhc0NvbW1lbnRzKSB7XHJcbiAgICAgICAgICAgcmVzdWx0LmNvbW1lbnRzRHJvcCA9ICghcmVzdWx0LmNvbW1lbnRzRHJvcCA/IFtdIDogcmVzdWx0LmNvbW1lbnRzRHJvcCk7XHJcbiAgICAgICAgICAgaWYgKHN0ZXAuZGV0YWlscy5hdHRhY2htZW50ICYmIHN0ZXAuZGV0YWlscy5hdHRhY2htZW50LmF0dGFjaG1lbnRJZCAmJiB0aGlzLmNvbmZpZy5wcm9kdWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAvLyB0aGlzLnN0YXRlID0gY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfU1RBVFVTX0lETEU7XHJcbiAgICAgICAgICAgICAvISogICAgICAgICAgIHRoaXMuZGlzcGF0Y2goY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfQUNUSU9OX0xPQURfRklMRSwgc3RlcC5kZXRhaWxzLmF0dGFjaG1lbnQuYXR0YWNobWVudElkKS50aGVuKChyZXNwb25zZU9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWxlSW5mb3JtYXRpb24gPSByZXNwb25zZU9iamVjdC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QWN0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8hKnRoaXMuZGlzcGF0Y2goY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfQUNUSU9OX0VNUExPWUVFX1BST0ZJTEUsIGN1cnJlbnRBY3Rvci5lbWFpbCkudGhlbigocHJvZmlsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuY29tbWVudHNEcm9wLnB1c2gobmV3IENvbW1lbnRzRHJvcChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudHMuSUdBVEVfU1RBVElDX0FTU0VUX1BST0ZJTEVfUEhPVE9fVVJMICsgY3VycmVudEFjdG9yLmVtYWlsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRBY3Rvci5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGVwLmRldGFpbHMuY29tbWVudCA/IHN0ZXAuZGV0YWlscy5jb21tZW50IDogKHN0ZXAuY29tbWVudCA/IHN0ZXAuY29tbWVudCA6IG51bGwpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwLmRhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUluZm9ybWF0aW9uLmZpbGVOYW1lICsgXCJ8ZGF0YTpcIiArIGZpbGVJbmZvcm1hdGlvbi5taW1lVHlwZSArIFwiO2Jhc2U2NCxcIiArIGZpbGVJbmZvcm1hdGlvbi5maWxlQ29udGVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZS5qb2IubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkqIS9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfU1RBVFVTX0ZFVENISU5HOyohL1xyXG4gICAgICAgICAgIH0gZWxzZSBpZiAoc3RlcC5kZXRhaWxzLmF0dGFjaG1lbnRJZCkge1xyXG4gICAgICAgICAgICAgLyEqIHRoaXMuc3RhdGUgPSBjb25zdGFudHMuU1RBVEVfTUFDSElORV9TVEFUVVNfSURMRTtcclxuICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoKGNvbnN0YW50cy5TVEFURV9NQUNISU5FX0FDVElPTl9MT0FEX0ZJTEUsIHN0ZXAuZGV0YWlscy5hdHRjaG1lbnRJZCkudGhlbigocmVzcG9uc2VPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBmaWxlSW5mb3JtYXRpb24gPSByZXNwb25zZU9iamVjdC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRBY3Rvcikge1xyXG4gICAgICAgICAgICAgICAgICAvISp0aGlzLmRpc3BhdGNoKGNvbnN0YW50cy5TVEFURV9NQUNISU5FX0FDVElPTl9FTVBMT1lFRV9QUk9GSUxFLCBjdXJyZW50QWN0b3IuZW1haWwpLnRoZW4oKHByb2ZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuY29tbWVudHNEcm9wLnB1c2gobmV3IENvbW1lbnRzRHJvcChcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cy5JR0FURV9TVEFUSUNfQVNTRVRfUFJPRklMRV9QSE9UT19VUkwgKyBjdXJyZW50QWN0b3IuZW1haWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50QWN0b3IubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgIChzdGVwLmRldGFpbHMuY29tbWVudCA/IHN0ZXAuZGV0YWlscy5jb21tZW50IDogKHN0ZXAuY29tbWVudCA/IHN0ZXAuY29tbWVudCA6IG51bGwpKSxcclxuICAgICAgICAgICAgICAgICAgICAgIHN0ZXAuZGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGZpbGVJbmZvcm1hdGlvbi5maWxlTmFtZSArIFwifGRhdGE6XCIgKyBmaWxlSW5mb3JtYXRpb24ubWltZVR5cGUgKyBcIjtiYXNlNjQsXCIgKyBmaWxlSW5mb3JtYXRpb24uZmlsZUNvbnRlbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZS5qb2IubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICkpXHJcbiAgICAgICAgICAgICAgICAgIH0pKiEvXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IGNvbnN0YW50cy5TVEFURV9NQUNISU5FX1NUQVRVU19GRVRDSElORzsqIS9cclxuICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgaWYgKGN1cnJlbnRBY3Rvcikge1xyXG4gICAgICAgICAgICAgICB0aGlzLmVtcGxveWVlUHJvZmlsZShjdXJyZW50QWN0b3IuZW1haWwpLnN1YnNjcmliZSgocHJvZmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jb21tZW50c0Ryb3AucHVzaChuZXcgQ29tbWVudHNEcm9wKFxyXG4gICAgICAgICAgICAgICAgICAgICBjb25zdGFudHMuSUdBVEVfU1RBVElDX0FTU0VUX1BST0ZJTEVfUEhPVE9fVVJMICsgY3VycmVudEFjdG9yLmVtYWlsLFxyXG4gICAgICAgICAgICAgICAgICAgICBjdXJyZW50QWN0b3IubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgKHN0ZXAuZGV0YWlscy5jb21tZW50ID8gc3RlcC5kZXRhaWxzLmNvbW1lbnQgOiAoc3RlcC5jb21tZW50ID8gc3RlcC5jb21tZW50IDogbnVsbCkpLFxyXG4gICAgICAgICAgICAgICAgICAgICBzdGVwLmRhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUuam9iLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICkpXHJcbiAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgICB9XHJcbiAgICAgICAgIH0qL1xyXG5cclxuICAgICAgICBpZiAod2FzU2VuZEJhY2sgJiYgc3RlcC5hY3Rvci5yZWNpcGllbnQucm9sZSA9PT0gJ1JFUVVFU1RFUicpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwid2FzU2VuZEJhY2sgJiYgUkVRVUVTVEVSXCIpXHJcbiAgICAgICAgICByZXN1bHQuc2VjdGlvbnMgPSBbbmV3IFNlY3Rpb24oXHJcbiAgICAgICAgICAgIGNvbnN0YW50cy5TRUNUSU9OX0lEX1JFUVVFU1RfREVUQUlMUyxcclxuICAgICAgICAgICAgbmV3IFNlY3Rpb25IZWFkZXIoXHJcbiAgICAgICAgICAgICAgY29uc3RhbnRzLkRPTlRfU0hPVyxcclxuICAgICAgICAgICAgICBjb25zdGFudHMuRE9OVF9TSE9XLFxyXG4gICAgICAgICAgICAgIGNvbnN0YW50cy5ET05UX1NIT1csXHJcbiAgICAgICAgICAgICAgY29uc3RhbnRzLkRPTlRfU0hPVyxcclxuICAgICAgICAgICAgICBjb25zdGFudHMuRE9OVF9TSE9XLFxyXG4gICAgICAgICAgICAgIGNvbnN0YW50cy5ET05UX1NIT1csXHJcbiAgICAgICAgICAgICAgY29uc3RhbnRzLkRPTlRfU0hPVyxcclxuICAgICAgICAgICAgICByZXF1ZXN0RGV0YWlsc0hhc0NvbW1lbnQsXHJcbiAgICAgICAgICAgICAgKHBheWxvYWQuZGF0YS53b3JrZmxvd1N0ZXBzID8gY29uc3RhbnRzLlJFQURfT05MWSA6IGlzUmVhZE9ubHkpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHBheWxvYWQuZGF0YS5yZXF1ZXN0XHJcbiAgICAgICAgICApXVxyXG4gICAgICAgIH0gZWxzZSBpZiAod2FzU2VuZEJhY2spIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiUG9wXCIpXHJcbiAgICAgICAgICBpZiAocmVzdWx0LnNlY3Rpb25zLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnNlY3Rpb25zLnBvcCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgd2FzU2VuZEJhY2sgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAoc3RlcC5kZXRhaWxzLmRlY2lzaW9uICYmIHN0ZXAuZGV0YWlscy5kZWNpc2lvbi5rZXkgPT09IGNvbnN0YW50cy5GT1JNX1NUQVRVU19TRU5EX0JBQ0spIHtcclxuICAgICAgICAgIHdhc1NlbmRCYWNrID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKEpTT04uc3RyaW5naWZ5KHN0ZXAuZGV0YWlscykgIT09IEpTT04uc3RyaW5naWZ5KHt9KSkge1xyXG4gICAgICAgICAgcmVzdWx0LnNlY3Rpb25zLnB1c2goXHJcbiAgICAgICAgICAgIG5ldyBTZWN0aW9uKFxyXG4gICAgICAgICAgICAgIHN0ZXAuYWN0b3IucmVjaXBpZW50LnJvbGUudG9Mb3dlckNhc2UoKSArIGNvbnN0YW50cy5TRUNUSU9OX0lEX0FQUFJPVkFMX1BBUlRJQUxfTkFNRSxcclxuICAgICAgICAgICAgICBuZXcgU2VjdGlvbkhlYWRlcihcclxuICAgICAgICAgICAgICAgIChjdXJyZW50QWN0b3IgPyB0aGlzLmdldFNob3J0TmFtZShjdXJyZW50QWN0b3IubmFtZSkgOiBcIlwiKS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgc3RlcC5kYXRlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTaG9ydE5hbWUoc3RlcC5hY3Rvci5yZWNpcGllbnQubmFtZSkudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIGNvbnN0YW50cy5JR0FURV9TVEFUSUNfQVNTRVRfUFJPRklMRV9QSE9UT19VUkwgKyBzdGVwLmFjdG9yLnJlY2lwaWVudC5lbWFpbCxcclxuICAgICAgICAgICAgICAgIChzdGVwLmFjdG9yLmRlbGVnYXRlPy5uYW1lID8gdGhpcy5nZXRTaG9ydE5hbWUoc3RlcC5hY3Rvci5kZWxlZ2F0ZS5uYW1lKSA6IFwiXCIpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAoc3RlcC5hY3Rvci5kZWxlZ2F0ZT8uZW1haWwgPyBjb25zdGFudHMuSUdBVEVfU1RBVElDX0FTU0VUX1BST0ZJTEVfUEhPVE9fVVJMICsgc3RlcC5hY3Rvci5kZWxlZ2F0ZS5lbWFpbCA6IFwiXCIpLFxyXG4gICAgICAgICAgICAgICAgc3RlcC5hY3Rvci5zdGF0dXMsXHJcbiAgICAgICAgICAgICAgICBoYXNDb21tZW50cyxcclxuICAgICAgICAgICAgICAgIChpbmRleCA8IHBheWxvYWRXb3JrZmxvd1N0ZXBzLmxlbmd0aCAtIDEgPyBjb25zdGFudHMuUkVBRF9PTkxZIDogaXNSZWFkT25seSlcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHtkZXRhaWxzOiBzdGVwLmRldGFpbHMsIHByb2Nlc3NpbmdEYXRlOiBzdGVwLmRhdGV9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRTdWJtaXR0ZXIgPSB7YWN0b3I6IHN0ZXAuYWN0b3IsIHJlY2lwaWVudDogc3RlcC5yZWNpcGllbnQsIGRlbGVnYXRlOiBzdGVwLmFjdG9yLmRlbGVnYXRlfTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyogQ3JlYXRlIExvdiBTZWN0aW9ucyAqL1xyXG4gICAgcmVzdWx0LmxvdnMgPSAocGF5bG9hZC5tZXRhICYmIHBheWxvYWQubWV0YS5sb3ZzID8gcGF5bG9hZC5tZXRhLmxvdnMgOiBudWxsKTtcclxuXHJcbiAgICBpZiAocGF5bG9hZC5tZXRhICYmIHBheWxvYWQubWV0YS5tZXNzYWdlcykge1xyXG4gICAgICByZXN1bHQubWVzc2FnZXMgPSBuZXcgTWVzc2FnZXMoXHJcbiAgICAgICAge30sXHJcbiAgICAgICAgW10sXHJcbiAgICAgICAgW10sXHJcbiAgICAgICAgW11cclxuICAgICAgKTtcclxuICAgICAgcGF5bG9hZC5tZXRhLm1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcclxuICAgICAgICByZXN1bHQubWVzc2FnZXMub3JpZ2luYWxNc2dzLnB1c2gobWVzc2FnZSk7XHJcbiAgICAgICAgcmVzdWx0Lm1lc3NhZ2VzW21lc3NhZ2UudHlwZV0ucHVzaChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyByZXN1bHQubWVzc2FnZXMgPSAocGF5bG9hZC5tZXRhICYmIHBheWxvYWQubWV0YS5tZXNzYWdlcyA/IHBheWxvYWQubWV0YS5tZXNzYWdlcyA6IG51bGwpO1xyXG4gICAgLyogRml4IGxhc3Qgc2VjdGlvbiB0byBiZSB0aGUgUk8vV00gZnJvbSB0aGUgdmFyaWFibGUgKi9cclxuICAgIHJlc3VsdC5zZWN0aW9uc1tyZXN1bHQuc2VjdGlvbnMubGVuZ3RoIC0gMV0uaGVhZGVyLnJlYWRPbmx5ID0gaXNSZWFkT25seTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZEZpbGUoLi4uYXJnczogYW55KSB7XHJcbiAgICBjb25zdCBbaWRdID0gYXJncztcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuY29uZmlnLnByb3h5RnVsbEFkZHJlc3MgKyB0aGlzLmNvbmZpZy5wcm94eVNlcnZpY2VGb3JtcyArIHRoaXMuY29uZmlnLmZvcm1JZCArIHRoaXMuY29uZmlnLnByb3h5U2VydmljZUF0dGFjaG1lbnQgKyBpZCwge29ic2VydmU6ICdyZXNwb25zZSd9KS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkYXRhVVJJdG9CbG9iKGRhdGFVUkk6IGFueSkge1xyXG4gICAgY29uc3QgYnl0ZVN0cmluZyA9IGF0b2IoZGF0YVVSSSk7XHJcbiAgICBjb25zdCBhcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihieXRlU3RyaW5nLmxlbmd0aCk7XHJcbiAgICBjb25zdCBpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaW50OEFycmF5W2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBCbG9iKFthcnJheUJ1ZmZlcl0sIHt0eXBlOiAnaW1hZ2UvanBlZyd9KTtcclxuICB9XHJcblxyXG4gIHNldEZsYWdQcmlvcml0eShpZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgYm9keSA9IHtcclxuICAgICAgbWV0aG9kOiBjb25zdGFudHMuSFRUUF9NRVRIT0RfUFVULFxyXG4gICAgICBkZXN0aW5hdGlvbjogY29uc3RhbnRzLlRBUkdFVF9TRVJWRVJfRFAsXHJcbiAgICAgIHNlcnZpY2VOYW1lOiBjb25zdGFudHMuU0VSVklDRV9OQU1FX0RQX1VQREFURV9JTkJPWF9JVEVNLFxyXG4gICAgICBmb3JtTmFtZTogdGhpcy5jb25maWcuZm9ybU5hbWUsXHJcbiAgICAgIHVybFBhcmFtZXRlcnM6IHtcclxuICAgICAgICBpbmJveGlkOiB0aGlzLmNvbmZpZy5mb3JtSWRcclxuICAgICAgfSxcclxuICAgICAgYm9keToge1xyXG4gICAgICAgIGZsYWc6IGlkXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBvcHRpb25zID0gdGhpcy5nZXRSZXF1ZXN0T3B0aW9ucygpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhbENhbGxBcGkoYm9keSwgY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfQUNUSU9OX1NVQ0NFU1NfSU5CT1hfSVRFTSwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZEhpc3RvcnkoLi4uYXJncykge1xyXG4gICAgY29uc3QgW2lkXSA9IGFyZ3M7XHJcbiAgICBjb25zdCBib2R5ID0ge1xyXG4gICAgICBtZXRob2Q6IGNvbnN0YW50cy5IVFRQX01FVEhPRF9HRVQsXHJcbiAgICAgIGRlc3RpbmF0aW9uOiBjb25zdGFudHMuVEFSR0VUX1NFUlZFUl9XTSxcclxuICAgICAgc2VydmljZU5hbWU6IGNvbnN0YW50cy5XT1JLRkxPV19JVEVNUyxcclxuICAgICAgZm9ybUlkOiBpZCA/IGlkIDogdGhpcy5jb25maWcuZm9ybUlkLFxyXG4gICAgICBmb3JtTmFtZTogXCJicG1cIixcclxuICAgIH07XHJcbiAgICBsZXQgb3B0aW9ucyA9IHRoaXMuZ2V0UmVxdWVzdE9wdGlvbnMoKTtcclxuICAgIHJldHVybiB0aGlzLmdlbmVyYWxDYWxsQXBpKGJvZHksIGNvbnN0YW50cy5TVEFURV9NQUNISU5FX0FDVElPTl9MT0FEX0hJU1RPUlksIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEluYm94SXRlbSguLi5hcmdzKSB7XHJcbiAgICBjb25zdCBbaWQsIGluYm94VHlwZV0gPSBhcmdzO1xyXG4gICAgY29uc3QgYm9keSA9IHtcclxuICAgICAgZm9ybU5hbWU6IHRoaXMuY29uZmlnLmZvcm1OYW1lLFxyXG4gICAgICBtZXRob2Q6IGNvbnN0YW50cy5IVFRQX01FVEhPRF9HRVQsXHJcbiAgICAgIGRlc3RpbmF0aW9uOiBjb25zdGFudHMuVEFSR0VUX1NFUlZFUl9EUCxcclxuICAgICAgc2VydmljZU5hbWU6IGNvbnN0YW50cy5TRVJWSUNFX05BTUVfRFBfSU5CT1hfSVRFTSxcclxuICAgICAgdXJsUGFyYW1ldGVyczoge1xyXG4gICAgICAgIGluYm94aWQ6IGlkLFxyXG4gICAgICAgIGluYm94dHlwZTogaW5ib3hUeXBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBvcHRpb25zID0gdGhpcy5nZXRSZXF1ZXN0T3B0aW9ucygpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhbENhbGxBcGkoYm9keSwgY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfQUNUSU9OX0dFVF9JTkJPWF9JVEVNLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcmVzcGVjdGl2ZUFwcHJvdmVycyhkZXRhaWxzKSB7XHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLnByb2R1Y3Rpb24pIHtcclxuICAgICAgZGV0YWlscyA9IHt9XHJcbiAgICB9XHJcbiAgICBsZXQgc2VydmljZU5hbWUgPSBcImZvcm0vXCIgKyB0aGlzLmNvbmZpZy5mb3JtTmFtZVxyXG4gICAgaWYgKHRoaXMuY29uZmlnLmZvcm1JZCkge1xyXG4gICAgICBzZXJ2aWNlTmFtZSA9IFwiZm9ybS9cIiArIHRoaXMuY29uZmlnLmZvcm1JZFxyXG4gICAgfVxyXG4gICAgbGV0IGJvZHkgPSB7XHJcbiAgICAgIG1ldGhvZDogY29uc3RhbnRzLkhUVFBfTUVUSE9EX1BPU1QsXHJcbiAgICAgIGRlc3RpbmF0aW9uOiBjb25zdGFudHMuVEFSR0VUX1NFUlZFUl9XTSxcclxuICAgICAgc2VydmljZU5hbWU6IHNlcnZpY2VOYW1lXHJcbiAgICAgICwgZm9ybU5hbWU6IGNvbnN0YW50cy5BUFBST1ZFUlNcclxuICAgICAgLCBib2R5OiB7XHJcbiAgICAgICAgXCJyZXF1ZXN0XCI6IHtcclxuICAgICAgICAgIFwiZGV0YWlsc1wiOlxyXG4gICAgICAgICAgZGV0YWlsc1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IG9wdGlvbnMgPSB0aGlzLmdldFJlcXVlc3RPcHRpb25zKCk7XHJcbiAgICByZXR1cm4gdGhpcy5nZW5lcmFsQ2FsbEFwaShib2R5LCBjb25zdGFudHMuU1RBVEVfTUFDSElORV9BQ1RJT05fU1VDQ0VTU19SRVNQT05TRSwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmFsQ2FsbEFwaShib2R5LCB0eXBlOiBzdHJpbmcsIG9wdGlvbnMpIHtcclxuICAgIGxldCBhcGlVcmwgPSB0aGlzLmNvbmZpZy5wcm94eVNlcnZpY2VCYXNlVXJsICsgdGhpcy5sYW5ndWFnZSArIHRoaXMuY29uZmlnLnByb3h5RnVsbEFkZHJlc3MgKyB0aGlzLmNvbmZpZy5wcm94eVNlcnZpY2VFeGVjdXRlO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGFwaVVybCwgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGJvZHkpKSwgb3B0aW9ucykucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZU9iamVjdDogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XHJcbiAgICAgICAgLypzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgIGNhc2UgY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfQUNUSU9OX0xPQURfSElTVE9SWTpcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XHJcbiAgICAgICAgfSovXHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChodHRwRXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGh0dHBFcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvZ2dlZEluVXNlcklkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlckRhdGFbJ2xvZ2dlZEluVXNlckVtYWlsJ107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2hvcnROYW1lKG5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKG5hbWUpIHtcclxuICAgICAgbGV0IG5hbWVUb2tlbnMgPSBuYW1lLnNwbGl0KCcgJyk7XHJcbiAgICAgIGlmIChuYW1lVG9rZW5zLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIFtuYW1lVG9rZW5zWzBdXVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChuYW1lVG9rZW5zW25hbWVUb2tlbnMubGVuZ3RoIC0gMl0udG9Mb3dlckNhc2UoKSA9PSAnYWwnKSB7XHJcbiAgICAgICAgICByZXR1cm4gW25hbWVUb2tlbnNbMF0sIG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAyXSwgbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdXS5qb2luKCcgJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBbbmFtZVRva2Vuc1swXSwgbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdXS5qb2luKCcgJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc01vYmlsZUFwcCgpIHtcclxuICAgIHJldHVybiAod2luZG93IGFzIGFueSkud21Db25maWcuaXNNb2JpbGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5ib3hUeXBlKHJlc3VsdCkge1xyXG4gICAgbGV0IHJ0biA9IG51bGw7XHJcbiAgICBpZiAodGhpcy5sb2dnZWRJblVzZXJJZCgpID09PSByZXN1bHQucHJvZmlsZUluZm9Ecm9wLmVtcGxveWVlRW1haWwpIHtcclxuICAgICAgcnRuID0gY29uc3RhbnRzLklOQk9YX1NUQVRVU19TRU5UO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcnRuID0gY29uc3RhbnRzLklOQk9YX1NUQVRVU19QRU5ESU5HO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJ0bjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc09wZW5PbkluYm94KCkge1xyXG4gICAgcmV0dXJuICh3aW5kb3cgYXMgYW55KS53bUNvbmZpZy5vdXRsb29rO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
532
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5zZXJ2aWNlLnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9jb3JlLnNlcnZpY2UudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFhLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDL0ksT0FBTyxLQUFLLFNBQVMsTUFBTSxjQUFjLENBQUE7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDakUsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25DLE9BQU8sYUFBYSxNQUFNLG9CQUFvQixDQUFDOzs7QUFLL0MsTUFBTSxPQUFPLFdBQVc7SUFnQkY7SUFDNkI7SUFoQmpELE1BQU0sR0FBVyxFQUFFLENBQUE7SUFDWCxTQUFTLENBQVM7SUFDbEIsWUFBWSxDQUFTO0lBQ1osYUFBYSxDQUFTO0lBQ2hDLFFBQVEsQ0FBUztJQUNQLFNBQVMsQ0FBSztJQUN4QixnQkFBZ0IsQ0FBSztJQUM1QixZQUFZLENBQVE7SUFDWixlQUFlLENBQVU7SUFDekIsY0FBYyxDQUFVO0lBQ3hCLGdCQUFnQixDQUFNO0lBQzlCLFFBQVEsQ0FBUTtJQUNoQixVQUFVLEdBQUcsRUFBRSxDQUFBO0lBQ2YsU0FBUyxDQUFLO0lBRWQsWUFBb0IsSUFBZ0IsRUFDYSxNQUFtQjtRQURoRCxTQUFJLEdBQUosSUFB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QUNoQixPQUFRLE1BQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO0lBQzNDLENBQUM7SUFFTSxZQUFZLENBQUMsTUFBTTtRQUN4QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7UUFDZixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxNQUFNLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25FLEdBQUcsR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUM7UUFDcEMsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLEdBQUcsU0FBUyxDQUFDLG9CQUFvQixDQUFDO1FBQ3ZDLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTSxhQUFhO1FBQ2xCLE9BQVEsTUFBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDMUMsQ0FBQzt1R0F6b0JVLFdBQVcsNENBaUJGLG1CQUFtQjsyR0FqQjVCLFdBQVcsY0FGVixNQUFNOzsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBa0JjLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwSGVhZGVyc30gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgdHlwZSB7TXlMaWJDb25maWd9IGZyb20gXCIuLi9pbnRlcmZhY2VzL3NoYXJlZC5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHtDb21tZW50c0Ryb3AsIEZvcm0sIEhlYWRlciwgSW5ib3hJdGVtLCBNZXNzYWdlcywgTVlfTElCX0NPTkZJR19UT0tFTiwgUHJvZmlsZUluZm9Ecm9wLCBTZWN0aW9uLCBTZWN0aW9uSGVhZGVyfSBmcm9tIFwiLi4vLi4vcHVibGljLWFwaVwiO1xyXG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge2NhdGNoRXJyb3IsIGZyb20sIG9mLCBzd2l0Y2hNYXAsIHRocm93RXJyb3J9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7bWFwfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHNhdmVGb3JtSG9va3MgZnJvbSAnLi4vaG9va3Mvc2F2ZS1mb3JtJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiBcInJvb3RcIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZVNlcnZpY2Uge1xyXG4gIGFwaVVybDogc3RyaW5nID0gJydcclxuICBwcml2YXRlIGF1dGhUb2tlbjogc3RyaW5nO1xyXG4gIHByaXZhdGUgcmVmcmVzaFRva2VuOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9qZWN0Q29uZmlnOiBzdHJpbmc7XHJcbiAgcHVibGljIHVzZXJEYXRhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbFVzZXI6IHt9O1xyXG4gIHB1YmxpYyBsb2dnZWRJblVzZXJEYXRhOiB7fTtcclxuICBjdXJyZW50QWN0b3I6IHN0cmluZ1xyXG4gIHByaXZhdGUgYXV0aG9yaXplZEVtYWlsITogc3RyaW5nO1xyXG4gIHByaXZhdGUgcmVxdWVzdGVyRW1haWwhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBjdXJyZW50U3VibWl0dGVyOiBhbnk7XHJcbiAgbGFuZ3VhZ2U6IHN0cmluZ1xyXG4gIGFjdGl2aXRpZXMgPSBbXVxyXG4gIGFwcHJvdmFsczogYW55XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICAgICAgICBASW5qZWN0KE1ZX0xJQl9DT05GSUdfVE9LRU4pIHByaXZhdGUgY29uZmlnOiBNeUxpYkNvbmZpZykge1xyXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSAod2luZG93IGFzIGFueSk/LndtQ29uZmlnPy5sYW5ndWFnZSA/ICh3aW5kb3cgYXMgYW55KS53bUNvbmZpZy5sYW5ndWFnZSA6ICdlbic7XHJcbiAgICB0aGlzLmFwaVVybCA9IHRoaXMuY29uZmlnLnByb3h5U2VydmljZUJhc2VVcmwgKyBsYW5ndWFnZSArIHRoaXMuY29uZmlnLnByb3h5RnVsbEFkZHJlc3MgKyB0aGlzLmNvbmZpZy5wcm94eVNlcnZpY2VFeGVjdXRlO1xyXG4gICAgY29uc29sZS5sb2coJ0NvbmZpZzogJywgdGhpcy5jb25maWcpO1xyXG4gICAgdGhpcy5sb2NhbFVzZXIgPSB7XHJcbiAgICAgIFwiZm9ybVByZWZpeFwiOiBcIkNFUFwiLFxyXG4gICAgICBcImZvcm1JZFwiOiBcIkNFUDU1OTU0MzJcIixcclxuICAgICAgXCJpbmJveFVyaVwiOiBcIlxcL2dyb3VwXFwvaHViXFwvaW5ib3hcIixcclxuICAgICAgXCJiYXNlVXJsXCI6IFwiXFwvZ3JvdXBcXC9pLWdhdGVcXC93bS1icG1cXC9mb3Jtc1xcLy1cXC9wcm94eVwiLFxyXG4gICAgICBcInNob3dQcmludFwiOiB0cnVlLFxyXG4gICAgICBcImxhbmd1YWdlXCI6IFwiZW5cIixcclxuICAgICAgXCJpc01vYmlsZVwiOiB0cnVlLFxyXG4gICAgICBcIm91dGxvb2tcIjogZmFsc2UsXHJcbiAgICAgIFwibG9nZ2VkSW5Vc2VyRW1haWxcIjogXCJpYnJhaGltbWFhLmNAc3RjLmNvbS5zYVwiXHJcbiAgICB9XHJcbiAgICB0aGlzLnByb2plY3RDb25maWcgPSAodGhpcy5jb25maWcucHJvZHVjdGlvbikgPyAod2luZG93IGFzIGFueSlbJ3dtQ29uZmlnJ10gOiBidG9hKEpTT04uc3RyaW5naWZ5KHRoaXMubG9jYWxVc2VyKSk7XHJcbiAgICB0aGlzLnVzZXJEYXRhID0gSlNPTi5wYXJzZShhdG9iKHRoaXMucHJvamVjdENvbmZpZykpO1xyXG4gICAgdGhpcy5sYW5ndWFnZSA9ICh3aW5kb3cgYXMgYW55KT8ud21Db25maWc/Lmxhbmd1YWdlID8gKHdpbmRvdyBhcyBhbnkpLndtQ29uZmlnLmxhbmd1YWdlIDogXCJlblwiO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldExvZ2dlZEluVXNlckRhdGEoKSB7XHJcbiAgICBsZXQgbG9nZ2VkSW5FbWFpbCA9IHRoaXMubG9nZ2VkSW5Vc2VySWQoKVxyXG4gICAgdGhpcy5lbXBsb3llZVByb2ZpbGUobG9nZ2VkSW5FbWFpbCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubG9nZ2VkSW5Vc2VyRGF0YSA9IHJlc3BvbnNlPy5bXCJVc2Vyc1wiXT8uWzBdXHJcbiAgICAgIGNvbnNvbGUubG9nKCdnZXRMb2dnZWRJblVzZXJEYXRhJywgcmVzcG9uc2UpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvYWRGb3JtKCkge1xyXG4gICAgY29uc3QgYXV0aFVybCA9IHRoaXMuYnVpbGRBdXRoVXJsKCk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhdXRoVXJsLCB7b2JzZXJ2ZTogJ3Jlc3BvbnNlJ30pLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB0b2tlbkluZm9ybWF0aW9uID0gcmVzLmJvZHk7XHJcbiAgICAgICAgdGhpcy5hdXRoVG9rZW4gPSB0b2tlbkluZm9ybWF0aW9uLnRva2VuO1xyXG4gICAgICAgIHRoaXMuZ2V0TG9nZ2VkSW5Vc2VyRGF0YSgpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaFRva2VuID0gdG9rZW5JbmZvcm1hdGlvbi5yZWZyZXNoVG9rZW47XHJcbiAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuYnVpbGRCb2R5KCk7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0UmVxdWVzdE9wdGlvbnMoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsUG9zdChib2R5LCBvcHRpb25zKTtcclxuICAgICAgfSksXHJcbiAgICAgIHN3aXRjaE1hcChwb3N0T2JzZXJ2YWJsZSA9PiBwb3N0T2JzZXJ2YWJsZSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGh0dHBFcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRocm93RXJyb3IoaHR0cEVycm9yKSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEF1dGhVcmwoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmNvbmZpZy5wcm94eVNlcnZpY2VCYXNlVXJsO1xyXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSAod2luZG93IGFzIGFueSk/LndtQ29uZmlnPy5sYW5ndWFnZSA/ICh3aW5kb3cgYXMgYW55KS53bUNvbmZpZy5sYW5ndWFnZSA6ICdlbic7XHJcbiAgICBjb25zdCBmdWxsQWRkcmVzcyA9IHRoaXMuY29uZmlnLnByb3h5RnVsbEFkZHJlc3M7XHJcbiAgICBjb25zdCBhdXRoUGFydCA9IHRoaXMuY29uZmlnLnByb3h5U2VydmljZUF1dGhvcml6YXRpb247XHJcbiAgICByZXR1cm4gYCR7YmFzZVVybH0ke2xhbmd1YWdlfSR7ZnVsbEFkZHJlc3N9JHthdXRoUGFydH0/dHM9JHsobmV3IERhdGUoKSkudmFsdWVPZigpfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkQm9keSgpOiBvYmplY3Qge1xyXG4gICAgY29uc3QgYmFzZUJvZHkgPSB7XHJcbiAgICAgIG1ldGhvZDogY29uc3RhbnRzLkhUVFBfTUVUSE9EX0dFVCxcclxuICAgICAgZGVzdGluYXRpb246IGNvbnN0YW50cy5UQVJHRVRfU0VSVkVSX1dNLFxyXG4gICAgICBzZXJ2aWNlTmFtZTogY29uc3RhbnRzLlNFUlZJQ0VfTkFNRV9XTV9GT1JNLFxyXG4gICAgICBmb3JtTmFtZTogdGhpcy5jb25maWcuZm9ybU5hbWUsXHJcbiAgICAgIGZvcm1JZDogXCJcIixcclxuICAgICAgcXVlcnlQYXJhbWV0ZXJzOiBudWxsXHJcbiAgICB9O1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5mb3JtSWQpIHtcclxuICAgICAgZGVsZXRlIGJhc2VCb2R5LmZvcm1JZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJhc2VCb2R5LmZvcm1JZCA9IHRoaXMuY29uZmlnLmZvcm1JZDtcclxuICAgIH1cclxuICAgIHJldHVybiBiYXNlQm9keTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlbXBsb3llZVByb2ZpbGUoZW1wbG95ZWVFbWFpbDogYW55KSB7XHJcbiAgICBsZXQgYm9keSA9IHtcclxuICAgICAgbWV0aG9kOiBjb25zdGFudHMuSFRUUF9NRVRIT0RfR0VULFxyXG4gICAgICBmb3JtTmFtZTogdGhpcy5jb25maWcuZm9ybU5hbWUsXHJcbiAgICAgIGRlc3RpbmF0aW9uOiBjb25zdGFudHMuVEFSR0VUX1NFUlZFUl9EUCxcclxuICAgICAgc2VydmljZU5hbWU6IGNvbnN0YW50cy5TRVJWSUNFX05BTUVfRFBfU0VBUkNIX0VNUExPWUVFLFxyXG4gICAgICBwYXJhbWV0ZXJzOiB7XHJcbiAgICAgICAgcTogZW1wbG95ZWVFbWFpbFxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuYXBpVXJsLCBib2R5LCB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgYXV0aFRva2VuOiB0aGlzLmF1dGhUb2tlbixcclxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiXHJcbiAgICAgIH0pLFxyXG4gICAgICBvYnNlcnZlOiBcImJvZHlcIlxyXG4gICAgfSkucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXHJcbiAgICAgIH0pXHJcbiAgICAgICwgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnIpXHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UmVxdWVzdE9wdGlvbnMoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgIGF1dGhUb2tlbjogdGhpcy5hdXRoVG9rZW4sXHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IGNvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFX0ZPUk1cclxuICAgICAgfSksXHJcbiAgICAgIG9ic2VydmU6ICdib2R5J1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREcmFmdElkKHZhbCkge1xyXG4gICAgcmV0dXJuIHZhbC50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgoJ0RSQUZUJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3VibWl0Rm9ybSguLi5hcmdzKSB7XHJcbiAgICBjb25zdCBbc2VjdGlvbiwgYWN0aW9uXSA9IGFyZ3M7XHJcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLmdldEh0dHBNZXRob2QoKTtcclxuICAgIGxldCBzZWN0aW9uSWQgPSB0aGlzLmJlZm9yZVRyYW5zcGlsZVNlY3Rpb25XcmFwcGVyKHNlY3Rpb24pLmlkO1xyXG4gICAgbGV0IHNlcnZpY2VOYW1lID0gdGhpcy5nZXRTZXJ2aWNlTmFtZShhY3Rpb24pO1xyXG4gICAgbGV0IGZvcm1OYW1lID0gdGhpcy5nZXRGb3JtTmFtZShhY3Rpb24pO1xyXG4gICAgbGV0IGJvZHkgPSB0aGlzLmdldEJvZHlPYmplY3QobWV0aG9kLCBzZXJ2aWNlTmFtZSwgYWN0aW9uLCBmb3JtTmFtZSwgdGhpcy5wb3B1bGF0ZWRQYXlsb2FkKHNlY3Rpb25JZCwgc2VjdGlvbiksIHRoaXMuY29uZmlnLmZvcm1JZCk7XHJcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRSZXF1ZXN0T3B0aW9ucygpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnN1Ym1pdChib2R5LCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SHR0cE1ldGhvZCgpIHtcclxuICAgIHJldHVybiAodGhpcy5jb25maWcuZm9ybUlkICYmICF0aGlzLmdldERyYWZ0SWQodGhpcy5jb25maWcuZm9ybUlkKSkgPyBjb25zdGFudHMuSFRUUF9NRVRIT0RfUFVUIDogY29uc3RhbnRzLkhUVFBfTUVUSE9EX1BPU1Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJlZm9yZVRyYW5zcGlsZVNlY3Rpb25XcmFwcGVyKHNlY3Rpb24pIHtcclxuICAgIHJldHVybiBzYXZlRm9ybUhvb2tzLmJlZm9yZVRyYW5zcGlsZVNlY3Rpb24gPyBzYXZlRm9ybUhvb2tzLmJlZm9yZVRyYW5zcGlsZVNlY3Rpb24oc2VjdGlvbikgOiBzZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZXJ2aWNlTmFtZShhY3Rpb24pIHtcclxuICAgIGlmIChhY3Rpb24gPT09IGNvbnN0YW50cy5XTV9BQ1RJT05fU0FWRV9DSEFOR0VTKSB7XHJcbiAgICAgIHJldHVybiBjb25zdGFudHMuU0VSVklDRV9OQU1FX1dNX0RSQUZUX0ZPUk1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBjb25zdGFudHMuU0VSVklDRV9OQU1FX1dNX0ZPUk1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Rm9ybU5hbWUoYWN0aW9uKSB7XHJcbiAgICBpZiAoYWN0aW9uID09PSBjb25zdGFudHMuV01fQUNUSU9OX1NBVkVfQ0hBTkdFUykge1xyXG4gICAgICByZXR1cm4gJ2NvbW1vbic7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZm9ybU5hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBvcHVsYXRlZFBheWxvYWQoc2VjdGlvbklkLCBzZWN0aW9uKSB7XHJcbiAgICBsZXQgcGF5bG9hZDtcclxuICAgIGlmIChzZWN0aW9uSWQgPT09IGNvbnN0YW50cy5TRUNUSU9OX0lEX1JFUVVFU1RfREVUQUlMUykge1xyXG4gICAgICBwYXlsb2FkID0ge3JlcXVlc3Q6IHtkZXRhaWxzOiBzZWN0aW9uLmJvZHkuZGV0YWlsc319O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGF5bG9hZCA9IHt3b3JrZmxvd1N0ZXBzOiB7fX07XHJcbiAgICAgIHBheWxvYWQud29ya2Zsb3dTdGVwcy5kZXRhaWxzID0gc2VjdGlvbi5ib2R5LmRldGFpbHM7XHJcbiAgICAgIHBheWxvYWQud29ya2Zsb3dTdGVwcy5hY3RvciA9IHRoaXMuY3VycmVudFN1Ym1pdHRlci5hY3RvcjtcclxuICAgICAgcGF5bG9hZC53b3JrZmxvd1N0ZXBzLmFjdG9yLmVtYWlsID0gdGhpcy5jdXJyZW50QWN0b3I7XHJcbiAgICAgIHBheWxvYWQud29ya2Zsb3dTdGVwcy5zdGF0dXMgPSBjb25zdGFudHMuU0VDVElPTl9TVEFUVVNfUEVORElORztcclxuICAgIH1cclxuICAgIHJldHVybiBwYXlsb2FkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCb2R5T2JqZWN0KG1ldGhvZCwgc2VydmljZU5hbWUsIGFjdGlvbiwgZm9ybU5hbWUsIHBheWxvYWQsIGZvcm1JZCkge1xyXG4gICAgbGV0IGJvZHkgPSB7XHJcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxyXG4gICAgICBkZXN0aW5hdGlvbjogY29uc3RhbnRzLlRBUkdFVF9TRVJWRVJfV00sXHJcbiAgICAgIHNlcnZpY2VOYW1lOiBzZXJ2aWNlTmFtZSxcclxuICAgICAgcGFyYW1ldGVyczoge1xyXG4gICAgICAgIGFjdGlvbjogYWN0aW9uXHJcbiAgICAgIH0sXHJcbiAgICAgIGZvcm1OYW1lOiBmb3JtTmFtZSxcclxuICAgICAgYm9keTogcGF5bG9hZCxcclxuICAgICAgZm9ybUlkOiBmb3JtSWQsXHJcbiAgICAgIHF1ZXJ5UGFyYW1ldGVyczoge30sXHJcbiAgICAgIHBheWxvYWRcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb25maWcuZm9ybUlkKSB7XHJcbiAgICAgIGJvZHkuZm9ybUlkID0gdGhpcy5jb25maWcuZm9ybUlkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5hdXRob3JpemVkRW1haWwgfHwgIXRoaXMuYXV0aG9yaXplZEVtYWlsLmxlbmd0aCB8fCB0aGlzLmF1dGhvcml6ZWRFbWFpbCA9PT0gdGhpcy5yZXF1ZXN0ZXJFbWFpbCkge1xyXG4gICAgICBkZWxldGUgYm9keS5xdWVyeVBhcmFtZXRlcnM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNhdmVGb3JtSG9va3MuYmVmb3JlU2VuZFBheWxvYWQpIHtcclxuICAgICAgYm9keS5wYXlsb2FkID0gc2F2ZUZvcm1Ib29rcy5iZWZvcmVTZW5kUGF5bG9hZChib2R5LnBheWxvYWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBib2R5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxsUG9zdChib2R5LCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCBsYW5ndWFnZSA9ICh3aW5kb3cgYXMgYW55KT8ud21Db25maWc/Lmxhbmd1YWdlID8gKHdpbmRvdyBhcyBhbnkpLndtQ29uZmlnLmxhbmd1YWdlIDogXCJlblwiO1xyXG4gICAgbGV0IGFwaVVybCA9IHRoaXMuY29uZmlnLnByb3h5U2VydmljZUJhc2VVcmwgKyBsYW5ndWFnZSArIHRoaXMuY29uZmlnLnByb3h5RnVsbEFkZHJlc3MgKyB0aGlzLmNvbmZpZy5wcm94eVNlcnZpY2VFeGVjdXRlO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGFwaVVybCwgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGJvZHkpKSwgb3B0aW9ucykudG9Qcm9taXNlKClcclxuICAgICAgLnRoZW4oXHJcbiAgICAgICAgKHJlc3BvbnNlT2JqZWN0OiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnN1Y2Nlc3NXbShyZXNwb25zZU9iamVjdClcclxuICAgICAgICB9LFxyXG4gICAgICApLmNhdGNoKFxyXG4gICAgICAgIChodHRwRXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoaHR0cEVycm9yKVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3VibWl0KGJvZHk6IGFueSwgb3B0aW9uczogYW55KSB7XHJcbiAgICBjb25zdCBsYW5ndWFnZSA9ICh3aW5kb3cgYXMgYW55KT8ud21Db25maWc/Lmxhbmd1YWdlID8gKHdpbmRvdyBhcyBhbnkpLndtQ29uZmlnLmxhbmd1YWdlIDogXCJlblwiO1xyXG4gICAgY29uc3QgYXBpVXJsID0gdGhpcy5jb25maWcucHJveHlTZXJ2aWNlQmFzZVVybCArIGxhbmd1YWdlICsgdGhpcy5jb25maWcucHJveHlGdWxsQWRkcmVzcyArIHRoaXMuY29uZmlnLnByb3h5U2VydmljZUV4ZWN1dGU7XHJcblxyXG4gICAgLy8gQ29udmVydCB0aGUgcHJvbWlzZSB0byBhbiBvYnNlcnZhYmxlXHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgdGhpcy5odHRwLnBvc3QoYXBpVXJsLCBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoYm9keSkpLCBvcHRpb25zKS50b1Byb21pc2UoKS50aGVuKFxyXG4gICAgICAgIChyZXNwb25zZU9iamVjdDogYW55KSA9PiB7XHJcbiAgICAgICAgICBsZXQgZm9ybVJlc3BvbnNlID0gcmVzcG9uc2VPYmplY3QuZGF0YS5mb3JtO1xyXG4gICAgICAgICAgaWYgKHNhdmVGb3JtSG9va3MuYWZ0ZXJTZW5kUGF5bG9hZCkge1xyXG4gICAgICAgICAgICBmb3JtUmVzcG9uc2UgPSBzYXZlRm9ybUhvb2tzLmFmdGVyU2VuZFBheWxvYWQoZm9ybVJlc3BvbnNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgIGlkOiBudWxsLFxyXG4gICAgICAgICAgICBzdGF0dXM6IG51bGwsXHJcbiAgICAgICAgICAgIG5leHRBcHByb3Zlcjoge1xyXG4gICAgICAgICAgICAgIG5hbWU6IG51bGwsXHJcbiAgICAgICAgICAgICAgZW1haWw6IG51bGwsXHJcbiAgICAgICAgICAgICAgcm9sZTogbnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjcmVhdGlvbkRhdGU6IG51bGxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXN1bHQuaWQgPSBmb3JtUmVzcG9uc2UuZm9ybUlkO1xyXG4gICAgICAgICAgcmVzdWx0LnN0YXR1cyA9IGZvcm1SZXNwb25zZVsnZm9ybVN0YXR1cyddO1xyXG4gICAgICAgICAgaWYgKGZvcm1SZXNwb25zZS5jdXJyZW50QWN0b3IpIHtcclxuICAgICAgICAgICAgcmVzdWx0Lm5leHRBcHByb3ZlciA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBmb3JtUmVzcG9uc2UuY3VycmVudEFjdG9yLm5hbWUsXHJcbiAgICAgICAgICAgICAgZW1haWw6IGZvcm1SZXNwb25zZS5jdXJyZW50QWN0b3IuZW1haWwsXHJcbiAgICAgICAgICAgICAgcm9sZTogZm9ybVJlc3BvbnNlWydmb3JtU3RlcCddXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc3VsdC5jcmVhdGlvbkRhdGUgPSBmb3JtUmVzcG9uc2UuY3JlYXRpb25EYXRlO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LCAoaHR0cEVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRocm93IGh0dHBFcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1Y2Nlc3NXbSguLi5hcmdzKSB7XHJcbiAgICBsZXQgW3BheWxvYWRdID0gYXJncztcclxuICAgIGxldCB3YXNTZW5kQmFjayA9IGZhbHNlO1xyXG4gICAgLyogQ29udmVydCBpbnRvIEZvcm0gT2JqZWN0ICovXHJcbiAgICBsZXQgcmVzdWx0ID0gbmV3IEZvcm0oXHJcbiAgICAgIGNvbnN0YW50cy5OT19WQUxVRSxcclxuICAgICAgY29uc3RhbnRzLk5PX1ZBTFVFLFxyXG4gICAgICBjb25zdGFudHMuTk9fVkFMVUUsXHJcbiAgICAgIGNvbnN0YW50cy5OT19WQUxVRSxcclxuICAgICAgY29uc3RhbnRzLk5PX1ZBTFVFLFxyXG4gICAgICBjb25zdGFudHMuTk9fVkFMVUUsXHJcbiAgICAgIGNvbnN0YW50cy5OT19WQUxVRVxyXG4gICAgKTtcclxuICAgIHRoaXMucmVxdWVzdGVyRW1haWwgPSBwYXlsb2FkLmRhdGFbJ3JlcXVlc3RlciddLmVtcGxveWVlRW1haWw7XHJcbiAgICB0aGlzLmF1dGhvcml6ZWRFbWFpbCA9IHBheWxvYWQuZGF0YVsncmVxdWVzdGVyJ10uYXV0aG9yaXplZEVtYWlsO1xyXG4gICAgLyogR2VuZXJhdGUgSGVhZGVyIE9iamVjdCAqL1xyXG4gICAgbGV0IHBheWxvYWRGb3JtRGV0YWlscyA9IHBheWxvYWQuZGF0YS5mb3JtO1xyXG4gICAgbGV0IGlzUmVhZE9ubHkgPSAocGF5bG9hZEZvcm1EZXRhaWxzLnJlYWRPbmx5LnRvVXBwZXJDYXNlKCkgPT09IGNvbnN0YW50cy5UUlVFX1NUUklORyA/IGNvbnN0YW50cy5UUlVFX0JPT0wgOiAocGF5bG9hZEZvcm1EZXRhaWxzLnJlYWRPbmx5LnRvVXBwZXJDYXNlKCkgPT09IGNvbnN0YW50cy5GQUxTRV9TVFJJTkcgPyBjb25zdGFudHMuRkFMU0VfQk9PTCA6IGNvbnN0YW50cy5OT19WQUxVRSkpXHJcbiAgICByZXN1bHQuaGVhZGVyID0gbmV3IEhlYWRlcihcclxuICAgICAgcGF5bG9hZC5kYXRhWydyZXF1ZXN0ZXInXS5mdWxsTmFtZSxcclxuICAgICAgY29uc3RhbnRzLklHQVRFX1NUQVRJQ19BU1NFVF9QUk9GSUxFX1BIT1RPX1VSTCArIHBheWxvYWQuZGF0YVsncmVxdWVzdGVyJ10uZW1wbG95ZWVFbWFpbCxcclxuICAgICAgKHBheWxvYWRGb3JtRGV0YWlscy5mb3JtSWQgPyBwYXlsb2FkRm9ybURldGFpbHMuZm9ybUlkIDogY29uc3RhbnRzLkRPTlRfU0hPVyksXHJcbiAgICAgIChwYXlsb2FkRm9ybURldGFpbHMuY3JlYXRpb25EYXRlID8gcGF5bG9hZEZvcm1EZXRhaWxzLmNyZWF0aW9uRGF0ZSA6IGNvbnN0YW50cy5ET05UX1NIT1cpLFxyXG4gICAgICBwYXlsb2FkRm9ybURldGFpbHNbJ2Zvcm1TdGF0dXMnXSxcclxuICAgICAgcGF5bG9hZEZvcm1EZXRhaWxzLmRldGFpbHNcclxuICAgICk7XHJcbiAgICAvKiBHZW5lcmF0ZSBQcm9maWxlIEluZm9ybWF0aW9uIE9iamVjdCAqL1xyXG4gICAgbGV0IHBheWxvYWRQcm9maWxlSW5mbyA9IHBheWxvYWQuZGF0YVsncmVxdWVzdGVyJ107XHJcbiAgICByZXN1bHQucHJvZmlsZUluZm9Ecm9wID0gbmV3IFByb2ZpbGVJbmZvRHJvcChcclxuICAgICAgKHBheWxvYWRQcm9maWxlSW5mb1snb25CZWhhbGZBdXRob3JpemVkJ10gPyBKU09OLnBhcnNlKHBheWxvYWRQcm9maWxlSW5mb1snb25CZWhhbGZBdXRob3JpemVkJ10pIDogbnVsbCksXHJcbiAgICAgIHBheWxvYWRQcm9maWxlSW5mb1snZW1wbG95ZWVJZCddLFxyXG4gICAgICBwYXlsb2FkUHJvZmlsZUluZm8uZW1wbG95ZWVFbWFpbCxcclxuICAgICAgcGF5bG9hZFByb2ZpbGVJbmZvLmZ1bGxOYW1lLFxyXG4gICAgICBwYXlsb2FkUHJvZmlsZUluZm8uZ2VuZXJhbERlcGFydG1lbnROYW1lLFxyXG4gICAgICBwYXlsb2FkUHJvZmlsZUluZm8uam9iUG9zaXRpb24sXHJcbiAgICAgIHBheWxvYWRQcm9maWxlSW5mb1snc2VjdG9yTmFtZSddLFxyXG4gICAgICBwYXlsb2FkUHJvZmlsZUluZm8uZGVwYXJ0bWVudE5hbWUsXHJcbiAgICAgIHBheWxvYWRQcm9maWxlSW5mby5nZW5lcmFsRGVwYXJ0bWVudENvZGUsXHJcbiAgICAgIHBheWxvYWRQcm9maWxlSW5mb1snaHVtYW5SZXNvdXJjZUxvY2F0aW9uJ10sXHJcbiAgICAgIHBheWxvYWRQcm9maWxlSW5mby5uYXRpb25hbGl0eSxcclxuICAgICAgcGF5bG9hZFByb2ZpbGVJbmZvLmJ1c2luZXNzUGhvbmUsXHJcbiAgICAgIHBheWxvYWRQcm9maWxlSW5mb1snZGlyZWN0TWFuYWdlck5hbWUnXSxcclxuICAgICAgcGF5bG9hZFByb2ZpbGVJbmZvLnNlbmlvclNlY3Rvck5hbWVcclxuICAgICk7XHJcbiAgICByZXN1bHQuc2VjdGlvbnMgPSBbXTtcclxuICAgIGxldCByZXF1ZXN0RGV0YWlsc0hhc0NvbW1lbnQgPSBmYWxzZTtcclxuICAgIGlmIChwYXlsb2FkLmRhdGEucmVxdWVzdC5kZXRhaWxzLmNvbW1lbnQpIHtcclxuICAgICAgcmVxdWVzdERldGFpbHNIYXNDb21tZW50ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJlc3VsdC5zZWN0aW9ucy5wdXNoKFxyXG4gICAgICBuZXcgU2VjdGlvbihcclxuICAgICAgICBjb25zdGFudHMuU0VDVElPTl9JRF9SRVFVRVNUX0RFVEFJTFMsXHJcbiAgICAgICAgbmV3IFNlY3Rpb25IZWFkZXIoY29uc3RhbnRzLkRPTlRfU0hPVywgY29uc3RhbnRzLkRPTlRfU0hPVywgY29uc3RhbnRzLkRPTlRfU0hPVywgY29uc3RhbnRzLkRPTlRfU0hPVywgY29uc3RhbnRzLkRPTlRfU0hPVywgY29uc3RhbnRzLkRPTlRfU0hPVywgY29uc3RhbnRzLkRPTlRfU0hPVywgcmVxdWVzdERldGFpbHNIYXNDb21tZW50LCAocGF5bG9hZC5kYXRhWyd3b3JrZmxvd1N0ZXBzJ10gPyBjb25zdGFudHMuUkVBRF9PTkxZIDogaXNSZWFkT25seSkpLFxyXG4gICAgICAgIHBheWxvYWQuZGF0YS5yZXF1ZXN0XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHJlc3VsdC5oZWFkZXIuZm9ybUlkKSB7XHJcbiAgICAgIHJlc3VsdC5jb21tZW50c0Ryb3AgPSAoIXJlc3VsdC5jb21tZW50c0Ryb3AgPyBbXSA6IHJlc3VsdC5jb21tZW50c0Ryb3ApO1xyXG4gICAgICB0aGlzLmxvYWRIaXN0b3J5KHJlc3VsdC5oZWFkZXIuZm9ybUlkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICByZXNwb25zZS5pdGVtcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaXRlbS5zZXF1ZW5jZU51bWJlciAhPT0gJzAnICYmIGl0ZW0ucHJvY2Vzc2VkQnkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBpdGVtLnByb2Nlc3NlZEJ5WydmaXJzdE5hbWUnXSArICcgJyArIGl0ZW0ucHJvY2Vzc2VkQnlbJ3NlY29uZE1pZGRsZU5hbWUnXSArICcgJyArIGl0ZW0ucHJvY2Vzc2VkQnlbJ2ZhbWlseU5hbWUnXTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5jb21tZW50c0Ryb3AucHVzaChuZXcgQ29tbWVudHNEcm9wKFxyXG4gICAgICAgICAgICAgICAgICBjb25zdGFudHMuSUdBVEVfU1RBVElDX0FTU0VUX1BST0ZJTEVfUEhPVE9fVVJMICsgaXRlbS5wcm9jZXNzZWRCeS5lbWFpbCxcclxuICAgICAgICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgICAgICAgaXRlbS5jb21tZW50cyxcclxuICAgICAgICAgICAgICAgICAgaXRlbVsnbW9kaWZpZWREYXRlJ10sXHJcbiAgICAgICAgICAgICAgICAgIGl0ZW0uYXR0YWNobWVudHMsXHJcbiAgICAgICAgICAgICAgICAgIGl0ZW0ucHJvY2Vzc2VkQnkuam9iXHJcbiAgICAgICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNvbnN0IGluYm94VHlwZSA9IHRoaXMuZ2V0SW5ib3hUeXBlKHJlc3VsdCk7XHJcbiAgICBpZiAocmVzdWx0LmhlYWRlci5mb3JtSWQgJiYgKCF0aGlzLmlzT3Blbk9uSW5ib3goKSkpIHtcclxuICAgICAgdGhpcy5nZXRJbmJveEl0ZW0ocmVzdWx0LmhlYWRlci5mb3JtSWQsIGluYm94VHlwZSkuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHJlc3BvbnNlLml0ZW07XHJcbiAgICAgICAgICAgIHJlc3VsdC5pbmJveEl0ZW0gPSBuZXcgSW5ib3hJdGVtKFxyXG4gICAgICAgICAgICAgIGl0ZW1bJ2ZsYWdnaW5nJ10uZmxhZ1ByaW9yaXR5LFxyXG4gICAgICAgICAgICAgIGl0ZW1bJ2ZsYWdnaW5nJ11bJ2lzRmxhZ2dlZCddLFxyXG4gICAgICAgICAgICAgIGl0ZW0uZmVlZGJhY2tbJ2NhblJlcXVlc3RGZWVkYmFjayddLFxyXG4gICAgICAgICAgICAgIGl0ZW0uZmVlZGJhY2tbJ2hhc0ZlZWRiYWNrJ10sXHJcbiAgICAgICAgICAgICAgaXRlbS5mZWVkYmFja1snaXNQZW5kaW5nJ10sXHJcbiAgICAgICAgICAgICAgaXRlbS5mZWVkYmFja1snaXNSZXF1ZXN0ZWQnXSxcclxuICAgICAgICAgICAgICBpdGVtLmZlZWRiYWNrWydpc1Jlc3BvbmRlZCddXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGF5bG9hZFdvcmtmbG93U3RlcHMgPSBwYXlsb2FkLmRhdGEud29ya2Zsb3dTdGVwcztcclxuICAgIGlmIChwYXlsb2FkV29ya2Zsb3dTdGVwcyAmJiBwYXlsb2FkV29ya2Zsb3dTdGVwcy5jb25zdHJ1Y3RvciA9PT0gQXJyYXkgJiYgcGF5bG9hZFdvcmtmbG93U3RlcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBwYXlsb2FkV29ya2Zsb3dTdGVwcy5mb3JFYWNoKChzdGVwLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGxldCBjdXJyZW50SXNSZXF1ZXN0ZXJTZW5kQmFjayA9IEpTT04uc3RyaW5naWZ5KHN0ZXAuZGV0YWlscykgPT09IEpTT04uc3RyaW5naWZ5KHt9KTtcclxuICAgICAgICBsZXQgaGFzQ29tbWVudHMgPSAoIWN1cnJlbnRJc1JlcXVlc3RlclNlbmRCYWNrICYmIChzdGVwLmRldGFpbHMuY29tbWVudCB8fCBzdGVwLmNvbW1lbnQpID8gY29uc3RhbnRzLkhBU19DT01NRU5UUyA6IGNvbnN0YW50cy5OT19DT01NRU5UUyk7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRBY3RvciA9IChzdGVwLmFjdG9yLmVtYWlsID09PSBzdGVwLmFjdG9yLnJlY2lwaWVudC5lbWFpbCA/IHN0ZXAuYWN0b3IucmVjaXBpZW50IDogKHN0ZXAuYWN0b3IuZGVsZWdhdGUgPyBzdGVwLmFjdG9yLmRlbGVnYXRlIDogbnVsbCkpXHJcbiAgICAgICAgLyogaWYgKGhhc0NvbW1lbnRzKSB7XHJcbiAgICAgICAgICAgcmVzdWx0LmNvbW1lbnRzRHJvcCA9ICghcmVzdWx0LmNvbW1lbnRzRHJvcCA/IFtdIDogcmVzdWx0LmNvbW1lbnRzRHJvcCk7XHJcbiAgICAgICAgICAgaWYgKHN0ZXAuZGV0YWlscy5hdHRhY2htZW50ICYmIHN0ZXAuZGV0YWlscy5hdHRhY2htZW50LmF0dGFjaG1lbnRJZCAmJiB0aGlzLmNvbmZpZy5wcm9kdWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAvLyB0aGlzLnN0YXRlID0gY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfU1RBVFVTX0lETEU7XHJcbiAgICAgICAgICAgICAvISogICAgICAgICAgIHRoaXMuZGlzcGF0Y2goY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfQUNUSU9OX0xPQURfRklMRSwgc3RlcC5kZXRhaWxzLmF0dGFjaG1lbnQuYXR0YWNobWVudElkKS50aGVuKChyZXNwb25zZU9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWxlSW5mb3JtYXRpb24gPSByZXNwb25zZU9iamVjdC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QWN0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8hKnRoaXMuZGlzcGF0Y2goY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfQUNUSU9OX0VNUExPWUVFX1BST0ZJTEUsIGN1cnJlbnRBY3Rvci5lbWFpbCkudGhlbigocHJvZmlsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuY29tbWVudHNEcm9wLnB1c2gobmV3IENvbW1lbnRzRHJvcChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudHMuSUdBVEVfU1RBVElDX0FTU0VUX1BST0ZJTEVfUEhPVE9fVVJMICsgY3VycmVudEFjdG9yLmVtYWlsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRBY3Rvci5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGVwLmRldGFpbHMuY29tbWVudCA/IHN0ZXAuZGV0YWlscy5jb21tZW50IDogKHN0ZXAuY29tbWVudCA/IHN0ZXAuY29tbWVudCA6IG51bGwpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwLmRhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUluZm9ybWF0aW9uLmZpbGVOYW1lICsgXCJ8ZGF0YTpcIiArIGZpbGVJbmZvcm1hdGlvbi5taW1lVHlwZSArIFwiO2Jhc2U2NCxcIiArIGZpbGVJbmZvcm1hdGlvbi5maWxlQ29udGVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZS5qb2IubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkqIS9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfU1RBVFVTX0ZFVENISU5HOyohL1xyXG4gICAgICAgICAgIH0gZWxzZSBpZiAoc3RlcC5kZXRhaWxzLmF0dGFjaG1lbnRJZCkge1xyXG4gICAgICAgICAgICAgLyEqIHRoaXMuc3RhdGUgPSBjb25zdGFudHMuU1RBVEVfTUFDSElORV9TVEFUVVNfSURMRTtcclxuICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoKGNvbnN0YW50cy5TVEFURV9NQUNISU5FX0FDVElPTl9MT0FEX0ZJTEUsIHN0ZXAuZGV0YWlscy5hdHRjaG1lbnRJZCkudGhlbigocmVzcG9uc2VPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBmaWxlSW5mb3JtYXRpb24gPSByZXNwb25zZU9iamVjdC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRBY3Rvcikge1xyXG4gICAgICAgICAgICAgICAgICAvISp0aGlzLmRpc3BhdGNoKGNvbnN0YW50cy5TVEFURV9NQUNISU5FX0FDVElPTl9FTVBMT1lFRV9QUk9GSUxFLCBjdXJyZW50QWN0b3IuZW1haWwpLnRoZW4oKHByb2ZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuY29tbWVudHNEcm9wLnB1c2gobmV3IENvbW1lbnRzRHJvcChcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cy5JR0FURV9TVEFUSUNfQVNTRVRfUFJPRklMRV9QSE9UT19VUkwgKyBjdXJyZW50QWN0b3IuZW1haWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50QWN0b3IubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgIChzdGVwLmRldGFpbHMuY29tbWVudCA/IHN0ZXAuZGV0YWlscy5jb21tZW50IDogKHN0ZXAuY29tbWVudCA/IHN0ZXAuY29tbWVudCA6IG51bGwpKSxcclxuICAgICAgICAgICAgICAgICAgICAgIHN0ZXAuZGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGZpbGVJbmZvcm1hdGlvbi5maWxlTmFtZSArIFwifGRhdGE6XCIgKyBmaWxlSW5mb3JtYXRpb24ubWltZVR5cGUgKyBcIjtiYXNlNjQsXCIgKyBmaWxlSW5mb3JtYXRpb24uZmlsZUNvbnRlbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZS5qb2IubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICkpXHJcbiAgICAgICAgICAgICAgICAgIH0pKiEvXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IGNvbnN0YW50cy5TVEFURV9NQUNISU5FX1NUQVRVU19GRVRDSElORzsqIS9cclxuICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgaWYgKGN1cnJlbnRBY3Rvcikge1xyXG4gICAgICAgICAgICAgICB0aGlzLmVtcGxveWVlUHJvZmlsZShjdXJyZW50QWN0b3IuZW1haWwpLnN1YnNjcmliZSgocHJvZmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jb21tZW50c0Ryb3AucHVzaChuZXcgQ29tbWVudHNEcm9wKFxyXG4gICAgICAgICAgICAgICAgICAgICBjb25zdGFudHMuSUdBVEVfU1RBVElDX0FTU0VUX1BST0ZJTEVfUEhPVE9fVVJMICsgY3VycmVudEFjdG9yLmVtYWlsLFxyXG4gICAgICAgICAgICAgICAgICAgICBjdXJyZW50QWN0b3IubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgKHN0ZXAuZGV0YWlscy5jb21tZW50ID8gc3RlcC5kZXRhaWxzLmNvbW1lbnQgOiAoc3RlcC5jb21tZW50ID8gc3RlcC5jb21tZW50IDogbnVsbCkpLFxyXG4gICAgICAgICAgICAgICAgICAgICBzdGVwLmRhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUuam9iLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICkpXHJcbiAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgICB9XHJcbiAgICAgICAgIH0qL1xyXG5cclxuICAgICAgICBpZiAod2FzU2VuZEJhY2sgJiYgc3RlcC5hY3Rvci5yZWNpcGllbnQucm9sZSA9PT0gJ1JFUVVFU1RFUicpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwid2FzU2VuZEJhY2sgJiYgUkVRVUVTVEVSXCIpXHJcbiAgICAgICAgICByZXN1bHQuc2VjdGlvbnMgPSBbbmV3IFNlY3Rpb24oXHJcbiAgICAgICAgICAgIGNvbnN0YW50cy5TRUNUSU9OX0lEX1JFUVVFU1RfREVUQUlMUyxcclxuICAgICAgICAgICAgbmV3IFNlY3Rpb25IZWFkZXIoXHJcbiAgICAgICAgICAgICAgY29uc3RhbnRzLkRPTlRfU0hPVyxcclxuICAgICAgICAgICAgICBjb25zdGFudHMuRE9OVF9TSE9XLFxyXG4gICAgICAgICAgICAgIGNvbnN0YW50cy5ET05UX1NIT1csXHJcbiAgICAgICAgICAgICAgY29uc3RhbnRzLkRPTlRfU0hPVyxcclxuICAgICAgICAgICAgICBjb25zdGFudHMuRE9OVF9TSE9XLFxyXG4gICAgICAgICAgICAgIGNvbnN0YW50cy5ET05UX1NIT1csXHJcbiAgICAgICAgICAgICAgY29uc3RhbnRzLkRPTlRfU0hPVyxcclxuICAgICAgICAgICAgICByZXF1ZXN0RGV0YWlsc0hhc0NvbW1lbnQsXHJcbiAgICAgICAgICAgICAgKHBheWxvYWQuZGF0YS53b3JrZmxvd1N0ZXBzID8gY29uc3RhbnRzLlJFQURfT05MWSA6IGlzUmVhZE9ubHkpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHBheWxvYWQuZGF0YS5yZXF1ZXN0XHJcbiAgICAgICAgICApXVxyXG4gICAgICAgIH0gZWxzZSBpZiAod2FzU2VuZEJhY2spIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiUG9wXCIpXHJcbiAgICAgICAgICBpZiAocmVzdWx0LnNlY3Rpb25zLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnNlY3Rpb25zLnBvcCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgd2FzU2VuZEJhY2sgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAoc3RlcC5kZXRhaWxzLmRlY2lzaW9uICYmIHN0ZXAuZGV0YWlscy5kZWNpc2lvbi5rZXkgPT09IGNvbnN0YW50cy5GT1JNX1NUQVRVU19TRU5EX0JBQ0spIHtcclxuICAgICAgICAgIHdhc1NlbmRCYWNrID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKEpTT04uc3RyaW5naWZ5KHN0ZXAuZGV0YWlscykgIT09IEpTT04uc3RyaW5naWZ5KHt9KSkge1xyXG4gICAgICAgICAgcmVzdWx0LnNlY3Rpb25zLnB1c2goXHJcbiAgICAgICAgICAgIG5ldyBTZWN0aW9uKFxyXG4gICAgICAgICAgICAgIHN0ZXAuYWN0b3IucmVjaXBpZW50LnJvbGUudG9Mb3dlckNhc2UoKSArIGNvbnN0YW50cy5TRUNUSU9OX0lEX0FQUFJPVkFMX1BBUlRJQUxfTkFNRSxcclxuICAgICAgICAgICAgICBuZXcgU2VjdGlvbkhlYWRlcihcclxuICAgICAgICAgICAgICAgIChjdXJyZW50QWN0b3IgPyB0aGlzLmdldFNob3J0TmFtZShjdXJyZW50QWN0b3IubmFtZSkgOiBcIlwiKS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgc3RlcC5kYXRlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTaG9ydE5hbWUoc3RlcC5hY3Rvci5yZWNpcGllbnQubmFtZSkudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIGNvbnN0YW50cy5JR0FURV9TVEFUSUNfQVNTRVRfUFJPRklMRV9QSE9UT19VUkwgKyBzdGVwLmFjdG9yLnJlY2lwaWVudC5lbWFpbCxcclxuICAgICAgICAgICAgICAgIChzdGVwLmFjdG9yLmRlbGVnYXRlPy5uYW1lID8gdGhpcy5nZXRTaG9ydE5hbWUoc3RlcC5hY3Rvci5kZWxlZ2F0ZS5uYW1lKSA6IFwiXCIpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAoc3RlcC5hY3Rvci5kZWxlZ2F0ZT8uZW1haWwgPyBjb25zdGFudHMuSUdBVEVfU1RBVElDX0FTU0VUX1BST0ZJTEVfUEhPVE9fVVJMICsgc3RlcC5hY3Rvci5kZWxlZ2F0ZS5lbWFpbCA6IFwiXCIpLFxyXG4gICAgICAgICAgICAgICAgc3RlcC5hY3Rvci5zdGF0dXMsXHJcbiAgICAgICAgICAgICAgICBoYXNDb21tZW50cyxcclxuICAgICAgICAgICAgICAgIChpbmRleCA8IHBheWxvYWRXb3JrZmxvd1N0ZXBzLmxlbmd0aCAtIDEgPyBjb25zdGFudHMuUkVBRF9PTkxZIDogaXNSZWFkT25seSlcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHtkZXRhaWxzOiBzdGVwLmRldGFpbHMsIHByb2Nlc3NpbmdEYXRlOiBzdGVwLmRhdGV9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRTdWJtaXR0ZXIgPSB7YWN0b3I6IHN0ZXAuYWN0b3IsIHJlY2lwaWVudDogc3RlcC5yZWNpcGllbnQsIGRlbGVnYXRlOiBzdGVwLmFjdG9yLmRlbGVnYXRlfTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyogQ3JlYXRlIExvdiBTZWN0aW9ucyAqL1xyXG4gICAgcmVzdWx0LmxvdnMgPSAocGF5bG9hZC5tZXRhICYmIHBheWxvYWQubWV0YS5sb3ZzID8gcGF5bG9hZC5tZXRhLmxvdnMgOiBudWxsKTtcclxuXHJcbiAgICBpZiAocGF5bG9hZC5tZXRhICYmIHBheWxvYWQubWV0YS5tZXNzYWdlcykge1xyXG4gICAgICByZXN1bHQubWVzc2FnZXMgPSBuZXcgTWVzc2FnZXMoXHJcbiAgICAgICAge30sXHJcbiAgICAgICAgW10sXHJcbiAgICAgICAgW10sXHJcbiAgICAgICAgW11cclxuICAgICAgKTtcclxuICAgICAgcGF5bG9hZC5tZXRhLm1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcclxuICAgICAgICByZXN1bHQubWVzc2FnZXMub3JpZ2luYWxNc2dzLnB1c2gobWVzc2FnZSk7XHJcbiAgICAgICAgcmVzdWx0Lm1lc3NhZ2VzW21lc3NhZ2UudHlwZV0ucHVzaChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyByZXN1bHQubWVzc2FnZXMgPSAocGF5bG9hZC5tZXRhICYmIHBheWxvYWQubWV0YS5tZXNzYWdlcyA/IHBheWxvYWQubWV0YS5tZXNzYWdlcyA6IG51bGwpO1xyXG4gICAgLyogRml4IGxhc3Qgc2VjdGlvbiB0byBiZSB0aGUgUk8vV00gZnJvbSB0aGUgdmFyaWFibGUgKi9cclxuICAgIHJlc3VsdC5zZWN0aW9uc1tyZXN1bHQuc2VjdGlvbnMubGVuZ3RoIC0gMV0uaGVhZGVyLnJlYWRPbmx5ID0gaXNSZWFkT25seTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZEZpbGUoLi4uYXJnczogYW55KSB7XHJcbiAgICBjb25zdCBbaWRdID0gYXJncztcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuY29uZmlnLnByb3h5RnVsbEFkZHJlc3MgKyB0aGlzLmNvbmZpZy5wcm94eVNlcnZpY2VGb3JtcyArIHRoaXMuY29uZmlnLmZvcm1JZCArIHRoaXMuY29uZmlnLnByb3h5U2VydmljZUF0dGFjaG1lbnQgKyBpZCwge29ic2VydmU6ICdyZXNwb25zZSd9KS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkYXRhVVJJdG9CbG9iKGRhdGFVUkk6IGFueSkge1xyXG4gICAgY29uc3QgYnl0ZVN0cmluZyA9IGF0b2IoZGF0YVVSSSk7XHJcbiAgICBjb25zdCBhcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihieXRlU3RyaW5nLmxlbmd0aCk7XHJcbiAgICBjb25zdCBpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaW50OEFycmF5W2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBCbG9iKFthcnJheUJ1ZmZlcl0sIHt0eXBlOiAnaW1hZ2UvanBlZyd9KTtcclxuICB9XHJcblxyXG4gIHNldEZsYWdQcmlvcml0eShpZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgYm9keSA9IHtcclxuICAgICAgbWV0aG9kOiBjb25zdGFudHMuSFRUUF9NRVRIT0RfUFVULFxyXG4gICAgICBkZXN0aW5hdGlvbjogY29uc3RhbnRzLlRBUkdFVF9TRVJWRVJfRFAsXHJcbiAgICAgIHNlcnZpY2VOYW1lOiBjb25zdGFudHMuU0VSVklDRV9OQU1FX0RQX1VQREFURV9JTkJPWF9JVEVNLFxyXG4gICAgICBmb3JtTmFtZTogdGhpcy5jb25maWcuZm9ybU5hbWUsXHJcbiAgICAgIHVybFBhcmFtZXRlcnM6IHtcclxuICAgICAgICBpbmJveGlkOiB0aGlzLmNvbmZpZy5mb3JtSWRcclxuICAgICAgfSxcclxuICAgICAgYm9keToge1xyXG4gICAgICAgIGZsYWc6IGlkXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBvcHRpb25zID0gdGhpcy5nZXRSZXF1ZXN0T3B0aW9ucygpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhbENhbGxBcGkoYm9keSwgY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfQUNUSU9OX1NVQ0NFU1NfSU5CT1hfSVRFTSwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZEhpc3RvcnkoLi4uYXJncykge1xyXG4gICAgY29uc3QgW2lkXSA9IGFyZ3M7XHJcbiAgICBjb25zdCBib2R5ID0ge1xyXG4gICAgICBtZXRob2Q6IGNvbnN0YW50cy5IVFRQX01FVEhPRF9HRVQsXHJcbiAgICAgIGRlc3RpbmF0aW9uOiBjb25zdGFudHMuVEFSR0VUX1NFUlZFUl9XTSxcclxuICAgICAgc2VydmljZU5hbWU6IGNvbnN0YW50cy5XT1JLRkxPV19JVEVNUyxcclxuICAgICAgZm9ybUlkOiBpZCA/IGlkIDogdGhpcy5jb25maWcuZm9ybUlkLFxyXG4gICAgICBmb3JtTmFtZTogXCJicG1cIixcclxuICAgIH07XHJcbiAgICBsZXQgb3B0aW9ucyA9IHRoaXMuZ2V0UmVxdWVzdE9wdGlvbnMoKTtcclxuICAgIHJldHVybiB0aGlzLmdlbmVyYWxDYWxsQXBpKGJvZHksIGNvbnN0YW50cy5TVEFURV9NQUNISU5FX0FDVElPTl9MT0FEX0hJU1RPUlksIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEluYm94SXRlbSguLi5hcmdzKSB7XHJcbiAgICBjb25zdCBbaWQsIGluYm94VHlwZV0gPSBhcmdzO1xyXG4gICAgY29uc3QgYm9keSA9IHtcclxuICAgICAgZm9ybU5hbWU6IHRoaXMuY29uZmlnLmZvcm1OYW1lLFxyXG4gICAgICBtZXRob2Q6IGNvbnN0YW50cy5IVFRQX01FVEhPRF9HRVQsXHJcbiAgICAgIGRlc3RpbmF0aW9uOiBjb25zdGFudHMuVEFSR0VUX1NFUlZFUl9EUCxcclxuICAgICAgc2VydmljZU5hbWU6IGNvbnN0YW50cy5TRVJWSUNFX05BTUVfRFBfSU5CT1hfSVRFTSxcclxuICAgICAgdXJsUGFyYW1ldGVyczoge1xyXG4gICAgICAgIGluYm94aWQ6IGlkLFxyXG4gICAgICAgIGluYm94dHlwZTogaW5ib3hUeXBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBvcHRpb25zID0gdGhpcy5nZXRSZXF1ZXN0T3B0aW9ucygpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhbENhbGxBcGkoYm9keSwgY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfQUNUSU9OX0dFVF9JTkJPWF9JVEVNLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcmVzcGVjdGl2ZUFwcHJvdmVycyhkZXRhaWxzKSB7XHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLnByb2R1Y3Rpb24pIHtcclxuICAgICAgZGV0YWlscyA9IHt9XHJcbiAgICB9XHJcbiAgICBsZXQgc2VydmljZU5hbWUgPSBcImZvcm0vXCIgKyB0aGlzLmNvbmZpZy5mb3JtTmFtZVxyXG4gICAgaWYgKHRoaXMuY29uZmlnLmZvcm1JZCkge1xyXG4gICAgICBzZXJ2aWNlTmFtZSA9IFwiZm9ybS9cIiArIHRoaXMuY29uZmlnLmZvcm1JZFxyXG4gICAgfVxyXG4gICAgbGV0IGJvZHkgPSB7XHJcbiAgICAgIG1ldGhvZDogY29uc3RhbnRzLkhUVFBfTUVUSE9EX1BPU1QsXHJcbiAgICAgIGRlc3RpbmF0aW9uOiBjb25zdGFudHMuVEFSR0VUX1NFUlZFUl9XTSxcclxuICAgICAgc2VydmljZU5hbWU6IHNlcnZpY2VOYW1lXHJcbiAgICAgICwgZm9ybU5hbWU6IGNvbnN0YW50cy5BUFBST1ZFUlNcclxuICAgICAgLCBib2R5OiB7XHJcbiAgICAgICAgXCJyZXF1ZXN0XCI6IHtcclxuICAgICAgICAgIFwiZGV0YWlsc1wiOlxyXG4gICAgICAgICAgZGV0YWlsc1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IG9wdGlvbnMgPSB0aGlzLmdldFJlcXVlc3RPcHRpb25zKCk7XHJcbiAgICByZXR1cm4gdGhpcy5nZW5lcmFsQ2FsbEFwaShib2R5LCBjb25zdGFudHMuU1RBVEVfTUFDSElORV9BQ1RJT05fU1VDQ0VTU19SRVNQT05TRSwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbXlSZXF1ZXN0cyhkZXRhaWxzKSB7XHJcbiAgICBsZXQgYm9keSA9IHtcclxuICAgICAgbWV0aG9kOiBjb25zdGFudHMuSFRUUF9NRVRIT0RfR0VULFxyXG4gICAgICBkZXN0aW5hdGlvbjogY29uc3RhbnRzLlRBUkdFVF9TRVJWRVJfV00sXHJcbiAgICAgIHNlcnZpY2VOYW1lOiBcImZvcm1cIiAvLywgIC8vdGhpcy5nZXRTZXJ2aWNlTmFtZSgpLFxyXG4gICAgICAsIGZvcm1OYW1lOiBcImhpc3RvcnlcIlxyXG4gICAgICAsIHF1ZXJ5UGFyYW1ldGVyczoge1xyXG4gICAgICAgIGZvcm1OYW1lOiB0aGlzLmNvbmZpZy5mb3JtTmFtZSxcclxuICAgICAgICB5ZWFyOiBkZXRhaWxzLnllYXIsXHJcbiAgICAgICAgbW9udGg6IGRldGFpbHMubW9udGgsXHJcbiAgICAgICAgZW1haWw6IHRoaXMubG9nZ2VkSW5Vc2VySWQoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgb3B0aW9ucyA9IHRoaXMuZ2V0UmVxdWVzdE9wdGlvbnMoKTtcclxuICAgIHJldHVybiB0aGlzLmdlbmVyYWxDYWxsQXBpKGJvZHksIGNvbnN0YW50cy5TVEFURV9NQUNISU5FX0FDVElPTl9TVUNDRVNTX1JFU1BPTlNFLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGdlbmVyYWxDYWxsQXBpKGJvZHksIHR5cGU6IHN0cmluZywgb3B0aW9ucykge1xyXG4gICAgbGV0IGFwaVVybCA9IHRoaXMuY29uZmlnLnByb3h5U2VydmljZUJhc2VVcmwgKyB0aGlzLmxhbmd1YWdlICsgdGhpcy5jb25maWcucHJveHlGdWxsQWRkcmVzcyArIHRoaXMuY29uZmlnLnByb3h5U2VydmljZUV4ZWN1dGU7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYXBpVXJsLCBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoYm9keSkpLCBvcHRpb25zKS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlT2JqZWN0OiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGh0dHBFcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoaHR0cEVycm9yKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9nZ2VkSW5Vc2VySWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyRGF0YVsnbG9nZ2VkSW5Vc2VyRW1haWwnXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRTaG9ydE5hbWUobmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAobmFtZSkge1xyXG4gICAgICBsZXQgbmFtZVRva2VucyA9IG5hbWUuc3BsaXQoJyAnKTtcclxuICAgICAgaWYgKG5hbWVUb2tlbnMubGVuZ3RoID09IDEpIHtcclxuICAgICAgICByZXR1cm4gW25hbWVUb2tlbnNbMF1dXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAyXS50b0xvd2VyQ2FzZSgpID09ICdhbCcpIHtcclxuICAgICAgICAgIHJldHVybiBbbmFtZVRva2Vuc1swXSwgbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDJdLCBuYW1lVG9rZW5zW25hbWVUb2tlbnMubGVuZ3RoIC0gMV1dLmpvaW4oJyAnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIFtuYW1lVG9rZW5zWzBdLCBuYW1lVG9rZW5zW25hbWVUb2tlbnMubGVuZ3RoIC0gMV1dLmpvaW4oJyAnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzTW9iaWxlQXBwKCkge1xyXG4gICAgcmV0dXJuICh3aW5kb3cgYXMgYW55KS53bUNvbmZpZy5pc01vYmlsZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJbmJveFR5cGUocmVzdWx0KSB7XHJcbiAgICBsZXQgcnRuID0gbnVsbDtcclxuICAgIGlmICh0aGlzLmxvZ2dlZEluVXNlcklkKCkgPT09IHJlc3VsdC5wcm9maWxlSW5mb0Ryb3AuZW1wbG95ZWVFbWFpbCkge1xyXG4gICAgICBydG4gPSBjb25zdGFudHMuSU5CT1hfU1RBVFVTX1NFTlQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBydG4gPSBjb25zdGFudHMuSU5CT1hfU1RBVFVTX1BFTkRJTkc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcnRuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzT3Blbk9uSW5ib3goKSB7XHJcbiAgICByZXR1cm4gKHdpbmRvdyBhcyBhbnkpLndtQ29uZmlnLm91dGxvb2s7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|