socket-function 1.2.2 → 1.2.5

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.
Files changed (52) hide show
  1. package/SocketFunction.d.ts +1 -1
  2. package/SocketFunctionTypes.d.ts +1 -1
  3. package/hot/HotReloadController.d.ts +3 -3
  4. package/index.d.ts +25 -10
  5. package/package.json +1 -1
  6. package/require/CSSShim.d.ts +1 -1
  7. package/require/RequireController.d.ts +2 -2
  8. package/require/compileFlags.d.ts +1 -1
  9. package/require/require.d.ts +1 -1
  10. package/src/callManager.d.ts +1 -1
  11. package/src/webSocketServer.ts +44 -35
  12. package/test.ts +5 -11
  13. package/time/trueTimeShim.d.ts +16 -1
  14. package/time/trueTimeShim.ts +43 -7
  15. package/dist/SetProcessVariables.ts.cache +0 -9
  16. package/dist/SocketFunction.ts.cache +0 -467
  17. package/hot/dist/HotReloadController.ts.cache +0 -252
  18. package/require/dist/RequireController.ts.cache +0 -386
  19. package/require/dist/compileFlags.ts.cache +0 -41
  20. package/require/dist/extMapper.ts.cache +0 -368
  21. package/require/dist/require.ts.cache +0 -676
  22. package/src/JSONLACKS/dist/JSONLACKS.ts.cache +0 -469
  23. package/src/dist/CallFactory.ts.cache +0 -930
  24. package/src/dist/Zip.ts.cache +0 -156
  25. package/src/dist/batching.ts.cache +0 -377
  26. package/src/dist/bits.ts.cache +0 -121
  27. package/src/dist/buffers.ts.cache +0 -76
  28. package/src/dist/caching.ts.cache +0 -302
  29. package/src/dist/callHTTPHandler.ts.cache +0 -264
  30. package/src/dist/callManager.ts.cache +0 -159
  31. package/src/dist/certStore.ts.cache +0 -59
  32. package/src/dist/createSingleton.ts.cache +0 -62
  33. package/src/dist/fixLargeNetworkCalls.ts.cache +0 -17
  34. package/src/dist/forwardPort.ts.cache +0 -222
  35. package/src/dist/https.ts.cache +0 -141
  36. package/src/dist/misc.ts.cache +0 -499
  37. package/src/dist/nodeCache.ts.cache +0 -136
  38. package/src/dist/nodeProxy.ts.cache +0 -57
  39. package/src/dist/protocolNegotiation.ts.cache +0 -101
  40. package/src/dist/tlsParsing.ts.cache +0 -85
  41. package/src/dist/types.ts.cache +0 -9
  42. package/src/dist/webSocketServer.ts.cache +0 -365
  43. package/src/dist/websocketFactory.ts.cache +0 -53
  44. package/src/formatting/dist/colors.ts.cache +0 -98
  45. package/src/formatting/dist/format.ts.cache +0 -396
  46. package/src/formatting/dist/logColors.ts.cache +0 -28
  47. package/src/lz4/dist/LZ4.ts.cache +0 -53
  48. package/src/profiling/dist/getOwnTime.ts.cache +0 -100
  49. package/src/profiling/dist/measure.ts.cache +0 -338
  50. package/src/profiling/dist/stats.ts.cache +0 -202
  51. package/src/profiling/dist/statsFormat.ts.cache +0 -45
  52. package/time/dist/trueTimeShim.ts.cache +0 -707
@@ -1,368 +0,0 @@
1
- "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
- //exports.getContentTypeFromBuffer = exports.getExtContentType = void 0;
4
- function getExtContentType(ext) {
5
- // Images
6
- if (ext === ".svg")
7
- return "image/svg+xml";
8
- if (ext === ".ico")
9
- return "image/x-icon";
10
- if (ext === ".png")
11
- return "image/png";
12
- if (ext === ".jpg")
13
- return "image/jpeg";
14
- if (ext === ".jpeg")
15
- return "image/jpeg";
16
- if (ext === ".gif")
17
- return "image/gif";
18
- if (ext === ".webp")
19
- return "image/webp";
20
- if (ext === ".avif")
21
- return "image/avif";
22
- if (ext === ".heic")
23
- return "image/heic";
24
- if (ext === ".heif")
25
- return "image/heif";
26
- if (ext === ".bmp")
27
- return "image/bmp";
28
- if (ext === ".tiff")
29
- return "image/tiff";
30
- if (ext === ".tif")
31
- return "image/tiff";
32
- if (ext === ".jxl")
33
- return "image/jxl";
34
- // Audio
35
- if (ext === ".mp3")
36
- return "audio/mpeg";
37
- if (ext === ".wav")
38
- return "audio/wav";
39
- if (ext === ".ogg")
40
- return "audio/ogg";
41
- if (ext === ".m4a")
42
- return "audio/mp4";
43
- if (ext === ".aac")
44
- return "audio/aac";
45
- if (ext === ".flac")
46
- return "audio/flac";
47
- if (ext === ".wma")
48
- return "audio/x-ms-wma";
49
- if (ext === ".opus")
50
- return "audio/opus";
51
- // Video
52
- if (ext === ".mp4")
53
- return "video/mp4";
54
- if (ext === ".webm")
55
- return "video/webm";
56
- if (ext === ".mkv")
57
- return "video/x-matroska";
58
- if (ext === ".avi")
59
- return "video/x-msvideo";
60
- if (ext === ".mov")
61
- return "video/quicktime";
62
- if (ext === ".wmv")
63
- return "video/x-ms-wmv";
64
- if (ext === ".flv")
65
- return "video/x-flv";
66
- if (ext === ".m4v")
67
- return "video/x-m4v";
68
- // Web files
69
- if (ext === ".html")
70
- return "text/html";
71
- if (ext === ".htm")
72
- return "text/html";
73
- if (ext === ".css")
74
- return "text/css";
75
- if (ext === ".js")
76
- return "text/javascript";
77
- if (ext === ".mjs")
78
- return "text/javascript";
79
- if (ext === ".json")
80
- return "application/json";
81
- if (ext === ".xml")
82
- return "application/xml";
83
- if (ext === ".rss")
84
- return "application/rss+xml";
85
- if (ext === ".atom")
86
- return "application/atom+xml";
87
- // Documents
88
- if (ext === ".pdf")
89
- return "application/pdf";
90
- if (ext === ".doc")
91
- return "application/msword";
92
- if (ext === ".docx")
93
- return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
94
- if (ext === ".xls")
95
- return "application/vnd.ms-excel";
96
- if (ext === ".xlsx")
97
- return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
98
- if (ext === ".ppt")
99
- return "application/vnd.ms-powerpoint";
100
- if (ext === ".pptx")
101
- return "application/vnd.openxmlformats-officedocument.presentationml.presentation";
102
- if (ext === ".odt")
103
- return "application/vnd.oasis.opendocument.text";
104
- if (ext === ".ods")
105
- return "application/vnd.oasis.opendocument.spreadsheet";
106
- if (ext === ".odp")
107
- return "application/vnd.oasis.opendocument.presentation";
108
- if (ext === ".rtf")
109
- return "application/rtf";
110
- // Text files
111
- if (ext === ".txt")
112
- return "text/plain";
113
- if (ext === ".md")
114
- return "text/markdown";
115
- if (ext === ".csv")
116
- return "text/csv";
117
- if (ext === ".log")
118
- return "text/plain";
119
- // Programming files
120
- if (ext === ".ts")
121
- return "text/typescript";
122
- if (ext === ".tsx")
123
- return "text/typescript";
124
- if (ext === ".jsx")
125
- return "text/javascript";
126
- if (ext === ".py")
127
- return "text/x-python";
128
- if (ext === ".java")
129
- return "text/x-java-source";
130
- if (ext === ".c")
131
- return "text/x-c";
132
- if (ext === ".cpp")
133
- return "text/x-c++";
134
- if (ext === ".h")
135
- return "text/x-c";
136
- if (ext === ".hpp")
137
- return "text/x-c++";
138
- if (ext === ".cs")
139
- return "text/x-csharp";
140
- if (ext === ".php")
141
- return "text/x-php";
142
- if (ext === ".rb")
143
- return "text/x-ruby";
144
- if (ext === ".go")
145
- return "text/x-go";
146
- if (ext === ".rs")
147
- return "text/x-rust";
148
- if (ext === ".swift")
149
- return "text/x-swift";
150
- if (ext === ".kt")
151
- return "text/x-kotlin";
152
- if (ext === ".scala")
153
- return "text/x-scala";
154
- if (ext === ".sh")
155
- return "text/x-shellscript";
156
- if (ext === ".bat")
157
- return "text/x-msdos-batch";
158
- if (ext === ".ps1")
159
- return "text/x-powershell";
160
- // Archives
161
- if (ext === ".zip")
162
- return "application/zip";
163
- if (ext === ".rar")
164
- return "application/vnd.rar";
165
- if (ext === ".tar")
166
- return "application/x-tar";
167
- if (ext === ".gz")
168
- return "application/gzip";
169
- if (ext === ".bz2")
170
- return "application/x-bzip2";
171
- if (ext === ".7z")
172
- return "application/x-7z-compressed";
173
- if (ext === ".xz")
174
- return "application/x-xz";
175
- // Fonts
176
- if (ext === ".ttf")
177
- return "font/ttf";
178
- if (ext === ".otf")
179
- return "font/otf";
180
- if (ext === ".woff")
181
- return "font/woff";
182
- if (ext === ".woff2")
183
- return "font/woff2";
184
- if (ext === ".eot")
185
- return "application/vnd.ms-fontobject";
186
- // Other common formats
187
- if (ext === ".epub")
188
- return "application/epub+zip";
189
- if (ext === ".mobi")
190
- return "application/x-mobipocket-ebook";
191
- if (ext === ".apk")
192
- return "application/vnd.android.package-archive";
193
- if (ext === ".dmg")
194
- return "application/x-apple-diskimage";
195
- if (ext === ".iso")
196
- return "application/x-iso9660-image";
197
- if (ext === ".exe")
198
- return "application/x-msdownload";
199
- if (ext === ".msi")
200
- return "application/x-msi";
201
- if (ext === ".deb")
202
- return "application/x-debian-package";
203
- if (ext === ".rpm")
204
- return "application/x-rpm";
205
- console.warn(`Unknown extension, ${ext}`);
206
- return "text/plain";
207
- }
208
- exports.getExtContentType = getExtContentType;
209
- function getContentTypeFromBuffer(buffer) {
210
- if (buffer.length < 4)
211
- return undefined;
212
- // Helper function to check if buffer starts with specific bytes
213
- const startsWith = (bytes) => {
214
- if (buffer.length < bytes.length)
215
- return false;
216
- for (let i = 0; i < bytes.length; i++) {
217
- if (buffer[i] !== bytes[i])
218
- return false;
219
- }
220
- return true;
221
- };
222
- // Helper function to check bytes at specific offset
223
- const hasAtOffset = (offset, bytes) => {
224
- if (buffer.length < offset + bytes.length)
225
- return false;
226
- for (let i = 0; i < bytes.length; i++) {
227
- if (buffer[offset + i] !== bytes[i])
228
- return false;
229
- }
230
- return true;
231
- };
232
- // Images
233
- if (startsWith([0xFF, 0xD8, 0xFF]))
234
- return "image/jpeg";
235
- if (startsWith([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A]))
236
- return "image/png";
237
- if (startsWith([0x47, 0x49, 0x46, 0x38]))
238
- return "image/gif";
239
- if (startsWith([0x42, 0x4D]))
240
- return "image/bmp";
241
- if (startsWith([0x49, 0x49, 0x2A, 0x00]) || startsWith([0x4D, 0x4D, 0x00, 0x2A]))
242
- return "image/tiff";
243
- if (startsWith([0x00, 0x00, 0x01, 0x00]))
244
- return "image/x-icon";
245
- if (buffer.toString("ascii", 0, 4) === "<svg" || buffer.toString("ascii", 0, 5) === "<?xml") {
246
- if (buffer.toString("utf8").includes("<svg"))
247
- return "image/svg+xml";
248
- }
249
- // WebP and modern image formats
250
- if (startsWith([0x52, 0x49, 0x46, 0x46]) && hasAtOffset(8, [0x57, 0x45, 0x42, 0x50]))
251
- return "image/webp";
252
- if (hasAtOffset(4, [0x66, 0x74, 0x79, 0x70, 0x61, 0x76, 0x69, 0x66]))
253
- return "image/avif";
254
- if (hasAtOffset(4, [0x66, 0x74, 0x79, 0x70, 0x68, 0x65, 0x69, 0x63]))
255
- return "image/heic";
256
- if (hasAtOffset(4, [0x66, 0x74, 0x79, 0x70, 0x6D, 0x69, 0x66, 0x31]))
257
- return "image/heif";
258
- // Audio
259
- if (startsWith([0xFF, 0xFB]) || startsWith([0xFF, 0xF3]) || startsWith([0xFF, 0xF2]))
260
- return "audio/mpeg";
261
- if (startsWith([0x49, 0x44, 0x33]))
262
- return "audio/mpeg"; // MP3 with ID3
263
- if (startsWith([0x52, 0x49, 0x46, 0x46]) && hasAtOffset(8, [0x57, 0x41, 0x56, 0x45]))
264
- return "audio/wav";
265
- if (startsWith([0x4F, 0x67, 0x67, 0x53]))
266
- return "audio/ogg";
267
- if (startsWith([0x66, 0x4C, 0x61, 0x43]))
268
- return "audio/flac";
269
- if (hasAtOffset(4, [0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x41]))
270
- return "audio/mp4";
271
- // Video
272
- if (hasAtOffset(4, [0x66, 0x74, 0x79, 0x70])) {
273
- const ftyp = buffer.toString("ascii", 8, 12);
274
- if (ftyp.startsWith("mp4") || ftyp.startsWith("isom") || ftyp.startsWith("M4V"))
275
- return "video/mp4";
276
- if (ftyp.startsWith("qt"))
277
- return "video/quicktime";
278
- }
279
- if (startsWith([0x1A, 0x45, 0xDF, 0xA3]))
280
- return "video/webm"; // Also mkv
281
- if (startsWith([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11]))
282
- return "video/x-ms-wmv";
283
- if (startsWith([0x46, 0x4C, 0x56, 0x01]))
284
- return "video/x-flv";
285
- if (startsWith([0x52, 0x49, 0x46, 0x46]) && hasAtOffset(8, [0x41, 0x56, 0x49, 0x20]))
286
- return "video/x-msvideo";
287
- // Documents
288
- if (startsWith([0x25, 0x50, 0x44, 0x46]))
289
- return "application/pdf";
290
- if (startsWith([0x50, 0x4B, 0x03, 0x04]) || startsWith([0x50, 0x4B, 0x05, 0x06]) || startsWith([0x50, 0x4B, 0x07, 0x08])) {
291
- // ZIP-based formats - need to check internal structure
292
- const content = buffer.toString("ascii", 30, 100);
293
- if (content.includes("word/"))
294
- return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
295
- if (content.includes("xl/"))
296
- return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
297
- if (content.includes("ppt/"))
298
- return "application/vnd.openxmlformats-officedocument.presentationml.presentation";
299
- if (content.includes("META-INF/")) {
300
- if (content.includes("content.xml"))
301
- return "application/vnd.oasis.opendocument.text";
302
- }
303
- return "application/zip";
304
- }
305
- if (startsWith([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {
306
- // Microsoft Office legacy formats
307
- return "application/msword"; // Could also be Excel or PowerPoint
308
- }
309
- if (startsWith([0x7B, 0x5C, 0x72, 0x74, 0x66]))
310
- return "application/rtf";
311
- // Archives
312
- if (startsWith([0x52, 0x61, 0x72, 0x21, 0x1A, 0x07]))
313
- return "application/vnd.rar";
314
- if (startsWith([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C]))
315
- return "application/x-7z-compressed";
316
- if (startsWith([0x1F, 0x8B]))
317
- return "application/gzip";
318
- if (startsWith([0x42, 0x5A, 0x68]))
319
- return "application/x-bzip2";
320
- if (startsWith([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00]))
321
- return "application/x-xz";
322
- if (startsWith([0x75, 0x73, 0x74, 0x61, 0x72]))
323
- return "application/x-tar";
324
- // Executables
325
- if (startsWith([0x4D, 0x5A]))
326
- return "application/x-msdownload"; // Windows PE
327
- if (startsWith([0x7F, 0x45, 0x4C, 0x46]))
328
- return "application/x-executable"; // Linux ELF
329
- if (startsWith([0xCA, 0xFE, 0xBA, 0xBE]) || startsWith([0xFE, 0xED, 0xFA, 0xCE]))
330
- return "application/x-mach-binary"; // macOS binary
331
- if (startsWith([0x50, 0x4B, 0x03, 0x04]) && buffer.toString("ascii", 30, 50).includes("AndroidManifest.xml"))
332
- return "application/vnd.android.package-archive";
333
- // Fonts
334
- if (startsWith([0x00, 0x01, 0x00, 0x00]))
335
- return "font/ttf";
336
- if (startsWith([0x4F, 0x54, 0x54, 0x4F]))
337
- return "font/otf";
338
- if (startsWith([0x77, 0x4F, 0x46, 0x46]))
339
- return "font/woff";
340
- if (startsWith([0x77, 0x4F, 0x46, 0x32]))
341
- return "font/woff2";
342
- // Web files (text-based, check for common patterns)
343
- const textStart = buffer.toString("utf8", 0, Math.min(100, buffer.length)).toLowerCase();
344
- if (textStart.includes("<!doctype html") || textStart.includes("<html"))
345
- return "text/html";
346
- if (textStart.includes("<?xml"))
347
- return "application/xml";
348
- if (textStart.startsWith("{") || textStart.startsWith("[")) {
349
- try {
350
- JSON.parse(buffer.toString("utf8"));
351
- return "application/json";
352
- }
353
- catch (_a) {
354
- // Not JSON
355
- }
356
- }
357
- // Other formats
358
- if (startsWith([0x25, 0x21, 0x50, 0x53]))
359
- return "application/postscript";
360
- if (startsWith([0x38, 0x42, 0x50, 0x53]))
361
- return "image/vnd.adobe.photoshop";
362
- if (startsWith([0x49, 0x49, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x43, 0x52]))
363
- return "image/x-canon-cr2";
364
- return undefined;
365
- }
366
- exports.getContentTypeFromBuffer = getContentTypeFromBuffer;
367
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0TWFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXh0TWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQWdCLGlCQUFpQixDQUFDLEdBQVc7SUFDekMsU0FBUztJQUNULElBQUksR0FBRyxLQUFLLE1BQU07UUFBRSxPQUFPLGVBQWUsQ0FBQztJQUMzQyxJQUFJLEdBQUcsS0FBSyxNQUFNO1FBQUUsT0FBTyxjQUFjLENBQUM7SUFDMUMsSUFBSSxHQUFHLEtBQUssTUFBTTtRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQ3ZDLElBQUksR0FBRyxLQUFLLE1BQU07UUFBRSxPQUFPLFlBQVksQ0FBQztJQUN4QyxJQUFJLEdBQUcsS0FBSyxPQUFPO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFDekMsSUFBSSxHQUFHLEtBQUssTUFBTTtRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQ3ZDLElBQUksR0FBRyxLQUFLLE9BQU87UUFBRSxPQUFPLFlBQVksQ0FBQztJQUN6QyxJQUFJLEdBQUcsS0FBSyxPQUFPO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFDekMsSUFBSSxHQUFHLEtBQUssT0FBTztRQUFFLE9BQU8sWUFBWSxDQUFDO0lBQ3pDLElBQUksR0FBRyxLQUFLLE9BQU87UUFBRSxPQUFPLFlBQVksQ0FBQztJQUN6QyxJQUFJLEdBQUcsS0FBSyxNQUFNO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDdkMsSUFBSSxHQUFHLEtBQUssT0FBTztRQUFFLE9BQU8sWUFBWSxDQUFDO0lBQ3pDLElBQUksR0FBRyxLQUFLLE1BQU07UUFBRSxPQUFPLFlBQVksQ0FBQztJQUN4QyxJQUFJLEdBQUcsS0FBSyxNQUFNO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFFdkMsUUFBUTtJQUNSLElBQUksR0FBRyxLQUFLLE1BQU07UUFBRSxPQUFPLFlBQVksQ0FBQztJQUN4QyxJQUFJLEdBQUcsS0FBSyxNQUFNO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDdkMsSUFBSSxH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LGtCQUFrQixDQUFDO1FBQzlCLENBQUM7UUFBQyxXQUFNLENBQUM7WUFDTCxXQUFXO1FBQ2YsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sd0JBQXdCLENBQUM7SUFDMUUsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sMkJBQTJCLENBQUM7SUFDN0UsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sbUJBQW1CLENBQUM7SUFFekcsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQW5IRCw0REFtSEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2V0RXh0Q29udGVudFR5cGUoZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIEltYWdlc1xuICAgIGlmIChleHQgPT09IFwiLnN2Z1wiKSByZXR1cm4gXCJpbWFnZS9zdmcreG1sXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuaWNvXCIpIHJldHVybiBcImltYWdlL3gtaWNvblwiO1xuICAgIGlmIChleHQgPT09IFwiLnBuZ1wiKSByZXR1cm4gXCJpbWFnZS9wbmdcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5qcGdcIikgcmV0dXJuIFwiaW1hZ2UvanBlZ1wiO1xuICAgIGlmIChleHQgPT09IFwiLmpwZWdcIikgcmV0dXJuIFwiaW1hZ2UvanBlZ1wiO1xuICAgIGlmIChleHQgPT09IFwiLmdpZlwiKSByZXR1cm4gXCJpbWFnZS9naWZcIjtcbiAgICBpZiAoZXh0ID09PSBcIi53ZWJwXCIpIHJldHVybiBcImltYWdlL3dlYnBcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5hdmlmXCIpIHJldHVybiBcImltYWdlL2F2aWZcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5oZWljXCIpIHJldHVybiBcImltYWdlL2hlaWNcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5oZWlmXCIpIHJldHVybiBcImltYWdlL2hlaWZcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5ibXBcIikgcmV0dXJuIFwiaW1hZ2UvYm1wXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIudGlmZlwiKSByZXR1cm4gXCJpbWFnZS90aWZmXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIudGlmXCIpIHJldHVybiBcImltYWdlL3RpZmZcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5qeGxcIikgcmV0dXJuIFwiaW1hZ2UvanhsXCI7XG5cbiAgICAvLyBBdWRpb1xuICAgIGlmIChleHQgPT09IFwiLm1wM1wiKSByZXR1cm4gXCJhdWRpby9tcGVnXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIud2F2XCIpIHJldHVybiBcImF1ZGlvL3dhdlwiO1xuICAgIGlmIChleHQgPT09IFwiLm9nZ1wiKSByZXR1cm4gXCJhdWRpby9vZ2dcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5tNGFcIikgcmV0dXJuIFwiYXVkaW8vbXA0XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuYWFjXCIpIHJldHVybiBcImF1ZGlvL2FhY1wiO1xuICAgIGlmIChleHQgPT09IFwiLmZsYWNcIikgcmV0dXJuIFwiYXVkaW8vZmxhY1wiO1xuICAgIGlmIChleHQgPT09IFwiLndtYVwiKSByZXR1cm4gXCJhdWRpby94LW1zLXdtYVwiO1xuICAgIGlmIChleHQgPT09IFwiLm9wdXNcIikgcmV0dXJuIFwiYXVkaW8vb3B1c1wiO1xuXG4gICAgLy8gVmlkZW9cbiAgICBpZiAoZXh0ID09PSBcIi5tcDRcIikgcmV0dXJuIFwidmlkZW8vbXA0XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIud2VibVwiKSByZXR1cm4gXCJ2aWRlby93ZWJtXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIubWt2XCIpIHJldHVybiBcInZpZGVvL3gtbWF0cm9za2FcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5hdmlcIikgcmV0dXJuIFwidmlkZW8veC1tc3ZpZGVvXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIubW92XCIpIHJldHVybiBcInZpZGVvL3F1aWNrdGltZVwiO1xuICAgIGlmIChleHQgPT09IFwiLndtdlwiKSByZXR1cm4gXCJ2aWRlby94LW1zLXdtdlwiO1xuICAgIGlmIChleHQgPT09IFwiLmZsdlwiKSByZXR1cm4gXCJ2aWRlby94LWZsdlwiO1xuICAgIGlmIChleHQgPT09IFwiLm00dlwiKSByZXR1cm4gXCJ2aWRlby94LW00dlwiO1xuXG4gICAgLy8gV2ViIGZpbGVzXG4gICAgaWYgKGV4dCA9PT0gXCIuaHRtbFwiKSByZXR1cm4gXCJ0ZXh0L2h0bWxcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5odG1cIikgcmV0dXJuIFwidGV4dC9odG1sXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuY3NzXCIpIHJldHVybiBcInRleHQvY3NzXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuanNcIikgcmV0dXJuIFwidGV4dC9qYXZhc2NyaXB0XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIubWpzXCIpIHJldHVybiBcInRleHQvamF2YXNjcmlwdFwiO1xuICAgIGlmIChleHQgPT09IFwiLmpzb25cIikgcmV0dXJuIFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgIGlmIChleHQgPT09IFwiLnhtbFwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi94bWxcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5yc3NcIikgcmV0dXJuIFwiYXBwbGljYXRpb24vcnNzK3htbFwiO1xuICAgIGlmIChleHQgPT09IFwiLmF0b21cIikgcmV0dXJuIFwiYXBwbGljYXRpb24vYXRvbSt4bWxcIjtcblxuICAgIC8vIERvY3VtZW50c1xuICAgIGlmIChleHQgPT09IFwiLnBkZlwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi9wZGZcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5kb2NcIikgcmV0dXJuIFwiYXBwbGljYXRpb24vbXN3b3JkXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuZG9jeFwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudFwiO1xuICAgIGlmIChleHQgPT09IFwiLnhsc1wiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIjtcbiAgICBpZiAoZXh0ID09PSBcIi54bHN4XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucHB0XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucHB0eFwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIub2R0XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dFwiO1xuICAgIGlmIChleHQgPT09IFwiLm9kc1wiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIub2RwXCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQucHJlc2VudGF0aW9uXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucnRmXCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3J0ZlwiO1xuXG4gICAgLy8gVGV4dCBmaWxlc1xuICAgIGlmIChleHQgPT09IFwiLnR4dFwiKSByZXR1cm4gXCJ0ZXh0L3BsYWluXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIubWRcIikgcmV0dXJuIFwidGV4dC9tYXJrZG93blwiO1xuICAgIGlmIChleHQgPT09IFwiLmNzdlwiKSByZXR1cm4gXCJ0ZXh0L2NzdlwiO1xuICAgIGlmIChleHQgPT09IFwiLmxvZ1wiKSByZXR1cm4gXCJ0ZXh0L3BsYWluXCI7XG5cbiAgICAvLyBQcm9ncmFtbWluZyBmaWxlc1xuICAgIGlmIChleHQgPT09IFwiLnRzXCIpIHJldHVybiBcInRleHQvdHlwZXNjcmlwdFwiO1xuICAgIGlmIChleHQgPT09IFwiLnRzeFwiKSByZXR1cm4gXCJ0ZXh0L3R5cGVzY3JpcHRcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5qc3hcIikgcmV0dXJuIFwidGV4dC9qYXZhc2NyaXB0XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucHlcIikgcmV0dXJuIFwidGV4dC94LXB5dGhvblwiO1xuICAgIGlmIChleHQgPT09IFwiLmphdmFcIikgcmV0dXJuIFwidGV4dC94LWphdmEtc291cmNlXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuY1wiKSByZXR1cm4gXCJ0ZXh0L3gtY1wiO1xuICAgIGlmIChleHQgPT09IFwiLmNwcFwiKSByZXR1cm4gXCJ0ZXh0L3gtYysrXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuaFwiKSByZXR1cm4gXCJ0ZXh0L3gtY1wiO1xuICAgIGlmIChleHQgPT09IFwiLmhwcFwiKSByZXR1cm4gXCJ0ZXh0L3gtYysrXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuY3NcIikgcmV0dXJuIFwidGV4dC94LWNzaGFycFwiO1xuICAgIGlmIChleHQgPT09IFwiLnBocFwiKSByZXR1cm4gXCJ0ZXh0L3gtcGhwXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucmJcIikgcmV0dXJuIFwidGV4dC94LXJ1YnlcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5nb1wiKSByZXR1cm4gXCJ0ZXh0L3gtZ29cIjtcbiAgICBpZiAoZXh0ID09PSBcIi5yc1wiKSByZXR1cm4gXCJ0ZXh0L3gtcnVzdFwiO1xuICAgIGlmIChleHQgPT09IFwiLnN3aWZ0XCIpIHJldHVybiBcInRleHQveC1zd2lmdFwiO1xuICAgIGlmIChleHQgPT09IFwiLmt0XCIpIHJldHVybiBcInRleHQveC1rb3RsaW5cIjtcbiAgICBpZiAoZXh0ID09PSBcIi5zY2FsYVwiKSByZXR1cm4gXCJ0ZXh0L3gtc2NhbGFcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5zaFwiKSByZXR1cm4gXCJ0ZXh0L3gtc2hlbGxzY3JpcHRcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5iYXRcIikgcmV0dXJuIFwidGV4dC94LW1zZG9zLWJhdGNoXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucHMxXCIpIHJldHVybiBcInRleHQveC1wb3dlcnNoZWxsXCI7XG5cbiAgICAvLyBBcmNoaXZlc1xuICAgIGlmIChleHQgPT09IFwiLnppcFwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi96aXBcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5yYXJcIikgcmV0dXJuIFwiYXBwbGljYXRpb24vdm5kLnJhclwiO1xuICAgIGlmIChleHQgPT09IFwiLnRhclwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi94LXRhclwiO1xuICAgIGlmIChleHQgPT09IFwiLmd6XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL2d6aXBcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5iejJcIikgcmV0dXJuIFwiYXBwbGljYXRpb24veC1iemlwMlwiO1xuICAgIGlmIChleHQgPT09IFwiLjd6XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZFwiO1xuICAgIGlmIChleHQgPT09IFwiLnh6XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3gteHpcIjtcblxuICAgIC8vIEZvbnRzXG4gICAgaWYgKGV4dCA9PT0gXCIudHRmXCIpIHJldHVybiBcImZvbnQvdHRmXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIub3RmXCIpIHJldHVybiBcImZvbnQvb3RmXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIud29mZlwiKSByZXR1cm4gXCJmb250L3dvZmZcIjtcbiAgICBpZiAoZXh0ID09PSBcIi53b2ZmMlwiKSByZXR1cm4gXCJmb250L3dvZmYyXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuZW90XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0XCI7XG5cbiAgICAvLyBPdGhlciBjb21tb24gZm9ybWF0c1xuICAgIGlmIChleHQgPT09IFwiLmVwdWJcIikgcmV0dXJuIFwiYXBwbGljYXRpb24vZXB1Yit6aXBcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5tb2JpXCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtbW9iaXBvY2tldC1lYm9va1wiO1xuICAgIGlmIChleHQgPT09IFwiLmFwa1wiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi92bmQuYW5kcm9pZC5wYWNrYWdlLWFyY2hpdmVcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5kbWdcIikgcmV0dXJuIFwiYXBwbGljYXRpb24veC1hcHBsZS1kaXNraW1hZ2VcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5pc29cIikgcmV0dXJuIFwiYXBwbGljYXRpb24veC1pc285NjYwLWltYWdlXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuZXhlXCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtbXNkb3dubG9hZFwiO1xuICAgIGlmIChleHQgPT09IFwiLm1zaVwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi94LW1zaVwiO1xuICAgIGlmIChleHQgPT09IFwiLmRlYlwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi94LWRlYmlhbi1wYWNrYWdlXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucnBtXCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtcnBtXCI7XG5cbiAgICBjb25zb2xlLndhcm4oYFVua25vd24gZXh0ZW5zaW9uLCAke2V4dH1gKTtcbiAgICByZXR1cm4gXCJ0ZXh0L3BsYWluXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250ZW50VHlwZUZyb21CdWZmZXIoYnVmZmVyOiBCdWZmZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChidWZmZXIubGVuZ3RoIDwgNCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBidWZmZXIgc3RhcnRzIHdpdGggc3BlY2lmaWMgYnl0ZXNcbiAgICBjb25zdCBzdGFydHNXaXRoID0gKGJ5dGVzOiBudW1iZXJbXSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IGJ5dGVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoYnVmZmVyW2ldICE9PSBieXRlc1tpXSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgYnl0ZXMgYXQgc3BlY2lmaWMgb2Zmc2V0XG4gICAgY29uc3QgaGFzQXRPZmZzZXQgPSAob2Zmc2V0OiBudW1iZXIsIGJ5dGVzOiBudW1iZXJbXSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IG9mZnNldCArIGJ5dGVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoYnVmZmVyW29mZnNldCArIGldICE9PSBieXRlc1tpXSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICAvLyBJbWFnZXNcbiAgICBpZiAoc3RhcnRzV2l0aChbMHhGRiwgMHhEOCwgMHhGRl0pKSByZXR1cm4gXCJpbWFnZS9qcGVnXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4ODksIDB4NTAsIDB4NEUsIDB4NDcsIDB4MEQsIDB4MEEsIDB4MUEsIDB4MEFdKSkgcmV0dXJuIFwiaW1hZ2UvcG5nXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NDcsIDB4NDksIDB4NDYsIDB4MzhdKSkgcmV0dXJuIFwiaW1hZ2UvZ2lmXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NDIsIDB4NERdKSkgcmV0dXJuIFwiaW1hZ2UvYm1wXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NDksIDB4NDksIDB4MkEsIDB4MDBdKSB8fCBzdGFydHNXaXRoKFsweDRELCAweDRELCAweDAwLCAweDJBXSkpIHJldHVybiBcImltYWdlL3RpZmZcIjtcbiAgICBpZiAoc3RhcnRzV2l0aChbMHgwMCwgMHgwMCwgMHgwMSwgMHgwMF0pKSByZXR1cm4gXCJpbWFnZS94LWljb25cIjtcbiAgICBpZiAoYnVmZmVyLnRvU3RyaW5nKFwiYXNjaWlcIiwgMCwgNCkgPT09IFwiPHN2Z1wiIHx8IGJ1ZmZlci50b1N0cmluZyhcImFzY2lpXCIsIDAsIDUpID09PSBcIjw/eG1sXCIpIHtcbiAgICAgICAgaWYgKGJ1ZmZlci50b1N0cmluZyhcInV0ZjhcIikuaW5jbHVkZXMoXCI8c3ZnXCIpKSByZXR1cm4gXCJpbWFnZS9zdmcreG1sXCI7XG4gICAgfVxuXG4gICAgLy8gV2ViUCBhbmQgbW9kZXJuIGltYWdlIGZvcm1hdHNcbiAgICBpZiAoc3RhcnRzV2l0aChbMHg1MiwgMHg0OSwgMHg0NiwgMHg0Nl0pICYmIGhhc0F0T2Zmc2V0KDgsIFsweDU3LCAweDQ1LCAweDQyLCAweDUwXSkpIHJldHVybiBcImltYWdlL3dlYnBcIjtcbiAgICBpZiAoaGFzQXRPZmZzZXQoNCwgWzB4NjYsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjEsIDB4NzYsIDB4NjksIDB4NjZdKSkgcmV0dXJuIFwiaW1hZ2UvYXZpZlwiO1xuICAgIGlmIChoYXNBdE9mZnNldCg0LCBbMHg2NiwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2OCwgMHg2NSwgMHg2OSwgMHg2M10pKSByZXR1cm4gXCJpbWFnZS9oZWljXCI7XG4gICAgaWYgKGhhc0F0T2Zmc2V0KDQsIFsweDY2LCAweDc0LCAweDc5LCAweDcwLCAweDZELCAweDY5LCAweDY2LCAweDMxXSkpIHJldHVybiBcImltYWdlL2hlaWZcIjtcblxuICAgIC8vIEF1ZGlvXG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4RkYsIDB4RkJdKSB8fCBzdGFydHNXaXRoKFsweEZGLCAweEYzXSkgfHwgc3RhcnRzV2l0aChbMHhGRiwgMHhGMl0pKSByZXR1cm4gXCJhdWRpby9tcGVnXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NDksIDB4NDQsIDB4MzNdKSkgcmV0dXJuIFwiYXVkaW8vbXBlZ1wiOyAvLyBNUDMgd2l0aCBJRDNcbiAgICBpZiAoc3RhcnRzV2l0aChbMHg1MiwgMHg0OSwgMHg0NiwgMHg0Nl0pICYmIGhhc0F0T2Zmc2V0KDgsIFsweDU3LCAweDQxLCAweDU2LCAweDQ1XSkpIHJldHVybiBcImF1ZGlvL3dhdlwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDRGLCAweDY3LCAweDY3LCAweDUzXSkpIHJldHVybiBcImF1ZGlvL29nZ1wiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDY2LCAweDRDLCAweDYxLCAweDQzXSkpIHJldHVybiBcImF1ZGlvL2ZsYWNcIjtcbiAgICBpZiAoaGFzQXRPZmZzZXQoNCwgWzB4NjYsIDB4NzQsIDB4NzksIDB4NzAsIDB4NEQsIDB4MzQsIDB4NDFdKSkgcmV0dXJuIFwiYXVkaW8vbXA0XCI7XG5cbiAgICAvLyBWaWRlb1xuICAgIGlmIChoYXNBdE9mZnNldCg0LCBbMHg2NiwgMHg3NCwgMHg3OSwgMHg3MF0pKSB7XG4gICAgICAgIGNvbnN0IGZ0eXAgPSBidWZmZXIudG9TdHJpbmcoXCJhc2NpaVwiLCA4LCAxMik7XG4gICAgICAgIGlmIChmdHlwLnN0YXJ0c1dpdGgoXCJtcDRcIikgfHwgZnR5cC5zdGFydHNXaXRoKFwiaXNvbVwiKSB8fCBmdHlwLnN0YXJ0c1dpdGgoXCJNNFZcIikpIHJldHVybiBcInZpZGVvL21wNFwiO1xuICAgICAgICBpZiAoZnR5cC5zdGFydHNXaXRoKFwicXRcIikpIHJldHVybiBcInZpZGVvL3F1aWNrdGltZVwiO1xuICAgIH1cbiAgICBpZiAoc3RhcnRzV2l0aChbMHgxQSwgMHg0NSwgMHhERiwgMHhBM10pKSByZXR1cm4gXCJ2aWRlby93ZWJtXCI7IC8vIEFsc28gbWt2XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4MzAsIDB4MjYsIDB4QjIsIDB4NzUsIDB4OEUsIDB4NjYsIDB4Q0YsIDB4MTFdKSkgcmV0dXJuIFwidmlkZW8veC1tcy13bXZcIjtcbiAgICBpZiAoc3RhcnRzV2l0aChbMHg0NiwgMHg0QywgMHg1NiwgMHgwMV0pKSByZXR1cm4gXCJ2aWRlby94LWZsdlwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDUyLCAweDQ5LCAweDQ2LCAweDQ2XSkgJiYgaGFzQXRPZmZzZXQoOCwgWzB4NDEsIDB4NTYsIDB4NDksIDB4MjBdKSkgcmV0dXJuIFwidmlkZW8veC1tc3ZpZGVvXCI7XG5cbiAgICAvLyBEb2N1bWVudHNcbiAgICBpZiAoc3RhcnRzV2l0aChbMHgyNSwgMHg1MCwgMHg0NCwgMHg0Nl0pKSByZXR1cm4gXCJhcHBsaWNhdGlvbi9wZGZcIjtcbiAgICBpZiAoc3RhcnRzV2l0aChbMHg1MCwgMHg0QiwgMHgwMywgMHgwNF0pIHx8IHN0YXJ0c1dpdGgoWzB4NTAsIDB4NEIsIDB4MDUsIDB4MDZdKSB8fCBzdGFydHNXaXRoKFsweDUwLCAweDRCLCAweDA3LCAweDA4XSkpIHtcbiAgICAgICAgLy8gWklQLWJhc2VkIGZvcm1hdHMgLSBuZWVkIHRvIGNoZWNrIGludGVybmFsIHN0cnVjdHVyZVxuICAgICAgICBjb25zdCBjb250ZW50ID0gYnVmZmVyLnRvU3RyaW5nKFwiYXNjaWlcIiwgMzAsIDEwMCk7XG4gICAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKFwid29yZC9cIikpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50XCI7XG4gICAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKFwieGwvXCIpKSByZXR1cm4gXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldFwiO1xuICAgICAgICBpZiAoY29udGVudC5pbmNsdWRlcyhcInBwdC9cIikpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb25cIjtcbiAgICAgICAgaWYgKGNvbnRlbnQuaW5jbHVkZXMoXCJNRVRBLUlORi9cIikpIHtcbiAgICAgICAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKFwiY29udGVudC54bWxcIikpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dFwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcImFwcGxpY2F0aW9uL3ppcFwiO1xuICAgIH1cbiAgICBpZiAoc3RhcnRzV2l0aChbMHhEMCwgMHhDRiwgMHgxMSwgMHhFMCwgMHhBMSwgMHhCMSwgMHgxQSwgMHhFMV0pKSB7XG4gICAgICAgIC8vIE1pY3Jvc29mdCBPZmZpY2UgbGVnYWN5IGZvcm1hdHNcbiAgICAgICAgcmV0dXJuIFwiYXBwbGljYXRpb24vbXN3b3JkXCI7IC8vIENvdWxkIGFsc28gYmUgRXhjZWwgb3IgUG93ZXJQb2ludFxuICAgIH1cbiAgICBpZiAoc3RhcnRzV2l0aChbMHg3QiwgMHg1QywgMHg3MiwgMHg3NCwgMHg2Nl0pKSByZXR1cm4gXCJhcHBsaWNhdGlvbi9ydGZcIjtcblxuICAgIC8vIEFyY2hpdmVzXG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NTIsIDB4NjEsIDB4NzIsIDB4MjEsIDB4MUEsIDB4MDddKSkgcmV0dXJuIFwiYXBwbGljYXRpb24vdm5kLnJhclwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDM3LCAweDdBLCAweEJDLCAweEFGLCAweDI3LCAweDFDXSkpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZFwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDFGLCAweDhCXSkpIHJldHVybiBcImFwcGxpY2F0aW9uL2d6aXBcIjtcbiAgICBpZiAoc3RhcnRzV2l0aChbMHg0MiwgMHg1QSwgMHg2OF0pKSByZXR1cm4gXCJhcHBsaWNhdGlvbi94LWJ6aXAyXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4RkQsIDB4MzcsIDB4N0EsIDB4NTgsIDB4NUEsIDB4MDBdKSkgcmV0dXJuIFwiYXBwbGljYXRpb24veC14elwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDc1LCAweDczLCAweDc0LCAweDYxLCAweDcyXSkpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtdGFyXCI7XG5cbiAgICAvLyBFeGVjdXRhYmxlc1xuICAgIGlmIChzdGFydHNXaXRoKFsweDRELCAweDVBXSkpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtbXNkb3dubG9hZFwiOyAvLyBXaW5kb3dzIFBFXG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4N0YsIDB4NDUsIDB4NEMsIDB4NDZdKSkgcmV0dXJuIFwiYXBwbGljYXRpb24veC1leGVjdXRhYmxlXCI7IC8vIExpbnV4IEVMRlxuICAgIGlmIChzdGFydHNXaXRoKFsweENBLCAweEZFLCAweEJBLCAweEJFXSkgfHwgc3RhcnRzV2l0aChbMHhGRSwgMHhFRCwgMHhGQSwgMHhDRV0pKSByZXR1cm4gXCJhcHBsaWNhdGlvbi94LW1hY2gtYmluYXJ5XCI7IC8vIG1hY09TIGJpbmFyeVxuICAgIGlmIChzdGFydHNXaXRoKFsweDUwLCAweDRCLCAweDAzLCAweDA0XSkgJiYgYnVmZmVyLnRvU3RyaW5nKFwiYXNjaWlcIiwgMzAsIDUwKS5pbmNsdWRlcyhcIkFuZHJvaWRNYW5pZmVzdC54bWxcIikpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5hbmRyb2lkLnBhY2thZ2UtYXJjaGl2ZVwiO1xuXG4gICAgLy8gRm9udHNcbiAgICBpZiAoc3RhcnRzV2l0aChbMHgwMCwgMHgwMSwgMHgwMCwgMHgwMF0pKSByZXR1cm4gXCJmb250L3R0ZlwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDRGLCAweDU0LCAweDU0LCAweDRGXSkpIHJldHVybiBcImZvbnQvb3RmXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NzcsIDB4NEYsIDB4NDYsIDB4NDZdKSkgcmV0dXJuIFwiZm9udC93b2ZmXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NzcsIDB4NEYsIDB4NDYsIDB4MzJdKSkgcmV0dXJuIFwiZm9udC93b2ZmMlwiO1xuXG4gICAgLy8gV2ViIGZpbGVzICh0ZXh0LWJhc2VkLCBjaGVjayBmb3IgY29tbW9uIHBhdHRlcm5zKVxuICAgIGNvbnN0IHRleHRTdGFydCA9IGJ1ZmZlci50b1N0cmluZyhcInV0ZjhcIiwgMCwgTWF0aC5taW4oMTAwLCBidWZmZXIubGVuZ3RoKSkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodGV4dFN0YXJ0LmluY2x1ZGVzKFwiPCFkb2N0eXBlIGh0bWxcIikgfHwgdGV4dFN0YXJ0LmluY2x1ZGVzKFwiPGh0bWxcIikpIHJldHVybiBcInRleHQvaHRtbFwiO1xuICAgIGlmICh0ZXh0U3RhcnQuaW5jbHVkZXMoXCI8P3htbFwiKSkgcmV0dXJuIFwiYXBwbGljYXRpb24veG1sXCI7XG4gICAgaWYgKHRleHRTdGFydC5zdGFydHNXaXRoKFwie1wiKSB8fCB0ZXh0U3RhcnQuc3RhcnRzV2l0aChcIltcIikpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIEpTT04ucGFyc2UoYnVmZmVyLnRvU3RyaW5nKFwidXRmOFwiKSk7XG4gICAgICAgICAgICByZXR1cm4gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gTm90IEpTT05cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE90aGVyIGZvcm1hdHNcbiAgICBpZiAoc3RhcnRzV2l0aChbMHgyNSwgMHgyMSwgMHg1MCwgMHg1M10pKSByZXR1cm4gXCJhcHBsaWNhdGlvbi9wb3N0c2NyaXB0XCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4MzgsIDB4NDIsIDB4NTAsIDB4NTNdKSkgcmV0dXJuIFwiaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hvcFwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDQ5LCAweDQ5LCAweDJBLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDUyXSkpIHJldHVybiBcImltYWdlL3gtY2Fub24tY3IyXCI7XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufSJdfQ==
368
- /* _JS_SOURCE_HASH = "66e32b7cef5067e77b95f00bec4f25914748cecfc4aa12ab1b4651458459871f"; */