ngx-auto-logout 1.0.0

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 (37) hide show
  1. package/README.md +247 -0
  2. package/dist/README.md +247 -0
  3. package/dist/bundles/ngx-auto-logout.umd.js +864 -0
  4. package/dist/bundles/ngx-auto-logout.umd.js.map +1 -0
  5. package/dist/bundles/ngx-auto-logout.umd.min.js +16 -0
  6. package/dist/bundles/ngx-auto-logout.umd.min.js.map +1 -0
  7. package/dist/esm2015/lib/auto-logout.component.js +351 -0
  8. package/dist/esm2015/lib/auto-logout.module.js +26 -0
  9. package/dist/esm2015/lib/auto-logout.service.js +384 -0
  10. package/dist/esm2015/lib/models/auto-logout-config.interface.js +10 -0
  11. package/dist/esm2015/lib/models/auto-logout-config.token.js +7 -0
  12. package/dist/esm2015/lib/provide-auto-logout.js +11 -0
  13. package/dist/esm2015/ngx-auto-logout.js +5 -0
  14. package/dist/esm2015/public-api.js +10 -0
  15. package/dist/esm5/lib/auto-logout.component.js +196 -0
  16. package/dist/esm5/lib/auto-logout.module.js +30 -0
  17. package/dist/esm5/lib/auto-logout.service.js +391 -0
  18. package/dist/esm5/lib/models/auto-logout-config.interface.js +10 -0
  19. package/dist/esm5/lib/models/auto-logout-config.token.js +7 -0
  20. package/dist/esm5/lib/provide-auto-logout.js +11 -0
  21. package/dist/esm5/ngx-auto-logout.js +5 -0
  22. package/dist/esm5/public-api.js +10 -0
  23. package/dist/fesm2015/ngx-auto-logout.js +787 -0
  24. package/dist/fesm2015/ngx-auto-logout.js.map +1 -0
  25. package/dist/fesm5/ngx-auto-logout.js +643 -0
  26. package/dist/fesm5/ngx-auto-logout.js.map +1 -0
  27. package/dist/lib/auto-logout.component.d.ts +81 -0
  28. package/dist/lib/auto-logout.module.d.ts +8 -0
  29. package/dist/lib/auto-logout.service.d.ts +108 -0
  30. package/dist/lib/models/auto-logout-config.interface.d.ts +46 -0
  31. package/dist/lib/models/auto-logout-config.token.d.ts +7 -0
  32. package/dist/lib/provide-auto-logout.d.ts +6 -0
  33. package/dist/ngx-auto-logout.d.ts +4 -0
  34. package/dist/ngx-auto-logout.metadata.json +1 -0
  35. package/dist/package.json +41 -0
  36. package/dist/public-api.d.ts +6 -0
  37. package/package.json +53 -0
@@ -0,0 +1,384 @@
1
+ import { __decorate } from "tslib";
2
+ import { Injectable, NgZone } from '@angular/core';
3
+ import { BehaviorSubject, interval } from 'rxjs';
4
+ import { DEFAULT_AUTO_LOGOUT_CONFIG } from './models/auto-logout-config.interface';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Auto logout service
8
+ * Angular 9 compatible: use providedIn: 'root' (official pattern)
9
+ */
10
+ let AutoLogoutService = class AutoLogoutService {
11
+ /**
12
+ * Constructor
13
+ * Note: Do NOT use @Inject() here, it causes DI errors in Angular 9 VE
14
+ * Config should be passed via startMonitoring() method instead
15
+ */
16
+ constructor(ngZone) {
17
+ this.ngZone = ngZone;
18
+ // 配置是否已初始化
19
+ this.isConfigInitialized = false;
20
+ // localStorage 键名
21
+ this.LOGIN_TIME_KEY = 'autoLogout_loginTime';
22
+ this.LAST_ACTIVITY_KEY = 'autoLogout_lastActivity';
23
+ this.EXTEND_COUNT_KEY = 'autoLogout_extendCount';
24
+ this.PAUSE_STATE_KEY = 'autoLogout_pauseState';
25
+ this.lastActivityTime = Date.now();
26
+ this.countdownValue = 0;
27
+ this.countdownSubject = new BehaviorSubject(0);
28
+ this.timerSubscription = null;
29
+ this.activityListeners = [];
30
+ this.warningShown = false;
31
+ // 是否启用活动监听
32
+ this.enableActivityTracking = false;
33
+ // 暂停状态
34
+ this.isPaused = false;
35
+ this.pauseStartTime = 0;
36
+ this.pausedRemainingTime = 0;
37
+ // Use default config, will be overridden by startMonitoring()
38
+ this.currentConfig = Object.assign({}, DEFAULT_AUTO_LOGOUT_CONFIG);
39
+ this.countdownValue = Math.floor(this.currentConfig.timeout);
40
+ this.countdownSubject = new BehaviorSubject(this.countdownValue);
41
+ }
42
+ getCountdown() {
43
+ return this.countdownSubject.asObservable();
44
+ }
45
+ /**
46
+ * 启动自动登出监控
47
+ */
48
+ startMonitoring(config, enableTracking = false) {
49
+ this.stopMonitoring();
50
+ if (config) {
51
+ this.currentConfig = Object.assign(Object.assign({}, this.currentConfig), config);
52
+ }
53
+ // 恢复暂停状态
54
+ this.restorePauseState();
55
+ if (this.isPaused) {
56
+ return;
57
+ }
58
+ // 根据模式初始化
59
+ if (this.currentConfig.mode === 'fixed') {
60
+ this.initFixedMode();
61
+ }
62
+ else {
63
+ this.initIdleMode(enableTracking);
64
+ }
65
+ this.warningShown = false;
66
+ // 启动定时器
67
+ this.ngZone.runOutsideAngular(() => {
68
+ this.timerSubscription = interval(1000).subscribe(() => {
69
+ this.updateCountdown();
70
+ });
71
+ });
72
+ }
73
+ /**
74
+ * 停止监控
75
+ */
76
+ stopMonitoring() {
77
+ if (this.timerSubscription) {
78
+ this.timerSubscription.unsubscribe();
79
+ this.timerSubscription = null;
80
+ }
81
+ this.removeActivityListeners();
82
+ }
83
+ /**
84
+ * 清除登录时间
85
+ */
86
+ clearLoginTime() {
87
+ localStorage.removeItem(this.LOGIN_TIME_KEY);
88
+ localStorage.removeItem(this.LAST_ACTIVITY_KEY);
89
+ this.resetExtendCount();
90
+ this.clearPauseState();
91
+ }
92
+ /**
93
+ * 延长会话
94
+ */
95
+ extendSession(extendSeconds = 1800) {
96
+ if (this.isMaxExtendReached()) {
97
+ console.warn('已达到最大延长次数');
98
+ return false;
99
+ }
100
+ if (this.currentConfig.mode === 'fixed') {
101
+ this.lastActivityTime -= extendSeconds * 1000;
102
+ }
103
+ else {
104
+ this.resetActivityTimer();
105
+ }
106
+ this.incrementExtendCount();
107
+ if (this.currentConfig.onExtended) {
108
+ this.currentConfig.onExtended(extendSeconds);
109
+ }
110
+ return true;
111
+ }
112
+ /**
113
+ * 检查是否可以延长
114
+ */
115
+ canExtendSession() {
116
+ return !this.isMaxExtendReached() && !this.isPaused;
117
+ }
118
+ /**
119
+ * 获取剩余可延长次数
120
+ */
121
+ getRemainingExtendTimes() {
122
+ if (this.currentConfig.maxExtendTimes === -1 || this.currentConfig.maxExtendTimes === undefined) {
123
+ return -1;
124
+ }
125
+ const usedCount = this.getExtendCount();
126
+ return Math.max(0, this.currentConfig.maxExtendTimes - usedCount);
127
+ }
128
+ /**
129
+ * 获取最后操作时间显示
130
+ */
131
+ getLastActivityDisplay() {
132
+ if (this.currentConfig.mode !== 'idle') {
133
+ return '';
134
+ }
135
+ const lastActivity = this.getLastActivityTime();
136
+ if (!lastActivity) {
137
+ return '';
138
+ }
139
+ const minutesAgo = Math.floor((Date.now() - lastActivity) / 60000);
140
+ if (minutesAgo < 1) {
141
+ return '刚刚操作';
142
+ }
143
+ return `${minutesAgo}分钟前操作`;
144
+ }
145
+ /**
146
+ * 暂停
147
+ */
148
+ pause() {
149
+ if (this.isPaused)
150
+ return;
151
+ this.isPaused = true;
152
+ this.pauseStartTime = Date.now();
153
+ this.pausedRemainingTime = this.countdownValue;
154
+ this.stopMonitoring();
155
+ this.savePauseState();
156
+ if (this.currentConfig.onPaused) {
157
+ this.currentConfig.onPaused();
158
+ }
159
+ }
160
+ /**
161
+ * 恢复
162
+ */
163
+ resume() {
164
+ if (!this.isPaused)
165
+ return;
166
+ const pauseDuration = Date.now() - this.pauseStartTime;
167
+ if (this.currentConfig.mode === 'fixed') {
168
+ this.lastActivityTime += pauseDuration;
169
+ }
170
+ else {
171
+ this.lastActivityTime += pauseDuration;
172
+ this.setLastActivityTime(this.lastActivityTime);
173
+ }
174
+ this.isPaused = false;
175
+ this.pauseStartTime = 0;
176
+ this.pausedRemainingTime = 0;
177
+ this.clearPauseState();
178
+ this.startMonitoring(this.currentConfig, this.enableActivityTracking);
179
+ if (this.currentConfig.onResumed) {
180
+ this.currentConfig.onResumed();
181
+ }
182
+ }
183
+ /**
184
+ * 检查是否暂停
185
+ */
186
+ isAutoLogoutPaused() {
187
+ return this.isPaused;
188
+ }
189
+ /**
190
+ * 格式化倒计时
191
+ */
192
+ formatCountdown(seconds) {
193
+ const mins = Math.floor(seconds / 60);
194
+ const secs = seconds % 60;
195
+ return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
196
+ }
197
+ /**
198
+ * 判断是否警告状态
199
+ */
200
+ isWarningState(seconds) {
201
+ const warningTime = this.currentConfig.warningTime || 30;
202
+ return seconds <= warningTime && seconds > 0;
203
+ }
204
+ /**
205
+ * 判断是否紧急状态(最后10秒)
206
+ */
207
+ isUrgentState(seconds) {
208
+ return seconds <= 10 && seconds > 0;
209
+ }
210
+ /**
211
+ * 获取当前模式
212
+ */
213
+ getCurrentMode() {
214
+ return this.currentConfig.mode;
215
+ }
216
+ // ==================== 私有方法 ====================
217
+ initFixedMode() {
218
+ const loginTime = this.getLoginTime();
219
+ if (!loginTime) {
220
+ this.setLoginTime(Date.now());
221
+ this.lastActivityTime = Date.now();
222
+ }
223
+ else {
224
+ this.lastActivityTime = loginTime;
225
+ }
226
+ this.updateCountdownValue();
227
+ }
228
+ initIdleMode(enableTracking) {
229
+ this.enableActivityTracking = enableTracking || true;
230
+ const lastActivity = this.getLastActivityTime();
231
+ if (!lastActivity) {
232
+ this.setLastActivityTime(Date.now());
233
+ this.lastActivityTime = Date.now();
234
+ }
235
+ else {
236
+ this.lastActivityTime = lastActivity;
237
+ }
238
+ this.registerActivityListeners();
239
+ this.updateCountdownValue();
240
+ }
241
+ updateCountdownValue() {
242
+ const now = Date.now();
243
+ const elapsed = now - this.lastActivityTime;
244
+ const remaining = Math.max(0, Math.floor((this.currentConfig.timeout * 1000 - elapsed) / 1000));
245
+ this.countdownValue = remaining;
246
+ this.countdownSubject.next(this.countdownValue);
247
+ }
248
+ updateCountdown() {
249
+ const now = Date.now();
250
+ const elapsed = now - this.lastActivityTime;
251
+ const remaining = Math.max(0, Math.floor((this.currentConfig.timeout * 1000 - elapsed) / 1000));
252
+ if (remaining !== this.countdownValue) {
253
+ this.countdownValue = remaining;
254
+ this.ngZone.run(() => {
255
+ this.countdownSubject.next(this.countdownValue);
256
+ });
257
+ // 警告回调
258
+ const warningTime = this.currentConfig.warningTime || 30;
259
+ if (remaining === warningTime && !this.warningShown) {
260
+ this.warningShown = true;
261
+ if (this.currentConfig.onWarning) {
262
+ this.currentConfig.onWarning(remaining);
263
+ }
264
+ }
265
+ // 超时回调
266
+ if (remaining <= 0) {
267
+ this.performAutoLogout();
268
+ }
269
+ }
270
+ }
271
+ performAutoLogout() {
272
+ this.stopMonitoring();
273
+ this.clearLoginTime();
274
+ if (this.currentConfig.onTimeout) {
275
+ this.currentConfig.onTimeout();
276
+ }
277
+ else {
278
+ // 默认行为:导航到登录页
279
+ // Note: Router navigation removed to avoid DI issues in Angular 9 VE
280
+ // Use onTimeout callback for custom navigation
281
+ console.warn('Auto logout timeout - implement custom navigation via onTimeout callback');
282
+ }
283
+ }
284
+ registerActivityListeners() {
285
+ const events = ['mousedown', 'mousemove', 'keypress', 'scroll', 'touchstart', 'click'];
286
+ events.forEach((event) => {
287
+ const listener = () => this.resetActivityTimer();
288
+ document.addEventListener(event, listener, true);
289
+ this.activityListeners.push({ event, listener });
290
+ });
291
+ }
292
+ removeActivityListeners() {
293
+ this.activityListeners.forEach(({ event, listener }) => {
294
+ document.removeEventListener(event, listener, true);
295
+ });
296
+ this.activityListeners = [];
297
+ }
298
+ resetActivityTimer() {
299
+ if (this.currentConfig.mode === 'idle') {
300
+ this.lastActivityTime = Date.now();
301
+ this.setLastActivityTime(this.lastActivityTime);
302
+ this.updateCountdownValue();
303
+ this.warningShown = false;
304
+ }
305
+ }
306
+ isMaxExtendReached() {
307
+ if (this.currentConfig.maxExtendTimes === -1 || this.currentConfig.maxExtendTimes === undefined) {
308
+ return false;
309
+ }
310
+ const usedCount = this.getExtendCount();
311
+ return usedCount >= this.currentConfig.maxExtendTimes;
312
+ }
313
+ getExtendCount() {
314
+ const countStr = localStorage.getItem(this.EXTEND_COUNT_KEY);
315
+ return countStr ? parseInt(countStr, 10) : 0;
316
+ }
317
+ incrementExtendCount() {
318
+ const currentCount = this.getExtendCount();
319
+ localStorage.setItem(this.EXTEND_COUNT_KEY, (currentCount + 1).toString());
320
+ }
321
+ resetExtendCount() {
322
+ localStorage.removeItem(this.EXTEND_COUNT_KEY);
323
+ }
324
+ getLoginTime() {
325
+ const timeStr = localStorage.getItem(this.LOGIN_TIME_KEY);
326
+ return timeStr ? parseInt(timeStr, 10) : null;
327
+ }
328
+ setLoginTime(time) {
329
+ localStorage.setItem(this.LOGIN_TIME_KEY, time.toString());
330
+ }
331
+ getLastActivityTime() {
332
+ const timeStr = localStorage.getItem(this.LAST_ACTIVITY_KEY);
333
+ return timeStr ? parseInt(timeStr, 10) : null;
334
+ }
335
+ setLastActivityTime(time) {
336
+ localStorage.setItem(this.LAST_ACTIVITY_KEY, time.toString());
337
+ }
338
+ savePauseState() {
339
+ const state = {
340
+ isPaused: true,
341
+ pauseStartTime: this.pauseStartTime,
342
+ pausedRemainingTime: this.pausedRemainingTime,
343
+ mode: this.currentConfig.mode,
344
+ lastActivityTime: this.lastActivityTime
345
+ };
346
+ localStorage.setItem(this.PAUSE_STATE_KEY, JSON.stringify(state));
347
+ }
348
+ clearPauseState() {
349
+ localStorage.removeItem(this.PAUSE_STATE_KEY);
350
+ }
351
+ restorePauseState() {
352
+ const stateStr = localStorage.getItem(this.PAUSE_STATE_KEY);
353
+ if (!stateStr)
354
+ return;
355
+ try {
356
+ const state = JSON.parse(stateStr);
357
+ if (state.isPaused) {
358
+ this.isPaused = true;
359
+ this.pauseStartTime = state.pauseStartTime;
360
+ this.pausedRemainingTime = state.pausedRemainingTime;
361
+ this.lastActivityTime = state.lastActivityTime;
362
+ this.currentConfig.mode = state.mode;
363
+ if (this.timerSubscription) {
364
+ this.timerSubscription.unsubscribe();
365
+ this.timerSubscription = null;
366
+ }
367
+ this.removeActivityListeners();
368
+ }
369
+ }
370
+ catch (e) {
371
+ console.error('恢复暂停状态失败:', e);
372
+ this.clearPauseState();
373
+ }
374
+ }
375
+ };
376
+ AutoLogoutService.ctorParameters = () => [
377
+ { type: NgZone }
378
+ ];
379
+ AutoLogoutService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AutoLogoutService_Factory() { return new AutoLogoutService(i0.ɵɵinject(i0.NgZone)); }, token: AutoLogoutService, providedIn: "root" });
380
+ AutoLogoutService = __decorate([
381
+ Injectable({ providedIn: 'root' })
382
+ ], AutoLogoutService);
383
+ export { AutoLogoutService };
384
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1sb2dvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hdXRvLWxvZ291dC8iLCJzb3VyY2VzIjpbImxpYi9hdXRvLWxvZ291dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFjLFFBQVEsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFvQiwwQkFBMEIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOztBQUVyRzs7O0dBR0c7QUFFSCxJQUFhLGlCQUFpQixHQUE5QixNQUFhLGlCQUFpQjtJQTRCNUI7Ozs7T0FJRztJQUNILFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBN0JsQyxXQUFXO1FBQ0gsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRXBDLGtCQUFrQjtRQUNELG1CQUFjLEdBQUcsc0JBQXNCLENBQUM7UUFDeEMsc0JBQWlCLEdBQUcseUJBQXlCLENBQUM7UUFDOUMscUJBQWdCLEdBQUcsd0JBQXdCLENBQUM7UUFDNUMsb0JBQWUsR0FBRyx1QkFBdUIsQ0FBQztRQUVuRCxxQkFBZ0IsR0FBVyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdEMsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDM0IscUJBQWdCLEdBQTRCLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzNFLHNCQUFpQixHQUF3QixJQUFJLENBQUM7UUFDOUMsc0JBQWlCLEdBQVUsRUFBRSxDQUFDO1FBQzlCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRXRDLFdBQVc7UUFDSCwyQkFBc0IsR0FBWSxLQUFLLENBQUM7UUFFaEQsT0FBTztRQUNDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDM0Isd0JBQW1CLEdBQVcsQ0FBQyxDQUFD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QztZQUNuQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBRXJDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO29CQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7aUJBQy9CO2dCQUNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2FBQ2hDO1NBQ0Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7Q0FDRixDQUFBOztZQXhZNkIsTUFBTTs7O0FBakN2QixpQkFBaUI7SUFEN0IsVUFBVSxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO0dBQ3RCLGlCQUFpQixDQXlhN0I7U0F6YVksaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGludGVydmFsLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEF1dG9Mb2dvdXRDb25maWcsIERFRkFVTFRfQVVUT19MT0dPVVRfQ09ORklHIH0gZnJvbSAnLi9tb2RlbHMvYXV0by1sb2dvdXQtY29uZmlnLmludGVyZmFjZSc7XG5cbi8qKlxuICogQXV0byBsb2dvdXQgc2VydmljZVxuICogQW5ndWxhciA5IGNvbXBhdGlibGU6IHVzZSBwcm92aWRlZEluOiAncm9vdCcgKG9mZmljaWFsIHBhdHRlcm4pXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXV0b0xvZ291dFNlcnZpY2Uge1xuICAvLyDlvZPliY3phY3nva5cbiAgcHJpdmF0ZSBjdXJyZW50Q29uZmlnOiBBdXRvTG9nb3V0Q29uZmlnO1xuXG4gIC8vIOmFjee9ruaYr+WQpuW3suWIneWni+WMllxuICBwcml2YXRlIGlzQ29uZmlnSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAvLyBsb2NhbFN0b3JhZ2Ug6ZSu5ZCNXG4gIHByaXZhdGUgcmVhZG9ubHkgTE9HSU5fVElNRV9LRVkgPSAnYXV0b0xvZ291dF9sb2dpblRpbWUnO1xuICBwcml2YXRlIHJlYWRvbmx5IExBU1RfQUNUSVZJVFlfS0VZID0gJ2F1dG9Mb2dvdXRfbGFzdEFjdGl2aXR5JztcbiAgcHJpdmF0ZSByZWFkb25seSBFWFRFTkRfQ09VTlRfS0VZID0gJ2F1dG9Mb2dvdXRfZXh0ZW5kQ291bnQnO1xuICBwcml2YXRlIHJlYWRvbmx5IFBBVVNFX1NUQVRFX0tFWSA9ICdhdXRvTG9nb3V0X3BhdXNlU3RhdGUnO1xuXG4gIHByaXZhdGUgbGFzdEFjdGl2aXR5VGltZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgcHJpdmF0ZSBjb3VudGRvd25WYWx1ZTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBjb3VudGRvd25TdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSB0aW1lclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYWN0aXZpdHlMaXN0ZW5lcnM6IGFueVtdID0gW107XG4gIHByaXZhdGUgd2FybmluZ1Nob3duOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8g5piv5ZCm5ZCv55So5rS75Yqo55uR5ZCsXG4gIHByaXZhdGUgZW5hYmxlQWN0aXZpdHlUcmFja2luZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIOaaguWBnOeKtuaAgVxuICBwcml2YXRlIGlzUGF1c2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgcGF1c2VTdGFydFRpbWU6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgcGF1c2VkUmVtYWluaW5nVGltZTogbnVtYmVyID0gMDtcblxuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICogTm90ZTogRG8gTk9UIHVzZSBASW5qZWN0KCkgaGVyZSwgaXQgY2F1c2VzIERJIGVycm9ycyBpbiBBbmd1bGFyIDkgVkVcbiAgICogQ29uZmlnIHNob3VsZCBiZSBwYXNzZWQgdmlhIHN0YXJ0TW9uaXRvcmluZygpIG1ldGhvZCBpbnN0ZWFkXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lKSB7XG4gICAgLy8gVXNlIGRlZmF1bHQgY29uZmlnLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgc3RhcnRNb25pdG9yaW5nKClcbiAgICB0aGlzLmN1cnJlbnRDb25maWcgPSB7IC4uLkRFRkFVTFRfQVVUT19MT0dPVVRfQ09ORklHIH07XG4gICAgdGhpcy5jb3VudGRvd25WYWx1ZSA9IE1hdGguZmxvb3IodGhpcy5jdXJyZW50Q29uZmlnLnRpbWVvdXQpO1xuICAgIHRoaXMuY291bnRkb3duU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPih0aGlzLmNvdW50ZG93blZhbHVlKTtcbiAgfVxuICBnZXRDb3VudGRvd24oKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5jb3VudGRvd25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWQr+WKqOiHquWKqOeZu+WHuuebkeaOp1xuICAgKi9cbiAgc3RhcnRNb25pdG9yaW5nKGNvbmZpZz86IFBhcnRpYWw8QXV0b0xvZ291dENvbmZpZz4sIGVuYWJsZVRyYWNraW5nOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BNb25pdG9yaW5nKCk7XG5cbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICB0aGlzLmN1cnJlbnRDb25maWcgPSB7IC4uLnRoaXMuY3VycmVudENvbmZpZywgLi4uY29uZmlnIH07XG4gICAgfVxuXG4gICAgLy8g5oGi5aSN5pqC5YGc54q25oCBXG4gICAgdGhpcy5yZXN0b3JlUGF1c2VTdGF0ZSgpO1xuXG4gICAgaWYgKHRoaXMuaXNQYXVzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDmoLnmja7mqKHlvI/liJ3lp4vljJZcbiAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnLm1vZGUgPT09ICdmaXhlZCcpIHtcbiAgICAgIHRoaXMuaW5pdEZpeGVkTW9kZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluaXRJZGxlTW9kZShlbmFibGVUcmFja2luZyk7XG4gICAgfVxuXG4gICAgdGhpcy53YXJuaW5nU2hvd24gPSBmYWxzZTtcblxuICAgIC8vIOWQr+WKqOWumuaXtuWZqFxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24gPSBpbnRlcnZhbCgxMDAwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvdW50ZG93bigpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog5YGc5q2i55uR5o6nXG4gICAqL1xuICBzdG9wTW9uaXRvcmluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50aW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlQWN0aXZpdHlMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmuIXpmaTnmbvlvZXml7bpl7RcbiAgICovXG4gIGNsZWFyTG9naW5UaW1lKCk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTE9HSU5fVElNRV9LRVkpO1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTEFTVF9BQ1RJVklUWV9LRVkpO1xuICAgIHRoaXMucmVzZXRFeHRlbmRDb3VudCgpO1xuICAgIHRoaXMuY2xlYXJQYXVzZVN0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICog5bu26ZW/5Lya6K+dXG4gICAqL1xuICBleHRlbmRTZXNzaW9uKGV4dGVuZFNlY29uZHM6IG51bWJlciA9IDE4MDApOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc01heEV4dGVuZFJlYWNoZWQoKSkge1xuICAgICAgY29uc29sZS53YXJuKCflt7Lovr7liLDmnIDlpKflu7bplb/mrKHmlbAnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnLm1vZGUgPT09ICdmaXhlZCcpIHtcbiAgICAgIHRoaXMubGFzdEFjdGl2aXR5VGltZSAtPSBleHRlbmRTZWNvbmRzICogMTAwMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNldEFjdGl2aXR5VGltZXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLmluY3JlbWVudEV4dGVuZENvdW50KCk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnLm9uRXh0ZW5kZWQpIHtcbiAgICAgIHRoaXMuY3VycmVudENvbmZpZy5vbkV4dGVuZGVkKGV4dGVuZFNlY29uZHMpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIOajgOafpeaYr+WQpuWPr+S7peW7tumVv1xuICAgKi9cbiAgY2FuRXh0ZW5kU2Vzc2lvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNNYXhFeHRlbmRSZWFjaGVkKCkgJiYgIXRoaXMuaXNQYXVzZWQ7XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5Ymp5L2Z5Y+v5bu26ZW/5qyh5pWwXG4gICAqL1xuICBnZXRSZW1haW5pbmdFeHRlbmRUaW1lcygpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmN1cnJlbnRDb25maWcubWF4RXh0ZW5kVGltZXMgPT09IC0xIHx8IHRoaXMuY3VycmVudENvbmZpZy5tYXhFeHRlbmRUaW1lcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGNvbnN0IHVzZWRDb3VudCA9IHRoaXMuZ2V0RXh0ZW5kQ291bnQoKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgdGhpcy5jdXJyZW50Q29uZmlnLm1heEV4dGVuZFRpbWVzIC0gdXNlZENvdW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bmnIDlkI7mk43kvZzml7bpl7TmmL7npLpcbiAgICovXG4gIGdldExhc3RBY3Rpdml0eURpc3BsYXkoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnLm1vZGUgIT09ICdpZGxlJykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGxhc3RBY3Rpdml0eSA9IHRoaXMuZ2V0TGFzdEFjdGl2aXR5VGltZSgpO1xuICAgIGlmICghbGFzdEFjdGl2aXR5KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgbWludXRlc0FnbyA9IE1hdGguZmxvb3IoKERhdGUubm93KCkgLSBsYXN0QWN0aXZpdHkpIC8gNjAwMDApO1xuICAgIGlmIChtaW51dGVzQWdvIDwgMSkge1xuICAgICAgcmV0dXJuICfliJrliJrmk43kvZwnO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bWludXRlc0Fnb33liIbpkp/liY3mk43kvZxgO1xuICB9XG5cbiAgLyoqXG4gICAqIOaaguWBnFxuICAgKi9cbiAgcGF1c2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNQYXVzZWQpIHJldHVybjtcblxuICAgIHRoaXMuaXNQYXVzZWQgPSB0cnVlO1xuICAgIHRoaXMucGF1c2VTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMucGF1c2VkUmVtYWluaW5nVGltZSA9IHRoaXMuY291bnRkb3duVmFsdWU7XG5cbiAgICB0aGlzLnN0b3BNb25pdG9yaW5nKCk7XG4gICAgdGhpcy5zYXZlUGF1c2VTdGF0ZSgpO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudENvbmZpZy5vblBhdXNlZCkge1xuICAgICAgdGhpcy5jdXJyZW50Q29uZmlnLm9uUGF1c2VkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOaBouWkjVxuICAgKi9cbiAgcmVzdW1lKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1BhdXNlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcGF1c2VEdXJhdGlvbiA9IERhdGUubm93KCkgLSB0aGlzLnBhdXNlU3RhcnRUaW1lO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudENvbmZpZy5tb2RlID09PSAnZml4ZWQnKSB7XG4gICAgICB0aGlzLmxhc3RBY3Rpdml0eVRpbWUgKz0gcGF1c2VEdXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYXN0QWN0aXZpdHlUaW1lICs9IHBhdXNlRHVyYXRpb247XG4gICAgICB0aGlzLnNldExhc3RBY3Rpdml0eVRpbWUodGhpcy5sYXN0QWN0aXZpdHlUaW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5wYXVzZVN0YXJ0VGltZSA9IDA7XG4gICAgdGhpcy5wYXVzZWRSZW1haW5pbmdUaW1lID0gMDtcblxuICAgIHRoaXMuY2xlYXJQYXVzZVN0YXRlKCk7XG4gICAgdGhpcy5zdGFydE1vbml0b3JpbmcodGhpcy5jdXJyZW50Q29uZmlnLCB0aGlzLmVuYWJsZUFjdGl2aXR5VHJhY2tpbmcpO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudENvbmZpZy5vblJlc3VtZWQpIHtcbiAgICAgIHRoaXMuY3VycmVudENvbmZpZy5vblJlc3VtZWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5qOA5p+l5piv5ZCm5pqC5YGcXG4gICAqL1xuICBpc0F1dG9Mb2dvdXRQYXVzZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNQYXVzZWQ7XG4gIH1cblxuICAvKipcbiAgICog5qC85byP5YyW5YCS6K6h5pe2XG4gICAqL1xuICBmb3JtYXRDb3VudGRvd24oc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBtaW5zID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gNjApO1xuICAgIGNvbnN0IHNlY3MgPSBzZWNvbmRzICUgNjA7XG4gICAgcmV0dXJuIGAke21pbnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke3NlY3MudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gIH1cblxuICAvKipcbiAgICog5Yik5pat5piv5ZCm6K2m5ZGK54q25oCBXG4gICAqL1xuICBpc1dhcm5pbmdTdGF0ZShzZWNvbmRzOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCB3YXJuaW5nVGltZSA9IHRoaXMuY3VycmVudENvbmZpZy53YXJuaW5nVGltZSB8fCAzMDtcbiAgICByZXR1cm4gc2Vjb25kcyA8PSB3YXJuaW5nVGltZSAmJiBzZWNvbmRzID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiDliKTmlq3mmK/lkKbntKfmgKXnirbmgIHvvIjmnIDlkI4xMOenku+8iVxuICAgKi9cbiAgaXNVcmdlbnRTdGF0ZShzZWNvbmRzOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc2Vjb25kcyA8PSAxMCAmJiBzZWNvbmRzID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blvZPliY3mqKHlvI9cbiAgICovXG4gIGdldEN1cnJlbnRNb2RlKCk6ICdmaXhlZCcgfCAnaWRsZScge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRDb25maWcubW9kZTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOengeacieaWueazlSA9PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgaW5pdEZpeGVkTW9kZSgpOiB2b2lkIHtcbiAgICBjb25zdCBsb2dpblRpbWUgPSB0aGlzLmdldExvZ2luVGltZSgpO1xuICAgIGlmICghbG9naW5UaW1lKSB7XG4gICAgICB0aGlzLnNldExvZ2luVGltZShEYXRlLm5vdygpKTtcbiAgICAgIHRoaXMubGFzdEFjdGl2aXR5VGltZSA9IERhdGUubm93KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGFzdEFjdGl2aXR5VGltZSA9IGxvZ2luVGltZTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDb3VudGRvd25WYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0SWRsZU1vZGUoZW5hYmxlVHJhY2tpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmVuYWJsZUFjdGl2aXR5VHJhY2tpbmcgPSBlbmFibGVUcmFja2luZyB8fCB0cnVlO1xuXG4gICAgY29uc3QgbGFzdEFjdGl2aXR5ID0gdGhpcy5nZXRMYXN0QWN0aXZpdHlUaW1lKCk7XG4gICAgaWYgKCFsYXN0QWN0aXZpdHkpIHtcbiAgICAgIHRoaXMuc2V0TGFzdEFjdGl2aXR5VGltZShEYXRlLm5vdygpKTtcbiAgICAgIHRoaXMubGFzdEFjdGl2aXR5VGltZSA9IERhdGUubm93KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGFzdEFjdGl2aXR5VGltZSA9IGxhc3RBY3Rpdml0eTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZ2lzdGVyQWN0aXZpdHlMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVwZGF0ZUNvdW50ZG93blZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvdW50ZG93blZhbHVlKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZWxhcHNlZCA9IG5vdyAtIHRoaXMubGFzdEFjdGl2aXR5VGltZTtcbiAgICBjb25zdCByZW1haW5pbmcgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKCh0aGlzLmN1cnJlbnRDb25maWcudGltZW91dCAqIDEwMDAgLSBlbGFwc2VkKSAvIDEwMDApKTtcbiAgICB0aGlzLmNvdW50ZG93blZhbHVlID0gcmVtYWluaW5nO1xuICAgIHRoaXMuY291bnRkb3duU3ViamVjdC5uZXh0KHRoaXMuY291bnRkb3duVmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb3VudGRvd24oKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBlbGFwc2VkID0gbm93IC0gdGhpcy5sYXN0QWN0aXZpdHlUaW1lO1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKHRoaXMuY3VycmVudENvbmZpZy50aW1lb3V0ICogMTAwMCAtIGVsYXBzZWQpIC8gMTAwMCkpO1xuXG4gICAgaWYgKHJlbWFpbmluZyAhPT0gdGhpcy5jb3VudGRvd25WYWx1ZSkge1xuICAgICAgdGhpcy5jb3VudGRvd25WYWx1ZSA9IHJlbWFpbmluZztcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuY291bnRkb3duU3ViamVjdC5uZXh0KHRoaXMuY291bnRkb3duVmFsdWUpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIOitpuWRiuWbnuiwg1xuICAgICAgY29uc3Qgd2FybmluZ1RpbWUgPSB0aGlzLmN1cnJlbnRDb25maWcud2FybmluZ1RpbWUgfHwgMzA7XG4gICAgICBpZiAocmVtYWluaW5nID09PSB3YXJuaW5nVGltZSAmJiAhdGhpcy53YXJuaW5nU2hvd24pIHtcbiAgICAgICAgdGhpcy53YXJuaW5nU2hvd24gPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnLm9uV2FybmluZykge1xuICAgICAgICAgIHRoaXMuY3VycmVudENvbmZpZy5vbldhcm5pbmcocmVtYWluaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDotoXml7blm57osINcbiAgICAgIGlmIChyZW1haW5pbmcgPD0gMCkge1xuICAgICAgICB0aGlzLnBlcmZvcm1BdXRvTG9nb3V0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwZXJmb3JtQXV0b0xvZ291dCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BNb25pdG9yaW5nKCk7XG4gICAgdGhpcy5jbGVhckxvZ2luVGltZSgpO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudENvbmZpZy5vblRpbWVvdXQpIHtcbiAgICAgIHRoaXMuY3VycmVudENvbmZpZy5vblRpbWVvdXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g6buY6K6k6KGM5Li677ya5a+86Iiq5Yiw55m75b2V6aG1XG4gICAgICAvLyBOb3RlOiBSb3V0ZXIgbmF2aWdhdGlvbiByZW1vdmVkIHRvIGF2b2lkIERJIGlzc3VlcyBpbiBBbmd1bGFyIDkgVkVcbiAgICAgIC8vIFVzZSBvblRpbWVvdXQgY2FsbGJhY2sgZm9yIGN1c3RvbSBuYXZpZ2F0aW9uXG4gICAgICBjb25zb2xlLndhcm4oJ0F1dG8gbG9nb3V0IHRpbWVvdXQgLSBpbXBsZW1lbnQgY3VzdG9tIG5hdmlnYXRpb24gdmlhIG9uVGltZW91dCBjYWxsYmFjaycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJBY3Rpdml0eUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBldmVudHMgPSBbJ21vdXNlZG93bicsICdtb3VzZW1vdmUnLCAna2V5cHJlc3MnLCAnc2Nyb2xsJywgJ3RvdWNoc3RhcnQnLCAnY2xpY2snXTtcblxuICAgIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgY29uc3QgbGlzdGVuZXIgPSAoKSA9PiB0aGlzLnJlc2V0QWN0aXZpdHlUaW1lcigpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIHRydWUpO1xuICAgICAgdGhpcy5hY3Rpdml0eUxpc3RlbmVycy5wdXNoKHsgZXZlbnQsIGxpc3RlbmVyIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVBY3Rpdml0eUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2aXR5TGlzdGVuZXJzLmZvckVhY2goKHsgZXZlbnQsIGxpc3RlbmVyIH0pID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9KTtcbiAgICB0aGlzLmFjdGl2aXR5TGlzdGVuZXJzID0gW107XG4gIH1cblxuICBwcml2YXRlIHJlc2V0QWN0aXZpdHlUaW1lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnLm1vZGUgPT09ICdpZGxlJykge1xuICAgICAgdGhpcy5sYXN0QWN0aXZpdHlUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIHRoaXMuc2V0TGFzdEFjdGl2aXR5VGltZSh0aGlzLmxhc3RBY3Rpdml0eVRpbWUpO1xuICAgICAgdGhpcy51cGRhdGVDb3VudGRvd25WYWx1ZSgpO1xuICAgICAgdGhpcy53YXJuaW5nU2hvd24gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzTWF4RXh0ZW5kUmVhY2hlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnLm1heEV4dGVuZFRpbWVzID09PSAtMSB8fCB0aGlzLmN1cnJlbnRDb25maWcubWF4RXh0ZW5kVGltZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB1c2VkQ291bnQgPSB0aGlzLmdldEV4dGVuZENvdW50KCk7XG4gICAgcmV0dXJuIHVzZWRDb3VudCA+PSB0aGlzLmN1cnJlbnRDb25maWcubWF4RXh0ZW5kVGltZXM7XG4gIH1cblxuICBwcml2YXRlIGdldEV4dGVuZENvdW50KCk6IG51bWJlciB7XG4gICAgY29uc3QgY291bnRTdHIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkVYVEVORF9DT1VOVF9LRVkpO1xuICAgIHJldHVybiBjb3VudFN0ciA/IHBhcnNlSW50KGNvdW50U3RyLCAxMCkgOiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBpbmNyZW1lbnRFeHRlbmRDb3VudCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50Q291bnQgPSB0aGlzLmdldEV4dGVuZENvdW50KCk7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5FWFRFTkRfQ09VTlRfS0VZLCAoY3VycmVudENvdW50ICsgMSkudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RXh0ZW5kQ291bnQoKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5FWFRFTkRfQ09VTlRfS0VZKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9naW5UaW1lKCk6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IHRpbWVTdHIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkxPR0lOX1RJTUVfS0VZKTtcbiAgICByZXR1cm4gdGltZVN0ciA/IHBhcnNlSW50KHRpbWVTdHIsIDEwKSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHNldExvZ2luVGltZSh0aW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkxPR0lOX1RJTUVfS0VZLCB0aW1lLnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYXN0QWN0aXZpdHlUaW1lKCk6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IHRpbWVTdHIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkxBU1RfQUNUSVZJVFlfS0VZKTtcbiAgICByZXR1cm4gdGltZVN0ciA/IHBhcnNlSW50KHRpbWVTdHIsIDEwKSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHNldExhc3RBY3Rpdml0eVRpbWUodGltZTogbnVtYmVyKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5MQVNUX0FDVElWSVRZX0tFWSwgdGltZS50b1N0cmluZygpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2F2ZVBhdXNlU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICBpc1BhdXNlZDogdHJ1ZSxcbiAgICAgIHBhdXNlU3RhcnRUaW1lOiB0aGlzLnBhdXNlU3RhcnRUaW1lLFxuICAgICAgcGF1c2VkUmVtYWluaW5nVGltZTogdGhpcy5wYXVzZWRSZW1haW5pbmdUaW1lLFxuICAgICAgbW9kZTogdGhpcy5jdXJyZW50Q29uZmlnLm1vZGUsXG4gICAgICBsYXN0QWN0aXZpdHlUaW1lOiB0aGlzLmxhc3RBY3Rpdml0eVRpbWVcbiAgICB9O1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuUEFVU0VfU1RBVEVfS0VZLCBKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclBhdXNlU3RhdGUoKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5QQVVTRV9TVEFURV9LRVkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXN0b3JlUGF1c2VTdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZVN0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuUEFVU0VfU1RBVEVfS0VZKTtcbiAgICBpZiAoIXN0YXRlU3RyKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdGUgPSBKU09OLnBhcnNlKHN0YXRlU3RyKTtcbiAgICAgIGlmIChzdGF0ZS5pc1BhdXNlZCkge1xuICAgICAgICB0aGlzLmlzUGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wYXVzZVN0YXJ0VGltZSA9IHN0YXRlLnBhdXNlU3RhcnRUaW1lO1xuICAgICAgICB0aGlzLnBhdXNlZFJlbWFpbmluZ1RpbWUgPSBzdGF0ZS5wYXVzZWRSZW1haW5pbmdUaW1lO1xuICAgICAgICB0aGlzLmxhc3RBY3Rpdml0eVRpbWUgPSBzdGF0ZS5sYXN0QWN0aXZpdHlUaW1lO1xuICAgICAgICB0aGlzLmN1cnJlbnRDb25maWcubW9kZSA9IHN0YXRlLm1vZGU7XG5cbiAgICAgICAgaWYgKHRoaXMudGltZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBY3Rpdml0eUxpc3RlbmVycygpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ+aBouWkjeaaguWBnOeKtuaAgeWksei0pTonLCBlKTtcbiAgICAgIHRoaXMuY2xlYXJQYXVzZVN0YXRlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 默认配置
3
+ */
4
+ export const DEFAULT_AUTO_LOGOUT_CONFIG = {
5
+ mode: 'fixed',
6
+ timeout: 300,
7
+ warningTime: 30,
8
+ maxExtendTimes: -1,
9
+ };
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1sb2dvdXQtY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hdXRvLWxvZ291dC8iLCJzb3VyY2VzIjpbImxpYi9tb2RlbHMvYXV0by1sb2dvdXQtY29uZmlnLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtREE7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBcUI7SUFDMUQsSUFBSSxFQUFFLE9BQU87SUFDYixPQUFPLEVBQUUsR0FBRztJQUNaLFdBQVcsRUFBRSxFQUFFO0lBQ2YsY0FBYyxFQUFFLENBQUMsQ0FBQztDQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDoh6rliqjnmbvlh7rphY3nva7mjqXlj6NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvTG9nb3V0Q29uZmlnIHtcbiAgLyoqXG4gICAqIOaooeW8j++8mmZpeGVkPeWbuuWumuaXtumXtCwgaWRsZT3nqbrpl7LotoXml7ZcbiAgICovXG4gIG1vZGU6ICdmaXhlZCcgfCAnaWRsZSc7XG5cbiAgLyoqXG4gICAqIOi2heaXtuaXtumXtO+8iOenku+8iVxuICAgKi9cbiAgdGltZW91dDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiDorablkYrml7bpl7TvvIjnp5LvvInvvIzpu5jorqQzMFxuICAgKi9cbiAgd2FybmluZ1RpbWU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIOacgOWkp+W7tumVv+asoeaVsO+8jC0xPeaXoOmZkOWItu+8jDA95LiN5YWB6K6477yMPjA95YW35L2T5qyh5pWwXG4gICAqL1xuICBtYXhFeHRlbmRUaW1lcz86IG51bWJlcjtcblxuICAvKipcbiAgICog6K2m5ZGK5Zue6LCD5Ye95pWw77yI5pu/5LujVG9hc3TvvIlcbiAgICogQHBhcmFtIHNlY29uZHMg5Ymp5L2Z56eS5pWwXG4gICAqL1xuICBvbldhcm5pbmc/OiAoc2Vjb25kczogbnVtYmVyKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiDotoXml7blm57osIPlh73mlbDvvIjmiafooYznmbvlh7rmk43kvZzvvIlcbiAgICovXG4gIG9uVGltZW91dD86ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIOW7tumVv+S8muivneaIkOWKn+Wbnuiwg1xuICAgKi9cbiAgb25FeHRlbmRlZD86IChzZWNvbmRzOiBudW1iZXIpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIOaaguWBnOWbnuiwg1xuICAgKi9cbiAgb25QYXVzZWQ/OiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiDmgaLlpI3lm57osINcbiAgICovXG4gIG9uUmVzdW1lZD86ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICog6buY6K6k6YWN572uXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FVVE9fTE9HT1VUX0NPTkZJRzogQXV0b0xvZ291dENvbmZpZyA9IHtcbiAgbW9kZTogJ2ZpeGVkJyxcbiAgdGltZW91dDogMzAwLCAvLyA15YiG6ZKfXG4gIHdhcm5pbmdUaW1lOiAzMCxcbiAgbWF4RXh0ZW5kVGltZXM6IC0xLFxufTtcbiJdfQ==
@@ -0,0 +1,7 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ /**
3
+ * InjectionToken for auto logout configuration
4
+ * Extracted to a separate file to avoid Angular 9 Ivy compilation scope issues
5
+ */
6
+ export const AUTO_LOGOUT_CONFIG = new InjectionToken('AutoLogoutConfig');
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1sb2dvdXQtY29uZmlnLnRva2VuLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWF1dG8tbG9nb3V0LyIsInNvdXJjZXMiOlsibGliL21vZGVscy9hdXRvLWxvZ291dC1jb25maWcudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBbUIsa0JBQWtCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRvTG9nb3V0Q29uZmlnIH0gZnJvbSAnLi9hdXRvLWxvZ291dC1jb25maWcuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBJbmplY3Rpb25Ub2tlbiBmb3IgYXV0byBsb2dvdXQgY29uZmlndXJhdGlvblxuICogRXh0cmFjdGVkIHRvIGEgc2VwYXJhdGUgZmlsZSB0byBhdm9pZCBBbmd1bGFyIDkgSXZ5IGNvbXBpbGF0aW9uIHNjb3BlIGlzc3Vlc1xuICovXG5leHBvcnQgY29uc3QgQVVUT19MT0dPVVRfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPEF1dG9Mb2dvdXRDb25maWc+KCdBdXRvTG9nb3V0Q29uZmlnJyk7XG4iXX0=
@@ -0,0 +1,11 @@
1
+ import { AUTO_LOGOUT_CONFIG } from './models/auto-logout-config.token';
2
+ /**
3
+ * 提供自动登出配置(Angular 15+ Standalone)
4
+ */
5
+ export function provideAutoLogout(config) {
6
+ return {
7
+ provide: AUTO_LOGOUT_CONFIG,
8
+ useValue: config
9
+ };
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1hdXRvLWxvZ291dC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hdXRvLWxvZ291dC8iLCJzb3VyY2VzIjpbImxpYi9wcm92aWRlLWF1dG8tbG9nb3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR3ZFOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQXdCO0lBQ3hELE9BQU87UUFDTCxPQUFPLEVBQUUsa0JBQWtCO1FBQzNCLFFBQVEsRUFBRSxNQUFNO0tBQ2pCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFVVE9fTE9HT1VUX0NPTkZJRyB9IGZyb20gJy4vbW9kZWxzL2F1dG8tbG9nb3V0LWNvbmZpZy50b2tlbic7XG5pbXBvcnQgeyBBdXRvTG9nb3V0Q29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvYXV0by1sb2dvdXQtY29uZmlnLmludGVyZmFjZSc7XG5cbi8qKlxuICog5o+Q5L6b6Ieq5Yqo55m75Ye66YWN572u77yIQW5ndWxhciAxNSsgU3RhbmRhbG9uZe+8iVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUF1dG9Mb2dvdXQoY29uZmlnOiBBdXRvTG9nb3V0Q29uZmlnKTogUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IEFVVE9fTE9HT1VUX0NPTkZJRyxcbiAgICB1c2VWYWx1ZTogY29uZmlnXG4gIH07XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWF1dG8tbG9nb3V0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWF1dG8tbG9nb3V0LyIsInNvdXJjZXMiOlsibmd4LWF1dG8tbG9nb3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -0,0 +1,10 @@
1
+ /*
2
+ * Public API Surface of auto-logout
3
+ */
4
+ export { DEFAULT_AUTO_LOGOUT_CONFIG } from './lib/models/auto-logout-config.interface';
5
+ export { AUTO_LOGOUT_CONFIG } from './lib/models/auto-logout-config.token';
6
+ export { AutoLogoutService } from './lib/auto-logout.service';
7
+ export { AutoLogoutModule } from './lib/auto-logout.module';
8
+ export { AutoLogoutComponent } from './lib/auto-logout.component';
9
+ export { provideAutoLogout } from './lib/provide-auto-logout';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hdXRvLWxvZ291dC8iLCJzb3VyY2VzIjpbInB1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQW9CLDBCQUEwQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGF1dG8tbG9nb3V0XG4gKi9cblxuZXhwb3J0IHsgQXV0b0xvZ291dENvbmZpZywgREVGQVVMVF9BVVRPX0xPR09VVF9DT05GSUcgfSBmcm9tICcuL2xpYi9tb2RlbHMvYXV0by1sb2dvdXQtY29uZmlnLmludGVyZmFjZSc7XG5leHBvcnQgeyBBVVRPX0xPR09VVF9DT05GSUcgfSBmcm9tICcuL2xpYi9tb2RlbHMvYXV0by1sb2dvdXQtY29uZmlnLnRva2VuJztcbmV4cG9ydCB7IEF1dG9Mb2dvdXRTZXJ2aWNlIH0gZnJvbSAnLi9saWIvYXV0by1sb2dvdXQuc2VydmljZSc7XG5leHBvcnQgeyBBdXRvTG9nb3V0TW9kdWxlIH0gZnJvbSAnLi9saWIvYXV0by1sb2dvdXQubW9kdWxlJztcbmV4cG9ydCB7IEF1dG9Mb2dvdXRDb21wb25lbnQgfSBmcm9tICcuL2xpYi9hdXRvLWxvZ291dC5jb21wb25lbnQnO1xuZXhwb3J0IHsgcHJvdmlkZUF1dG9Mb2dvdXQgfSBmcm9tICcuL2xpYi9wcm92aWRlLWF1dG8tbG9nb3V0JztcbiJdfQ==