fmode-ng 0.0.243 → 0.0.245
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/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +56 -30
- package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +3 -3
- package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -6
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +2 -2
- package/esm2022/lib/core/agent/chat/completion/fmode-completion.mjs +6 -2
- package/esm2022/lib/core/agent/chat/fmode-chat.mjs +110 -81
- package/esm2022/lib/core/agent/chat/message/message-manager.mjs +131 -62
- package/esm2022/lib/core/parse/fmode.cloud.mjs +17 -3
- package/esm2022/lib/core/parse/fmode.object.mjs +4 -3
- package/fesm2022/fmode-ng.mjs +329 -183
- package/fesm2022/fmode-ng.mjs.map +1 -1
- package/lib/aigc/chat/chat-message-area/comp-message-area.component.d.ts +9 -3
- package/lib/aigc/service-fmai/service-chat/chat.service.d.ts +3 -2
- package/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.d.ts +1 -1
- package/lib/core/agent/chat/fmode-chat.d.ts +12 -5
- package/lib/core/agent/chat/message/message-manager.d.ts +22 -2
- package/package.json +1 -1
|
@@ -9,8 +9,17 @@ export class MessageManager {
|
|
|
9
9
|
constructor(options) {
|
|
10
10
|
this._messageList = []; // 统一的消息列表
|
|
11
11
|
this._isLoaded = false;
|
|
12
|
+
options.limitHistory = options?.limitHistory || 10;
|
|
12
13
|
this.options = options;
|
|
13
14
|
}
|
|
15
|
+
getCompanyPointer() {
|
|
16
|
+
let cid = this.options?.company?.objectId || this.options?.company?.id || localStorage.getItem("company");
|
|
17
|
+
return {
|
|
18
|
+
__type: "Pointer",
|
|
19
|
+
className: "Company",
|
|
20
|
+
objectId: cid
|
|
21
|
+
};
|
|
22
|
+
}
|
|
14
23
|
/**
|
|
15
24
|
* 获取统一的消息列表
|
|
16
25
|
*/
|
|
@@ -55,43 +64,34 @@ export class MessageManager {
|
|
|
55
64
|
messageObj.set("status", "sent");
|
|
56
65
|
messageObj.set("createdAt", message.createdAt || new Date());
|
|
57
66
|
messageObj.set("complete", message.complete || false);
|
|
58
|
-
//
|
|
59
|
-
if (message.content) {
|
|
60
|
-
if (typeof message.content === "string") {
|
|
61
|
-
messageObj.set("content", {
|
|
62
|
-
type: "text",
|
|
63
|
-
text: message.content
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
else if (Array.isArray(message.content)) {
|
|
67
|
-
messageObj.set("content", {
|
|
68
|
-
type: "mixed",
|
|
69
|
-
items: message.content
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
messageObj.set("content", message.content);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
// 设置角色
|
|
67
|
+
// 设置消息角色(user/assistant/system)- 这是消息的发送者角色
|
|
77
68
|
if (message.role) {
|
|
78
|
-
messageObj.set("role",
|
|
69
|
+
messageObj.set("role", this.options.role.toPointer());
|
|
70
|
+
}
|
|
71
|
+
// 设置内容 - 保持原始格式兼容(string 或 Array)
|
|
72
|
+
// 同时扩展存储格式,支持更多元数据
|
|
73
|
+
if (message.content !== undefined) {
|
|
74
|
+
messageObj.set("content", message);
|
|
79
75
|
}
|
|
80
|
-
// 设置其他属性
|
|
81
|
-
if (message.json)
|
|
82
|
-
messageObj.set("json", message.json);
|
|
83
|
-
if (message.hidden)
|
|
84
|
-
messageObj.set("hidden", message.hidden);
|
|
85
|
-
if (message.voice)
|
|
86
|
-
messageObj.set("voice", message.voice);
|
|
87
|
-
if (message.cid)
|
|
88
|
-
messageObj.set("cid", message.cid);
|
|
89
76
|
// 根据场景设置关联对象
|
|
77
|
+
// avatarRole:指向 AvatarRole 表的指针(智能体角色)
|
|
90
78
|
if (targetScene === MessageScene.ROLE && this.options.role) {
|
|
91
|
-
messageObj.set("
|
|
79
|
+
messageObj.set("avatarRole", this.options.role.toPointer());
|
|
92
80
|
}
|
|
81
|
+
// company:指向 Company 表的指针
|
|
93
82
|
if (this.options.company) {
|
|
94
|
-
messageObj.set("company", this.
|
|
83
|
+
messageObj.set("company", this.getCompanyPointer());
|
|
84
|
+
}
|
|
85
|
+
// 关键:如果chatSession已存在且有id,立即关联
|
|
86
|
+
// 如果chatSession还没有id(新会话),标记为待关联
|
|
87
|
+
if (this.options.chatSession) {
|
|
88
|
+
if (this.options.chatSession.id) {
|
|
89
|
+
messageObj.set("session", this.options.chatSession.toPointer());
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
// 新会话,标记待关联,等待session保存后再关联
|
|
93
|
+
messageObj.set("_pendingSession", true);
|
|
94
|
+
}
|
|
95
95
|
}
|
|
96
96
|
// 直接添加到列表末尾
|
|
97
97
|
this._messageList.push(messageObj);
|
|
@@ -104,50 +104,90 @@ export class MessageManager {
|
|
|
104
104
|
}
|
|
105
105
|
/**
|
|
106
106
|
* 异步保存消息对象
|
|
107
|
+
* 增强版:处理session关联和延迟保存
|
|
107
108
|
*/
|
|
108
109
|
async saveMessage(messageObj) {
|
|
109
|
-
if (!messageObj
|
|
110
|
-
|
|
111
|
-
|
|
110
|
+
if (!messageObj)
|
|
111
|
+
return;
|
|
112
|
+
try {
|
|
113
|
+
// 检查是否需要关联session(对于新会话的消息)
|
|
114
|
+
if (!messageObj.get("session") && this.options.chatSession?.id) {
|
|
115
|
+
messageObj.set("session", this.options.chatSession.toPointer());
|
|
116
|
+
}
|
|
117
|
+
// 确保消息有关联的session才保存到Message表
|
|
118
|
+
// 如果没有session且不是老消息转换的,先不保存(只存在于内存)
|
|
119
|
+
if (!messageObj.get("session") && !messageObj.get("isLegacy")) {
|
|
120
|
+
// 没有session的消息暂时不保存到Message表
|
|
121
|
+
// 等session创建后会再次调用saveMessage
|
|
122
|
+
console.log("消息等待session创建后保存");
|
|
123
|
+
return;
|
|
112
124
|
}
|
|
113
|
-
|
|
114
|
-
|
|
125
|
+
await messageObj.save();
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
console.error("保存消息对象失败:", error);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* 在session创建/更新后,保存所有待关联的消息
|
|
133
|
+
* 关键方法:在chatSession保存成功后调用
|
|
134
|
+
*/
|
|
135
|
+
async savePendingMessages() {
|
|
136
|
+
if (!this.options.chatSession?.id) {
|
|
137
|
+
console.warn("session未保存,无法保存待处理消息");
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const savePromises = [];
|
|
141
|
+
for (const messageObj of this._messageList) {
|
|
142
|
+
// 处理待关联的消息
|
|
143
|
+
// if (messageObj.get("_pendingSession")) {
|
|
144
|
+
messageObj.set("session", messageObj?.get("session") || this.options.chatSession.toPointer());
|
|
145
|
+
// messageObj.set("_pendingSession", undefined);
|
|
146
|
+
// }
|
|
147
|
+
// 保存所有没有id的消息(新消息)
|
|
148
|
+
if (!messageObj.id) {
|
|
149
|
+
if (!messageObj?.get("hidden")) {
|
|
150
|
+
savePromises.push(this.saveMessage(messageObj));
|
|
151
|
+
}
|
|
115
152
|
}
|
|
116
153
|
}
|
|
154
|
+
if (savePromises.length > 0) {
|
|
155
|
+
await Promise.all(savePromises);
|
|
156
|
+
console.log(`保存了 ${savePromises.length} 条待处理消息`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* 更新chatSession引用(当新会话第一次保存后)
|
|
161
|
+
*/
|
|
162
|
+
updateChatSession(chatSession) {
|
|
163
|
+
this.options.chatSession = chatSession;
|
|
117
164
|
}
|
|
118
165
|
/**
|
|
119
166
|
* 更新消息(优化版)
|
|
120
|
-
*
|
|
167
|
+
* 直接通过下标更新消息对象属性,返回是否成功
|
|
121
168
|
*/
|
|
122
169
|
updateMessage(index, message) {
|
|
123
170
|
if (index < 0 || index >= this._messageList.length)
|
|
124
|
-
return;
|
|
171
|
+
return null;
|
|
125
172
|
const messageObj = this._messageList[index];
|
|
126
173
|
if (!messageObj)
|
|
127
|
-
return;
|
|
128
|
-
//
|
|
174
|
+
return null;
|
|
175
|
+
// 更新消息角色
|
|
176
|
+
if (message.role) {
|
|
177
|
+
messageObj.set("role", this.options.role.toPointer());
|
|
178
|
+
}
|
|
179
|
+
// 更新内容 - 保持原始格式兼容
|
|
180
|
+
// 从现有 content 中获取完整的 FmodeChatMessage 对象,然后更新字段
|
|
129
181
|
if (message.content !== undefined) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
else if (Array.isArray(message.content)) {
|
|
137
|
-
messageObj.set("content", {
|
|
138
|
-
type: "mixed",
|
|
139
|
-
items: message.content
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
messageObj.set("content", message.content);
|
|
144
|
-
}
|
|
182
|
+
const existingContent = messageObj.get("content") || {};
|
|
183
|
+
messageObj.set("content", {
|
|
184
|
+
...existingContent,
|
|
185
|
+
content: message.content
|
|
186
|
+
});
|
|
145
187
|
}
|
|
146
188
|
// 更新其他属性
|
|
147
189
|
if (message.complete !== undefined)
|
|
148
190
|
messageObj.set("complete", message.complete);
|
|
149
|
-
if (message.role)
|
|
150
|
-
messageObj.set("role", message.role);
|
|
151
191
|
if (message.json)
|
|
152
192
|
messageObj.set("json", message.json);
|
|
153
193
|
if (message.hidden)
|
|
@@ -156,6 +196,16 @@ export class MessageManager {
|
|
|
156
196
|
messageObj.set("voice", message.voice);
|
|
157
197
|
if (message.cid)
|
|
158
198
|
messageObj.set("cid", message.cid);
|
|
199
|
+
return messageObj;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* 更新消息并异步保存
|
|
203
|
+
*/
|
|
204
|
+
async updateMessageAndSave(index, message) {
|
|
205
|
+
const messageObj = this.updateMessage(index, message);
|
|
206
|
+
if (!messageObj?.get("hidden")) {
|
|
207
|
+
await this.saveMessage(messageObj);
|
|
208
|
+
}
|
|
159
209
|
}
|
|
160
210
|
/**
|
|
161
211
|
* 重新加载消息
|
|
@@ -178,20 +228,35 @@ export class MessageManager {
|
|
|
178
228
|
const MessageClass = Parse.Object.extend("Message");
|
|
179
229
|
const messageObj = new MessageClass();
|
|
180
230
|
// 复制老版消息属性
|
|
181
|
-
messageObj.set("role",
|
|
231
|
+
messageObj.set("role", this.options.role.toPointer());
|
|
182
232
|
messageObj.set("content", legacyMsg.content);
|
|
183
233
|
messageObj.set("complete", legacyMsg.complete);
|
|
184
234
|
messageObj.set("createdAt", legacyMsg.createdAt);
|
|
185
235
|
messageObj.set("voice", legacyMsg.voice);
|
|
186
236
|
messageObj.set("cid", legacyMsg.cid);
|
|
187
237
|
messageObj.set("isLegacy", true);
|
|
238
|
+
// 为老消息同步创建 contentData,保持格式统一
|
|
239
|
+
if (typeof legacyMsg.content === "string") {
|
|
240
|
+
messageObj.set("contentData", {
|
|
241
|
+
type: "text",
|
|
242
|
+
text: legacyMsg.content,
|
|
243
|
+
role: legacyMsg.role
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
else if (Array.isArray(legacyMsg.content)) {
|
|
247
|
+
messageObj.set("contentData", {
|
|
248
|
+
type: "mixed",
|
|
249
|
+
items: legacyMsg.content,
|
|
250
|
+
role: legacyMsg.role
|
|
251
|
+
});
|
|
252
|
+
}
|
|
188
253
|
this._messageList.push(messageObj);
|
|
189
254
|
}
|
|
190
255
|
// 2. 加载新版消息
|
|
191
256
|
let newMessages = [];
|
|
192
257
|
switch (this.options.scene) {
|
|
193
258
|
case MessageScene.ROLE:
|
|
194
|
-
if (this.options.
|
|
259
|
+
if (this.options.role) {
|
|
195
260
|
newMessages = await this.loadRoleMessages();
|
|
196
261
|
}
|
|
197
262
|
break;
|
|
@@ -224,10 +289,11 @@ export class MessageManager {
|
|
|
224
289
|
* 加载角色对话消息
|
|
225
290
|
*/
|
|
226
291
|
async loadRoleMessages() {
|
|
227
|
-
if (!this.options.
|
|
292
|
+
if (!this.options.role?.id)
|
|
228
293
|
return [];
|
|
229
294
|
const query = new Parse.Query("Message");
|
|
230
|
-
query.
|
|
295
|
+
query.exists("content");
|
|
296
|
+
query.equalTo("role", this.options.role?.id);
|
|
231
297
|
query.addAscending("createdAt");
|
|
232
298
|
query.limit(1000); // 限制数量避免性能问题
|
|
233
299
|
return await query.find();
|
|
@@ -239,6 +305,7 @@ export class MessageManager {
|
|
|
239
305
|
if (!this.options.group)
|
|
240
306
|
return [];
|
|
241
307
|
const query = new Parse.Query("Message");
|
|
308
|
+
query.exists("content");
|
|
242
309
|
query.equalTo("group", this.options.group);
|
|
243
310
|
query.addAscending("createdAt");
|
|
244
311
|
query.limit(1000);
|
|
@@ -251,6 +318,7 @@ export class MessageManager {
|
|
|
251
318
|
if (!this.options.userFrom || !this.options.userTo)
|
|
252
319
|
return [];
|
|
253
320
|
const query = new Parse.Query("Message");
|
|
321
|
+
query.exists("content");
|
|
254
322
|
query.containedIn("userFrom", [this.options.userFrom, this.options.userTo]);
|
|
255
323
|
query.containedIn("userTo", [this.options.userFrom, this.options.userTo]);
|
|
256
324
|
query.addAscending("createdAt");
|
|
@@ -264,6 +332,7 @@ export class MessageManager {
|
|
|
264
332
|
if (!this.options.contact)
|
|
265
333
|
return [];
|
|
266
334
|
const query = new Parse.Query("Message");
|
|
335
|
+
query.exists("content");
|
|
267
336
|
query.equalTo("contact", this.options.contact);
|
|
268
337
|
query.addAscending("createdAt");
|
|
269
338
|
query.limit(1000);
|
|
@@ -321,4 +390,4 @@ export class MessageManager {
|
|
|
321
390
|
});
|
|
322
391
|
}
|
|
323
392
|
}
|
|
324
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9jb3JlL2FnZW50L2NoYXQvbWVzc2FnZS9tZXNzYWdlLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDekMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQWdCdEM7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFLdkIsWUFBWSxPQUE4QjtRQUhsQyxpQkFBWSxHQUFrQixFQUFFLENBQUMsQ0FBQyxVQUFVO1FBQzVDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFHL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFdBQVc7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzFCLENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQjtRQUNiLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjO1FBQ1YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxLQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FB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Q0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZtb2RlT2JqZWN0LCBGbW9kZVBhcnNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvcmUvcGFyc2VcIjtcclxuaW1wb3J0IHsgRm1vZGVDaGF0TWVzc2FnZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHsgTWVzc2FnZVNjZW5lIH0gZnJvbSBcIi4vbWVzc2FnZVwiO1xyXG5jb25zdCBQYXJzZSA9IEZtb2RlUGFyc2Uud2l0aChcIm5vdmFcIik7XHJcblxyXG4vKipcclxuICogTWVzc2FnZU1hbmFnZXJPcHRpb25zIC0g5raI5oGv566h55CG5Zmo6YWN572uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VNYW5hZ2VyT3B0aW9ucyB7XHJcbiAgICBjaGF0U2Vzc2lvbj86IEZtb2RlT2JqZWN0OyAgICAgLy8g5Y+v6YCJ55qE5Lya6K+d5a+56LGh77yI5pm66IO95L2T5a+56K+d5Zy65pmv77yJXHJcbiAgICByb2xlPzogRm1vZGVPYmplY3Q7ICAgICAgICAgICAgLy8g5Y+v6YCJ55qE6KeS6Imy5a+56LGh77yI5pm66IO95L2T5a+56K+d5Zy65pmv77yJXHJcbiAgICBjb21wYW55OiBGbW9kZU9iamVjdDsgICAgICAgICAgLy8g5b+F6ZyA55qE5LyB5Lia5a+56LGhXHJcbiAgICBncm91cD86IEZtb2RlT2JqZWN0OyAgICAgICAgICAvLyDnvqTogYrlr7nosaHvvIjnvqTogYrlnLrmma/vvIlcclxuICAgIHVzZXJGcm9tPzogRm1vZGVPYmplY3Q7ICAgICAgIC8vIOWPkemAgeiAhe+8iOengeiBiuWcuuaZr++8iVxyXG4gICAgdXNlclRvPzogRm1vZGVPYmplY3Q7ICAgICAgICAgLy8g5o6l5pS26ICF77yI56eB6IGK5Zy65pmv77yJXHJcbiAgICBjb250YWN0PzogRm1vZGVPYmplY3Q7ICAgICAgICAvLyDogZTns7vkurrvvIjlrqLmnI3lnLrmma/vvIlcclxuICAgIHNjZW5lPzogTWVzc2FnZVNjZW5lOyAgICAgICAgIC8vIOa2iOaBr+WcuuaZr1xyXG59XHJcblxyXG4vKipcclxuICogTWVzc2FnZU1hbmFnZXIgLSDkvJjljJbniYjmtojmga/nrqHnkIblmahcclxuICog6IGM6LSj77ya57uf5LiA566h55CG5raI5oGv5YiX6KGo77yM5pSv5oyB6auY5pWI55qE5aKe6YeP5pu05paw5ZKM5LiL5qCH6K6/6ZeuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTWVzc2FnZU1hbmFnZXIge1xyXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBNZXNzYWdlTWFuYWdlck9wdGlvbnM7XHJcbiAgICBwcml2YXRlIF9tZXNzYWdlTGlzdDogRm1vZGVPYmplY3RbXSA9IFtdOyAvLyDnu5/kuIDnmoTmtojmga/liJfooahcclxuICAgIHByaXZhdGUgX2lzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogTWVzc2FnZU1hbmFnZXJPcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOiOt+WPlue7n+S4gOeahOa2iOaBr+WIl+ihqFxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRNZXNzYWdlcygpOiBQcm9taXNlPEZtb2RlT2JqZWN0W10+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX2lzTG9hZGVkKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE1lc3NhZ2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLl9tZXNzYWdlTGlzdF07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDojrflj5bnvJPlrZjnmoTmtojmga/liJfooajvvIjlkIzmraXmlrnms5XvvIznlKjkuo7nu4Tku7bnu5HlrprvvIlcclxuICAgICAqIOebtOaOpei/lOWbnuW9k+WJjea2iOaBr+WIl+ihqO+8jOS4jei/m+ihjOW8guatpeWKoOi9vVxyXG4gICAgICovXHJcbiAgICBnZXRDYWNoZWRNZXNzYWdlcygpOiBGbW9kZU9iamVjdFtdIHtcclxuICAgICAgICByZXR1cm4gWy4uLnRoaXMuX21lc3NhZ2VMaXN0XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOebtOaOpeiuv+mXrua2iOaBr+WIl+ihqO+8iOeUqOS6juS4i+agh+iuv+mXru+8iVxyXG4gICAgICovXHJcbiAgICBnZXRNZXNzYWdlTGlzdCgpOiBGbW9kZU9iamVjdFtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZUxpc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDpgJrov4fkuIvmoIfojrflj5bmtojmga9cclxuICAgICAqL1xyXG4gICAgZ2V0TWVzc2FnZShpbmRleDogbnVtYmVyKTogRm1vZGVPYmplY3QgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlTGlzdFtpbmRleF07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmt7vliqDmlrDmtojmga/vvIjkvJjljJbniYjvvIlcclxuICAgICAqIOebtOaOpeWIm+W7ukZtb2RlT2JqZWN05bm25re75Yqg5Yiw5YiX6KGo5pyr5bC+77yM5bu26L+f5L+d5a2YXHJcbiAgICAgKi9cclxuICAgIGFkZE1lc3NhZ2UobWVzc2FnZTogRm1vZGVDaGF0TWVzc2FnZSwgc2NlbmU/OiBNZXNzYWdlU2NlbmUpOiBGbW9kZU9iamVjdCB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0U2NlbmUgPSBzY2VuZSB8fCB0aGlzLm9wdGlvbnMuc2NlbmUgfHwgTWVzc2FnZVNjZW5lLlJPTEU7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIOWIm+W7uuaWsOeahOa2iOaBr+Wvueixoe+8iOacquS/neWtmO+8iVxyXG4gICAgICAgICAgICBjb25zdCBNZXNzYWdlQ2xhc3MgPSBQYXJzZS5PYmplY3QuZXh0ZW5kKFwiTWVzc2FnZVwiKTtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZU9iaiA9IG5ldyBNZXNzYWdlQ2xhc3MoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIOiuvue9ruWfuuacrOS/oeaBr1xyXG4gICAgICAgICAgICBtZXNzYWdlT2JqLnNldChcInNjZW5lXCIsIHRhcmdldFNjZW5lKTtcclxuICAgICAgICAgICAgbWVzc2FnZU9iai5zZXQoXCJzdGF0dXNcIiwgXCJzZW50XCIpO1xyXG4gICAgICAgICAgICBtZXNzYWdlT2JqLnNldChcImNyZWF0ZWRBdFwiLCBtZXNzYWdlLmNyZWF0ZWRBdCB8fCBuZXcgRGF0ZSgpKTtcclxuICAgICAgICAgICAgbWVzc2FnZU9iai5zZXQoXCJjb21wbGV0ZVwiLCBtZXNzYWdlLmNvbXBsZXRlIHx8IGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIOiuvue9ruWGheWuuVxyXG4gICAgICAgICAgICBpZiAobWVzc2FnZS5jb250ZW50KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UuY29udGVudCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VPYmouc2V0KFwiY29udGVudFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBtZXNzYWdlLmNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShtZXNzYWdlLmNvbnRlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZU9iai5zZXQoXCJjb250ZW50XCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJtaXhlZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogbWVzc2FnZS5jb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VPYmouc2V0KFwiY29udGVudFwiLCBtZXNzYWdlLmNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyDorr7nva7op5LoibJcclxuICAgICAgICAgICAgaWYgKG1lc3NhZ2Uucm9sZSkge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZU9iai5zZXQoXCJyb2xlXCIsIG1lc3NhZ2Uucm9sZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIOiuvue9ruWFtuS7luWxnuaAp1xyXG4gICAgICAgICAgICBpZiAobWVzc2FnZS5qc29uKSBtZXNzYWdlT2JqLnNldChcImpzb25cIiwgbWVzc2FnZS5qc29uKTtcclxuICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaGlkZGVuKSBtZXNzYWdlT2JqLnNldChcImhpZGRlblwiLCBtZXNzYWdlLmhpZGRlbik7XHJcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLnZvaWNlKSBtZXNzYWdlT2JqLnNldChcInZvaWNlXCIsIG1lc3NhZ2Uudm9pY2UpO1xyXG4gICAgICAgICAgICBpZiAobWVzc2FnZS5jaWQpIG1lc3NhZ2VPYmouc2V0KFwiY2lkXCIsIG1lc3NhZ2UuY2lkKTtcclxuXHJcbiAgICAgICAgICAgIC8vIOagueaNruWcuuaZr+iuvue9ruWFs+iBlOWvueixoVxyXG4gICAgICAgICAgICBpZiAodGFyZ2V0U2NlbmUgPT09IE1lc3NhZ2VTY2VuZS5ST0xFICYmIHRoaXMub3B0aW9ucy5yb2xlKSB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlT2JqLnNldChcInJvbGVcIiwgdGhpcy5vcHRpb25zLnJvbGUudG9Qb2ludGVyKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGFueSkge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZU9iai5zZXQoXCJjb21wYW55XCIsIHRoaXMub3B0aW9ucy5jb21wYW55LnRvUG9pbnRlcigpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8g55u05o6l5re75Yqg5Yiw5YiX6KGo5pyr5bC+XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VMaXN0LnB1c2gobWVzc2FnZU9iaik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZU9iajtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwi5Yib5bu65paw5raI5oGv5aSx6LSlOlwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOW8guatpeS/neWtmOa2iOaBr+WvueixoVxyXG4gICAgICovXHJcbiAgICBhc3luYyBzYXZlTWVzc2FnZShtZXNzYWdlT2JqOiBGbW9kZU9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICghbWVzc2FnZU9iai5pZCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgbWVzc2FnZU9iai5zYXZlKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwi5L+d5a2Y5raI5oGv5a+56LGh5aSx6LSlOlwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmm7TmlrDmtojmga/vvIjkvJjljJbniYjvvIlcclxuICAgICAqIOebtOaOpemAmui/h+S4i+agh+abtOaWsOa2iOaBr+WvueixoeWxnuaAp1xyXG4gICAgICovXHJcbiAgICB1cGRhdGVNZXNzYWdlKGluZGV4OiBudW1iZXIsIG1lc3NhZ2U6IFBhcnRpYWw8Rm1vZGVDaGF0TWVzc2FnZT4pOiB2b2lkIHtcclxuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuX21lc3NhZ2VMaXN0Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBtZXNzYWdlT2JqID0gdGhpcy5fbWVzc2FnZUxpc3RbaW5kZXhdO1xyXG4gICAgICAgIGlmICghbWVzc2FnZU9iaikgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyDmm7TmlrDlhoXlrrlcclxuICAgICAgICBpZiAobWVzc2FnZS5jb250ZW50ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2VPYmouc2V0KFwiY29udGVudFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogbWVzc2FnZS5jb250ZW50XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG1lc3NhZ2UuY29udGVudCkpIHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2VPYmouc2V0KFwiY29udGVudFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJtaXhlZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBtZXNzYWdlLmNvbnRlbnRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZU9iai5zZXQoXCJjb250ZW50XCIsIG1lc3NhZ2UuY29udGVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOabtOaWsOWFtuS7luWxnuaAp1xyXG4gICAgICAgIGlmIChtZXNzYWdlLmNvbXBsZXRlICE9PSB1bmRlZmluZWQpIG1lc3NhZ2VPYmouc2V0KFwiY29tcGxldGVcIiwgbWVzc2FnZS5jb21wbGV0ZSk7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2Uucm9sZSkgbWVzc2FnZU9iai5zZXQoXCJyb2xlXCIsIG1lc3NhZ2Uucm9sZSk7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UuanNvbikgbWVzc2FnZU9iai5zZXQoXCJqc29uXCIsIG1lc3NhZ2UuanNvbik7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UuaGlkZGVuKSBtZXNzYWdlT2JqLnNldChcImhpZGRlblwiLCBtZXNzYWdlLmhpZGRlbik7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2Uudm9pY2UpIG1lc3NhZ2VPYmouc2V0KFwidm9pY2VcIiwgbWVzc2FnZS52b2ljZSk7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UuY2lkKSBtZXNzYWdlT2JqLnNldChcImNpZFwiLCBtZXNzYWdlLmNpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDph43mlrDliqDovb3mtojmga9cclxuICAgICAqL1xyXG4gICAgYXN5bmMgcmVsb2FkTWVzc2FnZXMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZUxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLl9pc0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0TWVzc2FnZXMoKTsgLy8g6Kem5Y+R6YeN5paw5Yqg6L29XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliqDovb3mtojmga/vvIjkvJjljJbniYjvvIlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkTWVzc2FnZXMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZUxpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gMS4g6aaW5YWI5Yqg6L296ICB54mI5raI5oGv77yI5aaC5p6c5pyJ77yJXHJcbiAgICAgICAgICAgIGNvbnN0IGxlZ2FjeU1lc3NhZ2VzID0gdGhpcy5vcHRpb25zLmNoYXRTZXNzaW9uPy5nZXQoXCJtZXNzYWdlTGlzdFwiKSB8fCBbXTtcclxuXHJcbiAgICAgICAgICAgIC8vIOi9rOaNouiAgeeJiOa2iOaBr+S4ukZtb2RlT2JqZWN077yI5LuF55So5LqO5bGV56S677yJXHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgbGVnYWN5TXNnIG9mIGxlZ2FjeU1lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBNZXNzYWdlQ2xhc3MgPSBQYXJzZS5PYmplY3QuZXh0ZW5kKFwiTWVzc2FnZVwiKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VPYmogPSBuZXcgTWVzc2FnZUNsYXNzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8g5aSN5Yi26ICB54mI5raI5oGv5bGe5oCnXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlT2JqLnNldChcInJvbGVcIiwgbGVnYWN5TXNnLnJvbGUpO1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZU9iai5zZXQoXCJjb250ZW50XCIsIGxlZ2FjeU1zZy5jb250ZW50KTtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2VPYmouc2V0KFwiY29tcGxldGVcIiwgbGVnYWN5TXNnLmNvbXBsZXRlKTtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2VPYmouc2V0KFwiY3JlYXRlZEF0XCIsIGxlZ2FjeU1zZy5jcmVhdGVkQXQpO1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZU9iai5zZXQoXCJ2b2ljZVwiLCBsZWdhY3lNc2cudm9pY2UpO1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZU9iai5zZXQoXCJjaWRcIiwgbGVnYWN5TXNnLmNpZCk7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlT2JqLnNldChcImlzTGVnYWN5XCIsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VMaXN0LnB1c2gobWVzc2FnZU9iaik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIDIuIOWKoOi9veaWsOeJiOa2iOaBr1xyXG4gICAgICAgICAgICBsZXQgbmV3TWVzc2FnZXM6IEZtb2RlT2JqZWN0W10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLnNjZW5lKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIE1lc3NhZ2VTY2VuZS5ST0xFOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2hhdFNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3TWVzc2FnZXMgPSBhd2FpdCB0aGlzLmxvYWRSb2xlTWVzc2FnZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIE1lc3NhZ2VTY2VuZS5HUk9VUDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld01lc3NhZ2VzID0gYXdhaXQgdGhpcy5sb2FkR3JvdXBNZXNzYWdlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgTWVzc2FnZVNjZW5lLlVTRVI6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy51c2VyRnJvbSAmJiB0aGlzLm9wdGlvbnMudXNlclRvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld01lc3NhZ2VzID0gYXdhaXQgdGhpcy5sb2FkVXNlck1lc3NhZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBNZXNzYWdlU2NlbmUuU0VSVklDRTpcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRhY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3TWVzc2FnZXMgPSBhd2FpdCB0aGlzLmxvYWRTZXJ2aWNlTWVzc2FnZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld01lc3NhZ2VzID0gW107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIDMuIOWwhuaWsOa2iOaBr+a3u+WKoOWIsOWIl+ihqOacq+WwvlxyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlTGlzdC5wdXNoKC4uLm5ld01lc3NhZ2VzKTtcclxuXHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIuWKoOi9vea2iOaBr+Wksei0pTpcIiwgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWKoOi9veinkuiJsuWvueivnea2iOaBr1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGFzeW5jIGxvYWRSb2xlTWVzc2FnZXMoKTogUHJvbWlzZTxGbW9kZU9iamVjdFtdPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuY2hhdFNlc3Npb24pIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoXCJNZXNzYWdlXCIpO1xyXG4gICAgICAgIHF1ZXJ5LmVxdWFsVG8oXCJzZXNzaW9uXCIsIHRoaXMub3B0aW9ucy5jaGF0U2Vzc2lvbik7XHJcbiAgICAgICAgcXVlcnkuYWRkQXNjZW5kaW5nKFwiY3JlYXRlZEF0XCIpO1xyXG4gICAgICAgIHF1ZXJ5LmxpbWl0KDEwMDApOyAvLyDpmZDliLbmlbDph4/pgb/lhY3mgKfog73pl67pophcclxuXHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHF1ZXJ5LmZpbmQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWKoOi9vee+pOiBiua2iOaBr++8iOeugOWMlueJiO+8iVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGFzeW5jIGxvYWRHcm91cE1lc3NhZ2VzKCk6IFByb21pc2U8Rm1vZGVPYmplY3RbXT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLmdyb3VwKSByZXR1cm4gW107XHJcblxyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KFwiTWVzc2FnZVwiKTtcclxuICAgICAgICBxdWVyeS5lcXVhbFRvKFwiZ3JvdXBcIiwgdGhpcy5vcHRpb25zLmdyb3VwKTtcclxuICAgICAgICBxdWVyeS5hZGRBc2NlbmRpbmcoXCJjcmVhdGVkQXRcIik7XHJcbiAgICAgICAgcXVlcnkubGltaXQoMTAwMCk7XHJcblxyXG4gICAgICAgIHJldHVybiBhd2FpdCBxdWVyeS5maW5kKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliqDovb3np4HogYrmtojmga/vvIjnroDljJbniYjvvIlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkVXNlck1lc3NhZ2VzKCk6IFByb21pc2U8Rm1vZGVPYmplY3RbXT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLnVzZXJGcm9tIHx8ICF0aGlzLm9wdGlvbnMudXNlclRvKSByZXR1cm4gW107XHJcblxyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KFwiTWVzc2FnZVwiKTtcclxuICAgICAgICBxdWVyeS5jb250YWluZWRJbihcInVzZXJGcm9tXCIsIFt0aGlzLm9wdGlvbnMudXNlckZyb20sIHRoaXMub3B0aW9ucy51c2VyVG9dKTtcclxuICAgICAgICBxdWVyeS5jb250YWluZWRJbihcInVzZXJUb1wiLCBbdGhpcy5vcHRpb25zLnVzZXJGcm9tLCB0aGlzLm9wdGlvbnMudXNlclRvXSk7XHJcbiAgICAgICAgcXVlcnkuYWRkQXNjZW5kaW5nKFwiY3JlYXRlZEF0XCIpO1xyXG4gICAgICAgIHF1ZXJ5LmxpbWl0KDEwMDApO1xyXG5cclxuICAgICAgICByZXR1cm4gYXdhaXQgcXVlcnkuZmluZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yqg6L295a6i5pyN5raI5oGv77yI566A5YyW54mI77yJXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYXN5bmMgbG9hZFNlcnZpY2VNZXNzYWdlcygpOiBQcm9taXNlPEZtb2RlT2JqZWN0W10+IHtcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5jb250YWN0KSByZXR1cm4gW107XHJcblxyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KFwiTWVzc2FnZVwiKTtcclxuICAgICAgICBxdWVyeS5lcXVhbFRvKFwiY29udGFjdFwiLCB0aGlzLm9wdGlvbnMuY29udGFjdCk7XHJcbiAgICAgICAgcXVlcnkuYWRkQXNjZW5kaW5nKFwiY3JlYXRlZEF0XCIpO1xyXG4gICAgICAgIHF1ZXJ5LmxpbWl0KDEwMDApO1xyXG5cclxuICAgICAgICByZXR1cm4gYXdhaXQgcXVlcnkuZmluZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog6I635Y+W5raI5oGv57uf6K6hXHJcbiAgICAgKi9cclxuICAgIGdldFN0YXRzKCk6IHtcclxuICAgICAgICB0b3RhbDogbnVtYmVyO1xyXG4gICAgICAgIHVzZXI6IG51bWJlcjtcclxuICAgICAgICBhc3Npc3RhbnQ6IG51bWJlcjtcclxuICAgICAgICBzeXN0ZW06IG51bWJlcjtcclxuICAgIH0ge1xyXG4gICAgICAgIGNvbnN0IHN0YXRzID0ge1xyXG4gICAgICAgICAgICB0b3RhbDogdGhpcy5fbWVzc2FnZUxpc3QubGVuZ3RoLFxyXG4gICAgICAgICAgICB1c2VyOiAwLFxyXG4gICAgICAgICAgICBhc3Npc3RhbnQ6IDAsXHJcbiAgICAgICAgICAgIHN5c3RlbTogMFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VMaXN0LmZvckVhY2gobXNnID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgcm9sZSA9IG1zZy5nZXQoXCJyb2xlXCIpO1xyXG4gICAgICAgICAgICBpZiAocm9sZSA9PT0gXCJ1c2VyXCIpIHN0YXRzLnVzZXIrKztcclxuICAgICAgICAgICAgaWYgKHJvbGUgPT09IFwiYXNzaXN0YW50XCIpIHN0YXRzLmFzc2lzdGFudCsrO1xyXG4gICAgICAgICAgICBpZiAocm9sZSA9PT0gXCJzeXN0ZW1cIikgc3RhdHMuc3lzdGVtKys7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBzdGF0cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOa4heepuua2iOaBr+WIl+ihqFxyXG4gICAgICovXHJcbiAgICBjbGVhckNhY2hlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5faXNMb2FkZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOiOt+WPluacgOaWsOa2iOaBr1xyXG4gICAgICovXHJcbiAgICBnZXRMYXN0TWVzc2FnZSgpOiBGbW9kZU9iamVjdCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VMaXN0Lmxlbmd0aCA+IDAgPyB0aGlzLl9tZXNzYWdlTGlzdFt0aGlzLl9tZXNzYWdlTGlzdC5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOiOt+WPlua2iOaBr+aVsOmHj1xyXG4gICAgICovXHJcbiAgICBnZXRNZXNzYWdlQ291bnQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZUxpc3QubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu66Z2Z5oCB5bel5Y6C5pa55rOV77yI5L+d5oyB5YW85a655oCn77yJXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjcmVhdGVGb3JSb2xlKGNoYXRTZXNzaW9uOiBGbW9kZU9iamVjdCwgcm9sZTogRm1vZGVPYmplY3QsIGNvbXBhbnk6IEZtb2RlT2JqZWN0KTogTWVzc2FnZU1hbmFnZXIge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWVzc2FnZU1hbmFnZXIoe1xyXG4gICAgICAgICAgICBjaGF0U2Vzc2lvbixcclxuICAgICAgICAgICAgcm9sZSxcclxuICAgICAgICAgICAgY29tcGFueSxcclxuICAgICAgICAgICAgc2NlbmU6IE1lc3NhZ2VTY2VuZS5ST0xFXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iXX0=
|
|
393
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9jb3JlL2FnZW50L2NoYXQvbWVzc2FnZS9tZXNzYWdlLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDekMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQWlCdEM7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFLdkIsWUFBWSxPQUE4QjtRQUhsQyxpQkFBWSxHQUFrQixFQUFFLENBQUMsQ0FBQyxVQUFVO1FBQzVDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFHL0IsT0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLEVBQUUsWUFBWSxJQUFJLEVBQUUsQ0FBQTtRQUNsRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSSxHQUFHLEdBQUksSUFBWSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ2xILE9BQU87WUFDSCxNQUFNLEVBQUMsU0FBUztZQUNoQixTQUFTLEVBQUMsU0FBUztZQUNuQixRQUFRLEVBQUMsR0FBRztTQUNmLENBQUE7SUFDTCxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxLQUFLLENBQUMsV0FBVztRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCO1FBQ2IsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDVixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLEtBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVLENBQUMsT0FBeUIsRUFBRSxLQUFvQjtRQUN0RCxNQUFNLFdBQVcsR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQztRQUVyRSxJQUFJLENBQUM7WUFDRCxnQkFBZ0I7WUFDaEIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUV0QyxTQUFTO1lBQ1QsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDckMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDakMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7WUFDN0QsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQztZQUV0RCw0Q0FBNEM7WUFDNUMsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUMxRCxDQUFDO1lBRUQsa0NBQWtDO1lBQ2xDLG1CQUFtQjtZQUNuQixJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2hDLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFHRCxhQUFhO1lBQ2IsdUNBQXVDO1lBQ3ZDLElBQUksV0FBVyxLQUFLLFlBQVksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDekQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNoRSxDQUFDO1lBQ0QsMEJBQTBCO1lBQzFCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdkIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztZQUN4RCxDQUFDO1lBRUQsK0JBQStCO1lBQy9CLGlDQUFpQztZQUNqQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzNCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQzlCLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BFLENBQUM7cUJBQU0sQ0FBQztvQkFDSiw0QkFBNEI7b0JBQzVCLFVBQVUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzVDLENBQUM7WUFDTCxDQUFDO1lBRUQsWUFBWTtZQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRW5DLE9BQU8sVUFBVSxDQUFDO1FBQ3RCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakMsTUFBTSxLQUFLLENBQUM7UUFDaEIsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQXVCO1FBQ3JDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUV4QixJQUFJLENBQUM7WUFDRCw0QkFBNEI7WUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQzdELFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUVELDhCQUE4QjtZQUM5QixvQ0FBb0M7WUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzVELDZCQUE2QjtnQkFDN0IsOEJBQThCO2dCQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQ2hDLE9BQU87WUFDWCxDQUFDO1lBRUQsTUFBTSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxtQkFBbUI7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUNyQyxPQUFPO1FBQ1gsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFvQixFQUFFLENBQUM7UUFFekMsS0FBSyxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekMsV0FBVztZQUNYLDJDQUEyQztZQUN2QyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDNUYsZ0RBQWdEO1lBQ3BELElBQUk7WUFFSixtQkFBbUI7WUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDakIsSUFBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUMsQ0FBQztvQkFDM0IsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BELENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLFlBQVksQ0FBQyxNQUFNLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxpQkFBaUIsQ0FBQyxXQUF3QjtRQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILGFBQWEsQ0FBQyxLQUFhLEVBQUUsT0FBa0M7UUFDM0QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUVoRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFN0IsU0FBUztRQUNULElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBRUQsa0JBQWtCO1FBQ2xCLGdEQUFnRDtRQUNoRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDeEQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUU7Z0JBQ3RCLEdBQUcsZUFBZTtnQkFDbEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO2FBQzNCLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxTQUFTO1FBQ1QsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVM7WUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakYsSUFBSSxPQUFPLENBQUMsSUFBSTtZQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLE9BQU8sQ0FBQyxNQUFNO1lBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdELElBQUksT0FBTyxDQUFDLEtBQUs7WUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsSUFBSSxPQUFPLENBQUMsR0FBRztZQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsb0JBQW9CLENBQUMsS0FBYSxFQUFFLE9BQWtDO1FBQ3hFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsY0FBYztRQUNoQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFNBQVM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLFlBQVk7UUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDO1lBQ0QsbUJBQW1CO1lBQ25CLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFMUUsNEJBQTRCO1lBQzVCLEtBQUssTUFBTSxTQUFTLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNwRCxNQUFNLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUV0QyxXQUFXO2dCQUNYLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ3RELFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0MsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMvQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2pELFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDekMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFakMsOEJBQThCO2dCQUM5QixJQUFJLE9BQU8sU0FBUyxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDeEMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUU7d0JBQzFCLElBQUksRUFBRSxNQUFNO3dCQUNaLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTzt3QkFDdkIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO3FCQUN2QixDQUFDLENBQUM7Z0JBQ1AsQ0FBQztxQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQzFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFO3dCQUMxQixJQUFJLEVBQUUsT0FBTzt3QkFDYixLQUFLLEVBQUUsU0FBUyxDQUFDLE9BQU87d0JBQ3hCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtxQkFDdkIsQ0FBQyxDQUFDO2dCQUNQLENBQUM7Z0JBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUVELFlBQVk7WUFDWixJQUFJLFdBQVcsR0FBa0IsRUFBRSxDQUFDO1lBRXBDLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDekIsS0FBSyxZQUFZLENBQUMsSUFBSTtvQkFDbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNwQixXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDaEQsQ0FBQztvQkFDRCxNQUFNO2dCQUNWLEtBQUssWUFBWSxDQUFDLEtBQUs7b0JBQ25CLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDckIsV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQ2pELENBQUM7b0JBQ0QsTUFBTTtnQkFDVixLQUFLLFlBQVksQ0FBQyxJQUFJO29CQUNsQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7d0JBQy9DLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUNoRCxDQUFDO29CQUNELE1BQU07Z0JBQ1YsS0FBSyxZQUFZLENBQUMsT0FBTztvQkFDckIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUN2QixXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztvQkFDbkQsQ0FBQztvQkFDRCxNQUFNO2dCQUNWO29CQUNJLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDekIsQ0FBQztZQUVELGlCQUFpQjtZQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBRTNDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxnQkFBZ0I7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUV0QyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUN2QixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3QyxLQUFLLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBRWhDLE9BQU8sTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLGlCQUFpQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDdkIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxLQUFLLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbEIsT0FBTyxNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsZ0JBQWdCO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRTlELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3ZCLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzVFLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzFFLEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVsQixPQUFPLE1BQU0sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxtQkFBbUI7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXJDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3ZCLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxCLE9BQU8sTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQU1KLE1BQU0sS0FBSyxHQUFHO1lBQ1YsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUMvQixJQUFJLEVBQUUsQ0FBQztZQUNQLFNBQVMsRUFBRSxDQUFDO1lBQ1osTUFBTSxFQUFFLENBQUM7U0FDWixDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDNUIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QixJQUFJLElBQUksS0FBSyxNQUFNO2dCQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLElBQUksS0FBSyxXQUFXO2dCQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM1QyxJQUFJLElBQUksS0FBSyxRQUFRO2dCQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVU7UUFDTixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjO1FBQ1YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN0RyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ1gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUFDLFdBQXdCLEVBQUUsSUFBaUIsRUFBRSxPQUFvQjtRQUNsRixPQUFPLElBQUksY0FBYyxDQUFDO1lBQ3RCLFdBQVc7WUFDWCxJQUFJO1lBQ0osT0FBTztZQUNQLEtBQUssRUFBRSxZQUFZLENBQUMsSUFBSTtTQUMzQixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGbW9kZU9iamVjdCwgRm1vZGVQYXJzZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb3JlL3BhcnNlXCI7XHJcbmltcG9ydCB7IEZtb2RlQ2hhdE1lc3NhZ2UgfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IE1lc3NhZ2VTY2VuZSB9IGZyb20gXCIuL21lc3NhZ2VcIjtcclxuY29uc3QgUGFyc2UgPSBGbW9kZVBhcnNlLndpdGgoXCJub3ZhXCIpO1xyXG5cclxuLyoqXHJcbiAqIE1lc3NhZ2VNYW5hZ2VyT3B0aW9ucyAtIOa2iOaBr+euoeeQhuWZqOmFjee9rlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlTWFuYWdlck9wdGlvbnMge1xyXG4gICAgY2hhdFNlc3Npb24/OiBGbW9kZU9iamVjdDsgICAgIC8vIOWPr+mAieeahOS8muivneWvueixoe+8iOaZuuiDveS9k+WvueivneWcuuaZr++8iVxyXG4gICAgcm9sZT86IEZtb2RlT2JqZWN0OyAgICAgICAgICAgIC8vIOWPr+mAieeahOinkuiJsuWvueixoe+8iOaZuuiDveS9k+WvueivneWcuuaZr++8iVxyXG4gICAgY29tcGFueTogRm1vZGVPYmplY3Q7ICAgICAgICAgIC8vIOW/hemcgOeahOS8geS4muWvueixoVxyXG4gICAgZ3JvdXA/OiBGbW9kZU9iamVjdDsgICAgICAgICAgLy8g576k6IGK5a+56LGh77yI576k6IGK5Zy65pmv77yJXHJcbiAgICB1c2VyRnJvbT86IEZtb2RlT2JqZWN0OyAgICAgICAvLyDlj5HpgIHogIXvvIjnp4HogYrlnLrmma/vvIlcclxuICAgIHVzZXJUbz86IEZtb2RlT2JqZWN0OyAgICAgICAgIC8vIOaOpeaUtuiAhe+8iOengeiBiuWcuuaZr++8iVxyXG4gICAgY29udGFjdD86IEZtb2RlT2JqZWN0OyAgICAgICAgLy8g6IGU57O75Lq677yI5a6i5pyN5Zy65pmv77yJXHJcbiAgICBzY2VuZT86IE1lc3NhZ2VTY2VuZTsgICAgICAgICAvLyDmtojmga/lnLrmma9cclxuICAgIGxpbWl0SGlzdG9yeT86bnVtYmVyOyAvLyDljoblj7Lmtojmga/mlbDph4/pmZDliLYg6buY6K6kMTBcclxufVxyXG5cclxuLyoqXHJcbiAqIE1lc3NhZ2VNYW5hZ2VyIC0g5LyY5YyW54mI5raI5oGv566h55CG5ZmoXHJcbiAqIOiBjOi0o++8mue7n+S4gOeuoeeQhua2iOaBr+WIl+ihqO+8jOaUr+aMgemrmOaViOeahOWinumHj+abtOaWsOWSjOS4i+agh+iuv+mXrlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VNYW5hZ2VyIHtcclxuICAgIHByaXZhdGUgb3B0aW9uczogTWVzc2FnZU1hbmFnZXJPcHRpb25zO1xyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZUxpc3Q6IEZtb2RlT2JqZWN0W10gPSBbXTsgLy8g57uf5LiA55qE5raI5oGv5YiX6KGoXHJcbiAgICBwcml2YXRlIF9pc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE1lc3NhZ2VNYW5hZ2VyT3B0aW9ucykge1xyXG4gICAgICAgIG9wdGlvbnMubGltaXRIaXN0b3J5ID0gb3B0aW9ucz8ubGltaXRIaXN0b3J5IHx8IDEwXHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb21wYW55UG9pbnRlcigpe1xyXG4gICAgICAgIGxldCBjaWQgPSAodGhpcyBhcyBhbnkpLm9wdGlvbnM/LmNvbXBhbnk/Lm9iamVjdElkIHx8IHRoaXMub3B0aW9ucz8uY29tcGFueT8uaWQgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjb21wYW55XCIpXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgX190eXBlOlwiUG9pbnRlclwiLFxyXG4gICAgICAgICAgICBjbGFzc05hbWU6XCJDb21wYW55XCIsXHJcbiAgICAgICAgICAgIG9iamVjdElkOmNpZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICog6I635Y+W57uf5LiA55qE5raI5oGv5YiX6KGoXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldE1lc3NhZ2VzKCk6IFByb21pc2U8Rm1vZGVPYmplY3RbXT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5faXNMb2FkZWQpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWVzc2FnZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5faXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWy4uLnRoaXMuX21lc3NhZ2VMaXN0XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOiOt+WPlue8k+WtmOeahOa2iOaBr+WIl+ihqO+8iOWQjOatpeaWueazle+8jOeUqOS6jue7hOS7tue7keWumu+8iVxyXG4gICAgICog55u05o6l6L+U5Zue5b2T5YmN5raI5oGv5YiX6KGo77yM5LiN6L+b6KGM5byC5q2l5Yqg6L29XHJcbiAgICAgKi9cclxuICAgIGdldENhY2hlZE1lc3NhZ2VzKCk6IEZtb2RlT2JqZWN0W10ge1xyXG4gICAgICAgIHJldHVybiBbLi4udGhpcy5fbWVzc2FnZUxpc3RdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog55u05o6l6K6/6Zeu5raI5oGv5YiX6KGo77yI55So5LqO5LiL5qCH6K6/6Zeu77yJXHJcbiAgICAgKi9cclxuICAgIGdldE1lc3NhZ2VMaXN0KCk6IEZtb2RlT2JqZWN0W10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlTGlzdDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOmAmui/h+S4i+agh+iOt+WPlua2iOaBr1xyXG4gICAgICovXHJcbiAgICBnZXRNZXNzYWdlKGluZGV4OiBudW1iZXIpOiBGbW9kZU9iamVjdCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VMaXN0W2luZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOa3u+WKoOaWsOa2iOaBr++8iOS8mOWMlueJiO+8iVxyXG4gICAgICog55u05o6l5Yib5bu6Rm1vZGVPYmplY3Tlubbmt7vliqDliLDliJfooajmnKvlsL7vvIzlu7bov5/kv53lrZhcclxuICAgICAqL1xyXG4gICAgYWRkTWVzc2FnZShtZXNzYWdlOiBGbW9kZUNoYXRNZXNzYWdlLCBzY2VuZT86IE1lc3NhZ2VTY2VuZSk6IEZtb2RlT2JqZWN0IHtcclxuICAgICAgICBjb25zdCB0YXJnZXRTY2VuZSA9IHNjZW5lIHx8IHRoaXMub3B0aW9ucy5zY2VuZSB8fCBNZXNzYWdlU2NlbmUuUk9MRTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8g5Yib5bu65paw55qE5raI5oGv5a+56LGh77yI5pyq5L+d5a2Y77yJXHJcbiAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2VDbGFzcyA9IFBhcnNlLk9iamVjdC5leHRlbmQoXCJNZXNzYWdlXCIpO1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlT2JqID0gbmV3IE1lc3NhZ2VDbGFzcygpO1xyXG5cclxuICAgICAgICAgICAgLy8g6K6+572u5Z+65pys5L+h5oGvXHJcbiAgICAgICAgICAgIG1lc3NhZ2VPYmouc2V0KFwic2NlbmVcIiwgdGFyZ2V0U2NlbmUpO1xyXG4gICAgICAgICAgICBtZXNzYWdlT2JqLnNldChcInN0YXR1c1wiLCBcInNlbnRcIik7XHJcbiAgICAgICAgICAgIG1lc3NhZ2VPYmouc2V0KFwiY3JlYXRlZEF0XCIsIG1lc3NhZ2UuY3JlYXRlZEF0IHx8IG5ldyBEYXRlKCkpO1xyXG4gICAgICAgICAgICBtZXNzYWdlT2JqLnNldChcImNvbXBsZXRlXCIsIG1lc3NhZ2UuY29tcGxldGUgfHwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgLy8g6K6+572u5raI5oGv6KeS6Imy77yIdXNlci9hc3Npc3RhbnQvc3lzdGVt77yJLSDov5nmmK/mtojmga/nmoTlj5HpgIHogIXop5LoibJcclxuICAgICAgICAgICAgaWYgKG1lc3NhZ2Uucm9sZSkge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZU9iai5zZXQoXCJyb2xlXCIsIHRoaXMub3B0aW9ucy5yb2xlLnRvUG9pbnRlcigpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8g6K6+572u5YaF5a65IC0g5L+d5oyB5Y6f5aeL5qC85byP5YW85a6577yIc3RyaW5nIOaIliBBcnJhee+8iVxyXG4gICAgICAgICAgICAvLyDlkIzml7bmianlsZXlrZjlgqjmoLzlvI/vvIzmlK/mjIHmm7TlpJrlhYPmlbDmja5cclxuICAgICAgICAgICAgaWYgKG1lc3NhZ2UuY29udGVudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlT2JqLnNldChcImNvbnRlbnRcIiwgbWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAvLyDmoLnmja7lnLrmma/orr7nva7lhbPogZTlr7nosaFcclxuICAgICAgICAgICAgLy8gYXZhdGFyUm9sZe+8muaMh+WQkSBBdmF0YXJSb2xlIOihqOeahOaMh+mSiO+8iOaZuuiDveS9k+inkuiJsu+8iVxyXG4gICAgICAgICAgICBpZiAodGFyZ2V0U2NlbmUgPT09IE1lc3NhZ2VTY2VuZS5ST0xFICYmIHRoaXMub3B0aW9ucy5yb2xlKSB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlT2JqLnNldChcImF2YXRhclJvbGVcIiwgdGhpcy5vcHRpb25zLnJvbGUudG9Qb2ludGVyKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNvbXBhbnnvvJrmjIflkJEgQ29tcGFueSDooajnmoTmjIfpkohcclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYW55KSB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlT2JqLnNldChcImNvbXBhbnlcIiwgdGhpcy5nZXRDb21wYW55UG9pbnRlcigpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8g5YWz6ZSu77ya5aaC5p6cY2hhdFNlc3Npb27lt7LlrZjlnKjkuJTmnIlpZO+8jOeri+WNs+WFs+iBlFxyXG4gICAgICAgICAgICAvLyDlpoLmnpxjaGF0U2Vzc2lvbui/mOayoeaciWlk77yI5paw5Lya6K+d77yJ77yM5qCH6K6w5Li65b6F5YWz6IGUXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2hhdFNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2hhdFNlc3Npb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlT2JqLnNldChcInNlc3Npb25cIiwgdGhpcy5vcHRpb25zLmNoYXRTZXNzaW9uLnRvUG9pbnRlcigpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5paw5Lya6K+d77yM5qCH6K6w5b6F5YWz6IGU77yM562J5b6Fc2Vzc2lvbuS/neWtmOWQjuWGjeWFs+iBlFxyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VPYmouc2V0KFwiX3BlbmRpbmdTZXNzaW9uXCIsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyDnm7TmjqXmt7vliqDliLDliJfooajmnKvlsL5cclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUxpc3QucHVzaChtZXNzYWdlT2JqKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlT2JqO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCLliJvlu7rmlrDmtojmga/lpLHotKU6XCIsIGVycm9yKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5byC5q2l5L+d5a2Y5raI5oGv5a+56LGhXHJcbiAgICAgKiDlop7lvLrniYjvvJrlpITnkIZzZXNzaW9u5YWz6IGU5ZKM5bu26L+f5L+d5a2YXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNhdmVNZXNzYWdlKG1lc3NhZ2VPYmo6IEZtb2RlT2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKCFtZXNzYWdlT2JqKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIOajgOafpeaYr+WQpumcgOimgeWFs+iBlHNlc3Npb27vvIjlr7nkuo7mlrDkvJror53nmoTmtojmga/vvIlcclxuICAgICAgICAgICAgaWYgKCFtZXNzYWdlT2JqLmdldChcInNlc3Npb25cIikgJiYgdGhpcy5vcHRpb25zLmNoYXRTZXNzaW9uPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZU9iai5zZXQoXCJzZXNzaW9uXCIsIHRoaXMub3B0aW9ucy5jaGF0U2Vzc2lvbi50b1BvaW50ZXIoKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIOehruS/nea2iOaBr+acieWFs+iBlOeahHNlc3Npb27miY3kv53lrZjliLBNZXNzYWdl6KGoXHJcbiAgICAgICAgICAgIC8vIOWmguaenOayoeaciXNlc3Npb27kuJTkuI3mmK/ogIHmtojmga/ovazmjaLnmoTvvIzlhYjkuI3kv53lrZjvvIjlj6rlrZjlnKjkuo7lhoXlrZjvvIlcclxuICAgICAgICAgICAgaWYgKCFtZXNzYWdlT2JqLmdldChcInNlc3Npb25cIikgJiYgIW1lc3NhZ2VPYmouZ2V0KFwiaXNMZWdhY3lcIikpIHtcclxuICAgICAgICAgICAgICAgIC8vIOayoeaciXNlc3Npb27nmoTmtojmga/mmoLml7bkuI3kv53lrZjliLBNZXNzYWdl6KGoXHJcbiAgICAgICAgICAgICAgICAvLyDnrYlzZXNzaW9u5Yib5bu65ZCO5Lya5YaN5qyh6LCD55Soc2F2ZU1lc3NhZ2VcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5raI5oGv562J5b6Fc2Vzc2lvbuWIm+W7uuWQjuS/neWtmFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYXdhaXQgbWVzc2FnZU9iai5zYXZlKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIuS/neWtmOa2iOaBr+WvueixoeWksei0pTpcIiwgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWcqHNlc3Npb27liJvlu7ov5pu05paw5ZCO77yM5L+d5a2Y5omA5pyJ5b6F5YWz6IGU55qE5raI5oGvXHJcbiAgICAgKiDlhbPplK7mlrnms5XvvJrlnKhjaGF0U2Vzc2lvbuS/neWtmOaIkOWKn+WQjuiwg+eUqFxyXG4gICAgICovXHJcbiAgICBhc3luYyBzYXZlUGVuZGluZ01lc3NhZ2VzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLmNoYXRTZXNzaW9uPy5pZCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJzZXNzaW9u5pyq5L+d5a2Y77yM5peg5rOV5L+d5a2Y5b6F5aSE55CG5raI5oGvXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzYXZlUHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IG1lc3NhZ2VPYmogb2YgdGhpcy5fbWVzc2FnZUxpc3QpIHtcclxuICAgICAgICAgICAgLy8g5aSE55CG5b6F5YWz6IGU55qE5raI5oGvXHJcbiAgICAgICAgICAgIC8vIGlmIChtZXNzYWdlT2JqLmdldChcIl9wZW5kaW5nU2Vzc2lvblwiKSkge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZU9iai5zZXQoXCJzZXNzaW9uXCIsIG1lc3NhZ2VPYmo/LmdldChcInNlc3Npb25cIil8fHRoaXMub3B0aW9ucy5jaGF0U2Vzc2lvbi50b1BvaW50ZXIoKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBtZXNzYWdlT2JqLnNldChcIl9wZW5kaW5nU2Vzc2lvblwiLCB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAvLyDkv53lrZjmiYDmnInmsqHmnIlpZOeahOa2iOaBr++8iOaWsOa2iOaBr++8iVxyXG4gICAgICAgICAgICBpZiAoIW1lc3NhZ2VPYmouaWQpIHtcclxuICAgICAgICAgICAgICAgIGlmKCFtZXNzYWdlT2JqPy5nZXQoXCJoaWRkZW5cIikpe1xyXG4gICAgICAgICAgICAgICAgICAgIHNhdmVQcm9taXNlcy5wdXNoKHRoaXMuc2F2ZU1lc3NhZ2UobWVzc2FnZU9iaikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2F2ZVByb21pc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoc2F2ZVByb21pc2VzKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYOS/neWtmOS6hiAke3NhdmVQcm9taXNlcy5sZW5ndGh9IOadoeW+heWkhOeQhua2iOaBr2ApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOabtOaWsGNoYXRTZXNzaW9u5byV55So77yI5b2T5paw5Lya6K+d56ys5LiA5qyh5L+d5a2Y5ZCO77yJXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUNoYXRTZXNzaW9uKGNoYXRTZXNzaW9uOiBGbW9kZU9iamVjdCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5jaGF0U2Vzc2lvbiA9IGNoYXRTZXNzaW9uO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5pu05paw5raI5oGv77yI5LyY5YyW54mI77yJXHJcbiAgICAgKiDnm7TmjqXpgJrov4fkuIvmoIfmm7TmlrDmtojmga/lr7nosaHlsZ7mgKfvvIzov5Tlm57mmK/lkKbmiJDlip9cclxuICAgICAqL1xyXG4gICAgdXBkYXRlTWVzc2FnZShpbmRleDogbnVtYmVyLCBtZXNzYWdlOiBQYXJ0aWFsPEZtb2RlQ2hhdE1lc3NhZ2U+KTogRm1vZGVPYmplY3QgfCBudWxsIHtcclxuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuX21lc3NhZ2VMaXN0Lmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VPYmogPSB0aGlzLl9tZXNzYWdlTGlzdFtpbmRleF07XHJcbiAgICAgICAgaWYgKCFtZXNzYWdlT2JqKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgLy8g5pu05paw5raI5oGv6KeS6ImyXHJcbiAgICAgICAgaWYgKG1lc3NhZ2Uucm9sZSkge1xyXG4gICAgICAgICAgICBtZXNzYWdlT2JqLnNldChcInJvbGVcIiwgdGhpcy5vcHRpb25zLnJvbGUudG9Qb2ludGVyKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5pu05paw5YaF5a65IC0g5L+d5oyB5Y6f5aeL5qC85byP5YW85a65XHJcbiAgICAgICAgLy8g5LuO546w5pyJIGNvbnRlbnQg5Lit6I635Y+W5a6M5pW055qEIEZtb2RlQ2hhdE1lc3NhZ2Ug5a+56LGh77yM54S25ZCO5pu05paw5a2X5q61XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UuY29udGVudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQ29udGVudCA9IG1lc3NhZ2VPYmouZ2V0KFwiY29udGVudFwiKSB8fCB7fTtcclxuICAgICAgICAgICAgbWVzc2FnZU9iai5zZXQoXCJjb250ZW50XCIsIHtcclxuICAgICAgICAgICAgICAgIC4uLmV4aXN0aW5nQ29udGVudCxcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2UuY29udGVudFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOabtOaWsOWFtuS7luWxnuaAp1xyXG4gICAgICAgIGlmIChtZXNzYWdlLmNvbXBsZXRlICE9PSB1bmRlZmluZWQpIG1lc3NhZ2VPYmouc2V0KFwiY29tcGxldGVcIiwgbWVzc2FnZS5jb21wbGV0ZSk7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UuanNvbikgbWVzc2FnZU9iai5zZXQoXCJqc29uXCIsIG1lc3NhZ2UuanNvbik7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UuaGlkZGVuKSBtZXNzYWdlT2JqLnNldChcImhpZGRlblwiLCBtZXNzYWdlLmhpZGRlbik7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2Uudm9pY2UpIG1lc3NhZ2VPYmouc2V0KFwidm9pY2VcIiwgbWVzc2FnZS52b2ljZSk7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UuY2lkKSBtZXNzYWdlT2JqLnNldChcImNpZFwiLCBtZXNzYWdlLmNpZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBtZXNzYWdlT2JqO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5pu05paw5raI5oGv5bm25byC5q2l5L+d5a2YXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHVwZGF0ZU1lc3NhZ2VBbmRTYXZlKGluZGV4OiBudW1iZXIsIG1lc3NhZ2U6IFBhcnRpYWw8Rm1vZGVDaGF0TWVzc2FnZT4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCBtZXNzYWdlT2JqID0gdGhpcy51cGRhdGVNZXNzYWdlKGluZGV4LCBtZXNzYWdlKTtcclxuICAgICAgICBpZiAoIW1lc3NhZ2VPYmo/LmdldChcImhpZGRlblwiKSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNhdmVNZXNzYWdlKG1lc3NhZ2VPYmopO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOmHjeaWsOWKoOi9vea2iOaBr1xyXG4gICAgICovXHJcbiAgICBhc3luYyByZWxvYWRNZXNzYWdlcygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLl9tZXNzYWdlTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2lzTG9hZGVkID0gZmFsc2U7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRNZXNzYWdlcygpOyAvLyDop6blj5Hph43mlrDliqDovb1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWKoOi9vea2iOaBr++8iOS8mOWMlueJiO+8iVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGFzeW5jIGxvYWRNZXNzYWdlcygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLl9tZXNzYWdlTGlzdCA9IFtdO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyAxLiDpppblhYjliqDovb3ogIHniYjmtojmga/vvIjlpoLmnpzmnInvvIlcclxuICAgICAgICAgICAgY29uc3QgbGVnYWN5TWVzc2FnZXMgPSB0aGlzLm9wdGlvbnMuY2hhdFNlc3Npb24/LmdldChcIm1lc3NhZ2VMaXN0XCIpIHx8IFtdO1xyXG5cclxuICAgICAgICAgICAgLy8g6L2s5o2i6ICB54mI5raI5oGv5Li6Rm1vZGVPYmplY3TvvIjku4XnlKjkuo7lsZXnpLrvvIlcclxuICAgICAgICAgICAgZm9yIChjb25zdCBsZWdhY3lNc2cgb2YgbGVnYWN5TWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2VDbGFzcyA9IFBhcnNlLk9iamVjdC5leHRlbmQoXCJNZXNzYWdlXCIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZU9iaiA9IG5ldyBNZXNzYWdlQ2xhc3MoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyDlpI3liLbogIHniYjmtojmga/lsZ7mgKdcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2VPYmouc2V0KFwicm9sZVwiLCB0aGlzLm9wdGlvbnMucm9sZS50b1BvaW50ZXIoKSk7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlT2JqLnNldChcImNvbnRlbnRcIiwgbGVnYWN5TXNnLmNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZU9iai5zZXQoXCJjb21wbGV0ZVwiLCBsZWdhY3lNc2cuY29tcGxldGUpO1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZU9iai5zZXQoXCJjcmVhdGVkQXRcIiwgbGVnYWN5TXNnLmNyZWF0ZWRBdCk7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlT2JqLnNldChcInZvaWNlXCIsIGxlZ2FjeU1zZy52b2ljZSk7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlT2JqLnNldChcImNpZFwiLCBsZWdhY3lNc2cuY2lkKTtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2VPYmouc2V0KFwiaXNMZWdhY3lcIiwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8g5Li66ICB5raI5oGv5ZCM5q2l5Yib5bu6IGNvbnRlbnREYXRh77yM5L+d5oyB5qC85byP57uf5LiAXHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGxlZ2FjeU1zZy5jb250ZW50ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZU9iai5zZXQoXCJjb250ZW50RGF0YVwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBsZWdhY3lNc2cuY29udGVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZTogbGVnYWN5TXNnLnJvbGVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShsZWdhY3lNc2cuY29udGVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlT2JqLnNldChcImNvbnRlbnREYXRhXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJtaXhlZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogbGVnYWN5TXNnLmNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IGxlZ2FjeU1zZy5yb2xlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUxpc3QucHVzaChtZXNzYWdlT2JqKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gMi4g5Yqg6L295paw54mI5raI5oGvXHJcbiAgICAgICAgICAgIGxldCBuZXdNZXNzYWdlczogRm1vZGVPYmplY3RbXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLm9wdGlvbnMuc2NlbmUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgTWVzc2FnZVNjZW5lLlJPTEU6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yb2xlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld01lc3NhZ2VzID0gYXdhaXQgdGhpcy5sb2FkUm9sZU1lc3NhZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBNZXNzYWdlU2NlbmUuR1JPVVA6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ncm91cCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdNZXNzYWdlcyA9IGF3YWl0IHRoaXMubG9hZEdyb3VwTWVzc2FnZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIE1lc3NhZ2VTY2VuZS5VU0VSOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudXNlckZyb20gJiYgdGhpcy5vcHRpb25zLnVzZXJUbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdNZXNzYWdlcyA9IGF3YWl0IHRoaXMubG9hZFVzZXJNZXNzYWdlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgTWVzc2FnZVNjZW5lLlNFUlZJQ0U6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb250YWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld01lc3NhZ2VzID0gYXdhaXQgdGhpcy5sb2FkU2VydmljZU1lc3NhZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdNZXNzYWdlcyA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyAzLiDlsIbmlrDmtojmga/mt7vliqDliLDliJfooajmnKvlsL5cclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUxpc3QucHVzaCguLi5uZXdNZXNzYWdlcyk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCLliqDovb3mtojmga/lpLHotKU6XCIsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliqDovb3op5LoibLlr7nor53mtojmga9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkUm9sZU1lc3NhZ2VzKCk6IFByb21pc2U8Rm1vZGVPYmplY3RbXT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLnJvbGU/LmlkKSByZXR1cm4gW107XHJcblxyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KFwiTWVzc2FnZVwiKTtcclxuICAgICAgICBxdWVyeS5leGlzdHMoXCJjb250ZW50XCIpXHJcbiAgICAgICAgcXVlcnkuZXF1YWxUbyhcInJvbGVcIiwgdGhpcy5vcHRpb25zLnJvbGU/LmlkKTtcclxuICAgICAgICBxdWVyeS5hZGRBc2NlbmRpbmcoXCJjcmVhdGVkQXRcIik7XHJcbiAgICAgICAgcXVlcnkubGltaXQoMTAwMCk7IC8vIOmZkOWItuaVsOmHj+mBv+WFjeaAp+iDvemXrumimFxyXG5cclxuICAgICAgICByZXR1cm4gYXdhaXQgcXVlcnkuZmluZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yqg6L29576k6IGK5raI5oGv77yI566A5YyW54mI77yJXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYXN5bmMgbG9hZEdyb3VwTWVzc2FnZXMoKTogUHJvbWlzZTxGbW9kZU9iamVjdFtdPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZ3JvdXApIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoXCJNZXNzYWdlXCIpO1xyXG4gICAgICAgIHF1ZXJ5LmV4aXN0cyhcImNvbnRlbnRcIilcclxuICAgICAgICBxdWVyeS5lcXVhbFRvKFwiZ3JvdXBcIiwgdGhpcy5vcHRpb25zLmdyb3VwKTtcclxuICAgICAgICBxdWVyeS5hZGRBc2NlbmRpbmcoXCJjcmVhdGVkQXRcIik7XHJcbiAgICAgICAgcXVlcnkubGltaXQoMTAwMCk7XHJcblxyXG4gICAgICAgIHJldHVybiBhd2FpdCBxdWVyeS5maW5kKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliqDovb3np4HogYrmtojmga/vvIjnroDljJbniYjvvIlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkVXNlck1lc3NhZ2VzKCk6IFByb21pc2U8Rm1vZGVPYmplY3RbXT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLnVzZXJGcm9tIHx8ICF0aGlzLm9wdGlvbnMudXNlclRvKSByZXR1cm4gW107XHJcblxyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KFwiTWVzc2FnZVwiKTtcclxuICAgICAgICBxdWVyeS5leGlzdHMoXCJjb250ZW50XCIpXHJcbiAgICAgICAgcXVlcnkuY29udGFpbmVkSW4oXCJ1c2VyRnJvbVwiLCBbdGhpcy5vcHRpb25zLnVzZXJGcm9tLCB0aGlzLm9wdGlvbnMudXNlclRvXSk7XHJcbiAgICAgICAgcXVlcnkuY29udGFpbmVkSW4oXCJ1c2VyVG9cIiwgW3RoaXMub3B0aW9ucy51c2VyRnJvbSwgdGhpcy5vcHRpb25zLnVzZXJUb10pO1xyXG4gICAgICAgIHF1ZXJ5LmFkZEFzY2VuZGluZyhcImNyZWF0ZWRBdFwiKTtcclxuICAgICAgICBxdWVyeS5saW1pdCgxMDAwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHF1ZXJ5LmZpbmQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWKoOi9veWuouacjea2iOaBr++8iOeugOWMlueJiO+8iVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGFzeW5jIGxvYWRTZXJ2aWNlTWVzc2FnZXMoKTogUHJvbWlzZTxGbW9kZU9iamVjdFtdPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuY29udGFjdCkgcmV0dXJuIFtdO1xyXG5cclxuICAgICAgICBjb25zdCBxdWVyeSA9IG5ldyBQYXJzZS5RdWVyeShcIk1lc3NhZ2VcIik7XHJcbiAgICAgICAgcXVlcnkuZXhpc3RzKFwiY29udGVudFwiKVxyXG4gICAgICAgIHF1ZXJ5LmVxdWFsVG8oXCJjb250YWN0XCIsIHRoaXMub3B0aW9ucy5jb250YWN0KTtcclxuICAgICAgICBxdWVyeS5hZGRBc2NlbmRpbmcoXCJjcmVhdGVkQXRcIik7XHJcbiAgICAgICAgcXVlcnkubGltaXQoMTAwMCk7XHJcblxyXG4gICAgICAgIHJldHVybiBhd2FpdCBxdWVyeS5maW5kKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDojrflj5bmtojmga/nu5/orqFcclxuICAgICAqL1xyXG4gICAgZ2V0U3RhdHMoKToge1xyXG4gICAgICAgIHRvdGFsOiBudW1iZXI7XHJcbiAgICAgICAgdXNlcjogbnVtYmVyO1xyXG4gICAgICAgIGFzc2lzdGFudDogbnVtYmVyO1xyXG4gICAgICAgIHN5c3RlbTogbnVtYmVyO1xyXG4gICAgfSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdHMgPSB7XHJcbiAgICAgICAgICAgIHRvdGFsOiB0aGlzLl9tZXNzYWdlTGlzdC5sZW5ndGgsXHJcbiAgICAgICAgICAgIHVzZXI6IDAsXHJcbiAgICAgICAgICAgIGFzc2lzdGFudDogMCxcclxuICAgICAgICAgICAgc3lzdGVtOiAwXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZUxpc3QuZm9yRWFjaChtc2cgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByb2xlID0gbXNnLmdldChcInJvbGVcIik7XHJcbiAgICAgICAgICAgIGlmIChyb2xlID09PSBcInVzZXJcIikgc3RhdHMudXNlcisrO1xyXG4gICAgICAgICAgICBpZiAocm9sZSA9PT0gXCJhc3Npc3RhbnRcIikgc3RhdHMuYXNzaXN0YW50Kys7XHJcbiAgICAgICAgICAgIGlmIChyb2xlID09PSBcInN5c3RlbVwiKSBzdGF0cy5zeXN0ZW0rKztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHN0YXRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5riF56m65raI5oGv5YiX6KGoXHJcbiAgICAgKi9cclxuICAgIGNsZWFyQ2FjaGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZUxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLl9pc0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog6I635Y+W5pyA5paw5raI5oGvXHJcbiAgICAgKi9cclxuICAgIGdldExhc3RNZXNzYWdlKCk6IEZtb2RlT2JqZWN0IHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZUxpc3QubGVuZ3RoID4gMCA/IHRoaXMuX21lc3NhZ2VMaXN0W3RoaXMuX21lc3NhZ2VMaXN0Lmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog6I635Y+W5raI5oGv5pWw6YePXHJcbiAgICAgKi9cclxuICAgIGdldE1lc3NhZ2VDb3VudCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlTGlzdC5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliJvlu7rpnZnmgIHlt6XljoLmlrnms5XvvIjkv53mjIHlhbzlrrnmgKfvvIlcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGNyZWF0ZUZvclJvbGUoY2hhdFNlc3Npb246IEZtb2RlT2JqZWN0LCByb2xlOiBGbW9kZU9iamVjdCwgY29tcGFueTogRm1vZGVPYmplY3QpOiBNZXNzYWdlTWFuYWdlciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNZXNzYWdlTWFuYWdlcih7XHJcbiAgICAgICAgICAgIGNoYXRTZXNzaW9uLFxyXG4gICAgICAgICAgICByb2xlLFxyXG4gICAgICAgICAgICBjb21wYW55LFxyXG4gICAgICAgICAgICBzY2VuZTogTWVzc2FnZVNjZW5lLlJPTEVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSJdfQ==
|
|
@@ -72,7 +72,8 @@ export class FmodeCloud {
|
|
|
72
72
|
}
|
|
73
73
|
async function(params = {}, options = {}) {
|
|
74
74
|
const config = this.currentConfig;
|
|
75
|
-
|
|
75
|
+
let u = new URL(config.serverURL);
|
|
76
|
+
let url = u.origin + "/api/functions";
|
|
76
77
|
const requestBody = {
|
|
77
78
|
...params,
|
|
78
79
|
_ApplicationId: config.appId,
|
|
@@ -100,7 +101,20 @@ export class FmodeCloud {
|
|
|
100
101
|
if (!response.ok) {
|
|
101
102
|
throw new Error(`HTTP error! status: ${response.status}`);
|
|
102
103
|
}
|
|
103
|
-
const data = await response.json();
|
|
104
|
+
// const data = await response.json();
|
|
105
|
+
// 【关键】直接从 body 获取 reader,只读取一次
|
|
106
|
+
const reader = response.body?.getReader();
|
|
107
|
+
if (!reader) {
|
|
108
|
+
throw new Error('No body reader available');
|
|
109
|
+
}
|
|
110
|
+
// 只读取一次!
|
|
111
|
+
const { value, done } = await reader.read();
|
|
112
|
+
if (!value) {
|
|
113
|
+
throw new Error('Empty response body');
|
|
114
|
+
}
|
|
115
|
+
const decoder = new TextDecoder();
|
|
116
|
+
const text = decoder.decode(value);
|
|
117
|
+
const data = JSON.parse(text);
|
|
104
118
|
if (data.error) {
|
|
105
119
|
throw new Error(data.error.message || 'Cloud function error');
|
|
106
120
|
}
|
|
@@ -145,4 +159,4 @@ export class FmodeCloud {
|
|
|
145
159
|
}
|
|
146
160
|
export const Cloud = FmodeCloud.getInstance();
|
|
147
161
|
export default Cloud;
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUuY2xvdWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2NvcmUvcGFyc2UvZm1vZGUuY2xvdWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JBLE1BQU0sT0FBTyxVQUFVO2FBQ04sdUJBQWtCLEdBQXNCLElBQUksQUFBMUIsQ0FBMkI7SUFHNUQ7UUFGUSxvQkFBZSxHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRXZDLENBQUMsQ0FBQyx1QkFBdUI7SUFFbEQsTUFBTSxDQUFDLFdBQVc7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzdDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQseUNBQXlDO2FBQ2xDLGNBQVMsR0FBUSxJQUFJLEFBQVosQ0FBYTtJQUU3QixNQUFNLENBQUMsWUFBWSxDQUFDLFFBQWE7UUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDNUIsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxJQUFjLGFBQWE7UUFDekIsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUMzQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7UUFDRCxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUVELFdBQVc7SUFDWCxNQUFNLEtBQUssUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxZQUFvQixFQUFFLGFBQTRCO1FBQ3ZELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFvQixFQUFFLFNBQWMsRUFBRSxFQUFFLFVBQWUsRUFBRTtRQUNqRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ2xDLE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLFNBQVMsY0FBYyxZQUFZLEVBQUUsQ0FBQztRQUU1RCxNQUFNLFdBQVcsR0FBRztZQUNsQixHQUFHLE1BQU07WUFDVCxjQUFjLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDNUIsdURBQXVEO1lBQ3ZELGVBQWUsRUFBRSxPQUFPLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtTQUN6RSxDQUFDO1FBRUYsaUNBQWlDO1FBQ2pDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDekMsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixXQUFXLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztRQUMzQyxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNoQixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQ2hDLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE9BQU8sRUFBRTtvQkFDUCxjQUFjLEVBQUUsa0JBQWtCO29CQUNsQyx3QkFBd0IsRUFBRSxNQUFNLENBQUMsS0FBSztvQkFDdEMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksRUFBRSx3QkFBd0IsRUFBRSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQy9FLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNuRSxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxFQUFFLENBQUM7aUJBQy9EO2dCQUNELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQzthQUNsQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUM1RCxDQUFDO1lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFbkMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDckIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLGtCQUFrQixZQUFZLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMvRCxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFjLEVBQUUsRUFBRSxVQUFlLEVBQUU7UUFDaEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUNsQyxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLG1CQUFtQixDQUFDO1FBRW5ELE1BQU0sV0FBVyxHQUFHO1lBQ2xCLEdBQUcsTUFBTTtZQUNULGNBQWMsRUFBRSxNQUFNLENBQUMsS0FBSztZQUM1Qix1REFBdUQ7WUFDdkQsZUFBZSxFQUFFLE9BQU8sQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO1NBQ3pFLENBQUM7UUFJRixpQ0FBaUM7UUFDakMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUN6QyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLFdBQVcsQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1FBQzNDLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2hCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDaEMsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsT0FBTyxFQUFFO29CQUNQLGNBQWMsRUFBRSxrQkFBa0I7b0JBQ2xDLHdCQUF3QixFQUFFLE1BQU0sQ0FBQyxLQUFLO29CQUN0QyxHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsSUFBSSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDL0UsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ25FLEdBQUcsQ0FBQyxZQUFZLElBQUksRUFBRSx1QkFBdUIsRUFBRSxZQUFZLEVBQUUsQ0FBQztpQkFDL0Q7Z0JBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO2FBQ2xDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVuQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLHNCQUFzQixDQUFDLENBQUM7WUFDaEUsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9DLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQWlCLEVBQUUsSUFBbUI7UUFDdEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQWlCLEVBQUUsSUFBbUI7UUFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQWlCLEVBQUUsSUFBbUI7UUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBaUIsRUFBRSxJQUFtQjtRQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBaUIsRUFBRSxJQUFtQjtRQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBaUIsRUFBRSxJQUFtQjtRQUNwRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBZSxFQUFFLElBQW1CO1FBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN2RCxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBQ0QsT0FBTyxzQ0FBc0MsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVMsQ0FBQztZQUN2RSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNqQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUMxQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztBQUdILE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDOUMsZUFBZSxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGbW9kZUNvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbG91ZEZ1bmN0aW9uUmVxdWVzdCB7XHJcbiAgcGFyYW1zOiBhbnk7XHJcbiAgdXNlcj86IGFueTtcclxuICBpbnN0YWxsYXRpb25JZD86IHN0cmluZztcclxuICBsb2c/OiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRGdW5jdGlvblJlc3BvbnNlIHtcclxuICBzdWNjZXNzOiAocmVzdWx0PzogYW55KSA9PiB2b2lkO1xyXG4gIGVycm9yOiAoZXJyb3I/OiBhbnkpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIENsb3VkRnVuY3Rpb24gPSAocmVxdWVzdDogQ2xvdWRGdW5jdGlvblJlcXVlc3QsIHJlc3BvbnNlOiBDbG91ZEZ1bmN0aW9uUmVzcG9uc2UpID0+IHZvaWQ7XHJcblxyXG5leHBvcnQgY2xhc3MgRm1vZGVDbG91ZCB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX3NpbmdsZXRvbkluc3RhbmNlOiBGbW9kZUNsb3VkIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfY2xvdWRGdW5jdGlvbnM6IE1hcDxzdHJpbmcsIENsb3VkRnVuY3Rpb24+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7fSAvLyDmlLnkuLogcHJvdGVjdGVkIOS7peWFgeiuuOWtkOexu+e7p+aJv1xyXG5cclxuICBzdGF0aWMgZ2V0SW5zdGFuY2UoKTogRm1vZGVDbG91ZCB7XHJcbiAgICBpZiAoIXRoaXMuX3NpbmdsZXRvbkluc3RhbmNlKSB7XHJcbiAgICAgIHRoaXMuX3NpbmdsZXRvbkluc3RhbmNlID0gbmV3IEZtb2RlQ2xvdWQoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9zaW5nbGV0b25JbnN0YW5jZTtcclxuICB9XHJcblxyXG4gIC8vIOaUr+aMgemdmeaAgeWunuS+i+e7keWumiAtIOS4jkZtb2RlT2JqZWN05ZKMRm1vZGVRdWVyeeS/neaMgeS4gOiHtFxyXG4gIHN0YXRpYyBfaW5zdGFuY2U6IGFueSA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBiaW5kSW5zdGFuY2UoaW5zdGFuY2U6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5faW5zdGFuY2UgPSBpbnN0YW5jZTtcclxuICB9XHJcblxyXG4gIC8vIOiOt+WPluW9k+WJjeWunuS+i+mFjee9riAtIOS9v+eUqCBwcm90ZWN0ZWQg5Lul5YWB6K645a2Q57G76YeN5YaZXHJcbiAgcHJvdGVjdGVkIGdldCBjdXJyZW50Q29uZmlnKCk6IEZtb2RlQ29uZmlnIHtcclxuICAgIGNvbnN0IHBhcnNlSW5zdGFuY2UgPSBGbW9kZUNsb3VkLl9pbnN0YW5jZTtcclxuICAgIGlmICghcGFyc2VJbnN0YW5jZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Ztb2RlQ2xvdWQgbm90IGluaXRpYWxpemVkLiBDYWxsIEZtb2RlUGFyc2UuaW5pdGlhbGl6ZSgpIGZpcnN0LicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhcnNlSW5zdGFuY2UuY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgLy8g6Z2Z5oCB5pa55rOV6I635Y+W5a6e5L6LXHJcbiAgc3RhdGljIGdldCBpbnN0YW5jZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgZGVmaW5lKGZ1bmN0aW9uTmFtZTogc3RyaW5nLCBjbG91ZEZ1bmN0aW9uOiBDbG91ZEZ1bmN0aW9uKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jbG91ZEZ1bmN0aW9ucy5zZXQoZnVuY3Rpb25OYW1lLCBjbG91ZEZ1bmN0aW9uKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJ1bihmdW5jdGlvbk5hbWU6IHN0cmluZywgcGFyYW1zOiBhbnkgPSB7fSwgb3B0aW9uczogYW55ID0ge30pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jdXJyZW50Q29uZmlnO1xyXG4gICAgY29uc3QgdXJsID0gYCR7Y29uZmlnLnNlcnZlclVSTH0vZnVuY3Rpb25zLyR7ZnVuY3Rpb25OYW1lfWA7XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgIC4uLnBhcmFtcyxcclxuICAgICAgX0FwcGxpY2F0aW9uSWQ6IGNvbmZpZy5hcHBJZCxcclxuICAgICAgLy8gX0NsaWVudFZlcnNpb246ICdqcycgKyAoY29uZmlnLmphdmFzY3JpcHRLZXkgfHwgJycpLFxyXG4gICAgICBfSW5zdGFsbGF0aW9uSWQ6IG9wdGlvbnMuaW5zdGFsbGF0aW9uSWQgfHwgdGhpcy5nZW5lcmF0ZUluc3RhbGxhdGlvbklkKCksXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEFkZCBzZXNzaW9uIHRva2VuIGlmIGF2YWlsYWJsZVxyXG4gICAgY29uc3Qgc2Vzc2lvblRva2VuID0gY29uZmlnLnNlc3Npb25Ub2tlbjtcclxuICAgIGlmIChzZXNzaW9uVG9rZW4pIHtcclxuICAgICAgcmVxdWVzdEJvZHkuX1Nlc3Npb25Ub2tlbiA9IHNlc3Npb25Ub2tlbjtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zb2xlLmxvZyh1cmwpXHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XHJcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAgICdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJzogY29uZmlnLmFwcElkLFxyXG4gICAgICAgICAgLi4uKGNvbmZpZy5qYXZhc2NyaXB0S2V5ICYmIHsgJ1gtUGFyc2UtSmF2YVNjcmlwdC1LZXknOiBjb25maWcuamF2YXNjcmlwdEtleSB9KSxcclxuICAgICAgICAgIC4uLihjb25maWcubWFzdGVyS2V5ICYmIHsgJ1gtUGFyc2UtTWFzdGVyLUtleSc6IGNvbmZpZy5tYXN0ZXJLZXkgfSksXHJcbiAgICAgICAgICAuLi4oc2Vzc2lvblRva2VuICYmIHsgJ1gtUGFyc2UtU2Vzc2lvbi1Ub2tlbic6IHNlc3Npb25Ub2tlbiB9KSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RCb2R5KSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG5cclxuICAgICAgaWYgKGRhdGEuZXJyb3IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5lcnJvci5tZXNzYWdlIHx8ICdDbG91ZCBmdW5jdGlvbiBlcnJvcicpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZGF0YS5yZXN1bHQ7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBDbG91ZCBmdW5jdGlvbiAke2Z1bmN0aW9uTmFtZX0gZmFpbGVkOmAsIGVycm9yKTtcclxuICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBmdW5jdGlvbihwYXJhbXM6IGFueSA9IHt9LCBvcHRpb25zOiBhbnkgPSB7fSk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmN1cnJlbnRDb25maWc7XHJcbiAgICBjb25zdCB1cmwgPSBgJHtjb25maWcuc2VydmVyVVJMfS8uLi9hcGkvZnVuY3Rpb25zYDtcclxuXHJcbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcclxuICAgICAgLi4ucGFyYW1zLFxyXG4gICAgICBfQXBwbGljYXRpb25JZDogY29uZmlnLmFwcElkLFxyXG4gICAgICAvLyBfQ2xpZW50VmVyc2lvbjogJ2pzJyArIChjb25maWcuamF2YXNjcmlwdEtleSB8fCAnJyksXHJcbiAgICAgIF9JbnN0YWxsYXRpb25JZDogb3B0aW9ucy5pbnN0YWxsYXRpb25JZCB8fCB0aGlzLmdlbmVyYXRlSW5zdGFsbGF0aW9uSWQoKSxcclxuICAgIH07XHJcblxyXG5cclxuXHJcbiAgICAvLyBBZGQgc2Vzc2lvbiB0b2tlbiBpZiBhdmFpbGFibGVcclxuICAgIGNvbnN0IHNlc3Npb25Ub2tlbiA9IGNvbmZpZy5zZXNzaW9uVG9rZW47XHJcbiAgICBpZiAoc2Vzc2lvblRva2VuKSB7XHJcbiAgICAgIHJlcXVlc3RCb2R5Ll9TZXNzaW9uVG9rZW4gPSBzZXNzaW9uVG9rZW47XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc29sZS5sb2codXJsKVxyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xyXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgICAnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCc6IGNvbmZpZy5hcHBJZCxcclxuICAgICAgICAgIC4uLihjb25maWcuamF2YXNjcmlwdEtleSAmJiB7ICdYLVBhcnNlLUphdmFTY3JpcHQtS2V5JzogY29uZmlnLmphdmFzY3JpcHRLZXkgfSksXHJcbiAgICAgICAgICAuLi4oY29uZmlnLm1hc3RlcktleSAmJiB7ICdYLVBhcnNlLU1hc3Rlci1LZXknOiBjb25maWcubWFzdGVyS2V5IH0pLFxyXG4gICAgICAgICAgLi4uKHNlc3Npb25Ub2tlbiAmJiB7ICdYLVBhcnNlLVNlc3Npb24tVG9rZW4nOiBzZXNzaW9uVG9rZW4gfSksXHJcbiAgICAgICAgfSxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXF1ZXN0Qm9keSksXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCBlcnJvciEgc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuXHJcbiAgICAgIGlmIChkYXRhLmVycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEuZXJyb3IubWVzc2FnZSB8fCAnQ2xvdWQgZnVuY3Rpb24gZXJyb3InKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBDbG91ZCBmdW5jdGlvbiBmYWlsZWQ6YCwgZXJyb3IpO1xyXG4gICAgICB0aHJvdyBlcnJvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGFmdGVyRGVsZXRlKGNsYXNzTmFtZTogc3RyaW5nLCBmdW5jOiBDbG91ZEZ1bmN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmRlZmluZShgYWZ0ZXJEZWxldGVfJHtjbGFzc05hbWV9YCwgZnVuYyk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZnRlclNhdmUoY2xhc3NOYW1lOiBzdHJpbmcsIGZ1bmM6IENsb3VkRnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZGVmaW5lKGBhZnRlclNhdmVfJHtjbGFzc05hbWV9YCwgZnVuYyk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBiZWZvcmVEZWxldGUoY2xhc3NOYW1lOiBzdHJpbmcsIGZ1bmM6IENsb3VkRnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZGVmaW5lKGBiZWZvcmVEZWxldGVfJHtjbGFzc05hbWV9YCwgZnVuYyk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBiZWZvcmVTYXZlKGNsYXNzTmFtZTogc3RyaW5nLCBmdW5jOiBDbG91ZEZ1bmN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmRlZmluZShgYmVmb3JlU2F2ZV8ke2NsYXNzTmFtZX1gLCBmdW5jKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGJlZm9yZUZpbmQoY2xhc3NOYW1lOiBzdHJpbmcsIGZ1bmM6IENsb3VkRnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZGVmaW5lKGBiZWZvcmVGaW5kXyR7Y2xhc3NOYW1lfWAsIGZ1bmMpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWZ0ZXJGaW5kKGNsYXNzTmFtZTogc3RyaW5nLCBmdW5jOiBDbG91ZEZ1bmN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmRlZmluZShgYWZ0ZXJGaW5kXyR7Y2xhc3NOYW1lfWAsIGZ1bmMpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgam9iKGpvYk5hbWU6IHN0cmluZywgZnVuYzogQ2xvdWRGdW5jdGlvbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5kZWZpbmUoYGpvYl8ke2pvYk5hbWV9YCwgZnVuYyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlSW5zdGFsbGF0aW9uSWQoKTogc3RyaW5nIHtcclxuICAgIGlmICh0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8ucmFuZG9tVVVJRCkge1xyXG4gICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtcclxuICAgIH1cclxuICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uKGMpIHtcclxuICAgICAgY29uc3QgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDA7XHJcbiAgICAgIGNvbnN0IHYgPSBjID09PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBDbG91ZCA9IEZtb2RlQ2xvdWQuZ2V0SW5zdGFuY2UoKTtcclxuZXhwb3J0IGRlZmF1bHQgQ2xvdWQ7Il19
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUuY2xvdWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2NvcmUvcGFyc2UvZm1vZGUuY2xvdWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JBLE1BQU0sT0FBTyxVQUFVO2FBQ04sdUJBQWtCLEdBQXNCLElBQUksQUFBMUIsQ0FBMkI7SUFHNUQ7UUFGUSxvQkFBZSxHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRXZDLENBQUMsQ0FBQyx1QkFBdUI7SUFFbEQsTUFBTSxDQUFDLFdBQVc7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzdDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQseUNBQXlDO2FBQ2xDLGNBQVMsR0FBUSxJQUFJLEFBQVosQ0FBYTtJQUU3QixNQUFNLENBQUMsWUFBWSxDQUFDLFFBQWE7UUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDNUIsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxJQUFjLGFBQWE7UUFDekIsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUMzQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7UUFDRCxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUVELFdBQVc7SUFDWCxNQUFNLEtBQUssUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxZQUFvQixFQUFFLGFBQTRCO1FBQ3ZELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxD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QVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM5QyxlQUFlLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZtb2RlQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRnVuY3Rpb25SZXF1ZXN0IHtcclxuICBwYXJhbXM6IGFueTtcclxuICB1c2VyPzogYW55O1xyXG4gIGluc3RhbGxhdGlvbklkPzogc3RyaW5nO1xyXG4gIGxvZz86IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbG91ZEZ1bmN0aW9uUmVzcG9uc2Uge1xyXG4gIHN1Y2Nlc3M6IChyZXN1bHQ/OiBhbnkpID0+IHZvaWQ7XHJcbiAgZXJyb3I6IChlcnJvcj86IGFueSkgPT4gdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQ2xvdWRGdW5jdGlvbiA9IChyZXF1ZXN0OiBDbG91ZEZ1bmN0aW9uUmVxdWVzdCwgcmVzcG9uc2U6IENsb3VkRnVuY3Rpb25SZXNwb25zZSkgPT4gdm9pZDtcclxuXHJcbmV4cG9ydCBjbGFzcyBGbW9kZUNsb3VkIHtcclxuICBwcml2YXRlIHN0YXRpYyBfc2luZ2xldG9uSW5zdGFuY2U6IEZtb2RlQ2xvdWQgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9jbG91ZEZ1bmN0aW9uczogTWFwPHN0cmluZywgQ2xvdWRGdW5jdGlvbj4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHt9IC8vIOaUueS4uiBwcm90ZWN0ZWQg5Lul5YWB6K645a2Q57G757un5om/XHJcblxyXG4gIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBGbW9kZUNsb3VkIHtcclxuICAgIGlmICghdGhpcy5fc2luZ2xldG9uSW5zdGFuY2UpIHtcclxuICAgICAgdGhpcy5fc2luZ2xldG9uSW5zdGFuY2UgPSBuZXcgRm1vZGVDbG91ZCgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX3NpbmdsZXRvbkluc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgLy8g5pSv5oyB6Z2Z5oCB5a6e5L6L57uR5a6aIC0g5LiORm1vZGVPYmplY3TlkoxGbW9kZVF1ZXJ55L+d5oyB5LiA6Ie0XHJcbiAgc3RhdGljIF9pbnN0YW5jZTogYW55ID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIGJpbmRJbnN0YW5jZShpbnN0YW5jZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbnN0YW5jZSA9IGluc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgLy8g6I635Y+W5b2T5YmN5a6e5L6L6YWN572uIC0g5L2/55SoIHByb3RlY3RlZCDku6XlhYHorrjlrZDnsbvph43lhplcclxuICBwcm90ZWN0ZWQgZ2V0IGN1cnJlbnRDb25maWcoKTogRm1vZGVDb25maWcge1xyXG4gICAgY29uc3QgcGFyc2VJbnN0YW5jZSA9IEZtb2RlQ2xvdWQuX2luc3RhbmNlO1xyXG4gICAgaWYgKCFwYXJzZUluc3RhbmNlKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm1vZGVDbG91ZCBub3QgaW5pdGlhbGl6ZWQuIENhbGwgRm1vZGVQYXJzZS5pbml0aWFsaXplKCkgZmlyc3QuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyc2VJbnN0YW5jZS5jb25maWc7XHJcbiAgfVxyXG5cclxuICAvLyDpnZnmgIHmlrnms5Xojrflj5blrp7kvotcclxuICBzdGF0aWMgZ2V0IGluc3RhbmNlKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XHJcbiAgfVxyXG5cclxuICBkZWZpbmUoZnVuY3Rpb25OYW1lOiBzdHJpbmcsIGNsb3VkRnVuY3Rpb246IENsb3VkRnVuY3Rpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuX2Nsb3VkRnVuY3Rpb25zLnNldChmdW5jdGlvbk5hbWUsIGNsb3VkRnVuY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcnVuKGZ1bmN0aW9uTmFtZTogc3RyaW5nLCBwYXJhbXM6IGFueSA9IHt9LCBvcHRpb25zOiBhbnkgPSB7fSk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmN1cnJlbnRDb25maWc7XHJcbiAgICBjb25zdCB1cmwgPSBgJHtjb25maWcuc2VydmVyVVJMfS9mdW5jdGlvbnMvJHtmdW5jdGlvbk5hbWV9YDtcclxuXHJcbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcclxuICAgICAgLi4ucGFyYW1zLFxyXG4gICAgICBfQXBwbGljYXRpb25JZDogY29uZmlnLmFwcElkLFxyXG4gICAgICAvLyBfQ2xpZW50VmVyc2lvbjogJ2pzJyArIChjb25maWcuamF2YXNjcmlwdEtleSB8fCAnJyksXHJcbiAgICAgIF9JbnN0YWxsYXRpb25JZDogb3B0aW9ucy5pbnN0YWxsYXRpb25JZCB8fCB0aGlzLmdlbmVyYXRlSW5zdGFsbGF0aW9uSWQoKSxcclxuICAgIH07XHJcblxyXG4gICAgLy8gQWRkIHNlc3Npb24gdG9rZW4gaWYgYXZhaWxhYmxlXHJcbiAgICBjb25zdCBzZXNzaW9uVG9rZW4gPSBjb25maWcuc2Vzc2lvblRva2VuO1xyXG4gICAgaWYgKHNlc3Npb25Ub2tlbikge1xyXG4gICAgICByZXF1ZXN0Qm9keS5fU2Vzc2lvblRva2VuID0gc2Vzc2lvblRva2VuO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHVybClcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcclxuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICAgJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnOiBjb25maWcuYXBwSWQsXHJcbiAgICAgICAgICAuLi4oY29uZmlnLmphdmFzY3JpcHRLZXkgJiYgeyAnWC1QYXJzZS1KYXZhU2NyaXB0LUtleSc6IGNvbmZpZy5qYXZhc2NyaXB0S2V5IH0pLFxyXG4gICAgICAgICAgLi4uKGNvbmZpZy5tYXN0ZXJLZXkgJiYgeyAnWC1QYXJzZS1NYXN0ZXItS2V5JzogY29uZmlnLm1hc3RlcktleSB9KSxcclxuICAgICAgICAgIC4uLihzZXNzaW9uVG9rZW4gJiYgeyAnWC1QYXJzZS1TZXNzaW9uLVRva2VuJzogc2Vzc2lvblRva2VuIH0pLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxdWVzdEJvZHkpLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgZXJyb3IhIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9YCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcblxyXG4gICAgICBpZiAoZGF0YS5lcnJvcikge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmVycm9yLm1lc3NhZ2UgfHwgJ0Nsb3VkIGZ1bmN0aW9uIGVycm9yJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBkYXRhLnJlc3VsdDtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYENsb3VkIGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSBmYWlsZWQ6YCwgZXJyb3IpO1xyXG4gICAgICB0aHJvdyBlcnJvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGZ1bmN0aW9uKHBhcmFtczogYW55ID0ge30sIG9wdGlvbnM6IGFueSA9IHt9KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY3VycmVudENvbmZpZztcclxuICAgIGxldCB1ID0gbmV3IFVSTChjb25maWcuc2VydmVyVVJMKTtcclxuICAgIGxldCB1cmwgPSB1Lm9yaWdpbiArIFwiL2FwaS9mdW5jdGlvbnNcIlxyXG5cclxuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xyXG4gICAgICAuLi5wYXJhbXMsXHJcbiAgICAgIF9BcHBsaWNhdGlvbklkOiBjb25maWcuYXBwSWQsXHJcbiAgICAgIC8vIF9DbGllbnRWZXJzaW9uOiAnanMnICsgKGNvbmZpZy5qYXZhc2NyaXB0S2V5IHx8ICcnKSxcclxuICAgICAgX0luc3RhbGxhdGlvbklkOiBvcHRpb25zLmluc3RhbGxhdGlvbklkIHx8IHRoaXMuZ2VuZXJhdGVJbnN0YWxsYXRpb25JZCgpLFxyXG4gICAgfTtcclxuXHJcblxyXG5cclxuICAgIC8vIEFkZCBzZXNzaW9uIHRva2VuIGlmIGF2YWlsYWJsZVxyXG4gICAgY29uc3Qgc2Vzc2lvblRva2VuID0gY29uZmlnLnNlc3Npb25Ub2tlbjtcclxuICAgIGlmIChzZXNzaW9uVG9rZW4pIHtcclxuICAgICAgcmVxdWVzdEJvZHkuX1Nlc3Npb25Ub2tlbiA9IHNlc3Npb25Ub2tlbjtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zb2xlLmxvZyh1cmwpXHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XHJcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAgICdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJzogY29uZmlnLmFwcElkLFxyXG4gICAgICAgICAgLi4uKGNvbmZpZy5qYXZhc2NyaXB0S2V5ICYmIHsgJ1gtUGFyc2UtSmF2YVNjcmlwdC1LZXknOiBjb25maWcuamF2YXNjcmlwdEtleSB9KSxcclxuICAgICAgICAgIC4uLihjb25maWcubWFzdGVyS2V5ICYmIHsgJ1gtUGFyc2UtTWFzdGVyLUtleSc6IGNvbmZpZy5tYXN0ZXJLZXkgfSksXHJcbiAgICAgICAgICAuLi4oc2Vzc2lvblRva2VuICYmIHsgJ1gtUGFyc2UtU2Vzc2lvbi1Ub2tlbic6IHNlc3Npb25Ub2tlbiB9KSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RCb2R5KSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAvLyDjgJDlhbPplK7jgJHnm7TmjqXku44gYm9keSDojrflj5YgcmVhZGVy77yM5Y+q6K+75Y+W5LiA5qyhXHJcbiAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpO1xyXG4gICAgICBpZiAoIXJlYWRlcikge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYm9keSByZWFkZXIgYXZhaWxhYmxlJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOWPquivu+WPluS4gOasoe+8gVxyXG4gICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xyXG5cclxuICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW1wdHkgcmVzcG9uc2UgYm9keScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XHJcbiAgICAgIGNvbnN0IHRleHQgPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSk7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHRleHQpO1xyXG5cclxuICAgICAgaWYgKGRhdGEuZXJyb3IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5lcnJvci5tZXNzYWdlIHx8ICdDbG91ZCBmdW5jdGlvbiBlcnJvcicpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYENsb3VkIGZ1bmN0aW9uIGZhaWxlZDpgLCBlcnJvcik7XHJcbiAgICAgIHRocm93IGVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWZ0ZXJEZWxldGUoY2xhc3NOYW1lOiBzdHJpbmcsIGZ1bmM6IENsb3VkRnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZGVmaW5lKGBhZnRlckRlbGV0ZV8ke2NsYXNzTmFtZX1gLCBmdW5jKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGFmdGVyU2F2ZShjbGFzc05hbWU6IHN0cmluZywgZnVuYzogQ2xvdWRGdW5jdGlvbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5kZWZpbmUoYGFmdGVyU2F2ZV8ke2NsYXNzTmFtZX1gLCBmdW5jKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGJlZm9yZURlbGV0ZShjbGFzc05hbWU6IHN0cmluZywgZnVuYzogQ2xvdWRGdW5jdGlvbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5kZWZpbmUoYGJlZm9yZURlbGV0ZV8ke2NsYXNzTmFtZX1gLCBmdW5jKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGJlZm9yZVNhdmUoY2xhc3NOYW1lOiBzdHJpbmcsIGZ1bmM6IENsb3VkRnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZGVmaW5lKGBiZWZvcmVTYXZlXyR7Y2xhc3NOYW1lfWAsIGZ1bmMpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYmVmb3JlRmluZChjbGFzc05hbWU6IHN0cmluZywgZnVuYzogQ2xvdWRGdW5jdGlvbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5kZWZpbmUoYGJlZm9yZUZpbmRfJHtjbGFzc05hbWV9YCwgZnVuYyk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZnRlckZpbmQoY2xhc3NOYW1lOiBzdHJpbmcsIGZ1bmM6IENsb3VkRnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZGVmaW5lKGBhZnRlckZpbmRfJHtjbGFzc05hbWV9YCwgZnVuYyk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBqb2Ioam9iTmFtZTogc3RyaW5nLCBmdW5jOiBDbG91ZEZ1bmN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmRlZmluZShgam9iXyR7am9iTmFtZX1gLCBmdW5jKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVJbnN0YWxsYXRpb25JZCgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5yYW5kb21VVUlEKSB7XHJcbiAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24oYykge1xyXG4gICAgICBjb25zdCByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMDtcclxuICAgICAgY29uc3QgdiA9IGMgPT09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IENsb3VkID0gRm1vZGVDbG91ZC5nZXRJbnN0YW5jZSgpO1xyXG5leHBvcnQgZGVmYXVsdCBDbG91ZDsiXX0=
|