text: /**
   * @fileoverview added by tsickle
   * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
   */
  import { Component, Input, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
  import { DomSanitizer } from '@angular/platform-browser';
  import { NgxUiLoaderService } from './ngx-ui-loader.service';
  import { filter } from 'rxjs/operators';
  import { POSITION, PB_DIRECTION, SPINNER } from '../utils/enums';
  import { SPINNER_CONFIG } from '../utils/constants';
  import { coerceNumber } from '../utils/functions';
  export class NgxUiLoaderComponent {
      /**
       * Constructor
       * @param {?} domSanitizer
       * @param {?} changeDetectorRef
       * @param {?} ngxService
       */
      constructor(domSanitizer, changeDetectorRef, ngxService) {
          this.domSanitizer = domSanitizer;
          this.changeDetectorRef = changeDetectorRef;
          this.ngxService = ngxService;
          this.initialized = false;
          this.defaultConfig = this.ngxService.getDefaultConfig();
          this.bgsColor = this.defaultConfig.bgsColor;
          this.bgsOpacity = this.defaultConfig.bgsOpacity;
          this.bgsPosition = this.defaultConfig.bgsPosition;
          this.bgsSize = this.defaultConfig.bgsSize;
          this.bgsType = this.defaultConfig.bgsType;
          this.fgsColor = this.defaultConfig.fgsColor;
          this.fgsPosition = this.defaultConfig.fgsPosition;
          this.fgsSize = this.defaultConfig.fgsSize;
          this.fgsType = this.defaultConfig.fgsType;
          this.gap = this.defaultConfig.gap;
          this.loaderId = this.defaultConfig.masterLoaderId;
          this.logoPosition = this.defaultConfig.logoPosition;
          this.logoSize = this.defaultConfig.logoSize;
          this.logoUrl = this.defaultConfig.logoUrl;
          this.overlayBorderRadius = this.defaultConfig.overlayBorderRadius;
          this.overlayColor = this.defaultConfig.overlayColor;
          this.pbColor = this.defaultConfig.pbColor;
          this.pbDirection = this.defaultConfig.pbDirection;
          this.pbThickness = this.defaultConfig.pbThickness;
          this.hasProgressBar = this.defaultConfig.hasProgressBar;
          this.text = this.defaultConfig.text;
          this.textColor = this.defaultConfig.textColor;
          this.textPosition = this.defaultConfig.textPosition;
      }
      /**
       * On init event
       * @return {?}
       */
      ngOnInit() {
          this.initializeSpinners();
          this.ngxService.bindLoaderData(this.loaderId);
          this.determinePositions();
          this.bgsPosition = (/** @type {?} */ (this.validate('bgsPosition', this.bgsPosition, POSITION, this.defaultConfig.bgsPosition)));
          this.trustedLogoUrl = this.domSanitizer.bypassSecurityTrustResourceUrl(this.logoUrl);
          this.pbDirection = (/** @type {?} */ (this.validate('pbDirection', this.pbDirection, PB_DIRECTION, this.defaultConfig.pbDirection)));
          this.showForegroundWatcher = this.ngxService.showForeground$
              .pipe(filter((/**
           * @param {?} showEvent
           * @return {?}
           */
          (showEvent) => this.loaderId === showEvent.loaderId)))
              .subscribe((/**
           * @param {?} data
           * @return {?}
           */
          data => {
              this.showForeground = data.isShow;
              this.changeDetectorRef.markForCheck();
          }));
          this.showBackgroundWatcher = this.ngxService.showBackground$
              .pipe(filter((/**
           * @param {?} showEvent
           * @return {?}
           */
          (showEvent) => this.loaderId === showEvent.loaderId)))
              .subscribe((/**
           * @param {?} data
           * @return {?}
           */
          data => {
              this.showBackground = data.isShow;
              this.changeDetectorRef.markForCheck();
          }));
          this.foregroundClosingWatcher = this.ngxService.foregroundClosing$
              .pipe(filter((/**
           * @param {?} showEvent
           * @return {?}
           */
          (showEvent) => this.loaderId === showEvent.loaderId)))
              .subscribe((/**
           * @param {?} data
           * @return {?}
           */
          data => {
              this.foregroundClosing = data.isShow;
              this.changeDetectorRef.markForCheck();
          }));
          this.backgroundClosingWatcher = this.ngxService.backgroundClosing$
              .pipe(filter((/**
           * @param {?} showEvent
           * @return {?}
           */
          (showEvent) => this.loaderId === showEvent.loaderId)))
              .subscribe((/**
           * @param {?} data
           * @return {?}
           */
          data => {
              this.backgroundClosing = data.isShow;
              this.changeDetectorRef.markForCheck();
          }));
          this.initialized = true;
      }
      /**
       * On changes event
       * @param {?} changes
       * @return {?}
       */
      ngOnChanges(changes) {
          if (!this.initialized) {
              return;
          }
          /** @type {?} */
          const bgsTypeChange = changes.bgsType;
          /** @type {?} */
          const bgsPositionChange = changes.bgsPosition;
          /** @type {?} */
          const fgsTypeChange = changes.fgsType;
          /** @type {?} */
          const loaderIdChange = changes.loaderId;
          /** @type {?} */
          const logoUrlChange = changes.logoUrl;
          /** @type {?} */
          const pbDirectionChange = changes.pbDirection;
          if (fgsTypeChange || bgsTypeChange) {
              this.initializeSpinners();
          }
          if (loaderIdChange) {
              this.ngxService.updateLoaderId(loaderIdChange.previousValue, this.loaderId);
          }
          this.determinePositions();
          if (bgsPositionChange) {
              this.bgsPosition = (/** @type {?} */ (this.validate('bgsPosition', this.bgsPosition, POSITION, this.defaultConfig.bgsPosition)));
          }
          if (logoUrlChange) {
              this.trustedLogoUrl = this.domSanitizer.bypassSecurityTrustResourceUrl(this.logoUrl);
          }
          if (pbDirectionChange) {
              this.pbDirection = (/** @type {?} */ (this.validate('pbDirection', this.pbDirection, PB_DIRECTION, this.defaultConfig.pbDirection)));
          }
      }
      /**
       * Initialize spinners
       * @private
       * @return {?}
       */
      initializeSpinners() {
          this.fgsType = (/** @type {?} */ (this.validate('fgsType', this.fgsType, SPINNER, this.defaultConfig.fgsType)));
          this.bgsType = (/** @type {?} */ (this.validate('bgsType', this.bgsType, SPINNER, this.defaultConfig.bgsType)));
          this.fgDivs = Array(SPINNER_CONFIG[this.fgsType].divs).fill(1);
          this.fgSpinnerClass = SPINNER_CONFIG[this.fgsType].class;
          this.bgDivs = Array(SPINNER_CONFIG[this.bgsType].divs).fill(1);
          this.bgSpinnerClass = SPINNER_CONFIG[this.bgsType].class;
      }
      /**
       * Determine the positions of spinner, logo and text
       * @private
       * @return {?}
       */
      determinePositions() {
          this.fgsPosition = (/** @type {?} */ (this.validate('fgsPosition', this.fgsPosition, POSITION, this.defaultConfig.fgsPosition)));
          this.logoPosition = (/** @type {?} */ (this.validate('logoPosition', this.logoPosition, POSITION, this.defaultConfig.logoPosition)));
          this.textPosition = (/** @type {?} */ (this.validate('textPosition', this.textPosition, POSITION, this.defaultConfig.textPosition)));
          this.gap = coerceNumber(this.gap, this.defaultConfig.gap);
          this.logoTop = 'initial';
          this.spinnerTop = 'initial';
          this.textTop = 'initial';
          /** @type {?} */
          const textSize = 24;
          if (this.logoPosition.startsWith('center')) {
              this.logoTop = '50%';
          }
          else if (this.logoPosition.startsWith('top')) {
              this.logoTop = '30px';
          }
          if (this.fgsPosition.startsWith('center')) {
              this.spinnerTop = '50%';
          }
          else if (this.fgsPosition.startsWith('top')) {
              this.spinnerTop = '30px';
          }
          if (this.textPosition.startsWith('center')) {
              this.textTop = '50%';
          }
          else if (this.textPosition.startsWith('top')) {
              this.textTop = '30px';
          }
          if (this.fgsPosition === POSITION.centerCenter) {
              if (this.logoUrl && this.logoPosition === POSITION.centerCenter) {
                  if (this.text && this.textPosition === POSITION.centerCenter) {
                      // logo, spinner and text
                      this.logoTop = this.domSanitizer.bypassSecurityTrustStyle(`calc(50% - ${this.fgsSize / 2}px - ${textSize / 2}px - ${this.gap}px)`);
                      this.spinnerTop = this.domSanitizer.bypassSecurityTrustStyle(`calc(50% + ${this.logoSize / 2}px - ${textSize / 2}px)`);
                      this.textTop = this.domSanitizer.bypassSecurityTrustStyle(`calc(50% + ${this.logoSize / 2}px + ${this.gap}px + ${this.fgsSize / 2}px)`);
                  }
                  else {
                      // logo and spinner
                      this.logoTop = this.domSanitizer.bypassSecurityTrustStyle(`calc(50% - ${this.fgsSize / 2}px - ${this.gap / 2}px)`);
                      this.spinnerTop = this.domSanitizer.bypassSecurityTrustStyle(`calc(50% + ${this.logoSize / 2}px + ${this.gap / 2}px)`);
                  }
              }
              else {
                  if (this.text && this.textPosition === POSITION.centerCenter) {
                      // spinner and text
                      this.spinnerTop = this.domSanitizer.bypassSecurityTrustStyle(`calc(50% - ${textSize / 2}px - ${this.gap / 2}px)`);
                      this.textTop = this.domSanitizer.bypassSecurityTrustStyle(`calc(50% + ${this.fgsSize / 2}px + ${this.gap / 2}px)`);
                  }
              }
          }
          else {
              if (this.logoUrl && this.logoPosition === POSITION.centerCenter && this.text && this.textPosition === POSITION.centerCenter) {
                  // logo and text
                  this.logoTop = this.domSanitizer.bypassSecurityTrustStyle(`calc(50% - ${textSize / 2}px - ${this.gap / 2}px)`);
                  this.textTop = this.domSanitizer.bypassSecurityTrustStyle(`calc(50% + ${this.logoSize / 2}px + ${this.gap / 2}px)`);
              }
          }
      }
      /**
       * @private
       * @param {?} inputName
       * @param {?} value
       * @param {?} validTypeObj
       * @param {?} fallbackValue
       * @return {?}
       */
      validate(inputName, value, validTypeObj, fallbackValue) {
          if (Object.keys(validTypeObj)
              .map((/**
           * @param {?} k
           * @return {?}
           */
          k => validTypeObj[k]))
              .findIndex((/**
           * @param {?} v
           * @return {?}
           */
          v => v === value)) === -1) {
              console.error(`[ngx-ui-loader] - ${inputName} ("${value}") is invalid. ` + `Default value "${fallbackValue}" is used.`);
              return fallbackValue;
          }
          return value;
      }
      /**
       * On destroy event
       * @return {?}
       */
      ngOnDestroy() {
          this.ngxService.destroyLoaderData(this.loaderId);
          if (this.showForegroundWatcher) {
              this.showForegroundWatcher.unsubscribe();
          }
          if (this.showBackgroundWatcher) {
              this.showBackgroundWatcher.unsubscribe();
          }
          if (this.foregroundClosingWatcher) {
              this.foregroundClosingWatcher.unsubscribe();
          }
          if (this.backgroundClosingWatcher) {
              this.backgroundClosingWatcher.unsubscribe();
          }
      }
  }
  NgxUiLoaderComponent.decorators = [
      { type: Component, args: [{
                  selector: 'ngx-ui-loader',
                  template: "<!-- Progress bar {{{ -->\n<div\n  *ngIf=\"hasProgressBar\"\n  class=\"ngx-progress-bar\"\n  [class.ngx-position-absolute]=\"loaderId !== defaultConfig.masterLoaderId\"\n  [ngClass]=\"'ngx-progress-bar-' + pbDirection\"\n  [style.height.px]=\"pbThickness\"\n  [style.color]=\"pbColor\"\n  [class.loading-foreground]=\"showForeground\"\n  [class.foreground-closing]=\"foregroundClosing\"\n></div>\n<!-- Progress bar }}} -->\n\n<!-- Foreground container {{{ -->\n<div\n  class=\"ngx-overlay\"\n  [class.ngx-position-absolute]=\"loaderId !== defaultConfig.masterLoaderId\"\n  [style.background-color]=\"overlayColor\"\n  [style.border-radius]=\"overlayBorderRadius\"\n  [class.loading-foreground]=\"showForeground\"\n  [class.foreground-closing]=\"foregroundClosing\"\n>\n  <!-- Logo {{{ -->\n  <img\n    *ngIf=\"logoUrl\"\n    class=\"ngx-loading-logo\"\n    [ngClass]=\"logoPosition\"\n    [src]=\"trustedLogoUrl\"\n    [style.width.px]=\"logoSize\"\n    [style.height.px]=\"logoSize\"\n    [style.top]=\"logoTop\"\n  />\n  <!-- Logo }}} -->\n\n  <!-- Foreground spinner {{{ -->\n  <div\n    class=\"ngx-foreground-spinner\"\n    [ngClass]=\"fgsPosition\"\n    [style.color]=\"fgsColor\"\n    [style.width.px]=\"fgsSize\"\n    [style.height.px]=\"fgsSize\"\n    [style.top]=\"spinnerTop\"\n  >\n    <div [class]=\"fgSpinnerClass\">\n      <div *ngFor=\"let div of fgDivs\"></div>\n    </div>\n  </div>\n  <!-- Foreground spinner }}} -->\n\n  <!-- Loading text {{{ -->\n  <div class=\"ngx-loading-text\" [ngClass]=\"textPosition\" [style.top]=\"textTop\" [style.color]=\"textColor\">{{ text }}</div>\n  <!-- Loading text }}} -->\n</div>\n<!-- Foreground container }}} -->\n\n<!-- Background spinner {{{ -->\n<div\n  class=\"ngx-background-spinner\"\n  [class.ngx-position-absolute]=\"loaderId !== defaultConfig.masterLoaderId\"\n  [ngClass]=\"bgsPosition\"\n  [class.loading-background]=\"showBackground\"\n  [class.background-closing]=\"backgroundClosing\"\n  [style.width.px]=\"bgsSize\"\n  [style.height.px]=\"bgsSize\"\n  [style.color]=\"bgsColor\"\n  [style.opacity]=\"bgsOpacity\"\n>\n  <div [class]=\"bgSpinnerClass\">\n    <div *ngFor=\"let div of bgDivs\"></div>\n  </div>\n</div>\n<!-- Background spinner }}} -->\n",
                  changeDetection: ChangeDetectionStrategy.OnPush,
                  styles: [".ngx-progress-bar{position:fixed;top:0;left:0;width:100%;height:3px;z-index:99999!important;display:none;color:#00acc1;overflow:hidden}.ngx-progress-bar.foreground-closing,.ngx-progress-bar.loading-foreground{display:block}.ngx-progress-bar.foreground-closing{opacity:0!important;transition:opacity .5s ease-out .5s}.ngx-progress-bar::after,.ngx-progress-bar::before{background-color:currentColor;content:\"\";display:block;width:100%;height:100%;position:absolute;top:0}.ngx-progress-bar-ltr::before{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.ngx-progress-bar-ltr::after{-webkit-animation:20s ease-out progressBar-slide-ltr;animation:20s ease-out progressBar-slide-ltr;-webkit-transform:translate3d(-5%,0,0);transform:translate3d(-5%,0,0)}.ngx-progress-bar-rtl::before{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.ngx-progress-bar-rtl::after{-webkit-animation:20s ease-out progressBar-slide-rtl;animation:20s ease-out progressBar-slide-rtl;-webkit-transform:translate3d(5%,0,0);transform:translate3d(5%,0,0)}.foreground-closing.ngx-progress-bar-ltr::before{-webkit-animation:1s ease-out progressBar-slide-complete-ltr;animation:1s ease-out progressBar-slide-complete-ltr;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.foreground-closing.ngx-progress-bar-rtl::before{-webkit-animation:1s ease-out progressBar-slide-complete-rtl;animation:1s ease-out progressBar-slide-complete-rtl;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-webkit-keyframes progressBar-slide-ltr{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{-webkit-transform:translate3d(-5%,0,0);transform:translate3d(-5%,0,0)}}@keyframes progressBar-slide-ltr{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{-webkit-transform:translate3d(-5%,0,0);transform:translate3d(-5%,0,0)}}@-webkit-keyframes progressBar-slide-rtl{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{-webkit-transform:translate3d(5%,0,0);transform:translate3d(5%,0,0)}}@keyframes progressBar-slide-rtl{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{-webkit-transform:translate3d(5%,0,0);transform:translate3d(5%,0,0)}}@-webkit-keyframes progressBar-slide-complete-ltr{0%{-webkit-transform:translate3d(-75%,0,0);transform:translate3d(-75%,0,0)}50%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes progressBar-slide-complete-ltr{0%{-webkit-transform:translate3d(-75%,0,0);transform:translate3d(-75%,0,0)}50%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@-webkit-keyframes progressBar-slide-complete-rtl{0%{-webkit-transform:translate3d(75%,0,0);transform:translate3d(75%,0,0)}50%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes progressBar-slide-complete-rtl{0%{-webkit-transform:translate3d(75%,0,0);transform:translate3d(75%,0,0)}50%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.ngx-overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:99998!important;background-color:rgba(40,40,40,.8);cursor:progress;display:none}.ngx-overlay.foreground-closing,.ngx-overlay.loading-foreground{display:block}.ngx-overlay.foreground-closing{opacity:0!important;transition:opacity .5s ease-out .5s}.ngx-overlay>.ngx-foreground-spinner{position:fixed;width:60px;height:60px;margin:0;color:#00acc1}.ngx-overlay>.ngx-loading-logo{position:fixed;margin:0;width:120px;height:120px}.ngx-overlay>.ngx-loading-text{position:fixed;margin:0;font-family:sans-serif;font-weight:400;font-size:1.2em;color:#fff}.ngx-background-spinner{position:fixed;z-index:99997!important;width:60px;height:60px;margin:0;color:#00acc1;opacity:.6;display:none}.ngx-background-spinner.background-closing,.ngx-background-spinner.loading-background{display:block}.ngx-background-spinner.background-closing{opacity:0!important;transition:opacity .7s ease-out}.ngx-position-absolute,.ngx-position-absolute>.ngx-foreground-spinner,.ngx-position-absolute>.ngx-loading-logo,.ngx-position-absolute>.ngx-loading-text{position:absolute!important}.ngx-position-absolute.ngx-progress-bar{z-index:99996!important}.ngx-position-absolute.ngx-overlay{z-index:99995!important}.ngx-position-absolute .sk-square-jelly-box>div:nth-child(1),.ngx-position-absolute.ngx-background-spinner{z-index:99994!important}.top-left{top:30px;left:30px}.top-center{top:30px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.top-right{top:30px;right:30px}.center-left{top:50%;left:30px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.center-center{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.center-right{top:50%;right:30px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.bottom-left{bottom:30px;left:30px}.bottom-center{bottom:30px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.bottom-right{bottom:30px;right:30px}.sk-ball-scale-multiple,.sk-ball-scale-multiple>div{position:relative;box-sizing:border-box}.sk-ball-scale-multiple{width:100%;height:100%;font-size:0}.sk-ball-scale-multiple>div{display:inline-block;float:none;background-color:currentColor;border:0 solid currentColor;position:absolute;top:0;left:0;width:100%;height:100%;border-radius:100%;opacity:0;-webkit-animation:1s linear infinite ball-scale-multiple;animation:1s linear infinite ball-scale-multiple}.sk-ball-scale-multiple>div:nth-child(2){-webkit-animation-delay:.2s;animation-delay:.2s}.sk-ball-scale-multiple>div:nth-child(3){-webkit-animation-delay:.4s;animation-delay:.4s}@-webkit-keyframes ball-scale-multiple{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}5%{opacity:.75}100%{opacity:0;-webkit-transform:scale(1);transform:scale(1)}}@keyframes ball-scale-multiple{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}5%{opacity:.75}100%{opacity:0;-webkit-transform:scale(1);transform:scale(1)}}.sk-ball-spin,.sk-ball-spin>div{position:relative;box-sizing:border-box}.sk-ball-spin{width:100%;height:100%;font-size:0}.sk-ball-spin>div{display:inline-block;float:none;background-color:currentColor;border:0 solid currentColor;position:absolute;top:50%;left:50%;width:25%;height:25%;margin-top:-12.5%;margin-left:-12.5%;border-radius:100%;-webkit-animation:1s ease-in-out infinite ball-spin-clockwise;animation:1s ease-in-out infinite ball-spin-clockwise}.sk-ball-spin>div:nth-child(1){top:5%;left:50%;-webkit-animation-delay:-1.125s;animation-delay:-1.125s}.sk-ball-spin>div:nth-child(2){top:18.1801948466%;left:81.8198051534%;-webkit-animation-delay:-1.25s;animation-delay:-1.25s}.sk-ball-spin>div:nth-child(3){top:50%;left:95%;-webkit-animation-delay:-1.375s;animation-delay:-1.375s}.sk-ball-spin>div:nth-child(4){top:81.8198051534%;left:81.8198051534%;-webkit-animation-delay:-1.5s;animation-delay:-1.5s}.sk-ball-spin>div:nth-child(5){top:94.9999999966%;left:50.0000000005%;-webkit-animation-delay:-1.625s;animation-delay:-1.625s}.sk-ball-spin>div:nth-child(6){top:81.8198046966%;left:18.1801949248%;-webkit-animation-delay:-1.75s;animation-delay:-1.75s}.sk-ball-spin>div:nth-child(7){top:49.9999750815%;left:5.0000051215%;-webkit-animation-delay:-1.875s;animation-delay:-1.875s}.sk-ball-spin>div:nth-child(8){top:18.179464974%;left:18.1803700518%;-webkit-animation-delay:-2s;animation-delay:-2s}@-webkit-keyframes ball-spin{0%,100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}20%{opacity:1}80%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}}@keyframes ball-spin{0%,100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}20%{opacity:1}80%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}}.sk-ball-spin-clockwise,.sk-ball-spin-clockwise>div{position:relative;box-sizing:border-box}.sk-ball-spin-clockwise{width:100%;height:100%;font-size:0}.sk-ball-spin-clockwise>div{display:inline-block;float:none;background-color:currentColor;border:0 solid currentColor;position:absolute;top:50%;left:50%;width:25%;height:25%;margin-top:-12.5%;margin-left:-12.5%;border-radius:100%;-webkit-animation:1s ease-in-out infinite ball-spin-clockwise;animation:1s ease-in-out infinite ball-spin-clockwise}.sk-ball-spin-clockwise>div:nth-child(1){top:5%;left:50%;-webkit-animation-delay:-875ms;animation-delay:-875ms}.sk-ball-spin-clockwise>div:nth-child(2){top:18.1801948466%;left:81.8198051534%;-webkit-animation-delay:-.75s;animation-delay:-.75s}.sk-ball-spin-clockwise>div:nth-child(3){top:50%;left:95%;-webkit-animation-delay:-625ms;animation-delay:-625ms}.sk-ball-spin-clockwise>div:nth-child(4){top:81.8198051534%;left:81.8198051534%;-webkit-animation-delay:-.5s;animation-delay:-.5s}.sk-ball-spin-clockwise>div:nth-child(5){top:94.9999999966%;left:50.0000000005%;-webkit-animation-delay:-375ms;animation-delay:-375ms}.sk-ball-spin-clockwise>div:nth-child(6){top:81.8198046966%;left:18.1801949248%;-webkit-animation-delay:-.25s;animation-delay:-.25s}.sk-ball-spin-clockwise>div:nth-child(7){top:49.9999750815%;left:5.0000051215%;-webkit-animation-delay:-125ms;animation-delay:-125ms}.sk-ball-spin-clockwise>div:nth-child(8){top:18.179464974%;left:18.1803700518%;-webkit-animation-delay:0s;animation-delay:0s}@-webkit-keyframes ball-spin-clockwise{0%,100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}20%{opacity:1}80%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}}@keyframes ball-spin-clockwise{0%,100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}20%{opacity:1}80%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}}.sk-ball-spin-clockwise-fade-rotating,.sk-ball-spin-clockwise-fade-rotating>div{position:relative;box-sizing:border-box}.sk-ball-spin-clockwise-fade-rotating{font-size:0;width:100%;height:100%;-webkit-animation:6s linear infinite ball-spin-clockwise-fade-rotating-rotate;animation:6s linear infinite ball-spin-clockwise-fade-rotating-rotate}.sk-ball-spin-clockwise-fade-rotating>div{display:inline-block;float:none;background-color:currentColor;border:0 solid currentColor;position:absolute;top:50%;left:50%;width:25%;height:25%;margin-top:-12.5%;margin-left:-12.5%;border-radius:100%;-webkit-animation:1s linear infinite ball-spin-clockwise-fade-rotating;animation:1s linear infinite ball-spin-clockwise-fade-rotating}.sk-ball-spin-clockwise-fade-rotating>div:nth-child(1){top:5%;left:50%;-webkit-animation-delay:-875ms;animation-delay:-875ms}.sk-ball-spin-clockwise-fade-rotating>div:nth-child(2){top:18.1801948466%;left:81.8198051534%;-webkit-animation-delay:-.75s;animation-delay:-.75s}.sk-ball-spin-clockwise-fade-rotating>div:nth-child(3){top:50%;left:95%;-webkit-animation-delay:-625ms;animation-delay:-625ms}.sk-ball-spin-clockwise-fade-rotating>div:nth-child(4){top:81.8198051534%;left:81.8198051534%;-webkit-animation-delay:-.5s;animation-delay:-.5s}.sk-ball-spin-clockwise-fade-rotating>div:nth-child(5){top:94.9999999966%;left:50.0000000005%;-webkit-animation-delay:-375ms;animation-delay:-375ms}.sk-ball-spin-clockwise-fade-rotating>div:nth-child(6){top:81.8198046966%;left:18.1801949248%;-webkit-animation-delay:-.25s;animation-delay:-.25s}.sk-ball-spin-clockwise-fade-rotating>div:nth-child(7){top:49.9999750815%;left:5.0000051215%;-webkit-animation-delay:-125ms;animation-delay:-125ms}.sk-ball-spin-clockwise-fade-rotating>div:nth-child(8){top:18.179464974%;left:18.1803700518%;-webkit-animation-delay:0s;animation-delay:0s}@-webkit-keyframes ball-spin-clockwise-fade-rotating-rotate{100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes ball-spin-clockwise-fade-rotating-rotate{100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes ball-spin-clockwise-fade-rotating{50%{opacity:.25;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes ball-spin-clockwise-fade-rotating{50%{opacity:.25;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.sk-ball-spin-fade-rotating,.sk-ball-spin-fade-rotating>div{position:relative;box-sizing:border-box}.sk-ball-spin-fade-rotating{width:100%;height:100%;font-size:0;-webkit-animation:6s linear infinite ball-spin-fade-rotate;animation:6s linear infinite ball-spin-fade-rotate}.sk-ball-spin-fade-rotating>div{display:inline-block;float:none;background-color:currentColor;border:0 solid currentColor;position:absolute;top:50%;left:50%;width:25%;height:25%;margin-top:-12.5%;margin-left:-12.5%;border-radius:100%;-webkit-animation:1s linear infinite ball-spin-fade;animation:1s linear infinite ball-spin-fade}.sk-ball-spin-fade-rotating>div:nth-child(1){top:5%;left:50%;-webkit-animation-delay:-1.125s;animation-delay:-1.125s}.sk-ball-spin-fade-rotating>div:nth-child(2){top:18.1801948466%;left:81.8198051534%;-webkit-animation-delay:-1.25s;animation-delay:-1.25s}.sk-ball-spin-fade-rotating>div:nth-child(3){top:50%;left:95%;-webkit-animation-delay:-1.375s;animation-delay:-1.375s}.sk-ball-spin-fade-rotating>div:nth-child(4){top:81.8198051534%;left:81.8198051534%;-webkit-animation-delay:-1.5s;animation-delay:-1.5s}.sk-ball-spin-fade-rotating>div:nth-child(5){top:94.9999999966%;left:50.0000000005%;-webkit-animation-delay:-1.625s;animation-delay:-1.625s}.sk-ball-spin-fade-rotating>div:nth-child(6){top:81.8198046966%;left:18.1801949248%;-webkit-animation-delay:-1.75s;animation-delay:-1.75s}.sk-ball-spin-fade-rotating>div:nth-child(7){top:49.9999750815%;left:5.0000051215%;-webkit-animation-delay:-1.875s;animation-delay:-1.875s}.sk-ball-spin-fade-rotating>div:nth-child(8){top:18.179464974%;left:18.1803700518%;-webkit-animation-delay:-2s;animation-delay:-2s}@-webkit-keyframes ball-spin-fade-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes ball-spin-fade-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes ball-spin-fade{0%,100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}50%{opacity:.25;-webkit-transform:scale(.5);transform:scale(.5)}}@keyframes ball-spin-fade{0%,100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}50%{opacity:.25;-webkit-transform:scale(.5);transform:scale(.5)}}.sk-chasing-dots{margin:auto;width:100%;height:100%;position:absolute;text-align:center;-webkit-animation:2s linear infinite sk-chasingDots-rotate;animation:2s linear infinite sk-chasingDots-rotate}.sk-chasing-dots>div{width:60%;height:60%;display:inline-block;position:absolute;top:0;background-color:currentColor;border-radius:100%;-webkit-animation:2s ease-in-out infinite sk-chasingDots-bounce;animation:2s ease-in-out infinite sk-chasingDots-bounce}.sk-chasing-dots>div:nth-child(2){top:auto;bottom:0;-webkit-animation-delay:-1s;animation-delay:-1s}@-webkit-keyframes sk-chasingDots-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes sk-chasingDots-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes sk-chasingDots-bounce{0%,100%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes sk-chasingDots-bounce{0%,100%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1)}}.sk-circle{margin:auto;width:100%;height:100%;position:relative}.sk-circle>div{width:100%;height:100%;position:absolute;left:0;top:0}.sk-circle>div::before{content:\"\";display:block;margin:0 auto;width:15%;height:15%;background-color:currentColor;border-radius:100%;-webkit-animation:1.2s ease-in-out infinite both sk-circle-bounceDelay;animation:1.2s ease-in-out infinite both sk-circle-bounceDelay}.sk-circle>div:nth-child(2){-webkit-transform:rotate(30deg);transform:rotate(30deg)}.sk-circle>div:nth-child(3){-webkit-transform:rotate(60deg);transform:rotate(60deg)}.sk-circle>div:nth-child(4){-webkit-transform:rotate(90deg);transform:rotate(90deg)}.sk-circle>div:nth-child(5){-webkit-transform:rotate(120deg);transform:rotate(120deg)}.sk-circle>div:nth-child(6){-webkit-transform:rotate(150deg);transform:rotate(150deg)}.sk-circle>div:nth-child(7){-webkit-transform:rotate(180deg);transform:rotate(180deg)}.sk-circle>div:nth-child(8){-webkit-transform:rotate(210deg);transform:rotate(210deg)}.sk-circle>div:nth-child(9){-webkit-transform:rotate(240deg);transform:rotate(240deg)}.sk-circle>div:nth-child(10){-webkit-transform:rotate(270deg);transform:rotate(270deg)}.sk-circle>div:nth-child(11){-webkit-transform:rotate(300deg);transform:rotate(300deg)}.sk-circle>div:nth-child(12){-webkit-transform:rotate(330deg);transform:rotate(330deg)}.sk-circle>div:nth-child(2)::before{-webkit-animation-delay:-1.1s;animation-delay:-1.1s}.sk-circle>div:nth-child(3)::before{-webkit-animation-delay:-1s;animation-delay:-1s}.sk-circle>div:nth-child(4)::before{-webkit-animation-delay:-.9s;animation-delay:-.9s}.sk-circle>div:nth-child(5)::before{-webkit-animation-delay:-.8s;animation-delay:-.8s}.sk-circle>div:nth-child(6)::before{-webkit-animation-delay:-.7s;animation-delay:-.7s}.sk-circle>div:nth-child(7)::before{-webkit-animation-delay:-.6s;animation-delay:-.6s}.sk-circle>div:nth-child(8)::before{-webkit-animation-delay:-.5s;animation-delay:-.5s}.sk-circle>div:nth-child(9)::before{-webkit-animation-delay:-.4s;animation-delay:-.4s}.sk-circle>div:nth-child(10)::before{-webkit-animation-delay:-.3s;animation-delay:-.3s}.sk-circle>div:nth-child(11)::before{-webkit-animation-delay:-.2s;animation-delay:-.2s}.sk-circle>div:nth-child(12)::before{-webkit-animation-delay:-.1s;animation-delay:-.1s}@-webkit-keyframes sk-circle-bounceDelay{0%,100%,80%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes sk-circle-bounceDelay{0%,100%,80%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.sk-cube-grid{width:100%;height:100%;margin:auto}.sk-cube-grid>div{width:33%;height:33%;background-color:currentColor;float:left;-webkit-animation:1.3s ease-in-out infinite sk-cubeGrid-scaleDelay;animation:1.3s ease-in-out infinite sk-cubeGrid-scaleDelay}.sk-cube-grid>div:nth-child(1){-webkit-animation-delay:.2s;animation-delay:.2s}.sk-cube-grid>div:nth-child(2){-webkit-animation-delay:.3s;animation-delay:.3s}.sk-cube-grid>div:nth-child(3){-webkit-animation-delay:.4s;animation-delay:.4s}.sk-cube-grid>div:nth-child(4){-webkit-animation-delay:.1s;animation-delay:.1s}.sk-cube-grid>div:nth-child(5){-webkit-animation-delay:.2s;animation-delay:.2s}.sk-cube-grid>div:nth-child(6){-webkit-animation-delay:.3s;animation-delay:.3s}.sk-cube-grid>div:nth-child(7){-webkit-animation-delay:0s;animation-delay:0s}.sk-cube-grid>div:nth-child(8){-webkit-animation-delay:.1s;animation-delay:.1s}.sk-cube-grid>div:nth-child(9){-webkit-animation-delay:.2s;animation-delay:.2s}@-webkit-keyframes sk-cubeGrid-scaleDelay{0%,100%,70%{-webkit-transform:scale3D(1,1,1);transform:scale3D(1,1,1)}35%{-webkit-transform:scale3D(0,0,1);transform:scale3D(0,0,1)}}@keyframes sk-cubeGrid-scaleDelay{0%,100%,70%{-webkit-transform:scale3D(1,1,1);transform:scale3D(1,1,1)}35%{-webkit-transform:scale3D(0,0,1);transform:scale3D(0,0,1)}}.sk-double-bounce{width:100%;height:100%;position:relative;margin:auto}.sk-double-bounce>div{width:100%;height:100%;border-radius:50%;background-color:currentColor;opacity:.6;position:absolute;top:0;left:0;-webkit-animation:2s ease-in-out infinite sk-doubleBounce-bounce;animation:2s ease-in-out infinite sk-doubleBounce-bounce}.sk-double-bounce>div:nth-child(2){-webkit-animation-delay:-1s;animation-delay:-1s}@-webkit-keyframes sk-doubleBounce-bounce{0%,100%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes sk-doubleBounce-bounce{0%,100%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1)}}.sk-fading-circle{margin:auto;width:100%;height:100%;position:relative}.sk-fading-circle>div{width:100%;height:100%;position:absolute;left:0;top:0}.sk-fading-circle>div::before{content:\"\";display:block;margin:0 auto;width:15%;height:15%;background-color:currentColor;border-radius:100%;-webkit-animation:1.2s ease-in-out infinite both sk-fadingCircle-FadeDelay;animation:1.2s ease-in-out infinite both sk-fadingCircle-FadeDelay}.sk-fading-circle>div:nth-child(2){-webkit-transform:rotate(30deg);transform:rotate(30deg)}.sk-fading-circle>div:nth-child(3){-webkit-transform:rotate(60deg);transform:rotate(60deg)}.sk-fading-circle>div:nth-child(4){-webkit-transform:rotate(90deg);transform:rotate(90deg)}.sk-fading-circle>div:nth-child(5){-webkit-transform:rotate(120deg);transform:rotate(120deg)}.sk-fading-circle>div:nth-child(6){-webkit-transform:rotate(150deg);transform:rotate(150deg)}.sk-fading-circle>div:nth-child(7){-webkit-transform:rotate(180deg);transform:rotate(180deg)}.sk-fading-circle>div:nth-child(8){-webkit-transform:rotate(210deg);transform:rotate(210deg)}.sk-fading-circle>div:nth-child(9){-webkit-transform:rotate(240deg);transform:rotate(240deg)}.sk-fading-circle>div:nth-child(10){-webkit-transform:rotate(270deg);transform:rotate(270deg)}.sk-fading-circle>div:nth-child(11){-webkit-transform:rotate(300deg);transform:rotate(300deg)}.sk-fading-circle>div:nth-child(12){-webkit-transform:rotate(330deg);transform:rotate(330deg)}.sk-fading-circle>div:nth-child(2)::before{-webkit-animation-delay:-1.1s;animation-delay:-1.1s}.sk-fading-circle>div:nth-child(3)::before{-webkit-animation-delay:-1s;animation-delay:-1s}.sk-fading-circle>div:nth-child(4)::before{-webkit-animation-delay:-.9s;animation-delay:-.9s}.sk-fading-circle>div:nth-child(5)::before{-webkit-animation-delay:-.8s;animation-delay:-.8s}.sk-fading-circle>div:nth-child(6)::before{-webkit-animation-delay:-.7s;animation-delay:-.7s}.sk-fading-circle>div:nth-child(7)::before{-webkit-animation-delay:-.6s;animation-delay:-.6s}.sk-fading-circle>div:nth-child(8)::before{-webkit-animation-delay:-.5s;animation-delay:-.5s}.sk-fading-circle>div:nth-child(9)::before{-webkit-animation-delay:-.4s;animation-delay:-.4s}.sk-fading-circle>div:nth-child(10)::before{-webkit-animation-delay:-.3s;animation-delay:-.3s}.sk-fading-circle>div:nth-child(11)::before{-webkit-animation-delay:-.2s;animation-delay:-.2s}.sk-fading-circle>div:nth-child(12)::before{-webkit-animation-delay:-.1s;animation-delay:-.1s}@-webkit-keyframes sk-fadingCircle-FadeDelay{0%,100%,39%{opacity:0}40%{opacity:1}}@keyframes sk-fadingCircle-FadeDelay{0%,100%,39%{opacity:0}40%{opacity:1}}.sk-folding-cube{margin:auto;width:100%;height:100%;position:relative;-webkit-transform:rotateZ(45deg);transform:rotateZ(45deg)}.sk-folding-cube>div{float:left;width:50%;height:50%;position:relative;-webkit-transform:scale(1.1);transform:scale(1.1)}.sk-folding-cube>div::before{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background-color:currentColor;-webkit-animation:2.4s linear infinite both sk-foldingCube-angle;animation:2.4s linear infinite both sk-foldingCube-angle;-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.sk-folding-cube>div:nth-child(2){-webkit-transform:scale(1.1) rotateZ(90deg);transform:scale(1.1) rotateZ(90deg)}.sk-folding-cube>div:nth-child(3){-webkit-transform:scale(1.1) rotateZ(270deg);transform:scale(1.1) rotateZ(270deg)}.sk-folding-cube>div:nth-child(4){-webkit-transform:scale(1.1) rotateZ(180deg);transform:scale(1.1) rotateZ(180deg)}.sk-folding-cube>div:nth-child(2)::before{-webkit-animation-delay:.3s;animation-delay:.3s}.sk-folding-cube>div:nth-child(3)::before{-webkit-animation-delay:.9s;animation-delay:.9s}.sk-folding-cube>div:nth-child(4)::before{-webkit-animation-delay:.6s;animation-delay:.6s}@-webkit-keyframes sk-foldingCube-angle{0%,10%{-webkit-transform:perspective(140px) rotateX(-180deg);transform:perspective(140px) rotateX(-180deg);opacity:0}25%,75%{-webkit-transform:perspective(140px) rotateX(0);transform:perspective(140px) rotateX(0);opacity:1}100%,90%{-webkit-transform:perspective(140px) rotateY(180deg);transform:perspective(140px) rotateY(180deg);opacity:0}}@keyframes sk-foldingCube-angle{0%,10%{-webkit-transform:perspective(140px) rotateX(-180deg);transform:perspective(140px) rotateX(-180deg);opacity:0}25%,75%{-webkit-transform:perspective(140px) rotateX(0);transform:perspective(140px) rotateX(0);opacity:1}100%,90%{-webkit-transform:perspective(140px) rotateY(180deg);transform:perspective(140px) rotateY(180deg);opacity:0}}.sk-pulse{width:100%;height:100%;margin:auto}.sk-pulse>div{width:100%;height:100%;background-color:currentColor;border-radius:100%;-webkit-animation:1s ease-in-out infinite sk-pulse-scaleOut;animation:1s ease-in-out infinite sk-pulse-scaleOut}@-webkit-keyframes sk-pulse-scaleOut{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:0}}@keyframes sk-pulse-scaleOut{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:0}}.sk-rectangle-bounce{margin:auto;width:100%;height:100%;text-align:center;font-size:0}.sk-rectangle-bounce>div{background-color:currentColor;height:100%;width:10%;margin:0 5%;display:inline-block;-webkit-animation:1.2s ease-in-out infinite sk-rectangleBounce-stretchDelay;animation:1.2s ease-in-out infinite sk-rectangleBounce-stretchDelay}.sk-rectangle-bounce>div:nth-child(2){-webkit-animation-delay:-1.1s;animation-delay:-1.1s}.sk-rectangle-bounce>div:nth-child(3){-webkit-animation-delay:-1s;animation-delay:-1s}.sk-rectangle-bounce>div:nth-child(4){-webkit-animation-delay:-.9s;animation-delay:-.9s}.sk-rectangle-bounce>div:nth-child(5){-webkit-animation-delay:-.8s;animation-delay:-.8s}@-webkit-keyframes sk-rectangleBounce-stretchDelay{0%,100%,40%{-webkit-transform:scaleY(.4);transform:scaleY(.4)}20%{-webkit-transform:scaleY(1);transform:scaleY(1)}}@keyframes sk-rectangleBounce-stretchDelay{0%,100%,40%{-webkit-transform:scaleY(.4);transform:scaleY(.4)}20%{-webkit-transform:scaleY(1);transform:scaleY(1)}}.sk-rectangle-bounce-party,.sk-rectangle-bounce-party>div{position:relative;box-sizing:border-box}.sk-rectangle-bounce-party{margin:auto;width:100%;height:100%;text-align:center;font-size:0}.sk-rectangle-bounce-party>div{display:inline-block;float:none;background-color:currentColor;border:0 solid currentColor;width:10%;height:100%;margin:0 5%;border-radius:0;-webkit-animation-name:rectangle-bounce-party;animation-name:rectangle-bounce-party;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.sk-rectangle-bounce-party>div:nth-child(1){-webkit-animation-duration:.43s;animation-duration:.43s;-webkit-animation-delay:-.23s;animation-delay:-.23s}.sk-rectangle-bounce-party>div:nth-child(2){-webkit-animation-duration:.62s;animation-duration:.62s;-webkit-animation-delay:-.32s;animation-delay:-.32s}.sk-rectangle-bounce-party>div:nth-child(3){-webkit-animation-duration:.43s;animation-duration:.43s;-webkit-animation-delay:-.44s;animation-delay:-.44s}.sk-rectangle-bounce-party>div:nth-child(4){-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-delay:-.31s;animation-delay:-.31s}.sk-rectangle-bounce-party>div:nth-child(5){-webkit-animation-duration:.74s;animation-duration:.74s;-webkit-animation-delay:-.24s;animation-delay:-.24s}@-webkit-keyframes rectangle-bounce-party{0%,100%{-webkit-transform:scaleY(1);transform:scaleY(1)}50%{-webkit-transform:scaleY(.4);transform:scaleY(.4)}}@keyframes rectangle-bounce-party{0%,100%{-webkit-transform:scaleY(1);transform:scaleY(1)}50%{-webkit-transform:scaleY(.4);transform:scaleY(.4)}}.sk-rectangle-bounce-pulse-out,.sk-rectangle-bounce-pulse-out>div{position:relative;box-sizing:border-box}.sk-rectangle-bounce-pulse-out{margin:auto;width:100%;height:100%;text-align:center;font-size:0}.sk-rectangle-bounce-pulse-out>div{display:inline-block;float:none;background-color:currentColor;border:0 solid currentColor;width:10%;height:100%;margin:0 5%;border-radius:0;-webkit-animation:.9s cubic-bezier(.85,.25,.37,.85) infinite rectangle-bounce-pulse-out;animation:.9s cubic-bezier(.85,.25,.37,.85) infinite rectangle-bounce-pulse-out}.sk-rectangle-bounce-pulse-out>div:nth-child(3){-webkit-animation-delay:-.9s;animation-delay:-.9s}.sk-rectangle-bounce-pulse-out>div:nth-child(2),.sk-rectangle-bounce-pulse-out>div:nth-child(4){-webkit-animation-delay:-.7s;animation-delay:-.7s}.sk-rectangle-bounce-pulse-out>div:nth-child(1),.sk-rectangle-bounce-pulse-out>div:nth-child(5){-webkit-animation-delay:-.5s;animation-delay:-.5s}@-webkit-keyframes rectangle-bounce-pulse-out{0%,100%{-webkit-transform:scaley(1);transform:scaley(1)}50%{-webkit-transform:scaley(.4);transform:scaley(.4)}}@keyframes rectangle-bounce-pulse-out{0%,100%{-webkit-transform:scaley(1);transform:scaley(1)}50%{-webkit-transform:scaley(.4);transform:scaley(.4)}}.sk-rectangle-bounce-pulse-out-rapid,.sk-rectangle-bounce-pulse-out-rapid>div{position:relative;box-sizing:border-box}.sk-rectangle-bounce-pulse-out-rapid{margin:auto;width:100%;height:100%;text-align:center;font-size:0}.sk-rectangle-bounce-pulse-out-rapid>div{display:inline-block;float:none;background-color:currentColor;border:0 solid currentColor;width:10%;height:100%;margin:0 5%;border-radius:0;-webkit-animation:.9s cubic-bezier(.11,.49,.38,.78) infinite rectangle-bounce-pulse-out-rapid;animation:.9s cubic-bezier(.11,.49,.38,.78) infinite rectangle-bounce-pulse-out-rapid}.sk-rectangle-bounce-pulse-out-rapid>div:nth-child(3){-webkit-animation-delay:-.9s;animation-delay:-.9s}.sk-rectangle-bounce-pulse-out-rapid>div:nth-child(2),.sk-rectangle-bounce-pulse-out-rapid>div:nth-child(4){-webkit-animation-delay:-.65s;animation-delay:-.65s}.sk-rectangle-bounce-pulse-out-rapid>div:nth-child(1),.sk-rectangle-bounce-pulse-out-rapid>div:nth-child(5){-webkit-animation-delay:-.4s;animation-delay:-.4s}@-webkit-keyframes rectangle-bounce-pulse-out-rapid{0%,90%{-webkit-transform:scaley(1);transform:scaley(1)}80%{-webkit-transform:scaley(.4);transform:scaley(.4)}}@keyframes rectangle-bounce-pulse-out-rapid{0%,90%{-webkit-transform:scaley(1);transform:scaley(1)}80%{-webkit-transform:scaley(.4);transform:scaley(.4)}}.sk-rotating-plane{width:100%;height:100%;text-align:center;margin:auto}.sk-rotating-plane>div{width:100%;height:100%;background-color:currentColor;-webkit-animation:1.2s ease-in-out infinite sk-rotatePlane;animation:1.2s ease-in-out infinite sk-rotatePlane}@-webkit-keyframes sk-rotatePlane{0%{-webkit-transform:perspective(120px) rotateX(0) rotateY(0);transform:perspective(120px) rotateX(0) rotateY(0)}50%{-webkit-transform:perspective(120px) rotateX(-180.1deg) rotateY(0);transform:perspective(120px) rotateX(-180.1deg) rotateY(0)}100%{-webkit-transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg);transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg)}}@keyframes sk-rotatePlane{0%{-webkit-transform:perspective(120px) rotateX(0) rotateY(0);transform:perspective(120px) rotateX(0) rotateY(0)}50%{-webkit-transform:perspective(120px) rotateX(-180.1deg) rotateY(0);transform:perspective(120px) rotateX(-180.1deg) rotateY(0)}100%{-webkit-transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg);transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg)}}.sk-square-jelly-box,.sk-square-jelly-box>div{position:relative;box-sizing:border-box}.sk-square-jelly-box{width:100%;height:100%;font-size:0}.sk-square-jelly-box>div{display:inline-block;float:none;background-color:currentColor;border:0 solid currentColor}.sk-square-jelly-box>div:nth-child(1),.sk-square-jelly-box>div:nth-child(2){position:absolute;left:0;width:100%}.sk-square-jelly-box>div:nth-child(1){top:-25%;z-index:99997;height:100%;border-radius:10%;-webkit-animation:.6s linear -.1s infinite square-jelly-box-animate;animation:.6s linear -.1s infinite square-jelly-box-animate}.sk-square-jelly-box>div:nth-child(2){bottom:-9%;height:10%;background:#000;border-radius:50%;opacity:.2;-webkit-animation:.6s linear -.1s infinite square-jelly-box-shadow;animation:.6s linear -.1s infinite square-jelly-box-shadow}@-webkit-keyframes square-jelly-box-animate{17%{border-bottom-right-radius:10%}25%{-webkit-transform:translateY(25%) rotate(22.5deg);transform:translateY(25%) rotate(22.5deg)}50%{border-bottom-right-radius:100%;-webkit-transform:translateY(50%) scale(1,.9) rotate(45deg);transform:translateY(50%) scale(1,.9) rotate(45deg)}75%{-webkit-transform:translateY(25%) rotate(67.5deg);transform:translateY(25%) rotate(67.5deg)}100%{-webkit-transform:translateY(0) rotate(90deg);transform:translateY(0) rotate(90deg)}}@keyframes square-jelly-box-animate{17%{border-bottom-right-radius:10%}25%{-webkit-transform:translateY(25%) rotate(22.5deg);transform:translateY(25%) rotate(22.5deg)}50%{border-bottom-right-radius:100%;-webkit-transform:translateY(50%) scale(1,.9) rotate(45deg);transform:translateY(50%) scale(1,.9) rotate(45deg)}75%{-webkit-transform:translateY(25%) rotate(67.5deg);transform:translateY(25%) rotate(67.5deg)}100%{-webkit-transform:translateY(0) rotate(90deg);transform:translateY(0) rotate(90deg)}}@-webkit-keyframes square-jelly-box-shadow{50%{-webkit-transform:scale(1.25,1);transform:scale(1.25,1)}}@keyframes square-jelly-box-shadow{50%{-webkit-transform:scale(1.25,1);transform:scale(1.25,1)}}.sk-square-loader,.sk-square-loader>div{position:relative;box-sizing:border-box}.sk-square-loader{font-size:0;width:100%;height:100%}.sk-square-loader>div{display:inline-block;float:none;border:3px solid currentColor;width:100%;height:100%;background:0 0;border-radius:0;-webkit-animation:2s infinite square-loader;animation:2s infinite square-loader}.sk-square-loader>div:after{display:inline-block;width:100%;vertical-align:top;content:\"\";background-color:currentColor;-webkit-animation:2s ease-in infinite square-loader-inner;animation:2s ease-in infinite square-loader-inner}@-webkit-keyframes square-loader{0%{-webkit-transform:rotate(0);transform:rotate(0)}25%,50%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%,75%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes square-loader{0%{-webkit-transform:rotate(0);transform:rotate(0)}25%,50%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%,75%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes square-loader-inner{0%,100%,25%{height:0}50%,75%{height:100%}}@keyframes square-loader-inner{0%,100%,25%{height:0}50%,75%{height:100%}}.sk-three-bounce{margin:auto;width:100%;height:100%;text-align:center}.sk-three-bounce>div{margin-top:35%;width:30%;height:30%;background-color:currentColor;border-radius:100%;display:inline-block;-webkit-animation:1.4s ease-in-out infinite both sk-threeBounce-bounceDelay;animation:1.4s ease-in-out infinite both sk-threeBounce-bounceDelay}.bottom-center>.sk-three-bounce>div,.bottom-left>.sk-three-bounce>div,.bottom-right>.sk-three-bounce>div{margin-top:70%!important}.top-center>.sk-three-bounce>div,.top-left>.sk-three-bounce>div,.top-right>.sk-three-bounce>div{margin-top:0!important}.sk-three-bounce>div:nth-child(1){-webkit-animation-delay:-.32s;animation-delay:-.32s}.sk-three-bounce>div:nth-child(2){-webkit-animation-delay:-.16s;animation-delay:-.16s}@-webkit-keyframes sk-threeBounce-bounceDelay{0%,100%,80%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes sk-threeBounce-bounceDelay{0%,100%,80%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.sk-three-strings{width:100%;height:100%}.sk-three-strings>div{position:absolute;box-sizing:border-box;width:100%;height:100%;border-radius:50%}.sk-three-strings>div:nth-child(1){left:0;top:0;-webkit-animation:1s linear infinite sk-threeStrings-rotateOne;animation:1s linear infinite sk-threeStrings-rotateOne;border-bottom:3px solid currentColor}.sk-three-strings>div:nth-child(2){right:0;top:0;-webkit-animation:1s linear infinite sk-threeStrings-rotateTwo;animation:1s linear infinite sk-threeStrings-rotateTwo;border-right:3px solid currentColor}.sk-three-strings>div:nth-child(3){right:0;bottom:0;-webkit-animation:1s linear infinite sk-threeStrings-rotateThree;animation:1s linear infinite sk-threeStrings-rotateThree;border-top:3px solid currentColor}@-webkit-keyframes sk-threeStrings-rotateOne{0%{-webkit-transform:rotateX(35deg) rotateY(-45deg) rotateZ(0);transform:rotateX(35deg) rotateY(-45deg) rotateZ(0)}100%{-webkit-transform:rotateX(35deg) rotateY(-45deg) rotateZ(360deg);transform:rotateX(35deg) rotateY(-45deg) rotateZ(360deg)}}@keyframes sk-threeStrings-rotateOne{0%{-webkit-transform:rotateX(35deg) rotateY(-45deg) rotateZ(0);transform:rotateX(35deg) rotateY(-45deg) rotateZ(0)}100%{-webkit-transform:rotateX(35deg) rotateY(-45deg) rotateZ(360deg);transform:rotateX(35deg) rotateY(-45deg) rotateZ(360deg)}}@-webkit-keyframes sk-threeStrings-rotateTwo{0%{-webkit-transform:rotateX(50deg) rotateY(10deg) rotateZ(0);transform:rotateX(50deg) rotateY(10deg) rotateZ(0)}100%{-webkit-transform:rotateX(50deg) rotateY(10deg) rotateZ(360deg);transform:rotateX(50deg) rotateY(10deg) rotateZ(360deg)}}@keyframes sk-threeStrings-rotateTwo{0%{-webkit-transform:rotateX(50deg) rotateY(10deg) rotateZ(0);transform:rotateX(50deg) rotateY(10deg) rotateZ(0)}100%{-webkit-transform:rotateX(50deg) rotateY(10deg) rotateZ(360deg);transform:rotateX(50deg) rotateY(10deg) rotateZ(360deg)}}@-webkit-keyframes sk-threeStrings-rotateThree{0%{-webkit-transform:rotateX(35deg) rotateY(55deg) rotateZ(0);transform:rotateX(35deg) rotateY(55deg) rotateZ(0)}100%{-webkit-transform:rotateX(35deg) rotateY(55deg) rotateZ(360deg);transform:rotateX(35deg) rotateY(55deg) rotateZ(360deg)}}@keyframes sk-threeStrings-rotateThree{0%{-webkit-transform:rotateX(35deg) rotateY(55deg) rotateZ(0);transform:rotateX(35deg) rotateY(55deg) rotateZ(0)}100%{-webkit-transform:rotateX(35deg) rotateY(55deg) rotateZ(360deg);transform:rotateX(35deg) rotateY(55deg) rotateZ(360deg)}}.sk-wandering-cubes{margin:auto;width:100%;height:100%;position:relative;text-align:center}.sk-wandering-cubes>div{background-color:currentColor;width:25%;height:25%;position:absolute;top:0;left:0;-webkit-animation:1.8s ease-in-out infinite sk-wanderingCubes-cubeMove;animation:1.8s ease-in-out infinite sk-wanderingCubes-cubeMove}.sk-wandering-cubes>div:nth-child(2){-webkit-animation-delay:-.9s;animation-delay:-.9s}@-webkit-keyframes sk-wanderingCubes-cubeMove{25%{-webkit-transform:translateX(290%) rotate(-90deg) scale(.5);transform:translateX(290%) rotate(-90deg) scale(.5)}50%{-webkit-transform:translateX(290%) translateY(290%) rotate(-179deg);transform:translateX(290%) translateY(290%) rotate(-179deg)}50.1%{-webkit-transform:translateX(290%) translateY(290%) rotate(-180deg);transform:translateX(290%) translateY(290%) rotate(-180deg)}75%{-webkit-transform:translateX(0) translateY(290%) rotate(-270deg) scale(.5);transform:translateX(0) translateY(290%) rotate(-270deg) scale(.5)}100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes sk-wanderingCubes-cubeMove{25%{-webkit-transform:translateX(290%) rotate(-90deg) scale(.5);transform:translateX(290%) rotate(-90deg) scale(.5)}50%{-webkit-transform:translateX(290%) translateY(290%) rotate(-179deg);transform:translateX(290%) translateY(290%) rotate(-179deg)}50.1%{-webkit-transform:translateX(290%) translateY(290%) rotate(-180deg);transform:translateX(290%) translateY(290%) rotate(-180deg)}75%{-webkit-transform:translateX(0) translateY(290%) rotate(-270deg) scale(.5);transform:translateX(0) translateY(290%) rotate(-270deg) scale(.5)}100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}"]
              }] }
  ];
  /** @nocollapse */
  NgxUiLoaderComponent.ctorParameters = () => [
      { type: DomSanitizer },
      { type: ChangeDetectorRef },
      { type: NgxUiLoaderService }
  ];
  NgxUiLoaderComponent.propDecorators = {
      bgsColor: [{ type: Input }],
      bgsOpacity: [{ type: Input }],
      bgsPosition: [{ type: Input }],
      bgsSize: [{ type: Input }],
      bgsType: [{ type: Input }],
      fgsColor: [{ type: Input }],
      fgsPosition: [{ type: Input }],
      fgsSize: [{ type: Input }],
      fgsType: [{ type: Input }],
      gap: [{ type: Input }],
      loaderId: [{ type: Input }],
      logoPosition: [{ type: Input }],
      logoSize: [{ type: Input }],
      logoUrl: [{ type: Input }],
      overlayBorderRadius: [{ type: Input }],
      overlayColor: [{ type: Input }],
      pbColor: [{ type: Input }],
      pbDirection: [{ type: Input }],
      pbThickness: [{ type: Input }],
      hasProgressBar: [{ type: Input }],
      text: [{ type: Input }],
      textColor: [{ type: Input }],
      textPosition: [{ type: Input }]
  };
  if (false) {
      /** @type {?} */
      NgxUiLoaderComponent.prototype.bgsColor;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.bgsOpacity;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.bgsPosition;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.bgsSize;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.bgsType;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.fgsColor;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.fgsPosition;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.fgsSize;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.fgsType;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.gap;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.loaderId;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.logoPosition;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.logoSize;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.logoUrl;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.overlayBorderRadius;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.overlayColor;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.pbColor;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.pbDirection;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.pbThickness;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.hasProgressBar;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.text;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.textColor;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.textPosition;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.fgDivs;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.fgSpinnerClass;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.bgDivs;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.bgSpinnerClass;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.showForeground;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.showBackground;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.foregroundClosing;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.backgroundClosing;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.trustedLogoUrl;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.logoTop;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.spinnerTop;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.textTop;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.showForegroundWatcher;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.showBackgroundWatcher;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.foregroundClosingWatcher;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.backgroundClosingWatcher;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.defaultConfig;
      /** @type {?} */
      NgxUiLoaderComponent.prototype.initialized;
      /**
       * @type {?}
       * @private
       */
      NgxUiLoaderComponent.prototype.domSanitizer;
      /**
       * @type {?}
       * @private
       */
      NgxUiLoaderComponent.prototype.changeDetectorRef;
      /**
       * @type {?}
       * @private
       */
      NgxUiLoaderComponent.prototype.ngxService;
  }
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXVpLWxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtdWktbG9hZGVyLyIsInNvdXJjZXMiOlsibGliL2NvcmUvbmd4LXVpLWxvYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQU1MLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBOEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXBELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQVFsRCxNQUFNLE9BQU8sb0JBQW9COzs7Ozs7O0lBa0QvQixZQUFvQixZQUEwQixFQUFVLGlCQUFvQyxFQUFVLFVBQThCO1FBQWhILGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQVUsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUFVLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQ2xJLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztRQUNoRCxJQUFJLENBQUMs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Q2pCLDhDQUF1Qjs7SUFDdkIsOENBQXdCOztJQUN4Qiw4Q0FBd0I7O0lBQ3hCLGlEQUEyQjs7SUFDM0IsaURBQTJCOztJQUUzQiw4Q0FBZ0M7O0lBQ2hDLHVDQUFtQjs7SUFDbkIsMENBQXNCOztJQUN0Qix1Q0FBbUI7O0lBRW5CLHFEQUFvQzs7SUFDcEMscURBQW9DOztJQUNwQyx3REFBdUM7O0lBQ3ZDLHdEQUF1Qzs7SUFFdkMsNkNBQWlDOztJQUNqQywyQ0FBcUI7Ozs7O0lBS1QsNENBQWtDOzs7OztJQUFFLGlEQUE0Qzs7Ozs7SUFBRSwwQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlLFxuICBPbkRlc3Ryb3ksXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZVJlc291cmNlVXJsLCBTYWZlU3R5bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE5neFVpTG9hZGVyU2VydmljZSB9IGZyb20gJy4vbmd4LXVpLWxvYWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBOZ3hVaUxvYWRlckNvbmZpZyB9IGZyb20gJy4uL3V0aWxzL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRGlyZWN0aW9uVHlwZSwgUG9zaXRpb25UeXBlLCBTcGlubmVyVHlwZSB9IGZyb20gJy4uL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IFBPU0lUSU9OLCBQQl9ESVJFQ1RJT04sIFNQSU5ORVIgfSBmcm9tICcuLi91dGlscy9lbnVtcyc7XG5pbXBvcnQgeyBTUElOTkVSX0NPTkZJRyB9IGZyb20gJy4uL3V0aWxzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTaG93RXZlbnQgfSBmcm9tICcuLi91dGlscy9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGNvZXJjZU51bWJlciB9IGZyb20gJy4uL3V0aWxzL2Z1bmN0aW9ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC11aS1sb2FkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vbmd4LXVpLWxvYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25neC11aS1sb2FkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTmd4VWlMb2FkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgQElucHV0KCkgYmdzQ29sb3I6IHN0cmluZztcbiAgQElucHV0KCkgYmdzT3BhY2l0eTogbnVtYmVyO1xuICBASW5wdXQoKSBiZ3NQb3NpdGlvbjogUG9zaXRpb25UeXBlO1xuICBASW5wdXQoKSBiZ3NTaXplOiBudW1iZXI7XG4gIEBJbnB1dCgpIGJnc1R5cGU6IFNwaW5uZXJUeXBlO1xuICBASW5wdXQoKSBmZ3NDb2xvcjogc3RyaW5nO1xuICBASW5wdXQoKSBmZ3NQb3NpdGlvbjogUG9zaXRpb25UeXBlO1xuICBASW5wdXQoKSBmZ3NTaXplOiBudW1iZXI7XG4gIEBJbnB1dCgpIGZnc1R5cGU6IFNwaW5uZXJUeXBlO1xuICBASW5wdXQoKSBnYXA6IG51bWJlcjtcbiAgQElucHV0KCkgbG9hZGVySWQ6IHN0cmluZztcbiAgQElucHV0KCkgbG9nb1Bvc2l0aW9uOiBQb3NpdGlvblR5cGU7XG4gIEBJbnB1dCgpIGxvZ29TaXplOiBudW1iZXI7XG4gIEBJbnB1dCgpIGxvZ29Vcmw6IHN0cmluZztcbiAgQElucHV0KCkgb3ZlcmxheUJvcmRlclJhZGl1czogc3RyaW5nO1xuICBASW5wdXQoKSBvdmVybGF5Q29sb3I6IHN0cmluZztcbiAgQElucHV0KCkgcGJDb2xvcjogc3RyaW5nO1xuICBASW5wdXQoKSBwYkRpcmVjdGlvbjogRGlyZWN0aW9uVHlwZTtcbiAgQElucHV0KCkgcGJUaGlja25lc3M6IG51bWJlcjtcbiAgQElucHV0KCkgaGFzUHJvZ3Jlc3NCYXI6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRleHQ6IHN0cmluZztcbiAgQElucHV0KCkgdGV4dENvbG9yOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRleHRQb3NpdGlvbjogUG9zaXRpb25UeXBlO1xuXG4gIGZnRGl2czogbnVtYmVyW107XG4gIGZnU3Bpbm5lckNsYXNzOiBzdHJpbmc7XG4gIGJnRGl2czogbnVtYmVyW107XG4gIGJnU3Bpbm5lckNsYXNzOiBzdHJpbmc7XG4gIHNob3dGb3JlZ3JvdW5kOiBib29sZWFuO1xuICBzaG93QmFja2dyb3VuZDogYm9vbGVhbjtcbiAgZm9yZWdyb3VuZENsb3Npbmc6IGJvb2xlYW47XG4gIGJhY2tncm91bmRDbG9zaW5nOiBib29sZWFuO1xuXG4gIHRydXN0ZWRMb2dvVXJsOiBTYWZlUmVzb3VyY2VVcmw7XG4gIGxvZ29Ub3A6IFNhZmVTdHlsZTtcbiAgc3Bpbm5lclRvcDogU2FmZVN0eWxlO1xuICB0ZXh0VG9wOiBTYWZlU3R5bGU7XG5cbiAgc2hvd0ZvcmVncm91bmRXYXRjaGVyOiBTdWJzY3JpcHRpb247XG4gIHNob3dCYWNrZ3JvdW5kV2F0Y2hlcjogU3Vic2NyaXB0aW9uO1xuICBmb3JlZ3JvdW5kQ2xvc2luZ1dhdGNoZXI6IFN1YnNjcmlwdGlvbjtcbiAgYmFja2dyb3VuZENsb3NpbmdXYXRjaGVyOiBTdWJzY3JpcHRpb247XG5cbiAgZGVmYXVsdENvbmZpZzogTmd4VWlMb2FkZXJDb25maWc7XG4gIGluaXRpYWxpemVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvclxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplciwgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgbmd4U2VydmljZTogTmd4VWlMb2FkZXJTZXJ2aWNlKSB7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuZGVmYXVsdENvbmZpZyA9IHRoaXMubmd4U2VydmljZS5nZXREZWZhdWx0Q29uZmlnKCk7XG5cbiAgICB0aGlzLmJnc0NvbG9yID0gdGhpcy5kZWZhdWx0Q29uZmlnLmJnc0NvbG9yO1xuICAgIHRoaXMuYmdzT3BhY2l0eSA9IHRoaXMuZGVmYXVsdENvbmZpZy5iZ3NPcGFjaXR5O1xuICAgIHRoaXMuYmdzUG9zaXRpb24gPSB0aGlzLmRlZmF1bHRDb25maWcuYmdzUG9zaXRpb247XG4gICAgdGhpcy5iZ3NTaXplID0gdGhpcy5kZWZhdWx0Q29uZmlnLmJnc1NpemU7XG4gICAgdGhpcy5iZ3NUeXBlID0gdGhpcy5kZWZhdWx0Q29uZmlnLmJnc1R5cGU7XG4gICAgdGhpcy5mZ3NDb2xvciA9IHRoaXMuZGVmYXVsdENvbmZpZy5mZ3NDb2xvcjtcbiAgICB0aGlzLmZnc1Bvc2l0aW9uID0gdGhpcy5kZWZhdWx0Q29uZmlnLmZnc1Bvc2l0aW9uO1xuICAgIHRoaXMuZmdzU2l6ZSA9IHRoaXMuZGVmYXVsdENvbmZpZy5mZ3NTaXplO1xuICAgIHRoaXMuZmdzVHlwZSA9IHRoaXMuZGVmYXVsdENvbmZpZy5mZ3NUeXBlO1xuICAgIHRoaXMuZ2FwID0gdGhpcy5kZWZhdWx0Q29uZmlnLmdhcDtcbiAgICB0aGlzLmxvYWRlcklkID0gdGhpcy5kZWZhdWx0Q29uZmlnLm1hc3RlckxvYWRlcklkO1xuICAgIHRoaXMubG9nb1Bvc2l0aW9uID0gdGhpcy5kZWZhdWx0Q29uZmlnLmxvZ29Qb3NpdGlvbjtcbiAgICB0aGlzLmxvZ29TaXplID0gdGhpcy5kZWZhdWx0Q29uZmlnLmxvZ29TaXplO1xuICAgIHRoaXMubG9nb1VybCA9IHRoaXMuZGVmYXVsdENvbmZpZy5sb2dvVXJsO1xuICAgIHRoaXMub3ZlcmxheUJvcmRlclJhZGl1cyA9IHRoaXMuZGVmYXVsdENvbmZpZy5vdmVybGF5Qm9yZGVyUmFkaXVzO1xuICAgIHRoaXMub3ZlcmxheUNvbG9yID0gdGhpcy5kZWZhdWx0Q29uZmlnLm92ZXJsYXlDb2xvcjtcbiAgICB0aGlzLnBiQ29sb3IgPSB0aGlzLmRlZmF1bHRDb25maWcucGJDb2xvcjtcbiAgICB0aGlzLnBiRGlyZWN0aW9uID0gdGhpcy5kZWZhdWx0Q29uZmlnLnBiRGlyZWN0aW9uO1xuICAgIHRoaXMucGJUaGlja25lc3MgPSB0aGlzLmRlZmF1bHRDb25maWcucGJUaGlja25lc3M7XG4gICAgdGhpcy5oYXNQcm9ncmVzc0JhciA9IHRoaXMuZGVmYXVsdENvbmZpZy5oYXNQcm9ncmVzc0JhcjtcbiAgICB0aGlzLnRleHQgPSB0aGlzLmRlZmF1bHRDb25maWcudGV4dDtcbiAgICB0aGlzLnRleHRDb2xvciA9IHRoaXMuZGVmYXVsdENvbmZpZy50ZXh0Q29sb3I7XG4gICAgdGhpcy50ZXh0UG9zaXRpb24gPSB0aGlzLmRlZmF1bHRDb25maWcudGV4dFBvc2l0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIGluaXQgZXZlbnRcbiAgICovXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZVNwaW5uZXJzKCk7XG4gICAgdGhpcy5uZ3hTZXJ2aWNlLmJpbmRMb2FkZXJEYXRhKHRoaXMubG9hZGVySWQpO1xuICAgIHRoaXMuZGV0ZXJtaW5lUG9zaXRpb25zKCk7XG5cbiAgICB0aGlzLmJnc1Bvc2l0aW9uID0gdGhpcy52YWxpZGF0ZSgnYmdzUG9zaXRpb24nLCB0aGlzLmJnc1Bvc2l0aW9uLCBQT1NJVElPTiwgdGhpcy5kZWZhdWx0Q29uZmlnLmJnc1Bvc2l0aW9uKSBhcyBQb3NpdGlvblR5cGU7XG5cbiAgICB0aGlzLnRydXN0ZWRMb2dvVXJsID0gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHRoaXMubG9nb1VybCk7XG5cbiAgICB0aGlzLnBiRGlyZWN0aW9uID0gdGhpcy52YWxpZGF0ZSgncGJEaXJlY3Rpb24nLCB0aGlzLnBiRGlyZWN0aW9uLCBQQl9ESVJFQ1RJT04sIHRoaXMuZGVmYXVsdENvbmZpZy5wYkRpcmVjdGlvbikgYXMgRGlyZWN0aW9uVHlwZTtcblxuICAgIHRoaXMuc2hvd0ZvcmVncm91bmRXYXRjaGVyID0gdGhpcy5uZ3hTZXJ2aWNlLnNob3dGb3JlZ3JvdW5kJFxuICAgICAgLnBpcGUoZmlsdGVyKChzaG93RXZlbnQ6IFNob3dFdmVudCkgPT4gdGhpcy5sb2FkZXJJZCA9PT0gc2hvd0V2ZW50LmxvYWRlcklkKSlcbiAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd0ZvcmVncm91bmQgPSBkYXRhLmlzU2hvdztcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5zaG93QmFja2dyb3VuZFdhdGNoZXIgPSB0aGlzLm5neFNlcnZpY2Uuc2hvd0JhY2tncm91bmQkXG4gICAgICAucGlwZShmaWx0ZXIoKHNob3dFdmVudDogU2hvd0V2ZW50KSA9PiB0aGlzLmxvYWRlcklkID09PSBzaG93RXZlbnQubG9hZGVySWQpKVxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgdGhpcy5zaG93QmFja2dyb3VuZCA9IGRhdGEuaXNTaG93O1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmZvcmVncm91bmRDbG9zaW5nV2F0Y2hlciA9IHRoaXMubmd4U2VydmljZS5mb3JlZ3JvdW5kQ2xvc2luZyRcbiAgICAgIC5waXBlKGZpbHRlcigoc2hvd0V2ZW50OiBTaG93RXZlbnQpID0+IHRoaXMubG9hZGVySWQgPT09IHNob3dFdmVudC5sb2FkZXJJZCkpXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICB0aGlzLmZvcmVncm91bmRDbG9zaW5nID0gZGF0YS5pc1Nob3c7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuYmFja2dyb3VuZENsb3NpbmdXYXRjaGVyID0gdGhpcy5uZ3hTZXJ2aWNlLmJhY2tncm91bmRDbG9zaW5nJFxuICAgICAgLnBpcGUoZmlsdGVyKChzaG93RXZlbnQ6IFNob3dFdmVudCkgPT4gdGhpcy5sb2FkZXJJZCA9PT0gc2hvd0V2ZW50LmxvYWRlcklkKSlcbiAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZENsb3NpbmcgPSBkYXRhLmlzU2hvdztcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIGNoYW5nZXMgZXZlbnRcbiAgICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiZ3NUeXBlQ2hhbmdlOiBTaW1wbGVDaGFuZ2UgPSBjaGFuZ2VzLmJnc1R5cGU7XG4gICAgY29uc3QgYmdzUG9zaXRpb25DaGFuZ2U6IFNpbXBsZUNoYW5nZSA9IGNoYW5nZXMuYmdzUG9zaXRpb247XG4gICAgY29uc3QgZmdzVHlwZUNoYW5nZTogU2ltcGxlQ2hhbmdlID0gY2hhbmdlcy5mZ3NUeXBlO1xuICAgIGNvbnN0IGxvYWRlcklkQ2hhbmdlOiBTaW1wbGVDaGFuZ2UgPSBjaGFuZ2VzLmxvYWRlcklkO1xuICAgIGNvbnN0IGxvZ29VcmxDaGFuZ2U6IFNpbXBsZUNoYW5nZSA9IGNoYW5nZXMubG9nb1VybDtcbiAgICBjb25zdCBwYkRpcmVjdGlvbkNoYW5nZTogU2ltcGxlQ2hhbmdlID0gY2hhbmdlcy5wYkRpcmVjdGlvbjtcblxuICAgIGlmIChmZ3NUeXBlQ2hhbmdlIHx8IGJnc1R5cGVDaGFuZ2UpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVNwaW5uZXJzKCk7XG4gICAgfVxuXG4gICAgaWYgKGxvYWRlcklkQ2hhbmdlKSB7XG4gICAgICB0aGlzLm5neFNlcnZpY2UudXBkYXRlTG9hZGVySWQobG9hZGVySWRDaGFuZ2UucHJldmlvdXNWYWx1ZSwgdGhpcy5sb2FkZXJJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5kZXRlcm1pbmVQb3NpdGlvbnMoKTtcblxuICAgIGlmIChiZ3NQb3NpdGlvbkNoYW5nZSkge1xuICAgICAgdGhpcy5iZ3NQb3NpdGlvbiA9IHRoaXMudmFsaWRhdGUoJ2Jnc1Bvc2l0aW9uJywgdGhpcy5iZ3NQb3NpdGlvbiwgUE9TSVRJT04sIHRoaXMuZGVmYXVsdENvbmZpZy5iZ3NQb3NpdGlvbikgYXMgUG9zaXRpb25UeXBlO1xuICAgIH1cblxuICAgIGlmIChsb2dvVXJsQ2hhbmdlKSB7XG4gICAgICB0aGlzLnRydXN0ZWRMb2dvVXJsID0gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHRoaXMubG9nb1VybCk7XG4gICAgfVxuXG4gICAgaWYgKHBiRGlyZWN0aW9uQ2hhbmdlKSB7XG4gICAgICB0aGlzLnBiRGlyZWN0aW9uID0gdGhpcy52YWxpZGF0ZSgncGJEaXJlY3Rpb24nLCB0aGlzLnBiRGlyZWN0aW9uLCBQQl9ESVJFQ1RJT04sIHRoaXMuZGVmYXVsdENvbmZpZy5wYkRpcmVjdGlvbikgYXMgRGlyZWN0aW9uVHlwZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBzcGlubmVyc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplU3Bpbm5lcnMoKTogdm9pZCB7XG4gICAgdGhpcy5mZ3NUeXBlID0gdGhpcy52YWxpZGF0ZSgnZmdzVHlwZScsIHRoaXMuZmdzVHlwZSwgU1BJTk5FUiwgdGhpcy5kZWZhdWx0Q29uZmlnLmZnc1R5cGUpIGFzIFNwaW5uZXJUeXBlO1xuICAgIHRoaXMuYmdzVHlwZSA9IHRoaXMudmFsaWRhdGUoJ2Jnc1R5cGUnLCB0aGlzLmJnc1R5cGUsIFNQSU5ORVIsIHRoaXMuZGVmYXVsdENvbmZpZy5iZ3NUeXBlKSBhcyBTcGlubmVyVHlwZTtcblxuICAgIHRoaXMuZmdEaXZzID0gQXJyYXkoU1BJTk5FUl9DT05GSUdbdGhpcy5mZ3NUeXBlXS5kaXZzKS5maWxsKDEpO1xuICAgIHRoaXMuZmdTcGlubmVyQ2xhc3MgPSBTUElOTkVSX0NPTkZJR1t0aGlzLmZnc1R5cGVdLmNsYXNzO1xuICAgIHRoaXMuYmdEaXZzID0gQXJyYXkoU1BJTk5FUl9DT05GSUdbdGhpcy5iZ3NUeXBlXS5kaXZzKS5maWxsKDEpO1xuICAgIHRoaXMuYmdTcGlubmVyQ2xhc3MgPSBTUElOTkVSX0NPTkZJR1t0aGlzLmJnc1R5cGVdLmNsYXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgcG9zaXRpb25zIG9mIHNwaW5uZXIsIGxvZ28gYW5kIHRleHRcbiAgICovXG4gIHByaXZhdGUgZGV0ZXJtaW5lUG9zaXRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuZmdzUG9zaXRpb24gPSB0aGlzLnZhbGlkYXRlKCdmZ3NQb3NpdGlvbicsIHRoaXMuZmdzUG9zaXRpb24sIFBPU0lUSU9OLCB0aGlzLmRlZmF1bHRDb25maWcuZmdzUG9zaXRpb24pIGFzIFBvc2l0aW9uVHlwZTtcbiAgICB0aGlzLmxvZ29Qb3NpdGlvbiA9IHRoaXMudmFsaWRhdGUoJ2xvZ29Qb3NpdGlvbicsIHRoaXMubG9nb1Bvc2l0aW9uLCBQT1NJVElPTiwgdGhpcy5kZWZhdWx0Q29uZmlnLmxvZ29Qb3NpdGlvbikgYXMgUG9zaXRpb25UeXBlO1xuICAgIHRoaXMudGV4dFBvc2l0aW9uID0gdGhpcy52YWxpZGF0ZSgndGV4dFBvc2l0aW9uJywgdGhpcy50ZXh0UG9zaXRpb24sIFBPU0lUSU9OLCB0aGlzLmRlZmF1bHRDb25maWcudGV4dFBvc2l0aW9uKSBhcyBQb3NpdGlvblR5cGU7XG4gICAgdGhpcy5nYXAgPSBjb2VyY2VOdW1iZXIodGhpcy5nYXAsIHRoaXMuZGVmYXVsdENvbmZpZy5nYXApO1xuXG4gICAgdGhpcy5sb2dvVG9wID0gJ2luaXRpYWwnO1xuICAgIHRoaXMuc3Bpbm5lclRvcCA9ICdpbml0aWFsJztcbiAgICB0aGlzLnRleHRUb3AgPSAnaW5pdGlhbCc7XG4gICAgY29uc3QgdGV4dFNpemUgPSAyNDtcblxuICAgIGlmICh0aGlzLmxvZ29Qb3NpdGlvbi5zdGFydHNXaXRoKCdjZW50ZXInKSkge1xuICAgICAgdGhpcy5sb2dvVG9wID0gJzUwJSc7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvZ29Qb3NpdGlvbi5zdGFydHNXaXRoKCd0b3AnKSkge1xuICAgICAgdGhpcy5sb2dvVG9wID0gJzMwcHgnO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZnc1Bvc2l0aW9uLnN0YXJ0c1dpdGgoJ2NlbnRlcicpKSB7XG4gICAgICB0aGlzLnNwaW5uZXJUb3AgPSAnNTAlJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmdzUG9zaXRpb24uc3RhcnRzV2l0aCgndG9wJykpIHtcbiAgICAgIHRoaXMuc3Bpbm5lclRvcCA9ICczMHB4JztcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0UG9zaXRpb24uc3RhcnRzV2l0aCgnY2VudGVyJykpIHtcbiAgICAgIHRoaXMudGV4dFRvcCA9ICc1MCUnO1xuICAgIH0gZWxzZSBpZiAodGhpcy50ZXh0UG9zaXRpb24uc3RhcnRzV2l0aCgndG9wJykpIHtcbiAgICAgIHRoaXMudGV4dFRvcCA9ICczMHB4JztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mZ3NQb3NpdGlvbiA9PT0gUE9TSVRJT04uY2VudGVyQ2VudGVyKSB7XG4gICAgICBpZiAodGhpcy5sb2dvVXJsICYmIHRoaXMubG9nb1Bvc2l0aW9uID09PSBQT1NJVElPTi5jZW50ZXJDZW50ZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudGV4dCAmJiB0aGlzLnRleHRQb3NpdGlvbiA9PT0gUE9TSVRJT04uY2VudGVyQ2VudGVyKSB7XG4gICAgICAgICAgLy8gbG9nbywgc3Bpbm5lciBhbmQgdGV4dFxuICAgICAgICAgIHRoaXMubG9nb1RvcCA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShcbiAgICAgICAgICAgIGBjYWxjKDUwJSAtICR7dGhpcy5mZ3NTaXplIC8gMn1weCAtICR7dGV4dFNpemUgLyAyfXB4IC0gJHt0aGlzLmdhcH1weClgXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnNwaW5uZXJUb3AgPSB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoYGNhbGMoNTAlICsgJHt0aGlzLmxvZ29TaXplIC8gMn1weCAtICR7dGV4dFNpemUgLyAyfXB4KWApO1xuICAgICAgICAgIHRoaXMudGV4dFRvcCA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShcbiAgICAgICAgICAgIGBjYWxjKDUwJSArICR7dGhpcy5sb2dvU2l6ZSAvIDJ9cHggKyAke3RoaXMuZ2FwfXB4ICsgJHt0aGlzLmZnc1NpemUgLyAyfXB4KWBcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGxvZ28gYW5kIHNwaW5uZXJcbiAgICAgICAgICB0aGlzLmxvZ29Ub3AgPSB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoYGNhbGMoNTAlIC0gJHt0aGlzLmZnc1NpemUgLyAyfXB4IC0gJHt0aGlzLmdhcCAvIDJ9cHgpYCk7XG4gICAgICAgICAgdGhpcy5zcGlubmVyVG9wID0gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKGBjYWxjKDUwJSArICR7dGhpcy5sb2dvU2l6ZSAvIDJ9cHggKyAke3RoaXMuZ2FwIC8gMn1weClgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMudGV4dCAmJiB0aGlzLnRleHRQb3NpdGlvbiA9PT0gUE9TSVRJT04uY2VudGVyQ2VudGVyKSB7XG4gICAgICAgICAgLy8gc3Bpbm5lciBhbmQgdGV4dFxuICAgICAgICAgIHRoaXMuc3Bpbm5lclRvcCA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShgY2FsYyg1MCUgLSAke3RleHRTaXplIC8gMn1weCAtICR7dGhpcy5nYXAgLyAyfXB4KWApO1xuICAgICAgICAgIHRoaXMudGV4dFRvcCA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShgY2FsYyg1MCUgKyAke3RoaXMuZmdzU2l6ZSAvIDJ9cHggKyAke3RoaXMuZ2FwIC8gMn1weClgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5sb2dvVXJsICYmIHRoaXMubG9nb1Bvc2l0aW9uID09PSBQT1NJVElPTi5jZW50ZXJDZW50ZXIgJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dFBvc2l0aW9uID09PSBQT1NJVElPTi5jZW50ZXJDZW50ZXIpIHtcbiAgICAgICAgLy8gbG9nbyBhbmQgdGV4dFxuICAgICAgICB0aGlzLmxvZ29Ub3AgPSB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoYGNhbGMoNTAlIC0gJHt0ZXh0U2l6ZSAvIDJ9cHggLSAke3RoaXMuZ2FwIC8gMn1weClgKTtcbiAgICAgICAgdGhpcy50ZXh0VG9wID0gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKGBjYWxjKDUwJSArICR7dGhpcy5sb2dvU2l6ZSAvIDJ9cHggKyAke3RoaXMuZ2FwIC8gMn1weClgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlKGlucHV0TmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCB2YWxpZFR5cGVPYmo6IHt9LCBmYWxsYmFja1ZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChcbiAgICAgIE9iamVjdC5rZXlzKHZhbGlkVHlwZU9iailcbiAgICAgICAgLm1hcChrID0+IHZhbGlkVHlwZU9ialtrXSlcbiAgICAgICAgLmZpbmRJbmRleCh2ID0+IHYgPT09IHZhbHVlKSA9PT0gLTFcbiAgICApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtuZ3gtdWktbG9hZGVyXSAtICR7aW5wdXROYW1lfSAoXCIke3ZhbHVlfVwiKSBpcyBpbnZhbGlkLiBgICsgYERlZmF1bHQgdmFsdWUgXCIke2ZhbGxiYWNrVmFsdWV9XCIgaXMgdXNlZC5gKTtcbiAgICAgIHJldHVybiBmYWxsYmFja1ZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogT24gZGVzdHJveSBldmVudFxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5uZ3hTZXJ2aWNlLmRlc3Ryb3lMb2FkZXJEYXRhKHRoaXMubG9hZGVySWQpO1xuICAgIGlmICh0aGlzLnNob3dGb3JlZ3JvdW5kV2F0Y2hlcikge1xuICAgICAgdGhpcy5zaG93Rm9yZWdyb3VuZFdhdGNoZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2hvd0JhY2tncm91bmRXYXRjaGVyKSB7XG4gICAgICB0aGlzLnNob3dCYWNrZ3JvdW5kV2F0Y2hlci51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb3JlZ3JvdW5kQ2xvc2luZ1dhdGNoZXIpIHtcbiAgICAgIHRoaXMuZm9yZWdyb3VuZENsb3NpbmdXYXRjaGVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmJhY2tncm91bmRDbG9zaW5nV2F0Y2hlcikge1xuICAgICAgdGhpcy5iYWNrZ3JvdW5kQ2xvc2luZ1dhdGNoZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==