UNPKG

truly-ui

Version:

Web Components for Desktop Applications.

112 lines (110 loc) 16.9 kB
/* MIT License Copyright (c) 2019 Temainfo Software Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import { Component, Input, Output, EventEmitter } from '@angular/core'; import { Subscription } from 'rxjs'; import * as i0 from "@angular/core"; import * as i1 from "./services/stopwatch-service"; import * as i2 from "@angular/common"; import * as i3 from "../icons/icons"; export class TlStopwatch { set initialTime(value) { if (typeof value === 'string') { if (value.length === 8) { this.stopWatchService.hour = parseInt(value.substr(0, 2), 10); this.stopWatchService.minute = parseInt(value.substr(3, 2), 10); this.stopWatchService.second = parseInt(value.substr(6, 2), 10); } else { const diff = Math.abs(new Date().getTime() - new Date(value).getTime()); const seconds = diff / 1000; this.stopWatchService.hour = Math.floor(seconds / (60 * 60)); this.stopWatchService.minute = Math.floor(((seconds % (60 * 60)) / 60)); this.stopWatchService.second = Math.ceil(((seconds % (60 * 60)) % 60)); } this.stopWatchService.start(); return; } if (value instanceof Date) { const diff = Math.abs(new Date().getTime() - new Date(value).getTime()); const seconds = diff / 1000; this.stopWatchService.hour = Math.floor(seconds / (60 * 60)); this.stopWatchService.minute = Math.floor(((seconds % (60 * 60)) / 60)); this.stopWatchService.second = Math.ceil(((seconds % (60 * 60)) % 60)); this.stopWatchService.start(); return; } this.stopWatchService.hour = 0; this.stopWatchService.minute = 0; this.stopWatchService.second = 0; } constructor(stopWatchService, change) { this.stopWatchService = stopWatchService; this.change = change; this.color = 'basic'; this.width = '240px'; this.height = '60px'; this.resetOnStop = false; this.returnTime = new EventEmitter(); this.currentHour = '00:00:00'; this.subscription = new Subscription(); } ngOnInit() { this.subscription.add(this.stopWatchService.refreshHour.subscribe((hour) => { this.currentHour = hour; this.change.detectChanges(); })); } start() { this.stopWatchService.start(); } stop() { this.stopWatchService.stop(); this.returnTime.emit({ time: this.stopWatchService.getHour() }); if (this.resetOnStop) { this.reset(); } } reset() { this.stopWatchService.reset(); } ngOnDestroy() { this.subscription.unsubscribe(); } } /** @nocollapse */ TlStopwatch.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlStopwatch, deps: [{ token: i1.StopwatchService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); /** @nocollapse */ TlStopwatch.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TlStopwatch, selector: "tl-stopwatch", inputs: { color: "color", width: "width", height: "height", resetOnStop: "resetOnStop", initialTime: "initialTime" }, outputs: { returnTime: "returnTime" }, ngImport: i0, template: "<div [class]=\"'tl-stopwatch ' + color\" [ngStyle]=\"{'width': width, 'height': height}\">\n <div class=\"icon\">\n <tl-icon [lib]=\"'fa'\" [style]=\"'far'\" [size]=\"'2em'\">clock</tl-icon>\n </div>\n <div class=\"time\">\n <p>{{ currentHour }}</p>\n </div>\n</div>\n", styles: [".tl-stopwatch{border-radius:3px;display:flex;box-sizing:border-box}.tl-stopwatch .icon{position:relative;width:25%}.tl-stopwatch .icon tl-icon{margin:0;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tl-stopwatch .time{position:relative;width:75%;font-size:2.4em}.tl-stopwatch .time p{margin:0;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}\n"], dependencies: [{ kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.TlIcons, selector: "tl-icon", inputs: ["icon", "lib", "style", "size", "animation", "color", "align"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlStopwatch, decorators: [{ type: Component, args: [{ selector: 'tl-stopwatch', template: "<div [class]=\"'tl-stopwatch ' + color\" [ngStyle]=\"{'width': width, 'height': height}\">\n <div class=\"icon\">\n <tl-icon [lib]=\"'fa'\" [style]=\"'far'\" [size]=\"'2em'\">clock</tl-icon>\n </div>\n <div class=\"time\">\n <p>{{ currentHour }}</p>\n </div>\n</div>\n", styles: [".tl-stopwatch{border-radius:3px;display:flex;box-sizing:border-box}.tl-stopwatch .icon{position:relative;width:25%}.tl-stopwatch .icon tl-icon{margin:0;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tl-stopwatch .time{position:relative;width:75%;font-size:2.4em}.tl-stopwatch .time p{margin:0;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}\n"] }] }], ctorParameters: function () { return [{ type: i1.StopwatchService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { color: [{ type: Input }], width: [{ type: Input }], height: [{ type: Input }], resetOnStop: [{ type: Input }], initialTime: [{ type: Input, args: ['initialTime'] }], returnTime: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcHdhdGNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1bHktdWkvc3JjL2NvbXBvbmVudHMvc3RvcHdhdGNoL3N0b3B3YXRjaC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RydWx5LXVpL3NyYy9jb21wb25lbnRzL3N0b3B3YXRjaC9zdG9wd2F0Y2guaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFvQkU7QUFFRixPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBT3BDLE1BQU0sT0FBTyxXQUFXO0lBVXRCLElBQ0ksV0FBVyxDQUFDLEtBQW9CO1FBQ2xDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzdCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFFLEtBQUssQ0FBQyxNQUFNLENBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBRSxFQUFFLEVBQUUsQ0FBRSxDQUFDO2dCQUNsRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBRSxLQUFLLENBQUMsTUFBTSxDQUFFLENBQUMsRUFBRSxDQUFDLENBQUUsRUFBRSxFQUFFLENBQUUsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBRSxDQUFDLEVBQUUsQ0FBQyxDQUFFLEVBQUUsRUFBRSxDQUFFLENBQUM7YUFDckU7aUJBQU07Z0JBQ0wsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLE9B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RUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEVBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUFFO0lBQ3pDLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDOzs0SEExRVUsV0FBVztnSEFBWCxXQUFXLGlOQ3JDeEIsd1JBUUE7NEZENkJhLFdBQVc7a0JBTHZCLFNBQVM7K0JBQ0UsY0FBYzt1SUFNZixLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUdGLFdBQVc7c0JBRGQsS0FBSzt1QkFBQyxhQUFhO2dCQWlDVixVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgICBNSVQgTGljZW5zZVxuXG4gICAgQ29weXJpZ2h0IChjKSAyMDE5IFRlbWFpbmZvIFNvZnR3YXJlXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gICAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICAgIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAgICB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gICAgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gICAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAgICBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAgICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAgICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gICAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICAgIFNPRlRXQVJFLlxuKi9cblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uRGVzdHJveVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3B3YXRjaFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3N0b3B3YXRjaC1zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0bC1zdG9wd2F0Y2gnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RvcHdhdGNoLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdG9wd2F0Y2guc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBUbFN0b3B3YXRjaCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSBjb2xvciA9ICdiYXNpYyc7XG5cbiAgQElucHV0KCkgd2lkdGggPSAnMjQwcHgnO1xuXG4gIEBJbnB1dCgpIGhlaWdodCA9ICc2MHB4JztcblxuICBASW5wdXQoKSByZXNldE9uU3RvcCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgnaW5pdGlhbFRpbWUnKVxuICBzZXQgaW5pdGlhbFRpbWUodmFsdWU6IHN0cmluZyB8IERhdGUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gOCkge1xuICAgICAgICB0aGlzLnN0b3BXYXRjaFNlcnZpY2UuaG91ciA9IHBhcnNlSW50KCB2YWx1ZS5zdWJzdHIoIDAsIDIgKSwgMTAgKTtcbiAgICAgICAgdGhpcy5zdG9wV2F0Y2hTZXJ2aWNlLm1pbnV0ZSA9IHBhcnNlSW50KCB2YWx1ZS5zdWJzdHIoIDMsIDIgKSwgMTAgKTtcbiAgICAgICAgdGhpcy5zdG9wV2F0Y2hTZXJ2aWNlLnNlY29uZCA9IHBhcnNlSW50KCB2YWx1ZS5zdWJzdHIoIDYsIDIgKSwgMTAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIG5ldyBEYXRlKHZhbHVlKS5nZXRUaW1lKCkpO1xuICAgICAgICBjb25zdCBzZWNvbmRzID0gZGlmZiAvIDEwMDA7XG4gICAgICAgIHRoaXMuc3RvcFdhdGNoU2VydmljZS5ob3VyID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gKDYwICogNjApKTtcbiAgICAgICAgdGhpcy5zdG9wV2F0Y2hTZXJ2aWNlLm1pbnV0ZSA9IE1hdGguZmxvb3IoICgoc2Vjb25kcyAlICg2MCAqIDYwKSkgLyA2MCkpO1xuICAgICAgICB0aGlzLnN0b3BXYXRjaFNlcnZpY2Uuc2Vjb25kID0gIE1hdGguY2VpbCggKChzZWNvbmRzICUgKDYwICogNjApKSAlIDYwKSk7XG4gICAgICB9XG4gICAgICB0aGlzLnN0b3BXYXRjaFNlcnZpY2Uuc3RhcnQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBjb25zdCBkaWZmID0gTWF0aC5hYnMobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZSh2YWx1ZSkuZ2V0VGltZSgpKTtcbiAgICAgIGNvbnN0IHNlY29uZHMgPSBkaWZmIC8gMTAwMDtcbiAgICAgIHRoaXMuc3RvcFdhdGNoU2VydmljZS5ob3VyID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gKDYwICogNjApKTtcbiAgICAgIHRoaXMuc3RvcFdhdGNoU2VydmljZS5taW51dGUgPSBNYXRoLmZsb29yKCAoKHNlY29uZHMgJSAoNjAgKiA2MCkpIC8gNjApKTtcbiAgICAgIHRoaXMuc3RvcFdhdGNoU2VydmljZS5zZWNvbmQgPSAgTWF0aC5jZWlsKCAoKHNlY29uZHMgJSAoNjAgKiA2MCkpICUgNjApKTtcbiAgICAgIHRoaXMuc3RvcFdhdGNoU2VydmljZS5zdGFydCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RvcFdhdGNoU2VydmljZS5ob3VyID0gMDtcbiAgICB0aGlzLnN0b3BXYXRjaFNlcnZpY2UubWludXRlID0gMDtcbiAgICB0aGlzLnN0b3BXYXRjaFNlcnZpY2Uuc2Vjb25kID0gMDtcbiAgfVxuXG4gIEBPdXRwdXQoKSByZXR1cm5UaW1lID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyBjdXJyZW50SG91ciA9ICcwMDowMDowMCc7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoIHByaXZhdGUgc3RvcFdhdGNoU2VydmljZTogU3RvcHdhdGNoU2VydmljZSwgcHJpdmF0ZSBjaGFuZ2U6IENoYW5nZURldGVjdG9yUmVmICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5zdG9wV2F0Y2hTZXJ2aWNlLnJlZnJlc2hIb3VyLnN1YnNjcmliZSgoaG91cjogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRIb3VyID0gaG91cjtcbiAgICAgIHRoaXMuY2hhbmdlLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KSk7XG4gIH1cblxuICBzdGFydCgpIHtcbiAgICB0aGlzLnN0b3BXYXRjaFNlcnZpY2Uuc3RhcnQoKTtcbiAgfVxuXG4gIHN0b3AoKSB7XG4gICAgdGhpcy5zdG9wV2F0Y2hTZXJ2aWNlLnN0b3AoKTtcbiAgICB0aGlzLnJldHVyblRpbWUuZW1pdCh7dGltZTogdGhpcy5zdG9wV2F0Y2hTZXJ2aWNlLmdldEhvdXIoKX0pO1xuICAgIGlmICh0aGlzLnJlc2V0T25TdG9wKSB7IHRoaXMucmVzZXQoKTsgfVxuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5zdG9wV2F0Y2hTZXJ2aWNlLnJlc2V0KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbn1cbiIsIjxkaXYgW2NsYXNzXT1cIid0bC1zdG9wd2F0Y2ggJyArIGNvbG9yXCIgW25nU3R5bGVdPVwieyd3aWR0aCc6IHdpZHRoLCAnaGVpZ2h0JzogaGVpZ2h0fVwiPlxuICA8ZGl2IGNsYXNzPVwiaWNvblwiPlxuICAgIDx0bC1pY29uIFtsaWJdPVwiJ2ZhJ1wiIFtzdHlsZV09XCInZmFyJ1wiIFtzaXplXT1cIicyZW0nXCI+Y2xvY2s8L3RsLWljb24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwidGltZVwiPlxuICAgIDxwPnt7IGN1cnJlbnRIb3VyIH19PC9wPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19