ngx-analog-wrist-watch
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.14.
563 lines • 66.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/analogwristwatch.directive.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, ElementRef, Renderer2, Output, EventEmitter } from '@angular/core';
import { NgxAnalogWristWatchService } from './ngx-analog-wrist-watch.service';
export class AnalogwristwatchDirective {
/**
* @param {?} el
* @param {?} renderer
* @param {?} clockService
*/
constructor(el, renderer, clockService) {
this.el = el;
this.renderer = renderer;
this.clockService = clockService;
this.timeVal = new EventEmitter();
this.elementInfo = {
input: null,
clockBox: null,
spanToggle: null,
watchIcon: null,
label: null,
labelText: null,
hourHand: null,
minuteHand: null,
secondHand: null,
clockCrown: null,
clockSpindle: null,
clockNum: null,
};
}
/**
* @return {?}
*/
ngOnInit() {
this.createInitElement();
this.stylesInInit();
this.checkIfInputContainValue(this.elementInfo, this.inlineStyleInfo);
this.watchRunner();
}
/**
* @return {?}
*/
createInitElement() {
/** @type {?} */
const label = this.renderer.createElement('label');
/** @type {?} */
const text = this.renderer.createText('Time');
/** @type {?} */
const input = this.renderer.createElement('input');
/** @type {?} */
const clockBox = this.renderer.createElement('div');
/** @type {?} */
const span = this.renderer.createElement('span');
/** @type {?} */
const unicodeClock = `\u{0231A}`;
/** @type {?} */
const icon = this.renderer.createText(unicodeClock);
this.elementInfo.input = input;
this.elementInfo.clockBox = clockBox;
this.elementInfo.spanToggle = span;
this.elementInfo.watchIcon = icon;
this.elementInfo.label = label;
this.elementInfo.labelText = text;
}
/**
* @return {?}
*/
stylesInInit() {
this.internalStyle = this.clockService.fetchInternalStyle();
this.inlineStyleInfo = this.clockService.fetchInLineStyle();
this.appendTagInInit(this.elementInfo);
this.applyStyleInInit(this.elementInfo);
this.applyStyleInFocus(this.elementInfo, this.inlineStyleInfo);
this.applyStyleInBlur(this.elementInfo, this.inlineStyleInfo);
this.applyBoxStyle(this.elementInfo);
}
/**
* @return {?}
*/
watchRunner() {
this.addClockElement(this.elementInfo.clockBox);
this.runClock = setInterval((/**
* @return {?}
*/
() => {
/** @type {?} */
const timeInfo = this.startClock();
this.timeInfo = timeInfo;
}), 1000);
this.onWatchBtnClick();
this.onChangeHourTimeClick();
}
/**
* @param {?} initElement
* @return {?}
*/
appendTagInInit(initElement) {
/** @type {?} */
const container = this.el.nativeElement;
this.renderer.setAttribute(initElement.input, 'type', 'text');
this.renderer.appendChild(initElement.label, initElement.labelText);
this.renderer.appendChild(initElement.spanToggle, initElement.watchIcon);
this.renderer.appendChild(container, initElement.label);
this.renderer.appendChild(container, initElement.input);
this.renderer.appendChild(container, initElement.spanToggle);
this.renderer.appendChild(container, initElement.clockBox);
}
/**
* @param {?} initElement
* @return {?}
*/
applyStyleInInit(initElement) {
this.applyStyleInDivDirective(initElement);
this.applyStyleInInputAndLabelTag(initElement);
this.applyStyleInInputAndLabelTag(initElement);
this.applyStyleInWatchIcon(initElement);
this.applyStyleInClockBox(initElement);
}
/**
* @param {?} initElement
* @return {?}
*/
applyStyleInDivDirective(initElement) {
this.el.nativeElement.style.display = this.inlineStyleInfo.display,
this.el.nativeElement.style.marginBottom = this.inlineStyleInfo.marginbottom,
this.el.nativeElement.style.marginTop = this.inlineStyleInfo.margintop,
this.el.nativeElement.style.padding = this.inlineStyleInfo.padding,
this.el.nativeElement.style.position = this.inlineStyleInfo.relative,
this.el.nativeElement.style.float = this.inlineStyleInfo.float,
initElement.input.style.border = this.inlineStyleInfo.border;
}
/**
* @param {?} initElement
* @return {?}
*/
applyStyleInInputAndLabelTag(initElement) {
initElement.input.style.borderBottom = this.inlineStyleInfo.borderBottom;
initElement.input.style.outline = this.inlineStyleInfo.outline;
initElement.input.style.width = this.inlineStyleInfo.width;
initElement.input.style.fontSize = this.inlineStyleInfo.fontSize;
initElement.label.style.position = this.inlineStyleInfo.absolute;
initElement.label.style.color = this.inlineStyleInfo.color;
}
/**
* @param {?} initElement
* @return {?}
*/
applyStyleInWatchIcon(initElement) {
initElement.spanToggle.style.position = this.inlineStyleInfo.absolute;
initElement.spanToggle.style.marginLeft = this.inlineStyleInfo.marginLeft;
initElement.spanToggle.style.cursor = this.inlineStyleInfo.cursor;
initElement.spanToggle.style.top = this.inlineStyleInfo.iconTop;
initElement.spanToggle.style.fontSize = this.inlineStyleInfo.iconFontSize;
}
/**
* @param {?} initElement
* @return {?}
*/
applyStyleInClockBox(initElement) {
initElement.clockBox.style.boxShadow = this.inlineStyleInfo.boxShadow;
initElement.clockBox.style.width = this.inlineStyleInfo.boxWidth;
initElement.clockBox.style.height = this.inlineStyleInfo.boxHeight;
initElement.clockBox.style.justifyContent = this.inlineStyleInfo.justifyContent;
initElement.clockBox.style.alignItems = this.inlineStyleInfo.alignItems;
initElement.clockBox.style.display = this.inlineStyleInfo.boxDisplayNone;
}
/**
* @param {?} initElement
* @param {?} style
* @return {?}
*/
applyStyleInFocus(initElement, style) {
initElement.input.addEventListener('focus', (/**
* @return {?}
*/
() => {
this.floatLabelToTop(initElement, style);
}));
}
/**
* @param {?} initElement
* @param {?} style
* @return {?}
*/
applyStyleInBlur(initElement, style) {
initElement.input.addEventListener('blur', (/**
* @return {?}
*/
() => {
this.checkIfInputContainValue(initElement, style);
}));
}
/**
* @param {?} initElement
* @param {?} style
* @return {?}
*/
checkIfInputContainValue(initElement, style) {
initElement.input.value ? this.floatLabelToTop(initElement, style) : this.floatLabelToBottom(initElement, style);
}
/**
* @param {?} elementInfo
* @param {?} style
* @return {?}
*/
floatLabelToTop(elementInfo, style) {
elementInfo.label.style.top = style.top;
elementInfo.label.style.fontSize = style.labelFontSize;
elementInfo.input.style.borderBottom = style.inputBorderBottom;
elementInfo.label.style.transition = style.transistionTop;
}
/**
* @param {?} elementInfo
* @param {?} style
* @return {?}
*/
floatLabelToBottom(elementInfo, style) {
elementInfo.label.style.top = style.inherit;
elementInfo.input.style.borderBottom = style.borderBottom;
elementInfo.label.style.fontSize = style.inherit;
}
/**
* @param {?} initElement
* @return {?}
*/
applyBoxStyle(initElement) {
this.renderer.listen(initElement.spanToggle, 'click', (/**
* @return {?}
*/
() => {
initElement.clockBox.classList.toggle('toggle-time');
}));
}
/**
* @param {?} clockBox
* @return {?}
*/
addClockElement(clockBox) {
/** @type {?} */
const primaryCircle = this.renderer.createElement('div');
/** @type {?} */
const secondaryCircle = this.renderer.createElement('div');
/** @type {?} */
const thirdCircle = this.renderer.createElement('div');
/** @type {?} */
const clockCrown = this.renderer.createElement('div');
/** @type {?} */
const clockSpindle = this.renderer.createElement('div');
this.renderer.addClass(clockCrown, 'clock-crown');
this.renderer.addClass(clockSpindle, 'spindle');
this.renderer.appendChild(clockBox, primaryCircle);
this.renderer.appendChild(clockBox, secondaryCircle);
this.renderer.appendChild(secondaryCircle, thirdCircle);
this.renderer.appendChild(thirdCircle, clockCrown);
this.renderer.appendChild(thirdCircle, clockSpindle);
this.elementInfo.clockCrown = clockCrown;
this.elementInfo.clockSpindle = clockSpindle;
this.applyStyleInClockCircle(primaryCircle, secondaryCircle, thirdCircle);
this.clockService.addClockNumbers(thirdCircle, this.applyStyleInClockNum, this.renderer);
this.drawClockFace(clockBox);
this.addClockHands(thirdCircle);
}
/**
* @param {?} primaryCircle
* @param {?} secondaryCircle
* @param {?} thirdCircle
* @return {?}
*/
applyStyleInClockCircle(primaryCircle, secondaryCircle, thirdCircle) {
primaryCircle.style.width = this.inlineStyleInfo.primaryWidth;
primaryCircle.style.height = this.inlineStyleInfo.primaryHeight;
primaryCircle.style.borderRadius = this.inlineStyleInfo.primaryBorderRadius;
primaryCircle.style.border = this.inlineStyleInfo.primaryBorder;
primaryCircle.style.position = this.inlineStyleInfo.relative;
primaryCircle.style.zIndex = '1';
secondaryCircle.style.width = this.inlineStyleInfo.secondaryWidth;
secondaryCircle.style.height = this.inlineStyleInfo.secondaryHeight;
secondaryCircle.style.borderRadius = this.inlineStyleInfo.secondaryBorderRadius;
secondaryCircle.style.border = this.inlineStyleInfo.secondaryBorder;
secondaryCircle.style.position = this.inlineStyleInfo.absolute;
secondaryCircle.style.zIndex = '1';
thirdCircle.style.width = this.inlineStyleInfo.thirdWidth;
thirdCircle.style.height = this.inlineStyleInfo.thirdHeight;
thirdCircle.style.borderRadius = this.inlineStyleInfo.thirdBorderRadius;
thirdCircle.style.border = this.inlineStyleInfo.thirdBorder;
thirdCircle.style.position = this.inlineStyleInfo.absolute;
thirdCircle.style.top = this.inlineStyleInfo.thirdTop;
}
/**
* @param {?} clockNum
* @param {?} num
* @param {?} style
* @return {?}
*/
applyStyleInClockNum(clockNum, num, style) {
clockNum.style.position = style.absolute;
clockNum.style.left = style.clockNum[num].left;
clockNum.style.top = style.clockNum[num].top;
}
/**
* @param {?} clockBox
* @return {?}
*/
drawClockFace(clockBox) {
/** @type {?} */
const wrapper = this.renderer.createElement('div');
this.renderer.appendChild(clockBox, wrapper);
/** @type {?} */
const dugHole = this.clockService.createDugHoles(wrapper, this.renderer);
/** @type {?} */
const strap = this.clockService.createWatchStraps(wrapper, this.renderer);
this.applyStyleInDugHoles(dugHole);
this.applyStyleInWatchStraps(strap);
}
/**
* @param {?} dugHole
* @return {?}
*/
applyStyleInDugHoles(dugHole) {
dugHole.topLeftDugHole.style.position = this.inlineStyleInfo.absolute;
dugHole.topLeftDugHole.style.width = this.inlineStyleInfo.wrapWidth;
dugHole.topLeftDugHole.style.borderBottom = this.inlineStyleInfo.wrapBorderBottom;
dugHole.topLeftDugHole.style.borderLeft = this.inlineStyleInfo.wrapBorderLeft;
dugHole.topLeftDugHole.style.top = this.inlineStyleInfo.wrapTop;
dugHole.topLeftDugHole.style.left = this.inlineStyleInfo.wrapLeft;
dugHole.topLeftDugHole.style.borderBottomRightRadius = this.inlineStyleInfo.rightBorderRightRadius;
this.renderer.addClass(dugHole.topLeftDugHole, 'top-left-dughole');
this.renderer.addClass(dugHole.topRightDugHole, 'top-right-dughole');
this.renderer.addClass(dugHole.bottomLeftDugHole, 'bottom-left-dughole');
this.renderer.addClass(dugHole.bottomRightDugHole, 'bottom-right-dughole');
dugHole.topRightDugHole.style.position = this.inlineStyleInfo.absolute;
dugHole.topRightDugHole.style.width = this.inlineStyleInfo.rightWrapWidth;
dugHole.topRightDugHole.style.borderBottom = this.inlineStyleInfo.rightWrapBorderBottom;
dugHole.topRightDugHole.style.borderRight = this.inlineStyleInfo.rightWrapBorderright;
dugHole.topRightDugHole.style.top = this.inlineStyleInfo.rightWrapTop;
dugHole.topRightDugHole.style.left = this.inlineStyleInfo.rightWrapLeft;
dugHole.topRightDugHole.style.margin = this.inlineStyleInfo.rightWrapMargin;
dugHole.topRightDugHole.style.borderBottomLeftRadius = this.inlineStyleInfo.rightBorderLeftRadius;
/** @type {?} */
const styleTag = this.renderer.createElement('style');
/** @type {?} */
const cssText = this.renderer.createText(this.internalStyle);
this.renderer.appendChild(styleTag, cssText);
this.renderer.appendChild(document.head, styleTag);
}
/**
* @param {?} strap
* @return {?}
*/
applyStyleInWatchStraps(strap) {
/** @type {?} */
const pos = 0;
for (let index = 0; pos < strap['className' + index].length; index++) {
/** @type {?} */
const size = strap['className' + index].length;
if (size === 2) {
this.renderer.addClass(strap['elementName' + index], strap['className' + index][index - index]);
this.renderer.addClass(strap['elementName' + index], strap['className' + index][index - (index - 1)]);
continue;
}
else {
this.renderer.addClass(strap['elementName' + index], strap['className' + index][index - index]);
if (index === 17) {
break;
}
}
}
}
/**
* @param {?} thirdCircle
* @return {?}
*/
addClockHands(thirdCircle) {
/** @type {?} */
const axisCircle = this.renderer.createElement('span');
/** @type {?} */
const dotPuncture = this.renderer.createElement('i');
this.renderer.addClass(axisCircle, 'axis-circle');
this.renderer.addClass(dotPuncture, 'dot-puncture');
this.renderer.appendChild(axisCircle, dotPuncture);
/** @type {?} */
const hourHand = this.renderer.createElement('div');
this.renderer.addClass(hourHand, 'hour-hand');
this.renderer.addClass(hourHand, 'hour');
/** @type {?} */
const hourHandRound = this.renderer.createElement('span');
/** @type {?} */
const hourHandArrow = this.renderer.createElement('span');
this.renderer.addClass(hourHandRound, 'hour-hand-round');
this.renderer.addClass(hourHandArrow, 'hour-hand-arrow');
this.renderer.appendChild(hourHand, hourHandRound);
this.renderer.appendChild(hourHand, hourHandArrow);
/** @type {?} */
const secondHand = this.renderer.createElement('div');
this.renderer.addClass(secondHand, 'second-hand');
this.renderer.addClass(secondHand, 'hand');
/** @type {?} */
const minuteHand = this.renderer.createElement('div');
this.renderer.addClass(minuteHand, 'minute-hand');
this.renderer.addClass(minuteHand, 'hour');
this.renderer.appendChild(thirdCircle, axisCircle);
this.renderer.appendChild(thirdCircle, hourHand);
this.renderer.appendChild(thirdCircle, secondHand);
this.renderer.appendChild(thirdCircle, minuteHand);
this.elementInfo.hourHand = hourHand;
this.elementInfo.secondHand = secondHand;
this.elementInfo.minuteHand = minuteHand;
}
/**
* @return {?}
*/
startClock() {
/** @type {?} */
const date = new Date();
/** @type {?} */
const seconds = date.getSeconds();
/** @type {?} */
const secondDegrees = ((seconds / 60) * 360) + 90;
this.elementInfo.secondHand.style.transform = `rotate(${secondDegrees}deg)`;
/** @type {?} */
const minutes = date.getMinutes();
/** @type {?} */
const minuteDegrees = ((minutes / 60) * 360) + 360;
this.elementInfo.minuteHand.style.transform = `rotate(${minuteDegrees}deg)`;
/** @type {?} */
const hours = date.getHours();
/** @type {?} */
const hourDegrees = hours * 360 / 12 + ((minutes * 360 / 60) / 12);
this.elementInfo.hourHand.style.transform = `rotate(${hourDegrees}deg)`;
return {
hour: hours,
minute: minutes,
hourDegree: hourDegrees,
minuteDegree: minuteDegrees,
};
}
/**
* @return {?}
*/
onWatchBtnClick() {
this.renderer.listen(this.elementInfo.clockCrown, 'click', (/**
* @return {?}
*/
() => {
/** @type {?} */
const merdian = this.timeInfo.hour <= 12 || this.timeInfo.hour === 24 ? 'am' : ' pm ';
this.renderer.setProperty(this.elementInfo.input, 'value', `${this.timeInfo.hour}:${this.timeInfo.minute}${merdian}`);
this.checkIfInputContainValue(this.elementInfo, this.inlineStyleInfo);
this.renderer.removeClass(this.elementInfo.clockBox, 'toggle-time');
this.clockValue = this.elementInfo.input.value;
this.getClockValue();
}));
}
/**
* @return {?}
*/
onChangeHourTimeClick() {
/** @type {?} */
let nextMove = 0;
this.renderer.listen(this.elementInfo.hourHand, 'click', (/**
* @return {?}
*/
() => {
/** @type {?} */
const date = new Date();
clearInterval(this.runClock);
nextMove++;
date.setHours(this.timeInfo.hour, this.timeInfo.minute + nextMove);
/** @type {?} */
const minutes = date.getMinutes();
/** @type {?} */
const minuteDegrees = ((minutes / 60) * 360) + 360;
this.elementInfo.minuteHand.style.transform = `rotate(${minuteDegrees}deg)`;
/** @type {?} */
const hourDegrees = date.getHours() * 360 / 12 + ((date.getMinutes() * 360 / 60) / 12);
this.elementInfo.hourHand.style.transform = `rotate(${hourDegrees}deg)`;
/** @type {?} */
const merdian = date.getHours() <= 12 || date.getHours() === 24 ? 'am' : ' pm ';
this.renderer.setProperty(this.elementInfo.input, 'value', `${date.getHours()}:${minutes}${merdian}`);
this.checkIfInputContainValue(this.elementInfo, this.inlineStyleInfo);
/** @type {?} */
const changeTimeInfo = {
hour: date.getHours(),
minute: date.getMinutes(),
hourDegree: hourDegrees,
minuteDegree: minuteDegrees,
};
this.timeInfo = changeTimeInfo;
this.refreshClock();
}));
}
/**
* @return {?}
*/
refreshClock() {
setTimeout((/**
* @return {?}
*/
() => {
setInterval((/**
* @return {?}
*/
() => {
this.timeInfo = this.startClock();
}), 1000);
}), 40000);
}
/**
* @return {?}
*/
getClockValue() {
this.timeVal.emit(this.clockValue);
}
}
AnalogwristwatchDirective.decorators = [
{ type: Directive, args: [{
selector: '[ngxWristAnalogwristwatch]'
},] }
];
/** @nocollapse */
AnalogwristwatchDirective.ctorParameters = () => [
{ type: ElementRef },
{ type: Renderer2 },
{ type: NgxAnalogWristWatchService }
];
AnalogwristwatchDirective.propDecorators = {
timeVal: [{ type: Output }]
};
if (false) {
/** @type {?} */
AnalogwristwatchDirective.prototype.timeVal;
/** @type {?} */
AnalogwristwatchDirective.prototype.internalStyle;
/** @type {?} */
AnalogwristwatchDirective.prototype.inlineStyleInfo;
/** @type {?} */
AnalogwristwatchDirective.prototype.elementInfo;
/** @type {?} */
AnalogwristwatchDirective.prototype.timeInfo;
/** @type {?} */
AnalogwristwatchDirective.prototype.runClock;
/** @type {?} */
AnalogwristwatchDirective.prototype.clockValue;
/**
* @type {?}
* @private
*/
AnalogwristwatchDirective.prototype.el;
/**
* @type {?}
* @private
*/
AnalogwristwatchDirective.prototype.renderer;
/**
* @type {?}
* @private
*/
AnalogwristwatchDirective.prototype.clockService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbG9nd3Jpc3R3YXRjaC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYW5hbG9nLXdyaXN0LXdhdGNoLyIsInNvdXJjZXMiOlsibGliL2FuYWxvZ3dyaXN0d2F0Y2guZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFJOUUsTUFBTSxPQUFPLHlCQUF5Qjs7Ozs7O0lBcUJwQyxZQUFvQixFQUFjLEVBQVUsUUFBbUIsRUFBVSxZQUF3QztRQUE3RixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUE0QjtRQXBCdkcsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFHL0MsZ0JBQVcsR0FBUTtZQUNqQixLQUFLLEVBQUUsSUFBSTtZQUNYLFFBQVEsRUFBRSxJQUFJO1lBQ2QsVUFBVSxFQUFFLElBQUk7WUFDaEIsU0FBUyxFQUFFLElBQUk7WUFDZixLQUFLLEVBQUUsSUFBSTtZQUNYLFNBQVMsRUFBRSxJQUFJO1lBQ2YsUUFBUSxFQUFFLElBQUk7WUFDZCxVQUFVLEVBQUUsSUFBSTtZQUNoQixVQUFVLEVBQUUsSUFBSTtZQUNoQixVQUFVLEVBQUUsSUFBSTtZQUNoQixZQUFZLEVBQUUsSUFBSTtZQUNsQixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7SUFLRCxDQUFDOzs7O0lBR0QsUUFBUTtRQUNQLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsZUFB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QixZQUFZLEVBQUUsYUFBYTthQUM1QjtZQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO1lBQy9CLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7Ozs7SUFFRCxZQUFZO1FBQ1YsVUFBVTs7O1FBQUUsR0FBRyxFQUFFO1lBQ2YsV0FBVzs7O1lBQUMsR0FBRyxFQUFFO2dCQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BDLENBQUMsR0FBRSxJQUFJLENBQUMsQ0FBQztRQUNYLENBQUMsR0FBRSxLQUFLLENBQUMsQ0FBQztJQUNYLENBQUM7Ozs7SUFFRixhQUFhO1FBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7OztZQXhYRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDRCQUE0QjthQUN2Qzs7OztZQUptQixVQUFVO1lBQUUsU0FBUztZQUNoQywwQkFBMEI7OztzQkFLaEMsTUFBTTs7OztJQUFQLDRDQUErQzs7SUFDL0Msa0RBQWM7O0lBQ2Qsb0RBQWdCOztJQUNoQixnREFhRTs7SUFDRiw2Q0FBUzs7SUFDVCw2Q0FBUzs7SUFDVCwrQ0FBVzs7Ozs7SUFDQyx1Q0FBc0I7Ozs7O0lBQUUsNkNBQTJCOzs7OztJQUFFLGlEQUFnRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgUmVuZGVyZXIyLCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neEFuYWxvZ1dyaXN0V2F0Y2hTZXJ2aWNlIH0gZnJvbSAnLi9uZ3gtYW5hbG9nLXdyaXN0LXdhdGNoLnNlcnZpY2UnO1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25neFdyaXN0QW5hbG9nd3Jpc3R3YXRjaF0nXG59KVxuZXhwb3J0IGNsYXNzIEFuYWxvZ3dyaXN0d2F0Y2hEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBAT3V0cHV0KCkgdGltZVZhbCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBpbnRlcm5hbFN0eWxlO1xuICBpbmxpbmVTdHlsZUluZm87XG4gIGVsZW1lbnRJbmZvOiBhbnkgPSB7XG4gICAgaW5wdXQ6IG51bGwsXG4gICAgY2xvY2tCb3g6IG51bGwsXG4gICAgc3BhblRvZ2dsZTogbnVsbCxcbiAgICB3YXRjaEljb246IG51bGwsXG4gICAgbGFiZWw6IG51bGwsXG4gICAgbGFiZWxUZXh0OiBudWxsLFxuICAgIGhvdXJIYW5kOiBudWxsLFxuICAgIG1pbnV0ZUhhbmQ6IG51bGwsXG4gICAgc2Vjb25kSGFuZDogbnVsbCxcbiAgICBjbG9ja0Nyb3duOiBudWxsLFxuICAgIGNsb2NrU3BpbmRsZTogbnVsbCxcbiAgICBjbG9ja051bTogbnVsbCxcbiAgfTtcbiAgdGltZUluZm87XG4gIHJ1bkNsb2NrO1xuICBjbG9ja1ZhbHVlO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgY2xvY2tTZXJ2aWNlOiBOZ3hBbmFsb2dXcmlzdFdhdGNoU2VydmljZSkge1xuICAgfVxuXG5cbiAgIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY3JlYXRlSW5pdEVsZW1lbnQoKTtcbiAgICB0aGlzLnN0eWxlc0luSW5pdCgpO1xuICAgIHRoaXMuY2hlY2tJZklucHV0Q29udGFpblZhbHVlKHRoaXMuZWxlbWVudEluZm8sIHRoaXMuaW5saW5lU3R5bGVJbmZvKTtcbiAgICB0aGlzLndhdGNoUnVubmVyKCk7XG4gIH1cblxuXG4gIGNyZWF0ZUluaXRFbGVtZW50KCkge1xuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdsYWJlbCcpO1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRleHQoJ1RpbWUnKTtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICBjb25zdCBjbG9ja0JveCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3Qgc3BhbiA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIGNvbnN0IHVuaWNvZGVDbG9jayA9IGBcXHV7MDIzMUF9YDtcbiAgICBjb25zdCBpY29uID0gdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KHVuaWNvZGVDbG9jayk7XG4gICAgdGhpcy5lbGVtZW50SW5mby5pbnB1dCA9IGlucHV0O1xuICAgIHRoaXMuZWxlbWVudEluZm8uY2xvY2tCb3ggPSBjbG9ja0JveDtcbiAgICB0aGlzLmVsZW1lbnRJbmZvLnNwYW5Ub2dnbGUgPSBzcGFuO1xuICAgIHRoaXMuZWxlbWVudEluZm8ud2F0Y2hJY29uID0gaWNvbjtcbiAgICB0aGlzLmVsZW1lbnRJbmZvLmxhYmVsID0gbGFiZWw7XG4gICAgdGhpcy5lbGVtZW50SW5mby5sYWJlbFRleHQgPSB0ZXh0O1xuICB9XG5cbiAgc3R5bGVzSW5Jbml0KCkge1xuICAgIHRoaXMuaW50ZXJuYWxTdHlsZSA9IHRoaXMuY2xvY2tTZXJ2aWNlLmZldGNoSW50ZXJuYWxTdHlsZSgpO1xuICAgIHRoaXMuaW5saW5lU3R5bGVJbmZvID0gdGhpcy5jbG9ja1NlcnZpY2UuZmV0Y2hJbkxpbmVTdHlsZSgpO1xuICAgIHRoaXMuYXBwZW5kVGFnSW5Jbml0KHRoaXMuZWxlbWVudEluZm8pO1xuICAgIHRoaXMuYXBwbHlTdHlsZUluSW5pdCh0aGlzLmVsZW1lbnRJbmZvKTtcbiAgICB0aGlzLmFwcGx5U3R5bGVJbkZvY3VzKHRoaXMuZWxlbWVudEluZm8sIHRoaXMuaW5saW5lU3R5bGVJbmZvKTtcbiAgICB0aGlzLmFwcGx5U3R5bGVJbkJsdXIodGhpcy5lbGVtZW50SW5mbywgdGhpcy5pbmxpbmVTdHlsZUluZm8pO1xuICAgIHRoaXMuYXBwbHlCb3hTdHlsZSh0aGlzLmVsZW1lbnRJbmZvKTtcbiAgfVxuXG4gIHdhdGNoUnVubmVyKCkge1xuICAgIHRoaXMuYWRkQ2xvY2tFbGVtZW50KHRoaXMuZWxlbWVudEluZm8uY2xvY2tCb3gpO1xuICAgIHRoaXMucnVuQ2xvY2sgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCB0aW1lSW5mbyA9IHRoaXMuc3RhcnRDbG9jaygpO1xuICAgICAgdGhpcy50aW1lSW5mbyA9IHRpbWVJbmZvO1xuICAgIH0sIDEwMDApO1xuICAgIHRoaXMub25XYXRjaEJ0bkNsaWNrKCk7XG4gICAgdGhpcy5vbkNoYW5nZUhvdXJUaW1lQ2xpY2soKTtcbiAgfVxuXG4gIGFwcGVuZFRhZ0luSW5pdChpbml0RWxlbWVudCkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShpbml0RWxlbWVudC5pbnB1dCwgJ3R5cGUnLCAndGV4dCcpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoaW5pdEVsZW1lbnQubGFiZWwsIGluaXRFbGVtZW50LmxhYmVsVGV4dCk7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChpbml0RWxlbWVudC5zcGFuVG9nZ2xlLCBpbml0RWxlbWVudC53YXRjaEljb24pO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyLCBpbml0RWxlbWVudC5sYWJlbCk7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChjb250YWluZXIsIGluaXRFbGVtZW50LmlucHV0KTtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGNvbnRhaW5lciwgaW5pdEVsZW1lbnQuc3BhblRvZ2dsZSk7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChjb250YWluZXIsIGluaXRFbGVtZW50LmNsb2NrQm94KTtcbiAgfVxuXG4gIGFwcGx5U3R5bGVJbkluaXQoaW5pdEVsZW1lbnQpIHtcbiAgICB0aGlzLmFwcGx5U3R5bGVJbkRpdkRpcmVjdGl2ZShpbml0RWxlbWVudCk7XG4gICAgdGhpcy5hcHBseVN0eWxlSW5JbnB1dEFuZExhYmVsVGFnKGluaXRFbGVtZW50KTtcbiAgICB0aGlzLmFwcGx5U3R5bGVJbklucHV0QW5kTGFiZWxUYWcoaW5pdEVsZW1lbnQpO1xuICAgIHRoaXMuYXBwbHlTdHlsZUluV2F0Y2hJY29uKGluaXRFbGVtZW50KTtcbiAgICB0aGlzLmFwcGx5U3R5bGVJbkNsb2NrQm94KGluaXRFbGVtZW50KTtcbiAgfVxuXG5cbiAgYXBwbHlTdHlsZUluRGl2RGlyZWN0aXZlKGluaXRFbGVtZW50KSB7XG4gICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSB0aGlzLmlubGluZVN0eWxlSW5mby5kaXNwbGF5LFxuICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5tYXJnaW5Cb3R0b20gPSB0aGlzLmlubGluZVN0eWxlSW5mby5tYXJnaW5ib3R0b20sXG4gICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLm1hcmdpblRvcCA9IHRoaXMuaW5saW5lU3R5bGVJbmZvLm1hcmdpbnRvcCxcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUucGFkZGluZyA9IHRoaXMuaW5saW5lU3R5bGVJbmZvLnBhZGRpbmcsXG4gICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gdGhpcy5pbmxpbmVTdHlsZUluZm8ucmVsYXRpdmUsXG4gICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLmZsb2F0ID0gdGhpcy5pbmxpbmVTdHlsZUluZm8uZmxvYXQsXG4gICAgaW5pdEVsZW1lbnQuaW5wdXQuc3R5bGUuYm9yZGVyID0gdGhpcy5pbmxpbmVTdHlsZUluZm8uYm9yZGVyO1xuICB9XG5cbiAgYXBwbHlTdHlsZUluSW5wdXRBbmRMYWJlbFRhZyhpbml0RWxlbWV