@y3krulez/angular-archwizard
Version:
The port of angular-archwizard, supporting IVY and thus being compatible with Angular16+
122 lines • 17.6 kB
JavaScript
import { Component, Inject } from '@angular/core';
import { WizardCompletionStep } from '../util/wizard-completion-step.interface';
import { WIZARD_TOKEN } from '../navigation/wizard.interface';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "../directives/go-to-step.directive";
/**
* The `aw-wizard-navigation-bar` component contains the navigation bar inside a [[WizardComponent]].
* To correctly display the navigation bar, it's required to set the right css classes for the navigation bar,
* otherwise it will look like a normal `ul` component.
*
* ### Syntax
*
* ```html
* <aw-wizard-navigation-bar></aw-wizard-navigation-bar>
* ```
*
* @author Marc Arndt
*/
export class WizardNavigationBarComponent {
/**
* Constructor
*
* @param wizard The state the wizard currently resides in
*/
constructor(wizard) {
this.wizard = wizard;
}
/**
* Returns all [[WizardStep]]s contained in the wizard
*
* @returns An array containing all [[WizardStep]]s
*/
get wizardSteps() {
switch (this.wizard.navBarDirection) {
case 'right-to-left':
return this.wizard.wizardSteps.slice().reverse();
case 'left-to-right':
default:
return this.wizard.wizardSteps;
}
}
/**
* Returns the number of wizard steps, that need to be displaced in the navigation bar
*
* @returns The number of wizard steps to be displayed
*/
get numberOfWizardSteps() {
return this.wizard.wizardSteps.length;
}
/**
* Checks, whether a [[WizardStep]] can be marked as `current` in the navigation bar
*
* @param wizardStep The wizard step to be checked
* @returns True if the step can be marked as `current`
*/
isCurrent(wizardStep) {
return wizardStep.selected;
}
/**
* Checks, whether a [[WizardStep]] can be marked as `editing` in the navigation bar
*
* @param wizardStep The wizard step to be checked
* @returns True if the step can be marked as `editing`
*/
isEditing(wizardStep) {
return wizardStep.editing;
}
/**
* Checks, whether a [[WizardStep]] can be marked as `done` in the navigation bar
*
* @param wizardStep The wizard step to be checked
* @returns True if the step can be marked as `done`
*/
isDone(wizardStep) {
return wizardStep.completed;
}
/**
* Checks, whether a [[WizardStep]] can be marked as `optional` in the navigation bar
*
* @param wizardStep The wizard step to be checked
* @returns True if the step can be marked as `optional`
*/
isOptional(wizardStep) {
return wizardStep.optional;
}
/**
* Checks, whether a [[WizardStep]] can be marked as `completed` in the navigation bar.
*
* The `completed` class is only applied to completion steps.
*
* @param wizardStep The wizard step to be checked
* @returns True if the step can be marked as `completed`
*/
isCompleted(wizardStep) {
return wizardStep instanceof WizardCompletionStep && this.wizard.completed;
}
/**
* Checks, whether a [[WizardStep]] can be marked as `navigable` in the navigation bar.
* A wizard step can be navigated to if:
* - the step is currently not selected
* - the navigation bar isn't disabled
* - the navigation mode allows navigation to the step
*
* @param wizardStep The wizard step to be checked
* @returns True if the step can be marked as navigable
*/
isNavigable(wizardStep) {
return !wizardStep.selected && !this.wizard.disableNavigationBar &&
this.wizard.isNavigable(this.wizard.getIndexOfStep(wizardStep));
}
}
WizardNavigationBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WizardNavigationBarComponent, deps: [{ token: WIZARD_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
WizardNavigationBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WizardNavigationBarComponent, selector: "aw-wizard-navigation-bar", ngImport: i0, template: "<ul class=\"steps-indicator steps-{{numberOfWizardSteps}}\">\r\n <li [attr.id]=\"step.stepId\" *ngFor=\"let step of wizardSteps\" [ngClass]=\"{\r\n 'current': isCurrent(step),\r\n 'editing': isEditing(step),\r\n 'done': isDone(step),\r\n 'optional': isOptional(step),\r\n 'completed': isCompleted(step),\r\n 'navigable': isNavigable(step)\r\n }\">\r\n <a [awGoToStep]=\"step\">\r\n <div class=\"label\">\r\n <ng-container *ngIf=\"step.stepTitleTemplate\" [ngTemplateOutlet]=\"step.stepTitleTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{wizardStep: step}\"></ng-container>\r\n <ng-container *ngIf=\"!step.stepTitleTemplate\">{{step.stepTitle}}</ng-container>\r\n </div>\r\n <div class=\"step-indicator\"\r\n [ngStyle]=\"{ 'font-family': step.stepSymbolTemplate ? '' : step.navigationSymbol.fontFamily }\">\r\n <ng-container *ngIf=\"step.stepSymbolTemplate\" [ngTemplateOutlet]=\"step.stepSymbolTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{wizardStep: step}\"></ng-container>\r\n <ng-container *ngIf=\"!step.stepSymbolTemplate\">{{step.navigationSymbol.symbol}}</ng-container>\r\n </div>\r\n </a>\r\n </li>\r\n</ul>\r\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.GoToStepDirective, selector: "[awGoToStep]", inputs: ["awGoToStep"], outputs: ["preFinalize", "postFinalize", "finalize"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WizardNavigationBarComponent, decorators: [{
type: Component,
args: [{ selector: 'aw-wizard-navigation-bar', template: "<ul class=\"steps-indicator steps-{{numberOfWizardSteps}}\">\r\n <li [attr.id]=\"step.stepId\" *ngFor=\"let step of wizardSteps\" [ngClass]=\"{\r\n 'current': isCurrent(step),\r\n 'editing': isEditing(step),\r\n 'done': isDone(step),\r\n 'optional': isOptional(step),\r\n 'completed': isCompleted(step),\r\n 'navigable': isNavigable(step)\r\n }\">\r\n <a [awGoToStep]=\"step\">\r\n <div class=\"label\">\r\n <ng-container *ngIf=\"step.stepTitleTemplate\" [ngTemplateOutlet]=\"step.stepTitleTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{wizardStep: step}\"></ng-container>\r\n <ng-container *ngIf=\"!step.stepTitleTemplate\">{{step.stepTitle}}</ng-container>\r\n </div>\r\n <div class=\"step-indicator\"\r\n [ngStyle]=\"{ 'font-family': step.stepSymbolTemplate ? '' : step.navigationSymbol.fontFamily }\">\r\n <ng-container *ngIf=\"step.stepSymbolTemplate\" [ngTemplateOutlet]=\"step.stepSymbolTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{wizardStep: step}\"></ng-container>\r\n <ng-container *ngIf=\"!step.stepSymbolTemplate\">{{step.navigationSymbol.symbol}}</ng-container>\r\n </div>\r\n </a>\r\n </li>\r\n</ul>\r\n" }]
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [WIZARD_TOKEN]
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLW5hdmlnYXRpb24tYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy93aXphcmQtbmF2aWdhdGlvbi1iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3dpemFyZC1uYXZpZ2F0aW9uLWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUVoRixPQUFPLEVBQUUsWUFBWSxFQUFVLE1BQU0sZ0NBQWdDLENBQUM7Ozs7QUFFdEU7Ozs7Ozs7Ozs7OztHQVlHO0FBS0gsTUFBTSxPQUFPLDRCQUE0QjtJQUN2Qzs7OztPQUlHO0lBQ0gsWUFBeUMsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDdkQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLFdBQVc7UUFDYixRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFO1lBQ25DLEtBQUssZUFBZTtnQkFDbEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuRCxLQUFLLGVBQWUsQ0FBQztZQUNyQjtnQkFDRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxTQUFTLENBQUMsVUFBc0I7UUFDckMsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFNBQVMsQ0FBQyxVQUFzQjtRQUNyQyxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLFVBQXNCO1FBQ2xDLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxVQUFVLENBQUMsVUFBc0I7UUFDdEMsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksV0FBVyxDQUFDLFVBQXNCO1FBQ3ZDLE9BQU8sVUFBVSxZQUFZLG9CQUFvQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO0lBQzdFLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxXQUFXLENBQUMsVUFBc0I7UUFDdkMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQjtZQUM5RCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7OzBIQWxHVSw0QkFBNEIsa0JBTW5CLFlBQVk7OEdBTnJCLDRCQUE0QixnRUN0QnpDLGd2Q0F3QkE7NEZERmEsNEJBQTRCO2tCQUp4QyxTQUFTOytCQUNFLDBCQUEwQjs7MEJBU3ZCLE1BQU07MkJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBXaXphcmRDb21wbGV0aW9uU3RlcCB9IGZyb20gJy4uL3V0aWwvd2l6YXJkLWNvbXBsZXRpb24tc3RlcC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBXaXphcmRTdGVwIH0gZnJvbSAnLi4vdXRpbC93aXphcmQtc3RlcC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBXSVpBUkRfVE9LRU4sIFdpemFyZCB9IGZyb20gJy4uL25hdmlnYXRpb24vd2l6YXJkLmludGVyZmFjZSc7XHJcblxyXG4vKipcclxuICogVGhlIGBhdy13aXphcmQtbmF2aWdhdGlvbi1iYXJgIGNvbXBvbmVudCBjb250YWlucyB0aGUgbmF2aWdhdGlvbiBiYXIgaW5zaWRlIGEgW1tXaXphcmRDb21wb25lbnRdXS5cclxuICogVG8gY29ycmVjdGx5IGRpc3BsYXkgdGhlIG5hdmlnYXRpb24gYmFyLCBpdCdzIHJlcXVpcmVkIHRvIHNldCB0aGUgcmlnaHQgY3NzIGNsYXNzZXMgZm9yIHRoZSBuYXZpZ2F0aW9uIGJhcixcclxuICogb3RoZXJ3aXNlIGl0IHdpbGwgbG9vayBsaWtlIGEgbm9ybWFsIGB1bGAgY29tcG9uZW50LlxyXG4gKlxyXG4gKiAjIyMgU3ludGF4XHJcbiAqXHJcbiAqIGBgYGh0bWxcclxuICogPGF3LXdpemFyZC1uYXZpZ2F0aW9uLWJhcj48L2F3LXdpemFyZC1uYXZpZ2F0aW9uLWJhcj5cclxuICogYGBgXHJcbiAqXHJcbiAqIEBhdXRob3IgTWFyYyBBcm5kdFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhdy13aXphcmQtbmF2aWdhdGlvbi1iYXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnd2l6YXJkLW5hdmlnYXRpb24tYmFyLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFdpemFyZE5hdmlnYXRpb25CYXJDb21wb25lbnQge1xyXG4gIC8qKlxyXG4gICAqIENvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0gd2l6YXJkIFRoZSBzdGF0ZSB0aGUgd2l6YXJkIGN1cnJlbnRseSByZXNpZGVzIGluXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoQEluamVjdChXSVpBUkRfVE9LRU4pIHB1YmxpYyB3aXphcmQ6IFdpemFyZCkge1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhbGwgW1tXaXphcmRTdGVwXV1zIGNvbnRhaW5lZCBpbiB0aGUgd2l6YXJkXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIGFsbCBbW1dpemFyZFN0ZXBdXXNcclxuICAgKi9cclxuICBnZXQgd2l6YXJkU3RlcHMoKTogQXJyYXk8V2l6YXJkU3RlcD4ge1xyXG4gICAgc3dpdGNoICh0aGlzLndpemFyZC5uYXZCYXJEaXJlY3Rpb24pIHtcclxuICAgICAgY2FzZSAncmlnaHQtdG8tbGVmdCc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud2l6YXJkLndpemFyZFN0ZXBzLnNsaWNlKCkucmV2ZXJzZSgpO1xyXG4gICAgICBjYXNlICdsZWZ0LXRvLXJpZ2h0JzpcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gdGhpcy53aXphcmQud2l6YXJkU3RlcHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2l6YXJkIHN0ZXBzLCB0aGF0IG5lZWQgdG8gYmUgZGlzcGxhY2VkIGluIHRoZSBuYXZpZ2F0aW9uIGJhclxyXG4gICAqXHJcbiAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiB3aXphcmQgc3RlcHMgdG8gYmUgZGlzcGxheWVkXHJcbiAgICovXHJcbiAgZ2V0IG51bWJlck9mV2l6YXJkU3RlcHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLndpemFyZC53aXphcmRTdGVwcy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MsIHdoZXRoZXIgYSBbW1dpemFyZFN0ZXBdXSBjYW4gYmUgbWFya2VkIGFzIGBjdXJyZW50YCBpbiB0aGUgbmF2aWdhdGlvbiBiYXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB3aXphcmRTdGVwIFRoZSB3aXphcmQgc3RlcCB0byBiZSBjaGVja2VkXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RlcCBjYW4gYmUgbWFya2VkIGFzIGBjdXJyZW50YFxyXG4gICAqL1xyXG4gIHB1YmxpYyBpc0N1cnJlbnQod2l6YXJkU3RlcDogV2l6YXJkU3RlcCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHdpemFyZFN0ZXAuc2VsZWN0ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MsIHdoZXRoZXIgYSBbW1dpemFyZFN0ZXBdXSBjYW4gYmUgbWFya2VkIGFzIGBlZGl0aW5nYCBpbiB0aGUgbmF2aWdhdGlvbiBiYXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB3aXphcmRTdGVwIFRoZSB3aXphcmQgc3RlcCB0byBiZSBjaGVja2VkXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RlcCBjYW4gYmUgbWFya2VkIGFzIGBlZGl0aW5nYFxyXG4gICAqL1xyXG4gIHB1YmxpYyBpc0VkaXRpbmcod2l6YXJkU3RlcDogV2l6YXJkU3RlcCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHdpemFyZFN0ZXAuZWRpdGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcywgd2hldGhlciBhIFtbV2l6YXJkU3RlcF1dIGNhbiBiZSBtYXJrZWQgYXMgYGRvbmVgIGluIHRoZSBuYXZpZ2F0aW9uIGJhclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHdpemFyZFN0ZXAgVGhlIHdpemFyZCBzdGVwIHRvIGJlIGNoZWNrZWRcclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdGVwIGNhbiBiZSBtYXJrZWQgYXMgYGRvbmVgXHJcbiAgICovXHJcbiAgcHVibGljIGlzRG9uZSh3aXphcmRTdGVwOiBXaXphcmRTdGVwKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gd2l6YXJkU3RlcC5jb21wbGV0ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MsIHdoZXRoZXIgYSBbW1dpemFyZFN0ZXBdXSBjYW4gYmUgbWFya2VkIGFzIGBvcHRpb25hbGAgaW4gdGhlIG5hdmlnYXRpb24gYmFyXHJcbiAgICpcclxuICAgKiBAcGFyYW0gd2l6YXJkU3RlcCBUaGUgd2l6YXJkIHN0ZXAgdG8gYmUgY2hlY2tlZFxyXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0ZXAgY2FuIGJlIG1hcmtlZCBhcyBgb3B0aW9uYWxgXHJcbiAgICovXHJcbiAgcHVibGljIGlzT3B0aW9uYWwod2l6YXJkU3RlcDogV2l6YXJkU3RlcCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHdpemFyZFN0ZXAub3B0aW9uYWw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MsIHdoZXRoZXIgYSBbW1dpemFyZFN0ZXBdXSBjYW4gYmUgbWFya2VkIGFzIGBjb21wbGV0ZWRgIGluIHRoZSBuYXZpZ2F0aW9uIGJhci5cclxuICAgKlxyXG4gICAqIFRoZSBgY29tcGxldGVkYCBjbGFzcyBpcyBvbmx5IGFwcGxpZWQgdG8gY29tcGxldGlvbiBzdGVwcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB3aXphcmRTdGVwIFRoZSB3aXphcmQgc3RlcCB0byBiZSBjaGVja2VkXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RlcCBjYW4gYmUgbWFya2VkIGFzIGBjb21wbGV0ZWRgXHJcbiAgICovXHJcbiAgcHVibGljIGlzQ29tcGxldGVkKHdpemFyZFN0ZXA6IFdpemFyZFN0ZXApOiBib29sZWFuIHtcclxuICAgIHJldHVybiB3aXphcmRTdGVwIGluc3RhbmNlb2YgV2l6YXJkQ29tcGxldGlvblN0ZXAgJiYgdGhpcy53aXphcmQuY29tcGxldGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzLCB3aGV0aGVyIGEgW1tXaXphcmRTdGVwXV0gY2FuIGJlIG1hcmtlZCBhcyBgbmF2aWdhYmxlYCBpbiB0aGUgbmF2aWdhdGlvbiBiYXIuXHJcbiAgICogQSB3aXphcmQgc3RlcCBjYW4gYmUgbmF2aWdhdGVkIHRvIGlmOlxyXG4gICAqIC0gdGhlIHN0ZXAgaXMgY3VycmVudGx5IG5vdCBzZWxlY3RlZFxyXG4gICAqIC0gdGhlIG5hdmlnYXRpb24gYmFyIGlzbid0IGRpc2FibGVkXHJcbiAgICogLSB0aGUgbmF2aWdhdGlvbiBtb2RlIGFsbG93cyBuYXZpZ2F0aW9uIHRvIHRoZSBzdGVwXHJcbiAgICpcclxuICAgKiBAcGFyYW0gd2l6YXJkU3RlcCBUaGUgd2l6YXJkIHN0ZXAgdG8gYmUgY2hlY2tlZFxyXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0ZXAgY2FuIGJlIG1hcmtlZCBhcyBuYXZpZ2FibGVcclxuICAgKi9cclxuICBwdWJsaWMgaXNOYXZpZ2FibGUod2l6YXJkU3RlcDogV2l6YXJkU3RlcCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF3aXphcmRTdGVwLnNlbGVjdGVkICYmICF0aGlzLndpemFyZC5kaXNhYmxlTmF2aWdhdGlvbkJhciAmJlxyXG4gICAgICB0aGlzLndpemFyZC5pc05hdmlnYWJsZSh0aGlzLndpemFyZC5nZXRJbmRleE9mU3RlcCh3aXphcmRTdGVwKSk7XHJcbiAgfVxyXG59XHJcbiIsIjx1bCBjbGFzcz1cInN0ZXBzLWluZGljYXRvciBzdGVwcy17e251bWJlck9mV2l6YXJkU3RlcHN9fVwiPlxyXG4gIDxsaSBbYXR0ci5pZF09XCJzdGVwLnN0ZXBJZFwiICpuZ0Zvcj1cImxldCBzdGVwIG9mIHdpemFyZFN0ZXBzXCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICdjdXJyZW50JzogaXNDdXJyZW50KHN0ZXApLFxyXG4gICAgICAgICdlZGl0aW5nJzogaXNFZGl0aW5nKHN0ZXApLFxyXG4gICAgICAgICdkb25lJzogaXNEb25lKHN0ZXApLFxyXG4gICAgICAgICdvcHRpb25hbCc6IGlzT3B0aW9uYWwoc3RlcCksXHJcbiAgICAgICAgJ2NvbXBsZXRlZCc6IGlzQ29tcGxldGVkKHN0ZXApLFxyXG4gICAgICAgICduYXZpZ2FibGUnOiBpc05hdmlnYWJsZShzdGVwKVxyXG4gIH1cIj5cclxuICAgIDxhIFthd0dvVG9TdGVwXT1cInN0ZXBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0ZXAuc3RlcFRpdGxlVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJzdGVwLnN0ZXBUaXRsZVRlbXBsYXRlLnRlbXBsYXRlUmVmXCJcclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7d2l6YXJkU3RlcDogc3RlcH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN0ZXAuc3RlcFRpdGxlVGVtcGxhdGVcIj57e3N0ZXAuc3RlcFRpdGxlfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLWluZGljYXRvclwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieyAnZm9udC1mYW1pbHknOiBzdGVwLnN0ZXBTeW1ib2xUZW1wbGF0ZSA/ICcnIDogc3RlcC5uYXZpZ2F0aW9uU3ltYm9sLmZvbnRGYW1pbHkgfVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGVwLnN0ZXBTeW1ib2xUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInN0ZXAuc3RlcFN5bWJvbFRlbXBsYXRlLnRlbXBsYXRlUmVmXCJcclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7d2l6YXJkU3RlcDogc3RlcH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN0ZXAuc3RlcFN5bWJvbFRlbXBsYXRlXCI+e3tzdGVwLm5hdmlnYXRpb25TeW1ib2wuc3ltYm9sfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2E+XHJcbiAgPC9saT5cclxuPC91bD5cclxuIl19