barsa-tiles 1.0.456 → 2.0.2
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/{esm2020 → esm2022}/barsa-tiles.mjs +4 -4
- package/esm2022/lib/action-item/action-item.component.mjs +17 -0
- package/{esm2020 → esm2022}/lib/action-links.pipe.mjs +16 -16
- package/esm2022/lib/actions-link/actions-link.component.mjs +41 -0
- package/esm2022/lib/app-finder/app-finder.component.mjs +52 -0
- package/esm2022/lib/app-finder-app-list/app-finder-app-list.component.mjs +39 -0
- package/esm2022/lib/app-finder-group/app-finder-group.component.mjs +41 -0
- package/esm2022/lib/app-finder.service.mjs +121 -0
- package/esm2022/lib/barsa-shellbar/barsa-shellbar.component.mjs +183 -0
- package/esm2022/lib/barsa-tiles.module.mjs +225 -0
- package/esm2022/lib/change-app-tile/change-app-tile.component.mjs +46 -0
- package/esm2022/lib/create-app-group/create-app-group.component.mjs +43 -0
- package/esm2022/lib/directives/emptylist.directive.mjs +36 -0
- package/esm2022/lib/feed-tile/feed-tile.component.mjs +31 -0
- package/{esm2020 → esm2022}/lib/footer-edit-tile/footer-edit-tile.component.mjs +13 -13
- package/esm2022/lib/footer-tile/footer-tile.component.mjs +27 -0
- package/esm2022/lib/form-app-finder/form-app-finder.component.mjs +95 -0
- package/esm2022/lib/form-tile/form-tile.component.mjs +34 -0
- package/esm2022/lib/logo-tile/logo-tile.component.mjs +23 -0
- package/{esm2020 → esm2022}/lib/micro-tile-chart-area/micro-tile-chart-area.component.mjs +40 -40
- package/{esm2020 → esm2022}/lib/micro-tile-chart-bar/micro-tile-chart-bar.component.mjs +29 -29
- package/esm2022/lib/micro-tile-chart-bullet/micro-tile-chart-bullet.component.mjs +26 -0
- package/{esm2020 → esm2022}/lib/micro-tile-chart-circular/micro-tile-chart-circular.component.mjs +20 -20
- package/{esm2020 → esm2022}/lib/micro-tile-chart-comparison/micro-tile-chart-comparison.component.mjs +31 -31
- package/{esm2020 → esm2022}/lib/micro-tile-chart-line/micro-tile-chart-line.component.mjs +32 -32
- package/{esm2020 → esm2022}/lib/micro-tile-chart-stackbar/micro-tile-chart-stackbar.component.mjs +27 -27
- package/{esm2020 → esm2022}/lib/models/app-tile-footer-section.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/app-tile-footer.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/app-tile-group-pin.mjs +1 -1
- package/esm2022/lib/models/base-bt-tile-component.mjs +26 -0
- package/{esm2020 → esm2022}/lib/models/base-tile-component.mjs +58 -58
- package/{esm2020 → esm2022}/lib/models/base-tile-setting.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/feed-tile-setting.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/index.mjs +13 -13
- package/{esm2020 → esm2022}/lib/models/logo-tile-setting.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/micro-tile-chart-bullet-setting.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/news-tile-setting.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/numeric-tile-setting.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/profile-tile-setting.mjs +1 -1
- package/esm2022/lib/models/tile-setting.mjs +2 -0
- package/{esm2020 → esm2022}/lib/models/user-portal-settings.mjs +1 -1
- package/esm2022/lib/news-tile/news-tile.component.mjs +53 -0
- package/esm2022/lib/notification-group/notification-group.component.mjs +116 -0
- package/esm2022/lib/notification-group-header/notification-group-header.component.mjs +38 -0
- package/esm2022/lib/numeric-tile/numeric-tile.component.mjs +64 -0
- package/esm2022/lib/pin-tile/pin-tile.component.mjs +110 -0
- package/esm2022/lib/pipes/group-tiles.pipe.mjs +31 -0
- package/{esm2020 → esm2022}/lib/pipes/home-group.pipe.mjs +17 -17
- package/esm2022/lib/pipes/tile-home-filter.pipe.mjs +28 -0
- package/esm2022/lib/pipes/tile-prop.pipe.mjs +32 -0
- package/esm2022/lib/popover-app-finder/filter-apps-grouped.pipe.mjs +36 -0
- package/esm2022/lib/popover-app-finder/popover-app-finder.component.mjs +112 -0
- package/esm2022/lib/profile-tile/profile-tile.component.mjs +25 -0
- package/esm2022/lib/shellbar/shellbar.component.mjs +201 -0
- package/esm2022/lib/simple-tile/simple-tile.component.mjs +22 -0
- package/esm2022/lib/tile/tile.component.mjs +70 -0
- package/esm2022/lib/tile-renderer.directive.mjs +70 -0
- package/esm2022/lib/tile-style.directive.mjs +29 -0
- package/esm2022/lib/tiles-viewer/tiles-viewer.component.mjs +167 -0
- package/esm2022/lib/tiles-viewer-container/tiles-viewer-container.component.mjs +164 -0
- package/esm2022/lib/tiles-viewer-group/tiles-viewer-group.component.mjs +88 -0
- package/esm2022/lib/tiles-viewer.service.mjs +130 -0
- package/esm2022/lib/tiles.service.mjs +589 -0
- package/{esm2020 → esm2022}/public-api.mjs +46 -45
- package/fesm2022/barsa-tiles.mjs +3179 -0
- package/fesm2022/barsa-tiles.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/action-item/action-item.component.d.ts +6 -6
- package/lib/action-links.pipe.d.ts +7 -7
- package/lib/actions-link/actions-link.component.d.ts +17 -17
- package/lib/app-finder/app-finder.component.d.ts +24 -24
- package/lib/app-finder-app-list/app-finder-app-list.component.d.ts +20 -20
- package/lib/app-finder-group/app-finder-group.component.d.ts +14 -14
- package/lib/app-finder.service.d.ts +33 -33
- package/lib/barsa-shellbar/barsa-shellbar.component.d.ts +104 -97
- package/lib/barsa-tiles.module.d.ts +91 -86
- package/lib/change-app-tile/change-app-tile.component.d.ts +20 -20
- package/lib/create-app-group/create-app-group.component.d.ts +19 -19
- package/lib/directives/emptylist.directive.d.ts +14 -14
- package/lib/feed-tile/feed-tile.component.d.ts +11 -11
- package/lib/footer-edit-tile/footer-edit-tile.component.d.ts +6 -6
- package/lib/footer-tile/footer-tile.component.d.ts +11 -11
- package/lib/form-app-finder/form-app-finder.component.d.ts +38 -38
- package/lib/form-tile/form-tile.component.d.ts +24 -24
- package/lib/logo-tile/logo-tile.component.d.ts +7 -7
- package/lib/micro-tile-chart-area/micro-tile-chart-area.component.d.ts +8 -8
- package/lib/micro-tile-chart-bar/micro-tile-chart-bar.component.d.ts +12 -12
- package/lib/micro-tile-chart-bullet/micro-tile-chart-bullet.component.d.ts +16 -16
- package/lib/micro-tile-chart-circular/micro-tile-chart-circular.component.d.ts +7 -7
- package/lib/micro-tile-chart-comparison/micro-tile-chart-comparison.component.d.ts +8 -8
- package/lib/micro-tile-chart-line/micro-tile-chart-line.component.d.ts +8 -8
- package/lib/micro-tile-chart-stackbar/micro-tile-chart-stackbar.component.d.ts +8 -8
- package/lib/models/app-tile-footer-section.d.ts +6 -6
- package/lib/models/app-tile-footer.d.ts +8 -8
- package/lib/models/app-tile-group-pin.d.ts +5 -5
- package/lib/models/base-bt-tile-component.d.ts +9 -9
- package/lib/models/base-tile-component.d.ts +26 -26
- package/lib/models/base-tile-setting.d.ts +5 -5
- package/lib/models/feed-tile-setting.d.ts +7 -7
- package/lib/models/index.d.ts +13 -13
- package/lib/models/logo-tile-setting.d.ts +6 -6
- package/lib/models/micro-tile-chart-bullet-setting.d.ts +10 -10
- package/lib/models/news-tile-setting.d.ts +4 -4
- package/lib/models/numeric-tile-setting.d.ts +9 -9
- package/lib/models/profile-tile-setting.d.ts +7 -7
- package/lib/models/tile-setting.d.ts +10 -10
- package/lib/models/user-portal-settings.d.ts +9 -9
- package/lib/news-tile/news-tile.component.d.ts +19 -19
- package/lib/notification-group/notification-group.component.d.ts +54 -55
- package/lib/notification-group-header/notification-group-header.component.d.ts +15 -15
- package/lib/numeric-tile/numeric-tile.component.d.ts +16 -12
- package/lib/pin-tile/pin-tile.component.d.ts +30 -30
- package/lib/pipes/group-tiles.pipe.d.ts +14 -14
- package/lib/pipes/home-group.pipe.d.ts +9 -9
- package/lib/pipes/tile-home-filter.pipe.d.ts +8 -8
- package/lib/pipes/tile-prop.pipe.d.ts +8 -8
- package/lib/popover-app-finder/filter-apps-grouped.pipe.d.ts +13 -0
- package/lib/popover-app-finder/popover-app-finder.component.d.ts +39 -0
- package/lib/profile-tile/profile-tile.component.d.ts +7 -7
- package/lib/shellbar/shellbar.component.d.ts +94 -94
- package/lib/simple-tile/simple-tile.component.d.ts +10 -10
- package/lib/tile/tile.component.d.ts +22 -20
- package/lib/tile-renderer.directive.d.ts +28 -28
- package/lib/tile-style.directive.d.ts +12 -0
- package/lib/tiles-viewer/tiles-viewer.component.d.ts +65 -63
- package/lib/tiles-viewer-container/tiles-viewer-container.component.d.ts +59 -57
- package/lib/tiles-viewer-group/tiles-viewer-group.component.d.ts +39 -39
- package/lib/tiles-viewer.service.d.ts +42 -42
- package/lib/tiles.service.d.ts +75 -75
- package/package.json +7 -13
- package/public-api.d.ts +42 -41
- package/esm2020/lib/action-item/action-item.component.mjs +0 -18
- package/esm2020/lib/actions-link/actions-link.component.mjs +0 -42
- package/esm2020/lib/app-finder/app-finder.component.mjs +0 -53
- package/esm2020/lib/app-finder-app-list/app-finder-app-list.component.mjs +0 -40
- package/esm2020/lib/app-finder-group/app-finder-group.component.mjs +0 -42
- package/esm2020/lib/app-finder.service.mjs +0 -121
- package/esm2020/lib/barsa-shellbar/barsa-shellbar.component.mjs +0 -166
- package/esm2020/lib/barsa-tiles.module.mjs +0 -206
- package/esm2020/lib/change-app-tile/change-app-tile.component.mjs +0 -47
- package/esm2020/lib/create-app-group/create-app-group.component.mjs +0 -44
- package/esm2020/lib/directives/emptylist.directive.mjs +0 -36
- package/esm2020/lib/feed-tile/feed-tile.component.mjs +0 -32
- package/esm2020/lib/footer-tile/footer-tile.component.mjs +0 -28
- package/esm2020/lib/form-app-finder/form-app-finder.component.mjs +0 -95
- package/esm2020/lib/form-tile/form-tile.component.mjs +0 -35
- package/esm2020/lib/logo-tile/logo-tile.component.mjs +0 -23
- package/esm2020/lib/micro-tile-chart-bullet/micro-tile-chart-bullet.component.mjs +0 -27
- package/esm2020/lib/models/base-bt-tile-component.mjs +0 -30
- package/esm2020/lib/models/tile-setting.mjs +0 -2
- package/esm2020/lib/news-tile/news-tile.component.mjs +0 -54
- package/esm2020/lib/notification-group/notification-group.component.mjs +0 -116
- package/esm2020/lib/notification-group-header/notification-group-header.component.mjs +0 -39
- package/esm2020/lib/numeric-tile/numeric-tile.component.mjs +0 -34
- package/esm2020/lib/pin-tile/pin-tile.component.mjs +0 -111
- package/esm2020/lib/pipes/group-tiles.pipe.mjs +0 -31
- package/esm2020/lib/pipes/tile-home-filter.pipe.mjs +0 -28
- package/esm2020/lib/pipes/tile-prop.pipe.mjs +0 -32
- package/esm2020/lib/profile-tile/profile-tile.component.mjs +0 -26
- package/esm2020/lib/shellbar/shellbar.component.mjs +0 -200
- package/esm2020/lib/simple-tile/simple-tile.component.mjs +0 -23
- package/esm2020/lib/tile/tile.component.mjs +0 -61
- package/esm2020/lib/tile-renderer.directive.mjs +0 -70
- package/esm2020/lib/tiles-viewer/tiles-viewer.component.mjs +0 -157
- package/esm2020/lib/tiles-viewer-container/tiles-viewer-container.component.mjs +0 -158
- package/esm2020/lib/tiles-viewer-group/tiles-viewer-group.component.mjs +0 -88
- package/esm2020/lib/tiles-viewer.service.mjs +0 -130
- package/esm2020/lib/tiles.service.mjs +0 -589
- package/fesm2015/barsa-tiles.mjs +0 -2977
- package/fesm2015/barsa-tiles.mjs.map +0 -1
- package/fesm2020/barsa-tiles.mjs +0 -2941
- package/fesm2020/barsa-tiles.mjs.map +0 -1
|
@@ -0,0 +1,589 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Subject, BehaviorSubject, of, from } from 'rxjs';
|
|
3
|
+
import { concatMap, distinctUntilChanged, filter, shareReplay, startWith, takeUntil, tap } from 'rxjs/operators';
|
|
4
|
+
import { BarsaApi } from 'barsa-novin-ray-core';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "barsa-novin-ray-core";
|
|
7
|
+
import * as i2 from "@fundamental-ngx/core";
|
|
8
|
+
export class TilesService {
|
|
9
|
+
constructor(_portalService, _rtlService, _bbbTranslatePipe) {
|
|
10
|
+
this._portalService = _portalService;
|
|
11
|
+
this._rtlService = _rtlService;
|
|
12
|
+
this._bbbTranslatePipe = _bbbTranslatePipe;
|
|
13
|
+
this.shellbarSource = new Subject();
|
|
14
|
+
this._OnDestroy$ = new Subject();
|
|
15
|
+
this._homeAppTileGroupsSource = new BehaviorSubject([]);
|
|
16
|
+
this.pinTilesSource = new Subject();
|
|
17
|
+
this._appTileGroupsSource = new BehaviorSubject(null);
|
|
18
|
+
this._edithomeSource = new BehaviorSubject(false);
|
|
19
|
+
this._componentSettings$ = new Subject();
|
|
20
|
+
BarsaApi.Bw.TilesService = this;
|
|
21
|
+
this.homeAppTileGroups$ = this._homeAppTileGroupsSource.asObservable();
|
|
22
|
+
this.pinTiles$ = this.pinTilesSource.asObservable().pipe(startWith(null));
|
|
23
|
+
this.shellbarSource = new Subject();
|
|
24
|
+
this.shellbar$ = this.shellbarSource.asObservable().pipe(shareReplay(1));
|
|
25
|
+
this.appTileGroups$ = this._appTileGroupsSource.pipe(shareReplay(1));
|
|
26
|
+
this.edit$ = this._edithomeSource.asObservable().pipe(takeUntil(this._OnDestroy$), distinctUntilChanged());
|
|
27
|
+
this.deviceSize$ = this._portalService.deviceSize$;
|
|
28
|
+
this._rtlService.rtl.next(BarsaApi.LoginFormData.IsRtl);
|
|
29
|
+
this.loadAllAppTileGroups();
|
|
30
|
+
this.appTileGroups$
|
|
31
|
+
.pipe(filter((moForReportModel) => moForReportModel !== null), tap((moForReportModel) => {
|
|
32
|
+
if (moForReportModel) {
|
|
33
|
+
this._allAppsLoaded(moForReportModel);
|
|
34
|
+
}
|
|
35
|
+
}))
|
|
36
|
+
.subscribe();
|
|
37
|
+
BarsaApi.Ul.ApplicationCtrlr.on('GlobalRefreshTile', this._onApplication_GlobalRefreshTile.bind(this));
|
|
38
|
+
}
|
|
39
|
+
get componentSettings$() {
|
|
40
|
+
return this._componentSettings$.asObservable();
|
|
41
|
+
}
|
|
42
|
+
get appTileGroups() {
|
|
43
|
+
return this._appTileGroupsSource.getValue();
|
|
44
|
+
}
|
|
45
|
+
ngOnDestroy() {
|
|
46
|
+
this._OnDestroy$.next();
|
|
47
|
+
}
|
|
48
|
+
_onApplication_GlobalRefreshTile(sender, appTilesTitle) {
|
|
49
|
+
const allApps = this._appTileGroupsSource.getValue();
|
|
50
|
+
const appTiles = [];
|
|
51
|
+
if (allApps) {
|
|
52
|
+
appTilesTitle.forEach((c) => {
|
|
53
|
+
const selectedTile = this.findAppTileWithKey(allApps, 'A_App_AppKey', c);
|
|
54
|
+
if (selectedTile) {
|
|
55
|
+
appTiles.push(selectedTile);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
this._updateAppTileFromNotification(allApps, appTiles);
|
|
59
|
+
this._appTileGroupsSource.next(allApps);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
_updateAppTileFromNotification(allApps, appTiles) {
|
|
63
|
+
if (!appTiles?.length) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
BarsaApi.Bw.RunBlMethodAsync({
|
|
67
|
+
Parameters: [appTiles.map((c) => (c.AppTile?.Id ? c.AppTile?.Id : c.Id))],
|
|
68
|
+
Method: 'RefreshAppTiles',
|
|
69
|
+
SuccessFn: (result) => {
|
|
70
|
+
result.MoDataList.forEach((c) => this.updateAppTile(allApps, c));
|
|
71
|
+
this._appTileGroupsSource.next({ ...allApps });
|
|
72
|
+
},
|
|
73
|
+
FailFn: () => { }
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
loadAppTileGroups(appTileGroup) {
|
|
77
|
+
if (!appTileGroup || appTileGroup.$TilesLoaded) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const allApps = this._appTileGroupsSource.getValue();
|
|
81
|
+
if (allApps) {
|
|
82
|
+
const selectedAppTilegroup = allApps?.MoDataList.find((c) => c.Id === appTileGroup.Id);
|
|
83
|
+
if (selectedAppTilegroup) {
|
|
84
|
+
this._loadAppTilesOfAppTileGroup(selectedAppTilegroup, allApps);
|
|
85
|
+
selectedAppTilegroup.$Children?.forEach((subGroup) => {
|
|
86
|
+
this._loadAppTilesOfAppTileGroup(subGroup, allApps);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
saveTilesStackContent(tilesStackContent) {
|
|
92
|
+
const userPortalSettings = this._portalService.userPortalSettings['UserPortalSettings'];
|
|
93
|
+
if (userPortalSettings == null) {
|
|
94
|
+
return Promise.resolve();
|
|
95
|
+
}
|
|
96
|
+
userPortalSettings.TilesStackContent = tilesStackContent;
|
|
97
|
+
userPortalSettings.$State = 'Modified';
|
|
98
|
+
return this._saveUserPortalSettings(userPortalSettings).then(() => this._portalService.setUserPortalSettings(userPortalSettings));
|
|
99
|
+
}
|
|
100
|
+
loadUserPortalSettings() {
|
|
101
|
+
return this._portalService.getData('UserPortalSetting').pipe(concatMap((data) => {
|
|
102
|
+
if (data) {
|
|
103
|
+
return of(data);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
return this.loadFromServerUserPortalSetting();
|
|
107
|
+
}
|
|
108
|
+
}));
|
|
109
|
+
}
|
|
110
|
+
refreshTile(appTile) {
|
|
111
|
+
return new Promise((resolve, reject) => {
|
|
112
|
+
BarsaApi.Bw.RunBlMethodAsync({
|
|
113
|
+
Parameters: [appTile.Id],
|
|
114
|
+
Method: 'RefreshTile',
|
|
115
|
+
SuccessFn: (newAppTile) => {
|
|
116
|
+
if (newAppTile.MoDataList?.length) {
|
|
117
|
+
resolve(newAppTile.MoDataList[0]);
|
|
118
|
+
}
|
|
119
|
+
reject(`refresh tile not found apptile width title: ${appTile.Title}`);
|
|
120
|
+
},
|
|
121
|
+
FailFn: () => {
|
|
122
|
+
reject(null);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
loadFromServerUserPortalSetting() {
|
|
128
|
+
return from(new Promise((resolve, reject) => {
|
|
129
|
+
BarsaApi.Bw.RunBlMethodAsync({
|
|
130
|
+
Parameters: [],
|
|
131
|
+
Method: 'GetUserPortalSettings',
|
|
132
|
+
SuccessFn: (userPortalSetting) => {
|
|
133
|
+
this._portalService.setData('UserPortalSetting', userPortalSetting);
|
|
134
|
+
resolve(userPortalSetting);
|
|
135
|
+
},
|
|
136
|
+
FailFn: () => {
|
|
137
|
+
reject(null);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}));
|
|
141
|
+
}
|
|
142
|
+
toggleAppGroupSettingVisible(appGroup) {
|
|
143
|
+
return from(new Promise((resolve, reject) => {
|
|
144
|
+
BarsaApi.Bw.RunBlMethodAsync({
|
|
145
|
+
Parameters: [appGroup.Id],
|
|
146
|
+
Method: 'ToggleAppTileGroupSettingVisible',
|
|
147
|
+
SuccessFn: (appGroupSetting) => {
|
|
148
|
+
this._updateAppTileGroupSettings(appGroup, appGroupSetting);
|
|
149
|
+
resolve(appGroupSetting);
|
|
150
|
+
},
|
|
151
|
+
FailFn: () => {
|
|
152
|
+
reject(null);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
})).pipe(tap((appGroupSetting) => {
|
|
156
|
+
this._updateAppGroupSetting(appGroup, appGroupSetting);
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
159
|
+
resetAppGroupSetting(appGroup) {
|
|
160
|
+
return from(new Promise((resolve, reject) => {
|
|
161
|
+
BarsaApi.Bw.RunBlMethodAsync({
|
|
162
|
+
Parameters: [appGroup.Id],
|
|
163
|
+
Method: 'ResetAppTileGroupSettingVisible',
|
|
164
|
+
SuccessFn: (appGroupSetting) => {
|
|
165
|
+
this._updateAppTileGroupSettings(appGroup, appGroupSetting);
|
|
166
|
+
resolve(appGroupSetting);
|
|
167
|
+
},
|
|
168
|
+
FailFn: () => {
|
|
169
|
+
reject(null);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
})).pipe(tap((appGroupSetting) => {
|
|
173
|
+
this._updateAppGroupSetting(appGroup, appGroupSetting);
|
|
174
|
+
}));
|
|
175
|
+
}
|
|
176
|
+
deleteAppGroup(appGroup) {
|
|
177
|
+
return from(new Promise((resolve, reject) => {
|
|
178
|
+
BarsaApi.Bw.RunBlMethodAsync({
|
|
179
|
+
Parameters: [appGroup.Id],
|
|
180
|
+
Method: 'DeleteAppGroup',
|
|
181
|
+
SuccessFn: () => {
|
|
182
|
+
resolve(appGroup.Id);
|
|
183
|
+
},
|
|
184
|
+
FailFn: () => {
|
|
185
|
+
reject(null);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
})).pipe(tap((appGroupId) => {
|
|
189
|
+
const allApps = this.appTileGroups;
|
|
190
|
+
if (allApps) {
|
|
191
|
+
allApps.MoDataList = allApps.MoDataList.filter((c) => c.Id !== appGroupId);
|
|
192
|
+
this._appTileGroupsSource.next(allApps);
|
|
193
|
+
}
|
|
194
|
+
}));
|
|
195
|
+
}
|
|
196
|
+
changeAppTileSetting(appTile) {
|
|
197
|
+
const allApps = this.appTileGroups;
|
|
198
|
+
const selectedGroup = this.findGroupWithAppTileId(allApps, appTile.Id);
|
|
199
|
+
if (selectedGroup === null) {
|
|
200
|
+
return of(null);
|
|
201
|
+
}
|
|
202
|
+
return from(new Promise((resolve, reject) => {
|
|
203
|
+
BarsaApi.Bw.RunBlMethodAsync({
|
|
204
|
+
Parameters: [selectedGroup.Id, appTile.Id, appTile.Title, appTile.Subtitle],
|
|
205
|
+
Method: 'ChangeAppTileSetting',
|
|
206
|
+
SuccessFn: () => {
|
|
207
|
+
this._nextAllAppTileGroups(allApps);
|
|
208
|
+
resolve(selectedGroup);
|
|
209
|
+
},
|
|
210
|
+
FailFn: () => {
|
|
211
|
+
reject(null);
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
})).pipe(tap((appGroupSetting) => this.updataAppTileSetting(selectedGroup, appGroupSetting)));
|
|
215
|
+
}
|
|
216
|
+
saveAppGroupOrders(appGroups) {
|
|
217
|
+
const groupOrders = appGroups.map((c) => c.Id);
|
|
218
|
+
return from(new Promise((resolve, reject) => {
|
|
219
|
+
BarsaApi.Bw.RunBlMethodAsync({
|
|
220
|
+
Parameters: [groupOrders],
|
|
221
|
+
Method: 'ChangeOrderAppTileGroups',
|
|
222
|
+
SuccessFn: () => {
|
|
223
|
+
resolve();
|
|
224
|
+
},
|
|
225
|
+
FailFn: () => {
|
|
226
|
+
reject(null);
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
})).pipe();
|
|
230
|
+
}
|
|
231
|
+
createAppGroup(title) {
|
|
232
|
+
return from(new Promise((resolve, reject) => {
|
|
233
|
+
BarsaApi.Bw.RunBlMethodAsync({
|
|
234
|
+
Parameters: [title],
|
|
235
|
+
Method: 'CreateAppTileGroup',
|
|
236
|
+
SuccessFn: (mo) => {
|
|
237
|
+
resolve(mo);
|
|
238
|
+
},
|
|
239
|
+
FailFn: () => {
|
|
240
|
+
reject(null);
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
})).pipe(tap((mo) => this.addAppGroup(mo)));
|
|
244
|
+
}
|
|
245
|
+
saveOrderAppTiles(appGroup, appTiles, isActionLink = false, appTileIdTransferedId = '0') {
|
|
246
|
+
BarsaApi.Bw.RunBlMethodAsync({
|
|
247
|
+
Parameters: [appGroup.Id, appTiles, isActionLink, appTileIdTransferedId],
|
|
248
|
+
Method: 'ChangeOrderAppTiles',
|
|
249
|
+
SuccessFn: () => { },
|
|
250
|
+
FailFn: () => { }
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
updateAppTile(allApps, appTile) {
|
|
254
|
+
const selectedAppTile = this.findAppTileWithKey(allApps, 'A_App_Component.Settings.Id', appTile.A_App_Component.Settings.Id);
|
|
255
|
+
if (selectedAppTile) {
|
|
256
|
+
BarsaApi.Common.Merger.FastMerge(selectedAppTile.A_App_Component.Settings, appTile.A_App_Component.Settings);
|
|
257
|
+
this._componentSettings$.next(selectedAppTile.A_App_Component.Settings);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
updataAppTileSetting(selectedGroup, appGroupSetting) {
|
|
261
|
+
const allApps = this.appTileGroups;
|
|
262
|
+
allApps?.MoDataList.forEach((appGroup) => {
|
|
263
|
+
if (appGroup.Id === selectedGroup.Id) {
|
|
264
|
+
appGroup.UserAppTileGroupSetting = appGroupSetting;
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
this._appTileGroupsSource.next(allApps);
|
|
268
|
+
}
|
|
269
|
+
addAppGroup(mo) {
|
|
270
|
+
const allApps = this.appTileGroups;
|
|
271
|
+
if (allApps) {
|
|
272
|
+
allApps.MoDataList.push(mo);
|
|
273
|
+
this._appTileGroupsSource.next(allApps);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
singlePinTileChanged(appTileId) {
|
|
277
|
+
const allApps = this.appTileGroups;
|
|
278
|
+
const group = this.findGroupWithAppTileId(allApps, appTileId);
|
|
279
|
+
if (group === null) {
|
|
280
|
+
return of(false);
|
|
281
|
+
}
|
|
282
|
+
return from(new Promise((resolve, reject) => {
|
|
283
|
+
BarsaApi.Bw.RunBlMethodAsync({
|
|
284
|
+
Parameters: [group.Id, appTileId],
|
|
285
|
+
Method: 'RemoveAppTileFromTileGroup',
|
|
286
|
+
SuccessFn: (setting) => {
|
|
287
|
+
this._updateAppTileGroupSettings(group, setting);
|
|
288
|
+
this._nextAllAppTileGroups(allApps);
|
|
289
|
+
resolve(true);
|
|
290
|
+
},
|
|
291
|
+
FailFn: () => {
|
|
292
|
+
reject(false);
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
}));
|
|
296
|
+
}
|
|
297
|
+
pinTileChanged(appTileGroupsPin, app, callback) {
|
|
298
|
+
const allApps = this.appTileGroups;
|
|
299
|
+
const visible = appTileGroupsPin.map((c) => c.visible);
|
|
300
|
+
const groupChanges = appTileGroupsPin.map((c) => new BarsaApi.Common.MetaObjectWeb({
|
|
301
|
+
Id: c.appTileGroup.Id,
|
|
302
|
+
TypeDefId: allApps?.TypeDefId
|
|
303
|
+
}));
|
|
304
|
+
BarsaApi.Bw.RunBlMethodAsync({
|
|
305
|
+
Parameters: [groupChanges, visible, app.Id],
|
|
306
|
+
Method: 'TilePinChanged',
|
|
307
|
+
SuccessFn: (settings) => {
|
|
308
|
+
this._tilePinChange(appTileGroupsPin, allApps);
|
|
309
|
+
callback(settings);
|
|
310
|
+
},
|
|
311
|
+
FailFn: () => {
|
|
312
|
+
// TODO show error
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
_tilePinChange(appTileGroupsPin, allApps) {
|
|
317
|
+
for (const appTileGroupPin of appTileGroupsPin) {
|
|
318
|
+
let selectedAppGroup;
|
|
319
|
+
const appGroupId = appTileGroupPin.appTileGroup.Id;
|
|
320
|
+
allApps?.MoDataList.forEach((c) => {
|
|
321
|
+
if (c.Id === appGroupId) {
|
|
322
|
+
selectedAppGroup = c;
|
|
323
|
+
}
|
|
324
|
+
else if (!selectedAppGroup) {
|
|
325
|
+
selectedAppGroup = c.$Children?.find((child) => child.Id === appGroupId);
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
if (selectedAppGroup && selectedAppGroup.$TilesLoaded) {
|
|
329
|
+
// let moDataList = selectedAppGroup.AppTiles.MoDataList;
|
|
330
|
+
// if (appTileGroups[i].visible)
|
|
331
|
+
// selectedAppGroup.AppTiles.MoDataList = [...moDataList, settings[i]];
|
|
332
|
+
// else
|
|
333
|
+
// selectedAppGroup.AppTiles.MoDataList = moDataList.filter(
|
|
334
|
+
// (c) => c.App.Id !== app.Id
|
|
335
|
+
// );
|
|
336
|
+
this._loadAppTilesOfAppTileGroup(selectedAppGroup, allApps);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
this._nextAllAppTileGroups(allApps);
|
|
340
|
+
}
|
|
341
|
+
loadShellbar() {
|
|
342
|
+
BarsaApi.Bw.RunBlMethodAsync({
|
|
343
|
+
Parameters: [BarsaApi.LoginFormData.PortalId],
|
|
344
|
+
Method: 'LoadShellbarByPortalId',
|
|
345
|
+
SuccessFn: (shellbar) => {
|
|
346
|
+
this.shellbarSource.next(shellbar);
|
|
347
|
+
},
|
|
348
|
+
FailFn: () => {
|
|
349
|
+
// TODO show error
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
// this._portalService
|
|
353
|
+
// .ReportExecutePromise('Shellbar')
|
|
354
|
+
// .then((moForReportModel) => this.shellbarSource.next(moForReportModel.MoDataList[0]));
|
|
355
|
+
}
|
|
356
|
+
loadAllAppTileGroups() {
|
|
357
|
+
this._portalService
|
|
358
|
+
.ReportExecute('AllAppTileGroups')
|
|
359
|
+
.subscribe((allApps) => this._nextAllAppTileGroups(allApps));
|
|
360
|
+
}
|
|
361
|
+
_setTileInfo(appTile) {
|
|
362
|
+
{
|
|
363
|
+
const title = BarsaApi.Common.Util.TryGetValue(appTile, 'Component.Settings.TileSetting.Title', null);
|
|
364
|
+
appTile.TileTitle = !appTile.Title ? title : appTile.Title;
|
|
365
|
+
const subtitle = BarsaApi.Common.Util.TryGetValue(appTile, 'Component.Settings.TileSetting.Subtitle', null);
|
|
366
|
+
appTile.Subtitle = !appTile.Subtitle ? subtitle : appTile.Subtitle;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
getTileGroups() {
|
|
370
|
+
return this._appTileGroupsSource.getValue();
|
|
371
|
+
}
|
|
372
|
+
setEditHome(edit) {
|
|
373
|
+
this._edithomeSource.next(edit);
|
|
374
|
+
}
|
|
375
|
+
_allAppsLoaded(moForReportModel) {
|
|
376
|
+
moForReportModel.MoDataList.forEach((c) => {
|
|
377
|
+
this._prepareNavigator(c);
|
|
378
|
+
});
|
|
379
|
+
this._setHomeAppTileGroups(moForReportModel.MoDataList);
|
|
380
|
+
}
|
|
381
|
+
_loadAppTilesOfAppTileGroup(selectedAppTilegroup, allApps) {
|
|
382
|
+
const callback = () => {
|
|
383
|
+
this._nextAllAppTileGroups(allApps);
|
|
384
|
+
};
|
|
385
|
+
if (!selectedAppTilegroup.UserAppTileGroupSetting) {
|
|
386
|
+
this._loadAppTilesByAppTileGroup(selectedAppTilegroup, callback);
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
this._loadAppTilesByAppTileGroupSetting(selectedAppTilegroup, callback);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
_loadAppTilesByAppTileGroup(appGroup, callback) {
|
|
393
|
+
BarsaApi.Bw.RunBlMethodAsync({
|
|
394
|
+
Parameters: [appGroup.Id],
|
|
395
|
+
Method: 'LoadAllAppTilesByAppTileGroup',
|
|
396
|
+
SuccessFn: (appTiles) => {
|
|
397
|
+
this._updateAppTilesOfAppTileGroup(appGroup, appTiles);
|
|
398
|
+
callback();
|
|
399
|
+
},
|
|
400
|
+
FailFn: () => {
|
|
401
|
+
// TODO show error
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
_updateAppTilesOfAppTileGroup(selectedAppTilegroup, appTiles) {
|
|
406
|
+
if (this.appTileGroups) {
|
|
407
|
+
selectedAppTilegroup = { ...selectedAppTilegroup, $TilesLoaded: true };
|
|
408
|
+
appTiles.MoDataList.forEach((element) => {
|
|
409
|
+
element.Component = element.A_App_Component ?? element.A_AppTile_App_Component;
|
|
410
|
+
element.DynamicCommand = element.A_App_DynamicCommand ?? element.A_AppTile_App_DynamicCommand;
|
|
411
|
+
element.Predefined = element.Predefined ?? element.A_AppTile_Predefined;
|
|
412
|
+
});
|
|
413
|
+
const apptileGroupIndex = this.appTileGroups?.MoDataList.findIndex((c) => c.Id === selectedAppTilegroup.Id || c.Id === selectedAppTilegroup.$ParentId);
|
|
414
|
+
selectedAppTilegroup.AppTiles = appTiles;
|
|
415
|
+
const tileGroup = this.appTileGroups.MoDataList[apptileGroupIndex];
|
|
416
|
+
if (selectedAppTilegroup.$ParentId) {
|
|
417
|
+
if (tileGroup.$Children) {
|
|
418
|
+
const idOfSubGroup = tileGroup.$Children.findIndex((c) => c.Id === selectedAppTilegroup.Id);
|
|
419
|
+
tileGroup.$Children[idOfSubGroup] = selectedAppTilegroup;
|
|
420
|
+
}
|
|
421
|
+
this.appTileGroups.MoDataList[apptileGroupIndex] = { ...tileGroup };
|
|
422
|
+
}
|
|
423
|
+
else {
|
|
424
|
+
this.appTileGroups.MoDataList[apptileGroupIndex] = selectedAppTilegroup;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
_loadAppTilesByAppTileGroupSetting(appTileGroup, callback) {
|
|
429
|
+
BarsaApi.Bw.RunBlMethodAsync({
|
|
430
|
+
Parameters: [appTileGroup.Id],
|
|
431
|
+
Method: 'LoadAllAppTilesByUserAppTileGroupSettings',
|
|
432
|
+
SuccessFn: (appTiles) => {
|
|
433
|
+
this._updateAppTilesOfAppTileGroup(appTileGroup, appTiles);
|
|
434
|
+
callback();
|
|
435
|
+
},
|
|
436
|
+
FailFn: () => {
|
|
437
|
+
// TODO show error
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
_nextAllAppTileGroups(newAllApps = null) {
|
|
442
|
+
const allApps = newAllApps ?? this._appTileGroupsSource.getValue();
|
|
443
|
+
this._appTileGroupsSource.next(allApps ? { ...allApps } : null);
|
|
444
|
+
}
|
|
445
|
+
_setHomeAppTileGroups(appGroups) {
|
|
446
|
+
let newAppGroups = [...appGroups];
|
|
447
|
+
newAppGroups = newAppGroups
|
|
448
|
+
.filter((c) => c.Visible)
|
|
449
|
+
.sort((a, b) => Number(a.navigatorOrderItem) - Number(b.navigatorOrderItem));
|
|
450
|
+
this._homeAppTileGroupsSource.next(newAppGroups);
|
|
451
|
+
}
|
|
452
|
+
_saveUserPortalSettings(userPortalSettings) {
|
|
453
|
+
return new Promise((resolve, reject) => {
|
|
454
|
+
BarsaApi.Bw.RunBlMethodAsync({
|
|
455
|
+
Parameters: [new BarsaApi.Common.MetaObjectWeb(userPortalSettings)],
|
|
456
|
+
Method: 'SaveUserPortalSettings',
|
|
457
|
+
SuccessFn: () => {
|
|
458
|
+
resolve();
|
|
459
|
+
},
|
|
460
|
+
FailFn: () => {
|
|
461
|
+
reject(null);
|
|
462
|
+
}
|
|
463
|
+
});
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
_updateAppGroupSetting(appGroup, appGroupSetting) {
|
|
467
|
+
const allApps = this.appTileGroups;
|
|
468
|
+
const selectedAppGroup = allApps?.MoDataList.find((c) => c.Id === appGroup.Id);
|
|
469
|
+
if (selectedAppGroup && allApps) {
|
|
470
|
+
selectedAppGroup.UserAppTileGroupSetting = appGroupSetting;
|
|
471
|
+
this._nextAllAppTileGroups(allApps);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
findAppTileWithKey(allApps, key, value) {
|
|
475
|
+
let selectedTile;
|
|
476
|
+
if (typeof value === 'string') {
|
|
477
|
+
value = BarsaApi.Common.Util.ReplaceArabicCharchter(value);
|
|
478
|
+
}
|
|
479
|
+
if (!allApps) {
|
|
480
|
+
return null;
|
|
481
|
+
}
|
|
482
|
+
allApps.MoDataList.forEach((appGroup) => {
|
|
483
|
+
if (selectedTile) {
|
|
484
|
+
return;
|
|
485
|
+
}
|
|
486
|
+
selectedTile = appGroup.navigatorTiles.find((c) => BarsaApi.Common.Util.TryGetValue(c, key, null) === value);
|
|
487
|
+
appGroup.$Children?.forEach((subGroup) => {
|
|
488
|
+
if (selectedTile) {
|
|
489
|
+
return;
|
|
490
|
+
}
|
|
491
|
+
selectedTile = subGroup.navigatorTiles.find((c) => BarsaApi.Common.Util.TryGetValue(c, key, null) === value);
|
|
492
|
+
});
|
|
493
|
+
});
|
|
494
|
+
return selectedTile;
|
|
495
|
+
}
|
|
496
|
+
findGroupWithAppTileId(allApps, appTileId) {
|
|
497
|
+
let selectedGroup;
|
|
498
|
+
if (!allApps) {
|
|
499
|
+
return null;
|
|
500
|
+
}
|
|
501
|
+
allApps.MoDataList.forEach((appGroup) => {
|
|
502
|
+
if (selectedGroup) {
|
|
503
|
+
return;
|
|
504
|
+
}
|
|
505
|
+
if (appGroup.navigatorTiles.some((appTile) => appTile.Id === appTileId)) {
|
|
506
|
+
selectedGroup = appGroup;
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
509
|
+
appGroup.$Children?.forEach((subGroup) => {
|
|
510
|
+
if (subGroup.navigatorTiles.some((appTile) => appTile.Id === appTileId)) {
|
|
511
|
+
selectedGroup = subGroup;
|
|
512
|
+
return;
|
|
513
|
+
}
|
|
514
|
+
});
|
|
515
|
+
});
|
|
516
|
+
return selectedGroup;
|
|
517
|
+
}
|
|
518
|
+
_findGroupWithAppGroupId(allApps, appGroupId) {
|
|
519
|
+
let selectedGroup;
|
|
520
|
+
if (!allApps) {
|
|
521
|
+
return null;
|
|
522
|
+
}
|
|
523
|
+
allApps.MoDataList.forEach((appGroup) => {
|
|
524
|
+
if (selectedGroup) {
|
|
525
|
+
return;
|
|
526
|
+
}
|
|
527
|
+
if (appGroup.Id === appGroupId) {
|
|
528
|
+
selectedGroup = appGroup;
|
|
529
|
+
return;
|
|
530
|
+
}
|
|
531
|
+
appGroup.$Children?.forEach((subGroup) => {
|
|
532
|
+
if (subGroup.Id === appGroupId) {
|
|
533
|
+
selectedGroup = subGroup;
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
536
|
+
});
|
|
537
|
+
});
|
|
538
|
+
return selectedGroup;
|
|
539
|
+
}
|
|
540
|
+
_updateAppTileGroupSettings(appTileGroup, setting) {
|
|
541
|
+
appTileGroup.UserAppTileGroupSetting = setting;
|
|
542
|
+
appTileGroup = JSON.parse(JSON.stringify(appTileGroup));
|
|
543
|
+
this._nextAllAppTileGroups();
|
|
544
|
+
return appTileGroup;
|
|
545
|
+
}
|
|
546
|
+
_prepareNavigator(appTileGroup) {
|
|
547
|
+
appTileGroup.$TileSettingChanged = false;
|
|
548
|
+
appTileGroup.$Disabledpin = false;
|
|
549
|
+
appTileGroup.navigatorTitle = BarsaApi.Common.Util.TryGetValue(appTileGroup, 'UserAppTileGroupSetting.Title', appTileGroup.Title);
|
|
550
|
+
appTileGroup.navigatorTitle = appTileGroup.navigatorTitle =
|
|
551
|
+
appTileGroup.navigatorTitle === '' ? appTileGroup.Title : appTileGroup.navigatorTitle;
|
|
552
|
+
appTileGroup.navigatorTitle = this._bbbTranslatePipe.transform(appTileGroup.navigatorTitle);
|
|
553
|
+
const orderItem = BarsaApi.Common.Util.TryGetValue(appTileGroup, 'UserAppTileGroupSetting.OrderItem', null);
|
|
554
|
+
if (orderItem !== null) {
|
|
555
|
+
appTileGroup.navigatorOrderItem = orderItem;
|
|
556
|
+
}
|
|
557
|
+
else {
|
|
558
|
+
appTileGroup.navigatorOrderItem = appTileGroup.OrderItem;
|
|
559
|
+
}
|
|
560
|
+
const visible = BarsaApi.Common.Util.TryGetValue(appTileGroup, 'UserAppTileGroupSetting.Visible', null);
|
|
561
|
+
if (visible !== null) {
|
|
562
|
+
appTileGroup.navigatorVisible = visible;
|
|
563
|
+
}
|
|
564
|
+
else {
|
|
565
|
+
appTileGroup.navigatorVisible = appTileGroup.Visible;
|
|
566
|
+
}
|
|
567
|
+
const appTiles = appTileGroup.AppTiles?.MoDataList ?? [];
|
|
568
|
+
appTileGroup.navigatorTiles = appTiles
|
|
569
|
+
.filter((c) => c.Visible && !c.IsActionLink)
|
|
570
|
+
.sort((a, b) => Number(a.OrderItem) - Number(b.OrderItem));
|
|
571
|
+
appTileGroup.navigatorActionLinks = appTiles
|
|
572
|
+
.filter((c) => c.Visible && c.IsActionLink)
|
|
573
|
+
.sort((a, b) => Number(a.OrderItemActionLink) - Number(b.OrderItemActionLink));
|
|
574
|
+
appTileGroup.navigatorTiles.forEach((appTile) => this._setTileInfo(appTile));
|
|
575
|
+
appTileGroup.navigatorActionLinks.forEach((appTile) => this._setTileInfo(appTile));
|
|
576
|
+
appTileGroup.$Children?.forEach((subAppTileGroup) => {
|
|
577
|
+
this._prepareNavigator(subAppTileGroup);
|
|
578
|
+
});
|
|
579
|
+
}
|
|
580
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilesService, deps: [{ token: i1.PortalService }, { token: i2.RtlService }, { token: i1.BbbTranslatePipe }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
581
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilesService, providedIn: 'root' }); }
|
|
582
|
+
}
|
|
583
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilesService, decorators: [{
|
|
584
|
+
type: Injectable,
|
|
585
|
+
args: [{
|
|
586
|
+
providedIn: 'root'
|
|
587
|
+
}]
|
|
588
|
+
}], ctorParameters: () => [{ type: i1.PortalService }, { type: i2.RtlService }, { type: i1.BbbTranslatePipe }] });
|
|
589
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXRpbGVzL3NyYy9saWIvdGlsZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHakgsT0FBTyxFQUFFLFFBQVEsRUFBMEUsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQU14SCxNQUFNLE9BQU8sWUFBWTtJQWVyQixZQUNZLGNBQTZCLEVBQzdCLFdBQXVCLEVBQ3ZCLGlCQUFtQztRQUZuQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBZC9DLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7UUFLNUMsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2xDLDZCQUF3QixHQUFHLElBQUksZUFBZSxDQUF3QixFQUFFLENBQUMsQ0FBQztRQUMxRSxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDNUMseUJBQW9CLEdBQUcsSUFBSSxlQUFlLENBQTBCLElBQUksQ0FBQyxDQUFDO1FBQzFFLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDdEQsd0JBQW1CLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7UUFNN0QsUUFBUSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsSUFBSSxD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LEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUM7YUFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1FBQ25GLFlBQVksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDN0UsWUFBWSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRW5GLFlBQVksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDaEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0FocEJRLFlBQVk7a0hBQVosWUFBWSxjQUZULE1BQU07OzJGQUVULFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIGZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY29uY2F0TWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBzaGFyZVJlcGxheSwgc3RhcnRXaXRoLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IFJ0bFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xyXG5pbXBvcnQgeyBCYXJzYUFwaSwgQmJiVHJhbnNsYXRlUGlwZSwgTWV0YW9iamVjdERhdGFNb2RlbCwgTW9Gb3JSZXBvcnRNb2RlbCwgUG9ydGFsU2VydmljZSB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuaW1wb3J0IHsgQXBwVGlsZUdyb3VwUGluLCBVc2VyUG9ydGFsU2V0dGluZ3MgfSBmcm9tICcuL21vZGVscyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRpbGVzU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgICBkZXZpY2VTaXplJDogT2JzZXJ2YWJsZTwncycgfCAnbScgfCAnbCcgfCAneGwnPjtcclxuICAgIGhvbWVBcHBUaWxlR3JvdXBzJDogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsW10+O1xyXG4gICAgcGluVGlsZXMkOiBPYnNlcnZhYmxlPFBpblRpbGVJbmZvIHwgbnVsbD47XHJcbiAgICBzaGVsbGJhclNvdXJjZSA9IG5ldyBTdWJqZWN0PE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XHJcbiAgICBzaGVsbGJhciQ6IE9ic2VydmFibGU8TWV0YW9iamVjdERhdGFNb2RlbD47XHJcbiAgICBhcHBUaWxlR3JvdXBzJDogT2JzZXJ2YWJsZTxNb0ZvclJlcG9ydE1vZGVsIHwgbnVsbD47XHJcbiAgICBlZGl0JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHJcbiAgICBwcml2YXRlIF9PbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX2hvbWVBcHBUaWxlR3JvdXBzU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZXRhb2JqZWN0RGF0YU1vZGVsW10+KFtdKTtcclxuICAgIHByaXZhdGUgcGluVGlsZXNTb3VyY2UgPSBuZXcgU3ViamVjdDxQaW5UaWxlSW5mbz4oKTtcclxuICAgIHByaXZhdGUgX2FwcFRpbGVHcm91cHNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1vRm9yUmVwb3J0TW9kZWwgfCBudWxsPihudWxsKTtcclxuICAgIHByaXZhdGUgX2VkaXRob21lU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcml2YXRlIF9jb21wb25lbnRTZXR0aW5ncyQgPSBuZXcgU3ViamVjdDxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBfcG9ydGFsU2VydmljZTogUG9ydGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2JiYlRyYW5zbGF0ZVBpcGU6IEJiYlRyYW5zbGF0ZVBpcGVcclxuICAgICkge1xyXG4gICAgICAgIEJhcnNhQXBpLkJ3LlRpbGVzU2VydmljZSA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5ob21lQXBwVGlsZUdyb3VwcyQgPSB0aGlzLl9ob21lQXBwVGlsZUdyb3Vwc1NvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICAgICAgICB0aGlzLnBpblRpbGVzJCA9IHRoaXMucGluVGlsZXNTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZShzdGFydFdpdGgobnVsbCkpO1xyXG4gICAgICAgIHRoaXMuc2hlbGxiYXJTb3VyY2UgPSBuZXcgU3ViamVjdDxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgICAgIHRoaXMuc2hlbGxiYXIkID0gdGhpcy5zaGVsbGJhclNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcclxuICAgICAgICB0aGlzLmFwcFRpbGVHcm91cHMkID0gdGhpcy5fYXBwVGlsZUdyb3Vwc1NvdXJjZS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcclxuXHJcbiAgICAgICAgdGhpcy5lZGl0JCA9IHRoaXMuX2VkaXRob21lU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX09uRGVzdHJveSQpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcclxuICAgICAgICB0aGlzLmRldmljZVNpemUkID0gdGhpcy5fcG9ydGFsU2VydmljZS5kZXZpY2VTaXplJDtcclxuICAgICAgICB0aGlzLl9ydGxTZXJ2aWNlLnJ0bC5uZXh0KEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuSXNSdGwpO1xyXG4gICAgICAgIHRoaXMubG9hZEFsbEFwcFRpbGVHcm91cHMoKTtcclxuICAgICAgICB0aGlzLmFwcFRpbGVHcm91cHMkXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyKChtb0ZvclJlcG9ydE1vZGVsKSA9PiBtb0ZvclJlcG9ydE1vZGVsICE9PSBudWxsKSxcclxuICAgICAgICAgICAgICAgIHRhcCgobW9Gb3JSZXBvcnRNb2RlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb0ZvclJlcG9ydE1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FsbEFwcHNMb2FkZWQobW9Gb3JSZXBvcnRNb2RlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgQmFyc2FBcGkuVWwuQXBwbGljYXRpb25DdHJsci5vbignR2xvYmFsUmVmcmVzaFRpbGUnLCB0aGlzLl9vbkFwcGxpY2F0aW9uX0dsb2JhbFJlZnJlc2hUaWxlLmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNvbXBvbmVudFNldHRpbmdzJCgpOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWw+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50U2V0dGluZ3MkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGFwcFRpbGVHcm91cHMoKTogTW9Gb3JSZXBvcnRNb2RlbCB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBUaWxlR3JvdXBzU291cmNlLmdldFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9PbkRlc3Ryb3kkLm5leHQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfb25BcHBsaWNhdGlvbl9HbG9iYWxSZWZyZXNoVGlsZShzZW5kZXIsIGFwcFRpbGVzVGl0bGU6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgYWxsQXBwcyA9IHRoaXMuX2FwcFRpbGVHcm91cHNTb3VyY2UuZ2V0VmFsdWUoKTtcclxuICAgICAgICBjb25zdCBhcHBUaWxlczogTWV0YW9iamVjdERhdGFNb2RlbFtdID0gW107XHJcbiAgICAgICAgaWYgKGFsbEFwcHMpIHtcclxuICAgICAgICAgICAgYXBwVGlsZXNUaXRsZS5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFRpbGUgPSB0aGlzLmZpbmRBcHBUaWxlV2l0aEtleShhbGxBcHBzLCAnQV9BcHBfQXBwS2V5JywgYyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRUaWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBwVGlsZXMucHVzaChzZWxlY3RlZFRpbGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQXBwVGlsZUZyb21Ob3RpZmljYXRpb24oYWxsQXBwcywgYXBwVGlsZXMpO1xyXG4gICAgICAgICAgICB0aGlzLl9hcHBUaWxlR3JvdXBzU291cmNlLm5leHQoYWxsQXBwcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdXBkYXRlQXBwVGlsZUZyb21Ob3RpZmljYXRpb24oYWxsQXBwczogTW9Gb3JSZXBvcnRNb2RlbCwgYXBwVGlsZXM6IE1ldGFvYmplY3REYXRhTW9kZWxbXSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghYXBwVGlsZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kQXN5bmMoe1xyXG4gICAgICAgICAgICBQYXJhbWV0ZXJzOiBbYXBwVGlsZXMubWFwKChjKSA9PiAoYy5BcHBUaWxlPy5JZCA/IGMuQXBwVGlsZT8uSWQgOiBjLklkKSldLFxyXG4gICAgICAgICAgICBNZXRob2Q6ICdSZWZyZXNoQXBwVGlsZXMnLFxyXG4gICAgICAgICAgICBTdWNjZXNzRm46IChyZXN1bHQ6IE1vRm9yUmVwb3J0TW9kZWwpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5Nb0RhdGFMaXN0LmZvckVhY2goKGMpID0+IHRoaXMudXBkYXRlQXBwVGlsZShhbGxBcHBzLCBjKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBUaWxlR3JvdXBzU291cmNlLm5leHQoeyAuLi5hbGxBcHBzIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBGYWlsRm46ICgpID0+IHt9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBsb2FkQXBwVGlsZUdyb3VwcyhhcHBUaWxlR3JvdXA6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWFwcFRpbGVHcm91cCB8fCBhcHBUaWxlR3JvdXAuJFRpbGVzTG9hZGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYWxsQXBwcyA9IHRoaXMuX2FwcFRpbGVHcm91cHNTb3VyY2UuZ2V0VmFsdWUoKTtcclxuICAgICAgICBpZiAoYWxsQXBwcykge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEFwcFRpbGVncm91cCA9IGFsbEFwcHM/Lk1vRGF0YUxpc3QuZmluZCgoYykgPT4gYy5JZCA9PT0gYXBwVGlsZUdyb3VwLklkKTtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkQXBwVGlsZWdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkQXBwVGlsZXNPZkFwcFRpbGVHcm91cChzZWxlY3RlZEFwcFRpbGVncm91cCwgYWxsQXBwcyk7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEFwcFRpbGVncm91cC4kQ2hpbGRyZW4/LmZvckVhY2goKHN1Ykdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZEFwcFRpbGVzT2ZBcHBUaWxlR3JvdXAoc3ViR3JvdXAsIGFsbEFwcHMpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzYXZlVGlsZXNTdGFja0NvbnRlbnQodGlsZXNTdGFja0NvbnRlbnQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCB1c2VyUG9ydGFsU2V0dGluZ3MgPSB0aGlzLl9wb3J0YWxTZXJ2aWNlLnVzZXJQb3J0YWxTZXR0aW5nc1snVXNlclBvcnRhbFNldHRpbmdzJ107XHJcbiAgICAgICAgaWYgKHVzZXJQb3J0YWxTZXR0aW5ncyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdXNlclBvcnRhbFNldHRpbmdzLlRpbGVzU3RhY2tDb250ZW50ID0gdGlsZXNTdGFja0NvbnRlbnQ7XHJcbiAgICAgICAgdXNlclBvcnRhbFNldHRpbmdzLiRTdGF0ZSA9ICdNb2RpZmllZCc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NhdmVVc2VyUG9ydGFsU2V0dGluZ3ModXNlclBvcnRhbFNldHRpbmdzKS50aGVuKCgpID0+XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcnRhbFNlcnZpY2Uuc2V0VXNlclBvcnRhbFNldHRpbmdzKHVzZXJQb3J0YWxTZXR0aW5ncylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRVc2VyUG9ydGFsU2V0dGluZ3MoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9ydGFsU2VydmljZS5nZXREYXRhKCdVc2VyUG9ydGFsU2V0dGluZycpLnBpcGUoXHJcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRGcm9tU2VydmVyVXNlclBvcnRhbFNldHRpbmcoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcmVmcmVzaFRpbGUoYXBwVGlsZTogTWV0YW9iamVjdERhdGFNb2RlbCk6IFByb21pc2U8TWV0YW9iamVjdERhdGFNb2RlbD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxNZXRhb2JqZWN0RGF0YU1vZGVsPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kQXN5bmMoe1xyXG4gICAgICAgICAgICAgICAgUGFyYW1ldGVyczogW2FwcFRpbGUuSWRdLFxyXG4gICAgICAgICAgICAgICAgTWV0aG9kOiAnUmVmcmVzaFRpbGUnLFxyXG4gICAgICAgICAgICAgICAgU3VjY2Vzc0ZuOiAobmV3QXBwVGlsZTogTW9Gb3JSZXBvcnRNb2RlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdBcHBUaWxlLk1vRGF0YUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ld0FwcFRpbGUuTW9EYXRhTGlzdFswXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChgcmVmcmVzaCB0aWxlIG5vdCBmb3VuZCBhcHB0aWxlIHdpZHRoIHRpdGxlOiAke2FwcFRpbGUuVGl0bGV9YCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgRmFpbEZuOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGxvYWRGcm9tU2VydmVyVXNlclBvcnRhbFNldHRpbmcoKTogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsPiB7XHJcbiAgICAgICAgcmV0dXJuIGZyb20oXHJcbiAgICAgICAgICAgIG5ldyBQcm9taXNlPFVzZXJQb3J0YWxTZXR0aW5ncz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XHJcbiAgICAgICAgICAgICAgICAgICAgUGFyYW1ldGVyczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgTWV0aG9kOiAnR2V0VXNlclBvcnRhbFNldHRpbmdzJyxcclxuICAgICAgICAgICAgICAgICAgICBTdWNjZXNzRm46ICh1c2VyUG9ydGFsU2V0dGluZzogTWV0YW9iamVjdERhdGFNb2RlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3J0YWxTZXJ2aWNlLnNldERhdGEoJ1VzZXJQb3J0YWxTZXR0aW5nJywgdXNlclBvcnRhbFNldHRpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHVzZXJQb3J0YWxTZXR0aW5nKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIEZhaWxGbjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHRvZ2dsZUFwcEdyb3VwU2V0dGluZ1Zpc2libGUoYXBwR3JvdXA6IE1ldGFvYmplY3REYXRhTW9kZWwpOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWw+IHtcclxuICAgICAgICByZXR1cm4gZnJvbShcclxuICAgICAgICAgICAgbmV3IFByb21pc2U8TWV0YW9iamVjdERhdGFNb2RlbD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XHJcbiAgICAgICAgICAgICAgICAgICAgUGFyYW1ldGVyczogW2FwcEdyb3VwLklkXSxcclxuICAgICAgICAgICAgICAgICAgICBNZXRob2Q6ICdUb2dnbGVBcHBUaWxlR3JvdXBTZXR0aW5nVmlzaWJsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgU3VjY2Vzc0ZuOiAoYXBwR3JvdXBTZXR0aW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUFwcFRpbGVHcm91cFNldHRpbmdzKGFwcEdyb3VwLCBhcHBHcm91cFNldHRpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGFwcEdyb3VwU2V0dGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBGYWlsRm46ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICkucGlwZShcclxuICAgICAgICAgICAgdGFwKChhcHBHcm91cFNldHRpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUFwcEdyb3VwU2V0dGluZyhhcHBHcm91cCwgYXBwR3JvdXBTZXR0aW5nKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcmVzZXRBcHBHcm91cFNldHRpbmcoYXBwR3JvdXA6IE1ldGFvYmplY3REYXRhTW9kZWwpOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWw+IHtcclxuICAgICAgICByZXR1cm4gZnJvbShcclxuICAgICAgICAgICAgbmV3IFByb21pc2U8TWV0YW9iamVjdERhdGFNb2RlbD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XHJcbiAgICAgICAgICAgICAgICAgICAgUGFyYW1ldGVyczogW2FwcEdyb3VwLklkXSxcclxuICAgICAgICAgICAgICAgICAgICBNZXRob2Q6ICdSZXNldEFwcFRpbGVHcm91cFNldHRpbmdWaXNpYmxlJyxcclxuICAgICAgICAgICAgICAgICAgICBTdWNjZXNzRm46IChhcHBHcm91cFNldHRpbmc6IE1ldGFvYmplY3REYXRhTW9kZWwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlQXBwVGlsZUdyb3VwU2V0dGluZ3MoYXBwR3JvdXAsIGFwcEdyb3VwU2V0dGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYXBwR3JvdXBTZXR0aW5nKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIEZhaWxGbjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoKGFwcEdyb3VwU2V0dGluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlQXBwR3JvdXBTZXR0aW5nKGFwcEdyb3VwLCBhcHBHcm91cFNldHRpbmcpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlQXBwR3JvdXAoYXBwR3JvdXA6IE1ldGFvYmplY3REYXRhTW9kZWwpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBmcm9tKFxyXG4gICAgICAgICAgICBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kQXN5bmMoe1xyXG4gICAgICAgICAgICAgICAgICAgIFBhcmFtZXRlcnM6IFthcHBHcm91cC5JZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgTWV0aG9kOiAnRGVsZXRlQXBwR3JvdXAnLFxyXG4gICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3NGbjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGFwcEdyb3VwLklkKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIEZhaWxGbjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoKGFwcEdyb3VwSWQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFsbEFwcHMgPSB0aGlzLmFwcFRpbGVHcm91cHM7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWxsQXBwcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGFsbEFwcHMuTW9EYXRhTGlzdCA9IGFsbEFwcHMuTW9EYXRhTGlzdC5maWx0ZXIoKGMpID0+IGMuSWQgIT09IGFwcEdyb3VwSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcFRpbGVHcm91cHNTb3VyY2UubmV4dChhbGxBcHBzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgY2hhbmdlQXBwVGlsZVNldHRpbmcoYXBwVGlsZTogTWV0YW9iamVjdERhdGFNb2RlbCk6IE9ic2VydmFibGU8TWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGw+IHtcclxuICAgICAgICBjb25zdCBhbGxBcHBzID0gdGhpcy5hcHBUaWxlR3JvdXBzO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkR3JvdXAgPSB0aGlzLmZpbmRHcm91cFdpdGhBcHBUaWxlSWQoYWxsQXBwcywgYXBwVGlsZS5JZCk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkR3JvdXAgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnJvbShcclxuICAgICAgICAgICAgbmV3IFByb21pc2U8TWV0YW9iamVjdERhdGFNb2RlbD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XHJcbiAgICAgICAgICAgICAgICAgICAgUGFyYW1ldGVyczogW3NlbGVjdGVkR3JvdXAuSWQsIGFwcFRpbGUuSWQsIGFwcFRpbGUuVGl0bGUsIGFwcFRpbGUuU3VidGl0bGVdLFxyXG4gICAgICAgICAgICAgICAgICAgIE1ldGhvZDogJ0NoYW5nZUFwcFRpbGVTZXR0aW5nJyxcclxuICAgICAgICAgICAgICAgICAgICBTdWNjZXNzRm46ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmV4dEFsbEFwcFRpbGVHcm91cHMoYWxsQXBwcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc2VsZWN0ZWRHcm91cCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBGYWlsRm46ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICkucGlwZSh0YXAoKGFwcEdyb3VwU2V0dGluZykgPT4gdGhpcy51cGRhdGFBcHBUaWxlU2V0dGluZyhzZWxlY3RlZEdyb3VwLCBhcHBHcm91cFNldHRpbmcpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUFwcEdyb3VwT3JkZXJzKGFwcEdyb3VwczogTWV0YW9iamVjdERhdGFNb2RlbFtdKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBPcmRlcnMgPSBhcHBHcm91cHMubWFwKChjKSA9PiBjLklkKTtcclxuICAgICAgICByZXR1cm4gZnJvbShcclxuICAgICAgICAgICAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XHJcbiAgICAgICAgICAgICAgICAgICAgUGFyYW1ldGVyczogW2dyb3VwT3JkZXJzXSxcclxuICAgICAgICAgICAgICAgICAgICBNZXRob2Q6ICdDaGFuZ2VPcmRlckFwcFRpbGVHcm91cHMnLFxyXG4gICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3NGbjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBGYWlsRm46ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICkucGlwZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUFwcEdyb3VwKHRpdGxlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWw+IHtcclxuICAgICAgICByZXR1cm4gZnJvbShcclxuICAgICAgICAgICAgbmV3IFByb21pc2U8TWV0YW9iamVjdERhdGFNb2RlbD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XHJcbiAgICAgICAgICAgICAgICAgICAgUGFyYW1ldGVyczogW3RpdGxlXSxcclxuICAgICAgICAgICAgICAgICAgICBNZXRob2Q6ICdDcmVhdGVBcHBUaWxlR3JvdXAnLFxyXG4gICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3NGbjogKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobW8pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgRmFpbEZuOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApLnBpcGUodGFwKChtbykgPT4gdGhpcy5hZGRBcHBHcm91cChtbykpKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlT3JkZXJBcHBUaWxlcyhcclxuICAgICAgICBhcHBHcm91cDogTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgICAgICBhcHBUaWxlczogbnVtYmVyW10sXHJcbiAgICAgICAgaXNBY3Rpb25MaW5rID0gZmFsc2UsXHJcbiAgICAgICAgYXBwVGlsZUlkVHJhbnNmZXJlZElkOiBzdHJpbmcgPSAnMCdcclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kQXN5bmMoe1xyXG4gICAgICAgICAgICBQYXJhbWV0ZXJzOiBbYXBwR3JvdXAuSWQsIGFwcFRpbGVzLCBpc0FjdGlvbkxpbmssIGFwcFRpbGVJZFRyYW5zZmVyZWRJZF0sXHJcbiAgICAgICAgICAgIE1ldGhvZDogJ0NoYW5nZU9yZGVyQXBwVGlsZXMnLFxyXG4gICAgICAgICAgICBTdWNjZXNzRm46ICgpID0+IHt9LFxyXG4gICAgICAgICAgICBGYWlsRm46ICgpID0+IHt9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQXBwVGlsZShhbGxBcHBzOiBNb0ZvclJlcG9ydE1vZGVsLCBhcHBUaWxlOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRBcHBUaWxlID0gdGhpcy5maW5kQXBwVGlsZVdpdGhLZXkoXHJcbiAgICAgICAgICAgIGFsbEFwcHMsXHJcbiAgICAgICAgICAgICdBX0FwcF9Db21wb25lbnQuU2V0dGluZ3MuSWQnLFxyXG4gICAgICAgICAgICBhcHBUaWxlLkFfQXBwX0NvbXBvbmVudC5TZXR0aW5ncy5JZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkQXBwVGlsZSkge1xyXG4gICAgICAgICAgICBCYXJzYUFwaS5Db21tb24uTWVyZ2VyLkZhc3RNZXJnZShcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQXBwVGlsZS5BX0FwcF9Db21wb25lbnQuU2V0dGluZ3MsXHJcbiAgICAgICAgICAgICAgICBhcHBUaWxlLkFfQXBwX0NvbXBvbmVudC5TZXR0aW5nc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRTZXR0aW5ncyQubmV4dChzZWxlY3RlZEFwcFRpbGUuQV9BcHBfQ29tcG9uZW50LlNldHRpbmdzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB1cGRhdGFBcHBUaWxlU2V0dGluZyhzZWxlY3RlZEdyb3VwOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBhcHBHcm91cFNldHRpbmc6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBhbGxBcHBzID0gdGhpcy5hcHBUaWxlR3JvdXBzO1xyXG4gICAgICAgIGFsbEFwcHM/Lk1vRGF0YUxpc3QuZm9yRWFjaCgoYXBwR3JvdXApID0+IHtcclxuICAgICAgICAgICAgaWYgKGFwcEdyb3VwLklkID09PSBzZWxlY3RlZEdyb3VwLklkKSB7XHJcbiAgICAgICAgICAgICAgICBhcHBHcm91cC5Vc2VyQXBwVGlsZUdyb3VwU2V0dGluZyA9IGFwcEdyb3VwU2V0dGluZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2FwcFRpbGVHcm91cHNTb3VyY2UubmV4dChhbGxBcHBzKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRBcHBHcm91cChtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGFsbEFwcHMgPSB0aGlzLmFwcFRpbGVHcm91cHM7XHJcbiAgICAgICAgaWYgKGFsbEFwcHMpIHtcclxuICAgICAgICAgICAgYWxsQXBwcy5Nb0RhdGFMaXN0LnB1c2gobW8pO1xyXG4gICAgICAgICAgICB0aGlzLl9hcHBUaWxlR3JvdXBzU291cmNlLm5leHQoYWxsQXBwcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNpbmdsZVBpblRpbGVDaGFuZ2VkKGFwcFRpbGVJZCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGNvbnN0IGFsbEFwcHMgPSB0aGlzLmFwcFRpbGVHcm91cHM7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmZpbmRHcm91cFdpdGhBcHBUaWxlSWQoYWxsQXBwcywgYXBwVGlsZUlkKTtcclxuICAgICAgICBpZiAoZ3JvdXAgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZyb20oXHJcbiAgICAgICAgICAgIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kQXN5bmMoe1xyXG4gICAgICAgICAgICAgICAgICAgIFBhcmFtZXRlcnM6IFtncm91cC5JZCwgYXBwVGlsZUlkXSxcclxuICAgICAgICAgICAgICAgICAgICBNZXRob2Q6ICdSZW1vdmVBcHBUaWxlRnJvbVRpbGVHcm91cCcsXHJcbiAgICAgICAgICAgICAgICAgICAgU3VjY2Vzc0ZuOiAoc2V0dGluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVBcHBUaWxlR3JvdXBTZXR0aW5ncyhncm91cCwgc2V0dGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25leHRBbGxBcHBUaWxlR3JvdXBzKGFsbEFwcHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgRmFpbEZuOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHBpblRpbGVDaGFuZ2VkKGFwcFRpbGVHcm91cHNQaW46IEFwcFRpbGVHcm91cFBpbltdLCBhcHA6IE1ldGFvYmplY3REYXRhTW9kZWwsIGNhbGxiYWNrKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgYWxsQXBwcyA9IHRoaXMuYXBwVGlsZUdyb3VwcztcclxuICAgICAgICBjb25zdCB2aXNpYmxlID0gYXBwVGlsZUdyb3Vwc1Bpbi5tYXAoKGMpID0+IGMudmlzaWJsZSk7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBDaGFuZ2VzID0gYXBwVGlsZUdyb3Vwc1Bpbi5tYXAoXHJcbiAgICAgICAgICAgIChjKSA9PlxyXG4gICAgICAgICAgICAgICAgbmV3IEJhcnNhQXBpLkNvbW1vbi5NZXRhT2JqZWN0V2ViKHtcclxuICAgICAgICAgICAgICAgICAgICBJZDogYy5hcHBUaWxlR3JvdXAuSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgVHlwZURlZklkOiBhbGxBcHBzPy5UeXBlRGVmSWRcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XHJcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IFtncm91cENoYW5nZXMsIHZpc2libGUsIGFwcC5JZF0sXHJcbiAgICAgICAgICAgIE1ldGhvZDogJ1RpbGVQaW5DaGFuZ2VkJyxcclxuICAgICAgICAgICAgU3VjY2Vzc0ZuOiAoc2V0dGluZ3MpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RpbGVQaW5DaGFuZ2UoYXBwVGlsZUdyb3Vwc1BpbiwgYWxsQXBwcyk7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEZhaWxGbjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBzaG93IGVycm9yXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF90aWxlUGluQ2hhbmdlKGFwcFRpbGVHcm91cHNQaW4sIGFsbEFwcHMpOiB2b2lkIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGFwcFRpbGVHcm91cFBpbiBvZiBhcHBUaWxlR3JvdXBzUGluKSB7XHJcbiAgICAgICAgICAgIGxldCBzZWxlY3RlZEFwcEdyb3VwO1xyXG4gICAgICAgICAgICBjb25zdCBhcHBHcm91cElkID0gYXBwVGlsZUdyb3VwUGluLmFwcFRpbGVHcm91cC5JZDtcclxuICAgICAgICAgICAgYWxsQXBwcz8uTW9EYXRhTGlzdC5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYy5JZCA9PT0gYXBwR3JvdXBJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQXBwR3JvdXAgPSBjO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc2VsZWN0ZWRBcHBHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQXBwR3JvdXAgPSBjLiRDaGlsZHJlbj8uZmluZCgoY2hpbGQpID0+IGNoaWxkLklkID09PSBhcHBHcm91cElkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEFwcEdyb3VwICYmIHNlbGVjdGVkQXBwR3JvdXAuJFRpbGVzTG9hZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsZXQgbW9EYXRhTGlzdCA9IHNlbGVjdGVkQXBwR3JvdXAuQXBwVGlsZXMuTW9EYXRhTGlzdDtcclxuICAgICAgICAgICAgICAgIC8vIGlmIChhcHBUaWxlR3JvdXBzW2ldLnZpc2libGUpXHJcbiAgICAgICAgICAgICAgICAvLyAgIHNlbGVjdGVkQXBwR3JvdXAuQXBwVGlsZXMuTW9EYXRhTGlzdCA9IFsuLi5tb0RhdGFMaXN0LCBzZXR0aW5nc1tpXV07XHJcbiAgICAgICAgICAgICAgICAvLyBlbHNlXHJcbiAgICAgICAgICAgICAgICAvLyAgIHNlbGVjdGVkQXBwR3JvdXAuQXBwVGlsZXMuTW9EYXRhTGlzdCA9IG1vRGF0YUxpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIChjKSA9PiBjLkFwcC5JZCAhPT0gYXBwLklkXHJcbiAgICAgICAgICAgICAgICAvLyAgICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkQXBwVGlsZXNPZkFwcFRpbGVHcm91cChzZWxlY3RlZEFwcEdyb3VwLCBhbGxBcHBzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9uZXh0QWxsQXBwVGlsZUdyb3VwcyhhbGxBcHBzKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkU2hlbGxiYXIoKTogdm9pZCB7XHJcbiAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XHJcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IFtCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLlBvcnRhbElkXSxcclxuICAgICAgICAgICAgTWV0aG9kOiAnTG9hZFNoZWxsYmFyQnlQb3J0YWxJZCcsXHJcbiAgICAgICAgICAgIFN1Y2Nlc3NGbjogKHNoZWxsYmFyOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoZWxsYmFyU291cmNlLm5leHQoc2hlbGxiYXIpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBGYWlsRm46ICgpOiB2b2lkID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gc2hvdyBlcnJvclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIHRoaXMuX3BvcnRhbFNlcnZpY2VcclxuICAgICAgICAvLyAgICAgLlJlcG9ydEV4ZWN1dGVQcm9taXNlKCdTaGVsbGJhcicpXHJcbiAgICAgICAgLy8gICAgIC50aGVuKChtb0ZvclJlcG9ydE1vZGVsKSA9PiB0aGlzLnNoZWxsYmFyU291cmNlLm5leHQobW9Gb3JSZXBvcnRNb2RlbC5Nb0RhdGFMaXN0WzBdKSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZEFsbEFwcFRpbGVHcm91cHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fcG9ydGFsU2VydmljZVxyXG4gICAgICAgICAgICAuUmVwb3J0RXhlY3V0ZSgnQWxsQXBwVGlsZUdyb3VwcycpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGFsbEFwcHMpID0+IHRoaXMuX25leHRBbGxBcHBUaWxlR3JvdXBzKGFsbEFwcHMpKTtcclxuICAgIH1cclxuICAgIF9zZXRUaWxlSW5mbyhhcHBUaWxlKTogdm9pZCB7XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zdCB0aXRsZSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGFwcFRpbGUsICdDb21wb25lbnQuU2V0dGluZ3MuVGlsZVNldHRpbmcuVGl0bGUnLCBudWxsKTtcclxuICAgICAgICAgICAgYXBwVGlsZS5UaWxlVGl0bGUgPSAhYXBwVGlsZS5UaXRsZSA/IHRpdGxlIDogYXBwVGlsZS5UaXRsZTtcclxuICAgICAgICAgICAgY29uc3Qgc3VidGl0bGUgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShhcHBUaWxlLCAnQ29tcG9uZW50LlNldHRpbmdzLlRpbGVTZXR0aW5nLlN1YnRpdGxlJywgbnVsbCk7XHJcbiAgICAgICAgICAgIGFwcFRpbGUuU3VidGl0bGUgPSAhYXBwVGlsZS5TdWJ0aXRsZSA/IHN1YnRpdGxlIDogYXBwVGlsZS5TdWJ0aXRsZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGlsZUdyb3VwcygpOiBNb0ZvclJlcG9ydE1vZGVsIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcFRpbGVHcm91cHNTb3VyY2UuZ2V0VmFsdWUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRFZGl0SG9tZShlZGl0OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZWRpdGhvbWVTb3VyY2UubmV4dChlZGl0KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2FsbEFwcHNMb2FkZWQobW9Gb3JSZXBvcnRNb2RlbDogTW9Gb3JSZXBvcnRNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIG1vRm9yUmVwb3J0TW9kZWwuTW9EYXRhTGlzdC5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVOYXZpZ2F0b3IoYyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fc2V0SG9tZUFwcFRpbGVHcm91cHMobW9Gb3JSZXBvcnRNb2RlbC5Nb0RhdGFMaXN0KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2xvYWRBcHBUaWxlc09mQXBwVGlsZUdyb3VwKHNlbGVjdGVkQXBwVGlsZWdyb3VwOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBhbGxBcHBzOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fbmV4dEFsbEFwcFRpbGVHcm91cHMoYWxsQXBwcyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoIXNlbGVjdGVkQXBwVGlsZWdyb3VwLlVzZXJBcHBUaWxlR3JvdXBTZXR0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvYWRBcHBUaWxlc0J5QXBwVGlsZUdyb3VwKHNlbGVjdGVkQXBwVGlsZWdyb3VwLCBjYWxsYmFjayk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9hZEFwcFRpbGVzQnlBcHBUaWxlR3JvdXBTZXR0aW5nKHNlbGVjdGVkQXBwVGlsZWdyb3VwLCBjYWxsYmFjayk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfbG9hZEFwcFRpbGVzQnlBcHBUaWxlR3JvdXAoYXBwR3JvdXA6IE1ldGFvYmplY3REYXRhTW9kZWwsIGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XHJcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IFthcHBHcm91cC5JZF0sXHJcbiAgICAgICAgICAgIE1ldGhvZDogJ0xvYWRBbGxBcHBUaWxlc0J5QXBwVGlsZUdyb3VwJyxcclxuICAgICAgICAgICAgU3VjY2Vzc0ZuOiAoYXBwVGlsZXM6IE1vRm9yUmVwb3J0TW9kZWwpOiB2b2lkID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUFwcFRpbGVzT2ZBcHBUaWxlR3JvdXAoYXBwR3JvdXAsIGFwcFRpbGVzKTtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEZhaWxGbjogKCk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBzaG93IGVycm9yXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3VwZGF0ZUFwcFRpbGVzT2ZBcHBUaWxlR3JvdXAoc2VsZWN0ZWRBcHBUaWxlZ3JvdXA6IE1ldGFvYmplY3REYXRhTW9kZWwsIGFwcFRpbGVzOiBNb0ZvclJlcG9ydE1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXBwVGlsZUdyb3Vwcykge1xyXG4gICAgICAgICAgICBzZWxlY3RlZEFwcFRpbGVncm91cCA9IHsgLi4uc2VsZWN0ZWRBcHBUaWxlZ3JvdXAsICRUaWxlc0xvYWRlZDogdHJ1ZSB9O1xyXG4gICAgICAgICAgICBhcHBUaWxlcy5Nb0RhdGFMaXN0LmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuQ29tcG9uZW50ID0gZWxlbWVudC5BX0FwcF9Db21wb25lbnQgPz8gZWxlbWVudC5BX0FwcFRpbGVfQXBwX0NvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuRHluYW1pY0NvbW1hbmQgPSBlbGVtZW50LkFfQXBwX0R5bmFtaWNDb21tYW5kID8/IGVsZW1lbnQuQV9BcHBUaWxlX0FwcF9EeW5hbWljQ29tbWFuZDtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuUHJlZGVmaW5lZCA9IGVsZW1lbnQuUHJlZGVmaW5lZCA/PyBlbGVtZW50LkFfQXBwVGlsZV9QcmVkZWZpbmVkO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgYXBwdGlsZUdyb3VwSW5kZXggPSB0aGlzLmFwcFRpbGVHcm91cHM/Lk1vRGF0YUxpc3QuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgKGMpID0+IGMuSWQgPT09IHNlbGVjdGVkQXBwVGlsZWdyb3VwLklkIHx8IGMuSWQgPT09IHNlbGVjdGVkQXBwVGlsZWdyb3VwLiRQYXJlbnRJZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBzZWxlY3RlZEFwcFRpbGVncm91cC5BcHBUaWxlcyA9IGFwcFRpbGVzO1xyXG4gICAgICAgICAgICBjb25zdCB0aWxlR3JvdXAgPSB0aGlzLmFwcFRpbGVHcm91cHMuTW9EYXRhTGlzdFthcHB0aWxlR3JvdXBJbmRleF07XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEFwcFRpbGVncm91cC4kUGFyZW50SWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aWxlR3JvdXAuJENoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWRPZlN1Ykdyb3VwID0gdGlsZUdyb3VwLiRDaGlsZHJlbi5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IHNlbGVjdGVkQXBwVGlsZWdyb3VwLklkKTtcclxuICAgICAgICAgICAgICAgICAgICB0aWxlR3JvdXAuJENoaWxkcmVuW2lkT2ZTdWJHcm91cF0gPSBzZWxlY3RlZEFwcFRpbGVncm91cDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwVGlsZUdyb3Vwcy5Nb0RhdGFMaXN0W2FwcHRpbGVHcm91cEluZGV4XSA9IHsgLi4udGlsZUdyb3VwIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcFRpbGVHcm91cHMuTW9EYXRhTGlzdFthcHB0aWxlR3JvdXBJbmRleF0gPSBzZWxlY3RlZEFwcFRpbGVncm91cDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgX2xvYWRBcHBUaWxlc0J5QXBwVGlsZUdyb3VwU2V0dGluZyhhcHBUaWxlR3JvdXA6IE1ldGFvYmplY3REYXRhTW9kZWwsIGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XHJcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IFthcHBUaWxlR3JvdXAuSWRdLFxyXG4gICAgICAgICAgICBNZXRob2Q6ICdMb2FkQWxsQXBwVGlsZXNCeVVzZXJBcHBUaWxlR3JvdXBTZXR0aW5ncycsXHJcbiAgICAgICAgICAgIFN1Y2Nlc3NGbjogKGFwcFRpbGVzOiBNb0ZvclJlcG9ydE1vZGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVBcHBUaWxlc09mQXBwVGlsZUdyb3VwKGFwcFRpbGVHcm91cCwgYXBwVGlsZXMpO1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgRmFpbEZuOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPIHNob3cgZXJyb3JcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX25leHRBbGxBcHBUaWxlR3JvdXBzKG5ld0FsbEFwcHM6IE1vRm9yUmVwb3J0TW9kZWwgfCBudWxsID0gbnVsbCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGFsbEFwcHMgPSBuZXdBbGxBcHBzID8/IHRoaXMuX2FwcFRpbGVHcm91cHNTb3VyY2UuZ2V0VmFsdWUoKTtcclxuICAgICAgICB0aGlzLl9hcHBUaWxlR3JvdXBzU291cmNlLm5leHQoYWxsQXBwcyA/IHsgLi4uYWxsQXBwcyB9IDogbnVsbCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9zZXRIb21lQXBwVGlsZUdyb3VwcyhhcHBHcm91cHM6IE1ldGFvYmplY3REYXRhTW9kZWxbXSk6IHZvaWQge1xyXG4gICAgICAgIGxldCBuZXdBcHBHcm91cHMgPSBbLi4uYXBwR3JvdXBzXTtcclxuICAgICAgICBuZXdBcHBHcm91cHMgPSBuZXdBcHBHcm91cHNcclxuICAgICAgICAgICAgLmZpbHRlcigoYykgPT4gYy5WaXNpYmxlKVxyXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gTnVtYmVyKGEubmF2aWdhdG9yT3JkZXJJdGVtKSAtIE51bWJlcihiLm5hdmlnYXRvck9yZGVySXRlbSkpO1xyXG4gICAgICAgIHRoaXMuX2hvbWVBcHBUaWxlR3JvdXBzU291cmNlLm5leHQobmV3QXBwR3JvdXBzKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3NhdmVVc2VyUG9ydGFsU2V0dGluZ3ModXNlclBvcnRhbFNldHRpbmdzOiBVc2VyUG9ydGFsU2V0dGluZ3MpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBCYXJzYUFwaS5Cdy5SdW5CbE1ldGhvZEFzeW5jKHtcclxuICAgICAgICAgICAgICAgIFBhcmFtZXRlcnM6IFtuZXcgQmFyc2FBcGkuQ29tbW9uLk1ldGFPYmplY3RXZWIodXNlclBvcnRhbFNldHRpbmdzKV0sXHJcbiAgICAgICAgICAgICAgICBNZXRob2Q6ICdTYXZlVXNlclBvcnRhbFNldHRpbmdzJyxcclxuICAgICAgICAgICAgICAgIFN1Y2Nlc3NGbjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBGYWlsRm46ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3VwZGF0ZUFwcEdyb3VwU2V0dGluZyhhcHBHcm91cDogTWV0YW9iamVjdERhdGFNb2RlbCwgYXBwR3JvdXBTZXR0aW5nOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgYWxsQXBwcyA9IHRoaXMuYXBwVGlsZUdyb3VwcztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEFwcEdyb3VwID0gYWxsQXBwcz8uTW9EYXRhTGlzdC5maW5kKChjKSA9PiBjLklkID09PSBhcHBHcm91cC5JZCk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkQXBwR3JvdXAgJiYgYWxsQXBwcykge1xyXG4gICAgICAgICAgICBzZWxlY3RlZEFwcEdyb3VwLlVzZXJBcHBUaWxlR3JvdXBTZXR0aW5nID0gYXBwR3JvdXBTZXR0aW5nO1xyXG4gICAgICAgICAgICB0aGlzLl9uZXh0QWxsQXBwVGlsZUdyb3VwcyhhbGxBcHBzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGZpbmRBcHBUaWxlV2l0aEtleShhbGxBcHBzOiBNb0ZvclJlcG9ydE1vZGVsLCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsIHtcclxuICAgICAgICBsZXQgc2VsZWN0ZWRUaWxlO1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuUmVwbGFjZUFyYWJpY0NoYXJjaHRlcih2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYWxsQXBwcykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWxsQXBwcy5Nb0RhdGFMaXN0LmZvckVhY2goKGFwcEdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFRpbGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZWxlY3RlZFRpbGUgPSBhcHBHcm91cC5uYXZpZ2F0b3JUaWxlcy5maW5kKFxyXG4gICAgICAgICAgICAgICAgKGMpID0+IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGMsIGtleSwgbnVsbCkgPT09IHZhbHVlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGFwcEdyb3VwLiRDaGlsZHJlbj8uZm9yRWFjaCgoc3ViR3JvdXApID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFRpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRpbGUgPSBzdWJHcm91cC5uYXZpZ2F0b3JUaWxlcy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgIChjKSA9PiBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjLCBrZXksIG51bGwpID09PSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkVGlsZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZmluZEdyb3VwV2l0aEFwcFRpbGVJZChhbGxBcHBzLCBhcHBUaWxlSWQ6IHN0cmluZyk6IE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsIHtcclxuICAgICAgICBsZXQgc2VsZWN0ZWRHcm91cDtcclxuXHJcbiAgICAgICAgaWYgKCFhbGxBcHBzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhbGxBcHBzLk1vRGF0YUxpc3QuZm9yRWFjaCgoYXBwR3JvdXApID0+IHtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYXBwR3JvdXAubmF2aWdhdG9yVGlsZXMuc29tZSgoYXBwVGlsZSkgPT4gYXBwVGlsZS5JZCA9PT0gYXBwVGlsZUlkKSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRHcm91cCA9IGFwcEdyb3VwO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFwcEdyb3VwLiRDaGlsZHJlbj8uZm9yRWFjaCgoc3ViR3JvdXApID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWJHcm91cC5uYXZpZ2F0b3JUaWxlcy5zb21lKChhcHBUaWxlKSA9PiBhcHBUaWxlLklkID09PSBhcHBUaWxlSWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRHcm91cCA9IHN1Ykdyb3VwO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkR3JvdXA7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9maW5kR3JvdXBXaXRoQXBwR3JvdXBJZChhbGxBcHBzLCBhcHBHcm91cElkOiBzdHJpbmcpOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbCB7XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkR3JvdXA7XHJcblxyXG4gICAgICAgIGlmICghYWxsQXBwcykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWxsQXBwcy5Nb0RhdGFMaXN0LmZvckVhY2goKGFwcEdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGFwcEdyb3VwLklkID09PSBhcHBHcm91cElkKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEdyb3VwID0gYXBwR3JvdXA7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXBwR3JvdXAuJENoaWxkcmVuPy5mb3JFYWNoKChzdWJHcm91cCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1Ykdyb3VwLklkID09PSBhcHBHcm91cElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRHcm91cCA9IHN1Ykdyb3VwO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkR3JvdXA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdXBkYXRlQXBwVGlsZUdyb3VwU2V0dGluZ3MoXHJcbiAgICAgICAgYXBwVGlsZUdyb3VwOiBNZXRhb2JqZWN0RGF0YU1vZGVsLFxyXG4gICAgICAgIHNldHRpbmc6IE1ldGFvYmplY3REYXRhTW9kZWxcclxuICAgICk6IE1ldGFvYmplY3REYXRhTW9kZWwge1xyXG4gICAgICAgIGFwcFRpbGVHcm91cC5Vc2VyQXBwVGlsZUdyb3VwU2V0dGluZyA9IHNldHRpbmc7XHJcbiAgICAgICAgYXBwVGlsZUdyb3VwID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhcHBUaWxlR3JvdXApKTtcclxuICAgICAgICB0aGlzLl9uZXh0QWxsQXBwVGlsZUdyb3VwcygpO1xyXG4gICAgICAgIHJldHVybiBhcHBUaWxlR3JvdXA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcHJlcGFyZU5hdmlnYXRvcihhcHBUaWxlR3JvdXA6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICBhcHBUaWxlR3JvdXAuJFRpbGVTZXR0aW5nQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICAgIGFwcFRpbGVHcm91cC4kRGlzYWJsZWRwaW4gPSBmYWxzZTtcclxuICAgICAgICBhcHBUaWxlR3JvdXAubmF2aWdhdG9yVGl0bGUgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcclxuICAgICAgICAgICAgYXBwVGlsZUdyb3VwLFxyXG4gICAgICAgICAgICAnVXNlckFwcFRpbGVHcm91cFNldHRpbmcuVGl0bGUnLFxyXG4gICAgICAgICAgICBhcHBUaWxlR3JvdXAuVGl0bGVcclxuICAgICAgICApO1xyXG4gICAgICAgIGFwcFRpbGVHcm91cC5uYXZpZ2F0b3JUaXRsZSA9IGFwcFRpbGVHcm91cC5uYXZpZ2F0b3JUaXRsZSA9XHJcbiAgICAgICAgICAgIGFwcFRpbGVHcm91cC5uYXZpZ2F0b3JUaXRsZSA9PT0gJycgPyBhcHBUaWxlR3JvdXAuVGl0bGUgOiBhcHBUaWxlR3JvdXAubmF2aWdhdG9yVGl0bGU7XHJcbiAgICAgICAgYXBwVGlsZUdyb3VwLm5hdmlnYXRvclRpdGxlID0gdGhpcy5fYmJiVHJhbnNsYXRlUGlwZS50cmFuc2Zvcm0oYXBwVGlsZUdyb3VwLm5hdmlnYXRvclRpdGxlKTtcclxuICAgICAgICBjb25zdCBvcmRlckl0ZW0gPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShhcHBUaWxlR3JvdXAsICdVc2VyQXBwVGlsZUdyb3VwU2V0dGluZy5PcmRlckl0ZW0nLCBudWxsKTtcclxuICAgICAgICBpZiAob3JkZXJJdGVtICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGFwcFRpbGVHcm91cC5uYXZpZ2F0b3JPcmRlckl0ZW0gPSBvcmRlckl0ZW07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXBwVGlsZUdyb3VwLm5hdmlnYXRvck9yZGVySXRlbSA9IGFwcFRpbGVHcm91cC5PcmRlckl0ZW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB2aXNpYmxlID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoYXBwVGlsZUdyb3VwLCAnVXNlckFwcFRpbGVHcm91cFNldHRpbmcuVmlzaWJsZScsIG51bGwpO1xyXG4gICAgICAgIGlmICh2aXNpYmxlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGFwcFRpbGVHcm91cC5uYXZpZ2F0b3JWaXNpYmxlID0gdmlzaWJsZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhcHBUaWxlR3JvdXAubmF2aWdhdG9yVmlzaWJsZSA9IGFwcFRpbGVHcm91cC5WaXNpYmxlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXBwVGlsZXMgPSBhcHBUaWxlR3JvdXAuQXBwVGlsZXM/Lk1vRGF0YUxpc3QgPz8gW107XHJcblxyXG4gICAgICAgIGFwcFRpbGVHcm91cC5uYXZpZ2F0b3JUaWxlcyA9IGFwcFRpbGVzXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGMpID0+IGMuVmlzaWJsZSAmJiAhYy5Jc0FjdGlvbkxpbmspXHJcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBOdW1iZXIoYS5PcmRlckl0ZW0pIC0gTnVtYmVyKGIuT3JkZXJJdGVtKSk7XHJcbiAgICAgICAgYXBwVGlsZUdyb3VwLm5hdmlnYXRvckFjdGlvbkxpbmtzID0gYXBwVGlsZXNcclxuICAgICAgICAgICAgLmZpbHRlcigoYykgPT4gYy5WaXNpYmxlICYmIGMuSXNBY3Rpb25MaW5rKVxyXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gTnVtYmVyKGEuT3JkZXJJdGVtQWN0aW9uTGluaykgLSBOdW1iZXIoYi5PcmRlckl0ZW1BY3Rpb25MaW5rKSk7XHJcbiAgICAgICAgYXBwVGlsZUdyb3VwLm5hdmlnYXRvclRpbGVzLmZvckVhY2goKGFwcFRpbGUpID0+IHRoaXMuX3NldFRpbGVJbmZvKGFwcFRpbGUpKTtcclxuICAgICAgICBhcHBUaWxlR3JvdXAubmF2aWdhdG9yQWN0aW9uTGlua3MuZm9yRWFjaCgoYXBwVGlsZSkgPT4gdGhpcy5fc2V0VGlsZUluZm8oYXBwVGlsZSkpO1xyXG5cclxuICAgICAgICBhcHBUaWxlR3JvdXAuJENoaWxkcmVuPy5mb3JFYWNoKChzdWJBcHBUaWxlR3JvdXApID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcHJlcGFyZU5hdmlnYXRvcihzdWJBcHBUaWxlR3JvdXApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbmludGVyZmFjZSBQaW5UaWxlSW5mbyB7XHJcbiAgICBncm91cHM6IE1ldGFvYmplY3REYXRhTW9kZWxbXTtcclxuICAgIHZpc2libGU6IGJvb2xlYW5bXTtcclxuICAgIHRpbGVJZDogc3RyaW5nO1xyXG59XHJcbiJdfQ==
|