year-scheduler
Version:
An Angular Year Scheduler component.
92 lines • 21.5 kB
JavaScript
import { Component, Input, ViewEncapsulation } from '@angular/core';
import { trigger, style, transition, animate } from '@angular/animations';
import { AxiomSchedulerComponentCommon } from '../axiom-scheduler/axiom-scheduler-component-common.component';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export class AxiomSchedulerEventComponent extends AxiomSchedulerComponentCommon {
_renderer;
_element;
event;
monthMode = false;
ctx;
fromTime;
toTime;
diff;
showTime = false;
expired = false;
timeout;
constructor(injector, _renderer, _element) {
super(injector);
this._renderer = _renderer;
this._element = _element;
}
ngOnInit() {
this.ctx = { item: this.event };
// this.applyColor();
}
ngAfterViewInit() {
}
refreshView() {
}
deleteEevent() {
this.service.eventDeleteClick.next(this.event);
}
editEevent() {
this.service.eventEditClick.next(this.event);
}
mouseDown(ev) {
ev && ev.preventDefault();
ev && ev.stopPropagation();
}
applyColor() {
if (this.event.color) {
this._renderer.setStyle(this._element.nativeElement, 'background', this.event.color);
}
}
toggleShowTime(toggle) {
if (toggle) {
this.timeout = setTimeout(() => {
this.showTime = toggle;
}, 200);
}
else {
clearTimeout(this.timeout);
this.showTime = toggle;
}
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AxiomSchedulerEventComponent, deps: [{ token: i0.Injector }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AxiomSchedulerEventComponent, selector: "[ax-scheduler-event]", inputs: { event: "event", monthMode: "monthMode" }, host: { listeners: { "click": "service.eventClicked(event)" }, properties: { "class.expired": "expired" }, classAttribute: "ax-scheduler__event" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!monthMode && axEventTemplate\">\n <p [@timeAnimate] *ngIf=\"showTime\">\n <span>{{ fromTime && fromTime.format('HH:mm') }}</span>\n <span>{{ toTime && toTime.format('HH:mm') }}</span>\n </p>\n\n <div class=\"ax-scheduler__event__content\">\n <ng-container *ngTemplateOutlet=\"axEventTemplate;context:ctx\">\n </ng-container>\n </div>\n</ng-container>\n<ng-container *ngIf=\"monthMode && axEventTemplate\">\n <div class=\"ax-scheduler__event__content\">\n <ng-container *ngTemplateOutlet=\"axEventTemplate;context:ctx\">\n </ng-container>\n </div>\n</ng-container>\n<ng-container *ngIf=\"!axEventTemplate\">\n <p [@timeAnimate] *ngIf=\"showTime\">\n <span>{{ fromTime && fromTime.format('HH:mm') }}</span>\n <span>{{ toTime && toTime.format('HH:mm') }}</span>\n </p>\n <div class=\"ax-scheduler__event__content\">\n {{ event.title }}\n </div>\n</ng-container>\n\n<svg class=\"ax-lock-event\" *ngIf=\"event.locked\" style=\"enable-background:new 0 0 64 64;\" version=\"1.1\"\n viewBox=\"0 0 64 64\" xml:space=\"preserve\" xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <g>\n <g id=\"Icon-Lock\" transform=\"translate(284.000000, 430.000000)\">\n <path class=\"st0\"\n d=\"M-237.7-401.3h-3v-6.4c0-6.2-5.1-11.3-11.3-11.3c-6.2,0-11.3,5.1-11.3,11.3v6.4h-3v-6.4 c0-7.9,6.4-14.3,14.3-14.3s14.3,6.4,14.3,14.3V-401.3\"\n id=\"Fill-66\" />\n <path class=\"st0\"\n d=\"M-239.2-374.1h-25.6c-2.6,0-4.8-2.2-4.8-4.8v-19.2c0-2.6,2.2-4.8,4.8-4.8h25.6 c2.6,0,4.8,2.2,4.8,4.8v19.2C-234.4-376.2-236.6-374.1-239.2-374.1L-239.2-374.1z M-264.8-399.7c-0.9,0-1.6,0.7-1.6,1.6v19.2 c0,0.9,0.7,1.6,1.6,1.6h25.6c0.9,0,1.6-0.7,1.6-1.6v-19.2c0-0.9-0.7-1.6-1.6-1.6H-264.8L-264.8-399.7z\"\n id=\"Fill-67\" />\n <path class=\"st0\"\n d=\"M-248.8-393.3c0,1.8-1.4,3.2-3.2,3.2s-3.2-1.4-3.2-3.2s1.4-3.2,3.2-3.2S-248.8-395-248.8-393.3 \"\n id=\"Fill-68\" />\n <polyline class=\"st0\" id=\"Fill-69\"\n points=\"-251.2,-393.3 -252.8,-393.3 -254.4,-383.7 -249.6,-383.7 -251.2,-393.3 \" />\n </g>\n </g>\n</svg>\n", styles: [".ax-scheduler__event{text-align:left;overflow:visible;cursor:pointer;position:relative}.ax-scheduler__event>.ax-scheduler__event__content{display:inline-block;vertical-align:middle;height:100%;position:relative;color:#444;font-size:13px;font-weight:400;margin:0 10px;padding:5px 8px;overflow:hidden}.ax-scheduler__event>p{vertical-align:top;display:inline-block;height:100%;width:50px;color:#fff;padding:0;margin:0;font-size:11px;position:absolute}.ax-scheduler__event>p>span{position:absolute;background:#333;color:#fff;padding:0 5px;left:-40px;border-radius:100px;z-index:200}.ax-scheduler__event>p>span:first-child{top:0}.ax-scheduler__event>p>span:last-child{bottom:0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [
trigger('timeAnimate', [
transition(':enter', [
style({ transform: 'scale(0)' }),
animate(`${180}ms ease-in`, style({ transform: 'scale(1)' }))
]),
transition(':leave', [
animate(`${80}ms ease-out`, style({ opacity: '0' }))
])
])
], encapsulation: i0.ViewEncapsulation.None });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AxiomSchedulerEventComponent, decorators: [{
type: Component,
args: [{ selector: '[ax-scheduler-event]', encapsulation: ViewEncapsulation.None, host: {
'class': 'ax-scheduler__event',
'[class.expired]': 'expired',
'(click)': 'service.eventClicked(event)'
}, animations: [
trigger('timeAnimate', [
transition(':enter', [
style({ transform: 'scale(0)' }),
animate(`${180}ms ease-in`, style({ transform: 'scale(1)' }))
]),
transition(':leave', [
animate(`${80}ms ease-out`, style({ opacity: '0' }))
])
])
], standalone: false, template: "<ng-container *ngIf=\"!monthMode && axEventTemplate\">\n <p [@timeAnimate] *ngIf=\"showTime\">\n <span>{{ fromTime && fromTime.format('HH:mm') }}</span>\n <span>{{ toTime && toTime.format('HH:mm') }}</span>\n </p>\n\n <div class=\"ax-scheduler__event__content\">\n <ng-container *ngTemplateOutlet=\"axEventTemplate;context:ctx\">\n </ng-container>\n </div>\n</ng-container>\n<ng-container *ngIf=\"monthMode && axEventTemplate\">\n <div class=\"ax-scheduler__event__content\">\n <ng-container *ngTemplateOutlet=\"axEventTemplate;context:ctx\">\n </ng-container>\n </div>\n</ng-container>\n<ng-container *ngIf=\"!axEventTemplate\">\n <p [@timeAnimate] *ngIf=\"showTime\">\n <span>{{ fromTime && fromTime.format('HH:mm') }}</span>\n <span>{{ toTime && toTime.format('HH:mm') }}</span>\n </p>\n <div class=\"ax-scheduler__event__content\">\n {{ event.title }}\n </div>\n</ng-container>\n\n<svg class=\"ax-lock-event\" *ngIf=\"event.locked\" style=\"enable-background:new 0 0 64 64;\" version=\"1.1\"\n viewBox=\"0 0 64 64\" xml:space=\"preserve\" xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <g>\n <g id=\"Icon-Lock\" transform=\"translate(284.000000, 430.000000)\">\n <path class=\"st0\"\n d=\"M-237.7-401.3h-3v-6.4c0-6.2-5.1-11.3-11.3-11.3c-6.2,0-11.3,5.1-11.3,11.3v6.4h-3v-6.4 c0-7.9,6.4-14.3,14.3-14.3s14.3,6.4,14.3,14.3V-401.3\"\n id=\"Fill-66\" />\n <path class=\"st0\"\n d=\"M-239.2-374.1h-25.6c-2.6,0-4.8-2.2-4.8-4.8v-19.2c0-2.6,2.2-4.8,4.8-4.8h25.6 c2.6,0,4.8,2.2,4.8,4.8v19.2C-234.4-376.2-236.6-374.1-239.2-374.1L-239.2-374.1z M-264.8-399.7c-0.9,0-1.6,0.7-1.6,1.6v19.2 c0,0.9,0.7,1.6,1.6,1.6h25.6c0.9,0,1.6-0.7,1.6-1.6v-19.2c0-0.9-0.7-1.6-1.6-1.6H-264.8L-264.8-399.7z\"\n id=\"Fill-67\" />\n <path class=\"st0\"\n d=\"M-248.8-393.3c0,1.8-1.4,3.2-3.2,3.2s-3.2-1.4-3.2-3.2s1.4-3.2,3.2-3.2S-248.8-395-248.8-393.3 \"\n id=\"Fill-68\" />\n <polyline class=\"st0\" id=\"Fill-69\"\n points=\"-251.2,-393.3 -252.8,-393.3 -254.4,-383.7 -249.6,-383.7 -251.2,-393.3 \" />\n </g>\n </g>\n</svg>\n", styles: [".ax-scheduler__event{text-align:left;overflow:visible;cursor:pointer;position:relative}.ax-scheduler__event>.ax-scheduler__event__content{display:inline-block;vertical-align:middle;height:100%;position:relative;color:#444;font-size:13px;font-weight:400;margin:0 10px;padding:5px 8px;overflow:hidden}.ax-scheduler__event>p{vertical-align:top;display:inline-block;height:100%;width:50px;color:#fff;padding:0;margin:0;font-size:11px;position:absolute}.ax-scheduler__event>p>span{position:absolute;background:#333;color:#fff;padding:0 5px;left:-40px;border-radius:100px;z-index:200}.ax-scheduler__event>p>span:first-child{top:0}.ax-scheduler__event>p>span:last-child{bottom:0}\n"] }]
}], ctorParameters: () => [{ type: i0.Injector }, { type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { event: [{
type: Input
}], monthMode: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhpb20tc2NoZWR1bGVyLWV2ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3llYXItc2NoZWR1bGVyL3NyYy9saWIvYXhpb20tc2NoZWR1bGVyLWV2ZW50L2F4aW9tLXNjaGVkdWxlci1ldmVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy95ZWFyLXNjaGVkdWxlci9zcmMvbGliL2F4aW9tLXNjaGVkdWxlci1ldmVudC9heGlvbS1zY2hlZHVsZXItZXZlbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsaUJBQWlCLEVBQWtELE1BQU0sZUFBZSxDQUFDO0FBRTVILE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUxRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQzs7O0FBeUI5RyxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsNkJBQTZCO0lBY3JDO0lBQThCO0lBWjdELEtBQUssQ0FBdUI7SUFDNUIsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUVwQixHQUFHLENBQU07SUFDVCxRQUFRLENBQWlCO0lBQ3pCLE1BQU0sQ0FBaUI7SUFDdkIsSUFBSSxDQUFVO0lBQ2QsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBRWYsT0FBTyxDQUFNO0lBRXJCLFlBQVksUUFBa0IsRUFBVSxTQUFvQixFQUFVLFFBQW9CO1FBQ3hGLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQURzQixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBWTtJQUUxRixDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxJ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WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBSZW5kZXJlcjIsIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyB0cmlnZ2VyLCBzdHlsZSwgdHJhbnNpdGlvbiwgYW5pbWF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQXhpb21TY2hlZHVsZXJFdmVudCB9IGZyb20gJy4uL21vZGVsL2F4aW9tLXNjaGVkdWxlci1ldmVudC5tb2RlbCc7XG5pbXBvcnQgeyBBeGlvbVNjaGVkdWxlckNvbXBvbmVudENvbW1vbiB9IGZyb20gJy4uL2F4aW9tLXNjaGVkdWxlci9heGlvbS1zY2hlZHVsZXItY29tcG9uZW50LWNvbW1vbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ1theC1zY2hlZHVsZXItZXZlbnRdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXhpb20tc2NoZWR1bGVyLWV2ZW50LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9heGlvbS1zY2hlZHVsZXItZXZlbnQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ2NsYXNzJzogJ2F4LXNjaGVkdWxlcl9fZXZlbnQnLFxuICAgICAgICAnW2NsYXNzLmV4cGlyZWRdJzogJ2V4cGlyZWQnLFxuICAgICAgICAnKGNsaWNrKSc6ICdzZXJ2aWNlLmV2ZW50Q2xpY2tlZChldmVudCknXG4gICAgfSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ3RpbWVBbmltYXRlJywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICAgICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAnc2NhbGUoMCknIH0pLFxuICAgICAgICAgICAgICAgIGFuaW1hdGUoYCR7MTgwfW1zIGVhc2UtaW5gLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3NjYWxlKDEpJyB9KSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignOmxlYXZlJywgW1xuICAgICAgICAgICAgICAgIGFuaW1hdGUoYCR7ODB9bXMgZWFzZS1vdXRgLCBzdHlsZSh7IG9wYWNpdHk6ICcwJyB9KSlcbiAgICAgICAgICAgIF0pXG4gICAgICAgIF0pXG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBBeGlvbVNjaGVkdWxlckV2ZW50Q29tcG9uZW50IGV4dGVuZHMgQXhpb21TY2hlZHVsZXJDb21wb25lbnRDb21tb24gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuXG4gIEBJbnB1dCgpIGV2ZW50ITogQXhpb21TY2hlZHVsZXJFdmVudDtcbiAgQElucHV0KCkgbW9udGhNb2RlID0gZmFsc2U7XG5cbiAgcHVibGljIGN0eDogYW55O1xuICBwdWJsaWMgZnJvbVRpbWUhOiBtb21lbnQuTW9tZW50O1xuICBwdWJsaWMgdG9UaW1lITogbW9tZW50Lk1vbWVudDtcbiAgcHVibGljIGRpZmYhOiBudW1iZXI7XG4gIHB1YmxpYyBzaG93VGltZSA9IGZhbHNlO1xuICBwdWJsaWMgZXhwaXJlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgdGltZW91dDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3RvciwgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmN0eCA9IHsgaXRlbTogdGhpcy5ldmVudCB9O1xuICAgIC8vIHRoaXMuYXBwbHlDb2xvcigpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSByZWZyZXNoVmlldygpOiB2b2lkIHtcblxuICB9XG5cbiAgcHVibGljIGRlbGV0ZUVldmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlcnZpY2UuZXZlbnREZWxldGVDbGljay5uZXh0KHRoaXMuZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGVkaXRFZXZlbnQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXJ2aWNlLmV2ZW50RWRpdENsaWNrLm5leHQodGhpcy5ldmVudCk7XG4gIH1cblxuICBwdWJsaWMgbW91c2VEb3duKGV2OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXYgJiYgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICBldiAmJiBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb2xvcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ldmVudC5jb2xvcikge1xuICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCAnYmFja2dyb3VuZCcsIHRoaXMuZXZlbnQuY29sb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlU2hvd1RpbWUodG9nZ2xlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRvZ2dsZSkge1xuICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd1RpbWUgPSB0b2dnbGU7XG4gICAgICB9LCAyMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICAgIHRoaXMuc2hvd1RpbWUgPSB0b2dnbGU7XG4gICAgfVxuICB9XG5cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIhbW9udGhNb2RlICYmIGF4RXZlbnRUZW1wbGF0ZVwiPlxuICAgICAgICA8cCBbQHRpbWVBbmltYXRlXSAqbmdJZj1cInNob3dUaW1lXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZnJvbVRpbWUgJiYgZnJvbVRpbWUuZm9ybWF0KCdISDptbScpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHRvVGltZSAmJiB0b1RpbWUuZm9ybWF0KCdISDptbScpIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlcl9fZXZlbnRfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYXhFdmVudFRlbXBsYXRlO2NvbnRleHQ6Y3R4XCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0lmPVwibW9udGhNb2RlICYmIGF4RXZlbnRUZW1wbGF0ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyX19ldmVudF9fY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJheEV2ZW50VGVtcGxhdGU7Y29udGV4dDpjdHhcIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhYXhFdmVudFRlbXBsYXRlXCI+XG4gICAgICAgIDxwIFtAdGltZUFuaW1hdGVdICpuZ0lmPVwic2hvd1RpbWVcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBmcm9tVGltZSAmJiBmcm9tVGltZS5mb3JtYXQoJ0hIOm1tJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgdG9UaW1lICYmIHRvVGltZS5mb3JtYXQoJ0hIOm1tJykgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlcl9fZXZlbnRfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICB7eyBldmVudC50aXRsZSB9fVxuICAgICAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48c3ZnIGNsYXNzPVwiYXgtbG9jay1ldmVudFwiICpuZ0lmPVwiZXZlbnQubG9ja2VkXCIgc3R5bGU9XCJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDY0IDY0O1wiIHZlcnNpb249XCIxLjFcIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDY0IDY0XCIgeG1sOnNwYWNlPVwicHJlc2VydmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI+XG4gICAgICAgIDxnPlxuICAgICAgICAgICAgICAgIDxnIGlkPVwiSWNvbi1Mb2NrXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDI4NC4wMDAwMDAsIDQzMC4wMDAwMDApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cInN0MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNLTIzNy43LTQwMS4zaC0zdi02LjRjMC02LjItNS4xLTExLjMtMTEuMy0xMS4zYy02LjIsMC0xMS4zLDUuMS0xMS4zLDExLjN2Ni40aC0zdi02LjQgICAgIGMwLTcuOSw2LjQtMTQuMywxNC4zLTE0LjNzMTQuMyw2LjQsMTQuMywxNC4zVi00MDEuM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiRmlsbC02NlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cInN0MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNLTIzOS4yLTM3NC4xaC0yNS42Yy0yLjYsMC00LjgtMi4yLTQuOC00Ljh2LTE5LjJjMC0yLjYsMi4yLTQuOCw0LjgtNC44aDI1LjYgICAgIGMyLjYsMCw0LjgsMi4yLDQuOCw0Ljh2MTkuMkMtMjM0LjQtMzc2LjItMjM2LjYtMzc0LjEtMjM5LjItMzc0LjFMLTIzOS4yLTM3NC4xeiBNLTI2NC44LTM5OS43Yy0wLjksMC0xLjYsMC43LTEuNiwxLjZ2MTkuMiAgICAgYzAsMC45LDAuNywxLjYsMS42LDEuNmgyNS42YzAuOSwwLDEuNi0wLjcsMS42LTEuNnYtMTkuMmMwLTAuOS0wLjctMS42LTEuNi0xLjZILTI2NC44TC0yNjQuOC0zOTkuN3pcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIkZpbGwtNjdcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJzdDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTS0yNDguOC0zOTMuM2MwLDEuOC0xLjQsMy4yLTMuMiwzLjJzLTMuMi0xLjQtMy4yLTMuMnMxLjQtMy4yLDMuMi0zLjJTLTI0OC44LTM5NS0yNDguOC0zOTMuMyAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJGaWxsLTY4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwb2x5bGluZSBjbGFzcz1cInN0MFwiIGlkPVwiRmlsbC02OVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cz1cIi0yNTEuMiwtMzkzLjMgLTI1Mi44LC0zOTMuMyAtMjU0LjQsLTM4My43IC0yNDkuNiwtMzgzLjcgLTI1MS4yLC0zOTMuMyAgICBcIiAvPlxuICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgPC9nPlxuPC9zdmc+XG4iXX0=