@gnwebsoft/ui 4.0.5 → 4.0.6
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/dist/chunk-6PMJWQ4R.cjs +239 -0
- package/dist/chunk-LGGBLZJM.js +239 -0
- package/dist/index.cjs +3 -7
- package/dist/index.js +1 -5
- package/dist/utils/index.cjs +3 -7
- package/dist/utils/index.d.ts +0 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -5
- package/package.json +1 -1
- package/dist/chunk-3RZ4JNO3.cjs +0 -467
- package/dist/chunk-XN3KVY4J.js +0 -467
- package/dist/utils/api.d.ts +0 -14
- package/dist/utils/api.d.ts.map +0 -1
- package/dist/utils/api2.d.ts +0 -14
- package/dist/utils/api2.d.ts.map +0 -1
package/dist/chunk-XN3KVY4J.js
DELETED
|
@@ -1,467 +0,0 @@
|
|
|
1
|
-
// src/utils/api.ts
|
|
2
|
-
var makeRequest = async (url, options) => {
|
|
3
|
-
const response = await fetch(url, options);
|
|
4
|
-
if (response.ok) {
|
|
5
|
-
const data = await response.json();
|
|
6
|
-
return {
|
|
7
|
-
data,
|
|
8
|
-
status: response.status
|
|
9
|
-
};
|
|
10
|
-
} else if (response.status === 404) {
|
|
11
|
-
const apiData = await response.json();
|
|
12
|
-
const data = {
|
|
13
|
-
status: response.status,
|
|
14
|
-
title: apiData.title
|
|
15
|
-
};
|
|
16
|
-
return data;
|
|
17
|
-
}
|
|
18
|
-
const apiResponse = await response.json();
|
|
19
|
-
return apiResponse;
|
|
20
|
-
};
|
|
21
|
-
var api = class {
|
|
22
|
-
static async filter(url, postModel) {
|
|
23
|
-
const alteredOptions = {
|
|
24
|
-
headers: {
|
|
25
|
-
"Content-Type": "application/json",
|
|
26
|
-
Authorization: `Bearer ${localStorage.getItem("serviceToken")}`
|
|
27
|
-
},
|
|
28
|
-
body: JSON.stringify({ ...postModel, ...postModel.filterModel }),
|
|
29
|
-
method: "POST"
|
|
30
|
-
};
|
|
31
|
-
const apiResponse = await makeRequest(url, alteredOptions);
|
|
32
|
-
return apiResponse;
|
|
33
|
-
}
|
|
34
|
-
static async post(url, body = {}) {
|
|
35
|
-
const alteredOptions = {
|
|
36
|
-
headers: {
|
|
37
|
-
"Content-Type": "application/json",
|
|
38
|
-
Authorization: `Bearer ${localStorage.getItem("serviceToken")}`
|
|
39
|
-
},
|
|
40
|
-
body: JSON.stringify(body),
|
|
41
|
-
method: "POST"
|
|
42
|
-
};
|
|
43
|
-
const apiResponse = await makeRequest(url, alteredOptions);
|
|
44
|
-
return apiResponse;
|
|
45
|
-
}
|
|
46
|
-
static async get(url) {
|
|
47
|
-
const alteredOptions = {
|
|
48
|
-
headers: {
|
|
49
|
-
"Content-Type": "application/json",
|
|
50
|
-
Authorization: `Bearer ${localStorage.getItem("serviceToken")}`
|
|
51
|
-
},
|
|
52
|
-
method: "GET"
|
|
53
|
-
};
|
|
54
|
-
const data = await makeRequest(url, alteredOptions);
|
|
55
|
-
return data;
|
|
56
|
-
}
|
|
57
|
-
static async delete(url) {
|
|
58
|
-
const alteredOptions = {
|
|
59
|
-
headers: {
|
|
60
|
-
"Content-Type": "application/json",
|
|
61
|
-
Authorization: `Bearer ${localStorage.getItem("serviceToken")}`
|
|
62
|
-
},
|
|
63
|
-
method: "DELETE"
|
|
64
|
-
};
|
|
65
|
-
const data = await makeRequest(url, alteredOptions);
|
|
66
|
-
return data;
|
|
67
|
-
}
|
|
68
|
-
static async put(url, body = {}) {
|
|
69
|
-
const alteredOptions = {
|
|
70
|
-
headers: {
|
|
71
|
-
"Content-Type": "application/json",
|
|
72
|
-
Authorization: `Bearer ${localStorage.getItem("serviceToken")}`
|
|
73
|
-
},
|
|
74
|
-
body: JSON.stringify(body),
|
|
75
|
-
method: "PUT"
|
|
76
|
-
};
|
|
77
|
-
const apiResponse = await makeRequest(url, alteredOptions);
|
|
78
|
-
return apiResponse;
|
|
79
|
-
}
|
|
80
|
-
static async fetch(url, options = {}) {
|
|
81
|
-
const alteredOptions = {
|
|
82
|
-
headers: {
|
|
83
|
-
"Content-Type": "application/json",
|
|
84
|
-
Authorization: `Bearer ${localStorage.getItem("serviceToken")}`
|
|
85
|
-
},
|
|
86
|
-
...options
|
|
87
|
-
};
|
|
88
|
-
const result = await fetch(url, alteredOptions);
|
|
89
|
-
return result;
|
|
90
|
-
}
|
|
91
|
-
static async tempFetch(url, options = { method: "GET" }) {
|
|
92
|
-
const alteredOptions = {
|
|
93
|
-
headers: {
|
|
94
|
-
"Content-Type": "application/json"
|
|
95
|
-
},
|
|
96
|
-
...options
|
|
97
|
-
};
|
|
98
|
-
const apiResponse = await makeRequest(url, alteredOptions);
|
|
99
|
-
return apiResponse;
|
|
100
|
-
}
|
|
101
|
-
static async upload(url, formData) {
|
|
102
|
-
const alteredOptions = {
|
|
103
|
-
headers: {
|
|
104
|
-
Authorization: `Bearer ${localStorage.getItem("serviceToken")}`
|
|
105
|
-
},
|
|
106
|
-
body: formData,
|
|
107
|
-
method: "POST"
|
|
108
|
-
};
|
|
109
|
-
const apiResponse = await makeRequest(url, alteredOptions);
|
|
110
|
-
return apiResponse;
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
// src/utils/api2.ts
|
|
115
|
-
var makeRequest2 = async (url, options) => {
|
|
116
|
-
const response = await fetch(url, options);
|
|
117
|
-
if (response.ok) {
|
|
118
|
-
const data = await response.json();
|
|
119
|
-
return {
|
|
120
|
-
data,
|
|
121
|
-
status: response.status
|
|
122
|
-
};
|
|
123
|
-
} else if (response.status === 404) {
|
|
124
|
-
const apiData = await response.json();
|
|
125
|
-
const data = {
|
|
126
|
-
status: response.status,
|
|
127
|
-
title: apiData.title
|
|
128
|
-
};
|
|
129
|
-
return data;
|
|
130
|
-
}
|
|
131
|
-
const apiResponse = await response.json();
|
|
132
|
-
return apiResponse;
|
|
133
|
-
};
|
|
134
|
-
var api2 = class {
|
|
135
|
-
static async filter(url, postModel) {
|
|
136
|
-
const alteredOptions = {
|
|
137
|
-
headers: {
|
|
138
|
-
"Content-Type": "application/json",
|
|
139
|
-
Authorization: `Bearer ${sessionStorage.getItem("serviceToken")}`
|
|
140
|
-
},
|
|
141
|
-
body: JSON.stringify({ ...postModel, ...postModel.filterModel }),
|
|
142
|
-
method: "POST"
|
|
143
|
-
};
|
|
144
|
-
const apiResponse = await makeRequest2(url, alteredOptions);
|
|
145
|
-
return apiResponse;
|
|
146
|
-
}
|
|
147
|
-
static async post(url, body = {}) {
|
|
148
|
-
const alteredOptions = {
|
|
149
|
-
headers: {
|
|
150
|
-
"Content-Type": "application/json",
|
|
151
|
-
Authorization: `Bearer ${sessionStorage.getItem("serviceToken")}`
|
|
152
|
-
},
|
|
153
|
-
body: JSON.stringify(body),
|
|
154
|
-
method: "POST"
|
|
155
|
-
};
|
|
156
|
-
const apiResponse = await makeRequest2(url, alteredOptions);
|
|
157
|
-
return apiResponse;
|
|
158
|
-
}
|
|
159
|
-
static async get(url) {
|
|
160
|
-
const alteredOptions = {
|
|
161
|
-
headers: {
|
|
162
|
-
"Content-Type": "application/json",
|
|
163
|
-
Authorization: `Bearer ${sessionStorage.getItem("serviceToken")}`
|
|
164
|
-
},
|
|
165
|
-
method: "GET"
|
|
166
|
-
};
|
|
167
|
-
const data = await makeRequest2(url, alteredOptions);
|
|
168
|
-
return data;
|
|
169
|
-
}
|
|
170
|
-
static async delete(url) {
|
|
171
|
-
const alteredOptions = {
|
|
172
|
-
headers: {
|
|
173
|
-
"Content-Type": "application/json",
|
|
174
|
-
Authorization: `Bearer ${sessionStorage.getItem("serviceToken")}`
|
|
175
|
-
},
|
|
176
|
-
method: "DELETE"
|
|
177
|
-
};
|
|
178
|
-
const data = await makeRequest2(url, alteredOptions);
|
|
179
|
-
return data;
|
|
180
|
-
}
|
|
181
|
-
static async put(url, body = {}) {
|
|
182
|
-
const alteredOptions = {
|
|
183
|
-
headers: {
|
|
184
|
-
"Content-Type": "application/json",
|
|
185
|
-
Authorization: `Bearer ${sessionStorage.getItem("serviceToken")}`
|
|
186
|
-
},
|
|
187
|
-
body: JSON.stringify(body),
|
|
188
|
-
method: "PUT"
|
|
189
|
-
};
|
|
190
|
-
const apiResponse = await makeRequest2(url, alteredOptions);
|
|
191
|
-
return apiResponse;
|
|
192
|
-
}
|
|
193
|
-
static async fetch(url, options = {}) {
|
|
194
|
-
const alteredOptions = {
|
|
195
|
-
headers: {
|
|
196
|
-
"Content-Type": "application/json",
|
|
197
|
-
Authorization: `Bearer ${sessionStorage.getItem("serviceToken")}`
|
|
198
|
-
},
|
|
199
|
-
...options
|
|
200
|
-
};
|
|
201
|
-
const result = await fetch(url, alteredOptions);
|
|
202
|
-
return result;
|
|
203
|
-
}
|
|
204
|
-
static async tempFetch(url, options = { method: "GET" }) {
|
|
205
|
-
const alteredOptions = {
|
|
206
|
-
headers: {
|
|
207
|
-
"Content-Type": "application/json"
|
|
208
|
-
},
|
|
209
|
-
...options
|
|
210
|
-
};
|
|
211
|
-
const apiResponse = await makeRequest2(url, alteredOptions);
|
|
212
|
-
return apiResponse;
|
|
213
|
-
}
|
|
214
|
-
static async upload(url, formData) {
|
|
215
|
-
const alteredOptions = {
|
|
216
|
-
headers: {
|
|
217
|
-
Authorization: `Bearer ${sessionStorage.getItem("serviceToken")}`
|
|
218
|
-
},
|
|
219
|
-
body: formData,
|
|
220
|
-
method: "POST"
|
|
221
|
-
};
|
|
222
|
-
const apiResponse = await makeRequest2(url, alteredOptions);
|
|
223
|
-
return apiResponse;
|
|
224
|
-
}
|
|
225
|
-
};
|
|
226
|
-
|
|
227
|
-
// src/utils/flattenObjectKeys.ts
|
|
228
|
-
var isNested = (obj) => typeof obj === "object" && obj !== null && !Array.isArray(obj);
|
|
229
|
-
var isArray = (obj) => Array.isArray(obj);
|
|
230
|
-
var flattenObjectKeys = (obj, prefix = "") => {
|
|
231
|
-
if (!isNested(obj)) {
|
|
232
|
-
return {
|
|
233
|
-
[prefix]: obj
|
|
234
|
-
};
|
|
235
|
-
}
|
|
236
|
-
return Object.keys(obj).reduce((acc, key) => {
|
|
237
|
-
const currentPrefix = prefix.length ? `${prefix}.` : "";
|
|
238
|
-
if (isNested(obj[key]) && Object.keys(obj[key]).length) {
|
|
239
|
-
if (isArray(obj[key]) && obj[key].length) {
|
|
240
|
-
obj[key].forEach((item, index) => {
|
|
241
|
-
Object.assign(
|
|
242
|
-
acc,
|
|
243
|
-
flattenObjectKeys(item, `${currentPrefix + key}.${index}`)
|
|
244
|
-
);
|
|
245
|
-
});
|
|
246
|
-
} else {
|
|
247
|
-
Object.assign(acc, flattenObjectKeys(obj[key], currentPrefix + key));
|
|
248
|
-
}
|
|
249
|
-
acc[currentPrefix + key] = obj[key];
|
|
250
|
-
} else {
|
|
251
|
-
acc[currentPrefix + key] = obj[key];
|
|
252
|
-
}
|
|
253
|
-
return acc;
|
|
254
|
-
}, {});
|
|
255
|
-
};
|
|
256
|
-
|
|
257
|
-
// src/utils/getTimezone.ts
|
|
258
|
-
function getTimezone(adapter, value) {
|
|
259
|
-
return value == null || !adapter.utils.isValid(value) ? null : adapter.utils.getTimezone(value);
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
// src/utils/handleServerErrors.ts
|
|
263
|
-
var handleServerErrors = function handleServerErrors2(args) {
|
|
264
|
-
const { errors, setError } = args;
|
|
265
|
-
for (const key in errors) {
|
|
266
|
-
const isKeyInVariables = Object.keys(flattenObjectKeys(errors)).includes(
|
|
267
|
-
key
|
|
268
|
-
);
|
|
269
|
-
if (!isKeyInVariables) {
|
|
270
|
-
continue;
|
|
271
|
-
}
|
|
272
|
-
const fieldError = errors[key];
|
|
273
|
-
let errorMessage = "";
|
|
274
|
-
if (Array.isArray(fieldError)) {
|
|
275
|
-
errorMessage = fieldError.join(" ");
|
|
276
|
-
}
|
|
277
|
-
if (typeof fieldError === "string") {
|
|
278
|
-
errorMessage = fieldError;
|
|
279
|
-
}
|
|
280
|
-
if (typeof fieldError === "boolean" && fieldError) {
|
|
281
|
-
errorMessage = "Field is not valid.";
|
|
282
|
-
}
|
|
283
|
-
setError(key, {
|
|
284
|
-
message: errorMessage
|
|
285
|
-
});
|
|
286
|
-
}
|
|
287
|
-
};
|
|
288
|
-
|
|
289
|
-
// src/utils/propertyExists.ts
|
|
290
|
-
function propertyExists(obj, prop) {
|
|
291
|
-
return typeof obj === "object" && obj !== null && Object.prototype.hasOwnProperty.call(obj, prop);
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
// src/utils/removeLeadingTrailingSlashes.ts
|
|
295
|
-
var removeLeadingTrailingSlashes = (route) => {
|
|
296
|
-
return route.replace(/^\/|\/$/g, "");
|
|
297
|
-
};
|
|
298
|
-
|
|
299
|
-
// src/utils/schemaTools.ts
|
|
300
|
-
import dayjs from "dayjs";
|
|
301
|
-
import { z } from "zod";
|
|
302
|
-
var schemaTools = {
|
|
303
|
-
// Date validations
|
|
304
|
-
date: ({ message } = {}) => z.coerce.string().transform((c) => c === "null" || c === "undefined" ? null : c).refine((c) => !!c, { message: message || "Date is required" }).refine((c) => c ? dayjs(c).isValid() : true, {
|
|
305
|
-
message: message || "Invalid date"
|
|
306
|
-
}),
|
|
307
|
-
nullableDate: ({ message } = {}) => z.coerce.string().transform((c) => c === "null" ? null : c).transform((c) => c === "undefined" ? null : c).refine((c) => !c && c !== null ? dayjs(c).isValid() : true, {
|
|
308
|
-
message: message || "Invalid date"
|
|
309
|
-
}),
|
|
310
|
-
dateRange: ({ message } = {}) => z.object({
|
|
311
|
-
start: z.coerce.date(),
|
|
312
|
-
end: z.coerce.date()
|
|
313
|
-
}).refine((data) => data.start <= data.end, {
|
|
314
|
-
message: message || "Start date must be before or equal to end date"
|
|
315
|
-
}),
|
|
316
|
-
// String validations
|
|
317
|
-
requiredString: ({ message, min, max } = {}) => z.string().trim().min(min || 1, message || `String must be at least ${min || 1} characters`).max(max || 255, message || `String must be at most ${max || 255} characters`),
|
|
318
|
-
email: ({ message } = {}) => z.string().email(message || "Invalid email address").max(254, "Email must be at most 254 characters"),
|
|
319
|
-
url: ({ message } = {}) => z.string().url(message || "Invalid URL format"),
|
|
320
|
-
phone: ({ message } = {}) => z.string().regex(/^[+]?[1-9][\d]{0,15}$/, message || "Invalid phone number format"),
|
|
321
|
-
alphanumeric: ({ message } = {}) => z.string().regex(/^[a-zA-Z0-9]+$/, message || "Only letters and numbers are allowed"),
|
|
322
|
-
slug: ({ message } = {}) => z.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, message || "Invalid slug format"),
|
|
323
|
-
// Number validations
|
|
324
|
-
positiveNumber: ({ message, min, max } = {}) => z.number().positive(message || "Number must be positive").min(min || 0.01, `Number must be at least ${min || 0.01}`).max(max || Number.MAX_SAFE_INTEGER, `Number must be at most ${max || Number.MAX_SAFE_INTEGER}`),
|
|
325
|
-
nonNegativeNumber: ({ message, max } = {}) => z.number().min(0, message || "Number must be non-negative").max(max || Number.MAX_SAFE_INTEGER, `Number must be at most ${max || Number.MAX_SAFE_INTEGER}`),
|
|
326
|
-
integer: ({ message, min, max } = {}) => z.number().int(message || "Must be an integer").min(min || Number.MIN_SAFE_INTEGER, `Number must be at least ${min || Number.MIN_SAFE_INTEGER}`).max(max || Number.MAX_SAFE_INTEGER, `Number must be at most ${max || Number.MAX_SAFE_INTEGER}`),
|
|
327
|
-
percentage: ({ message } = {}) => z.number().min(0, message || "Percentage must be between 0 and 100").max(100, message || "Percentage must be between 0 and 100"),
|
|
328
|
-
// Array validations
|
|
329
|
-
nonEmptyArray: (schema, { message } = {}) => z.array(schema).min(1, message || "At least one item is required"),
|
|
330
|
-
uniqueArray: (schema, { message } = {}) => z.array(schema).refine((items) => new Set(items).size === items.length, {
|
|
331
|
-
message: message || "All items must be unique"
|
|
332
|
-
}),
|
|
333
|
-
// Boolean validations
|
|
334
|
-
requiredBoolean: ({ message } = {}) => z.boolean({
|
|
335
|
-
message: message || "This field is required"
|
|
336
|
-
}),
|
|
337
|
-
// Object validations
|
|
338
|
-
nonEmptyObject: (schema, { message } = {}) => schema.refine((obj) => Object.keys(obj).length > 0, {
|
|
339
|
-
message: message || "Object cannot be empty"
|
|
340
|
-
}),
|
|
341
|
-
// File validations
|
|
342
|
-
fileSize: ({ maxSize, message }) => z.instanceof(File).refine((file) => file.size <= maxSize, {
|
|
343
|
-
message: message || `File size must be less than ${Math.round(maxSize / 1024 / 1024)}MB`
|
|
344
|
-
}),
|
|
345
|
-
fileType: ({ allowedTypes, message }) => z.instanceof(File).refine((file) => allowedTypes.includes(file.type), {
|
|
346
|
-
message: message || `File type must be one of: ${allowedTypes.join(", ")}`
|
|
347
|
-
}),
|
|
348
|
-
// Custom validators
|
|
349
|
-
conditional: (condition, trueSchema, falseSchema) => z.union([trueSchema, falseSchema]).superRefine((data, ctx) => {
|
|
350
|
-
const shouldUseTrue = condition(data);
|
|
351
|
-
const schema = shouldUseTrue ? trueSchema : falseSchema;
|
|
352
|
-
const result = schema.safeParse(data);
|
|
353
|
-
if (!result.success) {
|
|
354
|
-
ctx.addIssue({
|
|
355
|
-
code: z.ZodIssueCode.custom,
|
|
356
|
-
message: result.error.message
|
|
357
|
-
});
|
|
358
|
-
}
|
|
359
|
-
}),
|
|
360
|
-
transform: {
|
|
361
|
-
toLowerCase: z.string().transform((val) => val.toLowerCase()),
|
|
362
|
-
toUpperCase: z.string().transform((val) => val.toUpperCase()),
|
|
363
|
-
trim: z.string().transform((val) => val.trim()),
|
|
364
|
-
toNumber: z.string().transform((val) => Number(val)),
|
|
365
|
-
toBoolean: z.string().transform((val) => val === "true"),
|
|
366
|
-
parseJson: (schema) => z.string().transform((val, ctx) => {
|
|
367
|
-
try {
|
|
368
|
-
const parsed = JSON.parse(val);
|
|
369
|
-
const result = schema.safeParse(parsed);
|
|
370
|
-
if (result.success) return result.data;
|
|
371
|
-
ctx.addIssue({
|
|
372
|
-
code: z.ZodIssueCode.custom,
|
|
373
|
-
message: result.error.message
|
|
374
|
-
});
|
|
375
|
-
return z.NEVER;
|
|
376
|
-
} catch {
|
|
377
|
-
ctx.addIssue({
|
|
378
|
-
code: z.ZodIssueCode.custom,
|
|
379
|
-
message: "Invalid JSON"
|
|
380
|
-
});
|
|
381
|
-
return z.NEVER;
|
|
382
|
-
}
|
|
383
|
-
})
|
|
384
|
-
}
|
|
385
|
-
};
|
|
386
|
-
|
|
387
|
-
// src/utils/typeGuards.ts
|
|
388
|
-
function isRecord(value) {
|
|
389
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
390
|
-
}
|
|
391
|
-
function hasProperty(obj, key) {
|
|
392
|
-
return isRecord(obj) && key in obj;
|
|
393
|
-
}
|
|
394
|
-
function isNonEmptyString(value) {
|
|
395
|
-
return typeof value === "string" && value.length > 0;
|
|
396
|
-
}
|
|
397
|
-
function isArray2(value) {
|
|
398
|
-
return Array.isArray(value);
|
|
399
|
-
}
|
|
400
|
-
function isNonEmptyArray(value) {
|
|
401
|
-
return Array.isArray(value) && value.length > 0;
|
|
402
|
-
}
|
|
403
|
-
function isFunction(value) {
|
|
404
|
-
return typeof value === "function";
|
|
405
|
-
}
|
|
406
|
-
function isString(value) {
|
|
407
|
-
return typeof value === "string";
|
|
408
|
-
}
|
|
409
|
-
function isNumber(value) {
|
|
410
|
-
return typeof value === "number" && !isNaN(value);
|
|
411
|
-
}
|
|
412
|
-
function isBoolean(value) {
|
|
413
|
-
return typeof value === "boolean";
|
|
414
|
-
}
|
|
415
|
-
function isNull(value) {
|
|
416
|
-
return value === null;
|
|
417
|
-
}
|
|
418
|
-
function isUndefined(value) {
|
|
419
|
-
return value === void 0;
|
|
420
|
-
}
|
|
421
|
-
function isNullish(value) {
|
|
422
|
-
return value === null || value === void 0;
|
|
423
|
-
}
|
|
424
|
-
function isDefined(value) {
|
|
425
|
-
return value !== null && value !== void 0;
|
|
426
|
-
}
|
|
427
|
-
function isDate(value) {
|
|
428
|
-
return value instanceof Date && !isNaN(value.getTime());
|
|
429
|
-
}
|
|
430
|
-
function isPromise(value) {
|
|
431
|
-
return value instanceof Promise || isRecord(value) && typeof value.then === "function";
|
|
432
|
-
}
|
|
433
|
-
function isError(error) {
|
|
434
|
-
return error instanceof Error;
|
|
435
|
-
}
|
|
436
|
-
function matches(value, validator) {
|
|
437
|
-
return validator(value);
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
export {
|
|
441
|
-
api,
|
|
442
|
-
api2,
|
|
443
|
-
flattenObjectKeys,
|
|
444
|
-
getTimezone,
|
|
445
|
-
handleServerErrors,
|
|
446
|
-
propertyExists,
|
|
447
|
-
removeLeadingTrailingSlashes,
|
|
448
|
-
schemaTools,
|
|
449
|
-
isRecord,
|
|
450
|
-
hasProperty,
|
|
451
|
-
isNonEmptyString,
|
|
452
|
-
isArray2 as isArray,
|
|
453
|
-
isNonEmptyArray,
|
|
454
|
-
isFunction,
|
|
455
|
-
isString,
|
|
456
|
-
isNumber,
|
|
457
|
-
isBoolean,
|
|
458
|
-
isNull,
|
|
459
|
-
isUndefined,
|
|
460
|
-
isNullish,
|
|
461
|
-
isDefined,
|
|
462
|
-
isDate,
|
|
463
|
-
isPromise,
|
|
464
|
-
isError,
|
|
465
|
-
matches
|
|
466
|
-
};
|
|
467
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3V0aWxzL2FwaS50cyIsICIuLi9zcmMvdXRpbHMvYXBpMi50cyIsICIuLi9zcmMvdXRpbHMvZmxhdHRlbk9iamVjdEtleXMudHMiLCAiLi4vc3JjL3V0aWxzL2dldFRpbWV6b25lLnRzIiwgIi4uL3NyYy91dGlscy9oYW5kbGVTZXJ2ZXJFcnJvcnMudHMiLCAiLi4vc3JjL3V0aWxzL3Byb3BlcnR5RXhpc3RzLnRzIiwgIi4uL3NyYy91dGlscy9yZW1vdmVMZWFkaW5nVHJhaWxpbmdTbGFzaGVzLnRzIiwgIi4uL3NyYy91dGlscy9zY2hlbWFUb29scy50cyIsICIuLi9zcmMvdXRpbHMvdHlwZUd1YXJkcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgeyBBcGlSZXNwb25zZSB9IGZyb20gJy4uL2NvcmUvYXBpL3R5cGVzL0FwaVJlc3BvbnNlJztcbmltcG9ydCB0eXBlIHsgTGlzdFJlc3BvbnNlLCBQb3N0TW9kZWwgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3RPcHRpb25zLCBKc29uT2JqZWN0IH0gZnJvbSAnLi4vdHlwZXMvYXBpJztcblxuY29uc3QgbWFrZVJlcXVlc3QgPSBhc3luYyA8VD4oXG4gIHVybDogc3RyaW5nLFxuICBvcHRpb25zOiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4gPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgb3B0aW9ucyk7XG5cbiAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgY29uc3QgZGF0YTogVCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhLFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgfTtcbiAgfSBlbHNlIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgIGNvbnN0IGFwaURhdGE6IEFwaVJlc3BvbnNlPFQ+ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuXG4gICAgY29uc3QgZGF0YTogQXBpUmVzcG9uc2U8VD4gPSB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHRpdGxlOiBhcGlEYXRhLnRpdGxlLFxuICAgIH07XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGNvbnN0IGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZTxUPiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICByZXR1cm4gYXBpUmVzcG9uc2U7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBhcGkge1xuICBzdGF0aWMgYXN5bmMgZmlsdGVyPFQsIFRGaWx0ZXI+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIHBvc3RNb2RlbDogUG9zdE1vZGVsPFRGaWx0ZXI+XG4gICk6IFByb21pc2U8QXBpUmVzcG9uc2U8TGlzdFJlc3BvbnNlPFQ+Pj4ge1xuICAgIGNvbnN0IGFsdGVyZWRPcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2xvY2FsU3RvcmFnZS5nZXRJdGVtKCdzZXJ2aWNlVG9rZW4nKX1gLFxuICAgICAgfSxcblxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyAuLi5wb3N0TW9kZWwsIC4uLnBvc3RNb2RlbC5maWx0ZXJNb2RlbCB9KSxcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIH07XG5cbiAgICBjb25zdCBhcGlSZXNwb25zZSA9IGF3YWl0IG1ha2VSZXF1ZXN0PExpc3RSZXNwb25zZTxUPj4odXJsLCBhbHRlcmVkT3B0aW9ucyk7XG5cbiAgICByZXR1cm4gYXBpUmVzcG9uc2U7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcG9zdDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBKc29uT2JqZWN0ID0ge31cbiAgKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIGNvbnN0IGFsdGVyZWRPcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2xvY2FsU3RvcmFnZS5nZXRJdGVtKCdzZXJ2aWNlVG9rZW4nKX1gLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgfTtcblxuICAgIGNvbnN0IGFwaVJlc3BvbnNlID0gYXdhaXQgbWFrZVJlcXVlc3Q8VD4odXJsLCBhbHRlcmVkT3B0aW9ucyk7XG5cbiAgICByZXR1cm4gYXBpUmVzcG9uc2U7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0PFQ+KHVybDogc3RyaW5nKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIGNvbnN0IGFsdGVyZWRPcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2xvY2FsU3RvcmFnZS5nZXRJdGVtKCdzZXJ2aWNlVG9rZW4nKX1gLFxuICAgICAgfSxcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgfTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBtYWtlUmVxdWVzdDxUPih1cmwsIGFsdGVyZWRPcHRpb25zKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRlbGV0ZTxUPih1cmw6IHN0cmluZyk6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+IHtcbiAgICBjb25zdCBhbHRlcmVkT3B0aW9uczogUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2VydmljZVRva2VuJyl9YCxcbiAgICAgIH0sXG4gICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgIH07XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgbWFrZVJlcXVlc3Q8VD4odXJsLCBhbHRlcmVkT3B0aW9ucyk7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBwdXQ8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keTogSnNvbk9iamVjdCA9IHt9XG4gICk6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+IHtcbiAgICBjb25zdCBhbHRlcmVkT3B0aW9uczogUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2VydmljZVRva2VuJyl9YCxcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgfTtcblxuICAgIGNvbnN0IGFwaVJlc3BvbnNlID0gYXdhaXQgbWFrZVJlcXVlc3Q8VD4odXJsLCBhbHRlcmVkT3B0aW9ucyk7XG5cbiAgICByZXR1cm4gYXBpUmVzcG9uc2U7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZmV0Y2goXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczogUmVxdWVzdEluaXQgPSB7fVxuICApOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgYWx0ZXJlZE9wdGlvbnM6IFJlcXVlc3RJbml0ID0ge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NlcnZpY2VUb2tlbicpfWAsXG4gICAgICB9LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2godXJsLCBhbHRlcmVkT3B0aW9ucyk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHRlbXBGZXRjaDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IHsgbWV0aG9kOiAnR0VUJyB9XG4gICk6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+IHtcbiAgICBjb25zdCBhbHRlcmVkT3B0aW9uczogUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9O1xuICAgIGNvbnN0IGFwaVJlc3BvbnNlID0gYXdhaXQgbWFrZVJlcXVlc3Q8VD4odXJsLCBhbHRlcmVkT3B0aW9ucyk7XG5cbiAgICByZXR1cm4gYXBpUmVzcG9uc2U7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgdXBsb2FkPFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGZvcm1EYXRhOiBGb3JtRGF0YVxuICApOiBQcm9taXNlPEFwaVJlc3BvbnNlPFQ+PiB7XG4gICAgY29uc3QgYWx0ZXJlZE9wdGlvbnM6IFJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NlcnZpY2VUb2tlbicpfWAsXG4gICAgICB9LFxuICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB9O1xuXG4gICAgY29uc3QgYXBpUmVzcG9uc2UgPSBhd2FpdCBtYWtlUmVxdWVzdDxUPih1cmwsIGFsdGVyZWRPcHRpb25zKTtcblxuICAgIHJldHVybiBhcGlSZXNwb25zZTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQXBpUmVzcG9uc2UgfSBmcm9tICcuLi9jb3JlL2FwaS90eXBlcy9BcGlSZXNwb25zZSc7XG5pbXBvcnQgdHlwZSB7IExpc3RSZXNwb25zZSwgUG9zdE1vZGVsIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0T3B0aW9ucywgSnNvbk9iamVjdCB9IGZyb20gJy4uL3R5cGVzL2FwaSc7XG5cbmNvbnN0IG1ha2VSZXF1ZXN0ID0gYXN5bmMgPFQ+KFxuICB1cmw6IHN0cmluZyxcbiAgb3B0aW9uczogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+ID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIG9wdGlvbnMpO1xuXG4gIGlmIChyZXNwb25zZS5vaykge1xuICAgIGNvbnN0IGRhdGE6IFQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YSxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgIH07XG4gIH0gZWxzZSBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICBjb25zdCBhcGlEYXRhOiBBcGlSZXNwb25zZTxUPiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgIGNvbnN0IGRhdGE6IEFwaVJlc3BvbnNlPFQ+ID0ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICB0aXRsZTogYXBpRGF0YS50aXRsZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBjb25zdCBhcGlSZXNwb25zZTogQXBpUmVzcG9uc2U8VD4gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgcmV0dXJuIGFwaVJlc3BvbnNlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgYXBpMiB7XG4gIHN0YXRpYyBhc3luYyBmaWx0ZXI8VCwgVEZpbHRlcj4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgcG9zdE1vZGVsOiBQb3N0TW9kZWw8VEZpbHRlcj5cbiAgKTogUHJvbWlzZTxBcGlSZXNwb25zZTxMaXN0UmVzcG9uc2U8VD4+PiB7XG4gICAgY29uc3QgYWx0ZXJlZE9wdGlvbnM6IFJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnc2VydmljZVRva2VuJyl9YCxcbiAgICAgIH0sXG5cbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgLi4ucG9zdE1vZGVsLCAuLi5wb3N0TW9kZWwuZmlsdGVyTW9kZWwgfSksXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB9O1xuXG4gICAgY29uc3QgYXBpUmVzcG9uc2UgPSBhd2FpdCBtYWtlUmVxdWVzdDxMaXN0UmVzcG9uc2U8VD4+KHVybCwgYWx0ZXJlZE9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGFwaVJlc3BvbnNlO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHBvc3Q8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keTogSnNvbk9iamVjdCA9IHt9XG4gICk6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+IHtcbiAgICBjb25zdCBhbHRlcmVkT3B0aW9uczogUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdzZXJ2aWNlVG9rZW4nKX1gLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgfTtcblxuICAgIGNvbnN0IGFwaVJlc3BvbnNlID0gYXdhaXQgbWFrZVJlcXVlc3Q8VD4odXJsLCBhbHRlcmVkT3B0aW9ucyk7XG5cbiAgICByZXR1cm4gYXBpUmVzcG9uc2U7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0PFQ+KHVybDogc3RyaW5nKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIGNvbnN0IGFsdGVyZWRPcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Nlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3NlcnZpY2VUb2tlbicpfWAsXG4gICAgICB9LFxuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICB9O1xuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IG1ha2VSZXF1ZXN0PFQ+KHVybCwgYWx0ZXJlZE9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZGVsZXRlPFQ+KHVybDogc3RyaW5nKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIGNvbnN0IGFsdGVyZWRPcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Nlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3NlcnZpY2VUb2tlbicpfWAsXG4gICAgICB9LFxuICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICB9O1xuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IG1ha2VSZXF1ZXN0PFQ+KHVybCwgYWx0ZXJlZE9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcHV0PFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGJvZHk6IEpzb25PYmplY3QgPSB7fVxuICApOiBQcm9taXNlPEFwaVJlc3BvbnNlPFQ+PiB7XG4gICAgY29uc3QgYWx0ZXJlZE9wdGlvbnM6IFJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnc2VydmljZVRva2VuJyl9YCxcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgfTtcblxuICAgIGNvbnN0IGFwaVJlc3BvbnNlID0gYXdhaXQgbWFrZVJlcXVlc3Q8VD4odXJsLCBhbHRlcmVkT3B0aW9ucyk7XG5cbiAgICByZXR1cm4gYXBpUmVzcG9uc2U7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZmV0Y2goXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczogUmVxdWVzdEluaXQgPSB7fVxuICApOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgYWx0ZXJlZE9wdGlvbnM6IFJlcXVlc3RJbml0ID0ge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnc2VydmljZVRva2VuJyl9YCxcbiAgICAgIH0sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaCh1cmwsIGFsdGVyZWRPcHRpb25zKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgdGVtcEZldGNoPFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zID0geyBtZXRob2Q6ICdHRVQnIH1cbiAgKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIGNvbnN0IGFsdGVyZWRPcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG4gICAgY29uc3QgYXBpUmVzcG9uc2UgPSBhd2FpdCBtYWtlUmVxdWVzdDxUPih1cmwsIGFsdGVyZWRPcHRpb25zKTtcblxuICAgIHJldHVybiBhcGlSZXNwb25zZTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyB1cGxvYWQ8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgZm9ybURhdGE6IEZvcm1EYXRhXG4gICk6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+IHtcbiAgICBjb25zdCBhbHRlcmVkT3B0aW9uczogUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdzZXJ2aWNlVG9rZW4nKX1gLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgfTtcblxuICAgIGNvbnN0IGFwaVJlc3BvbnNlID0gYXdhaXQgbWFrZVJlcXVlc3Q8VD4odXJsLCBhbHRlcmVkT3B0aW9ucyk7XG5cbiAgICByZXR1cm4gYXBpUmVzcG9uc2U7XG4gIH1cbn1cbiIsICIvKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGEgbmVzdGVkIG9iamVjdCAobm90IG51bGwgYW5kIG5vdCBhbiBhcnJheSkuXG4gKlxuICogQHBhcmFtIG9iaiAtIFRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBuZXN0ZWQgb2JqZWN0XG4gKlxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IGlzTmVzdGVkID0gKG9iajogdW5rbm93bik6IG9iaiBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiBcbiAgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiAmJiBvYmogIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkob2JqKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBhbiBhcnJheS5cbiAqXG4gKiBAcGFyYW0gb2JqIC0gVGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhbiBhcnJheVxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBpc0FycmF5ID0gKG9iajogdW5rbm93bik6IG9iaiBpcyB1bmtub3duW10gPT4gQXJyYXkuaXNBcnJheShvYmopO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGZsYXR0ZW5zIGFuIG9iamVjdCBpbnRvIGEgZmxhdCBzdHJ1Y3R1cmUgd2l0aCBkb3Qtbm90YXRpb24ga2V5cy5cbiAqXG4gKiBUaGlzIHV0aWxpdHkgZnVuY3Rpb24gdGFrZXMgYSBuZXN0ZWQgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCBpbnRvIGEgZmxhdCBvYmplY3RcbiAqIHdoZXJlIG5lc3RlZCBwcm9wZXJ0aWVzIGFyZSByZXByZXNlbnRlZCB1c2luZyBkb3Qgbm90YXRpb24uIEl0IGhhbmRsZXMgYm90aFxuICogbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cywgcHJlc2VydmluZyBhbGwgbGV2ZWxzIG9mIHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmVcbiAqIGFzIHNlcGFyYXRlIGtleXMgaW4gdGhlIHJlc3VsdC5cbiAqXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgb2JqZWN0IGZsYXR0ZW5pbmc6XG4gKiBgYGB0c3hcbiAqIGNvbnN0IG5lc3RlZCA9IHtcbiAqICAgdXNlcjoge1xuICogICAgIG5hbWU6ICdKb2huJyxcbiAqICAgICBhZGRyZXNzOiB7XG4gKiAgICAgICBjaXR5OiAnTmV3IFlvcmsnLFxuICogICAgICAgemlwOiAnMTAwMDEnXG4gKiAgICAgfVxuICogICB9XG4gKiB9O1xuICpcbiAqIGNvbnN0IGZsYXR0ZW5lZCA9IGZsYXR0ZW5PYmplY3RLZXlzKG5lc3RlZCk7XG4gKiAvLyBSZXN1bHQ6XG4gKiAvLyB7XG4gKiAvLyAgICd1c2VyJzogeyBuYW1lOiAnSm9obicsIGFkZHJlc3M6IHsgY2l0eTogJ05ldyBZb3JrJywgemlwOiAnMTAwMDEnIH0gfSxcbiAqIC8vICAgJ3VzZXIubmFtZSc6ICdKb2huJyxcbiAqIC8vICAgJ3VzZXIuYWRkcmVzcyc6IHsgY2l0eTogJ05ldyBZb3JrJywgemlwOiAnMTAwMDEnIH0sXG4gKiAvLyAgICd1c2VyLmFkZHJlc3MuY2l0eSc6ICdOZXcgWW9yaycsXG4gKiAvLyAgICd1c2VyLmFkZHJlc3MuemlwJzogJzEwMDAxJ1xuICogLy8gfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIEFycmF5IGhhbmRsaW5nOlxuICogYGBgdHN4XG4gKiBjb25zdCB3aXRoQXJyYXlzID0ge1xuICogICBpdGVtczogW1xuICogICAgIHsgaWQ6IDEsIG5hbWU6ICdJdGVtIDEnIH0sXG4gKiAgICAgeyBpZDogMiwgbmFtZTogJ0l0ZW0gMicgfVxuICogICBdXG4gKiB9O1xuICpcbiAqIGNvbnN0IGZsYXR0ZW5lZCA9IGZsYXR0ZW5PYmplY3RLZXlzKHdpdGhBcnJheXMpO1xuICogLy8gUmVzdWx0IGluY2x1ZGVzOlxuICogLy8ge1xuICogLy8gICAnaXRlbXMnOiBbLi4uXSxcbiAqIC8vICAgJ2l0ZW1zLjAnOiB7IGlkOiAxLCBuYW1lOiAnSXRlbSAxJyB9LFxuICogLy8gICAnaXRlbXMuMC5pZCc6IDEsXG4gKiAvLyAgICdpdGVtcy4wLm5hbWUnOiAnSXRlbSAxJyxcbiAqIC8vICAgJ2l0ZW1zLjEnOiB7IGlkOiAyLCBuYW1lOiAnSXRlbSAyJyB9LFxuICogLy8gICAnaXRlbXMuMS5pZCc6IDIsXG4gKiAvLyAgICdpdGVtcy4xLm5hbWUnOiAnSXRlbSAyJ1xuICogLy8gfVxuICogYGBgXG4gKlxuICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgdG8gZmxhdHRlblxuICogQHBhcmFtIHByZWZpeCAtIEludGVybmFsIHBhcmFtZXRlciBmb3IgYnVpbGRpbmcga2V5IHBhdGhzICh1c2VkIGluIHJlY3Vyc2lvbilcbiAqIEByZXR1cm5zIEEgZmxhdCBvYmplY3Qgd2l0aCBkb3Qtbm90YXRpb24ga2V5cyByZXByZXNlbnRpbmcgdGhlIG9yaWdpbmFsIHN0cnVjdHVyZVxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGZsYXR0ZW5PYmplY3RLZXlzID0gKG9iajogdW5rbm93biwgcHJlZml4ID0gXCJcIik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgaWYgKCFpc05lc3RlZChvYmopKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtwcmVmaXhdOiBvYmosXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBjdXJyZW50UHJlZml4ID0gcHJlZml4Lmxlbmd0aCA/IGAke3ByZWZpeH0uYCA6IFwiXCI7XG5cbiAgICBpZiAoaXNOZXN0ZWQob2JqW2tleV0pICYmIE9iamVjdC5rZXlzKG9ialtrZXldKS5sZW5ndGgpIHtcbiAgICAgIGlmIChpc0FycmF5KG9ialtrZXldKSAmJiBvYmpba2V5XS5sZW5ndGgpIHtcbiAgICAgICAgb2JqW2tleV0uZm9yRWFjaCgoaXRlbSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICBhY2MsXG4gICAgICAgICAgICBmbGF0dGVuT2JqZWN0S2V5cyhpdGVtLCBgJHtjdXJyZW50UHJlZml4ICsga2V5fS4ke2luZGV4fWApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3QuYXNzaWduKGFjYywgZmxhdHRlbk9iamVjdEtleXMob2JqW2tleV0sIGN1cnJlbnRQcmVmaXggKyBrZXkpKTtcbiAgICAgIH1cblxuICAgICAgLy8gRXZlbiBpZiBpdCdzIGEgbmVzdGVkIG9iamVjdCwgaXQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBrZXkgYXMgd2VsbFxuICAgICAgYWNjW2N1cnJlbnRQcmVmaXggKyBrZXldID0gb2JqW2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjY1tjdXJyZW50UHJlZml4ICsga2V5XSA9IG9ialtrZXldO1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBQaWNrZXJWYWxpZERhdGUgfSBmcm9tIFwiQG11aS94LWRhdGUtcGlja2Vyc1wiO1xuaW1wb3J0IHR5cGUgeyB1c2VMb2NhbGl6YXRpb25Db250ZXh0IH0gZnJvbSBcIkBtdWkveC1kYXRlLXBpY2tlcnMvaW50ZXJuYWxzXCI7XG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSBcImRheWpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lem9uZTxURGF0ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZT4oXG4gIGFkYXB0ZXI6IFJldHVyblR5cGU8dHlwZW9mIHVzZUxvY2FsaXphdGlvbkNvbnRleHQ+LFxuICB2YWx1ZTogVERhdGVcbik6IHN0cmluZyB8IG51bGwge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCAhYWRhcHRlci51dGlscy5pc1ZhbGlkKHZhbHVlIGFzIHVua25vd24gYXMgRGF5anMpXG4gICAgPyBudWxsXG4gICAgOiBhZGFwdGVyLnV0aWxzLmdldFRpbWV6b25lKHZhbHVlIGFzIHVua25vd24gYXMgRGF5anMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgRmllbGRWYWx1ZXMsIFBhdGgsIFVzZUZvcm1TZXRFcnJvciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmltcG9ydCB7IGZsYXR0ZW5PYmplY3RLZXlzIH0gZnJvbSAnLi9mbGF0dGVuT2JqZWN0S2V5cyc7XG5cbmltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0AvY29yZSc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgaGFuZGxlU2VydmVyRXJyb3JzIGZ1bmN0aW9uLlxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICpcbiAqIEBwdWJsaWNcbiAqL1xuaW50ZXJmYWNlIEhhbmRsZVNlcnZlckVycm9yc1R5cGU8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4+IHtcbiAgLyoqXG4gICAqIFNlcnZlciB2YWxpZGF0aW9uIGVycm9ycyBvYmplY3QgY29udGFpbmluZyBmaWVsZC1zcGVjaWZpYyBlcnJvciBtZXNzYWdlc1xuICAgKiBAZXhhbXBsZSB7IGVtYWlsOiAnRW1haWwgaXMgYWxyZWFkeSB0YWtlbicsIHBhc3N3b3JkOiBbJ1RvbyBzaG9ydCcsICdNdXN0IGNvbnRhaW4gbnVtYmVycyddIH1cbiAgICovXG4gIGVycm9ycz86IFZhbGlkYXRpb25FcnJvcnM7XG4gIC8qKlxuICAgKiBUaGUgc2V0RXJyb3IgZnVuY3Rpb24gZnJvbSByZWFjdC1ob29rLWZvcm0gZm9yIHNldHRpbmcgZmllbGQgZXJyb3JzXG4gICAqL1xuICBzZXRFcnJvcjogVXNlRm9ybVNldEVycm9yPFRGaWVsZFZhbHVlcz47XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIHNlcnZlciB2YWxpZGF0aW9uIGVycm9ycyBhbmQgYXBwbGllcyB0aGVtIHRvIHJlYWN0LWhvb2stZm9ybSBmaWVsZHMuXG4gKlxuICogVGhpcyB1dGlsaXR5IGZ1bmN0aW9uIHRha2VzIHZhbGlkYXRpb24gZXJyb3JzIGZyb20gYSBzZXJ2ZXIgcmVzcG9uc2UgYW5kIGF1dG9tYXRpY2FsbHlcbiAqIGFwcGxpZXMgdGhlbSB0byB0aGUgY29ycmVzcG9uZGluZyBmb3JtIGZpZWxkcyB1c2luZyByZWFjdC1ob29rLWZvcm0ncyBzZXRFcnJvciBmdW5jdGlvbi5cbiAqIEl0IHN1cHBvcnRzIHZhcmlvdXMgZXJyb3IgZm9ybWF0cyBpbmNsdWRpbmcgc3RyaW5ncywgYXJyYXlzIG9mIHN0cmluZ3MsIGFuZCBib29sZWFuIGZsYWdzLlxuICpcbiAqIFRoZSBmdW5jdGlvbiB1c2VzIG9iamVjdCBmbGF0dGVuaW5nIHRvIGhhbmRsZSBuZXN0ZWQgZXJyb3Igc3RydWN0dXJlcyBhbmQgZW5zdXJlc1xuICogdGhhdCBvbmx5IHZhbGlkIGZpZWxkIHBhdGhzIGFyZSBwcm9jZXNzZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIEJhc2ljIHVzYWdlIHdpdGggc2VydmVyIHJlc3BvbnNlOlxuICogYGBgdHN4XG4gKiBjb25zdCB7IHNldEVycm9yIH0gPSB1c2VGb3JtKCk7XG4gKlxuICogdHJ5IHtcbiAqICAgYXdhaXQgc3VibWl0Rm9ybShkYXRhKTtcbiAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgIGhhbmRsZVNlcnZlckVycm9ycyh7XG4gKiAgICAgZXJyb3JzOiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9ycyxcbiAqICAgICBzZXRFcnJvclxuICogICB9KTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIGRpZmZlcmVudCBlcnJvciBmb3JtYXRzOlxuICogYGBgdHN4XG4gKiBjb25zdCBzZXJ2ZXJFcnJvcnMgPSB7XG4gKiAgIGVtYWlsOiAnRW1haWwgaXMgYWxyZWFkeSB0YWtlbicsXG4gKiAgIHBhc3N3b3JkOiBbJ1RvbyBzaG9ydCcsICdNdXN0IGNvbnRhaW4gbnVtYmVycyddLFxuICogICB0ZXJtczogdHJ1ZSAvLyBCb29sZWFuIGZsYWcgaW5kaWNhdGluZyBpbnZhbGlkXG4gKiB9O1xuICpcbiAqIGhhbmRsZVNlcnZlckVycm9ycyh7IGVycm9yczogc2VydmVyRXJyb3JzLCBzZXRFcnJvciB9KTtcbiAqIC8vIFJlc3VsdHMgaW46XG4gKiAvLyAtIGVtYWlsIGZpZWxkIHNob3dzOiBcIkVtYWlsIGlzIGFscmVhZHkgdGFrZW5cIlxuICogLy8gLSBwYXNzd29yZCBmaWVsZCBzaG93czogXCJUb28gc2hvcnQgTXVzdCBjb250YWluIG51bWJlcnNcIlxuICogLy8gLSB0ZXJtcyBmaWVsZCBzaG93czogXCJGaWVsZCBpcyBub3QgdmFsaWQuXCJcbiAqIGBgYFxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICpcbiAqIEBwYXJhbSBhcmdzIC0gQ29uZmlndXJhdGlvbiBvYmplY3QgY29udGFpbmluZyBlcnJvcnMgYW5kIHNldEVycm9yIGZ1bmN0aW9uXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgaGFuZGxlU2VydmVyRXJyb3JzID0gZnVuY3Rpb24gaGFuZGxlU2VydmVyRXJyb3JzPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuPihhcmdzOiBIYW5kbGVTZXJ2ZXJFcnJvcnNUeXBlPFRGaWVsZFZhbHVlcz4pIHtcbiAgY29uc3QgeyBlcnJvcnMsIHNldEVycm9yIH0gPSBhcmdzO1xuXG4gIGZvciAoY29uc3Qga2V5IGluIGVycm9ycykge1xuICAgIGNvbnN0IGlzS2V5SW5WYXJpYWJsZXMgPSBPYmplY3Qua2V5cyhmbGF0dGVuT2JqZWN0S2V5cyhlcnJvcnMpKS5pbmNsdWRlcyhcbiAgICAgIGtleVxuICAgICk7XG5cbiAgICBpZiAoIWlzS2V5SW5WYXJpYWJsZXMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkRXJyb3IgPSBlcnJvcnNba2V5XTtcblxuICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnJztcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkRXJyb3IpKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBmaWVsZEVycm9yLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZpZWxkRXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBmaWVsZEVycm9yO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmllbGRFcnJvciA9PT0gJ2Jvb2xlYW4nICYmIGZpZWxkRXJyb3IpIHtcbiAgICAgIGVycm9yTWVzc2FnZSA9ICdGaWVsZCBpcyBub3QgdmFsaWQuJztcbiAgICB9XG5cbiAgICBzZXRFcnJvcihrZXkgYXMgUGF0aDxURmllbGRWYWx1ZXM+LCB7XG4gICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgfSk7XG4gIH1cbn07XG4iLCAiLyoqXG4gKiBUeXBlLXNhZmUgcHJvcGVydHkgZXhpc3RlbmNlIGNoZWNrZXIgdGhhdCBhY3RzIGFzIGEgdHlwZSBndWFyZC5cbiAqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBwcm9wZXJ0eSBleGlzdHMgb24gYW4gb2JqZWN0IGFuZCBuYXJyb3dzIHRoZSBUeXBlU2NyaXB0IHR5cGVcbiAqIHRvIGluY2x1ZGUgdGhhdCBwcm9wZXJ0eS4gVGhpcyBpcyB1c2VmdWwgZm9yIHNhZmVseSBhY2Nlc3NpbmcgcHJvcGVydGllcyBvblxuICogb2JqZWN0cyBvZiB1bmtub3duIHN0cnVjdHVyZSB3aGlsZSBtYWludGFpbmluZyB0eXBlIHNhZmV0eS5cbiAqXG4gKiBAdGVtcGxhdGUgWCAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QgYmVpbmcgY2hlY2tlZFxuICogQHRlbXBsYXRlIFkgLSBUaGUgdHlwZSBvZiB0aGUgcHJvcGVydHkga2V5IChleHRlbmRzIFByb3BlcnR5S2V5KVxuICpcbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIGNoZWNrIGZvciB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wIC0gVGhlIHByb3BlcnR5IGtleSB0byBjaGVjayBmb3IgZXhpc3RlbmNlXG4gKlxuICogQHJldHVybnMgQSB0eXBlIHByZWRpY2F0ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHByb3BlcnR5IGV4aXN0cyBvbiB0aGUgb2JqZWN0LlxuICogICAgICAgICAgSWYgdHJ1ZSwgdGhlIG9iamVjdCB0eXBlIGlzIG5hcnJvd2VkIHRvIGluY2x1ZGUgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZGF0YTogdW5rbm93biA9IHsgbmFtZTogXCJKb2huXCIsIGFnZTogMzAgfTtcbiAqXG4gKiBpZiAocHJvcGVydHlFeGlzdHMoZGF0YSwgXCJuYW1lXCIpKSB7XG4gKiAgIC8vIFR5cGVTY3JpcHQgbm93IGtub3dzIGRhdGEgaGFzIGEgJ25hbWUnIHByb3BlcnR5XG4gKiAgIGNvbnNvbGUubG9nKGRhdGEubmFtZSk7IC8vIFR5cGUtc2FmZSBhY2Nlc3NcbiAqIH1cbiAqXG4gKiAvLyBDaGVjayBmb3IgbmVzdGVkIHByb3BlcnR5IGV4aXN0ZW5jZVxuICogaWYgKHByb3BlcnR5RXhpc3RzKG9iaiwgXCJ1c2VyXCIpICYmIHByb3BlcnR5RXhpc3RzKG9iai51c2VyLCBcImlkXCIpKSB7XG4gKiAgIGNvbnNvbGUubG9nKG9iai51c2VyLmlkKTsgLy8gU2FmZSBuZXN0ZWQgYWNjZXNzXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAc2luY2UgMi4xOC40NVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlFeGlzdHM8WCwgWSBleHRlbmRzIFByb3BlcnR5S2V5PihcbiAgb2JqOiBYLFxuICBwcm9wOiBZXG4pOiBvYmogaXMgWCAmIFJlY29yZDxZLCB1bmtub3duPiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiZcbiAgICBvYmogIT09IG51bGwgJiZcbiAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKVxuICApO1xufVxuIiwgImV4cG9ydCBjb25zdCByZW1vdmVMZWFkaW5nVHJhaWxpbmdTbGFzaGVzID0gKHJvdXRlOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIHJvdXRlLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKTtcbn07XG4iLCAiaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuZXhwb3J0IGNvbnN0IHNjaGVtYVRvb2xzID0ge1xuICAvLyBEYXRlIHZhbGlkYXRpb25zXG4gIGRhdGU6ICh7IG1lc3NhZ2UgfTogeyBtZXNzYWdlPzogc3RyaW5nIH0gPSB7fSkgPT5cbiAgICB6LmNvZXJjZVxuICAgICAgLnN0cmluZygpXG4gICAgICAudHJhbnNmb3JtKChjKSA9PiAoYyA9PT0gXCJudWxsXCIgfHwgYyA9PT0gXCJ1bmRlZmluZWRcIiA/IG51bGwgOiBjKSlcbiAgICAgIC5yZWZpbmUoKGMpID0+ICEhYywgeyBtZXNzYWdlOiBtZXNzYWdlIHx8IFwiRGF0ZSBpcyByZXF1aXJlZFwiIH0pXG4gICAgICAucmVmaW5lKChjKSA9PiAoYyA/IGRheWpzKGMpLmlzVmFsaWQoKSA6IHRydWUpLCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UgfHwgXCJJbnZhbGlkIGRhdGVcIixcbiAgICAgIH0pLFxuXG4gIG51bGxhYmxlRGF0ZTogKHsgbWVzc2FnZSB9OiB7IG1lc3NhZ2U/OiBzdHJpbmcgfSA9IHt9KSA9PlxuICAgIHouY29lcmNlXG4gICAgICAuc3RyaW5nKClcbiAgICAgIC50cmFuc2Zvcm0oKGMpID0+IChjID09PSBcIm51bGxcIiA/IG51bGwgOiBjKSlcbiAgICAgIC50cmFuc2Zvcm0oKGMpID0+IChjID09PSBcInVuZGVmaW5lZFwiID8gbnVsbCA6IGMpKVxuICAgICAgLnJlZmluZSgoYykgPT4gKCFjICYmIGMgIT09IG51bGwgPyBkYXlqcyhjKS5pc1ZhbGlkKCkgOiB0cnVlKSwge1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlIHx8IFwiSW52YWxpZCBkYXRlXCIsXG4gICAgICB9KSxcblxuICBkYXRlUmFuZ2U6ICh7IG1lc3NhZ2UgfTogeyBtZXNzYWdlPzogc3RyaW5nIH0gPSB7fSkgPT5cbiAgICB6Lm9iamVjdCh7XG4gICAgICBzdGFydDogei5jb2VyY2UuZGF0ZSgpLFxuICAgICAgZW5kOiB6LmNvZXJjZS5kYXRlKCksXG4gICAgfSkucmVmaW5lKChkYXRhKSA9PiBkYXRhLnN0YXJ0IDw9IGRhdGEuZW5kLCB7XG4gICAgICBtZXNzYWdlOiBtZXNzYWdlIHx8IFwiU3RhcnQgZGF0ZSBtdXN0IGJlIGJlZm9yZSBvciBlcXVhbCB0byBlbmQgZGF0ZVwiLFxuICAgIH0pLFxuXG4gIC8vIFN0cmluZyB2YWxpZGF0aW9uc1xuICByZXF1aXJlZFN0cmluZzogKHsgbWVzc2FnZSwgbWluLCBtYXggfTogeyBtZXNzYWdlPzogc3RyaW5nOyBtaW4/OiBudW1iZXI7IG1heD86IG51bWJlciB9ID0ge30pID0+XG4gICAgei5zdHJpbmcoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLm1pbihtaW4gfHwgMSwgbWVzc2FnZSB8fCBgU3RyaW5nIG11c3QgYmUgYXQgbGVhc3QgJHttaW4gfHwgMX0gY2hhcmFjdGVyc2ApXG4gICAgICAubWF4KG1heCB8fCAyNTUsIG1lc3NhZ2UgfHwgYFN0cmluZyBtdXN0IGJlIGF0IG1vc3QgJHttYXggfHwgMjU1fSBjaGFyYWN0ZXJzYCksXG5cbiAgZW1haWw6ICh7IG1lc3NhZ2UgfTogeyBtZXNzYWdlPzogc3RyaW5nIH0gPSB7fSkgPT5cbiAgICB6LnN0cmluZygpXG4gICAgICAuZW1haWwobWVzc2FnZSB8fCBcIkludmFsaWQgZW1haWwgYWRkcmVzc1wiKVxuICAgICAgLm1heCgyNTQsIFwiRW1haWwgbXVzdCBiZSBhdCBtb3N0IDI1NCBjaGFyYWN0ZXJzXCIpLFxuXG4gIHVybDogKHsgbWVzc2FnZSB9OiB7IG1lc3NhZ2U/OiBzdHJpbmcgfSA9IHt9KSA9PlxuICAgIHouc3RyaW5nKClcbiAgICAgIC51cmwobWVzc2FnZSB8fCBcIkludmFsaWQgVVJMIGZvcm1hdFwiKSxcblxuICBwaG9uZTogKHsgbWVzc2FnZSB9OiB7IG1lc3NhZ2U/OiBzdHJpbmcgfSA9IHt9KSA9PlxuICAgIHouc3RyaW5nKClcbiAgICAgIC5yZWdleCgvXlsrXT9bMS05XVtcXGRdezAsMTV9JC8sIG1lc3NhZ2UgfHwgXCJJbnZhbGlkIHBob25lIG51bWJlciBmb3JtYXRcIiksXG5cbiAgYWxwaGFudW1lcmljOiAoeyBtZXNzYWdlIH06IHsgbWVzc2FnZT86IHN0cmluZyB9ID0ge30pID0+XG4gICAgei5zdHJpbmcoKVxuICAgICAgLnJlZ2V4KC9eW2EtekEtWjAtOV0rJC8sIG1lc3NhZ2UgfHwgXCJPbmx5IGxldHRlcnMgYW5kIG51bWJlcnMgYXJlIGFsbG93ZWRcIiksXG5cbiAgc2x1ZzogKHsgbWVzc2FnZSB9OiB7IG1lc3NhZ2U/OiBzdHJpbmcgfSA9IHt9KSA9PlxuICAgIHouc3RyaW5nKClcbiAgICAgIC5yZWdleCgvXlthLXowLTldKyg/Oi1bYS16MC05XSspKiQvLCBtZXNzYWdlIHx8IFwiSW52YWxpZCBzbHVnIGZvcm1hdFwiKSxcblxuICAvLyBOdW1iZXIgdmFsaWRhdGlvbnNcbiAgcG9zaXRpdmVOdW1iZXI6ICh7IG1lc3NhZ2UsIG1pbiwgbWF4IH06IHsgbWVzc2FnZT86IHN0cmluZzsgbWluPzogbnVtYmVyOyBtYXg/OiBudW1iZXIgfSA9IHt9KSA9PlxuICAgIHoubnVtYmVyKClcbiAgICAgIC5wb3NpdGl2ZShtZXNzYWdlIHx8IFwiTnVtYmVyIG11c3QgYmUgcG9zaXRpdmVcIilcbiAgICAgIC5taW4obWluIHx8IDAuMDEsIGBOdW1iZXIgbXVzdCBiZSBhdCBsZWFzdCAke21pbiB8fCAwLjAxfWApXG4gICAgICAubWF4KG1heCB8fCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgYE51bWJlciBtdXN0IGJlIGF0IG1vc3QgJHttYXggfHwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCksXG5cbiAgbm9uTmVnYXRpdmVOdW1iZXI6ICh7IG1lc3NhZ2UsIG1heCB9OiB7IG1lc3NhZ2U/OiBzdHJpbmc7IG1heD86IG51bWJlciB9ID0ge30pID0+XG4gICAgei5udW1iZXIoKVxuICAgICAgLm1pbigwLCBtZXNzYWdlIHx8IFwiTnVtYmVyIG11c3QgYmUgbm9uLW5lZ2F0aXZlXCIpXG4gICAgICAubWF4KG1heCB8fCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgYE51bWJlciBtdXN0IGJlIGF0IG1vc3QgJHttYXggfHwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCksXG5cbiAgaW50ZWdlcjogKHsgbWVzc2FnZSwgbWluLCBtYXggfTogeyBtZXNzYWdlPzogc3RyaW5nOyBtaW4/OiBudW1iZXI7IG1heD86IG51bWJlciB9ID0ge30pID0+XG4gICAgei5udW1iZXIoKVxuICAgICAgLmludChtZXNzYWdlIHx8IFwiTXVzdCBiZSBhbiBpbnRlZ2VyXCIpXG4gICAgICAubWluKG1pbiB8fCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiwgYE51bWJlciBtdXN0IGJlIGF0IGxlYXN0ICR7bWluIHx8IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSfWApXG4gICAgICAubWF4KG1heCB8fCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgYE51bWJlciBtdXN0IGJlIGF0IG1vc3QgJHttYXggfHwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCksXG5cbiAgcGVyY2VudGFnZTogKHsgbWVzc2FnZSB9OiB7IG1lc3NhZ2U/OiBzdHJpbmcgfSA9IHt9KSA9PlxuICAgIHoubnVtYmVyKClcbiAgICAgIC5taW4oMCwgbWVzc2FnZSB8fCBcIlBlcmNlbnRhZ2UgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEwMFwiKVxuICAgICAgLm1heCgxMDAsIG1lc3NhZ2UgfHwgXCJQZXJjZW50YWdlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMDBcIiksXG5cbiAgLy8gQXJyYXkgdmFsaWRhdGlvbnNcbiAgbm9uRW1wdHlBcnJheTogPFQ+KHNjaGVtYTogei5ab2RTY2hlbWE8VD4sIHsgbWVzc2FnZSB9OiB7IG1lc3NhZ2U/OiBzdHJpbmcgfSA9IHt9KSA9PlxuICAgIHouYXJyYXkoc2NoZW1hKVxuICAgICAgLm1pbigxLCBtZXNzYWdlIHx8IFwiQXQgbGVhc3Qgb25lIGl0ZW0gaXMgcmVxdWlyZWRcIiksXG5cbiAgdW5pcXVlQXJyYXk6IDxUPihzY2hlbWE6IHouWm9kU2NoZW1hPFQ+LCB7IG1lc3NhZ2UgfTogeyBtZXNzYWdlPzogc3RyaW5nIH0gPSB7fSkgPT5cbiAgICB6LmFycmF5KHNjaGVtYSlcbiAgICAgIC5yZWZpbmUoKGl0ZW1zKSA9PiBuZXcgU2V0KGl0ZW1zKS5zaXplID09PSBpdGVtcy5sZW5ndGgsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSB8fCBcIkFsbCBpdGVtcyBtdXN0IGJlIHVuaXF1ZVwiLFxuICAgICAgfSksXG5cbiAgLy8gQm9vbGVhbiB2YWxpZGF0aW9uc1xuICByZXF1aXJlZEJvb2xlYW46ICh7IG1lc3NhZ2UgfTogeyBtZXNzYWdlPzogc3RyaW5nIH0gPSB7fSkgPT5cbiAgICB6LmJvb2xlYW4oe1xuICAgICAgbWVzc2FnZTogbWVzc2FnZSB8fCBcIlRoaXMgZmllbGQgaXMgcmVxdWlyZWRcIixcbiAgICB9KSxcblxuICAvLyBPYmplY3QgdmFsaWRhdGlvbnNcbiAgbm9uRW1wdHlPYmplY3Q6IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHNjaGVtYTogei5ab2RTY2hlbWE8VD4sIHsgbWVzc2FnZSB9OiB7IG1lc3NhZ2U/OiBzdHJpbmcgfSA9IHt9KSA9PlxuICAgIHNjaGVtYS5yZWZpbmUoKG9iaikgPT4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPiAwLCB7XG4gICAgICBtZXNzYWdlOiBtZXNzYWdlIHx8IFwiT2JqZWN0IGNhbm5vdCBiZSBlbXB0eVwiLFxuICAgIH0pLFxuXG4gIC8vIEZpbGUgdmFsaWRhdGlvbnNcbiAgZmlsZVNpemU6ICh7IG1heFNpemUsIG1lc3NhZ2UgfTogeyBtYXhTaXplOiBudW1iZXI7IG1lc3NhZ2U/OiBzdHJpbmcgfSkgPT5cbiAgICB6Lmluc3RhbmNlb2YoRmlsZSlcbiAgICAgIC5yZWZpbmUoKGZpbGUpID0+IGZpbGUuc2l6ZSA8PSBtYXhTaXplLCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UgfHwgYEZpbGUgc2l6ZSBtdXN0IGJlIGxlc3MgdGhhbiAke01hdGgucm91bmQobWF4U2l6ZSAvIDEwMjQgLyAxMDI0KX1NQmAsXG4gICAgICB9KSxcblxuICBmaWxlVHlwZTogKHsgYWxsb3dlZFR5cGVzLCBtZXNzYWdlIH06IHsgYWxsb3dlZFR5cGVzOiBzdHJpbmdbXTsgbWVzc2FnZT86IHN0cmluZyB9KSA9PlxuICAgIHouaW5zdGFuY2VvZihGaWxlKVxuICAgICAgLnJlZmluZSgoZmlsZSkgPT4gYWxsb3dlZFR5cGVzLmluY2x1ZGVzKGZpbGUudHlwZSksIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSB8fCBgRmlsZSB0eXBlIG11c3QgYmUgb25lIG9mOiAke2FsbG93ZWRUeXBlcy5qb2luKFwiLCBcIil9YCxcbiAgICAgIH0pLFxuXG4gIC8vIEN1c3RvbSB2YWxpZGF0b3JzXG4gIGNvbmRpdGlvbmFsOiA8VCwgVT4oXG4gICAgY29uZGl0aW9uOiAoZGF0YTogVCkgPT4gYm9vbGVhbixcbiAgICB0cnVlU2NoZW1hOiB6LlpvZFNjaGVtYTxVPixcbiAgICBmYWxzZVNjaGVtYTogei5ab2RTY2hlbWE8VT5cbiAgKSA9PlxuICAgIHoudW5pb24oW3RydWVTY2hlbWEsIGZhbHNlU2NoZW1hXSlcbiAgICAgIC5zdXBlclJlZmluZSgoZGF0YSwgY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IHNob3VsZFVzZVRydWUgPSBjb25kaXRpb24oZGF0YSBhcyB1bmtub3duIGFzIFQpO1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBzaG91bGRVc2VUcnVlID8gdHJ1ZVNjaGVtYSA6IGZhbHNlU2NoZW1hO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBzY2hlbWEuc2FmZVBhcnNlKGRhdGEpO1xuICAgICAgICBcbiAgICAgICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgICAgICBjb2RlOiB6LlpvZElzc3VlQ29kZS5jdXN0b20sXG4gICAgICAgICAgICBtZXNzYWdlOiByZXN1bHQuZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSksXG5cbiAgdHJhbnNmb3JtOiB7XG4gICAgdG9Mb3dlckNhc2U6IHouc3RyaW5nKCkudHJhbnNmb3JtKCh2YWwpID0+IHZhbC50b0xvd2VyQ2FzZSgpKSxcbiAgICB0b1VwcGVyQ2FzZTogei5zdHJpbmcoKS50cmFuc2Zvcm0oKHZhbCkgPT4gdmFsLnRvVXBwZXJDYXNlKCkpLFxuICAgIHRyaW06IHouc3RyaW5nKCkudHJhbnNmb3JtKCh2YWwpID0+IHZhbC50cmltKCkpLFxuICAgIHRvTnVtYmVyOiB6LnN0cmluZygpLnRyYW5zZm9ybSgodmFsKSA9PiBOdW1iZXIodmFsKSksXG4gICAgdG9Cb29sZWFuOiB6LnN0cmluZygpLnRyYW5zZm9ybSgodmFsKSA9PiB2YWwgPT09IFwidHJ1ZVwiKSxcbiAgICBwYXJzZUpzb246IDxUPihzY2hlbWE6IHouWm9kU2NoZW1hPFQ+KSA9PiBcbiAgICAgIHouc3RyaW5nKCkudHJhbnNmb3JtKCh2YWwsIGN0eCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UodmFsKTtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBzY2hlbWEuc2FmZVBhcnNlKHBhcnNlZCk7XG5cbiAgICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHJldHVybiByZXN1bHQuZGF0YTtcbiAgICAgICAgICBcbiAgICAgICAgICBjdHguYWRkSXNzdWUoe1xuICAgICAgICAgICAgY29kZTogei5ab2RJc3N1ZUNvZGUuY3VzdG9tLFxuICAgICAgICAgICAgbWVzc2FnZTogcmVzdWx0LmVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gei5ORVZFUjtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgICAgIGNvZGU6IHouWm9kSXNzdWVDb2RlLmN1c3RvbSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiSW52YWxpZCBKU09OXCIsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gei5ORVZFUjtcbiAgICAgICAgfVxuICAgICAgfSksXG4gIH0sXG59O1xuIiwgIi8qKlxuICogVHlwZSBndWFyZCB1dGlsaXRpZXMgZm9yIHJ1bnRpbWUgdHlwZSBjaGVja2luZ1xuICogXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqL1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBhIG5vbi1udWxsIG9iamVjdCAoZXhjbHVkaW5nIGFycmF5cylcbiAqIFxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdFxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaWYgKGlzUmVjb3JkKHZhbHVlKSkge1xuICogICAvLyB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICogICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuICogfVxuICogYGBgXG4gKiBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVjb3JkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaGFzIGEgc3BlY2lmaWMgcHJvcGVydHlcbiAqIFxuICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgdG8gY2hlY2tcbiAqIEBwYXJhbSBrZXkgLSBUaGUgcHJvcGVydHkga2V5IHRvIGxvb2sgZm9yXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvYmplY3QgaGFzIHRoZSBwcm9wZXJ0eVxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaWYgKGhhc1Byb3BlcnR5KG9iaiwgJ25hbWUnKSkge1xuICogICAvLyBvYmogaXMgUmVjb3JkPCduYW1lJywgdW5rbm93bj5cbiAqICAgY29uc29sZS5sb2cob2JqLm5hbWUpO1xuICogfVxuICogYGBgXG4gKiBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1Byb3BlcnR5PEsgZXh0ZW5kcyBQcm9wZXJ0eUtleT4oXG4gIG9iajogdW5rbm93bixcbiAga2V5OiBLXG4pOiBvYmogaXMgUmVjb3JkPEssIHVua25vd24+IHtcbiAgcmV0dXJuIGlzUmVjb3JkKG9iaikgJiYga2V5IGluIG9iajtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYSBub24tZW1wdHkgc3RyaW5nXG4gKiBcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBub24tZW1wdHkgc3RyaW5nXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpZiAoaXNOb25FbXB0eVN0cmluZyh2YWx1ZSkpIHtcbiAqICAgLy8gdmFsdWUgaXMgc3RyaW5nIHdpdGggbGVuZ3RoID4gMFxuICogICBjb25zb2xlLmxvZyh2YWx1ZS50b1VwcGVyQ2FzZSgpKTtcbiAqIH1cbiAqIGBgYFxuICogXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vbkVtcHR5U3RyaW5nKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gMDtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYSB2YWxpZCBhcnJheVxuICogXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHZhbHVlIGlzIGFuIGFycmF5XG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAqICAgLy8gdmFsdWUgaXMgdW5rbm93bltdXG4gKiAgIHZhbHVlLmZvckVhY2goaXRlbSA9PiBjb25zb2xlLmxvZyhpdGVtKSk7XG4gKiB9XG4gKiBgYGBcbiAqIFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheTxUID0gdW5rbm93bj4odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBUW10ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGEgbm9uLWVtcHR5IGFycmF5XG4gKiBcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBub24tZW1wdHkgYXJyYXlcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGlmIChpc05vbkVtcHR5QXJyYXkoaXRlbXMpKSB7XG4gKiAgIC8vIGl0ZW1zIGlzIFtULCAuLi5UW11dIC0gZ3VhcmFudGVlZCB0byBoYXZlIGF0IGxlYXN0IG9uZSBlbGVtZW50XG4gKiAgIGNvbnN0IGZpcnN0ID0gaXRlbXNbMF07ICAvLyBTYWZlIGFjY2Vzc1xuICogfVxuICogYGBgXG4gKiBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTm9uRW1wdHlBcnJheTxUPih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFtULCAuLi5UW11dIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDA7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGEgZnVuY3Rpb25cbiAqIFxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIGZ1bmN0aW9uXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbiAqICAgLy8gY2FsbGJhY2sgaXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93blxuICogICBjYWxsYmFjaygpO1xuICogfVxuICogYGBgXG4gKiBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24oXG4gIHZhbHVlOiB1bmtub3duXG4pOiB2YWx1ZSBpcyAoLi4uYXJnczogcmVhZG9ubHkgdW5rbm93bltdKSA9PiB1bmtub3duIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYSBzdHJpbmdcbiAqIFxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZyAoaW5jbHVkaW5nIGVtcHR5IHN0cmluZylcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAqICAgLy8gdmFsdWUgaXMgc3RyaW5nXG4gKiAgIGNvbnNvbGUubG9nKHZhbHVlLmxlbmd0aCk7XG4gKiB9XG4gKiBgYGBcbiAqIFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYSBudW1iZXIgKGV4Y2x1ZGluZyBOYU4pXG4gKiBcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSB2YWxpZCBudW1iZXJcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGlmIChpc051bWJlcih2YWx1ZSkpIHtcbiAqICAgLy8gdmFsdWUgaXMgbnVtYmVyIChub3QgTmFOKVxuICogICBjb25zdCBkb3VibGVkID0gdmFsdWUgKiAyO1xuICogfVxuICogYGBgXG4gKiBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgbnVtYmVyIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYSBib29sZWFuXG4gKiBcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBib29sZWFuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpZiAoaXNCb29sZWFuKHZhbHVlKSkge1xuICogICAvLyB2YWx1ZSBpcyBib29sZWFuXG4gKiAgIGNvbnNvbGUubG9nKCF2YWx1ZSk7XG4gKiB9XG4gKiBgYGBcbiAqIFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgbnVsbFxuICogXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHZhbHVlIGlzIG51bGxcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGlmIChpc051bGwodmFsdWUpKSB7XG4gKiAgIC8vIHZhbHVlIGlzIG51bGxcbiAqICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAqIH1cbiAqIGBgYFxuICogXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc051bGwodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudWxsIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqIFxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAqICAgLy8gdmFsdWUgaXMgdW5kZWZpbmVkXG4gKiAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gKiB9XG4gKiBgYGBcbiAqIFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB1bmRlZmluZWQge1xuICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWRcbiAqIFxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBudWxsaXNoXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpZiAoaXNOdWxsaXNoKHZhbHVlKSkge1xuICogICAvLyB2YWx1ZSBpcyBudWxsIHwgdW5kZWZpbmVkXG4gKiAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gKiB9XG4gKiBcbiAqIGlmICghaXNOdWxsaXNoKHZhbHVlKSkge1xuICogICAvLyB2YWx1ZSBpcyBOb25OdWxsYWJsZTx0eXBlb2YgdmFsdWU+XG4gKiAgIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAqIH1cbiAqIGBgYFxuICogXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxpc2godmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudWxsIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGRlZmluZWQgKG5vdCBudWxsIG9yIHVuZGVmaW5lZClcbiAqIFxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGZpbHRlcmVkID0gaXRlbXMuZmlsdGVyKGlzRGVmaW5lZCk7XG4gKiAvLyBmaWx0ZXJlZCBoYXMgdHlwZTogTm9uTnVsbGFibGU8VD5bXVxuICogYGBgXG4gKiBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZDxUPih2YWx1ZTogVCk6IHZhbHVlIGlzIE5vbk51bGxhYmxlPFQ+IHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGEgRGF0ZSBvYmplY3RcbiAqIFxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIERhdGVcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gKiAgIC8vIHZhbHVlIGlzIERhdGVcbiAqICAgY29uc29sZS5sb2codmFsdWUudG9JU09TdHJpbmcoKSk7XG4gKiB9XG4gKiBgYGBcbiAqIFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRGF0ZSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHZhbHVlLmdldFRpbWUoKSk7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGEgUHJvbWlzZVxuICogXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgUHJvbWlzZVxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaWYgKGlzUHJvbWlzZSh2YWx1ZSkpIHtcbiAqICAgLy8gdmFsdWUgaXMgUHJvbWlzZTx1bmtub3duPlxuICogICBjb25zdCByZXN1bHQgPSBhd2FpdCB2YWx1ZTtcbiAqIH1cbiAqIGBgYFxuICogXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb21pc2UodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBQcm9taXNlPHVua25vd24+IHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UgfHxcbiAgICAoaXNSZWNvcmQodmFsdWUpICYmXG4gICAgICB0eXBlb2YgKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS50aGVuID09PSAnZnVuY3Rpb24nKVxuICApO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gZXJyb3IgaXMgYW4gRXJyb3IgaW5zdGFuY2VcbiAqIFxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBlcnJvciBpcyBhbiBFcnJvciBpbnN0YW5jZVxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdHJ5IHtcbiAqICAgLy8gLi4uXG4gKiB9IGNhdGNoIChlcnJvcikge1xuICogICBpZiAoaXNFcnJvcihlcnJvcikpIHtcbiAqICAgICAvLyBlcnJvciBpcyBFcnJvclxuICogICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICogXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Vycm9yKGVycm9yOiB1bmtub3duKTogZXJyb3IgaXMgRXJyb3Ige1xuICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBFcnJvcjtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgdmFsdWUgbWF0Y2hlcyBhIHNwZWNpZmljIHR5cGUgdXNpbmcgYSB2YWxpZGF0b3IgZnVuY3Rpb25cbiAqIFxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcGFyYW0gdmFsaWRhdG9yIC0gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdmFsdWUgbWF0Y2hlcyB0aGUgdHlwZVxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmFsdWUgbWF0Y2hlcyB0aGUgdHlwZVxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW50ZXJmYWNlIFVzZXIge1xuICogICBpZDogc3RyaW5nO1xuICogICBuYW1lOiBzdHJpbmc7XG4gKiB9XG4gKiBcbiAqIGNvbnN0IGlzVXNlciA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFVzZXIgPT5cbiAqICAgaXNSZWNvcmQodmFsdWUpICYmXG4gKiAgIGhhc1Byb3BlcnR5KHZhbHVlLCAnaWQnKSAmJlxuICogICBoYXNQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnKSAmJlxuICogICBpc1N0cmluZyh2YWx1ZS5pZCkgJiZcbiAqICAgaXNTdHJpbmcodmFsdWUubmFtZSk7XG4gKiBcbiAqIGlmIChpc1VzZXIoZGF0YSkpIHtcbiAqICAgLy8gZGF0YSBpcyBVc2VyXG4gKiAgIGNvbnNvbGUubG9nKGRhdGEubmFtZSk7XG4gKiB9XG4gKiBgYGBcbiAqIFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hlczxUPihcbiAgdmFsdWU6IHVua25vd24sXG4gIHZhbGlkYXRvcjogKHZhbHVlOiB1bmtub3duKSA9PiB2YWx1ZSBpcyBUXG4pOiB2YWx1ZSBpcyBUIHtcbiAgcmV0dXJuIHZhbGlkYXRvcih2YWx1ZSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBSUEsSUFBTSxjQUFjLE9BQ2xCLEtBQ0EsWUFDNEI7QUFDNUIsUUFBTSxXQUFXLE1BQU0sTUFBTSxLQUFLLE9BQU87QUFFekMsTUFBSSxTQUFTLElBQUk7QUFDZixVQUFNLE9BQVUsTUFBTSxTQUFTLEtBQUs7QUFFcEMsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBLFFBQVEsU0FBUztBQUFBLElBQ25CO0FBQUEsRUFDRixXQUFXLFNBQVMsV0FBVyxLQUFLO0FBQ2xDLFVBQU0sVUFBMEIsTUFBTSxTQUFTLEtBQUs7QUFFcEQsVUFBTSxPQUF1QjtBQUFBLE1BQzNCLFFBQVEsU0FBUztBQUFBLE1BQ2pCLE9BQU8sUUFBUTtBQUFBLElBQ2pCO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGNBQThCLE1BQU0sU0FBUyxLQUFLO0FBRXhELFNBQU87QUFDVDtBQUVBLElBQXFCLE1BQXJCLE1BQXlCO0FBQUEsRUFDdkIsYUFBYSxPQUNYLEtBQ0EsV0FDdUM7QUFDdkMsVUFBTSxpQkFBaUM7QUFB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
|
package/dist/utils/api.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { ApiResponse } from '../core/api/types/ApiResponse';
|
|
2
|
-
import type { ListResponse, PostModel } from '../types';
|
|
3
|
-
import type { RequestOptions, JsonObject } from '../types/api';
|
|
4
|
-
export default class api {
|
|
5
|
-
static filter<T, TFilter>(url: string, postModel: PostModel<TFilter>): Promise<ApiResponse<ListResponse<T>>>;
|
|
6
|
-
static post<T>(url: string, body?: JsonObject): Promise<ApiResponse<T>>;
|
|
7
|
-
static get<T>(url: string): Promise<ApiResponse<T>>;
|
|
8
|
-
static delete<T>(url: string): Promise<ApiResponse<T>>;
|
|
9
|
-
static put<T>(url: string, body?: JsonObject): Promise<ApiResponse<T>>;
|
|
10
|
-
static fetch(url: string, options?: RequestInit): Promise<Response>;
|
|
11
|
-
static tempFetch<T>(url: string, options?: RequestOptions): Promise<ApiResponse<T>>;
|
|
12
|
-
static upload<T>(url: string, formData: FormData): Promise<ApiResponse<T>>;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=api.d.ts.map
|
package/dist/utils/api.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AA+B/D,MAAM,CAAC,OAAO,OAAO,GAAG;WACT,MAAM,CAAC,CAAC,EAAE,OAAO,EAC5B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,GAC5B,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;WAgB3B,IAAI,CAAC,CAAC,EACjB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,UAAe,GACpB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;WAeb,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;WAc5C,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;WAc/C,GAAG,CAAC,CAAC,EAChB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,UAAe,GACpB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;WAeb,KAAK,CAChB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,QAAQ,CAAC;WAcP,SAAS,CAAC,CAAC,EACtB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,cAAkC,GAC1C,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;WAYb,MAAM,CAAC,CAAC,EACnB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAa3B"}
|
package/dist/utils/api2.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { ApiResponse } from '../core/api/types/ApiResponse';
|
|
2
|
-
import type { ListResponse, PostModel } from '../types';
|
|
3
|
-
import type { RequestOptions, JsonObject } from '../types/api';
|
|
4
|
-
export default class api2 {
|
|
5
|
-
static filter<T, TFilter>(url: string, postModel: PostModel<TFilter>): Promise<ApiResponse<ListResponse<T>>>;
|
|
6
|
-
static post<T>(url: string, body?: JsonObject): Promise<ApiResponse<T>>;
|
|
7
|
-
static get<T>(url: string): Promise<ApiResponse<T>>;
|
|
8
|
-
static delete<T>(url: string): Promise<ApiResponse<T>>;
|
|
9
|
-
static put<T>(url: string, body?: JsonObject): Promise<ApiResponse<T>>;
|
|
10
|
-
static fetch(url: string, options?: RequestInit): Promise<Response>;
|
|
11
|
-
static tempFetch<T>(url: string, options?: RequestOptions): Promise<ApiResponse<T>>;
|
|
12
|
-
static upload<T>(url: string, formData: FormData): Promise<ApiResponse<T>>;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=api2.d.ts.map
|
package/dist/utils/api2.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api2.d.ts","sourceRoot":"","sources":["../../src/utils/api2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AA+B/D,MAAM,CAAC,OAAO,OAAO,IAAI;WACV,MAAM,CAAC,CAAC,EAAE,OAAO,EAC5B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,GAC5B,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;WAgB3B,IAAI,CAAC,CAAC,EACjB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,UAAe,GACpB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;WAeb,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;WAc5C,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;WAc/C,GAAG,CAAC,CAAC,EAChB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,UAAe,GACpB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;WAeb,KAAK,CAChB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,QAAQ,CAAC;WAcP,SAAS,CAAC,CAAC,EACtB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,cAAkC,GAC1C,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;WAYb,MAAM,CAAC,CAAC,EACnB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAa3B"}
|