@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
220 lines • 28.5 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, Injector, Input } from '@angular/core';
import { Validators } from '@angular/forms';
import { SmeSchemaProperty } from '../../../schema/schema-decorator';
import { SimplePropertySchemaFieldLoaderComponent } from '../../../schema/schema-field-host.component';
import { SchemaPrimitiveType } from '../../../schema/schema-models';
import { SmeInternalFormFieldComponent } from '../form-field.component';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
import * as i2 from "../form-field-accessor.directive";
import * as i3 from "../form-field-validator.directive";
import * as i4 from "../form-field-async-validator.directive";
import * as i5 from "../../../tooltip/tooltip.directive";
import * as i6 from "../../validation-alert/validation-alert.component";
import * as i7 from "../../form-field-layout/form-field-layout.component";
const _c0 = ["type", "slider"];
/* eslint-disable max-len */
/* eslint-enable max-len */
export class SliderFormFieldLoaderComponent extends SimplePropertySchemaFieldLoaderComponent {
}
/** @nocollapse */ SliderFormFieldLoaderComponent.ɵfac = /** @pureOrBreakMyCode */ function () { let ɵSliderFormFieldLoaderComponent_BaseFactory; return function SliderFormFieldLoaderComponent_Factory(t) { return (ɵSliderFormFieldLoaderComponent_BaseFactory || (ɵSliderFormFieldLoaderComponent_BaseFactory = i0.ɵɵgetInheritedFactory(SliderFormFieldLoaderComponent)))(t || SliderFormFieldLoaderComponent); }; }();
/** @nocollapse */ SliderFormFieldLoaderComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: SliderFormFieldLoaderComponent, selectors: [["ng-component"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 13, consts: [["type", "slider", 3, "ngModel", "name", "label", "description", "required", "min", "readonly", "disabled", "max", "step", "pendingMessage", "customAsyncValidateDisabled", "customAsyncValidateDebounceTime", "ngModelChange", "customValidate", "customAsyncValidate"], ["field", ""]], template: function SliderFormFieldLoaderComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "sme-form-field", 0, 1);
i0.ɵɵlistener("ngModelChange", function SliderFormFieldLoaderComponent_Template_sme_form_field_ngModelChange_0_listener($event) { return ctx.data = $event; })("customValidate", function SliderFormFieldLoaderComponent_Template_sme_form_field_customValidate_0_listener($event) { return ctx.resolveFunction(ctx.propertySchema.customValidation)($event); })("customAsyncValidate", function SliderFormFieldLoaderComponent_Template_sme_form_field_customAsyncValidate_0_listener($event) { return ctx.propertySchema.customAsyncValidation && ctx.resolveFunction(ctx.propertySchema.customAsyncValidation.handler)($event); });
i0.ɵɵelementEnd();
} if (rf & 2) {
i0.ɵɵproperty("ngModel", ctx.data)("name", ctx.propertySchema.name)("label", ctx.localize(ctx.propertySchema.label))("description", ctx.localize(ctx.propertySchema.description))("required", ctx.propertySchema.required)("min", ctx.propertySchema.options.min)("readonly", !!ctx.evalExpression(ctx.propertySchema.readonlyCondition))("disabled", !!(ctx.propertySchema.disabledCondition && ctx.evalExpression(ctx.propertySchema.disabledCondition)))("max", ctx.propertySchema.options.max)("step", ctx.propertySchema.options.step)("pendingMessage", ctx.propertySchema.customAsyncValidation && ctx.localize(ctx.propertySchema.customAsyncValidation.pendingMessage))("customAsyncValidateDisabled", ctx.shouldCustomAsyncValidationBeDisabled())("customAsyncValidateDebounceTime", ctx.propertySchema.customAsyncValidation && +ctx.propertySchema.customAsyncValidation.handler);
} }, dependencies: function () { return [i1.NgControlStatus, i1.RequiredValidator, i1.NgModel, SliderFormFieldComponent, i2.FormFieldAccessorDirective, i3.FormFieldValidatorDirective, i4.FormFieldAsyncValidatorDirective]; }, encapsulation: 2 });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SliderFormFieldLoaderComponent, [{
type: Component,
args: [{
template: `
<sme-form-field #field type="slider" [(ngModel)]="data" [name]="propertySchema.name" [label]="localize(propertySchema.label)"
[description]="localize(propertySchema.description)" [required]="propertySchema.required" [min]="propertySchema.options.min"
[readonly]="!!evalExpression(propertySchema.readonlyCondition)"
[disabled]="!!(propertySchema.disabledCondition && evalExpression(propertySchema.disabledCondition))"
[max]="propertySchema.options.max" [step]="propertySchema.options.step"
(customValidate)="resolveFunction(propertySchema.customValidation)($event)"
(customAsyncValidate)="propertySchema.customAsyncValidation && resolveFunction(propertySchema.customAsyncValidation.handler)($event)"
[pendingMessage]="propertySchema.customAsyncValidation && localize(propertySchema.customAsyncValidation.pendingMessage)"
[customAsyncValidateDisabled]="shouldCustomAsyncValidationBeDisabled()"
[customAsyncValidateDebounceTime]="propertySchema.customAsyncValidation && +propertySchema.customAsyncValidation.handler"
>
</sme-form-field>
`
}]
}], null, null); })();
/**
* Accessible range field implementation as a slider
*/
let SliderFormFieldComponent = class SliderFormFieldComponent extends SmeInternalFormFieldComponent {
/**
* Initializes a new instance of the SliderFormFieldComponent
*/
constructor(injector) {
super(injector);
this.step = 1;
this.min = 0;
this.max = 100;
}
/**
* The source name to use for logging
*/
get logSourceName() {
return 'SliderFormFieldComponent';
}
/**
* Indicates the default value for immediateValidation.
* This is meant to be overridden by derived classes
*/
get defaultImmediateValidation() {
return true;
}
/**
* Creates the idBag used by this component to store unique element ids.
* id values will be assigned be the @see BaseComponent super class.
*/
createIdBag() {
return {
detailsSpan: ''
};
}
/**
* Determines the value to use when clearing the field based on the initial value type
*/
getClearValue() {
return MsftSme.isNullOrUndefined(this.min) ? 0 : this.min;
}
/**
* Performs validation that is internal to this control
* @param c The form control attached to this instance
*/
validate(c) {
// shouldnt be possible by the user, but it could be a problem for
// angular's min and max validator only work via code. So we implement them here.
if (!MsftSme.isNullOrUndefined(this.min) && this.value < this.min) {
const errors = Validators.min(this.min)(c);
if (errors) {
return errors;
}
}
if (!MsftSme.isNullOrUndefined(this.max) && this.value > this.max) {
const errors = Validators.max(this.max)(c);
if (errors) {
return errors;
}
}
return super.validate(c);
}
};
/** @nocollapse */ SliderFormFieldComponent.ɵfac = function SliderFormFieldComponent_Factory(t) { return new (t || SliderFormFieldComponent)(i0.ɵɵdirectiveInject(i0.Injector)); };
/** @nocollapse */ SliderFormFieldComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: SliderFormFieldComponent, selectors: [["sme-form-field", "type", "slider"]], inputs: { step: "step", min: "min", max: "max" }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c0, decls: 4, vars: 12, consts: [[3, "formField"], [1, "sme-slider", "sme-form-field-editor"], ["type", "range", "role", "slider", "title", "value", 3, "disabled", "ngModel", "max", "min", "step", "ngModelChange"], [3, "alert"]], template: function SliderFormFieldComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "sme-form-field-layout", 0)(1, "div", 1)(2, "input", 2);
i0.ɵɵlistener("ngModelChange", function SliderFormFieldComponent_Template_input_ngModelChange_2_listener($event) { return ctx.value = $event; });
i0.ɵɵelementEnd()();
i0.ɵɵelement(3, "sme-validation-alert", 3);
i0.ɵɵelementEnd();
} if (rf & 2) {
i0.ɵɵproperty("formField", ctx);
i0.ɵɵadvance(2);
i0.ɵɵproperty("disabled", ctx.loadingOrDisabled)("ngModel", ctx.value)("max", ctx.max)("min", ctx.min)("step", ctx.step);
i0.ɵɵattribute("aria-label", ctx.label)("aria-valuenow", ctx.value)("aria-valuetext", ctx.value)("aria-valuemax", ctx.max)("aria-valuemin", ctx.min);
i0.ɵɵadvance(1);
i0.ɵɵproperty("alert", ctx.alert);
} }, dependencies: [i1.DefaultValueAccessor, i1.RangeValueAccessor, i1.NgControlStatus, i1.NgModel, i5.TooltipDirective, i6.ValidationAlertComponent, i7.FormFieldLayoutComponent], encapsulation: 2 });
SliderFormFieldComponent = __decorate([
SmeSchemaProperty({
type: SchemaPrimitiveType.Number,
format: 'slider',
description: 'A slider control binding to number data.',
loaderComponent: SliderFormFieldLoaderComponent,
optionProperties: [
{
type: SchemaPrimitiveType.Number,
format: 'textbox',
name: 'min',
label: 'actual_string:Min',
required: false,
options: {
multipleline: false
}
},
{
type: SchemaPrimitiveType.Number,
format: 'textbox',
name: 'max',
label: 'actual_string:Max',
defaultValue: 100,
required: false,
options: {
multipleline: false
}
},
{
type: SchemaPrimitiveType.Number,
format: 'textbox',
name: 'step',
label: 'actual_string:Step',
defaultValue: 1,
required: false,
options: {
multipleline: false
}
},
{
type: SchemaPrimitiveType.Number,
format: 'textbox',
name: 'tooMuch',
label: 'actual_string:Too much',
required: false,
options: {
multipleline: false
}
},
{
type: SchemaPrimitiveType.Number,
format: 'textbox',
name: 'tooLittle',
label: 'actual_string:Too little',
required: false,
options: {
multipleline: false
}
},
{
type: SchemaPrimitiveType.String,
format: 'textbox',
name: 'tooMuchWarning',
label: 'actual_string:Too much warning',
required: false,
options: {
multipleline: false
}
},
{
type: SchemaPrimitiveType.String,
format: 'textbox',
name: 'tooLittleWarning',
label: 'actual_string:Too little warning',
required: false,
options: {
multipleline: false
}
}
]
}),
__metadata("design:paramtypes", [Injector])
], SliderFormFieldComponent);
export { SliderFormFieldComponent };
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SliderFormFieldComponent, [{
type: Component,
args: [{ selector: 'sme-form-field[type="slider"]', template: "<sme-form-field-layout [formField]=\"this\">\r\n <div class=\"sme-slider sme-form-field-editor\">\r\n <input type=\"range\" role=\"slider\" [attr.aria-label]=\"label\" title=\"value\"\r\n [disabled]=\"loadingOrDisabled\" [(ngModel)]=\"value\" [attr.aria-valuenow]=\"value\" [attr.aria-valuetext]=\"value\" [max]=\"max\"\r\n [attr.aria-valuemax]=\"max\" [min]=\"min\" [attr.aria-valuemin]=\"min\" [step]=\"step\">\r\n </div>\r\n <sme-validation-alert [alert]=\"alert\"></sme-validation-alert>\r\n</sme-form-field-layout>\r\n" }]
}], function () { return [{ type: i0.Injector }]; }, { step: [{
type: Input
}], min: [{
type: Input
}], max: [{
type: Input
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLWZvcm0tZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZm9ybS9mb3JtLWZpZWxkL3NsaWRlci9zbGlkZXItZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvc2xpZGVyL3NsaWRlci1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFlLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7O0FBRXhFLDRCQUE0QjtBQWlCNUIsMkJBQTJCO0FBQzNCLE1BQU0sT0FBTyw4QkFBK0IsU0FBUSx3Q0FBd0M7OzZVQUEvRSw4QkFBOEIsU0FBOUIsOEJBQThCO2dIQUE5Qiw4QkFBOEI7UUFmdkMsNENBVUs7UUFWZ0MsOEpBQWtCLDhIQUtqQyx3REFBZ0QsUUFBUSxJQUx2QixvTEFNWSxxRUFBNkQsUUFBUSxJQU5qRjtRQVd2RCxpQkFBaUI7O1FBWG9CLGtDQUFrQixpQ0FBQSxpREFBQSw2REFBQSx5Q0FBQSx1Q0FBQSx3RUFBQSxrSEFBQSx1Q0FBQSx5Q0FBQSxxSUFBQSw0RUFBQSxrSUFBQTttR0F5RzlDLHdC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RSxLQUFLO2lCQUN0QjthQUNKO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLG1CQUFtQixDQUFDLE1BQU07Z0JBQ2hDLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixJQUFJLEVBQUUsa0JBQWtCO2dCQUN4QixLQUFLLEVBQUUsa0NBQWtDO2dCQUN6QyxRQUFRLEVBQUUsS0FBSztnQkFDZixPQUFPLEVBQUU7b0JBQ0wsWUFBWSxFQUFFLEtBQUs7aUJBQ3RCO2FBQ0o7U0FDSjtLQUNKLENBQUM7cUNBNENnQixRQUFRO0dBdkNiLHdCQUF3QixDQW1GcEM7U0FuRlksd0JBQXdCO3VGQUF4Qix3QkFBd0I7Y0FKcEMsU0FBUzsyQkFDSSwrQkFBK0I7MkRBd0JsQyxJQUFJO2tCQURWLEtBQUs7WUFPQyxHQUFHO2tCQURULEtBQUs7WUFPQyxHQUFHO2tCQURULEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTbWVTY2hlbWFQcm9wZXJ0eSB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgU2ltcGxlUHJvcGVydHlTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtZmllbGQtaG9zdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTY2hlbWFQcmltaXRpdmVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBTbWVJbnRlcm5hbEZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tZmllbGQuY29tcG9uZW50JztcclxuXHJcbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPHNtZS1mb3JtLWZpZWxkICNmaWVsZCB0eXBlPVwic2xpZGVyXCIgWyhuZ01vZGVsKV09XCJkYXRhXCIgW25hbWVdPVwicHJvcGVydHlTY2hlbWEubmFtZVwiIFtsYWJlbF09XCJsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5sYWJlbClcIlxyXG4gICAgICAgIFtkZXNjcmlwdGlvbl09XCJsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5kZXNjcmlwdGlvbilcIiBbcmVxdWlyZWRdPVwicHJvcGVydHlTY2hlbWEucmVxdWlyZWRcIiBbbWluXT1cInByb3BlcnR5U2NoZW1hLm9wdGlvbnMubWluXCJcclxuICAgICAgICBbcmVhZG9ubHldPVwiISFldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5yZWFkb25seUNvbmRpdGlvbilcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhIShwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbiAmJiBldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbikpXCJcclxuICAgICAgICBbbWF4XT1cInByb3BlcnR5U2NoZW1hLm9wdGlvbnMubWF4XCIgW3N0ZXBdPVwicHJvcGVydHlTY2hlbWEub3B0aW9ucy5zdGVwXCJcclxuICAgICAgICAoY3VzdG9tVmFsaWRhdGUpPVwicmVzb2x2ZUZ1bmN0aW9uKHByb3BlcnR5U2NoZW1hLmN1c3RvbVZhbGlkYXRpb24pKCRldmVudClcIlxyXG4gICAgICAgIChjdXN0b21Bc3luY1ZhbGlkYXRlKT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiByZXNvbHZlRnVuY3Rpb24ocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXIpKCRldmVudClcIlxyXG4gICAgICAgIFtwZW5kaW5nTWVzc2FnZV09XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgbG9jYWxpemUocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLnBlbmRpbmdNZXNzYWdlKVwiXHJcbiAgICAgICAgW2N1c3RvbUFzeW5jVmFsaWRhdGVEaXNhYmxlZF09XCJzaG91bGRDdXN0b21Bc3luY1ZhbGlkYXRpb25CZURpc2FibGVkKClcIlxyXG4gICAgICAgIFtjdXN0b21Bc3luY1ZhbGlkYXRlRGVib3VuY2VUaW1lXT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiArcHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXJcIlxyXG4gICAgICAgID5cclxuICAgIDwvc21lLWZvcm0tZmllbGQ+XHJcbiAgICBgXHJcbn0pXHJcbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xyXG5leHBvcnQgY2xhc3MgU2xpZGVyRm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50IGV4dGVuZHMgU2ltcGxlUHJvcGVydHlTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudCB7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBY2Nlc3NpYmxlIHJhbmdlIGZpZWxkIGltcGxlbWVudGF0aW9uIGFzIGEgc2xpZGVyXHJcbiAqL1xyXG5AU21lU2NoZW1hUHJvcGVydHkoe1xyXG4gICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5OdW1iZXIsXHJcbiAgICBmb3JtYXQ6ICdzbGlkZXInLFxyXG4gICAgZGVzY3JpcHRpb246ICdBIHNsaWRlciBjb250cm9sIGJpbmRpbmcgdG8gbnVtYmVyIGRhdGEuJyxcclxuICAgIGxvYWRlckNvbXBvbmVudDogU2xpZGVyRm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50LFxyXG4gICAgb3B0aW9uUHJvcGVydGllczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5OdW1iZXIsXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICBuYW1lOiAnbWluJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdhY3R1YWxfc3RyaW5nOk1pbicsXHJcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGVsaW5lOiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuTnVtYmVyLFxyXG4gICAgICAgICAgICBmb3JtYXQ6ICd0ZXh0Ym94JyxcclxuICAgICAgICAgICAgbmFtZTogJ21heCcsXHJcbiAgICAgICAgICAgIGxhYmVsOiAnYWN0dWFsX3N0cmluZzpNYXgnLFxyXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IDEwMCxcclxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZWxpbmU6IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5OdW1iZXIsXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICBuYW1lOiAnc3RlcCcsXHJcbiAgICAgICAgICAgIGxhYmVsOiAnYWN0dWFsX3N0cmluZzpTdGVwJyxcclxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAxLFxyXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlbGluZTogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk51bWJlcixcclxuICAgICAgICAgICAgZm9ybWF0OiAndGV4dGJveCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICd0b29NdWNoJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdhY3R1YWxfc3RyaW5nOlRvbyBtdWNoJyxcclxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZWxpbmU6IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5OdW1iZXIsXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICBuYW1lOiAndG9vTGl0dGxlJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdhY3R1YWxfc3RyaW5nOlRvbyBsaXR0bGUnLFxyXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlbGluZTogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgZm9ybWF0OiAndGV4dGJveCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICd0b29NdWNoV2FybmluZycsXHJcbiAgICAgICAgICAgIGxhYmVsOiAnYWN0dWFsX3N0cmluZzpUb28gbXVjaCB3YXJuaW5nJyxcclxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZWxpbmU6IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgICAgICAgICBuYW1lOiAndG9vTGl0dGxlV2FybmluZycsXHJcbiAgICAgICAgICAgIGxhYmVsOiAnYWN0dWFsX3N0cmluZzpUb28gbGl0dGxlIHdhcm5pbmcnLFxyXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlbGluZTogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIF1cclxufSlcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1mb3JtLWZpZWxkW3R5cGU9XCJzbGlkZXJcIl0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NsaWRlci1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2xpZGVyRm9ybUZpZWxkQ29tcG9uZW50IGV4dGVuZHMgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQ8bnVtYmVyPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ1NsaWRlckZvcm1GaWVsZENvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGltbWVkaWF0ZVZhbGlkYXRpb24uXHJcbiAgICAgKiBUaGlzIGlzIG1lYW50IHRvIGJlIG92ZXJyaWRkZW4gYnkgZGVyaXZlZCBjbGFzc2VzXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgZGVmYXVsdEltbWVkaWF0ZVZhbGlkYXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc2l6ZSBvZiBlYWNoIG1vdmVtZW50IG9mIHRoZSBzbGlkZXIuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc3RlcDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIHNsaWRlclxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG1pbjogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIHNsaWRlclxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG1heDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFNsaWRlckZvcm1GaWVsZENvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgICAgICB0aGlzLnN0ZXAgPSAxO1xyXG4gICAgICAgIHRoaXMubWluID0gMDtcclxuICAgICAgICB0aGlzLm1heCA9IDEwMDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICogaWQgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgYmUgdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRldGFpbHNTcGFuOiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzIHRoZSB2YWx1ZSB0byB1c2Ugd2hlbiBjbGVhcmluZyB0aGUgZmllbGQgYmFzZWQgb24gdGhlIGluaXRpYWwgdmFsdWUgdHlwZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0Q2xlYXJWYWx1ZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMubWluKSA/IDAgOiB0aGlzLm1pbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIHZhbGlkYXRpb24gdGhhdCBpcyBpbnRlcm5hbCB0byB0aGlzIGNvbnRyb2xcclxuICAgICAqIEBwYXJhbSBjIFRoZSBmb3JtIGNvbnRyb2wgYXR0YWNoZWQgdG8gdGhpcyBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAvLyBzaG91bGRudCBiZSBwb3NzaWJsZSBieSB0aGUgdXNlciwgYnV0IGl0IGNvdWxkIGJlIGEgcHJvYmxlbSBmb3JcclxuICAgICAgICAvLyBhbmd1bGFyJ3MgbWluIGFuZCBtYXggdmFsaWRhdG9yIG9ubHkgd29yayB2aWEgY29kZS4gU28gd2UgaW1wbGVtZW50IHRoZW0gaGVyZS5cclxuICAgICAgICBpZiAoIU1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQodGhpcy5taW4pICYmIHRoaXMudmFsdWUgPCB0aGlzLm1pbikge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvcnMgPSBWYWxpZGF0b3JzLm1pbih0aGlzLm1pbikoYyk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcnMpIHsgcmV0dXJuIGVycm9yczsgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMubWF4KSAmJiB0aGlzLnZhbHVlID4gdGhpcy5tYXgpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gVmFsaWRhdG9ycy5tYXgodGhpcy5tYXgpKGMpO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3JzKSB7IHJldHVybiBlcnJvcnM7IH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdXBlci52YWxpZGF0ZShjKTtcclxuICAgIH1cclxufVxyXG4iLCI8c21lLWZvcm0tZmllbGQtbGF5b3V0IFtmb3JtRmllbGRdPVwidGhpc1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJzbWUtc2xpZGVyIHNtZS1mb3JtLWZpZWxkLWVkaXRvclwiPlxyXG4gICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIHJvbGU9XCJzbGlkZXJcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImxhYmVsXCIgIHRpdGxlPVwidmFsdWVcIlxyXG4gICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nT3JEaXNhYmxlZFwiIFsobmdNb2RlbCldPVwidmFsdWVcIiBbYXR0ci5hcmlhLXZhbHVlbm93XT1cInZhbHVlXCIgW2F0dHIuYXJpYS12YWx1ZXRleHRdPVwidmFsdWVcIiBbbWF4XT1cIm1heFwiXHJcbiAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCJtYXhcIiBbbWluXT1cIm1pblwiIFthdHRyLmFyaWEtdmFsdWVtaW5dPVwibWluXCIgW3N0ZXBdPVwic3RlcFwiPlxyXG4gIDwvZGl2PlxyXG4gIDxzbWUtdmFsaWRhdGlvbi1hbGVydCBbYWxlcnRdPVwiYWxlcnRcIj48L3NtZS12YWxpZGF0aW9uLWFsZXJ0PlxyXG48L3NtZS1mb3JtLWZpZWxkLWxheW91dD5cclxuIl19