@wavemaker/app-ng-runtime 11.14.2-rc.6311 → 11.15.0-1.246
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.
- package/build-task/bundles/index.umd.js +13 -2
- package/build-task/esm2022/input/default/checkbox/checkbox.build.mjs +9 -2
- package/build-task/esm2022/input/default/radioset/radioset.build.mjs +6 -2
- package/build-task/fesm2022/index.mjs +13 -2
- package/build-task/fesm2022/index.mjs.map +1 -1
- package/components/base/bundles/index.umd.js +271 -128
- package/components/base/esm2022/public_api.mjs +2 -2
- package/components/base/esm2022/utils/autolayout-utils.mjs +252 -0
- package/components/base/esm2022/utils/live-utils.mjs +10 -7
- package/components/base/esm2022/utils/widget-utils.mjs +8 -1
- package/components/base/esm2022/widgets/common/base/base.component.mjs +7 -8
- package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +4 -1
- package/components/base/esm2022/widgets/common/container/container.directive.mjs +28 -150
- package/components/base/esm2022/widgets/common/container/container.props.mjs +6 -2
- package/components/base/fesm2022/index.mjs +273 -129
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/base/public_api.d.ts +1 -1
- package/components/base/utils/autolayout-utils.d.ts +29 -0
- package/components/base/utils/widget-utils.d.ts +1 -0
- package/components/base/widgets/common/container/container.directive.d.ts +7 -9
- package/components/basic/label/bundles/index.umd.js +4 -0
- package/components/basic/label/esm2022/label.directive.mjs +5 -1
- package/components/basic/label/fesm2022/index.mjs +4 -0
- package/components/basic/label/fesm2022/index.mjs.map +1 -1
- package/components/basic/search/bundles/index.umd.js +13 -11
- package/components/basic/search/esm2022/search.component.mjs +14 -12
- package/components/basic/search/fesm2022/index.mjs +13 -11
- package/components/basic/search/fesm2022/index.mjs.map +1 -1
- package/components/chart/bundles/index.umd.js +2 -2
- package/components/chart/esm2022/chart.utils.mjs +3 -3
- package/components/chart/fesm2022/index.mjs +2 -2
- package/components/chart/fesm2022/index.mjs.map +1 -1
- package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +2 -0
- package/components/containers/accordion/accordion.directive.d.ts +4 -0
- package/components/containers/accordion/bundles/index.umd.js +34 -0
- package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +6 -2
- package/components/containers/accordion/esm2022/accordion.directive.mjs +32 -2
- package/components/containers/accordion/fesm2022/index.mjs +36 -2
- package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
- package/components/containers/tabs/bundles/index.umd.js +34 -0
- package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +6 -2
- package/components/containers/tabs/esm2022/tabs.component.mjs +33 -4
- package/components/containers/tabs/fesm2022/index.mjs +36 -2
- package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
- package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +2 -0
- package/components/containers/tabs/tabs.component.d.ts +5 -1
- package/components/containers/wizard/bundles/index.umd.js +46 -2
- package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +8 -2
- package/components/containers/wizard/esm2022/wizard.component.mjs +42 -4
- package/components/containers/wizard/fesm2022/index.mjs +48 -4
- package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
- package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +4 -0
- package/components/containers/wizard/wizard.component.d.ts +1 -0
- package/components/data/form/bundles/index.umd.js +28 -1
- package/components/data/form/esm2022/form-field/form-field.directive.mjs +4 -1
- package/components/data/form/esm2022/form.component.mjs +24 -2
- package/components/data/form/esm2022/form.props.mjs +3 -2
- package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +2 -1
- package/components/data/form/fesm2022/index.mjs +29 -2
- package/components/data/form/fesm2022/index.mjs.map +1 -1
- package/components/data/form/form.component.d.ts +3 -0
- package/components/data/list/bundles/index.umd.js +0 -9
- package/components/data/list/esm2022/list-item.directive.mjs +1 -10
- package/components/data/list/fesm2022/index.mjs +0 -9
- package/components/data/list/fesm2022/index.mjs.map +1 -1
- package/components/data/pagination/bundles/index.umd.js +6 -2
- package/components/data/pagination/esm2022/pagination.component.mjs +7 -3
- package/components/data/pagination/fesm2022/index.mjs +6 -2
- package/components/data/pagination/fesm2022/index.mjs.map +1 -1
- package/components/data/table/bundles/index.umd.js +21 -4
- package/components/data/table/esm2022/table.component.mjs +22 -5
- package/components/data/table/fesm2022/index.mjs +21 -4
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +6 -2
- package/components/dialogs/alert-dialog/bundles/index.umd.js +18 -8
- package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +17 -7
- package/components/dialogs/alert-dialog/fesm2022/index.mjs +15 -5
- package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
- package/components/input/checkbox/bundles/index.umd.js +12 -3
- package/components/input/checkbox/checkbox.component.d.ts +2 -0
- package/components/input/checkbox/esm2022/checkbox.component.mjs +9 -3
- package/components/input/checkbox/esm2022/checkbox.props.mjs +5 -2
- package/components/input/checkbox/fesm2022/index.mjs +12 -3
- package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
- package/components/input/checkboxset/bundles/index.umd.js +12 -1
- package/components/input/checkboxset/checkboxset.component.d.ts +1 -0
- package/components/input/checkboxset/esm2022/checkboxset.component.mjs +11 -1
- package/components/input/checkboxset/esm2022/checkboxset.props.mjs +3 -2
- package/components/input/checkboxset/fesm2022/index.mjs +12 -1
- package/components/input/checkboxset/fesm2022/index.mjs.map +1 -1
- package/components/input/epoch/base-date-time/base-date-time.component.d.ts +0 -1
- package/components/input/epoch/base-date-time/bundles/index.umd.js +29 -27
- package/components/input/epoch/base-date-time/esm2022/base-date-time.component.mjs +30 -28
- package/components/input/epoch/base-date-time/fesm2022/index.mjs +29 -27
- package/components/input/epoch/base-date-time/fesm2022/index.mjs.map +1 -1
- package/components/input/epoch/date/bundles/index.umd.js +4 -3
- package/components/input/epoch/date/esm2022/date.component.mjs +5 -4
- package/components/input/epoch/date/fesm2022/index.mjs +4 -3
- package/components/input/epoch/date/fesm2022/index.mjs.map +1 -1
- package/components/input/epoch/date-time/bundles/index.umd.js +5 -4
- package/components/input/epoch/date-time/esm2022/date-time.component.mjs +7 -6
- package/components/input/epoch/date-time/fesm2022/index.mjs +6 -5
- package/components/input/epoch/date-time/fesm2022/index.mjs.map +1 -1
- package/components/input/file-upload/bundles/index.umd.js +1 -1
- package/components/input/file-upload/esm2022/file-upload.props.mjs +2 -2
- package/components/input/file-upload/fesm2022/index.mjs +1 -1
- package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
- package/components/input/radioset/bundles/index.umd.js +13 -1
- package/components/input/radioset/esm2022/radioset.component.mjs +11 -1
- package/components/input/radioset/esm2022/radioset.props.mjs +4 -2
- package/components/input/radioset/fesm2022/index.mjs +13 -1
- package/components/input/radioset/fesm2022/index.mjs.map +1 -1
- package/components/input/radioset/radioset.component.d.ts +1 -0
- package/components/input/slider/bundles/index.umd.js +86 -16
- package/components/input/slider/esm2022/slider.component.mjs +76 -9
- package/components/input/slider/esm2022/slider.props.mjs +5 -1
- package/components/input/slider/fesm2022/index.mjs +79 -8
- package/components/input/slider/fesm2022/index.mjs.map +1 -1
- package/components/input/slider/slider.component.d.ts +12 -3
- package/components/input/text/bundles/index.umd.js +24 -3
- package/components/input/text/esm2022/input-text/input-text.component.mjs +6 -3
- package/components/input/text/esm2022/input-text/input-text.props.mjs +5 -2
- package/components/input/text/esm2022/number-locale/number-locale.mjs +16 -1
- package/components/input/text/fesm2022/index.mjs +24 -3
- package/components/input/text/fesm2022/index.mjs.map +1 -1
- package/components/input/text/input-text/input-text.component.d.ts +4 -0
- package/components/input/text/number-locale/number-locale.d.ts +12 -0
- package/components/navigation/breadcrumb/bundles/index.umd.js +2 -2
- package/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +3 -3
- package/components/navigation/breadcrumb/fesm2022/index.mjs +2 -2
- package/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
- package/components/navigation/popover/bundles/index.umd.js +12 -0
- package/components/navigation/popover/esm2022/popover.component.mjs +13 -1
- package/components/navigation/popover/fesm2022/index.mjs +12 -0
- package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
- package/components/navigation/popover/popover.component.d.ts +2 -0
- package/components/page/default/bundles/index.umd.js +0 -4
- package/components/page/default/esm2022/router-outlet.directive.mjs +1 -5
- package/components/page/default/fesm2022/index.mjs +0 -4
- package/components/page/default/fesm2022/index.mjs.map +1 -1
- package/components/page/header/bundles/index.umd.js +4 -3
- package/components/page/header/esm2022/header.component.mjs +5 -4
- package/components/page/header/fesm2022/index.mjs +4 -3
- package/components/page/header/fesm2022/index.mjs.map +1 -1
- package/components/page/header/header.component.d.ts +2 -1
- package/core/bundles/index.umd.js +90 -6
- package/core/enums/enums.d.ts +1 -0
- package/core/esm2022/enums/enums.mjs +2 -1
- package/core/esm2022/utils/build-utils.mjs +5 -1
- package/core/esm2022/utils/utils.mjs +5 -2
- package/core/esm2022/utils/watcher.mjs +83 -4
- package/core/fesm2022/index.mjs +91 -4
- package/core/fesm2022/index.mjs.map +1 -1
- package/core/utils/watcher.d.ts +2 -0
- package/npm-shrinkwrap.json +2 -2
- package/oAuth/esm2022/oAuth.service.mjs +1 -1
- package/oAuth/fesm2022/index.mjs.map +1 -1
- package/oAuth/oAuth.service.d.ts +1 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +33 -31
- package/runtime/base/components/base-prefab.component.d.ts +6 -4
- package/runtime/base/esm2022/components/app-component/app.component.mjs +1 -1
- package/runtime/base/esm2022/components/base-page.component.mjs +2 -5
- package/runtime/base/esm2022/components/base-partial.component.mjs +2 -2
- package/runtime/base/esm2022/components/base-prefab.component.mjs +20 -12
- package/runtime/base/esm2022/components/base-spa-page.component.mjs +1 -4
- package/runtime/base/esm2022/services/http-interceptor.services.mjs +14 -13
- package/runtime/base/fesm2022/index.mjs +34 -31
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/runtime/base/runtime-base.module.d.ts +2 -1
- package/runtime/dynamic/app/app.config.d.ts +1 -1
- package/runtime/dynamic/bundles/index.umd.js +1 -1
- package/runtime/dynamic/esm2022/app/app.config.mjs +7 -7
- package/runtime/dynamic/fesm2022/index.mjs +2 -2
- package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
- package/scripts/datatable/datatable.js +17 -15
|
@@ -18,6 +18,80 @@ let changedByWatch = false;
|
|
|
18
18
|
let skipWatchers = false;
|
|
19
19
|
let ngZone;
|
|
20
20
|
let appRef;
|
|
21
|
+
/********************************************************************
|
|
22
|
+
* CLEANUP SCHEDULER WITH:
|
|
23
|
+
* - Significant watcher delta trigger (+/-)
|
|
24
|
+
* - UI stabilization delay (1–2 seconds)
|
|
25
|
+
* - Cooldown to prevent repeated scheduling
|
|
26
|
+
********************************************************************/
|
|
27
|
+
const CLEANUP_TRIGGER_DELTA = 300; // watcher change threshold
|
|
28
|
+
const CLEANUP_DELAY = 1500; // delay before running cleanup
|
|
29
|
+
const CLEANUP_COOLDOWN = 4000; // prevent re-scheduling for 4s
|
|
30
|
+
let lastWatcherCount = 0;
|
|
31
|
+
let scheduledCleanup = null;
|
|
32
|
+
let lastScheduledTime = 0;
|
|
33
|
+
function getWatcherCount() {
|
|
34
|
+
let count = 0;
|
|
35
|
+
registry.forEach((value) => {
|
|
36
|
+
// Check if it's a grouped structure (widget groups) or a direct watchInfo
|
|
37
|
+
if (value && typeof value === 'object' && !value.fn) {
|
|
38
|
+
// It's a widget group - count the properties (excluding metadata)
|
|
39
|
+
count += Object.keys(value).filter(k => k !== 'scopeType' && k !== 'scopeName').length;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
// It's a direct watchInfo
|
|
43
|
+
count += 1;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
return count;
|
|
47
|
+
}
|
|
48
|
+
export const cleanupStaleWatchers = () => {
|
|
49
|
+
// console.log(".........Cleaning up stale watchers...registry.size....", registry.size);
|
|
50
|
+
let removed = 0;
|
|
51
|
+
registry.forEach((bucket, widgetId) => {
|
|
52
|
+
if (widgetId.startsWith('widget-id') && !document.querySelector(`[widget-id="${widgetId}"]`)) {
|
|
53
|
+
for (const key in bucket) {
|
|
54
|
+
if (bucket.hasOwnProperty(key) && key !== "scopeType" && key !== "scopeName" && typeof bucket[key] !== "function") {
|
|
55
|
+
let watchInfo = bucket[key];
|
|
56
|
+
if (watchInfo && watchInfo.destroyFn) {
|
|
57
|
+
watchInfo.destroyFn();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
removed++;
|
|
62
|
+
registry.delete(widgetId);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
return removed;
|
|
67
|
+
};
|
|
68
|
+
export const scheduleThresholdCleanup = () => {
|
|
69
|
+
const now = performance.now();
|
|
70
|
+
let lastTriggerPeriod = now - lastScheduledTime;
|
|
71
|
+
// If a cleanup was scheduled recently, skip scheduling
|
|
72
|
+
if (lastTriggerPeriod < CLEANUP_COOLDOWN) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const current = getWatcherCount();
|
|
76
|
+
const delta = Math.abs(current - lastWatcherCount); // significant + or -
|
|
77
|
+
// If change not large enough, skip scheduling
|
|
78
|
+
if (delta <= CLEANUP_TRIGGER_DELTA) {
|
|
79
|
+
lastWatcherCount = current;
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// Prevent re-scheduling: set timestamp early
|
|
83
|
+
lastScheduledTime = now;
|
|
84
|
+
// Clear previous scheduled cleanup (if any)
|
|
85
|
+
if (scheduledCleanup) {
|
|
86
|
+
clearTimeout(scheduledCleanup);
|
|
87
|
+
}
|
|
88
|
+
// Schedule cleanup after UI stabilizes (delay prevents aggressive cleanup)
|
|
89
|
+
scheduledCleanup = setTimeout(() => {
|
|
90
|
+
cleanupStaleWatchers();
|
|
91
|
+
scheduledCleanup = null;
|
|
92
|
+
}, CLEANUP_DELAY);
|
|
93
|
+
lastWatcherCount = current;
|
|
94
|
+
};
|
|
21
95
|
// Utility functions
|
|
22
96
|
export const isFirstTimeChange = (v) => v === FIRST_TIME_WATCH;
|
|
23
97
|
export const debounce = (fn, wait = DEBOUNCE_WAIT) => {
|
|
@@ -179,6 +253,7 @@ export const $watch = (expr, $scope, $locals, listener, identifier = watchIdGene
|
|
|
179
253
|
const fn = $parseExpr(expr);
|
|
180
254
|
const scopeType = getScopeType($scope);
|
|
181
255
|
const scopeName = getScopeName($scope, scopeType);
|
|
256
|
+
const destroyFn = () => $unwatch(identifier);
|
|
182
257
|
const watchInfo = {
|
|
183
258
|
fn: fn.bind(null, $scope, $locals),
|
|
184
259
|
listener,
|
|
@@ -187,7 +262,8 @@ export const $watch = (expr, $scope, $locals, listener, identifier = watchIdGene
|
|
|
187
262
|
doNotClone,
|
|
188
263
|
isMuted,
|
|
189
264
|
scopeType,
|
|
190
|
-
scopeName
|
|
265
|
+
scopeName,
|
|
266
|
+
destroyFn
|
|
191
267
|
};
|
|
192
268
|
// Store in registry
|
|
193
269
|
const widgetId = getWidgetId(identifier);
|
|
@@ -202,7 +278,7 @@ export const $watch = (expr, $scope, $locals, listener, identifier = watchIdGene
|
|
|
202
278
|
else {
|
|
203
279
|
registry.set(identifier, watchInfo);
|
|
204
280
|
}
|
|
205
|
-
return
|
|
281
|
+
return destroyFn;
|
|
206
282
|
};
|
|
207
283
|
/**
|
|
208
284
|
* Unwatches a single identifier
|
|
@@ -212,6 +288,7 @@ export const $unwatch = (identifier) => {
|
|
|
212
288
|
if (widgetId) {
|
|
213
289
|
const propertyName = getPropertyName(identifier);
|
|
214
290
|
const widgetGroup = registry.get(widgetId);
|
|
291
|
+
//@ts-ignore
|
|
215
292
|
if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
|
|
216
293
|
const watchInfo = widgetGroup[propertyName];
|
|
217
294
|
if (watchInfo) {
|
|
@@ -352,8 +429,10 @@ const triggerWatchers = (ignoreMuted = false) => {
|
|
|
352
429
|
});
|
|
353
430
|
pass++;
|
|
354
431
|
} while (changeDetected && pass < MAX_WATCH_CYCLES);
|
|
432
|
+
// Schedule cleanup after watchers are triggered
|
|
433
|
+
scheduleThresholdCleanup();
|
|
355
434
|
if (changeDetected && pass === MAX_WATCH_CYCLES) {
|
|
356
|
-
console.warn(`Watch cycles exceeded limit of ${MAX_WATCH_CYCLES}`);
|
|
435
|
+
// console.warn(`Watch cycles exceeded limit of ${MAX_WATCH_CYCLES}`);
|
|
357
436
|
}
|
|
358
437
|
};
|
|
359
438
|
// Angular zone integration
|
|
@@ -409,4 +488,4 @@ export const $appDigest = (() => {
|
|
|
409
488
|
})();
|
|
410
489
|
// Export registry for debugging
|
|
411
490
|
window.watchRegistry = registry;
|
|
412
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL3V0aWxzL3dhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXZFLFlBQVk7QUFDWixNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQztBQUMxQyxNQUFNLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO0FBQ3BELE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQy9CLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQztBQUMxQixNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQUUzQixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO0FBQ3hDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFdEQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQXFCbEQsUUFBUTtBQUNSLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNsQixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFDM0IsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLElBQUksTUFBVyxDQUFDO0FBQ2hCLElBQUksTUFBVyxDQUFDO0FBRWhCLG9CQUFvQjtBQUNwQixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FB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S0FBSyxDQUFDO1FBQ25CLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxPQUFPO1lBQ1gsQ0FBQztZQUNELE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDZCxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUVMLGdDQUFnQztBQUMvQixNQUFjLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElER2VuZXJhdG9yIH0gZnJvbSAnLi9pZC1nZW5lcmF0b3InO1xuaW1wb3J0IHsgJHBhcnNlRXhwciB9IGZyb20gJy4vZXhwcmVzc2lvbi1wYXJzZXInO1xuaW1wb3J0IHsgZmluZFZhbHVlT2YgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGNsb25lLCBmbGF0dGVuLCBpc0FycmF5LCBpc0VxdWFsLCBpc09iamVjdCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuLy8gQ29uc3RhbnRzXG5jb25zdCBXSURHRVRfSURfUkVHRVggPSAvXih3aWRnZXQtW15fXSspLztcbmNvbnN0IFdJREdFVF9QUk9QRVJUWV9SRUdFWCA9IC9ed2lkZ2V0LVteX10rXyguKykkLztcbmNvbnN0IEFSUkFZX0lOREVYX1BMQUNFSE9MREVSID0gJ1skaV0nO1xuY29uc3QgQVJSQVlfSU5ERVhfWkVSTyA9ICdbMF0nO1xuY29uc3QgREVCT1VOQ0VfV0FJVCA9IDEwMDtcbmNvbnN0IE1BWF9XQVRDSF9DWUNMRVMgPSA1O1xuXG5jb25zdCByZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5jb25zdCB3YXRjaElkR2VuZXJhdG9yID0gbmV3IElER2VuZXJhdG9yKCd3YXRjaC1pZC0nKTtcblxuZXhwb3J0IGNvbnN0IEZJUlNUX1RJTUVfV0FUQ0ggPSBPYmplY3QuZnJlZXplKHt9KTtcblxuLy8gVHlwZSBkZWZpbml0aW9uc1xuaW50ZXJmYWNlIFdhdGNoSW5mbyB7XG4gICAgZm46ICgpID0+IGFueTtcbiAgICBsaXN0ZW5lcjogKG5ld1ZhbDogYW55LCBvbGRWYWw6IGFueSkgPT4gdm9pZDtcbiAgICBleHByOiBzdHJpbmc7XG4gICAgbGFzdDogYW55O1xuICAgIGRvTm90Q2xvbmU6IGJvb2xlYW47XG4gICAgaXNNdXRlZD86ICgpID0+IGJvb2xlYW47XG4gICAgc2NvcGVUeXBlOiBTY29wZVR5cGUgfCBudWxsO1xuICAgIHNjb3BlTmFtZTogc3RyaW5nIHwgbnVsbDtcbn1cblxudHlwZSBTY29wZVR5cGUgPSAnUGFnZScgfCAnUHJlZmFiJyB8ICdQYXJ0aWFsJyB8ICdBcHAnO1xuXG5pbnRlcmZhY2UgV2F0Y2hDb25maWcge1xuICAgIGFycmF5VHlwZT86IGJvb2xlYW47XG4gICAgaXNMaXN0PzogYm9vbGVhbjtcbn1cblxuLy8gU3RhdGVcbmxldCBtdXRlZCA9IGZhbHNlO1xubGV0IGNoYW5nZWRCeVdhdGNoID0gZmFsc2U7XG5sZXQgc2tpcFdhdGNoZXJzID0gZmFsc2U7XG5sZXQgbmdab25lOiBhbnk7XG5sZXQgYXBwUmVmOiBhbnk7XG5cbi8vIFV0aWxpdHkgZnVuY3Rpb25zXG5leHBvcnQgY29uc3QgaXNGaXJzdFRpbWVDaGFuZ2UgPSAodjogYW55KTogYm9vbGVhbiA9PiB2ID09PSBGSVJTVF9USU1FX1dBVENIO1xuXG5leHBvcnQgY29uc3QgZGVib3VuY2UgPSAoZm46IEZ1bmN0aW9uLCB3YWl0OiBudW1iZXIgPSBERUJPVU5DRV9XQUlUKSA9PiB7XG4gICAgbGV0IHRpbWVvdXQ6IGFueTtcbiAgICByZXR1cm4gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgIHdpbmRvd1snX196b25lX3N5bWJvbF9fY2xlYXJUaW1lb3V0J10odGltZW91dCk7XG4gICAgICAgIHRpbWVvdXQgPSB3aW5kb3dbJ19fem9uZV9zeW1ib2xfX3NldFRpbWVvdXQnXSgoKSA9PiBmbiguLi5hcmdzKSwgd2FpdCk7XG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBtdXRlV2F0Y2hlcnMgPSAoKTogdm9pZCA9PiB7XG4gICAgbXV0ZWQgPSB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IHVuTXV0ZVdhdGNoZXJzID0gKCk6IHZvaWQgPT4ge1xuICAgIG11dGVkID0gZmFsc2U7XG4gICAgdHJpZ2dlcldhdGNoZXJzKCk7XG59O1xuXG4vKipcbiAqIEV4dHJhY3RzIHdpZGdldCBJRCBmcm9tIGlkZW50aWZpZXIgKGUuZy4sIFwid2lkZ2V0LWlkMjNfZXZlbnRzb3VyY2VcIiAtPiBcIndpZGdldC1pZDIzXCIpXG4gKi9cbmNvbnN0IGdldFdpZGdldElkID0gKGlkZW50aWZpZXI6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICAgIGlmICghaWRlbnRpZmllciB8fCB0eXBlb2YgaWRlbnRpZmllciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoID0gaWRlbnRpZmllci5tYXRjaChXSURHRVRfSURfUkVHRVgpO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogbnVsbDtcbn07XG5cbi8qKlxuICogRXh0cmFjdHMgcHJvcGVydHkgbmFtZSBmcm9tIGlkZW50aWZpZXIgKGUuZy4sIFwid2lkZ2V0LWlkMjNfZXZlbnRzb3VyY2VcIiAtPiBcImV2ZW50c291cmNlXCIpXG4gKi9cbmNvbnN0IGdldFByb3BlcnR5TmFtZSA9IChpZGVudGlmaWVyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGlmICghaWRlbnRpZmllciB8fCB0eXBlb2YgaWRlbnRpZmllciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aWZpZXI7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoID0gaWRlbnRpZmllci5tYXRjaChXSURHRVRfUFJPUEVSVFlfUkVHRVgpO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogaWRlbnRpZmllcjtcbn07XG5cbi8qKlxuICogQXJyYXkgY29uc3VtZXIgd3JhcHBlciBmb3IgYXJyYXktYmFzZWQgZXhwcmVzc2lvbnNcbiAqL1xuY29uc3QgYXJyYXlDb25zdW1lciA9IChsaXN0ZW5lckZuOiBhbnksIHJlc3RFeHByOiBzdHJpbmcsIG5ld1ZhbDogYW55LCBvbGRWYWw6IGFueSk6IHZvaWQgPT4ge1xuICAgIGlmICghaXNBcnJheShuZXdWYWwpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZm9ybWF0dGVkRGF0YSA9IG5ld1ZhbC5tYXAoZGF0dW0gPT4gZmluZFZhbHVlT2YoZGF0dW0sIHJlc3RFeHByKSk7XG5cbiAgICAvLyBGbGF0dGVuIGlmIHJlc3VsdCBpcyBhcnJheSBvZiBhcnJheXNcbiAgICBpZiAoaXNBcnJheShmb3JtYXR0ZWREYXRhWzBdKSkge1xuICAgICAgICBmb3JtYXR0ZWREYXRhID0gZmxhdHRlbihmb3JtYXR0ZWREYXRhKTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lckZuKGZvcm1hdHRlZERhdGEsIG9sZFZhbCk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgd2F0Y2ggaW5mbyBmb3IgYXJyYXkgZXhwcmVzc2lvbnNcbiAqL1xuY29uc3QgZ2V0VXBkYXRlZFdhdGNoSW5mbyA9IChleHByOiBzdHJpbmcsIGFjY2VwdHNBcnJheTogYm9vbGVhbiwgbGlzdGVuZXI6IGFueSkgPT4ge1xuICAgIGNvbnN0IHJlZ2V4ID0gL1xcW1xcJGlcXF0vZztcblxuICAgIGlmICghYWNjZXB0c0FycmF5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBleHByOiBleHByLnJlcGxhY2UocmVnZXgsIEFSUkFZX0lOREVYX1pFUk8pLFxuICAgICAgICAgICAgbGlzdGVuZXJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXN0SW5kZXggPSBleHByLmxhc3RJbmRleE9mKEFSUkFZX0lOREVYX1BMQUNFSE9MREVSKTtcbiAgICBjb25zdCBiYXNlRXhwciA9IGV4cHIuc3Vic3RyaW5nKDAsIGxhc3RJbmRleCkucmVwbGFjZShBUlJBWV9JTkRFWF9QTEFDRUhPTERFUiwgQVJSQVlfSU5ERVhfWkVSTyk7XG4gICAgY29uc3QgcmVzdEV4cHIgPSBleHByLnN1YnN0cmluZyhsYXN0SW5kZXggKyA1KTtcblxuICAgIGNvbnN0IGFycmF5Q29uc3VtZXJGbiA9IHJlc3RFeHByXG4gICAgICAgID8gYXJyYXlDb25zdW1lci5iaW5kKHVuZGVmaW5lZCwgbGlzdGVuZXIsIHJlc3RFeHByKVxuICAgICAgICA6IGxpc3RlbmVyO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZXhwcjogYmFzZUV4cHIsXG4gICAgICAgIGxpc3RlbmVyOiBhcnJheUNvbnN1bWVyRm5cbiAgICB9O1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGFuIGV4cHJlc3Npb24gaXMgc3RhdGljIChkb2Vzbid0IG5lZWQgdG8gYmUgd2F0Y2hlZClcbiAqL1xuY29uc3QgU1RBVElDX0VYUFJFU1NJT05fTkFNRVMgPSBbXG4gICAgXCJyb3cuZ2V0UHJvcGVydHkoJ2ludmVzdG1lbnQnKVwiLFxuICAgIFwicm93LmdldFByb3BlcnR5KCdmYWN0c2hlZXRMaW5rJylcIixcbiAgICBcInJvdy5nZXRQcm9wZXJ0eSgnaXNSZWJhbGFuY2VFbGlnaWJsZScpXCJcbl07XG5cbmNvbnN0IGlzU3RhdGljRXhwcmVzc2lvbiA9IChleHByOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICBpZiAodHlwZW9mIGV4cHIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmltbWVkRXhwciA9IGV4cHIudHJpbSgpO1xuXG4gICAgLy8gRXhwcmVzc2lvbnMgdGhhdCBhbHdheXMgZXZhbHVhdGUgdG8gbG9jYWxpemF0aW9uIHN0cmluZ3NcbiAgICAvLyBpZiAodHJpbW1lZEV4cHIuaW5jbHVkZXMoJ2FwcExvY2FsZScpKSB7XG4gICAgLy8gICAgIHJldHVybiB0cnVlO1xuICAgIC8vIH1cblxuICAgIC8vIEhhcmQtY29kZWQgc3RhdGljIGV4cHJlc3Npb24gbmFtZXNcbiAgICBpZiAoU1RBVElDX0VYUFJFU1NJT05fTkFNRVMuaW5jbHVkZXModHJpbW1lZEV4cHIpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgc2NvcGUgdHlwZSBmcm9tIHRoZSBzY29wZSBvYmplY3RcbiAqL1xuY29uc3QgZ2V0U2NvcGVUeXBlID0gKCRzY29wZTogYW55KTogU2NvcGVUeXBlIHwgbnVsbCA9PiB7XG4gICAgaWYgKCEkc2NvcGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCRzY29wZS5wYWdlTmFtZSkgcmV0dXJuICdQYWdlJztcbiAgICBpZiAoJHNjb3BlLnByZWZhYk5hbWUpIHJldHVybiAnUHJlZmFiJztcbiAgICBpZiAoJHNjb3BlLnBhcnRpYWxOYW1lKSByZXR1cm4gJ1BhcnRpYWwnO1xuXG4gICAgLy8gQ2hlY2sgZm9yIEFwcCBzY29wZVxuICAgIGlmICgkc2NvcGUuVmFyaWFibGVzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgJHNjb3BlLkFjdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAhJHNjb3BlLnBhZ2VOYW1lICYmXG4gICAgICAgICEkc2NvcGUucHJlZmFiTmFtZSAmJlxuICAgICAgICAhJHNjb3BlLnBhcnRpYWxOYW1lKSB7XG4gICAgICAgIHJldHVybiAnQXBwJztcbiAgICB9XG5cbiAgICBpZiAoJHNjb3BlLmNvbnN0cnVjdG9yPy5uYW1lID09PSAnQXBwUmVmJykge1xuICAgICAgICByZXR1cm4gJ0FwcCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIEdldHMgc2NvcGUgbmFtZSBiYXNlZCBvbiBzY29wZSB0eXBlXG4gKi9cbmNvbnN0IGdldFNjb3BlTmFtZSA9ICgkc2NvcGU6IGFueSwgc2NvcGVUeXBlOiBTY29wZVR5cGUgfCBudWxsKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gICAgaWYgKCFzY29wZVR5cGUgfHwgISRzY29wZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHNjb3BlVHlwZSkge1xuICAgICAgICBjYXNlICdQcmVmYWInOiByZXR1cm4gJHNjb3BlLnByZWZhYk5hbWUgfHwgbnVsbDtcbiAgICAgICAgY2FzZSAnUGFydGlhbCc6IHJldHVybiAkc2NvcGUucGFydGlhbE5hbWUgfHwgbnVsbDtcbiAgICAgICAgY2FzZSAnUGFnZSc6IHJldHVybiAkc2NvcGUucGFnZU5hbWUgfHwgbnVsbDtcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYWluIHdhdGNoIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCAkd2F0Y2ggPSAoXG4gICAgZXhwcjogc3RyaW5nLFxuICAgICRzY29wZTogYW55LFxuICAgICRsb2NhbHM6IGFueSxcbiAgICBsaXN0ZW5lcjogYW55LFxuICAgIGlkZW50aWZpZXI6IHN0cmluZyA9IHdhdGNoSWRHZW5lcmF0b3IubmV4dFVpZCgpLFxuICAgIGRvTm90Q2xvbmU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBjb25maWc6IFdhdGNoQ29uZmlnID0ge30sXG4gICAgaXNNdXRlZD86ICgpID0+IGJvb2xlYW5cbikgPT4ge1xuICAgIC8vIEhhbmRsZSBhcnJheSBleHByZXNzaW9uc1xuICAgIGlmIChleHByLmluY2x1ZGVzKEFSUkFZX0lOREVYX1BMQUNFSE9MREVSKSkge1xuICAgICAgICBjb25zdCB3YXRjaEluZm8gPSBnZXRVcGRhdGVkV2F0Y2hJbmZvKGV4cHIsIGNvbmZpZy5hcnJheVR5cGUgfHwgY29uZmlnLmlzTGlzdCB8fCBmYWxzZSwgbGlzdGVuZXIpO1xuICAgICAgICBleHByID0gd2F0Y2hJbmZvLmV4cHI7XG4gICAgICAgIGxpc3RlbmVyID0gd2F0Y2hJbmZvLmxpc3RlbmVyO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzdGF0aWMgZXhwcmVzc2lvbnNcbiAgICBpZiAoaXNTdGF0aWNFeHByZXNzaW9uKGV4cHIpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBmbiA9ICRwYXJzZUV4cHIoZXhwcik7XG4gICAgICAgICAgICBjb25zdCBzdGF0aWNWYWx1ZSA9IGZuKCRzY29wZSwgJGxvY2Fscyk7XG4gICAgICAgICAgICBsaXN0ZW5lcihzdGF0aWNWYWx1ZSwgRklSU1RfVElNRV9XQVRDSCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgRXJyb3IgZXZhbHVhdGluZyBzdGF0aWMgZXhwcmVzc2lvbiAnJHtleHByfSc6YCwgZSk7XG4gICAgICAgICAgICBsaXN0ZW5lcih1bmRlZmluZWQsIEZJUlNUX1RJTUVfV0FUQ0gpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoKSA9PiB7IH07IC8vIE5vLW9wIHVuc3Vic2NyaWJlXG4gICAgfVxuXG4gICAgY29uc3QgZm4gPSAkcGFyc2VFeHByKGV4cHIpO1xuICAgIGNvbnN0IHNjb3BlVHlwZSA9IGdldFNjb3BlVHlwZSgkc2NvcGUpO1xuICAgIGNvbnN0IHNjb3BlTmFtZSA9IGdldFNjb3BlTmFtZSgkc2NvcGUsIHNjb3BlVHlwZSk7XG5cbiAgICBjb25zdCB3YXRjaEluZm86IFdhdGNoSW5mbyA9IHtcbiAgICAgICAgZm46IGZuLmJpbmQobnVsbCwgJHNjb3BlLCAkbG9jYWxzKSxcbiAgICAgICAgbGlzdGVuZXIsXG4gICAgICAgIGV4cHIsXG4gICAgICAgIGxhc3Q6IEZJUlNUX1RJTUVfV0FUQ0gsXG4gICAgICAgIGRvTm90Q2xvbmUsXG4gICAgICAgIGlzTXV0ZWQsXG4gICAgICAgIHNjb3BlVHlwZSxcbiAgICAgICAgc2NvcGVOYW1lXG4gICAgfTtcblxuICAgIC8vIFN0b3JlIGluIHJlZ2lzdHJ5XG4gICAgY29uc3Qgd2lkZ2V0SWQgPSBnZXRXaWRnZXRJZChpZGVudGlmaWVyKTtcblxuICAgIGlmICh3aWRnZXRJZCkge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBnZXRQcm9wZXJ0eU5hbWUoaWRlbnRpZmllcik7XG4gICAgICAgIGlmICghcmVnaXN0cnkuaGFzKHdpZGdldElkKSkge1xuICAgICAgICAgICAgcmVnaXN0cnkuc2V0KHdpZGdldElkLCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2lkZ2V0R3JvdXAgPSByZWdpc3RyeS5nZXQod2lkZ2V0SWQpO1xuICAgICAgICB3aWRnZXRHcm91cFtwcm9wZXJ0eU5hbWVdID0gd2F0Y2hJbmZvO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlZ2lzdHJ5LnNldChpZGVudGlmaWVyLCB3YXRjaEluZm8pO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiAkdW53YXRjaChpZGVudGlmaWVyKTtcbn07XG5cbi8qKlxuICogVW53YXRjaGVzIGEgc2luZ2xlIGlkZW50aWZpZXJcbiAqL1xuZXhwb3J0IGNvbnN0ICR1bndhdGNoID0gKGlkZW50aWZpZXI6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IHdpZGdldElkID0gZ2V0V2lkZ2V0SWQoaWRlbnRpZmllcik7XG5cbiAgICBpZiAod2lkZ2V0SWQpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gZ2V0UHJvcGVydHlOYW1lKGlkZW50aWZpZXIpO1xuICAgICAgICBjb25zdCB3aWRnZXRHcm91cCA9IHJlZ2lzdHJ5LmdldCh3aWRnZXRJZCk7XG5cbiAgICAgICAgaWYgKHdpZGdldEdyb3VwICYmIHR5cGVvZiB3aWRnZXRHcm91cCA9PT0gJ29iamVjdCcgJiYgIXdpZGdldEdyb3VwLmZuKSB7XG4gICAgICAgICAgICBjb25zdCB3YXRjaEluZm8gPSB3aWRnZXRHcm91cFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgaWYgKHdhdGNoSW5mbykge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB3aWRnZXRHcm91cFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgICAgIC8vIENsZWFuIHVwIGVtcHR5IHdpZGdldCBncm91cHNcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMod2lkZ2V0R3JvdXApLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZWdpc3RyeS5kZWxldGUod2lkZ2V0SWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIHRvIGRpcmVjdCBsb29rdXBcbiAgICBpZiAocmVnaXN0cnkuaGFzKGlkZW50aWZpZXIpKSB7XG4gICAgICAgIHJlZ2lzdHJ5LmRlbGV0ZShpZGVudGlmaWVyKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBVbndhdGNoZXMgYWxsIHdhdGNoZXJzIGZvciBhIHNwZWNpZmljIHdpZGdldCBJRFxuICovXG5leHBvcnQgY29uc3QgJHVud2F0Y2hBbGwgPSAod2lkZ2V0SWQ6IHN0cmluZyk6IG51bWJlciA9PiB7XG4gICAgaWYgKCF3aWRnZXRJZCB8fCB0eXBlb2Ygd2lkZ2V0SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IHdpZGdldEdyb3VwID0gcmVnaXN0cnkuZ2V0KHdpZGdldElkKTtcblxuICAgIGlmICh3aWRnZXRHcm91cCAmJiB0eXBlb2Ygd2lkZ2V0R3JvdXAgPT09ICdvYmplY3QnICYmICF3aWRnZXRHcm91cC5mbikge1xuICAgICAgICBjb25zdCBjb3VudCA9IE9iamVjdC5rZXlzKHdpZGdldEdyb3VwKS5sZW5ndGg7XG4gICAgICAgIHJlZ2lzdHJ5LmRlbGV0ZSh3aWRnZXRJZCk7XG4gICAgICAgIHJldHVybiBjb3VudDtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjazogZmluZCBhbGwgaWRlbnRpZmllcnMgc3RhcnRpbmcgd2l0aCB0aGlzIHdpZGdldCBJRFxuICAgIGxldCByZW1vdmVkQ291bnQgPSAwO1xuICAgIGNvbnN0IGlkZW50aWZpZXJzVG9SZW1vdmU6IHN0cmluZ1tdID0gW107XG5cbiAgICByZWdpc3RyeS5mb3JFYWNoKChfLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKHdpZGdldElkICsgJ18nKSkge1xuICAgICAgICAgICAgaWRlbnRpZmllcnNUb1JlbW92ZS5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGlkZW50aWZpZXJzVG9SZW1vdmUuZm9yRWFjaChpZGVudGlmaWVyID0+IHtcbiAgICAgICAgaWYgKCR1bndhdGNoKGlkZW50aWZpZXIpKSB7XG4gICAgICAgICAgICByZW1vdmVkQ291bnQrKztcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlbW92ZWRDb3VudDtcbn07XG5cbi8qKlxuICogVW53YXRjaGVzIGFsbCB3YXRjaGVycyBmb3IgYSBzcGVjaWZpYyBzY29wZSAoUGFnZSwgUHJlZmFiLCBQYXJ0aWFsLCBvciBBcHApXG4gKiBOb3cgd29ya3MgZGlyZWN0bHkgd2l0aCB0aGUgbWFpbiByZWdpc3RyeSBpbnN0ZWFkIG9mIHNlcGFyYXRlIHNjb3BlZCByZWdpc3RyaWVzXG4gKi9cbmV4cG9ydCBjb25zdCAkdW53YXRjaEFsbEJ5U2NvcGUgPSAoc2NvcGVUeXBlOiBTY29wZVR5cGUsIHNjb3BlTmFtZT86IHN0cmluZyk6IG51bWJlciA9PiB7XG4gICAgaWYgKCFzY29wZVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgbGV0IHJlbW92ZWRDb3VudCA9IDA7XG4gICAgY29uc3QgaWRlbnRpZmllcnNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcblxuICAgIHJlZ2lzdHJ5LmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgLy8gSGFuZGxlIGdyb3VwZWQgc3RydWN0dXJlICh3aWRnZXQgZ3JvdXBzKVxuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhdmFsdWUuZm4pIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlKS5mb3JFYWNoKChbcHJvcGVydHlOYW1lLCB3YXRjaEluZm9dOiBbc3RyaW5nLCBhbnldKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHdhdGNoSW5mbz8uc2NvcGVUeXBlID09PSBzY29wZVR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgKCFzY29wZU5hbWUgfHwgd2F0Y2hJbmZvLnNjb3BlTmFtZSA9PT0gc2NvcGVOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyc1RvUmVtb3ZlLnB1c2goYCR7a2V5fV8ke3Byb3BlcnR5TmFtZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERpcmVjdCB3YXRjaEluZm9cbiAgICAgICAgICAgIGNvbnN0IHdhdGNoSW5mbyA9IHZhbHVlIGFzIFdhdGNoSW5mbztcbiAgICAgICAgICAgIGlmICh3YXRjaEluZm8/LnNjb3BlVHlwZSA9PT0gc2NvcGVUeXBlICYmXG4gICAgICAgICAgICAgICAgKCFzY29wZU5hbWUgfHwgd2F0Y2hJbmZvLnNjb3BlTmFtZSA9PT0gc2NvcGVOYW1lKSkge1xuICAgICAgICAgICAgICAgIGlkZW50aWZpZXJzVG9SZW1vdmUucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBVbndhdGNoIGFsbCBjb2xsZWN0ZWQgaWRlbnRpZmllcnNcbiAgICBpZGVudGlmaWVyc1RvUmVtb3ZlLmZvckVhY2goaWRlbnRpZmllciA9PiB7XG4gICAgICAgIGlmICgkdW53YXRjaChpZGVudGlmaWVyKSkge1xuICAgICAgICAgICAgcmVtb3ZlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZW1vdmVkQ291bnQ7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyBhIHNpbmdsZSB3YXRjaCBpbmZvIGR1cmluZyB0cmlnZ2VyIGN5Y2xlXG4gKi9cbmNvbnN0IHByb2Nlc3NXYXRjaEluZm8gPSAod2F0Y2hJbmZvOiBXYXRjaEluZm8pOiBib29sZWFuID0+IHtcbiAgICBpZiAoIXdhdGNoSW5mbz8uZm4gfHwgKHdhdGNoSW5mby5pc011dGVkPy4oKSA/PyBmYWxzZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBuZXdWYWx1ZTogYW55O1xuICAgIHRyeSB7XG4gICAgICAgIG5ld1ZhbHVlID0gd2F0Y2hJbmZvLmZuKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEVycm9yIGV4ZWN1dGluZyBleHByZXNzaW9uOiAnJHt3YXRjaEluZm8uZXhwcn0nYCwgZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoaXNFcXVhbChuZXdWYWx1ZSwgd2F0Y2hJbmZvLmxhc3QpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDaGFuZ2UgZGV0ZWN0ZWRcbiAgICBjaGFuZ2VkQnlXYXRjaCA9IHRydWU7XG4gICAgd2F0Y2hJbmZvLmxhc3QgPSBpc09iamVjdChuZXdWYWx1ZSkgJiYgIXdhdGNoSW5mby5kb05vdENsb25lXG4gICAgICAgID8gY2xvbmUobmV3VmFsdWUpXG4gICAgICAgIDogbmV3VmFsdWU7XG5cbiAgICB3YXRjaEluZm8ubGlzdGVuZXIobmV3VmFsdWUsIHdhdGNoSW5mby5sYXN0ID09PSBuZXdWYWx1ZSA/IEZJUlNUX1RJTUVfV0FUQ0ggOiB3YXRjaEluZm8ubGFzdCk7XG4gICAgY2hhbmdlZEJ5V2F0Y2ggPSBmYWxzZTtcblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VycyBhbGwgd2F0Y2hlcnNcbiAqL1xuY29uc3QgdHJpZ2dlcldhdGNoZXJzID0gKGlnbm9yZU11dGVkOiBib29sZWFuID0gZmFsc2UpOiB2b2lkID0+IHtcbiAgICBpZiAobXV0ZWQgJiYgIWlnbm9yZU11dGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcGFzcyA9IDE7XG4gICAgbGV0IGNoYW5nZURldGVjdGVkOiBib29sZWFuO1xuXG4gICAgZG8ge1xuICAgICAgICBjaGFuZ2VEZXRlY3RlZCA9IGZhbHNlO1xuXG4gICAgICAgIHJlZ2lzdHJ5LmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgZ3JvdXBlZCBzdHJ1Y3R1cmVcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICF2YWx1ZS5mbikge1xuICAgICAgICAgICAgICAgIE9iamVjdC52YWx1ZXModmFsdWUpLmZvckVhY2goKHdhdGNoSW5mbzogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzV2F0Y2hJbmZvKHdhdGNoSW5mbykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEaXJlY3Qgd2F0Y2hJbmZvXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NXYXRjaEluZm8odmFsdWUgYXMgV2F0Y2hJbmZvKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBwYXNzKys7XG4gICAgfSB3aGlsZSAoY2hhbmdlRGV0ZWN0ZWQgJiYgcGFzcyA8IE1BWF9XQVRDSF9DWUNMRVMpO1xuXG4gICAgaWYgKGNoYW5nZURldGVjdGVkICYmIHBhc3MgPT09IE1BWF9XQVRDSF9DWUNMRVMpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBXYXRjaCBjeWNsZXMgZXhjZWVkZWQgbGltaXQgb2YgJHtNQVhfV0FUQ0hfQ1lDTEVTfWApO1xuICAgIH1cbn07XG5cbi8vIEFuZ3VsYXIgem9uZSBpbnRlZ3JhdGlvblxuZXhwb3J0IGNvbnN0IHNldE5nWm9uZSA9ICh6b25lOiBhbnkpOiB2b2lkID0+IHtcbiAgICBuZ1pvbmUgPSB6b25lO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldEFwcFJlZiA9IChyZWY6IGFueSk6IHZvaWQgPT4ge1xuICAgIGFwcFJlZiA9IHJlZjtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0NoYW5nZUZyb21XYXRjaCA9ICgpOiBib29sZWFuID0+IGNoYW5nZWRCeVdhdGNoO1xuZXhwb3J0IGNvbnN0IHJlc2V0Q2hhbmdlRnJvbVdhdGNoID0gKCk6IHZvaWQgPT4ge1xuICAgIGNoYW5nZWRCeVdhdGNoID0gZmFsc2U7XG59O1xuXG4vLyBEZWJvdW5jZWQgdHJpZ2dlclxuY29uc3QgZGVib3VuY2VkVHJpZ2dlcldhdGNoZXJzID0gZGVib3VuY2UoKCkgPT4ge1xuICAgIHNraXBXYXRjaGVycyA9IHRydWU7XG4gICAgbmdab25lLnJ1bigoKSA9PiB0cmlnZ2VyV2F0Y2hlcnMoKSk7XG59LCBERUJPVU5DRV9XQUlUKTtcblxuZXhwb3J0IGNvbnN0ICRpbnZva2VXYXRjaGVycyA9IChmb3JjZTogYm9vbGVhbiA9IGZhbHNlLCBpZ25vcmVNdXRlZDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCA9PiB7XG4gICAgaWYgKGZvcmNlKSB7XG4gICAgICAgIHRyaWdnZXJXYXRjaGVycyhpZ25vcmVNdXRlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNraXBXYXRjaGVycykge1xuICAgICAgICAgICAgc2tpcFdhdGNoZXJzID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGVib3VuY2VkVHJpZ2dlcldhdGNoZXJzKCk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0ICRhcHBEaWdlc3QgPSAoKCkgPT4ge1xuICAgIGxldCBxdWV1ZWQgPSBmYWxzZTtcbiAgICBjb25zdCAkUkFGID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTtcblxuICAgIHJldHVybiAoZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIWFwcFJlZikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvcmNlKSB7XG4gICAgICAgICAgICBuZ1pvbmUucnVuKCgpID0+IGFwcFJlZi50aWNrKCkpO1xuICAgICAgICAgICAgcXVldWVkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocXVldWVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVldWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICRSQUYoKCkgPT4ge1xuICAgICAgICAgICAgICAgIG5nWm9uZS5ydW4oKCkgPT4gYXBwUmVmLnRpY2soKSk7XG4gICAgICAgICAgICAgICAgcXVldWVkID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59KSgpO1xuXG4vLyBFeHBvcnQgcmVnaXN0cnkgZm9yIGRlYnVnZ2luZ1xuKHdpbmRvdyBhcyBhbnkpLndhdGNoUmVnaXN0cnkgPSByZWdpc3RyeTsiXX0=
|
|
491
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL3V0aWxzL3dhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXZFLFlBQVk7QUFDWixNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQztBQUMxQyxNQUFNLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO0FBQ3BELE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQy9CLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQztBQUMxQixNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQUUzQixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO0FBQ3hDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFdEQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQXNCbEQsUUFBUTtBQUNSLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNsQixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFDM0IsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLElBQUksTUFBVyxDQUFDO0FBQ2hCLElBQUksTUFBVyxDQUFDO0FBRWhCOzs7OztzRUFLc0U7QUFDdEUsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQUMsQ0FBRywyQkFBMkI7QUFDaEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLENBQVUsK0JBQStCO0FBQ3BFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQU8sK0JBQStCO0FBRXBFLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLElBQUksZ0JBQWdCLEdBQVEsSUFBSSxDQUFDO0FBQ2pDLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBRTFCLFNBQVMsZUFBZTtJQUNwQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDdkIsMEVBQTBFO1FBQzFFLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNsRCxrRUFBa0U7WUFDbEUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFdBQVcsSUFBSSxDQUFDLEtBQUssV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzNGLENBQUM7YUFBTSxDQUFDO1lBQ0osMEJBQTBCO1lBQzFCLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDZixDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsR0FBVyxFQUFFO0lBQzdDLHlGQUF5RjtJQUN6RixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFFaEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRTtRQUNsQyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLGVBQWUsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzNGLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssV0FBVyxJQUFJLEdBQUcsS0FBSyxXQUFXLElBQUksT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQ2hILElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDNUIsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO3dCQUNuQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQzFCLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztZQUNWLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUIsT0FBTztRQUNYLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLEdBQVMsRUFBRTtJQUMvQyxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDOUIsSUFBSSxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsaUJBQWlCLENBQUM7SUFDaEQsdURBQXVEO0lBQ3ZELElBQUksaUJBQWlCLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUN2QyxPQUFPO0lBQ1gsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLGVBQWUsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBRSxxQkFBcUI7SUFFMUUsOENBQThDO0lBQzlDLElBQUksS0FBSyxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDakMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO1FBQzNCLE9BQU87SUFDWCxDQUFDO0lBRUQsNkNBQTZDO0lBQzdDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztJQUV4Qiw0Q0FBNEM7SUFDNUMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCwyRUFBMkU7SUFDM0UsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUMvQixvQkFBb0IsRUFBRSxDQUFDO1FBQ3ZCLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFFbEIsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUNGLG9CQUFvQjtBQUNwQixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQU0sRUFBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDO0FBRTdFLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQVksRUFBRSxPQUFlLGFBQWEsRUFBRSxFQUFFO0lBQ25FLElBQUksT0FBWSxDQUFDO0lBQ2pCLE9BQU8sQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFO1FBQ3RCLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE9BQU8sR0FBRyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzRSxDQUFDLENBQUM7QUFDTixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsR0FBUyxFQUFFO0lBQ25DLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEdBQVMsRUFBRTtJQUNyQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2QsZUFBZSxFQUFFLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRyxDQUFDLFVBQWtCLEVBQWlCLEVBQUU7SUFDdEQsSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNoRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNoRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbkMsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLGVBQWUsR0FBRyxDQUFDLFVBQWtCLEVBQVUsRUFBRTtJQUNuRCxJQUFJLENBQUMsVUFBVSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2hELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDdEQsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ3pDLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFlLEVBQUUsUUFBZ0IsRUFBRSxNQUFXLEVBQUUsTUFBVyxFQUFRLEVBQUU7SUFDeEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ25CLE9BQU87SUFDWCxDQUFDO0lBRUQsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUV0RSx1Q0FBdUM7SUFDdkMsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1QixhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQVksRUFBRSxZQUFxQixFQUFFLFFBQWEsRUFBRSxFQUFFO0lBQy9FLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQztJQUV6QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEIsT0FBTztZQUNILElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQztZQUMzQyxRQUFRO1NBQ1gsQ0FBQztJQUNOLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDakcsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFL0MsTUFBTSxlQUFlLEdBQUcsUUFBUTtRQUM1QixDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQztRQUNuRCxDQUFDLENBQUMsUUFBUSxDQUFDO0lBRWYsT0FBTztRQUNILElBQUksRUFBRSxRQUFRO1FBQ2QsUUFBUSxFQUFFLGVBQWU7S0FDNUIsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSx1QkFBdUIsR0FBRztJQUM1QiwrQkFBK0I7SUFDL0Isa0NBQWtDO0lBQ2xDLHdDQUF3QztDQUMzQyxDQUFDO0FBRUYsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQVMsRUFBVyxFQUFFO0lBQzlDLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDM0IsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVoQywyREFBMkQ7SUFDM0QsMkNBQTJDO0lBQzNDLG1CQUFtQjtJQUNuQixJQUFJO0lBRUoscUNBQXFDO0lBQ3JDLElBQUksdUJBQXVCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDaEQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFXLEVBQW9CLEVBQUU7SUFDbkQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1YsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLFFBQVE7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUNuQyxJQUFJLE1BQU0sQ0FBQyxVQUFVO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFDdkMsSUFBSSxNQUFNLENBQUMsV0FBVztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRXpDLHNCQUFzQjtJQUN0QixJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssU0FBUztRQUM5QixNQUFNLENBQUMsT0FBTyxLQUFLLFNBQVM7UUFDNUIsQ0FBQyxNQUFNLENBQUMsUUFBUTtRQUNoQixDQUFDLE1BQU0sQ0FBQyxVQUFVO1FBQ2xCLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sWUFBWSxHQUFHLENBQUMsTUFBVyxFQUFFLFNBQTJCLEVBQWlCLEVBQUU7SUFDN0UsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxRQUFRLFNBQVMsRUFBRSxDQUFDO1FBQ2hCLEtBQUssUUFBUSxDQUFDLENBQUMsT0FBTyxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQztRQUNoRCxLQUFLLFNBQVMsQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUM7UUFDbEQsS0FBSyxNQUFNLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDO0lBQ3pCLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxDQUNsQixJQUFZLEVBQ1osTUFBVyxFQUNYLE9BQVksRUFDWixRQUFhLEVBQ2IsYUFBcUIsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEVBQy9DLGFBQXNCLEtBQUssRUFDM0IsU0FBc0IsRUFBRSxFQUN4QixPQUF1QixFQUN6QixFQUFFO0lBQ0EsMkJBQTJCO0lBQzNCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7UUFDekMsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbEcsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDdEIsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVELDRCQUE0QjtJQUM1QixJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDO1lBQ0QsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDeEMsUUFBUSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1QsT0FBTyxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDakUsUUFBUSxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxPQUFPLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtJQUMxQyxDQUFDO0lBRUQsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRWxELE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3QyxNQUFNLFNBQVMsR0FBYztRQUN6QixFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUNsQyxRQUFRO1FBQ1IsSUFBSTtRQUNKLElBQUksRUFBRSxnQkFBZ0I7UUFDdEIsVUFBVTtRQUNWLE9BQU87UUFDUCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7S0FDWixDQUFDO0lBRUYsb0JBQW9CO0lBQ3BCLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUV6QyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ1gsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDMUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0MsV0FBVyxDQUFDLFlBQVksQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUMxQyxDQUFDO1NBQU0sQ0FBQztRQUNKLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLFVBQWtCLEVBQVcsRUFBRTtJQUNwRCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFekMsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNYLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTNDLFlBQVk7UUFDWixJQUFJLFdBQVcsSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEUsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVDLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ1osT0FBTyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2pDLCtCQUErQjtnQkFDL0IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDeEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUIsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNoQixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCw0QkFBNEI7SUFDNUIsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDM0IsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxRQUFnQixFQUFVLEVBQUU7SUFDcEQsSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1QyxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTNDLElBQUksV0FBVyxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNwRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM5QyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLE1BQU0sbUJBQW1CLEdBQWEsRUFBRSxDQUFDO0lBRXpDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDeEIsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDckMsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN2QixZQUFZLEVBQUUsQ0FBQztRQUNuQixDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFlBQVksQ0FBQztBQUN4QixDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFNBQW9CLEVBQUUsU0FBa0IsRUFBVSxFQUFFO0lBQ25GLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNiLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNyQixNQUFNLG1CQUFtQixHQUFhLEVBQUUsQ0FBQztJQUV6QyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQzVCLDJDQUEyQztRQUMzQyxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQWdCLEVBQUUsRUFBRTtnQkFDdkUsSUFBSSxTQUFTLEVBQUUsU0FBUyxLQUFLLFNBQVM7b0JBQ2xDLENBQUMsQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUNwRCxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQztnQkFDdkQsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDSixtQkFBbUI7WUFDbkIsTUFBTSxTQUFTLEdBQUcsS0FBa0IsQ0FBQztZQUNyQyxJQUFJLFNBQVMsRUFBRSxTQUFTLEtBQUssU0FBUztnQkFDbEMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsb0NBQW9DO0lBQ3BDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUNyQyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLFlBQVksRUFBRSxDQUFDO1FBQ25CLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sWUFBWSxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFNBQW9CLEVBQVcsRUFBRTtJQUN2RCxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksUUFBYSxDQUFDO0lBQ2xCLElBQUksQ0FBQztRQUNELFFBQVEsR0FBRyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxTQUFTLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkUsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNwQyxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDdEIsU0FBUyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVTtRQUN4RCxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUNqQixDQUFDLENBQUMsUUFBUSxDQUFDO0lBRWYsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUYsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUV2QixPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sZUFBZSxHQUFHLENBQUMsY0FBdUIsS0FBSyxFQUFRLEVBQUU7SUFDM0QsSUFBSSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4QixPQUFPO0lBQ1gsQ0FBQztJQUVELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksY0FBdUIsQ0FBQztJQUU1QixHQUFHLENBQUM7UUFDQSxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBRXZCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2QiwyQkFBMkI7WUFDM0IsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNsRCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQWMsRUFBRSxFQUFFO29CQUM1QyxJQUFJLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7d0JBQzlCLGNBQWMsR0FBRyxJQUFJLENBQUM7b0JBQzFCLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osbUJBQW1CO2dCQUNuQixJQUFJLGdCQUFnQixDQUFDLEtBQWtCLENBQUMsRUFBRSxDQUFDO29CQUN2QyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxFQUFFLENBQUM7SUFDWCxDQUFDLFFBQVEsY0FBYyxJQUFJLElBQUksR0FBRyxnQkFBZ0IsRUFBRTtJQUVwRCxnREFBZ0Q7SUFDaEQsd0JBQXdCLEVBQUUsQ0FBQztJQUMzQixJQUFJLGNBQWMsSUFBSSxJQUFJLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QyxzRUFBc0U7SUFDMUUsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLDJCQUEyQjtBQUMzQixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFTLEVBQVEsRUFBRTtJQUN6QyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQVEsRUFBUSxFQUFFO0lBQ3hDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsR0FBWSxFQUFFLENBQUMsY0FBYyxDQUFDO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEdBQVMsRUFBRTtJQUMzQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0FBQzNCLENBQUMsQ0FBQztBQUVGLG9CQUFvQjtBQUNwQixNQUFNLHdCQUF3QixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7SUFDM0MsWUFBWSxHQUFHLElBQUksQ0FBQztJQUNwQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7QUFDeEMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBRWxCLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLFFBQWlCLEtBQUssRUFBRSxjQUF1QixLQUFLLEVBQVEsRUFBRTtJQUMxRixJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1IsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7U0FBTSxDQUFDO1FBQ0osSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNmLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDckIsT0FBTztRQUNYLENBQUM7UUFDRCx3QkFBd0IsRUFBRSxDQUFDO0lBQy9CLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUU7SUFDNUIsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ25CLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztJQUUxQyxPQUFPLENBQUMsUUFBaUIsS0FBSyxFQUFRLEVBQUU7UUFDcEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1YsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ25CLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxPQUFPO1lBQ1gsQ0FBQztZQUNELE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDZCxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUVMLGdDQUFnQztBQUMvQixNQUFjLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElER2VuZXJhdG9yIH0gZnJvbSAnLi9pZC1nZW5lcmF0b3InO1xuaW1wb3J0IHsgJHBhcnNlRXhwciB9IGZyb20gJy4vZXhwcmVzc2lvbi1wYXJzZXInO1xuaW1wb3J0IHsgZmluZFZhbHVlT2YgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGNsb25lLCBmbGF0dGVuLCBpc0FycmF5LCBpc0VxdWFsLCBpc09iamVjdCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuLy8gQ29uc3RhbnRzXG5jb25zdCBXSURHRVRfSURfUkVHRVggPSAvXih3aWRnZXQtW15fXSspLztcbmNvbnN0IFdJREdFVF9QUk9QRVJUWV9SRUdFWCA9IC9ed2lkZ2V0LVteX10rXyguKykkLztcbmNvbnN0IEFSUkFZX0lOREVYX1BMQUNFSE9MREVSID0gJ1skaV0nO1xuY29uc3QgQVJSQVlfSU5ERVhfWkVSTyA9ICdbMF0nO1xuY29uc3QgREVCT1VOQ0VfV0FJVCA9IDEwMDtcbmNvbnN0IE1BWF9XQVRDSF9DWUNMRVMgPSA1O1xuXG5jb25zdCByZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5jb25zdCB3YXRjaElkR2VuZXJhdG9yID0gbmV3IElER2VuZXJhdG9yKCd3YXRjaC1pZC0nKTtcblxuZXhwb3J0IGNvbnN0IEZJUlNUX1RJTUVfV0FUQ0ggPSBPYmplY3QuZnJlZXplKHt9KTtcblxuLy8gVHlwZSBkZWZpbml0aW9uc1xuaW50ZXJmYWNlIFdhdGNoSW5mbyB7XG4gICAgZm46ICgpID0+IGFueTtcbiAgICBsaXN0ZW5lcjogKG5ld1ZhbDogYW55LCBvbGRWYWw6IGFueSkgPT4gdm9pZDtcbiAgICBleHByOiBzdHJpbmc7XG4gICAgbGFzdDogYW55O1xuICAgIGRvTm90Q2xvbmU6IGJvb2xlYW47XG4gICAgaXNNdXRlZD86ICgpID0+IGJvb2xlYW47XG4gICAgc2NvcGVUeXBlOiBTY29wZVR5cGUgfCBudWxsO1xuICAgIHNjb3BlTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICBkZXN0cm95Rm4/OiAoKSA9PiB2b2lkO1xufVxuXG50eXBlIFNjb3BlVHlwZSA9ICdQYWdlJyB8ICdQcmVmYWInIHwgJ1BhcnRpYWwnIHwgJ0FwcCc7XG5cbmludGVyZmFjZSBXYXRjaENvbmZpZyB7XG4gICAgYXJyYXlUeXBlPzogYm9vbGVhbjtcbiAgICBpc0xpc3Q/OiBib29sZWFuO1xufVxuXG4vLyBTdGF0ZVxubGV0IG11dGVkID0gZmFsc2U7XG5sZXQgY2hhbmdlZEJ5V2F0Y2ggPSBmYWxzZTtcbmxldCBza2lwV2F0Y2hlcnMgPSBmYWxzZTtcbmxldCBuZ1pvbmU6IGFueTtcbmxldCBhcHBSZWY6IGFueTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDTEVBTlVQIFNDSEVEVUxFUiBXSVRIOlxuICogIC0gU2lnbmlmaWNhbnQgd2F0Y2hlciBkZWx0YSB0cmlnZ2VyICgrLy0pXG4gKiAgLSBVSSBzdGFiaWxpemF0aW9uIGRlbGF5ICgx4oCTMiBzZWNvbmRzKVxuICogIC0gQ29vbGRvd24gdG8gcHJldmVudCByZXBlYXRlZCBzY2hlZHVsaW5nXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5jb25zdCBDTEVBTlVQX1RSSUdHRVJfREVMVEEgPSAzMDA7ICAgLy8gd2F0Y2hlciBjaGFuZ2UgdGhyZXNob2xkXG5jb25zdCBDTEVBTlVQX0RFTEFZID0gMTUwMDsgICAgICAgICAgLy8gZGVsYXkgYmVmb3JlIHJ1bm5pbmcgY2xlYW51cFxuY29uc3QgQ0xFQU5VUF9DT09MRE9XTiA9IDQwMDA7ICAgICAgIC8vIHByZXZlbnQgcmUtc2NoZWR1bGluZyBmb3IgNHNcblxubGV0IGxhc3RXYXRjaGVyQ291bnQgPSAwO1xubGV0IHNjaGVkdWxlZENsZWFudXA6IGFueSA9IG51bGw7XG5sZXQgbGFzdFNjaGVkdWxlZFRpbWUgPSAwO1xuXG5mdW5jdGlvbiBnZXRXYXRjaGVyQ291bnQoKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIHJlZ2lzdHJ5LmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIC8vIENoZWNrIGlmIGl0J3MgYSBncm91cGVkIHN0cnVjdHVyZSAod2lkZ2V0IGdyb3Vwcykgb3IgYSBkaXJlY3Qgd2F0Y2hJbmZvXG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICF2YWx1ZS5mbikge1xuICAgICAgICAgICAgLy8gSXQncyBhIHdpZGdldCBncm91cCAtIGNvdW50IHRoZSBwcm9wZXJ0aWVzIChleGNsdWRpbmcgbWV0YWRhdGEpXG4gICAgICAgICAgICBjb3VudCArPSBPYmplY3Qua2V5cyh2YWx1ZSkuZmlsdGVyKGsgPT4gayAhPT0gJ3Njb3BlVHlwZScgJiYgayAhPT0gJ3Njb3BlTmFtZScpLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0J3MgYSBkaXJlY3Qgd2F0Y2hJbmZvXG4gICAgICAgICAgICBjb3VudCArPSAxO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvdW50O1xufVxuXG5leHBvcnQgY29uc3QgY2xlYW51cFN0YWxlV2F0Y2hlcnMgPSAoKTogbnVtYmVyID0+IHtcbiAgICAvLyBjb25zb2xlLmxvZyhcIi4uLi4uLi4uLkNsZWFuaW5nIHVwIHN0YWxlIHdhdGNoZXJzLi4ucmVnaXN0cnkuc2l6ZS4uLi5cIiwgcmVnaXN0cnkuc2l6ZSk7XG4gICAgbGV0IHJlbW92ZWQgPSAwO1xuXG4gICAgcmVnaXN0cnkuZm9yRWFjaCgoYnVja2V0LCB3aWRnZXRJZCkgPT4ge1xuICAgICAgICBpZiAod2lkZ2V0SWQuc3RhcnRzV2l0aCgnd2lkZ2V0LWlkJykgJiYgIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFt3aWRnZXQtaWQ9XCIke3dpZGdldElkfVwiXWApKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBidWNrZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoYnVja2V0Lmhhc093blByb3BlcnR5KGtleSkgJiYga2V5ICE9PSBcInNjb3BlVHlwZVwiICYmIGtleSAhPT0gXCJzY29wZU5hbWVcIiAmJiB0eXBlb2YgYnVja2V0W2tleV0gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBsZXQgd2F0Y2hJbmZvID0gYnVja2V0W2tleV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh3YXRjaEluZm8gJiYgd2F0Y2hJbmZvLmRlc3Ryb3lGbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2F0Y2hJbmZvLmRlc3Ryb3lGbigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVtb3ZlZCsrO1xuICAgICAgICAgICAgcmVnaXN0cnkuZGVsZXRlKHdpZGdldElkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZW1vdmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IHNjaGVkdWxlVGhyZXNob2xkQ2xlYW51cCA9ICgpOiB2b2lkID0+IHtcbiAgICBjb25zdCBub3cgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICBsZXQgbGFzdFRyaWdnZXJQZXJpb2QgPSBub3cgLSBsYXN0U2NoZWR1bGVkVGltZTtcbiAgICAvLyBJZiBhIGNsZWFudXAgd2FzIHNjaGVkdWxlZCByZWNlbnRseSwgc2tpcCBzY2hlZHVsaW5nXG4gICAgaWYgKGxhc3RUcmlnZ2VyUGVyaW9kIDwgQ0xFQU5VUF9DT09MRE9XTikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudCA9IGdldFdhdGNoZXJDb3VudCgpO1xuICAgIGNvbnN0IGRlbHRhID0gTWF0aC5hYnMoY3VycmVudCAtIGxhc3RXYXRjaGVyQ291bnQpOyAgLy8gc2lnbmlmaWNhbnQgKyBvciAtXG5cbiAgICAvLyBJZiBjaGFuZ2Ugbm90IGxhcmdlIGVub3VnaCwgc2tpcCBzY2hlZHVsaW5nXG4gICAgaWYgKGRlbHRhIDw9IENMRUFOVVBfVFJJR0dFUl9ERUxUQSkge1xuICAgICAgICBsYXN0V2F0Y2hlckNvdW50ID0gY3VycmVudDtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByZXZlbnQgcmUtc2NoZWR1bGluZzogc2V0IHRpbWVzdGFtcCBlYXJseVxuICAgIGxhc3RTY2hlZHVsZWRUaW1lID0gbm93O1xuXG4gICAgLy8gQ2xlYXIgcHJldmlvdXMgc2NoZWR1bGVkIGNsZWFudXAgKGlmIGFueSlcbiAgICBpZiAoc2NoZWR1bGVkQ2xlYW51cCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoc2NoZWR1bGVkQ2xlYW51cCk7XG4gICAgfVxuXG4gICAgLy8gU2NoZWR1bGUgY2xlYW51cCBhZnRlciBVSSBzdGFiaWxpemVzIChkZWxheSBwcmV2ZW50cyBhZ2dyZXNzaXZlIGNsZWFudXApXG4gICAgc2NoZWR1bGVkQ2xlYW51cCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjbGVhbnVwU3RhbGVXYXRjaGVycygpO1xuICAgICAgICBzY2hlZHVsZWRDbGVhbnVwID0gbnVsbDtcbiAgICB9LCBDTEVBTlVQX0RFTEFZKTtcblxuICAgIGxhc3RXYXRjaGVyQ291bnQgPSBjdXJyZW50O1xufTtcbi8vIFV0aWxpdHkgZnVuY3Rpb25zXG5leHBvcnQgY29uc3QgaXNGaXJzdFRpbWVDaGFuZ2UgPSAodjogYW55KTogYm9vbGVhbiA9PiB2ID09PSBGSVJTVF9USU1FX1dBVENIO1xuXG5leHBvcnQgY29uc3QgZGVib3VuY2UgPSAoZm46IEZ1bmN0aW9uLCB3YWl0OiBudW1iZXIgPSBERUJPVU5DRV9XQUlUKSA9PiB7XG4gICAgbGV0IHRpbWVvdXQ6IGFueTtcbiAgICByZXR1cm4gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgIHdpbmRvd1snX196b25lX3N5bWJvbF9fY2xlYXJUaW1lb3V0J10odGltZW91dCk7XG4gICAgICAgIHRpbWVvdXQgPSB3aW5kb3dbJ19fem9uZV9zeW1ib2xfX3NldFRpbWVvdXQnXSgoKSA9PiBmbiguLi5hcmdzKSwgd2FpdCk7XG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBtdXRlV2F0Y2hlcnMgPSAoKTogdm9pZCA9PiB7XG4gICAgbXV0ZWQgPSB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IHVuTXV0ZVdhdGNoZXJzID0gKCk6IHZvaWQgPT4ge1xuICAgIG11dGVkID0gZmFsc2U7XG4gICAgdHJpZ2dlcldhdGNoZXJzKCk7XG59O1xuXG4vKipcbiAqIEV4dHJhY3RzIHdpZGdldCBJRCBmcm9tIGlkZW50aWZpZXIgKGUuZy4sIFwid2lkZ2V0LWlkMjNfZXZlbnRzb3VyY2VcIiAtPiBcIndpZGdldC1pZDIzXCIpXG4gKi9cbmNvbnN0IGdldFdpZGdldElkID0gKGlkZW50aWZpZXI6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICAgIGlmICghaWRlbnRpZmllciB8fCB0eXBlb2YgaWRlbnRpZmllciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoID0gaWRlbnRpZmllci5tYXRjaChXSURHRVRfSURfUkVHRVgpO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogbnVsbDtcbn07XG5cbi8qKlxuICogRXh0cmFjdHMgcHJvcGVydHkgbmFtZSBmcm9tIGlkZW50aWZpZXIgKGUuZy4sIFwid2lkZ2V0LWlkMjNfZXZlbnRzb3VyY2VcIiAtPiBcImV2ZW50c291cmNlXCIpXG4gKi9cbmNvbnN0IGdldFByb3BlcnR5TmFtZSA9IChpZGVudGlmaWVyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGlmICghaWRlbnRpZmllciB8fCB0eXBlb2YgaWRlbnRpZmllciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aWZpZXI7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoID0gaWRlbnRpZmllci5tYXRjaChXSURHRVRfUFJPUEVSVFlfUkVHRVgpO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogaWRlbnRpZmllcjtcbn07XG5cbi8qKlxuICogQXJyYXkgY29uc3VtZXIgd3JhcHBlciBmb3IgYXJyYXktYmFzZWQgZXhwcmVzc2lvbnNcbiAqL1xuY29uc3QgYXJyYXlDb25zdW1lciA9IChsaXN0ZW5lckZuOiBhbnksIHJlc3RFeHByOiBzdHJpbmcsIG5ld1ZhbDogYW55LCBvbGRWYWw6IGFueSk6IHZvaWQgPT4ge1xuICAgIGlmICghaXNBcnJheShuZXdWYWwpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZm9ybWF0dGVkRGF0YSA9IG5ld1ZhbC5tYXAoZGF0dW0gPT4gZmluZFZhbHVlT2YoZGF0dW0sIHJlc3RFeHByKSk7XG5cbiAgICAvLyBGbGF0dGVuIGlmIHJlc3VsdCBpcyBhcnJheSBvZiBhcnJheXNcbiAgICBpZiAoaXNBcnJheShmb3JtYXR0ZWREYXRhWzBdKSkge1xuICAgICAgICBmb3JtYXR0ZWREYXRhID0gZmxhdHRlbihmb3JtYXR0ZWREYXRhKTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lckZuKGZvcm1hdHRlZERhdGEsIG9sZFZhbCk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgd2F0Y2ggaW5mbyBmb3IgYXJyYXkgZXhwcmVzc2lvbnNcbiAqL1xuY29uc3QgZ2V0VXBkYXRlZFdhdGNoSW5mbyA9IChleHByOiBzdHJpbmcsIGFjY2VwdHNBcnJheTogYm9vbGVhbiwgbGlzdGVuZXI6IGFueSkgPT4ge1xuICAgIGNvbnN0IHJlZ2V4ID0gL1xcW1xcJGlcXF0vZztcblxuICAgIGlmICghYWNjZXB0c0FycmF5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBleHByOiBleHByLnJlcGxhY2UocmVnZXgsIEFSUkFZX0lOREVYX1pFUk8pLFxuICAgICAgICAgICAgbGlzdGVuZXJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXN0SW5kZXggPSBleHByLmxhc3RJbmRleE9mKEFSUkFZX0lOREVYX1BMQUNFSE9MREVSKTtcbiAgICBjb25zdCBiYXNlRXhwciA9IGV4cHIuc3Vic3RyaW5nKDAsIGxhc3RJbmRleCkucmVwbGFjZShBUlJBWV9JTkRFWF9QTEFDRUhPTERFUiwgQVJSQVlfSU5ERVhfWkVSTyk7XG4gICAgY29uc3QgcmVzdEV4cHIgPSBleHByLnN1YnN0cmluZyhsYXN0SW5kZXggKyA1KTtcblxuICAgIGNvbnN0IGFycmF5Q29uc3VtZXJGbiA9IHJlc3RFeHByXG4gICAgICAgID8gYXJyYXlDb25zdW1lci5iaW5kKHVuZGVmaW5lZCwgbGlzdGVuZXIsIHJlc3RFeHByKVxuICAgICAgICA6IGxpc3RlbmVyO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZXhwcjogYmFzZUV4cHIsXG4gICAgICAgIGxpc3RlbmVyOiBhcnJheUNvbnN1bWVyRm5cbiAgICB9O1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGFuIGV4cHJlc3Npb24gaXMgc3RhdGljIChkb2Vzbid0IG5lZWQgdG8gYmUgd2F0Y2hlZClcbiAqL1xuY29uc3QgU1RBVElDX0VYUFJFU1NJT05fTkFNRVMgPSBbXG4gICAgXCJyb3cuZ2V0UHJvcGVydHkoJ2ludmVzdG1lbnQnKVwiLFxuICAgIFwicm93LmdldFByb3BlcnR5KCdmYWN0c2hlZXRMaW5rJylcIixcbiAgICBcInJvdy5nZXRQcm9wZXJ0eSgnaXNSZWJhbGFuY2VFbGlnaWJsZScpXCJcbl07XG5cbmNvbnN0IGlzU3RhdGljRXhwcmVzc2lvbiA9IChleHByOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICBpZiAodHlwZW9mIGV4cHIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmltbWVkRXhwciA9IGV4cHIudHJpbSgpO1xuXG4gICAgLy8gRXhwcmVzc2lvbnMgdGhhdCBhbHdheXMgZXZhbHVhdGUgdG8gbG9jYWxpemF0aW9uIHN0cmluZ3NcbiAgICAvLyBpZiAodHJpbW1lZEV4cHIuaW5jbHVkZXMoJ2FwcExvY2FsZScpKSB7XG4gICAgLy8gICAgIHJldHVybiB0cnVlO1xuICAgIC8vIH1cblxuICAgIC8vIEhhcmQtY29kZWQgc3RhdGljIGV4cHJlc3Npb24gbmFtZXNcbiAgICBpZiAoU1RBVElDX0VYUFJFU1NJT05fTkFNRVMuaW5jbHVkZXModHJpbW1lZEV4cHIpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgc2NvcGUgdHlwZSBmcm9tIHRoZSBzY29wZSBvYmplY3RcbiAqL1xuY29uc3QgZ2V0U2NvcGVUeXBlID0gKCRzY29wZTogYW55KTogU2NvcGVUeXBlIHwgbnVsbCA9PiB7XG4gICAgaWYgKCEkc2NvcGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCRzY29wZS5wYWdlTmFtZSkgcmV0dXJuICdQYWdlJztcbiAgICBpZiAoJHNjb3BlLnByZWZhYk5hbWUpIHJldHVybiAnUHJlZmFiJztcbiAgICBpZiAoJHNjb3BlLnBhcnRpYWxOYW1lKSByZXR1cm4gJ1BhcnRpYWwnO1xuXG4gICAgLy8gQ2hlY2sgZm9yIEFwcCBzY29wZVxuICAgIGlmICgkc2NvcGUuVmFyaWFibGVzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgJHNjb3BlLkFjdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAhJHNjb3BlLnBhZ2VOYW1lICYmXG4gICAgICAgICEkc2NvcGUucHJlZmFiTmFtZSAmJlxuICAgICAgICAhJHNjb3BlLnBhcnRpYWxOYW1lKSB7XG4gICAgICAgIHJldHVybiAnQXBwJztcbiAgICB9XG5cbiAgICBpZiAoJHNjb3BlLmNvbnN0cnVjdG9yPy5uYW1lID09PSAnQXBwUmVmJykge1xuICAgICAgICByZXR1cm4gJ0FwcCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIEdldHMgc2NvcGUgbmFtZSBiYXNlZCBvbiBzY29wZSB0eXBlXG4gKi9cbmNvbnN0IGdldFNjb3BlTmFtZSA9ICgkc2NvcGU6IGFueSwgc2NvcGVUeXBlOiBTY29wZVR5cGUgfCBudWxsKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gICAgaWYgKCFzY29wZVR5cGUgfHwgISRzY29wZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHNjb3BlVHlwZSkge1xuICAgICAgICBjYXNlICdQcmVmYWInOiByZXR1cm4gJHNjb3BlLnByZWZhYk5hbWUgfHwgbnVsbDtcbiAgICAgICAgY2FzZSAnUGFydGlhbCc6IHJldHVybiAkc2NvcGUucGFydGlhbE5hbWUgfHwgbnVsbDtcbiAgICAgICAgY2FzZSAnUGFnZSc6IHJldHVybiAkc2NvcGUucGFnZU5hbWUgfHwgbnVsbDtcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYWluIHdhdGNoIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCAkd2F0Y2ggPSAoXG4gICAgZXhwcjogc3RyaW5nLFxuICAgICRzY29wZTogYW55LFxuICAgICRsb2NhbHM6IGFueSxcbiAgICBsaXN0ZW5lcjogYW55LFxuICAgIGlkZW50aWZpZXI6IHN0cmluZyA9IHdhdGNoSWRHZW5lcmF0b3IubmV4dFVpZCgpLFxuICAgIGRvTm90Q2xvbmU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBjb25maWc6IFdhdGNoQ29uZmlnID0ge30sXG4gICAgaXNNdXRlZD86ICgpID0+IGJvb2xlYW5cbikgPT4ge1xuICAgIC8vIEhhbmRsZSBhcnJheSBleHByZXNzaW9uc1xuICAgIGlmIChleHByLmluY2x1ZGVzKEFSUkFZX0lOREVYX1BMQUNFSE9MREVSKSkge1xuICAgICAgICBjb25zdCB3YXRjaEluZm8gPSBnZXRVcGRhdGVkV2F0Y2hJbmZvKGV4cHIsIGNvbmZpZy5hcnJheVR5cGUgfHwgY29uZmlnLmlzTGlzdCB8fCBmYWxzZSwgbGlzdGVuZXIpO1xuICAgICAgICBleHByID0gd2F0Y2hJbmZvLmV4cHI7XG4gICAgICAgIGxpc3RlbmVyID0gd2F0Y2hJbmZvLmxpc3RlbmVyO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzdGF0aWMgZXhwcmVzc2lvbnNcbiAgICBpZiAoaXNTdGF0aWNFeHByZXNzaW9uKGV4cHIpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBmbiA9ICRwYXJzZUV4cHIoZXhwcik7XG4gICAgICAgICAgICBjb25zdCBzdGF0aWNWYWx1ZSA9IGZuKCRzY29wZSwgJGxvY2Fscyk7XG4gICAgICAgICAgICBsaXN0ZW5lcihzdGF0aWNWYWx1ZSwgRklSU1RfVElNRV9XQVRDSCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgRXJyb3IgZXZhbHVhdGluZyBzdGF0aWMgZXhwcmVzc2lvbiAnJHtleHByfSc6YCwgZSk7XG4gICAgICAgICAgICBsaXN0ZW5lcih1bmRlZmluZWQsIEZJUlNUX1RJTUVfV0FUQ0gpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoKSA9PiB7IH07IC8vIE5vLW9wIHVuc3Vic2NyaWJlXG4gICAgfVxuXG4gICAgY29uc3QgZm4gPSAkcGFyc2VFeHByKGV4cHIpO1xuICAgIGNvbnN0IHNjb3BlVHlwZSA9IGdldFNjb3BlVHlwZSgkc2NvcGUpO1xuICAgIGNvbnN0IHNjb3BlTmFtZSA9IGdldFNjb3BlTmFtZSgkc2NvcGUsIHNjb3BlVHlwZSk7XG5cbiAgICBjb25zdCBkZXN0cm95Rm4gPSAoKSA9PiAkdW53YXRjaChpZGVudGlmaWVyKTtcbiAgICBjb25zdCB3YXRjaEluZm86IFdhdGNoSW5mbyA9IHtcbiAgICAgICAgZm46IGZuLmJpbmQobnVsbCwgJHNjb3BlLCAkbG9jYWxzKSxcbiAgICAgICAgbGlzdGVuZXIsXG4gICAgICAgIGV4cHIsXG4gICAgICAgIGxhc3Q6IEZJUlNUX1RJTUVfV0FUQ0gsXG4gICAgICAgIGRvTm90Q2xvbmUsXG4gICAgICAgIGlzTXV0ZWQsXG4gICAgICAgIHNjb3BlVHlwZSxcbiAgICAgICAgc2NvcGVOYW1lLFxuICAgICAgICBkZXN0cm95Rm5cbiAgICB9O1xuXG4gICAgLy8gU3RvcmUgaW4gcmVnaXN0cnlcbiAgICBjb25zdCB3aWRnZXRJZCA9IGdldFdpZGdldElkKGlkZW50aWZpZXIpO1xuXG4gICAgaWYgKHdpZGdldElkKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IGdldFByb3BlcnR5TmFtZShpZGVudGlmaWVyKTtcbiAgICAgICAgaWYgKCFyZWdpc3RyeS5oYXMod2lkZ2V0SWQpKSB7XG4gICAgICAgICAgICByZWdpc3RyeS5zZXQod2lkZ2V0SWQsIHt9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3aWRnZXRHcm91cCA9IHJlZ2lzdHJ5LmdldCh3aWRnZXRJZCk7XG4gICAgICAgIHdpZGdldEdyb3VwW3Byb3BlcnR5TmFtZV0gPSB3YXRjaEluZm87XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVnaXN0cnkuc2V0KGlkZW50aWZpZXIsIHdhdGNoSW5mbyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc3Ryb3lGbjtcbn07XG5cbi8qKlxuICogVW53YXRjaGVzIGEgc2luZ2xlIGlkZW50aWZpZXJcbiAqL1xuZXhwb3J0IGNvbnN0ICR1bndhdGNoID0gKGlkZW50aWZpZXI6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IHdpZGdldElkID0gZ2V0V2lkZ2V0SWQoaWRlbnRpZmllcik7XG5cbiAgICBpZiAod2lkZ2V0SWQpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gZ2V0UHJvcGVydHlOYW1lKGlkZW50aWZpZXIpO1xuICAgICAgICBjb25zdCB3aWRnZXRHcm91cCA9IHJlZ2lzdHJ5LmdldCh3aWRnZXRJZCk7XG5cbiAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgIGlmICh3aWRnZXRHcm91cCAmJiB0eXBlb2Ygd2lkZ2V0R3JvdXAgPT09ICdvYmplY3QnICYmICF3aWRnZXRHcm91cC5mbikge1xuICAgICAgICAgICAgY29uc3Qgd2F0Y2hJbmZvID0gd2lkZ2V0R3JvdXBbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgIGlmICh3YXRjaEluZm8pIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgd2lkZ2V0R3JvdXBbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgICAgICAvLyBDbGVhbiB1cCBlbXB0eSB3aWRnZXQgZ3JvdXBzXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHdpZGdldEdyb3VwKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnkuZGVsZXRlKHdpZGdldElkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayB0byBkaXJlY3QgbG9va3VwXG4gICAgaWYgKHJlZ2lzdHJ5LmhhcyhpZGVudGlmaWVyKSkge1xuICAgICAgICByZWdpc3RyeS5kZWxldGUoaWRlbnRpZmllcik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVW53YXRjaGVzIGFsbCB3YXRjaGVycyBmb3IgYSBzcGVjaWZpYyB3aWRnZXQgSURcbiAqL1xuZXhwb3J0IGNvbnN0ICR1bndhdGNoQWxsID0gKHdpZGdldElkOiBzdHJpbmcpOiBudW1iZXIgPT4ge1xuICAgIGlmICghd2lkZ2V0SWQgfHwgdHlwZW9mIHdpZGdldElkICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCB3aWRnZXRHcm91cCA9IHJlZ2lzdHJ5LmdldCh3aWRnZXRJZCk7XG5cbiAgICBpZiAod2lkZ2V0R3JvdXAgJiYgdHlwZW9mIHdpZGdldEdyb3VwID09PSAnb2JqZWN0JyAmJiAhd2lkZ2V0R3JvdXAuZm4pIHtcbiAgICAgICAgY29uc3QgY291bnQgPSBPYmplY3Qua2V5cyh3aWRnZXRHcm91cCkubGVuZ3RoO1xuICAgICAgICByZWdpc3RyeS5kZWxldGUod2lkZ2V0SWQpO1xuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2s6IGZpbmQgYWxsIGlkZW50aWZpZXJzIHN0YXJ0aW5nIHdpdGggdGhpcyB3aWRnZXQgSURcbiAgICBsZXQgcmVtb3ZlZENvdW50ID0gMDtcbiAgICBjb25zdCBpZGVudGlmaWVyc1RvUmVtb3ZlOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgcmVnaXN0cnkuZm9yRWFjaCgoXywga2V5KSA9PiB7XG4gICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aCh3aWRnZXRJZCArICdfJykpIHtcbiAgICAgICAgICAgIGlkZW50aWZpZXJzVG9SZW1vdmUucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpZGVudGlmaWVyc1RvUmVtb3ZlLmZvckVhY2goaWRlbnRpZmllciA9PiB7XG4gICAgICAgIGlmICgkdW53YXRjaChpZGVudGlmaWVyKSkge1xuICAgICAgICAgICAgcmVtb3ZlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZW1vdmVkQ291bnQ7XG59O1xuXG4vKipcbiAqIFVud2F0Y2hlcyBhbGwgd2F0Y2hlcnMgZm9yIGEgc3BlY2lmaWMgc2NvcGUgKFBhZ2UsIFByZWZhYiwgUGFydGlhbCwgb3IgQXBwKVxuICogTm93IHdvcmtzIGRpcmVjdGx5IHdpdGggdGhlIG1haW4gcmVnaXN0cnkgaW5zdGVhZCBvZiBzZXBhcmF0ZSBzY29wZWQgcmVnaXN0cmllc1xuICovXG5leHBvcnQgY29uc3QgJHVud2F0Y2hBbGxCeVNjb3BlID0gKHNjb3BlVHlwZTogU2NvcGVUeXBlLCBzY29wZU5hbWU/OiBzdHJpbmcpOiBudW1iZXIgPT4ge1xuICAgIGlmICghc2NvcGVUeXBlKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGxldCByZW1vdmVkQ291bnQgPSAwO1xuICAgIGNvbnN0IGlkZW50aWZpZXJzVG9SZW1vdmU6IHN0cmluZ1tdID0gW107XG5cbiAgICByZWdpc3RyeS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIC8vIEhhbmRsZSBncm91cGVkIHN0cnVjdHVyZSAod2lkZ2V0IGdyb3VwcylcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIXZhbHVlLmZuKSB7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyh2YWx1ZSkuZm9yRWFjaCgoW3Byb3BlcnR5TmFtZSwgd2F0Y2hJbmZvXTogW3N0cmluZywgYW55XSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh3YXRjaEluZm8/LnNjb3BlVHlwZSA9PT0gc2NvcGVUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgICghc2NvcGVOYW1lIHx8IHdhdGNoSW5mby5zY29wZU5hbWUgPT09IHNjb3BlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcnNUb1JlbW92ZS5wdXNoKGAke2tleX1fJHtwcm9wZXJ0eU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBEaXJlY3Qgd2F0Y2hJbmZvXG4gICAgICAgICAgICBjb25zdCB3YXRjaEluZm8gPSB2YWx1ZSBhcyBXYXRjaEluZm87XG4gICAgICAgICAgICBpZiAod2F0Y2hJbmZvPy5zY29wZVR5cGUgPT09IHNjb3BlVHlwZSAmJlxuICAgICAgICAgICAgICAgICghc2NvcGVOYW1lIHx8IHdhdGNoSW5mby5zY29wZU5hbWUgPT09IHNjb3BlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBpZGVudGlmaWVyc1RvUmVtb3ZlLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gVW53YXRjaCBhbGwgY29sbGVjdGVkIGlkZW50aWZpZXJzXG4gICAgaWRlbnRpZmllcnNUb1JlbW92ZS5mb3JFYWNoKGlkZW50aWZpZXIgPT4ge1xuICAgICAgICBpZiAoJHVud2F0Y2goaWRlbnRpZmllcikpIHtcbiAgICAgICAgICAgIHJlbW92ZWRDb3VudCsrO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVtb3ZlZENvdW50O1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgYSBzaW5nbGUgd2F0Y2ggaW5mbyBkdXJpbmcgdHJpZ2dlciBjeWNsZVxuICovXG5jb25zdCBwcm9jZXNzV2F0Y2hJbmZvID0gKHdhdGNoSW5mbzogV2F0Y2hJbmZvKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKCF3YXRjaEluZm8/LmZuIHx8ICh3YXRjaEluZm8uaXNNdXRlZD8uKCkgPz8gZmFsc2UpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgbmV3VmFsdWU6IGFueTtcbiAgICB0cnkge1xuICAgICAgICBuZXdWYWx1ZSA9IHdhdGNoSW5mby5mbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFcnJvciBleGVjdXRpbmcgZXhwcmVzc2lvbjogJyR7d2F0Y2hJbmZvLmV4cHJ9J2AsIGUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGlzRXF1YWwobmV3VmFsdWUsIHdhdGNoSW5mby5sYXN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ2hhbmdlIGRldGVjdGVkXG4gICAgY2hhbmdlZEJ5V2F0Y2ggPSB0cnVlO1xuICAgIHdhdGNoSW5mby5sYXN0ID0gaXNPYmplY3QobmV3VmFsdWUpICYmICF3YXRjaEluZm8uZG9Ob3RDbG9uZVxuICAgICAgICA/IGNsb25lKG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuXG4gICAgd2F0Y2hJbmZvLmxpc3RlbmVyKG5ld1ZhbHVlLCB3YXRjaEluZm8ubGFzdCA9PT0gbmV3VmFsdWUgPyBGSVJTVF9USU1FX1dBVENIIDogd2F0Y2hJbmZvLmxhc3QpO1xuICAgIGNoYW5nZWRCeVdhdGNoID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYWxsIHdhdGNoZXJzXG4gKi9cbmNvbnN0IHRyaWdnZXJXYXRjaGVycyA9IChpZ25vcmVNdXRlZDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCA9PiB7XG4gICAgaWYgKG11dGVkICYmICFpZ25vcmVNdXRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHBhc3MgPSAxO1xuICAgIGxldCBjaGFuZ2VEZXRlY3RlZDogYm9vbGVhbjtcblxuICAgIGRvIHtcbiAgICAgICAgY2hhbmdlRGV0ZWN0ZWQgPSBmYWxzZTtcblxuICAgICAgICByZWdpc3RyeS5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgLy8gSGFuZGxlIGdyb3VwZWQgc3RydWN0dXJlXG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhdmFsdWUuZm4pIHtcbiAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKHZhbHVlKS5mb3JFYWNoKCh3YXRjaEluZm86IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc1dhdGNoSW5mbyh3YXRjaEluZm8pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRGlyZWN0IHdhdGNoSW5mb1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzV2F0Y2hJbmZvKHZhbHVlIGFzIFdhdGNoSW5mbykpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcGFzcysrO1xuICAgIH0gd2hpbGUgKGNoYW5nZURldGVjdGVkICYmIHBhc3MgPCBNQVhfV0FUQ0hfQ1lDTEVTKTtcblxuICAgIC8vIFNjaGVkdWxlIGNsZWFudXAgYWZ0ZXIgd2F0Y2hlcnMgYXJlIHRyaWdnZXJlZFxuICAgIHNjaGVkdWxlVGhyZXNob2xkQ2xlYW51cCgpO1xuICAgIGlmIChjaGFuZ2VEZXRlY3RlZCAmJiBwYXNzID09PSBNQVhfV0FUQ0hfQ1lDTEVTKSB7XG4gICAgICAgIC8vIGNvbnNvbGUud2FybihgV2F0Y2ggY3ljbGVzIGV4Y2VlZGVkIGxpbWl0IG9mICR7TUFYX1dBVENIX0NZQ0xFU31gKTtcbiAgICB9XG59O1xuXG4vLyBBbmd1bGFyIHpvbmUgaW50ZWdyYXRpb25cbmV4cG9ydCBjb25zdCBzZXROZ1pvbmUgPSAoem9uZTogYW55KTogdm9pZCA9PiB7XG4gICAgbmdab25lID0gem9uZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRBcHBSZWYgPSAocmVmOiBhbnkpOiB2b2lkID0+IHtcbiAgICBhcHBSZWYgPSByZWY7XG59O1xuXG5leHBvcnQgY29uc3QgaXNDaGFuZ2VGcm9tV2F0Y2ggPSAoKTogYm9vbGVhbiA9PiBjaGFuZ2VkQnlXYXRjaDtcbmV4cG9ydCBjb25zdCByZXNldENoYW5nZUZyb21XYXRjaCA9ICgpOiB2b2lkID0+IHtcbiAgICBjaGFuZ2VkQnlXYXRjaCA9IGZhbHNlO1xufTtcblxuLy8gRGVib3VuY2VkIHRyaWdnZXJcbmNvbnN0IGRlYm91bmNlZFRyaWdnZXJXYXRjaGVycyA9IGRlYm91bmNlKCgpID0+IHtcbiAgICBza2lwV2F0Y2hlcnMgPSB0cnVlO1xuICAgIG5nWm9uZS5ydW4oKCkgPT4gdHJpZ2dlcldhdGNoZXJzKCkpO1xufSwgREVCT1VOQ0VfV0FJVCk7XG5cbmV4cG9ydCBjb25zdCAkaW52b2tlV2F0Y2hlcnMgPSAoZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSwgaWdub3JlTXV0ZWQ6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQgPT4ge1xuICAgIGlmIChmb3JjZSkge1xuICAgICAgICB0cmlnZ2VyV2F0Y2hlcnMoaWdub3JlTXV0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChza2lwV2F0Y2hlcnMpIHtcbiAgICAgICAgICAgIHNraXBXYXRjaGVycyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlYm91bmNlZFRyaWdnZXJXYXRjaGVycygpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCAkYXBwRGlnZXN0ID0gKCgpID0+IHtcbiAgICBsZXQgcXVldWVkID0gZmFsc2U7XG4gICAgY29uc3QgJFJBRiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5cbiAgICByZXR1cm4gKGZvcmNlOiBib29sZWFuID0gZmFsc2UpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKCFhcHBSZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JjZSkge1xuICAgICAgICAgICAgbmdab25lLnJ1bigoKSA9PiBhcHBSZWYudGljaygpKTtcbiAgICAgICAgICAgIHF1ZXVlZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHF1ZXVlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXVlZCA9IHRydWU7XG4gICAgICAgICAgICAkUkFGKCgpID0+IHtcbiAgICAgICAgICAgICAgICBuZ1pvbmUucnVuKCgpID0+IGFwcFJlZi50aWNrKCkpO1xuICAgICAgICAgICAgICAgIHF1ZXVlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSkoKTtcblxuLy8gRXhwb3J0IHJlZ2lzdHJ5IGZvciBkZWJ1Z2dpbmdcbih3aW5kb3cgYXMgYW55KS53YXRjaFJlZ2lzdHJ5ID0gcmVnaXN0cnk7XG4iXX0=
|
package/core/fesm2022/index.mjs
CHANGED
|
@@ -18,6 +18,7 @@ var FormWidgetType;
|
|
|
18
18
|
FormWidgetType["CUSTOMWIDGET"] = "custom-widget";
|
|
19
19
|
FormWidgetType["DATE"] = "date";
|
|
20
20
|
FormWidgetType["DATETIME"] = "datetime";
|
|
21
|
+
FormWidgetType["ICONBUTTONTOGGLE"] = "iconbutton-toggle";
|
|
21
22
|
FormWidgetType["NUMBER"] = "number";
|
|
22
23
|
FormWidgetType["PASSWORD"] = "password";
|
|
23
24
|
FormWidgetType["RADIOSET"] = "radioset";
|
|
@@ -147,6 +148,9 @@ const getFormWidgetTemplate = (widgetType, innerTmpl, attrs, options = {}) => {
|
|
|
147
148
|
case FormWidgetType.TOGGLE:
|
|
148
149
|
tmpl = `<div wmCheckbox ${innerTmpl} ${attrs.get('required') === 'true' ? 'required=true' : ''} type="toggle" ${showTmpl}></div>`;
|
|
149
150
|
break;
|
|
151
|
+
case FormWidgetType.ICONBUTTONTOGGLE:
|
|
152
|
+
tmpl = `<div wmCheckbox ${innerTmpl} ${attrs.get('required') === 'true' ? 'required=true' : ''} type="button" ${showTmpl}></div>`;
|
|
153
|
+
break;
|
|
150
154
|
case FormWidgetType.SLIDER:
|
|
151
155
|
tmpl = `<div wmSlider ${innerTmpl} ${showTmpl}></div>`;
|
|
152
156
|
break;
|
|
@@ -238,6 +242,7 @@ const getRequiredFormWidget = (widgetType) => {
|
|
|
238
242
|
return 'wm-textarea';
|
|
239
243
|
case FormWidgetType.CHECKBOX:
|
|
240
244
|
case FormWidgetType.TOGGLE:
|
|
245
|
+
case FormWidgetType.ICONBUTTONTOGGLE:
|
|
241
246
|
return 'wm-checkbox';
|
|
242
247
|
case FormWidgetType.UPLOAD:
|
|
243
248
|
return 'wm-fileupload';
|
|
@@ -2205,6 +2210,80 @@ let changedByWatch = false;
|
|
|
2205
2210
|
let skipWatchers = false;
|
|
2206
2211
|
let ngZone;
|
|
2207
2212
|
let appRef;
|
|
2213
|
+
/********************************************************************
|
|
2214
|
+
* CLEANUP SCHEDULER WITH:
|
|
2215
|
+
* - Significant watcher delta trigger (+/-)
|
|
2216
|
+
* - UI stabilization delay (1–2 seconds)
|
|
2217
|
+
* - Cooldown to prevent repeated scheduling
|
|
2218
|
+
********************************************************************/
|
|
2219
|
+
const CLEANUP_TRIGGER_DELTA = 300; // watcher change threshold
|
|
2220
|
+
const CLEANUP_DELAY = 1500; // delay before running cleanup
|
|
2221
|
+
const CLEANUP_COOLDOWN = 4000; // prevent re-scheduling for 4s
|
|
2222
|
+
let lastWatcherCount = 0;
|
|
2223
|
+
let scheduledCleanup = null;
|
|
2224
|
+
let lastScheduledTime = 0;
|
|
2225
|
+
function getWatcherCount() {
|
|
2226
|
+
let count = 0;
|
|
2227
|
+
registry.forEach((value) => {
|
|
2228
|
+
// Check if it's a grouped structure (widget groups) or a direct watchInfo
|
|
2229
|
+
if (value && typeof value === 'object' && !value.fn) {
|
|
2230
|
+
// It's a widget group - count the properties (excluding metadata)
|
|
2231
|
+
count += Object.keys(value).filter(k => k !== 'scopeType' && k !== 'scopeName').length;
|
|
2232
|
+
}
|
|
2233
|
+
else {
|
|
2234
|
+
// It's a direct watchInfo
|
|
2235
|
+
count += 1;
|
|
2236
|
+
}
|
|
2237
|
+
});
|
|
2238
|
+
return count;
|
|
2239
|
+
}
|
|
2240
|
+
const cleanupStaleWatchers = () => {
|
|
2241
|
+
// console.log(".........Cleaning up stale watchers...registry.size....", registry.size);
|
|
2242
|
+
let removed = 0;
|
|
2243
|
+
registry.forEach((bucket, widgetId) => {
|
|
2244
|
+
if (widgetId.startsWith('widget-id') && !document.querySelector(`[widget-id="${widgetId}"]`)) {
|
|
2245
|
+
for (const key in bucket) {
|
|
2246
|
+
if (bucket.hasOwnProperty(key) && key !== "scopeType" && key !== "scopeName" && typeof bucket[key] !== "function") {
|
|
2247
|
+
let watchInfo = bucket[key];
|
|
2248
|
+
if (watchInfo && watchInfo.destroyFn) {
|
|
2249
|
+
watchInfo.destroyFn();
|
|
2250
|
+
}
|
|
2251
|
+
}
|
|
2252
|
+
}
|
|
2253
|
+
removed++;
|
|
2254
|
+
registry.delete(widgetId);
|
|
2255
|
+
return;
|
|
2256
|
+
}
|
|
2257
|
+
});
|
|
2258
|
+
return removed;
|
|
2259
|
+
};
|
|
2260
|
+
const scheduleThresholdCleanup = () => {
|
|
2261
|
+
const now = performance.now();
|
|
2262
|
+
let lastTriggerPeriod = now - lastScheduledTime;
|
|
2263
|
+
// If a cleanup was scheduled recently, skip scheduling
|
|
2264
|
+
if (lastTriggerPeriod < CLEANUP_COOLDOWN) {
|
|
2265
|
+
return;
|
|
2266
|
+
}
|
|
2267
|
+
const current = getWatcherCount();
|
|
2268
|
+
const delta = Math.abs(current - lastWatcherCount); // significant + or -
|
|
2269
|
+
// If change not large enough, skip scheduling
|
|
2270
|
+
if (delta <= CLEANUP_TRIGGER_DELTA) {
|
|
2271
|
+
lastWatcherCount = current;
|
|
2272
|
+
return;
|
|
2273
|
+
}
|
|
2274
|
+
// Prevent re-scheduling: set timestamp early
|
|
2275
|
+
lastScheduledTime = now;
|
|
2276
|
+
// Clear previous scheduled cleanup (if any)
|
|
2277
|
+
if (scheduledCleanup) {
|
|
2278
|
+
clearTimeout(scheduledCleanup);
|
|
2279
|
+
}
|
|
2280
|
+
// Schedule cleanup after UI stabilizes (delay prevents aggressive cleanup)
|
|
2281
|
+
scheduledCleanup = setTimeout(() => {
|
|
2282
|
+
cleanupStaleWatchers();
|
|
2283
|
+
scheduledCleanup = null;
|
|
2284
|
+
}, CLEANUP_DELAY);
|
|
2285
|
+
lastWatcherCount = current;
|
|
2286
|
+
};
|
|
2208
2287
|
// Utility functions
|
|
2209
2288
|
const isFirstTimeChange = (v) => v === FIRST_TIME_WATCH;
|
|
2210
2289
|
const debounce = (fn, wait = DEBOUNCE_WAIT) => {
|
|
@@ -2366,6 +2445,7 @@ const $watch = (expr, $scope, $locals, listener, identifier = watchIdGenerator.n
|
|
|
2366
2445
|
const fn = $parseExpr(expr);
|
|
2367
2446
|
const scopeType = getScopeType($scope);
|
|
2368
2447
|
const scopeName = getScopeName($scope, scopeType);
|
|
2448
|
+
const destroyFn = () => $unwatch(identifier);
|
|
2369
2449
|
const watchInfo = {
|
|
2370
2450
|
fn: fn.bind(null, $scope, $locals),
|
|
2371
2451
|
listener,
|
|
@@ -2374,7 +2454,8 @@ const $watch = (expr, $scope, $locals, listener, identifier = watchIdGenerator.n
|
|
|
2374
2454
|
doNotClone,
|
|
2375
2455
|
isMuted,
|
|
2376
2456
|
scopeType,
|
|
2377
|
-
scopeName
|
|
2457
|
+
scopeName,
|
|
2458
|
+
destroyFn
|
|
2378
2459
|
};
|
|
2379
2460
|
// Store in registry
|
|
2380
2461
|
const widgetId = getWidgetId(identifier);
|
|
@@ -2389,7 +2470,7 @@ const $watch = (expr, $scope, $locals, listener, identifier = watchIdGenerator.n
|
|
|
2389
2470
|
else {
|
|
2390
2471
|
registry.set(identifier, watchInfo);
|
|
2391
2472
|
}
|
|
2392
|
-
return
|
|
2473
|
+
return destroyFn;
|
|
2393
2474
|
};
|
|
2394
2475
|
/**
|
|
2395
2476
|
* Unwatches a single identifier
|
|
@@ -2399,6 +2480,7 @@ const $unwatch = (identifier) => {
|
|
|
2399
2480
|
if (widgetId) {
|
|
2400
2481
|
const propertyName = getPropertyName(identifier);
|
|
2401
2482
|
const widgetGroup = registry.get(widgetId);
|
|
2483
|
+
//@ts-ignore
|
|
2402
2484
|
if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
|
|
2403
2485
|
const watchInfo = widgetGroup[propertyName];
|
|
2404
2486
|
if (watchInfo) {
|
|
@@ -2539,8 +2621,10 @@ const triggerWatchers = (ignoreMuted = false) => {
|
|
|
2539
2621
|
});
|
|
2540
2622
|
pass++;
|
|
2541
2623
|
} while (changeDetected && pass < MAX_WATCH_CYCLES);
|
|
2624
|
+
// Schedule cleanup after watchers are triggered
|
|
2625
|
+
scheduleThresholdCleanup();
|
|
2542
2626
|
if (changeDetected && pass === MAX_WATCH_CYCLES) {
|
|
2543
|
-
console.warn(`Watch cycles exceeded limit of ${MAX_WATCH_CYCLES}`);
|
|
2627
|
+
// console.warn(`Watch cycles exceeded limit of ${MAX_WATCH_CYCLES}`);
|
|
2544
2628
|
}
|
|
2545
2629
|
};
|
|
2546
2630
|
// Angular zone integration
|
|
@@ -4065,7 +4149,10 @@ const getAppSetting = (key, defaultValue) => {
|
|
|
4065
4149
|
const setListClass = (scope) => {
|
|
4066
4150
|
let temp = '';
|
|
4067
4151
|
if (scope.itemsperrow) {
|
|
4068
|
-
if (
|
|
4152
|
+
if (scope.itemsperrow === "auto") {
|
|
4153
|
+
scope.itemsPerRowClass = "";
|
|
4154
|
+
}
|
|
4155
|
+
else if (isNaN(parseInt(scope.itemsperrow, 10))) {
|
|
4069
4156
|
// handling itemsperrow containing string of classes
|
|
4070
4157
|
split(scope.itemsperrow, ' ').forEach((cls) => {
|
|
4071
4158
|
const keys = split(cls, '-');
|