tnx-shared 5.3.152 → 5.3.154

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/bundles/tnx-shared.umd.js +70 -883
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/esm2015/components/access-denied-component/access-denied.component.js +2 -2
  6. package/esm2015/components/common-dashboard/common-dashboard.component.js +2 -2
  7. package/esm2015/components/splash-component/splash-component.component.js +2 -2
  8. package/esm2015/tnx-shared.js +63 -67
  9. package/esm2015/tnx-shared.module.js +15 -11
  10. package/fesm2015/tnx-shared.js +9 -742
  11. package/fesm2015/tnx-shared.js.map +1 -1
  12. package/package.json +2 -2
  13. package/tnx-shared.d.ts +62 -66
  14. package/tnx-shared.d.ts.map +1 -1
  15. package/tnx-shared.metadata.json +1 -1
  16. package/tnx-shared.module.d.ts +2 -6
  17. package/tnx-shared.module.d.ts.map +1 -1
  18. package/tnx-shared.module.ngfactory.d.ts.map +1 -1
  19. package/components/splash-component/splash-component-v1/splash-component-v1.component.d.ts +0 -41
  20. package/components/splash-component/splash-component-v1/splash-component-v1.component.d.ts.map +0 -1
  21. package/components/splash-component/splash-component-v1/splash-component-v1.component.ngfactory.d.ts.map +0 -1
  22. package/components/splash-component/splash-component-v1/splash-component-v1.component.scss.shim.ngstyle.d.ts.map +0 -1
  23. package/components/splash-component/splash-component-v2/splash-component-v2.component.d.ts +0 -41
  24. package/components/splash-component/splash-component-v2/splash-component-v2.component.d.ts.map +0 -1
  25. package/components/splash-component/splash-component-v2/splash-component-v2.component.ngfactory.d.ts.map +0 -1
  26. package/components/splash-component/splash-component-v2/splash-component-v2.component.scss.shim.ngstyle.d.ts.map +0 -1
  27. package/components/splash-component/splash-component-v3/splash-component-v3.component.d.ts +0 -41
  28. package/components/splash-component/splash-component-v3/splash-component-v3.component.d.ts.map +0 -1
  29. package/components/splash-component/splash-component-v3/splash-component-v3.component.ngfactory.d.ts.map +0 -1
  30. package/components/splash-component/splash-component-v3/splash-component-v3.component.scss.shim.ngstyle.d.ts.map +0 -1
  31. package/components/splash-component/splash-component-v4/splash-component-v4.component.d.ts +0 -41
  32. package/components/splash-component/splash-component-v4/splash-component-v4.component.d.ts.map +0 -1
  33. package/components/splash-component/splash-component-v4/splash-component-v4.component.ngfactory.d.ts.map +0 -1
  34. package/components/splash-component/splash-component-v4/splash-component-v4.component.scss.shim.ngstyle.d.ts.map +0 -1
  35. package/esm2015/components/splash-component/splash-component-v1/splash-component-v1.component.js +0 -197
  36. package/esm2015/components/splash-component/splash-component-v2/splash-component-v2.component.js +0 -190
  37. package/esm2015/components/splash-component/splash-component-v3/splash-component-v3.component.js +0 -197
  38. package/esm2015/components/splash-component/splash-component-v4/splash-component-v4.component.js +0 -197
@@ -1,190 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Component, Injector } from '@angular/core';
3
- import { Router } from '@angular/router';
4
- import { DeviceDetectorService } from 'ngx-device-detector';
5
- import { ComponentContextService } from '../../../app-context/component-context.service';
6
- import { ComponentBase } from '../../../classes/base/component-base';
7
- import { ComCtxConstants } from '../../../configs/component-context.constant';
8
- import { AuthenService } from '../../../services/authen.service';
9
- import { GlobalService } from '../../../services/global.service';
10
- import { ModuleConfigService } from '../../../services/module-config.service';
11
- import { PermissionService } from '../../../services/permission.service';
12
- import { UserService } from '../../../services/user.service';
13
- export class SplashComponentV2Component extends ComponentBase {
14
- constructor(injector, _moduleConfigService, _permissionService, _deviceDetectorService, _userService, _router, _authenService, _globalService) {
15
- super(injector);
16
- this._moduleConfigService = _moduleConfigService;
17
- this._permissionService = _permissionService;
18
- this._deviceDetectorService = _deviceDetectorService;
19
- this._userService = _userService;
20
- this._router = _router;
21
- this._authenService = _authenService;
22
- this._globalService = _globalService;
23
- this.defaultAvatar = '';
24
- this.appSwitcherItems = [];
25
- this.loaded = false;
26
- this.currentDate = new Date();
27
- this.showDefaultSetting = false;
28
- this.fileApi = '';
29
- this.isOnMobile = false;
30
- this.daysInWeek = ['Chủ nhật', 'Thứ 2', 'Thứ 3', 'Thứ 4', 'Thứ 5', 'Thứ 6', 'Thứ 7'];
31
- this.rootContext.fireEvent('MAIN_CONTENT_ONLY', true);
32
- this.environment = this._moduleConfigService.getConfig().environment;
33
- this.defaultAvatar = this.environment.appMetadata.main.defaultMaleAvatar;
34
- this.fileApi = this.environment.apiDomain.fileEndpoint;
35
- setInterval(() => {
36
- this.currentDate = new Date();
37
- }, 1000);
38
- if (this.rootContext.data.currentAppMetadata && this.rootContext.data.currentAppMetadata && this.rootContext.data.currentAppMetadata.showDefaultSetting != null && this.rootContext.data.currentAppMetadata.showDefaultSetting != undefined) {
39
- this.showDefaultSetting = this.rootContext.data.currentAppMetadata.showDefaultSetting;
40
- }
41
- else {
42
- if (this.environment.appMetadata.main.showDefaultSetting != null && this.environment.appMetadata.main.showDefaultSetting != undefined) {
43
- this.showDefaultSetting = this.environment.appMetadata.main.showDefaultSetting;
44
- }
45
- else {
46
- this.showDefaultSetting = false;
47
- }
48
- }
49
- // Config for authentication
50
- this._globalService.setHeaderState(false);
51
- this._globalService.setMenuState(false);
52
- this.underconstruction = this.environment.underconstruction;
53
- }
54
- ngOnInit() {
55
- if (this._deviceDetectorService.isMobile()) {
56
- this.isOnMobile = true;
57
- }
58
- if (this.rootContext.data.currentUser) {
59
- if (this.rootContext.data.currentUser.gender == 0) {
60
- this.defaultAvatar = this.environment.appMetadata.main.defaultFemaleAvatar;
61
- }
62
- else {
63
- this.defaultAvatar = this.environment.appMetadata.main.defaultMaleAvatar;
64
- }
65
- }
66
- this.rootContext.replaySubscribe(ComCtxConstants.ROOT.USER_LOADED, rs => {
67
- this.currentUser = this._userService.getCurrentUser();
68
- this.loadAppMetadata();
69
- this.loaded = true;
70
- });
71
- if (this.rootModel.allowAnonymous) {
72
- this.loaded = true;
73
- this.loadAppMetadata();
74
- }
75
- }
76
- loadAppMetadata() {
77
- const prmsAppSwicherItem = new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
78
- const arr = [];
79
- for (const ind in this.environment.appMetadata.appSwitcher) {
80
- const element = this.environment.appMetadata.appSwitcher[ind];
81
- const clientId = this.environment.authenticationSettings.clientId;
82
- if (this.rootModel.allowAnonymous && element.allowAnonymous) {
83
- arr.push(element);
84
- }
85
- else if (this.currentUser) {
86
- const isAuthorized = yield this._permissionService.isAuthorized(element.code, `${element.code}.MODULE.${element.code}`.toUpperCase(), true);
87
- if (isAuthorized) {
88
- arr.push(element);
89
- }
90
- }
91
- }
92
- resolve(arr);
93
- }));
94
- prmsAppSwicherItem.then(rs => {
95
- this.appSwitcherItems.length = 0;
96
- if (rs) {
97
- rs.forEach(element => {
98
- if (element.visible) {
99
- if (!this.currentUser) { // allow anonymous
100
- this.appSwitcherItems.push(element);
101
- }
102
- else {
103
- if (this.currentUser.maNguoiHoc && this.currentUser.issuperuser.toLowerCase() != 'true') {
104
- if (element.code.toLowerCase() == 'sv' || element.code.toLowerCase() == 'user') {
105
- this.appSwitcherItems.push(element);
106
- }
107
- }
108
- else {
109
- this.appSwitcherItems.push(element);
110
- }
111
- }
112
- }
113
- });
114
- if (this.appSwitcherItems.length === 1) {
115
- setTimeout(x => this.switchApp(this.appSwitcherItems[0]), 100);
116
- }
117
- }
118
- });
119
- }
120
- switchApp(item) {
121
- this.loaded = false;
122
- if (item.target == '_blank') {
123
- let url = item.url;
124
- if (item.defaultRedirect) {
125
- url += `/${item.defaultRedirect}`;
126
- }
127
- top.location.href = url;
128
- }
129
- else {
130
- if (item.defaultRedirect != '' && !this.rootContext.data.flags.menuTopOpenning) {
131
- this._router.navigateByUrl(item.defaultRedirect);
132
- this.rootContext.data.currentAppMetadata = this.environment.appMetadata.appSwitcher.find(x => x.code == item.code);
133
- if (this.rootContext.data.currentAppMetadata && this.rootContext.data.currentAppMetadata.showDefaultSetting != undefined && this.rootContext.data.currentAppMetadata.showDefaultSetting != null) {
134
- this.showDefaultSetting = this.rootContext.data.currentAppMetadata.showDefaultSetting && this.showDefaultSetting;
135
- }
136
- }
137
- }
138
- }
139
- logout() {
140
- this._authenService.logout();
141
- }
142
- goToPersonal() {
143
- const userMenu = this.environment.appMetadata.appSwitcher.find(x => x.code == 'USER');
144
- this.switchApp(userMenu);
145
- }
146
- getCurrentUserAvatar() {
147
- if (this.rootContext.data.currentUser && this.rootContext.data.currentUser.avatar) {
148
- return `${this.fileApi}/file/public/${this.rootContext.data.currentUser.avatar}/Download`;
149
- }
150
- else {
151
- return this.defaultAvatar;
152
- }
153
- }
154
- getNgayTrongTuan() {
155
- return this.daysInWeek[this.currentDate.getDay()];
156
- }
157
- showProfilePage() {
158
- if (this._userService.isSinhVienAccount()) {
159
- return false;
160
- }
161
- return true;
162
- }
163
- ngOnDestroy() {
164
- super.ngOnDestroy();
165
- this._globalService.setHeaderState(true);
166
- this._globalService.setMenuState(true);
167
- }
168
- login() {
169
- this.rootContext.fireEvent('LOGIN');
170
- }
171
- }
172
- SplashComponentV2Component.decorators = [
173
- { type: Component, args: [{
174
- selector: 'splash-component-v2',
175
- template: "<div *ngIf=\"!loaded\" class=\"wrp-loader\">\n <div class=\"loader\"></div>\n</div>\n<div *ngIf=\"loaded\" class=\"modules-v2\">\n <div class=\"welcome-user\">\n <div class=\"profile-image\">\n <div class=\"tn-full-name\">{{currentUser.fullName}}</div>\n <img class=\"custom-avatar\" [src-fallback]=\"defaultAvatar\" [src]=\"getCurrentUserAvatar()\" />\n <div *ngIf=\"currentUser\" class=\"login\">\n <a class=\"tn-icon-signout\" title=\"\u0110\u0103ng xu\u1EA5t\" (click)=\"logout()\">\n <i class=\"pi pi-sign-out\"></i>\n </a>\n </div>\n </div>\n </div>\n\n <div class=\"module-icons\">\n <div class=\"img-title\">\n <img class=\"tn-custom-logo\" [src]=\"environment.appMetadata.main.logo\"\n [alt]=\"environment.appMetadata.main.owner\">\n <div class=\"title\">\n <h2>{{environment.appMetadata.main.title}}</h2>\n <h1>{{environment.appMetadata.main.owner}}</h1>\n </div>\n <div *ngIf=\"!currentUser\" class=\"login\">\n <a class=\"tn-icon-signin\" title=\"\u0110\u0103ng nh\u1EADp\" (click)=\"login()\">\n <i class=\"pi pi-sign-in\"></i>\u0110\u0103ng nh\u1EADp\n </a>\n </div>\n </div>\n\n <div class=\"div1111-wrapper\">\n <tn-custom-scrollbar *ngIf=\"!isOnMobile\" [config]=\"{'suppressScrollY': true}\">\n <ng-container *ngTemplateOutlet=\"appSwitcher\"></ng-container>\n </tn-custom-scrollbar>\n\n <ng-container *ngIf=\"isOnMobile\">\n <ng-container *ngTemplateOutlet=\"appSwitcher\"></ng-container>\n </ng-container>\n </div>\n\n <div class=\"clock-wrapper\">\n <h1 class=\"clock\">{{currentDate | date:'HH:mm:ss'}}</h1>\n <h4 class=\"data-time\">{{getNgayTrongTuan()}}, ng\u00E0y {{currentDate | date:'dd/MM/yyyy'}}</h4>\n </div>\n </div>\n</div>\n\n<ng-template #appSwitcher>\n <div class=\"div1111\">\n <ng-container *ngFor=\"let item of appSwitcherItems; let ind = index;\">\n <span>\n <a class=\"bg-switcher\" (click)=\"switchApp(item)\">\n <i class=\"{{item.icon}} app-switcher-item-icon\"></i>\n <span>{{ item.title | translate}}</span>\n </a>\n </span>\n </ng-container>\n </div>\n</ng-template>",
176
- providers: [ComponentContextService],
177
- styles: ["body{background-color:#fff;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.wrp-loader{position:absolute;display:inline-block;top:50%;left:50%;transform:translate(-50%,-50%);z-index:101}.wrp-loader .loader{border-radius:50%;border:2px solid #bcdbf5;border-top-color:#3192e1;width:10px;height:10px;color:#607d8b;font-size:10px;animation:load4 1.3s linear infinite;display:block}.modules-v2{position:fixed;top:0;left:0;z-index:100;display:flex;justify-content:center;align-items:center;width:100vw;height:100vh;background-image:url(/assets/images/background-splash.png);background-repeat:no-repeat;background-position:50%;background-size:cover}.modules-v2 div>span{display:inline-block;min-width:100px;height:120px;width:120px;margin:10px;box-shadow:1px 2px 9px 1px #dfd1d1;border-radius:5px;white-space:normal}.modules-v2 div>span>a{height:100%;display:inline-block;position:relative;font-weight:700;cursor:pointer;border-radius:5px;display:flex;flex-direction:column;justify-content:space-evenly}.modules-v2 div>span>a,.modules-v2 div>span>a>span{width:100%;color:#fff;text-decoration:unset;text-align:center}.modules-v2 div>span>a>span{display:inline-block;line-height:1.2;padding:0 5px}.modules-v2 div>span>a>i{font-size:3.5em;width:100%}.modules-v2 .module-icons{text-align:center;color:#666;display:flex;flex-direction:column;justify-content:center;background:hsla(0,0%,100%,.9490196078431372);padding:40px 60px;border-radius:10px;box-shadow:1px 2px 9px 1px rgba(39,23,86,.5215686274509804)}.modules-v2 .module-icons h2{font-size:25px;color:#271756;margin-bottom:15px;margin-top:15px}.modules-v2 .module-icons h1{color:#2f70ac;font-size:35px;margin-top:0;margin-bottom:0}.modules-v2 .module-icons .img-title{margin-bottom:80px}.modules-v2 .module-icons .img-title img.tn-custom-logo{margin-bottom:30px}.modules-v2 .module-icons .img-title a.tn-icon-signin{cursor:pointer;background:#002c6c;padding:10px;display:inline-flex;color:#fff;justify-content:center;align-items:center;border-radius:5px}.modules-v2 .module-icons .img-title a.tn-icon-signin i{margin-right:5px}.modules-v2 .module-icons .div1111-wrapper{margin:0 auto 80px}.modules-v2 .module-icons .div1111-wrapper .div1111{white-space:nowrap;width:100%;display:flex;flex-wrap:wrap}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher{background:#fff;transition:.3s}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher .app-switcher-item-icon{color:#2f70ac;transition:.3s}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher span{color:#2f70ac;font-weight:500;text-shadow:none;transition:.3s}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher:hover{background:#002c6c;box-shadow:1px 2px 9px 1px rgba(39,23,86,.5215686274509804)}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher:hover .app-switcher-item-icon,.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher:hover span{color:#fff}.modules-v2 .module-icons .clock-wrapper{color:#fff;text-align:center;margin-top:auto;margin-bottom:auto}.modules-v2 .module-icons .clock-wrapper h4{font-size:20px;font-weight:500;margin-top:10px;margin-bottom:0;color:#2f70ac}.modules-v2 .module-icons .clock-wrapper h1{margin-bottom:0;font-size:40px}.modules-v2 .welcome-user{text-align:center;display:flex;color:#333;position:absolute;top:20px;right:20px;background:hsla(0,0%,100%,.9019607843137255);padding:10px;border-radius:10px;box-shadow:1px 2px 9px 1px rgba(39,23,86,.5215686274509804)}.modules-v2 .welcome-user .wrp-login{margin:auto;color:#333;display:flex;flex-direction:column;align-items:center}.modules-v2 .welcome-user .wrp-login h2{font-size:20px;margin-top:0;margin-bottom:5px;font-weight:500}.modules-v2 .profile-image{display:flex;justify-content:center;align-items:center}.modules-v2 .profile-image .tn-full-name{font-size:18px;margin-right:10px}.modules-v2 .profile-image img{border-radius:50%;height:40px;width:40px;-o-object-fit:contain;object-fit:contain;background:#fff;margin-right:10px}.modules-v2 .profile-image .login{display:grid;grid-gap:10px}.modules-v2 .profile-image .login a.tn-icon-signout{border-radius:50%;cursor:pointer;width:40px;height:40px;display:flex;justify-content:center;align-items:center;background:#002c6c}.modules-v2 .profile-image .login a.tn-icon-signout i{font-size:16px;color:#edc16f}@media (max-width:1368px){.modules-v2 .clock{margin:0 20px;font-size:1.5em}.modules-v2 .data-time{margin:10px 0 20px;font-size:1em}}@media (max-width:1200px){.modules-v2 .welcome-user{top:10px;right:10px}}@media (max-width:768px){.modules-v2 .module-icons .img-title .title h2{font-size:28px}.modules-v2 .module-icons .img-title .title h1{font-size:32px}}@media (max-width:640px){.modules-v2 .welcome-user{top:10px;right:10px;width:calc(100% - 20px);justify-content:flex-end}.modules-v2 .module-icons{padding:20px;margin:10px}.modules-v2 .module-icons .img-title{margin-bottom:40px}.modules-v2 .module-icons .img-title .title h1{font-size:19px}.modules-v2 .module-icons .img-title .title h2{font-size:16px;margin-top:0;margin-bottom:10px}.modules-v2 .module-icons .div1111-wrapper{margin-bottom:50px}.modules-v2 .module-icons .div1111-wrapper .div1111{display:grid;grid-template-columns:repeat(3,minmax(100px,1fr))}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher span{font-size:14px}.modules-v2 .module-icons div>span{width:100px;height:100px}.modules-v2 .module-icons div>span>a>i{font-size:3em;top:15px}.modules-v2 .module-icons .clock-wrapper h4{font-size:16px;margin-top:5px}.modules-v2 .module-icons .clock-wrapper h1{font-size:30px}}@media (max-width:375px){.modules-v2 .module-icons .img-title{margin-bottom:0}.modules-v2 .module-icons .img-title img.tn-custom-logo{width:100px;margin-bottom:10px}.modules-v2 .module-icons .img-title .title{padding:0}.modules-v2 .module-icons .img-title .title h2{margin-bottom:10px;font-size:14px}.modules-v2 .module-icons .div1111-wrapper{margin-bottom:0}.modules-v2 .module-icons .div1111-wrapper .div1111{display:flex;justify-content:center}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher span{font-size:14px}}@keyframes load4{0%,to{box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0}12.5%{box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}25%{box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}37.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}50%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em}62.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em}75%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0}87.5%{box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em}}"]
178
- },] }
179
- ];
180
- SplashComponentV2Component.ctorParameters = () => [
181
- { type: Injector },
182
- { type: ModuleConfigService },
183
- { type: PermissionService },
184
- { type: DeviceDetectorService },
185
- { type: UserService },
186
- { type: Router },
187
- { type: AuthenService },
188
- { type: GlobalService }
189
- ];
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsYXNoLWNvbXBvbmVudC12Mi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9zcGxhc2gtY29tcG9uZW50L3NwbGFzaC1jb21wb25lbnQtdjIvc3BsYXNoLWNvbXBvbmVudC12Mi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQVE3RCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsYUFBYTtJQWF6RCxZQUNJLFFBQWtCLEVBQ1Ysb0JBQXlDLEVBQ3pDLGtCQUFxQyxFQUNyQyxzQkFBNkMsRUFDN0MsWUFBeUIsRUFDekIsT0FBZSxFQUNmLGNBQTZCLEVBQzdCLGNBQTZCO1FBRXJDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQVJSLHlCQUFv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Q0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQzdCO0lBQ0wsQ0FBQztJQUdELGdCQUFnQjtRQUNaLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtZQUN2QyxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxXQUFXO1FBQ1AsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7O1lBNUxKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUscUJBQXFCO2dCQUMvQiwrK0VBQW1EO2dCQUVuRCxTQUFTLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQzs7YUFDdkM7OztZQWxCbUIsUUFBUTtZQVNuQixtQkFBbUI7WUFDbkIsaUJBQWlCO1lBUmpCLHFCQUFxQjtZQVNyQixXQUFXO1lBVlgsTUFBTTtZQU1OLGFBQWE7WUFDYixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcblxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVuLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wZXJtaXNzaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NwbGFzaC1jb21wb25lbnQtdjInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zcGxhc2gtY29tcG9uZW50LXYyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zcGxhc2gtY29tcG9uZW50LXYyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbQ29tcG9uZW50Q29udGV4dFNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIFNwbGFzaENvbXBvbmVudFYyQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBkZWZhdWx0QXZhdGFyID0gJyc7XG4gICAgZW52aXJvbm1lbnQ6IGFueTtcbiAgICBhcHBTd2l0Y2hlckl0ZW1zID0gW107XG4gICAgY3VycmVudFVzZXI6IGFueTtcbiAgICBsb2FkZWQgPSBmYWxzZTtcbiAgICBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgc2hvd0RlZmF1bHRTZXR0aW5nID0gZmFsc2U7XG4gICAgZmlsZUFwaSA9ICcnO1xuICAgIGlzT25Nb2JpbGUgPSBmYWxzZTtcblxuICAgIHVuZGVyY29uc3RydWN0aW9uOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9wZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2RldmljZURldGVjdG9yU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIF9hdXRoZW5TZXJ2aWNlOiBBdXRoZW5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9nbG9iYWxTZXJ2aWNlOiBHbG9iYWxTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC5maXJlRXZlbnQoJ01BSU5fQ09OVEVOVF9PTkxZJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50O1xuICAgICAgICB0aGlzLmRlZmF1bHRBdmF0YXIgPSB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLm1haW4uZGVmYXVsdE1hbGVBdmF0YXI7XG4gICAgICAgIHRoaXMuZmlsZUFwaSA9IHRoaXMuZW52aXJvbm1lbnQuYXBpRG9tYWluLmZpbGVFbmRwb2ludDtcbiAgICAgICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIH0sIDEwMDApO1xuXG4gICAgICAgIGlmICh0aGlzLnJvb3RDb250ZXh0LmRhdGEuY3VycmVudEFwcE1ldGFkYXRhICYmIHRoaXMucm9vdENvbnRleHQuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEgJiYgdGhpcy5yb290Q29udGV4dC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YS5zaG93RGVmYXVsdFNldHRpbmcgIT0gbnVsbCAmJiB0aGlzLnJvb3RDb250ZXh0LmRhdGEuY3VycmVudEFwcE1ldGFkYXRhLnNob3dEZWZhdWx0U2V0dGluZyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0RlZmF1bHRTZXR0aW5nID0gdGhpcy5yb290Q29udGV4dC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YS5zaG93RGVmYXVsdFNldHRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5tYWluLnNob3dEZWZhdWx0U2V0dGluZyAhPSBudWxsICYmIHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi5zaG93RGVmYXVsdFNldHRpbmcgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RGVmYXVsdFNldHRpbmcgPSB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLm1haW4uc2hvd0RlZmF1bHRTZXR0aW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RGVmYXVsdFNldHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbmZpZyBmb3IgYXV0aGVudGljYXRpb25cbiAgICAgICAgdGhpcy5fZ2xvYmFsU2VydmljZS5zZXRIZWFkZXJTdGF0ZShmYWxzZSk7XG4gICAgICAgIHRoaXMuX2dsb2JhbFNlcnZpY2Uuc2V0TWVudVN0YXRlKGZhbHNlKTtcblxuICAgICAgICB0aGlzLnVuZGVyY29uc3RydWN0aW9uID0gdGhpcy5lbnZpcm9ubWVudC51bmRlcmNvbnN0cnVjdGlvbjtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc01vYmlsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmlzT25Nb2JpbGUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucm9vdENvbnRleHQuZGF0YS5jdXJyZW50VXNlcikge1xuICAgICAgICAgICAgaWYgKHRoaXMucm9vdENvbnRleHQuZGF0YS5jdXJyZW50VXNlci5nZW5kZXIgPT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEF2YXRhciA9IHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi5kZWZhdWx0RmVtYWxlQXZhdGFyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0QXZhdGFyID0gdGhpcy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5tYWluLmRlZmF1bHRNYWxlQXZhdGFyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yb290Q29udGV4dC5yZXBsYXlTdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9MT0FERUQsIHJzID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgICAgICAgdGhpcy5sb2FkQXBwTWV0YWRhdGEoKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMucm9vdE1vZGVsLmFsbG93QW5vbnltb3VzKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmxvYWRBcHBNZXRhZGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9hZEFwcE1ldGFkYXRhKCkge1xuICAgICAgICBjb25zdCBwcm1zQXBwU3dpY2hlckl0ZW0gPSBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaW5kIGluIHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuYXBwU3dpdGNoZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5hcHBTd2l0Y2hlcltpbmRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsaWVudElkID0gdGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLmNsaWVudElkO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucm9vdE1vZGVsLmFsbG93QW5vbnltb3VzICYmIGVsZW1lbnQuYWxsb3dBbm9ueW1vdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuY3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNBdXRob3JpemVkID0gYXdhaXQgdGhpcy5fcGVybWlzc2lvblNlcnZpY2UuaXNBdXRob3JpemVkKGVsZW1lbnQuY29kZSwgYCR7ZWxlbWVudC5jb2RlfS5NT0RVTEUuJHtlbGVtZW50LmNvZGV9YC50b1VwcGVyQ2FzZSgpLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXV0aG9yaXplZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc29sdmUoYXJyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJtc0FwcFN3aWNoZXJJdGVtLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgdGhpcy5hcHBTd2l0Y2hlckl0ZW1zLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICBpZiAocnMpIHtcbiAgICAgICAgICAgICAgICAoPGFueT5ycykuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRVc2VyKSB7IC8vIGFsbG93IGFub255bW91c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwU3dpdGNoZXJJdGVtcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFVzZXIubWFOZ3VvaUhvYyAmJiB0aGlzLmN1cnJlbnRVc2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgIT0gJ3RydWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmNvZGUudG9Mb3dlckNhc2UoKSA9PSAnc3YnIHx8IGVsZW1lbnQuY29kZS50b0xvd2VyQ2FzZSgpID09ICd1c2VyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBTd2l0Y2hlckl0ZW1zLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwU3dpdGNoZXJJdGVtcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFwcFN3aXRjaGVySXRlbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoeCA9PiB0aGlzLnN3aXRjaEFwcCh0aGlzLmFwcFN3aXRjaGVySXRlbXNbMF0pLCAxMDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3dpdGNoQXBwKGl0ZW0pIHtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGl0ZW0udGFyZ2V0ID09ICdfYmxhbmsnKSB7XG4gICAgICAgICAgICBsZXQgdXJsID0gaXRlbS51cmw7XG4gICAgICAgICAgICBpZiAoaXRlbS5kZWZhdWx0UmVkaXJlY3QpIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gYC8ke2l0ZW0uZGVmYXVsdFJlZGlyZWN0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b3AubG9jYXRpb24uaHJlZiA9IHVybDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpdGVtLmRlZmF1bHRSZWRpcmVjdCAhPSAnJyAmJiAhdGhpcy5yb290Q29udGV4dC5kYXRhLmZsYWdzLm1lbnVUb3BPcGVubmluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKGl0ZW0uZGVmYXVsdFJlZGlyZWN0KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3RDb250ZXh0LmRhdGEuY3VycmVudEFwcE1ldGFkYXRhID0gdGhpcy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5hcHBTd2l0Y2hlci5maW5kKHggPT4geC5jb2RlID09IGl0ZW0uY29kZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucm9vdENvbnRleHQuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEgJiYgdGhpcy5yb290Q29udGV4dC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YS5zaG93RGVmYXVsdFNldHRpbmcgIT0gdW5kZWZpbmVkICYmIHRoaXMucm9vdENvbnRleHQuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEuc2hvd0RlZmF1bHRTZXR0aW5nICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RGVmYXVsdFNldHRpbmcgPSB0aGlzLnJvb3RDb250ZXh0LmRhdGEuY3VycmVudEFwcE1ldGFkYXRhLnNob3dEZWZhdWx0U2V0dGluZyAmJiB0aGlzLnNob3dEZWZhdWx0U2V0dGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2dvdXQoKSB7XG4gICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UubG9nb3V0KCk7XG4gICAgfVxuXG4gICAgZ29Ub1BlcnNvbmFsKCkge1xuICAgICAgICBjb25zdCB1c2VyTWVudSA9IHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuYXBwU3dpdGNoZXIuZmluZCh4ID0+IHguY29kZSA9PSAnVVNFUicpO1xuICAgICAgICB0aGlzLnN3aXRjaEFwcCh1c2VyTWVudSk7XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudFVzZXJBdmF0YXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnJvb3RDb250ZXh0LmRhdGEuY3VycmVudFVzZXIgJiYgdGhpcy5yb290Q29udGV4dC5kYXRhLmN1cnJlbnRVc2VyLmF2YXRhcikge1xuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuZmlsZUFwaX0vZmlsZS9wdWJsaWMvJHt0aGlzLnJvb3RDb250ZXh0LmRhdGEuY3VycmVudFVzZXIuYXZhdGFyfS9Eb3dubG9hZGA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0QXZhdGFyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGF5c0luV2VlayA9IFsnQ2jhu6cgbmjhuq10JywgJ1Ro4bupIDInLCAnVGjhu6kgMycsICdUaOG7qSA0JywgJ1Ro4bupIDUnLCAnVGjhu6kgNicsICdUaOG7qSA3J107XG4gICAgZ2V0TmdheVRyb25nVHVhbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF5c0luV2Vla1t0aGlzLmN1cnJlbnREYXRlLmdldERheSgpXTtcbiAgICB9XG5cbiAgICBzaG93UHJvZmlsZVBhZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLl91c2VyU2VydmljZS5pc1NpbmhWaWVuQWNjb3VudCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLl9nbG9iYWxTZXJ2aWNlLnNldEhlYWRlclN0YXRlKHRydWUpO1xuICAgICAgICB0aGlzLl9nbG9iYWxTZXJ2aWNlLnNldE1lbnVTdGF0ZSh0cnVlKTtcbiAgICB9XG5cbiAgICBsb2dpbigpIHtcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC5maXJlRXZlbnQoJ0xPR0lOJyk7XG4gICAgfVxuXG59XG4iXX0=
@@ -1,197 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Component, Injector } from '@angular/core';
3
- import { Router } from '@angular/router';
4
- import { DeviceDetectorService } from 'ngx-device-detector';
5
- import { ComponentContextService } from '../../../app-context/component-context.service';
6
- import { ComponentBase } from '../../../classes/base/component-base';
7
- import { ComCtxConstants } from '../../../configs/component-context.constant';
8
- import { AuthenService } from '../../../services/authen.service';
9
- import { GlobalService } from '../../../services/global.service';
10
- import { ModuleConfigService } from '../../../services/module-config.service';
11
- import { PermissionService } from '../../../services/permission.service';
12
- import { UserService } from '../../../services/user.service';
13
- export class SplashComponentV3Component extends ComponentBase {
14
- constructor(injector, _moduleConfigService, _permissionService, _deviceDetectorService, _userService, _router, _authenService, _globalService) {
15
- super(injector);
16
- this._moduleConfigService = _moduleConfigService;
17
- this._permissionService = _permissionService;
18
- this._deviceDetectorService = _deviceDetectorService;
19
- this._userService = _userService;
20
- this._router = _router;
21
- this._authenService = _authenService;
22
- this._globalService = _globalService;
23
- this.defaultAvatar = '';
24
- this.appSwitcherItems = [];
25
- this.loaded = false;
26
- this.currentDate = new Date();
27
- this.showDefaultSetting = false;
28
- this.fileApi = '';
29
- this.isOnMobile = false;
30
- this.daysInWeek = ['Chủ nhật', 'Thứ 2', 'Thứ 3', 'Thứ 4', 'Thứ 5', 'Thứ 6', 'Thứ 7'];
31
- this.rootContext.fireEvent('MAIN_CONTENT_ONLY', true);
32
- this.environment = this._moduleConfigService.getConfig().environment;
33
- this.defaultAvatar = this.environment.appMetadata.main.defaultMaleAvatar;
34
- this.fileApi = `${this.environment.apiDomain.fileEndpoint}/${this.environment.apiVersion}/FileObject`;
35
- setInterval(() => {
36
- this.currentDate = new Date();
37
- }, 1000);
38
- if (this.rootContext.data.currentAppMetadata && this.rootContext.data.currentAppMetadata && this.rootContext.data.currentAppMetadata.showDefaultSetting != null && this.rootContext.data.currentAppMetadata.showDefaultSetting != undefined) {
39
- this.showDefaultSetting = this.rootContext.data.currentAppMetadata.showDefaultSetting;
40
- }
41
- else {
42
- if (this.environment.appMetadata.main.showDefaultSetting != null && this.environment.appMetadata.main.showDefaultSetting != undefined) {
43
- this.showDefaultSetting = this.environment.appMetadata.main.showDefaultSetting;
44
- }
45
- else {
46
- this.showDefaultSetting = false;
47
- }
48
- }
49
- // Config for authentication
50
- this._globalService.setHeaderState(false);
51
- this._globalService.setMenuState(false);
52
- this.underconstruction = this.environment.underconstruction;
53
- }
54
- ngOnInit() {
55
- if (this._deviceDetectorService.isMobile()) {
56
- this.isOnMobile = true;
57
- }
58
- if (this.rootContext.data.currentUser) {
59
- if (this.rootContext.data.currentUser.gender == 0) {
60
- this.defaultAvatar = this.environment.appMetadata.main.defaultFemaleAvatar;
61
- }
62
- else {
63
- this.defaultAvatar = this.environment.appMetadata.main.defaultMaleAvatar;
64
- }
65
- }
66
- this.rootContext.replaySubscribe(ComCtxConstants.ROOT.USER_LOADED, rs => {
67
- this.currentUser = this._userService.getCurrentUser();
68
- this.loadAppMetadata();
69
- this.loaded = true;
70
- });
71
- if (this.rootModel.allowAnonymous) {
72
- this.loaded = true;
73
- this.loadAppMetadata();
74
- }
75
- }
76
- loadAppMetadata() {
77
- const prmsAppSwicherItem = new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
78
- const arr = [];
79
- for (const ind in this.environment.appMetadata.appSwitcher) {
80
- const element = this.environment.appMetadata.appSwitcher[ind];
81
- // const clientId = this.environment.authenticationSettings.clientId;
82
- if (this.rootModel.allowAnonymous && element.allowAnonymous) {
83
- arr.push(element);
84
- }
85
- else if (this.currentUser) {
86
- // if (element.code === 'CMS-MSMV') {
87
- // if (this._permissionService.isAuthorized(element.code, 'CMS-MSMV/SURVEYSHEETS?PLANID=7B40AED6-C7AB-44E6-ADDC-DC71C548D05C&VIEW=0', false)) {
88
- // // const isAuthorized = await this._permissionService.isAuthorized(element.code, `test/lksjeflksejflseifjseifjslkejfkiki/test/kkjlskejflsekfjseklfj`.toUpperCase());
89
- // arr.push(element);
90
- // }
91
- // continue;
92
- // }
93
- const isAuthorized = yield this._permissionService.isAuthorized(element.code, `${element.code}.MODULE.${element.code}`.toUpperCase(), true);
94
- if (isAuthorized) {
95
- arr.push(element);
96
- }
97
- }
98
- }
99
- resolve(arr);
100
- }));
101
- prmsAppSwicherItem.then(rs => {
102
- this.appSwitcherItems.length = 0;
103
- if (rs) {
104
- rs.forEach(element => {
105
- if (element.visible) {
106
- if (!this.currentUser) { // allow anonymous
107
- this.appSwitcherItems.push(element);
108
- }
109
- else {
110
- if (this.currentUser.maNguoiHoc && this.currentUser.issuperuser.toLowerCase() != 'true') {
111
- if (element.code.toLowerCase() == 'sv' || element.code.toLowerCase() == 'user') {
112
- this.appSwitcherItems.push(element);
113
- }
114
- }
115
- else {
116
- this.appSwitcherItems.push(element);
117
- }
118
- }
119
- }
120
- });
121
- if (this.appSwitcherItems.length === 1) {
122
- setTimeout(x => this.switchApp(this.appSwitcherItems[0]), 100);
123
- }
124
- }
125
- });
126
- }
127
- switchApp(item) {
128
- this.loaded = false;
129
- if (item.target == '_blank') {
130
- let url = item.url;
131
- if (item.defaultRedirect) {
132
- url += `/${item.defaultRedirect}`;
133
- }
134
- top.location.href = url;
135
- }
136
- else {
137
- if (item.defaultRedirect != '' && !this.rootContext.data.flags.menuTopOpenning) {
138
- this._router.navigateByUrl(item.defaultRedirect);
139
- this.rootContext.data.currentAppMetadata = this.environment.appMetadata.appSwitcher.find(x => x.code == item.code);
140
- if (this.rootContext.data.currentAppMetadata && this.rootContext.data.currentAppMetadata.showDefaultSetting != undefined && this.rootContext.data.currentAppMetadata.showDefaultSetting != null) {
141
- this.showDefaultSetting = this.rootContext.data.currentAppMetadata.showDefaultSetting && this.showDefaultSetting;
142
- }
143
- }
144
- }
145
- }
146
- logout() {
147
- this._authenService.logout();
148
- }
149
- goToPersonal() {
150
- const userMenu = this.environment.appMetadata.appSwitcher.find(x => x.code == 'USER');
151
- this.switchApp(userMenu);
152
- }
153
- getCurrentUserAvatar() {
154
- if (this.rootContext.data.currentUser && this.rootContext.data.currentUser.avatar) {
155
- return `${this.fileApi}/public/${this.rootContext.data.currentUser.avatar}/Download`;
156
- }
157
- else {
158
- return this.defaultAvatar;
159
- }
160
- }
161
- getNgayTrongTuan() {
162
- return this.daysInWeek[this.currentDate.getDay()];
163
- }
164
- showProfilePage() {
165
- if (this._userService.isSinhVienAccount()) {
166
- return false;
167
- }
168
- return true;
169
- }
170
- ngOnDestroy() {
171
- super.ngOnDestroy();
172
- this._globalService.setHeaderState(true);
173
- this._globalService.setMenuState(true);
174
- }
175
- login() {
176
- this.rootContext.fireEvent('LOGIN');
177
- }
178
- }
179
- SplashComponentV3Component.decorators = [
180
- { type: Component, args: [{
181
- selector: 'splash-component-v3',
182
- template: "<div *ngIf=\"!loaded\" class=\"wrp-loader\">\n <div class=\"loader\"></div>\n</div>\n<div *ngIf=\"loaded\" class=\"modules-v1\">\n <div class=\"welcome-user\">\n <div class=\"profile-image\">\n <img class=\"custom-avatar\" [src-fallback]=\"defaultAvatar\" [src]=\"getCurrentUserAvatar()\" />\n </div>\n\n <div class=\"wrp-login\">\n <h2>Xin ch\u00E0o!</h2>\n <b>{{currentUser.fullName}}</b>\n <div *ngIf=\"currentUser\" class=\"login\">\n <a (click)=\"goToPersonal()\"><i class=\"far fa-folder-open\"></i>Trang c\u00E1 nh\u00E2n</a>\n <a style=\"background: #fabc01;\" (click)=\"logout()\"><i class=\"far fa-arrow-alt-circle-right\"></i>\u0110\u0103ng\n xu\u1EA5t</a>\n </div>\n <div *ngIf=\"!currentUser\" class=\"login\"><a style=\"background: #fabc01;\" (click)=\"login()\"><i\n class=\"fas fa-sign-out-alt\"></i>\u0110\u0103ng nh\u1EADp</a></div>\n </div>\n\n <div class=\"clock-wrapper\">\n <h1 class=\"clock\">{{currentDate | date:'HH:mm:ss'}}</h1>\n <h4 class=\"data-time\">{{getNgayTrongTuan()}}, ng\u00E0y {{currentDate | date:'dd/MM/yyyy'}}</h4>\n </div>\n </div>\n\n <div class=\"module-icons\">\n <div class=\"img-title\">\n <img class=\"tn-custom-logo\" [src]=\"environment.appMetadata.main.logo\"\n [alt]=\"environment.appMetadata.main.owner\">\n <div class=\"title\">\n <h2>{{environment.appMetadata.main.title}}</h2>\n <h1>{{environment.appMetadata.main.owner}}</h1>\n </div>\n </div>\n\n <div class=\"div1111-wrapper\">\n <tn-custom-scrollbar *ngIf=\"!isOnMobile\">\n <ng-container *ngTemplateOutlet=\"appSwitcher\"></ng-container>\n </tn-custom-scrollbar>\n\n <ng-container *ngIf=\"isOnMobile\">\n <ng-container *ngTemplateOutlet=\"appSwitcher\"></ng-container>\n </ng-container>\n </div>\n </div>\n</div>\n\n<ng-template #appSwitcher>\n <div class=\"div1111\">\n <ng-container *ngFor=\"let item of appSwitcherItems; let ind = index;\">\n <span>\n <a class=\"bg-switcher\" (click)=\"switchApp(item)\">\n <i class=\"{{item.icon}} app-switcher-item-icon\"></i>\n <span>{{ item.title | translate}}</span>\n </a>\n </span>\n </ng-container>\n </div>\n</ng-template>",
183
- providers: [ComponentContextService],
184
- styles: ["body{background-color:#fff;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.wrp-loader{position:absolute;display:inline-block;top:50%;left:50%;transform:translate(-50%,-50%);z-index:101}.wrp-loader .loader{border-radius:50%;border:2px solid #bcdbf5;border-top-color:#3192e1;width:10px;height:10px;color:#607d8b;font-size:10px;animation:load4 1.3s linear infinite;display:block}.modules-v1{position:fixed;top:0;left:0;z-index:100;display:flex;justify-content:center;align-items:center;width:100vw;height:100vh;background-image:url(/assets/images/background-splash.png);background-repeat:no-repeat;background-position:50%;background-size:cover}.modules-v1 div>span{display:inline-block;min-width:100px;height:120px;width:120px;margin:10px;box-shadow:1px 2px 9px 1px #dadada;border-radius:5px;white-space:normal}.modules-v1 div>span>a{height:100%;display:inline-block;position:relative;font-weight:700;cursor:pointer;border-radius:5px;display:flex;flex-direction:column;justify-content:space-evenly}.modules-v1 div>span>a,.modules-v1 div>span>a>span{width:100%;color:#fff;text-decoration:unset;text-align:center}.modules-v1 div>span>a>span{display:inline-block;line-height:1.2}.modules-v1 div>span>a>i{font-size:3.5em;width:100%}.modules-v1 .div1111-wrapper{overflow:auto;height:420px;margin:0 auto;max-width:700px}.modules-v1 .div1111-wrapper .div1111{white-space:nowrap;width:100%;display:flex;flex-wrap:wrap}.modules-v1 .div1111-wrapper .div1111 .bg-switcher{background:#fff;transition:.3s}.modules-v1 .div1111-wrapper .div1111 .bg-switcher .app-switcher-item-icon{color:#52abff;transition:.3s}.modules-v1 .div1111-wrapper .div1111 .bg-switcher span{color:#2f70ac;font-weight:500;text-shadow:none;transition:.3s;padding:0 5px}.modules-v1 .div1111-wrapper .div1111 .bg-switcher:hover{background:#fabc01;box-shadow:1px 2px 9px 1px rgba(39,23,86,.5215686274509804)}.modules-v1 .div1111-wrapper .div1111 .bg-switcher:hover .app-switcher-item-icon,.modules-v1 .div1111-wrapper .div1111 .bg-switcher:hover span{color:#2f70ac}.modules-v1 .module-icons{text-align:center;color:#666;width:65%;align-self:stretch;background-color:rgba(249,244,244,.9215686274509803);display:flex;flex-direction:column;justify-content:center}.modules-v1 .module-icons .img-title{padding:20px}.modules-v1 .module-icons .img-title .tn-custom-logo{max-height:125px}.modules-v1 .module-icons .img-title .title{margin:24px 0}.modules-v1 .module-icons h2{font-size:25px;color:#271756;margin-bottom:15px;margin-top:15px}.modules-v1 .module-icons h1{color:#2f70ac;font-size:35px;margin-top:0;margin-bottom:0}.modules-v1 .welcome-user{text-align:center;width:35%;align-self:stretch;background-color:rgba(47,112,172,.9215686274509803);display:flex;flex-direction:column}.modules-v1 .welcome-user .wrp-login{margin:20px auto auto;color:#fff;display:flex;flex-direction:column;align-items:center}.modules-v1 .welcome-user .wrp-login h2{font-size:20px;margin-top:0;margin-bottom:5px;font-weight:500}.modules-v1 .welcome-user .wrp-login b{font-size:25px;text-transform:uppercase;display:block}.modules-v1 .welcome-user .wrp-login .login{display:grid;grid-template-columns:repeat(2,150px);grid-gap:10px;margin-top:30px}.modules-v1 .welcome-user .wrp-login .login a{background:#fff;padding:6px;border-radius:5px;cursor:pointer;display:inline-block;color:#5d5d5d}.modules-v1 .welcome-user .wrp-login .login a i{margin-right:10px}.modules-v1 .welcome-user .profile-image{margin:auto auto 0}.modules-v1 .welcome-user .profile-image img{border-radius:50%;height:200px;width:200px;-o-object-fit:contain;object-fit:contain;box-shadow:1px 1px 11px 6px #2a659b;background:#fff}.modules-v1 .welcome-user .clock-wrapper{color:#fff;text-align:center;margin-top:auto;margin-bottom:auto}.modules-v1 .welcome-user .clock-wrapper h4{font-size:18px;font-weight:500;margin-top:10px}.modules-v1 .welcome-user .clock-wrapper h1{margin-bottom:0;font-size:40px}.modules-v1 .underconstruction{text-transform:uppercase;color:red;font-weight:700;font-size:4em}@media (max-width:1368px){.modules-v1 .clock{margin:0 20px;font-size:1.5em}.modules-v1 .data-time{margin:10px 0 20px;font-size:1em}}@media (max-width:1100px){.modules-v1 .div1111-wrapper .div1111{display:grid;grid-template-columns:repeat(4,minmax(120px,1fr))}}@media (max-width:991px){.modules-v1 .welcome-user .wrp-login .login{grid-template-columns:1fr}}@media (max-width:768px){.modules-v1{flex-direction:column}.modules-v1 .welcome-user{width:100%;height:270px;flex-direction:row;align-items:center;padding-bottom:87px}.modules-v1 .welcome-user .profile-image{margin-bottom:auto}.modules-v1 .welcome-user .profile-image img{height:150px;width:150px}.modules-v1 .welcome-user .wrp-login{margin-top:auto}.modules-v1 .welcome-user .wrp-login .login{margin-top:20px}.modules-v1 .welcome-user .clock-wrapper{padding-right:15px}.modules-v1 .module-icons{width:100%;height:calc(100% - 270px)}.modules-v1 .module-icons .img-title{background-image:url(/assets/images/logo.png);background-repeat:no-repeat;background-position:50%;z-index:9}.modules-v1 .module-icons .img-title img{display:none}.modules-v1 .module-icons .img-title .title{background:hsla(0,0%,100%,.9019607843137255);box-shadow:1px 4px 9px 2px #67a0d4;padding:20px 10px;position:absolute;width:calc(100% - 40px);left:20px;right:20px;top:200px}.modules-v1 .module-icons .img-title .title h2{font-size:30px}.modules-v1 .module-icons .img-title .title h1{font-size:34px}}@media (max-width:640px){.modules-v1 .welcome-user{display:block;padding-top:20px}.modules-v1 .welcome-user .wrp-login{width:50%;padding:0 20px 0 0;float:right}.modules-v1 .welcome-user .wrp-login h2{margin-bottom:3px;font-size:14px}.modules-v1 .welcome-user .wrp-login b{font-size:14px}.modules-v1 .welcome-user .wrp-login .login{margin-top:10px;display:flex;flex-direction:column;padding:0 15px;text-align:left}.modules-v1 .welcome-user .wrp-login .login a{font-size:14px}.modules-v1 .welcome-user .profile-image{width:50%;float:left}.modules-v1 .welcome-user .profile-image img{height:130px;width:130px;margin-left:35px;display:block}.modules-v1 .welcome-user .clock-wrapper{clear:both;padding-top:10px;padding-right:0}.modules-v1 .welcome-user .clock-wrapper h4{font-size:14px;margin-top:5px}.modules-v1 .welcome-user .clock-wrapper h1{font-size:1.3em}.modules-v1 .module-icons .img-title{background-size:80px 80px}.modules-v1 .module-icons .img-title .title{top:230px}.modules-v1 .module-icons .img-title .title h1{font-size:16px}.modules-v1 .module-icons .img-title .title h2{font-size:16px;margin-top:0}.modules-v1 .module-icons .div1111-wrapper{margin-top:0;height:360px}.modules-v1 .module-icons .div1111-wrapper .div1111 .bg-switcher span{font-size:14px}.modules-v1 .module-icons div>span{width:100px;height:100px}.modules-v1 .module-icons div>span>a>i{font-size:2.5em;top:10px}}@media (max-width:425px){.modules-v1 .module-icons .img-title .title{top:225px}.modules-v1 .module-icons .div1111-wrapper .div1111{display:grid;grid-template-columns:repeat(3,minmax(120px,1fr))}}@media (max-width:375px){.modules-v1 .module-icons{height:calc(100% - 250px)}.modules-v1 .module-icons .img-title{background-size:60px 60px}.modules-v1 .module-icons .img-title .title{padding:10px;top:220px}.modules-v1 .module-icons .img-title .title h2{margin-bottom:10px}.modules-v1 .module-icons .img-title .title h1,.modules-v1 .module-icons .img-title .title h2{font-size:14px}.modules-v1 .welcome-user{height:250px}}@media (max-width:360px){.modules-v1 .module-icons{height:calc(100% - 240px)}.modules-v1 .module-icons .img-title{background-size:60px 60px}.modules-v1 .module-icons .img-title .title{top:205px;width:calc(100% - 20px);left:10px;right:10px}.modules-v1 .welcome-user{height:240px}.modules-v1 .welcome-user .clock-wrapper{padding-top:0}}@keyframes load4{0%,to{box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0}12.5%{box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}25%{box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}37.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}50%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em}62.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em}75%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0}87.5%{box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em}}"]
185
- },] }
186
- ];
187
- SplashComponentV3Component.ctorParameters = () => [
188
- { type: Injector },
189
- { type: ModuleConfigService },
190
- { type: PermissionService },
191
- { type: DeviceDetectorService },
192
- { type: UserService },
193
- { type: Router },
194
- { type: AuthenService },
195
- { type: GlobalService }
196
- ];
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsYXNoLWNvbXBvbmVudC12My5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9zcGxhc2gtY29tcG9uZW50L3NwbGFzaC1jb21wb25lbnQtdjMvc3BsYXNoLWNvbXBvbmVudC12My5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQVE3RCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsYUFBYTtJQWF6RCxZQUNJLFFBQWtCLEVBQ1Ysb0JBQXlDLEVBQ3pDLGtCQUFxQyxFQUNyQyxzQkFBNkMsRUFDN0MsWUFBeUIsRUFDekIsT0FBZSxFQUNmLGNBQTZCLEVBQzdCLGNBQTZCO1FBRXJDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQVJSLHlCQUFv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QyxPQUFPLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sV0FBVyxDQUFDO1NBQ3hGO2FBQ0k7WUFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7U0FDN0I7SUFDTCxDQUFDO0lBR0QsZ0JBQWdCO1FBQ1osT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO1lBQ3ZDLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNELFdBQVc7UUFDUCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDOzs7WUFuTUosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLHNpRkFBbUQ7Z0JBRW5ELFNBQVMsRUFBRSxDQUFDLHVCQUF1QixDQUFDOzthQUN2Qzs7O1lBbEJtQixRQUFRO1lBU25CLG1CQUFtQjtZQUNuQixpQkFBaUI7WUFSakIscUJBQXFCO1lBU3JCLFdBQVc7WUFWWCxNQUFNO1lBTU4sYUFBYTtZQUNiLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xuXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYmFzZS9jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi8uLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcbmltcG9ydCB7IEF1dGhlblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoZW4uc2VydmljZSc7XG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc3BsYXNoLWNvbXBvbmVudC12MycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NwbGFzaC1jb21wb25lbnQtdjMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NwbGFzaC1jb21wb25lbnQtdjMuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgU3BsYXNoQ29tcG9uZW50VjNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIGRlZmF1bHRBdmF0YXIgPSAnJztcbiAgICBlbnZpcm9ubWVudDogYW55O1xuICAgIGFwcFN3aXRjaGVySXRlbXMgPSBbXTtcbiAgICBjdXJyZW50VXNlcjogYW55O1xuICAgIGxvYWRlZCA9IGZhbHNlO1xuICAgIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgICBzaG93RGVmYXVsdFNldHRpbmcgPSBmYWxzZTtcbiAgICBmaWxlQXBpID0gJyc7XG4gICAgaXNPbk1vYmlsZSA9IGZhbHNlO1xuXG4gICAgdW5kZXJjb25zdHJ1Y3Rpb246IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3Blcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgX2F1dGhlblNlcnZpY2U6IEF1dGhlblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2dsb2JhbFNlcnZpY2U6IEdsb2JhbFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LmZpcmVFdmVudCgnTUFJTl9DT05URU5UX09OTFknLCB0cnVlKTtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQ7XG4gICAgICAgIHRoaXMuZGVmYXVsdEF2YXRhciA9IHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi5kZWZhdWx0TWFsZUF2YXRhcjtcbiAgICAgICAgdGhpcy5maWxlQXBpID0gYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlEb21haW4uZmlsZUVuZHBvaW50fS8ke3RoaXMuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vRmlsZU9iamVjdGA7XG4gICAgICAgIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB9LCAxMDAwKTtcblxuICAgICAgICBpZiAodGhpcy5yb290Q29udGV4dC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YSAmJiB0aGlzLnJvb3RDb250ZXh0LmRhdGEuY3VycmVudEFwcE1ldGFkYXRhICYmIHRoaXMucm9vdENvbnRleHQuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEuc2hvd0RlZmF1bHRTZXR0aW5nICE9IG51bGwgJiYgdGhpcy5yb290Q29udGV4dC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YS5zaG93RGVmYXVsdFNldHRpbmcgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dEZWZhdWx0U2V0dGluZyA9IHRoaXMucm9vdENvbnRleHQuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEuc2hvd0RlZmF1bHRTZXR0aW5nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi5zaG93RGVmYXVsdFNldHRpbmcgIT0gbnVsbCAmJiB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLm1haW4uc2hvd0RlZmF1bHRTZXR0aW5nICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RlZmF1bHRTZXR0aW5nID0gdGhpcy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5tYWluLnNob3dEZWZhdWx0U2V0dGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RlZmF1bHRTZXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb25maWcgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAgICAgIHRoaXMuX2dsb2JhbFNlcnZpY2Uuc2V0SGVhZGVyU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLl9nbG9iYWxTZXJ2aWNlLnNldE1lbnVTdGF0ZShmYWxzZSk7XG5cbiAgICAgICAgdGhpcy51bmRlcmNvbnN0cnVjdGlvbiA9IHRoaXMuZW52aXJvbm1lbnQudW5kZXJjb25zdHJ1Y3Rpb247XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNNb2JpbGUoKSkge1xuICAgICAgICAgICAgdGhpcy5pc09uTW9iaWxlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJvb3RDb250ZXh0LmRhdGEuY3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvb3RDb250ZXh0LmRhdGEuY3VycmVudFVzZXIuZ2VuZGVyID09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRBdmF0YXIgPSB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLm1haW4uZGVmYXVsdEZlbWFsZUF2YXRhcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEF2YXRhciA9IHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi5kZWZhdWx0TWFsZUF2YXRhcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQucmVwbGF5U3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfTE9BREVELCBycyA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICAgICAgICAgIHRoaXMubG9hZEFwcE1ldGFkYXRhKCk7XG4gICAgICAgICAgICB0aGlzLmxvYWRlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnJvb3RNb2RlbC5hbGxvd0Fub255bW91cykge1xuICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5sb2FkQXBwTWV0YWRhdGEoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWRBcHBNZXRhZGF0YSgpIHtcbiAgICAgICAgY29uc3QgcHJtc0FwcFN3aWNoZXJJdGVtID0gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGluZCBpbiB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLmFwcFN3aXRjaGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuYXBwU3dpdGNoZXJbaW5kXTtcbiAgICAgICAgICAgICAgICAvLyBjb25zdCBjbGllbnRJZCA9IHRoaXMuZW52aXJvbm1lbnQuYXV0aGVudGljYXRpb25TZXR0aW5ncy5jbGllbnRJZDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvb3RNb2RlbC5hbGxvd0Fub255bW91cyAmJiBlbGVtZW50LmFsbG93QW5vbnltb3VzKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmN1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIChlbGVtZW50LmNvZGUgPT09ICdDTVMtTVNNVicpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGlmICh0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5pc0F1dGhvcml6ZWQoZWxlbWVudC5jb2RlLCAnQ01TLU1TTVYvU1VSVkVZU0hFRVRTP1BMQU5JRD03QjQwQUVENi1DN0FCLTQ0RTYtQUREQy1EQzcxQzU0OEQwNUMmVklFVz0wJywgZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgLy8gY29uc3QgaXNBdXRob3JpemVkID0gYXdhaXQgdGhpcy5fcGVybWlzc2lvblNlcnZpY2UuaXNBdXRob3JpemVkKGVsZW1lbnQuY29kZSwgYHRlc3QvbGtzamVmbGtzZWpmbHNlaWZqc2VpZmpzbGtlamZraWtpL3Rlc3Qva2tqbHNrZWpmbHNla2Zqc2VrbGZqYC50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBhcnIucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQXV0aG9yaXplZCA9IGF3YWl0IHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlLmlzQXV0aG9yaXplZChlbGVtZW50LmNvZGUsIGAke2VsZW1lbnQuY29kZX0uTU9EVUxFLiR7ZWxlbWVudC5jb2RlfWAudG9VcHBlckNhc2UoKSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNvbHZlKGFycik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBybXNBcHBTd2ljaGVySXRlbS50aGVuKHJzID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXBwU3dpdGNoZXJJdGVtcy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgaWYgKHJzKSB7XG4gICAgICAgICAgICAgICAgKDxhbnk+cnMpLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnZpc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50VXNlcikgeyAvLyBhbGxvdyBhbm9ueW1vdXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcFN3aXRjaGVySXRlbXMucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRVc2VyLm1hTmd1b2lIb2MgJiYgdGhpcy5jdXJyZW50VXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpICE9ICd0cnVlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jb2RlLnRvTG93ZXJDYXNlKCkgPT0gJ3N2JyB8fCBlbGVtZW50LmNvZGUudG9Mb3dlckNhc2UoKSA9PSAndXNlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwU3dpdGNoZXJJdGVtcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcFN3aXRjaGVySXRlbXMucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hcHBTd2l0Y2hlckl0ZW1zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHggPT4gdGhpcy5zd2l0Y2hBcHAodGhpcy5hcHBTd2l0Y2hlckl0ZW1zWzBdKSwgMTAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN3aXRjaEFwcChpdGVtKSB7XG4gICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChpdGVtLnRhcmdldCA9PSAnX2JsYW5rJykge1xuICAgICAgICAgICAgbGV0IHVybCA9IGl0ZW0udXJsO1xuICAgICAgICAgICAgaWYgKGl0ZW0uZGVmYXVsdFJlZGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgdXJsICs9IGAvJHtpdGVtLmRlZmF1bHRSZWRpcmVjdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9wLmxvY2F0aW9uLmhyZWYgPSB1cmw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5kZWZhdWx0UmVkaXJlY3QgIT0gJycgJiYgIXRoaXMucm9vdENvbnRleHQuZGF0YS5mbGFncy5tZW51VG9wT3Blbm5pbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybChpdGVtLmRlZmF1bHRSZWRpcmVjdCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb290Q29udGV4dC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YSA9IHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuYXBwU3dpdGNoZXIuZmluZCh4ID0+IHguY29kZSA9PSBpdGVtLmNvZGUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvb3RDb250ZXh0LmRhdGEuY3VycmVudEFwcE1ldGFkYXRhICYmIHRoaXMucm9vdENvbnRleHQuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEuc2hvd0RlZmF1bHRTZXR0aW5nICE9IHVuZGVmaW5lZCAmJiB0aGlzLnJvb3RDb250ZXh0LmRhdGEuY3VycmVudEFwcE1ldGFkYXRhLnNob3dEZWZhdWx0U2V0dGluZyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RlZmF1bHRTZXR0aW5nID0gdGhpcy5yb290Q29udGV4dC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YS5zaG93RGVmYXVsdFNldHRpbmcgJiYgdGhpcy5zaG93RGVmYXVsdFNldHRpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9nb3V0KCkge1xuICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmxvZ291dCgpO1xuICAgIH1cblxuICAgIGdvVG9QZXJzb25hbCgpIHtcbiAgICAgICAgY29uc3QgdXNlck1lbnUgPSB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLmFwcFN3aXRjaGVyLmZpbmQoeCA9PiB4LmNvZGUgPT0gJ1VTRVInKTtcbiAgICAgICAgdGhpcy5zd2l0Y2hBcHAodXNlck1lbnUpO1xuICAgIH1cblxuICAgIGdldEN1cnJlbnRVc2VyQXZhdGFyKCkge1xuICAgICAgICBpZiAodGhpcy5yb290Q29udGV4dC5kYXRhLmN1cnJlbnRVc2VyICYmIHRoaXMucm9vdENvbnRleHQuZGF0YS5jdXJyZW50VXNlci5hdmF0YXIpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmZpbGVBcGl9L3B1YmxpYy8ke3RoaXMucm9vdENvbnRleHQuZGF0YS5jdXJyZW50VXNlci5hdmF0YXJ9L0Rvd25sb2FkYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRBdmF0YXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkYXlzSW5XZWVrID0gWydDaOG7pyBuaOG6rXQnLCAnVGjhu6kgMicsICdUaOG7qSAzJywgJ1Ro4bupIDQnLCAnVGjhu6kgNScsICdUaOG7qSA2JywgJ1Ro4bupIDcnXTtcbiAgICBnZXROZ2F5VHJvbmdUdWFuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXlzSW5XZWVrW3RoaXMuY3VycmVudERhdGUuZ2V0RGF5KCldO1xuICAgIH1cblxuICAgIHNob3dQcm9maWxlUGFnZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3VzZXJTZXJ2aWNlLmlzU2luaFZpZW5BY2NvdW50KCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuX2dsb2JhbFNlcnZpY2Uuc2V0SGVhZGVyU3RhdGUodHJ1ZSk7XG4gICAgICAgIHRoaXMuX2dsb2JhbFNlcnZpY2Uuc2V0TWVudVN0YXRlKHRydWUpO1xuICAgIH1cblxuICAgIGxvZ2luKCkge1xuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LmZpcmVFdmVudCgnTE9HSU4nKTtcbiAgICB9XG5cbn1cbiJdfQ==