tnp-core 13.2.16 → 13.2.17
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/README.md +20 -20
- package/assets/shared/shared_folder_info.txt +1 -1
- package/browser/README.md +24 -24
- package/browser/esm2020/lib/core-config.mjs +6 -6
- package/browser/esm2020/lib/core-imports.mjs +68 -68
- package/browser/esm2020/lib/core-models.mjs +3 -3
- package/browser/esm2020/lib/framework-name.mjs +9 -9
- package/browser/esm2020/lib/helpers-isomorphic.mjs +35 -35
- package/browser/esm2020/lib/helpers-messages.mjs +493 -493
- package/browser/esm2020/lib/helpers.mjs +1185 -1180
- package/browser/esm2020/lib/index.mjs +10 -10
- package/browser/esm2020/lib/node-path-mock.mjs +414 -414
- package/browser/esm2020/lib/progress-data.mjs +51 -51
- package/browser/esm2020/public-api.mjs +1 -1
- package/browser/esm2020/tnp-core.mjs +4 -4
- package/browser/fesm2015/tnp-core.mjs +2198 -2195
- package/browser/fesm2015/tnp-core.mjs.map +1 -1
- package/browser/fesm2020/tnp-core.mjs +2196 -2193
- package/browser/fesm2020/tnp-core.mjs.map +1 -1
- package/browser/lib/core-config.d.ts +4 -4
- package/browser/lib/core-imports.d.ts +7 -7
- package/browser/lib/core-models.d.ts +41 -41
- package/browser/lib/framework-name.d.ts +1 -1
- package/browser/lib/helpers-isomorphic.d.ts +5 -5
- package/browser/lib/helpers-messages.d.ts +16 -16
- package/browser/lib/helpers.d.ts +50 -49
- package/browser/lib/index.d.ts +7 -7
- package/browser/lib/node-path-mock.d.ts +24 -24
- package/browser/lib/progress-data.d.ts +17 -17
- package/browser/tnp-core.d.ts +4 -4
- package/cli.backend.js +3 -3
- package/client/README.md +24 -24
- package/client/esm2020/lib/core-config.mjs +6 -6
- package/client/esm2020/lib/core-imports.mjs +68 -68
- package/client/esm2020/lib/core-models.mjs +3 -3
- package/client/esm2020/lib/framework-name.mjs +9 -9
- package/client/esm2020/lib/helpers-isomorphic.mjs +35 -35
- package/client/esm2020/lib/helpers-messages.mjs +493 -493
- package/client/esm2020/lib/helpers.mjs +1185 -1180
- package/client/esm2020/lib/index.mjs +10 -10
- package/client/esm2020/lib/node-path-mock.mjs +414 -414
- package/client/esm2020/lib/progress-data.mjs +51 -51
- package/client/esm2020/public-api.mjs +1 -1
- package/client/esm2020/tnp-core.mjs +4 -4
- package/client/fesm2015/tnp-core.mjs +2198 -2195
- package/client/fesm2015/tnp-core.mjs.map +1 -1
- package/client/fesm2020/tnp-core.mjs +2196 -2193
- package/client/fesm2020/tnp-core.mjs.map +1 -1
- package/client/lib/core-config.d.ts +4 -4
- package/client/lib/core-imports.d.ts +7 -7
- package/client/lib/core-models.d.ts +41 -41
- package/client/lib/framework-name.d.ts +1 -1
- package/client/lib/helpers-isomorphic.d.ts +5 -5
- package/client/lib/helpers-messages.d.ts +16 -16
- package/client/lib/helpers.d.ts +50 -49
- package/client/lib/index.d.ts +7 -7
- package/client/lib/node-path-mock.d.ts +24 -24
- package/client/lib/progress-data.d.ts +17 -17
- package/client/package.json +16 -21
- package/client/tnp-core.d.ts +4 -4
- package/index.d.ts +1 -1
- package/lib/core-config.d.ts +5 -5
- package/lib/core-imports.d.ts +30 -30
- package/lib/core-models.d.ts +42 -42
- package/lib/framework-name.d.ts +2 -2
- package/lib/helpers-isomorphic.d.ts +6 -6
- package/lib/helpers-messages.d.ts +33 -33
- package/lib/helpers.d.ts +129 -128
- package/lib/helpers.js +7 -0
- package/lib/helpers.js.map +1 -1
- package/lib/index.d.ts +8 -8
- package/lib/node-path-mock.d.ts +24 -24
- package/lib/node-path-mock.js +3 -3
- package/lib/progress-data.d.ts +18 -18
- package/lib/public-api.d.ts +7 -7
- package/package.json +2 -2
- package/package.json_devDependencies.json +202 -202
- package/package.json_tnp.json5 +65 -65
- package/tmp-environment.json +19 -24
- package/websql/README.md +24 -24
- package/websql/esm2020/lib/core-config.mjs +6 -6
- package/websql/esm2020/lib/core-imports.mjs +68 -68
- package/websql/esm2020/lib/core-models.mjs +3 -3
- package/websql/esm2020/lib/framework-name.mjs +9 -9
- package/websql/esm2020/lib/helpers-isomorphic.mjs +34 -34
- package/websql/esm2020/lib/helpers-messages.mjs +493 -493
- package/websql/esm2020/lib/helpers.mjs +1183 -1178
- package/websql/esm2020/lib/index.mjs +10 -10
- package/websql/esm2020/lib/node-path-mock.mjs +414 -414
- package/websql/esm2020/lib/progress-data.mjs +51 -51
- package/websql/esm2020/public-api.mjs +1 -1
- package/websql/esm2020/tnp-core.mjs +4 -4
- package/websql/fesm2015/tnp-core.mjs +2195 -2192
- package/websql/fesm2015/tnp-core.mjs.map +1 -1
- package/websql/fesm2020/tnp-core.mjs +2193 -2190
- package/websql/fesm2020/tnp-core.mjs.map +1 -1
- package/websql/lib/core-config.d.ts +4 -4
- package/websql/lib/core-imports.d.ts +7 -7
- package/websql/lib/core-models.d.ts +41 -41
- package/websql/lib/framework-name.d.ts +1 -1
- package/websql/lib/helpers-isomorphic.d.ts +5 -5
- package/websql/lib/helpers-messages.d.ts +16 -16
- package/websql/lib/helpers.d.ts +50 -49
- package/websql/lib/index.d.ts +7 -7
- package/websql/lib/node-path-mock.d.ts +24 -24
- package/websql/lib/progress-data.d.ts +17 -17
- package/websql/tnp-core.d.ts +4 -4
@@ -1,415 +1,415 @@
|
|
1
|
-
function assertPath(path) {
|
2
|
-
if (typeof path !== 'string') {
|
3
|
-
throw new TypeError('[firedev-core] Path must be a string. Received ' + JSON.stringify(path));
|
4
|
-
}
|
5
|
-
}
|
6
|
-
function normalizeStringPosix(path, allowAboveRoot) {
|
7
|
-
var res = '';
|
8
|
-
var lastSegmentLength = 0;
|
9
|
-
var lastSlash = -1;
|
10
|
-
var dots = 0;
|
11
|
-
var code;
|
12
|
-
for (var i = 0; i <= path.length; ++i) {
|
13
|
-
if (i < path.length)
|
14
|
-
code = path.charCodeAt(i);
|
15
|
-
else if (code === 47 /*/*/)
|
16
|
-
break;
|
17
|
-
else
|
18
|
-
code = 47 /*/*/;
|
19
|
-
if (code === 47 /*/*/) {
|
20
|
-
if (lastSlash === i - 1 || dots === 1) {
|
21
|
-
}
|
22
|
-
else if (lastSlash !== i - 1 && dots === 2) {
|
23
|
-
if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {
|
24
|
-
if (res.length > 2) {
|
25
|
-
var lastSlashIndex = res.lastIndexOf('/');
|
26
|
-
if (lastSlashIndex !== res.length - 1) {
|
27
|
-
if (lastSlashIndex === -1) {
|
28
|
-
res = '';
|
29
|
-
lastSegmentLength = 0;
|
30
|
-
}
|
31
|
-
else {
|
32
|
-
res = res.slice(0, lastSlashIndex);
|
33
|
-
lastSegmentLength = res.length - 1 - res.lastIndexOf('/');
|
34
|
-
}
|
35
|
-
lastSlash = i;
|
36
|
-
dots = 0;
|
37
|
-
continue;
|
38
|
-
}
|
39
|
-
}
|
40
|
-
else if (res.length === 2 || res.length === 1) {
|
41
|
-
res = '';
|
42
|
-
lastSegmentLength = 0;
|
43
|
-
lastSlash = i;
|
44
|
-
dots = 0;
|
45
|
-
continue;
|
46
|
-
}
|
47
|
-
}
|
48
|
-
if (allowAboveRoot) {
|
49
|
-
if (res.length > 0)
|
50
|
-
res += '/..';
|
51
|
-
else
|
52
|
-
res = '..';
|
53
|
-
lastSegmentLength = 2;
|
54
|
-
}
|
55
|
-
}
|
56
|
-
else {
|
57
|
-
if (res.length > 0)
|
58
|
-
res += '/' + path.slice(lastSlash + 1, i);
|
59
|
-
else
|
60
|
-
res = path.slice(lastSlash + 1, i);
|
61
|
-
lastSegmentLength = i - lastSlash - 1;
|
62
|
-
}
|
63
|
-
lastSlash = i;
|
64
|
-
dots = 0;
|
65
|
-
}
|
66
|
-
else if (code === 46 /*.*/ && dots !== -1) {
|
67
|
-
++dots;
|
68
|
-
}
|
69
|
-
else {
|
70
|
-
dots = -1;
|
71
|
-
}
|
72
|
-
}
|
73
|
-
return res;
|
74
|
-
}
|
75
|
-
function _format(sep, pathObject) {
|
76
|
-
var dir = pathObject.dir || pathObject.root;
|
77
|
-
var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');
|
78
|
-
if (!dir) {
|
79
|
-
return base;
|
80
|
-
}
|
81
|
-
if (dir === pathObject.root) {
|
82
|
-
return dir + base;
|
83
|
-
}
|
84
|
-
return dir + sep + base;
|
85
|
-
}
|
86
|
-
export const path = {
|
87
|
-
resolve: function resolve(pathToResovle) {
|
88
|
-
return pathToResovle;
|
89
|
-
},
|
90
|
-
normalize: function normalize(pathArg) {
|
91
|
-
assertPath(pathArg);
|
92
|
-
if (pathArg.length === 0)
|
93
|
-
return '.';
|
94
|
-
var isAbsolute = pathArg.charCodeAt(0) === 47 /*/*/;
|
95
|
-
var trailingSeparator = pathArg.charCodeAt(pathArg.length - 1) === 47 /*/*/;
|
96
|
-
pathArg = normalizeStringPosix(pathArg, !isAbsolute);
|
97
|
-
if (pathArg.length === 0 && !isAbsolute)
|
98
|
-
pathArg = '.';
|
99
|
-
if (pathArg.length > 0 && trailingSeparator)
|
100
|
-
pathArg += '/';
|
101
|
-
if (isAbsolute)
|
102
|
-
return '/' + pathArg;
|
103
|
-
return pathArg;
|
104
|
-
},
|
105
|
-
isAbsolute: function isAbsolute(pathArg) {
|
106
|
-
assertPath(pathArg);
|
107
|
-
return pathArg.length > 0 && pathArg.charCodeAt(0) === 47 /*/*/;
|
108
|
-
},
|
109
|
-
join: function join() {
|
110
|
-
if (arguments.length === 0)
|
111
|
-
return '.';
|
112
|
-
var joined;
|
113
|
-
for (var i = 0; i < arguments.length; ++i) {
|
114
|
-
var arg = arguments[i];
|
115
|
-
assertPath(arg);
|
116
|
-
if (arg.length > 0) {
|
117
|
-
if (joined === undefined)
|
118
|
-
joined = arg;
|
119
|
-
else
|
120
|
-
joined += '/' + arg;
|
121
|
-
}
|
122
|
-
}
|
123
|
-
if (joined === undefined)
|
124
|
-
return '.';
|
125
|
-
return path.normalize(joined);
|
126
|
-
},
|
127
|
-
relative: function relative(from, to) {
|
128
|
-
assertPath(from);
|
129
|
-
assertPath(to);
|
130
|
-
if (from === to)
|
131
|
-
return '';
|
132
|
-
from = path.resolve(from);
|
133
|
-
to = path.resolve(to);
|
134
|
-
if (from === to)
|
135
|
-
return '';
|
136
|
-
var fromStart = 1;
|
137
|
-
for (; fromStart < from.length; ++fromStart) {
|
138
|
-
if (from.charCodeAt(fromStart) !== 47 /*/*/)
|
139
|
-
break;
|
140
|
-
}
|
141
|
-
var fromEnd = from.length;
|
142
|
-
var fromLen = fromEnd - fromStart;
|
143
|
-
var toStart = 1;
|
144
|
-
for (; toStart < to.length; ++toStart) {
|
145
|
-
if (to.charCodeAt(toStart) !== 47 /*/*/)
|
146
|
-
break;
|
147
|
-
}
|
148
|
-
var toEnd = to.length;
|
149
|
-
var toLen = toEnd - toStart;
|
150
|
-
var length = fromLen < toLen ? fromLen : toLen;
|
151
|
-
var lastCommonSep = -1;
|
152
|
-
var i = 0;
|
153
|
-
for (; i <= length; ++i) {
|
154
|
-
if (i === length) {
|
155
|
-
if (toLen > length) {
|
156
|
-
if (to.charCodeAt(toStart + i) === 47 /*/*/) {
|
157
|
-
return to.slice(toStart + i + 1);
|
158
|
-
}
|
159
|
-
else if (i === 0) {
|
160
|
-
return to.slice(toStart + i);
|
161
|
-
}
|
162
|
-
}
|
163
|
-
else if (fromLen > length) {
|
164
|
-
if (from.charCodeAt(fromStart + i) === 47 /*/*/) {
|
165
|
-
lastCommonSep = i;
|
166
|
-
}
|
167
|
-
else if (i === 0) {
|
168
|
-
lastCommonSep = 0;
|
169
|
-
}
|
170
|
-
}
|
171
|
-
break;
|
172
|
-
}
|
173
|
-
var fromCode = from.charCodeAt(fromStart + i);
|
174
|
-
var toCode = to.charCodeAt(toStart + i);
|
175
|
-
if (fromCode !== toCode)
|
176
|
-
break;
|
177
|
-
else if (fromCode === 47 /*/*/)
|
178
|
-
lastCommonSep = i;
|
179
|
-
}
|
180
|
-
var out = '';
|
181
|
-
for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {
|
182
|
-
if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {
|
183
|
-
if (out.length === 0)
|
184
|
-
out += '..';
|
185
|
-
else
|
186
|
-
out += '/..';
|
187
|
-
}
|
188
|
-
}
|
189
|
-
if (out.length > 0)
|
190
|
-
return out + to.slice(toStart + lastCommonSep);
|
191
|
-
else {
|
192
|
-
toStart += lastCommonSep;
|
193
|
-
if (to.charCodeAt(toStart) === 47 /*/*/)
|
194
|
-
++toStart;
|
195
|
-
return to.slice(toStart);
|
196
|
-
}
|
197
|
-
},
|
198
|
-
_makeLong: function _makeLong(path) {
|
199
|
-
return path;
|
200
|
-
},
|
201
|
-
dirname: function dirname(path) {
|
202
|
-
assertPath(path);
|
203
|
-
if (path.length === 0)
|
204
|
-
return '.';
|
205
|
-
var code = path.charCodeAt(0);
|
206
|
-
var hasRoot = code === 47 /*/*/;
|
207
|
-
var end = -1;
|
208
|
-
var matchedSlash = true;
|
209
|
-
for (var i = path.length - 1; i >= 1; --i) {
|
210
|
-
code = path.charCodeAt(i);
|
211
|
-
if (code === 47 /*/*/) {
|
212
|
-
if (!matchedSlash) {
|
213
|
-
end = i;
|
214
|
-
break;
|
215
|
-
}
|
216
|
-
}
|
217
|
-
else {
|
218
|
-
matchedSlash = false;
|
219
|
-
}
|
220
|
-
}
|
221
|
-
if (end === -1)
|
222
|
-
return hasRoot ? '/' : '.';
|
223
|
-
if (hasRoot && end === 1)
|
224
|
-
return '//';
|
225
|
-
return path.slice(0, end);
|
226
|
-
},
|
227
|
-
basename: function basename(pathArg, ext) {
|
228
|
-
if (ext !== undefined && typeof ext !== 'string')
|
229
|
-
throw new TypeError('"ext" argument must be a string');
|
230
|
-
assertPath(pathArg);
|
231
|
-
var start = 0;
|
232
|
-
var end = -1;
|
233
|
-
var matchedSlash = true;
|
234
|
-
var i;
|
235
|
-
if (ext !== undefined && ext.length > 0 && ext.length <= pathArg.length) {
|
236
|
-
if (ext.length === pathArg.length && ext === pathArg)
|
237
|
-
return '';
|
238
|
-
var extIdx = ext.length - 1;
|
239
|
-
var firstNonSlashEnd = -1;
|
240
|
-
for (i = pathArg.length - 1; i >= 0; --i) {
|
241
|
-
var code = pathArg.charCodeAt(i);
|
242
|
-
if (code === 47 /*/*/) {
|
243
|
-
if (!matchedSlash) {
|
244
|
-
start = i + 1;
|
245
|
-
break;
|
246
|
-
}
|
247
|
-
}
|
248
|
-
else {
|
249
|
-
if (firstNonSlashEnd === -1) {
|
250
|
-
matchedSlash = false;
|
251
|
-
firstNonSlashEnd = i + 1;
|
252
|
-
}
|
253
|
-
if (extIdx >= 0) {
|
254
|
-
if (code === ext.charCodeAt(extIdx)) {
|
255
|
-
if (--extIdx === -1) {
|
256
|
-
end = i;
|
257
|
-
}
|
258
|
-
}
|
259
|
-
else {
|
260
|
-
extIdx = -1;
|
261
|
-
end = firstNonSlashEnd;
|
262
|
-
}
|
263
|
-
}
|
264
|
-
}
|
265
|
-
}
|
266
|
-
if (start === end)
|
267
|
-
end = firstNonSlashEnd;
|
268
|
-
else if (end === -1)
|
269
|
-
end = pathArg.length;
|
270
|
-
return pathArg.slice(start, end);
|
271
|
-
}
|
272
|
-
else {
|
273
|
-
for (i = pathArg.length - 1; i >= 0; --i) {
|
274
|
-
if (pathArg.charCodeAt(i) === 47 /*/*/) {
|
275
|
-
if (!matchedSlash) {
|
276
|
-
start = i + 1;
|
277
|
-
break;
|
278
|
-
}
|
279
|
-
}
|
280
|
-
else if (end === -1) {
|
281
|
-
matchedSlash = false;
|
282
|
-
end = i + 1;
|
283
|
-
}
|
284
|
-
}
|
285
|
-
if (end === -1)
|
286
|
-
return '';
|
287
|
-
return pathArg.slice(start, end);
|
288
|
-
}
|
289
|
-
},
|
290
|
-
extname: function extname(pathArg) {
|
291
|
-
assertPath(pathArg);
|
292
|
-
var startDot = -1;
|
293
|
-
var startPart = 0;
|
294
|
-
var end = -1;
|
295
|
-
var matchedSlash = true;
|
296
|
-
var preDotState = 0;
|
297
|
-
for (var i = pathArg.length - 1; i >= 0; --i) {
|
298
|
-
var code = pathArg.charCodeAt(i);
|
299
|
-
if (code === 47 /*/*/) {
|
300
|
-
if (!matchedSlash) {
|
301
|
-
startPart = i + 1;
|
302
|
-
break;
|
303
|
-
}
|
304
|
-
continue;
|
305
|
-
}
|
306
|
-
if (end === -1) {
|
307
|
-
matchedSlash = false;
|
308
|
-
end = i + 1;
|
309
|
-
}
|
310
|
-
if (code === 46 /*.*/) {
|
311
|
-
if (startDot === -1)
|
312
|
-
startDot = i;
|
313
|
-
else if (preDotState !== 1)
|
314
|
-
preDotState = 1;
|
315
|
-
}
|
316
|
-
else if (startDot !== -1) {
|
317
|
-
preDotState = -1;
|
318
|
-
}
|
319
|
-
}
|
320
|
-
if (startDot === -1 || end === -1 ||
|
321
|
-
preDotState === 0 ||
|
322
|
-
preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
|
323
|
-
return '';
|
324
|
-
}
|
325
|
-
return pathArg.slice(startDot, end);
|
326
|
-
},
|
327
|
-
format: function format(pathObject) {
|
328
|
-
if (pathObject === null || typeof pathObject !== 'object') {
|
329
|
-
throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof pathObject);
|
330
|
-
}
|
331
|
-
return _format('/', pathObject);
|
332
|
-
},
|
333
|
-
parse: function parse(pathArg) {
|
334
|
-
assertPath(pathArg);
|
335
|
-
var ret = { root: '', dir: '', base: '', ext: '', name: '' };
|
336
|
-
if (pathArg.length === 0)
|
337
|
-
return ret;
|
338
|
-
var code = pathArg.charCodeAt(0);
|
339
|
-
var isAbsolute = code === 47 /*/*/;
|
340
|
-
var start;
|
341
|
-
if (isAbsolute) {
|
342
|
-
ret.root = '/';
|
343
|
-
start = 1;
|
344
|
-
}
|
345
|
-
else {
|
346
|
-
start = 0;
|
347
|
-
}
|
348
|
-
var startDot = -1;
|
349
|
-
var startPart = 0;
|
350
|
-
var end = -1;
|
351
|
-
var matchedSlash = true;
|
352
|
-
var i = pathArg.length - 1;
|
353
|
-
var preDotState = 0;
|
354
|
-
for (; i >= start; --i) {
|
355
|
-
code = pathArg.charCodeAt(i);
|
356
|
-
if (code === 47 /*/*/) {
|
357
|
-
if (!matchedSlash) {
|
358
|
-
startPart = i + 1;
|
359
|
-
break;
|
360
|
-
}
|
361
|
-
continue;
|
362
|
-
}
|
363
|
-
if (end === -1) {
|
364
|
-
matchedSlash = false;
|
365
|
-
end = i + 1;
|
366
|
-
}
|
367
|
-
if (code === 46 /*.*/) {
|
368
|
-
if (startDot === -1)
|
369
|
-
startDot = i;
|
370
|
-
else if (preDotState !== 1)
|
371
|
-
preDotState = 1;
|
372
|
-
}
|
373
|
-
else if (startDot !== -1) {
|
374
|
-
preDotState = -1;
|
375
|
-
}
|
376
|
-
}
|
377
|
-
if (startDot === -1 || end === -1 ||
|
378
|
-
preDotState === 0 ||
|
379
|
-
preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
|
380
|
-
if (end !== -1) {
|
381
|
-
if (startPart === 0 && isAbsolute)
|
382
|
-
ret.base = ret.name = pathArg.slice(1, end);
|
383
|
-
else
|
384
|
-
ret.base = ret.name = pathArg.slice(startPart, end);
|
385
|
-
}
|
386
|
-
}
|
387
|
-
else {
|
388
|
-
if (startPart === 0 && isAbsolute) {
|
389
|
-
ret.name = pathArg.slice(1, startDot);
|
390
|
-
ret.base = pathArg.slice(1, end);
|
391
|
-
}
|
392
|
-
else {
|
393
|
-
ret.name = pathArg.slice(startPart, startDot);
|
394
|
-
ret.base = pathArg.slice(startPart, end);
|
395
|
-
}
|
396
|
-
ret.ext = pathArg.slice(startDot, end);
|
397
|
-
}
|
398
|
-
if (startPart > 0)
|
399
|
-
ret.dir = pathArg.slice(0, startPart - 1);
|
400
|
-
else if (isAbsolute)
|
401
|
-
ret.dir = '/';
|
402
|
-
return ret;
|
403
|
-
},
|
404
|
-
sep: '/',
|
405
|
-
delimiter: ':',
|
406
|
-
win32: {
|
407
|
-
normalize: (p) => {
|
408
|
-
return p;
|
409
|
-
}
|
410
|
-
},
|
411
|
-
posix: null
|
412
|
-
};
|
413
|
-
;
|
414
|
-
({}); // @--end-of-file-for-module=tnp-core lib/node-path-mock.ts
|
1
|
+
function assertPath(path) {
|
2
|
+
if (typeof path !== 'string') {
|
3
|
+
throw new TypeError('[firedev-core] Path must be a string. Received ' + JSON.stringify(path));
|
4
|
+
}
|
5
|
+
}
|
6
|
+
function normalizeStringPosix(path, allowAboveRoot) {
|
7
|
+
var res = '';
|
8
|
+
var lastSegmentLength = 0;
|
9
|
+
var lastSlash = -1;
|
10
|
+
var dots = 0;
|
11
|
+
var code;
|
12
|
+
for (var i = 0; i <= path.length; ++i) {
|
13
|
+
if (i < path.length)
|
14
|
+
code = path.charCodeAt(i);
|
15
|
+
else if (code === 47 /*/*/)
|
16
|
+
break;
|
17
|
+
else
|
18
|
+
code = 47 /*/*/;
|
19
|
+
if (code === 47 /*/*/) {
|
20
|
+
if (lastSlash === i - 1 || dots === 1) {
|
21
|
+
}
|
22
|
+
else if (lastSlash !== i - 1 && dots === 2) {
|
23
|
+
if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {
|
24
|
+
if (res.length > 2) {
|
25
|
+
var lastSlashIndex = res.lastIndexOf('/');
|
26
|
+
if (lastSlashIndex !== res.length - 1) {
|
27
|
+
if (lastSlashIndex === -1) {
|
28
|
+
res = '';
|
29
|
+
lastSegmentLength = 0;
|
30
|
+
}
|
31
|
+
else {
|
32
|
+
res = res.slice(0, lastSlashIndex);
|
33
|
+
lastSegmentLength = res.length - 1 - res.lastIndexOf('/');
|
34
|
+
}
|
35
|
+
lastSlash = i;
|
36
|
+
dots = 0;
|
37
|
+
continue;
|
38
|
+
}
|
39
|
+
}
|
40
|
+
else if (res.length === 2 || res.length === 1) {
|
41
|
+
res = '';
|
42
|
+
lastSegmentLength = 0;
|
43
|
+
lastSlash = i;
|
44
|
+
dots = 0;
|
45
|
+
continue;
|
46
|
+
}
|
47
|
+
}
|
48
|
+
if (allowAboveRoot) {
|
49
|
+
if (res.length > 0)
|
50
|
+
res += '/..';
|
51
|
+
else
|
52
|
+
res = '..';
|
53
|
+
lastSegmentLength = 2;
|
54
|
+
}
|
55
|
+
}
|
56
|
+
else {
|
57
|
+
if (res.length > 0)
|
58
|
+
res += '/' + path.slice(lastSlash + 1, i);
|
59
|
+
else
|
60
|
+
res = path.slice(lastSlash + 1, i);
|
61
|
+
lastSegmentLength = i - lastSlash - 1;
|
62
|
+
}
|
63
|
+
lastSlash = i;
|
64
|
+
dots = 0;
|
65
|
+
}
|
66
|
+
else if (code === 46 /*.*/ && dots !== -1) {
|
67
|
+
++dots;
|
68
|
+
}
|
69
|
+
else {
|
70
|
+
dots = -1;
|
71
|
+
}
|
72
|
+
}
|
73
|
+
return res;
|
74
|
+
}
|
75
|
+
function _format(sep, pathObject) {
|
76
|
+
var dir = pathObject.dir || pathObject.root;
|
77
|
+
var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');
|
78
|
+
if (!dir) {
|
79
|
+
return base;
|
80
|
+
}
|
81
|
+
if (dir === pathObject.root) {
|
82
|
+
return dir + base;
|
83
|
+
}
|
84
|
+
return dir + sep + base;
|
85
|
+
}
|
86
|
+
export const path = {
|
87
|
+
resolve: function resolve(pathToResovle) {
|
88
|
+
return pathToResovle;
|
89
|
+
},
|
90
|
+
normalize: function normalize(pathArg) {
|
91
|
+
assertPath(pathArg);
|
92
|
+
if (pathArg.length === 0)
|
93
|
+
return '.';
|
94
|
+
var isAbsolute = pathArg.charCodeAt(0) === 47 /*/*/;
|
95
|
+
var trailingSeparator = pathArg.charCodeAt(pathArg.length - 1) === 47 /*/*/;
|
96
|
+
pathArg = normalizeStringPosix(pathArg, !isAbsolute);
|
97
|
+
if (pathArg.length === 0 && !isAbsolute)
|
98
|
+
pathArg = '.';
|
99
|
+
if (pathArg.length > 0 && trailingSeparator)
|
100
|
+
pathArg += '/';
|
101
|
+
if (isAbsolute)
|
102
|
+
return '/' + pathArg;
|
103
|
+
return pathArg;
|
104
|
+
},
|
105
|
+
isAbsolute: function isAbsolute(pathArg) {
|
106
|
+
assertPath(pathArg);
|
107
|
+
return pathArg.length > 0 && pathArg.charCodeAt(0) === 47 /*/*/;
|
108
|
+
},
|
109
|
+
join: function join() {
|
110
|
+
if (arguments.length === 0)
|
111
|
+
return '.';
|
112
|
+
var joined;
|
113
|
+
for (var i = 0; i < arguments.length; ++i) {
|
114
|
+
var arg = arguments[i];
|
115
|
+
assertPath(arg);
|
116
|
+
if (arg.length > 0) {
|
117
|
+
if (joined === undefined)
|
118
|
+
joined = arg;
|
119
|
+
else
|
120
|
+
joined += '/' + arg;
|
121
|
+
}
|
122
|
+
}
|
123
|
+
if (joined === undefined)
|
124
|
+
return '.';
|
125
|
+
return path.normalize(joined);
|
126
|
+
},
|
127
|
+
relative: function relative(from, to) {
|
128
|
+
assertPath(from);
|
129
|
+
assertPath(to);
|
130
|
+
if (from === to)
|
131
|
+
return '';
|
132
|
+
from = path.resolve(from);
|
133
|
+
to = path.resolve(to);
|
134
|
+
if (from === to)
|
135
|
+
return '';
|
136
|
+
var fromStart = 1;
|
137
|
+
for (; fromStart < from.length; ++fromStart) {
|
138
|
+
if (from.charCodeAt(fromStart) !== 47 /*/*/)
|
139
|
+
break;
|
140
|
+
}
|
141
|
+
var fromEnd = from.length;
|
142
|
+
var fromLen = fromEnd - fromStart;
|
143
|
+
var toStart = 1;
|
144
|
+
for (; toStart < to.length; ++toStart) {
|
145
|
+
if (to.charCodeAt(toStart) !== 47 /*/*/)
|
146
|
+
break;
|
147
|
+
}
|
148
|
+
var toEnd = to.length;
|
149
|
+
var toLen = toEnd - toStart;
|
150
|
+
var length = fromLen < toLen ? fromLen : toLen;
|
151
|
+
var lastCommonSep = -1;
|
152
|
+
var i = 0;
|
153
|
+
for (; i <= length; ++i) {
|
154
|
+
if (i === length) {
|
155
|
+
if (toLen > length) {
|
156
|
+
if (to.charCodeAt(toStart + i) === 47 /*/*/) {
|
157
|
+
return to.slice(toStart + i + 1);
|
158
|
+
}
|
159
|
+
else if (i === 0) {
|
160
|
+
return to.slice(toStart + i);
|
161
|
+
}
|
162
|
+
}
|
163
|
+
else if (fromLen > length) {
|
164
|
+
if (from.charCodeAt(fromStart + i) === 47 /*/*/) {
|
165
|
+
lastCommonSep = i;
|
166
|
+
}
|
167
|
+
else if (i === 0) {
|
168
|
+
lastCommonSep = 0;
|
169
|
+
}
|
170
|
+
}
|
171
|
+
break;
|
172
|
+
}
|
173
|
+
var fromCode = from.charCodeAt(fromStart + i);
|
174
|
+
var toCode = to.charCodeAt(toStart + i);
|
175
|
+
if (fromCode !== toCode)
|
176
|
+
break;
|
177
|
+
else if (fromCode === 47 /*/*/)
|
178
|
+
lastCommonSep = i;
|
179
|
+
}
|
180
|
+
var out = '';
|
181
|
+
for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {
|
182
|
+
if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {
|
183
|
+
if (out.length === 0)
|
184
|
+
out += '..';
|
185
|
+
else
|
186
|
+
out += '/..';
|
187
|
+
}
|
188
|
+
}
|
189
|
+
if (out.length > 0)
|
190
|
+
return out + to.slice(toStart + lastCommonSep);
|
191
|
+
else {
|
192
|
+
toStart += lastCommonSep;
|
193
|
+
if (to.charCodeAt(toStart) === 47 /*/*/)
|
194
|
+
++toStart;
|
195
|
+
return to.slice(toStart);
|
196
|
+
}
|
197
|
+
},
|
198
|
+
_makeLong: function _makeLong(path) {
|
199
|
+
return path;
|
200
|
+
},
|
201
|
+
dirname: function dirname(path) {
|
202
|
+
assertPath(path);
|
203
|
+
if (path.length === 0)
|
204
|
+
return '.';
|
205
|
+
var code = path.charCodeAt(0);
|
206
|
+
var hasRoot = code === 47 /*/*/;
|
207
|
+
var end = -1;
|
208
|
+
var matchedSlash = true;
|
209
|
+
for (var i = path.length - 1; i >= 1; --i) {
|
210
|
+
code = path.charCodeAt(i);
|
211
|
+
if (code === 47 /*/*/) {
|
212
|
+
if (!matchedSlash) {
|
213
|
+
end = i;
|
214
|
+
break;
|
215
|
+
}
|
216
|
+
}
|
217
|
+
else {
|
218
|
+
matchedSlash = false;
|
219
|
+
}
|
220
|
+
}
|
221
|
+
if (end === -1)
|
222
|
+
return hasRoot ? '/' : '.';
|
223
|
+
if (hasRoot && end === 1)
|
224
|
+
return '//';
|
225
|
+
return path.slice(0, end);
|
226
|
+
},
|
227
|
+
basename: function basename(pathArg, ext) {
|
228
|
+
if (ext !== undefined && typeof ext !== 'string')
|
229
|
+
throw new TypeError('"ext" argument must be a string');
|
230
|
+
assertPath(pathArg);
|
231
|
+
var start = 0;
|
232
|
+
var end = -1;
|
233
|
+
var matchedSlash = true;
|
234
|
+
var i;
|
235
|
+
if (ext !== undefined && ext.length > 0 && ext.length <= pathArg.length) {
|
236
|
+
if (ext.length === pathArg.length && ext === pathArg)
|
237
|
+
return '';
|
238
|
+
var extIdx = ext.length - 1;
|
239
|
+
var firstNonSlashEnd = -1;
|
240
|
+
for (i = pathArg.length - 1; i >= 0; --i) {
|
241
|
+
var code = pathArg.charCodeAt(i);
|
242
|
+
if (code === 47 /*/*/) {
|
243
|
+
if (!matchedSlash) {
|
244
|
+
start = i + 1;
|
245
|
+
break;
|
246
|
+
}
|
247
|
+
}
|
248
|
+
else {
|
249
|
+
if (firstNonSlashEnd === -1) {
|
250
|
+
matchedSlash = false;
|
251
|
+
firstNonSlashEnd = i + 1;
|
252
|
+
}
|
253
|
+
if (extIdx >= 0) {
|
254
|
+
if (code === ext.charCodeAt(extIdx)) {
|
255
|
+
if (--extIdx === -1) {
|
256
|
+
end = i;
|
257
|
+
}
|
258
|
+
}
|
259
|
+
else {
|
260
|
+
extIdx = -1;
|
261
|
+
end = firstNonSlashEnd;
|
262
|
+
}
|
263
|
+
}
|
264
|
+
}
|
265
|
+
}
|
266
|
+
if (start === end)
|
267
|
+
end = firstNonSlashEnd;
|
268
|
+
else if (end === -1)
|
269
|
+
end = pathArg.length;
|
270
|
+
return pathArg.slice(start, end);
|
271
|
+
}
|
272
|
+
else {
|
273
|
+
for (i = pathArg.length - 1; i >= 0; --i) {
|
274
|
+
if (pathArg.charCodeAt(i) === 47 /*/*/) {
|
275
|
+
if (!matchedSlash) {
|
276
|
+
start = i + 1;
|
277
|
+
break;
|
278
|
+
}
|
279
|
+
}
|
280
|
+
else if (end === -1) {
|
281
|
+
matchedSlash = false;
|
282
|
+
end = i + 1;
|
283
|
+
}
|
284
|
+
}
|
285
|
+
if (end === -1)
|
286
|
+
return '';
|
287
|
+
return pathArg.slice(start, end);
|
288
|
+
}
|
289
|
+
},
|
290
|
+
extname: function extname(pathArg) {
|
291
|
+
assertPath(pathArg);
|
292
|
+
var startDot = -1;
|
293
|
+
var startPart = 0;
|
294
|
+
var end = -1;
|
295
|
+
var matchedSlash = true;
|
296
|
+
var preDotState = 0;
|
297
|
+
for (var i = pathArg.length - 1; i >= 0; --i) {
|
298
|
+
var code = pathArg.charCodeAt(i);
|
299
|
+
if (code === 47 /*/*/) {
|
300
|
+
if (!matchedSlash) {
|
301
|
+
startPart = i + 1;
|
302
|
+
break;
|
303
|
+
}
|
304
|
+
continue;
|
305
|
+
}
|
306
|
+
if (end === -1) {
|
307
|
+
matchedSlash = false;
|
308
|
+
end = i + 1;
|
309
|
+
}
|
310
|
+
if (code === 46 /*.*/) {
|
311
|
+
if (startDot === -1)
|
312
|
+
startDot = i;
|
313
|
+
else if (preDotState !== 1)
|
314
|
+
preDotState = 1;
|
315
|
+
}
|
316
|
+
else if (startDot !== -1) {
|
317
|
+
preDotState = -1;
|
318
|
+
}
|
319
|
+
}
|
320
|
+
if (startDot === -1 || end === -1 ||
|
321
|
+
preDotState === 0 ||
|
322
|
+
preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
|
323
|
+
return '';
|
324
|
+
}
|
325
|
+
return pathArg.slice(startDot, end);
|
326
|
+
},
|
327
|
+
format: function format(pathObject) {
|
328
|
+
if (pathObject === null || typeof pathObject !== 'object') {
|
329
|
+
throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof pathObject);
|
330
|
+
}
|
331
|
+
return _format('/', pathObject);
|
332
|
+
},
|
333
|
+
parse: function parse(pathArg) {
|
334
|
+
assertPath(pathArg);
|
335
|
+
var ret = { root: '', dir: '', base: '', ext: '', name: '' };
|
336
|
+
if (pathArg.length === 0)
|
337
|
+
return ret;
|
338
|
+
var code = pathArg.charCodeAt(0);
|
339
|
+
var isAbsolute = code === 47 /*/*/;
|
340
|
+
var start;
|
341
|
+
if (isAbsolute) {
|
342
|
+
ret.root = '/';
|
343
|
+
start = 1;
|
344
|
+
}
|
345
|
+
else {
|
346
|
+
start = 0;
|
347
|
+
}
|
348
|
+
var startDot = -1;
|
349
|
+
var startPart = 0;
|
350
|
+
var end = -1;
|
351
|
+
var matchedSlash = true;
|
352
|
+
var i = pathArg.length - 1;
|
353
|
+
var preDotState = 0;
|
354
|
+
for (; i >= start; --i) {
|
355
|
+
code = pathArg.charCodeAt(i);
|
356
|
+
if (code === 47 /*/*/) {
|
357
|
+
if (!matchedSlash) {
|
358
|
+
startPart = i + 1;
|
359
|
+
break;
|
360
|
+
}
|
361
|
+
continue;
|
362
|
+
}
|
363
|
+
if (end === -1) {
|
364
|
+
matchedSlash = false;
|
365
|
+
end = i + 1;
|
366
|
+
}
|
367
|
+
if (code === 46 /*.*/) {
|
368
|
+
if (startDot === -1)
|
369
|
+
startDot = i;
|
370
|
+
else if (preDotState !== 1)
|
371
|
+
preDotState = 1;
|
372
|
+
}
|
373
|
+
else if (startDot !== -1) {
|
374
|
+
preDotState = -1;
|
375
|
+
}
|
376
|
+
}
|
377
|
+
if (startDot === -1 || end === -1 ||
|
378
|
+
preDotState === 0 ||
|
379
|
+
preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
|
380
|
+
if (end !== -1) {
|
381
|
+
if (startPart === 0 && isAbsolute)
|
382
|
+
ret.base = ret.name = pathArg.slice(1, end);
|
383
|
+
else
|
384
|
+
ret.base = ret.name = pathArg.slice(startPart, end);
|
385
|
+
}
|
386
|
+
}
|
387
|
+
else {
|
388
|
+
if (startPart === 0 && isAbsolute) {
|
389
|
+
ret.name = pathArg.slice(1, startDot);
|
390
|
+
ret.base = pathArg.slice(1, end);
|
391
|
+
}
|
392
|
+
else {
|
393
|
+
ret.name = pathArg.slice(startPart, startDot);
|
394
|
+
ret.base = pathArg.slice(startPart, end);
|
395
|
+
}
|
396
|
+
ret.ext = pathArg.slice(startDot, end);
|
397
|
+
}
|
398
|
+
if (startPart > 0)
|
399
|
+
ret.dir = pathArg.slice(0, startPart - 1);
|
400
|
+
else if (isAbsolute)
|
401
|
+
ret.dir = '/';
|
402
|
+
return ret;
|
403
|
+
},
|
404
|
+
sep: '/',
|
405
|
+
delimiter: ':',
|
406
|
+
win32: {
|
407
|
+
normalize: (p) => {
|
408
|
+
return p;
|
409
|
+
}
|
410
|
+
},
|
411
|
+
posix: null
|
412
|
+
};
|
413
|
+
;
|
414
|
+
({}); // @--end-of-file-for-module=tnp-core lib/node-path-mock.ts
|
415
415
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1wYXRoLW1vY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItYnVuZGxlL3RucC1jb3JlL3Byb2plY3RzL3RucC1jb3JlL3NyYy9saWIvbm9kZS1wYXRoLW1vY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBUyxVQUFVLENBQUMsSUFBSTtJQUN0QixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUM1QixNQUFNLElBQUksU0FBUyxDQUFDLGlEQUFpRCxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUMvRjtBQUNILENBQUM7QUFHRCxTQUFTLG9CQUFvQixDQUFDLElBQUksRUFBRSxjQUFjO0lBQ2hELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNiLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25CLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksSUFBSSxDQUFDO0lBQ1QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDckMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDakIsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdkIsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDLEtBQUs7WUFDeEIsTUFBTTs7WUFFTixJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNsQixJQUFJLElBQUksS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFO1lBQ3JCLElBQUksU0FBUyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTthQUV0QztpQkFBTSxJQUFJLFNBQVMsS0FBSyxD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UUFBUSxDQUFDLENBQUM7Z0JBQzlDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDMUM7WUFDRCxHQUFHLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxTQUFTLEdBQUcsQ0FBQztZQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQU0sSUFBSSxVQUFVO1lBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFFakcsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsR0FBRyxFQUFFLEdBQUc7SUFDUixTQUFTLEVBQUUsR0FBRztJQUNkLEtBQUssRUFBRTtRQUNMLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2YsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO0tBQ0Y7SUFDRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFHRCxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLDJEQUEyRCIsInNvdXJjZXNDb250ZW50IjpbIlxuZnVuY3Rpb24gYXNzZXJ0UGF0aChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdbZmlyZWRldi1jb3JlXSBQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBKU09OLnN0cmluZ2lmeShwYXRoKSk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBub3JtYWxpemVTdHJpbmdQb3NpeChwYXRoLCBhbGxvd0Fib3ZlUm9vdCkge1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBsYXN0U2VnbWVudExlbmd0aCA9IDA7XG4gIHZhciBsYXN0U2xhc2ggPSAtMTtcbiAgdmFyIGRvdHMgPSAwO1xuICB2YXIgY29kZTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPD0gcGF0aC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChpIDwgcGF0aC5sZW5ndGgpXG4gICAgICBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgIGVsc2UgaWYgKGNvZGUgPT09IDQ3IC8qLyovKVxuICAgICAgYnJlYWs7XG4gICAgZWxzZVxuICAgICAgY29kZSA9IDQ3IC8qLyovO1xuICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuICAgICAgaWYgKGxhc3RTbGFzaCA9PT0gaSAtIDEgfHwgZG90cyA9PT0gMSkge1xuXG4gICAgICB9IGVsc2UgaWYgKGxhc3RTbGFzaCAhPT0gaSAtIDEgJiYgZG90cyA9PT0gMikge1xuICAgICAgICBpZiAocmVzLmxlbmd0aCA8IDIgfHwgbGFzdFNlZ21lbnRMZW5ndGggIT09IDIgfHwgcmVzLmNoYXJDb2RlQXQocmVzLmxlbmd0aCAtIDEpICE9PSA0NiAvKi4qLyB8fCByZXMuY2hhckNvZGVBdChyZXMubGVuZ3RoIC0gMikgIT09IDQ2IC8qLiovKSB7XG4gICAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICB2YXIgbGFzdFNsYXNoSW5kZXggPSByZXMubGFzdEluZGV4T2YoJy8nKTtcbiAgICAgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCAhPT0gcmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJlcyA9ICcnO1xuICAgICAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXMgPSByZXMuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpO1xuICAgICAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gcmVzLmxlbmd0aCAtIDEgLSByZXMubGFzdEluZGV4T2YoJy8nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsYXN0U2xhc2ggPSBpO1xuICAgICAgICAgICAgICBkb3RzID0gMDtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXMubGVuZ3RoID09PSAyIHx8IHJlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJlcyA9ICcnO1xuICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwO1xuICAgICAgICAgICAgbGFzdFNsYXNoID0gaTtcbiAgICAgICAgICAgIGRvdHMgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgICAgICAgIGlmIChyZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJlcyArPSAnLy4uJztcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXMgPSAnLi4nO1xuICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAwKVxuICAgICAgICAgIHJlcyArPSAnLycgKyBwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmVzID0gcGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpKTtcbiAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSBpIC0gbGFzdFNsYXNoIC0gMTtcbiAgICAgIH1cbiAgICAgIGxhc3RTbGFzaCA9IGk7XG4gICAgICBkb3RzID0gMDtcbiAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDQ2IC8qLiovICYmIGRvdHMgIT09IC0xKSB7XG4gICAgICArK2RvdHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvdHMgPSAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gX2Zvcm1hdChzZXAsIHBhdGhPYmplY3QpIHtcbiAgdmFyIGRpciA9IHBhdGhPYmplY3QuZGlyIHx8IHBhdGhPYmplY3Qucm9vdDtcbiAgdmFyIGJhc2UgPSBwYXRoT2JqZWN0LmJhc2UgfHwgKHBhdGhPYmplY3QubmFtZSB8fCAnJykgKyAocGF0aE9iamVjdC5leHQgfHwgJycpO1xuICBpZiAoIWRpcikge1xuICAgIHJldHVybiBiYXNlO1xuICB9XG4gIGlmIChkaXIgPT09IHBhdGhPYmplY3Qucm9vdCkge1xuICAgIHJldHVybiBkaXIgKyBiYXNlO1xuICB9XG4gIHJldHVybiBkaXIgKyBzZXAgKyBiYXNlO1xufVxuXG5leHBvcnQgY29uc3QgcGF0aCA9IHtcblxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHBhdGhUb1Jlc292bGUpIHtcbiAgICByZXR1cm4gcGF0aFRvUmVzb3ZsZTtcbiAgfSxcblxuICBub3JtYWxpemU6IGZ1bmN0aW9uIG5vcm1hbGl6ZShwYXRoQXJnKSB7XG4gICAgYXNzZXJ0UGF0aChwYXRoQXJnKTtcblxuICAgIGlmIChwYXRoQXJnLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcuJztcblxuICAgIHZhciBpc0Fic29sdXRlID0gcGF0aEFyZy5jaGFyQ29kZUF0KDApID09PSA0NyAvKi8qLztcbiAgICB2YXIgdHJhaWxpbmdTZXBhcmF0b3IgPSBwYXRoQXJnLmNoYXJDb2RlQXQocGF0aEFyZy5sZW5ndGggLSAxKSA9PT0gNDcgLyovKi87XG5cblxuICAgIHBhdGhBcmcgPSBub3JtYWxpemVTdHJpbmdQb3NpeChwYXRoQXJnLCAhaXNBYnNvbHV0ZSk7XG5cbiAgICBpZiAocGF0aEFyZy5sZW5ndGggPT09IDAgJiYgIWlzQWJzb2x1dGUpIHBhdGhBcmcgPSAnLic7XG4gICAgaWYgKHBhdGhBcmcubGVuZ3RoID4gMCAmJiB0cmFpbGluZ1NlcGFyYXRvcikgcGF0aEFyZyArPSAnLyc7XG5cbiAgICBpZiAoaXNBYnNvbHV0ZSkgcmV0dXJuICcvJyArIHBhdGhBcmc7XG4gICAgcmV0dXJuIHBhdGhBcmc7XG4gIH0sXG5cbiAgaXNBYnNvbHV0ZTogZnVuY3Rpb24gaXNBYnNvbHV0ZShwYXRoQXJnKSB7XG4gICAgYXNzZXJ0UGF0aChwYXRoQXJnKTtcbiAgICByZXR1cm4gcGF0aEFyZy5sZW5ndGggPiAwICYmIHBhdGhBcmcuY2hhckNvZGVBdCgwKSA9PT0gNDcgLyovKi87XG4gIH0sXG5cbiAgam9pbjogZnVuY3Rpb24gam9pbigpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiAnLic7XG4gICAgdmFyIGpvaW5lZDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGFzc2VydFBhdGgoYXJnKTtcbiAgICAgIGlmIChhcmcubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoam9pbmVkID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgam9pbmVkID0gYXJnO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgam9pbmVkICs9ICcvJyArIGFyZztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGpvaW5lZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuICcuJztcbiAgICByZXR1cm4gcGF0aC5ub3JtYWxpemUoam9pbmVkKTtcbiAgfSxcblxuICByZWxhdGl2ZTogZnVuY3Rpb24gcmVsYXRpdmUoZnJvbSwgdG8pIHtcbiAgICBhc3NlcnRQYXRoKGZyb20pO1xuICAgIGFzc2VydFBhdGgodG8pO1xuXG4gICAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gJyc7XG5cbiAgICBmcm9tID0gcGF0aC5yZXNvbHZlKGZyb20pO1xuICAgIHRvID0gcGF0aC5yZXNvbHZlKHRvKTtcblxuICAgIGlmIChmcm9tID09PSB0bykgcmV0dXJuICcnO1xuXG5cbiAgICB2YXIgZnJvbVN0YXJ0ID0gMTtcbiAgICBmb3IgKDsgZnJvbVN0YXJ0IDwgZnJvbS5sZW5ndGg7ICsrZnJvbVN0YXJ0KSB7XG4gICAgICBpZiAoZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCkgIT09IDQ3IC8qLyovKVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZyb21FbmQgPSBmcm9tLmxlbmd0aDtcbiAgICB2YXIgZnJvbUxlbiA9IGZyb21FbmQgLSBmcm9tU3RhcnQ7XG5cblxuICAgIHZhciB0b1N0YXJ0ID0gMTtcbiAgICBmb3IgKDsgdG9TdGFydCA8IHRvLmxlbmd0aDsgKyt0b1N0YXJ0KSB7XG4gICAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0KSAhPT0gNDcgLyovKi8pXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgdG9FbmQgPSB0by5sZW5ndGg7XG4gICAgdmFyIHRvTGVuID0gdG9FbmQgLSB0b1N0YXJ0O1xuXG5cbiAgICB2YXIgbGVuZ3RoID0gZnJvbUxlbiA8IHRvTGVuID8gZnJvbUxlbiA6IHRvTGVuO1xuICAgIHZhciBsYXN0Q29tbW9uU2VwID0gLTE7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDw9IGxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAoaSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgIGlmICh0b0xlbiA+IGxlbmd0aCkge1xuICAgICAgICAgIGlmICh0by5jaGFyQ29kZUF0KHRvU3RhcnQgKyBpKSA9PT0gNDcgLyovKi8pIHtcblxuXG4gICAgICAgICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCArIGkgKyAxKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDApIHtcblxuXG4gICAgICAgICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCArIGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmcm9tTGVuID4gbGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQgKyBpKSA9PT0gNDcgLyovKi8pIHtcblxuXG4gICAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gaTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDApIHtcblxuXG4gICAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB2YXIgZnJvbUNvZGUgPSBmcm9tLmNoYXJDb2RlQXQoZnJvbVN0YXJ0ICsgaSk7XG4gICAgICB2YXIgdG9Db2RlID0gdG8uY2hhckNvZGVBdCh0b1N0YXJ0ICsgaSk7XG4gICAgICBpZiAoZnJvbUNvZGUgIT09IHRvQ29kZSlcbiAgICAgICAgYnJlYWs7XG4gICAgICBlbHNlIGlmIChmcm9tQ29kZSA9PT0gNDcgLyovKi8pXG4gICAgICAgIGxhc3RDb21tb25TZXAgPSBpO1xuICAgIH1cblxuICAgIHZhciBvdXQgPSAnJztcblxuXG4gICAgZm9yIChpID0gZnJvbVN0YXJ0ICsgbGFzdENvbW1vblNlcCArIDE7IGkgPD0gZnJvbUVuZDsgKytpKSB7XG4gICAgICBpZiAoaSA9PT0gZnJvbUVuZCB8fCBmcm9tLmNoYXJDb2RlQXQoaSkgPT09IDQ3IC8qLyovKSB7XG4gICAgICAgIGlmIChvdXQubGVuZ3RoID09PSAwKVxuICAgICAgICAgIG91dCArPSAnLi4nO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgb3V0ICs9ICcvLi4nO1xuICAgICAgfVxuICAgIH1cblxuXG5cbiAgICBpZiAob3V0Lmxlbmd0aCA+IDApXG4gICAgICByZXR1cm4gb3V0ICsgdG8uc2xpY2UodG9TdGFydCArIGxhc3RDb21tb25TZXApO1xuICAgIGVsc2Uge1xuICAgICAgdG9TdGFydCArPSBsYXN0Q29tbW9uU2VwO1xuICAgICAgaWYgKHRvLmNoYXJDb2RlQXQodG9TdGFydCkgPT09IDQ3IC8qLyovKVxuICAgICAgICArK3RvU3RhcnQ7XG4gICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCk7XG4gICAgfVxuICB9LFxuXG4gIF9tYWtlTG9uZzogZnVuY3Rpb24gX21ha2VMb25nKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aDtcbiAgfSxcblxuICBkaXJuYW1lOiBmdW5jdGlvbiBkaXJuYW1lKHBhdGgpIHtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcuJztcbiAgICB2YXIgY29kZSA9IHBhdGguY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgaGFzUm9vdCA9IGNvZGUgPT09IDQ3IC8qLyovO1xuICAgIHZhciBlbmQgPSAtMTtcbiAgICB2YXIgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDE7IC0taSkge1xuICAgICAgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgIGVuZCA9IGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVuZCA9PT0gLTEpIHJldHVybiBoYXNSb290ID8gJy8nIDogJy4nO1xuICAgIGlmIChoYXNSb290ICYmIGVuZCA9PT0gMSkgcmV0dXJuICcvLyc7XG4gICAgcmV0dXJuIHBhdGguc2xpY2UoMCwgZW5kKTtcbiAgfSxcblxuICBiYXNlbmFtZTogZnVuY3Rpb24gYmFzZW5hbWUocGF0aEFyZywgZXh0KSB7XG4gICAgaWYgKGV4dCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBleHQgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImV4dFwiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICBhc3NlcnRQYXRoKHBhdGhBcmcpO1xuXG4gICAgdmFyIHN0YXJ0ID0gMDtcbiAgICB2YXIgZW5kID0gLTE7XG4gICAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gICAgdmFyIGk7XG5cbiAgICBpZiAoZXh0ICE9PSB1bmRlZmluZWQgJiYgZXh0Lmxlbmd0aCA+IDAgJiYgZXh0Lmxlbmd0aCA8PSBwYXRoQXJnLmxlbmd0aCkge1xuICAgICAgaWYgKGV4dC5sZW5ndGggPT09IHBhdGhBcmcubGVuZ3RoICYmIGV4dCA9PT0gcGF0aEFyZykgcmV0dXJuICcnO1xuICAgICAgdmFyIGV4dElkeCA9IGV4dC5sZW5ndGggLSAxO1xuICAgICAgdmFyIGZpcnN0Tm9uU2xhc2hFbmQgPSAtMTtcbiAgICAgIGZvciAoaSA9IHBhdGhBcmcubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGNvZGUgPSBwYXRoQXJnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuXG5cbiAgICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZmlyc3ROb25TbGFzaEVuZCA9PT0gLTEpIHtcblxuXG4gICAgICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgICAgIGZpcnN0Tm9uU2xhc2hFbmQgPSBpICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV4dElkeCA+PSAwKSB7XG5cbiAgICAgICAgICAgIGlmIChjb2RlID09PSBleHQuY2hhckNvZGVBdChleHRJZHgpKSB7XG4gICAgICAgICAgICAgIGlmICgtLWV4dElkeCA9PT0gLTEpIHtcblxuXG4gICAgICAgICAgICAgICAgZW5kID0gaTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcblxuXG4gICAgICAgICAgICAgIGV4dElkeCA9IC0xO1xuICAgICAgICAgICAgICBlbmQgPSBmaXJzdE5vblNsYXNoRW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RhcnQgPT09IGVuZCkgZW5kID0gZmlyc3ROb25TbGFzaEVuZDsgZWxzZSBpZiAoZW5kID09PSAtMSkgZW5kID0gcGF0aEFyZy5sZW5ndGg7XG4gICAgICByZXR1cm4gcGF0aEFyZy5zbGljZShzdGFydCwgZW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gcGF0aEFyZy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICBpZiAocGF0aEFyZy5jaGFyQ29kZUF0KGkpID09PSA0NyAvKi8qLykge1xuXG5cbiAgICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlbmQgPT09IC0xKSB7XG5cblxuICAgICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgICAgIGVuZCA9IGkgKyAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmQgPT09IC0xKSByZXR1cm4gJyc7XG4gICAgICByZXR1cm4gcGF0aEFyZy5zbGljZShzdGFydCwgZW5kKTtcbiAgICB9XG4gIH0sXG5cbiAgZXh0bmFtZTogZnVuY3Rpb24gZXh0bmFtZShwYXRoQXJnKSB7XG4gICAgYXNzZXJ0UGF0aChwYXRoQXJnKTtcbiAgICB2YXIgc3RhcnREb3QgPSAtMTtcbiAgICB2YXIgc3RhcnRQYXJ0ID0gMDtcbiAgICB2YXIgZW5kID0gLTE7XG4gICAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG5cblxuICAgIHZhciBwcmVEb3RTdGF0ZSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHBhdGhBcmcubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHZhciBjb2RlID0gcGF0aEFyZy5jaGFyQ29kZUF0KGkpO1xuICAgICAgaWYgKGNvZGUgPT09IDQ3IC8qLyovKSB7XG5cblxuICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgIHN0YXJ0UGFydCA9IGkgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGVuZCA9PT0gLTEpIHtcblxuXG4gICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgICBlbmQgPSBpICsgMTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2RlID09PSA0NiAvKi4qLykge1xuXG4gICAgICAgIGlmIChzdGFydERvdCA9PT0gLTEpXG4gICAgICAgICAgc3RhcnREb3QgPSBpO1xuICAgICAgICBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSlcbiAgICAgICAgICBwcmVEb3RTdGF0ZSA9IDE7XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0RG90ICE9PSAtMSkge1xuXG5cbiAgICAgICAgcHJlRG90U3RhdGUgPSAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhcnREb3QgPT09IC0xIHx8IGVuZCA9PT0gLTEgfHxcblxuICAgICAgcHJlRG90U3RhdGUgPT09IDAgfHxcblxuICAgICAgcHJlRG90U3RhdGUgPT09IDEgJiYgc3RhcnREb3QgPT09IGVuZCAtIDEgJiYgc3RhcnREb3QgPT09IHN0YXJ0UGFydCArIDEpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHBhdGhBcmcuc2xpY2Uoc3RhcnREb3QsIGVuZCk7XG4gIH0sXG5cbiAgZm9ybWF0OiBmdW5jdGlvbiBmb3JtYXQocGF0aE9iamVjdCkge1xuICAgIGlmIChwYXRoT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiBwYXRoT2JqZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwicGF0aE9iamVjdFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBwYXRoT2JqZWN0KTtcbiAgICB9XG4gICAgcmV0dXJuIF9mb3JtYXQoJy8nLCBwYXRoT2JqZWN0KTtcbiAgfSxcblxuICBwYXJzZTogZnVuY3Rpb24gcGFyc2UocGF0aEFyZykge1xuICAgIGFzc2VydFBhdGgocGF0aEFyZyk7XG5cbiAgICB2YXIgcmV0ID0geyByb290OiAnJywgZGlyOiAnJywgYmFzZTogJycsIGV4dDogJycsIG5hbWU6ICcnIH07XG4gICAgaWYgKHBhdGhBcmcubGVuZ3RoID09PSAwKSByZXR1cm4gcmV0O1xuICAgIHZhciBjb2RlID0gcGF0aEFyZy5jaGFyQ29kZUF0KDApO1xuICAgIHZhciBpc0Fic29sdXRlID0gY29kZSA9PT0gNDcgLyovKi87XG4gICAgdmFyIHN0YXJ0O1xuICAgIGlmIChpc0Fic29sdXRlKSB7XG4gICAgICByZXQucm9vdCA9ICcvJztcbiAgICAgIHN0YXJ0ID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSAwO1xuICAgIH1cbiAgICB2YXIgc3RhcnREb3QgPSAtMTtcbiAgICB2YXIgc3RhcnRQYXJ0ID0gMDtcbiAgICB2YXIgZW5kID0gLTE7XG4gICAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gICAgdmFyIGkgPSBwYXRoQXJnLmxlbmd0aCAtIDE7XG5cblxuXG4gICAgdmFyIHByZURvdFN0YXRlID0gMDtcblxuXG4gICAgZm9yICg7IGkgPj0gc3RhcnQ7IC0taSkge1xuICAgICAgY29kZSA9IHBhdGhBcmcuY2hhckNvZGVBdChpKTtcbiAgICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuXG5cbiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICBzdGFydFBhcnQgPSBpICsgMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPT09IC0xKSB7XG5cblxuICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgZW5kID0gaSArIDE7XG4gICAgICB9XG4gICAgICBpZiAoY29kZSA9PT0gNDYgLyouKi8pIHtcblxuICAgICAgICBpZiAoc3RhcnREb3QgPT09IC0xKSBzdGFydERvdCA9IGk7IGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKSBwcmVEb3RTdGF0ZSA9IDE7XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0RG90ICE9PSAtMSkge1xuXG5cbiAgICAgICAgcHJlRG90U3RhdGUgPSAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhcnREb3QgPT09IC0xIHx8IGVuZCA9PT0gLTEgfHxcblxuICAgICAgcHJlRG90U3RhdGUgPT09IDAgfHxcblxuICAgICAgcHJlRG90U3RhdGUgPT09IDEgJiYgc3RhcnREb3QgPT09IGVuZCAtIDEgJiYgc3RhcnREb3QgPT09IHN0YXJ0UGFydCArIDEpIHtcbiAgICAgIGlmIChlbmQgIT09IC0xKSB7XG4gICAgICAgIGlmIChzdGFydFBhcnQgPT09IDAgJiYgaXNBYnNvbHV0ZSkgcmV0LmJhc2UgPSByZXQubmFtZSA9IHBhdGhBcmcuc2xpY2UoMSwgZW5kKTsgZWxzZSByZXQuYmFzZSA9IHJldC5uYW1lID0gcGF0aEFyZy5zbGljZShzdGFydFBhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdGFydFBhcnQgPT09IDAgJiYgaXNBYnNvbHV0ZSkge1xuICAgICAgICByZXQubmFtZSA9IHBhdGhBcmcuc2xpY2UoMSwgc3RhcnREb3QpO1xuICAgICAgICByZXQuYmFzZSA9IHBhdGhBcmcuc2xpY2UoMSwgZW5kKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldC5uYW1lID0gcGF0aEFyZy5zbGljZShzdGFydFBhcnQsIHN0YXJ0RG90KTtcbiAgICAgICAgcmV0LmJhc2UgPSBwYXRoQXJnLnNsaWNlKHN0YXJ0UGFydCwgZW5kKTtcbiAgICAgIH1cbiAgICAgIHJldC5leHQgPSBwYXRoQXJnLnNsaWNlKHN0YXJ0RG90LCBlbmQpO1xuICAgIH1cblxuICAgIGlmIChzdGFydFBhcnQgPiAwKSByZXQuZGlyID0gcGF0aEFyZy5zbGljZSgwLCBzdGFydFBhcnQgLSAxKTsgZWxzZSBpZiAoaXNBYnNvbHV0ZSkgcmV0LmRpciA9ICcvJztcblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgc2VwOiAnLycsXG4gIGRlbGltaXRlcjogJzonLFxuICB3aW4zMjogeyAvLyBAdHMtaWdub3JlXG4gICAgbm9ybWFsaXplOiAocCkgPT4ge1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9LFxuICBwb3NpeDogbnVsbFxufTtcblxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dG5wLWNvcmUgbGliL25vZGUtcGF0aC1tb2NrLnRzIl19
|