ngx-tencent-im
Version:
Instant messaging for Angular.
77 lines • 17 kB
JavaScript
import { Component } from '@angular/core';
import { currentConversationSelector, conversationListSelector } from '../../store/selectors';
import { showAction } from '../../store/actions';
import { MESSAGE_STATUS } from '../../shared.data';
import * as i0 from "@angular/core";
import * as i1 from "@ngrx/store";
import * as i2 from "../../tim-helper.service";
import * as i3 from "../conversation-item/conversation-item.component";
import * as i4 from "ng-zorro-antd/modal";
import * as i5 from "ng-zorro-antd/form";
import * as i6 from "@angular/common";
import * as i7 from "ng-zorro-antd/grid";
import * as i8 from "ng-zorro-antd/input";
import * as i9 from "@angular/forms";
export class ConversationListComponent {
constructor(store, timHelperService) {
this.store = store;
this.timHelperService = timHelperService;
this.conversationList = [];
this.timeout = null;
this.showDialog = false;
this.userID = '';
}
ngOnInit() {
this.storeSubscription = this.store.select(currentConversationSelector)
.subscribe(res => {
this.currentConversation = res;
});
// 获取当前list会话
this.subscription = this.store.select(conversationListSelector)
.subscribe(res => {
this.conversationList = res;
});
}
;
add() {
this.showDialog = true;
}
handleOk() {
if (this.userID !== '#SYSTEM') {
this.timHelperService.checkoutConversation(`C2C${this.userID}`);
this.showDialog = false;
}
this.userID = '';
}
handleCancel() {
this.showDialog = false;
}
refresh() {
// if (!this.timeout) {
// this.timeout = setTimeout(() => {
// this.timeout = null;
// }, 1000);
// }
// 拉取会话列表
this.timHelperService.tim.getConversationList().then(({ data }) => {
this.store.dispatch(showAction({ msgType: MESSAGE_STATUS.success, message: '刷新成功!' }));
}).catch((imError) => {
console.error('getConversationList error:', imError); // 获取会话列表失败的相关信息
});
}
ngOnDestroy() {
if (this.subscription) {
this.subscription.unsubscribe();
}
if (this.storeSubscription) {
this.storeSubscription.unsubscribe();
}
}
}
ConversationListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ConversationListComponent, deps: [{ token: i1.Store }, { token: i2.TimHelperService }], target: i0.ɵɵFactoryTarget.Component });
ConversationListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: ConversationListComponent, selector: "app-conversation-list", ngImport: i0, template: "<div class=\"list-container\">\r\n <div class=\"header-bar\">\r\n <button title=\"\u5237\u65B0\u5217\u8868\" (click)=\"refresh()\">\r\n <i class=\"tim-icon-refresh\"></i>\r\n </button>\r\n <button title=\"\u521B\u5EFA\u4F1A\u8BDD\" (click)=\"add()\">\r\n <i class=\"tim-icon-add\"></i>\r\n </button>\r\n </div>\r\n <div class=\"scroll-container\">\r\n <app-conversation-item [currentConversation]=\"currentConversation\" [conversation]=\"item\"\r\n *ngFor=\"let item of conversationList\">\r\n </app-conversation-item>\r\n </div>\r\n</div>\r\n\r\n<nz-modal [(nzVisible)]=\"showDialog\" nzTitle=\"\u53D1\u8D77\u4F1A\u8BDD\" [nzContent]=\"content\"\r\n (nzOnCancel)=\"handleCancel()\" (nzOnOk)=\"handleOk()\">\r\n</nz-modal>\r\n\r\n<ng-template #content>\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"6\">\u7528\u6237ID</nz-form-label>\r\n <nz-form-control [nzSpan]=\"14\">\r\n <input nz-input [(ngModel)]=\"userID\">\r\n </nz-form-control>\r\n </nz-form-item>\r\n</ng-template>\r\n", styles: [".list-container{height:100%;width:100%;display:flex flex-direction column}.header-bar{flex-shrink:0;height:50px;border-bottom:1px solid #303841;padding:10px 10px 10px 20px}.header-bar button{float:right;display:inline-block;cursor:pointer;background:#303841;border:none;color:#76828c;box-sizing:border-box;transition:.3s;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;margin:0 10px 0 0;padding:0;width:30px;height:30px;line-height:34px;font-size:24px;text-align:center;white-space:nowrap;border-radius:50%;outline:0}.header-bar button:hover{transform:rotate(360deg);color:#5cadff}.header-bar .scroll-container{overflow-y:scroll;flex:1}.bottom-circle-btn{position:absolute;bottom:20px;right:20px}.refresh{bottom:70px}\n"], components: [{ type: i3.ConversationItemComponent, selector: "app-conversation-item", inputs: ["currentConversation", "conversation"] }, { type: i4.NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzContent", "nzComponentParams", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { type: i5.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon"], exportAs: ["nzFormLabel"] }, { type: i5.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }], directives: [{ type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { type: i7.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { type: i8.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "disabled"], exportAs: ["nzInput"] }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ConversationListComponent, decorators: [{
type: Component,
args: [{ selector: 'app-conversation-list', template: "<div class=\"list-container\">\r\n <div class=\"header-bar\">\r\n <button title=\"\u5237\u65B0\u5217\u8868\" (click)=\"refresh()\">\r\n <i class=\"tim-icon-refresh\"></i>\r\n </button>\r\n <button title=\"\u521B\u5EFA\u4F1A\u8BDD\" (click)=\"add()\">\r\n <i class=\"tim-icon-add\"></i>\r\n </button>\r\n </div>\r\n <div class=\"scroll-container\">\r\n <app-conversation-item [currentConversation]=\"currentConversation\" [conversation]=\"item\"\r\n *ngFor=\"let item of conversationList\">\r\n </app-conversation-item>\r\n </div>\r\n</div>\r\n\r\n<nz-modal [(nzVisible)]=\"showDialog\" nzTitle=\"\u53D1\u8D77\u4F1A\u8BDD\" [nzContent]=\"content\"\r\n (nzOnCancel)=\"handleCancel()\" (nzOnOk)=\"handleOk()\">\r\n</nz-modal>\r\n\r\n<ng-template #content>\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"6\">\u7528\u6237ID</nz-form-label>\r\n <nz-form-control [nzSpan]=\"14\">\r\n <input nz-input [(ngModel)]=\"userID\">\r\n </nz-form-control>\r\n </nz-form-item>\r\n</ng-template>\r\n", styles: [".list-container{height:100%;width:100%;display:flex flex-direction column}.header-bar{flex-shrink:0;height:50px;border-bottom:1px solid #303841;padding:10px 10px 10px 20px}.header-bar button{float:right;display:inline-block;cursor:pointer;background:#303841;border:none;color:#76828c;box-sizing:border-box;transition:.3s;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;margin:0 10px 0 0;padding:0;width:30px;height:30px;line-height:34px;font-size:24px;text-align:center;white-space:nowrap;border-radius:50%;outline:0}.header-bar button:hover{transform:rotate(360deg);color:#5cadff}.header-bar .scroll-container{overflow-y:scroll;flex:1}.bottom-circle-btn{position:absolute;bottom:20px;right:20px}.refresh{bottom:70px}\n"] }]
}], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.TimHelperService }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlbmNlbnQtaW0vc3JjL2NvbnZlcnNhdGlvbi9jb252ZXJzYXRpb24tbGlzdC9jb252ZXJzYXRpb24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVuY2VudC1pbS9zcmMvY29udmVyc2F0aW9uL2NvbnZlcnNhdGlvbi1saXN0L2NvbnZlcnNhdGlvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBTTdELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7O0FBUW5ELE1BQU0sT0FBTyx5QkFBeUI7SUFTcEMsWUFDVSxLQUFZLEVBQ1osZ0JBQWtDO1FBRGxDLFVBQUssR0FBTCxLQUFLLENBQU87UUFDWixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBVjVDLHFCQUFnQixHQUF3QixFQUFFLENBQUM7UUFDM0MsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsV0FBTSxHQUFHLEVBQUUsQ0FBQztJQVFSLENBQUM7SUFFTCxRQUFRO1FBRU4sSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLDJCQUEyQixDQUFDO2FBQ3BFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNmLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxHQUFHLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFFTCxhQUFhO1FBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQzthQUM1RCxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUFBLENBQUM7SUFFRixHQUFHO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssYUFBYSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsT0FBTztRQUNMLHVCQUF1QjtRQUN2QixzQ0FBc0M7UUFDdEMsMkJBQTJCO1FBRTNCLGNBQWM7UUFDZCxJQUFJO1FBRUosU0FBUztRQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDaEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV6RixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO1FBQ3hFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNqQztRQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN0QztJQUNILENBQUM7O3NIQXBFVSx5QkFBeUI7MEdBQXpCLHlCQUF5Qiw2RENqQnRDLCtnQ0E0QkE7MkZEWGEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGltSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3RpbS1oZWxwZXIuc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuXHJcbmltcG9ydCB7IENvbnZlcnNhdGlvbiB9IGZyb20gJ3RpbS1qcy1zZGsnO1xyXG5pbXBvcnQgeyBjdXJyZW50Q29udmVyc2F0aW9uU2VsZWN0b3IsIGNvbnZlcnNhdGlvbkxpc3RTZWxlY3RvciB9IGZyb20gJy4uLy4uL3N0b3JlL3NlbGVjdG9ycyc7XHJcbmltcG9ydCB7IHNob3dBY3Rpb24gfSBmcm9tICcuLi8uLi9zdG9yZS9hY3Rpb25zJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1FU1NBR0VfU1RBVFVTIH0gZnJvbSAnLi4vLi4vc2hhcmVkLmRhdGEnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWNvbnZlcnNhdGlvbi1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29udmVyc2F0aW9uLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbnZlcnNhdGlvbi1saXN0LmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbnZlcnNhdGlvbkxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgY29udmVyc2F0aW9uTGlzdDogQXJyYXk8Q29udmVyc2F0aW9uPiA9IFtdO1xyXG4gIHRpbWVvdXQgPSBudWxsO1xyXG4gIHNob3dEaWFsb2cgPSBmYWxzZTtcclxuICB1c2VySUQgPSAnJztcclxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBzdG9yZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIGN1cnJlbnRDb252ZXJzYXRpb246IENvbnZlcnNhdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcclxuICAgIHByaXZhdGUgdGltSGVscGVyU2VydmljZTogVGltSGVscGVyU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuc3RvcmVTdWJzY3JpcHRpb24gPSB0aGlzLnN0b3JlLnNlbGVjdChjdXJyZW50Q29udmVyc2F0aW9uU2VsZWN0b3IpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDb252ZXJzYXRpb24gPSByZXM7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIOiOt+WPluW9k+WJjWxpc3TkvJror51cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5zdG9yZS5zZWxlY3QoY29udmVyc2F0aW9uTGlzdFNlbGVjdG9yKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb25MaXN0ID0gcmVzO1xyXG4gICAgICB9KTtcclxuICB9O1xyXG5cclxuICBhZGQoKSB7XHJcbiAgICB0aGlzLnNob3dEaWFsb2cgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlT2soKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy51c2VySUQgIT09ICdAVElNI1NZU1RFTScpIHtcclxuICAgICAgdGhpcy50aW1IZWxwZXJTZXJ2aWNlLmNoZWNrb3V0Q29udmVyc2F0aW9uKGBDMkMke3RoaXMudXNlcklEfWApO1xyXG4gICAgICB0aGlzLnNob3dEaWFsb2cgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMudXNlcklEID0gJyc7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dEaWFsb2cgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goKSB7XHJcbiAgICAvLyBpZiAoIXRoaXMudGltZW91dCkge1xyXG4gICAgLy8gICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xyXG5cclxuICAgIC8vICAgfSwgMTAwMCk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8g5ouJ5Y+W5Lya6K+d5YiX6KGoXHJcbiAgICB0aGlzLnRpbUhlbHBlclNlcnZpY2UudGltLmdldENvbnZlcnNhdGlvbkxpc3QoKS50aGVuKCh7IGRhdGEgfSkgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHNob3dBY3Rpb24oeyBtc2dUeXBlOiBNRVNTQUdFX1NUQVRVUy5zdWNjZXNzLCBtZXNzYWdlOiAn5Yi35paw5oiQ5Yqf77yBJyB9KSk7XHJcblxyXG4gICAgfSkuY2F0Y2goKGltRXJyb3IpID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignZ2V0Q29udmVyc2F0aW9uTGlzdCBlcnJvcjonLCBpbUVycm9yKTsgLy8g6I635Y+W5Lya6K+d5YiX6KGo5aSx6LSl55qE55u45YWz5L+h5oGvXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdG9yZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN0b3JlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibGlzdC1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWJhclwiPlxyXG4gICAgPGJ1dHRvbiB0aXRsZT1cIuWIt+aWsOWIl+ihqFwiIChjbGljayk9XCJyZWZyZXNoKClcIj5cclxuICAgICAgPGkgY2xhc3M9XCJ0aW0taWNvbi1yZWZyZXNoXCI+PC9pPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIHRpdGxlPVwi5Yib5bu65Lya6K+dXCIgKGNsaWNrKT1cImFkZCgpXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwidGltLWljb24tYWRkXCI+PC9pPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInNjcm9sbC1jb250YWluZXJcIj5cclxuICAgIDxhcHAtY29udmVyc2F0aW9uLWl0ZW0gW2N1cnJlbnRDb252ZXJzYXRpb25dPVwiY3VycmVudENvbnZlcnNhdGlvblwiIFtjb252ZXJzYXRpb25dPVwiaXRlbVwiXHJcbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbnZlcnNhdGlvbkxpc3RcIj5cclxuICAgIDwvYXBwLWNvbnZlcnNhdGlvbi1pdGVtPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuei1tb2RhbCBbKG56VmlzaWJsZSldPVwic2hvd0RpYWxvZ1wiIG56VGl0bGU9XCLlj5HotbfkvJror51cIiBbbnpDb250ZW50XT1cImNvbnRlbnRcIlxyXG4gIChuek9uQ2FuY2VsKT1cImhhbmRsZUNhbmNlbCgpXCIgKG56T25Payk9XCJoYW5kbGVPaygpXCI+XHJcbjwvbnotbW9kYWw+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbnRlbnQ+XHJcbiAgPG56LWZvcm0taXRlbT5cclxuICAgIDxuei1mb3JtLWxhYmVsIFtuelNwYW5dPVwiNlwiPueUqOaIt0lEPC9uei1mb3JtLWxhYmVsPlxyXG4gICAgPG56LWZvcm0tY29udHJvbCBbbnpTcGFuXT1cIjE0XCI+XHJcbiAgICAgIDxpbnB1dCBuei1pbnB1dCBbKG5nTW9kZWwpXT1cInVzZXJJRFwiPlxyXG4gICAgPC9uei1mb3JtLWNvbnRyb2w+XHJcbiAgPC9uei1mb3JtLWl0ZW0+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==