dbweb-common
Version:
用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上
143 lines • 15.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ElementRef, ViewChild, HostBinding } from '@angular/core';
import { MatSnackBar } from '@angular/material/snack-bar';
import { AuthloginService, AuthService, ProjectService } from 'dbweb-core';
import { Md5 } from 'ts-md5';
var LoginComponent = /** @class */ (function () {
function LoginComponent(auth, project, snackBar, authLogin) {
this.auth = auth;
this.project = project;
this.snackBar = snackBar;
this.authLogin = authLogin;
this.hide = true;
this.eyehide = true;
this.hostClass = true;
this.logging = false;
}
/**
* @return {?}
*/
LoginComponent.prototype.userNameEnter = /**
* @return {?}
*/
function () {
this.pwd.nativeElement.focus();
};
/**
* @return {?}
*/
LoginComponent.prototype.passwordEnter = /**
* @return {?}
*/
function () {
this.btnOk.nativeElement.click();
};
/**
* @return {?}
*/
LoginComponent.prototype.btnOkClick = /**
* @return {?}
*/
function () {
var _this = this;
if (this.snack) {
this.snack.dismiss();
}
if (!this.password || !this.userName) {
this.snack = this.snackBar.open('用户名或密码不能为空', '确定', {
verticalPosition: 'top',
duration: 5000
});
return;
}
this.logging = true;
this.auth.login({ UserName: this.userName, Md5Password: (/** @type {?} */ (Md5.hashStr(this.password))) }).subscribe((/**
* @param {?} n
* @return {?}
*/
function (n) {
_this.authLogin.loginDefault(n);
_this.logging = false;
}), (/**
* @param {?} err
* @return {?}
*/
function (err) {
console.log(err);
_this.logging = false;
_this.snack = _this.snackBar.open('用户名或密码错误', '确定', { verticalPosition: 'top' });
}));
};
/**
* @return {?}
*/
LoginComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () { };
/**
* @return {?}
*/
LoginComponent.prototype.refresh = /**
* @return {?}
*/
function () {
window.location.reload();
};
LoginComponent.decorators = [
{ type: Component, args: [{
selector: 'common-app-login',
template: "<ng-container [ngSwitch]=\"project.applicationStatus\">\r\n\t<!-- \u9690\u85CF\u5185\u5BB9 -->\r\n\t<div *ngSwitchCase=\"'start-init'\" class=\"flash-div\">\r\n\t\t<div class=\"\u8FDE\u63A5\u670D\u52A1\">\r\n\t\t\t<img src=\"/front/assets/login/\u8FDE\u63A5\u4E2D.png\" alt=\"\u8FDE\u63A5\u4E2D...\" />\r\n\t\t</div>\r\n\t</div>\r\n\t<div *ngSwitchCase=\"'init-error'\" class=\"flash-div\">\r\n\t\t<div class=\"\u8FDE\u63A5\u670D\u52A1\">\r\n\t\t\t<img src=\"/front/assets/login/\u670D\u52A1\u5668\u6545\u969C.png\" alt=\"\u670D\u52A1\u5668\u6545\u969C\" />\r\n\t\t\t<button class=\"\u5237\u65B0\u6309\u94AE\" mat-stroked-button (click)=\"refresh()\">\r\n\t\t\t\t\u5237\u65B0\u8BD5\u8BD5\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<!-- *** \u4E3B\u4F53 *** -->\r\n\t<div class=\"login-main\" *ngSwitchCase=\"'init-done'\">\r\n\r\n\t\t<!-- ** \u767B\u5F55\u7A97\u53E3 ** -->\r\n\t\t<div class=\"login-container\">\r\n\t\t\t<!-- * \u6CE8\u518C\u6587\u5B57\u7A97\u53E3\u6846\u67B6 * -->\r\n\t\t\t<div class=\"login-wrapper\">\r\n\r\n\t\t\t\t<!-- \u767B\u5F55\u6587\u672C -->\r\n\t\t\t\t<div class=\"log-tit\">\u767B\u5F55</div>\r\n\r\n\t\t\t\t<!-- \u7528\u6237\u540D -->\r\n\t\t\t\t<div class=\"input-wrapper\">\r\n\t\t\t\t\t<mat-form-field class=\"user-input\">\r\n\t\t\t\t\t\t<input matInput #username autofocus placeholder=\"\u7528\u6237\u540D\" maxlength=\"30\"\r\n\t\t\t\t\t\t\t[(ngModel)]=\"userName\" (keyup.enter)=\"userNameEnter()\" [disabled]=\"logging\">\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<!-- \u5BC6\u7801 -->\r\n\t\t\t\t<div class=\"input-wrapper\">\r\n\t\t\t\t\t<mat-form-field class=\"pwd-input\">\r\n\t\t\t\t\t\t<!-- left -->\r\n\t\t\t\t\t\t<input matInput #edtPassword placeholder=\"\u5BC6\u7801\" [(ngModel)]=\"password\"\r\n\t\t\t\t\t\t\t[type]=\"hide ? 'password' : 'text'\" maxlength=\"30\" [disabled]=\"logging\"\r\n\t\t\t\t\t\t\t(keyup.enter)=\"passwordEnter()\">\r\n\t\t\t\t\t\t<!-- right icon -->\r\n\t\t\t\t\t\t<mat-icon class=\"eye-icon\" matSuffix\r\n\t\t\t\t\t\t\t[svgIcon]=\"hide ? 'visibility' : 'visibility_off'\"\r\n\t\t\t\t\t\t\t(click)=\"hide = !hide\">\r\n\t\t\t\t\t\t</mat-icon>\r\n\t\t\t\t\t</mat-form-field>\r\n\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<!-- \u767B\u5F55\u6309\u94AE -->\r\n\t\t\t\t<div class=\"login-btn-wrapper\">\r\n\t\t\t\t\t<button class=\"login-button\" #btnOk mat-button (click)=\"btnOkClick()\" [disabled]=\"logging\">\r\n\t\t\t\t\t\t<ng-container *ngIf=\"logging;else notlogging\">\r\n\t\t\t\t\t\t\t<mat-spinner diameter=\"40\"></mat-spinner>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t<ng-template #notlogging>\r\n\t\t\t\t\t\t\t\u767B\u5F55\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t<!-- ** \u5DE6\u4E0A\u89D2\u7CFB\u7EDF\u540D\u79F0 ** -->\r\n\t<div class=\"login-title\">{{project.projectLabel}}</div>\r\n\r\n</ng-container>\r\n",
styles: ["@charset \"UTF-8\";.login-main{display:-moz-flex;display:-ms-flex;display:flex;justify-content:center;align-items:center;width:100%;height:100%;background-image:url(/front/assets/login/bg.svg);background-size:cover}.login-main .login-container{display:flex;justify-content:flex-end;align-items:center;width:640px;height:448px;background-image:url(/front/assets/login/bg_login.png);background-size:cover;border-radius:8px;box-shadow:0 5px 13px 0 rgba(0,0,0,.14)}.login-main .login-container .login-wrapper{display:flex;flex-direction:column;justify-content:space-around;width:370px;height:390px;padding:0 45px;box-sizing:border-box}.login-main .login-container .login-wrapper .log-tit{font-size:36px;font-weight:700}.login-main .login-container .login-wrapper .pwd-input,.login-main .login-container .login-wrapper .user-input{width:100%;height:30px}.login-main .login-container .login-wrapper .pwd-input{margin-top:6px}.login-main .login-container .login-wrapper .pwd-input input{width:90%}.login-main .login-container .login-wrapper .pwd-input .eye-icon{position:absolute;right:0;top:-18px;font-size:16px}.login-main .login-container .login-wrapper .login-btn-wrapper{display:flex;justify-content:flex-end}.login-main .login-container .login-wrapper .login-btn-wrapper .mat-spinner circle,.login-main .login-container .login-wrapper .login-btn-wrapper ::ng-deep .mat-progress-spinner circle{stroke:#fff}.login-main .login-container .login-wrapper .login-btn-wrapper .login-button{display:flex;justify-content:center;font-size:24px;color:#fff;background-color:#2196f3;width:168px;height:56px;box-shadow:rgba(33,150,243,.5) 0 5px 13px 2px;margin-top:80px}.login-title{position:absolute;top:20px;left:20px;color:rgba(0,0,0,.6)}.flash-div{width:100%;height:100%;display:-moz-flex;display:-ms-flex;display:flex;justify-content:center;align-items:center;overflow-y:auto}.\u8FDE\u63A5\u670D\u52A1{max-width:560px;width:100%;text-align:center}.\u8FDE\u63A5\u670D\u52A1 img{width:100%;height:auto}.\u5237\u65B0\u6309\u94AE{border:1px solid #2196f3;color:#2196f3;width:120px;height:40px;font-size:16px;font-weight:700}"]
}] }
];
/** @nocollapse */
LoginComponent.ctorParameters = function () { return [
{ type: AuthService },
{ type: ProjectService },
{ type: MatSnackBar },
{ type: AuthloginService }
]; };
LoginComponent.propDecorators = {
hostClass: [{ type: HostBinding, args: ['class.login',] }],
username: [{ type: ViewChild, args: ['username', { static: false },] }],
pwd: [{ type: ViewChild, args: ['edtPassword', { static: false },] }],
btnOk: [{ type: ViewChild, args: ['btnOk', { read: ElementRef, static: false },] }]
};
return LoginComponent;
}());
export { LoginComponent };
if (false) {
/** @type {?} */
LoginComponent.prototype.userName;
/** @type {?} */
LoginComponent.prototype.password;
/** @type {?} */
LoginComponent.prototype.hide;
/** @type {?} */
LoginComponent.prototype.eyehide;
/** @type {?} */
LoginComponent.prototype.hostClass;
/** @type {?} */
LoginComponent.prototype.username;
/** @type {?} */
LoginComponent.prototype.pwd;
/** @type {?} */
LoginComponent.prototype.btnOk;
/** @type {?} */
LoginComponent.prototype.snack;
/** @type {?} */
LoginComponent.prototype.logging;
/** @type {?} */
LoginComponent.prototype.auth;
/** @type {?} */
LoginComponent.prototype.project;
/** @type {?} */
LoginComponent.prototype.snackBar;
/** @type {?} */
LoginComponent.prototype.authLogin;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGJ3ZWItY29tbW9uLyIsInNvdXJjZXMiOlsibGliL2xvZ2luL2xvZ2luLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQVUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLEVBQUUsV0FBVyxFQUFrQyxNQUFNLDZCQUE2QixDQUFDO0FBQzFGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFN0I7SUFxQkMsd0JBQ1EsSUFBaUIsRUFDakIsT0FBdUIsRUFDdkIsUUFBcUIsRUFDckIsU0FBMkI7UUFIM0IsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBakJuQyxTQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ1osWUFBTyxHQUFHLElBQUksQ0FBQztRQUVhLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFTN0MsWUFBTyxHQUFHLEtBQUssQ0FBQztJQU1iLENBQUM7Ozs7SUFDSixzQ0FBYTs7O0lBQWI7UUFDQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoQyxDQUFDOzs7O0lBQ0Qsc0NBQWE7OztJQUFiO1FBQ0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbEMsQ0FBQzs7OztJQUNELG1DQUFVOzs7SUFBVjtRQUFBLGlCQXVCQztRQXRCQSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRTtnQkFDbkQsZ0JBQWdCLEVBQUUsS0FBSztnQkFDdkIsUUFBUSxFQUFFLElBQUk7YUFDZCxDQUFDLENBQUM7WUFDSCxPQUFPO1NBQ1A7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxtQkFBQSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBVSxFQUFFLENBQUMsQ0FBQyxTQUFTOzs7O1FBQ3hHLFVBQUEsQ0FBQztZQUNBLEtBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLEtBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUM7Ozs7UUFDRCxVQUFBLEdBQUc7WUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLEtBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLEtBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEYsQ0FBQyxFQUNELENBQUM7SUFDSCxDQUFDOzs7O0lBRUQsaUNBQVE7OztJQUFSLGNBQVksQ0FBQzs7OztJQUViLGdDQUFPOzs7SUFBUDtRQUNDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDMUIsQ0FBQzs7Z0JBOURELFNBQVMsU0FBQztvQkFDVixRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixvMkZBQXFDOztpQkFFckM7Ozs7Z0JBUDBCLFdBQVc7Z0JBQUUsY0FBYztnQkFEN0MsV0FBVztnQkFDWCxnQkFBZ0I7Ozs0QkFjdkIsV0FBVyxTQUFDLGFBQWE7MkJBQ3pCLFNBQVMsU0FBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO3NCQUV2QyxTQUFTLFNBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTt3QkFHMUMsU0FBUyxTQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTs7SUE4Q3hELHFCQUFDO0NBQUEsQUEvREQsSUErREM7U0ExRFksY0FBYzs7O0lBQzFCLGtDQUFpQjs7SUFDakIsa0NBQWlCOztJQUNqQiw4QkFBWTs7SUFDWixpQ0FBZTs7SUFFZixtQ0FBNkM7O0lBQzdDLGtDQUNxQjs7SUFDckIsNkJBRWdCOztJQUNoQiwrQkFDa0I7O0lBQ2xCLCtCQUFzQzs7SUFDdEMsaUNBQWdCOztJQUVmLDhCQUF3Qjs7SUFDeEIsaUNBQThCOztJQUM5QixrQ0FBNEI7O0lBQzVCLG1DQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBWaWV3Q2hpbGQsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyLCBNYXRTbmFja0JhclJlZiwgU2ltcGxlU25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBBdXRobG9naW5TZXJ2aWNlLCBBdXRoU2VydmljZSwgUHJvamVjdFNlcnZpY2UgfSBmcm9tICdkYndlYi1jb3JlJztcclxuaW1wb3J0IHsgTWQ1IH0gZnJvbSAndHMtbWQ1JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnY29tbW9uLWFwcC1sb2dpbicsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2xvZ2luLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9sb2dpbi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2dpbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblx0dXNlck5hbWU6IHN0cmluZztcclxuXHRwYXNzd29yZDogc3RyaW5nO1xyXG5cdGhpZGUgPSB0cnVlO1xyXG5cdGV5ZWhpZGUgPSB0cnVlO1xyXG5cclxuXHRASG9zdEJpbmRpbmcoJ2NsYXNzLmxvZ2luJykgaG9zdENsYXNzID0gdHJ1ZTtcclxuXHRAVmlld0NoaWxkKCd1c2VybmFtZScsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG5cdHVzZXJuYW1lOiBFbGVtZW50UmVmO1xyXG5cdEBWaWV3Q2hpbGQoJ2VkdFBhc3N3b3JkJywgeyBzdGF0aWM6IGZhbHNlIH0pIC8vIOiuv+mXruS7jue7hOS7tuS4reiuv+mXruaooeadv+S4reS5puWGmeeahERPTeOAgeWtkOe7hOS7tuWSjOaMh+S7pOeahOWKn+iDvVxyXG5cdC8vIOiuv+mXruS7jue7hOS7tuS4reiuv+mXruaooeadv+S4reS5puWGmeeahERPTeOAgeWtkOe7hOS7tuWSjOaMh+S7pOeahOWKn+iDvVxyXG5cdHB3ZDogRWxlbWVudFJlZjtcclxuXHRAVmlld0NoaWxkKCdidG5PaycsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiBmYWxzZSB9KVxyXG5cdGJ0bk9rOiBFbGVtZW50UmVmO1xyXG5cdHNuYWNrOiBNYXRTbmFja0JhclJlZjxTaW1wbGVTbmFja0Jhcj47XHJcblx0bG9nZ2luZyA9IGZhbHNlO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIGF1dGg6IEF1dGhTZXJ2aWNlLFxyXG5cdFx0cHVibGljIHByb2plY3Q6IFByb2plY3RTZXJ2aWNlLFxyXG5cdFx0cHVibGljIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcclxuXHRcdHB1YmxpYyBhdXRoTG9naW46IEF1dGhsb2dpblNlcnZpY2VcclxuXHQpIHt9XHJcblx0dXNlck5hbWVFbnRlcigpIHtcclxuXHRcdHRoaXMucHdkLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuXHR9XHJcblx0cGFzc3dvcmRFbnRlcigpIHtcclxuXHRcdHRoaXMuYnRuT2submF0aXZlRWxlbWVudC5jbGljaygpO1xyXG5cdH1cclxuXHRidG5Pa0NsaWNrKCkge1xyXG5cdFx0aWYgKHRoaXMuc25hY2spIHtcclxuXHRcdFx0dGhpcy5zbmFjay5kaXNtaXNzKCk7XHJcblx0XHR9XHJcblx0XHRpZiAoIXRoaXMucGFzc3dvcmQgfHwgIXRoaXMudXNlck5hbWUpIHtcclxuXHRcdFx0dGhpcy5zbmFjayA9IHRoaXMuc25hY2tCYXIub3Blbign55So5oi35ZCN5oiW5a+G56CB5LiN6IO95Li656m6JywgJ+ehruWumicsIHtcclxuXHRcdFx0XHR2ZXJ0aWNhbFBvc2l0aW9uOiAndG9wJyxcclxuXHRcdFx0XHRkdXJhdGlvbjogNTAwMFxyXG5cdFx0XHR9KTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5sb2dnaW5nID0gdHJ1ZTtcclxuXHRcdHRoaXMuYXV0aC5sb2dpbih7IFVzZXJOYW1lOiB0aGlzLnVzZXJOYW1lLCBNZDVQYXNzd29yZDogTWQ1Lmhhc2hTdHIodGhpcy5wYXNzd29yZCkgYXMgc3RyaW5nIH0pLnN1YnNjcmliZShcclxuXHRcdFx0biA9PiB7XHJcblx0XHRcdFx0dGhpcy5hdXRoTG9naW4ubG9naW5EZWZhdWx0KG4pO1xyXG5cdFx0XHRcdHRoaXMubG9nZ2luZyA9IGZhbHNlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnIgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0dGhpcy5sb2dnaW5nID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5zbmFjayA9IHRoaXMuc25hY2tCYXIub3Blbign55So5oi35ZCN5oiW5a+G56CB6ZSZ6K+vJywgJ+ehruWumicsIHsgdmVydGljYWxQb3NpdGlvbjogJ3RvcCcgfSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpIHt9XHJcblxyXG5cdHJlZnJlc2goKSB7XHJcblx0XHR3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcblx0fVxyXG59XHJcbiJdfQ==