@tekdi/sunbird-quml-player
Version:
The QuML player library components are powered by Angular. This player is primarily designed to be used on Sunbird consumption platforms (mobile app, web portal, offline desktop app) to drive reusability and maintainability, hence reducing the redundant d
133 lines • 37 kB
JavaScript
import { Component, Input, Output, EventEmitter } from '@angular/core';
import { Cardinality } from '../telemetry-constants';
import * as _ from 'lodash-es';
import * as i0 from "@angular/core";
import * as i1 from "../util-service";
import * as i2 from "@angular/common";
import * as i3 from "../mcq-image-option/mcq-image-option.component";
import * as i4 from "../pipes/safe-html/safe-html.pipe";
export class McqOptionComponent {
constructor(utilService) {
this.utilService = utilService;
this.showPopup = new EventEmitter();
this.optionSelected = new EventEmitter();
this.selectedOption = [];
}
ngOnChanges() {
/* istanbul ignore else */
this.mcqOptions = this.shuffleOptions ? _.shuffle(this.mcqOptions) : this.mcqOptions;
if (this.replayed) {
this.selectedOption = [];
this.mcqOptions.forEach((ele) => {
ele.selected = false;
ele['isDisabled'] = false;
});
this.selectedOption = [];
}
/* istanbul ignore else */
if (this.tryAgain) {
this.unselectOption();
}
}
unselectOption() {
this.mcqOptions.forEach((ele) => {
ele.selected = false;
ele['isDisabled'] = false;
});
this.selectedOption = [];
this.optionSelected.emit({
name: 'optionSelect',
option: this.selectedOption,
cardinality: this.cardinality,
solutions: this.solutions
});
}
onOptionSelect(event, mcqOption, index) {
if (this.cardinality === Cardinality.single) {
if (index !== undefined) {
this.mcqOptions.forEach((ele) => ele.selected = false);
this.mcqOptions[index].selected = this.mcqOptions[index].label === mcqOption.label;
}
else {
this.mcqOptions.forEach(element => {
element.selected = element.label === mcqOption.label;
});
}
}
else if (this.cardinality === Cardinality.multiple) {
this.mcqOptions.forEach(element => {
if (element.label === mcqOption.label) {
if (this.utilService.hasDuplicates(this.selectedOption, mcqOption)) {
element.selected = false;
this.selectedOption = _.filter(this.selectedOption, (item) => item.label !== mcqOption.label);
}
else {
element.selected = true;
this.selectedOption.push(mcqOption);
}
}
});
if (this.selectedOption.length === this.numberOfCorrectOptions) {
// disable extra options
this.selectedOption.forEach(selectedEelement => {
this.mcqOptions.forEach(element => {
if ((element.label != selectedEelement.label) && !element.selected) {
element['isDisabled'] = true;
}
else {
element['isDisabled'] = false;
}
});
});
}
else {
this.mcqOptions.forEach(element => {
element['isDisabled'] = false;
});
}
}
this.optionSelected.emit({
name: 'optionSelect',
option: this.cardinality === 'single' ? mcqOption : this.selectedOption,
cardinality: this.cardinality,
solutions: this.solutions
});
}
showQumlPopup() {
this.showPopup.emit();
}
onEnter(event, mcqOption, index) {
/* istanbul ignore else */
if (event.key === 'Enter') {
event.stopPropagation();
this.onOptionSelect(event, mcqOption, index);
}
}
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: McqOptionComponent, deps: [{ token: i1.UtilService }], target: i0.ɵɵFactoryTarget.Component }); }
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: McqOptionComponent, selector: "quml-mcq-option", inputs: { shuffleOptions: "shuffleOptions", mcqOptions: "mcqOptions", solutions: "solutions", layout: "layout", cardinality: "cardinality", numberOfCorrectOptions: "numberOfCorrectOptions", replayed: "replayed", tryAgain: "tryAgain" }, outputs: { showPopup: "showPopup", optionSelected: "optionSelected" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"quml-mcq-options\" role=\"radiogroup\" *ngIf=\"layout === 'DEFAULT' || layout === 'IMAGEQOPTION'\">\n <div class=\"quml-option-card\" tabindex=\"0\" role=\"checkbox\" [attr.aria-checked]=\"mcqOption.selected\" aria-labelledby=\"option-checkbox\" *ngFor=\"let mcqOption of mcqOptions; let index = index\"\n (keydown)=\"mcqOption.isDisabled ? null: onEnter($event, mcqOption, index)\"\n (click)=\"mcqOption.isDisabled ? null: onOptionSelect($event, mcqOption, index)\"\n [ngClass]=\"{'disabled': mcqOption.isDisabled === true}\">\n <div class=\"quml-option\" [ngClass]=\"mcqOption.selected ? 'quml-option quml-option--selected' : 'quml-option'\">\n <div class=\"option\" [innerHTML]=\"mcqOption.label | safeHtml\"></div>\n <div class=\"container\">\n <input type=\"radio\" *ngIf=\"cardinality==='single'\" name=\"radio\" [checked]=\"mcqOption.selected\"\n id=\"option-checkbox\" tabindex=\"-1\">\n <input type=\"checkbox\" *ngIf=\"cardinality==='multiple'\" name=\"checkbox\" [checked]=\"mcqOption.selected\"\n id=\"option-checkbox\" tabindex=\"-1\" [disabled]=\"mcqOption?.isDisabled\">\n <span [ngClass]=\"{'radiomark': cardinality==='single','checkmark':cardinality==='multiple'}\" tabindex=\"-1\"></span>\n </div>\n </div>\n </div>\n</div>\n<div *ngIf=\"layout === 'IMAGEGRID'\">\n <div class=\"qumlImageOption\">\n <div class=\"wrapper\">\n <div *ngFor=\"let mcqOption of mcqOptions; let index = index\">\n <quml-mcq-image-option (imgOptionSelected)=\"onOptionSelect($event, mcqOption, index)\" [mcqOption]='mcqOption' [cardinality]=\"cardinality\"></quml-mcq-image-option>\n </div>\n </div>\n </div>\n\n</div>\n<div *ngIf=\"layout === 'IMAGEQAGRID'\">\n <div class=\"qumlOption-imageQaGrid\">\n <div class=\"wrapper\">\n <div *ngFor=\"let mcqOption of mcqOptions; let index = index\">\n <quml-mcq-image-option (imgOptionSelected)=\"onOptionSelect($event, mcqOption, index)\" [mcqOption]='mcqOption' [cardinality]=\"cardinality\"></quml-mcq-image-option>\n </div>\n </div>\n </div>\n</div>\n<div *ngIf=\"layout === 'MULTIIMAGEGRID'\">\n <div class=\"qumlImageOption\">\n <div class=\"wrapper\">\n <div *ngFor=\"let mcqOption of mcqOptions; let index = index\">\n <quml-mcq-image-option (imgOptionSelected)=\"onOptionSelect($event, mcqOption, index)\" [mcqOption]='mcqOption' [cardinality]=\"cardinality\"></quml-mcq-image-option>\n </div>\n </div>\n </div>\n</div>\n", styles: ["::ng-deep :root{--quml-btn-border: #ccc;--quml-color-gray: #666;--quml-checkmark: #cdcdcd;--quml-color-primary-shade: rgba(0, 0, 0, .1);--quml-color-success: #08BC82;--quml-color-danger: #F1635D;--quml-option-card-bg: #fff;--quml-option-selected-checkmark:#fff;--quml-option-selected-checkmark-icon:#fff}.quml-mcq-options{align-items:center;margin-bottom:.5rem}.quml-option label.container{margin:0 auto}.quml-option-card{margin-bottom:1rem}.quml-option{position:relative;background-color:var(--quml-option-card-bg);border-radius:.25rem;border:.0625rem solid var(--quml-btn-border);padding:1rem;box-shadow:0 .125rem .75rem 0 var(--quml-color-primary-shade);display:flex;align-items:center;justify-content:space-between;height:100%;gap:.5rem}.quml-option .option{flex:1}.quml-option--selected{border:.125rem solid var(--primary-color)}.quml-option-card .option{color:var(--quml-color-gray);font-size:.875rem}.selected-option{border:.125rem solid var(--primary-color)}.selected-option-text{color:var(--primary-color)!important}.container{padding-right:0!important}.checkmark{display:block;height:1.25rem;width:1.25rem;border:.125rem solid var(--quml-checkmark)}.radiomark{display:block;height:1.25rem;width:1.25rem;border-radius:50%;border:.125rem solid var(--quml-checkmark)}.container input{position:absolute;opacity:0;cursor:pointer}.container input:checked~.checkmark,.quml-option--selected .checkmark{position:relative;background-color:var(--quml-option-selected-checkmark);border:.125rem solid var(--primary-color)}.container input:checked~.radiomark,.quml-option--selected .radiomark{position:relative;background-color:var(--quml-option-selected-checkmark);border:.125rem solid var(--primary-color)}input:checked~.checkmark:after,.quml-option--selected .checkmark:after{content:\"\";opacity:1}input:checked~.radiomark:after,.quml-option--selected .radiomark:after{content:\"\";opacity:1}.container .radiomark:after,.quml-option--selected .container .radiomark:after{width:.75rem;height:.75rem;border-radius:50%;background:var(--primary-color);position:absolute;top:50%;left:50%;margin:0;transform:translate(-50%,-50%);opacity:0}.container .checkmark:after,.quml-option--selected .container .checkmark:after{width:.75rem;height:.75rem;background:var(--primary-color);position:absolute;top:50%;left:50%;margin:0;transform:translate(-50%,-50%);opacity:0}.quml-option--selected .container .checkmark:after,.quml-option--selected .container .radiomark:after{opacity:1}img{width:100%!important}.option-img{position:relative}.option-img img{width:100%}.icon-zommin{position:absolute;bottom:0;right:0;content:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTlweCIgaGVpZ2h0PSIxOXB4IiB2aWV3Qm94PSIwIDAgMTkgMTkiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYyICg5MTM5MCkgLSBodHRwczovL3NrZXRjaC5jb20gLS0+CiAgICA8dGl0bGU+em9vbTwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxnIGlkPSJkZXZzIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iem9vbSI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LjUsMCBMMTgsMCBDMTguNTUyMjg0NywtMS4wMTQ1MzA2M2UtMTYgMTksMC40NDc3MTUyNSAxOSwxIEwxOSwxMyBDMTksMTYuMzEzNzA4NSAxNi4zMTM3MDg1LDE5IDEzLDE5IEwxLDE5IEMwLjQ0NzcxNTI1LDE5IDYuNzYzNTM3NTFlLTE3LDE4LjU1MjI4NDcgMCwxOCBMMCw5LjUgQy02LjQyNTM2MDY0ZS0xNiw0LjI1MzI5NDg4IDQuMjUzMjk0ODgsOS42MzgwNDA5NWUtMTYgOS41LDAgWiIgaWQ9IlJlY3RhbmdsZSIgZmlsbC1vcGFjaXR5PSIwLjUiIGZpbGw9IiM0MzQzNDMiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPgogICAgICAgICAgICA8ZyBpZD0iR3JvdXAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuMDAwMDAwLCA0LjAwMDAwMCkiIGZpbGw9IiNGRkZGRkYiPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTQuNTgzMzMzMzMsMC43NSBDNi45NzY2NjY2NywwLjc1IDguOTE2NjY2NjcsMi42OSA4LjkxNjY2NjY3LDUuMDgzMzMzMzMgQzguOTE2NjY2NjcsNi4xNTY2NjY2NyA4LjUyMzMzMzMzLDcuMTQzMzMzMzMgNy44Nyw3LjkwMzMzMzMzIEw3Ljg3LDcuOTAzMzMzMzMgTDguMDU2NjY2NjcsOC4wODMzMzMzMyBMOC41ODMzMzMzMyw4LjA4MzMzMzMzIEwxMS45MSwxMS40MTY2NjY3IEwxMC45MTY2NjY3LDEyLjQxIEw3LjU4MzMzMzMzLDkuMDgzMzMzMzMgTDcuNTgzMzMzMzMsOC41NTY2NjY2NyBMNy40MDMzMzMzMyw4LjM3IEM2LjY0MzMzMzMzLDkuMDIzMzMzMzMgNS42NTY2NjY2Nyw5LjQxNjY2NjY3IDQuNTgzMzMzMzMsOS40MTY2NjY2NyBDMi4xOSw5LjQxNjY2NjY3IDAuMjUsNy40NzY2NjY2NyAwLjI1LDUuMDgzMzMzMzMgQzAuMjUsMi42OSAyLjE5LDAuNzUgNC41ODMzMzMzMywwLjc1IFogTTQuNTgzMzMzMzMsMi4wODMzMzMzMyBDMi45MjMzMzMzMywyLjA4MzMzMzMzIDEuNTgzMzMzMzMsMy40MjMzMzMzMyAxLjU4MzMzMzMzLDUuMDgzMzMzMzMgQzEuNTgzMzMzMzMsNi43NDMzMzMzMyAyLjkyMzMzMzMzLDguMDgzMzMzMzMgNC41ODMzMzMzMyw4LjA4MzMzMzMzIEM2LjI0MzMzMzMzLDguMDgzMzMzMzMgNy41ODMzMzMzMyw2Ljc0MzMzMzMzIDcuNTgzMzMzMzMsNS4wODMzMzMzMyBDNy41ODMzMzMzMywzLjQyMzMzMzMzIDYuMjQzMzMzMzMsMi4wODMzMzMzMyA0LjU4MzMzMzMzLDIuMDgzMzMzMzMgWiBNNC45MTY2NjY2NywzLjQxNjY2NjY3IEw0LjkxNjY2NjY3LDQuNzUgTDYuMjUsNC43NSBMNi4yNSw1LjQxNjY2NjY3IEw0LjkxNjY2NjY3LDUuNDE2NjY2NjcgTDQuOTE2NjY2NjcsNi43NSBMNC4yNSw2Ljc1IEw0LjI1LDUuNDE2NjY2NjcgTDIuOTE2NjY2NjcsNS40MTY2NjY2NyBMMi45MTY2NjY2Nyw0Ljc1IEw0LjI1LDQuNzUgTDQuMjUsMy40MTY2NjY2NyBMNC45MTY2NjY2NywzLjQxNjY2NjY3IFoiIGlkPSJDb21iaW5lZC1TaGFwZSI+PC9wYXRoPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=)}.qumlImageOption .wrapper{margin-top:2rem;display:grid;gap:1rem}.qumlOption-imageQaGrid .wrapper{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:1rem}@media only screen and (max-width: 640px){.qumlOption-imageQaGrid .wrapper{grid-template-columns:repeat(1,1fr)}}@media only screen and (max-width: 840px){.qumlImageOption .wrapper{grid-template-columns:repeat(2,1fr)}}@media only screen and (max-width: 640px){.qumlImageOption .wrapper{grid-template-columns:repeat(1,1fr)}}.disabled{opacity:.4}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.McqImageOptionComponent, selector: "quml-mcq-image-option", inputs: ["mcqQuestion", "solutions", "mcqOption", "cardinality"], outputs: ["imgOptionSelected"] }, { kind: "pipe", type: i4.SafeHtmlPipe, name: "safeHtml" }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: McqOptionComponent, decorators: [{
type: Component,
args: [{ selector: 'quml-mcq-option', template: "<div class=\"quml-mcq-options\" role=\"radiogroup\" *ngIf=\"layout === 'DEFAULT' || layout === 'IMAGEQOPTION'\">\n <div class=\"quml-option-card\" tabindex=\"0\" role=\"checkbox\" [attr.aria-checked]=\"mcqOption.selected\" aria-labelledby=\"option-checkbox\" *ngFor=\"let mcqOption of mcqOptions; let index = index\"\n (keydown)=\"mcqOption.isDisabled ? null: onEnter($event, mcqOption, index)\"\n (click)=\"mcqOption.isDisabled ? null: onOptionSelect($event, mcqOption, index)\"\n [ngClass]=\"{'disabled': mcqOption.isDisabled === true}\">\n <div class=\"quml-option\" [ngClass]=\"mcqOption.selected ? 'quml-option quml-option--selected' : 'quml-option'\">\n <div class=\"option\" [innerHTML]=\"mcqOption.label | safeHtml\"></div>\n <div class=\"container\">\n <input type=\"radio\" *ngIf=\"cardinality==='single'\" name=\"radio\" [checked]=\"mcqOption.selected\"\n id=\"option-checkbox\" tabindex=\"-1\">\n <input type=\"checkbox\" *ngIf=\"cardinality==='multiple'\" name=\"checkbox\" [checked]=\"mcqOption.selected\"\n id=\"option-checkbox\" tabindex=\"-1\" [disabled]=\"mcqOption?.isDisabled\">\n <span [ngClass]=\"{'radiomark': cardinality==='single','checkmark':cardinality==='multiple'}\" tabindex=\"-1\"></span>\n </div>\n </div>\n </div>\n</div>\n<div *ngIf=\"layout === 'IMAGEGRID'\">\n <div class=\"qumlImageOption\">\n <div class=\"wrapper\">\n <div *ngFor=\"let mcqOption of mcqOptions; let index = index\">\n <quml-mcq-image-option (imgOptionSelected)=\"onOptionSelect($event, mcqOption, index)\" [mcqOption]='mcqOption' [cardinality]=\"cardinality\"></quml-mcq-image-option>\n </div>\n </div>\n </div>\n\n</div>\n<div *ngIf=\"layout === 'IMAGEQAGRID'\">\n <div class=\"qumlOption-imageQaGrid\">\n <div class=\"wrapper\">\n <div *ngFor=\"let mcqOption of mcqOptions; let index = index\">\n <quml-mcq-image-option (imgOptionSelected)=\"onOptionSelect($event, mcqOption, index)\" [mcqOption]='mcqOption' [cardinality]=\"cardinality\"></quml-mcq-image-option>\n </div>\n </div>\n </div>\n</div>\n<div *ngIf=\"layout === 'MULTIIMAGEGRID'\">\n <div class=\"qumlImageOption\">\n <div class=\"wrapper\">\n <div *ngFor=\"let mcqOption of mcqOptions; let index = index\">\n <quml-mcq-image-option (imgOptionSelected)=\"onOptionSelect($event, mcqOption, index)\" [mcqOption]='mcqOption' [cardinality]=\"cardinality\"></quml-mcq-image-option>\n </div>\n </div>\n </div>\n</div>\n", styles: ["::ng-deep :root{--quml-btn-border: #ccc;--quml-color-gray: #666;--quml-checkmark: #cdcdcd;--quml-color-primary-shade: rgba(0, 0, 0, .1);--quml-color-success: #08BC82;--quml-color-danger: #F1635D;--quml-option-card-bg: #fff;--quml-option-selected-checkmark:#fff;--quml-option-selected-checkmark-icon:#fff}.quml-mcq-options{align-items:center;margin-bottom:.5rem}.quml-option label.container{margin:0 auto}.quml-option-card{margin-bottom:1rem}.quml-option{position:relative;background-color:var(--quml-option-card-bg);border-radius:.25rem;border:.0625rem solid var(--quml-btn-border);padding:1rem;box-shadow:0 .125rem .75rem 0 var(--quml-color-primary-shade);display:flex;align-items:center;justify-content:space-between;height:100%;gap:.5rem}.quml-option .option{flex:1}.quml-option--selected{border:.125rem solid var(--primary-color)}.quml-option-card .option{color:var(--quml-color-gray);font-size:.875rem}.selected-option{border:.125rem solid var(--primary-color)}.selected-option-text{color:var(--primary-color)!important}.container{padding-right:0!important}.checkmark{display:block;height:1.25rem;width:1.25rem;border:.125rem solid var(--quml-checkmark)}.radiomark{display:block;height:1.25rem;width:1.25rem;border-radius:50%;border:.125rem solid var(--quml-checkmark)}.container input{position:absolute;opacity:0;cursor:pointer}.container input:checked~.checkmark,.quml-option--selected .checkmark{position:relative;background-color:var(--quml-option-selected-checkmark);border:.125rem solid var(--primary-color)}.container input:checked~.radiomark,.quml-option--selected .radiomark{position:relative;background-color:var(--quml-option-selected-checkmark);border:.125rem solid var(--primary-color)}input:checked~.checkmark:after,.quml-option--selected .checkmark:after{content:\"\";opacity:1}input:checked~.radiomark:after,.quml-option--selected .radiomark:after{content:\"\";opacity:1}.container .radiomark:after,.quml-option--selected .container .radiomark:after{width:.75rem;height:.75rem;border-radius:50%;background:var(--primary-color);position:absolute;top:50%;left:50%;margin:0;transform:translate(-50%,-50%);opacity:0}.container .checkmark:after,.quml-option--selected .container .checkmark:after{width:.75rem;height:.75rem;background:var(--primary-color);position:absolute;top:50%;left:50%;margin:0;transform:translate(-50%,-50%);opacity:0}.quml-option--selected .container .checkmark:after,.quml-option--selected .container .radiomark:after{opacity:1}img{width:100%!important}.option-img{position:relative}.option-img img{width:100%}.icon-zommin{position:absolute;bottom:0;right:0;content:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTlweCIgaGVpZ2h0PSIxOXB4IiB2aWV3Qm94PSIwIDAgMTkgMTkiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYyICg5MTM5MCkgLSBodHRwczovL3NrZXRjaC5jb20gLS0+CiAgICA8dGl0bGU+em9vbTwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxnIGlkPSJkZXZzIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iem9vbSI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LjUsMCBMMTgsMCBDMTguNTUyMjg0NywtMS4wMTQ1MzA2M2UtMTYgMTksMC40NDc3MTUyNSAxOSwxIEwxOSwxMyBDMTksMTYuMzEzNzA4NSAxNi4zMTM3MDg1LDE5IDEzLDE5IEwxLDE5IEMwLjQ0NzcxNTI1LDE5IDYuNzYzNTM3NTFlLTE3LDE4LjU1MjI4NDcgMCwxOCBMMCw5LjUgQy02LjQyNTM2MDY0ZS0xNiw0LjI1MzI5NDg4IDQuMjUzMjk0ODgsOS42MzgwNDA5NWUtMTYgOS41LDAgWiIgaWQ9IlJlY3RhbmdsZSIgZmlsbC1vcGFjaXR5PSIwLjUiIGZpbGw9IiM0MzQzNDMiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPgogICAgICAgICAgICA8ZyBpZD0iR3JvdXAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuMDAwMDAwLCA0LjAwMDAwMCkiIGZpbGw9IiNGRkZGRkYiPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTQuNTgzMzMzMzMsMC43NSBDNi45NzY2NjY2NywwLjc1IDguOTE2NjY2NjcsMi42OSA4LjkxNjY2NjY3LDUuMDgzMzMzMzMgQzguOTE2NjY2NjcsNi4xNTY2NjY2NyA4LjUyMzMzMzMzLDcuMTQzMzMzMzMgNy44Nyw3LjkwMzMzMzMzIEw3Ljg3LDcuOTAzMzMzMzMgTDguMDU2NjY2NjcsOC4wODMzMzMzMyBMOC41ODMzMzMzMyw4LjA4MzMzMzMzIEwxMS45MSwxMS40MTY2NjY3IEwxMC45MTY2NjY3LDEyLjQxIEw3LjU4MzMzMzMzLDkuMDgzMzMzMzMgTDcuNTgzMzMzMzMsOC41NTY2NjY2NyBMNy40MDMzMzMzMyw4LjM3IEM2LjY0MzMzMzMzLDkuMDIzMzMzMzMgNS42NTY2NjY2Nyw5LjQxNjY2NjY3IDQuNTgzMzMzMzMsOS40MTY2NjY2NyBDMi4xOSw5LjQxNjY2NjY3IDAuMjUsNy40NzY2NjY2NyAwLjI1LDUuMDgzMzMzMzMgQzAuMjUsMi42OSAyLjE5LDAuNzUgNC41ODMzMzMzMywwLjc1IFogTTQuNTgzMzMzMzMsMi4wODMzMzMzMyBDMi45MjMzMzMzMywyLjA4MzMzMzMzIDEuNTgzMzMzMzMsMy40MjMzMzMzMyAxLjU4MzMzMzMzLDUuMDgzMzMzMzMgQzEuNTgzMzMzMzMsNi43NDMzMzMzMyAyLjkyMzMzMzMzLDguMDgzMzMzMzMgNC41ODMzMzMzMyw4LjA4MzMzMzMzIEM2LjI0MzMzMzMzLDguMDgzMzMzMzMgNy41ODMzMzMzMyw2Ljc0MzMzMzMzIDcuNTgzMzMzMzMsNS4wODMzMzMzMyBDNy41ODMzMzMzMywzLjQyMzMzMzMzIDYuMjQzMzMzMzMsMi4wODMzMzMzMyA0LjU4MzMzMzMzLDIuMDgzMzMzMzMgWiBNNC45MTY2NjY2NywzLjQxNjY2NjY3IEw0LjkxNjY2NjY3LDQuNzUgTDYuMjUsNC43NSBMNi4yNSw1LjQxNjY2NjY3IEw0LjkxNjY2NjY3LDUuNDE2NjY2NjcgTDQuOTE2NjY2NjcsNi43NSBMNC4yNSw2Ljc1IEw0LjI1LDUuNDE2NjY2NjcgTDIuOTE2NjY2NjcsNS40MTY2NjY2NyBMMi45MTY2NjY2Nyw0Ljc1IEw0LjI1LDQuNzUgTDQuMjUsMy40MTY2NjY2NyBMNC45MTY2NjY2NywzLjQxNjY2NjY3IFoiIGlkPSJDb21iaW5lZC1TaGFwZSI+PC9wYXRoPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=)}.qumlImageOption .wrapper{margin-top:2rem;display:grid;gap:1rem}.qumlOption-imageQaGrid .wrapper{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:1rem}@media only screen and (max-width: 640px){.qumlOption-imageQaGrid .wrapper{grid-template-columns:repeat(1,1fr)}}@media only screen and (max-width: 840px){.qumlImageOption .wrapper{grid-template-columns:repeat(2,1fr)}}@media only screen and (max-width: 640px){.qumlImageOption .wrapper{grid-template-columns:repeat(1,1fr)}}.disabled{opacity:.4}\n"] }]
}], ctorParameters: function () { return [{ type: i1.UtilService }]; }, propDecorators: { shuffleOptions: [{
type: Input
}], mcqOptions: [{
type: Input
}], solutions: [{
type: Input
}], layout: [{
type: Input
}], cardinality: [{
type: Input
}], numberOfCorrectOptions: [{
type: Input
}], showPopup: [{
type: Output
}], optionSelected: [{
type: Output
}], replayed: [{
type: Input
}], tryAgain: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWNxLW9wdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xdW1sLWxpYnJhcnkvc3JjL2xpYi9tY3Etb3B0aW9uL21jcS1vcHRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcXVtbC1saWJyYXJ5L3NyYy9saWIvbWNxLW9wdGlvbi9tY3Etb3B0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXJELE9BQU8sS0FBSyxDQUFDLE1BQU0sV0FBVyxDQUFDOzs7Ozs7QUFPL0IsTUFBTSxPQUFPLGtCQUFrQjtJQWM3QixZQUNTLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBUHZCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9CLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNuRCxtQkFBYyxHQUFHLEVBQUUsQ0FBQztJQU1oQixDQUFDO0lBRUwsV0FBVztRQUNULDBCQUEwQjtRQUUxQixJQUFJLENBQUMsVUFBVSxHQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFFLENBQUMsQ0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRXpGLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUM5QixHQUFHLENBQUMsUUFBUSxHQUFHLEtB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b0ZBNkNBOzs0RkRuQ2Esa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGlCQUFpQjtrR0FNbEIsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFFRSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYXJkaW5hbGl0eSB9IGZyb20gJy4uL3RlbGVtZXRyeS1jb25zdGFudHMnO1xuaW1wb3J0IHsgVXRpbFNlcnZpY2UgfSBmcm9tICcuLi91dGlsLXNlcnZpY2UnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdxdW1sLW1jcS1vcHRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vbWNxLW9wdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21jcS1vcHRpb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBNY3FPcHRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgpIHNodWZmbGVPcHRpb25zOiBib29sZWFuXG4gIEBJbnB1dCgpIG1jcU9wdGlvbnM6IGFueTtcbiAgQElucHV0KCkgc29sdXRpb25zOiBhbnk7XG4gIEBJbnB1dCgpIGxheW91dDogYW55O1xuICBASW5wdXQoKSBjYXJkaW5hbGl0eTogc3RyaW5nO1xuICBASW5wdXQoKSBudW1iZXJPZkNvcnJlY3RPcHRpb25zOiBudW1iZXI7XG4gIEBPdXRwdXQoKSBzaG93UG9wdXAgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvcHRpb25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBzZWxlY3RlZE9wdGlvbiA9IFtdO1xuICBASW5wdXQoKSByZXBsYXllZDogYm9vbGVhbjtcbiAgQElucHV0KCkgdHJ5QWdhaW4/OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB1dGlsU2VydmljZTogVXRpbFNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIFxuICAgIHRoaXMubWNxT3B0aW9ucyA9ICB0aGlzLnNodWZmbGVPcHRpb25zID8gXy5zaHVmZmxlKHRoaXMubWNxT3B0aW9ucykgIDogICB0aGlzLm1jcU9wdGlvbnM7XG4gICAgXG4gICAgaWYgKHRoaXMucmVwbGF5ZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSBbXTtcbiAgICAgIHRoaXMubWNxT3B0aW9ucy5mb3JFYWNoKChlbGUpID0+IHtcbiAgICAgICAgZWxlLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIGVsZVsnaXNEaXNhYmxlZCddID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSBbXTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy50cnlBZ2Fpbikge1xuICAgICAgdGhpcy51bnNlbGVjdE9wdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHVuc2VsZWN0T3B0aW9uKCkge1xuICAgIHRoaXMubWNxT3B0aW9ucy5mb3JFYWNoKChlbGUpID0+IHtcbiAgICAgIGVsZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgZWxlWydpc0Rpc2FibGVkJ10gPSBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gW107XG4gICAgdGhpcy5vcHRpb25TZWxlY3RlZC5lbWl0KFxuICAgICAge1xuICAgICAgICBuYW1lOiAnb3B0aW9uU2VsZWN0JyxcbiAgICAgICAgb3B0aW9uOiB0aGlzLnNlbGVjdGVkT3B0aW9uLFxuICAgICAgICBjYXJkaW5hbGl0eTogdGhpcy5jYXJkaW5hbGl0eSxcbiAgICAgICAgc29sdXRpb25zOiB0aGlzLnNvbHV0aW9uc1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBvbk9wdGlvblNlbGVjdChldmVudDogTW91c2VFdmVudCB8IEtleWJvYXJkRXZlbnQsIG1jcU9wdGlvbiwgaW5kZXg/OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5jYXJkaW5hbGl0eSA9PT0gQ2FyZGluYWxpdHkuc2luZ2xlKSB7XG4gICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm1jcU9wdGlvbnMuZm9yRWFjaCgoZWxlKSA9PiBlbGUuc2VsZWN0ZWQgPSBmYWxzZSk7XG4gICAgICAgIHRoaXMubWNxT3B0aW9uc1tpbmRleF0uc2VsZWN0ZWQgPSB0aGlzLm1jcU9wdGlvbnNbaW5kZXhdLmxhYmVsID09PSBtY3FPcHRpb24ubGFiZWxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWNxT3B0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIGVsZW1lbnQuc2VsZWN0ZWQgPSBlbGVtZW50LmxhYmVsID09PSBtY3FPcHRpb24ubGFiZWw7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmNhcmRpbmFsaXR5ID09PSBDYXJkaW5hbGl0eS5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5tY3FPcHRpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50LmxhYmVsID09PSBtY3FPcHRpb24ubGFiZWwpIHtcbiAgICAgICAgICBpZih0aGlzLnV0aWxTZXJ2aWNlLmhhc0R1cGxpY2F0ZXModGhpcy5zZWxlY3RlZE9wdGlvbiwgbWNxT3B0aW9uKSkge1xuICAgICAgICAgICAgZWxlbWVudC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IF8uZmlsdGVyKHRoaXMuc2VsZWN0ZWRPcHRpb24sIChpdGVtKSA9PiBpdGVtLmxhYmVsICE9PSBtY3FPcHRpb24ubGFiZWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24ucHVzaChtY3FPcHRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkT3B0aW9uLmxlbmd0aCA9PT0gdGhpcy5udW1iZXJPZkNvcnJlY3RPcHRpb25zKSB7XG4gICAgICAgIC8vIGRpc2FibGUgZXh0cmEgb3B0aW9uc1xuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uLmZvckVhY2goc2VsZWN0ZWRFZWxlbWVudCA9PiB7XG4gICAgICAgICAgdGhpcy5tY3FPcHRpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBpZiAoKGVsZW1lbnQubGFiZWwgIT0gc2VsZWN0ZWRFZWxlbWVudC5sYWJlbCkgJiYgIWVsZW1lbnQuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgZWxlbWVudFsnaXNEaXNhYmxlZCddID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVsZW1lbnRbJ2lzRGlzYWJsZWQnXSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tY3FPcHRpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgZWxlbWVudFsnaXNEaXNhYmxlZCddID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub3B0aW9uU2VsZWN0ZWQuZW1pdChcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29wdGlvblNlbGVjdCcsXG4gICAgICAgIG9wdGlvbjogdGhpcy5jYXJkaW5hbGl0eSA9PT0gJ3NpbmdsZScgPyBtY3FPcHRpb24gOiB0aGlzLnNlbGVjdGVkT3B0aW9uLFxuICAgICAgICBjYXJkaW5hbGl0eTogdGhpcy5jYXJkaW5hbGl0eSxcbiAgICAgICAgc29sdXRpb25zOiB0aGlzLnNvbHV0aW9uc1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzaG93UXVtbFBvcHVwKCkge1xuICAgIHRoaXMuc2hvd1BvcHVwLmVtaXQoKTtcbiAgfVxuXG4gIG9uRW50ZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIG1jcU9wdGlvbiwgaW5kZXg6IG51bWJlcikge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLm9uT3B0aW9uU2VsZWN0KGV2ZW50LCBtY3FPcHRpb24sIGluZGV4KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJxdW1sLW1jcS1vcHRpb25zXCIgcm9sZT1cInJhZGlvZ3JvdXBcIiAqbmdJZj1cImxheW91dCA9PT0gJ0RFRkFVTFQnIHx8IGxheW91dCA9PT0gJ0lNQUdFUU9QVElPTidcIj5cbiAgICA8ZGl2IGNsYXNzPVwicXVtbC1vcHRpb24tY2FyZFwiIHRhYmluZGV4PVwiMFwiIHJvbGU9XCJjaGVja2JveFwiIFthdHRyLmFyaWEtY2hlY2tlZF09XCJtY3FPcHRpb24uc2VsZWN0ZWRcIiBhcmlhLWxhYmVsbGVkYnk9XCJvcHRpb24tY2hlY2tib3hcIiAqbmdGb3I9XCJsZXQgbWNxT3B0aW9uIG9mIG1jcU9wdGlvbnM7IGxldCBpbmRleCA9IGluZGV4XCJcbiAgICAoa2V5ZG93bik9XCJtY3FPcHRpb24uaXNEaXNhYmxlZCA/IG51bGw6IG9uRW50ZXIoJGV2ZW50LCBtY3FPcHRpb24sIGluZGV4KVwiXG4gICAgKGNsaWNrKT1cIm1jcU9wdGlvbi5pc0Rpc2FibGVkID8gbnVsbDogb25PcHRpb25TZWxlY3QoJGV2ZW50LCBtY3FPcHRpb24sIGluZGV4KVwiXG4gICAgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6IG1jcU9wdGlvbi5pc0Rpc2FibGVkID09PSB0cnVlfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicXVtbC1vcHRpb25cIiBbbmdDbGFzc109XCJtY3FPcHRpb24uc2VsZWN0ZWQgPyAncXVtbC1vcHRpb24gcXVtbC1vcHRpb24tLXNlbGVjdGVkJyA6ICdxdW1sLW9wdGlvbidcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25cIiBbaW5uZXJIVE1MXT1cIm1jcU9wdGlvbi5sYWJlbCB8IHNhZmVIdG1sXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiICpuZ0lmPVwiY2FyZGluYWxpdHk9PT0nc2luZ2xlJ1wiIG5hbWU9XCJyYWRpb1wiIFtjaGVja2VkXT1cIm1jcU9wdGlvbi5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJvcHRpb24tY2hlY2tib3hcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiICpuZ0lmPVwiY2FyZGluYWxpdHk9PT0nbXVsdGlwbGUnXCIgbmFtZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwibWNxT3B0aW9uLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBpZD1cIm9wdGlvbi1jaGVja2JveFwiIHRhYmluZGV4PVwiLTFcIiBbZGlzYWJsZWRdPVwibWNxT3B0aW9uPy5pc0Rpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieydyYWRpb21hcmsnOiBjYXJkaW5hbGl0eT09PSdzaW5nbGUnLCdjaGVja21hcmsnOmNhcmRpbmFsaXR5PT09J211bHRpcGxlJ31cIiB0YWJpbmRleD1cIi0xXCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwibGF5b3V0ID09PSAnSU1BR0VHUklEJ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJxdW1sSW1hZ2VPcHRpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG1jcU9wdGlvbiBvZiBtY3FPcHRpb25zOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgIDxxdW1sLW1jcS1pbWFnZS1vcHRpb24gKGltZ09wdGlvblNlbGVjdGVkKT1cIm9uT3B0aW9uU2VsZWN0KCRldmVudCwgbWNxT3B0aW9uLCBpbmRleClcIiBbbWNxT3B0aW9uXT0nbWNxT3B0aW9uJyBbY2FyZGluYWxpdHldPVwiY2FyZGluYWxpdHlcIj48L3F1bWwtbWNxLWltYWdlLW9wdGlvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwibGF5b3V0ID09PSAnSU1BR0VRQUdSSUQnXCI+XG4gICAgPGRpdiBjbGFzcz1cInF1bWxPcHRpb24taW1hZ2VRYUdyaWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG1jcU9wdGlvbiBvZiBtY3FPcHRpb25zOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgIDxxdW1sLW1jcS1pbWFnZS1vcHRpb24gKGltZ09wdGlvblNlbGVjdGVkKT1cIm9uT3B0aW9uU2VsZWN0KCRldmVudCwgbWNxT3B0aW9uLCBpbmRleClcIiBbbWNxT3B0aW9uXT0nbWNxT3B0aW9uJyBbY2FyZGluYWxpdHldPVwiY2FyZGluYWxpdHlcIj48L3F1bWwtbWNxLWltYWdlLW9wdGlvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImxheW91dCA9PT0gJ01VTFRJSU1BR0VHUklEJ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJxdW1sSW1hZ2VPcHRpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG1jcU9wdGlvbiBvZiBtY3FPcHRpb25zOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgIDxxdW1sLW1jcS1pbWFnZS1vcHRpb24gKGltZ09wdGlvblNlbGVjdGVkKT1cIm9uT3B0aW9uU2VsZWN0KCRldmVudCwgbWNxT3B0aW9uLCBpbmRleClcIiBbbWNxT3B0aW9uXT0nbWNxT3B0aW9uJyBbY2FyZGluYWxpdHldPVwiY2FyZGluYWxpdHlcIj48L3F1bWwtbWNxLWltYWdlLW9wdGlvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19