ng-easycommerce 0.0.614 → 0.0.616
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/README.md +4 -0
- package/bundles/ng-easycommerce.umd.js +13 -14
- package/bundles/ng-easycommerce.umd.js.map +1 -1
- package/bundles/ng-easycommerce.umd.min.js +1 -1
- package/bundles/ng-easycommerce.umd.min.js.map +1 -1
- package/esm2015/lib/ec-component/account-ec/order-ec/order-ec.component.js +2 -2
- package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +3 -3
- package/esm2015/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +4 -4
- package/esm2015/lib/ec-component/sidebar-ec/sidebar-ec.component.js +3 -3
- package/esm2015/lib/ec-component/widgets-ec/price-ec/price-ec.component.js +4 -5
- package/esm2015/lib/services/cart.service.js +2 -2
- package/esm2015/lib/utils/order-util.service.js +2 -2
- package/esm5/lib/ec-component/account-ec/order-ec/order-ec.component.js +2 -2
- package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +3 -3
- package/esm5/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +4 -4
- package/esm5/lib/ec-component/sidebar-ec/sidebar-ec.component.js +3 -3
- package/esm5/lib/ec-component/widgets-ec/price-ec/price-ec.component.js +4 -5
- package/esm5/lib/services/cart.service.js +2 -2
- package/esm5/lib/utils/order-util.service.js +2 -2
- package/fesm2015/ng-easycommerce.js +13 -14
- package/fesm2015/ng-easycommerce.js.map +1 -1
- package/fesm5/ng-easycommerce.js +13 -14
- package/fesm5/ng-easycommerce.js.map +1 -1
- package/lib/ec-component/cart-ec/cart-ec.component.d.ts +1 -1
- package/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +1 -1
- package/lib/ec-component/sidebar-ec/sidebar-ec.component.d.ts +1 -1
- package/lib/ec-component/widgets-ec/price-ec/price-ec.component.d.ts +1 -1
- package/ng-easycommerce.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -18,22 +18,21 @@ let PriceEcComponent = class PriceEcComponent extends ComponentHelper {
|
|
|
18
18
|
this.taxes = [];
|
|
19
19
|
this.showTaxLegendOnly = false;
|
|
20
20
|
this.disableTaxInfo = false;
|
|
21
|
-
this.
|
|
21
|
+
this.showTaxLegend = false;
|
|
22
22
|
this.hideTaxes = false;
|
|
23
23
|
this.ecOnConstruct();
|
|
24
24
|
}
|
|
25
25
|
ngOnInit() {
|
|
26
26
|
this.channelConfigService.channelConfig$.subscribe(channel => {
|
|
27
27
|
var _a, _b, _c;
|
|
28
|
-
this.
|
|
28
|
+
this.showTaxLegend = (_a = channel) === null || _a === void 0 ? void 0 : _a.showTaxLegend;
|
|
29
29
|
this.hideTaxes = (_c = (_b = channel) === null || _b === void 0 ? void 0 : _b.hideTaxes, (_c !== null && _c !== void 0 ? _c : false));
|
|
30
30
|
});
|
|
31
31
|
this.ecOnInit();
|
|
32
32
|
}
|
|
33
33
|
get shouldShowTaxes() {
|
|
34
|
-
console.log('shouldShowTaxes', this.disableTaxInfo, this.showPriceWithoutTaxes, this.hideTaxes, this.basePrice, this.taxeAmount);
|
|
35
34
|
return !this.disableTaxInfo &&
|
|
36
|
-
|
|
35
|
+
this.showTaxLegend &&
|
|
37
36
|
!this.hideTaxes &&
|
|
38
37
|
!!this.basePrice &&
|
|
39
38
|
!!this.taxeAmount;
|
|
@@ -96,4 +95,4 @@ PriceEcComponent = __decorate([
|
|
|
96
95
|
})
|
|
97
96
|
], PriceEcComponent);
|
|
98
97
|
export { PriceEcComponent };
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2UtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC93aWRnZXRzLWVjL3ByaWNlLWVjL3ByaWNlLWVjLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQVFoRixJQUFhLGdCQUFnQixHQUE3QixNQUFhLGdCQUFpQixTQUFRLGVBQWU7SUF1QmpELFlBQW1CLGVBQWdDLEVBQVUsb0JBQTBDO1FBQ25HLEtBQUssRUFBRSxDQUFDO1FBRE8sb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQVUseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQW5COUYsY0FBUyxHQUFZLElBQUksQ0FBQztRQUcxQixlQUFVLEdBQVcsQ0FBQyxDQUFDO1FBQ3ZCLFVBQUssR0FBdUMsRUFBRSxDQUFDO1FBQy9DLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQVVsQyxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixjQUFTLEdBQVksS0FBSyxDQUFDO1FBSTlCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFOztZQUN6RCxJQUFJLENBQUMsYUFBYSxTQUFHLE9BQU8sMENBQUUsYUFBYSxDQUFDO1lBQzVDLElBQUksQ0FBQyxTQUFTLGVBQUcsT0FBTywwQ0FBRSxTQUFTLHVDQUFJLEtBQUssRUFBQSxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWM7WUFDdkIsSUFBSSxDQUFDLGFBQWE7WUFDbEIsQ0FBQyxJQUFJLENBQUMsU0FBUztZQUNmLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUztZQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMxQixDQUFDO0NBQ0osQ0FBQTs7WUFwQnVDLGVBQWU7WUFBZ0Msb0JBQW9COztBQXJCOUY7SUFBUixLQUFLLEVBQUU7K0NBQWU7QUFDZDtJQUFSLEtBQUssRUFBRTttREFBbUI7QUFDbEI7SUFBUixLQUFLLEVBQUU7bURBQTJCO0FBQzFCO0lBQVIsS0FBSyxFQUFFO3lEQUF5QjtBQUN4QjtJQUFSLEtBQUssRUFBRTttREFBbUI7QUFDbEI7SUFBUixLQUFLLEVBQUU7b0RBQXdCO0FBQ3ZCO0lBQVIsS0FBSyxFQUFFOytDQUFnRDtBQUMvQztJQUFSLEtBQUssRUFBRTsyREFBb0M7QUFDbkM7SUFBUixLQUFLLEVBQUU7d0RBQWlDO0FBR2hDO0lBQVIsS0FBSyxFQUFFOzZEQUF1QztBQUN0QztJQUFSLEtBQUssRUFBRTtpRUFBMkM7QUFDMUM7SUFBUixLQUFLLEVBQUU7bUVBQTZDO0FBQzVDO0lBQVIsS0FBSyxFQUFFO3VFQUFpRDtBQUNoRDtJQUFSLEtBQUssRUFBRTsyREFBcUM7QUFDcEM7SUFBUixLQUFLLEVBQUU7b0VBQThDO0FBbEI3QyxnQkFBZ0I7SUFMNUIsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLGNBQWM7UUFDeEIsMnVIQUFzQzs7S0FFekMsQ0FBQztHQUNXLGdCQUFnQixDQTJDNUI7U0EzQ1ksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJvZHVjdHMvcHJvZHVjdHMuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2NvbXBvbmVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ2hhbm5lbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jaGFubmVsLWNvbmZpZy5zZXJ2aWNlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1wcmljZS1lYycsXG4gICAgdGVtcGxhdGVVcmw6ICdwcmljZS1lYy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ3ByaWNlLWVjLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUHJpY2VFY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBASW5wdXQoKSBwcmljZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHNhbGVwcmljZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHByaWNlU2l6ZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgY2xhc3NTdHJTcGFjaW5nOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYmFzZVByaWNlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgdGF4ZUFtb3VudDogbnVtYmVyID0gMDtcbiAgICBASW5wdXQoKSB0YXhlczogeyBuYW1lOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyIH1bXSA9IFtdO1xuICAgIEBJbnB1dCgpIHNob3dUYXhMZWdlbmRPbmx5OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgZGlzYWJsZVRheEluZm86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIFRlbXBsYXRlcyBleHRlcm5vc1xuICAgIEBJbnB1dCgpIGN1c3RvbVByaWNlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgY3VzdG9tU2FsZVByaWNlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgY3VzdG9tU2ltcGxlUHJpY2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBASW5wdXQoKSBjdXN0b21TaW1wbGVTYWxlUHJpY2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBASW5wdXQoKSBjdXN0b21UYXhUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBASW5wdXQoKSBjdXN0b21Pbmx5VGF4TGFiZWxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHB1YmxpYyBzaG93VGF4TGVnZW5kOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGhpZGVUYXhlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHByb2R1Y3RzU2VydmljZTogUHJvZHVjdHNTZXJ2aWNlLCBwcml2YXRlIGNoYW5uZWxDb25maWdTZXJ2aWNlOiBDaGFubmVsQ29uZmlnU2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVjT25Db25zdHJ1Y3QoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUoY2hhbm5lbCA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dUYXhMZWdlbmQgPSBjaGFubmVsPy5zaG93VGF4TGVnZW5kO1xuICAgICAgICAgICAgdGhpcy5oaWRlVGF4ZXMgPSBjaGFubmVsPy5oaWRlVGF4ZXMgPz8gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVjT25Jbml0KCk7XG4gICAgfVxuXG4gICAgZ2V0IHNob3VsZFNob3dUYXhlcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmRpc2FibGVUYXhJbmZvICYmXG4gICAgICAgICAgICB0aGlzLnNob3dUYXhMZWdlbmQgJiZcbiAgICAgICAgICAgICF0aGlzLmhpZGVUYXhlcyAmJlxuICAgICAgICAgICAgISF0aGlzLmJhc2VQcmljZSAmJlxuICAgICAgICAgICAgISF0aGlzLnRheGVBbW91bnQ7XG4gICAgfVxufSJdfQ==
|
|
@@ -354,7 +354,7 @@ let CartService = class CartService {
|
|
|
354
354
|
this.getTotalAmount = () => this.cart.pipe(map((cart) => { var _a, _b; return (_b = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals) === null || _b === void 0 ? void 0 : _b.total; }));
|
|
355
355
|
this.getCountCartItems = () => this.cartItems.pipe(map((cartItems) => { var _a; return (_a = cartItems) === null || _a === void 0 ? void 0 : _a.length; }));
|
|
356
356
|
this.getTaxesAmount = () => this.cart.pipe(map((cart) => { var _a, _b, _c, _d; return ((_b = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals) === null || _b === void 0 ? void 0 : _b.taxes) > 0 ? (_d = (_c = cart) === null || _c === void 0 ? void 0 : _c.totals) === null || _d === void 0 ? void 0 : _d.taxes : 0; }));
|
|
357
|
-
this.getSubTotalAmount = () => this.cart.pipe(map((cart) => { var _a, _b; return (_b = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals) === null || _b === void 0 ? void 0 : _b.
|
|
357
|
+
this.getSubTotalAmount = () => this.cart.pipe(map((cart) => { var _a, _b; return (_b = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals) === null || _b === void 0 ? void 0 : _b.subtotal; }));
|
|
358
358
|
this.toDecimal = (total) => (total - Math.floor(total) == 0) ? total / 100 : total;
|
|
359
359
|
this.addCoupon = (code) => __awaiter(this, void 0, void 0, function* () {
|
|
360
360
|
try {
|
|
@@ -571,4 +571,4 @@ CartService = __decorate([
|
|
|
571
571
|
})
|
|
572
572
|
], CartService);
|
|
573
573
|
export { CartService };
|
|
574
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXRELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBR2xFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFLekMsSUFBYSxXQUFXLEdBQXhCLE1BQWEsV0FBVztJQWtEcEIsWUFBb0IsVUFBNkIsRUFBVSxhQUEyQixFQUFVLE1BQWlCLEVBQ3JHLFdBQXdCLEVBQVUsVUFBK0IsRUFBVSxnQkFBa0MsRUFDN0csb0JBQTBDLEVBQzFDLE1BQWM7UUFITixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNyRyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLGVBQVUsR0FBVixVQUFVLENBQXFCO1FB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QixFQUFFLE9BQU8sQ0FBQyxrQkFBa0I7WUFDOUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO1lBQ2xDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7WUFDNUIsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLFlBQVksaUJBQUksUUFBUSwwQ0FBRSxNQUFNLDBDQUFFLEtBQUssQ0FBQSxJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLO2dCQUM5RyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUs7Z0JBQzlDLENBQUMsQ0FBQyxDQUFDO1lBQ1AsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjO1lBQ3RDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztTQUMvQixDQUFDO1FBRUYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBRUosQ0FBQTs7WUF2bkJtQyxpQkFBaUI7WUFBeUIsWUFBWTtZQUFrQixTQUFTO1lBQ3hGLFdBQVc7WUFBc0IsbUJBQW1CO1lBQTRCLGdCQUFnQjtZQUN2RixvQkFBb0I7WUFDbEMsTUFBTTs7O0FBckRqQixXQUFXO0lBSHZCLFVBQVUsQ0FBQztRQUNSLFVBQVUsRUFBRSxNQUFNO0tBQ3JCLENBQUM7R0FDVyxXQUFXLENBeXFCdkI7U0F6cUJZLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFByb2R1Y3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3Byb2R1Y3QnO1xyXG5pbXBvcnQgeyBDYXJ0SXRlbSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FydC1pdGVtJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9hcGkvY29ubmVjdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29yZS5jb25zdHMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IENvdXBvbkkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvdXBvbic7XHJcbmltcG9ydCB7IE9yZGVyVXRpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi91dGlscy9vcmRlci11dGlsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDaGVja291dERhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWNrb3V0LWRhdGEnO1xyXG5pbXBvcnQgeyBDYXJ0QWZmb3JkYWJsZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FydC9jYXJ0LWFmZm9yZGFibGUnO1xyXG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4vY2hhbm5lbC1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9wdWJsaWMtYXBpJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FydFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBjYXJ0SXRlbXNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Q2FydEl0ZW1bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcclxuICAgIHByaXZhdGUgY291cG9uU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG4gICAgcHJpdmF0ZSBjYXJ0U3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG4gICAgcHJpdmF0ZSByZXF1ZXN0SW5Qcm9jZXNzID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgICBwcml2YXRlIHByb21vdGlvbnNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Q2hlY2tvdXREYXRhW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XHJcblxyXG4gICAgcHJpdmF0ZSBiYWxhbmNlQ3VzdG9tZXJTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8e1xyXG4gICAgICAgIGFsbG93QW55UGF5bWVudE1ldGhvZD86IGJvb2xlYW47XHJcbiAgICAgICAgYWxsb3dFeGNlZWRCYWxhbmNlPzogYm9vbGVhbjtcclxuICAgICAgICBjcmVkaXRBbW91bnQ/OiBudW1iZXIgfCBudWxsO1xyXG4gICAgICAgIHNob3dNYXg/OiBib29sZWFuO1xyXG4gICAgICAgIHNob3dQcmljZT86IGJvb2xlYW47XHJcbiAgICAgICAgcmVtYWluaW5nQ3JlZGl0cz86IG51bWJlcjtcclxuICAgICAgICBhcHBseU1heE9yZGVycz86IGJvb2xlYW47XHJcbiAgICAgICAgbWF4T3JkZXJzPzogbnVtYmVyO1xyXG4gICAgfSB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcclxuXHJcbiAgICBwcml2YXRlIGl0ZW1zID0gW107XHJcblxyXG4gICAgcHJpdmF0ZSBjb3VudDogbnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgbG9jYWxlID0gXCJcIjtcclxuICAgIHByaXZhdGUgbG9nZ2VkX2luID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGhhdmVfdG9fdXBkYXRlID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBjaGFubmVsQ29uZmlnOiBhbnkgPSB7fTtcclxuICAgIHByaXZhdGUgY2FydF9iYXNlVXJsID0gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2NhcnRzJztcclxuXHJcbiAgICBwdWJsaWMgY2FydEl0ZW1zQXBpID0gKCkgPT4gdGhpcy5jYXJ0X2Jhc2VVcmwgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XHJcbiAgICBwdWJsaWMgYWRkSXRlbUFwaSA9ICgpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0X3Rva2VuICsgJy9pdGVtcycgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XHJcbiAgICBwdWJsaWMgYWRkQWxsSXRlbXNBcGkgPSAoKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICcvJyArIHRoaXMuY2FydF90b2tlbiArICcvbXVsdGlwbGUtaXRlbXMnICsgJz9sb2NhbGU9JyArIHRoaXMuY29uc3RzLmdldExvY2FsZSgpO1xyXG4gICAgcHVibGljIHVwZGF0ZUl0ZW1RdWFudGl0eUFwaSA9IChpdGVtX2lkKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICcvJyArIHRoaXMuY2FydF90b2tlbiArICcvaXRlbXMvJyArIGl0ZW1faWQgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XHJcbiAgICBwdWJsaWMgZGVsZXRlSXRlbUFwaSA9IChpdGVtX2lkKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICcvJyArIHRoaXMuY2FydF90b2tlbiArICcvaXRlbXMvJyArIGl0ZW1faWQgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XHJcbiAgICBwdWJsaWMgY291cG9uQXBpID0gKCkgPT4gdGhpcy5jYXJ0X2Jhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRfdG9rZW4gKyAnL2NvdXBvbic7XHJcbiAgICBwdWJsaWMgYWRkcmVzc0Jvb2tBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvYWRkcmVzcy1ib29rJztcclxuICAgIHB1YmxpYyB0YXhlc0FwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9jYXJ0cy90YXgnO1xyXG5cclxuICAgIHB1YmxpYyBjYXJ0X3Rva2VuO1xyXG4gICAgcHVibGljIGNhcnRJdGVtcyA9IHRoaXMuY2FydEl0ZW1zU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKG1hcChpdGVtcyA9PiB0aGlzLnN3aXRjaFByaWNlSW5DYXJ0SXRlbShpdGVtcykpKVxyXG4gICAgcHVibGljIGNvdXBvbiA9IHRoaXMuY291cG9uU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyBsb2FkaW5nID0gdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGNhcnQgPSB0aGlzLmNhcnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIHByb21vdGlvbnMgPSB0aGlzLnByb21vdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGRlbGV0aW5nOiBCb29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgYmFsYW5jZUN1c3RvbWVyJCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyBhbGxvd0FueVBheW1lbnRNZXRob2QkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uYWxsb3dBbnlQYXltZW50TWV0aG9kID8/IG51bGwpKTtcclxuICAgIHB1YmxpYyBhbGxvd0V4Y2VlZEJhbGFuY2UkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uYWxsb3dFeGNlZWRCYWxhbmNlID8/IG51bGwpKTtcclxuICAgIHB1YmxpYyBjcmVkaXRBbW91bnQkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uY3JlZGl0QW1vdW50ID8/IG51bGwpKTtcclxuICAgIHB1YmxpYyBzaG93TWF4JCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LnNob3dNYXggPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIHNob3dQcmljZSQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5zaG93UHJpY2UgPz8gbnVsbCkpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UsIHByaXZhdGUgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLCBwcml2YXRlIGNvbnN0czogQ29uc3RhbnRzLFxyXG4gICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIG9yZGVyVXRpbHM6IE9yZGVyVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNoYW5uZWxDb25maWdTZXJ2aWNlOiBDaGFubmVsQ29uZmlnU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYXJ0JykpIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuY2FydF90b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYXJ0X3Rva2VuJykgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmxvZ2dlZEluLnN1YnNjcmliZShyZXMgPT4gdGhpcy5nZXRDYXJ0KCkpO1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbENvbmZpZ1NlcnZpY2UuY2hhbm5lbENvbmZpZyQuc3Vic2NyaWJlKHJlcyA9PiB0aGlzLmNoYW5uZWxDb25maWcgPSByZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDYXJ0MigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXJ0SXRlbXNTdWJqZWN0LnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFkZHJlc3NCb29rID0gYXN5bmMgKCkgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuYWRkcmVzc0Jvb2tBcGkoKSkucGlwZShtYXAocmVzID0+IHJlcz8ubGVuZ3RoICYmIHJlcy5tYXAoYWRkcmVzID0+IHsgcmV0dXJuIGFkZHJlcyAmJiB7IC4uLmFkZHJlcywgc2VsZWN0ZWQ6IGFkZHJlcy5kZWZhdWx0IH0gfSkgfHwgbnVsbCkpLnRvUHJvbWlzZSgpO1xyXG5cclxuICAgIHB1YmxpYyBnZXRUYXhlcyA9IGFzeW5jICgpID0+XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy50YXhlc0FwaSgpLCB7IHRva2VuOiB0aGlzLmNhcnRfdG9rZW4gfSkuc3Vic2NyaWJlKHJlcyA9PiByZXMpXHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDYXJ0ID0gYXN5bmMgKCkgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmNhcnRJdGVtc0FwaSgpLCAoKHRoaXMuY2FydF90b2tlbiAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+PSAxKSAmJiB7IHRva2VuOiB0aGlzLmNhcnRfdG9rZW4gfSkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHRoaXMuaW5pdGlhbGl6ZUNhcnQocmVzKVxyXG4gICAgICAgIClcclxuXHJcbiAgICBwcml2YXRlIGdldENhcnRCeVRva2VuID0gYXN5bmMgKCkgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmNhcnRJdGVtc0FwaSgpLCAoKHRoaXMuY2FydF90b2tlbikgJiYgeyB0b2tlbjogdGhpcy5jYXJ0X3Rva2VuIH0pKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIHJlcyA9PiB0aGlzLmluaXRpYWxpemVDYXJ0KHJlcylcclxuICAgICAgICApXHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDYXJ0QnlDdXN0b21lciA9IGFzeW5jICgpID0+XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5jYXJ0SXRlbXNBcGkoKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICByZXMgPT4gdGhpcy5pbml0aWFsaXplQ2FydChyZXMpXHJcbiAgICAgICAgKVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogIEBwcml2YXRlXHJcbiAgICAgKiAgQ0FSVCBDUlVEIFNFUlZFUidTIFNZTkNST05JWkVEXHJcbiAgICAgKi9cclxuXHJcbiAgICBwcml2YXRlIGluaXRpYWxpemVDYXJ0ID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJ0X3Rva2VuID0gcmVzcG9uc2UudG9rZW5WYWx1ZTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2FydF90b2tlbicsIHRoaXMuY2FydF90b2tlbik7XHJcbiAgICAgICAgdGhpcy5sb2NhbGUgPSByZXNwb25zZS5sb2NhbGU7XHJcbiAgICAgICAgLyogbGV0IGxvY2FsZUZyb21TdG9yYWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0xPQ0FMRScpXHJcbiAgICAgICAgY29uc29sZS5sb2cobG9jYWxlRnJvbVN0b3JhZ2UpXHJcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGVGcm9tU3RvcmFnZSA/IGxvY2FsZUZyb21TdG9yYWdlIDogcmVzcG9uc2UubG9jYWxlO1xyXG4gICAgICAgIHJlc3BvbnNlLmxvY2FsZSA9IHRoaXMubG9jYWxlICovXHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKHJlc3BvbnNlLCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0SXRlbXModGhpcy50cmFuc2Zvcm1JdGVtcyhyZXNwb25zZS5pdGVtcykpO1xyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN3aXRjaFByaWNlSW5DYXJ0SXRlbSA9IChpdGVtczogQ2FydEl0ZW1bXSkgPT4ge1xyXG4gICAgICAgIC8vcmV0dXJuIGl0ZW1zO1xyXG4gICAgICAgIHJldHVybiBpdGVtcy5tYXAoXHJcbiAgICAgICAgICAgIGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ucHJvZHVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucHJvZHVjdC5wcmljZSA9IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UgPyBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2FsZXByaWNlIDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnByaWNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0ZXBDYXJ0ID0gKHJlcykgPT4ge1xyXG4gICAgICAgIHJlcy5pdGVtcy5sZW5ndGggPiAwICYmIHJlcy5pdGVtcy5mb3JFYWNoKFxyXG4gICAgICAgICAgICBpdGVtID0+ICF0aGlzLmlzSXRlbUluTG9jYWwoaXRlbS5pZCkgJiYgdGhpcy5kZWxldGVDYXJ0SXRlbShpdGVtLCBmYWxzZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYWRkQWxsVG9DYXJ0KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIGl0ZW0gPT4gIXJlcy5pdGVtcy5zb21lKGV4dGVybmFsX2l0ZW0gPT4gZXh0ZXJuYWxfaXRlbS5pZCA9PSBpdGVtLml0ZW1faWQpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgXHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDYXJ0SXRlbXMgPSAoaXRlbXMpID0+IHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gaXRlbXM7XHJcbiAgICAgICAgdGhpcy5jb3VudCA9IGl0ZW1zLmxlbmd0aDtcclxuICAgICAgICB0aGlzLmNhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLml0ZW1zKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUNhcnRJdGVtUXVhbnRpdHkgPSAodmFyaWFudF9pZCwgcXVhbnRpdHkpID0+IHtcclxuICAgICAgICBsZXQgbmV3UXVhbnRpdHkgPSB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudF9pZCkucXVhbnRpdHkgPSBxdWFudGl0eTtcclxuICAgICAgICB0aGlzLmNhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLml0ZW1zKTtcclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdC11cGRhdGVkJywgeyBxdWFudGl0eTogbmV3UXVhbnRpdHkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhcHBlbmRUb0NhcnQgPSAoY2FydCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FydE9iaihjYXJ0KTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy50cmFuc2Zvcm1JdGVtcyhjYXJ0Lml0ZW1zKTtcclxuICAgICAgICB0aGlzLmNvdW50ID0gdGhpcy5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcbiAgICAgICAgLy8gICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtYWRkZWQnKTtcclxuICAgICAgICB0aGlzLmNhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLml0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlbW92ZUNhcnRJdGVtID0gKGNhcnQsIHByb2R1Y3QsIHRvYXN0ID0gdHJ1ZSkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FydE9iaihjYXJ0LCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5zcGxpY2UodGhpcy5pdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLml0ZW1faWQgPT0gcHJvZHVjdC5pdGVtX2lkKSwgMSk7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5pdGVtcyk7XHJcbiAgICAgICAgdG9hc3QgJiYgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRvYXN0ICYmIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0LXJlbW92ZWQnKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xyXG4gICAgICAgIC8vIHRoaXMuZ29vZ2xlQW5hbHl0aWNzLnJlbW92ZUZyb21DYXJ0KHByb2R1Y3QpO1xyXG4gICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3JlbW92ZV9mcm9tX2NhcnQnLCB7IC4uLnByb2R1Y3QsIGN1cnJlbmN5OiB0aGlzLmNvbnN0cy5jdXJyZW5jeS5jb2RlIH0pXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkSWZBbGxyZWFkeUV4aXN0cyA9IChwcm9kdWN0LCB2YXJpYW50X2lkLCBxdWFudGl0eUFkZCA9IDEpID0+XHJcbiAgICAgICAgdGhpcy5pdGVtcy5maW5kKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5wcm9kdWN0LmlkID09IHByb2R1Y3QuaWQgJiYgaXRlbS52YXJpYW50X2lkID09IHZhcmlhbnRfaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIHRoaXMuZmluZEl0ZW0ocHJvZHVjdC5pZCkucXVhbnRpdHkgKyBxdWFudGl0eUFkZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVMb2NhbENhcnQgPSAoKSA9PiB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhcnQnLCBKU09OLnN0cmluZ2lmeSh0aGlzLml0ZW1zKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXNldENhcnQgPSAobmV4dD8pID0+IHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgICAgdGhpcy5jYXJ0U3ViamVjdC5uZXh0KG51bGwpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQmFsYW5jZUF0dHJpYnV0ZXMobnVsbCk7XHJcbiAgICAgICAgdGhpcy5jYXJ0X3Rva2VuID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNhcnRJdGVtc1N1YmplY3QubmV4dChbXSk7XHJcbiAgICAgICAgdGhpcy5jb3VudCA9IDA7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhcnQnLCBcIltdXCIpO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdjYXJ0X3Rva2VuJyk7XHJcbiAgICAgICAgbmV4dCAmJiBuZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDYXJ0T2JqID0gKGNhcnQsIGVtaXRFdmVudCA9IHRydWUpOiBib29sZWFuID0+IHtcclxuICAgICAgICB0aGlzLmNhcnRTdWJqZWN0Lm5leHQoY2FydCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhjYXJ0KTtcclxuICAgICAgICBlbWl0RXZlbnQgJiYgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgnYWRkX3RvX2NhcnQnLCBjYXJ0KTtcclxuICAgICAgICB0aGlzLnByb21vdGlvbnNTdWJqZWN0Lm5leHQodGhpcy5vcmRlclV0aWxzLmdldFByb21vdGlvbnMoY2FydCwgdHJ1ZSkpO1xyXG5cclxuICAgICAgICBjYXJ0LmNvdXBvbkNvZGVcclxuICAgICAgICAgICAgPyB0aGlzLmZvcm1hdENvdXBvbihjYXJ0KVxyXG4gICAgICAgICAgICA6IHRoaXMuY291cG9uU3ViamVjdC5uZXh0KG51bGwpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNJdGVtSW5Mb2NhbCA9IChpdGVtX2lkKSA9PiB0aGlzLml0ZW1zLnNvbWUoaXRlbSA9PiBpdGVtLml0ZW1faWQgPT0gaXRlbV9pZCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiAgQHB1YmxpY1xyXG4gICAgICogIENBUlQgQ1JVRFxyXG4gICAgICovXHJcblxyXG4gICAgYWRkVG9DYXJ0ID0gKHByb2R1Y3Q6IFByb2R1Y3QsIHF1YW50aXR5OiBudW1iZXIsIHZhcmlhbnRfaWQpID0+IHtcclxuICAgICAgICBjb25zdCBiYWxhbmNlID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IGFwcGx5TWF4T3JkZXJzID0gYmFsYW5jZT8uYXBwbHlNYXhPcmRlcnMgPz8gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgbWF4T3JkZXJzID0gYmFsYW5jZT8ubWF4T3JkZXJzID8/IEluZmluaXR5O1xyXG5cclxuICAgICAgICBpZiAoYXBwbHlNYXhPcmRlcnMgJiYgKG1heE9yZGVycyA8PSAwIHx8IG1heE9yZGVycyA9PT0gbnVsbCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ21heC1vcmRlcnMtcmVhY2hlZCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG4gICAgICAgIGxldCBhZGRlZCA9IHRoaXMuYWRkSWZBbGxyZWFkeUV4aXN0cyhwcm9kdWN0LCB2YXJpYW50X2lkLCBxdWFudGl0eSk7XHJcbiAgICAgICAgaWYgKCFhZGRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogcHJvZHVjdC5pZCwgcXVhbnRpdHk6IHF1YW50aXR5LCB2YXJpYW50Q29kZTogdmFyaWFudF9pZCB9KVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBNYW5lamFyIGxhIHJlc3B1ZXN0YSBIVFRQIGV4aXRvc2EgKGPDs2RpZ28gMjAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZFRvQ2FydChyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdC1hZGRlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFuZWphciBlbCBlcnJvciBkZSBsYSBsbGFtYWRhIEhUVFAgKGPDs2RpZ28gNTAwIHUgb3RybyBlcnJvcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDUwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ8OzZGlnbyBkZSBlcnJvciA1MDAgKHRpbWVvdXQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnSGEgb2N1cnJpZG8gdW4gZXJyb3IgYWwgYWdyZWdhciBhbCBjYXJyaXRvLiBWdWVsdmEgYSBpbnRlbnRhcmxvLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RybyBjw7NkaWdvIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnRXJyb3IgaW5lc3BlcmFkby4gVnVlbHZhIGEgaW50ZW50YXJsbycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhZGRUb0xvdCA9IChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkLCBpZD8sIG9yZGVyX2l0ZW1faWQ/LCBsb3RfcXVhbnRpdHk/LCB1bml0X3ByaWNlPywgdW5pdF90b3RhbD8sIGFqdXN0ZW1lbnRfdG90YWw/LCB0b3RhbF9sb3Q/LCBsb3Rfc3RhdHVzPywgZGF0ZV9yZXF1ZXN0Pywgbm90ZXM/LCBzaGlwcGluZ19hZGRyZXNzX2lkPywgc2hpcHBpbmdfYWRkcmVzc19uYW1lPywgYWN0aW9uPykgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGFkZGVkID0gJyc7XHJcbiAgICAgICAgIWFkZGVkICYmIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50X2lkLCBpZDogaWQgfHwgJycsIG9yZGVyX2l0ZW1faWQ6IG9yZGVyX2l0ZW1faWQgfHwgJycsIGxvdF9xdWFudGl0eTogbG90X3F1YW50aXR5IHx8ICcnLCB1bml0X3ByaWNlOiB1bml0X3ByaWNlIHx8ICcnLCB1bml0X3RvdGFsOiB1bml0X3RvdGFsIHx8ICcnLCBhanVzdGVtZW50X3RvdGFsOiBhanVzdGVtZW50X3RvdGFsIHx8ICcnLCB0b3RhbF9sb3Q6IHRvdGFsX2xvdCB8fCAnJywgbG90X3N0YXR1czogbG90X3N0YXR1cyB8fCAnJywgZGF0ZV9yZXF1ZXN0OiBkYXRlX3JlcXVlc3QgfHwgJycsIG5vdGVzOiBub3RlcyB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19pZDogc2hpcHBpbmdfYWRkcmVzc19pZCB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19uYW1lOiBzaGlwcGluZ19hZGRyZXNzX25hbWUgfHwgJycsIGFjdGlvbjogYWN0aW9uIHx8ICduZXdsb3QnIH0pXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICByZXMgPT4gdGhpcy5hcHBlbmRUb0NhcnQocmVzKSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVycilcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUb0NhcnRQcm9taXNlID0gYXN5bmMgKHByb2R1Y3Q6IFByb2R1Y3QsIHF1YW50aXR5OiBudW1iZXIsIHZhcmlhbnRfaWQpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG4gICAgICAgIGxldCBhZGRlZCA9IHRoaXMuYWRkSWZBbGxyZWFkeUV4aXN0cyhwcm9kdWN0LCB2YXJpYW50X2lkLCBxdWFudGl0eSk7XHJcbiAgICAgICAgaWYgKCFhZGRlZCkge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgKHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50X2lkIH0pLnRvUHJvbWlzZSgpKTtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LmVycm9yKSB0aGlzLmhhbmRsZUVycm9yKHJlc3VsdC5lcnJvcik7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRUb0NhcnQocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBmYWxzZSB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHRydWUgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBhZGRBbGxUb0NhcnQgPSAoaXRlbXM6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBpdGVtczogdGhpcy5tZXJnZUl0ZW1zQWRkQWxsVG9DYXJ0KGl0ZW1zKSB9O1xyXG5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEFsbEl0ZW1zQXBpKCksIHBhcmFtcylcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpLnRoZW4oXHJcbiAgICAgICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FydE9iaihyZXMuY2FydCkgJiYgdGhpcy51cGRhdGVDYXJ0SXRlbXModGhpcy50cmFuc2Zvcm1JdGVtcyhyZXMuY2FydC5pdGVtcykpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcy5jYXJ0X3Jlc3BvbnNlLnN0YXR1cyA9PSAnc3VjY2VzcycgJiYgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3RzLWFkZGVkJyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkUmVwZWF0T3JkZXJUb0NhcnQoaXRlbXM6IGFueVtdKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FydEl0ZW1zU3ViamVjdC52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdjYXJ0LW5vdC1lbXB0eScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGl0ZW1zVG9BZGQgPSBpdGVtcy5tYXAoaXRlbSA9PiAoe1xyXG4gICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcclxuICAgICAgICAgICAgdmFyaWFudENvZGU6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5jb2RlXHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICBpZiAoaXRlbXNUb0FkZC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vLXByb2R1Y3RzLXRvLWFkZCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIGl0ZW1zOiBpdGVtc1RvQWRkXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkQWxsSXRlbXNBcGkoKSwgcGFyYW1zKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09ICdmYWlsdXJlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHJlcy5lcnJvcj8udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJykgfHwgJ3Vua25vd25fZXJyb3InO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zUmVzcG9uc2UgPSByZXM/Lml0ZW1zX3Jlc3BvbnNlIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FydEl0ZW1zID0gcmVzPy5jYXJ0Py5pdGVtcyB8fCBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRPZlN0b2NrSXRlbXMgPSBpdGVtc1Jlc3BvbnNlLmZpbHRlcihpdGVtID0+XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zdGF0dXMgPT09ICdmYWlsdXJlJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZXJyb3JzLnNvbWUoZXJyb3IgPT4gZXJyb3IuY29kZSA9PT0gJ291dF9vZl9zdG9jaycpXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYXJ0SXRlbXMubGVuZ3RoID09PSAwICYmIG91dE9mU3RvY2tJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ2FsbC1wcm9kdWN0cy1vdXQtb2Ytc3RvY2snKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG91dE9mU3RvY2tJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3NvbWUtcHJvZHVjdHMtb3V0LW9mLXN0b2NrJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNhcnRJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKHJlcy5jYXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRJdGVtcyh0aGlzLnRyYW5zZm9ybUl0ZW1zKGNhcnRJdGVtcykpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0cy1hZGRlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2NhcnQnXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBtZXJnZUl0ZW1zQWRkQWxsVG9DYXJ0ID0gKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIGxldCBwYXJhbXNNZXJnZSA9IFtdXHJcbiAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBsZXQgaXRlbUludGVybm8gPSBpdGVtcy5maW5kKGl0ZW1QYXJhbSA9PiBpdGVtUGFyYW0udmFyaWFudENvZGUgPT0gaXRlbS52YXJpYW50X2lkKVxyXG4gICAgICAgICAgICBwYXJhbXNNZXJnZS5wdXNoKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3RDb2RlOiBpdGVtLnByb2R1Y3QuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudENvZGU6IGl0ZW0udmFyaWFudF9pZCxcclxuICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogaXRlbUludGVybm8gJiYgaXRlbUludGVybm8ucXVhbnRpdHkgfHwgaXRlbS5xdWFudGl0eVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoaXRlbVBhcmFtID0+ICF0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtUGFyYW0udmFyaWFudENvZGUgPT0gaXRlbS52YXJpYW50X2lkKSlcclxuXHJcbiAgICAgICAgcmV0dXJuIFsuLi5pdGVtcywgLi4ucGFyYW1zTWVyZ2VdXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlSXRlbVF1YW50aXR5ID0gKGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRlUXVhbnRpdHkoaXRlbSwgcXVhbnRpdHkpICYmICh0aGlzLnZhbGlkYXRlUHJpY2VBbmRDcmVkaXRzKGl0ZW0sIHF1YW50aXR5KSkpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLnB1dCh0aGlzLnVwZGF0ZUl0ZW1RdWFudGl0eUFwaSh0aGlzLmZpbmRJdGVtQnlJZFZhcmlhbnQoaXRlbS52YXJpYW50X2lkKSksIHsgJ3F1YW50aXR5JzogTnVtYmVyKHF1YW50aXR5KSB9KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICByZXMgPT4gdGhpcy51cGRhdGVDYXJ0T2JqKHJlcykgJiYgdGhpcy51cGRhdGVDYXJ0SXRlbVF1YW50aXR5KGl0ZW0udmFyaWFudF9pZCwgTnVtYmVyKHF1YW50aXR5KSksXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHZhbGlkYXRlUXVhbnRpdHkgPSAoaXRlbTogQ2FydEl0ZW0sIHF1YW50aXR5KSA9PiB7XHJcbiAgICAgICAgaWYgKCh0aGlzLmdldENvdW50RnJvbUl0ZW1JbkNhcnQoaXRlbS5wcm9kdWN0Q29kZSkgKyBxdWFudGl0eSkgPiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWF4aW11bUl0ZW1zUXVhbnRpdHkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ21heGltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWF4aW11bUl0ZW1zUXVhbnRpdHkgfSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgodGhpcy5nZXRDb3VudEZyb21JdGVtSW5DYXJ0KGl0ZW0ucHJvZHVjdENvZGUpICsgcXVhbnRpdHkpIDwgaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1pbmltdW1JdGVtc1F1YW50aXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtaW5pbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1pbmltdW1JdGVtc1F1YW50aXR5IH0pXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdmFsaWRhdGVQcmljZUFuZENyZWRpdHMgPSAoaXRlbTogQ2FydEl0ZW0sIHF1YW50aXR5OiBudW1iZXIpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCBiYWxhbmNlID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xyXG5cclxuICAgICAgICBpZiAoIWJhbGFuY2UgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IG51bGwgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChiYWxhbmNlLnJlbWFpbmluZ0NyZWRpdHMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1bml0UHJpY2UgPSBpdGVtLnRvdGFsIC8gaXRlbS5xdWFudGl0eTtcclxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsUXVhbnRpdHkgPSBxdWFudGl0eSAtIGl0ZW0ucXVhbnRpdHk7XHJcblxyXG4gICAgICAgIGlmIChhZGRpdGlvbmFsUXVhbnRpdHkgPD0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxDb3N0ID0gdW5pdFByaWNlICogYWRkaXRpb25hbFF1YW50aXR5O1xyXG5cclxuICAgICAgICBpZiAoYWRkaXRpb25hbENvc3QgPiBiYWxhbmNlLnJlbWFpbmluZ0NyZWRpdHMpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIGhhc1N1ZmZpY2llbnRDcmVkaXRzRm9yQ2FydFRvdGFsID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IGJhbGFuY2UgPSB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICghYmFsYW5jZSB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gbnVsbCB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNhcnRTdWJqZWN0LnZhbHVlLnRvdGFscy50b3RhbCA+IGJhbGFuY2UuY3JlZGl0QW1vdW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdub3QtZW5vdWdoLWNyZWRpdHMnKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIGNhbGN1bGF0ZVN0b2NrQ291bnRzID0gKGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnByb2R1Y3Quc3RvY2sgPCBpdGVtLnF1YW50aXR5ICsgcXVhbnRpdHkpIHtcclxuICAgICAgICAgICAgLy8gdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jaycpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVDYXJ0SXRlbSA9IChpdGVtLCB0b2FzdCA9IHRydWUpID0+IHtcclxuICAgICAgICBsZXQgaWRfYnVzY2FkbyA9IHRoaXMuZmluZEl0ZW1CeUlkVmFyaWFudChpdGVtLnZhcmlhbnRfaWQpXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgLy8gICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRJdGVtQXBpKCksIHsgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCwgcXVhbnRpdHk6IDAsIHZhcmlhbnRDb2RlOiBpdGVtLnZhcmlhbnRfaWQsIGlkOiAnJywgb3JkZXJfaXRlbV9pZDogaXRlbS5pdGVtX2lkLCBsb3RfcXVhbnRpdHk6ICcnLCB1bml0X3ByaWNlOiAnJywgdW5pdF90b3RhbDogJycsIGFqdXN0ZW1lbnRfdG90YWw6ICcnLCB0b3RhbF9sb3Q6ICcnLCBsb3Rfc3RhdHVzOiAnJywgZGF0ZV9yZXF1ZXN0OiAnJywgbm90ZXM6ICAnJywgc2hpcHBpbmdfYWRkcmVzc19pZDogJycsIHNoaXBwaW5nX2FkZHJlc3NfbmFtZTogJycsIGFjdGlvbjogICdkZWxldGVvcmRlcml0ZW0nfSlcclxuICAgICAgICAvLyAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAvLyAgICAgICAgICAgIHJlcyA9PiB0aGlzLnJlbW92ZUNhcnRJdGVtKHJlcywgaXRlbSwgdG9hc3QpLFxyXG4gICAgICAgIC8vICAgICAgICAgICAgZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKVxyXG4gICAgICAgIC8vICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5kZWxldGUodGhpcy5kZWxldGVJdGVtQXBpKGlkX2J1c2NhZG8pKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIHJlcyA9PiB7IHRoaXMucmVtb3ZlQ2FydEl0ZW0ocmVzLCBpdGVtLCB0b2FzdCk7IHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTsgfSxcclxuICAgICAgICAgICAgZXJyID0+IHsgdGhpcy5oYW5kbGVFcnJvcihlcnIpOyB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7IH0sXHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQ2FydCgpIHtcclxuICAgICAgICAvL3NvbHVjaW9uIHByb3Zpc2FvcmlhXHJcbiAgICAgICAgbGV0IGl0ZW1zID0gWy4uLnRoaXMuaXRlbXNdXHJcbiAgICAgICAgd2hpbGUgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVDYXJ0SXRlbShpdGVtcy5wb3AoKSwgZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vdGhpcy5yZXNldENhcnQodGhpcy5nZXRDYXJ0KTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckFuZFJlc2V0Q2FydCgpIHtcclxuICAgICAgICB0aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQW5kUmVzZXRDdXN0b21lckNhcnQoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJDbGVhcmluZyBhbmQgcmVzZXRpbmcuLi5cIilcclxuICAgICAgICB0aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnRCeUN1c3RvbWVyKVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUVycm9yID0gKGVycm9yOiB7IGVycm9yOiBzdHJpbmcgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdvcGVyYXRpb24tZXJyb3ItcGFyYW0nKTtcclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q291bnRGcm9tSXRlbUluQ2FydCA9IChjb2RlVmFyaWFudCk6IG51bWJlciA9PiB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gY29kZVZhcmlhbnQpPy5xdWFudGl0eSB8fCAwO1xyXG5cclxuICAgIGZpbmRJdGVtQnlJZFZhcmlhbnQgPSAodmFyaWFudF9pZCkgPT4gdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IHZhcmlhbnRfaWQpLml0ZW1faWRcclxuXHJcbiAgICBmaW5kSXRlbSA9IChwcm9kdWN0X2lkKSA9PiB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnByb2R1Y3QuaWQgPT0gcHJvZHVjdF9pZCk7XHJcblxyXG4gICAgLyoqIERBVEEgRk9SIE9USEVSIFNFUlZJQ0VTICovXHJcbiAgICBnZXRDYXJ0VG9rZW4gPSAoKSA9PiB0aGlzLmNhcnRfdG9rZW47XHJcblxyXG4gICAgZ2V0TG9jYWxlID0gKCkgPT4gdGhpcy5sb2NhbGU7XHJcblxyXG4gICAgZ2V0VG90YWxBbW91bnQgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XHJcbiAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRvdGFsKSk7XHJcblxyXG4gICAgZ2V0Q291bnRDYXJ0SXRlbXMgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXMucGlwZShtYXAoKGNhcnRJdGVtcykgPT4gY2FydEl0ZW1zPy5sZW5ndGgpKTtcclxuXHJcbiAgICBnZXRUYXhlc0Ftb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmNhcnQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8udGF4ZXMgPiAwID8gY2FydD8udG90YWxzPy50YXhlcyA6IDApKTtcclxuXHJcbiAgICBnZXRTdWJUb3RhbEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmNhcnQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8uaXRlbXMpKTtcclxuXHJcbiAgICB0b0RlY2ltYWwgPSAodG90YWwpID0+ICh0b3RhbCAtIE1hdGguZmxvb3IodG90YWwpID09IDApID8gdG90YWwgLyAxMDAgOiB0b3RhbFxyXG5cclxuICAgIGdldERpc2NvdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FydEl0ZW1zLnBpcGUobWFwKChwcm9kdWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IHRoaXMuaXRlbXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldiArIGN1cnIucHJvZHVjdC5zYWxlcHJpY2UgKiBjdXJyLnF1YW50aXR5O1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgbGV0IHN1YnRvdGFsID0gdGhpcy5pdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ICsgY3Vyci5wcm9kdWN0LnByaWNlICogY3Vyci5xdWFudGl0eTtcclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBzdWJ0b3RhbCAtIHRvdGFsO1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRDb3Vwb24gPSBhc3luYyAoY29kZSk6IFByb21pc2U8YW55PiA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29ubmVjdGlvbi5wdXQodGhpcy5jb3Vwb25BcGkoKSwgeyBjb3Vwb246IGNvZGUgfSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3IgfHwgcmVzdWx0LmVycm9ycykgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICdpbnZhbGlkLWNvdXBvbicgfTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKHJlc3VsdCwgZmFsc2UpO1xyXG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcjogZmFsc2UsIG1lc3NhZ2U6ICdvaycgfTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiB0cnVlLCBtZXNzYWdlOiAnaW52YWxpZC1jb3Vwb24nIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUNvdXBvbiA9IGFzeW5jICgpID0+IHRoaXMuY29ubmVjdGlvbi5kZWxldGUodGhpcy5jb3Vwb25BcGkoKSkucGlwZShtYXAocmVzID0+IHRoaXMudXBkYXRlQ2FydE9iaihyZXMsIGZhbHNlKSkpLnRvUHJvbWlzZSgpO1xyXG5cclxuICAgIGZvcm1hdENvdXBvbiA9IChjYXJ0KSA9PiB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRfY291cG9uID0gdGhpcy5jb3Vwb25TdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGxldCBjb3Vwb246IENvdXBvbkkgPSB7IGNvZGU6IGNhcnQuY291cG9uQ29kZSB9O1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKGNhcnQuY2FydERpc2NvdW50cylbMF07XHJcbiAgICAgICAgICAgIGNvdXBvbiA9IHtcclxuICAgICAgICAgICAgICAgIC4uLmNvdXBvbixcclxuICAgICAgICAgICAgICAgIGFtb3VudDogKGNhcnQuY2FydERpc2NvdW50cyAmJiBjYXJ0LmNhcnREaXNjb3VudHNba2V5XS5hbW91bnQuY3VycmVudCkgfHwgMCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IChjYXJ0LmNhcnREaXNjb3VudHMgJiYgY2FydC5jYXJ0RGlzY291bnRzW2tleV0ubmFtZSkgfHwgJ25vLW5hbWUnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgKGNvdXBvbiAhPSBjdXJyZW50X2NvdXBvbikgJiYgdGhpcy5jb3Vwb25TdWJqZWN0Lm5leHQoY291cG9uKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VIYXZlVG9VcGRhdGUgPSAodmFsdWUpID0+IHRoaXMuaGF2ZV90b191cGRhdGUgPSB2YWx1ZTtcclxuXHJcbiAgICByZWFkeUZvckNoZWNrb3V0ID0gKHN1Y2Nlc3NDYWxsYmFjaz86IEZ1bmN0aW9uLCBlcnJvckNhbGxiYWNrPzogRnVuY3Rpb24pOiBDYXJ0QWZmb3JkYWJsZSA9PiB7XHJcbiAgICAgICAgbGV0IGNhcnQgPSB0aGlzLmNhcnRTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuY2FydEl0ZW1zU3ViamVjdC52YWx1ZTtcclxuICAgICAgICBsZXQgcmVzdWx0OiBDYXJ0QWZmb3JkYWJsZSA9IHsgb2s6IHRydWUgfTtcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoIDwgdGhpcy5jaGFubmVsQ29uZmlnLm1pbmltdW1RdWFudGl0eVB1cmNoYXNlSXRlbXMpIHtcclxuICAgICAgICAgICAgcmVzdWx0Lm9rID0gZmFsc2U7IHJlc3VsdC5yZWFzb25zLnB1c2goeyBtZXNzYWdlOiAnbm90LWVub3VnaHQtaXRlbXMnIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYXJ0LnRvdGFscy50b3RhbCA8IHRoaXMuY2hhbm5lbENvbmZpZy5taW5pbXVtUHVyY2hhc2VBbW91bnQpIHtcclxuICAgICAgICAgICAgcmVzdWx0Lm9rID0gZmFsc2U7IHJlc3VsdC5yZWFzb25zLnB1c2goeyBtZXNzYWdlOiAnbm90LWVub3VnaHQtYW1vdW50JyB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrIHx8IGVycm9yQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgcmVzdWx0Lm9rXHJcbiAgICAgICAgICAgICAgICA/IHN1Y2Nlc3NDYWxsYmFjayAmJiBzdWNjZXNzQ2FsbGJhY2soKVxyXG4gICAgICAgICAgICAgICAgOiBlcnJvckNhbGxiYWNrICYmIGVycm9yQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVJdGVtc09uRXJyb3IgPSAoaXRlbXNXaXRoRXJyb3I6IGFueVtdLCBjb2RlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtc1dpdGhFcnJvcik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5pdGVtcyk7XHJcbiAgICAgICAgbGV0IGl0ZW1zVXBkYXRlZCA9IHRoaXMuaXRlbXMubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBsZXQgaXRlbVdpdGhFcnJvciA9IGl0ZW1zV2l0aEVycm9yLmZpbmQoZmFpbGVkSXRlbSA9PiBpdGVtLml0ZW1faWQgPT0gZmFpbGVkSXRlbS5pZCk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtV2l0aEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmVycm9yID0gY29kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW1zVXBkYXRlZCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0SXRlbXMoaXRlbXNVcGRhdGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkQ2FydEJ5VG9rZW4gPSBhc3luYyAodG9rZW46IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FydF90b2tlbiA9IHRva2VuXHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0Q2FydEJ5VG9rZW4oKVxyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqICBVVElMU1xyXG4gICAgICovXHJcblxyXG4gICAgdHJhbnNmb3JtSXRlbXMgPSAoc2VydmVyX2l0ZW0pID0+IHNlcnZlcl9pdGVtLm1hcChcclxuICAgICAgICBpdGVtID0+IHtcclxuICAgICAgICAgICAgaXRlbSA9IHtcclxuICAgICAgICAgICAgICAgIHByb2R1Y3Q6IGl0ZW0ucHJvZHVjdCxcclxuICAgICAgICAgICAgICAgIHZhcmlhbnRfaWQ6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5jb2RlLFxyXG4gICAgICAgICAgICAgICAgbG90OiBpdGVtLm9yZGVySXRlbUxvdCxcclxuICAgICAgICAgICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxyXG4gICAgICAgICAgICAgICAgaXRlbV9pZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIHRvdGFsOiBpdGVtLnRvdGFsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNhbGVwcmljZSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5wcmljZSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UgPiAwID8gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNlbGVwcmljZSA6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5wcmljZSk7XHJcbiAgICAgICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgaXRlbS5wcm9kdWN0LnByaWNlID0gaXRlbS50b3RhbCAvIGl0ZW0ucXVhbnRpdHkvLyA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zZWxlcHJpY2UgOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2U7XHJcbiAgICAgICAgICAgIC8vIH0sIDEwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgIH1cclxuICAgIClcclxuXHJcblxyXG4gICAgZ2V0Q3JlZGl0QW1vdW50ID0gKCk6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD4gPT5cclxuICAgICAgICB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QucGlwZShcclxuICAgICAgICAgICAgbWFwKChiYWxhbmNlQ3VzdG9tZXIpID0+IGJhbGFuY2VDdXN0b21lcj8uY3JlZGl0QW1vdW50ID8/IG51bGwpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBcclxuICAgICAgICBnZXRDbGllbnRUYXhlcyA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRheGVzID4gMCA/IGNhcnQ/LnRvdGFscz8uY2xpZW50VGF4ZXMgOiAwKSk7XHJcblxyXG4gICAgZ2V0UmVtYWluaW5nQ3JlZGl0cyA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QucGlwZShtYXAoKGJhbGFuY2VDdXN0b21lcikgPT4gYmFsYW5jZUN1c3RvbWVyPy5yZW1haW5pbmdDcmVkaXRzKSk7XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKGNhcnREYXRhOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBiYWxhbmNlID0gY2FydERhdGE/LmJhbGFuY2VDdXN0b21lcjtcclxuXHJcbiAgICAgICAgaWYgKCFiYWxhbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBiYWxhbmNlRGF0YSA9IHtcclxuICAgICAgICAgICAgYWxsb3dBbnlQYXltZW50TWV0aG9kOiBiYWxhbmNlLmFsbG93QW55UGF5bWVudE1ldGhvZCxcclxuICAgICAgICAgICAgYWxsb3dFeGNlZWRCYWxhbmNlOiBiYWxhbmNlLmFsbG93RXhjZWVkQmFsYW5jZSxcclxuICAgICAgICAgICAgY3JlZGl0QW1vdW50OiBiYWxhbmNlLmNyZWRpdEFtb3VudCxcclxuICAgICAgICAgICAgc2hvd01heDogYmFsYW5jZS5zaG93TWF4LFxyXG4gICAgICAgICAgICBzaG93UHJpY2U6IGJhbGFuY2Uuc2hvd1ByaWNlLFxyXG4gICAgICAgICAgICByZW1haW5pbmdDcmVkaXRzOiBiYWxhbmNlLmNyZWRpdEFtb3VudCAmJiBjYXJ0RGF0YT8udG90YWxzPy50b3RhbCAmJiBiYWxhbmNlLmNyZWRpdEFtb3VudCA+PSBjYXJ0RGF0YS50b3RhbHMudG90YWxcclxuICAgICAgICAgICAgICAgID8gYmFsYW5jZS5jcmVkaXRBbW91bnQgLSBjYXJ0RGF0YS50b3RhbHMudG90YWxcclxuICAgICAgICAgICAgICAgIDogMCxcclxuICAgICAgICAgICAgYXBwbHlNYXhPcmRlcnM6IGJhbGFuY2UuYXBwbHlNYXhPcmRlcnMsXHJcbiAgICAgICAgICAgIG1heE9yZGVyczogYmFsYW5jZS5tYXhPcmRlcnNcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QubmV4dChiYWxhbmNlRGF0YSk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
574
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXRELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBR2xFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFLekMsSUFBYSxXQUFXLEdBQXhCLE1BQWEsV0FBVztJQWtEcEIsWUFBb0IsVUFBNkIsRUFBVSxhQUEyQixFQUFVLE1BQWlCLEVBQ3JHLFdBQXdCLEVBQVUsVUFBK0IsRUFBVSxnQkFBa0MsRUFDN0csb0JBQTBDLEVBQzFDLE1BQWM7UUFITixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNyRyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLGVBQVUsR0FBVixVQUFVLENBQXFCO1FBQVUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUM3Ryx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFwRGxCLHFCQUFnQixHQUFnQyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RSxrQkFBYSxHQUF5QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRSxnQkFBVyxHQUF5QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxzQkFBaUIsR0FBb0MsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFN0UsMkJBQXNCLEdBU2xCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTlCLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFWCxVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBQ2xCLFdBQU0sR0FBRyxFQUFFLENBQUM7UUFDWixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLGlCQUFZLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEdBQUcsUUFBUSxDQUFDO1FBRWxFLGlCQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM5RSxlQUFVLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDL0csbUJBQWMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLGlCQUFpQixHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzVILDBCQUFxQixHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxPQUFPLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDNUksa0JBQWEsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLEdBQUcsT0FBTyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BJLGNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUN4RSxtQkFBYyxHQUFHLEdBQUcsRUFBRSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxHQUFHLGVBQWUsQ0FBQztRQUNoRixhQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEdBQUcsWUFBWSxDQUFDO1FBR3ZFLGNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdEcsV0FBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0MsWUFBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvQyxTQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2QyxlQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25ELGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIscUJBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzlELDJCQUFzQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLGlDQUFDLElBQUksMENBQUUscUJBQXFCLHVDQUFJLElBQUksSUFBQSxDQUFDLENBQUMsQ0FBQztRQUN0Ryx3QkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQ0FBQyxJQUFJLDBDQUFFLGtCQUFrQix1Q0FBSSxJQUFJLElBQUEsQ0FBQyxDQUFDLENBQUM7UUFDaEcsa0JBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQ0FBQyxJQUFJLDBDQUFFLFlBQVksdUNBQUksSUFBSSxJQUFBLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLGFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQ0FBQyxJQUFJLDBDQUFFLE9BQU8sdUNBQUksSUFBSSxJQUFBLENBQUMsQ0FBQyxDQUFDO1FBQzFFLGVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQ0FBQyxJQUFJLDBDQUFFLFNBQVMsdUNBQUksSUFBSSxJQUFBLENBQUMsQ0FBQyxDQUFDO1FBa0JyRixtQkFBYyxHQUFHLEdBQVMsRUFBRSxnREFDeEIsT0FBQSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQUMsT0FBQSxPQUFBLEdBQUcsMENBQUUsTUFBTSxLQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxPQUFPLE1BQU0sb0NBQVMsTUFBTSxLQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsT0FBTyxHQUFFLENBQUEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUEsRUFBQSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQSxHQUFBLENBQUM7UUFFN0ssYUFBUSxHQUFHLEdBQVMsRUFBRSxnREFDekIsT0FBQSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUEsR0FBQSxDQUFBO1FBRW5GLFlBQU8sR0FBRyxHQUFTLEVBQUU7WUFDekIsT0FBQSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQzVILEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FDbEMsQ0FBQTtVQUFBLENBQUE7UUFFRyxtQkFBYyxHQUFHLEdBQVMsRUFBRTtZQUNoQyxPQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUNsRyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQ2xDLENBQUE7VUFBQSxDQUFBO1FBRUcsc0JBQWlCLEdBQUcsR0FBUyxFQUFFO1lBQ25DLE9BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsU0FBUyxDQUMvQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQ2xDLENBQUE7VUFBQSxDQUFBO1FBRUw7OztXQUdHO1FBRUssbUJBQWMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUN0QyxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQzlCOzs7NENBR2dDO1lBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQTtRQUVPLDBCQUFxQixHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO1lBQ2xELGVBQWU7WUFDZixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQ1osSUFBSSxDQUFDLEVBQUU7Z0JBQ0gsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7aUJBQ2pJO2dCQUNELE9BQU8sSUFBSSxDQUFBO1lBQ2YsQ0FBQyxDQUNKLENBQUE7UUFDTCxDQUFDLENBQUE7UUFFTyxhQUFRLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN2QixHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ3JDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FDM0UsQ0FBQztZQUNGLElBQUksQ0FBQyxZQUFZLENBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ2IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQzdFLENBQ0osQ0FBQztRQUNOLENBQUMsQ0FBQTtRQUdPLG9CQUFlLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFBO1FBRU8sMkJBQXNCLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDdEQsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDN0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMxRSxDQUFDLENBQUE7UUFFTyxpQkFBWSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsK0NBQStDO1lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQTtRQUVPLG1CQUFjLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRTtZQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLEtBQUssSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixnREFBZ0Q7WUFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxrQkFBa0Isa0NBQU8sT0FBTyxLQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUcsQ0FBQTtRQUU1RyxDQUFDLENBQUE7UUFFTyx3QkFBbUIsR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQ25FLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksT0FBTyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLENBQUM7Z0JBQ2hGLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUVDLG9CQUFlLEdBQUcsR0FBRyxFQUFFO1lBQzNCLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFBO1FBRU8sY0FBUyxHQUFHLENBQUMsSUFBSyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZixZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuQyxZQUFZLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3RDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUE7UUFFTyxrQkFBYSxHQUFHLENBQUMsSUFBSSxFQUFFLFNBQVMsR0FBRyxJQUFJLEVBQVcsRUFBRTtZQUN4RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsU0FBUyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFdkUsSUFBSSxDQUFDLFVBQVU7Z0JBQ1gsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFBO1FBRU8sa0JBQWEsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDO1FBRXRGOzs7V0FHRztRQUVILGNBQVMsR0FBRyxDQUFDLE9BQWdCLEVBQUUsUUFBZ0IsRUFBRSxVQUFVLEVBQUUsRUFBRTs7WUFDM0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQztZQUNsRCxNQUFNLGNBQWMsZUFBRyxPQUFPLDBDQUFFLGNBQWMsdUNBQUksS0FBSyxFQUFBLENBQUM7WUFDeEQsTUFBTSxTQUFTLGVBQUcsT0FBTywwQ0FBRSxTQUFTLHVDQUFJLFFBQVEsRUFBQSxDQUFDO1lBRWpELElBQUksY0FBYyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxTQUFTLEtBQUssSUFBSSxDQUFDLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzlDLE9BQU87YUFDVjtZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO2dCQUMvQyxPQUFNO2FBQ1Q7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUM7cUJBQzVHLFNBQVMsQ0FDTixHQUFHLENBQUMsRUFBRTtvQkFDRixpREFBaUQ7b0JBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUM3QyxDQUFDLEVBQ0QsR0FBRyxDQUFDLEVBQUU7b0JBQ0YsZ0VBQWdFO29CQUNoRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFO3dCQUNwQixnQ0FBZ0M7d0JBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGtFQUFrRSxDQUFDLENBQUM7cUJBQy9GO3lCQUFNO3dCQUNILHVCQUF1Qjt3QkFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDdEIsb0VBQW9FO3FCQUN2RTtnQkFDTCxDQUFDLENBQ0osQ0FBQzthQUNUO1FBR0wsQ0FBQyxDQUFBO1FBRUQsYUFBUSxHQUFHLENBQUMsT0FBZ0IsRUFBRSxRQUFnQixFQUFFLFVBQVUsRUFBRSxFQUFHLEVBQUUsYUFBYyxFQUFFLFlBQWEsRUFBRSxVQUFXLEVBQUUsVUFBVyxFQUFFLGdCQUFpQixFQUFFLFNBQVUsRUFBRSxVQUFXLEVBQUUsWUFBYSxFQUFFLEtBQU0sRUFBRSxtQkFBb0IsRUFBRSxxQkFBc0IsRUFBRSxNQUFPLEVBQUUsRUFBRTtZQUNsUCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtnQkFDL0MsT0FBTTthQUNUO1lBRUQsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2YsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLElBQUksRUFBRSxFQUFFLFlBQVksRUFBRSxZQUFZLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLElBQUksRUFBRSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsWUFBWSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsSUFBSSxFQUFFLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksUUFBUSxFQUFFLENBQUM7aUJBQ2hpQixTQUFTLENBQ04sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUM3QixHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQy9CLENBQUM7UUFDVixDQUFDLENBQUE7UUFFRCxxQkFBZ0IsR0FBRyxDQUFPLE9BQWdCLEVBQUUsUUFBZ0IsRUFBRSxVQUFVLEVBQUUsRUFBRTtZQUN4RSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtnQkFDL0MsT0FBTTthQUNUO1lBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNSLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ25KLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUs7b0JBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ3ZEO29CQUNELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzFCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUE7aUJBQzFCO2FBQ0o7WUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFBO1FBQzFCLENBQUMsQ0FBQSxDQUFBO1FBR0QsaUJBQVksR0FBRyxDQUFDLEtBQVksRUFBRSxFQUFFO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO2dCQUMvQyxPQUFNO2FBQ1Q7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWpDLE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBRTdELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLENBQUM7aUJBQzlDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FDYixHQUFHLENBQUMsRUFBRTtnQkFDRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUMxRixHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN2RixDQUFDLEVBQ0QsR0FBRyxDQUFDLEVBQUU7Z0JBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQ0osQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQTtRQXdFRCwyQkFBc0IsR0FBRyxDQUFDLEtBQVksRUFBRSxFQUFFO1lBQ3RDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQTtZQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdEIsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO2dCQUNuRixXQUFXLENBQUMsSUFBSSxDQUNaO29CQUNJLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQzVCLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVTtvQkFDNUIsUUFBUSxFQUFFLFdBQVcsSUFBSSxXQUFXLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRO2lCQUNqRSxDQUNKLENBQUE7WUFDTCxDQUFDLENBQUMsQ0FBQTtZQUVGLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7WUFFckcsT0FBTyxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUE7UUFDckMsQ0FBQyxDQUFBO1FBRUQsdUJBQWtCLEdBQUcsQ0FBQyxJQUFjLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDOUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO2dCQUN6RixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUNsSSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ2hHLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FDL0IsQ0FBQTthQUNKO1FBQ0wsQ0FBQyxDQUFBO1FBR0QscUJBQWdCLEdBQUcsQ0FBQyxJQUFjLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzVHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQTtnQkFDOUcsT0FBTyxLQUFLLENBQUE7YUFDZjtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixFQUFFO2dCQUM1RyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUE7Z0JBQzlHLE9BQU8sS0FBSyxDQUFBO2FBQ2Y7WUFDRCxPQUFPLElBQUksQ0FBQTtRQUNmLENBQUMsQ0FBQTtRQUVPLDRCQUF1QixHQUFHLENBQUMsSUFBYyxFQUFFLFFBQWdCLEVBQVcsRUFBRTtZQUM1RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDO1lBRWxELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUU7Z0JBQ2pGLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7Z0JBQ3hDLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzdDLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFFcEQsSUFBSSxrQkFBa0IsSUFBSSxDQUFDLEVBQUU7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxNQUFNLGNBQWMsR0FBRyxTQUFTLEdBQUcsa0JBQWtCLENBQUM7WUFFdEQsSUFBSSxjQUFjLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFO2dCQUMzQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUM5QyxPQUFPLEtBQUssQ0FBQzthQUNoQjtZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQUVLLHFDQUFnQyxHQUFHLEdBQVksRUFBRTtZQUNwRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDO1lBRWxELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUU7Z0JBQ2pGLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7Z0JBQ3hDLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxZQUFZLEVBQUU7Z0JBQzVELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzlDLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBRUYseUJBQW9CLEdBQUcsQ0FBQyxJQUFjLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDaEQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsRUFBRTtnQkFDL0MsMkNBQTJDO2dCQUMzQyxPQUFPLEtBQUssQ0FBQTthQUNmO1lBQ0QsT0FBTyxJQUFJLENBQUE7UUFDZixDQUFDLENBQUE7UUFFRCxtQkFBYyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRTtZQUNwQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQzFELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsbVhBQW1YO1lBQ25YLHFCQUFxQjtZQUNyQiwyREFBMkQ7WUFDM0QsMENBQTBDO1lBQzFDLFlBQVk7WUFDWixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUM1RCxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3BGLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3ZFLENBQUE7UUFDTCxDQUFDLENBQUE7UUFvQkQsZ0JBQVcsR0FBRyxDQUFDLEtBQXdCLEVBQUUsRUFBRTtZQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFBO1FBRUQsMkJBQXNCLEdBQUcsQ0FBQyxXQUFXLEVBQVUsRUFBRSxXQUFDLE9BQUEsT0FBQSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksV0FBVyxDQUFDLDBDQUFFLFFBQVEsS0FBSSxDQUFDLENBQUEsRUFBQSxDQUFDO1FBRXpILHdCQUFtQixHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFBO1FBRXBHLGFBQVEsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQztRQUVsRiw4QkFBOEI7UUFDOUIsaUJBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRXJDLGNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRTlCLG1CQUFjLEdBQUcsR0FBdUIsRUFBRSxDQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxrQ0FBQyxJQUFJLDBDQUFFLE1BQU0sMENBQUUsS0FBSyxHQUFBLENBQUMsQ0FBQyxDQUFDO1FBRXZELHNCQUFpQixHQUFHLEdBQXVCLEVBQUUsQ0FDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsd0JBQUMsU0FBUywwQ0FBRSxNQUFNLEdBQUEsQ0FBQyxDQUFDLENBQUM7UUFFL0QsbUJBQWMsR0FBRyxHQUF1QixFQUFFLENBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLHVCQUFDLE9BQUEsYUFBQSxJQUFJLDBDQUFFLE1BQU0sMENBQUUsS0FBSyxJQUFHLENBQUMsQ0FBQyxDQUFDLGFBQUMsSUFBSSwwQ0FBRSxNQUFNLDBDQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUEsQ0FBQyxDQUFDLENBQUM7UUFFckYsc0JBQWlCLEdBQUcsR0FBdUIsRUFBRSxDQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxrQ0FBQyxJQUFJLDBDQUFFLE1BQU0sMENBQUUsUUFBUSxHQUFBLENBQUMsQ0FBQyxDQUFDO1FBRTFELGNBQVMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO1FBYzdFLGNBQVMsR0FBRyxDQUFPLElBQUksRUFBZ0IsRUFBRTtZQUNyQyxJQUFJO2dCQUNBLElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3ZGLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTTtvQkFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDckYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUMxQztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO2FBQ3JEO1FBQ0wsQ0FBQyxDQUFBLENBQUE7UUFFRCxpQkFBWSxHQUFHLEdBQVMsRUFBRSxnREFBQyxPQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUEsR0FBQSxDQUFDO1FBRWpJLGlCQUFZLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNwQixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztZQUM5QyxJQUFJLE1BQU0sR0FBWSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEQsSUFBSTtnQkFDQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0MsTUFBTSxtQ0FDQyxNQUFNLEtBQ1QsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQzNFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLEdBQzFFLENBQUM7YUFDTDtZQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUc7WUFDZixDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUE7UUFFRCx1QkFBa0IsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFFNUQscUJBQWdCLEdBQUcsQ0FBQyxlQUEwQixFQUFFLGFBQXdCLEVBQWtCLEVBQUU7WUFDeEYsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDbEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztZQUN4QyxJQUFJLE1BQU0sR0FBbUIsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDMUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsNEJBQTRCLEVBQUU7Z0JBQ2hFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQTthQUMzRTtZQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRTtnQkFDOUQsTUFBTSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUM7Z0JBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFBO2FBQzVFO1lBQ0QsSUFBSSxlQUFlLElBQUksYUFBYSxFQUFFO2dCQUNsQyxNQUFNLENBQUMsRUFBRTtvQkFDTCxDQUFDLENBQUMsZUFBZSxJQUFJLGVBQWUsRUFBRTtvQkFDdEMsQ0FBQyxDQUFDLGFBQWEsSUFBSSxhQUFhLEVBQUUsQ0FBQzthQUMxQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUMsQ0FBQTtRQUVELHVCQUFrQixHQUFHLENBQUMsY0FBcUIsRUFBRSxJQUFZLEVBQUUsRUFBRTtZQUN6RCwrQkFBK0I7WUFDL0IsMkJBQTJCO1lBQzNCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLGFBQWEsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JGLElBQUksYUFBYSxFQUFFO29CQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztpQkFDckI7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQUE7WUFDRiw2QkFBNkI7WUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUE7UUFFRCxvQkFBZSxHQUFHLENBQU8sS0FBYSxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7WUFDdkIsSUFBSSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7WUFDeEMsT0FBTyxNQUFNLENBQUE7UUFDakIsQ0FBQyxDQUFBLENBQUE7UUFFRDs7V0FFRztRQUVILG1CQUFjLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQzdDLElBQUksQ0FBQyxFQUFFO1lBQ0gsSUFBSSxHQUFHO2dCQUNILE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQ3pDLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDdEIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ2hCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSzthQUNwQixDQUFBO1lBQ0QseUNBQXlDO1lBQ3pDLG1EQUFtRDtZQUNuRCwrQ0FBK0M7WUFDL0MsNkhBQTZIO1lBQzdILHFCQUFxQjtZQUNyQiwrSEFBK0g7WUFDL0gsV0FBVztZQUNYLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FDSixDQUFBO1FBR0Qsb0JBQWUsR0FBRyxHQUE4QixFQUFFLENBQzlDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQzVCLEdBQUcsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFLGlDQUFDLGVBQWUsMENBQUUsWUFBWSx1Q0FBSSxJQUFJLElBQUEsQ0FBQyxDQUNsRSxDQUFDO1FBRUYsbUJBQWMsR0FBRyxHQUF1QixFQUFFLENBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLHVCQUFDLE9BQUEsYUFBQSxJQUFJLDBDQUFFLE1BQU0sMENBQUUsS0FBSyxJQUFHLENBQUMsQ0FBQyxDQUFDLGFBQUMsSUFBSSwwQ0FBRSxNQUFNLDBDQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUEsQ0FBQyxDQUFDLENBQUM7UUFFL0Ysd0JBQW1CLEdBQUcsR0FBdUIsRUFBRSxDQUMzQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFLHdCQUFDLGVBQWUsMENBQUUsZ0JBQWdCLEdBQUEsQ0FBQyxDQUFDLENBQUM7UUF4bEI5RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVELElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDN0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFTSxRQUFRO1FBQ1gsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUF5UEQsb0JBQW9CLENBQUMsS0FBWTtRQUM3QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzFDLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUE7WUFDL0MsT0FBTTtTQUNUO1FBRUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEMsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM1QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7U0FDN0MsQ0FBQyxDQUFDLENBQUM7UUFFSixJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDOUMsT0FBTztTQUNWO1FBRUQsTUFBTSxNQUFNLEdBQUc7WUFDWCxLQUFLLEVBQUUsVUFBVTtTQUNwQixDQUFDO1FBRUYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVqQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxDQUFDO2FBQzlDLFNBQVMsRUFBRTthQUNYLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTs7WUFFUixJQUFJLE9BQUEsR0FBRywwQ0FBRSxNQUFNLE1BQUssU0FBUyxFQUFFO2dCQUMzQixNQUFNLFlBQVksR0FBRyxPQUFBLEdBQUcsQ0FBQyxLQUFLLDBDQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBSyxlQUFlLENBQUM7Z0JBQ3RGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN0QyxPQUFPO2FBQ1Y7WUFFRCxNQUFNLGFBQWEsR0FBRyxPQUFBLEdBQUcsMENBQUUsY0FBYyxLQUFJLEVBQUUsQ0FBQztZQUNoRCxNQUFNLFNBQVMsR0FBRyxhQUFBLEdBQUcsMENBQUUsSUFBSSwwQ0FBRSxLQUFLLEtBQUksRUFBRSxDQUFDO1lBRXpDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDaEQsSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTO2dCQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLENBQzNELENBQUM7WUFFRixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO2dCQUNyRCxPQUFPO2FBQ1Y7WUFFRCxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2FBQ3pEO1lBRUQsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDbkM7UUFDTCxDQUFDLEVBQ0csR0FBRyxDQUFDLEVBQUU7WUFDRixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQzthQUNMLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNULElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBK0dELFNBQVM7UUFDTCxzQkFBc0I7UUFDdEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMzQixPQUFPLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQTtTQUMxQztRQUNELCtCQUErQjtJQUNuQyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELHlCQUF5QjtRQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUE7UUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtJQUMxQyxDQUFDO0lBZ0NELFdBQVc7UUFDUCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3ZDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUN6QyxPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3pELENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNOLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUM1QyxPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3JELENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNOLE9BQU8sUUFBUSxHQUFHLEtBQUssQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQTJHTSx1QkFBdUIsQ0FBQyxRQUFhOztRQUN4QyxNQUFNLE9BQU8sU0FBRyxRQUFRLDBDQUFFLGVBQWUsQ0FBQztRQUUxQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QyxPQUFPO1NBQ1Y7UUFFRCxNQUFNLFdBQVcsR0FBRztZQUNoQixxQkFBcUIsRUFBRSxPQUFPLENBQUMscUJBQXFCO1lBQ3BELGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxrQkFBa0I7WUFDOUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO1lBQ2xDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7WUFDNUIsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLFlBQVksaUJBQUksUUFBUSwwQ0FBRSxNQUFNLDBDQUFFLEtBQUssQ0FBQSxJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLO2dCQUM5RyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUs7Z0JBQzlDLENBQUMsQ0FBQyxDQUFDO1lBQ1AsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjO1lBQ3RDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztTQUMvQixDQUFDO1FBRUYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBRUosQ0FBQTs7WUF2bkJtQyxpQkFBaUI7WUFBeUIsWUFBWTtZQUFrQixTQUFTO1lBQ3hGLFdBQVc7WUFBc0IsbUJBQW1CO1lBQTRCLGdCQUFnQjtZQUN2RixvQkFBb0I7WUFDbEMsTUFBTTs7O0FBckRqQixXQUFXO0lBSHZCLFVBQVUsQ0FBQztRQUNSLFVBQVUsRUFBRSxNQUFNO0tBQ3JCLENBQUM7R0FDVyxXQUFXLENBeXFCdkI7U0F6cUJZLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFByb2R1Y3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3Byb2R1Y3QnO1xyXG5pbXBvcnQgeyBDYXJ0SXRlbSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FydC1pdGVtJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9hcGkvY29ubmVjdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29yZS5jb25zdHMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IENvdXBvbkkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvdXBvbic7XHJcbmltcG9ydCB7IE9yZGVyVXRpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi91dGlscy9vcmRlci11dGlsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDaGVja291dERhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWNrb3V0LWRhdGEnO1xyXG5pbXBvcnQgeyBDYXJ0QWZmb3JkYWJsZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FydC9jYXJ0LWFmZm9yZGFibGUnO1xyXG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4vY2hhbm5lbC1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9wdWJsaWMtYXBpJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FydFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBjYXJ0SXRlbXNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Q2FydEl0ZW1bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcclxuICAgIHByaXZhdGUgY291cG9uU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG4gICAgcHJpdmF0ZSBjYXJ0U3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG4gICAgcHJpdmF0ZSByZXF1ZXN0SW5Qcm9jZXNzID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgICBwcml2YXRlIHByb21vdGlvbnNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Q2hlY2tvdXREYXRhW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XHJcblxyXG4gICAgcHJpdmF0ZSBiYWxhbmNlQ3VzdG9tZXJTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8e1xyXG4gICAgICAgIGFsbG93QW55UGF5bWVudE1ldGhvZD86IGJvb2xlYW47XHJcbiAgICAgICAgYWxsb3dFeGNlZWRCYWxhbmNlPzogYm9vbGVhbjtcclxuICAgICAgICBjcmVkaXRBbW91bnQ/OiBudW1iZXIgfCBudWxsO1xyXG4gICAgICAgIHNob3dNYXg/OiBib29sZWFuO1xyXG4gICAgICAgIHNob3dQcmljZT86IGJvb2xlYW47XHJcbiAgICAgICAgcmVtYWluaW5nQ3JlZGl0cz86IG51bWJlcjtcclxuICAgICAgICBhcHBseU1heE9yZGVycz86IGJvb2xlYW47XHJcbiAgICAgICAgbWF4T3JkZXJzPzogbnVtYmVyO1xyXG4gICAgfSB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcclxuXHJcbiAgICBwcml2YXRlIGl0ZW1zID0gW107XHJcblxyXG4gICAgcHJpdmF0ZSBjb3VudDogbnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgbG9jYWxlID0gXCJcIjtcclxuICAgIHByaXZhdGUgbG9nZ2VkX2luID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGhhdmVfdG9fdXBkYXRlID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBjaGFubmVsQ29uZmlnOiBhbnkgPSB7fTtcclxuICAgIHByaXZhdGUgY2FydF9iYXNlVXJsID0gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2NhcnRzJztcclxuXHJcbiAgICBwdWJsaWMgY2FydEl0ZW1zQXBpID0gKCkgPT4gdGhpcy5jYXJ0X2Jhc2VVcmwgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XHJcbiAgICBwdWJsaWMgYWRkSXRlbUFwaSA9ICgpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0X3Rva2VuICsgJy9pdGVtcycgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XHJcbiAgICBwdWJsaWMgYWRkQWxsSXRlbXNBcGkgPSAoKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICcvJyArIHRoaXMuY2FydF90b2tlbiArICcvbXVsdGlwbGUtaXRlbXMnICsgJz9sb2NhbGU9JyArIHRoaXMuY29uc3RzLmdldExvY2FsZSgpO1xyXG4gICAgcHVibGljIHVwZGF0ZUl0ZW1RdWFudGl0eUFwaSA9IChpdGVtX2lkKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICcvJyArIHRoaXMuY2FydF90b2tlbiArICcvaXRlbXMvJyArIGl0ZW1faWQgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XHJcbiAgICBwdWJsaWMgZGVsZXRlSXRlbUFwaSA9IChpdGVtX2lkKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICcvJyArIHRoaXMuY2FydF90b2tlbiArICcvaXRlbXMvJyArIGl0ZW1faWQgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XHJcbiAgICBwdWJsaWMgY291cG9uQXBpID0gKCkgPT4gdGhpcy5jYXJ0X2Jhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRfdG9rZW4gKyAnL2NvdXBvbic7XHJcbiAgICBwdWJsaWMgYWRkcmVzc0Jvb2tBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvYWRkcmVzcy1ib29rJztcclxuICAgIHB1YmxpYyB0YXhlc0FwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9jYXJ0cy90YXgnO1xyXG5cclxuICAgIHB1YmxpYyBjYXJ0X3Rva2VuO1xyXG4gICAgcHVibGljIGNhcnRJdGVtcyA9IHRoaXMuY2FydEl0ZW1zU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKG1hcChpdGVtcyA9PiB0aGlzLnN3aXRjaFByaWNlSW5DYXJ0SXRlbShpdGVtcykpKVxyXG4gICAgcHVibGljIGNvdXBvbiA9IHRoaXMuY291cG9uU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyBsb2FkaW5nID0gdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGNhcnQgPSB0aGlzLmNhcnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIHByb21vdGlvbnMgPSB0aGlzLnByb21vdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGRlbGV0aW5nOiBCb29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgYmFsYW5jZUN1c3RvbWVyJCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyBhbGxvd0FueVBheW1lbnRNZXRob2QkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uYWxsb3dBbnlQYXltZW50TWV0aG9kID8/IG51bGwpKTtcclxuICAgIHB1YmxpYyBhbGxvd0V4Y2VlZEJhbGFuY2UkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uYWxsb3dFeGNlZWRCYWxhbmNlID8/IG51bGwpKTtcclxuICAgIHB1YmxpYyBjcmVkaXRBbW91bnQkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uY3JlZGl0QW1vdW50ID8/IG51bGwpKTtcclxuICAgIHB1YmxpYyBzaG93TWF4JCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LnNob3dNYXggPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIHNob3dQcmljZSQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5zaG93UHJpY2UgPz8gbnVsbCkpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UsIHByaXZhdGUgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLCBwcml2YXRlIGNvbnN0czogQ29uc3RhbnRzLFxyXG4gICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIG9yZGVyVXRpbHM6IE9yZGVyVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNoYW5uZWxDb25maWdTZXJ2aWNlOiBDaGFubmVsQ29uZmlnU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYXJ0JykpIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuY2FydF90b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYXJ0X3Rva2VuJykgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmxvZ2dlZEluLnN1YnNjcmliZShyZXMgPT4gdGhpcy5nZXRDYXJ0KCkpO1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbENvbmZpZ1NlcnZpY2UuY2hhbm5lbENvbmZpZyQuc3Vic2NyaWJlKHJlcyA9PiB0aGlzLmNoYW5uZWxDb25maWcgPSByZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDYXJ0MigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXJ0SXRlbXNTdWJqZWN0LnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFkZHJlc3NCb29rID0gYXN5bmMgKCkgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuYWRkcmVzc0Jvb2tBcGkoKSkucGlwZShtYXAocmVzID0+IHJlcz8ubGVuZ3RoICYmIHJlcy5tYXAoYWRkcmVzID0+IHsgcmV0dXJuIGFkZHJlcyAmJiB7IC4uLmFkZHJlcywgc2VsZWN0ZWQ6IGFkZHJlcy5kZWZhdWx0IH0gfSkgfHwgbnVsbCkpLnRvUHJvbWlzZSgpO1xyXG5cclxuICAgIHB1YmxpYyBnZXRUYXhlcyA9IGFzeW5jICgpID0+XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy50YXhlc0FwaSgpLCB7IHRva2VuOiB0aGlzLmNhcnRfdG9rZW4gfSkuc3Vic2NyaWJlKHJlcyA9PiByZXMpXHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDYXJ0ID0gYXN5bmMgKCkgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmNhcnRJdGVtc0FwaSgpLCAoKHRoaXMuY2FydF90b2tlbiAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+PSAxKSAmJiB7IHRva2VuOiB0aGlzLmNhcnRfdG9rZW4gfSkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHRoaXMuaW5pdGlhbGl6ZUNhcnQocmVzKVxyXG4gICAgICAgIClcclxuXHJcbiAgICBwcml2YXRlIGdldENhcnRCeVRva2VuID0gYXN5bmMgKCkgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmNhcnRJdGVtc0FwaSgpLCAoKHRoaXMuY2FydF90b2tlbikgJiYgeyB0b2tlbjogdGhpcy5jYXJ0X3Rva2VuIH0pKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIHJlcyA9PiB0aGlzLmluaXRpYWxpemVDYXJ0KHJlcylcclxuICAgICAgICApXHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDYXJ0QnlDdXN0b21lciA9IGFzeW5jICgpID0+XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5jYXJ0SXRlbXNBcGkoKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICByZXMgPT4gdGhpcy5pbml0aWFsaXplQ2FydChyZXMpXHJcbiAgICAgICAgKVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogIEBwcml2YXRlXHJcbiAgICAgKiAgQ0FSVCBDUlVEIFNFUlZFUidTIFNZTkNST05JWkVEXHJcbiAgICAgKi9cclxuXHJcbiAgICBwcml2YXRlIGluaXRpYWxpemVDYXJ0ID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJ0X3Rva2VuID0gcmVzcG9uc2UudG9rZW5WYWx1ZTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2FydF90b2tlbicsIHRoaXMuY2FydF90b2tlbik7XHJcbiAgICAgICAgdGhpcy5sb2NhbGUgPSByZXNwb25zZS5sb2NhbGU7XHJcbiAgICAgICAgLyogbGV0IGxvY2FsZUZyb21TdG9yYWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0xPQ0FMRScpXHJcbiAgICAgICAgY29uc29sZS5sb2cobG9jYWxlRnJvbVN0b3JhZ2UpXHJcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGVGcm9tU3RvcmFnZSA/IGxvY2FsZUZyb21TdG9yYWdlIDogcmVzcG9uc2UubG9jYWxlO1xyXG4gICAgICAgIHJlc3BvbnNlLmxvY2FsZSA9IHRoaXMubG9jYWxlICovXHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKHJlc3BvbnNlLCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0SXRlbXModGhpcy50cmFuc2Zvcm1JdGVtcyhyZXNwb25zZS5pdGVtcykpO1xyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN3aXRjaFByaWNlSW5DYXJ0SXRlbSA9IChpdGVtczogQ2FydEl0ZW1bXSkgPT4ge1xyXG4gICAgICAgIC8vcmV0dXJuIGl0ZW1zO1xyXG4gICAgICAgIHJldHVybiBpdGVtcy5tYXAoXHJcbiAgICAgICAgICAgIGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ucHJvZHVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucHJvZHVjdC5wcmljZSA9IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UgPyBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2FsZXByaWNlIDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnByaWNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0ZXBDYXJ0ID0gKHJlcykgPT4ge1xyXG4gICAgICAgIHJlcy5pdGVtcy5sZW5ndGggPiAwICYmIHJlcy5pdGVtcy5mb3JFYWNoKFxyXG4gICAgICAgICAgICBpdGVtID0+ICF0aGlzLmlzSXRlbUluTG9jYWwoaXRlbS5pZCkgJiYgdGhpcy5kZWxldGVDYXJ0SXRlbShpdGVtLCBmYWxzZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYWRkQWxsVG9DYXJ0KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIGl0ZW0gPT4gIXJlcy5pdGVtcy5zb21lKGV4dGVybmFsX2l0ZW0gPT4gZXh0ZXJuYWxfaXRlbS5pZCA9PSBpdGVtLml0ZW1faWQpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgXHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDYXJ0SXRlbXMgPSAoaXRlbXMpID0+IHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gaXRlbXM7XHJcbiAgICAgICAgdGhpcy5jb3VudCA9IGl0ZW1zLmxlbmd0aDtcclxuICAgICAgICB0aGlzLmNhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLml0ZW1zKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUNhcnRJdGVtUXVhbnRpdHkgPSAodmFyaWFudF9pZCwgcXVhbnRpdHkpID0+IHtcclxuICAgICAgICBsZXQgbmV3UXVhbnRpdHkgPSB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudF9pZCkucXVhbnRpdHkgPSBxdWFudGl0eTtcclxuICAgICAgICB0aGlzLmNhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLml0ZW1zKTtcclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdC11cGRhdGVkJywgeyBxdWFudGl0eTogbmV3UXVhbnRpdHkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhcHBlbmRUb0NhcnQgPSAoY2FydCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FydE9iaihjYXJ0KTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy50cmFuc2Zvcm1JdGVtcyhjYXJ0Lml0ZW1zKTtcclxuICAgICAgICB0aGlzLmNvdW50ID0gdGhpcy5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcbiAgICAgICAgLy8gICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtYWRkZWQnKTtcclxuICAgICAgICB0aGlzLmNhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLml0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlbW92ZUNhcnRJdGVtID0gKGNhcnQsIHByb2R1Y3QsIHRvYXN0ID0gdHJ1ZSkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FydE9iaihjYXJ0LCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5zcGxpY2UodGhpcy5pdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLml0ZW1faWQgPT0gcHJvZHVjdC5pdGVtX2lkKSwgMSk7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5pdGVtcyk7XHJcbiAgICAgICAgdG9hc3QgJiYgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRvYXN0ICYmIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0LXJlbW92ZWQnKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xyXG4gICAgICAgIC8vIHRoaXMuZ29vZ2xlQW5hbHl0aWNzLnJlbW92ZUZyb21DYXJ0KHByb2R1Y3QpO1xyXG4gICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3JlbW92ZV9mcm9tX2NhcnQnLCB7IC4uLnByb2R1Y3QsIGN1cnJlbmN5OiB0aGlzLmNvbnN0cy5jdXJyZW5jeS5jb2RlIH0pXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkSWZBbGxyZWFkeUV4aXN0cyA9IChwcm9kdWN0LCB2YXJpYW50X2lkLCBxdWFudGl0eUFkZCA9IDEpID0+XHJcbiAgICAgICAgdGhpcy5pdGVtcy5maW5kKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5wcm9kdWN0LmlkID09IHByb2R1Y3QuaWQgJiYgaXRlbS52YXJpYW50X2lkID09IHZhcmlhbnRfaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIHRoaXMuZmluZEl0ZW0ocHJvZHVjdC5pZCkucXVhbnRpdHkgKyBxdWFudGl0eUFkZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVMb2NhbENhcnQgPSAoKSA9PiB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhcnQnLCBKU09OLnN0cmluZ2lmeSh0aGlzLml0ZW1zKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXNldENhcnQgPSAobmV4dD8pID0+IHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgICAgdGhpcy5jYXJ0U3ViamVjdC5uZXh0KG51bGwpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQmFsYW5jZUF0dHJpYnV0ZXMobnVsbCk7XHJcbiAgICAgICAgdGhpcy5jYXJ0X3Rva2VuID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNhcnRJdGVtc1N1YmplY3QubmV4dChbXSk7XHJcbiAgICAgICAgdGhpcy5jb3VudCA9IDA7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhcnQnLCBcIltdXCIpO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdjYXJ0X3Rva2VuJyk7XHJcbiAgICAgICAgbmV4dCAmJiBuZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDYXJ0T2JqID0gKGNhcnQsIGVtaXRFdmVudCA9IHRydWUpOiBib29sZWFuID0+IHtcclxuICAgICAgICB0aGlzLmNhcnRTdWJqZWN0Lm5leHQoY2FydCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhjYXJ0KTtcclxuICAgICAgICBlbWl0RXZlbnQgJiYgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgnYWRkX3RvX2NhcnQnLCBjYXJ0KTtcclxuICAgICAgICB0aGlzLnByb21vdGlvbnNTdWJqZWN0Lm5leHQodGhpcy5vcmRlclV0aWxzLmdldFByb21vdGlvbnMoY2FydCwgdHJ1ZSkpO1xyXG5cclxuICAgICAgICBjYXJ0LmNvdXBvbkNvZGVcclxuICAgICAgICAgICAgPyB0aGlzLmZvcm1hdENvdXBvbihjYXJ0KVxyXG4gICAgICAgICAgICA6IHRoaXMuY291cG9uU3ViamVjdC5uZXh0KG51bGwpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNJdGVtSW5Mb2NhbCA9IChpdGVtX2lkKSA9PiB0aGlzLml0ZW1zLnNvbWUoaXRlbSA9PiBpdGVtLml0ZW1faWQgPT0gaXRlbV9pZCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiAgQHB1YmxpY1xyXG4gICAgICogIENBUlQgQ1JVRFxyXG4gICAgICovXHJcblxyXG4gICAgYWRkVG9DYXJ0ID0gKHByb2R1Y3Q6IFByb2R1Y3QsIHF1YW50aXR5OiBudW1iZXIsIHZhcmlhbnRfaWQpID0+IHtcclxuICAgICAgICBjb25zdCBiYWxhbmNlID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IGFwcGx5TWF4T3JkZXJzID0gYmFsYW5jZT8uYXBwbHlNYXhPcmRlcnMgPz8gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgbWF4T3JkZXJzID0gYmFsYW5jZT8ubWF4T3JkZXJzID8/IEluZmluaXR5O1xyXG5cclxuICAgICAgICBpZiAoYXBwbHlNYXhPcmRlcnMgJiYgKG1heE9yZGVycyA8PSAwIHx8IG1heE9yZGVycyA9PT0gbnVsbCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ21heC1vcmRlcnMtcmVhY2hlZCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG4gICAgICAgIGxldCBhZGRlZCA9IHRoaXMuYWRkSWZBbGxyZWFkeUV4aXN0cyhwcm9kdWN0LCB2YXJpYW50X2lkLCBxdWFudGl0eSk7XHJcbiAgICAgICAgaWYgKCFhZGRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogcHJvZHVjdC5pZCwgcXVhbnRpdHk6IHF1YW50aXR5LCB2YXJpYW50Q29kZTogdmFyaWFudF9pZCB9KVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBNYW5lamFyIGxhIHJlc3B1ZXN0YSBIVFRQIGV4aXRvc2EgKGPDs2RpZ28gMjAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZFRvQ2FydChyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdC1hZGRlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFuZWphciBlbCBlcnJvciBkZSBsYSBsbGFtYWRhIEhUVFAgKGPDs2RpZ28gNTAwIHUgb3RybyBlcnJvcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDUwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ8OzZGlnbyBkZSBlcnJvciA1MDAgKHRpbWVvdXQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnSGEgb2N1cnJpZG8gdW4gZXJyb3IgYWwgYWdyZWdhciBhbCBjYXJyaXRvLiBWdWVsdmEgYSBpbnRlbnRhcmxvLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RybyBjw7NkaWdvIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnRXJyb3IgaW5lc3BlcmFkby4gVnVlbHZhIGEgaW50ZW50YXJsbycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhZGRUb0xvdCA9IChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkLCBpZD8sIG9yZGVyX2l0ZW1faWQ/LCBsb3RfcXVhbnRpdHk/LCB1bml0X3ByaWNlPywgdW5pdF90b3RhbD8sIGFqdXN0ZW1lbnRfdG90YWw/LCB0b3RhbF9sb3Q/LCBsb3Rfc3RhdHVzPywgZGF0ZV9yZXF1ZXN0Pywgbm90ZXM/LCBzaGlwcGluZ19hZGRyZXNzX2lkPywgc2hpcHBpbmdfYWRkcmVzc19uYW1lPywgYWN0aW9uPykgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGFkZGVkID0gJyc7XHJcbiAgICAgICAgIWFkZGVkICYmIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50X2lkLCBpZDogaWQgfHwgJycsIG9yZGVyX2l0ZW1faWQ6IG9yZGVyX2l0ZW1faWQgfHwgJycsIGxvdF9xdWFudGl0eTogbG90X3F1YW50aXR5IHx8ICcnLCB1bml0X3ByaWNlOiB1bml0X3ByaWNlIHx8ICcnLCB1bml0X3RvdGFsOiB1bml0X3RvdGFsIHx8ICcnLCBhanVzdGVtZW50X3RvdGFsOiBhanVzdGVtZW50X3RvdGFsIHx8ICcnLCB0b3RhbF9sb3Q6IHRvdGFsX2xvdCB8fCAnJywgbG90X3N0YXR1czogbG90X3N0YXR1cyB8fCAnJywgZGF0ZV9yZXF1ZXN0OiBkYXRlX3JlcXVlc3QgfHwgJycsIG5vdGVzOiBub3RlcyB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19pZDogc2hpcHBpbmdfYWRkcmVzc19pZCB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19uYW1lOiBzaGlwcGluZ19hZGRyZXNzX25hbWUgfHwgJycsIGFjdGlvbjogYWN0aW9uIHx8ICduZXdsb3QnIH0pXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICByZXMgPT4gdGhpcy5hcHBlbmRUb0NhcnQocmVzKSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVycilcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUb0NhcnRQcm9taXNlID0gYXN5bmMgKHByb2R1Y3Q6IFByb2R1Y3QsIHF1YW50aXR5OiBudW1iZXIsIHZhcmlhbnRfaWQpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG4gICAgICAgIGxldCBhZGRlZCA9IHRoaXMuYWRkSWZBbGxyZWFkeUV4aXN0cyhwcm9kdWN0LCB2YXJpYW50X2lkLCBxdWFudGl0eSk7XHJcbiAgICAgICAgaWYgKCFhZGRlZCkge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgKHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50X2lkIH0pLnRvUHJvbWlzZSgpKTtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LmVycm9yKSB0aGlzLmhhbmRsZUVycm9yKHJlc3VsdC5lcnJvcik7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRUb0NhcnQocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBmYWxzZSB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHRydWUgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBhZGRBbGxUb0NhcnQgPSAoaXRlbXM6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBpdGVtczogdGhpcy5tZXJnZUl0ZW1zQWRkQWxsVG9DYXJ0KGl0ZW1zKSB9O1xyXG5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEFsbEl0ZW1zQXBpKCksIHBhcmFtcylcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpLnRoZW4oXHJcbiAgICAgICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FydE9iaihyZXMuY2FydCkgJiYgdGhpcy51cGRhdGVDYXJ0SXRlbXModGhpcy50cmFuc2Zvcm1JdGVtcyhyZXMuY2FydC5pdGVtcykpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcy5jYXJ0X3Jlc3BvbnNlLnN0YXR1cyA9PSAnc3VjY2VzcycgJiYgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3RzLWFkZGVkJyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkUmVwZWF0T3JkZXJUb0NhcnQoaXRlbXM6IGFueVtdKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FydEl0ZW1zU3ViamVjdC52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdjYXJ0LW5vdC1lbXB0eScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGl0ZW1zVG9BZGQgPSBpdGVtcy5tYXAoaXRlbSA9PiAoe1xyXG4gICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcclxuICAgICAgICAgICAgdmFyaWFudENvZGU6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5jb2RlXHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICBpZiAoaXRlbXNUb0FkZC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vLXByb2R1Y3RzLXRvLWFkZCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIGl0ZW1zOiBpdGVtc1RvQWRkXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkQWxsSXRlbXNBcGkoKSwgcGFyYW1zKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09ICdmYWlsdXJlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHJlcy5lcnJvcj8udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJykgfHwgJ3Vua25vd25fZXJyb3InO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zUmVzcG9uc2UgPSByZXM/Lml0ZW1zX3Jlc3BvbnNlIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FydEl0ZW1zID0gcmVzPy5jYXJ0Py5pdGVtcyB8fCBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRPZlN0b2NrSXRlbXMgPSBpdGVtc1Jlc3BvbnNlLmZpbHRlcihpdGVtID0+XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zdGF0dXMgPT09ICdmYWlsdXJlJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZXJyb3JzLnNvbWUoZXJyb3IgPT4gZXJyb3IuY29kZSA9PT0gJ291dF9vZl9zdG9jaycpXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYXJ0SXRlbXMubGVuZ3RoID09PSAwICYmIG91dE9mU3RvY2tJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ2FsbC1wcm9kdWN0cy1vdXQtb2Ytc3RvY2snKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG91dE9mU3RvY2tJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3NvbWUtcHJvZHVjdHMtb3V0LW9mLXN0b2NrJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNhcnRJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKHJlcy5jYXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRJdGVtcyh0aGlzLnRyYW5zZm9ybUl0ZW1zKGNhcnRJdGVtcykpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0cy1hZGRlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2NhcnQnXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBtZXJnZUl0ZW1zQWRkQWxsVG9DYXJ0ID0gKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIGxldCBwYXJhbXNNZXJnZSA9IFtdXHJcbiAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBsZXQgaXRlbUludGVybm8gPSBpdGVtcy5maW5kKGl0ZW1QYXJhbSA9PiBpdGVtUGFyYW0udmFyaWFudENvZGUgPT0gaXRlbS52YXJpYW50X2lkKVxyXG4gICAgICAgICAgICBwYXJhbXNNZXJnZS5wdXNoKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3RDb2RlOiBpdGVtLnByb2R1Y3QuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudENvZGU6IGl0ZW0udmFyaWFudF9pZCxcclxuICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogaXRlbUludGVybm8gJiYgaXRlbUludGVybm8ucXVhbnRpdHkgfHwgaXRlbS5xdWFudGl0eVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoaXRlbVBhcmFtID0+ICF0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtUGFyYW0udmFyaWFudENvZGUgPT0gaXRlbS52YXJpYW50X2lkKSlcclxuXHJcbiAgICAgICAgcmV0dXJuIFsuLi5pdGVtcywgLi4ucGFyYW1zTWVyZ2VdXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlSXRlbVF1YW50aXR5ID0gKGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRlUXVhbnRpdHkoaXRlbSwgcXVhbnRpdHkpICYmICh0aGlzLnZhbGlkYXRlUHJpY2VBbmRDcmVkaXRzKGl0ZW0sIHF1YW50aXR5KSkpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLnB1dCh0aGlzLnVwZGF0ZUl0ZW1RdWFudGl0eUFwaSh0aGlzLmZpbmRJdGVtQnlJZFZhcmlhbnQoaXRlbS52YXJpYW50X2lkKSksIHsgJ3F1YW50aXR5JzogTnVtYmVyKHF1YW50aXR5KSB9KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICByZXMgPT4gdGhpcy51cGRhdGVDYXJ0T2JqKHJlcykgJiYgdGhpcy51cGRhdGVDYXJ0SXRlbVF1YW50aXR5KGl0ZW0udmFyaWFudF9pZCwgTnVtYmVyKHF1YW50aXR5KSksXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHZhbGlkYXRlUXVhbnRpdHkgPSAoaXRlbTogQ2FydEl0ZW0sIHF1YW50aXR5KSA9PiB7XHJcbiAgICAgICAgaWYgKCh0aGlzLmdldENvdW50RnJvbUl0ZW1JbkNhcnQoaXRlbS5wcm9kdWN0Q29kZSkgKyBxdWFudGl0eSkgPiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWF4aW11bUl0ZW1zUXVhbnRpdHkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ21heGltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWF4aW11bUl0ZW1zUXVhbnRpdHkgfSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgodGhpcy5nZXRDb3VudEZyb21JdGVtSW5DYXJ0KGl0ZW0ucHJvZHVjdENvZGUpICsgcXVhbnRpdHkpIDwgaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1pbmltdW1JdGVtc1F1YW50aXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtaW5pbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1pbmltdW1JdGVtc1F1YW50aXR5IH0pXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdmFsaWRhdGVQcmljZUFuZENyZWRpdHMgPSAoaXRlbTogQ2FydEl0ZW0sIHF1YW50aXR5OiBudW1iZXIpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCBiYWxhbmNlID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xyXG5cclxuICAgICAgICBpZiAoIWJhbGFuY2UgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IG51bGwgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChiYWxhbmNlLnJlbWFpbmluZ0NyZWRpdHMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1bml0UHJpY2UgPSBpdGVtLnRvdGFsIC8gaXRlbS5xdWFudGl0eTtcclxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsUXVhbnRpdHkgPSBxdWFudGl0eSAtIGl0ZW0ucXVhbnRpdHk7XHJcblxyXG4gICAgICAgIGlmIChhZGRpdGlvbmFsUXVhbnRpdHkgPD0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxDb3N0ID0gdW5pdFByaWNlICogYWRkaXRpb25hbFF1YW50aXR5O1xyXG5cclxuICAgICAgICBpZiAoYWRkaXRpb25hbENvc3QgPiBiYWxhbmNlLnJlbWFpbmluZ0NyZWRpdHMpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIGhhc1N1ZmZpY2llbnRDcmVkaXRzRm9yQ2FydFRvdGFsID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IGJhbGFuY2UgPSB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICghYmFsYW5jZSB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gbnVsbCB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNhcnRTdWJqZWN0LnZhbHVlLnRvdGFscy50b3RhbCA+IGJhbGFuY2UuY3JlZGl0QW1vdW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdub3QtZW5vdWdoLWNyZWRpdHMnKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIGNhbGN1bGF0ZVN0b2NrQ291bnRzID0gKGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnByb2R1Y3Quc3RvY2sgPCBpdGVtLnF1YW50aXR5ICsgcXVhbnRpdHkpIHtcclxuICAgICAgICAgICAgLy8gdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jaycpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVDYXJ0SXRlbSA9IChpdGVtLCB0b2FzdCA9IHRydWUpID0+IHtcclxuICAgICAgICBsZXQgaWRfYnVzY2FkbyA9IHRoaXMuZmluZEl0ZW1CeUlkVmFyaWFudChpdGVtLnZhcmlhbnRfaWQpXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgLy8gICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRJdGVtQXBpKCksIHsgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCwgcXVhbnRpdHk6IDAsIHZhcmlhbnRDb2RlOiBpdGVtLnZhcmlhbnRfaWQsIGlkOiAnJywgb3JkZXJfaXRlbV9pZDogaXRlbS5pdGVtX2lkLCBsb3RfcXVhbnRpdHk6ICcnLCB1bml0X3ByaWNlOiAnJywgdW5pdF90b3RhbDogJycsIGFqdXN0ZW1lbnRfdG90YWw6ICcnLCB0b3RhbF9sb3Q6ICcnLCBsb3Rfc3RhdHVzOiAnJywgZGF0ZV9yZXF1ZXN0OiAnJywgbm90ZXM6ICAnJywgc2hpcHBpbmdfYWRkcmVzc19pZDogJycsIHNoaXBwaW5nX2FkZHJlc3NfbmFtZTogJycsIGFjdGlvbjogICdkZWxldGVvcmRlcml0ZW0nfSlcclxuICAgICAgICAvLyAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAvLyAgICAgICAgICAgIHJlcyA9PiB0aGlzLnJlbW92ZUNhcnRJdGVtKHJlcywgaXRlbSwgdG9hc3QpLFxyXG4gICAgICAgIC8vICAgICAgICAgICAgZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKVxyXG4gICAgICAgIC8vICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5kZWxldGUodGhpcy5kZWxldGVJdGVtQXBpKGlkX2J1c2NhZG8pKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIHJlcyA9PiB7IHRoaXMucmVtb3ZlQ2FydEl0ZW0ocmVzLCBpdGVtLCB0b2FzdCk7IHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTsgfSxcclxuICAgICAgICAgICAgZXJyID0+IHsgdGhpcy5oYW5kbGVFcnJvcihlcnIpOyB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7IH0sXHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQ2FydCgpIHtcclxuICAgICAgICAvL3NvbHVjaW9uIHByb3Zpc2FvcmlhXHJcbiAgICAgICAgbGV0IGl0ZW1zID0gWy4uLnRoaXMuaXRlbXNdXHJcbiAgICAgICAgd2hpbGUgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVDYXJ0SXRlbShpdGVtcy5wb3AoKSwgZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vdGhpcy5yZXNldENhcnQodGhpcy5nZXRDYXJ0KTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckFuZFJlc2V0Q2FydCgpIHtcclxuICAgICAgICB0aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQW5kUmVzZXRDdXN0b21lckNhcnQoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJDbGVhcmluZyBhbmQgcmVzZXRpbmcuLi5cIilcclxuICAgICAgICB0aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnRCeUN1c3RvbWVyKVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUVycm9yID0gKGVycm9yOiB7IGVycm9yOiBzdHJpbmcgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdvcGVyYXRpb24tZXJyb3ItcGFyYW0nKTtcclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q291bnRGcm9tSXRlbUluQ2FydCA9IChjb2RlVmFyaWFudCk6IG51bWJlciA9PiB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gY29kZVZhcmlhbnQpPy5xdWFudGl0eSB8fCAwO1xyXG5cclxuICAgIGZpbmRJdGVtQnlJZFZhcmlhbnQgPSAodmFyaWFudF9pZCkgPT4gdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IHZhcmlhbnRfaWQpLml0ZW1faWRcclxuXHJcbiAgICBmaW5kSXRlbSA9IChwcm9kdWN0X2lkKSA9PiB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnByb2R1Y3QuaWQgPT0gcHJvZHVjdF9pZCk7XHJcblxyXG4gICAgLyoqIERBVEEgRk9SIE9USEVSIFNFUlZJQ0VTICovXHJcbiAgICBnZXRDYXJ0VG9rZW4gPSAoKSA9PiB0aGlzLmNhcnRfdG9rZW47XHJcblxyXG4gICAgZ2V0TG9jYWxlID0gKCkgPT4gdGhpcy5sb2NhbGU7XHJcblxyXG4gICAgZ2V0VG90YWxBbW91bnQgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XHJcbiAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRvdGFsKSk7XHJcblxyXG4gICAgZ2V0Q291bnRDYXJ0SXRlbXMgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXMucGlwZShtYXAoKGNhcnRJdGVtcykgPT4gY2FydEl0ZW1zPy5sZW5ndGgpKTtcclxuXHJcbiAgICBnZXRUYXhlc0Ftb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmNhcnQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8udGF4ZXMgPiAwID8gY2FydD8udG90YWxzPy50YXhlcyA6IDApKTtcclxuXHJcbiAgICBnZXRTdWJUb3RhbEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmNhcnQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8uc3VidG90YWwpKTtcclxuXHJcbiAgICB0b0RlY2ltYWwgPSAodG90YWwpID0+ICh0b3RhbCAtIE1hdGguZmxvb3IodG90YWwpID09IDApID8gdG90YWwgLyAxMDAgOiB0b3RhbFxyXG5cclxuICAgIGdldERpc2NvdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FydEl0ZW1zLnBpcGUobWFwKChwcm9kdWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IHRoaXMuaXRlbXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldiArIGN1cnIucHJvZHVjdC5zYWxlcHJpY2UgKiBjdXJyLnF1YW50aXR5O1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgbGV0IHN1YnRvdGFsID0gdGhpcy5pdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ICsgY3Vyci5wcm9kdWN0LnByaWNlICogY3Vyci5xdWFudGl0eTtcclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBzdWJ0b3RhbCAtIHRvdGFsO1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRDb3Vwb24gPSBhc3luYyAoY29kZSk6IFByb21pc2U8YW55PiA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29ubmVjdGlvbi5wdXQodGhpcy5jb3Vwb25BcGkoKSwgeyBjb3Vwb246IGNvZGUgfSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3IgfHwgcmVzdWx0LmVycm9ycykgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICdpbnZhbGlkLWNvdXBvbicgfTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKHJlc3VsdCwgZmFsc2UpO1xyXG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcjogZmFsc2UsIG1lc3NhZ2U6ICdvaycgfTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiB0cnVlLCBtZXNzYWdlOiAnaW52YWxpZC1jb3Vwb24nIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUNvdXBvbiA9IGFzeW5jICgpID0+IHRoaXMuY29ubmVjdGlvbi5kZWxldGUodGhpcy5jb3Vwb25BcGkoKSkucGlwZShtYXAocmVzID0+IHRoaXMudXBkYXRlQ2FydE9iaihyZXMsIGZhbHNlKSkpLnRvUHJvbWlzZSgpO1xyXG5cclxuICAgIGZvcm1hdENvdXBvbiA9IChjYXJ0KSA9PiB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRfY291cG9uID0gdGhpcy5jb3Vwb25TdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGxldCBjb3Vwb246IENvdXBvbkkgPSB7IGNvZGU6IGNhcnQuY291cG9uQ29kZSB9O1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKGNhcnQuY2FydERpc2NvdW50cylbMF07XHJcbiAgICAgICAgICAgIGNvdXBvbiA9IHtcclxuICAgICAgICAgICAgICAgIC4uLmNvdXBvbixcclxuICAgICAgICAgICAgICAgIGFtb3VudDogKGNhcnQuY2FydERpc2NvdW50cyAmJiBjYXJ0LmNhcnREaXNjb3VudHNba2V5XS5hbW91bnQuY3VycmVudCkgfHwgMCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IChjYXJ0LmNhcnREaXNjb3VudHMgJiYgY2FydC5jYXJ0RGlzY291bnRzW2tleV0ubmFtZSkgfHwgJ25vLW5hbWUnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgKGNvdXBvbiAhPSBjdXJyZW50X2NvdXBvbikgJiYgdGhpcy5jb3Vwb25TdWJqZWN0Lm5leHQoY291cG9uKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VIYXZlVG9VcGRhdGUgPSAodmFsdWUpID0+IHRoaXMuaGF2ZV90b191cGRhdGUgPSB2YWx1ZTtcclxuXHJcbiAgICByZWFkeUZvckNoZWNrb3V0ID0gKHN1Y2Nlc3NDYWxsYmFjaz86IEZ1bmN0aW9uLCBlcnJvckNhbGxiYWNrPzogRnVuY3Rpb24pOiBDYXJ0QWZmb3JkYWJsZSA9PiB7XHJcbiAgICAgICAgbGV0IGNhcnQgPSB0aGlzLmNhcnRTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuY2FydEl0ZW1zU3ViamVjdC52YWx1ZTtcclxuICAgICAgICBsZXQgcmVzdWx0OiBDYXJ0QWZmb3JkYWJsZSA9IHsgb2s6IHRydWUgfTtcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoIDwgdGhpcy5jaGFubmVsQ29uZmlnLm1pbmltdW1RdWFudGl0eVB1cmNoYXNlSXRlbXMpIHtcclxuICAgICAgICAgICAgcmVzdWx0Lm9rID0gZmFsc2U7IHJlc3VsdC5yZWFzb25zLnB1c2goeyBtZXNzYWdlOiAnbm90LWVub3VnaHQtaXRlbXMnIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYXJ0LnRvdGFscy50b3RhbCA8IHRoaXMuY2hhbm5lbENvbmZpZy5taW5pbXVtUHVyY2hhc2VBbW91bnQpIHtcclxuICAgICAgICAgICAgcmVzdWx0Lm9rID0gZmFsc2U7IHJlc3VsdC5yZWFzb25zLnB1c2goeyBtZXNzYWdlOiAnbm90LWVub3VnaHQtYW1vdW50JyB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrIHx8IGVycm9yQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgcmVzdWx0Lm9rXHJcbiAgICAgICAgICAgICAgICA/IHN1Y2Nlc3NDYWxsYmFjayAmJiBzdWNjZXNzQ2FsbGJhY2soKVxyXG4gICAgICAgICAgICAgICAgOiBlcnJvckNhbGxiYWNrICYmIGVycm9yQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVJdGVtc09uRXJyb3IgPSAoaXRlbXNXaXRoRXJyb3I6IGFueVtdLCBjb2RlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtc1dpdGhFcnJvcik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5pdGVtcyk7XHJcbiAgICAgICAgbGV0IGl0ZW1zVXBkYXRlZCA9IHRoaXMuaXRlbXMubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBsZXQgaXRlbVdpdGhFcnJvciA9IGl0ZW1zV2l0aEVycm9yLmZpbmQoZmFpbGVkSXRlbSA9PiBpdGVtLml0ZW1faWQgPT0gZmFpbGVkSXRlbS5pZCk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtV2l0aEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmVycm9yID0gY29kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW1zVXBkYXRlZCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0SXRlbXMoaXRlbXNVcGRhdGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkQ2FydEJ5VG9rZW4gPSBhc3luYyAodG9rZW46IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FydF90b2tlbiA9IHRva2VuXHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0Q2FydEJ5VG9rZW4oKVxyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqICBVVElMU1xyXG4gICAgICovXHJcblxyXG4gICAgdHJhbnNmb3JtSXRlbXMgPSAoc2VydmVyX2l0ZW0pID0+IHNlcnZlcl9pdGVtLm1hcChcclxuICAgICAgICBpdGVtID0+IHtcclxuICAgICAgICAgICAgaXRlbSA9IHtcclxuICAgICAgICAgICAgICAgIHByb2R1Y3Q6IGl0ZW0ucHJvZHVjdCxcclxuICAgICAgICAgICAgICAgIHZhcmlhbnRfaWQ6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5jb2RlLFxyXG4gICAgICAgICAgICAgICAgbG90OiBpdGVtLm9yZGVySXRlbUxvdCxcclxuICAgICAgICAgICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxyXG4gICAgICAgICAgICAgICAgaXRlbV9pZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIHRvdGFsOiBpdGVtLnRvdGFsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNhbGVwcmljZSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5wcmljZSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UgPiAwID8gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNlbGVwcmljZSA6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5wcmljZSk7XHJcbiAgICAgICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgaXRlbS5wcm9kdWN0LnByaWNlID0gaXRlbS50b3RhbCAvIGl0ZW0ucXVhbnRpdHkvLyA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zZWxlcHJpY2UgOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2U7XHJcbiAgICAgICAgICAgIC8vIH0sIDEwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgIH1cclxuICAgIClcclxuXHJcblxyXG4gICAgZ2V0Q3JlZGl0QW1vdW50ID0gKCk6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD4gPT5cclxuICAgICAgICB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QucGlwZShcclxuICAgICAgICAgICAgbWFwKChiYWxhbmNlQ3VzdG9tZXIpID0+IGJhbGFuY2VDdXN0b21lcj8uY3JlZGl0QW1vdW50ID8/IG51bGwpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBcclxuICAgICAgICBnZXRDbGllbnRUYXhlcyA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRheGVzID4gMCA/IGNhcnQ/LnRvdGFscz8uY2xpZW50VGF4ZXMgOiAwKSk7XHJcblxyXG4gICAgZ2V0UmVtYWluaW5nQ3JlZGl0cyA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QucGlwZShtYXAoKGJhbGFuY2VDdXN0b21lcikgPT4gYmFsYW5jZUN1c3RvbWVyPy5yZW1haW5pbmdDcmVkaXRzKSk7XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKGNhcnREYXRhOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBiYWxhbmNlID0gY2FydERhdGE/LmJhbGFuY2VDdXN0b21lcjtcclxuXHJcbiAgICAgICAgaWYgKCFiYWxhbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBiYWxhbmNlRGF0YSA9IHtcclxuICAgICAgICAgICAgYWxsb3dBbnlQYXltZW50TWV0aG9kOiBiYWxhbmNlLmFsbG93QW55UGF5bWVudE1ldGhvZCxcclxuICAgICAgICAgICAgYWxsb3dFeGNlZWRCYWxhbmNlOiBiYWxhbmNlLmFsbG93RXhjZWVkQmFsYW5jZSxcclxuICAgICAgICAgICAgY3JlZGl0QW1vdW50OiBiYWxhbmNlLmNyZWRpdEFtb3VudCxcclxuICAgICAgICAgICAgc2hvd01heDogYmFsYW5jZS5zaG93TWF4LFxyXG4gICAgICAgICAgICBzaG93UHJpY2U6IGJhbGFuY2Uuc2hvd1ByaWNlLFxyXG4gICAgICAgICAgICByZW1haW5pbmdDcmVkaXRzOiBiYWxhbmNlLmNyZWRpdEFtb3VudCAmJiBjYXJ0RGF0YT8udG90YWxzPy50b3RhbCAmJiBiYWxhbmNlLmNyZWRpdEFtb3VudCA+PSBjYXJ0RGF0YS50b3RhbHMudG90YWxcclxuICAgICAgICAgICAgICAgID8gYmFsYW5jZS5jcmVkaXRBbW91bnQgLSBjYXJ0RGF0YS50b3RhbHMudG90YWxcclxuICAgICAgICAgICAgICAgIDogMCxcclxuICAgICAgICAgICAgYXBwbHlNYXhPcmRlcnM6IGJhbGFuY2UuYXBwbHlNYXhPcmRlcnMsXHJcbiAgICAgICAgICAgIG1heE9yZGVyczogYmFsYW5jZS5tYXhPcmRlcnNcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QubmV4dChiYWxhbmNlRGF0YSk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -16,7 +16,7 @@ let OrderUtilityService = class OrderUtilityService {
|
|
|
16
16
|
if (cart.checkoutState && cart.checkoutState == "completed")
|
|
17
17
|
return;
|
|
18
18
|
let new_state = [];
|
|
19
|
-
let subtotal = { type: 'subtotal', name: 'subtotal', amount: cart.totals.
|
|
19
|
+
let subtotal = { type: 'subtotal', name: 'subtotal', amount: cart.totals.subtotal };
|
|
20
20
|
let total = { type: 'total', name: 'total', amount: cart.totals.total };
|
|
21
21
|
!forCart && new_state.push(subtotal);
|
|
22
22
|
// console.log(cart.cartDiscounts);
|
|
@@ -69,4 +69,4 @@ OrderUtilityService = __decorate([
|
|
|
69
69
|
Injectable()
|
|
70
70
|
], OrderUtilityService);
|
|
71
71
|
export { OrderUtilityService };
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItdXRpbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3V0aWxzL29yZGVyLXV0aWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTNDLElBQWEsbUJBQW1CLEdBQWhDLE1BQWEsbUJBQW1CO0lBRTVCO1FBRUE7Ozs7V0FJRztRQUNILGtCQUFhLEdBQUcsQ0FBQyxJQUFTLEVBQUUsVUFBbUIsS0FBSyxFQUFrQixFQUFFO1lBQ3BFLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLFdBQVc7Z0JBQUUsT0FBTztZQUNwRSxJQUFJLFNBQVMsR0FBbUIsRUFBRSxDQUFDO1lBQ25DLElBQUksUUFBUSxHQUFpQixFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsRyxJQUFJLEtBQUssR0FBaUIsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEYsQ0FBQyxPQUFPLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN4QyxzQ0FBc0M7WUFDbkMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUM5RCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlFLFNBQVMsQ0FBQyxJQUFJLENBQUM7b0JBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSTtvQkFDcEMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRO29CQUM5RixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQztpQkFDMUQsQ0FBQyxDQUFDO2FBRVA7WUFDSixrREFBa0Q7WUFDbEQsaUVBQWlFO1lBQ2pFLDBCQUEwQjtZQUMxQixzQ0FBc0M7WUFDdEMsbUZBQW1GO1lBQ25GLHdEQUF3RDtZQUN4RCxhQUFhO1lBQ2IsU0FBUztZQUNOLENBQUMsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsT0FBTyxTQUFTLENBQUM7UUFDckIsQ0FBQyxDQUFBO1FBRUQsY0FBUyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksRUFBVSxFQUFFO1lBQ25DLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxVQUFVO2dCQUFFLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUN4RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hDLENBQUMsQ0FBQTtRQUVELGVBQVUsR0FBRyxDQUFDLElBQVksRUFBb0IsRUFBRTtZQUM1QyxJQUFJLE1BQU0sQ0FBQztZQUNYLFFBQVEsSUFBSSxFQUFFO2dCQUNWLEtBQUssaUJBQWlCO29CQUFFLE1BQU0sR0FBRyxVQUFVLENBQUM7b0JBQUMsTUFBTTtnQkFDbkQsS0FBSywwQkFBMEI7b0JBQUUsTUFBTSxHQUFHLFVBQVUsQ0FBQztvQkFBQyxNQUFNO2dCQUM1RCxLQUFLLHdCQUF3QjtvQkFBRSxNQUFNLEdBQUcsUUFBUSxDQUFDO29CQUFDLE1BQU07Z0JBQ3hELEtBQUssc0JBQXNCO29CQUFFLE1BQU0sR0FBRyxVQUFVLENBQUM7b0JBQUMsTUFBTTthQUMzRDtZQUNELENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUUsQ0FBQTtZQUNsRyxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUM7UUFDMUIsQ0FBQyxDQUFBO0lBbERlLENBQUM7Q0FtRHBCLENBQUE7QUFyRFksbUJBQW1CO0lBRC9CLFVBQVUsRUFBRTtHQUNBLG1CQUFtQixDQXFEL0I7U0FyRFksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hlY2tvdXREYXRhLCBDaGVja291dERhdGFUeXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVja291dC1kYXRhJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE9yZGVyVXRpbGl0eVNlcnZpY2Uge1xuXG4gICAgY29uc3RydWN0b3IoKSB7IH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBjYXJ0IE9iamV0byBjYXJyaXRvIG8gb3JkZW4sIGluZGlzdGludGFtZW50ZSwgeWEgcXVlIHBvc2VlbiBlbCBtaXNtbyBmb3JtYXRvXG4gICAgICogQHBhcmFtIGZvckNhcnQgU2kgbGEgc29saWNpdHVkIGRlIHByb21vY2lvbmVzIHByb3ZpZW5lIGRlbCBjYXJyaXRvLCBzdXByaW1lIGVsIHN1YnRvdGFsIHkgZWwgdG90YWxcbiAgICAgKiBAZGVzY3JpcHRpb24gRGV2dWVsdmUgdW4gbGlzdGFkbyBjb24gdG9kYXMgbGFzIHByb21vY2lvbmVzIHF1ZSBwb3NlZSBlbCBjYXJyby9vcmRlblxuICAgICAqL1xuICAgIGdldFByb21vdGlvbnMgPSAoY2FydDogYW55LCBmb3JDYXJ0OiBib29sZWFuID0gZmFsc2UpOiBDaGVja291dERhdGFbXSA9PiB7XG4gICAgICAgIGlmIChjYXJ0LmNoZWNrb3V0U3RhdGUgJiYgY2FydC5jaGVja291dFN0YXRlID09IFwiY29tcGxldGVkXCIpIHJldHVybjtcbiAgICAgICAgbGV0IG5ld19zdGF0ZTogQ2hlY2tvdXREYXRhW10gPSBbXTtcbiAgICAgICAgbGV0IHN1YnRvdGFsOiBDaGVja291dERhdGEgPSB7IHR5cGU6ICdzdWJ0b3RhbCcsIG5hbWU6ICdzdWJ0b3RhbCcsIGFtb3VudDogY2FydC50b3RhbHMuc3VidG90YWwgfTtcbiAgICAgICAgbGV0IHRvdGFsOiBDaGVja291dERhdGEgPSB7IHR5cGU6ICd0b3RhbCcsIG5hbWU6ICd0b3RhbCcsIGFtb3VudDogY2FydC50b3RhbHMudG90YWwgfTtcbiAgICAgICAgIWZvckNhcnQgJiYgbmV3X3N0YXRlLnB1c2goc3VidG90YWwpO1xuICAgICAvLyAgICBjb25zb2xlLmxvZyhjYXJ0LmNhcnREaXNjb3VudHMpO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2FydC5jYXJ0RGlzY291bnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGNhcnQuY2FydERpc2NvdW50c1tpbmRleF0udHlwZSA9IHRoaXMuZm9ybWF0VHlwZShjYXJ0LmNhcnREaXNjb3VudHNbaW5kZXhdLnR5cGUpO1xuICAgICAgICAgICAgIG5ld19zdGF0ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgdHlwZTogY2FydC5jYXJ0RGlzY291bnRzW2luZGV4XS50eXBlLFxuICAgICAgICAgICAgICAgICBuYW1lOiAoY2FydC5jYXJ0RGlzY291bnRzW2luZGV4XS50eXBlICE9ICdjb3Vwb24nKSA/IGNhcnQuY2FydERpc2NvdW50c1tpbmRleF0ubmFtZSA6ICdjb3Vwb24nLFxuICAgICAgICAgICAgICAgICBhbW91bnQ6IHRoaXMuZ2V0QW1vdW50KGNhcnQuY2FydERpc2NvdW50c1tpbmRleF0sIGNhcnQpXG4gICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfVxuICAgICAvLyAgICBjYXJ0LmNhcnREaXNjb3VudHMuZm9yRWFjaChjYXJ0RGlzY291bnQgPT4ge1xuICAgICAvLyAgICAgICAgY2FydERpc2NvdW50LnR5cGUgPSB0aGlzLmZvcm1hdFR5cGUoY2FydERpc2NvdW50LnR5cGUpO1xuICAgICAvLyAgICAgICAgbmV3X3N0YXRlLnB1c2goe1xuICAgICAvLyAgICAgICAgICAgIHR5cGU6IGNhcnREaXNjb3VudC50eXBlLFxuICAgICAvLyAgICAgICAgICAgIG5hbWU6IChjYXJ0RGlzY291bnQudHlwZSAhPSAnY291cG9uJykgPyBjYXJ0RGlzY291bnQubmFtZSA6ICdjb3Vwb24nLFxuICAgICAvLyAgICAgICAgICAgIGFtb3VudDogdGhpcy5nZXRBbW91bnQoY2FydERpc2NvdW50LCBjYXJ0KVxuICAgICAvLyAgICAgICAgfSk7XG4gICAgIC8vICAgIH0pO1xuICAgICAgICAhZm9yQ2FydCAmJiBuZXdfc3RhdGUucHVzaCh0b3RhbCk7XG4gICAgICAgIHJldHVybiBuZXdfc3RhdGU7XG4gICAgfVxuXG4gICAgZ2V0QW1vdW50ID0gKGRpc2NvdW50LCBjYXJ0KTogbnVtYmVyID0+IHtcbiAgICAgICAgaWYgKGRpc2NvdW50LnR5cGUgIT0gJ3NoaXBtZW50JykgcmV0dXJuIGRpc2NvdW50LmFtb3VudDtcbiAgICAgICAgcmV0dXJuIGNhcnQudG90YWxzLnNoaXBwaW5nO1xuICAgIH1cblxuICAgIGZvcm1hdFR5cGUgPSAodHlwZTogc3RyaW5nKTogQ2hlY2tvdXREYXRhVHlwZSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnb3JkZXJfcHJvbW90aW9uJzogcmVzdWx0ID0gJ2Rpc2NvdW50JzsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvcmRlcl9zaGlwcGluZ19wcm9tb3Rpb24nOiByZXN1bHQgPSAnc2hpcG1lbnQnOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29yZGVyX2NvdXBvbl9wcm9tb3Rpb24nOiByZXN1bHQgPSAnY291cG9uJzsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvcmRlcl91bml0X3Byb21vdGlvbic6IHJlc3VsdCA9ICdkaXNjb3VudCc7IGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgICFyZXN1bHQgJiYgKHJlc3VsdCA9IHR5cGUuaW5jbHVkZXMoJ3Byb21vdGlvbicpIHx8IHR5cGUuaW5jbHVkZXMoJ2Rpc2NvdW50JykgPyAnZGlzY291bnQnIDogdHlwZSApXG4gICAgICAgIHJldHVybiByZXN1bHQgfHwgdHlwZTtcbiAgICB9XG59XG4iXX0=
|