ng-easycommerce 0.1.1 → 1.1.2
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/assets/ec-i18n/ct.json +2 -0
- package/assets/ec-i18n/en.json +2 -0
- package/assets/ec-i18n/es.json +2 -0
- package/assets/ec-i18n/fr.json +2 -0
- package/assets/ec-i18n/gl.json +2 -0
- package/assets/ec-i18n/pr.json +2 -0
- package/bundles/ng-easycommerce.umd.js +84 -20
- 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/checkout-ec/checkout-ec.component.js +6 -2
- package/esm2015/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +6 -2
- package/esm2015/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +24 -9
- package/esm2015/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.js +11 -3
- package/esm2015/lib/interfaces/checkout-data.js +1 -1
- package/esm2015/lib/services/cart.service.js +9 -1
- package/esm2015/lib/services/checkout/checkout.service.js +3 -1
- package/esm2015/lib/utils/order-util.service.js +22 -2
- package/esm5/lib/ec-component/account-ec/order-ec/order-ec.component.js +2 -2
- package/esm5/lib/ec-component/checkout-ec/checkout-ec.component.js +6 -2
- package/esm5/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +6 -2
- package/esm5/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +29 -14
- package/esm5/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.js +11 -3
- package/esm5/lib/interfaces/checkout-data.js +1 -1
- package/esm5/lib/services/cart.service.js +13 -1
- package/esm5/lib/services/checkout/checkout.service.js +3 -2
- package/esm5/lib/utils/order-util.service.js +22 -2
- package/fesm2015/ng-easycommerce.js +75 -14
- package/fesm2015/ng-easycommerce.js.map +1 -1
- package/fesm5/ng-easycommerce.js +84 -20
- package/fesm5/ng-easycommerce.js.map +1 -1
- package/lib/ec-component/checkout-ec/checkout-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/checkout-ec/payment-ec/payment-ec.component.d.ts +3 -0
- package/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.d.ts +3 -0
- package/lib/interfaces/checkout-data.d.ts +6 -1
- package/lib/services/cart.service.d.ts +3 -0
- package/lib/utils/order-util.service.d.ts +1 -0
- package/ng-easycommerce.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -218,10 +218,12 @@ let CheckoutEcComponent = class CheckoutEcComponent extends ComponentHelper {
|
|
|
218
218
|
this.goToNextFromAddress = () => this.goToNextSection('address');
|
|
219
219
|
this.isSectionOpen = (stepName) => this.openSections.includes(stepName);
|
|
220
220
|
this.getSummaryLabel = (type, item) => {
|
|
221
|
+
var _a, _b;
|
|
221
222
|
switch (type) {
|
|
222
223
|
case 'productsBeforeDiscounts': return 'products-before-discounts';
|
|
223
224
|
case 'subtotal': return 'subtotal';
|
|
224
225
|
case 'discount': return 'discount';
|
|
226
|
+
case 'paymentMethodAdjustment': return (_b = (_a = item) === null || _a === void 0 ? void 0 : _a.amount, (_b !== null && _b !== void 0 ? _b : 0)) < 0 ? 'payment-method-discount' : 'payment-method-surcharge';
|
|
225
227
|
case 'coupon': return 'coupon';
|
|
226
228
|
case 'lineDiscount': return 'line-discounts';
|
|
227
229
|
case 'shipment': return 'shipment';
|
|
@@ -301,6 +303,8 @@ let CheckoutEcComponent = class CheckoutEcComponent extends ComponentHelper {
|
|
|
301
303
|
return false;
|
|
302
304
|
if ((item.type === 'discount' || item.type === 'coupon') && this.hideDiscounts)
|
|
303
305
|
return false;
|
|
306
|
+
if (item.type === 'paymentMethodAdjustment' && (item.amount === 0 || item.amount == null))
|
|
307
|
+
return false;
|
|
304
308
|
if (item.type === 'taxes' && (this.hideTaxes || item.amount == 0))
|
|
305
309
|
return false;
|
|
306
310
|
if (item.type === 'clientTaxes' && (this.hideTaxes || item.amount == 0))
|
|
@@ -660,9 +664,9 @@ __decorate([
|
|
|
660
664
|
CheckoutEcComponent = __decorate([
|
|
661
665
|
Component({
|
|
662
666
|
selector: 'app-checkout-ec',
|
|
663
|
-
template: "<main class=\"py-4\" id=\"appCheckoutEc\">\n <ng-container *ngIf=\"(checkoutService.loading$ | async) as load\">\n <div class=\"checkout-loading-overlay\" *ngIf=\"load\">\n <div class=\"checkout-loading-card\">\n <app-loading-full-ec></app-loading-full-ec>\n <h5>{{ 'processing-payment' | translate }}</h5>\n </div>\n </div>\n </ng-container>\n <div *ngIf=\"canCheckout; else cartEmpty\">\n <ng-container *ngIf=\"checkoutView === 'single'; else legacyCheckout\">\n <div class=\"container\">\n <div class=\"row checkout-single-row\">\n <div class=\"col-lg-8 col-12\">\n <div class=\"checkout-single\">\n <div class=\"checkout-section\" *ngFor=\"let step of steps; let x=index\"\n [attr.data-step]=\"step.name\"\n [class.is-disabled]=\"!isStepEnabled(step.name)\"\n [class.is-complete]=\"isStepComplete(step.name)\">\n <button class=\"section-header\" type=\"button\"\n [attr.aria-expanded]=\"isSectionOpen(step.name)\"\n [disabled]=\"!isStepEnabled(step.name)\"\n (click)=\"toggleSection(step.name)\">\n <span class=\"section-index\">{{ x + 1 }}</span>\n <span class=\"section-title\">\n {{ getSingleStepTitle(step) | translate }}\n </span>\n <span class=\"section-state\" *ngIf=\"isStepComplete(step.name)\">\n ✓\n </span>\n </button>\n <div class=\"section-summary\" *ngIf=\"isStepComplete(step.name) && !isSectionOpen(step.name)\"\n role=\"button\" tabindex=\"0\"\n (click)=\"toggleSection(step.name)\"\n (keydown.enter)=\"toggleSection(step.name)\"\n (keydown.space)=\"toggleSection(step.name)\">\n <span class=\"section-summary-label\">\n {{ getSingleSummaryLabel(step) }}\n </span>\n <span class=\"section-summary-value\">\n {{ getSingleSummaryValue(step) }}\n </span>\n <span class=\"section-summary-edit\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"toggleSection(step.name); $event.stopPropagation()\"\n (keydown.enter)=\"toggleSection(step.name); $event.stopPropagation()\"\n (keydown.space)=\"toggleSection(step.name); $event.stopPropagation()\">\n {{ 'edit' | translate }}\n </span>\n </div>\n <div class=\"section-body\" [hidden]=\"!isSectionOpen(step.name)\">\n <ng-container [ngSwitch]=\"step.name\">\n <ng-container *ngSwitchCase=\"'address'\">\n <app-dataform-ec [step_id]=\"step.step\" [isLastOne]=\"false\"\n [nextStep]=\"goToNextFromAddress\" [compactAddressView]=\"true\"\n (dirtyChange)=\"onStepDirtyChange('address', $event)\">\n </app-dataform-ec>\n </ng-container>\n <ng-container *ngSwitchCase=\"'shipment'\">\n <app-shipment-ec [step_id]=\"step.step\" [compactShipmentView]=\"true\"\n (advanceStep)=\"goToNextSection(step.name)\"\n (summaryChange)=\"setShipmentSummary($event)\">\n </app-shipment-ec>\n </ng-container>\n <ng-container *ngSwitchCase=\"'payment'\">\n <app-payment-ec [step_id]=\"step.step\" [compactPaymentView]=\"true\"\n (dirtyChange)=\"onStepDirtyChange('payment', $event)\"></app-payment-ec>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-lg-4 col-12\">\n <ng-container *ngIf=\"(checkoutService.state$ | async) as checkoutState\">\n <aside class=\"checkout-summary\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true) || (areAllStepsReady(checkoutState) && !shouldHideFinishButton(checkoutState))\">\n <ng-container *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <h4 class=\"summary-title\">\n {{ checkoutView === 'single' ? ('payment-summary' | translate) : ('purchase-summary' | translate) }}\n </h4>\n <div class=\"summary-totals\" *ngIf=\"(checkoutService.asociatedData$ | async) as data\">\n <ng-container *ngFor=\"let item of getSummaryData(data)\">\n <div class=\"summary-total-row\" *ngIf=\"shouldShowSummaryItem(item)\"\n [class.summary-total-row-total]=\"item.type === 'total'\"\n [class.summary-total-row-tax-info]=\"item.type === 'taxes' && item.taxesIncludedInTotal === true\">\n <span>{{ getSummaryLabel(item.type, item) | translate }}</span>\n <ng-container *ngIf=\"getSummaryAmountView(item) as priceView\">\n <span class=\"summary-total-row-price\"\n [class.summary-total-row-price--discounted]=\"priceView.showOriginalPrice\"\n [class.summary-total-row-price--free]=\"priceView.isFree\">\n <del *ngIf=\"priceView.showOriginalPrice\">\n {{ priceView.originalPrice | ecCurrencySymbol:'alwaysShowDecimals' }}\n </del>\n <strong>\n <ng-container *ngIf=\"priceView.isFree; else summaryValue\">\n {{ 'free' | translate }}\n </ng-container>\n <ng-template #summaryValue>\n {{ priceView.finalPrice | ecCurrencySymbol:'alwaysShowDecimals' }}\n </ng-template>\n </strong>\n </span>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </ng-container>\n <button class=\"btn valid-btn w-100 mt-3 text-uppercase\"\n id=\"checkoutFinishBtn\"\n *ngIf=\"areAllStepsReady(checkoutState) && !shouldHideFinishButton(checkoutState)\"\n (click)=\"endCheckout()\">\n {{ 'finish-checkout' | translate }}\n </button>\n </aside>\n </ng-container>\n </div>\n </div>\n <ng-container *ngIf=\"(checkoutService.asociatedData$ | async) as data\">\n <ng-container *ngIf=\"(checkoutService.state$ | async) as checkoutState\">\n <div class=\"summary-mobile-bar\" [class.is-hidden]=\"hideMobileSummaryBar\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <div class=\"summary-mobile-total\">\n <span class=\"summary-mobile-label\">{{ 'total' | translate }}</span>\n <span class=\"summary-mobile-value\">\n {{ getTotalAmount(data) != null ? (getTotalAmount(data) | ecCurrencySymbol:'alwaysShowDecimals') : '--' }}\n </span>\n </div>\n <button class=\"btn valid-btn summary-mobile-btn\"\n *ngIf=\"!shouldHideFinishButton(checkoutState)\"\n [disabled]=\"!areAllStepsReady(checkoutState)\"\n (click)=\"endCheckout()\">\n {{ 'finish-checkout' | translate }}\n </button>\n </div>\n </ng-container>\n </ng-container>\n <ng-template #unsavedChangesModal>\n <div class=\"modal-content checkout-unsaved-modal-content\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">{{ 'unsaved-changes-title' | translate }}</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\"\n (click)=\"cancelUnsavedClose()\"></button>\n </div>\n <div class=\"modal-body\">\n {{ 'unsaved-changes-body' | translate }}\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-outline-secondary btn-keep-editing\"\n (click)=\"cancelUnsavedClose()\">\n {{ 'unsaved-changes-continue' | translate }}\n </button>\n <button type=\"button\" class=\"btn btn-primary btn-discard\" (click)=\"confirmUnsavedDiscard()\">\n {{ 'unsaved-changes-discard' | translate }}\n </button>\n </div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n <ng-template #legacyCheckout>\n <app-detail-checkout-block-ec></app-detail-checkout-block-ec>\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-md-12 col-12\">\n <div id=\"stepper\" class=\"bs-stepper\" *ngIf=\"(checkoutService.state$ | async) as state\">\n\n <div class=\"row mb-3 position-relative stepperContainer\">\n <ng-container *ngFor=\"let step of steps; let x=index\">\n <div [class]=\"'px-0 col-'+(12 / steps.length)\">\n <div [class]=\"'step ' + getClassToStepper(x)\" [attr.data-target]=\"'#test-l-'+step.step\">\n <button class=\"step-trigger\">\n <span class=\"bs-stepper-circle\">{{x+1}}</span>\n <span class=\"bs-stepper-label\">{{ step.label |translate}}</span>\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n\n <!-- CONTENT -->\n <div class=\"bs-stepper-content margin-bottom-i\">\n <div *ngIf=\"(checkoutService.state$ | async) as checkoutState\">\n <ng-container *ngFor=\"let step of steps; let x=index\">\n <div [id]=\"'test-l-'+step.step\" class=\"content\">\n <app-step-ec [step_id]=\"step.step\" [id_step]=\"x+1\" [previousStep]=\"steps[x-1] ? steps[x-1].name : step.name\" [nextStep]=\"steps[x+1] ? next : endCheckout\" [goBack]=\"goBack\" [lastStep]=\"steps[x+1] ? false : true\"> \n </app-step-ec> \n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"(checkoutService.loading$ | async) as load\">\n <div class=\"col-md-12 col-12\">\n <div *ngIf=\"load\" class=\"d-flex flex-column jusitfy-content-center align-items-center mt-2\">\n <app-loading-full-ec></app-loading-full-ec>\n <h5>{{ 'processing-payment' | translate }}</h5>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </ng-template>\n </div>\n</main>\n\n<ng-template #cartEmpty>\n <div class=\"wrap\">\n <div *ngIf=\"(loading$ | async) as load\">\n <app-loading-full-ec *ngIf=\"canCheckout\"></app-loading-full-ec>\n </div>\n <section id=\"cart\" *ngIf=\"!canCheckout\">\n <section id=\"cart bg-white h-50\">\n <div class=\"d-flex flex-column justify-content-center align-items-center text-center\">\n <h4>{{ 'empty-cart' | translate }}</h4>\n <h5>{{ 'empty-cart-detail' | translate }}</h5>\n </div>\n </section>\n </section>\n </div>\n</ng-template>\n\n<ng-template #loading>\n <app-loading-full-ec></app-loading-full-ec>\n</ng-template>\n\n<ng-template #requireLoginView>\n</ng-template>\n\n\n<!-- <ec-checkout-error></ec-checkout-error> -->\n",
|
|
667
|
+
template: "<main class=\"py-4\" id=\"appCheckoutEc\">\n <ng-container *ngIf=\"(checkoutService.loading$ | async) as load\">\n <div class=\"checkout-loading-overlay\" *ngIf=\"load\">\n <div class=\"checkout-loading-card\">\n <app-loading-full-ec></app-loading-full-ec>\n <h5>{{ 'processing-payment' | translate }}</h5>\n </div>\n </div>\n </ng-container>\n <div *ngIf=\"canCheckout; else cartEmpty\">\n <ng-container *ngIf=\"checkoutView === 'single'; else legacyCheckout\">\n <div class=\"container\">\n <div class=\"row checkout-single-row\">\n <div class=\"col-lg-8 col-12\">\n <div class=\"checkout-single\">\n <div class=\"checkout-section\" *ngFor=\"let step of steps; let x=index\"\n [attr.data-step]=\"step.name\"\n [class.is-disabled]=\"!isStepEnabled(step.name)\"\n [class.is-complete]=\"isStepComplete(step.name)\">\n <button class=\"section-header\" type=\"button\"\n [attr.aria-expanded]=\"isSectionOpen(step.name)\"\n [disabled]=\"!isStepEnabled(step.name)\"\n (click)=\"toggleSection(step.name)\">\n <span class=\"section-index\">{{ x + 1 }}</span>\n <span class=\"section-title\">\n {{ getSingleStepTitle(step) | translate }}\n </span>\n <span class=\"section-state\" *ngIf=\"isStepComplete(step.name)\">\n ✓\n </span>\n </button>\n <div class=\"section-summary\" *ngIf=\"isStepComplete(step.name) && !isSectionOpen(step.name)\"\n role=\"button\" tabindex=\"0\"\n (click)=\"toggleSection(step.name)\"\n (keydown.enter)=\"toggleSection(step.name)\"\n (keydown.space)=\"toggleSection(step.name)\">\n <span class=\"section-summary-label\">\n {{ getSingleSummaryLabel(step) }}\n </span>\n <span class=\"section-summary-value\">\n {{ getSingleSummaryValue(step) }}\n </span>\n <span class=\"section-summary-edit\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"toggleSection(step.name); $event.stopPropagation()\"\n (keydown.enter)=\"toggleSection(step.name); $event.stopPropagation()\"\n (keydown.space)=\"toggleSection(step.name); $event.stopPropagation()\">\n {{ 'edit' | translate }}\n </span>\n </div>\n <div class=\"section-body\" [hidden]=\"!isSectionOpen(step.name)\">\n <ng-container [ngSwitch]=\"step.name\">\n <ng-container *ngSwitchCase=\"'address'\">\n <app-dataform-ec [step_id]=\"step.step\" [isLastOne]=\"false\"\n [nextStep]=\"goToNextFromAddress\" [compactAddressView]=\"true\"\n (dirtyChange)=\"onStepDirtyChange('address', $event)\">\n </app-dataform-ec>\n </ng-container>\n <ng-container *ngSwitchCase=\"'shipment'\">\n <app-shipment-ec [step_id]=\"step.step\" [compactShipmentView]=\"true\"\n (advanceStep)=\"goToNextSection(step.name)\"\n (summaryChange)=\"setShipmentSummary($event)\">\n </app-shipment-ec>\n </ng-container>\n <ng-container *ngSwitchCase=\"'payment'\">\n <app-payment-ec [step_id]=\"step.step\" [compactPaymentView]=\"true\"\n (dirtyChange)=\"onStepDirtyChange('payment', $event)\"></app-payment-ec>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-lg-4 col-12\">\n <ng-container *ngIf=\"(checkoutService.state$ | async) as checkoutState\">\n <aside class=\"checkout-summary\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true) || (areAllStepsReady(checkoutState) && !shouldHideFinishButton(checkoutState))\">\n <ng-container *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <h4 class=\"summary-title\">\n {{ checkoutView === 'single' ? ('payment-summary' | translate) : ('purchase-summary' | translate) }}\n </h4>\n <div class=\"summary-totals\" *ngIf=\"(checkoutService.asociatedData$ | async) as data\">\n <ng-container *ngFor=\"let item of getSummaryData(data)\">\n <div class=\"summary-total-row\" *ngIf=\"shouldShowSummaryItem(item)\"\n [class.summary-total-row-total]=\"item.type === 'total'\"\n [class.summary-total-row-tax-info]=\"item.type === 'taxes' && item.taxesIncludedInTotal === true\">\n <span>\n {{ getSummaryLabel(item.type, item) | translate }}\n <ng-container *ngIf=\"item.type === 'paymentMethodAdjustment' && item.name && item.name !== 'discount' && item.name !== 'surcharge'\">\n \u00B7 {{ item.name }}\n </ng-container>\n </span>\n <ng-container *ngIf=\"getSummaryAmountView(item) as priceView\">\n <span class=\"summary-total-row-price\"\n [class.summary-total-row-price--discounted]=\"priceView.showOriginalPrice\"\n [class.summary-total-row-price--free]=\"priceView.isFree\">\n <del *ngIf=\"priceView.showOriginalPrice\">\n {{ priceView.originalPrice | ecCurrencySymbol:'alwaysShowDecimals' }}\n </del>\n <strong>\n <ng-container *ngIf=\"priceView.isFree; else summaryValue\">\n {{ 'free' | translate }}\n </ng-container>\n <ng-template #summaryValue>\n {{ priceView.finalPrice | ecCurrencySymbol:'alwaysShowDecimals' }}\n </ng-template>\n </strong>\n </span>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </ng-container>\n <button class=\"btn valid-btn w-100 mt-3 text-uppercase\"\n id=\"checkoutFinishBtn\"\n *ngIf=\"areAllStepsReady(checkoutState) && !shouldHideFinishButton(checkoutState)\"\n (click)=\"endCheckout()\">\n {{ 'finish-checkout' | translate }}\n </button>\n </aside>\n </ng-container>\n </div>\n </div>\n <ng-container *ngIf=\"(checkoutService.asociatedData$ | async) as data\">\n <ng-container *ngIf=\"(checkoutService.state$ | async) as checkoutState\">\n <div class=\"summary-mobile-bar\" [class.is-hidden]=\"hideMobileSummaryBar\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <div class=\"summary-mobile-total\">\n <span class=\"summary-mobile-label\">{{ 'total' | translate }}</span>\n <span class=\"summary-mobile-value\">\n {{ getTotalAmount(data) != null ? (getTotalAmount(data) | ecCurrencySymbol:'alwaysShowDecimals') : '--' }}\n </span>\n </div>\n <button class=\"btn valid-btn summary-mobile-btn\"\n *ngIf=\"!shouldHideFinishButton(checkoutState)\"\n [disabled]=\"!areAllStepsReady(checkoutState)\"\n (click)=\"endCheckout()\">\n {{ 'finish-checkout' | translate }}\n </button>\n </div>\n </ng-container>\n </ng-container>\n <ng-template #unsavedChangesModal>\n <div class=\"modal-content checkout-unsaved-modal-content\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">{{ 'unsaved-changes-title' | translate }}</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\"\n (click)=\"cancelUnsavedClose()\"></button>\n </div>\n <div class=\"modal-body\">\n {{ 'unsaved-changes-body' | translate }}\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-outline-secondary btn-keep-editing\"\n (click)=\"cancelUnsavedClose()\">\n {{ 'unsaved-changes-continue' | translate }}\n </button>\n <button type=\"button\" class=\"btn btn-primary btn-discard\" (click)=\"confirmUnsavedDiscard()\">\n {{ 'unsaved-changes-discard' | translate }}\n </button>\n </div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n <ng-template #legacyCheckout>\n <app-detail-checkout-block-ec></app-detail-checkout-block-ec>\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-md-12 col-12\">\n <div id=\"stepper\" class=\"bs-stepper\" *ngIf=\"(checkoutService.state$ | async) as state\">\n\n <div class=\"row mb-3 position-relative stepperContainer\">\n <ng-container *ngFor=\"let step of steps; let x=index\">\n <div [class]=\"'px-0 col-'+(12 / steps.length)\">\n <div [class]=\"'step ' + getClassToStepper(x)\" [attr.data-target]=\"'#test-l-'+step.step\">\n <button class=\"step-trigger\">\n <span class=\"bs-stepper-circle\">{{x+1}}</span>\n <span class=\"bs-stepper-label\">{{ step.label |translate}}</span>\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n\n <!-- CONTENT -->\n <div class=\"bs-stepper-content margin-bottom-i\">\n <div *ngIf=\"(checkoutService.state$ | async) as checkoutState\">\n <ng-container *ngFor=\"let step of steps; let x=index\">\n <div [id]=\"'test-l-'+step.step\" class=\"content\">\n <app-step-ec [step_id]=\"step.step\" [id_step]=\"x+1\" [previousStep]=\"steps[x-1] ? steps[x-1].name : step.name\" [nextStep]=\"steps[x+1] ? next : endCheckout\" [goBack]=\"goBack\" [lastStep]=\"steps[x+1] ? false : true\"> \n </app-step-ec> \n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"(checkoutService.loading$ | async) as load\">\n <div class=\"col-md-12 col-12\">\n <div *ngIf=\"load\" class=\"d-flex flex-column jusitfy-content-center align-items-center mt-2\">\n <app-loading-full-ec></app-loading-full-ec>\n <h5>{{ 'processing-payment' | translate }}</h5>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </ng-template>\n </div>\n</main>\n\n<ng-template #cartEmpty>\n <div class=\"wrap\">\n <div *ngIf=\"(loading$ | async) as load\">\n <app-loading-full-ec *ngIf=\"canCheckout\"></app-loading-full-ec>\n </div>\n <section id=\"cart\" *ngIf=\"!canCheckout\">\n <section id=\"cart bg-white h-50\">\n <div class=\"d-flex flex-column justify-content-center align-items-center text-center\">\n <h4>{{ 'empty-cart' | translate }}</h4>\n <h5>{{ 'empty-cart-detail' | translate }}</h5>\n </div>\n </section>\n </section>\n </div>\n</ng-template>\n\n<ng-template #loading>\n <app-loading-full-ec></app-loading-full-ec>\n</ng-template>\n\n<ng-template #requireLoginView>\n</ng-template>\n\n\n<!-- <ec-checkout-error></ec-checkout-error> -->\n",
|
|
664
668
|
styles: ["@import url(https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600;700&family=Roboto:wght@400;500;700&family=Source+Sans+Pro:wght@400;600;700&display=swap);.btn.valid-btn{background-color:var(--ec-primary,#000);border-color:var(--ec-primary,#000);color:var(--ec-primary-contrast,#fff);margin-right:12px}.btn.valid-btn:disabled,.btn.valid-btn[disabled]{background-color:var(--ec-primary-muted,#6c757d);border-color:var(--ec-primary-muted,#6c757d);color:var(--ec-primary-contrast,#fff);opacity:.8}.switch{position:relative;display:inline-block;width:16%!important;height:34px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;transition:.4s}.slider:before{position:absolute;content:\"\";height:26px;width:26px;left:4px;bottom:4px;background-color:#fff;transition:.4s}input:checked+.slider{background-color:#000}input:focus+.slider{box-shadow:0 0 1px #000}input:checked+.slider:before{transform:translateX(26px)}.slider.round{border-radius:34px}.slider.round:before{border-radius:50%}.bg-white{background-color:#fff}#appCheckoutEc,#appCheckoutEc *{font-family:var(--ec-checkout-font, \"Source Sans Pro\", Roboto, \"Open Sans\", \"Helvetica Neue\", Arial, sans-serif)!important}.active .bs-stepper-circle{background-color:#000}.margin-bottom-i{margin-bottom:3%}.Main{margin-top:140px;min-height:60vh}.btn:disabled{opacity:.65}.co-data-icon{height:50px;-o-object-fit:contain;object-fit:contain}.checkout-btn-container{display:flex;justify-content:space-between}.loading-container-line{display:flex;flex-direction:row;justify-content:center}.stepperContainer::after{content:\"\";border-top:1px solid #000;position:absolute;width:95%;top:48%;left:10px;margin:auto;z-index:-1}.bs-stepper .step-trigger{background-color:#fff}.bs-stepper .step-trigger.disabled,.bs-stepper .step-trigger:disabled{opacity:1}@media screen and (max-width:992px){.stepperContainer::after{display:none}.step{text-align:left!important}}@media screen and (max-width:576px){.step{text-align:center!important}.resumen i{font-size:2em}.resumen strong{font-size:.8em}.resumen span{font-size:1em}}@media screen and (max-width:768px){.step-trigger .bs-stepper-label{font-size:.75rem}.content.fade.active.dstepper-block{padding-top:1rem}}.checkout-single{display:flex;flex-direction:column;gap:1rem;--ec-accent:#000;--ec-accent-contrast:#fff;--ec-accent-soft:#f5f8ff;--ec-border:#e3e3e3;--ec-muted:#666;--ec-surface:#fff;--ec-surface-alt:#fafafa;--ec-success:#16a34a}:host ::ng-deep .checkout-unsaved-modal .modal-dialog{max-width:420px;margin:1.5rem auto}:host ::ng-deep .checkout-unsaved-modal-content{border-radius:10px;border:1px solid rgba(0,0,0,.08);box-shadow:0 18px 36px rgba(0,0,0,.18)}:host ::ng-deep .checkout-unsaved-modal-content .modal-header{border-bottom:0;padding:1.1rem 1.25rem .5rem;align-items:flex-start}:host ::ng-deep .checkout-unsaved-modal-content .modal-title{font-size:1.05rem;font-weight:600;color:#111}:host ::ng-deep .checkout-unsaved-modal-content .modal-body{padding:.4rem 1.25rem 1rem;color:#555;font-size:.95rem;line-height:1.4}:host ::ng-deep .checkout-unsaved-modal-content .modal-footer{border-top:0;padding:0 1.25rem 1.25rem;display:flex;gap:.6rem;justify-content:flex-end}:host ::ng-deep .checkout-unsaved-modal-content .btn-keep-editing{border-color:#d0d5dd;color:#344054;background:#fff;font-weight:600}:host ::ng-deep .checkout-unsaved-modal-content .btn-discard{background-color:var(--ec-primary,#000);border-color:var(--ec-primary,#000);color:var(--ec-primary-contrast,#fff);font-weight:600}.checkout-section{border:1px solid var(--ec-border);border-radius:6px;background:var(--ec-surface);overflow:hidden}.checkout-single .checkout-section{overflow:visible}.checkout-section.is-disabled{opacity:.6}.checkout-section.is-complete{border-color:var(--ec-success)}.section-header{width:100%;display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:1rem;background:var(--ec-surface-alt);border:0;text-align:left}.checkout-section.is-complete .section-header{background:rgba(22,163,74,.08)}.checkout-section.is-complete .section-index,.checkout-section.is-complete .section-state{background:var(--ec-success);color:#fff}.section-index{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:var(--ec-accent);color:var(--ec-accent-contrast);font-weight:600}.section-summary{display:-ms-grid;display:grid;-ms-grid-columns:1fr auto;grid-template-columns:1fr auto;-ms-grid-rows:auto auto;grid-template-rows:auto auto;gap:.2rem .75rem;align-items:center;padding:.5rem 1rem .85rem;font-size:.9rem;color:var(--ec-muted)}.section-summary-label{font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:var(--ec-muted)}.section-summary-value{font-weight:600;color:#111;-ms-grid-column:1;-ms-grid-column-span:1;grid-column:1/2}.section-summary-edit{-ms-grid-column:2;-ms-grid-column-span:1;grid-column:2/3;-ms-grid-row:1;-ms-grid-row-span:2;grid-row:1/3;-ms-grid-row-align:center;align-self:center;-ms-grid-column-align:end;justify-self:end;font-size:.8rem;font-weight:700;color:var(--ec-accent,#000);text-transform:uppercase;letter-spacing:.04em}.section-summary-edit:focus{outline:2px solid var(--ec-accent,#000);outline-offset:2px;border-radius:4px}.section-title{flex:1;font-weight:600}.section-state{width:32px;height:32px;border-radius:50%;background:#e7f6ea;color:#2f7a32;display:inline-flex;align-items:center;justify-content:center;font-size:.85rem;font-weight:700;line-height:1}.section-body{padding:1rem 1.25rem}.section-actions{display:flex;justify-content:flex-end;margin-top:1rem}.checkout-summary{border:1px solid #e3e3e3;border-radius:6px;padding:1rem;background:#fff;position:-webkit-sticky;position:sticky;top:var(--ec-checkout-sticky-top,1rem)}.summary-title{font-weight:600;margin-bottom:1rem}.checkout-single .valid-btn{font-size:1rem;padding:.7rem 1.1rem;letter-spacing:.02em;text-transform:uppercase}.checkout-single #checkoutFinishBtn,.checkout-single .summary-mobile-btn{background-color:var(--ec-primary,#000);border-color:var(--ec-primary,#000);color:var(--ec-primary-contrast,#fff);text-transform:uppercase}.checkout-single #checkoutFinishBtn:disabled,.checkout-single #checkoutFinishBtn[disabled],.checkout-single .summary-mobile-btn:disabled,.checkout-single .summary-mobile-btn[disabled]{background-color:var(--ec-primary-muted,#6c757d);border-color:var(--ec-primary-muted,#6c757d);color:var(--ec-primary-contrast,#fff);opacity:.8}.summary-products{border-bottom:1px solid #eee;margin-bottom:1rem;padding-bottom:1rem}.summary-product{display:-ms-grid;display:grid;-ms-grid-columns:1fr auto;grid-template-columns:1fr auto;gap:.25rem .5rem;align-items:center;padding:.35rem 0;border-bottom:1px solid #f1f1f1}.summary-product:last-child{border-bottom:0}.summary-product-main{display:flex;flex-direction:column;gap:.2rem;min-width:0}.summary-product-name{font-weight:500;font-size:.95rem;color:#222;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.summary-product-qty{font-size:.85rem;color:#666}.summary-product-price{font-weight:600;font-size:.9rem;color:#222}.summary-totals{display:flex;flex-direction:column;gap:.5rem;padding-top:.75rem}.summary-total-row{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;font-weight:500;font-size:.95rem;color:#555}.summary-total-row>span:first-child{min-width:0}.summary-total-row-total{font-size:1.1rem;font-weight:700;color:#111;margin-top:.5rem;padding-top:.75rem;border-top:1px solid #e5e7eb}.summary-total-row-tax-info{order:1;font-size:.82rem;font-weight:400;color:#6b7280;gap:.75rem}.summary-total-row-tax-info .summary-total-row-price,.summary-total-row-tax-info .summary-total-row-price strong{font-weight:400;color:#6b7280}.summary-total-row-price{flex:0 0 auto;white-space:nowrap;display:inline-flex;flex-direction:column;align-items:flex-end;gap:.15rem;text-align:right}.summary-total-row-price del{color:#888;font-weight:500;text-decoration-thickness:1px}.summary-total-row-price strong{font-weight:700}.summary-total-row-price--free strong{color:var(--ec-success,#198754)}.summary-total-row-price--discounted strong{color:#111}.summary-mobile-bar{display:none}@media screen and (max-width:992px){.checkout-summary{position:static;margin-top:.75rem}.checkout-single{padding-bottom:20px}.summary-mobile-bar{position:fixed;left:0;right:0;bottom:0;z-index:var(--ec-checkout-summary-mobile-z-index,10040);display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.6rem .9rem calc(.6rem + env(safe-area-inset-bottom));background:#fff;border-top:1px solid #e5e7eb;box-shadow:0 -6px 18px rgba(15,23,42,.08)}.summary-mobile-total{display:flex;flex-direction:column;gap:.2rem}.summary-mobile-label{font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:#6b7280}.summary-mobile-value{font-weight:700;font-size:1.05rem;color:#111827}.summary-mobile-btn{padding:.7rem 1.1rem;font-size:.95rem;white-space:nowrap}}:host-context(.modal-open) .summary-mobile-bar{z-index:var(--ec-checkout-summary-mobile-z-index-modal-open,1030)}.checkout-loading-overlay{position:fixed;inset:0;background:rgba(17,24,39,.45);display:flex;align-items:center;justify-content:center;z-index:var(--ec-checkout-overlay-z-index,10050);padding:1.5rem}.checkout-loading-card{background:#fff;border-radius:12px;padding:1.5rem 2rem;box-shadow:0 20px 40px rgba(0,0,0,.2);display:flex;flex-direction:column;align-items:center;gap:.75rem;text-align:center}.checkout-loading-card h5{margin:0;font-weight:600;color:#111}.summary-mobile-bar.is-hidden{display:none}"]
|
|
665
669
|
})
|
|
666
670
|
], CheckoutEcComponent);
|
|
667
671
|
export { CheckoutEcComponent };
|
|
668
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC9jaGVja291dC1lYy9jaGVja291dC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEssT0FBTyxPQUFPLE1BQU0sWUFBWSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBK0IsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU94RCxJQUFhLG1CQUFtQixHQUFoQyxNQUFhLG1CQUFvQixTQUFRLGVBQWU7SUF1Q3BELFlBQW1CLGVBQWdDLEVBQVMsYUFBMkIsRUFDNUUsTUFBYyxFQUFTLFdBQXdCLEVBQVMsZUFBZ0MsRUFDeEYsY0FBb0MsRUFBUyxNQUFpQixFQUM3RCxVQUFzQixFQUFVLFlBQTRCLEVBQzVELG9CQUFpRCxFQUMvQyxHQUFlO1FBQ3pCLEtBQUssRUFBRSxDQUFDO1FBTk8sb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQVMsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDNUUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ3hGLG1CQUFjLEdBQWQsY0FBYyxDQUFzQjtRQUFTLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDN0QsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQUM1RCx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQTZCO1FBQy9DLFFBQUcsR0FBSCxHQUFHLENBQVk7UUF6Q3RCLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDcEQsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFJdEIsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUNsQixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGlCQUFZLEdBQXFCLFFBQVEsQ0FBQztRQUMxQyw0QkFBdUIsR0FBbUIsSUFBSSxDQUFDO1FBQzlDLHVCQUFrQixHQUEwQixJQUFJLENBQUM7UUFDbEQsaUJBQVksR0FBYSxFQUFFLENBQUM7UUFDM0IsMEJBQXFCLEdBQWtCLElBQUksQ0FBQztRQUM1QyxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQ3BDLHdCQUFtQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDekMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixvQkFBZSxHQUErQyxJQUFJLENBQUM7UUFDbkUseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLG9CQUFlLEdBQWdDLElBQUksQ0FBQztRQUNwRCxtQkFBYyxHQUF1QixJQUFJLENBQUM7UUFDMUMsaUJBQVksR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztRQUMzQyxhQUFRLEdBQXNCLElBQUksQ0FBQztRQUNsQyx5QkFBb0IsR0FBa0IsSUFBSSxDQUFDO1FBRTNDLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUU3QixhQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQXNDN0Msc0JBQWlCLEdBQUcsR0FBRyxFQUFFO1lBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsY0FBYyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLHlCQUF5QixRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTFCLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFO2dCQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQy9DO1FBQ0wsQ0FBQyxDQUFBO1FBc0ZELHVCQUFrQixHQUFHLEdBQUcsRUFBRTs7WUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxLQUFLLEdBQVksRUFBRSxDQUFDO1lBQ3hCLHNDQUFzQztZQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDaEMsT0FBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSw2QkFBNkIsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDdEYsT0FBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSw0QkFBNEIsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDcEY7K0NBQ21DO1lBQ25DLG9CQUFvQjtZQUNwQixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO2dCQUN6QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDckI7WUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSw2QkFBNkIsS0FBSSxJQUFJLElBQUksT0FBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSw0QkFBNEIsS0FBSSxJQUFJLENBQUMsRUFBRTtnQkFDeEksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQ2hGLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQSxDQUFDLENBQUMsQ0FDdkMsQ0FBQzthQUNMO1FBQ0wsQ0FBQyxDQUFBO1FBRUQsV0FBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFdkMsZ0JBQVcsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFekUsZ0JBQVcsR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV0RSxtQkFBYyxHQUFHLENBQUMsUUFBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFakcsc0JBQWlCLEdBQUcsQ0FBQyxRQUFnQixFQUFFLE9BQWdCLEVBQUUsRUFBRTtZQUN2RCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFBO1FBRUQsZ0JBQVcsR0FBRyxHQUFHLEVBQUU7WUFDZixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FDaEMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxFQUNqRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQ3BELENBQUE7UUFDTCxDQUFDLENBQUE7UUFFRCxlQUFVLEdBQUcsR0FBRyxFQUFFO1lBQ2QsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxFQUFFO29CQUM1QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUU7d0JBQzNELE1BQU0sRUFBRSxJQUFJO3dCQUNaLFNBQVMsRUFBRSxJQUFJO3FCQUNsQixDQUFDLENBQUE7aUJBQ0w7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO2lCQUNwQjtZQUNMLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNULDJCQUEyQjtRQUMvQixDQUFDLENBQUE7UUFFRCxTQUFJLEdBQUcsR0FBRyxFQUFFO1lBQ1IsMkJBQTJCO1lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUE7WUFDbkIsMkJBQTJCO1lBQzNCLE1BQU0sQ0FBQyxRQUFRLENBQUM7Z0JBQ1osR0FBRyxFQUFFLENBQUM7Z0JBQ04sUUFBUSxFQUFFLFFBQVE7YUFDckIsQ0FBQyxDQUFBO1FBQ04sQ0FBQyxDQUFDO1FBRUYsVUFBSyxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU5RCxZQUFPLEdBQUcsQ0FBQyxTQUF1QixFQUFFLEVBQUU7WUFDbEMsUUFBUSxTQUFTLENBQUMsSUFBSSxFQUFFO2dCQUNwQixLQUFLLFFBQVEsQ0FBQyxDQUFDLE9BQU8sMEJBQTBCLENBQUM7Z0JBQ2pELEtBQUssVUFBVSxDQUFDLENBQUMsT0FBTyw0QkFBNEIsQ0FBQztnQkFDckQsS0FBSyxVQUFVLENBQUMsQ0FBQyxPQUFPLDZCQUE2QixDQUFDO2dCQUN0RCxLQUFLLFVBQVUsQ0FBQyxDQUFDLE9BQU8sNEJBQTRCLENBQUM7Z0JBQ3JELEtBQUssT0FBTyxDQUFDLENBQUMsT0FBTywrQkFBK0IsQ0FBQztnQkFDckQsT0FBTyxDQUFDLENBQUMsT0FBTywrQkFBK0IsQ0FBQzthQUNuRDtRQUNMLENBQUMsQ0FBQTtRQUVELG9CQUFlLEdBQUcsR0FBRyxFQUFFOztZQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNoQiwwQ0FBMEM7WUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUE7WUFDOUQsbUNBQW1DO1lBQ25DLE9BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsNkJBQTZCLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUE7WUFDcEgsa0NBQWtDO1lBQ2xDLE9BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsNEJBQTRCLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFBO1lBQzFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxpQ0FBTSxJQUFJLEtBQUUsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLElBQUcsQ0FBQyxDQUFDO1lBQzdFLHlCQUF5QjtZQUN6QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1QztRQUNMLENBQUMsQ0FBQTtRQUVELGdCQUFXLEdBQUcsQ0FBQyxVQUFrQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO1FBRXJHLHNCQUFpQixHQUFHLENBQUMsS0FBYSxFQUFVLEVBQUU7WUFDMUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO2dCQUNaLE9BQU8sT0FBTyxDQUFBO2FBQ2pCO2lCQUFNO2dCQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFBO2FBQzVEO1FBQ0wsQ0FBQyxDQUFBO1FBRUQscUJBQWdCLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxRQUFRLENBQUM7UUFFeEQsdUJBQWtCLEdBQUcsQ0FBQyxJQUFnQyxFQUFFLEVBQUUsZUFDdEQsT0FBQSxPQUFBLElBQUksMENBQUUsSUFBSSxNQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxPQUFDLElBQUksMENBQUUsS0FBSyxDQUFBLEVBQUEsQ0FBQztRQUVqRSwwQkFBcUIsR0FBRyxDQUFDLElBQWdDLEVBQUUsRUFBRTs7WUFDekQsSUFBSSxPQUFBLElBQUksMENBQUUsSUFBSSxNQUFLLFNBQVM7Z0JBQUUsT0FBTyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNuRSxJQUFJLE9BQUEsSUFBSSwwQ0FBRSxJQUFJLE1BQUssVUFBVTtnQkFBRSxPQUFPLE9BQUEsSUFBSSxDQUFDLGVBQWUsMENBQUUsS0FBSyxLQUFJLEVBQUUsQ0FBQztZQUN4RSxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUMsQ0FBQTtRQUVELDBCQUFxQixHQUFHLENBQUMsSUFBZ0MsRUFBRSxFQUFFOztZQUN6RCxJQUFJLE9BQUEsSUFBSSwwQ0FBRSxJQUFJLE1BQUssVUFBVTtnQkFBRSxPQUFPLE9BQUEsSUFBSSxDQUFDLGVBQWUsMENBQUUsTUFBTSxLQUFJLEVBQUUsQ0FBQztZQUN6RSxPQUFPLElBQUksQ0FBQyxjQUFjLE9BQUMsSUFBSSwwQ0FBRSxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUE7UUFFRCxrQkFBYSxHQUFHLENBQUMsUUFBZ0IsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztZQUNuRSxJQUFJLEtBQUssSUFBSSxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxRQUFRLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtnQkFDMUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3RDO1lBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUE7UUFFRCxrQkFBYSxHQUFHLENBQUMsUUFBZ0IsRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztnQkFBRSxPQUFPO1lBQzFDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xELElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtnQkFDWixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDMUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVEsQ0FBQztvQkFDckMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO29CQUN2RCxPQUFPO2lCQUNWO2dCQUNELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN0QztpQkFBTTtnQkFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUMxQztnQkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ2xDO1FBQ0wsQ0FBQyxDQUFBO1FBRUQsb0JBQWUsR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtZQUNuQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUM7WUFDbkUsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQUUsT0FBTztZQUNuRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDNUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFBO1FBRUQsd0JBQW1CLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1RCxrQkFBYSxHQUFHLENBQUMsUUFBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFM0Usb0JBQWUsR0FBRyxDQUFDLElBQTBCLEVBQUUsSUFBbUIsRUFBRSxFQUFFO1lBQ2xFLFFBQVEsSUFBSSxFQUFFO2dCQUNWLEtBQUsseUJBQXlCLENBQUMsQ0FBQyxPQUFPLDJCQUEyQixDQUFDO2dCQUNuRSxLQUFLLFVBQVUsQ0FBQyxDQUFDLE9BQU8sVUFBVSxDQUFDO2dCQUNuQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLE9BQU8sVUFBVSxDQUFDO2dCQUNuQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLE9BQU8sUUFBUSxDQUFDO2dCQUMvQixLQUFLLGNBQWMsQ0FBQyxDQUFDLE9BQU8sZ0JBQWdCLENBQUM7Z0JBQzdDLEtBQUssVUFBVSxDQUFDLENBQUMsT0FBTyxVQUFVLENBQUM7Z0JBQ25DLEtBQUssT0FBTztvQkFDUixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsb0JBQW9CLEtBQUssSUFBSTt3QkFBRSxPQUFPLHlCQUF5QixDQUFDO29CQUNqRixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsb0JBQW9CLEtBQUssS0FBSzt3QkFBRSxPQUFPLE9BQU8sQ0FBQztvQkFDaEUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUMzRCxLQUFLLGFBQWEsQ0FBQyxDQUFDLE9BQU8sYUFBYSxDQUFDO2dCQUN6QyxLQUFLLE9BQU8sQ0FBQyxDQUFDLE9BQU8sT0FBTyxDQUFDO2dCQUM3QixPQUFPLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQzthQUN4QjtRQUNMLENBQUMsQ0FBQTtRQUVELG1CQUFjLEdBQUcsQ0FBQyxJQUFvQixFQUFFLEVBQUU7O1lBQ3RDLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxRQUFRO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ2hELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQztZQUN2QixNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQzlDLE1BQU0sV0FBVyxTQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLDBDQUFFLE1BQU0sQ0FBQztnQkFDNUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG1CQUFtQixPQUFDLFdBQVcsMENBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzVGLElBQUksY0FBYyxJQUFJLElBQUksRUFBRTtvQkFDeEIsTUFBTSxZQUFZLEdBQWlCO3dCQUMvQixJQUFJLEVBQUUsVUFBVTt3QkFDaEIsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLE1BQU0sRUFBRSxjQUFjO3FCQUN6QixDQUFDO29CQUNGLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO29CQUN4RSxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsRUFBRTt3QkFDbkIsV0FBVyxHQUFHLENBQUMsR0FBRyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7cUJBQ2hEO3lCQUFNO3dCQUNILHdEQUF3RDt3QkFDeEQsMERBQTBEO3dCQUMxRCx1QkFBdUI7d0JBQ3ZCLFdBQVcsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsWUFBWSxFQUFFLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3FCQUN2RztpQkFDSjthQUNKO1lBQ0QsV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUM7aUJBQzdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUsseUJBQXlCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsQ0FBQztZQUU3RixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQzVDLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxJQUFJLENBQzlELENBQUM7WUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxXQUFXLENBQUM7WUFFOUMsTUFBTSxvQkFBb0IsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ25ELENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsb0JBQW9CLEtBQUssSUFBSSxDQUFDLENBQ2pFLENBQUM7WUFDRixNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1lBRWpGLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQztnQkFBRSxPQUFPLENBQUMsR0FBRyxvQkFBb0IsRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDO1lBRTFFLE9BQU87Z0JBQ0gsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBQ2hELEdBQUcsYUFBYTtnQkFDaEIsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQzthQUNoRCxDQUFDO1FBQ04sQ0FBQyxDQUFBO1FBRUQseUJBQW9CLEdBQUcsQ0FBQyxJQUFrQixFQUFFLEVBQUU7O1lBQzFDLE1BQU0sc0JBQXNCLEdBQUcsT0FBQSxJQUFJLDBDQUFFLElBQUksTUFBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkcsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxPQUFDLElBQUksMENBQUUsTUFBTSxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDMUYsQ0FBQyxDQUFBO1FBRUQsbUJBQWMsR0FBRyxDQUFDLElBQW9CLEVBQUUsRUFBRTtZQUN0QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUNyRCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQztZQUNsRSxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQy9DLENBQUMsQ0FBQTtRQUVELDBCQUFxQixHQUFHLENBQUMsSUFBa0IsRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQ3hCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyx5QkFBeUIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGNBQWM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDMUYsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQzNGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQzdGLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQ2hGLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQ3RGLElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQztnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUN2RCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDLENBQUE7UUFFRCwyQkFBc0IsR0FBRyxHQUFHLEVBQUU7O1lBQzFCLE1BQU0sUUFBUSxHQUFRLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLFNBQWdCLENBQUMsQ0FBQztZQUN6RSxNQUFNLE9BQU8sR0FBRyxPQUFBLFFBQVEsMENBQUUsZUFBZSxrQkFBSSxRQUFRLDBDQUFFLFFBQVEsMENBQUUsZUFBZSxDQUFBLENBQUM7WUFDakYsTUFBTSxPQUFPLEdBQUcsT0FBQSxPQUFPLDBDQUFFLGNBQWMsWUFBSSxPQUFPLDBDQUFFLE9BQU8sQ0FBQSxJQUFJLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDN0UsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFBO1FBRUQsbUJBQWMsR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRTs7WUFDbEMsTUFBTSxRQUFRLEdBQVEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsUUFBZSxDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTyxFQUFFLENBQUM7WUFDekIsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO2dCQUN4QixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsZUFBZSxpQkFBSSxRQUFRLDBDQUFFLFFBQVEsMENBQUUsZUFBZSxDQUFBLFdBQUksUUFBUSwwQ0FBRSxlQUFlLENBQUEsQ0FBQztnQkFDN0csSUFBSSxDQUFDLE9BQU87b0JBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO3FCQUM1RixNQUFNLENBQUMsT0FBTyxDQUFDO3FCQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3JEO1lBQ0QsSUFBSSxRQUFRLEtBQUssVUFBVSxFQUFFO2dCQUN6QixNQUFNLFdBQVcsR0FBRyxPQUFBLFFBQVEsQ0FBQyxNQUFNLDBDQUFFLElBQUksS0FBSSxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztnQkFDeEUsTUFBTSxhQUFhLEdBQUcsT0FBQSxRQUFRLENBQUMsUUFBUSwwQ0FBRSxJQUFJLEtBQUksUUFBUSxDQUFDLGFBQWEsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUNwSCxPQUFPLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbkU7WUFDRCxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7Z0JBQ3hCLE9BQU8sUUFBUSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQzthQUMvQztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFBO1FBRUQsdUJBQWtCLEdBQUcsQ0FBQyxPQUE0QyxFQUFFLEVBQUU7O1lBQ2xFLE1BQU0sUUFBUSxHQUFHLE9BQU8sT0FBQyxPQUFPLDBDQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sU0FBUyxHQUFHLE9BQU8sT0FBQyxPQUFPLDBDQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbEUsQ0FBQyxDQUFBO1FBRU8sOEJBQXlCLEdBQUcsR0FBa0IsRUFBRTs7WUFDcEQsTUFBTSxnQkFBZ0IsR0FBUSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxVQUFpQixDQUFDLENBQUM7WUFDbEYsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLHlCQUNoRCxnQkFBZ0IsMENBQUUsYUFBYSxtREFDL0IsZ0JBQWdCLDBDQUFFLFFBQVEsMENBQUUsYUFBYSwyREFDekMsZ0JBQWdCLDBDQUFFLFFBQVEsMENBQUUsUUFBUSwwQ0FBRSxhQUFhLHlDQUNuRCxJQUFJLEdBQ1AsQ0FBQztRQUNOLENBQUMsQ0FBQTtRQWlHRCxxQkFBZ0IsR0FBRyxDQUFDLEtBQWtELEVBQUUsRUFBRTtZQUN0RSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDMUMsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFBRSxPQUFPLEtBQUssQ0FBQztnQkFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO29CQUFFLE9BQU8sSUFBSSxDQUFDO2dCQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUE7UUFFRCwyQkFBc0IsR0FBRyxDQUFDLEtBQW1DLEVBQUUsRUFBRTs7WUFDN0QsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDaEQsTUFBTSxXQUFXLEdBQVEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsU0FBZ0IsQ0FBQyxDQUFDO1lBQzVFLE9BQU8sQ0FBQyxRQUFDLFdBQVcsMENBQUUsWUFBWSxDQUFBLENBQUM7UUFDdkMsQ0FBQyxDQUFBO1FBRUQsNEJBQXVCLEdBQUcsQ0FBQyxRQUEwQixFQUFFLEVBQUU7WUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0I7Z0JBQUUsT0FBTztZQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDN0MsS0FBSyxFQUFFLDhDQUE4QztnQkFDckQsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLFFBQVEsRUFBRSxLQUFLO2FBQ2xCLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQTtRQUVELHVCQUFrQixHQUFHLEdBQUcsRUFBRTs7WUFDdEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUNqQyxNQUFBLElBQUksQ0FBQyxRQUFRLDBDQUFFLElBQUksR0FBRztRQUMxQixDQUFDLENBQUE7UUFFRCwwQkFBcUIsR0FBRyxHQUFHLEVBQUU7O1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzVCLE1BQUEsSUFBSSxDQUFDLFFBQVEsMENBQUUsSUFBSSxHQUFHO2dCQUN0QixPQUFPO2FBQ1Y7WUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7WUFDM0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUNqQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztZQUN4RSxNQUFBLElBQUksQ0FBQyxRQUFRLDBDQUFFLElBQUksR0FBRztRQUMxQixDQUFDLENBQUE7UUF4aUJHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksUUFBUSxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFOztZQUMvQyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQTtZQUNsQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7WUFDdEIsSUFBSSxDQUFDLFVBQVUsZUFBRyxHQUFHLDBDQUFFLFVBQVUsdUNBQUksS0FBSyxFQUFBLENBQUM7WUFDM0MsSUFBSSxDQUFDLGFBQWEsZUFBRyxHQUFHLDBDQUFFLGFBQWEsdUNBQUksS0FBSyxFQUFBLENBQUM7WUFDakQsSUFBSSxDQUFDLFNBQVMsZUFBRyxHQUFHLDBDQUFFLFNBQVMsdUNBQUksS0FBSyxFQUFBLENBQUM7WUFDekMsSUFBSSxDQUFDLGFBQWEsZUFBRyxHQUFHLDBDQUFFLGFBQWEsdUNBQUksS0FBSyxFQUFBLENBQUM7WUFDakQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFFekIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDL0I7WUFDRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztnQkFDakMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDN0I7WUFDRCxrQ0FBa0M7UUFDdEMsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDeEIsQ0FBQztJQWNELFFBQVE7UUFDSixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLFlBQVksYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2xHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUM3QjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3BGLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDcEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztnQkFDaEMsT0FBTzthQUNWO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3ZDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUFFLE9BQU87WUFDcEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxjQUFjO2dCQUFFLE9BQU87WUFDNUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLFdBQVc7Z0JBQUUsT0FBTztZQUN6QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hDLElBQUksSUFBSSxDQUFDLHFCQUFxQixLQUFLLEdBQUc7Z0JBQUUsT0FBTztZQUMvQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsR0FBRyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU87WUFDOUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTs7Z0JBQ2pCLElBQUksUUFBQyxJQUFJLDBDQUFFLElBQUksQ0FBQTtvQkFBRSxPQUFPO2dCQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUNqQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3ZDLE9BQU87aUJBQ1Y7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDN0IsT0FBTztpQkFDVjtnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUMzSCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDekUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN2QztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDckQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQUUsT0FBTztZQUNwQyxJQUFJLElBQUksQ0FBQyxpQkFBaUI7Z0JBQUUsT0FBTztZQUNuQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07Z0JBQUUsT0FBTztZQUN4QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUM7WUFDMUUsSUFBSSxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztnQkFBRSxPQUFPO1lBQzdELElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztnQkFBRSxPQUFPO1lBQy9ELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDckM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO1FBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzlDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsV0FBVzs7UUFDUCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztTQUMvQjtRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLE1BQUEsSUFBSSxDQUFDLE1BQU0sMENBQUUsV0FBVyxHQUFFO1FBQzFCLE1BQUEsSUFBSSxDQUFDLFFBQVEsMENBQUUsV0FBVyxHQUFFO1FBQzVCLE1BQUEsSUFBSSxDQUFDLE1BQU0sMENBQUUsV0FBVyxHQUFHO0lBQy9CLENBQUM7SUEwU08sa0JBQWtCLENBQUMsSUFBb0I7UUFDM0MsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDckMsTUFBTSxhQUFhLEdBQUcsSUFBSTthQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQzthQUN4QyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sV0FBVyxHQUFHLElBQUk7YUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7YUFDdEMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztRQUV6RixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDcEIsT0FBTyxRQUFRLENBQUM7U0FDbkI7UUFFRCxNQUFNLE1BQU0sR0FBbUIsRUFBRSxDQUFDO1FBQ2xDLElBQUksYUFBYSxLQUFLLENBQUMsRUFBRTtZQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1NBQzlFO1FBQ0QsSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFO1lBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDeEU7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUVwQyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQztRQUMzRSxJQUFJLGFBQWEsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUN0QixNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7WUFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLE9BQU8sTUFBTSxDQUFDO1NBQ2pCO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDOUYsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDO1lBQUUsT0FBTyxDQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDdkQsTUFBTSxRQUFRLEdBQUcsSUFBSTthQUNoQixLQUFLLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQzthQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUMvRSxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDdEMsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVPLHlCQUF5QixDQUFDLElBQWtCOztRQUNoRCxJQUFJLE9BQUEsSUFBSSwwQ0FBRSxJQUFJLE1BQUssVUFBVTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzVDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUNyQyxJQUFJLFFBQUMsSUFBSSwwQ0FBRSxNQUFNLENBQUE7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNoQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBQzFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDM0QsQ0FBQztJQUVPLGVBQWUsQ0FBQyxRQUFnQjtRQUNwQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUE0QixDQUFDO1lBQzFELElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU87WUFDbEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsUUFBUSxLQUFLLENBQWdCLENBQUM7WUFDakYsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUNyQixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUNyRSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDbEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDNUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLGtCQUFrQjtRQUN0QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMzRCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRU8sb0JBQW9CO1FBQ3hCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxRQUFRO1lBQUUsT0FBTztRQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQTRCLENBQUM7UUFDMUQsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ2xCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFFdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLG9CQUFvQixDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDeEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDaEUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXZELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFJRCwyQkFBMkI7UUFDdkIsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVE7WUFBRSxPQUFPO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDeEYsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjO2dCQUFFLE9BQU87U0FDcEM7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDekQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQTRDTyxrQkFBa0IsQ0FBQyxRQUFnQjs7UUFDdkMsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQ3hCLE1BQU0sUUFBUSxTQUFHLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsS0FBSyxDQUFDO1lBQ2hELElBQUksUUFBUSxFQUFFO2dCQUNWLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUM3QjtZQUNELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2QyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7WUFDeEIsTUFBTSxPQUFPLFNBQUcsSUFBSSxDQUFDLGlCQUFpQiwwQ0FBRSxLQUFLLENBQUM7WUFDOUMsSUFBSSxPQUFPLEVBQUU7Z0JBQ1QsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQzVCO1lBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBQ0osQ0FBQTs7WUFwa0J1QyxlQUFlO1lBQXdCLFlBQVk7WUFDcEUsTUFBTTtZQUFzQixXQUFXO1lBQTBCLGVBQWU7WUFDeEUsb0JBQW9CO1lBQWlCLFNBQVM7WUFDakQsVUFBVTtZQUF3QixjQUFjO1lBQ3RDLDJCQUEyQjtZQUMxQyxVQUFVOztBQVRNO0lBQWxDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQzsrREFBNEQ7QUFDNUQ7SUFBakMsWUFBWSxDQUFDLGtCQUFrQixDQUFDOzhEQUEwRDtBQUN6RDtJQUFqQyxTQUFTLENBQUMscUJBQXFCLENBQUM7Z0VBQStDO0FBOGZoRjtJQUZDLFlBQVksQ0FBQyxlQUFlLENBQUM7SUFDN0IsWUFBWSxDQUFDLGVBQWUsQ0FBQztzRUFVN0I7QUE1aUJRLG1CQUFtQjtJQUwvQixTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsaUJBQWlCO1FBQzNCLDR0ZUFBMkM7O0tBRTlDLENBQUM7R0FDVyxtQkFBbUIsQ0EybUIvQjtTQTNtQlksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIFZpZXdDaGlsZHJlbiwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgU3RlcHBlciBmcm9tICdicy1zdGVwcGVyJztcbmltcG9ydCB7IFJvdXRlciwgTmF2aWdhdGlvbkVuZCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2hlY2tvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hlY2tvdXQvY2hlY2tvdXQuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcbmltcG9ydCB7IFN0ZXBJIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zdGVwJztcbmltcG9ydCB7IENoZWNrb3V0RGF0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2hlY2tvdXQtZGF0YSc7XG5pbXBvcnQgeyBQcm9kdWN0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm9kdWN0cy9wcm9kdWN0cy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudEhlbHBlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY29tcG9uZW50LWhlbHBlcic7XG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5uZWwtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hlY2tvdXRWaWV3VHlwZSwgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29yZS5jb25zdHMnO1xuaW1wb3J0IHsgRGF0YUZvcm1FY0NvbXBvbmVudCB9IGZyb20gJy4vZGF0YWZvcm0tZWMvZGF0YWZvcm0tZWMuY29tcG9uZW50JztcbmltcG9ydCB7IFBheW1lbnRFY0NvbXBvbmVudCB9IGZyb20gJy4vcGF5bWVudC1lYy9wYXltZW50LWVjLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSwgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgU2hpcHBpbmdQcmljZURpc3BsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvc2hpcHBpbmctcHJpY2UtZGlzcGxheS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlb1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZW8uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWNoZWNrb3V0LWVjJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2hlY2tvdXQtZWMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NoZWNrb3V0LWVjLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tvdXRFY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIHB1YmxpYyBzdGVwcGVyOiBTdGVwcGVyO1xuICAgIHB1YmxpYyBsb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgcHVibGljIGNhbkNoZWNrb3V0ID0gZmFsc2U7XG4gICAgcHVibGljIHJlcXVpcmVfbG9naW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgc3ViQ2FuOiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljIHN1YlJlYWR5OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljIGNoYW5uZWw6IGFueTtcbiAgICBwdWJsaWMgc3RlcHM6IGFueVtdID0gW107XG4gICAgcHVibGljIGhpZGVQcmljZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaGlkZURpc2NvdW50czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBjaGVja291dFZpZXc6IENoZWNrb3V0Vmlld1R5cGUgPSAnbGVnYWN5JztcbiAgICBwdWJsaWMgY3JlZGl0QWNjb3VudFNob3dQcmljZXM6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIGxhc3RBc3NvY2lhdGVkRGF0YTogQ2hlY2tvdXREYXRhW10gfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgb3BlblNlY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgbGFzdFBheW1lbnRBZGRyZXNzS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHBheW1lbnRBdXRvT3BlbmVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBhdXRvQ2xvc2VkU3RlcHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBwcml2YXRlIG1hbnVhbGx5T3BlbmVkU3RlcHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBwdWJsaWMgaGlkZVRheGVzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHNob3dUYXhMZWdlbmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgc2hpcG1lbnRTdW1tYXJ5OiB7IGxhYmVsPzogc3RyaW5nOyBkZXRhaWw/OiBzdHJpbmcgfSB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBoaWRlTW9iaWxlU3VtbWFyeUJhciA9IGZhbHNlO1xuICAgIHByaXZhdGUgc3VtbWFyeU9ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgZmluaXNoQnV0dG9uRWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBzdGVwRGlydHlNYXAgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcbiAgICBwdWJsaWMgbW9kYWxSZWY6IEJzTW9kYWxSZWYgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHBlbmRpbmdDbG9zZVN0ZXBOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIG5hdlN1YjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgY2hhbm5lbFJlYWR5ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBwZW5kaW5nQ2hlY2tvdXRJbml0ID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgbG9hZGluZyQgPSB0aGlzLmxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgQFZpZXdDaGlsZHJlbihEYXRhRm9ybUVjQ29tcG9uZW50KSBwcml2YXRlIGRhdGFmb3JtQ29tcG9uZW50czogUXVlcnlMaXN0PERhdGFGb3JtRWNDb21wb25lbnQ+O1xuICAgIEBWaWV3Q2hpbGRyZW4oUGF5bWVudEVjQ29tcG9uZW50KSBwcml2YXRlIHBheW1lbnRDb21wb25lbnRzOiBRdWVyeUxpc3Q8UGF5bWVudEVjQ29tcG9uZW50PjtcbiAgICBAVmlld0NoaWxkKCd1bnNhdmVkQ2hhbmdlc01vZGFsJykgcHJpdmF0ZSB1bnNhdmVkQ2hhbmdlc01vZGFsOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGNoZWNrb3V0U2VydmljZTogQ2hlY2tvdXRTZXJ2aWNlLCBwdWJsaWMgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsIHB1YmxpYyBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsIHB1YmxpYyBwcm9kdWN0c1NlcnZpY2U6IFByb2R1Y3RzU2VydmljZSxcbiAgICAgICAgcHVibGljIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsQ29uZmlnU2VydmljZSwgcHVibGljIGNvbnN0czogQ29uc3RhbnRzLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzaGlwcGluZ1ByaWNlRGlzcGxheTogU2hpcHBpbmdQcmljZURpc3BsYXlTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgc2VvOiBTZW9TZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRWaWV3ID0gdGhpcy5jb25zdHMuZ2V0Q2hlY2tvdXRWaWV3KCk7XG4gICAgICAgIHRoaXMuY29uc3RzLmNoZWNrb3V0VmlldyQuc3Vic2NyaWJlKHZpZXcgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGVja291dFZpZXcgPSB2aWV3IHx8ICdsZWdhY3knO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbCA9IHJlc1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplU3RlcHMoKVxuICAgICAgICAgICAgdGhpcy5oaWRlUHJpY2VzID0gcmVzPy5oaWRlUHJpY2VzID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oaWRlRGlzY291bnRzID0gcmVzPy5oaWRlRGlzY291bnRzID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oaWRlVGF4ZXMgPSByZXM/LmhpZGVUYXhlcyA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1RheExlZ2VuZCA9IHJlcz8uc2hvd1RheExlZ2VuZCA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbFJlYWR5ID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGlkZVByaWNlcykge1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdDaGVja291dEluaXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdDaGVja291dEluaXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDaGVja291dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnN0ZXBFbmFibGVkKDMpKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmVjT25Db25zdHJ1Y3QoKVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ2hlY2tvdXRTZW8gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNpdGVOYW1lID0gdGhpcy5zZW8uZ2V0U2l0ZU5hbWUoKTtcbiAgICAgICAgdGhpcy5zZW8uc2V0VGl0bGUoYENoZWNrb3V0IHwgJHtzaXRlTmFtZX1gKTtcbiAgICAgICAgdGhpcy5zZW8uc2V0RGVzY3JpcHRpb24oYEZpbmFsaXrDoSB0dSBjb21wcmEgZW4gJHtzaXRlTmFtZX0uYCk7XG4gICAgICAgIHRoaXMuc2VvLnNldE9nVHlwZSgnd2Vic2l0ZScpO1xuICAgICAgICB0aGlzLnNlby5zZXROb0luZGV4KHRydWUpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5zZW8uc2V0Q2Fub25pY2FsKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLm5hdlN1YiA9IHRoaXMucm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygnL2NoZWNrb3V0JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvVG9wT25FbnRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJDYW4gPSB0aGlzLmNoZWNrb3V0U2VydmljZS5jYW5DaGVja291dCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoY29udGFpbl9pdGVtcyA9PiB7XG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5faXRlbXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbkNoZWNrb3V0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoYW5uZWxSZWFkeSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0NoZWNrb3V0SW5pdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ2hlY2tvdXQoKTtcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2Uuc3RhdGUkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xlZ2FjeUNoZWNrb3V0KCkpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGhhc1BheW1lbnRTdGVwID0gdGhpcy5zdGVwcy5zb21lKHN0ZXAgPT4gc3RlcC5uYW1lID09PSAncGF5bWVudCcpO1xuICAgICAgICAgICAgaWYgKCFoYXNQYXltZW50U3RlcCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgYWRkcmVzc0RhdGEgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YSgnYWRkcmVzcycpO1xuICAgICAgICAgICAgaWYgKCFhZGRyZXNzRGF0YSkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoYWRkcmVzc0RhdGEpO1xuICAgICAgICAgICAgaWYgKHRoaXMubGFzdFBheW1lbnRBZGRyZXNzS2V5ID09PSBrZXkpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMubGFzdFBheW1lbnRBZGRyZXNzS2V5ID0ga2V5O1xuICAgICAgICB9KVxuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5zdGF0ZSQuc3Vic2NyaWJlKHN0ZXBzID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGVnYWN5Q2hlY2tvdXQoKSB8fCAhc3RlcHMpIHJldHVybjtcbiAgICAgICAgICAgIHN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFzdGVwPy5uYW1lKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKCFzdGVwLmlzUmVhZHkoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9DbG9zZWRTdGVwcy5kZWxldGUoc3RlcC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1N0ZXBEaXJ0eShzdGVwLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmF1dG9DbG9zZWRTdGVwcy5oYXMoc3RlcC5uYW1lKSAmJiB0aGlzLm9wZW5TZWN0aW9ucy5pbmNsdWRlcyhzdGVwLm5hbWUpICYmICF0aGlzLm1hbnVhbGx5T3BlbmVkU3RlcHMuaGFzKHN0ZXAubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuU2VjdGlvbnMgPSB0aGlzLm9wZW5TZWN0aW9ucy5maWx0ZXIobmFtZSA9PiBuYW1lICE9PSBzdGVwLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9DbG9zZWRTdGVwcy5hZGQoc3RlcC5uYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnBheW1lbnRNZXRob2RzJC5zdWJzY3JpYmUobWV0aG9kcyA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xlZ2FjeUNoZWNrb3V0KCkpIHJldHVybjtcbiAgICAgICAgICAgIGlmICh0aGlzLnBheW1lbnRBdXRvT3BlbmVkKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIW1ldGhvZHMgfHwgIW1ldGhvZHMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBoYXNTaGlwbWVudFN0ZXAgPSB0aGlzLnN0ZXBzLnNvbWUoc3RlcCA9PiBzdGVwLm5hbWUgPT09ICdzaGlwbWVudCcpO1xuICAgICAgICAgICAgaWYgKGhhc1NoaXBtZW50U3RlcCAmJiAhdGhpcy5pc1N0ZXBSZWFkeSgnc2hpcG1lbnQnKSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCFoYXNTaGlwbWVudFN0ZXAgJiYgIXRoaXMuaXNTdGVwRW5hYmxlZCgncGF5bWVudCcpKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIXRoaXMub3BlblNlY3Rpb25zLmluY2x1ZGVzKCdwYXltZW50JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5TZWN0aW9ucy5wdXNoKCdwYXltZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBheW1lbnRBdXRvT3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2hlY2tvdXRTZW8oKTtcbiAgICAgICAgdGhpcy5lY09uSW5pdCgpXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoc2hvd1ByaWNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlZGl0QWNjb3VudFNob3dQcmljZXMgPSBzaG93UHJpY2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5hc29jaWF0ZWREYXRhJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxhc3RBc3NvY2lhdGVkRGF0YSA9IGRhdGE7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb1RvcE9uRW50ZXIoKTtcbiAgICAgICAgdGhpcy5zZXR1cFN1bW1hcnlPYnNlcnZlcigpO1xuICAgICAgICB0aGlzLmZpbmlzaEJ1dHRvbkVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NoZWNrb3V0RmluaXNoQnRuJyk7XG4gICAgICAgIHRoaXMuZXZhbHVhdGVNb2JpbGVCYXJWaXNpYmlsaXR5KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnN1bW1hcnlPYnNlcnZlcikge1xuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5T2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5T2JzZXJ2ZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmluaXNoQnV0dG9uRWwgPSBudWxsO1xuICAgICAgICB0aGlzLnN1YkNhbj8udW5zdWJzY3JpYmUoKVxuICAgICAgICB0aGlzLnN1YlJlYWR5Py51bnN1YnNjcmliZSgpXG4gICAgICAgIHRoaXMubmF2U3ViPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGluaXRpYWxpemVDaGVja291dCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jYW5DaGVja291dCA9IHRydWU7XG4gICAgICAgIGxldCBzdGVwczogU3RlcElbXSA9IFtdO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdjaGFubmVsJywgdGhpcy5jaGFubmVsKVxuICAgICAgICBzdGVwcy5wdXNoKHsgbmFtZTogJ2FkZHJlc3MnIH0pO1xuICAgICAgICB0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdTaGlwcGluZ1N0ZXBBbGxvd2VkID8gbnVsbCA6IHN0ZXBzLnB1c2goeyBuYW1lOiAnc2hpcG1lbnQnIH0pO1xuICAgICAgICB0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdQYXltZW50U3RlcEFsbG93ZWQgPyBudWxsIDogc3RlcHMucHVzaCh7IG5hbWU6ICdwYXltZW50JyB9KTtcbiAgICAgICAgLyogc3RlcHMucHVzaCh7IG5hbWU6ICdzaGlwbWVudCcgfSk7XG4gICAgICAgIHN0ZXBzLnB1c2goeyBuYW1lOiAncGF5bWVudCcgfSk7ICovXG4gICAgICAgIC8vY29uc29sZS5sb2coc3RlcHMpXG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnNldFN0ZXBzKHN0ZXBzKTtcbiAgICAgICAgaWYgKHRoaXMuaXNMZWdhY3lDaGVja291dCgpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0ZXBwZXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICBpZiAodGhpcy5pc0xlZ2FjeUNoZWNrb3V0KCkgJiYgKHRoaXMuY2hhbm5lbD8uaXNTa2lwcGluZ1NoaXBwaW5nU3RlcEFsbG93ZWQgIT0gdHJ1ZSB8fCB0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdQYXltZW50U3RlcEFsbG93ZWQgIT0gdHJ1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc3ViUmVhZHkgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5vblJlYWR5JC5waXBlKGZpbHRlcihyZWFkeSA9PiByZWFkeSkpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICByZXMgPT4geyByZXMgJiYgdGhpcy5lbmRDaGVja291dCgpIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnb0JhY2sgPSAoKSA9PiB0aGlzLnN0ZXBwZXIucHJldmlvdXMoKTtcblxuICAgIGlzU3RlcFJlYWR5ID0gKHN0ZXBfbmFtZSkgPT4gdGhpcy5jaGVja291dFNlcnZpY2UuaXNTdGVwUmVhZHkoc3RlcF9uYW1lKTtcblxuICAgIGlzU3RlcERpcnR5ID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+ICEhdGhpcy5zdGVwRGlydHlNYXAuZ2V0KHN0ZXBOYW1lKTtcblxuICAgIGlzU3RlcENvbXBsZXRlID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+IHRoaXMuaXNTdGVwUmVhZHkoc3RlcE5hbWUpICYmICF0aGlzLmlzU3RlcERpcnR5KHN0ZXBOYW1lKTtcblxuICAgIG9uU3RlcERpcnR5Q2hhbmdlID0gKHN0ZXBOYW1lOiBzdHJpbmcsIGlzRGlydHk6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy5zdGVwRGlydHlNYXAuc2V0KHN0ZXBOYW1lLCBpc0RpcnR5KTtcbiAgICB9XG5cbiAgICBlbmRDaGVja291dCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2UuY29tcGxldGUoKS50aGVuKFxuICAgICAgICAgICAgcmVzID0+IHJlcy5vayAmJiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2NoZWNrb3V0L29yZGVyX3N1Y2Nlc3MnXSksXG4gICAgICAgICAgICBlcnIgPT4gdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvcicpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBzZXRTdGVwcGVyID0gKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3RlcHBlcicpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBwZXIgPSBuZXcgU3RlcHBlcihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3RlcHBlcicpLCB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVhcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiB0cnVlXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGVwcGVyKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdGVwcGVyKVxuICAgIH1cblxuICAgIG5leHQgPSAoKSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdGVwcGVyKVxuICAgICAgICB0aGlzLnN0ZXBwZXIubmV4dCgpXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdGVwcGVyKVxuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe1xuICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICBlcnJvciA9IChlcnJvcl92YWx1ZSkgPT4gdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coZXJyb3JfdmFsdWUpO1xuXG4gICAgZ2V0SWNvbiA9IChkYXRhX2l0ZW06IENoZWNrb3V0RGF0YSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGRhdGFfaXRlbS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdjb3Vwb24nOiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvY291cG9uLnBuZyc7XG4gICAgICAgICAgICBjYXNlICdkaXNjb3VudCc6IHJldHVybiAnYXNzZXRzL2ltYWdlcy9kaXNjb3VudC5wbmcnO1xuICAgICAgICAgICAgY2FzZSAnc2hpcG1lbnQnOiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvaWNvLWVudmlvLnBuZyc7XG4gICAgICAgICAgICBjYXNlICdzdWJ0b3RhbCc6IHJldHVybiAnYXNzZXRzL2ltYWdlcy9wcm9kdWN0cy5wbmcnO1xuICAgICAgICAgICAgY2FzZSAndG90YWwnOiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvaWNvLWNhcnJpdG8ucG5nJztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiAnYXNzZXRzL2ltYWdlcy9pY28tY2Fycml0by5wbmcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZVN0ZXBzID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnN0ZXBzID0gW107XG4gICAgICAgIC8vRWwgcGFzbyBkZSBlbGVnaXIgZGlyZWNjacOzbiBzaWVtcHJlIGVzdGFcbiAgICAgICAgdGhpcy5zdGVwcy5wdXNoKHsgbGFiZWw6ICdiaWxsaW5nLWRldGFpbHMnLCBuYW1lOiAnYWRkcmVzcycgfSlcbiAgICAgICAgLy9FbCBwYXNvIGRlIGVsZWdpciBtZXRvZG8gZGUgZW52aW9cbiAgICAgICAgdGhpcy5jaGFubmVsPy5pc1NraXBwaW5nU2hpcHBpbmdTdGVwQWxsb3dlZCA/IG51bGwgOiB0aGlzLnN0ZXBzLnB1c2goeyBsYWJlbDogJ3NoaXBtZW50LW1ldGhvZCcsIG5hbWU6ICdzaGlwbWVudCcgfSlcbiAgICAgICAgLy9FbCBwYXNvIGRlIGVsZWdpciBtZXRvZG8gZGUgcGFnb1xuICAgICAgICB0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdQYXltZW50U3RlcEFsbG93ZWQgPyBudWxsIDogdGhpcy5zdGVwcy5wdXNoKHsgbGFiZWw6ICdwYXltZW50JywgbmFtZTogJ3BheW1lbnQnIH0pXG4gICAgICAgIHRoaXMuc3RlcHMgPSB0aGlzLnN0ZXBzLm1hcCgoc3RlcCwgaW5kZXgpID0+ICh7IC4uLnN0ZXAsIHN0ZXA6IGluZGV4ICsgMSB9KSk7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdGVwcylcbiAgICAgICAgaWYgKHRoaXMuc3RlcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5TZWN0aW9ucyA9IFt0aGlzLnN0ZXBzWzBdLm5hbWVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RlcEVuYWJsZWQgPSAoc3RlcE51bWJlcjogbnVtYmVyKSA9PiB0aGlzLnN0ZXBzLmZpbmQoc3RlcCA9PiBzdGVwLnN0ZXAgPT0gc3RlcE51bWJlcikgPyB0cnVlIDogZmFsc2VcblxuICAgIGdldENsYXNzVG9TdGVwcGVyID0gKGluZGV4OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgICAgICBpZiAoaW5kZXggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICdsaW5lYSdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0ZXBzW2luZGV4ICsgMV0gPyAndGV4dC1jZW50ZXInIDogJ3RleHQtZW5kJ1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNMZWdhY3lDaGVja291dCA9ICgpID0+IHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJztcblxuICAgIGdldFNpbmdsZVN0ZXBUaXRsZSA9IChzdGVwOiBTdGVwSSAmIHsgbGFiZWw/OiBzdHJpbmcgfSkgPT5cbiAgICAgICAgc3RlcD8ubmFtZSA9PT0gJ2FkZHJlc3MnID8gJ2FkZHJlc3Mtc2VsZWN0aW9uJyA6IHN0ZXA/LmxhYmVsO1xuXG4gICAgZ2V0U2luZ2xlU3VtbWFyeUxhYmVsID0gKHN0ZXA6IFN0ZXBJICYgeyBsYWJlbD86IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGlmIChzdGVwPy5uYW1lID09PSAnYWRkcmVzcycpIHJldHVybiB0aGlzLmdldEFkZHJlc3NTdW1tYXJ5TGFiZWwoKTtcbiAgICAgICAgaWYgKHN0ZXA/Lm5hbWUgPT09ICdzaGlwbWVudCcpIHJldHVybiB0aGlzLnNoaXBtZW50U3VtbWFyeT8ubGFiZWwgfHwgJyc7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBnZXRTaW5nbGVTdW1tYXJ5VmFsdWUgPSAoc3RlcDogU3RlcEkgJiB7IGxhYmVsPzogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgaWYgKHN0ZXA/Lm5hbWUgPT09ICdzaGlwbWVudCcpIHJldHVybiB0aGlzLnNoaXBtZW50U3VtbWFyeT8uZGV0YWlsIHx8ICcnO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGVwU3VtbWFyeShzdGVwPy5uYW1lKTtcbiAgICB9XG5cbiAgICBpc1N0ZXBFbmFibGVkID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnN0ZXBzLmZpbmRJbmRleChzdGVwID0+IHN0ZXAubmFtZSA9PT0gc3RlcE5hbWUpO1xuICAgICAgICBpZiAoaW5kZXggPD0gMCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrb3V0VmlldyA9PT0gJ3NpbmdsZScgJiYgc3RlcE5hbWUgPT09ICdwYXltZW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNTdGVwUmVhZHkoJ2FkZHJlc3MnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmV2U3RlcCA9IHRoaXMuc3RlcHNbaW5kZXggLSAxXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdGVwUmVhZHkocHJldlN0ZXAubmFtZSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2VjdGlvbiA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0ZXBFbmFibGVkKHN0ZXBOYW1lKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMub3BlblNlY3Rpb25zLmluZGV4T2Yoc3RlcE5hbWUpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGVwUmVhZHkoc3RlcE5hbWUpICYmIHRoaXMuaXNTdGVwRGlydHkoc3RlcE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSA9IHN0ZXBOYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMub3BlblVuc2F2ZWRDaGFuZ2VzTW9kYWwodGhpcy51bnNhdmVkQ2hhbmdlc01vZGFsKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9wZW5TZWN0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuU2VjdGlvbnMucHVzaChzdGVwTmFtZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1N0ZXBSZWFkeShzdGVwTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hbnVhbGx5T3BlbmVkU3RlcHMuYWRkKHN0ZXBOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9TZWN0aW9uKHN0ZXBOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdvVG9OZXh0U2VjdGlvbiA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zdGVwcy5maW5kSW5kZXgoc3RlcCA9PiBzdGVwLm5hbWUgPT09IHN0ZXBOYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSB8fCAhdGhpcy5zdGVwc1tpbmRleCArIDFdKSByZXR1cm47XG4gICAgICAgIGNvbnN0IG5leHROYW1lID0gdGhpcy5zdGVwc1tpbmRleCArIDFdLm5hbWU7XG4gICAgICAgIHRoaXMub3BlblNlY3Rpb25zID0gdGhpcy5vcGVuU2VjdGlvbnMuZmlsdGVyKG5hbWUgPT4gbmFtZSAhPT0gc3RlcE5hbWUpO1xuICAgICAgICBpZiAoIXRoaXMub3BlblNlY3Rpb25zLmluY2x1ZGVzKG5leHROYW1lKSkgdGhpcy5vcGVuU2VjdGlvbnMucHVzaChuZXh0TmFtZSk7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9TZWN0aW9uKG5leHROYW1lKTtcbiAgICB9XG5cbiAgICBnb1RvTmV4dEZyb21BZGRyZXNzID0gKCkgPT4gdGhpcy5nb1RvTmV4dFNlY3Rpb24oJ2FkZHJlc3MnKTtcblxuICAgIGlzU2VjdGlvbk9wZW4gPSAoc3RlcE5hbWU6IHN0cmluZykgPT4gdGhpcy5vcGVuU2VjdGlvbnMuaW5jbHVkZXMoc3RlcE5hbWUpO1xuXG4gICAgZ2V0U3VtbWFyeUxhYmVsID0gKHR5cGU6IENoZWNrb3V0RGF0YVsndHlwZSddLCBpdGVtPzogQ2hlY2tvdXREYXRhKSA9PiB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAncHJvZHVjdHNCZWZvcmVEaXNjb3VudHMnOiByZXR1cm4gJ3Byb2R1Y3RzLWJlZm9yZS1kaXNjb3VudHMnO1xuICAgICAgICAgICAgY2FzZSAnc3VidG90YWwnOiByZXR1cm4gJ3N1YnRvdGFsJztcbiAgICAgICAgICAgIGNhc2UgJ2Rpc2NvdW50JzogcmV0dXJuICdkaXNjb3VudCc7XG4gICAgICAgICAgICBjYXNlICdjb3Vwb24nOiByZXR1cm4gJ2NvdXBvbic7XG4gICAgICAgICAgICBjYXNlICdsaW5lRGlzY291bnQnOiByZXR1cm4gJ2xpbmUtZGlzY291bnRzJztcbiAgICAgICAgICAgIGNhc2UgJ3NoaXBtZW50JzogcmV0dXJuICdzaGlwbWVudCc7XG4gICAgICAgICAgICBjYXNlICd0YXhlcyc6XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS50YXhlc0luY2x1ZGVkSW5Ub3RhbCA9PT0gdHJ1ZSkgcmV0dXJuICd0YXhlcy1pbmNsdWRlZC1pbi10b3RhbCc7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS50YXhlc0luY2x1ZGVkSW5Ub3RhbCA9PT0gZmFsc2UpIHJldHVybiAndGF4ZXMnO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dUYXhMZWdlbmQgPyAnbmF0aW9uYWwtdGF4ZXMnIDogJ3RheGVzJztcbiAgICAgICAgICAgIGNhc2UgJ2NsaWVudFRheGVzJzogcmV0dXJuICdjbGllbnRUYXhlcyc7XG4gICAgICAgICAgICBjYXNlICd0b3RhbCc6IHJldHVybiAndG90YWwnO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIHR5cGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTdW1tYXJ5RGF0YSA9IChkYXRhOiBDaGVja291dERhdGFbXSkgPT4ge1xuICAgICAgICBpZiAoIWRhdGEpIHJldHVybiBbXTtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJykgcmV0dXJuIGRhdGE7XG4gICAgICAgIGxldCBzdW1tYXJ5RGF0YSA9IGRhdGE7XG4gICAgICAgIGNvbnN0IGhhc1NoaXBtZW50ID0gc3VtbWFyeURhdGEuc29tZShpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3NoaXBtZW50Jyk7XG4gICAgICAgIGlmICghaGFzU2hpcG1lbnQgJiYgdGhpcy5pc1N0ZXBSZWFkeSgnc2hpcG1lbnQnKSkge1xuICAgICAgICAgICAgY29uc3Qgb3JkZXJUb3RhbHMgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRPcmRlcigpPy50b3RhbHM7XG4gICAgICAgICAgICBjb25zdCBzaGlwbWVudEFtb3VudCA9IHRoaXMuc2hpcHBpbmdQcmljZURpc3BsYXkubm9ybWFsaXplUHJpY2VWYWx1ZShvcmRlclRvdGFscz8uc2hpcHBpbmcpO1xuICAgICAgICAgICAgaWYgKHNoaXBtZW50QW1vdW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaGlwbWVudEl0ZW06IENoZWNrb3V0RGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NoaXBtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3NoaXBtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50OiBzaGlwbWVudEFtb3VudFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgdG90YWxJbmRleCA9IHN1bW1hcnlEYXRhLmZpbmRJbmRleChpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3RvdGFsJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRvdGFsSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bW1hcnlEYXRhID0gWy4uLnN1bW1hcnlEYXRhLCBzaGlwbWVudEl0ZW1dO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGB0b3RhbGAgeWEgZXMgZWwgaW1wb3J0ZSBmaW5hbCBpbmZvcm1hZG8gcG9yIGJhY2tlbmQuXG4gICAgICAgICAgICAgICAgICAgIC8vIFPDs2xvIHNlIGluY29ycG9yYSBlbCBlbnbDrW8gZmFsdGFudGUsIHNpbiByZWNvbnN0cnVpciBuaVxuICAgICAgICAgICAgICAgICAgICAvLyBtb2RpZmljYXIgZXNlIHRvdGFsLlxuICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5RGF0YSA9IFsuLi5zdW1tYXJ5RGF0YS5zbGljZSgwLCB0b3RhbEluZGV4KSwgc2hpcG1lbnRJdGVtLCAuLi5zdW1tYXJ5RGF0YS5zbGljZSh0b3RhbEluZGV4KV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN1bW1hcnlEYXRhID0gdGhpcy5hZ2dyZWdhdGVEaXNjb3VudHMoc3VtbWFyeURhdGEpXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlICE9PSAncHJvZHVjdHNCZWZvcmVEaXNjb3VudHMnICYmIGl0ZW0udHlwZSAhPT0gJ2xpbmVEaXNjb3VudCcpO1xuXG4gICAgICAgIGNvbnN0IGluY2x1ZGVkVGF4ZXMgPSBzdW1tYXJ5RGF0YS5maWx0ZXIoaXRlbSA9PlxuICAgICAgICAgICAgaXRlbS50eXBlID09PSAndGF4ZXMnICYmIGl0ZW0udGF4ZXNJbmNsdWRlZEluVG90YWwgPT09IHRydWVcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIWluY2x1ZGVkVGF4ZXMubGVuZ3RoKSByZXR1cm4gc3VtbWFyeURhdGE7XG5cbiAgICAgICAgY29uc3Qgd2l0aG91dEluY2x1ZGVkVGF4ZXMgPSBzdW1tYXJ5RGF0YS5maWx0ZXIoaXRlbSA9PlxuICAgICAgICAgICAgIShpdGVtLnR5cGUgPT09ICd0YXhlcycgJiYgaXRlbS50YXhlc0luY2x1ZGVkSW5Ub3RhbCA9PT0gdHJ1ZSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgdG90YWxJbmRleCA9IHdpdGhvdXRJbmNsdWRlZFRheGVzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3RvdGFsJyk7XG5cbiAgICAgICAgaWYgKHRvdGFsSW5kZXggPT09IC0xKSByZXR1cm4gWy4uLndpdGhvdXRJbmNsdWRlZFRheGVzLCAuLi5pbmNsdWRlZFRheGVzXTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4ud2l0aG91dEluY2x1ZGVkVGF4ZXMuc2xpY2UoMCwgdG90YWxJbmRleCArIDEpLFxuICAgICAgICAgICAgLi4uaW5jbHVkZWRUYXhlcyxcbiAgICAgICAgICAgIC4uLndpdGhvdXRJbmNsdWRlZFRheGVzLnNsaWNlKHRvdGFsSW5kZXggKyAxKVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGdldFN1bW1hcnlBbW91bnRWaWV3ID0gKGl0ZW06IENoZWNrb3V0RGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBvcmlnaW5hbFNoaXBtZW50QW1vdW50ID0gaXRlbT8udHlwZSA9PT0gJ3NoaXBtZW50JyA/IHRoaXMuZ2V0U2hpcG1lbnRPcmlnaW5hbEFtb3VudCgpIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hpcHBpbmdQcmljZURpc3BsYXkuYnVpbGRWaWV3TW9kZWwoaXRlbT8uYW1vdW50LCBvcmlnaW5hbFNoaXBtZW50QW1vdW50KTtcbiAgICB9XG5cbiAgICBnZXRUb3RhbEFtb3VudCA9IChkYXRhOiBDaGVja291dERhdGFbXSkgPT4ge1xuICAgICAgICBjb25zdCBzdW1tYXJ5RGF0YSA9IHRoaXMuZ2V0U3VtbWFyeURhdGEoZGF0YSk7XG4gICAgICAgIGlmICghc3VtbWFyeURhdGEgfHwgIXN1bW1hcnlEYXRhLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHRvdGFsSXRlbSA9IHN1bW1hcnlEYXRhLmZpbmQoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICd0b3RhbCcpO1xuICAgICAgICByZXR1cm4gdG90YWxJdGVtID8gdG90YWxJdGVtLmFtb3VudCA6IG51bGw7XG4gICAgfVxuXG4gICAgc2hvdWxkU2hvd1N1bW1hcnlJdGVtID0gKGl0ZW06IENoZWNrb3V0RGF0YSkgPT4ge1xuICAgICAgICBpZiAoIWl0ZW0pIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3Byb2R1Y3RzQmVmb3JlRGlzY291bnRzJyB8fCBpdGVtLnR5cGUgPT09ICdsaW5lRGlzY291bnQnKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICgoaXRlbS50eXBlID09PSAnZGlzY291bnQnIHx8IGl0ZW0udHlwZSA9PT0gJ2NvdXBvbicpICYmIGl0ZW0uYW1vdW50ID09IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKChpdGVtLnR5cGUgPT09ICdkaXNjb3VudCcgfHwgaXRlbS50eXBlID09PSAnY291cG9uJykgJiYgdGhpcy5oaWRlRGlzY291bnRzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICd0YXhlcycgJiYgKHRoaXMuaGlkZVRheGVzIHx8IGl0ZW0uYW1vdW50ID09IDApKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdjbGllbnRUYXhlcycgJiYgKHRoaXMuaGlkZVRheGVzIHx8IGl0ZW0uYW1vdW50ID09IDApKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnNob3VsZEhpZGVTdW1tYXJ5U3VidG90YWwoaXRlbSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0QWRkcmVzc1N1bW1hcnlMYWJlbCA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcERhdGE6IGFueSA9IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBEYXRhKCdhZGRyZXNzJyBhcyBhbnkpO1xuICAgICAgICBjb25zdCBhZGRyZXNzID0gc3RlcERhdGE/LnNoaXBwaW5nQWRkcmVzcyB8fCBzdGVwRGF0YT8uc2VsZWN0ZWQ/LnNoaXBwaW5nQWRkcmVzcztcbiAgICAgICAgY29uc3QgY29udGFjdCA9IGFkZHJlc3M/LmFkZHJlc3NDb250YWN0IHx8IGFkZHJlc3M/LmNvbnRhY3QgfHwgYWRkcmVzcyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIFtjb250YWN0LmZpcnN0TmFtZSwgY29udGFjdC5sYXN0TmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICBnZXRTdGVwU3VtbWFyeSA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0ZXBEYXRhOiBhbnkgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YShzdGVwTmFtZSBhcyBhbnkpO1xuICAgICAgICBpZiAoIXN0ZXBEYXRhKSByZXR1cm4gJyc7XG4gICAgICAgIGlmIChzdGVwTmFtZSA9PT0gJ2FkZHJlc3MnKSB7XG4gICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gc3RlcERhdGEuc2hpcHBpbmdBZGRyZXNzIHx8IHN0ZXBEYXRhPy5zZWxlY3RlZD8uc2hpcHBpbmdBZGRyZXNzIHx8IHN0ZXBEYXRhPy5zaGlwcGluZ0FkZHJlc3M7XG4gICAgICAgICAgICBpZiAoIWFkZHJlc3MpIHJldHVybiAnJztcbiAgICAgICAgICAgIGNvbnN0IG1haW4gPSBbYWRkcmVzcy5zdHJlZXQsIGFkZHJlc3MuY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyDCtyAnKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2lvbiA9IFthZGRyZXNzLnByb3ZpbmNlQ29kZSB8fCBhZGRyZXNzLnByb3ZpbmNlLCBhZGRyZXNzLmNvdW50cnlDb2RlIHx8IGFkZHJlc3MuY291bnRyeV1cbiAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICAgICAgICByZXR1cm4gW21haW4sIHJlZ2lvbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyDigJQgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXBOYW1lID09PSAnc2hpcG1lbnQnKSB7XG4gICAgICAgICAgICBjb25zdCBtZXRob2RMYWJlbCA9IHN0ZXBEYXRhLm1ldGhvZD8ubmFtZSB8fCBzdGVwRGF0YS5tZXRob2RfbmFtZSB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyYWN0TGFiZWwgPSBzdGVwRGF0YS5jb250cmFjdD8ubmFtZSB8fCBzdGVwRGF0YS5jb250cmFjdF9uYW1lIHx8IHN0ZXBEYXRhLm5hbWUgfHwgc3RlcERhdGEuY29udHJhY3QgfHwgJyc7XG4gICAgICAgICAgICByZXR1cm4gW21ldGhvZExhYmVsLCBjb250cmFjdExhYmVsXS5maWx0ZXIoQm9vbGVhbikuam9pbignIMK3ICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwTmFtZSA9PT0gJ3BheW1lbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RlcERhdGEubmFtZSB8fCBzdGVwRGF0YS5jb2RlIHx8ICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBzZXRTaGlwbWVudFN1bW1hcnkgPSAoc3VtbWFyeTogeyBsYWJlbD86IHN0cmluZzsgZGV0YWlsPzogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgY29uc3QgaGFzTGFiZWwgPSBCb29sZWFuKHN1bW1hcnk/LmxhYmVsKTtcbiAgICAgICAgY29uc3QgaGFzRGV0YWlsID0gQm9vbGVhbihzdW1tYXJ5Py5kZXRhaWwpO1xuICAgICAgICB0aGlzLnNoaXBtZW50U3VtbWFyeSA9IGhhc0xhYmVsIHx8IGhhc0RldGFpbCA/IHN1bW1hcnkgOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2hpcG1lbnRPcmlnaW5hbEFtb3VudCA9ICgpOiBudW1iZXIgfCBudWxsID0+IHtcbiAgICAgICAgY29uc3Qgc2hpcG1lbnRTdGVwRGF0YTogYW55ID0gdGhpcy5jaGVja291dFNlcnZpY2UuZ2V0U3RlcERhdGEoJ3NoaXBtZW50JyBhcyBhbnkpO1xuICAgICAgICByZXR1cm4gdGhpcy5zaGlwcGluZ1ByaWNlRGlzcGxheS5ub3JtYWxpemVQcmljZVZhbHVlKFxuICAgICAgICAgICAgc2hpcG1lbnRTdGVwRGF0YT8ub3JpZ2luYWxQcmljZSA/P1xuICAgICAgICAgICAgc2hpcG1lbnRTdGVwRGF0YT8uY29udHJhY3Q/Lm9yaWdpbmFsUHJpY2UgPz9cbiAgICAgICAgICAgIHNoaXBtZW50U3RlcERhdGE/LnNlbGVjdGVkPy5jb250cmFjdD8ub3JpZ2luYWxQcmljZSA/P1xuICAgICAgICAgICAgbnVsbFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWdncmVnYXRlRGlzY291bnRzKGRhdGE6IENoZWNrb3V0RGF0YVtdKSB7XG4gICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5sZW5ndGgpIHJldHVybiBbXTtcbiAgICAgICAgY29uc3QgZGlzY291bnRUb3RhbCA9IGRhdGFcbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdkaXNjb3VudCcpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyArIChjdXJyLmFtb3VudCB8fCAwKSwgMCk7XG4gICAgICAgIGNvbnN0IGNvdXBvblRvdGFsID0gZGF0YVxuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2NvdXBvbicpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyArIChjdXJyLmFtb3VudCB8fCAwKSwgMCk7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgIT09ICdkaXNjb3VudCcgJiYgaXRlbS50eXBlICE9PSAnY291cG9uJyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaGlkZURpc2NvdW50cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXh0cmFzOiBDaGVja291dERhdGFbXSA9IFtdO1xuICAgICAgICBpZiAoZGlzY291bnRUb3RhbCAhPT0gMCkge1xuICAgICAgICAgICAgZXh0cmFzLnB1c2goeyB0eXBlOiAnZGlzY291bnQnLCBuYW1lOiAnZGlzY291bnQnLCBhbW91bnQ6IGRpc2NvdW50VG90YWwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvdXBvblRvdGFsICE9PSAwKSB7XG4gICAgICAgICAgICBleHRyYXMucHVzaCh7IHR5cGU6ICdjb3Vwb24nLCBuYW1lOiAnY291cG9uJywgYW1vdW50OiBjb3Vwb25Ub3RhbCB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV4dHJhcy5sZW5ndGgpIHJldHVybiBmaWx0ZXJlZDtcblxuICAgICAgICBjb25zdCBzdWJ0b3RhbEluZGV4ID0gZmlsdGVyZWQuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS50eXBlID09PSAnc3VidG90YWwnKTtcbiAgICAgICAgaWYgKHN1YnRvdGFsSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uZmlsdGVyZWRdO1xuICAgICAgICAgICAgcmVzdWx0LnNwbGljZShzdWJ0b3RhbEluZGV4ICsgMSwgMCwgLi4uZXh0cmFzKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaXJzdEluZGV4ID0gZGF0YS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdkaXNjb3VudCcgfHwgaXRlbS50eXBlID09PSAnY291cG9uJyk7XG4gICAgICAgIGlmIChmaXJzdEluZGV4ID09PSAtMSkgcmV0dXJuIFsuLi5maWx0ZXJlZCwgLi4uZXh0cmFzXTtcbiAgICAgICAgY29uc3QgaW5zZXJ0QXQgPSBkYXRhXG4gICAgICAgICAgICAuc2xpY2UoMCwgZmlyc3RJbmRleClcbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgIT09ICdkaXNjb3VudCcgJiYgaXRlbS50eXBlICE9PSAnY291cG9uJykubGVuZ3RoO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uZmlsdGVyZWRdO1xuICAgICAgICByZXN1bHQuc3BsaWNlKGluc2VydEF0LCAwLCAuLi5leHRyYXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvdWxkSGlkZVN1bW1hcnlTdWJ0b3RhbChpdGVtOiBDaGVja291dERhdGEpIHtcbiAgICAgICAgaWYgKGl0ZW0/LnR5cGUgIT09ICdzdWJ0b3RhbCcpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMubGFzdEFzc29jaWF0ZWREYXRhO1xuICAgICAgICBpZiAoIWRhdGE/Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBzdW1tYXJ5RGF0YSA9IHRoaXMuZ2V0U3VtbWFyeURhdGEoZGF0YSk7XG4gICAgICAgIGNvbnN0IHRvdGFsSXRlbSA9IHN1bW1hcnlEYXRhLmZpbmQoZGF0YUl0ZW0gPT4gZGF0YUl0ZW0udHlwZSA9PT0gJ3RvdGFsJyk7XG4gICAgICAgIHJldHVybiAhIXRvdGFsSXRlbSAmJiBpdGVtLmFtb3VudCA9PT0gdG90YWxJdGVtLmFtb3VudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNjcm9sbFRvU2VjdGlvbihzdGVwTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKCFyb290KSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gcm9vdC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1zdGVwPVxcXCIke3N0ZXBOYW1lfVxcXCJdYCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXNlY3Rpb24pIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IHNlY3Rpb24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gMTI7XG4gICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IE1hdGgubWF4KDAsIHRvcCAtIG9mZnNldCksIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgICAgfSwgNTApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2Nyb2xsVG9Ub3BPbkVudGVyKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogMCwgbGVmdDogMCwgYmVoYXZpb3I6ICdhdXRvJyB9KTtcbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cFN1bW1hcnlPYnNlcnZlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJykgcmV0dXJuO1xuICAgICAgICBjb25zdCByb290ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICghcm9vdCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaW5pc2hCdG4gPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNjaGVja291dEZpbmlzaEJ0bicpO1xuICAgICAgICBpZiAoIWZpbmlzaEJ0bikgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuc3VtbWFyeU9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGVudHJpZXNbMF07XG4gICAgICAgICAgICB0aGlzLmhpZGVNb2JpbGVTdW1tYXJ5QmFyID0gISFlbnRyeSAmJiBlbnRyeS5pc0ludGVyc2VjdGluZztcbiAgICAgICAgfSwgeyByb290TWFyZ2luOiAnMHB4IDBweCAtMTIwcHggMHB4JywgdGhyZXNob2xkOiAwIH0pO1xuXG4gICAgICAgIHRoaXMuc3VtbWFyeU9ic2VydmVyLm9ic2VydmUoZmluaXNoQnRuKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJylcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgICBldmFsdWF0ZU1vYmlsZUJhclZpc2liaWxpdHkoKSB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrb3V0VmlldyAhPT0gJ3NpbmdsZScpIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLmZpbmlzaEJ1dHRvbkVsKSB7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaEJ1dHRvbkVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NoZWNrb3V0RmluaXNoQnRuJyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZmluaXNoQnV0dG9uRWwpIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5maW5pc2hCdXR0b25FbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMDtcbiAgICAgICAgdGhpcy5oaWRlTW9iaWxlU3VtbWFyeUJhciA9IHJlY3QudG9wIDwgKHZpZXdwb3J0SGVpZ2h0IC0gODApO1xuICAgIH1cblxuICAgIGFyZUFsbFN0ZXBzUmVhZHkgPSAoc3RlcHM6IHsgaXNSZWFkeTogKCkgPT4gYm9vbGVhbjsgbmFtZT86IHN0cmluZyB9W10pID0+IHtcbiAgICAgICAgaWYgKCFzdGVwcyB8fCAhc3RlcHMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBzdGVwcy5ldmVyeShzdGVwID0+IHtcbiAgICAgICAgICAgIGlmICghc3RlcC5pc1JlYWR5KCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghc3RlcC5uYW1lKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc1N0ZXBEaXJ0eShzdGVwLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaG91bGRIaWRlRmluaXNoQnV0dG9uID0gKHN0ZXBzOiB7IGlzUmVhZHk6ICgpID0+IGJvb2xlYW4gfVtdKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrb3V0VmlldyAhPT0gJ3NpbmdsZScpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLmFyZUFsbFN0ZXBzUmVhZHkoc3RlcHMpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHBheW1lbnREYXRhOiBhbnkgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YSgncGF5bWVudCcgYXMgYW55KTtcbiAgICAgICAgcmV0dXJuICEhcGF5bWVudERhdGE/LmF1dG9Db21wbGV0ZTtcbiAgICB9XG5cbiAgICBvcGVuVW5zYXZlZENoYW5nZXNNb2RhbCA9ICh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PikgPT4ge1xuICAgICAgICBpZiAoIXRoaXMucGVuZGluZ0Nsb3NlU3RlcE5hbWUpIHJldHVybjtcbiAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3codGVtcGxhdGUsIHtcbiAgICAgICAgICAgIGNsYXNzOiAnbW9kYWwtZGlhbG9nLWNlbnRlcmVkIGNoZWNrb3V0LXVuc2F2ZWQtbW9kYWwnLFxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNhbmNlbFVuc2F2ZWRDbG9zZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSA9IG51bGw7XG4gICAgICAgIHRoaXMubW9kYWxSZWY/LmhpZGUoKTtcbiAgICB9XG5cbiAgICBjb25maXJtVW5zYXZlZERpc2NhcmQgPSAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5tb2RhbFJlZj8uaGlkZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ZXBOYW1lID0gdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZGlzY2FyZFN0ZXBDaGFuZ2VzKHN0ZXBOYW1lKTtcbiAgICAgICAgdGhpcy5vcGVuU2VjdGlvbnMgPSB0aGlzLm9wZW5TZWN0aW9ucy5maWx0ZXIobmFtZSA9PiBuYW1lICE9PSBzdGVwTmFtZSk7XG4gICAgICAgIHRoaXMubW9kYWxSZWY/LmhpZGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc2NhcmRTdGVwQ2hhbmdlcyhzdGVwTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChzdGVwTmFtZSA9PT0gJ2FkZHJlc3MnKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhZm9ybSA9IHRoaXMuZGF0YWZvcm1Db21wb25lbnRzPy5maXJzdDtcbiAgICAgICAgICAgIGlmIChkYXRhZm9ybSkge1xuICAgICAgICAgICAgICAgIGRhdGFmb3JtLmRpc2NhcmRDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0ZXBEaXJ0eU1hcC5zZXQoc3RlcE5hbWUsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcE5hbWUgPT09ICdwYXltZW50Jykge1xuICAgICAgICAgICAgY29uc3QgcGF5bWVudCA9IHRoaXMucGF5bWVudENvbXBvbmVudHM/LmZpcnN0O1xuICAgICAgICAgICAgaWYgKHBheW1lbnQpIHtcbiAgICAgICAgICAgICAgICBwYXltZW50LmRpc2NhcmRDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0ZXBEaXJ0eU1hcC5zZXQoc3RlcE5hbWUsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0ZXBEaXJ0eU1hcC5zZXQoc3RlcE5hbWUsIGZhbHNlKTtcbiAgICB9XG59XG4iXX0=
|
|
672
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC9jaGVja291dC1lYy9jaGVja291dC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEssT0FBTyxPQUFPLE1BQU0sWUFBWSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBK0IsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMs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b3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIFZpZXdDaGlsZHJlbiwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgU3RlcHBlciBmcm9tICdicy1zdGVwcGVyJztcbmltcG9ydCB7IFJvdXRlciwgTmF2aWdhdGlvbkVuZCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2hlY2tvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hlY2tvdXQvY2hlY2tvdXQuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcbmltcG9ydCB7IFN0ZXBJIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zdGVwJztcbmltcG9ydCB7IENoZWNrb3V0RGF0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2hlY2tvdXQtZGF0YSc7XG5pbXBvcnQgeyBQcm9kdWN0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm9kdWN0cy9wcm9kdWN0cy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudEhlbHBlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY29tcG9uZW50LWhlbHBlcic7XG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5uZWwtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hlY2tvdXRWaWV3VHlwZSwgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29yZS5jb25zdHMnO1xuaW1wb3J0IHsgRGF0YUZvcm1FY0NvbXBvbmVudCB9IGZyb20gJy4vZGF0YWZvcm0tZWMvZGF0YWZvcm0tZWMuY29tcG9uZW50JztcbmltcG9ydCB7IFBheW1lbnRFY0NvbXBvbmVudCB9IGZyb20gJy4vcGF5bWVudC1lYy9wYXltZW50LWVjLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSwgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgU2hpcHBpbmdQcmljZURpc3BsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvc2hpcHBpbmctcHJpY2UtZGlzcGxheS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlb1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZW8uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWNoZWNrb3V0LWVjJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2hlY2tvdXQtZWMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NoZWNrb3V0LWVjLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tvdXRFY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIHB1YmxpYyBzdGVwcGVyOiBTdGVwcGVyO1xuICAgIHB1YmxpYyBsb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgcHVibGljIGNhbkNoZWNrb3V0ID0gZmFsc2U7XG4gICAgcHVibGljIHJlcXVpcmVfbG9naW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgc3ViQ2FuOiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljIHN1YlJlYWR5OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljIGNoYW5uZWw6IGFueTtcbiAgICBwdWJsaWMgc3RlcHM6IGFueVtdID0gW107XG4gICAgcHVibGljIGhpZGVQcmljZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaGlkZURpc2NvdW50czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBjaGVja291dFZpZXc6IENoZWNrb3V0Vmlld1R5cGUgPSAnbGVnYWN5JztcbiAgICBwdWJsaWMgY3JlZGl0QWNjb3VudFNob3dQcmljZXM6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIGxhc3RBc3NvY2lhdGVkRGF0YTogQ2hlY2tvdXREYXRhW10gfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgb3BlblNlY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgbGFzdFBheW1lbnRBZGRyZXNzS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHBheW1lbnRBdXRvT3BlbmVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBhdXRvQ2xvc2VkU3RlcHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBwcml2YXRlIG1hbnVhbGx5T3BlbmVkU3RlcHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBwdWJsaWMgaGlkZVRheGVzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHNob3dUYXhMZWdlbmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgc2hpcG1lbnRTdW1tYXJ5OiB7IGxhYmVsPzogc3RyaW5nOyBkZXRhaWw/OiBzdHJpbmcgfSB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBoaWRlTW9iaWxlU3VtbWFyeUJhciA9IGZhbHNlO1xuICAgIHByaXZhdGUgc3VtbWFyeU9ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgZmluaXNoQnV0dG9uRWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBzdGVwRGlydHlNYXAgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcbiAgICBwdWJsaWMgbW9kYWxSZWY6IEJzTW9kYWxSZWYgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHBlbmRpbmdDbG9zZVN0ZXBOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIG5hdlN1YjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgY2hhbm5lbFJlYWR5ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBwZW5kaW5nQ2hlY2tvdXRJbml0ID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgbG9hZGluZyQgPSB0aGlzLmxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgQFZpZXdDaGlsZHJlbihEYXRhRm9ybUVjQ29tcG9uZW50KSBwcml2YXRlIGRhdGFmb3JtQ29tcG9uZW50czogUXVlcnlMaXN0PERhdGFGb3JtRWNDb21wb25lbnQ+O1xuICAgIEBWaWV3Q2hpbGRyZW4oUGF5bWVudEVjQ29tcG9uZW50KSBwcml2YXRlIHBheW1lbnRDb21wb25lbnRzOiBRdWVyeUxpc3Q8UGF5bWVudEVjQ29tcG9uZW50PjtcbiAgICBAVmlld0NoaWxkKCd1bnNhdmVkQ2hhbmdlc01vZGFsJykgcHJpdmF0ZSB1bnNhdmVkQ2hhbmdlc01vZGFsOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGNoZWNrb3V0U2VydmljZTogQ2hlY2tvdXRTZXJ2aWNlLCBwdWJsaWMgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsIHB1YmxpYyBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsIHB1YmxpYyBwcm9kdWN0c1NlcnZpY2U6IFByb2R1Y3RzU2VydmljZSxcbiAgICAgICAgcHVibGljIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsQ29uZmlnU2VydmljZSwgcHVibGljIGNvbnN0czogQ29uc3RhbnRzLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzaGlwcGluZ1ByaWNlRGlzcGxheTogU2hpcHBpbmdQcmljZURpc3BsYXlTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgc2VvOiBTZW9TZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRWaWV3ID0gdGhpcy5jb25zdHMuZ2V0Q2hlY2tvdXRWaWV3KCk7XG4gICAgICAgIHRoaXMuY29uc3RzLmNoZWNrb3V0VmlldyQuc3Vic2NyaWJlKHZpZXcgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGVja291dFZpZXcgPSB2aWV3IHx8ICdsZWdhY3knO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbCA9IHJlc1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplU3RlcHMoKVxuICAgICAgICAgICAgdGhpcy5oaWRlUHJpY2VzID0gcmVzPy5oaWRlUHJpY2VzID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oaWRlRGlzY291bnRzID0gcmVzPy5oaWRlRGlzY291bnRzID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oaWRlVGF4ZXMgPSByZXM/LmhpZGVUYXhlcyA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1RheExlZ2VuZCA9IHJlcz8uc2hvd1RheExlZ2VuZCA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbFJlYWR5ID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGlkZVByaWNlcykge1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdDaGVja291dEluaXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdDaGVja291dEluaXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDaGVja291dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnN0ZXBFbmFibGVkKDMpKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmVjT25Db25zdHJ1Y3QoKVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ2hlY2tvdXRTZW8gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNpdGVOYW1lID0gdGhpcy5zZW8uZ2V0U2l0ZU5hbWUoKTtcbiAgICAgICAgdGhpcy5zZW8uc2V0VGl0bGUoYENoZWNrb3V0IHwgJHtzaXRlTmFtZX1gKTtcbiAgICAgICAgdGhpcy5zZW8uc2V0RGVzY3JpcHRpb24oYEZpbmFsaXrDoSB0dSBjb21wcmEgZW4gJHtzaXRlTmFtZX0uYCk7XG4gICAgICAgIHRoaXMuc2VvLnNldE9nVHlwZSgnd2Vic2l0ZScpO1xuICAgICAgICB0aGlzLnNlby5zZXROb0luZGV4KHRydWUpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5zZW8uc2V0Q2Fub25pY2FsKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLm5hdlN1YiA9IHRoaXMucm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygnL2NoZWNrb3V0JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvVG9wT25FbnRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJDYW4gPSB0aGlzLmNoZWNrb3V0U2VydmljZS5jYW5DaGVja291dCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoY29udGFpbl9pdGVtcyA9PiB7XG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5faXRlbXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbkNoZWNrb3V0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoYW5uZWxSZWFkeSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0NoZWNrb3V0SW5pdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ2hlY2tvdXQoKTtcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2Uuc3RhdGUkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xlZ2FjeUNoZWNrb3V0KCkpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGhhc1BheW1lbnRTdGVwID0gdGhpcy5zdGVwcy5zb21lKHN0ZXAgPT4gc3RlcC5uYW1lID09PSAncGF5bWVudCcpO1xuICAgICAgICAgICAgaWYgKCFoYXNQYXltZW50U3RlcCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgYWRkcmVzc0RhdGEgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YSgnYWRkcmVzcycpO1xuICAgICAgICAgICAgaWYgKCFhZGRyZXNzRGF0YSkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoYWRkcmVzc0RhdGEpO1xuICAgICAgICAgICAgaWYgKHRoaXMubGFzdFBheW1lbnRBZGRyZXNzS2V5ID09PSBrZXkpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMubGFzdFBheW1lbnRBZGRyZXNzS2V5ID0ga2V5O1xuICAgICAgICB9KVxuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5zdGF0ZSQuc3Vic2NyaWJlKHN0ZXBzID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGVnYWN5Q2hlY2tvdXQoKSB8fCAhc3RlcHMpIHJldHVybjtcbiAgICAgICAgICAgIHN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFzdGVwPy5uYW1lKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKCFzdGVwLmlzUmVhZHkoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9DbG9zZWRTdGVwcy5kZWxldGUoc3RlcC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1N0ZXBEaXJ0eShzdGVwLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmF1dG9DbG9zZWRTdGVwcy5oYXMoc3RlcC5uYW1lKSAmJiB0aGlzLm9wZW5TZWN0aW9ucy5pbmNsdWRlcyhzdGVwLm5hbWUpICYmICF0aGlzLm1hbnVhbGx5T3BlbmVkU3RlcHMuaGFzKHN0ZXAubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuU2VjdGlvbnMgPSB0aGlzLm9wZW5TZWN0aW9ucy5maWx0ZXIobmFtZSA9PiBuYW1lICE9PSBzdGVwLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9DbG9zZWRTdGVwcy5hZGQoc3RlcC5uYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnBheW1lbnRNZXRob2RzJC5zdWJzY3JpYmUobWV0aG9kcyA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xlZ2FjeUNoZWNrb3V0KCkpIHJldHVybjtcbiAgICAgICAgICAgIGlmICh0aGlzLnBheW1lbnRBdXRvT3BlbmVkKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIW1ldGhvZHMgfHwgIW1ldGhvZHMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBoYXNTaGlwbWVudFN0ZXAgPSB0aGlzLnN0ZXBzLnNvbWUoc3RlcCA9PiBzdGVwLm5hbWUgPT09ICdzaGlwbWVudCcpO1xuICAgICAgICAgICAgaWYgKGhhc1NoaXBtZW50U3RlcCAmJiAhdGhpcy5pc1N0ZXBSZWFkeSgnc2hpcG1lbnQnKSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCFoYXNTaGlwbWVudFN0ZXAgJiYgIXRoaXMuaXNTdGVwRW5hYmxlZCgncGF5bWVudCcpKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIXRoaXMub3BlblNlY3Rpb25zLmluY2x1ZGVzKCdwYXltZW50JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5TZWN0aW9ucy5wdXNoKCdwYXltZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBheW1lbnRBdXRvT3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2hlY2tvdXRTZW8oKTtcbiAgICAgICAgdGhpcy5lY09uSW5pdCgpXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoc2hvd1ByaWNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlZGl0QWNjb3VudFNob3dQcmljZXMgPSBzaG93UHJpY2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5hc29jaWF0ZWREYXRhJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxhc3RBc3NvY2lhdGVkRGF0YSA9IGRhdGE7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb1RvcE9uRW50ZXIoKTtcbiAgICAgICAgdGhpcy5zZXR1cFN1bW1hcnlPYnNlcnZlcigpO1xuICAgICAgICB0aGlzLmZpbmlzaEJ1dHRvbkVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NoZWNrb3V0RmluaXNoQnRuJyk7XG4gICAgICAgIHRoaXMuZXZhbHVhdGVNb2JpbGVCYXJWaXNpYmlsaXR5KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnN1bW1hcnlPYnNlcnZlcikge1xuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5T2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5T2JzZXJ2ZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmluaXNoQnV0dG9uRWwgPSBudWxsO1xuICAgICAgICB0aGlzLnN1YkNhbj8udW5zdWJzY3JpYmUoKVxuICAgICAgICB0aGlzLnN1YlJlYWR5Py51bnN1YnNjcmliZSgpXG4gICAgICAgIHRoaXMubmF2U3ViPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGluaXRpYWxpemVDaGVja291dCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jYW5DaGVja291dCA9IHRydWU7XG4gICAgICAgIGxldCBzdGVwczogU3RlcElbXSA9IFtdO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdjaGFubmVsJywgdGhpcy5jaGFubmVsKVxuICAgICAgICBzdGVwcy5wdXNoKHsgbmFtZTogJ2FkZHJlc3MnIH0pO1xuICAgICAgICB0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdTaGlwcGluZ1N0ZXBBbGxvd2VkID8gbnVsbCA6IHN0ZXBzLnB1c2goeyBuYW1lOiAnc2hpcG1lbnQnIH0pO1xuICAgICAgICB0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdQYXltZW50U3RlcEFsbG93ZWQgPyBudWxsIDogc3RlcHMucHVzaCh7IG5hbWU6ICdwYXltZW50JyB9KTtcbiAgICAgICAgLyogc3RlcHMucHVzaCh7IG5hbWU6ICdzaGlwbWVudCcgfSk7XG4gICAgICAgIHN0ZXBzLnB1c2goeyBuYW1lOiAncGF5bWVudCcgfSk7ICovXG4gICAgICAgIC8vY29uc29sZS5sb2coc3RlcHMpXG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnNldFN0ZXBzKHN0ZXBzKTtcbiAgICAgICAgaWYgKHRoaXMuaXNMZWdhY3lDaGVja291dCgpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0ZXBwZXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICBpZiAodGhpcy5pc0xlZ2FjeUNoZWNrb3V0KCkgJiYgKHRoaXMuY2hhbm5lbD8uaXNTa2lwcGluZ1NoaXBwaW5nU3RlcEFsbG93ZWQgIT0gdHJ1ZSB8fCB0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdQYXltZW50U3RlcEFsbG93ZWQgIT0gdHJ1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc3ViUmVhZHkgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5vblJlYWR5JC5waXBlKGZpbHRlcihyZWFkeSA9PiByZWFkeSkpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICByZXMgPT4geyByZXMgJiYgdGhpcy5lbmRDaGVja291dCgpIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnb0JhY2sgPSAoKSA9PiB0aGlzLnN0ZXBwZXIucHJldmlvdXMoKTtcblxuICAgIGlzU3RlcFJlYWR5ID0gKHN0ZXBfbmFtZSkgPT4gdGhpcy5jaGVja291dFNlcnZpY2UuaXNTdGVwUmVhZHkoc3RlcF9uYW1lKTtcblxuICAgIGlzU3RlcERpcnR5ID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+ICEhdGhpcy5zdGVwRGlydHlNYXAuZ2V0KHN0ZXBOYW1lKTtcblxuICAgIGlzU3RlcENvbXBsZXRlID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+IHRoaXMuaXNTdGVwUmVhZHkoc3RlcE5hbWUpICYmICF0aGlzLmlzU3RlcERpcnR5KHN0ZXBOYW1lKTtcblxuICAgIG9uU3RlcERpcnR5Q2hhbmdlID0gKHN0ZXBOYW1lOiBzdHJpbmcsIGlzRGlydHk6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy5zdGVwRGlydHlNYXAuc2V0KHN0ZXBOYW1lLCBpc0RpcnR5KTtcbiAgICB9XG5cbiAgICBlbmRDaGVja291dCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2UuY29tcGxldGUoKS50aGVuKFxuICAgICAgICAgICAgcmVzID0+IHJlcy5vayAmJiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2NoZWNrb3V0L29yZGVyX3N1Y2Nlc3MnXSksXG4gICAgICAgICAgICBlcnIgPT4gdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvcicpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBzZXRTdGVwcGVyID0gKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3RlcHBlcicpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBwZXIgPSBuZXcgU3RlcHBlcihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3RlcHBlcicpLCB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVhcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiB0cnVlXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGVwcGVyKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdGVwcGVyKVxuICAgIH1cblxuICAgIG5leHQgPSAoKSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdGVwcGVyKVxuICAgICAgICB0aGlzLnN0ZXBwZXIubmV4dCgpXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdGVwcGVyKVxuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe1xuICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICBlcnJvciA9IChlcnJvcl92YWx1ZSkgPT4gdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coZXJyb3JfdmFsdWUpO1xuXG4gICAgZ2V0SWNvbiA9IChkYXRhX2l0ZW06IENoZWNrb3V0RGF0YSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGRhdGFfaXRlbS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdjb3Vwb24nOiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvY291cG9uLnBuZyc7XG4gICAgICAgICAgICBjYXNlICdkaXNjb3VudCc6IHJldHVybiAnYXNzZXRzL2ltYWdlcy9kaXNjb3VudC5wbmcnO1xuICAgICAgICAgICAgY2FzZSAnc2hpcG1lbnQnOiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvaWNvLWVudmlvLnBuZyc7XG4gICAgICAgICAgICBjYXNlICdzdWJ0b3RhbCc6IHJldHVybiAnYXNzZXRzL2ltYWdlcy9wcm9kdWN0cy5wbmcnO1xuICAgICAgICAgICAgY2FzZSAndG90YWwnOiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvaWNvLWNhcnJpdG8ucG5nJztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiAnYXNzZXRzL2ltYWdlcy9pY28tY2Fycml0by5wbmcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZVN0ZXBzID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnN0ZXBzID0gW107XG4gICAgICAgIC8vRWwgcGFzbyBkZSBlbGVnaXIgZGlyZWNjacOzbiBzaWVtcHJlIGVzdGFcbiAgICAgICAgdGhpcy5zdGVwcy5wdXNoKHsgbGFiZWw6ICdiaWxsaW5nLWRldGFpbHMnLCBuYW1lOiAnYWRkcmVzcycgfSlcbiAgICAgICAgLy9FbCBwYXNvIGRlIGVsZWdpciBtZXRvZG8gZGUgZW52aW9cbiAgICAgICAgdGhpcy5jaGFubmVsPy5pc1NraXBwaW5nU2hpcHBpbmdTdGVwQWxsb3dlZCA/IG51bGwgOiB0aGlzLnN0ZXBzLnB1c2goeyBsYWJlbDogJ3NoaXBtZW50LW1ldGhvZCcsIG5hbWU6ICdzaGlwbWVudCcgfSlcbiAgICAgICAgLy9FbCBwYXNvIGRlIGVsZWdpciBtZXRvZG8gZGUgcGFnb1xuICAgICAgICB0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdQYXltZW50U3RlcEFsbG93ZWQgPyBudWxsIDogdGhpcy5zdGVwcy5wdXNoKHsgbGFiZWw6ICdwYXltZW50JywgbmFtZTogJ3BheW1lbnQnIH0pXG4gICAgICAgIHRoaXMuc3RlcHMgPSB0aGlzLnN0ZXBzLm1hcCgoc3RlcCwgaW5kZXgpID0+ICh7IC4uLnN0ZXAsIHN0ZXA6IGluZGV4ICsgMSB9KSk7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdGVwcylcbiAgICAgICAgaWYgKHRoaXMuc3RlcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5TZWN0aW9ucyA9IFt0aGlzLnN0ZXBzWzBdLm5hbWVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RlcEVuYWJsZWQgPSAoc3RlcE51bWJlcjogbnVtYmVyKSA9PiB0aGlzLnN0ZXBzLmZpbmQoc3RlcCA9PiBzdGVwLnN0ZXAgPT0gc3RlcE51bWJlcikgPyB0cnVlIDogZmFsc2VcblxuICAgIGdldENsYXNzVG9TdGVwcGVyID0gKGluZGV4OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgICAgICBpZiAoaW5kZXggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICdsaW5lYSdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0ZXBzW2luZGV4ICsgMV0gPyAndGV4dC1jZW50ZXInIDogJ3RleHQtZW5kJ1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNMZWdhY3lDaGVja291dCA9ICgpID0+IHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJztcblxuICAgIGdldFNpbmdsZVN0ZXBUaXRsZSA9IChzdGVwOiBTdGVwSSAmIHsgbGFiZWw/OiBzdHJpbmcgfSkgPT5cbiAgICAgICAgc3RlcD8ubmFtZSA9PT0gJ2FkZHJlc3MnID8gJ2FkZHJlc3Mtc2VsZWN0aW9uJyA6IHN0ZXA/LmxhYmVsO1xuXG4gICAgZ2V0U2luZ2xlU3VtbWFyeUxhYmVsID0gKHN0ZXA6IFN0ZXBJICYgeyBsYWJlbD86IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGlmIChzdGVwPy5uYW1lID09PSAnYWRkcmVzcycpIHJldHVybiB0aGlzLmdldEFkZHJlc3NTdW1tYXJ5TGFiZWwoKTtcbiAgICAgICAgaWYgKHN0ZXA/Lm5hbWUgPT09ICdzaGlwbWVudCcpIHJldHVybiB0aGlzLnNoaXBtZW50U3VtbWFyeT8ubGFiZWwgfHwgJyc7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBnZXRTaW5nbGVTdW1tYXJ5VmFsdWUgPSAoc3RlcDogU3RlcEkgJiB7IGxhYmVsPzogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgaWYgKHN0ZXA/Lm5hbWUgPT09ICdzaGlwbWVudCcpIHJldHVybiB0aGlzLnNoaXBtZW50U3VtbWFyeT8uZGV0YWlsIHx8ICcnO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGVwU3VtbWFyeShzdGVwPy5uYW1lKTtcbiAgICB9XG5cbiAgICBpc1N0ZXBFbmFibGVkID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnN0ZXBzLmZpbmRJbmRleChzdGVwID0+IHN0ZXAubmFtZSA9PT0gc3RlcE5hbWUpO1xuICAgICAgICBpZiAoaW5kZXggPD0gMCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrb3V0VmlldyA9PT0gJ3NpbmdsZScgJiYgc3RlcE5hbWUgPT09ICdwYXltZW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNTdGVwUmVhZHkoJ2FkZHJlc3MnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmV2U3RlcCA9IHRoaXMuc3RlcHNbaW5kZXggLSAxXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdGVwUmVhZHkocHJldlN0ZXAubmFtZSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2VjdGlvbiA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0ZXBFbmFibGVkKHN0ZXBOYW1lKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMub3BlblNlY3Rpb25zLmluZGV4T2Yoc3RlcE5hbWUpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGVwUmVhZHkoc3RlcE5hbWUpICYmIHRoaXMuaXNTdGVwRGlydHkoc3RlcE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSA9IHN0ZXBOYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMub3BlblVuc2F2ZWRDaGFuZ2VzTW9kYWwodGhpcy51bnNhdmVkQ2hhbmdlc01vZGFsKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9wZW5TZWN0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuU2VjdGlvbnMucHVzaChzdGVwTmFtZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1N0ZXBSZWFkeShzdGVwTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hbnVhbGx5T3BlbmVkU3RlcHMuYWRkKHN0ZXBOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9TZWN0aW9uKHN0ZXBOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdvVG9OZXh0U2VjdGlvbiA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zdGVwcy5maW5kSW5kZXgoc3RlcCA9PiBzdGVwLm5hbWUgPT09IHN0ZXBOYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSB8fCAhdGhpcy5zdGVwc1tpbmRleCArIDFdKSByZXR1cm47XG4gICAgICAgIGNvbnN0IG5leHROYW1lID0gdGhpcy5zdGVwc1tpbmRleCArIDFdLm5hbWU7XG4gICAgICAgIHRoaXMub3BlblNlY3Rpb25zID0gdGhpcy5vcGVuU2VjdGlvbnMuZmlsdGVyKG5hbWUgPT4gbmFtZSAhPT0gc3RlcE5hbWUpO1xuICAgICAgICBpZiAoIXRoaXMub3BlblNlY3Rpb25zLmluY2x1ZGVzKG5leHROYW1lKSkgdGhpcy5vcGVuU2VjdGlvbnMucHVzaChuZXh0TmFtZSk7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9TZWN0aW9uKG5leHROYW1lKTtcbiAgICB9XG5cbiAgICBnb1RvTmV4dEZyb21BZGRyZXNzID0gKCkgPT4gdGhpcy5nb1RvTmV4dFNlY3Rpb24oJ2FkZHJlc3MnKTtcblxuICAgIGlzU2VjdGlvbk9wZW4gPSAoc3RlcE5hbWU6IHN0cmluZykgPT4gdGhpcy5vcGVuU2VjdGlvbnMuaW5jbHVkZXMoc3RlcE5hbWUpO1xuXG4gICAgZ2V0U3VtbWFyeUxhYmVsID0gKHR5cGU6IENoZWNrb3V0RGF0YVsndHlwZSddLCBpdGVtPzogQ2hlY2tvdXREYXRhKSA9PiB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAncHJvZHVjdHNCZWZvcmVEaXNjb3VudHMnOiByZXR1cm4gJ3Byb2R1Y3RzLWJlZm9yZS1kaXNjb3VudHMnO1xuICAgICAgICAgICAgY2FzZSAnc3VidG90YWwnOiByZXR1cm4gJ3N1YnRvdGFsJztcbiAgICAgICAgICAgIGNhc2UgJ2Rpc2NvdW50JzogcmV0dXJuICdkaXNjb3VudCc7XG4gICAgICAgICAgICBjYXNlICdwYXltZW50TWV0aG9kQWRqdXN0bWVudCc6IHJldHVybiAoaXRlbT8uYW1vdW50ID8/IDApIDwgMCA/ICdwYXltZW50LW1ldGhvZC1kaXNjb3VudCcgOiAncGF5bWVudC1tZXRob2Qtc3VyY2hhcmdlJztcbiAgICAgICAgICAgIGNhc2UgJ2NvdXBvbic6IHJldHVybiAnY291cG9uJztcbiAgICAgICAgICAgIGNhc2UgJ2xpbmVEaXNjb3VudCc6IHJldHVybiAnbGluZS1kaXNjb3VudHMnO1xuICAgICAgICAgICAgY2FzZSAnc2hpcG1lbnQnOiByZXR1cm4gJ3NoaXBtZW50JztcbiAgICAgICAgICAgIGNhc2UgJ3RheGVzJzpcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnRheGVzSW5jbHVkZWRJblRvdGFsID09PSB0cnVlKSByZXR1cm4gJ3RheGVzLWluY2x1ZGVkLWluLXRvdGFsJztcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnRheGVzSW5jbHVkZWRJblRvdGFsID09PSBmYWxzZSkgcmV0dXJuICd0YXhlcyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1RheExlZ2VuZCA/ICduYXRpb25hbC10YXhlcycgOiAndGF4ZXMnO1xuICAgICAgICAgICAgY2FzZSAnY2xpZW50VGF4ZXMnOiByZXR1cm4gJ2NsaWVudFRheGVzJztcbiAgICAgICAgICAgIGNhc2UgJ3RvdGFsJzogcmV0dXJuICd0b3RhbCc7XG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gdHlwZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFN1bW1hcnlEYXRhID0gKGRhdGE6IENoZWNrb3V0RGF0YVtdKSA9PiB7XG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuIFtdO1xuICAgICAgICBpZiAodGhpcy5jaGVja291dFZpZXcgIT09ICdzaW5nbGUnKSByZXR1cm4gZGF0YTtcbiAgICAgICAgbGV0IHN1bW1hcnlEYXRhID0gZGF0YTtcbiAgICAgICAgY29uc3QgaGFzU2hpcG1lbnQgPSBzdW1tYXJ5RGF0YS5zb21lKGl0ZW0gPT4gaXRlbS50eXBlID09PSAnc2hpcG1lbnQnKTtcbiAgICAgICAgaWYgKCFoYXNTaGlwbWVudCAmJiB0aGlzLmlzU3RlcFJlYWR5KCdzaGlwbWVudCcpKSB7XG4gICAgICAgICAgICBjb25zdCBvcmRlclRvdGFscyA9IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldE9yZGVyKCk/LnRvdGFscztcbiAgICAgICAgICAgIGNvbnN0IHNoaXBtZW50QW1vdW50ID0gdGhpcy5zaGlwcGluZ1ByaWNlRGlzcGxheS5ub3JtYWxpemVQcmljZVZhbHVlKG9yZGVyVG90YWxzPy5zaGlwcGluZyk7XG4gICAgICAgICAgICBpZiAoc2hpcG1lbnRBbW91bnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNoaXBtZW50SXRlbTogQ2hlY2tvdXREYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2hpcG1lbnQnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2hpcG1lbnQnLFxuICAgICAgICAgICAgICAgICAgICBhbW91bnQ6IHNoaXBtZW50QW1vdW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3RhbEluZGV4ID0gc3VtbWFyeURhdGEuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS50eXBlID09PSAndG90YWwnKTtcbiAgICAgICAgICAgICAgICBpZiAodG90YWxJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VtbWFyeURhdGEgPSBbLi4uc3VtbWFyeURhdGEsIHNoaXBtZW50SXRlbV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYHRvdGFsYCB5YSBlcyBlbCBpbXBvcnRlIGZpbmFsIGluZm9ybWFkbyBwb3IgYmFja2VuZC5cbiAgICAgICAgICAgICAgICAgICAgLy8gU8OzbG8gc2UgaW5jb3Jwb3JhIGVsIGVudsOtbyBmYWx0YW50ZSwgc2luIHJlY29uc3RydWlyIG5pXG4gICAgICAgICAgICAgICAgICAgIC8vIG1vZGlmaWNhciBlc2UgdG90YWwuXG4gICAgICAgICAgICAgICAgICAgIHN1bW1hcnlEYXRhID0gWy4uLnN1bW1hcnlEYXRhLnNsaWNlKDAsIHRvdGFsSW5kZXgpLCBzaGlwbWVudEl0ZW0sIC4uLnN1bW1hcnlEYXRhLnNsaWNlKHRvdGFsSW5kZXgpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3VtbWFyeURhdGEgPSB0aGlzLmFnZ3JlZ2F0ZURpc2NvdW50cyhzdW1tYXJ5RGF0YSlcbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgIT09ICdwcm9kdWN0c0JlZm9yZURpc2NvdW50cycgJiYgaXRlbS50eXBlICE9PSAnbGluZURpc2NvdW50Jyk7XG5cbiAgICAgICAgY29uc3QgaW5jbHVkZWRUYXhlcyA9IHN1bW1hcnlEYXRhLmZpbHRlcihpdGVtID0+XG4gICAgICAgICAgICBpdGVtLnR5cGUgPT09ICd0YXhlcycgJiYgaXRlbS50YXhlc0luY2x1ZGVkSW5Ub3RhbCA9PT0gdHJ1ZVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghaW5jbHVkZWRUYXhlcy5sZW5ndGgpIHJldHVybiBzdW1tYXJ5RGF0YTtcblxuICAgICAgICBjb25zdCB3aXRob3V0SW5jbHVkZWRUYXhlcyA9IHN1bW1hcnlEYXRhLmZpbHRlcihpdGVtID0+XG4gICAgICAgICAgICAhKGl0ZW0udHlwZSA9PT0gJ3RheGVzJyAmJiBpdGVtLnRheGVzSW5jbHVkZWRJblRvdGFsID09PSB0cnVlKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCB0b3RhbEluZGV4ID0gd2l0aG91dEluY2x1ZGVkVGF4ZXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS50eXBlID09PSAndG90YWwnKTtcblxuICAgICAgICBpZiAodG90YWxJbmRleCA9PT0gLTEpIHJldHVybiBbLi4ud2l0aG91dEluY2x1ZGVkVGF4ZXMsIC4uLmluY2x1ZGVkVGF4ZXNdO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi53aXRob3V0SW5jbHVkZWRUYXhlcy5zbGljZSgwLCB0b3RhbEluZGV4ICsgMSksXG4gICAgICAgICAgICAuLi5pbmNsdWRlZFRheGVzLFxuICAgICAgICAgICAgLi4ud2l0aG91dEluY2x1ZGVkVGF4ZXMuc2xpY2UodG90YWxJbmRleCArIDEpXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZ2V0U3VtbWFyeUFtb3VudFZpZXcgPSAoaXRlbTogQ2hlY2tvdXREYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsU2hpcG1lbnRBbW91bnQgPSBpdGVtPy50eXBlID09PSAnc2hpcG1lbnQnID8gdGhpcy5nZXRTaGlwbWVudE9yaWdpbmFsQW1vdW50KCkgOiBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcy5zaGlwcGluZ1ByaWNlRGlzcGxheS5idWlsZFZpZXdNb2RlbChpdGVtPy5hbW91bnQsIG9yaWdpbmFsU2hpcG1lbnRBbW91bnQpO1xuICAgIH1cblxuICAgIGdldFRvdGFsQW1vdW50ID0gKGRhdGE6IENoZWNrb3V0RGF0YVtdKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1bW1hcnlEYXRhID0gdGhpcy5nZXRTdW1tYXJ5RGF0YShkYXRhKTtcbiAgICAgICAgaWYgKCFzdW1tYXJ5RGF0YSB8fCAhc3VtbWFyeURhdGEubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgdG90YWxJdGVtID0gc3VtbWFyeURhdGEuZmluZChpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3RvdGFsJyk7XG4gICAgICAgIHJldHVybiB0b3RhbEl0ZW0gPyB0b3RhbEl0ZW0uYW1vdW50IDogbnVsbDtcbiAgICB9XG5cbiAgICBzaG91bGRTaG93U3VtbWFyeUl0ZW0gPSAoaXRlbTogQ2hlY2tvdXREYXRhKSA9PiB7XG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoaXRlbS50eXBlID09PSAncHJvZHVjdHNCZWZvcmVEaXNjb3VudHMnIHx8IGl0ZW0udHlwZSA9PT0gJ2xpbmVEaXNjb3VudCcpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKChpdGVtLnR5cGUgPT09ICdkaXNjb3VudCcgfHwgaXRlbS50eXBlID09PSAnY291cG9uJykgJiYgaXRlbS5hbW91bnQgPT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoKGl0ZW0udHlwZSA9PT0gJ2Rpc2NvdW50JyB8fCBpdGVtLnR5cGUgPT09ICdjb3Vwb24nKSAmJiB0aGlzLmhpZGVEaXNjb3VudHMpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3BheW1lbnRNZXRob2RBZGp1c3RtZW50JyAmJiAoaXRlbS5hbW91bnQgPT09IDAgfHwgaXRlbS5hbW91bnQgPT0gbnVsbCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3RheGVzJyAmJiAodGhpcy5oaWRlVGF4ZXMgfHwgaXRlbS5hbW91bnQgPT0gMCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2NsaWVudFRheGVzJyAmJiAodGhpcy5oaWRlVGF4ZXMgfHwgaXRlbS5hbW91bnQgPT0gMCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkSGlkZVN1bW1hcnlTdWJ0b3RhbChpdGVtKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRBZGRyZXNzU3VtbWFyeUxhYmVsID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBzdGVwRGF0YTogYW55ID0gdGhpcy5jaGVja291dFNlcnZpY2UuZ2V0U3RlcERhdGEoJ2FkZHJlc3MnIGFzIGFueSk7XG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPSBzdGVwRGF0YT8uc2hpcHBpbmdBZGRyZXNzIHx8IHN0ZXBEYXRhPy5zZWxlY3RlZD8uc2hpcHBpbmdBZGRyZXNzO1xuICAgICAgICBjb25zdCBjb250YWN0ID0gYWRkcmVzcz8uYWRkcmVzc0NvbnRhY3QgfHwgYWRkcmVzcz8uY29udGFjdCB8fCBhZGRyZXNzIHx8IHt9O1xuICAgICAgICByZXR1cm4gW2NvbnRhY3QuZmlyc3ROYW1lLCBjb250YWN0Lmxhc3ROYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICAgIH1cblxuICAgIGdldFN0ZXBTdW1tYXJ5ID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcERhdGE6IGFueSA9IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBEYXRhKHN0ZXBOYW1lIGFzIGFueSk7XG4gICAgICAgIGlmICghc3RlcERhdGEpIHJldHVybiAnJztcbiAgICAgICAgaWYgKHN0ZXBOYW1lID09PSAnYWRkcmVzcycpIHtcbiAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSBzdGVwRGF0YS5zaGlwcGluZ0FkZHJlc3MgfHwgc3RlcERhdGE/LnNlbGVjdGVkPy5zaGlwcGluZ0FkZHJlc3MgfHwgc3RlcERhdGE/LnNoaXBwaW5nQWRkcmVzcztcbiAgICAgICAgICAgIGlmICghYWRkcmVzcykgcmV0dXJuICcnO1xuICAgICAgICAgICAgY29uc3QgbWFpbiA9IFthZGRyZXNzLnN0cmVldCwgYWRkcmVzcy5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbignIMK3ICcpO1xuICAgICAgICAgICAgY29uc3QgcmVnaW9uID0gW2FkZHJlc3MucHJvdmluY2VDb2RlIHx8IGFkZHJlc3MucHJvdmluY2UsIGFkZHJlc3MuY291bnRyeUNvZGUgfHwgYWRkcmVzcy5jb3VudHJ5XVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAuam9pbignLCAnKTtcbiAgICAgICAgICAgIHJldHVybiBbbWFpbiwgcmVnaW9uXS5maWx0ZXIoQm9vbGVhbikuam9pbignIOKAlCAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcE5hbWUgPT09ICdzaGlwbWVudCcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZExhYmVsID0gc3RlcERhdGEubWV0aG9kPy5uYW1lIHx8IHN0ZXBEYXRhLm1ldGhvZF9uYW1lIHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgY29udHJhY3RMYWJlbCA9IHN0ZXBEYXRhLmNvbnRyYWN0Py5uYW1lIHx8IHN0ZXBEYXRhLmNvbnRyYWN0X25hbWUgfHwgc3RlcERhdGEubmFtZSB8fCBzdGVwRGF0YS5jb250cmFjdCB8fCAnJztcbiAgICAgICAgICAgIHJldHVybiBbbWV0aG9kTGFiZWwsIGNvbnRyYWN0TGFiZWxdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgwrcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXBOYW1lID09PSAncGF5bWVudCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGVwRGF0YS5uYW1lIHx8IHN0ZXBEYXRhLmNvZGUgfHwgJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHNldFNoaXBtZW50U3VtbWFyeSA9IChzdW1tYXJ5OiB7IGxhYmVsPzogc3RyaW5nOyBkZXRhaWw/OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICBjb25zdCBoYXNMYWJlbCA9IEJvb2xlYW4oc3VtbWFyeT8ubGFiZWwpO1xuICAgICAgICBjb25zdCBoYXNEZXRhaWwgPSBCb29sZWFuKHN1bW1hcnk/LmRldGFpbCk7XG4gICAgICAgIHRoaXMuc2hpcG1lbnRTdW1tYXJ5ID0gaGFzTGFiZWwgfHwgaGFzRGV0YWlsID8gc3VtbWFyeSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTaGlwbWVudE9yaWdpbmFsQW1vdW50ID0gKCk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBzaGlwbWVudFN0ZXBEYXRhOiBhbnkgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YSgnc2hpcG1lbnQnIGFzIGFueSk7XG4gICAgICAgIHJldHVybiB0aGlzLnNoaXBwaW5nUHJpY2VEaXNwbGF5Lm5vcm1hbGl6ZVByaWNlVmFsdWUoXG4gICAgICAgICAgICBzaGlwbWVudFN0ZXBEYXRhPy5vcmlnaW5hbFByaWNlID8/XG4gICAgICAgICAgICBzaGlwbWVudFN0ZXBEYXRhPy5jb250cmFjdD8ub3JpZ2luYWxQcmljZSA/P1xuICAgICAgICAgICAgc2hpcG1lbnRTdGVwRGF0YT8uc2VsZWN0ZWQ/LmNvbnRyYWN0Py5vcmlnaW5hbFByaWNlID8/XG4gICAgICAgICAgICBudWxsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZ2dyZWdhdGVEaXNjb3VudHMoZGF0YTogQ2hlY2tvdXREYXRhW10pIHtcbiAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLmxlbmd0aCkgcmV0dXJuIFtdO1xuICAgICAgICBjb25zdCBkaXNjb3VudFRvdGFsID0gZGF0YVxuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2Rpc2NvdW50JylcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgKGN1cnIuYW1vdW50IHx8IDApLCAwKTtcbiAgICAgICAgY29uc3QgY291cG9uVG90YWwgPSBkYXRhXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSAnY291cG9uJylcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgKGN1cnIuYW1vdW50IHx8IDApLCAwKTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBkYXRhLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSAhPT0gJ2Rpc2NvdW50JyAmJiBpdGVtLnR5cGUgIT09ICdjb3Vwb24nKTtcblxuICAgICAgICBpZiAodGhpcy5oaWRlRGlzY291bnRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHRyYXM6IENoZWNrb3V0RGF0YVtdID0gW107XG4gICAgICAgIGlmIChkaXNjb3VudFRvdGFsICE9PSAwKSB7XG4gICAgICAgICAgICBleHRyYXMucHVzaCh7IHR5cGU6ICdkaXNjb3VudCcsIG5hbWU6ICdkaXNjb3VudCcsIGFtb3VudDogZGlzY291bnRUb3RhbCB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY291cG9uVG90YWwgIT09IDApIHtcbiAgICAgICAgICAgIGV4dHJhcy5wdXNoKHsgdHlwZTogJ2NvdXBvbicsIG5hbWU6ICdjb3Vwb24nLCBhbW91bnQ6IGNvdXBvblRvdGFsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZXh0cmFzLmxlbmd0aCkgcmV0dXJuIGZpbHRlcmVkO1xuXG4gICAgICAgIGNvbnN0IHN1YnRvdGFsSW5kZXggPSBmaWx0ZXJlZC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdzdWJ0b3RhbCcpO1xuICAgICAgICBpZiAoc3VidG90YWxJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5maWx0ZXJlZF07XG4gICAgICAgICAgICByZXN1bHQuc3BsaWNlKHN1YnRvdGFsSW5kZXggKyAxLCAwLCAuLi5leHRyYXMpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0SW5kZXggPSBkYXRhLmZpbmRJbmRleChpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2Rpc2NvdW50JyB8fCBpdGVtLnR5cGUgPT09ICdjb3Vwb24nKTtcbiAgICAgICAgaWYgKGZpcnN0SW5kZXggPT09IC0xKSByZXR1cm4gWy4uLmZpbHRlcmVkLCAuLi5leHRyYXNdO1xuICAgICAgICBjb25zdCBpbnNlcnRBdCA9IGRhdGFcbiAgICAgICAgICAgIC5zbGljZSgwLCBmaXJzdEluZGV4KVxuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSAhPT0gJ2Rpc2NvdW50JyAmJiBpdGVtLnR5cGUgIT09ICdjb3Vwb24nKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5maWx0ZXJlZF07XG4gICAgICAgIHJlc3VsdC5zcGxpY2UoaW5zZXJ0QXQsIDAsIC4uLmV4dHJhcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG91bGRIaWRlU3VtbWFyeVN1YnRvdGFsKGl0ZW06IENoZWNrb3V0RGF0YSkge1xuICAgICAgICBpZiAoaXRlbT8udHlwZSAhPT0gJ3N1YnRvdGFsJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5sYXN0QXNzb2NpYXRlZERhdGE7XG4gICAgICAgIGlmICghZGF0YT8ubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHN1bW1hcnlEYXRhID0gdGhpcy5nZXRTdW1tYXJ5RGF0YShkYXRhKTtcbiAgICAgICAgY29uc3QgdG90YWxJdGVtID0gc3VtbWFyeURhdGEuZmluZChkYXRhSXRlbSA9PiBkYXRhSXRlbS50eXBlID09PSAndG90YWwnKTtcbiAgICAgICAgcmV0dXJuICEhdG90YWxJdGVtICYmIGl0ZW0uYW1vdW50ID09PSB0b3RhbEl0ZW0uYW1vdW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2Nyb2xsVG9TZWN0aW9uKHN0ZXBOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb290ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXJvb3QpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSByb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXN0ZXA9XFxcIiR7c3RlcE5hbWV9XFxcIl1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghc2VjdGlvbikgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgdG9wID0gc2VjdGlvbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSAxMjtcbiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogTWF0aC5tYXgoMCwgdG9wIC0gb2Zmc2V0KSwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgICB9LCA1MCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzY3JvbGxUb1RvcE9uRW50ZXIoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiAwLCBsZWZ0OiAwLCBiZWhhdmlvcjogJ2F1dG8nIH0pO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwU3VtbWFyeU9ic2VydmVyKCkge1xuICAgICAgICBpZiAodGhpcy5jaGVja291dFZpZXcgIT09ICdzaW5nbGUnKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKCFyb290KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGZpbmlzaEJ0biA9IHJvb3QucXVlcnlTZWxlY3RvcignI2NoZWNrb3V0RmluaXNoQnRuJyk7XG4gICAgICAgIGlmICghZmluaXNoQnRuKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5zdW1tYXJ5T2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1swXTtcbiAgICAgICAgICAgIHRoaXMuaGlkZU1vYmlsZVN1bW1hcnlCYXIgPSAhIWVudHJ5ICYmIGVudHJ5LmlzSW50ZXJzZWN0aW5nO1xuICAgICAgICB9LCB7IHJvb3RNYXJnaW46ICcwcHggMHB4IC0xMjBweCAwcHgnLCB0aHJlc2hvbGQ6IDAgfSk7XG5cbiAgICAgICAgdGhpcy5zdW1tYXJ5T2JzZXJ2ZXIub2JzZXJ2ZShmaW5pc2hCdG4pO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnKVxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICAgIGV2YWx1YXRlTW9iaWxlQmFyVmlzaWJpbGl0eSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJykgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMuZmluaXNoQnV0dG9uRWwpIHtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoQnV0dG9uRWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjY2hlY2tvdXRGaW5pc2hCdG4nKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5maW5pc2hCdXR0b25FbCkgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmZpbmlzaEJ1dHRvbkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCAwO1xuICAgICAgICB0aGlzLmhpZGVNb2JpbGVTdW1tYXJ5QmFyID0gcmVjdC50b3AgPCAodmlld3BvcnRIZWlnaHQgLSA4MCk7XG4gICAgfVxuXG4gICAgYXJlQWxsU3RlcHNSZWFkeSA9IChzdGVwczogeyBpc1JlYWR5OiAoKSA9PiBib29sZWFuOyBuYW1lPzogc3RyaW5nIH1bXSkgPT4ge1xuICAgICAgICBpZiAoIXN0ZXBzIHx8ICFzdGVwcy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHN0ZXBzLmV2ZXJ5KHN0ZXAgPT4ge1xuICAgICAgICAgICAgaWYgKCFzdGVwLmlzUmVhZHkoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFzdGVwLm5hbWUpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzU3RlcERpcnR5KHN0ZXAubmFtZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNob3VsZEhpZGVGaW5pc2hCdXR0b24gPSAoc3RlcHM6IHsgaXNSZWFkeTogKCkgPT4gYm9vbGVhbiB9W10pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMuYXJlQWxsU3RlcHNSZWFkeShzdGVwcykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgcGF5bWVudERhdGE6IGFueSA9IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBEYXRhKCdwYXltZW50JyBhcyBhbnkpO1xuICAgICAgICByZXR1cm4gISFwYXltZW50RGF0YT8uYXV0b0NvbXBsZXRlO1xuICAgIH1cblxuICAgIG9wZW5VbnNhdmVkQ2hhbmdlc01vZGFsID0gKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyh0ZW1wbGF0ZSwge1xuICAgICAgICAgICAgY2xhc3M6ICdtb2RhbC1kaWFsb2ctY2VudGVyZWQgY2hlY2tvdXQtdW5zYXZlZC1tb2RhbCcsXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXG4gICAgICAgICAgICBrZXlib2FyZDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2FuY2VsVW5zYXZlZENsb3NlID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnBlbmRpbmdDbG9zZVN0ZXBOYW1lID0gbnVsbDtcbiAgICAgICAgdGhpcy5tb2RhbFJlZj8uaGlkZSgpO1xuICAgIH1cblxuICAgIGNvbmZpcm1VbnNhdmVkRGlzY2FyZCA9ICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnBlbmRpbmdDbG9zZVN0ZXBOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGFsUmVmPy5oaWRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RlcE5hbWUgPSB0aGlzLnBlbmRpbmdDbG9zZVN0ZXBOYW1lO1xuICAgICAgICB0aGlzLnBlbmRpbmdDbG9zZVN0ZXBOYW1lID0gbnVsbDtcbiAgICAgICAgdGhpcy5kaXNjYXJkU3RlcENoYW5nZXMoc3RlcE5hbWUpO1xuICAgICAgICB0aGlzLm9wZW5TZWN0aW9ucyA9IHRoaXMub3BlblNlY3Rpb25zLmZpbHRlcihuYW1lID0+IG5hbWUgIT09IHN0ZXBOYW1lKTtcbiAgICAgICAgdGhpcy5tb2RhbFJlZj8uaGlkZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGlzY2FyZFN0ZXBDaGFuZ2VzKHN0ZXBOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHN0ZXBOYW1lID09PSAnYWRkcmVzcycpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFmb3JtID0gdGhpcy5kYXRhZm9ybUNvbXBvbmVudHM/LmZpcnN0O1xuICAgICAgICAgICAgaWYgKGRhdGFmb3JtKSB7XG4gICAgICAgICAgICAgICAgZGF0YWZvcm0uZGlzY2FyZENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RlcERpcnR5TWFwLnNldChzdGVwTmFtZSwgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwTmFtZSA9PT0gJ3BheW1lbnQnKSB7XG4gICAgICAgICAgICBjb25zdCBwYXltZW50ID0gdGhpcy5wYXltZW50Q29tcG9uZW50cz8uZmlyc3Q7XG4gICAgICAgICAgICBpZiAocGF5bWVudCkge1xuICAgICAgICAgICAgICAgIHBheW1lbnQuZGlzY2FyZENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RlcERpcnR5TWFwLnNldChzdGVwTmFtZSwgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RlcERpcnR5TWFwLnNldChzdGVwTmFtZSwgZmFsc2UpO1xuICAgIH1cbn1cbiJdfQ==
|