fabrikantencore 2.24.2 → 2.24.4
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/src/app/modules/fabrikantencore/services/fabrikanten.service.mjs +4 -2
- package/esm2022/src/app/modules/fabrikantencore/swagger/SwaggerClient.mjs +4 -1
- package/fesm2022/fabrikantencore.mjs +6 -1
- package/fesm2022/fabrikantencore.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/modules/fabrikantencore/swagger/SwaggerClient.d.ts +2 -0
|
@@ -565,7 +565,9 @@ class FabrikantenService {
|
|
|
565
565
|
this.Loading = false;
|
|
566
566
|
this.SettingsLoaded = true;
|
|
567
567
|
ChangeDetectorRef.detectChanges();
|
|
568
|
-
if (this.FabrikantenSettingsViewModel.customRedirect != null &&
|
|
568
|
+
if (this.FabrikantenSettingsViewModel.customRedirect != null &&
|
|
569
|
+
this.FabrikantenSettingsViewModel.customRedirect != "" &&
|
|
570
|
+
window.location.href.indexOf(this.FabrikantenSettingsViewModel.customRedirect) == -1) {
|
|
569
571
|
window.location.href = this.FabrikantenSettingsViewModel.customRedirect;
|
|
570
572
|
}
|
|
571
573
|
else {
|
|
@@ -1307,4 +1309,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1307
1309
|
type: Injectable,
|
|
1308
1310
|
args: [{ providedIn: 'root' }]
|
|
1309
1311
|
}], ctorParameters: function () { return [{ type: i1.FabrikantenApiClient }, { type: i2.BestekService }, { type: i3.TranslateService }, { type: i4.WebGLService }, { type: i5.SVGService }, { type: i6.TextureService }, { type: i7.NavigateService }, { type: i8.CookieService }, { type: i9.Router }, { type: i10.MatLegacyDialog }, { type: i11.StatisticsService }]; } });
|
|
1310
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFicmlrYW50ZW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvc2VydmljZXMvZmFicmlrYW50ZW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc5RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUUxRyxPQUFPLEVBVUwsdUJBQXVCLEVBRXZCLG9CQUFvQixFQUNwQix1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDekIsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUl6QixtQkFBbUIsRUFFbkIsMkJBQTJCLEVBRTNCLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBRXRCLHlCQUF5QixFQUN6Qiw4QkFBOEIsRUFHOUIsZ0NBQWdDLEVBR2hDLHFDQUFxQyxFQUVyQyxtQ0FBbUMsRUFFbkMsbUJBQW1CLEVBRXBCLE1BQU0sMEJBQTBCLENBQUM7QUFTbEMsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sZ0dBQWdHLENBQUM7QUFDbkosT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdURBQXVELENBQUM7Ozs7Ozs7Ozs7Ozs7QUFROUYsTUFDYSxrQkFBa0I7SUFnQ25CO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNEO0lBQ0M7SUF6Q0YsSUFBSSxHQUFZLEtBQUssQ0FBQztJQUV0QixrQkFBa0IsR0FBWSxLQUFLLENBQUM7SUFDcEMscUJBQXFCLEdBQVksS0FBSyxDQUFDO0lBQ3ZDLFVBQVUsR0FBVywyQkFBMkIsQ0FBQztJQUNqRCxrQkFBa0IsR0FBVyxTQUFTLENB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QUMsRUFBRSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLEVBQUU7b0JBQzFJLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNuSDthQUNGO1NBQ0Y7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO3dHQXJqRFUsa0JBQWtCOzRHQUFsQixrQkFBa0IsY0FETCxNQUFNOztTQUNuQixrQkFBa0I7NEZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRMZWdhY3lEaWFsb2cgYXMgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBGYWJDb29raWVzRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9mYWItY29va2llcy1kaWFsb2cvZmFiLWNvb2tpZXMtZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEZhYnJpa2FudGVuQXBpQ2xpZW50LFxyXG4gIEZhYnJpa2FudGVuRmlsdGVyVmlld01vZGVsLFxyXG4gIEZhYnJpa2FudGVuRmlsdGVyT3B0aW9uVmlld01vZGVsLFxyXG4gIEZhYnJpa2FudGVuVmlld01vZGVsLFxyXG4gIEZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwsXHJcbiAgRmFicmlrYW50ZW5Qcm9kdWN0Vmlld01vZGVsLFxyXG4gIEZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbCxcclxuICBGYWJyaWthbnRlbkNhdGVnb3J5TGF5ZXJWaWV3TW9kZWwsXHJcbiAgRmFicmlrYW50ZW5CQ0JQcm9kdWN0VG9lYmVob3JlblZpZXdNb2RlbCxcclxuICBGYWJyaWthbnRlblJlcXVlc3RNb2RlbCxcclxuICBGYWJyaWthbnRlbkNhdGVnb3J5Vmlld01vZGVsLFxyXG4gIFNlbGVjdFByb2R1Y3RSZXF1ZXN0LFxyXG4gIFNlbGVjdEJDQlByb2R1Y3RSZXF1ZXN0LFxyXG4gIFNlbGVjdEZpbHRlck9wdGlvblJlcXVlc3QsXHJcbiAgU2VsZWN0Q2F0ZWdvcnlSZXF1ZXN0LFxyXG4gIFNldFJhbmdlSW5wdXRSZXF1ZXN0LFxyXG4gIFJlc2V0RmlsdGVyUmVxdWVzdCxcclxuICBSZXNldEFsbEZpbHRlcnNSZXF1ZXN0LFxyXG4gIFJlc2V0Q2F0ZWdvcnlMYXllclJlcXVlc3QsXHJcbiAgUmVtb3ZlUHJvZHVjdFNlbGVjdGlvblJlcXVlc3QsXHJcbiAgUmVzZXRBbGxDYXRlZ29yaWVzUmVxdWVzdCxcclxuICBEeW5hbWljRmlsdGVyc1ZpZXdNb2RlbCxcclxuICBEeW5hbWljUmFuZ2VJbnB1dFZpZXdNb2RlbCxcclxuICBEeW5hbWljRGlzcGxheVZhbHVlVmlld01vZGVsLFxyXG4gIEJDQkxpbmtSZXF1ZXN0TW9kZWwsXHJcbiAgQkNCTGlua1Jlc3BvbnNlTW9kZWwsXHJcbiAgRmFicmlrYW50ZW5GaWxlUmVxdWVzdE1vZGVsLFxyXG4gIEZhYnJpa2FudGVuRmlsZVZpZXdNb2RlbCxcclxuICBTZWxlY3RDb2xvdXJSZXF1ZXN0LFxyXG4gIFRyYW5zbGF0aW9uQ2F0ZWdvcnksXHJcbiAgVHJhbnNsYXRpb25TdWJDYXRlZ29yeSxcclxuICBGYWJyaWthbnRlbklucHV0Vmlld01vZGVsLFxyXG4gIFNlbGVjdEZpbHRlckN1c3RvbVJlcXVlc3QsXHJcbiAgRmFicmlrYW50ZW5PcGVuSW5zdGFuY2VSZXF1ZXN0LFxyXG4gIEZhYnJpa2FudGVuT3Blbkluc3RhbmNlUmVzcG9uc2UsXHJcbiAgRmFicmlrYW50ZW5TZXR0aW5nc0Rvd25sb2FkSXRlbVZpZXdNb2RlbCxcclxuICBGYWJyaWthbnRlbkZpbGVSZXF1ZXN0SW5wdXRNb2RlbCxcclxuICBGYWJyaWthbnRlblBERlRlbXBsYXRlVmlld01vZGVsLFxyXG4gIEZhYnJpa2FudGVuQ3VzdG9tRG93bmxvYWRWaWV3TW9kZWwsXHJcbiAgRmFicmlrYW50ZW5DdXN0b21Eb3dubG9hZFJlcXVlc3RNb2RlbCxcclxuICBGYWJyaWthbnRlbkN1c3RvbURvd25sb2FkUmVzdWx0TW9kZWwsXHJcbiAgRmFicmlrYW50ZW5TZXRDb29raWVTZXR0aW5nc1JlcXVlc3QsXHJcbiAgRmFicmlrYW50ZW5Gb3JtSW5wdXRPcHRpb25WaWV3TW9kZWwsXHJcbiAgU2V0U2tpcEZvcm1zUmVxdWVzdCxcclxuICBGYWJyaWthbnRlbkluc3RhbmNlVmlld01vZGVsXHJcbn0gZnJvbSAnLi4vc3dhZ2dlci9Td2FnZ2VyQ2xpZW50JztcclxuaW1wb3J0IHsgQmVzdGVrU2VydmljZSB9IGZyb20gJy4vYmVzdGVrLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0ZVNlcnZpY2UgfSBmcm9tICcuL25hdmlnYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGF0aXN0aWNzU2VydmljZSB9IGZyb20gJy4vc3RhdGlzdGljcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU1ZHU2VydmljZSB9IGZyb20gJy4vc3ZnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUZXh0dXJlU2VydmljZSB9IGZyb20gJy4vdGV4dHVyZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4vdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXZWJHTFNlcnZpY2UgfSBmcm9tICcuL3dlYmdsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnbmd4LWNvb2tpZS1zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmFiQWN0aW9ubWVudVJldml0RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9mYWItYWN0aW9ubWVudS9mYWItYWN0aW9ubWVudS1yZXZpdC1kaWFsb2cvZmFiLWFjdGlvbm1lbnUtcmV2aXQtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZhYlBvcHVwVGV4dENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZmFiLXBvcHVwLXRleHQvZmFiLXBvcHVwLXRleHQuY29tcG9uZW50JztcclxuXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICBpbnRlcmZhY2UgV2luZG93IHtcclxuICAgIGNocm9tZT86IGFueTtcclxuICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBGYWJyaWthbnRlblNlcnZpY2Uge1xyXG4gIHByaXZhdGUgSW5pdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIFNob3dpbmdDb29raWVQb3B1cDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgUmVhZENvb2tpZVBlcm1pc3Npb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBDb29raWVOYW1lOiBzdHJpbmcgPSBcIkdvb2dsZUFuYWx5dGljc1Blcm1pc3Npb25cIjtcclxuICBwcml2YXRlIENvb2tpZVN0YXRlUmVmdXNlZDogc3RyaW5nID0gXCJyZWZ1c2VkXCI7XHJcbiAgcHJpdmF0ZSBDb29raWVTdGF0ZUFjY2VwdGVkOiBzdHJpbmcgPSBcImFjY2VwdGVkXCI7XHJcblxyXG4gIHB1YmxpYyBMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgU2VsZWN0ZWRUYWJJbmRleDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHVibGljIEZvcmNlT3BlbkZpbHRlcklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgRmFicmlrYW50ZW5WaWV3TW9kZWw6IEZhYnJpa2FudGVuVmlld01vZGVsO1xyXG5cclxuICBwdWJsaWMgU2V0dGluZ3NMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbDogRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbDtcclxuXHJcbiAgcHVibGljIEZhYnJpa2FudGVuSW5zdGFuY2VWaWV3TW9kZWw6IEZhYnJpa2FudGVuSW5zdGFuY2VWaWV3TW9kZWwgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHVibGljIFNlbGVjdGVkUGhvdG86IG51bWJlciA9IDA7XHJcbiAgcHVibGljIFNlbGVjdGVkVG9lYmVob3JlbjogRmFicmlrYW50ZW5CQ0JQcm9kdWN0VG9lYmVob3JlblZpZXdNb2RlbCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwdWJsaWMgU2VsZWN0ZWRUYWI6IHN0cmluZyA9IFwiSW5mb3JtYXRpZVwiO1xyXG4gIHB1YmxpYyBGb3JjZVVwZGF0ZUJlc3RlazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBGb3JjZVVwZGF0ZTNEOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIEZvcmNlVXBkYXRlMkQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgRm9yY2VVcGRhdGVUZXh0dXJlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIEZhYnJpa2FudGVuQXBpQ2xpZW50OiBGYWJyaWthbnRlbkFwaUNsaWVudCxcclxuICAgIHByaXZhdGUgQmVzdGVrU2VydmljZTogQmVzdGVrU2VydmljZSxcclxuICAgIHByaXZhdGUgVHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgV2ViR0xTZXJ2aWNlOiBXZWJHTFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIFNWR1NlcnZpY2U6IFNWR1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIFRleHR1cmVTZXJ2aWNlOiBUZXh0dXJlU2VydmljZSxcclxuICAgIHByaXZhdGUgTmF2aWdhdGVTZXJ2aWNlOiBOYXZpZ2F0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIENvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIFJvdXRlcjogUm91dGVyLFxyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBTdGF0aXN0aWNzU2VydmljZTogU3RhdGlzdGljc1NlcnZpY2UpIHtcclxuICAgIHRoaXMuTmF2aWdhdGVTZXJ2aWNlLkZhYnJpa2FudGVuU2VydmljZSA9IHRoaXM7XHJcbiAgICB0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TZXJ2aWNlID0gdGhpcztcclxuICAgIHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuU2VydmljZSA9IHRoaXM7XHJcbiAgICB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5TZXJ2aWNlID0gdGhpcztcclxuICAgIHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuRmFicmlrYW50ZW5TZXJ2aWNlID0gdGhpcztcclxuICAgIHRoaXMuVHJhbnNsYXRlU2VydmljZS5GYWJyaWthbnRlblNlcnZpY2UgPSB0aGlzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFJlc2V0QWxsRmlsdGVycyhDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVzZXRBbGxGaWx0ZXJzUmVxdWVzdCgpO1xyXG4gICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuXHJcbiAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LnJlc2V0QWxsRmlsdGVycyhyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNlbGVjdE9wdGlvbihmaWx0ZXJpZDogbnVtYmVyLCBmaWx0ZXJvcHRpb25pZDogbnVtYmVyLCBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIEFjdGl2YXRlZFJvdXRlPzogQWN0aXZhdGVkUm91dGUpOiB2b2lkIHtcclxuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgU2VsZWN0RmlsdGVyT3B0aW9uUmVxdWVzdCgpO1xyXG5cclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICByZXF1ZXN0LmZpbHRlck9wdGlvbklkID0gZmlsdGVyb3B0aW9uaWQ7XHJcbiAgICByZXF1ZXN0LmZpbHRlcklkID0gZmlsdGVyaWQ7XHJcblxyXG4gICAgaWYgKHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuSXNBY3RpdmUoKSkge1xyXG4gICAgICB0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLlNlbGVjdEZpbHRlck9wdGlvbih0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5GaWx0ZXIsIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuTmFtZSwgZmlsdGVyaWQpLCB0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5GaWx0ZXJPcHRpb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuTmFtZSwgZmlsdGVyb3B0aW9uaWQpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LnNlbGVjdEZpbHRlck9wdGlvbihyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTZWxlY3RDb2xvdXIoZmlsdGVyaWQ6IG51bWJlciwgY29sb3VyOiBzdHJpbmcsIGNvbG91cnZhbHVlOiBzdHJpbmcsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBTZWxlY3RDb2xvdXJSZXF1ZXN0KCk7XHJcblxyXG4gICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuICAgIHJlcXVlc3QuY29sb3VyTmFtZSA9IGNvbG91cjtcclxuICAgIHJlcXVlc3QuY29sb3VyVmFsdWUgPSBjb2xvdXJ2YWx1ZTtcclxuICAgIHJlcXVlc3QuZmlsdGVySWQgPSBmaWx0ZXJpZDtcclxuXHJcbiAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LnNlbGVjdENvbG91cihyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNlbGVjdEZpbHRlckN1c3RvbShmaWx0ZXJpZDogbnVtYmVyLCBjdXN0b212YWx1ZTogc3RyaW5nLCBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgU2VsZWN0RmlsdGVyQ3VzdG9tUmVxdWVzdCgpO1xyXG5cclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICByZXF1ZXN0LmN1c3RvbVZhbHVlID0gY3VzdG9tdmFsdWU7XHJcbiAgICByZXF1ZXN0LmZpbHRlcklkID0gZmlsdGVyaWQ7XHJcblxyXG4gICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5zZWxlY3RGaWx0ZXJDdXN0b20ocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5SZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTZXRSYW5nZUlucHV0KHJhbmdlaW5wdXRpZDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyLCBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIEFjdGl2YXRlZFJvdXRlPzogQWN0aXZhdGVkUm91dGUpOiB2b2lkIHtcclxuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgU2V0UmFuZ2VJbnB1dFJlcXVlc3QoKTtcclxuXHJcbiAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG4gICAgcmVxdWVzdC5yYW5nZUlucHV0SWQgPSByYW5nZWlucHV0aWQ7XHJcbiAgICByZXF1ZXN0LnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgaWYgKHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuSXNBY3RpdmUoKSkge1xyXG4gICAgICB0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLlNlbGVjdFJhbmdlVmFsdWUodGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuUmFuZ2VJbnB1dCwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCByYW5nZWlucHV0aWQpLCB2YWx1ZSArIFwiXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuc2V0UmFuZ2VJbnB1dChyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBGb3JjZVNlbGVjdENhdGVnb3J5KGNhdGVnb3J5aWQ6IG51bWJlciwgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXNldEFsbENhdGVnb3JpZXNSZXF1ZXN0KCk7XHJcblxyXG4gICAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG5cclxuICAgICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5yZXNldEFsbENhdGVnb3JpZXMocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB2YXIgcmVxdWVzdGNhdCA9IG5ldyBTZWxlY3RDYXRlZ29yeVJlcXVlc3QoKTtcclxuXHJcbiAgICAgICAgcmVxdWVzdGNhdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuICAgICAgICByZXF1ZXN0Y2F0LmNhdGVnb3J5SWQgPSBjYXRlZ29yeWlkO1xyXG4gICAgICAgIHJlcXVlc3RjYXQuY2F0ZWdvcnlMYXllciA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuc2VsZWN0Q2F0ZWdvcnkocmVxdWVzdGNhdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuUmVsb2FkTW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDAwKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvci5qc29uKCkpO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MDApXHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvci5qc29uKCkpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBTZWxlY3RDYXRlZ29yeShjYXRlZ29yeTogRmFicmlrYW50ZW5DYXRlZ29yeVZpZXdNb2RlbCwgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZT86IEFjdGl2YXRlZFJvdXRlKTogdm9pZCB7XHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFNlbGVjdENhdGVnb3J5UmVxdWVzdCgpO1xyXG5cclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICByZXF1ZXN0LmNhdGVnb3J5SWQgPSBjYXRlZ29yeS5pZDtcclxuICAgIHJlcXVlc3QuY2F0ZWdvcnlMYXllciA9IGNhdGVnb3J5LmxheWVyO1xyXG5cclxuICAgIGlmICh0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLklzQWN0aXZlKCkpIHtcclxuICAgICAgdGhpcy5TdGF0aXN0aWNzU2VydmljZS5TZWxlY3RDYXRlZ29yeSh0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5DYXRlZ29yeSwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCBjYXRlZ29yeS5pZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuc2VsZWN0Q2F0ZWdvcnkocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5SZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcblxyXG4gICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2VsZWN0UHJvZHVjdChwcm9kdWN0OiBGYWJyaWthbnRlblByb2R1Y3RWaWV3TW9kZWwsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGU/OiBBY3RpdmF0ZWRSb3V0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBTZWxlY3RQcm9kdWN0UmVxdWVzdCgpO1xyXG5cclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICByZXF1ZXN0LnByb2R1Y3RJZCA9IHByb2R1Y3QuaWQ7XHJcblxyXG4gICAgaWYgKHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuSXNBY3RpdmUoKSkge1xyXG4gICAgICB0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLlNlbGVjdFByb2R1Y3QodGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuUHJvZHVjdCwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCBwcm9kdWN0LmlkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5zZWxlY3RQcm9kdWN0KHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRUb2ViZWhvcmVuID0gbnVsbDtcclxuICAgICAgdGhpcy5SZXNldFRhYnMoKTtcclxuXHJcbiAgICAgIHRoaXMuUmVsb2FkTW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWYsIEFjdGl2YXRlZFJvdXRlKTtcclxuICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNlbGVjdEJDQlByb2R1Y3QoYmNicHJvZHVjdDogRmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVsLCBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgU2VsZWN0QkNCUHJvZHVjdFJlcXVlc3QoKTtcclxuXHJcbiAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG4gICAgcmVxdWVzdC5iY2JQcm9kdWN0SWQgPSBiY2Jwcm9kdWN0LmlkO1xyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuc2VsZWN0QkNCUHJvZHVjdChyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFJlc2V0U2VsZWN0aW9uRmlsdGVyKGZpbHRlcjogRmFicmlrYW50ZW5GaWx0ZXJWaWV3TW9kZWwsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGU/OiBBY3RpdmF0ZWRSb3V0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXNldEZpbHRlclJlcXVlc3QoKTtcclxuICAgIHJlcXVlc3QuZmlsdGVySWQgPSBmaWx0ZXIuaWQ7XHJcbiAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQucmVzZXRGaWx0ZXJTZWxlY3Rpb24ocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5SZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcblxyXG4gICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUmVzZXRBbGxDYXRlZ29yaWVzKENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVzZXRBbGxDYXRlZ29yaWVzUmVxdWVzdCgpO1xyXG5cclxuICAgICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuXHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQucmVzZXRBbGxDYXRlZ29yaWVzKHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5SZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwMClcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yLmpzb24oKSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIFJlc2V0U2VsZWN0aW9uQ2F0ZWdvcnkoY2F0ZWdvcnlsYXllcjogRmFicmlrYW50ZW5DYXRlZ29yeVZpZXdNb2RlbCwgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlc2V0Q2F0ZWdvcnlMYXllclJlcXVlc3QoKTtcclxuICAgIHJlcXVlc3QuY2F0ZWdvcnlMYXllciA9IGNhdGVnb3J5bGF5ZXIubGF5ZXI7XHJcbiAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQucmVzZXRDYXRlZ29yeUxheWVyU2VsZWN0aW9uKHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuUmVzZXRBbGxGaWx0ZXJzKENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFJlbW92ZVByb2R1Y3RTZWxlY3Rpb24oQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZW1vdmVQcm9kdWN0U2VsZWN0aW9uUmVxdWVzdCgpO1xyXG5cclxuICAgICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuXHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQucmVtb3ZlUHJvZHVjdFNlbGVjdGlvbihyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuU2VsZWN0ZWRUb2ViZWhvcmVuID0gbnVsbDtcclxuICAgICAgICB0aGlzLlJlc2V0VGFicygpO1xyXG5cclxuICAgICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDAwKVxyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IuanNvbigpKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgVGFiU2VsZWN0aW9uQ2hhbmdlZCh0YWI6IHN0cmluZywgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XHJcbiAgICB0aGlzLlNlbGVjdGVkVGFiID0gdGFiO1xyXG5cclxuICAgIHRoaXMuVHJpZ2dlclJlbG9hZHMoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldEZpcnN0T3BlbkNhdGVnb3J5TGF5ZXIoKTogRmFicmlrYW50ZW5DYXRlZ29yeUxheWVyVmlld01vZGVsIHwgbnVsbCB7XHJcbiAgICB2YXIgYXJyYXlsYXllcnMgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5jYXRlZ29yeUxheWVycztcclxuXHJcbiAgICBpZiAoYXJyYXlsYXllcnMgIT0gbnVsbCkge1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5bGF5ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFycmF5bGF5ZXJzW2ldLnNlbGVjdGVkT3B0aW9uID09IDApIHtcclxuICAgICAgICAgIHJldHVybiBhcnJheWxheWVyc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93Q2F0ZWdvcmllcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLkdldEZpcnN0T3BlbkNhdGVnb3J5TGF5ZXIoKSAhPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dSZXF1aXJlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0cyAhPSBudWxsKSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHNbaV0uZmlsdGVyPy5oaWRkZW4gIT0gdHJ1ZSAmJlxyXG4gICAgICAgICAgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHNbaV0ucmVxdWlyZWQgJiZcclxuICAgICAgICAgICF0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0c1tpXS5maWxsZWQpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93VGV4dHVyZSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdD8udGV4dHVyZUJhc2VWaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd1RvZWJlaG9yZW4oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsPy5lbmFibGVUb2ViZWhvcmVuID09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dWYXJpYW50cygpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsICE9IG51bGwgJiYgdGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsICE9IG51bGwpIHtcclxuICAgICAgaWYgKCF0aGlzLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwuYWx3YXlzU2hvd1ZhcmlhbnQpIHtcclxuICAgICAgICB2YXIgYmNicHJvZHVjdHMgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdD8uZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVscztcclxuXHJcbiAgICAgICAgaWYgKGJjYnByb2R1Y3RzICE9IG51bGwgJiYgYmNicHJvZHVjdHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dBY3Rpb25NZW51KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWw/LnNlbGVjdGVkUHJvZHVjdCA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5TaG93VmFyaWFudHMoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIzRFwiKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiMkRcIikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIkJlc3Rla1wiKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiVGV4dHVyZVwiKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiVG9lYmVob3JlblwiKSB7XHJcbiAgICAgIGlmICh0aGlzLkhhc1RvZWJlaG9yZW4oKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIElzQVByb2R1Y3RTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3QgIT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgSGFzVG9lYmVob3JlbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3Q/LmZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbHMgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbD8uc2VsZWN0ZWRQcm9kdWN0Py5mYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVsc1swXS5iY2JQcm9kdWN0VG9lYmVob3JlbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVsc1swXS5iY2JQcm9kdWN0VG9lYmVob3Jlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBHZXRUb29sVGlwTW9kZURlZmF1bHQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5HZXRUb29sVGlwTW9kZSgpID09IFwiRGVmYXVsdFwiO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldFRvb2xUaXBNb2RlRm9sZERvd24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5HZXRUb29sVGlwTW9kZSgpID09IFwiRm9sZERvd25cIjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBHZXRUb29sVGlwTW9kZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbD8udG9vbHRpcE1vZGUgIT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLnRvb2x0aXBNb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBcIlwiO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIE9wZW5CQ0JMaW5rKCk6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICB2YXIgd3VpZDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIjNEXCIpIHtcclxuICAgICAgd3VpZCA9IHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwud3VpZCArIFwiXCJcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIyRFwiKSB7XHJcbiAgICAgIHd1aWQgPSB0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWw/Lnd1aWQgKyBcIlwiXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiQmVzdGVrXCIpIHtcclxuICAgICAgd3VpZCA9IHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbC53dWlkICsgXCJcIlxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIlRvZWJlaG9yZW5cIikge1xyXG4gICAgICB3dWlkID0gdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLnd1aWQgKyBcIlwiXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiVGV4dHVyZVwiKSB7XHJcbiAgICAgIHd1aWQgPSB0aGlzLlRleHR1cmVTZXJ2aWNlLkZhYnJpa2FudGVuVGV4dHVyZVZpZXdNb2RlbC53dWlkICsgXCJcIlxyXG4gICAgfVxyXG5cclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IEJDQkxpbmtSZXF1ZXN0TW9kZWwoKTtcclxuICAgIHJlcXVlc3Qud3VpZCA9IHd1aWQ7XHJcblxyXG4gICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5nZXRCQ0JMaW5rKHJlcXVlc3QpLnN1YnNjcmliZSgobW9kZWw6IEJDQkxpbmtSZXNwb25zZU1vZGVsKSA9PiB7XHJcbiAgICAgIHdpbmRvdy5vcGVuKG1vZGVsLnVybCwgJ19ibGFuaycpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2V0U2tpcEZvcm1zKCk6IHZvaWQge1xyXG4gICAgdmFyIGV4ZWN1dGUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLnNraXBGb3JtUGFzc3dvcmQgPT0gJycpIHtcclxuICAgICAgZXhlY3V0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHd3ID0gcHJvbXB0KFwiRW50ZXIgcGFzc3dvcmRcIiwgXCJcIik7XHJcbiAgICAgIGlmICh3dyA9PSB0aGlzLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwuc2tpcEZvcm1QYXNzd29yZCkge1xyXG4gICAgICAgIGV4ZWN1dGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFsZXJ0KFwid3JvbmcgcGFzc3dvcmRcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXhlY3V0ZSkge1xyXG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBTZXRTa2lwRm9ybXNSZXF1ZXN0KCk7XHJcblxyXG4gICAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG5cclxuICAgICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5zZXRTa2lwRm9ybXMocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUmVsb2FkTW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZT86IEFjdGl2YXRlZFJvdXRlLCBDYWxsQmFjaz86IGFueSkge1xyXG4gICAgdGhpcy5Jbml0ID0gZmFsc2U7XHJcbiAgICB0aGlzLkxvYWRGYWJyaWthbnRlblZpZXdNb2RlbChDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUsIENhbGxCYWNrKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBMb2FkRmFicmlrYW50ZW5WaWV3TW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZT86IEFjdGl2YXRlZFJvdXRlLCBDYWxsQmFjaz86IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLkluaXQpIHtcclxuICAgICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLlNldHRpbmdzTG9hZGVkKSB7XHJcbiAgICAgICAgdGhpcy5Mb2FkRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbChDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkluaXQpIHtcclxuICAgICAgICAgIHRoaXMuVHJhbnNsYXRlU2VydmljZS5Mb2FkVHJhbnNsYXRpb25zKENoYW5nZURldGVjdG9yUmVmLCB0aGlzLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5Jbml0ID0gdHJ1ZTtcclxuICAgICAgICAgIHZhciByZXF1ZXN0ID0gbmV3IEZhYnJpa2FudGVuUmVxdWVzdE1vZGVsKCk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gXCJcIjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5nZXRGYWJyaWthbnRlblZpZXdNb2RlbChyZXF1ZXN0KS5zdWJzY3JpYmUoKG1vZGVsOiBGYWJyaWthbnRlblZpZXdNb2RlbCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWw/LnNlbGVjdGVkUHJvZHVjdD8ucGRmVGVtcGxhdGVzICE9IG51bGwgJiYgbW9kZWwuc2VsZWN0ZWRQcm9kdWN0Py5wZGZUZW1wbGF0ZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIHZhciBhcnJheTEgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5wZGZUZW1wbGF0ZXM7XHJcbiAgICAgICAgICAgICAgdmFyIGFycmF5MiA9IG1vZGVsLnNlbGVjdGVkUHJvZHVjdC5wZGZUZW1wbGF0ZXM7XHJcblxyXG4gICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkxLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFycmF5Mi5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoYXJyYXkxW2ldLnRlbXBsYXRlSWQgPT0gYXJyYXkyW2pdLnRlbXBsYXRlSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheTJbal0uY2hlY2tlZCA9IGFycmF5MVtpXS5jaGVja2VkO1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5MltqXS5sb2FkaW5nID0gYXJyYXkxW2ldLmxvYWRpbmc7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJuZXcgRmFicmlrYW50ZW5WaWV3TW9kZWxcIik7XHJcbiAgICAgICAgICAgIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwgPSBtb2RlbDtcclxuICAgICAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5nb29nbGVBbmFseXRpY3NFbmFibGVkICYmXHJcbiAgICAgICAgICAgICAgIXRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwudXNlckhhc0Fuc3dlcmVkQ29va2llcyAmJlxyXG4gICAgICAgICAgICAgICF0aGlzLlNob3dpbmdDb29raWVQb3B1cCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuR2V0Q29va2llUGVybWlzc2lvbnMoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5Gb3JjZU9wZW5GaWx0ZXJJZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgdmFyIGlucHV0cyA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzO1xyXG4gICAgICAgICAgICAgIGlmIChpbnB1dHMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgdmFyIGZpbHRlciA9IGlucHV0c1tpXS5maWx0ZXI7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlci5pZCA9PSB0aGlzLkZvcmNlT3BlbkZpbHRlcklkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIub3BlbmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZm9yY2VkIG9wZW4gbWVudTogXCIgKyBmaWx0ZXIubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB0aGlzLkZvcmNlT3BlbkZpbHRlcklkID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuU2VsZWN0ZWRQaG90byA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5UcmlnZ2VyUmVsb2FkcyhDaGFuZ2VEZXRlY3RvclJlZik7XHJcblxyXG4gICAgICAgICAgICBpZiAoQWN0aXZhdGVkUm91dGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLlByb2Nlc3NQYXJhbWV0ZXJzKENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuTmF2aWdhdGVTZXJ2aWNlLlJlZnJlc2hQYWdlKENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJubyBBY3RpdmF0ZWRSb3V0ZVwiKTtcclxuICAgICAgICAgICAgICB0aGlzLk5hdmlnYXRlU2VydmljZS5SZWZyZXNoUGFnZShDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKENhbGxCYWNrICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICBDYWxsQmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDAwKVxyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yLmpzb24oKSk7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIExvYWRGYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsKENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGU/OiBBY3RpdmF0ZWRSb3V0ZSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLlNldHRpbmdzTG9hZGVkKSB7XHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuZ2V0RmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbCgpLnN1YnNjcmliZSgobW9kZWw6IEZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwpID0+IHtcclxuICAgICAgICB0aGlzLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwgPSBtb2RlbDtcclxuXHJcbiAgICAgICAgdGhpcy5MYW5ndWFnZUNoYW5nZWQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5TZXR0aW5nc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLmN1c3RvbVJlZGlyZWN0ICE9IG51bGwgJiYgdGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLmN1c3RvbVJlZGlyZWN0ICE9IFwiXCIpIHtcclxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLmN1c3RvbVJlZGlyZWN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuTG9hZEZhYnJpa2FudGVuVmlld01vZGVsKENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MDApXHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvci5qc29uKCkpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgUHJvY2Vzc1BhcmFtZXRlcnMoQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUpOiBib29sZWFuIHtcclxuICAgIGlmIChBY3RpdmF0ZWRSb3V0ZSAhPSBudWxsKSB7XHJcbiAgICAgIHZhciBwcm9kdWN0bmFtZSA9IEFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInByb2R1Y3RcIik7XHJcblxyXG4gICAgICBpZiAocHJvZHVjdG5hbWUgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnByb2R1Y3RzICE9IG51bGwpIHtcclxuICAgICAgICAgIHZhciBwcm9kdWN0OiBGYWJyaWthbnRlblByb2R1Y3RWaWV3TW9kZWwgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwucHJvZHVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwucHJvZHVjdHNbaV0udXJsTmFtZSA9PSBwcm9kdWN0bmFtZSkge1xyXG4gICAgICAgICAgICAgIHByb2R1Y3QgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnByb2R1Y3RzW2ldO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHByb2R1Y3QgIT0gbnVsbCAmJiB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdD8uaWQgIT0gcHJvZHVjdC5pZCkge1xyXG4gICAgICAgICAgICB0aGlzLlNlbGVjdFByb2R1Y3QocHJvZHVjdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEFjdGl2YXRlZFJvdXRlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGNhdGVnb3J5bmFtZSA9IEFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcImNhdGVnb3J5XCIpO1xyXG5cclxuICAgICAgaWYgKGNhdGVnb3J5bmFtZSAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2F0ZWdvcnlMYXllcnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdmFyIGNhdGVnb3J5OiBGYWJyaWthbnRlbkNhdGVnb3J5Vmlld01vZGVsIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNhdGVnb3J5TGF5ZXJzLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgbGF5ZXIgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNhdGVnb3J5TGF5ZXJzW2ldLmNhdGVnb3JpZXM7XHJcblxyXG4gICAgICAgICAgICBpZiAobGF5ZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGF5ZXIubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICgobGF5ZXJbal0udXJsTmFtZSA9PSBjYXRlZ29yeW5hbWUgfHwgbGF5ZXJbal0uZGVlcGxpbmtUYWcgPT0gY2F0ZWdvcnluYW1lKSAmJiB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNhdGVnb3J5TGF5ZXJzW2ldLnNlbGVjdGVkT3B0aW9uICE9IGxheWVyW2pdLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNhdGVnb3J5ID0gbGF5ZXJbal07XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChjYXRlZ29yeSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuU2VsZWN0Q2F0ZWdvcnkoY2F0ZWdvcnksIENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLlByb2Nlc3NQYXJhbWV0ZXJGaWx0ZXIoXCJmaWx0ZXIxXCIsIEFjdGl2YXRlZFJvdXRlLCBDaGFuZ2VEZXRlY3RvclJlZikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLlByb2Nlc3NQYXJhbWV0ZXJGaWx0ZXIoXCJmaWx0ZXIyXCIsIEFjdGl2YXRlZFJvdXRlLCBDaGFuZ2VEZXRlY3RvclJlZikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLlByb2Nlc3NQYXJhbWV0ZXJGaWx0ZXIoXCJmaWx0ZXIzXCIsIEFjdGl2YXRlZFJvdXRlLCBDaGFuZ2VEZXRlY3RvclJlZikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLlByb2Nlc3NQYXJhbWV0ZXJGaWx0ZXIoXCJmaWx0ZXI0XCIsIEFjdGl2YXRlZFJvdXRlLCBDaGFuZ2VEZXRlY3RvclJlZikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBub3JlZ2lzdGVyID0gQWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ25vcmVnaXN0ZXInKTtcclxuXHJcbiAgICAgIGlmIChub3JlZ2lzdGVyICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLlNldFNraXBGb3JtcygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIFByb2Nlc3NQYXJhbWV0ZXJGaWx0ZXIobmFtZTogc3RyaW5nLCBBY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IGJvb2xlYW4ge1xyXG4gICAgdmFyIG9wdGlvbm5hbWUgPSBBY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQobmFtZSk7XHJcblxyXG4gICAgaWYgKG9wdGlvbm5hbWUgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHMgIT0gbnVsbCkge1xyXG4gICAgICAgIHZhciBvcHRpb246IEZhYnJpa2FudGVuRmlsdGVyT3B0aW9uVmlld01vZGVsIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgdmFyIGZpbHRlcjogRmFicmlrYW50ZW5GaWx0ZXJWaWV3TW9kZWwgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdmFyIGZpbHRlcnRlbXAgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0c1tpXS5maWx0ZXI7XHJcbiAgICAgICAgICBpZiAoZmlsdGVydGVtcCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZhciBvcHRpb25zID0gZmlsdGVydGVtcC5vcHRpb25zO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb3B0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnNbal0udXJsTmFtZSA9PSBvcHRpb25uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbiA9IG9wdGlvbnNbal07XHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlciA9IGZpbHRlcnRlbXA7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbiAhPSBudWxsICYmIGZpbHRlciAhPSBudWxsICYmIGZpbHRlci5zZWxlY3RlZE9wdGlvbiAhPSBvcHRpb24uaWQpIHtcclxuICAgICAgICAgIHRoaXMuU2VsZWN0T3B0aW9uKGZpbHRlci5pZCwgb3B0aW9uLmlkLCBDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFJlc2V0VGFicygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwuc3RhcnRUYWIgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVGFiID0gdGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLnN0YXJ0VGFiO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLmhpZGVJbmZvcm1hdGlvblRhYikge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVGFiID0gXCIzRFwiO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRUYWIgPSBcIkluZm9ybWF0aWVcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLmhpZGVJbmZvcm1hdGlvblRhYikge1xyXG4gICAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIjNEXCIpIHtcclxuICAgICAgICB0aGlzLlNlbGVjdGVkVGFiSW5kZXggPSAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIjJEXCIpIHtcclxuICAgICAgICB0aGlzLlNlbGVjdGVkVGFiSW5kZXggPSAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIkJlc3Rla1wiKSB7XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFRhYkluZGV4ID0gMjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiSW5mb3JtYXRpZVwiKSB7XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFRhYkluZGV4ID0gMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIzRFwiKSB7XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFRhYkluZGV4ID0gMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIyRFwiKSB7XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFRhYkluZGV4ID0gMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCJCZXN0ZWtcIikge1xyXG4gICAgICAgIHRoaXMuU2VsZWN0ZWRUYWJJbmRleCA9IDM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIExhbmd1YWdlXHJcblxyXG4gIHB1YmxpYyBMYW5ndWFnZUNoYW5nZWQoKTogdm9pZCB7XHJcbiAgICB2YXIgZm9ybSA9IHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbD8uZG93bmxvYWRGb3JtO1xyXG5cclxuICAgIGlmIChmb3JtICE9IHVuZGVmaW5lZCAmJiB0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuQWN0aXZlTGFuZ3VhZ2UgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHZhciBjYXRlZ29yaWVzID0gZm9ybS5mb3JtQ2F0ZWdvcmllcztcclxuXHJcbiAgICAgIGlmIChjYXRlZ29yaWVzICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2F0ZWdvcmllcy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgdmFyIHJvd3MgPSBjYXRlZ29yaWVzW2NdLnJvd3M7XHJcblxyXG4gICAgICAgICAgaWYgKHJvd3MgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgcm93cy5sZW5ndGg7IHIrKykge1xyXG4gICAgICAgICAgICAgIHZhciBpbnB1dHMgPSByb3dzW3JdLmlucHV0cztcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGlucHV0cyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0cyA9IGlucHV0c1tpXS5kZWZhdWx0cztcclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0cyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBkID0gMDsgZCA8IGRlZmF1bHRzLmxlbmd0aDsgZCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkFjdGl2ZUxhbmd1YWdlLmlkID09IGRlZmF1bHRzW2RdLmxhbmd1YWdlSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRzW2RdLmRlZmF1bHRPcHRpb25JZCAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb246IEZhYnJpa2FudGVuRm9ybUlucHV0T3B0aW9uVmlld01vZGVsIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IGlucHV0c1tpXS5vcHRpb25zO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG8gPSAwOyBvIDwgb3B0aW9ucy5sZW5ndGg7IG8rKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uc1tvXS5pZCA9PSBkZWZhdWx0c1tkXS5kZWZhdWx0T3B0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gPSBvcHRpb25zW29dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHNbaV0uc2VsZWN0ZWRPcHRpb24gPSBvcHRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0c1tkXS5kZWZhdWx0VmFsdWUgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0c1tpXS52YWx1ZSA9IGRlZmF1bHRzW2RdLmRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gUG9wdXBcclxuXHJcbiAgcHVibGljIFNob3dQb3B1cFRleHQodGV4dDogc3RyaW5nKSB7XHJcbiAgICB2YXIgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihGYWJQb3B1cFRleHRDb21wb25lbnQsIHtcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHRleHQ6IHRleHRcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBDb29raWVzXHJcblxyXG4gIHB1YmxpYyBHZXRDb29raWVQZXJtaXNzaW9ucyhDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIHZhciB0U2hvd1BvcHVwID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuUmVhZENvb2tpZVBlcm1pc3Npb25zKSB7XHJcbiAgICAgIHRoaXMuUmVhZENvb2tpZVBlcm1pc3Npb25zID0gdHJ1ZTtcclxuXHJcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuQ29va2llU2VydmljZS5nZXQodGhpcy5Db29raWVOYW1lKTtcclxuXHJcbiAgICAgIGlmICh2YWx1ZSA9PSB0aGlzLkNvb2tpZVN0YXRlUmVmdXNlZCkge1xyXG4gICAgICAgIHRTaG93UG9wdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlNldENvb2tpZVNldHRpbmdzKGZhbHNlLCBDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodmFsdWUgPT0gdGhpcy5Db29raWVTdGF0ZUFjY2VwdGVkKSB7XHJcbiAgICAgICAgdFNob3dQb3B1cCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuU2V0Q29va2llU2V0dGluZ3ModHJ1ZSwgQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRTaG93UG9wdXApIHtcclxuICAgICAgdGhpcy5TaG93aW5nQ29va2llUG9wdXAgPSB0cnVlO1xyXG4gICAgICB2YXIgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihGYWJDb29raWVzRGlhbG9nQ29tcG9uZW50LCB7IGRpc2FibGVDbG9zZTogdHJ1ZSB9KTtcclxuXHJcbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5TaG93aW5nQ29va2llUG9wdXAgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2V0Q29va2llU2V0dGluZ3MoYWNjZXB0OiBib29sZWFuLCBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIGlmIChhY2NlcHQpIHtcclxuICAgICAgdGhpcy5Db29raWVTZXJ2aWNlLnNldCh0aGlzLkNvb2tpZU5hbWUsIHRoaXMuQ29va2llU3RhdGVBY2NlcHRlZCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5Db29raWVTZXJ2aWNlLnNldCh0aGlzLkNvb2tpZU5hbWUsIHRoaXMuQ29va2llU3RhdGVSZWZ1c2VkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBGYWJyaWthbnRlblNldENvb2tpZVNldHRpbmdzUmVxdWVzdCgpO1xyXG5cclxuICAgICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuICAgICAgcmVxdWVzdC5hY2NlcHQgPSBhY2NlcHQ7XHJcblxyXG4gICAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LnNldENvb2tpZVNldHRpbmdzKHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5SZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwMClcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yLmpzb24oKSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQkNCUHJvZHVjdEluc3RhbmNlXHJcblxyXG4gIHB1YmxpYyBPcGVuKG9wZW5jb2RlOiBzdHJpbmcsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBGYWJyaWthbnRlbk9wZW5JbnN0YW5jZVJlcXVlc3QoKTtcclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICByZXF1ZXN0Lmluc3RhbmNlSWQgPSBvcGVuY29kZTtcclxuXHJcbiAgICB0aGlzLlJlc2V0VGFicygpO1xyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQub3Blbkluc3RhbmNlKHJlcXVlc3QpLnN1YnNjcmliZSgobW9kZWw6IEZhYnJpa2FudGVuT3Blbkluc3RhbmNlUmVzcG9uc2UpID0+IHtcclxuICAgICAgaWYgKG1vZGVsLmVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuUmVsb2FkTW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICB9XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gRHluYW1pYyBtb2RlbHNcclxuXHJcbiAgcHVibGljIEdldER5bmFtaWNEaXNwbGF5VmFsdWVzKCk6IER5bmFtaWNEaXNwbGF5VmFsdWVWaWV3TW9kZWxbXSB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlbjNEVmlld01vZGVsICE9IG51bGwgJiYgdGhpcy5XZWJHTFNlcnZpY2UuRmFicmlrYW50ZW4zRFZpZXdNb2RlbC5jaGVja3N1bSA9PSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNoZWNrc3VtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5TVkdTZXJ2aWNlLkZhYnJpa2FudGVuU1ZHVmlld01vZGVsICE9IG51bGwgJiYgdGhpcy5TVkdTZXJ2aWNlLkZhYnJpa2FudGVuU1ZHVmlld01vZGVsLmNoZWNrc3VtID09IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2hlY2tzdW0pIHtcclxuICAgICAgICBpZiAodGhpcy5TVkdTZXJ2aWNlLkZhYnJpa2FudGVuU1ZHVmlld01vZGVsLmR5bmFtaWNEaXNwbGF5VmFsdWVzICE9IG51bGwpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsICE9IG51bGwgJiYgdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmNoZWNrc3VtID09IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2hlY2tzdW0pIHtcclxuICAgICAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmR5bmFtaWNEaXNwbGF5VmFsdWVzICE9IG51bGwpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBBcnJheTxEeW5hbWljRGlzcGxheVZhbHVlVmlld01vZGVsPigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFByb2Nlc3NEeW5hbWljTW9kZWxzKENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5XZWJHTFNlcnZpY2UuRmFicmlrYW50ZW4zRFZpZXdNb2RlbCAhPSBudWxsICYmIHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwuY2hlY2tzdW0gPT0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5jaGVja3N1bSkge1xyXG4gICAgICAgIGlmICh0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlbjNEVmlld01vZGVsLmR5bmFtaWNGaWx0ZXJzICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNGaWx0ZXJzKHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwuZHluYW1pY0ZpbHRlcnMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwuZHluYW1pY1JhbmdlSW5wdXRzICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNSYW5nZUlucHV0cyh0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlbjNEVmlld01vZGVsLmR5bmFtaWNSYW5nZUlucHV0cywgQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY0Rpc3BsYXlWYWx1ZXModGhpcy5XZWJHTFNlcnZpY2UuRmFicmlrYW50ZW4zRFZpZXdNb2RlbC5keW5hbWljRGlzcGxheVZhbHVlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbCAhPSBudWxsICYmIHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5jaGVja3N1bSA9PSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNoZWNrc3VtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5keW5hbWljRmlsdGVycyAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLlByb2Nlc3NEeW5hbWljRmlsdGVycyh0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwuZHluYW1pY0ZpbHRlcnMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5keW5hbWljUmFuZ2VJbnB1dHMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY1JhbmdlSW5wdXRzKHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5keW5hbWljUmFuZ2VJbnB1dHMsIENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY0Rpc3BsYXlWYWx1ZXModGhpcy5TVkdTZXJ2aWNlLkZhYnJpa2FudGVuU1ZHVmlld01vZGVsLmR5bmFtaWNEaXNwbGF5VmFsdWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsICE9IG51bGwgJiYgdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmNoZWNrc3VtID09IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2hlY2tzdW0pIHtcclxuICAgICAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmR5bmFtaWNGaWx0ZXJzICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNGaWx0ZXJzKHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbC5keW5hbWljRmlsdGVycyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmR5bmFtaWNSYW5nZUlucHV0cyAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLlByb2Nlc3NEeW5hbWljUmFuZ2VJbnB1dHModGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmR5bmFtaWNSYW5nZUlucHV0cywgQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbC5keW5hbWljRGlzcGxheVZhbHVlcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLlByb2Nlc3NEeW5hbWljRGlzcGxheVZhbHVlcyh0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBQcm9jZXNzRHluYW1pY0Rpc3BsYXlWYWx1ZXModmFsdWVzOiBEeW5hbWljRGlzcGxheVZhbHVlVmlld01vZGVsW10pOiB2b2lkIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0cyAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY0Rpc3BsYXlWYWx1ZUlucHV0cyh2YWx1ZXNbaV0sIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuZmlsdGVyQ2F0ZWdvcmllcyAhPSBudWxsKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmZpbHRlckNhdGVnb3JpZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIHZhciBpbnB1dHMgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmZpbHRlckNhdGVnb3JpZXNbal0uaW5wdXRzO1xyXG4gICAgICAgICAgaWYgKGlucHV0cyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNEaXNwbGF5VmFsdWVJbnB1dHModmFsdWVzW2ldLCBpbnB1dHMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBQcm9jZXNzRHluYW1pY0Rpc3BsYXlWYWx1ZUlucHV0cyh2YWx1ZTogRHluYW1pY0Rpc3BsYXlWYWx1ZVZpZXdNb2RlbCwgaW5wdXRzOiBGYWJyaWthbnRlbklucHV0Vmlld01vZGVsW10pOiB2b2lkIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHZhciBvcHRpb25zID0gaW5wdXRzW2ldLmZpbHRlcj8ub3B0aW9ucztcclxuICAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBpZiAob3B0aW9uc1swXS5uYW1lID09IHZhbHVlLm5hbWUpIHtcclxuICAgICAgICAgIG9wdGlvbnNbMF0uaWQgPSAtMjtcclxuICAgICAgICAgIG9wdGlvbnNbMF0ubmFtZSA9IHZhbHVlLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBQcm9jZXNzRHluYW1pY0ZpbHRlcnMoZmlsdGVyczogRHluYW1pY0ZpbHRlcnNWaWV3TW9kZWxbXSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzICE9IG51bGwpIHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGFycmF5ID0gZmlsdGVyc1tpXS5maWx0ZXJzO1xyXG4gICAgICAgIGlmIChhcnJheSAhPSBudWxsKSB7XHJcbiAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IGFycmF5Lmxlbmd0aDsgcCsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBpZiAoYXJyYXlbcF0uZmlsdGVySWQgPT0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHNbal0uZmlsdGVyPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0c1tqXS5maWx0ZXI/Lm9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICB2YXIgYWxsb3dlZGFycmF5ID0gYXJyYXlbcF0uZmlsdGVyT3B0aW9uc0FsbG93ZWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbCAmJiBhbGxvd2VkYXJyYXkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IG9wdGlvbnMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWxsb3dlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGFsbG93ZWRhcnJheS5sZW5ndGg7IGwrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93ZWRhcnJheVtsXSA9PSBvcHRpb25zW2tdLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxsb3dlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1trXS5oaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkaXNhYmxlOiBcIiArIG9wdGlvbnNba10ubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIFByb2Nlc3NEeW5hbWljUmFuZ2VJbnB1dHMocmFuZ2VpbnB1dHM6IER5bmFtaWNSYW5nZUlucHV0Vmlld01vZGVsW10sIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzICE9IG51bGwpIHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZWlucHV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBhcnJheSA9IHJhbmdlaW5wdXRzW2ldLnJhbmdlSW5wdXRzO1xyXG4gICAgICAgIGlmIChhcnJheSAhPSBudWxsKSB7XHJcbiAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IGFycmF5Lmxlbmd0aDsgcCsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBpZiAoYXJyYXlbcF0gPT0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHNbal0ucmFuZ2U/LmlkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnYmVyZWlrIHJhbmdlaW5wdXQ6JyArIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzW2pdLnJhbmdlPy5uYW1lKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcmFuZ2VvYmplY3QgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0c1tqXS5yYW5nZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2VvYmplY3QgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICByYW5nZW9iamVjdC5pbmNsdXNpZWZNaW5pbXVtID0gcmFuZ2VpbnB1dHNbaV0uaW5jbHVzaWVmTWluaW11bTtcclxuICAgICAgICAgICAgICAgICAgcmFuZ2VvYmplY3QubWluaW11bSA9IHJhbmdlaW5wdXRzW2ldLm1pbmltdW07XHJcblxyXG4gICAgICAgICAgICAgICAgICByYW5nZW9iamVjdC5pbmNsdXNpZWZNYXhpbXVtID0gcmFuZ2VpbnB1dHNbaV0uaW5jbHVzaWVmTWF4aW11bTtcclxuICAgICAgICAgICAgICAgICAgcmFuZ2VvYmplY3QubWF4aW11bSA9IHJhbmdlaW5wdXRzW2ldLm1heGltdW07XHJcblxyXG4gICAgICAgICAgICAgICAgICBpZiAocmFuZ2VvYmplY3QuaW5jbHVzaWVmTWluaW11bSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZW9iamVjdC52YWx1ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHBhcnNlSW50KHJhbmdlb2JqZWN0LnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IHJhbmdlb2JqZWN0Lm1pbmltdW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5TZXRSYW5nZUlucHV0KHJhbmdlb2JqZWN0LmlkLCByYW5nZW9iamVjdC5taW5pbXVtLCBDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICBpZiAocmFuZ2VvYmplY3QuaW5jbHVzaWVmTWF4aW11bSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZW9iamVjdC52YWx1ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHBhcnNlSW50KHJhbmdlb2JqZWN0LnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IHJhbmdlb2JqZWN0Lm1heGltdW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5TZXRSYW5nZUlucHV0KHJhbmdlb2JqZWN0LmlkLCByYW5nZW9iamVjdC5tYXhpbXVtLCBDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBEb3dubG9hZHNcclxuXHJcbiAgcHVibGljIElzU3RhcnRpbmdEb3dubG9hZCgpOiBib29sZWFuIHtcclxuXHJcbiAgICB2YXIgZG93bmxvYWRjYXRzID0gdGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsPy5kb3dubG9hZENhdGVnb3JpZXM7XHJcblxyXG4gICAgaWYgKGRvd25sb2FkY2F0cyAhPSBudWxsKSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG93bmxvYWRjYXRzLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gICAgICAgIHZhciBpdGVtcyA9IGRvd25sb2FkY2F0c1tpXS5pdGVtcztcclxuXHJcbiAgICAgICAgaWYgKGl0ZW1zICE9IG51bGwpIHtcclxuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1zW2pdLmxvYWRpbmcpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93UmV2aXRQb3B1cChkb3dubG9hZGl0ZW06IEZhYnJpa2FudGVuU2V0dGluZ3NEb3dubG9hZEl0ZW1WaWV3TW9kZWwsIGN1c3RvbWJjYmVib2lkOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcclxuICAgIHZhciBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEZhYkFjdGlvbm1lbnVSZXZpdERpYWxvZ0NvbXBvbmVudCk7XHJcblxyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHtcclxuXHJcbiAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgRmFicmlrYW50ZW5GaWxlUmVxdWVzdE1vZGVsKCk7XHJcblxyXG4gICAgICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICAgICAgcmVxdWVzdC5jdXN0b21CQ0JFQk9JZCA9IGN1c3RvbWJjYmVib2lkO1xyXG4gICAgICAgIHJlcXVlc3QubGFuZ3VhZ2VJZCA9IHRoaXMuVHJhbnNsYXRlU2VydmljZS5BY3RpdmVMYW5ndWFnZS5pZDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU1ZHU2VydmljZS5TY2hhYWwgIT0gXCJcIikge1xyXG4gICAgICAgICAgcmVxdWVzdC5zY2FsZSA9IHBhcnNlSW50KHRoaXMuU1ZHU2VydmljZS5TY2hhYWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVxdWVzdC5pbnB1dHMgPSBuZXcgQXJyYXkoKTtcclxuICAgICAgICB2YXIgaW5wdXQgPSBuZXcgRmFicmlrYW50ZW5GaWxlUmVxdWVzdElucHV0TW9kZWwoKTtcclxuICAgICAgICBpbnB1dC5maWxlVHlwZSA9IGRvd25sb2FkaXRlbS5maWxlVHlwZTtcclxuICAgICAgICBpbnB1dC5tb2RlbDNEID0gZG93bmxvYWRpdGVtLm1vZGVsM0Q7XHJcbiAgICAgICAgaW5wdXQudHJhbnNsYXRpb25TdWJDYXRlZ29yeSA9IGRvd25sb2FkaXRlbS50cmFuc2xhdGlvblN1YkNhdGVnb3J5O1xyXG4gICAgICAgIGlucHV0LnBkZlRlbXBsYXRlSWQgPSAtMTtcclxuICAgICAgICByZXF1ZXN0LmlucHV0cy5wdXNoKGlucHV0KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuSXNBY3RpdmUoKSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWw/LnNlbGVjdGVkUHJvZHVjdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuRG93bmxvYWRGaWxlKGlucHV0LmZpbGVUeXBlICsgXCJcIiwgdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuUHJvZHVjdCwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5pZCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5nZXRGYWJyaWthbnRlbkZpbGVWaWV3TW9kZWwocmVxdWVzdCkuc3Vic2NyaWJlKChtb2RlbDogRmFicmlrYW50ZW5GaWxlVmlld01vZGVsKSA9PiB7XHJcblxyXG4gICAgICAgICAgd2luZG93Lm9wZW4obW9kZWwuZmlsZSArIFwiXCIsIFwiX2JsYW5rXCIpO1xyXG5cclxuICAgICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIERvd25sb2FkKGRvd25sb2FkaXRlbTogRmFicmlrYW50ZW5TZXR0aW5nc0Rvd25sb2FkSXRlbVZpZXdNb2RlbCwgY3VzdG9tYmNiZWJvaWQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgaWYgKGRvd25sb2FkaXRlbS5maWxlVHlwZSA9PSBcImhkaFJldml0XCIpIHtcclxuICAgICAgdGhpcy5TaG93UmV2aXRQb3B1cChkb3dubG9hZGl0ZW0sIGN1c3RvbWJjYmVib2lkKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB2YXIgZG93bmxvYWRpdGVtcyA9IG5ldyBBcnJheTxGYWJyaWthbnRlblNldHRpbmdzRG93bmxvYWRJdGVtVmlld01vZGVsPigpO1xyXG4gICAgICBkb3dubG9hZGl0ZW1zLnB1c2goZG93bmxvYWRpdGVtKTtcclxuXHJcbiAgICAgIHRoaXMuRG93bmxvYWRJdGVtcyhkb3dubG9hZGl0ZW1zLCBjdXN0b21iY2JlYm9pZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgRG93bmxvYWRJdGVtcyhkb3dubG9hZGl0ZW1zOiBGYWJyaWthbnRlblNldHRpbmdzRG93bmxvYWRJdGVtVmlld01vZGVsW10sIGN1c3RvbWJjYmVib2lkOiBudW1iZXIgfCB1bmRlZmluZWQsIHBkZnRlbXBsYXRlcz86IEZhYnJpa2FudGVuUERGVGVtcGxhdGVWaWV3TW9kZWxbXSB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgRmFicmlrYW50ZW5GaWxlUmVxdWVzdE1vZGVsKCk7XHJcblxyXG4gICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuICAgIHJlcXVlc3QuY3VzdG9tQkNCRUJPSWQgPSBjdXN0b21iY2JlYm9pZDtcclxuICAgIHJlcXVlc3QubGFuZ3VhZ2VJZCA9IHRoaXMuVHJhbnNsYXRlU2VydmljZS5BY3RpdmVMYW5ndWFnZS5pZDtcclxuICAgIGlmICh0aGlzLlNWR1NlcnZpY2UuU2NoYWFsICE9IFwiXCIpIHtcclxuICAgICAgcmVxdWVzdC5zY2FsZSA9IHBhcnNlSW50KHRoaXMuU1ZHU2VydmljZS5TY2hhYWwpO1xyXG4gICAgfVxyXG4gICAgcmVxdWVzdC5pbnB1dHMgPSBuZXcgQXJyYXkoKTtcclxuXHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG93bmxvYWRpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBkb3dubG9hZGl0ZW1zW2ldLmxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgdmFyIGlucHV0ID0gbmV3IEZhYnJpa2FudGVuRmlsZVJlcXVlc3RJbnB1dE1vZGVsKCk7XHJcbiAgICAgIGlucHV0LmZpbGVUeXBlID0gZG93bmxvYWRpdGVtc1tpXS5maWxlVHlwZTtcclxuICAgICAgaW5wdXQubW9kZWwzRCA9IGRvd25sb2FkaXRlbXNbaV0ubW9kZWwzRDtcclxuICAgICAgaW5wdXQudHJhbnNsYXRpb25TdWJDYXRlZ29yeSA9IGRvd25sb2FkaXRlbXNbaV0udHJhbnNsYXRpb25TdWJDYXRlZ29yeTtcclxuICAgICAgaW5wdXQucGRmVGVtcGxhdGVJZCA9IC0xO1xyXG4gICAgICByZXF1ZXN0LmlucHV0cy5wdXNoKGlucHV0KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLklzQWN0aXZlKCkpIHtcclxuICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbD8uc2VsZWN0ZWRQcm9kdWN0ICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuRG93bmxvYWRGaWxlKGlucHV0LmZpbGVUeXBlICsgXCJcIiwgdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuUHJvZHVjdCwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5pZCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChwZGZ0ZW1wbGF0ZXMgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGRmdGVtcGxhdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcGRmdGVtcGxhdGVzW2ldLmxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICB2YXIgaW5wdXQgPSBuZXcgRmFicmlrYW50ZW5GaWxlUmVxdWVzdElucHV0TW9kZWwoKTtcclxuICAgICAgICBpbnB1dC5maWxlVHlwZSA9IFwicGRmXCI7XHJcbiAgICAgICAgaW5wdXQubW9kZWwzRCA9IGZhbHNlO1xyXG4gICAgICAgIGlucHV0LnBkZlRlbXBsYXRlSWQgPSBwZGZ0ZW1wbGF0ZXNbaV0udGVtcGxhdGVJZDtcclxuICAgICAgICByZXF1ZXN0LmlucHV0cy5wdXNoKGlucHV0KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuSXNBY3RpdmUoKSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWw/LnNlbGVjdGVkUHJvZHVjdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuRG93bmxvYWRGaWxlKGlucHV0LmZpbGVUeXBlICsgXCJcIiwgdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuUHJvZHVjdCwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5pZCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXF1ZXN0LmlucHV0cy5sZW5ndGggPT0gMSAmJiByZXF1ZXN0LmlucHV0c1swXS5maWxlVHlwZSA9PSBcImhkaFJldml0XCIpIHtcclxuICAgICAgZG93bmxvYWRpdGVtc1swXS5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuRG93bmxvYWQoZG93bmxvYWRpdGVtc1swXSwgdW5kZWZpbmVkKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LmdldEZhYnJpa2FudGVuRmlsZVZpZXdNb2RlbChyZXF1ZXN0KS5zdWJzY3JpYmUoKG1vZGVsOiBGYWJyaWthbnRlbkZpbGVWaWV3TW9kZWwpID0+IHtcclxuICAgICAgICBpZiAobW9kZWwuZmlsZVR5cGUgPT0gXCJoZGhSZXZpdFwiKSB7XHJcbiAgICAgICAgICB3aW5kb3cub3Blbihtb2RlbC5maWxlICsgXCJcIiwgXCJfYmxhbmtcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhciBmaWxlbmFtZSA9IG1vZGVsLmZpbGU/LnRvTG93ZXJDYXNlKCkgKyBcIlwiO1xyXG4gICAgICAgICAgaWYgKG1vZGVsLmZpbGVUeXBlID09IFwicmZhXCIgJiYgZmlsZW5hbWUuZW5kc1dpdGgoXCJydnRcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5TdGFydERvd25sb2FkKG1vZGVsLmZpbGUgKyBcIlwiLCBcIi5ydnRcIik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLlN0YXJ0RG93bmxvYWQobW9kZWwuZmlsZSArIFwiXCIsIFwiLlwiICsgbW9kZWwuZmlsZVR5cGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb3dubG9hZGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBkb3dubG9hZGl0ZW1zW2ldLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBkZnRlbXBsYXRlcyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGRmdGVtcGxhdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBkZnRlbXBsYXRlc1tpXS5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIERvd25sb2FkQ3VzdG9tKGN1c3RvbWRvd25sb2FkOiBGYWJyaWthbnRlbkN1c3RvbURvd25sb2FkVmlld01vZGVsKTogdm9pZCB7XHJcblxyXG4gICAgY3VzdG9tZG93bmxvYWQubG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgRmFicmlrYW50ZW5DdXN0b21Eb3dubG9hZFJlcXVlc3RNb2RlbCgpO1xyXG5cclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICByZXF1ZXN0LmN1c3RvbURvd25sb2FkSWQgPSBjdXN0b21kb3dubG9hZC5pZDtcclxuXHJcbiAgICBpZiAodGhpcy5TdGF0aXN0aWNzU2VydmljZS5Jc0FjdGl2ZSgpKSB7XHJcbiAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3QgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuRG93bmxvYWRGaWxlKGN1c3RvbWRvd25sb2FkLmRvd25sb2FkVHlwZSArIFwiXCIsIHRoaXMuVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LlByb2R1Y3QsIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuTmFtZSwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuaWQpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuZ2V0RmFicmlrYW50ZW5DdXN0b21Eb3dubG9hZFJlc3VsdE1vZGVsKHJlcXVlc3QpLnN1YnNjcmliZSgobW9kZWw6IEZhYnJpa2FudGVuQ3VzdG9tRG93bmxvYWRSZXN1bHRNb2RlbCkgPT4ge1xyXG4gICAgICB0aGlzLlN0YXJ0RG93bmxvYWQobW9kZWwuZmlsZSArIFwiXCIsIFwiLlwiICsgbW9kZWwuZmlsZVR5cGUpO1xyXG5cclxuICAgICAgY3VzdG9tZG93bmxvYWQubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTdGFydERvd25sb2FkKHVybDogc3RyaW5nLCBleHRlbnNpb246IHN0cmluZyk6IHZvaWQge1xyXG5cclxuICAgIHZhciBmaWxlbmFtZSA9IHRoaXMuQ29sbGVjdEZpbGVOYW1lKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5kaXNhYmxlQ3VzdG9tRmlsZU5hbWVzKSB7XHJcbiAgICAgIGZpbGVuYW1lID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJ1xcXFwnKSArIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaWxlbmFtZSAhPSBcIlwiKSB7XHJcbiAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUgKyBleHRlbnNpb247XHJcblxyXG4gICAgICBpZiAoZXh0ZW5zaW9uID09IFwiLnBkZlwiKSB7XHJcbiAgICAgICAgd2luZG93Lm9wZW4odXJsLCBcIl9ibGFua1wiKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiL0Rvd25sb2FkL0Rvd25sb2FkP3BVcmw9XCIgKyB1cmwgKyBcIiZwRmlsZU5hbWU9XCIgKyBmaWxlbmFtZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGFsZXJ0KCdlcnJvcjogbm8gcHJvZHVjdCBzZWxlY3RlZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIERvd25sb2FkQmVzdGVrKGRhdGE6IHN0cmluZykge1xyXG5cclxuICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuVHlwZUJlc3RlayA9PSBcIlNUQUJVXCIpIHtcclxuICAgICAgdGhpcy5Eb3dubG9hZEJlc3Rla0lubmVyKGRhdGEsIFwiLlMwMVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLlR5cGVCZXN0ZWsgPT0gXCJPU0ZcIikge1xyXG4gICAgICB0aGlzLkRvd25sb2FkQmVzdGVrSW5uZXIoZGF0YSwgXCIudHh0XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuVHlwZUJlc3RlayA9PSBcIlZyaWpcIikge1xyXG4gICAgICB0aGlzLkRvd25sb2FkQmVzdGVrSW5uZXIoZGF0YSwgXCIudHh0XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuVHlwZUJlc3RlayA9PSBcIkF1dG9TcGVjaWZpY2F0aW9uXCIpIHtcclxuICAgICAgdGhpcy5Eb3dubG9hZEJlc3Rla0lubmVyKGRhdGEsIFwiLnR4dFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5TdGF0aXN0aWNzU2VydmljZS5Jc0FjdGl2ZSgpKSB7XHJcbiAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3QgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuRG93bmxvYWRGaWxlKFwiYmVzdGVrXCIsIHRoaXMuVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LlByb2R1Y3QsIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuTmFtZSwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuaWQpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIERvd25sb2FkQmVzdGVrQXV0b1NwZWNpZmljYXRpb24oZGF0YTogc3RyaW5nKSB7XHJcblxyXG4gICAgdGhpcy5Eb3dubG9hZEJlc3Rla0lubmVyKGRhdGEsIFwiLnR4dFwiKTtcclxuXHJcbiAgICBpZiAodGhpcy5TdGF0aXN0aWNzU2VydmljZS5Jc0FjdGl2ZSgpKSB7XHJcbiAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3QgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuRG93bmxvYWRGaWxlKFwic3BlY2lmaWNhdGlvblwiLCB0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Qcm9kdWN0LCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5Lk5hbWUsIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0LmlkKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgRG93bmxvYWRCZXN0ZWtJbm5lcihkYXRhOiBzdHJpbmcsIGV4dGVuc2lvbjogc3RyaW5nKSB7XHJcbiAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgYy5kb3dubG9hZCA9IHRoaXMuQ29sbGVjdEZpbGVOYW1lKCkgKyBleHRlbnNpb247XHJcblxyXG4gICAgdmFyIHQgPSBuZXcgQmxvYihbZGF0YV0sIHtcclxuICAgICAgdHlwZTogXCJ0ZXh0L3BsYWluXCJcclxuICAgIH0pO1xyXG4gICAgYy5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwodCk7XHJcbiAgICBjLmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIENvbGxlY3RGaWxlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgdmFyIGZpbGVuYW1lID0gXCJcIjtcclxuXHJcbiAgICBpZiAodGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkFjdGl2ZUxhbmd1YWdlLmNvdW50cnlDb2RlID09IFwibmwtbmxcIikge1xyXG5cclxuICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIzRFwiKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgZmlsZW5hbWUgPSB0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlbjNEVmlld01vZGVsLmluc3RhbnRpZU5hYW0gKyBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIyRFwiKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICBmaWxlbmFtZSA9IHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5pbnN0YW50aWVOYWFtICsgXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiQmVzdGVrXCIpIHtcclxuICAgICAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsICE9IG51bGwpIHtcclxuICAgICAgICAgIGZpbGVuYW1lID0gdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmluc3RhbnRpZU5hYW0gKyBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCJUb2ViZWhvcmVuXCIpIHtcclxuICAgICAgICBpZiAodGhpcy5HZXRTZWxlY3RlZFRvZWJlaG9yZW4oKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICBmaWxlbmFtZSA9IHRoaXMuR2V0U2VsZWN0ZWRUb2ViZWhvcmVuKCk/Lm5hbWUgKyBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaWxlbmFtZSA9PSBcIlwiICYmIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWw/LnNlbGVjdGVkUHJvZHVjdD8uaWQgIT0gbnVsbCkge1xyXG4gICAgICB2YXIgaWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3Q/LmlkO1xyXG5cclxuICAgICAgZmlsZW5hbWUgPSB0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Qcm9kdWN0LCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5Lk5hbWUsIGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoL1teYS16MC05XS9naSwgJ18nKTtcclxuXHJcbiAgICByZXR1cm4gZmlsZW5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyBSZWxvYWRzXHJcblxyXG4gIHB1YmxpYyBUcmlnZ2VyUmVsb2FkcyhDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5TaG93UmVxdWlyZWQoKSkge1xyXG4gICAgICB2YXIgYXJyYXkgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdD8uZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVscztcclxuXHJcbiAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwuaGlkZUluZm9ybWF0aW9uVGFiICYmIHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCJJbmZvcm1hdGllXCIpIHtcclxuICAgICAgICB0aGlzLlNlbGVjdGVkVGFiID0gXCIzRFwiO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYXJyYXkgIT0gbnVsbCAmJiAoYXJyYXkubGVuZ3RoID09IDEgfHwgdGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLmFsd2F5c1Nob3dWYXJpYW50KSkge1xyXG4gICAgICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiQmVzdGVrXCIgfHwgdGhpcy5Gb3JjZVVwZGF0ZUJlc3Rlaykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuVHJhbnNsYXRlU2VydmljZS5TaG93U3BlY2lmaWNhdGlvbigpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNoZWNrc3VtICE9IHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbD8uY2hlY2tzdW0pIHtcclxuICAgICAgICAgICAgICB0aGlzLkJlc3Rla1NlcnZpY2UuTG9hZEZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkIGFzIHN0cmluZywgQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNNb2RlbHMoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuU2hvd0F1dG9TcGVjaWZpY2F0aW9uKCkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2hlY2tzdW0gIT0gdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQXV0b1NwZWNpZmljYXRpb25WaWV3TW9kZWw/LmNoZWNrc3VtKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5CZXN0ZWtTZXJ2aWNlLkxvYWRGYWJyaWthbnRlbkF1dG9TcGVjaWZpY2F0aW9uVmlld01vZGVsKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkIGFzIHN0cmluZywgdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkFjdGl2ZUxhbmd1YWdlLmlkLCBDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY01vZGVscyhDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiM0RcIiB8fCB0aGlzLkZvcmNlVXBkYXRlM0QpIHtcclxuICAgICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNoZWNrc3VtICE9IHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWw/LmNoZWNrc3VtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuV2ViR0xTZXJ2aWNlLkxvYWRGYWJyaWthbnRlbjNEVmlld01vZGVsKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkIGFzIHN0cmluZywgQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNNb2RlbHMoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIyRFwiIHx8IHRoaXMuRm9yY2VVcGRhdGUyRCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2hlY2tzdW0gIT0gdGhpcy5TVkdTZXJ2aWNlLkZhYnJpa2FudGVuU1ZHVmlld01vZGVsPy5jaGVja3N1bSkge1xyXG4gICAgICAgICAgICB0aGlzLlNWR1NlcnZpY2UuTG9hZEZhYnJpa2FudGVuU1ZHVmlld01vZGVsKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkIGFzIHN0cmluZywgQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNNb2RlbHMoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCJUZXh0dXJlXCIgfHwgdGhpcy5Gb3JjZVVwZGF0ZVRleHR1cmUpIHtcclxuICAgICAgICAgIHRoaXMuVGV4dHVyZVNlcnZpY2UuTG9hZEZhYnJpa2FudGVuVGV4dHVyZVZpZXdNb2RlbCh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZCBhcyBzdHJpbmcsIENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEJyZWFkY3J1bWJcclxuXHJcbiAgcHVibGljIEdldFN0ZXBzKCk6IEFycmF5PEZhYnJpa2FudGVuQ2F0ZWdvcnlWaWV3TW9kZWw+IHtcclxuICAgIHZhciByZXR1cm5hcnJheSA9IG5ldyBBcnJheTxGYWJyaWthbnRlbkNhdGVnb3J5Vmlld01vZGVsPigpO1xyXG5cclxuICAgIHZhciBhcnJheSA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWw/LmNhdGVnb3J5TGF5ZXJzO1xyXG5cclxuICAgIGlmIChhcnJheSAhPSBudWxsKSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoYXJyYXlbaV0uc2VsZWN0ZWRPcHRpb24gIT0gMCkge1xyXG4gICAgICAgICAgdmFyIG9wdGlvbnMgPSBhcnJheVtpXS5jYXRlZ29yaWVzO1xyXG5cclxuICAgICAgICAgIGlmIChvcHRpb25zICE9IG51bGwpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvcHRpb25zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnNbal0uaWQgPT09IGFycmF5W2ldLnNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5hcnJheS5wdXNoKG9wdGlvbnNbal0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXR1cm5hcnJheTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBHZXRTZWxlY3RlZFRvZWJlaG9yZW4oKTogRmFicmlrYW50ZW5CQ0JQcm9kdWN0VG9lYmVob3JlblZpZXdNb2RlbCB8IG51bGwge1xyXG4gICAgdmFyIHRvZWJlaG9yZW46IEZhYnJpa2FudGVuQkNCUHJvZHVjdFRvZWJlaG9yZW5WaWV3TW9kZWwgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0Py5mYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWxzICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVscy5sZW5ndGggPiAwICYmXHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0LmZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbHNbMF0uYmNiUHJvZHVjdFRvZWJlaG9yZW4gIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5mYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWxzWzBdLmJjYlByb2R1Y3RUb2ViZWhvcmVuLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVsc1swXS5iY2JQcm9kdWN0VG9lYmVob3Jlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5mYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWxzWzBdLmJjYlByb2R1Y3RUb2ViZWhvcmVuW2ldLmlkID09IHRoaXMuU2VsZWN0ZWRUb2ViZWhvcmVuPy5pZCkge1xyXG4gICAgICAgICAgdG9lYmVob3JlbiA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0LmZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbHNbMF0uYmNiUHJvZHVjdFRvZWJlaG9yZW5baV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRvZWJlaG9yZW47XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
1312
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFicmlrYW50ZW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvc2VydmljZXMvZmFicmlrYW50ZW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc5RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUUxRyxPQUFPLEVBVUwsdUJBQXVCLEVBRXZCLG9CQUFvQixFQUNwQix1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDekIsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUl6QixtQkFBbUIsRUFFbkIsMkJBQTJCLEVBRTNCLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBRXRCLHlCQUF5QixFQUN6Qiw4QkFBOEIsRUFHOUIsZ0NBQWdDLEVBR2hDLHFDQUFxQyxFQUVyQyxtQ0FBbUMsRUFFbkMsbUJBQW1CLEVBRXBCLE1BQU0sMEJBQTBCLENBQUM7QUFTbEMsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sZ0dBQWdHLENBQUM7QUFDbkosT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdURBQXVELENBQUM7Ozs7Ozs7Ozs7Ozs7QUFROUYsTUFDYSxrQkFBa0I7SUFnQ25CO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNEO0lBQ0M7SUF6Q0YsSUFBSSxHQUFZLEtBQUssQ0FBQztJQUV0QixrQkFBa0IsR0FBWSxLQUFLLENBQUM7SUFDcEMscUJBQXFCLEdBQVksS0FBSyxDQUFDO0lBQ3ZDLFVBQVUsR0FBVywyQkFBMkIsQ0FBQztJQUNqRCxrQkFBa0IsR0FBVyxTQUFTLENB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O2dCQUNqSSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLEVBQUU7b0JBQzFJLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNuSDthQUNGO1NBQ0Y7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO3dHQXZqRFUsa0JBQWtCOzRHQUFsQixrQkFBa0IsY0FETCxNQUFNOztTQUNuQixrQkFBa0I7NEZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRMZWdhY3lEaWFsb2cgYXMgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBGYWJDb29raWVzRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9mYWItY29va2llcy1kaWFsb2cvZmFiLWNvb2tpZXMtZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEZhYnJpa2FudGVuQXBpQ2xpZW50LFxyXG4gIEZhYnJpa2FudGVuRmlsdGVyVmlld01vZGVsLFxyXG4gIEZhYnJpa2FudGVuRmlsdGVyT3B0aW9uVmlld01vZGVsLFxyXG4gIEZhYnJpa2FudGVuVmlld01vZGVsLFxyXG4gIEZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwsXHJcbiAgRmFicmlrYW50ZW5Qcm9kdWN0Vmlld01vZGVsLFxyXG4gIEZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbCxcclxuICBGYWJyaWthbnRlbkNhdGVnb3J5TGF5ZXJWaWV3TW9kZWwsXHJcbiAgRmFicmlrYW50ZW5CQ0JQcm9kdWN0VG9lYmVob3JlblZpZXdNb2RlbCxcclxuICBGYWJyaWthbnRlblJlcXVlc3RNb2RlbCxcclxuICBGYWJyaWthbnRlbkNhdGVnb3J5Vmlld01vZGVsLFxyXG4gIFNlbGVjdFByb2R1Y3RSZXF1ZXN0LFxyXG4gIFNlbGVjdEJDQlByb2R1Y3RSZXF1ZXN0LFxyXG4gIFNlbGVjdEZpbHRlck9wdGlvblJlcXVlc3QsXHJcbiAgU2VsZWN0Q2F0ZWdvcnlSZXF1ZXN0LFxyXG4gIFNldFJhbmdlSW5wdXRSZXF1ZXN0LFxyXG4gIFJlc2V0RmlsdGVyUmVxdWVzdCxcclxuICBSZXNldEFsbEZpbHRlcnNSZXF1ZXN0LFxyXG4gIFJlc2V0Q2F0ZWdvcnlMYXllclJlcXVlc3QsXHJcbiAgUmVtb3ZlUHJvZHVjdFNlbGVjdGlvblJlcXVlc3QsXHJcbiAgUmVzZXRBbGxDYXRlZ29yaWVzUmVxdWVzdCxcclxuICBEeW5hbWljRmlsdGVyc1ZpZXdNb2RlbCxcclxuICBEeW5hbWljUmFuZ2VJbnB1dFZpZXdNb2RlbCxcclxuICBEeW5hbWljRGlzcGxheVZhbHVlVmlld01vZGVsLFxyXG4gIEJDQkxpbmtSZXF1ZXN0TW9kZWwsXHJcbiAgQkNCTGlua1Jlc3BvbnNlTW9kZWwsXHJcbiAgRmFicmlrYW50ZW5GaWxlUmVxdWVzdE1vZGVsLFxyXG4gIEZhYnJpa2FudGVuRmlsZVZpZXdNb2RlbCxcclxuICBTZWxlY3RDb2xvdXJSZXF1ZXN0LFxyXG4gIFRyYW5zbGF0aW9uQ2F0ZWdvcnksXHJcbiAgVHJhbnNsYXRpb25TdWJDYXRlZ29yeSxcclxuICBGYWJyaWthbnRlbklucHV0Vmlld01vZGVsLFxyXG4gIFNlbGVjdEZpbHRlckN1c3RvbVJlcXVlc3QsXHJcbiAgRmFicmlrYW50ZW5PcGVuSW5zdGFuY2VSZXF1ZXN0LFxyXG4gIEZhYnJpa2FudGVuT3Blbkluc3RhbmNlUmVzcG9uc2UsXHJcbiAgRmFicmlrYW50ZW5TZXR0aW5nc0Rvd25sb2FkSXRlbVZpZXdNb2RlbCxcclxuICBGYWJyaWthbnRlbkZpbGVSZXF1ZXN0SW5wdXRNb2RlbCxcclxuICBGYWJyaWthbnRlblBERlRlbXBsYXRlVmlld01vZGVsLFxyXG4gIEZhYnJpa2FudGVuQ3VzdG9tRG93bmxvYWRWaWV3TW9kZWwsXHJcbiAgRmFicmlrYW50ZW5DdXN0b21Eb3dubG9hZFJlcXVlc3RNb2RlbCxcclxuICBGYWJyaWthbnRlbkN1c3RvbURvd25sb2FkUmVzdWx0TW9kZWwsXHJcbiAgRmFicmlrYW50ZW5TZXRDb29raWVTZXR0aW5nc1JlcXVlc3QsXHJcbiAgRmFicmlrYW50ZW5Gb3JtSW5wdXRPcHRpb25WaWV3TW9kZWwsXHJcbiAgU2V0U2tpcEZvcm1zUmVxdWVzdCxcclxuICBGYWJyaWthbnRlbkluc3RhbmNlVmlld01vZGVsXHJcbn0gZnJvbSAnLi4vc3dhZ2dlci9Td2FnZ2VyQ2xpZW50JztcclxuaW1wb3J0IHsgQmVzdGVrU2VydmljZSB9IGZyb20gJy4vYmVzdGVrLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0ZVNlcnZpY2UgfSBmcm9tICcuL25hdmlnYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGF0aXN0aWNzU2VydmljZSB9IGZyb20gJy4vc3RhdGlzdGljcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU1ZHU2VydmljZSB9IGZyb20gJy4vc3ZnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUZXh0dXJlU2VydmljZSB9IGZyb20gJy4vdGV4dHVyZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4vdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXZWJHTFNlcnZpY2UgfSBmcm9tICcuL3dlYmdsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnbmd4LWNvb2tpZS1zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmFiQWN0aW9ubWVudVJldml0RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9mYWItYWN0aW9ubWVudS9mYWItYWN0aW9ubWVudS1yZXZpdC1kaWFsb2cvZmFiLWFjdGlvbm1lbnUtcmV2aXQtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZhYlBvcHVwVGV4dENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZmFiLXBvcHVwLXRleHQvZmFiLXBvcHVwLXRleHQuY29tcG9uZW50JztcclxuXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICBpbnRlcmZhY2UgV2luZG93IHtcclxuICAgIGNocm9tZT86IGFueTtcclxuICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBGYWJyaWthbnRlblNlcnZpY2Uge1xyXG4gIHByaXZhdGUgSW5pdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIFNob3dpbmdDb29raWVQb3B1cDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgUmVhZENvb2tpZVBlcm1pc3Npb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBDb29raWVOYW1lOiBzdHJpbmcgPSBcIkdvb2dsZUFuYWx5dGljc1Blcm1pc3Npb25cIjtcclxuICBwcml2YXRlIENvb2tpZVN0YXRlUmVmdXNlZDogc3RyaW5nID0gXCJyZWZ1c2VkXCI7XHJcbiAgcHJpdmF0ZSBDb29raWVTdGF0ZUFjY2VwdGVkOiBzdHJpbmcgPSBcImFjY2VwdGVkXCI7XHJcblxyXG4gIHB1YmxpYyBMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgU2VsZWN0ZWRUYWJJbmRleDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHVibGljIEZvcmNlT3BlbkZpbHRlcklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgRmFicmlrYW50ZW5WaWV3TW9kZWw6IEZhYnJpa2FudGVuVmlld01vZGVsO1xyXG5cclxuICBwdWJsaWMgU2V0dGluZ3NMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbDogRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbDtcclxuXHJcbiAgcHVibGljIEZhYnJpa2FudGVuSW5zdGFuY2VWaWV3TW9kZWw6IEZhYnJpa2FudGVuSW5zdGFuY2VWaWV3TW9kZWwgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHVibGljIFNlbGVjdGVkUGhvdG86IG51bWJlciA9IDA7XHJcbiAgcHVibGljIFNlbGVjdGVkVG9lYmVob3JlbjogRmFicmlrYW50ZW5CQ0JQcm9kdWN0VG9lYmVob3JlblZpZXdNb2RlbCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwdWJsaWMgU2VsZWN0ZWRUYWI6IHN0cmluZyA9IFwiSW5mb3JtYXRpZVwiO1xyXG4gIHB1YmxpYyBGb3JjZVVwZGF0ZUJlc3RlazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBGb3JjZVVwZGF0ZTNEOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIEZvcmNlVXBkYXRlMkQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgRm9yY2VVcGRhdGVUZXh0dXJlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIEZhYnJpa2FudGVuQXBpQ2xpZW50OiBGYWJyaWthbnRlbkFwaUNsaWVudCxcclxuICAgIHByaXZhdGUgQmVzdGVrU2VydmljZTogQmVzdGVrU2VydmljZSxcclxuICAgIHByaXZhdGUgVHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgV2ViR0xTZXJ2aWNlOiBXZWJHTFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIFNWR1NlcnZpY2U6IFNWR1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIFRleHR1cmVTZXJ2aWNlOiBUZXh0dXJlU2VydmljZSxcclxuICAgIHByaXZhdGUgTmF2aWdhdGVTZXJ2aWNlOiBOYXZpZ2F0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIENvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIFJvdXRlcjogUm91dGVyLFxyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBTdGF0aXN0aWNzU2VydmljZTogU3RhdGlzdGljc1NlcnZpY2UpIHtcclxuICAgIHRoaXMuTmF2aWdhdGVTZXJ2aWNlLkZhYnJpa2FudGVuU2VydmljZSA9IHRoaXM7XHJcbiAgICB0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TZXJ2aWNlID0gdGhpcztcclxuICAgIHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuU2VydmljZSA9IHRoaXM7XHJcbiAgICB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5TZXJ2aWNlID0gdGhpcztcclxuICAgIHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuRmFicmlrYW50ZW5TZXJ2aWNlID0gdGhpcztcclxuICAgIHRoaXMuVHJhbnNsYXRlU2VydmljZS5GYWJyaWthbnRlblNlcnZpY2UgPSB0aGlzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFJlc2V0QWxsRmlsdGVycyhDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVzZXRBbGxGaWx0ZXJzUmVxdWVzdCgpO1xyXG4gICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuXHJcbiAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LnJlc2V0QWxsRmlsdGVycyhyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNlbGVjdE9wdGlvbihmaWx0ZXJpZDogbnVtYmVyLCBmaWx0ZXJvcHRpb25pZDogbnVtYmVyLCBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIEFjdGl2YXRlZFJvdXRlPzogQWN0aXZhdGVkUm91dGUpOiB2b2lkIHtcclxuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgU2VsZWN0RmlsdGVyT3B0aW9uUmVxdWVzdCgpO1xyXG5cclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICByZXF1ZXN0LmZpbHRlck9wdGlvbklkID0gZmlsdGVyb3B0aW9uaWQ7XHJcbiAgICByZXF1ZXN0LmZpbHRlcklkID0gZmlsdGVyaWQ7XHJcblxyXG4gICAgaWYgKHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuSXNBY3RpdmUoKSkge1xyXG4gICAgICB0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLlNlbGVjdEZpbHRlck9wdGlvbih0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5GaWx0ZXIsIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuTmFtZSwgZmlsdGVyaWQpLCB0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5GaWx0ZXJPcHRpb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuTmFtZSwgZmlsdGVyb3B0aW9uaWQpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LnNlbGVjdEZpbHRlck9wdGlvbihyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTZWxlY3RDb2xvdXIoZmlsdGVyaWQ6IG51bWJlciwgY29sb3VyOiBzdHJpbmcsIGNvbG91cnZhbHVlOiBzdHJpbmcsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBTZWxlY3RDb2xvdXJSZXF1ZXN0KCk7XHJcblxyXG4gICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuICAgIHJlcXVlc3QuY29sb3VyTmFtZSA9IGNvbG91cjtcclxuICAgIHJlcXVlc3QuY29sb3VyVmFsdWUgPSBjb2xvdXJ2YWx1ZTtcclxuICAgIHJlcXVlc3QuZmlsdGVySWQgPSBmaWx0ZXJpZDtcclxuXHJcbiAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LnNlbGVjdENvbG91cihyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNlbGVjdEZpbHRlckN1c3RvbShmaWx0ZXJpZDogbnVtYmVyLCBjdXN0b212YWx1ZTogc3RyaW5nLCBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgU2VsZWN0RmlsdGVyQ3VzdG9tUmVxdWVzdCgpO1xyXG5cclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICByZXF1ZXN0LmN1c3RvbVZhbHVlID0gY3VzdG9tdmFsdWU7XHJcbiAgICByZXF1ZXN0LmZpbHRlcklkID0gZmlsdGVyaWQ7XHJcblxyXG4gICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5zZWxlY3RGaWx0ZXJDdXN0b20ocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5SZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTZXRSYW5nZUlucHV0KHJhbmdlaW5wdXRpZDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyLCBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIEFjdGl2YXRlZFJvdXRlPzogQWN0aXZhdGVkUm91dGUpOiB2b2lkIHtcclxuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgU2V0UmFuZ2VJbnB1dFJlcXVlc3QoKTtcclxuXHJcbiAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG4gICAgcmVxdWVzdC5yYW5nZUlucHV0SWQgPSByYW5nZWlucHV0aWQ7XHJcbiAgICByZXF1ZXN0LnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgaWYgKHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuSXNBY3RpdmUoKSkge1xyXG4gICAgICB0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLlNlbGVjdFJhbmdlVmFsdWUodGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuUmFuZ2VJbnB1dCwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCByYW5nZWlucHV0aWQpLCB2YWx1ZSArIFwiXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuc2V0UmFuZ2VJbnB1dChyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBGb3JjZVNlbGVjdENhdGVnb3J5KGNhdGVnb3J5aWQ6IG51bWJlciwgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXNldEFsbENhdGVnb3JpZXNSZXF1ZXN0KCk7XHJcblxyXG4gICAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG5cclxuICAgICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5yZXNldEFsbENhdGVnb3JpZXMocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB2YXIgcmVxdWVzdGNhdCA9IG5ldyBTZWxlY3RDYXRlZ29yeVJlcXVlc3QoKTtcclxuXHJcbiAgICAgICAgcmVxdWVzdGNhdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuICAgICAgICByZXF1ZXN0Y2F0LmNhdGVnb3J5SWQgPSBjYXRlZ29yeWlkO1xyXG4gICAgICAgIHJlcXVlc3RjYXQuY2F0ZWdvcnlMYXllciA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuc2VsZWN0Q2F0ZWdvcnkocmVxdWVzdGNhdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuUmVsb2FkTW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDAwKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvci5qc29uKCkpO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MDApXHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvci5qc29uKCkpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBTZWxlY3RDYXRlZ29yeShjYXRlZ29yeTogRmFicmlrYW50ZW5DYXRlZ29yeVZpZXdNb2RlbCwgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZT86IEFjdGl2YXRlZFJvdXRlKTogdm9pZCB7XHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFNlbGVjdENhdGVnb3J5UmVxdWVzdCgpO1xyXG5cclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICByZXF1ZXN0LmNhdGVnb3J5SWQgPSBjYXRlZ29yeS5pZDtcclxuICAgIHJlcXVlc3QuY2F0ZWdvcnlMYXllciA9IGNhdGVnb3J5LmxheWVyO1xyXG5cclxuICAgIGlmICh0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLklzQWN0aXZlKCkpIHtcclxuICAgICAgdGhpcy5TdGF0aXN0aWNzU2VydmljZS5TZWxlY3RDYXRlZ29yeSh0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5DYXRlZ29yeSwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCBjYXRlZ29yeS5pZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuc2VsZWN0Q2F0ZWdvcnkocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5SZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcblxyXG4gICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2VsZWN0UHJvZHVjdChwcm9kdWN0OiBGYWJyaWthbnRlblByb2R1Y3RWaWV3TW9kZWwsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGU/OiBBY3RpdmF0ZWRSb3V0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBTZWxlY3RQcm9kdWN0UmVxdWVzdCgpO1xyXG5cclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICByZXF1ZXN0LnByb2R1Y3RJZCA9IHByb2R1Y3QuaWQ7XHJcblxyXG4gICAgaWYgKHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuSXNBY3RpdmUoKSkge1xyXG4gICAgICB0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLlNlbGVjdFByb2R1Y3QodGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuUHJvZHVjdCwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCBwcm9kdWN0LmlkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5zZWxlY3RQcm9kdWN0KHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRUb2ViZWhvcmVuID0gbnVsbDtcclxuICAgICAgdGhpcy5SZXNldFRhYnMoKTtcclxuXHJcbiAgICAgIHRoaXMuUmVsb2FkTW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWYsIEFjdGl2YXRlZFJvdXRlKTtcclxuICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNlbGVjdEJDQlByb2R1Y3QoYmNicHJvZHVjdDogRmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVsLCBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgU2VsZWN0QkNCUHJvZHVjdFJlcXVlc3QoKTtcclxuXHJcbiAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG4gICAgcmVxdWVzdC5iY2JQcm9kdWN0SWQgPSBiY2Jwcm9kdWN0LmlkO1xyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuc2VsZWN0QkNCUHJvZHVjdChyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFJlc2V0U2VsZWN0aW9uRmlsdGVyKGZpbHRlcjogRmFicmlrYW50ZW5GaWx0ZXJWaWV3TW9kZWwsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGU/OiBBY3RpdmF0ZWRSb3V0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXNldEZpbHRlclJlcXVlc3QoKTtcclxuICAgIHJlcXVlc3QuZmlsdGVySWQgPSBmaWx0ZXIuaWQ7XHJcbiAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQucmVzZXRGaWx0ZXJTZWxlY3Rpb24ocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5SZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcblxyXG4gICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUmVzZXRBbGxDYXRlZ29yaWVzKENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVzZXRBbGxDYXRlZ29yaWVzUmVxdWVzdCgpO1xyXG5cclxuICAgICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuXHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQucmVzZXRBbGxDYXRlZ29yaWVzKHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5SZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwMClcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yLmpzb24oKSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIFJlc2V0U2VsZWN0aW9uQ2F0ZWdvcnkoY2F0ZWdvcnlsYXllcjogRmFicmlrYW50ZW5DYXRlZ29yeVZpZXdNb2RlbCwgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlc2V0Q2F0ZWdvcnlMYXllclJlcXVlc3QoKTtcclxuICAgIHJlcXVlc3QuY2F0ZWdvcnlMYXllciA9IGNhdGVnb3J5bGF5ZXIubGF5ZXI7XHJcbiAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQucmVzZXRDYXRlZ29yeUxheWVyU2VsZWN0aW9uKHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuUmVzZXRBbGxGaWx0ZXJzKENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFJlbW92ZVByb2R1Y3RTZWxlY3Rpb24oQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZW1vdmVQcm9kdWN0U2VsZWN0aW9uUmVxdWVzdCgpO1xyXG5cclxuICAgICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuXHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQucmVtb3ZlUHJvZHVjdFNlbGVjdGlvbihyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuU2VsZWN0ZWRUb2ViZWhvcmVuID0gbnVsbDtcclxuICAgICAgICB0aGlzLlJlc2V0VGFicygpO1xyXG5cclxuICAgICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDAwKVxyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IuanNvbigpKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgVGFiU2VsZWN0aW9uQ2hhbmdlZCh0YWI6IHN0cmluZywgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XHJcbiAgICB0aGlzLlNlbGVjdGVkVGFiID0gdGFiO1xyXG5cclxuICAgIHRoaXMuVHJpZ2dlclJlbG9hZHMoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldEZpcnN0T3BlbkNhdGVnb3J5TGF5ZXIoKTogRmFicmlrYW50ZW5DYXRlZ29yeUxheWVyVmlld01vZGVsIHwgbnVsbCB7XHJcbiAgICB2YXIgYXJyYXlsYXllcnMgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5jYXRlZ29yeUxheWVycztcclxuXHJcbiAgICBpZiAoYXJyYXlsYXllcnMgIT0gbnVsbCkge1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5bGF5ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFycmF5bGF5ZXJzW2ldLnNlbGVjdGVkT3B0aW9uID09IDApIHtcclxuICAgICAgICAgIHJldHVybiBhcnJheWxheWVyc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93Q2F0ZWdvcmllcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLkdldEZpcnN0T3BlbkNhdGVnb3J5TGF5ZXIoKSAhPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dSZXF1aXJlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0cyAhPSBudWxsKSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHNbaV0uZmlsdGVyPy5oaWRkZW4gIT0gdHJ1ZSAmJlxyXG4gICAgICAgICAgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHNbaV0ucmVxdWlyZWQgJiZcclxuICAgICAgICAgICF0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0c1tpXS5maWxsZWQpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93VGV4dHVyZSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdD8udGV4dHVyZUJhc2VWaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd1RvZWJlaG9yZW4oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsPy5lbmFibGVUb2ViZWhvcmVuID09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dWYXJpYW50cygpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsICE9IG51bGwgJiYgdGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsICE9IG51bGwpIHtcclxuICAgICAgaWYgKCF0aGlzLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwuYWx3YXlzU2hvd1ZhcmlhbnQpIHtcclxuICAgICAgICB2YXIgYmNicHJvZHVjdHMgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdD8uZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVscztcclxuXHJcbiAgICAgICAgaWYgKGJjYnByb2R1Y3RzICE9IG51bGwgJiYgYmNicHJvZHVjdHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dBY3Rpb25NZW51KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWw/LnNlbGVjdGVkUHJvZHVjdCA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5TaG93VmFyaWFudHMoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIzRFwiKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiMkRcIikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIkJlc3Rla1wiKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiVGV4dHVyZVwiKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiVG9lYmVob3JlblwiKSB7XHJcbiAgICAgIGlmICh0aGlzLkhhc1RvZWJlaG9yZW4oKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIElzQVByb2R1Y3RTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3QgIT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgSGFzVG9lYmVob3JlbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3Q/LmZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbHMgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbD8uc2VsZWN0ZWRQcm9kdWN0Py5mYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVsc1swXS5iY2JQcm9kdWN0VG9lYmVob3JlbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVsc1swXS5iY2JQcm9kdWN0VG9lYmVob3Jlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBHZXRUb29sVGlwTW9kZURlZmF1bHQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5HZXRUb29sVGlwTW9kZSgpID09IFwiRGVmYXVsdFwiO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldFRvb2xUaXBNb2RlRm9sZERvd24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5HZXRUb29sVGlwTW9kZSgpID09IFwiRm9sZERvd25cIjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBHZXRUb29sVGlwTW9kZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbD8udG9vbHRpcE1vZGUgIT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLnRvb2x0aXBNb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBcIlwiO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIE9wZW5CQ0JMaW5rKCk6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICB2YXIgd3VpZDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIjNEXCIpIHtcclxuICAgICAgd3VpZCA9IHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwud3VpZCArIFwiXCJcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIyRFwiKSB7XHJcbiAgICAgIHd1aWQgPSB0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWw/Lnd1aWQgKyBcIlwiXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiQmVzdGVrXCIpIHtcclxuICAgICAgd3VpZCA9IHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbC53dWlkICsgXCJcIlxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIlRvZWJlaG9yZW5cIikge1xyXG4gICAgICB3dWlkID0gdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLnd1aWQgKyBcIlwiXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiVGV4dHVyZVwiKSB7XHJcbiAgICAgIHd1aWQgPSB0aGlzLlRleHR1cmVTZXJ2aWNlLkZhYnJpa2FudGVuVGV4dHVyZVZpZXdNb2RlbC53dWlkICsgXCJcIlxyXG4gICAgfVxyXG5cclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IEJDQkxpbmtSZXF1ZXN0TW9kZWwoKTtcclxuICAgIHJlcXVlc3Qud3VpZCA9IHd1aWQ7XHJcblxyXG4gICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5nZXRCQ0JMaW5rKHJlcXVlc3QpLnN1YnNjcmliZSgobW9kZWw6IEJDQkxpbmtSZXNwb25zZU1vZGVsKSA9PiB7XHJcbiAgICAgIHdpbmRvdy5vcGVuKG1vZGVsLnVybCwgJ19ibGFuaycpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2V0U2tpcEZvcm1zKCk6IHZvaWQge1xyXG4gICAgdmFyIGV4ZWN1dGUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLnNraXBGb3JtUGFzc3dvcmQgPT0gJycpIHtcclxuICAgICAgZXhlY3V0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHd3ID0gcHJvbXB0KFwiRW50ZXIgcGFzc3dvcmRcIiwgXCJcIik7XHJcbiAgICAgIGlmICh3dyA9PSB0aGlzLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwuc2tpcEZvcm1QYXNzd29yZCkge1xyXG4gICAgICAgIGV4ZWN1dGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFsZXJ0KFwid3JvbmcgcGFzc3dvcmRcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXhlY3V0ZSkge1xyXG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBTZXRTa2lwRm9ybXNSZXF1ZXN0KCk7XHJcblxyXG4gICAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG5cclxuICAgICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5zZXRTa2lwRm9ybXMocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUmVsb2FkTW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZT86IEFjdGl2YXRlZFJvdXRlLCBDYWxsQmFjaz86IGFueSkge1xyXG4gICAgdGhpcy5Jbml0ID0gZmFsc2U7XHJcbiAgICB0aGlzLkxvYWRGYWJyaWthbnRlblZpZXdNb2RlbChDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUsIENhbGxCYWNrKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBMb2FkRmFicmlrYW50ZW5WaWV3TW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZT86IEFjdGl2YXRlZFJvdXRlLCBDYWxsQmFjaz86IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLkluaXQpIHtcclxuICAgICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLlNldHRpbmdzTG9hZGVkKSB7XHJcbiAgICAgICAgdGhpcy5Mb2FkRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbChDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkluaXQpIHtcclxuICAgICAgICAgIHRoaXMuVHJhbnNsYXRlU2VydmljZS5Mb2FkVHJhbnNsYXRpb25zKENoYW5nZURldGVjdG9yUmVmLCB0aGlzLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5Jbml0ID0gdHJ1ZTtcclxuICAgICAgICAgIHZhciByZXF1ZXN0ID0gbmV3IEZhYnJpa2FudGVuUmVxdWVzdE1vZGVsKCk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gXCJcIjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5nZXRGYWJyaWthbnRlblZpZXdNb2RlbChyZXF1ZXN0KS5zdWJzY3JpYmUoKG1vZGVsOiBGYWJyaWthbnRlblZpZXdNb2RlbCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWw/LnNlbGVjdGVkUHJvZHVjdD8ucGRmVGVtcGxhdGVzICE9IG51bGwgJiYgbW9kZWwuc2VsZWN0ZWRQcm9kdWN0Py5wZGZUZW1wbGF0ZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIHZhciBhcnJheTEgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5wZGZUZW1wbGF0ZXM7XHJcbiAgICAgICAgICAgICAgdmFyIGFycmF5MiA9IG1vZGVsLnNlbGVjdGVkUHJvZHVjdC5wZGZUZW1wbGF0ZXM7XHJcblxyXG4gICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkxLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFycmF5Mi5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoYXJyYXkxW2ldLnRlbXBsYXRlSWQgPT0gYXJyYXkyW2pdLnRlbXBsYXRlSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheTJbal0uY2hlY2tlZCA9IGFycmF5MVtpXS5jaGVja2VkO1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5MltqXS5sb2FkaW5nID0gYXJyYXkxW2ldLmxvYWRpbmc7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJuZXcgRmFicmlrYW50ZW5WaWV3TW9kZWxcIik7XHJcbiAgICAgICAgICAgIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwgPSBtb2RlbDtcclxuICAgICAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5nb29nbGVBbmFseXRpY3NFbmFibGVkICYmXHJcbiAgICAgICAgICAgICAgIXRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwudXNlckhhc0Fuc3dlcmVkQ29va2llcyAmJlxyXG4gICAgICAgICAgICAgICF0aGlzLlNob3dpbmdDb29raWVQb3B1cCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuR2V0Q29va2llUGVybWlzc2lvbnMoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5Gb3JjZU9wZW5GaWx0ZXJJZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgdmFyIGlucHV0cyA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzO1xyXG4gICAgICAgICAgICAgIGlmIChpbnB1dHMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgdmFyIGZpbHRlciA9IGlucHV0c1tpXS5maWx0ZXI7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlci5pZCA9PSB0aGlzLkZvcmNlT3BlbkZpbHRlcklkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIub3BlbmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZm9yY2VkIG9wZW4gbWVudTogXCIgKyBmaWx0ZXIubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB0aGlzLkZvcmNlT3BlbkZpbHRlcklkID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuU2VsZWN0ZWRQaG90byA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5UcmlnZ2VyUmVsb2FkcyhDaGFuZ2VEZXRlY3RvclJlZik7XHJcblxyXG4gICAgICAgICAgICBpZiAoQWN0aXZhdGVkUm91dGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLlByb2Nlc3NQYXJhbWV0ZXJzKENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuTmF2aWdhdGVTZXJ2aWNlLlJlZnJlc2hQYWdlKENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJubyBBY3RpdmF0ZWRSb3V0ZVwiKTtcclxuICAgICAgICAgICAgICB0aGlzLk5hdmlnYXRlU2VydmljZS5SZWZyZXNoUGFnZShDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKENhbGxCYWNrICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICBDYWxsQmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDAwKVxyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yLmpzb24oKSk7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIExvYWRGYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsKENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGU/OiBBY3RpdmF0ZWRSb3V0ZSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLlNldHRpbmdzTG9hZGVkKSB7XHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuZ2V0RmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbCgpLnN1YnNjcmliZSgobW9kZWw6IEZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwpID0+IHtcclxuICAgICAgICB0aGlzLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwgPSBtb2RlbDtcclxuXHJcbiAgICAgICAgdGhpcy5MYW5ndWFnZUNoYW5nZWQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5TZXR0aW5nc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLmN1c3RvbVJlZGlyZWN0ICE9IG51bGwgJiZcclxuICAgICAgICAgIHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5jdXN0b21SZWRpcmVjdCAhPSBcIlwiICYmXHJcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5jdXN0b21SZWRpcmVjdCkgPT0gLTEpIHtcclxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLmN1c3RvbVJlZGlyZWN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuTG9hZEZhYnJpa2FudGVuVmlld01vZGVsKENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MDApXHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvci5qc29uKCkpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgUHJvY2Vzc1BhcmFtZXRlcnMoQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUpOiBib29sZWFuIHtcclxuICAgIGlmIChBY3RpdmF0ZWRSb3V0ZSAhPSBudWxsKSB7XHJcbiAgICAgIHZhciBwcm9kdWN0bmFtZSA9IEFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInByb2R1Y3RcIik7XHJcblxyXG4gICAgICBpZiAocHJvZHVjdG5hbWUgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnByb2R1Y3RzICE9IG51bGwpIHtcclxuICAgICAgICAgIHZhciBwcm9kdWN0OiBGYWJyaWthbnRlblByb2R1Y3RWaWV3TW9kZWwgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwucHJvZHVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwucHJvZHVjdHNbaV0udXJsTmFtZSA9PSBwcm9kdWN0bmFtZSkge1xyXG4gICAgICAgICAgICAgIHByb2R1Y3QgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnByb2R1Y3RzW2ldO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHByb2R1Y3QgIT0gbnVsbCAmJiB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdD8uaWQgIT0gcHJvZHVjdC5pZCkge1xyXG4gICAgICAgICAgICB0aGlzLlNlbGVjdFByb2R1Y3QocHJvZHVjdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEFjdGl2YXRlZFJvdXRlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGNhdGVnb3J5bmFtZSA9IEFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcImNhdGVnb3J5XCIpO1xyXG5cclxuICAgICAgaWYgKGNhdGVnb3J5bmFtZSAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2F0ZWdvcnlMYXllcnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdmFyIGNhdGVnb3J5OiBGYWJyaWthbnRlbkNhdGVnb3J5Vmlld01vZGVsIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNhdGVnb3J5TGF5ZXJzLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgbGF5ZXIgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNhdGVnb3J5TGF5ZXJzW2ldLmNhdGVnb3JpZXM7XHJcblxyXG4gICAgICAgICAgICBpZiAobGF5ZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGF5ZXIubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICgobGF5ZXJbal0udXJsTmFtZSA9PSBjYXRlZ29yeW5hbWUgfHwgbGF5ZXJbal0uZGVlcGxpbmtUYWcgPT0gY2F0ZWdvcnluYW1lKSAmJiB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNhdGVnb3J5TGF5ZXJzW2ldLnNlbGVjdGVkT3B0aW9uICE9IGxheWVyW2pdLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNhdGVnb3J5ID0gbGF5ZXJbal07XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChjYXRlZ29yeSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuU2VsZWN0Q2F0ZWdvcnkoY2F0ZWdvcnksIENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLlByb2Nlc3NQYXJhbWV0ZXJGaWx0ZXIoXCJmaWx0ZXIxXCIsIEFjdGl2YXRlZFJvdXRlLCBDaGFuZ2VEZXRlY3RvclJlZikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLlByb2Nlc3NQYXJhbWV0ZXJGaWx0ZXIoXCJmaWx0ZXIyXCIsIEFjdGl2YXRlZFJvdXRlLCBDaGFuZ2VEZXRlY3RvclJlZikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLlByb2Nlc3NQYXJhbWV0ZXJGaWx0ZXIoXCJmaWx0ZXIzXCIsIEFjdGl2YXRlZFJvdXRlLCBDaGFuZ2VEZXRlY3RvclJlZikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLlByb2Nlc3NQYXJhbWV0ZXJGaWx0ZXIoXCJmaWx0ZXI0XCIsIEFjdGl2YXRlZFJvdXRlLCBDaGFuZ2VEZXRlY3RvclJlZikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBub3JlZ2lzdGVyID0gQWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ25vcmVnaXN0ZXInKTtcclxuXHJcbiAgICAgIGlmIChub3JlZ2lzdGVyICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLlNldFNraXBGb3JtcygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIFByb2Nlc3NQYXJhbWV0ZXJGaWx0ZXIobmFtZTogc3RyaW5nLCBBY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IGJvb2xlYW4ge1xyXG4gICAgdmFyIG9wdGlvbm5hbWUgPSBBY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQobmFtZSk7XHJcblxyXG4gICAgaWYgKG9wdGlvbm5hbWUgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHMgIT0gbnVsbCkge1xyXG4gICAgICAgIHZhciBvcHRpb246IEZhYnJpa2FudGVuRmlsdGVyT3B0aW9uVmlld01vZGVsIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgdmFyIGZpbHRlcjogRmFicmlrYW50ZW5GaWx0ZXJWaWV3TW9kZWwgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdmFyIGZpbHRlcnRlbXAgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0c1tpXS5maWx0ZXI7XHJcbiAgICAgICAgICBpZiAoZmlsdGVydGVtcCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZhciBvcHRpb25zID0gZmlsdGVydGVtcC5vcHRpb25zO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb3B0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnNbal0udXJsTmFtZSA9PSBvcHRpb25uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbiA9IG9wdGlvbnNbal07XHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlciA9IGZpbHRlcnRlbXA7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbiAhPSBudWxsICYmIGZpbHRlciAhPSBudWxsICYmIGZpbHRlci5zZWxlY3RlZE9wdGlvbiAhPSBvcHRpb24uaWQpIHtcclxuICAgICAgICAgIHRoaXMuU2VsZWN0T3B0aW9uKGZpbHRlci5pZCwgb3B0aW9uLmlkLCBDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFJlc2V0VGFicygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwuc3RhcnRUYWIgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVGFiID0gdGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLnN0YXJ0VGFiO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLmhpZGVJbmZvcm1hdGlvblRhYikge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVGFiID0gXCIzRFwiO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRUYWIgPSBcIkluZm9ybWF0aWVcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLmhpZGVJbmZvcm1hdGlvblRhYikge1xyXG4gICAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIjNEXCIpIHtcclxuICAgICAgICB0aGlzLlNlbGVjdGVkVGFiSW5kZXggPSAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIjJEXCIpIHtcclxuICAgICAgICB0aGlzLlNlbGVjdGVkVGFiSW5kZXggPSAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIkJlc3Rla1wiKSB7XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFRhYkluZGV4ID0gMjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiSW5mb3JtYXRpZVwiKSB7XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFRhYkluZGV4ID0gMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIzRFwiKSB7XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFRhYkluZGV4ID0gMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIyRFwiKSB7XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFRhYkluZGV4ID0gMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCJCZXN0ZWtcIikge1xyXG4gICAgICAgIHRoaXMuU2VsZWN0ZWRUYWJJbmRleCA9IDM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIExhbmd1YWdlXHJcblxyXG4gIHB1YmxpYyBMYW5ndWFnZUNoYW5nZWQoKTogdm9pZCB7XHJcbiAgICB2YXIgZm9ybSA9IHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbD8uZG93bmxvYWRGb3JtO1xyXG5cclxuICAgIGlmIChmb3JtICE9IHVuZGVmaW5lZCAmJiB0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuQWN0aXZlTGFuZ3VhZ2UgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHZhciBjYXRlZ29yaWVzID0gZm9ybS5mb3JtQ2F0ZWdvcmllcztcclxuXHJcbiAgICAgIGlmIChjYXRlZ29yaWVzICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2F0ZWdvcmllcy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgdmFyIHJvd3MgPSBjYXRlZ29yaWVzW2NdLnJvd3M7XHJcblxyXG4gICAgICAgICAgaWYgKHJvd3MgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgcm93cy5sZW5ndGg7IHIrKykge1xyXG4gICAgICAgICAgICAgIHZhciBpbnB1dHMgPSByb3dzW3JdLmlucHV0cztcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGlucHV0cyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0cyA9IGlucHV0c1tpXS5kZWZhdWx0cztcclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0cyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBkID0gMDsgZCA8IGRlZmF1bHRzLmxlbmd0aDsgZCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkFjdGl2ZUxhbmd1YWdlLmlkID09IGRlZmF1bHRzW2RdLmxhbmd1YWdlSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRzW2RdLmRlZmF1bHRPcHRpb25JZCAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb246IEZhYnJpa2FudGVuRm9ybUlucHV0T3B0aW9uVmlld01vZGVsIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IGlucHV0c1tpXS5vcHRpb25zO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG8gPSAwOyBvIDwgb3B0aW9ucy5sZW5ndGg7IG8rKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uc1tvXS5pZCA9PSBkZWZhdWx0c1tkXS5kZWZhdWx0T3B0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gPSBvcHRpb25zW29dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHNbaV0uc2VsZWN0ZWRPcHRpb24gPSBvcHRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0c1tkXS5kZWZhdWx0VmFsdWUgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0c1tpXS52YWx1ZSA9IGRlZmF1bHRzW2RdLmRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gUG9wdXBcclxuXHJcbiAgcHVibGljIFNob3dQb3B1cFRleHQodGV4dDogc3RyaW5nKSB7XHJcbiAgICB2YXIgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihGYWJQb3B1cFRleHRDb21wb25lbnQsIHtcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHRleHQ6IHRleHRcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBDb29raWVzXHJcblxyXG4gIHB1YmxpYyBHZXRDb29raWVQZXJtaXNzaW9ucyhDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIHZhciB0U2hvd1BvcHVwID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuUmVhZENvb2tpZVBlcm1pc3Npb25zKSB7XHJcbiAgICAgIHRoaXMuUmVhZENvb2tpZVBlcm1pc3Npb25zID0gdHJ1ZTtcclxuXHJcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuQ29va2llU2VydmljZS5nZXQodGhpcy5Db29raWVOYW1lKTtcclxuXHJcbiAgICAgIGlmICh2YWx1ZSA9PSB0aGlzLkNvb2tpZVN0YXRlUmVmdXNlZCkge1xyXG4gICAgICAgIHRTaG93UG9wdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlNldENvb2tpZVNldHRpbmdzKGZhbHNlLCBDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodmFsdWUgPT0gdGhpcy5Db29raWVTdGF0ZUFjY2VwdGVkKSB7XHJcbiAgICAgICAgdFNob3dQb3B1cCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuU2V0Q29va2llU2V0dGluZ3ModHJ1ZSwgQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRTaG93UG9wdXApIHtcclxuICAgICAgdGhpcy5TaG93aW5nQ29va2llUG9wdXAgPSB0cnVlO1xyXG4gICAgICB2YXIgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihGYWJDb29raWVzRGlhbG9nQ29tcG9uZW50LCB7IGRpc2FibGVDbG9zZTogdHJ1ZSB9KTtcclxuXHJcbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5TaG93aW5nQ29va2llUG9wdXAgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2V0Q29va2llU2V0dGluZ3MoYWNjZXB0OiBib29sZWFuLCBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIGlmIChhY2NlcHQpIHtcclxuICAgICAgdGhpcy5Db29raWVTZXJ2aWNlLnNldCh0aGlzLkNvb2tpZU5hbWUsIHRoaXMuQ29va2llU3RhdGVBY2NlcHRlZCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5Db29raWVTZXJ2aWNlLnNldCh0aGlzLkNvb2tpZU5hbWUsIHRoaXMuQ29va2llU3RhdGVSZWZ1c2VkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBGYWJyaWthbnRlblNldENvb2tpZVNldHRpbmdzUmVxdWVzdCgpO1xyXG5cclxuICAgICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuICAgICAgcmVxdWVzdC5hY2NlcHQgPSBhY2NlcHQ7XHJcblxyXG4gICAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LnNldENvb2tpZVNldHRpbmdzKHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5SZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwMClcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yLmpzb24oKSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQkNCUHJvZHVjdEluc3RhbmNlXHJcblxyXG4gIHB1YmxpYyBPcGVuKG9wZW5jb2RlOiBzdHJpbmcsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBGYWJyaWthbnRlbk9wZW5JbnN0YW5jZVJlcXVlc3QoKTtcclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICByZXF1ZXN0Lmluc3RhbmNlSWQgPSBvcGVuY29kZTtcclxuXHJcbiAgICB0aGlzLlJlc2V0VGFicygpO1xyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQub3Blbkluc3RhbmNlKHJlcXVlc3QpLnN1YnNjcmliZSgobW9kZWw6IEZhYnJpa2FudGVuT3Blbkluc3RhbmNlUmVzcG9uc2UpID0+IHtcclxuICAgICAgaWYgKG1vZGVsLmVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuUmVsb2FkTW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICB9XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gRHluYW1pYyBtb2RlbHNcclxuXHJcbiAgcHVibGljIEdldER5bmFtaWNEaXNwbGF5VmFsdWVzKCk6IER5bmFtaWNEaXNwbGF5VmFsdWVWaWV3TW9kZWxbXSB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlbjNEVmlld01vZGVsICE9IG51bGwgJiYgdGhpcy5XZWJHTFNlcnZpY2UuRmFicmlrYW50ZW4zRFZpZXdNb2RlbC5jaGVja3N1bSA9PSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNoZWNrc3VtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5TVkdTZXJ2aWNlLkZhYnJpa2FudGVuU1ZHVmlld01vZGVsICE9IG51bGwgJiYgdGhpcy5TVkdTZXJ2aWNlLkZhYnJpa2FudGVuU1ZHVmlld01vZGVsLmNoZWNrc3VtID09IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2hlY2tzdW0pIHtcclxuICAgICAgICBpZiAodGhpcy5TVkdTZXJ2aWNlLkZhYnJpa2FudGVuU1ZHVmlld01vZGVsLmR5bmFtaWNEaXNwbGF5VmFsdWVzICE9IG51bGwpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsICE9IG51bGwgJiYgdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmNoZWNrc3VtID09IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2hlY2tzdW0pIHtcclxuICAgICAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmR5bmFtaWNEaXNwbGF5VmFsdWVzICE9IG51bGwpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBBcnJheTxEeW5hbWljRGlzcGxheVZhbHVlVmlld01vZGVsPigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFByb2Nlc3NEeW5hbWljTW9kZWxzKENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5XZWJHTFNlcnZpY2UuRmFicmlrYW50ZW4zRFZpZXdNb2RlbCAhPSBudWxsICYmIHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwuY2hlY2tzdW0gPT0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5jaGVja3N1bSkge1xyXG4gICAgICAgIGlmICh0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlbjNEVmlld01vZGVsLmR5bmFtaWNGaWx0ZXJzICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNGaWx0ZXJzKHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwuZHluYW1pY0ZpbHRlcnMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwuZHluYW1pY1JhbmdlSW5wdXRzICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNSYW5nZUlucHV0cyh0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlbjNEVmlld01vZGVsLmR5bmFtaWNSYW5nZUlucHV0cywgQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY0Rpc3BsYXlWYWx1ZXModGhpcy5XZWJHTFNlcnZpY2UuRmFicmlrYW50ZW4zRFZpZXdNb2RlbC5keW5hbWljRGlzcGxheVZhbHVlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbCAhPSBudWxsICYmIHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5jaGVja3N1bSA9PSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNoZWNrc3VtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5keW5hbWljRmlsdGVycyAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLlByb2Nlc3NEeW5hbWljRmlsdGVycyh0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwuZHluYW1pY0ZpbHRlcnMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5keW5hbWljUmFuZ2VJbnB1dHMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY1JhbmdlSW5wdXRzKHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5keW5hbWljUmFuZ2VJbnB1dHMsIENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY0Rpc3BsYXlWYWx1ZXModGhpcy5TVkdTZXJ2aWNlLkZhYnJpa2FudGVuU1ZHVmlld01vZGVsLmR5bmFtaWNEaXNwbGF5VmFsdWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsICE9IG51bGwgJiYgdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmNoZWNrc3VtID09IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2hlY2tzdW0pIHtcclxuICAgICAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmR5bmFtaWNGaWx0ZXJzICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNGaWx0ZXJzKHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbC5keW5hbWljRmlsdGVycyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmR5bmFtaWNSYW5nZUlucHV0cyAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLlByb2Nlc3NEeW5hbWljUmFuZ2VJbnB1dHModGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmR5bmFtaWNSYW5nZUlucHV0cywgQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbC5keW5hbWljRGlzcGxheVZhbHVlcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLlByb2Nlc3NEeW5hbWljRGlzcGxheVZhbHVlcyh0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBQcm9jZXNzRHluYW1pY0Rpc3BsYXlWYWx1ZXModmFsdWVzOiBEeW5hbWljRGlzcGxheVZhbHVlVmlld01vZGVsW10pOiB2b2lkIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0cyAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY0Rpc3BsYXlWYWx1ZUlucHV0cyh2YWx1ZXNbaV0sIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuZmlsdGVyQ2F0ZWdvcmllcyAhPSBudWxsKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmZpbHRlckNhdGVnb3JpZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIHZhciBpbnB1dHMgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmZpbHRlckNhdGVnb3JpZXNbal0uaW5wdXRzO1xyXG4gICAgICAgICAgaWYgKGlucHV0cyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNEaXNwbGF5VmFsdWVJbnB1dHModmFsdWVzW2ldLCBpbnB1dHMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBQcm9jZXNzRHluYW1pY0Rpc3BsYXlWYWx1ZUlucHV0cyh2YWx1ZTogRHluYW1pY0Rpc3BsYXlWYWx1ZVZpZXdNb2RlbCwgaW5wdXRzOiBGYWJyaWthbnRlbklucHV0Vmlld01vZGVsW10pOiB2b2lkIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHZhciBvcHRpb25zID0gaW5wdXRzW2ldLmZpbHRlcj8ub3B0aW9ucztcclxuICAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBpZiAob3B0aW9uc1swXS5uYW1lID09IHZhbHVlLm5hbWUpIHtcclxuICAgICAgICAgIG9wdGlvbnNbMF0uaWQgPSAtMjtcclxuICAgICAgICAgIG9wdGlvbnNbMF0ubmFtZSA9IHZhbHVlLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBQcm9jZXNzRHluYW1pY0ZpbHRlcnMoZmlsdGVyczogRHluYW1pY0ZpbHRlcnNWaWV3TW9kZWxbXSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzICE9IG51bGwpIHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGFycmF5ID0gZmlsdGVyc1tpXS5maWx0ZXJzO1xyXG4gICAgICAgIGlmIChhcnJheSAhPSBudWxsKSB7XHJcbiAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IGFycmF5Lmxlbmd0aDsgcCsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBpZiAoYXJyYXlbcF0uZmlsdGVySWQgPT0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHNbal0uZmlsdGVyPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0c1tqXS5maWx0ZXI/Lm9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICB2YXIgYWxsb3dlZGFycmF5ID0gYXJyYXlbcF0uZmlsdGVyT3B0aW9uc0FsbG93ZWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbCAmJiBhbGxvd2VkYXJyYXkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IG9wdGlvbnMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWxsb3dlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGFsbG93ZWRhcnJheS5sZW5ndGg7IGwrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93ZWRhcnJheVtsXSA9PSBvcHRpb25zW2tdLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxsb3dlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1trXS5oaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkaXNhYmxlOiBcIiArIG9wdGlvbnNba10ubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIFByb2Nlc3NEeW5hbWljUmFuZ2VJbnB1dHMocmFuZ2VpbnB1dHM6IER5bmFtaWNSYW5nZUlucHV0Vmlld01vZGVsW10sIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzICE9IG51bGwpIHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZWlucHV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBhcnJheSA9IHJhbmdlaW5wdXRzW2ldLnJhbmdlSW5wdXRzO1xyXG4gICAgICAgIGlmIChhcnJheSAhPSBudWxsKSB7XHJcbiAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IGFycmF5Lmxlbmd0aDsgcCsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBpZiAoYXJyYXlbcF0gPT0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHNbal0ucmFuZ2U/LmlkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnYmVyZWlrIHJhbmdlaW5wdXQ6JyArIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzW2pdLnJhbmdlPy5uYW1lKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcmFuZ2VvYmplY3QgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0c1tqXS5yYW5nZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2VvYmplY3QgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICByYW5nZW9iamVjdC5pbmNsdXNpZWZNaW5pbXVtID0gcmFuZ2VpbnB1dHNbaV0uaW5jbHVzaWVmTWluaW11bTtcclxuICAgICAgICAgICAgICAgICAgcmFuZ2VvYmplY3QubWluaW11bSA9IHJhbmdlaW5wdXRzW2ldLm1pbmltdW07XHJcblxyXG4gICAgICAgICAgICAgICAgICByYW5nZW9iamVjdC5pbmNsdXNpZWZNYXhpbXVtID0gcmFuZ2VpbnB1dHNbaV0uaW5jbHVzaWVmTWF4aW11bTtcclxuICAgICAgICAgICAgICAgICAgcmFuZ2VvYmplY3QubWF4aW11bSA9IHJhbmdlaW5wdXRzW2ldLm1heGltdW07XHJcblxyXG4gICAgICAgICAgICAgICAgICBpZiAocmFuZ2VvYmplY3QuaW5jbHVzaWVmTWluaW11bSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZW9iamVjdC52YWx1ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHBhcnNlSW50KHJhbmdlb2JqZWN0LnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IHJhbmdlb2JqZWN0Lm1pbmltdW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5TZXRSYW5nZUlucHV0KHJhbmdlb2JqZWN0LmlkLCByYW5nZW9iamVjdC5taW5pbXVtLCBDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICBpZiAocmFuZ2VvYmplY3QuaW5jbHVzaWVmTWF4aW11bSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZW9iamVjdC52YWx1ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHBhcnNlSW50KHJhbmdlb2JqZWN0LnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IHJhbmdlb2JqZWN0Lm1heGltdW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5TZXRSYW5nZUlucHV0KHJhbmdlb2JqZWN0LmlkLCByYW5nZW9iamVjdC5tYXhpbXVtLCBDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBEb3dubG9hZHNcclxuXHJcbiAgcHVibGljIElzU3RhcnRpbmdEb3dubG9hZCgpOiBib29sZWFuIHtcclxuXHJcbiAgICB2YXIgZG93bmxvYWRjYXRzID0gdGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsPy5kb3dubG9hZENhdGVnb3JpZXM7XHJcblxyXG4gICAgaWYgKGRvd25sb2FkY2F0cyAhPSBudWxsKSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG93bmxvYWRjYXRzLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gICAgICAgIHZhciBpdGVtcyA9IGRvd25sb2FkY2F0c1tpXS5pdGVtcztcclxuXHJcbiAgICAgICAgaWYgKGl0ZW1zICE9IG51bGwpIHtcclxuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1zW2pdLmxvYWRpbmcpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93UmV2aXRQb3B1cChkb3dubG9hZGl0ZW06IEZhYnJpa2FudGVuU2V0dGluZ3NEb3dubG9hZEl0ZW1WaWV3TW9kZWwsIGN1c3RvbWJjYmVib2lkOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcclxuICAgIHZhciBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEZhYkFjdGlvbm1lbnVSZXZpdERpYWxvZ0NvbXBvbmVudCk7XHJcblxyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHtcclxuXHJcbiAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgRmFicmlrYW50ZW5GaWxlUmVxdWVzdE1vZGVsKCk7XHJcblxyXG4gICAgICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICAgICAgcmVxdWVzdC5jdXN0b21CQ0JFQk9JZCA9IGN1c3RvbWJjYmVib2lkO1xyXG4gICAgICAgIHJlcXVlc3QubGFuZ3VhZ2VJZCA9IHRoaXMuVHJhbnNsYXRlU2VydmljZS5BY3RpdmVMYW5ndWFnZS5pZDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU1ZHU2VydmljZS5TY2hhYWwgIT0gXCJcIikge1xyXG4gICAgICAgICAgcmVxdWVzdC5zY2FsZSA9IHBhcnNlSW50KHRoaXMuU1ZHU2VydmljZS5TY2hhYWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVxdWVzdC5pbnB1dHMgPSBuZXcgQXJyYXkoKTtcclxuICAgICAgICB2YXIgaW5wdXQgPSBuZXcgRmFicmlrYW50ZW5GaWxlUmVxdWVzdElucHV0TW9kZWwoKTtcclxuICAgICAgICBpbnB1dC5maWxlVHlwZSA9IGRvd25sb2FkaXRlbS5maWxlVHlwZTtcclxuICAgICAgICBpbnB1dC5tb2RlbDNEID0gZG93bmxvYWRpdGVtLm1vZGVsM0Q7XHJcbiAgICAgICAgaW5wdXQudHJhbnNsYXRpb25TdWJDYXRlZ29yeSA9IGRvd25sb2FkaXRlbS50cmFuc2xhdGlvblN1YkNhdGVnb3J5O1xyXG4gICAgICAgIGlucHV0LnBkZlRlbXBsYXRlSWQgPSAtMTtcclxuICAgICAgICByZXF1ZXN0LmlucHV0cy5wdXNoKGlucHV0KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuSXNBY3RpdmUoKSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWw/LnNlbGVjdGVkUHJvZHVjdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuRG93bmxvYWRGaWxlKGlucHV0LmZpbGVUeXBlICsgXCJcIiwgdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuUHJvZHVjdCwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5pZCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5nZXRGYWJyaWthbnRlbkZpbGVWaWV3TW9kZWwocmVxdWVzdCkuc3Vic2NyaWJlKChtb2RlbDogRmFicmlrYW50ZW5GaWxlVmlld01vZGVsKSA9PiB7XHJcblxyXG4gICAgICAgICAgd2luZG93Lm9wZW4obW9kZWwuZmlsZSArIFwiXCIsIFwiX2JsYW5rXCIpO1xyXG5cclxuICAgICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIERvd25sb2FkKGRvd25sb2FkaXRlbTogRmFicmlrYW50ZW5TZXR0aW5nc0Rvd25sb2FkSXRlbVZpZXdNb2RlbCwgY3VzdG9tYmNiZWJvaWQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgaWYgKGRvd25sb2FkaXRlbS5maWxlVHlwZSA9PSBcImhkaFJldml0XCIpIHtcclxuICAgICAgdGhpcy5TaG93UmV2aXRQb3B1cChkb3dubG9hZGl0ZW0sIGN1c3RvbWJjYmVib2lkKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB2YXIgZG93bmxvYWRpdGVtcyA9IG5ldyBBcnJheTxGYWJyaWthbnRlblNldHRpbmdzRG93bmxvYWRJdGVtVmlld01vZGVsPigpO1xyXG4gICAgICBkb3dubG9hZGl0ZW1zLnB1c2goZG93bmxvYWRpdGVtKTtcclxuXHJcbiAgICAgIHRoaXMuRG93bmxvYWRJdGVtcyhkb3dubG9hZGl0ZW1zLCBjdXN0b21iY2JlYm9pZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgRG93bmxvYWRJdGVtcyhkb3dubG9hZGl0ZW1zOiBGYWJyaWthbnRlblNldHRpbmdzRG93bmxvYWRJdGVtVmlld01vZGVsW10sIGN1c3RvbWJjYmVib2lkOiBudW1iZXIgfCB1bmRlZmluZWQsIHBkZnRlbXBsYXRlcz86IEZhYnJpa2FudGVuUERGVGVtcGxhdGVWaWV3TW9kZWxbXSB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgRmFicmlrYW50ZW5GaWxlUmVxdWVzdE1vZGVsKCk7XHJcblxyXG4gICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuICAgIHJlcXVlc3QuY3VzdG9tQkNCRUJPSWQgPSBjdXN0b21iY2JlYm9pZDtcclxuICAgIHJlcXVlc3QubGFuZ3VhZ2VJZCA9IHRoaXMuVHJhbnNsYXRlU2VydmljZS5BY3RpdmVMYW5ndWFnZS5pZDtcclxuICAgIGlmICh0aGlzLlNWR1NlcnZpY2UuU2NoYWFsICE9IFwiXCIpIHtcclxuICAgICAgcmVxdWVzdC5zY2FsZSA9IHBhcnNlSW50KHRoaXMuU1ZHU2VydmljZS5TY2hhYWwpO1xyXG4gICAgfVxyXG4gICAgcmVxdWVzdC5pbnB1dHMgPSBuZXcgQXJyYXkoKTtcclxuXHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG93bmxvYWRpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBkb3dubG9hZGl0ZW1zW2ldLmxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgdmFyIGlucHV0ID0gbmV3IEZhYnJpa2FudGVuRmlsZVJlcXVlc3RJbnB1dE1vZGVsKCk7XHJcbiAgICAgIGlucHV0LmZpbGVUeXBlID0gZG93bmxvYWRpdGVtc1tpXS5maWxlVHlwZTtcclxuICAgICAgaW5wdXQubW9kZWwzRCA9IGRvd25sb2FkaXRlbXNbaV0ubW9kZWwzRDtcclxuICAgICAgaW5wdXQudHJhbnNsYXRpb25TdWJDYXRlZ29yeSA9IGRvd25sb2FkaXRlbXNbaV0udHJhbnNsYXRpb25TdWJDYXRlZ29yeTtcclxuICAgICAgaW5wdXQucGRmVGVtcGxhdGVJZCA9IC0xO1xyXG4gICAgICByZXF1ZXN0LmlucHV0cy5wdXNoKGlucHV0KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLklzQWN0aXZlKCkpIHtcclxuICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbD8uc2VsZWN0ZWRQcm9kdWN0ICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuRG93bmxvYWRGaWxlKGlucHV0LmZpbGVUeXBlICsgXCJcIiwgdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuUHJvZHVjdCwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5pZCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChwZGZ0ZW1wbGF0ZXMgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGRmdGVtcGxhdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcGRmdGVtcGxhdGVzW2ldLmxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICB2YXIgaW5wdXQgPSBuZXcgRmFicmlrYW50ZW5GaWxlUmVxdWVzdElucHV0TW9kZWwoKTtcclxuICAgICAgICBpbnB1dC5maWxlVHlwZSA9IFwicGRmXCI7XHJcbiAgICAgICAgaW5wdXQubW9kZWwzRCA9IGZhbHNlO1xyXG4gICAgICAgIGlucHV0LnBkZlRlbXBsYXRlSWQgPSBwZGZ0ZW1wbGF0ZXNbaV0udGVtcGxhdGVJZDtcclxuICAgICAgICByZXF1ZXN0LmlucHV0cy5wdXNoKGlucHV0KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuSXNBY3RpdmUoKSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWw/LnNlbGVjdGVkUHJvZHVjdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuRG93bmxvYWRGaWxlKGlucHV0LmZpbGVUeXBlICsgXCJcIiwgdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuUHJvZHVjdCwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5pZCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXF1ZXN0LmlucHV0cy5sZW5ndGggPT0gMSAmJiByZXF1ZXN0LmlucHV0c1swXS5maWxlVHlwZSA9PSBcImhkaFJldml0XCIpIHtcclxuICAgICAgZG93bmxvYWRpdGVtc1swXS5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuRG93bmxvYWQoZG93bmxvYWRpdGVtc1swXSwgdW5kZWZpbmVkKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LmdldEZhYnJpa2FudGVuRmlsZVZpZXdNb2RlbChyZXF1ZXN0KS5zdWJzY3JpYmUoKG1vZGVsOiBGYWJyaWthbnRlbkZpbGVWaWV3TW9kZWwpID0+IHtcclxuICAgICAgICBpZiAobW9kZWwuZmlsZVR5cGUgPT0gXCJoZGhSZXZpdFwiKSB7XHJcbiAgICAgICAgICB3aW5kb3cub3Blbihtb2RlbC5maWxlICsgXCJcIiwgXCJfYmxhbmtcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhciBmaWxlbmFtZSA9IG1vZGVsLmZpbGU/LnRvTG93ZXJDYXNlKCkgKyBcIlwiO1xyXG4gICAgICAgICAgaWYgKG1vZGVsLmZpbGVUeXBlID09IFwicmZhXCIgJiYgZmlsZW5hbWUuZW5kc1dpdGgoXCJydnRcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5TdGFydERvd25sb2FkKG1vZGVsLmZpbGUgKyBcIlwiLCBcIi5ydnRcIik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLlN0YXJ0RG93bmxvYWQobW9kZWwuZmlsZSArIFwiXCIsIFwiLlwiICsgbW9kZWwuZmlsZVR5cGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb3dubG9hZGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBkb3dubG9hZGl0ZW1zW2ldLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBkZnRlbXBsYXRlcyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGRmdGVtcGxhdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBkZnRlbXBsYXRlc1tpXS5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIERvd25sb2FkQ3VzdG9tKGN1c3RvbWRvd25sb2FkOiBGYWJyaWthbnRlbkN1c3RvbURvd25sb2FkVmlld01vZGVsKTogdm9pZCB7XHJcblxyXG4gICAgY3VzdG9tZG93bmxvYWQubG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgRmFicmlrYW50ZW5DdXN0b21Eb3dubG9hZFJlcXVlc3RNb2RlbCgpO1xyXG5cclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICByZXF1ZXN0LmN1c3RvbURvd25sb2FkSWQgPSBjdXN0b21kb3dubG9hZC5pZDtcclxuXHJcbiAgICBpZiAodGhpcy5TdGF0aXN0aWNzU2VydmljZS5Jc0FjdGl2ZSgpKSB7XHJcbiAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3QgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuRG93bmxvYWRGaWxlKGN1c3RvbWRvd25sb2FkLmRvd25sb2FkVHlwZSArIFwiXCIsIHRoaXMuVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LlByb2R1Y3QsIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuTmFtZSwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuaWQpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuZ2V0RmFicmlrYW50ZW5DdXN0b21Eb3dubG9hZFJlc3VsdE1vZGVsKHJlcXVlc3QpLnN1YnNjcmliZSgobW9kZWw6IEZhYnJpa2FudGVuQ3VzdG9tRG93bmxvYWRSZXN1bHRNb2RlbCkgPT4ge1xyXG4gICAgICB0aGlzLlN0YXJ0RG93bmxvYWQobW9kZWwuZmlsZSArIFwiXCIsIFwiLlwiICsgbW9kZWwuZmlsZVR5cGUpO1xyXG5cclxuICAgICAgY3VzdG9tZG93bmxvYWQubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTdGFydERvd25sb2FkKHVybDogc3RyaW5nLCBleHRlbnNpb246IHN0cmluZyk6IHZvaWQge1xyXG5cclxuICAgIHZhciBmaWxlbmFtZSA9IHRoaXMuQ29sbGVjdEZpbGVOYW1lKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5kaXNhYmxlQ3VzdG9tRmlsZU5hbWVzKSB7XHJcbiAgICAgIGZpbGVuYW1lID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJ1xcXFwnKSArIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaWxlbmFtZSAhPSBcIlwiKSB7XHJcbiAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUgKyBleHRlbnNpb247XHJcblxyXG4gICAgICBpZiAoZXh0ZW5zaW9uID09IFwiLnBkZlwiKSB7XHJcbiAgICAgICAgd2luZG93Lm9wZW4odXJsLCBcIl9ibGFua1wiKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiL0Rvd25sb2FkL0Rvd25sb2FkP3BVcmw9XCIgKyB1cmwgKyBcIiZwRmlsZU5hbWU9XCIgKyBmaWxlbmFtZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGFsZXJ0KCdlcnJvcjogbm8gcHJvZHVjdCBzZWxlY3RlZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIERvd25sb2FkQmVzdGVrKGRhdGE6IHN0cmluZykge1xyXG5cclxuICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuVHlwZUJlc3RlayA9PSBcIlNUQUJVXCIpIHtcclxuICAgICAgdGhpcy5Eb3dubG9hZEJlc3Rla0lubmVyKGRhdGEsIFwiLlMwMVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLlR5cGVCZXN0ZWsgPT0gXCJPU0ZcIikge1xyXG4gICAgICB0aGlzLkRvd25sb2FkQmVzdGVrSW5uZXIoZGF0YSwgXCIudHh0XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuVHlwZUJlc3RlayA9PSBcIlZyaWpcIikge1xyXG4gICAgICB0aGlzLkRvd25sb2FkQmVzdGVrSW5uZXIoZGF0YSwgXCIudHh0XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuVHlwZUJlc3RlayA9PSBcIkF1dG9TcGVjaWZpY2F0aW9uXCIpIHtcclxuICAgICAgdGhpcy5Eb3dubG9hZEJlc3Rla0lubmVyKGRhdGEsIFwiLnR4dFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5TdGF0aXN0aWNzU2VydmljZS5Jc0FjdGl2ZSgpKSB7XHJcbiAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3QgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuRG93bmxvYWRGaWxlKFwiYmVzdGVrXCIsIHRoaXMuVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LlByb2R1Y3QsIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuTmFtZSwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuaWQpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIERvd25sb2FkQmVzdGVrQXV0b1NwZWNpZmljYXRpb24oZGF0YTogc3RyaW5nKSB7XHJcblxyXG4gICAgdGhpcy5Eb3dubG9hZEJlc3Rla0lubmVyKGRhdGEsIFwiLnR4dFwiKTtcclxuXHJcbiAgICBpZiAodGhpcy5TdGF0aXN0aWNzU2VydmljZS5Jc0FjdGl2ZSgpKSB7XHJcbiAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3QgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuRG93bmxvYWRGaWxlKFwic3BlY2lmaWNhdGlvblwiLCB0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Qcm9kdWN0LCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5Lk5hbWUsIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0LmlkKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgRG93bmxvYWRCZXN0ZWtJbm5lcihkYXRhOiBzdHJpbmcsIGV4dGVuc2lvbjogc3RyaW5nKSB7XHJcbiAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgYy5kb3dubG9hZCA9IHRoaXMuQ29sbGVjdEZpbGVOYW1lKCkgKyBleHRlbnNpb247XHJcblxyXG4gICAgdmFyIHQgPSBuZXcgQmxvYihbZGF0YV0sIHtcclxuICAgICAgdHlwZTogXCJ0ZXh0L3BsYWluXCJcclxuICAgIH0pO1xyXG4gICAgYy5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwodCk7XHJcbiAgICBjLmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIENvbGxlY3RGaWxlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgdmFyIGZpbGVuYW1lID0gXCJcIjtcclxuXHJcbiAgICBpZiAodGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkFjdGl2ZUxhbmd1YWdlLmNvdW50cnlDb2RlID09IFwibmwtbmxcIikge1xyXG5cclxuICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIzRFwiKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgZmlsZW5hbWUgPSB0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlbjNEVmlld01vZGVsLmluc3RhbnRpZU5hYW0gKyBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIyRFwiKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICBmaWxlbmFtZSA9IHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5pbnN0YW50aWVOYWFtICsgXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiQmVzdGVrXCIpIHtcclxuICAgICAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsICE9IG51bGwpIHtcclxuICAgICAgICAgIGZpbGVuYW1lID0gdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmluc3RhbnRpZU5hYW0gKyBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCJUb2ViZWhvcmVuXCIpIHtcclxuICAgICAgICBpZiAodGhpcy5HZXRTZWxlY3RlZFRvZWJlaG9yZW4oKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICBmaWxlbmFtZSA9IHRoaXMuR2V0U2VsZWN0ZWRUb2ViZWhvcmVuKCk/Lm5hbWUgKyBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaWxlbmFtZSA9PSBcIlwiICYmIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWw/LnNlbGVjdGVkUHJvZHVjdD8uaWQgIT0gbnVsbCkge1xyXG4gICAgICB2YXIgaWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3Q/LmlkO1xyXG5cclxuICAgICAgZmlsZW5hbWUgPSB0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Qcm9kdWN0LCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5Lk5hbWUsIGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoL1teYS16MC05XS9naSwgJ18nKTtcclxuXHJcbiAgICByZXR1cm4gZmlsZW5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyBSZWxvYWRzXHJcblxyXG4gIHB1YmxpYyBUcmlnZ2VyUmVsb2FkcyhDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5TaG93UmVxdWlyZWQoKSkge1xyXG4gICAgICB2YXIgYXJyYXkgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdD8uZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVscztcclxuXHJcbiAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwuaGlkZUluZm9ybWF0aW9uVGFiICYmIHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCJJbmZvcm1hdGllXCIpIHtcclxuICAgICAgICB0aGlzLlNlbGVjdGVkVGFiID0gXCIzRFwiO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYXJyYXkgIT0gbnVsbCAmJiAoYXJyYXkubGVuZ3RoID09IDEgfHwgdGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLmFsd2F5c1Nob3dWYXJpYW50KSkge1xyXG4gICAgICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiQmVzdGVrXCIgfHwgdGhpcy5Gb3JjZVVwZGF0ZUJlc3Rlaykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuVHJhbnNsYXRlU2VydmljZS5TaG93U3BlY2lmaWNhdGlvbigpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNoZWNrc3VtICE9IHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbD8uY2hlY2tzdW0pIHtcclxuICAgICAgICAgICAgICB0aGlzLkJlc3Rla1NlcnZpY2UuTG9hZEZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkIGFzIHN0cmluZywgQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNNb2RlbHMoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuU2hvd0F1dG9TcGVjaWZpY2F0aW9uKCkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2hlY2tzdW0gIT0gdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQXV0b1NwZWNpZmljYXRpb25WaWV3TW9kZWw/LmNoZWNrc3VtKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5CZXN0ZWtTZXJ2aWNlLkxvYWRGYWJyaWthbnRlbkF1dG9TcGVjaWZpY2F0aW9uVmlld01vZGVsKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkIGFzIHN0cmluZywgdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkFjdGl2ZUxhbmd1YWdlLmlkLCBDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY01vZGVscyhDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiM0RcIiB8fCB0aGlzLkZvcmNlVXBkYXRlM0QpIHtcclxuICAgICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNoZWNrc3VtICE9IHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWw/LmNoZWNrc3VtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuV2ViR0xTZXJ2aWNlLkxvYWRGYWJyaWthbnRlbjNEVmlld01vZGVsKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkIGFzIHN0cmluZywgQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNNb2RlbHMoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIyRFwiIHx8IHRoaXMuRm9yY2VVcGRhdGUyRCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2hlY2tzdW0gIT0gdGhpcy5TVkdTZXJ2aWNlLkZhYnJpa2FudGVuU1ZHVmlld01vZGVsPy5jaGVja3N1bSkge1xyXG4gICAgICAgICAgICB0aGlzLlNWR1NlcnZpY2UuTG9hZEZhYnJpa2FudGVuU1ZHVmlld01vZGVsKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkIGFzIHN0cmluZywgQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNNb2RlbHMoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCJUZXh0dXJlXCIgfHwgdGhpcy5Gb3JjZVVwZGF0ZVRleHR1cmUpIHtcclxuICAgICAgICAgIHRoaXMuVGV4dHVyZVNlcnZpY2UuTG9hZEZhYnJpa2FudGVuVGV4dHVyZVZpZXdNb2RlbCh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZCBhcyBzdHJpbmcsIENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEJyZWFkY3J1bWJcclxuXHJcbiAgcHVibGljIEdldFN0ZXBzKCk6IEFycmF5PEZhYnJpa2FudGVuQ2F0ZWdvcnlWaWV3TW9kZWw+IHtcclxuICAgIHZhciByZXR1cm5hcnJheSA9IG5ldyBBcnJheTxGYWJyaWthbnRlbkNhdGVnb3J5Vmlld01vZGVsPigpO1xyXG5cclxuICAgIHZhciBhcnJheSA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWw/LmNhdGVnb3J5TGF5ZXJzO1xyXG5cclxuICAgIGlmIChhcnJheSAhPSBudWxsKSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoYXJyYXlbaV0uc2VsZWN0ZWRPcHRpb24gIT0gMCkge1xyXG4gICAgICAgICAgdmFyIG9wdGlvbnMgPSBhcnJheVtpXS5jYXRlZ29yaWVzO1xyXG5cclxuICAgICAgICAgIGlmIChvcHRpb25zICE9IG51bGwpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvcHRpb25zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnNbal0uaWQgPT09IGFycmF5W2ldLnNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5hcnJheS5wdXNoKG9wdGlvbnNbal0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXR1cm5hcnJheTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBHZXRTZWxlY3RlZFRvZWJlaG9yZW4oKTogRmFicmlrYW50ZW5CQ0JQcm9kdWN0VG9lYmVob3JlblZpZXdNb2RlbCB8IG51bGwge1xyXG4gICAgdmFyIHRvZWJlaG9yZW46IEZhYnJpa2FudGVuQkNCUHJvZHVjdFRvZWJlaG9yZW5WaWV3TW9kZWwgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0Py5mYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWxzICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVscy5sZW5ndGggPiAwICYmXHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0LmZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbHNbMF0uYmNiUHJvZHVjdFRvZWJlaG9yZW4gIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5mYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWxzWzBdLmJjYlByb2R1Y3RUb2ViZWhvcmVuLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVsc1swXS5iY2JQcm9kdWN0VG9lYmVob3Jlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5mYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWxzWzBdLmJjYlByb2R1Y3RUb2ViZWhvcmVuW2ldLmlkID09IHRoaXMuU2VsZWN0ZWRUb2ViZWhvcmVuPy5pZCkge1xyXG4gICAgICAgICAgdG9lYmVob3JlbiA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0LmZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbHNbMF0uYmNiUHJvZHVjdFRvZWJlaG9yZW5baV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRvZWJlaG9yZW47XHJcbiAgfVxyXG59XHJcbiJdfQ==
|