@bpost/bp-address-auto-complete-by-component 1.1.30 → 1.1.31
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/VERSION.md +4 -1
- package/esm2020/lib/box-number/box-number.component.mjs +12 -1
- package/esm2020/lib/lib-address-autocomplete-by-component.component.mjs +11 -1
- package/esm2020/lib/locality/locality.component.mjs +1 -1
- package/esm2020/lib/street-number/street-number.component.mjs +15 -3
- package/fesm2015/bpost-bp-address-auto-complete-by-component.mjs +35 -2
- package/fesm2015/bpost-bp-address-auto-complete-by-component.mjs.map +1 -1
- package/fesm2020/bpost-bp-address-auto-complete-by-component.mjs +35 -2
- package/fesm2020/bpost-bp-address-auto-complete-by-component.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -855,4 +855,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
|
|
|
855
855
|
}], numberOfExceptionsEmitter: [{
|
|
856
856
|
type: Output
|
|
857
857
|
}] } });
|
|
858
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpdHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC9zcmMvbGliL2xvY2FsaXR5L2xvY2FsaXR5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQvc3JjL2xpYi9sb2NhbGl0eS9sb2NhbGl0eS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUE2RSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0osT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUtsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7QUFPeEQsTUFBTSxPQUFPLGlCQUFpQjtJQTZFNUIsWUFDVSxjQUE4QixFQUM5QixhQUE0QixFQUM1QixnQkFBa0MsRUFDbEMsY0FBOEI7UUFIOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBNUV4QyxhQUFh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LGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csa0NBQWtDO3NCQUExQyxLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUdPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBVU4sVUFBVTtzQkFEVCxLQUFLO2dCQUVHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBRUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLHlCQUF5QjtzQkFBbEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgU2ltcGxlQ2hhbmdlcywgQWZ0ZXJWaWV3Q2hlY2tlZCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlIH0gZnJvbSAnLi4vZW51bS92YWxpZGF0aW9uLW1lc3NhZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IEFERFJFU1NMRVZFTCB9IGZyb20gJy4uL2VudW0vYWRkcmVzcy1sZXZlbC5lbnVtJztcbmltcG9ydCB7IFF1ZXJ5UGFyYW1ldGVycyB9IGZyb20gJy4uL21vZGVsL3F1ZXJ5LXBhcmFtZXRlcnMubW9kZWwnO1xuaW1wb3J0IHsgQWRkcmVzc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hZHJlc3Muc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVW5pY29kZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91bmljb2RlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRG9tSGFuZGxlciB9IGZyb20gJy4uL3V0aWxzL2RvbWhhbmRsZXInO1xuaW1wb3J0IHsgU291cmNlVHlwZSB9IGZyb20gJy4uL2VudW0vc291cmNlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBQcmVmaWxsRGF0YSB9IGZyb20gJy4uL3V0aWxzL3ByZWZpbGwtZGF0YSc7XG5pbXBvcnQgeyBQcmVmaWxsRXZlbnQgfSBmcm9tICcuLi91dGlscy9wcmVmbGxsLmV2ZW50JztcbmltcG9ydCB7IElucHV0TmFtZVR5cGUgfSBmcm9tICcuLi9lbnVtL2lucHV0LW5hbWUuZW51bSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JwLWxvY2FsaXR5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvY2FsaXR5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbG9jYWxpdHkuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBMb2NhbGl0eUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xuXG4gIEBWaWV3Q2hpbGQoJ2xvY2FsaXR5U2VhcmNoSW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgbG9jYWxpdHlTZWFyY2hJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbG9jYWxpdHlMaXN0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGxvY2FsaXR5TGlzdDogRWxlbWVudFJlZjtcblxuICAvLyAyMDIwLTA2LTE1XG4gIC8qICAgQElucHV0KClcbiAgICBvbkZvY3VzU2hvd1N1Z2dlc3Rpb25zQWZ0ZXJQcmVmaWxsID0gdHJ1ZTsgKi9cblxuICBASW5wdXQoKSBsYWJlbFJlc291cmNlS2V5ID0gJ2NvbW1vbi5sYWJlbC5wb3N0YWxDb2RlJztcbiAgQElucHV0KCkgbWVzc2FnZU9wdGlvbiA9ICdZJztcbiAgQElucHV0KCkgbWF4U3VnZ2VzaW9uQ291bnQgPSA1O1xuICBASW5wdXQoKSB2aXNpYmxlU3VnZ2VzdGlvbkNvdW50ID0gNTtcbiAgQElucHV0KCkgc29ydENyaXRlcmlhID0gJyc7XG4gIEBJbnB1dCgpIGJhc2VVcmw6IHN0cmluZztcbiAgQElucHV0KCkgaW5wdXRUZXh0OiBzdHJpbmc7XG4gIC8vIEBJbnB1dCgpIGFkZHJlc3NQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIEBJbnB1dCgpIHByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YTtcbiAgQElucHV0KCkgc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSA9IHRydWU7XG4gIEBJbnB1dCgpIGluY2x1ZGVMaXN0T2ZCb3hlczogYm9vbGVhbjtcbiAgQElucHV0KCkgaW5jbHVkZUxpc3RPZkJ1c2luZXNzTmFtZVdpdGhCb3hlczpib29sZWFuO1xuICBASW5wdXQoKSBuaXM5SW5SZXNwb25zZTogYm9vbGVhblxuICBASW5wdXQoKSBidXNpbmVzc05hbWVJblJlc3BvbnNlOiBib29sZWFuXG5cbiAgLy8gQHRzLWlnbm9yZVxuICBASW5wdXQoKSBzZXQgaW5wdXRMYW5nKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2NhbGVTZXJ2aWNlLmNoYW5nZUxhbmcodmFsKTtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKHZhbCkuc3Vic2NyaWJlKFxuICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25DaGFuZ2VkTGFuZ3VhZ2UoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgQElucHV0KClcbiAgaXNSZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBhbGxvd05vVmFsaWRhdGlvbjogYm9vbGVhbjtcbiAgQElucHV0KCkgdmFsaWRhdGVkQnlCYWNrZW5kOiBib29sZWFuO1xuICBASW5wdXQoKSBudW1iZXJPZkV4Y2VwdGlvbnM6IG51bWJlcjtcblxuICBAT3V0cHV0KCkgbWVzc2FnZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjx7IG1lc3NhZ2VUeXBlOiBWYWxpZGF0aW9uTWVzc2FnZVR5cGUsIHRyYW5zbGF0ZWRNZXNzYWdlOiBzdHJpbmcgfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBhZGRyZXNzQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBmb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGJsdXJFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSB0ZXh0Q2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY2xlYXJJbnB1dEV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIHByZWZpbGxFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxQcmVmaWxsRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxQcmVmaWxsRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBudW1iZXJPZkV4Y2VwdGlvbnNFbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvLyBpbnN0YW5jZSBwcm9wZXJ0aWVzXG4gIGFkZHJlc3NJc1ZhbGlkYXRlZDogYm9vbGVhbjtcbiAgYnBUeXBlQWhlYWQ6IHN0cmluZztcbiAgY29sbGFwc2VEcm9wZG93bjogYm9vbGVhbjtcbiAgY29uc3VtZWROdW1iZXI6IG51bWJlcjtcbiAgZXJyb3JDb2RlOiBhbnk7XG4gIGxhc3RTZWFyY2hWYWx1ZTogc3RyaW5nO1xuICBtaW5MZXZlbDogYW55O1xuICBwbGFjZUhvbGRlclRleHQ6IHN0cmluZztcbiAgcHJldmlvdXNJbmRleDogbnVtYmVyO1xuICBzZWFyY2hUZXh0OiBzdHJpbmc9Jyc7XG4gIHNlbGVjdGVkSW5kZXg6IG51bWJlcjtcbiAgc2VsZWN0aW9uQ2hhbmdlZDogYm9vbGVhbjtcbiAgc2VxdWVuY2VOdW1iZXI6IG51bWJlcjtcbiAgc2tpcE5leHRCbHVyOiBib29sZWFuOyAvLyBPbkJsdXIgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHN1Z2dlc3Rpb24vdmFsaWRhdG9yIGJ1dHRvblxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgc3VnZ2VzdGlvbnM6IEFycmF5PGFueT47XG4gIHN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZTogc3RyaW5nO1xuICBzdWdnZXN0aW9uc1dvcmRMaXN0OiBhbnk7XG4gIHR5cGVBaGVhZFdvcmQ6IHN0cmluZztcbiAgdmFsaWRhdGlvbk1lc3NhZ2VDb2RlID0gbnVsbDtcbiAgdmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zID0gbnVsbDtcbiAgd29yZExpc3Q6IGFueTtcbiAgcHJlZmlsbFR5cGU6U291cmNlVHlwZSA7XG5cbiAgcHJlZmlsbGluZyA9IGZhbHNlO1xuICBpc1ByZWZpbGxXaXRoTm9NYXRjaCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWRkcmVzc1NlcnZpY2U6IEFkZHJlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYWxlU2VydmljZTogTG9jYWxlU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1bmljb2RlU2VydmljZTogVW5pY29kZVNlcnZpY2UsXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXh0O1xuICAgIC8vIGluc3RhbmNlIHByb3BlcnRpZXNcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gICAgdGhpcy5zdWdnZXN0aW9ucyA9IFtdO1xuICAgIHRoaXMucHJldmlvdXNJbmRleCA9IC0xO1xuICAgIHRoaXMubGFzdFNlYXJjaFZhbHVlID0gJyc7XG4gICAgdGhpcy53b3JkTGlzdCA9IFtdO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnNXb3JkTGlzdCA9IFtdO1xuICAgIHRoaXMuYnBUeXBlQWhlYWQgPSAnJztcbiAgICB0aGlzLnBsYWNlSG9sZGVyVGV4dCA9ICcnO1xuICAgIHRoaXMuc2tpcE5leHRCbHVyID0gZmFsc2U7IC8vIE9uQmx1ciBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgc3VnZ2VzdGlvbi92YWxpZGF0b3IgYnV0dG9uXG4gICAgdGhpcy5lcnJvckNvZGUgPSBudWxsO1xuICAgIC8vIHNjb3BlIHByb3BlcnRpZXNcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgICAvLyBwcm9wZXJ0aWVzXG4gICAgdGhpcy50eXBlQWhlYWRXb3JkID0gJyc7XG4gICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gZmFsc2U7XG4gICAgdGhpcy5zZXF1ZW5jZU51bWJlciA9IDA7XG4gICAgdGhpcy5jb25zdW1lZE51bWJlciA9IDA7XG4gICAgLy8gaW5pdGlhbGl6YXRpb25cbiAgICB0aGlzLnNldFNlYXJjaFRleHQoJycpO1xuICAgIHRoaXMub25DaGFuZ2VkTGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25DaGFuZ2VkKSB7XG4gICAgICBjb25zdCBvdmVybGF5OiBIVE1MRGl2RWxlbWVudCA9IHRoaXMubG9jYWxpdHlMaXN0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgbGlzdEl0ZW0gPSBEb21IYW5kbGVyLmZpbmRTaW5nbGUob3ZlcmxheSwgJ2xpLmFjdGl2ZScpO1xuICAgICAgICBpZiAobGlzdEl0ZW0pIHtcbiAgICAgICAgICBEb21IYW5kbGVyLnNjcm9sbEluVmlldyhvdmVybGF5LCBsaXN0SXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuXG4gICAgXG4gICAgaWYgKGNoYW5nZXMpIHtcblxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3ByZWZpbGxEYXRhJykgJiYgIWNoYW5nZXMucHJlZmlsbERhdGEuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcmVmaWxsaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdGhpcy5sb2FkUGFyYW1zKGNoYW5nZXMucHJlZmlsbERhdGEuY3VycmVudFZhbHVlKTtcblxuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsb2NhbGl0eTo6bmdPbkNoYW5nZXMgLSBsb2FkUGFyYW1lIHJlc3VsdDonLCB0aGlzLnNlYXJjaFRleHQpOyB9XG4gICAgICAgIHRoaXMuYnBUeXBlQWhlYWQgPSAnJztcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCAhPT0gJycgJiYgdGhpcy5taW5MZXZlbCA9PT0gQUREUkVTU0xFVkVMLkxPQ0FMSVRZKSB7XG4gICAgICAgICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlOYW1lXG4gICAgICAgICAgICA9IHRoaXMudHJhbnNmb3JtTXVuaWNpcGFsaXR5SW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcyh0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSk7XG4gICAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKC8qJ3ByZWZpbGxlZCcqLyBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnaW5wdXRUZXh0JykgJiYgIWNoYW5nZXMuaW5wdXRUZXh0LmZpcnN0Q2hhbmdlKSB7XG4gICAgICBcbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLm5vdEVxdWFsSWdub3JlQ2FzZSh0aGlzLnNlYXJjaFRleHQsIGNoYW5nZXMuaW5wdXRUZXh0LmN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gY2hhbmdlcy5pbnB1dFRleHQuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvKlxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2Jhc2VVcmwnKSAmJiAhY2hhbmdlcy5iYXNlVXJsLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGVkQWRkcmVzcygpO1xuICAgICAgfVxuICAgICAgKi9cblxuICAgICAgLy8gaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3ZhbGlkYXRlZEJ5QmFja2VuZCcpICYmIGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3ByZWZpbGxEYXRhJykpIHtcbiAgICAgIC8vICAgdGhpcy5vbklucHV0Q2hhbmdlKFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRClcbiAgICAgIC8vIH1cblxuICAgIH1cbiAgfVxuXG4gIHRyYW5zZm9ybU11bmljaXBhbGl0eUluTG93ZXJjYXNlQW5kV2l0aG91dERpYWNyaXRpY3MobXVuaWNpcGFsaXR5TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcgPSBudWxsO1xuICAgIGlmIChtdW5pY2lwYWxpdHlOYW1lICE9PSBudWxsICYmIG11bmljaXBhbGl0eU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzdWx0ID0gdGhpcy51bmljb2RlU2VydmljZS5yZW1vdmVEaWFjcml0aWNzKG11bmljaXBhbGl0eU5hbWUpO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ3ByZWZpbGwgbXVuaWNpcGFsaXR5JywgcmVzdWx0KTsgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgYnVpbGRJbnB1dFdvcmRMaXN0KCkge1xuICAgIHRoaXMud29yZExpc3QgPSB0aGlzLnNlYXJjaFRleHQuc3BsaXQoL1tcXHMsIF0rLyk7XG4gICAgLy8gY29uc29sZS5sb2coJ0xpYkF1dG9jb21wbGV0ZUxvY2FsaXR5Q29tcG9uZW50OjpidWlsZElucHV0V29yZExpc3QnLCB0aGlzLndvcmRMaXN0KTtcbiAgICBpZiAodGhpcy5zdWdnZXN0aW9ucyAmJiB0aGlzLndvcmRMaXN0KSB7XG4gICAgICBmb3IgKGNvbnN0IHN1ZyBvZiB0aGlzLnN1Z2dlc3Rpb25zKSB7XG4gICAgICAgIGlmICghc3VnIHx8ICFzdWcuaGFzT3duUHJvcGVydHkoJ3N0cmluZycpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB3IG9mIHRoaXMud29yZExpc3QpIHtcbiAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuc3RhcnRzV2l0aElnbm9yZURpYWNyaXRpY3Moc3VnLnN0cmluZyBhcyBzdHJpbmcsIHcgYXMgc3RyaW5nKTtcbiAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgICAgICAgY29uc3Qgd3cgPSBzdWcuc3RyaW5nLnN1YnN0cihzdGFydCwgdy5sZW5ndGgpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2FkZGluZyB3b3JkOicgKyB3dyk7XG4gICAgICAgICAgICAvLyB3dyBpcyBhIGNhbmRpZGF0ZSB0byBiZSBhZGRlZCB0byB0aGUgd29yZGxpc3QgaWYgbm90IGFscmVhZHkgcHJlc2VudCBpbiBpdFxuICAgICAgICAgICAgY29uc3QgcHJlc2VudCA9IHRoaXMud29yZExpc3QuZmluZCgodzE6IHN0cmluZykgPT4gdzEudG9Mb3dlckNhc2UoKSA9PT0gd3cudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICBpZiAocHJlc2VudCA9PT0gbnVsbCB8fCBwcmVzZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy53b3JkTGlzdC5wdXNoKHd3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdHJpbmdTdGFydHNXaXRoSWdub3JlRGlhY3JpdGljcyh2YWx1ZSwgcHJlZml4KSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbiAgICBjb25zdCBfdmFsdWUgPSB0aGlzLnVuaWNvZGVTZXJ2aWNlLnJlbW92ZURpYWNyaXRpY3MoKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICAgIGNvbnN0IF9wcmVmaXggPSB0aGlzLnVuaWNvZGVTZXJ2aWNlLnJlbW92ZURpYWNyaXRpY3MoKHByZWZpeCAhPT0gbnVsbCAmJiBwcmVmaXggIT09IHVuZGVmaW5lZCkgPyBwcmVmaXgudG9Mb3dlckNhc2UoKSA6IHByZWZpeCk7XG4gICAgY29uc3Qgc3RhcnQgPSBfdmFsdWUuc2xpY2UoMCwgX3ByZWZpeC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihfcHJlZml4KSAhPT0gLTE7XG4gICAgcmV0dXJuIHN0YXJ0O1xuICB9XG5cbiAgYnVpbGRUeXBlQWhlYWQoc291cmNlOiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICghdGhpcy5tYXlBZGRUeXBlQWhlYWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWFyY2hUZXh0V29yZHMgPSB0aGlzLnNlYXJjaFRleHQuc3BsaXQoL1tcXHMsIF0rLyk7XG4gICAgY29uc3QgbGFzdFdvcmQgPSBzZWFyY2hUZXh0V29yZHNbc2VhcmNoVGV4dFdvcmRzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMuc29tZShmdW5jdGlvbiAoc3VnKSB7XG4gICAgICBpZiAoIXN1ZyB8fCAhc3VnLmhhc093blByb3BlcnR5KCdzdHJpbmcnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VnLnN0cmluZy5zcGxpdCgvW1xccy1dKy8pLnNvbWUoZnVuY3Rpb24gKHdvcmQpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RyaW5nU3RhcnRzV2l0aElnbm9yZURpYWNyaXRpY3Mod29yZCwgbGFzdFdvcmQpKSB7XG4gICAgICAgICAgdGhpcy50eXBlQWhlYWRXb3JkID0gd29yZDtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICB9LmJpbmQodGhpcykpKSB7XG4gICAgICBjb25zdCBhcHBlbmRpeCA9IHRoaXMudHlwZUFoZWFkV29yZC5zbGljZShsYXN0V29yZC5sZW5ndGgsIHRoaXMudHlwZUFoZWFkV29yZC5sZW5ndGgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB0aGlzLmJwVHlwZUFoZWFkID0gdGhpcy5zZWFyY2hUZXh0ICsgYXBwZW5kaXg7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCkge1xuICAgIGlmICh0aGlzLmVycm9yQ29kZSkge1xuICAgICAgLypcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQodGhpcy5lcnJvckNvZGUvICosIHt2YWx1ZTogJ3dvcmxkJ30qIC8pLnN1YnNjcmliZSgocmVzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICAgIC8vID0+ICdoZWxsbyB3b3JsZCdcbiAgICAgICAgICBpZiAodGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UgPT09IHJlcyApIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgICovXG5cbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuZXJyb3JDb2RlKTtcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSA9PT0gcmVzKSB7XG4gICAgICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICAgIH1cbiAgICAgIC8qXG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UgPT09IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSh0aGlzLmVycm9yQ29kZSkpIHtcbiAgICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgICAgfVxuICAgICAgKi9cbiAgICAgIHRoaXMuZXJyb3JDb2RlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBjbGVhclR5cGVBaGVhZCgpIHtcbiAgICB0aGlzLmJwVHlwZUFoZWFkID0gJyc7XG4gIH1cblxuICBlbWl0VHJhbnNsYXRlZFZhbGlkYXRpb25NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlVHlwZTogVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLCBvcHRpb25zPzogc3RyaW5nW10pIHtcbiAgICAvLyBNb21lbnRseSwgb3B0aW9ucyBhcmUgTk9UIHVzZWQ7IHNvIGRhdGEgdHlwZSBvZiB0aGVzZSBvcHRpb25zIHdpbGwgYmUgcmV2aWV3ZWQgb25jZSBuZWVkZWQuXG4gICAgaWYgKHZhbGlkYXRpb25NZXNzYWdlVHlwZSA9PT0gbnVsbCB8fCB2YWxpZGF0aW9uTWVzc2FnZVR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gZW1pdCB2YWxpZGF0aW9uIG1lc3NhZ2UgLSBtZXNzYWdlIGtleSBpcyBpbnZhbGlkIScsIHZhbGlkYXRpb25NZXNzYWdlVHlwZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoICh2YWxpZGF0aW9uTWVzc2FnZVR5cGUpIHtcblxuICAgICAgY2FzZSBWYWxpZGF0aW9uTWVzc2FnZVR5cGUuQWRkcmVzc19Ob3RfRm91bmQ6XG4gICAgICBjYXNlIFZhbGlkYXRpb25NZXNzYWdlVHlwZS5BZGRyZXNzX1ZhbGlkYXRlZDpcbiAgICAgIGNhc2UgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLlNlcnZpY2VfVW5hdmFpbGFibGU6IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdjb21tb24ubWVzc2FnZS4nICsgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlKTtcbiAgICAgICAgLy8gdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQoeyBtZXNzYWdlVHlwZTogdmFsaWRhdGlvbk1lc3NhZ2VUeXBlLCB0cmFuc2xhdGVkTWVzc2FnZTogbWVzc2FnZSB9KTtcbiAgICAgIH1cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmFsaWduXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byBlbWl0IHZhbGlkYXRpb24gbWVzc2FnZSAtIG1lc3NhZ2Uga2V5IE5PVCBzdXBwb3J0ZWQhJywgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlKTtcbiAgICAgIH1cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmFsaWduXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICB9XG5cbiAgZ2VuZXJhdGVQYXJhbWV0ZXJzKCk6IFF1ZXJ5UGFyYW1ldGVycyB7XG4gICAgY29uc3QgcGFyYW0gPSBuZXcgUXVlcnlQYXJhbWV0ZXJzKHtcbiAgICAgIGlkOiB0aGlzLnNlcXVlbmNlTnVtYmVyLFxuICAgICAgcTogdGhpcy5zZWFyY2hUZXh0LFxuICAgICAgbWF4TnVtYmVyT2ZTdWdnZXN0aW9uczogdGhpcy5tYXhTdWdnZXNpb25Db3VudFxuICAgIH0pO1xuXG4gICAgc3dpdGNoICh0aGlzLnNvcnRDcml0ZXJpYSkge1xuICAgICAgY2FzZSAnUCc6XG4gICAgICAgIHBhcmFtLnNvcnRCeVBvc3RhbENvZGUodHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdMJzpcbiAgICAgICAgcGFyYW0uc29ydEJ5TG9jYWxpdHluYW1lKHRydWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXHRcblx0aWYodGhpcy5pbmNsdWRlTGlzdE9mQm94ZXMpe1xuICAgICAgcGFyYW0uc2V0SW5jbHVkZUxpc3RPZkJveGVzKHRydWUpO1xuICAgIH1cblx0aWYodGhpcy5uaXM5SW5SZXNwb25zZSl7XG4gICAgICBwYXJhbS5zZXRJbmNsdWRlTmlzQ29kZSh0cnVlKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmJ1c2luZXNzTmFtZUluUmVzcG9uc2Upe1xuICAgICAgcGFyYW0uc2V0SW5jbHVkZUJ1c2luZXNzTmFtZSh0cnVlKTtcbiAgICB9XG4gICAgaWYodGhpcy5pbmNsdWRlTGlzdE9mQnVzaW5lc3NOYW1lV2l0aEJveGVzKXtcbiAgICAgIHBhcmFtLnNldEluY2x1ZGVMaXN0T2ZCdXNpbmVzc05hbWVXaXRoQm94ZXModHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbTtcbiAgfVxuXG4gIGdldFRvcFN1Z2dlc3Rpb25zKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICB0aGlzLnNlcXVlbmNlTnVtYmVyICs9IDE7XG4gICAgY29uc3QgcGFyYW0gPSB0aGlzLmdlbmVyYXRlUGFyYW1ldGVycygpO1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ0xPQ0FMSVRZIGNhbGxpbmcgc2VydmljZSBwYXJhbXMnLCBwYXJhbSk7IH1cbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuYWRkcmVzc1NlcnZpY2UuZ2V0TG9jYWxpdHkodGhpcy5iYXNlVXJsLCBwYXJhbSkuc3Vic2NyaWJlKFxuICAgICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbG9jYWxpdHkgc3VnZ2VzdGlvbnMgcmVjZWl2ZWQ6JywgcmVzcG9uc2UpOyB9XG4gICAgICAgICAgdGhpcy5oYW5kbGVHZXRMb2NhbGl0eVJlc3BvbnNlKHJlc3BvbnNlLCBzb3VyY2UpO1xuICAgICAgICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCkge1xuICAgICAgICAgICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgdGhpcy5wcmVmaWxsQW5hbHl6ZURhdGEoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzUHJlZmlsbFdpdGhOb01hdGNoID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICxcbiAgICAgICAgKCkgPT4gdGhpcy5oYW5kbGVHZXRMb2NhbGl0eUVycm9yKHNvdXJjZSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGV4dENvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmlzUHJlZmlsbFdpdGhOb01hdGNoID09PSB0cnVlKSA/ICdvcmFuZ2VyZWQnIDogJyc7XG4gIH1cblxuICBoYW5kbGVHZXRMb2NhbGl0eVJlc3BvbnNlKGRhdGE6IGFueSwgc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdoYW5kbGVHZXRMb2NhbGl0eVJlc3BvbnNlJywgZGF0YSk7XG4gICAgfVxuICAgIGlmIChkYXRhICYmIGRhdGEucmVzcG9uc2UgJiYgZGF0YS5yZXNwb25zZS5zZXF1ZW5jZU51bWJlciAmJiBkYXRhLnJlc3BvbnNlLnNlcXVlbmNlTnVtYmVyID49IHRoaXMuY29uc3VtZWROdW1iZXIgJiZcbiAgICAgIGRhdGEucmVzcG9uc2UudG9wU3VnZ2VzdGlvbnMpIHtcbiAgICAgIHRoaXMuY29uc3VtZWROdW1iZXIgPSBkYXRhLnJlc3BvbnNlLnNlcXVlbmNlTnVtYmVyO1xuICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgICB0aGlzLnBhcnNlVG9wU3VnZ2VzdGlvbnMoZGF0YS5yZXNwb25zZS50b3BTdWdnZXN0aW9ucywgc291cmNlKTtcbiAgICAgIHRoaXMuYnVpbGRUeXBlQWhlYWQoc291cmNlKTtcbiAgICAgIHRoaXMuY2xlYXJDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgICB0aGlzLmJ1aWxkSW5wdXRXb3JkTGlzdCgpO1xuICAgIH1cbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSAodGhpcy5wcmVmaWxsaW5nID09PSB0cnVlICYmIHRoaXMucHJlZmlsbERhdGEgIT09IG51bGwpXG4gICAgICA/ICF0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMub25Gb2N1c1Nob3dTdWdnZXN0aW9uc0FmdGVyUHJlZmlsbCA6IGZhbHNlO1xuICB9XG5cbiAgaGFuZGxlR2V0TG9jYWxpdHlFcnJvcihzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dOb1ZhbGlkYXRpb24gJiYgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQpIHtcbiAgICAgIHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zICs9IDE7XG4gICAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9uc0VtaXR0ZXIuZW1pdCh0aGlzLm51bWJlck9mRXhjZXB0aW9ucyk7XG4gICAgICB0aGlzLnNldENvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKTtcbiAgICB9XG4gICAgaWYodGhpcy5hbGxvd05vVmFsaWRhdGlvbiAmJiB0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCAmJiBzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCl7XG5cbiAgICAgIHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zKz0xO1xuICAgICAgdGhpcy5udW1iZXJPZkV4Y2VwdGlvbnNFbWl0dGVyLmVtaXQodGhpcy5udW1iZXJPZkV4Y2VwdGlvbnMpO1xuICAgICAgdGhpcy5zZXRDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgICB0aGlzLm9uSW5wdXRDaGFuZ2Uoc291cmNlKTtcbiAgICB9XG4gICAgaWYodGhpcy5hbGxvd05vVmFsaWRhdGlvbiAmJiAhdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQgJiYgc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQgIClcbiAgICB7XG4gICAgICB0aGlzLm9uSW5wdXRDaGFuZ2Uoc291cmNlKTtcbiAgICB9XG4gICAgaWYoIXRoaXMuYWxsb3dOb1ZhbGlkYXRpb24gJiYgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQpXG4gICAge1xuICAgICAgdGhpcy5zZXRDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgfVxuICAgIC8vIHRoaXMuc2V0Q29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuXG4gIH1cblxuICBpc0Jyb3dzZXJJRSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL21zaWVcXHN8dHJpZGVudFxcL3xlZGdlXFwvL2kudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gIH1cblxuICBpc0Ryb3Bkb3duQ2xpY2tlZChldikge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2LmV4cGxpY2l0T3JpZ2luYWxUYXJnZXQgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICByZXR1cm4gKHRhcmdldC5pZCA9PT0gJ2JwYWFjLWxvY2FsaXR5LWRyb3Bkb3duJyk7XG4gIH1cblxuICBpc1N0cmluZyh2YWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsLmNvbnN0cnVjdG9yID09PSBTdHJpbmc7XG4gIH1cblxuICBsb2FkUGFyYW1zKHByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSkge1xuICAgIC8vIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICBsZXQgY29uY2F0U3RyID0gJyc7XG4gICAgaWYgKHByZWZpbGxEYXRhICE9PSBudWxsICYmIHByZWZpbGxEYXRhLnBhcmFtZXRlcnMgIT09IG51bGwpIHtcbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdtaW5MZXZlbCcpKSB7XG4gICAgICAgIHRoaXMubWluTGV2ZWwgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm1pbkxldmVsO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ3Vuc3RydWN0dXJlZEFkZHJlc3MnKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMudW5zdHJ1Y3R1cmVkQWRkcmVzcykpIHtcbiAgICAgICAgY29uY2F0U3RyID0gcHJlZmlsbERhdGEucGFyYW1ldGVycy51bnN0cnVjdHVyZWRBZGRyZXNzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ3Bvc3RhbENvZGUnKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSkpIHtcbiAgICAgICAgICBjb25jYXRTdHIgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ211bmljaXBhbGl0eU5hbWUnKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSkpIHtcbiAgICAgICAgICBjb25jYXRTdHIgKz0gJyAnICsgcHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICBpZiAocHJlZmlsbERhdGEucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eSgncG9zdGFsQ29kZScpICYmIHRoaXMuaXNTdHJpbmcocHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlKSkge1xuICAgICAgICBjb25jYXRTdHIgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGU7XG4gICAgICB9XG4gICAgICBpZiAocHJlZmlsbERhdGEucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eSgnbXVuaWNpcGFsaXR5TmFtZScpICYmIHRoaXMuaXNTdHJpbmcocHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lKSkge1xuICAgICAgICBjb25jYXRTdHIgKz0gJyAnICsgcHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb25jYXRTdHI7XG4gIH1cblxuICBtYXlTaG93Q2xlYXJCdXR0b24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoVGV4dC5sZW5ndGggPiAwO1xuICB9XG5cbiAgbWF5QWRkVHlwZUFoZWFkKCkge1xuICAgIGlmICh0aGlzLnNlYXJjaFRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoL1teXFxzLCBcXFxcXFwvXSQvKS50ZXN0KHRoaXMuc2VhcmNoVGV4dCk7XG4gIH1cblxuICBub3RFcXVhbElnbm9yZUNhc2Uob2xkVmFsOiBzdHJpbmcsIG5ld1ZhbDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG9sZFZhbC50b0xvd2VyQ2FzZSgpICE9PSBuZXdWYWwudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIG9uQmx1cihldikge1xuICAgIGlmICh0aGlzLmlzQnJvd3NlcklFKCkgJiYgdGhpcy5pc0Ryb3Bkb3duQ2xpY2tlZChldikpIHtcbiAgICAgIHRoaXMubG9jYWxpdHlTZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNraXBOZXh0Qmx1cikge1xuICAgICAgdGhpcy5za2lwTmV4dEJsdXIgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gdHJ1ZTtcbiAgICAgIHRoaXMuYmx1ckV2ZW50LmVtaXQoQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICB9XG4gIH1cblxuICBvbkZvY3VzKCkge1xuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IGZhbHNlO1xuICAgIC8vIHRoaXMuY29sbGFwc2VEcm9wZG93biA9ICh0aGlzLnByZWZpbGxpbmcgPT09IHRydWUgJiYgdGhpcy5wcmVmaWxsRGF0YSAhPT0gbnVsbClcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICA/ICF0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMub25Gb2N1c1Nob3dTdWdnZXN0aW9uc0FmdGVyUHJlZmlsbCA6IGZhbHNlO1xuICAgIC8vIHRoaXMucHJlZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuc2tpcE5leHRCbHVyID0gZmFsc2U7XG4gICAgdGhpcy5mb2N1c0V2ZW50LmVtaXQoQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgfVxuXG4gIG9uSW5wdXRDbGljaygpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsb2NhbGl0eSBjbGljaycpOyB9XG5cbiAgfVxuXG4gIG9uSW5wdXRDaGFuZ2Uoc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IGZhbHNlO1xuICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgdGhpcy5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgIH1cbiAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCA9PT0gJycpIHtcbiAgICAgIHRoaXMuc2VxdWVuY2VOdW1iZXIgKz0gMTtcbiAgICAgIHRoaXMuY29uc3VtZWROdW1iZXIgPSB0aGlzLnNlcXVlbmNlTnVtYmVyO1xuICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQpIHtcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKSB7XG4gICAgICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlBbmRMb2NhbGl0eVBlcmZlY3RNYXRjaEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBtdW5pY2lwYWxpdHlOYW1lID0gdGhpcy5zZWFyY2hUZXh0LnJlcGxhY2UoL1xcZCsvZywgJycpLnRyaW0oKTtcbiAgICAgICAgICBjb25zdCBwb3N0YWxDb2RlID0gdGhpcy5zZWFyY2hUZXh0Lm1hdGNoKC9cXGQrL2cpPy5qb2luKFwiXCIpO1xuICAgICAgICAgIGxldCBzdWdnZXN0aW9uID0ge1xuICAgICAgICAgICdhZGRyZXNzJzp7XG4gICAgICAgICAgICAnc3RyaW5nJzogdGhpcy5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgJ211bmljaXBhbGl0eU5hbWUnOiBtdW5pY2lwYWxpdHlOYW1lID8gbXVuaWNpcGFsaXR5TmFtZS50b1VwcGVyQ2FzZSgpIDogJycsXG4gICAgICAgICAgICAnbG9jYWxpdHlOYW1lJzogbXVuaWNpcGFsaXR5TmFtZSxcbiAgICAgICAgICAgICdwb3N0YWxDb2RlJzogcG9zdGFsQ29kZSxcbiAgICAgICAgICAgICdzZWFyY2hCYXJTdHJpbmcnOiB0aGlzLnNlYXJjaFRleHRcbiAgICAgICAgICB9fVxuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uID0gc3VnZ2VzdGlvbjtcbiAgICAgICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICB0aGlzLnByZWZpbGxBbmFseXplRGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuY2xlYXJUeXBlQWhlYWQoKTtcbiAgICAgICAgICB0aGlzLnJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCk7XG4gICAgICAgICAgY29uc3QgbXVuaWNpcGFsaXR5TmFtZSA9IHRoaXMuc2VhcmNoVGV4dC5yZXBsYWNlKC9cXGQrL2csICcnKS50cmltKCk7XG4gICAgICAgICAgY29uc3QgcG9zdGFsQ29kZSA9IHRoaXMuc2VhcmNoVGV4dC5tYXRjaCgvXFxkKy9nKT8uam9pbihcIlwiKTtcbiAgICAgICAgICBsZXQgc3VnZ2VzdGlvbiA9IHtcbiAgICAgICAgICAgICdzdHJpbmcnOiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAnbXVuaWNpcGFsaXR5TmFtZSc6IG11bmljaXBhbGl0eU5hbWUgPyBtdW5pY2lwYWxpdHlOYW1lLnRvVXBwZXJDYXNlKCkgOiAnJyxcbiAgICAgICAgICAgICdsb2NhbGl0eU5hbWUnOiBtdW5pY2lwYWxpdHlOYW1lLFxuICAgICAgICAgICAgJ3Bvc3RhbENvZGUnOiBwb3N0YWxDb2RlLFxuICAgICAgICAgICAgJ3NlYXJjaEJhclN0cmluZyc6IHRoaXMuc2VhcmNoVGV4dFxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5nZXRUb3BTdWdnZXN0aW9ucyhzb3VyY2UpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZygnTGliQXV0b2NvbXBsZXRlTG9jYWxpdHlDb21wb25lbnQ6Om9uSW5wdXRDaGFuZ2UgLSBiZWZvcmUnLCB0aGlzLndvcmRMaXN0KTtcbiAgICB0aGlzLmJ1aWxkSW5wdXRXb3JkTGlzdCgpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdMaWJBdXRvY29tcGxldGVMb2NhbGl0eUNvbXBvbmVudDo6b25JbnB1dENoYW5nZSAtIGFmdGVyJywgdGhpcy53b3JkTGlzdCk7XG4gIH1cblxuICBwYXJzZVNpbmdsZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbjogYW55LCBzb3VyY2U6IFNvdXJjZVR5cGUpIHtcbiAgICBsZXQgc3VnZ2VzdGlvblRvQWRkOiBhbnk7XG4gICAgaWYgKHRoaXMubG9jYWxlU2VydmljZS5pc0xvY2FsZUZyZW5jaCgpICYmIHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2ZyZW5jaCcpKSB7XG4gICAgICBzdWdnZXN0aW9uVG9BZGQgPSBzdWdnZXN0aW9uLmZyZW5jaDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubG9jYWxlU2VydmljZS5pc0xvY2FsZUR1dGNoKCkgJiYgc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZHV0Y2gnKSkge1xuICAgICAgc3VnZ2VzdGlvblRvQWRkID0gc3VnZ2VzdGlvbi5kdXRjaDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubG9jYWxlU2VydmljZS5pc0xvY2FsZUdlcm1hbigpICYmIHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2dlcm1hbicpKSB7XG4gICAgICBzdWdnZXN0aW9uVG9BZGQgPSBzdWdnZXN0aW9uLmdlcm1hbjtcbiAgICB9IGVsc2UgaWYgKHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2FkZHJlc3MnKSkge1xuICAgICAgc3VnZ2VzdGlvblRvQWRkID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgIH1cbiAgICBpZiAoc3VnZ2VzdGlvblRvQWRkKSB7XG4gICAgICBpZiAoc3VnZ2VzdGlvbi5tZXNzYWdlcykge1xuICAgICAgICBzdWdnZXN0aW9uVG9BZGQubWVzc2FnZXMgPSBzdWdnZXN0aW9uLm1lc3NhZ2VzO1xuICAgICAgfVxuICAgICAgdGhpcy5zdWdnZXN0aW9ucy5wdXNoKHN1Z2dlc3Rpb25Ub0FkZCk7XG4gICAgICBpZiAodGhpcy5tZXNzYWdlT3B0aW9uID09PSAnWScgJiYgc3VnZ2VzdGlvblRvQWRkLmhhc093blByb3BlcnR5KCdtZXNzYWdlcycpKSB7XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiBzdWdnZXN0aW9uVG9BZGQubWVzc2FnZXMpIHtcbiAgICAgICAgICBjb25zdCB0cmFuc2xhdGVkTWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlTWVzc2FnZShtKTtcbiAgICAgICAgICBpZiAodHJhbnNsYXRlZE1lc3NhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG0udHJhbnNsYXRlZE1lc3NhZ2UgPSB0cmFuc2xhdGVkTWVzc2FnZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCkge1xuICAgICAgICBzdWdnZXN0aW9uLmFkZHJlc3MgPSBzdWdnZXN0aW9uVG9BZGQ7XG4gICAgICAgIHRoaXMucHJlZmlsbENoZWNrRm9yUGVyZmVjdE1hdGNoKHN1Z2dlc3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByZWZpbGxDaGVja0ZvclBlcmZlY3RNYXRjaChzdWdnZXN0aW9uKSB7XG4gICAgY29uc3Qgc3VnQWRkcmVzcyA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICBpZiAoIC8qISB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hGb3VuZCAmJiovIHN1Z0FkZHJlc3MucG9zdGFsQ29kZSA9PT0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUpIHtcbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0xPQ0FMSVRZIC0gUFJFRklMTCAtIGNoZWNraW5nIHN1Z2dlc3Rpb24gZm9yIHBlcmZlY3QgbWF0Y2gnLCB0aGlzLnByZWZpbGxEYXRhLCBzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25Mb2NhbGl0eSA9IHRoaXMudHJhbnNmb3JtTXVuaWNpcGFsaXR5SW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcyhzdWdBZGRyZXNzLmxvY2FsaXR5TmFtZSk7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uTXVuaWNpcGFsaXR5ID0gdGhpcy50cmFuc2Zvcm1NdW5pY2lwYWxpdHlJbkxvd2VyY2FzZUFuZFdpdGhvdXREaWFjcml0aWNzKHN1Z0FkZHJlc3MubXVuaWNpcGFsaXR5TmFtZSk7XG4gICAgICBpZiAoc3VnZ2VzdGlvbkxvY2FsaXR5LnN0YXJ0c1dpdGgodGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5TmFtZSlcbiAgICAgICAgfHwgc3VnZ2VzdGlvbk11bmljaXBhbGl0eS5zdGFydHNXaXRoKHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eU5hbWUpKSB7XG4gICAgICAgIGlmICh0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlBbmRMb2NhbGl0eVBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnTE9DQUxJVFkgLSBQUkVGSUxMIC0gc2tpcHBpbmcgc3VnZ2VzdGlvbjonLCBzdWdnZXN0aW9uKTsgfVxuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdMT0NBTElUWSAtIFBSRUZJTEwgLSBrZWVwaW5nIHN1Z2dlc3Rpb246JyxcbiAgICAgICAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb247XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHN1Z0FkZHJlc3MucG9zdGFsQ29kZSArICcgJyArIHN1Z0FkZHJlc3MubG9jYWxpdHlOYW1lO1xuXG4gICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5QW5kTG9jYWxpdHlQZXJmZWN0TWF0Y2hGb3VuZCA9IChzdWdnZXN0aW9uTG9jYWxpdHkuc3RhcnRzV2l0aCh0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlOYW1lKVxuICAgICAgICAgICYmIHN1Z2dlc3Rpb25NdW5pY2lwYWxpdHkuc3RhcnRzV2l0aCh0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlOYW1lKSkgPyB0cnVlIDogZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eUFuZExvY2FsaXR5UGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUpIHtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdMT0NBTElUWSAtIFBSRUZJTEwgLSBQZXJmZWN0IG1hdGNoIC0gTXVuaWNpcGFsaXR5ICYgbG9jYXRpb246Jywgc3VnZ2VzdGlvbik7IH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdMT0NBTElUWSAtIFBSRUZJTEwgLSBOTyBQZXJmZWN0IG1hdGNoOicsIHN1Z2dlc3Rpb24pOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcmVmaWxsQW5hbHl6ZURhdGEoKSB7XG5cbiAgICBpZiAodGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5UGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgfSAgICBcbiAgICB0aGlzLnByZWZpbGxFdmVudEVtaXR0ZXIuZW1pdCgvKnRoaXMucHJlZmlsbERhdGEqLyBuZXcgUHJlZmlsbEV2ZW50KEFERFJFU1NMRVZFTC5MT0NBTElUWSwgdGhpcy5wcmVmaWxsRGF0YSkpOyAgICBcbiAgfVxuXG5cblxuICBwYXJzZVRvcFN1Z2dlc3Rpb25zKHRvcFN1Z2dlc3Rpb25zLCBzb3VyY2U6IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsb2NhbGl0eSAtIHBhcnNlIHN1Z2dlc3Rpb25zJywgdG9wU3VnZ2VzdGlvbnMpOyB9XG4gICAgaWYgKHRvcFN1Z2dlc3Rpb25zLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgLy8gdG9wU3VnZ2VzdGlvbnMuZm9yRWFjaCh0aGlzLnBhcnNlU2luZ2xlU3VnZ2VzdGlvbi5iaW5kKHRoaXMpKTtcbiAgICAgIGZvciAoY29uc3Qgc3VnIG9mIHRvcFN1Z2dlc3Rpb25zKSB7XG4gICAgICAgIHRoaXMucGFyc2VTaW5nbGVTdWdnZXN0aW9uKHN1Zywgc291cmNlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXJzZVNpbmdsZVN1Z2dlc3Rpb24odG9wU3VnZ2VzdGlvbnMsIHNvdXJjZSk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XG4gIH1cblxuICBzdGFydHNXaXRoSWdub3JlRGlhY3JpdGljcyh2YWx1ZTogc3RyaW5nLCBwcmVmaXg6IHN0cmluZyk6IG51bWJlciB7XG4gICAgLy8gY29uc29sZS5sb2coJ1NlYXJjaGluZyBmb3IgcHJlZml4IFwiJyArIHByZWZpeCArICdcIiBpbnNpZGUgc3VnZ2VzdGlvbjogJyArIHZhbHVlKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMudW5pY29kZVNlcnZpY2UucmVtb3ZlRGlhY3JpdGljcygodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWUpO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gICAgY29uc3QgX3ByZWZpeCA9IHRoaXMudW5pY29kZVNlcnZpY2UucmVtb3ZlRGlhY3JpdGljcygocHJlZml4ICE9PSBudWxsICYmIHByZWZpeCAhPT0gdW5kZWZpbmVkKSA/IHByZWZpeC50b0xvd2VyQ2FzZSgpIDogcHJlZml4KTtcbiAgICBjb25zdCBzdGFydCA9IF92YWx1ZS5pbmRleE9mKF9wcmVmaXgpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzdGFydHNXaXRoSWdub3JlRGlhY3JpdGljczogJyArIHN0YXJ0KTtcbiAgICByZXR1cm4gc3RhcnQ7XG4gIH1cblxuICB2YWx1ZUNoYW5nZWQoKSB7XG4gICAgdGhpcy50ZXh0Q2hhbmdlRXZlbnQuZW1pdCh0aGlzLnNlYXJjaFRleHQpO1xuICB9XG5cbiAgY2xlYXJJbnB1dChmb2N1cz8sIGVtaXQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgLy8gdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgLy8gdGhpcy5icFR5cGVBaGVhZCA9ICcnO1xuICAgIC8vIHRoaXMuc2V0U2VhcmNoVGV4dCgnJyk7XG4gICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICB0aGlzLnByZXZpb3VzSW5kZXggPSAtMTtcbiAgICB0aGlzLmxhc3RTZWFyY2hWYWx1ZSA9ICcnO1xuICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICB0aGlzLmNsZWFyU2VsZWN0ZWRBZGRyZXNzKCk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZWQoKTtcbiAgICAvLyB0aGlzLmNsZWFyQ29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICAgIGlmIChmb2N1cyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5sb2NhbGl0eVNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKGVtaXQpIHtcbiAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgvKidMT0NBTElUWScqLyBJbnB1dE5hbWVUeXBlLkxPQ0FMSVRZKTtcbiAgICAgIC8vICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgvKidTVFJFRVQnKi8gSW5wdXROYW1lVHlwZS5TVFJFRVQpO1xuICAgICAgLy8gIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KC8qJ1NUUkVFVF9OVU1CRVInKi8gSW5wdXROYW1lVHlwZS5TVFJFRVRfTlVNQkVSKTtcbiAgICAgIC8vICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgvKidCT1hfTlVNQkVSJyovIElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTZWFyY2hUZXh0KCkge1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuICB9XG5cbiAgY2xlYXJTZWxlY3RlZEFkZHJlc3MoKSB7XG4gICAgdGhpcy5hZGRyZXNzQ2hhbmdlZC5lbWl0KG51bGwpO1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gIH1cblxuICBjbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gICAgLy8gdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQoeyBtZXNzYWdlVHlwZTogbnVsbCwgdHJhbnNsYXRlZE1lc3NhZ2U6IHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlIH0pO1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zID0gbnVsbDtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlQ29kZSA9IG51bGw7XG4gIH1cblxuICBjbGVhclN1Z2dlc3Rpb25zKCkge1xuICAgIHRoaXMud29yZExpc3QgPSBbXTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5zdWdnZXN0aW9uc1dvcmRMaXN0ID0gW107XG4gICAgLy8gY29uc29sZS5sb2coJ0xpYkF1dG9jb21wbGV0ZUxvY2FsaXR5Q29tcG9uZW50OjpjbGVhclN1Z2dlc3Rpb25zJywgdGhpcy53b3JkTGlzdCk7XG4gICAgLy8gdGhpcy5zdWdnZXN0aW9uTWVzc2FnZXMgPSAgW107XG4gIH1cblxuICBjbGlja1N1Z2dlc3Rpb24oZXZlbnQ6IGFueSwgc3VnZ2VzdGlvbjogYW55KSB7XG4gICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IGZhbHNlO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICB0aGlzLnNldFNlYXJjaFRleHQoc3VnZ2VzdGlvbi5zdHJpbmcpO1xuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgLy8gaWYgKHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSkge1xuICAgIC8vICAgdGhpcy5zaG93QWRkcmVzc0lzVmFsaWRhdGVkKCk7XG4gICAgLy8gfVxuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvbnMoKTtcbiAgICB0aGlzLnNldFNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uKTtcbiAgfVxuXG4gIGNsZWFyV2lkZ2V0KCkge1xuICAgIHRoaXMuY2xlYXJTZWFyY2hUZXh0KCk7XG4gICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgIHRoaXMucHJlZmlsbERhdGEgPSBudWxsO1xuICAgIHRoaXMucHJlZmlsbGluZyA9IGZhbHNlO1xuICB9XG5cbiAgY3Vyc29ySXNPblN1Z2dlc3Rpb25MaXN0KCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSW5kZXggPj0gMDtcbiAgfVxuXG4gIG9uQ2hhbmdlZExhbmd1YWdlKCkge1xuICAgIC8vIHRoaXMucGxhY2VIb2xkZXJUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2xvY2FsaXR5LnBsYWNlaG9sZGVyLmlucHV0LXBsYWNlaG9sZGVyJyk7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCgnbG9jYWxpdHkucGxhY2Vob2xkZXIuaW5wdXQtcGxhY2Vob2xkZXInKVxuICAgICAgLnN1YnNjcmliZSgocmVzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ25ldyBwbGFjZWhvbGRlcicsIHJlcyk7XG4gICAgICAgIC8vID0+ICdoZWxsbyB3b3JsZCdcbiAgICAgICAgdGhpcy5wbGFjZUhvbGRlclRleHQgPSByZXM7XG4gICAgICB9KTtcbiAgfVxuXG4gIGNoYW5nZVNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG1vdmVBcnJvd1NlbGVjdGVkSW5kZXhEb3duKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggKyAxICE9PSB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4Kys7XG4gICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbigpO1xuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRJbmRleCwgdGhpcy5zZWxlY3RlZEluZGV4IC0gMSk7XG4gICAgfVxuICB9XG5cbiAgbW92ZUFycm93U2VsZWN0ZWRJbmRleFVwKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggLSAxICE9PSAtMikge1xuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4LS07XG4gICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbigpO1xuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRJbmRleCwgdGhpcy5zZWxlY3RlZEluZGV4ICsgMSk7XG4gICAgfVxuICB9XG4gIGNoZWNrS2V5VVAoZXZlbnQpXG4gIHtcbiAgICBzd2l0Y2ggKGV2ZW50LndoaWNoKSB7XG4gICAgICBcbiAgICAgIGNhc2UgODpcbiAgICAgICBcbiAgICAgICAgaWYodGhpcy5zZWFyY2hUZXh0Lmxlbmd0aD4wKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ1BBUlRJQUxfQ0xFQVJfTE9DQUxJVFknKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnTE9DQUxJVFknKTtcbiAgICAgICAgICAvLyB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnU1RSRUVUJyk7XG4gICAgICAgICAgLy8gdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ1NUUkVFVF9OVU1CRVInKTtcbiAgICAgICAgICAvLyB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnQk9YX05VTUJFUicpO1xuICAgICAgICAvLyAgdGhpcy5jbGVhcklucHV0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgICBicmVhazsgICAgICAgICBcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgICAgICBicmVhaztcblxuICAgIH1cbiAgICBcbiAgfVxuICBjaGVja0tleURvd24oZXZlbnQpIHtcbiAgICBcbiAgICBzd2l0Y2ggKGV2ZW50LndoaWNoKSB7XG4gICAgICAvLyBkb3duIGtleSwgaW5jcmVtZW50IHNlbGVjdGVkSW5kZXhcbiAgICAgIGNhc2UgNDA6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubW92ZUFycm93U2VsZWN0ZWRJbmRleERvd24oKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIHVwIGtleSwgZGVjcmVtZW50IHNlbGVjdGVkSW5kZXhcbiAgICAgIGNhc2UgMzg6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubW92ZUFycm93U2VsZWN0ZWRJbmRleFVwKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gcmlnaHQgYXJyb3cga2V5XG4gICAgICBjYXNlIDM5OlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JJc09uU3VnZ2VzdGlvbkxpc3QoKSkge1xuICAgICAgICAgIHRoaXMuY2xpY2tTdWdnZXN0aW9uKGV2ZW50LCB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLnR5cGVBaGVhZFdvcmQgJiYgdGhpcy50eXBlQWhlYWRJc1Nob3duKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dCh0aGlzLmJwVHlwZUFoZWFkKTtcbiAgICAgICAgICAgIHRoaXMudHlwZUFoZWFkV29yZCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIC8vIHRhYiBrZXlcbiAgICAgIGNhc2UgOTpcbiAgICAgICAgaWYgKCF0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RGaXJzdEluTGlzdE9mU3VnZ2VzaW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ2OlxuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIC8vIGVudGVyIHByZXNzZWRcbiAgICAgIGNhc2UgMTM6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLmN1cnNvcklzT25TdWdnZXN0aW9uTGlzdCgpKSB7XG4gICAgICAgICAgdGhpcy5jbGlja1N1Z2dlc3Rpb24oZXZlbnQsIHRoaXMuc3VnZ2VzdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgfVxuICB9XG5cbiAgc2V0Q29ubmVjdGlvbkVycm9yTWVzc2FnZSgpIHtcbiAgICB0aGlzLmVycm9yQ29kZSA9IC8qJ3NlcnZpY2UtdW5hdmFpbGFibGUnKi8gVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLlNlcnZpY2VfVW5hdmFpbGFibGU7XG4gICAgLy8gdGhpcy5zZXRWYWxpZGF0aW9uTWVzc2FnZSh0aGlzLmVycm9yQ29kZSk7XG4gICAgdGhpcy5lbWl0VHJhbnNsYXRlZFZhbGlkYXRpb25NZXNzYWdlKFZhbGlkYXRpb25NZXNzYWdlVHlwZS5TZXJ2aWNlX1VuYXZhaWxhYmxlKTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uOiBhbnkpIHtcbiAgICB0aGlzLmFkZHJlc3NDaGFuZ2VkLmVtaXQoc3VnZ2VzdGlvbik7XG4gIH1cblxuICB0cmFuc2xhdGVNZXNzYWdlKG1lc3NhZ2UpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1lc3NhZ2VLZXkgPSBtZXNzYWdlLmtleTtcbiAgICBzd2l0Y2ggKG1lc3NhZ2VLZXkpIHtcbiAgICAgIGNhc2UgJ3N1YmwnOiB7XG4gICAgICAgIC8vIGFyZ3MgbGVuZ3RoIG11c3QgYmUgMiAhXG4gICAgICAgIGlmIChtZXNzYWdlLmFyZ3MgJiYgbWVzc2FnZS5hcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbG9jYWxpdHkuc3VnZ2VzdGlvbi5tZXNzYWdlLnN1YmwnLCB7IHN1YjogbWVzc2FnZS5hcmdzWzBdLCBwcmluY2lwYWw6IG1lc3NhZ2UuYXJnc1sxXSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YWxpZ25cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHlwZUFoZWFkSXNTaG93bigpIHtcbiAgICByZXR1cm4gdGhpcy5icFR5cGVBaGVhZCAmJiB0aGlzLmJwVHlwZUFoZWFkLmxlbmd0aCA+IDA7XG4gIH1cblxuICBzZWxlY3RGaXJzdEluTGlzdE9mU3VnZ2VzaW9ucygpIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAwO1xuICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5zZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRJbmRleCwgdGhpcy5zZWxlY3RlZEluZGV4IC0gMSk7XG4gIH1cblxuICBzZXRTZWFyY2hUZXh0KHZhbHVlKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gdmFsdWU7XG4gIH1cblxuICBzZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgaWYgKG5ld1ZhbCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG5ld1ZhbCAhPT0gLTEpIHtcbiAgICAgIGlmIChvbGRWYWwgPT09IC0xKSB7XG4gICAgICAgIHRoaXMubGFzdFNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hUZXh0O1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0KHRoaXMuc3VnZ2VzdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS5zdHJpbmcpO1xuICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFNlYXJjaFRleHQodGhpcy5sYXN0U2VhcmNoVmFsdWUpO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8c3BhbiAqbmdJZj1cImxhYmVsUmVzb3VyY2VLZXlcIj57eyBsYWJlbFJlc291cmNlS2V5IHwgdHJhbnNsYXRlfX08L3NwYW4+XG48ZGl2IGNsYXNzPVwiYnBhYWMtZHJvcGRvd25cIj5cbiAgICA8ZGl2IGNsYXNzPVwiYnBhYWMtc2VhcmNoLWJhclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnBhYWMtaW5wdXQtd2lkdGhcIj5cbiAgICAgICAgXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiAjbG9jYWxpdHlTZWFyY2hJbnB1dCBjbGFzcz1cImJwYWFjLWlucHV0XCIgXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIChrZXl1cCkgPSAoY2hlY2tLZXlVUCgkZXZlbnQpKVxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImNoZWNrS2V5RG93bigkZXZlbnQpXCIgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIiBnZXRUZXh0Q29sb3IoKSBcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIGlkPVwibG9jYWxpdHlJbnB1dEZpZWxkXCIgW2F0dHIucGxhY2Vob2xkZXJdPVwicGxhY2VIb2xkZXJUZXh0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiIChmb2N1cyk9XCJvbkZvY3VzKClcIiAoY2xpY2spPVwib25JbnB1dENsaWNrKClcIi8+XG4gICAgICAgICAgICA8ZGl2IGlkPVwiYnBhYWMtY2xlYXItbG9jYWxpdHktYnV0dG9uXCIgXG4gICAgICAgICAgICAgICAgICpuZ0lmPVwibWF5U2hvd0NsZWFyQnV0dG9uKClcIlxuICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dCh0cnVlKVwiIGNsYXNzPVwiYnBhYWMtY2xlYXJcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLTxkaXYgbmctdHJhbnNjbHVkZT48L2Rpdj4tLT5cbiAgICAgICAgPGlucHV0IGlkPVwiYnBhYWMtbG9jYWxpdHktdHlwZWFoZWFkXCIgdHlwZT1cInRleHRcIiBkaXNhYmxlZCBhdXRvY29tcGxldGU9XCJvZmZcIiBbKG5nTW9kZWwpXT1cImJwVHlwZUFoZWFkXCIgLz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IFtoaWRkZW5dPVwiY29sbGFwc2VEcm9wZG93blwiIGNsYXNzPVwiYnBhYWMtZHJvcGRvd24tbWVudS1jb250YWluZXJcIiAqbmdJZj1cInN1Z2dlc3Rpb25zICYmIHN1Z2dlc3Rpb25zLmxlbmd0aD4wXCI+XG4gICAgICAgIDxkaXYgI2xvY2FsaXR5TGlzdCBbYXBwVmlzaWJsZVN1Z2dlc3Rpb25dPVwidmlzaWJsZVN1Z2dlc3Rpb25Db3VudFwiIGlkPVwiYnBhYWMtbG9jYWxpdHktZHJvcGRvd25cIiBcbiAgICAgICAgICAgIGNsYXNzPVwiYnBhYWMtZHJvcGRvd24tbWVudVwiPlxuICAgICAgICAgICAgPHVsIHJvbGU9XCJsaXN0Ym94XCIgaWQ9XCJicGFhYy1sb2NhbGl0eS1zdWdnZXN0aW9uc0xpc3RcIiBjbGFzcz1cImxpc3QtdW5zdHlsZWRcIj5cbiAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm9wdGlvblwiIFxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHN1Z2dlc3Rpb25zOyBsZXQgaWR4ID0gaW5kZXhcIiBcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUnOihzZWxlY3RlZEluZGV4PT1pZHgpfVwiIChtb3VzZWRvd24pPVwiY2xpY2tTdWdnZXN0aW9uKCRldmVudCwgb3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInNlbGVjdGVkSW5kZXg9aWR4XCIgKG1vdXNlbGVhdmUpPVwic2VsZWN0ZWRJbmRleD0tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9wdGlvblwiIFtpbm5lckh0bWxdPVwib3B0aW9uLnN0cmluZyB8IGhpZ2hsaWdodFN1Z2dlc3Rpb24gOiB3b3JkTGlzdFwiPjwvc3Bhbj4gXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibWVzc2FnZU9wdGlvbiA9PT0gJ1AnICYmIG9wdGlvbi5tZXNzYWdlc1wiPiAoe3tvcHRpb24ubXVuaWNpcGFsaXR5TmFtZX19KTwvc3Bhbj48YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VPcHRpb24gPT09ICdZJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IG1lc3NhZ2Ugb2Ygb3B0aW9uLm1lc3NhZ2VzXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnBhYWMtc3VnZ2VzdGlvbi1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJtZXNzYWdlLnRyYW5zbGF0ZWRNZXNzYWdlXCI+PC9zcGFuPiBcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|
|
858
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpdHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC9zcmMvbGliL2xvY2FsaXR5L2xvY2FsaXR5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQvc3JjL2xpYi9sb2NhbGl0eS9sb2NhbGl0eS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUE2RSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0osT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUtsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7QUFPeEQsTUFBTSxPQUFPLGlCQUFpQjtJQTZFNUIsWUFDVSxjQUE4QixFQUM5QixhQUE0QixFQUM1QixnQkFBa0MsRUFDbEMsY0FBOEI7UUFIOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBNUV4QyxhQUFh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LGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csa0NBQWtDO3NCQUExQyxLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUVPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBVU4sVUFBVTtzQkFEVCxLQUFLO2dCQUVHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBRUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLHlCQUF5QjtzQkFBbEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgU2ltcGxlQ2hhbmdlcywgQWZ0ZXJWaWV3Q2hlY2tlZCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlIH0gZnJvbSAnLi4vZW51bS92YWxpZGF0aW9uLW1lc3NhZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IEFERFJFU1NMRVZFTCB9IGZyb20gJy4uL2VudW0vYWRkcmVzcy1sZXZlbC5lbnVtJztcbmltcG9ydCB7IFF1ZXJ5UGFyYW1ldGVycyB9IGZyb20gJy4uL21vZGVsL3F1ZXJ5LXBhcmFtZXRlcnMubW9kZWwnO1xuaW1wb3J0IHsgQWRkcmVzc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hZHJlc3Muc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVW5pY29kZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91bmljb2RlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRG9tSGFuZGxlciB9IGZyb20gJy4uL3V0aWxzL2RvbWhhbmRsZXInO1xuaW1wb3J0IHsgU291cmNlVHlwZSB9IGZyb20gJy4uL2VudW0vc291cmNlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBQcmVmaWxsRGF0YSB9IGZyb20gJy4uL3V0aWxzL3ByZWZpbGwtZGF0YSc7XG5pbXBvcnQgeyBQcmVmaWxsRXZlbnQgfSBmcm9tICcuLi91dGlscy9wcmVmbGxsLmV2ZW50JztcbmltcG9ydCB7IElucHV0TmFtZVR5cGUgfSBmcm9tICcuLi9lbnVtL2lucHV0LW5hbWUuZW51bSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JwLWxvY2FsaXR5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvY2FsaXR5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbG9jYWxpdHkuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBMb2NhbGl0eUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xuXG4gIEBWaWV3Q2hpbGQoJ2xvY2FsaXR5U2VhcmNoSW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgbG9jYWxpdHlTZWFyY2hJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbG9jYWxpdHlMaXN0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGxvY2FsaXR5TGlzdDogRWxlbWVudFJlZjtcblxuICAvLyAyMDIwLTA2LTE1XG4gIC8qICAgQElucHV0KClcbiAgICBvbkZvY3VzU2hvd1N1Z2dlc3Rpb25zQWZ0ZXJQcmVmaWxsID0gdHJ1ZTsgKi9cblxuICBASW5wdXQoKSBsYWJlbFJlc291cmNlS2V5ID0gJ2NvbW1vbi5sYWJlbC5wb3N0YWxDb2RlJztcbiAgQElucHV0KCkgbWVzc2FnZU9wdGlvbiA9ICdZJztcbiAgQElucHV0KCkgbWF4U3VnZ2VzaW9uQ291bnQgPSA1O1xuICBASW5wdXQoKSB2aXNpYmxlU3VnZ2VzdGlvbkNvdW50ID0gNTtcbiAgQElucHV0KCkgc29ydENyaXRlcmlhID0gJyc7XG4gIEBJbnB1dCgpIGJhc2VVcmw6IHN0cmluZztcbiAgQElucHV0KCkgaW5wdXRUZXh0OiBzdHJpbmc7XG4gIC8vIEBJbnB1dCgpIGFkZHJlc3NQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIEBJbnB1dCgpIHByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YTtcbiAgQElucHV0KCkgc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSA9IHRydWU7XG4gIEBJbnB1dCgpIGluY2x1ZGVMaXN0T2ZCb3hlczogYm9vbGVhbjtcbiAgQElucHV0KCkgaW5jbHVkZUxpc3RPZkJ1c2luZXNzTmFtZVdpdGhCb3hlczpib29sZWFuO1xuXG4gIEBJbnB1dCgpIG5pczlJblJlc3BvbnNlOiBib29sZWFuXG4gIEBJbnB1dCgpIGJ1c2luZXNzTmFtZUluUmVzcG9uc2U6IGJvb2xlYW5cbiAgLy8gQHRzLWlnbm9yZVxuICBASW5wdXQoKSBzZXQgaW5wdXRMYW5nKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2NhbGVTZXJ2aWNlLmNoYW5nZUxhbmcodmFsKTtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKHZhbCkuc3Vic2NyaWJlKFxuICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25DaGFuZ2VkTGFuZ3VhZ2UoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgQElucHV0KClcbiAgaXNSZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBhbGxvd05vVmFsaWRhdGlvbjogYm9vbGVhbjtcbiAgQElucHV0KCkgdmFsaWRhdGVkQnlCYWNrZW5kOiBib29sZWFuO1xuICBASW5wdXQoKSBudW1iZXJPZkV4Y2VwdGlvbnM6IG51bWJlcjtcblxuICBAT3V0cHV0KCkgbWVzc2FnZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjx7IG1lc3NhZ2VUeXBlOiBWYWxpZGF0aW9uTWVzc2FnZVR5cGUsIHRyYW5zbGF0ZWRNZXNzYWdlOiBzdHJpbmcgfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBhZGRyZXNzQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBmb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGJsdXJFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSB0ZXh0Q2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY2xlYXJJbnB1dEV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIHByZWZpbGxFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxQcmVmaWxsRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxQcmVmaWxsRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBudW1iZXJPZkV4Y2VwdGlvbnNFbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvLyBpbnN0YW5jZSBwcm9wZXJ0aWVzXG4gIGFkZHJlc3NJc1ZhbGlkYXRlZDogYm9vbGVhbjtcbiAgYnBUeXBlQWhlYWQ6IHN0cmluZztcbiAgY29sbGFwc2VEcm9wZG93bjogYm9vbGVhbjtcbiAgY29uc3VtZWROdW1iZXI6IG51bWJlcjtcbiAgZXJyb3JDb2RlOiBhbnk7XG4gIGxhc3RTZWFyY2hWYWx1ZTogc3RyaW5nO1xuICBtaW5MZXZlbDogYW55O1xuICBwbGFjZUhvbGRlclRleHQ6IHN0cmluZztcbiAgcHJldmlvdXNJbmRleDogbnVtYmVyO1xuICBzZWFyY2hUZXh0OiBzdHJpbmc9Jyc7XG4gIHNlbGVjdGVkSW5kZXg6IG51bWJlcjtcbiAgc2VsZWN0aW9uQ2hhbmdlZDogYm9vbGVhbjtcbiAgc2VxdWVuY2VOdW1iZXI6IG51bWJlcjtcbiAgc2tpcE5leHRCbHVyOiBib29sZWFuOyAvLyBPbkJsdXIgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHN1Z2dlc3Rpb24vdmFsaWRhdG9yIGJ1dHRvblxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgc3VnZ2VzdGlvbnM6IEFycmF5PGFueT47XG4gIHN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZTogc3RyaW5nO1xuICBzdWdnZXN0aW9uc1dvcmRMaXN0OiBhbnk7XG4gIHR5cGVBaGVhZFdvcmQ6IHN0cmluZztcbiAgdmFsaWRhdGlvbk1lc3NhZ2VDb2RlID0gbnVsbDtcbiAgdmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zID0gbnVsbDtcbiAgd29yZExpc3Q6IGFueTtcbiAgcHJlZmlsbFR5cGU6U291cmNlVHlwZSA7XG5cbiAgcHJlZmlsbGluZyA9IGZhbHNlO1xuICBpc1ByZWZpbGxXaXRoTm9NYXRjaCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWRkcmVzc1NlcnZpY2U6IEFkZHJlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYWxlU2VydmljZTogTG9jYWxlU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1bmljb2RlU2VydmljZTogVW5pY29kZVNlcnZpY2UsXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXh0O1xuICAgIC8vIGluc3RhbmNlIHByb3BlcnRpZXNcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gICAgdGhpcy5zdWdnZXN0aW9ucyA9IFtdO1xuICAgIHRoaXMucHJldmlvdXNJbmRleCA9IC0xO1xuICAgIHRoaXMubGFzdFNlYXJjaFZhbHVlID0gJyc7XG4gICAgdGhpcy53b3JkTGlzdCA9IFtdO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnNXb3JkTGlzdCA9IFtdO1xuICAgIHRoaXMuYnBUeXBlQWhlYWQgPSAnJztcbiAgICB0aGlzLnBsYWNlSG9sZGVyVGV4dCA9ICcnO1xuICAgIHRoaXMuc2tpcE5leHRCbHVyID0gZmFsc2U7IC8vIE9uQmx1ciBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgc3VnZ2VzdGlvbi92YWxpZGF0b3IgYnV0dG9uXG4gICAgdGhpcy5lcnJvckNvZGUgPSBudWxsO1xuICAgIC8vIHNjb3BlIHByb3BlcnRpZXNcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgICAvLyBwcm9wZXJ0aWVzXG4gICAgdGhpcy50eXBlQWhlYWRXb3JkID0gJyc7XG4gICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gZmFsc2U7XG4gICAgdGhpcy5zZXF1ZW5jZU51bWJlciA9IDA7XG4gICAgdGhpcy5jb25zdW1lZE51bWJlciA9IDA7XG4gICAgLy8gaW5pdGlhbGl6YXRpb25cbiAgICB0aGlzLnNldFNlYXJjaFRleHQoJycpO1xuICAgIHRoaXMub25DaGFuZ2VkTGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25DaGFuZ2VkKSB7XG4gICAgICBjb25zdCBvdmVybGF5OiBIVE1MRGl2RWxlbWVudCA9IHRoaXMubG9jYWxpdHlMaXN0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgbGlzdEl0ZW0gPSBEb21IYW5kbGVyLmZpbmRTaW5nbGUob3ZlcmxheSwgJ2xpLmFjdGl2ZScpO1xuICAgICAgICBpZiAobGlzdEl0ZW0pIHtcbiAgICAgICAgICBEb21IYW5kbGVyLnNjcm9sbEluVmlldyhvdmVybGF5LCBsaXN0SXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuXG4gICAgXG4gICAgaWYgKGNoYW5nZXMpIHtcblxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3ByZWZpbGxEYXRhJykgJiYgIWNoYW5nZXMucHJlZmlsbERhdGEuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcmVmaWxsaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdGhpcy5sb2FkUGFyYW1zKGNoYW5nZXMucHJlZmlsbERhdGEuY3VycmVudFZhbHVlKTtcblxuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsb2NhbGl0eTo6bmdPbkNoYW5nZXMgLSBsb2FkUGFyYW1lIHJlc3VsdDonLCB0aGlzLnNlYXJjaFRleHQpOyB9XG4gICAgICAgIHRoaXMuYnBUeXBlQWhlYWQgPSAnJztcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCAhPT0gJycgJiYgdGhpcy5taW5MZXZlbCA9PT0gQUREUkVTU0xFVkVMLkxPQ0FMSVRZKSB7XG4gICAgICAgICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlOYW1lXG4gICAgICAgICAgICA9IHRoaXMudHJhbnNmb3JtTXVuaWNpcGFsaXR5SW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcyh0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSk7XG4gICAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKC8qJ3ByZWZpbGxlZCcqLyBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnaW5wdXRUZXh0JykgJiYgIWNoYW5nZXMuaW5wdXRUZXh0LmZpcnN0Q2hhbmdlKSB7XG4gICAgICBcbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLm5vdEVxdWFsSWdub3JlQ2FzZSh0aGlzLnNlYXJjaFRleHQsIGNoYW5nZXMuaW5wdXRUZXh0LmN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gY2hhbmdlcy5pbnB1dFRleHQuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvKlxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2Jhc2VVcmwnKSAmJiAhY2hhbmdlcy5iYXNlVXJsLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGVkQWRkcmVzcygpO1xuICAgICAgfVxuICAgICAgKi9cblxuICAgICAgLy8gaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3ZhbGlkYXRlZEJ5QmFja2VuZCcpICYmIGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3ByZWZpbGxEYXRhJykpIHtcbiAgICAgIC8vICAgdGhpcy5vbklucHV0Q2hhbmdlKFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRClcbiAgICAgIC8vIH1cblxuICAgIH1cbiAgfVxuXG4gIHRyYW5zZm9ybU11bmljaXBhbGl0eUluTG93ZXJjYXNlQW5kV2l0aG91dERpYWNyaXRpY3MobXVuaWNpcGFsaXR5TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcgPSBudWxsO1xuICAgIGlmIChtdW5pY2lwYWxpdHlOYW1lICE9PSBudWxsICYmIG11bmljaXBhbGl0eU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzdWx0ID0gdGhpcy51bmljb2RlU2VydmljZS5yZW1vdmVEaWFjcml0aWNzKG11bmljaXBhbGl0eU5hbWUpO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ3ByZWZpbGwgbXVuaWNpcGFsaXR5JywgcmVzdWx0KTsgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgYnVpbGRJbnB1dFdvcmRMaXN0KCkge1xuICAgIHRoaXMud29yZExpc3QgPSB0aGlzLnNlYXJjaFRleHQuc3BsaXQoL1tcXHMsIF0rLyk7XG4gICAgLy8gY29uc29sZS5sb2coJ0xpYkF1dG9jb21wbGV0ZUxvY2FsaXR5Q29tcG9uZW50OjpidWlsZElucHV0V29yZExpc3QnLCB0aGlzLndvcmRMaXN0KTtcbiAgICBpZiAodGhpcy5zdWdnZXN0aW9ucyAmJiB0aGlzLndvcmRMaXN0KSB7XG4gICAgICBmb3IgKGNvbnN0IHN1ZyBvZiB0aGlzLnN1Z2dlc3Rpb25zKSB7XG4gICAgICAgIGlmICghc3VnIHx8ICFzdWcuaGFzT3duUHJvcGVydHkoJ3N0cmluZycpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB3IG9mIHRoaXMud29yZExpc3QpIHtcbiAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuc3RhcnRzV2l0aElnbm9yZURpYWNyaXRpY3Moc3VnLnN0cmluZyBhcyBzdHJpbmcsIHcgYXMgc3RyaW5nKTtcbiAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgICAgICAgY29uc3Qgd3cgPSBzdWcuc3RyaW5nLnN1YnN0cihzdGFydCwgdy5sZW5ndGgpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2FkZGluZyB3b3JkOicgKyB3dyk7XG4gICAgICAgICAgICAvLyB3dyBpcyBhIGNhbmRpZGF0ZSB0byBiZSBhZGRlZCB0byB0aGUgd29yZGxpc3QgaWYgbm90IGFscmVhZHkgcHJlc2VudCBpbiBpdFxuICAgICAgICAgICAgY29uc3QgcHJlc2VudCA9IHRoaXMud29yZExpc3QuZmluZCgodzE6IHN0cmluZykgPT4gdzEudG9Mb3dlckNhc2UoKSA9PT0gd3cudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICBpZiAocHJlc2VudCA9PT0gbnVsbCB8fCBwcmVzZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy53b3JkTGlzdC5wdXNoKHd3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdHJpbmdTdGFydHNXaXRoSWdub3JlRGlhY3JpdGljcyh2YWx1ZSwgcHJlZml4KSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbiAgICBjb25zdCBfdmFsdWUgPSB0aGlzLnVuaWNvZGVTZXJ2aWNlLnJlbW92ZURpYWNyaXRpY3MoKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICAgIGNvbnN0IF9wcmVmaXggPSB0aGlzLnVuaWNvZGVTZXJ2aWNlLnJlbW92ZURpYWNyaXRpY3MoKHByZWZpeCAhPT0gbnVsbCAmJiBwcmVmaXggIT09IHVuZGVmaW5lZCkgPyBwcmVmaXgudG9Mb3dlckNhc2UoKSA6IHByZWZpeCk7XG4gICAgY29uc3Qgc3RhcnQgPSBfdmFsdWUuc2xpY2UoMCwgX3ByZWZpeC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihfcHJlZml4KSAhPT0gLTE7XG4gICAgcmV0dXJuIHN0YXJ0O1xuICB9XG5cbiAgYnVpbGRUeXBlQWhlYWQoc291cmNlOiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICghdGhpcy5tYXlBZGRUeXBlQWhlYWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWFyY2hUZXh0V29yZHMgPSB0aGlzLnNlYXJjaFRleHQuc3BsaXQoL1tcXHMsIF0rLyk7XG4gICAgY29uc3QgbGFzdFdvcmQgPSBzZWFyY2hUZXh0V29yZHNbc2VhcmNoVGV4dFdvcmRzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMuc29tZShmdW5jdGlvbiAoc3VnKSB7XG4gICAgICBpZiAoIXN1ZyB8fCAhc3VnLmhhc093blByb3BlcnR5KCdzdHJpbmcnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VnLnN0cmluZy5zcGxpdCgvW1xccy1dKy8pLnNvbWUoZnVuY3Rpb24gKHdvcmQpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RyaW5nU3RhcnRzV2l0aElnbm9yZURpYWNyaXRpY3Mod29yZCwgbGFzdFdvcmQpKSB7XG4gICAgICAgICAgdGhpcy50eXBlQWhlYWRXb3JkID0gd29yZDtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICB9LmJpbmQodGhpcykpKSB7XG4gICAgICBjb25zdCBhcHBlbmRpeCA9IHRoaXMudHlwZUFoZWFkV29yZC5zbGljZShsYXN0V29yZC5sZW5ndGgsIHRoaXMudHlwZUFoZWFkV29yZC5sZW5ndGgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB0aGlzLmJwVHlwZUFoZWFkID0gdGhpcy5zZWFyY2hUZXh0ICsgYXBwZW5kaXg7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCkge1xuICAgIGlmICh0aGlzLmVycm9yQ29kZSkge1xuICAgICAgLypcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQodGhpcy5lcnJvckNvZGUvICosIHt2YWx1ZTogJ3dvcmxkJ30qIC8pLnN1YnNjcmliZSgocmVzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICAgIC8vID0+ICdoZWxsbyB3b3JsZCdcbiAgICAgICAgICBpZiAodGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UgPT09IHJlcyApIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgICovXG5cbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuZXJyb3JDb2RlKTtcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSA9PT0gcmVzKSB7XG4gICAgICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICAgIH1cbiAgICAgIC8qXG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UgPT09IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSh0aGlzLmVycm9yQ29kZSkpIHtcbiAgICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgICAgfVxuICAgICAgKi9cbiAgICAgIHRoaXMuZXJyb3JDb2RlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBjbGVhclR5cGVBaGVhZCgpIHtcbiAgICB0aGlzLmJwVHlwZUFoZWFkID0gJyc7XG4gIH1cblxuICBlbWl0VHJhbnNsYXRlZFZhbGlkYXRpb25NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlVHlwZTogVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLCBvcHRpb25zPzogc3RyaW5nW10pIHtcbiAgICAvLyBNb21lbnRseSwgb3B0aW9ucyBhcmUgTk9UIHVzZWQ7IHNvIGRhdGEgdHlwZSBvZiB0aGVzZSBvcHRpb25zIHdpbGwgYmUgcmV2aWV3ZWQgb25jZSBuZWVkZWQuXG4gICAgaWYgKHZhbGlkYXRpb25NZXNzYWdlVHlwZSA9PT0gbnVsbCB8fCB2YWxpZGF0aW9uTWVzc2FnZVR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gZW1pdCB2YWxpZGF0aW9uIG1lc3NhZ2UgLSBtZXNzYWdlIGtleSBpcyBpbnZhbGlkIScsIHZhbGlkYXRpb25NZXNzYWdlVHlwZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoICh2YWxpZGF0aW9uTWVzc2FnZVR5cGUpIHtcblxuICAgICAgY2FzZSBWYWxpZGF0aW9uTWVzc2FnZVR5cGUuQWRkcmVzc19Ob3RfRm91bmQ6XG4gICAgICBjYXNlIFZhbGlkYXRpb25NZXNzYWdlVHlwZS5BZGRyZXNzX1ZhbGlkYXRlZDpcbiAgICAgIGNhc2UgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLlNlcnZpY2VfVW5hdmFpbGFibGU6IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdjb21tb24ubWVzc2FnZS4nICsgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlKTtcbiAgICAgICAgLy8gdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQoeyBtZXNzYWdlVHlwZTogdmFsaWRhdGlvbk1lc3NhZ2VUeXBlLCB0cmFuc2xhdGVkTWVzc2FnZTogbWVzc2FnZSB9KTtcbiAgICAgIH1cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmFsaWduXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byBlbWl0IHZhbGlkYXRpb24gbWVzc2FnZSAtIG1lc3NhZ2Uga2V5IE5PVCBzdXBwb3J0ZWQhJywgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlKTtcbiAgICAgIH1cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmFsaWduXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICB9XG5cbiAgZ2VuZXJhdGVQYXJhbWV0ZXJzKCk6IFF1ZXJ5UGFyYW1ldGVycyB7XG4gICAgY29uc3QgcGFyYW0gPSBuZXcgUXVlcnlQYXJhbWV0ZXJzKHtcbiAgICAgIGlkOiB0aGlzLnNlcXVlbmNlTnVtYmVyLFxuICAgICAgcTogdGhpcy5zZWFyY2hUZXh0LFxuICAgICAgbWF4TnVtYmVyT2ZTdWdnZXN0aW9uczogdGhpcy5tYXhTdWdnZXNpb25Db3VudFxuICAgIH0pO1xuXG4gICAgc3dpdGNoICh0aGlzLnNvcnRDcml0ZXJpYSkge1xuICAgICAgY2FzZSAnUCc6XG4gICAgICAgIHBhcmFtLnNvcnRCeVBvc3RhbENvZGUodHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdMJzpcbiAgICAgICAgcGFyYW0uc29ydEJ5TG9jYWxpdHluYW1lKHRydWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXHRcblx0aWYodGhpcy5pbmNsdWRlTGlzdE9mQm94ZXMpe1xuICAgICAgcGFyYW0uc2V0SW5jbHVkZUxpc3RPZkJveGVzKHRydWUpO1xuICAgIH1cblx0aWYodGhpcy5uaXM5SW5SZXNwb25zZSl7XG4gICAgICBwYXJhbS5zZXRJbmNsdWRlTmlzQ29kZSh0cnVlKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmJ1c2luZXNzTmFtZUluUmVzcG9uc2Upe1xuICAgICAgcGFyYW0uc2V0SW5jbHVkZUJ1c2luZXNzTmFtZSh0cnVlKTtcbiAgICB9XG4gICAgaWYodGhpcy5pbmNsdWRlTGlzdE9mQnVzaW5lc3NOYW1lV2l0aEJveGVzKXtcbiAgICAgIHBhcmFtLnNldEluY2x1ZGVMaXN0T2ZCdXNpbmVzc05hbWVXaXRoQm94ZXModHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbTtcbiAgfVxuXG4gIGdldFRvcFN1Z2dlc3Rpb25zKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICB0aGlzLnNlcXVlbmNlTnVtYmVyICs9IDE7XG4gICAgY29uc3QgcGFyYW0gPSB0aGlzLmdlbmVyYXRlUGFyYW1ldGVycygpO1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ0xPQ0FMSVRZIGNhbGxpbmcgc2VydmljZSBwYXJhbXMnLCBwYXJhbSk7IH1cbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuYWRkcmVzc1NlcnZpY2UuZ2V0TG9jYWxpdHkodGhpcy5iYXNlVXJsLCBwYXJhbSkuc3Vic2NyaWJlKFxuICAgICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbG9jYWxpdHkgc3VnZ2VzdGlvbnMgcmVjZWl2ZWQ6JywgcmVzcG9uc2UpOyB9XG4gICAgICAgICAgdGhpcy5oYW5kbGVHZXRMb2NhbGl0eVJlc3BvbnNlKHJlc3BvbnNlLCBzb3VyY2UpO1xuICAgICAgICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCkge1xuICAgICAgICAgICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgdGhpcy5wcmVmaWxsQW5hbHl6ZURhdGEoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzUHJlZmlsbFdpdGhOb01hdGNoID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICxcbiAgICAgICAgKCkgPT4gdGhpcy5oYW5kbGVHZXRMb2NhbGl0eUVycm9yKHNvdXJjZSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGV4dENvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmlzUHJlZmlsbFdpdGhOb01hdGNoID09PSB0cnVlKSA/ICdvcmFuZ2VyZWQnIDogJyc7XG4gIH1cblxuICBoYW5kbGVHZXRMb2NhbGl0eVJlc3BvbnNlKGRhdGE6IGFueSwgc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdoYW5kbGVHZXRMb2NhbGl0eVJlc3BvbnNlJywgZGF0YSk7XG4gICAgfVxuICAgIGlmIChkYXRhICYmIGRhdGEucmVzcG9uc2UgJiYgZGF0YS5yZXNwb25zZS5zZXF1ZW5jZU51bWJlciAmJiBkYXRhLnJlc3BvbnNlLnNlcXVlbmNlTnVtYmVyID49IHRoaXMuY29uc3VtZWROdW1iZXIgJiZcbiAgICAgIGRhdGEucmVzcG9uc2UudG9wU3VnZ2VzdGlvbnMpIHtcbiAgICAgIHRoaXMuY29uc3VtZWROdW1iZXIgPSBkYXRhLnJlc3BvbnNlLnNlcXVlbmNlTnVtYmVyO1xuICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgICB0aGlzLnBhcnNlVG9wU3VnZ2VzdGlvbnMoZGF0YS5yZXNwb25zZS50b3BTdWdnZXN0aW9ucywgc291cmNlKTtcbiAgICAgIHRoaXMuYnVpbGRUeXBlQWhlYWQoc291cmNlKTtcbiAgICAgIHRoaXMuY2xlYXJDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgICB0aGlzLmJ1aWxkSW5wdXRXb3JkTGlzdCgpO1xuICAgIH1cbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSAodGhpcy5wcmVmaWxsaW5nID09PSB0cnVlICYmIHRoaXMucHJlZmlsbERhdGEgIT09IG51bGwpXG4gICAgICA/ICF0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMub25Gb2N1c1Nob3dTdWdnZXN0aW9uc0FmdGVyUHJlZmlsbCA6IGZhbHNlO1xuICB9XG5cbiAgaGFuZGxlR2V0TG9jYWxpdHlFcnJvcihzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dOb1ZhbGlkYXRpb24gJiYgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQpIHtcbiAgICAgIHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zICs9IDE7XG4gICAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9uc0VtaXR0ZXIuZW1pdCh0aGlzLm51bWJlck9mRXhjZXB0aW9ucyk7XG4gICAgICB0aGlzLnNldENvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKTtcbiAgICB9XG4gICAgaWYodGhpcy5hbGxvd05vVmFsaWRhdGlvbiAmJiB0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCAmJiBzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCl7XG5cbiAgICAgIHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zKz0xO1xuICAgICAgdGhpcy5udW1iZXJPZkV4Y2VwdGlvbnNFbWl0dGVyLmVtaXQodGhpcy5udW1iZXJPZkV4Y2VwdGlvbnMpO1xuICAgICAgdGhpcy5zZXRDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgICB0aGlzLm9uSW5wdXRDaGFuZ2Uoc291cmNlKTtcbiAgICB9XG4gICAgaWYodGhpcy5hbGxvd05vVmFsaWRhdGlvbiAmJiAhdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQgJiYgc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQgIClcbiAgICB7XG4gICAgICB0aGlzLm9uSW5wdXRDaGFuZ2Uoc291cmNlKTtcbiAgICB9XG4gICAgaWYoIXRoaXMuYWxsb3dOb1ZhbGlkYXRpb24gJiYgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQpXG4gICAge1xuICAgICAgdGhpcy5zZXRDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgfVxuICAgIC8vIHRoaXMuc2V0Q29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuXG4gIH1cblxuICBpc0Jyb3dzZXJJRSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL21zaWVcXHN8dHJpZGVudFxcL3xlZGdlXFwvL2kudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gIH1cblxuICBpc0Ryb3Bkb3duQ2xpY2tlZChldikge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2LmV4cGxpY2l0T3JpZ2luYWxUYXJnZXQgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICByZXR1cm4gKHRhcmdldC5pZCA9PT0gJ2JwYWFjLWxvY2FsaXR5LWRyb3Bkb3duJyk7XG4gIH1cblxuICBpc1N0cmluZyh2YWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsLmNvbnN0cnVjdG9yID09PSBTdHJpbmc7XG4gIH1cblxuICBsb2FkUGFyYW1zKHByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSkge1xuICAgIC8vIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICBsZXQgY29uY2F0U3RyID0gJyc7XG4gICAgaWYgKHByZWZpbGxEYXRhICE9PSBudWxsICYmIHByZWZpbGxEYXRhLnBhcmFtZXRlcnMgIT09IG51bGwpIHtcbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdtaW5MZXZlbCcpKSB7XG4gICAgICAgIHRoaXMubWluTGV2ZWwgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm1pbkxldmVsO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ3Vuc3RydWN0dXJlZEFkZHJlc3MnKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMudW5zdHJ1Y3R1cmVkQWRkcmVzcykpIHtcbiAgICAgICAgY29uY2F0U3RyID0gcHJlZmlsbERhdGEucGFyYW1ldGVycy51bnN0cnVjdHVyZWRBZGRyZXNzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ3Bvc3RhbENvZGUnKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSkpIHtcbiAgICAgICAgICBjb25jYXRTdHIgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ211bmljaXBhbGl0eU5hbWUnKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSkpIHtcbiAgICAgICAgICBjb25jYXRTdHIgKz0gJyAnICsgcHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICBpZiAocHJlZmlsbERhdGEucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eSgncG9zdGFsQ29kZScpICYmIHRoaXMuaXNTdHJpbmcocHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlKSkge1xuICAgICAgICBjb25jYXRTdHIgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGU7XG4gICAgICB9XG4gICAgICBpZiAocHJlZmlsbERhdGEucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eSgnbXVuaWNpcGFsaXR5TmFtZScpICYmIHRoaXMuaXNTdHJpbmcocHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lKSkge1xuICAgICAgICBjb25jYXRTdHIgKz0gJyAnICsgcHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb25jYXRTdHI7XG4gIH1cblxuICBtYXlTaG93Q2xlYXJCdXR0b24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoVGV4dC5sZW5ndGggPiAwO1xuICB9XG5cbiAgbWF5QWRkVHlwZUFoZWFkKCkge1xuICAgIGlmICh0aGlzLnNlYXJjaFRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoL1teXFxzLCBcXFxcXFwvXSQvKS50ZXN0KHRoaXMuc2VhcmNoVGV4dCk7XG4gIH1cblxuICBub3RFcXVhbElnbm9yZUNhc2Uob2xkVmFsOiBzdHJpbmcsIG5ld1ZhbDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG9sZFZhbC50b0xvd2VyQ2FzZSgpICE9PSBuZXdWYWwudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIG9uQmx1cihldikge1xuICAgIGlmICh0aGlzLmlzQnJvd3NlcklFKCkgJiYgdGhpcy5pc0Ryb3Bkb3duQ2xpY2tlZChldikpIHtcbiAgICAgIHRoaXMubG9jYWxpdHlTZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNraXBOZXh0Qmx1cikge1xuICAgICAgdGhpcy5za2lwTmV4dEJsdXIgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gdHJ1ZTtcbiAgICAgIHRoaXMuYmx1ckV2ZW50LmVtaXQoQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICB9XG4gIH1cblxuICBvbkZvY3VzKCkge1xuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IGZhbHNlO1xuICAgIC8vIHRoaXMuY29sbGFwc2VEcm9wZG93biA9ICh0aGlzLnByZWZpbGxpbmcgPT09IHRydWUgJiYgdGhpcy5wcmVmaWxsRGF0YSAhPT0gbnVsbClcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICA/ICF0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMub25Gb2N1c1Nob3dTdWdnZXN0aW9uc0FmdGVyUHJlZmlsbCA6IGZhbHNlO1xuICAgIC8vIHRoaXMucHJlZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuc2tpcE5leHRCbHVyID0gZmFsc2U7XG4gICAgdGhpcy5mb2N1c0V2ZW50LmVtaXQoQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgfVxuXG4gIG9uSW5wdXRDbGljaygpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsb2NhbGl0eSBjbGljaycpOyB9XG5cbiAgfVxuXG4gIG9uSW5wdXRDaGFuZ2Uoc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IGZhbHNlO1xuICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgdGhpcy5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgIH1cbiAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCA9PT0gJycpIHtcbiAgICAgIHRoaXMuc2VxdWVuY2VOdW1iZXIgKz0gMTtcbiAgICAgIHRoaXMuY29uc3VtZWROdW1iZXIgPSB0aGlzLnNlcXVlbmNlTnVtYmVyO1xuICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQpIHtcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKSB7XG4gICAgICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlBbmRMb2NhbGl0eVBlcmZlY3RNYXRjaEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBtdW5pY2lwYWxpdHlOYW1lID0gdGhpcy5zZWFyY2hUZXh0LnJlcGxhY2UoL1xcZCsvZywgJycpLnRyaW0oKTtcbiAgICAgICAgICBjb25zdCBwb3N0YWxDb2RlID0gdGhpcy5zZWFyY2hUZXh0Lm1hdGNoKC9cXGQrL2cpPy5qb2luKFwiXCIpO1xuICAgICAgICAgIGxldCBzdWdnZXN0aW9uID0ge1xuICAgICAgICAgICdhZGRyZXNzJzp7XG4gICAgICAgICAgICAnc3RyaW5nJzogdGhpcy5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgJ211bmljaXBhbGl0eU5hbWUnOiBtdW5pY2lwYWxpdHlOYW1lID8gbXVuaWNpcGFsaXR5TmFtZS50b1VwcGVyQ2FzZSgpIDogJycsXG4gICAgICAgICAgICAnbG9jYWxpdHlOYW1lJzogbXVuaWNpcGFsaXR5TmFtZSxcbiAgICAgICAgICAgICdwb3N0YWxDb2RlJzogcG9zdGFsQ29kZSxcbiAgICAgICAgICAgICdzZWFyY2hCYXJTdHJpbmcnOiB0aGlzLnNlYXJjaFRleHRcbiAgICAgICAgICB9fVxuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uID0gc3VnZ2VzdGlvbjtcbiAgICAgICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICB0aGlzLnByZWZpbGxBbmFseXplRGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuY2xlYXJUeXBlQWhlYWQoKTtcbiAgICAgICAgICB0aGlzLnJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCk7XG4gICAgICAgICAgY29uc3QgbXVuaWNpcGFsaXR5TmFtZSA9IHRoaXMuc2VhcmNoVGV4dC5yZXBsYWNlKC9cXGQrL2csICcnKS50cmltKCk7XG4gICAgICAgICAgY29uc3QgcG9zdGFsQ29kZSA9IHRoaXMuc2VhcmNoVGV4dC5tYXRjaCgvXFxkKy9nKT8uam9pbihcIlwiKTtcbiAgICAgICAgICBsZXQgc3VnZ2VzdGlvbiA9IHtcbiAgICAgICAgICAgICdzdHJpbmcnOiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAnbXVuaWNpcGFsaXR5TmFtZSc6IG11bmljaXBhbGl0eU5hbWUgPyBtdW5pY2lwYWxpdHlOYW1lLnRvVXBwZXJDYXNlKCkgOiAnJyxcbiAgICAgICAgICAgICdsb2NhbGl0eU5hbWUnOiBtdW5pY2lwYWxpdHlOYW1lLFxuICAgICAgICAgICAgJ3Bvc3RhbENvZGUnOiBwb3N0YWxDb2RlLFxuICAgICAgICAgICAgJ3NlYXJjaEJhclN0cmluZyc6IHRoaXMuc2VhcmNoVGV4dFxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5nZXRUb3BTdWdnZXN0aW9ucyhzb3VyY2UpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZygnTGliQXV0b2NvbXBsZXRlTG9jYWxpdHlDb21wb25lbnQ6Om9uSW5wdXRDaGFuZ2UgLSBiZWZvcmUnLCB0aGlzLndvcmRMaXN0KTtcbiAgICB0aGlzLmJ1aWxkSW5wdXRXb3JkTGlzdCgpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdMaWJBdXRvY29tcGxldGVMb2NhbGl0eUNvbXBvbmVudDo6b25JbnB1dENoYW5nZSAtIGFmdGVyJywgdGhpcy53b3JkTGlzdCk7XG4gIH1cblxuICBwYXJzZVNpbmdsZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbjogYW55LCBzb3VyY2U6IFNvdXJjZVR5cGUpIHtcbiAgICBsZXQgc3VnZ2VzdGlvblRvQWRkOiBhbnk7XG4gICAgaWYgKHRoaXMubG9jYWxlU2VydmljZS5pc0xvY2FsZUZyZW5jaCgpICYmIHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2ZyZW5jaCcpKSB7XG4gICAgICBzdWdnZXN0aW9uVG9BZGQgPSBzdWdnZXN0aW9uLmZyZW5jaDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubG9jYWxlU2VydmljZS5pc0xvY2FsZUR1dGNoKCkgJiYgc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZHV0Y2gnKSkge1xuICAgICAgc3VnZ2VzdGlvblRvQWRkID0gc3VnZ2VzdGlvbi5kdXRjaDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubG9jYWxlU2VydmljZS5pc0xvY2FsZUdlcm1hbigpICYmIHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2dlcm1hbicpKSB7XG4gICAgICBzdWdnZXN0aW9uVG9BZGQgPSBzdWdnZXN0aW9uLmdlcm1hbjtcbiAgICB9IGVsc2UgaWYgKHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2FkZHJlc3MnKSkge1xuICAgICAgc3VnZ2VzdGlvblRvQWRkID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgIH1cbiAgICBpZiAoc3VnZ2VzdGlvblRvQWRkKSB7XG4gICAgICBpZiAoc3VnZ2VzdGlvbi5tZXNzYWdlcykge1xuICAgICAgICBzdWdnZXN0aW9uVG9BZGQubWVzc2FnZXMgPSBzdWdnZXN0aW9uLm1lc3NhZ2VzO1xuICAgICAgfVxuICAgICAgdGhpcy5zdWdnZXN0aW9ucy5wdXNoKHN1Z2dlc3Rpb25Ub0FkZCk7XG4gICAgICBpZiAodGhpcy5tZXNzYWdlT3B0aW9uID09PSAnWScgJiYgc3VnZ2VzdGlvblRvQWRkLmhhc093blByb3BlcnR5KCdtZXNzYWdlcycpKSB7XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiBzdWdnZXN0aW9uVG9BZGQubWVzc2FnZXMpIHtcbiAgICAgICAgICBjb25zdCB0cmFuc2xhdGVkTWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlTWVzc2FnZShtKTtcbiAgICAgICAgICBpZiAodHJhbnNsYXRlZE1lc3NhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG0udHJhbnNsYXRlZE1lc3NhZ2UgPSB0cmFuc2xhdGVkTWVzc2FnZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCkge1xuICAgICAgICBzdWdnZXN0aW9uLmFkZHJlc3MgPSBzdWdnZXN0aW9uVG9BZGQ7XG4gICAgICAgIHRoaXMucHJlZmlsbENoZWNrRm9yUGVyZmVjdE1hdGNoKHN1Z2dlc3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByZWZpbGxDaGVja0ZvclBlcmZlY3RNYXRjaChzdWdnZXN0aW9uKSB7XG4gICAgY29uc3Qgc3VnQWRkcmVzcyA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICBpZiAoIC8qISB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hGb3VuZCAmJiovIHN1Z0FkZHJlc3MucG9zdGFsQ29kZSA9PT0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUpIHtcbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0xPQ0FMSVRZIC0gUFJFRklMTCAtIGNoZWNraW5nIHN1Z2dlc3Rpb24gZm9yIHBlcmZlY3QgbWF0Y2gnLCB0aGlzLnByZWZpbGxEYXRhLCBzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25Mb2NhbGl0eSA9IHRoaXMudHJhbnNmb3JtTXVuaWNpcGFsaXR5SW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcyhzdWdBZGRyZXNzLmxvY2FsaXR5TmFtZSk7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uTXVuaWNpcGFsaXR5ID0gdGhpcy50cmFuc2Zvcm1NdW5pY2lwYWxpdHlJbkxvd2VyY2FzZUFuZFdpdGhvdXREaWFjcml0aWNzKHN1Z0FkZHJlc3MubXVuaWNpcGFsaXR5TmFtZSk7XG4gICAgICBpZiAoc3VnZ2VzdGlvbkxvY2FsaXR5LnN0YXJ0c1dpdGgodGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5TmFtZSlcbiAgICAgICAgfHwgc3VnZ2VzdGlvbk11bmljaXBhbGl0eS5zdGFydHNXaXRoKHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eU5hbWUpKSB7XG4gICAgICAgIGlmICh0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlBbmRMb2NhbGl0eVBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnTE9DQUxJVFkgLSBQUkVGSUxMIC0gc2tpcHBpbmcgc3VnZ2VzdGlvbjonLCBzdWdnZXN0aW9uKTsgfVxuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdMT0NBTElUWSAtIFBSRUZJTEwgLSBrZWVwaW5nIHN1Z2dlc3Rpb246JyxcbiAgICAgICAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb247XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHN1Z0FkZHJlc3MucG9zdGFsQ29kZSArICcgJyArIHN1Z0FkZHJlc3MubG9jYWxpdHlOYW1lO1xuXG4gICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5QW5kTG9jYWxpdHlQZXJmZWN0TWF0Y2hGb3VuZCA9IChzdWdnZXN0aW9uTG9jYWxpdHkuc3RhcnRzV2l0aCh0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlOYW1lKVxuICAgICAgICAgICYmIHN1Z2dlc3Rpb25NdW5pY2lwYWxpdHkuc3RhcnRzV2l0aCh0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlOYW1lKSkgPyB0cnVlIDogZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eUFuZExvY2FsaXR5UGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUpIHtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdMT0NBTElUWSAtIFBSRUZJTEwgLSBQZXJmZWN0IG1hdGNoIC0gTXVuaWNpcGFsaXR5ICYgbG9jYXRpb246Jywgc3VnZ2VzdGlvbik7IH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdMT0NBTElUWSAtIFBSRUZJTEwgLSBOTyBQZXJmZWN0IG1hdGNoOicsIHN1Z2dlc3Rpb24pOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcmVmaWxsQW5hbHl6ZURhdGEoKSB7XG5cbiAgICBpZiAodGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5UGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgfSAgICBcbiAgICB0aGlzLnByZWZpbGxFdmVudEVtaXR0ZXIuZW1pdCgvKnRoaXMucHJlZmlsbERhdGEqLyBuZXcgUHJlZmlsbEV2ZW50KEFERFJFU1NMRVZFTC5MT0NBTElUWSwgdGhpcy5wcmVmaWxsRGF0YSkpOyAgICBcbiAgfVxuXG5cblxuICBwYXJzZVRvcFN1Z2dlc3Rpb25zKHRvcFN1Z2dlc3Rpb25zLCBzb3VyY2U6IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsb2NhbGl0eSAtIHBhcnNlIHN1Z2dlc3Rpb25zJywgdG9wU3VnZ2VzdGlvbnMpOyB9XG4gICAgaWYgKHRvcFN1Z2dlc3Rpb25zLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgLy8gdG9wU3VnZ2VzdGlvbnMuZm9yRWFjaCh0aGlzLnBhcnNlU2luZ2xlU3VnZ2VzdGlvbi5iaW5kKHRoaXMpKTtcbiAgICAgIGZvciAoY29uc3Qgc3VnIG9mIHRvcFN1Z2dlc3Rpb25zKSB7XG4gICAgICAgIHRoaXMucGFyc2VTaW5nbGVTdWdnZXN0aW9uKHN1Zywgc291cmNlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXJzZVNpbmdsZVN1Z2dlc3Rpb24odG9wU3VnZ2VzdGlvbnMsIHNvdXJjZSk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XG4gIH1cblxuICBzdGFydHNXaXRoSWdub3JlRGlhY3JpdGljcyh2YWx1ZTogc3RyaW5nLCBwcmVmaXg6IHN0cmluZyk6IG51bWJlciB7XG4gICAgLy8gY29uc29sZS5sb2coJ1NlYXJjaGluZyBmb3IgcHJlZml4IFwiJyArIHByZWZpeCArICdcIiBpbnNpZGUgc3VnZ2VzdGlvbjogJyArIHZhbHVlKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMudW5pY29kZVNlcnZpY2UucmVtb3ZlRGlhY3JpdGljcygodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWUpO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gICAgY29uc3QgX3ByZWZpeCA9IHRoaXMudW5pY29kZVNlcnZpY2UucmVtb3ZlRGlhY3JpdGljcygocHJlZml4ICE9PSBudWxsICYmIHByZWZpeCAhPT0gdW5kZWZpbmVkKSA/IHByZWZpeC50b0xvd2VyQ2FzZSgpIDogcHJlZml4KTtcbiAgICBjb25zdCBzdGFydCA9IF92YWx1ZS5pbmRleE9mKF9wcmVmaXgpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzdGFydHNXaXRoSWdub3JlRGlhY3JpdGljczogJyArIHN0YXJ0KTtcbiAgICByZXR1cm4gc3RhcnQ7XG4gIH1cblxuICB2YWx1ZUNoYW5nZWQoKSB7XG4gICAgdGhpcy50ZXh0Q2hhbmdlRXZlbnQuZW1pdCh0aGlzLnNlYXJjaFRleHQpO1xuICB9XG5cbiAgY2xlYXJJbnB1dChmb2N1cz8sIGVtaXQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgLy8gdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgLy8gdGhpcy5icFR5cGVBaGVhZCA9ICcnO1xuICAgIC8vIHRoaXMuc2V0U2VhcmNoVGV4dCgnJyk7XG4gICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICB0aGlzLnByZXZpb3VzSW5kZXggPSAtMTtcbiAgICB0aGlzLmxhc3RTZWFyY2hWYWx1ZSA9ICcnO1xuICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICB0aGlzLmNsZWFyU2VsZWN0ZWRBZGRyZXNzKCk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZWQoKTtcbiAgICAvLyB0aGlzLmNsZWFyQ29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICAgIGlmIChmb2N1cyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5sb2NhbGl0eVNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKGVtaXQpIHtcbiAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgvKidMT0NBTElUWScqLyBJbnB1dE5hbWVUeXBlLkxPQ0FMSVRZKTtcbiAgICAgIC8vICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgvKidTVFJFRVQnKi8gSW5wdXROYW1lVHlwZS5TVFJFRVQpO1xuICAgICAgLy8gIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KC8qJ1NUUkVFVF9OVU1CRVInKi8gSW5wdXROYW1lVHlwZS5TVFJFRVRfTlVNQkVSKTtcbiAgICAgIC8vICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgvKidCT1hfTlVNQkVSJyovIElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTZWFyY2hUZXh0KCkge1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuICB9XG5cbiAgY2xlYXJTZWxlY3RlZEFkZHJlc3MoKSB7XG4gICAgdGhpcy5hZGRyZXNzQ2hhbmdlZC5lbWl0KG51bGwpO1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gIH1cblxuICBjbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gICAgLy8gdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQoeyBtZXNzYWdlVHlwZTogbnVsbCwgdHJhbnNsYXRlZE1lc3NhZ2U6IHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlIH0pO1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zID0gbnVsbDtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlQ29kZSA9IG51bGw7XG4gIH1cblxuICBjbGVhclN1Z2dlc3Rpb25zKCkge1xuICAgIHRoaXMud29yZExpc3QgPSBbXTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5zdWdnZXN0aW9uc1dvcmRMaXN0ID0gW107XG4gICAgLy8gY29uc29sZS5sb2coJ0xpYkF1dG9jb21wbGV0ZUxvY2FsaXR5Q29tcG9uZW50OjpjbGVhclN1Z2dlc3Rpb25zJywgdGhpcy53b3JkTGlzdCk7XG4gICAgLy8gdGhpcy5zdWdnZXN0aW9uTWVzc2FnZXMgPSAgW107XG4gIH1cblxuICBjbGlja1N1Z2dlc3Rpb24oZXZlbnQ6IGFueSwgc3VnZ2VzdGlvbjogYW55KSB7XG4gICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IGZhbHNlO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICB0aGlzLnNldFNlYXJjaFRleHQoc3VnZ2VzdGlvbi5zdHJpbmcpO1xuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgLy8gaWYgKHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSkge1xuICAgIC8vICAgdGhpcy5zaG93QWRkcmVzc0lzVmFsaWRhdGVkKCk7XG4gICAgLy8gfVxuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvbnMoKTtcbiAgICB0aGlzLnNldFNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uKTtcbiAgfVxuXG4gIGNsZWFyV2lkZ2V0KCkge1xuICAgIHRoaXMuY2xlYXJTZWFyY2hUZXh0KCk7XG4gICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgIHRoaXMucHJlZmlsbERhdGEgPSBudWxsO1xuICAgIHRoaXMucHJlZmlsbGluZyA9IGZhbHNlO1xuICB9XG5cbiAgY3Vyc29ySXNPblN1Z2dlc3Rpb25MaXN0KCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSW5kZXggPj0gMDtcbiAgfVxuXG4gIG9uQ2hhbmdlZExhbmd1YWdlKCkge1xuICAgIC8vIHRoaXMucGxhY2VIb2xkZXJUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2xvY2FsaXR5LnBsYWNlaG9sZGVyLmlucHV0LXBsYWNlaG9sZGVyJyk7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCgnbG9jYWxpdHkucGxhY2Vob2xkZXIuaW5wdXQtcGxhY2Vob2xkZXInKVxuICAgICAgLnN1YnNjcmliZSgocmVzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ25ldyBwbGFjZWhvbGRlcicsIHJlcyk7XG4gICAgICAgIC8vID0+ICdoZWxsbyB3b3JsZCdcbiAgICAgICAgdGhpcy5wbGFjZUhvbGRlclRleHQgPSByZXM7XG4gICAgICB9KTtcbiAgfVxuXG4gIGNoYW5nZVNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG1vdmVBcnJvd1NlbGVjdGVkSW5kZXhEb3duKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggKyAxICE9PSB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4Kys7XG4gICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbigpO1xuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRJbmRleCwgdGhpcy5zZWxlY3RlZEluZGV4IC0gMSk7XG4gICAgfVxuICB9XG5cbiAgbW92ZUFycm93U2VsZWN0ZWRJbmRleFVwKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggLSAxICE9PSAtMikge1xuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4LS07XG4gICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbigpO1xuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRJbmRleCwgdGhpcy5zZWxlY3RlZEluZGV4ICsgMSk7XG4gICAgfVxuICB9XG4gIGNoZWNrS2V5VVAoZXZlbnQpXG4gIHtcbiAgICBzd2l0Y2ggKGV2ZW50LndoaWNoKSB7XG4gICAgICBcbiAgICAgIGNhc2UgODpcbiAgICAgICBcbiAgICAgICAgaWYodGhpcy5zZWFyY2hUZXh0Lmxlbmd0aD4wKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ1BBUlRJQUxfQ0xFQVJfTE9DQUxJVFknKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnTE9DQUxJVFknKTtcbiAgICAgICAgICAvLyB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnU1RSRUVUJyk7XG4gICAgICAgICAgLy8gdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ1NUUkVFVF9OVU1CRVInKTtcbiAgICAgICAgICAvLyB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnQk9YX05VTUJFUicpO1xuICAgICAgICAvLyAgdGhpcy5jbGVhcklucHV0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgICBicmVhazsgICAgICAgICBcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgICAgICBicmVhaztcblxuICAgIH1cbiAgICBcbiAgfVxuICBjaGVja0tleURvd24oZXZlbnQpIHtcbiAgICBcbiAgICBzd2l0Y2ggKGV2ZW50LndoaWNoKSB7XG4gICAgICAvLyBkb3duIGtleSwgaW5jcmVtZW50IHNlbGVjdGVkSW5kZXhcbiAgICAgIGNhc2UgNDA6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubW92ZUFycm93U2VsZWN0ZWRJbmRleERvd24oKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIHVwIGtleSwgZGVjcmVtZW50IHNlbGVjdGVkSW5kZXhcbiAgICAgIGNhc2UgMzg6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubW92ZUFycm93U2VsZWN0ZWRJbmRleFVwKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gcmlnaHQgYXJyb3cga2V5XG4gICAgICBjYXNlIDM5OlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JJc09uU3VnZ2VzdGlvbkxpc3QoKSkge1xuICAgICAgICAgIHRoaXMuY2xpY2tTdWdnZXN0aW9uKGV2ZW50LCB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLnR5cGVBaGVhZFdvcmQgJiYgdGhpcy50eXBlQWhlYWRJc1Nob3duKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dCh0aGlzLmJwVHlwZUFoZWFkKTtcbiAgICAgICAgICAgIHRoaXMudHlwZUFoZWFkV29yZCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIC8vIHRhYiBrZXlcbiAgICAgIGNhc2UgOTpcbiAgICAgICAgaWYgKCF0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RGaXJzdEluTGlzdE9mU3VnZ2VzaW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ2OlxuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIC8vIGVudGVyIHByZXNzZWRcbiAgICAgIGNhc2UgMTM6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLmN1cnNvcklzT25TdWdnZXN0aW9uTGlzdCgpKSB7XG4gICAgICAgICAgdGhpcy5jbGlja1N1Z2dlc3Rpb24oZXZlbnQsIHRoaXMuc3VnZ2VzdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgfVxuICB9XG5cbiAgc2V0Q29ubmVjdGlvbkVycm9yTWVzc2FnZSgpIHtcbiAgICB0aGlzLmVycm9yQ29kZSA9IC8qJ3NlcnZpY2UtdW5hdmFpbGFibGUnKi8gVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLlNlcnZpY2VfVW5hdmFpbGFibGU7XG4gICAgLy8gdGhpcy5zZXRWYWxpZGF0aW9uTWVzc2FnZSh0aGlzLmVycm9yQ29kZSk7XG4gICAgdGhpcy5lbWl0VHJhbnNsYXRlZFZhbGlkYXRpb25NZXNzYWdlKFZhbGlkYXRpb25NZXNzYWdlVHlwZS5TZXJ2aWNlX1VuYXZhaWxhYmxlKTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uOiBhbnkpIHtcbiAgICB0aGlzLmFkZHJlc3NDaGFuZ2VkLmVtaXQoc3VnZ2VzdGlvbik7XG4gIH1cblxuICB0cmFuc2xhdGVNZXNzYWdlKG1lc3NhZ2UpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1lc3NhZ2VLZXkgPSBtZXNzYWdlLmtleTtcbiAgICBzd2l0Y2ggKG1lc3NhZ2VLZXkpIHtcbiAgICAgIGNhc2UgJ3N1YmwnOiB7XG4gICAgICAgIC8vIGFyZ3MgbGVuZ3RoIG11c3QgYmUgMiAhXG4gICAgICAgIGlmIChtZXNzYWdlLmFyZ3MgJiYgbWVzc2FnZS5hcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbG9jYWxpdHkuc3VnZ2VzdGlvbi5tZXNzYWdlLnN1YmwnLCB7IHN1YjogbWVzc2FnZS5hcmdzWzBdLCBwcmluY2lwYWw6IG1lc3NhZ2UuYXJnc1sxXSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YWxpZ25cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHlwZUFoZWFkSXNTaG93bigpIHtcbiAgICByZXR1cm4gdGhpcy5icFR5cGVBaGVhZCAmJiB0aGlzLmJwVHlwZUFoZWFkLmxlbmd0aCA+IDA7XG4gIH1cblxuICBzZWxlY3RGaXJzdEluTGlzdE9mU3VnZ2VzaW9ucygpIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAwO1xuICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5zZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRJbmRleCwgdGhpcy5zZWxlY3RlZEluZGV4IC0gMSk7XG4gIH1cblxuICBzZXRTZWFyY2hUZXh0KHZhbHVlKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gdmFsdWU7XG4gIH1cblxuICBzZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgaWYgKG5ld1ZhbCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG5ld1ZhbCAhPT0gLTEpIHtcbiAgICAgIGlmIChvbGRWYWwgPT09IC0xKSB7XG4gICAgICAgIHRoaXMubGFzdFNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hUZXh0O1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0KHRoaXMuc3VnZ2VzdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS5zdHJpbmcpO1xuICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFNlYXJjaFRleHQodGhpcy5sYXN0U2VhcmNoVmFsdWUpO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8c3BhbiAqbmdJZj1cImxhYmVsUmVzb3VyY2VLZXlcIj57eyBsYWJlbFJlc291cmNlS2V5IHwgdHJhbnNsYXRlfX08L3NwYW4+XG48ZGl2IGNsYXNzPVwiYnBhYWMtZHJvcGRvd25cIj5cbiAgICA8ZGl2IGNsYXNzPVwiYnBhYWMtc2VhcmNoLWJhclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnBhYWMtaW5wdXQtd2lkdGhcIj5cbiAgICAgICAgXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiAjbG9jYWxpdHlTZWFyY2hJbnB1dCBjbGFzcz1cImJwYWFjLWlucHV0XCIgXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIChrZXl1cCkgPSAoY2hlY2tLZXlVUCgkZXZlbnQpKVxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImNoZWNrS2V5RG93bigkZXZlbnQpXCIgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIiBnZXRUZXh0Q29sb3IoKSBcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIGlkPVwibG9jYWxpdHlJbnB1dEZpZWxkXCIgW2F0dHIucGxhY2Vob2xkZXJdPVwicGxhY2VIb2xkZXJUZXh0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiIChmb2N1cyk9XCJvbkZvY3VzKClcIiAoY2xpY2spPVwib25JbnB1dENsaWNrKClcIi8+XG4gICAgICAgICAgICA8ZGl2IGlkPVwiYnBhYWMtY2xlYXItbG9jYWxpdHktYnV0dG9uXCIgXG4gICAgICAgICAgICAgICAgICpuZ0lmPVwibWF5U2hvd0NsZWFyQnV0dG9uKClcIlxuICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dCh0cnVlKVwiIGNsYXNzPVwiYnBhYWMtY2xlYXJcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLTxkaXYgbmctdHJhbnNjbHVkZT48L2Rpdj4tLT5cbiAgICAgICAgPGlucHV0IGlkPVwiYnBhYWMtbG9jYWxpdHktdHlwZWFoZWFkXCIgdHlwZT1cInRleHRcIiBkaXNhYmxlZCBhdXRvY29tcGxldGU9XCJvZmZcIiBbKG5nTW9kZWwpXT1cImJwVHlwZUFoZWFkXCIgLz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IFtoaWRkZW5dPVwiY29sbGFwc2VEcm9wZG93blwiIGNsYXNzPVwiYnBhYWMtZHJvcGRvd24tbWVudS1jb250YWluZXJcIiAqbmdJZj1cInN1Z2dlc3Rpb25zICYmIHN1Z2dlc3Rpb25zLmxlbmd0aD4wXCI+XG4gICAgICAgIDxkaXYgI2xvY2FsaXR5TGlzdCBbYXBwVmlzaWJsZVN1Z2dlc3Rpb25dPVwidmlzaWJsZVN1Z2dlc3Rpb25Db3VudFwiIGlkPVwiYnBhYWMtbG9jYWxpdHktZHJvcGRvd25cIiBcbiAgICAgICAgICAgIGNsYXNzPVwiYnBhYWMtZHJvcGRvd24tbWVudVwiPlxuICAgICAgICAgICAgPHVsIHJvbGU9XCJsaXN0Ym94XCIgaWQ9XCJicGFhYy1sb2NhbGl0eS1zdWdnZXN0aW9uc0xpc3RcIiBjbGFzcz1cImxpc3QtdW5zdHlsZWRcIj5cbiAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm9wdGlvblwiIFxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHN1Z2dlc3Rpb25zOyBsZXQgaWR4ID0gaW5kZXhcIiBcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUnOihzZWxlY3RlZEluZGV4PT1pZHgpfVwiIChtb3VzZWRvd24pPVwiY2xpY2tTdWdnZXN0aW9uKCRldmVudCwgb3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInNlbGVjdGVkSW5kZXg9aWR4XCIgKG1vdXNlbGVhdmUpPVwic2VsZWN0ZWRJbmRleD0tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9wdGlvblwiIFtpbm5lckh0bWxdPVwib3B0aW9uLnN0cmluZyB8IGhpZ2hsaWdodFN1Z2dlc3Rpb24gOiB3b3JkTGlzdFwiPjwvc3Bhbj4gXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibWVzc2FnZU9wdGlvbiA9PT0gJ1AnICYmIG9wdGlvbi5tZXNzYWdlc1wiPiAoe3tvcHRpb24ubXVuaWNpcGFsaXR5TmFtZX19KTwvc3Bhbj48YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VPcHRpb24gPT09ICdZJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IG1lc3NhZ2Ugb2Ygb3B0aW9uLm1lc3NhZ2VzXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnBhYWMtc3VnZ2VzdGlvbi1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJtZXNzYWdlLnRyYW5zbGF0ZWRNZXNzYWdlXCI+PC9zcGFuPiBcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|