@fivethree/core
Version:
Fivethree Core Components
331 lines • 28.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/fab/fab.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { FivLoadingProgressBar } from './../loading-progress-bar/loading-progress-bar.component';
import { Component, Input, ViewChild, Output, EventEmitter, Renderer2, ContentChild, TemplateRef, Optional } from '@angular/core';
import { animate, style, transition, trigger } from '@angular/animations';
import { FivSpinner } from '../spinner/spinner.component';
import { IonContent, IonLabel, Platform } from '@ionic/angular';
import { Subject } from 'rxjs';
import { takeUntil, tap, filter, repeat, map, pairwise, distinctUntilChanged } from 'rxjs/operators';
export class FivFab {
/**
* @param {?} renderer
* @param {?} platform
* @param {?} content
*/
constructor(renderer, platform, content) {
this.renderer = renderer;
this.platform = platform;
this.content = content;
this.vertical = 'none';
this.horizontal = 'none';
this.mode = 'normal';
this.spinColor = 'primary';
this.disabled = false;
this.visible = true;
this.pulse = false;
this.animationDisabled = false;
this._scroll = false;
this.fivComplete = new EventEmitter();
this.fivRefresh = new EventEmitter();
this.fivHidden = new EventEmitter();
this.fivShow = new EventEmitter();
this.fivTransition = new EventEmitter();
this.loading = false;
this.extended = false;
this.iconState = 'normal';
this.currentDeltaY = 0;
this.$onDestroy = new Subject();
}
/**
* @param {?} scroll
* @return {?}
*/
set scroll(scroll) {
this._scroll = scroll;
this.$onDestroy.next();
this.ngOnInit();
}
/**
* @return {?}
*/
get scroll() {
return this._scroll;
}
/**
* @return {?}
*/
ngOnInit() {
if (!this.content) {
return;
}
if (!this.scroll) {
return;
}
this.content.scrollEvents = true;
/** @type {?} */
const directionChange = this.content.ionScroll.pipe(map((/**
* @param {?} ev
* @return {?}
*/
ev => ev.detail.deltaY)), pairwise(), map((/**
* @param {?} __0
* @return {?}
*/
([y1, y2]) => (y2 < y1 ? 'Up' : 'Down'))), distinctUntilChanged(), takeUntil(this.content.ionScrollEnd), repeat());
/** @type {?} */
const up = directionChange.pipe(filter((/**
* @param {?} direction
* @return {?}
*/
direction => direction === 'Up')));
/** @type {?} */
const down = directionChange.pipe(filter((/**
* @param {?} direction
* @return {?}
*/
direction => direction === 'Down')));
up.pipe(tap((/**
* @return {?}
*/
() => this.labelComp ? (this.extended = true) : (this.visible = true))), takeUntil(this.$onDestroy)).subscribe();
down
.pipe(tap((/**
* @return {?}
*/
() => this.labelComp ? (this.extended = false) : (this.visible = false))), takeUntil(this.$onDestroy))
.subscribe();
}
/**
* @return {?}
*/
ngOnDestroy() {
this.$onDestroy.next();
}
/**
* @return {?}
*/
ngAfterContentInit() {
this.extended = !!this.labelComp;
}
/**
* @return {?}
*/
load() {
this.loading = true;
this.fivRefresh.emit(this);
}
/**
* @return {?}
*/
unload() {
if (this.bar) {
this.bar.unload();
}
this.loading = false;
}
/**
* @return {?}
*/
complete() {
if (this.loading) {
if (this.spinner) {
this.spinner.completeIn(1000);
}
else if (this.bar) {
this.bar.complete();
}
}
}
/**
* @return {?}
*/
fillAnimationDone() {
this.fivComplete.emit(this);
this.unload();
}
/**
* @param {?} progress
* @return {?}
*/
rotate(progress) {
this.renderer.setStyle(this.spinner._elementRef.nativeElement, 'transform', `rotateZ(${(progress / 200) * 360}deg)`);
}
/**
* @param {?} event
* @return {?}
*/
fabAnimDone(event) {
if (event.fromState === 'void') {
this.fivShow.emit(this);
}
if (event.toState === 'void') {
this.fivHidden.emit(this);
}
}
}
FivFab.decorators = [
{ type: Component, args: [{
selector: 'fiv-fab',
template: "<ion-fab *ngIf=\"visible\" [@.disabled]=\"animationDisabled\" (@fabAnim.done)=\"fabAnimDone($event)\" [@fabAnim]=\"horizontal\"\n [ngClass]=\"[mode,horizontal,vertical]\" [slot]=\"slot\">\n <fiv-spinner *ngIf=\"!extended && loading\" (fivProgress)=\"rotate($event)\" #spinner (fivComplete)=\"fillAnimationDone()\"\n class=\"spinner\" [circleRadius]=\"30\" [diameter]=\"68\" [strokeWidth]=\"4\" [mode]=\"'indeterminate'\">\n </fiv-spinner>\n\n <ion-button [ngClass]=\"{'pulse': pulse, 'small':!labelComp || !extended}\" [color]=\"color\" [disabled]=\"disabled\">\n <fiv-loading-progress-bar *ngIf=\"extended\" [loading]=\"loading\" (fivComplete)=\"fillAnimationDone()\" #bar>\n </fiv-loading-progress-bar>\n <ng-content select=\"fiv-icon\"></ng-content>\n <ng-content select=\"ion-icon\"></ng-content>\n <div [@labelAnim] *ngIf=\"labelComp && extended\">\n <ng-content select=\"ion-label\"></ng-content>\n </div>\n </ion-button>\n</ion-fab>",
animations: [
trigger('fabAnim', [
transition('void => center', [
style({
transform: 'translateX(-50%) scale(0) '
}),
animate('250ms ease', style({ transform: 'translateX(-50%) scale(1)' }))
]),
transition('center => void', [
style({
transform: 'translateX(-50%) scale(1) '
}),
animate('250ms ease', style({ transform: ' translateX(-50%) scale(0)' }))
]),
transition('void => *', [
style({
transform: 'scale(0)'
}),
animate('250ms ease', style({
transform: 'scale(1)'
}))
]),
transition('* => void', [
style({
transform: 'scale(1)'
}),
animate('250ms ease', style({
transform: 'scale(0)'
}))
])
]),
trigger('labelAnim', [
transition('void => *', [
style({ width: '0', opacity: 0 }),
animate('140ms', style({ width: '*', opacity: 1 }))
]),
transition('* => void', [
style({ width: '*', opacity: 1 }),
animate('120ms', style({ width: 0, opacity: 0 }))
])
])
],
styles: [":host{--fiv-fab-size:56px;--fiv-spinner-size:calc(var(--fiv-fab-size) + 12px);--fiv-fab-bottom:calc(10px + env(safe-area-inset-bottom));--fiv-fab-top:calc(10px + env(safe-area-inset-top));--background-fab-progress-bar:var(--ion-color-primary);--background-fab-progress:var(--ion-color-primary-shade);position:inherit}fiv-loading-progress-bar{--background-progress-bar:var(--background-fab-progress-bar);--background-progress:var(--background-fab-progress)}:host(.button-disabled){pointer-events:none}::ng-deep ng-deep fiv-icon.ios{--fiv-icon-height:24px;--fiv-icon-width:24px}::ng-deep fiv-icon:not(.ios){--fiv-icon-height:25px;--fiv-icon-width:25px}ion-button{--border-radius:calc(var(--fiv-fab-size) / 2);height:var(--fiv-fab-size);min-width:var(--fiv-fab-size);-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:0;margin-inline-end:0;margin:0}ion-fab.top{top:var(--fiv-fab-top)}ion-fab.top.edge{top:calc(var(--fiv-fab-top) - 38px)}ion-fab.middle{top:calc(50% - var(--fiv-spinner-size))}ion-fab.bottom.edge{bottom:calc(var(--fiv-fab-bottom) - 38px)}ion-fab.bottom{bottom:var(--fiv-fab-bottom)}ion-fab.center{left:50%;transform:translateX(-50%)}ion-fab.start{left:10px}ion-fab.end{right:calc(10px + var(--ion-safe-area-right,0px))}.pulse{-webkit-animation:1.2s infinite shadow-pulse;animation:1.2s infinite shadow-pulse}fiv-spinner{position:absolute;left:calc((var(--fiv-spinner-size) - var(--fiv-fab-size))/ -2);top:calc((var(--fiv-spinner-size) - var(--fiv-fab-size))/ -2)}@-webkit-keyframes shadow-pulse{0%{border-radius:calc(var(--fiv-spinner-size)/ 2);box-shadow:0 0 0 0 rgba(0,0,0,.2)}100%{border-radius:calc(var(--fiv-spinner-size)/ 2);box-shadow:0 0 0 28px transparent}}@keyframes shadow-pulse{0%{border-radius:calc(var(--fiv-spinner-size)/ 2);box-shadow:0 0 0 0 rgba(0,0,0,.2)}100%{border-radius:calc(var(--fiv-spinner-size)/ 2);box-shadow:0 0 0 28px transparent}}"]
}] }
];
/** @nocollapse */
FivFab.ctorParameters = () => [
{ type: Renderer2 },
{ type: Platform },
{ type: IonContent, decorators: [{ type: Optional }] }
];
FivFab.propDecorators = {
vertical: [{ type: Input }],
horizontal: [{ type: Input }],
mode: [{ type: Input }],
slot: [{ type: Input }],
spinColor: [{ type: Input }],
color: [{ type: Input }],
disabled: [{ type: Input }],
visible: [{ type: Input }],
pulse: [{ type: Input }],
animationDisabled: [{ type: Input }],
scroll: [{ type: Input }],
feature: [{ type: Input }],
fivComplete: [{ type: Output }],
fivRefresh: [{ type: Output }],
fivHidden: [{ type: Output }],
fivShow: [{ type: Output }],
fivTransition: [{ type: Output }],
spinner: [{ type: ViewChild, args: ['spinner', { static: false },] }],
bar: [{ type: ViewChild, args: ['bar', { static: false },] }],
labelComp: [{ type: ContentChild, args: [IonLabel, { static: false },] }]
};
if (false) {
/** @type {?} */
FivFab.prototype.vertical;
/** @type {?} */
FivFab.prototype.horizontal;
/** @type {?} */
FivFab.prototype.mode;
/** @type {?} */
FivFab.prototype.slot;
/** @type {?} */
FivFab.prototype.spinColor;
/** @type {?} */
FivFab.prototype.color;
/** @type {?} */
FivFab.prototype.disabled;
/** @type {?} */
FivFab.prototype.visible;
/** @type {?} */
FivFab.prototype.pulse;
/** @type {?} */
FivFab.prototype.animationDisabled;
/** @type {?} */
FivFab.prototype._scroll;
/** @type {?} */
FivFab.prototype.feature;
/** @type {?} */
FivFab.prototype.fivComplete;
/** @type {?} */
FivFab.prototype.fivRefresh;
/** @type {?} */
FivFab.prototype.fivHidden;
/** @type {?} */
FivFab.prototype.fivShow;
/** @type {?} */
FivFab.prototype.fivTransition;
/** @type {?} */
FivFab.prototype.spinner;
/** @type {?} */
FivFab.prototype.bar;
/** @type {?} */
FivFab.prototype.labelComp;
/** @type {?} */
FivFab.prototype.loading;
/** @type {?} */
FivFab.prototype.extended;
/** @type {?} */
FivFab.prototype.iconState;
/** @type {?} */
FivFab.prototype.currentDeltaY;
/** @type {?} */
FivFab.prototype.$onDestroy;
/**
* @type {?}
* @private
*/
FivFab.prototype.renderer;
/** @type {?} */
FivFab.prototype.platform;
/**
* @type {?}
* @private
*/
FivFab.prototype.content;
}
/**
* @record
*/
export function FabTransitionEvent() { }
if (false) {
/** @type {?} */
FabTransitionEvent.prototype.from;
/** @type {?} */
FabTransitionEvent.prototype.to;
}
/** @enum {number} */
const FabState = {
HIDDEN: 0,
NORMAL: 1,
EXTENDED: 2,
};
export { FabState };
FabState[FabState.HIDDEN] = 'HIDDEN';
FabState[FabState.NORMAL] = 'NORMAL';
FabState[FabState.EXTENDED] = 'EXTENDED';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BmaXZldGhyZWUvY29yZS8iLCJzb3VyY2VzIjpbImxpYi9mYWIvZmFiLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2pHLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sWUFBWSxFQUNaLFNBQVMsRUFFVCxZQUFZLEVBRVosV0FBVyxFQUNYLFFBQVEsRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxVQUFVLEVBQ1YsT0FBTyxFQUVSLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUNMLFNBQVMsRUFDVCxHQUFHLEVBQ0gsTUFBTSxFQUNOLE1BQU0sRUFDTixHQUFHLEVBQ0gsUUFBUSxFQUNSLG9CQUFvQixFQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBMER4QixNQUFNLE9BQU8sTUFBTTs7Ozs7O0lBc0NqQixZQUNVLFFBQW1CLEVBQ3BCLFFBQWtCLEVBQ0wsT0FBbUI7UUFGL0IsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNwQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ0wsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQXhDaEMsYUFBUSxHQUEwQyxNQUFNLENBQUM7UUFDekQsZUFBVSxHQUF5QyxNQUFNLENBQUM7UUFDMUQsU0FBSSxHQUF1QixRQUFRLENBQUM7UUFFcEMsY0FBUyxHQUFHLFNBQVMsQ0FBQztRQUV0QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDZixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2Qsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBU25DLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFHTixnQkFBVyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQy9ELGVBQVUsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUM5RCxjQUFTLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDN0QsWUFBTyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzNELGtCQUFhLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFNM0UsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGNBQVMsR0FBRyxRQUFRLENBQUM7UUFDckIsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFNeEIsQ0FBQzs7Ozs7SUEvQkosSUFBYSxNQUFNLENBQUMsTUFBZTtRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDOzs7O0lBQ0QsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7Ozs7SUEwQkQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzs7Y0FFM0IsZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDakQsR0FBRzs7OztRQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUMsRUFDM0IsUUFBUSxFQUFFLEVBQ1YsR0FBRzs7OztRQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxFQUM1QyxvQkFBb0IsRUFBRSxFQUN0QixTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFDcEMsTUFBTSxFQUFFLENBQ1Q7O2NBRUssRUFBRSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTTs7OztRQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxLQUFLLElBQUksRUFBQyxDQUFDOztjQUVsRSxJQUFJLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FDL0IsTUFBTTs7OztRQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxLQUFLLE1BQU0sRUFBQyxDQUMxQztRQUVELEVBQUUsQ0FBQyxJQUFJLENBQ0wsR0FBRzs7O1FBQUMsR0FBRyxFQUFFLENBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQ2hFLEVBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDM0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLElBQUk7YUFDRCxJQUFJLENBQ0gsR0FBRzs7O1FBQUMsR0FBRyxFQUFFLENBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQ2xFLEVBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDM0I7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDOzs7O0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7OztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ25DLENBQUM7Ozs7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQzs7OztJQUVELE1BQU07UUFDSixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ25CO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQzs7OztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMvQjtpQkFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDckI7U0FDRjtJQUNILENBQUM7Ozs7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQzs7Ozs7SUFFRCxNQUFNLENBQUMsUUFBZ0I7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFDdEMsV0FBVyxFQUNYLFdBQVcsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQ3hDLENBQUM7SUFDSixDQUFDOzs7OztJQUVELFdBQVcsQ0FBQyxLQUFLO1FBQ2YsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLE1BQU0sRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6QjtRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDM0I7SUFDSCxDQUFDOzs7WUFqTUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxTQUFTO2dCQUNuQixzOUJBQW1DO2dCQUVuQyxVQUFVLEVBQUU7b0JBQ1YsT0FBTyxDQUFDLFNBQVMsRUFBRTt3QkFDakIsVUFBVSxDQUFDLGdCQUFnQixFQUFFOzRCQUMzQixLQUFLLENBQUM7Z0NBQ0osU0FBUyxFQUFFLDRCQUE0Qjs2QkFDeEMsQ0FBQzs0QkFDRixPQUFPLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSwyQkFBMkIsRUFBRSxDQUFDLENBQUM7eUJBQ3pFLENBQUM7d0JBQ0YsVUFBVSxDQUFDLGdCQUFnQixFQUFFOzRCQUMzQixLQUFLLENBQUM7Z0NBQ0osU0FBUyxFQUFFLDRCQUE0Qjs2QkFDeEMsQ0FBQzs0QkFDRixPQUFPLENBQ0wsWUFBWSxFQUNaLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSw0QkFBNEIsRUFBRSxDQUFDLENBQ25EO3lCQUNGLENBQUM7d0JBQ0YsVUFBVSxDQUFDLFdBQVcsRUFBRTs0QkFDdEIsS0FBSyxDQUFDO2dDQUNKLFNBQVMsRUFBRSxVQUFVOzZCQUN0QixDQUFDOzRCQUNGLE9BQU8sQ0FDTCxZQUFZLEVBQ1osS0FBSyxDQUFDO2dDQUNKLFNBQVMsRUFBRSxVQUFVOzZCQUN0QixDQUFDLENBQ0g7eUJBQ0YsQ0FBQzt3QkFDRixVQUFVLENBQUMsV0FBVyxFQUFFOzRCQUN0QixLQUFLLENBQUM7Z0NBQ0osU0FBUyxFQUFFLFVBQVU7NkJBQ3RCLENBQUM7NEJBQ0YsT0FBTyxDQUNMLFlBQVksRUFDWixLQUFLLENBQUM7Z0NBQ0osU0FBUyxFQUFFLFVBQVU7NkJBQ3RCLENBQUMsQ0FDSDt5QkFDRixDQUFDO3FCQUNILENBQUM7b0JBQ0YsT0FBTyxDQUFDLFdBQVcsRUFBRTt3QkFDbkIsVUFBVSxDQUFDLFdBQVcsRUFBRTs0QkFDdEIsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7NEJBQ2pDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzt5QkFDcEQsQ0FBQzt3QkFDRixVQUFVLENBQUMsV0FBVyxFQUFFOzRCQUN0QixLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQzs0QkFDakMsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3lCQUNsRCxDQUFDO3FCQUNILENBQUM7aUJBQ0g7O2FBQ0Y7Ozs7WUFsRkMsU0FBUztZQWVvQixRQUFRO1lBQTlCLFVBQVUsdUJBNkdkLFFBQVE7Ozt1QkF4Q1YsS0FBSzt5QkFDTCxLQUFLO21CQUNMLEtBQUs7bUJBQ0wsS0FBSzt3QkFDTCxLQUFLO29CQUNMLEtBQUs7dUJBQ0wsS0FBSztzQkFDTCxLQUFLO29CQUNMLEtBQUs7Z0NBQ0wsS0FBSztxQkFDTCxLQUFLO3NCQVNMLEtBQUs7MEJBRUwsTUFBTTt5QkFDTixNQUFNO3dCQUNOLE1BQU07c0JBQ04sTUFBTTs0QkFDTixNQUFNO3NCQUVOLFNBQVMsU0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2tCQUN0QyxTQUFTLFNBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTt3QkFDbEMsWUFBWSxTQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Ozs7SUE3QnpDLDBCQUFrRTs7SUFDbEUsNEJBQW1FOztJQUNuRSxzQkFBNkM7O0lBQzdDLHNCQUFzQjs7SUFDdEIsMkJBQStCOztJQUMvQix1QkFBdUI7O0lBQ3ZCLDBCQUEwQjs7SUFDMUIseUJBQXdCOztJQUN4Qix1QkFBdUI7O0lBQ3ZCLG1DQUFtQzs7SUFTbkMseUJBQWdCOztJQUNoQix5QkFBbUM7O0lBRW5DLDZCQUF5RTs7SUFDekUsNEJBQXdFOztJQUN4RSwyQkFBdUU7O0lBQ3ZFLHlCQUFxRTs7SUFDckUsK0JBQTJFOztJQUUzRSx5QkFBNkQ7O0lBQzdELHFCQUFnRTs7SUFDaEUsMkJBQStEOztJQUUvRCx5QkFBZ0I7O0lBQ2hCLDBCQUFpQjs7SUFDakIsMkJBQXFCOztJQUNyQiwrQkFBa0I7O0lBQ2xCLDRCQUEyQjs7Ozs7SUFHekIsMEJBQTJCOztJQUMzQiwwQkFBeUI7Ozs7O0lBQ3pCLHlCQUF1Qzs7Ozs7QUFtRzNDLHdDQUdDOzs7SUFGQyxrQ0FBZTs7SUFDZixnQ0FBYTs7O0FBR2YsTUFBWSxRQUFRO0lBQ2xCLE1BQU0sR0FBQTtJQUNOLE1BQU0sR0FBQTtJQUNOLFFBQVEsR0FBQTtFQUNUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRml2TG9hZGluZ1Byb2dyZXNzQmFyIH0gZnJvbSAnLi8uLi9sb2FkaW5nLXByb2dyZXNzLWJhci9sb2FkaW5nLXByb2dyZXNzLWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIElucHV0LFxuICBWaWV3Q2hpbGQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBSZW5kZXJlcjIsXG4gIE9uRGVzdHJveSxcbiAgQ29udGVudENoaWxkLFxuICBBZnRlckNvbnRlbnRJbml0LFxuICBUZW1wbGF0ZVJlZixcbiAgT3B0aW9uYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBhbmltYXRlLFxuICBzdHlsZSxcbiAgdHJhbnNpdGlvbixcbiAgdHJpZ2dlcixcbiAgc3RhdGVcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBGaXZTcGlubmVyIH0gZnJvbSAnLi4vc3Bpbm5lci9zcGlubmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJb25Db250ZW50LCBJb25MYWJlbCwgUGxhdGZvcm0gfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICB0YWtlVW50aWwsXG4gIHRhcCxcbiAgZmlsdGVyLFxuICByZXBlYXQsXG4gIG1hcCxcbiAgcGFpcndpc2UsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZml2LWZhYicsXG4gIHRlbXBsYXRlVXJsOiAnLi9mYWIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mYWIuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2ZhYkFuaW0nLCBbXG4gICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IGNlbnRlcicsIFtcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMCkgJ1xuICAgICAgICB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMjUwbXMgZWFzZScsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgtNTAlKSBzY2FsZSgxKScgfSkpXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJ2NlbnRlciA9PiB2b2lkJywgW1xuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgtNTAlKSBzY2FsZSgxKSAnXG4gICAgICAgIH0pLFxuICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICcyNTBtcyBlYXNlJyxcbiAgICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJyB0cmFuc2xhdGVYKC01MCUpIHNjYWxlKDApJyB9KVxuICAgICAgICApXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gKicsIFtcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDApJ1xuICAgICAgICB9KSxcbiAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAnMjUwbXMgZWFzZScsXG4gICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoMSknXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHZvaWQnLCBbXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgxKSdcbiAgICAgICAgfSksXG4gICAgICAgIGFuaW1hdGUoXG4gICAgICAgICAgJzI1MG1zIGVhc2UnLFxuICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDApJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgXSksXG4gICAgdHJpZ2dlcignbGFiZWxBbmltJywgW1xuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgW1xuICAgICAgICBzdHlsZSh7IHdpZHRoOiAnMCcsIG9wYWNpdHk6IDAgfSksXG4gICAgICAgIGFuaW1hdGUoJzE0MG1zJywgc3R5bGUoeyB3aWR0aDogJyonLCBvcGFjaXR5OiAxIH0pKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHZvaWQnLCBbXG4gICAgICAgIHN0eWxlKHsgd2lkdGg6ICcqJywgb3BhY2l0eTogMSB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMTIwbXMnLCBzdHlsZSh7IHdpZHRoOiAwLCBvcGFjaXR5OiAwIH0pKVxuICAgICAgXSlcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZpdkZhYiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgQElucHV0KCkgdmVydGljYWw/OiAndG9wJyB8ICdtaWRkbGUnIHwgJ2JvdHRvbScgfCAnbm9uZScgPSAnbm9uZSc7XG4gIEBJbnB1dCgpIGhvcml6b250YWw/OiAnY2VudGVyJyB8ICdzdGFydCcgfCAnZW5kJyB8ICdub25lJyA9ICdub25lJztcbiAgQElucHV0KCkgbW9kZT86ICdub3JtYWwnIHwgJ2VkZ2UnID0gJ25vcm1hbCc7XG4gIEBJbnB1dCgpIHNsb3Q6IHN0cmluZztcbiAgQElucHV0KCkgc3BpbkNvbG9yID0gJ3ByaW1hcnknO1xuICBASW5wdXQoKSBjb2xvcjogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSB2aXNpYmxlID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVsc2UgPSBmYWxzZTtcbiAgQElucHV0KCkgYW5pbWF0aW9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgc2V0IHNjcm9sbChzY3JvbGw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zY3JvbGwgPSBzY3JvbGw7XG4gICAgdGhpcy4kb25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm5nT25Jbml0KCk7XG4gIH1cbiAgZ2V0IHNjcm9sbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2Nyb2xsO1xuICB9XG4gIF9zY3JvbGwgPSBmYWxzZTtcbiAgQElucHV0KCkgZmVhdHVyZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAT3V0cHV0KCkgZml2Q29tcGxldGU6IEV2ZW50RW1pdHRlcjxGaXZGYWI+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaXZGYWI+KCk7XG4gIEBPdXRwdXQoKSBmaXZSZWZyZXNoOiBFdmVudEVtaXR0ZXI8Rml2RmFiPiA9IG5ldyBFdmVudEVtaXR0ZXI8Rml2RmFiPigpO1xuICBAT3V0cHV0KCkgZml2SGlkZGVuOiBFdmVudEVtaXR0ZXI8Rml2RmFiPiA9IG5ldyBFdmVudEVtaXR0ZXI8Rml2RmFiPigpO1xuICBAT3V0cHV0KCkgZml2U2hvdzogRXZlbnRFbWl0dGVyPEZpdkZhYj4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpdkZhYj4oKTtcbiAgQE91dHB1dCgpIGZpdlRyYW5zaXRpb246IEV2ZW50RW1pdHRlcjxGaXZGYWI+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaXZGYWI+KCk7XG5cbiAgQFZpZXdDaGlsZCgnc3Bpbm5lcicsIHsgc3RhdGljOiBmYWxzZSB9KSBzcGlubmVyOiBGaXZTcGlubmVyO1xuICBAVmlld0NoaWxkKCdiYXInLCB7IHN0YXRpYzogZmFsc2UgfSkgYmFyOiBGaXZMb2FkaW5nUHJvZ3Jlc3NCYXI7XG4gIEBDb250ZW50Q2hpbGQoSW9uTGFiZWwsIHsgc3RhdGljOiBmYWxzZSB9KSBsYWJlbENvbXA6IElvbkxhYmVsO1xuXG4gIGxvYWRpbmcgPSBmYWxzZTtcbiAgZXh0ZW5kZWQgPSBmYWxzZTtcbiAgaWNvblN0YXRlID0gJ25vcm1hbCc7XG4gIGN1cnJlbnREZWx0YVkgPSAwO1xuICAkb25EZXN0cm95ID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHVibGljIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbnRlbnQ6IElvbkNvbnRlbnRcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghdGhpcy5jb250ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnNjcm9sbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbnRlbnQuc2Nyb2xsRXZlbnRzID0gdHJ1ZTtcblxuICAgIGNvbnN0IGRpcmVjdGlvbkNoYW5nZSA9IHRoaXMuY29udGVudC5pb25TY3JvbGwucGlwZShcbiAgICAgIG1hcChldiA9PiBldi5kZXRhaWwuZGVsdGFZKSxcbiAgICAgIHBhaXJ3aXNlKCksXG4gICAgICBtYXAoKFt5MSwgeTJdKSA9PiAoeTIgPCB5MSA/ICdVcCcgOiAnRG93bicpKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICB0YWtlVW50aWwodGhpcy5jb250ZW50LmlvblNjcm9sbEVuZCksXG4gICAgICByZXBlYXQoKVxuICAgICk7XG5cbiAgICBjb25zdCB1cCA9IGRpcmVjdGlvbkNoYW5nZS5waXBlKGZpbHRlcihkaXJlY3Rpb24gPT4gZGlyZWN0aW9uID09PSAnVXAnKSk7XG5cbiAgICBjb25zdCBkb3duID0gZGlyZWN0aW9uQ2hhbmdlLnBpcGUoXG4gICAgICBmaWx0ZXIoZGlyZWN0aW9uID0+IGRpcmVjdGlvbiA9PT0gJ0Rvd24nKVxuICAgICk7XG5cbiAgICB1cC5waXBlKFxuICAgICAgdGFwKCgpID0+XG4gICAgICAgIHRoaXMubGFiZWxDb21wID8gKHRoaXMuZXh0ZW5kZWQgPSB0cnVlKSA6ICh0aGlzLnZpc2libGUgPSB0cnVlKVxuICAgICAgKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLiRvbkRlc3Ryb3kpXG4gICAgKS5zdWJzY3JpYmUoKTtcblxuICAgIGRvd25cbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT5cbiAgICAgICAgICB0aGlzLmxhYmVsQ29tcCA/ICh0aGlzLmV4dGVuZGVkID0gZmFsc2UpIDogKHRoaXMudmlzaWJsZSA9IGZhbHNlKVxuICAgICAgICApLFxuICAgICAgICB0YWtlVW50aWwodGhpcy4kb25EZXN0cm95KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4kb25EZXN0cm95Lm5leHQoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmV4dGVuZGVkID0gISF0aGlzLmxhYmVsQ29tcDtcbiAgfVxuXG4gIGxvYWQoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmZpdlJlZnJlc2guZW1pdCh0aGlzKTtcbiAgfVxuXG4gIHVubG9hZCgpIHtcbiAgICBpZiAodGhpcy5iYXIpIHtcbiAgICAgIHRoaXMuYmFyLnVubG9hZCgpO1xuICAgIH1cbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGNvbXBsZXRlKCkge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIGlmICh0aGlzLnNwaW5uZXIpIHtcbiAgICAgICAgdGhpcy5zcGlubmVyLmNvbXBsZXRlSW4oMTAwMCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYmFyKSB7XG4gICAgICAgIHRoaXMuYmFyLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlsbEFuaW1hdGlvbkRvbmUoKSB7XG4gICAgdGhpcy5maXZDb21wbGV0ZS5lbWl0KHRoaXMpO1xuICAgIHRoaXMudW5sb2FkKCk7XG4gIH1cblxuICByb3RhdGUocHJvZ3Jlc3M6IG51bWJlcikge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLnNwaW5uZXIuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICd0cmFuc2Zvcm0nLFxuICAgICAgYHJvdGF0ZVooJHsocHJvZ3Jlc3MgLyAyMDApICogMzYwfWRlZylgXG4gICAgKTtcbiAgfVxuXG4gIGZhYkFuaW1Eb25lKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmZyb21TdGF0ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICB0aGlzLmZpdlNob3cuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICB0aGlzLmZpdkhpZGRlbi5lbWl0KHRoaXMpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZhYlRyYW5zaXRpb25FdmVudCB7XG4gIGZyb206IEZhYlN0YXRlO1xuICB0bzogRmFiU3RhdGU7XG59XG5cbmV4cG9ydCBlbnVtIEZhYlN0YXRlIHtcbiAgSElEREVOLFxuICBOT1JNQUwsXG4gIEVYVEVOREVEXG59XG4iXX0=