@dcl/asset-packs 2.15.2 → 2.15.3
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/bin/index.js +1117 -854
- package/dist/admin-toolkit-ui/ModerationControl/RemoveAdminConfirmation.d.ts +2 -2
- package/dist/admin-toolkit-ui/ModerationControl/RemoveAdminConfirmation.js +7 -7
- package/dist/admin-toolkit-ui/ModerationControl/utils.js +3 -3
- package/dist/admin-toolkit-ui/TextAnnouncementsControl.js +8 -21
- package/dist/admin-toolkit-ui/VideoControl/utils.d.ts +1 -1
- package/dist/admin-toolkit-ui/VideoControl/utils.js +16 -28
- package/dist/admin-toolkit-ui/admin-message-bus.d.ts +12 -0
- package/dist/admin-toolkit-ui/admin-message-bus.js +231 -0
- package/dist/admin-toolkit-ui/index.d.ts +3 -2
- package/dist/admin-toolkit-ui/index.js +17 -10
- package/dist/bin/index.js +1117 -854
- package/package.json +1 -1
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { MessageBus } from '@dcl/sdk/message-bus';
|
|
2
|
+
import { send as commsSend } from '~system/CommunicationsController';
|
|
3
|
+
import { getExplorerComponents } from '../components';
|
|
4
|
+
import { getComponents } from '../definitions';
|
|
5
|
+
import { isPreview } from './fetch-utils';
|
|
6
|
+
import { getVideoPlayers } from './VideoControl/utils';
|
|
7
|
+
const MSG = {
|
|
8
|
+
SET_VIDEO: 'admin:set-video',
|
|
9
|
+
SET_ANNOUNCEMENT: 'admin:set-announcement',
|
|
10
|
+
CLEAR_ANNOUNCEMENT: 'admin:clear-announcement',
|
|
11
|
+
REQUEST_STATE: 'admin:request-state',
|
|
12
|
+
SYNC_STATE: 'admin:sync-state',
|
|
13
|
+
SYNC_ADMINS: 'admin:sync-admins',
|
|
14
|
+
};
|
|
15
|
+
let instance = null;
|
|
16
|
+
export function getAdminMessageBus() {
|
|
17
|
+
if (!instance)
|
|
18
|
+
throw new Error('AdminMessageBus not initialized');
|
|
19
|
+
return instance;
|
|
20
|
+
}
|
|
21
|
+
export function initAdminMessageBus(engine, admins, adminToolkitUiEntity, playersHelper, onRefetchAdmins) {
|
|
22
|
+
let sceneAdmins = admins;
|
|
23
|
+
const { VideoPlayer, SyncComponents } = getExplorerComponents(engine);
|
|
24
|
+
const { TextAnnouncements, VideoScreen } = getComponents(engine);
|
|
25
|
+
const authoritativeVideo = new Map();
|
|
26
|
+
let authoritativeAnnouncement = null;
|
|
27
|
+
let adminHasActed = false;
|
|
28
|
+
function isAdminWallet(sender) {
|
|
29
|
+
if (isPreview())
|
|
30
|
+
return true;
|
|
31
|
+
if (sender === 'self')
|
|
32
|
+
return true;
|
|
33
|
+
return sceneAdmins.some(admin => admin.address.toLowerCase() === sender.toLowerCase());
|
|
34
|
+
}
|
|
35
|
+
const handlers = new Map();
|
|
36
|
+
const receiver = new MessageBus();
|
|
37
|
+
function onMessage(type, handler) {
|
|
38
|
+
handlers.set(type, handler);
|
|
39
|
+
receiver.on(type, handler);
|
|
40
|
+
}
|
|
41
|
+
function onAdminMessage(type, handler) {
|
|
42
|
+
onMessage(type, (payload, sender) => {
|
|
43
|
+
if (!isAdminWallet(sender))
|
|
44
|
+
return;
|
|
45
|
+
handler(payload, sender);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function emitMessage(type, payload) {
|
|
49
|
+
const handler = handlers.get(type);
|
|
50
|
+
if (handler)
|
|
51
|
+
handler(payload, 'self');
|
|
52
|
+
const raw = JSON.stringify({ message: type, payload });
|
|
53
|
+
commsSend({ message: raw }).catch(() => { });
|
|
54
|
+
}
|
|
55
|
+
for (const vp of getVideoPlayers(engine)) {
|
|
56
|
+
const entity = vp.entity;
|
|
57
|
+
const sync = SyncComponents.getOrNull(entity);
|
|
58
|
+
if (sync) {
|
|
59
|
+
const withoutVideoPlayer = sync.componentIds.filter((id) => id !== VideoPlayer.componentId);
|
|
60
|
+
SyncComponents.createOrReplace(entity, { componentIds: withoutVideoPlayer });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
authoritativeAnnouncement = { text: '', author: '', id: '' };
|
|
64
|
+
for (const vp of getVideoPlayers(engine)) {
|
|
65
|
+
const entity = vp.entity;
|
|
66
|
+
const screen = VideoScreen.getOrNull(entity);
|
|
67
|
+
const video = VideoPlayer.getOrNull(entity);
|
|
68
|
+
if (!video)
|
|
69
|
+
continue;
|
|
70
|
+
const src = screen?.defaultURL || video.src;
|
|
71
|
+
authoritativeVideo.set(entity, {
|
|
72
|
+
src,
|
|
73
|
+
playing: video.playing,
|
|
74
|
+
volume: video.volume,
|
|
75
|
+
loop: video.loop,
|
|
76
|
+
});
|
|
77
|
+
if (video.src !== src) {
|
|
78
|
+
VideoPlayer.getMutable(entity).src = src;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
onAdminMessage(MSG.SET_VIDEO, (payload, _sender) => {
|
|
82
|
+
const entity = payload.entity;
|
|
83
|
+
const current = VideoPlayer.getOrNull(entity);
|
|
84
|
+
if (!current)
|
|
85
|
+
return;
|
|
86
|
+
const updated = {
|
|
87
|
+
src: payload.src ?? current.src,
|
|
88
|
+
playing: payload.playing ?? current.playing,
|
|
89
|
+
volume: payload.volume ?? current.volume,
|
|
90
|
+
loop: payload.loop ?? current.loop,
|
|
91
|
+
};
|
|
92
|
+
authoritativeVideo.set(entity, updated);
|
|
93
|
+
const video = VideoPlayer.getMutable(entity);
|
|
94
|
+
video.src = updated.src;
|
|
95
|
+
video.playing = updated.playing;
|
|
96
|
+
video.volume = updated.volume;
|
|
97
|
+
video.loop = updated.loop;
|
|
98
|
+
if (payload.position !== undefined)
|
|
99
|
+
video.position = payload.position;
|
|
100
|
+
adminHasActed = true;
|
|
101
|
+
});
|
|
102
|
+
onAdminMessage(MSG.SET_ANNOUNCEMENT, (payload, _sender) => {
|
|
103
|
+
authoritativeAnnouncement = {
|
|
104
|
+
text: payload.text,
|
|
105
|
+
author: payload.author,
|
|
106
|
+
id: payload.id,
|
|
107
|
+
};
|
|
108
|
+
const ta = TextAnnouncements.getMutableOrNull(adminToolkitUiEntity);
|
|
109
|
+
if (!ta)
|
|
110
|
+
return;
|
|
111
|
+
ta.text = payload.text;
|
|
112
|
+
ta.author = payload.author;
|
|
113
|
+
ta.id = payload.id;
|
|
114
|
+
adminHasActed = true;
|
|
115
|
+
});
|
|
116
|
+
onAdminMessage(MSG.CLEAR_ANNOUNCEMENT, (_payload, _sender) => {
|
|
117
|
+
authoritativeAnnouncement = { text: '', author: '', id: '' };
|
|
118
|
+
const ta = TextAnnouncements.getMutableOrNull(adminToolkitUiEntity);
|
|
119
|
+
if (!ta)
|
|
120
|
+
return;
|
|
121
|
+
ta.text = '';
|
|
122
|
+
ta.author = '';
|
|
123
|
+
ta.id = '';
|
|
124
|
+
adminHasActed = true;
|
|
125
|
+
});
|
|
126
|
+
function broadcastCurrentState() {
|
|
127
|
+
const video = [];
|
|
128
|
+
for (const vp of getVideoPlayers(engine)) {
|
|
129
|
+
const entity = vp.entity;
|
|
130
|
+
const screen = VideoScreen.getOrNull(entity);
|
|
131
|
+
const current = VideoPlayer.getOrNull(entity);
|
|
132
|
+
if (!current)
|
|
133
|
+
continue;
|
|
134
|
+
if (current.src !== (screen?.defaultURL || '')) {
|
|
135
|
+
video.push({ entity: entity, ...current });
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
const ta = TextAnnouncements.getOrNull(adminToolkitUiEntity);
|
|
139
|
+
const announcement = ta?.id ? { text: ta.text, author: ta.author ?? '', id: ta.id } : null;
|
|
140
|
+
if (video.length === 0 && !announcement)
|
|
141
|
+
return;
|
|
142
|
+
emitMessage(MSG.SYNC_STATE, { video, announcement });
|
|
143
|
+
}
|
|
144
|
+
onAdminMessage(MSG.SYNC_STATE, (payload, _sender) => {
|
|
145
|
+
for (const vs of payload.video) {
|
|
146
|
+
const entity = vs.entity;
|
|
147
|
+
authoritativeVideo.set(entity, {
|
|
148
|
+
src: vs.src,
|
|
149
|
+
playing: vs.playing,
|
|
150
|
+
volume: vs.volume,
|
|
151
|
+
loop: vs.loop,
|
|
152
|
+
});
|
|
153
|
+
const video = VideoPlayer.getMutableOrNull(entity);
|
|
154
|
+
if (!video)
|
|
155
|
+
continue;
|
|
156
|
+
video.src = vs.src;
|
|
157
|
+
if (vs.playing !== undefined)
|
|
158
|
+
video.playing = vs.playing;
|
|
159
|
+
if (vs.volume !== undefined)
|
|
160
|
+
video.volume = vs.volume;
|
|
161
|
+
if (vs.loop !== undefined)
|
|
162
|
+
video.loop = vs.loop;
|
|
163
|
+
}
|
|
164
|
+
if (payload.announcement?.id) {
|
|
165
|
+
authoritativeAnnouncement = { ...payload.announcement };
|
|
166
|
+
const ta = TextAnnouncements.getMutableOrNull(adminToolkitUiEntity);
|
|
167
|
+
if (ta) {
|
|
168
|
+
ta.text = payload.announcement.text;
|
|
169
|
+
ta.author = payload.announcement.author;
|
|
170
|
+
ta.id = payload.announcement.id;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
adminHasActed = true;
|
|
174
|
+
});
|
|
175
|
+
onMessage(MSG.REQUEST_STATE, (_payload, _sender) => {
|
|
176
|
+
if (adminHasActed)
|
|
177
|
+
broadcastCurrentState();
|
|
178
|
+
});
|
|
179
|
+
playersHelper?.onEnterScene(() => {
|
|
180
|
+
if (adminHasActed)
|
|
181
|
+
broadcastCurrentState();
|
|
182
|
+
});
|
|
183
|
+
onAdminMessage(MSG.SYNC_ADMINS, (_payload, _sender) => {
|
|
184
|
+
onRefetchAdmins?.();
|
|
185
|
+
});
|
|
186
|
+
emitMessage(MSG.REQUEST_STATE, {});
|
|
187
|
+
engine.addSystem(() => {
|
|
188
|
+
for (const [entity, authState] of authoritativeVideo) {
|
|
189
|
+
const vp = VideoPlayer.getOrNull(entity);
|
|
190
|
+
if (!vp)
|
|
191
|
+
continue;
|
|
192
|
+
if (vp.src !== authState.src) {
|
|
193
|
+
const mut = VideoPlayer.getMutable(entity);
|
|
194
|
+
mut.src = authState.src;
|
|
195
|
+
mut.playing = authState.playing;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (authoritativeAnnouncement) {
|
|
199
|
+
const ta = TextAnnouncements.getOrNull(adminToolkitUiEntity);
|
|
200
|
+
if (ta && authoritativeAnnouncement.id && ta.id !== authoritativeAnnouncement.id) {
|
|
201
|
+
const mut = TextAnnouncements.getMutable(adminToolkitUiEntity);
|
|
202
|
+
mut.text = authoritativeAnnouncement.text;
|
|
203
|
+
mut.author = authoritativeAnnouncement.author;
|
|
204
|
+
mut.id = authoritativeAnnouncement.id;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
instance = {
|
|
209
|
+
emitSetVideo(entity, props) {
|
|
210
|
+
emitMessage(MSG.SET_VIDEO, { entity, ...props });
|
|
211
|
+
},
|
|
212
|
+
emitSetAnnouncement(text, author, id) {
|
|
213
|
+
emitMessage(MSG.SET_ANNOUNCEMENT, {
|
|
214
|
+
text,
|
|
215
|
+
author: author ?? '',
|
|
216
|
+
id: id ?? '',
|
|
217
|
+
});
|
|
218
|
+
},
|
|
219
|
+
emitClearAnnouncement() {
|
|
220
|
+
emitMessage(MSG.CLEAR_ANNOUNCEMENT, {});
|
|
221
|
+
},
|
|
222
|
+
emitSyncAdmins() {
|
|
223
|
+
emitMessage(MSG.SYNC_ADMINS, {});
|
|
224
|
+
},
|
|
225
|
+
updateAdminList(admins) {
|
|
226
|
+
sceneAdmins = admins;
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
return instance;
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tbWVzc2FnZS1idXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9hZG1pbi1tZXNzYWdlLWJ1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxJQUFJLElBQUksU0FBUyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQXFCdkQsTUFBTSxHQUFHLEdBQUc7SUFDVixTQUFTLEVBQUUsaUJBQWlCO0lBQzVCLGdCQUFnQixFQUFFLHdCQUF3QjtJQUMxQyxrQkFBa0IsRUFBRSwwQkFBMEI7SUFDOUMsYUFBYSxFQUFFLHFCQUFxQjtJQUNwQyxVQUFVLEVBQUUsa0JBQWtCO0lBQzlCLFdBQVcsRUFBRSxtQkFBbUI7Q0FDeEIsQ0FBQztBQVlYLElBQUksUUFBUSxHQUFtQyxJQUFJLENBQUM7QUFFcEQsTUFBTSxVQUFVLGtCQUFrQjtJQUNoQyxJQUFJLENBQUMsUUFBUTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNsRSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBSUQsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxNQUFlLEVBQ2YsTUFBb0IsRUFDcEIsb0JBQTRCLEVBQzVCLGFBQThCLEVBQzlCLGVBQTRCO0lBRTVCLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQztJQUV6QixNQUFNLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFakUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBc0IsQ0FBQztJQUN6RCxJQUFJLHlCQUF5QixHQUE2QixJQUFJLENBQUM7SUFDL0QsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBRTFCLFNBQVMsYUFBYSxDQUFDLE1BQWM7UUFDbkMsSUFBSSxTQUFTLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM3QixJQUFJLE1BQU0sS0FBSyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbkMsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBUUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQTBCLENBQUM7SUFDbkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUVsQyxTQUFTLFNBQVMsQ0FBQyxJQUFZLEVBQUUsT0FBdUI7UUFDdEQsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDNUIsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFNBQVMsY0FBYyxDQUFDLElBQVksRUFBRSxPQUF1QjtRQUMzRCxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO2dCQUFFLE9BQU87WUFDbkMsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFZLEVBQUUsT0FBZ0M7UUFDakUsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLE9BQU87WUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXRDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdkQsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFJRCxLQUFLLE1BQU0sRUFBRSxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFnQixDQUFDO1FBQ25DLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQ2pELENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssV0FBVyxDQUFDLFdBQVcsQ0FDL0MsQ0FBQztZQUNGLGNBQWMsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUMvRSxDQUFDO0lBQ0gsQ0FBQztJQU1ELHlCQUF5QixHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUU3RCxLQUFLLE1BQU0sRUFBRSxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFnQixDQUFDO1FBQ25DLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsS0FBSztZQUFFLFNBQVM7UUFFckIsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLFVBQVUsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQzVDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDN0IsR0FBRztZQUNILE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztZQUN0QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUVILElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN0QixXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFJRCxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUNqRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBZ0IsQ0FBQztRQUN4QyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUVyQixNQUFNLE9BQU8sR0FBZTtZQUMxQixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRztZQUMvQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTztZQUMzQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTTtZQUN4QyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSTtTQUNuQyxDQUFDO1FBQ0Ysa0JBQWtCLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUV4QyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLEtBQUssQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUN4QixLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDaEMsS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzlCLEtBQUssQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUMxQixJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUztZQUFFLEtBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUV0RSxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBRUgsY0FBYyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUN4RCx5QkFBeUIsR0FBRztZQUMxQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRTtTQUNmLENBQUM7UUFDRixNQUFNLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxFQUFFO1lBQUUsT0FBTztRQUNoQixFQUFFLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDdkIsRUFBRSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzNCLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNuQixhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBRUgsY0FBYyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUMzRCx5QkFBeUIsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDN0QsTUFBTSxFQUFFLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU87UUFDaEIsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDYixFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNmLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1gsYUFBYSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDLENBQUMsQ0FBQztJQUlILFNBQVMscUJBQXFCO1FBQzVCLE1BQU0sS0FBSyxHQUE4QixFQUFFLENBQUM7UUFDNUMsS0FBSyxNQUFNLEVBQUUsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN6QyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBZ0IsQ0FBQztZQUNuQyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLE9BQU87Z0JBQUUsU0FBUztZQUN2QixJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBZ0IsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDdkQsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUM3RCxNQUFNLFlBQVksR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFM0YsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPO1FBQ2hELFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBeUIsRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUNwRSxLQUFLLE1BQU0sRUFBRSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBZ0IsQ0FBQztZQUNuQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFO2dCQUM3QixHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUc7Z0JBQ1gsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPO2dCQUNuQixNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU07Z0JBQ2pCLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSTthQUNkLENBQUMsQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsS0FBSztnQkFBRSxTQUFTO1lBQ3JCLEtBQUssQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztZQUNuQixJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssU0FBUztnQkFBRSxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDekQsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLFNBQVM7Z0JBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ3RELElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxTQUFTO2dCQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztRQUNsRCxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQzdCLHlCQUF5QixHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEQsTUFBTSxFQUFFLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNwRSxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUNQLEVBQUUsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3BDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7Z0JBQ3hDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUM7UUFFRCxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDakQsSUFBSSxhQUFhO1lBQUUscUJBQXFCLEVBQUUsQ0FBQztJQUM3QyxDQUFDLENBQUMsQ0FBQztJQUVILGFBQWEsRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFO1FBQy9CLElBQUksYUFBYTtZQUFFLHFCQUFxQixFQUFFLENBQUM7SUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFHSCxjQUFjLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUNwRCxlQUFlLEVBQUUsRUFBRSxDQUFDO0lBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBR0gsV0FBVyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFRbkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDcEIsS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDckQsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsRUFBRTtnQkFBRSxTQUFTO1lBQ2xCLElBQUksRUFBRSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzNDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQztnQkFDeEIsR0FBRyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQ2xDLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1lBQzlCLE1BQU0sRUFBRSxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQzdELElBQUksRUFBRSxJQUFJLHlCQUF5QixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLHlCQUF5QixDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNqRixNQUFNLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDL0QsR0FBRyxDQUFDLElBQUksR0FBRyx5QkFBeUIsQ0FBQyxJQUFJLENBQUM7Z0JBQzFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcseUJBQXlCLENBQUMsTUFBTSxDQUFDO2dCQUM5QyxHQUFHLENBQUMsRUFBRSxHQUFHLHlCQUF5QixDQUFDLEVBQUUsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBSUgsUUFBUSxHQUFHO1FBQ1QsWUFBWSxDQUFDLE1BQWMsRUFBRSxLQUE2QjtZQUN4RCxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssRUFBNkIsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFFRCxtQkFBbUIsQ0FBQyxJQUFZLEVBQUUsTUFBZSxFQUFFLEVBQVc7WUFDNUQsV0FBVyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDaEMsSUFBSTtnQkFDSixNQUFNLEVBQUUsTUFBTSxJQUFJLEVBQUU7Z0JBQ3BCLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRTthQUNiLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxxQkFBcUI7WUFDbkIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsY0FBYztZQUNaLFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCxlQUFlLENBQUMsTUFBb0I7WUFDbEMsV0FBVyxHQUFHLE1BQU0sQ0FBQztRQUN2QixDQUFDO0tBQ0YsQ0FBQztJQUVGLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFkbWluIE1lc3NhZ2UgQnVzXG4gKlxuICogU2VjdXJlcyBhZG1pbi1jb250cm9sbGVkIGNvbXBvbmVudHMgKFZpZGVvUGxheWVyLCBUZXh0QW5ub3VuY2VtZW50cykgYWdhaW5zdFxuICogdW5hdXRob3JpemVkIENSRFQgb3ZlcndyaXRlcyBieSBtb3ZpbmcgYWRtaW4gc3RhdGUgY2hhbmdlcyB0byBhIHNlcGFyYXRlXG4gKiBjb21tdW5pY2F0aW9uIGNoYW5uZWwuXG4gKlxuICogQXJjaGl0ZWN0dXJlOlxuICpcbiAqICAgMS4gQ1JEVCBzeW5jIGZvciBWaWRlb1BsYXllciBpcyBESVNBQkxFRCBvbiBhZG1pbi1jb250cm9sbGVkIGVudGl0aWVzIGJ5XG4gKiAgICAgIHJlbW92aW5nIGl0IGZyb20gU3luY0NvbXBvbmVudHMuIFRoaXMgcHJldmVudHMgYXR0YWNrZXIgQ1JEVCB3cml0ZXNcbiAqICAgICAgZnJvbSBwcm9wYWdhdGluZyB0aHJvdWdoIHRoZSBub3JtYWwgc3luYyB0cmFuc3BvcnQuXG4gKlxuICogICAyLiBBZG1pbiBjb21tYW5kcyBmbG93IHZpYSB0aGUgVEVYVCBjb21tcyBjaGFubmVsIChNZXNzYWdlQnVzKSwgd2hpY2ggaXMgYVxuICogICAgICBzZXBhcmF0ZSB0cmFuc3BvcnQgZnJvbSB0aGUgYmluYXJ5IENSRFQgY2hhbm5lbC4gQWxsIHBhcnRpY2lwYW50c1xuICogICAgICByZWNlaXZlIGFkbWluIGNvbW1hbmRzIHRocm91Z2ggdGhpcyBjaGFubmVsIGFuZCB2YWxpZGF0ZSB0aGUgc2VuZGVyJ3NcbiAqICAgICAgd2FsbGV0IGFkZHJlc3MgYWdhaW5zdCB0aGUgc2NlbmUgYWRtaW4gbGlzdCBiZWZvcmUgYXBwbHlpbmcuXG4gKlxuICogICAzLiBPbiBsb2FkLCBlYWNoIGNsaWVudCBzZWVkcyBhdXRob3JpdGF0aXZlIHN0YXRlIGZyb21cbiAqICAgICAgVmlkZW9TY3JlZW4uZGVmYXVsdFVSTCAoZGVwbG95LXRpbWUgdmFsdWUsIG5vdCB3cml0YWJsZSB2aWEgQ1JEVCkuXG4gKiAgICAgIEEgcGVyLWZyYW1lIHJldmVydCBzeXN0ZW0gZW5mb3JjZXMgdGhpcyBzdGF0ZSBhZ2FpbnN0IGFueSByYXcgQ1JEVFxuICogICAgICB3cml0ZXMgaW5qZWN0ZWQgZGlyZWN0bHkgdmlhIExpdmVLaXQuXG4gKlxuICogICA0LiBMYXRlIGpvaW5lcnMgcmVxdWVzdCBzdGF0ZSBmcm9tIGV4aXN0aW5nIHBhcnRpY2lwYW50cyB2aWEgYVxuICogICAgICByZXF1ZXN0L3Jlc3BvbnNlIGhhbmRzaGFrZSBvdmVyIHRoZSBNZXNzYWdlQnVzLlxuICpcbiAqIFNlbmRpbmcgdXNlcyBjb21tdW5pY2F0aW9uc0NvbnRyb2xsZXIuc2VuZCgpIGRpcmVjdGx5IHJhdGhlciB0aGFuIHRoZVxuICogTWVzc2FnZUJ1cyBjbGFzcydzIGVtaXQoKSwgYmVjYXVzZSB0aGUgY2xhc3MncyBpbnRlcm5hbCBmbHVzaCBxdWV1ZSBkcm9wc1xuICogc3Vic2VxdWVudCBtZXNzYWdlcy4gUmVjZWl2aW5nIHVzZXMgTWVzc2FnZUJ1cy5vbigpLCB3aGljaCByZWdpc3RlcnMgb24gdGhlXG4gKiBnbG9iYWwgb25Db21tc01lc3NhZ2Ugb2JzZXJ2YWJsZSBhbmQgd29ya3MgcmVsaWFibHkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBFbnRpdHksIElFbmdpbmUsIFBCVmlkZW9QbGF5ZXIgfSBmcm9tICdAZGNsL2Vjcyc7XG5pbXBvcnQgeyBNZXNzYWdlQnVzIH0gZnJvbSAnQGRjbC9zZGsvbWVzc2FnZS1idXMnO1xuaW1wb3J0IHsgc2VuZCBhcyBjb21tc1NlbmQgfSBmcm9tICd+c3lzdGVtL0NvbW11bmljYXRpb25zQ29udHJvbGxlcic7XG5pbXBvcnQgeyBnZXRFeHBsb3JlckNvbXBvbmVudHMgfSBmcm9tICcuLi9jb21wb25lbnRzJztcbmltcG9ydCB7IGdldENvbXBvbmVudHMgfSBmcm9tICcuLi9kZWZpbml0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IElQbGF5ZXJzSGVscGVyIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNQcmV2aWV3IH0gZnJvbSAnLi9mZXRjaC11dGlscyc7XG5pbXBvcnQgdHlwZSB7IFNjZW5lQWRtaW4gfSBmcm9tICcuL01vZGVyYXRpb25Db250cm9sJztcbmltcG9ydCB7IGdldFZpZGVvUGxheWVycyB9IGZyb20gJy4vVmlkZW9Db250cm9sL3V0aWxzJztcblxuLy8g4pSA4pSAIFR5cGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG50eXBlIFZpZGVvU3RhdGUgPSBQaWNrPFBCVmlkZW9QbGF5ZXIsICdzcmMnIHwgJ3BsYXlpbmcnIHwgJ3ZvbHVtZScgfCAnbG9vcCc+O1xuXG50eXBlIEFubm91bmNlbWVudFN0YXRlID0ge1xuICB0ZXh0OiBzdHJpbmc7XG4gIGF1dGhvcjogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xufTtcblxuaW50ZXJmYWNlIFN5bmNTdGF0ZVBheWxvYWQge1xuICB2aWRlbzogQXJyYXk8eyBlbnRpdHk6IG51bWJlciB9ICYgVmlkZW9TdGF0ZT47XG4gIGFubm91bmNlbWVudDogQW5ub3VuY2VtZW50U3RhdGUgfCBudWxsO1xufVxuXG50eXBlIE1lc3NhZ2VIYW5kbGVyID0gKHBheWxvYWQ6IGFueSwgc2VuZGVyOiBzdHJpbmcpID0+IHZvaWQ7XG5cbi8vIOKUgOKUgCBNZXNzYWdlIGlkZW50aWZpZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5jb25zdCBNU0cgPSB7XG4gIFNFVF9WSURFTzogJ2FkbWluOnNldC12aWRlbycsXG4gIFNFVF9BTk5PVU5DRU1FTlQ6ICdhZG1pbjpzZXQtYW5ub3VuY2VtZW50JyxcbiAgQ0xFQVJfQU5OT1VOQ0VNRU5UOiAnYWRtaW46Y2xlYXItYW5ub3VuY2VtZW50JyxcbiAgUkVRVUVTVF9TVEFURTogJ2FkbWluOnJlcXVlc3Qtc3RhdGUnLFxuICBTWU5DX1NUQVRFOiAnYWRtaW46c3luYy1zdGF0ZScsXG4gIFNZTkNfQURNSU5TOiAnYWRtaW46c3luYy1hZG1pbnMnLFxufSBhcyBjb25zdDtcblxuLy8g4pSA4pSAIFB1YmxpYyBpbnRlcmZhY2Ug4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRtaW5NZXNzYWdlQnVzSW5zdGFuY2Uge1xuICBlbWl0U2V0VmlkZW8oZW50aXR5OiBFbnRpdHksIHByb3BzOiBQYXJ0aWFsPFBCVmlkZW9QbGF5ZXI+KTogdm9pZDtcbiAgZW1pdFNldEFubm91bmNlbWVudCh0ZXh0OiBzdHJpbmcsIGF1dGhvcj86IHN0cmluZywgaWQ/OiBzdHJpbmcpOiB2b2lkO1xuICBlbWl0Q2xlYXJBbm5vdW5jZW1lbnQoKTogdm9pZDtcbiAgZW1pdFN5bmNBZG1pbnMoKTogdm9pZDtcbiAgdXBkYXRlQWRtaW5MaXN0KGFkbWluczogU2NlbmVBZG1pbltdKTogdm9pZDtcbn1cblxubGV0IGluc3RhbmNlOiBBZG1pbk1lc3NhZ2VCdXNJbnN0YW5jZSB8IG51bGwgPSBudWxsO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWRtaW5NZXNzYWdlQnVzKCk6IEFkbWluTWVzc2FnZUJ1c0luc3RhbmNlIHtcbiAgaWYgKCFpbnN0YW5jZSkgdGhyb3cgbmV3IEVycm9yKCdBZG1pbk1lc3NhZ2VCdXMgbm90IGluaXRpYWxpemVkJyk7XG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8g4pSA4pSAIEluaXRpYWxpemF0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEFkbWluTWVzc2FnZUJ1cyhcbiAgZW5naW5lOiBJRW5naW5lLFxuICBhZG1pbnM6IFNjZW5lQWRtaW5bXSxcbiAgYWRtaW5Ub29sa2l0VWlFbnRpdHk6IEVudGl0eSxcbiAgcGxheWVyc0hlbHBlcj86IElQbGF5ZXJzSGVscGVyLFxuICBvblJlZmV0Y2hBZG1pbnM/OiAoKSA9PiB2b2lkLFxuKTogQWRtaW5NZXNzYWdlQnVzSW5zdGFuY2Uge1xuICBsZXQgc2NlbmVBZG1pbnMgPSBhZG1pbnM7XG5cbiAgY29uc3QgeyBWaWRlb1BsYXllciwgU3luY0NvbXBvbmVudHMgfSA9IGdldEV4cGxvcmVyQ29tcG9uZW50cyhlbmdpbmUpO1xuICBjb25zdCB7IFRleHRBbm5vdW5jZW1lbnRzLCBWaWRlb1NjcmVlbiB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpO1xuXG4gIGNvbnN0IGF1dGhvcml0YXRpdmVWaWRlbyA9IG5ldyBNYXA8RW50aXR5LCBWaWRlb1N0YXRlPigpO1xuICBsZXQgYXV0aG9yaXRhdGl2ZUFubm91bmNlbWVudDogQW5ub3VuY2VtZW50U3RhdGUgfCBudWxsID0gbnVsbDtcbiAgbGV0IGFkbWluSGFzQWN0ZWQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBpc0FkbWluV2FsbGV0KHNlbmRlcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKGlzUHJldmlldygpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoc2VuZGVyID09PSAnc2VsZicpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBzY2VuZUFkbWlucy5zb21lKGFkbWluID0+IGFkbWluLmFkZHJlc3MudG9Mb3dlckNhc2UoKSA9PT0gc2VuZGVyLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgLy8g4pSA4pSAIE1lc3NhZ2luZyBsYXllciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy9cbiAgLy8gTG9jYWwgZGVsaXZlcnk6IGhhbmRsZXJzIGFyZSBjYWxsZWQgc3luY2hyb25vdXNseSBvbiBlbWl0LlxuICAvLyBSZW1vdGUgZGVsaXZlcnk6IGNvbW11bmljYXRpb25zQ29udHJvbGxlci5zZW5kKCkgKGJ5cGFzc2VzIE1lc3NhZ2VCdXMgZmx1c2ggcXVldWUpLlxuICAvLyBSZW1vdGUgcmVjZXB0aW9uOiBNZXNzYWdlQnVzLm9uKCkgKGxpc3RlbnMgb24gdGhlIGdsb2JhbCBvbkNvbW1zTWVzc2FnZSBvYnNlcnZhYmxlKS5cblxuICBjb25zdCBoYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBNZXNzYWdlSGFuZGxlcj4oKTtcbiAgY29uc3QgcmVjZWl2ZXIgPSBuZXcgTWVzc2FnZUJ1cygpO1xuXG4gIGZ1bmN0aW9uIG9uTWVzc2FnZSh0eXBlOiBzdHJpbmcsIGhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgaGFuZGxlcnMuc2V0KHR5cGUsIGhhbmRsZXIpO1xuICAgIHJlY2VpdmVyLm9uKHR5cGUsIGhhbmRsZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25BZG1pbk1lc3NhZ2UodHlwZTogc3RyaW5nLCBoYW5kbGVyOiBNZXNzYWdlSGFuZGxlcikge1xuICAgIG9uTWVzc2FnZSh0eXBlLCAocGF5bG9hZCwgc2VuZGVyKSA9PiB7XG4gICAgICBpZiAoIWlzQWRtaW5XYWxsZXQoc2VuZGVyKSkgcmV0dXJuO1xuICAgICAgaGFuZGxlcihwYXlsb2FkLCBzZW5kZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZW1pdE1lc3NhZ2UodHlwZTogc3RyaW5nLCBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgIGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVycy5nZXQodHlwZSk7XG4gICAgaWYgKGhhbmRsZXIpIGhhbmRsZXIocGF5bG9hZCwgJ3NlbGYnKTtcblxuICAgIGNvbnN0IHJhdyA9IEpTT04uc3RyaW5naWZ5KHsgbWVzc2FnZTogdHlwZSwgcGF5bG9hZCB9KTtcbiAgICBjb21tc1NlbmQoeyBtZXNzYWdlOiByYXcgfSkuY2F0Y2goKCkgPT4ge30pO1xuICB9XG5cbiAgLy8g4pSA4pSAIDEuIERpc2FibGUgQ1JEVCBzeW5jIGZvciBWaWRlb1BsYXllciBvbiBhZG1pbi1jb250cm9sbGVkIGVudGl0aWVzIOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGZvciAoY29uc3QgdnAgb2YgZ2V0VmlkZW9QbGF5ZXJzKGVuZ2luZSkpIHtcbiAgICBjb25zdCBlbnRpdHkgPSB2cC5lbnRpdHkgYXMgRW50aXR5O1xuICAgIGNvbnN0IHN5bmMgPSBTeW5jQ29tcG9uZW50cy5nZXRPck51bGwoZW50aXR5KTtcbiAgICBpZiAoc3luYykge1xuICAgICAgY29uc3Qgd2l0aG91dFZpZGVvUGxheWVyID0gc3luYy5jb21wb25lbnRJZHMuZmlsdGVyKFxuICAgICAgICAoaWQ6IG51bWJlcikgPT4gaWQgIT09IFZpZGVvUGxheWVyLmNvbXBvbmVudElkLFxuICAgICAgKTtcbiAgICAgIFN5bmNDb21wb25lbnRzLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHsgY29tcG9uZW50SWRzOiB3aXRob3V0VmlkZW9QbGF5ZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIDIuIFNlZWQgYXV0aG9yaXRhdGl2ZSBzdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gVmlkZW9QbGF5ZXI6IHNlZWRlZCBmcm9tIFZpZGVvU2NyZWVuLmRlZmF1bHRVUkwgKGRlcGxveS10aW1lLCB0cnVzdGVkKS5cbiAgLy8gVGV4dEFubm91bmNlbWVudHM6IHNlZWRlZCBhcyBlbXB0eSAobm8gZGVmYXVsdCBhbm5vdW5jZW1lbnQgYXQgZGVwbG95IHRpbWUpLlxuXG4gIGF1dGhvcml0YXRpdmVBbm5vdW5jZW1lbnQgPSB7IHRleHQ6ICcnLCBhdXRob3I6ICcnLCBpZDogJycgfTtcblxuICBmb3IgKGNvbnN0IHZwIG9mIGdldFZpZGVvUGxheWVycyhlbmdpbmUpKSB7XG4gICAgY29uc3QgZW50aXR5ID0gdnAuZW50aXR5IGFzIEVudGl0eTtcbiAgICBjb25zdCBzY3JlZW4gPSBWaWRlb1NjcmVlbi5nZXRPck51bGwoZW50aXR5KTtcbiAgICBjb25zdCB2aWRlbyA9IFZpZGVvUGxheWVyLmdldE9yTnVsbChlbnRpdHkpO1xuICAgIGlmICghdmlkZW8pIGNvbnRpbnVlO1xuXG4gICAgY29uc3Qgc3JjID0gc2NyZWVuPy5kZWZhdWx0VVJMIHx8IHZpZGVvLnNyYztcbiAgICBhdXRob3JpdGF0aXZlVmlkZW8uc2V0KGVudGl0eSwge1xuICAgICAgc3JjLFxuICAgICAgcGxheWluZzogdmlkZW8ucGxheWluZyxcbiAgICAgIHZvbHVtZTogdmlkZW8udm9sdW1lLFxuICAgICAgbG9vcDogdmlkZW8ubG9vcCxcbiAgICB9KTtcblxuICAgIGlmICh2aWRlby5zcmMgIT09IHNyYykge1xuICAgICAgVmlkZW9QbGF5ZXIuZ2V0TXV0YWJsZShlbnRpdHkpLnNyYyA9IHNyYztcbiAgICB9XG4gIH1cblxuICAvLyDilIDilIAgMy4gUmVnaXN0ZXIgY29tbWFuZCBoYW5kbGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBvbkFkbWluTWVzc2FnZShNU0cuU0VUX1ZJREVPLCAocGF5bG9hZCwgX3NlbmRlcikgPT4ge1xuICAgIGNvbnN0IGVudGl0eSA9IHBheWxvYWQuZW50aXR5IGFzIEVudGl0eTtcbiAgICBjb25zdCBjdXJyZW50ID0gVmlkZW9QbGF5ZXIuZ2V0T3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKCFjdXJyZW50KSByZXR1cm47XG5cbiAgICBjb25zdCB1cGRhdGVkOiBWaWRlb1N0YXRlID0ge1xuICAgICAgc3JjOiBwYXlsb2FkLnNyYyA/PyBjdXJyZW50LnNyYyxcbiAgICAgIHBsYXlpbmc6IHBheWxvYWQucGxheWluZyA/PyBjdXJyZW50LnBsYXlpbmcsXG4gICAgICB2b2x1bWU6IHBheWxvYWQudm9sdW1lID8/IGN1cnJlbnQudm9sdW1lLFxuICAgICAgbG9vcDogcGF5bG9hZC5sb29wID8/IGN1cnJlbnQubG9vcCxcbiAgICB9O1xuICAgIGF1dGhvcml0YXRpdmVWaWRlby5zZXQoZW50aXR5LCB1cGRhdGVkKTtcblxuICAgIGNvbnN0IHZpZGVvID0gVmlkZW9QbGF5ZXIuZ2V0TXV0YWJsZShlbnRpdHkpO1xuICAgIHZpZGVvLnNyYyA9IHVwZGF0ZWQuc3JjO1xuICAgIHZpZGVvLnBsYXlpbmcgPSB1cGRhdGVkLnBsYXlpbmc7XG4gICAgdmlkZW8udm9sdW1lID0gdXBkYXRlZC52b2x1bWU7XG4gICAgdmlkZW8ubG9vcCA9IHVwZGF0ZWQubG9vcDtcbiAgICBpZiAocGF5bG9hZC5wb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSB2aWRlby5wb3NpdGlvbiA9IHBheWxvYWQucG9zaXRpb247XG5cbiAgICBhZG1pbkhhc0FjdGVkID0gdHJ1ZTtcbiAgfSk7XG5cbiAgb25BZG1pbk1lc3NhZ2UoTVNHLlNFVF9BTk5PVU5DRU1FTlQsIChwYXlsb2FkLCBfc2VuZGVyKSA9PiB7XG4gICAgYXV0aG9yaXRhdGl2ZUFubm91bmNlbWVudCA9IHtcbiAgICAgIHRleHQ6IHBheWxvYWQudGV4dCxcbiAgICAgIGF1dGhvcjogcGF5bG9hZC5hdXRob3IsXG4gICAgICBpZDogcGF5bG9hZC5pZCxcbiAgICB9O1xuICAgIGNvbnN0IHRhID0gVGV4dEFubm91bmNlbWVudHMuZ2V0TXV0YWJsZU9yTnVsbChhZG1pblRvb2xraXRVaUVudGl0eSk7XG4gICAgaWYgKCF0YSkgcmV0dXJuO1xuICAgIHRhLnRleHQgPSBwYXlsb2FkLnRleHQ7XG4gICAgdGEuYXV0aG9yID0gcGF5bG9hZC5hdXRob3I7XG4gICAgdGEuaWQgPSBwYXlsb2FkLmlkO1xuICAgIGFkbWluSGFzQWN0ZWQgPSB0cnVlO1xuICB9KTtcblxuICBvbkFkbWluTWVzc2FnZShNU0cuQ0xFQVJfQU5OT1VOQ0VNRU5ULCAoX3BheWxvYWQsIF9zZW5kZXIpID0+IHtcbiAgICBhdXRob3JpdGF0aXZlQW5ub3VuY2VtZW50ID0geyB0ZXh0OiAnJywgYXV0aG9yOiAnJywgaWQ6ICcnIH07XG4gICAgY29uc3QgdGEgPSBUZXh0QW5ub3VuY2VtZW50cy5nZXRNdXRhYmxlT3JOdWxsKGFkbWluVG9vbGtpdFVpRW50aXR5KTtcbiAgICBpZiAoIXRhKSByZXR1cm47XG4gICAgdGEudGV4dCA9ICcnO1xuICAgIHRhLmF1dGhvciA9ICcnO1xuICAgIHRhLmlkID0gJyc7XG4gICAgYWRtaW5IYXNBY3RlZCA9IHRydWU7XG4gIH0pO1xuXG4gIC8vIOKUgOKUgCA0LiBTdGF0ZSBzeW5jIGZvciBsYXRlIGpvaW5lcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgZnVuY3Rpb24gYnJvYWRjYXN0Q3VycmVudFN0YXRlKCkge1xuICAgIGNvbnN0IHZpZGVvOiBTeW5jU3RhdGVQYXlsb2FkWyd2aWRlbyddID0gW107XG4gICAgZm9yIChjb25zdCB2cCBvZiBnZXRWaWRlb1BsYXllcnMoZW5naW5lKSkge1xuICAgICAgY29uc3QgZW50aXR5ID0gdnAuZW50aXR5IGFzIEVudGl0eTtcbiAgICAgIGNvbnN0IHNjcmVlbiA9IFZpZGVvU2NyZWVuLmdldE9yTnVsbChlbnRpdHkpO1xuICAgICAgY29uc3QgY3VycmVudCA9IFZpZGVvUGxheWVyLmdldE9yTnVsbChlbnRpdHkpO1xuICAgICAgaWYgKCFjdXJyZW50KSBjb250aW51ZTtcbiAgICAgIGlmIChjdXJyZW50LnNyYyAhPT0gKHNjcmVlbj8uZGVmYXVsdFVSTCB8fCAnJykpIHtcbiAgICAgICAgdmlkZW8ucHVzaCh7IGVudGl0eTogZW50aXR5IGFzIG51bWJlciwgLi4uY3VycmVudCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0YSA9IFRleHRBbm5vdW5jZW1lbnRzLmdldE9yTnVsbChhZG1pblRvb2xraXRVaUVudGl0eSk7XG4gICAgY29uc3QgYW5ub3VuY2VtZW50ID0gdGE/LmlkID8geyB0ZXh0OiB0YS50ZXh0LCBhdXRob3I6IHRhLmF1dGhvciA/PyAnJywgaWQ6IHRhLmlkIH0gOiBudWxsO1xuXG4gICAgaWYgKHZpZGVvLmxlbmd0aCA9PT0gMCAmJiAhYW5ub3VuY2VtZW50KSByZXR1cm47XG4gICAgZW1pdE1lc3NhZ2UoTVNHLlNZTkNfU1RBVEUsIHsgdmlkZW8sIGFubm91bmNlbWVudCB9KTtcbiAgfVxuXG4gIG9uQWRtaW5NZXNzYWdlKE1TRy5TWU5DX1NUQVRFLCAocGF5bG9hZDogU3luY1N0YXRlUGF5bG9hZCwgX3NlbmRlcikgPT4ge1xuICAgIGZvciAoY29uc3QgdnMgb2YgcGF5bG9hZC52aWRlbykge1xuICAgICAgY29uc3QgZW50aXR5ID0gdnMuZW50aXR5IGFzIEVudGl0eTtcbiAgICAgIGF1dGhvcml0YXRpdmVWaWRlby5zZXQoZW50aXR5LCB7XG4gICAgICAgIHNyYzogdnMuc3JjLFxuICAgICAgICBwbGF5aW5nOiB2cy5wbGF5aW5nLFxuICAgICAgICB2b2x1bWU6IHZzLnZvbHVtZSxcbiAgICAgICAgbG9vcDogdnMubG9vcCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdmlkZW8gPSBWaWRlb1BsYXllci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgICBpZiAoIXZpZGVvKSBjb250aW51ZTtcbiAgICAgIHZpZGVvLnNyYyA9IHZzLnNyYztcbiAgICAgIGlmICh2cy5wbGF5aW5nICE9PSB1bmRlZmluZWQpIHZpZGVvLnBsYXlpbmcgPSB2cy5wbGF5aW5nO1xuICAgICAgaWYgKHZzLnZvbHVtZSAhPT0gdW5kZWZpbmVkKSB2aWRlby52b2x1bWUgPSB2cy52b2x1bWU7XG4gICAgICBpZiAodnMubG9vcCAhPT0gdW5kZWZpbmVkKSB2aWRlby5sb29wID0gdnMubG9vcDtcbiAgICB9XG5cbiAgICBpZiAocGF5bG9hZC5hbm5vdW5jZW1lbnQ/LmlkKSB7XG4gICAgICBhdXRob3JpdGF0aXZlQW5ub3VuY2VtZW50ID0geyAuLi5wYXlsb2FkLmFubm91bmNlbWVudCB9O1xuICAgICAgY29uc3QgdGEgPSBUZXh0QW5ub3VuY2VtZW50cy5nZXRNdXRhYmxlT3JOdWxsKGFkbWluVG9vbGtpdFVpRW50aXR5KTtcbiAgICAgIGlmICh0YSkge1xuICAgICAgICB0YS50ZXh0ID0gcGF5bG9hZC5hbm5vdW5jZW1lbnQudGV4dDtcbiAgICAgICAgdGEuYXV0aG9yID0gcGF5bG9hZC5hbm5vdW5jZW1lbnQuYXV0aG9yO1xuICAgICAgICB0YS5pZCA9IHBheWxvYWQuYW5ub3VuY2VtZW50LmlkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFkbWluSGFzQWN0ZWQgPSB0cnVlO1xuICB9KTtcblxuICBvbk1lc3NhZ2UoTVNHLlJFUVVFU1RfU1RBVEUsIChfcGF5bG9hZCwgX3NlbmRlcikgPT4ge1xuICAgIGlmIChhZG1pbkhhc0FjdGVkKSBicm9hZGNhc3RDdXJyZW50U3RhdGUoKTtcbiAgfSk7XG5cbiAgcGxheWVyc0hlbHBlcj8ub25FbnRlclNjZW5lKCgpID0+IHtcbiAgICBpZiAoYWRtaW5IYXNBY3RlZCkgYnJvYWRjYXN0Q3VycmVudFN0YXRlKCk7XG4gIH0pO1xuXG4gIC8vIFdoZW4gYW4gYWRtaW4gc2lnbmFscyB0aGF0IHRoZSBhZG1pbiBsaXN0IGNoYW5nZWQsIGFsbCBwYXJ0aWNpcGFudHMgcmVmZXRjaFxuICBvbkFkbWluTWVzc2FnZShNU0cuU1lOQ19BRE1JTlMsIChfcGF5bG9hZCwgX3NlbmRlcikgPT4ge1xuICAgIG9uUmVmZXRjaEFkbWlucz8uKCk7XG4gIH0pO1xuXG4gIC8vIFJlcXVlc3Qgc3RhdGUgZnJvbSBhbnkgZXhpc3RpbmcgcGFydGljaXBhbnQgdGhhdCBoYXMgYWRtaW4gc3RhdGVcbiAgZW1pdE1lc3NhZ2UoTVNHLlJFUVVFU1RfU1RBVEUsIHt9KTtcblxuICAvLyDilIDilIAgNS4gUmV2ZXJ0IHN5c3RlbSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy9cbiAgLy8gQXR0YWNrZXIgQ1JEVCB3cml0ZXMgYnlwYXNzIFN5bmNDb21wb25lbnRzIChpbmplY3RlZCBkaXJlY3RseSB2aWEgTGl2ZUtpdClcbiAgLy8gYnV0IGFyZSBjYXVnaHQgaGVyZS4gQWRtaW4gY29tbWFuZHMgdXBkYXRlIGF1dGhvcml0YXRpdmVWaWRlby9Bbm5vdW5jZW1lbnRcbiAgLy8gYmVmb3JlIG11dGF0aW5nIGNvbXBvbmVudHMsIHNvIGxlZ2l0aW1hdGUgY2hhbmdlcyBhcmUgbmV2ZXIgcmV2ZXJ0ZWQuXG5cbiAgZW5naW5lLmFkZFN5c3RlbSgoKSA9PiB7XG4gICAgZm9yIChjb25zdCBbZW50aXR5LCBhdXRoU3RhdGVdIG9mIGF1dGhvcml0YXRpdmVWaWRlbykge1xuICAgICAgY29uc3QgdnAgPSBWaWRlb1BsYXllci5nZXRPck51bGwoZW50aXR5KTtcbiAgICAgIGlmICghdnApIGNvbnRpbnVlO1xuICAgICAgaWYgKHZwLnNyYyAhPT0gYXV0aFN0YXRlLnNyYykge1xuICAgICAgICBjb25zdCBtdXQgPSBWaWRlb1BsYXllci5nZXRNdXRhYmxlKGVudGl0eSk7XG4gICAgICAgIG11dC5zcmMgPSBhdXRoU3RhdGUuc3JjO1xuICAgICAgICBtdXQucGxheWluZyA9IGF1dGhTdGF0ZS5wbGF5aW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhdXRob3JpdGF0aXZlQW5ub3VuY2VtZW50KSB7XG4gICAgICBjb25zdCB0YSA9IFRleHRBbm5vdW5jZW1lbnRzLmdldE9yTnVsbChhZG1pblRvb2xraXRVaUVudGl0eSk7XG4gICAgICBpZiAodGEgJiYgYXV0aG9yaXRhdGl2ZUFubm91bmNlbWVudC5pZCAmJiB0YS5pZCAhPT0gYXV0aG9yaXRhdGl2ZUFubm91bmNlbWVudC5pZCkge1xuICAgICAgICBjb25zdCBtdXQgPSBUZXh0QW5ub3VuY2VtZW50cy5nZXRNdXRhYmxlKGFkbWluVG9vbGtpdFVpRW50aXR5KTtcbiAgICAgICAgbXV0LnRleHQgPSBhdXRob3JpdGF0aXZlQW5ub3VuY2VtZW50LnRleHQ7XG4gICAgICAgIG11dC5hdXRob3IgPSBhdXRob3JpdGF0aXZlQW5ub3VuY2VtZW50LmF1dGhvcjtcbiAgICAgICAgbXV0LmlkID0gYXV0aG9yaXRhdGl2ZUFubm91bmNlbWVudC5pZDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIOKUgOKUgCBJbnN0YW5jZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBpbnN0YW5jZSA9IHtcbiAgICBlbWl0U2V0VmlkZW8oZW50aXR5OiBFbnRpdHksIHByb3BzOiBQYXJ0aWFsPFBCVmlkZW9QbGF5ZXI+KSB7XG4gICAgICBlbWl0TWVzc2FnZShNU0cuU0VUX1ZJREVPLCB7IGVudGl0eSwgLi4ucHJvcHMgfSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgfSxcblxuICAgIGVtaXRTZXRBbm5vdW5jZW1lbnQodGV4dDogc3RyaW5nLCBhdXRob3I/OiBzdHJpbmcsIGlkPzogc3RyaW5nKSB7XG4gICAgICBlbWl0TWVzc2FnZShNU0cuU0VUX0FOTk9VTkNFTUVOVCwge1xuICAgICAgICB0ZXh0LFxuICAgICAgICBhdXRob3I6IGF1dGhvciA/PyAnJyxcbiAgICAgICAgaWQ6IGlkID8/ICcnLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGVtaXRDbGVhckFubm91bmNlbWVudCgpIHtcbiAgICAgIGVtaXRNZXNzYWdlKE1TRy5DTEVBUl9BTk5PVU5DRU1FTlQsIHt9KTtcbiAgICB9LFxuXG4gICAgZW1pdFN5bmNBZG1pbnMoKSB7XG4gICAgICBlbWl0TWVzc2FnZShNU0cuU1lOQ19BRE1JTlMsIHt9KTtcbiAgICB9LFxuXG4gICAgdXBkYXRlQWRtaW5MaXN0KGFkbWluczogU2NlbmVBZG1pbltdKSB7XG4gICAgICBzY2VuZUFkbWlucyA9IGFkbWlucztcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbiJdfQ==
|
|
@@ -4,9 +4,10 @@ import { type IEngine, type PointerEventsSystem } from '@dcl/ecs';
|
|
|
4
4
|
import { type IPlayersHelper, type ISDKHelpers } from '../definitions';
|
|
5
5
|
import { type State } from './types';
|
|
6
6
|
export declare const nextTickFunctions: (() => void)[];
|
|
7
|
-
export declare
|
|
7
|
+
export declare const state: State;
|
|
8
8
|
export declare const containerBackgroundColor: Color4.MutableColor4;
|
|
9
9
|
export declare function fetchSceneAdmins(): Promise<void>;
|
|
10
|
+
export declare function fetchAndSyncSceneAdmins(): Promise<void>;
|
|
10
11
|
export declare function fetchSceneBans(): Promise<void>;
|
|
11
12
|
export declare function clearSceneBansCache(): void;
|
|
12
13
|
export declare function getSmartItems(engine: IEngine): import("@dcl/ecs").DeepReadonlyObject<import("@dcl/ecs").MapResult<{
|
|
@@ -14,5 +15,5 @@ export declare function getSmartItems(engine: IEngine): import("@dcl/ecs").DeepR
|
|
|
14
15
|
customName: import("@dcl/ecs").ISchema<string>;
|
|
15
16
|
defaultAction: import("@dcl/ecs").ISchema<string>;
|
|
16
17
|
}>>[];
|
|
17
|
-
export declare function initializeAdminData(engine: IEngine, sdkHelpers?: ISDKHelpers): Promise<void>;
|
|
18
|
+
export declare function initializeAdminData(engine: IEngine, sdkHelpers?: ISDKHelpers, playersHelper?: IPlayersHelper): Promise<void>;
|
|
18
19
|
export declare function createAdminToolkitUI(engine: IEngine, pointerEventsSystem: PointerEventsSystem, reactBasedUiSystem: ReactBasedUiSystem, sdkHelpers?: ISDKHelpers, playersHelper?: IPlayersHelper): void;
|
|
@@ -15,9 +15,10 @@ import { showcaseState, sharePresentationState } from './VideoControl/DclCast';
|
|
|
15
15
|
import { SpeakerShowcase } from './VideoControl/DclCast/SpeakerShowcase';
|
|
16
16
|
import SharePresentationModal from './VideoControl/DclCast/SharePresentationModal';
|
|
17
17
|
import { isPreview } from './fetch-utils';
|
|
18
|
+
import { initAdminMessageBus, getAdminMessageBus } from './admin-message-bus';
|
|
18
19
|
export const nextTickFunctions = [];
|
|
19
20
|
const ADMIN_TOOLKIT_VIRTUAL_UI_SIZE = { virtualWidth: 1920, virtualHeight: 1080 };
|
|
20
|
-
export
|
|
21
|
+
export const state = {
|
|
21
22
|
adminToolkitUiEntity: 0,
|
|
22
23
|
panelOpen: false,
|
|
23
24
|
activeTab: TabType.NONE,
|
|
@@ -88,6 +89,15 @@ export async function fetchSceneAdmins() {
|
|
|
88
89
|
canBeRemoved: !!$.canBeRemoved,
|
|
89
90
|
}))
|
|
90
91
|
.sort(a => (a.canBeRemoved ? 1 : -1));
|
|
92
|
+
if (adminDataInitialized) {
|
|
93
|
+
getAdminMessageBus().updateAdminList(sceneAdminsCache);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
export async function fetchAndSyncSceneAdmins() {
|
|
97
|
+
await fetchSceneAdmins();
|
|
98
|
+
if (adminDataInitialized) {
|
|
99
|
+
getAdminMessageBus().emitSyncAdmins();
|
|
100
|
+
}
|
|
91
101
|
}
|
|
92
102
|
export async function fetchSceneBans() {
|
|
93
103
|
const [error, response] = await getSceneBans();
|
|
@@ -104,10 +114,6 @@ export function getSmartItems(engine) {
|
|
|
104
114
|
const adminToolkitComponent = getAdminToolkitComponent(engine);
|
|
105
115
|
return Array.from(adminToolkitComponent.smartItemsControl.smartItems ?? []);
|
|
106
116
|
}
|
|
107
|
-
function getRewards(engine) {
|
|
108
|
-
const adminToolkitComponent = getAdminToolkitComponent(engine);
|
|
109
|
-
return Array.from(adminToolkitComponent?.rewardsControl?.rewardItems ?? []);
|
|
110
|
-
}
|
|
111
117
|
function initTextAnnouncementSync(engine) {
|
|
112
118
|
const { TextAnnouncements } = getComponents(engine);
|
|
113
119
|
TextAnnouncements.createOrReplace(state.adminToolkitUiEntity, {
|
|
@@ -117,15 +123,15 @@ function initTextAnnouncementSync(engine) {
|
|
|
117
123
|
});
|
|
118
124
|
}
|
|
119
125
|
let adminDataInitialized = false;
|
|
120
|
-
export async function initializeAdminData(engine, sdkHelpers) {
|
|
126
|
+
export async function initializeAdminData(engine, sdkHelpers, playersHelper) {
|
|
121
127
|
if (!adminDataInitialized) {
|
|
122
|
-
const {
|
|
128
|
+
const { VideoControlState } = getComponents(engine);
|
|
123
129
|
state.adminToolkitUiEntity = getAdminToolkitEntity(engine) ?? engine.addEntity();
|
|
124
130
|
initTextAnnouncementSync(engine);
|
|
125
131
|
if (!VideoControlState.getOrNull(state.adminToolkitUiEntity)) {
|
|
126
132
|
VideoControlState.create(state.adminToolkitUiEntity);
|
|
127
133
|
}
|
|
128
|
-
sdkHelpers?.syncEntity?.(state.adminToolkitUiEntity, [VideoControlState.componentId
|
|
134
|
+
sdkHelpers?.syncEntity?.(state.adminToolkitUiEntity, [VideoControlState.componentId], ADMIN_TOOLS_ENTITY);
|
|
129
135
|
engine.addSystem(() => {
|
|
130
136
|
if (nextTickFunctions.length > 0) {
|
|
131
137
|
const nextTick = nextTickFunctions.shift();
|
|
@@ -135,12 +141,13 @@ export async function initializeAdminData(engine, sdkHelpers) {
|
|
|
135
141
|
}
|
|
136
142
|
}, Number.POSITIVE_INFINITY);
|
|
137
143
|
await Promise.all([fetchSceneAdmins(), fetchSceneBans()]);
|
|
144
|
+
initAdminMessageBus(engine, sceneAdminsCache, state.adminToolkitUiEntity, playersHelper, fetchSceneAdmins);
|
|
138
145
|
adminDataInitialized = true;
|
|
139
146
|
console.log('initializeAdminData - initialized');
|
|
140
147
|
}
|
|
141
148
|
}
|
|
142
149
|
export function createAdminToolkitUI(engine, pointerEventsSystem, reactBasedUiSystem, sdkHelpers, playersHelper) {
|
|
143
|
-
initializeAdminData(engine, sdkHelpers).then(() => {
|
|
150
|
+
initializeAdminData(engine, sdkHelpers, playersHelper).then(() => {
|
|
144
151
|
console.log('createAdminToolkitUI - initialized');
|
|
145
152
|
reactBasedUiSystem.setUiRenderer(() => uiComponent(engine, pointerEventsSystem, sdkHelpers, playersHelper), ADMIN_TOOLKIT_VIRTUAL_UI_SIZE);
|
|
146
153
|
});
|
|
@@ -327,4 +334,4 @@ const uiComponent = (engine, pointerEventsSystem, sdkHelpers, playersHelper) =>
|
|
|
327
334
|
sharePresentationState.show && sharePresentationState.onClose && (ReactEcs.createElement(SharePresentationModal, { onClose: sharePresentationState.onClose, streamingKey: state.videoControl.dclCast?.streamingKey ?? '' })),
|
|
328
335
|
];
|
|
329
336
|
};
|
|
330
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9pbmRleC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLFFBQVEsRUFBRSxFQUNmLEtBQUssRUFDTCxNQUFNLElBQUksU0FBUyxFQUNuQixRQUFRLEdBRVQsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0wsYUFBYSxHQUlkLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQWMsT0FBTyxFQUEwQixNQUFNLFNBQVMsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixzQkFBc0IsR0FFdkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBcUIsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDekUsT0FBTyxzQkFBc0IsTUFBTSwrQ0FBK0MsQ0FB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QUFhLENBQUMsY0FBYyxFQUM1QyxhQUFhLEVBQUUsYUFBYSxDQUFDLGFBQWEsRUFDMUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxZQUFZLEVBQ3hDLE9BQU8sRUFBRSxhQUFhLENBQUMsT0FBTyxHQUM5QixDQUNIO1FBQ0gsc0JBQXNCLENBQUMsSUFBSSxJQUFJLHNCQUFzQixDQUFDLE9BQU8sSUFBSSxDQUMvRCx1QkFBQyxzQkFBc0IsSUFDckIsT0FBTyxFQUFFLHNCQUFzQixDQUFDLE9BQU8sRUFDdkMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFlBQVksSUFBSSxFQUFFLEdBQzVELENBQ0g7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sb3I0IH0gZnJvbSAnQGRjbC9zZGsvbWF0aCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzIC0tIFJlYWN0RWNzIGlzIHJlcXVpcmVkIGZvciBKU1ggZmFjdG9yeVxuaW1wb3J0IFJlYWN0RWNzLCB7XG4gIExhYmVsLFxuICBCdXR0b24gYXMgRENMQnV0dG9uLFxuICBVaUVudGl0eSxcbiAgdHlwZSBSZWFjdEJhc2VkVWlTeXN0ZW0sXG59IGZyb20gJ0BkY2wvcmVhY3QtZWNzJztcbmltcG9ydCB7IHR5cGUgRW50aXR5LCB0eXBlIElFbmdpbmUsIHR5cGUgUG9pbnRlckV2ZW50c1N5c3RlbSB9IGZyb20gJ0BkY2wvZWNzJztcbmltcG9ydCB7XG4gIGdldENvbXBvbmVudHMsXG4gIHR5cGUgR2V0UGxheWVyRGF0YVJlcyxcbiAgdHlwZSBJUGxheWVyc0hlbHBlcixcbiAgdHlwZSBJU0RLSGVscGVycyxcbn0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IHsgVmlkZW9Db250cm9sIH0gZnJvbSAnLi9WaWRlb0NvbnRyb2wnO1xuaW1wb3J0IHsgVGV4dEFubm91bmNlbWVudHNDb250cm9sIH0gZnJvbSAnLi9UZXh0QW5ub3VuY2VtZW50c0NvbnRyb2wnO1xuaW1wb3J0IHsgU21hcnRJdGVtc0NvbnRyb2wgfSBmcm9tICcuL1NtYXJ0SXRlbXNDb250cm9sJztcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uJztcbmltcG9ydCB7IFRleHRBbm5vdW5jZW1lbnRzIH0gZnJvbSAnLi9UZXh0QW5ub3VuY2VtZW50cyc7XG5pbXBvcnQgeyBnZXRDb250ZW50VXJsIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdHlwZSBTdGF0ZSwgVGFiVHlwZSwgdHlwZSBTZWxlY3RlZFNtYXJ0SXRlbSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgZ2V0QnRuTW9kZXJhdGlvbkNvbnRyb2wsXG4gIE1vZGVyYXRpb25Db250cm9sLFxuICBtb2RlcmF0aW9uQ29udHJvbFN0YXRlLFxuICB0eXBlIFNjZW5lQWRtaW4sXG59IGZyb20gJy4vTW9kZXJhdGlvbkNvbnRyb2wnO1xuaW1wb3J0IHsgZ2V0U2NlbmVBZG1pbnMsIGdldFNjZW5lQmFucywgdHlwZSBTY2VuZUJhblVzZXIgfSBmcm9tICcuL01vZGVyYXRpb25Db250cm9sL2FwaSc7XG5pbXBvcnQgeyBNb2RhbFVzZXJMaXN0LCBVc2VyTGlzdFR5cGUgfSBmcm9tICcuL01vZGVyYXRpb25Db250cm9sL1VzZXJzTGlzdCc7XG5pbXBvcnQgeyBzaG93Y2FzZVN0YXRlLCBzaGFyZVByZXNlbnRhdGlvblN0YXRlIH0gZnJvbSAnLi9WaWRlb0NvbnRyb2wvRGNsQ2FzdCc7XG5pbXBvcnQgeyBTcGVha2VyU2hvd2Nhc2UgfSBmcm9tICcuL1ZpZGVvQ29udHJvbC9EY2xDYXN0L1NwZWFrZXJTaG93Y2FzZSc7XG5pbXBvcnQgU2hhcmVQcmVzZW50YXRpb25Nb2RhbCBmcm9tICcuL1ZpZGVvQ29udHJvbC9EY2xDYXN0L1NoYXJlUHJlc2VudGF0aW9uTW9kYWwnO1xuaW1wb3J0IHsgaXNQcmV2aWV3IH0gZnJvbSAnLi9mZXRjaC11dGlscyc7XG5cbmV4cG9ydCBjb25zdCBuZXh0VGlja0Z1bmN0aW9uczogKCgpID0+IHZvaWQpW10gPSBbXTtcbmNvbnN0IEFETUlOX1RPT0xLSVRfVklSVFVBTF9VSV9TSVpFID0geyB2aXJ0dWFsV2lkdGg6IDE5MjAsIHZpcnR1YWxIZWlnaHQ6IDEwODAgfTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuZXhwb3J0IGxldCBzdGF0ZTogU3RhdGUgPSB7XG4gIGFkbWluVG9vbGtpdFVpRW50aXR5OiAwIGFzIEVudGl0eSxcbiAgcGFuZWxPcGVuOiBmYWxzZSxcbiAgYWN0aXZlVGFiOiBUYWJUeXBlLk5PTkUsXG4gIHZpZGVvQ29udHJvbDoge1xuICAgIHNlbGVjdGVkVmlkZW9QbGF5ZXI6IHVuZGVmaW5lZCxcbiAgICBzZWxlY3RlZFN0cmVhbTogdW5kZWZpbmVkLFxuICAgIGRjbENhc3Q6IHVuZGVmaW5lZCxcbiAgICBpc01pbmltaXplZDogZmFsc2UsXG4gICAgcHJlc2VudGF0aW9uU3RhdGU6IHVuZGVmaW5lZCxcbiAgfSxcbiAgc21hcnRJdGVtc0NvbnRyb2w6IHtcbiAgICBzZWxlY3RlZFNtYXJ0SXRlbTogdW5kZWZpbmVkLFxuICAgIHNtYXJ0SXRlbXM6IG5ldyBNYXA8RW50aXR5LCBTZWxlY3RlZFNtYXJ0SXRlbT4oKSxcbiAgfSxcbiAgdGV4dEFubm91bmNlbWVudENvbnRyb2w6IHtcbiAgICBlbnRpdHk6IHVuZGVmaW5lZCxcbiAgICB0ZXh0OiB1bmRlZmluZWQsXG4gICAgbWVzc2FnZVJhdGVUcmFja2VyOiBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpLFxuICAgIGFubm91bmNlbWVudHM6IFtdLFxuICAgIG1heEFubm91bmNlbWVudHM6IDQsXG4gIH0sXG4gIHJld2FyZHNDb250cm9sOiB7XG4gICAgc2VsZWN0ZWRSZXdhcmRJdGVtOiB1bmRlZmluZWQsXG4gIH0sXG59O1xuXG5sZXQgc2NlbmVBZG1pbnNDYWNoZTogU2NlbmVBZG1pbltdID0gW107XG5sZXQgc2NlbmVCYW5zQ2FjaGU6IFNjZW5lQmFuVXNlcltdID0gW107XG5cbi8vIGNvbnN0IEJUTl9SRVdBUkRTX0NPTlRST0wgPSBgJHtDT05URU5UX1VSTH0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtcmV3YXJkcy1jb250cm9sLWJ1dHRvbi5wbmdgXG4vLyBjb25zdCBCVE5fUkVXQVJEU19DT05UUk9MX0FDVElWRSA9IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9hZG1pbi1wYW5lbC1yZXdhcmRzLWNvbnRyb2wtYWN0aXZlLWJ1dHRvbi5wbmdgXG5cbmNvbnN0IEFETUlOX0lDT05TID0ge1xuICBnZXQgQlROX1ZJREVPX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtdmlkZW8tY29udHJvbC1idXR0b24ucG5nYDtcbiAgfSxcbiAgZ2V0IEJUTl9TTUFSVF9JVEVNX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtc21hcnQtaXRlbS1jb250cm9sLWJ1dHRvbi5wbmdgO1xuICB9LFxuICBnZXQgQlROX1RFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtdGV4dC1hbm5vdW5jZW1lbnQtY29udHJvbC1idXR0b24ucG5nYDtcbiAgfSxcbiAgZ2V0IEJUTl9BRE1JTl9UT09MS0lUX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtY29udHJvbC1idXR0b24ucG5nYDtcbiAgfSxcbiAgZ2V0IEJUTl9BRE1JTl9UT09MS0lUX0JBQ0tHUk9VTkQoKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvYmFja2dyb3VuZHMvYWRtaW4tdG9vbC1iYWNrZ3JvdW5kLnBuZ2A7XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgY29udGFpbmVyQmFja2dyb3VuZENvbG9yID0gQ29sb3I0LmNyZWF0ZSgwLCAwLCAwLCAwLjc1KTtcblxuLy8gVGhlIGVkaXRvciBzdGFydHMgdXNpbmcgZW50aXRpZXMgZnJvbSBbODAwMV0uXG5jb25zdCBBRE1JTl9UT09MU19FTlRJVFkgPSA4MDAwIGFzIEVudGl0eTtcblxuZnVuY3Rpb24gZ2V0QWRtaW5Ub29sa2l0RW50aXR5KGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCB7IEFkbWluVG9vbHMgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKTtcbiAgcmV0dXJuIEFycmF5LmZyb20oZW5naW5lLmdldEVudGl0aWVzV2l0aChBZG1pblRvb2xzKSlbMF1bMF07XG59XG5cbmZ1bmN0aW9uIGdldEFkbWluVG9vbGtpdENvbXBvbmVudChlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgeyBBZG1pblRvb2xzIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSk7XG4gIHJldHVybiBBcnJheS5mcm9tKGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoQWRtaW5Ub29scykpWzBdWzFdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hTY2VuZUFkbWlucygpIHtcbiAgY29uc3QgW2Vycm9yLCByZXNwb25zZV0gPSBhd2FpdCBnZXRTY2VuZUFkbWlucygpO1xuXG4gIGlmIChlcnJvcikge1xuICAgIC8vIHVzZXIgZG9lc250IGhhdmUgcGVybWlzc2lvbnNcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IGVycm9yIH0pKTtcbiAgICBzY2VuZUFkbWluc0NhY2hlID0gW107XG4gICAgcmV0dXJuO1xuICB9XG4gIHNjZW5lQWRtaW5zQ2FjaGUgPSAocmVzcG9uc2UgPz8gW10pXG4gICAgLm1hcCgkID0+ICh7XG4gICAgICBuYW1lOiAkLm5hbWUsXG4gICAgICBhZGRyZXNzOiAkLmFkbWluLFxuICAgICAgcm9sZTogJ2FkbWluJyBhcyBjb25zdCxcbiAgICAgIHZlcmlmaWVkOiAhJC5uYW1lLmluY2x1ZGVzKCcjJyksXG4gICAgICBjYW5CZVJlbW92ZWQ6ICEhJC5jYW5CZVJlbW92ZWQsXG4gICAgfSkpXG4gICAgLnNvcnQoYSA9PiAoYS5jYW5CZVJlbW92ZWQgPyAxIDogLTEpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoU2NlbmVCYW5zKCkge1xuICBjb25zdCBbZXJyb3IsIHJlc3BvbnNlXSA9IGF3YWl0IGdldFNjZW5lQmFucygpO1xuXG4gIGlmIChlcnJvcikge1xuICAgIHNjZW5lQmFuc0NhY2hlID0gW107XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc2NlbmVCYW5zQ2FjaGUgPSByZXNwb25zZT8ucmVzdWx0cyA/PyBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyU2NlbmVCYW5zQ2FjaGUoKSB7XG4gIHNjZW5lQmFuc0NhY2hlID0gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbWFydEl0ZW1zKGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCBhZG1pblRvb2xraXRDb21wb25lbnQgPSBnZXRBZG1pblRvb2xraXRDb21wb25lbnQoZW5naW5lKTtcblxuICByZXR1cm4gQXJyYXkuZnJvbShhZG1pblRvb2xraXRDb21wb25lbnQuc21hcnRJdGVtc0NvbnRyb2wuc21hcnRJdGVtcyA/PyBbXSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmZ1bmN0aW9uIGdldFJld2FyZHMoZW5naW5lOiBJRW5naW5lKSB7XG4gIGNvbnN0IGFkbWluVG9vbGtpdENvbXBvbmVudCA9IGdldEFkbWluVG9vbGtpdENvbXBvbmVudChlbmdpbmUpO1xuXG4gIHJldHVybiBBcnJheS5mcm9tKGFkbWluVG9vbGtpdENvbXBvbmVudD8ucmV3YXJkc0NvbnRyb2w/LnJld2FyZEl0ZW1zID8/IFtdKTtcbn1cblxuZnVuY3Rpb24gaW5pdFRleHRBbm5vdW5jZW1lbnRTeW5jKGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCB7IFRleHRBbm5vdW5jZW1lbnRzIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSk7XG5cbiAgVGV4dEFubm91bmNlbWVudHMuY3JlYXRlT3JSZXBsYWNlKHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5LCB7XG4gICAgdGV4dDogJycsXG4gICAgYXV0aG9yOiAnJyxcbiAgICBpZDogJycsXG4gIH0pO1xufVxuXG4vLyBJbml0aWFsaXplIGFkbWluIGRhdGEgYmVmb3JlIFVJIHJlbmRlcmluZ1xubGV0IGFkbWluRGF0YUluaXRpYWxpemVkID0gZmFsc2U7XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZUFkbWluRGF0YShlbmdpbmU6IElFbmdpbmUsIHNka0hlbHBlcnM/OiBJU0RLSGVscGVycykge1xuICBpZiAoIWFkbWluRGF0YUluaXRpYWxpemVkKSB7XG4gICAgY29uc3QgeyBUZXh0QW5ub3VuY2VtZW50cywgVmlkZW9Db250cm9sU3RhdGUgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKTtcblxuICAgIC8vIEluaXRpYWxpemUgQWRtaW5Ub29sa2l0VWlFbnRpdHlcbiAgICBzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSA9IGdldEFkbWluVG9vbGtpdEVudGl0eShlbmdpbmUpID8/IGVuZ2luZS5hZGRFbnRpdHkoKTtcblxuICAgIC8vIEluaXRpYWxpemUgVGV4dEFubm91bmNlbWVudHMgc3luYyBjb21wb25lbnRcbiAgICBpbml0VGV4dEFubm91bmNlbWVudFN5bmMoZW5naW5lKTtcblxuICAgIC8vIC8vIEluaXRpYWxpemUgUmV3YXJkcyBzeW5jXG4gICAgLy8gaW5pdFJld2FyZHNTeW5jKGVuZ2luZSwgc2RrSGVscGVycylcblxuICAgIGlmICghVmlkZW9Db250cm9sU3RhdGUuZ2V0T3JOdWxsKHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5KSkge1xuICAgICAgVmlkZW9Db250cm9sU3RhdGUuY3JlYXRlKHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5KTtcbiAgICB9XG5cbiAgICBzZGtIZWxwZXJzPy5zeW5jRW50aXR5Py4oXG4gICAgICBzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSxcbiAgICAgIFtWaWRlb0NvbnRyb2xTdGF0ZS5jb21wb25lbnRJZCwgVGV4dEFubm91bmNlbWVudHMuY29tcG9uZW50SWRdLFxuICAgICAgQURNSU5fVE9PTFNfRU5USVRZLFxuICAgICk7XG5cbiAgICBlbmdpbmUuYWRkU3lzdGVtKCgpID0+IHtcbiAgICAgIGlmIChuZXh0VGlja0Z1bmN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRUaWNrID0gbmV4dFRpY2tGdW5jdGlvbnMuc2hpZnQoKTtcbiAgICAgICAgaWYgKG5leHRUaWNrKSB7XG4gICAgICAgICAgbmV4dFRpY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG5cbiAgICAvLyBJbml0aWFsaXplIHNjZW5lIGRhdGFcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbZmV0Y2hTY2VuZUFkbWlucygpLCBmZXRjaFNjZW5lQmFucygpXSk7XG5cbiAgICBhZG1pbkRhdGFJbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICBjb25zb2xlLmxvZygnaW5pdGlhbGl6ZUFkbWluRGF0YSAtIGluaXRpYWxpemVkJyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFkbWluVG9vbGtpdFVJKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIHBvaW50ZXJFdmVudHNTeXN0ZW06IFBvaW50ZXJFdmVudHNTeXN0ZW0sXG4gIHJlYWN0QmFzZWRVaVN5c3RlbTogUmVhY3RCYXNlZFVpU3lzdGVtLFxuICBzZGtIZWxwZXJzPzogSVNES0hlbHBlcnMsXG4gIHBsYXllcnNIZWxwZXI/OiBJUGxheWVyc0hlbHBlcixcbikge1xuICAvLyBJbml0aWFsaXplIGFkbWluIGRhdGEgYmVmb3JlIHNldHRpbmcgdXAgdGhlIFVJXG4gIGluaXRpYWxpemVBZG1pbkRhdGEoZW5naW5lLCBzZGtIZWxwZXJzKS50aGVuKCgpID0+IHtcbiAgICBjb25zb2xlLmxvZygnY3JlYXRlQWRtaW5Ub29sa2l0VUkgLSBpbml0aWFsaXplZCcpO1xuICAgIHJlYWN0QmFzZWRVaVN5c3RlbS5zZXRVaVJlbmRlcmVyKFxuICAgICAgKCkgPT4gdWlDb21wb25lbnQoZW5naW5lLCBwb2ludGVyRXZlbnRzU3lzdGVtLCBzZGtIZWxwZXJzLCBwbGF5ZXJzSGVscGVyKSxcbiAgICAgIEFETUlOX1RPT0xLSVRfVklSVFVBTF9VSV9TSVpFLFxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc0FsbG93ZWRBZG1pbihcbiAgX2VuZ2luZTogSUVuZ2luZSxcbiAgYWRtaW5Ub29sa2l0RW50aXRpZTogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0QWRtaW5Ub29sa2l0Q29tcG9uZW50PixcbiAgcGxheWVyOiBHZXRQbGF5ZXJEYXRhUmVzIHwgbnVsbCB8IHVuZGVmaW5lZCxcbikge1xuICBpZiAoIXBsYXllcikgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHBsYXllckFkZHJlc3MgPSBwbGF5ZXIudXNlcklkLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGlzQWRtaW4gPSBzY2VuZUFkbWluc0NhY2hlLmZpbmQoJCA9PiAkLmFkZHJlc3MgPT09IHBsYXllckFkZHJlc3MpO1xuXG4gIHJldHVybiBpc0FkbWluIHx8IGlzUHJldmlldygpO1xufVxuXG5jb25zdCB1aUNvbXBvbmVudCA9IChcbiAgZW5naW5lOiBJRW5naW5lLFxuICBwb2ludGVyRXZlbnRzU3lzdGVtOiBQb2ludGVyRXZlbnRzU3lzdGVtLFxuICBzZGtIZWxwZXJzPzogSVNES0hlbHBlcnMsXG4gIHBsYXllcnNIZWxwZXI/OiBJUGxheWVyc0hlbHBlcixcbikgPT4ge1xuICBjb25zdCBhZG1pblRvb2xraXRFbnRpdHkgPSBnZXRBZG1pblRvb2xraXRDb21wb25lbnQoZW5naW5lKTtcbiAgY29uc3QgcGxheWVyID0gcGxheWVyc0hlbHBlcj8uZ2V0UGxheWVyKCk7XG4gIGNvbnN0IGlzUGxheWVyQWRtaW4gPSBpc0FsbG93ZWRBZG1pbihlbmdpbmUsIGFkbWluVG9vbGtpdEVudGl0eSwgcGxheWVyKTtcblxuICByZXR1cm4gW1xuICAgIDxVaUVudGl0eVxuICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgcG9zaXRpb25UeXBlOiAnYWJzb2x1dGUnLFxuICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIH19XG4gICAgPlxuICAgICAge2lzUGxheWVyQWRtaW4gPyAoXG4gICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICBwb3NpdGlvblR5cGU6ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7IHRvcDogMTIwLCByaWdodDogMTQgfSxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICBkaXNwbGF5OiBzdGF0ZS5wYW5lbE9wZW4gPyAnZmxleCcgOiAnbm9uZScsXG4gICAgICAgICAgICAgIHdpZHRoOiA1MDAsXG4gICAgICAgICAgICAgIHBvaW50ZXJGaWx0ZXI6ICdibG9jaycsXG4gICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggfSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwLFxuICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMTIsXG4gICAgICAgICAgICAgICAgcGFkZGluZzoge1xuICAgICAgICAgICAgICAgICAgbGVmdDogMTIsXG4gICAgICAgICAgICAgICAgICByaWdodDogMTIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdWlCYWNrZ3JvdW5kPXt7IGNvbG9yOiBjb250YWluZXJCYWNrZ3JvdW5kQ29sb3IgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgICAgdmFsdWU9XCJBRE1JTiBUT09MU1wiXG4gICAgICAgICAgICAgICAgZm9udFNpemU9ezIwfVxuICAgICAgICAgICAgICAgIGNvbG9yPXtDb2xvcjQuY3JlYXRlKDE2MCwgMTU1LCAxNjgsIDEpfVxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7IGZsZXhHcm93OiAxIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFkbWluX3Rvb2xraXRfbW9kZXJhdGlvbl9jb250cm9sXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PXtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuTU9ERVJBVElPTl9DT05UUk9MID8gJ3ByaW1hcnknIDogJ3RleHQnfVxuICAgICAgICAgICAgICAgIGljb249e2dldEJ0bk1vZGVyYXRpb25Db250cm9sKCl9XG4gICAgICAgICAgICAgICAgb25seUljb25cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgZGlzcGxheTpcbiAgICAgICAgICAgICAgICAgICAgYWRtaW5Ub29sa2l0RW50aXR5Lm1vZGVyYXRpb25Db250cm9sLmlzRW5hYmxlZCAmJiAhaXNQcmV2aWV3KClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmbGV4J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDQ5LFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MixcbiAgICAgICAgICAgICAgICAgIG1hcmdpbjogeyByaWdodDogOCB9LFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5NT0RFUkFUSU9OX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgICA/IENvbG9yNC5CbGFjaygpXG4gICAgICAgICAgICAgICAgICAgICAgOiBDb2xvcjQuV2hpdGUoKSxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGljb25UcmFuc2Zvcm09e3sgaGVpZ2h0OiAnMTAwJScsIHdpZHRoOiAnMTAwJScgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmFjdGl2ZVRhYiAhPT0gVGFiVHlwZS5NT0RFUkFUSU9OX0NPTlRST0wpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5OT05FO1xuICAgICAgICAgICAgICAgICAgICBuZXh0VGlja0Z1bmN0aW9ucy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk1PREVSQVRJT05fQ09OVFJPTDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwiYWRtaW5fdG9vbGtpdF9wYW5lbF92aWRlb19jb250cm9sXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PXtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVklERU9fQ09OVFJPTCA/ICdwcmltYXJ5JyA6ICd0ZXh0J31cbiAgICAgICAgICAgICAgICBpY29uPXtBRE1JTl9JQ09OUy5CVE5fVklERU9fQ09OVFJPTH1cbiAgICAgICAgICAgICAgICBpY29uQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5WSURFT19DT05UUk9MID8gQ29sb3I0LkJsYWNrKCkgOiBDb2xvcjQuV2hpdGUoKSxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG9ubHlJY29uXG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGFkbWluVG9vbGtpdEVudGl0eS52aWRlb0NvbnRyb2wuaXNFbmFibGVkID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDQ5LFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MixcbiAgICAgICAgICAgICAgICAgIG1hcmdpbjogeyByaWdodDogOCB9LFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmFjdGl2ZVRhYiAhPT0gVGFiVHlwZS5WSURFT19DT05UUk9MKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5WSURFT19DT05UUk9MO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgaWQ9XCJhZG1pbl90b29sa2l0X3BhbmVsX3NtYXJ0X2l0ZW1zX2NvbnRyb2xcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9e3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5TTUFSVF9JVEVNU19DT05UUk9MID8gJ3ByaW1hcnknIDogJ3RleHQnfVxuICAgICAgICAgICAgICAgIGljb249e0FETUlOX0lDT05TLkJUTl9TTUFSVF9JVEVNX0NPTlRST0x9XG4gICAgICAgICAgICAgICAgaWNvbkJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgICAgIGNvbG9yOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuU01BUlRfSVRFTVNfQ09OVFJPTFxuICAgICAgICAgICAgICAgICAgICAgID8gQ29sb3I0LkJsYWNrKClcbiAgICAgICAgICAgICAgICAgICAgICA6IENvbG9yNC5XaGl0ZSgpLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25seUljb25cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgZGlzcGxheTogYWRtaW5Ub29sa2l0RW50aXR5LnNtYXJ0SXRlbXNDb250cm9sLmlzRW5hYmxlZCA/ICdmbGV4JyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA0OSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggfSxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hY3RpdmVUYWIgIT09IFRhYlR5cGUuU01BUlRfSVRFTVNfQ09OVFJPTCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkU7XG4gICAgICAgICAgICAgICAgICAgIG5leHRUaWNrRnVuY3Rpb25zLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuU01BUlRfSVRFTVNfQ09OVFJPTDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwiYWRtaW5fdG9vbGtpdF9wYW5lbF90ZXh0X2Fubm91bmNlbWVudF9jb250cm9sXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PXtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTCA/ICdwcmltYXJ5JyA6ICd0ZXh0J31cbiAgICAgICAgICAgICAgICBpY29uPXtBRE1JTl9JQ09OUy5CVE5fVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTH1cbiAgICAgICAgICAgICAgICBpY29uQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5URVhUX0FOTk9VTkNFTUVOVF9DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgICAgPyBDb2xvcjQuQmxhY2soKVxuICAgICAgICAgICAgICAgICAgICAgIDogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbmx5SWNvblxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiBhZG1pblRvb2xraXRFbnRpdHkudGV4dEFubm91bmNlbWVudENvbnRyb2wuaXNFbmFibGVkID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDQ5LFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MixcbiAgICAgICAgICAgICAgICAgIG1hcmdpbjogeyByaWdodDogOCB9LFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmFjdGl2ZVRhYiAhPT0gVGFiVHlwZS5URVhUX0FOTk9VTkNFTUVOVF9DT05UUk9MKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5URVhUX0FOTk9VTkNFTUVOVF9DT05UUk9MO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgICAgIHtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTCA/IChcbiAgICAgICAgICAgICAgPFRleHRBbm5vdW5jZW1lbnRzQ29udHJvbFxuICAgICAgICAgICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgICAgICAgICAgIHN0YXRlPXtzdGF0ZX1cbiAgICAgICAgICAgICAgICBwbGF5ZXI9e3BsYXllcn1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5WSURFT19DT05UUk9MID8gKFxuICAgICAgICAgICAgICA8VmlkZW9Db250cm9sXG4gICAgICAgICAgICAgICAgZW5naW5lPXtlbmdpbmV9XG4gICAgICAgICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgICAgICAgIHBsYXllckFkZHJlc3M9e3BsYXllcj8udXNlcklkfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0wgPyAoXG4gICAgICAgICAgICAgIDxTbWFydEl0ZW1zQ29udHJvbFxuICAgICAgICAgICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgICAgICAgICAgIHN0YXRlPXtzdGF0ZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5NT0RFUkFUSU9OX0NPTlRST0wgJiYgKFxuICAgICAgICAgICAgICA8TW9kZXJhdGlvbkNvbnRyb2xcbiAgICAgICAgICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgICAgICAgICBwbGF5ZXI9e3BsYXllcn1cbiAgICAgICAgICAgICAgICBzY2VuZUFkbWlucz17c2NlbmVBZG1pbnNDYWNoZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgaGVpZ2h0OiA0MixcbiAgICAgICAgICAgICAgd2lkdGg6IDQyLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgYWxpZ25Db250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBwb2ludGVyRmlsdGVyOiAnYmxvY2snLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHVpQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICB0ZXh0dXJlOiB7XG4gICAgICAgICAgICAgICAgc3JjOiBBRE1JTl9JQ09OUy5CVE5fQURNSU5fVE9PTEtJVF9CQUNLR1JPVU5ELFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0ZXh0dXJlTW9kZTogJ3N0cmV0Y2gnLFxuICAgICAgICAgICAgICBjb2xvcjogQ29sb3I0LmNyZWF0ZSgxLCAxLCAxLCAxKSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPERDTEJ1dHRvblxuICAgICAgICAgICAgICB2YWx1ZT1cIlwiXG4gICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA0MCxcbiAgICAgICAgICAgICAgICB3aWR0aDogNDAsXG4gICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgYWxpZ25Db250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHVpQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgIHRleHR1cmU6IHtcbiAgICAgICAgICAgICAgICAgIHNyYzogQURNSU5fSUNPTlMuQlROX0FETUlOX1RPT0xLSVRfQ09OVFJPTCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRleHR1cmVNb2RlOiAnc3RyZXRjaCcsXG4gICAgICAgICAgICAgICAgY29sb3I6IENvbG9yNC5jcmVhdGUoMSwgMSwgMSwgMSksXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUucGFuZWxPcGVuID0gIXN0YXRlLnBhbmVsT3BlbjtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICkgOiBudWxsfVxuICAgICAgPFRleHRBbm5vdW5jZW1lbnRzXG4gICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgICBzdGF0ZT17c3RhdGV9XG4gICAgICAvPlxuICAgIDwvVWlFbnRpdHk+LFxuICAgIG1vZGVyYXRpb25Db250cm9sU3RhdGUuc2hvd01vZGFsQWRtaW5MaXN0ICYmIChcbiAgICAgIDxNb2RhbFVzZXJMaXN0XG4gICAgICAgIHVzZXJzPXtzY2VuZUFkbWluc0NhY2hlID8/IFtdfVxuICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgdHlwZT17VXNlckxpc3RUeXBlLkFETUlOfVxuICAgICAgLz5cbiAgICApLFxuICAgIG1vZGVyYXRpb25Db250cm9sU3RhdGUuc2hvd01vZGFsQmFuTGlzdCAmJiAoXG4gICAgICA8TW9kYWxVc2VyTGlzdFxuICAgICAgICB1c2Vycz17c2NlbmVCYW5zQ2FjaGUgPz8gW119XG4gICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgICB0eXBlPXtVc2VyTGlzdFR5cGUuQkFOfVxuICAgICAgLz5cbiAgICApLFxuICAgIHNob3djYXNlU3RhdGUuc2hvdyAmJlxuICAgICAgc2hvd2Nhc2VTdGF0ZS5vblNlbGVjdFRyYWNrICYmXG4gICAgICBzaG93Y2FzZVN0YXRlLm9uU2V0RGVmYXVsdCAmJlxuICAgICAgc2hvd2Nhc2VTdGF0ZS5vbkNsb3NlICYmIChcbiAgICAgICAgPFNwZWFrZXJTaG93Y2FzZVxuICAgICAgICAgIHBhcnRpY2lwYW50cz17c2hvd2Nhc2VTdGF0ZS5wYXJ0aWNpcGFudHN9XG4gICAgICAgICAgYWN0aXZlVHJhY2tTaWQ9e3Nob3djYXNlU3RhdGUuYWN0aXZlVHJhY2tTaWR9XG4gICAgICAgICAgb25TZWxlY3RUcmFjaz17c2hvd2Nhc2VTdGF0ZS5vblNlbGVjdFRyYWNrfVxuICAgICAgICAgIG9uU2V0RGVmYXVsdD17c2hvd2Nhc2VTdGF0ZS5vblNldERlZmF1bHR9XG4gICAgICAgICAgb25DbG9zZT17c2hvd2Nhc2VTdGF0ZS5vbkNsb3NlfVxuICAgICAgICAvPlxuICAgICAgKSxcbiAgICBzaGFyZVByZXNlbnRhdGlvblN0YXRlLnNob3cgJiYgc2hhcmVQcmVzZW50YXRpb25TdGF0ZS5vbkNsb3NlICYmIChcbiAgICAgIDxTaGFyZVByZXNlbnRhdGlvbk1vZGFsXG4gICAgICAgIG9uQ2xvc2U9e3NoYXJlUHJlc2VudGF0aW9uU3RhdGUub25DbG9zZX1cbiAgICAgICAgc3RyZWFtaW5nS2V5PXtzdGF0ZS52aWRlb0NvbnRyb2wuZGNsQ2FzdD8uc3RyZWFtaW5nS2V5ID8/ICcnfVxuICAgICAgLz5cbiAgICApLFxuICBdO1xufTtcbiJdfQ==
|
|
337
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9pbmRleC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLFFBQVEsRUFBRSxFQUNmLEtBQUssRUFDTCxNQUFNLElBQUksU0FBUyxFQUNuQixRQUFRLEdBRVQsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0wsYUFBYSxHQUlkLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQWMsT0FBTyxFQUEwQixNQUFNLFNBQVMsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixzQkFBc0IsR0FFdkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBcUIsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDekUsT0FBTyxzQkFBc0IsTUFBTSwrQ0FBK0MsQ0FB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LE1BQU0sRUFBRSxNQUFNLEVBQ2QsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLEdBQ3RCLENBQ0g7UUFDRCxhQUFhLENBQUMsSUFBSTtZQUNoQixhQUFhLENBQUMsYUFBYTtZQUMzQixhQUFhLENBQUMsWUFBWTtZQUMxQixhQUFhLENBQUMsT0FBTyxJQUFJLENBQ3ZCLHVCQUFDLGVBQWUsSUFDZCxZQUFZLEVBQUUsYUFBYSxDQUFDLFlBQVksRUFDeEMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxjQUFjLEVBQzVDLGFBQWEsRUFBRSxhQUFhLENBQUMsYUFBYSxFQUMxQyxZQUFZLEVBQUUsYUFBYSxDQUFDLFlBQVksRUFDeEMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxPQUFPLEdBQzlCLENBQ0g7UUFDSCxzQkFBc0IsQ0FBQyxJQUFJLElBQUksc0JBQXNCLENBQUMsT0FBTyxJQUFJLENBQy9ELHVCQUFDLHNCQUFzQixJQUNyQixPQUFPLEVBQUUsc0JBQXNCLENBQUMsT0FBTyxFQUN2QyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxJQUFJLEVBQUUsR0FDNUQsQ0FDSDtLQUNGLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvcjQgfSBmcm9tICdAZGNsL3Nkay9tYXRoJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgLS0gUmVhY3RFY3MgaXMgcmVxdWlyZWQgZm9yIEpTWCBmYWN0b3J5XG5pbXBvcnQgUmVhY3RFY3MsIHtcbiAgTGFiZWwsXG4gIEJ1dHRvbiBhcyBEQ0xCdXR0b24sXG4gIFVpRW50aXR5LFxuICB0eXBlIFJlYWN0QmFzZWRVaVN5c3RlbSxcbn0gZnJvbSAnQGRjbC9yZWFjdC1lY3MnO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHksIHR5cGUgSUVuZ2luZSwgdHlwZSBQb2ludGVyRXZlbnRzU3lzdGVtIH0gZnJvbSAnQGRjbC9lY3MnO1xuaW1wb3J0IHtcbiAgZ2V0Q29tcG9uZW50cyxcbiAgdHlwZSBHZXRQbGF5ZXJEYXRhUmVzLFxuICB0eXBlIElQbGF5ZXJzSGVscGVyLFxuICB0eXBlIElTREtIZWxwZXJzLFxufSBmcm9tICcuLi9kZWZpbml0aW9ucyc7XG5pbXBvcnQgeyBWaWRlb0NvbnRyb2wgfSBmcm9tICcuL1ZpZGVvQ29udHJvbCc7XG5pbXBvcnQgeyBUZXh0QW5ub3VuY2VtZW50c0NvbnRyb2wgfSBmcm9tICcuL1RleHRBbm5vdW5jZW1lbnRzQ29udHJvbCc7XG5pbXBvcnQgeyBTbWFydEl0ZW1zQ29udHJvbCB9IGZyb20gJy4vU21hcnRJdGVtc0NvbnRyb2wnO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24nO1xuaW1wb3J0IHsgVGV4dEFubm91bmNlbWVudHMgfSBmcm9tICcuL1RleHRBbm5vdW5jZW1lbnRzJztcbmltcG9ydCB7IGdldENvbnRlbnRVcmwgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB0eXBlIFN0YXRlLCBUYWJUeXBlLCB0eXBlIFNlbGVjdGVkU21hcnRJdGVtIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBnZXRCdG5Nb2RlcmF0aW9uQ29udHJvbCxcbiAgTW9kZXJhdGlvbkNvbnRyb2wsXG4gIG1vZGVyYXRpb25Db250cm9sU3RhdGUsXG4gIHR5cGUgU2NlbmVBZG1pbixcbn0gZnJvbSAnLi9Nb2RlcmF0aW9uQ29udHJvbCc7XG5pbXBvcnQgeyBnZXRTY2VuZUFkbWlucywgZ2V0U2NlbmVCYW5zLCB0eXBlIFNjZW5lQmFuVXNlciB9IGZyb20gJy4vTW9kZXJhdGlvbkNvbnRyb2wvYXBpJztcbmltcG9ydCB7IE1vZGFsVXNlckxpc3QsIFVzZXJMaXN0VHlwZSB9IGZyb20gJy4vTW9kZXJhdGlvbkNvbnRyb2wvVXNlcnNMaXN0JztcbmltcG9ydCB7IHNob3djYXNlU3RhdGUsIHNoYXJlUHJlc2VudGF0aW9uU3RhdGUgfSBmcm9tICcuL1ZpZGVvQ29udHJvbC9EY2xDYXN0JztcbmltcG9ydCB7IFNwZWFrZXJTaG93Y2FzZSB9IGZyb20gJy4vVmlkZW9Db250cm9sL0RjbENhc3QvU3BlYWtlclNob3djYXNlJztcbmltcG9ydCBTaGFyZVByZXNlbnRhdGlvbk1vZGFsIGZyb20gJy4vVmlkZW9Db250cm9sL0RjbENhc3QvU2hhcmVQcmVzZW50YXRpb25Nb2RhbCc7XG5pbXBvcnQgeyBpc1ByZXZpZXcgfSBmcm9tICcuL2ZldGNoLXV0aWxzJztcbmltcG9ydCB7IGluaXRBZG1pbk1lc3NhZ2VCdXMsIGdldEFkbWluTWVzc2FnZUJ1cyB9IGZyb20gJy4vYWRtaW4tbWVzc2FnZS1idXMnO1xuXG5leHBvcnQgY29uc3QgbmV4dFRpY2tGdW5jdGlvbnM6ICgoKSA9PiB2b2lkKVtdID0gW107XG5jb25zdCBBRE1JTl9UT09MS0lUX1ZJUlRVQUxfVUlfU0laRSA9IHsgdmlydHVhbFdpZHRoOiAxOTIwLCB2aXJ0dWFsSGVpZ2h0OiAxMDgwIH07XG5cbmV4cG9ydCBjb25zdCBzdGF0ZTogU3RhdGUgPSB7XG4gIGFkbWluVG9vbGtpdFVpRW50aXR5OiAwIGFzIEVudGl0eSxcbiAgcGFuZWxPcGVuOiBmYWxzZSxcbiAgYWN0aXZlVGFiOiBUYWJUeXBlLk5PTkUsXG4gIHZpZGVvQ29udHJvbDoge1xuICAgIHNlbGVjdGVkVmlkZW9QbGF5ZXI6IHVuZGVmaW5lZCxcbiAgICBzZWxlY3RlZFN0cmVhbTogdW5kZWZpbmVkLFxuICAgIGRjbENhc3Q6IHVuZGVmaW5lZCxcbiAgICBpc01pbmltaXplZDogZmFsc2UsXG4gICAgcHJlc2VudGF0aW9uU3RhdGU6IHVuZGVmaW5lZCxcbiAgfSxcbiAgc21hcnRJdGVtc0NvbnRyb2w6IHtcbiAgICBzZWxlY3RlZFNtYXJ0SXRlbTogdW5kZWZpbmVkLFxuICAgIHNtYXJ0SXRlbXM6IG5ldyBNYXA8RW50aXR5LCBTZWxlY3RlZFNtYXJ0SXRlbT4oKSxcbiAgfSxcbiAgdGV4dEFubm91bmNlbWVudENvbnRyb2w6IHtcbiAgICBlbnRpdHk6IHVuZGVmaW5lZCxcbiAgICB0ZXh0OiB1bmRlZmluZWQsXG4gICAgbWVzc2FnZVJhdGVUcmFja2VyOiBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpLFxuICAgIGFubm91bmNlbWVudHM6IFtdLFxuICAgIG1heEFubm91bmNlbWVudHM6IDQsXG4gIH0sXG4gIHJld2FyZHNDb250cm9sOiB7XG4gICAgc2VsZWN0ZWRSZXdhcmRJdGVtOiB1bmRlZmluZWQsXG4gIH0sXG59O1xuXG5sZXQgc2NlbmVBZG1pbnNDYWNoZTogU2NlbmVBZG1pbltdID0gW107XG5sZXQgc2NlbmVCYW5zQ2FjaGU6IFNjZW5lQmFuVXNlcltdID0gW107XG5cbi8vIGNvbnN0IEJUTl9SRVdBUkRTX0NPTlRST0wgPSBgJHtDT05URU5UX1VSTH0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtcmV3YXJkcy1jb250cm9sLWJ1dHRvbi5wbmdgXG4vLyBjb25zdCBCVE5fUkVXQVJEU19DT05UUk9MX0FDVElWRSA9IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9hZG1pbi1wYW5lbC1yZXdhcmRzLWNvbnRyb2wtYWN0aXZlLWJ1dHRvbi5wbmdgXG5cbmNvbnN0IEFETUlOX0lDT05TID0ge1xuICBnZXQgQlROX1ZJREVPX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtdmlkZW8tY29udHJvbC1idXR0b24ucG5nYDtcbiAgfSxcbiAgZ2V0IEJUTl9TTUFSVF9JVEVNX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtc21hcnQtaXRlbS1jb250cm9sLWJ1dHRvbi5wbmdgO1xuICB9LFxuICBnZXQgQlROX1RFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtdGV4dC1hbm5vdW5jZW1lbnQtY29udHJvbC1idXR0b24ucG5nYDtcbiAgfSxcbiAgZ2V0IEJUTl9BRE1JTl9UT09MS0lUX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtY29udHJvbC1idXR0b24ucG5nYDtcbiAgfSxcbiAgZ2V0IEJUTl9BRE1JTl9UT09MS0lUX0JBQ0tHUk9VTkQoKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvYmFja2dyb3VuZHMvYWRtaW4tdG9vbC1iYWNrZ3JvdW5kLnBuZ2A7XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgY29udGFpbmVyQmFja2dyb3VuZENvbG9yID0gQ29sb3I0LmNyZWF0ZSgwLCAwLCAwLCAwLjc1KTtcblxuLy8gVGhlIGVkaXRvciBzdGFydHMgdXNpbmcgZW50aXRpZXMgZnJvbSBbODAwMV0uXG5jb25zdCBBRE1JTl9UT09MU19FTlRJVFkgPSA4MDAwIGFzIEVudGl0eTtcblxuZnVuY3Rpb24gZ2V0QWRtaW5Ub29sa2l0RW50aXR5KGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCB7IEFkbWluVG9vbHMgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKTtcbiAgcmV0dXJuIEFycmF5LmZyb20oZW5naW5lLmdldEVudGl0aWVzV2l0aChBZG1pblRvb2xzKSlbMF1bMF07XG59XG5cbmZ1bmN0aW9uIGdldEFkbWluVG9vbGtpdENvbXBvbmVudChlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgeyBBZG1pblRvb2xzIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSk7XG4gIHJldHVybiBBcnJheS5mcm9tKGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoQWRtaW5Ub29scykpWzBdWzFdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hTY2VuZUFkbWlucygpIHtcbiAgY29uc3QgW2Vycm9yLCByZXNwb25zZV0gPSBhd2FpdCBnZXRTY2VuZUFkbWlucygpO1xuXG4gIGlmIChlcnJvcikge1xuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgZXJyb3IgfSkpO1xuICAgIHNjZW5lQWRtaW5zQ2FjaGUgPSBbXTtcbiAgICByZXR1cm47XG4gIH1cbiAgc2NlbmVBZG1pbnNDYWNoZSA9IChyZXNwb25zZSA/PyBbXSlcbiAgICAubWFwKCQgPT4gKHtcbiAgICAgIG5hbWU6ICQubmFtZSxcbiAgICAgIGFkZHJlc3M6ICQuYWRtaW4sXG4gICAgICByb2xlOiAnYWRtaW4nIGFzIGNvbnN0LFxuICAgICAgdmVyaWZpZWQ6ICEkLm5hbWUuaW5jbHVkZXMoJyMnKSxcbiAgICAgIGNhbkJlUmVtb3ZlZDogISEkLmNhbkJlUmVtb3ZlZCxcbiAgICB9KSlcbiAgICAuc29ydChhID0+IChhLmNhbkJlUmVtb3ZlZCA/IDEgOiAtMSkpO1xuICBpZiAoYWRtaW5EYXRhSW5pdGlhbGl6ZWQpIHtcbiAgICBnZXRBZG1pbk1lc3NhZ2VCdXMoKS51cGRhdGVBZG1pbkxpc3Qoc2NlbmVBZG1pbnNDYWNoZSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoQW5kU3luY1NjZW5lQWRtaW5zKCkge1xuICBhd2FpdCBmZXRjaFNjZW5lQWRtaW5zKCk7XG4gIGlmIChhZG1pbkRhdGFJbml0aWFsaXplZCkge1xuICAgIGdldEFkbWluTWVzc2FnZUJ1cygpLmVtaXRTeW5jQWRtaW5zKCk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoU2NlbmVCYW5zKCkge1xuICBjb25zdCBbZXJyb3IsIHJlc3BvbnNlXSA9IGF3YWl0IGdldFNjZW5lQmFucygpO1xuXG4gIGlmIChlcnJvcikge1xuICAgIHNjZW5lQmFuc0NhY2hlID0gW107XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc2NlbmVCYW5zQ2FjaGUgPSByZXNwb25zZT8ucmVzdWx0cyA/PyBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyU2NlbmVCYW5zQ2FjaGUoKSB7XG4gIHNjZW5lQmFuc0NhY2hlID0gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbWFydEl0ZW1zKGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCBhZG1pblRvb2xraXRDb21wb25lbnQgPSBnZXRBZG1pblRvb2xraXRDb21wb25lbnQoZW5naW5lKTtcblxuICByZXR1cm4gQXJyYXkuZnJvbShhZG1pblRvb2xraXRDb21wb25lbnQuc21hcnRJdGVtc0NvbnRyb2wuc21hcnRJdGVtcyA/PyBbXSk7XG59XG5cbmZ1bmN0aW9uIGluaXRUZXh0QW5ub3VuY2VtZW50U3luYyhlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgeyBUZXh0QW5ub3VuY2VtZW50cyB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpO1xuXG4gIFRleHRBbm5vdW5jZW1lbnRzLmNyZWF0ZU9yUmVwbGFjZShzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSwge1xuICAgIHRleHQ6ICcnLFxuICAgIGF1dGhvcjogJycsXG4gICAgaWQ6ICcnLFxuICB9KTtcbn1cblxuLy8gSW5pdGlhbGl6ZSBhZG1pbiBkYXRhIGJlZm9yZSBVSSByZW5kZXJpbmdcbmxldCBhZG1pbkRhdGFJbml0aWFsaXplZCA9IGZhbHNlO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRpYWxpemVBZG1pbkRhdGEoXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgc2RrSGVscGVycz86IElTREtIZWxwZXJzLFxuICBwbGF5ZXJzSGVscGVyPzogSVBsYXllcnNIZWxwZXIsXG4pIHtcbiAgaWYgKCFhZG1pbkRhdGFJbml0aWFsaXplZCkge1xuICAgIGNvbnN0IHsgVmlkZW9Db250cm9sU3RhdGUgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKTtcblxuICAgIC8vIEluaXRpYWxpemUgQWRtaW5Ub29sa2l0VWlFbnRpdHlcbiAgICBzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSA9IGdldEFkbWluVG9vbGtpdEVudGl0eShlbmdpbmUpID8/IGVuZ2luZS5hZGRFbnRpdHkoKTtcblxuICAgIC8vIEluaXRpYWxpemUgVGV4dEFubm91bmNlbWVudHMgc3luYyBjb21wb25lbnRcbiAgICBpbml0VGV4dEFubm91bmNlbWVudFN5bmMoZW5naW5lKTtcblxuICAgIC8vIC8vIEluaXRpYWxpemUgUmV3YXJkcyBzeW5jXG4gICAgLy8gaW5pdFJld2FyZHNTeW5jKGVuZ2luZSwgc2RrSGVscGVycylcblxuICAgIGlmICghVmlkZW9Db250cm9sU3RhdGUuZ2V0T3JOdWxsKHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5KSkge1xuICAgICAgVmlkZW9Db250cm9sU3RhdGUuY3JlYXRlKHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5KTtcbiAgICB9XG5cbiAgICBzZGtIZWxwZXJzPy5zeW5jRW50aXR5Py4oXG4gICAgICBzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSxcbiAgICAgIFtWaWRlb0NvbnRyb2xTdGF0ZS5jb21wb25lbnRJZF0sXG4gICAgICBBRE1JTl9UT09MU19FTlRJVFksXG4gICAgKTtcblxuICAgIGVuZ2luZS5hZGRTeXN0ZW0oKCkgPT4ge1xuICAgICAgaWYgKG5leHRUaWNrRnVuY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dFRpY2sgPSBuZXh0VGlja0Z1bmN0aW9ucy5zaGlmdCgpO1xuICAgICAgICBpZiAobmV4dFRpY2spIHtcbiAgICAgICAgICBuZXh0VGljaygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtcblxuICAgIC8vIEluaXRpYWxpemUgc2NlbmUgZGF0YVxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtmZXRjaFNjZW5lQWRtaW5zKCksIGZldGNoU2NlbmVCYW5zKCldKTtcblxuICAgIC8vIEluaXRpYWxpemUgYWRtaW4gbWVzc2FnZSBidXMgd2l0aCBzZW5kZXIgdmFsaWRhdGlvblxuICAgIGluaXRBZG1pbk1lc3NhZ2VCdXMoXG4gICAgICBlbmdpbmUsXG4gICAgICBzY2VuZUFkbWluc0NhY2hlLFxuICAgICAgc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHksXG4gICAgICBwbGF5ZXJzSGVscGVyLFxuICAgICAgZmV0Y2hTY2VuZUFkbWlucyxcbiAgICApO1xuXG4gICAgYWRtaW5EYXRhSW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgY29uc29sZS5sb2coJ2luaXRpYWxpemVBZG1pbkRhdGEgLSBpbml0aWFsaXplZCcpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBZG1pblRvb2xraXRVSShcbiAgZW5naW5lOiBJRW5naW5lLFxuICBwb2ludGVyRXZlbnRzU3lzdGVtOiBQb2ludGVyRXZlbnRzU3lzdGVtLFxuICByZWFjdEJhc2VkVWlTeXN0ZW06IFJlYWN0QmFzZWRVaVN5c3RlbSxcbiAgc2RrSGVscGVycz86IElTREtIZWxwZXJzLFxuICBwbGF5ZXJzSGVscGVyPzogSVBsYXllcnNIZWxwZXIsXG4pIHtcbiAgLy8gSW5pdGlhbGl6ZSBhZG1pbiBkYXRhIGJlZm9yZSBzZXR0aW5nIHVwIHRoZSBVSVxuICBpbml0aWFsaXplQWRtaW5EYXRhKGVuZ2luZSwgc2RrSGVscGVycywgcGxheWVyc0hlbHBlcikudGhlbigoKSA9PiB7XG4gICAgY29uc29sZS5sb2coJ2NyZWF0ZUFkbWluVG9vbGtpdFVJIC0gaW5pdGlhbGl6ZWQnKTtcbiAgICByZWFjdEJhc2VkVWlTeXN0ZW0uc2V0VWlSZW5kZXJlcihcbiAgICAgICgpID0+IHVpQ29tcG9uZW50KGVuZ2luZSwgcG9pbnRlckV2ZW50c1N5c3RlbSwgc2RrSGVscGVycywgcGxheWVyc0hlbHBlciksXG4gICAgICBBRE1JTl9UT09MS0lUX1ZJUlRVQUxfVUlfU0laRSxcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNBbGxvd2VkQWRtaW4oXG4gIF9lbmdpbmU6IElFbmdpbmUsXG4gIGFkbWluVG9vbGtpdEVudGl0aWU6IFJldHVyblR5cGU8dHlwZW9mIGdldEFkbWluVG9vbGtpdENvbXBvbmVudD4sXG4gIHBsYXllcjogR2V0UGxheWVyRGF0YVJlcyB8IG51bGwgfCB1bmRlZmluZWQsXG4pIHtcbiAgaWYgKCFwbGF5ZXIpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBwbGF5ZXJBZGRyZXNzID0gcGxheWVyLnVzZXJJZC50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBpc0FkbWluID0gc2NlbmVBZG1pbnNDYWNoZS5maW5kKCQgPT4gJC5hZGRyZXNzID09PSBwbGF5ZXJBZGRyZXNzKTtcblxuICByZXR1cm4gaXNBZG1pbiB8fCBpc1ByZXZpZXcoKTtcbn1cblxuY29uc3QgdWlDb21wb25lbnQgPSAoXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgcG9pbnRlckV2ZW50c1N5c3RlbTogUG9pbnRlckV2ZW50c1N5c3RlbSxcbiAgc2RrSGVscGVycz86IElTREtIZWxwZXJzLFxuICBwbGF5ZXJzSGVscGVyPzogSVBsYXllcnNIZWxwZXIsXG4pID0+IHtcbiAgY29uc3QgYWRtaW5Ub29sa2l0RW50aXR5ID0gZ2V0QWRtaW5Ub29sa2l0Q29tcG9uZW50KGVuZ2luZSk7XG4gIGNvbnN0IHBsYXllciA9IHBsYXllcnNIZWxwZXI/LmdldFBsYXllcigpO1xuICBjb25zdCBpc1BsYXllckFkbWluID0gaXNBbGxvd2VkQWRtaW4oZW5naW5lLCBhZG1pblRvb2xraXRFbnRpdHksIHBsYXllcik7XG5cbiAgcmV0dXJuIFtcbiAgICA8VWlFbnRpdHlcbiAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogJ2Fic29sdXRlJyxcbiAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtpc1BsYXllckFkbWluID8gKFxuICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgcG9zaXRpb25UeXBlOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgICAgICAgICBwb3NpdGlvbjogeyB0b3A6IDEyMCwgcmlnaHQ6IDE0IH0sXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgZGlzcGxheTogc3RhdGUucGFuZWxPcGVuID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgICAgICAgICAgICB3aWR0aDogNTAwLFxuICAgICAgICAgICAgICBwb2ludGVyRmlsdGVyOiAnYmxvY2snLFxuICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgICAgICAgbWFyZ2luOiB7IHJpZ2h0OiA4IH0sXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA1MCxcbiAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDEyLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IDEyLFxuICAgICAgICAgICAgICAgICAgcmlnaHQ6IDEyLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHVpQmFja2dyb3VuZD17eyBjb2xvcjogY29udGFpbmVyQmFja2dyb3VuZENvbG9yIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICAgIHZhbHVlPVwiQURNSU4gVE9PTFNcIlxuICAgICAgICAgICAgICAgIGZvbnRTaXplPXsyMH1cbiAgICAgICAgICAgICAgICBjb2xvcj17Q29sb3I0LmNyZWF0ZSgxNjAsIDE1NSwgMTY4LCAxKX1cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17eyBmbGV4R3JvdzogMSB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgaWQ9XCJhZG1pbl90b29sa2l0X21vZGVyYXRpb25fY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD17c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLk1PREVSQVRJT05fQ09OVFJPTCA/ICdwcmltYXJ5JyA6ICd0ZXh0J31cbiAgICAgICAgICAgICAgICBpY29uPXtnZXRCdG5Nb2RlcmF0aW9uQ29udHJvbCgpfVxuICAgICAgICAgICAgICAgIG9ubHlJY29uXG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6XG4gICAgICAgICAgICAgICAgICAgIGFkbWluVG9vbGtpdEVudGl0eS5tb2RlcmF0aW9uQ29udHJvbC5pc0VuYWJsZWQgJiYgIWlzUHJldmlldygpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZmxleCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA0OSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggfSxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvbkJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgICAgIGNvbG9yOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuTU9ERVJBVElPTl9DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgICAgPyBDb2xvcjQuQmxhY2soKVxuICAgICAgICAgICAgICAgICAgICAgIDogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7IGhlaWdodDogJzEwMCUnLCB3aWR0aDogJzEwMCUnIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hY3RpdmVUYWIgIT09IFRhYlR5cGUuTU9ERVJBVElPTl9DT05UUk9MKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5NT0RFUkFUSU9OX0NPTlRST0w7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5OT05FO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFkbWluX3Rvb2xraXRfcGFuZWxfdmlkZW9fY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD17c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlZJREVPX0NPTlRST0wgPyAncHJpbWFyeScgOiAndGV4dCd9XG4gICAgICAgICAgICAgICAgaWNvbj17QURNSU5fSUNPTlMuQlROX1ZJREVPX0NPTlRST0x9XG4gICAgICAgICAgICAgICAgaWNvbkJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgICAgIGNvbG9yOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVklERU9fQ09OVFJPTCA/IENvbG9yNC5CbGFjaygpIDogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbmx5SWNvblxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiBhZG1pblRvb2xraXRFbnRpdHkudmlkZW9Db250cm9sLmlzRW5hYmxlZCA/ICdmbGV4JyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA0OSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggfSxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hY3RpdmVUYWIgIT09IFRhYlR5cGUuVklERU9fQ09OVFJPTCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkU7XG4gICAgICAgICAgICAgICAgICAgIG5leHRUaWNrRnVuY3Rpb25zLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuVklERU9fQ09OVFJPTDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwiYWRtaW5fdG9vbGtpdF9wYW5lbF9zbWFydF9pdGVtc19jb250cm9sXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PXtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuU01BUlRfSVRFTVNfQ09OVFJPTCA/ICdwcmltYXJ5JyA6ICd0ZXh0J31cbiAgICAgICAgICAgICAgICBpY29uPXtBRE1JTl9JQ09OUy5CVE5fU01BUlRfSVRFTV9DT05UUk9MfVxuICAgICAgICAgICAgICAgIGljb25CYWNrZ3JvdW5kPXt7XG4gICAgICAgICAgICAgICAgICBjb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgICA/IENvbG9yNC5CbGFjaygpXG4gICAgICAgICAgICAgICAgICAgICAgOiBDb2xvcjQuV2hpdGUoKSxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG9ubHlJY29uXG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGFkbWluVG9vbGtpdEVudGl0eS5zbWFydEl0ZW1zQ29udHJvbC5pc0VuYWJsZWQgPyAnZmxleCcgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogNDksXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQyLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luOiB7IHJpZ2h0OiA4IH0sXG4gICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGljb25UcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuYWN0aXZlVGFiICE9PSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0wpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5OT05FO1xuICAgICAgICAgICAgICAgICAgICBuZXh0VGlja0Z1bmN0aW9ucy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0w7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5OT05FO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFkbWluX3Rvb2xraXRfcGFuZWxfdGV4dF9hbm5vdW5jZW1lbnRfY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD17c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlRFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0wgPyAncHJpbWFyeScgOiAndGV4dCd9XG4gICAgICAgICAgICAgICAgaWNvbj17QURNSU5fSUNPTlMuQlROX1RFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0x9XG4gICAgICAgICAgICAgICAgaWNvbkJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgICAgIGNvbG9yOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTFxuICAgICAgICAgICAgICAgICAgICAgID8gQ29sb3I0LkJsYWNrKClcbiAgICAgICAgICAgICAgICAgICAgICA6IENvbG9yNC5XaGl0ZSgpLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25seUljb25cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgZGlzcGxheTogYWRtaW5Ub29sa2l0RW50aXR5LnRleHRBbm5vdW5jZW1lbnRDb250cm9sLmlzRW5hYmxlZCA/ICdmbGV4JyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA0OSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggfSxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hY3RpdmVUYWIgIT09IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkU7XG4gICAgICAgICAgICAgICAgICAgIG5leHRUaWNrRnVuY3Rpb25zLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgICAgICB7c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlRFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0wgPyAoXG4gICAgICAgICAgICAgIDxUZXh0QW5ub3VuY2VtZW50c0NvbnRyb2xcbiAgICAgICAgICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgICAgICAgICBzdGF0ZT17c3RhdGV9XG4gICAgICAgICAgICAgICAgcGxheWVyPXtwbGF5ZXJ9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVklERU9fQ09OVFJPTCA/IChcbiAgICAgICAgICAgICAgPFZpZGVvQ29udHJvbFxuICAgICAgICAgICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgICAgICAgICAgIHN0YXRlPXtzdGF0ZX1cbiAgICAgICAgICAgICAgICBwbGF5ZXJBZGRyZXNzPXtwbGF5ZXI/LnVzZXJJZH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5TTUFSVF9JVEVNU19DT05UUk9MID8gKFxuICAgICAgICAgICAgICA8U21hcnRJdGVtc0NvbnRyb2xcbiAgICAgICAgICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgICAgICAgICBzdGF0ZT17c3RhdGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuTU9ERVJBVElPTl9DT05UUk9MICYmIChcbiAgICAgICAgICAgICAgPE1vZGVyYXRpb25Db250cm9sXG4gICAgICAgICAgICAgICAgZW5naW5lPXtlbmdpbmV9XG4gICAgICAgICAgICAgICAgcGxheWVyPXtwbGF5ZXJ9XG4gICAgICAgICAgICAgICAgc2NlbmVBZG1pbnM9e3NjZW5lQWRtaW5zQ2FjaGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICAgIHdpZHRoOiA0MixcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGFsaWduQ29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgcG9pbnRlckZpbHRlcjogJ2Jsb2NrJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB1aUJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgdGV4dHVyZToge1xuICAgICAgICAgICAgICAgIHNyYzogQURNSU5fSUNPTlMuQlROX0FETUlOX1RPT0xLSVRfQkFDS0dST1VORCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGV4dHVyZU1vZGU6ICdzdHJldGNoJyxcbiAgICAgICAgICAgICAgY29sb3I6IENvbG9yNC5jcmVhdGUoMSwgMSwgMSwgMSksXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEQ0xCdXR0b25cbiAgICAgICAgICAgICAgdmFsdWU9XCJcIlxuICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgIGhlaWdodDogNDAsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDQwLFxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGFsaWduQ29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB1aUJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgICB0ZXh0dXJlOiB7XG4gICAgICAgICAgICAgICAgICBzcmM6IEFETUlOX0lDT05TLkJUTl9BRE1JTl9UT09MS0lUX0NPTlRST0wsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0ZXh0dXJlTW9kZTogJ3N0cmV0Y2gnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiBDb2xvcjQuY3JlYXRlKDEsIDEsIDEsIDEpLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0YXRlLnBhbmVsT3BlbiA9ICFzdGF0ZS5wYW5lbE9wZW47XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICApIDogbnVsbH1cbiAgICAgIDxUZXh0QW5ub3VuY2VtZW50c1xuICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgLz5cbiAgICA8L1VpRW50aXR5PixcbiAgICBtb2RlcmF0aW9uQ29udHJvbFN0YXRlLnNob3dNb2RhbEFkbWluTGlzdCAmJiAoXG4gICAgICA8TW9kYWxVc2VyTGlzdFxuICAgICAgICB1c2Vycz17c2NlbmVBZG1pbnNDYWNoZSA/PyBbXX1cbiAgICAgICAgZW5naW5lPXtlbmdpbmV9XG4gICAgICAgIHR5cGU9e1VzZXJMaXN0VHlwZS5BRE1JTn1cbiAgICAgIC8+XG4gICAgKSxcbiAgICBtb2RlcmF0aW9uQ29udHJvbFN0YXRlLnNob3dNb2RhbEJhbkxpc3QgJiYgKFxuICAgICAgPE1vZGFsVXNlckxpc3RcbiAgICAgICAgdXNlcnM9e3NjZW5lQmFuc0NhY2hlID8/IFtdfVxuICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgdHlwZT17VXNlckxpc3RUeXBlLkJBTn1cbiAgICAgIC8+XG4gICAgKSxcbiAgICBzaG93Y2FzZVN0YXRlLnNob3cgJiZcbiAgICAgIHNob3djYXNlU3RhdGUub25TZWxlY3RUcmFjayAmJlxuICAgICAgc2hvd2Nhc2VTdGF0ZS5vblNldERlZmF1bHQgJiZcbiAgICAgIHNob3djYXNlU3RhdGUub25DbG9zZSAmJiAoXG4gICAgICAgIDxTcGVha2VyU2hvd2Nhc2VcbiAgICAgICAgICBwYXJ0aWNpcGFudHM9e3Nob3djYXNlU3RhdGUucGFydGljaXBhbnRzfVxuICAgICAgICAgIGFjdGl2ZVRyYWNrU2lkPXtzaG93Y2FzZVN0YXRlLmFjdGl2ZVRyYWNrU2lkfVxuICAgICAgICAgIG9uU2VsZWN0VHJhY2s9e3Nob3djYXNlU3RhdGUub25TZWxlY3RUcmFja31cbiAgICAgICAgICBvblNldERlZmF1bHQ9e3Nob3djYXNlU3RhdGUub25TZXREZWZhdWx0fVxuICAgICAgICAgIG9uQ2xvc2U9e3Nob3djYXNlU3RhdGUub25DbG9zZX1cbiAgICAgICAgLz5cbiAgICAgICksXG4gICAgc2hhcmVQcmVzZW50YXRpb25TdGF0ZS5zaG93ICYmIHNoYXJlUHJlc2VudGF0aW9uU3RhdGUub25DbG9zZSAmJiAoXG4gICAgICA8U2hhcmVQcmVzZW50YXRpb25Nb2RhbFxuICAgICAgICBvbkNsb3NlPXtzaGFyZVByZXNlbnRhdGlvblN0YXRlLm9uQ2xvc2V9XG4gICAgICAgIHN0cmVhbWluZ0tleT17c3RhdGUudmlkZW9Db250cm9sLmRjbENhc3Q/LnN0cmVhbWluZ0tleSA/PyAnJ31cbiAgICAgIC8+XG4gICAgKSxcbiAgXTtcbn07XG4iXX0=
|