ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
149 lines • 18 kB
JavaScript
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
import { isPlatformBrowser, NgIf } from '@angular/common';
import { ChangeDetectionStrategy, Component, Input, ViewChild, Output, EventEmitter, Inject, PLATFORM_ID } from '@angular/core';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { NzButtonModule } from 'ng-zorro-antd/button';
import { NzIconModule } from 'ng-zorro-antd/icon';
import { NzSpinModule } from 'ng-zorro-antd/spin';
import { drawCanvas, plotQRCodeData } from './qrcode';
import * as i0 from "@angular/core";
import * as i1 from "ng-zorro-antd/i18n";
import * as i2 from "ng-zorro-antd/spin";
import * as i3 from "ng-zorro-antd/button";
import * as i4 from "ng-zorro-antd/core/transition-patch";
import * as i5 from "ng-zorro-antd/icon";
export class NzQRCodeComponent {
constructor(i18n, el, cdr, platformId) {
this.i18n = i18n;
this.el = el;
this.cdr = cdr;
this.platformId = platformId;
this.nzValue = '';
this.nzPadding = 0;
this.nzColor = '#000000';
this.nzBgColor = '#FFFFFF';
this.nzSize = 160;
this.nzIcon = '';
this.nzIconSize = 40;
this.nzBordered = true;
this.nzStatus = 'active';
this.nzLevel = 'M';
this.nzRefresh = new EventEmitter();
// https://github.com/angular/universal-starter/issues/538#issuecomment-365518693
// canvas is not supported by the SSR DOM
this.isBrowser = true;
this.destroy$ = new Subject();
this.isBrowser = isPlatformBrowser(this.platformId);
this.cdr.markForCheck();
}
ngOnInit() {
this.el.nativeElement.style.backgroundColor = this.nzBgColor;
this.i18n.localeChange.pipe(takeUntil(this.destroy$)).subscribe(() => {
this.locale = this.i18n.getLocaleData('QRCode');
this.cdr.markForCheck();
});
}
ngOnChanges(changes) {
const { nzValue, nzIcon, nzLevel, nzSize, nzIconSize, nzColor, nzPadding, nzBgColor } = changes;
if ((nzValue || nzIcon || nzLevel || nzSize || nzIconSize || nzColor || nzPadding || nzBgColor) && this.canvas) {
this.drawCanvasQRCode();
}
if (nzBgColor) {
this.el.nativeElement.style.backgroundColor = this.nzBgColor;
}
}
ngAfterViewInit() {
this.drawCanvasQRCode();
}
reloadQRCode() {
this.drawCanvasQRCode();
this.nzRefresh.emit('refresh');
}
drawCanvasQRCode() {
if (this.canvas) {
drawCanvas(this.canvas.nativeElement, plotQRCodeData(this.nzValue, this.nzLevel), this.nzSize, 10, this.nzPadding, this.nzColor, this.nzBgColor, this.nzIconSize, this.nzIcon);
}
}
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: NzQRCodeComponent, deps: [{ token: i1.NzI18nService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: NzQRCodeComponent, isStandalone: true, selector: "nz-qrcode", inputs: { nzValue: "nzValue", nzPadding: "nzPadding", nzColor: "nzColor", nzBgColor: "nzBgColor", nzSize: "nzSize", nzIcon: "nzIcon", nzIconSize: "nzIconSize", nzBordered: "nzBordered", nzStatus: "nzStatus", nzLevel: "nzLevel" }, outputs: { nzRefresh: "nzRefresh" }, host: { properties: { "class.ant-qrcode-border": "nzBordered" }, classAttribute: "ant-qrcode" }, viewQueries: [{ propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true }], exportAs: ["nzQRCode"], usesOnChanges: true, ngImport: i0, template: `
<div class="ant-qrcode-mask" *ngIf="nzStatus !== 'active'">
<nz-spin *ngIf="nzStatus === 'loading'"></nz-spin>
<div *ngIf="nzStatus === 'expired'">
<p class="ant-qrcode-expired">{{ locale.expired }}</p>
<button nz-button nzType="link" (click)="reloadQRCode()">
<span nz-icon nzType="reload" nzTheme="outline"></span>
<span>{{ locale.refresh }}</span>
</button>
</div>
</div>
<ng-container *ngIf="isBrowser">
<canvas #canvas></canvas>
</ng-container>
`, isInline: true, dependencies: [{ kind: "ngmodule", type: NzSpinModule }, { kind: "component", type: i2.NzSpinComponent, selector: "nz-spin", inputs: ["nzIndicator", "nzSize", "nzTip", "nzDelay", "nzSimple", "nzSpinning"], exportAs: ["nzSpin"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i3.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i4.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i5.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: NzQRCodeComponent, decorators: [{
type: Component,
args: [{
changeDetection: ChangeDetectionStrategy.OnPush,
selector: 'nz-qrcode',
exportAs: 'nzQRCode',
template: `
<div class="ant-qrcode-mask" *ngIf="nzStatus !== 'active'">
<nz-spin *ngIf="nzStatus === 'loading'"></nz-spin>
<div *ngIf="nzStatus === 'expired'">
<p class="ant-qrcode-expired">{{ locale.expired }}</p>
<button nz-button nzType="link" (click)="reloadQRCode()">
<span nz-icon nzType="reload" nzTheme="outline"></span>
<span>{{ locale.refresh }}</span>
</button>
</div>
</div>
<ng-container *ngIf="isBrowser">
<canvas #canvas></canvas>
</ng-container>
`,
host: {
class: 'ant-qrcode',
'[class.ant-qrcode-border]': `nzBordered`
},
imports: [NzSpinModule, NgIf, NzButtonModule, NzIconModule],
standalone: true
}]
}], ctorParameters: () => [{ type: i1.NzI18nService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: Object, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }], propDecorators: { canvas: [{
type: ViewChild,
args: ['canvas', { static: false }]
}], nzValue: [{
type: Input
}], nzPadding: [{
type: Input
}], nzColor: [{
type: Input
}], nzBgColor: [{
type: Input
}], nzSize: [{
type: Input
}], nzIcon: [{
type: Input
}], nzIconSize: [{
type: Input
}], nzBordered: [{
type: Input
}], nzStatus: [{
type: Input
}], nzLevel: [{
type: Input
}], nzRefresh: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJjb2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvcXItY29kZS9xcmNvZGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxLQUFLLEVBRUwsU0FBUyxFQUVULE1BQU0sRUFDTixZQUFZLEVBSVosTUFBTSxFQUNOLFdBQVcsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsVUFBVSxFQUFtQixjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7QUE0QnZFLE1BQU0sT0FBTyxpQkFBaUI7SUFxQjVCLFlBQ1UsSUFBbUIsRUFDbkIsRUFBYyxFQUNkLEdBQXNCLEVBQ0QsVUFBa0I7UUFIdkMsU0FBSSxHQUFKLElBQUksQ0FBZTtRQUNuQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDRCxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBdkJ4QyxZQUFPLEdBQVcsRUFBRSxDQUFDO1FBQ3JCLGNBQVMsR0FBc0IsQ0FBQyxDQUFDO1FBQ2pDLFlBQU8sR0FBVyxTQUFTLENBQUM7UUFDNUIsY0FBUyxHQUFXLFNBQVMsQ0FBQztRQUM5QixXQUFNLEdBQVcsR0FBRyxD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QUFTO21CQUFDO29CQUNULGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxRQUFRLEVBQUUsV0FBVztvQkFDckIsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7R0FjVDtvQkFDRCxJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLFlBQVk7d0JBQ25CLDJCQUEyQixFQUFFLFlBQVk7cUJBQzFDO29CQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLFlBQVksQ0FBQztvQkFDM0QsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzswQkEwQkksTUFBTTsyQkFBQyxXQUFXO3lDQXhCbUIsTUFBTTtzQkFBN0MsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUM3QixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFYSxTQUFTO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25Jbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25EZXN0cm95LFxuICBJbmplY3QsXG4gIFBMQVRGT1JNX0lEXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBOekJ1dHRvbk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvYnV0dG9uJztcbmltcG9ydCB7IE56UVJDb2RlSTE4bkludGVyZmFjZSwgTnpJMThuU2VydmljZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvaTE4bic7XG5pbXBvcnQgeyBOekljb25Nb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2ljb24nO1xuaW1wb3J0IHsgTnpTcGluTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9zcGluJztcblxuaW1wb3J0IHsgZHJhd0NhbnZhcywgRVJST1JfTEVWRUxfTUFQLCBwbG90UVJDb2RlRGF0YSB9IGZyb20gJy4vcXJjb2RlJztcblxuQENvbXBvbmVudCh7XG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzZWxlY3RvcjogJ256LXFyY29kZScsXG4gIGV4cG9ydEFzOiAnbnpRUkNvZGUnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJhbnQtcXJjb2RlLW1hc2tcIiAqbmdJZj1cIm56U3RhdHVzICE9PSAnYWN0aXZlJ1wiPlxuICAgICAgPG56LXNwaW4gKm5nSWY9XCJuelN0YXR1cyA9PT0gJ2xvYWRpbmcnXCI+PC9uei1zcGluPlxuICAgICAgPGRpdiAqbmdJZj1cIm56U3RhdHVzID09PSAnZXhwaXJlZCdcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJhbnQtcXJjb2RlLWV4cGlyZWRcIj57eyBsb2NhbGUuZXhwaXJlZCB9fTwvcD5cbiAgICAgICAgPGJ1dHRvbiBuei1idXR0b24gbnpUeXBlPVwibGlua1wiIChjbGljayk9XCJyZWxvYWRRUkNvZGUoKVwiPlxuICAgICAgICAgIDxzcGFuIG56LWljb24gbnpUeXBlPVwicmVsb2FkXCIgbnpUaGVtZT1cIm91dGxpbmVcIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4+e3sgbG9jYWxlLnJlZnJlc2ggfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQnJvd3NlclwiPlxuICAgICAgPGNhbnZhcyAjY2FudmFzPjwvY2FudmFzPlxuICAgIDwvbmctY29udGFpbmVyPlxuICBgLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdhbnQtcXJjb2RlJyxcbiAgICAnW2NsYXNzLmFudC1xcmNvZGUtYm9yZGVyXSc6IGBuekJvcmRlcmVkYFxuICB9LFxuICBpbXBvcnRzOiBbTnpTcGluTW9kdWxlLCBOZ0lmLCBOekJ1dHRvbk1vZHVsZSwgTnpJY29uTW9kdWxlXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBOelFSQ29kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdjYW52YXMnLCB7IHN0YXRpYzogZmFsc2UgfSkgY2FudmFzITogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XG4gIEBJbnB1dCgpIG56VmFsdWU6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBuelBhZGRpbmc6IG51bWJlciB8IG51bWJlcltdID0gMDtcbiAgQElucHV0KCkgbnpDb2xvcjogc3RyaW5nID0gJyMwMDAwMDAnO1xuICBASW5wdXQoKSBuekJnQ29sb3I6IHN0cmluZyA9ICcjRkZGRkZGJztcbiAgQElucHV0KCkgbnpTaXplOiBudW1iZXIgPSAxNjA7XG4gIEBJbnB1dCgpIG56SWNvbjogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIG56SWNvblNpemU6IG51bWJlciA9IDQwO1xuICBASW5wdXQoKSBuekJvcmRlcmVkOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgbnpTdGF0dXM6ICdhY3RpdmUnIHwgJ2V4cGlyZWQnIHwgJ2xvYWRpbmcnID0gJ2FjdGl2ZSc7XG4gIEBJbnB1dCgpIG56TGV2ZWw6IGtleW9mIHR5cGVvZiBFUlJPUl9MRVZFTF9NQVAgPSAnTSc7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IG56UmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIGxvY2FsZSE6IE56UVJDb2RlSTE4bkludGVyZmFjZTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvdW5pdmVyc2FsLXN0YXJ0ZXIvaXNzdWVzLzUzOCNpc3N1ZWNvbW1lbnQtMzY1NTE4NjkzXG4gIC8vIGNhbnZhcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBTU1IgRE9NXG4gIGlzQnJvd3NlciA9IHRydWU7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaTE4bjogTnpJMThuU2VydmljZSxcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IE9iamVjdFxuICApIHtcbiAgICB0aGlzLmlzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5uekJnQ29sb3I7XG4gICAgdGhpcy5pMThuLmxvY2FsZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMubG9jYWxlID0gdGhpcy5pMThuLmdldExvY2FsZURhdGEoJ1FSQ29kZScpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgeyBuelZhbHVlLCBuekljb24sIG56TGV2ZWwsIG56U2l6ZSwgbnpJY29uU2l6ZSwgbnpDb2xvciwgbnpQYWRkaW5nLCBuekJnQ29sb3IgfSA9IGNoYW5nZXM7XG4gICAgaWYgKChuelZhbHVlIHx8IG56SWNvbiB8fCBuekxldmVsIHx8IG56U2l6ZSB8fCBuekljb25TaXplIHx8IG56Q29sb3IgfHwgbnpQYWRkaW5nIHx8IG56QmdDb2xvcikgJiYgdGhpcy5jYW52YXMpIHtcbiAgICAgIHRoaXMuZHJhd0NhbnZhc1FSQ29kZSgpO1xuICAgIH1cblxuICAgIGlmIChuekJnQ29sb3IpIHtcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLm56QmdDb2xvcjtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kcmF3Q2FudmFzUVJDb2RlKCk7XG4gIH1cblxuICByZWxvYWRRUkNvZGUoKTogdm9pZCB7XG4gICAgdGhpcy5kcmF3Q2FudmFzUVJDb2RlKCk7XG4gICAgdGhpcy5uelJlZnJlc2guZW1pdCgncmVmcmVzaCcpO1xuICB9XG5cbiAgZHJhd0NhbnZhc1FSQ29kZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYW52YXMpIHtcbiAgICAgIGRyYXdDYW52YXMoXG4gICAgICAgIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIHBsb3RRUkNvZGVEYXRhKHRoaXMubnpWYWx1ZSwgdGhpcy5uekxldmVsKSxcbiAgICAgICAgdGhpcy5uelNpemUsXG4gICAgICAgIDEwLFxuICAgICAgICB0aGlzLm56UGFkZGluZyxcbiAgICAgICAgdGhpcy5uekNvbG9yLFxuICAgICAgICB0aGlzLm56QmdDb2xvcixcbiAgICAgICAgdGhpcy5uekljb25TaXplLFxuICAgICAgICB0aGlzLm56SWNvblxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==